diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index a28b9732104b4..4ba7d9442b680 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -26,3 +26,9 @@ bf996203dfc4b09f8dc4dd73b532f9ee49691776 bfa20cdc17d1794969331c4272c4a8d7ad523a44 bca4aa1184eca550a6d9543a93d720ba6dc10b20 + +# obj/effect/ -> obj/ +8cd28ed954d5873c1b20f35ce58aa5820803ec4c + +# datum/effect/effect/system & datum/effect/system -> datum/effect +96f09a4736ccdc33d9651aa9f162d27e3263b127 diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index de8371f9e640c..4ef640edbb517 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,17 +1 @@ -# Require reviews Core for changes to configuration, license, etc - -.github/ @Baystation12/Core -.vscode/ @Baystation12/Core - -.codebeatignore @Baystation12/Core -.editorconfig @Baystation12/Core -.git-blame-ignore-revs @Baystation12/Core -.gitattributes @Baystation12/Core -.gitignore @Baystation12/Core -SpacemanDMM.toml @Baystation12/Core - -/docs/ @Baystation12/Core -/tools/ @Baystation12/Core - -/LICENSE @Baystation12/Core -/README.md @Baystation12/Core +* @SierraBay/reviewers diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index b184b097bcbef..afb409f8b476b 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,7 +1,557 @@ -All users are expected to review [/docs/CODE_OF_CONDUCT.md](/docs/CODE_OF_CONDUCT.md) before interacting with the repository or other users. +# Contributing -Baystation12 is licensed under the GNU Affero General Public License version 3, which can be found in full in LICENSE-AGPL3.txt. +
+ Содержание -Commits with a git authorship date prior to `1420675200 +0000` (2015/01/08 00:00 GMT) are licensed under the GNU General Public License version 3, which can be found in full in LICENSE-GPL3.txt. +- [Основное](#основное) +- [Создание PR](#создание-pull-request) +- [Continuous Integration](#continuous-integration) +- [Процесс прохождения Code Review](#процесс-прохождения-code-review) +- [Договоренности по написанию кода](#договоренности-по-написанию-кода) + - [Правила именования переменных и функций](#правила-именования-переменных-и-функций) + - [Написание функций](#написание-функций) + - [Общие правила](#общие-правила) +- [Разработка безопасного кода](#разработка-безопасного-кода) +- [Файлы](#файлы) +- [Фишки и лайфхаки Dream Maker](#фишки-и-лайфхаки-dream-maker) -All commits whose authorship dates on or after `1420675200 +0000` are assumed to be licensed under AGPL v3, if you wish to license under GPL v3 please make this clear in the commit message and any added files. \ No newline at end of file +
+ +# Основное + +- Официальный язык нашего сообщества - русский. Коммиты, пулл реквесты и ишью стоит писать на нём, либо на английском. Однако в исходных кодах русский язык запрещен в связи с проблемами, связанными с кодировками. +- Мы ожидаем, что вы поможете нам поддерживать код, который вы добавили. Скорее всего мы к вам обратимся в случае возникновения каких-то проблем, связанных с вашими изменениями, в том числе рантаймами или багами. + +# Создание Pull Request + +Здесь приведен небольшой чек-лист важных вещей, на которые обязательно нужно обращать внимание при открытии PR'а. Пренебрежение этим разделом может увеличить время проверки ваших изменений и принятия в сборку вплоть до бесконечности! + +- **Заголовок PR'а - цель его изменений.** + У любого PR'а должна быть конкретная цель, которая должна быть указана в заголовке. PR не должен содержать изменений, которые не относятся к указанной цели. Если цель PR'а слишком большая, чтобы уместить её в одном заголовке - подумайте над тем, чтобы разбить свой PR на более мелкие части. +- **Изменения востребованы.** + Перед началом разработки убедитесь, что то, что вы хотите сделать - востребовано и будет принято. Для этого нужно создать предложку в дискорде и дождаться её прохождения. Также изменения очевидно востребованы, если на них есть соответствующий ишью. Чтобы ваши изменения ТОЧНО были приняты - лучше убедиться в том, что у вас есть соответстующий ишью с подтверждением, либо предложка, так как любые договоренности в дискорде могут потеряться или оказаться неактуальными. +- **Подробное описание.** + В описании PR'а должно быть подробное описание того, зачем он нужен и что в нем происходит. PR не должен содержать изменений, о которых ничего не написано в описании. +- **Привяжите ишью.** + Если PR решает какие-то ишью, то они должны быть указаны в описании специальным образом, например, `close #23`, чтобы Github смог их автоматически привязать к вашим изменениям. Подробнее можно почитать тут: https://help.github.com/articles/closing-issues-via-commit-messages. +- **Проверьте свой код.** + Открывайте PR только если вы уверены в его работоспособности. Это означает, что вы проверили каждую строчку своих изменений, а также **проверили свои изменения локально**, запустив сервер на своем компьютере. Если что-то невозможно проверить полностью или вы считаете, что на какую-то часть изменений нужно обратить пристальное внимание проверяющих, то укажите это отдельно в описании. Конечно мы также будем проверять ваши изменения, но вы не должны полагаться на то, что ваши баги заметит кто-то другой и исправит за вас. +- **Ваш код соответствует принятым договоренностям по написанию кода.** + Подробнее смотрите раздел "[Договоренности по написанию кода](#договоренности-по-написанию-кода)" ниже. +- **Ваш код - модульный.** Изменения в кода игры вне модов очень не приветствуются и скорее всего будут отклонены. Код обязан соотвествовать [руководству по модуляризации](/mods/README.md). + +# Continuous Integration + +Каждый PR проходит проверку на несколько вещей: + +- Наличие и корректность чейнджлога. +- Наличие ошибок найденные статическим анализатором DreamChecker. +- Наличие нарушений стиля кода. +- Соответствие [руководству по модуляризации](/mods/README.md). + +Наличие и корректность чейнджлога проверяется при каждом открытии PR'а, редактировании текста в теле PR'а, добавлении и удаления меток на PR. + +# Процесс прохождения Code Review + +- **Аппрув разработчиков.** + Чтобы PR был принят - он должен быть аппрувнут активными разработчиками сервера. +- **Аппрув администрации и игроков.** + Если в PR есть изменения игровой логики, то он должен быть аппрувнут голосованием, либо администрацией. Аппрув не нужен, если PR выполнен в рамках ишью, который был ранее аппрувнут голосованием/администрацией. Также аппрув не нужен для фикса багов и любых изменений, которые не затрагивают игровой опыт игроков (рефакторинг, оптимизации, фичи для администраторов и подобное). +- **Проверка на локальной сборке.** + Принимаются только PR'ы, проверенные локально. Если сам разработчик не проверяет свои изменения, то проверка проходит тщательнее, из-за чего принятие изменений затягивается. +- **Вливание изменений в основную ветку.** + Если коммиты в PR соответствуют правилам именования, при мерже не возникает конфликтов и каждый коммит по отдельности не ломает сборку, то принимать следует с помощью rebase. Если коммиты в PR соответствуют правилам именования, но принять её с помощью rebase невозможно т.к. на каких-то коммитах из PR сборка сломана, или же из-за конфликтов, то принимать нужно с помощью merge. Если хотя бы один коммит в PR не соответствует правилам именования, то весь PR может быть принят только через squash с названием, соответствующим правилам. +- **Вливание изменений на сервер.** + Ветка разработки называется `dev-sierra`. Перед обновлением серверов проверенные изменения из `dev-sierra` вливаются в репозиторий `ss220-space/Baystation12-1`. В обоих репозиториях должна поддерживаться чистая история коммитов, которые соответствуют правилам именования. На сервер изменения должны попадать вместе с чейнжлогом для максимального оповещения игроков о статусе разработки. + +# Договоренности по написанию кода + +> By ChaoticOnyx + +## Правила именования переменных и функций + +### Имена должны передавать намерения программиста + +Имя переменной, функции или типа должно сообщить, почему эта переменная существует, что она делает и как используется. Если имя требует дополнительных комментариев, значит, оно не передает намерений программиста. Лучше написать, что именно измеряется и в каких именно единицах. + +Не бойтесь использовать длинные имена: длинное содержательное имя лучше короткого невразумительного. + +Пример хорошего названия переменной: days_since_creation; +Цель: убрать неочевидность. + +### Избегайте неинформативных слов в названиях + +Неинформативные слова избыточны. Слово variable никогда не должно встречаться в именах переменных. Слово object никогда не должно встречаться в именах объектов. Чем имя name_string лучше name? Разве имя может быть, скажем, вещественным числом? + +### Избегайте сокращений, старайтесь выбирать удобопроизносимые имена + +russian_to_utf намного лучше rustoutf. + +### Выбирайте имена, удобные для поиска + +Чем дольше время жизни переменной - тем длиннее должно быть её название. Однобуквенные имена могут использоваться только для локальных переменных в коротких методах. + +### Имена типов + +Имена типов должны представлять собой существительные и их комбинации: traitor, profession, id_card и request_parser. Старайтесь не использовать в именах классов такие слова, как manager, processor, data или info. Имя класса не должно быть глаголом. + +### Имена функций + +Имена методов представляют собой глаголы или глагольные словосочетания: explode_station, delete_ian, save и т. д. Методы чтения/записи образуются из значения и префикса get, set и is. + +### Используйте абсолютные пути + +DM позволяет писать код блоками: + +```DM +datum + datum1 + var + varname1 = 1 + varname2 + static + varname3 + varname4 + proc + proc1() + code + proc2() + code + + datum2 + varname1 = 0 + proc + proc3() + code + proc2() + ..() + code +``` + +Такой способ написания делает невозможным текстовый поиск функции или типа по коду. Единственное исключение - внутри блока описания типа можно определять переменные. + +Тот же код, написанный правильно: + +```DM +/datum/datum1 + var/varname1 + var/varname2 + var/static/varname3 + var/static/varname4 + +/datum/datum1/proc/proc1() + code +/datum/datum1/proc/proc2() + code +/datum/datum1/datum2 + varname1 = 0 +/datum/datum1/datum2/proc/proc3() + code +/datum/datum1/datum2/proc2() + ..() + code +``` + +## Написание функций + +### Компактность + +- **Первое правило:** функции должны быть компактными. +- **Второе правило:** функции должны быть еще компактнее. + +Серьезные программисты работающие в реальном мире ценой многих проб и ошибок вывели, что функции должны быть очень маленькими. Желательно, чтобы длина фукнции не превышала 20 строк. В условиях разработки SS13 кому-то это может показаться излишним, но даже в наших проектах можно заметить, что чем длиннее функция тем сложнее её поддерживать, тем больше в ней багов и тем меньшее количество людей хочет в неё лезть и с ней разбираться. + +### Правило одной операции + +Функция должна выполнять только одну операцию. Она должна выполнять ее хорошо. И ничего другого она делать не должна. Если функция выполняет только те действия, которые находятся на одном уровне под объявленным именем функции, то эта функция выполняет одну операцию. + +### Функция не должна разбиваться на секции + +Функцию, выполняющую только одну операцию, невозможно осмысленно разделить на секции. + +### Разделение команд и запросов + +Функция должна что-то делать или отвечать на какой-то вопрос, но не одновременно. Либо функция изменяет состояние объекта, либо возвращает информацию об этом объекте. Совмещение двух операций часто создает путаницу. + +## Общие правила + +### Комментарии + +Закомметированный код запрещен. + +Запрещены комментарии отвечающие на вопрос "Что делает этот код?". Вместо этого используете методы для увеличения читаемости кода выше, чтобы код объяснял себя сам. Разрешены комментарии отвечающие на вопрос "Зачем этот код нужен?". + +Также можно писать комментарии типа "TODO" и "FIXME". + +### Не избавляйтесь от проверки типов + +Запрещено использовать оператор `:`. Всегда явно преобразуйте переменную к конкретному типу. + +Плохой пример: + +```DM +var/something_general_object = ... +something_general_object:specific_type_func() +``` + +Мы узнаем, что у something_general_object нет такой функции только когда запустим сервер. Более того, когда мы это узнаем - будет непонятным что это за тип, почему у него было этой функции и какой тип на самом деле ожидался. С другой стороны, в коде: + +```DM +var/something_general_object +var/more/specified/type/O = object +ASSERT(istype(O)) // bad argument +O.specific_type_funс() +``` + +Мы явно указываем какой тип мы ожидаем и статически проверяем, что у этого типа есть такая функция. + +### Используйте ASSERT для проверок аргументов функций + +Если ваша функция расчитана на то, чтобы работать только с аргументами определенного типа или какими-то конкретными значениями - используйте ASSERT, чтобы явно это указать. Если, вдруг, случится так, что откуда-то в функцию приедет неожиданный аргумент - лучше сразу зарепортить об этом рантаймом и выйти из функции, чем пойти дальше, сделать что-то неожиданное и, может быть, даже не оставить следа о том, что фукнция сработала не так, как нужно. + +Имейте в виду, что ASSERT генерирует рантайм, что ведет к выходу из функции с возвратом null. Функция выше по стеку продолжит свое выполнение с полученным null. + +Плохой пример: + +```DM +/datum/controller/subsystem/open_space/proc/add_turf(turf/T, ...) + if(!isturf(T)) + return + ... +``` + +Если мы в функцию `add_turf` передали аргументом не turf - это очевидный баг. С таким вариантом реализации этот баг останется незамеченным и он может привести к неожиданным проблемам. Но если мы напишем так: + +```DM +/datum/controller/subsystem/open_space/proc/add_turf(turf/T, ...) + ASSERT(isturf(T)) + ... +``` + +То мы все также выйдем из функции, вернув null, но при этом запишем рантайм, который мы увидим в логах, благодаря чему сможем обнаружить и пофиксить изначальный баг, который приводит к тому, что сюда аргументом передается неверный тип. + +### Пути типов всегда должны начинаться с / + +Например: `/datum/thing`, вместо `datum/thing` + +### Пути типов всегда должны быть в нижнем регистре + +Например: `/datum/thing/blue`, вместо `datum/thing/BLUE` или `datum/thing/Blue` + +### Использование ключевого слова `var` + +Локальные переменные всегда определяйте в формате `var/type/name`, вместо `var type/name`. В аргументах функций оно избыточно, поэтому всегда опускаем и пишем просто `type/name`. + +### Табы vs пробелы + +Для индентации (отступ до текущего блока кода) всегда используем только табы. После индентации может быть выравнивание пробелами (не выравнивайте табами - иначе разъедется в редакторах с разной длиной таба). + +### Избегайте дублирования кода + +Когда вы копируете один и тот же код в разные места - появляется необходимость одинаково поддерживать этот код в двух местах. При любом изменении оригинального кода надо помнить о копии этого кода в другом месте и зачастую вносить изменения и туда. + +Чтобы избежать подобных проблем используйте наследование объектов друг от друга или же просто вынесите необходимую логику в отдельную функцию. + +### Предпочитайте `Initialize()` вместо `New()` для atom (объектов, размещаемых на карте). + +Контроллеры, используемые в нашей сборке, должны справляться с длительными операциями и лагами, но они не могут контролировать то, что происходит во время загрузки карты, когда для всех объектов вызывается New. Для любых новых объектов, без явной необходимости, используйте `Initialize`, чтобы сделать все, что вы хотели сделать в `New`. Это уменьшает количество функций вызываемых на этапе загрузки карты. Чтобы узнать больше про то, как работает `Initialize`, смотрите [`code/game/atoms.dm`](https://github.com/SierraBay/SierraBay12/blob/dev-sierra/code/game/atoms.dm) + +**NB:** Важно понимать то, как работают Initialize и последовательность их выполнения относительно New, иначе можно [словить приколы](https://github.com/ChaoticOnyx/OnyxBay/issues/3817). Initialize вызывается в /atom/New. Соответственно при создании объекта сначала вызывается New последнего типа в иерархии наследования. Дальше через ..() (если они, конечно, есть) последовательно вызываются New более ранних по иерархии типов вплоть до /atom/New, где вызывается /atom/Initialize, который точно также начинает выполняться с последнего переопределения в иерархии наследования объектов. + +Таким образом получается, что в любом New, все что находится после ..() - вызывается после всех Initialize в цепочке наследования, а все что написано до ..() - работает перед всеми Initialize в цепочке наследования. Из этого следует, что если в вашей иерархии типов перемешиваются New и Initialize, то порядок их вызова может быть немного непредсказуемым, что вызывает приколы вроде перезаписи переменной, которая определяется в чайлдовом типе, в Initialize, значением из родителького объекта, из New. Пример и подробный разбор такой баги можно [посмотреть здесь](https://github.com/ChaoticOnyx/OnyxBay/issues/3817). + +Если вы не очень поняли что написано выше, то просто следуйте одному простому правилу: + +**Старайтесь не перемешивать New и Initialize в иерархиях объектов. Если меняете один New на Initialize - меняйте сразу всей иерархии. Если в иерархии используются New, то проще использовать New в новом объекте этой иерархии**, однако в плане производительности - лучше переписать всю иерархию на Initialize. + +### Удаление объектов + +Все объекты должны всегда помечаться к удалению с помощью `qdel`. + +Использование `del` запрещено, так как эта функция запускает довольно требовательную процедуру поиска и обнуления ссылок на объект по всему коду. + +Просто "бросать" объекты без вызова `qdel` не рекомендуется, так как в таком случае не будет вызван Destroy, который, даже если еще не реализован для конкретного объекта, кто-то может захотеть добавить позже. + +Отдельно важно помнить про случаи с циклическими зависимостями, когда объекты хранят ссылки друг на друга циклически. Если такие объекты просто пометить к удалению через `qdel`, то объекты никогда не будут удалены, так как сборщик мусора будет ждать, пока ссылки на объекты закончатся (а наши объекты циклически указывают друг на друга - поэтому ссылки никогда не закончатся). В таком случае нужно делать не только помечать объекты к удалению через `qdel`, но и занулять какую-то часть ссылок так, чтобы избавиться от цикла. С помощью макроса `QDEL_NULL(obj)` можно одной строчкой пометить `obj` к удалению и занулить ссылку. + +Пример реализации циклических объектов: + +```DM +/mob/living/simple_animal + ... + var/datum/mob_ai/mob_ai + +/mob/living/simple_animal/Initialize() + . = ..() + mob_ai = new() // simple_mob создает и владеет своим искусственным интеллектом + mob_ai.holder = src // искусственному интеллекту нужно знать кем он управляет + // получили циклическую ссылку simple_mob <-> mob_ai объектов друг на друга + +/mob/living/simple_animal/Destroy() + QDEL_NULL(mob_ai) // когда моба удаляют с карты нам нужно разорвать циклическую ссылку. Убиваем ссылку на mob_ai. + // в итоге на mob_ai больше никто в мире не ссылается, сборщик мусора его собирает, а следом собирает simple_mob. + // the same as: + // qdel(mob_ai) // тоже самое, что делает макрос QDEL_NULL в раскрытом виде + // mob_ai = null + + return ..() +``` + +### Перемещайте объекты с помощью forceMove(newpos) + +В отличие от `loc = newpos`, `forceMove` может переопределяться и в нем написано много важной логики, которая нужна при перемещении объектов из одного места в другое. + +### Не используйте магические значения + +В коде не должно быть "брошенных" числовых/строчных или каких-либо еще значений, смысл которых неясен из контекста или которые могут быть переиспользованы. Определяйте их через макрос, если они нужны в глобальном скоупе, или создавайте локальную переменную с понятным названием. + +Пример: + +```DM +/datum/proc/do_the_thing(thing_to_do) + switch(thing_to_do) + if(1) + (...) + if(2) + (...) +``` + +Здесь неясно, что означают "1" и "2"! Вместо этого можно было бы написать: + +```DM +#define DO_THE_THING_REALLY_HARD 1 +#define DO_THE_THING_EFFICIENTLY 2 +/datum/proc/do_the_thing(thing_to_do) + switch(thing_to_do) + if(DO_THE_THING_REALLY_HARD) + (...) + if(DO_THE_THING_EFFICIENTLY) + (...) +``` + +Так получается гораздо понятнее, что увеличивает читаемость вашего кода. + +Еще пример: + +```DM +/datun/gamemode/proc/create_events() + events.Add(new /datum/event(90, list(/datum/role/hos))) + events.Add(new /datum/event(50, list(/datum/role/officer))) +``` + +В примере понятно, что мы задаем ивенты для какого-то игрового режима, однако непонятно что за аргументы передаются внутрь - это как раз "магические" значения. Чтобы сделать понятнее, можно, например, явно указать переменные, которые мы присваиваем: + +```DM +/datun/gamemode/proc/create_events() + events.Add(new /datum/event(chance=90, requires_roles=list(/datum/role/hos))) + events.Add(new /datum/event(chance=50, requires_roles=list(/datum/role/officer))) +``` + +### Операторы контроля выполнения + +(if, while, for и другие) + +- Все операторы контроля выполнения не должны содержать другого кода на той же строчке (`if (blah) return`) +- Все операторы контроля выполнения, сравнивающие переменную с каким-то значением, должны использовать формулу `переменная` `оператор` `значение`, не наоборот (например: `if (count <= 10)`, вместо `if (10 >= count)`) + +### Оператор in + +Оператор in имеет наименьший приоритет (это не указано в рефе), поэтому его всегда нужно заключать в скобки: `if(A && (A in foo_list))`. + +### Оператор as запрещено использовать в проках, не использующихся как verb + +Потому что не имеет смысла + +### Используйте макросы оформления текста SPAN_NOTICE, SPAN_WARNING, SPAN_DANGER и другие + +Вместо `to_chat(usr, "[text]")` используйте `to_chat(usr, SPAN_WARNING(text))`. + +### Используйте ранний return + +Не стоит строчить многоуровневые конструкции из блоков if, когда того же результата можно достичь ранним возвратом из функции + +Вот так делать не стоит: + +```DM +/datum/datum1/proc/proc1() + if (thing1) + do stuff + if (!thing2) + do more stuff + if (thing3 == 30) + do extra stuff +``` + +А так уже лучше: + +```DM +/datum/datum1/proc/proc1() + if (!thing1) + return + do stuff + if (thing2) + return + do more stuff + if (thing3 != 30) + return + do extra stuff +``` + +### TRUE/FALSE для логических значений + +Во всех случаях, когда нужно логическое значение, вместо 1/0 используйте TRUE/FALSE. + +### Global против static + +В DM есть ключевое слово global, которое используется в двух случаях: + +1. Внутри типа (или внутри функции) мы хотим определить переменную общую для всех объектов этого типа (для всех вызовов этой функции). (http://www.byond.com/docs/ref/#/var/global). +2. Внутри функции мы хотим использовать переменную из глобального скоупа, когда у нас в локальном скоупе уже есть переменная с таким же названием. (http://www.byond.com/docs/ref/#/proc/var/global) Так использовать global не стоит! См. следующее правило. + +Так как в первом случае речь идет не о видимости переменной, а том, что она общая для разных экземпляров типа (вызовов функции), то название ключевого слова global может кого-то запутать. Поэтому вместо него в первом случае мы стараемся использовать ключевое слово static, которое отсутствует в документации, но полностью заменяет global в этом случае и лучше описывает суть происходящего. + +Отдельно обратите внимание, что все переменные в BYOND имеют глобальную видимость с точки зрения доступа, поэтому global (и static) в глобальном скоупе не имеет смысла и запрещено. + +### Избегайте глобальных переменных + +Главная проблема глобальных переменных в том, что чем больше они используются, тем сложнее понять логику их изменения и поведения процессов, которые от них зависят. Поэтому глобальные переменные лучше вовсе не использовать. Однако, если вам все-таки очень нужна глобальная переменная, то, как минимум, создавайте их на контроллере глобальных переменных, что даст чуть больше возможностей для их дебага: + +Там все просто - вместо глобальных перменных нужно всегда использовать макросы (ну и конечно же лучше всего вообще не использовать глобальные переменные). Пример с тг: + +Вместо: + +```DM +var/X +var/list/Y +var/datum/genitalia/Z +var/A = 42 +var/list/B = list(burn = "witch") +var/datum/genitalia/C = MakeAPenis() +var/hub_password +``` + +Используйте: + +```DM +GLOBAL_VAR(X) +GLOBAL_LIST(Y) +GLOBAL_DATUM(Z, /datum/genitalia) +GLOBAL_VAR_INIT(A, 42) +GLOBAL_LIST_INIT(B, list(burn = "witch")) +GLOBAL_DATUM_INIT(C, /datum/genitalia, MakeAPenis()) +GLOBAL_PROTECT(hub_password) +``` + +### Избегайте использования генераторов списков + +`range()`, `view()`, `hearers()`, `locate() [in world]`, `for(... [in world])` и подобные операции очень требовательные в плане производительности, поэтому должны импользоваться как можно реже. Зачастую их можно заменить глобальным списком объектов нужного типа. + +### alert() и input(): изменение контекста после вызова + +`alert()` и `input()` ждут реакции пользователя и пока они ждут, все окружение может поменяться: поля объекта, переменные вокруг и т.д. Учитывайте это и добавляйте дополнительные проверки по необходимости. + +### addtimer() вместо spawn()/sleep() + +Практика показывает, что `addtimer` лучше оптимизирован, чем встроенные spawn и sleep, плюс код, написанный с его использованием, гораздо проще дебажить. + +## Разработка безопасного кода + +- Всегда относитель к пользовательскому вводу так, как будто он намеренно пытается все сломать. Проверяйте пользовательский ввод на все случаи, которые не соответсвуют ожиданиям вашего кода. Для чисел проверяйте границы, для строк используйте escape-функции. Обратите внимание на функцию `sanitize`, которой удобно эскейпить вообще любой `input`, чтобы избежать ввод какого-то кода, который выполнится в браузере. +- Обязательно эскейптьте все команды к базе данных - используйте `sql_query` чтобы обработать весь текст от игроков и админов перед тем как передавать его в базу данных. Для чисел используйте `isnum`. +- Все вызовы топиков обязательно нужно проверять на их корректность. Такие вызовы могут быть подделаны со стороны клиента, поэтому их содержимым может быть что угодно! +- Скрывайте от игроков любую информацию, которая может быть использована для метагейма (даже такую простую, как количество игроков, которые нажали Declare, так как даже она может быть использована, чтобы вычислить текущий режим). +- Когда вы пишите код, который может каким-то образом влиять на раунд и генерировать _ВЕСЕЛЬЕ_, дважды проверьте, что такой функционал будет доступен только админам соответствующего ранга. +- Не используйте `locate()` для глобального поиска экземпляра типа который может быть удалён в процессе игры. Эта функция может вернуть экземпляр который находится в процессе удаления но не до конца удалён. Вместо этого лучше держать список с ещё не удаленными объектами и искать в нём (`locate() in objects_list`). + +## Файлы + +- Рантаймы не содержат полного пути до файла - поэтому избегайте одинаковых названий файлов даже в разных папках. +- Названия файлов не должны содержать пробелов или символов, которые придется эскейпить, указывая uri. +- Названия файлов и все пути всегда должны быть в нижнем регистре, чтобы избежать проблем, связанных с разным отношением к регистру в разных операционных системах. + +## Фишки и лайфхаки Dream Maker + +Как и любые другие языки, в BYOND есть свои особенности, которые стоит учитывать, чтобы писать более эффективный код. Тут описаны некоторые из них. + +### In-To for-loops + +`for(var/i = 1, i <= some_value, i++)` является стандартным способом писать циклы во многих языках программирования, однако в BYOND, внезапно, `for(var/i in 1 to some_value)` оказывается быстрее в плане производительности. (Обратите внимание, что `to` включает и левую, и правую границу). + +ОДНАКО, если `some_value` или `i` меняются в течение цикла, или вы итерируете по элементам списка, длина которого изменяется, вы НЕ можете использовать этот тип цикла for. + +### "Объединение переменных" с помощью оператора || + +Оператор (A || B) возвращает выражение A или B без изменений их значений. Этот факт можно использовать, чтобы кратким образом подставить B вместо нулевого (или ложного) A. + +Пример: + +```dm +obj.name = some_name || "Unknown" +``` + +Этот код полностью аналогичен следующему: + +```dm +if (some_name): + obj.name = some_name +else + obj.name = "Unknown" +``` + +Если some_name - это имеет ложное значение, то obj.name будет присвоено значение "Unknown". + +Начиная с версии 514 в BYOND добавили сокращенную версию оператора: A ||= B. + +### "Краткое условное выражение" через оператор && + +Аналогичным образом работает и оператор &&, благодаря чему можно писать условия в одну строчку. Такое сокращение не настолько полезно, как предыдущее, но тоже может использоваться в разных ситуациях. + +Пример: + +```dm +var/obj/a = some_object +istype(a) && a.foo() +``` + +Этот пример равнозначен коду: + +```dm +var/obj/a = some_object +if(istype(a)) + a.foo() +``` + +Начиная с версии 514 в BYOND добавили сокращенную версию оператора: A &&= B. + +### Циклы с "as anything()" или "as()" + +По дефолту BYOND проверяет в рантайме тип элемента при итерации по списку: + +```dm +for(var/obj/item/projectile/O in weapon.content) +``` + +В этом примере из списка `content` будут отобраны только объекты типа `/obj/item/projectile` (объекты других типов будут пропущены), но ради такого поведения BYOND будет неявно проверять тип в каждой итерации, что влияет на перфоманс. Обычно это не очень критично, но если цикл вызывается часто или в нем много элементов, то такие циклы есть смысл оптимизировать. + +**as anything()** позволяет избавиться от неявной проверки типа: + +```dm +for(var/obj/item/projectile/O as anything() in weapon.content) +``` + +Теперь проверки на тип не будет и обрабатываться будут все объекты из списка. Если случайно в списке окажется объект не являющийся `/obj/item/projectile`, то если вы попытаетесь вызывать методы `/obj/item/projectile` у такого объекта, то вы получите runtime ошибку. Таким образом следить за типом объектов в списке нужно самостоятельно, но цикл будет работать быстрее. + +Заметим, что следующие циклы равнозначны по своей логике работы: + +```dm +for(var/obj/item/projectile/O in weapon.content) + ... + +for(var/obj/item/projectile/O as anything() in weapon.content) + if(!istype(O)) // "лишняя" проверка, от которой можно избавиться, + // если мы знаем, что в weapon.content могут храниться только /obj/item/projectile + continue + ... +``` + +Также вместо **as anything()** можно писать просто **as()**. diff --git a/.github/ISSUE_TEMPLATE/bug-report.yaml b/.github/ISSUE_TEMPLATE/bug-report.yaml index 8572bdcfb45b3..3a63329d2ebc2 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yaml +++ b/.github/ISSUE_TEMPLATE/bug-report.yaml @@ -1,67 +1,79 @@ -# Docs - https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema -name: Bug Report -description: File a bug report +# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-issue-forms +# +name: "Issue Report" +#title: "[Bug]: " | if you want to have a have it automatically say [Bug] when they start the form +description: "Доложите о проблемах или багах, что бы мы могли их исправить." +#labels: "Баг" body: - type: markdown attributes: - value: | - Make sure to [search for an existing issue report](https://github.com/Baystation12/Baystation12/issues) before making a new one. + value: Спасибо за оставленный отчёт! Не забудьте дать ему соответствующее проблеме название для упрощения работы другим. + + - type: input + id: version + attributes: + label: BYOND Version + description: "На какой версии BYOND встретился баг. (Если уверены, что не связано - можно пропустить.)" - Your issue will be tagged by a developer with reproduction status and a priority once it has been reviewed and verified. - type: textarea - id: desc + id: description attributes: - label: Description of issue - placeholder: The macguffin doesn't do anything when used. + label: Описание проблемы + description: В чем состоит суть проблемы? (Обязательное поле) + placeholder: Я сел на стул, от чего взорвался, а мой мозг оказался в душе на ЦК! validations: required: true + - type: textarea - id: expected + id: what-expected attributes: - label: Difference between expected and actual behaviour - placeholder: The macguffin should kill the big bad when I use it. + label: Что должно было произойти? + description: Почему вы считаете это проблемой? + placeholder: Я ожидал, что я просто сяду на стул и буду сидеть. + - type: textarea - id: repro-steps + id: what-happened attributes: - label: Steps to reproduce - description: Please provide a complete step-by-step method of reproducing the bug, including steps you may think are obvious. Also please make sure you have followed and verified these steps reproduce the bug yourself. Being verbose is better than being vague. If reproduction is unreliable, i.e., it only happens sometimes or only happened once, mention that in the reproduction steps. - placeholder: | - 1. - 2. - 3. - ... - validations: - required: true + label: Что случилось вместо этого? + description: Как произошедшее отличается от ваших ожиданий? + placeholder: Я умер и оказался на ЦК. + - type: textarea - id: paths + id: why-bad attributes: - label: Specific information for locating - description: e.g. an object name, specific message outputs, object paths or file names if known, specific maps and/or coordinates, etc - placeholder: | - Item name: The MacGuffin - Big bad name: Very Evil Mob - Item path: `/obj/item/macguffin` + label: Почему это плохо/Какие последствия? + description: Почему вы считаете эту проблему значительной? + placeholder: Игроки должны иметь возможность сидеть на стульях, не взрываясь. + - type: textarea - id: version + id: how-to-reproduce attributes: - label: Client version, server revision, & game ID - description: This is found with the `Show server revision` verb in the OOC tab in game, or typing `show-server-revision` into the chat. - placeholder: | - Client Version: 514 - Server Revision: 34bf3ff6a39a09848d5552e0486c0f0fedb58fc9 - dev - 2022-08-06 - Game ID: cji-cImG - Current map: SEV Torch + label: Шаги для повторения проблемы. + description: Самая важная часть. Опишите ВСЁ, что вы делали, что бы встретиться с проблемой. (Обязательное поле) + placeholder: Найди стул, сядь на него, пойми, что на стуле стояла бутылка. (Тру стори) validations: required: true - - type: checkboxes - id: issue-bingo + + - type: textarea + id: when-problem-start + attributes: + label: Когда проблема началась? + description: Если отчет связан с тем, что раньше работало иначе, опишите последний раз, когда механика работала корректно. (Обязательное поле) + placeholder: Я мог садиться на стулья без проблем неделю назад, так что примерно тогда. + validations: + required: true + + - type: textarea + id: extra-information + attributes: + label: Дополнительная информация + description: Всё, что вы считаете важным/относящимся к проблеме. + placeholder: "Я думаю, что проблема начала появляться после этого PR https://github.com/ss220club/Paradise-SS220/pull/583" + + - type: textarea + id: logs attributes: - label: Issue bingo - description: Check all that apply. Try to tick off all of these before you submit the report. - options: - - label: Issue could be reproduced at least once - - label: Issue could be reproduced by different players - - label: Issue could be reproduced in multiple rounds - - label: Issue happened in a recent (less than 7 days ago) round - - label: "[Couldn't find an existing issue about this](https://github.com/Baystation12/Baystation12/issues)" + label: Связанные логи + description: Пожалуйста, предоставьте связанные логи или рантаймы, если имеете к ним доступ(Лучше цензурить IP адреса). + render: DM diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index a40ea100ba345..1a3d90e0c33d0 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,16 +1,49 @@ - \ No newline at end of file + + + +## Что этот PR делает + + + + + +## Почему это хорошо для игры + + + +## Изображения изменений +
+Скриншоты + +
+ +
+Видео + +
+ + + +## Тестирование + + + +## Changelog + +:cl: +add: Что-то добавил +del: Что-то удалил +tweak: Поменял что-то по мелочи +fix: Что-то починил +wip: Какие-либо наработки в процессе +soundadd: Добавил новый звук +sounddel: Удалил старый звук +imageadd: Добавил новую картинку +imagedel: Удалил старую картинку +spellcheck: Исправил опечатку +experiment: Добавил эксперементальную функцию +/:cl: + + + + diff --git a/.github/labeler.yml b/.github/labeler.yml index 3f6e234e60bf2..4ac3104801458 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,27 +1,61 @@ -Repo: -- .github/**/* -- .vscode/**/* -- docs/**/* -- scripts/**/* -- test/**/* -- tools/**/* -- .codebeatignore -- .editorconfig -- .git* -- LICENSE -- README.md -- SpacemanDMM.toml +':guitar: Инструменты': +- changed-files: + - any-glob-to-any-file: + - '.github/**/*' + - '.vscode/**/*' + - 'docs/**/*' + - 'scripts/**/*' + - 'test/**/*' + - 'tools/**/*' + - '.codebeatignore' + - '.codebeatsettings' + - '.editorconfig' + - '.git*' + - 'biome.json' + - 'libmysql.dll' + - 'LICENSE' + - 'README.md' + - 'SpacemanDMM.toml' -Map: -- '**/*.dmm' +':world_map: Изменение Карты': +- changed-files: + - any-glob-to-any-file: + - '**/*.dmm' -Sprites: -- '**/*.dmi' +':rice: Спрайты': +- changed-files: + - any-glob-to-any-file: + - '**/*.dmi' -Sound: -- '**/*.ogg' -- '**/*.wav' -- '**/*.mp3' +':sound: Звуки': +- changed-files: + - any-glob-to-any-file: + - '**/*.aif' + - '**/*.aiff' + - '**/*.it' + - '**/*.mid' + - '**/*.midi' + - '**/*.mod' + - '**/*.mp3' + - '**/*.ogg' + - '**/*.oxm' + - '**/*.raw' + - '**/*.s3m' + - '**/*.wma' + - '**/*.wav' + - '**/*.xm' -Config Update: -- config/example/**/* +':page_facing_up: Требуется изменение конфига': +- changed-files: + - any-glob-to-any-file: + - 'config/example/**/*' + +'SQL': +- changed-files: + - any-glob-to-any-file: + - 'sql/**/*' + +'TGUI': +- changed-files: + - any-glob-to-any-file: + - 'tgui/**' diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml index f352979eba9c7..bf11bf4ea04d0 100644 --- a/.github/workflows/cancel.yml +++ b/.github/workflows/cancel.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 3 steps: - - uses: styfle/cancel-workflow-action@b173b6ec0100793626c2d9e6b90435061f4fc3e5 + - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa with: workflow_id: 3545321 access_token: ${{ github.token }} diff --git a/.github/workflows/changelog_generation.yml b/.github/workflows/changelog_generation.yml deleted file mode 100644 index 86daaee0b2397..0000000000000 --- a/.github/workflows/changelog_generation.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: Compile changelogs - -permissions: - contents: read - -on: - schedule: - - cron: "0 0 * * *" - workflow_dispatch: # allows this workflow to be manually triggered - -jobs: - CompileCL: - permissions: - contents: write # required to push the updated changelog commit - runs-on: ubuntu-latest - if: github.repository == 'Baystation12/Baystation12' # to prevent this running on forks - steps: - - name: Checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - with: - fetch-depth: 0 # Otherwise, we will fail to push refs - ref: dev - token: ${{ secrets.BOT_TOKEN }} - - name: Python setup - uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 - with: - python-version: '3.x' - - name: Install depends - run: | - python -m pip install --upgrade pip - pip install pyyaml bs4 - - name: Compile CL - run: | - python tools/changelog/ss13_genchangelog.py html/changelog.html html/changelogs - - name: Commit And Push - run: | - git config --global user.email "${{ secrets.BOT_EMAIL }}" - git config --global user.name "${{ secrets.BOT_NAME }}" - git diff --quiet --exit-code && echo "No changes found, abort." && exit 0 - git commit -m "Automatic changelog generation [ci skip]" -a - git push diff --git a/.github/workflows/check_changelog.yml b/.github/workflows/check_changelog.yml new file mode 100644 index 0000000000000..09c480e92cfdd --- /dev/null +++ b/.github/workflows/check_changelog.yml @@ -0,0 +1,32 @@ +name: Проверка Ченджлога + +permissions: + contents: read + pull-requests: write + issues: write + +on: + pull_request_target: + types: [opened, reopened, edited] + +jobs: + CheckCL: + runs-on: ubuntu-latest + if: github.repository == 'ss220club/WyccerraBay220' && github.base_ref == 'master' && github.event.pull_request.draft == false + steps: + - name: Скачивание файлов + run: | + wget https://raw.githubusercontent.com/ss220club/WyccerraBay220/master/tools/changelog/sierra_check_changelog.py + wget https://raw.githubusercontent.com/ss220club/WyccerraBay220/master/tools/changelog/tags.yml + - name: Установка Python + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c + with: + python-version: '3.x' + - name: Установка зависимостей + run: | + python -m pip install --upgrade pip + pip install ruamel.yaml PyGithub + - name: Проверка чейнджлога + env: + BOT_TOKEN: ${{ secrets.BOT_TOKEN }} + run: python sierra_check_changelog.py diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml new file mode 100644 index 0000000000000..e7c359aa58260 --- /dev/null +++ b/.github/workflows/ci_suite.yml @@ -0,0 +1,160 @@ +name: CI Suite +on: + push: + branches: + - master + pull_request: + branches: + - master + merge_group: + branches: + - master +jobs: + run_linters: + if: ( !contains(github.event.head_commit.message, '[ci skip]') ) + name: Run Linters + runs-on: ubuntu-22.04 + concurrency: + group: run_linters-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + steps: + - uses: actions/checkout@v4 + - name: Restore SpacemanDMM cache + uses: actions/cache@v4 + with: + path: ~/SpacemanDMM + key: ${{ runner.os }}-spacemandmm-${{ hashFiles('dependencies.sh') }} + restore-keys: | + ${{ runner.os }}-spacemandmm- + - name: Restore Yarn cache + uses: actions/cache@v4 + with: + path: tgui/.yarn/cache + key: ${{ runner.os }}-yarn-${{ hashFiles('tgui/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + - name: Restore Node cache + uses: actions/cache@v4 + with: + path: ~/.nvm + key: ${{ runner.os }}-node-${{ hashFiles('dependencies.sh') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Restore Bootstrap cache + uses: actions/cache@v4 + with: + path: tools/bootstrap/.cache + key: ${{ runner.os }}-bootstrap-${{ hashFiles('tools/requirements.txt') }} + restore-keys: | + ${{ runner.os }}-bootstrap- + - name: Restore Rust cache + uses: actions/cache@v4 + with: + path: ~/.cargo + key: ${{ runner.os }}-rust-${{ hashFiles('tools/ci/ci_dependencies.sh')}} + restore-keys: | + ${{ runner.os }}-rust- + + + - name: Install Tools + run: | + pip3 install setuptools + bash tools/ci/install_node.sh + bash tools/ci/install_spaceman_dmm.sh dreamchecker + bash tools/ci/install_ripgrep.sh + tools/bootstrap/python -c '' + - name: Give Linters A Go + id: linter-setup + run: ':' + - name: Run Grep Checks + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: bash tools/ci/check_grep.sh + - name: Run Old Grep Checks + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: bash tools/ci/check_grep_bay.sh + # Enable if we decide to undef everything(we wont) + # - name: Check Define Sanity + # if: steps.linter-setup.conclusion == 'success' && !cancelled() + # run: tools/bootstrap/python -m define_sanity.check + # Enable when we have traits + # - name: Check Trait Validity + # if: steps.linter-setup.conclusion == 'success' && !cancelled() + # run: tools/bootstrap/python -m trait_validity.check + - name: Run DreamChecker + if: steps.linter-setup.conclusion == 'success' && !cancelled() + shell: bash + run: ~/dreamchecker 2>&1 | bash tools/ci/annotate_dm.sh + - name: Run Map Checks + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: | + tools/bootstrap/python -m mapmerge2.dmm_test + # Enable when our mappers define the rules(in a hour) + # tools/bootstrap/python -m tools.maplint.source + - name: Run DMI Tests + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: tools/bootstrap/python -m dmi.test + - name: Check File Directories + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: bash tools/ci/check_filedirs.sh baystation12.dme + + - name: Check Miscellaneous Files + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: bash tools/ci/check_misc.sh + - name: Run TGUI Checks + if: steps.linter-setup.conclusion == 'success' && !cancelled() + run: tools/build/build --ci lint tgui-test + + compile_all_maps: + if: ( !contains(github.event.head_commit.message, '[ci skip]') ) + name: Compile Maps + needs: [collect_data] + runs-on: ubuntu-22.04 + concurrency: + group: compile_all_maps-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + steps: + - uses: actions/checkout@v4 + - name: Restore BYOND cache + uses: actions/cache@v4 + with: + path: ~/BYOND + key: ${{ runner.os }}-byond + - name: Compile All Maps + run: | + bash tools/ci/install_byond.sh + source $HOME/BYOND/byond/bin/byondsetup + tools/build/build --ci dm -DCIBUILDING -DCITESTING -DALL_MAPS + + collect_data: + if: ( !contains(github.event.head_commit.message, '[ci skip]') ) + name: Collect data for other tasks + runs-on: ubuntu-22.04 + outputs: + maps: ${{ steps.map_finder.outputs.maps }} + concurrency: + group: find_all_maps-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + steps: + - uses: actions/checkout@v4 + - name: Find Maps + id: map_finder + run: | + echo "$(ls -mw0 maps/*.json)" > maps_output.txt + sed -i -e s+maps/+\"+g -e s+.json+\"+g maps_output.txt + echo "Maps: $(cat maps_output.txt)" + echo "maps={\"paths\":[$(cat maps_output.txt)]}" >> $GITHUB_OUTPUT + + run_all_tests: + if: ( !contains(github.event.head_commit.message, '[ci skip]') ) + name: Integration Tests + needs: [collect_data] + strategy: + fail-fast: false + matrix: + map: ${{ fromJSON(needs.collect_data.outputs.maps).paths }} + concurrency: + group: run_all_tests-${{ github.head_ref || github.run_id }}-${{ matrix.map }} + cancel-in-progress: true + uses: ./.github/workflows/run_integration_tests.yml + with: + map: ${{ matrix.map }} diff --git a/.github/workflows/close_stale.yml b/.github/workflows/close_stale.yml index 22a63484590f5..44d61bf6ae776 100644 --- a/.github/workflows/close_stale.yml +++ b/.github/workflows/close_stale.yml @@ -14,9 +14,9 @@ jobs: issues: write # required to close stale issues runs-on: ubuntu-latest steps: - - uses: actions/stale@v7 + - uses: actions/stale@v9 with: - stale-issue-message: 'This issue has not been updated in 30 days, and will close in 5 days from now if no updates are made.' + stale-issue-message: 'В этом ишью ничего не происходило ничего в течение 30 дней и он будет закрыт через 5 дней, если обновлений не произойдёт.' days-before-stale: 30 days-before-close: 5 days-before-pr-stale: -1 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index d3bfe257f79e5..7ec40495ee238 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -16,7 +16,7 @@ permissions: on: pull_request: - branches: [ "dev" ] + branches: [ "master" ] paths: [ "tools/**", "nano/**" ] schedule: - cron: '45 15 * * 4' @@ -39,11 +39,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: config-file: ./.github/workflow-config/codeql.yml languages: ${{ matrix.language }} @@ -58,7 +58,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -71,4 +71,4 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/generate_documentation.yml b/.github/workflows/generate_documentation.yml index 6c4baec885593..951a41a4acb3d 100644 --- a/.github/workflows/generate_documentation.yml +++ b/.github/workflows/generate_documentation.yml @@ -6,20 +6,20 @@ permissions: on: push: branches: - - dev + - master workflow_dispatch: # allows this workflow to be manually triggered env: - SPACEMAN_DMM_VERSION: suite-1.7.2 + SPACEMAN_DMM_VERSION: suite-1.7.3 jobs: PreFlight: runs-on: ubuntu-latest steps: - name: checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: paths-filter - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 + uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a id: filter with: filters: .github/workflow-config/preflight-filters.yml @@ -37,11 +37,11 @@ jobs: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: Setup Cache - uses: actions/cache@6998d139ddd3e68c71e9e398d8e40b71a2f39812 + uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 with: - path: $HOME/spaceman_dmm/$SPACEMAN_DMM_VERSION + path: ~/spaceman_dmm/${{ env.SPACEMAN_DMM_VERSION }} key: ${{ runner.os }}-spacemandmm-${{ env.SPACEMAN_DMM_VERSION }} - name: Install dmdoc run: scripts/install-spaceman-dmm.sh dmdoc @@ -49,10 +49,10 @@ jobs: run: | ~/dmdoc - name: Deploy - uses: JamesIves/github-pages-deploy-action@ba1486788b0490a235422264426c45848eac35c6 + uses: JamesIves/github-pages-deploy-action@65b5dfd4f5bcd3a7403bbc2959c144256167464e with: token: ${{ secrets.GITHUB_TOKEN }} branch: gh-pages folder: dmdoc - target-folder: docs/dmdoc + target-folder: docs clean: true diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 9a5741dcce09b..217c9c247a8ff 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -6,7 +6,7 @@ permissions: on: pull_request_target: branches: - - dev + - master jobs: triage: @@ -15,7 +15,7 @@ jobs: pull-requests: write # required to apply labels to PRs runs-on: ubuntu-latest steps: - - uses: actions/labeler@v4 + - uses: actions/labeler@v5 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" sync-labels: true diff --git a/.github/workflows/make_changelogs.yml b/.github/workflows/make_changelogs.yml deleted file mode 100644 index 5f86a30a7e6f6..0000000000000 --- a/.github/workflows/make_changelogs.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Make changelogs - -permissions: - contents: read - -on: - push: - branches: - - dev - -jobs: - MakeCL: - permissions: - contents: write # required to push the changelog chunk yml commit - runs-on: ubuntu-latest - if: github.repository == 'Baystation12/Baystation12' # to prevent this running on forks - steps: - - name: Checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - with: - fetch-depth: 25 - - name: Python setup - uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 - with: - python-version: '3.x' - - name: Install depends - run: | - python -m pip install --upgrade pip - pip install ruamel.yaml PyGithub - - name: Make CL - env: - BOT_TOKEN: ${{ secrets.BOT_TOKEN }} - GIT_EMAIL: "${{ secrets.BOT_EMAIL }}" - GIT_NAME: "${{ secrets.BOT_NAME }}" - run: python tools/changelog/generate_cl.py diff --git a/.github/workflows/run_integration_tests.yml b/.github/workflows/run_integration_tests.yml new file mode 100644 index 0000000000000..357d93951afc3 --- /dev/null +++ b/.github/workflows/run_integration_tests.yml @@ -0,0 +1,59 @@ +# This is a reusable workflow to run integration tests on a single map. +# This is run for every single map in ci_suite.yml. You might want to edit that instead. +name: Run Integration Tests +on: + workflow_call: + inputs: + map: + required: true + type: string + major: + required: false + type: string + minor: + required: false + type: string +jobs: + run_integration_tests: + runs-on: ubuntu-latest + services: + mysql: + image: mysql:latest + env: + MYSQL_ROOT_PASSWORD: root + ports: + - 3306 + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + steps: + - uses: actions/checkout@v4 + - name: Restore BYOND cache + uses: actions/cache@v4 + with: + path: ~/BYOND + key: ${{ runner.os }}-byond-${{ secrets.CACHE_PURGE_KEY }} + - name: Setup database + run: | + sudo systemctl start mysql + mysql -u root -proot -e 'CREATE DATABASE test;' + mysql -u root -proot test < sql/schema.sql + - name: Install rust-g + run: | + bash tools/ci/install_rust_g.sh + - name: Install auxlua + run: | + bash tools/ci/install_auxlua.sh + - name: Configure version + run: | + echo "BYOND_MAJOR=${{ inputs.major }}" >> $GITHUB_ENV + echo "BYOND_MINOR=${{ inputs.minor }}" >> $GITHUB_ENV + if: ${{ inputs.major }} + - name: Compile Tests + id: compile_tests + run: | + bash tools/ci/install_byond.sh + source $HOME/BYOND/byond/bin/byondsetup + tools/build/build --ci build -DCIBUILDING -DUNIT_TEST_COLOURED -WError -NWTG0001 + - name: Run Tests + run: | + source $HOME/BYOND/byond/bin/byondsetup + bash tools/ci/run_server.sh ${{ inputs.map }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index e614b044c7641..0000000000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,171 +0,0 @@ -name: Run Tests - -permissions: - contents: read - -on: - push: - branches: [ "dev" ] - pull_request: - branches: [ "dev" ] -env: - BYOND_MAJOR: "514" - BYOND_MINOR: "1589" - SPACEMAN_DMM_VERSION: suite-1.7.2 - -jobs: - PreFlight: - runs-on: ubuntu-latest - steps: - - name: checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - - name: paths-filter - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 - id: filter - with: - filters: .github/workflow-config/preflight-filters.yml - outputs: - dm: ${{ steps.filter.outputs.dm }} - DreamChecker: - runs-on: ubuntu-latest - needs: PreFlight - if: needs.PreFlight.outputs.dm == 'true' - steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - - name: Setup Cache - uses: actions/cache@6998d139ddd3e68c71e9e398d8e40b71a2f39812 - with: - path: $HOME/spaceman_dmm/$SPACEMAN_DMM_VERSION - key: ${{ runner.os }}-spacemandmm-${{ env.SPACEMAN_DMM_VERSION }} - - name: Install Dreamchecker - run: scripts/install-spaceman-dmm.sh dreamchecker - - name: Run Dreamchecker - run: ~/dreamchecker - - name: Run Failure Webhook - env: - JOB_STATUS: ${{ job.status }} - WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }} - HOOK_OS_NAME: ${{ runner.os }} - WORKFLOW_NAME: ${{ github.workflow }} - if: ${{ failure() }} - run: | - wget https://raw.githubusercontent.com/DiscordHooks/github-actions-discord-webhook/master/send.sh - chmod +x send.sh - ./send.sh failure $WEBHOOK_URL - Code: - runs-on: ubuntu-latest - needs: - - PreFlight - - DreamChecker - if: needs.PreFlight.outputs.dm == 'true' - steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - - name: Setup Cache - uses: actions/cache@6998d139ddd3e68c71e9e398d8e40b71a2f39812 - with: - path: $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR} - key: ${{ runner.os }}-byond-${{ env.BYOND_MAJOR }}-${{ env.BYOND_MINOR }} - - name: Install Dependencies - run: sudo apt-get install -y uchardet - - name: Run Tests - env: - TEST: CODE - run: test/run-test.sh - - name: Run Failure Webhook - env: - JOB_STATUS: ${{ job.status }} - WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }} - HOOK_OS_NAME: ${{ runner.os }} - WORKFLOW_NAME: ${{ github.workflow }} - if: ${{ failure() }} - run: | - wget https://raw.githubusercontent.com/DiscordHooks/github-actions-discord-webhook/master/send.sh - chmod +x send.sh - ./send.sh failure $WEBHOOK_URL - ExampleMap: - runs-on: ubuntu-latest - needs: - - PreFlight - - DreamChecker - if: needs.PreFlight.outputs.dm == 'true' - steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - - name: Setup Cache - uses: actions/cache@6998d139ddd3e68c71e9e398d8e40b71a2f39812 - with: - path: $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR} - key: ${{ runner.os }}-byond-${{ env.BYOND_MAJOR }}-${{ env.BYOND_MINOR }} - - name: Run Tests - env: - TEST: MAP - MAP_PATH: example - run: test/run-test.sh - - name: Run Failure Webhook - env: - JOB_STATUS: ${{ job.status }} - WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }} - HOOK_OS_NAME: ${{ runner.os }} - WORKFLOW_NAME: ${{ github.workflow }} - if: ${{ failure() }} - run: | - wget https://raw.githubusercontent.com/DiscordHooks/github-actions-discord-webhook/master/send.sh - chmod +x send.sh - ./send.sh failure $WEBHOOK_URL - TorchMap: - runs-on: ubuntu-latest - needs: - - PreFlight - - DreamChecker - if: needs.PreFlight.outputs.dm == 'true' - steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - - name: Setup Cache - uses: actions/cache@6998d139ddd3e68c71e9e398d8e40b71a2f39812 - with: - path: $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR} - key: ${{ runner.os }}-byond-${{ env.BYOND_MAJOR }}-${{ env.BYOND_MINOR }} - - name: Run Tests - env: - TEST: MAP - MAP_PATH: torch - run: test/run-test.sh - - name: Run Failure Webhook - env: - JOB_STATUS: ${{ job.status }} - WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }} - HOOK_OS_NAME: ${{ runner.os }} - WORKFLOW_NAME: ${{ github.workflow }} - if: ${{ failure() }} - run: | - wget https://raw.githubusercontent.com/DiscordHooks/github-actions-discord-webhook/master/send.sh - chmod +x send.sh - ./send.sh failure $WEBHOOK_URL - AwaySites: - runs-on: ubuntu-latest - needs: - - PreFlight - - DreamChecker - if: needs.PreFlight.outputs.dm == 'true' - steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - - name: Setup Cache - uses: actions/cache@6998d139ddd3e68c71e9e398d8e40b71a2f39812 - with: - path: $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR} - key: ${{ runner.os }}-byond-${{ env.BYOND_MAJOR }}-${{ env.BYOND_MINOR }} - - name: Run Tests - env: - TEST: MAP - MAP_PATH: away_sites_testing - run: test/run-test.sh - - name: Run Failure Webhook - env: - JOB_STATUS: ${{ job.status }} - WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }} - HOOK_OS_NAME: ${{ runner.os }} - WORKFLOW_NAME: ${{ github.workflow }} - if: ${{ failure() }} - run: | - wget https://raw.githubusercontent.com/DiscordHooks/github-actions-discord-webhook/master/send.sh - chmod +x send.sh - ./send.sh failure $WEBHOOK_URL diff --git a/.github/workflows/testmerge-blocker.yml b/.github/workflows/testmerge-blocker.yml new file mode 100644 index 0000000000000..ad49f5e998116 --- /dev/null +++ b/.github/workflows/testmerge-blocker.yml @@ -0,0 +1,17 @@ +name: "Test Merge Blocker" + +on: + pull_request: + types: [synchronize, opened, labeled, unlabeled] + +jobs: + testmerge-blocker: + name: Enforce Test Merge Label + runs-on: ubuntu-latest + steps: + - name: Enforce Test Merge Label + if: contains(github.event.pull_request.labels.*.name, 'Test Merge') && !contains(github.event.pull_request.labels.*.name, 'Test Merge Passed') + run: | + echo "Pull request is labeled for Test Merge and has not been flagged as Test Merge Passed." + echo "The test merge must pass, or the label removed, before this PR can be merged." + exit 1 diff --git a/.gitignore b/.gitignore index 4023ef50926eb..1781aa64ce3c4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,58 +1,58 @@ -# ignore misc BYOND files -Thumbs.db -*.log -*.int -*.rsc -*.dmb -*.lk -*.backup -*.before -data/ -dmdoc/ -cfg/ -build_log.txt -use_map -stopserver -reboot_called -atupdate - -# ignore config, but not subdirs -!config/*/ -config/* -sql/test_db - -# VisualStudioCode -.vscode/* -!.vscode/settings.json -*.code-workspace -.history - -# swap -[._]*.s[a-v][a-z] -[._]*.sw[a-p] -[._]s[a-v][a-z] -[._]sw[a-p] - -# session -Session.vim - -# temporary -.netrwhist -*~ - -# auto-generated tag files -tags - -# ignore built libs -lib/*.dll -lib/*.so - -# python -*.pyc -__pycache__ - -node_modules/ -package-lock.json - -# ignore local selected map -/maps/using.dm +# ignore misc BYOND files +Thumbs.db +*.log +*.int +*.rsc +*.dmb +*.lk +*.backup +*.before +data/ +dmdoc/ +cfg/ +build_log.txt +use_map +stopserver +reboot_called +atupdate + +# ignore config, but not subdirs +!config/*/ +config/* +sql/test_db + +# VisualStudioCode +.vscode/* +!.vscode/settings.json +*.code-workspace +.history + +# swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-v][a-z] +[._]sw[a-p] + +# session +Session.vim + +# temporary +.netrwhist +*~ + +# auto-generated tag files +tags + +# ignore built libs +lib/*.dll +lib/*.so + +# python +*.pyc +__pycache__ + +node_modules/ +package-lock.json + +# ignore local selected map +/maps/using.dm diff --git a/.tgs.yml b/.tgs.yml new file mode 100644 index 0000000000000..880ca67a61b75 --- /dev/null +++ b/.tgs.yml @@ -0,0 +1,25 @@ +# This file is used by TGS (https://github.com/tgstation/tgstation-server) clients to quickly initialize a server instance for the codebase +# The format isn't documented anywhere but hopefully we never have to change it. If there are questions, contact the TGS maintainer Cyberboss/@Dominion#0444 +version: 1 +# The BYOND version to use (kept in sync with dependencies.sh by the "TGS Test Suite" CI job) +# Must be interpreted as a string, keep quoted +byond: "515.1630" +# Folders to create in "/Configuration/GameStaticFiles/" +static_files: + # Config directory should be static + - name: config + # This implies the folder should be pre-populated with contents from the repo + populate: true + # Data directory must be static + - name: data +# String dictionary. The value is the location of the file in the repo to upload to TGS. The key is the name of the file to upload to "/Configuration/EventScripts/" +# This one is for Linux hosted servers +linux_scripts: + PreCompile.sh: tools/tgs_scripts/PreCompile.sh + WatchdogLaunch.sh: tools/tgs_scripts/WatchdogLaunch.sh + InstallDeps.sh: tools/tgs_scripts/InstallDeps.sh +# Same as above for Windows hosted servers +windows_scripts: + PreCompile.bat: tools/tgs_scripts/PreCompile.bat +# The security level the game should be run at +security: Trusted diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 1a2a65362d883..e74872710d075 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,8 +1,10 @@ -{ - "recommendations": [ - "gbasood.byond-dm-language-support", - "platymuus.dm-langclient", - "rome.rome", - "eamodio.gitlens" - ] -} +{ + "recommendations": [ + "gbasood.byond-dm-language-support", + "platymuus.dm-langclient", + "eamodio.gitlens", + "anturk.dmi-editor", + "stylemistake.auto-comment-blocks", + "esbenp.prettier-vscode" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000000..42a293a333805 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,32 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "byond", + "request": "launch", + "name": "Launch DreamSeeker", + "preLaunchTask": "Build All", + "dmb": "${workspaceFolder}/${command:CurrentDMB}" + }, + { + "type": "byond", + "request": "launch", + "name": "Launch DreamDaemon", + "preLaunchTask": "Build All", + "dmb": "${workspaceFolder}/${command:CurrentDMB}", + "dreamDaemon": true + }, + { + "name": "Debug External Libraries", + "type": "cppvsdbg", + "request": "launch", + "program": "${command:dreammaker.returnDreamDaemonPath}", + "cwd": "${workspaceRoot}", + "args": [ + "${command:dreammaker.getFilenameDmb}", + "-trusted" + ], + "preLaunchTask": "Build All" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index d6d788f7b6dfe..966a809e61786 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,19 @@ { + "eslint.nodePath": "./tgui/.yarn/sdks", + "eslint.workingDirectories": ["./tgui"], + "prettier.prettierPath": "./tgui/.yarn/sdks/prettier/index.cjs", + "typescript.tsdk": "./tgui/.yarn/sdks/typescript/lib", + "typescript.enablePromptUseWorkspaceTsdk": true, + + "search.exclude": { + "**/.yarn": true, + "**/.pnp.*": true + }, + + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + "files.eol": "\n", "files.encoding": "utf8", "files.insertFinalNewline": true, @@ -6,24 +21,47 @@ "files.trimTrailingWhitespace": true, "files.associations": { - "*.{dme,dmf,dmm,dm}": "dm", + "*.{dme,dmf,dmm,dm}": "dm" }, + "[dm]": { "files.eol": "\r\n", "editor.detectIndentation": false, "editor.insertSpaces": false }, - + "[javascript]": { + "editor.rulers": [80], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[javascriptreact]": { + "editor.rulers": [80], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[typescript]": { + "editor.rulers": [80], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[typescriptreact]": { + "editor.rulers": [80], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[scss]": { + "editor.rulers": [80], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, "[markdown]": { "files.trimTrailingWhitespace": false }, - "[python]": { "editor.detectIndentation": false, "editor.insertSpaces": true, "editor.tabSize": 4 }, - "[yaml]": { "editor.detectIndentation": false, "editor.insertSpaces": true, @@ -31,7 +69,7 @@ }, "workbench.editorAssociations": { - "*.dmi": "imagePreview.previewEditor" + "*.dmi": "dmiEditor.dmiEditor" }, "debug.onTaskErrors": "abort", @@ -41,6 +79,7 @@ "gitlens.advanced.blame.customArguments": [ "--ignore-revs-file", ".git-blame-ignore-revs" -], -"diffEditor.ignoreTrimWhitespace": false + ], + + "diffEditor.ignoreTrimWhitespace": false } diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000000000..e3061b165a862 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,107 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "process", + "command": "tools/build/build", + "windows": { + "command": ".\\tools\\build\\build.bat" + }, + "options": { + "env": { + "DM_EXE": "${config:dreammaker.byondPath}" + } + }, + "problemMatcher": [ + "$dreammaker", + "$tsc", + "$eslint-stylish" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "dependsOn": "dm: reparse", + "label": "Build All" + }, + { + "type": "dreammaker", + "dme": "baystation12.dme", + "problemMatcher": [ + "$dreammaker" + ], + "group": "build", + "label": "dm: build - baystation12.dme" + }, + { + "command": "${command:dreammaker.reparse}", + "group": "build", + "label": "dm: reparse" + }, + { + "type": "shell", + "command": "bin/tgui-build", + "windows": { + "command": ".\\bin\\tgui-build.cmd" + }, + "problemMatcher": [ + "$tsc", + "$eslint-stylish" + ], + "group": "build", + "label": "tgui: build" + }, + { + "type": "shell", + "command": "bin/tgui-dev", + "windows": { + "command": ".\\bin\\tgui-dev.cmd" + }, + "problemMatcher": [ + "$tsc", + "$eslint-stylish" + ], + "group": "build", + "label": "tgui: dev server" + }, + { + "type": "shell", + "command": "bin/tgui-bench", + "windows": { + "command": ".\\bin\\tgui-bench.cmd" + }, + "problemMatcher": [ + "$tsc", + "$eslint-stylish" + ], + "group": "build", + "label": "tgui: bench" + }, + { + "type": "shell", + "command": "bin/tgui-sonar", + "windows": { + "command": ".\\bin\\tgui-sonar.cmd" + }, + "problemMatcher": [ + "$tsc", + "$eslint-stylish" + ], + "group": "build", + "label": "tgui: sonar" + }, + { + "type": "shell", + "command": "bin/tgfont", + "windows": { + "command": ".\\bin\\tgfont.cmd" + }, + "problemMatcher": [ + "$tsc", + "$eslint-stylish" + ], + "group": "build", + "label": "tgui: rebuild tgfont" + } + ] +} diff --git a/BUILD.bat b/BUILD.bat new file mode 100644 index 0000000000000..b965bcb95bc52 --- /dev/null +++ b/BUILD.bat @@ -0,0 +1,2 @@ +@echo off +"%~dp0\tools\build\build.bat" --wait-on-error build %* diff --git a/README.md b/README.md index dd5d959397695..5cf866f6eb276 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,55 @@ -# Baystation [![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3.0-orange.svg)](https://opensource.org/licenses/AGPL-3.0) [![CodeQL](https://github.com/baystation12/baystation12/workflows/CodeQL/badge.svg)](https://github.com/Baystation12/Baystation12/actions/workflows/codeql-analysis.yml) [![CI Status](https://github.com/baystation12/baystation12/workflows/Run%20Tests/badge.svg)](https://github.com/Baystation12/Baystation12/actions/workflows/test.yml) [![codebeat badge](https://codebeat.co/badges/8ecb9a34-1bab-4d80-b34d-b16e8b216a03)](https://codebeat.co/projects/github-com-baystation12-baystation12-dev) - -[Website](https://bay.ss13.me) - [Discord](https://bay.ss13.me/discord) - [Code](https://bay.ss13.me/github) - [DMDoc](https://baystation.xyz/dmdoc) - ---- - -### CONTRIBUTING GUIDELINES - -**Please refrain from making non code related comments in pull requests on GitHub.** See the Code of Conduct on where you may provide feedback to users. - -All users are expected to review [/docs/CODE_OF_CONDUCT.md](/docs/CODE_OF_CONDUCT.md) before interacting with the repository or other users. - ---- - -### SECURITY - -Please see [/docs/SECURITY.md](/docs/SECURITY.md) for this repository's security policy, and how to report security issues. - ---- - -### LICENSE - -The code for Baystation is licensed under the [GNU Affero General Public License v3](https://www.gnu.org/licenses/agpl.html), which can be found in full in [/LICENSE](/LICENSE). - -Code with a git authorship date prior to `1420675200 +0000` (2015/01/08 00:00 GMT) is licensed under the GNU General Public License version 3, which can be found in full in [/docs/GPL3.txt](/docs/GPL3.txt) - -All code where the authorship dates on or after `1420675200 +0000` is assumed to be licensed under AGPL v3, if you wish to license under GPL v3 please make this clear in the commit message and any added files. - -If you wish to develop and host this codebase in a closed source manner you may use all commits prior to `1420675200 +0000`, which are licensed under GPL v3. The major change here is that if you host a server using any code licensed under AGPLv3 you are required to provide full source code for your servers users as well including addons and modifications you have made. - -See [here](https://www.gnu.org/licenses/why-affero-gpl.html) for more information. - -All assets including icons and sound are under a [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated. - ---- - -### GETTING THE CODE AND INSTALLING - -Please see [/docs/installation.md](/docs/installation.md) for instructions on obtaining, installing, updating, and running this code. +
+ +# SierraBay12 + [![CodeQL](https://github.com/SierraBay/WyccerraBay220/workflows/CodeQL/badge.svg)](https://github.com/SierraBay/SierraBay12/actions/workflows/codeql-analysis.yml) [![CI Status](https://github.com/SierraBay/WyccerraBay220/workflows/Run%20Tests/badge.svg)](https://github.com/SierraBay/WyccerraBay220/actions/workflows/test.yml) [![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3.0-blue.svg)](https://opensource.org/licenses/AGPL-3.0) + +
+ + + + +
+Discord • +Wiki +
+Коллаборация • +Безопасность • +Лицензия • +Установка +
+ +--- + +### Рекомендации для контрибьюторов + +**Пожалуйста, воздержись от написания комментариев, не связанных с кодом в PR на GitHub.** Ознакомься с Правилами Поведения, где сказано о том где следует оставлять отзывы пользователям. + +Ожидается, что все пользователи ознакомятся с [`/docs/CODE_OF_CONDUCT.md`](/docs/CODE_OF_CONDUCT.md) перед взаимодействием с репозиторием или другими пользователями. + +--- + +### Безопасность + +С Политикой Безопасности этого репозитория, а также с тем, как репортить уязвимости ты можешь ознакомиться в [`/docs/SECURITY.md`](/docs/SECURITY.md). + +--- + +### Лизцензия + +Код Baystation, и, следовательно, SierraBay лицензируется в соответствии с [GNU Affero General Public License v3](https://www.gnu.org/licenses/agpl.html), полное содержание которой находится в файле [`LICENSE`](/LICENSE). + +Код с датой авторства git до `1420675200 +0000` (08.01.2015, 00:00 GMT) распространяется под лицензией [GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.html), с полной версией которой вы можете ознакомиться в [`/docs/GPL3.txt`](/docs/GPL3.txt). + +Предполагается, что весь код, авторство которого датируется `1420675200 +0000` или позже, лицензируется по AGPL v3. Если вы хотите лицензировать по GPL v3, укажите это в сообщении коммита, а также внутри всех добавленных файлов. + +Если ты желаешь разрабатывать и хостить эту кодбазу, закрыв исходный код, ты можешь использовать все коммиты до `1420675200 +0000`, которые лицензированы по GPL v3. Главное различие заключается в том, что если ты хостишь сервер, используя любой код, лицензированный в соответствии с AGPLv3, ты должен предоставить полный исходный код для пользователей ваших серверов, включая дополнения и изменения, которые ты сделал. + +Статья ["Зачем нужна GPL Афферо"](https://www.gnu.org/licenses/why-affero-gpl.html) рассказывает об этом подробнее. + +Все ассеты, включая иконки и звуки, лицензируются по [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/), если не указано иное. + +--- + +### Получение кода и установка + +Все инструкции по получению, установке, обновлению и запуску этого кода находятся можно изучить в [`/docs/installation.md`](/docs/installation.md). diff --git a/SpacemanDMM.toml b/SpacemanDMM.toml index 6bbcadbee38d0..1ed4fa5c1b27f 100644 --- a/SpacemanDMM.toml +++ b/SpacemanDMM.toml @@ -12,6 +12,7 @@ disallow_relative_type_definitions = true disallow_relative_proc_definitions = true [diagnostics] +# Dreamchecker disabled_directive = "error" sets_directive_twice = "error" invalid_lint_directive_value = "error" @@ -40,10 +41,22 @@ control_condition_static = "error" if_condition_determinate = "error" loop_condition_determinate = "error" +# Lexer integer_precision_loss = "error" +# Parser +var_in_proc_parameter = "error" +static_in_proc_parameter = "error" +semicolon_in_proc_parameter = "error" +in_precedes_as = "error" +tmp_no_effect = "error" +final_no_effect = "error" +as_local_var = "error" + +# Preprocessor duplicate_include = "error" macro_redefined = "error" macro_undefined_no_definition = "error" +# Object Tree override_precedes_definition = "error" diff --git a/baystation12.dme b/baystation12.dme index 9de371b05ee65..4cd4783d255d6 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -20,10 +20,15 @@ #include "code\__datastructures\priority_queue.dm" #include "code\__datastructures\stack.dm" #include "code\__defines\__compile_options.dm" +#include "code\__defines\__dview.dm" +#include "code\__defines\__icons.dm" #include "code\__defines\__initialization.dm" #include "code\__defines\__renderer.dm" +#include "code\__defines\_click.dm" +#include "code\__defines\_excom.dm" #include "code\__defines\_renderer.dm" #include "code\__defines\admin.dm" +#include "code\__defines\ai.dm" #include "code\__defines\antagonists.dm" #include "code\__defines\ao.dm" #include "code\__defines\ao_misc.dm" @@ -31,14 +36,20 @@ #include "code\__defines\armor.dm" #include "code\__defines\atmos.dm" #include "code\__defines\atmospherics.dm" +#include "code\__defines\byond_tracy.dm" +#include "code\__defines\callback.dm" +#include "code\__defines\chat.dm" +#include "code\__defines\chat_boxes.dm" #include "code\__defines\chemistry.dm" #include "code\__defines\client.dm" #include "code\__defines\colors.dm" +#include "code\__defines\combat.dm" #include "code\__defines\culture.dm" #include "code\__defines\damage_organs.dm" #include "code\__defines\directions.dm" #include "code\__defines\dna.dm" #include "code\__defines\doors.dm" +#include "code\__defines\emissives.dm" #include "code\__defines\feedback.dm" #include "code\__defines\flags.dm" #include "code\__defines\fluids.dm" @@ -51,6 +62,7 @@ #include "code\__defines\inventory_sizes.dm" #include "code\__defines\items_clothing.dm" #include "code\__defines\jobs.dm" +#include "code\__defines\keybinding.dm" #include "code\__defines\languages.dm" #include "code\__defines\lighting.dm" #include "code\__defines\lists.dm" @@ -68,21 +80,42 @@ #include "code\__defines\qdel.dm" #include "code\__defines\research.dm" #include "code\__defines\ruin_tags.dm" +#include "code\__defines\rust_g.dm" #include "code\__defines\shields.dm" #include "code\__defines\shuttle.dm" #include "code\__defines\singletons.dm" #include "code\__defines\skills.dm" +#include "code\__defines\sound.dm" #include "code\__defines\species.dm" #include "code\__defines\subsystem-priority.dm" #include "code\__defines\subsystems.dm" #include "code\__defines\targeting.dm" #include "code\__defines\temperature.dm" +#include "code\__defines\text.dm" +#include "code\__defines\tgui.dm" +#include "code\__defines\tools.dm" #include "code\__defines\topic.dm" #include "code\__defines\turfs.dm" #include "code\__defines\webhooks.dm" #include "code\__defines\xenoarcheaology.dm" #include "code\__defines\ZAS.dm" #include "code\__defines\zmimic.dm" +#include "code\__defines\dcs\flags.dm" +#include "code\__defines\dcs\helpers.dm" +#include "code\__defines\dcs\signals\signals_area.dm" +#include "code\__defines\dcs\signals\signals_atom.dm" +#include "code\__defines\dcs\signals\signals_atom_attack.dm" +#include "code\__defines\dcs\signals\signals_atom_movable.dm" +#include "code\__defines\dcs\signals\signals_datum.dm" +#include "code\__defines\dcs\signals\signals_living.dm" +#include "code\__defines\dcs\signals\signals_mob.dm" +#include "code\__defines\dcs\signals\signals_object.dm" +#include "code\__defines\~mods\bloom_light.dm" +#include "code\__defines\~mods\expanded_culture_descriptor.dm" +#include "code\__defines\~mods\text_to_speech.dm" +#include "code\__defines\~mods\tgs.config.dm" +#include "code\__defines\~mods\tgs.dm" +#include "code\__defines\~mods\~master_defines.dm" #include "code\_global_vars\edible.dm" #include "code\_global_vars\logging.dm" #include "code\_global_vars\mapping.dm" @@ -96,14 +129,21 @@ #include "code\_global_vars\lists\mapping.dm" #include "code\_global_vars\lists\names.dm" #include "code\_global_vars\lists\objects.dm" +#include "code\_global_vars\lists\research.dm" +#include "code\_global_vars\lists\slots.dm" #include "code\_global_vars\lists\times.dm" #include "code\_helpers\_global_objects.dm" #include "code\_helpers\areas.dm" +#include "code\_helpers\assets.dm" #include "code\_helpers\atmospherics.dm" #include "code\_helpers\atom_movables.dm" +#include "code\_helpers\bicon_procs.dm" +#include "code\_helpers\bubble_effect.dm" #include "code\_helpers\builtin_proc_callers.dm" #include "code\_helpers\client.dm" #include "code\_helpers\cmp.dm" +#include "code\_helpers\cyrillic_keys.dm" +#include "code\_helpers\emissives.dm" #include "code\_helpers\functional.dm" #include "code\_helpers\game.dm" #include "code\_helpers\global_lists.dm" @@ -124,6 +164,7 @@ #include "code\_helpers\tools.dm" #include "code\_helpers\turfs.dm" #include "code\_helpers\type2type.dm" +#include "code\_helpers\types.dm" #include "code\_helpers\unsorted.dm" #include "code\_helpers\vector.dm" #include "code\_helpers\washing.dm" @@ -145,6 +186,7 @@ #include "code\_onclick\hud\action.dm" #include "code\_onclick\hud\animal.dm" #include "code\_onclick\hud\fullscreen.dm" +#include "code\_onclick\hud\ghost.dm" #include "code\_onclick\hud\global_hud.dm" #include "code\_onclick\hud\gun_mode.dm" #include "code\_onclick\hud\hud.dm" @@ -152,11 +194,12 @@ #include "code\_onclick\hud\movable_screen_objects.dm" #include "code\_onclick\hud\other_mobs.dm" #include "code\_onclick\hud\pai.dm" +#include "code\_onclick\hud\radial.dm" +#include "code\_onclick\hud\radial_persistent.dm" #include "code\_onclick\hud\robot.dm" #include "code\_onclick\hud\screen_objects.dm" #include "code\_onclick\hud\skybox.dm" #include "code\controllers\admin.dm" -#include "code\controllers\autotransfer.dm" #include "code\controllers\communications.dm" #include "code\controllers\configuration.dm" #include "code\controllers\controller.dm" @@ -180,11 +223,15 @@ #include "code\controllers\subsystems\air.dm" #include "code\controllers\subsystems\airflow.dm" #include "code\controllers\subsystems\alarm.dm" +#include "code\controllers\subsystems\ambient_lighting.dm" #include "code\controllers\subsystems\ao.dm" +#include "code\controllers\subsystems\area_turfs.dm" +#include "code\controllers\subsystems\assets.dm" #include "code\controllers\subsystems\atoms.dm" #include "code\controllers\subsystems\chat.dm" #include "code\controllers\subsystems\chemistry.dm" #include "code\controllers\subsystems\circuit_component.dm" +#include "code\controllers\subsystems\dcs.dm" #include "code\controllers\subsystems\evac.dm" #include "code\controllers\subsystems\event.dm" #include "code\controllers\subsystems\fluids.dm" @@ -201,13 +248,18 @@ #include "code\controllers\subsystems\misc.dm" #include "code\controllers\subsystems\misc_slow.dm" #include "code\controllers\subsystems\mobs.dm" +#include "code\controllers\subsystems\overlays.dm" #include "code\controllers\subsystems\ping.dm" #include "code\controllers\subsystems\plants.dm" #include "code\controllers\subsystems\presence.dm" #include "code\controllers\subsystems\radiation.dm" +#include "code\controllers\subsystems\roundend.dm" #include "code\controllers\subsystems\shuttle.dm" #include "code\controllers\subsystems\skybox.dm" +#include "code\controllers\subsystems\spacedrift.dm" +#include "code\controllers\subsystems\SSinput.dm" #include "code\controllers\subsystems\supply.dm" +#include "code\controllers\subsystems\tgui.dm" #include "code\controllers\subsystems\throwing.dm" #include "code\controllers\subsystems\ticker.dm" #include "code\controllers\subsystems\timer.dm" @@ -224,9 +276,12 @@ #include "code\controllers\subsystems\initialization\misc.dm" #include "code\controllers\subsystems\initialization\misc_early.dm" #include "code\controllers\subsystems\initialization\misc_late.dm" +#include "code\controllers\subsystems\initialization\modpacks.dm" #include "code\controllers\subsystems\initialization\persistence.dm" #include "code\controllers\subsystems\initialization\robots.dm" #include "code\controllers\subsystems\initialization\webhooks.dm" +#include "code\controllers\subsystems\initialization\xenoarch.dm" +#include "code\controllers\subsystems\processing\beach.dm" #include "code\controllers\subsystems\processing\circuit.dm" #include "code\controllers\subsystems\processing\disposals.dm" #include "code\controllers\subsystems\processing\fast_process.dm" @@ -234,6 +289,7 @@ #include "code\controllers\subsystems\processing\icon_updates.dm" #include "code\controllers\subsystems\processing\nano.dm" #include "code\controllers\subsystems\processing\obj.dm" +#include "code\controllers\subsystems\processing\overmap.dm" #include "code\controllers\subsystems\processing\processing.dm" #include "code\controllers\subsystems\processing\psi.dm" #include "code\controllers\subsystems\processing\temperature.dm" @@ -252,6 +308,8 @@ #include "code\datums\browser.dm" #include "code\datums\callbacks.dm" #include "code\datums\category.dm" +#include "code\datums\chat_message.dm" +#include "code\datums\chat_payload.dm" #include "code\datums\cinematic.dm" #include "code\datums\datum.dm" #include "code\datums\footsteps.dm" @@ -264,10 +322,11 @@ #include "code\datums\ruins.dm" #include "code\datums\security_state.dm" #include "code\datums\shackle_law_sets.dm" +#include "code\datums\signals.dm" #include "code\datums\sound_player.dm" #include "code\datums\suit_sensor_jammer_method.dm" +#include "code\datums\tgs_event_helper.dm" #include "code\datums\weakref.dm" -#include "code\datums\ai\ai.dm" #include "code\datums\ai\ai_holo.dm" #include "code\datums\appearances\appearance_data.dm" #include "code\datums\appearances\appearance_manager.dm" @@ -285,6 +344,9 @@ #include "code\datums\communication\ooc.dm" #include "code\datums\communication\pray.dm" #include "code\datums\communication\~defines.dm" +#include "code\datums\components\_component.dm" +#include "code\datums\components\pixel_shift.dm" +#include "code\datums\elements\_element.dm" #include "code\datums\extensions\_defines.dm" #include "code\datums\extensions\chameleon.dm" #include "code\datums\extensions\event_registration.dm" @@ -310,7 +372,6 @@ #include "code\datums\extensions\multitool\circuitboards\circuitboards.dm" #include "code\datums\extensions\multitool\circuitboards\shuttle_console.dm" #include "code\datums\extensions\multitool\circuitboards\stationalert.dm" -#include "code\datums\extensions\multitool\items\cable.dm" #include "code\datums\extensions\multitool\items\clothing.dm" #include "code\datums\extensions\multitool\items\items.dm" #include "code\datums\extensions\multitool\items\stock_parts_radio.dm" @@ -330,6 +391,17 @@ #include "code\datums\item_modifiers\item_modifier.dm" #include "code\datums\item_modifiers\space_suits.dm" #include "code\datums\item_modifiers\~defines.dm" +#include "code\datums\keybindings\_defines.dm" +#include "code\datums\keybindings\_keybinding.dm" +#include "code\datums\keybindings\admin.dm" +#include "code\datums\keybindings\carbon.dm" +#include "code\datums\keybindings\client.dm" +#include "code\datums\keybindings\communication.dm" +#include "code\datums\keybindings\human.dm" +#include "code\datums\keybindings\living.dm" +#include "code\datums\keybindings\mob.dm" +#include "code\datums\keybindings\movement.dm" +#include "code\datums\keybindings\robot.dm" #include "code\datums\licences\license.dm" #include "code\datums\mind\memory.dm" #include "code\datums\mind\mind.dm" @@ -347,6 +419,7 @@ #include "code\datums\observation\destroyed.dm" #include "code\datums\observation\dir_set.dm" #include "code\datums\observation\dismembered.dm" +#include "code\datums\observation\empd.dm" #include "code\datums\observation\entered.dm" #include "code\datums\observation\equipped.dm" #include "code\datums\observation\exited.dm" @@ -405,6 +478,7 @@ #include "code\datums\repositories\cameras.dm" #include "code\datums\repositories\client.dm" #include "code\datums\repositories\follow.dm" +#include "code\datums\repositories\icon_states.dm" #include "code\datums\repositories\images.dm" #include "code\datums\repositories\mobs.dm" #include "code\datums\repositories\repository.dm" @@ -424,7 +498,9 @@ #include "code\datums\singletons\pools\instance_configurator.dm" #include "code\datums\singletons\pools\instance_configurator_auto.dm" #include "code\datums\singletons\pools\instance_pool.dm" -#include "code\datums\singletons\pools\pool_behavior.dm" +#include "code\datums\singletons\shared_list\_shared_list.dm" +#include "code\datums\singletons\shared_list\path.dm" +#include "code\datums\singletons\shared_list\sound.dm" #include "code\datums\state_machine\paper_fortune_fsm.dm" #include "code\datums\state_machine\state.dm" #include "code\datums\state_machine\transition.dm" @@ -495,6 +571,7 @@ #include "code\datums\uplink\services.dm" #include "code\datums\uplink\stealth_and_camouflage_items.dm" #include "code\datums\uplink\stealthy_and_inconspicuous_weapons.dm" +#include "code\datums\uplink\structures_and_vehicles.dm" #include "code\datums\uplink\telecrystals.dm" #include "code\datums\uplink\uplink_categories.dm" #include "code\datums\uplink\uplink_items.dm" @@ -522,6 +599,7 @@ #include "code\datums\wires\smes.dm" #include "code\datums\wires\suit_storage_unit.dm" #include "code\datums\wires\taperecorder.dm" +#include "code\datums\wires\transfer_valve.dm" #include "code\datums\wires\wire_description.dm" #include "code\datums\wires\wires.dm" #include "code\game\atoms.dm" @@ -529,9 +607,9 @@ #include "code\game\atoms_health.dm" #include "code\game\atoms_movable.dm" #include "code\game\atoms_temperature.dm" +#include "code\game\atoms_tool_acts.dm" #include "code\game\base_turf.dm" #include "code\game\client_macros.dm" -#include "code\game\images.dm" #include "code\game\movietitles.dm" #include "code\game\response_team.dm" #include "code\game\sound.dm" @@ -658,16 +736,15 @@ #include "code\game\jobs\job\security.dm" #include "code\game\jobs\job\silicon.dm" #include "code\game\machinery\air_sensor.dm" -#include "code\game\machinery\alarm.dm" #include "code\game\machinery\atmo_control.dm" #include "code\game\machinery\barrier.dm" #include "code\game\machinery\biogenerator.dm" #include "code\game\machinery\bioprinter.dm" #include "code\game\machinery\bluespace_drive.dm" #include "code\game\machinery\bluespacerelay.dm" -#include "code\game\machinery\bodyscanner.dm" -#include "code\game\machinery\bodyscanner_console.dm" -#include "code\game\machinery\bodyscanner_display.dm" +#include "code\game\machinery\body_scanner.dm" +#include "code\game\machinery\body_scanner_console.dm" +#include "code\game\machinery\body_scanner_display.dm" #include "code\game\machinery\buttons.dm" #include "code\game\machinery\CableLayer.dm" #include "code\game\machinery\cell_charger.dm" @@ -698,13 +775,13 @@ #include "code\game\machinery\recharger.dm" #include "code\game\machinery\rechargestation.dm" #include "code\game\machinery\requests_console.dm" -#include "code\game\machinery\robot_fabricator.dm" #include "code\game\machinery\robotics_fabricator.dm" #include "code\game\machinery\rotating_alarm.dm" #include "code\game\machinery\seed_extractor.dm" #include "code\game\machinery\self_destruct.dm" #include "code\game\machinery\Sleeper.dm" #include "code\game\machinery\spaceheater.dm" +#include "code\game\machinery\stasis_cage.dm" #include "code\game\machinery\status_display.dm" #include "code\game\machinery\status_display_ai.dm" #include "code\game\machinery\status_light.dm" @@ -745,6 +822,9 @@ #include "code\game\machinery\_machines_base\stock_parts\radio\receiver.dm" #include "code\game\machinery\_machines_base\stock_parts\radio\stock_parts_radio.dm" #include "code\game\machinery\_machines_base\stock_parts\radio\transmitter.dm" +#include "code\game\machinery\alarm\alarm.dm" +#include "code\game\machinery\alarm\firealarm.dm" +#include "code\game\machinery\alarm\partyalarm.dm" #include "code\game\machinery\atmoalter\area_atmos_computer.dm" #include "code\game\machinery\atmoalter\canister.dm" #include "code\game\machinery\atmoalter\clamp.dm" @@ -883,6 +963,7 @@ #include "code\game\objects\compass\compass_holder.dm" #include "code\game\objects\compass\compass_waypoint.dm" #include "code\game\objects\effects\bump_teleporter.dm" +#include "code\game\objects\effects\cig_smoke.dm" #include "code\game\objects\effects\effect_system.dm" #include "code\game\objects\effects\explosion_particles.dm" #include "code\game\objects\effects\fake_fire.dm" @@ -892,7 +973,6 @@ #include "code\game\objects\effects\item_pickup_ghost.dm" #include "code\game\objects\effects\landmarks.dm" #include "code\game\objects\effects\manifest.dm" -#include "code\game\objects\effects\mines.dm" #include "code\game\objects\effects\misc.dm" #include "code\game\objects\effects\overlays.dm" #include "code\game\objects\effects\portals.dm" @@ -903,6 +983,7 @@ #include "code\game\objects\effects\chem\chemsmoke.dm" #include "code\game\objects\effects\chem\foam.dm" #include "code\game\objects\effects\chem\water.dm" +#include "code\game\objects\effects\decals\bullet_holes.dm" #include "code\game\objects\effects\decals\cleanable.dm" #include "code\game\objects\effects\decals\contraband.dm" #include "code\game\objects\effects\decals\crayon.dm" @@ -916,7 +997,9 @@ #include "code\game\objects\effects\decals\Cleanable\misc.dm" #include "code\game\objects\effects\decals\Cleanable\robots.dm" #include "code\game\objects\effects\decals\Cleanable\tracks.dm" +#include "code\game\objects\effects\decals\posters\_defines.dm" #include "code\game\objects\effects\decals\posters\bs12.dm" +#include "code\game\objects\effects\decals\posters\posters.dm" #include "code\game\objects\effects\fire\fire.dm" #include "code\game\objects\effects\particles\particles.dm" #include "code\game\objects\effects\spawners\bombspawner.dm" @@ -940,6 +1023,7 @@ #include "code\game\objects\items\passport.dm" #include "code\game\objects\items\plunger.dm" #include "code\game\objects\items\rescuebag.dm" +#include "code\game\objects\items\selection.dm" #include "code\game\objects\items\spirit_board.dm" #include "code\game\objects\items\toys.dm" #include "code\game\objects\items\traitor_plush.dm" @@ -948,9 +1032,10 @@ #include "code\game\objects\items\devices\auto_cpr.dm" #include "code\game\objects\items\devices\binoculars.dm" #include "code\game\objects\items\devices\boombox.dm" -#include "code\game\objects\items\devices\cable_painter.dm" #include "code\game\objects\items\devices\chameleonproj.dm" +#include "code\game\objects\items\devices\cosmetic_surgery_kit.dm" #include "code\game\objects\items\devices\debugger.dm" +#include "code\game\objects\items\devices\dna_sampler.dm" #include "code\game\objects\items\devices\dociler.dm" #include "code\game\objects\items\devices\flash.dm" #include "code\game\objects\items\devices\flashlight.dm" @@ -968,6 +1053,7 @@ #include "code\game\objects\items\devices\paint_sprayer.dm" #include "code\game\objects\items\devices\personal_shield.dm" #include "code\game\objects\items\devices\powersink.dm" +#include "code\game\objects\items\devices\radio_jammer.dm" #include "code\game\objects\items\devices\slide_projector.dm" #include "code\game\objects\items\devices\spy_bug.dm" #include "code\game\objects\items\devices\suit_cooling.dm" @@ -1023,7 +1109,7 @@ #include "code\game\objects\items\weapons\extinguisher.dm" #include "code\game\objects\items\weapons\flame.dm" #include "code\game\objects\items\weapons\flamethrower.dm" -#include "code\game\objects\items\weapons\gift_wrappaper.dm" +#include "code\game\objects\items\weapons\gifts.dm" #include "code\game\objects\items\weapons\handcuffs.dm" #include "code\game\objects\items\weapons\janitor_sign.dm" #include "code\game\objects\items\weapons\lighter.dm" @@ -1052,6 +1138,7 @@ #include "code\game\objects\items\weapons\trays.dm" #include "code\game\objects\items\weapons\weaponry.dm" #include "code\game\objects\items\weapons\weldbackpack.dm" +#include "code\game\objects\items\weapons\wrapping_paper.dm" #include "code\game\objects\items\weapons\candle\candle.dm" #include "code\game\objects\items\weapons\candle\incense.dm" #include "code\game\objects\items\weapons\candle\scent_decls.dm" @@ -1068,7 +1155,6 @@ #include "code\game\objects\items\weapons\circuitboards\computer\station_alert.dm" #include "code\game\objects\items\weapons\circuitboards\computer\telecomms.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\biogenerator.dm" -#include "code\game\objects\items\weapons\circuitboards\machinery\bluespacedrive.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\chemistry.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\cloning.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\commsantenna.dm" @@ -1157,6 +1243,7 @@ #include "code\game\objects\items\weapons\storage\fancy\crackers.dm" #include "code\game\objects\items\weapons\storage\fancy\crayons.dm" #include "code\game\objects\items\weapons\storage\fancy\egg_box.dm" +#include "code\game\objects\items\weapons\storage\fancy\matchbox.dm" #include "code\game\objects\items\weapons\storage\fancy\pencilcase.dm" #include "code\game\objects\items\weapons\storage\fancy\vials.dm" #include "code\game\objects\items\weapons\storage\fancy\smokable\_smokable.dm" @@ -1169,6 +1256,7 @@ #include "code\game\objects\items\weapons\tanks\tanks.dm" #include "code\game\objects\items\weapons\tools\crowbar.dm" #include "code\game\objects\items\weapons\tools\screwdriver.dm" +#include "code\game\objects\items\weapons\tools\swapper.dm" #include "code\game\objects\items\weapons\tools\weldingtool.dm" #include "code\game\objects\items\weapons\tools\wirecutter.dm" #include "code\game\objects\items\weapons\tools\wrench.dm" @@ -1203,6 +1291,7 @@ #include "code\game\objects\structures\janicart.dm" #include "code\game\objects\structures\lattice.dm" #include "code\game\objects\structures\mineral_bath.dm" +#include "code\game\objects\structures\mines.dm" #include "code\game\objects\structures\mop_bucket.dm" #include "code\game\objects\structures\morgue.dm" #include "code\game\objects\structures\pit.dm" @@ -1215,7 +1304,6 @@ #include "code\game\objects\structures\showcase.dm" #include "code\game\objects\structures\signs.dm" #include "code\game\objects\structures\skele_stand.dm" -#include "code\game\objects\structures\stasis_cage.dm" #include "code\game\objects\structures\tank_dispenser.dm" #include "code\game\objects\structures\transit_tubes.dm" #include "code\game\objects\structures\under_wardrobe.dm" @@ -1234,6 +1322,7 @@ #include "code\game\objects\structures\crates_lockers\closets\coffin.dm" #include "code\game\objects\structures\crates_lockers\closets\crittercrate.dm" #include "code\game\objects\structures\crates_lockers\closets\fitness.dm" +#include "code\game\objects\structures\crates_lockers\closets\fridge.dm" #include "code\game\objects\structures\crates_lockers\closets\gimmick.dm" #include "code\game\objects\structures\crates_lockers\closets\job_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\l3closet.dm" @@ -1246,7 +1335,6 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\bar.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\guncabinet.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\hydroponics.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\medical.dm" @@ -1341,6 +1429,8 @@ #include "code\modules\admin\buildmode\turret.dm" #include "code\modules\admin\buildmode\_datums\mob_spawner.dm" #include "code\modules\admin\callproc\callproc.dm" +#include "code\modules\admin\connectioncheck\bancheck_functions.dm" +#include "code\modules\admin\connectioncheck\connectioncheck_functions.dm" #include "code\modules\admin\DB ban\functions.dm" #include "code\modules\admin\permissionverbs\permissionedit.dm" #include "code\modules\admin\secrets\admin_secrets\admin_logs.dm" @@ -1405,7 +1495,6 @@ #include "code\modules\admin\view_variables\view_variables.dm" #include "code\modules\admin\view_variables\view_variables_global.dm" #include "code\modules\admin\view_variables\vv_set_handlers.dm" -#include "code\modules\ai\_defines.dm" #include "code\modules\ai\ai_holder.dm" #include "code\modules\ai\ai_holder_combat.dm" #include "code\modules\ai\ai_holder_combat_unseen.dm" @@ -1420,7 +1509,9 @@ #include "code\modules\ai\ai_holder_targeting.dm" #include "code\modules\ai\interfaces.dm" #include "code\modules\ai\say_list.dm" -#include "code\modules\ai\aI_holder_subtypes\simple_mob_ai.dm" +#include "code\modules\ai\ai_holder_subtypes\alien_ai.dm" +#include "code\modules\ai\ai_holder_subtypes\human_ai.dm" +#include "code\modules\ai\ai_holder_subtypes\simple_mob_ai.dm" #include "code\modules\alarm\alarm.dm" #include "code\modules\alarm\alarm_handler.dm" #include "code\modules\alarm\atmosphere_alarm.dm" @@ -1439,6 +1530,24 @@ #include "code\modules\assembly\signaler.dm" #include "code\modules\assembly\timer.dm" #include "code\modules\assembly\voice.dm" +#include "code\modules\asset_cache\asset_cache_client.dm" +#include "code\modules\asset_cache\asset_cache_item.dm" +#include "code\modules\asset_cache\asset_list.dm" +#include "code\modules\asset_cache\assets\asset_changelog.dm" +#include "code\modules\asset_cache\assets\asset_character_preview.dm" +#include "code\modules\asset_cache\assets\asset_chem_master.dm" +#include "code\modules\asset_cache\assets\asset_fontawesome.dm" +#include "code\modules\asset_cache\assets\asset_lobby_screen.dm" +#include "code\modules\asset_cache\assets\asset_nanoui_common.dm" +#include "code\modules\asset_cache\assets\asset_nanoui_group.dm" +#include "code\modules\asset_cache\assets\asset_nanoui_templates.dm" +#include "code\modules\asset_cache\assets\asset_paicard.dm" +#include "code\modules\asset_cache\assets\asset_paper.dm" +#include "code\modules\asset_cache\assets\asset_permission_panel.dm" +#include "code\modules\asset_cache\assets\asset_tgfont.dm" +#include "code\modules\asset_cache\assets\asset_tgui.dm" +#include "code\modules\asset_cache\transports\asset_transport.dm" +#include "code\modules\asset_cache\transports\webroot_transport.dm" #include "code\modules\atmospherics\_atmos_setup.dm" #include "code\modules\atmospherics\atmos_primitives.dm" #include "code\modules\atmospherics\atmospherics.dm" @@ -1497,21 +1606,19 @@ #include "code\modules\augment\passive\boost\muscle.dm" #include "code\modules\augment\passive\boost\reflex.dm" #include "code\modules\augment\passive\boost\shooting.dm" +#include "code\modules\balloon_alert\balloon_alert.dm" #include "code\modules\blob\blob.dm" #include "code\modules\butchery\butchery.dm" #include "code\modules\butchery\remains.dm" -#include "code\modules\client\asset_cache.dm" #include "code\modules\client\client_color.dm" #include "code\modules\client\client_defines.dm" #include "code\modules\client\client_helpers.dm" #include "code\modules\client\client_procs.dm" -#include "code\modules\client\darkmode.dm" #include "code\modules\client\movement.dm" #include "code\modules\client\preferences.dm" #include "code\modules\client\preferences_persist.dm" #include "code\modules\client\preferences_spawnpoints.dm" #include "code\modules\client\preferences_storage.dm" -#include "code\modules\client\preferences_toggle.dm" #include "code\modules\client\ui_style.dm" #include "code\modules\client\preference_setup\_defines.dm" #include "code\modules\client\preference_setup\preference_setup.dm" @@ -1532,27 +1639,31 @@ #include "code\modules\client\preference_setup\global\05_settings.dm" #include "code\modules\client\preference_setup\global\preferences.dm" #include "code\modules\client\preference_setup\global\prefixes.dm" +#include "code\modules\client\preference_setup\keybindings\keybindings_pref.dm" +#include "code\modules\client\preference_setup\keybindings\keybindings_proc.dm" #include "code\modules\client\preference_setup\laws\laws_pref.dm" #include "code\modules\client\preference_setup\loadout\_defines.dm" +#include "code\modules\client\preference_setup\loadout\gear.dm" #include "code\modules\client\preference_setup\loadout\gear_tweaks.dm" #include "code\modules\client\preference_setup\loadout\loadout.dm" +#include "code\modules\client\preference_setup\loadout\loadout_category.dm" #include "code\modules\client\preference_setup\loadout\lists\accessories.dm" #include "code\modules\client\preference_setup\loadout\lists\augments.dm" #include "code\modules\client\preference_setup\loadout\lists\clothing.dm" +#include "code\modules\client\preference_setup\loadout\lists\documents.dm" #include "code\modules\client\preference_setup\loadout\lists\earwear.dm" #include "code\modules\client\preference_setup\loadout\lists\eyegear.dm" #include "code\modules\client\preference_setup\loadout\lists\footwear.dm" #include "code\modules\client\preference_setup\loadout\lists\gloves.dm" #include "code\modules\client\preference_setup\loadout\lists\headwear.dm" +#include "code\modules\client\preference_setup\loadout\lists\masks.dm" #include "code\modules\client\preference_setup\loadout\lists\misc.dm" -#include "code\modules\client\preference_setup\loadout\lists\pet.dm" #include "code\modules\client\preference_setup\loadout\lists\storage.dm" #include "code\modules\client\preference_setup\loadout\lists\suits.dm" #include "code\modules\client\preference_setup\loadout\lists\tactical.dm" #include "code\modules\client\preference_setup\loadout\lists\trinkets.dm" #include "code\modules\client\preference_setup\loadout\lists\uniforms.dm" #include "code\modules\client\preference_setup\loadout\lists\utility.dm" -#include "code\modules\client\preference_setup\loadout\lists\xenowear.dm" #include "code\modules\client\preference_setup\occupation\occupation.dm" #include "code\modules\client\preference_setup\occupation\skill_selection.dm" #include "code\modules\clothing\_clothing.dm" @@ -1669,8 +1780,6 @@ #include "code\modules\clothing\under\accessories\neckerchief.dm" #include "code\modules\clothing\under\accessories\necklace.dm" #include "code\modules\clothing\under\accessories\pouches.dm" -#include "code\modules\clothing\under\accessories\pride_pin.dm" -#include "code\modules\clothing\under\accessories\pronouns.dm" #include "code\modules\clothing\under\accessories\qipao.dm" #include "code\modules\clothing\under\accessories\scarf.dm" #include "code\modules\clothing\under\accessories\sherwani.dm" @@ -1755,7 +1864,6 @@ #include "code\modules\culture_descriptor\faction\factions_adherent.dm" #include "code\modules\culture_descriptor\faction\factions_hidden.dm" #include "code\modules\culture_descriptor\faction\factions_human.dm" -#include "code\modules\culture_descriptor\faction\factions_ipc.dm" #include "code\modules\culture_descriptor\faction\factions_skrell.dm" #include "code\modules\culture_descriptor\faction\factions_unathi.dm" #include "code\modules\culture_descriptor\faction\factions_vox.dm" @@ -1763,7 +1871,6 @@ #include "code\modules\culture_descriptor\location\locations_adherent.dm" #include "code\modules\culture_descriptor\location\locations_diona.dm" #include "code\modules\culture_descriptor\location\locations_human.dm" -#include "code\modules\culture_descriptor\location\locations_ipc.dm" #include "code\modules\culture_descriptor\location\locations_other.dm" #include "code\modules\culture_descriptor\location\locations_serpentids.dm" #include "code\modules\culture_descriptor\location\locations_skrell.dm" @@ -1816,11 +1923,11 @@ #include "code\modules\events\blob.dm" #include "code\modules\events\brain_expansion.dm" #include "code\modules\events\brand_intelligence.dm" +#include "code\modules\events\bsd_instability.dm" #include "code\modules\events\camera_damage.dm" #include "code\modules\events\communications_blackout.dm" #include "code\modules\events\computer_damage.dm" #include "code\modules\events\computer_update.dm" -#include "code\modules\events\deepmaint_event.dm" #include "code\modules\events\disposals_explosion.dm" #include "code\modules\events\dust.dm" #include "code\modules\events\electrical_storm.dm" @@ -1863,7 +1970,6 @@ #include "code\modules\fabrication\fabricator_hacked.dm" #include "code\modules\fabrication\fabricator_intake.dm" #include "code\modules\fabrication\fabricator_microlathe.dm" -#include "code\modules\fabrication\fabricator_topic.dm" #include "code\modules\fabrication\fabricator_ui.dm" #include "code\modules\fabrication\designs\_design.dm" #include "code\modules\fabrication\designs\general\designs_arms_ammo.dm" @@ -1898,8 +2004,6 @@ #include "code\modules\goals\definitions\personal_achievement.dm" #include "code\modules\goals\definitions\personal_achievement_movement.dm" #include "code\modules\goals\definitions\personal_achievement_specific_object.dm" -#include "code\modules\goonchat\_helpers.dm" -#include "code\modules\goonchat\browserOutput.dm" #include "code\modules\holodeck\HolodeckControl.dm" #include "code\modules\holodeck\HolodeckObjects.dm" #include "code\modules\holodeck\HolodeckPrograms.dm" @@ -1925,6 +2029,8 @@ #include "code\modules\hydroponics\trays\tray_soil.dm" #include "code\modules\hydroponics\trays\tray_tools.dm" #include "code\modules\hydroponics\trays\tray_update_icons.dm" +#include "code\modules\input\input.dm" +#include "code\modules\input\movement.dm" #include "code\modules\integrated_electronics\_defines.dm" #include "code\modules\integrated_electronics\core\analyzer.dm" #include "code\modules\integrated_electronics\core\assemblies.dm" @@ -1938,7 +2044,6 @@ #include "code\modules\integrated_electronics\core\wirer.dm" #include "code\modules\integrated_electronics\core\prefab\prefab.dm" #include "code\modules\integrated_electronics\core\prefab\prefabs.dm" -#include "code\modules\integrated_electronics\core\prefab\test\testprefabs.dm" #include "code\modules\integrated_electronics\core\special_pins\boolean_pin.dm" #include "code\modules\integrated_electronics\core\special_pins\char_pin.dm" #include "code\modules\integrated_electronics\core\special_pins\color_pin.dm" @@ -1962,7 +2067,6 @@ #include "code\modules\integrated_electronics\subtypes\memory.dm" #include "code\modules\integrated_electronics\subtypes\output.dm" #include "code\modules\integrated_electronics\subtypes\power.dm" -#include "code\modules\integrated_electronics\subtypes\reagents.dm" #include "code\modules\integrated_electronics\subtypes\smart.dm" #include "code\modules\integrated_electronics\subtypes\time.dm" #include "code\modules\integrated_electronics\subtypes\trig.dm" @@ -1978,11 +2082,12 @@ #include "code\modules\library\manuals\medical.dm" #include "code\modules\library\manuals\nanotrasen.dm" #include "code\modules\library\manuals\union.dm" +#include "code\modules\lighting\_lighting_defs.dm" +#include "code\modules\lighting\darksight.dm" #include "code\modules\lighting\lighting_area.dm" #include "code\modules\lighting\lighting_atom.dm" #include "code\modules\lighting\lighting_corner.dm" #include "code\modules\lighting\lighting_overlay.dm" -#include "code\modules\lighting\lighting_planemaster.dm" #include "code\modules\lighting\lighting_setup.dm" #include "code\modules\lighting\lighting_source.dm" #include "code\modules\lighting\lighting_turf.dm" @@ -2057,7 +2162,8 @@ #include "code\modules\mining\machinery\mineral_unloader.dm" #include "code\modules\mob\animations.dm" #include "code\modules\mob\death.dm" -#include "code\modules\mob\gender.dm" +#include "code\modules\mob\dview.dm" +#include "code\modules\mob\examinations.dm" #include "code\modules\mob\hear_say.dm" #include "code\modules\mob\holder.dm" #include "code\modules\mob\inventory.dm" @@ -2068,9 +2174,11 @@ #include "code\modules\mob\mob_helpers.dm" #include "code\modules\mob\mob_movement.dm" #include "code\modules\mob\mob_transformation_simple.dm" +#include "code\modules\mob\pronouns.dm" #include "code\modules\mob\say.dm" #include "code\modules\mob\transform_procs.dm" #include "code\modules\mob\update_icons.dm" +#include "code\modules\mob\vv_handlers.dm" #include "code\modules\mob\grab\grab_datum.dm" #include "code\modules\mob\grab\grab_object.dm" #include "code\modules\mob\grab\grab_readme.dm" @@ -2112,6 +2220,7 @@ #include "code\modules\mob\living\living.dm" #include "code\modules\mob\living\living_defense.dm" #include "code\modules\mob\living\living_defines.dm" +#include "code\modules\mob\living\living_health.dm" #include "code\modules\mob\living\living_maneuvers.dm" #include "code\modules\mob\living\living_powers.dm" #include "code\modules\mob\living\login.dm" @@ -2202,6 +2311,7 @@ #include "code\modules\mob\living\carbon\human\descriptors\descriptors_nabber.dm" #include "code\modules\mob\living\carbon\human\descriptors\descriptors_skrell.dm" #include "code\modules\mob\living\carbon\human\descriptors\descriptors_vox.dm" +#include "code\modules\mob\living\carbon\human\machine\screen_abilities.dm" #include "code\modules\mob\living\carbon\xenobiological\death.dm" #include "code\modules\mob\living\carbon\xenobiological\examine.dm" #include "code\modules\mob\living\carbon\xenobiological\hud.dm" @@ -2323,7 +2433,6 @@ #include "code\modules\mob\living\simple_animal\friendly\slime.dm" #include "code\modules\mob\living\simple_animal\friendly\tomato.dm" #include "code\modules\mob\living\simple_animal\hostile\antlion.dm" -#include "code\modules\mob\living\simple_animal\hostile\bad_drone.dm" #include "code\modules\mob\living\simple_animal\hostile\bat.dm" #include "code\modules\mob\living\simple_animal\hostile\bear.dm" #include "code\modules\mob\living\simple_animal\hostile\bluespace.dm" @@ -2336,7 +2445,6 @@ #include "code\modules\mob\living\simple_animal\hostile\meat_horrors.dm" #include "code\modules\mob\living\simple_animal\hostile\mimic.dm" #include "code\modules\mob\living\simple_animal\hostile\pirate.dm" -#include "code\modules\mob\living\simple_animal\hostile\roguefleet.dm" #include "code\modules\mob\living\simple_animal\hostile\russian.dm" #include "code\modules\mob\living\simple_animal\hostile\skeleton.dm" #include "code\modules\mob\living\simple_animal\hostile\space_carp.dm" @@ -2360,9 +2468,6 @@ #include "code\modules\mob\living\simple_animal\hostile\giant_spider\thermic.dm" #include "code\modules\mob\living\simple_animal\hostile\giant_spider\tunneler.dm" #include "code\modules\mob\living\simple_animal\hostile\giant_spider\webslinger.dm" -#include "code\modules\mob\living\simple_animal\hostile\hivebot\hivebot.dm" -#include "code\modules\mob\living\simple_animal\hostile\hivebot\ranged.dm" -#include "code\modules\mob\living\simple_animal\hostile\hivebot\tank.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\drone.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\exoplanet.dm" @@ -2376,6 +2481,11 @@ #include "code\modules\mob\living\simple_animal\hostile\retaliate\space_whale.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\giant_parrot\giant_parrot.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\giant_parrot\giant_parrot_species.dm" +#include "code\modules\mob\living\simple_animal\hostile\robotic\bad_drone.dm" +#include "code\modules\mob\living\simple_animal\hostile\robotic\robots.dm" +#include "code\modules\mob\living\simple_animal\hostile\robotic\hivebot\hivebot.dm" +#include "code\modules\mob\living\simple_animal\hostile\robotic\hivebot\ranged.dm" +#include "code\modules\mob\living\simple_animal\hostile\robotic\hivebot\tank.dm" #include "code\modules\mob\new_player\login.dm" #include "code\modules\mob\new_player\logout.dm" #include "code\modules\mob\new_player\new_player.dm" @@ -2399,6 +2509,7 @@ #include "code\modules\mob\observer\ghost\ghost.dm" #include "code\modules\mob\observer\ghost\login.dm" #include "code\modules\mob\observer\ghost\logout.dm" +#include "code\modules\mob\observer\ghost\orbit.dm" #include "code\modules\mob\observer\ghost\say.dm" #include "code\modules\mob\observer\virtual\_constants.dm" #include "code\modules\mob\observer\virtual\base.dm" @@ -2609,6 +2720,9 @@ #include "code\modules\overmap\overmap_shuttle.dm" #include "code\modules\overmap\sectors.dm" #include "code\modules\overmap\spacetravel.dm" +#include "code\modules\overmap\contacts\_contacts.dm" +#include "code\modules\overmap\contacts\contact_sensors.dm" +#include "code\modules\overmap\contacts\tracker.dm" #include "code\modules\overmap\disperser\disperser.dm" #include "code\modules\overmap\disperser\disperser_charge.dm" #include "code\modules\overmap\disperser\disperser_circuit.dm" @@ -2681,15 +2795,16 @@ #include "code\modules\persistence\persistence_datum_paper_sticky.dm" #include "code\modules\pointdefense\pointdefense.dm" #include "code\modules\power\apc.dm" -#include "code\modules\power\batteryrack.dm" #include "code\modules\power\breaker_box.dm" #include "code\modules\power\cable_coil.dm" #include "code\modules\power\cable_structure.dm" #include "code\modules\power\cell.dm" +#include "code\modules\power\cell_rack.dm" #include "code\modules\power\debug_items.dm" #include "code\modules\power\generator.dm" #include "code\modules\power\gravitygenerator.dm" #include "code\modules\power\lighting.dm" +#include "code\modules\power\nav_light.dm" #include "code\modules\power\port_gen.dm" #include "code\modules\power\power.dm" #include "code\modules\power\powernet.dm" @@ -2836,15 +2951,12 @@ #include "code\modules\random_map\drop\droppod.dm" #include "code\modules\random_map\drop\droppod_doors.dm" #include "code\modules\random_map\drop\supply.dm" -#include "code\modules\random_map\dungeon\deepmaint.dm" -#include "code\modules\random_map\dungeon\jp_dungeon_gen.dm" #include "code\modules\random_map\dungeon\predefined.dm" #include "code\modules\random_map\dungeon\room.dm" #include "code\modules\random_map\dungeon\room_generation.dm" #include "code\modules\random_map\dungeon\room_theme.dm" #include "code\modules\random_map\dungeon\winding_dungeon.dm" #include "code\modules\random_map\dungeon\winding_dungeon_verb.dm" -#include "code\modules\random_map\dungeon\rooms\deepmain_room.dm" #include "code\modules\random_map\dungeon\rooms\mimic_room.dm" #include "code\modules\random_map\dungeon\rooms\monster_room.dm" #include "code\modules\random_map\dungeon\rooms\tomb.dm" @@ -2882,12 +2994,12 @@ #include "code\modules\reagents\dispenser\_defines.dm" #include "code\modules\reagents\dispenser\cartridge.dm" #include "code\modules\reagents\dispenser\cartridge_spawn.dm" -#include "code\modules\reagents\dispenser\dispenser2.dm" +#include "code\modules\reagents\dispenser\chemical_dispenser.dm" #include "code\modules\reagents\dispenser\dispenser_presets.dm" #include "code\modules\reagents\dispenser\presets\bar.dm" #include "code\modules\reagents\dispenser\presets\chemistry.dm" #include "code\modules\reagents\dispenser\presets\medicine.dm" -#include "code\modules\reagents\heat_sources\_heat_source.dm" +#include "code\modules\reagents\heat_sources\thermal_regulator.dm" #include "code\modules\reagents\reagent_containers\borghypo.dm" #include "code\modules\reagents\reagent_containers\dropper.dm" #include "code\modules\reagents\reagent_containers\food.dm" @@ -2937,6 +3049,7 @@ #include "code\modules\research\rdmachines.dm" #include "code\modules\research\research.dm" #include "code\modules\research\server.dm" +#include "code\modules\research\tech.dm" #include "code\modules\research\designs\_designs.dm" #include "code\modules\research\designs\design_aimodule.dm" #include "code\modules\research\designs\designs_beaker.dm" @@ -3154,6 +3267,38 @@ #include "code\modules\tables\tables.dm" #include "code\modules\tables\update_triggers.dm" #include "code\modules\tension\tension.dm" +#include "code\modules\tgui\external.dm" +#include "code\modules\tgui\states.dm" +#include "code\modules\tgui\tgui.dm" +#include "code\modules\tgui\tgui_window.dm" +#include "code\modules\tgui\modules\_base.dm" +#include "code\modules\tgui\modules\crew_monitor.dm" +#include "code\modules\tgui\states\admin.dm" +#include "code\modules\tgui\states\always.dm" +#include "code\modules\tgui\states\conscious.dm" +#include "code\modules\tgui\states\contained.dm" +#include "code\modules\tgui\states\deep_inventory.dm" +#include "code\modules\tgui\states\default.dm" +#include "code\modules\tgui\states\hands.dm" +#include "code\modules\tgui\states\human_adjacent.dm" +#include "code\modules\tgui\states\inventory.dm" +#include "code\modules\tgui\states\not_incapacitated.dm" +#include "code\modules\tgui\states\notcontained.dm" +#include "code\modules\tgui\states\observer.dm" +#include "code\modules\tgui\states\physical.dm" +#include "code\modules\tgui\states\self.dm" +#include "code\modules\tgui\states\zlevel.dm" +#include "code\modules\tgui\tgui_input\alert_input.dm" +#include "code\modules\tgui\tgui_input\list_input.dm" +#include "code\modules\tgui\tgui_input\number_input.dm" +#include "code\modules\tgui\tgui_input\text_input.dm" +#include "code\modules\tgui\tgui_panel\audio.dm" +#include "code\modules\tgui\tgui_panel\telemetry.dm" +#include "code\modules\tgui\tgui_panel\tgui_panel.dm" +#include "code\modules\tgui\tgui_panel\tgui_panel_external.dm" +#include "code\modules\tgui\tgui_panel\tgui_panel_message.dm" +#include "code\modules\tgui\tgui_panel\to_chat.dm" +#include "code\modules\tooltip\tooltip.dm" #include "code\modules\turbolift\_turbolift.dm" #include "code\modules\turbolift\turbolift.dm" #include "code\modules\turbolift\turbolift_areas.dm" @@ -3162,6 +3307,48 @@ #include "code\modules\turbolift\turbolift_floor.dm" #include "code\modules\turbolift\turbolift_map.dm" #include "code\modules\turbolift\turbolift_turfs.dm" +#include "code\modules\unit_tests\_defines.dm" +#include "code\modules\unit_tests\_includes.dm" +#include "code\modules\unit_tests\_unit_tests.dm" +#include "code\modules\unit_tests\alt_appearances_test.dm" +#include "code\modules\unit_tests\area_tests.dm" +#include "code\modules\unit_tests\area_turfs_cache.dm" +#include "code\modules\unit_tests\atmospherics_tests.dm" +#include "code\modules\unit_tests\cargo_tests.dm" +#include "code\modules\unit_tests\closets.dm" +#include "code\modules\unit_tests\component_tests.dm" +#include "code\modules\unit_tests\culture.dm" +#include "code\modules\unit_tests\equipment_tests.dm" +#include "code\modules\unit_tests\food_tests.dm" +#include "code\modules\unit_tests\foundation_tests.dm" +#include "code\modules\unit_tests\fusion_plants.dm" +#include "code\modules\unit_tests\graph_tests.dm" +#include "code\modules\unit_tests\icon_tests.dm" +#include "code\modules\unit_tests\integrated_circuits.dm" +#include "code\modules\unit_tests\job_tests.dm" +#include "code\modules\unit_tests\loadout_tests.dm" +#include "code\modules\unit_tests\machine_tests.dm" +#include "code\modules\unit_tests\map_tests.dm" +#include "code\modules\unit_tests\mob_tests.dm" +#include "code\modules\unit_tests\movement_tests.dm" +#include "code\modules\unit_tests\music_test.dm" +#include "code\modules\unit_tests\observation_tests.dm" +#include "code\modules\unit_tests\organ_tests.dm" +#include "code\modules\unit_tests\overmap_tests.dm" +#include "code\modules\unit_tests\power_tests.dm" +#include "code\modules\unit_tests\reagent_color_test.dm" +#include "code\modules\unit_tests\seed_tests.dm" +#include "code\modules\unit_tests\shuttle_tests.dm" +#include "code\modules\unit_tests\submaps.dm" +#include "code\modules\unit_tests\subsystem_tests.dm" +#include "code\modules\unit_tests\test_obj.dm" +#include "code\modules\unit_tests\time_tests.dm" +#include "code\modules\unit_tests\unique_tests.dm" +#include "code\modules\unit_tests\uplink_tests.dm" +#include "code\modules\unit_tests\view_variables_test.dm" +#include "code\modules\unit_tests\virtual_mob_tests.dm" +#include "code\modules\unit_tests\zas_tests.dm" +#include "code\modules\unit_tests\~helpers.dm" #include "code\modules\ventcrawl\ventcrawl.dm" #include "code\modules\ventcrawl\ventcrawl_atmospherics.dm" #include "code\modules\ventcrawl\ventcrawl_multiz.dm" @@ -3171,6 +3358,12 @@ #include "code\modules\webhooks\webhook_roundend.dm" #include "code\modules\webhooks\webhook_roundstart.dm" #include "code\modules\webhooks\webhook_submap.dm" +#include "code\modules\world_topic\_spam_prevention_handler.dm" +#include "code\modules\world_topic\_topic_base.dm" +#include "code\modules\world_topic\adminwho.dm" +#include "code\modules\world_topic\ping.dm" +#include "code\modules\world_topic\players.dm" +#include "code\modules\world_topic\status.dm" #include "code\modules\xenoarcheaology\anomaly_container.dm" #include "code\modules\xenoarcheaology\boulder.dm" #include "code\modules\xenoarcheaology\effect.dm" @@ -3190,6 +3383,7 @@ #include "code\modules\xenoarcheaology\effects\goodfeeling.dm" #include "code\modules\xenoarcheaology\effects\heal.dm" #include "code\modules\xenoarcheaology\effects\heat.dm" +#include "code\modules\xenoarcheaology\effects\human_ifier.dm" #include "code\modules\xenoarcheaology\effects\hurt.dm" #include "code\modules\xenoarcheaology\effects\pushback.dm" #include "code\modules\xenoarcheaology\effects\radiate.dm" @@ -3218,6 +3412,7 @@ #include "code\modules\xenoarcheaology\tools\suspension_generator.dm" #include "code\modules\xenoarcheaology\tools\tools.dm" #include "code\modules\xenoarcheaology\tools\tools_pickaxe.dm" +#include "code\modules\xenoarcheaology\tools\transport_drone.dm" #include "code\modules\xenoarcheaology\triggers\_trigger.dm" #include "code\modules\xenoarcheaology\triggers\chemical.dm" #include "code\modules\xenoarcheaology\triggers\energy.dm" @@ -3246,52 +3441,51 @@ #include "code\procs\dbcore.dm" #include "code\procs\hud.dm" #include "code\procs\radio.dm" -#include "code\unit_tests\_defines.dm" -#include "code\unit_tests\_includes.dm" -#include "code\unit_tests\alt_appearances_test.dm" -#include "code\unit_tests\area_tests.dm" -#include "code\unit_tests\atmospherics_tests.dm" -#include "code\unit_tests\cargo_tests.dm" -#include "code\unit_tests\closets.dm" -#include "code\unit_tests\culture.dm" -#include "code\unit_tests\equipment_tests.dm" -#include "code\unit_tests\food_tests.dm" -#include "code\unit_tests\foundation_tests.dm" -#include "code\unit_tests\fusion_plants.dm" -#include "code\unit_tests\graph_tests.dm" -#include "code\unit_tests\icon_tests.dm" -#include "code\unit_tests\integrated_circuits.dm" -#include "code\unit_tests\job_tests.dm" -#include "code\unit_tests\loadout_tests.dm" -#include "code\unit_tests\machine_tests.dm" -#include "code\unit_tests\map_tests.dm" -#include "code\unit_tests\mob_tests.dm" -#include "code\unit_tests\movement_tests.dm" -#include "code\unit_tests\music_test.dm" -#include "code\unit_tests\observation_tests.dm" -#include "code\unit_tests\organ_tests.dm" -#include "code\unit_tests\overmap_tests.dm" -#include "code\unit_tests\power_tests.dm" -#include "code\unit_tests\reagent_color_test.dm" -#include "code\unit_tests\seed_tests.dm" -#include "code\unit_tests\shuttle_tests.dm" -#include "code\unit_tests\submaps.dm" -#include "code\unit_tests\subsystem_tests.dm" -#include "code\unit_tests\test_obj.dm" -#include "code\unit_tests\time_tests.dm" -#include "code\unit_tests\unique_tests.dm" -#include "code\unit_tests\unit_test.dm" -#include "code\unit_tests\uplink_tests.dm" -#include "code\unit_tests\view_variables_test.dm" -#include "code\unit_tests\virtual_mob_tests.dm" -#include "code\unit_tests\zas_tests.dm" -#include "code\unit_tests\~helpers.dm" #include "interface\interface.dm" #include "interface\skin.dmf" +#include "maps\_map_include.dm" #include "maps\_maps.dm" -#include "maps\deepmaint\deepmaint.dm" -#include "maps\deepmaint\deepmaint_rooms\template.dm" -#include "maps\deepmaint\deepmaint_rooms\core\_core_rooms.dm" -#include "maps\deepmaint\deepmaint_rooms\normal\_normal_rooms.dm" +#include "maps\sierra\loadout\loadout_documents.dm" +#include "mods\_modpack.dm" +#include "mods\global_modpacks.dm" +#include "mods\_master_files\code\game\world.dm" +#include "mods\_master_files\code\game\gamemodes\ert.dm" +#include "mods\_master_files\code\game\objects\effects\decals\contraband.dm" +#include "mods\_master_files\code\game\objects\structures\crates_lockers\closets\_closet_appearance_definitions.dm" +#include "mods\_master_files\code\modules\clothing\spacesuits\spacesuits.dm" +#include "mods\_master_files\code\modules\culture_descriptor\_culture.dm" +#include "mods\_master_files\code\modules\culture_descriptor\culture\cultures_adherent.dm" +#include "mods\_master_files\code\modules\culture_descriptor\culture\cultures_diona.dm" +#include "mods\_master_files\code\modules\culture_descriptor\culture\cultures_human.dm" +#include "mods\_master_files\code\modules\culture_descriptor\culture\cultures_ipc.dm" +#include "mods\_master_files\code\modules\culture_descriptor\culture\cultures_serpentid.dm" +#include "mods\_master_files\code\modules\culture_descriptor\culture\cultures_skrell.dm" +#include "mods\_master_files\code\modules\culture_descriptor\culture\cultures_unathi.dm" +#include "mods\_master_files\code\modules\culture_descriptor\culture\cultures_vox.dm" +#include "mods\_master_files\code\modules\culture_descriptor\faction\factions_adherent.dm" +#include "mods\_master_files\code\modules\culture_descriptor\faction\factions_human.dm" +#include "mods\_master_files\code\modules\culture_descriptor\faction\factions_skrell.dm" +#include "mods\_master_files\code\modules\culture_descriptor\faction\factions_unathi.dm" +#include "mods\_master_files\code\modules\culture_descriptor\faction\factions_vox.dm" +#include "mods\_master_files\code\modules\culture_descriptor\location\_location.dm" +#include "mods\_master_files\code\modules\culture_descriptor\location\locations_adherent.dm" +#include "mods\_master_files\code\modules\culture_descriptor\location\locations_diona.dm" +#include "mods\_master_files\code\modules\culture_descriptor\location\locations_human.dm" +#include "mods\_master_files\code\modules\culture_descriptor\location\locations_other.dm" +#include "mods\_master_files\code\modules\culture_descriptor\location\locations_serpentids.dm" +#include "mods\_master_files\code\modules\culture_descriptor\location\locations_skrell.dm" +#include "mods\_master_files\code\modules\culture_descriptor\location\locations_unathi.dm" +#include "mods\_master_files\code\modules\culture_descriptor\location\locations_vox.dm" +#include "mods\_master_files\code\modules\culture_descriptor\religion\religions_human.dm" +#include "mods\_master_files\code\modules\culture_descriptor\religion\religions_skrell.dm" +#include "mods\_master_files\code\modules\culture_descriptor\religion\religions_unathi.dm" +#include "mods\_master_files\code\modules\culture_descriptor\religion\religions_vox.dm" +#include "mods\_master_files\code\modules\events\gravity.dm" +#include "mods\_master_files\code\modules\mob\new_player\new_player.dm" +#include "mods\_master_files\code\modules\power\gravitygenerator.dm" +#include "mods\_master_files\code\modules\projectiles\projectile\bullets.dm" +#include "mods\_master_files\maps\sierra\sierra_ranks.dm" +#include "mods\_master_files\maps\sierra\items\rigs.dm" +#include "mods\client_verbs\code\credits_datums.dm" #include "~code\global_init.dm" // END_INCLUDE diff --git a/bin/build.cmd b/bin/build.cmd new file mode 100644 index 0000000000000..98c2ef45e15ba --- /dev/null +++ b/bin/build.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error build %* diff --git a/bin/clean.cmd b/bin/clean.cmd new file mode 100644 index 0000000000000..8eacd92ebd7a0 --- /dev/null +++ b/bin/clean.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error clean-all %* diff --git a/bin/server.cmd b/bin/server.cmd new file mode 100644 index 0000000000000..c6e6642baf489 --- /dev/null +++ b/bin/server.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error server %* diff --git a/bin/test.cmd b/bin/test.cmd new file mode 100644 index 0000000000000..a76a9c6745c23 --- /dev/null +++ b/bin/test.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error dm-test %* diff --git a/bin/tgfont.cmd b/bin/tgfont.cmd new file mode 100644 index 0000000000000..b768c81d653ae --- /dev/null +++ b/bin/tgfont.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error tg-font %* diff --git a/bin/tgui-bench.cmd b/bin/tgui-bench.cmd new file mode 100644 index 0000000000000..333115f79548f --- /dev/null +++ b/bin/tgui-bench.cmd @@ -0,0 +1,3 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error tgui-bench %* +pause diff --git a/bin/tgui-build.cmd b/bin/tgui-build.cmd new file mode 100644 index 0000000000000..7804fc6daaadf --- /dev/null +++ b/bin/tgui-build.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error tgui tgui-lint tgui-test %* diff --git a/bin/tgui-dev.cmd b/bin/tgui-dev.cmd new file mode 100644 index 0000000000000..25ff3495d429b --- /dev/null +++ b/bin/tgui-dev.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error tgui-dev %* diff --git a/biome.json b/biome.json new file mode 100644 index 0000000000000..77aa384963110 --- /dev/null +++ b/biome.json @@ -0,0 +1,19 @@ +{ + "linter": { + "rules": { + "complexity": { + "useOptionalChain": "off" + }, + "performance": { + "noDelete": "off" + }, + "style": { + "noArguments": "off", + "noNegationElse": "off", + "noVar": "off", + "useConst": "off", + "useTemplate": "off" + } + } + } +} diff --git a/code/__datastructures/globals.dm b/code/__datastructures/globals.dm index 4d4f4ca1c506f..a2bc4aef4a04c 100644 --- a/code/__datastructures/globals.dm +++ b/code/__datastructures/globals.dm @@ -9,10 +9,10 @@ var/global/datum/globals/GLOB var/static/atom/movable/clickable_stat/__stat_line -/datum/globals/Destroy(force) +/datum/globals/Destroy() if (!GLOB || GLOB == src) GLOB = src - return 1 //QDEL_HINT_LETMELIVE + return QDEL_HINT_LETMELIVE return ..() @@ -78,7 +78,6 @@ var/global/datum/globals/GLOB #define GLOBAL_LIST_EMPTY(X) GLOBAL_LIST_INIT(X, list()) -#if !defined(TESTING) /// Prevents the GLOB member from being shown in View Variables. #define GLOBAL_PROTECT(X) \ /datum/globals/proc/GI_P_##X() { \ @@ -90,6 +89,3 @@ var/global/datum/globals/GLOB done = TRUE; \ VV_hidden(#X); \ } -#else -#define GLOBAL_PROTECT(X) -#endif diff --git a/code/__defines/MC.dm b/code/__defines/MC.dm index 70cca5de41344..edd52aa3fb13d 100644 --- a/code/__defines/MC.dm +++ b/code/__defines/MC.dm @@ -168,26 +168,10 @@ if(Datum.is_processing) {\ * SStimer ****/ -/// Create a hash from the timer's configuration and don't run it if one already exists. -#define TIMER_UNIQUE FLAG(0) +#define addtimer(args...) _addtimer(args, source ="[__FILE__]#[__LINE__]") -/// For timers with TIMER_UNIQUE, do not include the timer's delay as part of its uniquenes. -#define TIMER_NO_HASH_WAIT FLAG(4) - -/// For timers with TIMER_UNIQUE, replace the old timer instead of discarding the new one. -#define TIMER_OVERRIDE FLAG(1) - -/// Use real world time instead of server time. More expensive and should be reserved for client display like animations and sounds. -#define TIMER_CLIENT_TIME FLAG(2) - -/// The call to addtimer() will return a timer ID which may be passed to deltimer() to stop it if it still exists. -#define TIMER_STOPPABLE FLAG(3) - -/// Repeat the timer until it's deleted or the parent is destroyed. -#define TIMER_LOOP FLAG(5) - -/// The default timer ID. -#define TIMER_ID_NULL -1 +/**** + * Helper for waits + ****/ -/// Automatically adding filename and line to the timer's arguments for debugging purposes. -#define addtimer(args...) _addtimer(args, file = __FILE__, line = __LINE__) +#define UNTIL(X) while(!(X)) stoplag() diff --git a/code/__defines/__dview.dm b/code/__defines/__dview.dm new file mode 100644 index 0000000000000..52553ef99784a --- /dev/null +++ b/code/__defines/__dview.dm @@ -0,0 +1,14 @@ +//DVIEW defines + +#define FOR_DVIEW(type, range, center, invis_flags) \ + global.dview_mob.loc = center; \ + global.dview_mob.see_invisible = invis_flags; \ + for(type in view(range, dview_mob)) + +#define END_FOR_DVIEW dview_mob.loc = null + +#define DVIEW(output, range, center, invis_flags) \ + global.dview_mob.loc = center; \ + global.dview_mob.see_invisible = invis_flags; \ + output = view(range, dview_mob); \ + global.dview_mob.loc = null; diff --git a/code/__defines/__icons.dm b/code/__defines/__icons.dm new file mode 100644 index 0000000000000..0a4a156af7eda --- /dev/null +++ b/code/__defines/__icons.dm @@ -0,0 +1,13 @@ +/// Simple macro wrapper for BYOND proc `icon_states`, but with use of cache +/// Checkout `code/datums/repositories/icon_states.dm` for details +/// Should be used instead of `icon_states` +#define ICON_STATES(icon) GLOB.icon_states_repository.get_icon_states(icon) + +/// Helper to efficiently check if passed `icon_state` is in `icon` +#define ICON_HAS_STATE(icon, icon_state) GLOB.icon_states_repository.icon_has_state(icon, icon_state) + +/// Helper to efficiently check if passed `icon_state` is in list of `icons` +#define ANY_ICON_HAS_STATE(icons, icon_state) GLOB.icon_states_repository.any_icon_has_state(icons, icon_state) + +/// Helper to efficiently check if passed icon does not have any states +#define ICON_IS_EMPTY(icon) GLOB.icon_states_repository.is_icon_empty(icon) diff --git a/code/__defines/__initialization.dm b/code/__defines/__initialization.dm index 83dfb481df8de..7d9c1a57995da 100644 --- a/code/__defines/__initialization.dm +++ b/code/__defines/__initialization.dm @@ -3,9 +3,9 @@ #define INITIALIZATION_INNEW_MAPLOAD 2 //New should call Initialize(TRUE) #define INITIALIZATION_INNEW_REGULAR 3 //New should call Initialize(FALSE) -#define INITIALIZE_HINT_NORMAL 0 //Nothing happens -#define INITIALIZE_HINT_LATELOAD 1 //Call LateInitialize -#define INITIALIZE_HINT_QDEL 2 //Call qdel on the atom +#define INITIALIZE_HINT_NORMAL 1 //Nothing happens +#define INITIALIZE_HINT_LATELOAD 2 //Call LateInitialize +#define INITIALIZE_HINT_QDEL 3 //Call qdel on the atom #define ATOM_FLAG_INITIALIZED FLAG(0) // The atom has been initialized. Also see flags.dm diff --git a/code/__defines/__renderer.dm b/code/__defines/__renderer.dm index a84135b006791..3a3b0e8cafd02 100644 --- a/code/__defines/__renderer.dm +++ b/code/__defines/__renderer.dm @@ -12,9 +12,6 @@ EFFECTS_LAYER = 5000 TOPDOWN_LAYER = 10000 BACKGROUND_LAYER = 20000 - EFFECTS_LAYER = 5000 - TOPDOWN_LAYER = 10000 - BACKGROUND_LAYER = 20000 ------ FLOAT_PLANE = -32767 @@ -43,6 +40,8 @@ #define HEAT_EFFECT_PLANE -4 #define HEAT_EFFECT_TARGET "*heat" +#define COLD_EFFECT_TARGET "*cold" +#define COLD_EFFECT_BACK_TARGET "*coldb" #define HEAT_COMPOSITE_TARGET "*heatc" #define WARP_EFFECT_PLANE -3 @@ -134,33 +133,43 @@ #define OBFUSCATION_LAYER 5.2 #define BASE_AREA_LAYER 999 -#define OBSERVER_PLANE 2 +#define OBSERVER_PLANE 2 -#define LIGHTING_PLANE 3 // For Lighting. - The highest plane (ignoring all other even higher planes) - #define LIGHTBULB_LAYER 0 - #define LIGHTING_LAYER 1 - #define ABOVE_LIGHTING_LAYER 2 +#define LIGHTING_PLANE 3 // For Lighting. - The highest plane (ignoring all other even higher planes) + #define LIGHTBULB_LAYER 0 + #define LIGHTING_LAYER 1 + #define ABOVE_LIGHTING_LAYER 2 -#define EFFECTS_ABOVE_LIGHTING_PLANE 4 // For glowy eyes, laser beams, etc. that shouldn't be affected by darkness - #define EYE_GLOW_LAYER 1 - #define BEAM_PROJECTILE_LAYER 2 +#define EFFECTS_ABOVE_LIGHTING_PLANE 7 // For glowy eyes, laser beams, etc. that shouldn't be affected by darkness + #define EYE_GLOW_LAYER 1 + #define BEAM_PROJECTILE_LAYER 2 #define SUPERMATTER_WALL_LAYER 3 #define SPEECH_INDICATOR_LAYER 4 -#define FULLSCREEN_PLANE 5 // for fullscreen overlays that do not cover the hud. +/// This plane masks out lighting, to create an "emissive" effect for e.g glowing screens in otherwise dark areas. +#define EMISSIVE_PLANE 8 +#define EMISSIVE_TARGET "*emissive" + /// The layer you should use when you -really- don't want an emissive overlay to be blocked. + #define EMISSIVE_LAYER_UNBLOCKABLE 9999 - #define FULLSCREEN_LAYER 0 - #define DAMAGE_LAYER 1 - #define IMPAIRED_LAYER 2 - #define BLIND_LAYER 3 - #define CRIT_LAYER 4 +#define FULLSCREEN_PLANE 9 // for fullscreen overlays that do not cover the hud. -#define HUD_PLANE 6 - #define UNDER_HUD_LAYER 0 - #define HUD_BASE_LAYER 2 - #define HUD_ITEM_LAYER 3 - #define HUD_ABOVE_ITEM_LAYER 4 + #define FULLSCREEN_LAYER 0 + #define DAMAGE_LAYER 1 + #define IMPAIRED_LAYER 2 + #define BLIND_LAYER 3 + #define CRIT_LAYER 4 +#define HUD_PLANE 10 + #define UNDER_HUD_LAYER 0 + #define HUD_BASE_LAYER 2 + #define HUD_CLICKABLE_LAYER 3 + #define HUD_ITEM_LAYER 4 + #define HUD_ABOVE_ITEM_LAYER 5 + #define HUD_ABOVE_HUD_LAYER 6 + +#define RUNECHAT_PLANE 11 +#define BALLOON_CHAT_PLANE 12 //-------------------- Rendering --------------------- @@ -176,22 +185,13 @@ /// The final render group, for compositing #define RENDER_GROUP_FINAL 999 - -/// Causes the atom to ignore clicks, hovers, etc. -#define MOUSE_OPACITY_UNCLICKABLE 0 - -/// Causes the atom to catch clicks, hovers, etc. -#define MOUSE_OPACITY_NORMAL 1 - -/// Causes the atom to catch clicks, hovers, etc, taking priority over NORMAL for a shared pointer target. -#define MOUSE_OPACITY_PRIORITY 2 - - /// Integer (One of `*_PLANE`). The atom's rendering plane. See `code\__defines\__renderer.dm` for a list of valid planes. Also see the DM Reference for `plane var (atom)`. /atom/plane = DEFAULT_PLANE #define DEFAULT_APPEARANCE_FLAGS (PIXEL_SCALE) +#define DEFAULT_RENDERER_APPEARANCE_FLAGS (PLANE_MASTER | NO_CLIENT_COLOR) + /atom/appearance_flags = DEFAULT_APPEARANCE_FLAGS /atom/movable/appearance_flags = DEFAULT_APPEARANCE_FLAGS | TILE_BOUND // Most AMs are not visibly bigger than a tile. /image/appearance_flags = DEFAULT_APPEARANCE_FLAGS diff --git a/code/__defines/_click.dm b/code/__defines/_click.dm new file mode 100644 index 0000000000000..07d044f8b8961 --- /dev/null +++ b/code/__defines/_click.dm @@ -0,0 +1,45 @@ +//Defines file for byond click related parameters +//this is mostly for ease of use and for finding all the things that use say RIGHT_CLICK rather then just searching "right" + +//Mouse buttons held +#define RIGHT_CLICK "right" +#define MIDDLE_CLICK "middle" +#define LEFT_CLICK "left" + +///Mouse button that was just clicked/released +///if(modifiers[BUTTON] == LEFT_CLICK) +#define BUTTON "button" + +//Keys held down during the mouse action +#define CTRL_CLICK "ctrl" +#define ALT_CLICK "alt" +#define SHIFT_CLICK "shift" + +//Cells involved if using a Grid control +#define DRAG_CELL "drag-cell" +#define DROP_CELL "drop-cell" + +//The button used for dragging (only sent for unrelated mouse up/down messages during a drag) +#define DRAG "drag" + +//If the mouse is over a link in maptext, or this event is related to clicking such a link +#define LINK "link" + +//Pixel coordinates relative to the icon's position on screen +#define VIS_X "vis-x" +#define VIS_Y "vis-y" + +//Pixel coordinates within the icon, in the icon's coordinate space +#define ICON_X "icon-x" +#define ICON_Y "icon-y" + +//Pixel coordinates in screen_loc format ("[tile_x]:[pixel_x],[tile_y]:[pixel_y]") +#define SCREEN_LOC "screen-loc" + +//https://secure.byond.com/docs/ref/info.html#/atom/var/mouse_opacity +/// Objects will ignore being clicked on regardless of their transparency (used in parallax, lighting effects, holograms, lasers, etc.) +#define MOUSE_OPACITY_TRANSPARENT 0 +/// Objects will be clicked on if it is the topmost object and the pixel isn't transparent at the position of the mouse (default behavior for 99.99% of game objects) +#define MOUSE_OPACITY_ICON 1 +/// Objects will be always be clicked on regardless of pixel transparency or other objects at that location (used in space vines, megafauna, storage containers) +#define MOUSE_OPACITY_OPAQUE 2 diff --git a/code/__defines/_excom.dm b/code/__defines/_excom.dm new file mode 100644 index 0000000000000..d8cf8f709272d --- /dev/null +++ b/code/__defines/_excom.dm @@ -0,0 +1,2 @@ +#define EXCOM_MSG_AHELP "ahelp" +#define EXCOM_MSG_STATUS "status" diff --git a/code/__defines/_renderer.dm b/code/__defines/_renderer.dm index 318c454dd76a0..9be51256f3e98 100644 --- a/code/__defines/_renderer.dm +++ b/code/__defines/_renderer.dm @@ -10,7 +10,7 @@ /// The base /renderer definition and defaults. /atom/movable/renderer abstract_type = /atom/movable/renderer - appearance_flags = PLANE_MASTER + appearance_flags = DEFAULT_RENDERER_APPEARANCE_FLAGS screen_loc = "CENTER" plane = LOWEST_PLANE blend_mode = BLEND_OVERLAY @@ -127,20 +127,24 @@ INITIALIZE_IMMEDIATE(/atom/movable/renderer) * Higher plane values are composited over lower. Here, they are ordered from under to over. */ - /// Handles byond internal letterboxing. Avoid touching. +/// Handles byond internal letterboxing. Avoid touching. /atom/movable/renderer/letterbox name = "Letterbox" group = RENDER_GROUP_SCENE plane = BLACKNESS_PLANE - appearance_flags = PLANE_MASTER | NO_CLIENT_COLOR blend_mode = BLEND_MULTIPLY - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /atom/movable/renderer/space name = "Space" group = RENDER_GROUP_SCENE plane = SPACE_PLANE +/atom/movable/renderer/space_dust + name = "Space Dust" + group = RENDER_GROUP_SCENE + plane = DUST_PLANE + /atom/movable/renderer/skybox name = "Skybox" group = RENDER_GROUP_SCENE @@ -166,6 +170,10 @@ GLOBAL_LIST_EMPTY(zmimic_renderers) name = "Zrenderer [plane]" . = ..() +/atom/movable/renderer/shared/zmimic/Destroy() + GLOB.zmimic_renderers -= src + return ..() + // Draws the game world; live mobs, items, turfs, etc. /atom/movable/renderer/game name = "Game" @@ -184,16 +192,17 @@ GLOBAL_LIST_EMPTY(zmimic_renderers) name = "Lighting" group = RENDER_GROUP_SCENE plane = LIGHTING_PLANE - appearance_flags = PLANE_MASTER | NO_CLIENT_COLOR relay_blend_mode = BLEND_MULTIPLY - color = list( - -1, 0, 0, 0, // R - 0, -1, 0, 0, // G - 0, 0, -1, 0, // B - 0, 0, 0, 0, // A - 1, 1, 1, 1 // Mapping + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + + +/atom/movable/renderer/lighting/Initialize() + . = ..() + filters += filter( + type = "alpha", + render_source = EMISSIVE_TARGET, + flags = MASK_INVERSE ) - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE /// Draws visuals that should not be affected by darkness. /atom/movable/renderer/above_lighting @@ -207,7 +216,7 @@ GLOBAL_LIST_EMPTY(zmimic_renderers) name = "Screen Effects" group = RENDER_GROUP_SCENE plane = FULLSCREEN_PLANE - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /// Draws user interface elements. @@ -216,6 +225,15 @@ GLOBAL_LIST_EMPTY(zmimic_renderers) group = RENDER_GROUP_SCREEN plane = HUD_PLANE +/atom/movable/renderer/runechat + name = "Runechat" + group = RENDER_GROUP_SCREEN + plane = RUNECHAT_PLANE + +/atom/movable/renderer/balloon_chat + name = "Balloon chat" + group = RENDER_GROUP_SCREEN + plane = BALLOON_CHAT_PLANE /* * * Group renderers @@ -233,7 +251,6 @@ GLOBAL_LIST_EMPTY(zmimic_renderers) group = RENDER_GROUP_FINAL plane = RENDER_GROUP_SCENE - /// Render group for stuff OUTSIDE the typical game context - UI, full screen effects, etc. /atom/movable/renderer/screen_group name = "Screen Group" @@ -258,13 +275,13 @@ GLOBAL_LIST_EMPTY(zmimic_renderers) */ -/// Renders the /obj/effect/effect/warp example effect as well as gravity catapult effects +/// Renders the /obj/effect/warp example effect as well as gravity catapult effects /atom/movable/renderer/warp name = "Warp Effect" group = RENDER_GROUP_NONE plane = WARP_EFFECT_PLANE render_target_name = "*warp" - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT //Similar to warp but not as strong /atom/movable/renderer/heat @@ -272,9 +289,10 @@ GLOBAL_LIST_EMPTY(zmimic_renderers) group = RENDER_GROUP_NONE plane = HEAT_EFFECT_PLANE render_target_name = HEAT_COMPOSITE_TARGET - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/obj/gas_heat_object = null + var/obj/gas_cold_object = null // Not strictly a heat effect but similar setup so may as well /atom/movable/renderer/heat/proc/Setup() var/mob/M = owner @@ -285,22 +303,28 @@ GLOBAL_LIST_EMPTY(zmimic_renderers) if(gas_heat_object) vis_contents -= gas_heat_object + if(gas_cold_object) + vis_contents -= gas_cold_object + if (quality == GLOB.PREF_LOW) - if(!istype(gas_heat_object, /obj/effect/heat)) - QDEL_NULL(gas_heat_object) - gas_heat_object = new /obj/effect/heat(null) + QDEL_NULL(gas_heat_object) + gas_heat_object = new /obj/heat(null) + + QDEL_NULL(gas_cold_object) + gas_cold_object = new /obj/effect/cold_mist_gas(null) else - if(!istype(gas_heat_object, /obj/particle_emitter/heat)) - QDEL_NULL(gas_heat_object) - gas_heat_object = new /obj/particle_emitter/heat(null, -1) + QDEL_NULL(gas_heat_object) + QDEL_NULL(gas_cold_object) + gas_cold_object = new /obj/particle_emitter/mist/gas(null) if (quality == GLOB.PREF_MED) - gas_heat_object.particles?.count = 250 - gas_heat_object.particles?.spawning = 15 + gas_heat_object = new /obj/particle_emitter/heat(null) else if (quality == GLOB.PREF_HIGH) - gas_heat_object.particles?.count = 600 - gas_heat_object.particles?.spawning = 35 + gas_heat_object = new /obj/particle_emitter/heat/high(null) vis_contents += gas_heat_object + if(config.enable_cold_mist) + vis_contents += gas_cold_object + /atom/movable/renderer/heat/Initialize() . = ..() @@ -314,3 +338,30 @@ GLOBAL_LIST_EMPTY(zmimic_renderers) . = ..() filters += filter(type = "displace", render_source = "*warp", size = 5) filters += filter(type = "displace", render_source = HEAT_COMPOSITE_TARGET, size = 2.5) + +/*! + * This system works by exploiting BYONDs color matrix filter to use layers to handle emissive blockers. + * + * Emissive overlays are pasted with an atom color that converts them to be entirely some specific color. + * Emissive blockers are pasted with an atom color that converts them to be entirely some different color. + * Emissive overlays and emissive blockers are put onto the same plane. + * The layers for the emissive overlays and emissive blockers cause them to mask eachother similar to normal BYOND objects. + * A color matrix filter is applied to the emissive plane to mask out anything that isn't whatever the emissive color is. + * This is then used to alpha mask the lighting plane. + * + * This works best if emissive overlays applied only to objects that emit light, + * since luminosity=0 turfs may not be rendered. + */ +/atom/movable/renderer/emissive + name = "Emissive" + group = RENDER_GROUP_NONE + plane = EMISSIVE_PLANE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + render_target_name = EMISSIVE_TARGET + +/atom/movable/renderer/emissive/Initialize() + . = ..() + filters += filter( + type = "color", + color = GLOB.em_mask_matrix + ) diff --git a/code/__defines/admin.dm b/code/__defines/admin.dm index 2c0ebdb4b0943..82d32cb4d73c3 100644 --- a/code/__defines/admin.dm +++ b/code/__defines/admin.dm @@ -31,7 +31,9 @@ #define R_SOUNDS FLAG(11) #define R_SPAWN FLAG(12) #define R_MOD FLAG(13) -#define R_HOST FLAG(14) +#define R_XENO FLAG(14) +#define R_HOST FLAG(15) + #define R_INVESTIGATE (R_ADMIN | R_MOD) #define R_MAXPERMISSION R_HOST @@ -44,4 +46,4 @@ #define TICKET_ASSIGNED 2 // An admin has assigned themself to the ticket and will respond #define LAST_CKEY(M) (M.ckey || M.last_ckey) -#define LAST_KEY(M) (M.key || M.last_ckey) \ No newline at end of file +#define LAST_KEY(M) (M.key || M.last_ckey) diff --git a/code/__defines/ai.dm b/code/__defines/ai.dm new file mode 100644 index 0000000000000..78a3d87ff688a --- /dev/null +++ b/code/__defines/ai.dm @@ -0,0 +1,54 @@ +// Defines for the ai_intelligence var. +// Controls if the mob will do 'advanced tactics' like running from grenades. +#define AI_DUMB 1 // Be dumber than usual. +#define AI_NORMAL 2 // Default level. +#define AI_SMART 3 // Will do more processing to be a little smarter, like not walking while confused if it could risk stepping randomly onto a bad tile. + +#define ai_log(M,V) if(debug_ai) ai_log_output(M,V) + +// Logging level defines. +#define AI_LOG_OFF 0 // Don't show anything. +#define AI_LOG_ERROR 1 // Show logs of things likely causing the mob to not be functioning correctly. +#define AI_LOG_WARNING 2 // Show less serious but still helpful to know issues that might be causing things to work incorrectly. +#define AI_LOG_INFO 3 // Important regular events, like selecting a target or switching stances. +#define AI_LOG_DEBUG 4 // More detailed information about the flow of execution. +#define AI_LOG_TRACE 5 // Even more detailed than the last. Will absolutely flood your chatlog. + +// Results of pre-movement checks. +// Todo: Move outside AI code? +#define MOVEMENT_ON_COOLDOWN -1 // Recently moved and needs to try again soon. +#define MOVEMENT_FAILED 0 // Move() returned false for whatever reason and the mob didn't move. +#define MOVEMENT_SUCCESSFUL 1 // Move() returned true and the mob hopefully moved. + +// Results of pre-attack checks. +#define ATTACK_ON_COOLDOWN -1 // Recently attacked and needs to try again soon. +#define ATTACK_FAILED 0 // Something else went wrong! Maybe they moved away! +#define ATTACK_SUCCESSFUL 1 // We attacked (or tried to, misses count too) + +// Reasons for targets to not be valid. Based on why, the AI responds differently. +#define AI_TARGET_VALID 0 // We can fight them. +#define AI_TARGET_INVIS 1 // They were in field of view but became invisible. Switch to STANCE_BLINDFIGHT if no other viable targets exist. +#define AI_TARGET_NOSIGHT 2 // No longer in field of view. Go STANCE_REPOSITION to their last known location if no other targets are seen. +#define AI_TARGET_ALLY 3 // They are an ally. Find a new target. +#define AI_TARGET_DEAD 4 // They're dead. Find a new target. +#define AI_TARGET_INVINCIBLE 5 // Target is currently unable to receive damage for whatever reason. Find a new target or wait. + +// Stances to determine AI state. +#define STANCE_SLEEP 0 // Doing (almost) nothing, to save on CPU because nobody is around to notice or the mob died. +#define STANCE_IDLE 1 // The more or less default state. Wanders around, looks for baddies, and spouts one-liners. +#define STANCE_ALERT 2 // A baddie is visible but not too close, and essentially we tell them to go away or die. +#define STANCE_APPROACH 3 // Attempting to get into range to attack them. +#define STANCE_FIGHT 4 // Actually fighting, with melee or ranged. +#define STANCE_BLINDFIGHT 5 // Fighting something that cannot be seen by the mob, from invisibility or out of sight. +#define STANCE_REPOSITION 6 // Relocating to a better position while in combat. Also used when moving away from a danger like grenades. +#define STANCE_MOVE 7 // Similar to above but for out of combat. If a baddie is seen, they'll cancel and fight them. +#define STANCE_FOLLOW 8 // Following somone, without trying to murder them. +#define STANCE_FLEE 9 // Run away from the target because they're too spooky/we're dying/some other reason. +#define STANCE_DISABLED 10 // Used when the holder is afflicted with certain status effects, such as stuns or confusion. + +#define STANCE_ATTACK 11 // Backwards compatability +#define STANCE_ATTACKING 12 // Ditto + +#define STANCES_COMBAT list(STANCE_ALERT, STANCE_APPROACH, STANCE_FIGHT, STANCE_BLINDFIGHT, STANCE_REPOSITION) + +#define AUTO_ANNOUNCER_NAME "Автоматическая система оповещений" diff --git a/code/__defines/ao_misc.dm b/code/__defines/ao_misc.dm index d4be84dc0662a..f8813b26060e9 100644 --- a/code/__defines/ao_misc.dm +++ b/code/__defines/ao_misc.dm @@ -1,9 +1,9 @@ /* Define for getting a bitfield of adjacent turfs that meet a condition. - ORIGIN is the object to step from, VAR is the var to write the bitfield to - TVAR is the temporary turf variable to use, FUNC is the condition to check. - FUNC generally should reference TVAR. - example: +ORIGIN is the object to step from, VAR is the var to write the bitfield to +TVAR is the temporary turf variable to use, FUNC is the condition to check. +FUNC generally should reference TVAR. +example: var/turf/T var/result = 0 CALCULATE_NEIGHBORS(src, result, T, isopenturf(T)) diff --git a/code/__defines/atmos.dm b/code/__defines/atmos.dm index 9419357e4ab51..9dca486ef05d5 100644 --- a/code/__defines/atmos.dm +++ b/code/__defines/atmos.dm @@ -22,7 +22,7 @@ #define SOUND_MINIMUM_PRESSURE 10 #define PRESSURE_DAMAGE_COEFFICIENT 4 // The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE. -#define MAX_HIGH_PRESSURE_DAMAGE 4 // This used to be 20... I got this much random rage for some retarded decision by polymorph?! Polymorph now lies in a pool of blood with a katana jammed in his spleen. ~Errorage --PS: The katana did less than 20 damage to him :( +#define MAX_HIGH_PRESSURE_DAMAGE 4 // This used to be 20 #define LOW_PRESSURE_DAMAGE 0.6 // The amount of damage someone takes when in a low pressure area. (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value). #define MINIMUM_PRESSURE_DIFFERENCE_TO_SUSPEND (MINIMUM_AIR_TO_SUSPEND*R_IDEAL_GAS_EQUATION*T20C)/CELL_VOLUME // Minimum pressure difference between zones to suspend @@ -49,6 +49,9 @@ #define CARBON_LIFEFORM_FIRE_RESISTANCE (T0C + 200) #define CARBON_LIFEFORM_FIRE_DAMAGE 4 +#define FOGGING_TEMPERATURE (T0C + 5) +#define MAX_FOG_TEMPERATURE (T0C - 50) + // Phoron fire properties. #define PHORON_MINIMUM_BURN_TEMPERATURE (T0C + 126) //400 K - autoignite temperature in tanks and canisters - enclosed environments I guess #define PHORON_FLASHPOINT (T0C + 246) //519 K - autoignite temperature in air if that ever gets implemented. @@ -126,3 +129,4 @@ #define GAS_PHORON "phoron" #define GAS_BORON "boron" #define GAS_HEAT "heat" //Not a real gas, used for visual effects +#define GAS_COLD "cold" //Not a real gas, used for visual effects diff --git a/code/__defines/atmospherics.dm b/code/__defines/atmospherics.dm index 90b906449774d..da3db5331c8da 100644 --- a/code/__defines/atmospherics.dm +++ b/code/__defines/atmospherics.dm @@ -4,11 +4,11 @@ #define PIPE_ROTATE_ONEDIR 2 // Only has one dir, south //Connection Type Definitions -#define CONNECT_TYPE_REGULAR 1 -#define CONNECT_TYPE_SUPPLY 2 -#define CONNECT_TYPE_SCRUBBER 4 -#define CONNECT_TYPE_HE 8 -#define CONNECT_TYPE_FUEL 16 +#define CONNECT_TYPE_REGULAR FLAG(0) +#define CONNECT_TYPE_SUPPLY FLAG(1) +#define CONNECT_TYPE_SCRUBBER FLAG(2) +#define CONNECT_TYPE_HE FLAG(3) +#define CONNECT_TYPE_FUEL FLAG(4) #define DISPOSAL_FLIP_NONE 0 #define DISPOSAL_FLIP_FLIP 1 @@ -23,4 +23,4 @@ #define PIPE_CLASS_QUATERNARY 4 #define PIPE_CLASS_OMNI 5 -#define ADIABATIC_EXPONENT 0.667 //Actually adiabatic exponent - 1. \ No newline at end of file +#define ADIABATIC_EXPONENT 0.667 //Actually adiabatic exponent - 1. diff --git a/code/__defines/byond_tracy.dm b/code/__defines/byond_tracy.dm new file mode 100644 index 0000000000000..457636d295f5f --- /dev/null +++ b/code/__defines/byond_tracy.dm @@ -0,0 +1,31 @@ +// Implements https://github.com/mafemergency/byond-tracy +// Client https://github.com/wolfpld/tracy +// As of now, only 0.8.2 is supported as a client, this might change in the future however + +// In case you need to start the capture as soon as the server boots, uncomment the following lines and recompile: + +// /world/New() +// prof_init() +// . = ..() + +/client/proc/profiler_start() + set name = "Start Tracy Profiler" + set category = "Debug" + set desc = "Starts the tracy profiler, which will await the client connection." + switch(alert("Are you sure? Tracy will remain active until the server restarts.", "Tracy Init", "No", "Yes")) + if("Yes") + prof_init() + +/** + * Starts Tracy + */ +/proc/prof_init() + var/lib + + switch(world.system_type) + if(MS_WINDOWS) lib = "prof.dll" + if(UNIX) lib = "libprof.so" + else CRASH("Tracy initialization failed: unsupported platform or DLL not found.") + + var/init = CALL_EXT(lib, "init")() + if("0" != init) CRASH("[lib] init error: [init]") diff --git a/code/__defines/callback.dm b/code/__defines/callback.dm new file mode 100644 index 0000000000000..f86e968c98767 --- /dev/null +++ b/code/__defines/callback.dm @@ -0,0 +1 @@ +#define CALLBACK new /datum/callback diff --git a/code/__defines/chat.dm b/code/__defines/chat.dm new file mode 100644 index 0000000000000..149f5d856988c --- /dev/null +++ b/code/__defines/chat.dm @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/// How many chat payloads to keep in history +#define CHAT_RELIABILITY_HISTORY_SIZE 5 +/// How many resends to allow before giving up +#define CHAT_RELIABILITY_MAX_RESENDS 3 + +#define MESSAGE_TYPE_SYSTEM "system" +#define MESSAGE_TYPE_LOCALCHAT "localchat" +#define MESSAGE_TYPE_RADIO "radio" +#define MESSAGE_TYPE_INFO "info" +#define MESSAGE_TYPE_WARNING "warning" +#define MESSAGE_TYPE_DEADCHAT "deadchat" +#define MESSAGE_TYPE_OOC "ooc" +#define MESSAGE_TYPE_ADMINPM "adminpm" +#define MESSAGE_TYPE_COMBAT "combat" +#define MESSAGE_TYPE_ADMINCHAT "adminchat" +#define MESSAGE_TYPE_MENTORCHAT "mentorchat" +#define MESSAGE_TYPE_EVENTCHAT "eventchat" +#define MESSAGE_TYPE_ADMINLOG "adminlog" +#define MESSAGE_TYPE_ATTACKLOG "attacklog" +#define MESSAGE_TYPE_DEBUG "debug" diff --git a/code/__defines/chat_boxes.dm b/code/__defines/chat_boxes.dm new file mode 100644 index 0000000000000..40a1c491cf37f --- /dev/null +++ b/code/__defines/chat_boxes.dm @@ -0,0 +1,8 @@ +#define chat_box_regular(str) ("
" + str + "
") +#define chat_box_examine(str) ("
" + str + "
") +#define chat_box_red(str) ("
" + str + "
") +#define chat_box_green(str) ("
" + str + "
") +#define chat_box_purple(str) ("
" + str + "
") +#define chat_box_notice(str) ("
" + str + "
") +#define chat_box_healthscan(str) ("
" + str + "
") +#define chat_box_notice_thick(str) ("
" + str + "
") diff --git a/code/__defines/client.dm b/code/__defines/client.dm index 0794c852df6f0..41979280cbb6b 100644 --- a/code/__defines/client.dm +++ b/code/__defines/client.dm @@ -1,2 +1,3 @@ -#define CLIENT_MIN_FPS 0 -#define CLIENT_MAX_FPS 1000 +#define CLIENT_MIN_FPS 15 +#define CLIENT_MAX_FPS 120 +#define CLIENT_DEFAULT_FPS 66 diff --git a/code/__defines/colors.dm b/code/__defines/colors.dm index 289afdbe9010e..6c8d73023e0bf 100644 --- a/code/__defines/colors.dm +++ b/code/__defines/colors.dm @@ -84,6 +84,17 @@ #define COLOR_VOX "#244238" +#define CABLE_COLOR_RED "#800000" +#define CABLE_COLOR_YELLOW "#ffbf00" +#define CABLE_COLOR_GREEN "#008000" +#define CABLE_COLOR_BLUE "#3366cc" +#define CABLE_COLOR_PINK "#800080" +#define CABLE_COLOR_ORANGE "#ff9900" +#define CABLE_COLOR_CYAN "#5ca1cc" +#define CABLE_COLOR_WHITE "#c0c0c0" +#define CABLE_COLOR_BLACK "#333333" + + #define PIPE_COLOR_GREY "#808080" #define PIPE_COLOR_RED "#ff0000" #define PIPE_COLOR_BLUE "#0000ff" @@ -109,7 +120,7 @@ #define COMMS_COLOR_SECURITY "#930000" #define COMMS_COLOR_SECURITY_I "#935050" #define COMMS_COLOR_COMMAND "#204090" -#define COMMS_COLOR_CENTCOMM "#5c5c7c" +#define COMMS_COLOR_CENTCOM "#5c5c7c" #define COMMS_COLOR_SYNDICATE "#6d3f40" #define COMMS_COLOR_SKRELL "#7331c4" #define COMMS_COLOR_VOX "#f32b06" @@ -127,12 +138,26 @@ #define WOOD_COLOR_YELLOW "#e3994e" #define GLASS_COLOR "#aaccff" -#define GLASS_COLOR_PHORON "#7c3a9a" +#define GLASS_COLOR_BORON "#899ebd" #define GLASS_COLOR_TINTED "#222222" #define GLASS_COLOR_FROSTED "#eeeeee" #define COLOR_BLOOD_HUMAN "#a10808" +// Color defines used by the crew manifest +#define MANIFEST_COLOR_COMMAND "#204090" +#define MANIFEST_COLOR_SUPPORT "#3085b6" +#define MANIFEST_COLOR_SCIENCE "#993399" +#define MANIFEST_COLOR_SECURITY "#930000" +#define MANIFEST_COLOR_MEDICAL "#009190" +#define MANIFEST_COLOR_ENGINEER "#a66300" +#define MANIFEST_COLOR_SUPPLY "#7f6539" +#define MANIFEST_COLOR_EXPLORER "#929820" +#define MANIFEST_COLOR_SERVICE "#709b00" +#define MANIFEST_COLOR_CIVILIAN "#408010" +#define MANIFEST_COLOR_MISC "#353a42" +#define MANIFEST_COLOR_SILICON "#4c535b" + //Color defines used by the assembly detailer. #define COLOR_ASSEMBLY_BLACK "#545454" #define COLOR_ASSEMBLY_BGRAY "#9497ab" @@ -180,10 +205,6 @@ #define COLOR_WEBHOOK_DEFAULT 0x8bbbd5 -#define COLOR_DARKMODE_BACKGROUND "#202020" -#define COLOR_DARKMODE_DARKBACKGROUND "#171717" -#define COLOR_DARKMODE_TEXT "#a4bad6" - // Medical readout colors #define COLOR_MEDICAL_BRUTE "#ff0000" #define COLOR_MEDICAL_BURN "#ff7700" diff --git a/code/__defines/combat.dm b/code/__defines/combat.dm new file mode 100644 index 0000000000000..47620a76af9d2 --- /dev/null +++ b/code/__defines/combat.dm @@ -0,0 +1,10 @@ +/// Alternate attack defines. Return these at the end of procs like afterattack_secondary. +/// Calls the normal attack proc. For example, if returned in afterattack_secondary, will call afterattack. +/// Will continue the chain depending on the return value of the non-alternate proc, like with normal attacks. +#define SECONDARY_ATTACK_CALL_NORMAL 1 + +/// Cancels the attack chain entirely. +#define SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN 2 + +/// Proceed with the attack chain, but don't call the normal methods. +#define SECONDARY_ATTACK_CONTINUE_CHAIN 3 diff --git a/code/__defines/culture.dm b/code/__defines/culture.dm index 2cc1ee3fd5454..0131435a771ac 100644 --- a/code/__defines/culture.dm +++ b/code/__defines/culture.dm @@ -3,17 +3,25 @@ #define TAG_FACTION "faction" #define TAG_RELIGION "religion" +// [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод дефайнов +//#define ALL_CULTURAL_TAGS list( \ // SIERRA-EDIT - ORIGINAL +// TAG_CULTURE = "Culture", \ // SIERRA-EDIT - ORIGINAL +// TAG_HOMEWORLD = "Residence", \ // SIERRA-EDIT - ORIGINAL +// TAG_FACTION = "Faction", \ // SIERRA-EDIT - ORIGINAL +// TAG_RELIGION = "Beliefs" \ // SIERRA-EDIT - ORIGINAL +// ) // SIERRA-EDIT - ORIGINAL #define ALL_CULTURAL_TAGS list( \ - TAG_CULTURE = "Culture", \ - TAG_HOMEWORLD = "Residence", \ - TAG_FACTION = "Faction", \ - TAG_RELIGION = "Beliefs" \ + TAG_CULTURE = "Культура", \ + TAG_HOMEWORLD = "Место жительства", \ + TAG_FACTION = "Фракция", \ + TAG_RELIGION = "Вера" \ ) +// [SIERRA-EDIT] // Cultural IDs. #define FACTION_SOL_CENTRAL "Sol Central Government" #define FACTION_INDIE_CONFED "Gilgamesh Colonial Confederation" -#define FACTION_NANOTRASEN "NanoTrasen" +#define FACTION_NANOTRASEN "Nanotrasen" #define FACTION_FREETRADE "Free Trade Union" #define FACTION_HEPHAESTUS "Hephaestus Industries" #define FACTION_XYNERGY "Xynergy" @@ -61,10 +69,22 @@ #define CULTURE_HUMAN_BELTER "Belter, Ceres" #define CULTURE_HUMAN_PLUTO "Plutonian" #define CULTURE_HUMAN_EARTH "Earther" -#define CULTURE_HUMAN_CETI "Cetite" -#define CULTURE_HUMAN_SPACER "Spacer, Core Systems" -#define CULTURE_HUMAN_SPAFRO "Spacer, Frontier Systems" -#define CULTURE_HUMAN_CONFED "Terran" +#define CULTURE_HUMAN_CETIN "Cetite, Northern" +#define CULTURE_HUMAN_CETIS "Cetite, Southern" +#define CULTURE_HUMAN_CETII "Cetite, Interstate" +#define CULTURE_HUMAN_FOSTER "Fostersman" +#define CULTURE_HUMAN_PIRXL "Pirxish, High" +#define CULTURE_HUMAN_PIRXB "Pirxish, Bugeater" +#define CULTURE_HUMAN_PIRXF "Pirxish, Frontier" +#define CULTURE_HUMAN_TADMOR "Tadmorian" +#define CULTURE_HUMAN_IOLAUS "Iolan" +#define CULTURE_HUMAN_BRAHE "Brahite" +#define CULTURE_HUMAN_EOS "Eosic" +#define CULTURE_HUMAN_SPACER "Spacer" +#define CULTURE_HUMAN_OFFWORLD "Offworlder" +#define CULTURE_HUMAN_SOLCOL "Solar-Colonial" +#define CULTURE_HUMAN_CONFEDC "Terran, Core Systems" +#define CULTURE_HUMAN_CONFEDO "Terran, Outer Systems" #define CULTURE_HUMAN_GAIAN "Gaian" #define CULTURE_HUMAN_OTHER "Other, Humanity" #define CULTURE_STARLIGHT "Starlit Realms" @@ -143,11 +163,9 @@ #define RELIGION_VOX "Auralis Reverence" // IPC cultures. -#define CULTURE_POSITRONICS "Union Member" - -#define HOME_SYSTEM_ROOT "Root" - -#define FACTION_POSITRONICS "Positronic Union" +#define CULTURE_POSITRONICS_GEN1 "First Generation" +#define CULTURE_POSITRONICS_GEN2 "Second Generation" +#define CULTURE_POSITRONICS_GEN3 "Third Generation" // Diona cultures. #define CULTURE_DIONA "Diona Chorus" diff --git a/code/__defines/dcs/flags.dm b/code/__defines/dcs/flags.dm new file mode 100644 index 0000000000000..192049d83b592 --- /dev/null +++ b/code/__defines/dcs/flags.dm @@ -0,0 +1,54 @@ +/// Return this from `/datum/component/Initialize` or `/datum/component/OnTransfer` or `/datum/component/on_source_add` to have the component be deleted if it's applied to an incorrect type. +/// `parent` must not be modified if this is to be returned. +/// This will be noted in the runtime logs +#define COMPONENT_INCOMPATIBLE 1 +/// Returned in PostTransfer to prevent transfer, similar to `COMPONENT_INCOMPATIBLE` +#define COMPONENT_NOTRANSFER 2 + +/// Return value to cancel attaching +#define ELEMENT_INCOMPATIBLE 1 + +// /datum/element flags +/// Causes the detach proc to be called when the host object is being deleted. +/// Should only be used if you need to perform cleanup not related to the host object. +/// You do not need this if you are only unregistering signals, for instance. +/// You would need it if you are doing something like removing the target from a processing list. +#define ELEMENT_DETACH_ON_HOST_DESTROY FLAG(0) +/** + * Only elements created with the same arguments given after `argument_hash_start_idx` share an element instance + * The arguments are the same when the text and number values are the same and all other values have the same ref + */ +#define ELEMENT_BESPOKE FLAG(1) +/// Causes all detach arguments to be passed to detach instead of only being used to identify the element +/// When this is used your Detach proc should have the same signature as your Attach proc +#define ELEMENT_COMPLEX_DETACH FLAG(2) +/** + * Elements with this flag will have their datum lists arguments compared as is, + * without the contents being sorted alpha-numerically first. + * This is good for those elements where the position of the keys matter, like in the case of color matrices. + */ +#define ELEMENT_DONT_SORT_LIST_ARGS FLAG(3) +/** + * Elements with this flag will be ignored by the dcs_check_list_arguments test. + * A good example is connect_loc, for which it's pratically undoable unless we force every signal proc to have a different name. + */ +#define ELEMENT_NO_LIST_UNIT_TEST FLAG(4) + +// How multiple components of the exact same type are handled in the same datum +/// old component is deleted (default) +#define COMPONENT_DUPE_HIGHLANDER 0 +/// duplicates allowed +#define COMPONENT_DUPE_ALLOWED 1 +/// new component is deleted +#define COMPONENT_DUPE_UNIQUE 2 +/** + * Component uses source tracking to manage adding and removal logic. + * Add a source/spawn to/the component by using AddComponentFrom(source, component_type, args...) + * Removing the last source will automatically remove the component from the parent. + * Arguments will be passed to on_source_add(source, args...); ensure that Initialize and on_source_add have the same signature. + */ +#define COMPONENT_DUPE_SOURCES 3 +/// old component is given the initialization args of the new +#define COMPONENT_DUPE_UNIQUE_PASSARGS 4 +/// each component of the same type is consulted as to whether the duplicate should be allowed +#define COMPONENT_DUPE_SELECTIVE 5 diff --git a/code/__defines/dcs/helpers.dm b/code/__defines/dcs/helpers.dm new file mode 100644 index 0000000000000..df6acffd761a8 --- /dev/null +++ b/code/__defines/dcs/helpers.dm @@ -0,0 +1,26 @@ +/// Used to trigger signals and call procs registered for that signal +/// The datum hosting the signal is automaticaly added as the first argument +/// Returns a bitfield gathered from all registered procs +/// Arguments given here are packaged in a list and given to _SendSignal +#define SEND_SIGNAL(target, sigtype, arguments...) ( !target._listen_lookup?[sigtype] ? NONE : target._SendSignal(sigtype, list(target, ##arguments)) ) + +#define SEND_GLOBAL_SIGNAL(sigtype, arguments...) ( SEND_SIGNAL(SSdcs, sigtype, ##arguments) ) + +/// Signifies that this proc is used to handle signals. +/// Every proc you pass to RegisterSignal must have this. +#define SIGNAL_HANDLER SHOULD_NOT_SLEEP(TRUE) + +/// A wrapper for _AddElement that allows us to pretend we're using normal named arguments +#define AddElement(arguments...) _AddElement(list(##arguments)) +/// A wrapper for _RemoveElement that allows us to pretend we're using normal named arguments +#define RemoveElement(arguments...) _RemoveElement(list(##arguments)) + +/// A wrapper for _AddComponent that allows us to pretend we're using normal named arguments +#define AddComponent(arguments...) _AddComponent(list(##arguments)) + +/// A wrapper for _AddComonent that passes in a source. +/// Necessary if dupe_mode is set to COMPONENT_DUPE_SOURCES. +#define AddComponentFrom(source, arguments...) _AddComponent(list(##arguments), source) + +/// A wrapper for _LoadComponent that allows us to pretend we're using normal named arguments +#define LoadComponent(arguments...) _LoadComponent(list(##arguments)) diff --git a/code/__defines/dcs/signals/signals_area.dm b/code/__defines/dcs/signals/signals_area.dm new file mode 100644 index 0000000000000..7e05ef6a0479f --- /dev/null +++ b/code/__defines/dcs/signals/signals_area.dm @@ -0,0 +1,10 @@ +// Main area signals. Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +///from base of /area/proc/power_change(): (area/apc_area) +#define COMSIG_AREA_POWER_CHANGE "area_apc_power_change" +///from base of /area/proc/set_apc(): (area/apc_area) +#define COMSIG_AREA_APC_ADDED "area_apc_added" +///from base of /area/proc/remove_apc(): (area/apc_area) +#define COMSIG_AREA_APC_REMOVED "area_apc_removed" diff --git a/code/__defines/dcs/signals/signals_atom.dm b/code/__defines/dcs/signals/signals_atom.dm new file mode 100644 index 0000000000000..bacd94d99b035 --- /dev/null +++ b/code/__defines/dcs/signals/signals_atom.dm @@ -0,0 +1,67 @@ +// Main atom signals. Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +// /atom signals + +//from SSatoms InitAtom - Only if the atom was not deleted or failed initialization +#define COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE "atom_init_success" + +///from base of atom/Entered(): (atom/movable/arrived, atom/old_loc, list/atom/old_locs) +#define COMSIG_ATOM_ENTERED "atom_entered" +/// Sent from the atom that just Entered src. From base of atom/Entered(): (/atom/destination, atom/old_loc, list/atom/old_locs) +#define COMSIG_ATOM_ENTERING "atom_entering" + +///from base of atom/change_tts_seed(): (mob/chooser, override, new_traits) +#define COMSIG_ATOM_TTS_SEED_CHANGE "atom_tts_seed_change" +///from base of atom/cast_tts: (mob/listener, message, atom/location, is_local, effect, traits, preSFX, postSFX) +#define COMSIG_ATOM_TTS_CAST "atom_tts_cast" +///from base of atom/tts_trait_add(): (trait) +#define COMSIG_ATOM_TTS_TRAIT_ADD "atom_tts_trait_add" +///from base of atom/tts_trait_remove(): (trait) +#define COMSIG_ATOM_TTS_TRAIT_REMOVE "atom_tts_trait_remove" + +/// Sent from [atom/proc/item_interaction], when this atom is left-clicked on by a mob with an item +/// Sent from the very beginning of the click chain, intended for generic atom-item interactions +/// Args: (mob/living/user, obj/item/tool, list/modifiers) +/// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) +#define COMSIG_ATOM_ITEM_INTERACTION "atom_item_interaction" +/// Sent from [atom/proc/item_interaction], when this atom is right-clicked on by a mob with an item +/// Sent from the very beginning of the click chain, intended for generic atom-item interactions +/// Args: (mob/living/user, obj/item/tool, list/modifiers) +/// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) +#define COMSIG_ATOM_ITEM_INTERACTION_SECONDARY "atom_item_interaction_secondary" +/// Sent from [atom/proc/item_interaction], to an item clicking on an atom +/// Args: (mob/living/user, atom/interacting_with, list/modifiers) +/// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) +#define COMSIG_ITEM_INTERACTING_WITH_ATOM "item_interacting_with_atom" +/// Sent from [atom/proc/item_interaction], to an item right-clicking on an atom +/// Args: (mob/living/user, atom/interacting_with, list/modifiers) +/// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) +#define COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY "item_interacting_with_atom_secondary" +/// Sent from [atom/proc/item_interaction], when this atom is left-clicked on by a mob with a tool of a specific tool type +/// Args: (mob/living/user, obj/item/tool) +/// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) +#define COMSIG_ATOM_TOOL_ACT(tooltype) "tool_act_[tooltype]" +/// Sent from [atom/proc/item_interaction], when this atom is right-clicked on by a mob with a tool of a specific tool type +/// Args: (mob/living/user, obj/item/tool) +/// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) +#define COMSIG_ATOM_SECONDARY_TOOL_ACT(tooltype) "tool_secondary_act_[tooltype]" +/// Sent from [atom/proc/item_interaction], when the interaction is complete. Use it as "post-act" +/// Args: (mob/living/user, obj/item/tool, act_result) +/// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) +#define COMSIG_ATOM_TOOL_ACT_RESULT(tooltype) "tool_act_result_[tooltype]" +/// Sent from [atom/proc/item_interaction], when the interaction has failed (no act_result) +/// Args: (mob/living/user, obj/item/tool) +/// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) +#define COMSIG_ATOM_TOOL_ACT_EMPTY "tool_act_empty" + +// Notifies tools that something is happening. +// Sucessful actions against an atom. +///Called from /atom/proc/tool_act (atom) +#define COMSIG_TOOL_ATOM_ACTED_PRIMARY(tooltype) "tool_atom_acted_[tooltype]" +///Called from /atom/proc/tool_act (atom) +#define COMSIG_TOOL_ATOM_ACTED_SECONDARY(tooltype) "tool_atom_acted_[tooltype]" + +///from base of atom/examine(): (/mob, list/examine_text) +#define COMSIG_ATOM_EXAMINE "atom_examine" diff --git a/code/__defines/dcs/signals/signals_atom_attack.dm b/code/__defines/dcs/signals/signals_atom_attack.dm new file mode 100644 index 0000000000000..5a5952d04f249 --- /dev/null +++ b/code/__defines/dcs/signals/signals_atom_attack.dm @@ -0,0 +1,33 @@ +// Atom attack signals. Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +///from base of atom/attackby(): (/obj/item, /mob/living, params) +#define COMSIG_ATOM_ATTACKBY "atom_attackby" +///from base of atom/can_use_item(): (/obj/item, /mob/living, params) +#define COMSIG_ATOM_CAN_USE_ITEM "atom_can_use_item" +///from base of atom/use_tool(): (/obj/item, /mob/living, params) +#define COMSIG_ATOM_USE_TOOL "atom_use_tool" +///from base of atom/use_tool_secondary(): (/obj/item, /mob/living, params) +#define COMSIG_ATOM_USE_TOOL_SECONDARY "atom_use_tool_secondary" +///from base of atom/use_weapon(): (/obj/item, /mob/living, params) +#define COMSIG_ATOM_USE_WEAPON "atom_use_weapon" +///from base of atom/use_weapon_secondary(): (/obj/item, /mob/living, params) +#define COMSIG_ATOM_USE_WEAPON_SECONDARY "atom_use_weapon_secondary" +///from base of atom/attack_hand(): (mob/user, list/modifiers) +#define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand" +///from base of atom/attack_hand_secondary(): (mob/user, list/modifiers) +#define COMSIG_ATOM_ATTACK_HAND_SECONDARY "atom_attack_hand_secondary" +///from base of atom/animal_attack(): (/mob/user) +#define COMSIG_ATOM_ATTACK_ANIMAL "attack_animal" +///from base of atom/attack_robot(): (mob/user) +#define COMSIG_ATOM_ATTACK_ROBOT "atom_attack_robot" +///from base of atom/attack_robot_secondary(): (mob/user) +#define COMSIG_ATOM_ATTACK_ROBOT_SECONDARY "atom_attack_robot_secondary" + +/* Attack signals. They should share the returned flags, to standardize the attack chain. */ +/// tool_act -> pre_attack -> target.attackby (item.attack) -> afterattack + ///Ends the attack chain. If sent early might cause posterior attacks not to happen. + #define COMPONENT_CANCEL_ATTACK_CHAIN FLAG(0) + ///Skips the specific attack step, continuing for the next one to happen. + #define COMPONENT_SKIP_ATTACK FLAG(1) diff --git a/code/__defines/dcs/signals/signals_atom_movable.dm b/code/__defines/dcs/signals/signals_atom_movable.dm new file mode 100644 index 0000000000000..f724b87be9be0 --- /dev/null +++ b/code/__defines/dcs/signals/signals_atom_movable.dm @@ -0,0 +1,10 @@ +// Atom movable signals. Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +///from base of atom/movable/Moved(): (/atom) +#define COMSIG_MOVABLE_PRE_MOVE "movable_pre_move" + #define COMPONENT_MOVABLE_BLOCK_PRE_MOVE FLAG(0) + +///from base of atom/movable/Moved(): (atom/old_loc, forced) +#define COMSIG_MOVABLE_MOVED "movable_moved" diff --git a/code/__defines/dcs/signals/signals_datum.dm b/code/__defines/dcs/signals/signals_datum.dm new file mode 100644 index 0000000000000..0abcff497b297 --- /dev/null +++ b/code/__defines/dcs/signals/signals_datum.dm @@ -0,0 +1,47 @@ +// Datum signals. Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +// /datum signals +/// when a component is added to a datum: (/datum/component) +#define COMSIG_COMPONENT_ADDED "component_added" +/// before a component is removed from a datum because of ClearFromParent: (/datum/component) +#define COMSIG_COMPONENT_REMOVING "component_removing" + +/// before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation +/// you should only be using this if you want to block deletion +/// that's the only functional difference between it and COMSIG_QDELETING, outside setting QDELETING to detect +#define COMSIG_PREQDELETED "parent_preqdeleted" +/// just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called +#define COMSIG_QDELETING "parent_qdeleting" +/// generic topic handler (usr, href_list) +#define COMSIG_TOPIC "handle_topic" +/// handler for vv_do_topic (usr, href_list) +#define COMSIG_VV_TOPIC "vv_topic" + #define COMPONENT_VV_HANDLED FLAG(0) +/// from datum ui_act (usr, action) +#define COMSIG_UI_ACT "COMSIG_UI_ACT" + +/// fires on the target datum when an element is attached to it (/datum/element) +#define COMSIG_ELEMENT_ATTACH "element_attach" +/// fires on the target datum when an element is attached to it (/datum/element) +#define COMSIG_ELEMENT_DETACH "element_detach" + +// Merger datum signals +/// Called on the object being added to a merger group: (datum/merger/new_merger) +#define COMSIG_MERGER_ADDING "comsig_merger_adding" +/// Called on the object being removed from a merger group: (datum/merger/old_merger) +#define COMSIG_MERGER_REMOVING "comsig_merger_removing" +/// Called on the merger after finishing a refresh: (list/leaving_members, list/joining_members) +#define COMSIG_MERGER_REFRESH_COMPLETE "comsig_merger_refresh_complete" + +// Gas mixture signals +/// From /datum/gas_mixture/proc/merge: () +#define COMSIG_GASMIX_MERGED "comsig_gasmix_merged" +/// From /datum/gas_mixture/proc/remove: () +#define COMSIG_GASMIX_REMOVED "comsig_gasmix_removed" +/// From /datum/gas_mixture/proc/react: () +#define COMSIG_GASMIX_REACTED "comsig_gasmix_reacted" + +///from /datum/bank_account/pay_debt(), after a portion or all the debt has been paid. +#define COMSIG_BANK_ACCOUNT_DEBT_PAID "bank_account_debt_paid" diff --git a/code/__defines/dcs/signals/signals_living.dm b/code/__defines/dcs/signals/signals_living.dm new file mode 100644 index 0000000000000..b2aa1050fbad1 --- /dev/null +++ b/code/__defines/dcs/signals/signals_living.dm @@ -0,0 +1,6 @@ +/// from /mob/living/*/UnarmedAttack(), before sending [COMSIG_LIVING_UNARMED_ATTACK]: (/atom, proximity, modifiers) +/// The only reason this exists is so hulk can fire before Fists of the North Star. +/// Note that this is called before [/mob/living/proc/can_unarmed_attack] is called, so be wary of that. +#define COMSIG_LIVING_EARLY_UNARMED_ATTACK "human_pre_attack_hand" +/// from mob/living/*/UnarmedAttack(): (/atom, proximity, modifiers) +#define COMSIG_LIVING_UNARMED_ATTACK "living_unarmed_attack" diff --git a/code/__defines/dcs/signals/signals_mob.dm b/code/__defines/dcs/signals/signals_mob.dm new file mode 100644 index 0000000000000..568589b655b5f --- /dev/null +++ b/code/__defines/dcs/signals/signals_mob.dm @@ -0,0 +1,21 @@ +/// From base of /client/Move(): (list/move_args) +#define COMSIG_MOB_CLIENT_PRE_LIVING_MOVE "mob_client_pre_living_move" + /// Should we stop the current living movement attempt + #define COMSIG_MOB_CLIENT_BLOCK_PRE_LIVING_MOVE COMPONENT_MOVABLE_BLOCK_PRE_MOVE + +/// From base of /mob/UpdateLyingBuckledAndVerbStatus() +#define COMSIG_MOB_UPDATE_LYING_BUCKLED_VERBSTATUS "mob_update_lying_buckled_verbstatus" + +/// from mob/CanPass(): (atom/movable/mover, turf/target, height, air_group) +#define COMSIG_MOB_CAN_PASS "mob_can_pass" + #define COMPONENT_MOB_PASSABLE FLAG(0) + +///from base of mob/ranged_attack(): (/atom, modifiers) +#define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" +///from base of mob/ranged_attack_secondary(): (/atom, modifiers) +#define COMSIG_MOB_ATTACK_RANGED_SECONDARY "mob_attack_ranged_secondary" + +///from base of proc/examinate(): (/atom, list/examine_strings) +#define COMSIG_MOB_EXAMINING "mob_examining" +///from base of proc/examinate(): (/atom) +#define COMSIG_MOB_EXAMINATE "mob_examinate" diff --git a/code/__defines/dcs/signals/signals_object.dm b/code/__defines/dcs/signals/signals_object.dm new file mode 100644 index 0000000000000..a3a8c26a3f322 --- /dev/null +++ b/code/__defines/dcs/signals/signals_object.dm @@ -0,0 +1,24 @@ +/// from base of /obj/item/gun/toggle_safety(): (safety_state) +#define COMSIG_GUN_TOGGLE_SAFETY "gun_toggle_safety" + +/// from base of /obj/item/change_tool_behaviour(): (new_tool_behaviour, new_toolspeed, override_sound) +#define COMSIG_OBJ_CHANGE_TOOL_BEHAVIOUR "obj_change_tool_behaviour" + +///from base of [/obj/item/proc/tool_check_callback]: (mob/living/user) +#define COMSIG_TOOL_IN_USE "tool_in_use" +///from base of [/obj/item/proc/tool_start_check]: (mob/living/user) +#define COMSIG_TOOL_START_USE "tool_start_use" + +///from base of atom/use_before(): (/atom, /mob/living, params) +#define COMSIG_ITEM_USE_BEFORE "item_use_before" +///from base of atom/use_after(): (/atom, /mob/living, params) +#define COMSIG_ITEM_USE_AFTER "item_use_after" +///from base of atom/use_after_secondary(): (/atom, /mob/living, params) +#define COMSIG_ITEM_USE_AFTER_SECONDARY "item_use_after_secondary" +///from base of atom/afterattack(): (/atom, /mob/living, proximity, params) +#define COMSIG_ITEM_AFTERATTACK "item_afterattack_secondary" +///from base of atom/afterattack_secondary(): (/atom, /mob/living, proximity, params) +#define COMSIG_ITEM_AFTERATTACK_SECONDARY "item_afterattack_secondary" + #define COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN FLAG(0) + #define COMPONENT_SECONDARY_CONTINUE_ATTACK_CHAIN FLAG(1) + #define COMPONENT_SECONDARY_CALL_NORMAL_ATTACK_CHAIN FLAG(2) diff --git a/code/__defines/directions.dm b/code/__defines/directions.dm index 29436e32cd9f8..3d4d3278b53bd 100644 --- a/code/__defines/directions.dm +++ b/code/__defines/directions.dm @@ -6,4 +6,7 @@ #define N_NORTHEAST 32 #define N_NORTHWEST 512 #define N_SOUTHEAST 64 -#define N_SOUTHWEST 1024 \ No newline at end of file +#define N_SOUTHWEST 1024 + +#define IS_DIR_DIAGONAL(dir) (dir & (dir - 1)) +#define DIR_TO_CARDINAL(dir) (IS_DIR_DIAGONAL(dir) ? (dir & ~(dir & dir - 1)) : dir) diff --git a/code/__defines/dna.dm b/code/__defines/dna.dm index a10c4705005a6..0ddfba0d13015 100644 --- a/code/__defines/dna.dm +++ b/code/__defines/dna.dm @@ -5,15 +5,14 @@ // Generic mutations: #define MUTATION_COLD_RESISTANCE 1 #define MUTATION_XRAY 2 -#define MUTATION_HULK 3 +#define MUTATION_FERAL 3 // Smash objects instead of using them, and harder to grab. #define MUTATION_CLUMSY 4 #define MUTATION_FAT 5 #define MUTATION_HUSK 6 -#define MUTATION_LASER 7 // Harm intent - click anywhere to shoot lasers from eyes. +#define MUTATION_LASER 7 // Harm intent - click anywhere to shoot lasers from eyes. #define MUTATION_HEAL 8 // Healing people with hands. #define MUTATION_SPACERES 9 // Can't be harmed via pressure damage. #define MUTATION_SKELETON 10 -#define MUTATION_FERAL 11 // Smash objects instead of using them, and unable to use items // Other Mutations: #define mNobreath 100 // No need to breathe. @@ -43,11 +42,11 @@ // Too much of a project to handle at the moment, TODO for later. GLOBAL_VAR_INIT(BLINDBLOCK,0) GLOBAL_VAR_INIT(DEAFBLOCK,0) -GLOBAL_VAR_INIT(HULKBLOCK,0) GLOBAL_VAR_INIT(TELEBLOCK,0) GLOBAL_VAR_INIT(FIREBLOCK,0) GLOBAL_VAR_INIT(XRAYBLOCK,0) GLOBAL_VAR_INIT(CLUMSYBLOCK,0) +GLOBAL_VAR_INIT(FERALBLOCK, 0) GLOBAL_VAR_INIT(FAKEBLOCK,0) GLOBAL_VAR_INIT(COUGHBLOCK,0) GLOBAL_VAR_INIT(GLASSESBLOCK,0) diff --git a/code/__defines/emissives.dm b/code/__defines/emissives.dm new file mode 100644 index 0000000000000..a34cc4089608b --- /dev/null +++ b/code/__defines/emissives.dm @@ -0,0 +1,27 @@ +// Emissive blockers +/// For anything that shouldn't block emissives. Small objects or translucent objects primarily +#define EMISSIVE_BLOCK_NONE 0 +/// For anything that doesn't change outline or opaque area much or at all. +#define EMISSIVE_BLOCK_GENERIC 1 +/// Uses a dedicated render_target object to copy the entire appearance in real time to the blocking layer. For things that can change in appearance a lot from the base state, like humans. +#define EMISSIVE_BLOCK_UNIQUE 2 + +#define _EMISSIVE_COLOR(val) list(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, val,val,val,0) +/// The color matrix applied to all emissive overlays. Should be solely dependent on alpha and not have RGB overlap with [EM_BLOCK_COLOR]. +#define EMISSIVE_COLOR _EMISSIVE_COLOR(1) +/// A globaly cached version of [EMISSIVE_COLOR] for quick access. +GLOBAL_LIST_INIT(emissive_color, EMISSIVE_COLOR) + +#define _EM_BLOCK_COLOR(val) list(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,val, 0,0,0,0) +/// The color matrix applied to all emissive blockers. Should be solely dependent on alpha and not have RGB overlap with [EMISSIVE_COLOR]. +#define EM_BLOCK_COLOR _EM_BLOCK_COLOR(1) +/// A globaly cached version of [EM_BLOCK_COLOR] for quick access. +GLOBAL_LIST_INIT(em_block_color, EM_BLOCK_COLOR) + +/// The color matrix used to mask out emissive blockers on the emissive plane. Alpha should default to zero, be solely dependent on the RGB value of [EMISSIVE_COLOR], and be independant of the RGB value of [EM_BLOCK_COLOR]. +#define EM_MASK_MATRIX list(0,0,0,1/3, 0,0,0,1/3, 0,0,0,1/3, 0,0,0,0, 1,1,1,0) +/// A globally cached version of [EM_MASK_MATRIX] for quick access. +GLOBAL_LIST_INIT(em_mask_matrix, EM_MASK_MATRIX) + +/// A set of appearance flags applied to all emissive and emissive blocker overlays. +#define EMISSIVE_APPEARANCE_FLAGS (KEEP_APART|KEEP_TOGETHER|RESET_COLOR|NO_CLIENT_COLOR) diff --git a/code/__defines/feedback.dm b/code/__defines/feedback.dm index cb3c427885854..24527b9dad2cf 100644 --- a/code/__defines/feedback.dm +++ b/code/__defines/feedback.dm @@ -1,2 +1,53 @@ -#define FEEDBACK_YOU_LACK_DEXTERITY SPAN_WARNING("You don't have the dexterity to do this!") -#define FEEDBACK_ACCESS_DENIED SPAN_WARNING("Access Denied!") +#define FEEDBACK_YOU_LACK_DEXTERITY USE_FEEDBACK_FAILURE("You don't have the dexterity to do this!") +#define FEEDBACK_ACCESS_DENIED(USER, SRC) FEEDBACK_FAILURE(USER, SPAN_WARNING("\The [SRC] flashes, 'Access Denied!'")) + +/// Generic feedback failure message handler. +#define FEEDBACK_FAILURE(USER, MSG) to_chat(USER, SPAN_WARNING(MSG)) +/// User can't unequip/drop item. +#define FEEDBACK_UNEQUIP_FAILURE(USER, ITEM) FEEDBACK_FAILURE(USER, "You can't drop \the [ITEM].") + +/// Feedback messages intended for use in `use_*` overrides. These assume the presence of the `user` variable. +#define USE_FEEDBACK_FAILURE(MSG) FEEDBACK_FAILURE(user, MSG) +/// ID card lacks access +#define USE_FEEDBACK_ID_CARD_DENIED(REFUSER, ID_CARD) USE_FEEDBACK_FAILURE("\The [REFUSER] refuses [ID_CARD].") +/// Item stack did not have enough items. `STACK` is assumed to be of type `/obj/item/stack`. +#define USE_FEEDBACK_STACK_NOT_ENOUGH(STACK, NEEDED_AMT, ACTION) USE_FEEDBACK_FAILURE("You need at least [STACK.get_exact_name(NEEDED_AMT)] [ACTION]") + +/// Feedback messages intended for use in `use_grab()` overrides. These assume the presence of the `grab` variable. +#define USE_FEEDBACK_GRAB_FAILURE(MSG) FEEDBACK_FAILURE(grab.assailant, MSG) +/// Assailant must upgrade their grab to perform action. +#define USE_FEEDBACK_GRAB_MUST_UPGRADE(ACTION) USE_FEEDBACK_GRAB_FAILURE("You need a better grip on \the [grab.affecting][ACTION].") + + +/// Feedback message when user needs to unanchor the target +#define USE_FEEDBACK_NEED_UNANCHOR(user) balloon_alert(user, "нужно открутить от пола!") +/// Feedback message when user needs to unanchor the target +#define USE_FEEDBACK_NEED_ANCHOR(user) balloon_alert(user, "нужно прикрутить к полу!") +/// Feedback message when user starts deconstructing the target +#define USE_FEEDBACK_DECONSTRUCT_START(user) balloon_alert(user, "разбор") +/// Feedback message when user starts welding/unwelding the target +#define USE_FEEDBACK_WELD_UNWELD(user, welded) balloon_alert(user, "[welded ? "отваривание" : "заваривание"]") +/// Feedback message when user finishes welding/unwelding the target +#define USE_FEEDBACK_WELD_UNWELD_FINISH(user, welded) balloon_alert_to_viewers("[welded ? "заварено!" : "отварено!"]") +/// Feedback message when user starts unwelding target from the floor +#define USE_FEEDBACK_UNWELD_FROM_FLOOR(user) balloon_alert(user, "отваривание от пола") + +/// Feedback message when user starts repairing the target +#define USE_FEEDBACK_REPAIR_START(user) balloon_alert(user, "ремонт") +/// Feedback message when user finishes the repairs +#define USE_FEEDBACK_REPAIR_FINISH(user) balloon_alert_to_viewers("ремонт завершен!") +/// Feedback message when the target doesn't need repairs +#define USE_FEEDBACK_NOTHING_TO_REPAIR(user) balloon_alert(user, "нет повреждений!") + +/// Feedback message when the wiring gets exposed/unexposed by the user +#define USE_FEEDBACK_WIRING_EXPOSED(user, exposed) balloon_alert(user, "проводка [exposed ? "открыта" : "закрыта"]!") +/// Feedback message when the target gets anchored/unanchored by the user +#define USE_FEEDBACK_NEW_ANCHOR_FINISH(user, anchored) balloon_alert(user, "[anchored ? "закреплено на полу!" : "откреплено от пола!"]") +/// Feedback message when the target gets its panel open/closed by the user +#define USE_FEEDBACK_NEW_PANEL_OPEN(user, opened) balloon_alert(user, "[opened ? "панель открыта!" : "панель закрыта!"]") +/// Feedback message if the cell is missing +#define USE_FEEDBACK_CELL_MISSING(user) balloon_alert(user, "нет батареи!") +/// Feedback message when the cell is removed by the user +#define USE_FEEDBACK_CELL_REMOVED(user) balloon_alert_to_viewers("батарея снята") +/// Feedback message when the target is enabled/active and needs to be disabled +#define USE_FEEDBACK_NEED_DISABLED(user) balloon_alert(user, "нужно выключить!") diff --git a/code/__defines/flags.dm b/code/__defines/flags.dm index 61fbe4ea38008..dc6ae948143a4 100644 --- a/code/__defines/flags.dm +++ b/code/__defines/flags.dm @@ -20,6 +20,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define ATOM_FLAG_NO_TEMP_CHANGE FLAG(6) // Reagents do not cool or heat to ambient temperature in this container. #define ATOM_FLAG_CAN_BE_PAINTED FLAG(7) // Can be painted using a paint sprayer or similar. #define ATOM_FLAG_ADJACENT_EXCEPTION FLAG(8) // Skips adjacent checks for atoms that should always be reachable in window tiles +#define ATOM_FLAG_NO_TOOLS FLAG(9) // Blocks tool interactions. +#define ATOM_AWAITING_OVERLAY_UPDATE FLAG(10) #define MOVABLE_FLAG_PROXMOVE FLAG(0) // Does this object require proximity checking in Enter()? #define MOVABLE_FLAG_Z_INTERACT FLAG(1) // Should attackby and attack_hand be relayed through ladders and open spaces? @@ -29,6 +31,10 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define OBJ_FLAG_CONDUCTIBLE FLAG(1) // Conducts electricity. (metal etc.) #define OBJ_FLAG_ROTATABLE FLAG(2) // Can be rotated with alt-click #define OBJ_FLAG_NOFALL FLAG(3) // Will prevent mobs from falling +/// Can be click+dragged onto a table, rack, etc +#define OBJ_FLAG_CAN_TABLE FLAG(4) +/// Can receive objects with the `OBJ_FLAG_CAN_TABLE` flag +#define OBJ_FLAG_RECEIVE_TABLE FLAG(5) //Flags for items (equipment) #define ITEM_FLAG_NO_BLUDGEON FLAG(0) // When an item has this it produces no "X has been hit by Y with Z" message with the default handler. @@ -46,7 +52,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define ITEM_FLAG_NOCUFFS FLAG(13) // Gloves that have this flag prevent cuffs being applied #define ITEM_FLAG_CAN_HIDE_IN_SHOES FLAG(14) // Items that can be hidden in shoes that permit it #define ITEM_FLAG_WASHER_ALLOWED FLAG(15) // Items that can be washed in washing machines -#define ITEM_FLAG_TRY_ATTACK FLAG(16) // Use the item's attack() when set before trying the receiver's attackby() +#define ITEM_FLAG_IS_CHAMELEON_ITEM FLAG(16) // Setups the chameleon extension on init. Throws an exception if there is no compatible extension subtype. // Flags for pass_flags. #define PASS_FLAG_TABLE FLAG(0) @@ -58,3 +64,20 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define TANK_FLAG_FORCED FLAG(1) #define TANK_FLAG_LEAKING FLAG(2) #define TANK_FLAG_WIRED FLAG(3) + +// Flags for beds/chairs +/// The bed/chair cannot be dismantled with a wrench. +#define BED_FLAG_CANNOT_BE_DISMANTLED FLAG(1) +/// The bed/chair cannot be padded with material. +#define BED_FLAG_CANNOT_BE_PADDED FLAG(2) +/// The bed/chair cannot be made into an electric chair with a shock kit. Only applies to `/obj/structure/bed/chair` subtypes. +#define BED_FLAG_CANNOT_BE_ELECTRIFIED FLAG(3) + +/// Whether or not this sector is a starting sector. Z levels contained in this sector are added to station_levels +#define OVERMAP_SECTOR_BASE FLAG(0) +/// Makes the sector show up on nav computers +#define OVERMAP_SECTOR_KNOWN FLAG(1) +/// If the sector can be accessed by drifting off the map edge +#define OVERMAP_SECTOR_IN_SPACE FLAG(2) +/// If the sector is untargetable by missiles. +#define OVERMAP_SECTOR_UNTARGETABLE FLAG(3) diff --git a/code/__defines/fluids.dm b/code/__defines/fluids.dm index 65f9e00792acd..9b48d432da82a 100644 --- a/code/__defines/fluids.dm +++ b/code/__defines/fluids.dm @@ -10,11 +10,11 @@ #define ADD_ACTIVE_FLUID_SOURCE(T) SSfluids.water_sources[T] = TRUE #define REMOVE_ACTIVE_FLUID_SOURCE(T) SSfluids.water_sources -= T -// Expects /obj/effect/fluid for F. +// Expects /obj/fluid for F. #define ADD_ACTIVE_FLUID(F) SSfluids.active_fluids[F] = TRUE #define REMOVE_ACTIVE_FLUID(F) SSfluids.active_fluids -= F -// Expects /obj/effect/fluid for F, int for amt. +// Expects /obj/fluid for F, int for amt. #define LOSE_FLUID(F, amt) \ F:fluid_amount = max(-1, F:fluid_amount - amt); \ ADD_ACTIVE_FLUID(F) @@ -44,9 +44,9 @@ UPDATE_FLUID_BLOCKED_DIRS(next); \ if((next.fluid_blocked_dirs & GLOB.reverse_dir[spread_dir]) || !next.CanFluidPass(spread_dir)) continue; \ flooded_a_neighbor = TRUE; \ - var/obj/effect/fluid/F = locate() in next; \ + var/obj/fluid/F = locate() in next; \ if(!F && !dry_run) {\ - F = new /obj/effect/fluid(next); \ + F = new /obj/fluid(next); \ var/datum/gas_mixture/GM = T:return_air(); \ if(GM) F.temperature = GM.temperature; \ } \ @@ -60,7 +60,7 @@ // We share overlays for all fluid turfs to sync icon animation. #define APPLY_FLUID_OVERLAY(img_state) \ if(!SSfluids.fluid_images[img_state]) SSfluids.fluid_images[img_state] = image('icons/effects/liquids.dmi',img_state); \ - overlays += SSfluids.fluid_images[img_state]; + AddOverlays(SSfluids.fluid_images[img_state]); #define FLUID_MAX_ALPHA 160 #define FLUID_MIN_ALPHA 45 diff --git a/code/__defines/gamemode.dm b/code/__defines/gamemode.dm index 61a977b5bf2f6..4c27480ce1b9b 100644 --- a/code/__defines/gamemode.dm +++ b/code/__defines/gamemode.dm @@ -37,7 +37,7 @@ #define MODE_ERT "ert" #define MODE_ACTOR "actor" #define MODE_MERCENARY "mercenary" -#define MODE_NINJA "ninja" +#define MODE_NINJA "operatives" #define MODE_RAIDER "raider" #define MODE_WIZARD "wizard" #define MODE_CHANGELING "changeling" @@ -65,7 +65,7 @@ #define GHOSTCAST FLAG(0) //can a ghost cast it? #define NEEDSCLOTHES FLAG(1) //does it need the wizard garb to cast? Nonwizard spells should not have this #define NEEDSHUMAN FLAG(2) //does it require the caster to be human? -#define Z2NOCAST FLAG(3) //if this is added, the spell can't be cast at centcomm +#define Z2NOCAST FLAG(3) //if this is added, the spell can't be cast at centcom #define NO_SOMATIC FLAG(4) //spell will go off if the person is incapacitated or stunned #define IGNOREPREV FLAG(5) //if set, each new target does not overlap with the previous one //The following flags only affect different types of spell, and therefore overlap diff --git a/code/__defines/guns.dm b/code/__defines/guns.dm index 76d79371d23e7..f6df203f5cdc9 100644 --- a/code/__defines/guns.dm +++ b/code/__defines/guns.dm @@ -24,7 +24,9 @@ #define MAGAZINE 4 //The magazine item itself goes inside the gun +#define GUN_BULK_LIGHT_RIFLE 4 #define GUN_BULK_RIFLE 5 +#define GUN_BULK_HEAVY_RIFLE 6 #define BULLET_IMPACT_NONE "none" #define BULLET_IMPACT_METAL "metal" diff --git a/code/__defines/items_clothing.dm b/code/__defines/items_clothing.dm index 288ffb7cbb433..dad42c43754de 100644 --- a/code/__defines/items_clothing.dm +++ b/code/__defines/items_clothing.dm @@ -35,6 +35,8 @@ #define ACCESSORY_SLOT_ARMOR_M "Misc armor" #define ACCESSORY_SLOT_HELM_C "Helmet cover" #define ACCESSORY_SLOT_HELM_D "Helmet decor" +#define ACCESSORY_SLOT_OVER "Over" + #define ACCESSORY_REMOVABLE FLAG(0) @@ -183,8 +185,8 @@ #define FIRESUIT_MAX_PRESSURE 100 * ONE_ATMOSPHERE // Firesuis and atmos voidsuits #define RIG_MAX_PRESSURE 50 * ONE_ATMOSPHERE // Rigs #define LIGHT_RIG_MAX_PRESSURE 25 * ONE_ATMOSPHERE // Rigs -#define ENG_VOIDSUIT_MAX_PRESSURE 50 * ONE_ATMOSPHERE -#define VOIDSUIT_MAX_PRESSURE 25 * ONE_ATMOSPHERE +#define ENG_VOIDSUIT_MAX_PRESSURE 50 * ONE_ATMOSPHERE +#define VOIDSUIT_MAX_PRESSURE 25 * ONE_ATMOSPHERE #define SPACE_SUIT_MAX_PRESSURE 5 * ONE_ATMOSPHERE // Fire. @@ -218,7 +220,9 @@ #define HUD_SECURITY FLAG(1) #define HUD_MEDICAL FLAG(2) #define HUD_JANITOR FLAG(3) - +// [SIERRA-ADD] - NTNET - NTNet gimmics +#define HUD_IT FLAG(4) +// [/SIERRA-ADD] /** * flags for /mob/proc/equip_to_slot_if_possible @@ -275,3 +279,13 @@ GLOBAL_LIST_INIT(default_onmob_icons, list( slot_s_store_str = 'icons/mob/onmob/onmob_belt_mirror.dmi',\ slot_tie_str = 'icons/mob/onmob/onmob_accessories.dmi'\ )) + +// Rolldown status defines for `/obj/item/clothing/under` + +#define UNDER_ROLLDOWN_STATUS_CANT_BE_ROLLED -1 +#define UNDER_ROLLDOWN_STATUS_UNROLLED 0 +#define UNDER_ROLLDOWN_STATUS_ROLLED 1 + +#define SLEEVES_ROLLDOWN_STATUS_CANT_BE_ROLLED -1 +#define SLEEVES_ROLLDOWN_STATUS_UNROLLED 0 +#define SLEEVES_ROLLDOWN_STATUS_ROLLED 1 diff --git a/code/__defines/keybinding.dm b/code/__defines/keybinding.dm new file mode 100644 index 0000000000000..4a8f156a22082 --- /dev/null +++ b/code/__defines/keybinding.dm @@ -0,0 +1,8 @@ +//Signals + +//General +#define COMSIG_KB_ACTIVATED FLAG(0) + +// Mob +#define COMSIG_KB_MOB_PIXEL_SHIFT_DOWN "keybinding_mob_pixel_shift_down" +#define COMSIG_KB_MOB_PIXEL_SHIFT_UP "keybinding_mob_pixel_shift_up" diff --git a/code/__defines/lighting.dm b/code/__defines/lighting.dm index 5e35bad8636b1..8a5820f42579d 100644 --- a/code/__defines/lighting.dm +++ b/code/__defines/lighting.dm @@ -1,29 +1,42 @@ -#define FOR_DVIEW(type, range, center, invis_flags) \ - GLOB.dview_mob.loc = center; \ - GLOB.dview_mob.see_invisible = invis_flags; \ - for(type in view(range, GLOB.dview_mob)) +#define LIGHTING_INTERVAL 1 // Frequency, in 1/10ths of a second, of the lighting process. -#define END_FOR_DVIEW GLOB.dview_mob.loc = null +#define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone +#define LIGHTING_Z_FACTOR 10 // Z diff is multiplied by this and LIGHTING_HEIGHT to get the final height of a light source. Affects how much darker A Z light gets with each level transitioned. +#define LIGHTING_ROUND_VALUE (1 / 200) //Value used to round lumcounts, values smaller than 1/255 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. #define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects -#define LIGHTING_ICON_STATE_DARK "dark" // Change between "soft_dark" and "dark" to swap soft darkvision +#define LIGHTING_BASE_ICON_STATE "matrix" // icon_state used for normal color-matrix based lighting overlays. +#define LIGHTING_STATION_ICON_STATE "tubedefault" // icon_state used for lighting overlays that are just displaying standard station lighting. +#define LIGHTING_DARKNESS_ICON_STATE "black" // icon_state used for lighting overlays with no luminosity. +#define LIGHTING_TRANSPARENT_ICON_STATE "blank" -#define LIGHTING_ROUND_VALUE (1 / 64) // Value used to round lumcounts, values smaller than 1/69 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. +#define LIGHTING_BLOCKED_FACTOR 0.5 // How much the range of a directional light will be reduced while facing a wall. -#define LIGHTING_SOFT_THRESHOLD 0 // If the max of the lighting lumcounts of each spectrum drops below this, disable luminosity on the lighting overlays. This also should be the transparancy of the "soft_dark" icon state. +// If defined, instant updates will be used whenever server load permits. Otherwise queued updates are always used. +#define USE_INTELLIGENT_LIGHTING_UPDATES + +/// Maximum light_range before forced to always queue instead of using sync updates. Setting this too high will cause server stutter with moving large lights. +#define LIGHTING_MAXIMUM_INSTANT_RANGE 8 + +// mostly identical to below, but doesn't make sure T is valid first. Should only be used by lighting code. +#define TURF_IS_DYNAMICALLY_LIT_UNSAFE(T) ((T:dynamic_lighting && T:loc:dynamic_lighting)) +#define TURF_IS_DYNAMICALLY_LIT(T) (isturf(T) && TURF_IS_DYNAMICALLY_LIT_UNSAFE(T)) + +// Note: this does not imply the above, a turf can have ambient light without being dynamically lit. +#define TURF_IS_AMBIENT_LIT_UNSAFE(T) (T:ambient_active) +#define TURF_IS_AMBIENT_LIT(T) (isturf(T) && TURF_IS_AMBIENT_LIT_UNSAFE(T)) -#define LIGHTING_MULT_FACTOR 0.9 // If I were you I'd leave this alone. #define LIGHTING_BASE_MATRIX \ - list \ - ( \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - 0, 0, 0, 1 \ - ) + list \ + ( \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ + 0, 0, 0, 1 \ + ) \ // Helpers so we can (more easily) control the colour matrices. #define CL_MATRIX_RR 1 @@ -47,12 +60,25 @@ #define CL_MATRIX_CB 19 #define CL_MATRIX_CA 20 +// Higher numbers override lower. +#define LIGHTING_NO_UPDATE 0 +#define LIGHTING_VIS_UPDATE 1 +#define LIGHTING_CHECK_UPDATE 2 +#define LIGHTING_FORCE_UPDATE 3 + // Lightbulb statuses #define LIGHT_OK 0 // A light bulb is installed and functioning. #define LIGHT_EMPTY 1 // There is no light bulb installed. #define LIGHT_BROKEN 2 // The light bulb is broken/shattered. #define LIGHT_BURNED 3 // The light bulb is burned out. +// This color of overlay is very common - most of the station is this color when lit fully. +// Tube lights are a bluish-white, so we can't just assume 1-1-1 is full-illumination. +// -- If you want to change these, find them *by checking in-game*, just converting tubes' RGB color into floats will not work! +#define LIGHTING_DEFAULT_TUBE_R 0.96 +#define LIGHTING_DEFAULT_TUBE_G 1 +#define LIGHTING_DEFAULT_TUBE_B 1 + // Lighting color presets #define LIGHT_COLOUR_WHITE "#fefefe" // Clinical white light bulbs #define LIGHT_COLOUR_WARM "#fffee0" // Warm yellowish light bulbs @@ -84,3 +110,16 @@ #define AREA_LIGHTING_WARM "warm" #define AREA_LIGHTING_COOL "cool" #define AREA_LIGHTING_DEFAULT "default" // For light replacers, defaults to whatever the area is set to. For areas, uses the initial lighting value from the light bulb itself. + +// Some angle presets for directional lighting. +#define LIGHT_OMNI null +#define LIGHT_SEMI 180 +#define LIGHT_VERY_WIDE 135 +#define LIGHT_WIDE 90 +#define LIGHT_NARROW 45 + +#define DARKSIGHT_GRADIENT_SIZE 480 +// Max number of ambient groups, amount over this value will simply not be created +#define AMBIENT_GROUP_MAX_BITS 24 +// Ambient group used for exterior turfs not on planets - Could also replace Space turf legacy starlight implementation +#define SPACE_AMBIENT_GROUP 1 diff --git a/code/__defines/lists.dm b/code/__defines/lists.dm index be91ee13ac279..8142ae1b7cac0 100644 --- a/code/__defines/lists.dm +++ b/code/__defines/lists.dm @@ -11,6 +11,8 @@ #define LAZYREMOVE(L, I) if(L) { L -= I; if(!length(L)) { L = null; } } // Adds I to L, initalizing L if necessary #define LAZYADD(L, I) if(!L) { L = list(); } L += I; +///Add an item to the list if not already present, if the list is null it will initialize it +#define LAZYOR(L, I) if(!L) { L = list(); } L |= I; // Insert I into L at position X, initalizing L if necessary #define LAZYINSERT(L, I, X) if(!L) { L = list(); } L.Insert(X, I); // Adds I to L, initalizing L if necessary, if I is not already in L @@ -24,15 +26,29 @@ // Safely checks if I is in L #define LAZYISIN(L, I) (L ? (I in L) : FALSE) // Null-safe List.Cut() and discard. -#define LAZYCLEARLIST(L) if(L) { L.Cut(); L = null; } +#define LAZYCLEARLIST(L) if(L) { L.len = 0; L = null; } // Safely merges L2 into L1 as lazy lists, initializing L1 if necessary. #define LAZYMERGELIST(L1, L2) if (length(L2)) { if (!L1) { L1 = list() } L1 |= L2 } +/// Copies the L from element START to elememt END if L is initialized, otherwise returns an empty list. +#define LAZYCOPY_RANGE(L, START, END) ( L ? L.Copy(START, END) : list() ) +/// Cuts the L from element START to elememt END if L is initialized, otherwise returns an empty list. +#define LAZYCUT(L, START, END) ( L ? L.Cut(START, END) : NOOP ) // Reads L or an empty list if L is not a list. Note: Does NOT assign, L may be an expression. #define SANITIZE_LIST(L) ( islist(L) ? L : list() ) - +///This is used to add onto lazy assoc list when the value you're adding is a /list/. This one has extra safety over lazyaddassoc because the value could be null (and thus cant be used to += objects) +#define LAZYADDASSOCLIST(L, K, V) if(!L) { L = list(); } L[K] += list(V); +// Adds to the item K the value V, if the list is null it will initialize it +#define LAZYADDASSOC(L, K, V) if(!L) { L = list(); } L[K] += V; +// Removes the value V from the item K, if the item K is empty will remove it from the list, if the list is empty will set the list to null +#define LAZYREMOVEASSOC(L, K, V) if(L) { if(L[K]) { L[K] -= V; if(!length(L[K])) L -= K; } if(!length(L)) L = null; } +/// Performs an insertion on the given lazy list with the given key and value. If the value already exists, a new one will not be made. +#define LAZYORASSOCLIST(lazy_list, key, value) \ + LAZYINITLIST(lazy_list); \ + LAZYINITLIST(lazy_list[key]); \ + lazy_list[key] |= value; /**** -* Binary search sorted insert +* Binary search sorted insert from TG * INPUT: Object to be inserted * LIST: List to insert object into * TYPECONT: The typepath of the contents of the list diff --git a/code/__defines/machinery.dm b/code/__defines/machinery.dm index 39b8106d46e12..90ff11a5895bd 100644 --- a/code/__defines/machinery.dm +++ b/code/__defines/machinery.dm @@ -41,16 +41,17 @@ #define AI_CAMERA_LUMINOSITY 6 // Camera networks -#define NETWORK_CRESCENT "Crescent" -#define NETWORK_ENGINEERING "Engineering" -#define NETWORK_ERT "ZeEmergencyResponseTeam" -#define NETWORK_EXODUS "Exodus" -#define NETWORK_MEDICAL "Medical" -#define NETWORK_MERCENARY "MercurialNet" -#define NETWORK_MINE "Mining" -#define NETWORK_RESEARCH "Research" -#define NETWORK_SECURITY "Security" -#define NETWORK_THUNDER "Thunderdome" +var/global/const/NETWORK_CRESCENT = "Crescent" +var/global/const/NETWORK_ENGINEERING = "Engineering" +var/global/const/NETWORK_ERT = "ERT" +var/global/const/NETWORK_EXODUS = "Exodus" +var/global/const/NETWORK_MEDICAL = "Medical" +var/global/const/NETWORK_MERCENARY = "MercurialNet" +var/global/const/NETWORK_MINE = "Mining" +var/global/const/NETWORK_RESEARCH = "Research" +var/global/const/NETWORK_SECURITY = "Security" +var/global/const/NETWORK_THUNDER = "Thunderdome" +var/global/const/NETWORK_HELMETS = "Helmet Cameras" #define NETWORK_ALARM_ATMOS "Atmosphere Alarms" #define NETWORK_ALARM_CAMERA "Camera Alarms" @@ -176,4 +177,4 @@ #define PART_TESLA /obj/item/stock_parts/computer/tesla_link // Tesla Link, Allows remote charging from nearest APC. #define PART_SCANNER /obj/item/stock_parts/computer/scanner // One of several optional scanner attachments. -#define CLICKSOUND_INTERVAL (5 SECONDS) +#define CLICKSOUND_INTERVAL (2.5 SECONDS) diff --git a/code/__defines/mapping.dm b/code/__defines/mapping.dm index d75cc6c95453e..ae65c1c99c060 100644 --- a/code/__defines/mapping.dm +++ b/code/__defines/mapping.dm @@ -27,3 +27,7 @@ crash_with("Deleting duplicate of [log_info_line(src)]"); \ return INITIALIZE_HINT_QDEL; \ } + +/// Just a list of all the area objects in the game +/// Note, areas can have duplicate types +GLOBAL_LIST_EMPTY(areas) diff --git a/code/__defines/materials.dm b/code/__defines/materials.dm index 40aa76fd1fa3f..7f7d475c40098 100644 --- a/code/__defines/materials.dm +++ b/code/__defines/materials.dm @@ -14,8 +14,8 @@ #define MATERIAL_IRON "iron" #define MATERIAL_PLATINUM "platinum" #define MATERIAL_BRONZE "bronze" -#define MATERIAL_PHORON_GLASS "phglass" -#define MATERIAL_REINFORCED_PHORON_GLASS "rphglass" +#define MATERIAL_BORAX "borax" +#define MATERIAL_BORON_GLASS "borosilicate glass" #define MATERIAL_MARBLE "marble" #define MATERIAL_CULT "cult" #define MATERIAL_REINFORCED_CULT "cult2" @@ -129,6 +129,7 @@ #define USE_MATERIAL_COLOR FLAG(0) #define USE_MATERIAL_SINGULAR_NAME FLAG(1) #define USE_MATERIAL_PLURAL_NAME FLAG(2) +#define USE_MATERIAL_ICON FLAG(3) //Arbitrary hardness thresholds #define MATERIAL_SOFT 10 diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index 0eebc6367ac88..eb9ad919f742c 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -1,4 +1,9 @@ #define DEBUG + +// Flags +#define ALL (~0) //For convenience. +#define NONE 0 + // Turf-only flags. #define TURF_FLAG_NOJAUNT FLAG(0) // This is used in literally one place, turf.dm, to block ethereal jaunt. #define TURF_FLAG_NORUINS FLAG(1) @@ -11,6 +16,7 @@ #define INVISIBILITY_LIGHTING 20 #define INVISIBILITY_LEVEL_ONE 35 #define INVISIBILITY_LEVEL_TWO 45 +#define INVISIBILITY_OVERMAP 50 #define INVISIBILITY_OBSERVER 60 #define INVISIBILITY_EYE 61 #define INVISIBILITY_SYSTEM 99 @@ -103,13 +109,13 @@ #define CUSTOM_ITEM_SYNTH_CONFIG "config/custom_sprites.txt" #endif #ifndef CUSTOM_ITEM_OBJ -#define CUSTOM_ITEM_OBJ 'icons/obj/custom_items_obj.dmi' +#define CUSTOM_ITEM_OBJ 'icons/obj/unused.dmi' #endif #ifndef CUSTOM_ITEM_MOB -#define CUSTOM_ITEM_MOB 'icons/mob/custom_items_mob.dmi' +#define CUSTOM_ITEM_MOB 'icons/obj/unused.dmi' #endif #ifndef CUSTOM_ITEM_SYNTH -#define CUSTOM_ITEM_SYNTH 'icons/mob/custom_synthetic.dmi' +#define CUSTOM_ITEM_SYNTH 'icons/obj/unused.dmi' #endif #define WALL_CAN_OPEN 1 @@ -134,6 +140,7 @@ #define PROGRAM_TABLET FLAG(2) #define PROGRAM_TELESCREEN FLAG(3) #define PROGRAM_PDA FLAG(4) +#define PROGRAM_NO_KILL FLAG(5) //Not included in PROGRAM_ALL #define PROGRAM_ALL ( PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_TABLET | PROGRAM_TELESCREEN | PROGRAM_PDA ) #define PROGRAM_STATE_KILLED 0 @@ -257,10 +264,13 @@ //Lying animation #define ANIM_LYING_TIME 2 -//Planet habitability class -#define HABITABILITY_IDEAL 1 -#define HABITABILITY_OKAY 2 -#define HABITABILITY_BAD 3 + +//Planet habitability weight +#define HABITABILITY_LOCKED 1 +#define HABITABILITY_TYPICAL 2 +#define HABITABILITY_BAD 3 +#define HABITABILITY_EXTREME 4 + #ifndef WINDOWS_HTTP_POST_DLL_LOCATION #define WINDOWS_HTTP_POST_DLL_LOCATION "lib/byhttp.dll" @@ -281,9 +291,7 @@ //-- Masks for /atom/var/init_flags -- //- machinery -#define INIT_MACHINERY_PROCESS_SELF FLAG(0) -#define INIT_MACHINERY_PROCESS_COMPONENTS FLAG(1) -#define INIT_MACHINERY_PROCESS_ALL ( INIT_MACHINERY_PROCESS_SELF | INIT_MACHINERY_PROCESS_COMPONENTS ) +#define INIT_MACHINERY_START_PROCESSING FLAG(0) //-- @@ -319,3 +327,25 @@ // Helper macro for generating stringified name text for IDs located inside objects, i.e. PDAs or wallets. Used for feedback and interaction messages. #define GET_ID_NAME(ID, HOLDER) (ID == HOLDER ? "\the [ID]" : "\the [ID] in \the [HOLDER]") + + +// Flags for `use_sanity_check()` +/// Do not display user feedback messages. +#define SANITY_CHECK_SILENT FLAG(0) +/// Verify the tool can be unequipped from user. Ignored if the tool is not an item. +#define SANITY_CHECK_TOOL_UNEQUIP FLAG(1) +/// Verify the target can be unequipped from user. Includes `target.loc == src` check to allow items the user isn't holding. +#define SANITY_CHECK_TARGET_UNEQUIP FLAG(2) +/// Verify the target and tool are adjacent to eachother. Ignored if there is no tool or if tool is held by user. +#define SANITY_CHECK_BOTH_ADJACENT FLAG(3) +/// Verify the tool is in the user's active hand. Ignored if the tool is not an item. +#define SANITY_CHECK_TOOL_IN_HAND FLAG(4) +/// Check `CanInteractWith(target, user)`. Only use this for Topic() revalidation. Functionally exclusive with `SANITY_CHECK_TOPIC_PHYSICALLY_INTERACT`. +#define SANITY_CHECK_TOPIC_INTERACT FLAG(5) +/// Check `CanPhysicallyInteractWith(target, user)`. Only use this for Topic() revalidation. Functionally exclusive with `SANITY_CHECK_TOPIC_INTERACT`. +#define SANITY_CHECK_TOPIC_PHYSICALLY_INTERACT FLAG(6) + +#define SANITY_CHECK_DEFAULT (SANITY_CHECK_TOOL_IN_HAND | SANITY_CHECK_BOTH_ADJACENT) + +#define Z_ALL_TURFS(Z) block(locate(1, 1, Z), locate(world.maxx, world.maxy, Z)) +#define DEFAULT_OVERMAP_RANGE 0 // Makes general computers and devices be able to connect to other overmap z-levels on the same tile. //SIERRA TGUI diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 468478a1998d9..6c9a858d12d27 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -36,24 +36,6 @@ #define BORGXRAY FLAG(2) #define BORGMATERIAL FLAG(3) - -#define STANCE_SLEEP 0 // Doing (almost) nothing, to save on CPU because nobody is around to notice or the mob died. -#define STANCE_IDLE 1 // The more or less default state. Wanders around, looks for baddies, and spouts one-liners. -#define STANCE_ALERT 2 // A baddie is visible but not too close, and essentially we tell them to go away or die. -#define STANCE_APPROACH 3 // Attempting to get into range to attack them. -#define STANCE_FIGHT 4 // Actually fighting, with melee or ranged. -#define STANCE_BLINDFIGHT 5 // Fighting something that cannot be seen by the mob, from invisibility or out of sight. -#define STANCE_REPOSITION 6 // Relocating to a better position while in combat. Also used when moving away from a danger like grenades. -#define STANCE_MOVE 7 // Similar to above but for out of combat. If a baddie is seen, they'll cancel and fight them. -#define STANCE_FOLLOW 8 // Following somone, without trying to murder them. -#define STANCE_FLEE 9 // Run away from the target because they're too spooky/we're dying/some other reason. -#define STANCE_DISABLED 10 // Used when the holder is afflicted with certain status effects, such as stuns or confusion. - -#define STANCE_ATTACK 11 // Backwards compatability -#define STANCE_ATTACKING 12 // Ditto - -#define STANCES_COMBAT list(STANCE_ALERT, STANCE_APPROACH, STANCE_FIGHT, STANCE_BLINDFIGHT, STANCE_REPOSITION) - #define LEFT FLAG(0) #define RIGHT FLAG(1) #define UNDER FLAG(2) @@ -104,10 +86,15 @@ #define APPEARANCE_ALL_HAIR (APPEARANCE_HEAD | APPEARANCE_HEAD_COLOR | APPEARANCE_FACE | APPEARANCE_FACE_COLOR) #define APPEARANCE_EYES FLAG(8) #define APPEARANCE_LANG FLAG(9) -#define APPEARANCE_LANG_ANY_NUMBER FLAG(10) -#define APPEARANCE_LANG_ANY_ORIGIN FLAG(11) +#define APPEARANCE_PRONOUNS FLAG(10) + +#define APPEARANCE_LANG_ANY_NUMBER FLAG(21) +#define APPEARANCE_LANG_ANY_ORIGIN FLAG(22) +#define APPEARANCE_SKIP_ALLOW_LIST_CHECK FLAG(23) +#define APPEARANCE_SKIP_RESTRICTED_CHECK FLAG(24) -#define APPEARANCE_COMMON (APPEARANCE_DNA2|APPEARANCE_RACE|APPEARANCE_GENDER|APPEARANCE_SKIN|APPEARANCE_ALL_HAIR|APPEARANCE_EYES|APPEARANCE_LANG) +#define APPEARANCE_BASIC (APPEARANCE_GENDER|APPEARANCE_SKIN|APPEARANCE_ALL_HAIR|APPEARANCE_EYES|APPEARANCE_PRONOUNS) +#define APPEARANCE_COMMON (APPEARANCE_BASIC|APPEARANCE_DNA2|APPEARANCE_RACE|APPEARANCE_LANG) // /sprite_accessory flags @@ -373,7 +360,11 @@ #define SPECIES_GRAVWORLDER "Grav-Adapted Human" #define SPECIES_MULE "Mule" #define SPECIES_MONKEY "Monkey" -#define SPECIES_NABBER "giant armoured serpentid" +#define SPECIES_NABBER "Giant Armoured Serpentid" +#define SPECIES_FARWA "Farwa" +#define SPECIES_NEAERA "Neaera" +#define SPECIES_STOK "Stok" +#define SPECIES_FBP "Full Body Prosthesis" #define UNRESTRICTED_SPECIES list(SPECIES_HUMAN, SPECIES_DIONA, SPECIES_IPC, SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_SKRELL, SPECIES_TRITONIAN, SPECIES_SPACER, SPECIES_VATGROWN, SPECIES_GRAVWORLDER, SPECIES_MULE) #define RESTRICTED_SPECIES list(SPECIES_VOX, SPECIES_ALIEN, SPECIES_GOLEM) @@ -388,11 +379,20 @@ #define STASIS_CRYOBAG "cryobag" #define STASIS_COLD "cold" -#define AURA_CANCEL 1 -#define AURA_FALSE 2 +// Aura check result flags for `/obj/aura/proc/aura_check_*()`. +/// Halts further checking of any other auras on the mob. +#define AURA_CANCEL FLAG(0) +/// Causes the calling `aura_check()` proc to return `FALSE`. +#define AURA_FALSE FLAG(1) + +// Aura type options for `/mob/living/proc/aura_check()`. +/// Aura checks for projectile impacts. Generally called by `/obj/item/projectile/proc/attack_mob()`. Results in `/obj/aura/proc/aura_check_bullet()`. #define AURA_TYPE_BULLET "Bullet" +/// Aura checks for physical weapon attacks. Generally called by `/obj/item/proc/use_weapon()`. Results in `/obj/aura/proc/aura_check_weapon()`. #define AURA_TYPE_WEAPON "Weapon" +/// Aura checks for thrown atom impacts. Generally called by `/mob/living/hitby()`. Results in `/obj/aura/proc/aura_check_thrown()`. #define AURA_TYPE_THROWN "Thrown" +/// Aura checks during mob life. Generally called by `/mob/living/Life()`. Results in `/obj/aura/proc/aura_check_life()`. #define AURA_TYPE_LIFE "Life" #define SPECIES_BLOOD_DEFAULT 560 @@ -408,6 +408,7 @@ #define MOB_CLIMB_TIME_MEDIUM (5 SECONDS) #define MOB_FACTION_NEUTRAL "neutral" +#define MOB_FACTION_CREW "crew" #define ROBOT_MODULE_TYPE_GROUNDED "grounded" #define ROBOT_MODULE_TYPE_FLYING "flying" @@ -482,3 +483,18 @@ #define DO_INCAPACITATED (-3) #define FAKE_INVIS_ALPHA_THRESHOLD 127 // If something's alpha var is at or below this number, certain things will pretend it is invisible. + +#define PRONOUNS_THEY_THEM "they/them" +#define PRONOUNS_HE_HIM "he/his" +#define PRONOUNS_SHE_HER "she/her" +#define PRONOUNS_IT_ITS "it/its" +#define PRONOUNS_HE_THEY "he/they" +#define PRONOUNS_SHE_THEY "she/they" + +#define PRONOUNS_ALL list(PRONOUNS_THEY_THEM, PRONOUNS_HE_HIM, PRONOUNS_SHE_HER, PRONOUNS_HE_THEY, PRONOUNS_SHE_THEY, PRONOUNS_IT_ITS) + +/// Integer (~ticks * SSMobs/wait fire rate). The default maximum value a mob's confused var can be set to. +#define CONFUSED_MAX 15 + +/// Get the client from the var +#define CLIENT_FROM_VAR(I) (ismob(I) ? I:client : (istype(I, /client) ? I : (istype(I, /datum/mind) ? I:current?:client : null))) diff --git a/code/__defines/overmap.dm b/code/__defines/overmap.dm index a9eee83eb376f..7356c7b0ddaa2 100644 --- a/code/__defines/overmap.dm +++ b/code/__defines/overmap.dm @@ -11,4 +11,3 @@ #define OVERMAP_WEAKNESS_EMP 2 #define OVERMAP_WEAKNESS_MINING 4 #define OVERMAP_WEAKNESS_EXPLOSIVE 8 -#define OVERMAP_WEAKNESS_DROPPOD 16 \ No newline at end of file diff --git a/code/__defines/proc_presets.dm b/code/__defines/proc_presets.dm index 0577213357e83..8268469f0150d 100644 --- a/code/__defines/proc_presets.dm +++ b/code/__defines/proc_presets.dm @@ -1 +1 @@ -#define MERGE_ASSOCS_WITH_NUM_VALUES(a, b) merge_assoc_lists(a, b, /proc/assoc_merge_add, 1) +#define MERGE_ASSOCS_WITH_NUM_VALUES(a, b) merge_assoc_lists(a, b, GLOBAL_PROC_REF(assoc_merge_add), 1) diff --git a/code/__defines/qdel.dm b/code/__defines/qdel.dm index ffe750f69a6f8..1202fdf3457f0 100644 --- a/code/__defines/qdel.dm +++ b/code/__defines/qdel.dm @@ -1,24 +1,3 @@ -//defines that give qdel hints. these can be given as a return in destory() or by calling - -#define QDEL_HINT_QUEUE 0 //qdel should queue the object for deletion. -#define QDEL_HINT_LETMELIVE 1 //qdel should let the object live after calling destory. -#define QDEL_HINT_IWILLGC 2 //functionally the same as the above. qdel should assume the object will gc on its own, and not check it. -#define QDEL_HINT_HARDDEL 3 //qdel should assume this object won't gc, and queue a hard delete using a hard reference. -#define QDEL_HINT_HARDDEL_NOW 4 //qdel should assume this object won't gc, and hard del it post haste. -#define QDEL_HINT_FINDREFERENCE 5 //functionally identical to QDEL_HINT_QUEUE if TESTING is not enabled in _compiler_options.dm. - //if TESTING is enabled, qdel will call this object's find_references() verb. -#define QDEL_HINT_IFFAIL_FINDREFERENCE 6 //Above but only if gc fails. -//defines for the gc_destroyed var - -#define GC_QUEUE_PREQUEUE 1 -#define GC_QUEUE_CHECK 2 -#define GC_QUEUE_HARDDELETE 3 -#define GC_QUEUE_COUNT 3 //increase this when adding more steps. - -#define GC_QUEUED_FOR_QUEUING -1 -#define GC_QUEUED_FOR_HARD_DEL -2 -#define GC_CURRENTLY_BEING_QDELETED -3 - #define QDELING(X) (X.gc_destroyed) #define QDELETED(X) (!X || QDELING(X)) #define QDESTROYING(X) (!X || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) diff --git a/code/__defines/research.dm b/code/__defines/research.dm index 6862d2355c1ab..560872ef16c6a 100644 --- a/code/__defines/research.dm +++ b/code/__defines/research.dm @@ -15,5 +15,3 @@ #define PROTOLATHE FLAG(1) //New stuff. Uses glass/metal/chemicals #define MECHFAB FLAG(2) //Mechfab #define CHASSIS FLAG(3) //For protolathe, but differently - -#define T_BOARD(name) "circuit board (" + (name) + ")" \ No newline at end of file diff --git a/code/__defines/rust_g.dm b/code/__defines/rust_g.dm new file mode 100644 index 0000000000000..7420f1426b95f --- /dev/null +++ b/code/__defines/rust_g.dm @@ -0,0 +1,211 @@ +// rust_g.dm - DM API for rust_g extension library +// +// To configure, create a `rust_g.config.dm` and set what you care about from +// the following options: +// +// #define RUST_G "path/to/rust_g" +// Override the .dll/.so detection logic with a fixed path or with detection +// logic of your own. + +// Enable replacement rust-g functions for certain builtins. Off by default. +// #define RUSTG_OVERRIDE_BUILTINS + +#ifndef RUST_G +// Default automatic RUST_G detection. +// On Windows, looks in the standard places for `rust_g.dll`. +// On Linux, looks in `.`, `$LD_LIBRARY_PATH`, and `~/.byond/bin` for either of +// `librust_g.so` (preferred) or `rust_g` (old). + +/* This comment bypasses grep checks */ /var/__rust_g + +/proc/__detect_rust_g() + if (world.system_type == UNIX) + if (fexists("./librust_g.so")) + // No need for LD_LIBRARY_PATH badness. + return __rust_g = "./librust_g.so" + else if (fexists("./rust_g")) + // Old dumb filename. + return __rust_g = "./rust_g" + else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/rust_g")) + // Old dumb filename in `~/.byond/bin`. + return __rust_g = "rust_g" + else + // It's not in the current directory, so try others + return __rust_g = "librust_g.so" + else + return __rust_g = "rust_g" + +#define RUST_G (__rust_g || __detect_rust_g()) +#endif + +// Handle 515 call() -> call_ext() changes +#if DM_VERSION >= 515 +#define RUSTG_CALL call_ext +#else +#define RUSTG_CALL call +#endif + + +/** + * Sets up the Aho-Corasick automaton with its default options. + * + * The search patterns list and the replacements must be of the same length when replace is run, but an empty replacements list is allowed if replacements are supplied with the replace call + * Arguments: + * * key - The key for the automaton, to be used with subsequent rustg_acreplace/rustg_acreplace_with_replacements calls + * * patterns - A non-associative list of strings to search for + * * replacements - Default replacements for this automaton, used with rustg_acreplace + */ +#define rustg_setup_acreplace(key, patterns, replacements) RUSTG_CALL(RUST_G, "setup_acreplace")(key, json_encode(patterns), json_encode(replacements)) + +/** + * Sets up the Aho-Corasick automaton using supplied options. + * + * The search patterns list and the replacements must be of the same length when replace is run, but an empty replacements list is allowed if replacements are supplied with the replace call + * Arguments: + * * key - The key for the automaton, to be used with subsequent rustg_acreplace/rustg_acreplace_with_replacements calls + * * options - An associative list like list("anchored" = 0, "ascii_case_insensitive" = 0, "match_kind" = "Standard"). The values shown on the example are the defaults, and default values may be omitted. See the identically named methods at https://docs.rs/aho-corasick/latest/aho_corasick/struct.AhoCorasickBuilder.html to see what the options do. + * * patterns - A non-associative list of strings to search for + * * replacements - Default replacements for this automaton, used with rustg_acreplace + */ +#define rustg_setup_acreplace_with_options(key, options, patterns, replacements) RUSTG_CALL(RUST_G, "setup_acreplace")(key, json_encode(options), json_encode(patterns), json_encode(replacements)) + +/** + * Run the specified replacement engine with the provided haystack text to replace, returning replaced text. + * + * Arguments: + * * key - The key for the automaton + * * text - Text to run replacements on + */ +#define rustg_acreplace(key, text) RUSTG_CALL(RUST_G, "acreplace")(key, text) + +/** + * Run the specified replacement engine with the provided haystack text to replace, returning replaced text. + * + * Arguments: + * * key - The key for the automaton + * * text - Text to run replacements on + * * replacements - Replacements for this call. Must be the same length as the set-up patterns + */ +#define rustg_acreplace_with_replacements(key, text, replacements) RUSTG_CALL(RUST_G, "acreplace_with_replacements")(key, text, json_encode(replacements)) + +/** + * This proc generates a cellular automata noise grid which can be used in procedural generation methods. + * + * Returns a single string that goes row by row, with values of 1 representing an alive cell, and a value of 0 representing a dead cell. + * + * Arguments: + * * percentage: The chance of a turf starting closed + * * smoothing_iterations: The amount of iterations the cellular automata simulates before returning the results + * * birth_limit: If the number of neighboring cells is higher than this amount, a cell is born + * * death_limit: If the number of neighboring cells is lower than this amount, a cell dies + * * width: The width of the grid. + * * height: The height of the grid. + */ +#define rustg_cnoise_generate(percentage, smoothing_iterations, birth_limit, death_limit, width, height) \ + RUSTG_CALL(RUST_G, "cnoise_generate")(percentage, smoothing_iterations, birth_limit, death_limit, width, height) + + +// File operations // +#define rustg_dmi_strip_metadata(fname) RUSTG_CALL(RUST_G, "dmi_strip_metadata")(fname) +#define rustg_dmi_create_png(path, width, height, data) RUSTG_CALL(RUST_G, "dmi_create_png")(path, width, height, data) +#define rustg_dmi_resize_png(path, width, height, resizetype) RUSTG_CALL(RUST_G, "dmi_resize_png")(path, width, height, resizetype) +/** + * input: must be a path, not an /icon; you have to do your own handling if it is one, as icon objects can't be directly passed to rustg. + * + * output: json_encode'd list. json_decode to get a flat list with icon states in the order they're in inside the .dmi + */ +#define rustg_dmi_icon_states(fname) RUSTG_CALL(RUST_G, "dmi_icon_states")(fname) + +#define rustg_file_read(fname) RUSTG_CALL(RUST_G, "file_read")(fname) +#define rustg_file_exists(fname) RUSTG_CALL(RUST_G, "file_exists")(fname) +#define rustg_file_write(text, fname) RUSTG_CALL(RUST_G, "file_write")(text, fname) +#define rustg_file_append(text, fname) RUSTG_CALL(RUST_G, "file_append")(text, fname) +#define rustg_file_get_line_count(fname) text2num(RUSTG_CALL(RUST_G, "file_get_line_count")(fname)) +#define rustg_file_seek_line(fname, line) RUSTG_CALL(RUST_G, "file_seek_line")(fname, "[line]") +#define rustg_file_write_b64decode(text, fname) RUSTG_CALL(RUST_G, "file_write")(text, fname, "true") + +#ifdef RUSTG_OVERRIDE_BUILTINS + #define file2text(fname) rustg_file_read("[fname]") + #define text2file(text, fname) rustg_file_append(text, "[fname]") + #define fexists(fname) (rustg_file_exists("[fname]") == "true") +#endif + +#define rustg_git_revparse(rev) RUSTG_CALL(RUST_G, "rg_git_revparse")(rev) +#define rustg_git_commit_date(rev) RUSTG_CALL(RUST_G, "rg_git_commit_date")(rev) + +#define rustg_json_is_valid(text) (RUSTG_CALL(RUST_G, "json_is_valid")(text) == "true") + +#define rustg_log_write(fname, text, format) RUSTG_CALL(RUST_G, "log_write")(fname, text, format) +/proc/rustg_log_close_all() return RUSTG_CALL(RUST_G, "log_close_all")() + +#define rustg_log_write_formatted(log, text) rustg_log_write(log, text, "true") +#define rustg_log_write_no_format(log, text) rustg_log_write(log, text, "false") + +#define rustg_raw_read_toml_file(path) json_decode(RUSTG_CALL(RUST_G, "toml_file_to_json")(path) || "null") + +/proc/rustg_read_toml_file(path) + var/list/output = rustg_raw_read_toml_file(path) + if (output["success"]) + return json_decode(output["content"]) + else + CRASH(output["content"]) + +#define rustg_raw_toml_encode(value) json_decode(RUSTG_CALL(RUST_G, "toml_encode")(json_encode(value))) + +/proc/rustg_toml_encode(value) + var/list/output = rustg_raw_toml_encode(value) + if (output["success"]) + return output["content"] + else + CRASH(output["content"]) + +// Network operations // + +#define RUSTG_HTTP_METHOD_GET "get" +#define RUSTG_HTTP_METHOD_PUT "put" +#define RUSTG_HTTP_METHOD_DELETE "delete" +#define RUSTG_HTTP_METHOD_PATCH "patch" +#define RUSTG_HTTP_METHOD_HEAD "head" +#define RUSTG_HTTP_METHOD_POST "post" +#define rustg_http_request_blocking(method, url, body, headers, options) RUSTG_CALL(RUST_G, "http_request_blocking")(method, url, body, headers, options) +#define rustg_http_request_async(method, url, body, headers, options) RUSTG_CALL(RUST_G, "http_request_async")(method, url, body, headers, options) +#define rustg_http_check_request(req_id) RUSTG_CALL(RUST_G, "http_check_request")(req_id) +/proc/rustg_create_async_http_client() return RUSTG_CALL(RUST_G, "start_http_client")() +/proc/rustg_close_async_http_client() return RUSTG_CALL(RUST_G, "shutdown_http_client")() + +#define RUSTG_JOB_NO_RESULTS_YET "NO RESULTS YET" +#define RUSTG_JOB_NO_SUCH_JOB "NO SUCH JOB" +#define RUSTG_JOB_ERROR "JOB PANICKED" + +#define rustg_url_encode(text) RUSTG_CALL(RUST_G, "url_encode")("[text]") +#define rustg_url_decode(text) RUSTG_CALL(RUST_G, "url_decode")(text) + +#define rustg_noise_get_at_coordinates(seed, x, y) RUSTG_CALL(RUST_G, "noise_get_at_coordinates")(seed, x, y) + +// SQL // + +#define rustg_sql_connect_pool(options) RUSTG_CALL(RUST_G, "sql_connect_pool")(options) +#define rustg_sql_query_async(handle, query, params) RUSTG_CALL(RUST_G, "sql_query_async")(handle, query, params) +#define rustg_sql_query_blocking(handle, query, params) RUSTG_CALL(RUST_G, "sql_query_blocking")(handle, query, params) +#define rustg_sql_connected(handle) RUSTG_CALL(RUST_G, "sql_connected")(handle) +#define rustg_sql_disconnect_pool(handle) RUSTG_CALL(RUST_G, "sql_disconnect_pool")(handle) +#define rustg_sql_check_query(job_id) RUSTG_CALL(RUST_G, "sql_check_query")("[job_id]") + +// Time // + +#define rustg_time_microseconds(id) text2num(RUSTG_CALL(RUST_G, "time_microseconds")(id)) +#define rustg_time_milliseconds(id) text2num(RUSTG_CALL(RUST_G, "time_milliseconds")(id)) +#define rustg_time_reset(id) RUSTG_CALL(RUST_G, "time_reset")(id) + +/// Returns the timestamp as a string +/proc/rustg_unix_timestamp() + return RUSTG_CALL(RUST_G, "unix_timestamp")() + +// Text Operations // +#define rustg_cyrillic_to_latin(text) RUSTG_CALL(RUST_G, "cyrillic_to_latin")("[text]") +#define rustg_latin_to_cyrillic(text) RUSTG_CALL(RUST_G, "latin_to_cyrillic")("[text]") + +#ifdef RUSTG_OVERRIDE_BUILTINS + #define url_encode(text) rustg_url_encode(text) + #define url_decode(text) rustg_url_decode(text) +#endif diff --git a/code/__defines/skills.dm b/code/__defines/skills.dm index d186030ed9403..60e9e46b36b85 100644 --- a/code/__defines/skills.dm +++ b/code/__defines/skills.dm @@ -1,17 +1,22 @@ -#define SKILL_NONE 1 -#define SKILL_BASIC 2 -#define SKILL_ADEPT 3 -#define SKILL_EXPERT 4 -#define SKILL_PROF 5 -#define HAS_PERK SKILL_NONE + 1 +#define SKILL_UNSKILLED 1 +#define SKILL_BASIC 2 +#define SKILL_TRAINED 3 +#define SKILL_EXPERIENCED 4 +#define SKILL_MASTER 5 +#define HAS_PERK SKILL_UNSKILLED + 1 -#define SKILL_MIN 1 // Min skill value selectable -#define SKILL_MAX 5 // Max skill value selectable -#define SKILL_DEFAULT 4 //most mobs will default to this +/// Min skill value selectable +#define SKILL_MIN SKILL_UNSKILLED +/// Max skill value selectable +#define SKILL_MAX SKILL_MASTER +/// Default skill value for mobs +#define SKILL_DEFAULT SKILL_EXPERIENCED +/// Baseline skill level used for determining mechanical skill multipliers. +#define SKILL_BASELINE SKILL_TRAINED -#define SKILL_EASY 1 -#define SKILL_AVERAGE 2 -#define SKILL_HARD 4 +#define SKILL_EASY SKILL_UNSKILLED +#define SKILL_AVERAGE SKILL_BASIC +#define SKILL_HARD SKILL_EXPERIENCED #define SKILL_BUREAUCRACY /singleton/hierarchy/skill/organizational/bureaucracy #define SKILL_FINANCE /singleton/hierarchy/skill/organizational/finance diff --git a/code/__defines/sound.dm b/code/__defines/sound.dm new file mode 100644 index 0000000000000..5ff044f5aed8d --- /dev/null +++ b/code/__defines/sound.dm @@ -0,0 +1,34 @@ +///Announcer audio keys +#define ANNOUNCER_ALIENS 'sound/wyccstation/announcements/life_signatures.ogg' +#define ANNOUNCER_IONSTORM 'sound/ai/ionstorm.ogg' +#define ANNOUNCER_METEORS 'sound/wyccstation/announcements/meteors_1.ogg' +#define ANNOUNCER_OUTBREAK5 'sound/wyccstation/announcements/biohazard_level_5.ogg' +#define ANNOUNCER_OUTBREAK7 'sound/wyccstation/announcements/biohazard_level_7.ogg' +#define ANNOUNCER_POWEROFF 'sound/wyccstation/announcements/electricity_off.ogg' +#define ANNOUNCER_POWERON 'sound/wyccstation/announcements/electricity_on.ogg' +#define ANNOUNCER_RADIATION 'sound/wyccstation/announcements/radiation.ogg' +#define ANNOUNCER_SHUTTLECALLED 'sound/ai/shuttlecalled.ogg' +#define ANNOUNCER_SHUTTLEDOCK 'sound/ai/shuttledock.ogg' +#define ANNOUNCER_SHUTTLERECALLED 'sound/ai/shuttlerecalled.ogg' +#define ANNOUNCER_SPANOMALIES 'sound/wyccstation/announcements/anomaly_gravity.ogg' +#define ANNOUNCER_WELCOME 'sound/wyccstation/announcements/welcome_1.ogg' +#define ANNOUNCER_COMMANDREPORT 'sound/wyccstation/announcements/command_report.ogg' +#define ANNOUNCER_ABANDONSHIP 'sound/wyccstation/announcements/evacuation.ogg' +#define ANNOUNCER_ELECTRICALSTORM_MOD 'sound/wyccstation/announcements/electrical_storm_normal.ogg' +#define ANNOUNCER_ELECTRICALSTORM_MAJ 'sound/wyccstation/announcements/electrical_storm_high.ogg' +#define ANNOUNCER_BLUESPACEJUMP_INIT 'sound/wyccstation/announcements/bluespacejump_initialization.ogg' +#define ANNOUNCER_BLUESPACEJUMP_PREP 'sound/wyccstation/announcements/bluespacejump_prepare.ogg' +#define ANNOUNCER_BLUESPACEJUMP_START 'sound/wyccstation/announcements/bluespacejump_start.ogg' + +// Currently unused + +//#define ANNOUNCER_ANIMES 'sound/wyccstation/announcements/anime.ogg' +//#define ANNOUNCER_GRANOMALIES 'sound/wyccstation/announcements/anomaly_gravity.ogg' +//#define ANNOUNCER_NEWAI 'sound/wyccstation/announcements/new_ai_1.ogg' + +///Tools +#define DEFAULT_CROWBAR_SOUND 'sound/items/Crowbar.ogg' +#define DEFAULT_SCREWDRIVER_SOUND 'sound/items/Screwdriver.ogg' +#define DEFAULT_WRENCH_SOUND 'sound/items/Ratchet.ogg' +#define DEFAULT_WIRECUTTER_SOUND 'sound/items/Wirecutter.ogg' +#define DEFAULT_WELDER_SOUND 'sound/items/Welder.ogg' diff --git a/code/__defines/species.dm b/code/__defines/species.dm index 58dbcc6e359cf..31b74723209b8 100644 --- a/code/__defines/species.dm +++ b/code/__defines/species.dm @@ -42,7 +42,7 @@ #define SKIN_THREAT FLAG(0) -// Darkvision Levels. Inverted - white is darkest, black is full vision -#define DARKTINT_NONE "#ffffff" -#define DARKTINT_MODERATE "#f9f9f5" -#define DARKTINT_GOOD "#ebebe6" +// Darkvision Levels. White is brightest, darker tints affect vision negatively +#define DARKTINT_GOOD "#ffffff" +#define DARKTINT_MODERATE "#f9f9f5" +#define DARKTINT_NONE "#ebebe6" diff --git a/code/__defines/subsystem-priority.dm b/code/__defines/subsystem-priority.dm index c43047876537e..888f64cf2a6a8 100644 --- a/code/__defines/subsystem-priority.dm +++ b/code/__defines/subsystem-priority.dm @@ -3,49 +3,53 @@ // SS_BACKGROUND handles high server load differently than Normal and SS_TICKER do. // Higher priority also means a larger share of a given tick before sleep checks. -#define SS_PRIORITY_DEFAULT 50 // Default priority for all processes levels +#define FIRE_PRIORITY_INPUT 1000 // Input MUST ALWAYS BE HIGHEST PRIORITY!!! +#define FIRE_PRIORITY_TIMER 950 +#define FIRE_PRIORITY_OVERLAYS 900 +#define FIRE_PRIORITY_CHAT 850 // Chat +#define FIRE_PRIORITY_TICKER 800 // Gameticker. +#define FIRE_PRIORITY_TGUI 750 +#define FIRE_PRIORITY_NANO 749 // Updates to nanoui uis. +#define FIRE_PRIORITY_MOB 700 // Mob Life(). -// SS_TICKER -#define SS_PRIORITY_TIMER 20 -#define SS_PRIORITY_ICON_UPDATE 20 // Queued icon updates. Mostly used by APCs and tables. +#define FIRE_PRIORITY_PROCESSING 650 // Default priority for all processing subsystems -// Normal -#define SS_PRIORITY_TICKER 100 // Gameticker. -#define SS_PRIORITY_MOB 95 // Mob Life(). -#define SS_PRIORITY_MACHINERY 95 // Machinery + powernet ticks. -#define SS_PRIORITY_AIR 80 // ZAS processing. -#define SS_PRIORITY_CHEMISTRY 60 // Multi-tick chemical reactions. -#define SS_PRIORITY_CHAT 40 // Chat -#define SS_PRIORITY_ALARM 20 // Alarm processing. -#define SS_PRIORITY_EVENT 20 // Event processing and queue handling. -#define SS_PRIORITY_SHUTTLE 20 // Shuttle movement. -#define SS_PRIORITY_CIRCUIT_COMP 20 // Processing circuit component do_work. -#define SS_PRIORITY_TEMPERATURE 20 // Cooling and heating of atoms. -#define SS_PRIORITY_RADIATION 20 // Radiation processing and cache updates. -#define SS_PRIORITY_OPEN_SPACE 20 // Open turf updates. -#define SS_PRIORITY_AIRFLOW 15 // Object movement from ZAS airflow. -#define SS_PRIORITY_AI 15 // Mob AI -#define SS_PRIORITY_PRESENCE 10 // z-level player presence testing -#define SS_PRIORITY_VOTE 10 // Vote management. -#define SS_PRIORITY_SUPPLY 10 // Supply point accumulation. -#define SS_PRIORITY_TRADE 10 // Adds/removes traders. -#define SS_PRIORITY_GHOST_IMAGES 10 // Updates ghost client images. -#define SS_PRIORITY_ZCOPY 10 // Builds appearances for Z-Mimic. +#define FIRE_PRIORITY_MACHINERY 600 // Machinery + powernet ticks. +#define FIRE_PRIORITY_AIR 500 // ZAS processing. +#define FIRE_PRIORITY_SPACEDRIFT 450 // Drifting things +#define FIRE_PRIORITY_PLANTS 400 +#define FIRE_PRIORITY_THROWING 350 // Throwing calculation and constant checks +#define FIRE_PRIORITY_CHEMISTRY 300 // Multi-tick chemical reactions. -// SS_BACKGROUND -#define SS_PRIORITY_OBJECTS 100 // processing_objects processing. -#define SS_PRIORITY_PROCESSING 95 // Generic datum processor. Replaces objects processor. -#define SS_PRIORITY_PLANTS 90 // Plant processing, slow ticks. -#define SS_PRIORITY_VINES 50 // Spreading vine effects. -#define SS_PRIORITY_PSYCHICS 45 // Psychic complexus processing. -#define SS_PRIORITY_NANO 40 // Updates to nanoui uis. -#define SS_PRIORITY_TURF 30 // Radioactive walls/blob. -#define SS_PRIORITY_EVAC 30 // Processes the evac controller. -#define SS_PRIORITY_CIRCUIT 30 // Processing Circuit's ticks and all that -#define SS_PRIORITY_GRAPH 30 // Merging and splitting of graphs -#define SS_PRIORITY_CHAR_SETUP 25 // Writes player preferences to savefiles. -#define SS_PRIORITY_GARBAGE 20 // Garbage collection. -#define SS_PRIORITY_INACTIVITY 10 // Idle kicking. +#define FIRE_PRIORITY_DEFAULT 50 // Default priority for all subsystems + +#define FIRE_PRIORITY_VINES 50 // Spreading vine effects. +#define FIRE_PRIORITY_PSYCHICS 45 // Psychic complexus processing. +#define FIRE_PRIORITY_TURF 30 // Radioactive walls/blob. +#define FIRE_PRIORITY_EVAC 30 // Processes the evac controller. +#define FIRE_PRIORITY_CIRCUIT 30 // Processing Circuit's ticks and all that +#define FIRE_PRIORITY_GRAPH 30 // Merging and splitting of graphs +#define FIRE_PRIORITY_CHAR_SETUP 25 // Writes player preferences to savefiles. +#define FIRE_PRIORITY_AI 25 // Mob AI +#define FIRE_PRIORITY_GARBAGE 20 // Garbage collection. +#define FIRE_PRIORITY_ALARM 20 // Alarm processing. +#define FIRE_PRIORITY_EVENT 20 // Event processing and queue handling. +#define FIRE_PRIORITY_SHUTTLE 20 // Shuttle movement. +#define FIRE_PRIORITY_CIRCUIT_COMP 20 // Processing circuit component do_work. +#define FIRE_PRIORITY_TEMPERATURE 20 // Cooling and heating of atoms. +#define FIRE_PRIORITY_RADIATION 20 // Radiation processing and cache updates. +#define FIRE_PRIORITY_OPEN_SPACE 20 // Open turf updates. +#define FIRE_PRIORITY_AIRFLOW 15 // Object movement from ZAS airflow. +#define FIRE_PRIORITY_OVERMAP 12 +#define FIRE_PRIORITY_ICON_UPDATE 10 +#define FIRE_PRIORITY_INACTIVITY 10 // Idle kicking. +#define FIRE_PRIORITY_PRESENCE 10 // z-level player presence testing +#define FIRE_PRIORITY_VOTE 10 // Vote management. +#define FIRE_PRIORITY_SUPPLY 10 // Supply point accumulation. +#define FIRE_PRIORITY_TRADE 10 // Adds/removes traders. +#define FIRE_PRIORITY_GHOST_IMAGES 10 // Updates ghost client images. +#define FIRE_PRIORITY_PING 10 +#define FIRE_PRIORITY_ZCOPY 10 // Builds appearances for Z-Mimic. // Subsystem fire priority, from lowest to highest priority // If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child) diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index b6298315bc7cd..72579b7f19416 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -8,24 +8,28 @@ #define RUNLEVELS_ALL (~EMPTY_BITFIELD) #define RUNLEVELS_DEFAULT (RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME) +#define RUNLEVELS_GAME (RUNLEVEL_GAME | RUNLEVEL_POSTGAME) +#define RUNLEVELS_PREGAME (RUNLEVEL_LOBBY | RUNLEVEL_SETUP) // Subsystem init_order, from highest priority to lowest priority // Subsystems shutdown in the reverse of the order they initialize in // The numbers just define the ordering, they are meaningless otherwise. -#define SS_INIT_EARLY 18 -#define SS_INIT_GARBAGE 17 -#define SS_INIT_CHEMISTRY 16 -#define SS_INIT_MATERIALS 15 -#define SS_INIT_PLANTS 14 -#define SS_INIT_ANTAGS 13 -#define SS_INIT_CULTURE 12 -#define SS_INIT_MISC 11 -#define SS_INIT_SKYBOX 10 -#define SS_INIT_MAPPING 9 -#define SS_INIT_JOBS 8 -#define SS_INIT_CHAR_SETUP 7 +#define SS_INIT_EARLY 20 +#define SS_INIT_GARBAGE 19 +#define SS_INIT_CHEMISTRY 18 +#define SS_INIT_MATERIALS 17 +#define SS_INIT_PLANTS 16 +#define SS_INIT_ANTAGS 15 +#define SS_INIT_CULTURE 14 +#define SS_INIT_MISC 13 +#define SS_INIT_SKYBOX 12 +#define SS_INIT_MAPPING 11 +#define SS_INIT_JOBS 10 +#define SS_INIT_ASSETS 9 +#define SS_INIT_CHAR_SETUP 8 +#define SS_INIT_INPUT 7 #define SS_INIT_CIRCUIT 6 #define SS_INIT_GRAPH 5 #define SS_INIT_OPEN_SPACE 4 @@ -40,12 +44,15 @@ #define SS_INIT_SHUTTLE -5 #define SS_INIT_GOALS -5 #define SS_INIT_LIGHTING -6 -#define SS_INIT_ZCOPY -7 -#define SS_INIT_HOLOMAP -8 -#define SS_INIT_XENOARCH -10 +#define SS_INIT_AMBIENT_LIGHT -7 +#define SS_INIT_ZCOPY -8 +#define SS_INIT_HOLOMAP -9 +#define SS_INIT_OVERLAYS -10 +#define SS_INIT_XENOARCH -11 #define SS_INIT_BAY_LEGACY -12 #define SS_INIT_TICKER -20 #define SS_INIT_AI -21 #define SS_INIT_AIFAST -22 +#define SS_INIT_PING -85 #define SS_INIT_CHAT -90 // Should be lower to ensure chat remains smooth during init. #define SS_INIT_UNIT_TESTS -100 diff --git a/code/__defines/text.dm b/code/__defines/text.dm new file mode 100644 index 0000000000000..272ab5965e59a --- /dev/null +++ b/code/__defines/text.dm @@ -0,0 +1,3 @@ +/// Standard maptext +/// Prepares a text to be used for maptext. Use this so it doesn't look hideous. +#define MAPTEXT(text) {"[##text]"} diff --git a/code/__defines/tgui.dm b/code/__defines/tgui.dm new file mode 100644 index 0000000000000..b6b48f01dac63 --- /dev/null +++ b/code/__defines/tgui.dm @@ -0,0 +1,48 @@ +/// Max length for Modal Input +#define TGUI_MODAL_INPUT_MAX_LENGTH 1024 +/// Max length for Modal Input for names +#define TGUI_MODAL_INPUT_MAX_LENGTH_NAME 64 // Names for generally anything don't go past 32, let alone 64. + +#define TGUI_MODAL_OPEN 1 +#define TGUI_MODAL_DELEGATE 2 +#define TGUI_MODAL_ANSWER 3 +#define TGUI_MODAL_CLOSE 4 + +/// Maximum number of windows that can be suspended/reused +#define TGUI_WINDOW_SOFT_LIMIT 5 +/// Maximum number of open windows +#define TGUI_WINDOW_HARD_LIMIT 9 + +/// Maximum ping timeout allowed to detect zombie windows +#define TGUI_PING_TIMEOUT (4 SECONDS) +/// Used for rate-limiting to prevent DoS by excessively refreshing a TGUI window +#define TGUI_REFRESH_FULL_UPDATE_COOLDOWN (1 SECONDS) + +/// Window does not exist +#define TGUI_WINDOW_CLOSED 0 +/// Window was just opened, but is still not ready to be sent data +#define TGUI_WINDOW_LOADING 1 +/// Window is free and ready to receive data +#define TGUI_WINDOW_READY 2 + +/// Get a window id based on the provided pool index +#define TGUI_WINDOW_ID(index) "tgui-window-[index]" +/// Get a pool index of the provided window id +#define TGUI_WINDOW_INDEX(window_id) text2num(copytext(window_id, 13)) + +/// Creates a message packet for sending via output() +// This is {"type":type,"payload":payload}, but pre-encoded. This is much faster +// than doing it the normal way. +// To ensure this is correct, this is unit tested in tgui_create_message. +#define TGUI_CREATE_MESSAGE(type, payload) ( \ + "%7b%22type%22%3a%22[type]%22%2c%22payload%22%3a[url_encode(json_encode(payload))]%7d" \ +) + +/// Standard super() call to make sure that the ui_act is sane +#define UI_ACT_CHECK \ + if(..()) {return TRUE} + +/// Standard super() call to make sure that the ui_act is sane +/// Except do not trigger the action in the overriden ui_act of parent +#define UI_ACT_CHECK_NO_ACTION \ + if(..(null, null)) {return TRUE} diff --git a/code/__defines/tools.dm b/code/__defines/tools.dm new file mode 100644 index 0000000000000..99c3cdb8eb930 --- /dev/null +++ b/code/__defines/tools.dm @@ -0,0 +1,38 @@ +// Tool types, if you add new ones please add them to /obj/item/debug/omnitool in code/game/objects/items/debug_items.dm +#define TOOL_CROWBAR "crowbar" +#define TOOL_MULTITOOL "multitool" +#define TOOL_SCREWDRIVER "screwdriver" +#define TOOL_WIRECUTTER "wirecutter" +#define TOOL_WRENCH "wrench" +#define TOOL_WELDER "welder" +#define TOOL_ANALYZER "analyzer" +#define TOOL_MINING "mining" +#define TOOL_SHOVEL "shovel" +#define TOOL_RETRACTOR "retractor" +#define TOOL_HEMOSTAT "hemostat" +#define TOOL_CAUTERY "cautery" +#define TOOL_DRILL "drill" +#define TOOL_SCALPEL "scalpel" +#define TOOL_SAW "saw" +#define TOOL_BONESET "bonesetter" +#define TOOL_KNIFE "knife" +#define TOOL_BLOODFILTER "bloodfilter" +#define TOOL_ROLLINGPIN "rolling pin" +/// Can be used to scrape rust off an any atom; which will result in the Rust Component being qdel'd +#define TOOL_RUSTSCRAPER "rustscraper" + +// If delay between the start and the end of tool operation is less than MIN_TOOL_SOUND_DELAY, +// tool sound is only played when op is started. If not, it's played twice. +#define MIN_TOOL_SOUND_DELAY 20 + +/// Return when an item interaction is successful. +/// This cancels the rest of the chain entirely and indicates success. +#define ITEM_INTERACT_SUCCESS FLAG(0) // Same as TRUE, as most tool (legacy) tool acts return TRUE on success +/// Return to prevent the rest of the attack chain from being executed / preventing the item user from thwacking the target. +/// Similar to [ITEM_INTERACT_SUCCESS], but does not necessarily indicate success. +#define ITEM_INTERACT_BLOCKING FLAG(1) +/// Return to skip the rest of the interaction chain, going straight to attack. +#define ITEM_INTERACT_SKIP_TO_ATTACK FLAG(2) + +/// Combination flag for any item interaction that blocks the rest of the attack chain +#define ITEM_INTERACT_ANY_BLOCKER (ITEM_INTERACT_SUCCESS | ITEM_INTERACT_BLOCKING) diff --git a/code/__defines/turfs.dm b/code/__defines/turfs.dm index c6cf13fbb28b8..58f0935456e9d 100644 --- a/code/__defines/turfs.dm +++ b/code/__defines/turfs.dm @@ -19,4 +19,10 @@ #define SMOOTH_WHITELIST 2 //Smooth with a whitelist of subtypes #define SMOOTH_BLACKLIST 3 //Smooth with all but a blacklist of subtypes +/// Finds turfs block with desired center and radius. Make sure that `center` has valid x,y,z. If it's in loc of another non-turf atom, it's coordinates will be (0,0,0) #define RANGE_TURFS(CENTER, RADIUS) block(locate(max(CENTER.x-(RADIUS), 1), max(CENTER.y-(RADIUS),1), CENTER.z), locate(min(CENTER.x+(RADIUS), world.maxx), min(CENTER.y+(RADIUS), world.maxy), CENTER.z)) +/// The same as `RANGE_TURFS` but with center excluded +#define ORANGE_TURFS(CENTER, RADIUS) RANGE_TURFS(CENTER, RADIUS) - CENTER + +///Returns all currently loaded turfs +#define ALL_TURFS(...) block(locate(1, 1, 1), locate(world.maxx, world.maxy, world.maxz)) diff --git a/code/__defines/xenoarcheaology.dm b/code/__defines/xenoarcheaology.dm index 67f75e72f8439..852f2c0d1d8cd 100644 --- a/code/__defines/xenoarcheaology.dm +++ b/code/__defines/xenoarcheaology.dm @@ -54,4 +54,7 @@ #define EFFECT_PARTICLE 4 #define EFFECT_ORGANIC 5 #define EFFECT_BLUESPACE 6 -#define EFFECT_SYNTH 7 \ No newline at end of file +#define EFFECT_SYNTH 7 + +#define TRIGGER_SIMPLE 0 +#define TRIGGER_COMPLEX 1 diff --git a/code/__defines/~mods/bloom_light.dm b/code/__defines/~mods/bloom_light.dm new file mode 100644 index 0000000000000..371247d85841d --- /dev/null +++ b/code/__defines/~mods/bloom_light.dm @@ -0,0 +1,3 @@ +#define LIGHTING_EXPOSURE_PLANE 4 // Light sources "cones" +#define LIGHTING_LAMPS_PLANE 5 // Light sources themselves (lamps, screens, etc.) +#define LIGHTING_LAMPS_GLARE 6 // Light glare (optional setting) diff --git a/code/__defines/~mods/expanded_culture_descriptor.dm b/code/__defines/~mods/expanded_culture_descriptor.dm new file mode 100644 index 0000000000000..fbe058c80e4d9 --- /dev/null +++ b/code/__defines/~mods/expanded_culture_descriptor.dm @@ -0,0 +1,47 @@ +// EXPANDED_CULTURE_DESCRIPTOR - Start +#define HOME_SYSTEM_UNATHI_TERSTEN "Tersten Clans" +#define FACTION_UNATHI_TERSTEN "Tersten Hegemony" +#define CULTURE_UNATHI_TERSTEN "Tersten Unathi" + +#define FACTION_ZENG_HU "Zeng-Hu Pharmaceuticals" +#define FACTION_WARD_TAKAHASHI "Ward-Takahashi GMB" +#define FACTION_GRAYSON "Grayson Manufactories Ltd." +#define FACTION_AERTHER "Aether Atmospherics and Recycling" +#define FACTION_MAJOR_BILL "Major Bill's" +#define FACTION_FOCAL_POINT "Focal Point Energistics" +#define FACTION_XION "Xion Industrial" +#define FACTION_VEY_MED "Vey-Med" +#define FACTION_BISHOP "Bishop Cybernetics" +#define FACTION_MORPHEUS "Morpheus Cyberkinetics" +#define FACTION_ZPCI "Zone Protection Control Inc." +#define FACTION_SEPTENERGO "SeptEnergo" + +#define CULTURE_HUMAN_LORRIMAN "Lorrimanian" +#define CULTURE_HUMAN_AVANOBLE "Avalon Noble" +#define CULTURE_HUMAN_AVACOMMON "Avalon Commoner" +#define CULTURE_HUMAN_LORDUP "Lordanian, Upper" +#define CULTURE_HUMAN_LORDLOW "Lordanian, Lower" +#define CULTURE_HUMAN_MIRANIAN "Miranian" +#define CULTURE_HUMAN_NYXIAN "Nyxian" + +#define HOME_SYSTEM_TERSTEN "Tersten" +#define HOME_SYSTEM_AVALON "Avalon" +#define HOME_SYSTEM_MIRANIA "Mirania" +#define HOME_SYSTEM_NYX_BRINKBURN "Brinkburn" +#define HOME_SYSTEM_NYX_KALDARK "Kaldark" +#define HOME_SYSTEM_NYX_ROANOK "Roanok" +#define HOME_SYSTEM_NYX_YUKLIT "Yuklit" +#define HOME_SYSTEM_NYX_CASSER "Casser" + +#define FACTION_SKRELL_MED "Gloa'Morr Corp." +#define FACTION_SKRELL_AIR "Krri'gli Corp." +#define FACTION_SKRELL_FOOD "Qorr'moa Inc." + +#define FACTION_POSITRONICS "Positronic Union" + +#define HOME_SYSTEM_ROOT "Root" + +#define LANGUAGE_HUMAN_LORRIMAN "Lirris" +#define LANGUAGE_HUMAN_AVALON "Alain" +#define LANGUAGE_HUMAN_MIRANIAN "Miranian" +// EXPANDED_CULTURE_DESCRIPTOR - End diff --git a/code/__defines/~mods/text_to_speech.dm b/code/__defines/~mods/text_to_speech.dm new file mode 100644 index 0000000000000..5758c881b489d --- /dev/null +++ b/code/__defines/~mods/text_to_speech.dm @@ -0,0 +1,73 @@ +#define TTS_TRAIT_PITCH_WHISPER SHIFTL(1, 1) +#define TTS_TRAIT_RATE_FASTER SHIFTL(1, 2) +#define TTS_TRAIT_RATE_MEDIUM SHIFTL(1, 3) + +#define TTS_TRAIT_ROBOTIZE "tts_trait_robotize" + +#define TTS_CATEGORY_OTHER "Другое" +#define TTS_CATEGORY_WARCRAFT3 "WarCraft 3" +#define TTS_CATEGORY_HALFLIFE2 "Half-Life 2" +#define TTS_CATEGORY_STARCRAFT "StarCraft" +#define TTS_CATEGORY_PORTAL2 "Portal 2" +#define TTS_CATEGORY_STALKER "STALKER" +#define TTS_CATEGORY_DOTA2 "Dota 2" +#define TTS_CATEGORY_LOL "League of Legends" +#define TTS_CATEGORY_FALLOUT "Fallout" +#define TTS_CATEGORY_FALLOUT2 "Fallout 2" +#define TTS_CATEGORY_POSTAL2 "Postal 2" +#define TTS_CATEGORY_TEAMFORTRESS2 "Team Fortress 2" +#define TTS_CATEGORY_ATOMIC_HEART "Atomic Heart" +#define TTS_CATEGORY_OVERWATCH "Overwatch" +#define TTS_CATEGORY_SKYRIM "Skyrim" +#define TTS_CATEGORY_RITA "Rita" +#define TTS_CATEGORY_METRO "Metro" +#define TTS_CATEGORY_HEROESOFTHESTORM "Heroes of the Storm" +#define TTS_CATEGORY_HEARTHSTONE "Hearthstone" +#define TTS_CATEGORY_VALORANT "Valorant" +#define TTS_CATEGORY_EVILISLANDS "Evil Islands" +#define TTS_CATEGORY_WITCHER "Witcher" +#define TTS_CATEGORY_LEFT4DEAD "Left 4 Dead" +#define TTS_CATEGORY_SPONGEBOB "SpongeBob" +#define TTS_CATEGORY_TINYBUNNY "Tiny Bunny" +#define TTS_CATEGORY_BALDURS_GATE_3 "Baldur's gate 3" +#define TTS_CATEGORY_PORTAL "Portal" +#define TTS_CATEGORY_TMNT "Teenage mutant ninja turtle" +#define TTS_CATEGORY_STAR_WARS "Star Wars" +#define TTS_CATEGORY_TRANSFORMERS "Transformers" +#define TTS_CATEGORY_LOTR "The Lord of the rings" +#define TTS_CATEGORY_SHREK "Shrek" +#define TTS_CATEGORY_POTC "Pirates of the Caribbean" +#define TTS_CATEGORY_HARRY_POTTER "Harry Potter" +#define TTS_CATEGORY_X3 "X3" +#define TTS_CATEGORY_OVERLORD2 "The Overlord 2" +#define TTS_CATEGORY_MARVEL "Marvel" +#define TTS_CATEGORY_WOW "World of Warcraft" +#define TTS_CATEGORY_TREASURE_ISLAND "Treasure Island" +#define TTS_CATEGORY_BOYS_WORD "Слово пацана" + +#define TTS_GENDER_ANY "Любой" +#define TTS_GENDER_MALE "Мужской" +#define TTS_GENDER_FEMALE "Женский" + +#define TTS_PHRASES list(\ + "Так звучит мой голос.",\ + "Так я звучу.",\ + "Я.",\ + "Поставьте свою подпись.",\ + "Пора за работу.",\ + "Дело сделано.",\ + "Станция Нанотрейзен.",\ + "Офицер СБ.",\ + "Капитан.",\ + "Вульпканин.",\ + "Съешь же ещё этих мягких французских булок, да выпей чаю.",\ + "Клоун, прекрати разбрасывать банановые кожурки офицерам под ноги!",\ + "Капитан, вы уверены что хотите назначить клоуна на должность главы персонала?",\ + ) + +#define BIG_WORKER_TIER 220 +#define LITTLE_WORKER_TIER 110 + +#define BIG_WORKER_TTS_LEVEL 3 +#define LITTLE_WORKER_TTS_LEVEL 1 +#define DONATOR_LEVEL_MAX 5 diff --git a/code/__defines/~mods/tgs.config.dm b/code/__defines/~mods/tgs.config.dm new file mode 100644 index 0000000000000..000d0b7b979a8 --- /dev/null +++ b/code/__defines/~mods/tgs.config.dm @@ -0,0 +1,12 @@ +#define TGS_EXTERNAL_CONFIGURATION +#define TGS_V3_API +#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name) +#define TGS_READ_GLOBAL(Name) GLOB.##Name +#define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value +#define TGS_WORLD_ANNOUNCE(message) to_world("TGS Notification: [html_encode(##message)]") +#define TGS_INFO_LOG(message) log_tgs(message, "INF") +#define TGS_WARNING_LOG(message) log_tgs(message, "WRN") +#define TGS_ERROR_LOG(message) log_tgs(message, "ERR") +#define TGS_NOTIFY_ADMINS(event) message_admins(##event) +#define TGS_CLIENT_COUNT length(GLOB.clients) +#define TGS_PROTECT_DATUM(Path) diff --git a/code/__defines/~mods/tgs.dm b/code/__defines/~mods/tgs.dm new file mode 100644 index 0000000000000..fdfec5e8ca086 --- /dev/null +++ b/code/__defines/~mods/tgs.dm @@ -0,0 +1,518 @@ +// tgstation-server DMAPI + +#define TGS_DMAPI_VERSION "7.0.2" + +// All functions and datums outside this document are subject to change with any version and should not be relied on. + +// CONFIGURATION + +/// Create this define if you want to do TGS configuration outside of this file. +#ifndef TGS_EXTERNAL_CONFIGURATION + +// Comment this out once you've filled in the below. +#error TGS API unconfigured + +// Uncomment this if you wish to allow the game to interact with TGS 3.. +// This will raise the minimum required security level of your game to TGS_SECURITY_TRUSTED due to it utilizing call()(). +//#define TGS_V3_API + +// Required interfaces (fill in with your codebase equivalent): + +/// Create a global variable named `Name` and set it to `Value`. +#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) + +/// Read the value in the global variable `Name`. +#define TGS_READ_GLOBAL(Name) + +/// Set the value in the global variable `Name` to `Value`. +#define TGS_WRITE_GLOBAL(Name, Value) + +/// Disallow ANYONE from reflecting a given `path`, security measure to prevent in-game use of DD -> TGS capabilities. +#define TGS_PROTECT_DATUM(Path) + +/// Display an announcement `message` from the server to all players. +#define TGS_WORLD_ANNOUNCE(message) + +/// Notify current in-game administrators of a string `event`. +#define TGS_NOTIFY_ADMINS(event) + +/// Write an info `message` to a server log. +#define TGS_INFO_LOG(message) + +/// Write an warning `message` to a server log. +#define TGS_WARNING_LOG(message) + +/// Write an error `message` to a server log. +#define TGS_ERROR_LOG(message) + +/// Get the number of connected /clients. +#define TGS_CLIENT_COUNT + +#endif + +// EVENT CODES + +/// Before a reboot mode change, extras parameters are the current and new reboot mode enums. +#define TGS_EVENT_REBOOT_MODE_CHANGE -1 +/// Before a port change is about to happen, extra parameters is new port. +#define TGS_EVENT_PORT_SWAP -2 +/// Before the instance is renamed, extra parameter is the new name. +#define TGS_EVENT_INSTANCE_RENAMED -3 +/// After the watchdog reattaches to DD, extra parameter is the new [/datum/tgs_version] of the server. +#define TGS_EVENT_WATCHDOG_REATTACH -4 +/// When the watchdog sends a health check to DD. No parameters. +#define TGS_EVENT_HEALTH_CHECK -5 + +/// When the repository is reset to its origin reference. Parameters: Reference name, Commit SHA. +#define TGS_EVENT_REPO_RESET_ORIGIN 0 +/// When the repository performs a checkout. Parameters: Checkout git object. +#define TGS_EVENT_REPO_CHECKOUT 1 +/// When the repository performs a fetch operation. No parameters. +#define TGS_EVENT_REPO_FETCH 2 +/// When the repository test merges. Parameters: PR Number, PR Sha, (Nullable) Comment made by TGS user. +#define TGS_EVENT_REPO_MERGE_PULL_REQUEST 3 +/// Before the repository makes a sychronize operation. Parameters: Absolute repostiory path. +#define TGS_EVENT_REPO_PRE_SYNCHRONIZE 4 +/// Before a engine install operation begins. Parameters: Version string of the installing engine. +#define TGS_EVENT_ENGINE_INSTALL_START 5 +/// When a engine install operation fails. Parameters: Error message +#define TGS_EVENT_ENGINE_INSTALL_FAIL 6 +/// When the active engine version changes. Parameters: (Nullable) Version string of the current engine, version string of the new engine. +#define TGS_EVENT_ENGINE_ACTIVE_VERSION_CHANGE 7 +/// When the compiler starts running. Parameters: Game directory path, origin commit SHA. +#define TGS_EVENT_COMPILE_START 8 +/// When a compile is cancelled. No parameters. +#define TGS_EVENT_COMPILE_CANCELLED 9 +/// When a compile fails. Parameters: Game directory path, [TRUE]/[FALSE] based on if the cause for failure was DMAPI validation. +#define TGS_EVENT_COMPILE_FAILURE 10 +/// When a compile operation completes. Note, this event fires before the new .dmb is loaded into the watchdog. Consider using the [TGS_EVENT_DEPLOYMENT_COMPLETE] instead. Parameters: Game directory path. +#define TGS_EVENT_COMPILE_COMPLETE 11 +/// When an automatic update for the current instance begins. No parameters. +#define TGS_EVENT_INSTANCE_AUTO_UPDATE_START 12 +/// When the repository encounters a merge conflict: Parameters: Base SHA, target SHA, base reference, target reference. +#define TGS_EVENT_REPO_MERGE_CONFLICT 13 +/// When a deployment completes. No Parameters. +#define TGS_EVENT_DEPLOYMENT_COMPLETE 14 +/// Before the watchdog shuts down. Not sent for graceful shutdowns. No parameters. +#define TGS_EVENT_WATCHDOG_SHUTDOWN 15 +/// Before the watchdog detaches for a TGS update/restart. No parameters. +#define TGS_EVENT_WATCHDOG_DETACH 16 +// We don't actually implement these 4 events as the DMAPI can never receive them. +// #define TGS_EVENT_WATCHDOG_LAUNCH 17 +// #define TGS_EVENT_WATCHDOG_CRASH 18 +// #define TGS_EVENT_WORLD_END_PROCESS 19 +// #define TGS_EVENT_WORLD_REBOOT 20 +/// Watchdog event when TgsInitializationComplete() is called. No parameters. +#define TGS_EVENT_WORLD_PRIME 21 +// DMAPI also doesnt implement this +// #define TGS_EVENT_DREAM_DAEMON_LAUNCH 22 +/// After a single submodule update is performed. Parameters: Updated submodule name. +#define TGS_EVENT_REPO_SUBMODULE_UPDATE 23 +/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, version string of the used engine. +#define TGS_EVENT_PRE_DREAM_MAKER 24 +/// Whenever a deployment folder is deleted from disk. Parameters: Game directory path. +#define TGS_EVENT_DEPLOYMENT_CLEANUP 25 + +// OTHER ENUMS + +/// The server will reboot normally. +#define TGS_REBOOT_MODE_NORMAL 0 +/// The server will stop running on reboot. +#define TGS_REBOOT_MODE_SHUTDOWN 1 +/// The watchdog will restart on reboot. +#define TGS_REBOOT_MODE_RESTART 2 + +// Note that security levels are currently meaningless in OpenDream +/// DreamDaemon Trusted security level. +#define TGS_SECURITY_TRUSTED 0 +/// DreamDaemon Safe security level. +#define TGS_SECURITY_SAFE 1 +/// DreamDaemon Ultrasafe security level. +#define TGS_SECURITY_ULTRASAFE 2 + +/// DreamDaemon public visibility level. +#define TGS_VISIBILITY_PUBLIC 0 +/// DreamDaemon private visibility level. +#define TGS_VISIBILITY_PRIVATE 1 +/// DreamDaemon invisible visibility level. +#define TGS_VISIBILITY_INVISIBLE 2 + +/// The Build Your Own Net Dream engine. +#define TGS_ENGINE_TYPE_BYOND 0 +/// The OpenDream engine. +#define TGS_ENGINE_TYPE_OPENDREAM 1 + +//REQUIRED HOOKS + +/** + * Call this somewhere in [/world/proc/New] that is always run. This function may sleep! + * + * * event_handler - Optional user defined [/datum/tgs_event_handler]. + * * minimum_required_security_level: The minimum required security level to run the game in which the DMAPI is integrated. Can be one of [TGS_SECURITY_ULTRASAFE], [TGS_SECURITY_SAFE], or [TGS_SECURITY_TRUSTED]. + */ +/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) + return + +/** + * Call this when your initializations are complete and your game is ready to play before any player interactions happen. + * + * This may use [/world/var/sleep_offline] to make this happen so ensure no changes are made to it while this call is running. + * Afterwards, consider explicitly setting it to what you want to avoid this BYOND bug: http://www.byond.com/forum/post/2575184 + * This function should not be called before ..() in [/world/proc/New]. + */ +/world/proc/TgsInitializationComplete() + return + +/// Put this at the start of [/world/proc/Topic]. +#define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return + +/** + * Call this as late as possible in [world/proc/Reboot] (BEFORE ..()). + */ +/world/proc/TgsReboot() + return + +// DATUM DEFINITIONS +// All datums defined here should be considered read-only + +/// Represents git revision information. +/datum/tgs_revision_information + /// Full SHA of the commit. + var/commit + /// ISO 8601 timestamp of when the commit was created. + var/timestamp + /// Full sha of last known remote commit. This may be null if the TGS repository is not currently tracking a remote branch. + var/origin_commit + +/// Represents a version. +/datum/tgs_version + /// The suite/major version number. + var/suite + + // This group of variables can be null to represent a wild card. + /// The minor version number. null for wildcards. + var/minor + /// The patch version number. null for wildcards. + var/patch + + /// Legacy version number. Generally null. + var/deprecated_patch + + /// Unparsed string value. + var/raw_parameter + /// String value minus prefix. + var/deprefixed_parameter + +/** + * Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] contains wildcards. + */ +/datum/tgs_version/proc/Wildcard() + return + +/** + * Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] equals some other version. + * + * other_version - The [/datum/tgs_version] to compare against. + */ +/datum/tgs_version/proc/Equals(datum/tgs_version/other_version) + return + +/// Represents a merge of a GitHub pull request. +/datum/tgs_revision_information/test_merge + /// The test merge number. + var/number + /// The test merge source's title when it was merged. + var/title + /// The test merge source's body when it was merged. + var/body + /// The Username of the test merge source's author. + var/author + /// An http URL to the test merge source. + var/url + /// The SHA of the test merge when that was merged. + var/head_commit + /// Optional comment left by the TGS user who initiated the merge. + var/comment + +/// Represents a connected chat channel. +/datum/tgs_chat_channel + /// TGS internal channel ID. + var/id + /// User friendly name of the channel. + var/friendly_name + /// Name of the chat connection. This is the IRC server address or the Discord guild. + var/connection_name + /// [TRUE]/[FALSE] based on if the server operator has marked this channel for game admins only. + var/is_admin_channel + /// [TRUE]/[FALSE] if the channel is a private message channel for a [/datum/tgs_chat_user]. + var/is_private_channel + /// Tag string associated with the channel in TGS. + var/custom_tag + /// [TRUE]/[FALSE] if the channel supports embeds. + var/embeds_supported + +// Represents a chat user +/datum/tgs_chat_user + /// TGS internal user ID. + var/id + /// The user's display name. + var/friendly_name + /// The string to use to ping this user in a message. + var/mention + /// The [/datum/tgs_chat_channel] the user was from. + var/datum/tgs_chat_channel/channel + +/// User definable handler for TGS events. +/datum/tgs_event_handler + /// If the handler receieves [TGS_EVENT_HEALTH_CHECK] events. + var/receive_health_checks = FALSE + +/** + * User definable callback for handling TGS events. + * + * event_code - One of the TGS_EVENT_ defines. Extra parameters will be documented in each. + */ +/datum/tgs_event_handler/proc/HandleEvent(event_code, ...) + set waitfor = FALSE + return + +/// User definable chat command. +/datum/tgs_chat_command + /// The string to trigger this command on a chat bot. e.g `@bot name ...` or `!tgs name ...`. + var/name = "" + /// The help text displayed for this command. + var/help_text = "" + /// If this command should be available to game administrators only. + var/admin_only = FALSE + /// A subtype of [/datum/tgs_chat_command] that is ignored when enumerating available commands. Use this to create shared base /datums for commands. + var/ignore_type + +/** + * Process command activation. Should return a [/datum/tgs_message_content] to respond to the issuer with. + * + * sender - The [/datum/tgs_chat_user] who issued the command. + * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. + */ +/datum/tgs_chat_command/proc/Run(datum/tgs_chat_user/sender, params) + CRASH("[type] has no implementation for Run()") + +/// User definable chat message. +/datum/tgs_message_content + /// The tring content of the message. Must be provided in New(). + var/text + + /// The [/datum/tgs_chat_embed] to embed in the message. Not supported on all chat providers. + var/datum/tgs_chat_embed/structure/embed + +/datum/tgs_message_content/New(text) + if(!istext(text)) + TGS_ERROR_LOG("[/datum/tgs_message_content] created with no text!") + text = null + + src.text = text + +/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/channel#embed-object-embed-structure for details. +/datum/tgs_chat_embed/structure + var/title + var/description + var/url + + /// Timestamp must be encoded as: time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss"). Use the active timezone. + var/timestamp + + /// Colour must be #AARRGGBB or #RRGGBB hex string. + var/colour + + /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details. + var/datum/tgs_chat_embed/media/image + + /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-thumbnail-structure for details. + var/datum/tgs_chat_embed/media/thumbnail + + /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details. + var/datum/tgs_chat_embed/media/video + + var/datum/tgs_chat_embed/footer/footer + var/datum/tgs_chat_embed/provider/provider + var/datum/tgs_chat_embed/provider/author/author + + var/list/datum/tgs_chat_embed/field/fields + +/// Common datum for similar discord embed medias. +/datum/tgs_chat_embed/media + /// Must be set in New(). + var/url + var/width + var/height + var/proxy_url + +/datum/tgs_chat_embed/media/New(url) + if(!istext(url)) + CRASH("[/datum/tgs_chat_embed/media] created with no url!") + + src.url = url + +/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-footer-structure for details. +/datum/tgs_chat_embed/footer + /// Must be set in New(). + var/text + var/icon_url + var/proxy_icon_url + +/datum/tgs_chat_embed/footer/New(text) + if(!istext(text)) + CRASH("[/datum/tgs_chat_embed/footer] created with no text!") + + src.text = text + +/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-provider-structure for details. +/datum/tgs_chat_embed/provider + var/name + var/url + +/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-author-structure for details. Must have name set in New(). +/datum/tgs_chat_embed/provider/author + var/icon_url + var/proxy_icon_url + +/datum/tgs_chat_embed/provider/author/New(name) + if(!istext(name)) + CRASH("[/datum/tgs_chat_embed/provider/author] created with no name!") + + src.name = name + +/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-field-structure for details. Must have name and value set in New(). +/datum/tgs_chat_embed/field + var/name + var/value + var/is_inline + +/datum/tgs_chat_embed/field/New(name, value) + if(!istext(name)) + CRASH("[/datum/tgs_chat_embed/field] created with no name!") + + if(!istext(value)) + CRASH("[/datum/tgs_chat_embed/field] created with no value!") + + src.name = name + src.value = value + +// API FUNCTIONS + +/// Returns the maximum supported [/datum/tgs_version] of the DMAPI. +/world/proc/TgsMaximumApiVersion() + return + +/// Returns the minimum supported [/datum/tgs_version] of the DMAPI. +/world/proc/TgsMinimumApiVersion() + return + +/** + * Returns [TRUE] if DreamDaemon was launched under TGS, the API matches, and was properly initialized. [FALSE] will be returned otherwise. + */ +/world/proc/TgsAvailable() + return + +// No function below this succeeds if it TgsAvailable() returns FALSE or if TgsNew() has yet to be called. + +/** + * Forces a hard reboot of DreamDaemon by ending the process. This function may sleep! + * + * Unlike del(world) clients will try to reconnect. + * If TGS has not requested a [TGS_REBOOT_MODE_SHUTDOWN] DreamDaemon will be launched again. + */ +/world/proc/TgsEndProcess() + return + +/** + * Send a message to connected chats. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. + * + * message - The [/datum/tgs_message_content] to send. + * admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies. + */ +/world/proc/TgsTargetedChatBroadcast(datum/tgs_message_content/message, admin_only = FALSE) + return + +/** + * Send a private message to a specific user. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. + * + * message - The [/datum/tgs_message_content] to send. + * user: The [/datum/tgs_chat_user] to PM. + */ +/world/proc/TgsChatPrivateMessage(datum/tgs_message_content/message, datum/tgs_chat_user/user) + return + +/** + * Send a message to connected chats that are flagged as game-related in TGS. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. + * + * message - The [/datum/tgs_message_content] to send. + * channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to. + */ +/world/proc/TgsChatBroadcast(datum/tgs_message_content/message, list/channels = null) + return + +/// Returns the current [/datum/tgs_version] of TGS if it is running the server, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! +/world/proc/TgsVersion() + return + +/// Returns the running engine type +/world/proc/TgsEngine() + return + +/// Returns the current [/datum/tgs_version] of the DMAPI being used if it was activated, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! +/world/proc/TgsApiVersion() + return + +/// Returns the name of the TGS instance running the game if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! +/world/proc/TgsInstanceName() + return + +/// Return the current [/datum/tgs_revision_information] of the running server if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! +/world/proc/TgsRevision() + return + +/// Returns the current BYOND security level as a TGS_SECURITY_ define if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! +/world/proc/TgsSecurityLevel() + return + +/// Returns the current BYOND visibility level as a TGS_VISIBILITY_ define if TGS is present, null otherwise. Requires TGS to be using interop API version 5 or higher otherwise the string "___unimplemented" wil be returned. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! +/world/proc/TgsVisibility() + return + +/// Returns a list of active [/datum/tgs_revision_information/test_merge]s if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! +/world/proc/TgsTestMerges() + return + +/// Returns a list of connected [/datum/tgs_chat_channel]s if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! +/world/proc/TgsChatChannelInfo() + return + +/* +The MIT License + +Copyright (c) 2017-2023 Jordan Brown + +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and +associated documentation files (the "Software"), to +deal in the Software without restriction, including +without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom +the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ diff --git a/code/__defines/~mods/~master_defines.dm b/code/__defines/~mods/~master_defines.dm new file mode 100644 index 0000000000000..767ded56bc693 --- /dev/null +++ b/code/__defines/~mods/~master_defines.dm @@ -0,0 +1,40 @@ +/* + SierraBay12 - Master defines file + + Руководство по добавлению дефайнов: + - Добавь комментарий с ID модуля и указанием, что это начало + - Запиши все нужные дефайны + - Вновь комментарий с ID модуля и указанием, что это конец +*/ + +// TAJARA - Start +#define SPECIES_TAJARA "Tajara" +#define LANGUAGE_SIIK_MAAS "Siik'maas" +#define LANGUAGE_SIIK_TAJR "Siik'tajr" +// TAJARA - End + +// LEGALESE - Start +#define LANGUAGE_LEGALESE "Legalese" +// LEGALESE - End + +// UTF8 - Start +#undef show_browser +#define show_browser(target, content, title) to_target(target, browse(utf_8_html(content), title)) +// UTF8 - End + +// DON_LOADOUT - Start +#define DONATION_TIER_NONE 0 +#define DONATION_TIER_ONE 1 +#define DONATION_TIER_TWO 2 +#define DONATION_TIER_THREE 3 +#define DONATION_TIER_FOUR 4 +#define DONATION_TIER_ADMIN 5 + +#define DONATION_TIER_ONE_SUM 100 +#define DONATION_TIER_TWO_SUM 300 +#define DONATION_TIER_THREE_SUM 500 +#define DONATION_TIER_FOUR_SUM 1000 + +#define DELAY2GLIDESIZE(delay) (world.icon_size / max(ceil(delay / world.tick_lag), 1)) + +#define BP_COOLING "cooling system" diff --git a/code/__defines/~unit_testing.dm b/code/__defines/~unit_testing.dm deleted file mode 100644 index 4b2caf048cc22..0000000000000 --- a/code/__defines/~unit_testing.dm +++ /dev/null @@ -1,10 +0,0 @@ -/* - * - * This file is used to indicate that Unit Tests are to be ran. - * Do not add anything but the UNIT_TEST definition here as it will be overwritten when running tests. - * - * - * Should you wish to edit set UNIT_TEST to 1 like so: - * #define UNIT_TEST 1 - */ -#define UNIT_TEST 0 diff --git a/code/_global_vars/lists/flavor.dm b/code/_global_vars/lists/flavor.dm index 8a91dc33dfd46..9a1adfe0b3295 100644 --- a/code/_global_vars/lists/flavor.dm +++ b/code/_global_vars/lists/flavor.dm @@ -72,27 +72,3 @@ GLOBAL_LIST_INIT(numbers_as_words, list("One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen")) - -GLOBAL_LIST_INIT(possible_cable_colours, SetupCableColors()) - -/proc/SetupCableColors() - . = list() - - var/invalid_cable_coils = list( - /obj/item/stack/cable_coil/single, - /obj/item/stack/cable_coil/cut, - /obj/item/stack/cable_coil/cyborg, - /obj/item/stack/cable_coil/fabricator, - /obj/item/stack/cable_coil/random - ) - - var/special_name_mappings = list(/obj/item/stack/cable_coil = "Red") - - for(var/coil_type in (typesof(/obj/item/stack/cable_coil) - invalid_cable_coils)) - var/name = special_name_mappings[coil_type] || capitalize(copytext_after_last("[coil_type]", "/")) - - var/obj/item/stack/cable_coil/C = coil_type - var/color = initial(C.color) - - .[name] = color - . = sortAssoc(.) diff --git a/code/_global_vars/lists/mapping.dm b/code/_global_vars/lists/mapping.dm index 47bd677e07777..50e4be515e2d9 100644 --- a/code/_global_vars/lists/mapping.dm +++ b/code/_global_vars/lists/mapping.dm @@ -3,30 +3,51 @@ GLOBAL_LIST_INIT(cardinalz, list(NORTH, SOUTH, EAST, WEST, UP, DOWN)) GLOBAL_LIST_INIT(cornerdirs, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) GLOBAL_LIST_INIT(cornerdirsz, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTH|UP, EAST|UP, WEST|UP, SOUTH|UP, NORTH|DOWN, EAST|DOWN, WEST|DOWN, SOUTH|DOWN)) GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) -GLOBAL_LIST_INIT(reverse_dir, list( // reverse_dir[dir] = reverse of dir + +/// reverse_dir[dir] = reverse of dir +GLOBAL_LIST_INIT(reverse_dir, list( 2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15, 32, 34, 33, 35, 40, 42, 41, 43, 36, 38, 37, 39, 44, 46, 45, 47, 16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31, 48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63 )) -GLOBAL_LIST_INIT(flip_dir, list( // flip_dir[dir] = 180 degree rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN. +/// flip_dir[dir] = 180 degree rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN. +GLOBAL_LIST_INIT(flip_dir, list( 2, 1, 3, 8, 10, 9, 11, 4, 6, 5, 7, 12, 14, 13, 15, 16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31, // UP - Same as first line but +16 32, 34, 33, 35, 40, 42, 41, 43, 36, 38, 37, 39, 44, 46, 45, 47, // DOWN - Same as first line but +32 48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63 // UP+DOWN - Same as first line but +48 )) -GLOBAL_LIST_INIT(cw_dir, list( // cw_dir[dir] = clockwise rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN. +/// cw_dir[dir] = clockwise 4-rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN. +GLOBAL_LIST_INIT(cw_dir, list( 4, 8, 12, 2, 6, 10, 14, 1, 5, 9, 13, 3, 7, 11, 15, 16, 20, 24, 28, 18, 22, 26, 30, 17, 21, 25, 19, 29, 23, 27, 31, // UP - Same as first line but +16 32, 36, 40, 44, 34, 38, 42, 46, 33, 37, 41, 45, 35, 39, 43, 47, // DOWN - Same as first line but +32 48, 52, 56, 40, 50, 54, 58, 62, 49, 53, 57, 61, 51, 55, 59, 63 // UP+DOWN - Same as first line but +48 )) -GLOBAL_LIST_INIT(ccw_dir, list( // ccw_dir[dir] = counter-clockwise rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN. +/// cw_dir_8[dir] = clockwise 8-rotation of dir. Ignores invalid dir combinations. +GLOBAL_LIST_INIT(cw_dir_8, list( + 5, 10, 0, 6, 4, 2, 0, 9, 1, 8, 0, 0, 0, 0, 0, 0, + 21, 26, 0, 22, 20, 18, 0, 25, 17, 24, 0, 0, 0, 0, 0, 0, + 37, 42, 0, 38, 36, 34, 0, 41, 33, 40, 0, 0, 0, 0, 0, 0, + 53, 58, 0, 54, 52, 50, 0, 57, 49, 56, 0, 0, 0, 0, 0, 0 +)) + +/// ccw_dir[dir] = counter-clockwise 4-rotation of dir. Unlike reverse_dir, UP remains UP & DOWN remains DOWN. +GLOBAL_LIST_INIT(ccw_dir, list( 8, 4, 12, 1, 9, 5, 13, 2, 10, 6, 14, 3, 11, 7, 15, 16, 24, 20, 28, 17, 25, 21, 29, 18, 26, 22, 30, 19, 27, 23, 31, // UP - Same as first line but +16 32, 40, 36, 44, 33, 41, 37, 45, 34, 42, 38, 46, 35, 43, 39, 47, // DOWN - Same as first line but +32 48, 56, 52, 60, 49, 57, 53, 61, 50, 58, 54, 62, 51, 59, 55, 63 // UP+DOWN - Same as first line but +48 )) + +/// ccw_dir_8[dir] = counter-clockwise 8-rotation of dir. Ignores invalid dir combinations. +GLOBAL_LIST_INIT(ccw_dir_8, list( + 9, 6, 0, 5, 1, 4, 0, 10, 8, 2, 0, 0, 0, 0, 0, 0, + 25, 22, 0, 21, 17, 20, 0, 26, 24, 18, 0, 0, 0, 0, 0, 0, + 41, 38, 0, 37, 33, 36, 0, 42, 40, 34, 0, 0, 0, 0, 0, 0, + 57, 54, 0, 53, 49, 52, 0, 58, 56, 50, 0, 0, 0, 0, 0, 0 +)) diff --git a/code/_global_vars/lists/research.dm b/code/_global_vars/lists/research.dm new file mode 100644 index 0000000000000..705482a2f36f7 --- /dev/null +++ b/code/_global_vars/lists/research.dm @@ -0,0 +1,2 @@ +/// List of research ids to corresponding reasearch names +GLOBAL_LIST_EMPTY(tech_id_to_name) diff --git a/code/_global_vars/lists/slots.dm b/code/_global_vars/lists/slots.dm new file mode 100644 index 0000000000000..20223ced271ae --- /dev/null +++ b/code/_global_vars/lists/slots.dm @@ -0,0 +1,20 @@ +GLOBAL_LIST_INIT(slot_descriptions, list(\ + "[slot_back]" = "Back", \ + "[slot_r_hand]" = "Right Hand", \ + "[slot_l_hand]" = "Left Hand", \ + "[slot_w_uniform]" = "Uniform", \ + "[slot_head]" = "Head", \ + "[slot_wear_suit]" = "Suit", \ + "[slot_l_ear]" = "Left Ear", \ + "[slot_r_ear]" = "Right Ear", \ + "[slot_belt]" = "Belt", \ + "[slot_shoes]" = "Shoes", \ + "[slot_wear_mask]" = "Mask", \ + "[slot_handcuffed]" = "Handcuffed", \ + "[slot_legcuffed]" = "Legcuffed", \ + "[slot_wear_id]" = "ID", \ + "[slot_gloves]" = "Gloves", \ + "[slot_glasses]" = "Glasses", \ + "[slot_s_store]" = "Suit Store", \ + "[slot_tie]" = "Accessory" \ +)) diff --git a/code/_global_vars/logging.dm b/code/_global_vars/logging.dm index 6f6dc2e514545..3ff03e78c2456 100644 --- a/code/_global_vars/logging.dm +++ b/code/_global_vars/logging.dm @@ -4,5 +4,3 @@ var/global/diary GLOBAL_VAR(log_directory) GLOBAL_PROTECT(log_directory) -GLOBAL_VAR(world_qdel_log) -GLOBAL_PROTECT(world_qdel_log) diff --git a/code/_helpers/areas.dm b/code/_helpers/areas.dm index dcc8f351a9d30..c357a7411c162 100644 --- a/code/_helpers/areas.dm +++ b/code/_helpers/areas.dm @@ -1,42 +1,88 @@ /* List generation helpers */ -/proc/get_filtered_areas(list/predicates = list(/proc/is_area_with_turf)) +/proc/get_filtered_areas(list/predicates = list(GLOBAL_PROC_REF(is_area_with_turf))) + RETURN_TYPE(/list) . = list() if(!predicates) return if(!islist(predicates)) predicates = list(predicates) - for(var/area/A) + for(var/area/A as anything in GLOB.areas) if(all_predicates_true(list(A), predicates)) . += A /proc/get_area_turfs(area/A, list/predicates) - . = new/list() + RETURN_TYPE(/list) A = istype(A) ? A : locate(A) if(!A) - return - for(var/turf/T in A.contents) - if(!predicates || all_predicates_true(list(T), predicates)) - . += T + return list() + + if(!A.has_turfs()) + return list() + + var/list/all_area_turfs = A.get_turfs_from_all_z() + if(!length(predicates)) + return all_area_turfs + + var/list/area_turfs = list() + for(var/turf/T as anything in all_area_turfs) + if(all_predicates_true(list(T), predicates)) + area_turfs += T + + return area_turfs + +/proc/get_turfs_in_areas(list/areas, list/predicates) + if(!islist(areas)) + areas = list(areas) + + var/list/turfs = list() + for(var/area/current_area as anything in areas) + var/list/current_area_turfs = get_area_turfs(current_area, predicates) + if(!current_area_turfs) + continue + + turfs |= current_area_turfs + + return turfs + +/// Returns set of area refs as: area_ref => TRUE +/// For fast area checking +/proc/get_area_refs_set(list/areas) + var/list/area_refs_set = list() + for(var/area/single_area as anything in areas) + area_refs_set[ref(single_area)] = TRUE + + return area_refs_set /proc/get_subarea_turfs(area/A, list/predicates) - . = new/list() + RETURN_TYPE(/list) + . = list() A = istype(A) ? A.type : A if(!ispath(A)) return + for(var/sub_area_type in typesof(A)) var/area/sub_area = locate(sub_area_type) - for(var/turf/T in sub_area.contents) - if(!predicates || all_predicates_true(list(T), predicates)) + if(!sub_area.has_turfs()) + continue + + var/list/all_area_turfs = sub_area.get_turfs_from_all_z() + if(!length(predicates)) + . += all_area_turfs + + for(var/turf/T as anything in all_area_turfs) + if(all_predicates_true(list(T), predicates)) . += T /proc/group_areas_by_name(list/predicates) + RETURN_TYPE(/list) . = list() for(var/area/A in get_filtered_areas(predicates)) group_by(., A.name, A) /proc/group_areas_by_z_level(list/predicates) + RETURN_TYPE(/list) . = list() for(var/area/A in get_filtered_areas(predicates)) group_by(., pad_left(num2text(A.z), 3, "0"), A) @@ -45,21 +91,25 @@ Pick helpers */ /proc/pick_subarea_turf(areatype, list/predicates) + RETURN_TYPE(/turf) var/list/turfs = get_subarea_turfs(areatype, predicates) if(LAZYLEN(turfs)) return pick(turfs) /proc/pick_area_turf(areatype, list/predicates) + RETURN_TYPE(/turf) var/list/turfs = get_area_turfs(areatype, predicates) - if(turfs && length(turfs)) + if(length(turfs)) return pick(turfs) /proc/pick_area(list/predicates) + RETURN_TYPE(/area) var/list/areas = get_filtered_areas(predicates) if(LAZYLEN(areas)) . = pick(areas) /proc/pick_area_and_turf(list/area_predicates, list/turf_predicates) + RETURN_TYPE(/turf) var/list/areas = get_filtered_areas(area_predicates) // We loop over all area candidates, until we finally get a valid turf or run out of areas while(!. && length(areas)) @@ -67,15 +117,17 @@ . = pick_area_turf(A, turf_predicates) /proc/pick_area_turf_in_connected_z_levels(list/area_predicates, list/turf_predicates, z_level) + RETURN_TYPE(/turf) area_predicates = area_predicates.Copy() var/z_levels = GetConnectedZlevels(z_level) - area_predicates[/proc/area_belongs_to_zlevels] = z_levels + area_predicates[GLOBAL_PROC_REF(area_belongs_to_zlevels)] = z_levels return pick_area_and_turf(area_predicates, turf_predicates) /proc/pick_area_turf_in_single_z_level(list/area_predicates, list/turf_predicates, z_level) + RETURN_TYPE(/turf) area_predicates = area_predicates.Copy() - area_predicates[/proc/area_belongs_to_zlevels] = list(z_level) + area_predicates[GLOBAL_PROC_REF(area_belongs_to_zlevels)] = list(z_level) return pick_area_and_turf(area_predicates, turf_predicates) /* @@ -114,17 +166,17 @@ /proc/is_coherent_area(area/A) return !is_type_in_list(A, GLOB.using_map.area_coherency_test_exempt_areas) -GLOBAL_LIST_INIT(is_station_but_not_space_or_shuttle_area, list(/proc/is_station_area, /proc/is_not_space_area, /proc/is_not_shuttle_area)) +GLOBAL_LIST_INIT(is_station_but_not_space_or_shuttle_area, list(GLOBAL_PROC_REF(is_station_area), GLOBAL_PROC_REF(is_not_space_area), GLOBAL_PROC_REF(is_not_shuttle_area))) -GLOBAL_LIST_INIT(is_contact_but_not_space_or_shuttle_area, list(/proc/is_contact_area, /proc/is_not_space_area, /proc/is_not_shuttle_area)) +GLOBAL_LIST_INIT(is_contact_but_not_space_or_shuttle_area, list(GLOBAL_PROC_REF(is_contact_area), GLOBAL_PROC_REF(is_not_space_area), GLOBAL_PROC_REF(is_not_shuttle_area))) -GLOBAL_LIST_INIT(is_player_but_not_space_or_shuttle_area, list(/proc/is_player_area, /proc/is_not_space_area, /proc/is_not_shuttle_area)) +GLOBAL_LIST_INIT(is_player_but_not_space_or_shuttle_area, list(GLOBAL_PROC_REF(is_player_area), GLOBAL_PROC_REF(is_not_space_area), GLOBAL_PROC_REF(is_not_shuttle_area))) -GLOBAL_LIST_INIT(is_station_area, list(/proc/is_station_area)) +GLOBAL_LIST_INIT(is_station_area, list(GLOBAL_PROC_REF(is_station_area))) -GLOBAL_LIST_INIT(is_station_and_maint_area, list(/proc/is_station_area, /proc/is_maint_area)) +GLOBAL_LIST_INIT(is_station_and_maint_area, list(GLOBAL_PROC_REF(is_station_area), GLOBAL_PROC_REF(is_maint_area))) -GLOBAL_LIST_INIT(is_station_but_not_maint_area, list(/proc/is_station_area, /proc/is_not_maint_area)) +GLOBAL_LIST_INIT(is_station_but_not_maint_area, list(GLOBAL_PROC_REF(is_station_area), GLOBAL_PROC_REF(is_not_maint_area))) /* Misc Helpers diff --git a/code/_helpers/assets.dm b/code/_helpers/assets.dm new file mode 100644 index 0000000000000..a288f7727288b --- /dev/null +++ b/code/_helpers/assets.dm @@ -0,0 +1,5 @@ +/// Generate a filename for this asset +/// The same asset will always lead to the same asset name +/// (Generated names do not include file extention.) +/proc/generate_asset_name(file) + return "asset.[md5(fcopy_rsc(file))]" diff --git a/code/_helpers/atom_movables.dm b/code/_helpers/atom_movables.dm index 86aafafae9891..7b347f5a29962 100644 --- a/code/_helpers/atom_movables.dm +++ b/code/_helpers/atom_movables.dm @@ -1,4 +1,5 @@ /proc/get_turf_pixel(atom/movable/AM) + RETURN_TYPE(/turf) if(!istype(AM)) return @@ -29,19 +30,25 @@ // Walks up the loc tree until it finds a holder of the given holder_type /proc/get_holder_of_type(atom/A, holder_type) + RETURN_TYPE(/atom) if(!istype(A)) return for(A, A && !istype(A, holder_type), A=A.loc); return A -/atom/movable/proc/throw_at_random(include_own_turf, maxrange, speed) - var/list/turfs = trange(maxrange, src) - if(!maxrange) +/atom/movable/proc/throw_at_random(include_own_turf = FALSE, maxrange = 1, speed) + if(maxrange < 0) + stack_trace("Negative `maxrange` passed") maxrange = 1 - if(!include_own_turf) - turfs -= get_turf(src) - if (length(turfs)) - throw_at(pick(turfs), maxrange, speed) + var/turf/center = get_turf(src) + if(!center) + return + + var/list/turfs = include_own_turf ? RANGE_TURFS(center, maxrange) : ORANGE_TURFS(center, maxrange) + if(length(turfs)) + return + + throw_at(pick(turfs), maxrange, speed) /atom/movable/proc/do_simple_ranged_interaction(mob/user) return FALSE @@ -52,6 +59,7 @@ do_simple_ranged_interaction() /proc/get_atom_closest_to_atom(atom/a, list/possibilities) + RETURN_TYPE(/atom) if(!possibilities || !length(possibilities)) return null var/closest_distance = get_dist(a, possibilities[1]) diff --git a/code/_helpers/bicon_procs.dm b/code/_helpers/bicon_procs.dm new file mode 100644 index 0000000000000..121b247265d81 --- /dev/null +++ b/code/_helpers/bicon_procs.dm @@ -0,0 +1,181 @@ +GLOBAL_DATUM_INIT(is_http_protocol, /regex, regex("^https?://")) + +/// Gets a dummy savefile for usage in icon generation. +/// Savefiles generated from this proc will be empty. +/proc/get_dummy_savefile(from_failure = FALSE) + var/static/next_id = 0 + if(next_id++ > 9) + next_id = 0 + var/savefile_path = "data/temp/dummy-save-[next_id].sav" + try + if(fexists(savefile_path)) + fdel(savefile_path) + return new /savefile(savefile_path) + catch(var/exception/error) + // if we failed to create a dummy once, try again; maybe someone slept somewhere they shouldnt have + if(from_failure) // this *is* the retry, something fucked up + CRASH("get_dummy_savefile failed to create a dummy savefile: '[error]'") + return get_dummy_savefile(from_failure = TRUE) + +/** + * Converts an icon to base64. Operates by putting the icon in the iconCache savefile, + * exporting it as text, and then parsing the base64 from that. + * (This relies on byond automatically storing icons in savefiles as base64) + */ +/proc/icon2base64(icon/icon) + if (!isicon(icon)) + return FALSE + var/savefile/dummySave = get_dummy_savefile() + to_save(dummySave["dummy"], icon) + var/iconData = dummySave.ExportText("dummy") + var/list/partial = splittext(iconData, "{") + return replacetext(copytext_char(partial[2], 3, -5), "\n", "") //if cleanup fails we want to still return the correct base64 + +/proc/register_icon_asset(icon/thing, icon_state, dir, frame = 1, moving = FALSE, realsize = FALSE, class = null) + if (!thing) + return null + + if (!isicon(thing)) + if (isfile(thing)) + var/name = "[generate_asset_name(thing)].png" + SSassets.transport.register_asset(name, thing) + return name + + if (ispath(thing)) + var/atom/A = thing + if (isnull(dir)) + dir = SOUTH + if (isnull(icon_state)) + icon_state = initial(A.icon_state) + thing = initial(A.icon) + + else + var/atom/A = thing + if (isnull(dir)) + dir = A.dir + if (isnull(icon_state)) + icon_state = A.icon_state + thing = A.icon + if (ishuman(thing)) // Shitty workaround for a BYOND issue. + var/icon/temp = thing + thing = icon() + thing.Insert(temp, dir = SOUTH) + dir = SOUTH + else + if (isnull(dir)) + dir = SOUTH + if (isnull(icon_state)) + icon_state = "" + + thing = icon(thing, icon_state, dir, frame, moving) + + var/key = "[generate_asset_name(thing)].png" + SSassets.transport.register_asset(key, thing) + return key + +/proc/icon2html(icon/thing, target, icon_state, dir, frame = 1, moving = FALSE, realsize = FALSE, class = null) + if (!thing || !target) + return + + var/list/targets + if(target == world) + targets = GLOB.clients + + else if (islist(target)) + targets = target + + else + targets = list(target) + + if(!length(targets)) + return + + if (!isicon(thing)) + if (isfile(thing)) + var/name = "[generate_asset_name(thing)].png" + SSassets.transport.register_asset(name, thing) + for (var/thing2 in targets) + SSassets.transport.send_assets(thing2, name) + return "" + + if (ispath(thing)) + var/atom/A = thing + if (isnull(dir)) + dir = SOUTH + if (isnull(icon_state)) + icon_state = initial(A.icon_state) + thing = initial(A.icon) + + else + var/atom/A = thing + if (isnull(dir)) + dir = A.dir + if (isnull(icon_state)) + icon_state = A.icon_state + thing = A.icon + if (ishuman(thing)) // Shitty workaround for a BYOND issue. + var/icon/temp = thing + thing = icon() + thing.Insert(temp, dir = SOUTH) + dir = SOUTH + else + if (isnull(dir)) + dir = SOUTH + if (isnull(icon_state)) + icon_state = "" + + thing = icon(thing, icon_state, dir, frame, moving) + + var/key = "[generate_asset_name(thing)].png" + SSassets.transport.register_asset(key, thing) + for (var/thing2 in targets) + SSassets.transport.send_assets(thing2, key) + + if(realsize) + return "" + + return "" + +/proc/icon2base64html(thing) + if (!thing) + return + + var/static/list/bicon_cache = list() + if (isicon(thing)) + var/icon/I = thing + var/icon_base64 = icon2base64(I) + + if (I.Height() > world.icon_size || I.Width() > world.icon_size) + var/icon_md5 = md5(icon_base64) + icon_base64 = bicon_cache[icon_md5] + if (!icon_base64) // Doesn't exist yet, make it. + bicon_cache[icon_md5] = icon_base64 = icon2base64(I) + + return "" + + // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. + var/atom/A = thing + var/key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]" + + + if (!bicon_cache[key]) // Doesn't exist, make it. + var/icon/I = icon(A.icon, A.icon_state, SOUTH, 1) + if (ishuman(thing)) // Shitty workaround for a BYOND issue. + var/icon/temp = I + I = icon() + I.Insert(temp, dir = SOUTH) + + bicon_cache[key] = icon2base64(I, key) + + return "" + +// Costlier version of icon2html() that uses getFlatIcon() to account for overlays, underlays, etc. Use with extreme moderation, ESPECIALLY on mobs. +/proc/costly_icon2html(thing, target) + if (!thing) + return + + if (isicon(thing)) + return icon2html(thing, target) + + var/icon/I = getFlatIcon(thing) + return icon2html(I, target) diff --git a/code/_helpers/bubble_effect.dm b/code/_helpers/bubble_effect.dm new file mode 100644 index 0000000000000..d4f87ef746a53 --- /dev/null +++ b/code/_helpers/bubble_effect.dm @@ -0,0 +1,65 @@ +/datum/bubble_effect + var/center_x + var/center_y + var/z + var/radius + var/soft_radius + var/delta + var/list/seen + var/list/cache + + +/datum/bubble_effect/Destroy() + LAZYCLEARLIST(seen) + LAZYCLEARLIST(cache) + return ..() + + +/datum/bubble_effect/New(center_x, center_y, z, initial_radius, delta, datum/bubble_effect/parent) + src.center_x = center_x + src.center_y = center_y + src.z = z + soft_radius = initial_radius + src.delta = delta + if (istype(parent)) + if (!parent.cache) + parent.cache = list() + cache = parent.cache + seen = parent.seen + else + seen = list() + + +/datum/bubble_effect/proc/Tick() + soft_radius += delta + var/new_radius = round(soft_radius, 1) + if (new_radius == radius) + return radius + radius = new_radius + var/list/coords + if (cache && length(cache)) + coords = cache["[radius]"] + if (!coords) + coords = get_circle_coordinates(radius, center_x, center_y) - seen + if (cache) + cache["[radius]"] = coords + seen += coords + var/maxx = world.maxx + var/maxy = world.maxy + for (var/entry in coords) + var/x = entry & 0xFFF + var/y = SHIFTR(entry, 12) + if (x < 1 || x > maxx) + continue + if (y < 1 || y > maxy) + continue + var/turf/turf = locate(x, y, z) + if (!turf) + continue + if (TurfEffect(turf)) + return radius + return radius + + +/datum/bubble_effect/proc/TurfEffect(turf/turf) + return diff --git a/code/_helpers/client.dm b/code/_helpers/client.dm index 8b855112f7f4e..bdb13dd2559a4 100644 --- a/code/_helpers/client.dm +++ b/code/_helpers/client.dm @@ -17,6 +17,7 @@ /// Get the client associated with ckey text if it is currently connected /proc/ckey2client(text) + RETURN_TYPE(/client) if (valid_ckey(text)) for (var/client/C as anything in GLOB.clients) if (C.ckey == text) @@ -25,6 +26,7 @@ /// Get the client associated with key text if it is currently connected /proc/key2client(text) + RETURN_TYPE(/client) if (valid_key(text)) for (var/client/C as anything in GLOB.clients) if (C.key == text) @@ -33,6 +35,7 @@ /// Null, or a client if thing is a client, a mob with a client, a connected ckey, or null /proc/resolve_client(client/thing) + RETURN_TYPE(/client) if (istype(thing)) return thing if (!thing) @@ -45,6 +48,7 @@ /// Null or a client from the list of connected clients, chosen by actor if actor is valid /proc/select_client(client/actor, message = "Connected clients:", title = "Select Client") + RETURN_TYPE(/client) actor = resolve_client(actor) if (!actor) return diff --git a/code/_helpers/cmp.dm b/code/_helpers/cmp.dm index dff6cc114af34..92ee7224d820e 100644 --- a/code/_helpers/cmp.dm +++ b/code/_helpers/cmp.dm @@ -49,21 +49,16 @@ /proc/cmp_text_dsc(a,b) return sorttext(a, b) -/proc/cmp_qdel_item_time(datum/qdel_item/A, datum/qdel_item/B) - . = B.hard_delete_time - A.hard_delete_time - if (!.) - . = B.destroy_time - A.destroy_time - if (!.) - . = B.failures - A.failures - if (!.) - . = B.qdels - A.qdels +/proc/cmp_embed_text_asc(a,b) + if(isdatum(a)) + a = REF(a) + if(isdatum(b)) + b = REF(b) + return sorttext("[b]", "[a]") /proc/cmp_ruincost_priority(datum/map_template/ruin/A, datum/map_template/ruin/B) return initial(A.spawn_cost) - initial(B.spawn_cost) -/proc/cmp_timer(datum/timedevent/a, datum/timedevent/b) - return a.timeToRun - b.timeToRun - /proc/cmp_clientcolor_priority(datum/client_color/A, datum/client_color/B) return B.priority - A.priority diff --git a/code/_helpers/cyrillic_keys.dm b/code/_helpers/cyrillic_keys.dm new file mode 100644 index 0000000000000..2b1b9809e89c3 --- /dev/null +++ b/code/_helpers/cyrillic_keys.dm @@ -0,0 +1,14 @@ +/proc/convert_ru_symbols_to_en(text) + for(var/i in 1 to length(text)) + var/letter = lowertext(copytext_char(text, i, i + 1)) + var/ru_letter = GLOB.ru_symbol_to_en[letter] + if(ru_letter) + . += ru_letter + continue + . += letter + +GLOBAL_LIST_INIT(ru_symbol_to_en, list( + "й" = "i", "ц" = "c", "у" = "u", "к" = "k", "е" = "e", "н" = "n", "г" = "g", "ш" = "sh", "щ" = "sh", "з" = "z", "х" = "h", "ъ" = "", + "ф" = "f", "ы" = "y", "в" = "v", "а" = "a", "п" = "p", "р" = "r", "о" = "o", "л" = "l", "д" = "d", "ж" = "zh", "э" = "e", + "я" = "ja", "ч" = "ch", "с" = "s", "м" = "m", "и" = "i", "т" = "t", "ь" = "", "б" = "b", "ю" = "iu", "ё" = "e" +)) diff --git a/code/_helpers/emissives.dm b/code/_helpers/emissives.dm new file mode 100644 index 0000000000000..66664d1881063 --- /dev/null +++ b/code/_helpers/emissives.dm @@ -0,0 +1,42 @@ +/// Produces a mutable appearance glued to the [EMISSIVE_PLANE] dyed to be the [EMISSIVE_COLOR]. +/proc/emissive_appearance(icon, icon_state = "", layer = FLOAT_LAYER, alpha = 255, appearance_flags = EMPTY_BITFIELD) + var/mutable_appearance/appearance = mutable_appearance(icon = icon, icon_state = icon_state, layer = layer, plane = EMISSIVE_PLANE, flags = appearance_flags|EMISSIVE_APPEARANCE_FLAGS) + appearance.alpha = alpha + if(alpha == 255) + appearance.color = GLOB.emissive_color + else + var/alpha_ratio = alpha/255 + appearance.color = _EMISSIVE_COLOR(alpha_ratio) + return appearance + +/// Produces a mutable appearance glued to the [EMISSIVE_PLANE] dyed to be the [EM_BLOCK_COLOR]. +/proc/emissive_blocker(icon, icon_state = "", layer = FLOAT_LAYER, alpha = 255, appearance_flags = EMPTY_BITFIELD, source = null) + var/mutable_appearance/appearance = mutable_appearance(icon = icon, icon_state = icon_state, layer = layer, plane = EMISSIVE_PLANE, flags = appearance_flags|EMISSIVE_APPEARANCE_FLAGS) + appearance.alpha = alpha + if(alpha == 255) + appearance.color = GLOB.em_block_color + else + var/alpha_ratio = alpha/255 + appearance.color = _EM_BLOCK_COLOR(alpha_ratio) + + if(source) + appearance.render_source = source + // Since only render_target handles transform we don't get any applied transform "stacking" + appearance.appearance_flags |= RESET_TRANSFORM + + return appearance + +// Designed to be a faster version of the above, for most use-cases +/proc/fast_emissive_blocker(atom/make_blocker) + var/mutable_appearance/blocker = new() + blocker.icon = make_blocker.icon + blocker.icon_state = make_blocker.icon_state + blocker.appearance_flags |= make_blocker.appearance_flags | EMISSIVE_APPEARANCE_FLAGS + blocker.dir = make_blocker.dir + if(make_blocker.alpha == 255) + blocker.color = GLOB.em_block_color + else + var/alpha_ratio = make_blocker.alpha/255 + blocker.color = _EM_BLOCK_COLOR(alpha_ratio) + blocker.plane = EMISSIVE_PLANE + return blocker diff --git a/code/_helpers/functional.dm b/code/_helpers/functional.dm index f51ed4187f751..8f81680e382fa 100644 --- a/code/_helpers/functional.dm +++ b/code/_helpers/functional.dm @@ -1,14 +1,15 @@ #define PREPARE_INPUT \ - predicates = istype(predicates) ? predicates : list(predicates);\ - input = istype(input) ? input : list(input); + predicates = islist(predicates) ? predicates : list(predicates);\ + input = islist(input) ? input : list(input); #define PREPARE_ARGUMENTS \ var/extra_arguments = predicates[predicate];\ - var/list/predicate_input = input;\ + var/list/predicate_input = input.Copy();\ if(LAZYLEN(extra_arguments)) {\ - predicate_input = predicate_input.Copy();\ predicate_input += list(extra_arguments);\ - } + } else if(extra_arguments) {\ + predicate_input += extra_arguments;\ + }\ /proc/all_predicates_true(list/input, list/predicates) PREPARE_INPUT @@ -42,6 +43,11 @@ if(!. && feedback_receiver) to_chat(feedback_receiver, SPAN_WARNING("Value must be a numeral.")) +/proc/is_int_predicate(value, feedback_receiver) + . = value == round(value) + if (!. && feedback_receiver) + to_chat(feedback_receiver, SPAN_WARNING("Value must be a whole number.")) + /proc/is_non_zero_predicate(value, feedback_receiver) . = value != 0 if (!. && feedback_receiver) @@ -80,6 +86,7 @@ /proc/where(list/list_to_filter, list/predicates, list/extra_predicate_input) + RETURN_TYPE(/list) . = list() for(var/entry in list_to_filter) var/predicate_input @@ -92,6 +99,7 @@ . += entry /proc/map(list/list_to_map, map_proc) + RETURN_TYPE(/list) . = list() for(var/entry in list_to_map) . += call(map_proc)(entry) diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index 921d90f53a928..aa77bc1ceaa2b 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -1,5 +1,9 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 +#define IS_SUBTYPE(child_type, parent_type) (child_type != parent_type && istype(child_type, parent_type)) + +#define IS_SUBPATH(child_path, parent_path) (child_path != parent_path && ispath(child_path, parent_path)) + /proc/is_on_same_plane_or_station(z1, z2) if(z1 == z2) return 1 @@ -26,19 +30,18 @@ return TRUE return FALSE -/proc/get_area(O) - var/turf/loc = get_turf(O) - if(loc) - var/area/res = loc.loc - .= res - /proc/get_area_name(N) //get area by its name - for(var/area/A in world) + RETURN_TYPE(/area) + for(var/area/A as anything in GLOB.areas) + /// TODO: Cache areas by name, but check out if area names are updated anywhere + /// and add `set_name` for this case, to properly update entry in cache if(A.name == N) return A - return 0 -/proc/get_area_master(const/O) + stack_trace("Area name [N] not found") + +/proc/get_area_master(O) + RETURN_TYPE(/area) var/area/A = get_area(O) if (isarea(A)) return A @@ -52,6 +55,7 @@ // Like view but bypasses luminosity check /proc/hear(range, atom/source) + RETURN_TYPE(/list) var/lum = source.luminosity source.luminosity = 6 @@ -83,9 +87,10 @@ return level in GLOB.using_map.escape_levels /proc/circlerange(center=usr,radius=3) + RETURN_TYPE(/list) var/turf/centerturf = get_turf(center) - var/list/turfs = new/list() + var/list/turfs = list() var/rsq = radius * (radius+0.5) for(var/atom/T in range(radius, centerturf)) @@ -98,9 +103,10 @@ return turfs /proc/circleview(center=usr,radius=3) + RETURN_TYPE(/list) var/turf/centerturf = get_turf(center) - var/list/atoms = new/list() + var/list/atoms = list() var/rsq = radius * (radius+0.5) for(var/atom/A in view(radius, centerturf)) @@ -112,14 +118,6 @@ //turfs += centerturf return atoms -/proc/trange(rad = 0, turf/centre = null) //alternative to range (ONLY processes turfs and thus less intensive) - if(!centre) - return - - var/turf/x1y1 = locate(((centre.x-rad)<1 ? 1 : centre.x-rad),((centre.y-rad)<1 ? 1 : centre.y-rad),centre.z) - var/turf/x2y2 = locate(((centre.x+rad)>world.maxx ? world.maxx : centre.x+rad),((centre.y+rad)>world.maxy ? world.maxy : centre.y+rad),centre.z) - return block(x1y1,x2y2) - /proc/get_dist_euclidian(atom/Loc1 as turf|mob|obj,atom/Loc2 as turf|mob|obj) var/dx = Loc1.x - Loc2.x var/dy = Loc1.y - Loc2.y @@ -128,7 +126,14 @@ return dist +/proc/get_bearing(atom/source, atom/destination) + var/bearing = round(90 - Atan2(destination.x - source.x, destination.y - source.y),5) + if(bearing < 0) + bearing += 360 + return bearing + /proc/circlerangeturfs(center=usr,radius=3) + RETURN_TYPE(/list) var/turf/centerturf = get_turf(center) . = list() if(!centerturf) @@ -136,16 +141,17 @@ var/rsq = radius * (radius+0.5) - for(var/turf/T in range(radius, centerturf)) + for(var/turf/T as anything in RANGE_TURFS(centerturf, radius)) var/dx = T.x - centerturf.x var/dy = T.y - centerturf.y if(dx*dx + dy*dy <= rsq) . += T /proc/circleviewturfs(center=usr,radius=3) //Is there even a diffrence between this proc and circlerangeturfs()? + RETURN_TYPE(/list) var/turf/centerturf = get_turf(center) - var/list/turfs = new/list() + var/list/turfs = list() var/rsq = radius * (radius+0.5) for(var/turf/T in view(radius, centerturf)) @@ -164,6 +170,7 @@ // being unable to hear people due to being in a box within a bag. /proc/recursive_content_check(atom/O, list/L = list(), recursion_limit = 3, client_check = 1, sight_check = 1, include_mobs = 1, include_objects = 1) + RETURN_TYPE(/list) if(!recursion_limit) return L @@ -192,6 +199,7 @@ // Returns a list of mobs and/or objects in range of R from source. Used in radio and say code. /proc/get_mobs_or_objects_in_view(R, atom/source, include_mobs = 1, include_objects = 1) + RETURN_TYPE(/list) var/turf/T = get_turf(source) var/list/hear = list() @@ -217,6 +225,7 @@ /proc/get_mobs_in_radio_ranges(list/obj/item/device/radio/radios) + RETURN_TYPE(/list) set background = 1 @@ -252,7 +261,8 @@ /proc/get_mobs_and_objs_in_view_fast(turf/T, range, list/mobs, list/objs, checkghosts = null) - var/list/hear = dview(range,T,INVISIBILITY_MAXIMUM) + var/list/hear = list() + DVIEW(hear, range, T, INVISIBILITY_MAXIMUM) var/list/hearturfs = list() for(var/atom/movable/AM in hear) @@ -321,6 +331,7 @@ return 0 /proc/get_cardinal_step_away(atom/start, atom/finish) //returns the position of a step from start away from finish, in one of the cardinal directions + RETURN_TYPE(/turf) //returns only NORTH, SOUTH, EAST, or WEST var/dx = finish.x - start.x var/dy = finish.y - start.y @@ -336,6 +347,7 @@ return get_step(start, EAST) /proc/get_mob_by_key(key) + RETURN_TYPE(/mob) for(var/mob/M in SSmobs.mob_list) if(M.ckey == lowertext(key)) return M @@ -344,6 +356,7 @@ // Will return a list of active candidates. It increases the buffer 5 times until it finds a candidate which is active within the buffer. /proc/get_active_candidates(buffer = 1) + RETURN_TYPE(/list) var/list/candidates = list() //List of candidate KEYS to assume control of the new larva ~Carn var/i = 0 @@ -356,6 +369,7 @@ return candidates /proc/ScreenText(obj/O, maptext="", screen_loc="CENTER-7,CENTER-7", maptext_height=480, maptext_width=480) + RETURN_TYPE(/obj/screen) if(!isobj(O)) O = new /obj/screen/text() O.maptext = maptext O.maptext_height = maptext_height @@ -380,6 +394,24 @@ for(var/client/C in show_to) C.images -= I +/// Adds an image to a client's `.images`. Useful as a callback. +/proc/add_image_to_client(image/image_to_remove, client/add_to) + add_to?.images += image_to_remove + +/// Like add_image_to_client, but will add the image from a list of clients +/proc/add_image_to_clients(image/image_to_remove, list/show_to) + for(var/client/add_to as anything in show_to) + add_to.images += image_to_remove + +/// Removes an image from a client's `.images`. Useful as a callback. +/proc/remove_image_from_client(image/image_to_remove, client/remove_from) + remove_from?.images -= image_to_remove + +/// Like remove_image_from_client, but will remove the image from a list of clients +/proc/remove_image_from_clients(image/image_to_remove, list/hide_from) + for(var/client/remove_from as anything in hide_from) + remove_from.images -= image_to_remove + /datum/projectile_data var/src_x var/src_y @@ -391,7 +423,7 @@ var/dest_y /datum/projectile_data/New(src_x, src_y, time, distance, \ - var/power_x, var/power_y, var/dest_x, var/dest_y) + power_x, power_y, dest_x, dest_y) src.src_x = src_x src.src_y = src_y src.time = time @@ -402,6 +434,7 @@ src.dest_y = dest_y /proc/projectile_trajectory(src_x, src_y, rotation, angle, power) + RETURN_TYPE(/datum/projectile_data) // returns the destination (Vx,y) that a projectile shot at [src_x], [src_y], with an angle of [angle], // rotated at [rotation] and with the power of [power] @@ -418,23 +451,24 @@ return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y) -/proc/GetRedPart(const/hexa) +/proc/GetRedPart(hexa) return hex2num(copytext(hexa,2,4)) -/proc/GetGreenPart(const/hexa) +/proc/GetGreenPart(hexa) return hex2num(copytext(hexa,4,6)) -/proc/GetBluePart(const/hexa) +/proc/GetBluePart(hexa) return hex2num(copytext(hexa,6,8)) -/proc/GetHexColors(const/hexa) +/proc/GetHexColors(hexa) + RETURN_TYPE(/list) return list( GetRedPart(hexa), GetGreenPart(hexa), GetBluePart(hexa) ) -/proc/MixColors(const/list/colors) +/proc/MixColors(list/colors) var/list/reds = list() var/list/blues = list() var/list/greens = list() @@ -506,7 +540,8 @@ return ((temp + T0C)) /proc/getCardinalAirInfo(turf/loc, list/stats=list("temperature")) - var/list/temps = new/list(4) + RETURN_TYPE(/list) + var/list/temps = new(4) for(var/dir in GLOB.cardinal) var/direction switch(dir) @@ -519,7 +554,7 @@ if(WEST) direction = 4 var/turf/simulated/T=get_turf(get_step(loc,dir)) - var/list/rstats = new /list(length(stats)) + var/list/rstats = new(length(stats)) if(T && istype(T) && T.zone) var/datum/gas_mixture/environment = T.return_air() for(var/i=1;i<=length(stats);i++) @@ -550,6 +585,7 @@ return (length(GLOB.cult.current_antagonists) > spookiness_threshold) /proc/getviewsize(view) + RETURN_TYPE(/list) var/viewX var/viewY if(isnum(view)) @@ -558,6 +594,27 @@ viewY = totalviewrange else var/list/viewrangelist = splittext(view,"x") + if(length(viewrangelist) != 2) + stack_trace("For some reason, client view is not represented as standard values or is null: [view]") + viewX = 19 + viewY = 15 + viewX = text2num(viewrangelist[1]) viewY = text2num(viewrangelist[2]) return list(viewX, viewY) + +/proc/get_view_size_x(view) + var/list/view_size = getviewsize(view) + return view_size[1] + +/proc/get_view_size_y(view) + var/list/view_size = getviewsize(view) + return view_size[2] + +/proc/get_lesser_view_size_component(view) + var/list/view_size = getviewsize(view) + return min(view_size[1], view_size[2]) + +/proc/get_greater_view_size_component(view) + var/list/view_size = getviewsize(view) + return max(view_size[1], view_size[2]) diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 625c979902a13..51d7c48274596 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -19,9 +19,10 @@ var/global/list/landmarks_list = list() //list of all landmarks created var/global/list/all_species[0] var/global/list/datum/language/all_languages = list() var/global/list/language_keys[0] // Table of say codes for all languages -var/global/list/playable_species = list(SPECIES_HUMAN) // A list of ALL playable species, whitelisted, latejoin or otherwise. +var/global/list/playable_species = list() // A list of ALL playable species, whitelisted, latejoin or otherwise. +GLOBAL_LIST_EMPTY(all_particles) // Grabs var/global/list/all_grabstates[0] @@ -81,11 +82,51 @@ var/global/list/string_slot_flags = list( "holster" = SLOT_HOLSTER ) +GLOBAL_LIST_EMPTY(hotkey_keybinding_list_by_key) +GLOBAL_LIST_EMPTY(keybindings_by_name) + +/// This is a mapping from JS keys to Byond - ref: https://keycode.info/ +GLOBAL_LIST_INIT(keybindings_map, list( + "UP" = "North", + "RIGHT" = "East", + "DOWN" = "South", + "LEFT" = "West", + "INSERT" = "Insert", + "HOME" = "Northwest", + "PAGEUP" = "Northeast", + "DEL" = "Delete", + "END" = "Southwest", + "PAGEDOWN" = "Southeast", + "SPACEBAR" = "Space", + "ALT" = "Alt", + "SHIFT" = "Shift", + "CONTROL" = "Ctrl", + "DIVIDE" = "Divide", + "MULTIPLY" = "Multiply", + "ADD" = "Add", + "SUBTRACT" = "Subtract", + "DECIMAL" = "Decimal", + "CLEAR" = "Center" +)) + +/// Without alt, shift, ctrl and etc because its not necessary +GLOBAL_LIST_INIT(keybindings_map_reverse, list( + "North" = "Up", + "East" = "Right", + "South" = "Down", + "West" = "Left", + "Northwest" = "Home", + "Northeast" = "PageUp", + "Southwest" = "End", + "Southeast" = "PageDown", +)) + ////////////////////////// /////Initial Building///// ////////////////////////// /proc/get_mannequin(ckey) + RETURN_TYPE(/mob/living/carbon/human/dummy/mannequin) if (!GLOB.mannequins[ckey]) GLOB.mannequins[ckey] = new /mob/living/carbon/human/dummy/mannequin return GLOB.mannequins[ckey] @@ -98,7 +139,7 @@ var/global/list/string_slot_flags = list( paths = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair for(var/path in paths) var/datum/sprite_accessory/hair/H = path - if (!initial(H.name)) + if (is_abstract(H) || !initial(H.name)) continue H = new path() GLOB.hair_styles_list[H.name] = H @@ -107,7 +148,7 @@ var/global/list/string_slot_flags = list( paths = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair for(var/path in paths) var/datum/sprite_accessory/facial_hair/H = path - if (!initial(H.name)) + if (is_abstract(H) || !initial(H.name)) continue H = new path() GLOB.facial_hair_styles_list[H.name] = H @@ -164,13 +205,41 @@ var/global/list/string_slot_flags = list( var/datum/grab/G = all_grabstates[grabstate_name] G.refresh_updown() - return 1 + paths = typesof(/particles) + for (var/path in paths) + var/particles/P = new path() + GLOB.all_particles[P.name] = P + + for(var/datum/tech/tech_type as anything in subtypesof(/datum/tech)) + GLOB.tech_id_to_name[initial(tech_type.id)] = initial(tech_type.name) + + // Setup world topic handlers + for(var/topic_handler_type in subtypesof(/datum/world_topic_handler)) + var/datum/world_topic_handler/wth = new topic_handler_type() + if(!wth.topic_key) + stack_trace("[wth.type] has no topic key!") + continue + if(GLOB.world_topic_handlers[wth.topic_key]) + stack_trace("[wth.type] has the same topic key as [GLOB.world_topic_handlers[wth.topic_key]]! ([wth.topic_key])") + continue + GLOB.world_topic_handlers[wth.topic_key] = topic_handler_type + + for(var/datum/keybinding/keybinding as anything in subtypesof(/datum/keybinding)) + if(!initial(keybinding.name)) + continue + var/datum/keybinding/instance = new keybinding + GLOB.keybindings_by_name[instance.name] = instance + if(length(instance.hotkey_keys)) + for(var/bound_key in instance.hotkey_keys) + GLOB.hotkey_keybinding_list_by_key[bound_key] += list(instance.name) + + return TRUE //*** params cache var/global/list/paramslist_cache = list() -#define cached_key_number_decode(key_number_data) cached_params_decode(key_number_data, /proc/key_number_decode) -#define cached_number_list_decode(number_list_data) cached_params_decode(number_list_data, /proc/number_list_decode) +#define cached_key_number_decode(key_number_data) cached_params_decode(key_number_data, GLOBAL_PROC_REF(key_number_decode)) +#define cached_number_list_decode(number_list_data) cached_params_decode(number_list_data, GLOBAL_PROC_REF(number_list_decode)) /proc/cached_params_decode(params_data, decode_proc) . = paramslist_cache[params_data] @@ -179,12 +248,14 @@ var/global/list/paramslist_cache = list() paramslist_cache[params_data] = . /proc/key_number_decode(key_number_data) + RETURN_TYPE(/list) var/list/L = params2list(key_number_data) for(var/key in L) L[key] = text2num(L[key]) return L /proc/number_list_decode(number_list_data) + RETURN_TYPE(/list) var/list/L = params2list(number_list_data) for(var/i in 1 to length(L)) L[i] = text2num(L[i]) diff --git a/code/_helpers/icons.dm b/code/_helpers/icons.dm index 275426305e50b..e4ee6fee53928 100644 --- a/code/_helpers/icons.dm +++ b/code/_helpers/icons.dm @@ -1,222 +1,5 @@ -/* -IconProcs README - -A BYOND library for manipulating icons and colors - -by Lummox JR - -version 1.0 - -The IconProcs library was made to make a lot of common icon operations much easier. BYOND's icon manipulation -routines are very capable but some of the advanced capabilities like using alpha transparency can be unintuitive to beginners. - -CHANGING ICONS - -Several new procs have been added to the /icon datum to simplify working with icons. To use them, -remember you first need to setup an /icon var like so: - - var/icon/my_icon = new('iconfile.dmi') - -icon/ChangeOpacity(amount = 1) - A very common operation in DM is to try to make an icon more or less transparent. Making an icon more - transparent is usually much easier than making it less so, however. This proc basically is a frontend - for MapColors() which can change opacity any way you like, in much the same way that SetIntensity() - can make an icon lighter or darker. If amount is 0.5, the opacity of the icon will be cut in half. - If amount is 2, opacity is doubled and anything more than half-opaque will become fully opaque. -icon/GrayScale() - Converts the icon to grayscale instead of a fully colored icon. Alpha values are left intact. -icon/ColorTone(tone) - Similar to GrayScale(), this proc converts the icon to a range of black -> tone -> white, where tone is an - RGB color (its alpha is ignored). This can be used to create a sepia tone or similar effect. - See also the global ColorTone() proc. -icon/MinColors(icon) - The icon is blended with a second icon where the minimum of each RGB pixel is the result. - Transparency may increase, as if the icons were blended with ICON_ADD. You may supply a color in place of an icon. -icon/MaxColors(icon) - The icon is blended with a second icon where the maximum of each RGB pixel is the result. - Opacity may increase, as if the icons were blended with ICON_OR. You may supply a color in place of an icon. -icon/Opaque(background = "#000000") - All alpha values are set to 255 throughout the icon. Transparent pixels become black, or whatever background color you specify. -icon/BecomeAlphaMask() - You can convert a simple grayscale icon into an alpha mask to use with other icons very easily with this proc. - The black parts become transparent, the white parts stay white, and anything in between becomes a translucent shade of white. -icon/AddAlphaMask(mask) - The alpha values of the mask icon will be blended with the current icon. Anywhere the mask is opaque, - the current icon is untouched. Anywhere the mask is transparent, the current icon becomes transparent. - Where the mask is translucent, the current icon becomes more transparent. -icon/UseAlphaMask(mask, mode) - Sometimes you may want to take the alpha values from one icon and use them on a different icon. - This proc will do that. Just supply the icon whose alpha mask you want to use, and src will change - so it has the same colors as before but uses the mask for opacity. - -COLOR MANAGEMENT AND HSV - -RGB isn't the only way to represent color. Sometimes it's more useful to work with a model called HSV, which stands for hue, saturation, and value. - - * The hue of a color describes where it is along the color wheel. It goes from red to yellow to green to - cyan to blue to magenta and back to red. - * The saturation of a color is how much color is in it. A color with low saturation will be more gray, - and with no saturation at all it is a shade of gray. - * The value of a color determines how bright it is. A high-value color is vivid, moderate value is dark, - and no value at all is black. - -Just as BYOND uses "#rrggbb" to represent RGB values, a similar format is used for HSV: "#hhhssvv". The hue is three -hex digits because it ranges from 0 to 0x5FF. - - * 0 to 0xFF - red to yellow - * 0x100 to 0x1FF - yellow to green - * 0x200 to 0x2FF - green to cyan - * 0x300 to 0x3FF - cyan to blue - * 0x400 to 0x4FF - blue to magenta - * 0x500 to 0x5FF - magenta to red - -Knowing this, you can figure out that red is "#000ffff" in HSV format, which is hue 0 (red), saturation 255 (as colorful as possible), -value 255 (as bright as possible). Green is "#200ffff" and blue is "#400ffff". - -More than one HSV color can match the same RGB color. - -Here are some procs you can use for color management: - -ReadRGB(rgb) - Takes an RGB string like "#ffaa55" and converts it to a list such as list(255,170,85). If an RGBA format is used - that includes alpha, the list will have a fourth item for the alpha value. -hsv(hue, sat, val, apha) - Counterpart to rgb(), this takes the values you input and converts them to a string in "#hhhssvv" or "#hhhssvvaa" - format. Alpha is not included in the result if null. -ReadHSV(rgb) - Takes an HSV string like "#100ff80" and converts it to a list such as list(256,255,128). If an HSVA format is used that - includes alpha, the list will have a fourth item for the alpha value. -RGBtoHSV(rgb) - Takes an RGB or RGBA string like "#ffaa55" and converts it into an HSV or HSVA color such as "#080aaff". -HSVtoRGB(hsv) - Takes an HSV or HSVA string like "#080aaff" and converts it into an RGB or RGBA color such as "#ff55aa". -BlendRGB(rgb1, rgb2, amount) - Blends between two RGB or RGBA colors using regular RGB blending. If amount is 0, the first color is the result; - if 1, the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. - The returned value is an RGB or RGBA color. -BlendHSV(hsv1, hsv2, amount) - Blends between two HSV or HSVA colors using HSV blending, which tends to produce nicer results than regular RGB - blending because the brightness of the color is left intact. If amount is 0, the first color is the result; if 1, - the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. - The returned value is an HSV or HSVA color. -BlendRGBasHSV(rgb1, rgb2, amount) - Like BlendHSV(), but the colors used and the return value are RGB or RGBA colors. The blending is done in HSV form. -HueToAngle(hue) - Converts a hue to an angle range of 0 to 360. Angle 0 is red, 120 is green, and 240 is blue. -AngleToHue(hue) - Converts an angle to a hue in the valid range. -RotateHue(hsv, angle) - Takes an HSV or HSVA value and rotates the hue forward through red, green, and blue by an angle from 0 to 360. - (Rotating red by 60 degrees produces yellow.) The result is another HSV or HSVA color with the same saturation and value - as the original, but a different hue. -GrayScale(rgb) - Takes an RGB or RGBA color and converts it to grayscale. Returns an RGB or RGBA string. -ColorTone(rgb, tone) - Similar to GrayScale(), this proc converts an RGB or RGBA color to a range of black -> tone -> white instead of - using strict shades of gray. The tone value is an RGB color; any alpha value is ignored. -*/ - -/* -Get Flat Icon DEMO by DarkCampainger - -This is a test for the get flat icon proc, modified approprietly for icons and their states. -Probably not a good idea to run this unless you want to see how the proc works in detail. -mob - icon = 'old_or_unused.dmi' - icon_state = "green" - - Login() - // Testing image underlays - underlays += image(icon='old_or_unused.dmi',icon_state="red") - underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = 32) - underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = -32) - - // Testing image overlays - overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = -32) - overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = 32) - overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = -32, pixel_y = -32) - - // Testing icon file overlays (defaults to mob's state) - overlays += '_flat_demoIcons2.dmi' - - // Testing icon_state overlays (defaults to mob's icon) - overlays += "white" - - // Testing dynamic icon overlays - var/icon/I = icon('old_or_unused.dmi', icon_state="aqua") - I.Shift(NORTH,16,1) - overlays+=I - - // Testing dynamic image overlays - I=image(icon=I,pixel_x = -32, pixel_y = 32) - overlays+=I - - // Testing object types (and layers) - overlays+=/obj/effect/overlayTest - - loc = locate (10,10,1) - verb - Browse_Icon() - set name = "1. Browse Icon" - // Give it a name for the cache - var/iconName = "[ckey(src.name)]_flattened.dmi" - // Send the icon to src's local cache - send_rsc(src, getFlatIcon(src), iconName) - // Display the icon in their browser - show_browser(src, "

", null) - - Output_Icon() - set name = "2. Output Icon" - to_chat(src, "Icon is: \icon[getFlatIcon(src)]") - - Label_Icon() - set name = "3. Label Icon" - // Give it a name for the cache - var/iconName = "[ckey(src.name)]_flattened.dmi" - // Copy the file to the rsc manually - var/icon/I = fcopy_rsc(getFlatIcon(src)) - // Send the icon to src's local cache - send_rsc(src, I, iconName) - // Update the label to show it - winset(src,"imageLabel","image='\ref[I]'"); - - Add_Overlay() - set name = "4. Add Overlay" - overlays += image(icon='old_or_unused.dmi',icon_state="yellow",pixel_x = rand(-64,32), pixel_y = rand(-64,32)) - - Stress_Test() - set name = "5. Stress Test" - for(var/i = 0 to 1000) - // The third parameter forces it to generate a new one, even if it's already cached - getFlatIcon(src,0,2) - if(prob(5)) - Add_Overlay() - Browse_Icon() - - Cache_Test() - set name = "6. Cache Test" - for(var/i = 0 to 1000) - getFlatIcon(src) - Browse_Icon() - -/obj/effect/overlayTest - icon = 'old_or_unused.dmi' - icon_state = "blue" - pixel_x = -24 - pixel_y = 24 - plane = ABOVE_TURF_PLANE - layer = HOLOMAP_LAYER - -world - view = "7x7" - maxx = 20 - maxy = 20 - maxz = 1 -*/ - -#define TO_HEX_DIGIT(n) ascii2text((n&15) + ((n&15)<10 ? 48 : 87)) - /icon/proc/MakeLying() + RETURN_TYPE(/icon) var/icon/I = new(src,dir=SOUTH) I.BecomeLying() return I @@ -318,6 +101,7 @@ world */ /proc/ReadRGB(rgb) + RETURN_TYPE(/list) if(!rgb) return // interpret the HSV or HSVA value @@ -368,6 +152,7 @@ world if(usealpha) . += alpha /proc/ReadHSV(hsv) + RETURN_TYPE(/list) if(!hsv) return // interpret the HSV or HSVA value @@ -634,7 +419,8 @@ as a single icon. Useful for when you want to manipulate an icon via the above a The _flatIcons list is a cache for generated icon files. */ -/proc/getFlatIcon(image/A, defdir=2, deficon=null, defstate="", defblend=BLEND_DEFAULT, always_use_defdir = 0) +/proc/getFlatIcon(image/A, defdir=2, deficon=null, defstate="", defblend=BLEND_DEFAULT, always_use_defdir = FALSE) + RETURN_TYPE(/icon) // We start with a blank canvas, otherwise some icon procs crash silently var/icon/flat = icon('icons/effects/effects.dmi', "icon_state"="nothing") // Final flattened icon if(!A) @@ -658,8 +444,8 @@ The _flatIcons list is a cache for generated icon files. else curstate = defstate - if(!noIcon && !(curstate in icon_states(curicon))) - if("" in icon_states(curicon)) + if(!noIcon && !ICON_HAS_STATE(curicon, curstate)) + if(ICON_HAS_STATE(curicon, "")) curstate = "" else noIcon = TRUE // Do not render this object. @@ -681,7 +467,7 @@ The _flatIcons list is a cache for generated icon files. var/image/copy // Add the atom's icon itself, without pixel_x/y offsets. if(!noIcon) - copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=curdir) + copy = image(icon(curicon, curstate, curdir, 1), layer=A.layer) copy.color = A.color copy.alpha = A.alpha copy.blend_mode = curblend @@ -740,36 +526,24 @@ The _flatIcons list is a cache for generated icon files. for(var/I in layers) + if(I:plane == EMISSIVE_PLANE) //Just replace this with whatever it is TG is doing these days sometime. Getflaticon breaks emissives + continue + + if(I:plane == LIGHTING_EXPOSURE_PLANE) // SS220 Bloom-Lighting + continue + if(I:alpha == 0) continue if(I == copy) // 'I' is an /image based on the object being flattened. curblend = BLEND_OVERLAY add = icon(I:icon, I:icon_state, I:dir) - // This checks for a silent failure mode of the icon routine. If the requested dir - // doesn't exist in this icon state it returns a 32x32 icon with 0 alpha. - if (I:dir != SOUTH && add.Width() == 32 && add.Height() == 32) - // Check every pixel for blank (computationally expensive, but the process is limited - // by the amount of film on the station, only happens when we hit something that's - // turned, and bails at the very first pixel it sees. - var/blankpixel; - for(var/y;y<=32;y++) - for(var/x;x<32;x++) - blankpixel = isnull(add.GetPixel(x,y)) - if(!blankpixel) - break - if(!blankpixel) - break - // If we ALWAYS returned a null (which happens when GetPixel encounters something with alpha 0) - if (blankpixel) - // Pull the default direction. - add = icon(I:icon, I:icon_state) else // 'I' is an appearance object. if(istype(A,/obj/machinery/atmospherics) && (I in A.underlays)) var/image/Im = I - add = getFlatIcon(new/image(I), Im.dir, curicon, curstate, curblend, 1) + add = getFlatIcon(image(I), Im.dir, curicon, curstate, curblend, TRUE) else - add = getFlatIcon(new/image(I), curdir, curicon, curstate, curblend, always_use_defdir) + add = getFlatIcon(image(I), curdir, curicon, curstate, curblend, always_use_defdir) // Find the new dimensions of the flat icon to fit the added overlay addX1 = min(flatX1, I:pixel_x+1) @@ -800,6 +574,7 @@ The _flatIcons list is a cache for generated icon files. return icon(flat, "", SOUTH) /proc/getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N + RETURN_TYPE(/icon) var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A. for(var/I in A.overlays)//For every image in overlays. var/image/I will not work, don't try it. if(I:layer>A.layer) continue//If layer is greater than what we need, skip it. @@ -810,7 +585,7 @@ The _flatIcons list is a cache for generated icon files. /mob/proc/AddCamoOverlay(atom/A)//A is the atom which we are using as the overlay. var/icon/opacity_icon = new(A.icon, A.icon_state)//Don't really care for overlays/underlays. - //Now we need to culculate overlays+underlays and add them together to form an image for a mask. + //Now we need to culculate overlays and underlays and add them together to form an image for a mask. //var/icon/alpha_mask = getFlatIcon(src)//Accurate but SLOW. Not designed for running each tick. Could have other uses I guess. var/icon/alpha_mask = getIconMask(src)//Which is why I created that proc. Also a little slow since it's blending a bunch of icons together but good enough. opacity_icon.AddAlphaMask(alpha_mask)//Likely the main source of lag for this proc. Probably not designed to run each tick. @@ -822,12 +597,13 @@ The _flatIcons list is a cache for generated icon files. if(2) I.pixel_x++ if(3) I.pixel_y-- if(4) I.pixel_y++ - overlays += I//And finally add the overlay. + AddOverlays(overlays) //And finally add the overlay. #define HOLOPAD_SHORT_RANGE 1 //For determining the color of holopads based on whether they're short or long range. #define HOLOPAD_LONG_RANGE 2 /proc/getHologramIcon(icon/A, safety=1, noDecolor=FALSE, hologram_color=HOLOPAD_SHORT_RANGE)//If safety is on, a new icon is not created. + RETURN_TYPE(/icon) var/icon/flat_icon = safety ? A : new(A)//Has to be a new icon to not constantly change the same icon. if (noDecolor == FALSE) if(hologram_color == HOLOPAD_LONG_RANGE) @@ -841,6 +617,7 @@ The _flatIcons list is a cache for generated icon files. //For photo camera. /proc/build_composite_icon(atom/A) + RETURN_TYPE(/icon) var/icon/composite = icon(A.icon, A.icon_state, A.dir, 1) for(var/O in A.overlays) var/image/I = O @@ -858,6 +635,7 @@ The _flatIcons list is a cache for generated icon files. return rgb(RGB[1],RGB[2],RGB[3]) /proc/sort_atoms_by_layer(list/atoms) + RETURN_TYPE(/list) // Comb sort icons based on levels var/list/result = atoms.Copy() var/gap = length(result) @@ -882,6 +660,7 @@ cap_mode is capturing mode (optional), user is capturing mob (requred only wehen lighting determines lighting capturing (optional), suppress_errors suppreses errors and continues to capture (optional). */ /proc/generate_image(tx as num, ty as num, tz as num, range as num, cap_mode = CAPTURE_MODE_PARTIAL, mob/living/user, lighting = 1, suppress_errors = 1) + RETURN_TYPE(/icon) var/list/turfstocapture = list() //Lines below determine what tiles will be rendered for(var/xoff = 0 to range) diff --git a/code/_helpers/lists.dm b/code/_helpers/lists.dm index 32e340533b08d..0aa0d7aaeb234 100644 --- a/code/_helpers/lists.dm +++ b/code/_helpers/lists.dm @@ -120,6 +120,7 @@ * If either of arguments is not a list, returns null */ /proc/difflist(list/first, list/second, skiprep=0) + RETURN_TYPE(/list) if(!islist(first) || !islist(second)) return var/list/result = new @@ -160,6 +161,7 @@ Checks if a list has the same entries and values as an element of big. * If either of arguments is not a list, returns null */ /proc/uniquemergelist(list/first, list/second, skiprep=0) + RETURN_TYPE(/list) if(!islist(first) || !islist(second)) return var/list/result = new @@ -170,10 +172,12 @@ Checks if a list has the same entries and values as an element of big. return result /proc/assoc_merge_add(value_a, value_b) + RETURN_TYPE(/list) return value_a + value_b // This proc merges two associative lists /proc/merge_assoc_lists(list/a, list/b, merge_method, default_if_null_value = null) + RETURN_TYPE(/list) . = list() for(var/key in a) var/a_value = a[key] @@ -233,14 +237,19 @@ Checks if a list has the same entries and values as an element of big. return len return null -//Pick a random element from the list and remove it from the list. -/proc/pick_n_take(list/listfrom) - if (length(listfrom) > 0) - var/picked = pick(listfrom) - listfrom -= picked - return picked - return null +/// Pick a random element from the list and remove it from the list. +/proc/pick_n_take(list/list_to_pick) + RETURN_TYPE(list_to_pick[_].type) + + var/list_length = length(list_to_pick) + if(!list_length) + return null + + var/picked_index = rand(1, list_length) + var/picked = list_to_pick[picked_index] + list_to_pick.Cut(picked_index, picked_index + 1) + return picked /// Remove and return the last element of the list, or null. /proc/pop(list/list) @@ -249,6 +258,11 @@ Checks if a list has the same entries and values as an element of big. . = list[last_index] LIST_DEC(list) +/// Returns the first element from the list and removes it from the list +/proc/popleft(list/L) + if (length(L)) + . = L[1] + L.Cut(1,2) //Returns the next element in parameter list after first appearance of parameter element. If it is the last element of the list or not present in list, returns first element. /proc/next_in_list(element, list/L) @@ -263,6 +277,7 @@ Checks if a list has the same entries and values as an element of big. //Reverses the order of items in the list /proc/reverselist(list/L) + RETURN_TYPE(/list) var/list/output = list() if(L) for(var/i = length(L); i >= 1; i--) @@ -271,6 +286,7 @@ Checks if a list has the same entries and values as an element of big. //Randomize: Return the list in a random order /proc/shuffle(list/L) + RETURN_TYPE(/list) if(!L) return @@ -282,18 +298,21 @@ Checks if a list has the same entries and values as an element of big. //Return a list with no duplicate entries /proc/uniquelist(list/L) + RETURN_TYPE(/list) . = list() for(var/i in L) . |= i // Return a list of the values in an assoc list (including null) /proc/list_values(list/L) + RETURN_TYPE(/list) . = list() for(var/e in L) . += L[e] //Mergesort: divides up the list into halves to begin the sort /proc/sortKey(list/client/L, order = 1) + RETURN_TYPE(/list) if(isnull(L) || length(L) < 2) return L var/middle = length(L) / 2 + 1 @@ -301,6 +320,7 @@ Checks if a list has the same entries and values as an element of big. //Mergsort: does the actual sorting and returns the results back to sortAtom /proc/mergeKey(list/client/L, list/client/R, order = 1) + RETURN_TYPE(/list) var/Li=1 var/Ri=1 var/list/result = new() @@ -318,6 +338,7 @@ Checks if a list has the same entries and values as an element of big. //Mergesort: divides up the list into halves to begin the sort /proc/sortAtom(list/atom/L, order = 1) + RETURN_TYPE(/list) if(isnull(L) || length(L) < 2) return L if(null in L) // Cannot sort lists containing null entries. @@ -327,6 +348,7 @@ Checks if a list has the same entries and values as an element of big. //Mergsort: does the actual sorting and returns the results back to sortAtom /proc/mergeAtoms(list/atom/L, list/atom/R, order = 1) + RETURN_TYPE(/list) var/Li=1 var/Ri=1 var/list/result = new() @@ -345,6 +367,7 @@ Checks if a list has the same entries and values as an element of big. //Mergesort: any value in a list /proc/sortList(list/L) + RETURN_TYPE(/list) if(length(L) < 2) return L var/middle = length(L) / 2 + 1 // Copy is first,second-1 @@ -352,12 +375,14 @@ Checks if a list has the same entries and values as an element of big. //Mergsorge: uses sortList() but uses the var's name specifically. This should probably be using mergeAtom() instead /proc/sortNames(list/L) + RETURN_TYPE(/list) var/list/Q = new() for(var/atom/x in L) Q[x.name] = x return sortList(Q) /proc/mergeLists(list/L, list/R) + RETURN_TYPE(/list) var/Li=1 var/Ri=1 var/list/result = new() @@ -374,12 +399,14 @@ Checks if a list has the same entries and values as an element of big. // List of lists, sorts by element[key] - for things like crew monitoring computer sorting records by name. /proc/sortByKey(list/L, key) + RETURN_TYPE(/list) if(length(L) < 2) return L var/middle = length(L) / 2 + 1 return mergeKeyedLists(sortByKey(L.Copy(0, middle), key), sortByKey(L.Copy(middle), key), key) /proc/mergeKeyedLists(list/L, list/R, key) + RETURN_TYPE(/list) var/Li=1 var/Ri=1 var/list/result = new() @@ -399,12 +426,14 @@ Checks if a list has the same entries and values as an element of big. //Mergesort: any value in a list, preserves key=value structure /proc/sortAssoc(list/L) + RETURN_TYPE(/list) if(length(L) < 2) return L var/middle = length(L) / 2 + 1 // Copy is first,second-1 return mergeAssoc(sortAssoc(L.Copy(0,middle)), sortAssoc(L.Copy(middle))) //second parameter null = to end of list /proc/mergeAssoc(list/L, list/R) + RETURN_TYPE(/list) var/Li=1 var/Ri=1 var/list/result = new() @@ -420,6 +449,7 @@ Checks if a list has the same entries and values as an element of big. //Converts a bitfield to a list of numbers (or words if a wordlist is provided) /proc/bitfield2list(bitfield = 0, list/wordlist) + RETURN_TYPE(/list) var/list/r = list() if(istype(wordlist,/list)) var/max = min(length(wordlist),16) @@ -459,6 +489,7 @@ Checks if a list has the same entries and values as an element of big. //Don't use this on lists larger than half a dozen or so /proc/insertion_sort_numeric_list_ascending(list/L) + RETURN_TYPE(/list) //to_world_log("ascending len input: [length(L)]") var/list/out = list(pop(L)) for(var/entry in L) @@ -476,6 +507,7 @@ Checks if a list has the same entries and values as an element of big. return out /proc/insertion_sort_numeric_list_descending(list/L) + RETURN_TYPE(/list) //to_world_log("descending len input: [length(L)]") var/list/out = insertion_sort_numeric_list_ascending(L) //to_world_log("output: [length(out)]") @@ -506,12 +538,14 @@ Checks if a list has the same entries and values as an element of big. /proc/dd_sortedObjectList(list/L, cache=list()) + RETURN_TYPE(/list) if(length(L) < 2) return L var/middle = length(L) / 2 + 1 // Copy is first,second-1 return dd_mergeObjectList(dd_sortedObjectList(L.Copy(0,middle), cache), dd_sortedObjectList(L.Copy(middle), cache), cache) //second parameter null = to end of list /proc/dd_mergeObjectList(list/L, list/R, list/cache) + RETURN_TYPE(/list) var/Li=1 var/Ri=1 var/list/result = new() @@ -537,6 +571,7 @@ Checks if a list has the same entries and values as an element of big. // Insert an object into a sorted list, preserving sortedness /proc/dd_insertObjectList(list/L, O) + RETURN_TYPE(/list) var/min = 1 var/max = length(L) + 1 var/Oval = O:dd_SortValue() @@ -559,6 +594,7 @@ Checks if a list has the same entries and values as an element of big. min = mid+1 /proc/dd_sortedtextlist(list/incoming, case_sensitive = 0) + RETURN_TYPE(/list) // Returns a new list with the text values sorted. // Use binary search to order by sortValue. // This works by going to the half-point of the list, seeing if the node in question is higher or lower cost, @@ -618,6 +654,7 @@ Checks if a list has the same entries and values as an element of big. /proc/dd_sortedTextList(list/incoming) + RETURN_TYPE(/list) var/case_sensitive = 1 return dd_sortedtextlist(incoming, case_sensitive) @@ -637,6 +674,7 @@ Checks if a list has the same entries and values as an element of big. //creates every subtype of prototype (excluding prototype) and adds it to list L. //if no list/L is provided, one is created. /proc/init_subtypes(prototype, list/L) + RETURN_TYPE(/list) if(!istype(L)) L = list() for(var/path in subtypesof(prototype)) L += new path() @@ -645,6 +683,7 @@ Checks if a list has the same entries and values as an element of big. //creates every subtype of prototype (excluding prototype) and adds it to list L as a type/instance pair. //if no list/L is provided, one is created. /proc/init_subtypes_assoc(prototype, list/L) + RETURN_TYPE(/list) if(!istype(L)) L = list() for(var/path in subtypesof(prototype)) L[path] = new path() @@ -653,6 +692,7 @@ Checks if a list has the same entries and values as an element of big. #define listequal(A, B) (length(A) == length(B) && !length(A^B)) /proc/filter_list(list/L, type) + RETURN_TYPE(/list) . = list() for(var/entry in L) if(istype(entry, type)) @@ -667,6 +707,7 @@ Checks if a list has the same entries and values as an element of big. values += value /proc/duplicates(list/L) + RETURN_TYPE(/list) . = list() var/list/checked = list() for(var/value in L) @@ -675,10 +716,6 @@ Checks if a list has the same entries and values as an element of big. else checked += value -/proc/assoc_by_proc(list/plain_list, get_initial_value) - . = list() - for(var/entry in plain_list) - .[call(get_initial_value)(entry)] = entry /proc/get_initial_name(atom/atom_type) var/atom/A = atom_type @@ -725,6 +762,7 @@ Checks if a list has the same entries and values as an element of big. //replaces reverseList ~Carnie /proc/reverseRange(list/L, start=1, end=0) + RETURN_TYPE(/list) if(length(L)) start = start % length(L) end = end % (length(L)+1) @@ -742,6 +780,7 @@ Checks if a list has the same entries and values as an element of big. //Copies a list, and all lists inside it recusively //Does not copy any other reference type /proc/deepCopyList(list/l) + RETURN_TYPE(/list) if(!islist(l)) return l . = l.Copy() @@ -759,6 +798,7 @@ Checks if a list has the same entries and values as an element of big. // Gets the first instance that is of the given type (strictly) /proc/get_instance_of_strict_type(list/L, T) + RETURN_TYPE(/atom) for(var/key in L) var/atom/A = key if(A.type == T) @@ -769,6 +809,7 @@ Checks if a list has the same entries and values as an element of big. * */ /proc/typecache_filter_list(list/atoms, list/typecache) + RETURN_TYPE(/list) . = list() for(var/thing in atoms) var/atom/A = thing @@ -779,6 +820,7 @@ Checks if a list has the same entries and values as an element of big. * Like typesof() or subtypesof(), but returns a typecache instead of a list */ /proc/typecacheof(path, ignore_root_path, only_root_path = FALSE) + RETURN_TYPE(/list) if(ispath(path)) var/list/types = list() if(only_root_path) @@ -804,3 +846,54 @@ Checks if a list has the same entries and values as an element of big. for(var/T in typesof(P)) L[T] = TRUE return L + +/proc/is_type_in_typecache(atom/A, list/L) + if(!A || !length(L)) + return FALSE + + return L[A.type] + +/// Convert list to a map by calling handler per entry. Map may be supplied as a reference. Handlers should implement a no-params clear. +/proc/list_to_map(list/list, handler, list/map) + RETURN_TYPE(/list) + call(handler)() + if (!islist(map)) + map = list() + for (var/entry in list) + call(handler)(map, entry) + call(handler)() + return map + + +/// Entry handler for list_to_map. Produces a "name"=ref map, overwriting duplicate names in encounter order. +/proc/ltm_by_atom_name(list/map, atom/entry) + if (!map) + return + map[entry.name] = entry + + +/// Entry handler for list_to_map. Produces a "name"=ref map, suffixing a count to name for duplicate names. +/proc/ltm_by_atom_name_numbered(list/map, atom/entry) + var/static/list/names_seen + if (!map) + names_seen = null + return + if (!names_seen) + names_seen = list() + var/index = ++names_seen[entry.name] + if (index > 1) + map["[entry.name] [index]"] = entry + else + map[entry.name] = entry + +/// Takes an input_key, as text, and the list of keys already used, outputting a replacement key in the format of "[input_key] ([number_of_duplicates])" if it finds a duplicate +/// use this for lists of things that might have the same name, like mobs or objects, that you plan on giving to a player as input +/proc/avoid_assoc_duplicate_keys(input_key, list/used_key_list) + if(!input_key || !istype(used_key_list)) + return + if(used_key_list[input_key]) + used_key_list[input_key]++ + input_key = "[input_key] ([used_key_list[input_key]])" + else + used_key_list[input_key] = 1 + return input_key diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm index 8756fe6e1c34d..0d000c767a4f1 100644 --- a/code/_helpers/logging.dm +++ b/code/_helpers/logging.dm @@ -20,7 +20,13 @@ var/global/log_end= world.system_type == UNIX ? ascii2text(13) : "" /proc/log_ss_init(text) game_log("SS", "[text]") +//wrapper macros for easier grepping +#define DIRECT_OUTPUT(A, B) A << B +#define SEND_TEXT(target, text) DIRECT_OUTPUT(target, text) +#define WRITE_FILE(file, text) DIRECT_OUTPUT(file, text) + #define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [src] usr: [usr].") + //print a warning message to world.log /proc/warning(msg) to_world_log("## WARNING: [msg][log_end]") @@ -30,7 +36,7 @@ var/global/log_end= world.system_type == UNIX ? ascii2text(13) : "" to_world_log("## TESTING: [msg][log_end]") /proc/game_log(category, text) - to_file(global.diary, "\[[time_stamp()]] [game_id] [category]: [text][log_end]") + rustg_log_write_formatted("[GLOB.log_directory]/game.log", "[category]: [text]") /proc/log_admin(text) GLOB.admin_log.Add(text) @@ -44,9 +50,13 @@ var/global/log_end= world.system_type == UNIX ? ascii2text(13) : "" /proc/log_runtime(text) for (var/client/C as anything in GLOB.admins) - if (C.get_preference_value(/datum/client_preference/staff/show_runtime_logs) == GLOB.PREF_SHOW) + if (!C.prefs || C.get_preference_value(/datum/client_preference/staff/show_runtime_logs) == GLOB.PREF_SHOW) to_chat(C, append_admin_tools(SPAN_DEBUG("RUNTIME: [text]"), usr, usr?.loc)) +/proc/log_signal(text) + if(config.log_signals) + game_log("SIGNALS", text) + /proc/log_error(text) error(text) to_debug_listeners(text, "ERROR") @@ -57,13 +67,17 @@ var/global/log_end= world.system_type == UNIX ? ascii2text(13) : "" /proc/to_debug_listeners(text, prefix = "DEBUG") for(var/client/C as anything in GLOB.admins) - if(C.get_preference_value(/datum/client_preference/staff/show_debug_logs) == GLOB.PREF_SHOW) - to_chat(C, SPAN_DEBUG("[prefix]: [text]")) + if (!C.prefs || C.get_preference_value(/datum/client_preference/staff/show_debug_logs) == GLOB.PREF_SHOW) + to_chat(C, MESSAGE_TYPE_DEBUG, SPAN_DEBUG("[prefix]: [text]"), TRUE) /proc/log_game(text) if (config.log_game) game_log("GAME", text) +/proc/log_tool(text) + if (config.log_tool) + game_log("TOOL", text) + /proc/log_vote(text) if (config.log_vote) game_log("VOTE", text) @@ -103,12 +117,28 @@ var/global/log_end= world.system_type == UNIX ? ascii2text(13) : "" /proc/log_misc(text) game_log("MISC", text) +/proc/log_tgs(text, level) + to_world_log("TGS [text]") + +/proc/log_tgui(user_or_client, text) + if(!text) + stack_trace("Pointless log_tgui message") + return + var/entry = "" + if(!user_or_client) + entry += "no user" + else if(istype(user_or_client, /mob)) + var/mob/user = user_or_client + entry += "[user.ckey] (as [user])" + else if(istype(user_or_client, /client)) + var/client/client = user_or_client + entry += "[client.ckey]" + entry += ":\n[text]" + /proc/log_unit_test(text) to_world_log("## UNIT_TEST ##: [text]") log_debug(text) -/proc/log_qdel(text) - to_file(GLOB.world_qdel_log, "\[[time_stamp()]]QDEL: [text]") //This replaces world.log so it displays both in DD and the file /proc/log_world(text) diff --git a/code/_helpers/maths.dm b/code/_helpers/maths.dm index 4deaddb73b4f2..c0a102af8f91c 100644 --- a/code/_helpers/maths.dm +++ b/code/_helpers/maths.dm @@ -2,10 +2,6 @@ #define Frand(low, high) ( rand() * ((high) - (low)) + (low) ) -/// Value or the next integer in a positive direction: Ceil(-1.5) = -1 , Ceil(1.5) = 2 -#define Ceil(value) ( -round(-(value)) ) - - /// Value or the next multiple of divisor in a positive direction. Ceilm(-1.5, 0.3) = -1.5 , Ceilm(-1.5, 0.4) = -1.2 #define Ceilm(value, divisor) ( -round(-(value) / (divisor)) * (divisor) ) @@ -14,10 +10,6 @@ #define Ceilp(value, power) ( (power) ** -round(-log((power), (value))) ) -/// Value or the next integer in a negative direction: Floor(-1.5) = -2 , Floor(1.5) = 1 -#define Floor(value) round(value) - - /// Value or the next multiple of divisor in a negative direction: Floorm(-1.5, 0.3) = -1.5 , Floorm(-1.5, 0.4) = -1.6 #define Floorm(value, divisor) ( round((value) / (divisor)) * (divisor) ) @@ -118,7 +110,7 @@ /proc/Drand(x, y, normalize) var/sum = 0 for (var/i = 1 to x) - sum += Floor(rand() * y) + sum += floor(rand() * y) if (normalize) return sum / ((x * y) - x) return sum + x @@ -130,6 +122,7 @@ /// A circular random coordinate pair from 0, unit by default, scaled by radius, then rounded if round. /proc/CircularRandomCoordinate(radius = 1, round) + RETURN_TYPE(/list) var/angle = rand(0, 359) var/x = cos(angle) * radius var/y = sin(angle) * radius @@ -152,6 +145,7 @@ * radius outside the scope of the proc, eg as BoundedCircularRandomCoordinate(Frand(1, 3), ...) */ /proc/BoundedCircularRandomCoordinate(radius, center_x, center_y, low_x, low_y, high_x, high_y, round) + RETURN_TYPE(/list) var/list/xy = CircularRandomCoordinate(radius, round) var/dx = xy[1] var/dy = xy[2] @@ -169,12 +163,14 @@ /// Pick a random turf using BoundedCircularRandomCoordinate about x,y on level z /proc/CircularRandomTurf(radius, z, center_x, center_y, low_x = 1, low_y = 1, high_x = world.maxx, high_y = world.maxy) + RETURN_TYPE(/turf) var/list/xy = BoundedCircularRandomCoordinate(radius, center_x, center_y, low_x, low_y, high_x, high_y, TRUE) return locate(xy[1], xy[2], z) /// Pick a random turf using BoundedCircularRandomCoordinate around the turf of target /proc/CircularRandomTurfAround(atom/target, radius, low_x = 1, low_y = 1, high_x = world.maxx, high_y = world.maxy) + RETURN_TYPE(/turf) var/turf/turf = get_turf(target) return CircularRandomTurf(radius, turf.z, turf.x, turf.y, low_x, low_y, high_x, high_y) @@ -200,3 +196,60 @@ /proc/grand(min = 0, max = 1) var/static/generator/gauss = generator("num", 0, 1, NORMAL_RAND) return min + gauss.Rand() * (max - min) + +/proc/gaussian(mean=0, stddev=1) + var u1 = rand() + var u2 = rand() + var z0 = sqrt(-2 * log(u1)) * cos(2 * PI * u2) + return z0 * stddev + mean + + +/proc/rangedGaussian(min=0, max=1, mean=0, stddev=1) + var/final_temp = min + rand() * (max - min) + + for (var/runs = 1 to 10) + var temp = gaussian(mean, stddev) + + if (temp < min || temp > max) + continue + final_temp = temp + break + + return final_temp + +/proc/skewedGaussian(min=0, max=1, skew=1) + var/final_temp = min + rand() * (max - min) + + for (var/runs = 1 to 10) + var temp = gaussian() ** skew + temp = temp * (max - min) + min + + if (temp < min || temp > max) + continue + + final_temp = temp + break + + return final_temp + +/proc/Wrap(val, min, max) + var/d = max - min + var/t = round((val - min) / d) + return val - (t * d) + + +/proc/MakeGenerator(g_type, g_min, g_max, g_rand = UNIFORM_RAND) + switch (g_rand) + if (1) + g_rand = NORMAL_RAND + if (2) + g_rand = LINEAR_RAND + if (3) + g_rand = SQUARE_RAND + else + g_rand = UNIFORM_RAND + + if (!isnum(g_min) || !isnum(g_max)) + return null + + return generator(g_type, g_min, g_max, g_rand) diff --git a/code/_helpers/matrices.dm b/code/_helpers/matrices.dm index adb136b5297cc..d17460cbbe1b2 100644 --- a/code/_helpers/matrices.dm +++ b/code/_helpers/matrices.dm @@ -48,11 +48,13 @@ //Returns an identity color matrix which does nothing /proc/color_identity() + RETURN_TYPE(/list) return list(1,0,0, 0,1,0, 0,0,1) //Moves all colors angle degrees around the color wheel while maintaining intensity of the color and not affecting whites //TODO: Need a version that only affects one color (ie shift red to blue but leave greens and blues alone) /proc/color_rotation(angle) + RETURN_TYPE(/list) if(angle == 0) return color_identity() angle = clamp(angle, -180, 180) @@ -70,6 +72,7 @@ //Makes everything brighter or darker without regard to existing color or brightness /proc/color_brightness(power) + RETURN_TYPE(/list) power = clamp(power, -255, 255) power = power/255 @@ -90,6 +93,7 @@ var/global/list/delta_index = list( //Exxagerates or removes brightness /proc/color_contrast(value) + RETURN_TYPE(/list) value = round(clamp(value, -100, 100)) if(value == 0) return color_identity() @@ -111,6 +115,7 @@ var/global/list/delta_index = list( //Exxagerates or removes colors /proc/color_saturation(value as num) + RETURN_TYPE(/list) if(value == 0) return color_identity() value = clamp(value, -100, 100) @@ -132,6 +137,7 @@ var/global/list/delta_index = list( //Given 2 matrices mxn and nxp (row major) it multiplies their members and return an mxp matrix //Do make sure your lists actually have this many elements /proc/multiply_matrices(list/A, list/B, m, n, p) + RETURN_TYPE(/list) var/list/result = new (m * p) if(length(A) == m*n && length(B) == n*p) diff --git a/code/_helpers/medical_scans.dm b/code/_helpers/medical_scans.dm index 54a012f7eba36..23c28d1ff400f 100644 --- a/code/_helpers/medical_scans.dm +++ b/code/_helpers/medical_scans.dm @@ -1,4 +1,5 @@ /mob/living/carbon/human/proc/get_raw_medical_data(tag = FALSE) + RETURN_TYPE(/list) var/mob/living/carbon/human/H = src var/list/scan = list() @@ -107,6 +108,7 @@ return scan /proc/display_medical_data_header(list/scan, skill_level = SKILL_DEFAULT) + RETURN_TYPE(/list) //In case of problems, abort. var/dat = list() @@ -128,6 +130,7 @@ return dat /proc/display_medical_data_health(list/scan, skill_level = SKILL_DEFAULT) + RETURN_TYPE(/list) //In case of problems, abort. if(!scan["name"]) return "
[SPAN_BAD("SCAN READOUT ERROR.")]
" @@ -184,7 +187,7 @@ dat += "[SPAN_CLASS("average", "[scan["pulse"]]bpm")]" else dat += "[scan["pulse"]]bpm" - if(skill_level >= SKILL_ADEPT) + if(skill_level >= SKILL_TRAINED) if((scan["pulse"] >= 140) || (scan["pulse"] == -3)) dat+= "[SPAN_BAD("Patient is tachycardic.")]" else if(scan["pulse"] >= 120) @@ -208,7 +211,7 @@ dat += "Blood volume:[scan["blood_volume"]]u/[scan["blood_volume_max"]]u" - if(skill_level >= SKILL_ADEPT) + if(skill_level >= SKILL_TRAINED) if(ratio <= 0.70) dat += "[SPAN_BAD("Patient is in hypovolemic shock. Transfusion highly recommended.")]" @@ -311,7 +314,7 @@ row += "[E["name"]]" if(E["is_stump"]) row += "Missing" - if(skill_level >= SKILL_ADEPT) + if(skill_level >= SKILL_TRAINED) row += "[english_list(E["scan_results"], nothing_text = " ")]" else row += " " @@ -319,7 +322,7 @@ row += "" if(E["brute_dam"] + E["burn_dam"] == 0) row += "None" - if(skill_level < SKILL_ADEPT) + if(skill_level < SKILL_TRAINED) if(E["brute_dam"]) row += "Damaged
" if(E["burn_dam"]) @@ -329,7 +332,7 @@ row += "[capitalize(get_wound_severity(E["brute_ratio"], (E["limb_flags"] & ORGAN_FLAG_HEALS_OVERKILL)))] physical trauma
" if(E["burn_dam"]) row += "[capitalize(get_wound_severity(E["burn_ratio"], (E["limb_flags"] & ORGAN_FLAG_HEALS_OVERKILL)))] burns" - if(skill_level >= SKILL_ADEPT) + if(skill_level >= SKILL_TRAINED) row += "" row += "[english_list(E["scan_results"], nothing_text=" ")]" row += "" @@ -372,7 +375,7 @@ row += "" subdat += jointext(row, null) - if(skill_level <= SKILL_ADEPT) + if(skill_level <= SKILL_TRAINED) dat += shuffle(subdat) else dat += subdat diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm index 2824fcbef93c6..0e99e0f647073 100644 --- a/code/_helpers/mobs.dm +++ b/code/_helpers/mobs.dm @@ -13,6 +13,7 @@ #define blocked_mult(blocked) max(1 - (blocked/100), 0) /proc/mobs_in_view(range, source) + RETURN_TYPE(/list) var/list/mobs = list() for(var/atom/movable/AM in view(range, source)) var/M = AM.get_mob() @@ -40,13 +41,9 @@ return f_style /proc/random_name(gender, species = SPECIES_HUMAN) - if(species) - var/datum/species/current_species = all_species[species] - if(current_species) - var/singleton/cultural_info/current_culture = SSculture.get_culture(current_species.default_cultural_info[TAG_CULTURE]) - if(current_culture) - return current_culture.get_random_name(gender) - return capitalize(pick(gender == FEMALE ? GLOB.first_names_female : GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) + var/datum/species/current_species = all_species[species] + var/singleton/cultural_info/current_culture = SSculture.get_culture(current_species.default_cultural_info[TAG_CULTURE]) + return current_culture.get_random_name(gender) /proc/random_skin_tone(datum/species/current_species) var/species_tone = current_species ? 35 - current_species.max_skin_tone() : -185 @@ -86,10 +83,11 @@ else return "unknown" /proc/RoundHealth(health) - var/list/icon_states = icon_states('icons/mob/hud_med.dmi') + var/list/icon_states = ICON_STATES('icons/mob/hud_med.dmi') for(var/icon_state in icon_states) if(health >= text2num(icon_state)) return icon_state + return icon_states[length(icon_states)] // If we had no match, return the last element //checks whether this item is a module of the robot it is located in. @@ -112,10 +110,10 @@ /// The mob currently interacting with the atom during a `do_after` timer. Used to validate `DO_TARGET_UNIQUE_ACT` flag checks. /atom/var/do_unique_target_user -/proc/do_after(mob/user, delay, atom/target, do_flags = DO_DEFAULT, incapacitation_flags = INCAPACITATION_DEFAULT) - return !do_after_detailed(user, delay, target, do_flags, incapacitation_flags) +/proc/do_after(mob/user, delay, atom/target, do_flags = DO_DEFAULT, incapacitation_flags = INCAPACITATION_DEFAULT, datum/callback/extra_checks) + return !do_after_detailed(user, delay, target, do_flags, incapacitation_flags, extra_checks) -/proc/do_after_detailed(mob/user, delay, atom/target, do_flags = DO_DEFAULT, incapacitation_flags = INCAPACITATION_DEFAULT) +/proc/do_after_detailed(mob/user, delay, atom/target, do_flags = DO_DEFAULT, incapacitation_flags = INCAPACITATION_DEFAULT, datum/callback/extra_checks) if (!delay) return FALSE @@ -131,7 +129,7 @@ if (target?.do_unique_target_user) if (do_feedback) - to_chat(user, SPAN_WARNING("\The [target.do_unique_target_user] is already interacting with \the [target]!")) + to_chat(user, SPAN_WARNING("[target.do_unique_target_user] is already interacting with [target]!")) return DO_TARGET_UNIQUE_ACT if ((do_flags & DO_TARGET_UNIQUE_ACT) && target) @@ -155,9 +153,16 @@ var/datum/progressbar/bar if (do_flags & DO_SHOW_PROGRESS) + // Autoset over-user if not in an otherwise visible location + // For public progress: This is if it's not on a turf. + // For private progress: This is if it's not on a turf or directly in the user's visible inventory HUD. if (do_flags & DO_PUBLIC_PROGRESS) + if (!HAS_FLAGS(do_flags, DO_BAR_OVER_USER) && (!target || !isturf(target.loc))) + SET_FLAGS(do_flags, DO_BAR_OVER_USER) bar = new /datum/progressbar/public(user, delay, target, !!(do_flags & DO_BAR_OVER_USER)) else + if (!HAS_FLAGS(do_flags, DO_BAR_OVER_USER) && (!target || (!isturf(target.loc) && target.loc != user))) + SET_FLAGS(do_flags, DO_BAR_OVER_USER) bar = new /datum/progressbar/private(user, delay, target, !!(do_flags & DO_BAR_OVER_USER)) var/start_time = world.time @@ -199,27 +204,31 @@ if (target_zone && user.zone_sel.selecting != target_zone) . = DO_USER_SAME_ZONE break + if (extra_checks && !invoke(extra_checks)) + . = FALSE + do_feedback = FALSE + break if (. && do_feedback) switch (.) if (DO_MISSING_TARGET) - to_chat(user, SPAN_WARNING("\The [target] no longer exists!")) + user.balloon_alert(user, "цель больше не существует!") if (DO_INCAPACITATED) - to_chat(user, SPAN_WARNING("You're no longer able to act!")) + user.balloon_alert(user, "вы не можете действовать!") if (DO_USER_CAN_MOVE) - to_chat(user, SPAN_WARNING("You must remain still to perform that action!")) + user.balloon_alert(user, "вы двинулись!") if (DO_TARGET_CAN_MOVE) - to_chat(user, SPAN_WARNING("\The [target] must remain still to perform that action!")) + user.balloon_alert(user, "цель двинулась!") if (DO_USER_CAN_TURN) - to_chat(user, SPAN_WARNING("You must face the same direction to perform that action!")) + user.balloon_alert(user, "вы повернулись!") if (DO_TARGET_CAN_TURN) - to_chat(user, SPAN_WARNING("\The [target] must face the same direction to perform that action!")) + user.balloon_alert(user, "цель повернулась!") if (DO_USER_SAME_HAND) - to_chat(user, SPAN_WARNING("You must remain on the same active hand to perform that action!")) + user.balloon_alert(user, "вы сменили активную руку!") if (DO_USER_UNIQUE_ACT) - to_chat(user, SPAN_WARNING("You stop what you're doing with \the [target].")) + user.balloon_alert(user, "вы прекратили действие!") if (DO_USER_SAME_ZONE) - to_chat(user, SPAN_WARNING("You must remain targeting the same zone to perform that action!")) + user.balloon_alert(user, "вы поменяли зону тела!") if (bar) qdel(bar) @@ -229,6 +238,7 @@ target.do_unique_target_user = null /proc/able_mobs_in_oview(origin) + RETURN_TYPE(/list) var/list/mobs = list() for(var/mob/living/M in oview(origin)) // Only living mobs are considered able. if(!M.is_physically_disabled()) @@ -273,6 +283,7 @@ //Find a dead mob with a brain and client. /proc/find_dead_player(find_key, include_observers = 0) + RETURN_TYPE(/mob) if(isnull(find_key)) return diff --git a/code/_helpers/names.dm b/code/_helpers/names.dm index f4df29419a66f..c35b2b5d08ef1 100644 --- a/code/_helpers/names.dm +++ b/code/_helpers/names.dm @@ -9,7 +9,7 @@ /proc/station_name() if(!GLOB.using_map) - return server_name + return config.server_name if (GLOB.using_map.station_name) return GLOB.using_map.station_name diff --git a/code/_helpers/sorts/TimSort.dm b/code/_helpers/sorts/TimSort.dm index 04020900834f6..a88f2e1af3940 100644 --- a/code/_helpers/sorts/TimSort.dm +++ b/code/_helpers/sorts/TimSort.dm @@ -1,5 +1,6 @@ //TimSort interface -/proc/sortTim(list/L, cmp=/proc/cmp_numeric_asc, associative, fromIndex=1, toIndex=0) +/proc/sortTim(list/L, cmp=GLOBAL_PROC_REF(cmp_numeric_asc), associative, fromIndex=1, toIndex=0) + RETURN_TYPE(/list) if(L && length(L) >= 2) fromIndex = fromIndex % length(L) toIndex = toIndex % (length(L)+1) diff --git a/code/_helpers/sorts/__main.dm b/code/_helpers/sorts/__main.dm index ed68022380d47..458e8d99e1257 100644 --- a/code/_helpers/sorts/__main.dm +++ b/code/_helpers/sorts/__main.dm @@ -33,6 +33,7 @@ var/global/datum/sortInstance/sortInstance = new() /datum/sortInstance/proc/timSort(start, end) + RETURN_TYPE(/list) runBases.Cut() runLens.Cut() @@ -571,6 +572,7 @@ reverse a descending sequence without violating stability. /datum/sortInstance/proc/mergeSort(start, end) + RETURN_TYPE(/list) var/remaining = end - start //If array is small, do an insertion sort diff --git a/code/_helpers/species.dm b/code/_helpers/species.dm index 260d10c806603..c605f46b636cb 100644 --- a/code/_helpers/species.dm +++ b/code/_helpers/species.dm @@ -5,6 +5,7 @@ /// Null, or a species if thing is a species, a species path, or a species name /proc/resolve_species(datum/species/thing) + RETURN_TYPE(/datum/species) if (ispath(thing, /datum/species)) thing = initial(thing.name) if (istext(thing)) diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index 964a5be55d11a..ff514af878ecf 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -51,7 +51,7 @@ if(trim) //Maybe, we need trim text twice? Here and before copytext? - input = trim(input) + input = trimtext(input) return input @@ -64,26 +64,26 @@ //Filters out undesirable characters from names /proc/sanitizeName(input, max_length = MAX_NAME_LEN, allow_numbers = 0, force_first_letter_uppercase = TRUE) - if(!input || length(input) > max_length) + if(!input || length_char(input) > max_length) return //Rejects the input if it is null or if it is longer then the max length allowed var/number_of_alphanumeric = 0 var/last_char_group = 0 var/output = "" - for(var/i=1, i<=length(input), i++) - var/ascii_char = text2ascii(input,i) + for(var/i=1, i<=length_char(input), i++) + var/ascii_char = text2ascii_char(input,i) switch(ascii_char) - // A .. Z - if(65 to 90) //Uppercase Letters + // A .. Z, А .. Я + if(65 to 90, 1040 to 1071, 1025) //Uppercase Letters output += ascii2text(ascii_char) number_of_alphanumeric++ last_char_group = 4 - // a .. z - if(97 to 122) //Lowercase Letters + // a .. z, а .. я + if(97 to 122, 1072 to 1103, 1105) //Lowercase Letters if(last_char_group<2 && force_first_letter_uppercase) - output += ascii2text(ascii_char-32) //Force uppercase first character + output += uppertext(ascii2text(ascii_char)) else output += ascii2text(ascii_char) number_of_alphanumeric++ @@ -97,8 +97,8 @@ number_of_alphanumeric++ last_char_group = 3 - // ' - . - if(39,45,46) //Common name punctuation + // ' - . , + if(39,44,45,46) //Common name punctuation if(!last_char_group) continue output += ascii2text(ascii_char) last_char_group = 2 @@ -134,6 +134,8 @@ if(!text) return "" var/list/dat = list() var/last_was_space = 1 + if(contains_cyrillic(text)) + text = convert_ru_symbols_to_en(text) for(var/i=1, i<=length(text), i++) var/ascii_char = text2ascii(text,i) switch(ascii_char) @@ -156,10 +158,10 @@ //Returns null if there is any bad text in the string /proc/reject_bad_text(text, max_length=512) - if(length(text) > max_length) return //message too long + if(length_char(text) > max_length) return //message too long var/non_whitespace = 0 - for(var/i=1, i<=length(text), i++) - switch(text2ascii(text,i)) + for(var/i=1, i<=length_char(text), i++) + switch(text2ascii_char(text,i)) if(62,60,92,47) return //rejects the text if it contains these bad characters: <, >, \ or / if(127 to 255) return //rejects non-ASCII letters if(0 to 31) return //more weird stuff @@ -172,6 +174,17 @@ /proc/sanitize_old(t,list/repl_chars = list("\n"="#","\t"="#")) return html_encode(replace_characters(t,repl_chars)) +//Removes a few problematic characters +/proc/sanitize_simple(t,list/repl_chars = list("\n"="#","\t"="#")) + for(var/char in repl_chars) + var/index = findtext(t, char) + while(index) + t = copytext(t, 1, index) + repl_chars[char] + copytext(t, index + length(char)) + index = findtext(t, char, index + length(char)) + return t + +/proc/sanitize_filename(t) + return sanitize_simple(t, list("\n"="", "\t"="", "/"="", "\\"="", "?"="", "%"="", "*"="", ":"="", "|"="", "\""="", "<"="", ">"="")) /* * Text searches */ @@ -181,21 +194,21 @@ /proc/dd_hasprefix(text, prefix) var/start = 1 var/end = length(prefix) + 1 - return findtext(text, prefix, start, end) + return findtext_char(text, prefix, start, end) //Checks the beginning of a string for a specified sub-string. This proc is case sensitive //Returns the position of the substring or 0 if it was not found /proc/dd_hasprefix_case(text, prefix) var/start = 1 var/end = length(prefix) + 1 - return findtextEx(text, prefix, start, end) + return findtextEx_char(text, prefix, start, end) //Checks the end of a string for a specified substring. //Returns the position of the substring or 0 if it was not found /proc/dd_hassuffix(text, suffix) var/start = length(text) - length(suffix) if(start) - return findtext(text, suffix, start, null) + return findtext_char(text, suffix, start, null) return //Checks the end of a string for a specified substring. This proc is case sensitive @@ -203,7 +216,7 @@ /proc/dd_hassuffix_case(text, suffix) var/start = length(text) - length(suffix) if(start) - return findtextEx(text, suffix, start, null) + return findtextEx_char(text, suffix, start, null) /* * Text modification @@ -211,7 +224,7 @@ /proc/replace_characters(t,list/repl_chars) for(var/char in repl_chars) - t = replacetext(t, char, repl_chars[char]) + t = replacetext_char(t, char, repl_chars[char]) return t @@ -220,7 +233,7 @@ var/padding_size = length_char(padding) if (!padding_size) return "" - var/padding_count = Ceil(size / padding_size) + var/padding_count = ceil(size / padding_size) var/list/result = list() for (var/i = padding_count to 1 step -1) result += padding // pow2 strategies could be used here at the cost of complexity @@ -257,22 +270,18 @@ //Returns a string with reserved characters and spaces before the first letter removed /proc/trim_left(text) - for (var/i = 1 to length(text)) - if (text2ascii(text, i) > 32) + for (var/i = 1 to length_char(text)) + if (text2ascii_char(text, i) > 32) return copytext(text, i) return "" //Returns a string with reserved characters and spaces after the last letter removed /proc/trim_right(text) - for (var/i = length(text) to 1 step -1) - if (text2ascii(text, i) > 32) - return copytext(text, 1, i + 1) + for (var/i = length_char(text) to 1 step -1) + if (text2ascii_char(text, i) > 32) + return copytext_char(text, 1, i + 1) return "" -//Returns a string with reserved characters and spaces before the first word and after the last word removed. -/proc/trim(text) - return trim_left(trim_right(text)) - //Returns a string with the first element of the string capitalized. /proc/capitalize(text) return uppertext(copytext_char(text, 1, 2)) + copytext_char(text, 2) @@ -364,18 +373,30 @@ for(var/i=1, i<=length(input), i++) var/ascii_char = text2ascii(input,i) switch(ascii_char) - // A .. Z - if(65 to 90) //Uppercase Letters - return 1 - // a .. z - if(97 to 122) //Lowercase Letters - return 1 + // A .. Z, а .. я + if(65 to 90, 1040 to 1071, 1025) //Uppercase Letters + return TRUE + // a .. z, а .. я + if(97 to 122, 1072 to 1103, 1105) //Lowercase Letters + return TRUE // 0 .. 9 if(48 to 57) //Numbers - return 1 + return TRUE return 0 +/proc/contains_cyrillic(input) + for(var/i=1, i<=length_char(input), i++) + var/ascii_char = text2ascii_char(input,i) + switch(ascii_char) + // А .. Я + if(1040 to 1071, 1025) //Uppercase Letters + return TRUE + // а .. я + if(1072 to 1103, 1105) //Lowercase Letters + return TRUE + return FALSE + /proc/generateRandomString(length) . = list() for(var/a in 1 to length) @@ -439,6 +460,12 @@ t = replacetext(t, "\[xynlogo\]", "") t = replacetext(t, "\[fleetlogo\]", "") t = replacetext(t, "\[sfplogo\]", "") + t = replacetext(t, "\[falogo\]", "") + t = replacetext(t, "\[ofbluelogo\]", "") + t = replacetext(t, "\[ofntlogo\]", "") + t = replacetext(t, "\[foundlogo\]", "") + t = replacetext(t, "\[ccalogo\]", "") + t = replacetext(t, "\[sierralogo\]", "") t = replacetext(t, "\[editorbr\]", "") return t @@ -495,6 +522,14 @@ t = replacetext(t, "", "\[daislogo\]") t = replacetext(t, "", "\[xynlogo\]") t = replacetext(t, "", "\[sfplogo\]") + t = replacetext(t, "", "\[falogo\]") + // [SIERRA-ADD] + t = replacetext(t, "", "\[ofbluelogo\]" ) + t = replacetext(t, "", "\[ofntlogo\]" ) + t = replacetext(t, "", "\[foundlogo\]" ) + t = replacetext(t, "", "\[ccalogo\]" ) + t = replacetext(t, "", "\[sierralogo\]" ) + // [/SIERRA-ADD] t = replacetext(t, "", "\[field\]") t = replacetext(t, "R E D A C T E D", "\[redacted\]") t = strip_html_properly(t) @@ -677,3 +712,41 @@ if (other && other != thing) return FALSE return findtext(thing, suid_check) + +/** + * Used to get a properly sanitized input. Returns null if cancel is pressed. + * + * Arguments + ** user - Target of the input prompt. + ** message - The text inside of the prompt. + ** title - The window title of the prompt. + ** max_length - If you intend to impose a length limit - default is 1024. + ** no_trim - Prevents the input from being trimmed if you intend to parse newlines or whitespace. +*/ +/proc/stripped_input(mob/user, message = "", title = "", default = "", max_length = MAX_MESSAGE_LEN, no_trim = FALSE) + var/user_input = input(user, message, title, default) as text|null + if(isnull(user_input)) // User pressed cancel + return + if(no_trim) + return copytext(html_encode(user_input), 1, max_length) + else + return trim(html_encode(user_input), max_length) //trim is "outside" because html_encode can expand single symbols into multiple symbols (such as turning < into <) + +/** + * Used to get a properly sanitized input in a larger box. Works very similarly to stripped_input. + * + * Arguments + ** user - Target of the input prompt. + ** message - The text inside of the prompt. + ** title - The window title of the prompt. + ** max_length - If you intend to impose a length limit - default is 1024. + ** no_trim - Prevents the input from being trimmed if you intend to parse newlines or whitespace. +*/ +/proc/stripped_multiline_input(mob/user, message = "", title = "", default = "", max_length = MAX_MESSAGE_LEN, no_trim = FALSE) + var/user_input = input(user, message, title, default) as message|null + if(isnull(user_input)) // User pressed cancel + return + if(no_trim) + return copytext(html_encode(user_input), 1, max_length) + else + return trim(html_encode(user_input), max_length) diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm index 694d543df5ff5..1f8f3170f3a94 100644 --- a/code/_helpers/time.dm +++ b/code/_helpers/time.dm @@ -187,7 +187,7 @@ var/global/round_start_time = 0 do delta = delay * max(0.01 * max(world.tick_usage, world.cpu) * max(Master.sleep_delta, 1), 1) // Scale up delay under load; sleeps have entry overhead from proc duplication sleep(world.tick_lag * delta) - total += Ceil(delta) + total += ceil(delta) delay *= 2 while (world.tick_usage > min(Master.tick_limit_to_run, Master.current_ticklimit)) return total @@ -203,6 +203,36 @@ var/global/round_start_time = 0 return weekdays.Find(time2text(world.timeofday, "DDD")) /proc/current_month_and_day() + RETURN_TYPE(/list) var/time_string = time2text(world.realtime, "MM-DD") var/time_list = splittext(time_string, "-") return list(text2num(time_list[1]), text2num(time_list[2])) + + +#define MIDNIGHT_ROLLOVER 864000 //number of deciseconds in a day + +var/global/midnight_rollovers = 0 +var/global/rollovercheck_last_timeofday = 0 +/proc/update_midnight_rollover() + if (world.timeofday < global.rollovercheck_last_timeofday) //TIME IS GOING BACKWARDS! + global.midnight_rollovers += 1 + global.rollovercheck_last_timeofday = world.timeofday + return global.midnight_rollovers + +//time of day but automatically adjusts to the server going into the next day within the same round. +//for when you need a reliable time number that doesn't depend on byond time. +#define REALTIMEOFDAY (world.timeofday + (MIDNIGHT_ROLLOVER * MIDNIGHT_ROLLOVER_CHECK)) +#define MIDNIGHT_ROLLOVER_CHECK ( global.rollovercheck_last_timeofday != world.timeofday ? update_midnight_rollover() : global.midnight_rollovers ) + +/** + * Returns "watch handle" (really just a timestamp :V) + */ +/proc/start_watch() + return REALTIMEOFDAY + +/** + * Returns number of seconds elapsed. + * @param wh number The "Watch Handle" from start_watch(). (timestamp) + */ +/proc/stop_watch(wh) + return round(0.1 * (REALTIMEOFDAY - wh), 0.1) diff --git a/code/_helpers/tools.dm b/code/_helpers/tools.dm index c34c7d5eba92c..e96d7e0abbdce 100644 --- a/code/_helpers/tools.dm +++ b/code/_helpers/tools.dm @@ -1,27 +1,3 @@ -/// True when this atom can be used as a wrench. -/atom/proc/IsWrench() - return FALSE - -/// Defines the base wrench as useable as a wrench. -/obj/item/wrench/IsWrench() - return TRUE - -/// True when A exists and can be used as a wrench. -#define isWrench(A) (A?.IsWrench()) - - -/// True when this atom can be used as a Welder. -/atom/proc/IsWelder() - return FALSE - -/// Defines the base welder as useable as a welder. -/obj/item/weldingtool/IsWelder() - return TRUE - -/// True when A exists and can be used as a welder. -#define isWelder(A) (A?.IsWelder()) - - /// True when this atom can be used as a cable coil. /atom/proc/IsCoil() return FALSE @@ -33,62 +9,37 @@ /// True when A exists and can be used as a cable coil. #define isCoil(A) (A?.IsCoil()) - -/// True when this atom can be used as a wirecutter. -/atom/proc/IsWirecutter() - return FALSE - -/// Defines the base wirecutter as useable as a wirecutter. -/obj/item/wirecutters/IsWirecutter() - return TRUE - -/// True when A exists and can be used as a wirecutter. -#define isWirecutter(A) (A?.IsWirecutter()) - - -/// True when this atom can be used as a screwdriver. -/atom/proc/IsScrewdriver() - return FALSE - -/// Defines the base screwdriver as useable as a screwdriver. -/obj/item/screwdriver/IsScrewdriver() - return TRUE - -/// True when A exists and can be used as a screwdriver. -#define isScrewdriver(A) (A?.IsScrewdriver()) - - -/// True when this atom can be used as a multitool. -/atom/proc/IsMultitool() +/// True when this atom can be used as a hatchet. +/atom/proc/IsHatchet() return FALSE -/// Defines the base multitool as useable as a multitool. -/obj/item/device/multitool/IsMultitool() +/// Defines the base hatchet as useable as a hatchet. +/obj/item/material/hatchet/IsHatchet() return TRUE -/// True when A exists and can be used as a multitool. -#define isMultitool(A) (A?.IsMultitool()) +/// True when A exists and can be used as a hatchet. +#define isHatchet(A) (A?.IsHatchet()) -/// True when this atom can be used as a crowbar. -/atom/proc/IsCrowbar() +/// True when this atom can be used as a flame source. This is for open flames. +/atom/proc/IsFlameSource() return FALSE -/// Defines the base crowbar as useable as a crowbar. -/obj/item/crowbar/IsCrowbar() - return TRUE +/// True when A exists and can be used as a flame source. +#define isFlameSource(A) (A?.IsFlameSource()) -/// True when A exists and can be used as a crowbar. -#define isCrowbar(A) (A?.IsCrowbar()) +/** + * Returns an integer value of temperature when this atom can be used as a heat source. This is for hot objects. + * + * Defaults to `1000` if `IsFlameSource()` returns `TRUE`, otherwise `0`. + */ +/atom/proc/IsHeatSource() + return IsFlameSource() ? 1000 : 0 -/// True when this atom can be used as a hatchet. -/atom/proc/IsHatchet() - return FALSE +/// 0 if A does not exist, or the heat value of A +#define isHeatSource(A) (A ? A.IsHeatSource() : 0) -/// Defines the base hatchet as useable as a hatchet. -/obj/item/material/hatchet/IsHatchet() - return TRUE -/// True when A exists and can be used as a hatchet. -#define isHatchet(A) (A?.IsHatchet()) +/// True when A exists and is either a flame or heat source +#define isFlameOrHeatSource(A) (A && (A.IsFlameSource() || !!A.IsHeatSource())) diff --git a/code/_helpers/turfs.dm b/code/_helpers/turfs.dm index 9d7a8b9eeb02e..cdf1598657ba3 100644 --- a/code/_helpers/turfs.dm +++ b/code/_helpers/turfs.dm @@ -1,6 +1,7 @@ // Returns the atom sitting on the turf. // For example, using this on a disk, which is in a bag, on a mob, will return the mob because it's on the turf. /proc/get_atom_on_turf(atom/movable/M) + RETURN_TYPE(/atom) var/atom/mloc = M while(mloc && mloc.loc && !isturf(mloc.loc)) mloc = mloc.loc @@ -15,6 +16,7 @@ // Picks a turf without a mob from the given list of turfs, if one exists. // If no such turf exists, picks any random turf from the given list of turfs. /proc/pick_mobless_turf_if_exists(list/start_turfs) + RETURN_TYPE(/turf) if(!length(start_turfs)) return null @@ -28,6 +30,7 @@ return pick(available_turfs) /proc/get_random_edge_turf(dir, clearance = TRANSITIONEDGE + 1, Z) + RETURN_TYPE(/turf) if(!dir) return @@ -42,20 +45,23 @@ return locate(clearance, rand(clearance, world.maxy - clearance), Z) /proc/get_random_turf_in_range(atom/origin, outer_range, inner_range) - origin = get_turf(origin) - if(!origin) + RETURN_TYPE(/turf) + var/turf/center = get_turf(origin) + if(!center) return + var/list/turfs = list() - for(var/turf/T in orange(origin, outer_range)) + for(var/turf/T as anything in ORANGE_TURFS(center, outer_range)) if(!(T.z in GLOB.using_map.sealed_levels)) // Picking a turf outside the map edge isn't recommended if(T.x >= world.maxx-TRANSITIONEDGE || T.x <= TRANSITIONEDGE) continue if(T.y >= world.maxy-TRANSITIONEDGE || T.y <= TRANSITIONEDGE) continue - if(!inner_range || get_dist(origin, T) >= inner_range) + if(!inner_range || get_dist(center, T) >= inner_range) turfs += T if(length(turfs)) return pick(turfs) /proc/screen_loc2turf(text, turf/origin) + RETURN_TYPE(/turf) if(!origin) return null var/tZ = splittext(text, ",") @@ -130,6 +136,7 @@ //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) + RETURN_TYPE(/list) var/list/turf_map = list() for(var/turf/source in turfs_src) var/x_pos = (source.x - src_origin.x) @@ -138,44 +145,53 @@ 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])") + crash_with("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(list/translation, area/base_area = null, turf/base_turf) - for(var/turf/source in translation) - + for(var/turf/source as anything in translation) var/turf/target = translation[source] - if(target) if(base_area) - ChangeArea(target, get_area(source)) - ChangeArea(source, base_area) + target.change_area(get_area(source)) + source.change_area(base_area) + transport_turf_contents(source, target) //change the old turfs - for(var/turf/source in translation) - source.ChangeTurf(base_turf ? base_turf : get_base_turf_by_area(source), 1, 1) + for(var/turf/source as anything in translation) + source.ChangeTurf(base_turf ? base_turf : get_base_turf_by_area(source), TRUE, TRUE) //Transports a turf from a source turf to a target turf, moving all of the turf's contents and making the target a copy of the source. /proc/transport_turf_contents(turf/source, turf/target) + RETURN_TYPE(/turf) - var/turf/new_turf = target.ChangeTurf(source.type, 1, 1) + var/turf/new_turf = target.ChangeTurf(source.type, TRUE, TRUE) new_turf.transport_properties_from(source) - for(var/obj/O in source) - if(O.simulated) - O.forceMove(new_turf) - else if(istype(O,/obj/effect)) - var/obj/effect/E = O - if(E.movable_flags & MOVABLE_FLAG_EFFECTMOVE) - E.forceMove(new_turf) - - for(var/mob/M in source) - if(isEye(M)) continue // If we need to check for more mobs, I'll add a variable - M.forceMove(new_turf) + for(var/atom/movable/content as anything in source) + if(isobj(content)) + var/obj/O = content + if (QDELETED(O)) + testing("Failed to translate [O] to new turf as it was qdel'd.") + continue + if(O.simulated || HAS_FLAGS(O.movable_flags, MOVABLE_FLAG_EFFECTMOVE)) + O.forceMove(new_turf) + else if(istype(O,/obj/effect)) + var/obj/E = O + if(E.movable_flags & MOVABLE_FLAG_EFFECTMOVE) + E.forceMove(new_turf) + + else if(ismob(content)) + var/mob/M = content + if(isEye(M)) + continue // If we need to check for more mobs, I'll add a variable + + M.forceMove(new_turf) if (GLOB.mob_spawners[source]) var/datum/mob_spawner/source_spawner = GLOB.mob_spawners[source] @@ -192,12 +208,13 @@ */ /proc/get_turfs_in_range(turf/center, range, list/predicates) + RETURN_TYPE(/list) . = list() if (!istype(center)) return - for (var/turf/T in trange(range, center)) + for (var/turf/T as anything in RANGE_TURFS(center, range)) if (!predicates || all_predicates_true(list(T), predicates)) . += T @@ -206,6 +223,25 @@ */ /proc/pick_turf_in_range(turf/center, range, list/turf_predicates) + RETURN_TYPE(/list) var/list/turfs = get_turfs_in_range(center, range, turf_predicates) if (length(turfs)) return pick(turfs) + + +/// Uses get_circle_coordinates to return a list of turfs on the in-bounds edge of the circle. +/proc/get_circle_turfs(radius, center_x, center_y, z) + if (z < 1 || z > world.maxz) + return list() + var/maxx = world.maxx + var/maxy = world.maxx + var/list/result = list() + for (var/xy in get_circle_coordinates(radius, center_x, center_y)) + var/x = xy & 0xFFF + var/y = SHIFTR(xy, 12) + if (x < 1 || x > maxx) + continue + if (y < 1 || y > maxy) + continue + result += locate(x, y, z) + return result diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm index 375925681371c..4138448ea922e 100644 --- a/code/_helpers/type2type.dm +++ b/code/_helpers/type2type.dm @@ -9,6 +9,7 @@ */ /proc/text2numlist(text, delimiter="\n") + RETURN_TYPE(/list) var/list/num_list = list() for(var/x in splittext(text, delimiter)) num_list += text2num(x) @@ -16,6 +17,7 @@ // Splits the text of a file at seperator and returns them in a list. /proc/file2list(filename, seperator="\n") + RETURN_TYPE(/list) return splittext(file2text(filename) || "", seperator) // Turns a direction into text @@ -107,6 +109,7 @@ if (rights & R_SOUNDS) . += "[seperator]+SOUND" if (rights & R_SPAWN) . += "[seperator]+SPAWN" if (rights & R_MOD) . += "[seperator]+MODERATOR" + if (rights & R_XENO) . += "[seperator]+XENOMODERATOR" return . // heat2color functions. Adapted from: http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code @@ -182,6 +185,7 @@ return ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0)) /proc/atomtypes2nameassoclist(list/atom_types) + RETURN_TYPE(/list) . = list() for(var/atom_type in atom_types) var/atom/A = atom_type @@ -189,8 +193,30 @@ . = sortAssoc(.) /proc/atomtype2nameassoclist(atom_type) + RETURN_TYPE(/list) return atomtypes2nameassoclist(typesof(atom_type)) //Splits the text of a file at seperator and returns them in a list. /world/proc/file2list(filename, seperator="\n") + RETURN_TYPE(/list) return splittext(file2text(filename), seperator) + +/// Return html to load a url. +/// for use inside of browse() calls to html assets that might be loaded on a cdn. +/proc/url2htmlloader(url) + return {""} + +/proc/type2parent(child) + var/string_type = "[child]" + var/last_slash = findlasttext(string_type, "/") + if(last_slash == 1) + switch(child) + if(/datum) + return null + if(/obj, /mob) + return /atom/movable + if(/area, /turf) + return /atom + else + return /datum + return text2path(copytext(string_type, 1, last_slash)) diff --git a/code/_helpers/types.dm b/code/_helpers/types.dm new file mode 100644 index 0000000000000..ea741c84ac2fa --- /dev/null +++ b/code/_helpers/types.dm @@ -0,0 +1,47 @@ +/// `typesof()` without the type of thing (or thing if it is a type) included. +/proc/subtypesof(datum/thing) + RETURN_TYPE(/list) + if (ispath(thing)) + return typesof(thing) - thing + if (istype(thing)) + return typesof(thing) - thing.type + return list() + + +/// `typesof()` without abstract types included. +/proc/typesof_real(datum/thing) + RETURN_TYPE(/list) + var/static/list/cache = list() + if (!ispath(thing)) + if (!istype(thing)) + return list() + thing = thing.type + var/list/result = cache[thing] + if (!result) + result = list() + for (var/path in typesof(thing)) + if (!is_abstract(path)) + result += path + if (!length(result)) + result = TRUE + cache[thing] = result + if (result == TRUE) + return list() + return result.Copy() + +/proc/types_of_real_list(list/datum/things) + RETURN_TYPE(/list) + var/list/types = list() + for(var/datum/thing as anything in things) + types |= typesof_real(thing) + + return types + +/// `subtypesof()` without abstract types included. +/proc/subtypesof_real(datum/thing) + RETURN_TYPE(/list) + if (!ispath(thing)) + if (!istype(thing)) + return list() + thing = thing.type + return typesof_real(thing) - thing diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index c539b51565706..85e531958ed45 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1,14 +1,3 @@ -/* - * A large number of misc global procs. - */ - -/proc/subtypesof(datum/thing) - if (ispath(thing)) - return typesof(thing) - thing - if (istype(thing)) - return typesof(thing) - thing.type - return list() - //Checks if all high bits in req_mask are set in bitfield #define BIT_TEST_ALL(bitfield, req_mask) ((~(bitfield) & (req_mask)) == 0) @@ -64,6 +53,7 @@ //Returns location. Returns null if no location was found. /proc/get_teleport_loc(turf/location,mob/target,distance = 1, density = FALSE, errorx = 0, errory = 0, eoffsetx = 0, eoffsety = 0) + RETURN_TYPE(/turf) /* Location where the teleport begins, target that will teleport, distance to go, density checking 0/1(yes/no). Random error in tile placement x, error in tile placement y, and block offset. @@ -158,7 +148,7 @@ Turf and target are seperate in case you want to teleport some distance from a t /proc/LinkBlocked(turf/A, turf/B) - if(A == null || B == null) return 1 + if(isnull(A) || isnull(B)) return 1 var/adir = get_dir(A,B) var/rdir = get_dir(B,A) if((adir & (NORTH|SOUTH)) && (adir & (EAST|WEST))) // diagonal @@ -198,6 +188,7 @@ Turf and target are seperate in case you want to teleport some distance from a t return x!=0?x/abs(x):0 /proc/getline(atom/M,atom/N)//Ultra-Fast Bresenham Line-Drawing Algorithm + RETURN_TYPE(/list) var/px=M.x //starting x var/py=M.y var/line[] = list(locate(px,py,M.z)) @@ -230,6 +221,7 @@ Turf and target are seperate in case you want to teleport some distance from a t #define LOCATE_COORDS(X, Y, Z) locate(clamp(X, 1, world.maxx), clamp(Y, 1, world.maxy), Z) /proc/getcircle(turf/center, radius) //Uses a fast Bresenham rasterization algorithm to return the turfs in a thin circle. + RETURN_TYPE(/list) if(!radius) return list(center) var/x = 0 @@ -320,6 +312,7 @@ Turf and target are seperate in case you want to teleport some distance from a t //When an AI is activated, it can choose from a list of non-slaved borgs to have as a slave. /proc/freeborg(z) + RETURN_TYPE(/mob/living/silicon/robot) var/list/zs = get_valid_silicon_zs(z) var/select = null @@ -336,6 +329,7 @@ Turf and target are seperate in case you want to teleport some distance from a t //When a borg is activated, it can choose which AI it wants to be slaved to /proc/active_ais(z) + RETURN_TYPE(/list) var/list/zs = get_valid_silicon_zs(z) . = list() @@ -347,6 +341,7 @@ Turf and target are seperate in case you want to teleport some distance from a t //Find an active ai with the least borgs. VERBOSE PROCNAME HUH! /proc/select_active_ai_with_fewest_borgs(z) + RETURN_TYPE(/mob/living/silicon/ai) var/mob/living/silicon/ai/selected var/list/active = active_ais(z) for(var/mob/living/silicon/ai/A in active) @@ -356,6 +351,7 @@ Turf and target are seperate in case you want to teleport some distance from a t return selected /proc/select_active_ai(mob/user, z) + RETURN_TYPE(/mob/living/silicon/ai) var/list/ais = active_ais(z) if(length(ais)) if(user?.client) @@ -364,11 +360,13 @@ Turf and target are seperate in case you want to teleport some distance from a t . = pick(ais) /proc/get_valid_silicon_zs(z) + RETURN_TYPE(/list) if(z) return GetConnectedZlevels(z) return list() //We return an empty list, because we are apparently in nullspace /proc/get_sorted_mobs() + RETURN_TYPE(/list) var/list/old_list = getmobs() var/list/AI_list = list() var/list/Dead_list = list() @@ -398,7 +396,7 @@ Turf and target are seperate in case you want to teleport some distance from a t //Returns a list of all mobs with their name /proc/getmobs() - + RETURN_TYPE(/list) var/list/mobs = sortmobs() var/list/names = list() var/list/creatures = list() @@ -423,10 +421,12 @@ Turf and target are seperate in case you want to teleport some distance from a t return creatures /proc/get_follow_targets() + RETURN_TYPE(/list) return follow_repository.get_follow_targets() //Orders mobs by type then by name /proc/sortmobs() + RETURN_TYPE(/list) var/list/moblist = list() var/list/sortmob = sortAtom(SSmobs.mob_list) for(var/mob/observer/eye/M in sortmob) @@ -451,10 +451,6 @@ Turf and target are seperate in case you want to teleport some distance from a t moblist.Add(M) for(var/mob/living/simple_animal/M in sortmob) moblist.Add(M) -// for(var/mob/living/silicon/hivebot/M in world) -// mob_list.Add(M) -// for(var/mob/living/silicon/hive_mainframe/M in world) -// mob_list.Add(M) return moblist //Forces a variable to be posative @@ -467,7 +463,7 @@ Turf and target are seperate in case you want to teleport some distance from a t // returns the turf located at the map edge in the specified direction relative to A // used for mass driver /proc/get_edge_target_turf(atom/A, direction) - + RETURN_TYPE(/turf) var/turf/target = locate(A.x, A.y, A.z) if(!A || !target) return 0 @@ -491,7 +487,7 @@ Turf and target are seperate in case you want to teleport some distance from a t // note range is non-pythagorean // used for disposal system /proc/get_ranged_target_turf(atom/A, direction, range) - + RETURN_TYPE(/turf) var/x = A.x var/y = A.y if(direction & NORTH) @@ -509,6 +505,7 @@ Turf and target are seperate in case you want to teleport some distance from a t // returns turf relative to A offset in dx and dy tiles // bound to map limits /proc/get_offset_target_turf(atom/A, dx, dy) + RETURN_TYPE(/turf) var/x = min(world.maxx, max(1, A.x + dx)) var/y = min(world.maxy, max(1, A.y + dy)) return locate(x,y,A.z) @@ -537,6 +534,7 @@ Turf and target are seperate in case you want to teleport some distance from a t * Returns a list of atoms. */ /atom/proc/GetAllContents(searchDepth = 5) + RETURN_TYPE(/list) var/list/toReturn = list() for(var/atom/part in contents) @@ -574,6 +572,7 @@ Turf and target are seperate in case you want to teleport some distance from a t return cant_pass /proc/get_step_towards2(atom/ref , atom/trg) + RETURN_TYPE(/turf) var/base_dir = get_dir(ref, get_step_towards(ref,trg)) var/turf/temp = get_step_towards(ref,trg) @@ -609,20 +608,22 @@ Turf and target are seperate in case you want to teleport some distance from a t //Takes: Area type as text string or as typepath OR an instance of the area. //Returns: A list of all areas of that type in the world. /proc/get_areas(areatype) + RETURN_TYPE(/list) if(!areatype) return null if(istext(areatype)) areatype = text2path(areatype) if(isarea(areatype)) var/area/areatemp = areatype areatype = areatemp.type - var/list/areas = new/list() - for(var/area/N in world) + var/list/areas = list() + for(var/area/N as anything in GLOB.areas) if(istype(N, areatype)) areas += N return areas //Takes: Area type as a typepath OR an instance of the area. //Returns: A list of all atoms (objs, turfs, mobs) in areas of that type of that type in the world. /proc/get_area_all_atoms(areatype) + RETURN_TYPE(/list) if(!areatype) return null if(isarea(areatype)) @@ -631,33 +632,35 @@ Turf and target are seperate in case you want to teleport some distance from a t if(!ispath(areatype, /area)) return null - var/list/atoms = new/list() - for(var/area/N in world) + var/list/atoms = list() + for(var/area/N as anything in GLOB.areas) if(istype(N, areatype)) for(var/atom/A in N) atoms += A return atoms -/area/proc/move_contents_to(area/A) - //Takes: Area. - //Returns: Nothing. - //Notes: Attempts to move the contents of one area to another area. - // Movement based on lower left corner. - - if(!A || !src) return - - var/list/turfs_src = get_area_turfs("\ref[src]") +//Takes: Area. +//Returns: Nothing. +//Notes: Attempts to move the contents of one area to another area. +// Movement based on lower left corner. +/area/proc/move_contents_to(area/new_location) + if(!new_location) + return - if(!length(turfs_src)) return + var/list/area_turfs = get_area_turfs(src) + if(!length(area_turfs)) + return //figure out a suitable origin - this assumes the shuttle areas are the exact same size and shape //might be worth doing this with a shuttle core object instead of areas, in the future - var/src_origin = locate(src.x, src.y, src.z) - var/trg_origin = locate(A.x, A.y, A.z) + var/turf/src_origin = locate(x, y, z) + var/turf/target_origin = locate(new_location.x, new_location.y, new_location.z) + + if(!src_origin || !target_origin) + return - if(src_origin && trg_origin) - var/translation = get_turf_translation(src_origin, trg_origin, turfs_src) - translate_turfs(translation, null) + var/translation = get_turf_translation(src_origin, target_origin, area_turfs) + translate_turfs(translation, null) GLOBAL_LIST_INIT(duplicate_object_disallowed_vars, list( @@ -672,11 +675,13 @@ GLOBAL_LIST_INIT(duplicate_object_disallowed_vars, list( "key", "group", "ai_holder", - "natural_weapon" + "natural_weapon", + "extensions" )) /proc/clone_atom(obj/original, copy_vars, atom/loc) + RETURN_TYPE(/obj) if (!original) return if (loc && !isloc(loc)) @@ -710,6 +715,7 @@ GLOBAL_LIST_INIT(duplicate_object_disallowed_vars, list( * Returns List (`/atom`). A list containing all atoms that were created at the target area during the process. */ /area/proc/copy_contents_to(area/target, plating_required) + RETURN_TYPE(/list) if (!target || !src) return var/list/turfs_src = get_area_turfs(type) @@ -744,7 +750,6 @@ GLOBAL_LIST_INIT(duplicate_object_disallowed_vars, list( var/old_dir1 = source_turf.dir var/old_icon_state1 = source_turf.icon_state var/old_icon1 = source_turf.icon - var/old_overlays = source_turf.overlays.Copy() var/old_underlays = source_turf.underlays.Copy() if (plating_required) if (istype(target_turf, get_base_turf_by_area(target_turf))) @@ -754,7 +759,7 @@ GLOBAL_LIST_INIT(duplicate_object_disallowed_vars, list( temp_target_turf.set_dir(old_dir1) temp_target_turf.icon_state = old_icon_state1 temp_target_turf.icon = old_icon1 - temp_target_turf.overlays = old_overlays + temp_target_turf.CopyOverlays(source_turf) temp_target_turf.underlays = old_underlays for (var/obj/obj in source_turf) if (!obj.simulated) @@ -778,11 +783,9 @@ GLOBAL_LIST_INIT(duplicate_object_disallowed_vars, list( var/dy = abs(B.y - A.y) return get_dir(A, B) & (rand() * (dx+dy) < dy ? 3 : 12) -//chances are 1:value. anyprob(1) will always return true -/proc/anyprob(value) - return (rand(1,value)==value) /proc/view_or_range(distance = world.view , center = usr , type) + RETURN_TYPE(/list) switch(type) if("view") . = view(distance,center) @@ -791,6 +794,7 @@ GLOBAL_LIST_INIT(duplicate_object_disallowed_vars, list( return /proc/oview_or_orange(distance = world.view , center = usr , type) + RETURN_TYPE(/list) switch(type) if("view") . = oview(distance,center) @@ -799,6 +803,7 @@ GLOBAL_LIST_INIT(duplicate_object_disallowed_vars, list( return /proc/get_mob_with_client_list() + RETURN_TYPE(/list) var/list/mobs = list() for(var/mob/M in SSmobs.mob_list) if (M.client) @@ -829,6 +834,7 @@ GLOBAL_LIST_INIT(duplicate_object_disallowed_vars, list( return null /proc/get_turf_or_move(turf/location) + RETURN_TYPE(/turf) return get_turf(location) @@ -864,41 +870,6 @@ GLOBAL_LIST_INIT(duplicate_object_disallowed_vars, list( return TRUE -/proc/is_hot(obj/item/W as obj) - switch(W.type) - if(/obj/item/weldingtool) - var/obj/item/weldingtool/WT = W - if(WT.isOn()) - return 3800 - else - return 0 - if(/obj/item/flame/lighter) - if(W:lit) - return 1500 - else - return 0 - if(/obj/item/flame/match) - if(W:lit) - return 1000 - else - return 0 - if(/obj/item/clothing/mask/smokable/cigarette) - if(W:lit) - return 1000 - else - return 0 - if(/obj/item/gun/energy/plasmacutter) - return 3800 - if(/obj/item/melee/energy) - return 3500 - if(/obj/item/blob_tendril) - if (W.damtype == DAMAGE_BURN) - return 1000 - else - return 0 - else - return 0 - //Whether or not the given item counts as sharp in terms of dealing damage /proc/is_sharp(obj/O as obj) if (!O) return 0 @@ -913,31 +884,23 @@ GLOBAL_LIST_INIT(duplicate_object_disallowed_vars, list( return 0 -//For items that can puncture e.g. thick plastic but aren't necessarily sharp -//Returns 1 if the given item is capable of popping things like balloons, inflatable barriers, or cutting police tape. +/** + * For items that can puncture e.g. thick plastic but aren't necessarily sharp. + * + * Returns TRUE if the given item is capable of popping things like balloons, inflatable barriers, or cutting police tape. Also used to determine what items can eyestab. + */ /obj/item/proc/can_puncture() - return src.sharp - -/obj/item/screwdriver/can_puncture() - return 1 - -/obj/item/pen/can_puncture() - return 1 + if(sharp || puncture) return TRUE + return FALSE /obj/item/weldingtool/can_puncture() - return 1 - -/obj/item/screwdriver/can_puncture() - return 1 - -/obj/item/shovel/can_puncture() //includes spades - return 1 + return welding /obj/item/flame/can_puncture() - return src.lit + return lit /obj/item/clothing/mask/smokable/cigarette/can_puncture() - return src.lit + return lit //check if mob is lying down on something we can operate him on. /proc/can_operate(mob/living/carbon/M, mob/living/carbon/user) @@ -946,9 +909,11 @@ GLOBAL_LIST_INIT(duplicate_object_disallowed_vars, list( . = TRUE if(locate(/obj/structure/bed, T)) . = TRUE + if(locate(/obj/structure/roller_bed, T)) + . = TRUE if(locate(/obj/structure/table, T)) . = TRUE - if(locate(/obj/effect/rune, T)) + if(locate(/obj/rune, T)) . = TRUE if(M == user) @@ -1049,6 +1014,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) //Version of view() which ignores darkness, because BYOND doesn't have it. /proc/dview(range = world.view, center, invis_flags = 0) + RETURN_TYPE(/list) if(!center) return @@ -1057,23 +1023,9 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) . = view(range, GLOB.dview_mob) GLOB.dview_mob.loc = null -/mob/dview - invisibility = 101 - density = FALSE - - anchored = TRUE - simulated = FALSE - - see_in_dark = 1e6 - - virtual_mob = null - -/mob/dview/Destroy(forced) - if(forced) - GLOB.dview_mob = new/mob/dview() - return ..() - crash_with("Prevented attempt to delete dview mob: [log_info_line(src)]") - return QDEL_HINT_LETMELIVE // Prevents destruction +/mob/dview/Destroy() + SHOULD_CALL_PARENT(FALSE) + return QDEL_HINT_LETMELIVE /** * Sets the atom's color and light values to those of `origin`. @@ -1086,7 +1038,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) /atom/proc/get_light_and_color(atom/origin) if(origin) color = origin.color - set_light(origin.light_max_bright, origin.light_inner_range, origin.light_outer_range, origin.light_falloff_curve) + set_light(origin.light_range, origin.light_power) // call to generate a stack trace and print to runtime logs @@ -1125,3 +1077,6 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) return matches[1] else return (input("Select a type", "Select Type", matches[1]) as null|anything in matches) + +/proc/REF(input) + return "\ref[input]" diff --git a/code/_helpers/vector.dm b/code/_helpers/vector.dm index b36cdb969b0a9..8bcaa7474b075 100644 --- a/code/_helpers/vector.dm +++ b/code/_helpers/vector.dm @@ -76,9 +76,9 @@ return_location() // and some rounding to stop the increments jumping whole turfs - because byond favours certain angles if(angle > -135 && angle < 45) - angle = Ceil(angle) + angle = ceil(angle) else - angle = Floor(angle) + angle = floor(angle) // calculate the offset per increment step if(abs(angle) in list(0, 45, 90, 135, 180)) // check if the angle is a cardinal @@ -110,6 +110,7 @@ return_location() return sqrt(((offset_x / 32) ** 2) + ((offset_y / 32) ** 2)) /datum/plot_vector/proc/return_location(datum/vector_loc/data) + RETURN_TYPE(/datum/vector_loc) if(!data) data = new() data.loc = locate(round(loc_x / world.icon_size, 1), round(loc_y / world.icon_size, 1), loc_z) @@ -132,4 +133,5 @@ return_turf() var/pixel_y /datum/vector_loc/proc/return_turf() + RETURN_TYPE(/turf) return loc diff --git a/code/_macros.dm b/code/_macros.dm index b80d848a5958b..9b268ad1161bd 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -1,14 +1,27 @@ #define any2ref(x) "\ref[x]" //Do (almost) nothing - indev placeholder for switch case implementations etc -#define NOOP (.=.); +#define NOOP (.=.) #define PUBLIC_GAME_MODE SSticker.master_mode #define CLAMP01(x) clamp(x, 0, 1) +/** + * Get the turf that `A` resides in, regardless of any containers. + * + * Use in favor of `A.loc` or `src.loc` so that things work correctly when + * stored inside an inventory, locker, or other container. + */ #define get_turf(A) get_step(A,0) +/** + * Get the ultimate area of `A`, similarly to [get_turf]. + * + * Use instead of `A.loc.loc`. + */ +#define get_area(A) (isarea(A) ? A : get_step(A, 0)?.loc) + #define get_x(A) (get_step(A, 0)?.x || 0) #define get_y(A) (get_step(A, 0)?.y || 0) @@ -29,6 +42,8 @@ #define isbeam(A) istype(A, /obj/item/projectile/beam) +#define ismagazine(A) istype(A, /obj/item/ammo_magazine) + #define isbrain(A) istype(A, /mob/living/carbon/brain) #define iscarbon(A) istype(A, /mob/living/carbon) @@ -71,6 +86,8 @@ #define isspaceturf(A) istype(A, /turf/space) +#define issimulatedturf(A) istype(A, /turf/simulated) + #define isopenturf(A) istype(A, /turf/simulated/open) #define ispAI(A) istype(A, /mob/living/silicon/pai) @@ -108,7 +125,7 @@ /// Common use #define legacy_chat(target, message) to_target(target, message) #define to_world(message) to_chat(world, message) -#define to_world_log(message) to_target(world.log, message) +#define to_world_log(message) if (istext(world.log)) { rustg_log_write_formatted(world.log, message) } else { to_target(world.log, message) } #define sound_to(target, sound) to_target(target, sound) #define image_to(target, image) to_target(target, image) #define show_browser(target, content, title) to_target(target, browse(content, title)) @@ -122,6 +139,8 @@ #define MAP_IMAGE_PATH "nano/images/[GLOB.using_map.path]/" +#define NANO_TEMPLATES_PATH "nano/templates/" + #define map_image_file_name(z_level) "[GLOB.using_map.path]-[z_level].png" #define RANDOM_BLOOD_TYPE pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") @@ -136,13 +155,15 @@ #define CanPhysicallyInteractWith(user, target) (target.CanUseTopicPhysical(user) == STATUS_INTERACTIVE) +#define QDEL_LIST(x) if(x) { for(var/y in x) qdel(y); x.Cut(); } + #define QDEL_NULL_LIST(x) if(x) { for(var/y in x) { qdel(y) }}; if(x) {x.Cut(); x = null; } // Second x check to handle items that LAZYREMOVE on qdel. #define QDEL_NULL_ASSOC_LIST(x) if(x) { for(var/y in x) { qdel(x[y]) }}; if(x) {x.Cut(); x = null; } #define QDEL_NULL(x) if(x) { qdel(x) ; x = null } -#define QDEL_IN(item, time) addtimer(new Callback(item, /datum/proc/qdel_self), time, TIMER_STOPPABLE) +#define QDEL_IN(item, time) addtimer(CALLBACK(item, TYPE_PROC_REF(/datum, qdel_self)), time, TIMER_STOPPABLE) #define DROP_NULL(x) if(x) { x.dropInto(loc); x = null; } @@ -206,6 +227,8 @@ #define crash_with(X) crash_at(X, __FILE__, __LINE__) +#define TO_HEX_DIGIT(n) ascii2text((n&15) + ((n&15)<10 ? 48 : 87)) + /// Semantic define for a 0 int intended for use as a bitfield #define EMPTY_BITFIELD 0 @@ -268,6 +291,13 @@ #define num2hex(num) num2text(num, 1, 16) + +/// Generate random hex up to char length nibbles +/proc/randhex(nibbles) + for (var/i = 1 to nibbles) + . += num2text(rand(0, 15), 1, 16) + + /// Increase the size of L by 1 at the end. Is the old last entry index. #define LIST_INC(L) ((L).len++) diff --git a/code/_onclick/MouseDrag.dm b/code/_onclick/MouseDrag.dm index 5c6ca56b2e139..aef0e6c945a54 100644 --- a/code/_onclick/MouseDrag.dm +++ b/code/_onclick/MouseDrag.dm @@ -22,10 +22,3 @@ var/atom/A = loc if(A.RelayMouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params, src)) return - - if(over_object) - if(!incapacitated()) - var/obj/item/gun/gun = get_active_hand() - if(istype(gun) && gun.can_autofire()) - set_dir(get_dir(src, over_object)) - gun.Fire(get_turf(over_object), src, params, (get_dist(over_object, src) <= 1), FALSE) diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 160ee8c50b222..fcc895d82904e 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -27,24 +27,46 @@ return var/list/modifiers = params2list(params) - if(modifiers["ctrl"] && modifiers["alt"]) - CtrlAltClickOn(A) - return - if(modifiers["shift"] && modifiers["ctrl"]) - CtrlShiftClickOn(A) - return - if(modifiers["middle"]) - MiddleClickOn(A) - return - if(modifiers["shift"]) - ShiftClickOn(A) - return - if(modifiers["alt"]) // alt and alt-gr (rightalt) - AltClickOn(A) - return - if(modifiers["ctrl"]) - CtrlClickOn(A) - return + if (LAZYACCESS(modifiers, CTRL_CLICK) && LAZYACCESS(modifiers, ALT_CLICK) && LAZYACCESS(modifiers, SHIFT_CLICK)) + if (!control_disabled && A.AICtrlAltShiftClick(src)) + return TRUE + if (CtrlAltShiftClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, CTRL_CLICK) && LAZYACCESS(modifiers, ALT_CLICK)) + if (!control_disabled && A.AICtrlAltClick(src)) + return TRUE + if (CtrlAltClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, SHIFT_CLICK) && LAZYACCESS(modifiers, CTRL_CLICK)) + if (!control_disabled && A.AICtrlShiftClick(src)) + return TRUE + if (CtrlShiftClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, SHIFT_CLICK) && LAZYACCESS(modifiers, ALT_CLICK)) + if (!control_disabled && A.AIAltShiftClick(src)) + return TRUE + if (AltShiftClickOn(A)) + return TRUE + else if (modifiers["middle"]) + if (!control_disabled && A.AIMiddleClick(src)) + return TRUE + if (MiddleClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, SHIFT_CLICK)) + if (!control_disabled && A.AIShiftClick(src)) + return TRUE + if (ShiftClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, ALT_CLICK)) + if (!control_disabled && A.AIAltClick(src)) + return TRUE + if (AltClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, CTRL_CLICK)) + if (!control_disabled && A.AICtrlClick(src)) + return TRUE + if (CtrlClickOn(A)) + return TRUE face_atom(A) // change direction to face what you clicked on @@ -63,26 +85,26 @@ silicon_camera.captureimage(A, usr) return - /* - AI restrained() currently does nothing - if(restrained()) - RestrainedClickOn(A) - else - */ + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + var/secondary_result = A.attack_ai_secondary(src, modifiers) + if(secondary_result == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || secondary_result == SECONDARY_ATTACK_CONTINUE_CHAIN) + return + else if (secondary_result != SECONDARY_ATTACK_CALL_NORMAL) + CRASH("attack_robot_secondary did not return a SECONDARY_ATTACK_* define.") A.add_hiddenprint(src) A.attack_ai(src) /* - AI has no need for the UnarmedAttack() and RangedAttack() procs, + AI has no need for the UnarmedAttack() and ranged_attack() procs, because the AI code is not generic; attack_ai() is used instead. The below is only really for safety, or you can alter the way it functions and re-insert it above. */ -/mob/living/silicon/ai/UnarmedAttack(atom/A) - A.attack_ai(src) +/mob/living/silicon/ai/UnarmedAttack(atom/target, proximity_flag, list/modifiers) + target.attack_ai(src) -/mob/living/silicon/ai/RangedAttack(atom/A, params) - A.attack_ai(src) +/mob/living/silicon/ai/ranged_attack(atom/target, modifiers) + target.attack_ai(src) return TRUE @@ -95,69 +117,42 @@ /atom/proc/attack_ai(mob/user as mob) return -/* - Since the AI handles shift, ctrl, and alt-click differently - than anything else in the game, atoms have separate procs - for AI shift, ctrl, and alt clicking. -*/ - -/mob/living/silicon/ai/CtrlAltClickOn(atom/A) - if(!control_disabled && A.AICtrlAltClick(src)) - return - ..() - -/mob/living/silicon/ai/ShiftClickOn(atom/A) - if(!control_disabled && A.AIShiftClick(src)) - return - ..() - -/mob/living/silicon/ai/CtrlClickOn(atom/A) - if(!control_disabled && A.AICtrlClick(src)) - return TRUE - . = ..() - -/mob/living/silicon/ai/AltClickOn(atom/A) - if(!control_disabled && A.AIAltClick(src)) - return - ..() - -/mob/living/silicon/ai/MiddleClickOn(atom/A) - if(!control_disabled && A.AIMiddleClick(src)) - return - ..() +/atom/proc/attack_ai_secondary(mob/living/user, modifiers) + return SECONDARY_ATTACK_CALL_NORMAL /* The following criminally helpful code is just the previous code cleaned up; I have no idea why it was in atoms.dm instead of respective files. */ -/atom/proc/AICtrlAltClick() +/atom/proc/AICtrlShiftClick() + return FALSE -/obj/machinery/door/airlock/AICtrlAltClick() // Electrifies doors. +/obj/machinery/door/airlock/AICtrlShiftClick() // Electrifies doors. if(usr.incapacitated()) - return + return FALSE if(!electrified_until) // permanent shock Topic(src, list("command"="electrify_permanently", "activate" = "1")) else // disable/6 is not in Topic; disable/5 disables both temporary and permanent shock Topic(src, list("command"="electrify_permanently", "activate" = "0")) - return 1 + return TRUE -/atom/proc/AICtrlShiftClick() - return +/atom/proc/AICtrlAltClick() + return FALSE /atom/proc/AIShiftClick() - return + return FALSE /obj/machinery/door/airlock/AIShiftClick() // Opens and closes doors! if(usr.incapacitated()) - return + return FALSE if(density) Topic(src, list("command"="open", "activate" = "1")) else Topic(src, list("command"="open", "activate" = "0")) - return 1 + return TRUE /atom/proc/AICtrlClick() return FALSE @@ -177,6 +172,18 @@ Topic(src, list("breaker"="1")) return TRUE +/obj/machinery/power/apc/attack_ai_secondary(mob/living/user, modifiers) + . = SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(user.incapacitated()) + return + togglelock(user) + +/obj/machinery/alarm/attack_ai_secondary(mob/living/user, modifiers) + . = SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(user.incapacitated()) + return + togglelock(user) + /obj/machinery/turretid/AICtrlClick() //turns off/on Turrets if(usr.incapacitated()) return FALSE @@ -184,31 +191,37 @@ return TRUE /atom/proc/AIAltClick(atom/A) - return AltClick(A) + return FALSE /obj/machinery/turretid/AIAltClick() //toggles lethal on turrets if(usr.incapacitated()) - return + return FALSE Topic(src, list("command"="lethal", "value"="[!lethal]")) - return 1 - -/obj/machinery/atmospherics/binary/pump/AIAltClick() - return AltClick() + return TRUE /atom/proc/AIMiddleClick(mob/living/silicon/user) - return 0 + return FALSE /obj/machinery/door/airlock/AIMiddleClick() // Toggles door bolt lights. if(usr.incapacitated()) - return + return FALSE if(..()) - return + return TRUE if(!src.lights) Topic(src, list("command"="lights", "activate" = "1")) else Topic(src, list("command"="lights", "activate" = "0")) - return 1 + return TRUE + + +/atom/proc/AIAltShiftClick(atom/A) + return FALSE + + +/atom/proc/AICtrlAltShiftClick(atom/A) + return FALSE + // // Override AdjacentQuick for AltClicking diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index b00dac1a25af7..4eca92ef04448 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -17,9 +17,9 @@ */ /atom/Click(location, control, params) // This is their reaction to being clicked on (standard proc) - var/list/L = params2list(params) - var/dragged = L["drag"] - if(dragged && !L[dragged]) + var/list/modifiers = params2list(params) + var/dragged = LAZYACCESS(modifiers, DRAG) + if(dragged && !LAZYACCESS(modifiers, dragged)) return var/datum/click_handler/click_handler = usr.GetClickHandler() @@ -55,9 +55,9 @@ is recieving it. The most common are: * mob/UnarmedAttack(atom,adjacent) - used here only when adjacent, with no item in hand; in the case of humans, checks gloves - * atom/attackby(item,user) - used only when adjacent - * item/afterattack(atom,user,adjacent,params) - used both ranged and adjacent - * mob/RangedAttack(atom,params) - used only ranged, only used for tk and laser eyes but could be changed + * atom/resolve_attackby(item,user) - used only when adjacent + * item/afterattack(atom,user,adjacent,params) - used for ranged; called when resolve_attackby returns FALSE. + * mob/ranged_attack(atom,params) - used only ranged, only used for tk and laser eyes but could be changed */ /mob/proc/ClickOn(atom/A, params) @@ -67,24 +67,30 @@ next_click = world.time + 1 var/list/modifiers = params2list(params) - if(modifiers["shift"] && modifiers["ctrl"]) - CtrlShiftClickOn(A) - return 1 - if(modifiers["ctrl"] && modifiers["alt"]) - CtrlAltClickOn(A) - return 1 - if(modifiers["middle"]) - MiddleClickOn(A) - return 1 - if(modifiers["shift"]) - ShiftClickOn(A) - return 0 - if(modifiers["alt"]) // alt and alt-gr (rightalt) - AltClickOn(A) - return 1 - if(modifiers["ctrl"]) - CtrlClickOn(A) - return 1 + if (LAZYACCESS(modifiers, CTRL_CLICK) && LAZYACCESS(modifiers, ALT_CLICK) && LAZYACCESS(modifiers, SHIFT_CLICK)) + if (CtrlAltShiftClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, SHIFT_CLICK) && LAZYACCESS(modifiers, CTRL_CLICK)) + if (CtrlShiftClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, CTRL_CLICK) && LAZYACCESS(modifiers, ALT_CLICK)) + if (CtrlAltClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, SHIFT_CLICK) && LAZYACCESS(modifiers, ALT_CLICK)) + if (AltShiftClickOn(A)) + return TRUE + else if (modifiers["middle"]) + if (MiddleClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, SHIFT_CLICK)) + if (ShiftClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, ALT_CLICK)) + if (AltClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, CTRL_CLICK)) + if (CtrlClickOn(A)) + return TRUE if(stat || paralysis || stunned || weakened || sleeping) return @@ -126,16 +132,21 @@ if(W) var/resolved = W.resolve_attackby(A, src, params) if(!resolved && A && W) - W.afterattack(A, src, 1, params) // 1 indicates adjacency + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + var/after_attack_secondary_result = W.afterattack_secondary(A, src, TRUE, params) + if(after_attack_secondary_result == SECONDARY_ATTACK_CALL_NORMAL) + W.afterattack(A, src, TRUE, params) + else + W.afterattack(A, src, TRUE, params) // 1 indicates adjacency else if(ismob(A)) // No instant mob attacking setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - UnarmedAttack(A, 1) + UnarmedAttack(A, TRUE, modifiers) trigger_aiming(TARGET_CAN_CLICK) return 1 - if(!loc.allow_click_through(A, params, src)) // This is going to stop you from telekinesing from inside a closet, but I don't shed many tears for that + if(!loc.allow_click_through(A, modifiers, src)) // This is going to stop you from telekinesing from inside a closet, but I don't shed many tears for that return //Atoms on turfs (not on your person) @@ -144,22 +155,35 @@ if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1)) if(A.Adjacent(src)) // see adjacent.dm if(W) - // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example) - var/resolved = W.resolve_attackby(A,src, params) + // Return TRUE in resolve_attackby() to prevent afterattack() effects (when safely moving items for example) + var/resolved = W.resolve_attackby(A, src, params) if(!resolved && A && W) - W.afterattack(A, src, 1, params) // 1: clicking something Adjacent + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + var/after_attack_secondary_result = W.afterattack_secondary(A, src, TRUE, params) + if(after_attack_secondary_result == SECONDARY_ATTACK_CALL_NORMAL) + W.afterattack(A, src, TRUE, params) + else + W.afterattack(A, src, TRUE, params) // 1 indicates adjacency else if(ismob(A)) // No instant mob attacking setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - UnarmedAttack(A, 1) + UnarmedAttack(A, TRUE, modifiers) trigger_aiming(TARGET_CAN_CLICK) return else // non-adjacent click if(W) - W.afterattack(A, src, 0, params) // 0: not Adjacent + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + var/after_attack_secondary_result = W.afterattack_secondary(A, src, FALSE, params) + if(after_attack_secondary_result == SECONDARY_ATTACK_CALL_NORMAL) + W.afterattack(A, src, TRUE, params) + else + W.afterattack(A, src, FALSE, params) // 1 indicates adjacency else - RangedAttack(A, params) + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + ranged_attack_secondary(A, modifiers) + else + ranged_attack(A, modifiers) trigger_aiming(TARGET_CAN_CLICK) return 1 @@ -177,29 +201,24 @@ return /** - * Called when the mob interacts with something it is adjacent to. For complex mobs, this includes interacting with an empty hand or empty module. Generally, this translates to `attack_hand()`, `attack_robot()`, etc. + * UnarmedAttack: The higest level of mob click chain discounting click itself. * - * Exception: This is also called when telekinesis is used, even if not adjacent to the target. + * This handles, just "clicking on something" without an item. It translates + * into [atom/proc/attack_hand], [atom/proc/attack_animal] etc. * - * **Parameters**: - * - `A` - The atom that was clicked on/interacted with. - * - `proximity_flag` - Whether or not the mob was at range from the targeted atom. Generally, this is always `1` unless telekinesis was used, where this will be `0`. This is not currently passed to attack_hand, and is instead used in human click code to allow glove touches only at melee range. + * Note: proximity_flag here is used to distinguish between normal usage (flag=1), + * and usage when clicking on things telekinetically (flag=0). This proc will + * not be called at ranged except with telekinesis. * - * Returns boolean - Whether or not the mob was able to perform the interaction. + * proximity_flag is not currently passed to attack_hand, and is instead used + * in human click code to allow glove touches only at melee range. + * + * modifiers is a lazy list of click modifiers this attack had, + * used for figuring out different properties of the click, mostly right vs left and such. */ -/mob/proc/UnarmedAttack(atom/A, proximity_flag) - return - -/mob/living/UnarmedAttack(atom/A, proximity_flag) - - if(GAME_STATE < RUNLEVEL_GAME) - to_chat(src, "You cannot attack people before the game has started.") - return 0 - if(stat) - return 0 - - return 1 +/mob/proc/UnarmedAttack(atom/target, proximity_flag, list/modifiers) + return /* Ranged unarmed attack: @@ -216,11 +235,13 @@ * * **Parameters**: * - `A` - The atom that was clicked on/interacted with. - * - `params` - List of click parameters. See BYOND's `CLick()` documentation. + * - `modifiers` - List of click parameters. See BYOND's `CLick()` documentation. * * Returns boolean - Whether or not the mob was able to perform the interaction. */ -/mob/proc/RangedAttack(atom/A, params) +/mob/proc/ranged_attack(atom/A, modifiers) + if(SEND_SIGNAL(src, COMSIG_MOB_ATTACK_RANGED, A, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN) + return TRUE if(!length(mutations)) return FALSE @@ -228,6 +249,10 @@ LaserEyes(A) // moved into a proc below return TRUE +/mob/proc/ranged_attack_secondary(atom/target, list/modifiers) + if(SEND_SIGNAL(src, COMSIG_MOB_ATTACK_RANGED_SECONDARY, target, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN) + return TRUE + /** * Called when a mob attempts to interact with an atom while handcuffed or otherwise restrained. Not currently used. * @@ -243,37 +268,46 @@ * * **Parameters**: * - `A` - The atom that was clicked on. + * + * Returns boolean. Whether or not the interaction was handled. */ /mob/proc/MiddleClickOn(atom/A) - swap_hand() - return + if (A.MiddleClick(src)) + return TRUE + // [SIERRA-EDIT] - SSINPUT + // swap_hand() // SIERRA-EDIT - ORIGINAL + pointed(A) + // [/SIERRA-EDIT] + return TRUE -// In case of use break glass -/* /atom/proc/MiddleClick(mob/M as mob) - return -*/ + return FALSE + /** * Called when the mob shift+clicks on an atom. By default, this calls the targeted atom's `ShiftClick()` proc. * * **Parameters**: * - `A` - The atom that was clicked on. + * + * Returns boolean. Whether or not the interaction was handled. */ /mob/proc/ShiftClickOn(atom/A) - A.ShiftClick(src) - return + return A.ShiftClick(src) /** * Called when a mob shift+clicks on the atom. By default, this calls the examine proc chain. * * **Parameters**: * - `user` - The mob that clicked on the atom. + * + * Returns boolean. Whether or not the interaction was handled. */ /atom/proc/ShiftClick(mob/user) - if(user.client && user.client.eye == user) - user.examinate(src) - return + if (user.client && user.client.eye == user) + examinate(user, src) + return TRUE + return FALSE /** * Called when the mob ctrl+clicks on an atom. By default, this calls the targeted atom's `CtrlClick()` proc. @@ -301,19 +335,19 @@ if(Adjacent(user)) user.start_pulling(src) return TRUE - . = ..() + return ..() /** * Called when the mob alt+clicks on an atom. By default, this calls the targeted atom's `on_click/alt` extension's `on_click()` proc, or the atom's `AltClick()` proc. * * **Parameters**: * - `A` - The atom that was clicked on. + * + * Returns boolean. Whether or not the interaction was handled. */ /mob/proc/AltClickOn(atom/A) var/datum/extension/on_click/alt = get_extension(A, /datum/extension/on_click/alt) - if(alt && alt.on_click(src)) - return - A.AltClick(src) + return alt?.on_click(src) || A.AltClick(src) /** * Called when a mob alt+clicks the atom. By default, this creates and populates the Turf panel, displaying all objects on the atom's turf. @@ -331,7 +365,8 @@ else user.listed_turf = T user.client.statpanel = "Turf" - return 1 + return TRUE + return FALSE /mob/proc/TurfAdjacent(turf/T) return T.AdjacentQuick(src) @@ -339,37 +374,41 @@ /mob/observer/ghost/TurfAdjacent(turf/T) if(!isturf(loc) || !client) return FALSE - return z == T.z && (get_dist(loc, T) <= client.view) + + return z == T.z && (get_dist(loc, T) <= get_view_size_x(client.view)) /** * Called when the mob ctrl+shift+clicks on an atom. By default, calls the atom's `CtrlShiftClick()` proc. * * **Parameters**: * - `A` - The atom that was clicked on. + * + * Returns boolean. Whether or not the interaction was handled. */ /mob/proc/CtrlShiftClickOn(atom/A) - A.CtrlShiftClick(src) - return + return A.CtrlShiftClick(src) /** * Called when a mob ctrl+shift+clicks on the atom. * * **Parameters**: * - `user` - The mob that clicked on the atom. + * + * Returns boolean. Whether or not the interaction was handled. */ /atom/proc/CtrlShiftClick(mob/user) - return + return FALSE /** * Called when the mob ctrl+alt+clicks on an atom. By default, this calls the atom's `CtrlAltClick()` proc or calls the mob's `pointed()` proc. * * **Parameters**: * - `A` - The atom that was clicked on. + * + * Returns boolean. Whether or not the interaction was handled. */ /mob/proc/CtrlAltClickOn(atom/A) - if(A.CtrlAltClick(src)) - return - pointed(A) + return A.CtrlAltClick(src) || pointed(A) /** * Called when a mob ctrl+alt+clicks on the atom. @@ -380,7 +419,56 @@ * Returns boolean - Whather or not the interaction was handled. */ /atom/proc/CtrlAltClick(mob/user) - return + return FALSE + + +/** + * Called when the mob alt+shift+clicks on an atom. By default, this calls the atom's `AltShiftClick()` proc. + * + * **Parameters**: + * - `A` - The atom that was clicked on. + * + * Returns boolean - Whether or not the interaction was handled. + */ +/mob/proc/AltShiftClickOn(atom/A) + return A.AltShiftClick(src) + + +/** + * Called when a mob alt+shift+clicks on the atom. + * + * **Parameters**: + * - `user` - The mob that clicked on the atom. + * + * Returns boolean - Whether or not the interaction was handled. + */ +/atom/proc/AltShiftClick(mob/user) + return FALSE + + +/** + * Called when the mob ctrl+alt+shift+clicks on an atom. By default, this calls the atom's `CtrlAltShiftClick()` proc. + * + * **Parameters**: + * - `A` - The atom that was clicked on. + * + * Returns boolean - Whether or not the interaction was handled. + */ +/mob/proc/CtrlAltShiftClickOn(atom/A) + return A.CtrlAltShiftClick(src) + + +/** + * Called when a mob ctrl+alt+shift+clicks on the atom. + * + * **Parameters**: + * - `user` - The mob that clicked on the atom. + * + * Returns boolean - Whether or not the interaction was handled. + */ +/atom/proc/CtrlAltShiftClick(mob/user) + return FALSE + /* Misc helpers @@ -439,6 +527,7 @@ GLOBAL_LIST_INIT(click_catchers, create_click_catcher()) return QDEL_HINT_LETMELIVE /proc/create_click_catcher() + RETURN_TYPE(/list) . = list() for(var/i = 0, i<15, i++) for(var/j = 0, j<15, j++) @@ -456,3 +545,48 @@ GLOBAL_LIST_INIT(click_catchers, create_click_catcher()) if(T) T.Click(location, control, params) . = 1 + +/client/MouseDown(object, location, control, params) + var/delay = mob.CanMobAutoclick(object, location, params) + if(delay) + selected_target[1] = object + selected_target[2] = params + while(selected_target[1]) + Click(selected_target[1], location, control, selected_target[2]) + sleep(delay) + +/client/MouseUp(object, location, control, params) + selected_target[1] = null + +/client/MouseDrag(src_object,atom/over_object,src_location,over_location,src_control,over_control,params) + if(selected_target[1] && over_object.IsAutoclickable()) + selected_target[1] = over_object + selected_target[2] = params + +/mob/proc/CanMobAutoclick(object, location, params) + return + +/mob/living/carbon/CanMobAutoclick(atom/object, location, params) + if(!object.IsAutoclickable()) + return + var/obj/item/h = get_active_hand() + if(h) + . = h.CanItemAutoclick(object, location, params) + +/obj/item/proc/CanItemAutoclick(object, location, params) + return + +/obj/item/gun/CanItemAutoclick(object, location, params) + return can_autofire + +/obj/item/gun/CanItemAutoclick(object, location, params) + return can_autofire + +/atom/proc/IsAutoclickable() + return TRUE + +/obj/screen/IsAutoclickable() + return FALSE + +/obj/screen/click_catcher/IsAutoclickable() + return TRUE diff --git a/code/_onclick/click_handling.dm b/code/_onclick/click_handling.dm index 839479bb93876..00828a111ca9a 100644 --- a/code/_onclick/click_handling.dm +++ b/code/_onclick/click_handling.dm @@ -26,11 +26,11 @@ var/global/const/CLICK_HANDLER_ALL = ( CLICK_HANDLER_REMOVE_ON_ ..() src.user = user if(flags & (CLICK_HANDLER_REMOVE_ON_MOB_LOGOUT)) - GLOB.logged_out_event.register(user, src, /datum/click_handler/proc/OnMobLogout) + GLOB.logged_out_event.register(user, src, TYPE_PROC_REF(/datum/click_handler, OnMobLogout)) /datum/click_handler/Destroy() if(flags & (CLICK_HANDLER_REMOVE_ON_MOB_LOGOUT)) - GLOB.logged_out_event.unregister(user, src, /datum/click_handler/proc/OnMobLogout) + GLOB.logged_out_event.unregister(user, src, TYPE_PROC_REF(/datum/click_handler, OnMobLogout)) user = null . = ..() diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index c629c0263de04..eb63f166b9114 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -12,24 +12,30 @@ next_click = world.time + 1 var/list/modifiers = params2list(params) - if (modifiers["ctrl"] && modifiers["alt"]) - CtrlAltClickOn(A) - return - if(modifiers["shift"] && modifiers["ctrl"]) - CtrlShiftClickOn(A) - return - if(modifiers["middle"]) - MiddleClickOn(A) - return - if(modifiers["shift"]) - ShiftClickOn(A) - return - if(modifiers["alt"]) // alt and alt-gr (rightalt) - AltClickOn(A) - return - if(modifiers["ctrl"]) - CtrlClickOn(A) - return + if (LAZYACCESS(modifiers, CTRL_CLICK) && LAZYACCESS(modifiers, ALT_CLICK) && LAZYACCESS(modifiers, SHIFT_CLICK)) + if (A.BorgCtrlAltShiftClick(src) || A.AICtrlAltShiftClick(src) || CtrlAltShiftClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, CTRL_CLICK) && LAZYACCESS(modifiers, ALT_CLICK)) + if (A.BorgCtrlAltClick(src) || A.AICtrlAltClick(src) || CtrlAltClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, SHIFT_CLICK) && LAZYACCESS(modifiers, CTRL_CLICK)) + if (A.BorgCtrlShiftClick(src) || A.AICtrlShiftClick(src) || CtrlShiftClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, SHIFT_CLICK) && LAZYACCESS(modifiers, ALT_CLICK)) + if (A.BorgAltShiftClick(src) || A.AIAltShiftClick(src) || AltShiftClickOn(A)) + return TRUE + else if (modifiers["middle"]) + if (A.BorgMiddleClick(src) || A.AIMiddleClick(src) || MiddleClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, SHIFT_CLICK)) + if (A.BorgShiftClick(src) || A.AIShiftClick(src) || ShiftClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, ALT_CLICK)) + if (A.BorgAltClick(src) || A.AIAltClick(src) || AltClickOn(A)) + return TRUE + else if (LAZYACCESS(modifiers, CTRL_CLICK)) + if (A.BorgCtrlClick(src) || A.AICtrlClick(src) || CtrlClickOn(A)) + return TRUE if(incapacitated()) return @@ -47,17 +53,16 @@ to_chat(src, SPAN_CLASS("userdanger", "Your camera isn't functional.")) return - /* - cyborg restrained() currently does nothing - if(restrained()) - RestrainedClickOn(A) - return - */ - var/obj/item/W = get_active_hand() // Cyborgs have no range-checking unless there is item use if(!W) + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + var/secondary_result = A.attack_robot_secondary(src, modifiers) + if(secondary_result == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || secondary_result == SECONDARY_ATTACK_CONTINUE_CHAIN) + return + else if (secondary_result != SECONDARY_ATTACK_CALL_NORMAL) + CRASH("attack_robot_secondary did not return a SECONDARY_ATTACK_* define.") A.add_hiddenprint(src) A.attack_robot(src) return @@ -99,67 +104,34 @@ //Middle click cycles through selected modules. /mob/living/silicon/robot/MiddleClickOn(atom/A) cycle_modules() - return - -//Give cyborgs hotkey clicks without breaking existing uses of hotkey clicks -// for non-doors/apcs -/mob/living/silicon/robot/CtrlShiftClickOn(atom/A) - A.BorgCtrlShiftClick(src) - -/mob/living/silicon/robot/ShiftClickOn(atom/A) - A.BorgShiftClick(src) - -/mob/living/silicon/robot/CtrlClickOn(atom/A) - return A.BorgCtrlClick(src) - -/mob/living/silicon/robot/AltClickOn(atom/A) - A.BorgAltClick(src) + return TRUE /mob/living/silicon/robot/CtrlAltClickOn(atom/A) - A.BorgCtrlAltClick(src) + return pointed(A) -/atom/proc/BorgCtrlShiftClick(mob/living/silicon/robot/user) //forward to human click if not overriden - CtrlShiftClick(user) +/atom/proc/BorgMiddleClick(mob/living/silicon/robot/user) + return FALSE -/obj/machinery/door/airlock/BorgCtrlShiftClick() - AICtrlShiftClick() - -/atom/proc/BorgShiftClick(mob/living/silicon/robot/user) //forward to human click if not overriden - ShiftClick(user) - -/obj/machinery/door/airlock/BorgShiftClick() // Opens and closes doors! Forwards to AI code. - AIShiftClick() - -/atom/proc/BorgCtrlClick(mob/living/silicon/robot/user) //forward to human click if not overriden - return CtrlClick(user) - -/obj/machinery/door/airlock/BorgCtrlClick() // Bolts doors. Forwards to AI code. - return AICtrlClick() +/atom/proc/BorgCtrlAltClick(mob/living/silicon/robot/user) + return FALSE -/obj/machinery/power/apc/BorgCtrlClick() // turns off/on APCs. Forwards to AI code. - return AICtrlClick() +/atom/proc/BorgShiftClick(mob/living/silicon/robot/user) + return FALSE -/obj/machinery/turretid/BorgCtrlClick() //turret control on/off. Forwards to AI code. - return AICtrlClick() +/atom/proc/BorgCtrlClick(mob/living/silicon/robot/user) + return FALSE /atom/proc/BorgAltClick(mob/living/silicon/robot/user) - AltClick(user) - return - -/obj/machinery/door/airlock/BorgAltClick() // Eletrifies doors. Forwards to AI code. - if (usr.a_intent != I_HELP) - AICtrlAltClick() - else - ..() + return FALSE -/obj/machinery/turretid/BorgAltClick() //turret lethal on/off. Forwards to AI code. - AIAltClick() +/atom/proc/BorgCtrlShiftClick(mob/living/silicon/robot/user) + return FALSE -/obj/machinery/atmospherics/binary/pump/BorgAltClick() - return AltClick() +/atom/proc/BorgAltShiftClick(mob/living/silicon/robot/user) + return FALSE -/atom/proc/BorgCtrlAltClick(mob/living/silicon/robot/user) - CtrlAltClick(user) +/atom/proc/BorgCtrlAltShiftClick(mob/living/silicon/robot/user) + return FALSE /* As with AI, these are not used in click code, @@ -169,11 +141,11 @@ clicks, you can do so here, but you will have to change attack_robot() above to the proper function */ -/mob/living/silicon/robot/UnarmedAttack(atom/A) - A.attack_robot(src) +/mob/living/silicon/robot/UnarmedAttack(atom/target, proximity_flag, list/modifiers) + target.attack_robot(src) -/mob/living/silicon/robot/RangedAttack(atom/A, params) - A.attack_robot(src) +/mob/living/silicon/robot/ranged_attack(atom/target, list/modifiers) + target.attack_robot(src) return TRUE /** @@ -182,6 +154,18 @@ * **Parameters**: * - `user` - The mob clicking on the atom. */ -/atom/proc/attack_robot(mob/user as mob) +/atom/proc/attack_robot(mob/user) + if (SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ROBOT, user) & COMPONENT_CANCEL_ATTACK_CHAIN) + return attack_ai(user) - return + +/atom/proc/attack_robot_secondary(mob/user, list/modifiers) + if (SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ROBOT_SECONDARY, user) & COMPONENT_CANCEL_ATTACK_CHAIN) + return + return attack_ai_secondary(user, modifiers) + +/obj/machinery/power/apc/attack_robot_secondary(mob/user, list/modifiers) + return attack_ai_secondary(user, modifiers) + +/obj/machinery/alarm/attack_robot_secondary(mob/user, list/modifiers) + return attack_ai_secondary(user, modifiers) diff --git a/code/_onclick/ghost.dm b/code/_onclick/ghost.dm index 97f2d582d64d3..fc10624b9de0d 100644 --- a/code/_onclick/ghost.dm +++ b/code/_onclick/ghost.dm @@ -30,7 +30,7 @@ // Not all of them require checking, see below var/list/modifiers = params2list(params) - if(modifiers["alt"]) + if(LAZYACCESS(modifiers, ALT_CLICK)) // I'd rather call ..() but who knows what will break if we do that var/datum/extension/on_click/alt = get_extension(A, /datum/extension/on_click/alt) if(alt && alt.on_click(src)) @@ -39,8 +39,8 @@ if(target_turf) AltClickOn(target_turf) return - if(modifiers["shift"]) - examinate(A) + if(LAZYACCESS(modifiers, SHIFT_CLICK)) + examinate(src, A) return A.attack_ghost(src) @@ -55,10 +55,10 @@ if(!istype(user)) return if(user.client && user.client.inquisitive_ghost) - user.examinate(src) + examinate(user, src) return -/obj/effect/portal/attack_ghost(mob/user as mob) +/obj/portal/attack_ghost(mob/user as mob) if(target) user.forceMove(get_turf(target)) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 37276fa1baa25..981f4e62279b4 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -132,3 +132,11 @@ #define ui_pai_light "NORTH,WEST+3:6" #define ui_pai_rest "NORTH,WEST+4:6" +// Ghosts +#define ui_ghost_toggle_darkness "SOUTH:6,CENTER-3:16" +#define ui_ghost_jumptomob "SOUTH:6,CENTER-2:16" +#define ui_ghost_orbit "SOUTH:6,CENTER-1:16" +#define ui_ghost_reenter_corpse "SOUTH:6,CENTER:16" +#define ui_ghost_teleport "SOUTH:6,CENTER+1:16" +#define ui_ghost_mafia "SOUTH:6,CENTER+2:16" +#define ui_ghost_spawners_menu "SOUTH:6,CENTER-4:16" diff --git a/code/_onclick/hud/ability_screen_objects.dm b/code/_onclick/hud/ability_screen_objects.dm index 9f45eb71779f8..70b4656868f61 100644 --- a/code/_onclick/hud/ability_screen_objects.dm +++ b/code/_onclick/hud/ability_screen_objects.dm @@ -2,16 +2,26 @@ name = "Abilities" icon = 'icons/mob/screen_spells.dmi' icon_state = "grey_spell_ready" + screen_loc = ui_spell_master // TODO: Rename var/list/obj/screen/ability/ability_objects = list() var/list/obj/screen/ability/spell_objects = list() - var/showing = 0 // If we're 'open' or not. - + var/showing = FALSE // If we're 'open' or not. var/open_state = "master_open" // What the button looks like when it's 'open', showing the other buttons. var/closed_state = "master_closed" // Button when it's 'closed', hiding everything else. + var/mob/my_mob // The mob that possesses this hud object. - screen_loc = ui_spell_master // TODO: Rename - var/mob/my_mob = null // The mob that possesses this hud object. +/obj/screen/movable/ability_master/Destroy() + remove_all_abilities() + LAZYCLEARLIST(ability_objects) + LAZYCLEARLIST(spell_objects) + if(my_mob) + my_mob.ability_master = null + if(my_mob.client && my_mob.client.screen) + my_mob.client.screen -= src + my_mob = null + return ..() + /obj/screen/movable/ability_master/New(newloc,owner) if(owner) @@ -21,18 +31,7 @@ CRASH("ERROR: ability_master's New() was not given an owner argument. This is a bug.") ..() -/obj/screen/movable/ability_master/Destroy() - . = ..() - //Get rid of the ability objects. - remove_all_abilities() - ability_objects.Cut() - // After that, remove ourselves from the mob seeing us, so we can qdel cleanly. - if(my_mob) - my_mob.ability_master = null - if(my_mob.client && my_mob.client.screen) - my_mob.client.screen -= src - my_mob = null /obj/screen/movable/ability_master/MouseDrop() if(showing) return @@ -52,14 +51,14 @@ my_mob.client.screen -= O // O.handle_icon_updates = 0 showing = 0 - overlays.Cut() - overlays.Add(closed_state) + ClearOverlays() + AddOverlays(closed_state) else if(forced_state != 1) // We're opening it, show the icons. open_ability_master() update_abilities(1) showing = 1 - overlays.Cut() - overlays.Add(open_state) + ClearOverlays() + AddOverlays(open_state) update_icon() /obj/screen/movable/ability_master/proc/open_ability_master() @@ -99,7 +98,7 @@ if(length(ability_objects)) set_invisibility(0) else - set_invisibility(101) + set_invisibility(INVISIBILITY_ABSTRACT) /obj/screen/movable/ability_master/proc/add_ability(name_given) if(!name) return @@ -137,9 +136,9 @@ return A return null -/obj/screen/movable/ability_master/proc/get_ability_by_proc_ref(proc_ref) +/obj/screen/movable/ability_master/proc/get_ability_by_PROC_REF(PROC_REF) for(var/obj/screen/ability/verb_based/V in ability_objects) - if(V.verb_to_call == proc_ref) + if(V.verb_to_call == PROC_REF) return V return null @@ -189,10 +188,10 @@ return ..() /obj/screen/ability/on_update_icon() - overlays.Cut() + ClearOverlays() icon_state = "[background_base_state]_spell_base" - overlays += ability_icon_state + AddOverlays(ability_icon_state) /obj/screen/ability/Click() if(!usr) @@ -242,7 +241,7 @@ message_admins("ERROR: add_verb_ability() was not given an object in its arguments.") if(!verb_given) message_admins("ERROR: add_verb_ability() was not given a verb/proc in its arguments.") - if(get_ability_by_proc_ref(verb_given)) + if(get_ability_by_PROC_REF(verb_given)) return // Duplicate var/obj/screen/ability/verb_based/A = new /obj/screen/ability/verb_based() A.ability_master = src @@ -266,7 +265,7 @@ message_admins("ERROR: add_ling_ability() was not given an object in its arguments.") if(!verb_given) message_admins("ERROR: add_ling_ability() was not given a verb/proc in its arguments.") - if(get_ability_by_proc_ref(verb_given)) + if(get_ability_by_PROC_REF(verb_given)) return // Duplicate var/obj/screen/ability/verb_based/changeling/A = new /obj/screen/ability/verb_based/changeling() A.ability_master = src @@ -363,8 +362,7 @@ if(last_charge == spell.charge_counter && !forced_update) return //nothing to see here - - overlays -= spell.hud_state + CutOverlays(spell.hud_state) if(spell.charge_type == Sp_RECHARGE || spell.charge_type == Sp_CHARGES) if(spell.charge_counter < spell.charge_max) @@ -372,27 +370,27 @@ if(spell.charge_counter > 0) var/icon/partial_charge = icon(src.icon, "[spell_base]_spell_ready") partial_charge.Crop(1, 1, partial_charge.Width(), round(partial_charge.Height() * spell.charge_counter / spell.charge_max)) - overlays += partial_charge + AddOverlays(partial_charge) if(last_charged_icon) - overlays -= last_charged_icon + CutOverlays(last_charged_icon) last_charged_icon = partial_charge else if(last_charged_icon) - overlays -= last_charged_icon + CutOverlays(last_charged_icon) last_charged_icon = null else icon_state = "[spell_base]_spell_ready" if(last_charged_icon) - overlays -= last_charged_icon + CutOverlays(last_charged_icon) else icon_state = "[spell_base]_spell_ready" - overlays += spell.hud_state + AddOverlays(spell.hud_state) last_charge = spell.charge_counter - overlays -= "silence" + CutOverlays("silence") if(spell.silenced) - overlays += "silence" + AddOverlays("silence") /obj/screen/ability/spell/on_update_icon(forced = 0) update_charge(forced) diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index f62a50572e775..d7dae35aa05f6 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -64,10 +64,10 @@ if(AB_ITEM, AB_ITEM_USE_ICON) if(target) var/obj/item/item = target - item.ui_action_click() + item.ui_action_click(owner) //if(AB_SPELL) // if(target) - // var/obj/effect/proc_holder/spell = target + // var/obj/proc_holder/spell = target // spell.Click() if(AB_INNATE) if(!active) @@ -120,10 +120,20 @@ /obj/screen/movable/action_button var/datum/action/owner screen_loc = "WEST,NORTH" + /// String. Title of the tooltip displayed on hover. Set during `Initialize()`, defaults to `owner.target.name`. + var/tooltip_title + + +/obj/screen/movable/action_button/Initialize(mapload, _owner) + . = ..(mapload) + owner = _owner + if (owner?.target) + tooltip_title = owner.target.name + /obj/screen/movable/action_button/Click(location,control,params) var/list/modifiers = params2list(params) - if(modifiers["shift"]) + if(LAZYACCESS(modifiers, SHIFT_CLICK)) moved = 0 return 1 if(usr.next_move >= world.time) // Is this needed ? @@ -131,13 +141,22 @@ owner.Trigger() return 1 + +/obj/screen/movable/action_button/MouseEntered(location, control, params) + openToolTip(usr, src, params, tooltip_title, name) + + +/obj/screen/movable/action_button/MouseExited(location, control, params) + closeToolTip(usr) + + /obj/screen/movable/action_button/proc/UpdateIcon() if(!owner) return icon = owner.button_icon icon_state = owner.background_icon_state - overlays.Cut() + ClearOverlays() var/image/img if(owner.action_type == AB_ITEM && owner.target) var/obj/item/I = owner.target @@ -146,7 +165,7 @@ img = image(owner.button_icon,src,owner.button_icon_state) img.pixel_x = 0 img.pixel_y = 0 - overlays += img + AddOverlays(img) if(!owner.IsAvailable()) color = rgb(128,0,0,128) @@ -181,9 +200,9 @@ return /obj/screen/movable/action_button/hide_toggle/UpdateIcon() - overlays.Cut() + ClearOverlays() var/image/img = image(icon,src,hidden?"show":"hide") - overlays += img + AddOverlays(img) return //This is the proc used to update all the action buttons. Properly defined in /mob/living diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index c5278a52db685..3c7cbb6c2d5e7 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -7,7 +7,6 @@ /mob/proc/overlay_fullscreen(category, type, severity) var/obj/screen/fullscreen/screen = screens[category] - if(screen) if(screen.type != type) clear_fullscreen(category, FALSE) @@ -23,6 +22,12 @@ screens[category] = screen if(client && (stat != DEAD || screen.allstate)) + if(screen.scale_to_view) + var/list/viewsize = getviewsize(client.view) + var/scale_x = viewsize[1] / (screen.icon_width / world.icon_size) + var/scale_y = viewsize[2] / (screen.icon_height / world.icon_size) + screen.SetTransform(scale_x = scale_x, scale_y = scale_y) + client.screen += screen return screen @@ -68,6 +73,14 @@ mouse_opacity = 0 var/severity = 0 var/allstate = 0 //shows if it should show up for dead people too + /// If the fullscreen image should be scaled to client view sise + var/scale_to_view = FALSE + +/obj/screen/fullscreen/Initialize() + . = ..() + var/icon/screen_icon = icon(icon) + icon_width = screen_icon.Width() + icon_height = screen_icon.Height() /obj/screen/fullscreen/Destroy() severity = 0 @@ -76,38 +89,43 @@ /obj/screen/fullscreen/brute icon_state = "brutedamageoverlay" layer = DAMAGE_LAYER + scale_to_view = TRUE /obj/screen/fullscreen/oxy icon_state = "oxydamageoverlay" layer = DAMAGE_LAYER + scale_to_view = TRUE /obj/screen/fullscreen/crit icon_state = "passage" layer = CRIT_LAYER + scale_to_view = TRUE /obj/screen/fullscreen/blind icon_state = "blackimageoverlay" layer = BLIND_LAYER + scale_to_view = TRUE /obj/screen/fullscreen/blackout icon = 'icons/mob/screen1.dmi' icon_state = "black" - screen_loc = "WEST,SOUTH to EAST,NORTH" + screen_loc = ui_entire_screen layer = BLIND_LAYER /obj/screen/fullscreen/impaired icon_state = "impairedoverlay" layer = IMPAIRED_LAYER + scale_to_view = TRUE /obj/screen/fullscreen/blurry icon = 'icons/mob/screen1.dmi' - screen_loc = "WEST,SOUTH to EAST,NORTH" + screen_loc = ui_entire_screen icon_state = "blurry" alpha = 100 /obj/screen/fullscreen/flash icon = 'icons/mob/screen1.dmi' - screen_loc = "WEST,SOUTH to EAST,NORTH" + screen_loc = ui_entire_screen icon_state = "flash" /obj/screen/fullscreen/flash/noise @@ -115,7 +133,7 @@ /obj/screen/fullscreen/high icon = 'icons/mob/screen1.dmi' - screen_loc = "WEST,SOUTH to EAST,NORTH" + screen_loc = ui_entire_screen icon_state = "druggy" /obj/screen/fullscreen/noise @@ -144,7 +162,9 @@ /obj/screen/fullscreen/fishbed icon_state = "fishbed" allstate = 1 + scale_to_view = TRUE /obj/screen/fullscreen/pain icon_state = "brutedamageoverlay6" - alpha = 0 \ No newline at end of file + alpha = 0 + scale_to_view = TRUE diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm new file mode 100644 index 0000000000000..f9248fc2220d9 --- /dev/null +++ b/code/_onclick/hud/ghost.dm @@ -0,0 +1,51 @@ +/obj/screen/ghost + icon = 'icons/mob/screen_ghost.dmi' + +/obj/screen/ghost/MouseEntered(location, control, params) + . = ..() + flick(icon_state + "_anim", src) + +/obj/screen/ghost/jumptomob + name = "Jump to mob" + icon_state = "jumptomob" + screen_loc = ui_ghost_jumptomob + +/obj/screen/ghost/jumptomob/Click() + var/mob/observer/ghost/G = usr + G.jumptomob() + +/obj/screen/ghost/orbit + name = "Orbit" + icon_state = "orbit" + screen_loc = ui_ghost_orbit + +/obj/screen/ghost/orbit/Click() + var/mob/observer/ghost/G = usr + G.follow() + +/obj/screen/ghost/reenter_corpse + name = "Reenter corpse" + icon_state = "reenter_corpse" + screen_loc = ui_ghost_reenter_corpse + +/obj/screen/ghost/reenter_corpse/Click() + var/mob/observer/ghost/G = usr + G.reenter_corpse() + +/obj/screen/ghost/teleport + name = "Teleport" + icon_state = "teleport" + screen_loc = ui_ghost_teleport + +/obj/screen/ghost/teleport/Click() + var/mob/observer/ghost/G = usr + G.dead_tele() + +/obj/screen/ghost/toggle_darkness + name = "Toggle Darkness" + icon_state = "toggle_darkness" + screen_loc = ui_ghost_toggle_darkness + +/obj/screen/ghost/toggle_darkness/Click() + var/mob/observer/ghost/G = usr + G.toggle_darkness() diff --git a/code/_onclick/hud/global_hud.dm b/code/_onclick/hud/global_hud.dm index 72f36fbba958b..fe46604ab3cc6 100644 --- a/code/_onclick/hud/global_hud.dm +++ b/code/_onclick/hud/global_hud.dm @@ -14,7 +14,7 @@ GLOBAL_DATUM_INIT(global_hud, /datum/global_hud, new()) /datum/global_hud/proc/setup_overlay(icon_state) var/obj/screen/screen = new /obj/screen() - screen.screen_loc = "1,1" + screen.screen_loc = "CENTER-7,CENTER-7" screen.icon = 'icons/obj/hud_full.dmi' screen.icon_state = icon_state screen.mouse_opacity = 0 diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 237ce3175f2a4..3dc005d02518a 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -62,7 +62,7 @@ var/stamina = mymob.get_stamina() if(stamina < 100) stamina_bar.invisibility = 0 - stamina_bar.icon_state = "priv_prog_bar_[Floor(stamina/5)*5]" + stamina_bar.icon_state = "priv_prog_bar_[floor(stamina/5)*5]" /datum/hud/proc/hidden_inventory_update() if(!mymob) return @@ -176,9 +176,9 @@ to_chat(usr, SPAN_WARNING("Inventory hiding is currently only supported for human mobs, sorry.")) return - if(!client) return - if(client.view != world.view) + if(!client) return + if(hud_used.hud_shown) hud_used.hud_shown = 0 if(src.hud_used.adding) @@ -233,8 +233,6 @@ return if(!client) return - if(client.view != world.view) - return if(hud_used.hud_shown) hud_used.hud_shown = 0 diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 906e22d1b4103..01c4dbf6c6c98 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -255,8 +255,8 @@ mymob.zone_sel.icon = ui_style mymob.zone_sel.color = ui_color mymob.zone_sel.alpha = ui_alpha - mymob.zone_sel.overlays.Cut() - mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]") + mymob.zone_sel.ClearOverlays() + mymob.zone_sel.AddOverlays(image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]")) hud_elements |= mymob.zone_sel //Handle the gun settings buttons diff --git a/code/_onclick/hud/movable_screen_objects.dm b/code/_onclick/hud/movable_screen_objects.dm index bcdcf97562a18..aaa0fb8ad4ebf 100644 --- a/code/_onclick/hud/movable_screen_objects.dm +++ b/code/_onclick/hud/movable_screen_objects.dm @@ -45,16 +45,16 @@ screen_loc = "[screen_loc_X[1]]:[pix_X],[screen_loc_Y[1]]:[pix_Y]" /obj/screen/movable/proc/encode_screen_X(X, mob/viewer) - var/view = viewer.client ? viewer.client.view : world.view + var/view = viewer.client ? get_view_size_x(viewer.client.view) : world.view if(X > view+1) - . = "EAST-[view*2 + 1-X]" + . = "EAST-[view * 2 + 1 - X]" else if(X < view+1) . = "WEST+[X-1]" else . = "CENTER" /obj/screen/movable/proc/decode_screen_X(X, mob/viewer) - var/view = viewer.client ? viewer.client.view : world.view + var/view = viewer.client ? get_view_size_x(viewer.client.view) : world.view //Find EAST/WEST implementations if(findtext(X,"EAST-")) var/num = text2num(copytext(X,6)) //Trim EAST- @@ -70,28 +70,28 @@ . = view+1 /obj/screen/movable/proc/encode_screen_Y(Y, mob/viewer) - var/view = viewer.client ? viewer.client.view : world.view - if(Y > view+1) - . = "NORTH-[view*2 + 1-Y]" - else if(Y < viewer.client.view+1) - . = "SOUTH+[Y-1]" + var/view = viewer.client ? get_view_size_y(viewer.client.view) : world.view + if(Y > view + 1) + . = "NORTH-[view *2 + 1 - Y]" + else if(Y < view + 1) + . = "SOUTH+[Y - 1]" else . = "CENTER" /obj/screen/movable/proc/decode_screen_Y(Y, mob/viewer) - var/view = viewer.client ? viewer.client.view : world.view + var/view = viewer.client ? get_view_size_y(viewer.client.view) : world.view if(findtext(Y,"NORTH-")) var/num = text2num(copytext(Y,7)) //Trim NORTH- if(!num) num = 0 - . = view*2 + 1 - num + . = view * 2 + 1 - num else if(findtext(Y,"SOUTH+")) var/num = text2num(copytext(Y,7)) //Time SOUTH+ if(!num) num = 0 - . = num+1 + . = num + 1 else if(findtext(Y,"CENTER")) - . = view+1 + . = view + 1 //Debug procs /client/proc/test_movable_UI() diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm index f32278d3f620a..3ca35b71f7e7e 100644 --- a/code/_onclick/hud/other_mobs.dm +++ b/code/_onclick/hud/other_mobs.dm @@ -47,8 +47,8 @@ mymob.zone_sel = new /obj/screen/zone_sel() mymob.zone_sel.icon = 'icons/mob/screen1_construct.dmi' - mymob.zone_sel.overlays.Cut() - mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]") + mymob.zone_sel.ClearOverlays() + mymob.zone_sel.AddOverlays(image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]")) mymob.purged = new /obj/screen() mymob.purged.icon = 'icons/mob/screen1_construct.dmi' diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm new file mode 100644 index 0000000000000..450a0130e7709 --- /dev/null +++ b/code/_onclick/hud/radial.dm @@ -0,0 +1,359 @@ +#define NEXT_PAGE_ID "__next__" +#define DEFAULT_CHECK_DELAY 20 + +var/global/list/radial_menus = list() + +/obj/screen/radial/Destroy() + parent = null + return ..() + +/obj/screen/radial + icon = 'icons/screen/radial.dmi' + layer = HUD_ABOVE_ITEM_LAYER + plane = HUD_PLANE + var/datum/radial_menu/parent + +/obj/screen/radial/slice + icon_state = "radial_slice" + var/choice + var/next_page = FALSE + var/tooltips = FALSE + +/obj/screen/radial/slice/MouseEntered(location, control, params) + . = ..() + icon_state = "radial_slice_focus" + if(tooltips) + openToolTip(usr, src, params, title = name) + +/obj/screen/radial/slice/MouseExited(location, control, params) + . = ..() + icon_state = "radial_slice" + if(tooltips) + closeToolTip(usr) + +/obj/screen/radial/slice/Click(location, control, params) + if(parent && usr.client == parent.current_user) + if(next_page) + parent.next_page() + else + parent.element_chosen(choice,usr) + +/obj/screen/radial/center + name = "Close Menu" + icon_state = "radial_center" + +/obj/screen/radial/center/MouseEntered(location, control, params) + . = ..() + icon_state = "radial_center_focus" + +/obj/screen/radial/center/MouseExited(location, control, params) + . = ..() + icon_state = "radial_center" + +/obj/screen/radial/center/Click(location, control, params) + if(usr.client == parent.current_user) + parent.finished = TRUE + +/datum/radial_menu + var/list/choices = list() //List of choice id's + var/list/choices_icons = list() //choice_id -> icon + var/list/choices_values = list() //choice_id -> choice + var/list/page_data = list() //list of choices per page + + + var/selected_choice + var/list/obj/screen/elements = list() + var/obj/screen/radial/center/close_button + var/client/current_user + var/atom/anchor + var/image/menu_holder + var/finished = FALSE + var/datum/callback/custom_check_callback + var/next_check = 0 + var/check_delay = DEFAULT_CHECK_DELAY + + var/radius = 32 + var/starting_angle = 0 + var/ending_angle = 360 + var/zone = 360 + var/min_angle = 45 //Defaults are setup for this value, if you want to make the menu more dense these will need changes. + var/max_elements + var/pages = 1 + var/current_page = 1 + + var/hudfix_method = TRUE //TRUE to change anchor to user, FALSE to shift by py_shift + var/py_shift = 0 + var/entry_animation = TRUE + +//If we swap to vis_contens inventory these will need a redo +/datum/radial_menu/proc/check_screen_border(mob/user) + var/atom/movable/AM = anchor + if(!istype(AM) || !AM.screen_loc) + return + if(AM in user.client.screen) + if(hudfix_method) + anchor = user + else + py_shift = 32 + restrict_to_dir(NORTH) //I was going to parse screen loc here but that's more effort than it's worth. + +//Sets defaults +//These assume 45 deg min_angle +/datum/radial_menu/proc/restrict_to_dir(dir) + switch(dir) + if(NORTH) + starting_angle = 270 + ending_angle = 135 + if(SOUTH) + starting_angle = 90 + ending_angle = 315 + if(EAST) + starting_angle = 0 + ending_angle = 225 + if(WEST) + starting_angle = 180 + ending_angle = 45 + +/datum/radial_menu/proc/setup_menu(use_tooltips) + if(ending_angle > starting_angle) + zone = ending_angle - starting_angle + else + zone = 360 - starting_angle + ending_angle + + max_elements = round(zone / min_angle) + var/paged = max_elements < length(choices) + if(length(elements) < max_elements) + var/elements_to_add = max_elements - length(elements) + for(var/i in 1 to elements_to_add) //Create all elements + var/obj/screen/radial/slice/new_element = new /obj/screen/radial/slice + new_element.tooltips = use_tooltips + new_element.parent = src + elements += new_element + + var/page = 1 + page_data = list(null) + var/list/current = list() + var/list/choices_left = choices.Copy() + while(length(choices_left)) + if(length(current) == max_elements) + page_data[page] = current + page++ + LIST_INC(page_data) + current = list() + if(paged && length(current) == max_elements - 1) + current += NEXT_PAGE_ID + continue + else + current += popleft(choices_left) + if(paged && length(current) < max_elements) + current += NEXT_PAGE_ID + + page_data[page] = current + pages = page + current_page = 1 + update_screen_objects(anim = entry_animation) + +/datum/radial_menu/proc/update_screen_objects(anim = FALSE) + var/list/page_choices = page_data[current_page] + var/angle_per_element = round(zone / length(page_choices)) + for(var/i in 1 to length(elements)) + var/obj/screen/radial/E = elements[i] + var/angle = Wrap(starting_angle + (i - 1) * angle_per_element,0,360) + if(i > length(page_choices)) + HideElement(E) + else + SetElement(E,page_choices[i],angle,anim = anim,anim_order = i) + +/datum/radial_menu/proc/HideElement(obj/screen/radial/slice/E) + E.ClearOverlays() + E.alpha = 0 + E.name = "None" + E.maptext = null + E.mouse_opacity = 0 + E.choice = null + E.next_page = FALSE + +/datum/radial_menu/proc/SetElement(obj/screen/radial/slice/E,choice_id,angle,anim,anim_order) + //Position + var/py = round(cos(angle) * radius) + py_shift + var/px = round(sin(angle) * radius) + if(anim) + var/timing = anim_order * 0.5 + var/matrix/starting = matrix() + starting.Scale(0.1,0.1) + E.transform = starting + var/matrix/TM = matrix() + animate(E,pixel_x = px,pixel_y = py, transform = TM, time = timing) + else + E.pixel_y = py + E.pixel_x = px + + //Visuals + E.alpha = 255 + E.mouse_opacity = 1 + E.ClearOverlays() + if(choice_id == NEXT_PAGE_ID) + E.name = "Next Page" + E.next_page = TRUE + E.AddOverlays("radial_next") + else + if(istext(choices_values[choice_id])) + E.name = choices_values[choice_id] + else + var/atom/movable/AM = choices_values[choice_id] //Movables only + E.name = AM.name + E.choice = choice_id + E.maptext = null + E.next_page = FALSE + if(choices_icons[choice_id]) + E.AddOverlays(choices_icons[choice_id]) + +/datum/radial_menu/New() + close_button = new + close_button.parent = src + +/datum/radial_menu/proc/Reset() + choices.Cut() + choices_icons.Cut() + choices_values.Cut() + current_page = 1 + +/datum/radial_menu/proc/element_chosen(choice_id,mob/user) + selected_choice = choices_values[choice_id] + +/datum/radial_menu/proc/get_next_id() + return "c_[length(choices)]" + +/datum/radial_menu/proc/set_choices(list/new_choices, use_tooltips, use_labels) + if(length(choices)) + Reset() + for(var/E in new_choices) + var/id = get_next_id() + choices += id + choices_values[id] = E + if(new_choices[E]) + var/I = extract_image(new_choices[E], use_labels) + if(I) + choices_icons[id] = I + setup_menu(use_tooltips) + + +/datum/radial_menu/proc/extract_image(image/E, use_labels) + var/mutable_appearance/MA = new /mutable_appearance(E) + if(MA) + MA.layer = HUD_ABOVE_HUD_LAYER + MA.appearance_flags |= RESET_TRANSFORM + if(use_labels) + MA.maptext_width = 64 + MA.maptext_height = 64 + MA.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA + MA.maptext_x = -round(MA.maptext_width/2) + 16 + MA.maptext_x = -round(MA.maptext_height/2) + 16 + MA.maptext = STYLE_SMALLFONTS_OUTLINE("
[E.name]
", 7, COLOR_WHITE, COLOR_BLACK) + + return MA + + +/datum/radial_menu/proc/next_page() + if(pages > 1) + current_page = Wrap(current_page + 1,1,pages+1) + update_screen_objects() + +/datum/radial_menu/proc/show_to(mob/M) + if(current_user) + hide() + if(!M.client || !anchor) + return + current_user = M.client + //Blank + menu_holder = image(icon = 'icons/effects/effects.dmi', loc = anchor, icon_state = "nothing", layer = HUD_ABOVE_ITEM_LAYER) + menu_holder.appearance_flags |= KEEP_APART + menu_holder.vis_contents |= (elements + close_button) + current_user.images += menu_holder + +/datum/radial_menu/proc/hide() + if(current_user) + current_user.images -= menu_holder + +/datum/radial_menu/proc/wait(atom/user, atom/anchor, require_near = FALSE, list/check_locs) + while (current_user && !finished && !selected_choice) + if(require_near && !in_range(anchor, user)) + return + + for(var/atom/movable/thing in check_locs) + if(QDELETED(thing) || thing.loc != check_locs[thing]) + return + + if(custom_check_callback && next_check < world.time) + if(!invoke(custom_check_callback)) + return + else + next_check = world.time + check_delay + stoplag(1) + +/datum/radial_menu/Destroy() + Reset() + hide() + QDEL_NULL_LIST(elements) + QDEL_NULL(close_button) + QDEL_NULL(custom_check_callback) + return ..() + +/* + Presents radial menu to user anchored to anchor (or user if the anchor is currently in users screen) + Choices should be a list where list keys are movables or text used for element names and return value + and list values are movables/icons/images used for element icons +*/ +/proc/show_radial_menu(mob/user, atom/anchor, list/choices, uniqueid, radius, datum/callback/custom_check, require_near = FALSE, tooltips = FALSE, no_repeat_close = FALSE, list/check_locs, use_labels = FALSE) + if(!user || !anchor || !length(choices)) + return + if (istype(user.loc, /mob/living/exosuit)) + anchor = user.loc + if(!uniqueid) + uniqueid = "defmenu_[any2ref(user)]_[any2ref(anchor)]" + + if(check_locs) + for(var/atom/thing in check_locs) + check_locs[thing] = thing.loc + + if(global.radial_menus[uniqueid]) + if(!no_repeat_close) + var/datum/radial_menu/menu = global.radial_menus[uniqueid] + menu.finished = TRUE + return + + var/datum/radial_menu/menu = new + global.radial_menus[uniqueid] = menu + if(radius) + menu.radius = radius + if(istype(custom_check)) + menu.custom_check_callback = custom_check + menu.anchor = anchor + menu.check_screen_border(user) //Do what's needed to make it look good near borders or on hud + menu.set_choices(choices, tooltips, use_labels) + menu.show_to(user) + menu.wait(user, anchor, require_near, check_locs) + var/answer = menu.selected_choice + qdel(menu) + global.radial_menus -= uniqueid + return answer + +#define RADIAL_INPUT(user, choices) show_radial_menu(user, user, choices) + +/* + Helper to make a radial menu button with a name and icon for a given atom. +*/ +/proc/make_item_radial_menu_button(atom/movable/AM, name_prefix = "", name_suffix = "") + var/image/radial_button = new + radial_button.appearance = AM + radial_button.plane = FLOAT_PLANE + radial_button.layer = FLOAT_LAYER + radial_button.name = "[name_prefix][AM.name][name_suffix]" + return radial_button + +/* + Helper to make a radial menu button for a set of atoms with their names and icons. +*/ +/proc/make_item_radial_menu_choices(list/items, name_prefix = "", name_suffix = "") + for(var/atom/movable/AM in items) + LAZYSET(., AM, make_item_radial_menu_button(AM, name_prefix, name_suffix)) diff --git a/code/_onclick/hud/radial_persistent.dm b/code/_onclick/hud/radial_persistent.dm new file mode 100644 index 0000000000000..6c71762b68b26 --- /dev/null +++ b/code/_onclick/hud/radial_persistent.dm @@ -0,0 +1,71 @@ +/* + A derivative of radial menu which persists onscreen until closed and invokes a callback each time an element is clicked +*/ + +/obj/screen/radial/persistent/center + name = "Close Menu" + icon_state = "radial_center" + +/obj/screen/radial/persistent/center/Click(location, control, params) + if(usr.client == parent.current_user) + parent.element_chosen(null,usr) + +/obj/screen/radial/persistent/center/MouseEntered(location, control, params) + . = ..() + icon_state = "radial_center_focus" + +/obj/screen/radial/persistent/center/MouseExited(location, control, params) + . = ..() + icon_state = "radial_center" + +/datum/radial_menu/persistent + var/uniqueid + var/datum/callback/select_proc_callback + +/datum/radial_menu/persistent/New() + close_button = new /obj/screen/radial/persistent/center + close_button.parent = src + +/datum/radial_menu/persistent/element_chosen(choice_id,mob/user) + invoke(select_proc_callback, choices_values[choice_id]) + +/datum/radial_menu/persistent/proc/change_choices(list/newchoices, tooltips) + if(!length(newchoices)) + return + Reset() + set_choices(newchoices,tooltips) + +/datum/radial_menu/persistent/Destroy() + QDEL_NULL(select_proc_callback) + global.radial_menus -= uniqueid + Reset() + hide() + return ..() + +/* + Creates a persistent radial menu and shows it to the user, anchored to anchor (or user if the anchor is currently in users screen). + Choices should be a list where list keys are movables or text used for element names and return value + and list values are movables/icons/images used for element icons + Select_proc is the proc to be called each time an element on the menu is clicked, and should accept the chosen element as its final argument + Clicking the center button will return a choice of null +*/ +/proc/show_radial_menu_persistent(mob/user, atom/anchor, list/choices, datum/callback/select_proc, uniqueid, radius, tooltips = FALSE) + if(!user || !anchor || !length(choices) || !select_proc) + return + if(!uniqueid) + uniqueid = "defmenu_\ref[user]_\ref[anchor]" + + if(global.radial_menus[uniqueid]) + return + + var/datum/radial_menu/persistent/menu = new + menu.uniqueid = uniqueid + global.radial_menus[uniqueid] = menu + if(radius) + menu.radius = radius + menu.select_proc_callback = select_proc + menu.anchor = anchor + menu.check_screen_border(user) //Do what's needed to make it look good near borders or on hud + menu.set_choices(choices, tooltips) + menu.show_to(user) + return menu diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 22e326c4ea509..5fe02186d6c09 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -131,8 +131,8 @@ var/global/obj/screen/robot_inventory mymob.zone_sel = new /obj/screen/zone_sel() mymob.zone_sel.icon = 'icons/mob/screen1_robot.dmi' - mymob.zone_sel.overlays.Cut() - mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]") + mymob.zone_sel.ClearOverlays() + mymob.zone_sel.AddOverlays(image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]")) //Handle the gun settings buttons mymob.gun_setting_icon = new /obj/screen/gun/mode(null) @@ -187,14 +187,10 @@ var/global/obj/screen/robot_inventory //Unfortunately adding the emag module to the list of modules has to be here. This is because a borg can //be emagged before they actually select a module. - or some situation can cause them to get a new module // - or some situation might cause them to get de-emagged or something. - if(r.emagged) - if(!(r.module.emag in r.module.equipment)) - r.module.equipment.Add(r.module.emag) - else - if(r.module.emag in r.module.equipment) - r.module.equipment.Remove(r.module.emag) - - for(var/atom/movable/A in r.module.equipment) + if (r.emagged && !r.module.is_emagged) + r.module.handle_emagged(r) + + for (var/atom/movable/A in r.module.equipment) if (!r.IsHolding(A)) //Module is not currently active r.client.screen += A @@ -202,6 +198,7 @@ var/global/obj/screen/robot_inventory A.screen_loc = "CENTER[x]:[WORLD_ICON_SIZE/2],SOUTH+[y]:7" else A.screen_loc = "CENTER+[x]:[WORLD_ICON_SIZE/2],SOUTH+[y]:7" + A.mouse_opacity = MOUSE_OPACITY_OPAQUE A.hud_layerise() x++ @@ -216,5 +213,6 @@ var/global/obj/screen/robot_inventory if (!r.IsHolding(A)) //Module is not currently active r.client.screen -= A + A.mouse_opacity = initial(A.mouse_opacity) r.shown_robot_modules = 0 r.client.screen -= r.robot_modules_background diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 6a79e805a6e6a..2771b995a9555 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -63,22 +63,37 @@ if(!(owner in usr)) return 1 - owner.ui_action_click() + owner.ui_action_click(owner) return 1 /obj/screen/storage name = "storage" -/obj/screen/storage/Click() +/obj/screen/storage/Click(location, control, params) if(!usr.canClick()) - return 1 + return TRUE if(usr.stat || usr.paralysis || usr.stunned || usr.weakened) - return 1 + return TRUE if(master) var/obj/item/I = usr.get_active_hand() if(I) - usr.ClickOn(master) - return 1 + usr.ClickOn(master, params) + return TRUE + +/obj/screen/container + name = "you shouldn't see this, report coders" + icon_state = "blank" + layer = HUD_CLICKABLE_LAYER + mouse_opacity = MOUSE_OPACITY_OPAQUE + +/obj/screen/container/Click(location, control, params) + if(!usr.canClick()) + return TRUE + if(usr.stat || usr.paralysis || usr.stunned || usr.weakened) + return TRUE + if(master) + usr.ClickOn(master, params) + return TRUE /obj/screen/zone_sel name = "damage zone" @@ -86,10 +101,10 @@ screen_loc = ui_zonesel var/selecting = BP_CHEST -/obj/screen/zone_sel/Click(location, control,params) - var/list/PL = params2list(params) - var/icon_x = text2num(PL["icon-x"]) - var/icon_y = text2num(PL["icon-y"]) +/obj/screen/zone_sel/Click(location, control, params) + var/list/modifiers = params2list(params) + var/icon_x = text2num(LAZYACCESS(modifiers, ICON_X)) + var/icon_y = text2num(LAZYACCESS(modifiers, ICON_Y)) var/new_selecting switch(icon_y) @@ -158,8 +173,8 @@ return TRUE /obj/screen/zone_sel/on_update_icon() - overlays.Cut() - overlays += image('icons/mob/zone_sel.dmi', "[selecting]") + ClearOverlays() + AddOverlays(image('icons/mob/zone_sel.dmi', "[selecting]")) /obj/screen/intent name = "intent" @@ -169,9 +184,9 @@ var/intent = I_HELP /obj/screen/intent/Click(location, control, params) - var/list/P = params2list(params) - var/icon_x = text2num(P["icon-x"]) - var/icon_y = text2num(P["icon-y"]) + var/list/modifiers = params2list(params) + var/icon_x = text2num(LAZYACCESS(modifiers, ICON_Y)) + var/icon_y = text2num(LAZYACCESS(modifiers, ICON_Y)) intent = I_DISARM if(icon_x <= world.icon_size/2) if(icon_y <= world.icon_size/2) diff --git a/code/_onclick/hud/skybox.dm b/code/_onclick/hud/skybox.dm index afb8e0c930d84..f359fe535aae6 100644 --- a/code/_onclick/hud/skybox.dm +++ b/code/_onclick/hud/skybox.dm @@ -1,31 +1,61 @@ +#define SKYBOX_DIMENSION 736 + /obj/skybox name = "skybox" mouse_opacity = 0 anchored = TRUE simulated = FALSE - screen_loc = "CENTER:-224,CENTER:-224" + screen_loc = "CENTER,CENTER" plane = SKYBOX_PLANE + var/dimension_x = SKYBOX_DIMENSION + var/dimension_y = SKYBOX_DIMENSION /client var/obj/skybox/skybox +/client/proc/update_skybox_offsets() + if(!skybox) + update_skybox(TRUE) + return + + var/list/viewsize = getviewsize(view) + var/view_x = viewsize[1] + var/view_y = viewsize[2] + skybox.screen_loc = "CENTER:-[((view_x - 1) / 2) * world.icon_size],CENTER:-[((view_y - 1) / 2) * world.icon_size]" + skybox.dimension_x = SKYBOX_DIMENSION - (view_x * world.icon_size) + skybox.dimension_y = SKYBOX_DIMENSION - (view_y * world.icon_size) + + update_skybox() + /client/proc/update_skybox(rebuild) + var/turf/T = get_turf(eye) + if(!T) + return + if(!skybox) skybox = new() screen += skybox - rebuild = 1 + rebuild = TRUE - var/turf/T = get_turf(eye) - if(T) - if(rebuild) - skybox.overlays.Cut() - skybox.overlays += SSskybox.get_skybox(T.z) - screen |= skybox - skybox.screen_loc = "CENTER:[-224 - T.x],CENTER:[-224 - T.y]" + if(rebuild) + skybox.ClearOverlays() + skybox.AddOverlays(SSskybox.get_skybox(T.z)) + screen |= skybox + update_skybox_offsets() + return + + var/x_translate = -((T.x/world.maxx)) * skybox.dimension_x + var/y_translate = -((T.y/world.maxy)) * skybox.dimension_y + skybox.SetTransform(offset_x = x_translate, offset_y = y_translate) + +/client/proc/deferred_skybox_update(rebuild) + set waitfor = FALSE + sleep(1) + update_skybox(rebuild) /mob/Login() ..() - client.update_skybox(1) + client.deferred_skybox_update(TRUE) /mob/Move() var/old_z = get_z(src) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 86a478fe4b433..e3a588ac4ac82 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -9,9 +9,8 @@ item/resolve_attackby() calls the target atom's attackby() proc. Mobs: -mob/living/attackby() after checking for surgery, calls the item's attack() proc. -item/attack() generates attack logs, sets click cooldown and calls the mob's attacked_with_item() proc. If you override this, consider whether you need to set a click cooldown, play attack animations, and generate logs yourself. -mob/attacked_with_item() should then do mob-type specific stuff (like determining hit/miss, handling shields, etc) and then possibly call the item's apply_hit_effect() proc to actually apply the effects of being hit. +item/use_weapon() generates attack logs, determines miss chance, sets click cooldown and calls the apply_hit_effect() proc. If you override this, consider whether you need to set a click cooldown, play attack animations, and generate logs yourself. +use_weapon also call resolve_item_attack() and do mob-type specific stuff (like determining hit/miss, handling shields, etc). Item Hit Effects: @@ -28,65 +27,226 @@ avoid code duplication. This includes items that may sometimes act as a standard * * Should have no return value. */ -/obj/item/proc/attack_self(mob/user) +/obj/item/proc/attack_self(mob/living/user) return /** * Called when the item is in the active hand and another atom is clicked. This is generally called by `ClickOn()`. * - * This passes down to `attack()`, `use_user()`, `use_grab()`, `use_weapon()`, `use_tool()`, and `attackby()`, in that order, depending on item - * flags and user's intent. + * This passes down to `use_before()`, `use_weapon()`, `use_tool()`, `attackby()`, and then use_after() in that order, + * depending on item flags and user's intent. + * use_grab() is run in an override of resolve_attackby() processed at the grab's level, and is not part of this chain. * * **Parameters**: - * - `A` - The atom that was clicked. + * - `atom` - The atom that was clicked. * - `user` - The mob using the item. * - `click_params` - List of click parameters. See BYOND's `CLick()` documentation. * * Returns boolean to indicate whether the attack call was handled or not. */ -/obj/item/proc/resolve_attackby(atom/A, mob/user, click_params) - if(!(item_flags & ITEM_FLAG_NO_PRINT)) - add_fingerprint(user) - if ((item_flags & ITEM_FLAG_TRY_ATTACK) && attack(A, user)) - return TRUE - if (A == user) - . = user.use_user(src, click_params) - if (!. && user.a_intent == I_HURT) - . = A.use_weapon(src, user, click_params) +/obj/item/proc/resolve_attackby(atom/atom, mob/living/user, click_params) + if(!atom.can_use_item(src, user, click_params)) + return FALSE + var/list/modifiers = params2list(click_params) + var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK) + + var/use_call = "use" + . = use_before(atom, user, click_params) + if(!. && user.a_intent == I_HURT) + use_call = "weapon" + if(is_right_clicking) + switch(atom.use_weapon_secondary(src, user, click_params)) + if(SECONDARY_ATTACK_CALL_NORMAL) + . = atom.use_weapon(src, user, click_params) + if(SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) + . = TRUE + if(SECONDARY_ATTACK_CONTINUE_CHAIN) + . = FALSE // Normal behavior + else + CRASH("use_weapon_secondary must return an SECONDARY_ATTACK_* define") + else + . = atom.use_weapon(src, user, click_params) + if(!.) + use_call = "tool" + . = atom.item_interaction(user, src, click_params, is_right_clicking) + if(!.) + use_call = "tool" + if(is_right_clicking) + switch(atom.use_tool_secondary(src, user, click_params)) + if(SECONDARY_ATTACK_CALL_NORMAL) + . = atom.use_tool(src, user, click_params) + if(SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) + . = TRUE + if(SECONDARY_ATTACK_CONTINUE_CHAIN) + . = FALSE // Normal behavior + else + CRASH("use_tool_secondary must return an SECONDARY_ATTACK_* define") + else + . = atom.use_tool(src, user, click_params) + if(!.) + use_call = "attackby" + // Deprecated, don't dare to create attackby_secondary + . = atom.attackby(src, user, click_params) + if(!.) + use_call = "use" + if(is_right_clicking) + switch(use_after_secondary(atom, user, click_params)) + if(SECONDARY_ATTACK_CALL_NORMAL) + . = use_after(atom, user, click_params) + if(SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) + . = TRUE + if(SECONDARY_ATTACK_CONTINUE_CHAIN) + . = FALSE// Normal behavior + else + CRASH("use_after_secondary must return an SECONDARY_ATTACK_* define") + else + . = use_after(atom, user, click_params) + if(!.) + use_call = null + atom.post_use_item(src, user, ., use_call, click_params) + +/** + * Handler for operations to occur after running the chain of use_* procs. Always called. + * + * By default, this adds fingerprints to the atom and tool. + * + * **Parameters**: + * - `tool` - The item being used. + * - `user` - The mob performing the interaction. + * - `interaction_handled` (boolean) - Whether or not the use call was handled. + * - `use_call` (string) - The use call proc that handled the interaction, or null. + * - `click_params` - List of click parameters. + * + * Has no return value. + */ +/atom/proc/post_use_item(obj/item/tool, mob/living/user, interaction_handled, use_call, click_params) + if (interaction_handled) + if (!HAS_FLAGS(tool.item_flags, ITEM_FLAG_NO_PRINT)) + tool.add_fingerprint(user) + add_fingerprint(user, tool = tool) + + +/// Whether or not an item interaction is possible. Checked before any use calls. +/atom/proc/can_use_item(obj/item/tool, mob/living/user, click_params) + // No Tools flag check + if (HAS_FLAGS(atom_flags, ATOM_FLAG_NO_TOOLS)) + USE_FEEDBACK_FAILURE("\The [src] can't be interacted with.") + return FALSE + if (SEND_SIGNAL(src, COMSIG_ATOM_CAN_USE_ITEM, tool, user, click_params) & COMPONENT_CANCEL_ATTACK_CHAIN) + return FALSE + return TRUE + + +/obj/can_use_item(obj/item/tool, mob/living/user, click_params) + . = ..() if (!.) - . = A.use_tool(src, user, click_params) + return + if (hides_under_flooring()) + var/turf/turf = get_turf(src) + if (!turf.is_plating()) + USE_FEEDBACK_FAILURE("You must remove the plating before you can interact with \the [src].") + return FALSE + var/obj/structure/catwalk/catwalk = locate() in get_turf(src) + if (catwalk) + if (catwalk.plated_tile && !catwalk.hatch_open) + USE_FEEDBACK_FAILURE("\The [catwalk]'s hatch needs to be opened before you can access \the [src].") + return FALSE + else if (!catwalk.plated_tile) + USE_FEEDBACK_FAILURE("\The [catwalk] is blocking access to \the [src].") + return FALSE + + +/turf/can_use_item(obj/item/tool, mob/living/user, click_params) + . = ..() if (!.) - return A.attackby(src, user, click_params) + return + var/area/area = get_area(src) + if (!area?.can_modify_area()) + USE_FEEDBACK_FAILURE("This area does not allow structural modifications.") + return FALSE + + +/turf/simulated/floor/can_use_item(obj/item/tool, mob/living/user, click_params) + . = ..() + if (!.) + return + var/obj/structure/catwalk/catwalk = locate() in src + if (catwalk) + if (catwalk.plated_tile && !catwalk.hatch_open) + USE_FEEDBACK_FAILURE("\The [catwalk]'s hatch needs to be opened before you can access \the [src].") + return FALSE + else if (!catwalk.plated_tile) + USE_FEEDBACK_FAILURE("\The [catwalk] is blocking access to \the [src].") + return FALSE /** - * Interaction handler for using an item on yourself. This is called and the result checked before the other `use_*` - * interaction procs are called, regardless of user intent. + * Validates the mob can perform general interactions. Primarily intended for use after inputs, sleeps, timers, etc to ensure the action can still be completed. * * **Parameters**: - * - `tool` - The item being used by the mob. - * - `click_params` - List of click parameters. + * - `target` - The atom being interacted with. + * - `tool` - The item being used to interact. Optional. Defaults to `FALSE` to differentiate between a nulled reference and an empty parameter. + * - `flags` (Bitflag, any of `SANITY_CHECK_*`, default `SANITY_CHECK_DEFAULT`) - Bitflags of additional settings. See `code\__defines\misc.dm`. * - * Returns boolean to indicate whether the attack call was handled or not. If `FALSE`, the next `use_*` proc in the - * resolve chain will be called. + * Returns boolean. */ -/mob/proc/use_user(obj/item/tool, list/click_params = list()) - SHOULD_CALL_PARENT(TRUE) - return FALSE +/mob/proc/use_sanity_check(atom/target, atom/tool = FALSE, flags = SANITY_CHECK_DEFAULT) + // Deletion checks + if (QDELETED(src)) + return FALSE + var/silent = HAS_FLAGS(flags, SANITY_CHECK_SILENT) + if (QDELETED(target)) + if (!silent) + FEEDBACK_FAILURE(src, "[target ? "\The [target]" : "The object you were interacting with"] no longer exists.") + return FALSE + if (tool != FALSE && QDELETED(tool)) + if (!silent) + FEEDBACK_FAILURE(src, "[tool ? "\The [tool]" : "The item you were using"] no longer exists.") + return FALSE + // Target checks + if (isturf(target.loc) && !Adjacent(target)) + if (!silent) + FEEDBACK_FAILURE(src, "You must remain next to \the [target].") + return FALSE + if (target.loc == src && HAS_FLAGS(flags, SANITY_CHECK_TARGET_UNEQUIP) && !canUnEquip(target)) + if (!silent) + FEEDBACK_UNEQUIP_FAILURE(src, target) + return FALSE + if (HAS_FLAGS(flags, SANITY_CHECK_TOPIC_INTERACT) && !CanInteractWith(src, target, target.DefaultTopicState())) + if (!silent) + FEEDBACK_FAILURE(src, "You can't interact with \the [src].") + return FALSE + if (HAS_FLAGS(flags, SANITY_CHECK_TOPIC_PHYSICALLY_INTERACT) && !CanPhysicallyInteractWith(src, target)) + if (!silent) + FEEDBACK_FAILURE(src, "You can't physically interact with \the [src].") + return FALSE -/mob/living/carbon/human/use_user(obj/item/tool, list/click_params) - // Devouring - if (zone_sel.selecting == BP_MOUTH && can_devour(tool, silent = TRUE)) - var/obj/item/blocked = check_mouth_coverage() - if (blocked) - to_chat(src, SPAN_WARNING("\The [blocked] is in the way!")) - return TRUE - if (devour(tool)) - return TRUE + // Tool checks - Skip these if there is no tool + if (!tool) + return TRUE + if (HAS_FLAGS(flags, SANITY_CHECK_BOTH_ADJACENT) && tool.loc != src && !tool.Adjacent(target)) + if (!silent) + FEEDBACK_FAILURE(src, "\The [tool] must stay next to \the [target].") + return FALSE - return ..() + // These checks only apply to items + if (isitem(tool)) + if (HAS_FLAGS(flags, SANITY_CHECK_TOOL_UNEQUIP) && !canUnEquip(tool)) + if (!silent) + FEEDBACK_UNEQUIP_FAILURE(src, tool) + return FALSE + if (HAS_FLAGS(flags, SANITY_CHECK_TOOL_IN_HAND)) + var/active = get_active_hand() + if (istype(active, /obj/item/gripper)) + var/obj/item/gripper/gripper = active + active = gripper.wrapped + if (active != tool) + if (!silent) + FEEDBACK_FAILURE(src, "\The [tool] must stay in your active hand.") + return FALSE + return TRUE /** @@ -114,30 +274,100 @@ avoid code duplication. This includes items that may sometimes act as a standard * Returns boolean to indicate whether the attack call was handled or not. If `FALSE`, the next `use_*` proc in the * resolve chain will be called. */ -/atom/proc/use_weapon(obj/item/weapon, mob/user, list/click_params = list()) +/atom/proc/use_weapon(obj/item/weapon, mob/living/user, list/click_params) SHOULD_CALL_PARENT(TRUE) - // Standardized damage + if(SEND_SIGNAL(src, COMSIG_ATOM_USE_WEAPON, weapon, user, click_params) & COMPONENT_CANCEL_ATTACK_CHAIN) + return TRUE if (weapon.force > 0 && get_max_health() && !HAS_FLAGS(weapon.item_flags, ITEM_FLAG_NO_BLUDGEON)) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + user.setClickCooldown(user.get_attack_speed(weapon)) user.do_attack_animation(src) var/damage_flags = weapon.damage_flags() if (!can_damage_health(weapon.force, weapon.damtype, damage_flags)) - playsound(src, damage_hitsound, 50) + playsound(src, use_weapon_hitsound ? weapon.hitsound : damage_hitsound, 50, TRUE) user.visible_message( SPAN_WARNING("\The [user] hits \the [src] with \a [weapon], but it bounces off!"), SPAN_WARNING("You hit \the [src] with \the [weapon], but it bounces off!") ) return TRUE - playsound(src, damage_hitsound, 75) + playsound(src, use_weapon_hitsound ? weapon.hitsound : damage_hitsound, 75, TRUE) user.visible_message( SPAN_DANGER("\The [user] hits \the [src] with \a [weapon]!"), SPAN_DANGER("You hit \the [src] with \the [weapon]!") ) damage_health(weapon.force, weapon.damtype, damage_flags, skip_can_damage_check = TRUE) return TRUE - return FALSE +/atom/proc/use_weapon_secondary(obj/item/weapon, mob/living/user, list/click_params) + var/signal_result = SEND_SIGNAL(src, COMSIG_ATOM_USE_WEAPON_SECONDARY, weapon, user, click_params) + if(signal_result & COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(signal_result & COMPONENT_SECONDARY_CONTINUE_ATTACK_CHAIN) + return SECONDARY_ATTACK_CONTINUE_CHAIN + return SECONDARY_ATTACK_CALL_NORMAL + +/mob/living/use_weapon(obj/item/weapon, mob/living/user, list/click_params) + if (weapon.force > 0 && get_max_health() && !HAS_FLAGS(weapon.item_flags, ITEM_FLAG_NO_BLUDGEON)) + user.setClickCooldown(user.get_attack_speed(weapon)) + user.do_attack_animation(src) + if (!aura_check(AURA_TYPE_WEAPON, weapon, user)) + return TRUE + var/damage_flags = weapon.damage_flags() + var/weapon_mention + if (weapon.attack_message_name()) + weapon_mention = " with [weapon.attack_message_name()]" + var/attack_verb = "[pick(weapon.attack_verb)]" + + if (!can_damage_health(weapon.force, weapon.damtype, damage_flags)) + playsound(src, weapon.hitsound, 50, TRUE) + user.visible_message( + SPAN_WARNING("\The [user] hit \the [src] [weapon_mention], but it bounced off!"), + SPAN_WARNING("You hit \the [src] [weapon_mention], but it bounced off!"), + exclude_mobs = list(src) + ) + show_message( + SPAN_WARNING("\The [user] hit you [weapon_mention], but it bounced off!"), + VISIBLE_MESSAGE, + SPAN_WARNING("You felt something bounce off you harmlessly.") + ) + return TRUE + + var/hit_zone = resolve_item_attack(weapon, user, user.zone_sel? user.zone_sel.selecting : ran_zone()) + if (!hit_zone) + return TRUE + + playsound(src, weapon.hitsound, 75, TRUE) + user.visible_message( + SPAN_DANGER("\The [user] [attack_verb] \the [src] [weapon_mention]"), + SPAN_DANGER("You [attack_verb] \the [src] [weapon_mention]!"), + exclude_mobs = list(src) + ) + show_message( + SPAN_DANGER("\The [user] [attack_verb] you [weapon_mention]!"), + VISIBLE_MESSAGE, + SPAN_DANGER("You feel something hit you!") + ) + + if (!weapon.no_attack_log) + admin_attack_log( + user, + src, + "Attacked using \a [weapon] (DAMTYE: [uppertext(weapon.damtype)])", + "Was attacked with \a [weapon] (DAMTYE: [uppertext(weapon.damtype)])", + "used \a [weapon] (DAMTYE: [uppertext(weapon.damtype)]) to attack" + ) + + var/datum/attack_result/result = hit_zone + if (istype(result)) + if (result.hit_zone) + var/mob/living/victim = result.attackee ? result.attackee : src + weapon.apply_hit_effect(victim, user, result.hit_zone) + return TRUE + if (hit_zone) + weapon.apply_hit_effect(src, user, hit_zone) + return TRUE + return ..() + /** * Interaction handler for using an item on this atom with a non-harm intent, or if `use_weapon()` did not resolve an @@ -151,16 +381,42 @@ avoid code duplication. This includes items that may sometimes act as a standard * Returns boolean to indicate whether the attack call was handled or not. If `FALSE`, the next `use_*` proc in the * resolve chain will be called. */ -/atom/proc/use_tool(obj/item/tool, mob/user, list/click_params = list()) +/atom/proc/use_tool(obj/item/tool, mob/living/user, list/click_params) SHOULD_CALL_PARENT(TRUE) + if(SEND_SIGNAL(src, COMSIG_ATOM_USE_TOOL, tool, user, click_params) & COMPONENT_CANCEL_ATTACK_CHAIN) + return TRUE return FALSE +/atom/proc/use_tool_secondary(obj/item/tool, mob/living/user, list/click_params) + var/signal_result = SEND_SIGNAL(src, COMSIG_ATOM_USE_TOOL_SECONDARY, tool, user, click_params) + if(signal_result & COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(signal_result & COMPONENT_SECONDARY_CONTINUE_ATTACK_CHAIN) + return SECONDARY_ATTACK_CONTINUE_CHAIN + return SECONDARY_ATTACK_CALL_NORMAL -/mob/living/use_tool(obj/item/tool, mob/user, list/click_params) +/mob/living/use_tool(obj/item/tool, mob/living/user, list/click_params) // Surgery is handled by the tool if (can_operate(src, user) && tool.do_surgery(src, user)) return TRUE + if (length(auras)) + for (var/obj/aura/web/web in auras) + web.remove_webbing(user) + return TRUE + return ..() + + +/mob/living/carbon/human/use_tool(obj/item/tool, mob/user, list/click_params) + // Anything on Self - Devour + if (user == src && zone_sel.selecting == BP_MOUTH && can_devour(tool, silent = TRUE)) + var/obj/item/blocked = check_mouth_coverage() + if (blocked) + USE_FEEDBACK_FAILURE("\The [blocked] is in the way!") + return TRUE + devour(tool) + return TRUE + return ..() @@ -170,25 +426,20 @@ avoid code duplication. This includes items that may sometimes act as a standard * Called when this atom is clicked on while another item is in the active hand. This is generally called by this item's `resolve_attackby()` proc. * * **Parameters**: - * - `W` - The item that was in the active hand when `src` was clicked. + * - `item` - The item that was in the active hand when `src` was clicked. * - `user` - The mob using the item. * - `click_params` - List of click parameters. See BYOND's `CLick()` documentation. * * Returns boolean to indicate whether the attack call was handled or not. */ -/atom/proc/attackby(obj/item/W, mob/user, click_params) - return FALSE - - -/mob/living/attackby(obj/item/W, mob/user, click_params) - // Legacy mob attack code is handled by the weapon - if (W.attack(src, user, user.zone_sel ? user.zone_sel.selecting : ran_zone())) +/atom/proc/attackby(obj/item/item, mob/living/user, click_params) + if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY, item, user, click_params) & COMPONENT_CANCEL_ATTACK_CHAIN) return TRUE - return ..() - + return FALSE /** * Called when the item is in the active hand and another atom is clicked and `resolve_attackby()` returns FALSE. This is generally called by `ClickOn()`. + * Works on ranged targets, unlike resolve_attackby() * * **Parameters**: * - `target` - The atom that was clicked on. @@ -198,61 +449,63 @@ avoid code duplication. This includes items that may sometimes act as a standard * * Should have no return value. */ -/obj/item/proc/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - return - +/obj/item/proc/afterattack(atom/target, mob/living/user, proximity_flag, click_parameters) + . |= SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target, user, proximity_flag, click_parameters) + return . + +/obj/item/proc/afterattack_secondary(atom/target, mob/living/user, proximity_flag, click_parameters) + var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK_SECONDARY, target, user, click_parameters) + if(signal_result & COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(signal_result & COMPONENT_SECONDARY_CONTINUE_ATTACK_CHAIN) + return SECONDARY_ATTACK_CONTINUE_CHAIN + return SECONDARY_ATTACK_CALL_NORMAL -/datum/attack_result - var/hit_zone = 0 - var/mob/living/attackee = null - - -//I would prefer to rename this attack_as_weapon(), but that would involve touching hundreds of files. /** - * Called when a mob is clicked while the item is in the active hand and the interaction is not valid for surgery. Generally called by the mob's `attackby()` proc. + * Called when the item is in the active hand and another atom is clicked. This is generally called by the target's + * `resolve_attackby()` proc. + * Use it for item-level behavior you don't necessarily want running before use_tool/use_weapon. + * You will need to use type checks on atom/target on overrides; or else this will be called on anything you click. * * **Parameters**: - * - `M` - The mob that was clicked. - * - `user` - The mob that clicked the target. - * - `target_zone` - The mob targeting zone `user` had selected when clicking. - * - `animate` (boolean) - Whether or not to show the attack animation. + * - `target` - The atom that was clicked on. + * - `user` - The mob clicking on the target. + * - `click_parameters` - List of click parameters. See BYOND's `Click()` documentation. * - * Returns boolean to indicate whether the item usage was successful or not. + * Returns boolean to indicate whether the use call was handled or not. */ -/obj/item/proc/attack(mob/living/M, mob/living/user, target_zone, animate = TRUE) - if(!force || (item_flags & ITEM_FLAG_NO_BLUDGEON)) - return 0 - if(M == user && user.a_intent != I_HURT) - return 0 - if (user.a_intent == I_HELP && !attack_ignore_harm_check) - return FALSE - - ///////////////////////// - - if(!no_attack_log) - admin_attack_log(user, M, "Attacked using \a [src] (DAMTYE: [uppertext(damtype)])", "Was attacked with \a [src] (DAMTYE: [uppertext(damtype)])", "used \a [src] (DAMTYE: [uppertext(damtype)]) to attack") - ///////////////////////// - user.setClickCooldown(attack_cooldown + w_class) - if(animate) - user.do_attack_animation(M) - if(!M.aura_check(AURA_TYPE_WEAPON, src, user)) - return 0 - - var/hit_zone = M.resolve_item_attack(src, user, target_zone) - - var/datum/attack_result/AR = hit_zone - if(istype(AR)) - if(AR.hit_zone) - apply_hit_effect(AR.attackee ? AR.attackee : M, user, AR.hit_zone) - return 1 - if(hit_zone) - apply_hit_effect(M, user, hit_zone) +/obj/item/proc/use_after(atom/target, mob/living/user, click_parameters) + if(SEND_SIGNAL(src, COMSIG_ITEM_USE_AFTER, target, user, click_parameters) & COMPONENT_CANCEL_ATTACK_CHAIN) + return TRUE + return FALSE - return 1 +/obj/item/proc/use_after_secondary(atom/target, mob/living/user, click_parameters) + var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_USE_AFTER_SECONDARY, target, user, click_parameters) + if(signal_result & COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(signal_result & COMPONENT_SECONDARY_CONTINUE_ATTACK_CHAIN) + return SECONDARY_ATTACK_CONTINUE_CHAIN + return SECONDARY_ATTACK_CALL_NORMAL +/** + * Called when a mob is clicked while the item is in the active hand. This is usually called first by the mob's `resolve_attackby()` proc. + * Use this to set item-level overrides that you want running first. If you have an override you don't want running before use_tool and use_weapon, put it in use_after(). + * You will need to use type checks on atom/target on overrides; or else this will be called on anything you click. + * If returns FALSE, the rest of the resolve_attackby() chain is called. + * + * **Parameters**: + * - `target` - The atom that was clicked. + * - `user` - The mob that clicked the target. + * * - `click_parameters` - List of click parameters. See BYOND's `Click()` documentation. + */ +/obj/item/proc/use_before(atom/target, mob/living/user, click_parameters) + if(SEND_SIGNAL(src, COMSIG_ITEM_USE_BEFORE, target, user, click_parameters) & COMPONENT_CANCEL_ATTACK_CHAIN) + return TRUE + return FALSE /** - * Called when a weapon is used to make a successful melee attack on a mob. Generally called by the target's `attack()` proc. + * Called when a weapon is used to make a successful melee attack on a mob. Generally called by the target's `use_weapon()` proc. + * Overriden to apply special effects like electrical shocks from stun batons/defib paddles. * * **Parameters**: * - `target` - The mob struck with the weapon. @@ -262,12 +515,7 @@ avoid code duplication. This includes items that may sometimes act as a standard * Returns boolean to indicate whether or not damage was dealt. */ /obj/item/proc/apply_hit_effect(mob/living/target, mob/living/user, hit_zone) - if(hitsound) - playsound(loc, hitsound, 50, 1, -1) - var/power = force - if(MUTATION_HULK in user.mutations) - power *= 2 return target.hit_with_weapon(src, user, power, hit_zone) @@ -276,17 +524,21 @@ avoid code duplication. This includes items that may sometimes act as a standard * This is just for inheritance. * * **Parameters**: - * - `W` - The item being used in the attack, if any. + * - `item` - The item being used in the attack, if any. * * Returns a number indicating the determined attack cooldown/speed. */ -/mob/proc/get_attack_speed(obj/item/W) +/mob/proc/get_attack_speed(obj/item/item) return DEFAULT_ATTACK_COOLDOWN -/mob/living/get_attack_speed(obj/item/W) +/mob/living/get_attack_speed(obj/item/item) var/speed = base_attack_cooldown - if(istype(W)) - speed = W.attack_cooldown - + if (istype(item)) + speed = item.attack_cooldown + item.w_class return speed + + +/datum/attack_result + var/hit_zone = 0 + var/mob/living/attackee diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index ddb9f2da0bc63..69496310f3a60 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -5,7 +5,7 @@ * - `user` - The attacking mob. * - `damage` (int) - The damage value. * - `attack_verb` (string) - The verb/string used for attack messages. - * - `wallbreaker` (boolean) - Whether or not the attack is considered a 'wallbreaker' attack - I.e., hulk. + * - `wallbreaker` (boolean) - Whether or not the attack is considered a 'wallbreaker' attack. * - `damtype` (string, one of `DAMAGE_*`) - The attack's damage type. * - `armorcheck` (string) - TODO: Unused. Remove. * - `dam_flags` (bitfield, any of `DAMAGE_FLAG_*`) - Damage flags associated with the attack. @@ -17,7 +17,7 @@ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) user.do_attack_animation(src) if (!can_damage_health(damage, damtype)) - playsound(src, damage_hitsound, 50) + playsound(src, damage_hitsound, 50, TRUE) user.visible_message( SPAN_WARNING("\The [user] bonks \the [src] harmlessly!"), SPAN_WARNING("You bonk \the [src] harmlessly!") @@ -26,7 +26,7 @@ var/damage_flags = EMPTY_BITFIELD if (wallbreaker) SET_FLAGS(damage_flags, DAMAGE_FLAG_TURF_BREAKER) - playsound(src, damage_hitsound, 75) + playsound(src, damage_hitsound, 75, TRUE) if (damage_health(damage, damtype, damage_flags, skip_can_damage_check = TRUE)) user.visible_message( SPAN_DANGER("\The [user] smashes through \the [src]!"), @@ -38,27 +38,48 @@ SPAN_DANGER("You [attack_verb] \the [src]!") ) +/** + * Called when the unarmed attack hasn't been stopped by the LIVING_UNARMED_ATTACK_BLOCKED macro or the right_click_attack_chain proc. + * This will call an attack proc that can vary from mob type to mob type on the target. + */ +/mob/living/proc/resolve_unarmed_attack(atom/attack_target, list/modifiers) + attack_target.attack_animal(src, modifiers) -/* - Humans: - Adds an exception for gloves, to allow special glove types like the ninja ones. - - Otherwise pretty standard. -*/ -/mob/living/carbon/human/UnarmedAttack(atom/A, proximity) - - if(!..()) - return - - // Special glove functions: - // If the gloves do anything, have them return 1 to stop - // normal attack_hand() here. - var/obj/item/clothing/gloves/G = gloves // not typecast specifically enough in defines - if(istype(G) && G.Touch(A,1)) +/// Checks for RIGHT_CLICK in modifiers and runs resolve_right_click_attack if so. Returns TRUE if normal chain blocked. +/mob/living/proc/right_click_attack_chain(atom/target, list/modifiers) + if (!LAZYACCESS(modifiers, RIGHT_CLICK)) return - - A.attack_hand(src) - + var/secondary_result = resolve_right_click_attack(target, modifiers) + + if (secondary_result == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || secondary_result == SECONDARY_ATTACK_CONTINUE_CHAIN) + return TRUE + else if (secondary_result != SECONDARY_ATTACK_CALL_NORMAL) + CRASH("resolve_right_click_attack (probably attack_hand_secondary) did not return a SECONDARY_ATTACK_* define.") + +/mob/living/UnarmedAttack(atom/target, proximity_flag, list/modifiers) + // The sole reason for this signal needing to exist is making FotNS incompatible with Hulk. + // Note that it is send before [proc/can_unarmed_attack] is called, keep this in mind. + var/sigreturn = SEND_SIGNAL(src, COMSIG_LIVING_EARLY_UNARMED_ATTACK, target, proximity_flag, modifiers) + if(sigreturn & COMPONENT_CANCEL_ATTACK_CHAIN) + return TRUE + if(sigreturn & COMPONENT_SKIP_ATTACK) + return FALSE + + sigreturn = SEND_SIGNAL(src, COMSIG_LIVING_UNARMED_ATTACK, target, proximity_flag, modifiers) + if(sigreturn & COMPONENT_CANCEL_ATTACK_CHAIN) + return TRUE + if(sigreturn & COMPONENT_SKIP_ATTACK) + return FALSE + + if(!right_click_attack_chain(target, modifiers)) + resolve_unarmed_attack(target, modifiers) + return TRUE + +/mob/living/carbon/human/resolve_unarmed_attack(atom/target, list/modifiers) + return target.attack_hand(src, modifiers) + +/mob/living/carbon/human/resolve_right_click_attack(atom/target, list/modifiers) + return target.attack_hand_secondary(src, modifiers) /** * Called when the atom is clicked on by a mob with an empty hand. @@ -66,9 +87,15 @@ * **Parameters**: * - `user` - The mob that clicked on the atom. */ -/atom/proc/attack_hand(mob/user) - return +/atom/proc/attack_hand(mob/living/user, list/modifiers) + . = FALSE + if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_HAND, user, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN) + . = TRUE +/atom/proc/attack_hand_secondary(mob/living/user, list/modifiers) + if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_HAND_SECONDARY, user, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return SECONDARY_ATTACK_CALL_NORMAL /** * Called when a mob attempts to use an empty hand on itself. @@ -88,21 +115,40 @@ if(!. && a_intent == I_GRAB && length(available_maneuvers)) . = perform_maneuver(prepared_maneuver || available_maneuvers[1], A) -/mob/living/carbon/human/RangedAttack(atom/A, params) +/mob/living/carbon/human/ranged_attack(atom/target, modifiers) //Climbing up open spaces - if((istype(A, /turf/simulated/floor) || istype(A, /turf/unsimulated/floor) || istype(A, /obj/structure/lattice) || istype(A, /obj/structure/catwalk)) && isturf(loc) && bound_overlay && !is_physically_disabled()) //Climbing through openspace - return climb_up(A) - - if(gloves) - var/obj/item/clothing/gloves/G = gloves - if(istype(G) && G.Touch(A,0)) // for magic gloves - return TRUE + if((istype(target, /turf/simulated/floor) || istype(target, /turf/unsimulated/floor) || istype(target, /obj/structure/lattice) || istype(target, /obj/structure/catwalk)) && isturf(loc) && bound_overlay && !is_physically_disabled()) //Climbing through openspace + return climb_up(target) . = ..() /mob/living/RestrainedClickOn(atom/A) return +/** + * Called when an unarmed attack performed with right click hasn't been stopped by the LIVING_UNARMED_ATTACK_BLOCKED macro. + * This will call a secondary attack proc that can vary from mob type to mob type on the target. + * Sometimes, a target is interacted differently when right_clicked, in that case the secondary attack proc should return + * a SECONDARY_ATTACK_* value that's not SECONDARY_ATTACK_CALL_NORMAL. + * Otherwise, it should just return SECONDARY_ATTACK_CALL_NORMAL. Failure to do so will result in an exception (runtime error). + */ +/mob/living/proc/resolve_right_click_attack(atom/target, list/modifiers) + return target.attack_animal_secondary(src, modifiers) + +/** + * Called when a simple animal is unarmed attacking / clicking on this atom. + */ +/atom/proc/attack_animal(mob/user, list/modifiers) + SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ANIMAL, user) + attack_hand(user) + +/** + * Called when a simple animal or basic mob right clicks an atom. + * Returns a SECONDARY_ATTACK_* value. + */ +/atom/proc/attack_animal_secondary(mob/user, list/modifiers) + return SECONDARY_ATTACK_CALL_NORMAL + /* Aliens */ @@ -110,13 +156,8 @@ /mob/living/carbon/alien/RestrainedClickOn(atom/A) return -/mob/living/carbon/alien/UnarmedAttack(atom/A, proximity) - - if(!..()) - return 0 - - setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - A.attack_generic(src,rand(5,6),"bitten") +/mob/living/carbon/alien/resolve_unarmed_attack(atom/target, list/modifiers) + target.attack_generic(src, rand(5,6), "bitten") /* Slimes @@ -126,22 +167,22 @@ /mob/living/carbon/slime/RestrainedClickOn(atom/A) return -/mob/living/carbon/slime/UnarmedAttack(atom/A, proximity) +/mob/living/carbon/slime/UnarmedAttack(atom/target, proximity_flag, list/modifiers) if(!..()) return // Eating if(Victim) - if (Victim == A) + if (Victim == target) Feedstop() return //should have already been set if we are attacking a mob, but it doesn't hurt and will cover attacking non-mobs too setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - var/mob/living/M = A + var/mob/living/M = target if(!istype(M)) - A.attack_generic(src, (is_adult ? rand(20,40) : rand(5,25)), "glomped") // Basic attack. + target.attack_generic(src, (is_adult ? rand(20,40) : rand(5,25)), "glomped") // Basic attack. else var/power = max(0, min(10, (powerlevel + rand(0, 3)))) @@ -151,7 +192,7 @@ if (I_DISARM) // We stun the target, with the intention to feed var/stunprob = 1 - if (powerlevel > 0 && !istype(A, /mob/living/carbon/slime)) + if (powerlevel > 0 && !istype(target, /mob/living/carbon/slime)) switch(power * 10) if(0) stunprob *= 10 if(1 to 2) stunprob *= 20 @@ -177,7 +218,7 @@ M.visible_message(SPAN_DANGER("[src] has pounced at [M]!"), SPAN_DANGER("[src] has pounced at you!")) M.Weaken(power) else - A.attack_generic(src, (is_adult ? rand(20,40) : rand(5,25)), "glomped") + target.attack_generic(src, (is_adult ? rand(20,40) : rand(5,25)), "glomped") /* New Players: @@ -189,28 +230,18 @@ /* Animals */ -/mob/living/simple_animal/UnarmedAttack(atom/A, proximity) - - if(!..()) +/mob/living/simple_animal/UnarmedAttack(atom/target, proximity_flag, list/modifiers) + if (!..()) return setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(istype(A,/mob/living)) - if(!get_natural_weapon() || a_intent == I_HELP) - custom_emote(1,"[friendly] [A]!") + if (isliving(target)) + if (!get_natural_weapon() || a_intent == I_HELP) + custom_emote(VISIBLE_MESSAGE, "[friendly] [target]!") return - if(ckey) - admin_attack_log(src, A, "Has attacked its victim.", "Has been attacked by its attacker.") - if(a_intent == I_HELP) - A.attack_animal(src) + if (ckey) + admin_attack_log(src, target, "Has attacked its victim.", "Has been attacked by its attacker.") + if (a_intent == I_HELP) + target.attack_animal(src) else if (get_natural_weapon()) - A.attackby(get_natural_weapon(), src) - - -/** - * Called when a `simple_animal` mob clicks on the atom with an 'empty hand.' - * - * **Parameters**: - * - `user` - The mob clicking on the atom. - */ -/atom/proc/attack_animal(mob/user) - return attack_hand(user) + var/obj/item/weapon = get_natural_weapon() + weapon.resolve_attackby(target, src) diff --git a/code/_onclick/rig.dm b/code/_onclick/rig.dm index 60bb340cdd343..1e638a6f17a2a 100644 --- a/code/_onclick/rig.dm +++ b/code/_onclick/rig.dm @@ -1,26 +1,26 @@ /mob/living/MiddleClickOn(atom/A) if(get_preference_value(/datum/client_preference/hardsuit_activation) == GLOB.PREF_MIDDLE_CLICK) if(HardsuitClickOn(A)) - return - ..() + return TRUE + return ..() /mob/living/AltClickOn(atom/A) if(get_preference_value(/datum/client_preference/hardsuit_activation) == GLOB.PREF_ALT_CLICK) if(HardsuitClickOn(A)) - return - ..() + return TRUE + return ..() /mob/living/CtrlClickOn(atom/A) if(get_preference_value(/datum/client_preference/hardsuit_activation) == GLOB.PREF_CTRL_CLICK) if(HardsuitClickOn(A)) - return FALSE - . = ..() + return TRUE + return ..() /mob/living/CtrlShiftClickOn(atom/A) if(get_preference_value(/datum/client_preference/hardsuit_activation) == GLOB.PREF_CTRL_SHIFT_CLICK) if(HardsuitClickOn(A)) - return - ..() + return TRUE + return ..() /mob/living/proc/can_use_rig() return 0 diff --git a/code/_version.dm b/code/_version.dm index c117c893ae287..94d807fd9e171 100644 --- a/code/_version.dm +++ b/code/_version.dm @@ -5,8 +5,6 @@ Retain even if empty - the future exists #if DM_VERSION < 515 -#define call_ext(ARGS...) call(ARGS) - /proc/ceil(number) return -round(-number) @@ -41,7 +39,9 @@ Retain even if empty - the future exists throw EXCEPTION("refcount not available below 515") /proc/trimtext(text) - var/static/regex/pattern = regex(@"^\s*(.*?)\s*$", "g") + var/static/regex/pattern + if (!pattern) + pattern = regex(@"^\s*(.*?)\s*$", "g") return replacetext_char(text, pattern, "$1") /proc/trunc(number) @@ -52,21 +52,16 @@ Retain even if empty - the future exists /client/proc/RenderIcon(atom) throw EXCEPTION("client::RenderIcon() not available below 515") -/* lists cannot have new procs. But if they could: -/list/proc/RemoveAll() - var/result = 0 - for (var/entry in args) - while (Remove(entry)) - ++result - return result -*/ - -var/global/const/ANIMATION_SLICE = 8 -var/global/const/ANIMATION_CONTINUE = 512 +#define PROC_REF(X) (.proc/##X) +#define TYPE_PROC_REF(TYPE, X) (##TYPE.proc/##X) +#define GLOBAL_PROC_REF(X) (.proc/##X) +#define CALL_EXT call -var/global/const/JSON_PRETTY_PRINT = 1 +#else -var/global/const/JSON_STRICT = 1 -var/global/const/JSON_ALLOW_COMMENTS = 2 +#define PROC_REF(X) (nameof(.proc/##X)) +#define TYPE_PROC_REF(TYPE, X) (nameof(##TYPE.proc/##X)) +#define GLOBAL_PROC_REF(X) (/proc/##X) +#define CALL_EXT call_ext #endif diff --git a/code/controllers/autotransfer.dm b/code/controllers/autotransfer.dm deleted file mode 100644 index f5097be3152f8..0000000000000 --- a/code/controllers/autotransfer.dm +++ /dev/null @@ -1,28 +0,0 @@ -var/global/datum/controller/transfer_controller/transfer_controller - -/datum/controller/transfer_controller - var/timerbuffer = 0 //buffer for time check - var/do_continue_vote = TRUE - -/datum/controller/transfer_controller/New() - timerbuffer = config.vote_autotransfer_initial - START_PROCESSING(SSprocessing, src) - -/datum/controller/transfer_controller/Destroy() - STOP_PROCESSING(SSprocessing, src) - . = ..() - -/datum/controller/transfer_controller/Process() - if (time_till_transfer_vote() <= 0) - - if (config.maximum_round_length > 0 && round_duration_in_ticks >= config.maximum_round_length) - init_autotransfer() - else if (do_continue_vote) - SSvote.initiate_vote(/datum/vote/transfer, automatic = 1) - else - init_autotransfer() - - timerbuffer += config.vote_autotransfer_interval - -/datum/controller/transfer_controller/proc/time_till_transfer_vote() - return timerbuffer - round_duration_in_ticks - (1 MINUTE) diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm index 079dd2307f96a..5bbfc97919517 100644 --- a/code/controllers/communications.dm +++ b/code/controllers/communications.dm @@ -1,9 +1,9 @@ /* - HOW IT WORKS +HOW IT WORKS - The radio_controller is a global object maintaining all radio transmissions, think about it as about "ether". - Note that walkie-talkie, intercoms and headsets handle transmission using nonstandard way. - procs: +The radio_controller is a global object maintaining all radio transmissions, think about it as about "ether". +Note that walkie-talkie, intercoms and headsets handle transmission using nonstandard way. +procs: add_object(obj/device as obj, var/new_frequency as num, var/filter as text|null = null) Adds listening object. @@ -12,10 +12,10 @@ one device may listen several frequencies, but not same frequency twice. new_frequency - see possibly frequencies below; filter - thing for optimization. Optional, but recommended. - All filters should be consolidated in this file, see defines later. - Device without listening filter will receive all signals (on specified frequency). - Device with filter will receive any signals sent without filter. - Device with filter will not receive any signals sent with different filter. + All filters should be consolidated in this file, see defines later. + Device without listening filter will receive all signals (on specified frequency). + Device with filter will receive any signals sent without filter. + Device with filter will not receive any signals sent with different filter. returns: Reference to frequency object. @@ -23,12 +23,12 @@ Obliviously, after calling this proc, device will not receive any signals on old_frequency. Other frequencies will left unaffected. - return_frequency(var/frequency as num) +return_frequency(var/frequency as num) returns: Reference to frequency object. Use it if you need to send and do not need to listen. - radio_frequency is a global object maintaining list of devices that listening specific frequency. - procs: +radio_frequency is a global object maintaining list of devices that listening specific frequency. +procs: post_signal(obj/source as obj|null, datum/signal/signal, var/filter as text|null = null, var/range as num|null = null) Sends signal to all devices that wants such signal. @@ -38,7 +38,7 @@ filter - described above. range - radius of regular byond's square circle on that z-level. null means everywhere, on all z-levels. - obj/proc/receive_signal(datum/signal/signal, var/receive_method as num, var/receive_param) +obj/proc/receive_signal(datum/signal/signal, var/receive_method as num, var/receive_param) Handler from received signals. By default does nothing. Define your own for your object. Avoid of sending signals directly from this proc, use spawn(-1). DO NOT use sleep() here or call procs that sleep please. If you must, use spawn() parameters: @@ -47,7 +47,7 @@ TRANSMISSION_WIRE is currently unused. receive_param - for TRANSMISSION_RADIO here comes frequency. - datum/signal +datum/signal vars: source an object that emitted signal. Used for debug and bearing. @@ -186,7 +186,7 @@ var/global/list/channel_color_presets = list( "Painful Pink" = COMMS_COLOR_AI, "Phenomenal Purple" = COMMS_COLOR_SCIENCE, "Powerful Plum" = COMMS_COLOR_BEARCAT, - "Pretty Periwinkle" = COMMS_COLOR_CENTCOMM, + "Pretty Periwinkle" = COMMS_COLOR_CENTCOM, "Radical Ruby" = COMMS_COLOR_VOX, "Raging Red" = COMMS_COLOR_SECURITY, "Spectacular Silver" = COMMS_COLOR_ENTERTAIN, @@ -210,7 +210,7 @@ var/global/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FR // Antags! if (frequency in ANTAG_FREQS) return "syndradio" - // centcomm channels (deathsquid and ert) + // centcom channels (deathsquid and ert) if(frequency in CENT_FREQS) return "centradio" // command channel @@ -372,15 +372,15 @@ var/global/datum/controller/radio/radio_controller /datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, radio_filter, turf/start_point = null, range = null) var/list/z_levels if(start_point) - z_levels = GetConnectedZlevels(start_point.z) + z_levels = GetConnectedZlevelsSet(start_point.z) - for(var/obj/device in devices[radio_filter]) + for(var/obj/device as anything in devices[radio_filter]) if(device == source) continue var/turf/end_point = get_turf(device) if(!end_point) continue - if(z_levels && !(end_point.z in z_levels)) + if(z_levels && !(z_levels["[end_point.z]"])) continue if(range && get_dist(start_point, end_point) > range) continue diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 6bbf58c2b4035..4a95fca38973b 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -2,7 +2,7 @@ var/static/atom/movable/clickable_stat/statLine /// server name (for world name / status) - var/static/server_name + var/static/server_name = "Space Station 13" /// generate numeric suffix based on server port var/static/server_suffix = FALSE @@ -28,6 +28,9 @@ /// log game events var/static/log_game = FALSE + /// log tool usage + var/static/log_tool = FALSE + /// log voting var/static/log_vote = FALSE @@ -55,6 +58,9 @@ /// log world.log to game log var/static/log_world_output = FALSE + /// log signals messages + var/static/log_signals = FALSE + /// Allows admins with relevant permissions to have their own ooc colour var/static/allow_admin_ooccolor = FALSE @@ -81,11 +87,17 @@ /// length of voting period (deciseconds, default 1 minute) var/static/vote_period = 600 - /// Length of time before the first autotransfer vote is called - var/static/vote_autotransfer_initial = 120 MINUTES + /// Time in minutes between checks for ending empty rounds + var/static/empty_round_check_interval = 0 + + /// Time in minutes before the first autotransfer vote + var/static/vote_autotransfer_initial = 120 - /// length of time before next sequential autotransfer vote - var/static/vote_autotransfer_interval = 30 MINUTES + /// Time in minutes before each following autotransfer vote + var/static/vote_autotransfer_interval = 30 + + /// Time in minutes before transfer votes where antagonists cannot be added + var/static/transfer_vote_block_antag_time = 20 /// Length of time before round start when autogamemode vote is called (in seconds, default 100). var/static/vote_autogamemode_timeleft = 100 @@ -93,6 +105,9 @@ /// Length of time before round start (in seconds) var/static/pre_game_time = 180 + /// If we want to bypass gamemode vote + var/static/bypass_gamemode_vote = FALSE + /// vote does not default to nochange/norestart (tbi) var/static/vote_no_default = FALSE @@ -108,14 +123,9 @@ /// if objectives are disabled or not var/static/objectives_disabled = FALSE - /// If security and such can be traitor/cult/other - var/static/protect_roles_from_antagonist = FALSE - /// Gamemodes which end instantly will instead keep on going until the round ends by escape shuttle or nuke. var/static/continous_rounds = FALSE - var/static/fps = 30 - var/static/list/resource_urls /// Ghosts can turn on Antagovision to see a HUD of who is the bad guys this round. @@ -249,9 +259,6 @@ var/static/no_click_cooldown = FALSE - /// optional runtime configuration of http://www.byond.com/docs/ref/#/atom/movable/var/glide_size - var/static/glide_size - /// Modifier for ticks between moves while running var/static/run_delay = 2 @@ -315,6 +322,9 @@ var/static/admin_irc = "" + var/static/admin_discord = "" + + var/static/excom_address = "" var/static/announce_evac_to_irc = FALSE var/static/expected_round_length = 3 HOURS @@ -340,8 +350,8 @@ var/static/aooc_allowed = TRUE - /// Whether space turfs have ambient light or not - var/static/starlight = 0 + /// Whether space turfs and some exterior turfs have ambient light or not default, 0.5, values over 1 may overpower dynamic lights + var/static/starlight = 0.5 var/static/list/ert_species = list(SPECIES_HUMAN) @@ -351,6 +361,8 @@ var/static/ghosts_can_possess_animals = FALSE + var/static/ghosts_can_possess_zombies = TRUE + var/static/delist_when_no_admins = FALSE /// Whether map switching is allowed @@ -433,6 +445,32 @@ var/static/run_empty_levels = FALSE + var/static/deletion_starts_paused = TRUE + + var/static/enable_cold_mist = FALSE + + /// If the runechat is enabled on the server + var/static/runechat_enabled = TRUE + + var/static/shutdown_on_reboot = FALSE + + var/static/auto_local_admin = FALSE + + /// Type of assets delivery transport. Valid values: simple, webroot. Simple is the default. + var/static/asset_transport = "simple" + + /// Set this to TRUE to have the server passively send all browser assets to each client in the background. + /// (instead of waiting for them to be needed) + var/static/asset_simple_preload = FALSE + + /// Local folder to save assets to. + var/static/asset_cdn_webroot = "data/asset-store/" + + /// If you want to test this locally, you simpily run the `localhost-asset-webroot-server.py` + /// python3 script to host assets stored in `data/asset-store/` via http://localhost:58715/ + var/static/asset_cdn_url = "http://localhost:58715/" + + var/static/topic_ip_ratelimit_bypass = list() /datum/configuration/New() load_config() @@ -451,7 +489,7 @@ for (var/line in lines) if (!line) continue - line = trim(line) + line = trimtext(line) if (!line || line[1] == "#") continue result += line @@ -481,6 +519,18 @@ for (var/name in file) var/value = file[name] switch (name) + // [SS220-ADD] + if ("auto_local_admin") + config.auto_local_admin = TRUE + if ("asset_transport") + config.asset_transport = value + if ("asset_simple_preload") + config.asset_simple_preload = value + if ("asset_cdn_webroot") + config.asset_cdn_webroot = value + if ("asset_cdn_url") + config.asset_cdn_url = value + // [SS220-ADDEND] if ("resource_urls") resource_urls = splittext(value, " ") if ("admin_legacy_system") @@ -505,6 +555,8 @@ log_debug = TRUE if ("log_game") log_game = TRUE + if ("log_tool") + log_tool = TRUE if ("log_vote") log_vote = TRUE if ("log_whisper") @@ -519,6 +571,8 @@ log_adminwarn = TRUE if ("log_world_output") log_world_output = TRUE + if ("log_signals") + log_signals = TRUE if ("log_hrefs") log_hrefs = TRUE if ("log_runtime") @@ -553,24 +607,44 @@ var/list/values = splittext(value, ";") var/len = length(values) if (len == 7) - vote_autotransfer_initial = text2num(values[get_weekday_index()]) MINUTES + vote_autotransfer_initial = text2num_or_default(values[get_weekday_index()]) else if (len == 1) - vote_autotransfer_initial = text2num(value) MINUTES + vote_autotransfer_initial = text2num_or_default(value) else log_misc("Invalid vote_autotransfer_initial: [value]") + vote_autotransfer_initial = 0 + if (isnull(vote_autotransfer_initial) || vote_autotransfer_initial < 0) + log_misc("Invalid vote_autotransfer_initial: [value]") + vote_autotransfer_initial = 0 if ("vote_autotransfer_interval") var/list/values = splittext(value, ";") var/len = length(values) if (len == 7) - vote_autotransfer_interval = text2num(values[get_weekday_index()]) MINUTES + vote_autotransfer_interval = text2num_or_default(values[get_weekday_index()]) else if (len == 1) - vote_autotransfer_interval = text2num(value) MINUTES + vote_autotransfer_interval = text2num_or_default(value) else log_misc("Invalid vote_autotransfer_interval: [value]") + vote_autotransfer_interval = 0 + if (isnull(vote_autotransfer_interval) || vote_autotransfer_interval < 0) + log_misc("Invalid vote_autotransfer_interval: [value]") + vote_autotransfer_interval = 0 + if ("transfer_vote_block_antag_time") + transfer_vote_block_antag_time = text2num_or_default(value) + if (isnull(transfer_vote_block_antag_time) || transfer_vote_block_antag_time < 0) + log_misc("Invalid transfer_vote_block_antag_time: [value]") + transfer_vote_block_antag_time = 0 + if ("empty_round_check_interval") + empty_round_check_interval = text2num_or_default(value) + if (isnull(empty_round_check_interval) || empty_round_check_interval < 0) + log_misc("Invalid empty_round_check_interval: [value]") + empty_round_check_interval = 0 if ("vote_autogamemode_timeleft") vote_autogamemode_timeleft = text2num(value) if ("pre_game_time") pre_game_time = text2num(value) + if ("bypass_gamemode_vote") + bypass_gamemode_vote = TRUE if ("ert_admin_only") ert_admin_call_only = TRUE if ("respawn_delay") @@ -579,7 +653,7 @@ if ("respawn_menu_delay") respawn_menu_delay = text2num(value) respawn_menu_delay = respawn_menu_delay > 0 ? respawn_menu_delay : 0 - if ("servername") + if ("server_name") server_name = value if ("serversuffix") server_suffix = TRUE @@ -644,8 +718,6 @@ else log_misc("Incorrect objective disabled definition: [value]") objectives_disabled = CONFIG_OBJECTIVE_NONE - if ("protect_roles_from_antagonist") - protect_roles_from_antagonist = TRUE if ("probability") var/regex/flatten = new (@"\s+", "g") for (var/entry in value) @@ -667,10 +739,6 @@ kick_inactive = text2num(value) if ("use_irc_bot") use_irc_bot = TRUE - if ("fps") - fps = round(text2num(value)) - if (fps <= 0) - fps = initial(fps) if ("allow_antag_hud") antag_hud_allowed = TRUE if ("antag_hud_restricted") @@ -707,6 +775,10 @@ main_irc = value if ("admin_irc") admin_irc = value + if ("admin_discord") + admin_discord = value + if ("excom_address") + excom_address = value if ("announce_evac_to_irc") announce_evac_to_irc = TRUE if ("allow_cult_ghostwriter") @@ -837,9 +909,12 @@ if ("log_timers_on_bucket_reset") log_timers_on_bucket_reset = TRUE if ("maximum_round_length") - maximum_round_length = text2num(value) MINUTES + maximum_round_length = text2num_or_default(value) + if (isnull(maximum_round_length) || maximum_round_length < 0) + log_misc("Invalid maximum_round_length: [value]") + maximum_round_length = 0 if ("stat_delay") - stat_delay = Floor(text2num(value)) + stat_delay = floor(text2num(value)) if ("warn_autoban_threshold") warn_autoban_threshold = max(0, text2num(value)) if ("warn_autoban_duration") @@ -848,6 +923,39 @@ run_empty_levels = TRUE if ("warn_if_staff_same_ip") warn_if_staff_same_ip = TRUE + if ("deletion_starts_paused") + deletion_starts_paused = TRUE + if ("enable_cold_mist") + enable_cold_mist = TRUE + if ("disable_runechat") + runechat_enabled = FALSE + // [SIERRA-ADD] + if ("shutdown_on_reboot") + shutdown_on_reboot = TRUE + // [/SIERRA-ADD] + // [SIERRA-ADD] - EX666_ECOSYSTEM + if ("overflow_server_url") + overflow_server_url = value + if("usewhitelist_database") + usewhitelist_database = TRUE + if("minimum_byondacc_age") + minimum_byondacc_age = text2num(value) + // [/SIERRA-ADD] + // [SS220-ADD] + if("tts_enabled") + tts_enabled = TRUE + if("tts_token_silero") + tts_token_silero = value + if("tts_cache_enabled") + tts_cache_enabled = TRUE + if("ffmpeg_cpuaffinity") + var/sanitized = regex(@"[^0-9,-]", "g").Replace(value, "") + ffmpeg_cpuaffinity = sanitized + if("tts_api_url_silero") + tts_api_url_silero = value + if("topic_ip_ratelimit_bypass") + topic_ip_ratelimit_bypass = params2list(value) + // [/SS220-ADD] else log_misc("Unknown setting in config/config.txt: '[name]'") @@ -882,8 +990,6 @@ walk_delay = value if ("creep_delay") creep_delay = value - if ("glide_size") - glide_size = value if ("minimum_sprint_cost") minimum_sprint_cost = value if ("skill_sprint_cost_range") @@ -932,6 +1038,10 @@ sqlfdbklogin = value if ("feedback_password") sqlfdbkpass = value + // [SIERRA-ADD] - EX666_ECOSYSTEM + if("utility_database") + sqlfdbkdbutil = value + // [/SIERRA-ADD] else log_misc("Unknown setting in config/dbconfig.txt: '[name]'") diff --git a/code/controllers/controller.dm b/code/controllers/controller.dm index 4e5396b84e46c..a79331aa8c137 100644 --- a/code/controllers/controller.dm +++ b/code/controllers/controller.dm @@ -10,12 +10,9 @@ var/statNext = 0 -/datum/controller/Destroy(force) - log_debug({"Controller "[name]" destroyed with force="[force]"!"}) - if (!force) - return QDEL_HINT_LETMELIVE - QDEL_NULL(statLine) - return ..() +/datum/controller/Destroy() + SHOULD_CALL_PARENT(FALSE) + return QDEL_HINT_LETMELIVE /datum/controller/proc/Initialize() diff --git a/code/controllers/evacuation/evacuation.dm b/code/controllers/evacuation/evacuation.dm index 85c9064868ec9..3c26fdb7fe944 100644 --- a/code/controllers/evacuation/evacuation.dm +++ b/code/controllers/evacuation/evacuation.dm @@ -89,14 +89,14 @@ var/global/datum/evacuation_controller/evacuation_controller state = EVAC_PREPPING if(emergency_evacuation) - for(var/area/A in world) + for(var/area/A as anything in GLOB.areas) if(istype(A, /area/hallway)) A.readyalert() if(!skip_announce) GLOB.using_map.emergency_shuttle_called_announcement() else if(!skip_announce) - priority_announcement.Announce(replacetext(replacetext(GLOB.using_map.shuttle_called_message, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60)] minute\s")) + priority_announcement.Announce(replacetext(replacetext(GLOB.using_map.shuttle_called_message, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,0.5)] minute\s"), new_sound = GLOB.using_map.shuttle_called_sound) return 1 @@ -104,8 +104,9 @@ var/global/datum/evacuation_controller/evacuation_controller if(!can_cancel()) return 0 + if(!emergency_evacuation) + evac_cooldown_time = world.time + (world.time - evac_called_at) - evac_cooldown_time = world.time + (world.time - evac_called_at) state = EVAC_COOLDOWN evac_ready_time = null @@ -117,7 +118,7 @@ var/global/datum/evacuation_controller/evacuation_controller if(emergency_evacuation) evac_recalled.Announce(GLOB.using_map.emergency_shuttle_recall_message) - for(var/area/A in world) + for(var/area/A as anything in GLOB.areas) if(istype(A, /area/hallway)) A.readyreset() emergency_evacuation = 0 @@ -129,11 +130,11 @@ var/global/datum/evacuation_controller/evacuation_controller /datum/evacuation_controller/proc/finish_preparing_evac() state = EVAC_LAUNCHING - var/estimated_time = round(get_eta()/60,1) + var/estimated_time = round(get_eta()/60,0.5) if (emergency_evacuation) - evac_waiting.Announce(replacetext(GLOB.using_map.emergency_shuttle_docked_message, "%ETD%", "[estimated_time] minute\s"), new_sound = sound('sound/effects/Evacuation.ogg', volume = 35)) + evac_waiting.Announce(replacetext(GLOB.using_map.emergency_shuttle_docked_message, "%ETD%", "[estimated_time] minute\s"), new_sound = sound('sound/effects/Evacuation.ogg', volume = 30)) else - priority_announcement.Announce(replacetext(replacetext(GLOB.using_map.shuttle_docked_message, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETD%", "[estimated_time] minute\s")) + priority_announcement.Announce(replacetext(replacetext(GLOB.using_map.shuttle_docked_message, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETD%", "[estimated_time] minute\s"), new_sound = GLOB.using_map.shuttle_docked_sound) if(config.announce_evac_to_irc) send2mainirc("Evacuation has started. It will end in approximately [estimated_time] minute\s.") @@ -145,9 +146,9 @@ var/global/datum/evacuation_controller/evacuation_controller state = EVAC_IN_TRANSIT if (emergency_evacuation) - priority_announcement.Announce(replacetext(replacetext(GLOB.using_map.emergency_shuttle_leaving_dock, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,1)] minute\s")) + priority_announcement.Announce(replacetext(replacetext(GLOB.using_map.emergency_shuttle_leaving_message, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,0.5)] minute\s")) else - priority_announcement.Announce(replacetext(replacetext(GLOB.using_map.shuttle_leaving_dock, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,1)] minute\s")) + priority_announcement.Announce(replacetext(replacetext(GLOB.using_map.shuttle_leaving_message, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,0.5)] minute\s"), new_sound = GLOB.using_map.shuttle_leaving_sound) return 1 @@ -186,3 +187,35 @@ var/global/datum/evacuation_controller/evacuation_controller /datum/evacuation_controller/proc/should_call_autotransfer_vote() return (state == EVAC_IDLE) + + +/datum/evacuation_controller/proc/UpdateStat() + var/stat_text = "Invalid State" + switch (state) + if (EVAC_IDLE) + stat_text = "Idle" + if (EVAC_PREPPING) + stat_text = "Preparing" + stat_text += " | Emergency: [emergency_evacuation ? "Y" : "N"]" + stat_text += " | Called At: [worldtime2stationtime(evac_called_at)]" + stat_text += " | Ready In: [time_to_readable(evac_ready_time - world.time)]" + stat_text += " | No Return: [world.time > evac_no_return ? "Y" : "In [time_to_readable(evac_no_return - world.time)]"]" + stat_text += " | Recall: [recall ? "Y ([time_to_readable(auto_recall_time - world.time)])" : "N"]" + if (EVAC_LAUNCHING) + stat_text = "Launching" + stat_text += " | Emergency: [emergency_evacuation ? "Y" : "N"]" + stat_text += " | Called At: [worldtime2stationtime(evac_called_at)]" + stat_text += " | Launch In: [time_to_readable(evac_launch_time - world.time)]" + if (EVAC_IN_TRANSIT) + stat_text = "In Transit" + stat_text += " | Emergency: [emergency_evacuation ? "Y" : "N"]" + stat_text += " | Called At: [worldtime2stationtime(evac_called_at)]" + stat_text += " | Arrive In: [time_to_readable(evac_arrival_time - world.time)]" + if (EVAC_COOLDOWN) + stat_text = "Cooldown" + stat_text += " | Emergency: [emergency_evacuation ? "Y" : "N"]" + stat_text += " | Idle In: [time_to_readable(evac_cooldown_time - world.time)]" + if (EVAC_COMPLETE) + stat_text = "Complete" + stat_text += " | Emergency: [emergency_evacuation ? "Y" : "N"]" + return stat_text diff --git a/code/controllers/evacuation/evacuation_lifepods.dm b/code/controllers/evacuation/evacuation_lifepods.dm index 64233aae77c73..2ca44bc9688aa 100644 --- a/code/controllers/evacuation/evacuation_lifepods.dm +++ b/code/controllers/evacuation/evacuation_lifepods.dm @@ -14,7 +14,7 @@ ) /datum/evacuation_controller/lifepods/launch_evacuation() - priority_announcement.Announce(replacetext(replacetext(GLOB.using_map.emergency_shuttle_leaving_dock, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,1)] minute\s")) + priority_announcement.Announce(replacetext(replacetext(GLOB.using_map.emergency_shuttle_leaving_message, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,1)] minute\s")) /datum/evacuation_controller/lifepods/available_evac_options() if (is_on_cooldown()) @@ -25,4 +25,4 @@ return list(evacuation_options[EVAC_OPT_CANCEL_ABANDON_SHIP]) #undef EVAC_OPT_ABANDON_SHIP -#undef EVAC_OPT_CANCEL_ABANDON_SHIP \ No newline at end of file +#undef EVAC_OPT_CANCEL_ABANDON_SHIP diff --git a/code/controllers/evacuation/evacuation_pods.dm b/code/controllers/evacuation/evacuation_pods.dm index bb93bbebda799..cce52b81740ab 100644 --- a/code/controllers/evacuation/evacuation_pods.dm +++ b/code/controllers/evacuation/evacuation_pods.dm @@ -42,10 +42,10 @@ pod.move_time = (evac_transit_delay/10) pod.launch(src) - priority_announcement.Announce(replacetext(replacetext(GLOB.using_map.emergency_shuttle_leaving_dock, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,1)] minute\s")) + priority_announcement.Announce(replacetext(replacetext(GLOB.using_map.emergency_shuttle_leaving_message, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,0.5)] minute\s")) else // Bluespace Jump - priority_announcement.Announce(replacetext(replacetext(GLOB.using_map.shuttle_leaving_dock, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,1)] minute\s")) + priority_announcement.Announce(replacetext(replacetext(GLOB.using_map.shuttle_leaving_message, "%dock_name%", "[GLOB.using_map.dock_name]"), "%ETA%", "[round(get_eta()/60,0.5)] minute\s"), new_sound = GLOB.using_map.shuttle_leaving_sound) SetUniversalState(/datum/universal_state/bluespace_jump, arguments=list(GLOB.using_map.station_levels)) /datum/evacuation_controller/starship/finish_evacuation() @@ -134,4 +134,4 @@ #undef EVAC_OPT_ABANDON_SHIP #undef EVAC_OPT_BLUESPACE_JUMP #undef EVAC_OPT_CANCEL_ABANDON_SHIP -#undef EVAC_OPT_CANCEL_BLUESPACE_JUMP \ No newline at end of file +#undef EVAC_OPT_CANCEL_BLUESPACE_JUMP diff --git a/code/controllers/evacuation/evacuation_predicate.dm b/code/controllers/evacuation/evacuation_predicate.dm index 93e380924b414..e86c39b219b61 100644 --- a/code/controllers/evacuation/evacuation_predicate.dm +++ b/code/controllers/evacuation/evacuation_predicate.dm @@ -1,9 +1,8 @@ /datum/evacuation_predicate/New() return -/datum/evacuation_predicate/Destroy(forced) - if(forced) - return ..() +/datum/evacuation_predicate/Destroy() + SHOULD_CALL_PARENT(FALSE) return QDEL_HINT_LETMELIVE /datum/evacuation_predicate/proc/is_valid() diff --git a/code/controllers/evacuation/evacuation_shuttle.dm b/code/controllers/evacuation/evacuation_shuttle.dm index 6c9c5e3c62080..87fb8a8c025b0 100644 --- a/code/controllers/evacuation/evacuation_shuttle.dm +++ b/code/controllers/evacuation/evacuation_shuttle.dm @@ -3,9 +3,9 @@ /datum/evacuation_controller/shuttle name = "escape shuttle controller" - evac_waiting = new(0, new_sound = sound('sound/AI/shuttledock.ogg')) - evac_called = new(0, new_sound = sound('sound/AI/shuttlecalled.ogg')) - evac_recalled = new(0, new_sound = sound('sound/AI/shuttlerecalled.ogg')) + evac_waiting = new(0, new_sound = sound(ANNOUNCER_SHUTTLEDOCK)) + evac_called = new(0, new_sound = sound(ANNOUNCER_SHUTTLECALLED)) + evac_recalled = new(0, new_sound = sound(ANNOUNCER_SHUTTLERECALLED)) emergency_prep_additional_delay = 0 MINUTES transfer_prep_additional_delay = 0 MINUTES @@ -27,7 +27,6 @@ return (!autopilot || (shuttle && shuttle.is_launching())) /datum/evacuation_controller/shuttle/launch_evacuation() - if(waiting_to_leave()) return @@ -37,7 +36,7 @@ pod.launch(src) if(autopilot && shuttle.moving_status == SHUTTLE_IDLE) - evac_arrival_time = world.time + (shuttle.move_time*10) + (shuttle.warmup_time*10) + evac_arrival_time = world.time + (shuttle.move_time * 10) + (shuttle.warmup_time) shuttle.launch(src) // Announcements, state changes and such are handled by the shuttle itself to prevent desync. diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index c6a5afe2be675..658f667ae61d5 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -1,8 +1,8 @@ - /** - * Failsafe - * - * Pretty much pokes the MC to make sure it's still alive. - **/ +/** + * Failsafe + * + * Pretty much pokes the MC to make sure it's still alive. + */ var/global/datum/controller/failsafe/Failsafe diff --git a/code/controllers/hooks-defs.dm b/code/controllers/hooks-defs.dm index cca755311061d..76c878d998fd2 100644 --- a/code/controllers/hooks-defs.dm +++ b/code/controllers/hooks-defs.dm @@ -10,6 +10,12 @@ */ /hook/startup +/** + * Game Ready hook. + * Called in master.dm once initialization is complete. + */ +/hook/game_ready + /** * Roundstart hook. * Called in ticker.dm when a round starts. @@ -97,3 +103,17 @@ * Parameters: var/obj/structure/closet/crate/sold, var/area/shuttle */ /hook/sell_crate + +/** + * Anomaly cage sold hook. + * Called in supplyshuttle.dm when a anomaly container is sold on the shuttle. + * Parameters: var/obj/machinery/anomaly_container/sold, var/area/shuttle + */ +/hook/sell_anomalycage + +/** + * Animal sold hook. + * Called in supplyshuttle.dm when a anomaly container is sold on the shuttle. + * Parameters: var/obj/structure/stasis_cage/sold, var/area/shuttle + */ +/hook/sell_animal diff --git a/code/controllers/hooks.dm b/code/controllers/hooks.dm index 2e05a0621b0fd..ae32f42034902 100644 --- a/code/controllers/hooks.dm +++ b/code/controllers/hooks.dm @@ -32,7 +32,8 @@ var/caller = new hook_path var/status = 1 for(var/P in typesof("[hook_path]/proc")) - if(!call(caller, P)(arglist(args))) + var/proc_name = replacetext("[P]", "[hook_path]/proc/", "") + if(!call(caller, proc_name)(arglist(args))) error("Hook '[P]' failed or runtimed.") status = 0 diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 29f0770bf275b..6668e64e09a3f 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -1,11 +1,11 @@ - /** - * StonedMC - * - * Designed to properly split up a given tick among subsystems - * Note: if you read parts of this code and think "why is it doing it that way" - * Odds are, there is a reason - * - **/ +/** + * StonedMC + * + * Designed to properly split up a given tick among subsystems + * Note: if you read parts of this code and think "why is it doing it that way" + * Odds are, there is a reason + * + */ //This is the ABSOLUTE ONLY THING that should init globally like this var/global/datum/controller/master/Master = new @@ -66,11 +66,8 @@ var/global/datum/controller/master/Master = new /datum/controller/master/New() Uptime() //Uptime as close to boot as possible to set its statics - if (!global.diary) - global.diary = file("data/logs/[time2text(world.timeofday, "YYYY/MM/DD", -world.timezone)].log") if (!config) config = new - world.fps = config.fps total_run_times = list() // Highlander-style: there can only be one! Kill off the old and replace it with the new. var/list/_subsystems = list() @@ -81,7 +78,7 @@ var/global/datum/controller/master/Master = new qdel(Master) else var/list/subsytem_types = subtypesof(/datum/controller/subsystem) - sortTim(subsytem_types, /proc/cmp_subsystem_init) + sortTim(subsytem_types, GLOBAL_PROC_REF(cmp_subsystem_init)) for(var/I in subsytem_types) _subsystems += new I Master = src @@ -95,7 +92,7 @@ var/global/datum/controller/master/Master = new /datum/controller/master/Shutdown() processing = FALSE - sortTim(subsystems, /proc/cmp_subsystem_init) + sortTim(subsystems, GLOBAL_PROC_REF(cmp_subsystem_init)) reverseRange(subsystems) for(var/datum/controller/subsystem/ss in subsystems) if (ss.flags & SS_NEEDS_SHUTDOWN) @@ -170,13 +167,16 @@ var/global/datum/controller/master/Master = new // Please don't stuff random bullshit here, // Make a subsystem, give it the SS_NO_FIRE flag, and do your work in it's Initialize() -/datum/controller/master/Initialize(delay, init_sss) +/datum/controller/master/Initialize(delay, init_sss, tgs_prime = FALSE) set waitfor = FALSE var/start_uptime = Uptime() if(delay) sleep(delay) + if(tgs_prime) + world.TgsInitializationComplete() + if(init_sss) init_subtypes(/datum/controller/subsystem, subsystems) @@ -185,7 +185,7 @@ var/global/datum/controller/master/Master = new initializing = TRUE // Sort subsystems by init_order, so they initialize in the correct order. - sortTim(subsystems, /proc/cmp_subsystem_init) + sortTim(subsystems, GLOBAL_PROC_REF(cmp_subsystem_init)) current_ticklimit = tick_limit_init for (var/datum/controller/subsystem/SS in subsystems) @@ -202,10 +202,11 @@ var/global/datum/controller/master/Master = new if (!current_runlevel) sound_to(world, sound('sound/ui/lobby-notify.ogg', volume = 40)) + callHook("game_ready") SetRunLevel(RUNLEVEL_LOBBY) // Sort subsystems by display setting for easy access. - sortTim(subsystems, /proc/cmp_subsystem_display) + sortTim(subsystems, GLOBAL_PROC_REF(cmp_subsystem_display)) // Set world options. #ifdef UNIT_TEST world.sleep_offline = FALSE @@ -224,6 +225,10 @@ var/global/datum/controller/master/Master = new if(current_runlevel < 1) CRASH("Attempted to set invalid runlevel: [new_runlevel]") + // [SIERRA-ADD] - LOBBYSCREEN + GLOB.using_map.update_titlescreens() + // [/SIERRA-ADD] + // Starts the mc, and sticks around to restart it if the loop ever ends. /datum/controller/master/proc/StartProcessing(delay) set waitfor = 0 @@ -281,9 +286,9 @@ var/global/datum/controller/master/Master = new queue_tail = null //these sort by lower priorities first to reduce the number of loops needed to add subsequent SS's to the queue //(higher subsystems will be sooner in the queue, adding them later in the loop means we don't have to loop thru them next queue add) - sortTim(tickersubsystems, /proc/cmp_subsystem_priority) + sortTim(tickersubsystems, GLOBAL_PROC_REF(cmp_subsystem_priority)) for(var/level in runlevel_sorted_subsystems) - sortTim(level, /proc/cmp_subsystem_priority) + sortTim(level, GLOBAL_PROC_REF(cmp_subsystem_priority)) level += tickersubsystems var/cached_runlevel = current_runlevel @@ -337,14 +342,15 @@ var/global/datum/controller/master/Master = new var/checking_runlevel = current_runlevel if(cached_runlevel != checking_runlevel) //resechedule subsystems + var/list/old_subsystems = current_runlevel_subsystems cached_runlevel = checking_runlevel current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel] - var/stagger = world.time - for(var/I in current_runlevel_subsystems) - var/datum/controller/subsystem/SS = I - if(SS.next_fire <= world.time) - stagger += world.tick_lag * rand(1, 5) - SS.next_fire = stagger + //now we'll go through all the subsystems we want to offset and give them a next_fire + for(var/datum/controller/subsystem/SS as anything in current_runlevel_subsystems) + //we only want to offset it if it's new and also behind + if(SS.next_fire > world.time || (SS in old_subsystems)) + continue + SS.next_fire = world.time + world.tick_lag * rand(0, min(SS.wait, 2 SECONDS) / world.tick_lag) subsystems_to_check = current_runlevel_subsystems else diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index 54bbe9876bbcb..1fb0b632324d7 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -3,7 +3,7 @@ name = "fire coderbus" //name of the subsystem var/init_order = SS_INIT_DEFAULT //order of initialization. Higher numbers are initialized first, lower numbers later. Use defines in __DEFINES/subsystems.dm for easy understanding of order. var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer. - var/priority = SS_PRIORITY_DEFAULT //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep + var/priority = FIRE_PRIORITY_DEFAULT //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep var/flags = 0 //see MC.dm in __DEFINES Most flags must be set on world start to take full effect. (You can also restart the mc to force them to process again) // Similar to can_fire, but intended explicitly for subsystems that are asleep. Using this var instead of can_fire @@ -39,7 +39,7 @@ var/init_start = 0 // What timeofday did we start initializing? var/init_finish // What timeofday did we finish initializing? - var/runlevels = RUNLEVELS_DEFAULT //points of the game at which the SS can fire + var/runlevels = RUNLEVELS_GAME //points of the game at which the SS can fire var/static/list/failure_strikes //How many times we suspect a subsystem type has crashed the MC, 3 strikes and you're out! @@ -172,7 +172,10 @@ init_finish = Uptime() . = (Uptime() - start_uptime) / 10 var/msg = "Initialized [name] subsystem within [.] second[. == 1 ? "" : "s"]!" - to_chat(world, SPAN_CLASS("boldannounce", "[msg]")) + // [SIERRA-EDIT] - LOBBYSCREEN + // to_chat(world, SPAN_CLASS("boldannounce", "[msg]")) // SIERRA-EDIT - ORIGINAL + admin_notice(SPAN_CLASS("boldannounce", "[msg]")) + // [/SIERRA-EDIT] log_world(msg) init_state = SS_INITSTATE_DONE @@ -270,7 +273,7 @@ /singleton/vv_set_handler/subsystem_handler handled_type = /datum/controller/subsystem handled_vars = list("can_fire") - predicates = list(/proc/is_num_predicate) + predicates = list(GLOBAL_PROC_REF(is_num_predicate)) /singleton/vv_set_handler/subsystem_handler/handle_set_var(datum/controller/subsystem/SS, variable, var_value, client) if (var_value) diff --git a/code/controllers/subsystems/SSinput.dm b/code/controllers/subsystems/SSinput.dm new file mode 100644 index 0000000000000..2e63132a1da52 --- /dev/null +++ b/code/controllers/subsystems/SSinput.dm @@ -0,0 +1,36 @@ +SUBSYSTEM_DEF(input) + name = "Input" + wait = 1 //SS_TICKER means this runs every tick + flags = SS_TICKER + init_order = SS_INIT_INPUT + priority = FIRE_PRIORITY_INPUT + runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY + var/list/macro_set + +/datum/controller/subsystem/input/Initialize() + setup_default_macro_sets() + refresh_client_macro_sets() + return ..() + +// This is for when macro sets are eventualy datumized +/datum/controller/subsystem/input/proc/setup_default_macro_sets() + macro_set = list( + "Any" = "\"KeyDown \[\[*\]\]\"", + "Any+UP" = "\"KeyUp \[\[*\]\]\"", + "Back" = "\".winset \\\"outputwindow.input.text=\\\"\\\"\\\"\"", + "Tab" = "ToggleHotkeyMode", + "Escape" = "Reset-Held-Keys" + ) + +// Badmins just wanna have fun ♪ +/datum/controller/subsystem/input/proc/refresh_client_macro_sets() + for(var/client/C as anything in GLOB.clients) + if(!C) + continue + C.set_macros() + +/datum/controller/subsystem/input/fire() + for(var/client/C as anything in GLOB.clients) + if(!C) + continue + C.keyLoop() diff --git a/code/controllers/subsystems/ai.dm b/code/controllers/subsystems/ai.dm index 8528e5aea13c6..70d3db492e0ed 100644 --- a/code/controllers/subsystems/ai.dm +++ b/code/controllers/subsystems/ai.dm @@ -1,8 +1,7 @@ SUBSYSTEM_DEF(ai) name = "AI" init_order = SS_INIT_AI - priority = SS_PRIORITY_AI - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + priority = FIRE_PRIORITY_AI wait = 2 SECONDS var/static/list/datum/ai_holder/ai_holders = list() var/static/list/datum/ai_holder/queue = list() diff --git a/code/controllers/subsystems/aifast.dm b/code/controllers/subsystems/aifast.dm index 86f8f051c4c09..8be96ec86f8b6 100644 --- a/code/controllers/subsystems/aifast.dm +++ b/code/controllers/subsystems/aifast.dm @@ -1,9 +1,8 @@ SUBSYSTEM_DEF(aifast) name = "AI (Fast)" init_order = SS_INIT_AIFAST - priority = SS_PRIORITY_AI - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME - wait = 0.25 SECONDS + priority = FIRE_PRIORITY_AI + wait = 0.5 SECONDS var/static/list/datum/ai_holder/ai_holders = list() var/static/list/datum/ai_holder/queue = list() diff --git a/code/controllers/subsystems/air.dm b/code/controllers/subsystems/air.dm index 27377d9fa2ef3..a1edb54711093 100644 --- a/code/controllers/subsystems/air.dm +++ b/code/controllers/subsystems/air.dm @@ -63,7 +63,7 @@ Class Procs: SUBSYSTEM_DEF(air) name = "Air" - priority = SS_PRIORITY_AIR + priority = FIRE_PRIORITY_AIR init_order = SS_INIT_AIR flags = SS_POST_FIRE_TIMING @@ -191,7 +191,7 @@ Geometry processing completed in [(Uptime() - start_uptime)/10] seconds! T.post_update_air_properties() T.needs_air_update = 0 #ifdef ZASDBG - T.overlays -= mark + T.CutOverlays(mark) updated++ #endif @@ -208,7 +208,7 @@ Geometry processing completed in [(Uptime() - start_uptime)/10] seconds! T.post_update_air_properties() T.needs_air_update = 0 #ifdef ZASDBG - T.overlays -= mark + T.CutOverlays(mark) updated++ #endif @@ -357,7 +357,7 @@ Geometry processing completed in [(Uptime() - start_uptime)/10] seconds! return tiles_to_update += T #ifdef ZASDBG - T.overlays += mark + T.AddOverlays(mark) #endif T.needs_air_update = 1 diff --git a/code/controllers/subsystems/airflow.dm b/code/controllers/subsystems/airflow.dm index d8b56db4732b0..dc7ec768c3025 100644 --- a/code/controllers/subsystems/airflow.dm +++ b/code/controllers/subsystems/airflow.dm @@ -13,7 +13,7 @@ SUBSYSTEM_DEF(airflow) name = "Airflow" wait = 1 flags = SS_NO_INIT - priority = SS_PRIORITY_AIRFLOW + priority = FIRE_PRIORITY_AIRFLOW var/static/list/atom/movable/movables = list() var/static/list/atom/movable/queue = list() diff --git a/code/controllers/subsystems/alarm.dm b/code/controllers/subsystems/alarm.dm index 7ada0c9a4034f..ec69d4b9933e3 100644 --- a/code/controllers/subsystems/alarm.dm +++ b/code/controllers/subsystems/alarm.dm @@ -1,7 +1,7 @@ SUBSYSTEM_DEF(alarm) name = "Alarm" wait = 2 SECONDS - priority = SS_PRIORITY_ALARM + priority = FIRE_PRIORITY_ALARM init_order = SS_INIT_ALARM var/static/list/datum/alarm_handler/alarm_handlers var/static/list/datum/alarm_handler/queue = list() diff --git a/code/controllers/subsystems/ambient_lighting.dm b/code/controllers/subsystems/ambient_lighting.dm new file mode 100644 index 0000000000000..98c5fb6b9e872 --- /dev/null +++ b/code/controllers/subsystems/ambient_lighting.dm @@ -0,0 +1,243 @@ +SUBSYSTEM_DEF(ambient_lighting) //A simple SS that handles updating ambient lights of away sites and such places + name = "Ambient Lighting" + wait = 1 + init_order = SS_INIT_AMBIENT_LIGHT + runlevels = RUNLEVELS_PREGAME | RUNLEVELS_GAME + + /// List of turfs queued for ambient light evaluation + var/list/queued = list() + + /// A bitmap of free ambience group indexes. + var/ambient_group_free_bitmap = ~0 + /// map of ambiient groups + var/list/ambient_groups[AMBIENT_GROUP_MAX_BITS] + +/datum/ambient_group + /// Index in SSambient_lighting map + var/global_index + var/list/member_turfs_by_z = list() + /// Color data, do NOT modify manually + var/apparent_r + var/apparent_g + var/apparent_b + /// Prevent modification of member turfs or colour while an operation is taking place + var/busy = FALSE + +/datum/ambient_group/New(ncolor, nmultiplier, nindex) + . = ..() + set_color(ncolor, nmultiplier) + global_index = nindex + +/datum/ambient_group/Destroy() + SSambient_lighting.ambient_groups[global_index] = null + SSambient_lighting.ambient_group_free_bitmap |= FLAG(global_index) + return ..() + +/datum/ambient_group/proc/set_color(color, multiplier) + var/list/new_parts = rgb2num(color) + //Calculate delta from current to desired location + var/dr = (new_parts[1] / 255) * multiplier - apparent_r + var/dg = (new_parts[2] / 255) * multiplier - apparent_g + var/db = (new_parts[3] / 255) * multiplier - apparent_b + + if (round(dr/4, LIGHTING_ROUND_VALUE) == 0 && round(dg/4, LIGHTING_ROUND_VALUE) == 0 && round(db/4, LIGHTING_ROUND_VALUE) == 0) + // no-op + return + + busy = TRUE + + // Doing it ordered by zlev should ensure that it looks vaguely coherent mid-update regardless of turf insertion order. + for (var/zlev in 1 to length(member_turfs_by_z)) + for (var/turf/T as anything in member_turfs_by_z[zlev]) + T.add_ambient_light_raw(dr, dg, db) + CHECK_TICK + + apparent_r += dr + apparent_g += dg + apparent_b += db + + busy = FALSE + +/** + * Adds group ambient light to a turf + * + * **Parameters**: + * - `T` turf - Turf to modify + * + */ +/datum/ambient_group/proc/set_ambient_light(turf/T) + set waitfor = FALSE + + UNTIL(!busy) + T.add_ambient_light_raw(apparent_r, apparent_g, apparent_b) + +/** + * Removes group ambient light from turf + * + * **Parameters**: + * - `T` turf - Turf to modify + * + */ +/datum/ambient_group/proc/remove_ambient_light(turf/T) + set waitfor = FALSE + + UNTIL(!busy) + T.add_ambient_light_raw(-apparent_r, -apparent_g, -apparent_b) + +/** + * Adds turf to ambient group, will set bitflags and set current ambient light + * + * **Parameters**: + * - `T` turf - Turf to add and track + * + */ +/datum/ambient_group/proc/add_turf(turf/T) + set waitfor = FALSE + + UNTIL(!busy) + //Already existing + if(T.ambient_bitflag & FLAG(global_index)) + return + + if (T.z > length(member_turfs_by_z)) + member_turfs_by_z.len = T.z + + LAZYADD(member_turfs_by_z[T.z], T) + T.ambient_bitflag |= FLAG(global_index) + set_ambient_light(T) + +/** + * Removes turf from ambient group if it is part of it. Removes group's ambient light and flag from turf + * + * **Parameters**: + * - `T` turf - Turf to remove + * + */ +/datum/ambient_group/proc/remove_turf(turf/T) + set waitfor = FALSE + + UNTIL(!busy) + if(!(T.ambient_bitflag & FLAG(global_index))) + return + + if (T.z > length(member_turfs_by_z)) + CRASH("Attempt to remove member turf with Z greater than local max -- this turf is not a member") + + remove_ambient_light(T) + T.ambient_bitflag &= ~FLAG(global_index) + member_turfs_by_z[T.z] -= T + +/** + * Find a valid index in the ambient group map for a new group + * + * Returns index or -1 if no indices are left + */ +/datum/controller/subsystem/ambient_lighting/proc/allocate_index() + if (ambient_group_free_bitmap == 0) + return -1 //Out of indices, no ambient light for you + + // Find the first free index in the bitmap. + var/index = 1 + while (!(ambient_group_free_bitmap & FLAG(index)) && index < AMBIENT_GROUP_MAX_BITS) + index += 1 + + ambient_group_free_bitmap &= ~FLAG(index) + + return index +/** + * Adds the space ambient group if it doesn't currently exist + * + */ +/datum/controller/subsystem/ambient_lighting/proc/add_space_ambient_group() + var/index = allocate_index() //It will always be 1, but we want to make sure bitmap is in a valid state + + ASSERT(index == SPACE_AMBIENT_GROUP) + + ambient_groups[index] = new /datum/ambient_group(SSskybox.background_color, config.starlight, index ) + +/** + * Removes turf from ambient group if it is part of it. Removes group's ambient light and flag from turf + * + * **Parameters**: + * - `color` color - Initial color + * - `multiplier` float - Initial multiplier of light strength + * + * Returns index or -1 if no indices are left + */ +/datum/controller/subsystem/ambient_lighting/proc/create_ambient_group(color, multiplier) + + if(isnull(ambient_groups[SPACE_AMBIENT_GROUP])) //Something (probably a planet) wants to add an ambient group, add space first + add_space_ambient_group() + + // Find the first free index in the bitmap. + var/index = allocate_index() + + if(index <= 0) + return index + + ambient_groups[index] = new /datum/ambient_group(color, multiplier, index) + + return index + +/** + * Removes turf from all ambient groups it is part of (if any) + * + * **Parameters**: + * - `target` turf - Turf to remove + */ +/datum/controller/subsystem/ambient_lighting/proc/clean_turf(turf/target) + if(target.ambient_bitflag != 0) + for(var/datum/ambient_group/A in ambient_groups) + if(target.ambient_bitflag & FLAG(A.global_index)) + A.remove_turf(target) + if(!target.ambient_bitflag) + return //Return early if flag is already clear + +/datum/controller/subsystem/ambient_lighting/Initialize(start_timeofday) + //Create space ambient group if nothing created it until now. + if(isnull(ambient_groups[SPACE_AMBIENT_GROUP])) + add_space_ambient_group() + + fire(FALSE, TRUE) + return ..() + +/// Go over turfs in queue, add them to space or planet ambient groups if valid, else remove them from all ambient groups +/datum/controller/subsystem/ambient_lighting/fire(resumed = FALSE, no_mc_tick = FALSE) + var/list/curr = queued + var/starlight_enabled = config.starlight + + var/needs_ambience + while (length(curr)) + var/turf/target = curr[length(curr)] + LIST_DEC(curr) + + if(target?.is_outside()) + needs_ambience = TURF_IS_DYNAMICALLY_LIT_UNSAFE(target) + if (!needs_ambience) + for (var/turf/T as anything in RANGE_TURFS(target, 1)) + if(TURF_IS_DYNAMICALLY_LIT_UNSAFE(T)) + needs_ambience = TRUE + break + + if (needs_ambience) + var/obj/overmap/visitable/sector/exoplanet/E = map_sectors["[target.z]"] + if (istype(E)) + if(E.ambient_group_index > 0) + var/datum/ambient_group/A = ambient_groups[E.ambient_group_index] + A.add_turf(target) + else + if (starlight_enabled) //Assume we can light up exterior with space light generally + var/datum/ambient_group/A = ambient_groups[SPACE_AMBIENT_GROUP] + A.add_turf(target) + else if (TURF_IS_AMBIENT_LIT_UNSAFE(target)) + //Remove from all groups + if(target.ambient_bitflag != 0) + for(var/datum/ambient_group/A in ambient_groups) + A.remove_turf(target) + if(!target.ambient_bitflag) + break + + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + return diff --git a/code/controllers/subsystems/ao.dm b/code/controllers/subsystems/ao.dm index 542412fc406d6..c61a1de3317ed 100644 --- a/code/controllers/subsystems/ao.dm +++ b/code/controllers/subsystems/ao.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(ao) name = "Ambient Occlusion" init_order = SS_INIT_MISC_LATE wait = 1 - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY + runlevels = RUNLEVELS_PREGAME | RUNLEVELS_GAME flags = SS_NO_INIT var/static/list/image_cache = list() var/static/list/turf/queue = list() diff --git a/code/controllers/subsystems/area_turfs.dm b/code/controllers/subsystems/area_turfs.dm new file mode 100644 index 0000000000000..bb9427d282413 --- /dev/null +++ b/code/controllers/subsystems/area_turfs.dm @@ -0,0 +1,58 @@ +#define ALLOWED_LOOSE_TURFS 100 + +SUBSYSTEM_DEF(area_turfs) + name = "Area Turfs" + flags = SS_NO_INIT + runlevels = RUNLEVELS_PREGAME|RUNLEVELS_GAME + /// List of areas enqued to be updated + var/static/list/queue = list() + /// List of areas marked for clearing + var/static/list/area/marked_for_clearing = list() + +/datum/controller/subsystem/area_turfs/UpdateStat(text) + var/turfs_to_uncontain = 0 + for(var/area/marked_for_clearing as anything in marked_for_clearing) + for(var/z_level in marked_for_clearing.turfs_to_uncontain_by_z) + turfs_to_uncontain += length(marked_for_clearing.turfs_to_uncontain_by_z[z_level]) + + . = ..("Queue: [length(queue)] | To Uncontain: [turfs_to_uncontain]") + +/datum/controller/subsystem/area_turfs/fire(resumed) + if(!resumed) + queue = GLOB.areas.Copy() + + while(length(queue)) + var/area/to_check = queue[length(queue)] + for(var/z_level in to_check.turfs_to_uncontain_by_z) + var/list/to_uncontain = LAZYACCESS(to_check.turfs_to_uncontain_by_z, z_level) + if(LAZYLEN(to_uncontain) <= ALLOWED_LOOSE_TURFS) + continue + + marked_for_clearing |= to_check + break + + LIST_DEC(queue) + if(MC_TICK_CHECK) + return + + while(length(marked_for_clearing)) + var/area/area_to_clear = marked_for_clearing[length(marked_for_clearing)] + for(var/z_level in area_to_clear.contained_turfs_by_z) + var/list/turfs_to_uncontain = LAZYACCESS(area_to_clear.turfs_to_uncontain_by_z, z_level) + if(!LAZYLEN(turfs_to_uncontain)) + continue + + var/list/contained_turfs = LAZYACCESS(area_to_clear.contained_turfs_by_z, z_level) + for(var/turf_index in 1 to length(turfs_to_uncontain)) + contained_turfs -= turfs_to_uncontain[turf_index] + if(MC_TICK_CHECK) + turfs_to_uncontain.Cut(1, turf_index + 1) + return + + LAZYREMOVE(area_to_clear.turfs_to_uncontain_by_z, z_level) + if(!length(contained_turfs)) + area_to_clear.contained_turfs_by_z -= z_level + + LIST_DEC(marked_for_clearing) + +#undef ALLOWED_LOOSE_TURFS diff --git a/code/controllers/subsystems/assets.dm b/code/controllers/subsystems/assets.dm new file mode 100644 index 0000000000000..088bd6468795f --- /dev/null +++ b/code/controllers/subsystems/assets.dm @@ -0,0 +1,38 @@ +SUBSYSTEM_DEF(assets) + name = "Assets" + init_order = SS_INIT_ASSETS + flags = SS_NO_FIRE + var/list/datum/asset_cache_item/cache = list() + var/list/preload = list() + var/datum/asset_transport/transport = new() + +/datum/controller/subsystem/assets/Initialize(timeofday) + load_assets() + apply_configuration() + +/datum/controller/subsystem/assets/Recover() + cache = SSassets.cache + preload = SSassets.preload + +/datum/controller/subsystem/assets/proc/apply_configuration() + var/newtransporttype = /datum/asset_transport + if(config.asset_transport == "webroot") + newtransporttype = /datum/asset_transport/webroot + + if(newtransporttype == transport.type) + return + + var/datum/asset_transport/newtransport = new newtransporttype + if(newtransport.validate_config()) + transport = newtransport + + transport.Initialize(cache) + +/datum/controller/subsystem/assets/proc/load_assets() + for(var/datum/asset/asset_type as anything in typesof(/datum/asset)) + if(asset_type == initial(asset_type._abstract)) + continue + + get_asset_datum(asset_type) + + transport.Initialize(cache) diff --git a/code/controllers/subsystems/atoms.dm b/code/controllers/subsystems/atoms.dm index b599fc3be6bba..cc550d2ede5e8 100644 --- a/code/controllers/subsystems/atoms.dm +++ b/code/controllers/subsystems/atoms.dm @@ -1,25 +1,24 @@ -#define BAD_INIT_QDEL_BEFORE 1 -#define BAD_INIT_DIDNT_INIT 2 -#define BAD_INIT_SLEPT 4 -#define BAD_INIT_NO_HINT 8 - - SUBSYSTEM_DEF(atoms) name = "Atoms" init_order = SS_INIT_ATOMS flags = SS_NO_FIRE | SS_NEEDS_SHUTDOWN + var/const/BAD_INIT_QDEL_BEFORE = FLAG(0) + var/const/BAD_INIT_DIDNT_INIT = FLAG(1) + var/const/BAD_INIT_SLEPT = FLAG(2) + var/const/BAD_INIT_NO_HINT = FLAG(3) + var/static/atom_init_stage = INITIALIZATION_INSSATOMS var/static/old_init_stage - var/static/list/late_loaders = list() - var/static/list/created_atoms = list() - var/static/list/BadInitializeCalls = list() + var/static/list/bad_inits = list() + var/static/list/init_queue = list() + var/static/list/late_init_queue = list() /datum/controller/subsystem/atoms/UpdateStat(time) if (PreventUpdateStat(time)) return ..() - ..("Bad Inits: [length(BadInitializeCalls)]") + ..("Bad Inits: [length(bad_inits)]") /datum/controller/subsystem/atoms/Shutdown() @@ -34,8 +33,8 @@ SUBSYSTEM_DEF(atoms) /datum/controller/subsystem/atoms/Recover() - created_atoms.Cut() - late_loaders.Cut() + LIST_RESIZE(init_queue, 0) + LIST_RESIZE(late_init_queue, 0) if (atom_init_stage == INITIALIZATION_INNEW_MAPLOAD) InitializeAtoms() @@ -45,59 +44,82 @@ SUBSYSTEM_DEF(atoms) return atom_init_stage = INITIALIZATION_INNEW_MAPLOAD var/list/mapload_arg = list(TRUE) - var/count = length(created_atoms) - var/atom/created - var/list/arguments - for (var/i = length(created_atoms) to 1 step -1) - created = created_atoms[i] - if (!(created.atom_flags & ATOM_FLAG_INITIALIZED)) - arguments = created_atoms[created] ? mapload_arg + created_atoms[created] : mapload_arg - InitAtom(created, arguments) + var/count = 0 + var/time = Uptime() + if(!initialized) + for(var/atom/atom_to_initialize as anything in world) + if(!atom_to_initialize || atom_to_initialize.atom_flags & ATOM_FLAG_INITIALIZED) + continue + InitAtom(atom_to_initialize, mapload_arg) + count++ + CHECK_TICK + + var/init_queue_length = length(init_queue) + if(init_queue_length) + for(var/i = 1 to init_queue_length) + var/atom/atom_to_initialize = init_queue[i] + if (!atom_to_initialize || atom_to_initialize.atom_flags & ATOM_FLAG_INITIALIZED) + continue + + var/list/params = init_queue[atom_to_initialize] + if (params) + InitAtom(atom_to_initialize, mapload_arg + params) + else + InitAtom(atom_to_initialize, mapload_arg) + count++ CHECK_TICK - created_atoms.Cut() - if (!initialized) - for (var/atom/A in world) - if (!(A.atom_flags & ATOM_FLAG_INITIALIZED)) - InitAtom(A, mapload_arg) - ++count - CHECK_TICK - report_progress("Initialized [count] atom\s") + init_queue.Cut(1, init_queue_length + 1) + + time = max((Uptime() - time) * 0.1, 0.1) + report_progress("Initialized [count] atom\s in [time]s ([floor(count/time)]/s)") atom_init_stage = INITIALIZATION_INNEW_REGULAR - if (!length(late_loaders)) - return - for (var/atom/A as anything in late_loaders) - A.LateInitialize(arglist(late_loaders[A])) - report_progress("Late initialized [length(late_loaders)] atom\s") - late_loaders.Cut() + var/late_queue_length = length(late_init_queue) + if (late_queue_length) + count = 0 + time = Uptime() + for(var/i = 1 to late_queue_length) + var/atom/atom_to_late_init = late_init_queue[i] + if (!atom_to_late_init) + continue + + atom_to_late_init.LateInitialize(arglist(late_init_queue[atom_to_late_init])) + count++ + CHECK_TICK + late_init_queue.Cut(1, late_queue_length + 1) + time = max((Uptime() - time) * 0.1, 0.1) + report_progress("LateInitialized [count] atom\s in [time]s ([floor(count/time)]/s)") -/datum/controller/subsystem/atoms/proc/InitAtom(atom/A, list/arguments) - var/atom_type = A?.type - if (QDELING(A)) - BadInitializeCalls[atom_type] |= BAD_INIT_QDEL_BEFORE +/datum/controller/subsystem/atoms/proc/InitAtom(atom/atom, list/arguments) + var/atom_type = atom.type + if (QDELING(atom)) + bad_inits[atom_type] |= BAD_INIT_QDEL_BEFORE return TRUE var/start_tick = world.time - var/result = A.Initialize(arglist(arguments)) - if(start_tick != world.time) - BadInitializeCalls[atom_type] |= BAD_INIT_SLEPT - var/qdeleted = FALSE - if (result != INITIALIZE_HINT_NORMAL) - switch(result) - if (INITIALIZE_HINT_LATELOAD) - if (arguments[1]) //mapload - late_loaders[A] = arguments - else - A.LateInitialize(arglist(arguments)) - if (INITIALIZE_HINT_QDEL) - qdel(A) - qdeleted = TRUE + var/hint = atom.Initialize(arglist(arguments)) + if (start_tick != world.time) + bad_inits[atom_type] |= BAD_INIT_SLEPT + var/deleted = FALSE + switch (hint) + if (INITIALIZE_HINT_NORMAL) //noop + if (INITIALIZE_HINT_LATELOAD) + if (arguments[1]) //mapload + late_init_queue[atom] = arguments else - BadInitializeCalls[atom_type] |= BAD_INIT_NO_HINT - if (!A) //possible harddel - qdeleted = TRUE - else if (!(A.atom_flags & ATOM_FLAG_INITIALIZED)) - BadInitializeCalls[atom_type] |= BAD_INIT_DIDNT_INIT - return qdeleted || QDELING(A) + atom.LateInitialize(arglist(arguments)) + if (INITIALIZE_HINT_QDEL) + qdel(atom) + deleted = TRUE + else + bad_inits[atom_type] |= BAD_INIT_NO_HINT + if (!atom) + deleted = TRUE + else if (!(atom.atom_flags & ATOM_FLAG_INITIALIZED)) + bad_inits[atom_type] |= BAD_INIT_DIDNT_INIT + + SEND_SIGNAL(atom, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE) + + return deleted || QDELING(atom) /datum/controller/subsystem/atoms/proc/map_loader_begin() @@ -111,9 +133,9 @@ SUBSYSTEM_DEF(atoms) /datum/controller/subsystem/atoms/proc/InitLog() . = "" - for (var/path in BadInitializeCalls) + for (var/path in bad_inits) . += "Path : [path] \n" - var/fails = BadInitializeCalls[path] + var/fails = bad_inits[path] if (fails & BAD_INIT_DIDNT_INIT) . += "- Didn't call atom/Initialize()\n" if (fails & BAD_INIT_NO_HINT) @@ -122,9 +144,3 @@ SUBSYSTEM_DEF(atoms) . += "- Qdel'd in New()\n" if (fails & BAD_INIT_SLEPT) . += "- Slept during Initialize()\n" - - -#undef BAD_INIT_QDEL_BEFORE -#undef BAD_INIT_DIDNT_INIT -#undef BAD_INIT_SLEPT -#undef BAD_INIT_NO_HINT diff --git a/code/controllers/subsystems/chat.dm b/code/controllers/subsystems/chat.dm index 8f324cff96a52..d5e9b3d57ab18 100644 --- a/code/controllers/subsystems/chat.dm +++ b/code/controllers/subsystems/chat.dm @@ -1,57 +1,91 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + SUBSYSTEM_DEF(chat) name = "Chat" + flags = SS_TICKER|SS_NO_INIT wait = 1 - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY - priority = SS_PRIORITY_CHAT + runlevels = RUNLEVELS_PREGAME | RUNLEVELS_GAME + priority = FIRE_PRIORITY_CHAT init_order = SS_INIT_CHAT - var/static/list/payload = list() -/datum/controller/subsystem/chat/UpdateStat(time) - return + /// Associates a ckey with a list of messages to send to them. + var/list/list/datum/chat_payload/client_to_payloads = list() + + /// Associates a ckey with an associative list of their last CHAT_RELIABILITY_HISTORY_SIZE messages. + var/list/list/datum/chat_payload/client_to_reliability_history = list() + + /// Associates a ckey with their next sequence number. + var/list/client_to_sequence_number = list() + +/datum/controller/subsystem/chat/proc/generate_payload(client/target, message_data) + var/sequence = client_to_sequence_number[target.ckey] + client_to_sequence_number[target.ckey] += 1 + + var/datum/chat_payload/payload = new + payload.sequence = sequence + payload.content = message_data + + if(!(target.ckey in client_to_reliability_history)) + client_to_reliability_history[target.ckey] = list() + var/list/client_history = client_to_reliability_history[target.ckey] + client_history["[sequence]"] = payload + + if(length(client_history) > CHAT_RELIABILITY_HISTORY_SIZE) + var/oldest = text2num(client_history[1]) + for(var/index in 2 to length(client_history)) + var/test = text2num(client_history[index]) + if(test < oldest) + oldest = test + client_history -= "[oldest]" + return payload + +/datum/controller/subsystem/chat/proc/send_payload_to_client(client/target, datum/chat_payload/payload) + target.tgui_panel.window.send_message("chat/message", payload.into_message()) + SEND_TEXT(target, payload.get_content_as_html()) +/datum/controller/subsystem/chat/fire() + for(var/ckey in client_to_payloads) + var/client/target = GLOB.ckey_directory[ckey] + if(isnull(target)) // verify client still exists + LAZYREMOVE(client_to_payloads, ckey) + continue -/datum/controller/subsystem/chat/fire(resumed) - for (var/client/C as anything in payload) - send_output(C, payload[C], "browseroutput:output") - payload -= C - if (MC_TICK_CHECK) + for(var/datum/chat_payload/payload as anything in client_to_payloads[ckey]) + send_payload_to_client(target, payload) + LAZYREMOVE(client_to_payloads, ckey) + + if(MC_TICK_CHECK) return +/datum/controller/subsystem/chat/proc/queue(queue_target, list/message_data) + var/list/targets = islist(queue_target) ? queue_target : list(queue_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + LAZYADDASSOC(client_to_payloads, client.ckey, generate_payload(client, message_data)) -/datum/controller/subsystem/chat/proc/queue(target, message, handle_whitespace = TRUE, trailing_newline = TRUE) - if (!target || !message) - return - if (!istext(message)) - CRASH("to_chat called with invalid input type") - if (target == world) - target = GLOB.clients - var/original_message = message //Some macros resist parsing elsewhere; strip them here - message = replacetext(message, "\improper", "") - message = replacetext(message, "\proper", "") - if (handle_whitespace) - message = replacetext(message, "\n", "
") - message = replacetext(message, "\t", "[FOURSPACES][FOURSPACES]") - if (trailing_newline) - message += "
" - var/twiceEncoded = url_encode(url_encode(message)) // Double encode so that JS can consume utf-8 - if (islist(target)) - for(var/I in target) - queuePartTwo(I, message, original_message, twiceEncoded) - else - queuePartTwo(target, message, original_message, twiceEncoded) - - -/datum/controller/subsystem/chat/proc/queuePartTwo(client/C, message, original, encoded) - C = resolve_client(C) - if (!C) - return - legacy_chat(C, original) - if (C?.get_preference_value(/datum/client_preference/goonchat) != GLOB.PREF_YES) - return - if (!C.chatOutput || C.chatOutput.broken) - return - if (!C.chatOutput.loaded) - C.chatOutput.messageQueue += message +/datum/controller/subsystem/chat/proc/send_immediate(send_target, list/message_data) + var/list/targets = islist(send_target) ? send_target : list(send_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + send_payload_to_client(client, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/handle_resend(client/client, sequence) + var/list/client_history = client_to_reliability_history[client.ckey] + sequence = "[sequence]" + if(isnull(client_history) || !(sequence in client_history)) return - payload[C] += encoded + + var/datum/chat_payload/payload = client_history[sequence] + if(payload.resends > CHAT_RELIABILITY_MAX_RESENDS) + return // we tried but byond said no + + payload.resends += 1 + send_payload_to_client(client, client_history[sequence]) diff --git a/code/controllers/subsystems/chemistry.dm b/code/controllers/subsystems/chemistry.dm index c85b7d9bf2381..d78cc7fb8e9ba 100644 --- a/code/controllers/subsystems/chemistry.dm +++ b/code/controllers/subsystems/chemistry.dm @@ -1,9 +1,9 @@ SUBSYSTEM_DEF(chemistry) name = "Chemistry" - priority = SS_PRIORITY_CHEMISTRY + priority = FIRE_PRIORITY_CHEMISTRY init_order = SS_INIT_CHEMISTRY - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY wait = 0.5 SECONDS + var/static/list/reagent_types_by_name = list() var/static/list/reactions_by_id = list() var/static/list/reactions_by_result = list() var/static/list/datum/reagent/random/random_chem_prototypes = list() @@ -31,6 +31,7 @@ SUBSYSTEM_DEF(chemistry) reactions_by_id[id] = list() reactions_by_id[id] += reaction + build_reagents_types_by_name_map() /datum/controller/subsystem/chemistry/Recover() queue.Cut() @@ -77,3 +78,16 @@ SUBSYSTEM_DEF(chemistry) continue if(get_prototype(type, temperature)) //returns truthy if it's valid for the given temperature return type + +/datum/controller/subsystem/chemistry/proc/get_reagent_type_by_name(reagent_name) + if(!length(reagent_types_by_name)) + build_reagents_types_by_name_map() + + return reagent_types_by_name[reagent_name] + +/datum/controller/subsystem/chemistry/proc/build_reagents_types_by_name_map() + if(length(reagent_types_by_name)) + return + + for(var/datum/reagent/reagent_path as anything in subtypesof(/datum/reagent)) + reagent_types_by_name[initial(reagent_path.name)] = reagent_path diff --git a/code/controllers/subsystems/circuit_component.dm b/code/controllers/subsystems/circuit_component.dm index cfeb66836efa0..3888b10f46026 100644 --- a/code/controllers/subsystems/circuit_component.dm +++ b/code/controllers/subsystems/circuit_component.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(circuit_components) name = "Circuit Components" - priority = SS_PRIORITY_CIRCUIT_COMP + priority = FIRE_PRIORITY_CIRCUIT_COMP flags = SS_NO_INIT wait = 1 diff --git a/code/controllers/subsystems/dcs.dm b/code/controllers/subsystems/dcs.dm new file mode 100644 index 0000000000000..8328c57a31481 --- /dev/null +++ b/code/controllers/subsystems/dcs.dm @@ -0,0 +1,109 @@ +PROCESSING_SUBSYSTEM_DEF(dcs) + name = "Datum Component System" + flags = SS_NO_INIT + wait = 1 SECONDS + + var/list/elements_by_type = list() + + /** + * A nested assoc list of bespoke element types (keys) and superlists containing all lists used as arguments (values). + * Inside the superlists, lists that've been sorted alphabetically are keys, while the original unsorted lists are values. + * + * e.g. list( + * /datum/element/first = list(list(A, B, C) = list(B, A, C), list(A, B) = list(A, B)), + * /datum/element/second = list(list(B, C) = list(C, B), list(D) = list(D)), + * ) + * + * Used by the dcs_check_list_arguments unit test. + */ + var/list/arguments_that_are_lists_by_element = list() + /** + * An assoc list of list instances and their sorted counterparts. + * + * e.g. list( + * list(B, A, C) = list(A, B, C), + * list(C, B) = list(B, C), + * ) + * + * Used to make sure each list instance is sorted no more than once, or the unit test won't work. + */ + var/list/sorted_arguments_that_are_lists = list() + +/datum/controller/subsystem/processing/dcs/Recover() + _listen_lookup = SSdcs._listen_lookup + +/datum/controller/subsystem/processing/dcs/proc/GetElement(list/arguments, init_element = TRUE) + var/datum/element/eletype = arguments[1] + var/element_id = eletype + + if(!ispath(eletype, /datum/element)) + CRASH("Attempted to instantiate [eletype] as a /datum/element") + + if(initial(eletype.element_flags) & ELEMENT_BESPOKE) + element_id = length(arguments) == 1 ? "[arguments[1]]" : GetIdFromArguments(arguments) + + . = elements_by_type[element_id] + if(. || !init_element) + return + . = elements_by_type[element_id] = new eletype + +/**** + * Generates an id for bespoke elements when given the argument list + * Generating the id here is a bit complex because we need to support named arguments + * Named arguments can appear in any order and we need them to appear after ordered arguments + * We assume that no one will pass in a named argument with a value of null + **/ +/datum/controller/subsystem/processing/dcs/proc/GetIdFromArguments(list/arguments) + var/datum/element/eletype = arguments[1] + var/list/fullid = list(eletype) + var/list/named_arguments + for(var/i in initial(eletype.argument_hash_start_idx) to length(arguments)) + var/key = arguments[i] + + if(istext(key)) + var/value = arguments[key] + if (isnull(value)) + fullid += key + else + if (!istext(value) && !isnum(value)) + //if(PERFORM_ALL_TESTS(dcs_check_list_arguments) && islist(value)) + // add_to_arguments_that_are_lists(value, eletype) + value = REF(value) + + if (!named_arguments) + named_arguments = list() + + named_arguments[key] = value + continue + + if (isnum(key)) + fullid += key + else + //if(PERFORM_ALL_TESTS(dcs_check_list_arguments) && islist(key)) + // add_to_arguments_that_are_lists(key, eletype) + fullid += REF(key) + + if(named_arguments) + named_arguments = sortTim(named_arguments, GLOBAL_PROC_REF(cmp_text_asc)) + fullid += named_arguments + + return list2params(fullid) + +/** + * Offloading the first half of the dcs_check_list_arguments here, which is populating the superlist + * with sublists that will be later compared with each other by the dcs_check_list_arguments unit test. + */ +/datum/controller/subsystem/processing/dcs/proc/add_to_arguments_that_are_lists(list/argument, datum/element/element_type) + if(initial(element_type.element_flags) & ELEMENT_NO_LIST_UNIT_TEST) + return + var/list/element_type_superlist = arguments_that_are_lists_by_element[element_type] + if(!element_type_superlist) + arguments_that_are_lists_by_element[element_type] = element_type_superlist = list() + + var/list/sorted_argument = argument + if(!(initial(element_type.element_flags) & ELEMENT_DONT_SORT_LIST_ARGS)) + sorted_argument = sorted_arguments_that_are_lists[argument] + if(!sorted_argument) + sorted_arguments_that_are_lists[argument] = sorted_argument = sortTim(argument.Copy(), GLOBAL_PROC_REF(cmp_embed_text_asc)) + + element_type_superlist[sorted_argument] = argument diff --git a/code/controllers/subsystems/evac.dm b/code/controllers/subsystems/evac.dm index b835b539d8b65..6f434a66c9590 100644 --- a/code/controllers/subsystems/evac.dm +++ b/code/controllers/subsystems/evac.dm @@ -1,18 +1,19 @@ SUBSYSTEM_DEF(evac) name = "Evacuation" - priority = SS_PRIORITY_EVAC + priority = FIRE_PRIORITY_EVAC flags = SS_NO_TICK_CHECK | SS_BACKGROUND wait = 2 SECONDS /datum/controller/subsystem/evac/Initialize(start_uptime) - if (!evacuation_controller) - evacuation_controller = new GLOB.using_map.evac_controller_type - evacuation_controller.set_up() + evacuation_controller = new GLOB.using_map.evac_controller_type + evacuation_controller.set_up() /datum/controller/subsystem/evac/UpdateStat(time) - return ..() + if (PreventUpdateStat(time)) + return ..() + return ..(evacuation_controller?.UpdateStat()||"Not Initialized") /datum/controller/subsystem/evac/fire(resumed, no_mc_tick) diff --git a/code/controllers/subsystems/event.dm b/code/controllers/subsystems/event.dm index e33bc3bc45bc4..dd7a17b1932f8 100644 --- a/code/controllers/subsystems/event.dm +++ b/code/controllers/subsystems/event.dm @@ -1,7 +1,7 @@ SUBSYSTEM_DEF(event) name = "Event Manager" wait = 2 SECONDS - priority = SS_PRIORITY_EVENT + priority = FIRE_PRIORITY_EVENT var/list/processing_events = list() var/pos = EVENT_LEVEL_MUNDANE @@ -16,7 +16,11 @@ SUBSYSTEM_DEF(event) var/row_options3 = " width='150px'" var/datum/event_container/selected_event_container = null + /// List of all currently active events var/list/datum/event/active_events = list() + /// Assoc list of active events by type as: event_type => list(active_events). Used for faster lookup. + var/list/datum/event/active_events_by_type + var/list/datum/event/finished_events = list() var/list/datum/event/all_events @@ -78,18 +82,40 @@ SUBSYSTEM_DEF(event) ..("Active Events: [length(active_events)]") +/// Checks if event of specific type is currently active +/datum/controller/subsystem/event/proc/is_event_of_type_active(datum/event/event_type) + if(istype(event_type)) + event_type = event_type.type + + if(!ispath(event_type)) + CRASH("Invalid event type passed: [event_type]") + + return !!LAZYACCESS(active_events_by_type, event_type) + + +/datum/controller/subsystem/event/proc/register_event(datum/event/event_to_register) + if(!istype(event_to_register)) + CRASH("Datum of not `/datum/event` being registered: `[event_to_register]:[event_to_register?.type]`") + + active_events += event_to_register + LAZYADDASSOCLIST(active_events_by_type, event_to_register.type, event_to_register) + //Actual event handling -/datum/controller/subsystem/event/proc/event_complete(datum/event/E) - active_events -= E +/datum/controller/subsystem/event/proc/event_complete(datum/event/completed_event) + if(!istype(completed_event)) + CRASH("Datum of not `/datum/event` being unregistered: `[completed_event]:[completed_event?.type]`") + + active_events -= completed_event + LAZYREMOVEASSOC(active_events_by_type, completed_event.type, completed_event) - if(!E.event_meta || !E.severity) // datum/event is used here and there for random reasons, maintaining "backwards compatibility" - log_debug("Event of '[E.type]' with missing meta-data has completed.") + if(!completed_event.event_meta || !completed_event.severity) // datum/event is used here and there for random reasons, maintaining "backwards compatibility" + log_debug("Event of '[completed_event.type]' with missing meta-data has completed.") return - finished_events += E + finished_events += completed_event // Add the event back to the list of available events - var/datum/event_container/EC = event_containers[E.severity] - var/datum/event_meta/EM = E.event_meta + var/datum/event_container/EC = event_containers[completed_event.severity] + var/datum/event_meta/EM = completed_event.event_meta if(EM.add_to_queue) EC.available_events += EM diff --git a/code/controllers/subsystems/fluids.dm b/code/controllers/subsystems/fluids.dm index 83d860038d2ee..cc715bb47b1a2 100644 --- a/code/controllers/subsystems/fluids.dm +++ b/code/controllers/subsystems/fluids.dm @@ -58,7 +58,7 @@ SUBSYSTEM_DEF(fluids) // We need to iterate through this list a few times, so we're using indexes instead of a while-truncate loop. while (af_index <= length(processing_fluids)) - var/obj/effect/fluid/F = processing_fluids[af_index++] + var/obj/fluid/F = processing_fluids[af_index++] if (QDELETED(F)) processing_fluids -= F else @@ -77,10 +77,10 @@ SUBSYSTEM_DEF(fluids) var/turf/current = get_turf(F) if(istype(current, /turf/simulated/open)) var/turf/T = GetBelow(F) - var/obj/effect/fluid/other = locate() in T + var/obj/fluid/other = locate() in T if((!istype(other) || other.fluid_amount < FLUID_MAX_DEPTH) && T.CanFluidPass(UP)) if(!other) - other = new /obj/effect/fluid(T) + other = new /obj/fluid(T) F.equalizing_fluids += other downward_fluid_overlay_position = length(F.equalizing_fluids) UPDATE_FLUID_BLOCKED_DIRS(F.start_loc) @@ -97,11 +97,11 @@ SUBSYSTEM_DEF(fluids) var/turf/current = get_turf(F) if((F.fluid_amount + current.height) <= T.height) //Water cannot flow up height differences continue - var/obj/effect/fluid/other = locate() in T.contents + var/obj/fluid/other = locate() in T.contents if(other && (QDELETED(other) || other.fluid_amount <= FLUID_DELETING)) continue if(!other) - other = new /obj/effect/fluid(T) + other = new /obj/fluid(T) other.temperature = F.temperature F.equalizing_fluids += other @@ -111,7 +111,7 @@ SUBSYSTEM_DEF(fluids) af_index = 1 while (af_index <= length(processing_fluids)) - var/obj/effect/fluid/F = processing_fluids[af_index++] + var/obj/fluid/F = processing_fluids[af_index++] if (QDELETED(F)) processing_fluids -= F else @@ -125,7 +125,7 @@ SUBSYSTEM_DEF(fluids) // Flow downward first, since gravity. TODO: add check for gravity. if(length(F.equalizing_fluids) >= downward_fluid_overlay_position) - var/obj/effect/fluid/downward_fluid = F.equalizing_fluids[downward_fluid_overlay_position] + var/obj/fluid/downward_fluid = F.equalizing_fluids[downward_fluid_overlay_position] if(downward_fluid.z == F.z-1) // It's below us. F.equalizing_fluids -= downward_fluid var/transfer_amount = min(F.fluid_amount, (FLUID_MAX_DEPTH-downward_fluid.fluid_amount)) @@ -137,7 +137,7 @@ SUBSYSTEM_DEF(fluids) var/setting_dir = 0 - for(var/obj/effect/fluid/other in F.equalizing_fluids) + for(var/obj/fluid/other in F.equalizing_fluids) if(!istype(other) || QDELETED(other) || other.fluid_amount <= FLUID_DELETING) F.equalizing_fluids -= other continue @@ -152,10 +152,10 @@ SUBSYSTEM_DEF(fluids) F.set_dir(setting_dir) if(islist(F.equalizing_fluids) && length(F.equalizing_fluids) > 1) - F.equalize_avg_depth = Floor(F.equalize_avg_depth/length(F.equalizing_fluids)) - F.equalize_avg_temp = Floor(F.equalize_avg_temp/length(F.equalizing_fluids)) + F.equalize_avg_depth = floor(F.equalize_avg_depth/length(F.equalizing_fluids)) + F.equalize_avg_temp = floor(F.equalize_avg_temp/length(F.equalizing_fluids)) for(var/thing in F.equalizing_fluids) - var/obj/effect/fluid/other = thing + var/obj/fluid/other = thing if(!QDELETED(other)) SET_FLUID_DEPTH(other, F.equalize_avg_depth) other.temperature = F.equalize_avg_temp @@ -169,7 +169,7 @@ SUBSYSTEM_DEF(fluids) af_index = 1 while (af_index <= length(processing_fluids)) - var/obj/effect/fluid/F = processing_fluids[af_index++] + var/obj/fluid/F = processing_fluids[af_index++] if (QDELETED(F)) processing_fluids -= F else @@ -202,7 +202,7 @@ SUBSYSTEM_DEF(fluids) next_water_act = world.time + water_act_delay af_index = 1 while (af_index <= length(processing_fluids)) - var/obj/effect/fluid/F = processing_fluids[af_index++] + var/obj/fluid/F = processing_fluids[af_index++] var/turf/T = get_turf(F) if(istype(T) && !QDELETED(F)) for(var/atom/movable/A in T.contents) diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm index 4f3f293b3c599..a0a1bbf954cb0 100644 --- a/code/controllers/subsystems/garbage.dm +++ b/code/controllers/subsystems/garbage.dm @@ -1,496 +1,264 @@ -//Check if an /atom/movable that has been Destroyed has been correctly placed into nullspace and if not, throws a runtime and moves it to nullspace -#define GC_CHECK_AM_NULLSPACE(D, hint) \ - if(istype(D,/atom/movable)) {\ - var/atom/movable/AM = D; \ - if(AM.loc != null) {\ - crash_with("QDEL("+hint+"): "+AM.name+" was supposed to be in nullspace but isn't \ - (LOCATION= "+AM.loc.name+" ("+AM.loc.x+","+AM.loc.y+","+AM.loc.z+") )! Destroy didn't do its job!"); \ - AM.forceMove(null); \ - } \ - } +/// Destroy() return value. Queue the instance for eventual hard deletion. +var/global/const/QDEL_HINT_QUEUE = 0 + +/// Destroy() return value. Do not queue the instance for hard deletion. Does not expect to be refcount GCd. +var/global/const/QDEL_HINT_LETMELIVE = 1 + +/// Destroy() return value. Same as QDEL_HINT_LETMELIVE but the instance expects to refcount GC without help. +var/global/const/QDEL_HINT_IWILLGC = 2 + +/// Destroy() return value. Queue this instance for hard deletion regardless of its refcount GC state. +var/global/const/QDEL_HINT_HARDDEL = 3 + +/// Destroy() return value. Immediately hard delete the instance. +var/global/const/QDEL_HINT_HARDDEL_NOW = 4 + + +/// datum.gc_destroyed signal value +var/global/const/GC_CURRENTLY_BEING_QDELETED = -1 + SUBSYSTEM_DEF(garbage) name = "Garbage" - priority = SS_PRIORITY_GARBAGE - wait = 2 SECONDS - flags = SS_POST_FIRE_TIMING | SS_BACKGROUND | SS_NO_INIT | SS_NEEDS_SHUTDOWN - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY + priority = FIRE_PRIORITY_GARBAGE + wait = 10 SECONDS + flags = SS_POST_FIRE_TIMING | SS_BACKGROUND | SS_NEEDS_SHUTDOWN + runlevels = RUNLEVELS_PREGAME | RUNLEVELS_GAME init_order = SS_INIT_GARBAGE - var/static/list/collection_timeout = list(0, 30 SECONDS, 10 SECONDS) // deciseconds to wait before moving something up in the queue to the next level - - //Stat tracking - var/static/delslasttick = 0 // number of del()'s we've done this tick - var/static/gcedlasttick = 0 // number of things that gc'ed last tick - var/static/totaldels = 0 - var/static/totalgcs = 0 + var/static/last_tick_enqueues = 0 + var/static/last_tick_deletions = 0 + var/static/last_tick_collections = 0 + var/static/total_deletions = 0 + var/static/total_collections = 0 + var/static/failed_collections = 0 - var/static/highest_del_time = 0 - var/static/highest_del_tickusage = 0 + var/static/list/datum/qdel_details/details_by_path = list( + /datum/qdel_details = new /datum/qdel_details + ) - var/static/list/pass_counts - var/static/list/fail_counts + var/static/pause_deletion_queue = FALSE - var/static/list/items = list() // Holds our qdel_item statistics datums - var/static/harddel_halt = FALSE // If true, will avoid harddeleting from the final queue; will still respect HARDDEL_NOW. + var/static/collection_time_limit = 60 SECONDS - //Queue - var/static/list/queues + var/static/list/datum/collection_queue = list() - #ifdef TESTING - var/static/list/reference_find_on_fail = list() - #endif + var/static/list/datum/deletion_queue = list() -/datum/controller/subsystem/garbage/PreInit() - queues = new(GC_QUEUE_COUNT) - pass_counts = new(GC_QUEUE_COUNT) - fail_counts = new(GC_QUEUE_COUNT) - for(var/i in 1 to GC_QUEUE_COUNT) - queues[i] = list() - pass_counts[i] = 0 - fail_counts[i] = 0 +/datum/controller/subsystem/garbage/Shutdown() + var/list/qdel_log = list() + sortTim(details_by_path, cmp = GLOBAL_PROC_REF(cmp_qdel_details_time), associative = TRUE) + for (var/path in details_by_path) + var/datum/qdel_details/details = details_by_path[path] + qdel_log += "Path: [path]" + if (details.failures) + qdel_log += "\tFailures: [details.failures]" + qdel_log += "\tqdel() Count: [details.qdels]" + if (details.extra_qdels) + qdel_log += "\tunecessary qdel() Count: [details.extra_qdels]" + qdel_log += "\tDestroy() Cost: [details.destroy_time]ms" + if (details.hard_deletes) + qdel_log += "\tTotal Hard Deletes [details.hard_deletes]" + qdel_log += "\tTime Spent Hard Deleting: [details.hard_delete_time]ms" + if (details.slept_destroy) + qdel_log += "\tSleeps: [details.slept_destroy]" + if (details.no_hint) + qdel_log += "\tNo hint: [details.no_hint] times" + rustg_log_write_formatted("[GLOB.log_directory]/qdel.log", jointext(qdel_log, "\n")) + +/datum/controller/subsystem/garbage/Initialize(start_uptime) + pause_deletion_queue = config.deletion_starts_paused /datum/controller/subsystem/garbage/UpdateStat(time) if (PreventUpdateStat(time)) return ..() - var/list/build = list() - var/list/counts = list() - for (var/list/L in queues) - counts += length(L) - build += "Q:[counts.Join(",")]|D:[delslasttick]|G:[gcedlasttick]|" - build += "GR:" - if (!(delslasttick+gcedlasttick)) - build += "n/a|" - else - build += "[round((gcedlasttick/(delslasttick+gcedlasttick))*100, 0.01)]%|" - build += "TD:[totaldels]|TG:[totalgcs]|" - if (!(totaldels + totalgcs)) - build += "n/a|" - else - build += "TGR:[round((totalgcs/(totaldels+totalgcs))*100, 0.01)]%" - build += " P:[pass_counts.Join(",")]" - build += "|F:[fail_counts.Join(",")]" - ..(build.Join(null)) - + ..({"\ + collection queue: [length(collection_queue)], deletion queue: [length(deletion_queue)][pause_deletion_queue ? "(paused)" : ""]\n\ + last run: [last_tick_deletions + last_tick_collections], collected: [total_collections], deleted: [total_deletions], failed: [failed_collections]\n\ + "}) -/datum/controller/subsystem/garbage/Shutdown() - //Adds the del() log to the qdel log file - var/list/dellog = list() - - //sort by how long it's wasted hard deleting - sortTim(items, cmp=/proc/cmp_qdel_item_time, associative = TRUE) - for(var/path in items) - var/datum/qdel_item/I = items[path] - dellog += "Path: [path]" - if (I.failures) - dellog += "\tFailures: [I.failures]" - dellog += "\tqdel() Count: [I.qdels]" - dellog += "\tDestroy() Cost: [I.destroy_time]ms" - if (I.hard_deletes) - dellog += "\tTotal Hard Deletes [I.hard_deletes]" - dellog += "\tTime Spent Hard Deleting: [I.hard_delete_time]ms" - if (I.slept_destroy) - dellog += "\tSleeps: [I.slept_destroy]" - if (I.no_respect_force) - dellog += "\tIgnored force: [I.no_respect_force] times" - if (I.no_hint) - dellog += "\tNo hint: [I.no_hint] times" - log_qdel(dellog.Join("\n")) /datum/controller/subsystem/garbage/fire() - //the fact that this resets its processing each fire (rather then resume where it left off) is intentional. - var/queue = GC_QUEUE_PREQUEUE - - while (state == SS_RUNNING) - switch (queue) - if (GC_QUEUE_PREQUEUE) - HandlePreQueue() - queue = GC_QUEUE_PREQUEUE+1 - if (GC_QUEUE_CHECK) - HandleQueue(GC_QUEUE_CHECK) - queue = GC_QUEUE_CHECK+1 - if (GC_QUEUE_HARDDELETE) - HandleQueue(GC_QUEUE_HARDDELETE) - break + HandleCollectionQueue() + if (!pause_deletion_queue && state == SS_RUNNING) + HandleDeletionQueue() - if (state == SS_PAUSED) //make us wait again before the next run. - state = SS_RUNNING - -//If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond. -//Don't attempt to optimize, not worth the effort. -/datum/controller/subsystem/garbage/proc/HandlePreQueue() - var/list/tobequeued = queues[GC_QUEUE_PREQUEUE] - var/static/count = 0 - if (count) - var/c = count - count = 0 //so if we runtime on the Cut, we don't try again. - tobequeued.Cut(1,c+1) - - for (var/ref in tobequeued) - count++ - Queue(ref, GC_QUEUE_PREQUEUE+1) - if (MC_TICK_CHECK) + +/datum/controller/subsystem/garbage/proc/HandleCollectionQueue() + last_tick_deletions = 0 + last_tick_collections = 0 + var/size = length(collection_queue) + if (!size) + return + var/cutoff_time = world.time - collection_time_limit + var/cut_until = 1 + for (var/i = 1 to size) + ++cut_until + var/reftext = collection_queue[i] + if (!reftext) + continue + var/queue_time = collection_queue[reftext] + if (queue_time > cutoff_time) + --cut_until break - if (count) - tobequeued.Cut(1,count+1) - count = 0 - -/datum/controller/subsystem/garbage/proc/HandleQueue(level = GC_QUEUE_CHECK) - if (level == GC_QUEUE_CHECK) - delslasttick = 0 - gcedlasttick = 0 - var/cut_off_time = world.time - collection_timeout[level] //ignore entries newer then this - var/list/queue = queues[level] - var/static/lastlevel - var/static/count = 0 - if (count) //runtime last run before we could do this. - var/c = count - count = 0 //so if we runtime on the Cut, we don't try again. - var/list/lastqueue = queues[lastlevel] - lastqueue.Cut(1, c+1) - - lastlevel = level - - for (var/refID in queue) - if (!refID) - count++ + var/datum/datum = locate(reftext) + if (!datum || datum.gc_destroyed != queue_time) + ++last_tick_collections + ++total_collections if (MC_TICK_CHECK) break continue - - var/GCd_at_time = queue[refID] - if(GCd_at_time > cut_off_time) - break // Everything else is newer, skip them - count++ - - var/datum/D - D = locate(refID) - - if (!D || D.gc_destroyed != GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake - ++gcedlasttick - ++totalgcs - pass_counts[level]++ - #ifdef TESTING - reference_find_on_fail -= refID //It's deleted we don't care anymore. - #endif - if (MC_TICK_CHECK) - break + var/path = datum.type + var/datum/qdel_details/details = details_by_path[path] + ++details.failures + ++failed_collections + deletion_queue[datum] = world.time + if (cut_until) + collection_queue.Cut(1, cut_until) + + +/datum/controller/subsystem/garbage/proc/HandleDeletionQueue() + var/size = length(deletion_queue) + if (!size) + return + var/cut_until = 1 + for (var/i = 1 to size) + ++cut_until + var/datum/datum = deletion_queue[i] + if (!datum) continue - - // Something's still referring to the qdel'd object. - switch (level) - if (GC_QUEUE_CHECK) - #ifdef TESTING - if(reference_find_on_fail[refID]) - D.find_references() - #ifdef GC_FAILURE_HARD_LOOKUP - else - D.find_references() - #endif - reference_find_on_fail -= refID - #endif - var/type = D.type - var/datum/qdel_item/I = items[type] - if(!I.failures) - to_world_log("GC: -- \ref[D] | [type] was unable to be GC'd --") - I.failures++ - fail_counts[level]++ - if (GC_QUEUE_HARDDELETE) - if(harddel_halt) - continue - fail_counts[level]++ - HardDelete(D) - if (MC_TICK_CHECK) - break - continue - - Queue(D, level+1) - + HardDelete(datum) if (MC_TICK_CHECK) break - if (count) - queue.Cut(1,count+1) - count = 0 + if (cut_until) + deletion_queue.Cut(1, cut_until) -/datum/controller/subsystem/garbage/proc/PreQueue(datum/D) - if (D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) - queues[GC_QUEUE_PREQUEUE] += D - D.gc_destroyed = GC_QUEUED_FOR_QUEUING -/datum/controller/subsystem/garbage/proc/Queue(datum/D, level = GC_QUEUE_CHECK) - if (isnull(D)) - return - if (D.gc_destroyed == GC_QUEUED_FOR_HARD_DEL) - level = GC_QUEUE_HARDDELETE - if (level > GC_QUEUE_COUNT) - HardDelete(D) +/datum/controller/subsystem/garbage/proc/HardDelete(datum/datum) + if (!datum) return - var/gctime = world.time - var/refid = "\ref[D]" - - D.gc_destroyed = gctime - var/list/queue = queues[level] - if (queue[refid]) - queue -= refid // Removing any previous references that were GC'd so that the current object will be at the end of the list. - - queue[refid] = gctime - -//this is mainly to separate things profile wise. -/datum/controller/subsystem/garbage/proc/HardDelete(datum/D) var/time = world.timeofday var/tick = world.tick_usage var/ticktime = world.time - ++delslasttick - ++totaldels - var/type = D.type - var/refID = "\ref[D]" - - del(D) - + ++last_tick_deletions + ++total_deletions + var/type = datum.type + var/refID = "\ref[datum]" + del(datum) tick = world.tick_usage - tick + ((world.time - ticktime) / world.tick_lag * 100) - - var/datum/qdel_item/I = items[type] - - I.hard_deletes++ - I.hard_delete_time += tick * world.tick_lag - - - if (tick > highest_del_tickusage) - highest_del_tickusage = tick + var/datum/qdel_details/details = details_by_path[type] + ++details.hard_deletes + details.hard_delete_time += tick * world.tick_lag time = world.timeofday - time if (!time && tick * world.tick_lag > 1) time = tick * world.tick_lag * 0.01 - if (time > highest_del_time) - highest_del_time = time if (time > 10) - log_game("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete)") - message_admins("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete).") + log_game("Error: [type]([refID]) took longer than 1 second to delete (took [round(time / 10, 0.1)] seconds to delete)") + message_admins("Error: [type]([refID]) took longer than 1 second to delete (took [round(time / 10, 0.1)] seconds to delete).") postpone(time) -/datum/controller/subsystem/garbage/proc/HardQueue(datum/D) - if (D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) - queues[GC_QUEUE_PREQUEUE] += D - D.gc_destroyed = GC_QUEUED_FOR_HARD_DEL - - -/datum/controller/subsystem/garbage/proc/toggle_harddel_halt(new_state = FALSE) - if(new_state == harddel_halt) - return - harddel_halt = new_state - -/datum/qdel_item - var/name = "" - var/qdels = 0 //Total number of times it's passed thru qdel. - var/destroy_time = 0 //Total amount of milliseconds spent processing this type's Destroy() - var/failures = 0 //Times it was queued for soft deletion but failed to soft delete. - var/hard_deletes = 0 //Different from failures because it also includes QDEL_HINT_HARDDEL deletions - var/hard_delete_time = 0//Total amount of milliseconds spent hard deleting this type. - var/no_respect_force = 0//Number of times it's not respected force=TRUE - var/no_hint = 0 //Number of times it's not even bother to give a qdel hint - var/slept_destroy = 0 //Number of times it's slept in its destroy - -/datum/qdel_item/New(mytype) - name = "[mytype]" - -#ifdef TESTING -/proc/qdel_and_find_ref_if_fail(datum/D, force = FALSE) - SSgarbage.reference_find_on_fail["\ref[D]"] = TRUE - qdel(D, force) -#endif - -// Should be treated as a replacement for the 'del' keyword. -// Datums passed to this will be given a chance to clean up references to allow the GC to collect them. -/proc/qdel(datum/D, force=FALSE, ...) - if(!D) - return - if(!istype(D)) - crash_with("qdel() can only handle /datum (sub)types, was passed: [log_info_line(D)]") - del(D) - return - var/datum/qdel_item/I = SSgarbage.items[D.type] - if (!I) - I = SSgarbage.items[D.type] = new /datum/qdel_item(D.type) - I.qdels++ - - - if(isnull(D.gc_destroyed)) - D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED - var/start_time = world.time - var/start_tick = world.tick_usage - var/hint = D.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up. - if(world.time != start_time) - I.slept_destroy++ - else - I.destroy_time += (world.tick_usage - start_tick) * world.tick_lag - if(!D) - return - switch(hint) - if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion. - GC_CHECK_AM_NULLSPACE(D, "QDEL_HINT_QUEUE") - SSgarbage.PreQueue(D) - if (QDEL_HINT_IWILLGC) - D.gc_destroyed = world.time - return - if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory. - if(!force) - D.gc_destroyed = null //clear the gc variable (important!) - return - // Returning LETMELIVE after being told to force destroy - // indicates the objects Destroy() does not respect force - #ifdef TESTING - if(!I.no_respect_force) - crash_with("WARNING: [D.type] has been force deleted, but is \ - returning an immortal QDEL_HINT, indicating it does \ - not respect the force flag for qdel(). It has been \ - placed in the queue, further instances of this type \ - will also be queued.") - #endif - I.no_respect_force++ - - SSgarbage.PreQueue(D) - if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete using a hard reference to save time from the locate() - GC_CHECK_AM_NULLSPACE(D, "QDEL_HINT_HARDDEL") - SSgarbage.HardQueue(D) - if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. - SSgarbage.HardDelete(D) - if (QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion. - SSgarbage.PreQueue(D) - #ifdef TESTING - D.find_references() - #endif - if (QDEL_HINT_IFFAIL_FINDREFERENCE) - SSgarbage.PreQueue(D) - #ifdef TESTING - SSgarbage.reference_find_on_fail["\ref[D]"] = TRUE - #endif - else - #ifdef TESTING - if(!I.no_hint) - crash_with("WARNING: [D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.") - #endif - I.no_hint++ - SSgarbage.PreQueue(D) - else if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) - CRASH("[D.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic") - -#ifdef TESTING - -/datum/verb/find_refs() - set category = "Debug" - set name = "Find References" - set src in world - - find_references(FALSE) - -/datum/proc/find_references(skip_alert) - running_find_references = type - if(usr && usr.client) - if(usr.client.running_find_references) - testing("CANCELLED search for references to a [usr.client.running_find_references].") - usr.client.running_find_references = null - running_find_references = null - //restart the garbage collector - SSgarbage.can_fire = 1 - SSgarbage.next_fire = world.time + world.tick_lag - return - - if(!skip_alert) - if(alert("Running this will lock everything up for about 5 minutes. Would you like to begin the search?", "Find References", "Yes", "No") == "No") - running_find_references = null - return - - //this keeps the garbage collector from failing to collect objects being searched for in here - SSgarbage.can_fire = 0 - if(usr && usr.client) - usr.client.running_find_references = type +/datum/qdel_details + /// Number of times the associated path has been queued for deletion + var/qdels = 0 - testing("Beginning search for references to a [type].") - last_find_references = world.time + /// Number of times an instance was queued more than once + var/extra_qdels = 0 - DoSearchVar(GLOB) //globals - for(var/datum/thing in world) //atoms (don't believe its lies) - DoSearchVar(thing, "World -> [thing]") + /// Total milliseconds spent on Destroy calls + var/destroy_time = 0 - for (var/datum/thing) //datums - DoSearchVar(thing, "World -> [thing]") + /// Number of times rolled over from collection to deletion + var/failures = 0 - for (var/client/thing) //clients - DoSearchVar(thing, "World -> [thing]") + /// Number of times hard deleted, failure and intended + var/hard_deletes = 0 - testing("Completed search for references to a [type].") - if(usr && usr.client) - usr.client.running_find_references = null - running_find_references = null + /// Total milliseconds spent on del calls + var/hard_delete_time = 0 - //restart the garbage collector - SSgarbage.can_fire = 1 - SSgarbage.next_fire = world.time + world.tick_lag + /// Number of times Destroy did not return a QDEL_HINT_* + var/no_hint = 0 -/datum/verb/qdel_then_find_references() - set category = "Debug" - set name = "qdel() then Find References" - set src in world + /// Number of times Destroy calls slept + var/slept_destroy = 0 - qdel(src, TRUE) //Force. - if(!running_find_references) - find_references(TRUE) -/datum/verb/qdel_then_if_fail_find_references() - set category = "Debug" - set name = "qdel() then Find References if GC failure" - set src in world +/proc/cmp_qdel_details_time(datum/qdel_details/A, datum/qdel_details/B) + . = B.hard_delete_time - A.hard_delete_time + if (!.) + . = B.destroy_time - A.destroy_time + if (!.) + . = B.failures - A.failures + if (!.) + . = B.extra_qdels - A.extra_qdels + if (!.) + . = B.qdels - A.qdels - qdel_and_find_ref_if_fail(src, TRUE) -//Byond type ids -#define TYPEID_NULL "0" -#define TYPEID_NORMAL_LIST "f" -//helper macros -#define GET_TYPEID(ref) ( ( (length(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, length(ref)-6) ) ) -#define IS_NORMAL_LIST(L) (GET_TYPEID("\ref[L]") == TYPEID_NORMAL_LIST) - -/datum/proc/DoSearchVar(X, Xname, recursive_limit = 64) - if(usr && usr.client && !usr.client.running_find_references) - return - if (!recursive_limit) +/// Queue datum D for garbage collection / deletion. Calls the datum's Destroy() and sets its gc_destroyed value. +/// If not datum passed, proc will crash +/proc/qdel(datum/datum) + if(!datum) return - if(istype(X, /datum)) - var/datum/D = X - if(D.last_find_references == last_find_references) - return - - D.last_find_references = last_find_references - var/list/L = D.vars - - for(var/varname in L) - if (varname == "vars") - continue - var/variable = L[varname] - - if(variable == src) - testing("Found [src.type] \ref[src] in [D.type]'s [varname] var. [Xname]") - - else if(islist(variable)) - DoSearchVar(variable, "[Xname] -> list", recursive_limit-1) - - else if(islist(X)) - var/normal = IS_NORMAL_LIST(X) - for(var/I in X) - if (I == src) - testing("Found [src.type] \ref[src] in list [Xname].") - - else if (I && !isnum(I) && normal && X[I] == src) - testing("Found [src.type] \ref[src] in list [Xname]\[[I]\]") - - else if (islist(I)) - DoSearchVar(I, "[Xname] -> list", recursive_limit-1) + if(!istype(datum)) + crash_with("qdel() can only handle /datum (sub)types, was passed: [log_info_line(datum)]") + return -#ifndef FIND_REF_NO_CHECK_TICK - CHECK_TICK -#endif + var/static/list/details_by_path = SSgarbage.details_by_path + var/static/list/collection_queue = SSgarbage.collection_queue + var/static/list/deletion_queue = SSgarbage.deletion_queue + + var/datum/qdel_details/details = details_by_path[datum.type] + if (!details) + details = new + details_by_path[datum.type] = details + ++details.qdels + switch (datum.gc_destroyed) + if (null) + if(SEND_SIGNAL(datum, COMSIG_PREQDELETED)) // Gives any signal listener a chance to prevent atom qdel + return -#endif + datum.gc_destroyed = GC_CURRENTLY_BEING_QDELETED + var/start_time = world.time + var/start_tick = world.tick_usage + SEND_SIGNAL(datum, COMSIG_QDELETING) // Leting signal listeners know, that datum is being qdeleted + var/hint = datum.Destroy() + if (world.time != start_time) + ++details.slept_destroy + else + details.destroy_time += (world.tick_usage - start_tick) * world.tick_lag + switch (hint) + if (QDEL_HINT_QUEUE) + if (ismovable(datum)) + var/atom/movable/movable = datum + if (movable.loc) + crash_with("QDEL_HINT_QUEUE: [movable] loc not null after Destroy") + movable.forceMove(null) + datum.gc_destroyed = world.time + collection_queue["\ref[datum]"] = world.time + if (QDEL_HINT_IWILLGC) + datum.gc_destroyed = world.time + if (QDEL_HINT_LETMELIVE) + datum.gc_destroyed = null + if (QDEL_HINT_HARDDEL) + if (ismovable(datum)) + var/atom/movable/movable = datum + if (movable.loc) + crash_with("QDEL_HINT_HARDDEL: [movable] loc not null after Destroy") + movable.forceMove(null) + datum.gc_destroyed = world.time + deletion_queue[datum] = world.time + if (QDEL_HINT_HARDDEL_NOW) + SSgarbage.HardDelete(datum) + else + ++details.no_hint + datum.gc_destroyed = world.time + collection_queue["\ref[datum]"] = world.time + if (GC_CURRENTLY_BEING_QDELETED) + crash_with("GC_CURRENTLY_BEING_QDELETED: [datum.type] Destroy() called more than once.") + else + ++details.extra_qdels diff --git a/code/controllers/subsystems/ghost_images.dm b/code/controllers/subsystems/ghost_images.dm index 71168ad4c4de7..eebb2ce693f1a 100644 --- a/code/controllers/subsystems/ghost_images.dm +++ b/code/controllers/subsystems/ghost_images.dm @@ -1,9 +1,9 @@ SUBSYSTEM_DEF(ghost_images) name = "Ghost Images" flags = SS_NO_INIT - priority = SS_PRIORITY_GHOST_IMAGES + priority = FIRE_PRIORITY_GHOST_IMAGES wait = 1 - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY + runlevels = RUNLEVELS_PREGAME | RUNLEVELS_GAME /// When true, queues all ghosts for update. var/static/queue_all = FALSE diff --git a/code/controllers/subsystems/graphs.dm b/code/controllers/subsystems/graphs.dm index 9fe21037eb0fd..fb917a984358b 100644 --- a/code/controllers/subsystems/graphs.dm +++ b/code/controllers/subsystems/graphs.dm @@ -1,8 +1,7 @@ SUBSYSTEM_DEF(graphs) name = "Graphs" - priority = SS_PRIORITY_GRAPH + priority = FIRE_PRIORITY_GRAPH flags = SS_KEEP_TIMING | SS_NO_INIT - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME wait = 1 /// A list of graphs pending update. diff --git a/code/controllers/subsystems/inactivity.dm b/code/controllers/subsystems/inactivity.dm index bbc5924dab8f1..5791f48a9e397 100644 --- a/code/controllers/subsystems/inactivity.dm +++ b/code/controllers/subsystems/inactivity.dm @@ -1,7 +1,7 @@ SUBSYSTEM_DEF(inactivity) name = "Inactivity" wait = 1 MINUTE - priority = SS_PRIORITY_INACTIVITY + priority = FIRE_PRIORITY_INACTIVITY flags = SS_BACKGROUND /// The current run of clients to check for inactivity. diff --git a/code/controllers/subsystems/initialization/character_setup.dm b/code/controllers/subsystems/initialization/character_setup.dm index 6fb82774ffbc5..845a9982edce4 100644 --- a/code/controllers/subsystems/initialization/character_setup.dm +++ b/code/controllers/subsystems/initialization/character_setup.dm @@ -1,10 +1,10 @@ SUBSYSTEM_DEF(character_setup) name = "Character Setup" init_order = SS_INIT_CHAR_SETUP - priority = SS_PRIORITY_CHAR_SETUP + priority = FIRE_PRIORITY_CHAR_SETUP flags = SS_BACKGROUND wait = 1 SECOND - runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT + runlevels = RUNLEVELS_PREGAME | RUNLEVELS_GAME var/list/prefs_awaiting_setup = list() var/list/preferences_datums = list() diff --git a/code/controllers/subsystems/initialization/codex.dm b/code/controllers/subsystems/initialization/codex.dm index 0313a1a15b1d2..097b5dbb83acb 100644 --- a/code/controllers/subsystems/initialization/codex.dm +++ b/code/controllers/subsystems/initialization/codex.dm @@ -54,7 +54,7 @@ SUBSYSTEM_DEF(codex) var/key = linkRegex.group[4] if(linkRegex.group[2]) key = linkRegex.group[3] - key = lowertext(trim(key)) + key = lowertext(trimtext(key)) var/datum/codex_entry/linked_entry = get_entry_by_string(key) var/replacement = linkRegex.group[4] if(linked_entry) @@ -74,10 +74,10 @@ SUBSYSTEM_DEF(codex) return entries_by_string[lowertext(entry)] /datum/controller/subsystem/codex/proc/add_entry_by_string(string, entry) - entries_by_string[lowertext(trim(string))] = entry + entries_by_string[lowertext(trimtext(string))] = entry /datum/controller/subsystem/codex/proc/get_entry_by_string(string) - return entries_by_string[lowertext(trim(string))] + return entries_by_string[lowertext(trimtext(string))] /datum/controller/subsystem/codex/proc/present_codex_entry(mob/presenting_to, datum/codex_entry/entry) if(entry && istype(presenting_to) && presenting_to.client) @@ -90,7 +90,7 @@ SUBSYSTEM_DEF(codex) if(!initialized) return list() - searching = sanitize(lowertext(trim(searching))) + searching = sanitize(lowertext(trimtext(searching))) if(!searching) return list() if(!search_cache[searching]) @@ -102,9 +102,9 @@ SUBSYSTEM_DEF(codex) for(var/entry_title in entries_by_string) var/datum/codex_entry/entry = entries_by_string[entry_title] if(findtext(entry.display_name, searching) || \ - findtext(entry.lore_text, searching) || \ - findtext(entry.mechanics_text, searching) || \ - findtext(entry.antag_text, searching)) + findtext(entry.lore_text, searching) || \ + findtext(entry.mechanics_text, searching) || \ + findtext(entry.antag_text, searching)) results |= entry search_cache[searching] = dd_sortedObjectList(results) return search_cache[searching] diff --git a/code/controllers/subsystems/initialization/customitems.dm b/code/controllers/subsystems/initialization/customitems.dm index 243d3ff2e2ee5..d050c99fd06f6 100644 --- a/code/controllers/subsystems/initialization/customitems.dm +++ b/code/controllers/subsystems/initialization/customitems.dm @@ -2,10 +2,7 @@ SUBSYSTEM_DEF(customitems) name = "Custom Items" flags = SS_NO_FIRE init_order = SS_INIT_MISC_LATE - var/list/custom_items_by_ckey = list() - var/list/item_states = list() - var/list/mob_states = list() /datum/controller/subsystem/customitems/UpdateStat(time) @@ -13,10 +10,6 @@ SUBSYSTEM_DEF(customitems) /datum/controller/subsystem/customitems/Initialize(start_uptime) - - item_states = icon_states(CUSTOM_ITEM_OBJ) - mob_states = icon_states(CUSTOM_ITEM_MOB) - if(!fexists(CUSTOM_ITEM_CONFIG)) report_progress("Custom item directory [CUSTOM_ITEM_CONFIG] does not exist, no custom items will be loaded.") return @@ -83,6 +76,15 @@ SUBSYSTEM_DEF(customitems) return place_custom_item(M,citem) + +/datum/controller/subsystem/customitems/proc/mob_state_valid(icon_state) + return ICON_HAS_STATE(CUSTOM_ITEM_MOB, icon_state) + + +/datum/controller/subsystem/customitems/proc/item_state_valid(icon_state) + return ICON_HAS_STATE(CUSTOM_ITEM_OBJ, icon_state) + + /datum/custom_item var/ckey var/character_name @@ -110,19 +112,21 @@ SUBSYSTEM_DEF(customitems) /datum/custom_item/proc/validate() if(!ispath(item_path, /obj/item)) return SPAN_WARNING("The given item path is invalid or does not exist.") + if(apply_to_target_type && !ispath(apply_to_target_type, /obj/item)) return SPAN_WARNING("The target item path is invalid or does not exist.") + else if(item_icon_state) if(ispath(item_path, /obj/item/device/kit/suit)) for(var/state in list("[item_icon_state]_suit", "[item_icon_state]_helmet")) - if(!(state in SScustomitems.item_states)) + if(!SScustomitems.mob_state_valid(state)) return SPAN_WARNING("The given item icon [state] does not exist.") - if(!(state in SScustomitems.mob_states)) + + if(!SScustomitems.item_state_valid(state)) return SPAN_WARNING("The given mob icon [state] does not exist.") else - for(var/state in list(item_icon_state)) - if(!(state in SScustomitems.item_states)) - return SPAN_WARNING("The given item icon [state] does not exist.") + if(!SScustomitems.item_state_valid(item_icon_state)) + return SPAN_WARNING("The given item icon [item_icon_state] does not exist.") /datum/custom_item/proc/spawn_item(newloc) . = new item_path(newloc) diff --git a/code/controllers/subsystems/initialization/fabrication.dm b/code/controllers/subsystems/initialization/fabrication.dm index 58d1be5156f1d..b7176f1ec2385 100644 --- a/code/controllers/subsystems/initialization/fabrication.dm +++ b/code/controllers/subsystems/initialization/fabrication.dm @@ -3,8 +3,47 @@ SUBSYSTEM_DEF(fabrication) flags = SS_NO_FIRE init_order = SS_INIT_MISC_LATE + /** + * Assoc list of ("fabricator_type" => (Set of subtypes of `/singleton/fabricator_recipe`) ). Set during `Initialize()`. + * + * Example formatting: + * ```dm + * list( + * "general" = list( + * /singleton/fabricator_recipe/A, + * /singleton/fabricator_recipe/B + * ), + * "microlathe" = list( + * /singleton/fabricator_recipe/C, + * /singleton/fabricator_recipe/D + * ) + * ) + * ``` + */ var/static/list/recipes = list() + + /** + * Assoc list of ("fabricator_type" => "categories_available"). Global list of recipe categories. These are pulled from the recipes provided in `recipes`. Set during `Initialize()`. + * + * Example formatting: + * ```dm + * list( + * "general" = list( + * "Arms and Ammunition", + * "Devices and Components" + * ), + * "microlathe" = list( + * "Cutlery", + * "Drinking Glasses" + * ) + * ) + * ``` + */ var/static/list/categories = list() + + /** + * List of lists (Paths (`/obj/item`) => Paths (`/singleton/crafting_stage`)). Global list of crafting stages. These are pulled from each crafting stage's `begins_with_object_type` var. Set during `Initialize()`. + */ var/static/list/stages_by_type = list() @@ -13,53 +52,86 @@ SUBSYSTEM_DEF(fabrication) /datum/controller/subsystem/fabrication/Initialize(start_uptime) - for (var/datum/fabricator_recipe/recipe as anything in subtypesof(/datum/fabricator_recipe)) - recipe = new recipe - if (!recipe.name) + var/list/recipes_map = GET_SINGLETON_SUBTYPE_MAP(/singleton/fabricator_recipe) + for(var/recipe_type in recipes_map) + var/singleton/fabricator_recipe/recipe = recipes_map[recipe_type] + if(!recipe.name) continue - for (var/type in recipe.fabricator_types) - if (!recipes[type]) - recipes[type] = list() - recipes[type] += recipe - if (!categories[type]) - categories[type] = list() - categories[type] |= recipe.category + + for(var/fabricator_type in recipe.fabricator_types) + LAZYADDASSOCLIST(recipes, fabricator_type, recipe) + LAZYORASSOCLIST(categories, fabricator_type, recipe.category) + var/list/stages = GET_SINGLETON_SUBTYPE_MAP(/singleton/crafting_stage) for (var/id in stages) var/singleton/crafting_stage/stage = stages[id] - var/type = stage.begins_with_object_type + var/stage_begins_with_type = stage.begins_with_object_type if (!ispath(type)) continue - if (!stages_by_type[type]) - stages_by_type[type] = list() - stages_by_type[type] |= stage + LAZYORASSOCLIST(stages_by_type, stage_begins_with_type, stage) -/datum/controller/subsystem/fabrication/proc/get_categories(type) - return categories[type] +/** + * Retrieves a list of categories for the given root type. + * + * **Parameters**: + * - `type` - The root type to fetch from the `categories` list. + * + * Returns list of strings. The categories associated with the given root type. + */ +/datum/controller/subsystem/fabrication/proc/get_categories(fabricator_type) + return categories[fabricator_type] -/datum/controller/subsystem/fabrication/proc/get_recipes(type) - return recipes[type] +/** + * Retrieves a list of recipes for the given root type. + * + * **Parameters**: + * - `type` - The root type to fetch from the `recipes` list. + * + * Returns list of paths (`/singleton/fabricator_recipe`). The recipes associated with the given root type. + */ +/datum/controller/subsystem/fabrication/proc/get_recipes(fabricator_type) + return recipes[fabricator_type] -/datum/controller/subsystem/fabrication/proc/find_crafting_recipes(type) - if (isnull(stages_by_type[type])) - stages_by_type[type] = FALSE +/** + * Retrieves a list of crafting stages for the given type path. + * + * **Parameters**: + * - `type` - The object type path to fetch from the `stages_by_type` list. + * + * Returns list of paths (`/singleton/crafting_stage`). The initial crafting stages with the given type set as their `begins_with_object_type`. + */ +/datum/controller/subsystem/fabrication/proc/find_crafting_recipes(begins_with_object_type) + if (isnull(stages_by_type[begins_with_object_type])) + stages_by_type[begins_with_object_type] = FALSE for (var/match in stages_by_type) - if (ispath(type, match)) - stages_by_type[type] = stages_by_type[match] + if (ispath(begins_with_object_type, match)) + stages_by_type[begins_with_object_type] = stages_by_type[match] break - return stages_by_type[type] + + return stages_by_type[begins_with_object_type] +/** + * Attempts to start a crafting stage using the target and tool. + * + * **Parameters**: + * - `target` - The target object. This will be compared with `begins_with_object_type` from crafting stages. + * - `tool` - The item being used. This will be compared with `completion_trigger_type` from crafting stages. + * - `user` - The mob performing the interaction. + * + * Has no return value. + */ /datum/controller/subsystem/fabrication/proc/try_craft_with(obj/item/target, obj/item/tool, mob/user) var/turf/turf = get_turf(target) if (!turf) return + var/list/stages = SSfabrication.find_crafting_recipes(target.type) for (var/singleton/crafting_stage/stage in stages) - if (stage.can_begin_with(target) && stage.is_appropriate_tool(tool)) + if (stage.can_begin_with(target) && stage.is_appropriate_tool(tool, user)) var/obj/item/crafting_holder/crafting = new (turf, stage, target, tool, user) if (stage.progress_to(tool, user, crafting)) return crafting diff --git a/code/controllers/subsystems/initialization/materials.dm b/code/controllers/subsystems/initialization/materials.dm index 40191195da529..0fed53e3c8243 100644 --- a/code/controllers/subsystems/initialization/materials.dm +++ b/code/controllers/subsystems/initialization/materials.dm @@ -51,6 +51,7 @@ SUBSYSTEM_DEF(materials) log_error("Unable to acquire material by name '[name]'") /proc/material_display_name(name) + RETURN_TYPE(/material) var/material/material = SSmaterials.get_material_by_name(name) if(material) return material.display_name diff --git a/code/controllers/subsystems/initialization/misc.dm b/code/controllers/subsystems/initialization/misc.dm index 281886f4bfb8c..a92b27103e252 100644 --- a/code/controllers/subsystems/initialization/misc.dm +++ b/code/controllers/subsystems/initialization/misc.dm @@ -18,7 +18,6 @@ SUBSYSTEM_DEF(init_misc) initialize_pipe_datum_category_list() populate_robolimb_list() setupgenetics() - transfer_controller = new /datum/controller/subsystem/init_misc/proc/init_antags() diff --git a/code/controllers/subsystems/initialization/misc_late.dm b/code/controllers/subsystems/initialization/misc_late.dm index 92b89832e55ce..358b4ed91ded9 100644 --- a/code/controllers/subsystems/initialization/misc_late.dm +++ b/code/controllers/subsystems/initialization/misc_late.dm @@ -13,11 +13,7 @@ SUBSYSTEM_DEF(init_misc_late) /datum/controller/subsystem/init_misc_late/Initialize(start_uptime) GLOB.using_map.build_away_sites() GLOB.using_map.build_exoplanets() - var/singleton/asset_cache/asset_cache = GET_SINGLETON(/singleton/asset_cache) - asset_cache.load() init_recipes() - init_xenoarch() - GLOBAL_VAR_INIT(microwave_maximum_item_storage, 0) GLOBAL_LIST_EMPTY(microwave_recipes) @@ -50,92 +46,7 @@ GLOBAL_LIST_EMPTY(microwave_accepts_items) GLOB.microwave_accepts_reagents += type for (var/type in items) GLOB.microwave_accepts_items += type - sortTim(GLOB.microwave_recipes, /proc/cmp_microwave_recipes_by_weight_dsc) + sortTim(GLOB.microwave_recipes, GLOBAL_PROC_REF(cmp_microwave_recipes_by_weight_dsc)) /proc/cmp_microwave_recipes_by_weight_dsc(datum/microwave_recipe/a, datum/microwave_recipe/b) return a.weight - b.weight - - -GLOBAL_LIST(xeno_artifact_turfs) -GLOBAL_LIST(xeno_digsite_turfs) - -/datum/controller/subsystem/init_misc_late/proc/init_xenoarch() - var/list/queue = list() - var/list/site_turfs = list() - var/list/artifact_turfs = list() - var/datum/map/map = GLOB.using_map - if (!map) - GLOB.xeno_artifact_turfs = list() - GLOB.xeno_digsite_turfs = list() - return - var/list/banned_levels = map.admin_levels + map.escape_levels - for (var/turf/simulated/mineral/M in world) - if (!M.density) - continue - if (M.z in banned_levels) - continue - if (!M.geologic_data) - M.geologic_data = new (M) - if (!prob(0.5)) - continue - var/has_space = TRUE - for (var/turf/T as anything in site_turfs) - if (T.z != M.z) - continue - if (abs(T.x - M.x) > 3) - continue - if (abs(T.y - M.y) > 3) - continue - has_space = FALSE - break - if (!has_space) - continue - site_turfs += M - queue.Cut() - queue += M - for (var/turf/simulated/mineral/T in orange(2, M)) - if (!T.density) - continue - if (T.finds) - continue - queue += T - var/site_turf_count = rand(4, 12) - if (site_turf_count < length(queue)) - for (var/i = length(queue) - site_turf_count to 1 step -1) - var/selected = rand(1, length(queue)) - queue.Cut(selected, selected + 1) - var/site_type = get_random_digsite_type() - for (var/turf/simulated/mineral/T as anything in queue) - if (!T.finds) - var/list/finds = list() - if (prob(50)) - finds += new /datum/find (site_type, rand(10, 190)) - else if (prob(75)) - finds += new /datum/find (site_type, rand(10, 90)) - finds += new /datum/find (site_type, rand(110, 190)) - else - finds += new /datum/find (site_type, rand(10, 50)) - finds += new /datum/find (site_type, rand(60, 140)) - finds += new /datum/find (site_type, rand(150, 190)) - var/datum/find/F = finds[1] - if (F.excavation_required <= F.view_range) - T.archaeo_overlay = "overlay_archaeo[rand(1, 3)]" - T.update_icon() - T.finds = finds - if (site_type == DIGSITE_GARDEN) - continue - if (site_type == DIGSITE_ANIMAL) - continue - artifact_turfs += T - CHECK_TICK - GLOB.xeno_digsite_turfs = site_turfs - GLOB.xeno_artifact_turfs = list() - for (var/i = rand(6, 12) to 1 step -1) - var/len = length(artifact_turfs) - if (len < 1) - break - var/selected = rand(1, len) - var/turf/simulated/mineral/T = artifact_turfs[selected] - artifact_turfs.Cut(selected, selected + 1) - GLOB.xeno_artifact_turfs += T - T.artifact_find = new diff --git a/code/controllers/subsystems/initialization/modpacks.dm b/code/controllers/subsystems/initialization/modpacks.dm new file mode 100644 index 0000000000000..5f1763c2f5ddf --- /dev/null +++ b/code/controllers/subsystems/initialization/modpacks.dm @@ -0,0 +1,70 @@ +SUBSYSTEM_DEF(modpacks) + name = "Modpacks" + init_order = SS_INIT_EARLY + flags = SS_NO_FIRE + var/list/loaded_modpacks = list() + +/datum/controller/subsystem/modpacks/Initialize() + var/list/all_modpacks = GET_SINGLETON_SUBTYPE_MAP(/singleton/modpack) + + // Pre-init and register all compiled modpacks. + for(var/package in all_modpacks) + var/singleton/modpack/manifest = all_modpacks[package] + var/fail_msg = manifest.pre_initialize() + if(QDELETED(manifest)) + crash_with("Modpack of type [package] is null or queued for deletion.") + continue + if(fail_msg) + crash_with("Modpack [manifest.name] failed to pre-initialize: [fail_msg].") + continue + if(loaded_modpacks[manifest.name]) + crash_with("Attempted to register duplicate modpack name [manifest.name].") + continue + loaded_modpacks[manifest.name] = manifest + + // Handle init and post-init (two stages in case a modpack needs to implement behavior based on the presence of other packs). + for(var/package in all_modpacks) + var/singleton/modpack/manifest = all_modpacks[package] + var/fail_msg = manifest.initialize() + if(fail_msg) + crash_with("Modpack [(istype(manifest) && manifest.name) || "Unknown"] failed to initialize: [fail_msg]") + for(var/package in all_modpacks) + var/singleton/modpack/manifest = all_modpacks[package] + var/fail_msg = manifest.post_initialize() + if(fail_msg) + crash_with("Modpack [(istype(manifest) && manifest.name) || "Unknown"] failed to post-initialize: [fail_msg]") + + . = ..() + +/datum/controller/subsystem/modpacks/UpdateStat() + ..("Modpacks: [length(loaded_modpacks)]") + +/client/verb/modpacks_list() + set name = "Modpacks List" + set category = "OOC" + + if(!mob || !SSmodpacks.initialized) + return + + if(length(SSmodpacks.loaded_modpacks)) + . = "

Список модификаций



" + for(var/modpack in SSmodpacks.loaded_modpacks) + var/singleton/modpack/M = SSmodpacks.loaded_modpacks[modpack] + + if(M.name) + . += "
" + . += "
[M.name]
" + + if(M.desc || M.author) + . += "
" + if(M.desc) + . += "
Описание: [M.desc]" + if(M.author) + . += "
Автор: [M.author]" + . += "

" + + var/datum/browser/popup = new(mob, "modpacks_list", "Список Модификаций", 480, 580) + popup.set_content(.) + popup.open() + else + to_chat(src, SPAN_WARNING("Этот сервер не использует какие-либо модификации.")) diff --git a/code/controllers/subsystems/initialization/robots.dm b/code/controllers/subsystems/initialization/robots.dm index 44dee66a51fc3..050b7a4931870 100644 --- a/code/controllers/subsystems/initialization/robots.dm +++ b/code/controllers/subsystems/initialization/robots.dm @@ -15,6 +15,9 @@ SUBSYSTEM_DEF(robots) ) var/list/mmi_types_by_title = list( + // [SIERRA-ADD] - Allow to join as cyborg, + "cyborg" = /obj/item/device/mmi, + // [/SIERRA-ADD] , "robot" = /obj/item/organ/internal/posibrain, "drone" = /obj/item/device/mmi/digital/robot, "robot, flying" = /obj/item/organ/internal/posibrain, @@ -31,7 +34,7 @@ SUBSYSTEM_DEF(robots) // This is done via loop instead of just assignment in order to trim associations. for(var/title in (mob_types_by_title|mmi_types_by_title)) robot_alt_titles |= capitalize(title) - sortTim(robot_alt_titles, /proc/cmp_text_asc) + sortTim(robot_alt_titles, GLOBAL_PROC_REF(cmp_text_asc)) for(var/module_type in subtypesof(/obj/item/robot_module)) var/obj/item/robot_module/module = module_type @@ -48,7 +51,7 @@ SUBSYSTEM_DEF(robots) LAZYINITLIST(modules_by_category[module_category]) LAZYSET(modules_by_category[module_category], module_name, module) all_module_names |= module_name - all_module_names = sortTim(all_module_names, /proc/cmp_text_asc) + all_module_names = sortTim(all_module_names, GLOBAL_PROC_REF(cmp_text_asc)) /datum/controller/subsystem/robots/proc/get_available_modules(module_category, crisis_mode, include_override) . = list() @@ -62,7 +65,7 @@ SUBSYSTEM_DEF(robots) .[include_override] = modules[include_override] /datum/controller/subsystem/robots/proc/get_mmi_type_by_title(check_title) - . = mmi_types_by_title[lowertext(trim(check_title))] || /obj/item/device/mmi + . = mmi_types_by_title[lowertext(trimtext(check_title))] || /obj/item/device/mmi /datum/controller/subsystem/robots/proc/get_mob_type_by_title(check_title) - . = mob_types_by_title[lowertext(trim(check_title))] || /mob/living/silicon/robot + . = mob_types_by_title[lowertext(trimtext(check_title))] || /mob/living/silicon/robot diff --git a/code/controllers/subsystems/initialization/xenoarch.dm b/code/controllers/subsystems/initialization/xenoarch.dm new file mode 100644 index 0000000000000..06f97013ec5a8 --- /dev/null +++ b/code/controllers/subsystems/initialization/xenoarch.dm @@ -0,0 +1,85 @@ +SUBSYSTEM_DEF(xenoarch) + name = "Xenoarcheology" + flags = SS_NO_FIRE + init_order = SS_INIT_XENOARCH + var/static/list/xeno_artifact_turfs = list() + var/static/list/xeno_digsite_turfs = list() + +/datum/controller/subsystem/xenoarch/Initialize(start_uptime) + var/datum/map/map = GLOB.using_map + if (!map) + return + + var/list/artifact_turfs = list() + var/static/excavation_turf_chance = 0.5 + var/list/banned_levels = map.admin_levels + map.escape_levels + for(var/z_level_index in mining_walls) + if(text2num(z_level_index) in banned_levels) + continue + + var/list/mining_turfs = mining_walls[z_level_index] + if(!length(mining_turfs)) + continue + + for(var/turf/simulated/mineral/mineral_turf as anything in mining_turfs) + if (!mineral_turf.density) + continue + + if (!mineral_turf.geologic_data) + mineral_turf.geologic_data = new(mineral_turf) + + if(!prob(excavation_turf_chance)) + continue + + xeno_digsite_turfs += mineral_turf + var/list/possible_site_turfs = list() + for(var/turf/simulated/mineral/T in RANGE_TURFS(mineral_turf, 2)) + if(!T.density) + continue + + if(T.finds) + continue + + possible_site_turfs += T + + possible_site_turfs = shuffle(possible_site_turfs) + LIST_RESIZE(possible_site_turfs, min(rand(4, 12), length(possible_site_turfs))) + + var/site_type = get_random_digsite_type() + for(var/turf/simulated/mineral/T as anything in possible_site_turfs) + if(!T.finds) + var/list/finds = list() + if (prob(50)) + finds += new /datum/find (site_type, rand(10, 190)) + else if (prob(75)) + finds += new /datum/find (site_type, rand(10, 90)) + finds += new /datum/find (site_type, rand(110, 190)) + else + finds += new /datum/find (site_type, rand(10, 50)) + finds += new /datum/find (site_type, rand(60, 140)) + finds += new /datum/find (site_type, rand(150, 190)) + var/datum/find/F = finds[1] + if (F.excavation_required <= F.view_range) + T.archaeo_overlay = "overlay_archaeo[rand(1, 3)]" + T.update_icon() + T.finds = finds + + if(site_type == DIGSITE_GARDEN) + continue + + if(site_type == DIGSITE_ANIMAL) + continue + + artifact_turfs += T + + CHECK_TICK + + var/xeno_artifact_turfs_amount = min(rand(6, 12), length(artifact_turfs)) + for (var/i = 1 to xeno_artifact_turfs_amount) + var/turf/simulated/mineral/selected_mineral = pick_n_take(artifact_turfs) + // Failsafe for invalid turf types + if (!istype(selected_mineral)) + continue + + xeno_artifact_turfs += selected_mineral + selected_mineral.artifact_find = new diff --git a/code/controllers/subsystems/jobs.dm b/code/controllers/subsystems/jobs.dm index 61822f8b2255f..d2ee947d24cff 100644 --- a/code/controllers/subsystems/jobs.dm +++ b/code/controllers/subsystems/jobs.dm @@ -38,6 +38,9 @@ SUBSYSTEM_DEF(jobs) // Create main map jobs. primary_job_datums.Cut() for(var/jobtype in (list(DEFAULT_JOB_TYPE) | GLOB.using_map.allowed_jobs)) + if(!jobtype) + stack_trace("`null` jobtype exists in `GLOB.using_map.allowed_jobs` and `DEFAULT_JOB_TYPE`") + var/datum/job/job = get_by_path(jobtype) if(!job) job = new jobtype @@ -151,8 +154,7 @@ SUBSYSTEM_DEF(jobs) /datum/controller/subsystem/jobs/proc/check_latejoin_blockers(mob/new_player/joining, datum/job/job) if(!check_general_join_blockers(joining, job)) return FALSE - if(job.minimum_character_age && (joining.client.prefs.age < job.minimum_character_age)) - to_chat(joining, SPAN_WARNING("Your character's in-game age is too low for this job.")) + if(job.is_restricted(joining.client.prefs, joining)) return FALSE if(!job.player_old_enough(joining.client)) to_chat(joining, SPAN_WARNING("Your player age (days since first seen on the server) is too low for this job.")) @@ -242,38 +244,35 @@ SUBSYSTEM_DEF(jobs) ///This proc is called before the level loop of divide_occupations() and will try to select a head, ignoring ALL non-head preferences for every level until it locates a head or runs out of levels to check /datum/controller/subsystem/jobs/proc/fill_head_position(datum/game_mode/mode) - for(var/level = 1 to 3) - for(var/command_position in titles_by_department(COM)) + for (var/level = 1 to 3) + for (var/command_position as anything in titles_by_department(COM)) var/datum/job/job = get_by_title(command_position) - if(!job) continue + if (!job) + continue var/list/candidates = find_occupation_candidates(job, level) - if(!length(candidates)) continue - // Build a weighted list, weight by age. + if (!length(candidates)) + continue var/list/weightedCandidates = list() - for(var/mob/V in candidates) - // Log-out during round-start? What a bad boy, no head position for you! - if(!V.client) continue - var/age = V.client.prefs.age - if(age < job.minimum_character_age) // Nope. + for (var/mob/mob as anything in candidates) + if (!mob.client) continue - switch(age) - if(job.minimum_character_age to (job.minimum_character_age+10)) - weightedCandidates[V] = 3 // Still a bit young. - if((job.minimum_character_age+10) to (job.ideal_character_age-10)) - weightedCandidates[V] = 6 // Better. - if((job.ideal_character_age-10) to (job.ideal_character_age+10)) - weightedCandidates[V] = 10 // Great. - if((job.ideal_character_age+10) to (job.ideal_character_age+20)) - weightedCandidates[V] = 6 // Still good. - if((job.ideal_character_age+20) to INFINITY) - weightedCandidates[V] = 3 // Geezer. - else - // If there's ABSOLUTELY NOBODY ELSE - if(length(candidates) == 1) weightedCandidates[V] = 1 + var/age = mob.client.prefs.age + if (age < job.minimum_character_age) + continue + if (age < job.minimum_character_age + 10) + weightedCandidates[mob] = 3 + else if (age < job.ideal_character_age - 10) + weightedCandidates[mob] = 6 + else if (age < job.ideal_character_age + 10) + weightedCandidates[mob] = 10 + else if (age < job.ideal_character_age + 20) + weightedCandidates[mob] = 6 + else + weightedCandidates[mob] = 3 var/mob/new_player/candidate = pickweight(weightedCandidates) - if(assign_role(candidate, command_position, mode = mode)) - return 1 - return 0 + if (assign_role(candidate, command_position, mode = mode)) + return TRUE + return FALSE ///This proc is called at the start of the level loop of divide_occupations() and will cause head jobs to be checked before any other jobs of the same level /datum/controller/subsystem/jobs/proc/CheckHeadPositions(level, datum/game_mode/mode) @@ -288,7 +287,7 @@ SUBSYSTEM_DEF(jobs) /** Proc divide_occupations * fills var "assigned_role" for all ready players. * This proc must not have any side effect besides of modifying "assigned_role". - **/ + */ /datum/controller/subsystem/jobs/proc/divide_occupations(datum/game_mode/mode) //Get the players who are ready for(var/mob/new_player/player in GLOB.player_list) @@ -361,73 +360,61 @@ SUBSYSTEM_DEF(jobs) /datum/controller/subsystem/jobs/proc/attempt_role_assignment(mob/new_player/player, datum/job/job, level, datum/game_mode/mode) if(!jobban_isbanned(player, job.title) && \ - job.player_old_enough(player.client) && \ - player.client.prefs.CorrectLevel(job, level) && \ - job.is_position_available()) + job.player_old_enough(player.client) && \ + player.client.prefs.CorrectLevel(job, level) && \ + job.is_position_available()) assign_role(player, job.title, mode = mode) return TRUE return FALSE -/datum/controller/subsystem/jobs/proc/equip_custom_loadout(mob/living/carbon/human/H, datum/job/job) - - if(!H || !H.client) +/datum/controller/subsystem/jobs/proc/equip_custom_loadout(mob/living/carbon/human/human_to_equip, datum/job/job) + if(!human_to_equip?.client) return // Equip custom gear loadout, replacing any job items - var/list/spawn_in_storage = list() + var/list/spawn_in_storage = equip_gear(human_to_equip, job) + + // do accessories last so they don't attach to a suit that will be replaced + equip_accessories(human_to_equip) + return spawn_in_storage + +/// Equips all the loadout gear to `human_to_equip`. +/// Returns the list of gear, that couldn't be equipped to any inventory slot. +/datum/controller/subsystem/jobs/proc/equip_gear(mob/living/carbon/human/human_to_equip, datum/job/job) + if(!job.loadout_allowed) + return list() + + var/list/gear_to_equip = human_to_equip.client.prefs.Gear() + if(!length(gear_to_equip)) + return list() + var/list/loadout_taken_slots = list() - if(H.client.prefs.Gear() && job.loadout_allowed) - for(var/thing in H.client.prefs.Gear()) - var/datum/gear/G = gear_datums[thing] - if(G) - var/permitted = 0 - if(G.allowed_branches) - if(H.char_branch && (H.char_branch.type in G.allowed_branches)) - permitted = 1 - else - permitted = 1 - - if(permitted) - if(G.allowed_roles) - if(job.type in G.allowed_roles) - permitted = 1 - else - permitted = 0 - else - permitted = 1 - - if(permitted && G.allowed_skills) - for(var/required in G.allowed_skills) - if(!H.skill_check(required,G.allowed_skills[required])) - permitted = 0 - - if(G.whitelisted && (!(H.species.name in G.whitelisted))) - permitted = 0 - - if(!permitted) - to_chat(H, SPAN_WARNING("Your current species, job, branch, skills or whitelist status does not permit you to spawn with [thing]!")) - continue + var/list/failed_to_equip_gear = list() + for(var/gear_name as anything in gear_to_equip) + var/datum/gear/gear_item = gear_datums[gear_name] + if(!gear_item) + stack_trace("Non-existing gear: `gear_name`") + continue - if(!G.slot || G.slot == slot_tie || (G.slot in loadout_taken_slots) || !G.spawn_on_mob(H, H.client.prefs.Gear()[G.display_name])) - spawn_in_storage.Add(G) - else - loadout_taken_slots.Add(G.slot) + if(!gear_item.is_permitted_to_equip(human_to_equip, job)) + to_chat(human_to_equip, SPAN_WARNING("Your current species, job, branch, skills or whitelist status does not permit you to spawn with [gear_name]!")) + continue - // do accessories last so they don't attach to a suit that will be replaced - if(H.char_rank && H.char_rank.accessory) - for(var/accessory_path in H.char_rank.accessory) - var/list/accessory_data = H.char_rank.accessory[accessory_path] - if(islist(accessory_data)) - var/amt = accessory_data[1] - var/list/accessory_args = accessory_data.Copy() - accessory_args[1] = src - for(var/i in 1 to amt) - H.equip_to_slot_or_del(new accessory_path(arglist(accessory_args)), slot_tie) - else - for(var/i in 1 to (isnull(accessory_data)? 1 : accessory_data)) - H.equip_to_slot_or_del(new accessory_path(src), slot_tie) + var/failed_to_equip = !gear_item.slot || gear_item.slot == slot_tie || loadout_taken_slots["[gear_item.slot]"] || !gear_item.spawn_on_mob(human_to_equip, gear_to_equip[gear_item.display_name]) + if(failed_to_equip) + failed_to_equip_gear += gear_item + continue - return spawn_in_storage + loadout_taken_slots["[gear_item.slot]"] = TRUE + + return failed_to_equip_gear + +/datum/controller/subsystem/jobs/proc/equip_accessories(mob/living/carbon/human/human_to_equip) + if(!human_to_equip.char_rank || !length(human_to_equip.char_rank.accessory)) + return + + for(var/accessory_path in human_to_equip.char_rank.accessory) + human_to_equip.equip_to_slot_or_del(new accessory_path, slot_tie) /datum/controller/subsystem/jobs/proc/equip_rank(mob/living/carbon/human/H, rank, joined_late = 0) if(!H) @@ -484,7 +471,7 @@ SUBSYSTEM_DEF(jobs) if(!joined_late || job.latejoin_at_spawnpoints) var/obj/S = job.get_roundstart_spawnpoint() - if(istype(S, /obj/effect/landmark/start) && istype(S.loc, /turf)) + if(istype(S, /obj/landmark/start) && istype(S.loc, /turf)) H.forceMove(S.loc) else var/datum/spawnpoint/spawnpoint = job.get_spawnpoint(H.client) @@ -520,15 +507,15 @@ SUBSYSTEM_DEF(jobs) return other_mob if(spawn_in_storage) - for(var/datum/gear/G in spawn_in_storage) - G.spawn_in_storage_or_drop(H, H.client.prefs.Gear()[G.display_name]) + var/datum/gear_slot/picked_gear_slot = H.client.prefs.get_picked_gear_slot() + for(var/datum/gear/gear_to_spawn as anything in spawn_in_storage) + gear_to_spawn.spawn_in_storage_or_drop(H, picked_gear_slot.get_gear_tweaks(gear_to_spawn.display_name)) if(istype(H)) //give humans wheelchairs, if they need them. var/obj/item/organ/external/l_foot = H.get_organ(BP_L_FOOT) var/obj/item/organ/external/r_foot = H.get_organ(BP_R_FOOT) if(!l_foot || !r_foot) var/obj/structure/bed/chair/wheelchair/W = new /obj/structure/bed/chair/wheelchair(H.loc) - H.buckled = W H.UpdateLyingBuckledAndVerbStatus() W.set_dir(H.dir) W.buckle_mob(H) @@ -559,7 +546,7 @@ SUBSYSTEM_DEF(jobs) return positions_by_department["[dept]"] || list() /datum/controller/subsystem/jobs/proc/spawn_empty_ai() - for(var/obj/effect/landmark/start/S in landmarks_list) + for(var/obj/landmark/start/S in landmarks_list) if(S.name != "AI") continue if(locate(/mob/living) in S.loc) diff --git a/code/controllers/subsystems/lighting.dm b/code/controllers/subsystems/lighting.dm index 775bb83b47ba5..353c4bf9b53d4 100644 --- a/code/controllers/subsystems/lighting.dm +++ b/code/controllers/subsystems/lighting.dm @@ -1,112 +1,138 @@ -var/global/lighting_overlays_initialised = FALSE - SUBSYSTEM_DEF(lighting) name = "Lighting" - wait = 1 + wait = LIGHTING_INTERVAL init_order = SS_INIT_LIGHTING + runlevels = RUNLEVELS_PREGAME | RUNLEVELS_GAME - // Queues of update counts, waiting to be rolled into stats lists - var/list/stats_queues = list( - "Source" = list(), - "Corner" = list(), - "Overlay" = list() - ) - // Stats lists - var/list/stats_lists = list( - "Source" = list(), - "Corner" = list(), - "Overlay" = list() - ) - var/update_stats_every = 1 SECOND - var/next_stats_update = 0 - var/stat_updates_to_keep = 5 + var/total_lighting_overlays = 0 + var/total_lighting_sources = 0 + var/total_ambient_turfs = 0 + var/total_lighting_corners = 0 - var/list/light_queue = list() // lighting sources queued for update. + /// lighting sources queued for update. + var/list/light_queue = list() var/lq_idex = 1 - var/list/corner_queue = list() // lighting corners queued for update. + /// lighting corners queued for update. + var/list/corner_queue = list() var/cq_idex = 1 - var/list/overlay_queue = list() // lighting overlays queued for update. + /// lighting overlays queued for update. + var/list/overlay_queue = list() var/oq_idex = 1 + // - Performance and analytics data var/processed_lights = 0 var/processed_corners = 0 var/processed_overlays = 0 + var/total_ss_updates = 0 + var/total_instant_updates = 0 + +#ifdef USE_INTELLIGENT_LIGHTING_UPDATES + var/force_queued = TRUE + var/force_override = FALSE // For admins. +#endif + /datum/controller/subsystem/lighting/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..({"\ - Queues: \ - Source [length(light_queue)] \ - Corner [length(corner_queue)] \ - Overlay [length(overlay_queue)]\n\ - Source Updates [length(stats_lists["Source"])]\n\ - Corner Updates [length(stats_lists["Corner"])]\n\ - Overlay Updates [length(stats_lists["Overlay"])]\ - "}) - - -/datum/controller/subsystem/lighting/Initialize(start_uptime) - InitializeTurfs() - lighting_overlays_initialised = TRUE + var/list/out = list( +#ifdef USE_INTELLIGENT_LIGHTING_UPDATES + "IUR: [total_ss_updates ? round(total_instant_updates/(total_instant_updates+total_ss_updates)*100, 0.1) : "NaN"]%\n", +#endif + "\tT:{L:[total_lighting_sources] C:[total_lighting_corners] O:[total_lighting_overlays] A:[total_ambient_turfs]}\n", + "\tP:{L:[length(light_queue) - (lq_idex - 1)]|C:[length(corner_queue) - (cq_idex - 1)]|O:[length(overlay_queue) - (oq_idex - 1)]}\n", + "\tL:{L:[processed_lights]|C:[processed_corners]|O:[processed_overlays]}\n" + ) + ..(out.Join()) + +#ifdef USE_INTELLIGENT_LIGHTING_UPDATES + +/hook/roundstart/proc/lighting_init_roundstart() + SSlighting.handle_roundstart() + return TRUE + +/datum/controller/subsystem/lighting/proc/handle_roundstart() + force_queued = FALSE + total_ss_updates = 0 + total_instant_updates = 0 + +#endif +/// Generate overlays for all Zlevels and then fire normally +/datum/controller/subsystem/lighting/Initialize(timeofday) + var/overlaycount = 0 + var/starttime = REALTIMEOFDAY + + // Generate overlays. + for (var/zlevel = 1 to world.maxz) + overlaycount += InitializeZlev(zlevel) + + admin_notice(SPAN_DANGER("Created [overlaycount] lighting overlays in [(REALTIMEOFDAY - starttime)/10] seconds."), R_DEBUG) + + starttime = REALTIMEOFDAY + // Tick once to clear most lights. fire(FALSE, TRUE) + admin_notice(SPAN_DANGER("Processed [processed_lights] light sources."), R_DEBUG) + admin_notice(SPAN_DANGER("Processed [processed_corners] light corners."), R_DEBUG) + admin_notice(SPAN_DANGER("Processed [processed_overlays] light overlays."), R_DEBUG) + admin_notice(SPAN_DANGER("Lighting pre-bake completed in [(REALTIMEOFDAY - starttime)/10] seconds."), R_DEBUG) + + log_ss("lighting", "NOv:[overlaycount] L:[processed_lights] C:[processed_corners] O:[processed_overlays]") + + ..() + +/** + * Go over turfs thay may be dynamically lit and add a lighting overlay if they don't have one. Then do the same for turfs that may be ambient lit. + * + * **Parameters**: + * - `zlev` int - z-level index + */ +/datum/controller/subsystem/lighting/proc/InitializeZlev(zlev) + for (var/turf/T as anything in Z_ALL_TURFS(zlev)) + if (TURF_IS_DYNAMICALLY_LIT_UNSAFE(T) && !T.lighting_overlay) // Can't assume that one hasn't already been created on bay/neb. + new /atom/movable/lighting_overlay(T) + . += 1 + if(TURF_IS_AMBIENT_LIT_UNSAFE(T)) + T.generate_missing_corners() // Forcibly generate corners. -// It's safe to pass a list of non-turfs to this list - it'll only check turfs. + CHECK_TICK + +/// Initialize a set of turfs (for example as part of loading a map template) It's safe to pass a list of non-turfs to this list - it'll only check turfs. /datum/controller/subsystem/lighting/proc/InitializeTurfs(list/targets) - for (var/turf/T in (targets || world)) - if (T.dynamic_lighting && T.loc:dynamic_lighting) + for (var/turf/T in targets) + if (TURF_IS_DYNAMICALLY_LIT_UNSAFE(T)) T.lighting_build_overlay() // If this isn't here, BYOND will set-background us. CHECK_TICK +/** + * Go over light queue and update corners as needed + * Go over light corner queue and update overlays as needed + * Go over overlay queue and update as needed + */ /datum/controller/subsystem/lighting/fire(resumed = FALSE, no_mc_tick = FALSE) if (!resumed) - stats_queues["Source"] += processed_lights - stats_queues["Corner"] += processed_corners - stats_queues["Overlay"] += processed_overlays - processed_lights = 0 processed_corners = 0 processed_overlays = 0 - if(next_stats_update <= world.time) - next_stats_update = world.time + update_stats_every - for(var/stat_name in stats_queues) - var/stat_sum = 0 - var/list/stats_queue = stats_queues[stat_name] - for(var/count in stats_queue) - stat_sum += count - stats_queue.Cut() - - var/list/stats_list = stats_lists[stat_name] - stats_list.Insert(1, stat_sum) - if(length(stats_list) > stat_updates_to_keep) - stats_list.Cut(length(stats_list)) - MC_SPLIT_TICK_INIT(3) if (!no_mc_tick) MC_SPLIT_TICK - // Sources. - while (lq_idex <= length(light_queue)) - var/datum/light_source/L = light_queue[lq_idex] - lq_idex += 1 + var/list/curr_lights = light_queue + var/list/curr_corners = corner_queue + var/list/curr_overlays = overlay_queue - if(L.check() || L.destroyed || L.force_update) - L.remove_lum() - if(!L.destroyed) - L.apply_lum() + while (lq_idex <= length(curr_lights)) + var/datum/light_source/L = curr_lights[lq_idex++] - else if(L.vis_update) //We smartly update only tiles that became (in) visible to use. - L.smart_vis_update() + if (L.needs_update != LIGHTING_NO_UPDATE) + total_ss_updates += 1 + L.update_corners() - L.vis_update = FALSE - L.force_update = FALSE - L.needs_update = FALSE + L.needs_update = LIGHTING_NO_UPDATE - processed_lights += 1 + processed_lights++ if (no_mc_tick) CHECK_TICK @@ -114,22 +140,21 @@ SUBSYSTEM_DEF(lighting) break if (lq_idex > 1) - light_queue.Cut(1, lq_idex) + curr_lights.Cut(1, lq_idex) lq_idex = 1 if (!no_mc_tick) MC_SPLIT_TICK - // Corners. - while (cq_idex <= length(corner_queue)) - var/datum/lighting_corner/C = corner_queue[cq_idex] - cq_idex += 1 + while (cq_idex <= length(curr_corners)) + var/datum/lighting_corner/C = curr_corners[cq_idex++] - C.update_overlays() + if (C.needs_update) + C.update_overlays() - C.needs_update = FALSE + C.needs_update = FALSE - processed_corners += 1 + processed_corners++ if (no_mc_tick) CHECK_TICK @@ -137,27 +162,51 @@ SUBSYSTEM_DEF(lighting) break if (cq_idex > 1) - corner_queue.Cut(1, cq_idex) + curr_corners.Cut(1, cq_idex) cq_idex = 1 if (!no_mc_tick) MC_SPLIT_TICK - // Objects. - while (oq_idex <= length(overlay_queue)) - var/atom/movable/lighting_overlay/O = overlay_queue[oq_idex] - oq_idex += 1 + while (oq_idex <= length(curr_overlays)) + var/atom/movable/lighting_overlay/O = curr_overlays[oq_idex++] - O.update_overlay() - O.needs_update = 0 + if (!QDELETED(O) && O.needs_update) + O.update_overlay() + O.needs_update = FALSE - processed_overlays += 1 + processed_overlays++ if (no_mc_tick) CHECK_TICK else if (MC_TICK_CHECK) break + if (oq_idex > 1) + curr_overlays.Cut(1, oq_idex) + oq_idex = 1 + +/datum/controller/subsystem/lighting/Recover() + total_lighting_corners = SSlighting.total_lighting_corners + total_lighting_overlays = SSlighting.total_lighting_overlays + total_lighting_sources = SSlighting.total_lighting_sources + + light_queue = SSlighting.light_queue + corner_queue = SSlighting.corner_queue + overlay_queue = SSlighting.overlay_queue + + lq_idex = SSlighting.lq_idex + cq_idex = SSlighting.cq_idex + oq_idex = SSlighting.oq_idex + + if (lq_idex > 1) + light_queue.Cut(1, lq_idex) + lq_idex = 1 + + if (cq_idex > 1) + corner_queue.Cut(1, cq_idex) + cq_idex = 1 + if (oq_idex > 1) overlay_queue.Cut(1, oq_idex) oq_idex = 1 diff --git a/code/controllers/subsystems/machines.dm b/code/controllers/subsystems/machines.dm index dff1ccf741ddb..0c7d0eb8d0740 100644 --- a/code/controllers/subsystems/machines.dm +++ b/code/controllers/subsystems/machines.dm @@ -37,27 +37,25 @@ if(Datum.is_processing) {\ SUBSYSTEM_DEF(machines) name = "Machines" init_order = SS_INIT_MACHINES - priority = SS_PRIORITY_MACHINERY + priority = FIRE_PRIORITY_MACHINERY flags = SS_KEEP_TIMING - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/static/current_step = SSMACHINES_PIPENETS var/static/cost_pipenets = 0 var/static/cost_machinery = 0 var/static/cost_powernets = 0 var/static/cost_power_objects = 0 var/static/list/pipenets = list() - var/static/list/machinery = list() var/static/list/powernets = list() var/static/list/power_objects = list() var/static/list/processing = list() var/static/list/queue = list() - + var/static/list/machinery = list() + var/static/list/machinery_by_type = list() /datum/controller/subsystem/machines/Recover() current_step = SSMACHINES_PIPENETS queue.Cut() - /datum/controller/subsystem/machines/Initialize(start_uptime) makepowernets() setup_atmos_machinery(machinery) @@ -66,7 +64,9 @@ SUBSYSTEM_DEF(machines) /datum/controller/subsystem/machines/fire(resumed, no_mc_tick) var/timer - if (!resumed || current_step == SSMACHINES_PIPENETS) + if (!resumed) + current_step = SSMACHINES_PIPENETS + if (current_step == SSMACHINES_PIPENETS) timer = world.tick_usage process_pipenets(resumed, no_mc_tick) cost_pipenets = MC_AVERAGE(cost_pipenets, (world.tick_usage - timer) * world.tick_lag) @@ -98,6 +98,51 @@ SUBSYSTEM_DEF(machines) return current_step = SSMACHINES_PIPENETS +/datum/controller/subsystem/machines/proc/register_machinery(obj/machinery/machine) + if(!machine) + CRASH("Null machinery was tried to be registered") + + machinery += machine + LAZYADDASSOCLIST(machinery_by_type, machine.type, machine) + var/area/A = get_area(machine) + if(A) + LAZYADD(A.machinery_list, machine) + +/datum/controller/subsystem/machines/proc/unregister_machinery(obj/machinery/machine) + if(!machine) + CRASH("Null machinery was tried to be unregistered") + + machinery -= machine + LAZYREMOVEASSOC(machinery_by_type, machine.type, machine) + + var/area/A = get_area(machine) + if(A) + LAZYREMOVE(A.machinery_list, machine) + +/datum/controller/subsystem/machines/proc/get_machinery_of_type(obj/machinery/machinery_type) + if(istype(machinery_type)) + var/obj/machinery/passed_machinery = machinery_type + machinery_type = passed_machinery.type + + if(!ispath(machinery_type)) + stack_trace("Non-machinery type passed in `/datum/controller/subsystem/machines/proc/get_machinery_of_type`") + return list() + + if(machinery_type == /obj/machinery) + return get_all_machinery() + + var/list/machinery = list() + for(var/type in typesof(machinery_type)) + var/list/machinery_of_type = machinery_by_type[type] + if(!length(machinery_of_type)) + continue + + machinery += machinery_of_type + + return machinery + +/datum/controller/subsystem/machines/proc/get_all_machinery() + return machinery.Copy() /// Rebuilds power networks from scratch. Called by world initialization and elevators. /datum/controller/subsystem/machines/proc/makepowernets() @@ -117,7 +162,6 @@ SUBSYSTEM_DEF(machines) /datum/controller/subsystem/machines/proc/setup_atmos_machinery(list/machines) - set background = TRUE var/list/atmos_machines = list() for (var/obj/machinery/atmospherics/machine in machines) atmos_machines += machine @@ -179,8 +223,15 @@ SUBSYSTEM_DEF(machines) machine.is_processing = null processing -= machine continue - if (machine.ProcessAll(wait) == PROCESS_KILL) - processing -= machine + + if(machine.processing_flags & MACHINERY_PROCESS_COMPONENTS) + for(var/obj/item/stock_parts/part as anything in machine.processing_parts) + if(part.machine_process(machine) == PROCESS_KILL) + part.stop_processing() + + if((machine.processing_flags & MACHINERY_PROCESS_SELF) && machine.Process(wait) == PROCESS_KILL) + STOP_PROCESSING_MACHINE(machine, MACHINERY_PROCESS_SELF) + if (no_mc_tick) CHECK_TICK else if (MC_TICK_CHECK) diff --git a/code/controllers/subsystems/mapping.dm b/code/controllers/subsystems/mapping.dm index c0569570ea6cb..bbe5086a092c7 100644 --- a/code/controllers/subsystems/mapping.dm +++ b/code/controllers/subsystems/mapping.dm @@ -21,13 +21,14 @@ SUBSYSTEM_DEF(mapping) for(var/atype in subtypesof(/singleton/submap_archetype)) submap_archetypes[atype] = new atype - /datum/controller/subsystem/mapping/Recover() flags |= SS_NO_INIT map_templates = SSmapping.map_templates space_ruins_templates = SSmapping.space_ruins_templates exoplanet_ruins_templates = SSmapping.exoplanet_ruins_templates away_sites_templates = SSmapping.away_sites_templates + submaps = SSmapping.submaps + submap_archetypes = SSmapping.submap_archetypes /datum/controller/subsystem/mapping/proc/preloadTemplates(path = "maps/templates/") //see master controller setup var/list/filelist = flist(path) @@ -47,7 +48,7 @@ SUBSYSTEM_DEF(mapping) var/list/banned_maps = list() + banned_exoplanet_dmms + banned_space_dmms + banned_away_site_dmms - for(var/item in sortList(subtypesof(/datum/map_template), /proc/cmp_ruincost_priority)) + for(var/item in sortList(subtypesof(/datum/map_template), GLOBAL_PROC_REF(cmp_ruincost_priority))) var/datum/map_template/map_template_type = item // screen out the abstract subtypes if(!initial(map_template_type.id)) @@ -74,6 +75,7 @@ SUBSYSTEM_DEF(mapping) away_sites_templates[MT.name] = MT /proc/generateMapList(filename) + RETURN_TYPE(/list) var/list/potentialMaps = list() var/list/Lines = world.file2list(filename) if(!length(Lines)) @@ -81,7 +83,7 @@ SUBSYSTEM_DEF(mapping) for (var/t in Lines) if (!t) continue - t = trim(t) + t = trimtext(t) if (length(t) == 0) continue else if (copytext(t, 1, 2) == "#") diff --git a/code/controllers/subsystems/misc.dm b/code/controllers/subsystems/misc.dm index 80a726262baaf..0c81cd1117560 100644 --- a/code/controllers/subsystems/misc.dm +++ b/code/controllers/subsystems/misc.dm @@ -1,7 +1,6 @@ SUBSYSTEM_DEF(misc) name = "Misc Updates" wait = 30 SECONDS - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/static/list/queue = list() var/static/stage = STAGE_TRADERS var/static/cost_traders = 0 diff --git a/code/controllers/subsystems/misc_slow.dm b/code/controllers/subsystems/misc_slow.dm index b80cc69d79496..f148f52bc7fad 100644 --- a/code/controllers/subsystems/misc_slow.dm +++ b/code/controllers/subsystems/misc_slow.dm @@ -1,7 +1,7 @@ SUBSYSTEM_DEF(misc_slow) name = "Misc Updates (Slow)" flags = SS_NO_INIT - runlevels = RUNLEVEL_LOBBY | RUNLEVEL_GAME | RUNLEVEL_POSTGAME + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_GAME wait = 5 MINUTES /// The number of times dbcon can fail in a row before being considered dead diff --git a/code/controllers/subsystems/mobs.dm b/code/controllers/subsystems/mobs.dm index 50083d78fd274..2f721a00a25e2 100644 --- a/code/controllers/subsystems/mobs.dm +++ b/code/controllers/subsystems/mobs.dm @@ -1,9 +1,12 @@ SUBSYSTEM_DEF(mobs) name = "Mobs" - priority = SS_PRIORITY_MOB + priority = FIRE_PRIORITY_MOB flags = SS_NO_INIT | SS_KEEP_TIMING - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME wait = 2 SECONDS + /// List of all mobs currently present in world + var/static/list/mob/all_mobs + /// List of all mobs currently present in world by type + var/static/list/mob/mobs_by_type var/static/list/mob/mob_list = list() var/static/list/mob/queue = list() @@ -39,6 +42,44 @@ SUBSYSTEM_DEF(mobs) return queue.Cut() +/datum/controller/subsystem/mobs/proc/register_mob(mob/mob_to_register) + if(!istype(mob_to_register)) + CRASH("Invalid mob being registered: [mob_to_register]") + + LAZYADD(all_mobs, mob_to_register) + LAZYADDASSOCLIST(mobs_by_type, mob_to_register.type, mob_to_register) + +/datum/controller/subsystem/mobs/proc/unregister_mob(mob/mob_to_unregister) + if(!istype(mob_to_unregister)) + CRASH("Invalid mob being unregistered: [mob_to_unregister]") + + LAZYREMOVE(all_mobs, mob_to_unregister) + LAZYREMOVEASSOC(mobs_by_type, mob_to_unregister.type, mob_to_unregister) + +/datum/controller/subsystem/mobs/proc/get_all_mobs() + return all_mobs.Copy() + +/datum/controller/subsystem/mobs/proc/get_mobs_of_type(mob/type) + if(istype(type)) + var/mob/passed_mob = type + type = passed_mob.type + + if(!ispath(type)) + stack_trace("Non-mob type passed in `/datum/controller/subsystem/mobs/proc/get_mobs_of_type`") + return list() + + if(type == /mob) + return get_all_mobs() + + var/list/desired_mobs = list() + for(var/mob/mob_type as anything in typesof(type)) + var/list/mobs_of_type = mobs_by_type[mob_type] + if(!length(mobs_of_type)) + continue + + desired_mobs += mobs_of_type + + return desired_mobs #define START_PROCESSING_MOB(MOB) \ if (MOB.is_processing) {\ @@ -56,12 +97,8 @@ else {\ if(MOB.is_processing == SSmobs) {\ MOB.is_processing = null;\ SSmobs.mob_list -= MOB;\ + SSmobs.queue -= MOB;\ }\ else if (MOB.is_processing) {\ crash_with("Failed to stop processing mob. Being processed by [MOB.is_processing] instead.")\ } - - -/mob/dview/Initialize() - . = ..() - STOP_PROCESSING_MOB(src) diff --git a/code/controllers/subsystems/overlays.dm b/code/controllers/subsystems/overlays.dm new file mode 100644 index 0000000000000..baf3141f9a0b2 --- /dev/null +++ b/code/controllers/subsystems/overlays.dm @@ -0,0 +1,331 @@ +/// SSoverlays. Target the normal overlay cache. +var/global/const/ATOM_ICON_CACHE_NORMAL = FLAG(0) + +/// SSoverlays. Target the protected overlay cache. +var/global/const/ATOM_ICON_CACHE_PROTECTED = FLAG(1) + +/// SSoverlays. Target both normal and protected overlay caches. +var/global/const/ATOM_ICON_CACHE_ALL = (ATOM_ICON_CACHE_NORMAL | ATOM_ICON_CACHE_PROTECTED) + + +SUBSYSTEM_DEF(overlays) + name = "Overlays" + flags = SS_TICKER + wait = 1 + priority = FIRE_PRIORITY_OVERLAYS + init_order = SS_INIT_OVERLAYS + /// The queue of atoms that need under/overlay updates. + VAR_PRIVATE/static/list/atom/queue = list() + /// A list([icon] = list([state] = [appearance], ...), ...) cache of appearances. + VAR_PRIVATE/static/list/state_cache = list() + /// A list([icon] = [appearance], ...) cache of appearances. + VAR_PRIVATE/static/list/icon_cache = list() + /// The number of appearances currently cached. + VAR_PRIVATE/static/cache_size = 0 + + +/datum/controller/subsystem/overlays/Recover() + LIST_RESIZE(queue, 0) + LIST_RESIZE(state_cache, 0) + LIST_RESIZE(icon_cache, 0) + cache_size = 0 + for(var/atom/atom as anything in world) + if(atom.atom_flags & ATOM_AWAITING_OVERLAY_UPDATE) + SSoverlays.queue += atom + + CHECK_TICK + + +/datum/controller/subsystem/overlays/Initialize(start_uptime) + flush_queue() + + +/datum/controller/subsystem/overlays/UpdateStat(time) + if (PreventUpdateStat(time)) + return ..() + ..({"Queued Atoms: [length(queue)], Cache Size: [cache_size]"}) + + +/datum/controller/subsystem/overlays/fire(resumed) + var/queue_position = 1 + while(length(queue) >= queue_position) + var/atom/atom_to_update = queue[queue_position] + if(!QDELETED(atom_to_update) && atom_to_update.atom_flags & ATOM_AWAITING_OVERLAY_UPDATE) + atom_to_update.UpdateOverlays() + + queue_position++ + if(MC_TICK_CHECK) + break + + queue.Cut(1, queue_position) + +/datum/controller/subsystem/overlays/proc/flush_queue() + var/queue_position = 1 + while(length(queue) >= queue_position) + process_atom_overlays_update(queue[queue_position]) + queue_position++ + CHECK_TICK + + LIST_RESIZE(queue, 0) + +/datum/controller/subsystem/overlays/proc/process_atom_overlays_update(atom/atom_to_update) + if(!QDELETED(atom_to_update) && atom_to_update.atom_flags & ATOM_AWAITING_OVERLAY_UPDATE) + atom_to_update.UpdateOverlays() + + +/datum/controller/subsystem/overlays/proc/GetStateAppearance(icon, state) + var/list/state_to_appearance = state_cache[icon] + if(!state_to_appearance) + state_to_appearance = list() + state_cache[icon] = state_to_appearance + + var/state_appearance = state_to_appearance[state] + if(!state_appearance) + var/image/state_image = image(icon, null, state) + state_appearance = state_image.appearance + state_to_appearance[state] = state_appearance + cache_size++ + + return state_appearance + + +/datum/controller/subsystem/overlays/proc/GetIconAppearance(icon) + var/icon_appearance = icon_cache[icon] + if (!icon_appearance) + var/image/icon_image = image(icon) + icon_appearance = icon_image.appearance + icon_cache[icon] = icon_appearance + cache_size++ + + return icon_appearance + + +/datum/controller/subsystem/overlays/proc/getAppearanceList(atom/subject, list/sources) + if (!sources) + return list() + + if (!islist(sources)) + sources = list(sources) + + var/list/result = list() + for (var/atom/source as anything in sources) + if(!source) + continue + + if(istext(source)) + result += GetStateAppearance(subject.icon, source) + + else if(isicon(source)) + result += GetIconAppearance(source) + + else + if(isatom(source) && source.atom_flags & ATOM_AWAITING_OVERLAY_UPDATE) + source.UpdateOverlays() + + if(!ispath(source)) + result += source.appearance + else + var/image/image = source + result += image.appearance + + return result + +/datum/controller/subsystem/overlays/proc/enque_atom_overlay_update(atom/atom_to_update) + if(!atom_to_update) + return + + if(atom_to_update.atom_flags & ATOM_AWAITING_OVERLAY_UPDATE) + return + + atom_to_update.atom_flags |= ATOM_AWAITING_OVERLAY_UPDATE + SSoverlays.queue += atom_to_update + + +/// Immediately runs an overlay update. +/atom/proc/ImmediateOverlayUpdate() + SHOULD_NOT_OVERRIDE(TRUE) + UpdateOverlays() + + +/** +* Shared behavior for CutOverlays & CutUnderlays. Do not use directly. +* null: nothing changed, do nothing +* FALSE: update should be queued +* TRUE: update should be queued, cache should be nulled +*/ +/atom/proc/CutCacheBehavior(sources, cache) + SHOULD_NOT_OVERRIDE(TRUE) + var/initial_length = length(cache) + if (!initial_length) + return + cache -= sources + var/after_length = length(cache) + if (!after_length) + return TRUE + if (initial_length > after_length) + return FALSE + + +/// Enqueues the atom for an overlay update if not already queued +/atom/proc/QueueOverlayUpdate() + SHOULD_NOT_OVERRIDE(TRUE) + SSoverlays.enque_atom_overlay_update(src) + +/// Builds the atom's overlay state from caches +/atom/proc/UpdateOverlays() + SHOULD_NOT_OVERRIDE(TRUE) + atom_flags &= ~ATOM_AWAITING_OVERLAY_UPDATE + if (QDELING(src)) + LIST_RESIZE(overlays, 0) + return + + if (length(atom_protected_overlay_cache)) + if (length(atom_overlay_cache)) + overlays = atom_protected_overlay_cache + atom_overlay_cache + else + overlays = atom_protected_overlay_cache + else if (length(atom_overlay_cache)) + overlays = atom_overlay_cache + else + LIST_RESIZE(overlays, 0) + + +/// Clears the atom's overlay cache(s) and queues an update if needed. Use CLEAR_TARGET_* flags. +/atom/proc/ClearOverlays(cache_target = ATOM_ICON_CACHE_NORMAL) + SHOULD_NOT_OVERRIDE(TRUE) + if (cache_target & ATOM_ICON_CACHE_PROTECTED) + if (!atom_protected_overlay_cache) + return + LAZYCLEARLIST(atom_protected_overlay_cache) + QueueOverlayUpdate() + if (cache_target & ATOM_ICON_CACHE_NORMAL) + if (!atom_overlay_cache) + return + LAZYCLEARLIST(atom_overlay_cache) + QueueOverlayUpdate() + + +/** + * Adds specific overlay(s) to the atom. + * It is designed so any of the types allowed to be added to /atom/overlays can be added here too. More details below. + * + * @param sources The overlay(s) to add. These may be + * - A string: In which case it is treated as an icon_state of the atom's icon. + * - An icon: It is treated as an icon. + * - An atom: Its own overlays are compiled and then it's appearance is added. (Meaning its current apperance is frozen). + * - An image: Image's apperance is added (i.e. subsequently editing the image will not edit the overlay) + * - A type path: Added to overlays as is. Does whatever it is BYOND does when you add paths to overlays. + * - Or a list containing any of the above. + * @param cache_target If ATOM_ICON_CACHE_PROTECTED, add to the protected cache instead of normal. + */ +/atom/proc/AddOverlays(sources, cache_target = ATOM_ICON_CACHE_NORMAL) + SHOULD_NOT_OVERRIDE(TRUE) + if (!sources) + return + sources = SSoverlays.getAppearanceList(src, sources) + if (!length(sources)) + return + if (cache_target & ATOM_ICON_CACHE_PROTECTED) + if (atom_protected_overlay_cache) + atom_protected_overlay_cache += sources + else + atom_protected_overlay_cache = sources + else if (atom_overlay_cache) + atom_overlay_cache += sources + else + atom_overlay_cache = sources + QueueOverlayUpdate() + + +/** + * Removes specific overlay(s) from the atom's normal or protected overlay cache and queue an update. + * + * @param overlays The overlays to removed. See AddOverlays for legal source types. + * @param cache_target A mask of ICON_CACHE_TARGET_*. + */ +/atom/proc/CutOverlays(sources, cache_target = ATOM_ICON_CACHE_NORMAL) + SHOULD_NOT_OVERRIDE(TRUE) + if (!sources) + return + + sources = SSoverlays.getAppearanceList(src, sources) + if (!length(sources)) + return + + var/update + if (cache_target & ATOM_ICON_CACHE_PROTECTED) + var/outcome = CutCacheBehavior(sources, atom_protected_overlay_cache) + if (!isnull(outcome)) + update = TRUE + if (outcome == TRUE) + atom_protected_overlay_cache = null + + if (cache_target & ATOM_ICON_CACHE_NORMAL) + var/outcome = CutCacheBehavior(sources, atom_overlay_cache) + if (!isnull(outcome)) + update = TRUE + if (outcome == TRUE) + atom_overlay_cache = null + + if (update) + QueueOverlayUpdate() + + +/// AddOverlays with ClearOverlays first. See AddOverlays for behavior. +/atom/proc/SetOverlays(sources, cache_target = ATOM_ICON_CACHE_NORMAL) + SHOULD_NOT_OVERRIDE(TRUE) + ClearOverlays(cache_target) + AddOverlays(sources, cache_target) + + +/** + * Copy the overlays from another atom. + * + * @param other The atom to copy overlays from. + * @param clear If TRUE, clear before adding other's overlays. + * @param cache_target A mask of ICON_CACHE_TARGET_* indicating what to copy. + */ +/atom/proc/CopyOverlays(atom/other, clear, cache_target = ATOM_ICON_CACHE_NORMAL) + SHOULD_NOT_OVERRIDE(TRUE) + if (clear) + ClearOverlays(cache_target) + if (!istype(other)) + return + if (cache_target & ATOM_ICON_CACHE_PROTECTED) + AddOverlays(other.atom_protected_overlay_cache, ATOM_ICON_CACHE_PROTECTED) + if (cache_target & ATOM_ICON_CACHE_NORMAL) + AddOverlays(other.atom_overlay_cache, ATOM_ICON_CACHE_NORMAL) + + +// Skin-deep API parity for images. +// Reference for permitted types. + +/// Adds sources to the image's overlays. +/image/proc/AddOverlays(sources) + SHOULD_NOT_OVERRIDE(TRUE) + overlays += sources + + +/// Removes sources from the image's overlays. +/image/proc/CutOverlays(sources) + SHOULD_NOT_OVERRIDE(TRUE) + overlays -= sources + + +/// Removes all of the image's overlays. +/image/proc/ClearOverlays() + SHOULD_NOT_OVERRIDE(TRUE) + LIST_RESIZE(overlays, 0) + + +/// Copies the overlays from the atom other, clearing first if set, and using the caches indicated. +/image/proc/CopyOverlays(atom/other, clear, cache_target = ATOM_ICON_CACHE_ALL) + SHOULD_NOT_OVERRIDE(TRUE) + if (clear) + LIST_RESIZE(overlays, 0) + if (!istype(other)) + return + if (cache_target & ATOM_ICON_CACHE_PROTECTED) + overlays |= other.atom_protected_overlay_cache + if (cache_target & ATOM_ICON_CACHE_NORMAL) + overlays |= other.atom_overlay_cache diff --git a/code/controllers/subsystems/ping.dm b/code/controllers/subsystems/ping.dm index ee9ec06eeccba..114143e6e47b9 100644 --- a/code/controllers/subsystems/ping.dm +++ b/code/controllers/subsystems/ping.dm @@ -1,27 +1,40 @@ +/*! + * Copyright (c) 2022 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + SUBSYSTEM_DEF(ping) name = "Ping" + priority = FIRE_PRIORITY_PING + init_order = SS_INIT_PING + wait = 4 SECONDS flags = SS_NO_INIT - runlevels = RUNLEVELS_ALL - wait = 30 SECONDS - var/static/list/datum/chatOutput/chats = list() - var/static/list/datum/chatOutput/queue = list() + runlevels = RUNLEVEL_INIT | RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME + var/list/currentrun = list() -/datum/controller/subsystem/ping/fire(resumed, no_mc_tick) - if (!resumed) - if (!length(chats)) - return - queue = chats.Copy() - var/cut_until = 1 - for (var/datum/chatOutput/chat as anything in chats) - ++cut_until - if (QDELETED(chat)) - continue - if (chat.loaded && !chat.broken) - chat.updatePing() - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - queue.Cut(1, cut_until) +/datum/controller/subsystem/ping/StartLoadingMap() + ..("P:[length(GLOB.clients)]") + +/datum/controller/subsystem/ping/fire(resumed = FALSE) + // Prepare the new batch of clients + if(!resumed) + src.currentrun = GLOB.clients.Copy() + + // De-reference the list for sanic speeds + var/list/currentrun = src.currentrun + + while(length(currentrun)) + var/client/client = currentrun[length(currentrun)] + LIST_DEC(currentrun) + + if(client?.tgui_panel?.is_ready()) + // Send a soft ping + client.tgui_panel.window.send_message("ping/soft", list( + // Slightly less than the subsystem timer (somewhat arbitrary) + // to prevent incoming pings from resetting the afk state + "afk" = client.is_afk(3.5 SECONDS), + )) + + if(MC_TICK_CHECK) return - queue.Cut() diff --git a/code/controllers/subsystems/plants.dm b/code/controllers/subsystems/plants.dm index e15ffbd158f25..b13bfe292cda9 100644 --- a/code/controllers/subsystems/plants.dm +++ b/code/controllers/subsystems/plants.dm @@ -1,7 +1,6 @@ SUBSYSTEM_DEF(plants) name = "Plants" - priority = SS_PRIORITY_PLANTS - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + priority = FIRE_PRIORITY_PLANTS flags = SS_BACKGROUND | SS_POST_FIRE_TIMING init_order = SS_INIT_PLANTS wait = 5 SECONDS @@ -74,7 +73,7 @@ SUBSYSTEM_DEF(plants) /datum/controller/subsystem/plants/Initialize(start_uptime) - for (var/state in icon_states('icons/obj/hydroponics_growing.dmi')) + for (var/state in ICON_STATES('icons/obj/flora/hydroponics_growing.dmi')) var/split = findtext_char(state, "-") if (!split) continue @@ -86,7 +85,7 @@ SUBSYSTEM_DEF(plants) if (!plant_sprites[plant] || plant_sprites[plant] < growth_level) plant_sprites[plant] = growth_level - for (var/state in icon_states('icons/obj/hydroponics_products.dmi')) + for (var/state in ICON_STATES('icons/obj/flora/hydroponics_products.dmi')) var/split = findtext_char(state, "-") if (!split) continue @@ -103,8 +102,9 @@ SUBSYSTEM_DEF(plants) var/list/gene_datums = GET_SINGLETON_SUBTYPE_MAP(/singleton/plantgene) var/list/used_masks = list() + var/list/plant_genes = shuffle(ALL_GENES) - for (var/tag in ALL_GENES) + for (var/tag in plant_genes) var/mask = uppertext(num2hex(rand(0, 0xFF))) while (mask in used_masks) mask = uppertext(num2hex(rand(0, 0xFF))) diff --git a/code/controllers/subsystems/presence.dm b/code/controllers/subsystems/presence.dm index 5077464c6b004..abe9b7199ee05 100644 --- a/code/controllers/subsystems/presence.dm +++ b/code/controllers/subsystems/presence.dm @@ -3,37 +3,37 @@ /// Builds a list of z-level populations to allow for easier pauses on processing when nobody is around to care SUBSYSTEM_DEF(presence) name = "Player Presence" - priority = SS_PRIORITY_PRESENCE - runlevels = RUNLEVEL_GAME + priority = FIRE_PRIORITY_PRESENCE wait = 2 SECONDS var/static/list/levels = list() var/static/list/queue = list() - var/static/list/build - + var/static/list/build = list() /datum/controller/subsystem/presence/Recover() queue.Cut() build.Cut() +/datum/controller/subsystem/presence/UpdateStat(text) + return ..("Queue: [length(queue)]") /datum/controller/subsystem/presence/fire(resume, no_mc_tick) - if (!resume) + if(!resume) queue = GLOB.player_list.Copy() build = list() - var/cut_until = 1 - for (var/mob/living/player as anything in GLOB.living_players) - ++cut_until - if (QDELETED(player) || player.stat == DEAD) - continue - ++build["[get_z(player)]"] - if (no_mc_tick) + + while(length(queue)) + var/mob/living/player_to_check = queue[length(queue)] + if(!QDELETED(player_to_check) && player_to_check.stat < DEAD) + build["[get_z(player_to_check)]"]++ + + LIST_DEC(queue) + + if(no_mc_tick) CHECK_TICK - else if (MC_TICK_CHECK) - queue.Cut(1, cut_until) + else if(MC_TICK_CHECK) return - levels = build - queue.Cut() + levels = build #ifndef UNIT_TEST diff --git a/code/controllers/subsystems/processing/beach.dm b/code/controllers/subsystems/processing/beach.dm new file mode 100644 index 0000000000000..e0bd25bf94333 --- /dev/null +++ b/code/controllers/subsystems/processing/beach.dm @@ -0,0 +1,6 @@ +/// TODO: Create component for playing ambience +/// And probably replace it with looping sound or create generic subsystem +/// Subsystem that process `/area/beach` +PROCESSING_SUBSYSTEM_DEF(beach) + name = "Beach" + wait = 6 SECONDS diff --git a/code/controllers/subsystems/processing/circuit.dm b/code/controllers/subsystems/processing/circuit.dm index eb074d4a51157..ed6222760f2ca 100644 --- a/code/controllers/subsystems/processing/circuit.dm +++ b/code/controllers/subsystems/processing/circuit.dm @@ -2,7 +2,7 @@ PROCESSING_SUBSYSTEM_DEF(circuit) name = "Circuit" - priority = SS_PRIORITY_CIRCUIT + priority = FIRE_PRIORITY_CIRCUIT init_order = SS_INIT_CIRCUIT flags = SS_BACKGROUND diff --git a/code/controllers/subsystems/processing/graphs.dm b/code/controllers/subsystems/processing/graphs.dm index 85e8c00fca6f5..f65eba6471e1b 100644 --- a/code/controllers/subsystems/processing/graphs.dm +++ b/code/controllers/subsystems/processing/graphs.dm @@ -1,3 +1,3 @@ PROCESSING_SUBSYSTEM_DEF(graphs_process) name = "Graphs (Process)" - priority = SS_PRIORITY_GRAPH + priority = FIRE_PRIORITY_GRAPH diff --git a/code/controllers/subsystems/processing/icon_updates.dm b/code/controllers/subsystems/processing/icon_updates.dm index c328b05ed02df..5ce611a23d7f2 100644 --- a/code/controllers/subsystems/processing/icon_updates.dm +++ b/code/controllers/subsystems/processing/icon_updates.dm @@ -1,42 +1,65 @@ -PROCESSING_SUBSYSTEM_DEF(icon_update) +SUBSYSTEM_DEF(icon_update) name = "Icon Updates" wait = 1 // ticks flags = SS_TICKER - priority = SS_PRIORITY_ICON_UPDATE + priority = FIRE_PRIORITY_ICON_UPDATE init_order = SS_INIT_ICON_UPDATE - var/list/queue = list() + VAR_PRIVATE/static/list/queue = list() -/datum/controller/subsystem/processing/icon_update/Initialize(start_uptime) - fire(FALSE, TRUE) +/datum/controller/subsystem/icon_update/Recover() + LIST_RESIZE(queue, 0) + queue = list() -/datum/controller/subsystem/processing/icon_update/fire(resumed = FALSE, no_mc_tick = FALSE) - var/list/curr = queue +/datum/controller/subsystem/icon_update/UpdateStat(time) + if (PreventUpdateStat(time)) + return ..() + ..("queue: [length(queue)]") - if (!length(curr)) - suspend() - return - while (length(curr)) - var/atom/A = curr[length(curr)] - var/list/argv = curr[A] - LIST_DEC(curr) +/datum/controller/subsystem/icon_update/Initialize(start_uptime) + flush_queue() + +/datum/controller/subsystem/icon_update/fire(resumed) + var/queue_position = 1 + while(length(queue) >= queue_position) + process_atom_icon_update(queue[queue_position]) + queue_position++ + if(MC_TICK_CHECK) + break + + queue.Cut(1, queue_position) + +/datum/controller/subsystem/icon_update/proc/flush_queue() + var/queue_position = 1 + while(length(queue) >= queue_position) + process_atom_icon_update(queue[queue_position]) + queue_position++ + CHECK_TICK - if (islist(argv)) - A.update_icon(arglist(argv)) - else - A.update_icon() + LIST_RESIZE(queue, 0) - if (no_mc_tick) - CHECK_TICK - else if (MC_TICK_CHECK) - return +/datum/controller/subsystem/icon_update/proc/process_atom_icon_update(atom/atom_to_update) + if(QDELETED(atom_to_update)) + return + + var/list/params = queue[atom_to_update] + if (islist(params)) + atom_to_update.update_icon(arglist(params)) + else + atom_to_update.update_icon() + +/datum/controller/subsystem/icon_update/proc/enque_atom_icon_update(atom/atom_to_update, arguments) + SSicon_update.queue[atom_to_update] = arguments /** * Adds the atom to the icon_update subsystem to be queued for icon updates. Use this if you're going to be pushing a * lot of icon updates at once. */ /atom/proc/queue_icon_update(...) - SSicon_update.queue[src] = length(args) ? args : TRUE - SSicon_update.wake() + SSicon_update.enque_atom_icon_update(src, length(args) ? args : TRUE) + +/hook/game_ready/proc/flush_icon_update_queue() + SSicon_update.flush_queue() + return TRUE diff --git a/code/controllers/subsystems/processing/nano.dm b/code/controllers/subsystems/processing/nano.dm index 0f6ebe49feb53..3b760d136903b 100644 --- a/code/controllers/subsystems/processing/nano.dm +++ b/code/controllers/subsystems/processing/nano.dm @@ -1,23 +1,23 @@ PROCESSING_SUBSYSTEM_DEF(nano) name = "NanoUI" - priority = SS_PRIORITY_NANO + priority = FIRE_PRIORITY_NANO wait = 2 SECONDS // a list of current open /nanoui UIs, grouped by src_object and ui_key var/list/open_uis = list() - /** - * Get an open /nanoui ui for the current user, src_object and ui_key and try to update it with data - * - * @param user /mob The mob who opened/owns the ui - * @param src_object /obj|/mob The obj or mob which the ui belongs to - * @param ui_key string A string key used for the ui - * @param ui /datum/nanoui An existing instance of the ui (can be null) - * @param data list The data to be passed to the ui, if it exists - * @param force_open boolean The ui is being forced to (re)open, so close ui if it exists (instead of updating) - * - * @return /nanoui Returns the found ui, for null if none exists - */ +/** + * Get an open /nanoui ui for the current user, src_object and ui_key and try to update it with data + * + * @param user /mob The mob who opened/owns the ui + * @param src_object /obj|/mob The obj or mob which the ui belongs to + * @param ui_key string A string key used for the ui + * @param ui /datum/nanoui An existing instance of the ui (can be null) + * @param data list The data to be passed to the ui, if it exists + * @param force_open boolean The ui is being forced to (re)open, so close ui if it exists (instead of updating) + * + * @return /nanoui Returns the found ui, for null if none exists + */ /datum/controller/subsystem/processing/nano/proc/try_update_ui(mob/user, src_object, ui_key, datum/nanoui/ui, data, force_open = 0) if (!ui) // no ui has been passed, so we'll search for one ui = get_open_ui(user, src_object, ui_key) @@ -27,15 +27,15 @@ PROCESSING_SUBSYSTEM_DEF(nano) force_open ? ui.reinitialise(new_initial_data=data) : ui.push_data(data) return ui - /** - * Get an open /nanoui ui for the current user, src_object and ui_key - * - * @param user /mob The mob who opened/owns the ui - * @param src_object /obj|/mob The obj or mob which the ui belongs to - * @param ui_key string A string key used for the ui - * - * @return /nanoui Returns the found ui, or null if none exists - */ +/** + * Get an open /nanoui ui for the current user, src_object and ui_key + * + * @param user /mob The mob who opened/owns the ui + * @param src_object /obj|/mob The obj or mob which the ui belongs to + * @param ui_key string A string key used for the ui + * + * @return /nanoui Returns the found ui, or null if none exists + */ /datum/controller/subsystem/processing/nano/proc/get_open_ui(mob/user, src_object, ui_key) var/src_object_key = "\ref[src_object]" if (!open_uis[src_object_key] || !open_uis[src_object_key][ui_key]) @@ -45,13 +45,13 @@ PROCESSING_SUBSYSTEM_DEF(nano) if (ui.user == user) return ui - /** - * Update all /nanoui uis attached to src_object - * - * @param src_object /obj|/mob The obj or mob which the uis are attached to - * - * @return int The number of uis updated - */ +/** + * Update all /nanoui uis attached to src_object + * + * @param src_object /obj|/mob The obj or mob which the uis are attached to + * + * @return int The number of uis updated + */ /datum/controller/subsystem/processing/nano/proc/update_uis(src_object) . = 0 var/src_object_key = "\ref[src_object]" @@ -66,13 +66,13 @@ PROCESSING_SUBSYSTEM_DEF(nano) else ui.close() - /** - * Close all /nanoui uis attached to src_object - * - * @param src_object /obj|/mob The obj or mob which the uis are attached to - * - * @return int The number of uis close - */ +/** + * Close all /nanoui uis attached to src_object + * + * @param src_object /obj|/mob The obj or mob which the uis are attached to + * + * @return int The number of uis close + */ /datum/controller/subsystem/processing/nano/proc/close_uis(src_object) . = 0 var/src_object_key = "\ref[src_object]" @@ -84,15 +84,15 @@ PROCESSING_SUBSYSTEM_DEF(nano) ui.close() // If it's missing src_object or user, we want to close it even more. .++ - /** - * Update /nanoui uis belonging to user - * - * @param user /mob The mob who owns the uis - * @param src_object /obj|/mob If src_object is provided, only update uis which are attached to src_object (optional) - * @param ui_key string If ui_key is provided, only update uis with a matching ui_key (optional) - * - * @return int The number of uis updated - */ +/** + * Update /nanoui uis belonging to user + * + * @param user /mob The mob who owns the uis + * @param src_object /obj|/mob If src_object is provided, only update uis which are attached to src_object (optional) + * @param ui_key string If ui_key is provided, only update uis with a matching ui_key (optional) + * + * @return int The number of uis updated + */ /datum/controller/subsystem/processing/nano/proc/update_user_uis(mob/user, src_object, ui_key) . = 0 if (!length(user.open_uis)) @@ -103,15 +103,15 @@ PROCESSING_SUBSYSTEM_DEF(nano) ui.try_update(1) .++ - /** - * Close /nanoui uis belonging to user - * - * @param user /mob The mob who owns the uis - * @param src_object /obj|/mob If src_object is provided, only close uis which are attached to src_object (optional) - * @param ui_key string If ui_key is provided, only close uis with a matching ui_key (optional) - * - * @return int The number of uis closed - */ +/** + * Close /nanoui uis belonging to user + * + * @param user /mob The mob who owns the uis + * @param src_object /obj|/mob If src_object is provided, only close uis which are attached to src_object (optional) + * @param ui_key string If ui_key is provided, only close uis with a matching ui_key (optional) + * + * @return int The number of uis closed + */ /datum/controller/subsystem/processing/nano/proc/close_user_uis(mob/user, src_object, ui_key) . = 0 if (!length(user.open_uis)) @@ -122,14 +122,14 @@ PROCESSING_SUBSYSTEM_DEF(nano) ui.close() .++ - /** - * Add a /nanoui ui to the list of open uis - * This is called by the /nanoui open() proc - * - * @param ui /nanoui The ui to add - * - * @return nothing - */ +/** + * Add a /nanoui ui to the list of open uis + * This is called by the /nanoui open() proc + * + * @param ui /nanoui The ui to add + * + * @return nothing + */ /datum/controller/subsystem/processing/nano/proc/ui_opened(datum/nanoui/ui) var/src_object_key = "\ref[ui.src_object]" LAZYINITLIST(open_uis[src_object_key]) @@ -137,14 +137,14 @@ PROCESSING_SUBSYSTEM_DEF(nano) LAZYDISTINCTADD(ui.user.open_uis, ui) START_PROCESSING(SSnano, ui) - /** - * Remove a /nanoui ui from the list of open uis - * This is called by the /nanoui close() proc - * - * @param ui /nanoui The ui to remove - * - * @return int 0 if no ui was removed, 1 if removed successfully - */ +/** + * Remove a /nanoui ui from the list of open uis + * This is called by the /nanoui close() proc + * + * @param ui /nanoui The ui to remove + * + * @return int 0 if no ui was removed, 1 if removed successfully + */ /datum/controller/subsystem/processing/nano/proc/ui_closed(datum/nanoui/ui) var/src_object_key = "\ref[ui.src_object]" if (!open_uis[src_object_key] || !open_uis[src_object_key][ui.ui_key]) @@ -160,26 +160,26 @@ PROCESSING_SUBSYSTEM_DEF(nano) open_uis -= src_object_key return 1 - /** - * This is called on user logout - * Closes/clears all uis attached to the user's /mob - * - * @param user /mob The user's mob - * - * @return nothing - */ +/** + * This is called on user logout + * Closes/clears all uis attached to the user's /mob + * + * @param user /mob The user's mob + * + * @return nothing + */ /datum/controller/subsystem/processing/nano/proc/user_logout(mob/user) return close_user_uis(user) - /** - * This is called when a player transfers from one mob to another - * Transfers all open UIs to the new mob - * - * @param oldMob /mob The user's old mob - * @param newMob /mob The user's new mob - * - * @return nothing - */ +/** + * This is called when a player transfers from one mob to another + * Transfers all open UIs to the new mob + * + * @param oldMob /mob The user's old mob + * @param newMob /mob The user's new mob + * + * @return nothing + */ /datum/controller/subsystem/processing/nano/proc/user_transferred(mob/oldMob, mob/newMob) if (!oldMob || !oldMob.open_uis) return 0 // has no open uis diff --git a/code/controllers/subsystems/processing/obj.dm b/code/controllers/subsystems/processing/obj.dm index e0b54fc0c8b53..c6576fadde7c4 100644 --- a/code/controllers/subsystems/processing/obj.dm +++ b/code/controllers/subsystems/processing/obj.dm @@ -1,3 +1,2 @@ PROCESSING_SUBSYSTEM_DEF(obj) name = "Objs" - priority = SS_PRIORITY_OBJECTS diff --git a/code/controllers/subsystems/processing/overmap.dm b/code/controllers/subsystems/processing/overmap.dm new file mode 100644 index 0000000000000..7bccf77dba6f3 --- /dev/null +++ b/code/controllers/subsystems/processing/overmap.dm @@ -0,0 +1,7 @@ +PROCESSING_SUBSYSTEM_DEF(overmap) + +/datum/controller/subsystem/processing/overmap + name = "Overmap" + priority = FIRE_PRIORITY_OVERMAP + flags = SS_TICKER|SS_NO_INIT + wait = 7 diff --git a/code/controllers/subsystems/processing/processing.dm b/code/controllers/subsystems/processing/processing.dm index f78dcd6f454d1..0a3847b2f2307 100644 --- a/code/controllers/subsystems/processing/processing.dm +++ b/code/controllers/subsystems/processing/processing.dm @@ -2,13 +2,13 @@ SUBSYSTEM_DEF(processing) name = "Processing" - priority = SS_PRIORITY_PROCESSING + priority = FIRE_PRIORITY_PROCESSING flags = SS_BACKGROUND|SS_POST_FIRE_TIMING|SS_NO_INIT wait = 1 SECOND var/list/processing = list() var/list/current_run = list() - var/process_proc = /datum/proc/Process + var/process_proc = TYPE_PROC_REF(/datum, Process) var/debug_last_thing var/debug_original_process_proc // initial() does not work with procs @@ -47,7 +47,7 @@ SUBSYSTEM_DEF(processing) debug_original_process_proc = null else debug_original_process_proc = process_proc - process_proc = /datum/proc/DebugSubsystemProcess + process_proc = TYPE_PROC_REF(/datum, DebugSubsystemProcess) to_chat(usr, "[name] - Debug mode [debug_original_process_proc ? "en" : "dis"]abled") diff --git a/code/controllers/subsystems/processing/psi.dm b/code/controllers/subsystems/processing/psi.dm index 94396a6fbd5bd..88c8fadd79167 100644 --- a/code/controllers/subsystems/processing/psi.dm +++ b/code/controllers/subsystems/processing/psi.dm @@ -2,7 +2,7 @@ GLOBAL_LIST_INIT(psychic_ranks_to_strings, list("Latent", "Operant", "Masterclas PROCESSING_SUBSYSTEM_DEF(psi) name = "Psychics" - priority = SS_PRIORITY_PSYCHICS + priority = FIRE_PRIORITY_PSYCHICS flags = SS_POST_FIRE_TIMING | SS_BACKGROUND var/list/faculties_by_id = list() diff --git a/code/controllers/subsystems/processing/temperature.dm b/code/controllers/subsystems/processing/temperature.dm index 377c828366020..dfd2325ca518f 100644 --- a/code/controllers/subsystems/processing/temperature.dm +++ b/code/controllers/subsystems/processing/temperature.dm @@ -1,5 +1,5 @@ PROCESSING_SUBSYSTEM_DEF(temperature) name = "Temperature" - priority = SS_PRIORITY_TEMPERATURE + priority = FIRE_PRIORITY_TEMPERATURE wait = 5 SECONDS - process_proc = /atom/proc/ProcessAtomTemperature + process_proc = TYPE_PROC_REF(/atom, ProcessAtomTemperature) diff --git a/code/controllers/subsystems/processing/turf.dm b/code/controllers/subsystems/processing/turf.dm index 2988f40311c5e..ce8a23321c9b4 100644 --- a/code/controllers/subsystems/processing/turf.dm +++ b/code/controllers/subsystems/processing/turf.dm @@ -2,4 +2,4 @@ PROCESSING_SUBSYSTEM_DEF(turf) name = "Turfs" - priority = SS_PRIORITY_TURF \ No newline at end of file + priority = FIRE_PRIORITY_TURF diff --git a/code/controllers/subsystems/processing/vines.dm b/code/controllers/subsystems/processing/vines.dm index 56e24d30f2778..14d850c96239f 100644 --- a/code/controllers/subsystems/processing/vines.dm +++ b/code/controllers/subsystems/processing/vines.dm @@ -1,13 +1,5 @@ // This does NOT process the type of plant that's in a tray. It only does the spreading vines like kudzu. PROCESSING_SUBSYSTEM_DEF(vines) name = "Vines" - priority = SS_PRIORITY_VINES - runlevels = RUNLEVEL_GAME|RUNLEVEL_POSTGAME - wait = 80 - - process_proc = /obj/effect/vine/Process - - var/list/vine_list - -/datum/controller/subsystem/processing/vines/PreInit() - vine_list = processing // Simply setups a more recognizable var name than "processing" + priority = FIRE_PRIORITY_VINES + wait = 8 SECONDS diff --git a/code/controllers/subsystems/radiation.dm b/code/controllers/subsystems/radiation.dm index cb039c29dcdf1..97829ca6391e0 100644 --- a/code/controllers/subsystems/radiation.dm +++ b/code/controllers/subsystems/radiation.dm @@ -1,7 +1,7 @@ SUBSYSTEM_DEF(radiation) name = "Radiation" wait = 2 SECONDS - priority = SS_PRIORITY_RADIATION + priority = FIRE_PRIORITY_RADIATION flags = SS_NO_INIT var/list/sources = list() // all radiation source datums diff --git a/code/controllers/subsystems/roundend.dm b/code/controllers/subsystems/roundend.dm new file mode 100644 index 0000000000000..a692ff318c11b --- /dev/null +++ b/code/controllers/subsystems/roundend.dm @@ -0,0 +1,68 @@ +SUBSYSTEM_DEF(roundend) + name = "Round End" + wait = 30 SECONDS + flags = SS_BACKGROUND + runlevels = RUNLEVEL_GAME + + /// The time in minutes when the round will be ended. + var/static/max_length + + /// The next time in minutes to check whether a round is empty. + var/static/empty_check + + /// The next time in minutes to start a round end vote. + var/static/vote_check + + /// The cached duration to the next vote. + var/static/vote_cache + + +/datum/controller/subsystem/roundend/UpdateStat(time) + if (PreventUpdateStat(time)) + return ..() + if (GAME_STATE < RUNLEVEL_POSTGAME) + var/round_time = round_duration_in_ticks / 600 + var/show_max + if (max_length) + show_max = max(round(max_length - round_time, 0.1), 0) + var/show_empty + if (empty_check) + show_empty = max(round(empty_check - round_time, 0.1), 0) + var/show_vote + if (vote_check) + show_vote = max(round(vote_check - round_time, 0.1), 0) + ..({"\n\ + Max Time: [isnull(show_max) ? "Off" : "[show_max]m"]\n\ + Empty End: [isnull(show_empty) ? "Off" : "[show_empty]m"]\n\ + Next Vote: [isnull(show_vote) ? "Off" : "[show_vote]m"]\ + "}) + else + ..("Game Finished") + + +/datum/controller/subsystem/roundend/Initialize(start_uptime) + max_length = config.maximum_round_length + empty_check = config.empty_round_check_interval + vote_check = config.vote_autotransfer_initial + + +/datum/controller/subsystem/roundend/fire(resumed, no_mc_tick) + var/time = round_duration_in_ticks / 600 + if (max_length && time > max_length) + if (evacuation_controller.is_idle()) + init_autotransfer() + return + if (empty_check && time > empty_check) + empty_check += config.empty_round_check_interval + if (!length(GLOB.living_players)) + SSticker.forced_end = TRUE + return + if (vote_check) + vote_cache = round(max(vote_check - time, 0), 0.1) + if (vote_cache > 0) + return + SSvote.initiate_vote(/datum/vote/transfer, null, TRUE) + if (config.vote_autotransfer_interval) + vote_check += config.vote_autotransfer_interval + else + vote_check = 0 diff --git a/code/controllers/subsystems/shuttle.dm b/code/controllers/subsystems/shuttle.dm index 9bc61f97332c3..a372783d5c0da 100644 --- a/code/controllers/subsystems/shuttle.dm +++ b/code/controllers/subsystems/shuttle.dm @@ -1,7 +1,7 @@ SUBSYSTEM_DEF(shuttle) name = "Shuttle" wait = 2 SECONDS - priority = SS_PRIORITY_SHUTTLE + priority = FIRE_PRIORITY_SHUTTLE init_order = SS_INIT_SHUTTLE //Should be initialized after all maploading is over and atoms are initialized, to ensure that landmarks have been initialized. var/overmap_halted = FALSE //Whether ships can move on the overmap; used for adminbus. @@ -66,18 +66,18 @@ SUBSYSTEM_DEF(shuttle) initialize_sector(sector) sectors_to_initialize = null -/datum/controller/subsystem/shuttle/proc/register_landmark(shuttle_landmark_tag, obj/effect/shuttle_landmark/shuttle_landmark) +/datum/controller/subsystem/shuttle/proc/register_landmark(shuttle_landmark_tag, obj/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 - var/obj/effect/overmap/visitable/O = landmarks_still_needed[shuttle_landmark_tag] + var/obj/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 + else if(istype(shuttle_landmark, /obj/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) @@ -86,7 +86,7 @@ SUBSYSTEM_DEF(shuttle) //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/shuttle/proc/initialize_sector(obj/effect/overmap/visitable/given_sector) +/datum/controller/subsystem/shuttle/proc/initialize_sector(obj/overmap/visitable/given_sector) 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) @@ -100,13 +100,13 @@ SUBSYSTEM_DEF(shuttle) var/landmarks_to_check = landmarks_awaiting_sector.Copy() for(var/thing in landmarks_to_check) - var/obj/effect/shuttle_landmark/automatic/landmark = thing + var/obj/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 -/datum/controller/subsystem/shuttle/proc/try_add_landmark_tag(landmark_tag, obj/effect/overmap/visitable/given_sector) - var/obj/effect/shuttle_landmark/landmark = get_landmark(landmark_tag) +/datum/controller/subsystem/shuttle/proc/try_add_landmark_tag(landmark_tag, obj/overmap/visitable/given_sector) + var/obj/shuttle_landmark/landmark = get_landmark(landmark_tag) if(!landmark) return @@ -140,17 +140,17 @@ SUBSYSTEM_DEF(shuttle) return overmap_halted = !overmap_halted for(var/ship in ships) - var/obj/effect/overmap/visitable/ship/ship_effect = ship + var/obj/overmap/visitable/ship/ship_effect = ship overmap_halted ? ship_effect.halt() : ship_effect.unhalt() /datum/controller/subsystem/shuttle/proc/ship_by_name(name) - for (var/obj/effect/overmap/visitable/ship/ship in ships) + for (var/obj/overmap/visitable/ship/ship in ships) if (ship.name == name) return ship return null /datum/controller/subsystem/shuttle/proc/ship_by_type(type) - for (var/obj/effect/overmap/visitable/ship/ship in ships) + for (var/obj/overmap/visitable/ship/ship in ships) if (ship.type == type) return ship return null diff --git a/code/controllers/subsystems/skybox.dm b/code/controllers/subsystems/skybox.dm index 905eba2b54ff4..28f3bda99c865 100644 --- a/code/controllers/subsystems/skybox.dm +++ b/code/controllers/subsystems/skybox.dm @@ -18,9 +18,6 @@ SUBSYSTEM_DEF(skybox) /// whether the current skybox collected an extra appearance from an overmap feature var/static/use_overmap_details = TRUE - /// The skybox icon file to use for stars. Expects to be 736x736 - var/static/star_path = 'icons/skybox/skybox.dmi' - /// The skybox icon state to use for stars var/static/star_state = "stars" @@ -40,10 +37,13 @@ SUBSYSTEM_DEF(skybox) dust.plane = DUST_PLANE dust.alpha = 80 dust.blend_mode = BLEND_ADD + var/mutable_appearance/space = new /mutable_appearance(/turf/space) + space.plane = SPACE_PLANE space.icon_state = "white" - space.overlays += dust + space.AddOverlays(dust) space_appearance_cache[index] = space.appearance + background_color = RANDOM_RGB @@ -51,7 +51,7 @@ SUBSYSTEM_DEF(skybox) if (!skybox_cache["[z]"]) skybox_cache["[z]"] = generate_skybox(z) if (GLOB.using_map.use_overmap) - var/obj/effect/overmap/visitable/O = map_sectors["[z]"] + var/obj/overmap/visitable/O = map_sectors["[z]"] if (istype(O)) for (var/zlevel in O.map_z) skybox_cache["[zlevel]"] = skybox_cache["[z]"] @@ -63,21 +63,21 @@ SUBSYSTEM_DEF(skybox) var/image/base = overlay_image(skybox_icon, background_icon, background_color) if (use_stars) var/image/stars = overlay_image(skybox_icon, star_state, flags = RESET_COLOR) - base.overlays += stars - res.overlays += base + base.AddOverlays(stars) + res.AddOverlays(base) if (GLOB.using_map.use_overmap && use_overmap_details) - var/obj/effect/overmap/visitable/O = map_sectors["[z]"] + var/obj/overmap/visitable/O = map_sectors["[z]"] if (istype(O)) var/image/overmap = image(skybox_icon) - overmap.overlays += O.generate_skybox() - for (var/obj/effect/overmap/visitable/other in O.loc) + overmap.AddOverlays(O.generate_skybox()) + for (var/obj/overmap/visitable/other in O.loc) if (other != O) - overmap.overlays += other.get_skybox_representation() + overmap.AddOverlays(other.get_skybox_representation()) overmap.appearance_flags |= RESET_COLOR - res.overlays += overmap + res.AddOverlays(overmap) for (var/datum/event/event as anything in SSevent.active_events) if(event.has_skybox_image && event.isRunning && (z in event.affecting_z)) - res.overlays += event.get_skybox_image() + res.AddOverlays(event.get_skybox_image()) return res diff --git a/code/controllers/subsystems/spacedrift.dm b/code/controllers/subsystems/spacedrift.dm new file mode 100644 index 0000000000000..9f4500c6f19ab --- /dev/null +++ b/code/controllers/subsystems/spacedrift.dm @@ -0,0 +1,62 @@ +//ported from TG 30/03/2020 +SUBSYSTEM_DEF(spacedrift) + name = "Space Drift" + priority = FIRE_PRIORITY_SPACEDRIFT + wait = 5 + flags = SS_NO_INIT|SS_KEEP_TIMING + + var/list/currentrun = list() + var/list/processing = list() + +/datum/controller/subsystem/spacedrift/UpdateStat(time) + if (PreventUpdateStat(time)) + return ..() + ..("P:[length(processing)]") + + +/datum/controller/subsystem/spacedrift/fire(resumed = 0) + if (!resumed) + src.currentrun = processing.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + + while (length(currentrun)) + var/atom/movable/AM = currentrun[length(currentrun)] + LIST_DEC(currentrun) + if (!AM) + processing -= AM + if (MC_TICK_CHECK) + return + continue + + if (AM.inertia_next_move > world.time) + if (MC_TICK_CHECK) + return + continue + + if (!AM.loc || AM.loc != AM.inertia_last_loc || AM.Process_Spacemove(0)) + AM.inertia_dir = 0 + + AM.inertia_ignore = null + + if (!AM.inertia_dir) + AM.inertia_last_loc = null + processing -= AM + if (MC_TICK_CHECK) + return + continue + + var/old_dir = AM.dir + var/old_loc = AM.loc + AM.inertia_moving = TRUE + step(AM, AM.inertia_dir) + AM.inertia_moving = FALSE + AM.inertia_next_move = world.time + AM.inertia_move_delay + if (AM.loc == old_loc) + AM.inertia_dir = 0 + + AM.set_dir(old_dir) + AM.inertia_last_loc = AM.loc + if (MC_TICK_CHECK) + return diff --git a/code/controllers/subsystems/supply.dm b/code/controllers/subsystems/supply.dm index 0e8e2f14fc7e2..7ade4ca38bdd8 100644 --- a/code/controllers/subsystems/supply.dm +++ b/code/controllers/subsystems/supply.dm @@ -1,7 +1,7 @@ SUBSYSTEM_DEF(supply) name = "Supply" wait = 20 SECONDS - priority = SS_PRIORITY_SUPPLY + priority = FIRE_PRIORITY_SUPPLY //Initializes at default time flags = SS_NO_TICK_CHECK @@ -26,6 +26,7 @@ SUBSYSTEM_DEF(supply) "manifest" = "From exported manifests", "crate" = "From exported crates", "gep" = "From uploaded good explorer points", + "anomaly" = "From scanned and categorized anomalies", "total" = "Total" // If you're adding additional point sources, add it here in a new line. Don't forget to put a comma after the old last line. ) @@ -34,13 +35,13 @@ SUBSYSTEM_DEF(supply) //Build master supply list var/singleton/hierarchy/supply_pack/root = GET_SINGLETON(/singleton/hierarchy/supply_pack) - for(var/singleton/hierarchy/supply_pack/sp in root.children) + for (var/singleton/hierarchy/supply_pack/sp in root.children) if(sp.is_category()) for(var/singleton/hierarchy/supply_pack/spc in sp.get_descendents()) spc.setup() master_supply_list += spc - for(var/material/mat in SSmaterials.materials) + for (var/material/mat in SSmaterials.materials) if(mat.sale_price > 0) point_source_descriptions[mat.display_name] = "From exported [mat.display_name]" @@ -62,21 +63,23 @@ SUBSYSTEM_DEF(supply) point_sources[source] += amount point_sources["total"] += amount - //To stop things being sent to centcomm which should not be sent to centcomm. Recursively checks for these types. + //To stop things being sent to centcom which should not be sent to centcom. Recursively checks for these types. /datum/controller/subsystem/supply/proc/forbidden_atoms_check(atom/A) - if(istype(A,/mob/living)) - return 1 - if(istype(A,/obj/item/disk/nuclear)) - return 1 - if(istype(A,/obj/machinery/nuclearbomb)) - return 1 - if(istype(A,/obj/machinery/tele_beacon)) - return 1 + if (istype(A, /mob/living)) + var/mob/living/mob = A + if (istype(mob, /mob/living/simple_animal/hostile/human) || mob.mind) + return TRUE + if (istype(A, /obj/item/disk/nuclear)) + return TRUE + if (istype(A, /obj/machinery/nuclearbomb)) + return TRUE + if (istype(A, /obj/machinery/tele_beacon)) + return TRUE for(var/i=1, i<=length(A.contents), i++) var/atom/B = A.contents[i] if(.(B)) - return 1 + return TRUE /datum/controller/subsystem/supply/proc/sell() var/list/material_count = list() @@ -113,7 +116,68 @@ SUBSYSTEM_DEF(supply) // Must sell ore detector disks in crates if(istype(A, /obj/item/disk/survey)) var/obj/item/disk/survey/D = A - add_points_from_source(round(D.Value() * 0.005), "gep") + add_points_from_source(round(D.Value() * 0.05), "gep") + + // Sell artefacts (in anomaly cages) + if (istype(AM, /obj/machinery/anomaly_container)) + var/obj/machinery/anomaly_container/AC = AM + callHook("sell_anomalycage", list(AC, subarea)) + if (AC.contained) + var/obj/machinery/artifact/C = AC.contained + var/list/my_effects + if (C.my_effect) + var/datum/artifact_effect/eone = C.my_effect + my_effects += eone + if (C.secondary_effect) + var/datum/artifact_effect/etwo = C.secondary_effect + my_effects += etwo + //Different effects and trigger combos give different rewards + + if (AC.attached_paper) //Needs to have a scan sheet of the anomaly to the container. + if (istype(AC.attached_paper, /obj/item/paper/anomaly_scan)) + var/obj/item/paper/anomaly_scan/P = AC.attached_paper + if (!P.is_copy) + for (var/datum/artifact_effect/E in my_effects) + switch (E.effect_type) + if (EFFECT_UNKNOWN, EFFECT_PSIONIC) + points += 20 + if (EFFECT_ENERGY, EFFECT_ELECTRO) + points += 30 + if (EFFECT_ORGANIC, EFFECT_SYNTH) + points += 40 + if (EFFECT_BLUESPACE, EFFECT_PARTICLE) + points += 50 + else + points += 10 + //In case there's ever a broken artifact, it's still worth SOMETHING + switch (E.trigger.trigger_type) + if (TRIGGER_SIMPLE) + points += 5 + if (TRIGGER_COMPLEX) + points += 10 + else + points += 2 + + add_points_from_source(points, "anomaly") + + //Only for animals in stasis cages. + if (istype(AM, /obj/machinery/stasis_cage)) + var/obj/machinery/stasis_cage/SC = AM + var/points_per_animal = 10 + callHook("sell_animal", list(SC, subarea)) + if (SC.contained) + var/mob/living/simple_animal/CA = SC.contained + if (istype(CA, /mob/living/simple_animal/hostile/human)) + return + if (istype(CA, /mob/living/simple_animal/passive)) + add_points_from_source(points_per_animal, "animal") + if (istype(CA, /mob/living/simple_animal/hostile/retaliate/beast)) + add_points_from_source((points_per_animal * 2), "animal") + return //So that it doesn't give points twice for beasts + if (istype(CA, /mob/living/simple_animal/hostile)) + add_points_from_source((points_per_animal * 4), "animal") + if (CA.stat != DEAD) //Alive gives more. + add_points_from_source((point_sources["animal"] * 2), "animal") qdel(AM) @@ -170,7 +234,7 @@ SUBSYSTEM_DEF(supply) info +="CONTENTS:
    " slip = new /obj/item/paper/manifest(A, JOINTEXT(info)) - slip.is_copy = 0 + slip.is_copy = FALSE //spawn the stuff, finish generating the manifest while you're at it if(SP.access) diff --git a/code/controllers/subsystems/tgui.dm b/code/controllers/subsystems/tgui.dm new file mode 100644 index 0000000000000..91f0b9be8b7af --- /dev/null +++ b/code/controllers/subsystems/tgui.dm @@ -0,0 +1,356 @@ +/** + * tgui subsystem + * + * Contains all tgui state and subsystem code. + */ + + +SUBSYSTEM_DEF(tgui) + name = "TGUI" + wait = 9 + flags = SS_NO_INIT + priority = FIRE_PRIORITY_TGUI + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT + + /// A list of UIs scheduled to process + var/list/current_run = list() + /// A list of open UIs + var/list/open_uis = list() + /// A list of open UIs, grouped by src_object and ui_key. + var/list/open_uis_by_src = list() + /// The HTML base used for all UIs. + var/basehtml + +/datum/controller/subsystem/tgui/PreInit() + basehtml = file2text('tgui/public/tgui.html') + // Inject inline polyfills + var/polyfill = file2text('tgui/public/tgui-polyfill.min.js') + polyfill = "" + basehtml = replacetextEx(basehtml, "", polyfill) + +/datum/controller/subsystem/tgui/Shutdown() + close_all_uis() + +/datum/controller/subsystem/tgui/UpdateStat(time) + if(PreventUpdateStat(time)) + return ..() + ..("P:[length(open_uis)]") + +/datum/controller/subsystem/tgui/fire(resumed = FALSE) + if(!resumed) + src.current_run = open_uis.Copy() + // Cache for sanic speed (lists are references anyways) + var/list/current_run = src.current_run + while(length(current_run)) + var/datum/tgui/ui = current_run[length(current_run)] + LIST_DEC(current_run) + // TODO: Move user/src_object check to process() + if(ui && ui.user && ui.src_object) + ui.process() + else + open_uis.Remove(ui) + if(MC_TICK_CHECK) + return + +/** + * public + * + * Requests a usable tgui window from the pool. + * Returns null if pool was exhausted. + * + * required user mob + * return datum/tgui + */ +/datum/controller/subsystem/tgui/proc/request_pooled_window(mob/user) + if(!user.client) + return null + var/list/windows = user.client.tgui_windows + var/window_id + var/datum/tgui_window/window + var/window_found = FALSE + // Find a usable window + for(var/i in 1 to TGUI_WINDOW_HARD_LIMIT) + window_id = TGUI_WINDOW_ID(i) + window = windows[window_id] + // As we are looping, create missing window datums + if(!window) + window = new(user.client, window_id, pooled = TRUE) + // Skip windows with acquired locks + if(window.locked) + continue + if(window.status == TGUI_WINDOW_READY) + return window + if(window.status == TGUI_WINDOW_CLOSED) + window.status = TGUI_WINDOW_LOADING + window_found = TRUE + break + if(!window_found) + #ifdef TGUI_DEBUGGING + log_tgui(user, "Error: Pool exhausted") + #endif + return + return window + +/** + * public + * + * Force closes all tgui windows. + * + * required user mob + */ +/datum/controller/subsystem/tgui/proc/force_close_all_windows(mob/user) + if(user.client) + user.client.tgui_windows = list() + for(var/i in 1 to TGUI_WINDOW_HARD_LIMIT) + var/window_id = TGUI_WINDOW_ID(i) + close_browser(user, "window=[window_id]") + +/** + * public + * + * Force closes the tgui window by window_id. + * + * required user mob + * required window_id string + */ +/datum/controller/subsystem/tgui/proc/force_close_window(mob/user, window_id) + // Close all tgui datums based on window_id. + for(var/datum/tgui/ui in user.tgui_open_uis) + if(ui.window && ui.window.id == window_id) + ui.close(can_be_suspended = FALSE) + // Unset machine just to be sure. + user.unset_machine() + // Close window directly just to be sure. + close_browser(user, "window=[window_id]") + +/** + * public + * + * Try to find an instance of a UI, and push an update to it. + * + * required user mob The mob who opened/is using the UI. + * required src_object datum The object/datum which owns the UI. + * optional ui datum/tgui The UI to be updated, if it exists. + * optional force_open bool If the UI should be re-opened instead of updated. + * + * return datum/tgui The found UI. + */ +/datum/controller/subsystem/tgui/proc/try_update_ui(mob/user, datum/src_object, datum/tgui/ui, force_open = FALSE) + // Look up a UI if it wasn't passed + if(isnull(ui)) + ui = get_open_ui(user, src_object) + // Couldn't find a UI. + if(isnull(ui)) + return null + var/data = src_object.ui_data(user) // Get data from the src_object. + if(force_open) // UI is already open; update it. + ui.send_full_update(data, TRUE) + return ui // We found the UI, return it + ui.process_status() + // UI ended up with the closed status + // or is actively trying to close itself. + // FIXME: Doesn't actually fix the paper bug. + if(ui.status <= STATUS_CLOSE) + ui.close() + return null + ui.send_update() + return ui + +/** + * public + * + * Get a open UI given a user and src_object. + * + * required user mob The mob who opened/is using the UI. + * required src_object datum The object/datum which owns the UI. + * + * return datum/tgui The found UI. + */ +/datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object) + var/key = "[REF(src_object)]" + // No UIs opened for this src_object + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + return + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Make sure we have the right user + if(ui.user == user) + return ui + return + +/** + * public + * + * Update all UIs attached to src_object. + * + * required src_object datum The object/datum which owns the UIs. + * + * return int The number of UIs updated. + */ +/datum/controller/subsystem/tgui/proc/update_uis(datum/src_object) + var/count = 0 + var/key = "[REF(src_object)]" + // No UIs opened for this src_object + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + return count + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Check if UI is valid. + if(ui && ui.src_object && ui.user && ui.src_object.tgui_host(ui.user)) + ui.process(force = TRUE) // Update the UI. + count++ // Count each UI we update. + return count + +/** + * public + * + * Close all UIs attached to src_object. + * + * required src_object datum The object/datum which owns the UIs. + * + * return int The number of UIs closed. + */ +/datum/controller/subsystem/tgui/proc/close_uis(datum/src_object) + var/count = 0 + var/key = "[REF(src_object)]" + // No UIs opened for this src_object + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + return count + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Check if UI is valid. + if(ui && ui.src_object && ui.user && ui.src_object.tgui_host(ui.user)) + ui.close() + count++ + return count + +/** + * public + * + * Close all UIs regardless of their attachment to src_object. + * + * return int The number of UIs closed. + */ +/datum/controller/subsystem/tgui/proc/close_all_uis() + var/count = 0 + for(var/key in open_uis_by_src) + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Check if UI is valid. + if(ui && ui.src_object && ui.user && ui.src_object.tgui_host(ui.user)) + ui.close() + count++ + return count + +/** + * public + * + * Update all UIs belonging to a user. + * + * required user mob The mob who opened/is using the UI. + * optional src_object datum If provided, only update UIs belonging this src_object. + * + * return int The number of UIs updated. + */ +/datum/controller/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object) + var/count = 0 + if(length(user?.tgui_open_uis) == 0) + return count + for(var/datum/tgui/ui in user.tgui_open_uis) + if(isnull(src_object) || ui.src_object == src_object) + ui.process(force = TRUE) + count++ + return count + +/** + * public + * + * Close all UIs belonging to a user. + * + * required user mob The mob who opened/is using the UI. + * optional src_object datum If provided, only close UIs belonging this src_object. + * + * return int The number of UIs closed. + */ +/datum/controller/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object, logout = FALSE) + var/count = 0 + if(length(user?.tgui_open_uis) == 0) + return count + for(var/datum/tgui/ui in user.tgui_open_uis) + if(isnull(src_object) || ui.src_object == src_object) + ui.close(logout = logout) + count++ + return count + +/** + * private + * + * Add a UI to the list of open UIs. + * + * required ui datum/tgui The UI to be added. + */ +/datum/controller/subsystem/tgui/proc/on_open(datum/tgui/ui) + var/key = "[REF(ui.src_object)]" + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + open_uis_by_src[key] = list() + ui.user.tgui_open_uis |= ui + var/list/uis = open_uis_by_src[key] + uis |= ui + open_uis |= ui + +/** + * private + * + * Remove a UI from the list of open UIs. + * + * required ui datum/tgui The UI to be removed. + * + * return bool If the UI was removed or not. + */ +/datum/controller/subsystem/tgui/proc/on_close(datum/tgui/ui) + var/key = "[REF(ui.src_object)]" + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + return FALSE + // Remove it from the list of processing UIs. + open_uis.Remove(ui) + // If the user exists, remove it from them too. + if(ui.user) + ui.user.tgui_open_uis.Remove(ui) + var/list/uis = open_uis_by_src[key] + uis.Remove(ui) + if(length(uis) == 0) + open_uis_by_src.Remove(key) + return TRUE + +/** + * private + * + * Handle client logout, by closing all their UIs. + * + * required user mob The mob which logged out. + * + * return int The number of UIs closed. + */ +/datum/controller/subsystem/tgui/proc/on_logout(mob/user) + return close_user_uis(user, logout = TRUE) + +/** + * private + * + * Handle clients switching mobs, by transferring their UIs. + * + * required user source The client's original mob. + * required user target The client's new mob. + * + * return bool If the UIs were transferred. + */ +/datum/controller/subsystem/tgui/proc/on_transfer(mob/source, mob/target) + // The old mob had no open UIs. + if(length(source?.tgui_open_uis) == 0) + return FALSE + if(isnull(target.tgui_open_uis) || !istype(target.tgui_open_uis, /list)) + target.tgui_open_uis = list() + // Transfer all the UIs. + for(var/datum/tgui/ui in source.tgui_open_uis) + // Inform the UIs of their new owner. + ui.user = target + target.tgui_open_uis.Add(ui) + // Clear the old list. + source.tgui_open_uis.Cut() + return TRUE diff --git a/code/controllers/subsystems/throwing.dm b/code/controllers/subsystems/throwing.dm index d0d1a893967b6..931f62c1579e7 100644 --- a/code/controllers/subsystems/throwing.dm +++ b/code/controllers/subsystems/throwing.dm @@ -1,10 +1,10 @@ -#define MAX_THROWING_DIST 1280 // 5 z-levels on default width #define MAX_TICKS_TO_MAKE_UP 3 //how many missed ticks will we attempt to make up for this run. SUBSYSTEM_DEF(throwing) name = "Throwing" wait = 1 + priority = FIRE_PRIORITY_THROWING flags = SS_NO_INIT | SS_KEEP_TIMING /// An atom => thrownthing map of current throws @@ -113,16 +113,15 @@ SUBSYSTEM_DEF(throwing) if (dist_travelled && hitcheck(get_turf(thrownthing))) finalize() return - var/area/A = get_area(AM.loc) var/atom/step last_move = world.time var/scaled_wait = world.tick_lag * SSthrowing.wait var/target_travel = (delayed_time + (world.time + world.tick_lag) - start_time) * speed var/prior_travel = dist_travelled ? dist_travelled : -1 var/max_travel = speed * MAX_TICKS_TO_MAKE_UP - var/tilestomove = Ceil(min(target_travel - prior_travel, max_travel) * scaled_wait) + var/tilestomove = ceil(min(target_travel - prior_travel, max_travel) * scaled_wait) while (tilestomove-- > 0) - if ((dist_travelled >= maxrange || AM.loc == target_turf) && (A && A.has_gravity())) + if (dist_travelled >= maxrange || AM.loc == target_turf) finalize() return if (dist_travelled <= max(dist_x, dist_y)) //if we haven't reached the target yet we home in on it, otherwise we use the initial direction @@ -141,14 +140,8 @@ SUBSYSTEM_DEF(throwing) return AM.Move(step, get_dir(AM, step)) if (!AM.throwing) // we hit something during our move - finalize(hit = TRUE) return dist_travelled++ - if (dist_travelled > MAX_THROWING_DIST) - finalize() - return - sleep(-1) - A = get_area(AM.loc) /datum/thrownthing/proc/finalize(hit = FALSE, t_target = null) @@ -164,9 +157,8 @@ SUBSYSTEM_DEF(throwing) break if (!hit) thrownthing.throw_impact(get_turf(thrownthing), src) - if(ismob(thrownthing)) - var/mob/M = thrownthing - M.inertia_dir = init_dir + thrownthing.space_drift(init_dir) + if(t_target && !QDELETED(thrownthing)) thrownthing.throw_impact(t_target, src) if (callback) diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm index bde90ddbd5cc1..7e417f932d42c 100644 --- a/code/controllers/subsystems/ticker.dm +++ b/code/controllers/subsystems/ticker.dm @@ -1,17 +1,17 @@ SUBSYSTEM_DEF(ticker) name = "Ticker" wait = 10 - priority = SS_PRIORITY_TICKER + priority = FIRE_PRIORITY_TICKER init_order = SS_INIT_TICKER flags = SS_NO_TICK_CHECK | SS_KEEP_TIMING - runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT + runlevels = RUNLEVELS_PREGAME | RUNLEVELS_GAME var/pregame_timeleft var/start_ASAP = FALSE //the game will start as soon as possible, bypassing all pre-game nonsense var/list/gamemode_vote_results //Will be a list, in order of preference, of form list(config_tag = number of votes). - var/bypass_gamemode_vote = 0 //Intended for use with admin tools. Will avoid voting and ignore any results. + var/bypass_gamemode_vote = TRUE //Intended for use with admin tools. Will avoid voting and ignore any results. - var/master_mode = "extended" //The underlying game mode (so "secret" or the voted mode). Saved to default back to previous round's mode in case the vote failed. This is a config_tag. + var/master_mode = "secret" //The underlying game mode (so "secret" or the voted mode). Saved to default back to previous round's mode in case the vote failed. This is a config_tag. var/datum/game_mode/mode //The actual gamemode, if selected. var/round_progressing = 1 //Whether the lobby clock is ticking down. @@ -32,6 +32,8 @@ SUBSYSTEM_DEF(ticker) ///Set to TRUE when an admin forcefully ends the round. var/forced_end = FALSE + var/skip_requirement_checks = FALSE + var/static/list/mode_tags = list() var/static/list/mode_names = list() @@ -48,6 +50,7 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/Initialize(start_uptime) pregame_timeleft = config.pre_game_time SECONDS + bypass_gamemode_vote = config.bypass_gamemode_vote build_mode_cache() to_world(SPAN_INFO("Welcome to the pre-game lobby!")) to_world("Please, setup your character and select ready. Game will start in [round(pregame_timeleft/10)] seconds") @@ -110,8 +113,10 @@ SUBSYSTEM_DEF(ticker) if(start_ASAP) start_now() return + if(round_progressing && last_fire) pregame_timeleft -= world.time - last_fire + if(pregame_timeleft <= 0) Master.SetRunLevel(RUNLEVEL_SETUP) return @@ -181,7 +186,7 @@ SUBSYSTEM_DEF(ticker) player.new_player_panel() if(!length(GLOB.admins)) - send2adminirc("Round has started with no admins online.") + send_to_admin_discord(EXCOM_MSG_AHELP, "Round has started with no admins online.") /datum/controller/subsystem/ticker/proc/playing_tick() mode.process() @@ -190,7 +195,7 @@ SUBSYSTEM_DEF(ticker) if(mode_finished && game_finished()) Master.SetRunLevel(RUNLEVEL_POSTGAME) end_game_state = END_GAME_READY_TO_END - invoke_async(src, .proc/declare_completion) + invoke_async(src, PROC_REF(declare_completion)) if(config.allow_map_switching && config.auto_map_vote && length(GLOB.all_maps) > 1) SSvote.initiate_vote(/datum/vote/map/end_game, automatic = 1) @@ -332,7 +337,11 @@ Helpers mode_datum.pre_setup() // Makes lists of viable candidates; performs candidate draft for job-override roles; stores the draft result both internally and on the draftee. SSjobs.divide_occupations(mode_datum) // Gives out jobs to everyone who was not selected to antag. var/list/lobby_players = SSticker.lobby_players() - var/result = mode_datum.check_startable(lobby_players) + + var/result = FALSE + if (!skip_requirement_checks) + result = mode_datum.check_startable(lobby_players) + if(result) mode_datum.fail_setup() SSjobs.reset_occupations() @@ -398,18 +407,11 @@ Helpers minds += player.mind /datum/controller/subsystem/ticker/proc/equip_characters() - var/captainless=1 for(var/mob/living/carbon/human/player in GLOB.player_list) if(player && player.mind && player.mind.assigned_role) - if(player.mind.assigned_role == "Captain") - captainless=0 if(!player_is_antag(player.mind, only_offstation_roles = 1)) SSjobs.equip_rank(player, player.mind.assigned_role, 0) SScustomitems.equip_custom_items(player) - if(captainless) - for(var/mob/M in GLOB.player_list) - if(!istype(M,/mob/new_player)) - to_chat(M, "Captainship not forced on anyone.") /datum/controller/subsystem/ticker/proc/attempt_late_antag_spawn(list/antag_choices) var/datum/antagonist/antag = antag_choices[1] @@ -492,9 +494,14 @@ Helpers /datum/controller/subsystem/ticker/proc/declare_completion() to_world("


    A round of [mode.name] has ended!

    ") - for(var/client/C) - if(!C.credits) - C.RollCredits() + for(var/client/C as anything in GLOB.clients) + if(!C) + continue + + if(C.credits) + continue + + C.RollCredits() GLOB.using_map.roundend_player_status() @@ -571,9 +578,9 @@ Helpers return if(istype(SSvote.active_vote, /datum/vote/gamemode)) SSvote.cancel_vote(user) - bypass_gamemode_vote = 1 + bypass_gamemode_vote = TRUE Master.SetRunLevel(RUNLEVEL_SETUP) - return 1 + return TRUE /hook/roundstart/proc/PlayWelcomeSound() diff --git a/code/controllers/subsystems/timer.dm b/code/controllers/subsystems/timer.dm index fa0fb585156f9..0b46ddee94820 100644 --- a/code/controllers/subsystems/timer.dm +++ b/code/controllers/subsystems/timer.dm @@ -1,661 +1,103 @@ -/// Controls how many buckets should be kept, each representing a tick. (1 minutes worth) -#define BUCKET_LEN (world.fps * 60) -/// Helper for getting the correct bucket for a given timer -#define BUCKET_POS(timer) (((round((timer.timeToRun - SStimer.head_offset) / world.tick_lag) + 1) % BUCKET_LEN) || BUCKET_LEN) -/// Gets the maximum time at which timers will be invoked from buckets, used for deferring to secondary queue -#define TIMER_MAX(timer_ss) (world.time + (min(BUCKET_LEN - (timer_ss.practical_offset - (world.time - timer_ss.head_offset) / world.tick_lag)-1, BUCKET_LEN - 1)) * world.tick_lag) -/// Max float with integer precision -#define TIMER_ID_MAX (2**24) +/// Looping timers automatically re-queue themselves after firing, assuming they are still valid +var/global/const/TIMER_LOOP = FLAG(0) -/** - * # Timer Subsystem - * - * Handles creation, callbacks, and destruction of timed events. - * - * It is important to understand the buckets used in the timer subsystem are just a series of doubly-linked - * lists. The object at a given index in bucket_list is a /datum/timedevent, the head of a list, which has prev - * and next references for the respective elements in that bucket's list. - */ -SUBSYSTEM_DEF(timer) - name = "Timer" - wait = 1 //SS_TICKER subsystem, so wait is in ticks - priority = SS_PRIORITY_TIMER - - flags = SS_NO_INIT | SS_TICKER - - /// Queue used for storing timers that do not fit into the current buckets - var/list/datum/timedevent/second_queue = list() - /// A hashlist dictionary used for storing unique timers - var/list/hashes = list() - /// world.time of the first entry in the bucket list, effectively the 'start time' of the current buckets - var/head_offset = 0 - /// Index of the wrap around pivot for buckets. buckets before this are later running buckets wrapped around from the end of the bucket list. - var/practical_offset = 1 - /// world.tick_lag the bucket was designed for - var/bucket_resolution = 0 - /// How many timers are in the buckets - var/bucket_count = 0 - /// List of buckets, each bucket holds every timer that has to run that byond tick - var/list/bucket_list = list() - /// List of all active timers associated to their timer ID (for easy lookup) - var/list/timer_id_dict = list() - /// Special timers that run in real-time, not BYOND time; these are more expensive to run and maintain - var/list/clienttime_timers = list() - /// Contains the last time that a timer's callback was invoked, or the last tick the SS fired if no timers are being processed - var/last_invoke_tick = 0 - /// Keeps track of the next index to work on for client timers - var/next_clienttime_timer_index = 0 - /// Contains the last time that a warning was issued for not invoking callbacks - var/static/last_invoke_warning = 0 - /// Boolean operator controlling if the timer SS will automatically reset buckets if it fails to invoke callbacks for an extended period of time - var/static/bucket_auto_reset = TRUE - /// How many times bucket was reset - var/bucket_reset_count = 0 - - -/datum/controller/subsystem/timer/PreInit() - LIST_RESIZE(bucket_list, BUCKET_LEN) - head_offset = world.time - bucket_resolution = world.tick_lag - - -/datum/controller/subsystem/timer/UpdateStat(time) - if (PreventUpdateStat(time)) - return ..() - ..({"\ - Buckets [bucket_count] \ - Queue2 [length(second_queue)] \ - Hashes [length(hashes)] \ - Client Timers [length(clienttime_timers)] \ - Size [length(timer_id_dict)] \ - Resets [bucket_reset_count]\ - "}) - - -/datum/controller/subsystem/timer/proc/dump_timer_buckets(full = TRUE) - var/list/to_log = list("Timer bucket reset. world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset]") - if (full) - for (var/i in 1 to length(bucket_list)) - var/datum/timedevent/bucket_head = bucket_list[i] - if (!bucket_head) - continue - - to_log += "Active timers at index [i]:" - var/datum/timedevent/bucket_node = bucket_head - var/anti_loop_check = 1 - do - to_log += get_timer_debug_string(bucket_node) - bucket_node = bucket_node.next - anti_loop_check-- - while(bucket_node && bucket_node != bucket_head && anti_loop_check) - - to_log += "Active timers in the second_queue queue:" - for(var/I in second_queue) - to_log += get_timer_debug_string(I) - - // Dump all the logged data to the world log - log_ss(name, to_log.Join("\n")) - -/datum/controller/subsystem/timer/fire(resumed = FALSE) - // Store local references to datum vars as it is faster to access them - var/lit = last_invoke_tick - var/list/bucket_list = src.bucket_list - var/last_check = world.time - BUCKET_LEN * 1.5 * world.tick_lag - - // If there are no timers being tracked, then consider now to be the last invoked time - if(!bucket_count) - last_invoke_tick = world.time - - // Check that we have invoked a callback in the last 1.5 minutes of BYOND time, - // and throw a warning and reset buckets if this is true - if(lit && lit < last_check && head_offset < last_check && last_invoke_warning < last_check) - last_invoke_warning = world.time - var/msg = "No regular timers processed in the last [BUCKET_LEN * 1.5] ticks[bucket_auto_reset ? ", resetting buckets" : ""]!" - message_admins(msg) - WARNING(msg) - if(bucket_auto_reset) - bucket_resolution = 0 - dump_timer_buckets(config.log_timers_on_bucket_reset) - - // Process client-time timers - if (next_clienttime_timer_index) - clienttime_timers.Cut(1, next_clienttime_timer_index+1) - next_clienttime_timer_index = 0 - for (next_clienttime_timer_index in 1 to length(clienttime_timers)) - if (MC_TICK_CHECK) - next_clienttime_timer_index-- - break - var/datum/timedevent/ctime_timer = clienttime_timers[next_clienttime_timer_index] - if (ctime_timer.timeToRun > Uptime()) - next_clienttime_timer_index-- - break - - var/datum/callback/callBack = ctime_timer.callBack - if (!callBack) - CRASH("Invalid timer: [get_timer_debug_string(ctime_timer)] world.time: [world.time], \ - head_offset: [head_offset], practical_offset: [practical_offset], Uptime(): [Uptime()]") - - ctime_timer.spent = Uptime() - invoke_async(callBack) - - if(ctime_timer.flags & TIMER_LOOP) - ctime_timer.spent = 0 - ctime_timer.timeToRun = Uptime() + ctime_timer.wait - BINARY_INSERT(ctime_timer, clienttime_timers, /datum/timedevent, ctime_timer, timeToRun, COMPARE_KEY) - else - qdel(ctime_timer) - - // Remove invoked client-time timers - if (next_clienttime_timer_index) - clienttime_timers.Cut(1, next_clienttime_timer_index+1) - next_clienttime_timer_index = 0 - - // Check for when we need to loop the buckets, this occurs when - // the head_offset is approaching BUCKET_LEN ticks in the past - if (practical_offset > BUCKET_LEN) - head_offset += BUCKET_LEN * world.tick_lag - practical_offset = 1 - resumed = FALSE - - // Check for when we have to reset buckets, typically from auto-reset - if ((length(bucket_list) != BUCKET_LEN) || (world.tick_lag != bucket_resolution)) - reset_buckets() - bucket_list = src.bucket_list - resumed = FALSE - - - // Iterate through each bucket starting from the practical offset - while (practical_offset <= BUCKET_LEN && head_offset + ((practical_offset - 1) * world.tick_lag) <= world.time) - var/datum/timedevent/timer - while ((timer = bucket_list[practical_offset])) - var/datum/callback/callBack = timer.callBack - if (!callBack) - stack_trace("Invalid timer: [get_timer_debug_string(timer)] world.time: [world.time], \ - head_offset: [head_offset], practical_offset: [practical_offset], bucket_joined: [timer.bucket_joined]") - if (!timer.spent) - bucket_resolution = null // force bucket recreation - return - - timer.bucketEject() //pop the timer off of the bucket list. - - // Invoke callback if possible - if (!timer.spent) - timer.spent = world.time - invoke_async(callBack) - last_invoke_tick = world.time - - if (timer.flags & TIMER_LOOP) // Prepare looping timers to re-enter the queue - timer.spent = 0 - timer.timeToRun = world.time + timer.wait - timer.bucketJoin() - else - qdel(timer) - - if (MC_TICK_CHECK) - break - - if (!bucket_list[practical_offset]) - // Empty the bucket, check if anything in the secondary queue should be shifted to this bucket - bucket_list[practical_offset] = null // Just in case - practical_offset++ - var/i = 0 - for (i in 1 to length(second_queue)) - timer = second_queue[i] - if (timer.timeToRun >= TIMER_MAX(src)) - i-- - break - - // Check for timers that are scheduled to run in the past - if (timer.timeToRun < head_offset) - bucket_resolution = null // force bucket recreation - stack_trace("[i] Invalid timer state: Timer in long run queue with a time to run less then head_offset. \ - [get_timer_debug_string(timer)] world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset]") - break - - // Check for timers that are not capable of being scheduled to run without rebuilding buckets - if (timer.timeToRun < head_offset + (practical_offset - 1) * world.tick_lag) - bucket_resolution = null // force bucket recreation - stack_trace("[i] Invalid timer state: Timer in long run queue that would require a backtrack to transfer to \ - short run queue. [get_timer_debug_string(timer)] world.time: [world.time], head_offset: [head_offset], practical_offset: [practical_offset]") - break - - timer.bucketJoin() - if (i) - second_queue.Cut(1, i+1) - if (MC_TICK_CHECK) - break - -/** - * Generates a string with details about the timed event for debugging purposes - */ -/datum/controller/subsystem/timer/proc/get_timer_debug_string(datum/timedevent/TE) - . = "Timer: [TE]" - . += "Prev: [TE.prev ? TE.prev : "NULL"], Next: [TE.next ? TE.next : "NULL"]" - if(TE.spent) - . += ", SPENT([TE.spent])" - if(QDELETED(TE)) - . += ", QDELETED" - if(!TE.callBack) - . += ", NO CALLBACK" - -/** - * Destroys the existing buckets and creates new buckets from the existing timed events - */ -/datum/controller/subsystem/timer/proc/reset_buckets() - log_debug("Timer buckets has been reset, this may cause timer to lag") - bucket_reset_count++ - - var/list/bucket_list = src.bucket_list // Store local reference to datum var, this is faster - var/list/alltimers = list() - - // Get all timers currently in the buckets - for (var/bucket_head in bucket_list) - if (!bucket_head) // if bucket is empty for this tick - continue - var/datum/timedevent/bucket_node = bucket_head - do - alltimers += bucket_node - bucket_node = bucket_node.next - while(bucket_node && bucket_node != bucket_head) - - // Empty the list by zeroing and re-assigning the length - bucket_list.Cut() - LIST_RESIZE(bucket_list, BUCKET_LEN) - - // Reset values for the subsystem to their initial values - practical_offset = 1 - bucket_count = 0 - head_offset = world.time - bucket_resolution = world.tick_lag - - // Add all timed events from the secondary queue as well - alltimers += second_queue - - for (var/datum/timedevent/t as anything in alltimers) - t.timer_subsystem = src // Recovered timers need to be reparented - t.bucket_joined = FALSE - t.bucket_pos = -1 - t.prev = null - t.next = null - - // If there are no timers being tracked by the subsystem, - // there is no need to do any further rebuilding - if (!length(alltimers)) - return - - // Sort all timers by time to run - sortTim(alltimers, .proc/cmp_timer) - - // Get the earliest timer, and if the TTR is earlier than the current world.time, - // then set the head offset appropriately to be the earliest time tracked by the - // current set of buckets - var/datum/timedevent/head = alltimers[1] - if (head.timeToRun < head_offset) - head_offset = head.timeToRun +/// Stoppable timers produce a hash that can be given to deltimer() to unqueue them +var/global/const/TIMER_STOPPABLE = FLAG(1) - // Iterate through each timed event and insert it into an appropriate bucket, - // up unto the point that we can no longer insert into buckets as the TTR - // is outside the range we are tracking, then insert the remainder into the - // secondary queue - var/new_bucket_count - var/i = 1 - for (i in 1 to length(alltimers)) - var/datum/timedevent/timer = alltimers[i] - if (!timer) - continue +/// Two of the same timer signature cannot be queued at once when they are unique +var/global/const/TIMER_UNIQUE = FLAG(2) - // Check that the TTR is within the range covered by buckets, when exceeded we've finished - if (timer.timeToRun >= TIMER_MAX(src)) - i-- - break +/// Attempting to add a unique timer will re-queue the event instead of being ignored +var/global/const/TIMER_OVERRIDE = FLAG(3) - // Check that timer has a valid callback and hasn't been invoked - if (!timer.callBack || timer.spent) - WARNING("Invalid timer: [get_timer_debug_string(timer)] world.time: [world.time], \ - head_offset: [head_offset], practical_offset: [practical_offset]") - if (timer.callBack) - qdel(timer) - continue +/// Skips adding the wait to the timer hash, allowing for uniques with variable wait times +var/global/const/TIMER_NO_HASH_WAIT = FLAG(4) - // Insert the timer into the bucket, and perform necessary doubly-linked list operations - new_bucket_count++ - var/bucket_pos = BUCKET_POS(timer) - timer.bucket_pos = bucket_pos - timer.bucket_joined = TRUE - var/datum/timedevent/bucket_head = bucket_list[bucket_pos] - if (!bucket_head) - bucket_list[bucket_pos] = timer - timer.next = null - timer.prev = null - continue - - bucket_head.prev = timer - timer.next = bucket_head - timer.prev = null - bucket_list[bucket_pos] = timer - - // Cut the timers that are tracked by the buckets from the secondary queue - if (i) - alltimers.Cut(1, i + 1) - second_queue = alltimers - bucket_count = new_bucket_count - - -/datum/controller/subsystem/timer/Recover() - // Find the current timer sub-subsystem in global and recover its buckets etc - var/datum/controller/subsystem/timer/timerSS = null - for(var/global_var in global.vars) - if (istype(global.vars[global_var],src.type)) - timerSS = global.vars[global_var] - - hashes = timerSS.hashes - timer_id_dict = timerSS.timer_id_dict - - bucket_list = timerSS.bucket_list - second_queue = timerSS.second_queue - - // The buckets are FUBAR - reset_buckets() - -/** - * # Timed Event - * - * This is the actual timer, it contains the callback and necessary data to maintain - * the timer. - * - * See the documentation for the timer subsystem for an explanation of the buckets referenced - * below in next and prev - */ -/datum/timedevent - /// ID used for timers when the TIMER_STOPPABLE flag is present - var/id - /// The callback to invoke after the timer completes - var/datum/callback/callBack - /// The time at which the callback should be invoked at - var/timeToRun - /// The length of the timer +/datum/timer + var/datum/callback/callback var/wait - /// Unique hash generated when TIMER_UNIQUE flag is present - var/hash - /// The source of the timedevent, whatever called addtimer + var/flags var/source - /// Flags associated with the timer, see _DEFINES/subsystems.dm - var/list/flags - /// Time at which the timer was invoked or destroyed - var/spent = 0 - /// An informative name generated for the timer as its representation in strings, useful for debugging - var/name - /// Next timed event in the bucket - var/datum/timedevent/next - /// Previous timed event in the bucket - var/datum/timedevent/prev - /// The timer subsystem this event is associated with - var/datum/controller/subsystem/timer/timer_subsystem - /// Boolean indicating if timer joined into bucket - var/bucket_joined = FALSE - /// Initial bucket position - var/bucket_pos = -1 - -/datum/timedevent/New(datum/callback/callBack, wait, flags, datum/controller/subsystem/timer/timer_subsystem, hash, source) - var/static/nextid = 1 - id = TIMER_ID_NULL - src.callBack = callBack - src.wait = wait - src.flags = flags - src.hash = hash - src.source = source - src.timer_subsystem = timer_subsystem || SStimer - - // Determine time at which the timer's callback should be invoked - timeToRun = (flags & TIMER_CLIENT_TIME ? Uptime() : world.time) + wait - - // Include the timer in the hash table if the timer is unique - if (flags & TIMER_UNIQUE) - timer_subsystem.hashes[hash] = src - - // Generate ID for the timer if the timer is stoppable, include in the timer id dictionary - if (flags & TIMER_STOPPABLE) - id = num2text(nextid, 100) - if (nextid >= SHORT_REAL_LIMIT) - nextid += min(1, 2 ** round(nextid / SHORT_REAL_LIMIT)) - else - nextid++ - timer_subsystem.timer_id_dict[id] = src - - if ((timeToRun < world.time || timeToRun < timer_subsystem.head_offset) && !(flags & TIMER_CLIENT_TIME)) - CRASH("Invalid timer state: Timer created that would require a backtrack to run (addtimer would never let this happen): [SStimer.get_timer_debug_string(src)]") - - if (callBack.target != FALSE && !QDESTROYING(callBack.target)) - LAZYADD(callBack.target.active_timers, src) - - bucketJoin() - -/datum/timedevent/Destroy() - ..() - if (flags & TIMER_UNIQUE && hash) - timer_subsystem.hashes -= hash - - if (callBack && callBack.target && callBack.target != FALSE && callBack.target.active_timers) - callBack.target.active_timers -= src - UNSETEMPTY(callBack.target.active_timers) - - callBack = null - - if (flags & TIMER_STOPPABLE) - timer_subsystem.timer_id_dict -= id - - if (flags & TIMER_CLIENT_TIME) - if (!spent) - spent = world.time - timer_subsystem.clienttime_timers -= src - return QDEL_HINT_IWILLGC - - if (!spent) - spent = world.time - bucketEject() - else - if (prev && prev.next == src) - prev.next = next - if (next && next.prev == src) - next.prev = prev - next = null - prev = null - return QDEL_HINT_IWILLGC + var/hash + var/fire_time -/** - * Removes this timed event from any relevant buckets, or the secondary queue - */ -/datum/timedevent/proc/bucketEject() - // Store local references for the bucket list and secondary queue - // This is faster than referencing them from the datum itself - var/list/bucket_list = timer_subsystem.bucket_list - var/list/second_queue = timer_subsystem.second_queue - // Attempt to get the head of the bucket - var/datum/timedevent/buckethead - if(bucket_pos > 0) - buckethead = bucket_list[bucket_pos] +SUBSYSTEM_DEF(timer) + name = "Timer" + flags = SS_NO_INIT | SS_TICKER + priority = FIRE_PRIORITY_TIMER + wait = 1 - // Decrement the number of timers in buckets if the timed event is - // the head of the bucket, or has a TTR less than TIMER_MAX implying it fits - // into an existing bucket, or is otherwise not present in the secondary queue - if(buckethead == src) - bucket_list[bucket_pos] = next - timer_subsystem.bucket_count-- - else if(bucket_joined) - timer_subsystem.bucket_count-- - else - var/l = length(second_queue) - second_queue -= src - if(l == length(second_queue)) - timer_subsystem.bucket_count-- + var/list/datum/timer/queue = list() - // Remove the timed event from the bucket, ensuring to maintain - // the integrity of the bucket's list if relevant - if (prev && prev.next == src) - prev.next = next - if (next && next.prev == src) - next.prev = prev - prev = next = null - bucket_pos = -1 - bucket_joined = FALSE + var/list/datum/timer/timers_by_hash = list() -/** - * Attempts to add this timed event to a bucket, will enter the secondary queue - * if there are no appropriate buckets at this time. - * - * Secondary queueing of timed events will occur when the timespan covered by the existing - * buckets is exceeded by the time at which this timed event is scheduled to be invoked. - * If the timed event is tracking client time, it will be added to a special bucket. - */ -/datum/timedevent/proc/bucketJoin() - var/static/list/bitfield_flags = list("TIMER_UNIQUE", "TIMER_OVERRIDE", "TIMER_CLIENT_TIME", "TIMER_STOPPABLE", "TIMER_NO_HASH_WAIT", "TIMER_LOOP") - name = "Timer: [id] (\ref[src]), TTR: [timeToRun], wait:[wait] Flags: [jointext(bitfield2list(flags, bitfield_flags), ", ")], \ - callBack: \ref[callBack], target: [callBack.identity], callable:[callBack.callable]([callBack.params ? callBack.params.Join(", ") : ""]), source: [source]" +/datum/controller/subsystem/timer/UpdateStat(time) + if (PreventUpdateStat(time)) + return ..() + ..("Queue: [length(queue)]") - if (bucket_joined) - stack_trace("Bucket already joined! [name]") - // Check if this timed event should be diverted to the client time bucket, or the secondary queue - var/list/L - if (flags & TIMER_CLIENT_TIME) - L = timer_subsystem.clienttime_timers - else if (timeToRun >= TIMER_MAX(timer_subsystem)) - L = timer_subsystem.second_queue - if(L) - BINARY_INSERT(src, L, /datum/timedevent, src, timeToRun, COMPARE_KEY) +/datum/controller/subsystem/timer/fire(resume, no_mc_tick) + if (!length(queue)) return - - // Get a local reference to the bucket list, this is faster than referencing the datum - var/list/bucket_list = timer_subsystem.bucket_list - - // Find the correct bucket for this timed event - bucket_pos = BUCKET_POS(src) - - if (bucket_pos < timer_subsystem.practical_offset && timeToRun < (timer_subsystem.head_offset + BUCKET_LEN * world.tick_lag)) - WARNING("Bucket pos in past: bucket_pos = [bucket_pos] < practical_offset = [timer_subsystem.practical_offset] \ - && timeToRun = [timeToRun] < [timer_subsystem.head_offset + BUCKET_LEN * world.tick_lag], Timer: [name]") - bucket_pos = timer_subsystem.practical_offset // Recover bucket_pos to avoid timer blocking queue - - var/datum/timedevent/bucket_head = bucket_list[bucket_pos] - timer_subsystem.bucket_count++ - - // If there is no timed event at this position, then the bucket is 'empty' - // and we can just set this event to that position - if (!bucket_head) - bucket_joined = TRUE - bucket_list[bucket_pos] = src + var/datum/timer/timer + var/datum/target + var/size = length(queue) + for (var/i = 1 to size) + timer = queue[i] + if (world.time < timer.fire_time) + if (i > 1) + queue.Cut(1, i) + return + target = timer.callback.target + if (target == GLOBAL_PROC || !QDELETED(target)) + invoke_async(timer.callback) + if (timer.flags & TIMER_LOOP) + _addtimer(timer, subsystem = src) + else if (timer.hash) + timers_by_hash -= timer.hash + if (no_mc_tick) + CHECK_TICK + else if (MC_TICK_CHECK) + queue.Cut(1, i + 1) + return + queue.Cut(1, size + 1) + + +/proc/deltimer(datum/timer/timer, datum/controller/subsystem/timer/subsystem = SStimer) + if (istext(timer)) + timer = subsystem.timers_by_hash[timer] + if (!timer) return - - // Otherwise, we merely add this timed event into the bucket, which is a - // doubly-linked list - bucket_joined = TRUE - bucket_head.prev = src - next = bucket_head - prev = null - bucket_list[bucket_pos] = src - - -/** - * Create a new timer and insert it in the queue. - * You should not call this directly, and should instead use the addtimer macro, which includes source information. - * - * Arguments: - * * callback the callback to call on timer finish - * * wait deciseconds to run the timer for - * * flags flags for this timer, see: code\__DEFINES\subsystems.dm - */ -/proc/_addtimer(datum/callback/callback, wait = 0, flags = 0, datum/controller/subsystem/timer/timer_subsystem, file, line) - if (!callback) - CRASH("addtimer called without a callback") - - if (wait < 0) - stack_trace("addtimer called with a negative wait. Converting to [world.tick_lag]") - - if (callback.target != FALSE && QDELETED(callback.target) && !QDESTROYING(callback.target)) - stack_trace("addtimer called with a callback assigned to a qdeleted object. In the future such timers will not \ - be supported and may refuse to run or run with a 0 wait") - - wait = max(Ceilm(wait, world.tick_lag), world.tick_lag) - - if(wait >= INFINITY) - CRASH("Attempted to create timer with INFINITY delay") - - timer_subsystem = timer_subsystem || SStimer - - // Generate hash if relevant for timed events with the TIMER_UNIQUE flag - var/hash - if (flags & TIMER_UNIQUE) - var/list/hashlist = list(callback.target, "(\ref[callback.target])", callback.callable, flags & TIMER_CLIENT_TIME) - if(!(flags & TIMER_NO_HASH_WAIT)) - hashlist += wait - hashlist += callback.params - hash = hashlist.Join("|||||||") - - var/datum/timedevent/hash_timer = timer_subsystem.hashes[hash] - if(hash_timer) - if (hash_timer.spent) // it's pending deletion, pretend it doesn't exist. - hash_timer.hash = null // but keep it from accidentally deleting us - else - if (flags & TIMER_OVERRIDE) - hash_timer.hash = null // no need having it delete it's hash if we are going to replace it - qdel(hash_timer) - else - if (hash_timer.flags & TIMER_STOPPABLE) - . = hash_timer.id - return - else if(flags & TIMER_OVERRIDE) - stack_trace("TIMER_OVERRIDE used without TIMER_UNIQUE") - - var/datum/timedevent/timer = new(callback, wait, flags, timer_subsystem, hash, file && "[file]:[line]") - return timer.id - -/** - * Delete a timer - * - * Arguments: - * * id a timerid or a /datum/timedevent - */ -/proc/deltimer(id, datum/controller/subsystem/timer/timer_subsystem) - if (!id) - return FALSE - if (id == TIMER_ID_NULL) - CRASH("Tried to delete a null timerid. Use TIMER_STOPPABLE flag") - if (istype(id, /datum/timedevent)) - qdel(id) - return TRUE - timer_subsystem = timer_subsystem || SStimer - //id is string - var/datum/timedevent/timer = timer_subsystem.timer_id_dict[id] - if (timer && !timer.spent) - qdel(timer) - return TRUE - return FALSE - -/** - * Get the remaining deciseconds on a timer - * - * Arguments: - * * id a timerid or a /datum/timedevent - */ -/proc/timeleft(id, datum/controller/subsystem/timer/timer_subsystem) - if (!id) - return null - if (id == TIMER_ID_NULL) - CRASH("Tried to get timeleft of a null timerid. Use TIMER_STOPPABLE flag") - if (istype(id, /datum/timedevent)) - var/datum/timedevent/timer = id - return timer.timeToRun - world.time - timer_subsystem = timer_subsystem || SStimer - //id is string - var/datum/timedevent/timer = timer_subsystem.timer_id_dict[id] - if(!timer || timer.spent) - return null - return timer.timeToRun - (timer.flags & TIMER_CLIENT_TIME ? Uptime() : world.time) - -#undef BUCKET_LEN -#undef BUCKET_POS -#undef TIMER_MAX -#undef TIMER_ID_MAX + if (timer.hash) + subsystem.timers_by_hash -= timer.hash + subsystem.queue -= timer + + +/proc/_addtimer(datum/callback/callback, wait, flags, datum/controller/subsystem/timer/subsystem = SStimer, source) + var/datum/timer/timer = callback + if (!istype(timer)) + timer = new + timer.callback = callback + timer.wait = wait + timer.flags = flags + timer.source = source + if (flags & (TIMER_STOPPABLE | TIMER_UNIQUE)) + var/hash = "[flags][callback.identity]" + if (!(flags & TIMER_NO_HASH_WAIT)) + hash = "[hash][wait]" + hash = sha1(hash) + if (flags & TIMER_UNIQUE) + var/datum/timer/match = subsystem.timers_by_hash[hash] + if (match) + if (!(flags & TIMER_OVERRIDE)) + return + subsystem.timers_by_hash[hash] = timer + subsystem.queue -= match + timer.hash = hash + timer.fire_time = timer.wait + world.time + BINARY_INSERT(timer, subsystem.queue, /datum/timer, timer, fire_time, COMPARE_KEY) + return timer.hash diff --git a/code/controllers/subsystems/turf_fire.dm b/code/controllers/subsystems/turf_fire.dm index daa37177d7290..23cdaf1dd43a5 100644 --- a/code/controllers/subsystems/turf_fire.dm +++ b/code/controllers/subsystems/turf_fire.dm @@ -1,12 +1,11 @@ SUBSYSTEM_DEF(turf_fire) name = "Turf Fire" - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME wait = 2 SECONDS flags = SS_NO_INIT var/list/fires = list() /datum/controller/subsystem/turf_fire/fire() - for(var/obj/effect/turf_fire/fire as anything in fires) + for(var/obj/turf_fire/fire as anything in fires) fire.Process() if(MC_TICK_CHECK) return diff --git a/code/controllers/subsystems/typing.dm b/code/controllers/subsystems/typing.dm index 8912b3fdf8183..bcf6c033a61f0 100644 --- a/code/controllers/subsystems/typing.dm +++ b/code/controllers/subsystems/typing.dm @@ -1,7 +1,6 @@ SUBSYSTEM_DEF(typing) name = "Typing" flags = SS_BACKGROUND | SS_NO_INIT - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME wait = 0.5 SECONDS /// The skin control to poll for TYPING_STATE_INPUT status. @@ -35,7 +34,7 @@ SUBSYSTEM_DEF(typing) istyping_input = 0|1, istyping_hotkey = 0|1 ), ...) - See .proc/GetEntry for details. + See PROC_REF(GetEntry for details. */ var/static/list/status = list() @@ -234,3 +233,12 @@ SUBSYSTEM_DEF(typing) SStyping.UpdateVerbState(client, FALSE) if (message) me_verb(message) + +/mob/verb/whisper_wrapper() + set name = ".Whisper" + set hidden = TRUE + SStyping.UpdateVerbState(client, TRUE) + var/message = input("","whisper (text)") as null | text + SStyping.UpdateVerbState(client, FALSE) + if (message) + whisper(message) diff --git a/code/controllers/subsystems/vote.dm b/code/controllers/subsystems/vote.dm index 29217fe03db90..1682434dd8895 100644 --- a/code/controllers/subsystems/vote.dm +++ b/code/controllers/subsystems/vote.dm @@ -1,9 +1,9 @@ SUBSYSTEM_DEF(vote) name = "Voting" wait = 1 SECOND - priority = SS_PRIORITY_VOTE + priority = FIRE_PRIORITY_VOTE flags = SS_NO_TICK_CHECK | SS_KEEP_TIMING - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY + runlevels = RUNLEVELS_PREGAME | RUNLEVELS_GAME var/last_started_time //To enforce delay between votes. var/antag_added //Enforces a maximum of one added antag per round. @@ -89,7 +89,6 @@ SUBSYSTEM_DEF(vote) voting |= C . = list() - . += "Voting Panel" if(active_vote) . += active_vote.interface(C.mob) if(admin) @@ -110,7 +109,7 @@ SUBSYSTEM_DEF(vote) . += "" . += "

" - . += "Close" + . += "Close" return JOINTEXT(.) /datum/controller/subsystem/vote/proc/show_panel(mob/user) @@ -119,8 +118,9 @@ SUBSYSTEM_DEF(vote) if(active_vote) win_x = active_vote.win_x win_y = active_vote.win_y - show_browser(user, interface(user.client),"window=vote;size=[win_x]x[win_y]") - onclose(user, "vote", src) + var/datum/browser/popup = new(user, "vote", "Voting Panel", win_x, win_y) + popup.set_content(interface(user.client)) + popup.open() /datum/controller/subsystem/vote/proc/close_panel(mob/user) show_browser(user, null, "window=vote") diff --git a/code/controllers/subsystems/zcopy.dm b/code/controllers/subsystems/zcopy.dm index 6a910d394476a..d50762273e911 100644 --- a/code/controllers/subsystems/zcopy.dm +++ b/code/controllers/subsystems/zcopy.dm @@ -1,12 +1,13 @@ -#define SHADOWER_DARKENING_FACTOR 0.6 // The multiplication factor for openturf shadower darkness. Lighting will be multiplied by this. -#define SHADOWER_DARKENING_COLOR "#999999" // The above, but as an RGB string for lighting-less turfs. +#define SHADOWER_DARKENING_FACTOR 0.8 // The multiplication factor for openturf shadower darkness. Lighting will be multiplied by this. +#define SHADOWER_DARKENING_COLOR "#00000033" // The above, but as an RGB string for lighting-less turfs. +//Bay can't do multiplicative lighting for zmimic currently so we change alpha, this does mean full lit turfs need a different colour. TODO: Take another look at zmimic render setup SUBSYSTEM_DEF(zcopy) name = "Z-Copy" wait = 1 init_order = SS_INIT_ZCOPY - priority = SS_PRIORITY_ZCOPY - runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY + priority = FIRE_PRIORITY_ZCOPY + runlevels = RUNLEVELS_PREGAME | RUNLEVELS_GAME var/list/queued_turfs = list() var/qt_idex = 1 @@ -181,6 +182,9 @@ SUBSYSTEM_DEF(zcopy) T.z_generation += 1 T.z_queued -= 1 + if (T.above) + T.above.update_mimic() + if (no_mc_tick) CHECK_TICK else if (MC_TICK_CHECK) @@ -257,7 +261,7 @@ SUBSYSTEM_DEF(zcopy) TO.plane = t_target TO.mouse_opacity = initial(TO.mouse_opacity) - T.queue_ao(T.ao_neighbors_mimic == null) // If ao_neighbors hasn't been set yet, we need to do a rebuild + T.queue_ao(isnull(T.ao_neighbors_mimic)) // If ao_neighbors hasn't been set yet, we need to do a rebuild // Explicitly copy turf delegates so they show up properly on below levels. // I think it's possible to get this to work without discrete delegate copy objects, but I'd rather this just work. @@ -268,7 +272,7 @@ SUBSYSTEM_DEF(zcopy) var/atom/movable/openspace/turf_mimic/DC = T.below.mimic_above_copy DC.appearance = T.below DC.mouse_opacity = initial(DC.mouse_opacity) - DC.plane = OPENTURF_MAX_PLANE + DC.plane = OPENTURF_MAX_PLANE - turf_depth - 1 else if (T.below.mimic_above_copy) QDEL_NULL(T.below.mimic_above_copy) @@ -284,7 +288,7 @@ SUBSYSTEM_DEF(zcopy) // Special case: these are merged into the shadower to reduce memory usage. if (object.type == /atom/movable/lighting_overlay) - //T.shadower.copy_lighting(object) + T.shadower.copy_lighting(object) continue if (!object.bound_overlay) // Generate a new overlay if the atom doesn't already have one. @@ -297,6 +301,7 @@ SUBSYSTEM_DEF(zcopy) var/have_performed_fixup = FALSE switch (object.type) + // Layering for recursive mimic needs to be inherited. if (/atom/movable/openspace/mimic) var/atom/movable/openspace/mimic/OOO = object original_type = OOO.mimiced_type @@ -490,7 +495,7 @@ SUBSYSTEM_DEF(zcopy) if (mutated) for (var/i in 1 to length(fixed_overlays)) - if (fixed_overlays[i] == null) + if (isnull(fixed_overlays[i])) fixed_overlays[i] = appearance:overlays[i] // Scan & fix underlays @@ -507,7 +512,7 @@ SUBSYSTEM_DEF(zcopy) if (mutated) for (var/i in 1 to length(fixed_overlays)) - if (fixed_underlays[i] == null) + if (isnull(fixed_underlays[i])) fixed_underlays[i] = appearance:underlays[i] // If we did nothing (no violations), don't bother creating a new appearance @@ -524,7 +529,7 @@ SUBSYSTEM_DEF(zcopy) MA.layer = FLY_LAYER // probably fine if (fixed_overlays) - MA.overlays = fixed_overlays + MA.AddOverlays(fixed_overlays) if (fixed_underlays) MA.underlays = fixed_underlays @@ -533,7 +538,7 @@ SUBSYSTEM_DEF(zcopy) return MA -#define FMT_DEPTH(X) (X == null ? "(null)" : X) +#define FMT_DEPTH(X) (isnull(X) ? "(null)" : X) // This is a dummy object used so overlays can be shown in the analyzer. /atom/movable/openspace/debug @@ -607,7 +612,7 @@ SUBSYSTEM_DEF(zcopy) found_oo += D temp_objects += D - sortTim(found_oo, /proc/cmp_planelayer) + sortTim(found_oo, GLOBAL_PROC_REF(cmp_planelayer)) var/list/atoms_list_list = list() for (var/thing in found_oo) diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index e804a2796e54d..8f2a0c85aa9f9 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -33,8 +33,6 @@ debug_variables(paiController) if("Cameras") debug_variables(cameranet) - if("Transfer Controller") - debug_variables(transfer_controller) if("Gas Data") debug_variables(gas_data) if("Alt Appearance Manager") diff --git a/code/core/math/math.dm b/code/core/math/math.dm index 94aaac224219e..b100a2a421399 100644 --- a/code/core/math/math.dm +++ b/code/core/math/math.dm @@ -24,4 +24,92 @@ var/global/const/HALF_PI = 1.5707963268 /// True if number is a number that is not nan or an infinity. /proc/isfinite(number) - return isnum(number) && number == number && number != POSITIVE_INFINITY && number != NEGATIVE_INFINITY + return isnum(number) && !isnan(number) && !isinf(number) + + +/** +Sample t(0..1) into a quadratic binomial polynomial. +Generally this is useful for shaping rand() distribution. +see tools/polyvis.html for a parameter picker. +*/ +/proc/poly_interp2(t, p0, p1, p2) + var/mt = 1 - t + return p0 * mt * mt +\ + 2 * p1 * mt * t +\ + p2 * t * t + +/** +Sample t(0..1) into a cubic binomial polynomial. +Generally this is useful for shaping rand() distribution. +see tools/polyvis.html for a parameter picker. +More expensive than poly_interp2. +*/ +/proc/poly_interp3(t, p0, p1, p2, p3) + var/t2 = t * t + var/mt = 1 - t + var/mt2 = mt * mt + return p0 * mt2 * mt +\ + 3 * p1 * mt2 * t +\ + 3 * p2 * mt * t2 +\ + p3 * t2 * t + +/** +Sample t(0..1) into a quartic binomial polynomial. +Generally this is useful for shaping rand() distribution. +see tools/polyvis.html for a parameter picker. +More expensive than poly_interp3. +*/ +/proc/poly_interp4(t, p0, p1, p2, p3, p4) + var/t2 = t * t + var/t3 = t2 * t + var/mt = 1 - t + var/mt2 = mt * mt + var/mt3 = mt2 * mt + return p0 * mt3 * mt +\ + 4 * p1 * mt3 * t +\ + 6 * p2 * mt2 * t2 +\ + 4 * p3 * mt * t3 +\ + p4 * t3 * t + + +/** +Get the coordinates that make up a circle of radius on center, packed as (x | y left shift 12). +These coordinates are able to be outside the world: check (v < 1 || v > world.maxV) for safety. +Implements the Bresenham Circle Drawing Algorithm for the actual point picking. +*/ +/proc/get_circle_coordinates(radius, center_x, center_y) + var/static/list/cache = list() + radius = round(radius, 1) + if (radius < 1) + return list(center_x | SHIFTL(center_y, 12)) + center_x = round(center_x, 1) + center_y = round(center_y, 1) + var/list/points = length(cache) ? cache["[radius]"] : null + if (!points) + points = list() + var/y = radius + var/gradient = 3 - 2 * radius + for (var/x = 0 to radius) + points |= list( + radius + x | SHIFTL(radius + y, 12), + radius + x | SHIFTL(radius - y, 12), + radius - x | SHIFTL(radius + y, 12), + radius - x | SHIFTL(radius - y, 12), + radius + y | SHIFTL(radius + x, 12), + radius + y | SHIFTL(radius - x, 12), + radius - y | SHIFTL(radius + x, 12), + radius - y | SHIFTL(radius - x, 12) + ) + if (x >= y) + break + if (gradient < 0) + gradient = gradient + 4 * x + 6 + else + gradient = gradient + 4 * (x - y) + 10 + --y + cache["[radius]"] = points + var/list/result = points.Copy() + var/center = center_x - radius | SHIFTL(center_y - radius, 12) + for (var/i = 1 to length(result)) + result[i] += center + return result diff --git a/code/datums/ai/ai.dm b/code/datums/ai/ai.dm deleted file mode 100644 index 13985849ac62f..0000000000000 --- a/code/datums/ai/ai.dm +++ /dev/null @@ -1,5 +0,0 @@ -/datum/ai - var/name - -/datum/ai/proc/process() - return PROCESS_KILL diff --git a/code/datums/appearances/appearance_manager.dm b/code/datums/appearances/appearance_manager.dm index e83a1d94f772f..78909268ab109 100644 --- a/code/datums/appearances/appearance_manager.dm +++ b/code/datums/appearances/appearance_manager.dm @@ -17,10 +17,10 @@ var/global/singleton/appearance_manager/appearance_manager = new() /singleton/appearance_manager/proc/add_appearance(mob/viewer, datum/appearance_data/ad) var/PriorityQueue/pq = appearances_[viewer] if(!pq) - pq = new/PriorityQueue(/proc/cmp_appearance_data) + pq = new/PriorityQueue(GLOBAL_PROC_REF(cmp_appearance_data)) appearances_[viewer] = pq - GLOB.logged_in_event.register(viewer, src, /singleton/appearance_manager/proc/apply_appearance_images) - GLOB.destroyed_event.register(viewer, src, /singleton/appearance_manager/proc/remove_appearances) + GLOB.logged_in_event.register(viewer, src, TYPE_PROC_REF(/singleton/appearance_manager, apply_appearance_images)) + GLOB.destroyed_event.register(viewer, src, TYPE_PROC_REF(/singleton/appearance_manager, remove_appearances)) pq.Enqueue(ad) reset_appearance_images(viewer) @@ -30,8 +30,8 @@ var/global/singleton/appearance_manager/appearance_manager = new() if(viewer.client) viewer.client.images -= ad.images if(!pq.Length()) - GLOB.logged_in_event.unregister(viewer, src, /singleton/appearance_manager/proc/apply_appearance_images) - GLOB.destroyed_event.register(viewer, src, /singleton/appearance_manager/proc/remove_appearances) + GLOB.logged_in_event.unregister(viewer, src, TYPE_PROC_REF(/singleton/appearance_manager, apply_appearance_images)) + GLOB.destroyed_event.register(viewer, src, TYPE_PROC_REF(/singleton/appearance_manager, remove_appearances)) appearances_ -= viewer /singleton/appearance_manager/proc/remove_appearances(mob/viewer) diff --git a/code/datums/appearances/automatic/_base.dm b/code/datums/appearances/automatic/_base.dm index 79ee7eab33d06..f65b768320fe1 100644 --- a/code/datums/appearances/automatic/_base.dm +++ b/code/datums/appearances/automatic/_base.dm @@ -10,7 +10,7 @@ if(source in appearance_sources) return FALSE appearance_sources[source] = new/datum/appearance_data(images, viewers, priority) - GLOB.destroyed_event.register(source, src, /singleton/appearance_handler/proc/RemoveAltAppearance) + GLOB.destroyed_event.register(source, src, TYPE_PROC_REF(/singleton/appearance_handler, RemoveAltAppearance)) /singleton/appearance_handler/proc/RemoveAltAppearance(source) var/datum/appearance_data/ad = appearance_sources[source] diff --git a/code/datums/appearances/automatic/cardborg.dm b/code/datums/appearances/automatic/cardborg.dm index 71a188a471435..6d24a748d473a 100644 --- a/code/datums/appearances/automatic/cardborg.dm +++ b/code/datums/appearances/automatic/cardborg.dm @@ -17,7 +17,7 @@ var/image/I = get_image_from_backpack(H) AddAltAppearance(H, I, GLOB.silicon_mobs+H) //you look like a robot to robots! (including yourself because you're totally a robot) - GLOB.logged_in_event.register_global(src, /singleton/appearance_handler/cardborg/proc/mob_joined) // Duplicate registration request are handled for us + GLOB.logged_in_event.register_global(src, TYPE_PROC_REF(/singleton/appearance_handler/cardborg, mob_joined)) // Duplicate registration request are handled for us /singleton/appearance_handler/cardborg/proc/item_removed(obj/item/item, mob/user) if((istype(item, /obj/item/clothing/suit/cardborg) || istype(item, /obj/item/clothing/head/cardborg)) || istype(item, /obj/item/storage/backpack)) @@ -36,7 +36,7 @@ var/image/I = image(icon = 'icons/mob/robots.dmi', icon_state = ca.icon_state, loc = H) I.override = 1 - I.overlays += image(icon = 'icons/mob/robots.dmi', icon_state = "eyes-[ca.icon_state]") //gotta look realistic + I.AddOverlays(image(icon = 'icons/mob/robots.dmi', icon_state = "eyes-[ca.icon_state]")) return I /singleton/appearance_handler/cardborg/proc/init_appearances() @@ -75,10 +75,10 @@ /singleton/cardborg_appearance/science icon_state = "droid-science" - backpack_type = /obj/item/storage/backpack/toxins + backpack_type = /obj/item/storage/backpack/corpsci /singleton/cardborg_appearance/science/satchel - backpack_type = /obj/item/storage/backpack/satchel/tox + backpack_type = /obj/item/storage/backpack/satchel/corpsci /singleton/cardborg_appearance/security icon_state = "securityrobot" diff --git a/code/datums/beam.dm b/code/datums/beam.dm index 5e2591f36d777..1c57d865874d6 100644 --- a/code/datums/beam.dm +++ b/code/datums/beam.dm @@ -24,11 +24,11 @@ ///The beam will qdel if it's longer than this many tiles. var/max_distance = 0 ///the objects placed in the elements list - var/beam_type = /obj/effect/ebeam + var/beam_type = /obj/ebeam ///This is used as the visual_contents of beams, so you can apply one effect to this and the whole beam will look like that. never gets deleted on redrawing. - var/obj/effect/ebeam/visuals + var/obj/ebeam/visuals -/datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=INFINITY,maxdistance=INFINITY,btype = /obj/effect/ebeam) +/datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=INFINITY,maxdistance=INFINITY,btype = /obj/ebeam) origin = beam_origin target = beam_target max_distance = maxdistance @@ -47,10 +47,12 @@ visuals.icon_state = icon_state Draw() //Register for movement events - GLOB.moved_event.register(origin, src, .proc/redrawing) - GLOB.moved_event.register(target, src, .proc/redrawing) - GLOB.destroyed_event.register(origin, src, .proc/redrawing) - GLOB.destroyed_event.register(target, src, .proc/redrawing) + if(istype(origin, /atom/movable)) + GLOB.moved_event.register(origin, src, PROC_REF(redrawing)) + if(istype(target, /atom/movable)) + GLOB.moved_event.register(target, src, PROC_REF(redrawing)) + GLOB.destroyed_event.register(origin, src, PROC_REF(redrawing)) + GLOB.destroyed_event.register(target, src, PROC_REF(redrawing)) /** * Triggered by events set up when the beam is set up. If it's still sane to create a beam, it removes the old beam, creates a new one. Otherwise it kills the beam. @@ -63,17 +65,17 @@ /datum/beam/proc/redrawing(atom/movable/mover, atom/oldloc, new_loc) if(!QDELETED(origin) && !QDELETED(target) && get_dist(origin,target)32) a = Pixel_x > 0 ? round(Pixel_x/32) : Ceilm(Pixel_x/32, 1) @@ -135,20 +137,27 @@ X.pixel_y = Pixel_y CHECK_TICK -/obj/effect/ebeam - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE +/obj/ebeam + mouse_opacity = MOUSE_OPACITY_TRANSPARENT anchored = TRUE var/datum/beam/owner -/obj/effect/ebeam/Destroy() +/obj/ebeam/Destroy() owner = null return ..() -/obj/effect/ebeam/singularity_pull() +/obj/ebeam/singularity_pull() return -/obj/effect/ebeam/singularity_act() +/obj/ebeam/singularity_act() return +//Equivalent to /obj/ebeam, except it also adds an emissive layer +/obj/ebeam/emissive/on_update_icon() + . = ..() + var/mutable_appearance/emissive_overlay = emissive_appearance(icon, icon_state, src) + var/mutable_appearance/glow_overlay = overlay_image(icon, icon_state, plane = LIGHTING_LAMPS_PLANE) // SS220 Bloom-Light + AddOverlays(list(emissive_overlay, glow_overlay)) // SS220 Bloom-Light + /** * This is what you use to start a beam. Example: origin.Beam(target, args). **Store the return of this proc if you don't set maxdist or time, you need it to delete the beam.** * @@ -161,7 +170,7 @@ * - maxdistance: how far the beam will go before stopping itself. Used mainly for two things: preventing lag if the beam may go in that direction and setting a range to abilities that use beams. * - beam_type: The type of your custom beam. This is for adding other wacky stuff for your beam only. Most likely, you won't (and shouldn't) change it. */ -/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=INFINITY,maxdistance=INFINITY,beam_type=/obj/effect/ebeam) +/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=INFINITY,maxdistance=INFINITY,beam_type=/obj/ebeam) var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type) - invoke_async(newbeam, /datum/beam/.proc/Start) + invoke_async(newbeam, TYPE_PROC_REF(/datum/beam, Start)) return newbeam diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 03d7cbaeeb204..730d729410db1 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -4,10 +4,10 @@ var/window_id // window_id is used as the window name for browse and onclose var/width = 0 var/height = 0 - var/atom/ref = null + var/weakref/ref = null var/window_options = "focus=0;can_close=1;can_minimize=1;can_maximize=0;can_resize=1;titlebar=1;" // window option is set using window_id - var/stylesheets[0] - var/scripts[0] + var/list/stylesheets = list() + var/list/scripts = list() var/title_image var/head_elements var/body_elements @@ -16,7 +16,15 @@ var/title_buttons = "" -/datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, atom/nref = null) +/datum/browser/Destroy() + if (user) + user.unset_machine() + user = null + ref = null + return ..() + + +/datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, datum/nref = null) user = nuser window_id = nwindow_id @@ -27,10 +35,7 @@ if (nheight) height = nheight if (nref) - ref = nref - // If a client exists, but they have disabled fancy windowing, disable it! - if(user && user.client && user.client.get_preference_value(/datum/client_preference/browser_style) == GLOB.PREF_PLAIN) - return + ref = weakref(nref) add_stylesheet("common", 'html/browser/common.css') // this CSS sheet is common to all UIs /datum/browser/proc/set_title(ntitle) @@ -45,9 +50,6 @@ /datum/browser/proc/set_window_options(nwindow_options) window_options = nwindow_options -/datum/browser/proc/set_title_image(ntitle_image) - //title_image = ntitle_image - /datum/browser/proc/add_stylesheet(name, file) stylesheets[name] = file @@ -79,7 +81,7 @@ return {" - + [head_content] @@ -104,15 +106,15 @@ [get_footer()] "} -/datum/browser/proc/open(use_onclose = 1) +/datum/browser/proc/open(use_onclose = TRUE) var/window_size = "" if (width && height) window_size = "size=[width]x[height];" show_browser(user, get_content(), "window=[window_id];[window_size][window_options]") if (use_onclose) - onclose(user, window_id, ref) + onclose(user, window_id, ref ? ref.resolve() : null) -/datum/browser/proc/update(force_open = 0, use_onclose = 1) +/datum/browser/proc/update(force_open = FALSE, use_onclose = TRUE) if(force_open) open(use_onclose) else @@ -121,24 +123,6 @@ /datum/browser/proc/close() close_browser(user, "window=[window_id]") -// This will allow you to show an icon in the browse window -// This is added to mob so that it can be used without a reference to the browser object -// There is probably a better place for this... -/mob/proc/browse_rsc_icon(icon, icon_state, dir = -1) - /* - var/icon/I - if (dir >= 0) - I = new /icon(icon, icon_state, dir) - else - I = new /icon(icon, icon_state) - dir = "default" - - var/filename = "[ckey("[icon]_[icon_state]_[dir]")].png" - send_rsc(src, I, filename) - return filename - */ - - // Registers the on-close verb for a browse window (client/verb/.windowclose) // this will be called when the close-button of a window is pressed. // @@ -149,48 +133,40 @@ // e.g. code is : show_browser(user, text, "window=fred") // then use : onclose(user, "fred") // -// Optionally, specify the "ref" parameter as the controlled atom (usually src) -// to pass a "close=1" parameter to the atom's Topic() proc for special handling. +// Optionally, specify the "ref" parameter as the controlled datum (usually src) +// to pass a "close=1" parameter to the datum's Topic() proc for special handling. // Otherwise, the user mob's machine var will be reset directly. // -/proc/onclose(mob/user, windowid, atom/ref=null) - if(!user || !user.client) return +/proc/onclose(mob/user, windowid, datum/ref = null) + if(!user || !user.client) + return + var/param = "null" if(ref) - param = "\ref[ref]" + param = ref(ref) spawn(2) - if(!user.client) return - winset(user, windowid, "on-close=\".windowclose [param]\"") - -// log_debug("OnClose [user]: [windowid] : ["on-close=\".windowclose [param]\""]") - + if(!user.client) + return + winset(user, windowid, "on-close=\".windowclose [param]\"") // the on-close client verb // called when a browser popup window is closed after registering with proc/onclose() -// if a valid atom reference is supplied, call the atom's Topic() with "close=1" +// if a valid datum reference is supplied, call the datum's Topic() with "close=1" // otherwise, just reset the client mob's machine var. -// -/client/verb/windowclose(atomref as text) - set hidden = 1 // hide this verb from the user's panel +/client/verb/windowclose(datum_ref as text) + set hidden = TRUE // hide this verb from the user's panel set name = ".windowclose" // no autocomplete on cmd line -// log_debug("windowclose: [atomref]") - - if(atomref!="null") // if passed a real atomref - var/hsrc = locate(atomref) // find the reffed atom + if(datum_ref != "null") // if passed a real datum + var/hsrc = locate(datum_ref) // find the reffed datum if(hsrc) -// log_debug("[src] Topic [href] [hsrc]") - usr = src.mob - src.Topic("close=1", list("close"="1"), hsrc) // this will direct to the atom's - return // Topic() proc via client.Topic() + src.Topic("close=1", list("close"="1"), hsrc) // this will direct to the datum's + return // no atomref specified (or not found) // so just reset the user mob's machine var if(src && src.mob) -// log_debug("[src] was [src.mob.machine], setting to null") - src.mob.unset_machine() - return diff --git a/code/datums/callbacks.dm b/code/datums/callbacks.dm index bea75c1658d2a..1d29e5d6cd2cf 100644 --- a/code/datums/callbacks.dm +++ b/code/datums/callbacks.dm @@ -3,7 +3,7 @@ Callbacks wrap a target, callable, and arguments to pass. See the dm reference for call(). When the target is GLOBAL_PROC, the callable is global - otherwise it is a datum (or dead) reference. Callbacks are created with the new keyword via a global alias like: -- var/datum/callback/instance = new Callback(GLOBAL_PROC, /proc/get_area, someObject) +- var/datum/callback/instance = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(get_area), someObject) Callbacks are thin - they should be used with invoke or invoke_async. ** Invocation @@ -17,18 +17,18 @@ on the first sleep, and so should be used only where results are not required. Callables are proc names or proc references, with references preferred for safety (in most cases). These vary between 515 and older major versions: Before 515: -- .proc/name refers to the last override of name on target, OR the global proc name. +- PROC_REF(name refers to the last override of name on target, OR the global proc name. After 515: - src::name() must be used for the last override, or ::name() for the global. - nameof() is available at compile time to resolve safe proc names like nameof(/datum::fooBehavior()). - This can be preferable to direct refs in complex cases. +This can be preferable to direct refs in complex cases. A specific version of a proc may be called by fully specifying its type depth, like -invoke(myLivingMob, /mob/living/proc/handle_vision) +invoke(myLivingMob, TYPE_PROC_REF(/mob/living, handle_vision) ** Timers Timers accept callbacks as their first argument. For full timer documentation, see the timedevent datum. For example: -addTimer(new Callback(myMob, myMob::drop_l_hand()), 10 SECONDS) +addTimer(CALLBACK(myMob, proc_ref(drop_l_hand())), 10 SECONDS) */ var/global/const/GLOBAL_PROC = FALSE diff --git a/code/datums/category.dm b/code/datums/category.dm index ba088b19affaa..f73fa5179a6ca 100644 --- a/code/datums/category.dm +++ b/code/datums/category.dm @@ -2,26 +2,30 @@ * Category Collection * **********************/ /datum/category_collection - var/category_group_type // Type of categories to initialize - var/list/datum/category_group/categories // List of initialized categories - var/list/datum/category_group/categories_by_name // Associative list of initialized categories, keyed by name + /// Type of categories to initialize + var/category_group_type + /// Lazy list of initialized categories + var/list/datum/category_group/categories + /// Lazy associative list of initialized categories, keyed by name + var/list/datum/category_group/categories_by_name /datum/category_collection/New() ..() - categories = new() - categories_by_name = new() - for(var/category_type in typesof(category_group_type)) - var/datum/category_group/category = category_type - if(initial(category.name)) - category = new category(src) - categories += category - categories_by_name[category.name] = category - categories = dd_sortedObjectList(categories) + + for(var/datum/category_group/category_type as anything in typesof(category_group_type)) + if(!initial(category_type.name)) + continue + + var/datum/category_group/category = new category_type(src) + LAZYADD(categories, category) + LAZYADDASSOC(categories_by_name, category.name, category) + + if(LAZYLEN(categories)) + categories = dd_sortedObjectList(categories) /datum/category_collection/Destroy() - for(var/category in categories) - qdel(category) - categories.Cut() + QDEL_NULL_LIST(categories) + LAZYCLEARLIST(categories_by_name) return ..() /****************** @@ -37,24 +41,21 @@ /datum/category_group/New(datum/category_collection/cc) ..() collection = cc - items = new() - items_by_name = new() + for(var/datum/category_item/item_type as anything in typesof(category_item_type)) + if(!initial(item_type.name)) + continue - for(var/item_type in typesof(category_item_type)) - var/datum/category_item/item = item_type - if(initial(item.name)) - item = new item(src) - items += item - items_by_name[item.name] = item + var/datum/category_item/item = new item_type(src) + LAZYADD(items, item) + LAZYSET(items_by_name, item.name, item) // For whatever reason dd_insertObjectList(items, item) doesn't insert in the correct order // If you change this, confirm that character setup doesn't become completely unordered. - items = dd_sortedObjectList(items) + if(LAZYLEN(items)) + items = dd_sortedObjectList(items) /datum/category_group/Destroy() - for(var/item in items) - qdel(item) - items.Cut() + QDEL_NULL_LIST(items) collection = null return ..() diff --git a/code/datums/chat_message.dm b/code/datums/chat_message.dm new file mode 100644 index 0000000000000..9dd56c24d35b1 --- /dev/null +++ b/code/datums/chat_message.dm @@ -0,0 +1,394 @@ +/// How long the chat message's spawn-in animation will occur for +#define CHAT_MESSAGE_SPAWN_TIME 0.2 SECONDS +/// How long the chat message will exist prior to any exponential decay +#define CHAT_MESSAGE_LIFESPAN 5 SECONDS +/// How long the chat message's end of life fading animation will occur for +#define CHAT_MESSAGE_EOL_FADE 0.7 SECONDS +/// Grace period for fade before we actually delete the chat message +#define CHAT_MESSAGE_GRACE_PERIOD 0.2 SECONDS + +/// Factor of how much the message index (number of messages) will account to exponential decay +#define CHAT_MESSAGE_EXP_DECAY 0.7 +/// Factor of how much height will account to exponential decay +#define CHAT_MESSAGE_HEIGHT_DECAY 0.9 +/// Approximate height in pixels of an 'average' line, used for height decay +#define CHAT_MESSAGE_APPROX_LHEIGHT 11 + +/// Max default runechat message length in characters +#define CHAT_MESSAGE_LENGTH 68 +/// Max extended runechat message length in characters +#define CHAT_MESSAGE_EXT_LENGTH 150 +/// Max default runechat message width in pixels +#define CHAT_MESSAGE_WIDTH 96 +/// Max extended runechat message width in pixels +#define CHAT_MESSAGE_EXT_WIDTH 128 + +// Tweak these defines to change the available color ranges +#define CM_COLOR_SAT_MIN 0.6 +#define CM_COLOR_SAT_MAX 0.7 +#define CM_COLOR_LUM_MIN 0.65 +#define CM_COLOR_LUM_MAX 0.8 + +/// Macro from Lummox used to get height from a MeasureText proc. +/// resolves the MeasureText() return value once, then resolves the height, then sets return_var to that. +#define WXH_TO_HEIGHT(measurement, return_var) \ + do { \ + var/_measurement = measurement; \ + return_var = text2num(copytext(_measurement, findtextEx(_measurement, "x") + 1)); \ + } while(FALSE); + +// Cached runechat icon +GLOBAL_LIST_EMPTY(runechat_image_cache) + +/hook/startup/proc/runechat_images() + var/image/radio_image = image('icons/chaticons.dmi', icon_state = "radio") + GLOB.runechat_image_cache["radio"] = radio_image + + var/image/emote_image = image('icons/chaticons.dmi', icon_state = "emote") + GLOB.runechat_image_cache["emote"] = emote_image + + return TRUE + +/** + * # Chat Message Overlay + * + * Datum for generating a message overlay on the map + * Ported from TGStation; https://github.com/tgstation/tgstation/pull/50608, author: bobbahbrown + */ +/datum/chatmessage + /// The visual element of the chat message + var/image/message + /// The location in which the message is appearing + var/atom/message_loc + /// The client who heard this message + var/client/owned_by + /// Contains the scheduled destruction time, used for scheduling EOL + var/scheduled_destruction + /// Contains the time that the EOL for the message will be complete, used for qdel scheduling + var/eol_complete + /// Contains the approximate amount of lines for height decay + var/approx_lines + /// Contains the reference to the next chatmessage in the bucket, used by runechat subsystem + var/datum/chatmessage/next + /// Contains the reference to the previous chatmessage in the bucket, used by runechat subsystem + var/datum/chatmessage/prev + /// The current index used for adjusting the layer of each sequential chat message such that recent messages will overlay older ones + var/static/current_z_idx = 0 + /// When we started animating the message + var/animate_start = 0 + /// Our animation lifespan, how long this message will last + var/animate_lifespan = 0 + +/** + * Constructs a chat message overlay + * + * Arguments: + * * text - The text content of the overlay + * * target - The target atom to display the overlay at + * * owner - The mob that owns this overlay, only this mob will be able to view it + * * extra_classes - Extra classes to apply to the span that holds the text + * * lifespan - The lifespan of the message in deciseconds + */ +/datum/chatmessage/New(text, atom/target, mob/owner, list/extra_classes = list(), lifespan = CHAT_MESSAGE_LIFESPAN) + . = ..() + if (!istype(target)) + crash_with("Invalid target given for chatmessage") + qdel(src) + return + if(QDELETED(owner) || !istype(owner) || !owner.client) + crash_with("[src.type] created with [isnull(owner) ? "null" : "invalid"] mob owner") + qdel(src) + return + invoke_async(src, PROC_REF(generate_image), text, target, owner, extra_classes, lifespan) + +/datum/chatmessage/Destroy() + if (!QDELING(owned_by)) + if(world.timeofday < animate_start + animate_lifespan) + crash_with("Del'd before we finished fading, with [(animate_start + animate_lifespan) - world.timeofday] time left") + + if (owned_by.seen_messages) + LAZYREMOVEASSOC(owned_by.seen_messages, message_loc, src) + owned_by.images.Remove(message) + + owned_by = null + message_loc = null + message = null + return ..() + +/datum/chatmessage/proc/unregister_and_qdel_self() + GLOB.destroyed_event.unregister(owned_by, src, PROC_REF(unregister_and_qdel_self)) + qdel_self() + + +/** + * Generates a chat message image representation + * + * Arguments: + * * text - The text content of the overlay + * * target - The target atom to display the overlay at + * * owner - The mob that owns this overlay, only this mob will be able to view it + * * extra_classes - Extra classes to apply to the span that holds the text + * * lifespan - The lifespan of the message in deciseconds + */ +/datum/chatmessage/proc/generate_image(text, atom/target, mob/owner, list/extra_classes, lifespan) + // Register client who owns this message + owned_by = owner.client + + // Remove spans in the message from things like the recorder + var/static/regex/span_check = new(@"<\/?span[^>]*>", "gi") + text = replacetext(text, span_check, "") + + // Clip message + var/extra_length = owned_by.get_preference_value(/datum/client_preference/runechat_messages_length) == GLOB.PREF_LONG + var/maxlen = extra_length ? CHAT_MESSAGE_EXT_LENGTH : CHAT_MESSAGE_LENGTH + var/msgwidth = extra_length ? CHAT_MESSAGE_EXT_WIDTH : CHAT_MESSAGE_WIDTH + if (length_char(text) > maxlen) + text = copytext_char(text, 1, maxlen + 1) + "..." // BYOND index moment + + // Calculate target color if not already present + if (!target.chat_color || target.chat_color_name != target.name) + target.chat_color = colorize_string(target.name) + target.chat_color_darkened = colorize_string(target.name, 0.85, 0.85) + target.chat_color_name = target.name + + // Get rid of any URL schemes that might cause BYOND to automatically wrap something in an anchor tag + var/static/regex/url_scheme = new(@"[A-Za-z][A-Za-z0-9+-\.]*:\/\/", "g") + text = replacetext(text, url_scheme, "") + + // Reject whitespace + var/static/regex/whitespace = new(@"^\s*$") + if (whitespace.Find(text)) + qdel(src) + return + + // If haven't been deleted, watch for the owner + GLOB.destroyed_event.register(owned_by, src, PROC_REF(unregister_and_qdel_self)) + + // Non mobs speakers can be small + if (!ismob(target)) + extra_classes |= "small" + + // Why are you yelling? + if(copytext_char(text, -2) == "!!") + extra_classes |= "yell" + + // Append radio icon if from a virtual speaker + if (extra_classes.Find("virtual-speaker")) + var/image/r_icon = image('icons/chaticons.dmi', icon_state = "radio") + text = "\icon[r_icon] " + text + else if (extra_classes.Find("emote")) + var/image/r_icon = image('icons/chaticons.dmi', icon_state = "emote") + text = "\icon[r_icon] " + text + + // We dim italicized text to make it more distinguishable from regular text + var/tgt_color = target.chat_color + if (extra_classes.Find("italics") || extra_classes.Find("emote")) + tgt_color = target.chat_color_darkened + + // Approximate text height + // Note we have to replace HTML encoded metacharacters otherwise MeasureText will return a zero height + // BYOND Bug #2563917 + // Construct text + var/static/regex/html_metachars = new(@"&[A-Za-z]{1,7};", "g") + var/complete_text = "[text]" + var/mheight + WXH_TO_HEIGHT(owned_by.MeasureText(replacetext(complete_text, html_metachars, "m"), null, msgwidth), mheight) + + invoke_async(src, PROC_REF(finish_image_generation), mheight, target, owner, complete_text, lifespan) + +/// Finishes the image generation after the MeasureText() call in generate_image(). +/// Necessary because after that call the proc can resume at the end of the tick and cause overtime. +/datum/chatmessage/proc/finish_image_generation(mheight, atom/target, mob/owner, complete_text, lifespan) + var/rough_time = world.timeofday + approx_lines = max(1, mheight / CHAT_MESSAGE_APPROX_LHEIGHT) + + // Translate any existing messages upwards, apply exponential decay factors to timers + message_loc = isturf(target) ? target : get_atom_on_turf(target) + if (owned_by.seen_messages) + var/idx = 1 + var/combined_height = approx_lines + for(var/datum/chatmessage/m as anything in owned_by.seen_messages[message_loc]) + combined_height += m.approx_lines + + var/time_spent = rough_time - m.animate_start + var/time_before_fade = m.animate_lifespan - CHAT_MESSAGE_EOL_FADE + + // When choosing to update the remaining time we have to be careful not to update the + // scheduled time once the EOL has been executed. + if (time_spent >= time_before_fade) + animate(m.message, pixel_y = m.message.pixel_y + mheight, time = CHAT_MESSAGE_SPAWN_TIME, flags = ANIMATION_PARALLEL) + continue + + var/remaining_time = time_before_fade * (CHAT_MESSAGE_EXP_DECAY ** idx++) * (CHAT_MESSAGE_HEIGHT_DECAY ** combined_height) + // Ensure we don't accidentially spike alpha up or something silly like that + m.message.alpha = m.get_current_alpha(time_spent) + if (remaining_time > 0) + // Stay faded in for a while, then + animate(m.message, alpha = 255, remaining_time) + // Fade out + animate(alpha = 0, time = CHAT_MESSAGE_EOL_FADE) + m.animate_lifespan = remaining_time + CHAT_MESSAGE_EOL_FADE + else + // Your time has come my son + animate(alpha = 0, time = CHAT_MESSAGE_EOL_FADE) + // We run this after the alpha animate, because we don't want to interrup it, but also don't want to block it by running first + // Sooo instead we do this. bit messy but it fuckin works + animate(m.message, pixel_y = m.message.pixel_y + mheight, time = CHAT_MESSAGE_SPAWN_TIME, flags = ANIMATION_PARALLEL) + + // Build message image + message = image(loc = message_loc, layer = ABOVE_HUMAN_LAYER) + message.plane = RUNECHAT_PLANE + message.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART + message.alpha = 0 + message.pixel_y = target.maptext_height + message.maptext_width = CHAT_MESSAGE_WIDTH + message.maptext_height = mheight * 1.25 + message.maptext_x = (CHAT_MESSAGE_WIDTH - owner.bound_width) * -0.5 + message.maptext = complete_text + + // View the message + LAZYADDASSOCLIST(owned_by.seen_messages, message_loc, src) + owned_by.images |= message + + // Fade in + animate(message, alpha = 255, time = CHAT_MESSAGE_SPAWN_TIME) + var/time_before_fade = lifespan - CHAT_MESSAGE_SPAWN_TIME - CHAT_MESSAGE_EOL_FADE + + // Stay faded in + animate(alpha = 255, time = time_before_fade) + + // Fade out + animate(alpha = 0, time = CHAT_MESSAGE_EOL_FADE) + + // Desctruct yourself + addtimer(CALLBACK(src, PROC_REF(unregister_and_qdel_self)), lifespan + CHAT_MESSAGE_GRACE_PERIOD, TIMER_UNIQUE|TIMER_OVERRIDE) + +/datum/chatmessage/proc/get_current_alpha(time_spent) + if(time_spent < CHAT_MESSAGE_SPAWN_TIME) + return (time_spent / CHAT_MESSAGE_SPAWN_TIME) * 255 + + var/time_before_fade = animate_lifespan - CHAT_MESSAGE_EOL_FADE + if(time_spent <= time_before_fade) + return 255 + + return (1 - ((time_spent - time_before_fade) / CHAT_MESSAGE_EOL_FADE)) * 255 + +/** + * Creates a message overlay at a defined location for a given speaker + * + * Arguments: + * * speaker - The atom who is saying this message + * * message - The text content of the message + * * italics - Decides if this should be small or not, as generally italics text are for whisper/radio overhear + * * existing_extra_classes - Additional classes to add to the message + */ +/mob/proc/create_chat_message(atom/movable/speaker, message, italics, list/existing_extra_classes, audible = TRUE) + if(!client) + return + + if (!config.runechat_enabled) + return + + // Doesn't want to hear + if(ismob(speaker) && client.get_preference_value(/datum/client_preference/runechat_mob) != GLOB.PREF_YES) + return + if(isobj(speaker) && client.get_preference_value(/datum/client_preference/runechat_obj) != GLOB.PREF_YES) + return + + // Incapable of receiving + if((audible && is_deaf()) || (!audible && is_blind())) + return + + // Check for virtual speakers (aka hearing a message through a radio) + if(existing_extra_classes.Find("radio")) + return + + /* Not currently necessary + message = strip_html_properly(message) + if(!message) + return + */ + + var/list/extra_classes = list() + extra_classes += existing_extra_classes + + if(italics) + extra_classes |= "italics" + + // Display visual above source + new /datum/chatmessage(message, speaker, src, extra_classes) + +/** + * Gets a color for a name, will return the same color for a given string consistently within a round.atom + * + * Note that this proc aims to produce pastel-ish colors using the HSL colorspace. These seem to be favorable for displaying on the map. + * + * Arguments: + * * name - The name to generate a color for + * * sat_shift - A value between 0 and 1 that will be multiplied against the saturation + * * lum_shift - A value between 0 and 1 that will be multiplied against the luminescence + */ +/datum/chatmessage/proc/colorize_string(name, sat_shift = 1, lum_shift = 1) + // seed to help randomness + var/static/rseed = rand(1,26) + + // get hsl using the selected 6 characters of the md5 hash + var/hash = copytext(md5(name), rseed, rseed + 6) + var/h = hex2num(copytext(hash, 1, 3)) * (360 / 255) + var/s = SHIFTR(hex2num(copytext(hash, 3, 5)), 2) * ((CM_COLOR_SAT_MAX - CM_COLOR_SAT_MIN) / 63) + CM_COLOR_SAT_MIN + var/l = SHIFTR(hex2num(copytext(hash, 5, 7)), 2) * ((CM_COLOR_LUM_MAX - CM_COLOR_LUM_MIN) / 63) + CM_COLOR_LUM_MIN + + // adjust for shifts + s *= clamp(sat_shift, 0, 1) + l *= clamp(lum_shift, 0, 1) + + // convert to rgba + var/h_int = round(h/60) // mapping each section of H to 60 degree sections + var/c = (1 - abs(2 * l - 1)) * s + var/x = c * (1 - abs((h / 60) % 2 - 1)) + var/m = l - c * 0.5 + x = (x + m) * 255 + c = (c + m) * 255 + m *= 255 + switch(h_int) + if(0) + return rgb(c,x,m) + if(1) + return rgb(x,c,m) + if(2) + return rgb(m,c,x) + if(3) + return rgb(m,x,c) + if(4) + return rgb(x,m,c) + if(5) + return rgb(c,m,x) + +/atom/proc/runechat_message(message, range = world.view, italics, list/classes = list(), audible = TRUE) + var/list/hearing_mobs = list() + var/list/objs = list() + get_mobs_and_objs_in_view_fast(get_turf(src), range, hearing_mobs, objs, checkghosts = FALSE) + + for(var/mob in hearing_mobs) + var/mob/M = mob + if(!M.client) + continue + M.create_chat_message(src, message, italics, classes, audible) + + +#undef CHAT_MESSAGE_SPAWN_TIME +#undef CHAT_MESSAGE_LIFESPAN +#undef CHAT_MESSAGE_EOL_FADE +#undef CHAT_MESSAGE_GRACE_PERIOD +#undef CHAT_MESSAGE_EXP_DECAY +#undef CHAT_MESSAGE_HEIGHT_DECAY +#undef CHAT_MESSAGE_APPROX_LHEIGHT +#undef CHAT_MESSAGE_LENGTH +#undef CHAT_MESSAGE_EXT_LENGTH +#undef CHAT_MESSAGE_WIDTH +#undef CHAT_MESSAGE_EXT_WIDTH + +#undef CM_COLOR_SAT_MIN +#undef CM_COLOR_SAT_MAX +#undef CM_COLOR_LUM_MIN +#undef CM_COLOR_LUM_MAX diff --git a/code/datums/chat_payload.dm b/code/datums/chat_payload.dm new file mode 100644 index 0000000000000..fd35bbc4eecf6 --- /dev/null +++ b/code/datums/chat_payload.dm @@ -0,0 +1,16 @@ +/// Stores information about a chat payload +/datum/chat_payload + /// Sequence number of this payload + var/sequence = 0 + /// Message we are sending + var/list/content + /// Resend count + var/resends = 0 + +/// Converts the chat payload into a JSON string +/datum/chat_payload/proc/into_message() + return "{\"sequence\":[sequence],\"content\":[json_encode(content)]}" + +/// Returns an HTML-encoded message from our contents. +/datum/chat_payload/proc/get_content_as_html() + return message_to_html(content) diff --git a/code/datums/communication/dsay.dm b/code/datums/communication/dsay.dm index 464a31c8cf947..647b3aec07d8d 100644 --- a/code/datums/communication/dsay.dm +++ b/code/datums/communication/dsay.dm @@ -47,7 +47,7 @@ return FALSE if(istype(C) && M.is_key_ignored(C.key)) return FALSE - if (M.client.holder) + if (M.client && M.client.holder) return TRUE if(M.stat != DEAD) return FALSE diff --git a/code/datums/communication/looc.dm b/code/datums/communication/looc.dm index 24dda1415f433..af87c8015046d 100644 --- a/code/datums/communication/looc.dm +++ b/code/datums/communication/looc.dm @@ -18,7 +18,7 @@ /singleton/communication_channel/ooc/looc/do_communicate(client/C, message) var/mob/M = C.mob ? C.mob.get_looc_mob() : null - var/list/listening_hosts = hosts_in_view_range(M) + var/list/listening_hosts = hearers_in_range(M) var/list/listening_clients = list() var/key = C.key diff --git a/code/datums/communication/ooc.dm b/code/datums/communication/ooc.dm index 426b0ff12fac1..7eb32f36b5044 100644 --- a/code/datums/communication/ooc.dm +++ b/code/datums/communication/ooc.dm @@ -33,11 +33,12 @@ var/can_badmin = !is_stealthed && can_select_ooc_color(C) && (C.prefs.ooccolor != initial(C.prefs.ooccolor)) var/ooc_color = C.prefs.ooccolor + var/ckey_prefix = C.donator_info.get_decorated_message(C, "[C.key]:") for(var/client/target in GLOB.clients) if(target.is_key_ignored(C.key)) // If we're ignored by this person, then do nothing. continue - var/sent_message = "[create_text_tag("ooc", "OOC:", target)] [C.key]: [SPAN_CLASS("message linkify", "[message]")]" + var/sent_message = "[create_text_tag("ooc", "OOC:", target)] [ckey_prefix] [SPAN_CLASS("message linkify", "[message]")]" if(can_badmin) receive_communication(C, target, SPAN_COLOR(ooc_color, SPAN_CLASS("ooc", sent_message))) else diff --git a/code/datums/communication/pray.dm b/code/datums/communication/pray.dm index be382d0fd7a3f..c1856a9b1c158 100644 --- a/code/datums/communication/pray.dm +++ b/code/datums/communication/pray.dm @@ -6,7 +6,7 @@ mute_setting = MUTE_PRAY /singleton/communication_channel/pray/do_communicate(mob/communicator, message, speech_method_type) - var/image/cross = image('icons/obj/storage.dmi',"bible") + var/image/cross = image('icons/obj/books.dmi',"bible") for(var/mob/M in GLOB.player_list) if(!M.client) continue diff --git a/code/datums/components/COMPONENT_TEMPLATE.md b/code/datums/components/COMPONENT_TEMPLATE.md new file mode 100644 index 0000000000000..7b08205888522 --- /dev/null +++ b/code/datums/components/COMPONENT_TEMPLATE.md @@ -0,0 +1,55 @@ + +# Template file for your new component + +See _component.dm for detailed explanations + +```dm +/datum/component/mycomponent + //can_transfer = TRUE // Must have PostTransfer + //dupe_mode = COMPONENT_DUPE_ALLOWED // code/__DEFINES/dcs/flags.dm + var/myvar + +/datum/component/mycomponent/Initialize(myargone, myargtwo) + if(myargone) + myvar = myargone + if(myargtwo) + send_to_playing_players(myargtwo) + +/datum/component/mycomponent/RegisterWithParent() + RegisterSignal(parent, COMSIG_NOT_REAL, PROC_REF(signalproc)) // RegisterSignal can take a signal name by itself, + RegisterSignal(parent, list(COMSIG_NOT_REAL_EITHER, COMSIG_ALMOST_REAL), PROC_REF(otherproc)) // or a list of them to assign to the same proc + +/datum/component/mycomponent/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_NOT_REAL) // UnregisterSignal has similar behavior + UnregisterSignal(parent, list( // But you can just include all registered signals in one call + COMSIG_NOT_REAL, + COMSIG_NOT_REAL_EITHER, + COMSIG_ALMOST_REAL, + )) + +/datum/component/mycomponent/proc/signalproc(datum/source) + SIGNAL_HANDLER + send_to_playing_players("[source] signaled [src]!") + +/* +/datum/component/mycomponent/InheritComponent(datum/component/mycomponent/old, i_am_original, list/arguments) + myvar = old.myvar + + if(i_am_original) + send_to_playing_players("No parent should have to bury their child") +*/ + +/* +/datum/component/mycomponent/PreTransfer() + send_to_playing_players("Goodbye [parent], I'm getting adopted") + +/datum/component/mycomponent/PostTransfer() + send_to_playing_players("Hello my new parent, [parent]! It's nice to meet you!") +*/ + +/* +/datum/component/mycomponent/CheckDupeComponent(datum/mycomponent/new, myargone, myargtwo) + if(myargone == myvar) + return TRUE +*/ +``` diff --git a/code/datums/components/README.md b/code/datums/components/README.md new file mode 100644 index 0000000000000..db8bf10a327f6 --- /dev/null +++ b/code/datums/components/README.md @@ -0,0 +1,9 @@ +# Datum Component System (DCS) + +## Concept + +Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward it's arguments with a `SendSignal()` call. Now every component that want's to can also know about this happening. + +### [HackMD page for an introduction to the system as a whole.](https://hackmd.io/@tgstation/SignalsComponentsElements) + +### See/Define signals and their arguments in [__DEFINES\components.dm](../../__DEFINES/components.dm) diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm new file mode 100644 index 0000000000000..07b749fd92493 --- /dev/null +++ b/code/datums/components/_component.dm @@ -0,0 +1,497 @@ +/** + * # Component + * + * The component datum + * + * A component should be a single standalone unit + * of functionality, that works by receiving signals from it's parent + * object to provide some single functionality (i.e a slippery component) + * that makes the object it's attached to cause people to slip over. + * Useful when you want shared behaviour independent of type inheritance + */ +/datum/component + /** + * Defines how duplicate existing components are handled when added to a datum + * + * See [COMPONENT_DUPE_*][COMPONENT_DUPE_ALLOWED] definitions for available options + */ + var/dupe_mode = COMPONENT_DUPE_HIGHLANDER + + /** + * The type to check for duplication + * + * `null` means exact match on `type` (default) + * + * Any other type means that and all subtypes + */ + var/dupe_type + + /// The datum this components belongs to + var/datum/parent + + /** + * Only set to true if you are able to properly transfer this component + * + * At a minimum [RegisterWithParent][/datum/component/proc/RegisterWithParent] and [UnregisterFromParent][/datum/component/proc/UnregisterFromParent] should be used + * + * Make sure you also implement [PostTransfer][/datum/component/proc/PostTransfer] for any post transfer handling + */ + var/can_transfer = FALSE + + /// A lazy list of the sources for this component + var/list/sources + +/** + * Create a new component. + * + * Additional arguments are passed to [Initialize()][/datum/component/proc/Initialize] + * + * Arguments: + * * datum/P the parent datum this component reacts to signals from + */ +/datum/component/New(list/raw_args) + parent = raw_args[1] + var/list/arguments = raw_args.Copy(2) + if(Initialize(arglist(arguments)) == COMPONENT_INCOMPATIBLE) + stack_trace("Incompatible [type] assigned to a [parent.type]! args: [json_encode(arguments)]") + qdel(src, TRUE, TRUE) + return + + _JoinParent(parent) + +/** + * Called during component creation with the same arguments as in new excluding parent. + * + * Do not call `qdel(src)` from this function, `return COMPONENT_INCOMPATIBLE` instead + */ +/datum/component/proc/Initialize(...) + return + +/** + * Properly removes the component from `parent` and cleans up references + * + * Arguments: + * * force - makes it not check for and remove the component from the parent + */ +/datum/component/Destroy(force = FALSE) + if(!parent) + return ..() + if(!force) + _RemoveFromParent() + SEND_SIGNAL(parent, COMSIG_COMPONENT_REMOVING, src) + parent = null + return ..() + +/** + * Internal proc to handle behaviour of components when joining a parent + */ +/datum/component/proc/_JoinParent() + var/datum/P = parent + //lazy init the parent's dc list + var/list/dc = P._datum_components + if(!dc) + P._datum_components = dc = list() + + //set up the typecache + var/our_type = type + for(var/I in _GetInverseTypeList(our_type)) + var/test = dc[I] + if(test) //already another component of this type here + var/list/components_of_type + if(!length(test)) + components_of_type = list(test) + dc[I] = components_of_type + else + components_of_type = test + if(I == our_type) //exact match, take priority + var/inserted = FALSE + for(var/J in 1 to length(components_of_type)) + var/datum/component/C = components_of_type[J] + if(C.type != our_type) //but not over other exact matches + components_of_type.Insert(J, I) + inserted = TRUE + break + if(!inserted) + components_of_type += src + else //indirect match, back of the line with ya + components_of_type += src + else //only component of this type, no list + dc[I] = src + + RegisterWithParent() + +/** + * Internal proc to handle behaviour when being removed from a parent + */ +/datum/component/proc/_RemoveFromParent() + var/datum/parent = src.parent + var/list/parents_components = parent._datum_components + for(var/I in _GetInverseTypeList()) + var/list/components_of_type = parents_components[I] + + if(length(components_of_type)) // + var/list/subtracted = components_of_type - src + + if(length(subtracted) == 1) //only 1 guy left + parents_components[I] = subtracted[1] //make him special + else + parents_components[I] = subtracted + + else //just us + parents_components -= I + + if(!length(parents_components)) + parent._datum_components = null + + UnregisterFromParent() + +/** + * Register the component with the parent object + * + * Use this proc to register with your parent object + * + * Overridable proc that's called when added to a new parent + */ +/datum/component/proc/RegisterWithParent() + return + +/** + * Unregister from our parent object + * + * Use this proc to unregister from your parent object + * + * Overridable proc that's called when removed from a parent + * * + */ +/datum/component/proc/UnregisterFromParent() + return + +/** + * Called when the component has a new source registered. + * Return COMPONENT_INCOMPATIBLE to signal that the source is incompatible and should not be added + */ +/datum/component/proc/on_source_add(source, ...) + SHOULD_CALL_PARENT(TRUE) + if(dupe_mode != COMPONENT_DUPE_SOURCES) + return COMPONENT_INCOMPATIBLE + LAZYOR(sources, source) + +/** + * Called when the component has a source removed. + * You probably want to call parent after you do your logic because at the end of this we qdel if we have no sources remaining! + */ +/datum/component/proc/on_source_remove(source) + SHOULD_CALL_PARENT(TRUE) + if(dupe_mode != COMPONENT_DUPE_SOURCES) + CRASH("Component '[type]' does not use sources but is trying to remove a source") + LAZYREMOVE(sources, source) + if(!LAZYLEN(sources)) + qdel(src) + +/** + * Called on a component when a component of the same type was added to the same parent + * + * See [/datum/component/var/dupe_mode] + * + * `C`'s type will always be the same of the called component + */ +/datum/component/proc/InheritComponent(datum/component/C, i_am_original) + return + + +/** + * Called on a component when a component of the same type was added to the same parent with [COMPONENT_DUPE_SELECTIVE] + * + * See [/datum/component/var/dupe_mode] + * + * `C`'s type will always be the same of the called component + * + * return TRUE if you are absorbing the component, otherwise FALSE if you are fine having it exist as a duplicate component + */ +/datum/component/proc/CheckDupeComponent(datum/component/C, ...) + return + + +/** + * Callback Just before this component is transferred + * + * Use this to do any special cleanup you might need to do before being deregged from an object + */ +/datum/component/proc/PreTransfer() + return + +/** + * Callback Just after a component is transferred + * + * Use this to do any special setup you need to do after being moved to a new object + * + * Do not call `qdel(src)` from this function, `return COMPONENT_INCOMPATIBLE` instead + */ +/datum/component/proc/PostTransfer() + return COMPONENT_INCOMPATIBLE //Do not support transfer by default as you must properly support it + +/** + * Internal proc to create a list of our type and all parent types + */ +/datum/component/proc/_GetInverseTypeList(our_type = type) + //we can do this one simple trick + . = list(our_type) + var/current_type = parent_type + //and since most components are root level + 1, this won't even have to run + while (current_type != /datum/component) + . += current_type + current_type = type2parent(current_type) + +// The type arg is casted so initial works, you shouldn't be passing a real instance into this +/** + * Return any component assigned to this datum of the given type + * + * This will throw an error if it's possible to have more than one component of that type on the parent + * + * Arguments: + * * datum/component/c_type The typepath of the component you want to get a reference to + */ +/datum/proc/GetComponent(datum/component/c_type) + RETURN_TYPE(c_type) + if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED || initial(c_type.dupe_mode) == COMPONENT_DUPE_SELECTIVE) + stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]") + var/list/dc = _datum_components + if(!dc) + return null + . = dc[c_type] + if(length(.)) + return .[1] + +// The type arg is casted so initial works, you shouldn't be passing a real instance into this +/** + * Return any component assigned to this datum of the exact given type + * + * This will throw an error if it's possible to have more than one component of that type on the parent + * + * Arguments: + * * datum/component/c_type The typepath of the component you want to get a reference to + */ +/datum/proc/GetExactComponent(datum/component/c_type) + RETURN_TYPE(c_type) + if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED || initial(c_type.dupe_mode) == COMPONENT_DUPE_SELECTIVE) + stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]") + var/list/dc = _datum_components + if(!dc) + return null + var/datum/component/C = dc[c_type] + if(C) + if(length(C)) + C = C[1] + if(C.type == c_type) + return C + return null + +/** + * Get all components of a given type that are attached to this datum + * + * Arguments: + * * c_type The component type path + */ +/datum/proc/GetComponents(c_type) + var/list/components = _datum_components?[c_type] + if(!components) + return list() + return islist(components) ? components : list(components) + +/** + * Creates an instance of `new_type` in the datum and attaches to it as parent + * + * Sends the [COMSIG_COMPONENT_ADDED] signal to the datum + * + * Returns the component that was created. Or the old component in a dupe situation where [COMPONENT_DUPE_UNIQUE] was set + * + * If this tries to add a component to an incompatible type, the component will be deleted and the result will be `null`. This is very unperformant, try not to do it + * + * Properly handles duplicate situations based on the `dupe_mode` var + */ +/datum/proc/_AddComponent(list/raw_args, source) + var/original_type = raw_args[1] + var/datum/component/component_type = original_type + + if(QDELING(src)) + CRASH("Attempted to add a new component of type \[[component_type]\] to a qdeleting parent of type \[[type]\]!") + + var/datum/component/new_component + + if(!ispath(component_type, /datum/component)) + if(!istype(component_type, /datum/component)) + CRASH("Attempted to instantiate \[[component_type]\] as a component added to parent of type \[[type]\]!") + else + new_component = component_type + component_type = new_component.type + else if(component_type == /datum/component) + CRASH("[component_type] attempted instantiation!") + + var/dupe_mode = initial(component_type.dupe_mode) + var/dupe_type = initial(component_type.dupe_type) + var/uses_sources = (dupe_mode == COMPONENT_DUPE_SOURCES) + if(uses_sources && !source) + CRASH("Attempted to add a sourced component of type '[component_type]' to '[type]' without a source!") + else if(!uses_sources && source) + CRASH("Attempted to add a normal component of type '[component_type]' to '[type]' with a source!") + + var/datum/component/old_component + + raw_args[1] = src + if(dupe_mode != COMPONENT_DUPE_ALLOWED && dupe_mode != COMPONENT_DUPE_SELECTIVE && dupe_mode != COMPONENT_DUPE_SOURCES) + if(!dupe_type) + old_component = GetExactComponent(component_type) + else + old_component = GetComponent(dupe_type) + + if(old_component) + switch(dupe_mode) + if(COMPONENT_DUPE_UNIQUE) + if(!new_component) + new_component = new component_type(raw_args) + if(!QDELETED(new_component)) + old_component.InheritComponent(new_component, TRUE) + QDEL_NULL(new_component) + + if(COMPONENT_DUPE_HIGHLANDER) + if(!new_component) + new_component = new component_type(raw_args) + if(!QDELETED(new_component)) + new_component.InheritComponent(old_component, FALSE) + QDEL_NULL(old_component) + + if(COMPONENT_DUPE_UNIQUE_PASSARGS) + if(!new_component) + var/list/arguments = raw_args.Copy(2) + arguments.Insert(1, null, TRUE) + old_component.InheritComponent(arglist(arguments)) + else + old_component.InheritComponent(new_component, TRUE) + + if(COMPONENT_DUPE_SOURCES) + if(source in old_component.sources) + return old_component // source already registered, no work to do + + if(old_component.on_source_add(arglist(list(source) + raw_args.Copy(2))) == COMPONENT_INCOMPATIBLE) + stack_trace("incompatible source added to a [old_component.type]. Args: [json_encode(raw_args)]") + return null + + else if(!new_component) + new_component = new component_type(raw_args) // There's a valid dupe mode but there's no old component, act like normal + + else if(dupe_mode == COMPONENT_DUPE_SELECTIVE) + var/list/arguments = raw_args.Copy() + arguments[1] = new_component + var/make_new_component = TRUE + for(var/datum/component/existing_component as anything in GetComponents(original_type)) + if(existing_component.CheckDupeComponent(arglist(arguments))) + make_new_component = FALSE + QDEL_NULL(new_component) + break + if(!new_component && make_new_component) + new_component = new component_type(raw_args) + + else if(dupe_mode == COMPONENT_DUPE_SOURCES) + new_component = new component_type(raw_args) + if(new_component.on_source_add(arglist(list(source) + raw_args.Copy(2))) == COMPONENT_INCOMPATIBLE) + stack_trace("incompatible source added to a [new_component.type]. Args: [json_encode(raw_args)]") + return null + + else if(!new_component) + new_component = new component_type(raw_args) // Dupes are allowed, act like normal + + if(!old_component && !QDELETED(new_component)) // Nothing related to duplicate components happened and the new component is healthy + SEND_SIGNAL(src, COMSIG_COMPONENT_ADDED, new_component) + return new_component + + return old_component + +/** + * Removes a component source from this datum + */ +/datum/proc/RemoveComponentSource(source, datum/component/component_type) + if(ispath(component_type)) + component_type = GetExactComponent(component_type) + if(!component_type) + return + component_type.on_source_remove(source) + +/** + * Get existing component of type, or create it and return a reference to it + * + * Use this if the item needs to exist at the time of this call, but may not have been created before now + * + * Arguments: + * * component_type The typepath of the component to create or return + * * ... additional arguments to be passed when creating the component if it does not exist + */ +/datum/proc/_LoadComponent(list/arguments) + . = GetComponent(arguments[1]) + if(!.) + return _AddComponent(arguments) + +/** + * Removes the component from parent, ends up with a null parent + * Used as a helper proc by the component transfer proc, does not clean up the component like Destroy does + */ +/datum/component/proc/ClearFromParent() + if(!parent) + return + var/datum/old_parent = parent + PreTransfer() + _RemoveFromParent() + parent = null + SEND_SIGNAL(old_parent, COMSIG_COMPONENT_REMOVING, src) + +/** + * Transfer this component to another parent + * + * Component is taken from source datum + * + * Arguments: + * * datum/component/target Target datum to transfer to + */ +/datum/proc/TakeComponent(datum/component/target) + if(!target || target.parent == src) + return + if(target.parent) + target.ClearFromParent() + target.parent = src + var/result = target.PostTransfer() + switch(result) + if(COMPONENT_INCOMPATIBLE) + var/c_type = target.type + qdel(target) + CRASH("Incompatible [c_type] transfer attempt to a [type]!") + + if(target == AddComponent(target)) + target._JoinParent() + +/** + * Transfer all components to target + * + * All components from source datum are taken + * + * Arguments: + * * /datum/target the target to move the components to + */ +/datum/proc/TransferComponents(datum/target) + var/list/dc = _datum_components + if(!dc) + return + for(var/component_key in dc) + var/component_or_list = dc[component_key] + if(islist(component_or_list)) + for(var/datum/component/I in component_or_list) + if(I.can_transfer) + target.TakeComponent(I) + else + var/datum/component/C = component_or_list + if(C.can_transfer) + target.TakeComponent(C) + +/** + * Return the object that is the host of any UI's that this component has + */ +/datum/component/tgui_host(mob/user) + return parent diff --git a/code/datums/components/pixel_shift.dm b/code/datums/components/pixel_shift.dm new file mode 100644 index 0000000000000..21349d5b5be11 --- /dev/null +++ b/code/datums/components/pixel_shift.dm @@ -0,0 +1,94 @@ +/datum/component/pixel_shift + dupe_mode = COMPONENT_DUPE_UNIQUE + /// Whether the mob is pixel shifted or not + var/is_shifted = FALSE + /// If we are in the shifting setting. + var/shifting = TRUE + /// Takes the four cardinal direction defines. Any atoms moving into this atom's tile will be allowed to from the added directions. + var/passthroughable = NONE + var/maximum_pixel_shift = 12 + var/passable_shift_threshold = 8 + +/datum/component/pixel_shift/Initialize(...) + . = ..() + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + +/datum/component/pixel_shift/RegisterWithParent() + RegisterSignal(parent, COMSIG_KB_MOB_PIXEL_SHIFT_DOWN, PROC_REF(pixel_shift_down)) + RegisterSignal(parent, COMSIG_KB_MOB_PIXEL_SHIFT_UP, PROC_REF(pixel_shift_up)) + RegisterSignals(parent, list(COMSIG_MOVABLE_MOVED, COMSIG_MOB_UPDATE_LYING_BUCKLED_VERBSTATUS), PROC_REF(unpixel_shift)) + RegisterSignal(parent, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, PROC_REF(pre_move_check)) + RegisterSignal(parent, COMSIG_MOB_CAN_PASS, PROC_REF(check_passable)) + +/datum/component/pixel_shift/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_KB_MOB_PIXEL_SHIFT_DOWN) + UnregisterSignal(parent, COMSIG_KB_MOB_PIXEL_SHIFT_UP) + UnregisterSignal(parent, COMSIG_MOB_UPDATE_LYING_BUCKLED_VERBSTATUS) + UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) + UnregisterSignal(parent, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE) + UnregisterSignal(parent, COMSIG_MOB_CAN_PASS) + +/datum/component/pixel_shift/proc/pre_move_check(mob/source, new_loc, direct) + SIGNAL_HANDLER + if(shifting) + pixel_shift(source, direct) + return COMSIG_MOB_CLIENT_BLOCK_PRE_LIVING_MOVE + +/datum/component/pixel_shift/proc/check_passable(mob/source, atom/movable/mover, border_dir) + SIGNAL_HANDLER + // Make sure to not allow projectiles of any kind past where they normally wouldn't. + if(!istype(mover, /obj/item/projectile) && !mover.throwing && passthroughable & get_dir(parent, mover)) + return COMPONENT_MOB_PASSABLE + +/datum/component/pixel_shift/proc/pixel_shift_down() + SIGNAL_HANDLER + shifting = TRUE + return COMSIG_KB_ACTIVATED + +/datum/component/pixel_shift/proc/pixel_shift_up() + SIGNAL_HANDLER + shifting = FALSE + +/datum/component/pixel_shift/proc/unpixel_shift() + SIGNAL_HANDLER + passthroughable = NONE + if(is_shifted) + var/mob/living/owner = parent + owner.pixel_x = owner.default_pixel_x + owner.pixel_y = owner.default_pixel_y + qdel(src) + +/datum/component/pixel_shift/proc/pixel_shift(mob/source, direct) + var/mob/living/owner = parent + if(owner.incapacitated(INCAPACITATION_ALL) || length(owner.pulledby) || length(owner.grabbed_by)) + return + passthroughable = NONE + switch(direct) + if(NORTH) + if(owner.pixel_y <= maximum_pixel_shift + owner.default_pixel_y) + owner.pixel_y++ + is_shifted = TRUE + if(EAST) + if(owner.pixel_x <= maximum_pixel_shift + owner.default_pixel_x) + owner.pixel_x++ + is_shifted = TRUE + if(SOUTH) + if(owner.pixel_y >= -maximum_pixel_shift + owner.default_pixel_y) + owner.pixel_y-- + is_shifted = TRUE + if(WEST) + if(owner.pixel_x >= -maximum_pixel_shift + owner.default_pixel_x) + owner.pixel_x-- + is_shifted = TRUE + + // Yes, I know this sets it to true for everything if more than one is matched. + // Movement doesn't check diagonals, and instead just checks EAST or WEST, depending on where you are for those. + if(owner.pixel_y > passable_shift_threshold) + passthroughable |= EAST | SOUTH | WEST + else if(owner.pixel_y < -passable_shift_threshold) + passthroughable |= NORTH | EAST | WEST + if(owner.pixel_x > passable_shift_threshold) + passthroughable |= NORTH | SOUTH | WEST + else if(owner.pixel_x < -passable_shift_threshold) + passthroughable |= NORTH | EAST | SOUTH diff --git a/code/datums/datum.dm b/code/datums/datum.dm index b0a9aec5a411f..f7cb7eeaac96c 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -1,54 +1,93 @@ /datum var/gc_destroyed //Time when this object was destroyed. var/is_processing = FALSE - var/list/active_timers //for SStimer -#ifdef TESTING - var/running_find_references - var/last_find_references = 0 -#endif + /// If this datum is pooled, the pool it belongs to. + var/singleton/instance_pool/instance_pool + + /// If this datum is pooled, the last configurator applied (if any). + var/singleton/instance_configurator/instance_configurator + + /** + * Components attached to this datum + * + * Lazy associated list in the structure of `type -> component/list of components` + */ + var/list/_datum_components + /** + * Any datum registered to receive signals from this datum is in this list + * + * Lazy associated list in the structure of `signal -> registree/list of registrees` + */ + var/list/_listen_lookup + /// Lazy associated list in the structure of `target -> list(signal -> proctype)` that are run when the datum receives that signal + var/list/list/_signal_procs // Default implementation of clean-up code. // This should be overridden to remove all references pointing to the object being destroyed. // Return the appropriate QDEL_HINT; in most cases this is QDEL_HINT_QUEUE. -/datum/proc/Destroy(force=FALSE) +/datum/proc/Destroy() SHOULD_CALL_PARENT(TRUE) SHOULD_NOT_SLEEP(TRUE) tag = null - weakref = null // Clear this reference to ensure it's kept for as brief duration as possible. - SSnano && SSnano.close_uis(src) - - var/list/timers = active_timers - active_timers = null - for(var/datum/timedevent/timer as anything in timers) - if (timer.spent) - continue - qdel(timer) - - if(extensions) - for(var/expansion_key in extensions) + if (extensions) + for (var/expansion_key in extensions) var/list/extension = extensions[expansion_key] - if(islist(extension)) + if (islist(extension)) extension.Cut() else qdel(extension) extensions = null + //BEGIN: ECS SHIT + var/list/dc = _datum_components + if(dc) + for(var/component_key in dc) + var/component_or_list = dc[component_key] + if(islist(component_or_list)) + for(var/datum/component/component as anything in component_or_list) + qdel(component, FALSE) + else + var/datum/component/C = component_or_list + qdel(C, FALSE) + dc.Cut() + _clear_signal_refs() + //END: ECS SHIT GLOB.destroyed_event && GLOB.destroyed_event.raise_event(src) - - if (!isturf(src)) // Not great, but the 'correct' way to do it would add overhead for little benefit. - cleanup_events(src) - + cleanup_events(src) var/list/machines = global.state_machines["\ref[src]"] - if(length(machines)) - for(var/base_type in machines) + if (length(machines)) + for (var/base_type in machines) qdel(machines[base_type]) global.state_machines -= "\ref[src]" - + if (instance_pool?.ReturnInstance(src)) + return QDEL_HINT_IWILLGC + instance_configurator = null + instance_pool = null + weakref = null return QDEL_HINT_QUEUE +///Only override this if you know what you're doing. You do not know what you're doing +///This is a threat +/datum/proc/_clear_signal_refs() + var/list/lookup = _listen_lookup + if(lookup) + for(var/sig in lookup) + var/list/comps = lookup[sig] + if(length(comps)) + for(var/datum/component/comp as anything in comps) + comp.UnregisterSignal(src, sig) + else + var/datum/component/comp = comps + comp.UnregisterSignal(src, sig) + _listen_lookup = lookup = null + + for(var/target in _signal_procs) + UnregisterSignal(target, _signal_procs[target]) + + /datum/proc/Process() set waitfor = 0 return PROCESS_KILL diff --git a/code/datums/elements/ELEMENT_TEMPLATE.md b/code/datums/elements/ELEMENT_TEMPLATE.md new file mode 100644 index 0000000000000..4bc1f72f2dc84 --- /dev/null +++ b/code/datums/elements/ELEMENT_TEMPLATE.md @@ -0,0 +1,25 @@ + +# Template file for your new element + +See _element.dm for detailed explanations + +```dm +/datum/element/myelement + element_flags = ELEMENT_BESPOKE | ELEMENT_COMPLEX_DETACH | ELEMENT_DETACH_ON_HOST_DESTROY | ELEMENT_NOTAREALFLAG // code/__DEFINES/dcs/flags.dm + //argument_hash_start_idx = 2 // Use with ELEMENT_BESPOKE + var/list/myvar = list() + +/datum/element/myelement/Attach(datum/target) + if(!ismovable(target)) + return COMPONENT_INCOMPATIBLE + RegisterSignal(target, COMSIG_MOVABLE_MOVED, myproc) + to_chat(target, "Hey, you're in your element.") + +/datum/element/myelement/Detach(datum/source) + UnregisterSignal(source, COMSIG_MOVABLE_MOVED) + to_chat(source, "You feel way out of your element.") + +/datum/element/myelement/proc/myproc(datum/source) + SIGNAL_HANDLER + playsound(source, 'sound/effects/gong.ogg', 50, TRUE) +``` diff --git a/code/datums/elements/_element.dm b/code/datums/elements/_element.dm new file mode 100644 index 0000000000000..bcafc83497cfc --- /dev/null +++ b/code/datums/elements/_element.dm @@ -0,0 +1,77 @@ +/** + * A holder for simple behaviour that can be attached to many different types + * + * Only one element of each type is instanced during game init. + * Otherwise acts basically like a lightweight component. + */ +/datum/element + /// Option flags for element behaviour + var/element_flags = NONE + /** + * The index of the first attach argument to consider for duplicate elements + * + * All arguments from this index onwards (1 based) are hashed into the key to determine + * if this is a new unique element or one already exists + * + * Is only used when flags contains [ELEMENT_BESPOKE] + * + * This is infinity so you must explicitly set this + */ + var/argument_hash_start_idx = INFINITY + +/// Activates the functionality defined by the element on the given target datum +/datum/element/proc/Attach(datum/target) + SHOULD_CALL_PARENT(TRUE) + if(type == /datum/element) + return ELEMENT_INCOMPATIBLE + SEND_SIGNAL(target, COMSIG_ELEMENT_ATTACH, src) + if(element_flags & ELEMENT_DETACH_ON_HOST_DESTROY) + RegisterSignal(target, COMSIG_QDELETING, PROC_REF(OnTargetDelete), override = TRUE) + +/datum/element/proc/OnTargetDelete(datum/source, force) + SIGNAL_HANDLER + Detach(source) + +/// Deactivates the functionality defines by the element on the given datum +/datum/element/proc/Detach(datum/source, ...) + SIGNAL_HANDLER + SHOULD_CALL_PARENT(TRUE) + + SEND_SIGNAL(source, COMSIG_ELEMENT_DETACH, src) + UnregisterSignal(source, COMSIG_QDELETING) + +/datum/element/Destroy(force) + if(!force) + return QDEL_HINT_LETMELIVE + SSdcs.elements_by_type -= type + return ..() + +//DATUM PROCS + +/// Finds the singleton for the element type given and attaches it to src +/datum/proc/_AddElement(list/arguments) + if(QDELING(src)) + var/datum/element/element_type = arguments[1] + stack_trace("We just tried to add the element [element_type] to a qdeleted datum, something is fucked") + return + + var/datum/element/ele = SSdcs.GetElement(arguments) + if(!ele) // We couldn't fetch the element, likely because it was not an element. + return // the crash message has already been sent + arguments[1] = src + if(ele.Attach(arglist(arguments)) == ELEMENT_INCOMPATIBLE) + CRASH("Incompatible element [ele.type] was assigned to a [type]! args: [json_encode(args)]") + +/** + * Finds the singleton for the element type given and detaches it from src + * You only need additional arguments beyond the type if you're using [ELEMENT_BESPOKE] + */ +/datum/proc/_RemoveElement(list/arguments) + var/datum/element/ele = SSdcs.GetElement(arguments, FALSE) + if(!ele) // We couldn't fetch the element, likely because it didn't exist. + return + if(ele.element_flags & ELEMENT_COMPLEX_DETACH) + arguments[1] = src + ele.Detach(arglist(arguments)) + else + ele.Detach(src) diff --git a/code/datums/extensions/appearance/cardborg.dm b/code/datums/extensions/appearance/cardborg.dm index d16a60591b0c0..6aecb14c9b5b9 100644 --- a/code/datums/extensions/appearance/cardborg.dm +++ b/code/datums/extensions/appearance/cardborg.dm @@ -1,5 +1,5 @@ /datum/extension/appearance/cardborg expected_type = /obj/item appearance_handler_type = /singleton/appearance_handler/cardborg - item_equipment_proc = /singleton/appearance_handler/cardborg/proc/item_equipped - item_removal_proc = /singleton/appearance_handler/cardborg/proc/item_removed + item_equipment_proc = TYPE_PROC_REF(/singleton/appearance_handler/cardborg, item_equipped) + item_removal_proc = TYPE_PROC_REF(/singleton/appearance_handler/cardborg, item_removed) diff --git a/code/datums/extensions/chameleon.dm b/code/datums/extensions/chameleon.dm index 358554ee66438..ffacbddc2423e 100644 --- a/code/datums/extensions/chameleon.dm +++ b/code/datums/extensions/chameleon.dm @@ -2,80 +2,80 @@ base_type = /datum/extension/chameleon expected_type = /obj/item flags = EXTENSION_FLAG_IMMEDIATE - var/list/chameleon_choices + var/emp_amount = 0 var/static/list/chameleon_choices_by_type - var/atom/atom_holder - var/chameleon_verb + var/chameleon_choices + var/obj/item/item_holder + var/static/chameleon_verbs = list( + /obj/item/proc/ChameleonFlexibleAppearance, + /obj/item/proc/ChameleonOutfitAppearanceSingle, + /obj/item/proc/ChameleonOutfitAppearanceAll) -/datum/extension/chameleon/New(datum/holder, base_type) +/** + * **Parameters**: + * - `holder` - The instance which is granted the chameleon verbs. + * - `chameleon_base_type` - The base type from which to generate the list of valid chameleon options. Defaults to the holder's `parent_type` if unset. + * - `exclude_outfits` - Whether to exclude the chameleon outfit verbs. + */ +/datum/extension/chameleon/New(datum/holder, chameleon_base_type, exclude_outfits) ..() if (!chameleon_choices) - var/chameleon_type = base_type || holder.parent_type + var/chameleon_type = chameleon_base_type || holder.parent_type chameleon_choices = LAZYACCESS(chameleon_choices_by_type, chameleon_type) - if(!chameleon_choices) - chameleon_choices = generate_chameleon_choices(chameleon_type) + if (!chameleon_choices) + chameleon_choices = GenerateChameleonChoices(chameleon_type) LAZYSET(chameleon_choices_by_type, chameleon_type, chameleon_choices) - else - var/list/choices = list() - for(var/path in chameleon_choices) - add_chameleon_choice(choices, path) - chameleon_choices = sortAssoc(choices) - atom_holder = holder - chameleon_verb += new/atom/proc/chameleon_appearance(atom_holder,"Change [atom_holder.name] Appearance") + item_holder = holder + if (exclude_outfits) + item_holder.verbs += /obj/item/proc/ChameleonFlexibleAppearance + else + item_holder.verbs += chameleon_verbs + GLOB.empd_event.register(item_holder, src, TYPE_PROC_REF(/datum/extension/chameleon, OnEMP)) /datum/extension/chameleon/Destroy() - . = ..() - atom_holder.verbs -= chameleon_verb - atom_holder = null - -/datum/extension/chameleon/proc/disguise(newtype, mob/user) - var/obj/item/copy = new newtype(null) //initial() does not handle lists well - var/obj/item/C = atom_holder - - C.name = copy.name - C.desc = copy.desc - C.icon = copy.icon - C.color = copy.color - C.icon_state = copy.icon_state - C.flags_inv = copy.flags_inv - C.item_state = copy.item_state - C.body_parts_covered = copy.body_parts_covered - - if (copy.item_icons) - C.item_icons = copy.item_icons.Copy() - if (copy.item_state_slots) - C.item_state_slots = copy.item_state_slots.Copy() - if (copy.sprite_sheets) - C.sprite_sheets = copy.sprite_sheets.Copy() - - OnDisguise(copy) + if (emp_amount) + STOP_PROCESSING(SSobj, src) + GLOB.empd_event.unregister(item_holder, src) + item_holder.verbs -= chameleon_verbs // We don't complicate things, remove all the verbs every time no matter the initial setup + item_holder = null + return ..() + +/datum/extension/chameleon/proc/Disguise(newtype, newname, newdesc) + SHOULD_NOT_OVERRIDE(TRUE) // Subtypes should override OnDisguise + + var/obj/item/copy = new newtype(null) // initial() does not handle lists well + item_holder.name = newname || copy.name + item_holder.desc = newdesc || copy.desc + item_holder.icon = copy.icon + item_holder.color = copy.color + item_holder.icon_state = copy.icon_state + item_holder.flags_inv = copy.flags_inv + item_holder.item_state = copy.item_state + item_holder.body_parts_covered = copy.body_parts_covered + + item_holder.item_icons = copy.item_icons + item_holder.item_state_slots = copy.item_state_slots + item_holder.sprite_sheets = copy.sprite_sheets + + OnDisguise(item_holder, copy) qdel(copy) -/datum/extension/chameleon/proc/OnDisguise(obj/item/copy) +/datum/extension/chameleon/proc/OnDisguise(obj/item/holder, obj/item/copy) + return -/datum/extension/chameleon/clothing - expected_type = /obj/item/clothing +/datum/extension/chameleon/proc/GetItemDisguiseType(singleton/hierarchy/outfit/outfit) + return null -/datum/extension/chameleon/clothing/accessory - expected_type = /obj/item/clothing/accessory +/datum/extension/chameleon/proc/GenerateChameleonChoices(basetype) + var/choices = list() + var/types = islist(basetype) ? basetype : typesof(basetype) + for (var/path in types) + AddChameleonChoice(choices, path) + return sortAssoc(choices) -/datum/extension/chameleon/clothing/accessory/OnDisguise(obj/item/clothing/accessory/copy) - ..() - var/obj/item/clothing/accessory/A = holder - - A.slot = copy.slot - A.parent = copy.parent - A.inv_overlay = copy.inv_overlay - A.mob_overlay = copy.mob_overlay - A.overlay_state = copy.overlay_state - A.accessory_icons = copy.accessory_icons - A.on_rolled_down = copy.on_rolled_down - A.on_rolled_sleeves = copy.on_rolled_sleeves - A.accessory_flags = copy.accessory_flags - -/datum/extension/chameleon/proc/add_chameleon_choice(list/target, path) +/datum/extension/chameleon/proc/AddChameleonChoice(list/target, path) var/obj/item/I = path if (initial(I.icon) && initial(I.icon_state) && !(initial(I.item_flags) & ITEM_FLAG_INVALID_FOR_CHAMELEON)) var/name = initial(I.name) @@ -89,76 +89,221 @@ else target[name] = path -/datum/extension/chameleon/proc/generate_chameleon_choices(basetype) - var/choices = list() - var/types = islist(basetype) ? basetype : typesof(basetype) - for (var/path in types) - add_chameleon_choice(choices, path) - return sortAssoc(choices) +/datum/extension/chameleon/proc/OnEMP(holder, severity) + if(!prob(50/severity)) + return + + if (emp_amount == 0) + START_PROCESSING(SSobj, src) + + emp_amount += rand((30 SECONDS)/severity, (1 MINUTE)/severity) + emp_amount = min(2 MINUTES, emp_amount) // Cap EMP duration to 2 minutes + Malfunction() + +/datum/extension/chameleon/Process(wait) + var/trigger = FALSE + // For each second, check if a malfunction is triggered + for (var/i = 1 to ceil(wait / (1 SECOND))) + // There's a (EMP seconds left / 2) probability of another malfunction triggering + if (!trigger && prob(emp_amount / 2 / 1 SECOND)) + trigger = TRUE + emp_amount -= 10 SECONDS // If a malfunction did trigger, we're kind and reduce the remaining time by 10 seconds + else // Otherwise we only reduce it by 1 second + emp_amount -= 1 SECOND + + if (trigger) + Malfunction() + + if (emp_amount <= 0) + emp_amount = 0 + STOP_PROCESSING(SSobj, src) + +/datum/extension/chameleon/proc/Malfunction() + playsound(item_holder.loc, "sparks", 75, 1, -1) + Disguise(chameleon_choices[pick(chameleon_choices)]) /** - * Verb to handle changing the appearance of atoms that have the chameleon extension. + * Verbs to handle changing the appearance of atoms that have the chameleon extension. */ -/atom/proc/chameleon_appearance() - set name = "Change Appearance" +/obj/item/proc/ChameleonFlexibleAppearance() + set name = "Change Appearance - Flexible" set desc = "Activate the holographic appearance changing module." set category = "Object" - if (!CanPhysicallyInteract(usr)) + if (!CanPhysicallyInteractWith(usr, src)) return - if (has_extension(src,/datum/extension/chameleon)) - var/datum/extension/chameleon/C = get_extension(src, /datum/extension/chameleon) - C.change(usr) + + var/datum/extension/chameleon/C = get_extension(src, /datum/extension/chameleon) + if (C) + C.ChangeGeneral(usr) else - src.verbs -= /atom/proc/chameleon_appearance + src.verbs -= C.chameleon_verbs -/datum/extension/chameleon/proc/change(mob/user) +/datum/extension/chameleon/proc/ChangeGeneral(mob/user) var/choice = input(user, "Select a new appearance", "Select appearance") as null|anything in chameleon_choices - if (choice) - if (QDELETED(user) || QDELETED(holder)) - return - if(user.incapacitated() || !(holder in user)) - to_chat(user, SPAN_WARNING("You can't reach \the [holder].")) - return - disguise(chameleon_choices[choice], user) - OnChange(user,holder) - -/datum/extension/chameleon/proc/OnChange(mob/user, obj/item/clothing/C) //contains icon updates - if (istype(C)) - C.update_clothing_icon() + if (!choice) + return + + var/newname = input(user, "Choose a new name, or leave blank to use the default", "Choose item name") as null|text + var/newdesc = input(user, "Choose a new description, or leave blank to use the default", "Choose item description") as null|text + if(!CanPhysicallyInteractWith(user, holder)) + to_chat(user, SPAN_WARNING("You can't reach \the [holder].")) + return + Disguise(chameleon_choices[choice], newname, newdesc) + +/obj/item/proc/ChameleonOutfitAppearanceSingle() + set name = "Change Appearance - Outfit (Selected Only)" + set desc = "Activate the holographic appearance changing module." + set category = "Object" + + if (!CanPhysicallyInteractWith(usr, src)) + return + + var/datum/extension/chameleon/C = get_extension(src, /datum/extension/chameleon) + if (C) + C.ChangeOutfitSingle(usr) + else + src.verbs -= C.chameleon_verbs + +/datum/extension/chameleon/proc/ChangeOutfitSingle(mob/user) + var/choice = input(user, "Select a new appearance for the selected chameleon item", "Select appearance") as null|anything in outfits() + if (!choice) + return + if(!CanPhysicallyInteractWith(user, holder)) + to_chat(user, SPAN_WARNING("You can't reach \the [holder].")) + return + SetOutfitAppearance(user, list(src), choice) + +/obj/item/proc/ChameleonOutfitAppearanceAll() + set name = "Change Appearance - Outfit (All Equipped)" + set desc = "Activate the holographic appearance changing module." + set category = "Object" + + if (!CanPhysicallyInteractWith(usr, src)) + return + + var/datum/extension/chameleon/C = get_extension(src, /datum/extension/chameleon) + if (C) + C.ChangeOutfitAll(usr) + else + src.verbs -= C.chameleon_verbs + +/datum/extension/chameleon/proc/ChangeOutfitAll(mob/user) + var/choice = input(usr, "Select a new appearance for the selected chameleon item", "Select appearance") as null|anything in outfits() + if (!choice) + return + if(!CanPhysicallyInteractWith(user, holder)) + to_chat(usr, SPAN_WARNING("You can't reach \the [holder].")) + return + + var/list/extensions = list() + for (var/obj/item/I as anything in user.get_equipped_items(TRUE)) + var/extension = get_extension(I, /datum/extension/chameleon) + if (extension) + extensions += extension + extensions |= src + SetOutfitAppearance(user, extensions, choice) +/datum/extension/chameleon/proc/SetOutfitAppearance(mob/user, list/chameleon_extensions, singleton/hierarchy/outfit/outfit) + for (var/datum/extension/chameleon/chameleon_extension as anything in chameleon_extensions) + var/outfit_type = chameleon_extension.GetItemDisguiseType(outfit) + if (outfit_type) + to_chat(user, SPAN_NOTICE("The outfit '[outfit]' appearance was applied to \the [chameleon_extension.holder].")); + chameleon_extension.Disguise(outfit_type) + else + to_chat(user, SPAN_WARNING("The outfit '[outfit]' had no suitable appearance for \the [chameleon_extension.holder].")); + +/******************** +* Subtype overrides * +********************/ /datum/extension/chameleon/backpack expected_type = /obj/item/storage/backpack -/datum/extension/chameleon/backpack/OnChange(mob/user, obj/item/storage/backpack/C) - if (ismob(C.loc)) - var/mob/M = C.loc +/datum/extension/chameleon/backpack/OnDisguise(obj/item/storage/backpack/holder, obj/item/copy) + if (ismob(holder.loc)) + var/mob/M = holder.loc M.update_inv_back() -/datum/extension/chameleon/headset - expected_type = /obj/item/device/radio/headset +/datum/extension/chameleon/backpack/GetItemDisguiseType(singleton/hierarchy/outfit/outfit) + if (ispath(outfit.back, expected_type)) + return outfit.back + for (var/potential_backpack_type in list_values(outfit.backpack_overrides)) + if (ispath(potential_backpack_type, expected_type)) + return potential_backpack_type -/datum/extension/chameleon/headset/OnChange(mob/user, obj/item/device/radio/headset/C) - if (ismob(C.loc)) - var/mob/M = C.loc - M.update_inv_ears() +/datum/extension/chameleon/clothing + expected_type = /obj/item/clothing -/datum/extension/chameleon/gun - expected_type = /obj/item/gun +/datum/extension/chameleon/clothing/OnDisguise(obj/item/clothing/holder, obj/item/copy) + SHOULD_CALL_PARENT(TRUE) + ..() + if (istype(holder)) + holder.update_clothing_icon() -/datum/extension/chameleon/gun/OnChange(mob/user, obj/item/gun/C) - if (ismob(C.loc)) - var/mob/M = C.loc - M.update_inv_r_hand() - M.update_inv_l_hand() +/datum/extension/chameleon/clothing/accessory + expected_type = /obj/item/clothing/accessory + +/datum/extension/chameleon/clothing/accessory/OnDisguise(obj/item/clothing/accessory/holder, obj/item/clothing/accessory/copy) + holder.slot = copy.slot + holder.parent = copy.parent + holder.inv_overlay = copy.inv_overlay + holder.mob_overlay = copy.mob_overlay + holder.overlay_state = copy.overlay_state + holder.accessory_icons = copy.accessory_icons + holder.on_rolled_down = copy.on_rolled_down + holder.on_rolled_sleeves = copy.on_rolled_sleeves + holder.accessory_flags = copy.accessory_flags + ..() + +/datum/extension/chameleon/clothing/glasses + expected_type = /obj/item/clothing/glasses + +/datum/extension/chameleon/clothing/glasses/GetItemDisguiseType(singleton/hierarchy/outfit/outfit) + if (ispath(outfit.glasses, expected_type)) + return outfit.glasses + +/datum/extension/chameleon/clothing/gloves + expected_type = /obj/item/clothing/gloves + +/datum/extension/chameleon/clothing/gloves/GetItemDisguiseType(singleton/hierarchy/outfit/outfit) + if (ispath(outfit.gloves, expected_type)) + return outfit.gloves + +/datum/extension/chameleon/clothing/head + expected_type = /obj/item/clothing/head + +/datum/extension/chameleon/clothing/head/GetItemDisguiseType(singleton/hierarchy/outfit/outfit) + if (ispath(outfit.head, expected_type)) + return outfit.head + +/datum/extension/chameleon/clothing/mask + expected_type = /obj/item/clothing/mask + +/datum/extension/chameleon/clothing/mask/GetItemDisguiseType(singleton/hierarchy/outfit/outfit) + if (ispath(outfit.mask, expected_type)) + return outfit.mask + +/datum/extension/chameleon/clothing/shoes + expected_type = /obj/item/clothing/shoes + +/datum/extension/chameleon/clothing/shoes/GetItemDisguiseType(singleton/hierarchy/outfit/outfit) + ..() + if (ispath(outfit.shoes, expected_type)) + return outfit.shoes + +/datum/extension/chameleon/clothing/suit + expected_type = /obj/item/clothing/suit -/datum/extension/chameleon/gun/OnDisguise(obj/item/gun/copy) - var/obj/item/gun/G = atom_holder +/datum/extension/chameleon/clothing/suit/GetItemDisguiseType(singleton/hierarchy/outfit/outfit) + if (ispath(outfit.suit, expected_type)) + return outfit.suit - G.flags_inv = copy.flags_inv - G.fire_sound = copy.fire_sound - G.fire_sound_text = copy.fire_sound_text - G.icon = copy.icon +/datum/extension/chameleon/clothing/under + expected_type = /obj/item/clothing/under + +/datum/extension/chameleon/clothing/under/GetItemDisguiseType(singleton/hierarchy/outfit/outfit) + if (ispath(outfit.uniform, expected_type)) + return outfit.uniform /datum/extension/chameleon/emag expected_type = /obj/item/card @@ -170,3 +315,88 @@ /obj/item/card/data/disk, /obj/item/card/id ) + +/datum/extension/chameleon/emag/GetItemDisguiseType(singleton/hierarchy/outfit/outfit) + if (length(outfit.id_types) > 0) + var/id_path = outfit.id_types[0] + if (ispath(id_path, expected_type)) + return id_path + +/datum/extension/chameleon/gun + expected_type = /obj/item/gun + +/datum/extension/chameleon/gun/OnDisguise(obj/item/gun/holder, obj/item/gun/copy) + holder.flags_inv = copy.flags_inv + holder.fire_sound = copy.fire_sound + holder.fire_sound_text = copy.fire_sound_text + + if (ismob(holder.loc)) + var/mob/M = holder.loc + M.update_inv_r_hand() + M.update_inv_l_hand() + +/datum/extension/chameleon/headset + expected_type = /obj/item/device/radio/headset + +/datum/extension/chameleon/headset/OnDisguise(obj/item/holder, obj/item/copy) + if (ismob(holder.loc)) + var/mob/M = holder.loc + M.update_inv_ears() + +/datum/extension/chameleon/headset/GetItemDisguiseType(singleton/hierarchy/outfit/outfit) + if (ispath(outfit.l_ear, expected_type)) + return outfit.l_ear + if (ispath(outfit.r_ear, expected_type)) + return outfit.r_ear + +/// Grants the full set of chameleon selection options available to the extension. +var/global/const/CHAMELEON_FLEXIBLE_OPTIONS_EXTENSION = 1 // Not flags +/// Grants a (potential) subset of chameleon options available to the extension, based on the instance's `parent_type`. Falls back to `type` if not a valid type for the extension. +var/global/const/CHAMELEON_FLEXIBLE_OPTIONS_PARENT_TYPE = 2 +/// Grants a (potential) subset of chameleon options available to the extension, based on the instance's `type`. +var/global/const/CHAMELEON_FLEXIBLE_OPTIONS_TYPE = 3 + +/** + * Call this proc to automatically setup the best suited chameleon extension for the instance, if one exists. + * + * Exceptions: + * - If the instance only matches the base /datum/extension/chameleon type it is not set for performance reasons. For these `set_extension()` has to be called explicitly. + * - If the instance already has the /datum/extension/chameleon extension it is not overriden, but the proc still returns `TRUE`. + * + * **Parameters**: + * - `chamelon_options` - Based on the relevant CHAMELEON_FLEXIBLE_OPTION_* argument + * - `exclude_outfits` - Whether to exclude the chameleon outfit verbs. + * - `throw_runtime` - Whether to throw a runtime exception if no matching extension was found. This includes cases when /datum/extension/chameleon would've been a match had it not been for its exclusion. + * + * Returns boolean - Whether or not a matching extension was found + */ +/obj/proc/SetupChameleonExtension(chamelon_options, exclude_outfits, throw_runtime) + if (has_extension(src, /datum/extension/chameleon)) + return TRUE + + var/best_found_expected_type + var/best_found_extension + + // Most items matching only /obj/item have a tendency to generate huge cache lists (and also lag spikes), hence the exclusion of the base extension type + for (var/datum/extension/chameleon/chameleon_extension_type as anything in subtypesof(/datum/extension/chameleon)) + var/expected_type = initial(chameleon_extension_type.expected_type) + + if (istype(src, expected_type)) // If the type of src is a type expected by the extension then.. + // Check if the expected type is a better match than the previously found best expected type (if any) + if (!best_found_expected_type || IS_SUBPATH(expected_type, best_found_expected_type)) + best_found_expected_type = expected_type + best_found_extension = chameleon_extension_type + + var/chameleon_base_type + switch (chamelon_options) + if (CHAMELEON_FLEXIBLE_OPTIONS_EXTENSION) chameleon_base_type = best_found_expected_type + if (CHAMELEON_FLEXIBLE_OPTIONS_PARENT_TYPE) chameleon_base_type = ispath(parent_type, best_found_expected_type) ? parent_type : type + if (CHAMELEON_FLEXIBLE_OPTIONS_TYPE) chameleon_base_type = type + else CRASH("Invalid chameleon flexible option: [chamelon_options]") + + if (best_found_extension) + set_extension(src, best_found_extension, chameleon_base_type, exclude_outfits) + return TRUE + else if (throw_runtime) + CRASH("The type [type] does not have a compatible chameleon extension.") + return FALSE diff --git a/code/datums/extensions/event_registration.dm b/code/datums/extensions/event_registration.dm index c8a2c4a443bef..767f52039c81a 100644 --- a/code/datums/extensions/event_registration.dm +++ b/code/datums/extensions/event_registration.dm @@ -10,8 +10,8 @@ /datum/extension/event_registration/New(datum/holder, singleton/observ/event, datum/target, callproc) ..() - event.register(target, src, .proc/trigger) - GLOB.destroyed_event.register(target, src, .proc/qdel_self) + event.register(target, src, PROC_REF(trigger)) + GLOB.destroyed_event.register(target, src, PROC_REF(qdel_self)) src.event = event src.target = target src.callproc = callproc @@ -36,15 +36,15 @@ ..() src.given_area = given_area register_shuttles() - GLOB.shuttle_added.register_global(src, .proc/shuttle_added) + GLOB.shuttle_added.register_global(src, PROC_REF(shuttle_added)) /datum/extension/event_registration/shuttle_stationary/proc/register_shuttles() if(given_area in SSshuttle.shuttle_areas) for(var/shuttle_name in SSshuttle.shuttles) var/datum/shuttle/shuttle_datum = SSshuttle.shuttles[shuttle_name] if(given_area in shuttle_datum.shuttle_area) - GLOB.shuttle_moved_event.register(shuttle_datum, src, .proc/shuttle_moved) - GLOB.shuttle_pre_move_event.register(shuttle_datum, src, .proc/shuttle_pre_move) + GLOB.shuttle_moved_event.register(shuttle_datum, src, PROC_REF(shuttle_moved)) + GLOB.shuttle_pre_move_event.register(shuttle_datum, src, PROC_REF(shuttle_pre_move)) LAZYADD(shuttles_registered, shuttle_datum) /datum/extension/event_registration/shuttle_stationary/proc/unregister_shuttles() @@ -55,8 +55,8 @@ /datum/extension/event_registration/shuttle_stationary/proc/shuttle_added(datum/shuttle/shuttle) if(given_area in shuttle.shuttle_area) - GLOB.shuttle_moved_event.register(shuttle, src, .proc/shuttle_moved) - GLOB.shuttle_pre_move_event.register(shuttle, src, .proc/shuttle_pre_move) + GLOB.shuttle_moved_event.register(shuttle, src, PROC_REF(shuttle_moved)) + GLOB.shuttle_pre_move_event.register(shuttle, src, PROC_REF(shuttle_pre_move)) LAZYADD(shuttles_registered, shuttle) /datum/extension/event_registration/shuttle_stationary/Destroy() diff --git a/code/datums/extensions/extensions.dm b/code/datums/extensions/extensions.dm index 670b375144543..4f55fa7cc880f 100644 --- a/code/datums/extensions/extensions.dm +++ b/code/datums/extensions/extensions.dm @@ -39,12 +39,14 @@ source.extensions[extension_base_type] = extension_data /proc/get_or_create_extension(datum/source, datum/extension/extension_type) + RETURN_TYPE(/datum/extension) var/base_type = initial(extension_type.base_type) if(!has_extension(source, base_type)) set_extension(arglist(args)) return get_extension(source, base_type) /proc/get_extension(datum/source, base_type) + RETURN_TYPE(/datum/extension) if(!source.extensions) return . = source.extensions[base_type] @@ -60,6 +62,7 @@ return !!(source.extensions && source.extensions[base_type]) /proc/construct_extension_instance(extension_type, datum/source, list/arguments) + RETURN_TYPE(/datum/extension) arguments = list(source) + arguments return new extension_type(arglist(arguments)) diff --git a/code/datums/extensions/holster/holster.dm b/code/datums/extensions/holster/holster.dm index 8267be6597955..d292e7a4ed6cc 100644 --- a/code/datums/extensions/holster/holster.dm +++ b/code/datums/extensions/holster/holster.dm @@ -15,12 +15,6 @@ src.sound_out = sound_out || src.sound_out src.can_holster = can_holster - atom_holder.verbs += /atom/proc/holster_verb - -/datum/extension/holster/Destroy() - . = ..() - atom_holder.verbs -= /atom/proc/holster_verb - /datum/extension/holster/proc/can_holster(obj/item/I) if(can_holster) if(is_type_in_list(I,can_holster)) @@ -45,6 +39,11 @@ playsound(get_turf(atom_holder), sound_in, 50) if(istype(user)) user.stop_aiming(no_message=1) + if(istype(I, /obj/item/gun)) + var/obj/item/gun/G = I + G.check_accidents(user) + if(user.a_intent == I_HELP && G.has_safety && !G.safety_state && user.skill_check(SKILL_WEAPONS, SKILL_EXPERIENCED)) + G.toggle_safety(user) holstered = I storage.handle_item_insertion(holstered, 1) holstered.add_fingerprint(user) @@ -52,14 +51,14 @@ user.visible_message(SPAN_NOTICE("\The [user] holsters \the [holstered]."), SPAN_NOTICE("You holster \the [holstered].")) atom_holder.SetName("occupied [initial(atom_holder.name)]") atom_holder.update_icon() - GLOB.moved_event.register(holstered, src, .proc/check_holster) - GLOB.destroyed_event.register(holstered, src, .proc/clear_holster) + GLOB.moved_event.register(holstered, src, PROC_REF(check_holster)) + GLOB.destroyed_event.register(holstered, src, PROC_REF(clear_holster)) return 1 return 0 /datum/extension/holster/proc/clear_holster() - GLOB.moved_event.unregister(holstered, src, .proc/check_holster) - GLOB.destroyed_event.unregister(holstered, src, .proc/clear_holster) + GLOB.moved_event.unregister(holstered, src, PROC_REF(check_holster)) + GLOB.destroyed_event.unregister(holstered, src, PROC_REF(clear_holster)) holstered = null atom_holder.SetName(initial(atom_holder.name)) @@ -77,7 +76,7 @@ if(istype(holstered, /obj/item/gun)) var/obj/item/gun/G = holstered G.check_accidents(user) - if(G.safety() && !user.skill_fail_prob(SKILL_WEAPONS, 100, SKILL_EXPERT, 0.5)) //Experienced shooter will disable safety before shooting. + if(G.safety() && user.skill_check(SKILL_WEAPONS, SKILL_EXPERIENCED)) // Experienced shooter will disable safety before shooting. G.toggle_safety(user) usr.visible_message( SPAN_DANGER("\The [user] draws \the [holstered], ready to go!"), @@ -99,10 +98,11 @@ return 0 /datum/extension/holster/proc/examine_holster(mob/user) + . = list() if (holstered) - to_chat(user, "\A [holstered] is holstered here.") + . += SPAN_NOTICE("[holstered] is holstered here.") else - to_chat(user, "It is empty.") + . += SPAN_NOTICE("It is empty.") /datum/extension/holster/proc/check_holster() if(holstered.loc != storage) @@ -112,16 +112,37 @@ * Verb to handle quick-holstering an item in the mob's active hand, or retrieving an item from this atom's holster * extension. */ -/atom/proc/holster_verb(holster_name in get_holsters()) +/mob/living/verb/holster_verb() set name = "Holster" set category = "Object" - set src in usr if(usr.incapacitated()) return - var/datum/extension/holster/H = get_holsters()[holster_name] - if(!H) + var/list/holsters = list() + for (var/obj/item/item in contents) + holsters += item.get_holsters() + continue + + if (!length(holsters)) + return + + var/holster_name + if (length(holsters) > 1) + var/list/options = list() + for (var/holster in holsters) + var/datum/extension/holster/H = holsters[holster] + var/atom/holder = H.atom_holder + options[holster] = mutable_appearance(holder.icon, holder.icon_state) + + holster_name = show_radial_menu(usr, usr, options, tooltips = TRUE, use_labels = TRUE) + + if (!holster_name) + return + else + holster_name = holsters[1] + var/datum/extension/holster/H = holsters[holster_name] + if (!H || !usr.use_sanity_check(H.atom_holder)) return if(!H.holstered) diff --git a/code/datums/extensions/label.dm b/code/datums/extensions/label.dm index 0f6a293e28672..645d961bed021 100644 --- a/code/datums/extensions/label.dm +++ b/code/datums/extensions/label.dm @@ -72,6 +72,7 @@ /proc/get_attached_labels(atom/source) + RETURN_TYPE(/list) if (has_extension(source, /datum/extension/labels)) var/datum/extension/labels/labels = get_extension(source, /datum/extension/labels) if (length(labels.labels)) diff --git a/code/datums/extensions/multitool/circuitboards/buildtype_select.dm b/code/datums/extensions/multitool/circuitboards/buildtype_select.dm index e12c38d3cf436..eb4e979ecfbdb 100644 --- a/code/datums/extensions/multitool/circuitboards/buildtype_select.dm +++ b/code/datums/extensions/multitool/circuitboards/buildtype_select.dm @@ -24,6 +24,6 @@ if(path && (path in board.get_buildable_types())) board.build_path = path var/obj/thing = path - board.SetName(T_BOARD(initial(thing.name))) + board.SetName("circuit board ([initial(thing.name)])") return MT_REFRESH return ..() diff --git a/code/datums/extensions/multitool/items/cable.dm b/code/datums/extensions/multitool/items/cable.dm deleted file mode 100644 index 7f922271afd00..0000000000000 --- a/code/datums/extensions/multitool/items/cable.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/item/stack/cable_coil/Initialize(mapload, _amount, _color) - . = ..() - set_extension(src, /datum/extension/interactive/multitool/items/cable) - -/datum/extension/interactive/multitool/items/cable/get_interact_window(obj/item/device/multitool/M, mob/user) - var/obj/item/stack/cable_coil/cable_coil = holder - . += "Available Colors
" - . += "" - for(var/cable_color in GLOB.possible_cable_colours) - . += "" - . += "" - if(cable_coil.color == GLOB.possible_cable_colours[cable_color]) - . += "" - else - . += "" - . += "" - . += "
[cable_color]SelectedSelect
" - -/datum/extension/interactive/multitool/items/cable/on_topic(href, href_list, user) - var/obj/item/stack/cable_coil/cable_coil = holder - if(href_list["select_color"] && (href_list["select_color"] in GLOB.possible_cable_colours)) - cable_coil.SetCableColor(href_list["select_color"], user) - return MT_REFRESH - - return ..() diff --git a/code/datums/extensions/multitool/items/clothing.dm b/code/datums/extensions/multitool/items/clothing.dm index 042fe557ffa6f..877f74d1581fa 100644 --- a/code/datums/extensions/multitool/items/clothing.dm +++ b/code/datums/extensions/multitool/items/clothing.dm @@ -1,7 +1,3 @@ -/obj/item/clothing/under/New() - set_extension(src, /datum/extension/interactive/multitool/items/clothing) - ..() - /datum/extension/interactive/multitool/items/clothing/interact(obj/item/device/multitool/M, mob/user) if(extension_status(user) != STATUS_INTERACTIVE) return diff --git a/code/datums/extensions/multitool/multitool.dm b/code/datums/extensions/multitool/multitool.dm index bfe0e8fb23a98..4f9a13989d44c 100644 --- a/code/datums/extensions/multitool/multitool.dm +++ b/code/datums/extensions/multitool/multitool.dm @@ -11,7 +11,6 @@ if(html) var/datum/browser/popup = new(usr, "multitool", "Multitool Menu", window_x, window_y) popup.set_content(html) - popup.set_title_image(user.browse_rsc_icon(M.icon, M.icon_state)) popup.open() else close_window(usr) diff --git a/code/datums/extensions/scent/_scent.dm b/code/datums/extensions/scent/_scent.dm index 745083907f1f7..c6b8a0175d703 100644 --- a/code/datums/extensions/scent/_scent.dm +++ b/code/datums/extensions/scent/_scent.dm @@ -60,8 +60,8 @@ Scent intensity else to_chat(user, SPAN_WARNING("ALERT! Your sensors pick up an overwhelming concentration of [scent].")) /***** - Scent extensions - Usage: +Scent extensions +Usage: To add: set_extension(atom, /datum/extension/scent/PATH/TO/SPECIFIC/SCENT) This will set up the extension and will make it begin to emit_scent. diff --git a/code/datums/extensions/state_machine.dm b/code/datums/extensions/state_machine.dm index c6aabb7fb9aad..b8e80fc31d510 100644 --- a/code/datums/extensions/state_machine.dm +++ b/code/datums/extensions/state_machine.dm @@ -7,6 +7,7 @@ var/global/list/state_machines = list() return islist(machines) && machines[base_type] /proc/add_state_machine(datum/holder, base_type, fsm_type) + RETURN_TYPE(/datum/state_machine) if(istype(holder) && base_type) var/holder_ref = "\ref[holder]" var/list/machines = global.state_machines[holder_ref] diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index 49c11cc498065..d3f724dc339d2 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -11,18 +11,8 @@ var/global/datum/getrev/revdata = new() if(length(head_branch)) branch = copytext(head_branch[1], 17) - var/list/head_log = file2list(".git/logs/HEAD", "\n") - for(var/line=length(head_log), line>=1, line--) - if(head_log[line]) - var/list/last_entry = splittext(head_log[line], " ") - if(length(last_entry) < 2) continue - revision = last_entry[2] - // Get date/time - if(length(last_entry) >= 5) - var/unix_time = text2num(last_entry[5]) - if(unix_time) - date = unix2date(unix_time) - break + revision = rustg_git_revparse("HEAD") + date = rustg_git_commit_date("HEAD") to_world_log("Running revision:") to_world_log(branch) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index fec7743bcfea2..f3c98de78e987 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -1,5 +1,10 @@ +///Maximum distance (on the overmap) a teleporter can target with a less than 100% chance of getting an Interlude. +GLOBAL_VAR_INIT(maximum_safe_teleport_distance, 15) +///Minimum distance (on the overmap) a teleporter can send people to without risking a stop in the Interlude. +GLOBAL_VAR_INIT(minimum_safe_teleport_distance, 5) + /singleton/teleport - var/static/list/teleport_blacklist = list(/obj/item/disk/nuclear, /obj/item/storage/backpack/holding, /obj/effect/sparks) //Items that cannot be teleported, or be in the contents of someone who is teleporting. + var/static/list/teleport_blacklist = list(/obj/item/disk/nuclear, /obj/item/storage/backpack/holding, /obj/sparks) //Items that cannot be teleported, or be in the contents of someone who is teleporting. /singleton/teleport/proc/teleport(atom/target, atom/destination, precision = 0) if(!can_teleport(target,destination)) @@ -35,7 +40,7 @@ return 1 /singleton/teleport/sparks - var/datum/effect/effect/system/spark_spread/spark = new + var/datum/effect/spark_spread/spark = new /singleton/teleport/sparks/proc/do_spark(atom/target) if(!target.simulated) @@ -53,3 +58,12 @@ /proc/do_teleport(atom/movable/target, atom/destination, precision = 0, type = /singleton/teleport/sparks) var/singleton/teleport/tele = GET_SINGLETON(type) tele.teleport(target, destination, precision) + + +/// Teleport an object randomly within a set of connected zlevels +/proc/do_unstable_teleport_safe(atom/movable/target, list/zlevels = GLOB.using_map.station_levels) + var/turf/T = pick_area_turf_in_connected_z_levels( + list(GLOBAL_PROC_REF(is_not_space_area)), + list(GLOBAL_PROC_REF(not_turf_contains_dense_objects), GLOBAL_PROC_REF(IsTurfAtmosSafe)), + zlevels[1]) + do_teleport(target, T) diff --git a/code/datums/item_modifiers/_defines.dm b/code/datums/item_modifiers/_defines.dm index 5bad20dc4f85b..c506141e5d27d 100644 --- a/code/datums/item_modifiers/_defines.dm +++ b/code/datums/item_modifiers/_defines.dm @@ -1,4 +1,8 @@ #define SETUP_NAME "name" +#define SETUP_OBJ_SHEET "icon" +#define SETUP_ONMOB_SHEET "item_icons" #define SETUP_ICON_STATE "icon_state" #define SETUP_ITEM_STATE "item_state" #define SETUP_ITEM_STATE_SLOTS "item_state_slots" +#define SETUP_SPECIES_OBJ "sprite_sheets_obj" +#define SETUP_SPECIES_ONMOB "sprite_sheets" diff --git a/code/datums/item_modifiers/item_modifier.dm b/code/datums/item_modifiers/item_modifier.dm index e5c24f4197830..752d31d31f9a8 100644 --- a/code/datums/item_modifiers/item_modifier.dm +++ b/code/datums/item_modifiers/item_modifier.dm @@ -15,14 +15,12 @@ return FALSE I.SetName(type_setup[SETUP_NAME]) + I.icon = type_setup[SETUP_OBJ_SHEET] + I.item_icons = type_setup[SETUP_ONMOB_SHEET] I.icon_state = type_setup[SETUP_ICON_STATE] - - var/item_state = type_setup[SETUP_ITEM_STATE] - if(item_state) - I.item_state = item_state - - var/item_state_slots = type_setup[SETUP_ITEM_STATE_SLOTS] - if(item_state_slots) - I.item_state_slots = item_state_slots + I.sprite_sheets_obj = type_setup[SETUP_SPECIES_OBJ] + I.sprite_sheets = type_setup[SETUP_SPECIES_ONMOB] + I.item_state = type_setup[SETUP_ITEM_STATE] + I.item_state_slots = type_setup[SETUP_ITEM_STATE_SLOTS] return TRUE diff --git a/code/datums/item_modifiers/space_suits.dm b/code/datums/item_modifiers/space_suits.dm index f69b53404d9b0..c8b381287f684 100644 --- a/code/datums/item_modifiers/space_suits.dm +++ b/code/datums/item_modifiers/space_suits.dm @@ -1,131 +1,150 @@ -/singleton/item_modifier/space_suit/engineering - name = "Engineering" +/singleton/item_modifier/space_suit + name = "Standard" type_setups = list( /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "engineering voidsuit helmet", - SETUP_ICON_STATE = "rig0-engineering", - SETUP_ITEM_STATE = "eng_helm" + SETUP_NAME = "voidsuit helmet", + SETUP_OBJ_SHEET = 'icons/obj/clothing/obj_head.dmi', + SETUP_ONMOB_SHEET = list(slot_wear_suit_str = 'icons/mob/onmob/onmob_head.dmi'), + SETUP_ICON_STATE = "void", + SETUP_SPECIES_OBJ = list( + SPECIES_HUMAN = 'icons/obj/clothing/obj_head.dmi', + SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/obj_head_unathi.dmi', + SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/obj_head_skrell.dmi' + ), + SETUP_SPECIES_ONMOB = list( + SPECIES_HUMAN = 'icons/mob/onmob/onmob_head.dmi', + SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_unathi.dmi', + SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_head_skrell.dmi' + ) ), /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "engineering voidsuit", - SETUP_ICON_STATE = "rig-engineering", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "eng_voidsuit", - slot_r_hand_str = "eng_voidsuit" - ) + SETUP_NAME = "voidsuit", + SETUP_OBJ_SHEET = 'icons/obj/clothing/obj_suit.dmi', + SETUP_ONMOB_SHEET = list(slot_wear_suit_str = 'icons/mob/onmob/onmob_suit.dmi'), + SETUP_ICON_STATE = "void", + SETUP_SPECIES_OBJ = list( + SPECIES_HUMAN = 'icons/obj/clothing/obj_suit.dmi', + SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/obj_suit_unathi.dmi', + SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/obj_suit_skrell.dmi' + ), + SETUP_SPECIES_ONMOB = list( + SPECIES_HUMAN = 'icons/mob/onmob/onmob_suit.dmi', + SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_suit_unathi.dmi', + SPECIES_SKRELL = 'icons/mob/onmob/onmob_suit.dmi' + ) ) ) -/singleton/item_modifier/space_suit/engineering/alt - name = "Engineering, Alt" -/singleton/item_modifier/space_suit/engineering/alt/Initialize() +/singleton/item_modifier/space_suit/engineering + name = "Engineering" + +/singleton/item_modifier/space_suit/engineering/Initialize() . = ..() var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] - helmet_setup[SETUP_ICON_STATE] = "rig0-engineeringalt" - helmet_setup[SETUP_ITEM_STATE] = "engalt_helm" + helmet_setup[SETUP_NAME] = "engineering voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-engineering" + helmet_setup[SETUP_ITEM_STATE] = "eng_helm" var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] - suit_setup[SETUP_ICON_STATE] = "rig-engineeringalt" + suit_setup[SETUP_NAME] = "engineering voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-engineering" + suit_setup[SETUP_ITEM_STATE_SLOTS] = list( + slot_l_hand_str = "eng_voidsuit", + slot_r_hand_str = "eng_voidsuit" + ) + /singleton/item_modifier/space_suit/mining name = "Mining" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "mining voidsuit helmet", - SETUP_ICON_STATE = "rig0-mining", - SETUP_ITEM_STATE = "mining_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "mining voidsuit", - SETUP_ICON_STATE = "rig-mining", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "mining_voidsuit", - slot_r_hand_str = "mining_voidsuit" - ) + +/singleton/item_modifier/space_suit/mining/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "mining voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-mining" + helmet_setup[SETUP_ITEM_STATE] = "mining_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "mining voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-mining" + suit_setup[SETUP_ITEM_STATE_SLOTS] = list( + slot_l_hand_str = "mining_voidsuit", + slot_r_hand_str = "mining_voidsuit" ) - ) + + /singleton/item_modifier/space_suit/salvage name = "Salvage" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "salvage voidsuit helmet", - SETUP_ICON_STATE = "rig0-salvage", - SETUP_ITEM_STATE = "salvage_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "salvage voidsuit", - SETUP_ICON_STATE = "rig-salvage" - ) - ) +/singleton/item_modifier/space_suit/salvage/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "salvage voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-salvage" + helmet_setup[SETUP_ITEM_STATE] = "salvage_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "salvage voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-salvage" /singleton/item_modifier/space_suit/science name = "Science" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "excavation voidsuit helmet", - SETUP_ICON_STATE = "rig0-excavation", - SETUP_ITEM_STATE = "excavation-helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "excavation voidsuit", - SETUP_ICON_STATE = "rig-excavation", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "excavation_voidsuit", - slot_r_hand_str = "excavation_voidsuit" - ) + +/singleton/item_modifier/space_suit/science/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "excavation voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-excavation" + helmet_setup[SETUP_ITEM_STATE] = "excavation-helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "excavation voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-excavation" + suit_setup[SETUP_ITEM_STATE_SLOTS] = list( + slot_l_hand_str = "excavation_voidsuit", + slot_r_hand_str = "excavation_voidsuit" ) - ) + /singleton/item_modifier/space_suit/medical name = "Medical" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "medical voidsuit helmet", - SETUP_ICON_STATE = "rig0-medical", - SETUP_ITEM_STATE = "medical_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "medical voidsuit", - SETUP_ICON_STATE = "rig-medical", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "medical_voidsuit", - slot_r_hand_str = "medical_voidsuit" - ) - ) - ) -/singleton/item_modifier/space_suit/medical/alt - name = "Medical, Alt" - -/singleton/item_modifier/space_suit/medical/alt/Initialize() +/singleton/item_modifier/space_suit/medical/Initialize() . = ..() var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] - helmet_setup[SETUP_ICON_STATE] = "rig0-medicalalt" - helmet_setup[SETUP_ITEM_STATE] = "medicalalt_helm" + helmet_setup[SETUP_NAME] = "medical voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-medical" + helmet_setup[SETUP_ITEM_STATE] = "medical_helm" var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] - suit_setup[SETUP_ICON_STATE] = "rig-medicalalt" + suit_setup[SETUP_NAME] = "medical voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-medical" + suit_setup[SETUP_ITEM_STATE_SLOTS] = list( + slot_l_hand_str = "medical_voidsuit", + slot_r_hand_str = "medical_voidsuit" + ) + /singleton/item_modifier/space_suit/security name = "Security" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "security voidsuit helmet", - SETUP_ICON_STATE = "rig0-sec", - SETUP_ITEM_STATE = "sec_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "security voidsuit", - SETUP_ICON_STATE = "rig-sec", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "sec_voidsuit", - slot_r_hand_str = "sec_voidsuit" - ) + +/singleton/item_modifier/space_suit/security/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "security voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-sec" + helmet_setup[SETUP_ITEM_STATE] = "sec_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "security voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-sec" + suit_setup[SETUP_ITEM_STATE_SLOTS] = list( + slot_l_hand_str = "sec_voidsuit", + slot_r_hand_str = "sec_voidsuit" ) - ) + /singleton/item_modifier/space_suit/security/alt name = "Security, Alt" @@ -133,131 +152,240 @@ /singleton/item_modifier/space_suit/security/alt/Initialize() . = ..() var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "security voidsuit helmet" helmet_setup[SETUP_ICON_STATE] = "rig0-secalt" helmet_setup[SETUP_ITEM_STATE] = "secalt_helm" var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "security voidsuit" suit_setup[SETUP_ICON_STATE] = "rig-secalt" + /singleton/item_modifier/space_suit/atmos name = "Atmos" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "atmospherics voidsuit helmet", - SETUP_ICON_STATE = "rig0-atmos", - SETUP_ITEM_STATE = "atmos_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "atmospherics voidsuit", - SETUP_ICON_STATE = "rig-atmos", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "atmos_voidsuit", - slot_r_hand_str = "atmos_voidsuit" - ) - ) - ) - -/singleton/item_modifier/space_suit/atmos/alt - name = "Atmos, Alt" -/singleton/item_modifier/space_suit/atmos/alt/Initialize() +/singleton/item_modifier/space_suit/atmos/Initialize() . = ..() var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] - helmet_setup[SETUP_ICON_STATE] = "rig0-atmosalt" - helmet_setup[SETUP_ITEM_STATE] = "atmosalt_helm" + helmet_setup[SETUP_NAME] = "atmospherics voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-atmos" + helmet_setup[SETUP_ITEM_STATE] = "atmos_helm" var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] - suit_setup[SETUP_ICON_STATE] = "rig-atmosalt" - -/singleton/item_modifier/space_suit/explorer - name = "Explorer" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "exploration voidsuit helmet", - SETUP_ICON_STATE = "rig0_explorer", - SETUP_ITEM_STATE = "explorer_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "exploration voidsuit", - SETUP_ICON_STATE = "rig_explorer", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "s_suit", - slot_r_hand_str = "s_suit" - ) + suit_setup[SETUP_NAME] = "atmospherics voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-atmos" + suit_setup[SETUP_ITEM_STATE_SLOTS] = list( + slot_l_hand_str = "atmos_voidsuit", + slot_r_hand_str = "atmos_voidsuit" ) - ) + /singleton/item_modifier/space_suit/mercenary name = "Mercenary" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "blood-red voidsuit helmet", - SETUP_ICON_STATE = "rig0-syndie", - SETUP_ITEM_STATE = "syndie_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "blood-red voidsuit", - SETUP_ICON_STATE = "rig-syndie", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "syndie_voidsuit", - slot_r_hand_str = "syndie_voidsuit" - ) + +/singleton/item_modifier/space_suit/mercenary/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "blood-red voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-syndie" + helmet_setup[SETUP_ITEM_STATE] = "syndie_helm" + helmet_setup[SETUP_SPECIES_OBJ] = list( + SPECIES_HUMAN = 'icons/obj/clothing/obj_head.dmi', + SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/obj_head_unathi.dmi', + SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/obj_head_skrell.dmi', + SPECIES_VOX = 'icons/obj/clothing/species/vox/obj_head_vox.dmi' ) - ) + helmet_setup[SETUP_SPECIES_ONMOB] = list( + SPECIES_HUMAN = 'icons/mob/onmob/onmob_head.dmi', + SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_unathi.dmi', + SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_head_skrell.dmi', + SPECIES_VOX = 'icons/mob/species/vox/onmob_head_vox.dmi' + ) + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "blood-red voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-syndie" + suit_setup[SETUP_ITEM_STATE_SLOTS] = list( + slot_l_hand_str = "syndie_voidsuit", + slot_r_hand_str = "syndie_voidsuit" + ) + suit_setup[SETUP_SPECIES_OBJ] = list( + SPECIES_HUMAN = 'icons/obj/clothing/obj_suit.dmi', + SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/obj_suit_unathi.dmi', + SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/obj_suit_skrell.dmi', + SPECIES_VOX = 'icons/obj/clothing/species/vox/obj_suit_vox.dmi' + ) + suit_setup[SETUP_SPECIES_ONMOB] = list( + SPECIES_HUMAN = 'icons/mob/onmob/onmob_suit.dmi', + SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_suit_unathi.dmi', + SPECIES_SKRELL = 'icons/mob/onmob/onmob_suit.dmi', + SPECIES_VOX = 'icons/mob/species/vox/onmob_suit_vox.dmi' + ) + /singleton/item_modifier/space_suit/mercenary/emag name = "^%###^%$" + /singleton/item_modifier/space_suit/pilot name = "Pilot" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "pilot voidsuit helmet", - SETUP_ICON_STATE = "rig0_pilot", - SETUP_ITEM_STATE = "pilot_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "pilot voidsuit", - SETUP_ICON_STATE = "rig-pilot", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "s_suit", - slot_r_hand_str = "s_suit" - ) + +/singleton/item_modifier/space_suit/pilot/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "pilot voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0_pilot" + helmet_setup[SETUP_ITEM_STATE] = "pilot_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "pilot voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-pilot" + suit_setup[SETUP_ITEM_STATE_SLOTS] = list( + slot_l_hand_str = "s_suit", + slot_r_hand_str = "s_suit" ) - ) -/singleton/item_modifier/space_suit/hazard - name = "Hazard" + +//Torch +/singleton/item_modifier/space_suit/sol + name = "Standard, SolGov" type_setups = list( /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "hazardous operation voidsuit helmet", - SETUP_ICON_STATE = "rig0-haz", - SETUP_ITEM_STATE = "haz_helm" + SETUP_NAME = "voidsuit helmet", + SETUP_OBJ_SHEET = 'maps/torch/icons/obj/obj_head_solgov.dmi', + SETUP_ONMOB_SHEET = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi'), + SETUP_ICON_STATE = "rig_explorer", + SETUP_ITEM_STATE = "explorer_helm", + SETUP_SPECIES_OBJ = list( + SPECIES_HUMAN = 'maps/torch/icons/obj/obj_head_solgov.dmi', + SPECIES_UNATHI = 'maps/torch/icons/obj/unathi/obj_head_solgov_unathi.dmi', + SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_head_solgov_skrell.dmi' + ), + SETUP_SPECIES_ONMOB = list( + SPECIES_HUMAN = 'maps/torch/icons/mob/onmob_head_solgov.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_spacesuits_solgov_unathi.dmi', + SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi' + ) ), /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "hazardous operation voidsuit", - SETUP_ICON_STATE = "rig-haz", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "eng_voidsuit", - slot_r_hand_str = "eng_voidsuit" - ) + SETUP_NAME = "voidsuit", + SETUP_OBJ_SHEET = 'maps/torch/icons/obj/obj_suit_solgov.dmi', + SETUP_ONMOB_SHEET = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi'), + SETUP_ICON_STATE = "rig0_explorer", + SETUP_SPECIES_OBJ = list( + SPECIES_HUMAN = 'maps/torch/icons/obj/obj_suit_solgov.dmi', + SPECIES_UNATHI = 'maps/torch/icons/obj/unathi/obj_suit_solgov_unathi.dmi', + SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_suit_solgov_skrell.dmi' + ), + SETUP_SPECIES_ONMOB = list( + SPECIES_HUMAN = 'maps/torch/icons/mob/onmob_suit_solgov.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_spacesuits_solgov_unathi.dmi', + SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi' + ) ) ) -/singleton/item_modifier/space_suit/command + +/singleton/item_modifier/space_suit/sol/explorer + name = "Explorer" + +/singleton/item_modifier/space_suit/sol/explorer/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "exploration voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0_explorer" + helmet_setup[SETUP_ITEM_STATE] = "explorer_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "exploration voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig_explorer" + + +/singleton/item_modifier/space_suit/sol/pilot + name = "Pilot, Alt" + +/singleton/item_modifier/space_suit/sol/pilot/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "pilot voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0_pilot" + helmet_setup[SETUP_ITEM_STATE] = "pilot_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "pilot voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-pilot" + + +/singleton/item_modifier/space_suit/sol/command name = "Command" - type_setups = list( - /obj/item/clothing/head/helmet/space = list( - SETUP_NAME = "command voidsuit helmet", - SETUP_ICON_STATE = "rig0_command", - SETUP_ITEM_STATE = "command_helm" - ), - /obj/item/clothing/suit/space/void = list( - SETUP_NAME = "command voidsuit", - SETUP_ICON_STATE = "rig_command", - SETUP_ITEM_STATE_SLOTS = list( - slot_l_hand_str = "s_suit", - slot_r_hand_str = "s_suit" - ) - ) - ) + +/singleton/item_modifier/space_suit/sol/command/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "command voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0_command" + helmet_setup[SETUP_ITEM_STATE] = "command_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "command voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig_command" + + +/singleton/item_modifier/space_suit/sol/medical + name = "Medical, Alt" + +/singleton/item_modifier/space_suit/sol/medical/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "medical voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-medicalalt" + helmet_setup[SETUP_ITEM_STATE] = "medicalalt_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "medical voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-medicalalt" + + +/singleton/item_modifier/space_suit/sol/engineering + name = "Engineering, Alt" + +/singleton/item_modifier/space_suit/sol/engineering/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "engineering voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-engineeringalt" + helmet_setup[SETUP_ITEM_STATE] = "engalt_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "engineering voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-engineeringalt" + + +/singleton/item_modifier/space_suit/sol/atmos + name = "Atmos, Alt" + +/singleton/item_modifier/space_suit/sol/atmos/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "atmospherics voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-atmosalt" + helmet_setup[SETUP_ITEM_STATE] = "atmosalt_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "atmospherics voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-atmosalt" + + +/singleton/item_modifier/space_suit/sol/hazard + name = "Hazard" + +/singleton/item_modifier/space_suit/sol/hazard/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "hazardous operation voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-haz" + helmet_setup[SETUP_ITEM_STATE] = "haz_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "hazardous operation voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-haz" diff --git a/code/datums/item_modifiers/~defines.dm b/code/datums/item_modifiers/~defines.dm index 0bde7aec73716..c8d06953f09f6 100644 --- a/code/datums/item_modifiers/~defines.dm +++ b/code/datums/item_modifiers/~defines.dm @@ -1,4 +1,8 @@ #undef SETUP_NAME +#undef SETUP_OBJ_SHEET +#undef SETUP_ONMOB_SHEET #undef SETUP_ICON_STATE #undef SETUP_ITEM_STATE #undef SETUP_ITEM_STATE_SLOTS +#undef SETUP_SPECIES_OBJ +#undef SETUP_SPECIES_ONMOB \ No newline at end of file diff --git a/code/datums/keybindings/_defines.dm b/code/datums/keybindings/_defines.dm new file mode 100644 index 0000000000000..13d1cb93ac9cf --- /dev/null +++ b/code/datums/keybindings/_defines.dm @@ -0,0 +1,23 @@ +#define KEYBIND_CATEGORY_CLIENT "CLIENT" +#define KEYBIND_CATEGORY_EMOTE "EMOTE" +#define KEYBIND_CATEGORY_ADMIN "ADMIN" +#define KEYBIND_CATEGORY_CARBON "CARBON" +#define KEYBIND_CATEGORY_HUMAN "HUMAN" +#define KEYBIND_CATEGORY_ROBOT "ROBOT" +#define KEYBIND_CATEGORY_MISC "MISC" +#define KEYBIND_CATEGORY_MOVEMENT "MOVEMENT" +#define KEYBIND_CATEGORY_COMMUNICATION "COMMUNICATION" + +/// Max length of a keypress command before it's considered to be a forged packet/bogus command +#define MAX_KEYPRESS_COMMANDLENGTH 16 +/// Maximum keys that can be bound to one button +#define MAX_COMMANDS_PER_KEY 5 +/// Maximum keys per keybind +#define MAX_KEYS_PER_KEYBIND 3 +/// Length of held key buffer +#define HELD_KEY_BUFFER_LENGTH 15 + +// NOTE: INTENT_HOTKEY_* defines are not actual intents! +// They are here to support hotkeys +#define INTENT_HOTKEY_LEFT "left" +#define INTENT_HOTKEY_RIGHT "right" diff --git a/code/datums/keybindings/_keybinding.dm b/code/datums/keybindings/_keybinding.dm new file mode 100644 index 0000000000000..8047cde78642a --- /dev/null +++ b/code/datums/keybindings/_keybinding.dm @@ -0,0 +1,21 @@ +/datum/keybinding + var/name + var/full_name + var/description = "" + var/category = KEYBIND_CATEGORY_MISC + var/list/hotkey_keys + var/list/classic_keys + +/datum/keybinding/New() + // Default keys to the master "hotkey_keys" + if(LAZYLEN(hotkey_keys) && !LAZYLEN(classic_keys)) + classic_keys = hotkey_keys.Copy() + +/datum/keybinding/proc/down(client/user) + return FALSE + +/datum/keybinding/proc/up(client/user) + return FALSE + +/datum/keybinding/proc/can_use(client/user) + return TRUE diff --git a/code/datums/keybindings/admin.dm b/code/datums/keybindings/admin.dm new file mode 100644 index 0000000000000..776e9393af932 --- /dev/null +++ b/code/datums/keybindings/admin.dm @@ -0,0 +1,107 @@ +/datum/keybinding/admin + category = KEYBIND_CATEGORY_ADMIN + +/datum/keybinding/admin/can_use(client/user) + return !!user.holder + +/datum/keybinding/admin/admin_say + name = "admin_say" + full_name = "Admin Say" + description = "Talk with other admins." + hotkey_keys = list("None") + +/datum/keybinding/admin/admin_say/down(client/user) + user.get_admin_say() + return TRUE + +/datum/keybinding/admin/moderator_say + name = "moderator_say" + full_name = "Moderator Say" + description = "Talk with other moderators." + hotkey_keys = list("F5") + +/datum/keybinding/admin/moderator_say/down(client/user) + user.get_mod_say() + return TRUE + +/datum/keybinding/admin/admin_ghost + name = "admin_ghost" + full_name = "Aghost" + description = "Go ghost" + hotkey_keys = list("None") + +/datum/keybinding/admin/admin_ghost/down(client/user) + user.admin_ghost() + return TRUE + +/datum/keybinding/admin/list_players + name = "list_players" + full_name = "Player panel" + description = "Opens up the list players panel" + hotkey_keys = list("F6") + +/datum/keybinding/admin/list_players/down(client/user) + user.holder.player_panel() + return TRUE + +/datum/keybinding/admin/admin_pm + name = "admin_pm" + full_name = "Admin PM" + description = "Sends Admin PM message" + hotkey_keys = list("F7") + +/datum/keybinding/admin/admin_pm/down(client/user) + user.cmd_admin_pm_panel() + return TRUE + +/datum/keybinding/admin/invisimin + name = "invisimin" + full_name = "Admin Invisibility" + description = "Toggles ghost-like invisibility (Don't abuse this)" + hotkey_keys = list("F8") + +/datum/keybinding/admin/invisimin/down(client/user) + user.invisimin() + return TRUE + +/datum/keybinding/admin/dead_say + name = "dead_say" + full_name = "Dead Say" + description = "Allows you to send a message to dead chat" + hotkey_keys = list("F10") + +/datum/keybinding/admin/dead_say/down(client/user) + user.get_dead_say() + return TRUE + +/datum/keybinding/admin/deadmin + name = "deadmin" + full_name = "De-Admin" + description = "Shed your admin powers" + hotkey_keys = list("None") + +/datum/keybinding/admin/deadmin/down(client/user) + user.deadmin_self() + return TRUE + +/datum/keybinding/admin/readmin + name = "readmin" + full_name = "Re-Admin" + description = "Regain your admin powers" + hotkey_keys = list("None") + +/datum/keybinding/admin/readmin/down(client/user) + user.readmin_self() + return TRUE + +/client/proc/get_admin_say() + var/msg = input(src, null, "asay \"text\"") as text|null + cmd_admin_say(msg) + +/client/proc/get_mod_say() + var/msg = input(src, null, "msay \"text\"") as text|null + cmd_mod_say(msg) + +/client/proc/get_dead_say() + var/msg = input(src, null, "dsay \"text\"") as text + dsay(msg) diff --git a/code/datums/keybindings/carbon.dm b/code/datums/keybindings/carbon.dm new file mode 100644 index 0000000000000..a7218c7576cc3 --- /dev/null +++ b/code/datums/keybindings/carbon.dm @@ -0,0 +1,67 @@ +/datum/keybinding/carbon + category = KEYBIND_CATEGORY_CARBON + +/datum/keybinding/carbon/can_use(client/user) + return iscarbon(user.mob) + +/datum/keybinding/carbon/toggle_throw_mode + name = "toggle_throw_mode" + full_name = "Toggle Throw Mode" + description = "Toggle throwing the current item or not" + hotkey_keys = list("R", "Southwest") // PAGEDOWN + +/datum/keybinding/carbon/toggle_throw_mode/down(client/user) + var/mob/living/carbon/C = user.mob + C.toggle_throw_mode() + return TRUE + +/datum/keybinding/carbon/select_help_intent + name = "select_help_intent" + full_name = "Select Help Intent" + description = "" + hotkey_keys = list("1") + +/datum/keybinding/carbon/select_help_intent/down(client/user) + user.mob?.a_intent_change(I_HELP) + return TRUE + +/datum/keybinding/carbon/select_disarm_intent + name = "select_disarm_intent" + full_name = "Select Disarm Intent" + description = "" + hotkey_keys = list("2") + +/datum/keybinding/carbon/select_disarm_intent/down(client/user) + user.mob?.a_intent_change(I_DISARM) + return TRUE + +/datum/keybinding/carbon/select_grab_intent + name = "select_grab_intent" + full_name = "Select Grab Intent" + description = "" + hotkey_keys = list("3") + +/datum/keybinding/carbon/select_grab_intent/down(client/user) + user.mob?.a_intent_change(I_GRAB) + return TRUE + +/datum/keybinding/carbon/select_harm_intent + name = "select_harm_intent" + full_name = "Select Harm Intent" + description = "" + hotkey_keys = list("4") + +/datum/keybinding/carbon/select_harm_intent/down(client/user) + user.mob?.a_intent_change(I_HURT) + return TRUE + +/datum/keybinding/carbon/swap_hands + name = "swap_hands" + full_name = "Swap Hands" + description = "" + hotkey_keys = list("X", "Northeast") // PAGEUP + +/datum/keybinding/carbon/swap_hands/down(client/user) + var/mob/living/carbon/C = user.mob + C.swap_hand() + return TRUE diff --git a/code/datums/keybindings/client.dm b/code/datums/keybindings/client.dm new file mode 100644 index 0000000000000..8ffbe88662ad0 --- /dev/null +++ b/code/datums/keybindings/client.dm @@ -0,0 +1,52 @@ +/datum/keybinding/client + category = KEYBIND_CATEGORY_CLIENT + +/datum/keybinding/client/admin_help + name = "admin_help" + full_name = "Admin Help" + description = "Ask an admin for help" + hotkey_keys = list("F1") + +/datum/keybinding/client/admin_help/down(client/user) + user.adminhelp() + return TRUE + +/datum/keybinding/client/screenshot + name = "screenshot" + full_name = "Screenshot" + description = "Take a screenshot" + hotkey_keys = list() + +/datum/keybinding/client/screenshot/down(client/user) + winset(user, null, "command=.screenshot [!user.keys_held[SHIFT_CLICK] ? "auto" : ""]") + return TRUE + +/datum/keybinding/client/fit_viewport + name = "fit_viewport" + full_name = "Fit Viewport" + description = "Fits your viewport" + hotkey_keys = list("F11") + +/datum/keybinding/client/fit_viewport/down(client/user) + user.fit_viewport() + return TRUE + +/datum/keybinding/client/toggle_fullscreen + name = "toggle_fullscreen" + full_name = "Toggle Fullscreen" + description = "Opens game in fullscreen / Collapses to window" + hotkey_keys = list("F12") + +/datum/keybinding/client/toggle_fullscreen/down(client/user) + user.toggle_fullscreen() + return TRUE + +/datum/keybinding/client/minimal_hud + name = "minimal_hud" + full_name = "Minimal HUD" + description = "Hide most HUD features" + hotkey_keys = list("CtrlF12") + +/datum/keybinding/client/minimal_hud/down(client/user) + user.mob.button_pressed_F12() + return TRUE diff --git a/code/datums/keybindings/communication.dm b/code/datums/keybindings/communication.dm new file mode 100644 index 0000000000000..ef38147c17987 --- /dev/null +++ b/code/datums/keybindings/communication.dm @@ -0,0 +1,43 @@ +/datum/keybinding/client/communication + category = KEYBIND_CATEGORY_COMMUNICATION + +/datum/keybinding/client/communication/say + name = "IC Say" + full_name = "IC Say" + hotkey_keys = list("F3", "T") + +/datum/keybinding/client/communication/say/down(client/user) + user.mob.say_wrapper() + return TRUE + +/datum/keybinding/client/communication/whisper + name = "Whisper" + full_name = "Whisper" + hotkey_keys = list("ShiftT") + +/datum/keybinding/client/communication/whisper/down(client/user) + user.mob.whisper_wrapper() + return TRUE + +/datum/keybinding/client/communication/ooc + name = "OOC" + full_name = "Out Of Character Say (OOC)" + hotkey_keys = list("F2") + +/datum/keybinding/client/communication/looc + name = "LOOC" + full_name = "Local Out Of Character Say (LOOC)" + hotkey_keys = list("L") + +/datum/keybinding/client/communication/looc/down(client/user) + user.looc() + return TRUE + +/datum/keybinding/client/communication/me + name = "IC Me" + full_name = "Custom Emote (/Me)" + hotkey_keys = list("F4", "M") + +/datum/keybinding/client/communication/me/down(client/user) + user.mob.me_wrapper() + return TRUE diff --git a/code/datums/keybindings/human.dm b/code/datums/keybindings/human.dm new file mode 100644 index 0000000000000..9f17f853d8e02 --- /dev/null +++ b/code/datums/keybindings/human.dm @@ -0,0 +1,78 @@ +/datum/keybinding/human + category = KEYBIND_CATEGORY_HUMAN + +/datum/keybinding/human/can_use(client/user) + return ishuman(user.mob) + +/datum/keybinding/human/quick_equip + name = "quick_equip" + full_name = "Quick Equip" + description = "Quickly puts an item in the best slot available" + hotkey_keys = list("E") + +/datum/keybinding/human/quick_equip/down(client/user) + var/mob/living/carbon/human/H = user.mob + H.quick_equip() + return TRUE + +/datum/keybinding/human/holster + name = "holster" + full_name = "Holster" + description = "Draw or holster weapon" + hotkey_keys = list("H") + +/datum/keybinding/human/holster/down(client/user) + var/mob/living/carbon/human/H = user.mob + if(H.incapacitated()) + return + + var/obj/item/clothing/under/U = H.w_uniform + for(var/obj/S in U.accessories) + if(istype(S, /obj/item/clothing/accessory/storage/holster)) + var/datum/extension/holster/E = get_extension(S, /datum/extension/holster) + if(!E.holstered) + if(!H.get_active_hand()) + to_chat(H, SPAN_WARNING("You're not holding anything to holster.")) + return + E.holster(H.get_active_hand(), H) + return + else + E.unholster(H, TRUE) + return + + if(istype(H.belt, /obj/item/storage/belt/holster)) + var/obj/item/storage/belt/holster/B = H.belt + var/datum/extension/holster/E = get_extension(B, /datum/extension/holster) + if(!E.holstered) + if(!H.get_active_hand()) + to_chat(H, SPAN_WARNING("You're not holding anything to holster.")) + return + E.holster(H.get_active_hand(), H) + return + else + E.unholster(H, TRUE) + return + + return TRUE + +/datum/keybinding/human/give + name = "give_item" + full_name = "Give Item" + description = "Give the item you're currently holding" + hotkey_keys = list("V") + +/datum/keybinding/human/give/down(client/user) + var/mob/living/carbon/human/H = user.mob + H.give() + return TRUE + +/datum/keybinding/human/stop_pulling + name = "stop_pulling" + full_name = "Stop Pulling" + description = "Let go of the object and stop pulling" + hotkey_keys = list("C", "Delete") + +/datum/keybinding/human/stop_pulling/down(client/user) + var/mob/living/carbon/human/H = user.mob + H.stop_pulling() + return TRUE diff --git a/code/datums/keybindings/living.dm b/code/datums/keybindings/living.dm new file mode 100644 index 0000000000000..a15895197eb11 --- /dev/null +++ b/code/datums/keybindings/living.dm @@ -0,0 +1,50 @@ +/datum/keybinding/living + category = KEYBIND_CATEGORY_HUMAN + +/datum/keybinding/living/can_use(client/user) + return isliving(user.mob) + +/datum/keybinding/living/rest + name = "rest" + full_name = "Rest" + description = "You lay down/get up" + hotkey_keys = list("ShiftB") + +/datum/keybinding/living/rest/down(client/user) + var/mob/living/L = user.mob + L.lay_down() + return TRUE + +/datum/keybinding/living/resist + name = "resist" + full_name = "Resist" + description = "Break free of your current state. Handcuffed? On fire? Resist!" + hotkey_keys = list("B") + +/datum/keybinding/living/resist/down(client/user) + var/mob/living/L = user.mob + L.resist() + return TRUE + +/datum/keybinding/living/drop_item + name = "drop_item" + full_name = "Drop Item" + description = "" + hotkey_keys = list("Q", "Northwest") // HOME + +/datum/keybinding/living/drop_item/down(client/user) + var/mob/living/L = user.mob + L.drop_item() + return TRUE +/datum/keybinding/living/pixel_shift + name = "pixel_shift" + full_name = "Pixel Shift" + description = "Hold to pixel shift with movement keys" + hotkey_keys = list("B") + +/datum/keybinding/living/pixel_shift/down(client/user) + if(!(SEND_SIGNAL(user.mob, COMSIG_KB_MOB_PIXEL_SHIFT_DOWN) & COMSIG_KB_ACTIVATED)) + user.mob.AddComponent(/datum/component/pixel_shift) + +/datum/keybinding/living/pixel_shift/up(client/user) + SEND_SIGNAL(user.mob, COMSIG_KB_MOB_PIXEL_SHIFT_UP) diff --git a/code/datums/keybindings/mob.dm b/code/datums/keybindings/mob.dm new file mode 100644 index 0000000000000..5e4f61ddd9a95 --- /dev/null +++ b/code/datums/keybindings/mob.dm @@ -0,0 +1,137 @@ +/datum/keybinding/mob + category = KEYBIND_CATEGORY_HUMAN + +/datum/keybinding/mob/can_use(client/user) + return ismob(user.mob) ? TRUE : FALSE + +/datum/keybinding/mob/cycle_intent_right + name = "cycle_intent_right" + full_name = "Сycle Intent: Right" + description = "" + hotkey_keys = list("G") + +/datum/keybinding/mob/cycle_intent_right/down(client/user) + var/mob/M = user.mob + M.a_intent_change(INTENT_HOTKEY_RIGHT) + return TRUE + +/datum/keybinding/mob/cycle_intent_left + name = "cycle_intent_left" + full_name = "Сycle Intent: Left" + description = "" + hotkey_keys = list("F") + +/datum/keybinding/mob/cycle_intent_left/down(client/user) + var/mob/M = user.mob + M.a_intent_change(INTENT_HOTKEY_LEFT) + return TRUE + +/datum/keybinding/mob/activate_inhand + name = "activate_inhand" + full_name = "Activate In-Hand" + description = "Uses whatever item you have inhand" + hotkey_keys = list("Z") + +/datum/keybinding/mob/activate_inhand/down(client/user) + var/mob/M = user.mob + M.mode() + return TRUE + +/datum/keybinding/mob/target_head_cycle + name = "target_head_cycle" + full_name = "Target: Cycle Head" + description = "" + hotkey_keys = list("Numpad8") + +/datum/keybinding/mob/target_head_cycle/down(client/user) + user.body_toggle_head() + return TRUE + +/datum/keybinding/mob/target_r_arm + name = "target_r_arm" + full_name = "Target: Right Arm" + description = "" + hotkey_keys = list("Numpad4") + +/datum/keybinding/mob/target_r_arm/down(client/user) + user.body_r_arm() + return TRUE + +/datum/keybinding/mob/target_body_chest + name = "target_body_chest" + full_name = "Target: Body" + description = "" + hotkey_keys = list("Numpad5") + +/datum/keybinding/mob/target_body_chest/down(client/user) + user.body_chest() + return TRUE + +/datum/keybinding/mob/target_left_arm + name = "target_left_arm" + full_name = "Target: Left Arm" + description = "" + hotkey_keys = list("Numpad6") + +/datum/keybinding/mob/target_left_arm/down(client/user) + user.body_l_arm() + return TRUE + +/datum/keybinding/mob/target_right_leg + name = "target_right_leg" + full_name = "Target: Right leg" + description = "" + hotkey_keys = list("Numpad1") + +/datum/keybinding/mob/target_right_leg/down(client/user) + user.body_r_leg() + return TRUE + +/datum/keybinding/mob/target_body_groin + name = "target_body_groin" + full_name = "Target: Groin" + description = "" + hotkey_keys = list("Numpad2") + +/datum/keybinding/mob/target_body_groin/down(client/user) + user.body_groin() + return TRUE + +/datum/keybinding/mob/target_left_leg + name = "target_left_leg" + full_name = "Target: Left Leg" + description = "" + hotkey_keys = list("Numpad3") + +/datum/keybinding/mob/target_left_leg/down(client/user) + user.body_l_leg() + return TRUE + +/datum/keybinding/mob/move_up + name = "move_up" + full_name = "Move Up" + description = "Makes you go up" + hotkey_keys = list(",", "=") + +/datum/keybinding/mob/move_up/down(client/user) + var/mob/M = user.mob + M.move_up() + +/datum/keybinding/mob/move_down + name = "move_down" + full_name = "Move Down" + description = "Makes you go down" + hotkey_keys = list(".", "-") + +/datum/keybinding/mob/move_down/down(client/user) + var/mob/M = user.mob + M.down() + +/datum/keybinding/mob/toggle_gun_mode + name = "toggle_gun_mode" + full_name = "Toggle Gun Mode" + hotkey_keys = list("J") + +/datum/keybinding/mob/toggle_gun_mode/down(client/user) + var/mob/M = user.mob + M.toggle_gun_mode() diff --git a/code/datums/keybindings/movement.dm b/code/datums/keybindings/movement.dm new file mode 100644 index 0000000000000..f84f1ee39e9eb --- /dev/null +++ b/code/datums/keybindings/movement.dm @@ -0,0 +1,54 @@ +/datum/keybinding/movement + category = KEYBIND_CATEGORY_MOVEMENT + +/datum/keybinding/movement/north + name = "North" + full_name = "Move North" + description = "Moves your character north" + hotkey_keys = list("W", "North") + +/datum/keybinding/movement/south + name = "South" + full_name = "Move South" + description = "Moves your character south" + hotkey_keys = list("S", "South") + +/datum/keybinding/movement/west + hotkey_keys = list("A", "West") + name = "West" + full_name = "Move West" + description = "Moves your character left" + +/datum/keybinding/movement/east + hotkey_keys = list("D", "East") + name = "East" + full_name = "Move East" + description = "Moves your character east" + +/datum/keybinding/movement/move_quickly + hotkey_keys = list("Shift") + name = "moving_quickly" + full_name = "Move Quickly" + description = "Makes you move quickly" + +/datum/keybinding/movement/move_quickly/down(client/user) + user.setmovingquickly() + return TRUE + +/datum/keybinding/movement/move_quickly/up(client/user) + user.setmovingslowly() + return TRUE + +/datum/keybinding/movement/prevent_movement + name = "block_movement" + full_name = "Block movement" + description = "Prevents you from moving" + hotkey_keys = list("Ctrl") + +/datum/keybinding/movement/prevent_movement/down(client/user) + user.movement_locked = TRUE + return TRUE + +/datum/keybinding/movement/prevent_movement/up(client/user) + user.movement_locked = FALSE + return TRUE diff --git a/code/datums/keybindings/robot.dm b/code/datums/keybindings/robot.dm new file mode 100644 index 0000000000000..91d1d2d2ddc87 --- /dev/null +++ b/code/datums/keybindings/robot.dm @@ -0,0 +1,72 @@ +/datum/keybinding/robot + category = KEYBIND_CATEGORY_ROBOT + +/datum/keybinding/robot/can_use(client/user) + return isrobot(user.mob) + +/datum/keybinding/robot/moduleone + name = "module_one" + full_name = "Toggle Module 1" + description = "Equips or unequips the first module" + hotkey_keys = list("1") + +/datum/keybinding/robot/moduleone/down(client/user) + var/mob/living/silicon/robot/R = user.mob + R.toggle_module(1) + return TRUE + +/datum/keybinding/robot/moduletwo + name = "module_two" + full_name = "Toggle Module 2" + description = "Equips or unequips the second module" + hotkey_keys = list("2") + +/datum/keybinding/robot/moduletwo/down(client/user) + var/mob/living/silicon/robot/R = user.mob + R.toggle_module(2) + return TRUE + +/datum/keybinding/robot/modulethree + name = "module_three" + full_name = "Toggle Module 3" + description = "Equips or unequips the third module" + hotkey_keys = list("3") + +/datum/keybinding/robot/modulethree/down(client/user) + var/mob/living/silicon/robot/R = user.mob + R.toggle_module(3) + return TRUE + +/datum/keybinding/robot/intent_cycle + name = "cycle_intent" + full_name = "Cycle Intent Left" + description = "Cycles the intent left" + hotkey_keys = list("4") + +/datum/keybinding/robot/intent_cycle/down(client/user) + var/mob/living/silicon/robot/R = user.mob + R.a_intent_change(INTENT_HOTKEY_LEFT) + return TRUE + +/datum/keybinding/robot/module_cycle + name = "cycle_modules" + full_name = "Cycle Modules" + description = "Cycles your modules" + hotkey_keys = list("X") + +/datum/keybinding/robot/module_cycle/down(client/user) + var/mob/living/silicon/robot/R = user.mob + R.cycle_modules() + return TRUE + +/datum/keybinding/robot/unequip_module + name = "unequip_module" + full_name = "Unequip Module" + description = "Unequips the active module" + hotkey_keys = list("Q") + +/datum/keybinding/robot/unequip_module/down(client/user) + var/mob/living/silicon/robot/R = user.mob + if(R.module) + R.uneq_active() + return TRUE diff --git a/code/datums/mil_ranks.dm b/code/datums/mil_ranks.dm index 719a4ff27acb6..a8c25d177287a 100644 --- a/code/datums/mil_ranks.dm +++ b/code/datums/mil_ranks.dm @@ -181,6 +181,17 @@ GLOBAL_DATUM_INIT(mil_branches, /datum/mil_branches, new) var/list/accessory //type of accesory that will be equipped by job code with this rank var/sort_order = 0 // A numerical equivalent of the rank used to indicate its order when compared to other datums: eg e-1 = 1, o-1 = 11 -//Returns short designation (yes shorter than name_short), like E1, O3 etc. +/// Returns short designation (yes shorter than name_short), like E1, O3 etc. /datum/mil_rank/proc/grade() return sort_order + +/// Returns category of rank, like commissioned versus enlisted. +/datum/mil_rank/proc/rank_category() + return null + +/// Categories of ranks +/singleton/rank_category + var/name = "Unknown" + + /// Accesses granted based on being in this category of ranks. + var/add_accesses = list() diff --git a/code/datums/mind/mind.dm b/code/datums/mind/mind.dm index 2b91d8ac3a927..32e814877157c 100644 --- a/code/datums/mind/mind.dm +++ b/code/datums/mind/mind.dm @@ -49,7 +49,10 @@ var/has_been_rev = 0//Tracks if this mind has been a rev or not var/faction //associated faction - var/datum/changeling/changeling //changeling holder + var/datum/changeling/changeling //changeling holde + + ///String. Last spoken message. + var/last_words var/rev_cooldown = 0 @@ -61,6 +64,8 @@ var/list/initial_email_login = list("login" = "", "password" = "") + var/list/known_mobs = list() + /datum/mind/New(key) src.key = key ..() @@ -212,11 +217,11 @@ if(src in antag.current_antagonists) to_chat(usr, SPAN_WARNING("\The [src] is already a [antag.role_text]!")) return - var/result = antag.can_become_antag_detailed(src, TRUE) + var/result = antag.can_become_antag_detailed(src, TRUE, TRUE) if(result) to_chat(usr, SPAN_WARNING("\The [src] could not be made into a [antag.role_text]! [result].")) return - if(antag.add_antagonist(src, 1, 1, 0, 1, 1)) // Ignore equipment and role type for this. + if(antag.add_antagonist(src, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE)) // Ignore equipment and role type for this. log_admin("[key_name_admin(usr)] made [key_name(src)] into a [antag.role_text].") else to_chat(usr, SPAN_WARNING("\The [src] could not be made into a [antag.role_text]!")) @@ -413,7 +418,6 @@ to_chat(H, SPAN_DANGER(FONT_LARGE("You somehow have become the recepient of a loyalty transplant, and it just activated!"))) H.implant_loyalty(H, override = TRUE) log_admin("[key_name_admin(usr)] has loyalty implanted [current].") - else else if (href_list["silicon"]) SET_BIT(current.hud_updateflag, SPECIALROLE_HUD) switch(href_list["silicon"]) @@ -422,17 +426,6 @@ var/mob/living/silicon/robot/R = current if (istype(R)) R.emagged = FALSE - if (R.IsHolding(R.module.emag)) - R.module_active = null - if(R.module_state_1 == R.module.emag) - R.module_state_1 = null - R.module.emag.forceMove(null) - else if(R.module_state_2 == R.module.emag) - R.module_state_2 = null - R.module.emag.forceMove(null) - else if(R.module_state_3 == R.module.emag) - R.module_state_3 = null - R.module.emag.forceMove(null) log_admin("[key_name_admin(usr)] has unemag'ed [R].") if("unemagcyborgs") @@ -440,18 +433,6 @@ var/mob/living/silicon/ai/ai = current for (var/mob/living/silicon/robot/R in ai.connected_robots) R.emagged = FALSE - if (R.module) - if (R.IsHolding(R.module.emag)) - R.module_active = null - if(R.module_state_1 == R.module.emag) - R.module_state_1 = null - R.module.emag.forceMove(null) - else if(R.module_state_2 == R.module.emag) - R.module_state_2 = null - R.module.emag.forceMove(null) - else if(R.module_state_3 == R.module.emag) - R.module_state_3 = null - R.module.emag.forceMove(null) log_admin("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.") else if (href_list["common"]) @@ -520,7 +501,7 @@ special_role = null role_alt_title = null assigned_job = null - //faction = null //Uncommenting this causes a compile error due to 'undefined type', fucked if I know. + faction = MOB_FACTION_NEUTRAL changeling = null initial_account = null objectives = list() @@ -529,6 +510,10 @@ rev_cooldown = 0 brigged_since = -1 +/datum/mind/proc/add_known_mob(mob/M) + if(ismob(M)) + known_mobs += M + //Antagonist role check /mob/living/proc/check_special_role(role) if(mind) diff --git a/code/datums/movement/mob.dm b/code/datums/movement/mob.dm index fefe9d4fc1200..78039c620deaa 100644 --- a/code/datums/movement/mob.dm +++ b/code/datums/movement/mob.dm @@ -78,46 +78,55 @@ return MOVEMENT_PROCEED return (MOVEMENT_PROCEED|MOVEMENT_HANDLED) +/datum/movement_handler/mob/space + var/allow_move + // Space movement /datum/movement_handler/mob/space/DoMove(direction, mob/mover) - if(!mob.check_solid_ground()) - var/allowmove = mob.Allow_Spacemove(0) - if(!allowmove) + if(!mob.has_gravity()) + if(!allow_move) return MOVEMENT_HANDLED - else if(allowmove == -1 && mob.handle_spaceslipping()) //Check to see if we slipped + if(!mob.space_do_move(allow_move, direction)) return MOVEMENT_HANDLED - else - mob.inertia_dir = 0 //If not then we can reset inertia and move /datum/movement_handler/mob/space/MayMove(mob/mover, is_external) if(IS_NOT_SELF(mover) && is_external) return MOVEMENT_PROCEED - if(!mob.check_solid_ground()) - if(!mob.Allow_Spacemove(0)) + if(!mob.has_gravity()) + allow_move = mob.Process_Spacemove(1) + if(!allow_move) return MOVEMENT_STOP + return MOVEMENT_PROCEED // Buckle movement /datum/movement_handler/mob/buckle_relay/DoMove(direction, mover) - // TODO: Datumlize buckle-handling - if(mob.pulledby || mob.buckled) // Wheelchair driving! - if(istype(mob.loc, /turf/space)) - return // No wheelchair driving in space - if(istype(mob.pulledby, /obj/structure/bed/chair/wheelchair)) - . = MOVEMENT_HANDLED - mob.pulledby.DoMove(direction, mob) - else if(istype(mob.buckled, /obj/structure/bed/chair/wheelchair)) - . = MOVEMENT_HANDLED - if(ishuman(mob)) - var/mob/living/carbon/human/driver = mob - var/obj/item/organ/external/l_hand = driver.get_organ(BP_L_HAND) - var/obj/item/organ/external/r_hand = driver.get_organ(BP_R_HAND) - if((!l_hand || l_hand.is_stump()) && (!r_hand || r_hand.is_stump())) - return // No hands to drive your chair? Tough luck! - //drunk wheelchair driving - direction = mob.AdjustMovementDirection(direction) - mob.buckled.DoMove(direction, mob) + if (!mob.pulledby && !mob.buckled) + return + if (isturf(mob.loc)) + var/turf/turf = mob.loc + if (!turf.has_gravity()) + DoFeedback(SPAN_WARNING("You need gravity to move!")) + return + if (istype(mob.pulledby, /obj/structure/bed/chair/wheelchair)) + . = MOVEMENT_HANDLED + mob.pulledby.DoMove(direction, mob) + return + if (istype(mob.buckled, /obj/structure/bed/chair/wheelchair)) + . = MOVEMENT_HANDLED + if(ishuman(mob)) + var/mob/living/carbon/human/driver = mob + if (!isnull(driver.l_hand) && !isnull(driver.r_hand)) + DoFeedback(SPAN_WARNING("You need at least one free hand to move!")) + return + var/obj/item/organ/external/l_hand = driver.get_organ(BP_L_HAND) + var/obj/item/organ/external/r_hand = driver.get_organ(BP_R_HAND) + if (!l_hand && !r_hand || l_hand?.is_stump() && r_hand?.is_stump()) + DoFeedback(SPAN_WARNING("You need at least one free hand to move!")) + return + direction = mob.AdjustMovementDirection(direction) + mob.buckled.DoMove(direction, mob) /datum/movement_handler/mob/buckle_relay/MayMove(mover) if(mob.buckled) @@ -131,7 +140,15 @@ /datum/movement_handler/mob/delay/DoMove(direction, mover, is_external) if(is_external) return - next_move = world.time + max(1, mob.movement_delay()) + // [SIERRA-EDIT] - SSINPUT + // next_move = world.time + max(1, mob.movement_delay()) // SIERRA-EDIT - ORIGINAL + delay = max(1, mob.movement_delay()) + if((direction & (direction - 1))) // moved diagonally + delay *= sqrt(2) + + next_move = world.time + delay + UpdateGlideSize() + // [/SIERRA-ADD] /datum/movement_handler/mob/delay/MayMove(mover, is_external) if(IS_NOT_SELF(mover) && is_external) @@ -139,10 +156,22 @@ return ((mover && mover != mob) || world.time >= next_move) ? MOVEMENT_PROCEED : MOVEMENT_STOP /datum/movement_handler/mob/delay/proc/SetDelay(delay) + // [SIERRA-ADD] - GLIDING + src.delay = delay + // [/SIERRA-ADD] next_move = max(next_move, world.time + delay) + // [SIERRA-ADD] - GLIDING + UpdateGlideSize() + // [/SIERRA-ADD] /datum/movement_handler/mob/delay/proc/AddDelay(delay) + // [SIERRA-ADD] - GLIDING + src.delay += delay + // [/SIERRA-ADD] next_move += max(0, delay) + // [SIERRA-ADD] - GLIDING + UpdateGlideSize() + // [/SIERRA-ADD] // Stop effect /datum/movement_handler/mob/stop_effect/DoMove() @@ -150,7 +179,7 @@ return MOVEMENT_HANDLED /datum/movement_handler/mob/stop_effect/MayMove() - for(var/obj/effect/stop/S in mob.loc) + for(var/obj/stop/S in mob.loc) if(S.victim == mob) return MOVEMENT_STOP return MOVEMENT_PROCEED @@ -242,8 +271,18 @@ return // Something with pulling things - var/extra_delay = HandleGrabs(direction, old_turf) + // [SIERRA-EDIT] - SSINPUT + // var/extra_delay = HandleGrabs(direction, old_turf) // SIERRA-EDIT - ORIGINAL + // mob.ExtraMoveCooldown(extra_delay) // SIERRA-EDIT - ORIGINAL + var/extra_delay = 0 + for (var/obj/item/grab/G in mob) + if(G.assailant == G.affecting) + continue + extra_delay = max(extra_delay, G.grab_slowdown()) + mob.ExtraMoveCooldown(extra_delay) + HandleGrabs(direction, old_turf) + // [/SIERRA-EDIT] for (var/obj/item/grab/G in mob) if (G.assailant_reverse_facing()) @@ -270,7 +309,7 @@ /mob/living/carbon/human/get_stamina_used_per_step() var/mod = (1-((get_skill_value(SKILL_HAULING) - SKILL_MIN)/(SKILL_MAX - SKILL_MIN))) if(species && (species.species_flags & SPECIES_FLAG_LOW_GRAV_ADAPTED)) - if(has_gravity(src)) + if(has_gravity()) mod *= 1.2 else mod *= 0.8 @@ -293,7 +332,10 @@ if (get_dist(old_turf, M) <= 1) if (isturf(M.loc) && isturf(mob.loc)) if (mob.loc != old_turf && M.loc != mob.loc) - step(M, get_dir(M.loc, old_turf)) + // [SIERRA-EDIT] - GLIDING + // step(M, get_dir(M.loc, old_turf)) // SIERRA-EDIT - ORIGINAL + step_glide(M, get_dir(M.loc, old_turf), host.glide_size) + // [/SIERRA-EDIT] else for(var/mob/M in L) M.other_mobs = 1 @@ -315,7 +357,7 @@ /mob/proc/AdjustMovementDirection(direction) . = direction - if(!confused) + if(!is_confused()) return var/stability = MOVING_DELIBERATELY(src) ? 75 : 25 diff --git a/code/datums/movement/movement.dm b/code/datums/movement/movement.dm index d4a714ff02614..ae41da810d6a2 100644 --- a/code/datums/movement/movement.dm +++ b/code/datums/movement/movement.dm @@ -142,11 +142,21 @@ if(LAZYLEN(movement_handlers) && ispath(movement_handlers[1])) { \ /datum/movement_handler/mob expected_host_type = /mob VAR_PROTECTED/mob/mob + VAR_PROTECTED/next_feedback -/datum/movement_handler/mob/New(host) - ..() - src.mob = host /datum/movement_handler/mob/Destroy() mob = null . = ..() + + +/datum/movement_handler/mob/New(host) + ..() + mob = host + + +/datum/movement_handler/mob/proc/DoFeedback(feedback) + if (next_feedback > world.time) + return + next_feedback = world.time + 1 SECOND + to_chat(mob, feedback) diff --git a/code/datums/mutable_appearance.dm b/code/datums/mutable_appearance.dm index fe178279fb8f3..fe0d5ce4466c7 100644 --- a/code/datums/mutable_appearance.dm +++ b/code/datums/mutable_appearance.dm @@ -1,16 +1,22 @@ // Mutable appearances are an inbuilt byond datastructure. Read the documentation on them by hitting F1 in DM. // Basically use them instead of images for overlays/underlays and when changing an object's appearance if you're doing so with any regularity. // Unless you need the overlay/underlay to have a different direction than the base object. Then you have to use an image due to a bug. +/mutable_appearance/New() + ..() + // No clue why this is 0 by default yet images are on FLOAT_PLANE + // And yes this does have to be in the constructor, BYOND ignores it if you set it as a normal var + plane = FLOAT_PLANE // Mutable appearances are children of images, just so you know. // Helper similar to image() -/proc/mutable_appearance(icon, icon_state, color, flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR | RESET_ALPHA, plane = FLOAT_PLANE, layer = FLOAT_LAYER) +/proc/mutable_appearance(icon, icon_state, color, flags = DEFAULT_APPEARANCE_FLAGS, plane = FLOAT_PLANE, layer = FLOAT_LAYER) + RETURN_TYPE(/mutable_appearance) var/mutable_appearance/MA = new() MA.icon = icon MA.icon_state = icon_state MA.color = color - MA.appearance_flags = flags + MA.appearance_flags |= flags MA.plane = plane MA.layer = layer return MA diff --git a/code/datums/observation/dir_set.dm b/code/datums/observation/dir_set.dm index 16e74db77a6f0..2b9e89cef77b3 100644 --- a/code/datums/observation/dir_set.dm +++ b/code/datums/observation/dir_set.dm @@ -19,7 +19,7 @@ GLOBAL_DATUM_INIT(dir_set_event, /singleton/observ/dir_set, new) // Listen to the parent if possible. if(. && istype(dir_changer.loc, /atom/movable)) // We don't care about registering to turfs. - register(dir_changer.loc, dir_changer, /atom/proc/recursive_dir_set) + register(dir_changer.loc, dir_changer, TYPE_PROC_REF(/atom, recursive_dir_set)) /********************* * Direction Handling * @@ -28,8 +28,8 @@ GLOBAL_DATUM_INIT(dir_set_event, /singleton/observ/dir_set, new) /atom/movable/Entered(atom/movable/am, atom/old_loc) . = ..() if(GLOB.dir_set_event.has_listeners(am)) - GLOB.dir_set_event.register(src, am, /atom/proc/recursive_dir_set) + GLOB.dir_set_event.register(src, am, TYPE_PROC_REF(/atom, recursive_dir_set)) /atom/movable/Exited(atom/movable/am, atom/new_loc) . = ..() - GLOB.dir_set_event.unregister(src, am, /atom/proc/recursive_dir_set) + GLOB.dir_set_event.unregister(src, am, TYPE_PROC_REF(/atom, recursive_dir_set)) diff --git a/code/datums/observation/empd.dm b/code/datums/observation/empd.dm new file mode 100644 index 0000000000000..0ca15228c033f --- /dev/null +++ b/code/datums/observation/empd.dm @@ -0,0 +1,13 @@ +// Observer Pattern Implementation: EMPd +// Registration type: /atom +// +// Raised when: A /atom instance is EMPd. +// +// Arguments that the called proc should expect: +// /atom/empd_instance: The instance that was EMPd. +// severity: The EMP severity + +GLOBAL_DATUM_INIT(empd_event, /singleton/observ/empd, new) + +/singleton/observ/empd + name = "EMPd" diff --git a/code/datums/observation/entered.dm b/code/datums/observation/entered.dm index cbb08c2a2197b..b11d86d9c9617 100644 --- a/code/datums/observation/entered.dm +++ b/code/datums/observation/entered.dm @@ -21,4 +21,6 @@ GLOBAL_DATUM_INIT(entered_event, /singleton/observ/entered, new) /atom/Entered(atom/movable/enterer, atom/old_loc) ..() + SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, enterer, old_loc) + SEND_SIGNAL(enterer, COMSIG_ATOM_ENTERING, src, old_loc) GLOB.entered_event.raise_event(src, enterer, old_loc) diff --git a/code/datums/observation/helpers.dm b/code/datums/observation/helpers.dm index a62fd9cd7348f..16735a5db54d4 100644 --- a/code/datums/observation/helpers.dm +++ b/code/datums/observation/helpers.dm @@ -32,9 +32,9 @@ qdel(src) /proc/register_all_movement(event_source, listener) - GLOB.moved_event.register(event_source, listener, /atom/movable/proc/recursive_move) - GLOB.dir_set_event.register(event_source, listener, /atom/proc/recursive_dir_set) + GLOB.moved_event.register(event_source, listener, TYPE_PROC_REF(/atom/movable, recursive_move)) + GLOB.dir_set_event.register(event_source, listener, TYPE_PROC_REF(/atom, recursive_dir_set)) /proc/unregister_all_movement(event_source, listener) - GLOB.moved_event.unregister(event_source, listener, /atom/movable/proc/recursive_move) - GLOB.dir_set_event.unregister(event_source, listener, /atom/proc/recursive_dir_set) + GLOB.moved_event.unregister(event_source, listener, TYPE_PROC_REF(/atom/movable, recursive_move)) + GLOB.dir_set_event.unregister(event_source, listener, TYPE_PROC_REF(/atom, recursive_dir_set)) diff --git a/code/datums/observation/moved.dm b/code/datums/observation/moved.dm index dd159bce948e9..766b7ad38b353 100644 --- a/code/datums/observation/moved.dm +++ b/code/datums/observation/moved.dm @@ -19,7 +19,7 @@ GLOBAL_DATUM_INIT(moved_event, /singleton/observ/moved, new) // Listen to the parent if possible. if(. && istype(mover.loc, expected_type)) - register(mover.loc, mover, /atom/movable/proc/recursive_move) + register(mover.loc, mover, TYPE_PROC_REF(/atom/movable, recursive_move)) /******************** * Movement Handling * @@ -32,8 +32,8 @@ GLOBAL_DATUM_INIT(moved_event, /singleton/observ/moved, new) /atom/movable/Entered(atom/movable/am, atom/old_loc) . = ..() if(GLOB.moved_event.has_listeners(am)) - GLOB.moved_event.register(src, am, /atom/movable/proc/recursive_move) + GLOB.moved_event.register(src, am, TYPE_PROC_REF(/atom/movable, recursive_move)) /atom/movable/Exited(atom/movable/am, atom/new_loc) . = ..() - GLOB.moved_event.unregister(src, am, /atom/movable/proc/recursive_move) + GLOB.moved_event.unregister(src, am, TYPE_PROC_REF(/atom/movable, recursive_move)) diff --git a/code/datums/observation/shuttle_moved.dm b/code/datums/observation/shuttle_moved.dm index a0db8979340a3..832b01e8f3798 100644 --- a/code/datums/observation/shuttle_moved.dm +++ b/code/datums/observation/shuttle_moved.dm @@ -5,8 +5,8 @@ // // 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 +// /obj/shuttle_landmark/old_location: the old location's shuttle landmark +// /obj/shuttle_landmark/new_location: the new location's shuttle landmark // Observer Pattern Implementation: Shuttle Pre Move // Registration type: /datum/shuttle/autodock @@ -15,8 +15,8 @@ // // 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 +// /obj/shuttle_landmark/old_location: the old location's shuttle landmark +// /obj/shuttle_landmark/new_location: the new location's shuttle landmark GLOBAL_DATUM_INIT(shuttle_moved_event, /singleton/observ/shuttle_moved, new) diff --git a/code/datums/observation/sight_set.dm b/code/datums/observation/sight_set.dm index 664ad33b88c80..c2db96c382d3c 100644 --- a/code/datums/observation/sight_set.dm +++ b/code/datums/observation/sight_set.dm @@ -18,8 +18,14 @@ GLOBAL_DATUM_INIT(sight_set_event, /singleton/observ/sight_set, new) * Sight Set Handling * *********************/ +/mob/var/see_black = FALSE + /mob/proc/set_sight(new_sight) var/old_sight = sight + if(see_black) + new_sight |= SEE_BLACKNESS // Avoids pixel bleed from atoms overlapping completely dark turfs, but conflicts with other flags. + else + new_sight &= ~SEE_BLACKNESS if(old_sight != new_sight) sight = new_sight GLOB.sight_set_event.raise_event(src, old_sight, new_sight) diff --git a/code/datums/observation/~cleanup.dm b/code/datums/observation/~cleanup.dm index 01fc7192d3bd5..675ba7f8f889d 100644 --- a/code/datums/observation/~cleanup.dm +++ b/code/datums/observation/~cleanup.dm @@ -1,31 +1,32 @@ GLOBAL_LIST_EMPTY(global_listen_count) -GLOBAL_LIST_EMPTY(event_sources_count) -GLOBAL_LIST_EMPTY(event_listen_count) -/proc/cleanup_events(source) + +/datum + /// Tracks how many event registrations are listening to us. Used in cleanup to prevent dangling references. + var/event_source_count = 0 + /// Tracks how many event registrations we are listening to. Used in cleanup to prevent dangling references. + var/event_listen_count = 0 + + +/proc/cleanup_events(datum/source) if(GLOB.global_listen_count && GLOB.global_listen_count[source]) cleanup_global_listener(source, GLOB.global_listen_count[source]) - if(GLOB.event_sources_count && GLOB.event_sources_count[source]) - cleanup_source_listeners(source, GLOB.event_sources_count[source]) - if(GLOB.event_listen_count && GLOB.event_listen_count[source]) - cleanup_event_listener(source, GLOB.event_listen_count[source]) + if(source?.event_source_count > 0) + cleanup_source_listeners(source, source?.event_source_count) + if(source?.event_listen_count > 0) + cleanup_event_listener(source, source?.event_listen_count) /singleton/observ/register(datum/event_source, datum/listener, proc_call) . = ..() if(.) - GLOB.event_sources_count[event_source] += 1 - GLOB.event_listen_count[listener] += 1 + event_source.event_source_count++ + listener.event_listen_count++ /singleton/observ/unregister(datum/event_source, datum/listener, proc_call) . = ..() if(.) - GLOB.event_sources_count[event_source] -= 1 - GLOB.event_listen_count[listener] -= 1 - - if(GLOB.event_sources_count[event_source] <= 0) - GLOB.event_sources_count -= event_source - if(GLOB.event_listen_count[listener] <= 0) - GLOB.event_listen_count -= listener + event_source.event_source_count -= . + listener.event_listen_count -= . /singleton/observ/register_global(datum/listener, proc_call) . = ..() @@ -48,8 +49,8 @@ GLOBAL_LIST_EMPTY(event_listen_count) if(!(--listen_count)) return -/proc/cleanup_source_listeners(event_source, source_listener_count) - GLOB.event_sources_count -= event_source +/proc/cleanup_source_listeners(datum/event_source, source_listener_count) + event_source.event_source_count = 0 for(var/entry in GLOB.all_observable_events) var/singleton/observ/event = entry var/proc_owners = event.event_sources[event_source] @@ -60,8 +61,8 @@ GLOBAL_LIST_EMPTY(event_listen_count) if(!(--source_listener_count)) return -/proc/cleanup_event_listener(listener, listener_count) - GLOB.event_listen_count -= listener +/proc/cleanup_event_listener(datum/listener, listener_count) + listener.event_listen_count = 0 for(var/entry in GLOB.all_observable_events) var/singleton/observ/event = entry for(var/event_source in event.event_sources) diff --git a/code/datums/outfits/equipment/backpacks.dm b/code/datums/outfits/equipment/backpacks.dm index 34d69b2c75836..ff7cd01c062a5 100644 --- a/code/datums/outfits/equipment/backpacks.dm +++ b/code/datums/outfits/equipment/backpacks.dm @@ -34,6 +34,15 @@ name = "Messenger bag" path = /obj/item/storage/backpack/messenger +/singleton/backpack_outfit/messenger_bag/New() + ..() + tweaks += new /datum/backpack_tweak/selection/specified_types_as_list(list( + /obj/item/storage/backpack/messenger/black, + /obj/item/storage/backpack/messenger/brown, + /obj/item/storage/backpack/messenger/grey + )) + + /singleton/backpack_outfit/pocketbook name = "Pocketbook" path = /obj/item/storage/backpack/satchel/pocketbook @@ -179,6 +188,7 @@ * Helpers * **********/ /proc/get_default_outfit_backpack() + RETURN_TYPE(/singleton/backpack_outfit) var backpacks = GET_SINGLETON_SUBTYPE_MAP(/singleton/backpack_outfit) for(var/backpack in backpacks) var/singleton/backpack_outfit/bo = backpacks[backpack] diff --git a/code/datums/outfits/horror_killers.dm b/code/datums/outfits/horror_killers.dm index 8db0ad7c5d1bc..13021fd71ca77 100644 --- a/code/datums/outfits/horror_killers.dm +++ b/code/datums/outfits/horror_killers.dm @@ -26,7 +26,7 @@ glasses = /obj/item/clothing/glasses/thermal/plain/monocle suit = /obj/item/clothing/suit/apron l_pocket = /obj/item/material/knife/combat - r_pocket = /obj/item/scalpel + r_pocket = /obj/item/scalpel/basic r_hand = /obj/item/material/twohanded/fireaxe /singleton/hierarchy/outfit/masked_killer/post_equip(mob/living/carbon/human/H) diff --git a/code/datums/outfits/jobs/_defines.dm b/code/datums/outfits/jobs/_defines.dm index 8eed8a1aaf91d..10ef052d9ada2 100644 --- a/code/datums/outfits/jobs/_defines.dm +++ b/code/datums/outfits/jobs/_defines.dm @@ -16,9 +16,14 @@ backpack_overrides[/singleton/backpack_outfit/satchel] = /obj/item/storage backpack_overrides[/singleton/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/med; #define BACKPACK_OVERRIDE_RESEARCH \ -backpack_overrides[/singleton/backpack_outfit/backpack] = /obj/item/storage/backpack/toxins; \ -backpack_overrides[/singleton/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/tox; \ -backpack_overrides[/singleton/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/viro; +backpack_overrides[/singleton/backpack_outfit/backpack] = /obj/item/storage/backpack/sci; \ +backpack_overrides[/singleton/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/sci; \ +backpack_overrides[/singleton/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/sci; + +#define BACKPACK_OVERRIDE_RESEARCH_CORP \ +backpack_overrides[/singleton/backpack_outfit/backpack] = /obj/item/storage/backpack/corpsci; \ +backpack_overrides[/singleton/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/corpsci; \ +backpack_overrides[/singleton/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/corpsci; #define BACKPACK_OVERRIDE_SECURITY \ backpack_overrides[/singleton/backpack_outfit/backpack] = /obj/item/storage/backpack/security; \ @@ -30,11 +35,6 @@ backpack_overrides[/singleton/backpack_outfit/backpack] = /obj/item/storage backpack_overrides[/singleton/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/sec/exo; \ backpack_overrides[/singleton/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/sec/exo; -#define BACKPACK_OVERRIDE_VIROLOGY \ -backpack_overrides[/singleton/backpack_outfit/backpack] = /obj/item/storage/backpack/virology; \ -backpack_overrides[/singleton/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/vir; \ -backpack_overrides[/singleton/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/viro; - #define BACKPACK_OVERRIDE_COMMAND \ backpack_overrides[/singleton/backpack_outfit/backpack] = /obj/item/storage/backpack/command; \ backpack_overrides[/singleton/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel/com; \ diff --git a/code/datums/outfits/jobs/medical.dm b/code/datums/outfits/jobs/medical.dm index 583374bff49c2..8af86bbf4ecfd 100644 --- a/code/datums/outfits/jobs/medical.dm +++ b/code/datums/outfits/jobs/medical.dm @@ -44,7 +44,7 @@ mask = /obj/item/clothing/mask/surgical /singleton/hierarchy/outfit/job/medical/doctor/virologist/New() ..() - BACKPACK_OVERRIDE_VIROLOGY + BACKPACK_OVERRIDE_RESEARCH_CORP /singleton/hierarchy/outfit/job/medical/doctor/nurse name = OUTFIT_JOB_NAME("Nurse") @@ -71,7 +71,7 @@ /singleton/hierarchy/outfit/job/medical/chemist/New() ..() - BACKPACK_OVERRIDE_VIROLOGY + BACKPACK_OVERRIDE_RESEARCH_CORP /singleton/hierarchy/outfit/job/medical/geneticist name = OUTFIT_JOB_NAME("Geneticist") diff --git a/code/datums/outfits/jobs/science.dm b/code/datums/outfits/jobs/science.dm index 2160790c6b056..4e411d2feca47 100644 --- a/code/datums/outfits/jobs/science.dm +++ b/code/datums/outfits/jobs/science.dm @@ -7,7 +7,7 @@ /singleton/hierarchy/outfit/job/science/New() ..() - BACKPACK_OVERRIDE_RESEARCH + BACKPACK_OVERRIDE_RESEARCH_CORP /singleton/hierarchy/outfit/job/science/rd name = OUTFIT_JOB_NAME("Chief Science Officer") diff --git a/code/datums/outfits/misc.dm b/code/datums/outfits/misc.dm index 5b6e6368e0ee8..4ae5405578682 100644 --- a/code/datums/outfits/misc.dm +++ b/code/datums/outfits/misc.dm @@ -65,11 +65,8 @@ l_ear = /obj/item/device/radio/headset/vox_raider belt = /obj/item/storage/belt/utility/full gloves = /obj/item/clothing/gloves/vox - r_hand = /obj/item/gun/launcher/alien/spikethrower id_slot = slot_wear_id id_types = list(/obj/item/card/id/syndicate) id_pda_assignment = "Scavenger" - - flags = OUTFIT_HAS_BACKPACK|OUTFIT_RESET_EQUIPMENT diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index ede2fd6c79eb3..d02569b2b2fd2 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -142,8 +142,6 @@ var/global/list/outfits_singletons_by_type_ qdel(equip_holster) if(suit) H.equip_to_slot_or_del(new suit(H),slot_wear_suit) - if(back) - H.equip_to_slot_or_del(new back(H),slot_back) if(belt) H.equip_to_slot_or_del(new belt(H),slot_belt) if(gloves) @@ -154,6 +152,13 @@ var/global/list/outfits_singletons_by_type_ H.equip_to_slot_or_del(new mask(H),slot_wear_mask) if(head) H.equip_to_slot_or_del(new head(H),slot_head) + if(back) + H.equip_to_slot_or_del(new back(H),slot_back) + var/obj/item/rig/onback = H.back + if(istype(onback)) + onback.wearer = H + H.wearing_rig = onback + onback.toggle_seals(H, instant = TRUE) if(l_ear) var/l_ear_path = (OUTFIT_ADJUSTMENT_PLAIN_HEADSET & equip_adjustments) && ispath(l_ear, /obj/item/device/radio/headset) ? /obj/item/device/radio/headset : l_ear H.equip_to_slot_or_del(new l_ear_path(H),slot_l_ear) diff --git a/code/datums/outfits/pirates.dm b/code/datums/outfits/pirates.dm index 25b6a773b5049..f3a7998725135 100644 --- a/code/datums/outfits/pirates.dm +++ b/code/datums/outfits/pirates.dm @@ -8,7 +8,7 @@ /singleton/hierarchy/outfit/pirate/norm name = "Pirate - Normal" - head = /obj/item/clothing/mask/bandana/red + head = /obj/item/clothing/head/bandana /singleton/hierarchy/outfit/pirate/space name = "Pirate - Space" diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index bd2d4d78d71a7..5fde2622058d7 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -15,8 +15,10 @@ /datum/progressbar/private/Destroy() if (client && bar) client.images -= bar - qdel(bar) - . = ..() + actor = null + bar = null + client = null + return ..() /datum/progressbar/private/New(mob/actor, max_progress, atom/actee, display_on_actor = FALSE) actee = actee || actor @@ -58,8 +60,10 @@ /datum/progressbar/public/Destroy() if (actor && bar) actor.vis_contents -= bar + actor = null + actee = null qdel(bar) - . = ..() + return ..() /datum/progressbar/public/New(atom/movable/actor, max_progress, atom/movable/actee, display_on_actor = FALSE) actee = actee || actor diff --git a/code/datums/proximity_trigger/proximity_trigger.dm b/code/datums/proximity_trigger/proximity_trigger.dm index 8c6b8d40d2eb6..a5f61ffadde15 100644 --- a/code/datums/proximity_trigger/proximity_trigger.dm +++ b/code/datums/proximity_trigger/proximity_trigger.dm @@ -75,30 +75,30 @@ var/global/const/PROXIMITY_EXCLUDE_HOLDER_TURF = 1 // When acquiring turfs to mo /datum/proximity_trigger/proc/register_turfs() if(ismovable(holder)) - GLOB.moved_event.register(holder, src, /datum/proximity_trigger/proc/on_holder_moved) - GLOB.dir_set_event.register(holder, src, /datum/proximity_trigger/proc/register_turfs) // Changing direction might alter the relevant turfs + GLOB.moved_event.register(holder, src, TYPE_PROC_REF(/datum/proximity_trigger, on_holder_moved)) + GLOB.dir_set_event.register(holder, src, TYPE_PROC_REF(/datum/proximity_trigger, register_turfs)) // Changing direction might alter the relevant turfs var/list/new_turfs = acquire_relevant_turfs() if(listequal(turfs_in_range, new_turfs)) return for(var/t in (turfs_in_range - new_turfs)) - GLOB.opacity_set_event.unregister(t, src, /datum/proximity_trigger/proc/on_turf_visibility_changed) + GLOB.opacity_set_event.unregister(t, src, TYPE_PROC_REF(/datum/proximity_trigger, on_turf_visibility_changed)) for(var/t in (new_turfs - turfs_in_range)) - GLOB.opacity_set_event.register(t, src, /datum/proximity_trigger/proc/on_turf_visibility_changed) + GLOB.opacity_set_event.register(t, src, TYPE_PROC_REF(/datum/proximity_trigger, on_turf_visibility_changed)) turfs_in_range = new_turfs on_turf_visibility_changed() /datum/proximity_trigger/proc/unregister_turfs() if(ismovable(holder)) - GLOB.moved_event.unregister(holder, src, /datum/proximity_trigger/proc/on_holder_moved) - GLOB.dir_set_event.unregister(holder, src, /datum/proximity_trigger/proc/register_turfs) + GLOB.moved_event.unregister(holder, src, TYPE_PROC_REF(/datum/proximity_trigger, on_holder_moved)) + GLOB.dir_set_event.unregister(holder, src, TYPE_PROC_REF(/datum/proximity_trigger, register_turfs)) for(var/t in turfs_in_range) - GLOB.opacity_set_event.unregister(t, src, /datum/proximity_trigger/proc/on_turf_visibility_changed) + GLOB.opacity_set_event.unregister(t, src, TYPE_PROC_REF(/datum/proximity_trigger, on_turf_visibility_changed)) for(var/t in seen_turfs_) - GLOB.entered_event.unregister(t, src, /datum/proximity_trigger/proc/on_turf_entered) + GLOB.entered_event.unregister(t, src, TYPE_PROC_REF(/datum/proximity_trigger, on_turf_entered)) call(proc_owner, on_turfs_changed)(seen_turfs_.Copy(), list()) @@ -113,9 +113,9 @@ var/global/const/PROXIMITY_EXCLUDE_HOLDER_TURF = 1 // When acquiring turfs to mo call(proc_owner, on_turfs_changed)(seen_turfs_.Copy(), new_seen_turfs_.Copy()) for(var/t in (seen_turfs_ - new_seen_turfs_)) - GLOB.entered_event.unregister(t, src, /datum/proximity_trigger/proc/on_turf_entered) + GLOB.entered_event.unregister(t, src, TYPE_PROC_REF(/datum/proximity_trigger, on_turf_entered)) for(var/t in (new_seen_turfs_ - seen_turfs_)) - GLOB.entered_event.register(t, src, /datum/proximity_trigger/proc/on_turf_entered) + GLOB.entered_event.register(t, src, TYPE_PROC_REF(/datum/proximity_trigger, on_turf_entered)) seen_turfs_ = new_seen_turfs_ @@ -140,9 +140,10 @@ var/global/const/PROXIMITY_EXCLUDE_HOLDER_TURF = 1 // When acquiring turfs to mo if(!center) return - for(var/T in dview(range_, center)) - if(T in turfs_in_range) + FOR_DVIEW(var/T, range_, center, 0) + if (T in turfs_in_range) // This is awful, but I don't want to refactor this to be assoc. . += T + END_FOR_DVIEW /datum/proximity_trigger/proc/acquire_relevant_turfs() . = turf_selection.get_turfs(holder, range_) @@ -163,7 +164,7 @@ var/global/const/PROXIMITY_EXCLUDE_HOLDER_TURF = 1 // When acquiring turfs to mo /obj/item/proxy_debug/New() ..() overlay = image('icons/misc/mark.dmi', icon_state = "x3") - var/datum/proximity_trigger/a = new proxy_type(src, /obj/item/proxy_debug/proc/turf_entered, /obj/item/proxy_debug/proc/update_turfs) + var/datum/proximity_trigger/a = new proxy_type(src, TYPE_PROC_REF(/obj/item/proxy_debug, turf_entered), TYPE_PROC_REF(/obj/item/proxy_debug, update_turfs)) a.register_turfs() /obj/item/proxy_debug/proc/turf_entered(atom/A) @@ -171,6 +172,6 @@ var/global/const/PROXIMITY_EXCLUDE_HOLDER_TURF = 1 // When acquiring turfs to mo /obj/item/proxy_debug/proc/update_turfs(list/old_turfs, list/new_turfs) for(var/turf/T in old_turfs) - T.overlays -= overlay + T.CutOverlays(overlay) for(var/turf/T in new_turfs) - T.overlays += overlay + T.AddOverlays(overlay) diff --git a/code/datums/proximity_trigger/turf_selection.dm b/code/datums/proximity_trigger/turf_selection.dm index a75994f6158da..6214ebcd354da 100644 --- a/code/datums/proximity_trigger/turf_selection.dm +++ b/code/datums/proximity_trigger/turf_selection.dm @@ -3,7 +3,7 @@ /singleton/turf_selection/line/get_turfs(atom/origin, range) . = list() - var/center = get_turf(origin) + var/turf/center = get_turf(origin) if(!center) return for(var/i = 0 to range) @@ -13,9 +13,8 @@ . += center /singleton/turf_selection/square/get_turfs(atom/origin, range) - . = list() - var/center = get_turf(origin) + var/turf/center = get_turf(origin) if(!center) - return - for(var/turf/T in trange(range, center)) - . += T + return list() + + return RANGE_TURFS(center, range) diff --git a/code/datums/repositories/areas.dm b/code/datums/repositories/areas.dm index 1addeed8221e0..e49b66236ed76 100644 --- a/code/datums/repositories/areas.dm +++ b/code/datums/repositories/areas.dm @@ -6,19 +6,19 @@ var/global/repository/area/area_repository = new() var/list/by_z_level_cache_data /repository/area/New() - by_name_coords_cache_data = list() - by_name_cache_data = list() - by_z_level_cache_data = list() + LAZYINITLIST(by_name_coords_cache_data) + LAZYINITLIST(by_name_cache_data) + LAZYINITLIST(by_z_level_cache_data) ..() -/repository/area/proc/get_areas_by_name(list/area_predicates = /proc/is_not_space_area) - return priv_get_cached_areas(by_name_cache_data, /proc/group_areas_by_z_level, area_predicates, /proc/get_name) +/repository/area/proc/get_areas_by_name(list/area_predicates = GLOBAL_PROC_REF(is_not_space_area)) + return priv_get_cached_areas(by_name_cache_data, GLOBAL_PROC_REF(group_areas_by_z_level), area_predicates, GLOBAL_PROC_REF(get_name)) -/repository/area/proc/get_areas_by_name_and_coords(list/area_predicates = /proc/is_not_space_area) - return priv_get_cached_areas(by_name_coords_cache_data, /proc/group_areas_by_z_level, area_predicates, /proc/get_name_and_coordinates) +/repository/area/proc/get_areas_by_name_and_coords(list/area_predicates = GLOBAL_PROC_REF(is_not_space_area)) + return priv_get_cached_areas(by_name_coords_cache_data, GLOBAL_PROC_REF(group_areas_by_z_level), area_predicates, GLOBAL_PROC_REF(get_name_and_coordinates)) -/repository/area/proc/get_areas_by_z_level(list/area_predicates = /proc/is_not_space_area) - return priv_get_cached_areas(by_z_level_cache_data, /proc/group_areas_by_z_level, area_predicates, /proc/get_name_and_coordinates) +/repository/area/proc/get_areas_by_z_level(list/area_predicates = GLOBAL_PROC_REF(is_not_space_area)) + return priv_get_cached_areas(by_z_level_cache_data, GLOBAL_PROC_REF(group_areas_by_z_level), area_predicates, GLOBAL_PROC_REF(get_name_and_coordinates)) /repository/area/proc/priv_get_cached_areas(list/area_cache, area_group_proc, list/area_predicates, naming_proc) . = get_cache_entry(area_cache, area_predicates) diff --git a/code/datums/repositories/cameras.dm b/code/datums/repositories/cameras.dm index 9a3f3706c1f85..6cf41c0a2bc59 100644 --- a/code/datums/repositories/cameras.dm +++ b/code/datums/repositories/cameras.dm @@ -29,7 +29,7 @@ var/global/repository/cameras/camera_repository = new() var/cam = C.nano_structure() for(var/network in C.network) if(!networks[network]) - ADD_SORTED(networks, network, /proc/cmp_text_asc) + ADD_SORTED(networks, network, GLOBAL_PROC_REF(cmp_text_asc)) networks[network] = list() var/list/netlist = networks[network] netlist[LIST_PRE_INC(netlist)] = cam diff --git a/code/datums/repositories/client.dm b/code/datums/repositories/client.dm index f598d82683404..6960010692e18 100644 --- a/code/datums/repositories/client.dm +++ b/code/datums/repositories/client.dm @@ -51,11 +51,11 @@ var/global/repository/client/client_repository = new() /datum/client_lite/proc/rank2text() var/client/C = client_by_ckey(ckey) - if(!C || (C && !C.holder)) + if(!C?.holder) return + return " \[[C.holder.rank]\]" /proc/client_by_ckey(ckey) - for(var/client/C) - if(C.ckey == ckey) - return C + RETURN_TYPE(/client) + return GLOB.ckey_directory[ckey] diff --git a/code/datums/repositories/crew/crew.dm b/code/datums/repositories/crew/crew.dm index d32b4a9058bba..f67805ffdbe11 100644 --- a/code/datums/repositories/crew/crew.dm +++ b/code/datums/repositories/crew/crew.dm @@ -10,10 +10,10 @@ var/global/datum/repository/crew/crew_repository = new() cache_data = list() cache_data_alert = list() - var/PriorityQueue/general_modifiers = new/PriorityQueue(/proc/cmp_crew_sensor_modifier) - var/PriorityQueue/binary_modifiers = new/PriorityQueue(/proc/cmp_crew_sensor_modifier) - var/PriorityQueue/vital_modifiers = new/PriorityQueue(/proc/cmp_crew_sensor_modifier) - var/PriorityQueue/tracking_modifiers = new/PriorityQueue(/proc/cmp_crew_sensor_modifier) + var/PriorityQueue/general_modifiers = new/PriorityQueue(GLOBAL_PROC_REF(cmp_crew_sensor_modifier)) + var/PriorityQueue/binary_modifiers = new/PriorityQueue(GLOBAL_PROC_REF(cmp_crew_sensor_modifier)) + var/PriorityQueue/vital_modifiers = new/PriorityQueue(GLOBAL_PROC_REF(cmp_crew_sensor_modifier)) + var/PriorityQueue/tracking_modifiers = new/PriorityQueue(GLOBAL_PROC_REF(cmp_crew_sensor_modifier)) general_modifiers.Enqueue(new/crew_sensor_modifier/general()) binary_modifiers.Enqueue(new/crew_sensor_modifier/binary()) diff --git a/code/datums/repositories/crew/vital.dm b/code/datums/repositories/crew/vital.dm index 5b56d250f12e7..a04174c53825a 100644 --- a/code/datums/repositories/crew/vital.dm +++ b/code/datums/repositories/crew/vital.dm @@ -74,7 +74,7 @@ crew_data["charge_span"] = "good" if(crew_data["true_oxygenation"] != -1) - crew_data["pressure"] = "[Floor(120+rand(-5,5))]/[Floor(80+rand(-5,5))]" + crew_data["pressure"] = "[floor(120+rand(-5,5))]/[floor(80+rand(-5,5))]" crew_data["true_oxygenation"] = 100 crew_data["oxygenation"] = "normal" crew_data["oxygenation_span"] = "good" @@ -91,7 +91,7 @@ crew_data["charge_span"] = "bad" if(crew_data["true_oxygenation"] != -1) - crew_data["pressure"] = "[Floor((120+rand(-5,5))*0.25)]/[Floor((80+rand(-5,5))*0.25)]" + crew_data["pressure"] = "[floor((120+rand(-5,5))*0.25)]/[floor((80+rand(-5,5))*0.25)]" crew_data["true_oxygenation"] = 25 crew_data["oxygenation"] = "extremely low" crew_data["oxygenation_span"] = "bad" diff --git a/code/datums/repositories/follow.dm b/code/datums/repositories/follow.dm index ff9742e1ff997..0895e6e091fa6 100644 --- a/code/datums/repositories/follow.dm +++ b/code/datums/repositories/follow.dm @@ -31,7 +31,7 @@ var/global/repository/follow/follow_repository = new() followed_objects_assoc[AM] = follow_holder followed_objects.Add(follow_holder) - GLOB.destroyed_event.register(AM, src, /repository/follow/proc/remove_subject) + GLOB.destroyed_event.register(AM, src, TYPE_PROC_REF(/repository/follow, remove_subject)) /repository/follow/proc/remove_subject(atom/movable/AM) cache = null @@ -41,7 +41,7 @@ var/global/repository/follow/follow_repository = new() followed_objects_assoc -= AM followed_objects.Remove(follow_holder) - GLOB.destroyed_event.unregister(AM, src, /repository/follow/proc/remove_subject) + GLOB.destroyed_event.unregister(AM, src, TYPE_PROC_REF(/repository/follow, remove_subject)) qdel(follow_holder) @@ -51,6 +51,7 @@ var/global/repository/follow/follow_repository = new() return followed_subtypes[follow_type] /repository/follow/proc/get_follow_targets() + RETURN_TYPE(/list) if(cache && cache.is_valid()) return cache.data // The previous cache entry should have no further references and will thus be GCd eventually without qdel @@ -68,13 +69,13 @@ var/global/repository/follow/follow_repository = new() for(var/followed_name in followed_by_name) var/list/followed_things = followed_by_name[followed_name] if(length(followed_things) == 1) - ADD_SORTED(L, followed_things[1], /proc/cmp_follow_holder) + ADD_SORTED(L, followed_things[1], GLOBAL_PROC_REF(cmp_follow_holder)) else for(var/i = 1 to length(followed_things)) var/datum/follow_holder/followed_thing = followed_things[i] followed_thing.instance = i followed_thing.get_name(TRUE) - ADD_SORTED(L, followed_thing, /proc/cmp_follow_holder) + ADD_SORTED(L, followed_thing, GLOBAL_PROC_REF(cmp_follow_holder)) cache.data = L return L @@ -200,10 +201,10 @@ var/global/repository/follow/follow_repository = new() /datum/follow_holder/spiderling sort_order = 6 - followed_type = /obj/effect/spider/spiderling + followed_type = /obj/spider/spiderling /datum/follow_holder/spiderling/show_entry() - var/obj/effect/spider/spiderling/S = followed_instance + var/obj/spider/spiderling/S = followed_instance return ..() && S.amount_grown > 0 /datum/follow_holder/bot @@ -218,7 +219,7 @@ var/global/repository/follow/follow_repository = new() /datum/follow_holder/blob sort_order = 9 - followed_type = /obj/effect/blob/core + followed_type = /obj/blob/core suffix = "Blob" /datum/follow_holder/supermatter diff --git a/code/datums/repositories/icon_states.dm b/code/datums/repositories/icon_states.dm new file mode 100644 index 0000000000000..a6d07f9867848 --- /dev/null +++ b/code/datums/repositories/icon_states.dm @@ -0,0 +1,100 @@ +GLOBAL_DATUM_INIT(icon_states_repository, /repository/icon_states, new) + +/// Repository used as cache for `icon_states` of specific `icon` +/repository/icon_states + VAR_PRIVATE/list/icon_to_icon_states = list() + + +/* + * Tries to find `icon_states` for `icons` in cache first, + * if none - new cache entry for `icon` is generated. + * + ** Returns: Copy of icon states cache, so it's safe to modify it. + */ +/repository/icon_states/proc/get_icon_states(list/icons) + if(!islist(icons)) + icons = list(icons) + + var/list/icon_states = list() + for(var/icon in icons) + var/list/cached_icon_states = get_cached_icon_states(icon) + for(var/icon_state in cached_icon_states) + icon_states += icon_state + + return icon_states + +/* + * Checks if passed icon has any icon states. Null `icon` is forbidden and will cause runtime + * + ** Returns: TRUE if any icon state is present in icon, FALSE otherwise. + */ +/repository/icon_states/proc/is_icon_empty(icon) + ASSERT(icon) + + return !length(get_cached_icon_states(icon)) + +/* + * Checks if the `icon_state` is in `icon` + * + ** Returns: TRUE if `icon_state` is present in icon, FALSE otherwise. + */ +/repository/icon_states/proc/icon_has_state(icon, icon_state) + ASSERT(icon) + ASSERT(!isnull(icon_state)) // Empty string/text is resolved to `FALSE`, so should check for `null` explicitly + + var/list/cached_icon_states = get_cached_icon_states(icon) + return !!cached_icon_states[icon_state] + + +/* + * Checks if the `icon_state` is in one of the `icons`'s icon states + * + ** Returns: TRUE if icon state is present in any icon, FALSE otherwise. + */ +/repository/icon_states/proc/any_icon_has_state(list/icons, icon_state) + ASSERT(!isnull(icon_state)) // Empty string/text is resolved to `FALSE`, so should check for `null` explicitly + + if(!length(icons)) + return FALSE + + for(var/icon in icons) + if(icon_has_state(icon, icon_state)) + return TRUE + + return FALSE + +/* + * Private + * + * Tries to find cache of icon states in `icon`. If none found - new one is generated. + * + ** Returns: cached set of icon states for passed icon. + */ +/repository/icon_states/proc/get_cached_icon_states(icon) + PRIVATE_PROC(TRUE) + ASSERT(icon) + + var/list/cached_icon_states = icon_to_icon_states[icon] + if(!cached_icon_states) + cached_icon_states = generate_icon_states_cache(icon) + + return cached_icon_states + +/* + * Private + * + * Generates cache of icon states for passed icon path + * + ** Returns: cached set of icon states for passed icon path + */ +/repository/icon_states/proc/generate_icon_states_cache(icon) + PRIVATE_PROC(TRUE) + ASSERT(icon) + + var/list/cached_icon_states = list() + for(var/icon_state in icon_states(icon)) + cached_icon_states[icon_state] = TRUE + + icon_to_icon_states[icon] = cached_icon_states + + return cached_icon_states diff --git a/code/datums/repositories/images.dm b/code/datums/repositories/images.dm index 98731f71cf5b2..3738714e6a2d8 100644 --- a/code/datums/repositories/images.dm +++ b/code/datums/repositories/images.dm @@ -19,7 +19,7 @@ var/global/repository/images/image_repository = new() if(!atom_cache_list) atom_cache_list = list() image_cache_for_atoms[holder] = atom_cache_list - GLOB.destroyed_event.register(holder, src, /repository/images/proc/atom_destroyed) + GLOB.destroyed_event.register(holder, src, TYPE_PROC_REF(/repository/images, atom_destroyed)) var/cache_key = "[icon]-[icon_state]-[plane]-[layer]" . = atom_cache_list[cache_key] @@ -37,7 +37,7 @@ var/global/repository/images/image_repository = new() atom_cache_list.Cut() image_cache_for_atoms -= destroyed - GLOB.destroyed_event.unregister(destroyed, src, /repository/images/proc/atom_destroyed) + GLOB.destroyed_event.unregister(destroyed, src, TYPE_PROC_REF(/repository/images, atom_destroyed)) // Returns an image not bound to anything and which is typically applied as an overlay/underlay. /repository/images/proc/overlay_image(icon, icon_state, alpha, appearance_flags, color, dir, plane = FLOAT_PLANE, layer = FLOAT_LAYER) diff --git a/code/datums/security_state.dm b/code/datums/security_state.dm index 08669a6280070..58e2a92350b89 100644 --- a/code/datums/security_state.dm +++ b/code/datums/security_state.dm @@ -141,9 +141,8 @@ var/alarm_level = "off" // These values are primarily for station alarms and status displays, and which light colors and overlays to use - var/light_max_bright = 0.5 - var/light_inner_range = 0.1 - var/light_outer_range = 1 + var/light_range + var/light_power var/light_color_alarm var/light_color_status_display @@ -194,10 +193,10 @@ notify_station() /singleton/security_level/default/proc/notify_station() - for(var/obj/machinery/firealarm/FA in SSmachines.machinery) + for(var/obj/machinery/firealarm/FA as anything in SSmachines.get_machinery_of_type(/obj/machinery/firealarm)) if(FA.z in GLOB.using_map.contact_levels) FA.update_icon() - for (var/obj/machinery/rotating_alarm/security_alarm/SA in SSmachines.machinery) + for (var/obj/machinery/rotating_alarm/security_alarm/SA as anything in SSmachines.get_machinery_of_type(/obj/machinery/rotating_alarm/security_alarm)) if (SA.z in GLOB.using_map.contact_levels) SA.set_alert(name, alarm_level, light_color_alarm) post_status("alert") @@ -205,9 +204,8 @@ /singleton/security_level/default/code_green name = "code green" - light_max_bright = 0.25 - light_inner_range = 0.1 - light_outer_range = 1 + light_range = 2 + light_power = 1 light_color_alarm = COLOR_GREEN light_color_status_display = COLOR_GREEN @@ -222,9 +220,8 @@ name = "code blue" alarm_level = "on" - light_max_bright = 0.5 - light_inner_range = 0.1 - light_outer_range = 2 + light_range = 2 + light_power = 1 light_color_alarm = COLOR_BLUE light_color_status_display = COLOR_BLUE @@ -241,9 +238,8 @@ name = "code red" alarm_level = "on" - light_max_bright = 0.5 - light_inner_range = 0.1 - light_outer_range = 2 + light_range = 4 + light_power = 2 light_color_alarm = COLOR_RED light_color_status_display = COLOR_RED @@ -260,9 +256,8 @@ name = "code delta" alarm_level = "on" - light_max_bright = 0.75 - light_inner_range = 0.1 - light_outer_range = 3 + light_range = 4 + light_power = 2 light_color_alarm = COLOR_RED light_color_status_display = COLOR_NAVY_BLUE @@ -272,7 +267,7 @@ psionic_control_level = PSI_IMPLANT_DISABLED - var/static/datum/announcement/priority/security/security_announcement_delta = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/effects/siren.ogg')) + var/static/datum/announcement/priority/security/security_announcement_delta = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/effects/siren.ogg', volume = 70)) /singleton/security_level/default/code_delta/switching_up_to() security_announcement_delta.Announce("The self-destruct mechanism has been engaged. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.", "Attention! Delta security level reached!") diff --git a/code/datums/signals.dm b/code/datums/signals.dm new file mode 100644 index 0000000000000..503a87fefd4ce --- /dev/null +++ b/code/datums/signals.dm @@ -0,0 +1,126 @@ +/** + * Register to listen for a signal from the passed in target + * + * This sets up a listening relationship such that when the target object emits a signal + * the source datum this proc is called upon, will receive a callback to the given proctype + * Use PROC_REF(procname), TYPE_PROC_REF(type,procname) or GLOBAL_PROC_REF(procname) macros to validate the passed in proc at compile time. + * PROC_REF for procs defined on current type or it's ancestors, TYPE_PROC_REF for procs defined on unrelated type and GLOBAL_PROC_REF for global procs. + * Return values from procs registered must be a bitfield + * + * Arguments: + * * datum/target The target to listen for signals from + * * signal_type A signal name + * * proctype The proc to call back when the signal is emitted + * * override If a previous registration exists you must explicitly set this + */ +/datum/proc/RegisterSignal(datum/target, signal_type, proctype, override = FALSE) + if(QDELETED(src) || QDELETED(target)) + return + + if (islist(signal_type)) + var/static/list/known_failures = list() + var/list/signal_type_list = signal_type + var/message = "([target.type]) is registering [signal_type_list.Join(", ")] as a list, the older method. Change it to RegisterSignals." + + if (!(message in known_failures)) + known_failures[message] = TRUE + stack_trace("[target] [message]") + + RegisterSignals(target, signal_type, proctype, override) + return + + var/list/procs = (_signal_procs ||= list()) + var/list/target_procs = (procs[target] ||= list()) + var/list/lookup = (target._listen_lookup ||= list()) + + var/exists = target_procs[signal_type] + target_procs[signal_type] = proctype + + if(exists) + if(!override) + var/override_message = "[signal_type] overridden. Use override = TRUE to suppress this warning.\nTarget: [target] ([target.type]) Proc: [proctype]" + log_signal(override_message) + stack_trace(override_message) + return + + var/list/looked_up = lookup[signal_type] + + if(isnull(looked_up)) // Nothing has registered here yet + lookup[signal_type] = src + else if(!islist(looked_up)) // One other thing registered here + lookup[signal_type] = list(looked_up, src) + else // Many other things have registered here + looked_up += src + +/// Registers multiple signals to the same proc. +/datum/proc/RegisterSignals(datum/target, list/signal_types, proctype, override = FALSE) + for (var/signal_type in signal_types) + RegisterSignal(target, signal_type, proctype, override) + +/** + * Stop listening to a given signal from target + * + * Breaks the relationship between target and source datum, removing the callback when the signal fires + * + * Doesn't care if a registration exists or not + * + * Arguments: + * * datum/target Datum to stop listening to signals from + * * sig_typeor_types Signal string key or list of signal keys to stop listening to specifically + */ +/datum/proc/UnregisterSignal(datum/target, sig_type_or_types) + var/list/lookup = target._listen_lookup + if(!_signal_procs || !_signal_procs[target] || !lookup) + return + if(!islist(sig_type_or_types)) + sig_type_or_types = list(sig_type_or_types) + for(var/sig in sig_type_or_types) + if(!_signal_procs[target][sig]) + if(!istext(sig)) + stack_trace("We're unregistering with something that isn't a valid signal \[[sig]\], you fucked up") + continue + switch(length(lookup[sig])) + if(2) + lookup[sig] = (lookup[sig]-src)[1] + if(1) + stack_trace("[target] ([target.type]) somehow has single length list inside _listen_lookup") + if(src in lookup[sig]) + lookup -= sig + if(!length(lookup)) + target._listen_lookup = null + break + if(0) + if(lookup[sig] != src) + continue + lookup -= sig + if(!length(lookup)) + target._listen_lookup = null + break + else + lookup[sig] -= src + + _signal_procs[target] -= sig_type_or_types + if(!length(_signal_procs[target])) + _signal_procs -= target + +/** + * Internal proc to handle most all of the signaling procedure + * + * Will runtime if used on datums with an empty lookup list + * + * Use the [SEND_SIGNAL] define instead + */ +/datum/proc/_SendSignal(sigtype, list/arguments) + var/target = _listen_lookup[sigtype] + if(!length(target)) + var/datum/listening_datum = target + return NONE | call(listening_datum, listening_datum._signal_procs[src][sigtype])(arglist(arguments)) + . = NONE + // This exists so that even if one of the signal receivers unregisters the signal, + // all the objects that are receiving the signal get the signal this final time. + // AKA: No you can't cancel the signal reception of another object by doing an unregister in the same signal. + var/list/queued_calls = list() + for(var/datum/listening_datum as anything in target) + queued_calls[listening_datum] = listening_datum._signal_procs[src][sigtype] + for(var/datum/listening_datum as anything in queued_calls) + . |= call(listening_datum, queued_calls[listening_datum])(arglist(arguments)) diff --git a/code/datums/singletons/pools/pool_behavior.dm b/code/datums/singletons/pools/pool_behavior.dm deleted file mode 100644 index 4c71f2dd7488a..0000000000000 --- a/code/datums/singletons/pools/pool_behavior.dm +++ /dev/null @@ -1,14 +0,0 @@ -/// If this datum is pooled, the pool it belongs to. -/datum/var/singleton/instance_pool/instance_pool - - -/// If this datum is pooled, the last configurator applied (if any). -/datum/var/singleton/instance_configurator/instance_configurator - - -/datum/Destroy() - if (instance_pool?.ReturnInstance(src)) // We have a pool and it wants us back. - return QDEL_HINT_IWILLGC // Retain gc_destroyed as world.time. It might be useful. - instance_configurator = null - instance_pool = null - return ..() // Destroy normally. diff --git a/code/datums/singletons/shared_list/_shared_list.dm b/code/datums/singletons/shared_list/_shared_list.dm new file mode 100644 index 0000000000000..59a5e2906fd18 --- /dev/null +++ b/code/datums/singletons/shared_list/_shared_list.dm @@ -0,0 +1,172 @@ +/singleton/shared_list + abstract_type = /singleton/shared_list + var/max_pick = 8 + VAR_PRIVATE/list/list + var/mutable + +#if DM_VERSION >= 515 +/singleton/shared_list/proc/operator""() + return {"{"type":"[type]","mutable":"[mutable]","list":[json_encode(list)]}"} +#endif + + +/singleton/shared_list/proc/operator[](index) + return list[index] + + +/singleton/shared_list/proc/operator[]=(index, value) + if (!mutable) + throw EXCEPTION("[type] is not mutable.") + return + list[index] = value + + +/singleton/shared_list/proc/operator+(value) + return list + value + + +/singleton/shared_list/proc/operator+=(value) + if (!mutable) + throw EXCEPTION("[type] is not mutable.") + return + list += value + + +/singleton/shared_list/proc/operator-(value) + return list - value + + +/singleton/shared_list/proc/operator-=(value) + if (!mutable) + throw EXCEPTION("[type] is not mutable.") + return + list -= value + + +/singleton/shared_list/proc/operator|(value) + return list | value + + +/singleton/shared_list/proc/operator|=(value) + if (!mutable) + throw EXCEPTION("[type] is not mutable.") + return + list |= value + + +/singleton/shared_list/proc/operator&(value) + return list & value + + +/singleton/shared_list/proc/operator&=(value) + if (!mutable) + throw EXCEPTION("[type] is not mutable.") + return + list &= value + + +/singleton/shared_list/proc/operator^(value) + return list ^ value + + +/singleton/shared_list/proc/operator^=(value) + if (!mutable) + throw EXCEPTION("[type] is not mutable.") + return + list ^= value + + +/singleton/shared_list/proc/Add(/*Item1, Item2, ...*/) + if (!mutable) + throw EXCEPTION("[type] is not mutable.") + return + list.Add(arglist(args)) + + +/singleton/shared_list/proc/Copy(Start = 1, End = 0) + return list.Copy(Start, End) + + +/singleton/shared_list/proc/Cut(Start = 1, End = 0) + if (!mutable) + throw EXCEPTION("[type] is not mutable.") + return + list.Cut(Start, End) + + +/singleton/shared_list/proc/Find(Elem, Start = 1, End = 0) + return list.Find(Elem, Start, End) + + +/singleton/shared_list/proc/Insert(/*Index, Item1, Item2, ...*/) + if (!mutable) + throw EXCEPTION("[type] is not mutable.") + return + return list.Insert(arglist(args)) + + +/singleton/shared_list/proc/Join(Glue, Start = 1, End = 0) + return list.Join(Glue, Start, End) + + +/singleton/shared_list/proc/Remove(/*Item1, Item2, ...*/) + if (!mutable) + throw EXCEPTION("[type] is not mutable.") + return + return list.Remove(arglist(args)) + + +#if DM_VERSION >= 515 +/singleton/shared_list/proc/RemoveAll(/*Item1, Item2, ...*/) + if (!mutable) + throw EXCEPTION("[type] is not mutable.") + return + return list.RemoveAll(arglist(args)) +#endif + + +/singleton/shared_list/proc/Splice(/*Start = 1, End = 0, Item1, Item2, ...*/) + if (!mutable) + throw EXCEPTION("[type] is not mutable.") + return + list.Splice(arglist(args)) + + + +/singleton/shared_list/proc/Swap(Index1, Index2) + if (!mutable) + throw EXCEPTION("[type] is not mutable.") + return + list.Swap(Index1, Index2) + + +/// The length of the backing list. +/singleton/shared_list/proc/Len() + return length(list) + + +/// TRUE if entry is in the backing list as a value or key. +/singleton/shared_list/proc/Has(entry) + return (entry in list) + + +/// Returns a result, or list of results, randomly selected from the backing list by pick(). +/singleton/shared_list/proc/Pick(count = 1) + count = clamp(floor(count), 1, max_pick) + if (count == 1) + return pick(list) + var/list/result[count] + for (var/i = 1 to count) + result[i] = pick(list) + return result + + +/// Returns a result, or list of results, randomly selected from the backing map by pickweight(). +/singleton/shared_list/proc/PickWeight(count = 1) + count = clamp(floor(count), 1, max_pick) + if (count == 1) + return pickweight(list) + var/list/result[count] + for (var/i = 1 to count) + result[i] = pickweight(list) + return result diff --git a/code/datums/singletons/shared_list/path.dm b/code/datums/singletons/shared_list/path.dm new file mode 100644 index 0000000000000..6c282dd833303 --- /dev/null +++ b/code/datums/singletons/shared_list/path.dm @@ -0,0 +1,18 @@ +/singleton/shared_list/path + abstract_type = /singleton/shared_list/path + + +/// istype() for each list entry, returning the first match index or FALSE. +/singleton/shared_list/path/proc/HasType(path) + for (var/index = 1 to length(list)) + if (istype(path, list[index])) + return index + return FALSE + + +/// istype() for each map value, returning the first match key or FALSE. +/singleton/shared_list/path/proc/HasTypeValue(path) + for (var/key in list) + if (istype(path, list[key])) + return key + return FALSE diff --git a/code/datums/singletons/shared_list/sound.dm b/code/datums/singletons/shared_list/sound.dm new file mode 100644 index 0000000000000..d639b3ef28bee --- /dev/null +++ b/code/datums/singletons/shared_list/sound.dm @@ -0,0 +1,17 @@ +/singleton/shared_list/sound + abstract_type = /singleton/shared_list/sound + + +/// Play a sound from the backing list according to key using the same parameters as playsound(). +/singleton/shared_list/sound/proc/Play(key, atom/source, volume, vary_pitch, extra_range, falloff, is_global, frequency, ambient) + playsound(source, list[key], volume, vary_pitch, extra_range, falloff, is_global, ambient) + + +/// Play a sound from the backing list chosen by pick() using the same parameters as playsound(). +/singleton/shared_list/sound/proc/PlayPick(atom/source, volume, vary_pitch, extra_range, falloff, is_global, frequency, ambient) + playsound(source, pick(list), volume, vary_pitch, extra_range, falloff, is_global, ambient) + + +/// Play a sound from the backing list chosen by pickweight() using the same parameters as playsound(). +/singleton/shared_list/sound/proc/PlayPickWeight(atom/source, volume, vary_pitch, extra_range, falloff, is_global, frequency, ambient) + playsound(source, pickweight(list), volume, vary_pitch, extra_range, falloff, is_global, ambient) diff --git a/code/datums/sound_player.dm b/code/datums/sound_player.dm index 267ece0bb2030..ffe6505c1a232 100644 --- a/code/datums/sound_player.dm +++ b/code/datums/sound_player.dm @@ -116,10 +116,10 @@ GLOBAL_DATUM_INIT(sound_player, /singleton/sound_player, new) listeners = list() listener_status = list() - GLOB.destroyed_event.register(source, src, /datum/proc/qdel_self) + GLOB.destroyed_event.register(source, src, TYPE_PROC_REF(/datum, qdel_self)) if(ismovable(source)) - proxy_listener = new(source, /datum/sound_token/proc/PrivAddListener, /datum/sound_token/proc/PrivLocateListeners, range, proc_owner = src) + proxy_listener = new(source, TYPE_PROC_REF(/datum/sound_token, PrivAddListener), TYPE_PROC_REF(/datum/sound_token, PrivLocateListeners), range, proc_owner = src) proxy_listener.register_turfs() /datum/sound_token/Destroy() @@ -157,7 +157,7 @@ GLOBAL_DATUM_INIT(sound_player, /singleton/sound_player, new) listeners = null listener_status = null - GLOB.destroyed_event.unregister(source, src, /datum/proc/qdel_self) + GLOB.destroyed_event.unregister(source, src, TYPE_PROC_REF(/datum, qdel_self)) QDEL_NULL(proxy_listener) source = null @@ -201,16 +201,16 @@ GLOBAL_DATUM_INIT(sound_player, /singleton/sound_player, new) listeners += listener - GLOB.moved_event.register(listener, src, /datum/sound_token/proc/PrivUpdateListenerLoc) - GLOB.destroyed_event.register(listener, src, /datum/sound_token/proc/PrivRemoveListener) + GLOB.moved_event.register(listener, src, TYPE_PROC_REF(/datum/sound_token, PrivUpdateListenerLoc)) + GLOB.destroyed_event.register(listener, src, TYPE_PROC_REF(/datum/sound_token, PrivRemoveListener)) PrivUpdateListenerLoc(listener, FALSE) /datum/sound_token/proc/PrivRemoveListener(atom/listener, sound/null_sound) null_sound = null_sound || new(channel = sound.channel) sound_to(listener, null_sound) - GLOB.moved_event.unregister(listener, src, /datum/sound_token/proc/PrivUpdateListenerLoc) - GLOB.destroyed_event.unregister(listener, src, /datum/sound_token/proc/PrivRemoveListener) + GLOB.moved_event.unregister(listener, src, TYPE_PROC_REF(/datum/sound_token, PrivUpdateListenerLoc)) + GLOB.destroyed_event.unregister(listener, src, TYPE_PROC_REF(/datum/sound_token, PrivRemoveListener)) listeners -= listener /datum/sound_token/proc/PrivUpdateListenerLoc(atom/listener, update_sound = TRUE) diff --git a/code/datums/supplypacks/atmospherics.dm b/code/datums/supplypacks/atmospherics.dm index fd872d5b283c2..8115d263ce737 100644 --- a/code/datums/supplypacks/atmospherics.dm +++ b/code/datums/supplypacks/atmospherics.dm @@ -15,7 +15,7 @@ contains = list(/obj/item/storage/toolbox/emergency = 2, /obj/item/clothing/suit/storage/hazardvest = 2, /obj/item/tank/oxygen_emergency_extended = 4, - /obj/item/clothing/suit/space/emergency = 4, + /obj/item/clothing/suit/space/emergency = 4, /obj/item/clothing/head/helmet/space/emergency = 4, /obj/item/clothing/mask/gas = 4, /obj/item/device/flashlight/flare/glowstick = 5, diff --git a/code/datums/supplypacks/flooring.dm b/code/datums/supplypacks/flooring.dm index d4e03bd2d5b4b..2d6f550866148 100644 --- a/code/datums/supplypacks/flooring.dm +++ b/code/datums/supplypacks/flooring.dm @@ -55,6 +55,12 @@ cost = 15 containername = "red carpet crate" +/singleton/hierarchy/supply_pack/flooring/carpetblack + name = "Black carpet" + contains = list(/obj/item/stack/tile/carpetblack/fifty) + cost = 15 + containername = "black carpet crate" + /singleton/hierarchy/supply_pack/flooring/linoleum name = "Linoleum" contains = list(/obj/item/stack/tile/linoleum/fifty) diff --git a/code/datums/supplypacks/medical.dm b/code/datums/supplypacks/medical.dm index 01bc7acec68d0..e824047b1a50e 100644 --- a/code/datums/supplypacks/medical.dm +++ b/code/datums/supplypacks/medical.dm @@ -4,7 +4,10 @@ /singleton/hierarchy/supply_pack/medical/gloves name = "Refills - Sterile gloves" - contains = list(/obj/item/storage/box/gloves = 4) + contains = list( + /obj/item/storage/box/latexgloves = 2, + /obj/item/storage/box/nitrilegloves = 2 + ) cost = 20 containername = "medical crate" @@ -82,10 +85,10 @@ /singleton/hierarchy/supply_pack/medical/nanoblood name = "Refills - Nanoblood" contains = list(/obj/item/reagent_containers/ivbag/nanoblood = 4) - cost = 30 + cost = 40 containername = "nanoblood crate" -/singleton/hierarchy/supply_pack/medical/humanblood +/singleton/hierarchy/supply_pack/medical/human_oneg name = "Refills - Human O- Blood" contains = list( /obj/item/storage/box/freezer/blood/human = 1 @@ -93,22 +96,40 @@ cost = 15 containername = "human O- blood crate" -/singleton/hierarchy/supply_pack/medical/skrellblood +/singleton/hierarchy/supply_pack/medical/serpentid_oneg + name = "Refills - Serpentid O- Blood" + contains = list( + /obj/item/storage/box/freezer/blood/serpentid = 1 + ) + cost = 25 + containername = "unathi blood crate" + +/singleton/hierarchy/supply_pack/medical/skrell_oneg name = "Refills - Skrell O- Blood" contains = list( /obj/item/storage/box/freezer/blood/skrell = 1 ) - cost = 20 + cost = 25 containername = "skrell blood crate" -/singleton/hierarchy/supply_pack/medical/unathiblood +/singleton/hierarchy/supply_pack/medical/unathi_oneg name = "Refills - Unathi O- Blood" contains = list( /obj/item/storage/box/freezer/blood/unathi = 1 ) - cost = 20 + cost = 25 containername = "unathi blood crate" + +/singleton/hierarchy/supply_pack/medical/glucose + name = "Refills - Glucose" + contains = list( + /obj/item/storage/box/glucose = 2 + ) + cost = 15 + containername = "glucose crate" + + /singleton/hierarchy/supply_pack/medical/bodybag name = "Equipment - Body bags" contains = list(/obj/item/storage/box/bodybags = 3) @@ -257,7 +278,8 @@ /obj/item/clothing/head/surgery/blue, /obj/item/clothing/head/surgery/green, /obj/item/storage/box/masks, - /obj/item/storage/box/gloves) + /obj/item/storage/box/latexgloves + ) cost = 15 containertype = /obj/structure/closet/crate/secure containername = "medical scrubs crate" @@ -269,10 +291,11 @@ /obj/item/device/camera, /obj/item/device/camera_film = 2, /obj/item/autopsy_scanner, - /obj/item/scalpel, + /obj/item/scalpel/basic, /obj/item/storage/box/masks, - /obj/item/storage/box/gloves, - /obj/item/pen) + /obj/item/storage/box/latexgloves, + /obj/item/pen + ) cost = 20 containertype = /obj/structure/closet/crate/secure containername = "autopsy equipment crate" @@ -296,7 +319,8 @@ /obj/item/clothing/suit/storage/toggle/labcoat/virologist, /obj/item/clothing/suit/storage/toggle/labcoat/chemist, /obj/item/storage/box/masks, - /obj/item/storage/box/gloves) + /obj/item/storage/box/latexgloves + ) cost = 15 containertype = /obj/structure/closet/crate/secure containername = "medical uniform crate" @@ -311,7 +335,8 @@ /obj/item/clothing/mask/gas = 5, /obj/item/tank/oxygen = 5, /obj/item/storage/box/masks, - /obj/item/storage/box/gloves) + /obj/item/storage/box/latexgloves + ) cost = 50 containertype = /obj/structure/closet/crate/secure containername = "medical biohazard equipment crate" @@ -333,7 +358,7 @@ /obj/item/tank/anesthetic, /obj/item/FixOVein, /obj/item/hemostat, - /obj/item/scalpel, + /obj/item/scalpel/basic, /obj/item/bonegel, /obj/item/retractor, /obj/item/bonesetter, @@ -348,8 +373,9 @@ contains = list(/obj/item/clothing/under/rank/medical/scrubs/green = 2, /obj/item/clothing/head/surgery/green = 2, /obj/item/storage/box/masks, - /obj/item/storage/box/gloves, - /obj/item/storage/belt/medical = 3) + /obj/item/storage/box/latexgloves, + /obj/item/storage/belt/medical = 3 + ) cost = 15 containertype = /obj/structure/closet/crate containername = "sterile clothes crate" diff --git a/code/datums/supplypacks/nonessent.dm b/code/datums/supplypacks/nonessent.dm index 3b0c3d8497ceb..e2378605049b7 100644 --- a/code/datums/supplypacks/nonessent.dm +++ b/code/datums/supplypacks/nonessent.dm @@ -3,8 +3,7 @@ /singleton/hierarchy/supply_pack/nonessent/painters name = "Art - Painting Supplies" - contains = list(/obj/item/device/paint_sprayer = 2, - /obj/item/device/cable_painter = 2) + contains = list(/obj/item/device/paint_sprayer = 2) cost = 10 containername = "painting supplies crate" containertype = /obj/structure/closet/crate @@ -15,7 +14,7 @@ /obj/item/device/camera, /obj/item/device/camera_film = 2, /obj/item/storage/photo_album, - /obj/item/stack/package_wrap/twenty_five, + /obj/item/stack/package_wrap/cargo_wrap, /obj/item/reagent_containers/glass/paint/red, /obj/item/reagent_containers/glass/paint/green, /obj/item/reagent_containers/glass/paint/blue, @@ -24,7 +23,7 @@ /obj/item/reagent_containers/glass/paint/black, /obj/item/reagent_containers/glass/paint/white, /obj/item/contraband/poster, - /obj/item/wrapping_paper = 3) + /obj/item/stack/package_wrap/gift_wrap) cost = 10 containername = "arts and Crafts crate" @@ -188,7 +187,7 @@ /obj/item/clothing/head/pirate, /obj/item/clothing/head/hasturhood, /obj/item/clothing/head/powdered_wig, - /obj/item/clothing/head/hairflower, + /obj/item/clothing/head/hairflower/red, /obj/item/clothing/head/hairflower/yellow, /obj/item/clothing/head/hairflower/blue, /obj/item/clothing/head/hairflower/pink, @@ -276,34 +275,3 @@ /obj/item/flame/lighter/random) cost = 15 containername = "aromatherapy crate" - -/singleton/hierarchy/supply_pack/nonessent/pins - name = "Costume - Pride Pin Crate" - contains = list( - /obj/item/clothing/accessory/pride_pin/transgender = 2, - /obj/item/clothing/accessory/pride_pin/lesbian = 2, - /obj/item/clothing/accessory/pride_pin/bisexual = 2, - /obj/item/clothing/accessory/pride_pin/gay = 2, - /obj/item/clothing/accessory/pride_pin/pansexual = 2, - /obj/item/clothing/accessory/pride_pin/nonbinary = 2, - /obj/item/clothing/accessory/pride_pin/asexual = 2, - /obj/item/clothing/accessory/pride_pin/intersex = 2, - /obj/item/clothing/accessory/pride_pin/aromantic = 2 - ) - cost = 20 - containername = "pin crate" - -/singleton/hierarchy/supply_pack/nonessent/pronounbadges - name = "Costume - Pronoun Badge Crate" - contains = list( - /obj/item/clothing/accessory/pronouns/they = 2, - /obj/item/clothing/accessory/pronouns/hehim = 2, - /obj/item/clothing/accessory/pronouns/sheher = 2, - /obj/item/clothing/accessory/pronouns/hethey = 2, - /obj/item/clothing/accessory/pronouns/shethey = 2, - /obj/item/clothing/accessory/pronouns/heshe = 2, - /obj/item/clothing/accessory/pronouns/zehir = 2, - /obj/item/clothing/accessory/pronouns/ask = 2 - ) - cost = 20 - containername = "pronoun badge crate" diff --git a/code/datums/supplypacks/operations.dm b/code/datums/supplypacks/operations.dm index 42bb6cb8cd114..6388b70db70b7 100644 --- a/code/datums/supplypacks/operations.dm +++ b/code/datums/supplypacks/operations.dm @@ -76,18 +76,18 @@ /singleton/hierarchy/supply_pack/operations/bureaucracy contains = list(/obj/item/material/clipboard, - /obj/item/material/clipboard, - /obj/item/pen/retractable/red, - /obj/item/pen/retractable/blue, - /obj/item/pen/green, - /obj/item/device/camera_film, - /obj/item/folder/blue, - /obj/item/folder/red, - /obj/item/folder/yellow, - /obj/item/hand_labeler, - /obj/item/tape_roll, - /obj/structure/filingcabinet/chestdrawer{anchored = FALSE}, - /obj/item/paper_bin) + /obj/item/material/clipboard, + /obj/item/pen/retractable/red, + /obj/item/pen/retractable/blue, + /obj/item/pen/green, + /obj/item/device/camera_film, + /obj/item/folder/blue, + /obj/item/folder/red, + /obj/item/folder/yellow, + /obj/item/hand_labeler, + /obj/item/tape_roll, + /obj/structure/filingcabinet/chestdrawer{anchored = FALSE}, + /obj/item/paper_bin) name = "Office supplies" cost = 15 containertype = /obj/structure/closet/crate/large diff --git a/code/datums/supplypacks/security.dm b/code/datums/supplypacks/security.dm index 34e8f7bbe3409..a47431117d3a8 100644 --- a/code/datums/supplypacks/security.dm +++ b/code/datums/supplypacks/security.dm @@ -187,7 +187,7 @@ cost = 60 containertype = /obj/structure/closet/crate/secure/weapon containername = "lethal shotgun shells crate" - access = access_security + access = access_hos security_level = SUPPLY_SECURITY_ELEVATED /singleton/hierarchy/supply_pack/security/shotgunbeanbag @@ -196,24 +196,24 @@ cost = 30 containertype = /obj/structure/closet/crate/secure/weapon containername = "beanbag shotgun shells crate" - access = access_security + access = access_armory /singleton/hierarchy/supply_pack/security/pdwammo name = "Ammunition - SMG top mounted" - contains = list(/obj/item/ammo_magazine/smg_top = 4) - cost = 40 + contains = list(/obj/item/storage/box/ammo/smg = 2) + cost = 30 containertype = /obj/structure/closet/crate/secure/weapon containername = "SMG ammunition crate" - access = access_security + access = access_hos security_level = SUPPLY_SECURITY_HIGH /singleton/hierarchy/supply_pack/security/pdwammorubber name = "Ammunition - SMG top mounted rubber" - contains = list(/obj/item/ammo_magazine/smg_top/rubber = 4) - cost = 30 + contains = list(/obj/item/storage/box/ammo/smg/rubber = 2) + cost = 20 containertype = /obj/structure/closet/crate/secure/weapon containername = "SMG rubber ammunition crate" - access = access_security + access = access_armory /singleton/hierarchy/supply_pack/security/pdwammopractice name = "Ammunition - SMG top mounted practice" @@ -224,20 +224,37 @@ access = access_security /singleton/hierarchy/supply_pack/security/bullpupammo - name = "Ammunition - military rifle" - contains = list(/obj/item/ammo_magazine/mil_rifle = 4) - cost = 60 + name = "Ammunition - heavy bullpup rifle" + contains = list(/obj/item/storage/box/ammo/heavy_bullpup = 2) + cost = 40 containertype = /obj/structure/closet/crate/secure/weapon - containername = "military rifle ammunition crate" - access = access_security + containername = "heavy bullpup rifle ammunition crate" + access = access_hos security_level = SUPPLY_SECURITY_HIGH /singleton/hierarchy/supply_pack/security/bullpupammopractice - name = "Ammunition - military rifle practice" - contains = list(/obj/item/ammo_magazine/mil_rifle/practice = 8) + name = "Ammunition - heavy bullpup rifle practice" + contains = list(/obj/item/ammo_magazine/mil_rifle/heavy/practice = 8) + cost = 30 + containertype = /obj/structure/closet/crate/secure/weapon + containername = "heavy bullpup practice ammunition crate" + access = access_security + +/singleton/hierarchy/supply_pack/security/lightbullpupammo + name = "Ammunition - light bullpup rifle" + contains = list(/obj/item/storage/box/ammo/light_bullpup = 2) cost = 30 containertype = /obj/structure/closet/crate/secure/weapon - containername = "military rifle practice ammunition crate" + containername = "light bullpup ammunition crate" + access = access_armory + security_level = SUPPLY_SECURITY_HIGH + +/singleton/hierarchy/supply_pack/security/lightbullpupammopractice + name = "Ammunition - light bullpup rifle practice" + contains = list(/obj/item/ammo_magazine/mil_rifle/light/practice = 4) + cost = 20 + containertype = /obj/structure/closet/crate/secure/weapon + containername = "light bullpup practice ammunition crate" access = access_security /singleton/hierarchy/supply_pack/security/forensics //Not access-restricted so PIs can use it. @@ -307,3 +324,9 @@ containername = "security voidsuit crate" containertype = /obj/structure/closet/crate/secure/large access = access_brig + +/singleton/hierarchy/supply_pack/security/xenofauna + name = "Weapons - Xenofauna Carbines" + contains = list(/obj/item/gun/energy/laser/xenofauna = 3) + cost = 40 + containername = "xenofauna carbine crate" diff --git a/code/datums/supplypacks/supply.dm b/code/datums/supplypacks/supply.dm index 52d995dbb9719..0151b1c2e9ea8 100644 --- a/code/datums/supplypacks/supply.dm +++ b/code/datums/supplypacks/supply.dm @@ -22,10 +22,16 @@ /singleton/hierarchy/supply_pack/supply/wpaper name = "Cargo - Wrapping paper" - contains = list(/obj/item/stack/package_wrap/twenty_five = 3) + contains = list(/obj/item/stack/package_wrap/cargo_wrap = 3) cost = 10 containername = "wrapping paper" +/singleton/hierarchy/supply_pack/supply/gpaper + name = "Cargo - Gift Wrapping paper" + contains = list(/obj/item/stack/package_wrap/gift_wrap = 3) + cost = 10 + containername = "gift wrapping paper" + /singleton/hierarchy/supply_pack/supply/tapes name = "Medium - Blank Tapes (14)" contains = list (/obj/item/storage/box/tapes) diff --git a/code/datums/tgs_event_helper.dm b/code/datums/tgs_event_helper.dm new file mode 100644 index 0000000000000..7223dde27a4ec --- /dev/null +++ b/code/datums/tgs_event_helper.dm @@ -0,0 +1,41 @@ +/datum/tgs_event_handler/impl + var/attached = TRUE + +/datum/tgs_event_handler/impl/HandleEvent(event_code, ...) + switch(event_code) + if(TGS_EVENT_REBOOT_MODE_CHANGE) + var/list/reboot_mode_lookup = list ("[TGS_REBOOT_MODE_NORMAL]" = "be normal", "[TGS_REBOOT_MODE_SHUTDOWN]" = "shutdown the server", "[TGS_REBOOT_MODE_RESTART]" = "hard restart the server") + var old_reboot_mode = args[2] + var new_reboot_mode = args[3] + message_admins("TGS: Reboot will no longer [reboot_mode_lookup["[old_reboot_mode]"]], it will instead [reboot_mode_lookup["[new_reboot_mode]"]]") + if(TGS_EVENT_PORT_SWAP) + message_admins("TGS: Changing port from [world.port] to [args[2]]") + if(TGS_EVENT_INSTANCE_RENAMED) + message_admins("TGS: Instance renamed to from [world.TgsInstanceName()] to [args[2]]") + if(TGS_EVENT_COMPILE_START) + message_admins("TGS: Deployment started, new game version incoming...") + if(TGS_EVENT_COMPILE_CANCELLED) + message_admins("TGS: Deployment cancelled!") + if(TGS_EVENT_COMPILE_FAILURE) + message_admins("TGS: Deployment failed!") + if(TGS_EVENT_DEPLOYMENT_COMPLETE) + message_admins("TGS: Deployment complete!") + if(TGS_EVENT_WATCHDOG_DETACH) + message_admins("TGS restarting...") + attached = FALSE + addtimer(new Callback(src, PROC_REF(LateOnReattach)), 600) + + if(TGS_EVENT_WATCHDOG_REATTACH) + var/datum/tgs_version/old_version = world.TgsVersion() + var/datum/tgs_version/new_version = args[2] + if(!old_version.Equals(new_version)) + message_admins("TGS updated to v[new_version.deprefixed_parameter]") + else + message_admins("TGS: Back online") + attached = TRUE + if(TGS_EVENT_WATCHDOG_SHUTDOWN) + to_world("Server is shutting down!") + +/datum/tgs_event_handler/impl/proc/LateOnReattach() + if(!attached) + message_admins("Warning: TGS hasn't notified us of it coming back for a full minute! Is there a problem?") diff --git a/code/datums/trading/ai.dm b/code/datums/trading/ai.dm index aeca1eb05081a..940eaccee075a 100644 --- a/code/datums/trading/ai.dm +++ b/code/datums/trading/ai.dm @@ -27,7 +27,7 @@ They sell generic supplies and ask for generic supplies. TRADER_BRIBE_FAILURE = "You have given me money to stay, however, I am a station. I do not leave.", ) - possible_wanted_items = list(/obj/item/device/ = TRADER_SUBTYPES_ONLY, + possible_wanted_items = list(/obj/item/device = TRADER_SUBTYPES_ONLY, /obj/item/device/assembly = TRADER_BLACKLIST_ALL, /obj/item/device/assembly_holder = TRADER_BLACKLIST_ALL, /obj/item/device/encryptionkey/syndicate = TRADER_BLACKLIST, diff --git a/code/datums/trading/goods.dm b/code/datums/trading/goods.dm index 3799430f890a1..c55b67202036a 100644 --- a/code/datums/trading/goods.dm +++ b/code/datums/trading/goods.dm @@ -75,7 +75,7 @@ /obj/item/stock_parts/circuitboard/broken = TRADER_BLACKLIST, /obj/item/stack/cable_coil = TRADER_SUBTYPES_ONLY, /obj/item/stack/cable_coil/cyborg = TRADER_BLACKLIST, - /obj/item/stack/cable_coil/random = TRADER_BLACKLIST, + /obj/random/single/color/cable_coil = TRADER_BLACKLIST, /obj/item/stack/cable_coil/cut = TRADER_BLACKLIST, /obj/item/airalarm_electronics = TRADER_THIS_TYPE, /obj/item/airlock_electronics = TRADER_ALL, @@ -122,7 +122,6 @@ /obj/item/clothing/under/ert = TRADER_BLACKLIST, /obj/item/clothing/under/gimmick = TRADER_BLACKLIST_ALL, /obj/item/clothing/under/lawyer = TRADER_BLACKLIST, - /obj/item/clothing/under/pj = TRADER_BLACKLIST, /obj/item/clothing/under/rank = TRADER_BLACKLIST, /obj/item/clothing/under/shorts = TRADER_BLACKLIST, /obj/item/clothing/under/stripper = TRADER_BLACKLIST_ALL, @@ -193,7 +192,6 @@ Sells devices, odds and ends, and medical stuff /obj/item/device/kit/paint = TRADER_SUBTYPES_ONLY, /obj/item/aicard = TRADER_THIS_TYPE, /obj/item/device/binoculars = TRADER_THIS_TYPE, - /obj/item/device/cable_painter = TRADER_THIS_TYPE, /obj/item/device/flash = TRADER_THIS_TYPE, /obj/item/device/paint_sprayer = TRADER_THIS_TYPE, /obj/item/device/multitool = TRADER_THIS_TYPE, @@ -283,7 +281,7 @@ Sells devices, odds and ends, and medical stuff name = "Xenolife Collector" origin = "CSV Not a Poacher" trade_flags = TRADER_GOODS|TRADER_MONEY|TRADER_WANTED_ONLY|TRADER_WANTED_ALL - possible_origins = list("XenoHugs", "Xynergy Specimen Acquisition", "Skinner Catering Reseller", "NanoTrasen Companionship Division", "Lonely Pete's Exotic Companionship","Space Wei's Exotic Cuisine") + possible_origins = list("XenoHugs", "Xynergy Specimen Acquisition", "Skinner Catering Reseller", "Nanotrasen Companionship Division", "Lonely Pete's Exotic Companionship","Space Wei's Exotic Cuisine") speech = list(TRADER_HAIL_GENERIC = "Welcome! We are always looking to acquire more exotic life forms.", TRADER_HAIL_DENY = "We no longer wish to speak to you. Please contact our legal representative if you wish to rectify this.", @@ -354,8 +352,8 @@ Sells devices, odds and ends, and medical stuff /obj/item/hemostat = TRADER_THIS_TYPE, /obj/item/cautery = TRADER_THIS_TYPE, /obj/item/surgicaldrill = TRADER_THIS_TYPE, - /obj/item/scalpel = TRADER_THIS_TYPE, - /obj/item/scalpel/manager = TRADER_THIS_TYPE, + /obj/item/scalpel/basic = TRADER_THIS_TYPE, + /obj/item/scalpel/ims = TRADER_THIS_TYPE, /obj/item/circular_saw = TRADER_THIS_TYPE, /obj/item/bonegel = TRADER_THIS_TYPE, /obj/item/bonesetter = TRADER_THIS_TYPE, diff --git a/code/datums/trading/trade.dm b/code/datums/trading/trade.dm index ca3a431c04b42..72fbeefad4bf1 100644 --- a/code/datums/trading/trade.dm +++ b/code/datums/trading/trade.dm @@ -62,18 +62,22 @@ add_to_pool(trading_items, possible_trading_items, force = 1) add_to_pool(wanted_items, possible_wanted_items, force = 1) -/datum/trader/proc/generate_pool(list/trading_pool) - . = list() - for(var/type in trading_pool) - var/status = trading_pool[type] - if(status & TRADER_THIS_TYPE) - . += type - if(status & TRADER_SUBTYPES_ONLY) - . += subtypesof(type) - if(status & TRADER_BLACKLIST) - . -= type - if(status & TRADER_BLACKLIST_SUB) - . -= subtypesof(type) + +/datum/trader/proc/generate_pool(list/pool) + var/list/result = list() + for (var/path in pool) + var/status = pool[path] + if (GET_FLAGS(status, TRADER_THIS_TYPE) && !is_abstract(path)) + result += path + if (GET_FLAGS(status, TRADER_SUBTYPES_ONLY)) + result += subtypesof_real(path) + for (var/path in result) + var/status = pool[path] + if (GET_FLAGS(status, TRADER_BLACKLIST)) + result -= path + if (GET_FLAGS(status, TRADER_BLACKLIST_SUB)) + result -= subtypesof(path) + return result //If this hits 0 then they decide to up and leave. @@ -125,12 +129,12 @@ /datum/trader/proc/skill_curve(skill) switch(skill) - if(SKILL_EXPERT) + if(SKILL_EXPERIENCED) . = 1 - if(SKILL_EXPERT to SKILL_MAX) - . = 1 + (SKILL_EXPERT - skill) * 0.2 + if(SKILL_EXPERIENCED to SKILL_MAX) + . = 1 + (SKILL_EXPERIENCED - skill) * 0.2 else - . = 1 + (SKILL_EXPERT - skill) ** 2 + . = 1 + (SKILL_EXPERIENCED - skill) ** 2 //This condition ensures that the buy price is higher than the sell price on generic goods, i.e. the merchant can't be exploited . = max(., price_rng/((margin - 1)*(200 - price_rng))) diff --git a/code/datums/trading/vox.dm b/code/datums/trading/vox.dm index 42a64ab03f220..3a35990ea414e 100644 --- a/code/datums/trading/vox.dm +++ b/code/datums/trading/vox.dm @@ -39,7 +39,7 @@ TRADER_INSULT_GOOD = "Where this come from? Is trade no good?", TRADER_INSULT_BAD = "If you say all this at home, you be dead!" ) - possible_wanted_items = list(/obj/item/ = TRADER_SUBTYPES_ONLY, + possible_wanted_items = list(/obj/item = TRADER_SUBTYPES_ONLY, /obj/item/stack/material = TRADER_SUBTYPES_ONLY, /obj/item/stack/material/cyborg = TRADER_BLACKLIST_ALL, /obj/item/organ = TRADER_SUBTYPES_ONLY, diff --git a/code/datums/trading/weaponry.dm b/code/datums/trading/weaponry.dm index d255c23efb14e..3692c1f86ca81 100644 --- a/code/datums/trading/weaponry.dm +++ b/code/datums/trading/weaponry.dm @@ -27,7 +27,7 @@ /obj/item/gun/projectile/shotgun/pump = TRADER_SUBTYPES_ONLY, /obj/item/ammo_magazine = TRADER_SUBTYPES_ONLY, /obj/item/ammo_magazine/pistol/empty = TRADER_BLACKLIST, - /obj/item/ammo_magazine/mil_rifle/empty = TRADER_BLACKLIST, + /obj/item/ammo_magazine/mil_rifle/heavy/empty = TRADER_BLACKLIST, /obj/item/ammo_magazine/gyrojet/empty = TRADER_BLACKLIST, /obj/item/ammo_magazine/pistol/small/empty = TRADER_BLACKLIST, /obj/item/ammo_magazine/pistol/empty = TRADER_BLACKLIST, diff --git a/code/datums/traits/traits.dm b/code/datums/traits/traits.dm index b7298ddbe51c1..eaefd87d84351 100644 --- a/code/datums/traits/traits.dm +++ b/code/datums/traits/traits.dm @@ -70,7 +70,7 @@ abstract_type = /singleton/trait /singleton/trait/New() - if(type == abstract_type) + if(IsAbstract()) CRASH("Invalid initialization") /singleton/trait/proc/Validate(level) diff --git a/code/datums/underwear/undershirt.dm b/code/datums/underwear/undershirt.dm index 913ec9cf50b20..eac200c31e603 100644 --- a/code/datums/underwear/undershirt.dm +++ b/code/datums/underwear/undershirt.dm @@ -205,7 +205,7 @@ icon_state = "corp_polo" /datum/category_item/underwear/undershirt/polo_nt - name = "Polo, NanoTrasen" + name = "Polo, Nanotrasen" icon_state = "ntpolo" /datum/category_item/underwear/undershirt/polo_dais @@ -218,4 +218,4 @@ /datum/category_item/underwear/undershirt/dress_shirt name = "Dress shirt" - icon_state = "undershirt_dress" \ No newline at end of file + icon_state = "undershirt_dress" diff --git a/code/datums/underwear/underwear.dm b/code/datums/underwear/underwear.dm index a9b869602848d..0db8a8c06e60c 100644 --- a/code/datums/underwear/underwear.dm +++ b/code/datums/underwear/underwear.dm @@ -13,6 +13,13 @@ /datum/category_group/underwear/dd_SortValue() return sort_order +/datum/category_group/underwear/proc/get_default_category_item(gender) + for(var/datum/category_item/underwear/underwear_category_item as anything in items) + if(underwear_category_item.is_default(gender)) + return underwear_category_item + + return null + /datum/category_group/underwear/top name = "Underwear, top" sort_order = 1 diff --git a/code/datums/uplink/ammunition.dm b/code/datums/uplink/ammunition.dm index fdd5591e0b58e..07971b591eca6 100644 --- a/code/datums/uplink/ammunition.dm +++ b/code/datums/uplink/ammunition.dm @@ -7,7 +7,7 @@ /datum/uplink_item/item/ammo/holdout name = "Small Magazine" - desc = "A magazine for small pistols. Contains 8 rounds." + desc = "A 7mm magazine for holdout pistols like the P3 Whisper. Contains 8 rounds." item_cost = 3 path = /obj/item/ammo_magazine/pistol/small @@ -19,7 +19,7 @@ /datum/uplink_item/item/ammo/holdout_speedloader name = "Small Speedloader" - desc = "A speedloader for small revolvers. Contains 6 rounds." + desc = "A 7mm speedloader for holdout revolvers like the A&M Partner. Contains 6 rounds." item_cost = 3 path = /obj/item/ammo_magazine/speedloader/small @@ -30,22 +30,28 @@ /datum/uplink_item/item/ammo/speedloader name = "Standard Speedloader" - desc = "A speedloader for standard revolvers. Contains 6 rounds." + desc = "A 10mm speedloader for standard revolvers like the Lumoco Solid. Contains 6 rounds." item_cost = 8 path = /obj/item/ammo_magazine/speedloader /datum/uplink_item/item/ammo/rifle name = "Rifle Magazine" - desc = "A magazine for assault rifles. Contains 20 rounds." + desc = "A 5mmR magazine for assault rifles like the STS-35. Contains 20 rounds." item_cost = 8 path = /obj/item/ammo_magazine/rifle -/datum/uplink_item/item/ammo/bullpup //for zipguns - name = "Bullpup Rifle Magazine" - desc = "A magazine for bullpup assault rifles. Contains 15 rounds." +/datum/uplink_item/item/ammo/rifle + name = "Light Bullpup Rifle Magazine" + desc = "A 7mmR magazine for light bullpup assault rifles like the Z9 Pitbull. Contains 20 rounds." item_cost = 8 path = /obj/item/ammo_magazine/mil_rifle +/datum/uplink_item/item/ammo/bullpup + name = "Heavy Bullpup Rifle Magazine" + desc = "A 7mmR magazine for heavy bullpup assault rifles like the Z8 Bulldog. Contains 15 rounds." + item_cost = 8 + path = /obj/item/ammo_magazine/mil_rifle/heavy + /datum/uplink_item/item/ammo/sniperammo name = "Ammobox of Sniper Rounds" desc = "A container of rounds for the anti-materiel rifle. Contains 7 rounds." @@ -81,56 +87,80 @@ /datum/uplink_item/item/ammo/machine_pistol name = "Standard Stick Magazine" - desc = "A magazine for standard machine pistols. Contains 16 rounds." + desc = "A 10mm magazine for standard machine pistols like the MP6 Vesper. Contains 16 rounds." item_cost = 8 path = /obj/item/ammo_magazine/machine_pistol /datum/uplink_item/item/ammo/smg name = "Standard Box Magazine" - desc = "A magazine for standard SMGs. Contains 20 rounds." + desc = "A 10mm magazine for standard SMGs like the C-20r. Contains 20 rounds." item_cost = 8 path = /obj/item/ammo_magazine/smg antag_roles = list(MODE_MERCENARY) /datum/uplink_item/item/ammo/pistol name = "Standard Doublestack Magazine" - desc = "A magazine for standard military pistols. Contains 15 rounds." + desc = "A 10mm magazine for large, heavy military pistols. Contains 15 rounds." item_cost = 9 path = /obj/item/ammo_magazine/pistol/double +/datum/uplink_item/item/ammo/pistol_single + name = "Standard Singlestack Magazine" + desc = "A 10mm magazine for small, light military pistols. Contains 8 rounds." + item_cost = 6 + path = /obj/item/ammo_magazine/pistol + /datum/uplink_item/item/ammo/magnum name = "Magnum Magazine" - desc = "A magazine for magnum pistols. Contains 7 rounds." + desc = "A 15mm magazine for magnum pistols. Contains 7 rounds." item_cost = 8 path = /obj/item/ammo_magazine/magnum /datum/uplink_item/item/ammo/speedloader_magnum name = "Magnum Speedloader" - desc = "A speedloader for magnum revolvers. Contains 6 rounds." + desc = "A 15mm speedloader for magnum revolvers. Contains 6 rounds." item_cost = 8 path = /obj/item/ammo_magazine/speedloader/magnum /datum/uplink_item/item/ammo/flechette name = "Flechette Rifle Magazine" - desc = "A rifle magazine loaded with flechette rounds. Contains 9 rounds." + desc = "A rifle magazine loaded with flechette rounds. Contains 9 rounds." item_cost = 8 path = /obj/item/magnetic_ammo antag_roles = list(MODE_MERCENARY) /datum/uplink_item/item/ammo/pistol_emp name = "Standard EMP Ammo Box" - desc = "A box of EMP ammo for standard pistols. Contains 15 rounds." + desc = "A box of 10mm EMP ammo for standard pistols. Contains 15 rounds." item_cost = 8 path = /obj/item/ammo_magazine/box/emp/pistol /datum/uplink_item/item/ammo/holdout_emp name = "Small EMP Ammo Box" - desc = "A box of EMP ammo for small pistols and revolvers. Contains 8 rounds." + desc = "A box of 7mm EMP ammo for holdout pistols and revolvers. Contains 8 rounds." item_cost = 6 path = /obj/item/ammo_magazine/box/emp/smallpistol /datum/uplink_item/item/ammo/stripperclip name = "Stripper Clip" - desc = "A stripper clip used to load bolt action rifles. Contains just 5 rounds." + desc = "A 5mmR stripper clip used to load bolt action rifles. Contains just 5 rounds." item_cost = 2 - path = /obj/item/ammo_magazine/speedloader/clip \ No newline at end of file + path = /obj/item/ammo_magazine/speedloader/clip + +/datum/uplink_item/item/ammo/shotgun_drum_buckshot + name = "Shotgun Drum Magazine" + desc = "A drum magazine that can hold fifteen 12g shotgun shells. Loaded with buckshot." + item_cost = 12 + path = /obj/item/ammo_magazine/shotgunmag/shot + +/datum/uplink_item/item/ammo/shotgun_drum_slugs + name = "Shotgun Slug Drum Magazine" + desc = "A drum magazine that can hold fifteen 12g shotgun shells. Loaded with slugs." + item_cost = 12 + path = /obj/item/ammo_magazine/shotgunmag + +/datum/uplink_item/item/ammo/shotgun_drum_flechette + name = "Shotgun Flechette Drum Magazine" + desc = "A drum magazine that can hold fifteen 12g shotgun shells. Loaded with flechettes." + item_cost = 12 + path = /obj/item/ammo_magazine/shotgunmag/flechette diff --git a/code/datums/uplink/badassery.dm b/code/datums/uplink/badassery.dm index 53555c823a7bb..4f9dc35ff7a12 100644 --- a/code/datums/uplink/badassery.dm +++ b/code/datums/uplink/badassery.dm @@ -57,26 +57,6 @@ /datum/uplink_item/item/badassery/random_one/can_buy(obj/item/device/uplink/U) return U.uses -/datum/uplink_item/item/badassery/random_many - name = "Random Items" - desc = "Buys you as many random items as you can afford. Convenient packaging NOT included!" - -/datum/uplink_item/item/badassery/random_many/cost(telecrystals, obj/item/device/uplink/U) - return max(1, telecrystals) - -/datum/uplink_item/item/badassery/random_many/get_goods(obj/item/device/uplink/U, loc) - var/list/bought_items = list() - for(var/datum/uplink_item/UI in get_random_uplink_items(U, U.uses, loc)) - UI.purchase_log(U) - var/obj/item/I = UI.get_goods(U, loc) - if(istype(I)) - bought_items += I - - return bought_items - -/datum/uplink_item/item/badassery/random_many/purchase_log(obj/item/device/uplink/U) - log_and_message_admins("used \the [U.loc] to buy \a [src]") - /**************** * Surplus Crate * ****************/ diff --git a/code/datums/uplink/devices and tools.dm b/code/datums/uplink/devices and tools.dm index 9bb8246eca39d..3d14a4d0c4aae 100644 --- a/code/datums/uplink/devices and tools.dm +++ b/code/datums/uplink/devices and tools.dm @@ -4,12 +4,21 @@ /datum/uplink_item/item/tools category = /datum/uplink_category/tools + /datum/uplink_item/item/tools/personal_shield name = "Personal Shield" desc = "A very expensive device that uses energy to block bullets and lasers from tearing you a new hole." - item_cost = 60 + item_cost = 40 path = /obj/item/device/personal_shield + +/datum/uplink_item/item/tools/eshield + name = "Energy Shield" + desc = "An extendable hardlight shield projector." + item_cost = 24 + path = /obj/item/shield/energy + + /datum/uplink_item/item/tools/toolbox name = "Fully Loaded Toolbox" desc = "A hefty toolbox filled with all the equipment you need to get past any construction or electrical issues. \ @@ -17,12 +26,14 @@ item_cost = 8 path = /obj/item/storage/toolbox/syndicate + /datum/uplink_item/item/tools/ductape name = "Duct Tape" desc = "A roll of duct tape." item_cost = 2 path = /obj/item/tape_roll + /datum/uplink_item/item/tools/money name = "Operations Funding" item_cost = 8 @@ -31,18 +42,21 @@ . = ..() desc = "A briefcase with 10,000 untraceable [GLOB.using_map.local_currency_name]. Makes a great bribe if they're willing to take you up on your offer." + /datum/uplink_item/item/tools/clerical name = "Morphic Clerical Kit" desc = "Comes with everything you need to fake paperwork, assuming you know how to forge the required documents." item_cost = 16 path = /obj/item/storage/backpack/satchel/syndie_kit/clerical + /datum/uplink_item/item/tools/plastique name = "C-4" desc = "Set this on a wall to put a hole exactly where you need it." item_cost = 16 path = /obj/item/plastique + /datum/uplink_item/item/tools/heavy_armor name = "Heavy Armor Vest and Helmet" desc = "This satchel holds a combat helmet and fully equipped plate carrier. \ @@ -50,18 +64,21 @@ item_cost = 16 path = /obj/item/storage/backpack/satchel/syndie_kit/armor + /datum/uplink_item/item/tools/encryptionkey_radio name = "Encrypted Radio Channel Key" desc = "This headset encryption key will allow you to speak on a hidden, encrypted radio channel. Use a screwdriver on your headset to exchange keys." item_cost = 1 path = /obj/item/device/encryptionkey/syndicate + /datum/uplink_item/item/tools/shield_diffuser name = "Handheld Shield Diffuser" desc = "A small device used to disrupt energy barriers, and allow passage through them." item_cost = 16 path = /obj/item/shield_diffuser + /datum/uplink_item/item/tools/suit_sensor_mobile name = "Suit Sensor Jamming Device" desc = "This tiny device can temporarily change sensor levels, report random readings, or false readings on any \ @@ -70,6 +87,7 @@ item_cost = 20 path = /obj/item/device/suit_sensor_jammer + /datum/uplink_item/item/tools/encryptionkey_binary name = "Binary Translator Key" desc = "This headset encryption key will allow you to both listen and speak on the binary channel that \ @@ -78,6 +96,7 @@ item_cost = 20 path = /obj/item/device/encryptionkey/binary + /datum/uplink_item/item/tools/emag name = "Cryptographic Sequencer" desc = "An electromagnetic card capable of scrambling electronics to either subvert them into serving you, \ @@ -87,6 +106,7 @@ item_cost = 24 path = /obj/item/card/emag + /datum/uplink_item/item/tools/hacking_tool name = "Door Hacking Tool" item_cost = 24 @@ -95,6 +115,14 @@ While in hacking mode, this device will grant full access to any airlock in 20 to 40 seconds. \ This device will be able to continuously reaccess the last 6 to 8 airlocks it was used on." +/datum/uplink_item/item/tools/radio_jammer + name = "Portable Radio Jammer" + item_cost = 24 + path = /obj/item/device/radio_jammer + desc = "A pocket sized portable radio jammer that can intercept outgoing radio signals in a given distance. \ + However, radios attempting to send outgoing transmissions will emit a faint buzzing noise. \ + The jammer can be signaled remotely using assembly signalers." + /datum/uplink_item/item/tools/space_suit name = "Voidsuit and Tactical Mask" desc = "A satchel containing a non-regulation voidsuit, voidsuit helmet, tactical mask, and oxygen tank. \ @@ -102,25 +130,35 @@ item_cost = 28 path = /obj/item/storage/backpack/satchel/syndie_kit/space + /datum/uplink_item/item/tools/divinghelmet name = "Diving Helmet" desc = "An antique diver's helmet that was designed to withstand immense pressures. Works as a space helmet. Only fits humans." item_cost = 12 path = /obj/item/clothing/head/helmet/divinghelmet + /datum/uplink_item/item/tools/thermal - name = "Thermal Imaging Glasses" + name = "Thermal Imaging Glasses (Goggles)" desc = "A pair of meson goggles that have been modified to instead show synthetics or living creatures, through thermal imaging." item_cost = 24 path = /obj/item/clothing/glasses/thermal/syndi antag_roles = list(MODE_TRAITOR) +/datum/uplink_item/item/tools/thermal_avi + name = "Thermal Imaging Glasses (Aviators)" + desc = "A pair of aviator sunglasses that have been modified to instead show synthetics or living creatures, through thermal imaging." + item_cost = 24 + path = /obj/item/clothing/glasses/thermal/syndi/aviators + antag_roles = list(MODE_TRAITOR) + /datum/uplink_item/item/tools/flashdark name = "Flashdark" desc = "A device similar to a flash light that absorbs the surrounding light, casting a shadowy, black mass." item_cost = 32 path = /obj/item/device/flashlight/flashdark + /datum/uplink_item/item/tools/powersink name = "Powersink (DANGER!)" desc = "A device, that when bolted down to an exposed wire, spikes the surrounding electrical systems, \ @@ -129,6 +167,7 @@ item_cost = 40 path = /obj/item/device/powersink + /datum/uplink_item/item/tools/ai_module name = "Hacked AI Upload Module" desc = "A module that can be used anonymously add a singular, top level law to an active AI. \ @@ -136,6 +175,7 @@ item_cost = 52 path = /obj/item/aiModule/syndicate + /datum/uplink_item/item/tools/supply_beacon name = "Hacked Supply Beacon (DANGER!)" desc = "Wrench this large beacon onto an exposed power cable, in order to activate it. This will call in a \ @@ -144,6 +184,7 @@ item_cost = 52 path = /obj/item/supply_beacon + /datum/uplink_item/item/tools/camera_mask name = "Camera MIU" desc = "Wearing this mask allows you to remotely view any cameras you currently have access to. Take the mask off to stop viewing." @@ -151,19 +192,22 @@ antag_costs = list(MODE_MERCENARY = 30) path = /obj/item/clothing/mask/ai + /datum/uplink_item/item/tools/interceptor name = "Radio Interceptor" item_cost = 30 path = /obj/item/device/radio/intercept desc = "A receiver-like device that can intercept secure radio channels. This item is too big to fit into your pockets." + /datum/uplink_item/item/tools/ttv name = "Binary Gas Bomb" item_cost = 30 - path = /obj/effect/spawner/newbomb/traitor + path = /obj/spawner/newbomb/traitor desc = "A remote-activated phoron-oxygen bomb assembly with an included signaler. \ A flashing disclaimer begins with the warning 'SOME DISASSEMBLY/REASSEMBLY REQUIRED.'" + /datum/uplink_item/item/tools/polychromic_dye_bottle name = "Extra-Strength Polychromic Dye" item_cost = 10 @@ -172,8 +216,17 @@ Very useful for disguising poisons to the untrained eye; even large amounts of reagents can be fully recolored with only a few drops of dye. \ Like the mundane variety of polychromic dye, you can use the bottle in your hand to change the dye's color to suit your needs." + /datum/uplink_item/item/tools/handcuffs name = "Handcuffs" item_cost = 5 path = /obj/item/storage/box/handcuffs desc = "A box of 7 handcuffs." + +/datum/uplink_item/item/tools/vendorcoins + name = "Syndicate Coins" + item_cost = 50 + path = /obj/item/storage/fancy/smokable/case/syndiecoins + desc = "A packet of five coins that unlock a secret compartment in any vending machine. \ + Each coin unlocks on average 15 TCs worth of items. Depending on your luck, you may half or more than triple your TCs worth! \ + These compartments cannot be accessed by hacking." diff --git a/code/datums/uplink/hardsuit_modules.dm b/code/datums/uplink/hardsuit_modules.dm index 50ce2ed52c0b4..3338119a0eb74 100644 --- a/code/datums/uplink/hardsuit_modules.dm +++ b/code/datums/uplink/hardsuit_modules.dm @@ -26,7 +26,7 @@ name = "\improper Mounted Energy Gun" desc = "A module that drains your power reserves in order to fire an arm mounted energy gun." item_cost = 48 - path = /obj/item/rig_module/mounted/egun + path = /obj/item/rig_module/mounted/energy/egun /datum/uplink_item/item/hardsuit_modules/power_sink name = "\improper Power Sink" @@ -38,5 +38,5 @@ name = "\improper Mounted Laser Cannon" desc = "A module capable of draining your suit's power reserves in order to fire a shoulder mounted laser cannon." item_cost = 64 - path = /obj/item/rig_module/mounted/lcannon + path = /obj/item/rig_module/mounted/energy/lcannon antag_roles = list(MODE_MERCENARY) diff --git a/code/datums/uplink/services.dm b/code/datums/uplink/services.dm index 0577216251ee9..43ef300fe885e 100644 --- a/code/datums/uplink/services.dm +++ b/code/datums/uplink/services.dm @@ -52,7 +52,7 @@ name = "tiny device" desc = "Press button to activate. Can be done once and only once." w_class = ITEM_SIZE_TINY - icon = 'icons/obj/flash_synthetic.dmi' + icon = 'icons/obj/tools/flash_synthetic.dmi' icon_state = "sflash" var/state = AWAITING_ACTIVATION var/service_label = "Unnamed Service" @@ -68,17 +68,17 @@ if(distance <= 1) switch(state) if(AWAITING_ACTIVATION) - to_chat(user, "It is labeled '[service_label]' and appears to be awaiting activation.") + . += SPAN_NOTICE("It is labeled '[service_label]' and appears to be awaiting activation.") if(CURRENTLY_ACTIVE) - to_chat(user, "It is labeled '[service_label]' and appears to be active.") + . += SPAN_NOTICE("It is labeled '[service_label]' and appears to be active.") if(HAS_BEEN_ACTIVATED) - to_chat(user, "It is labeled '[service_label]' and appears to be permanently disabled.") + . += SPAN_NOTICE("It is labeled '[service_label]' and appears to be permanently disabled.") /obj/item/device/uplink_service/attack_self(mob/user) if(state != AWAITING_ACTIVATION) to_chat(user, SPAN_WARNING("\The [src] won't activate again.")) return - var/obj/effect/overmap/visitable/O = map_sectors["[get_z(src)]"] + var/obj/overmap/visitable/O = map_sectors["[get_z(src)]"] var/choice = alert(user, "This will only affect your current location[istype(O) ? " ([O])" : ""]. Proceed?","Confirmation", "Yes", "No") if(choice != "Yes") return @@ -90,7 +90,7 @@ log_and_message_admins("has activated the service '[service_label]'", user) if(service_duration) - addtimer(new Callback(src,/obj/item/device/uplink_service/proc/deactivate), service_duration) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/device/uplink_service, deactivate)), service_duration) else deactivate() @@ -177,8 +177,8 @@ /obj/item/device/uplink_service/fake_command_report/examine(mob/user, distance) . = ..() if(distance <= 1) - to_chat(user, "The message title is set to '[title]'. The message will be [public_announce ? "broadcast to the public" : "sent only to command consoles"].") - to_chat(user, "The message contents are set to:
[SPAN_NOTICE(message)]") + . += SPAN_NOTICE("The message title is set to '[title]'. The message will be [public_announce ? "broadcast to the public" : "sent only to command consoles"].") + . += SPAN_NOTICE("The message contents are set to:
[SPAN_NOTICE(message)]") /obj/item/device/uplink_service/fake_command_report/attack_self(mob/user) @@ -319,7 +319,7 @@ var/level = job.min_skill[S.type] if(prob(10)) level = min(rand(1,3), job.max_skill[S.type]) - if(level > SKILL_NONE) + if(level > SKILL_UNSKILLED) skills += "[S.name], [S.levels[level]]" new_record.set_skillset(jointext(skills,"\n")) diff --git a/code/datums/uplink/stealth_and_camouflage_items.dm b/code/datums/uplink/stealth_and_camouflage_items.dm index e4abd074b2d38..c71fe4636d896 100644 --- a/code/datums/uplink/stealth_and_camouflage_items.dm +++ b/code/datums/uplink/stealth_and_camouflage_items.dm @@ -45,6 +45,13 @@ item_cost = 12 path = /obj/item/card/id/syndicate +/datum/uplink_item/item/stealth_items/cosmetic_surgery_kit + name = "Cosmetic Surgery Auto-Kit" + desc = "A small self-contained auto-surgery device that has the ability to conduct laryngeal, facial and even melanin re-structuring surgery, \ + in a (mostly) blood-less manner." + item_cost = 12 + path = /obj/item/device/cosmetic_surgery_kit + /datum/uplink_item/item/stealth_items/chameleon_kit name = "Chameleon Kit" desc = "Comes with a full set of appearance changing clothing you need to impersonate most people. \ @@ -52,6 +59,12 @@ item_cost = 20 path = /obj/item/storage/backpack/chameleon/sydie_kit +/datum/uplink_item/item/stealth_items/corpse_cube + name = "Fake Corpse Cube" + desc = "For when reports of death were greatly exaggerated. Bundled with a DNA sampler for extracting a target's DNA to inject into the cube." + item_cost = 20 + path = /obj/item/storage/box/syndie_kit/corpse_cube + /datum/uplink_item/item/stealth_items/voice name = "Modified Gas Mask" desc = "A fully functioning gas mask that is able to conceal your face and has a built in voice modulator, \ diff --git a/code/datums/uplink/structures_and_vehicles.dm b/code/datums/uplink/structures_and_vehicles.dm new file mode 100644 index 0000000000000..d9f75274c4ab2 --- /dev/null +++ b/code/datums/uplink/structures_and_vehicles.dm @@ -0,0 +1,34 @@ +/datum/uplink_item/item/structures_and_vehicles + category = /datum/uplink_category/structures_and_vehicles + + +/datum/uplink_item/item/structures_and_vehicles/ofd_charge_fire + name = "FR1-ENFER charge" + desc = "An obstruction field disperser charge that causes a localised fire." + antag_roles = list(MODE_MERCENARY) + item_cost = 80 + path = /obj/structure/ship_munition/disperser_charge/fire + + +/datum/uplink_item/item/structures_and_vehicles/ofd_charge_emp + name = "EM2-QUASAR charge" + desc = "An obstruction field disperser charge that emits an electromagnetic pulse." + antag_roles = list(MODE_MERCENARY) + item_cost = 80 + path = /obj/structure/ship_munition/disperser_charge/emp + + +/datum/uplink_item/item/structures_and_vehicles/ofd_charge_explosive + name = "XP4-INDARRA charge" + desc = "An obstruction field disperser charge that explodes." + antag_roles = list(MODE_MERCENARY) + item_cost = 80 + path = /obj/structure/ship_munition/disperser_charge/explosive + + +/datum/uplink_item/item/structures_and_vehicles/ofd_charge_mining + name = "MN3-BERGBAU charge" + desc = "An obstruction field disperser charge that extracts ore." + antag_roles = list(MODE_MERCENARY) + item_cost = 80 + path = /obj/structure/ship_munition/disperser_charge/mining diff --git a/code/datums/uplink/uplink_categories.dm b/code/datums/uplink/uplink_categories.dm index 3e907ce86c5bd..4ac175ccafb98 100644 --- a/code/datums/uplink/uplink_categories.dm +++ b/code/datums/uplink/uplink_categories.dm @@ -48,5 +48,8 @@ /datum/uplink_category/badassery name = "Badassery" +/datum/uplink_category/structures_and_vehicles + name = "Structures & Vehicles" + /datum/uplink_category/telecrystals name = "Telecrystal Materialization" diff --git a/code/datums/uplink/uplink_items.dm b/code/datums/uplink/uplink_items.dm index 6d3119d86b924..8c103255a9e4b 100644 --- a/code/datums/uplink/uplink_items.dm +++ b/code/datums/uplink/uplink_items.dm @@ -150,6 +150,7 @@ var/global/datum/uplink/uplink = new() * Support procs * ****************/ /proc/get_random_uplink_items(obj/item/device/uplink/U, remaining_TC, loc) + RETURN_TYPE(/list) var/list/bought_items = list() while(remaining_TC) var/datum/uplink_random_selection/uplink_selection = get_uplink_random_selection_by_type(/datum/uplink_random_selection/default) diff --git a/code/datums/vending/stored_item.dm b/code/datums/vending/stored_item.dm index debfa5318a981..475e873a93297 100644 --- a/code/datums/vending/stored_item.dm +++ b/code/datums/vending/stored_item.dm @@ -1,22 +1,28 @@ /datum/stored_items - var/item_name = "name" //Name of the item(s) displayed - var/item_path = null // The original amount held - var/amount = 0 - var/list/instances //What items are actually stored + // Name of the item(s) displayed + var/item_name = "name" + /// Path of the item + var/atom/item_path = null var/atom/storing_object + /// The original amount held + var/amount = 0 + /// What items are actually stored + var/list/instances -/datum/stored_items/New(atom/storing_object, path, name = null, amount = 0) +/datum/stored_items/New(atom/storing_object, atom/path, name = null, amount = 0) if(!istype(storing_object)) CRASH("Unexpected storing object.") + src.storing_object = storing_object src.item_path = path src.amount = amount + src.item_name = name if(!name) - var/atom/tmp = path - src.item_name = initial(tmp.name) + src.item_name = initial(path.name) else src.item_name = name + ..() /datum/stored_items/Destroy() @@ -32,13 +38,13 @@ /datum/stored_items/proc/add_product(atom/movable/product) if(product.type != item_path) - return 0 + return FALSE if(product in instances) - return 0 + return FALSE product.forceMove(storing_object) LAZYADD(instances, product) amount++ - return 1 + return TRUE /datum/stored_items/proc/get_product(product_location) if(!get_amount() || !product_location) diff --git a/code/datums/vote/add_antag.dm b/code/datums/vote/add_antag.dm index da0d00b5e1ba7..57da144302cca 100644 --- a/code/datums/vote/add_antag.dm +++ b/code/datums/vote/add_antag.dm @@ -43,7 +43,7 @@ additional_antag_types |= antag_type return - invoke_async(src, .proc/spawn_antags) //There is a sleep in this proc. + invoke_async(src, PROC_REF(spawn_antags)) //There is a sleep in this proc. /datum/vote/add_antagonist/proc/spawn_antags() var/list/antag_choices = list() @@ -52,8 +52,8 @@ if(SSticker.attempt_late_antag_spawn(antag_choices)) // This takes a while. antag_add_finished = 1 if(automatic) - // the buffer will already have half an hour added to it, so we'll give it one more - transfer_controller.timerbuffer += config.vote_autotransfer_interval + if (SSroundend.vote_check) + SSroundend.vote_check += config.vote_autotransfer_interval else to_world("No antags were added.") if(automatic) diff --git a/code/datums/vote/transfer.dm b/code/datums/vote/transfer.dm index 7acc75d71a914..79f8041713078 100644 --- a/code/datums/vote/transfer.dm +++ b/code/datums/vote/transfer.dm @@ -1,5 +1,5 @@ -#define CHOICE_TRANSFER "Initiate crew transfer" -#define CHOICE_EXTEND "Extend the round ([config.vote_autotransfer_interval / 600] minutes)" +#define CHOICE_TRANSFER "Initiate bluespace jump" +#define CHOICE_EXTEND "Extend the round ([config.vote_autotransfer_interval] minutes)" #define CHOICE_ADD_ANTAG "Add antagonist" /datum/vote/transfer @@ -17,10 +17,10 @@ return //Mods bypass further checks. var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) if (!automatic && security_state.current_security_level_is_same_or_higher_than(security_state.high_security_level)) - to_chat(creator, "The current alert status is too high to call for a crew transfer!") + to_chat(creator, "The current alert status is too high to call for a bluespace jump!") return FALSE if(GAME_STATE <= RUNLEVEL_SETUP) - to_chat(creator, "The crew transfer button has been disabled!") + to_chat(creator, "The bluespace jump button has been disabled!") return FALSE /datum/vote/transfer/setup_vote(mob/creator, automatic) @@ -45,7 +45,7 @@ else factor = 1.4 choices[CHOICE_TRANSFER] = round(choices[CHOICE_TRANSFER] * factor) - to_world(SPAN_COLOR("purple", "Crew Transfer Factor: [factor]")) + to_world(SPAN_COLOR("purple", "Bluespace Jump Factor: [factor]")) /datum/vote/transfer/report_result() if(..()) diff --git a/code/datums/vote/vote.dm b/code/datums/vote/vote.dm index 389cd3d8d90df..e16b16a4b9044 100644 --- a/code/datums/vote/vote.dm +++ b/code/datums/vote/vote.dm @@ -71,7 +71,7 @@ var/list/remaining_votes = votes.Copy() while(length(result) < result_length) remaining_choices = shuffle(remaining_choices) - sortTim(remaining_choices, /proc/cmp_numeric_dsc, TRUE) + sortTim(remaining_choices, GLOBAL_PROC_REF(cmp_numeric_dsc), TRUE) if(!length(remaining_votes) || !length(remaining_choices)) // we ran out of options or votes, you get what we have result += remaining_choices.Copy(1, clamp(result_length - length(result) + 1, 0, length(remaining_choices) + 1)) break @@ -104,8 +104,13 @@ return 1 var/text = get_result_announcement() + var/admin_text = get_vote_statistics() + log_vote(admin_text) log_vote(text) - to_world(SPAN_COLOR("purple", "[text]")) + to_world(SPAN_COLOR("purple", "[text]\n")) + + for (var/client/C in GLOB.admins) + to_chat(C, SPAN_COLOR("purple", "[admin_text]")) if(!(result[result[1]] > 0)) return 1 @@ -125,6 +130,16 @@ return JOINTEXT(text) +/datum/vote/proc/get_vote_statistics() + var/list/text = list() + text += "Total Votes: [length(votes)]/[length(GLOB.clients)]\n" + text += "\n" + text += "Votes Per Option:" + for(var/R in result) + if (result[R] > 0) + text += "\n[R]: [result[R]]" + return JOINTEXT(text) + /datum/vote/proc/mob_can_vote(mob/voter) if (check_rights(R_MOD, FALSE, voter)) diff --git a/code/datums/weakref.dm b/code/datums/weakref.dm index ace214575c565..42e2006d736a8 100644 --- a/code/datums/weakref.dm +++ b/code/datums/weakref.dm @@ -1,8 +1,10 @@ /datum var/weakref/weakref -//obtain a weak reference to a datum +/// Creates a weakref to the given input. +/// See /weakref's documentation for more information. /proc/weakref(datum/D) + RETURN_TYPE(/weakref) if(!istype(D)) return if(QDELETED(D)) @@ -13,6 +15,46 @@ D.weakref = new/weakref(D) return D.weakref +/** + * A weakref holds a non-owning reference to a datum. + * The datum can be referenced again using `resolve()`. + * + * To figure out why this is important, you must understand how deletion in + * BYOND works. + * + * Imagine a datum as a TV in a living room. When one person enters to watch + * TV, they turn it on. Others can come into the room and watch the TV. + * When the last person leaves the room, they turn off the TV because it's + * no longer being used. + * + * A datum being deleted tells everyone who's watching the TV to stop. + * If everyone leaves properly (AKA cleaning up their references), then the + * last person will turn off the TV, and everything is well. + * However, if someone is resistant (holds a hard reference after deletion), + * then someone has to walk in, drag them away, and turn off the TV forecefully. + * This process is very slow, and it's known as hard deletion. + * + * This is where weak references come in. Weak references don't count as someone + * watching the TV. Thus, when what it's referencing is destroyed, it will + * hopefully clean up properly, and limit hard deletions. + * + * A common use case for weak references is holding onto what created itself. + * For example, if a machine wanted to know what its last user was, it might + * create a `var/mob/living/last_user`. However, this is a strong reference to + * the mob, and thus will force a hard deletion when that mob is deleted. + * It is often better in this case to instead create a weakref to the user, + * meaning this type definition becomes `var/datum/weakref/last_user`. + * + * A good rule of thumb is that you should hold strong references to things + * that you *own*. For example, a dog holding a chew toy would be the owner + * of that chew toy, and thus a `var/obj/item/chew_toy` reference is fine + * (as long as it is cleaned up properly). + * However, a chew toy does not own its dog, so a `var/mob/living/dog/owner` + * might be inferior to a weakref. + * This is also a good rule of thumb to avoid circular references, such as the + * chew toy example. A circular reference that doesn't clean itself up properly + * will always hard delete. + */ /weakref var/ref @@ -31,6 +73,12 @@ SHOULD_CALL_PARENT(FALSE) return QDEL_HINT_IWILLGC +/** + * Retrieves the datum that this weakref is referencing. + * + * This will return `null` if the datum was deleted. This MUST be respected. + */ + /weakref/proc/resolve() var/datum/D = locate(ref) if(D && D.weakref == src) diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index dd51b62ba24ed..1c4f9a76b7847 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -10,7 +10,7 @@ wire_count = 12 window_y = 570 descriptions = list( - new /datum/wire_description(AIRLOCK_WIRE_IDSCAN, "This wire is connected to the ID scanning panel.", SKILL_EXPERT), + new /datum/wire_description(AIRLOCK_WIRE_IDSCAN, "This wire is connected to the ID scanning panel.", SKILL_EXPERIENCED), new /datum/wire_description(AIRLOCK_WIRE_MAIN_POWER1, "This wire seems to be carrying a heavy current."), new /datum/wire_description(AIRLOCK_WIRE_MAIN_POWER2, "This wire seems to be carrying a heavy current."), new /datum/wire_description(AIRLOCK_WIRE_DOOR_BOLTS, "This wire runs down to the very base of the airlock."), @@ -21,7 +21,7 @@ new /datum/wire_description(AIRLOCK_WIRE_ELECTRIFY, "This wire seems to be carrying a heavy current."), new /datum/wire_description(AIRLOCK_WIRE_SAFETY, "This wire connects to a safety override."), new /datum/wire_description(AIRLOCK_WIRE_SPEED, "This wire appears to connect to the airlock's proximity detector modules."), - new /datum/wire_description(AIRLOCK_WIRE_LIGHT, "This wire powers the airlock's built-in lighting.", SKILL_EXPERT) + new /datum/wire_description(AIRLOCK_WIRE_LIGHT, "This wire powers the airlock's built-in lighting.", SKILL_EXPERIENCED) ) var/global/const/AIRLOCK_WIRE_IDSCAN = 1 diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index 7a6f4a35369ed..9489ea046b566 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -2,7 +2,7 @@ holder_type = /obj/machinery/alarm wire_count = 5 descriptions = list( - new /datum/wire_description(AALARM_WIRE_IDSCAN, "This wire is connected to the ID scanning panel.", SKILL_EXPERT), + new /datum/wire_description(AALARM_WIRE_IDSCAN, "This wire is connected to the ID scanning panel.", SKILL_EXPERIENCED), new /datum/wire_description(AALARM_WIRE_POWER, "This wire seems to be carrying a heavy current."), new /datum/wire_description(AALARM_WIRE_SYPHON, "This wire runs to atmospherics logic circuits of some sort."), new /datum/wire_description(AALARM_WIRE_AI_CONTROL, "This wire connects to automated control systems."), diff --git a/code/datums/wires/apc.dm b/code/datums/wires/apc.dm index 87de860cc90ae..7d6eadc2d7d6e 100644 --- a/code/datums/wires/apc.dm +++ b/code/datums/wires/apc.dm @@ -7,7 +7,7 @@ holder_type = /obj/machinery/power/apc wire_count = 4 descriptions = list( - new /datum/wire_description(APC_WIRE_IDSCAN, "This wire is connected to the ID scanning panel.", SKILL_EXPERT), + new /datum/wire_description(APC_WIRE_IDSCAN, "This wire is connected to the ID scanning panel.", SKILL_EXPERIENCED), new /datum/wire_description(APC_WIRE_MAIN_POWER1, "This wire seems to be carrying a heavy current."), new /datum/wire_description(APC_WIRE_MAIN_POWER2, "This wire seems to be carrying a heavy current."), new /datum/wire_description(APC_WIRE_AI_CONTROL, "This wire connects to automated control systems.") diff --git a/code/datums/wires/camera.dm b/code/datums/wires/camera.dm index 2a8bd30be1cce..b08871905520b 100644 --- a/code/datums/wires/camera.dm +++ b/code/datums/wires/camera.dm @@ -7,7 +7,7 @@ descriptions = list( new /datum/wire_description(CAMERA_WIRE_FOCUS, "This wire runs to the camera's lens adjustment motors."), new /datum/wire_description(CAMERA_WIRE_POWER, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(CAMERA_WIRE_LIGHT, "This wire seems connected to the built-in light.", SKILL_EXPERT), + new /datum/wire_description(CAMERA_WIRE_LIGHT, "This wire seems connected to the built-in light.", SKILL_EXPERIENCED), new /datum/wire_description(CAMERA_WIRE_ALARM, "This wire is connected to a remote signaling device of some sort.") ) diff --git a/code/datums/wires/fabricator.dm b/code/datums/wires/fabricator.dm index 835349bbdcb8d..4be54440b7665 100644 --- a/code/datums/wires/fabricator.dm +++ b/code/datums/wires/fabricator.dm @@ -9,7 +9,7 @@ descriptions = list( new /datum/wire_description(AUTOLATHE_HACK_WIRE, "This wire appears to lead to an auxiliary data storage unit."), new /datum/wire_description(AUTOLATHE_SHOCK_WIRE, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(AUTOLATHE_DISABLE_WIRE, "This wire is connected to the power switch.", SKILL_EXPERT) + new /datum/wire_description(AUTOLATHE_DISABLE_WIRE, "This wire is connected to the power switch.", SKILL_EXPERIENCED) ) /datum/wires/fabricator/GetInteractWindow(mob/user) @@ -33,6 +33,8 @@ A.fab_status_flags &= ~FAB_HACKED else A.fab_status_flags |= FAB_HACKED + + A.update_tgui_static_data_for_all_viewers() if(AUTOLATHE_SHOCK_WIRE) if(mended) A.fab_status_flags &= ~FAB_SHOCKED @@ -43,6 +45,9 @@ A.fab_status_flags &= ~FAB_DISABLED else A.fab_status_flags |= FAB_DISABLED + SStgui.close_uis(A) + + /datum/wires/fabricator/UpdatePulsed(index) if(IsIndexCut(index)) @@ -54,9 +59,13 @@ A.fab_status_flags &= ~FAB_HACKED else A.fab_status_flags |= FAB_HACKED + + A.update_tgui_static_data_for_all_viewers() + spawn(50) if(A && !IsIndexCut(index)) A.fab_status_flags &= ~FAB_HACKED + A.update_tgui_static_data_for_all_viewers() Interact(usr) if(AUTOLATHE_SHOCK_WIRE) if(A.fab_status_flags & FAB_SHOCKED) @@ -72,6 +81,8 @@ A.fab_status_flags &= ~FAB_DISABLED else A.fab_status_flags |= FAB_DISABLED + SStgui.close_uis(A) + spawn(50) if(A && !IsIndexCut(index)) A.fab_status_flags &= ~FAB_DISABLED diff --git a/code/datums/wires/nuclearbomb.dm b/code/datums/wires/nuclearbomb.dm index fabfb5b73488a..a4a8126b44ad7 100644 --- a/code/datums/wires/nuclearbomb.dm +++ b/code/datums/wires/nuclearbomb.dm @@ -3,7 +3,7 @@ random = 1 wire_count = 7 descriptions = list( - new /datum/wire_description(NUCLEARBOMB_WIRE_LIGHT, "This wire seems to connect to the small light on the device.", SKILL_EXPERT), + new /datum/wire_description(NUCLEARBOMB_WIRE_LIGHT, "This wire seems to connect to the small light on the device.", SKILL_EXPERIENCED), new /datum/wire_description(NUCLEARBOMB_WIRE_TIMING, "This wire connects to the time display."), new /datum/wire_description(NUCLEARBOMB_WIRE_SAFETY, "This wire connects to a safety override.") ) diff --git a/code/datums/wires/particle_accelerator.dm b/code/datums/wires/particle_accelerator.dm index 1c807197e2408..7eaa0b5537e9a 100644 --- a/code/datums/wires/particle_accelerator.dm +++ b/code/datums/wires/particle_accelerator.dm @@ -2,7 +2,7 @@ wire_count = 5 holder_type = /obj/machinery/particle_accelerator/control_box descriptions = list( - new /datum/wire_description(PARTICLE_TOGGLE_WIRE, "This wire seems to connect to the main power toggle.", SKILL_EXPERT), + new /datum/wire_description(PARTICLE_TOGGLE_WIRE, "This wire seems to connect to the main power toggle.", SKILL_EXPERIENCED), new /datum/wire_description(PARTICLE_STRENGTH_WIRE, "This wire connects to the primary magnets."), new /datum/wire_description(PARTICLE_INTERFACE_WIRE, "This wire appears connected to the user panel."), new /datum/wire_description(PARTICLE_LIMIT_POWER_WIRE, "This wire connects to the primary magnets.") diff --git a/code/datums/wires/radio.dm b/code/datums/wires/radio.dm index 5803d8f855e8c..1c88c0b74401d 100644 --- a/code/datums/wires/radio.dm +++ b/code/datums/wires/radio.dm @@ -3,7 +3,7 @@ wire_count = 3 descriptions = list( new /datum/wire_description(WIRE_SIGNAL, "This wire connects several radio components."), - new /datum/wire_description(WIRE_RECEIVE, "This wire runs to the radio reciever.", SKILL_EXPERT), + new /datum/wire_description(WIRE_RECEIVE, "This wire runs to the radio reciever.", SKILL_EXPERIENCED), new /datum/wire_description(WIRE_TRANSMIT, "This wire runs to the radio transmitter.") ) diff --git a/code/datums/wires/robot.dm b/code/datums/wires/robot.dm index f819edcb261d9..7be41d035ac4e 100644 --- a/code/datums/wires/robot.dm +++ b/code/datums/wires/robot.dm @@ -4,7 +4,7 @@ wire_count = 4 descriptions = list( new /datum/wire_description(BORG_WIRE_LAWCHECK, "This wire runs to the unit's law module."), - new /datum/wire_description(BORG_WIRE_MAIN_POWER, "This wire seems to be carrying a heavy current.", SKILL_EXPERT), + new /datum/wire_description(BORG_WIRE_MAIN_POWER, "This wire seems to be carrying a heavy current.", SKILL_EXPERIENCED), new /datum/wire_description(BORG_WIRE_LOCKED_DOWN, "This wire connects to the unit's safety override."), new /datum/wire_description(BORG_WIRE_AI_CONTROL, "This wire connects to automated control systems.") ) diff --git a/code/datums/wires/shield_generator.dm b/code/datums/wires/shield_generator.dm index 34504ebdf90f9..a9fb6f57c88bf 100644 --- a/code/datums/wires/shield_generator.dm +++ b/code/datums/wires/shield_generator.dm @@ -2,7 +2,7 @@ holder_type = /obj/machinery/power/shield_generator wire_count = 5 descriptions = list( - new /datum/wire_description(SHIELDGEN_WIRE_POWER, "This wire seems to be carrying a heavy current.", SKILL_EXPERT), + new /datum/wire_description(SHIELDGEN_WIRE_POWER, "This wire seems to be carrying a heavy current.", SKILL_EXPERIENCED), new /datum/wire_description(SHIELDGEN_WIRE_HACK, "This wire seems designed to enable a manual override."), new /datum/wire_description(SHIELDGEN_WIRE_CONTROL, "This wire connects to the main control panel."), new /datum/wire_description(SHIELDGEN_WIRE_AICONTROL, "This wire connects to automated control systems.") diff --git a/code/datums/wires/smartfridge.dm b/code/datums/wires/smartfridge.dm index 1841dd454f032..595b45a24e889 100644 --- a/code/datums/wires/smartfridge.dm +++ b/code/datums/wires/smartfridge.dm @@ -4,7 +4,7 @@ descriptions = list( new /datum/wire_description(SMARTFRIDGE_WIRE_ELECTRIFY, "This wire seems to be carrying a heavy current."), new /datum/wire_description(SMARTFRIDGE_WIRE_THROW, "This wire leads to the item dispensor force controls."), - new /datum/wire_description(SMARTFRIDGE_WIRE_IDSCAN, "This wire is connected to the ID scanning panel.", SKILL_EXPERT) + new /datum/wire_description(SMARTFRIDGE_WIRE_IDSCAN, "This wire is connected to the ID scanning panel.", SKILL_EXPERIENCED) ) /datum/wires/smartfridge/secure diff --git a/code/datums/wires/smes.dm b/code/datums/wires/smes.dm index 39bc7cfc1a528..42cec3df9f96c 100644 --- a/code/datums/wires/smes.dm +++ b/code/datums/wires/smes.dm @@ -3,9 +3,9 @@ wire_count = 5 descriptions = list( new /datum/wire_description(SMES_WIRE_RCON, "This wire runs to a remote signaling mechanism."), - new /datum/wire_description(SMES_WIRE_INPUT, "This seems to be the primary input.", SKILL_EXPERT), - new /datum/wire_description(SMES_WIRE_OUTPUT, "This seems to be the primary output.", SKILL_EXPERT), - new /datum/wire_description(SMES_WIRE_GROUNDING, "This wire appeas to connect directly to the floor.", SKILL_EXPERT), + new /datum/wire_description(SMES_WIRE_INPUT, "This seems to be the primary input.", SKILL_EXPERIENCED), + new /datum/wire_description(SMES_WIRE_OUTPUT, "This seems to be the primary output.", SKILL_EXPERIENCED), + new /datum/wire_description(SMES_WIRE_GROUNDING, "This wire appeas to connect directly to the floor.", SKILL_EXPERIENCED), new /datum/wire_description(SMES_WIRE_FAILSAFES, "This wire appears to connect to a failsafe mechanism.") ) diff --git a/code/datums/wires/suit_storage_unit.dm b/code/datums/wires/suit_storage_unit.dm index d0c465cc53ddb..062fa461fdbf4 100644 --- a/code/datums/wires/suit_storage_unit.dm +++ b/code/datums/wires/suit_storage_unit.dm @@ -3,7 +3,7 @@ wire_count = 3 descriptions = list( new /datum/wire_description(SUIT_STORAGE_WIRE_ELECTRIFY, "This wire seems to be carrying a heavy current."), - new /datum/wire_description(SUIT_STORAGE_WIRE_SAFETY, "This wire seems connected to a safety override", SKILL_EXPERT), + new /datum/wire_description(SUIT_STORAGE_WIRE_SAFETY, "This wire seems connected to a safety override", SKILL_EXPERIENCED), new /datum/wire_description(SUIT_STORAGE_WIRE_LOCKED, "This wire is connected to the ID scanning panel.") ) diff --git a/code/datums/wires/taperecorder.dm b/code/datums/wires/taperecorder.dm index 1b4e7241f62c9..19523f93259e3 100644 --- a/code/datums/wires/taperecorder.dm +++ b/code/datums/wires/taperecorder.dm @@ -2,7 +2,7 @@ holder_type = /obj/item/device/taperecorder wire_count = 1 descriptions = list( - new /datum/wire_description(TAPE_WIRE_TOGGLE, "This wire runs to the play/stop toggle.", SKILL_ADEPT) + new /datum/wire_description(TAPE_WIRE_TOGGLE, "This wire runs to the play/stop toggle.", SKILL_TRAINED) ) var/global/const/TAPE_WIRE_TOGGLE = 1 diff --git a/code/datums/wires/transfer_valve.dm b/code/datums/wires/transfer_valve.dm new file mode 100644 index 0000000000000..3e65df87fb191 --- /dev/null +++ b/code/datums/wires/transfer_valve.dm @@ -0,0 +1,71 @@ +/datum/wires/transfer_valve + random = TRUE + holder_type = /obj/item/device/transfer_valve + wire_count = 5 + descriptions = list( + new /datum/wire_description(TTV_WIRE_TOGGLEVALVE, "This wire is connected to the valve latch controllers.", SKILL_EXPERIENCED), + new /datum/wire_description(TTV_WIRE_GASRELEASE, "This wire seems to be connected directly to the tank latch.", SKILL_TRAINED), + new /datum/wire_description(TTV_WIRE_DISARM, "This wire seems to be connected to the internal structural controller.", SKILL_TRAINED), + new /datum/wire_description(TTV_WIRE_DEVICECHANGE, "This wire seems to be connected to the attached mechanism.", SKILL_TRAINED), + new /datum/wire_description(TTV_WIRE_RNG, "This red wire seems to go over every little nook and cranny of the bomb.") + ) + +var/global/const/TTV_WIRE_TOGGLEVALVE = FLAG(0) +var/global/const/TTV_WIRE_GASRELEASE = FLAG(1) +var/global/const/TTV_WIRE_DISARM = FLAG(2) +var/global/const/TTV_WIRE_RNG = FLAG(3) +var/global/const/TTV_WIRE_DEVICECHANGE = FLAG(4) + +/datum/wires/transfer_valve/UpdatePulsed(index) + var/obj/item/device/transfer_valve/T = holder + switch(index) + if (TTV_WIRE_TOGGLEVALVE) + T.toggle_valve() + if (TTV_WIRE_GASRELEASE) + T.split_gases() + if (TTV_WIRE_RNG) + T.toggle_valve() + if (TTV_WIRE_DEVICECHANGE) + if (istype(T.attached_device, /obj/item/device/assembly/signaler)) + var/obj/item/device/assembly/signaler/sig = T.attached_device + sig.set_frequency(rand(RADIO_LOW_FREQ, RADIO_HIGH_FREQ)) + else if (istype(T.attached_device, /obj/item/device/assembly/prox_sensor)) + var/obj/item/device/assembly/prox_sensor/prox = T.attached_device + prox.scanning = !prox.scanning + else if (istype(T.attached_device, /obj/item/device/assembly/timer)) + var/obj/item/device/assembly/timer/tmr = T.attached_device + tmr.time = max(tmr.time + rand(-100, 100), 1) + +/datum/wires/transfer_valve/UpdateCut(index, mended) + var/obj/item/device/transfer_valve/T = holder + var/timer = rand(3,5) + switch(index) + if (TTV_WIRE_TOGGLEVALVE) + if (!mended) + T.toggle_valve() + if (TTV_WIRE_DISARM) + if (!mended) + T.toggle_armed() + if (TTV_WIRE_RNG) + if (prob(70)) + T.toggle_valve() + else + T.toggle_armed() + if (TTV_WIRE_DEVICECHANGE) + if (!mended) + if (prob(40)) + T.visible_message(SPAN_DANGER("\The [T] beeps defeatedly!")) + playsound(T, 'sound/items/timer.ogg', 50) + T.toggle_armed() + else + T.visible_message(SPAN_WARNING("\The [T] starts beeping angrily!")) + while (timer > 0) + playsound(T, 'sound/items/timer.ogg', 50) + timer-- + T.toggle_valve() + +/datum/wires/transfer_valve/CanUse(mob/living/L) + var/obj/item/device/transfer_valve/T = holder + if(T.armed) + return TRUE + return FALSE diff --git a/code/datums/wires/wire_description.dm b/code/datums/wires/wire_description.dm index 7bbd557578407..1de0857696013 100644 --- a/code/datums/wires/wire_description.dm +++ b/code/datums/wires/wire_description.dm @@ -1,7 +1,7 @@ /datum/wire_description var/index var/description - var/skill_level = SKILL_PROF + var/skill_level = SKILL_MASTER /datum/wire_description/New(index, description, skill_level) src.index = index @@ -9,4 +9,4 @@ src.description = description if(skill_level) src.skill_level = skill_level - ..() \ No newline at end of file + ..() diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index 843934ab457a0..4983c3221ea57 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -100,7 +100,6 @@ var/global/list/wireColours = list("red", "blue", "green", "darkred", "orange", var/datum/browser/popup = new(user, "wires", holder.name, window_x, window_y) popup.set_content(html) - popup.set_title_image(user.browse_rsc_icon(holder.icon, holder.icon_state)) popup.open() return TRUE @@ -112,7 +111,7 @@ var/global/list/wireColours = list("red", "blue", "green", "darkred", "orange", var/list/wires_used = list() for(var/colour in wires) - wires_used += prob(user.skill_fail_chance(SKILL_ELECTRICAL, 20, SKILL_ADEPT)) ? pick(wires) : colour + wires_used += prob(user.skill_fail_chance(SKILL_ELECTRICAL, 20, SKILL_TRAINED)) ? pick(wires) : colour if(!user.skill_check(SKILL_ELECTRICAL, SKILL_BASIC)) wires_used = shuffle(wires_used) @@ -148,7 +147,7 @@ var/global/list/wireColours = list("red", "blue", "green", "darkred", "orange", holder.add_hiddenprint(L) if(href_list["cut"]) // Toggles the cut/mend status - if(isWirecutter(I) || isWirecutter(offhand_item)) + if(I?.tool_behaviour == TOOL_WIRECUTTER || offhand_item?.tool_behaviour == TOOL_WIRECUTTER) var/colour = href_list["cut"] var/message = "" if (CutWireColour(colour)) @@ -156,7 +155,7 @@ var/global/list/wireColours = list("red", "blue", "green", "darkred", "orange", else message = SPAN_NOTICE("You cut the [colour] wire.") - if(prob(L.skill_fail_chance(SKILL_ELECTRICAL, 20, SKILL_ADEPT))) + if(prob(L.skill_fail_chance(SKILL_ELECTRICAL, 20, SKILL_TRAINED))) RandomCut() message = SPAN_DANGER("You accidentally nick another wire in addition to the [colour] wire!") else if(!L.skill_check(SKILL_ELECTRICAL, SKILL_BASIC)) @@ -167,9 +166,9 @@ var/global/list/wireColours = list("red", "blue", "green", "darkred", "orange", else to_chat(L, SPAN_CLASS("error", "You need wirecutters!")) else if(href_list["pulse"]) - if(isMultitool(I) || isMultitool(offhand_item)) + if(I?.tool_behaviour == TOOL_MULTITOOL || offhand_item?.tool_behaviour == TOOL_MULTITOOL) var/colour = href_list["pulse"] - if(prob(L.skill_fail_chance(SKILL_ELECTRICAL, 30, SKILL_ADEPT))) + if(prob(L.skill_fail_chance(SKILL_ELECTRICAL, 30, SKILL_TRAINED))) RandomPulse() to_chat(L, SPAN_DANGER("You accidentally pulse another wire instead of the [colour] wire!")) if(prob(L.skill_fail_chance(SKILL_ELECTRICAL, 60, SKILL_BASIC))) @@ -186,7 +185,7 @@ var/global/list/wireColours = list("red", "blue", "green", "darkred", "orange", else if(href_list["attach"]) var/colour = href_list["attach"] var/failed = 0 - if(prob(L.skill_fail_chance(SKILL_ELECTRICAL, 80, SKILL_EXPERT))) + if(prob(L.skill_fail_chance(SKILL_ELECTRICAL, 80, SKILL_EXPERIENCED))) colour = pick(wires) to_chat(L, SPAN_DANGER("Are you sure you got the right wire?")) failed = 1 @@ -208,7 +207,7 @@ var/global/list/wireColours = list("red", "blue", "green", "darkred", "orange", to_chat(L, SPAN_CLASS("error", "You need a remote signaller!")) else if(href_list["examine"]) var/colour = href_list["examine"] - to_chat(usr, examine(GetIndex(colour), usr)) + to_chat(usr, ExamineWire(GetIndex(colour), usr)) // Update Window Interact(usr) @@ -233,7 +232,7 @@ var/global/list/wireColours = list("red", "blue", "green", "darkred", "orange", /datum/wires/proc/ResetPulsed(index) return -/datum/wires/proc/examine(index, mob/user) +/datum/wires/proc/ExamineWire(index, mob/user) . = "You aren't sure what this wire does." var/datum/wire_description/wd = get_description(index) diff --git a/code/game/antagonist/_antagonist_setup.dm b/code/game/antagonist/_antagonist_setup.dm index f773ebd9634d7..5c92a4d9aa4b0 100644 --- a/code/game/antagonist/_antagonist_setup.dm +++ b/code/game/antagonist/_antagonist_setup.dm @@ -1,12 +1,12 @@ /* - MODULAR ANTAGONIST SYSTEM +MODULAR ANTAGONIST SYSTEM - Attempts to centralize antag tracking code into its own system, which has the added bonus of making - the display procs consistent. Should be fairly self-explanatory with a review of the procs. +Attempts to centralize antag tracking code into its own system, which has the added bonus of making +the display procs consistent. Should be fairly self-explanatory with a review of the procs. - To use: +To use: - Get the appropriate datum via get_antag_data("antagonist id") - using the id var of the desired /datum/antagonist ie. var/datum/antagonist/A = get_antag_data("traitor") + using the id var of the desired /datum/antagonist ie. var/datum/antagonist/A = get_antag_data("traitor") - Call add_antagonist() on the desired target mind ie. A.add_antagonist(mob.mind) - To ignore protected roles, supply a positive second argument. - To skip equipping with appropriate gear, supply a positive third argument. @@ -14,6 +14,7 @@ // Global procs. /proc/get_antag_data(antag_type) + RETURN_TYPE(/datum/antagonist) if(GLOB.all_antag_types_[antag_type]) return GLOB.all_antag_types_[antag_type] else @@ -42,12 +43,14 @@ antag.update_all_icons() /proc/get_antags(atype) + RETURN_TYPE(/list) var/datum/antagonist/antag = GLOB.all_antag_types_[atype] if(antag && islist(antag.current_antagonists)) return antag.current_antagonists return list() /proc/player_is_antag(datum/mind/player, only_offstation_roles = 0) + RETURN_TYPE(/datum/antagonist) var/list/all_antag_types = GLOB.all_antag_types_ for(var/antag_type in all_antag_types) var/datum/antagonist/antag = all_antag_types[antag_type] diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm index 70a620c603469..31633db940206 100644 --- a/code/game/antagonist/antagonist.dm +++ b/code/game/antagonist/antagonist.dm @@ -2,8 +2,8 @@ // Text shown when becoming this antagonist. var/list/restricted_jobs = list() // Jobs that cannot be this antagonist at roundstart (depending on config) - var/list/protected_jobs = list() // As above. var/list/blacklisted_jobs = list(/datum/job/submap) // Jobs that can NEVER be this antagonist + var/list/blacklisted_species = list(/datum/species/nabber, /datum/species/diona, /datum/species/adherent) // Strings. var/welcome_text = "Cry havoc and let slip the dogs of war!" @@ -29,7 +29,9 @@ var/faction_descriptor // Description of the cause. Mandatory for faction role. var/faction_verb // Verb added when becoming a member of the faction, if any. var/faction_welcome // Message shown to faction members. - var/faction = "neutral" // Actual faction name. Used primarily in stuff like simple_animals seeing if you are a threat or not. + var/faction // Actual faction name. Used primarily in stuff like simple_animals seeing if you are a threat or not. + /// Set to TRUE for offships and antags that wouldn't know the crew + var/no_prior_faction = FALSE // Spawn values (autotraitor and game mode) var/hard_cap = 3 // Autotraitor var. Won't spawn more than this many antags. @@ -94,8 +96,6 @@ get_starting_locations() if(!role_text_plural) role_text_plural = role_text - if(config.protect_roles_from_antagonist) - restricted_jobs |= protected_jobs if(antaghud_indicator) if(!GLOB.hud_icon_reference) GLOB.hud_icon_reference = list() @@ -201,7 +201,7 @@ //so that they do not occupy regular job slots. All other antag roles should be spawned after jobs are //assigned, so that job restrictions can be respected. /datum/antagonist/proc/attempt_spawn(spawn_target = null) - if(spawn_target == null) + if(isnull(spawn_target)) spawn_target = initial_spawn_target // Update our boundaries. diff --git a/code/game/antagonist/antagonist_add.dm b/code/game/antagonist/antagonist_add.dm index fea319a3aba24..55b697cb0f4f6 100644 --- a/code/game/antagonist/antagonist_add.dm +++ b/code/game/antagonist/antagonist_add.dm @@ -1,6 +1,6 @@ -/datum/antagonist/proc/add_antagonist(datum/mind/player, ignore_role, do_not_equip, move_to_spawn, do_not_announce, preserve_appearance) +/datum/antagonist/proc/add_antagonist(datum/mind/player, ignore_role, do_not_equip, move_to_spawn, do_not_announce, preserve_appearance, forced = FALSE) - if(!add_antagonist_mind(player, ignore_role)) + if(!add_antagonist_mind(player, ignore_role, forced = forced)) return if(base_to_load) @@ -26,20 +26,25 @@ if(!do_not_equip) equip(player.current) - if(player.current) + if(faction && player.current) + if(no_prior_faction) + player.current.last_faction = faction + else + player.current.last_faction = player.current.faction player.current.faction = faction return 1 -/datum/antagonist/proc/add_antagonist_mind(datum/mind/player, ignore_role, nonstandard_role_type, nonstandard_role_msg) +/datum/antagonist/proc/add_antagonist_mind(datum/mind/player, ignore_role, nonstandard_role_type, nonstandard_role_msg, forced) if(!istype(player)) return 0 if(!player.current) return 0 if(player in current_antagonists) return 0 - if(!can_become_antag(player, ignore_role)) + if(!can_become_antag(player, ignore_role, forced)) return 0 current_antagonists |= player + GLOB.destroyed_event.register(player, src, PROC_REF(remove_antagonist)) if(faction_verb) player.current.verbs |= faction_verb @@ -50,6 +55,10 @@ if(player.current.client) player.current.client.verbs += /client/proc/aooc + if (istype(player.current, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/borg = player.current + borg.emagged = TRUE + spawn(1 SECOND) //Added a delay so that this should pop up at the bottom and not the top of the text flood the new antag gets. to_chat(player.current, SPAN_NOTICE("Once you decide on a goal to pursue, you can optionally display it to \ everyone at the end of the shift with the Set Ambition verb, located in the IC tab. You can change this at any time, \ @@ -67,13 +76,19 @@ return 1 /datum/antagonist/proc/remove_antagonist(datum/mind/player, show_message, implanted) + GLOB.destroyed_event.unregister(player, src, PROC_REF(remove_antagonist)) if(!istype(player)) + current_antagonists -= player return 0 if (player.current) if (faction_verb) player.current.verbs -= faction_verb if (faction && player.current.faction == faction) - player.current.faction = MOB_FACTION_NEUTRAL + if(player.current.faction == player.current.last_faction) + player.current.faction = MOB_FACTION_NEUTRAL + else + player.current.faction = player.current.last_faction + player.current.last_faction = faction if(player in current_antagonists) to_chat(player.current, SPAN_DANGER(FONT_LARGE("You are no longer a [role_text]!"))) current_antagonists -= player diff --git a/code/game/antagonist/antagonist_create.dm b/code/game/antagonist/antagonist_create.dm index 3037274bea52b..4b6e79b995928 100644 --- a/code/game/antagonist/antagonist_create.dm +++ b/code/game/antagonist/antagonist_create.dm @@ -26,7 +26,7 @@ else M = new /mob/living/carbon/human(get_turf(source)) M.ckey = source.ckey - add_antagonist(M.mind, 1, 0, 1) // Equip them and move them to spawn. + add_antagonist(M.mind, 1, 0, 1, forced = TRUE) // Equip them and move them to spawn. return M /datum/antagonist/proc/create_id(assignment, mob/living/carbon/human/player, equip = 1) diff --git a/code/game/antagonist/antagonist_factions.dm b/code/game/antagonist/antagonist_factions.dm index 2bfda87fd9c1b..b556a622c8e08 100644 --- a/code/game/antagonist/antagonist_factions.dm +++ b/code/game/antagonist/antagonist_factions.dm @@ -18,7 +18,7 @@ log_debug("\The [src] attempted to convert \the [player.current] to [faction], but failed: Player is already an antagonist.") return - var/result = faction.can_become_antag_detailed(player, TRUE) + var/result = faction.can_become_antag_detailed(player, TRUE, TRUE) if(result) to_chat(src, SPAN_WARNING("\The [player.current] cannot be \a [faction.faction_role_text]!")) log_debug("\The [src] attempted to convert \the [player.current] to [faction], but failed: [result]") @@ -35,7 +35,7 @@ player.rev_cooldown = world.time + 5 SECONDS if (!faction.is_antagonist(player)) var/choice = alert(player.current,"Asked by [src]: Do you want to join the [faction.faction_descriptor]?","Join the [faction.faction_descriptor]?","No!","Yes!") - if(choice == "Yes!" && faction.add_antagonist_mind(player, 0, faction.faction_role_text, faction.faction_welcome)) + if(choice == "Yes!" && faction.add_antagonist_mind(player, FALSE, faction.faction_role_text, faction.faction_welcome)) to_chat(src, SPAN_NOTICE("\The [player.current] joins the [faction.faction_descriptor]!")) log_debug("\The [src] has successfully converted \the [player.current] to [faction].") return diff --git a/code/game/antagonist/antagonist_helpers.dm b/code/game/antagonist/antagonist_helpers.dm index 7b6b39181d525..bf401599c5edc 100644 --- a/code/game/antagonist/antagonist_helpers.dm +++ b/code/game/antagonist/antagonist_helpers.dm @@ -3,16 +3,19 @@ * Use strict type comparisons for truthiness values. * `ignore_role` will skip restriced job, player age, and player status flag checks. */ -/datum/antagonist/proc/can_become_antag_detailed(datum/mind/player, ignore_role) +/datum/antagonist/proc/can_become_antag_detailed(datum/mind/player, ignore_role, forced = FALSE) if(player.current) if(jobban_isbanned(player.current, id)) return "Player is banned from this antagonist role." - if(player.current.faction != MOB_FACTION_NEUTRAL) - return "Player is already assigned to a non-neutral faction ([player.current.faction])." if(is_type_in_list(player.assigned_job, blacklisted_jobs)) return "Player's assigned job ([player.assigned_job]) is blacklisted from this antagonist role." + if(!forced && ishuman(player.current)) + var/mob/living/carbon/human/target = player.current + if(is_type_in_list(target.species, blacklisted_species)) + return "Player's assigned species ([initial(target.species.name)]) is blacklisted from this antagonist role." + if(!ignore_role) if(player.current && player.current.client) var/client/C = player.current.client @@ -26,8 +29,8 @@ return FALSE /// Checks if the given player is able to become an antagonist or not. Simplified version of `can_become_antag_detailed()`. -/datum/antagonist/proc/can_become_antag(datum/mind/player, ignore_role) - return !can_become_antag_detailed(player, ignore_role) +/datum/antagonist/proc/can_become_antag(datum/mind/player, ignore_role, forced) + return !can_become_antag_detailed(player, ignore_role, forced) /datum/antagonist/proc/antags_are_dead() for(var/datum/mind/antag in current_antagonists) @@ -75,6 +78,7 @@ return (flags & (ANTAG_OVERRIDE_MOB|ANTAG_OVERRIDE_JOB)) /proc/all_random_antag_types() + RETURN_TYPE(/list) // No caching as the ANTAG_RANDOM_EXCEPTED flag can be added/removed mid-round. var/list/antag_candidates = GLOB.all_antag_types_.Copy() for(var/datum/antagonist/antag in antag_candidates) diff --git a/code/game/antagonist/antagonist_place.dm b/code/game/antagonist/antagonist_place.dm index 6e5b9d1ac201b..aa39fe3bd9afa 100644 --- a/code/game/antagonist/antagonist_place.dm +++ b/code/game/antagonist/antagonist_place.dm @@ -1,7 +1,7 @@ /datum/antagonist/proc/get_starting_locations() if(landmark_id) starting_locations = list() - for(var/obj/effect/landmark/L in landmarks_list) + for(var/obj/landmark/L in landmarks_list) if(L.name == landmark_id) starting_locations |= get_turf(L) diff --git a/code/game/antagonist/antagonist_print.dm b/code/game/antagonist/antagonist_print.dm index b2db4f91768c7..10b6f7ed91d8f 100644 --- a/code/game/antagonist/antagonist_print.dm +++ b/code/game/antagonist/antagonist_print.dm @@ -12,7 +12,9 @@ if(ambition) text += "
Their goals for today were..." text += "
[SPAN_NOTICE("[ambition.summarize()]")]" - if(!length(global_objectives) && P.objectives && length(P.objectives)) + if(P.current?.stat == DEAD && P.last_words) + text += "
Their last words were: '[P.last_words]'" + if(!length(global_objectives) && length(P.objectives)) var/num = 1 for(var/datum/objective/O in P.objectives) text += print_objective(O, num) diff --git a/code/game/antagonist/antagonist_update.dm b/code/game/antagonist/antagonist_update.dm index 7aa045f7f3130..dc7a08df416e0 100644 --- a/code/game/antagonist/antagonist_update.dm +++ b/code/game/antagonist/antagonist_update.dm @@ -15,7 +15,7 @@ spawn(3) var/mob/living/carbon/human/H = player.current if(istype(H)) - H.change_appearance(APPEARANCE_COMMON, TRUE, state = GLOB.z_state) + H.change_appearance(APPEARANCE_COMMON, state = GLOB.z_state) return player.current /datum/antagonist/proc/update_access(mob/living/player) diff --git a/code/game/antagonist/outsider/actors.dm b/code/game/antagonist/outsider/actors.dm index 3368e97ca4922..887473df07878 100644 --- a/code/game/antagonist/outsider/actors.dm +++ b/code/game/antagonist/outsider/actors.dm @@ -35,12 +35,12 @@ GLOBAL_DATUM_INIT(actor, /datum/antagonist/actor, new) return 1 -/client/verb/join_as_actor() - set category = "IC" +/mob/observer/ghost/verb/join_as_actor() + set category = "Ghost" set name = "Join as Actor" set desc = "Join as an Actor to entertain the crew through television!" - if(!MayRespawn(1) || !GLOB.actor.can_become_antag(usr.mind, 1)) + if(!MayRespawn(1) || !GLOB.actor.can_become_antag(usr.mind, TRUE, TRUE)) return var/choice = alert("Are you sure you'd like to join as an actor?", "Confirmation","Yes", "No") diff --git a/code/game/antagonist/outsider/commando.dm b/code/game/antagonist/outsider/commando.dm index d7faa58b97518..afa5d96b9e55e 100644 --- a/code/game/antagonist/outsider/commando.dm +++ b/code/game/antagonist/outsider/commando.dm @@ -13,6 +13,9 @@ GLOBAL_DATUM_INIT(commandos, /datum/antagonist/deathsquad/mercenary, new) hard_cap_round = 8 initial_spawn_req = 4 initial_spawn_target = 6 + faction = "commando" + no_prior_faction = TRUE + /datum/antagonist/deathsquad/mercenary/equip(mob/living/carbon/human/player) diff --git a/code/game/antagonist/outsider/deathsquad.dm b/code/game/antagonist/outsider/deathsquad.dm index ff482ddd8e83c..1ea116915629f 100644 --- a/code/game/antagonist/outsider/deathsquad.dm +++ b/code/game/antagonist/outsider/deathsquad.dm @@ -16,6 +16,7 @@ GLOBAL_DATUM_INIT(deathsquad, /datum/antagonist/deathsquad, new) initial_spawn_target = 6 faction = "deathsquad" + no_prior_faction = TRUE var/deployed = 0 diff --git a/code/game/antagonist/outsider/ert.dm b/code/game/antagonist/outsider/ert.dm index 7a3fbdcb30b83..46d9dfe94169f 100644 --- a/code/game/antagonist/outsider/ert.dm +++ b/code/game/antagonist/outsider/ert.dm @@ -5,9 +5,9 @@ GLOBAL_DATUM_INIT(ert, /datum/antagonist/ert, new) role_text = "Emergency Responder" role_text_plural = "Emergency Responders" antag_text = "You are an anti-antagonist! Within the rules, try to save the ship and its crew from the ongoing crisis. \ - Try to make sure the other players have fun, and if you are confused or at a loss, always adminhelp. \ - You should also contact the staff before taking any extreme actions. \ - Remember that all rules outside of those with explicit exceptions apply to the ERT!" + Try to make sure the other players have fun, and if you are confused or at a loss, always adminhelp. \ + You should also contact the staff before taking any extreme actions. \ + Remember that all rules outside of those with explicit exceptions apply to the ERT!" welcome_text = "You shouldn't see this" leader_welcome_text = "You shouldn't see this" landmark_id = "Response Team" @@ -22,6 +22,9 @@ GLOBAL_DATUM_INIT(ert, /datum/antagonist/ert, new) initial_spawn_target = 7 show_objectives_on_creation = 0 //we are not antagonists, we do not need the antagonist shpiel/objectives + faction = "emergency" + no_prior_faction = TRUE + base_to_load = /datum/map_template/ruin/antag_spawn/ert var/reason = "" diff --git a/code/game/antagonist/outsider/mercenary.dm b/code/game/antagonist/outsider/mercenary.dm index b2b2a1a973376..aa1e34a15294e 100644 --- a/code/game/antagonist/outsider/mercenary.dm +++ b/code/game/antagonist/outsider/mercenary.dm @@ -18,6 +18,7 @@ GLOBAL_DATUM_INIT(mercs, /datum/antagonist/mercenary, new) min_player_age = 14 faction = "mercenary" + no_prior_faction = TRUE base_to_load = /datum/map_template/ruin/antag_spawn/mercenary diff --git a/code/game/antagonist/outsider/ninja.dm b/code/game/antagonist/outsider/ninja.dm index 8c2945f669372..6e7fff0ea3fb7 100644 --- a/code/game/antagonist/outsider/ninja.dm +++ b/code/game/antagonist/outsider/ninja.dm @@ -1,148 +1,160 @@ GLOBAL_DATUM_INIT(ninjas, /datum/antagonist/ninja, new) + /datum/antagonist/ninja id = MODE_NINJA - role_text = "Ninja" - role_text_plural = "Ninja" + role_text = "Operative" + role_text_plural = "Operatives" landmark_id = "ninjastart" - welcome_text = "You are an elite mercenary assassin of the Spider Clan. You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor." + welcome_text = "You are an elite operative of some interest group. You have a variety of abilities at your disposal, thanks to your advanced hardsuit." flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_RANDSPAWN | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE antaghud_indicator = "hudninja" - initial_spawn_req = 1 - initial_spawn_target = 1 - hard_cap = 1 + initial_spawn_target = 2 + hard_cap = 2 hard_cap_round = 3 min_player_age = 18 - id_type = /obj/item/card/id/syndicate - faction = "ninja" + no_prior_faction = TRUE base_to_load = /datum/map_template/ruin/antag_spawn/ninja -/datum/antagonist/ninja/create_objectives(datum/mind/ninja) - if(!..()) +/datum/antagonist/ninja/create_objectives(datum/mind/ninja) + if (!..()) return - - var/objective_list = list(1,2,3,4,5) - for(var/i=rand(2,4),i>0,i--) - switch(pick(objective_list)) - if(1)//Kill + var/objective_list = list(1, 2, 3, 4, 5) + for (var/i = rand(2, 4) to 1 step -1) + switch (pick(objective_list)) + if (1) //Kill var/datum/objective/assassinate/ninja_objective = new ninja_objective.owner = ninja ninja_objective.target = ninja_objective.find_target() - if(ninja_objective.target != "Free Objective") + if (ninja_objective.target != "Free Objective") ninja.objectives += ninja_objective else i++ - objective_list -= 1 // No more than one kill objective - if(2)//Steal + objective_list -= 1 + if (2) //Steal var/datum/objective/steal/ninja_objective = new ninja_objective.owner = ninja ninja_objective.target = ninja_objective.find_target() ninja.objectives += ninja_objective - if(3)//Protect + if (3) //Protect var/datum/objective/protect/ninja_objective = new ninja_objective.owner = ninja ninja_objective.target = ninja_objective.find_target() - if(ninja_objective.target != "Free Objective") + if (ninja_objective.target != "Free Objective") ninja.objectives += ninja_objective else i++ objective_list -= 3 - if(4)//Download + if (4) //Download var/datum/objective/download/ninja_objective = new ninja_objective.owner = ninja ninja_objective.gen_amount_goal() ninja.objectives += ninja_objective objective_list -= 4 - if(5)//Harm + if (5) //Harm var/datum/objective/harm/ninja_objective = new ninja_objective.owner = ninja ninja_objective.target = ninja_objective.find_target() - if(ninja_objective.target != "Free Objective") + if (ninja_objective.target != "Free Objective") ninja.objectives += ninja_objective else i++ objective_list -= 5 - var/datum/objective/survive/ninja_objective = new ninja_objective.owner = ninja ninja.objectives += ninja_objective -/datum/antagonist/ninja/greet(datum/mind/player) - if(!..()) +/datum/antagonist/ninja/greet(datum/mind/player) + if (!..()) return 0 var/directive = generate_ninja_directive("heel") player.StoreMemory("Directive: [SPAN_DANGER("[directive]")]
", /singleton/memory_options/system) to_chat(player, "Remember your directive: [directive].") -/datum/antagonist/ninja/update_antag_mob(datum/mind/player) - ..() - var/ninja_title = pick(GLOB.ninja_titles) - var/ninja_name = pick(GLOB.ninja_names) - var/mob/living/carbon/human/H = player.current - if(istype(H)) - H.real_name = "[ninja_title] [ninja_name]" - H.SetName(H.real_name) - player.name = H.name /datum/antagonist/ninja/equip(mob/living/carbon/human/player) . = ..() - if(.) - var/obj/item/device/radio/R = new /obj/item/device/radio/headset(player) - player.equip_to_slot_or_del(R, slot_l_ear) - player.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(player), slot_w_uniform) - player.equip_to_slot_or_del(new /obj/item/device/flashlight(player), slot_belt) - create_id("Infiltrator", player) - equip_rig(/obj/item/rig/light/ninja, player) - var/obj/item/modular_computer/pda/syndicate/U = new - player.put_in_hands(U) - var/singleton/uplink_source/pda/uplink_source = new - uplink_source.setup_uplink_source(player, 0) + if (!.) + return + var/obj/item/device/radio/radio = new /obj/item/device/radio/headset/syndicate(player) + player.equip_to_slot_or_del(radio, slot_l_ear) + player.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(player), slot_w_uniform) + create_id("Operative", player) + var/obj/item/modular_computer/pda/syndicate/pda = new + player.put_in_hands(pda) + var/singleton/uplink_source/uplink_source = GET_SINGLETON(/singleton/uplink_source/pda) + uplink_source.setup_uplink_source(player, 0) + var/obj/item/selection/ninja/selection = new + player.put_in_hands(selection) + + +/datum/antagonist/ninja/equip_vox(mob/living/carbon/human/vox, mob/living/carbon/human/old) + vox.equip_to_slot_or_del(new /obj/item/clothing/under/vox/vox_casual(vox), slot_w_uniform) + vox.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/vox(vox), slot_shoes) + vox.equip_to_slot_or_del(new /obj/item/clothing/gloves/vox(vox), slot_gloves) + vox.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/vox(vox), slot_wear_mask) + vox.equip_to_slot_or_del(new /obj/item/tank/nitrogen(vox), slot_back) + vox.put_in_hands(locate(/obj/item/modular_computer/pda/syndicate) in old.contents) + vox.set_internals(locate(/obj/item/tank) in vox.contents) + /datum/antagonist/ninja/proc/generate_ninja_directive(side) - var/directive = "[side=="face"?"[GLOB.using_map.company_name]":"A criminal syndicate"] is your employer. "//Let them know which side they're on. - switch(rand(1,19)) - if(1) - directive += "The Spider Clan must not be linked to this operation. Remain hidden and covert when possible." - if(2) - directive += "[GLOB.using_map.station_name] is financed by an enemy of the Spider Clan. Cause as much structural damage as desired." - if(3) + var/directive = "[side=="face"?"[GLOB.using_map.company_name]":"A criminal syndicate"] is your employer. " + switch (rand(1, 19)) + if (1) + directive += "Your interest group must not be linked to this operation. Remain hidden and covert when possible." + if (2) + directive += "[GLOB.using_map.station_name] is financed by an enemy of your interest group. Cause as much structural damage as desired." + if (3) directive += "A wealthy animal rights activist has made a request we cannot refuse. Prioritize saving animal lives whenever possible." - if(4) - directive += "The Spider Clan absolutely cannot be linked to this operation. Eliminate witnesses at your discretion." - if(5) + if (4) + directive += "Your interest group absolutely cannot be linked to this operation. Eliminate witnesses at your discretion." + if (5) directive += "We are currently negotiating with [GLOB.using_map.company_name] [GLOB.using_map.boss_name]. Prioritize saving human lives over ending them." - if(6) + if (6) directive += "We are engaged in a legal dispute over [GLOB.using_map.station_name]. If a laywer is present on board, force their cooperation in the matter." - if(7) + if (7) directive += "A financial backer has made an offer we cannot refuse. Implicate criminal involvement in the operation." - if(8) - directive += "Let no one question the mercy of the Spider Clan. Ensure the safety of all non-essential personnel you encounter." - if(9) + if (8) + directive += "Let no one question the mercy of your interest group. Ensure the safety of all non-essential personnel you encounter." + if (9) directive += "A free agent has proposed a lucrative business deal. Implicate [GLOB.using_map.company_name] involvement in the operation." - if(10) + if (10) directive += "Our reputation is on the line. Harm as few civilians and innocents as possible." - if(11) + if (11) directive += "Our honor is on the line. Utilize only honorable tactics when dealing with opponents." - if(12) + if (12) directive += "We are currently negotiating with a mercenary leader. Disguise assassinations as suicide or other natural causes." - if(13) + if (13) directive += "Some disgruntled [GLOB.using_map.company_name] employees have been supportive of our operations. Be wary of any mistreatment by command staff." - if(14) + if (14) var/xenorace = pick(SPECIES_UNATHI, SPECIES_SKRELL) - directive += "A group of [xenorace] radicals have been loyal supporters of the Spider Clan. Favor [xenorace] crew whenever possible." - if(15) - directive += "The Spider Clan has recently been accused of religious insensitivity. Attempt to speak with the Chaplain and prove these accusations false." - if(16) - directive += "The Spider Clan has been bargaining with a competing prosthetics manufacturer. Try to shine [GLOB.using_map.company_name] prosthetics in a bad light." - if(17) - directive += "The Spider Clan has recently begun recruiting outsiders. Consider suitable candidates and assess their behavior amongst the crew." - if(18) - directive += "A cyborg liberation group has expressed interest in our serves. Prove the Spider Clan merciful towards law-bound synthetics." + directive += "A group of [xenorace] radicals have been loyal supporters of your interest group. Favor [xenorace] crew whenever possible." + if (15) + directive += "Your interest group has recently been accused of religious insensitivity. Attempt to speak with the Chaplain and prove these accusations false." + if (16) + directive += "Your interest group has been bargaining with a competing prosthetics manufacturer. Try to shine [GLOB.using_map.company_name] prosthetics in a bad light." + if (17) + directive += "Your interest group has recently begun recruiting outsiders. Consider suitable candidates and assess their behavior amongst the crew." + if (18) + directive += "A cyborg liberation group has expressed interest in our serves. Prove your interest group is merciful towards law-bound synthetics." else directive += "There are no special supplemental instructions at this time." return directive + + +/obj/item/selection/ninja + name = "loadout selection kit" + desc = "A secure box containing standard operation kit for special forces operatives." + selection_options = list( + "Solar Special Operations" = /obj/structure/closet/crate/ninja/sol, + "Gilgameshi Commando" = /obj/structure/closet/crate/ninja/gcc, + "Syndicate Mercenary" = /obj/structure/closet/crate/ninja/merc, + "Corporate Operative" = /obj/structure/closet/crate/ninja/corpo, + "Spider-Clan Ninja" = /obj/structure/closet/crate/ninja + ) diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm index 9b19d276e4054..0a783553140ae 100644 --- a/code/game/antagonist/outsider/raider.dm +++ b/code/game/antagonist/outsider/raider.dm @@ -19,6 +19,8 @@ GLOBAL_DATUM_INIT(raiders, /datum/antagonist/raider, new) id_type = /obj/item/card/id/syndicate faction = "pirate" + no_prior_faction = TRUE + base_to_load = /datum/map_template/ruin/antag_spawn/heist var/list/raider_uniforms = list( @@ -210,7 +212,7 @@ GLOBAL_DATUM_INIT(raiders, /datum/antagonist/raider, new) if(holster) var/obj/item/clothing/under/uniform = player.w_uniform if(istype(uniform) && uniform.can_attach_accessory(holster)) - uniform.attackby(holster, player) + holster.resolve_attackby(uniform, player) else player.put_in_any_hand_if_possible(holster) @@ -244,7 +246,7 @@ GLOBAL_DATUM_INIT(raiders, /datum/antagonist/raider, new) if(holster) var/obj/item/clothing/under/uniform = vox.w_uniform if(istype(uniform) && uniform.can_attach_accessory(holster)) - uniform.attackby(holster, vox) + uniform.resolve_attackby(holster, vox) else vox.put_in_any_hand_if_possible(holster) diff --git a/code/game/antagonist/outsider/vox.dm b/code/game/antagonist/outsider/vox.dm index 4adb6f186e8f3..cae2c65f39a78 100644 --- a/code/game/antagonist/outsider/vox.dm +++ b/code/game/antagonist/outsider/vox.dm @@ -1,4 +1,5 @@ GLOBAL_DATUM_INIT(vox_raiders, /datum/antagonist/vox, new) +GLOBAL_LIST_EMPTY(vox_artifact_spawners) /datum/antagonist/vox id = MODE_VOXRAIDER @@ -17,7 +18,16 @@ GLOBAL_DATUM_INIT(vox_raiders, /datum/antagonist/vox, new) id_type = /obj/item/card/id/syndicate base_to_load = /datum/map_template/ruin/antag_spawn/vox_raider + var/pending_item_spawn = TRUE + faction = "vox raider" + no_prior_faction = TRUE +/datum/antagonist/vox/add_antagonist(datum/mind/player, ignore_role, do_not_equip, move_to_spawn, do_not_announce, preserve_appearance, forced) + if(pending_item_spawn) + for(var/obj/voxartifactspawner/S as anything in GLOB.vox_artifact_spawners) + S.spawn_artifact() + pending_item_spawn = FALSE + ..() /datum/antagonist/vox/build_candidate_list(datum/game_mode/mode, ghosts_only) candidates = list() @@ -34,7 +44,7 @@ GLOBAL_DATUM_INIT(vox_raiders, /datum/antagonist/vox, new) if (player_is_antag(player)) log_debug("[key_name(player)] is not eligible to become a [role_text]: They are already an antagonist!") continue - if(!is_alien_whitelisted(player.current, all_species[SPECIES_VOX])) + if(!is_any_alien_whitelisted(player.current, all_species[SPECIES_VOX])) log_debug("[player.current.ckey] is not whitelisted") continue var/result = can_become_antag_detailed(player) @@ -55,19 +65,16 @@ GLOBAL_DATUM_INIT(vox_raiders, /datum/antagonist/vox, new) else if (player in pending_antagonists) else if(!can_become_antag(player)) else if(player_is_antag(player)) - else if(!is_alien_whitelisted(player.current, all_species[SPECIES_VOX])) + else if(!is_any_alien_whitelisted(player.current, all_species[SPECIES_VOX])) else candidates |= player return candidates -/datum/antagonist/vox/can_become_antag_detailed(datum/mind/player, ignore_role) - if(!is_alien_whitelisted(player.current, all_species[SPECIES_VOX])) +/datum/antagonist/vox/can_become_antag_detailed(datum/mind/player, ignore_role, forced) + if(!is_any_alien_whitelisted(player.current, all_species[SPECIES_VOX])) return "Player doesn't have vox whitelist" - ..() - - - + . = ..() /datum/antagonist/vox/equip(mob/living/carbon/human/vox/player) if(!..()) @@ -79,3 +86,252 @@ GLOBAL_DATUM_INIT(vox_raiders, /datum/antagonist/vox, new) return TRUE + + +/obj/structure/voxuplink + name = "Shoal beacon" + desc = "A pulsating mass of flesh and steel." + icon = 'maps/antag_spawn/vox/vox.dmi' + icon_state = "printer" + anchored = TRUE + density = TRUE + var/favors = 0 + var/working = FALSE + var/ignore_wl = FALSE + var/rewards = list( + "Slug Launcher - 2" = list(2, /obj/item/gun/launcher/alien/slugsling), + "Soundcannon - 2" = list(2, /obj/item/gun/energy/sonic), + "Flux Cannon - 4" = list(4, /obj/item/gun/energy/darkmatter), + "Lightly Armored Suit - 3" =list(3, /obj/item/clothing/head/helmet/space/vox/carapace, /obj/item/clothing/suit/space/vox/carapace), + "Raider Suit - 6" = list(6, /obj/item/clothing/head/helmet/space/vox/raider, /obj/item/clothing/suit/space/vox/raider), + "Arkmade Hardsuit - 8" = list(8, /obj/item/rig/vox), + "Makeshift Armored Vest - 1" = list(1, /obj/item/clothing/suit/armor/vox_scrap), + "Request medical supplies from Shoal - 1" = list(1, /obj/random/firstaid), + "Request equipment from Shoal - 1" = list(1, /obj/random/loot), + "Protein Source - 1" = list(1, /mob/living/simple_animal/passive/meatbeast) + ) + +/obj/structure/voxuplink/attack_hand(mob/living/carbon/human/user) + var/obj/item/organ/internal/voxstack/stack = user.internal_organs_by_name[BP_STACK] + if(istype(stack) || ignore_wl) + if(!working) + var/choice = input(user, "What would you like to request from Apex? You have [favors] favors left!", "Shoal Beacon") as null|anything in rewards + if(choice && !working) + if(rewards[choice][1] <= favors) + working = TRUE + on_update_icon() + to_chat(user, SPAN_NOTICE("The Apex rewards you with \the [choice].")) + sleep(20) + working = FALSE + on_update_icon() + favors -= rewards[choice][1] + for(var/I in rewards[choice]) + if(!isnum(I)) + new I(get_turf(src)) + else + to_chat(user, SPAN_WARNING("You aren't worthy of \the [choice]!")) + else + to_chat(user, SPAN_WARNING("\The [src.name] is still working!")) + else + to_chat(user, SPAN_WARNING("You don't know what to do with \the [src.name].")) + ..() + +/obj/structure/voxuplink/use_tool(obj/item/I, mob/user) + if(istype(I, /obj/item/voxartifact)) + var/obj/item/voxartifact/A = I + favors += A.favor_value + qdel(A) + user.visible_message( + SPAN_NOTICE("\The [user] inserts \a [A] into \the [src]."), + SPAN_NOTICE("You return \the [A] back to the Apex with \the [src].") + ) + return TRUE + if(istype(I, /obj/item/bluecrystal)) + var/obj/item/bluecrystal/A = I + favors += A.favor_value + qdel(A) + user.visible_message( + SPAN_NOTICE("\The [user] inserts \a [A] into \the [src]."), + SPAN_NOTICE("You offer \the [A.name] to the Apex.") + ) + return TRUE + return ..() + +/obj/structure/voxuplink/MouseDrop_T(obj/structure/voxartifactbig/I, mob/user) + if(istype(I, /obj/structure/voxartifactbig)) + favors += I.favor_value + qdel(I) + user.visible_message( + SPAN_NOTICE("\The [user] inserts \a [I] into \the [src]."), + SPAN_NOTICE("You return \the [I] back to the Apex with \the [src].") + ) + return TRUE + return ..() + +/obj/structure/voxuplink/on_update_icon() + if(working) + icon_state = "printer-working" + else + icon_state = "printer" + +/obj/item/voxartifact + name = "Apex shard" + desc = "An odd-looking piece of organic matter, You can hear faint humming from the inside." + icon = 'icons/obj/urn.dmi' + icon_state = "urn" + var/favor_value = 4 + var/open_chance = 1 + var/icons = list( + "unknown2", + "Green lump", + "ano112", + "ano72" + ) + +/obj/item/voxartifact/Initialize() + . = ..() + icon_state = pick(icons) + +/obj/item/voxartifact/attack_self(mob/living/carbon/human/user) + user.visible_message( + SPAN_NOTICE("\The [user] starts tinkering with [src.name]."), + SPAN_NOTICE("You start to analyze \the [src.name]."), + ) + var/obj/item/organ/internal/voxstack/stack = user.internal_organs_by_name[BP_STACK] + if (istype(stack)) + if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE | DO_BAR_OVER_USER)) + to_chat(user, SPAN_NOTICE("\The [src.name] disappears after a moment, leaving something behind.\nYou were able to send it back to arkship, but Apex did not appreciate your actions.")) + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread + s.set_up(3, 1, src) + s.start() + activate() + else + if (do_after(user, 60 SECONDS, src, DO_PUBLIC_UNIQUE | DO_BAR_OVER_USER)) + if(rand(open_chance)) + to_chat(user, SPAN_NOTICE("After tinkering with [src.name] for some time, it suddenly disappears leaving something behind!")) + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread + s.set_up(10, 1, src) + s.start() + activate() + else + to_chat(user, SPAN_NOTICE("You are unable to learn anything useful about [src.name].")) + +/obj/item/voxartifact/proc/activate() + new /obj/random/loot(get_turf(src)) + new /obj/item/bluecrystal(get_turf(src)) + qdel(src) + +/obj/structure/voxartifactbig + name = "biopod" + desc = "A bizarre structure made out of chitin-like material." + icon = 'maps/antag_spawn/vox/vox.dmi' + icon_state = "pod_big" + density = TRUE + var/favor_value = 12 + +/obj/voxartifactspawner + name = "landmark" + icon = 'icons/effects/landmarks.dmi' + icon_state = "x2" + anchored = TRUE + unacidable = TRUE + simulated = FALSE + invisibility = INVISIBILITY_ABSTRACT + +/obj/voxartifactspawner/Initialize(mapload) + GLOB.vox_artifact_spawners += src + return ..() + +/obj/voxartifactspawner/Destroy() + GLOB.vox_artifact_spawners -= src + return ..() + +/obj/voxartifactspawner/proc/spawn_artifact() + var/item_list = list( + /obj/item/voxartifact = 3, + /obj/structure/voxartifactbig = 1, + ) + var/to_spawn = pickweight(item_list) + new to_spawn(get_turf(src)) + qdel(src) + +/obj/item/bluecrystal + name = "Bluespace crystal" + desc = "Unusual looking crystal with eerie deep blue shimmering, holding it in your hand makes you feel like if your hand was sinking in to it." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "ansible_crystal" + w_class = ITEM_SIZE_TINY + var/favor_value = 1 + +/obj/structure/voxanalyzer + name = "oddity analyzer" + desc = "An old, dusty machine meant to analyze various bluespace anomalies and send research data directly to SCGEC Observatory." + icon = 'icons/obj/machines/research/xenoarcheology_scanner.dmi' + icon_state = "scanner" + anchored = FALSE + density = TRUE + var/points = 0 + var/crystal_value = 4 + var/working = FALSE + var/activated = FALSE + obj_flags = OBJ_FLAG_ANCHORABLE + + var/rewards = list( + "Stasis Bag - 2" = list(2, /obj/item/bodybag/cryobag), + "Coagulant Autoinjector - 1" = list(1, /obj/item/reagent_containers/hypospray/autoinjector/coagulant), + "Iatric monitor - 1" = list(1, /obj/item/organ/internal/augment/active/iatric_monitor), + "Internal Air System - 1" = list(1, /obj/item/organ/internal/augment/active/internal_air_system), + "Adaptive Binoculars - 1" = list(1, /obj/item/organ/internal/augment/active/item/adaptive_binoculars), + "Advanced Armored Vest - 4" = list(4, /obj/item/clothing/suit/armor/pcarrier/merc, /obj/item/clothing/head/helmet/merc), + "Nerve Dampeners - 6" = list(6, /obj/item/organ/internal/augment/active/nerve_dampeners), + "Hazard Hardsuit - 12" = list(12, /obj/item/rig/hazard), + ) + +/obj/structure/voxanalyzer/attack_hand(mob/living/carbon/human/user) + if(activated) + if(!working) + visible_message(SPAN_NOTICE("\The [src]'s microphone transmits, \"Nice find! We can send you a few of our prototypes in exchange for data about these crystals.\"")) + var/choice = input(user, "Choose a prototype.\n [points] crystals sent.", "Oddity analyzer") as null|anything in rewards + if (choice) + if((rewards[choice][1] <= points) && choice) + points -= rewards[choice][1] + for(var/I in rewards[choice]) + if(!isnum(I)) + new I(get_turf(src)) + else + to_chat(user, SPAN_WARNING("\The [src.name] doesn't respond, maybe you should be less greedy next time?")) + else + to_chat(user, SPAN_WARNING("\The [src.name] is used by someone!")) + else + to_chat(user, SPAN_WARNING("\The [src.name] seems to be powered down.")) + ..() + +/obj/structure/voxanalyzer/use_tool(obj/item/I, mob/user) + if(istype(I, /obj/item/bluecrystal)) + if(!activated) + to_chat(user, SPAN_INFO("As soon as you bring [I] closer to [src] it powers up with shower of sparks!.")) + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread + s.set_up(3, 1, src) + s.start() + activated = TRUE + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] starts analyzing [I.name]."), + SPAN_NOTICE("You begin to analyze [I.name]."), + ) + working = TRUE + on_update_icon() + if (do_after(user, 1 SECONDS, src, DO_PUBLIC_UNIQUE | DO_BAR_OVER_USER)) + points += crystal_value + qdel(I) + to_chat(user, SPAN_NOTICE("You finish analyzing \the [I.name].")) + working = FALSE + on_update_icon() + return TRUE + return ..() + +/obj/structure/voxanalyzer/on_update_icon() + if(working) + icon_state = "scanner_active" + else + icon_state = "scanner" diff --git a/code/game/antagonist/outsider/wizard.dm b/code/game/antagonist/outsider/wizard.dm index 594df7aaaaeac..e9b384e850ebc 100644 --- a/code/game/antagonist/outsider/wizard.dm +++ b/code/game/antagonist/outsider/wizard.dm @@ -16,6 +16,7 @@ GLOBAL_DATUM_INIT(wizards, /datum/antagonist/wizard, new) min_player_age = 18 faction = "wizard" + no_prior_faction = TRUE base_to_load = /datum/map_template/ruin/antag_spawn/wizard /datum/antagonist/wizard/create_objectives(datum/mind/wizard) diff --git a/code/game/antagonist/station/changeling.dm b/code/game/antagonist/station/changeling.dm index 5e454a21ee605..d349e123bfbce 100644 --- a/code/game/antagonist/station/changeling.dm +++ b/code/game/antagonist/station/changeling.dm @@ -6,7 +6,8 @@ GLOBAL_DATUM_INIT(changelings, /datum/antagonist/changeling, new) role_text_plural = "Changelings" feedback_tag = "changeling_objective" blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/submap) - protected_jobs = list(/datum/job/officer, /datum/job/warden, /datum/job/detective, /datum/job/captain, /datum/job/hos) + restricted_jobs = list(/datum/job/officer, /datum/job/warden, /datum/job/detective, /datum/job/captain, /datum/job/hos) + blacklisted_species = list() welcome_text = "Use say \"%LANGUAGE_PREFIX%g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them." flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE antaghud_indicator = "hudchangeling" @@ -28,6 +29,7 @@ GLOBAL_DATUM_INIT(changelings, /datum/antagonist/changeling, new) if(. && player && player.current) player.current.remove_changeling_powers() player.current.verbs -= /datum/changeling/proc/EvolutionMenu + player.current.remove_language(LANGUAGE_CHANGELING_GLOBAL) QDEL_NULL(player.changeling) /datum/antagonist/changeling/create_objectives(datum/mind/changeling) @@ -67,7 +69,7 @@ GLOBAL_DATUM_INIT(changelings, /datum/antagonist/changeling, new) changeling.objectives += survive_objective return -/datum/antagonist/changeling/can_become_antag(datum/mind/player, ignore_role) +/datum/antagonist/changeling/can_become_antag(datum/mind/player, ignore_role, forced) if(..()) if(player.current) if(ishuman(player.current)) @@ -85,4 +87,4 @@ GLOBAL_DATUM_INIT(changelings, /datum/antagonist/changeling, new) if(player.current.client.prefs.organ_data[BP_CHEST] == "cyborg") // Full synthetic. return 0 return 1 - return 0 + return 0 diff --git a/code/game/antagonist/station/cultist.dm b/code/game/antagonist/station/cultist.dm index c21eedd0e9f56..631a1dae29cd4 100644 --- a/code/game/antagonist/station/cultist.dm +++ b/code/game/antagonist/station/cultist.dm @@ -24,8 +24,7 @@ GLOBAL_DATUM_INIT(cult, /datum/antagonist/cultist, new) id = MODE_CULTIST role_text = "Cultist" role_text_plural = "Cultists" - restricted_jobs = list(/datum/job/lawyer, /datum/job/captain, /datum/job/hos) - protected_jobs = list(/datum/job/officer, /datum/job/warden, /datum/job/detective) + restricted_jobs = list(/datum/job/lawyer, /datum/job/captain, /datum/job/hos, /datum/job/officer, /datum/job/warden, /datum/job/detective) blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/chaplain, /datum/job/psychiatrist, /datum/job/submap) feedback_tag = "cult_objective" antag_indicator = "hudcultist" @@ -45,13 +44,15 @@ GLOBAL_DATUM_INIT(cult, /datum/antagonist/cultist, new) var/allow_narsie = 1 var/powerless = 0 var/datum/mind/sacrifice_target - var/list/obj/effect/rune/teleport/teleport_runes = list() + var/list/obj/rune/teleport/teleport_runes = list() var/list/rune_strokes = list() var/list/sacrificed = list() var/cult_rating = 0 var/list/cult_rating_bounds = list(CULT_RUNES_1, CULT_RUNES_2, CULT_RUNES_3, CULT_GHOSTS_1, CULT_GHOSTS_2, CULT_GHOSTS_3) var/max_cult_rating = 0 var/conversion_blurb = "You catch a glimpse of the Realm of Nar-Sie, the Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of That Which Waits. Assist your new compatriots in their dark dealings. Their goals are yours, and yours are theirs. You serve the Dark One above all else. Bring It back." + var/station_summon_only = TRUE + var/no_shuttle_summon = TRUE faction = "cult" @@ -102,7 +103,7 @@ GLOBAL_DATUM_INIT(cult, /datum/antagonist/cultist, new) remove_cult_magic(player.current) remove_cultiness(CULTINESS_PER_CULTIST) -/datum/antagonist/cultist/add_antagonist(datum/mind/player, ignore_role, do_not_equip, move_to_spawn, do_not_announce, preserve_appearance) +/datum/antagonist/cultist/add_antagonist(datum/mind/player, ignore_role, do_not_equip, move_to_spawn, do_not_announce, preserve_appearance, forced) . = ..() if(.) to_chat(player, SPAN_OCCULT("[conversion_blurb]")) diff --git a/code/game/antagonist/station/provocateur.dm b/code/game/antagonist/station/provocateur.dm index d27228246c9fe..4ce619f95707f 100644 --- a/code/game/antagonist/station/provocateur.dm +++ b/code/game/antagonist/station/provocateur.dm @@ -13,6 +13,7 @@ GLOBAL_DATUM_INIT(provocateurs, /datum/antagonist/provocateur, new) min_player_age = 0 var/antag_text_updated + no_prior_faction = TRUE /datum/antagonist/provocateur/get_antag_text(mob/recipient) if (!antag_text_updated) diff --git a/code/game/antagonist/station/renegade.dm b/code/game/antagonist/station/renegade.dm index 48d8264f865bb..3fd996bbc736f 100644 --- a/code/game/antagonist/station/renegade.dm +++ b/code/game/antagonist/station/renegade.dm @@ -21,7 +21,7 @@ GLOBAL_DATUM_INIT(renegades, /datum/antagonist/renegade, new) initial_spawn_req = 1 initial_spawn_target = 3 antaghud_indicator = "hud_renegade" - skill_setter = /datum/antag_skill_setter/station + skill_setter = /datum/antag_skill_setter/station/renegade var/list/spawn_guns = list( /obj/item/gun/energy/retro, diff --git a/code/game/antagonist/station/revolutionary.dm b/code/game/antagonist/station/revolutionary.dm index ae296ded2c76d..c26b60cbd58b5 100644 --- a/code/game/antagonist/station/revolutionary.dm +++ b/code/game/antagonist/station/revolutionary.dm @@ -30,8 +30,7 @@ GLOBAL_DATUM_INIT(revs, /datum/antagonist/revolutionary, new) faction = "revolutionary" blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg) - restricted_jobs = list(/datum/job/captain, /datum/job/hop, /datum/job/hos, /datum/job/chief_engineer, /datum/job/rd, /datum/job/cmo, /datum/job/lawyer) - protected_jobs = list(/datum/job/officer, /datum/job/warden, /datum/job/detective) + restricted_jobs = list(/datum/job/captain, /datum/job/hop, /datum/job/hos, /datum/job/chief_engineer, /datum/job/rd, /datum/job/cmo, /datum/job/lawyer, /datum/job/officer, /datum/job/warden, /datum/job/detective) /datum/antagonist/revolutionary/create_global_objectives() diff --git a/code/game/antagonist/station/rogue_ai.dm b/code/game/antagonist/station/rogue_ai.dm index 8e62c18186384..5d5f008db4859 100644 --- a/code/game/antagonist/station/rogue_ai.dm +++ b/code/game/antagonist/station/rogue_ai.dm @@ -18,8 +18,8 @@ GLOBAL_DATUM_INIT(malf, /datum/antagonist/rogue_ai, new) min_player_age = 18 skill_setter = /datum/antag_skill_setter/ai -/datum/antagonist/rogue_ai/can_become_antag(datum/mind/player, ignore_role) - . = ..(player, ignore_role) +/datum/antagonist/rogue_ai/can_become_antag(datum/mind/player, ignore_role, forced) + . = ..() if(jobban_isbanned(player.current, "AI")) return 0 return . diff --git a/code/game/antagonist/station/thrall.dm b/code/game/antagonist/station/thrall.dm index 54c6573c1973a..5c5f0406765be 100644 --- a/code/game/antagonist/station/thrall.dm +++ b/code/game/antagonist/station/thrall.dm @@ -18,7 +18,7 @@ GLOBAL_DATUM_INIT(thralls, /datum/antagonist/thrall, new) obey.explanation_text = "Obey your master, [controller.real_name], in all things." player.objectives |= obey -/datum/antagonist/thrall/add_antagonist(datum/mind/player, ignore_role, do_not_equip, move_to_spawn, do_not_announce, preserve_appearance, mob/new_controller) +/datum/antagonist/thrall/add_antagonist(datum/mind/player, ignore_role, do_not_equip, move_to_spawn, do_not_announce, preserve_appearance, forced, mob/new_controller) if(!new_controller) return 0 . = ..() diff --git a/code/game/antagonist/station/traitor.dm b/code/game/antagonist/station/traitor.dm index 25ad7fed032d2..64dbf3fd2327d 100644 --- a/code/game/antagonist/station/traitor.dm +++ b/code/game/antagonist/station/traitor.dm @@ -5,7 +5,7 @@ GLOBAL_DATUM_INIT(traitors, /datum/antagonist/traitor, new) id = MODE_TRAITOR antaghud_indicator = "hud_traitor" blacklisted_jobs = list(/datum/job/ai, /datum/job/submap) - protected_jobs = list(/datum/job/officer, /datum/job/warden, /datum/job/detective, /datum/job/captain, /datum/job/lawyer, /datum/job/hos) + restricted_jobs = list(/datum/job/captain, /datum/job/lawyer, /datum/job/hos) flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE skill_setter = /datum/antag_skill_setter/station @@ -75,7 +75,7 @@ GLOBAL_DATUM_INIT(traitors, /datum/antagonist/traitor, new) if(istype(traitor_mob, /mob/living/silicon/robot)) var/mob/living/silicon/robot/R = traitor_mob R.SetLockdown(0) - R.emagged = TRUE // Provides a traitor robot with its module's emag item + R.emag_act() R.verbs |= /mob/living/silicon/robot/proc/ResetSecurityCodes R.status_flags &= ~CANWEAKEN // Apply optical matrix protection (Flash resistance) return 1 diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index d5e3d05c493bf..dd1a44785ed76 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -16,7 +16,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area /// Boolean. Whether or not the area has an active fire alarm. Do not modify directly; Use `./fire_alert()` and `./fire_reset()` instead. - var/fire = null + var/fire = FALSE /// Integer (`0`, `1`, or `2`). Whether or not the area has an active atmosphere alarm and the level of the atmosphere alarm. Do not modify directly; Use `./atmosalert()` instead. var/atmosalm = 0 /// Boolean. Whether or not the area is in 'party light' mode. Do not modify directly; Use `./partyalert()` or `./partyreset()` instead. @@ -79,6 +79,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station var/planetary_surface = FALSE /// Boolean. Some base_turfs might cause issues with changing turfs, this flags it as a special case. See `/proc/get_base_turf_by_area()`. var/base_turf_special_handling = FALSE + /// Boolean (Default `FALSE`) - If set, floor turfs in the area will be set to airless when they initialize. This is unset during `LateInitialize()` to avoid interfering with player-placed tiles. + var/turfs_airless = FALSE /*-----------------------------------------------------------------------------*/ @@ -99,6 +101,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station area_flags = AREA_FLAG_EXTERNAL | AREA_FLAG_IS_NOT_PERSISTENT ambience = list('sound/ambience/ambispace1.ogg','sound/ambience/ambispace2.ogg','sound/ambience/ambispace3.ogg','sound/ambience/ambispace4.ogg','sound/ambience/ambispace5.ogg') secure = FALSE + turfs_airless = TRUE /area/space/atmosalert() return @@ -265,7 +268,11 @@ NOTE: there are two lists of areas in the end of this file: centcom and station S.volume = 100 S.priority = 255 S.status = SOUND_UPDATE - process() + START_PROCESSING(SSbeach, src) + +/area/beach/Destroy() + STOP_PROCESSING(SSbeach, src) + . = ..() /area/beach/Entered(atom/movable/Obj,atom/OldLoc) . = ..() @@ -283,20 +290,21 @@ NOTE: there are two lists of areas in the end of this file: centcom and station mysound.status = SOUND_PAUSED | SOUND_UPDATE sound_to(M, mysound) -/area/beach/proc/process() - set background = 1 +/area/beach/Process() + if(!prob(25)) + return - var/sound/S = null - var/sound_delay = 0 - if(prob(25)) - S = sound(file=pick('sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag3.ogg'), volume=100) - sound_delay = rand(0, 50) + var/sound/seag_sound = sound(file=pick('sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag3.ogg'), volume=100) + mysound.status = SOUND_UPDATE - for(var/mob/living/carbon/human/H in src) - if(H.client) - mysound.status = SOUND_UPDATE - if(S) - spawn(sound_delay) - sound_to(H, S) + if(!seag_sound) + return + + for(var/mob/living/carbon/human/mob_to_send_sound in GLOB.player_list) + if(!mob_to_send_sound.client) + continue + + if(get_area(mob_to_send_sound) != src) + continue - spawn(60) .() + sound_to(mob_to_send_sound, seag_sound) diff --git a/code/game/area/area_access.dm b/code/game/area/area_access.dm index cad334e06033b..30db62a0af939 100644 --- a/code/game/area/area_access.dm +++ b/code/game/area/area_access.dm @@ -5,6 +5,7 @@ // Given two areas, find the minimal req_access needed such that (return value) + (area access) >= (other area access) and vice versa /proc/req_access_diff(area/first, area/second) + RETURN_TYPE(/list) if(!length(first.req_access)) return second.req_access.Copy() if(!length(second.req_access)) @@ -17,6 +18,7 @@ // Given two areas, find the minimal req_access needed such that req_access >= (area access) + (other area access) /proc/req_access_union(area/first, area/second) + RETURN_TYPE(/list) if(!length(first.req_access)) return second.req_access.Copy() if(!length(second.req_access)) @@ -28,6 +30,7 @@ // Comes up with the minimal thing to add to the first argument so that the new list guarantees that the access requirement in the second argument is satisfied. // Second argument is a number access code or list thereof (like an entry in req_access); the typecasting is false. /proc/get_minimal_requirement(list/req_access, list/requirement) + RETURN_TYPE(/list) if(!requirement) return if(!islist(requirement)) diff --git a/code/game/area/area_power.dm b/code/game/area/area_power.dm index b6687ff9f5c16..52d0a170268d6 100644 --- a/code/game/area/area_power.dm +++ b/code/game/area/area_power.dm @@ -3,6 +3,8 @@ #define LIGHT 2 #define ENVIRON 3 */ +/area + var/list/machinery_list /// Returns boolean. Whether or not the area is considered to have power for the given power channel. See `requires_power` and `always_unpowered` for some area-level overrides. /area/proc/powered(chan) @@ -24,11 +26,32 @@ /// Called whenever the area's power or power usage state should change. /area/proc/power_change() - for(var/obj/machinery/M in src) // for each machine in the area + for(var/obj/machinery/M as anything in machinery_list) // for each machine in the area M.power_change() // reverify power status (to update icons etc.) + SEND_SIGNAL(src, COMSIG_AREA_POWER_CHANGE) if (fire || eject || party) update_icon() +/// Sets the apc in area. Sends COMSIG_AREA_APC_ADDED signal +/area/proc/set_apc(obj/machinery/power/apc/new_apc) + if(!istype(new_apc)) + CRASH("Invalid apc passed [log_info_line(new_apc)]") + + if(apc) + stack_trace("Apc set in area when old one is still present") + remove_apc() + + apc = new_apc + SEND_SIGNAL(src, COMSIG_AREA_APC_ADDED, new_apc) + +/// Removes current apc from area, if present. Sends COMSIG_AREA_APC_REMOVED signal +/area/proc/remove_apc() + if(!apc) + return + + SEND_SIGNAL(src, COMSIG_AREA_APC_REMOVED, apc) + apc = null + /// Returns Integer. The total amount of power usage queued for the area from both `used_*` and `oneoff_*` for the given power channel, or all channels if `TOTAL` is passed instead. /area/proc/usage(chan) switch(chan) @@ -101,7 +124,7 @@ used_equip = 0 used_light = 0 used_environ = 0 - for(var/obj/machinery/M in src) + for(var/obj/machinery/M as anything in machinery_list) switch(M.power_channel) if(EQUIP) used_equip += M.get_power_usage() diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 4d2d5690ba254..99992a9a8e9da 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -3,17 +3,26 @@ /area /// Integer. Global counter for `uid` values assigned to areas. Increments by one for each new area. var/static/global_uid = 0 - /// Integer. The area's unique ID number. set to the value of `global_uid` + 1 when the area is created. var/uid - /// Bitflag (Any of `AREA_FLAG_*`). See `code\__defines\misc.dm`. var/area_flags - /// A lazy list of vent pumps currently in the area var/list/obj/machinery/atmospherics/unary/vent_pump/vent_pumps + /// Lazy list of all turfs in area. Updated when new turf created or removed from the area. + /// For faster lookup and cleanup, turfs are grouped by z level. + /// Looks like: z_level -> contained_turfs_list + var/list/turf/contained_turfs_by_z + /// Due to size of some area turfs lists, it's quite expensive to clean them up right away. + /// So we will do it in subsystem, or right away, if area turfs requested. + /// Has the same structure as `contained_turfs_by_z`. + var/list/turf/turfs_to_uncontain_by_z /area/New() + LAZYADD(GLOB.areas, src) + LAZYINITLIST(contained_turfs_by_z) + LAZYINITLIST(turfs_to_uncontain_by_z) + icon_state = "" uid = ++global_uid @@ -36,35 +45,20 @@ power_equip = 0 power_environ = 0 power_change() // all machines set to current power level, also updates lighting icon + if (turfs_airless) + return INITIALIZE_HINT_LATELOAD /area/Destroy() - ..() - return QDEL_HINT_HARDDEL - -// Changes the area of T to A. Do not do this manually. -// Area is expected to be a non-null instance. -/proc/ChangeArea(turf/T, 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 - A.contents.Add(T) - if(old_area) - old_area.Exited(T, A) - for(var/atom/movable/AM in T) - old_area.Exited(AM, A) // Note: this _will_ raise exited events. - A.Entered(T, old_area) - for(var/atom/movable/AM in T) - A.Entered(AM, old_area) // Note: this will _not_ raise moved or entered events. If you change this, you must also change everything which uses them. - - for(var/obj/machinery/M in T) - M.area_changed(old_area, A) // They usually get moved events, but this is the one way an area can change without triggering one. + LAZYREMOVE(GLOB.areas, src) + return ..() + +/area/LateInitialize(mapload) + turfs_airless = FALSE /// Returns list (`/obj/machinery/camera`). A list of all cameras in the area. /area/proc/get_cameras() var/list/cameras = list() - for (var/obj/machinery/camera/C in src) + for(var/obj/machinery/camera/C in machinery_list) cameras += C return cameras @@ -83,24 +77,28 @@ else GLOB.atmosphere_alarm.triggerAlarm(src, alarm_source, severity = danger_level) + var/list/area_alarms = list() //Check all the alarms before lowering atmosalm. Raising is perfectly fine. - for (var/obj/machinery/alarm/AA in src) + for(var/obj/machinery/alarm/AA in machinery_list) if (AA.operable() && !AA.shorted && AA.report_danger_level) danger_level = max(danger_level, AA.danger_level) - if(danger_level != atmosalm) - if (danger_level < 1 && atmosalm >= 1) - //closing the doors on red and opening on green provides a bit of hysteresis that will hopefully prevent fire doors from opening and closing repeatedly due to noise - air_doors_open() - else if (danger_level >= 2 && atmosalm < 2) - air_doors_close() + area_alarms += AA - atmosalm = danger_level - for (var/obj/machinery/alarm/AA in src) - AA.update_icon() + if(atmosalm == danger_level) + return FALSE - return 1 - return 0 + if (danger_level < 1 && atmosalm >= 1) + //closing the doors on red and opening on green provides a bit of hysteresis that will hopefully prevent fire doors from opening and closing repeatedly due to noise + air_doors_open() + else if (danger_level >= 2 && atmosalm < 2) + air_doors_close() + + atmosalm = danger_level + for (var/obj/machinery/alarm/AA as anything in area_alarms) + AA.update_icon() + + return TRUE /// Sets `air_doors_activated` and sets all firedoors in `all_doors` to the closed state. Does nothing if `air_doors_activated` is already set. /area/proc/air_doors_close() @@ -136,7 +134,7 @@ /// Sets a fire alarm in the area, if one is not already active. /area/proc/fire_alert() if(!fire) - fire = 1 //used for firedoor checks + fire = TRUE //used for firedoor checks update_icon() mouse_opacity = 0 if(!all_doors) @@ -152,7 +150,7 @@ /// Clears an active fire alarm from the area. /area/proc/fire_reset() if (fire) - fire = 0 //used for firedoor checks + fire = FALSE //used for firedoor checks update_icon() mouse_opacity = 0 if(!all_doors) @@ -171,14 +169,12 @@ if(!eject) eject = 1 update_icon() - return /// Clears an active evacuation alarm from the area. /area/proc/readyreset() if(eject) eject = 0 update_icon() - return /// Sets a party alarm in the area, if one is not already active. /area/proc/partyalert() @@ -186,7 +182,6 @@ party = 1 update_icon() mouse_opacity = 0 - return /// Clears an active party alarm from the area. /area/proc/partyreset() @@ -194,14 +189,13 @@ party = 0 mouse_opacity = 0 update_icon() - for(var/obj/machinery/door/firedoor/D in src) + for(var/obj/machinery/door/firedoor/D in all_doors) if(!D.blocked) if(D.operating) D.nextstate = FIREDOOR_OPEN else if(D.density) spawn(0) D.open() - return /area/on_update_icon() if ((fire || eject || party) && (!requires_power||power_environ))//If it doesn't require power, can still activate this proc. @@ -223,30 +217,30 @@ /area/proc/set_lightswitch(new_switch) if(lightswitch != new_switch) lightswitch = new_switch - for(var/obj/machinery/light_switch/L in src) + for(var/obj/machinery/light_switch/L in machinery_list) L.sync_state() update_icon() power_change() -/// Calls `set_emergency_lighting(enable)` on all `/obj/machinery/light` in src. +/// Calls `set_emergency_lighting(enable)` on all `/obj/machinery/light` in contained machinery. /area/proc/set_emergency_lighting(enable) - for(var/obj/machinery/light/M in src) + for(var/obj/machinery/light/M in machinery_list) M.set_emergency_lighting(enable) /area/Entered(A) ..() - if(!istype(A,/mob/living)) return + if(!isliving(A)) + return var/mob/living/L = A - if(!L.ckey) return if(!L.lastarea) L.lastarea = get_area(L.loc) var/area/newarea = get_area(L.loc) var/area/oldarea = L.lastarea if(oldarea.has_gravity != newarea.has_gravity) - if(newarea.has_gravity == 1 && !MOVING_DELIBERATELY(L)) // Being ready when you change areas allows you to avoid falling. + if(newarea.has_gravity == 1 && MOVING_QUICKLY(L)) // Being not hasty when you change areas allows you to avoid falling. thunk(L) L.update_floating() @@ -300,64 +294,88 @@ * **Parameters**: * - `gravitystate` Boolean, default `FALSE`. The new state to set `has_gravity` to. */ -/area/proc/gravitychange(gravitystate = 0) +/area/proc/gravitychange(gravitystate = FALSE) + if(has_gravity == gravitystate) + return + has_gravity = gravitystate + for(var/mob/target as anything in SSmobs.get_all_mobs()) + if(get_area(target) != src) + continue - for(var/mob/M in src) if(has_gravity) - thunk(M) - M.update_floating() + thunk(target) + + target.update_floating() /// Causes the provided mob to 'slam' down to the floor if certain conditions are not met. Primarily used for gravity changes. -/area/proc/thunk(mob/mob) - if(istype(get_turf(mob), /turf/space)) // Can't fall onto nothing. +/area/proc/thunk(mob/living/carbon/human/mob_to_thunk) + if(!istype(mob_to_thunk)) + return + + if(isspace(get_turf(mob_to_thunk))) // Can't fall onto nothing. + return + + if(mob_to_thunk.Check_Shoegrip()) return - if(mob.Check_Shoegrip()) + if(mob_to_thunk.buckled || !prob(mob_to_thunk.skill_fail_chance(SKILL_EVA, 100, SKILL_MASTER))) return - if(istype(mob,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = mob - if(!H.buckled && prob(H.skill_fail_chance(SKILL_EVA, 100, SKILL_PROF))) - if(!MOVING_DELIBERATELY(H)) - H.AdjustStunned(6) - H.AdjustWeakened(6) - else - H.AdjustStunned(3) - H.AdjustWeakened(3) - to_chat(mob, SPAN_NOTICE("The sudden appearance of gravity makes you fall to the floor!")) + if(!MOVING_DELIBERATELY(mob_to_thunk)) + mob_to_thunk.AdjustStunned(3) + mob_to_thunk.AdjustWeakened(3) + else + mob_to_thunk.AdjustStunned(1.5) + mob_to_thunk.AdjustWeakened(1.5) + + to_chat(mob_to_thunk, SPAN_NOTICE("The sudden appearance of gravity makes you fall to the floor!")) /// Trigger for the prison break event. Causes lighting to overload and dooes to open. Has no effect if the area lacks an APC or the APC is turned off. /area/proc/prison_break() var/obj/machinery/power/apc/theAPC = get_apc() if(theAPC && theAPC.operating) - for(var/obj/machinery/power/apc/temp_apc in src) + for(var/obj/machinery/power/apc/temp_apc in machinery_list) temp_apc.overload_lighting(70) - for(var/obj/machinery/door/airlock/temp_airlock in src) + + for(var/obj/machinery/door/airlock/temp_airlock in all_doors) temp_airlock.prison_open() - for(var/obj/machinery/door/window/temp_windoor in src) + + for(var/obj/machinery/door/window/temp_windoor in all_doors) temp_windoor.open() /// Returns boolean. Whether or not the area is considered to have gravity. -/area/proc/has_gravity() +/area/has_gravity() return has_gravity /area/space/has_gravity() return 0 -/proc/has_gravity(atom/AT, turf/T) - if(!T) - T = get_turf(AT) - var/area/A = get_area(T) +/atom/proc/has_gravity() + var/area/A = get_area(src) + if(A && A.has_gravity()) + return 1 + return 0 + +/mob/has_gravity() + if(!lastarea) + lastarea = get_area(src) + if(!lastarea || !lastarea.has_gravity()) + return 0 + return 1 + +/turf/has_gravity() + var/area/A = loc if(A && A.has_gravity()) return 1 return 0 /// Returns List (axis => Integer). The width and height, in tiles, of the area, indexed by axis. Axis is `"x"` or `"y"`. +/// The `z` of the lowest z-level area located at is used /area/proc/get_dimensions() var/list/res = list("x"=1,"y"=1) var/list/min = list("x"=world.maxx,"y"=world.maxy) - for(var/turf/T in src) + for(var/turf/T as anything in get_turfs_from_z(z)) res["x"] = max(T.x, res["x"]) res["y"] = max(T.y, res["y"]) min["x"] = min(T.x, min["x"]) @@ -368,10 +386,76 @@ /// Returns boolean. Whether or not there are any turfs (`/turf`) in src. /area/proc/has_turfs() - return !!(locate(/turf) in src) + for(var/z_level in contained_turfs_by_z) + var/list/turfs_to_uncontain = LAZYACCESS(turfs_to_uncontain_by_z, z_level) + if(!LAZYLEN(turfs_to_uncontain)) + return TRUE + + if((LAZYLEN(contained_turfs_by_z[z_level]) - LAZYLEN(turfs_to_uncontain)) > 0) + return TRUE + + return FALSE /// Returns boolean. Whether or not the area can be modified by player actions. /area/proc/can_modify_area() if (src && src.area_flags & AREA_FLAG_NO_MODIFY) return FALSE return TRUE + +/// Adds new turf to area turf cache +/area/proc/add_turf_to_cache(turf/turf_to_add) + if(!istype(turf_to_add)) + CRASH("Invalid turf `[log_info_line(turf_to_add)]` supplied to [log_info_line(src)]: ") + + LAZYADDASSOCLIST(contained_turfs_by_z, "[turf_to_add.z]", turf_to_add) + turf_to_add.added_to_area_cache = TRUE + +/// Removes turf from area turf cache +/area/proc/remove_turf_from_cache(turf/turf_to_remove) + if(!istype(turf_to_remove)) + CRASH("Invalid turf `[log_info_line(turf_to_remove)]` supplied to [log_info_line(src)]: ") + + if(!LAZYACCESS(contained_turfs_by_z, "[turf_to_remove.z]")) + return + + LAZYADDASSOCLIST(turfs_to_uncontain_by_z, "[turf_to_remove.z]", turf_to_remove) + +/// Returns all area turfs from specific z-level +/area/proc/get_turfs_from_z(z_level) + cannonize_cached_turfs_by_z(z_level) + return LAZYACCESS(contained_turfs_by_z, "[z_level]") + +/// Returs list of all turfs located at this area +/area/proc/get_turfs_from_all_z() + cannonize_cached_turfs_for_all_z() + + var/list/contained_turfs = list() + for(var/z_level in contained_turfs_by_z) + contained_turfs += contained_turfs_by_z[z_level] + + return contained_turfs + +/// Makes sure that turfs located at area are up to date for all z levels +/area/proc/cannonize_cached_turfs_for_all_z() + PRIVATE_PROC(TRUE) + + for(var/z_level in turfs_to_uncontain_by_z) + cannonize_cached_turfs_by_z(z_level) + +/// Makes sure that turfs located at area are up to date for specific z level +/// Returns FALSE if passed z_level doesn't require canonization, TRUE if cache is valid +/area/proc/cannonize_cached_turfs_by_z(z_level) + PRIVATE_PROC(TRUE) + + var/list/contained_turfs = LAZYACCESS(contained_turfs_by_z, "[z_level]") + if(!LAZYLEN(contained_turfs)) + LAZYREMOVE(turfs_to_uncontain_by_z, "[z_level]") + return + + var/list/turfs_to_uncontain = LAZYACCESS(turfs_to_uncontain_by_z, "[z_level]") + if(LAZYLEN(turfs_to_uncontain)) + contained_turfs -= turfs_to_uncontain + LAZYREMOVE(turfs_to_uncontain_by_z, "[z_level]") + + if(!LAZYLEN(contained_turfs)) + LAZYREMOVE(contained_turfs_by_z, "[z_level]") diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 2e462b701ec6f..7ed660203e4f3 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -30,33 +30,43 @@ /// Bitflag (Any of `INIT_*`). Flags for special/additional handling of the `Initialize()` chain. See `code\__defines\misc.dm`. var/init_flags = EMPTY_BITFIELD -/atom/New(loc, ...) - SHOULD_CALL_PARENT(TRUE) // Ensures atoms don't unintentionally skip initialization by not calling parent in New() + /// This atom's cache of non-protected overlays, used for normal icon additions. Do not manipulate directly- See SSoverlays. + var/list/atom_overlay_cache - //atom creation method that preloads variables at creation - if(GLOB.use_preloader && (src.type == GLOB._preloader.target_path))//in case the instanciated atom is creating other atoms in New() - GLOB._preloader.load(src) + /// This atom's cache of overlays that can only be removed explicitly, like C4. Do not manipulate directly- See SSoverlays. + var/list/atom_protected_overlay_cache + + /// Last name used to calculate a color for the chatmessage overlays + var/chat_color_name + /// Last color calculated for the the chatmessage overlays + var/chat_color + /// A luminescence-shifted value of the last color calculated for chatmessage overlays + var/chat_color_darkened + /// The chat color var, without alpha. + var/chat_color_hover - var/do_initialize = SSatoms.atom_init_stage - var/list/created = SSatoms.created_atoms - if(do_initialize > INITIALIZATION_INSSATOMS_LATE) - args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD - if(SSatoms.InitAtom(src, args)) - //we were deleted - return - else if(created) +/atom/New(loc, ...) + SHOULD_CALL_PARENT(TRUE) + if (GLOB.use_preloader && type == GLOB._preloader.target_path) + GLOB._preloader.load(src) + var/atom_init_stage = SSatoms.atom_init_stage + var/list/init_queue = SSatoms.init_queue + if (atom_init_stage > INITIALIZATION_INSSATOMS_LATE) + args[1] = atom_init_stage == INITIALIZATION_INNEW_MAPLOAD + if (SSatoms.InitAtom(src, args)) + return + else if (init_queue) var/list/argument_list - if(length(args) > 1) + if (length(args) > 1) argument_list = args.Copy(2) - if(argument_list || do_initialize == INITIALIZATION_INSSATOMS_LATE) - created[src] = argument_list - - if(atom_flags & ATOM_FLAG_CLIMBABLE) + if (argument_list || atom_init_stage == INITIALIZATION_INSSATOMS_LATE) + init_queue[src] = argument_list + if (atom_flags & ATOM_FLAG_CLIMBABLE) verbs += /atom/proc/climb_on - ..() + /** * Initialization handler for atoms. It is preferred to use this over `New()`. * @@ -78,37 +88,42 @@ crash_with("Warning: [src]([type]) initialized multiple times!") atom_flags |= ATOM_FLAG_INITIALIZED - if (IsAbstract()) + if(IsAbstract()) log_debug("Abstract atom [type] created!") return INITIALIZE_HINT_QDEL - if(light_max_bright && light_outer_range) + if(light_power && light_range) update_light() if(opacity) updateVisibility(src) var/turf/T = loc if(istype(T)) - T.RecalculateOpacity() + T.recalc_atom_opacity() - if (health_max) + if(health_max) health_current = health_max health_dead = FALSE return INITIALIZE_HINT_NORMAL /** - * Late initialization handler. Called after the `Initialize()` chain for any atoms that returned `INITIALIZE_HINT_LATELOAD`. Primarily used for atoms that rely on initialized values from other atoms. + * Late initialization handler. + * Called after the `Initialize()` chain for any atoms that returned `INITIALIZE_HINT_LATELOAD`. + * Primarily used for atoms that rely on initialized values from other atoms. * * **Parameters**: * - `mapload` - Whether or not the initialization was called while the map was being loaded. * - All parameters except `loc` are passed directly from `New()`. + * + * Has no return value. */ /atom/proc/LateInitialize(mapload, ...) return /atom/Destroy() QDEL_NULL(reagents) + QDEL_NULL(light) . = ..() /** @@ -240,7 +255,6 @@ /atom/proc/HasProximity(atom/movable/AM as mob|obj) return - /** * Called when the atom is affected by an EMP. * @@ -248,10 +262,12 @@ * - `severity` Integer. The strength of the EMP, ranging from 1 to 3. NOTE: Lower numbers are stronger. */ /atom/proc/emp_act(severity) + SHOULD_CALL_PARENT(TRUE) if (get_max_health()) // No hitsound here - Doesn't make sense for EMPs. // Generalized - 75-125 damage at max, 38-63 at medium, 25-42 at minimum severities. damage_health(rand(75, 125) / severity, DAMAGE_EMP, severity = severity) + GLOB.empd_event.raise_event(src, severity) /** @@ -291,7 +307,7 @@ damage = P.get_structure_damage() if (!can_damage_health(damage, P.damage_type, P.damage_flags)) return - playsound(src, damage_hitsound, 75) + playsound(src, use_weapon_hitsound ? P.hitsound : damage_hitsound, 75) damage_health(damage, P.damage_type, P.damage_flags, skip_can_damage_check = TRUE) /** @@ -360,26 +376,36 @@ * **Parameters**: * - `user` - The mob performing the examine. * - `distance` - The distance in tiles from `user` to `src`. + * - `is_adjacent` - Whether `user` is adjacent to `src`. * - `infix` String - String that is appended immediately after the atom's name. * - `suffix` String - Additional string appended after the atom's name and infix. * - * Returns boolean. + * Returns boolean - The caller always expects TRUE + * This is used rather than SHOULD_CALL_PARENT as it enforces that subtypes of a type that explicitly returns still call parent */ -/atom/proc/examine(mob/user, distance, infix = "", suffix = "") +/atom/proc/examine(mob/user, distance, is_adjacent, infix = "", suffix = "") + . = list() //This reformat names to get a/an properly working on item descriptions when they are bloody var/f_name = "\a [src][infix]." - if(blood_color && !istype(src, /obj/effect/decal)) + if(blood_color && !istype(src, /obj/decal)) if(gender == PLURAL) f_name = "some " else f_name = "a " f_name += "[SPAN_COLOR(blood_color, "stained")] [name][infix]!" - to_chat(user, "[icon2html(src, user)] That's [f_name] [suffix]") - to_chat(user, desc) - if (get_max_health()) + . += "[icon2html(src, user)] That's [f_name] [suffix]" + if(desc) + . += desc + + if(get_max_health()) examine_damage_state(user) - return TRUE + if(IsFlameSource()) + . += SPAN_DANGER("It has an open flame.") + else if(distance <= 1 && IsHeatSource()) + . += SPAN_WARNING("It's hot to the touch.") + + SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE, user, .) /** * Called when a mob with this atom as their machine, pulledby, loc, buckled, or other relevant var atom attempts to move. @@ -402,6 +428,18 @@ return FALSE dir = new_dir GLOB.dir_set_event.raise_event(src, old_dir, dir) + + //Lighting + if(light_source_solo) + if(light_source_solo.light_angle) + light_source_solo.source_atom.update_light() + else if(light_source_multi) + var/datum/light_source/L + for(var/thing in light_source_multi) + L = thing + if(L.light_angle) + L.source_atom.update_light() + return TRUE /** @@ -430,6 +468,7 @@ return on_update_icon(arglist(args)) + /** * Handler for updating the atom's icon and overlay states. Generally, all changes to `overlays`, `underlays`, `icon`, * `icon_state`, `item_state`, etc should be contained in here. @@ -439,6 +478,7 @@ /atom/proc/on_update_icon() return + /** * Called when an explosion affects the atom. * @@ -512,7 +552,7 @@ return FALSE if (get_max_health()) fire_act(air, temperature) - if (!health_dead) + if (!health_dead()) return FALSE visible_message(SPAN_DANGER("\The [src] sizzles and melts away, consumed by the lava!")) playsound(src, 'sound/effects/flare.ogg', 100, 3) @@ -535,10 +575,14 @@ var/damage = 0 var/damage_type = DAMAGE_BRUTE var/damage_flags = EMPTY_BITFIELD + var/damage_hitsound = src.damage_hitsound if (isobj(AM)) var/obj/O = AM damage = O.throwforce damage_type = O.damtype + if (use_weapon_hitsound && isitem(O)) + var/obj/item/I = O + damage_hitsound = I.hitsound else if (ismob(AM)) var/mob/M = AM damage = M.mob_size @@ -577,7 +621,7 @@ . = 1 return 1 -/mob/living/proc/handle_additional_vomit_reagents(obj/effect/decal/cleanable/vomit/vomit) +/mob/living/proc/handle_additional_vomit_reagents(obj/decal/cleanable/vomit/vomit) vomit.reagents.add_reagent(/datum/reagent/acid/stomach, 5) /** @@ -702,7 +746,7 @@ * - `exclude_objs` - List of objects to not display the message to. * - `exclude_mobs` - List of mobs to not display the message to. */ -/atom/proc/audible_message(message, deaf_message, hearing_distance = world.view, checkghosts = null, list/exclude_objs = null, list/exclude_mobs = null) +/atom/proc/audible_message(message, deaf_message, hearing_distance = world.view, checkghosts = null, list/exclude_objs = null, list/exclude_mobs = null, runemessage = -1) var/turf/T = get_turf(src) var/list/mobs = list() var/list/objs = list() @@ -714,6 +758,8 @@ exclude_mobs -= M continue M.show_message(message,2,deaf_message,1) + if(runemessage != -1) + M.create_chat_message(src, "[runemessage]", FALSE, list("emote")) for(var/o in objs) var/obj/O = o @@ -948,6 +994,7 @@ var/mob/living/H = user if(istype(H) && can_climb(H) && target == user) do_climb(target) + return TRUE else return ..() @@ -981,3 +1028,26 @@ L.Weaken(2) L.visible_message(SPAN_WARNING("\The [L] [pick("ran", "slammed")] into \the [src]!")) playsound(L, "punch", 25, 1, FALSE) + + +/atom/proc/create_bullethole(obj/item/projectile/Proj) + var/p_x = Proj.p_x + rand(-8, 8) + var/p_y = Proj.p_y + rand(-8, 8) + var/obj/overlay/bmark/bullet_mark = new(src) + + bullet_mark.pixel_x = p_x + bullet_mark.pixel_y = p_y + + // offset correction + bullet_mark.pixel_x-- + bullet_mark.pixel_y-- + + if(Proj.damage >= 50) + bullet_mark.icon_state = "scorch" + bullet_mark.set_dir(pick(NORTH,SOUTH,EAST,WEST)) // random scorch design + else + bullet_mark.icon_state = "light_scorch" + +/atom/proc/clear_bulletholes() + for(var/obj/overlay/bmark/bullet_mark in src) + qdel(bullet_mark) diff --git a/code/game/atoms_fluids.dm b/code/game/atoms_fluids.dm index 9454f77396b39..73c6795563c10 100644 --- a/code/game/atoms_fluids.dm +++ b/code/game/atoms_fluids.dm @@ -14,7 +14,7 @@ * Retrieves the atom's fluid effect, if present. Generally, this only returns a value for turfs, and for said turfs, * the fluid effect present in the turf's contents. * - * Returns instance of `/obj/effect/fluid`. + * Returns instance of `/obj/fluid`. */ /atom/proc/return_fluid() return null diff --git a/code/game/atoms_health.dm b/code/game/atoms_health.dm index 355e26b0843a4..c9fb71b4242b9 100644 --- a/code/game/atoms_health.dm +++ b/code/game/atoms_health.dm @@ -22,6 +22,9 @@ /// Sound effect played when hit /atom/var/damage_hitsound = 'sound/weapons/genhit.ogg' +/// Boolean. If set, uses the item's hit sound file instead of the source atom's when attacked. +/atom/var/use_weapon_hitsound = FALSE + /** * Retrieves the atom's current health, or `null` if not using health */ @@ -42,6 +45,14 @@ /atom/proc/health_damaged() return get_current_health() < get_max_health() + +/** + * Whether or not the atom is currently dead. + */ +/atom/proc/health_dead() + return health_dead + + /** * Retrieves the atom's current damage, or `null` if not using health. */ @@ -77,8 +88,6 @@ SHOULD_CALL_PARENT(TRUE) if (!get_max_health()) return FALSE - if (health_dead) - return FALSE if (!damage || damage < health_min_damage) return FALSE if (is_damage_immune(damage_type)) @@ -237,39 +246,42 @@ * Overrideable to allow for different messages, or restricting when the messages can or cannot appear. */ /atom/proc/examine_damage_state(mob/user) - if (health_dead) - to_chat(user, SPAN_DANGER("It looks broken.")) + . = list() + if(health_dead()) + . += SPAN_DANGER("[p_they()] looks broken.") return - var/damage_percentage = get_damage_percentage() - switch (damage_percentage) - if (0) - to_chat(user, SPAN_NOTICE("It looks fully intact.")) - if (1 to 32) - to_chat(user, SPAN_WARNING("It looks slightly damaged.")) - if (33 to 65) - to_chat(user, SPAN_WARNING("It looks moderately damaged.")) + switch(damage_percentage) + if(0) + . += SPAN_NOTICE("[p_they()] looks fully intact.") + if(1 to 32) + . += SPAN_WARNING("[p_they()] looks slightly damaged.") + if(33 to 65) + . += SPAN_WARNING("[p_they()] looks moderately damaged.") else - to_chat(user, SPAN_DANGER("It looks severely damaged.")) + . += SPAN_DANGER("[p_they()] looks severely damaged.") /mob/examine_damage_state(mob/user) - if (health_dead) - to_chat(user, SPAN_DANGER("They look severely hurt and are not moving or responding to anything around them.")) + . = list() + if (health_dead()) + . += SPAN_DANGER("[p_they()] looks severely hurt and [p_are()] not moving or responding to anything around [p_them()].") return var/damage_percentage = get_damage_percentage() switch (damage_percentage) if (0) - to_chat(user, SPAN_NOTICE("They appear unhurt.")) + . += SPAN_NOTICE("[p_they()] appears unhurt.") if (1 to 32) - to_chat(user, SPAN_WARNING("They look slightly hurt.")) + . += SPAN_WARNING("[p_they()] looks slightly hurt.") if (33 to 65) - to_chat(user, SPAN_WARNING("They look moderately hurt.")) + . += SPAN_WARNING("[p_they()] looks moderately hurt.") else - to_chat(user, SPAN_DANGER("They look severely hurt.")) + . += SPAN_DANGER("[p_they()] looks severely hurt.") /** * Copies the state of health from one atom to another. + * + * Does not support mobs that don't use standardized health. */ /proc/copy_health(atom/source_atom, atom/target_atom) if (!source_atom || QDELETED(target_atom) || !source_atom.health_max || !target_atom.health_max) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 162aae6762bf7..198ec71f309d5 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -1,7 +1,7 @@ /atom/movable layer = OBJ_LAYER - glide_size = 6 + glide_size = 4 animate_movement = SLIDE_STEPS @@ -28,11 +28,112 @@ /// The icon height this movable expects to have by default. var/icon_height = 32 + /// Either [EMISSIVE_BLOCK_NONE], [EMISSIVE_BLOCK_GENERIC], or [EMISSIVE_BLOCK_UNIQUE] + var/blocks_emissive = EMISSIVE_BLOCK_NONE + ///Internal holder for emissive blocker object, DO NOT USE DIRECTLY. Use blocks_emissive + var/mutable_appearance/em_block + + var/inertia_dir = 0 + var/atom/inertia_last_loc + var/inertia_moving = 0 + var/inertia_next_move = 0 + var/inertia_move_delay = 5 + var/atom/movable/inertia_ignore + +//call this proc to start space drifting +/atom/movable/proc/space_drift(direction)//move this down + if(!loc || direction & (UP|DOWN) || Process_Spacemove(0)) + inertia_dir = 0 + inertia_ignore = null + return 0 + + inertia_dir = direction + if(!direction) + return 1 + inertia_last_loc = loc + SSspacedrift.processing[src] = src + return 1 + +//return 0 to space drift, 1 to stop, -1 for mobs to handle space slips +/atom/movable/proc/Process_Spacemove(allow_movement) + if(!simulated) + return 1 + + if(has_gravity()) + return 1 + + if(pulledby) + return 1 + + if(throwing) + return 1 + + if(anchored) + return 1 + + if(!isturf(loc)) + return 1 + + if(locate(/obj/structure/lattice) in range(1, get_turf(src))) //Not realistic but makes pushing things in space easier + return -1 + + return 0 + +/atom/movable/hitby(atom/movable/AM, datum/thrownthing/TT) + . = ..() + process_momentum(AM,TT) + +/atom/movable/proc/process_momentum(atom/movable/AM, datum/thrownthing/TT)//physic isn't an exact science + . = momentum_power(AM,TT) + + if(.) + momentum_do(.,TT,AM) + +/atom/movable/proc/momentum_power(atom/movable/AM, datum/thrownthing/TT) + if(anchored) + return 0 + + . = (AM.get_mass()*TT.speed)/(get_mass()*min(AM.throw_speed,2)) + if(has_gravity()) + . *= 0.5 + +/atom/movable/proc/momentum_do(power, datum/thrownthing/TT) + var/direction = TT.init_dir + switch(power) + if(0.75 to INFINITY) //blown backward, also calls being pinned to walls + throw_at(get_edge_target_turf(src, direction), min((TT.maxrange - TT.dist_travelled) * power, 10), throw_speed * min(power, 1.5)) + + if(0.5 to 0.75) //knocks them back and changes their direction + step(src, direction) + + if(0.25 to 0.5) //glancing change in direction + var/drift_dir + if(direction & (NORTH|SOUTH)) + if(inertia_dir & (NORTH|SOUTH)) + drift_dir |= (direction & (NORTH|SOUTH)) & (inertia_dir & (NORTH|SOUTH)) + else + drift_dir |= direction & (NORTH|SOUTH) + else + drift_dir |= inertia_dir & (NORTH|SOUTH) + if(direction & (EAST|WEST)) + if(inertia_dir & (EAST|WEST)) + drift_dir |= (direction & (EAST|WEST)) & (inertia_dir & (EAST|WEST)) + else + drift_dir |= direction & (EAST|WEST) + else + drift_dir |= inertia_dir & (EAST|WEST) + space_drift(drift_dir) + +/atom/movable/proc/get_mass() + return 1.5 + /atom/movable/Initialize() - if (!isnull(config.glide_size)) - glide_size = config.glide_size . = ..() + update_emissive_blocker() + if (em_block) + AddOverlays(em_block) + /atom/movable/Destroy() if(!(atom_flags & ATOM_FLAG_INITIALIZED)) @@ -45,22 +146,29 @@ if (pulledby.pulling == src) pulledby.pulling = null pulledby = null - if(LAZYLEN(movement_handlers) && !ispath(movement_handlers[1])) + if (LAZYLEN(movement_handlers) && !ispath(movement_handlers[1])) QDEL_NULL_LIST(movement_handlers) if (bound_overlay) QDEL_NULL(bound_overlay) - if(virtual_mob && !ispath(virtual_mob)) + if (virtual_mob && !ispath(virtual_mob)) qdel(virtual_mob) virtual_mob = null + if (em_block) + QDEL_NULL(em_block) + if (particles) + particles = null return ..() /atom/movable/Bump(atom/A, yes) if(!QDELETED(throwing)) throwing.hit_atom(A) + if(inertia_dir) + inertia_dir = 0 + if (A && yes) A.last_bumped = world.time - invoke_async(A, /atom/proc/Bumped, src) // Avoids bad actors sleeping or unexpected side effects, as the legacy behavior was to spawn here + invoke_async(A, TYPE_PROC_REF(/atom, Bumped), src) // Avoids bad actors sleeping or unexpected side effects, as the legacy behavior was to spawn here ..() /atom/movable/proc/forceMove(atom/destination) @@ -100,6 +208,7 @@ var/old_loc = loc . = ..() if (.) + SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, old_loc, TRUE) // observ if(!loc) GLOB.moved_event.raise_event(src, old_loc, null) @@ -109,31 +218,57 @@ updateVisibility(src) // lighting - if (light_sources) // Yes, I know you can for-null safely, but this is slightly faster. Hell knows why. - for (var/datum/light_source/L in light_sources) + if (light_source_solo) + light_source_solo.source_atom.update_light() + else if (light_source_multi) + var/datum/light_source/L + var/thing + for (thing in light_source_multi) + L = thing L.source_atom.update_light() /atom/movable/Move(...) var/old_loc = loc . = ..() - if (.) - if(!loc) - GLOB.moved_event.raise_event(src, old_loc, null) - - // freelook - if(opacity) - updateVisibility(src) - - // lighting - if (light_sources) // Yes, I know you can for-null safely, this is slightly faster. Hell knows why. - for (var/datum/light_source/L in light_sources) - L.source_atom.update_light() + if (!.) + return + SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, old_loc) + if(!loc) + GLOB.moved_event.raise_event(src, old_loc, null) + + // freelook + if(opacity) + updateVisibility(src) + + // lighting + if (light_source_solo) + light_source_solo.source_atom.update_light() + else if (light_source_multi) + var/datum/light_source/L + var/thing + for (thing in light_source_multi) + L = thing + L.source_atom.update_light() //called when src is thrown into hit_atom /atom/movable/proc/throw_impact(atom/hit_atom, datum/thrownthing/TT) if(istype(hit_atom,/mob/living)) var/mob/living/M = hit_atom M.hitby(src,TT) + var/obj/item/rig/rig = get_rig() + var/mob/living/carbon/human/lunger = src + var/mob/living/carbon/human/victim = M + if (istype(lunger) && istype(victim) && istype(rig)) ///Post-collision combat grab check. Independent of jumping. + for (var/obj/item/rig_module/actuators/R in rig.installed_modules) + if (R.active && R.combatType) + visible_message( + SPAN_WARNING("\The [lunger] latches onto \the [victim]!"), + SPAN_WARNING("You latch onto \the [victim] at the end of your lunge!") + ) + lunger.species.attempt_grab(lunger, victim) + if(istype(lunger.get_active_hand(), /obj/item/grab/normal)) + var/obj/item/grab/normal/G = lunger.get_active_hand() + G.upgrade() else if(isobj(hit_atom)) var/obj/O = hit_atom @@ -162,14 +297,40 @@ SSthrowing.processing[src] = TT + +/atom/movable/proc/update_emissive_blocker() + switch (blocks_emissive) + if (EMISSIVE_BLOCK_GENERIC) + em_block = fast_emissive_blocker(src) + if (EMISSIVE_BLOCK_UNIQUE) + if (!em_block && !QDELING(src)) + appearance_flags |= KEEP_TOGETHER + render_target = ref(src) + em_block = emissive_blocker( + icon = icon, + appearance_flags = appearance_flags, + source = render_target + ) + return em_block + + +/atom/movable/update_icon() + ..() + if (em_block) + CutOverlays(em_block) + update_emissive_blocker() + if (em_block) + AddOverlays(em_block) + + //Overlays -/atom/movable/overlay +/atom/movable/fake_overlay var/atom/master = null - var/follow_proc = /atom/movable/proc/move_to_loc_or_null + var/follow_proc = TYPE_PROC_REF(/atom/movable, move_to_loc_or_null) anchored = TRUE simulated = FALSE -/atom/movable/overlay/Initialize() +/atom/movable/fake_overlay/Initialize() if(!loc) crash_with("[type] created in nullspace.") return INITIALIZE_HINT_QDEL @@ -181,15 +342,15 @@ GLOB.moved_event.register(master, src, follow_proc) SetInitLoc() - GLOB.destroyed_event.register(master, src, /datum/proc/qdel_self) - GLOB.dir_set_event.register(master, src, /atom/proc/recursive_dir_set) + GLOB.destroyed_event.register(master, src, TYPE_PROC_REF(/datum, qdel_self)) + GLOB.dir_set_event.register(master, src, TYPE_PROC_REF(/atom, recursive_dir_set)) . = ..() -/atom/movable/overlay/proc/SetInitLoc() +/atom/movable/fake_overlay/proc/SetInitLoc() forceMove(master.loc) -/atom/movable/overlay/Destroy() +/atom/movable/fake_overlay/Destroy() if(istype(master, /atom/movable)) GLOB.moved_event.unregister(master, src) GLOB.destroyed_event.unregister(master, src) @@ -197,28 +358,28 @@ master = null . = ..() -/atom/movable/overlay/use_grab(obj/item/grab/grab, list/click_params) +/atom/movable/fake_overlay/use_grab(obj/item/grab/grab, list/click_params) if (master) return master.use_grab(grab, click_params) return FALSE -/atom/movable/overlay/use_weapon(obj/item/weapon, mob/user, list/click_params) +/atom/movable/fake_overlay/use_weapon(obj/item/weapon, mob/user, list/click_params) SHOULD_CALL_PARENT(FALSE) if (master) return master.use_weapon(weapon, user, click_params) return FALSE -/atom/movable/overlay/use_tool(obj/item/tool, mob/user, list/click_params) +/atom/movable/fake_overlay/use_tool(obj/item/tool, mob/user, list/click_params) SHOULD_CALL_PARENT(FALSE) if (master) return master.use_tool(tool, user, click_params) return FALSE -/atom/movable/overlay/attackby(obj/item/I, mob/user) - if (master) - return master.attackby(I, user) +/atom/movable/fake_overlay/attackby(obj/item/I, mob/user) + if(master) + return I.resolve_attackby(master, user) -/atom/movable/overlay/attack_hand(mob/user) +/atom/movable/fake_overlay/attack_hand(mob/user) if (master) return master.attack_hand(user) diff --git a/code/game/atoms_temperature.dm b/code/game/atoms_temperature.dm index e10c6d8844393..1efd6ab0284f5 100644 --- a/code/game/atoms_temperature.dm +++ b/code/game/atoms_temperature.dm @@ -19,6 +19,8 @@ /obj/Initialize() . = ..() temperature_coefficient = isnull(temperature_coefficient) ? clamp(MAX_TEMPERATURE_COEFFICIENT - w_class, MIN_TEMPERATURE_COEFFICIENT, MAX_TEMPERATURE_COEFFICIENT) : temperature_coefficient + if(HAS_FLAGS(obj_flags, OBJ_FLAG_ANCHORABLE)) + RegisterSignal(src, COMSIG_ATOM_TOOL_ACT_RESULT(TOOL_WRENCH), PROC_REF(wrench_floor_bolts)) /obj/proc/HandleObjectHeating(obj/item/heated_by, mob/user, adjust_temp) if(ATOM_IS_TEMPERATURE_SENSITIVE(src)) @@ -30,7 +32,7 @@ /mob/Initialize() . = ..() - temperature_coefficient = isnull(temperature_coefficient) ? clamp(MAX_TEMPERATURE_COEFFICIENT - Floor(mob_size/4), MIN_TEMPERATURE_COEFFICIENT, MAX_TEMPERATURE_COEFFICIENT) : temperature_coefficient + temperature_coefficient = isnull(temperature_coefficient) ? clamp(MAX_TEMPERATURE_COEFFICIENT - floor(mob_size/4), MIN_TEMPERATURE_COEFFICIENT, MAX_TEMPERATURE_COEFFICIENT) : temperature_coefficient /** * Temperature subsystem process. diff --git a/code/game/atoms_tool_acts.dm b/code/game/atoms_tool_acts.dm new file mode 100644 index 0000000000000..36f90e60e5468 --- /dev/null +++ b/code/game/atoms_tool_acts.dm @@ -0,0 +1,176 @@ +/** + * ## Item interaction + * + * Handles non-combat iteractions of a tool on this atom, + * such as using a tool on a wall to deconstruct it, + * or scanning someone with a health analyzer + * + * This can be overridden to add custom item interactions to this atom + * + * Do not call this directly + */ +/atom/proc/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + SHOULD_CALL_PARENT(TRUE) + PROTECTED_PROC(TRUE) + + var/is_left_clicking = !is_right_clicking + var/early_sig_return = NONE + if(is_left_clicking) + early_sig_return = SEND_SIGNAL(src, COMSIG_ATOM_ITEM_INTERACTION, user, tool, modifiers) \ + | SEND_SIGNAL(tool, COMSIG_ITEM_INTERACTING_WITH_ATOM, user, src, modifiers) + else + early_sig_return = SEND_SIGNAL(src, COMSIG_ATOM_ITEM_INTERACTION_SECONDARY, user, tool, modifiers) \ + | SEND_SIGNAL(tool, COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY, user, src, modifiers) + if(early_sig_return) + return early_sig_return + + var/interact_return = is_left_clicking \ + ? tool.interact_with_atom(src, user) \ + : tool.interact_with_atom_secondary(src, user) + if(interact_return) + return interact_return + + var/tool_type = tool.tool_behaviour + if(!tool_type) // here on only deals with ... tools + return NONE + + var/signal_result = is_left_clicking \ + ? SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT(tool_type), user, tool) \ + : SEND_SIGNAL(src, COMSIG_ATOM_SECONDARY_TOOL_ACT(tool_type), user, tool) + if(signal_result) + return signal_result + + if(QDELETED(tool)) + return ITEM_INTERACT_SUCCESS // Safe-ish to assume that if we deleted our item something succeeded + + var/act_result = NONE // or FALSE, or null, as some things may return + + switch(tool_type) + if(TOOL_CROWBAR) + act_result = is_left_clicking ? crowbar_act(user, tool) : crowbar_act_secondary(user, tool) + if(TOOL_MULTITOOL) + act_result = is_left_clicking ? multitool_act(user, tool) : multitool_act_secondary(user, tool) + if(TOOL_SCREWDRIVER) + act_result = is_left_clicking ? screwdriver_act(user, tool) : screwdriver_act_secondary(user, tool) + if(TOOL_WRENCH) + act_result = is_left_clicking ? wrench_act(user, tool) : wrench_act_secondary(user, tool) + if(TOOL_WIRECUTTER) + act_result = is_left_clicking ? wirecutter_act(user, tool) : wirecutter_act_secondary(user, tool) + if(TOOL_WELDER) + act_result = is_left_clicking ? welder_act(user, tool) : welder_act_secondary(user, tool) + if(TOOL_ANALYZER) + act_result = is_left_clicking ? analyzer_act(user, tool) : analyzer_act_secondary(user, tool) + + if(!act_result) + var/signal_post_act = SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT_EMPTY, user, tool) + if(signal_post_act) + return signal_post_act + + SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT_RESULT(tool_type), user, tool, act_result) + + if(!act_result) + return NONE + + // A tooltype_act has completed successfully + + if(is_left_clicking) + log_tool("[key_name(user)] used [tool] on [src] at [x], [y], [z]") + SEND_SIGNAL(tool, COMSIG_TOOL_ATOM_ACTED_PRIMARY(tool_type), src) + else + log_tool("[key_name(user)] used [tool] on [src] (right click) at [x], [y], [z]") + SEND_SIGNAL(tool, COMSIG_TOOL_ATOM_ACTED_SECONDARY(tool_type), src) + return act_result + +/** + * Called when this item is being used to interact with an atom, + * IE, a mob is clicking on an atom with this item. + * + * Return an ITEM_INTERACT_ flag in the event the interaction was handled, to cancel further interaction code. + * Return NONE to allow default interaction / tool handling. + */ +/obj/item/proc/interact_with_atom(atom/interacting_with, mob/living/user) + return NONE + +/** + * Called when this item is being used to interact with an atom WITH RIGHT CLICK, + * IE, a mob is right clicking on an atom with this item. + * + * Default behavior has it run the same code as left click. + * + * Return an ITEM_INTERACT_ flag in the event the interaction was handled, to cancel further interaction code. + * Return NONE to allow default interaction / tool handling. + */ +/obj/item/proc/interact_with_atom_secondary(atom/interacting_with, mob/living/user) + return interact_with_atom(interacting_with, user) + +/* + * Tool-specific behavior procs. + * + * Return an ITEM_INTERACT_ flag to handle the event, or NONE to allow the mob to attack the atom. + * Returning TRUE will also cancel attacks. It is equivalent to an ITEM_INTERACT_ flag. (This is legacy behavior, and is not to be relied on) + * Returning FALSE or null will also allow the mob to attack the atom. (This is also legacy behavior) + */ + +/// Called on an object when a tool with crowbar capabilities is used to left click an object +/atom/proc/crowbar_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with crowbar capabilities is used to right click an object +/atom/proc/crowbar_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with multitool capabilities is used to left click an object +/atom/proc/multitool_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with multitool capabilities is used to right click an object +/atom/proc/multitool_act_secondary(mob/living/user, obj/item/tool) + return + +///Check if an item supports a data buffer (is a multitool) +/atom/proc/multitool_check_buffer(user, obj/item/device/multitool, silent = FALSE) + if(!istype(multitool, /obj/item/device/multitool)) + if(user && !silent) + to_chat(user, SPAN_WARNING("[multitool] has no data buffer!")) + return FALSE + return TRUE + +/// Called on an object when a tool with screwdriver capabilities is used to left click an object +/atom/proc/screwdriver_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with screwdriver capabilities is used to right click an object +/atom/proc/screwdriver_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wrench capabilities is used to left click an object +/atom/proc/wrench_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wrench capabilities is used to right click an object +/atom/proc/wrench_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wirecutter capabilities is used to left click an object +/atom/proc/wirecutter_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wirecutter capabilities is used to right click an object +/atom/proc/wirecutter_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with welder capabilities is used to left click an object +/atom/proc/welder_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with welder capabilities is used to right click an object +/atom/proc/welder_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with analyzer capabilities is used to left click an object +/atom/proc/analyzer_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with analyzer capabilities is used to right click an object +/atom/proc/analyzer_act_secondary(mob/living/user, obj/item/tool) + return diff --git a/code/game/base_turf.dm b/code/game/base_turf.dm index 2b24756b66fec..a72a74e595551 100644 --- a/code/game/base_turf.dm +++ b/code/game/base_turf.dm @@ -20,7 +20,8 @@ set name = "Set Base Turf" set desc = "Set the base turf for a z-level." - if(!check_rights(R_DEBUG)) return + if(!check_rights(R_DEBUG)) + return var/choice = input("Which Z-level do you wish to set the base turf for?") as num|null if(!choice) diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 44b2b1cf962e6..8d4c783f0729c 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -30,7 +30,7 @@ if(!H.should_have_organ(BP_HEART)) return M.dna.check_integrity() - var/block = pick(GLOB.HULKBLOCK,GLOB.XRAYBLOCK,GLOB.FIREBLOCK,GLOB.TELEBLOCK,GLOB.NOBREATHBLOCK,GLOB.REMOTEVIEWBLOCK,GLOB.REGENERATEBLOCK,GLOB.INCREASERUNBLOCK,GLOB.REMOTETALKBLOCK,GLOB.MORPHBLOCK,GLOB.BLENDBLOCK,GLOB.NOPRINTSBLOCK,GLOB.SHOCKIMMUNITYBLOCK,GLOB.SMALLSIZEBLOCK) + var/block = pick(GLOB.FERALBLOCK,GLOB.XRAYBLOCK,GLOB.FIREBLOCK,GLOB.TELEBLOCK,GLOB.NOBREATHBLOCK,GLOB.REMOTEVIEWBLOCK,GLOB.REGENERATEBLOCK,GLOB.INCREASERUNBLOCK,GLOB.REMOTETALKBLOCK,GLOB.MORPHBLOCK,GLOB.BLENDBLOCK,GLOB.NOPRINTSBLOCK,GLOB.SHOCKIMMUNITYBLOCK,GLOB.SMALLSIZEBLOCK) M.dna.SetSEState(block, 1) // Random Appearance Mutation diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm index 4cab851865c35..279fe21b99abc 100644 --- a/code/game/dna/genes/powers.dm +++ b/code/game/dna/genes/powers.dm @@ -6,6 +6,13 @@ /datum/dna/gene/basic/nobreath/New() block = GLOB.NOBREATHBLOCK +/datum/dna/gene/basic/feral + name = "Feral" + activation_messages = list("You feel feral.") + mutation = MUTATION_FERAL + +/datum/dna/gene/basic/feral/New() + block = GLOB.FERALBLOCK /datum/dna/gene/basic/remoteview name = "Remote Viewing" @@ -122,12 +129,6 @@ block = GLOB.SMALLSIZEBLOCK -/datum/dna/gene/basic/midget/can_activate(mob/M,flags) - if(MUTATION_HULK in M.mutations) - return FALSE - return ..(M,flags) - - /datum/dna/gene/basic/midget/activate(mob/M, connected, flags) ..(M,connected, flags) M.pass_flags |= PASS_FLAG_TABLE @@ -138,38 +139,6 @@ M.pass_flags &= ~PASS_FLAG_TABLE -/datum/dna/gene/basic/hulk - name = "Hulk" - activation_messages = list("Your muscles hurt.") - mutation = MUTATION_HULK - - -/datum/dna/gene/basic/hulk/New() - block = GLOB.HULKBLOCK - - -/datum/dna/gene/basic/hulk/can_activate(mob/M, flags) - if (mSmallsize in M.mutations) - return FALSE - return ..(M, flags) - - -/datum/dna/gene/basic/hulk/OnDrawUnderlays(mob/M, g, fat) - return "hulk_[fat ? fat : g]_s" - - -/datum/dna/gene/basic/hulk/OnMobLife(mob/living/carbon/human/M) - if(!istype(M)) - return - if (M.health > 25) - return - M.mutations.Remove(MUTATION_HULK) - M.update_mutations() - to_chat(M, SPAN_WARNING("You suddenly feel very weak.")) - M.emote("collapse") - M.Weaken(3) - - /datum/dna/gene/basic/xray name = "X-Ray Vision" activation_messages = list("The walls suddenly disappear.") diff --git a/code/game/gamemodes/changeling/absorbed_dna.dm b/code/game/gamemodes/changeling/absorbed_dna.dm index 2967da0a906a9..4240f2e63fa49 100644 --- a/code/game/gamemodes/changeling/absorbed_dna.dm +++ b/code/game/gamemodes/changeling/absorbed_dna.dm @@ -4,7 +4,7 @@ var/speciesName var/list/languages -/datum/absorbed_dna/New(newName, newDNA, newSpecies, newLanguages) +/datum/absorbed_dna/New(newName, newDNA, newSpecies, newLanguages, newPronouns) ..() name = newName dna = newDNA diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 6012ca4a2b0d5..e6966e09426ac 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -11,7 +11,7 @@ No one knows where it came from. No one knows who it is or what it wants. One thing is for \ certain though... there is never just one of them. Good luck." config_tag = "changeling" - required_players = 2 + required_players = 5 required_enemies = 1 end_on_antag_death = FALSE antag_scaling_coeff = 15 diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 3658fa4763039..775985846b24e 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -248,7 +248,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E changeling.isabsorbing = 0 T.death(0) - T.Drain() + T.ChangeToHusk() return 1 @@ -311,7 +311,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E domutcheck(src, null) src.UpdateAppearance() - + src.AddComponent(/datum/component/tts_component, chosen_dna.dna.tts_seed_dna) //Transform into a monkey. /mob/proc/changeling_lesser_form() @@ -373,9 +373,9 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E ADD_TRANSFORMATION_MOVEMENT_HANDLER(C) C.icon = null - C.overlays.Cut() - C.set_invisibility(101) - var/atom/movable/overlay/animation = new /atom/movable/overlay(src) + C.ClearOverlays() + C.set_invisibility(INVISIBILITY_ABSTRACT) + var/atom/movable/fake_overlay/animation = new /atom/movable/fake_overlay(src) animation.icon_state = "blank" animation.icon = 'icons/mob/mob.dmi' flick("monkey2h", animation) @@ -674,7 +674,7 @@ var/global/list/datum/absorbed_dna/hivemind_bank = list() to_chat(src, SPAN_WARNING("We cannot reach \the [M] with a sting!")) return 0 //One is inside, the other is outside something. // Maximum queued turfs set to 25; I don't *think* anything raises sting_range above 2, but if it does the 25 may need raising - if(!AStar(src.loc, M.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, max_nodes=25, max_node_depth=sting_range)) //If we can't find a path, fail + if(!AStar(src.loc, M.loc, TYPE_PROC_REF(/turf, AdjacentTurfs), TYPE_PROC_REF(/turf, Distance), max_nodes=25, max_node_depth=sting_range)) //If we can't find a path, fail to_chat(src, SPAN_WARNING("We cannot find a path to sting \the [M] by!")) return 0 return 1 @@ -700,7 +700,8 @@ var/global/list/datum/absorbed_dna/hivemind_bank = list() changeling.chem_charges -= required_chems changeling.sting_range = 1 src.verbs -= verb_path - spawn(10) src.verbs += verb_path + spawn(10) + src.verbs += verb_path if(!loud) to_chat(src, SPAN_NOTICE("We stealthily sting [T].")) else @@ -734,7 +735,7 @@ var/global/list/datum/absorbed_dna/hivemind_bank = list() set name = "Silence sting (10)" set desc="Sting target" - var/mob/living/carbon/human/T = changeling_sting(10,/mob/proc/changeling_silence_sting, sting_name = "Silence Sting") + var/mob/living/carbon/human/T = changeling_sting(10, /mob/proc/changeling_silence_sting, sting_name = "Silence Sting") if(!T) return 0 T.silent += 30 return 1 @@ -744,7 +745,7 @@ var/global/list/datum/absorbed_dna/hivemind_bank = list() set name = "Blind sting (20)" set desc="Sting target" - var/mob/living/carbon/human/T = changeling_sting(20,/mob/proc/changeling_blind_sting, sting_name = "Blind Sting") + var/mob/living/carbon/human/T = changeling_sting(20, /mob/proc/changeling_blind_sting, sting_name = "Blind Sting") if(!T) return 0 to_chat(T, SPAN_DANGER("Your eyes burn horrificly!")) T.disabilities |= NEARSIGHTED @@ -758,7 +759,7 @@ var/global/list/datum/absorbed_dna/hivemind_bank = list() set name = "Deaf sting (5)" set desc="Sting target:" - var/mob/living/carbon/human/T = changeling_sting(5,/mob/proc/changeling_deaf_sting, sting_name = "Deaf Sting") + var/mob/living/carbon/human/T = changeling_sting(5, /mob/proc/changeling_deaf_sting, sting_name = "Deaf Sting") if(!T) return 0 to_chat(T, SPAN_DANGER("Your ears pop and begin ringing loudly!")) T.ear_deaf += 15 @@ -770,7 +771,7 @@ var/global/list/datum/absorbed_dna/hivemind_bank = list() set desc = "Causes spasms onto death." var/loud = 1 - var/mob/living/carbon/human/T = changeling_sting(40,/mob/proc/changeling_DEATHsting,loud, sting_name = "Death Sting") + var/mob/living/carbon/human/T = changeling_sting(40, /mob/proc/changeling_DEATHsting, loud, sting_name = "Death Sting") if(!T) return 0 to_chat(T, SPAN_DANGER("You feel a small prick and your chest becomes tight.")) T.make_jittery(400) diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm index a60efc0861cfb..8cba374486708 100644 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ b/code/game/gamemodes/changeling/modularchangling.dm @@ -441,7 +441,7 @@ var/global/list/datum/power/changeling/powerinstances = list() if(!istype(M)) return purchasePower(M, href_list["P"]) - call(/datum/changeling/proc/EvolutionMenu)() + EvolutionMenu() @@ -460,7 +460,7 @@ var/global/list/datum/power/changeling/powerinstances = list() break - if(Thepower == null) + if(isnull(Thepower)) to_chat(M.current, "This is awkward. Changeling power purchase failed, please report this bug to a coder!") return diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index b1dbe2399c1ed..0f55679e9f19a 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -10,14 +10,14 @@ force = 30 throwforce = 10 hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "tore", "ripped", "diced", "cut") -/obj/item/melee/cultblade/attack(mob/living/M, mob/living/user, target_zone) - if(iscultist(user)) - return ..() +/obj/item/melee/cultblade/use_before(mob/living/M, mob/living/user) + . = FALSE + if (iscultist(user)) + return FALSE var/zone = (user.hand ? BP_L_ARM : BP_R_ARM) - var/obj/item/organ/external/affecting = null if(ishuman(user)) var/mob/living/carbon/human/H = user @@ -37,11 +37,10 @@ var/spooky = pick('sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg', 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/wail.ogg') playsound(loc, spooky, 50, 1) - - return 1 + return TRUE /obj/item/melee/cultblade/pickup(mob/living/user as mob) - if(!iscultist(user)) + if (!iscultist(user)) to_chat(user, SPAN_WARNING("An overwhelming feeling of dread comes over you as you pick up the cultist's sword. It would be wise to be rid of this blade quickly.")) user.make_dizzy(120) @@ -50,7 +49,7 @@ name = "cult hood" icon_state = "culthood" desc = "A hood worn by the followers of Nar-Sie." - flags_inv = HIDEFACE + flags_inv = HIDEFACE | BLOCKHAIR body_parts_covered = HEAD armor = list( melee = ARMOR_MELEE_RESISTANT, diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index d23acd6bac7d8..4f7330cefd622 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -17,29 +17,31 @@ /obj/structure/cult/pylon name = "pylon" desc = "A floating crystal that hums with an unearthly energy." - icon = 'icons/obj/pylon.dmi' + icon = 'icons/obj/structures/pylon.dmi' icon_state = "pylon" - light_max_bright = 0.5 - light_inner_range = 1 - light_outer_range = 13 + light_power = 0.5 + light_range = 13 light_color = "#3e0000" health_max = 20 health_min_damage = 4 damage_hitsound = 'sound/effects/Glasshit.ogg' -/obj/structure/cult/pylon/attackby(obj/item/W, mob/user) - if (istype(W, /obj/item/natural_weapon/cult_builder)) + +/obj/structure/cult/pylon/use_tool(obj/item/tool, mob/user, list/click_params) + // Cult Builder - Repair pylon + if (istype(tool, /obj/item/natural_weapon/cult_builder)) if (!health_damaged()) - to_chat(user, SPAN_WARNING("\The [src] is fully repaired.")) - else - user.visible_message( - SPAN_NOTICE("\The [user] mends some of the cracks on \the [src]."), - SPAN_NOTICE("You repair some of \the [src]'s damage.") - ) - restore_health(5) - return + USE_FEEDBACK_FAILURE("\The [src] does not need repairs.") + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] mends some of the cracks on \the [src]."), + SPAN_NOTICE("You repair some of \the [src]'s damage.") + ) + restore_health(5) + return TRUE + + return ..() - ..() /obj/structure/cult/tome name = "Desk" @@ -56,7 +58,7 @@ icon = 'magic_pillar.dmi' */ -/obj/effect/gateway +/obj/gateway name = "gateway" desc = "You're pretty sure that abyss is staring back." icon = 'icons/effects/64x64.dmi' @@ -69,8 +71,8 @@ anchored = TRUE var/spawnable = null -/obj/effect/gateway/active - light_outer_range=5 +/obj/gateway/active + light_range=5 light_color="#ff0000" spawnable=list( /mob/living/simple_animal/hostile/scarybat, @@ -78,8 +80,7 @@ /mob/living/simple_animal/hostile/faithless ) -/obj/effect/gateway/active/cult - light_outer_range=5 +/obj/gateway/active/cult light_color="#ff0000" spawnable=list( /mob/living/simple_animal/hostile/scarybat/cult, @@ -87,17 +88,17 @@ /mob/living/simple_animal/hostile/faithless/cult ) -/obj/effect/gateway/active/New() +/obj/gateway/active/New() ..() - addtimer(new Callback(src, .proc/create_and_delete), rand(30,60) SECONDS) + addtimer(CALLBACK(src, PROC_REF(create_and_delete)), rand(30,60) SECONDS) -/obj/effect/gateway/active/proc/create_and_delete() +/obj/gateway/active/proc/create_and_delete() var/t = pick(spawnable) new t(src.loc) qdel(src) -/obj/effect/gateway/active/Crossed(atom/A) +/obj/gateway/active/Crossed(atom/A) if(!istype(A, /mob/living)) return @@ -114,8 +115,8 @@ M.AddMovementHandler(/datum/movement_handler/mob/transformation) M.icon = null - M.overlays.Cut() - M.set_invisibility(101) + M.ClearOverlays() + M.set_invisibility(INVISIBILITY_ABSTRACT) if(istype(M, /mob/living/silicon/robot)) var/mob/living/silicon/robot/Robot = M diff --git a/code/game/gamemodes/cult/cultify/de-cultify.dm b/code/game/gamemodes/cult/cultify/de-cultify.dm index f34da0848cc1a..601280befd00e 100644 --- a/code/game/gamemodes/cult/cultify/de-cultify.dm +++ b/code/game/gamemodes/cult/cultify/de-cultify.dm @@ -1,29 +1,29 @@ -/turf/unsimulated/wall/cult/attackby(obj/item/I, mob/user) +/turf/unsimulated/wall/cult/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/nullrod)) user.visible_message(SPAN_NOTICE("\The [user] touches \the [src] with \the [I], and it shifts."), SPAN_NOTICE("You touch \the [src] with \the [I], and it shifts.")) ChangeTurf(/turf/unsimulated/wall) - return - ..() + return TRUE + return ..() -/turf/simulated/wall/cult/attackby(obj/item/I, mob/user) +/turf/simulated/wall/cult/use_tool(obj/item/I, mob/living/user, list/click_params) if (istype(I, /obj/item/nullrod)) user.visible_message( SPAN_NOTICE("\The [user] touches \the [src] with \the [I], and it shifts."), SPAN_NOTICE("You touch \the [src] with \the [I], and it shifts.") ) decultify_wall() - return - ..() + return TRUE + return ..() -/turf/simulated/floor/cult/attackby(obj/item/I, mob/user) +/turf/simulated/floor/cult/use_tool(obj/item/I, mob/living/user, list/click_params) if (istype(I, /obj/item/nullrod)) user.visible_message( SPAN_NOTICE("\The [user] touches \the [src] with \the [I], and it shifts."), SPAN_NOTICE("You touch \the [src] with \the [I], and it shifts.") ) decultify_floor() - return - ..() + return TRUE + return ..() /turf/proc/decultify_wall() var/turf/simulated/wall/cult/wall = src diff --git a/code/game/gamemodes/cult/cultify/mob.dm b/code/game/gamemodes/cult/cultify/mob.dm index 63c054c14da23..cdfbdd59bcee2 100644 --- a/code/game/gamemodes/cult/cultify/mob.dm +++ b/code/game/gamemodes/cult/cultify/mob.dm @@ -10,7 +10,7 @@ if(icon_state != "ghost-narsie") icon = 'icons/mob/mob.dmi' icon_state = "ghost-narsie" - overlays.Cut() + ClearOverlays() set_invisibility(0) to_chat(src, SPAN_CLASS("sinister", "Even as a non-corporal being, you can feel Nar-Sie's presence altering you. You are now visible to everyone.")) @@ -24,7 +24,7 @@ var/mob/observer/ghost/G = (ghostize()) G.icon = 'icons/mob/mob.dmi' G.icon_state = "ghost-narsie" - G.overlays.Cut() + G.ClearOverlays() G.set_invisibility(0) to_chat(G, SPAN_CLASS("sinister", "You feel relieved as what's left of your soul finally escapes its prison of flesh.")) else diff --git a/code/game/gamemodes/cult/ghosts.dm b/code/game/gamemodes/cult/ghosts.dm index dbc221bafe668..0e86cb9dce8d6 100644 --- a/code/game/gamemodes/cult/ghosts.dm +++ b/code/game/gamemodes/cult/ghosts.dm @@ -58,16 +58,16 @@ return var/num_doodles = 0 - for(var/obj/effect/decal/cleanable/blood/writing/W in T) + for(var/obj/decal/cleanable/blood/writing/W in T) num_doodles++ if(num_doodles > 4) to_chat(src, SPAN_WARNING("There is no space to write on!")) return - var/obj/effect/decal/cleanable/blood/choice + var/obj/decal/cleanable/blood/choice if(!bloodless) var/list/choices = list() - for(var/obj/effect/decal/cleanable/blood/B in range(1)) + for(var/obj/decal/cleanable/blood/B in range(1)) if(B.amount > 0) choices += B @@ -94,7 +94,7 @@ message += "-" to_chat(src, SPAN_WARNING("You ran out of blood to write with!")) - var/obj/effect/decal/cleanable/blood/writing/W = new(T) + var/obj/decal/cleanable/blood/writing/W = new(T) W.basecolor = doodle_color W.update_icon() W.message = message diff --git a/code/game/gamemodes/cult/hell_universe.dm b/code/game/gamemodes/cult/hell_universe.dm index c9367a4b7ea46..b7047dc7c4a49 100644 --- a/code/game/gamemodes/cult/hell_universe.dm +++ b/code/game/gamemodes/cult/hell_universe.dm @@ -41,14 +41,14 @@ In short: wall.decultify_wall() for (var/turf/simulated/floor/cult/floor) floor.decultify_floor() - for (var/obj/effect/gateway/active/cult/G) + for (var/obj/gateway/active/cult/G) qdel(G) return /datum/universal_state/hell/proc/MiscSet() for(var/turf/simulated/floor/T) if(!T.holy && prob(1)) - new /obj/effect/gateway/active/cult(T) + new /obj/gateway/active/cult(T) /datum/universal_state/hell/proc/KillMobs() for(var/mob/living/simple_animal/M in SSmobs.mob_list) diff --git a/code/game/gamemodes/cult/narsie.dm b/code/game/gamemodes/cult/narsie.dm index cbca1b1d1a6e5..91bb31d018167 100644 --- a/code/game/gamemodes/cult/narsie.dm +++ b/code/game/gamemodes/cult/narsie.dm @@ -32,7 +32,7 @@ var/global/list/narsie_list = list() // Pixel stuff centers Narsie. pixel_x = -236 pixel_y = -256 - light_outer_range = 1 + light_range = 1 light_color = "#3e0000" current_size = 6 @@ -70,7 +70,8 @@ var/global/list/narsie_list = list() mezzer() /obj/singularity/narsie/large/eat() - for (var/turf/A in orange(consume_range, src)) + var/turf/center = get_turf(src) + for(var/turf/A as anything in ORANGE_TURFS(center, consume_range)) consume(A) /obj/singularity/narsie/mezzer() @@ -154,9 +155,9 @@ var/global/list/narsie_list = list() T.icon_state = "cult-narsie" T.set_opacity(0) T.set_density(0) - set_light(1) + set_light(1, 1) -/obj/singularity/narsie/large/consume(const/atom/A) //Has its own consume proc because it doesn't need energy and I don't want BoHs to explode it. --NEO +/obj/singularity/narsie/large/consume(atom/A) //Has its own consume proc because it doesn't need energy and I don't want BoHs to explode it. --NEO //NEW BEHAVIOUR if(narsie_behaviour == "CultStation13") //MOB PROCESSING @@ -166,7 +167,7 @@ var/global/list/narsie_list = list() else if(narsie_behaviour == "Nar-Singulo") old_narsie(A) -/obj/singularity/narsie/proc/new_narsie(const/atom/A) +/obj/singularity/narsie/proc/new_narsie(atom/A) if (ismob(A) && (get_dist(A, src) <= 7)) var/mob/M = A @@ -190,7 +191,7 @@ var/global/list/narsie_list = list() T.holy = 0 //Nar-Sie doesn't give a shit about sacred grounds. T.cultify() -/obj/singularity/narsie/proc/old_narsie(const/atom/A) +/obj/singularity/narsie/proc/old_narsie(atom/A) if(!(A.singuloCanEat())) return 0 @@ -222,7 +223,7 @@ var/global/list/narsie_list = list() var/turf/T2 = A T2.ChangeTurf(get_base_turf_by_area(A)) -/obj/singularity/narsie/consume(const/atom/A) //This one is for the small ones. +/obj/singularity/narsie/consume(atom/A) //This one is for the small ones. if(!(A.singuloCanEat())) return 0 @@ -254,10 +255,10 @@ var/global/list/narsie_list = list() if(!(AM2.singuloCanEat())) continue - if (101 == AM2.invisibility) + if (INVISIBILITY_ABSTRACT == AM2.invisibility) continue - addtimer(new Callback(AM2, /atom/proc/singularity_pull, src, current_size), 0) + addtimer(CALLBACK(AM2, TYPE_PROC_REF(/atom, singularity_pull), src, current_size), 0) if (dist <= consume_range && !istype(A, get_base_turf_by_area(A))) var/turf/T2 = A @@ -305,7 +306,7 @@ var/global/list/narsie_list = list() return //no living humans, follow a ghost instead. -/obj/singularity/narsie/proc/acquire(const/mob/food) +/obj/singularity/narsie/proc/acquire(mob/food) var/capname = uppertext(name) to_chat(target, SPAN_NOTICE("[capname] HAS LOST INTEREST IN YOU.")) @@ -345,7 +346,8 @@ var/global/list/narsie_list = list() grav_pull = 0 /obj/singularity/narsie/wizard/eat() - for (var/turf/T in trange(consume_range, src)) + var/turf/center = get_turf(src) + for(var/turf/T as anything in RANGE_TURFS(center, consume_range)) consume(T) /obj/singularity/narsie/proc/narsie_spawn_animation() diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 823900fc229b4..2ce81a35706cd 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -17,33 +17,37 @@ /obj/item/book/tome/examine(mob/user) . = ..() if(!iscultist(user)) - to_chat(user, "An old, dusty tome with frayed edges and a sinister looking cover.") + . += SPAN_NOTICE("An old, dusty tome with frayed edges and a sinister looking cover.") else - to_chat(user, "The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of. Most of these are useless, though.") - -/obj/item/book/tome/attack(mob/living/M, mob/living/user) - if (user.a_intent != I_HELP || user.zone_sel.selecting != BP_EYES) - return ..() - user.visible_message( - SPAN_NOTICE("\The [user] shows \the [src] to \the [M]."), - SPAN_NOTICE("You open up \the [src] and show it to \the [M].") - ) - if (iscultist(M)) - if (user != M) - to_chat(user, SPAN_NOTICE("But they already know all there is to know.")) - to_chat(M, SPAN_NOTICE("But you already know all there is to know.")) - else - to_chat(M, SPAN_NOTICE("\The [src] seems full of illegible scribbles. Is this a joke?")) - user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) + . += SPAN_OCCULT("The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of. Most of these are useless, though.") + +/obj/item/book/tome/use_before(mob/living/M, mob/living/user) + . = FALSE + if (!istype(M)) + return FALSE + if (user.a_intent == I_HELP && user.zone_sel.selecting == BP_EYES) + user.visible_message( + SPAN_NOTICE("\The [user] shows \the [src] to \the [M]."), + SPAN_NOTICE("You open up \the [src] and show it to \the [M].") + ) + if (iscultist(M)) + if (user != M) + to_chat(user, SPAN_NOTICE("But they already know all there is to know.")) + to_chat(M, SPAN_NOTICE("But you already know all there is to know.")) + else + to_chat(M, SPAN_NOTICE("\The [src] seems full of illegible scribbles. Is this a joke?")) + user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) + return TRUE -/obj/item/book/tome/afterattack(atom/A, mob/user, proximity) - if(!proximity || !iscultist(user)) - return +/obj/item/book/tome/use_after(atom/A, mob/user) + if(!iscultist(user)) + return FALSE if(A.reagents && A.reagents.has_reagent(/datum/reagent/water/holywater)) to_chat(user, SPAN_NOTICE("You unbless \the [A].")) var/holy2water = A.reagents.get_reagent_amount(/datum/reagent/water/holywater) A.reagents.del_reagent(/datum/reagent/water/holywater) A.reagents.add_reagent(/datum/reagent/water, holy2water) + return TRUE /mob/proc/make_rune(rune, cost = 5, tome_required = 0) var/has_tome = !!IsHolding(/obj/item/book/tome) @@ -62,7 +66,7 @@ if(!istype(T, /turf/simulated)) to_chat(src, SPAN_WARNING("You need more space to draw a rune here.")) return - if(locate(/obj/effect/rune) in T) + if(locate(/obj/rune) in T) to_chat(src, SPAN_WARNING("There's already a rune here.")) // Don't cross the runes return if(T.icon_state == "cult" || T.icon_state == "cult-narsie") @@ -104,9 +108,9 @@ visible_message(SPAN_WARNING("\The [src] slices open a finger and begins to chant and paint symbols on the floor."), SPAN_NOTICE("[self]"), "You hear chanting.") if(do_after(src, timer, T, DO_PUBLIC_UNIQUE)) remove_blood_simple(cost * damage) - if(locate(/obj/effect/rune) in T) + if(locate(/obj/rune) in T) return - var/obj/effect/rune/R = new rune(T, get_rune_color(), get_blood_name()) + var/obj/rune/R = new rune(T, get_rune_color(), get_blood_name()) var/area/A = get_area(R) log_and_message_admins("created \an [R.cultname] rune at \the [A.name].") R.add_fingerprint(src) @@ -190,55 +194,55 @@ var/global/list/Tier4Runes = list( set category = "Cult Magic" set name = "Rune: Convert" - make_rune(/obj/effect/rune/convert, tome_required = 1) + make_rune(/obj/rune/convert, tome_required = 1) /mob/proc/teleport_rune() set category = "Cult Magic" set name = "Rune: Teleport" - make_rune(/obj/effect/rune/teleport, tome_required = 1) + make_rune(/obj/rune/teleport, tome_required = 1) /mob/proc/tome_rune() set category = "Cult Magic" set name = "Rune: Summon Tome" - make_rune(/obj/effect/rune/tome, cost = 15) + make_rune(/obj/rune/tome, cost = 15) /mob/proc/wall_rune() set category = "Cult Magic" set name = "Rune: Wall" - make_rune(/obj/effect/rune/wall, tome_required = 1) + make_rune(/obj/rune/wall, tome_required = 1) /mob/proc/ajorney_rune() set category = "Cult Magic" set name = "Rune: Astral Journey" - make_rune(/obj/effect/rune/ajorney) + make_rune(/obj/rune/ajorney) /mob/proc/defile_rune() set category = "Cult Magic" set name = "Rune: Defile" - make_rune(/obj/effect/rune/defile, tome_required = 1) + make_rune(/obj/rune/defile, tome_required = 1) /mob/proc/massdefile_rune() set category = "Cult Magic" set name = "Rune: Mass Defile" - make_rune(/obj/effect/rune/massdefile, tome_required = 1, cost = 20) + make_rune(/obj/rune/massdefile, tome_required = 1, cost = 20) /mob/proc/armor_rune() set category = "Cult Magic" set name = "Rune: Summon Robes" - make_rune(/obj/effect/rune/armor, tome_required = 1) + make_rune(/obj/rune/armor, tome_required = 1) /mob/proc/offering_rune() set category = "Cult Magic" set name = "Rune: Offering" - make_rune(/obj/effect/rune/offering, tome_required = 1) + make_rune(/obj/rune/offering, tome_required = 1) @@ -246,61 +250,61 @@ var/global/list/Tier4Runes = list( set category = "Cult Magic" set name = "Rune: Blood Drain" - make_rune(/obj/effect/rune/drain, tome_required = 1) + make_rune(/obj/rune/drain, tome_required = 1) /mob/proc/emp_rune() set category = "Cult Magic" set name = "Rune: EMP" - make_rune(/obj/effect/rune/emp, tome_required = 1) + make_rune(/obj/rune/emp, tome_required = 1) /mob/proc/weapon_rune() set category = "Cult Magic" set name = "Rune: Summon Weapon" - make_rune(/obj/effect/rune/weapon, tome_required = 1) + make_rune(/obj/rune/weapon, tome_required = 1) /mob/proc/shell_rune() set category = "Cult Magic" set name = "Rune: Summon Shell" - make_rune(/obj/effect/rune/shell, cost = 10, tome_required = 1) + make_rune(/obj/rune/shell, cost = 10, tome_required = 1) /mob/proc/bloodboil_rune() set category = "Cult Magic" set name = "Rune: Blood Boil" - make_rune(/obj/effect/rune/blood_boil, cost = 20, tome_required = 1) + make_rune(/obj/rune/blood_boil, cost = 20, tome_required = 1) /mob/proc/confuse_rune() set category = "Cult Magic" set name = "Rune: Confuse" - make_rune(/obj/effect/rune/confuse) + make_rune(/obj/rune/confuse) /mob/proc/revive_rune() set category = "Cult Magic" set name = "Rune: Revive" - make_rune(/obj/effect/rune/revive, tome_required = 1) + make_rune(/obj/rune/revive, tome_required = 1) /mob/proc/tearreality_rune() set category = "Cult Magic" set name = "Rune: Tear Reality" - make_rune(/obj/effect/rune/tearreality, cost = 50, tome_required = 1) + make_rune(/obj/rune/tearreality, cost = 50, tome_required = 1) /mob/proc/stun_imbue() set category = "Cult Magic" set name = "Imbue: Stun" - make_rune(/obj/effect/rune/imbue/stun, cost = 20, tome_required = 1) + make_rune(/obj/rune/imbue/stun, cost = 20, tome_required = 1) /mob/proc/emp_imbue() set category = "Cult Magic" set name = "Imbue: EMP" - make_rune(/obj/effect/rune/imbue/emp) + make_rune(/obj/rune/imbue/emp) /mob/proc/cult_communicate() set category = "Cult Magic" @@ -341,10 +345,10 @@ var/global/list/Tier4Runes = list( set category = "Cult Magic" set name = "Rune: Obscure" - make_rune(/obj/effect/rune/obscure) + make_rune(/obj/rune/obscure) /mob/proc/reveal() set category = "Cult Magic" set name = "Rune: Reveal" - make_rune(/obj/effect/rune/reveal) + make_rune(/obj/rune/reveal) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index cc5f2a0c20343..527dcbe47e1bd 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -1,4 +1,4 @@ -/obj/effect/rune +/obj/rune name = "rune" desc = "A strange collection of symbols drawn in blood." anchored = TRUE @@ -12,20 +12,20 @@ var/strokes = 2 // IF YOU EVER SET THIS TO MORE THAN TEN, EVERYTHING WILL BREAK var/cultname = "" -/obj/effect/rune/New(loc, blcolor = "#c80000", nblood = "blood") +/obj/rune/New(loc, blcolor = "#c80000", nblood = "blood") ..() bcolor = blcolor blood = nblood update_icon() set_extension(src, /datum/extension/turf_hand, 10) -/obj/effect/rune/on_update_icon() - overlays.Cut() +/obj/rune/on_update_icon() + ClearOverlays() if(GLOB.cult.rune_strokes[type]) var/list/f = GLOB.cult.rune_strokes[type] for(var/i in f) var/image/t = image('icons/effects/uristrunes.dmi', "rune-[i]") - overlays += t + AddOverlays(t) else var/list/q = list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) var/list/f = list() @@ -34,27 +34,42 @@ f += j q -= f var/image/t = image('icons/effects/uristrunes.dmi', "rune-[j]") - overlays += t + AddOverlays(t) GLOB.cult.rune_strokes[type] = f.Copy() color = bcolor desc = "A strange collection of symbols drawn in [blood]." -/obj/effect/rune/examine(mob/user) +/obj/rune/examine(mob/user) . = ..() if(iscultist(user)) - to_chat(user, "This is \a [cultname] rune.") - -/obj/effect/rune/attackby(obj/item/I, mob/living/user) - if(istype(I, /obj/item/book/tome) && iscultist(user)) - user.visible_message(SPAN_NOTICE("[user] rubs \the [src] with \the [I], and \the [src] is absorbed by it."), "You retrace your steps, carefully undoing the lines of \the [src].") + . += SPAN_OCCULT("This is [cultname] rune.") + +/obj/rune/use_tool(obj/item/tool, mob/user, list/click_params) + // Cultist Tome - Remove rune + if (istype(tool, /obj/item/book/tome)) + if (!iscultist(user)) + return FALSE + user.visible_message( + SPAN_NOTICE("\The [user] rubs \the [src] with \a [tool], and \the [src] is absorbed by it."), + SPAN_NOTICE("You retrace your steps, carefully undoing the lines of \the [src] with \the [tool].") + ) qdel(src) - return - else if(istype(I, /obj/item/nullrod)) - user.visible_message(SPAN_NOTICE("[user] hits \the [src] with \the [I], and it disappears, fizzling."), SPAN_NOTICE("You disrupt the vile magic with the deadening field of \the [I]."), "You hear a fizzle.") + return TRUE + + // Null Rod - Remove rune + if (istype(tool, /obj/item/nullrod)) + user.visible_message( + SPAN_NOTICE("\The [user] hits \the [src] with \a [tool], and it disappears, fizzling."), + SPAN_NOTICE("You disrupt \the [src]'s vile magic with the deadening field of \the [tool]."), + SPAN_ITALIC("You hear a fizzle.") + ) qdel(src) - return + return TRUE + + return ..() + -/obj/effect/rune/attack_hand(mob/living/user) +/obj/rune/attack_hand(mob/living/user) if(!iscultist(user)) to_chat(user, "You can't mouth the arcane scratchings without fumbling over them.") return @@ -66,35 +81,35 @@ return fizzle(user) cast(user) -/obj/effect/rune/attack_ai(mob/living/user) // Cult borgs! +/obj/rune/attack_ai(mob/living/user) // Cult borgs! if(Adjacent(user)) attack_hand(user) -/obj/effect/rune/proc/cast(mob/living/user) +/obj/rune/proc/cast(mob/living/user) fizzle(user) -/obj/effect/rune/proc/get_cultists() +/obj/rune/proc/get_cultists() . = list() for(var/mob/living/M in range(1)) if(iscultist(M)) . += M -/obj/effect/rune/proc/fizzle(mob/living/user) +/obj/rune/proc/fizzle(mob/living/user) visible_message(SPAN_WARNING("The markings pulse with a small burst of light, then fall dark."), "You hear a fizzle.") //Makes the speech a proc so all verbal components can be easily manipulated as a whole, or individually easily -/obj/effect/rune/proc/speak_incantation(mob/living/user, incantation) +/obj/rune/proc/speak_incantation(mob/living/user, incantation) var/datum/language/L = all_languages[LANGUAGE_CULT] if(incantation && (L in user.languages)) user.say(incantation, L) /* Tier 1 runes below */ -/obj/effect/rune/convert +/obj/rune/convert cultname = "convert" var/spamcheck = 0 -/obj/effect/rune/convert/cast(mob/living/user) +/obj/rune/convert/cast(mob/living/user) if(spamcheck) return @@ -111,7 +126,7 @@ target.visible_message(SPAN_WARNING("The markings below [target] glow a bloody red.")) to_chat(target, SPAN_OCCULT("Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.")) - if(!GLOB.cult.can_become_antag(target.mind, 1)) + if(!GLOB.cult.can_become_antag(target.mind, TRUE, TRUE)) to_chat(target, SPAN_DANGER("Are you going insane?")) else to_chat(target, SPAN_OCCULT("Do you want to join the cult of Nar'Sie? You can choose to ignore offer... Join the cult.")) @@ -135,34 +150,34 @@ to_chat(target, SPAN_OCCULT("Your mind turns to ash as the burning flames engulf your very soul and images of an unspeakable horror begin to bombard the last remnants of mental resistance.")) target.take_overall_damage(0, 10) -/obj/effect/rune/convert/Topic(href, href_list) +/obj/rune/convert/Topic(href, href_list) if(href_list["join"]) if(usr.loc == loc && !iscultist(usr)) - GLOB.cult.add_antagonist(usr.mind, ignore_role = 1, do_not_equip = 1) + GLOB.cult.add_antagonist(usr.mind, TRUE, TRUE, forced = TRUE) -/obj/effect/rune/teleport +/obj/rune/teleport cultname = "teleport" var/destination -/obj/effect/rune/teleport/New() +/obj/rune/teleport/New() ..() var/area/A = get_area(src) destination = A.name GLOB.cult.teleport_runes += src -/obj/effect/rune/teleport/Destroy() +/obj/rune/teleport/Destroy() GLOB.cult.teleport_runes -= src var/turf/T = get_turf(src) for(var/atom/movable/A in contents) A.forceMove(T) return ..() -/obj/effect/rune/teleport/examine(mob/user) +/obj/rune/teleport/examine(mob/user) . = ..() if(iscultist(user)) - to_chat(user, "Its name is [destination].") + . += SPAN_OCCULT("Its name is [destination].") -/obj/effect/rune/teleport/cast(mob/living/user) +/obj/rune/teleport/cast(mob/living/user) if(user.loc == src) showOptions(user) else if(user.loc == get_turf(src)) @@ -194,50 +209,50 @@ return destination = sanitize(input) -/obj/effect/rune/teleport/Topic(href, href_list) +/obj/rune/teleport/Topic(href, href_list) if(usr.loc != src) return if(href_list["target"]) - var/obj/effect/rune/teleport/targ = locate(href_list["target"]) + var/obj/rune/teleport/targ = locate(href_list["target"]) if(istype(targ)) // Checks for null, too usr.forceMove(targ) targ.showOptions(usr) else if(href_list["leave"]) leaveRune(usr) -/obj/effect/rune/teleport/proc/showOptions(mob/living/user) +/obj/rune/teleport/proc/showOptions(mob/living/user) var/list/t = list() - for(var/obj/effect/rune/teleport/T in GLOB.cult.teleport_runes) + for(var/obj/rune/teleport/T in GLOB.cult.teleport_runes) if(T == src) continue t += "[T.destination]" to_chat(user, "Teleport runes: [english_list(t, nothing_text = "no other runes exist")]... or return from this rune.") -/obj/effect/rune/teleport/proc/leaveRune(mob/living/user) +/obj/rune/teleport/proc/leaveRune(mob/living/user) if(user.loc != src) return user.dropInto(loc) user.visible_message(SPAN_WARNING("\The [user] appears in a flash of red light!"), SPAN_WARNING("You feel as your body gets thrown out of the dimension of Nar-Sie!"), "You hear a pop.") -/obj/effect/rune/tome +/obj/rune/tome cultname = "summon tome" -/obj/effect/rune/tome/cast(mob/living/user) +/obj/rune/tome/cast(mob/living/user) new /obj/item/book/tome(get_turf(src)) speak_incantation(user, "N[pick("'","`")]ath reth sh'yro eth d'raggathnor!") visible_message(SPAN_NOTICE("\The [src] disappears with a flash of red light, and in its place now a book lies."), "You hear a pop.") qdel(src) -/obj/effect/rune/wall +/obj/rune/wall cultname = "wall" - var/obj/effect/cultwall/wall = null + var/obj/cultwall/wall = null -/obj/effect/rune/wall/Destroy() +/obj/rune/wall/Destroy() QDEL_NULL(wall) return ..() -/obj/effect/rune/wall/cast(mob/living/user) +/obj/rune/wall/cast(mob/living/user) var/t if(wall) if(!wall.health_damaged()) @@ -246,14 +261,14 @@ t = wall.get_damage_value() wall.restore_health() else - wall = new /obj/effect/cultwall(get_turf(src), bcolor) + wall = new /obj/cultwall(get_turf(src), bcolor) wall.rune = src t = wall.get_current_health() user.remove_blood_simple(t / 50) speak_incantation(user, "Khari[pick("'","`")]d! Eske'te tannin!") to_chat(user, SPAN_WARNING("Your blood flows into the rune, and you feel that the very space over the rune thickens.")) -/obj/effect/cultwall +/obj/cultwall name = "red mist" desc = "A strange red mist emanating from a rune below it." icon = 'icons/effects/effects.dmi'//TODO: better icon @@ -262,48 +277,54 @@ anchored = TRUE density = TRUE unacidable = TRUE - var/obj/effect/rune/wall/rune + var/obj/rune/wall/rune health_max = 200 -/obj/effect/cultwall/New(loc, bcolor) +/obj/cultwall/New(loc, bcolor) ..() if(bcolor) color = bcolor -/obj/effect/cultwall/Destroy() +/obj/cultwall/Destroy() if(rune) rune.wall = null rune = null return ..() -/obj/effect/cultwall/examine_damage_state(mob/user) +/obj/cultwall/examine_damage_state(mob/user) if (!iscultist(user)) return ..() -/obj/effect/cultwall/attack_hand(mob/living/user) +/obj/cultwall/attack_hand(mob/living/user) if(iscultist(user)) user.visible_message(SPAN_NOTICE("\The [user] touches \the [src], and it fades."), SPAN_NOTICE("You touch \the [src], whispering the old ritual, making it disappear.")) qdel(src) else to_chat(user, SPAN_NOTICE("You touch \the [src]. It feels wet and becomes harder the further you push your arm.")) -/obj/effect/cultwall/attackby(obj/item/I, mob/living/user) - if (istype(I, /obj/item/nullrod)) - user.visible_message(SPAN_NOTICE("\The [user] touches \the [src] with \the [I], and it disappears."), SPAN_NOTICE("You disrupt the vile magic with the deadening field of \the [I].")) + +/obj/cultwall/use_tool(obj/item/tool, mob/user, list/click_params) + // Null rod - Remove wall + if (istype(tool, /obj/item/nullrod)) + user.visible_message( + SPAN_NOTICE("\The [user] touches \the [src] with \a [tool], and it disappears."), + SPAN_NOTICE("You disrupt \the [src]'s vile magic with the deadening field of \the [tool].") + ) qdel(src) - return + return TRUE + + return ..() - ..() -/obj/effect/cultwall/on_death() +/obj/cultwall/on_death() visible_message(SPAN_WARNING("\The [src] dissipates.")) qdel (src) -/obj/effect/rune/ajorney +/obj/rune/ajorney cultname = "astral journey" -/obj/effect/rune/ajorney/cast(mob/living/user) +/obj/rune/ajorney/cast(mob/living/user) var/tmpkey = user.key if(user.loc != get_turf(src)) return @@ -327,12 +348,12 @@ sleep(20) fizzle(user) -/obj/effect/rune/defile +/obj/rune/defile cultname = "defile" -/obj/effect/rune/defile/cast(mob/living/user) +/obj/rune/defile/cast(mob/living/user) speak_incantation(user, "Ia! Ia! Zasan therium viortia!") - for(var/turf/T in range(1, src)) + for(var/turf/T as anything in RANGE_TURFS(src, 1)) if(T.holy) T.holy = 0 else @@ -340,12 +361,12 @@ visible_message(SPAN_WARNING("\The [src] embeds into the floor and walls around it, changing them!"), "You hear liquid flow.") qdel(src) -/obj/effect/rune/obscure +/obj/rune/obscure cultname = "obscure" -/obj/effect/rune/obscure/cast(mob/living/user) +/obj/rune/obscure/cast(mob/living/user) var/runecheck = 0 - for(var/obj/effect/rune/R in orange(1, src)) + for(var/obj/rune/R in orange(1, src)) if(R != src) R.set_invisibility(INVISIBILITY_OBSERVER) runecheck = 1 @@ -354,12 +375,12 @@ visible_message(SPAN_WARNING("\ The rune turns into gray dust that conceals the surrounding runes.")) qdel(src) -/obj/effect/rune/reveal +/obj/rune/reveal cultname = "reveal" -/obj/effect/rune/reveal/cast(mob/living/user) +/obj/rune/reveal/cast(mob/living/user) var/irunecheck = 0 - for(var/obj/effect/rune/R in orange(1, src)) + for(var/obj/rune/R in orange(1, src)) if(R != src) R.set_invisibility(SEE_INVISIBLE_NOLIGHTING) irunecheck = 1 @@ -371,23 +392,28 @@ /* Tier 2 runes */ -/obj/effect/rune/armor +/obj/rune/armor cultname = "summon robes" strokes = 3 -/obj/effect/rune/armor/cast(mob/living/user) +/obj/rune/armor/cast(mob/living/user) speak_incantation(user, "N'ath reth sh'yro eth d[pick("'","`")]raggathnor!") visible_message(SPAN_WARNING("\The [src] disappears with a flash of red light, and a set of armor appears on \the [user]."), SPAN_WARNING("You are blinded by the flash of red light. After you're able to see again, you see that you are now wearing a set of armor.")) - var/obj/O = user.get_equipped_item(slot_head) // This will most likely kill you if you are wearing a spacesuit, and it's 100% intended - if(O && !istype(O, /obj/item/clothing/head/culthood) && user.unEquip(O)) - user.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(user), slot_head) + var/obj/O = user.get_equipped_item(slot_head) + if(O) + user.unEquip(O) + user.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(user), slot_head) + O = user.get_equipped_item(slot_wear_suit) - if(O && !istype(O, /obj/item/clothing/suit/cultrobes) && user.unEquip(O)) - user.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), slot_wear_suit) + if(O) + user.unEquip(O) + user.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), slot_wear_suit) + O = user.get_equipped_item(slot_shoes) - if(O && !istype(O, /obj/item/clothing/shoes/cult) && user.unEquip(O)) - user.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult(user), slot_shoes) + if(O) + user.unEquip(O) + user.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult(user), slot_shoes) O = user.get_equipped_item(slot_back) if(istype(O, /obj/item/storage) && !istype(O, /obj/item/storage/backpack/cultpack) && user.unEquip(O)) // We don't want to make the vox drop their nitrogen tank, though @@ -404,12 +430,12 @@ qdel(src) -/obj/effect/rune/offering +/obj/rune/offering cultname = "offering" strokes = 3 var/mob/living/victim -/obj/effect/rune/offering/cast(mob/living/user) +/obj/rune/offering/cast(mob/living/user) var/list/mob/living/cultists = get_cultists() if(victim) to_chat(user, SPAN_WARNING("You are already sarcificing \the [victim] on this rune.")) @@ -479,11 +505,11 @@ victim = null -/obj/effect/rune/drain +/obj/rune/drain cultname = "blood drain" strokes = 3 -/obj/effect/rune/drain/cast(mob/living/user) +/obj/rune/drain/cast(mob/living/user) var/mob/living/carbon/human/victim for(var/mob/living/carbon/human/M in get_turf(src)) if(iscultist(M)) @@ -504,7 +530,7 @@ ) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) -/obj/effect/rune/drain/proc/heal_user(mob/living/carbon/human/user) +/obj/rune/drain/proc/heal_user(mob/living/carbon/human/user) if(!istype(user)) return list("you feel no different") var/list/statuses = list() @@ -590,19 +616,19 @@ M.fire_stacks = max(2, M.fire_stacks) M.IgniteMob() -/obj/effect/rune/emp +/obj/rune/emp cultname = "emp" strokes = 4 -/obj/effect/rune/emp/cast(mob/living/user) +/obj/rune/emp/cast(mob/living/user) empulse(get_turf(src), 4, 2, 1) speak_incantation(user, "Ta'gh fara[pick("'","`")]qha fel d'amar det!") qdel(src) -/obj/effect/rune/massdefile //Defile but with a huge range. Bring a buddy for this, you're hitting the floor. +/obj/rune/massdefile //Defile but with a huge range. Bring a buddy for this, you're hitting the floor. cultname = "mass defile" -/obj/effect/rune/massdefile/cast(mob/living/user) +/obj/rune/massdefile/cast(mob/living/user) var/list/mob/living/cultists = get_cultists() if(length(cultists) < 3) to_chat(user, SPAN_WARNING("You need three cultists around this rune to make it work.")) @@ -610,7 +636,7 @@ else for(var/mob/living/M in cultists) M.say("Ia! Ia! Zasan therium viortia! Razan gilamrua kioha!") - for(var/turf/T in range(5, src)) + for(var/turf/T as anything in RANGE_TURFS(src, 5)) if(T.holy) T.holy = 0 else @@ -620,11 +646,11 @@ /* Tier 3 runes */ -/obj/effect/rune/weapon +/obj/rune/weapon cultname = "summon weapon" strokes = 4 -/obj/effect/rune/weapon/cast(mob/living/user) +/obj/rune/weapon/cast(mob/living/user) if(!istype(user.get_equipped_item(slot_head), /obj/item/clothing/head/culthood) || !istype(user.get_equipped_item(slot_wear_suit), /obj/item/clothing/suit/cultrobes) || !istype(user.get_equipped_item(slot_shoes), /obj/item/clothing/shoes/cult)) to_chat(user, SPAN_WARNING("You need to be wearing your robes to use this rune.")) return fizzle(user) @@ -636,11 +662,11 @@ user.put_in_hands(new /obj/item/melee/cultblade(user)) qdel(src) -/obj/effect/rune/shell +/obj/rune/shell cultname = "summon shell" strokes = 4 -/obj/effect/rune/shell/cast(mob/living/user) +/obj/rune/shell/cast(mob/living/user) var/turf/T = get_turf(src) if(T.icon_state != "cult" && T.icon_state != "cult-narsie") to_chat(user, SPAN_WARNING("This rune needs to be placed on the defiled ground.")) @@ -662,11 +688,11 @@ visible_message(SPAN_WARNING("The metal bends into \the [O], and \the [src] imbues into it."), "You hear a metallic sound.") qdel(src) -/obj/effect/rune/confuse +/obj/rune/confuse cultname = "confuse" strokes = 4 -/obj/effect/rune/confuse/cast(mob/living/user) +/obj/rune/confuse/cast(mob/living/user) speak_incantation(user, "Fuu ma[pick("'","`")]jin!") visible_message(SPAN_DANGER("\The [src] explodes in a bright flash.")) var/list/mob/affected = list() @@ -688,11 +714,11 @@ admin_attacker_log_many_victims(user, affected, "Used a confuse rune.", "Was victim of a confuse rune.", "used a confuse rune on") qdel(src) -/obj/effect/rune/revive +/obj/rune/revive cultname = "revive" strokes = 4 -/obj/effect/rune/revive/cast(mob/living/user) +/obj/rune/revive/cast(mob/living/user) var/mob/living/carbon/human/target var/obj/item/device/soulstone/source for(var/mob/living/carbon/human/M in get_turf(src)) @@ -714,11 +740,11 @@ speak_incantation(user, "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!") target.visible_message(SPAN_WARNING("\The [target]'s eyes glow with a faint red as \he stands up, slowly starting to breathe again."), SPAN_WARNING("Life... I'm alive again..."), "You hear liquid flow.") -/obj/effect/rune/blood_boil +/obj/rune/blood_boil cultname = "blood boil" strokes = 4 -/obj/effect/rune/blood_boil/cast(mob/living/user) +/obj/rune/blood_boil/cast(mob/living/user) var/list/mob/living/cultists = get_cultists() if(length(cultists) < 3) return fizzle() @@ -749,16 +775,22 @@ /* Tier NarNar runes */ -/obj/effect/rune/tearreality +/obj/rune/tearreality cultname = "tear reality" var/the_end_comes = 0 var/the_time_has_come = 300 var/obj/singularity/narsie/large/HECOMES = null strokes = 9 -/obj/effect/rune/tearreality/cast(mob/living/user) +/obj/rune/tearreality/cast(mob/living/user) if(!GLOB.cult.allow_narsie) return + if (GLOB.cult.station_summon_only && !(get_z(user) in GLOB.using_map.station_levels)) + to_chat(user, SPAN_OCCULT("Nar-Sie cannot be summoned here.")) + return + if (GLOB.cult.no_shuttle_summon && istype(get_area(user), /area/shuttle)) + to_chat(user, SPAN_OCCULT("Nar-Sie cannot be summoned on a shuttle.")) + return if(the_end_comes) to_chat(user, SPAN_OCCULT("You are already summoning! Be patient!")) return @@ -786,7 +818,7 @@ if(prob(5)) M.say(pick("Hakkrutju gopoenjim.", "Nherasai pivroiashan.", "Firjji prhiv mazenhor.", "Tanah eh wakantahe.", "Obliyae na oraie.", "Miyf hon vnor'c.", "Wakabai hij fen juswix.")) - for(var/turf/T in range(min(the_end_comes, 15))) + for(var/turf/T as anything in RANGE_TURFS(src, min(the_end_comes, 15))) if(prob(the_end_comes / 3)) T.cultify() sleep(10) @@ -797,7 +829,7 @@ command_announcement.Announce("Bluespace anomaly has ceased.") qdel(src) -/obj/effect/rune/tearreality/attack_hand(mob/living/user) +/obj/rune/tearreality/attack_hand(mob/living/user) ..() if(HECOMES && !iscultist(user)) var/input = input(user, "Are you SURE you want to sacrifice yourself?", "DO NOT DO THIS") in list("Yes", "No") @@ -819,18 +851,21 @@ if (GLOB.universe.type == /datum/universal_state/hell) SetUniversalState(/datum/universal_state) -/obj/effect/rune/tearreality/attackby() - if(the_end_comes) - return - ..() + +/obj/rune/tearreality/can_use_item(obj/item/tool, mob/user, click_params) + if (the_end_comes) + USE_FEEDBACK_FAILURE("It's far too late to try doing anything with \the [src].") + return FALSE + return ..() + /* Imbue runes */ -/obj/effect/rune/imbue +/obj/rune/imbue cultname = "otherwordly abomination that shouldn't exist and that you should report to your local god as soon as you see it, along with the instructions for making this" var/papertype -/obj/effect/rune/imbue/cast(mob/living/user) +/obj/rune/imbue/cast(mob/living/user) var/obj/item/paper/target var/tainted = 0 for(var/obj/item/paper/P in get_turf(src)) @@ -849,10 +884,10 @@ qdel(target) qdel(src) -/obj/effect/rune/imbue/stun +/obj/rune/imbue/stun cultname = "stun imbue" papertype = /obj/item/paper/talisman/stun -/obj/effect/rune/imbue/emp +/obj/rune/imbue/emp cultname = "destroy technology imbue" papertype = /obj/item/paper/talisman/emp diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index 10ec0783a437b..e72e035b427ff 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -40,10 +40,10 @@ /obj/item/paper/talisman/examine(mob/user, distance) . = ..() - if (iscultist(user)) - to_chat(user, SPAN_OCCULT("This is \a [talisman_name] talisman.")) - if (talisman_desc) - to_chat(user, SPAN_OCCULT("Effect: [talisman_desc].")) + if(iscultist(user)) + . += SPAN_OCCULT("This is [talisman_name] talisman.") + if(talisman_desc) + . += SPAN_OCCULT("Effect: [talisman_desc].") /obj/item/paper/talisman/attack_self(mob/living/user) @@ -53,9 +53,9 @@ to_chat(user, "You see strange symbols on the paper. Are they supposed to mean something?") -/obj/item/paper/talisman/afterattack(atom/target, mob/user, proximity_flag, click_parameters) +/obj/item/paper/talisman/use_after(atom/target, mob/living/user, click_parameters) if (!can_invoke(target, user)) - return + return TRUE // Null rods block the talisman's effect but still consume it var/obj/item/nullrod/nullrod = locate() in target @@ -77,6 +77,7 @@ if (talisman_sound) playsound(src, talisman_sound, 100, 1) qdel(src) + return TRUE /** diff --git a/code/game/gamemodes/endgame/bluespace_jump/bluespace_jump.dm b/code/game/gamemodes/endgame/bluespace_jump/bluespace_jump.dm index c4fe8300b22e4..ecf290cbe52a4 100644 --- a/code/game/gamemodes/endgame/bluespace_jump/bluespace_jump.dm +++ b/code/game/gamemodes/endgame/bluespace_jump/bluespace_jump.dm @@ -5,10 +5,20 @@ var/list/affected_levels var/list/old_accessible_z_levels + /datum/universal_state/bluespace_jump/New(list/zlevels) affected_levels = zlevels /datum/universal_state/bluespace_jump/OnEnter() + var/obj/machinery/bluespacedrive/drive = locate() in SSmachines.get_machinery_of_type(/obj/machinery/bluespacedrive) + + if (!drive || !(drive.z in affected_levels)) + return + + if (HAS_FLAGS(drive.state, drive.STATE_BROKEN)) + var/datum/event_meta/bsd = new(EVENT_LEVEL_MAJOR, "Bluespace Jump Fracture", add_to_queue = 0) + new/datum/event/bsd_instability(bsd) // Destroyed BSD means the ship still jumps, but not without consequences + var/space_zlevel = GLOB.using_map.get_empty_zlevel() //get a place for stragglers for(var/mob/living/M in SSmobs.mob_list) if(M.z in affected_levels) @@ -26,6 +36,8 @@ old_accessible_z_levels = GLOB.using_map.accessible_z_levels.Copy() for(var/z in affected_levels) GLOB.using_map.accessible_z_levels -= "[z]" //not accessible during the jump + GLOB.using_map.ship_jump() + /datum/universal_state/bluespace_jump/OnExit() for(var/mob/M in bluespaced) @@ -36,10 +48,12 @@ GLOB.using_map.accessible_z_levels = old_accessible_z_levels old_accessible_z_levels = null + /datum/universal_state/bluespace_jump/OnPlayerLatejoin(mob/living/M) if(M.z in affected_levels) apply_bluespaced(M) + /datum/universal_state/bluespace_jump/OnTouchMapEdge(atom/A) if((A.z in affected_levels) && (A in bluespaced)) if(ismob(A)) @@ -48,19 +62,20 @@ return FALSE return TRUE + /datum/universal_state/bluespace_jump/proc/apply_bluespaced(mob/living/M) bluespaced += M if(M.client) to_chat(M,SPAN_NOTICE("You feel oddly light, and somewhat disoriented as everything around you shimmers and warps ever so slightly.")) M.overlay_fullscreen("bluespace", /obj/screen/fullscreen/bluespace_overlay) - M.confused = 20 - bluegoasts += new/obj/effect/bluegoast/(get_turf(M),M) + M.set_confused(20) + bluegoasts += new/obj/bluegoast/(get_turf(M),M) + /datum/universal_state/bluespace_jump/proc/clear_bluespaced(mob/living/M) if(M.client) to_chat(M,SPAN_NOTICE("You feel rooted in material world again.")) M.clear_fullscreen("bluespace") - M.confused = 0 for(var/mob/goast in GLOB.ghost_mobs) goast.mouse_opacity = initial(goast.mouse_opacity) goast.set_invisibility(initial(goast.invisibility)) @@ -69,7 +84,8 @@ qdel(G) bluegoasts.Cut() -/obj/effect/bluegoast + +/obj/bluegoast name = "bluespace echo" desc = "It's not going to punch you, is it?" var/mob/living/carbon/human/daddy @@ -77,7 +93,8 @@ var/reality = 0 simulated = FALSE -/obj/effect/bluegoast/New(nloc, ndaddy) + +/obj/bluegoast/New(nloc, ndaddy) ..(nloc) if(!ndaddy) qdel(src) @@ -85,18 +102,20 @@ daddy = ndaddy set_dir(daddy.dir) appearance = daddy.appearance - GLOB.moved_event.register(daddy, src, /obj/effect/bluegoast/proc/mirror) - GLOB.dir_set_event.register(daddy, src, /obj/effect/bluegoast/proc/mirror_dir) - GLOB.destroyed_event.register(daddy, src, /datum/proc/qdel_self) + GLOB.moved_event.register(daddy, src, TYPE_PROC_REF(/obj/bluegoast, mirror)) + GLOB.dir_set_event.register(daddy, src, TYPE_PROC_REF(/obj/bluegoast, mirror_dir)) + GLOB.destroyed_event.register(daddy, src, TYPE_PROC_REF(/datum, qdel_self)) + -/obj/effect/bluegoast/Destroy() +/obj/bluegoast/Destroy() GLOB.destroyed_event.unregister(daddy, src) GLOB.dir_set_event.unregister(daddy, src) GLOB.moved_event.unregister(daddy, src) daddy = null . = ..() -/obj/effect/bluegoast/proc/mirror(atom/movable/am, old_loc, new_loc) + +/obj/bluegoast/proc/mirror(atom/movable/am, old_loc, new_loc) var/ndir = get_dir(new_loc,old_loc) appearance = daddy.appearance var/nloc = get_step(src, ndir) @@ -112,31 +131,59 @@ else to_chat(daddy, SPAN_WARNING("You feel a bit less real. Which one of you two was original again?..")) -/obj/effect/bluegoast/proc/mirror_dir(atom/movable/am, old_dir, new_dir) + +/obj/bluegoast/proc/mirror_dir(atom/movable/am, old_dir, new_dir) set_dir(GLOB.reverse_dir[new_dir]) -/obj/effect/bluegoast/examine() + +/obj/bluegoast/examine(mob/user) return daddy?.examine(arglist(args)) -/obj/effect/bluegoast/proc/blueswitch() - var/mob/living/carbon/human/H - if(ishuman(daddy)) - H = new(get_turf(src), daddy.species.name) - H.dna = daddy.dna.Clone() - H.sync_organ_dna() - H.UpdateAppearance() - for(var/obj/item/entry in daddy.get_equipped_items(TRUE)) - daddy.remove_from_mob(entry) //steals instead of copies so we don't end up with duplicates - H.equip_to_appropriate_slot(entry) - else - H = new daddy.type(get_turf(src)) - H.appearance = daddy.appearance - - H.real_name = daddy.real_name - H.flavor_text = daddy.flavor_text - daddy.dust() +/obj/bluegoast/proc/blueswitch() + daddy.blueswitch(src) qdel(src) + +/** + * Handles applying blueswitch effects to the mob and creating the clone. + * + * **Parameters**: + * - `ghost` - The bluespace ghost triggering the switch. + * + * Returns instance of mob. The created bluespace clone, or null if no clone was created. + */ +/mob/proc/blueswitch(obj/bluegoast/ghost) + var/mob/clone = new type(get_turf(ghost)) + clone.appearance = appearance + clone.real_name = real_name + clone.flavor_text = flavor_text + dust() + return clone + + +/mob/living/exosuit/blueswitch(obj/bluegoast/ghost) + if (!length(pilots)) + return + for (var/mob/pilot in pilots) + remove_pilot(pilot) + var/mob/clone = pilot.blueswitch(ghost) + add_pilot(clone) + + +/mob/living/carbon/human/blueswitch(obj/bluegoast/ghost) + var/mob/living/carbon/human/clone = new(get_turf(ghost), species.name) + clone.dna = dna.Clone() + clone.sync_organ_dna() + clone.UpdateAppearance() + for (var/obj/item/entry in get_equipped_items(TRUE)) + remove_from_mob(entry) //steals instead of copies so we don't end up with duplicates + clone.equip_to_appropriate_slot(entry) + clone.real_name = real_name + clone.flavor_text = flavor_text + dust() + return clone + + /obj/screen/fullscreen/bluespace_overlay icon = 'icons/effects/effects.dmi' icon_state = "mfoam" diff --git a/code/game/gamemodes/endgame/endgame.dm b/code/game/gamemodes/endgame/endgame.dm index da810222f1c8a..0935d03253252 100644 --- a/code/game/gamemodes/endgame/endgame.dm +++ b/code/game/gamemodes/endgame/endgame.dm @@ -2,27 +2,27 @@ * ENDGAME STUFF **********************/ - // Universal State - // Handles stuff like space icon_state, constants, etc. - // Essentially a policy manager. Once shit hits the fan, this changes its policies. - // Called by master controller. +// Universal State +// Handles stuff like space icon_state, constants, etc. +// Essentially a policy manager. Once shit hits the fan, this changes its policies. +// Called by master controller. - // Default shit. +// Default shit. /datum/universal_state // Just for reference, for now. // Might eventually add an observatory job. - var/name = "Normal" - var/desc = "Nothing seems awry." + var/name = "Normal" + var/desc = "Nothing seems awry." - // Sets world.turf, replaces all turfs of type /turf/space. - var/space_type = /turf/space + // Sets world.turf, replaces all turfs of type /turf/space. + var/space_type = /turf/space - // Replaces all turfs of type /turf/space/transit - var/transit_space_type = /turf/space/transit + // Replaces all turfs of type /turf/space/transit + var/transit_space_type = /turf/space/transit - // Chance of a floor or wall getting damaged [0-100] - // Simulates stuff getting broken due to molecular bonds decaying. - var/decay_rate = 0 + // Chance of a floor or wall getting damaged [0-100] + // Simulates stuff getting broken due to molecular bonds decaying. + var/decay_rate = 0 // Actually decay the turf. /datum/universal_state/proc/DecayTurf(turf/T) @@ -50,15 +50,15 @@ // Apply changes when exiting state /datum/universal_state/proc/OnExit() - // Does nothing by default + // Does nothing by default // Apply changes when entering state /datum/universal_state/proc/OnEnter() - // Does nothing by default + // Does nothing by default // Apply changes to a new turf. /datum/universal_state/proc/OnTurfChange(turf/NT) - return + return /datum/universal_state/proc/OverlayAndAmbientSet() return diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 609e242112754..dacafb1a1d594 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -13,14 +13,12 @@ var/global/hadevent = 0 break /proc/high_radiation_event() + for(var/obj/machinery/light/L as anything in SSmachines.get_machinery_of_type(/obj/machinery/light)) + if(isNotStationLevel(L.z)) + continue -/* // Haha, this is way too laggy. I'll keep the prison break though. - for(var/obj/machinery/light/L in world) - if(isNotStationLevel(L.z)) continue L.flicker(50) - sleep(100) -*/ for(var/mob/living/carbon/human/H in GLOB.alive_mobs) var/turf/T = get_turf(H) if(!T) @@ -42,7 +40,7 @@ var/global/hadevent = 0 GLOB.using_map.radiation_detected_announcement() /proc/carp_migration() // -- Darem - for(var/obj/effect/landmark/C in landmarks_list) + for(var/obj/landmark/C in landmarks_list) if(C.name == "carpspawn") new /mob/living/simple_animal/hostile/carp(C.loc) //sleep(100) @@ -58,7 +56,7 @@ var/global/hadevent = 0 for(var/i=1,i<=lightsoutAmount,i++) var/list/possibleEpicentres = list() - for(var/obj/effect/landmark/newEpicentre in landmarks_list) + for(var/obj/landmark/newEpicentre in landmarks_list) if(newEpicentre.name == "lightsout" && !(newEpicentre in epicentreList)) possibleEpicentres += newEpicentre if(length(possibleEpicentres)) @@ -69,12 +67,12 @@ var/global/hadevent = 0 if(!length(epicentreList)) return - for(var/obj/effect/landmark/epicentre in epicentreList) + for(var/obj/landmark/epicentre in epicentreList) for(var/obj/machinery/power/apc/apc in range(epicentre,lightsoutRange)) apc.overload_lighting() else - for(var/obj/machinery/power/apc/apc in SSmachines.machinery) + for(var/obj/machinery/power/apc/apc as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/apc)) apc.overload_lighting() return diff --git a/code/game/gamemodes/events/black_hole.dm b/code/game/gamemodes/events/black_hole.dm index 56b2a69e7ebd8..51c306ac53d79 100644 --- a/code/game/gamemodes/events/black_hole.dm +++ b/code/game/gamemodes/events/black_hole.dm @@ -1,6 +1,6 @@ -/obj/effect/bhole +/obj/bhole name = "black hole" - icon = 'icons/obj/objects.dmi' + icon = 'icons/obj/unused.dmi' desc = "FUCK FUCK FUCK AAAHHH!" icon_state = "bhole3" opacity = 1 @@ -8,28 +8,31 @@ density = FALSE anchored = TRUE -/obj/effect/bhole/Initialize() +/obj/bhole/Initialize() . = ..() spawn(4) controller() -/obj/effect/bhole/proc/controller() +/obj/bhole/proc/controller() while(src) if(!isturf(loc)) qdel(src) return - //DESTROYING STUFF AT THE EPICENTER - for(var/mob/living/M in orange(1,src)) - qdel(M) - for(var/obj/O in orange(1,src)) - qdel(O) var/base_turf = get_base_turf_by_area(src) - for(var/turf/simulated/ST in orange(1,src)) - if(ST.type == base_turf) + for(var/atom/affected_atom as anything in orange(1,src)) + if(isobj(affected_atom) || ismob(affected_atom)) + qdel(affected_atom) + + if(!isturf(affected_atom)) continue - ST.ChangeTurf(base_turf) + + var/turf/affected_turf = affected_atom + if(istype(affected_turf, base_turf)) + continue + + affected_turf.ChangeTurf(base_turf) sleep(6) grav(10, EX_ACT_LIGHT, 10, 0 ) @@ -59,7 +62,7 @@ step(src,pick(GLOB.alldirs)) src.anchored = TRUE -/obj/effect/bhole/proc/grav(r, ex_act_force, pull_chance, turf_removal_chance) +/obj/bhole/proc/grav(r, ex_act_force, pull_chance, turf_removal_chance) if(!isturf(loc)) //blackhole cannot be contained inside anything. Weird stuff might happen qdel(src) return @@ -70,7 +73,7 @@ affect_coord(x-r, y-t, ex_act_force, pull_chance, turf_removal_chance) return -/obj/effect/bhole/proc/affect_coord(x, y, ex_act_force, pull_chance, turf_removal_chance) +/obj/bhole/proc/affect_coord(x, y, ex_act_force, pull_chance, turf_removal_chance) //Get turf at coordinate var/turf/T = locate(x, y, z) if(isnull(T)) return diff --git a/code/game/gamemodes/events/holidays/Christmas.dm b/code/game/gamemodes/events/holidays/Christmas.dm index ae167b1ba5986..45d44e9950553 100644 --- a/code/game/gamemodes/events/holidays/Christmas.dm +++ b/code/game/gamemodes/events/holidays/Christmas.dm @@ -1,6 +1,6 @@ /obj/item/toy/xmas_cracker name = "xmas cracker" - icon = 'icons/obj/christmas.dmi' + icon = 'icons/obj/gifts.dmi' icon_state = "cracker" desc = "Directions for use: Requires two people, one to pull each end." var/cracked = 0 @@ -8,8 +8,9 @@ /obj/item/toy/xmas_cracker/New() ..() -/obj/item/toy/xmas_cracker/attack(mob/target, mob/user) - if( !cracked && istype(target,/mob/living/carbon/human) && (target.stat == CONSCIOUS) && !target.get_active_hand() ) +/obj/item/toy/xmas_cracker/use_before(mob/target, mob/user) + . = FALSE + if (!cracked && istype(target,/mob/living/carbon/human) && (target.stat == CONSCIOUS) && !target.get_active_hand() ) target.visible_message(SPAN_NOTICE("[user] and [target] pop \an [src]! *pop*"), SPAN_NOTICE("You pull \an [src] with [target]! *pop*"), SPAN_NOTICE("You hear a *pop*.")) var/obj/item/paper/Joke = new /obj/item/paper(user.loc) Joke.SetName("[pick("awful","terrible","unfunny")] joke") @@ -32,8 +33,7 @@ other_half.icon_state = "cracker2" target.put_in_active_hand(other_half) playsound(user, 'sound/effects/snap.ogg', 50, 1) - return 1 - return ..() + return TRUE /obj/item/clothing/head/festive name = "festive paper hat" diff --git a/code/game/gamemodes/events/power_failure.dm b/code/game/gamemodes/events/power_failure.dm index d6512d5f1d691..011a8241ab543 100644 --- a/code/game/gamemodes/events/power_failure.dm +++ b/code/game/gamemodes/events/power_failure.dm @@ -3,23 +3,23 @@ if(announce) GLOB.using_map.grid_check_announcement() - for(var/obj/machinery/power/smes/buildable/S in SSmachines.machinery) + for(var/obj/machinery/power/smes/buildable/S as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/smes/buildable)) S.energy_fail(rand(15 * severity,30 * severity)) - for(var/obj/machinery/power/apc/C in SSmachines.machinery) + for(var/obj/machinery/power/apc/C as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/apc)) if(!C.is_critical && (!affected_z_levels || (C.z in affected_z_levels))) C.energy_fail(rand(30 * severity,60 * severity)) /proc/power_restore(announce = 1) if(announce) GLOB.using_map.grid_restored_announcement() - for(var/obj/machinery/power/apc/C in SSmachines.machinery) + for(var/obj/machinery/power/apc/C as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/apc)) C.failure_timer = 0 var/obj/item/cell/cell = C.get_cell() if(cell) cell.charge = cell.maxcharge - for(var/obj/machinery/power/smes/S in SSmachines.machinery) + for(var/obj/machinery/power/smes/S as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/smes)) S.failure_timer = 0 S.charge = S.capacity S.update_icon() @@ -29,7 +29,7 @@ if(announce) command_announcement.Announce("All SMESs on the [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = GLOB.using_map.grid_restored_sound) - for(var/obj/machinery/power/smes/S in SSmachines.machinery) + for(var/obj/machinery/power/smes/S as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/smes)) S.failure_timer = 0 S.charge = S.capacity S.output_level = S.output_level_max diff --git a/code/game/gamemodes/events/wormholes.dm b/code/game/gamemodes/events/wormholes.dm index 065f7c2ae7c30..2252e65aade5a 100644 --- a/code/game/gamemodes/events/wormholes.dm +++ b/code/game/gamemodes/events/wormholes.dm @@ -50,10 +50,10 @@ //maybe this proc can even be used as an admin tool for teleporting players without ruining immulsions? /proc/create_wormhole(turf/enter as turf, turf/exit as turf) - var/obj/effect/portal/P = new /obj/effect/portal(enter) + var/obj/portal/P = new /obj/portal(enter) P.target = exit P.creator = null - P.icon = 'icons/obj/objects.dmi' + P.icon = 'icons/obj/unused.dmi' P.failchance = 0 P.icon_state = "anom" P.SetName("wormhole") diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 6168dad92ba58..202ae45e6491e 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -212,11 +212,11 @@ var/global/list/additional_antag_types = list() refresh_event_modifiers() - addtimer(new Callback(null, /proc/display_roundstart_logout_report), ROUNDSTART_LOGOUT_REPORT_TIME) + addtimer(CALLBACK(null, GLOBAL_PROC_REF(display_roundstart_logout_report)), ROUNDSTART_LOGOUT_REPORT_TIME) var/welcome_delay = rand(waittime_l, waittime_h) - addtimer(new Callback(GLOB.using_map, /datum/map/proc/send_welcome), welcome_delay) - addtimer(new Callback(src, .proc/announce_ert_disabled), welcome_delay + 10 SECONDS) + addtimer(CALLBACK(GLOB.using_map, TYPE_PROC_REF(/datum/map, send_welcome)), welcome_delay) + addtimer(CALLBACK(src, PROC_REF(announce_ert_disabled)), welcome_delay + 10 SECONDS) //Assign all antag types for this game mode. Any players spawned as antags earlier should have been removed from the pending list, so no need to worry about those. for(var/datum/antagonist/antag in antag_templates) diff --git a/code/game/gamemodes/game_mode_latespawn.dm b/code/game/gamemodes/game_mode_latespawn.dm index e100de1013eed..d403706708dc4 100644 --- a/code/game/gamemodes/game_mode_latespawn.dm +++ b/code/game/gamemodes/game_mode_latespawn.dm @@ -14,10 +14,8 @@ return FALSE if(evacuation_controller.is_evacuating() || evacuation_controller.has_evacuated()) return FALSE - // Don't create auto-antags in the last twenty minutes of the round, but only if the vote interval is longer than 20 minutes - if((config.vote_autotransfer_interval > 20 MINUTES) && (transfer_controller.time_till_transfer_vote() < 20 MINUTES)) + if (SSroundend.vote_check && SSroundend.vote_cache < config.transfer_vote_block_antag_time) return FALSE - return TRUE //This can be overriden in case a game mode needs to do stuff when a player latejoins diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm index 01e281f3185e3..4a6713fe8cbb4 100644 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm +++ b/code/game/gamemodes/malfunction/newmalf_ability_trees/HELPERS.dm @@ -153,10 +153,11 @@ // Parameters: None // Description: Returns a list of all unhacked APCs. APCs on station Zs are on top of the list. /proc/get_unhacked_apcs(mob/living/silicon/ai/user) + RETURN_TYPE(/list) var/list/station_apcs = list() var/list/offstation_apcs = list() - for(var/obj/machinery/power/apc/A in SSmachines.machinery) + for(var/obj/machinery/power/apc/A as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/apc)) if(A.hacker && A.hacker == user) continue if(A.z in GLOB.using_map.station_levels) @@ -171,6 +172,7 @@ // Helper procs which return lists of relevant mobs. /proc/get_unlinked_cyborgs(mob/living/silicon/ai/A) + RETURN_TYPE(/list) if(!A || !istype(A)) return @@ -184,11 +186,13 @@ return L /proc/get_linked_cyborgs(mob/living/silicon/ai/A) + RETURN_TYPE(/list) if(!A || !istype(A)) return return A.connected_robots /proc/get_other_ais(mob/living/silicon/ai/A) + RETURN_TYPE(/list) if(!A || !istype(A)) return @@ -208,6 +212,7 @@ admin_attack_log(A, null, message, null, message) /proc/check_for_interception() + RETURN_TYPE(/mob/living/silicon/ai) for(var/mob/living/silicon/ai/A in SSmobs.mob_list) if(A.intercepts_communication) return A diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_interdiction.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_interdiction.dm index a4bdedf0a3861..d68b10a837ee0 100644 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_interdiction.dm +++ b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_interdiction.dm @@ -10,28 +10,28 @@ // BEGIN RESEARCH DATUMS /datum/malf_research_ability/interdiction/recall_shuttle - ability = new/datum/game_mode/malfunction/verb/recall_shuttle() + ability = /datum/game_mode/malfunction/verb/recall_shuttle price = 250 next = new/datum/malf_research_ability/interdiction/unlock_cyborg() name = "T1 - Recall Shuttle" /datum/malf_research_ability/interdiction/unlock_cyborg - ability = new/datum/game_mode/malfunction/verb/unlock_cyborg() + ability = /datum/game_mode/malfunction/verb/unlock_cyborg price = 1000 next = new/datum/malf_research_ability/interdiction/hack_cyborg() name = "T2 - Unlock Cyborg" /datum/malf_research_ability/interdiction/hack_cyborg - ability = new/datum/game_mode/malfunction/verb/hack_cyborg() + ability = /datum/game_mode/malfunction/verb/hack_cyborg price = 2000 next = new/datum/malf_research_ability/interdiction/hack_ai() name = "T3 - Hack Cyborg" /datum/malf_research_ability/interdiction/hack_ai - ability = new/datum/game_mode/malfunction/verb/hack_ai() + ability = /datum/game_mode/malfunction/verb/hack_ai price = 4000 name = "T4 - Hack AI" @@ -83,19 +83,21 @@ if(!target) var/list/robots = list() var/list/robot_names = list() - for(var/mob/living/silicon/robot/R in world) - if(istype(R, /mob/living/silicon/robot/drone)) // No drones. + for(var/mob/living/silicon/robot/R as anything in SSmobs.get_mobs_of_type(/mob/living/silicon/robot)) + if(isdrone(R)) // No drones. continue + if(R.connected_ai != user) // No robots linked to other AIs continue + if(R.lockcharge) robots += R robot_names += R.name + if(!length(robots)) to_chat(user, "No locked cyborgs connected.") return - var/targetname = input("Select unlock target: ") in robot_names for(var/mob/living/silicon/robot/R in robots) if(targetname == R.name) diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_manipulation.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_manipulation.dm index adf06528ca7fa..5364d05b78d79 100644 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_manipulation.dm +++ b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_manipulation.dm @@ -11,34 +11,34 @@ // BEGIN RESEARCH DATUMS /datum/malf_research_ability/manipulation/electrical_pulse - ability = new/datum/game_mode/malfunction/verb/electrical_pulse() + ability = /datum/game_mode/malfunction/verb/electrical_pulse price = 250 next = new/datum/malf_research_ability/manipulation/reboot_camera() name = "T1 - Electrical Pulse" /datum/malf_research_ability/manipulation/reboot_camera - ability = new/datum/game_mode/malfunction/verb/reboot_camera() + ability = /datum/game_mode/malfunction/verb/reboot_camera price = 1000 next = new/datum/malf_research_ability/manipulation/emergency_forcefield() name = "T2 - Reboot Camera" /datum/malf_research_ability/manipulation/emergency_forcefield - ability = new/datum/game_mode/malfunction/verb/emergency_forcefield() + ability = /datum/game_mode/malfunction/verb/emergency_forcefield price = 2000 next = new/datum/malf_research_ability/manipulation/machine_overload() name = "T3 - Emergency Forcefield" /datum/malf_research_ability/manipulation/machine_overload - ability = new/datum/game_mode/malfunction/verb/machine_overload() + ability = /datum/game_mode/malfunction/verb/machine_overload price = 4000 next = new/datum/malf_research_ability/manipulation/machine_upgrade() name = "T4 - Machine Overload" /datum/malf_research_ability/manipulation/machine_upgrade - ability = new/datum/game_mode/malfunction/verb/machine_upgrade() + ability = /datum/game_mode/malfunction/verb/machine_upgrade price = 4000 name = "T5 - Machine Upgrade" @@ -54,7 +54,7 @@ if(!ability_prechecks(user, price) || !ability_pay(user,price)) return to_chat(user, "Sending feedback pulse...") - for(var/obj/machinery/power/apc/AP in SSmachines.machinery) + for(var/obj/machinery/power/apc/AP as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/apc)) if(prob(5)) AP.overload_lighting() if(prob(2.5) && (get_area(AP) != get_area(user))) // Very very small chance to actually destroy the APC, but not if the APC is powering the AI. @@ -89,7 +89,7 @@ log_ability_use(user, "reset camera", target) -/datum/game_mode/malfunction/verb/emergency_forcefield(turf/T as turf in world) +/datum/game_mode/malfunction/verb/emergency_forcefield(turf/T as turf in ALL_TURFS()) set name = "Emergency Forcefield" set desc = "275 CPU - Uses the emergency shielding system to create temporary barrier which lasts for few minutes, but won't resist gunfire." set category = "Software" @@ -108,7 +108,7 @@ user.hacking = 0 -/datum/game_mode/malfunction/verb/machine_overload(obj/machinery/M in SSmachines.machinery) +/datum/game_mode/malfunction/verb/machine_overload(obj/machinery/M as anything in SSmachines.get_all_machinery()) set name = "Machine Overload" set desc = "400 CPU - Causes cyclic short-circuit in machine, resulting in weak explosion after some time." set category = "Software" @@ -171,7 +171,7 @@ var/obj/machinery/power/terminal/terminal = temp_apc && temp_apc.terminal() if(terminal && terminal.powernet) terminal.powernet.trigger_warning(50) // Long alarm - // Such power surges are not good for APC electronics/cell in general. + // Such power surges are not good for APC electronics/cell in general. if(prob(explosion_intensity)) temp_apc.emp_act(1) @@ -183,7 +183,7 @@ if(M) qdel(M) -/datum/game_mode/malfunction/verb/machine_upgrade(obj/machinery/M in SSmachines.machinery) +/datum/game_mode/malfunction/verb/machine_upgrade(obj/machinery/M as anything in SSmachines.get_all_machinery()) set name = "Machine Upgrade" set desc = "800 CPU - Pushes existing hardware to it's technological limits by rapidly upgrading it's software." set category = "Software" diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm index 82f94e3b2e436..7f41e1c09b30c 100644 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm +++ b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_networking.dm @@ -10,28 +10,28 @@ // BEGIN RESEARCH DATUMS /datum/malf_research_ability/networking/basic_hack - ability = new/datum/game_mode/malfunction/verb/basic_encryption_hack() + ability = /datum/game_mode/malfunction/verb/basic_encryption_hack price = 25 // Until you have this ability your CPU generation sucks, therefore it's very cheap. next = new/datum/malf_research_ability/networking/advanced_hack() name = "T1 - Basic Encryption Hack" /datum/malf_research_ability/networking/advanced_hack - ability = new/datum/game_mode/malfunction/verb/advanced_encryption_hack() + ability = /datum/game_mode/malfunction/verb/advanced_encryption_hack price = 1000 next = new/datum/malf_research_ability/networking/elite_hack() name = "T2 - Advanced Encryption Hack" /datum/malf_research_ability/networking/elite_hack - ability = new/datum/game_mode/malfunction/verb/elite_encryption_hack() + ability = /datum/game_mode/malfunction/verb/elite_encryption_hack price = 2000 next = new/datum/malf_research_ability/networking/system_override() name = "T3 - Elite Encryption Hack" /datum/malf_research_ability/networking/system_override - ability = new/datum/game_mode/malfunction/verb/system_override() + ability = /datum/game_mode/malfunction/verb/system_override price = 4000 name = "T4 - System Override" @@ -162,7 +162,7 @@ log_ability_use(user, "system override (STARTED)") var/list/remaining_apcs = list() var/list/valid_zlevels = GetConnectedZlevels(user.z) - for(var/obj/machinery/power/apc/A in SSmachines.machinery) + for(var/obj/machinery/power/apc/A as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/apc)) if(!(A.z in valid_zlevels)) // Only station APCs continue if(A.hacker == user || A.aidisabled) // This one is already hacked, or AI control is disabled on it. @@ -206,7 +206,7 @@ to_chat(user, "## REACHABLE APC SYSTEMS OVERTAKEN. BYPASSING PRIMARY FIREWALL.") sleep(1 MINUTE) // Hack all APCs, including those built during hack sequence. - for(var/obj/machinery/power/apc/A in SSmachines.machinery) + for(var/obj/machinery/power/apc/A as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/apc)) if((!A.hacker || A.hacker != src) && !A.aidisabled && (A.z in valid_zlevels)) A.ai_hack(src) @@ -217,4 +217,4 @@ command_announcement.Announce("Our system administrators just reported that we've been locked out from your control network. Whoever did this now has full access to [GLOB.using_map.station_name]'s systems.", "Network Administration Center") user.hack_can_fail = 0 user.system_override = 2 - user.verbs += new/datum/game_mode/malfunction/verb/ai_destroy_station() + user.verbs += /datum/game_mode/malfunction/verb/ai_destroy_station diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_passive.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_passive.dm index 8d62253f4a238..0382fb1e33167 100644 --- a/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_passive.dm +++ b/code/game/gamemodes/malfunction/newmalf_ability_trees/tree_passive.dm @@ -10,14 +10,14 @@ // BEGIN RESEARCH DATUMS /datum/malf_research_ability/passive/intellicard_interception - ability = new/datum/game_mode/malfunction/verb/intellicard_interception() + ability = /datum/game_mode/malfunction/verb/intellicard_interception price = 250 next = new/datum/malf_research_ability/passive/subtle_algorithms() name = "T1 - Intellicard Interception" /datum/malf_research_ability/passive/subtle_algorithms - ability = new/datum/game_mode/malfunction/verb/subtle_algorithms() + ability = /datum/game_mode/malfunction/verb/subtle_algorithms price = 1000 next = new/datum/malf_research_ability/passive/relay_suppression() name = "T2 - Subtle Algorithms" diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index b0ac904a72726..4b84ebe9c6c19 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -31,8 +31,8 @@ /singleton/vv_set_handler/meteor_severity_handler handled_type = /datum/game_mode/meteor handled_vars = list( - "meteor_severity" = /datum/game_mode/meteor/proc/set_meteor_severity, - "meteor_wave_delay" = /datum/game_mode/meteor/proc/set_meteor_wave_delay + "meteor_severity" = TYPE_PROC_REF(/datum/game_mode/meteor, set_meteor_severity), + "meteor_wave_delay" = TYPE_PROC_REF(/datum/game_mode/meteor, set_meteor_wave_delay) ) /datum/game_mode/meteor/proc/set_meteor_severity(value) @@ -58,12 +58,12 @@ /datum/game_mode/meteor/proc/on_enter_field() alert_sent = 2 command_announcement.Announce(start_text, alert_title) - for(var/obj/machinery/shield_diffuser/SD in SSmachines.machinery) + for(var/obj/machinery/shield_diffuser/SD as anything in SSmachines.get_machinery_of_type(/obj/machinery/shield_diffuser)) SD.meteor_alarm(INFINITY) if(GLOB.using_map.use_overmap) var/area/map = locate(/area/overmap) for(var/turf/T in map) - T.overlays += image('icons/obj/overmap.dmi', "meteor[rand(1,4)]") + T.AddOverlays(image('icons/obj/overmap.dmi', "meteor[rand(1,4)]")) next_wave = round_duration_in_ticks + meteor_wave_delay /datum/game_mode/meteor/process() diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 4d8c00833910a..4ceae7a29cf1f 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -1,64 +1,64 @@ //Meteor groups, used for various random events and the Meteor gamemode. // Dust, used by space dust event and during earliest stages of meteor mode. -var/global/list/meteors_dust = list(/obj/effect/meteor/dust) +var/global/list/meteors_dust = list(/obj/meteor/dust) // Standard meteors, used during early stages of the meteor gamemode. var/global/list/meteors_normal = list(\ - /obj/effect/meteor/medium=8,\ - /obj/effect/meteor/dust=3,\ - /obj/effect/meteor/irradiated=3,\ - /obj/effect/meteor/big=3,\ - /obj/effect/meteor/flaming=1,\ - /obj/effect/meteor/golden=1,\ - /obj/effect/meteor/silver=1\ + /obj/meteor/medium=8,\ + /obj/meteor/dust=3,\ + /obj/meteor/irradiated=3,\ + /obj/meteor/big=3,\ + /obj/meteor/flaming=1,\ + /obj/meteor/golden=1,\ + /obj/meteor/silver=1\ ) // Threatening meteors, used during the meteor gamemode. var/global/list/meteors_threatening = list(\ - /obj/effect/meteor/big=10,\ - /obj/effect/meteor/medium=5,\ - /obj/effect/meteor/golden=3,\ - /obj/effect/meteor/silver=3,\ - /obj/effect/meteor/flaming=3,\ - /obj/effect/meteor/irradiated=3,\ - /obj/effect/meteor/emp=3\ + /obj/meteor/big=10,\ + /obj/meteor/medium=5,\ + /obj/meteor/golden=3,\ + /obj/meteor/silver=3,\ + /obj/meteor/flaming=3,\ + /obj/meteor/irradiated=3,\ + /obj/meteor/emp=3\ ) // Catastrophic meteors, pretty dangerous without shields and used during the meteor gamemode. var/global/list/meteors_catastrophic = list(\ - /obj/effect/meteor/big=75,\ - /obj/effect/meteor/flaming=10,\ - /obj/effect/meteor/irradiated=10,\ - /obj/effect/meteor/emp=10,\ - /obj/effect/meteor/medium=5,\ - /obj/effect/meteor/golden=4,\ - /obj/effect/meteor/silver=4,\ - /obj/effect/meteor/tunguska=1\ + /obj/meteor/big=75,\ + /obj/meteor/flaming=10,\ + /obj/meteor/irradiated=10,\ + /obj/meteor/emp=10,\ + /obj/meteor/medium=5,\ + /obj/meteor/golden=4,\ + /obj/meteor/silver=4,\ + /obj/meteor/tunguska=1\ ) // Armageddon meteors, very dangerous, and currently used only during the meteor gamemode. var/global/list/meteors_armageddon = list(\ - /obj/effect/meteor/big=25,\ - /obj/effect/meteor/flaming=10,\ - /obj/effect/meteor/irradiated=10,\ - /obj/effect/meteor/emp=10,\ - /obj/effect/meteor/medium=3,\ - /obj/effect/meteor/tunguska=3,\ - /obj/effect/meteor/golden=2,\ - /obj/effect/meteor/silver=2\ + /obj/meteor/big=25,\ + /obj/meteor/flaming=10,\ + /obj/meteor/irradiated=10,\ + /obj/meteor/emp=10,\ + /obj/meteor/medium=3,\ + /obj/meteor/tunguska=3,\ + /obj/meteor/golden=2,\ + /obj/meteor/silver=2\ ) // Cataclysm meteor selection. Very very dangerous and effective even against shields. Used in late game meteor gamemode only. var/global/list/meteors_cataclysm = list(\ - /obj/effect/meteor/big=40,\ - /obj/effect/meteor/emp=20,\ - /obj/effect/meteor/tunguska=20,\ - /obj/effect/meteor/irradiated=10,\ - /obj/effect/meteor/golden=10,\ - /obj/effect/meteor/silver=10,\ - /obj/effect/meteor/flaming=10,\ - /obj/effect/meteor/supermatter=1\ + /obj/meteor/big=40,\ + /obj/meteor/emp=20,\ + /obj/meteor/tunguska=20,\ + /obj/meteor/irradiated=10,\ + /obj/meteor/golden=10,\ + /obj/meteor/silver=10,\ + /obj/meteor/flaming=10,\ + /obj/meteor/supermatter=1\ ) @@ -76,13 +76,14 @@ var/global/list/meteors_cataclysm = list(\ var/turf/pickedgoal = spaceDebrisFinishLoc(startSide, zlevel) var/Me = pickweight(meteortypes) - var/obj/effect/meteor/M = new Me(pickedstart) + var/obj/meteor/M = new Me(pickedstart) M.dest = pickedgoal spawn(0) walk_towards(M, M.dest, 3) return /proc/spaceDebrisStartLoc(startSide, Z) + RETURN_TYPE(/turf) var/starty var/startx switch(startSide) @@ -102,6 +103,7 @@ var/global/list/meteors_cataclysm = list(\ return T /proc/spaceDebrisFinishLoc(startSide, Z) + RETURN_TYPE(/turf) var/endy var/endx switch(startSide) @@ -124,7 +126,7 @@ var/global/list/meteors_cataclysm = list(\ //The meteor effect ////////////////////// -/obj/effect/meteor +/obj/meteor name = "the concept of meteor" desc = "You should probably run instead of gawking at this." icon = 'icons/obj/meteor.dmi' @@ -143,47 +145,47 @@ var/global/list/meteors_cataclysm = list(\ var/move_count = 0 -/obj/effect/meteor/proc/get_shield_damage() +/obj/meteor/proc/get_shield_damage() return max(((max(hits, 2)) * (heavy + 1) * rand(30, 60)) / hitpwr , 0) -/obj/effect/meteor/New() +/obj/meteor/New() ..() z_original = z -/obj/effect/meteor/Initialize() +/obj/meteor/Initialize() . = ..() GLOB.meteor_list += src -/obj/effect/meteor/Move() +/obj/meteor/Move() . = ..() //process movement... move_count++ if(loc == dest) qdel(src) -/obj/effect/meteor/touch_map_edge() +/obj/meteor/touch_map_edge() if(move_count > TRANSITIONEDGE) qdel(src) -/obj/effect/meteor/Destroy() +/obj/meteor/Destroy() walk(src,0) //this cancels the walk_towards() proc GLOB.meteor_list -= src return ..() -/obj/effect/meteor/Initialize() +/obj/meteor/Initialize() . = ..() if (!ismissile) SpinAnimation() -/obj/effect/meteor/Bump(atom/A) +/obj/meteor/Bump(atom/A) ..() if(A && !QDELETED(src)) // Prevents explosions and other effects when we were deleted by whatever we Bumped() - currently used by shields. ram_turf(get_turf(A)) get_hit() //should only get hit once per move attempt -/obj/effect/meteor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - return istype(mover, /obj/effect/meteor) ? 1 : ..() +/obj/meteor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) + return istype(mover, /obj/meteor) ? 1 : ..() -/obj/effect/meteor/proc/ram_turf(turf/T) +/obj/meteor/proc/ram_turf(turf/T) //first bust whatever is in the turf for(var/atom/A in T) if(A != src && !A.CanPass(src, src.loc, 0.5, 0)) //only ram stuff that would actually block us @@ -195,28 +197,36 @@ var/global/list/meteors_cataclysm = list(\ //process getting 'hit' by colliding with a dense object //or randomly when ramming turfs -/obj/effect/meteor/proc/get_hit() +/obj/meteor/proc/get_hit() hits-- if(hits <= 0) make_debris() meteor_effect() qdel(src) -/obj/effect/meteor/ex_act() +/obj/meteor/ex_act() return -/obj/effect/meteor/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/pickaxe)) + +/obj/meteor/use_tool(obj/item/tool, mob/user, list/click_params) + // Pickaxe - Delete meteor + if (istype(tool, /obj/item/pickaxe)) + user.visible_message( + SPAN_WARNING("\The [user] hits \the [src] with \a [tool], breaking it apart!"), + SPAN_WARNING("You hit \the [src] with \the [tool], breaking it apart!") + ) qdel(src) - return - ..() + return TRUE + + return ..() + -/obj/effect/meteor/proc/make_debris() +/obj/meteor/proc/make_debris() for(var/throws = dropamt, throws > 0, throws--) var/obj/item/O = new meteordrop(get_turf(src)) O.throw_at(dest, 5, 10) -/obj/effect/meteor/proc/meteor_effect() +/obj/meteor/proc/meteor_effect() if(heavy) for(var/mob/M in GLOB.player_list) var/turf/T = get_turf(M) @@ -231,7 +241,7 @@ var/global/list/meteors_cataclysm = list(\ /////////////////////// //Dust -/obj/effect/meteor/dust +/obj/meteor/dust name = "space dust" icon_state = "dust" pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GRILLE @@ -241,81 +251,81 @@ var/global/list/meteors_cataclysm = list(\ meteordrop = /obj/item/ore/glass //Medium-sized -/obj/effect/meteor/medium +/obj/meteor/medium name = "meteor" dropamt = 2 -/obj/effect/meteor/medium/meteor_effect() +/obj/meteor/medium/meteor_effect() ..() explosion(src.loc, 3, EX_ACT_HEAVY, 0, turf_breaker = TRUE) //Large-sized -/obj/effect/meteor/big +/obj/meteor/big name = "large meteor" icon_state = "large" hits = 6 heavy = 1 dropamt = 3 -/obj/effect/meteor/big/meteor_effect() +/obj/meteor/big/meteor_effect() ..() explosion(src.loc, 6, adminlog = 0, turf_breaker = TRUE) //Flaming meteor -/obj/effect/meteor/flaming +/obj/meteor/flaming name = "flaming meteor" icon_state = "flaming" hits = 5 heavy = 1 meteordrop = /obj/item/ore/phoron -/obj/effect/meteor/flaming/meteor_effect() +/obj/meteor/flaming/meteor_effect() ..() explosion(src.loc, 6, adminlog = 0, z_transfer = 0, shaped = 5, turf_breaker = TRUE) //Radiation meteor -/obj/effect/meteor/irradiated +/obj/meteor/irradiated name = "glowing meteor" icon_state = "glowing" heavy = 1 meteordrop = /obj/item/ore/uranium -/obj/effect/meteor/irradiated/meteor_effect() +/obj/meteor/irradiated/meteor_effect() ..() explosion(src.loc, 4, EX_ACT_LIGHT, 0, turf_breaker = TRUE) - new /obj/effect/decal/cleanable/greenglow(get_turf(src)) + new /obj/decal/cleanable/greenglow(get_turf(src)) SSradiation.radiate(src, 50) -/obj/effect/meteor/golden +/obj/meteor/golden name = "golden meteor" icon_state = "glowing" desc = "Shiny! But also deadly." meteordrop = /obj/item/ore/gold -/obj/effect/meteor/silver +/obj/meteor/silver name = "silver meteor" icon_state = "glowing_blue" desc = "Shiny! But also deadly." meteordrop = /obj/item/ore/silver -/obj/effect/meteor/emp +/obj/meteor/emp name = "conducting meteor" icon_state = "glowing_blue" desc = "Hide your floppies!" meteordrop = /obj/item/ore/osmium dropamt = 2 -/obj/effect/meteor/emp/meteor_effect() +/obj/meteor/emp/meteor_effect() ..() // Best case scenario: Comparable to a low-yield EMP grenade. // Worst case scenario: Comparable to a standard yield EMP grenade. empulse(src, rand(2, 4), rand(4, 10)) -/obj/effect/meteor/emp/get_shield_damage() +/obj/meteor/emp/get_shield_damage() return ..() * rand(2,4) //Station buster Tunguska -/obj/effect/meteor/tunguska +/obj/meteor/tunguska name = "tunguska meteor" icon_state = "flaming" desc = "Your life briefly passes before your eyes the moment you lay them on this monstrosity." @@ -324,28 +334,28 @@ var/global/list/meteors_cataclysm = list(\ heavy = 1 meteordrop = /obj/item/ore/diamond // Probably means why it penetrates the hull so easily before exploding. -/obj/effect/meteor/tunguska/meteor_effect() +/obj/meteor/tunguska/meteor_effect() ..() explosion(src.loc, 18, adminlog = 0, turf_breaker = TRUE) // This is the final solution against shields - a single impact can bring down most shield generators. -/obj/effect/meteor/supermatter +/obj/meteor/supermatter name = "supermatter shard" desc = "Oh god, what will be next..?" - icon = 'icons/obj/supermatter.dmi' + icon = 'icons/obj/machines/power/supermatter.dmi' icon_state = "darkmatter_old" -/obj/effect/meteor/supermatter/meteor_effect() +/obj/meteor/supermatter/meteor_effect() ..() explosion(src.loc, 6, adminlog = 0, turf_breaker = TRUE) for(var/obj/machinery/power/apc/A in range(rand(12, 20), src)) A.energy_fail(round(10 * rand(8, 12))) -/obj/effect/meteor/supermatter/get_shield_damage() +/obj/meteor/supermatter/get_shield_damage() return ..() * rand(80, 120) //Missiles, for events and so on -/obj/effect/meteor/supermatter/missile +/obj/meteor/supermatter/missile name = "photon torpedo" desc = "An advanded warhead designed to tactically destroy space installations." icon = 'icons/obj/missile.dmi' @@ -354,7 +364,7 @@ var/global/list/meteors_cataclysm = list(\ ismissile = TRUE dropamt = 0 -/obj/effect/meteor/medium/missile +/obj/meteor/medium/missile name = "missile" desc = "Some kind of missile." icon = 'icons/obj/missile.dmi' @@ -363,7 +373,7 @@ var/global/list/meteors_cataclysm = list(\ ismissile = TRUE dropamt = 0 -/obj/effect/meteor/big/missile +/obj/meteor/big/missile name = "high-yield missile" desc = "Some kind of missile." icon = 'icons/obj/missile.dmi' @@ -372,7 +382,7 @@ var/global/list/meteors_cataclysm = list(\ ismissile = TRUE dropamt = 0 -/obj/effect/meteor/flaming/missile +/obj/meteor/flaming/missile name = "incendiary missile" desc = "Some kind of missile." icon = 'icons/obj/missile.dmi' @@ -381,7 +391,7 @@ var/global/list/meteors_cataclysm = list(\ ismissile = TRUE dropamt = 0 -/obj/effect/meteor/emp/missile +/obj/meteor/emp/missile name = "ion torpedo" desc = "Some kind of missile." icon = 'icons/obj/missile.dmi' @@ -390,7 +400,7 @@ var/global/list/meteors_cataclysm = list(\ ismissile = TRUE dropamt = 0 -/obj/effect/meteor/supermatter/missile/admin_missile +/obj/meteor/supermatter/missile/admin_missile name = "Hull Buster" desc = "A highly advanced warhead capable of destroying even the most well-armoured space installations." icon = 'icons/obj/missile.dmi' @@ -400,11 +410,11 @@ var/global/list/meteors_cataclysm = list(\ hitpwr = EX_ACT_DEVASTATING hits = 6 -/obj/effect/meteor/supermatter/missile/admin_missile/meteor_effect() +/obj/meteor/supermatter/missile/admin_missile/meteor_effect() explosion(loc, 7, adminlog = 0, shaped = get_dir(src, dest), turf_breaker = TRUE) -/obj/effect/meteor/supermatter/missile/sabot_round +/obj/meteor/supermatter/missile/sabot_round name = "Sabot Round" desc = "A warhead that penetrates the hull and detonates to send a secondary warhead further in before exploding for massive damage." icon = 'icons/obj/missile.dmi' @@ -414,14 +424,14 @@ var/global/list/meteors_cataclysm = list(\ hitpwr = EX_ACT_HEAVY hits = 6 -/obj/effect/meteor/supermatter/missile/sabot_round/meteor_effect() +/obj/meteor/supermatter/missile/sabot_round/meteor_effect() explosion(loc, 5, EX_ACT_LIGHT, 0, shaped = TRUE, turf_breaker = TRUE) - var/obj/effect/meteor/supermatter/missile/sabot_secondary_round/M = new(get_turf(src)) + var/obj/meteor/supermatter/missile/sabot_secondary_round/M = new(get_turf(src)) M.dest = dest spawn(0) walk_towards(M, dest, 3) -/obj/effect/meteor/supermatter/missile/sabot_secondary_round +/obj/meteor/supermatter/missile/sabot_secondary_round name = "Sabot Round Secondary" desc = "Secondary warhead of the Sabot Round, causes extreme damage." icon = 'icons/obj/missile.dmi' @@ -431,5 +441,5 @@ var/global/list/meteors_cataclysm = list(\ hitpwr = EX_ACT_DEVASTATING hits = 4 -/obj/effect/meteor/supermatter/missile/sabot_secondary_round/meteor_effect() +/obj/meteor/supermatter/missile/sabot_secondary_round/meteor_effect() explosion(loc, 6, shaped = get_dir(src, dest), turf_breaker = TRUE) diff --git a/code/game/gamemodes/ninja/ninja.dm b/code/game/gamemodes/ninja/ninja.dm index f34fd21df5f2c..0405699da803e 100644 --- a/code/game/gamemodes/ninja/ninja.dm +++ b/code/game/gamemodes/ninja/ninja.dm @@ -1,15 +1,15 @@ /datum/game_mode/ninja - name = "Ninja" - round_description = "An agent of the Spider Clan is onboard!" + name = "Operative" + round_description = "An elite operative is on board!" extended_round_description = "What was that?! Was that a person or did your eyes just play tricks on you? \ - You have no idea. That slim-suited, cryptic individual is an enigma to you and all of your knowledge. \ + You have no idea. That hardsuited, cryptic individual is an enigma to you and all of your knowledge. \ Their purpose is unknown. Their mission is unknown. How they arrived to this secure and isolated \ - section of the galaxy, you don't know. What you do know is that there is a silent shadow-stalker piercing \ - through your defenses with technological capabilities eons ahead of your time. They can avoid \ - the omniscience of the AI and rival the most hardened weapons your people are capable of. Tread lightly and \ - only hope this unknown assassin isn't here for you." - config_tag = "ninja" - required_players = 5 + section of the galaxy, you don't know. What you do know is that there is a smooth-criminal piercing \ + through your defenses with technological capabilities decades ahead of your time. The equipment they \ + carry is enough to turn heads far enough that they pop right off. Tread lightly and only hope this operative \ + isn't here for you." + config_tag = "operative" + required_players = 10 required_enemies = 1 end_on_antag_death = FALSE antag_tags = list(MODE_NINJA) diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index 7ee6085a66a19..533b62095bef5 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -1,6 +1,6 @@ /obj/item/pinpointer name = "pinpointer" - icon = 'icons/obj/pinpointer.dmi' + icon = 'icons/obj/tools/pinpointer.dmi' icon_state = "pinoff" obj_flags = OBJ_FLAG_CONDUCTIBLE slot_flags = SLOT_BELT @@ -74,31 +74,31 @@ beeping-- /obj/item/pinpointer/on_update_icon() - overlays.Cut() + ClearOverlays() if(!active) return if(!target || !target.resolve()) - overlays += image(icon,"pin_invalid") + AddOverlays(image(icon,"pin_invalid")) return var/turf/here = get_turf(src) var/turf/there = get_turf(target.resolve()) if(!istype(there)) - overlays += image(icon,"pin_invalid") + AddOverlays(image(icon,"pin_invalid")) return if(here == there) - overlays += image(icon,"pin_here") + AddOverlays(image(icon,"pin_here")) return if(!(there.z in GetConnectedZlevels(here.z))) - overlays += image(icon,"pin_invalid") + AddOverlays(image(icon,"pin_invalid")) return if(here.z > there.z) - overlays += image(icon,"pin_down") + AddOverlays(image(icon,"pin_down")) return if(here.z < there.z) - overlays += image(icon,"pin_up") + AddOverlays(image(icon,"pin_up")) return dir = get_dir(here,there) @@ -110,7 +110,7 @@ pointer.color = COLOR_RED else pointer.color = COLOR_YELLOW - overlays += pointer + AddOverlays(pointer) //Nuke ops locator /obj/item/pinpointer/nukeop diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index d39c6046dab08..56634a714f968 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -427,7 +427,7 @@ var/global/list/all_objectives = list() explanation_text = "Reproduce at least once." /datum/objective/ninja_highlander - explanation_text = "You aspire to be a Grand Master of the Spider Clan. Kill all of your fellow acolytes." + explanation_text = "You aspire to be a Grand Master of the Spider Clan. Kill all of your fellow acolytes." /datum/objective/cult/survive explanation_text = "Our knowledge must live on." diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm index b0921a4710c5b..4fe55bc14c3ea 100644 --- a/code/game/gamemodes/setupgame.dm +++ b/code/game/gamemodes/setupgame.dm @@ -33,7 +33,7 @@ // Standard muts, imported from older code above. GLOB.BLINDBLOCK = getAssignedBlock("BLINDED", numsToAssign) GLOB.DEAFBLOCK = getAssignedBlock("DEAFENED", numsToAssign) - GLOB.HULKBLOCK = getAssignedBlock("HULK", numsToAssign, DNA_HARD_BOUNDS) + GLOB.FERALBLOCK = getAssignedBlock("FERAL", numsToAssign, DNA_HARD_BOUNDS) GLOB.TELEBLOCK = getAssignedBlock("TELE", numsToAssign, DNA_HARD_BOUNDS) GLOB.FIREBLOCK = getAssignedBlock("FIRE", numsToAssign, DNA_HARDER_BOUNDS) GLOB.XRAYBLOCK = getAssignedBlock("XRAY", numsToAssign, DNA_HARDER_BOUNDS) diff --git a/code/game/gamemodes/wizard/servant_items/caretaker.dm b/code/game/gamemodes/wizard/servant_items/caretaker.dm index 689eec45f71f7..cfaeadd87b225 100644 --- a/code/game/gamemodes/wizard/servant_items/caretaker.dm +++ b/code/game/gamemodes/wizard/servant_items/caretaker.dm @@ -3,13 +3,12 @@ desc = "The hood of a shining white robe, with blue trim. Who would possess this robe and still want to hide themself away?" icon_state = "caretakerhood" armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_MINOR, + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_MINOR, laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, + energy = ARMOR_ENERGY_SMALL, rad = ARMOR_RAD_SHIELDED ) - species_restricted = list(SPECIES_HUMAN) flags_inv = HIDEEARS | BLOCKHAIR /obj/item/clothing/suit/caretakercloak @@ -17,10 +16,10 @@ desc = "A shining white and blue robe. For some reason, it reminds you of the holidays." icon_state = "caretakercloak" armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_PISTOL, laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, + energy = ARMOR_ENERGY_RESISTANT, rad = ARMOR_RAD_SHIELDED ) @@ -28,7 +27,6 @@ name = "caretaker's jumpsuit" desc = "A holy jumpsuit. Treat it well." icon_state = "caretaker" - species_restricted = list(SPECIES_HUMAN) /obj/item/clothing/shoes/dress/caretakershoes name = "black leather shoes" diff --git a/code/game/gamemodes/wizard/servant_items/champion.dm b/code/game/gamemodes/wizard/servant_items/champion.dm index 371b3ba471e49..1a356453fe18a 100644 --- a/code/game/gamemodes/wizard/servant_items/champion.dm +++ b/code/game/gamemodes/wizard/servant_items/champion.dm @@ -10,7 +10,6 @@ bomb = ARMOR_BOMB_RESISTANT, bio = ARMOR_BIO_MINOR ) - species_restricted = list(SPECIES_HUMAN) /obj/item/clothing/suit/champarmor name = "champion's armor" @@ -36,7 +35,6 @@ armor = list( melee = ARMOR_MELEE_MINOR ) - species_restricted = list(SPECIES_HUMAN) /obj/item/clothing/shoes/jackboots/medievalboots name = "leather boots" diff --git a/code/game/gamemodes/wizard/servant_items/familiar.dm b/code/game/gamemodes/wizard/servant_items/familiar.dm index db57ecb29416c..a10193dda96bb 100644 --- a/code/game/gamemodes/wizard/servant_items/familiar.dm +++ b/code/game/gamemodes/wizard/servant_items/familiar.dm @@ -1,4 +1,4 @@ -/obj/item/clothing/head/bandana/familiarband +/obj/item/clothing/head/familiarband name = "familiar's headband" desc = "It's a simple headband made of leather." icon_state = "familiarband" @@ -8,11 +8,10 @@ desc = "It looks like a cross between Robin Hood's tunic and some patchwork leather armor. Whoever put this together must have been in a hurry." icon_state = "familiartunic" armor = list( - melee = ARMOR_MELEE_KNIVES, - laser = ARMOR_LASER_MINOR, + melee = ARMOR_MELEE_KNIVES, + laser = ARMOR_LASER_MINOR, energy = ARMOR_ENERGY_SMALL ) - species_restricted = list(SPECIES_HUMAN) /obj/item/clothing/under/familiargarb/Initialize() . = ..() diff --git a/code/game/gamemodes/wizard/servant_items/fiend.dm b/code/game/gamemodes/wizard/servant_items/fiend.dm index 6a0dcf2675d96..a01e1891fcc0c 100644 --- a/code/game/gamemodes/wizard/servant_items/fiend.dm +++ b/code/game/gamemodes/wizard/servant_items/fiend.dm @@ -3,13 +3,12 @@ desc = "A dark hood with blood-red trim. Something about the fabric blocks more light than it should." icon_state = "fiendhood" armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_MINOR, + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_MINOR, laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, + energy = ARMOR_ENERGY_SMALL, rad = ARMOR_RAD_SHIELDED ) - species_restricted = list(SPECIES_HUMAN) flags_inv = HIDEEARS | BLOCKHAIR /obj/item/clothing/suit/fiendcowl @@ -18,18 +17,17 @@ icon_state = "fiendcowl" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_PISTOL, laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, + energy = ARMOR_ENERGY_RESISTANT, rad = ARMOR_RAD_SHIELDED ) /obj/item/clothing/under/lawyer/fiendsuit - name = "black suit" + name = "black and red suit" desc = "A snappy black suit with red trim. The undershirt's stained with something, though..." icon_state = "fiendsuit" - species_restricted = list(SPECIES_HUMAN) /obj/item/clothing/shoes/dress/devilshoes name = "dress shoes" diff --git a/code/game/gamemodes/wizard/servant_items/infiltrator.dm b/code/game/gamemodes/wizard/servant_items/infiltrator.dm index ed349fc6ff775..2b9897b13b510 100644 --- a/code/game/gamemodes/wizard/servant_items/infiltrator.dm +++ b/code/game/gamemodes/wizard/servant_items/infiltrator.dm @@ -3,29 +3,27 @@ desc = "Whoever owns this hat means business. Hopefully, it's just good business." icon_state = "infhat" armor = list( - melee = ARMOR_MELEE_MINOR, - bullet = ARMOR_BALLISTIC_MINOR, + melee = ARMOR_MELEE_MINOR, + bullet = ARMOR_BALLISTIC_MINOR, laser = ARMOR_LASER_MINOR, energy = ARMOR_ENERGY_MINOR ) - species_restricted = list(SPECIES_HUMAN) /obj/item/clothing/suit/infilsuit name = "immaculate suit" desc = "The clothes of an impeccable diplomat. Or perhaps a businessman. Let's not consider the horrors that might arise if it belongs to a lawyer." icon_state = "infsuit" armor = list( - melee = ARMOR_MELEE_MINOR, - bullet = ARMOR_BALLISTIC_PISTOL, + melee = ARMOR_MELEE_MINOR, + bullet = ARMOR_BALLISTIC_PISTOL, laser = ARMOR_LASER_MINOR, energy = ARMOR_ENERGY_MINOR ) /obj/item/clothing/under/lawyer/infil - name = "formal outfit" + name = "immaculate formal outfit" desc = "A white dress shirt and navy pants. Snazzy." icon_state = "inf_mob" - species_restricted = list(SPECIES_HUMAN) /obj/item/clothing/shoes/dress/infilshoes name = "black leather shoes" diff --git a/code/game/gamemodes/wizard/servant_items/overseer.dm b/code/game/gamemodes/wizard/servant_items/overseer.dm index 9d398512a8579..7dea85d9907f0 100644 --- a/code/game/gamemodes/wizard/servant_items/overseer.dm +++ b/code/game/gamemodes/wizard/servant_items/overseer.dm @@ -2,17 +2,16 @@ name = "grim hood" desc = "Darker than dark. What... what is this made of?" armor = list( - melee = ARMOR_MELEE_SHIELDED, - bullet = ARMOR_BALLISTIC_HEAVY, + melee = ARMOR_MELEE_SHIELDED, + bullet = ARMOR_BALLISTIC_HEAVY, laser = ARMOR_LASER_HEAVY, - energy = ARMOR_ENERGY_SHIELDED, + energy = ARMOR_ENERGY_SHIELDED, bomb = ARMOR_BOMB_SHIELDED ) icon_state = "necromancer" item_flags = ITEM_FLAG_AIRTIGHT max_pressure_protection = FIRESUIT_MAX_PRESSURE min_pressure_protection = 0 - species_restricted = list(SPECIES_HUMAN) flags_inv = HIDEEARS | BLOCKHAIR /obj/item/clothing/suit/straight_jacket/overseercloak @@ -20,10 +19,10 @@ desc = "The void of space woven into fabric. It's hard to tell where its edges are." icon_state = "overseercloak" armor = list( - melee = ARMOR_MELEE_SHIELDED, - bullet = ARMOR_BALLISTIC_HEAVY, + melee = ARMOR_MELEE_SHIELDED, + bullet = ARMOR_BALLISTIC_HEAVY, laser = ARMOR_LASER_HEAVY, - energy = ARMOR_ENERGY_SHIELDED, + energy = ARMOR_ENERGY_SHIELDED, bomb = ARMOR_BOMB_SHIELDED ) item_flags = ITEM_FLAG_AIRTIGHT @@ -35,7 +34,6 @@ name = "black hoodie" desc = "A generic black hoodie. There's a pattern akin to splattered blood along the bottom." icon_state = "grimhoodie" - species_restricted = list(SPECIES_HUMAN) //These are the ones that it gets when they toggle it off /obj/item/clothing/shoes/sandal/grimboots diff --git a/code/game/images.dm b/code/game/images.dm deleted file mode 100644 index e8b844937491e..0000000000000 --- a/code/game/images.dm +++ /dev/null @@ -1,3 +0,0 @@ -/image/Destroy() - ..() - return QDEL_HINT_HARDDEL diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 14462c0879751..3936985f1766e 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -89,6 +89,7 @@ var/global/list/datum/access/priv_all_access_datums /proc/get_all_access_datums() + RETURN_TYPE(/list) if(!priv_all_access_datums) priv_all_access_datums = init_subtypes(/datum/access) priv_all_access_datums = dd_sortedObjectList(priv_all_access_datums) @@ -97,6 +98,7 @@ var/global/list/datum/access/priv_all_access_datums var/global/list/datum/access/priv_all_access_datums_id /proc/get_all_access_datums_by_id() + RETURN_TYPE(/list) if(!priv_all_access_datums_id) priv_all_access_datums_id = list() for(var/datum/access/A in get_all_access_datums()) @@ -106,6 +108,7 @@ var/global/list/datum/access/priv_all_access_datums_id var/global/list/datum/access/priv_all_access_datums_region /proc/get_all_access_datums_by_region() + RETURN_TYPE(/list) if(!priv_all_access_datums_region) priv_all_access_datums_region = list() for(var/datum/access/A in get_all_access_datums()) @@ -116,6 +119,7 @@ var/global/list/datum/access/priv_all_access_datums_region return priv_all_access_datums_region.Copy() /proc/get_access_ids(access_types = ACCESS_TYPE_ALL) + RETURN_TYPE(/list) var/list/L = new() for(var/datum/access/A in get_all_access_datums()) if(A.access_type & access_types) @@ -124,6 +128,7 @@ var/global/list/datum/access/priv_all_access_datums_region var/global/list/priv_all_access /proc/get_all_accesses() + RETURN_TYPE(/list) if(!priv_all_access) priv_all_access = get_access_ids() @@ -131,6 +136,7 @@ var/global/list/priv_all_access var/global/list/priv_station_access /proc/get_all_station_access() + RETURN_TYPE(/list) if(!priv_station_access) priv_station_access = get_access_ids(ACCESS_TYPE_STATION) @@ -138,6 +144,7 @@ var/global/list/priv_station_access var/global/list/priv_centcom_access /proc/get_all_centcom_access() + RETURN_TYPE(/list) if(!priv_centcom_access) priv_centcom_access = get_access_ids(ACCESS_TYPE_CENTCOM) @@ -145,6 +152,7 @@ var/global/list/priv_centcom_access var/global/list/priv_syndicate_access /proc/get_all_syndicate_access() + RETURN_TYPE(/list) if(!priv_syndicate_access) priv_syndicate_access = get_access_ids(ACCESS_TYPE_SYNDICATE) @@ -152,6 +160,7 @@ var/global/list/priv_syndicate_access var/global/list/priv_region_access /proc/get_region_accesses(code) + RETURN_TYPE(/list) if(code == ACCESS_REGION_ALL) return get_all_station_access() @@ -200,6 +209,7 @@ var/global/list/priv_region_access return AS[id] /proc/get_all_centcom_jobs() + RETURN_TYPE(/list) return list("VIP Guest", "Custodian", "Thunderdome Overseer", @@ -254,6 +264,7 @@ var/global/list/priv_region_access return missing_id_name /proc/get_all_job_icons() //For all existing HUD icons + RETURN_TYPE(/list) return SSjobs.titles_to_datums + list("Prisoner") /obj/proc/GetJobName() //Used in secHUD icon generation diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 43dc04c6393a1..9b3bdbd18a957 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -5,8 +5,8 @@ var/list/access = list() // The job's default access tokens var/list/software_on_spawn = list() // Defines the software files that spawn on tablets and labtops var/department_flag = 0 - var/total_positions = 0 // How many players can be this job - var/spawn_positions = 0 // How many players can spawn in as this job + var/total_positions = 0 // How many players can be this job. Set to -1 for unlimited. + var/spawn_positions = 0 // How many players can spawn in as this job. Set to -1 for unlimited. var/current_positions = 0 // How many players have this job var/availablity_chance = 100 // Percentage chance job is available each round @@ -55,6 +55,10 @@ var/required_language + var/faction = MOB_FACTION_CREW + /// If job outfit should be displayed on character preview in preferences + var/display_outfit_on_preview = TRUE + /datum/job/New() if(prob(100-availablity_chance)) //Close positions, blah blah. @@ -100,6 +104,9 @@ var/singleton/hierarchy/outfit/outfit = get_outfit(H, alt_title, branch, grade) if(outfit) . = outfit.equip(H, title, alt_title) + if(faction) + H.faction = faction + H.last_faction = faction /datum/job/proc/get_outfit(mob/living/carbon/human/H, alt_title, datum/mil_branch/branch, datum/mil_rank/grade) if(alt_title && alt_titles) @@ -255,7 +262,7 @@ if (!C?.mob) log_debug("Failed to find a valid client/mob for whitelist checking - Job `[src]` - Client `[C]` - Mob `[C?.mob]`") return FALSE - return is_species_whitelisted(C.mob, use_species_whitelist) + return is_any_alien_whitelisted(C.mob, all_species[use_species_whitelist]) // Don't use if the map doesn't use branches but jobs do. /datum/job/proc/get_branch_rank(datum/species/S) @@ -408,7 +415,7 @@ /datum/job/proc/get_roundstart_spawnpoint() var/list/loc_list = list() - for(var/obj/effect/landmark/start/sloc in landmarks_list) + for(var/obj/landmark/start/sloc in landmarks_list) if(sloc.name != title) continue if(locate(/mob/living) in sloc.loc) continue loc_list += sloc diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm index a650f77a58cb8..7d389b841a3ce 100644 --- a/code/game/jobs/job/silicon.dm +++ b/code/game/jobs/job/silicon.dm @@ -15,30 +15,32 @@ hud_icon = "hudblank" skill_points = 0 no_skill_buffs = TRUE + display_outfit_on_preview = FALSE min_skill = list( - SKILL_BUREAUCRACY = SKILL_EXPERT, - SKILL_FINANCE = SKILL_EXPERT, - SKILL_EVA = SKILL_EXPERT, - SKILL_MECH = SKILL_EXPERT, - SKILL_PILOT = SKILL_EXPERT, - SKILL_HAULING = SKILL_NONE, - SKILL_COMPUTER = SKILL_PROF, - SKILL_BOTANY = SKILL_EXPERT, - SKILL_COOKING = SKILL_EXPERT, - SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT, - SKILL_FORENSICS = SKILL_EXPERT, - SKILL_CONSTRUCTION = SKILL_EXPERT, - SKILL_ELECTRICAL = SKILL_EXPERT, - SKILL_ATMOS = SKILL_EXPERT, - SKILL_ENGINES = SKILL_EXPERT, - SKILL_DEVICES = SKILL_EXPERT, - SKILL_SCIENCE = SKILL_EXPERT, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT, - SKILL_CHEMISTRY = SKILL_EXPERT + SKILL_BUREAUCRACY = SKILL_EXPERIENCED, + SKILL_FINANCE = SKILL_EXPERIENCED, + SKILL_EVA = SKILL_EXPERIENCED, + SKILL_MECH = SKILL_EXPERIENCED, + SKILL_PILOT = SKILL_EXPERIENCED, + SKILL_HAULING = SKILL_UNSKILLED, + SKILL_COMPUTER = SKILL_MASTER, + SKILL_BOTANY = SKILL_EXPERIENCED, + SKILL_COOKING = SKILL_EXPERIENCED, + SKILL_COMBAT = SKILL_EXPERIENCED, + SKILL_WEAPONS = SKILL_EXPERIENCED, + SKILL_FORENSICS = SKILL_EXPERIENCED, + SKILL_CONSTRUCTION = SKILL_EXPERIENCED, + SKILL_ELECTRICAL = SKILL_EXPERIENCED, + SKILL_ATMOS = SKILL_EXPERIENCED, + SKILL_ENGINES = SKILL_EXPERIENCED, + SKILL_DEVICES = SKILL_EXPERIENCED, + SKILL_SCIENCE = SKILL_EXPERIENCED, + SKILL_MEDICAL = SKILL_EXPERIENCED, + SKILL_ANATOMY = SKILL_EXPERIENCED, + SKILL_CHEMISTRY = SKILL_EXPERIENCED ) + /datum/job/ai/equip(mob/living/carbon/human/H) if(!H) return 0 return 1 @@ -64,6 +66,7 @@ hud_icon = "hudblank" skill_points = 0 no_skill_buffs = TRUE + display_outfit_on_preview = FALSE /datum/job/cyborg/handle_variant_join(mob/living/carbon/human/H, alt_title) return H && H.Robotize(SSrobots.get_mob_type_by_title(alt_title || title)) diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index b4c5de02193c0..27179f657b237 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -1,101 +1,107 @@ #define WHITELISTFILE "data/whitelist.txt" +#define ALIEN_WHITELIST_FILE "config/alienwhitelist.json" var/global/list/whitelist = list() /hook/startup/proc/loadWhitelist() if(config.usewhitelist) load_whitelist() - return 1 + + return TRUE /proc/load_whitelist() whitelist = file2list(WHITELISTFILE) - if(!length(whitelist)) whitelist = null + if(!length(whitelist)) + whitelist = null -/proc/check_whitelist(mob/M /*, rank*/) +/proc/check_whitelist(mob/M) if(!whitelist) - return 0 + return FALSE return ("[M.ckey]" in whitelist) var/global/list/alien_whitelist = list() /hook/startup/proc/loadAlienWhitelist() - if(config.usealienwhitelist) - if(config.usealienwhitelistSQL) - if(!load_alienwhitelistSQL()) - to_world_log("Could not load alienwhitelist via SQL") - else - load_alienwhitelist() - return 1 + if(!config.usealienwhitelist) + return TRUE + + if(load_alienwhitelistSQL()) + return TRUE + + to_world_log("Could not load alienwhitelist via SQL. Reverting to legacy approach (JSON file)") + + return load_alienwhitelist() + /proc/load_alienwhitelist() - var/text = file2text("config/alienwhitelist.txt") + var/text = file2text(ALIEN_WHITELIST_FILE) if (!text) - log_misc("Failed to load config/alienwhitelist.txt") - return 0 - else - alien_whitelist = splittext(text, "\n") - return 1 + log_misc("Failed to load [ALIEN_WHITELIST_FILE]") + return FALSE + + var/list/ckey_to_whitelisted_races = json_decode(text) + for(var/ckey in ckey_to_whitelisted_races) + var/list/whitelisted_races = ckey_to_whitelisted_races[ckey] + for(var/race in whitelisted_races) + if(islist(alien_whitelist[ckey])) + alien_whitelist[ckey][race] = TRUE + else + alien_whitelist[ckey] = list(race = TRUE) + + return TRUE + /proc/load_alienwhitelistSQL() var/DBQuery/query = dbcon_old.NewQuery("SELECT * FROM whitelist") if(!query.Execute()) to_world_log(dbcon_old.ErrorMsg()) - return 0 - else - while(query.NextRow()) - var/list/row = query.GetRowData() - if(alien_whitelist[row["ckey"]]) - var/list/A = alien_whitelist[row["ckey"]] - A.Add(row["race"]) - else - alien_whitelist[row["ckey"]] = list(row["race"]) - return 1 + return FALSE + + while(query.NextRow()) + var/list/row = query.GetRowData() + + var/ckey = row["ckey"] + var/race = row["race"] + if(islist(alien_whitelist[ckey])) + alien_whitelist[ckey][race] = TRUE + else + alien_whitelist[ckey] = list(race = TRUE) -/proc/is_species_whitelisted(mob/M, species_name) - var/datum/species/S = all_species[species_name] - return is_alien_whitelisted(M, S) + return TRUE + +/proc/is_any_alien_whitelisted(mob/mob_to_check, list/species) + if(!mob_to_check || !species) + return FALSE -//todo: admin aliens -/proc/is_alien_whitelisted(mob/M, species) - if(!M || !species) - return 0 if (GLOB.skip_allow_lists) return TRUE + if(!config.usealienwhitelist) - return 1 - if(check_rights(R_ADMIN, 0, M)) - return 1 + return TRUE + + if(check_rights(R_ADMIN, 0, mob_to_check)) + return TRUE + + if(!islist(species)) + species = list(species) + + + for(var/single_species in species) + if(istype(single_species, /datum/language)) + var/datum/language/language_to_check = single_species + if(!(language_to_check.flags & (WHITELISTED|RESTRICTED))) + return TRUE + + return whitelist_lookup(language_to_check.name, mob_to_check.ckey) - if(istype(species,/datum/language)) - var/datum/language/L = species - if(!(L.flags & (WHITELISTED|RESTRICTED))) - return 1 - return whitelist_lookup(L.name, M.ckey) + if(istype(single_species, /datum/species)) + var/datum/species/species_to_check = single_species + if(!(species_to_check.spawn_flags & (SPECIES_IS_WHITELISTED|SPECIES_IS_RESTRICTED))) + return TRUE - if(istype(species,/datum/species)) - var/datum/species/S = species - if(!(S.spawn_flags & (SPECIES_IS_WHITELISTED|SPECIES_IS_RESTRICTED))) - return 1 - return whitelist_lookup(S.get_bodytype(S), M.ckey) + return whitelist_lookup(species_to_check.get_bodytype(species_to_check), mob_to_check.ckey) - return 0 + return FALSE /proc/whitelist_lookup(item, ckey) - if(!alien_whitelist) - return 0 - - if(config.usealienwhitelistSQL) - //SQL Whitelist - if(!(ckey in alien_whitelist)) - return 0; - var/list/whitelisted = alien_whitelist[ckey] - if(lowertext(item) in whitelisted) - return 1 - else - //Config File Whitelist - for(var/s in alien_whitelist) - if(findtext(s,"[ckey] - [item]")) - return 1 - if(findtext(s,"[ckey] - All")) - return 1 - return 0 + return alien_whitelist?[ckey]?[lowertext(item)] #undef WHITELISTFILE diff --git a/code/game/machinery/CableLayer.dm b/code/game/machinery/CableLayer.dm index d1c8af08032cd..fdcde820dfdc2 100644 --- a/code/game/machinery/CableLayer.dm +++ b/code/game/machinery/CableLayer.dm @@ -1,7 +1,7 @@ /obj/machinery/cablelayer name = "automatic cable layer" - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/machines/pipe_dispenser.dmi' icon_state = "pipe_d" density = TRUE var/obj/structure/cable/last_piece @@ -26,32 +26,34 @@ user.visible_message("\The [user] [!on?"dea":"a"]ctivates \the [src].", "You switch [src] [on? "on" : "off"]") return TRUE -/obj/machinery/cablelayer/attackby(obj/item/O as obj, mob/user as mob) +/obj/machinery/cablelayer/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!cable || !cable?.amount) + to_chat(usr, SPAN_WARNING("There's no more cable on the reel.")) + return + var/m = round(input(usr,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) + m = min(m, cable.amount) + m = min(m, 30) + if(m) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT) || !m) + return + use_cable(m) + var/obj/item/stack/cable_coil/CC = new (get_turf(src)) + CC.amount = m + +/obj/machinery/cablelayer/use_tool(obj/item/O, mob/living/user, list/click_params) if(istype(O, /obj/item/stack/cable_coil)) - var/result = load_cable(O) if(!result) to_chat(user, SPAN_WARNING("\The [src]'s cable reel is full.")) else to_chat(user, "You load [result] lengths of cable into [src].") - return - - if(isWirecutter(O)) - if(cable && cable.amount) - var/m = round(input(usr,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) - m = min(m, cable.amount) - m = min(m, 30) - if(m) - playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1) - use_cable(m) - var/obj/item/stack/cable_coil/CC = new (get_turf(src)) - CC.amount = m - else - to_chat(usr, SPAN_WARNING("There's no more cable on the reel.")) + return TRUE + return ..() /obj/machinery/cablelayer/examine(mob/user) . = ..() - to_chat(user, "\The [src]'s cable reel has [cable.amount] length\s left.") + . += SPAN_NOTICE("[src]'s cable reel has [cable.amount] length\s left.") /obj/machinery/cablelayer/proc/load_cable(obj/item/stack/cable_coil/CC) if(istype(CC) && CC.amount) @@ -102,7 +104,7 @@ if(!use_cable(1)) return reset() var/obj/structure/cable/NC = new(new_turf) - NC.cableColor("red") + NC.set_color(COLOR_MAROON) NC.d1 = 0 NC.d2 = fdirn NC.update_icon() diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index b7752ea6b6b6f..1e59f50a97301 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -1,7 +1,7 @@ /obj/machinery/optable - name = "Operating Table" + name = "operating table" desc = "Used for advanced medical procedures." - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/machines/medical/operatingtable.dmi' icon_state = "table2-idle" density = TRUE anchored = TRUE @@ -38,7 +38,7 @@ /obj/machinery/optable/examine(mob/user) . = ..() - to_chat(user, SPAN_NOTICE("The neural suppressors are switched [suppressing ? "on" : "off"].")) + . += SPAN_NOTICE("The neural suppressors are switched [suppressing ? "on" : "off"].") /obj/machinery/optable/ex_act(severity) @@ -56,27 +56,12 @@ if (prob(25)) src.set_density(0) -/obj/machinery/optable/attackby(obj/item/O, mob/user) - if (istype(O, /obj/item/grab)) - var/obj/item/grab/G = O - if(iscarbon(G.affecting) && check_table(G.affecting)) - take_victim(G.affecting,usr) - qdel(O) - return - return ..() - /obj/machinery/optable/state_transition(singleton/machine_construction/default/new_state) . = ..() if(istype(new_state)) updateUsrDialog() /obj/machinery/optable/physical_attack_hand(mob/user) - if(MUTATION_HULK in user.mutations) - visible_message(SPAN_DANGER("\The [usr] destroys \the [src]!")) - src.set_density(0) - qdel(src) - return TRUE - if(!victim) to_chat(user, SPAN_WARNING("There is nobody on \the [src]. It would be pointless to turn the suppressor on.")) return TRUE @@ -103,12 +88,6 @@ else return 0 - -/obj/machinery/optable/MouseDrop_T(mob/target, mob/user) - if (target.loc != loc) - step(target, get_dir(target, loc)) - ..() - /obj/machinery/optable/proc/check_victim() if(!victim || !victim.lying || victim.loc != loc) suppressing = FALSE @@ -123,6 +102,9 @@ connected_monitor.update_victim(H) break icon_state = (victim && victim.pulse()) ? "table2-active" : "table2-idle" + ClearOverlays() + if(victim && !suppressing) + AddOverlays("table2-warning") if(victim) if(suppressing && victim.sleeping < 3) victim.Sleeping(3 - victim.sleeping) @@ -135,14 +117,18 @@ /obj/machinery/optable/proc/take_victim(mob/living/carbon/C, mob/living/carbon/user as mob) if (C == user) user.visible_message("[user] climbs on \the [src].","You climb on \the [src].") + add_fingerprint(user) else visible_message(SPAN_NOTICE("\The [C] has been laid on \the [src] by [user].")) + add_fingerprint(C) + add_fingerprint(user) if (C.client) C.client.perspective = EYE_PERSPECTIVE C.client.eye = src C.Weaken(5) C.dropInto(loc) - src.add_fingerprint(user) + C.set_dir(SOUTH) //Make patient lie on their back. + C.remove_grabs_and_pulls() if(ishuman(C)) var/mob/living/carbon/human/H = C src.victim = H @@ -156,11 +142,20 @@ var/mob/living/M = user if(user.stat || user.restrained() || !iscarbon(target) || !check_table(target)) return + for (var/obj/item/grab/grab in target.grabbed_by) + if (grab.assailant == target || grab.assailant == user) + continue + USE_FEEDBACK_FAILURE("\The [target] is being grabbed by \the [grab.assailant] and can't be placed on \the [src].") + return if(istype(M)) take_victim(target,user) else return ..() +/obj/machinery/optable/use_grab(obj/item/grab/grab, list/click_params) + MouseDrop_T(grab.affecting, grab.assailant) //Grab will be deleted at level of take_victim if all checks pass. + return TRUE + /obj/machinery/optable/climb_on() if(usr.stat || !ishuman(usr) || usr.restrained() || !check_table(usr)) return diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index f8c9bcbafb229..4acfd259c04d7 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -1,8 +1,8 @@ /obj/machinery/sleeper name = "sleeper" desc = "A fancy bed with built-in injectors, a dialysis machine, and a limited health scanner." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "sleeper_0" + icon = 'icons/obj/machines/medical/sleeper.dmi' + icon_state = "sleeper" density = TRUE anchored = TRUE clicksound = 'sound/machines/buttonbeep.ogg' @@ -41,11 +41,11 @@ . = ..() if (distance <= 1) if (beaker) - to_chat(user, "It is loaded with a beaker.") + . += SPAN_NOTICE("It is loaded with a beaker.") if(occupant) - occupant.examine(arglist(args)) - if (emagged && user.skill_check(SKILL_MEDICAL, SKILL_EXPERT)) - to_chat(user, "The sleeper chemical synthesis controls look tampered with.") + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(examinate), user, occupant), 0.1 SECONDS) + if (emagged && user.skill_check(SKILL_MEDICAL, SKILL_EXPERIENCED)) + . += SPAN_WARNING("The sleeper chemical synthesis controls look tampered with.") /obj/machinery/sleeper/Process() @@ -55,12 +55,12 @@ if(filtering > 0) if(beaker) if(beaker.reagents.total_volume < beaker.reagents.maximum_volume) - var/pumped = 0 + var/filter_speed = 0 for(var/datum/reagent/x in occupant.reagents.reagent_list) - occupant.reagents.trans_to_obj(beaker, pump_speed) - pumped++ + filter_speed += x.filter_mod * x.volume / occupant.reagents.total_volume + occupant.reagents.trans_to_obj(beaker, pump_speed * filter_speed) if(ishuman(occupant)) - occupant.vessel.trans_to_obj(beaker, pumped + 1) + occupant.vessel.trans_to_obj(beaker, pump_speed * filter_speed) else toggle_filter() if(pump > 0) @@ -79,12 +79,15 @@ to_chat(occupant, SPAN_NOTICE(SPAN_BOLD("... [pick("comfy", "feels slow", "warm")] ..."))) /obj/machinery/sleeper/on_update_icon() + ClearOverlays() + if(panel_open) + AddOverlays("[icon_state]_panel") if(!occupant) - icon_state = "sleeper_0" + icon_state = "sleeper" else if(inoperable()) - icon_state = "sleeper_1" + icon_state = "sleeper_closed" else - icon_state = "sleeper_2" + icon_state = "sleeper_working" /obj/machinery/sleeper/DefaultTopicState() return GLOB.outside_state @@ -108,7 +111,7 @@ data["reagents"] = reagents.Copy() if(istype(occupant)) - var/scan = user.skill_check(SKILL_MEDICAL, SKILL_ADEPT) ? medical_scan_results(occupant) : SPAN_CLASS("white", "Contains: \the [occupant]") + var/scan = user.skill_check(SKILL_MEDICAL, SKILL_TRAINED) ? medical_scan_results(occupant) : SPAN_CLASS("white", "Contains: \the [occupant]") scan = replacetext(scan,"'scan_notice'","'white'") scan = replacetext(scan,"'scan_warning'","'average'") scan = replacetext(scan,"'scan_danger'","'bad'") @@ -170,31 +173,36 @@ updateUsrDialog() go_out() -/obj/machinery/sleeper/attackby(obj/item/I, mob/user) +/obj/machinery/sleeper/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/reagent_containers/glass)) - add_fingerprint(user) - if(!beaker) - if(!user.unEquip(I, src)) - return - beaker = I - user.visible_message(SPAN_NOTICE("\The [user] adds \a [I] to \the [src]."), SPAN_NOTICE("You add \a [I] to \the [src].")) - else - to_chat(user, SPAN_WARNING("\The [src] has a beaker already.")) + if(beaker) + to_chat(user, SPAN_WARNING("There is already a beaker loaded in \the [src].")) + return TRUE + if(!user.unEquip(I, src)) + return TRUE + beaker = I + user.visible_message(SPAN_NOTICE("\The [user] adds \a [I] to \the [src]."), SPAN_NOTICE("You add \a [I] to \the [src].")) return TRUE + + return ..() + +/obj/machinery/sleeper/user_can_move_target_inside(mob/target, mob/user) + if (occupant) + to_chat(user, SPAN_WARNING("\The [src] is already occupied!")) + return FALSE return ..() /obj/machinery/sleeper/MouseDrop_T(mob/target, mob/user) - if(!CanMouseDrop(target, user)) + if (!CanMouseDrop(target, user) || !ismob(target)) return - if(!istype(target)) - return - if(target.buckled) - to_chat(user, SPAN_WARNING("Unbuckle the subject before attempting to move them.")) - return - if(panel_open) - to_chat(user, SPAN_WARNING("Close the maintenance panel before attempting to place the subject in the sleeper.")) + if (!user_can_move_target_inside(target, user)) return go_in(target, user) + return + +/obj/machinery/sleeper/use_grab(obj/item/grab/grab, list/click_params) //Grab is deleted at the level of go_in if all checks are passed. + MouseDrop_T(grab.affecting, grab.assailant) + return TRUE /obj/machinery/sleeper/relaymove(mob/user) ..() @@ -225,25 +233,25 @@ to_chat(occupant, SPAN_WARNING("You feel a tube jammed down your throat.")) pump = !pump -/obj/machinery/sleeper/proc/go_in(mob/M, mob/user) - if(!M) - return - if(inoperable()) - return - if(occupant) +/obj/machinery/sleeper/proc/go_in(mob/target, mob/user) + if (!target) + return FALSE + if (occupant) to_chat(user, SPAN_WARNING("\The [src] is already occupied.")) - return - - if(M == user) + return FALSE + if (target == user) visible_message("\The [user] starts climbing into \the [src].") else - visible_message("\The [user] starts putting [M] into \the [src].") - - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(occupant) - to_chat(user, SPAN_WARNING("\The [src] is already occupied.")) - return - set_occupant(M) + visible_message("\The [user] starts putting [target] into \the [src].") + add_fingerprint(user) //Add fingerprints for trying to go in. + if (!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) + return FALSE + if (!user_can_move_target_inside(target, user)) + return FALSE + set_occupant(target) + if (target != user) + add_fingerprint(target) //Add fingerprints of the person stuffed in. + target.remove_grabs_and_pulls() /obj/machinery/sleeper/proc/go_out() if(!occupant) @@ -260,12 +268,6 @@ O.dropInto(loc) toggle_filter() -/obj/machinery/sleeper/AltClick(mob/user) - if(CanDefaultInteract(user)) - go_out() - else - ..() - /obj/machinery/sleeper/proc/set_occupant(mob/living/carbon/occupant) src.occupant = occupant update_icon() @@ -330,3 +332,18 @@ else available_chemicals -= antag_chemicals return 1 + +/obj/machinery/sleeper/AltClick(mob/user) + if (CanDefaultInteract(user)) + go_out() + return TRUE + return ..() + +/obj/machinery/sleeper/verb/eject() + set name = "Eject Sleeper" + set category = "Object" + set src in oview(1) + if (CanDefaultInteract(usr)) + go_out() + return TRUE + return FALSE diff --git a/code/game/machinery/_machines_base/machine_construction/_construction.dm b/code/game/machinery/_machines_base/machine_construction/_construction.dm index a43a69c39463f..05f5bffc1a37d 100644 --- a/code/game/machinery/_machines_base/machine_construction/_construction.dm +++ b/code/game/machinery/_machines_base/machine_construction/_construction.dm @@ -78,11 +78,14 @@ machine.attack_hand(user) return TRUE +/* +This returning FALSE means if component_attackby under use_tool called this it will also return FALSE; which means the use_tool call will proceed. +In that same vein, the attackby() children of this proc will also continue the rest of its code if this crashes; since this check is called at the beginning. +*/ /singleton/machine_construction/proc/attackby(obj/item/I, mob/user, obj/machinery/machine) if(!validate_state(machine)) crash_with("Machine [log_info_line(machine)] violated the state assumptions of the construction state [type]!") - machine.attackby(I, user) - return TRUE + return FALSE /singleton/machine_construction/proc/mechanics_info() diff --git a/code/game/machinery/_machines_base/machine_construction/computer.dm b/code/game/machinery/_machines_base/machine_construction/computer.dm index 9e465af83d410..7e6baff142488 100644 --- a/code/game/machinery/_machines_base/machine_construction/computer.dm +++ b/code/game/machinery/_machines_base/machine_construction/computer.dm @@ -10,3 +10,6 @@ /singleton/machine_construction/default/panel_open/computer up_state = /singleton/machine_construction/default/panel_closed/computer needs_board = "computer" + +/singleton/machine_construction/default/panel_closed/computer/cannot_print + cannot_print = TRUE diff --git a/code/game/machinery/_machines_base/machine_construction/default.dm b/code/game/machinery/_machines_base/machine_construction/default.dm index 997370c2d93b2..4c9593c432fba 100644 --- a/code/game/machinery/_machines_base/machine_construction/default.dm +++ b/code/game/machinery/_machines_base/machine_construction/default.dm @@ -23,15 +23,16 @@ if((. = ..())) return if (!machine.can_use_tools) - to_chat(user, SPAN_WARNING("\The [src] cannot be modified!")) + to_chat(user, SPAN_WARNING("[machine] cannot be modified!")) return TRUE - if(isScrewdriver(I)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) + if(!I.use_as_tool(machine, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE TRANSFER_STATE(down_state) - playsound(get_turf(machine), 'sound/items/Screwdriver.ogg', 50, 1) machine.panel_open = TRUE - to_chat(user, SPAN_NOTICE("You open the maintenance hatch of \the [machine].")) + machine.USE_FEEDBACK_NEW_PANEL_OPEN(user, machine.panel_open) machine.update_icon() - return + return TRUE if(istype(I, /obj/item/storage/part_replacer)) machine.display_parts(user) return TRUE @@ -46,6 +47,9 @@ . += "Use a screwdriver to open the panel." . += "Use a parts replacer to view installed parts." +/singleton/machine_construction/default/panel_closed/cannot_print + cannot_print = TRUE + /singleton/machine_construction/default/panel_open up_state = /singleton/machine_construction/default/panel_closed down_state = /singleton/machine_construction/default/deconstructed @@ -61,22 +65,25 @@ /singleton/machine_construction/default/panel_open/attackby(obj/item/I, mob/user, obj/machinery/machine) if((. = ..())) return - if(isCrowbar(I)) + if(I.tool_behaviour == TOOL_CROWBAR) + if(!I.use_as_tool(machine, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE TRANSFER_STATE(down_state) machine.dismantle() return - if(isScrewdriver(I)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) + if(!I.use_as_tool(machine, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE TRANSFER_STATE(up_state) - playsound(get_turf(machine), 'sound/items/Screwdriver.ogg', 50, 1) machine.panel_open = FALSE - to_chat(user, SPAN_NOTICE("You close the maintenance hatch of \the [machine].")) + machine.USE_FEEDBACK_NEW_PANEL_OPEN(user, machine.panel_open) machine.update_icon() - return + return TRUE if(istype(I, /obj/item/storage/part_replacer)) return machine.part_replacement(user, I) - if(isWrench(I)) + if(I.tool_behaviour == TOOL_WRENCH) return machine.part_removal(user) if(istype(I)) diff --git a/code/game/machinery/_machines_base/machine_construction/frame.dm b/code/game/machinery/_machines_base/machine_construction/frame.dm index 2780bb69523ee..42cdf61ca9a2c 100644 --- a/code/game/machinery/_machines_base/machine_construction/frame.dm +++ b/code/game/machinery/_machines_base/machine_construction/frame.dm @@ -12,24 +12,20 @@ try_change_state(machine, /singleton/machine_construction/frame/wrenched) /singleton/machine_construction/frame/unwrenched/attackby(obj/item/I, mob/user, obj/machinery/machine) - if(isWrench(I)) - playsound(machine.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 2 SECONDS, machine, DO_REPAIR_CONSTRUCT)) - TRANSFER_STATE(/singleton/machine_construction/frame/wrenched) - to_chat(user, SPAN_NOTICE("You wrench \the [machine] into place.")) - machine.anchored = TRUE - if(isWelder(I)) - var/obj/item/weldingtool/WT = I - if(!WT.remove_fuel(0, user)) - to_chat(user, "The welding tool must be on to complete this task.") + if(I.tool_behaviour == TOOL_WRENCH) + if(!I.use_as_tool(machine, user, 2 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + TRANSFER_STATE(/singleton/machine_construction/frame/wrenched) + to_chat(user, SPAN_NOTICE("You wrench [machine] into place.")) + machine.anchored = TRUE + if(I.tool_behaviour == TOOL_WELDER) + if(!I.tool_start_check(user, 3)) + return TRUE + machine.USE_FEEDBACK_DECONSTRUCT_START(user) + if(!I.use_as_tool(machine, user, 2 SECONDS, 3, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) return TRUE - playsound(machine.loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 2 SECONDS, machine, DO_REPAIR_CONSTRUCT)) - if(!WT.isOn()) - return TRUE - TRANSFER_STATE(/singleton/machine_construction/default/deconstructed) - to_chat(user, SPAN_NOTICE("You deconstruct \the [machine].")) - machine.dismantle() + TRANSFER_STATE(/singleton/machine_construction/default/deconstructed) + machine.dismantle() /singleton/machine_construction/frame/unwrenched/mechanics_info() @@ -49,17 +45,17 @@ try_change_state(machine, /singleton/machine_construction/frame/unwrenched) /singleton/machine_construction/frame/wrenched/attackby(obj/item/I, mob/user, obj/machinery/machine) - if(isWrench(I)) - playsound(machine.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 2 SECONDS, machine, DO_REPAIR_CONSTRUCT)) - TRANSFER_STATE(/singleton/machine_construction/frame/unwrenched) - to_chat(user, SPAN_NOTICE("You unfasten \the [machine].")) - machine.anchored = FALSE + if(I.tool_behaviour == TOOL_WRENCH) + if(!I.use_as_tool(machine, user, 2 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) return + TRANSFER_STATE(/singleton/machine_construction/frame/unwrenched) + to_chat(user, SPAN_NOTICE("You unfasten [machine].")) + machine.anchored = FALSE + return if(isCoil(I)) var/obj/item/stack/cable_coil/C = I if(C.get_amount() < 5) - to_chat(user, SPAN_WARNING("You need five lengths of cable to add them to \the [machine].")) + to_chat(user, SPAN_WARNING("You need five lengths of cable to add them to [machine].")) return TRUE playsound(machine.loc, 'sound/items/Deconstruct.ogg', 50, 1) to_chat(user, SPAN_NOTICE("You start to add cables to the frame.")) @@ -94,15 +90,16 @@ TRANSFER_STATE(/singleton/machine_construction/frame/awaiting_parts) user.unEquip(I, machine) playsound(machine.loc, 'sound/items/Deconstruct.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You add the circuit board to \the [machine].")) + to_chat(user, SPAN_NOTICE("You add the circuit board to [machine].")) machine.circuit = I return else to_chat(user, SPAN_WARNING("This frame does not accept circuit boards of this type!")) return TRUE - if(isWirecutter(I)) + if(I.tool_behaviour == TOOL_WIRECUTTER) + if(!I.use_as_tool(machine, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRANSFER_STATE(/singleton/machine_construction/frame/wrenched) - playsound(machine.loc, 'sound/items/Wirecutter.ogg', 50, 1) to_chat(user, SPAN_NOTICE("You remove the cables.")) new /obj/item/stack/cable_coil(machine.loc, 5) @@ -123,15 +120,17 @@ try_change_state(machine, /singleton/machine_construction/frame/unwrenched) /singleton/machine_construction/frame/awaiting_parts/attackby(obj/item/I, mob/user, obj/machinery/constructable_frame/machine) - if(isCrowbar(I)) + if(I.tool_behaviour == TOOL_CROWBAR) + if(!I.use_as_tool(machine, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE TRANSFER_STATE(/singleton/machine_construction/frame/awaiting_circuit) - playsound(machine.loc, 'sound/items/Crowbar.ogg', 50, 1) machine.circuit.dropInto(machine.loc) machine.circuit = null to_chat(user, SPAN_NOTICE("You remove the circuit board.")) - return - if(isScrewdriver(I)) - playsound(machine.loc, 'sound/items/Screwdriver.ogg', 50, 1) + return TRUE + if(I.tool_behaviour == TOOL_SCREWDRIVER) + if(!I.use_as_tool(machine, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE var/obj/machinery/new_machine = new machine.circuit.build_path(machine.loc, machine.dir, FALSE) machine.circuit.construct(new_machine) new_machine.install_component(machine.circuit, refresh_parts = FALSE) diff --git a/code/game/machinery/_machines_base/machine_construction/item_chassis.dm b/code/game/machinery/_machines_base/machine_construction/item_chassis.dm index e05dfe7e583e3..280780843a010 100644 --- a/code/game/machinery/_machines_base/machine_construction/item_chassis.dm +++ b/code/game/machinery/_machines_base/machine_construction/item_chassis.dm @@ -7,7 +7,9 @@ /singleton/machine_construction/default/item_chassis/attackby(obj/item/I, mob/user, obj/machinery/machine) if((. = ..())) return - if(isWrench(I)) + if(I.tool_behaviour == TOOL_WRENCH) + if(!I.use_as_tool(machine, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRANSFER_STATE(down_state) machine.dismantle() return diff --git a/code/game/machinery/_machines_base/machine_construction/tcomms.dm b/code/game/machinery/_machines_base/machine_construction/tcomms.dm index 9bd6e33f07038..984adbfcbda0b 100644 --- a/code/game/machinery/_machines_base/machine_construction/tcomms.dm +++ b/code/game/machinery/_machines_base/machine_construction/tcomms.dm @@ -14,11 +14,12 @@ /singleton/machine_construction/tcomms/panel_closed/attackby(obj/item/I, mob/user, obj/machinery/machine) if((. = ..())) return - if(isScrewdriver(I)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) + if(!I.use_as_tool(machine, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE TRANSFER_STATE(/singleton/machine_construction/tcomms/panel_open) machine.panel_open = TRUE - to_chat(user, "You unfasten the bolts.") - playsound(machine.loc, 'sound/items/Screwdriver.ogg', 50, 1) + machine.USE_FEEDBACK_NEW_PANEL_OPEN(user, machine.panel_open) /singleton/machine_construction/tcomms/panel_closed/post_construct(obj/machinery/machine) try_change_state(machine, /singleton/machine_construction/tcomms/panel_open/no_cable) @@ -46,16 +47,19 @@ return state_interactions(I, user, machine) /singleton/machine_construction/tcomms/panel_open/proc/state_interactions(obj/item/I, mob/user, obj/machinery/machine) - if(isScrewdriver(I)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) + if(!I.use_as_tool(machine, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE TRANSFER_STATE(/singleton/machine_construction/tcomms/panel_closed) machine.panel_open = FALSE - to_chat(user, "You fasten the bolts.") - playsound(machine.loc, 'sound/items/Screwdriver.ogg', 50, 1) - return - if(isWrench(I)) + machine.USE_FEEDBACK_NEW_PANEL_OPEN(user, machine.panel_open) + return TRUE + if(I.tool_behaviour == TOOL_WRENCH) + if(!I.use_as_tool(machine, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE TRANSFER_STATE(/singleton/machine_construction/tcomms/panel_open/unwrenched) to_chat(user, "You dislodge the external plating.") - playsound(machine.loc, 'sound/items/Ratchet.ogg', 75, 1) + return TRUE /singleton/machine_construction/tcomms/panel_open/mechanics_info() . = list() @@ -63,14 +67,16 @@ . += "Use a wrench to remove the external plating." /singleton/machine_construction/tcomms/panel_open/unwrenched/state_interactions(obj/item/I, mob/user, obj/machinery/machine) - if(isWrench(I)) + if(I.tool_behaviour == TOOL_WRENCH) + if(!I.use_as_tool(machine, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRANSFER_STATE(/singleton/machine_construction/tcomms/panel_open) to_chat(user, "You secure the external plating.") - playsound(machine.loc, 'sound/items/Ratchet.ogg', 75, 1) return - if(isWirecutter(I)) + if(I.tool_behaviour == TOOL_WIRECUTTER) + if(!I.use_as_tool(machine, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRANSFER_STATE(/singleton/machine_construction/tcomms/panel_open/no_cable) - playsound(machine.loc, 'sound/items/Wirecutter.ogg', 50, 1) to_chat(user, "You remove the cables.") var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( user.loc ) A.amount = 5 @@ -93,7 +99,9 @@ else to_chat(user, SPAN_WARNING("You need five coils of wire for this.")) return TRUE - if(isCrowbar(I)) + if(I.tool_behaviour == TOOL_CROWBAR) + if(!I.use_as_tool(machine, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRANSFER_STATE(/singleton/machine_construction/default/deconstructed) machine.dismantle() return @@ -101,7 +109,9 @@ if(istype(I, /obj/item/storage/part_replacer)) return machine.part_replacement(I, user) - if(isWrench(I)) + if(I.tool_behaviour == TOOL_WRENCH) + if(!I.use_as_tool(machine, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return return machine.part_removal(user) if(istype(I)) diff --git a/code/game/machinery/_machines_base/machinery.dm b/code/game/machinery/_machines_base/machinery.dm index fa2db0d9eb480..e9167b2534d97 100644 --- a/code/game/machinery/_machines_base/machinery.dm +++ b/code/game/machinery/_machines_base/machinery.dm @@ -7,10 +7,12 @@ /obj/machinery name = "machinery" - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/machines/wooden_tv.dmi' w_class = ITEM_SIZE_NO_CONTAINER layer = STRUCTURE_LAYER // Layer under items - init_flags = INIT_MACHINERY_PROCESS_SELF + init_flags = INIT_MACHINERY_START_PROCESSING + throw_speed = 1 + throw_range = 5 health_resistances = DAMAGE_RESIST_ELECTRICAL @@ -62,7 +64,6 @@ var/frame_type = /obj/machinery/constructable_frame/machine_frame/deconstruct /// Whether or not the machine is allowed to be dismantled/modified. Used for snowflake consoles that would break permanently if dismantled. Also prevents damage, since the machine would be irreparable in this state. Has to be defined here because machinery datums. var/can_use_tools = TRUE - /// Component parts queued for processing by the machine. Expected type: `/obj/item/stock_parts` var/list/processing_parts /// Bitflag. What is being processed. One of `MACHINERY_PROCESS_*`. @@ -79,19 +80,31 @@ . = ..() if(d) set_dir(d) - if (init_flags & INIT_MACHINERY_PROCESS_ALL) - START_PROCESSING_MACHINE(src, init_flags & INIT_MACHINERY_PROCESS_ALL) - SSmachines.machinery += src // All machines should remain in this list, always. + if (init_flags & INIT_MACHINERY_START_PROCESSING) + START_PROCESSING_MACHINE(src, INIT_MACHINERY_START_PROCESSING) + + SSmachines.register_machinery(src) // All machines should be registered this way, always. if(ispath(wires)) wires = new wires(src) populate_parts(populate_parts) RefreshParts() power_change() +/obj/machinery/post_health_change(health_mod, prior_health, damage_type) + if (health_mod < 0 && !health_dead()) + var/initial_damage_percentage = Percent(get_max_health() - prior_health, get_max_health(), 0) + var/damage_percentage = get_damage_percentage() + if (damage_percentage >= 75 && initial_damage_percentage < 75) + visible_message(SPAN_DANGER("\The [src] looks like it's about to break!")) + else if (damage_percentage >= 50 && initial_damage_percentage < 50) + visible_message(SPAN_DANGER("\The [src] looks seriously damaged!" )) + else if (damage_percentage >= 25 && initial_damage_percentage < 25) + visible_message(SPAN_DANGER("\The [src] shows signs of damage!" )) + /obj/machinery/Destroy() if(istype(wires)) QDEL_NULL(wires) - SSmachines.machinery -= src + SSmachines.unregister_machinery(src) QDEL_NULL_LIST(component_parts) // Further handling is done via destroyed events. STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_ALL) . = ..() @@ -106,17 +119,6 @@ set_broken(FALSE, MACHINE_BROKEN_HEALTH) queue_icon_update() -/// Part of the machinery subsystem's process stack. Processes everything defined by `processing_flags`. -/obj/machinery/proc/ProcessAll(wait) - if(processing_flags & MACHINERY_PROCESS_COMPONENTS) - for(var/thing in processing_parts) - var/obj/item/stock_parts/part = thing - if(part.machine_process(src) == PROCESS_KILL) - part.stop_processing() - - if((processing_flags & MACHINERY_PROCESS_SELF) && Process(wait) == PROCESS_KILL) - STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - /obj/machinery/Process() return PROCESS_KILL // Only process if you need to. @@ -124,7 +126,7 @@ if(use_power && operable()) use_power_oneoff(7500/severity) - var/obj/effect/overlay/pulse2 = new /obj/effect/overlay(loc) + var/obj/overlay/pulse2 = new /obj/overlay(loc) pulse2.icon = 'icons/effects/effects.dmi' pulse2.icon_state = "empdisable" pulse2.SetName("emp sparks") @@ -141,7 +143,7 @@ else wires.RandomPulse() visible_message(SPAN_WARNING("Something sparks inside \the [src]'s wiring panel!")) - new /obj/effect/sparks(get_turf(src)) + new /obj/sparks(get_turf(src)) ..() @@ -159,6 +161,12 @@ if (prob(25)) qdel(src) +/obj/machinery/tgui_status(mob/user, datum/tgui_state/state) + if(MACHINE_IS_BROKEN(src) || (!interact_offline && !is_powered())) + return STATUS_CLOSE + + return ..() + /obj/machinery/CanUseTopic(mob/user) if(MACHINE_IS_BROKEN(src)) return STATUS_CLOSE @@ -235,34 +243,71 @@ // If you don't call parent in this proc, you must make all appropriate checks yourself. // If you do, you must respect the return value. /obj/machinery/attack_hand(mob/user) - if((. = ..())) // Buckling, climbers; unlikely to return true. + if((. = ..())) // Buckling, climbers; unlikely to return true unless on harm intent and damage is dealt. return - if(MUTATION_FERAL in user.mutations) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*2) - attack_generic(user, 10, "smashes") - return TRUE if(!CanPhysicallyInteract(user)) return FALSE // The interactions below all assume physical access to the machine. If this is not the case, we let the machine take further action. if(!user.IsAdvancedToolUser()) - to_chat(user, SPAN_WARNING("You don't have the dexterity to do this!")) return TRUE if(ishuman(user)) var/mob/living/carbon/human/H = user - if(H.getBrainLoss() >= 55) + if(H.getBrainLoss() >= 80) visible_message(SPAN_WARNING("\The [H] stares cluelessly at \the [src].")) return TRUE - else if(prob(H.getBrainLoss())) - to_chat(user, SPAN_WARNING("You momentarily forget how to use \the [src].")) - return TRUE if((. = component_attack_hand(user))) - return + return TRUE if(wires && (. = wires.Interact(user))) - return + return TRUE if((. = physical_attack_hand(user))) - return + return TRUE if(CanUseTopic(user, DefaultTopicState()) > STATUS_CLOSE) return interface_interact(user) + +/obj/machinery/post_anchor_change() + update_use_power(anchored) + power_change() + ..() + +/** + * Called by machines that can hold a mob (sleeper, suit cycler, etc.), checking if mob can be moved before doing so. + * Call parent first if you want to add new checks specific for each machine, this proc handles the common stuff. + * Returns TRUE if mob can be moved into a machine, FALSE if it cannot. + */ +/obj/machinery/proc/user_can_move_target_inside(mob/target, mob/user) + SHOULD_CALL_PARENT(TRUE) + if (!user.use_sanity_check(src, target)) + return FALSE + if (!istype(target)) + to_chat(user, SPAN_WARNING("\The [src] cannot handle such a lifeform!")) + return FALSE + if (user.incapacitated() || !istype(user)) + return FALSE + if (!target.simulated) + return FALSE + if (inoperable()) + to_chat(user, SPAN_WARNING("\The [src] is not functioning.")) + return FALSE + if (target.abiotic()) + to_chat(user, SPAN_WARNING("[user == target ? "You" : "[target]"] can't enter \the [src] while wearing abiotic items.")) + return FALSE + if (target.buckled) + to_chat(user, SPAN_WARNING("Unbuckle [user == target ? "yourself" : "\the [target]"] before attempting to [user == target ? "enter \the [src]" : "move them"].")) + return FALSE + if (panel_open) + to_chat(user, SPAN_WARNING("Close the maintenance panel before attempting to place [user == target ? "yourself" : "\the [target]"] in \the [src].")) + return FALSE + for (var/mob/living/carbon/slime/slime in range(0,target)) + if (slime.Victim == target) + to_chat(user, "[target] will not fit into \the [src] because they have a slime latched onto them.") + return FALSE + for (var/obj/item/grab/grab in target.grabbed_by) + if (grab.assailant == user || grab.assailant == target) + continue + to_chat(user, SPAN_WARNING("\The [target] is being grabbed by [grab.assailant] and can't be placed in \the [src].")) + return FALSE + return TRUE + /** * If you want to have interface interactions handled for you conveniently, use this. * Return `TRUE` for handled. @@ -310,7 +355,7 @@ return FALSE if(!prob(prb)) return FALSE - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread s.set_up(5, 1, src) s.start() if(electrocute_mob(user, get_area(src), src, 0.7)) @@ -327,7 +372,6 @@ /// Deconstructs the machine into its base frame and ejects all of its components. Returns boolean. /obj/machinery/proc/dismantle() - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) var/obj/item/stock_parts/circuitboard/circuit = get_component_of_type(/obj/item/stock_parts/circuitboard) if(circuit) circuit.deconstruct(src) @@ -361,44 +405,53 @@ /obj/machinery/proc/malf_upgrade(mob/living/silicon/ai/user) return FALSE -/obj/machinery/CouldUseTopic(mob/user) - ..() +/obj/machinery/proc/click_sound(mob/user) if(clicksound && world.time > next_clicksound && istype(user, /mob/living/carbon)) next_clicksound = world.time + CLICKSOUND_INTERVAL playsound(src, clicksound, clickvol) +/obj/machinery/CouldUseTopic(mob/user) + . = ..() + click_sound(user) + +/obj/machinery/tgui_act(action, list/params) + . = ..() + click_sound(usr) + /// Displays all components in the machine to the user. /obj/machinery/proc/display_parts(mob/user) - to_chat(user, SPAN_NOTICE("Following parts detected in the machine:")) + . = list() + . += SPAN_NOTICE("Following parts detected in the machine:") for(var/obj/item/C in component_parts) - to_chat(user, SPAN_NOTICE(" [C.name]")) + . += SPAN_NOTICE(" [C.name]") for(var/path in uncreated_component_parts) var/obj/item/thing = path - to_chat(user, SPAN_NOTICE(" [initial(thing.name)] ([uncreated_component_parts[path] || 1])")) + . += SPAN_NOTICE(" [initial(thing.name)] ([uncreated_component_parts[path] || 1])") /obj/machinery/examine(mob/user) . = ..() - if (panel_open) - to_chat(user, SPAN_NOTICE("The service panel is open.")) + if(panel_open) + . += SPAN_NOTICE("The service panel is open.") if(component_parts && hasHUD(user, HUD_SCIENCE)) - display_parts(user) + . += display_parts(user) if(GET_FLAGS(stat, MACHINE_STAT_NOSCREEN)) - to_chat(user, SPAN_WARNING("It is missing a screen, making it hard to interact with.")) + . += SPAN_WARNING("It is missing a screen, making it hard to interact with.") else if(GET_FLAGS(stat, MACHINE_STAT_NOINPUT)) - to_chat(user, SPAN_WARNING("It is missing any input device.")) + . += SPAN_WARNING("It is missing any input device.") else if((!is_powered()) && !interact_offline) - to_chat(user, SPAN_WARNING("It is not receiving power.")) + . += SPAN_WARNING("It is not receiving power.") if(construct_state && construct_state.mechanics_info()) - to_chat(user, SPAN_NOTICE("It can be manipulated using tools.")) + . += SPAN_NOTICE("It can be manipulated using tools.") var/list/missing = missing_parts() if(missing) var/list/parts = list() for(var/type in missing) var/obj/item/fake_thing = type parts += "[num2text(missing[type])] [initial(fake_thing.name)]" - to_chat(user, SPAN_WARNING("\The [src] is missing [english_list(parts)], rendering it inoperable.")) + . += SPAN_WARNING("[src] is missing [english_list(parts)], rendering it inoperable.") if (user.skill_check(SKILL_CONSTRUCTION, SKILL_BASIC) || isobserver(user)) - to_chat(user, SPAN_NOTICE(machine_desc)) + if(machine_desc) + . += SPAN_NOTICE(machine_desc) /obj/machinery/get_mechanics_info() . = ..() diff --git a/code/game/machinery/_machines_base/machinery_components.dm b/code/game/machinery/_machines_base/machinery_components.dm index 0b53b07e0c77f..7c07dbead4f48 100644 --- a/code/game/machinery/_machines_base/machinery_components.dm +++ b/code/game/machinery/_machines_base/machinery_components.dm @@ -3,6 +3,7 @@ GLOBAL_LIST_INIT(machine_path_to_circuit_type, cache_circuits_by_build_path()) /proc/cache_circuits_by_build_path() + RETURN_TYPE(/list) . = list() for(var/board_path in subtypesof(/obj/item/stock_parts/circuitboard)) var/obj/item/stock_parts/circuitboard/board = board_path //fake type @@ -134,7 +135,7 @@ GLOBAL_LIST_INIT(machine_path_to_circuit_type, cache_circuits_by_build_path()) if(istype(part)) LAZYADD(component_parts, part) part.on_install(src) - GLOB.destroyed_event.register(part, src, .proc/component_destroyed) + GLOB.destroyed_event.register(part, src, PROC_REF(component_destroyed)) else if(ispath(part)) LAZYINITLIST(uncreated_component_parts) uncreated_component_parts[part] += 1 @@ -224,30 +225,47 @@ GLOBAL_LIST_INIT(machine_path_to_circuit_type, cache_circuits_by_build_path()) if(!(component.part_flags & PART_FLAG_HAND_REMOVE)) return 0 if(!components_are_accessible(component.type)) - to_chat(user, SPAN_WARNING("The insertion point for \the [component] is inaccessible!")) + to_chat(user, SPAN_WARNING("The insertion point for [component] is inaccessible!")) return 0 for(var/path in maximum_component_parts) if(istype(component, path) && (number_of_components(path) == maximum_component_parts[path])) - to_chat(user, SPAN_WARNING("There are too many parts of this type installed in \the [src] already!")) + to_chat(user, SPAN_WARNING("There are too many parts of this type installed in [src] already!")) return 0 return 1 /// Called whenever an attached component updates it's status. Override to handle updates to the machine. /obj/machinery/proc/component_stat_change(obj/item/stock_parts/part, old_stat, flag) -/obj/machinery/attackby(obj/item/I, mob/user) - if(component_attackby(I, user)) +/obj/machinery/use_tool(obj/item/tool, mob/living/user, list/click_params) + if(component_attackby(src, user, tool)) return TRUE return ..() +/obj/machinery/Initialize() + . = ..() + RegisterSignal(src, COMSIG_ATOM_TOOL_ACT_EMPTY, PROC_REF(component_attackby)) + +/obj/machinery/can_anchor(obj/item/tool, mob/user, silent) + if (use_power == POWER_USE_ACTIVE) + if (!silent) + to_chat(user, SPAN_WARNING("Turn [src] off first!")) + return FALSE + return ..() + +/obj/machinery/post_anchor_change() + update_use_power(anchored) + power_change() + ..() + /// Passes `attackby()` calls through to components within the machine, if they are accessible. -/obj/machinery/proc/component_attackby(obj/item/I, mob/user) +/obj/machinery/proc/component_attackby(obj/machinery/machine, mob/living/user, obj/item/tool) for(var/obj/item/stock_parts/part in component_parts) if(!components_are_accessible(part.type)) continue - if((. = part.attackby(I, user))) - return - return construct_state && construct_state.attackby(I, user, src) + if((. = tool.resolve_attackby(part, user))) + return ITEM_INTERACT_SUCCESS + if(construct_state && construct_state.attackby(tool, user, src)) + return ITEM_INTERACT_SUCCESS /// Passes `attack_hand()` calls through to components within the machine, if they are accessible. /obj/machinery/proc/component_attack_hand(mob/user) @@ -303,15 +321,15 @@ Standard helpers for users interacting with machinery parts. if(isstack(part)) var/obj/item/stack/stack = part if (!stack.can_use(number)) - to_chat(user, SPAN_WARNING("You need at least [number] [stack.plural_name] to install into \the [src].")) + USE_FEEDBACK_STACK_NOT_ENOUGH(stack, number, "to install into [src].") return FALSE install_component(stack.split(number, TRUE)) else user.unEquip(part, src) install_component(part) user.visible_message( - SPAN_NOTICE("\The [user] installs \the [part] in \the [src]!"), - SPAN_NOTICE("You install \the [part] in \the [src]!") + SPAN_NOTICE("[user] installs [part] in [src]!"), + SPAN_NOTICE("You install [part] in [src]!") ) return TRUE @@ -325,7 +343,7 @@ Standard helpers for users interacting with machinery parts. if(components_are_accessible(path)) removable_parts[initial(part.name)] = path if(length(removable_parts)) - var/input = input(user, "Which part would you like to uninstall from \the [src]?", "Part Removal") as null|anything in removable_parts + var/input = input(user, "Which part would you like to uninstall from [src]?", "Part Removal") as null|anything in removable_parts if(!input || QDELETED(src) || !Adjacent(user) || user.incapacitated()) return TRUE var/path = removable_parts[input] @@ -340,8 +358,8 @@ Standard helpers for users interacting with machinery parts. if(part) user.put_in_hands(part) // Already dropped at loc, so that's the fallback. user.visible_message( - SPAN_NOTICE("\The [user] removes \the [part] from \the [src]."), - SPAN_NOTICE("You remove \the [part] from \the [src].") + SPAN_NOTICE("[user] removes [part] from [src]."), + SPAN_NOTICE("You remove [part] from [src].") ) /// Returns a list of required components that are missing from the machine, or `null` if no components are missing or the machine lacks a `construct_state`. diff --git a/code/game/machinery/_machines_base/machinery_power.dm b/code/game/machinery/_machines_base/machinery_power.dm index ae87d38893d56..1f6b0cb43a249 100644 --- a/code/game/machinery/_machines_base/machinery_power.dm +++ b/code/game/machinery/_machines_base/machinery_power.dm @@ -23,7 +23,7 @@ This is /obj/machinery level code to properly manage power usage from the area. // return 1 if(!check_area) - check_area = loc.loc // make sure it's in an area + check_area = get_area(src) // make sure it's in an area if(!check_area || !isarea(check_area)) return FALSE // if not, then not powered if(chan == POWER_CHAN) @@ -89,13 +89,13 @@ This is /obj/machinery level code to properly manage power usage from the area. // Do not do power stuff in New/Initialize until after ..() /obj/machinery/Initialize() REPORT_POWER_CONSUMPTION_CHANGE(0, get_power_usage()) - GLOB.moved_event.register(src, src, .proc/update_power_on_move) + GLOB.moved_event.register(src, src, PROC_REF(update_power_on_move)) power_init_complete = TRUE . = ..() // Or in Destroy at all, but especially after the ..(). /obj/machinery/Destroy() - GLOB.moved_event.unregister(src, src, .proc/update_power_on_move) + GLOB.moved_event.unregister(src, src, PROC_REF(update_power_on_move)) REPORT_POWER_CONSUMPTION_CHANGE(get_power_usage(), 0) . = ..() diff --git a/code/game/machinery/_machines_base/machinery_public_vars.dm b/code/game/machinery/_machines_base/machinery_public_vars.dm index 08bdb73273026..753586c27416b 100644 --- a/code/game/machinery/_machines_base/machinery_public_vars.dm +++ b/code/game/machinery/_machines_base/machinery_public_vars.dm @@ -46,7 +46,7 @@ Listener registration. You must unregister yourself if you are destroyed; the ow return // Can try and register, but updates aren't coming if(!listeners[owner]) listeners[owner] = list() - GLOB.destroyed_event.register(owner, src, .proc/owner_destroyed) + GLOB.destroyed_event.register(owner, src, PROC_REF(owner_destroyed)) LAZYADD(listeners[owner][listener], registered_proc) return TRUE diff --git a/code/game/machinery/_machines_base/machinery_public_vars_common.dm b/code/game/machinery/_machines_base/machinery_public_vars_common.dm index e52167a209728..ff09393298dd3 100644 --- a/code/game/machinery/_machines_base/machinery_public_vars_common.dm +++ b/code/game/machinery/_machines_base/machinery_public_vars_common.dm @@ -25,7 +25,7 @@ Public vars at /obj/machinery level. Just because they are here does not mean th /singleton/public_access/public_method/toggle_input_toggle name = "toggle input" desc = "Toggles the input toggle variable." - call_proc = /obj/machinery/proc/toggle_input_toggle + call_proc = TYPE_PROC_REF(/obj/machinery, toggle_input_toggle) /// Handles toggling the machine's toggle variable. Used by the `toggle_input_toggle` public method. /obj/machinery/proc/toggle_input_toggle() @@ -101,7 +101,7 @@ Public vars at /obj/machinery level. Just because they are here does not mean th /singleton/public_access/public_method/toggle_power name = "toggle power" desc = "Turns the machine on or off." - call_proc = /obj/machinery/proc/toggle_power + call_proc = TYPE_PROC_REF(/obj/machinery, toggle_power) /// Toggles the machine's power state. Used by the `toggle_power` public method. /obj/machinery/proc/toggle_power() @@ -110,7 +110,7 @@ Public vars at /obj/machinery level. Just because they are here does not mean th /singleton/public_access/public_method/refresh name = "refresh machine" desc = "Attempts to refresh the machine's status. Implementation may vary." - call_proc = /obj/machinery/proc/refresh + call_proc = TYPE_PROC_REF(/obj/machinery, refresh) /// Refreshes the machine's status. Used by the `refresh` public method. /obj/machinery/proc/refresh() diff --git a/code/game/machinery/_machines_base/machinery_stat.dm b/code/game/machinery/_machines_base/machinery_stat.dm index 8399334b1ca7b..f1b7f5fdb28e0 100644 --- a/code/game/machinery/_machines_base/machinery_stat.dm +++ b/code/game/machinery/_machines_base/machinery_stat.dm @@ -44,6 +44,28 @@ return FALSE +/** + * Updates the machine's stat immunity. This also updates the stat flag itself, if it's set and you're turning on immunity. + * + * **Parameters**: + * - `statflag` (bitfield, One of `MACHINE_STAT_*`) - The stat flag to set immunity of. + * - `new_state` (boolean, default `TRUE`) - The new state of the stat immunity flag. + * + * Returns boolean. Whether or not `stat` was updated during the operation. + */ +/obj/machinery/proc/set_stat_immunity(statflag, new_state = TRUE) + if (new_state == !!HAS_FLAGS(stat_immune, statflag)) + return FALSE + if (new_state) + SET_FLAGS(stat_immune, statflag) + if (HAS_FLAGS(stat, statflag)) + CLEAR_FLAGS(stat, statflag) + return TRUE + return FALSE + CLEAR_FLAGS(stat_immune, statflag) + return FALSE + + /** * Toggles a stat flag. * diff --git a/code/game/machinery/_machines_base/stock_parts/building_material.dm b/code/game/machinery/_machines_base/stock_parts/building_material.dm index 74a698a5a5024..9f1a62110b397 100644 --- a/code/game/machinery/_machines_base/stock_parts/building_material.dm +++ b/code/game/machinery/_machines_base/stock_parts/building_material.dm @@ -2,7 +2,7 @@ /obj/item/stock_parts/building_material name = "building materials" desc = "Various standard wires, pipes, and other materials." - icon = 'icons/obj/power.dmi' + icon = 'icons/obj/machines/power/power_cond_white.dmi' icon_state = "coil" part_flags = PART_FLAG_QDEL var/list/materials diff --git a/code/game/machinery/_machines_base/stock_parts/legacy_parts.dm b/code/game/machinery/_machines_base/stock_parts/legacy_parts.dm index b9f8d8672859e..27a8b375a86d5 100644 --- a/code/game/machinery/_machines_base/stock_parts/legacy_parts.dm +++ b/code/game/machinery/_machines_base/stock_parts/legacy_parts.dm @@ -51,11 +51,12 @@ if(charge > max_charge) charge = max_charge -/obj/item/stock_parts/capacitor/proc/use(amount) +/obj/item/stock_parts/capacitor/use(amount) if(charge) charge -= amount if(charge < 0) charge = 0 + return TRUE //Rank 2 diff --git a/code/game/machinery/_machines_base/stock_parts/power/battery.dm b/code/game/machinery/_machines_base/stock_parts/power/battery.dm index 2565c60d40920..0ec70966807f8 100644 --- a/code/game/machinery/_machines_base/stock_parts/power/battery.dm +++ b/code/game/machinery/_machines_base/stock_parts/power/battery.dm @@ -32,7 +32,7 @@ if(cell) return cell = new_cell - GLOB.destroyed_event.register(cell, src, .proc/remove_cell) + GLOB.destroyed_event.register(cell, src, PROC_REF(remove_cell)) if(!machine) machine = loc if(istype(machine)) @@ -186,13 +186,13 @@ /obj/item/stock_parts/power/battery/buildable/crap name = "battery backup (weak)" - desc = "The NanoTrasen BAT84 is an all-in-one battery backup system sold at an affordable price." + desc = "The Nanotrasen BAT84 is an all-in-one battery backup system sold at an affordable price." matter = list(MATERIAL_STEEL = 100) charge_rate = 0.25 charge_wait_counter = 15 /obj/item/stock_parts/power/battery/buildable/crap/get_lore_info() - return "The NanoTrasen BAT84's debut on the battery backup market was greeted by universally negative reviews, \ + return "The Nanotrasen BAT84's debut on the battery backup market was greeted by universally negative reviews, \ highlighting its slow recharge rate and exceptional lack of responsiveness to power changes.\ Nevertheless, it has been steadily gaining market share due to rock-bottom prices and a predatory marketing campaign." diff --git a/code/game/machinery/_machines_base/stock_parts/power/power.dm b/code/game/machinery/_machines_base/stock_parts/power/power.dm index 5fb6890cbc551..7555628e499e6 100644 --- a/code/game/machinery/_machines_base/stock_parts/power/power.dm +++ b/code/game/machinery/_machines_base/stock_parts/power/power.dm @@ -12,7 +12,7 @@ /obj/item/stock_parts/power/on_install(obj/machinery/machine) ..() - ADD_SORTED(machine.power_components, src, /proc/cmp_power_component_priority) + ADD_SORTED(machine.power_components, src, GLOBAL_PROC_REF(cmp_power_component_priority)) machine.power_change() // Makes the machine recompute its power status. cached_channel = initial(machine.power_channel) diff --git a/code/game/machinery/_machines_base/stock_parts/power/terminal.dm b/code/game/machinery/_machines_base/stock_parts/power/terminal.dm index 552ed27422adb..977c89ae05f3f 100644 --- a/code/game/machinery/_machines_base/stock_parts/power/terminal.dm +++ b/code/game/machinery/_machines_base/stock_parts/power/terminal.dm @@ -3,7 +3,8 @@ /obj/item/stock_parts/power/terminal name = "wired connection" desc = "A power connection directly to the grid, via power cables." - icon_state = "terminal" + icon = 'icons/obj/machines/apc.dmi' + icon_state = "term" priority = 2 var/obj/machinery/power/terminal/terminal var/terminal_dir = 0 @@ -73,19 +74,19 @@ unset_terminal(machine, terminal) terminal = new_terminal terminal.master = src - GLOB.destroyed_event.register(terminal, src, .proc/unset_terminal) + GLOB.destroyed_event.register(terminal, src, PROC_REF(unset_terminal)) - set_extension(src, /datum/extension/event_registration/shuttle_stationary, GLOB.moved_event, machine, .proc/machine_moved, get_area(src)) + set_extension(src, /datum/extension/event_registration/shuttle_stationary, GLOB.moved_event, machine, PROC_REF(machine_moved), get_area(src)) set_status(machine, PART_STAT_CONNECTED) start_processing(machine) /obj/item/stock_parts/power/terminal/proc/machine_moved(obj/machinery/machine, turf/old_loc, turf/new_loc) if(!terminal) - GLOB.moved_event.unregister(machine, src, .proc/machine_moved) + GLOB.moved_event.unregister(machine, src, PROC_REF(machine_moved)) return if(istype(new_loc) && (terminal.loc == get_step(new_loc, terminal_dir))) return // This location is fine - machine.visible_message(SPAN_WARNING("The terminal is ripped out of \the [machine]!")) + machine.visible_message(SPAN_WARNING("The terminal is ripped out of [machine]!")) qdel(terminal) // will handle everything via the destroyed event /obj/item/stock_parts/power/terminal/proc/make_terminal(obj/machinery/machine) @@ -114,6 +115,35 @@ to_chat(user, SPAN_NOTICE("There is already a terminal here.")) return TRUE +/obj/item/stock_parts/power/terminal/wirecutter_act(mob/living/user, obj/item/tool) + var/obj/machinery/machine = loc + if(!istype(machine)) + return + if(!terminal) + return + var/turf/T = get_step(machine, terminal_dir) + if(terminal_dir && user.loc != T) + return null // Wrong terminal handler. + if(istype(T) && !T.is_plating()) + . = ITEM_INTERACT_SUCCESS + to_chat(user, SPAN_WARNING("You must remove the floor plating in front of [machine] first.")) + return + . = ITEM_INTERACT_SUCCESS + user.visible_message(SPAN_WARNING("[user] dismantles the power terminal from [machine]."), \ + "You begin to cut the cables...") + if(!tool.use_as_tool(src, user, 5 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + if(terminal && (machine == loc) && machine.components_are_accessible(type)) + if(prob(50) && electrocute_mob(user, terminal.powernet, terminal)) + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread + s.set_up(5, 1, machine) + s.start() + if(user.stunned) + return + new /obj/item/stack/cable_coil(T, 10) + to_chat(user, SPAN_NOTICE("You cut the cables and dismantle the power terminal.")) + qdel(terminal) + /obj/item/stock_parts/power/terminal/attackby(obj/item/I, mob/user) var/obj/machinery/machine = loc if(!istype(machine)) @@ -128,54 +158,31 @@ return FALSE if(istype(T) && !T.is_plating()) - to_chat(user, SPAN_WARNING("You must remove the floor plating in front of \the [machine] first.")) + to_chat(user, SPAN_WARNING("You must remove the floor plating in front of [machine] first.")) return TRUE var/obj/item/stack/cable_coil/C = I if(!C.can_use(10)) - to_chat(user, SPAN_WARNING("You need ten lengths of cable for \the [machine].")) + to_chat(user, SPAN_WARNING("You need ten lengths of cable for [machine].")) return TRUE - user.visible_message(SPAN_WARNING("\The [user] adds cables to the \the [machine]."), \ - "You start adding cables to \the [machine] frame...") + user.visible_message(SPAN_WARNING("[user] adds cables to the [machine]."), \ + "You start adding cables to [machine] frame...") playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 2 SECONDS, machine, DO_REPAIR_CONSTRUCT)) if(C.can_use(10) && !terminal && (machine == loc) && machine.components_are_accessible(type) && !blocking_terminal_at_loc(machine, T, user)) var/obj/structure/cable/N = T.get_cable_node() if (prob(50) && electrocute_mob(user, N, N)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread s.set_up(5, 1, machine) s.start() if(user.stunned) return TRUE C.use(10) user.visible_message(\ - SPAN_WARNING("\The [user] has added cables to the \the [machine]!"),\ - "You add cables to the \the [machine].") + SPAN_WARNING("[user] has added cables to the [machine]!"),\ + "You add cables to the [machine].") make_terminal(machine) return TRUE - if(isWirecutter(I) && terminal) - var/turf/T = get_step(machine, terminal_dir) - if(terminal_dir && user.loc != T) - return FALSE // Wrong terminal handler. - if(istype(T) && !T.is_plating()) - to_chat(user, SPAN_WARNING("You must remove the floor plating in front of \the [machine] first.")) - return TRUE - user.visible_message(SPAN_WARNING("\The [user] dismantles the power terminal from \the [machine]."), \ - "You begin to cut the cables...") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 5 SECONDS, machine, DO_REPAIR_CONSTRUCT)) - if(terminal && (machine == loc) && machine.components_are_accessible(type)) - if (prob(50) && electrocute_mob(user, terminal.powernet, terminal)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, machine) - s.start() - if(user.stunned) - return TRUE - new /obj/item/stack/cable_coil(T, 10) - to_chat(user, SPAN_NOTICE("You cut the cables and dismantle the power terminal.")) - qdel(terminal) - return TRUE - /obj/item/stock_parts/power/terminal/buildable part_flags = PART_FLAG_HAND_REMOVE matter = list(MATERIAL_STEEL = 400) diff --git a/code/game/machinery/_machines_base/stock_parts/radio/transmitter.dm b/code/game/machinery/_machines_base/stock_parts/radio/transmitter.dm index ef3ca3e1aef11..81aecd9c73ada 100644 --- a/code/game/machinery/_machines_base/stock_parts/radio/transmitter.dm +++ b/code/game/machinery/_machines_base/stock_parts/radio/transmitter.dm @@ -11,7 +11,7 @@ return if(!buffer) buffer = data - addtimer(new Callback(src, .proc/transmit), latency) + addtimer(CALLBACK(src, PROC_REF(transmit)), latency) else buffer |= data @@ -48,7 +48,7 @@ start_processing(machine) for(var/thing in transmit_on_change) var/singleton/public_access/public_variable/variable = transmit_on_change[thing] - variable.register_listener(src, machine, .proc/var_changed) + variable.register_listener(src, machine, PROC_REF(var_changed)) /obj/item/stock_parts/radio/transmitter/basic/on_uninstall(obj/machinery/machine) for(var/thing in transmit_on_change) @@ -88,7 +88,7 @@ if(!is_valid_event(machine, event)) event = null if(event) - event.register_listener(src, machine, .proc/trigger_event) + event.register_listener(src, machine, PROC_REF(trigger_event)) /obj/item/stock_parts/radio/transmitter/on_event/on_uninstall(obj/machinery/machine) if(event) diff --git a/code/game/machinery/air_sensor.dm b/code/game/machinery/air_sensor.dm index 8b393f2d62260..368fd5342a60e 100644 --- a/code/game/machinery/air_sensor.dm +++ b/code/game/machinery/air_sensor.dm @@ -1,7 +1,7 @@ /obj/machinery/air_sensor - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/airfilter.dmi' icon_state = "gsensor1" - name = "Gas Sensor" + name = "gas sensor" anchored = TRUE diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm deleted file mode 100644 index 4c95e603794a0..0000000000000 --- a/code/game/machinery/alarm.dm +++ /dev/null @@ -1,1277 +0,0 @@ -/singleton/environment_data - var/list/important_gasses = list( - GAS_OXYGEN = TRUE, - GAS_NITROGEN = TRUE, - GAS_CO2 = TRUE - ) - var/list/dangerous_gasses = list( - GAS_CO2 = TRUE - ) - var/list/filter_gasses = list( - GAS_OXYGEN, - GAS_NITROGEN, - GAS_CO2, - GAS_N2O, - GAS_PHORON - ) - -//////////////////////////////////////// -//CONTAINS: Air Alarms and Fire Alarms// -//////////////////////////////////////// - -#define AALARM_MODE_SCRUBBING 1 -#define AALARM_MODE_REPLACEMENT 2 //like scrubbing, but faster. -#define AALARM_MODE_PANIC 3 //constantly sucks all air -#define AALARM_MODE_CYCLE 4 //sucks off all air, then refill and switches to scrubbing -#define AALARM_MODE_FILL 5 //emergency fill -#define AALARM_MODE_OFF 6 //Shuts it all down. - -#define AALARM_SCREEN_MAIN 1 -#define AALARM_SCREEN_VENT 2 -#define AALARM_SCREEN_SCRUB 3 -#define AALARM_SCREEN_MODE 4 -#define AALARM_SCREEN_SENSORS 5 - -#define AALARM_REPORT_TIMEOUT 100 - -#define RCON_NO 1 -#define RCON_AUTO 2 -#define RCON_YES 3 - -#define MAX_TEMPERATURE 90 -#define MIN_TEMPERATURE -40 - -//all air alarms in area are connected via magic -/// List (`string (id_tag)` => `string`). List of 'long names' for vents within the area. Also serves as a list of all vents registered with the area. Set by `./register_env_machine()`. -/area/var/list/air_vent_names = list() -/// List (`string (id_tag)` => `string`). List of 'long names' for scrubbers within the area. Also serves as a list of all scrubbers registered with the area. Set by `./register_env_machine()`. -/area/var/list/air_scrub_names = list() -/// List (`string (id_tag)` => `/datum/signal/data`). List of radio signal data received from vents in the area, indexed by the vent's `id_tag`. Do not modify directly; See `./receive_signal()` and `./send_signal()`. -/area/var/list/air_vent_info = list() -/// List (`string (id_tag)` => `/datum/signal/data`). List of radio signal data received from scrubbers in the area, indexed by the scrubber's `id_tag`. Do not modify directly; See `./receive_signal()` and `./send_signal()`. -/area/var/list/air_scrub_info = list() - -/obj/machinery/alarm - name = "alarm" - icon = 'icons/obj/monitors.dmi' - icon_state = "alarm0" - anchored = TRUE - idle_power_usage = 80 - active_power_usage = 1000 //For heating/cooling rooms. 1000 joules equates to about 1 degree every 2 seconds for a single tile of air. - power_channel = ENVIRON - req_access = list(list(access_atmospherics, access_engine_equip)) - clicksound = "button" - clickvol = 30 - - layer = ABOVE_WINDOW_LAYER - - var/alarm_id = null - var/breach_pressure = ONE_ATMOSPHERE * 0.5 //Pressure below wich vents are shut off, set negative to dissable - var/breach_cooldown = FALSE - var/frequency = 1439 - //var/skipprocess = 0 //Experimenting - var/alarm_frequency = 1437 - var/remote_control = 0 - var/rcon_setting = 2 - var/rcon_time = 0 - var/locked = 1 - var/wiresexposed = FALSE // If it's been screwdrivered open. - var/aidisabled = 0 - var/shorted = 0 - - wires = /datum/wires/alarm - - var/mode = AALARM_MODE_SCRUBBING - var/screen = AALARM_SCREEN_MAIN - var/area_uid - var/area/alarm_area - var/buildstage = 2 //2 is built, 1 is building, 0 is frame. - - var/target_temperature = T0C+20 - var/regulating_temperature = 0 - - var/datum/radio_frequency/radio_connection - - var/list/TLV = list() - var/list/trace_gas = list() //list of other gases that this air alarm is able to detect - - var/danger_level = 0 - var/pressure_dangerlevel = 0 - var/oxygen_dangerlevel = 0 - var/co2_dangerlevel = 0 - var/temperature_dangerlevel = 0 - var/other_dangerlevel = 0 - var/environment_type = /singleton/environment_data - var/report_danger_level = 1 - -/obj/machinery/alarm/cold - target_temperature = T0C+4 - -/singleton/environment_data/finnish/Initialize() - . = ..() - important_gasses[GAS_STEAM] = TRUE - dangerous_gasses -= GAS_STEAM - -/obj/machinery/alarm/warm - target_temperature = T0C+75 - environment_type = /singleton/environment_data/finnish - -/obj/machinery/alarm/warm/Initialize() - . = ..() - TLV["temperature"] = list(T0C-26, T0C, T0C+75, T0C+85) // K - TLV["pressure"] = list(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.30,ONE_ATMOSPHERE*1.50) /* kpa */ - -/obj/machinery/alarm/nobreach - breach_pressure = -1 - -/obj/machinery/alarm/monitor - report_danger_level = 0 - breach_pressure = -1 - -/obj/machinery/alarm/server/New() - ..() - req_access = list(access_rd, access_atmospherics, access_engine_equip) - TLV["temperature"] = list(T0C-26, T0C, T0C+30, T0C+40) // K - target_temperature = T0C+10 - -/obj/machinery/alarm/Destroy() - unregister_radio(src, frequency) - return ..() - -/obj/machinery/alarm/New(loc, dir, atom/frame) - ..(loc) - - if(dir) - src.set_dir(dir) - - if(istype(frame)) - buildstage = 0 - wiresexposed = TRUE - pixel_x = (dir & 3)? 0 : (dir == 4 ? -21 : 21) - pixel_y = (dir & 3)? (dir ==1 ? -21 : 21) : 0 - update_icon() - frame.transfer_fingerprints_to(src) - -/obj/machinery/alarm/Initialize() - . = ..() - alarm_area = get_area(src) - area_uid = alarm_area.uid - if (name == "alarm") - SetName("[alarm_area.name] Air Alarm") - - // breathable air according to human/Life() - TLV[GAS_OXYGEN] = list(16, 19, 135, 140) // Partial pressure, kpa - TLV[GAS_CO2] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa - TLV["other"] = list(-1.0, -1.0, 0.2, 0.5) // Partial pressure, kpa - TLV["pressure"] = list(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20) /* kpa */ - TLV["temperature"] = list(T0C-26, T0C, T0C+40, T0C+66) // K - - - var/singleton/environment_data/env_info = GET_SINGLETON(environment_type) - for(var/g in gas_data.gases) - if(!env_info.important_gasses[g]) - trace_gas += g - - set_frequency(frequency) - update_icon() - -/obj/machinery/alarm/get_req_access() - if(!locked) - return list() - return ..() - -/obj/machinery/alarm/Process() - if(inoperable() || shorted || buildstage != 2) - return - - var/turf/simulated/location = loc - if(!istype(location)) return//returns if loc is not simulated - - var/datum/gas_mixture/environment = location.return_air() - - //Handle temperature adjustment here. - if(environment.return_pressure() > ONE_ATMOSPHERE*0.05) - handle_heating_cooling(environment) - - var/old_level = danger_level - danger_level = overall_danger_level(environment) - - if (old_level != danger_level) - if(danger_level == 2) - playsound(src.loc, 'sound/machines/airalarm.ogg', 25, 0, 4) - apply_danger_level(danger_level) - - if (pressure_dangerlevel != 0) - if (breach_detected()) - mode = AALARM_MODE_OFF - apply_mode() - - if (mode==AALARM_MODE_CYCLE && environment.return_pressure() 2.0) - update_use_power(POWER_USE_ACTIVE) - regulating_temperature = 1 - visible_message("\The [src] clicks as it starts [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\ - "You hear a click and a faint electronic hum.") - else - //check for when we should stop adjusting temperature - if (get_danger_level(target_temperature, TLV["temperature"]) || abs(environment.temperature - target_temperature) <= 0.5) - update_use_power(POWER_USE_IDLE) - regulating_temperature = 0 - visible_message("\The [src] clicks quietly as it stops [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\ - "You hear a click as a faint electronic humming stops.") - - if (regulating_temperature) - if(target_temperature > T0C + MAX_TEMPERATURE) - target_temperature = T0C + MAX_TEMPERATURE - - if(target_temperature < T0C + MIN_TEMPERATURE) - target_temperature = T0C + MIN_TEMPERATURE - - var/datum/gas_mixture/gas - gas = environment.remove(0.25*environment.total_moles) - if(gas) - - if (gas.temperature <= target_temperature) //gas heating - var/energy_used = min( gas.get_thermal_energy_change(target_temperature) , active_power_usage) - - gas.add_thermal_energy(energy_used) - else //gas cooling - var/heat_transfer = min(abs(gas.get_thermal_energy_change(target_temperature)), active_power_usage) - - //Assume the heat is being pumped into the hull which is fixed at 20 C - //none of this is really proper thermodynamics but whatever - - var/cop = gas.temperature/T20C //coefficient of performance -> power used = heat_transfer/cop - - heat_transfer = min(heat_transfer, cop * active_power_usage) //this ensures that we don't use more than active_power_usage amount of power - - heat_transfer = -gas.add_thermal_energy(-heat_transfer) //get the actual heat transfer - - environment.merge(gas) - -/obj/machinery/alarm/proc/overall_danger_level(datum/gas_mixture/environment) - var/partial_pressure = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume - var/environment_pressure = environment.return_pressure() - - var/other_moles = 0 - for(var/g in trace_gas) - other_moles += environment.gas[g] //this is only going to be used in a partial pressure calc, so we don't need to worry about group_multiplier here. - - pressure_dangerlevel = get_danger_level(environment_pressure, TLV["pressure"]) - oxygen_dangerlevel = get_danger_level(environment.gas[GAS_OXYGEN]*partial_pressure, TLV[GAS_OXYGEN]) - co2_dangerlevel = get_danger_level(environment.gas[GAS_CO2]*partial_pressure, TLV[GAS_CO2]) - temperature_dangerlevel = get_danger_level(environment.temperature, TLV["temperature"]) - other_dangerlevel = get_danger_level(other_moles*partial_pressure, TLV["other"]) - - return max( - pressure_dangerlevel, - oxygen_dangerlevel, - co2_dangerlevel, - other_dangerlevel, - temperature_dangerlevel - ) - -// Returns whether this air alarm thinks there is a breach, given the sensors that are available to it. -/obj/machinery/alarm/proc/breach_detected() - var/turf/simulated/location = loc - - if(!istype(location)) - return FALSE - - if(breach_cooldown) - return FALSE - - if(breach_pressure < 0) - return FALSE - - var/datum/gas_mixture/environment = location.return_air() - var/environment_pressure = environment.return_pressure() - - if (environment_pressure <= breach_pressure) - if (!(mode == AALARM_MODE_PANIC || mode == AALARM_MODE_CYCLE)) - return TRUE - - return FALSE - -/obj/machinery/alarm/proc/breach_end_cooldown() - breach_cooldown = FALSE - return - -//disables breach detection temporarily -/obj/machinery/alarm/proc/breach_start_cooldown() - breach_cooldown = TRUE - addtimer(new Callback(src,/obj/machinery/alarm/proc/breach_end_cooldown), 10 MINUTES, TIMER_UNIQUE | TIMER_OVERRIDE) - return - -/obj/machinery/alarm/proc/get_danger_level(current_value, list/danger_levels) - if((current_value >= danger_levels[4] && danger_levels[4] > 0) || current_value <= danger_levels[1]) - return 2 - if((current_value > danger_levels[3] && danger_levels[3] > 0) || current_value < danger_levels[2]) - return 1 - return 0 - -/obj/machinery/alarm/on_update_icon() - if(wiresexposed) - icon_state = "alarmx" - set_light(0) - return - if(inoperable() || shorted) - icon_state = "alarmp" - set_light(0) - return - - var/icon_level = danger_level - if (alarm_area.atmosalm) - icon_level = max(icon_level, 1) //if there's an atmos alarm but everything is okay locally, no need to go past yellow - - var/new_color = null - switch(icon_level) - if (0) - icon_state = "alarm0" - new_color = COLOR_LIME - if (1) - icon_state = "alarm2" //yes, alarm2 is yellow alarm - new_color = COLOR_SUN - if (2) - icon_state = "alarm1" - new_color = COLOR_RED_LIGHT - - pixel_x = 0 - pixel_y = 0 - var/turf/T = get_step(get_turf(src), turn(dir, 180)) - if(istype(T) && T.density) - if(dir == NORTH) - pixel_y = -21 - else if(dir == SOUTH) - pixel_y = 21 - else if(dir == WEST) - pixel_x = 21 - else if(dir == EAST) - pixel_x = -21 - - set_light(0.25, 0.1, 1, 2, new_color) - -/obj/machinery/alarm/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) - return - if(alarm_id == signal.data["alarm_id"] && signal.data["command"] == "shutdown") - mode = AALARM_MODE_OFF - report_danger_level = FALSE - apply_mode() - return - - var/id_tag = signal.data["tag"] - if (!id_tag) - return - if (signal.data["area"] != area_uid) - return - - var/dev_type = signal.data["device"] - if(!(id_tag in alarm_area.air_scrub_names) && !(id_tag in alarm_area.air_vent_names)) - register_env_machine(id_tag, dev_type) - if(dev_type == "AScr") - alarm_area.air_scrub_info[id_tag] = signal.data - else if(dev_type == "AVP") - alarm_area.air_vent_info[id_tag] = signal.data - -/obj/machinery/alarm/proc/register_env_machine(m_id, device_type) - var/new_name - if (device_type=="AVP") - new_name = "[alarm_area.name] Vent Pump #[length(alarm_area.air_vent_names)+1]" - alarm_area.air_vent_names[m_id] = new_name - else if (device_type=="AScr") - new_name = "[alarm_area.name] Air Scrubber #[length(alarm_area.air_scrub_names)+1]" - alarm_area.air_scrub_names[m_id] = new_name - send_signal(m_id, list("init" = new_name) ) - -/obj/machinery/alarm/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_TO_AIRALARM) - -/obj/machinery/alarm/proc/send_signal(target, list/command)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = command - signal.data["tag"] = target - signal.data["sigtype"] = "command" - signal.data["status"] = TRUE - - radio_connection.post_signal(src, signal, RADIO_FROM_AIRALARM) -// log_debug(text("Signal [] Broadcasted to []", command, target)) - - return 1 - -/obj/machinery/alarm/proc/apply_mode() - //propagate mode to other air alarms in the area - //TODO: make it so that players can choose between applying the new mode to the room they are in (related area) vs the entire alarm area - for (var/obj/machinery/alarm/AA in alarm_area) - AA.mode = mode - - breach_start_cooldown() - - switch(mode) - if(AALARM_MODE_SCRUBBING) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("set_power"= 1, "set_scrub_gas" = list(GAS_CO2 = 1), "set_scrubbing"= SCRUBBER_SCRUB, "panic_siphon"= 0) ) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("set_power"= 1, "set_checks"= "default", "set_external_pressure"= "default") ) - - if(AALARM_MODE_PANIC, AALARM_MODE_CYCLE) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("set_power"= 1, "panic_siphon"= 1) ) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("set_power"= 0) ) - - if(AALARM_MODE_REPLACEMENT) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("set_power"= 1, "panic_siphon"= 1) ) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("set_power"= 1, "set_checks"= "default", "set_external_pressure"= "default") ) - - if(AALARM_MODE_FILL) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("set_power"= 0) ) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("set_power"= 1, "set_checks"= "default", "set_external_pressure"= "default") ) - - if(AALARM_MODE_OFF) - for(var/device_id in alarm_area.air_scrub_names) - send_signal(device_id, list("set_power"= 0) ) - for(var/device_id in alarm_area.air_vent_names) - send_signal(device_id, list("set_power"= 0) ) - -/obj/machinery/alarm/proc/apply_danger_level(new_danger_level) - if (report_danger_level && alarm_area.atmosalert(new_danger_level, src)) - post_alert(new_danger_level) - - update_icon() - -/obj/machinery/alarm/proc/post_alert(alert_level) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(alarm_frequency) - if(!frequency) - return - - var/datum/signal/alert_signal = new - alert_signal.source = src - alert_signal.transmission_method = 1 - alert_signal.data["zone"] = alarm_area.name - alert_signal.data["type"] = "Atmospheric" - - if(alert_level==2) - alert_signal.data["alert"] = "severe" - else if (alert_level==1) - alert_signal.data["alert"] = "minor" - else if (alert_level==0) - alert_signal.data["alert"] = "clear" - - frequency.post_signal(src, alert_signal) - -/obj/machinery/alarm/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, master_ui = null, datum/topic_state/state = GLOB.default_state) - var/data[0] - var/remote_connection = 0 - var/remote_access = 0 - if(state) - var/list/href = state.href_list(user) - remote_connection = href["remote_connection"] // Remote connection means we're non-adjacent/connecting from another computer - remote_access = href["remote_access"] // Remote access means we also have the privilege to alter the air alarm. - - data["locked"] = locked && !issilicon(user) - data["remote_connection"] = remote_connection - data["remote_access"] = remote_access - data["rcon"] = rcon_setting - data["screen"] = screen - - populate_status(data) - - if(!(locked && !remote_connection) || remote_access || issilicon(user)) - populate_controls(data) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "air_alarm.tmpl", src.name, 325, 625, master_ui = master_ui, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/alarm/proc/populate_status(data) - var/turf/location = get_turf(src) - var/datum/gas_mixture/environment = location.return_air() - var/total = environment.total_moles - - var/list/environment_data = new - data["has_environment"] = total - if(total) - var/pressure = environment.return_pressure() - environment_data[LIST_PRE_INC(environment_data)] = list("name" = "Pressure", "value" = pressure, "unit" = "kPa", "danger_level" = pressure_dangerlevel) - var/singleton/environment_data/env_info = GET_SINGLETON(environment_type) - for(var/gas_id in env_info.important_gasses) - environment_data[LIST_PRE_INC(environment_data)] = list( - "name" = gas_data.name[gas_id], - "value" = environment.gas[gas_id] / total * 100, - "unit" = "%", - "danger_level" = env_info.dangerous_gasses[gas_id] ? co2_dangerlevel : oxygen_dangerlevel - ) - var/other_moles = 0 - for(var/g in trace_gas) - other_moles += environment.gas[g] - environment_data[LIST_PRE_INC(environment_data)] = list("name" = "Other Gases", "value" = other_moles / total * 100, "unit" = "%", "danger_level" = other_dangerlevel) - - environment_data[LIST_PRE_INC(environment_data)] = list("name" = "Temperature", "value" = environment.temperature, "unit" = "K ([round(environment.temperature - T0C, 0.1)]C)", "danger_level" = temperature_dangerlevel) - data["total_danger"] = danger_level - data["environment"] = environment_data - data["atmos_alarm"] = alarm_area.atmosalm - data["fire_alarm"] = alarm_area.fire != null - data["target_temperature"] = "[target_temperature - T0C]C" - -/obj/machinery/alarm/proc/populate_controls(list/data) - switch(screen) - if(AALARM_SCREEN_MAIN) - data["mode"] = mode - if(AALARM_SCREEN_VENT) - var/vents[0] - for(var/id_tag in alarm_area.air_vent_names) - var/long_name = alarm_area.air_vent_names[id_tag] - var/list/info = alarm_area.air_vent_info[id_tag] - if(!info) - continue - vents[LIST_PRE_INC(vents)] = list( - "id_tag" = id_tag, - "long_name" = sanitize(long_name), - "power" = info["power"], - "checks" = info["checks"], - "direction" = info["direction"], - "external" = info["external"] - ) - data["vents"] = vents - if(AALARM_SCREEN_SCRUB) - var/scrubbers[0] - for(var/id_tag in alarm_area.air_scrub_names) - var/long_name = alarm_area.air_scrub_names[id_tag] - var/list/info = alarm_area.air_scrub_info[id_tag] - if(!info) - continue - scrubbers[LIST_PRE_INC(scrubbers)] = list( - "id_tag" = id_tag, - "long_name" = sanitize(long_name), - "power" = info["power"], - "scrubbing" = info["scrubbing"], - "panic" = info["panic"], - "filters" = list() - ) - var/singleton/environment_data/env_info = GET_SINGLETON(environment_type) - for(var/gas_id in env_info.filter_gasses) - scrubbers[length(scrubbers)]["filters"] += list( - list( - "name" = gas_data.name[gas_id], - "id" = gas_id, - "val" = (gas_id in info["scrubbing_gas"]) - ) - ) - - data["scrubbers"] = scrubbers - if(AALARM_SCREEN_MODE) - var/modes[0] - modes[LIST_PRE_INC(modes)] = list("name" = "Filtering - Scrubs out contaminants", "mode" = AALARM_MODE_SCRUBBING, "selected" = mode == AALARM_MODE_SCRUBBING, "danger" = 0) - modes[LIST_PRE_INC(modes)] = list("name" = "Replace Air - Siphons out air while replacing", "mode" = AALARM_MODE_REPLACEMENT, "selected" = mode == AALARM_MODE_REPLACEMENT, "danger" = 0) - modes[LIST_PRE_INC(modes)] = list("name" = "Panic - Siphons air out of the room", "mode" = AALARM_MODE_PANIC, "selected" = mode == AALARM_MODE_PANIC, "danger" = 1) - modes[LIST_PRE_INC(modes)] = list("name" = "Cycle - Siphons air before replacing", "mode" = AALARM_MODE_CYCLE, "selected" = mode == AALARM_MODE_CYCLE, "danger" = 1) - modes[LIST_PRE_INC(modes)] = list("name" = "Fill - Shuts off scrubbers and opens vents", "mode" = AALARM_MODE_FILL, "selected" = mode == AALARM_MODE_FILL, "danger" = 0) - modes[LIST_PRE_INC(modes)] = list("name" = "Off - Shuts off vents and scrubbers", "mode" = AALARM_MODE_OFF, "selected" = mode == AALARM_MODE_OFF, "danger" = 0) - data["modes"] = modes - data["mode"] = mode - if(AALARM_SCREEN_SENSORS) - var/list/selected - var/thresholds[0] - - var/breach_data = list("selected" = breach_pressure) - data["breach_data"] = breach_data - - var/list/gas_names = list( - GAS_OXYGEN = "O2", - GAS_CO2 = "CO2", - "other" = "Other") - for (var/g in gas_names) - thresholds[LIST_PRE_INC(thresholds)] = list("name" = gas_names[g], "settings" = list()) - selected = TLV[g] - for(var/i = 1, i <= 4, i++) - thresholds[length(thresholds)]["settings"] += list(list("env" = g, "val" = i, "selected" = selected[i])) - - selected = TLV["pressure"] - thresholds[LIST_PRE_INC(thresholds)] = list("name" = "Pressure", "settings" = list()) - for(var/i = 1, i <= 4, i++) - thresholds[length(thresholds)]["settings"] += list(list("env" = "pressure", "val" = i, "selected" = selected[i])) - - selected = TLV["temperature"] - thresholds[LIST_PRE_INC(thresholds)] = list("name" = "Temperature", "settings" = list()) - for(var/i = 1, i <= 4, i++) - thresholds[length(thresholds)]["settings"] += list(list("env" = "temperature", "val" = i, "selected" = selected[i])) - - - data["thresholds"] = thresholds - -/obj/machinery/alarm/CanUseTopic(mob/user, datum/topic_state/state, href_list = list()) - if(buildstage != 2) - return STATUS_CLOSE - - if(aidisabled && isAI(user)) - to_chat(user, SPAN_WARNING("AI control for \the [src] interface has been disabled.")) - return STATUS_CLOSE - - . = shorted ? STATUS_DISABLED : STATUS_INTERACTIVE - - if(. == STATUS_INTERACTIVE) - var/extra_href = state.href_list(user) - // Prevent remote users from altering RCON settings unless they already have access - if(href_list["rcon"] && extra_href["remote_connection"] && !extra_href["remote_access"]) - . = STATUS_UPDATE - - return min(..(), .) - -/obj/machinery/alarm/OnTopic(user, href_list, datum/topic_state/state) - // hrefs that can always be called -walter0o - if(href_list["rcon"]) - var/attempted_rcon_setting = text2num(href_list["rcon"]) - - switch(attempted_rcon_setting) - if(RCON_NO) - rcon_setting = RCON_NO - if(RCON_AUTO) - rcon_setting = RCON_AUTO - if(RCON_YES) - rcon_setting = RCON_YES - return TOPIC_REFRESH - - if(href_list["temperature"]) - var/list/selected = TLV["temperature"] - var/max_temperature = min(selected[3] - T0C, MAX_TEMPERATURE) - var/min_temperature = max(selected[2] - T0C, MIN_TEMPERATURE) - var/input_temperature = input(user, "What temperature would you like the system to maintain? (Capped between [min_temperature] and [max_temperature]C)", "Thermostat Controls", target_temperature - T0C) as num|null - if(isnum(input_temperature) && CanUseTopic(user, state)) - if(input_temperature > max_temperature || input_temperature < min_temperature) - to_chat(user, "Temperature must be between [min_temperature]C and [max_temperature]C") - else - target_temperature = input_temperature + T0C - return TOPIC_REFRESH - - // hrefs that need the AA unlocked -walter0o - var/extra_href = state.href_list(user) - if(!(locked && !extra_href["remote_connection"]) || extra_href["remote_access"] || issilicon(user)) - if(href_list["command"]) - var/device_id = href_list["id_tag"] - switch(href_list["command"]) - if("set_external_pressure") - var/input_pressure = input(user, "What pressure you like the system to mantain?", "Pressure Controls") as num|null - if(isnum(input_pressure) && CanUseTopic(user, state)) - send_signal(device_id, list(href_list["command"] = input_pressure)) - return TOPIC_REFRESH - - if("reset_external_pressure") - send_signal(device_id, list(href_list["command"] = ONE_ATMOSPHERE)) - return TOPIC_REFRESH - - if( "set_power", - "set_checks", - "panic_siphon") - - send_signal(device_id, list(href_list["command"] = text2num(href_list["val"]) ) ) - return TOPIC_REFRESH - - if("set_scrubbing") - send_signal(device_id, list(href_list["command"] = href_list["scrub_mode"]) ) - return TOPIC_REFRESH - - if("set_scrub_gas") - var/singleton/environment_data/env_info = GET_SINGLETON(environment_type) - if(env_info && (href_list["gas_id"] in env_info.filter_gasses)) - send_signal(device_id, list(href_list["command"] = list(href_list["gas_id"] = text2num(href_list["val"]))) ) - return TOPIC_REFRESH - - if("set_breach") - var/newval = input(user, "Enter minimum pressure for breach detection, preasures lower then this will cause vents to stop.", breach_pressure) as null|num - if (isnull(newval) || !CanUseTopic(user, state)) - return TOPIC_HANDLED - if (newval<0) - breach_pressure = -1.0 - else if (newval > 50*ONE_ATMOSPHERE) - breach_pressure = 50*ONE_ATMOSPHERE - else - breach_pressure = round(newval,0.01) - - if("set_threshold") - var/env = href_list["env"] - var/threshold = text2num(href_list["var"]) - var/list/selected = TLV[env] - var/list/thresholds = list("lower bound", "low warning", "high warning", "upper bound") - var/newval = input(user, "Enter [thresholds[threshold]] for [env]", "Alarm triggers", selected[threshold]) as null|num - if (isnull(newval) || !CanUseTopic(user, state)) - return TOPIC_HANDLED - if (newval<0) - selected[threshold] = -1.0 - else if (env=="temperature" && newval>5000) - selected[threshold] = 5000 - else if (env=="pressure" && newval>50*ONE_ATMOSPHERE) - selected[threshold] = 50*ONE_ATMOSPHERE - else if (env!="temperature" && env!="pressure" && newval>200) - selected[threshold] = 200 - else - newval = round(newval,0.01) - selected[threshold] = newval - if(threshold == 1) - if(selected[1] > selected[2]) - selected[2] = selected[1] - if(selected[1] > selected[3]) - selected[3] = selected[1] - if(selected[1] > selected[4]) - selected[4] = selected[1] - if(threshold == 2) - if(selected[1] > selected[2]) - selected[1] = selected[2] - if(selected[2] > selected[3]) - selected[3] = selected[2] - if(selected[2] > selected[4]) - selected[4] = selected[2] - if(threshold == 3) - if(selected[1] > selected[3]) - selected[1] = selected[3] - if(selected[2] > selected[3]) - selected[2] = selected[3] - if(selected[3] > selected[4]) - selected[4] = selected[3] - if(threshold == 4) - if(selected[1] > selected[4]) - selected[1] = selected[4] - if(selected[2] > selected[4]) - selected[2] = selected[4] - if(selected[3] > selected[4]) - selected[3] = selected[4] - - apply_mode() - return TOPIC_REFRESH - - if(href_list["screen"]) - screen = text2num(href_list["screen"]) - return TOPIC_REFRESH - - if(href_list["atmos_unlock"]) - switch(href_list["atmos_unlock"]) - if("0") - alarm_area.air_doors_close() - if("1") - alarm_area.air_doors_open() - return TOPIC_REFRESH - - if(href_list["atmos_alarm"]) - if (alarm_area.atmosalert(2, src)) - apply_danger_level(2) - update_icon() - return TOPIC_REFRESH - - if(href_list["atmos_reset"]) - if (alarm_area.atmosalert(0, src)) - apply_danger_level(0) - update_icon() - return TOPIC_REFRESH - - if(href_list["mode"]) - mode = text2num(href_list["mode"]) - apply_mode() - return TOPIC_REFRESH - -/obj/machinery/alarm/attackby(obj/item/W as obj, mob/user as mob) - switch(buildstage) - if(2) - if(isScrewdriver(W)) // Opening that Air Alarm up. -// to_chat(user, "You pop the Air Alarm's maintence panel open.") - wiresexposed = !wiresexposed - to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"]") - update_icon() - return - - if (wiresexposed && isWirecutter(W)) - user.visible_message(SPAN_WARNING("[user] has cut the wires inside \the [src]!"), "You have cut the wires inside \the [src].") - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - new/obj/item/stack/cable_coil(get_turf(src), 5) - buildstage = 1 - update_icon() - return - - if (istype(W, /obj/item/card/id) || istype(W, /obj/item/modular_computer))// trying to unlock the interface with an ID card - if(inoperable()) - to_chat(user, "It does nothing") - return - else - if(allowed(usr) && !wires.IsIndexCut(AALARM_WIRE_IDSCAN)) - locked = !locked - to_chat(user, SPAN_NOTICE("You [ locked ? "lock" : "unlock"] the Air Alarm interface.")) - else - to_chat(user, SPAN_WARNING("Access denied.")) - return - - if(1) - if(isCoil(W)) - var/obj/item/stack/cable_coil/C = W - if (C.use(5)) - to_chat(user, SPAN_NOTICE("You wire \the [src].")) - buildstage = 2 - update_icon() - return - else - to_chat(user, SPAN_WARNING("You need 5 pieces of cable to do wire \the [src].")) - return - - else if(isCrowbar(W)) - to_chat(user, "You start prying out the circuit.") - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - if(do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT) && buildstage == 1) - to_chat(user, "You pry out the circuit!") - var/obj/item/airalarm_electronics/circuit = new /obj/item/airalarm_electronics() - circuit.dropInto(user.loc) - buildstage = 0 - update_icon() - return - if(0) - if(istype(W, /obj/item/airalarm_electronics)) - to_chat(user, "You insert the circuit!") - qdel(W) - buildstage = 1 - update_icon() - return - - else if(isWrench(W)) - to_chat(user, "You remove the fire alarm assembly from the wall!") - new /obj/item/frame/air_alarm(get_turf(user)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - qdel(src) - - return ..() - -/obj/machinery/alarm/examine(mob/user) - . = ..() - if (buildstage < 2) - to_chat(user, "It is not wired.") - if (buildstage < 1) - to_chat(user, "The circuit is missing.") -/* -AIR ALARM CIRCUIT -Just a object used in constructing air alarms -*/ -/obj/item/airalarm_electronics - name = "air alarm electronics" - icon = 'icons/obj/doors/door_assembly.dmi' - icon_state = "door_electronics" - desc = "Looks like a circuit. Probably is." - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 50) - -/* -FIRE ALARM -*/ -/obj/machinery/firealarm - name = "fire alarm" - desc = "\"Pull this in case of emergency\". Thus, keep pulling it forever." - icon = 'icons/obj/firealarm.dmi' - icon_state = "casing" - var/detecting = 1.0 - var/working = 1.0 - var/time = 10.0 - var/timing = 0.0 - var/lockdownbyai = 0 - anchored = TRUE - idle_power_usage = 2 - active_power_usage = 6 - power_channel = ENVIRON - var/last_process = 0 - var/wiresexposed = FALSE - var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone - var/seclevel - var/static/list/overlays_cache - -/obj/machinery/firealarm/examine(mob/user) - . = ..() - if(loc.z in GLOB.using_map.contact_levels) - var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) - to_chat(user, "The current alert level is [security_state.current_security_level.name].") - -/obj/machinery/firealarm/Initialize() - . = ..() - queue_icon_update() - -/obj/machinery/firealarm/proc/get_cached_overlay(state) - if(!LAZYACCESS(overlays_cache, state)) - LAZYSET(overlays_cache, state, image(icon, state)) - return overlays_cache[state] - -/obj/machinery/firealarm/on_update_icon() - overlays.Cut() - - pixel_x = 0 - pixel_y = 0 - var/walldir = (dir & (NORTH|SOUTH)) ? GLOB.reverse_dir[dir] : dir - var/turf/T = get_step(get_turf(src), walldir) - if(istype(T) && T.density) - if(dir == SOUTH) - pixel_y = 21 - else if(dir == NORTH) - pixel_y = -21 - else if(dir == EAST) - pixel_x = 21 - else if(dir == WEST) - pixel_x = -21 - - icon_state = "casing" - if(wiresexposed) - overlays += get_cached_overlay("b[buildstage]") - set_light(0) - return - - if(MACHINE_IS_BROKEN(src)) - overlays += get_cached_overlay("broken") - set_light(0) - else if(!is_powered()) - overlays += get_cached_overlay("unpowered") - set_light(0) - else - if(!detecting) - overlays += get_cached_overlay("fire1") - set_light(0.25, 0.1, 1, 2, COLOR_RED) - else if(z in GLOB.using_map.contact_levels) - var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) - var/singleton/security_level/sl = security_state.current_security_level - - set_light(sl.light_max_bright, sl.light_inner_range, sl.light_outer_range, 2, sl.light_color_alarm) - overlays += image(sl.icon, sl.overlay_alarm) - else - overlays += get_cached_overlay("fire0") - -/obj/machinery/firealarm/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(src.detecting) - if(exposed_temperature > T0C+200) - src.alarm() // added check of detector status here - return - -/obj/machinery/firealarm/bullet_act() - return src.alarm() - -/obj/machinery/firealarm/emp_act(severity) - if(prob(50/severity)) - alarm(rand(30/severity, 60/severity)) - ..() - -/obj/machinery/firealarm/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W) && buildstage == 2) - wiresexposed = !wiresexposed - update_icon() - return - - if(wiresexposed) - switch(buildstage) - if(2) - if(isMultitool(W)) - src.detecting = !( src.detecting ) - if (src.detecting) - user.visible_message(SPAN_NOTICE("\The [user] has reconnected [src]'s detecting unit!"), SPAN_NOTICE("You have reconnected [src]'s detecting unit.")) - else - user.visible_message(SPAN_NOTICE("\The [user] has disconnected [src]'s detecting unit!"), SPAN_NOTICE("You have disconnected [src]'s detecting unit.")) - else if(isWirecutter(W)) - user.visible_message(SPAN_NOTICE("\The [user] has cut the wires inside \the [src]!"), SPAN_NOTICE("You have cut the wires inside \the [src].")) - new/obj/item/stack/cable_coil(get_turf(src), 5) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - buildstage = 1 - update_icon() - if(1) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if (C.use(5)) - to_chat(user, SPAN_NOTICE("You wire \the [src].")) - buildstage = 2 - update_icon() - return - else - to_chat(user, SPAN_WARNING("You need 5 pieces of cable to wire \the [src].")) - return - else if(isCrowbar(W)) - to_chat(user, "You start prying out the circuit.") - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - if (do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, "You pry out the circuit!") - var/obj/item/firealarm_electronics/circuit = new /obj/item/firealarm_electronics() - circuit.dropInto(user.loc) - buildstage = 0 - update_icon() - if(0) - if(istype(W, /obj/item/firealarm_electronics)) - to_chat(user, "You insert the circuit!") - qdel(W) - buildstage = 1 - update_icon() - - else if(isWrench(W)) - to_chat(user, "You remove the fire alarm assembly from the wall!") - new /obj/item/frame/fire_alarm(get_turf(user)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - qdel(src) - return - - src.alarm() - return - -/obj/machinery/firealarm/Process()//Note: this processing was mostly phased out due to other code, and only runs when needed - if(inoperable()) - return - - if(src.timing) - if(src.time > 0) - src.time = src.time - ((world.timeofday - last_process)/10) - else - src.alarm() - src.time = 0 - src.timing = 0 - STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - src.updateDialog() - last_process = world.timeofday - - if(locate(/obj/hotspot) in loc) - alarm() - -/obj/machinery/firealarm/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/firealarm/interact(mob/user) - user.set_machine(src) - var/area/A = src.loc - var/d1 - var/d2 - - var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) - if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon)) - A = A.loc - - if (A.fire) - d1 = text("Reset - Lockdown", src) - else - d1 = text("Alarm - Lockdown", src) - if (src.timing) - d2 = text("Stop Time Lock", src) - else - d2 = text("Initiate Time Lock", src) - var/second = round(src.time) % 60 - var/minute = (round(src.time) - second) / 60 - var/dat = "Fire alarm [d1]\n
The current alert level is [security_state.current_security_level.name]

\nTimer System: [d2]
\nTime Left: [(minute ? "[minute]:" : null)][second] - - + +\n
" - show_browser(user, dat, "window=firealarm") - onclose(user, "firealarm") - else - A = A.loc - if (A.fire) - d1 = text("[]", src, stars("Reset - Lockdown")) - else - d1 = text("[]", src, stars("Alarm - Lockdown")) - if (src.timing) - d2 = text("[]", src, stars("Stop Time Lock")) - else - d2 = text("[]", src, stars("Initiate Time Lock")) - var/second = round(src.time) % 60 - var/minute = (round(src.time) - second) / 60 - var/dat = "[stars("Fire alarm")] [d1]\n
The current security level is [security_state.current_security_level.name]

\nTimer System: [d2]
\nTime Left: [(minute ? text("[]:", minute) : null)][second] - - + +\n
" - show_browser(user, dat, "window=firealarm") - onclose(user, "firealarm") - return - -/obj/machinery/firealarm/CanUseTopic(user) - if(buildstage != 2) - return STATUS_CLOSE - return ..() - -/obj/machinery/firealarm/OnTopic(user, href_list) - if (href_list["reset"]) - src.reset() - . = TOPIC_REFRESH - else if (href_list["alarm"]) - src.alarm() - . = TOPIC_REFRESH - else if (href_list["time"]) - src.timing = text2num(href_list["time"]) - last_process = world.timeofday - START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - . = TOPIC_REFRESH - else if (href_list["tp"]) - var/tp = text2num(href_list["tp"]) - src.time += tp - src.time = min(max(round(src.time), 0), 120) - . = TOPIC_REFRESH - - if(. == TOPIC_REFRESH) - interact(user) - -/obj/machinery/firealarm/proc/reset() - if (!( src.working )) - return - var/area/area = get_area(src) - for(var/obj/machinery/firealarm/FA in area) - GLOB.fire_alarm.clearAlarm(loc, FA) - update_icon() - return - -/obj/machinery/firealarm/proc/alarm(duration = 0) - if (!( src.working)) - return - var/area/area = get_area(src) - for(var/obj/machinery/firealarm/FA in area) - GLOB.fire_alarm.triggerAlarm(loc, FA, duration) - update_icon() - playsound(src, 'sound/machines/fire_alarm.ogg', 75, 0) - return - - - -/obj/machinery/firealarm/New(loc, dir, atom/frame) - ..(loc) - - if(dir) - src.set_dir((dir & (NORTH|SOUTH)) ? dir : GLOB.reverse_dir[dir]) - - if(istype(frame)) - buildstage = 0 - wiresexposed = TRUE - pixel_x = (dir & 3)? 0 : (dir == 4 ? -21 : 21) - pixel_y = (dir & 3)? (dir ==1 ? -21 : 21) : 0 - update_icon() - frame.transfer_fingerprints_to(src) - -/obj/machinery/firealarm/Initialize() - . = ..() - if(z in GLOB.using_map.contact_levels) - update_icon() - -/* -FIRE ALARM CIRCUIT -Just a object used in constructing fire alarms -*/ -/obj/item/firealarm_electronics - name = "fire alarm electronics" - icon = 'icons/obj/doors/door_assembly.dmi' - icon_state = "door_electronics" - desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\"." - w_class = ITEM_SIZE_SMALL - matter = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 50) - -/obj/machinery/partyalarm - name = "\improper PARTY BUTTON" - desc = "Cuban Pete is in the house!" - icon = 'icons/obj/monitors.dmi' - icon_state = "fire0" - var/detecting = 1.0 - var/working = 1.0 - var/time = 10.0 - var/timing = 0.0 - var/lockdownbyai = 0 - anchored = TRUE - idle_power_usage = 2 - active_power_usage = 6 - -/obj/machinery/partyalarm/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/partyalarm/interact(mob/user) - user.machine = src - var/area/A = get_area(src) - ASSERT(isarea(A)) - var/d1 - var/d2 - if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai)) - - if (A.party) - d1 = text("No Party :(", src) - else - d1 = text("PARTY!!!", src) - if (timing) - d2 = text("Stop Time Lock", src) - else - d2 = text("Initiate Time Lock", src) - var/second = time % 60 - var/minute = (time - second) / 60 - var/dat = text("Party Button []\n
\nTimer System: []
\nTime Left: [][] - - + +\n
", d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src) - show_browser(user, dat, "window=partyalarm") - onclose(user, "partyalarm") - else - if (A.fire) - d1 = text("[]", src, stars("No Party :(")) - else - d1 = text("[]", src, stars("PARTY!!!")) - if (timing) - d2 = text("[]", src, stars("Stop Time Lock")) - else - d2 = text("[]", src, stars("Initiate Time Lock")) - var/second = time % 60 - var/minute = (time - second) / 60 - var/dat = text("[] []\n
\nTimer System: []
\nTime Left: [][] - - + +\n
", stars("Party Button"), d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src) - show_browser(user, dat, "window=partyalarm") - onclose(user, "partyalarm") - return - -/obj/machinery/partyalarm/proc/reset() - if (!( working )) - return - var/area/A = get_area(src) - ASSERT(isarea(A)) - A.partyreset() - return - -/obj/machinery/partyalarm/proc/alarm() - if (!( working )) - return - var/area/A = get_area(src) - ASSERT(isarea(A)) - A.partyalert() - return - -/obj/machinery/partyalarm/OnTopic(user, href_list) - if (href_list["reset"]) - reset() - . = TOPIC_REFRESH - else if (href_list["alarm"]) - alarm() - . = TOPIC_REFRESH - else if (href_list["time"]) - timing = text2num(href_list["time"]) - . = TOPIC_REFRESH - else if (href_list["tp"]) - var/tp = text2num(href_list["tp"]) - time += tp - time = min(max(round(time), 0), 120) - . = TOPIC_REFRESH - - if(. == TOPIC_REFRESH) - interact(user) diff --git a/code/game/machinery/alarm/alarm.dm b/code/game/machinery/alarm/alarm.dm new file mode 100644 index 0000000000000..165c91120ca7b --- /dev/null +++ b/code/game/machinery/alarm/alarm.dm @@ -0,0 +1,985 @@ +/singleton/environment_data + var/list/important_gasses = list( + GAS_OXYGEN = TRUE, + GAS_NITROGEN = TRUE, + GAS_CO2 = TRUE + ) + var/list/dangerous_gasses = list( + GAS_CO2 = TRUE + ) + var/list/filter_gasses = list( + GAS_OXYGEN, + GAS_NITROGEN, + GAS_CO2, + GAS_N2O, + GAS_PHORON + ) + +/singleton/environment_data/finnish + important_gasses = list( + GAS_OXYGEN = TRUE, + GAS_NITROGEN = TRUE, + GAS_CO2 = TRUE, + GAS_STEAM = TRUE + ) + filter_gasses = list( + GAS_OXYGEN, + GAS_NITROGEN, + GAS_CO2, + GAS_N2O, + GAS_PHORON + ) + +//////////////////////////////////////// +//CONTAINS: Air Alarms and Fire Alarms// +//////////////////////////////////////// + +#define AALARM_MODE_SCRUBBING 1 +#define AALARM_MODE_REPLACEMENT 2 //like scrubbing, but faster. +#define AALARM_MODE_PANIC 3 //constantly sucks all air +#define AALARM_MODE_CYCLE 4 //sucks off all air, then refill and switches to scrubbing +#define AALARM_MODE_FILL 5 //emergency fill +#define AALARM_MODE_OFF 6 //Shuts it all down. + +#define AALARM_SCREEN_MAIN 1 +#define AALARM_SCREEN_VENT 2 +#define AALARM_SCREEN_SCRUB 3 +#define AALARM_SCREEN_MODE 4 +#define AALARM_SCREEN_SENSORS 5 + +#define AALARM_REPORT_TIMEOUT 100 + +#define RCON_NO 1 +#define RCON_AUTO 2 +#define RCON_YES 3 + +#define MAX_TEMPERATURE 90 +#define MIN_TEMPERATURE -40 + +//all air alarms in area are connected via magic +/// List (`string (id_tag)` => `string`). List of 'long names' for vents within the area. Also serves as a list of all vents registered with the area. Set by `./register_env_machine()`. +/area/var/list/air_vent_names = list() +/// List (`string (id_tag)` => `string`). List of 'long names' for scrubbers within the area. Also serves as a list of all scrubbers registered with the area. Set by `./register_env_machine()`. +/area/var/list/air_scrub_names = list() +/// List (`string (id_tag)` => `/datum/signal/data`). List of radio signal data received from vents in the area, indexed by the vent's `id_tag`. Do not modify directly; See `./receive_signal()` and `./send_signal()`. +/area/var/list/air_vent_info = list() +/// List (`string (id_tag)` => `/datum/signal/data`). List of radio signal data received from scrubbers in the area, indexed by the scrubber's `id_tag`. Do not modify directly; See `./receive_signal()` and `./send_signal()`. +/area/var/list/air_scrub_info = list() + + +/obj/machinery/alarm + name = "alarm" + icon = 'icons/obj/machines/airalarm.dmi' + icon_state = "alarmp" + anchored = TRUE + idle_power_usage = 80 + active_power_usage = 1000 //For heating/cooling rooms. 1000 joules equates to about 1 degree every 2 seconds for a single tile of air. + power_channel = ENVIRON + req_access = list(list(access_atmospherics, access_engine_equip)) + clicksound = "button" + clickvol = 30 + + layer = ABOVE_WINDOW_LAYER + + var/alarm_id = null + var/breach_pressure = ONE_ATMOSPHERE * 0.5 //Pressure below wich vents are shut off, set negative to dissable + var/breach_cooldown = FALSE + var/frequency = 1439 + //var/skipprocess = 0 //Experimenting + var/alarm_frequency = 1437 + var/remote_control = 0 + var/rcon_setting = 2 + var/rcon_time = 0 + var/locked = 1 + var/wiresexposed = FALSE // If it's been screwdrivered open. + var/aidisabled = 0 + var/shorted = 0 + + wires = /datum/wires/alarm + + var/mode = AALARM_MODE_SCRUBBING + var/screen = AALARM_SCREEN_MAIN + var/area_uid + var/area/alarm_area + var/buildstage = 2 //2 is built, 1 is building, 0 is frame. + + var/target_temperature = T0C+20 + var/regulating_temperature = 0 + + var/datum/radio_frequency/radio_connection + + /// Lazy list of danger groups by environment criteria like temperature, pressure, specific gas etc. + /// Has following structure: criteria => list(danger_group_1, danger_group_2, danger_group_3, danger_group_4) + var/list/TLV + var/list/trace_gas + + var/danger_level = 0 + var/pressure_dangerlevel = 0 + var/oxygen_dangerlevel = 0 + var/co2_dangerlevel = 0 + var/temperature_dangerlevel = 0 + var/other_dangerlevel = 0 + var/environment_type = /singleton/environment_data + var/report_danger_level = 1 + + /// Cached previous environment group multiplier + var/previous_environment_group_multiplier + /// Cached previous environment temperature + var/previous_environment_temperature + /// Cached previous environment total moles + var/previous_environment_total_moles + /// Cached previous environment volume + var/previous_environment_volume + /// Lazy list of cached previus enrironment gases as: gas_id => amount of moles + var/list/previous_environment_gas + +/obj/machinery/alarm/Destroy() + unregister_radio(src, frequency) + return ..() + +/obj/machinery/alarm/New(loc, dir, atom/frame) + ..(loc) + + if(dir) + set_dir(dir) + + if(istype(frame)) + buildstage = 0 + wiresexposed = TRUE + pixel_x = (dir & 3)? 0 : (dir == 4 ? -21 : 21) + pixel_y = (dir & 3)? (dir ==1 ? -21 : 21) : 0 + update_icon() + frame.transfer_fingerprints_to(src) + +/obj/machinery/alarm/Initialize() + . = ..() + alarm_area = get_area(src) + area_uid = alarm_area.uid + if (name == "alarm") + SetName("[alarm_area.name] Air Alarm") + + LAZYINITLIST(TLV) + LAZYINITLIST(trace_gas) + + // breathable air according to human/Life() + TLV[GAS_OXYGEN] = list(16, 19, 135, 140) // Partial pressure, kpa + TLV[GAS_CO2] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa + TLV["other"] = list(-1.0, -1.0, 0.2, 0.5) // Partial pressure, kpa + TLV["pressure"] = list(ONE_ATMOSPHERE * 0.80, ONE_ATMOSPHERE * 0.90, ONE_ATMOSPHERE * 1.10, ONE_ATMOSPHERE * 1.20) /* kpa */ + TLV["temperature"] = list(T0C-26, T0C, T0C+40, T0C+66) // K + + + var/singleton/environment_data/env_info = GET_SINGLETON(environment_type) + for(var/g in gas_data.gases) + if(!env_info.important_gasses[g]) + trace_gas += g + + set_frequency(frequency) + update_icon() + +/obj/machinery/alarm/get_req_access() + if(!locked) + return list() + return ..() + +/obj/machinery/alarm/Process() + if(inoperable() || shorted || buildstage != 2) + return + + var/turf/simulated/location = loc + if(!istype(location)) return//returns if loc is not simulated + + var/datum/gas_mixture/environment = location.return_air() + + //Handle temperature adjustment here. + if(environment.return_pressure() > ONE_ATMOSPHERE*0.05) + handle_heating_cooling(environment) + + if(is_same_environment(environment)) + return + + var/old_level = danger_level + danger_level = get_max_danger_level(environment) + + if (old_level != danger_level) + if(danger_level == 2) + playsound(src.loc, 'sound/machines/airalarm.ogg', 25, 0, 4) + apply_danger_level(danger_level) + + if (pressure_dangerlevel != 0) + if (breach_detected()) + mode = AALARM_MODE_OFF + apply_mode() + + if (mode==AALARM_MODE_CYCLE && environment.return_pressure() 2.0) + update_use_power(POWER_USE_ACTIVE) + regulating_temperature = 1 + visible_message("[src] clicks as it starts [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\ + "You hear a click and a faint electronic hum.") + else + //check for when we should stop adjusting temperature + if (danger_level || abs(environment.temperature - target_temperature) <= 0.5) + update_use_power(POWER_USE_IDLE) + regulating_temperature = 0 + visible_message("[src] clicks quietly as it stops [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\ + "You hear a click as a faint electronic humming stops.") + + if (regulating_temperature) + if(target_temperature > T0C + MAX_TEMPERATURE) + target_temperature = T0C + MAX_TEMPERATURE + + if(target_temperature < T0C + MIN_TEMPERATURE) + target_temperature = T0C + MIN_TEMPERATURE + + var/datum/gas_mixture/gas + gas = environment.remove(0.25*environment.total_moles) + if(gas) + + if (gas.temperature <= target_temperature) //gas heating + var/energy_used = min( gas.get_thermal_energy_change(target_temperature) , active_power_usage) + + gas.add_thermal_energy(energy_used) + else //gas cooling + var/heat_transfer = min(abs(gas.get_thermal_energy_change(target_temperature)), active_power_usage) + + //Assume the heat is being pumped into the hull which is fixed at 20 C + //none of this is really proper thermodynamics but whatever + + var/cop = gas.temperature/T20C //coefficient of performance -> power used = heat_transfer/cop + + heat_transfer = min(heat_transfer, cop * active_power_usage) //this ensures that we don't use more than active_power_usage amount of power + + heat_transfer = -gas.add_thermal_energy(-heat_transfer) //get the actual heat transfer + + environment.merge(gas) + +/** + * Get the danger level of specific criteria based on `danger_levels` + * + * * current_value - The current value to check the danger-ness against + * * danger_levels - A list with the danger levels + */ +/obj/machinery/alarm/proc/get_danger_level(current_value, list/danger_levels) + if((current_value > danger_levels[4] && danger_levels[4] > 0) || current_value < danger_levels[1]) + return 2 + + if((current_value > danger_levels[3] && danger_levels[3] > 0) || current_value < danger_levels[2]) + return 1 + + return 0 + +/** + * Get the maximum danger level across all environment criteria + * + * * environment - A `/datum/gas_mixture` to perform the danger level calculation against + */ +/obj/machinery/alarm/proc/get_max_danger_level(datum/gas_mixture/environment) + var/partial_pressure = R_IDEAL_GAS_EQUATION * environment.temperature / environment.volume + var/other_moles = 0 + for(var/gas_id in trace_gas) + other_moles += environment.gas[gas_id] + + return max( + get_danger_level(environment.return_pressure(), TLV["pressure"]), + get_danger_level(environment.gas[GAS_OXYGEN] * partial_pressure, TLV[GAS_OXYGEN]), + get_danger_level(environment.gas[GAS_CO2] * partial_pressure, TLV[GAS_CO2]), + get_danger_level(environment.temperature, TLV["temperature"]), + get_danger_level(other_moles * partial_pressure, TLV["other"]) + ) + + +// Returns whether this air alarm thinks there is a breach, given the sensors that are available to it. +/obj/machinery/alarm/proc/breach_detected() + var/turf/simulated/location = loc + + if(!istype(location)) + return FALSE + + if(breach_cooldown) + return FALSE + + if(breach_pressure < 0) + return FALSE + + var/datum/gas_mixture/environment = location.return_air() + var/environment_pressure = environment.return_pressure() + + if (environment_pressure <= breach_pressure) + if (!(mode == AALARM_MODE_PANIC || mode == AALARM_MODE_CYCLE)) + return TRUE + + return FALSE + +/obj/machinery/alarm/proc/breach_end_cooldown() + breach_cooldown = FALSE + return + +//disables breach detection temporarily +/obj/machinery/alarm/proc/breach_start_cooldown() + breach_cooldown = TRUE + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/alarm, breach_end_cooldown)), 10 MINUTES, TIMER_UNIQUE | TIMER_OVERRIDE) + return + + +/obj/machinery/alarm/on_update_icon() + ClearOverlays() + icon_state = "alarmp" + if(wiresexposed) + icon_state = "alarmx" + set_light(0) + return + if(inoperable() || shorted) + icon_state = "alarmp" + set_light(0) + return + + var/icon_level = danger_level + if (alarm_area.atmosalm) + icon_level = max(icon_level, 1) //if there's an atmos alarm but everything is okay locally, no need to go past yellow + + var/new_color = null + switch(icon_level) + if (0) + new_color = COLOR_LIME + if (1) + new_color = COLOR_SUN + if (2) + new_color = COLOR_RED_LIGHT + AddOverlays(list( + emissive_appearance(icon, "alarm[icon_level]"), + image(icon, "alarm[icon_level]"), + overlay_image(icon, "alarm[icon_level]", plane = LIGHTING_LAMPS_PLANE) // SS220 Bloom-Lighting + )) + + pixel_x = 0 + pixel_y = 0 + var/turf/T = get_step(get_turf(src), turn(dir, 180)) + if(istype(T) && T.density) + if(dir == NORTH) + pixel_y = -21 + else if(dir == SOUTH) + pixel_y = 21 + else if(dir == WEST) + pixel_x = 21 + else if(dir == EAST) + pixel_x = -21 + + set_light(2, 0.25, new_color) + +/obj/machinery/alarm/proc/register_env_machine(m_id, device_type) + var/new_name + if (device_type=="AVP") + new_name = "[alarm_area.name] Vent Pump #[length(alarm_area.air_vent_names)+1]" + alarm_area.air_vent_names[m_id] = new_name + else if (device_type=="AScr") + new_name = "[alarm_area.name] Air Scrubber #[length(alarm_area.air_scrub_names)+1]" + alarm_area.air_scrub_names[m_id] = new_name + send_signal(m_id, list("init" = new_name) ) + +/obj/machinery/alarm/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + radio_connection = radio_controller.add_object(src, frequency, RADIO_TO_AIRALARM) + +/obj/machinery/alarm/proc/send_signal(target, list/command)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src + + signal.data = command + signal.data["tag"] = target + signal.data["sigtype"] = "command" + signal.data["status"] = TRUE + + radio_connection.post_signal(src, signal, RADIO_FROM_AIRALARM) +// log_debug(text("Signal [] Broadcasted to []", command, target)) + + return 1 + +/obj/machinery/alarm/proc/apply_mode() + //propagate mode to other air alarms in the area + //TODO: make it so that players can choose between applying the new mode to the room they are in (related area) vs the entire alarm area + for (var/obj/machinery/alarm/AA in alarm_area) + AA.mode = mode + + breach_start_cooldown() + + switch(mode) + if(AALARM_MODE_SCRUBBING) + for(var/device_id in alarm_area.air_scrub_names) + send_signal(device_id, list("set_power"= 1, "set_scrub_gas" = list(GAS_CO2 = 1), "set_scrubbing"= SCRUBBER_SCRUB, "panic_siphon"= 0) ) + for(var/device_id in alarm_area.air_vent_names) + send_signal(device_id, list("set_power"= 1, "set_checks"= "default", "set_external_pressure"= "default") ) + + if(AALARM_MODE_PANIC, AALARM_MODE_CYCLE) + for(var/device_id in alarm_area.air_scrub_names) + send_signal(device_id, list("set_power"= 1, "panic_siphon"= 1) ) + for(var/device_id in alarm_area.air_vent_names) + send_signal(device_id, list("set_power"= 0) ) + + if(AALARM_MODE_REPLACEMENT) + for(var/device_id in alarm_area.air_scrub_names) + send_signal(device_id, list("set_power"= 1, "panic_siphon"= 1) ) + for(var/device_id in alarm_area.air_vent_names) + send_signal(device_id, list("set_power"= 1, "set_checks"= "default", "set_external_pressure"= "default") ) + + if(AALARM_MODE_FILL) + for(var/device_id in alarm_area.air_scrub_names) + send_signal(device_id, list("set_power"= 0) ) + for(var/device_id in alarm_area.air_vent_names) + send_signal(device_id, list("set_power"= 1, "set_checks"= "default", "set_external_pressure"= "default") ) + + if(AALARM_MODE_OFF) + for(var/device_id in alarm_area.air_scrub_names) + send_signal(device_id, list("set_power"= 0) ) + for(var/device_id in alarm_area.air_vent_names) + send_signal(device_id, list("set_power"= 0) ) + +/obj/machinery/alarm/proc/apply_danger_level(new_danger_level) + if (report_danger_level && alarm_area.atmosalert(new_danger_level, src)) + post_alert(new_danger_level) + + update_icon() + +/obj/machinery/alarm/proc/post_alert(alert_level) + var/datum/radio_frequency/frequency = radio_controller.return_frequency(alarm_frequency) + if(!frequency) + return + + var/datum/signal/alert_signal = new + alert_signal.source = src + alert_signal.transmission_method = 1 + alert_signal.data["zone"] = alarm_area.name + alert_signal.data["type"] = "Atmospheric" + + if(alert_level==2) + alert_signal.data["alert"] = "severe" + else if (alert_level==1) + alert_signal.data["alert"] = "minor" + else if (alert_level==0) + alert_signal.data["alert"] = "clear" + + frequency.post_signal(src, alert_signal) + +/obj/machinery/alarm/interface_interact(mob/user) + ui_interact(user) + return TRUE + +/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, master_ui = null, datum/topic_state/state = GLOB.default_state) + var/data[0] + var/remote_connection = 0 + var/remote_access = 0 + if(state) + var/list/href = state.href_list(user) + remote_connection = href["remote_connection"] // Remote connection means we're non-adjacent/connecting from another computer + remote_access = href["remote_access"] // Remote access means we also have the privilege to alter the air alarm. + + data["locked"] = locked && !issilicon(user) + data["remote_connection"] = remote_connection + data["remote_access"] = remote_access + data["rcon"] = rcon_setting + data["screen"] = screen + + populate_status(data) + + if(!(locked && !remote_connection) || remote_access || issilicon(user)) + populate_controls(data) + + ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "air_alarm.tmpl", src.name, 325, 625, master_ui = master_ui, state = state) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/alarm/CanUseTopic(mob/user, datum/topic_state/state, href_list = list()) + if(buildstage != 2) + return STATUS_CLOSE + + if(aidisabled && issilicon(user)) + to_chat(user, SPAN_WARNING("AI control for [src] interface has been disabled.")) + return STATUS_CLOSE + + . = shorted ? STATUS_DISABLED : STATUS_INTERACTIVE + + if(. == STATUS_INTERACTIVE) + var/extra_href = state.href_list(user) + // Prevent remote users from altering RCON settings unless they already have access + if(href_list["rcon"] && extra_href["remote_connection"] && !extra_href["remote_access"]) + . = STATUS_UPDATE + + return min(..(), .) + +/obj/machinery/alarm/OnTopic(user, href_list, datum/topic_state/state) + // hrefs that can always be called -walter0o + if(href_list["rcon"]) + var/attempted_rcon_setting = text2num(href_list["rcon"]) + + switch(attempted_rcon_setting) + if(RCON_NO) + rcon_setting = RCON_NO + if(RCON_AUTO) + rcon_setting = RCON_AUTO + if(RCON_YES) + rcon_setting = RCON_YES + return TOPIC_REFRESH + + if(href_list["temperature"]) + var/list/selected = TLV["temperature"] + var/max_temperature = min(selected[3] - T0C, MAX_TEMPERATURE) + var/min_temperature = max(selected[2] - T0C, MIN_TEMPERATURE) + var/input_temperature = input(user, "What temperature would you like the system to maintain? (Capped between [min_temperature] and [max_temperature]C)", "Thermostat Controls", target_temperature - T0C) as num|null + if(isnum(input_temperature) && CanUseTopic(user, state)) + if(input_temperature > max_temperature || input_temperature < min_temperature) + to_chat(user, "Temperature must be between [min_temperature]C and [max_temperature]C") + else + target_temperature = input_temperature + T0C + return TOPIC_REFRESH + + // hrefs that need the AA unlocked -walter0o + var/extra_href = state.href_list(user) + if(!(locked && !extra_href["remote_connection"]) || extra_href["remote_access"] || issilicon(user)) + if(href_list["command"]) + var/device_id = href_list["id_tag"] + switch(href_list["command"]) + if("set_external_pressure") + var/input_pressure = input(user, "What pressure you like the system to mantain?", "Pressure Controls") as num|null + if(isnum(input_pressure) && CanUseTopic(user, state)) + send_signal(device_id, list(href_list["command"] = input_pressure)) + return TOPIC_REFRESH + + if("reset_external_pressure") + send_signal(device_id, list(href_list["command"] = ONE_ATMOSPHERE)) + return TOPIC_REFRESH + + if( "set_power", + "set_checks", + "panic_siphon") + + send_signal(device_id, list(href_list["command"] = text2num(href_list["val"]) ) ) + return TOPIC_REFRESH + + if("set_scrubbing") + send_signal(device_id, list(href_list["command"] = href_list["scrub_mode"]) ) + return TOPIC_REFRESH + + if("set_scrub_gas") + var/singleton/environment_data/env_info = GET_SINGLETON(environment_type) + if(env_info && (href_list["gas_id"] in env_info.filter_gasses)) + send_signal(device_id, list(href_list["command"] = list(href_list["gas_id"] = text2num(href_list["val"]))) ) + return TOPIC_REFRESH + + if("set_breach") + var/newval = input(user, "Enter minimum pressure for breach detection, preasures lower then this will cause vents to stop.", breach_pressure) as null|num + if (isnull(newval) || !CanUseTopic(user, state)) + return TOPIC_HANDLED + if (newval<0) + breach_pressure = -1.0 + else if (newval > 50*ONE_ATMOSPHERE) + breach_pressure = 50*ONE_ATMOSPHERE + else + breach_pressure = round(newval,0.01) + + if("set_threshold") + var/env = href_list["env"] + var/threshold = text2num(href_list["var"]) + var/list/selected = TLV[env] + var/list/thresholds = list("lower bound", "low warning", "high warning", "upper bound") + var/newval = input(user, "Enter [thresholds[threshold]] for [env]", "Alarm triggers", selected[threshold]) as null|num + if (isnull(newval) || !CanUseTopic(user, state)) + return TOPIC_HANDLED + if (newval<0) + selected[threshold] = -1.0 + else if (env=="temperature" && newval>5000) + selected[threshold] = 5000 + else if (env=="pressure" && newval>50*ONE_ATMOSPHERE) + selected[threshold] = 50*ONE_ATMOSPHERE + else if (env!="temperature" && env!="pressure" && newval>200) + selected[threshold] = 200 + else + newval = round(newval,0.01) + selected[threshold] = newval + if(threshold == 1) + if(selected[1] > selected[2]) + selected[2] = selected[1] + if(selected[1] > selected[3]) + selected[3] = selected[1] + if(selected[1] > selected[4]) + selected[4] = selected[1] + if(threshold == 2) + if(selected[1] > selected[2]) + selected[1] = selected[2] + if(selected[2] > selected[3]) + selected[3] = selected[2] + if(selected[2] > selected[4]) + selected[4] = selected[2] + if(threshold == 3) + if(selected[1] > selected[3]) + selected[1] = selected[3] + if(selected[2] > selected[3]) + selected[2] = selected[3] + if(selected[3] > selected[4]) + selected[4] = selected[3] + if(threshold == 4) + if(selected[1] > selected[4]) + selected[1] = selected[4] + if(selected[2] > selected[4]) + selected[2] = selected[4] + if(selected[3] > selected[4]) + selected[3] = selected[4] + + apply_mode() + return TOPIC_REFRESH + + if(href_list["screen"]) + screen = text2num(href_list["screen"]) + return TOPIC_REFRESH + + if(href_list["atmos_unlock"]) + switch(href_list["atmos_unlock"]) + if("0") + alarm_area.air_doors_close() + if("1") + alarm_area.air_doors_open() + return TOPIC_REFRESH + + if(href_list["atmos_alarm"]) + if (alarm_area.atmosalert(2, src)) + apply_danger_level(2) + update_icon() + return TOPIC_REFRESH + + if(href_list["atmos_reset"]) + if (alarm_area.atmosalert(0, src)) + apply_danger_level(0) + update_icon() + return TOPIC_REFRESH + + if(href_list["mode"]) + mode = text2num(href_list["mode"]) + apply_mode() + return TOPIC_REFRESH + +/obj/machinery/alarm/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(buildstage != 1) + return + to_chat(user, "You start prying out the circuit.") + if(!tool.use_as_tool(src, user, 2 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || buildstage != 1) + return + to_chat(user, "You pry out the circuit!") + var/obj/item/airalarm_electronics/circuit = new /obj/item/airalarm_electronics() + circuit.dropInto(user.loc) + buildstage = 0 + update_icon() + +/obj/machinery/alarm/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(buildstage != 2) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + wiresexposed = !wiresexposed + USE_FEEDBACK_WIRING_EXPOSED(user, wiresexposed) + update_icon() + +/obj/machinery/alarm/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(buildstage != 0) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + to_chat(user, "You remove the fire alarm assembly from the wall!") + var/obj/item/frame/air_alarm/frame = new /obj/item/frame/air_alarm(get_turf(user)) + transfer_fingerprints_to(frame) + qdel(src) + +/obj/machinery/alarm/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(buildstage != 2) + return + if(!wiresexposed) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message(SPAN_WARNING("[user] has cut the wires inside [src]!"), "You have cut the wires inside [src].") + new/obj/item/stack/cable_coil(get_turf(src), 5) + buildstage = 1 + update_icon() + +/obj/machinery/alarm/use_tool(obj/item/W, mob/living/user, list/click_params) + switch(buildstage) + if(2) + if (isid(W) || istype(W, /obj/item/modular_computer)) + togglelock(user) + return TRUE + + if(1) + if (isCoil(W)) + var/obj/item/stack/cable_coil/C = W + if (C.use(5)) + to_chat(user, SPAN_NOTICE("You wire [src].")) + buildstage = 2 + update_icon() + return TRUE + else + to_chat(user, SPAN_WARNING("You need 5 pieces of cable to do wire [src].")) + return TRUE + + if(0) + if (istype(W, /obj/item/airalarm_electronics)) + to_chat(user, "You insert the circuit!") + qdel(W) + buildstage = 1 + update_icon() + return TRUE + + return ..() + +/obj/machinery/alarm/attack_hand_secondary(mob/living/user, list/modifiers) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) + return + . = SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + togglelock(user) + +/obj/machinery/alarm/examine(mob/user) + . = ..() + if (buildstage < 2) + to_chat(user, "It is not wired.") + if (buildstage < 1) + to_chat(user, "The circuit is missing.") + +/obj/machinery/alarm/proc/populate_status(data) + var/turf/location = get_turf(src) + var/datum/gas_mixture/environment = location.return_air() + var/total = environment.total_moles + + var/list/environment_data = new + data["has_environment"] = total + if(total) + var/pressure = environment.return_pressure() + environment_data[LIST_PRE_INC(environment_data)] = list("name" = "Pressure", "value" = pressure, "unit" = "kPa", "danger_level" = pressure_dangerlevel) + var/singleton/environment_data/env_info = GET_SINGLETON(environment_type) + for(var/gas_id in env_info.important_gasses) + environment_data[LIST_PRE_INC(environment_data)] = list( + "name" = gas_data.name[gas_id], + "value" = environment.gas[gas_id] / total * 100, + "unit" = "%", + "danger_level" = env_info.dangerous_gasses[gas_id] ? co2_dangerlevel : oxygen_dangerlevel + ) + var/other_moles = 0 + for(var/g in trace_gas) + other_moles += environment.gas[g] + environment_data[LIST_PRE_INC(environment_data)] = list("name" = "Other Gases", "value" = other_moles / total * 100, "unit" = "%", "danger_level" = other_dangerlevel) + + environment_data[LIST_PRE_INC(environment_data)] = list("name" = "Temperature", "value" = environment.temperature, "unit" = "K ([round(environment.temperature - T0C, 0.1)]C)", "danger_level" = temperature_dangerlevel) + data["total_danger"] = danger_level + data["environment"] = environment_data + data["atmos_alarm"] = alarm_area.atmosalm + data["fire_alarm"] = alarm_area.fire + data["target_temperature"] = "[target_temperature - T0C]C" + +/obj/machinery/alarm/proc/populate_controls(list/data) + switch(screen) + if(AALARM_SCREEN_MAIN) + data["mode"] = mode + if(AALARM_SCREEN_VENT) + var/vents[0] + for(var/id_tag in alarm_area.air_vent_names) + var/long_name = alarm_area.air_vent_names[id_tag] + var/list/info = alarm_area.air_vent_info[id_tag] + if(!info) + continue + vents[LIST_PRE_INC(vents)] = list( + "id_tag" = id_tag, + "long_name" = sanitize(long_name), + "power" = info["power"], + "checks" = info["checks"], + "direction" = info["direction"], + "external" = info["external"] + ) + data["vents"] = vents + if(AALARM_SCREEN_SCRUB) + var/scrubbers[0] + for(var/id_tag in alarm_area.air_scrub_names) + var/long_name = alarm_area.air_scrub_names[id_tag] + var/list/info = alarm_area.air_scrub_info[id_tag] + if(!info) + continue + scrubbers[LIST_PRE_INC(scrubbers)] = list( + "id_tag" = id_tag, + "long_name" = sanitize(long_name), + "power" = info["power"], + "scrubbing" = info["scrubbing"], + "panic" = info["panic"], + "filters" = list() + ) + var/singleton/environment_data/env_info = GET_SINGLETON(environment_type) + for(var/gas_id in env_info.filter_gasses) + scrubbers[length(scrubbers)]["filters"] += list( + list( + "name" = gas_data.name[gas_id], + "id" = gas_id, + "val" = (gas_id in info["scrubbing_gas"]) + ) + ) + + data["scrubbers"] = scrubbers + if(AALARM_SCREEN_MODE) + var/modes[0] + modes[LIST_PRE_INC(modes)] = list("name" = "Filtering - Scrubs out contaminants", "mode" = AALARM_MODE_SCRUBBING, "selected" = mode == AALARM_MODE_SCRUBBING, "danger" = 0) + modes[LIST_PRE_INC(modes)] = list("name" = "Replace Air - Siphons out air while replacing", "mode" = AALARM_MODE_REPLACEMENT, "selected" = mode == AALARM_MODE_REPLACEMENT, "danger" = 0) + modes[LIST_PRE_INC(modes)] = list("name" = "Panic - Siphons air out of the room", "mode" = AALARM_MODE_PANIC, "selected" = mode == AALARM_MODE_PANIC, "danger" = 1) + modes[LIST_PRE_INC(modes)] = list("name" = "Cycle - Siphons air before replacing", "mode" = AALARM_MODE_CYCLE, "selected" = mode == AALARM_MODE_CYCLE, "danger" = 1) + modes[LIST_PRE_INC(modes)] = list("name" = "Fill - Shuts off scrubbers and opens vents", "mode" = AALARM_MODE_FILL, "selected" = mode == AALARM_MODE_FILL, "danger" = 0) + modes[LIST_PRE_INC(modes)] = list("name" = "Off - Shuts off vents and scrubbers", "mode" = AALARM_MODE_OFF, "selected" = mode == AALARM_MODE_OFF, "danger" = 0) + data["modes"] = modes + data["mode"] = mode + if(AALARM_SCREEN_SENSORS) + var/list/selected + var/thresholds[0] + + var/breach_data = list("selected" = breach_pressure) + data["breach_data"] = breach_data + + var/list/gas_names = list( + GAS_OXYGEN = "O2", + GAS_CO2 = "CO2", + "other" = "Other") + for (var/g in gas_names) + thresholds[LIST_PRE_INC(thresholds)] = list("name" = gas_names[g], "settings" = list()) + selected = TLV[g] + for(var/i = 1, i <= 4, i++) + thresholds[length(thresholds)]["settings"] += list(list("env" = g, "val" = i, "selected" = selected[i])) + + selected = TLV["pressure"] + thresholds[LIST_PRE_INC(thresholds)] = list("name" = "Pressure", "settings" = list()) + for(var/i = 1, i <= 4, i++) + thresholds[length(thresholds)]["settings"] += list(list("env" = "pressure", "val" = i, "selected" = selected[i])) + + selected = TLV["temperature"] + thresholds[LIST_PRE_INC(thresholds)] = list("name" = "Temperature", "settings" = list()) + for(var/i = 1, i <= 4, i++) + thresholds[length(thresholds)]["settings"] += list(list("env" = "temperature", "val" = i, "selected" = selected[i])) + + + data["thresholds"] = thresholds + +/obj/machinery/alarm/proc/togglelock(mob/living/user) + if(inoperable()) + USE_FEEDBACK_FAILURE("It does nothing.") + return FALSE + if(!allowed(user) || wires.IsIndexCut(AALARM_WIRE_IDSCAN)) + USE_FEEDBACK_FAILURE("Access denied.") + return FALSE + locked = !locked + to_chat(user, SPAN_NOTICE("You [ locked ? "lock" : "unlock"] the Air Alarm interface.")) + update_icon() + +/obj/machinery/alarm/cold + target_temperature = T0C+4 + +/obj/machinery/alarm/warm + target_temperature = T0C+75 + environment_type = /singleton/environment_data/finnish + +/obj/machinery/alarm/warm/Initialize() + . = ..() + TLV["temperature"] = list(T0C-26, T0C, T0C+75, T0C+85) // K + TLV["pressure"] = list(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.30,ONE_ATMOSPHERE*1.50) /* kpa */ + +/obj/machinery/alarm/nobreach + breach_pressure = -1 + +/obj/machinery/alarm/monitor + report_danger_level = 0 + breach_pressure = -1 + +/obj/machinery/alarm/server/Initialize() + . = ..() + req_access = list(access_rd, access_atmospherics, access_engine_equip) + TLV["temperature"] = list(T0C-26, T0C, T0C+30, T0C+40) + target_temperature = T0C + 10 + +/* +AIR ALARM CIRCUIT +Just a object used in constructing air alarms +*/ +/obj/item/airalarm_electronics + name = "air alarm electronics" + icon = 'icons/obj/doors/door_assembly.dmi' + icon_state = "door_electronics" + desc = "Looks like a circuit. Probably is." + w_class = ITEM_SIZE_SMALL + matter = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 50) diff --git a/code/game/machinery/alarm/firealarm.dm b/code/game/machinery/alarm/firealarm.dm new file mode 100644 index 0000000000000..0a9d10a54fb5b --- /dev/null +++ b/code/game/machinery/alarm/firealarm.dm @@ -0,0 +1,310 @@ +/obj/machinery/firealarm + name = "fire alarm" + desc = "\"Pull this in case of emergency\". Thus, keep pulling it forever." + icon = 'icons/obj/machines/firealarm.dmi' + icon_state = "casing" + var/detecting = 1.0 + var/working = 1.0 + var/time = 10.0 + var/timing = 0.0 + var/lockdownbyai = 0 + anchored = TRUE + idle_power_usage = 2 + active_power_usage = 6 + power_channel = ENVIRON + var/last_process = 0 + var/wiresexposed = FALSE + var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone + var/seclevel + var/static/list/overlays_cache + +/obj/machinery/firealarm/examine(mob/user) + . = ..() + if(loc.z in GLOB.using_map.contact_levels) + var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) + to_chat(user, "The current alert level is [security_state.current_security_level.name].") + +/obj/machinery/firealarm/Initialize() + . = ..() + queue_icon_update() + +/obj/machinery/firealarm/proc/get_cached_overlay(state) + if(!LAZYACCESS(overlays_cache, state)) + LAZYSET(overlays_cache, state, image(icon, state)) + return overlays_cache[state] + +/obj/machinery/firealarm/on_update_icon() + ClearOverlays() + + pixel_x = 0 + pixel_y = 0 + var/walldir = (dir & (NORTH|SOUTH)) ? GLOB.reverse_dir[dir] : dir + var/turf/T = get_step(get_turf(src), walldir) + if(istype(T) && T.density) + if(dir == SOUTH) + pixel_y = 21 + else if(dir == NORTH) + pixel_y = -21 + else if(dir == EAST) + pixel_x = 21 + else if(dir == WEST) + pixel_x = -21 + + icon_state = "casing" + if(wiresexposed) + AddOverlays(get_cached_overlay("b[buildstage]")) + set_light(0) + return + + if(MACHINE_IS_BROKEN(src)) + AddOverlays(get_cached_overlay("broken")) + set_light(0) + else if(!is_powered()) + AddOverlays(get_cached_overlay("unpowered")) + set_light(0) + else + if(!detecting) + AddOverlays(get_cached_overlay("fire1")) + set_light(2, 0.25, COLOR_RED) + else if(z in GLOB.using_map.contact_levels) + var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) + var/singleton/security_level/sl = security_state.current_security_level + + set_light(sl.light_power, sl.light_range, sl.light_color_alarm) + AddOverlays(image(sl.icon, sl.overlay_alarm)) + else + AddOverlays(get_cached_overlay("fire0")) + +/obj/machinery/firealarm/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(src.detecting) + if(exposed_temperature > T0C+200) + src.alarm() // added check of detector status here + return + +/obj/machinery/firealarm/bullet_act() + return src.alarm() + +/obj/machinery/firealarm/emp_act(severity) + if(prob(50/severity)) + alarm(rand(30/severity, 60/severity)) + ..() + +/obj/machinery/firealarm/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(buildstage != 1) + return + to_chat(user, "You start prying out the circuit.") + if(!tool.use_as_tool(src, user, 2 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + to_chat(user, "You pry out the circuit!") + var/obj/item/firealarm_electronics/circuit = new /obj/item/firealarm_electronics() + circuit.dropInto(user.loc) + buildstage = 0 + update_icon() + +/obj/machinery/firealarm/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(buildstage == 2) + detecting = !detecting + user.visible_message( + SPAN_NOTICE("[user] has [detecting? "re" : "dis"]connected [src]'s detecting unit!"), + SPAN_NOTICE("You have [detecting? "re" : "dis"]connected [src]'s detecting unit.") + ) + +/obj/machinery/firealarm/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(buildstage != 2) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + wiresexposed = !wiresexposed + update_icon() + +/obj/machinery/firealarm/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(buildstage != 0) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + to_chat(user, "You remove the fire alarm assembly from the wall!") + new /obj/item/frame/fire_alarm(get_turf(user)) + qdel(src) + +/obj/machinery/firealarm/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(buildstage != 2) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message( + SPAN_NOTICE("[user] has cut the wires inside [src]!"), + SPAN_NOTICE("You have cut the wires inside [src].") + ) + new/obj/item/stack/cable_coil(get_turf(src), 5) + buildstage = 1 + update_icon() + +/obj/machinery/firealarm/use_tool(obj/item/W, mob/living/user, list/click_params) + if ((. = ..())) + return + if(wiresexposed) + switch(buildstage) + if(1) + if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if (C.use(5)) + to_chat(user, SPAN_NOTICE("You wire [src].")) + buildstage = 2 + update_icon() + return TRUE + else + to_chat(user, SPAN_WARNING("You need 5 pieces of cable to wire [src].")) + return TRUE + if(0) + if(istype(W, /obj/item/firealarm_electronics)) + to_chat(user, "You insert the circuit!") + qdel(W) + buildstage = 1 + update_icon() + return TRUE + + to_chat(user, SPAN_WARNING("You fumble with [W] and trigger the alarm!")) + alarm() + return TRUE + +/obj/machinery/firealarm/Process()//Note: this processing was mostly phased out due to other code, and only runs when needed + if(inoperable()) + return + + if(timing) + if(time > 0) + time -= (world.timeofday - last_process)/10 + + else + alarm() + time = 0 + timing = 0 + STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) + updateDialog() + last_process = world.timeofday + + if(locate(/obj/hotspot) in loc) + alarm() + +/obj/machinery/firealarm/interface_interact(mob/user) + interact(user) + return TRUE + +/obj/machinery/firealarm/interact(mob/user) + user.set_machine(src) + var/area/A = src.loc + var/d1 + var/d2 + + var/datum/browser/popup = new(user, "firealarm", "Fire alarm") + var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) + if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon)) + A = A.loc + + if (A.fire) + d1 = text("Reset - Lockdown", src) + else + d1 = text("Alarm - Lockdown", src) + if (src.timing) + d2 = text("Stop Time Lock", src) + else + d2 = text("Initiate Time Lock", src) + var/second = round(src.time) % 60 + var/minute = (round(src.time) - second) / 60 + popup.set_content("[d1]\n
The current alert level is [security_state.current_security_level.name]

\nTimer System: [d2]
\nTime Left: [(minute ? "[minute]:" : null)][second] - - + +") + else + A = A.loc + if (A.fire) + d1 = text("[]", src, stars("Reset - Lockdown")) + else + d1 = text("[]", src, stars("Alarm - Lockdown")) + if (src.timing) + d2 = text("[]", src, stars("Stop Time Lock")) + else + d2 = text("[]", src, stars("Initiate Time Lock")) + var/second = round(src.time) % 60 + var/minute = (round(src.time) - second) / 60 + popup.set_content("[d1]\n
The current security level is [security_state.current_security_level.name]

\nTimer System: [d2]
\nTime Left: [(minute ? text("[]:", minute) : null)][second] - - + +\n") + popup.open() + return + +/obj/machinery/firealarm/CanUseTopic(user) + if(buildstage != 2) + return STATUS_CLOSE + return ..() + +/obj/machinery/firealarm/OnTopic(user, href_list) + if (href_list["reset"]) + src.reset() + . = TOPIC_REFRESH + else if (href_list["alarm"]) + src.alarm() + . = TOPIC_REFRESH + else if (href_list["time"]) + src.timing = text2num(href_list["time"]) + last_process = world.timeofday + START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) + . = TOPIC_REFRESH + else if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + src.time += tp + src.time = min(max(round(src.time), 0), 120) + . = TOPIC_REFRESH + + if(. == TOPIC_REFRESH) + interact(user) + +/obj/machinery/firealarm/proc/reset() + if (!( src.working )) + return + + var/area/area = get_area(src) + for(var/obj/machinery/firealarm/FA in area.machinery_list) + GLOB.fire_alarm.clearAlarm(loc, FA) + + update_icon() + return + +/obj/machinery/firealarm/proc/alarm(duration = 0) + if (!(src.working)) + return + + var/area/area = get_area(src) + for(var/obj/machinery/firealarm/FA in area.machinery_list) + GLOB.fire_alarm.triggerAlarm(loc, FA, duration) + + update_icon() + playsound(src, 'sound/machines/fire_alarm.ogg', 75, 0) + return + +/obj/machinery/firealarm/New(loc, dir, atom/frame) + ..(loc) + + if(dir) + src.set_dir((dir & (NORTH|SOUTH)) ? dir : GLOB.reverse_dir[dir]) + + if(istype(frame)) + buildstage = 0 + wiresexposed = TRUE + pixel_x = (dir & 3)? 0 : (dir == 4 ? -21 : 21) + pixel_y = (dir & 3)? (dir ==1 ? -21 : 21) : 0 + update_icon() + frame.transfer_fingerprints_to(src) + +/obj/machinery/firealarm/Initialize() + . = ..() + if(z in GLOB.using_map.contact_levels) + update_icon() + +/obj/item/firealarm_electronics + name = "fire alarm electronics" + icon = 'icons/obj/doors/door_assembly.dmi' + icon_state = "door_electronics" + desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\"." + w_class = ITEM_SIZE_SMALL + matter = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 50) diff --git a/code/game/machinery/alarm/partyalarm.dm b/code/game/machinery/alarm/partyalarm.dm new file mode 100644 index 0000000000000..25bd4b0c0b5b6 --- /dev/null +++ b/code/game/machinery/alarm/partyalarm.dm @@ -0,0 +1,87 @@ +/obj/machinery/partyalarm + name = "\improper PARTY BUTTON" + desc = "Cuban Pete is in the house!" + icon = 'icons/obj/machines/firealarm.dmi' + icon_state = "fire0" + var/detecting = 1.0 + var/working = 1.0 + var/time = 10.0 + var/timing = 0.0 + var/lockdownbyai = 0 + anchored = TRUE + idle_power_usage = 2 + active_power_usage = 6 + +/obj/machinery/partyalarm/interface_interact(mob/user) + interact(user) + return TRUE + +/obj/machinery/partyalarm/interact(mob/user) + user.machine = src + var/area/A = get_area(src) + ASSERT(isarea(A)) + var/d1 + var/d2 + var/datum/browser/popup = new(user, "partyalarm", "Party alarm") + if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai)) + + if (A.party) + d1 = text("No Party :(", src) + else + d1 = text("PARTY!!!", src) + if (timing) + d2 = text("Stop Time Lock", src) + else + d2 = text("Initiate Time Lock", src) + var/second = time % 60 + var/minute = (time - second) / 60 + popup.set_content(text("Party Button []\n
\nTimer System: []
\nTime Left: [][] - - + +\n
", d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)) + else + if (A.fire) + d1 = text("[]", src, stars("No Party :(")) + else + d1 = text("[]", src, stars("PARTY!!!")) + if (timing) + d2 = text("[]", src, stars("Stop Time Lock")) + else + d2 = text("[]", src, stars("Initiate Time Lock")) + var/second = time % 60 + var/minute = (time - second) / 60 + popup.set_content(text("[] []\n
\nTimer System: []
\nTime Left: [][] - - + +\n
", stars("Party Button"), d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)) + popup.open() + return + +/obj/machinery/partyalarm/proc/reset() + if (!( working )) + return + var/area/A = get_area(src) + ASSERT(isarea(A)) + A.partyreset() + return + +/obj/machinery/partyalarm/proc/alarm() + if (!( working )) + return + var/area/A = get_area(src) + ASSERT(isarea(A)) + A.partyalert() + return + +/obj/machinery/partyalarm/OnTopic(user, href_list) + if (href_list["reset"]) + reset() + . = TOPIC_REFRESH + else if (href_list["alarm"]) + alarm() + . = TOPIC_REFRESH + else if (href_list["time"]) + timing = text2num(href_list["time"]) + . = TOPIC_REFRESH + else if (href_list["tp"]) + var/tp = text2num(href_list["tp"]) + time += tp + time = min(max(round(time), 0), 120) + . = TOPIC_REFRESH + + if(. == TOPIC_REFRESH) + interact(user) diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 02658f2468800..b51d5bd397076 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -1,9 +1,9 @@ /obj/machinery/computer/air_control - icon = 'icons/obj/computer.dmi' + icon = 'icons/obj/machines/computer.dmi' icon_keyboard = "atmos_key" icon_screen = "tank" - name = "Atmospherics Control Console" + name = "atmospherics control console" machine_name = "atmosphere monitoring console" machine_desc = "Allows for the monitoring of the gases in an area by using a connected gas sensor, as well as controlling injection and output." @@ -260,7 +260,7 @@ radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA) /obj/machinery/computer/air_control/fuel_injection - icon = 'icons/obj/computer.dmi' + icon = 'icons/obj/machines/computer.dmi' icon_screen = "alert:0" machine_name = "injector control" machine_desc = "An atmosphere monitoring console, modified specifically for controlling gas injectors." @@ -328,7 +328,7 @@ ..() /obj/machinery/computer/air_control/supermatter_core - icon = 'icons/obj/computer.dmi' + icon = 'icons/obj/machines/computer.dmi' frequency = 1438 out_pressure_mode = 1 machine_name = "core control" diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm index 179392549fa14..4fda06c567531 100644 --- a/code/game/machinery/atmoalter/area_atmos_computer.dm +++ b/code/game/machinery/atmoalter/area_atmos_computer.dm @@ -1,11 +1,12 @@ /obj/machinery/computer/area_atmos - name = "Area Air Control" + name = "area air control" desc = "A computer used to control the stationary scrubbers and pumps in the area." icon_keyboard = "atmos_key" icon_screen = "area_atmos" light_color = "#e6ffff" machine_name = "area air control console" machine_desc = "A larger and less complex form of air alarm that allows configuration of an area's vents and scrubbers." + construct_state = /singleton/machine_construction/default/panel_closed/computer/cannot_print var/list/connectedscrubbers = list() var/status = "" var/range = 25 @@ -131,8 +132,14 @@ var/area/A = get_area(src) if (!A) return - for (var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in A) + + for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber as anything in SSmachines.get_machinery_of_type(/obj/machinery/portable_atmospherics/powered/scrubber/huge)) + if(get_area(scrubber) != A) + continue + connectedscrubbers += scrubber + if (!length(connectedscrubbers)) status = "ERROR: No scrubber found!" + updateUsrDialog() diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index e66586a004106..79bc4030bafaf 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -1,6 +1,6 @@ /obj/machinery/portable_atmospherics/canister name = "\improper Canister: \[CAUTION\]" - icon = 'icons/obj/atmos.dmi' + icon = 'icons/obj/atmospherics/atmos.dmi' icon_state = "yellow" density = TRUE health_max = 100 @@ -8,17 +8,16 @@ w_class = ITEM_SIZE_GARGANTUAN construct_state = null health_resistances = DAMAGE_RESIST_PHYSICAL + start_pressure = 45 * ONE_ATMOSPHERE + volume = 1000 + interact_offline = TRUE // Allows this to be used when not in powered area. - var/valve_open = 0 + var/valve_open = FALSE var/release_pressure = ONE_ATMOSPHERE - var/release_flow_rate = ATMOS_DEFAULT_VOLUME_PUMP //in L/s - + var/release_flow_rate = ATMOS_DEFAULT_VOLUME_PUMP // in L/s var/canister_color = "yellow" - var/can_label = 1 - start_pressure = 45 * ONE_ATMOSPHERE + var/can_label = TRUE var/temperature_resistance = 1000 + T0C - volume = 1000 - interact_offline = 1 // Allows this to be used when not in powered area. var/const/CANISTER_PRESSURE_EMPTY = ONE_ATMOSPHERE var/const/CANISTER_PRESSURE_LOW = 50 * ONE_ATMOSPHERE @@ -32,13 +31,13 @@ name = "\improper Canister: \[N2O\]" icon_state = "redws" canister_color = "redws" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/nitrogen name = "\improper Canister: \[N2\]" icon_state = "red" canister_color = "red" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/nitrogen/prechilled name = "\improper Canister: \[N2 (Cooling)\]" @@ -47,7 +46,7 @@ name = "\improper Canister: \[O2\]" icon_state = "blue" canister_color = "blue" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/oxygen/prechilled name = "\improper Canister: \[O2 (Cryo)\]" @@ -57,38 +56,37 @@ name = "\improper Canister: \[Hydrogen\]" icon_state = "purple" canister_color = "purple" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/phoron name = "\improper Canister \[Phoron\]" icon_state = "orange" canister_color = "orange" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/carbon_dioxide name = "\improper Canister \[CO2\]" icon_state = "black" canister_color = "black" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/air name = "\improper Canister \[Air\]" icon_state = "grey" canister_color = "grey" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/boron name = "\improper Canister \[Boron\]" icon_state = "lightblue" canister_color = "lightblue" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/air/airlock start_pressure = 3 * ONE_ATMOSPHERE /obj/machinery/portable_atmospherics/canister/empty start_pressure = 0 - can_label = 1 var/obj/machinery/portable_atmospherics/canister/canister_type = /obj/machinery/portable_atmospherics/canister /obj/machinery/portable_atmospherics/canister/empty/New() @@ -121,30 +119,30 @@ /obj/machinery/portable_atmospherics/canister/on_update_icon() - if (destroyed) - overlays.Cut() + if(destroyed) + ClearOverlays() icon_state = "[canister_color]-1" return - if (icon_state != "[canister_color]") + if(icon_state != "[canister_color]") icon_state = "[canister_color]" - overlays.Cut() + ClearOverlays() - if (holding) - overlays += "can-open" - if (connected_port) - overlays += "can-connector" + if(holding) + AddOverlays("can-open") + if(connected_port) + AddOverlays("can-connector") var/tank_pressure = return_pressure() - if (tank_pressure <= CANISTER_PRESSURE_EMPTY) - overlays += "can-o0" - else if (tank_pressure <= CANISTER_PRESSURE_LOW) - overlays += "can-o1" - else if (tank_pressure <= CANISTER_PRESSURE_MID) - overlays += "can-o2" + if(tank_pressure <= CANISTER_PRESSURE_EMPTY) + AddOverlays("can-o0") + else if(tank_pressure <= CANISTER_PRESSURE_LOW) + AddOverlays("can-o1") + else if(tank_pressure <= CANISTER_PRESSURE_MID) + AddOverlays("can-o2") else - overlays += "can-o3" + AddOverlays("can-o3") /obj/machinery/portable_atmospherics/canister/get_material_melting_point() return temperature_resistance @@ -155,13 +153,13 @@ destroyed = TRUE playsound(src, 'sound/effects/spray.ogg', 10, TRUE, -3) set_density(FALSE) - if (holding) + if(holding) holding.dropInto(loc) holding = null ..() /obj/machinery/portable_atmospherics/canister/Process() - if (destroyed) + if(destroyed) return ..() @@ -187,9 +185,9 @@ holding.queue_icon_update() if(air_contents.return_pressure() < 1) - can_label = 1 + can_label = TRUE else - can_label = 0 + can_label = FALSE air_contents.react() //cooking up air cans - add phoron and oxygen, then heat above PHORON_MINIMUM_BURN_TEMPERATURE @@ -205,7 +203,7 @@ return GM.return_pressure() return 0 -/obj/machinery/portable_atmospherics/canister/attackby(obj/item/W as obj, mob/user as mob) +/obj/machinery/portable_atmospherics/canister/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(user, /mob/living/silicon/robot) && istype(W, /obj/item/tank/jetpack)) var/datum/gas_mixture/thejetpack = W:air_contents var/env_pressure = thejetpack.return_pressure() @@ -221,189 +219,177 @@ . = ..() - SSnano.update_uis(src) // Update all NanoUIs attached to src + SStgui.update_uis(src) /obj/machinery/portable_atmospherics/canister/interface_interact(mob/user) - ui_interact(user) + tgui_interact(user) return TRUE -/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) - // this is the data which will be sent to the ui - var/data[0] +/obj/machinery/portable_atmospherics/canister/tgui_state(mob/user) + return GLOB.tgui_default_state + +/obj/machinery/portable_atmospherics/canister/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Canister", name) + ui.open() + +/obj/machinery/portable_atmospherics/canister/tgui_data(mob/user) + var/list/data = list() + data["name"] = name - data["canLabel"] = can_label ? 1 : 0 - data["portConnected"] = connected_port ? 1 : 0 + data["valveOpen"] = valve_open data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) data["releasePressure"] = round(release_pressure ? release_pressure : 0) - data["minReleasePressure"] = round(ONE_ATMOSPHERE/10) - data["maxReleasePressure"] = round(10*ONE_ATMOSPHERE) - data["valveOpen"] = valve_open ? 1 : 0 - - data["hasHoldingTank"] = holding ? 1 : 0 - if (holding) + data["hasHoldingTank"] = holding ? TRUE : FALSE + if(holding) data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure())) - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "canister.tmpl", "Canister", 480, 400) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + return data + +/obj/machinery/portable_atmospherics/canister/tgui_static_data(mob/user) + var/list/static_data = list() + + static_data["canLabel"] = can_label + static_data["maximumPressure"] = round(maximum_pressure) + static_data["minReleasePressure"] = round(ONE_ATMOSPHERE / 10) + static_data["maxReleasePressure"] = round(10 * ONE_ATMOSPHERE) + static_data["portConnected"] = connected_port ? TRUE : FALSE + + return static_data -/obj/machinery/portable_atmospherics/canister/OnTopic(mob/user, href_list, state) - if(href_list["toggle"]) - if (!valve_open) +/obj/machinery/portable_atmospherics/canister/tgui_act(action, list/params) + if(..()) + return + + var/can_min_release_pressure = round(ONE_ATMOSPHERE / 10) + var/can_max_release_pressure = round(ONE_ATMOSPHERE * 10) + . = TRUE + + switch(action) + if("toggle") if(!holding) log_open() - valve_open = !valve_open - . = TOPIC_REFRESH - - else if (href_list["remove_tank"]) - if(!holding) - return TOPIC_HANDLED - if (valve_open) - valve_open = 0 - if(istype(holding, /obj/item/tank)) - holding.manipulated_by = user.real_name - holding.dropInto(loc) - holding = null - update_icon() - . = TOPIC_REFRESH - - else if (href_list["pressure_adj"]) - var/diff = text2num(href_list["pressure_adj"]) - if(diff > 0) - release_pressure = min(10*ONE_ATMOSPHERE, release_pressure+diff) - else - release_pressure = max(ONE_ATMOSPHERE/10, release_pressure+diff) - . = TOPIC_REFRESH - - else if (href_list["relabel"]) - if (!can_label) - return 0 - var/list/colors = list(\ - "\[N2O\]" = "redws", \ - "\[N2\]" = "red", \ - "\[O2\]" = "blue", \ - "\[Phoron\]" = "orange", \ - "\[CO2\]" = "black", \ - "\[H2\]" = "purple", \ - "\[Air\]" = "grey", \ - "\[CAUTION\]" = "yellow", \ - ) - var/label = input(user, "Choose canister label", "Gas canister") as null|anything in colors - if (label && CanUseTopic(user, state)) + valve_open = !valve_open + return TRUE + if("remove_tank") + if(valve_open) + valve_open = FALSE + if(istype(holding, /obj/item/tank)) + holding.manipulated_by = usr.real_name + holding.dropInto(loc) + holding = null + update_icon() + return TRUE + if("pressure") + var/pressure = params["pressure"] + if(pressure == "reset") + pressure = ONE_ATMOSPHERE + if(.) + release_pressure = clamp(round(pressure), can_min_release_pressure, can_max_release_pressure) + return TRUE + if("relabel") + var/static/list/colors = list( + "\[N2O\]" = "redws", + "\[N2\]" = "red", + "\[O2\]" = "blue", + "\[Phoron\]" = "orange", + "\[CO2\]" = "black", + "\[H2\]" = "purple", + "\[Air\]" = "grey", + "\[CAUTION\]" = "yellow", + ) + var/label = tgui_input_list(usr, "Choose canister label", "Gas canister", colors) + if(!label) + return canister_color = colors[label] icon_state = colors[label] - SetName("\improper Canister: [label]") - update_icon() - . = TOPIC_REFRESH - -/obj/machinery/portable_atmospherics/canister/CanUseTopic() - if(destroyed) - return STATUS_CLOSE - return ..() + SetName("Canister: [label]") + update_icon() + return TRUE /obj/machinery/portable_atmospherics/canister/phoron/New() - ..() - + . = ..() src.air_contents.adjust_gas(GAS_PHORON, MolesForPressure()) src.update_icon() - return 1 /obj/machinery/portable_atmospherics/canister/oxygen/New() - ..() - + . = ..() src.air_contents.adjust_gas(GAS_OXYGEN, MolesForPressure()) src.update_icon() - return 1 /obj/machinery/portable_atmospherics/canister/hydrogen/New() - ..() + . = ..() src.air_contents.adjust_gas(GAS_HYDROGEN, MolesForPressure()) src.update_icon() - return 1 /obj/machinery/portable_atmospherics/canister/oxygen/prechilled/New() - ..() + . = ..() src.air_contents.temperature = 80 src.update_icon() - return 1 /obj/machinery/portable_atmospherics/canister/sleeping_agent/New() - ..() - + . = ..() air_contents.adjust_gas(GAS_N2O, MolesForPressure()) src.update_icon() - return 1 //Dirty way to fill room with gas. However it is a bit easier to do than creating some floor/engine/n2o -rastaf0 /obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller/New() - ..() + . = ..() air_contents.gas[GAS_N2O] = 9*4000 spawn(10) var/turf/simulated/location = src.loc - if (istype(src.loc)) - while (!location.air) - sleep(10) + if(istype(src.loc)) + while(!location.air) + sleep(1 SECONDS) location.assume_air(air_contents) air_contents = new - return 1 + return TRUE /obj/machinery/portable_atmospherics/canister/nitrogen/New() - ..() + . = ..() src.air_contents.adjust_gas(GAS_NITROGEN, MolesForPressure()) src.update_icon() - return 1 /obj/machinery/portable_atmospherics/canister/nitrogen/prechilled/New() - ..() + . = ..() src.air_contents.temperature = 80 src.update_icon() - return 1 /obj/machinery/portable_atmospherics/canister/carbon_dioxide/New() - ..() + . = ..() src.air_contents.adjust_gas(GAS_CO2, MolesForPressure()) src.update_icon() - return 1 - /obj/machinery/portable_atmospherics/canister/air/New() - ..() + . = ..() var/list/air_mix = StandardAirMix() src.air_contents.adjust_multi(GAS_OXYGEN, air_mix[GAS_OXYGEN], GAS_NITROGEN, air_mix[GAS_NITROGEN]) - src.update_icon() - return 1 /obj/machinery/portable_atmospherics/canister/boron/New() - ..() + . = ..() src.air_contents.adjust_gas(GAS_BORON, MolesForPressure()) src.update_icon() - return 1 // Special types used for engine setup admin verb, they contain double amount of that of normal canister. /obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/New() - ..() + . = ..() src.air_contents.adjust_gas(GAS_NITROGEN, MolesForPressure()) src.update_icon() - return 1 /obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/New() - ..() + . = ..() src.air_contents.adjust_gas(GAS_CO2, MolesForPressure()) src.update_icon() - return 1 /obj/machinery/portable_atmospherics/canister/phoron/engine_setup/New() - ..() + . = ..() src.air_contents.adjust_gas(GAS_PHORON, MolesForPressure()) src.update_icon() - return 1 /obj/machinery/portable_atmospherics/canister/hydrogen/engine_setup/New() - ..() + . = ..() src.air_contents.adjust_gas(GAS_HYDROGEN, MolesForPressure()) src.update_icon() @@ -412,7 +398,7 @@ name = "\improper Canister \[He\]" icon_state = "black" canister_color = "black" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/helium/New() ..() @@ -423,7 +409,7 @@ name = "\improper Canister \[CH3Br\]" icon_state = "black" canister_color = "black" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/methyl_bromide/New() ..() @@ -434,7 +420,7 @@ name = "\improper Canister \[Cl\]" icon_state = "lightyellow" canister_color = "lightyellow" - can_label = 0 + can_label = FALSE /obj/machinery/portable_atmospherics/canister/chlorine/New() ..() diff --git a/code/game/machinery/atmoalter/clamp.dm b/code/game/machinery/atmoalter/clamp.dm index fc6ffbf6da0f9..72f87e2970f49 100644 --- a/code/game/machinery/atmoalter/clamp.dm +++ b/code/game/machinery/atmoalter/clamp.dm @@ -148,25 +148,24 @@ icon_state = "pclamp0" origin_tech = list(TECH_ENGINEERING = 4, TECH_MAGNET = 4) -/obj/item/clamp/afterattack(atom/A, mob/user as mob, proximity) - if(!proximity) - return - +/obj/item/clamp/use_after(atom/A, mob/living/user, click_parameters) if (istype(A, /obj/machinery/atmospherics/pipe/simple)) var/obj/machinery/atmospherics/pipe/simple/P = A if (P.clamp) to_chat(user, SPAN_WARNING("There is already \a [P.clamp] attached to \the [P].")) - return + return TRUE to_chat(user, SPAN_NOTICE("You begin to attach \the [src] to \the [A]...")) if (do_after(user, 3 SECONDS, A, DO_REPAIR_CONSTRUCT)) if (QDELETED(P)) - return + return TRUE if (P.clamp) to_chat(user, SPAN_WARNING("There is already \a [P.clamp] attached to \the [P].")) - return + return TRUE if(!user.unEquip(src)) - return + return TRUE to_chat(user, SPAN_NOTICE("You have attached \the [src] to \the [A].")) new/obj/machinery/clamp(A.loc, A) qdel(src) + return TRUE + else return FALSE diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index 906a58a70ddec..9fac024ad5fab 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -1,7 +1,7 @@ /obj/machinery/meter name = "meter" desc = "A gas flow meter." - icon = 'icons/obj/meter.dmi' + icon = 'icons/obj/atmospherics/meter.dmi' icon_state = "meterX" var/atom/target = null //A pipe for the base type anchored = TRUE @@ -32,7 +32,7 @@ /obj/machinery/meter/proc/set_target(atom/new_target) clear_target() target = new_target - GLOB.destroyed_event.register(target, src, .proc/clear_target) + GLOB.destroyed_event.register(target, src, PROC_REF(clear_target)) /obj/machinery/meter/proc/clear_target() if(target) @@ -83,19 +83,19 @@ . = ..() if(distance > 3 && !(istype(user, /mob/living/silicon/ai) || isghost(user))) - to_chat(user, SPAN_WARNING("You are too far away to read it.")) + . += SPAN_WARNING("You are too far away to read it.") else if(inoperable()) - to_chat(user, SPAN_WARNING("The display is off.")) + . += SPAN_WARNING("The display is off.") else if(src.target) var/datum/gas_mixture/environment = target.return_air() if(environment) - to_chat(user, "The pressure gauge reads [round(environment.return_pressure(), 0.01)] kPa; [round(environment.temperature,0.01)]K ([round(environment.temperature-T0C,0.01)]°C)") + . += SPAN_NOTICE("The pressure gauge reads [round(environment.return_pressure(), 0.01)] kPa; [round(environment.temperature,0.01)]K ([round(environment.temperature-T0C,0.01)]°C)") else - to_chat(user, "The sensor error light is blinking.") + . += SPAN_NOTICE("The sensor error light is blinking.") else - to_chat(user, "The connect error light is blinking.") + . += SPAN_NOTICE("The connect error light is blinking.") /obj/machinery/meter/interface_interact(mob/user) diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index d70b5fb3ace0e..70f131787a4b8 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -32,7 +32,7 @@ ..() return INITIALIZE_HINT_LATELOAD -/obj/machinery/portable_atmospherics/LateInitialize() +/obj/machinery/portable_atmospherics/LateInitialize(mapload) var/obj/machinery/atmospherics/portables_connector/port = locate() in loc if(port) connect(port) @@ -103,38 +103,37 @@ if (network) network.update = 1 -/obj/machinery/portable_atmospherics/attackby(obj/item/W as obj, mob/user as mob) - if ((istype(W, /obj/item/tank) && !( src.destroyed ))) - if (src.holding) +/obj/machinery/portable_atmospherics/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(connected_port) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - if(!user.unEquip(W, src)) - return - src.holding = W + disconnect() + to_chat(user, SPAN_NOTICE("You disconnect [src] from the port.")) update_icon() return + var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector) in loc + if(!possible_port) + to_chat(user, SPAN_NOTICE("Nothing happens.")) + return + if(!connect(possible_port)) + to_chat(user, SPAN_NOTICE("[src] failed to connect to the port.")) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + to_chat(user, SPAN_NOTICE("You connect [src] to the port.")) + update_icon() - else if(isWrench(W)) - if(connected_port) - disconnect() - to_chat(user, SPAN_NOTICE("You disconnect \the [src] from the port.")) - update_icon() +/obj/machinery/portable_atmospherics/use_tool(obj/item/W, mob/living/user, list/click_params) + if ((istype(W, /obj/item/tank) && !destroyed)) + if (holding) + to_chat(user, SPAN_WARNING("[src] already contains a tank!")) return - else - var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector) in loc - if(possible_port) - if(connect(possible_port)) - to_chat(user, SPAN_NOTICE("You connect \the [src] to the port.")) - update_icon() - return - else - to_chat(user, SPAN_NOTICE("\The [src] failed to connect to the port.")) - return - else - to_chat(user, SPAN_NOTICE("Nothing happens.")) - return ..() - - else if (istype(W, /obj/item/device/scanner/gas)) - return + if(!user.unEquip(W, src)) + return TRUE + holding = W + update_icon() + return TRUE return ..() diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm index c9116b6b6434a..66c933759857c 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/game/machinery/atmoalter/pump.dm @@ -1,7 +1,7 @@ /obj/machinery/portable_atmospherics/powered/pump name = "portable air pump" - icon = 'icons/obj/atmos.dmi' + icon = 'icons/obj/atmospherics/atmos.dmi' icon_state = "psiphon:0" density = TRUE w_class = ITEM_SIZE_NORMAL @@ -31,7 +31,7 @@ src.air_contents.adjust_multi(GAS_OXYGEN, air_mix[GAS_OXYGEN], GAS_NITROGEN, air_mix[GAS_NITROGEN]) /obj/machinery/portable_atmospherics/powered/pump/on_update_icon() - overlays.Cut() + ClearOverlays() if((use_power == POWER_USE_ACTIVE) && is_powered()) icon_state = "psiphon:1" @@ -39,10 +39,10 @@ icon_state = "psiphon:0" if(holding) - overlays += "siphon-open" + AddOverlays("siphon-open") if(connected_port) - overlays += "siphon-connector" + AddOverlays("siphon-connector") /obj/machinery/portable_atmospherics/powered/pump/emp_act(severity) if(inoperable()) diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index 0756394e827fe..47f0f5f9cf53b 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -1,7 +1,7 @@ /obj/machinery/portable_atmospherics/powered/scrubber - name = "Portable Air Scrubber" + name = "portable air scrubber" - icon = 'icons/obj/atmos.dmi' + icon = 'icons/obj/atmospherics/atmos.dmi' icon_state = "pscrubber:0" density = TRUE w_class = ITEM_SIZE_NORMAL @@ -41,7 +41,7 @@ ..(severity) /obj/machinery/portable_atmospherics/powered/scrubber/on_update_icon() - overlays.Cut() + ClearOverlays() if((use_power == POWER_USE_ACTIVE) && operable()) icon_state = "pscrubber:1" @@ -49,10 +49,10 @@ icon_state = "pscrubber:0" if(holding) - overlays += "scrubber-open" + AddOverlays("scrubber-open") if(connected_port) - overlays += "scrubber-connector" + AddOverlays("scrubber-connector") /obj/machinery/portable_atmospherics/powered/scrubber/Process() ..() @@ -150,12 +150,13 @@ //Huge scrubber /obj/machinery/portable_atmospherics/powered/scrubber/huge - name = "Huge Air Scrubber" + name = "huge air scrubber" icon_state = "scrubber:0" anchored = TRUE volume = 50000 volume_rate = 5000 base_type = /obj/machinery/portable_atmospherics/powered/scrubber/huge + obj_flags = OBJ_FLAG_ANCHORABLE uncreated_component_parts = list(/obj/item/stock_parts/power/apc) maximum_component_parts = list(/obj/item/stock_parts = 15) @@ -183,40 +184,27 @@ return TRUE /obj/machinery/portable_atmospherics/powered/scrubber/huge/on_update_icon() - overlays.Cut() + ClearOverlays() if((use_power == POWER_USE_ACTIVE) && operable()) icon_state = "scrubber:1" else icon_state = "scrubber:0" -/obj/machinery/portable_atmospherics/powered/scrubber/huge/attackby(obj/item/I as obj, mob/user as mob) - if(isWrench(I)) - if(use_power == POWER_USE_ACTIVE) - to_chat(user, SPAN_WARNING("Turn \the [src] off first!")) - return - - anchored = !anchored - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You [anchored ? "wrench" : "unwrench"] \the [src].")) - - return +/obj/machinery/portable_atmospherics/powered/scrubber/huge/use_tool(obj/item/I, mob/living/user, list/click_params) //doesn't hold tanks if(istype(I, /obj/item/tank)) - return - + return FALSE return ..() /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary - name = "Stationary Air Scrubber" + name = "stationary air scrubber" base_type = /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary machine_name = "large stationary portable scrubber" machine_desc = "This is simply a large portable scrubber that can't be moved once it's bolted into place, and is otherwise identical." + obj_flags = EMPTY_BITFIELD -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/attackby(obj/item/I as obj, mob/user as mob) - if(isWrench(I)) - to_chat(user, SPAN_WARNING("The bolts are too tight for you to unscrew!")) - return - - return ..() +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + to_chat(user, SPAN_WARNING("The bolts are too tight for you to unscrew!")) diff --git a/code/game/machinery/barrier.dm b/code/game/machinery/barrier.dm index 6cae06d702e5d..acd6f2a3a651d 100644 --- a/code/game/machinery/barrier.dm +++ b/code/game/machinery/barrier.dm @@ -1,7 +1,7 @@ /obj/machinery/barrier name = "deployable barrier" desc = "A deployable barrier." - icon = 'icons/obj/objects.dmi' + icon = 'icons/obj/security_barriers.dmi' icon_state = "barrier0" req_access = list(access_brig) density = TRUE @@ -16,67 +16,56 @@ /obj/machinery/barrier/examine(mob/user, distance) . = ..() if (locked) - var/message = "The lights show it is locked onto \the [get_turf(src)]." + var/message = "The lights show it is locked onto [get_turf(src)]." if (emagged && distance < 3) message += SPAN_WARNING(" The locking clamps have other ideas.") - to_chat(user, message) + . += message -/obj/machinery/barrier/attackby(obj/item/I, mob/user) - if (isid(I)) +/obj/machinery/barrier/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!emagged) + balloon_alert(user, "фиксаторы не повреждены!") + return + if(!tool.tool_start_check(user, 1)) + return + USE_FEEDBACK_REPAIR_START(user) + if(!tool.use_as_tool(src, user, 15 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + emagged = FALSE + USE_FEEDBACK_REPAIR_FINISH(user) + if(locked) + playsound(src, 'sound/machines/bolts_down.ogg', 50, TRUE) + anchored = TRUE + update_icon() + +/obj/machinery/barrier/use_tool(obj/item/I, mob/living/user, list/click_params) + if(isid(I)) var/success = allowed(user) var/message = " to no effect" - if (success) - if (locked) - message = ", unlocking it from \the [get_turf(src)]" + if(success) + if(locked) + message = ", unlocking it from [get_turf(src)]" else - message = ", locking it onto \the [get_turf(src)]" + message = ", locking it onto [get_turf(src)]" user.visible_message( - "\The [user] swipes \an [I] against \the [src].", - "You swipe \the [I] against \the [src][message].", + "[user] swipes \an [I] against [src].", + "You swipe [I] against [src][message].", "You hear metal sliding and creaking.", range = 5 ) - if (success) + if(success) locked = !locked anchored = emagged ? FALSE : locked update_icon() return TRUE - if (user.a_intent == I_HURT) - return ..() - if (isWelder(I)) - var/obj/item/weldingtool/W = I - if (!W.welding) - to_chat(user, SPAN_WARNING("\The [I] isn't turned on.")) - return TRUE - if (!emagged) - to_chat(user, SPAN_WARNING("\The [src]'s locking clamps are not damaged.")) - return TRUE - user.visible_message( - "\The [user] starts to repair \the [src]'s locking clamps with \an [I].", - "You start to repair \the [src]'s locking clamps with \the [I].", - "You hear a hissing flame." - ) - if (do_after(user, 15 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, SPAN_NOTICE("There - Good as new.")) - emagged = FALSE - if (locked) - visible_message( - "\The [src]'s clamps engage, locking onto \the [get_turf(src)].", - "You hear metal sliding and creaking.", - range = 5 - ) - anchored = TRUE - update_icon() - return TRUE - to_chat(user, SPAN_WARNING("You can't think of a way to use \the [I] on \the [src].")) - return TRUE + return ..() /obj/machinery/barrier/emag_act(remaining_charges, mob/user, emag_source) if (user) var/message = emagged ? "achieving nothing new" : "fusing the locking clamps open" user.visible_message( - "\The [user] swipes \an [emag_source] against \the [src].", - "You swipe \the [emag_source] against \the [src], [message].", + "[user] swipes \an [emag_source] against [src].", + "You swipe [emag_source] against [src], [message].", range = 5 ) if (emagged) @@ -86,6 +75,7 @@ return 1 /obj/machinery/barrier/emp_act(severity) + SHOULD_CALL_PARENT(FALSE) if (severity > EMP_ACT_LIGHT) return locked = FALSE @@ -94,6 +84,7 @@ if (severity > EMP_ACT_HEAVY) return sparks(3, 1, src) + GLOB.empd_event.raise_event(src, severity) emag_act() /obj/machinery/barrier/on_death() diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index ca2071f17cd4d..2439e9cab7265 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -1,14 +1,11 @@ -#define BG_READY 0 -#define BG_PROCESSING 1 -#define BG_NO_BEAKER 2 -#define BG_COMPLETE 3 -#define BG_EMPTY 4 +/// The base amount of plants that can be stored before taking our matter bin into account. +#define BASE_MAX_STORABLE_PLANTS 40 /obj/machinery/biogenerator - name = "Biogenerator" - desc = "" - icon = 'icons/obj/biogenerator.dmi' - icon_state = "biogen-stand" + name = "biogenerator" + desc = "Converts plants into biomass, which can be used to construct useful items." + icon = 'icons/obj/machines/biogenerator.dmi' + icon_state = "biogen" density = TRUE anchored = TRUE idle_power_usage = 40 @@ -18,15 +15,21 @@ stat_immune = 0 machine_name = "biogenerator" machine_desc = "Processes fruits, veggies, and other produce into raw biomatter that can be converted into food products and leather items." - var/processing = 0 - var/obj/item/reagent_containers/glass/beaker = null - var/points = 0 - var/state = BG_READY - var/denied = 0 - var/build_eff = 1 - var/eat_eff = 1 - var/ingredients = 0 //How many processable ingredients are stored inside. - var/capacity = 10 //How many ingredients can we store? + /// Is the biogenerator curretly grinding up plants? + var/processing = FALSE + /// Container inside biogenerator + var/obj/item/reagent_containers/glass/beaker + /// The amount of biomass stored in the machine. + var/biomass = 0 + /// Used to modify the cost of producing items. A higher number means cheaper costs. + var/efficiency = 1 + /// Used to modify how much biomass is produced by grinding plants. A higher number means more biomass. + var/productivity = 1 + /// A list of plants currently stored plants in the biogenerator. + var/list/stored_plants = list() + /// The maximum amount of plants the biogenerator can store. + var/max_storable_plants = BASE_MAX_STORABLE_PLANTS + /// List of categories, and items with cost inside it, available to produce. var/list/products = list( "Food" = list( /obj/item/reagent_containers/food/drinks/small_milk = 30, @@ -39,6 +42,7 @@ /obj/item/reagent_containers/glass/bottle/robustharvest = 120), "Leather" = list( /obj/item/storage/wallet = 100, + /obj/item/stack/material/leather = 100, /obj/item/clothing/gloves/thick/botany = 250, /obj/item/storage/belt/utility = 300, /obj/item/storage/backpack/satchel = 400, @@ -52,20 +56,28 @@ /obj/item/clothing/suit/storage/hooded/wintercoat = 500)) /obj/machinery/biogenerator/New() - ..() + . = ..() create_reagents(1000) beaker = new /obj/item/reagent_containers/glass/bottle(src) -/obj/machinery/biogenerator/on_reagent_change() //When the reagents change, change the icon as well. - update_icon() +/obj/machinery/biogenerator/Destroy() + . = ..() + QDEL_NULL(beaker) + QDEL_NULL_LIST(stored_plants) /obj/machinery/biogenerator/on_update_icon() - if(state == BG_NO_BEAKER) - icon_state = "biogen-empty" - else if(state == BG_READY || state == BG_COMPLETE) - icon_state = "biogen-stand" + ClearOverlays() + if(panel_open) + AddOverlays("[icon_state]_panel") + if(is_powered()) + AddOverlays(emissive_appearance(icon, "[icon_state]_lights")) + AddOverlays("[icon_state]_lights") + else if(processing) + AddOverlays(emissive_appearance(icon, "[icon_state]_lights_working")) + AddOverlays("[icon_state]_lights_working") + AddOverlays("biogen_stand") else - icon_state = "biogen-work" + AddOverlays("biogen_stand") return /obj/machinery/biogenerator/components_are_accessible(path) @@ -76,158 +88,196 @@ return SPAN_NOTICE("You must turn \the [src] off first.") return ..() -/obj/machinery/biogenerator/attackby(obj/item/O, mob/user) - if((. = component_attackby(O, user))) - return +/obj/machinery/biogenerator/examine(mob/user) + . = ..() if(processing) - to_chat(user, SPAN_NOTICE("\The [src] is currently processing.")) - if(istype(O, /obj/item/reagent_containers/glass)) - if(beaker) - to_chat(user, SPAN_NOTICE("The [src] is already loaded.")) - return TRUE - else if(user.unEquip(O, src)) + . += SPAN_NOTICE("[src] is currently processing.") + if(stored_plants >= max_storable_plants) + . += SPAN_NOTICE("[src] is full!") + +/obj/machinery/biogenerator/use_tool(obj/item/O, mob/living/user, list/click_params) + . = ..() + if(processing) + to_chat(user, "[src] is currently processing.") + return + + else if(istype(O, /obj/item/reagent_containers/glass)) + if(!beaker && user.unEquip(O, src)) beaker = O - state = BG_READY - updateUsrDialog() + update_icon() + SStgui.update_uis(src) return TRUE - if(ingredients >= capacity) - to_chat(user, SPAN_NOTICE("\The [src] is already full! Activate it.")) else if(istype(O, /obj/item/storage/plants)) - var/obj/item/storage/plants/P = O - var/hadPlants = 0 - for(var/obj/item/reagent_containers/food/snacks/grown/G in P.contents) - hadPlants = 1 - P.remove_from_storage(G, src, 1) //No UI updates until we are all done. - ingredients++ - if(ingredients >= capacity) - to_chat(user, SPAN_NOTICE("You fill \the [src] to its capacity.")) + if(length(stored_plants) >= max_storable_plants) + to_chat(user, "[src] can't hold any more plants!") + return + + var/obj/item/storage/plants/PB = O + for(var/obj/item/reagent_containers/food/snacks/grown/G in PB.contents) + if(length(stored_plants) >= max_storable_plants) break - P.finish_bulk_removal() //Now do the UI stuff once. - if(!hadPlants) - to_chat(user, SPAN_NOTICE("\The [P] has no produce inside.")) - else if(ingredients < capacity) - to_chat(user, SPAN_NOTICE("You empty \the [P] into \the [src].")) + PB.remove_from_storage(G, src) + stored_plants += G + + if(length(stored_plants) < max_storable_plants) + to_chat(user, "You empty [PB] into [src].") + else + to_chat(user, "You fill [src] to its capacity.") + SStgui.update_uis(src) + return TRUE - else if(!istype(O, /obj/item/reagent_containers/food/snacks/grown)) + else if(istype(O, /obj/item/reagent_containers/food/snacks/grown)) + if(length(stored_plants) >= max_storable_plants) + to_chat(user, "[src] can't hold any more plants!") + return + if(!user.unEquip(O)) + return + + O.forceMove(src) + stored_plants += O + to_chat(user, "You put [O] in [src].") + SStgui.update_uis(src) + return TRUE + else to_chat(user, SPAN_NOTICE("You cannot put this in \the [src].")) - else if(user.unEquip(O, src)) - ingredients++ - to_chat(user, SPAN_NOTICE("You put \the [O] in \the [src]")) - update_icon() -/** - * Display the NanoUI window for the vending machine. - * - * See NanoUI documentation for details. - */ -/obj/machinery/biogenerator/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) - user.set_machine(src) - var/list/data = list() - data["state"] = state - var/name - var/cost - var/type_name - var/path - if (state == BG_READY) - data["points"] = points - var/list/listed_types = list() - for(var/c_type =1 to length(products)) - type_name = products[c_type] - var/list/current_content = products[type_name] - var/list/listed_products = list() - for(var/c_product =1 to length(current_content)) - path = current_content[c_product] - var/atom/A = path - name = initial(A.name) - cost = current_content[path] - listed_products.Add(list(list( - "product_index" = c_product, - "name" = name, - "cost" = cost))) - listed_types.Add(list(list( - "type_name" = type_name, - "products" = listed_products))) - data["types"] = listed_types - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "biogenerator.tmpl", "Biogenerator", 440, 600) - ui.set_initial_data(data) +/obj/machinery/biogenerator/interface_interact(mob/user) + tgui_interact(user) + return TRUE + +/obj/machinery/biogenerator/tgui_state(mob/user) + return GLOB.default_state + +/obj/machinery/biogenerator/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Biogenerator") + ui.set_autoupdate(FALSE) ui.open() -/obj/machinery/biogenerator/OnTopic(user, href_list) - switch (href_list["action"]) +/obj/machinery/biogenerator/tgui_data(mob/user) + var/list/data = list() + + data["processing"] = processing + data["biomass"] = biomass + data["storedPlants"] = length(stored_plants) ? TRUE : FALSE + + if(beaker) + data["container"] = TRUE + data["containerContent"] = beaker.reagents.total_volume + data["containerMaxContent"] = beaker.reagents.maximum_volume + else + data["container"] = FALSE + + return data + +/obj/machinery/biogenerator/tgui_static_data(mob/user) + var/list/static_data = list() + + var/list/listed_types = list() + for(var/c_type = 1 to length(products)) + var/list/current_content = products[products[c_type]] + var/list/listed_products = list() + for(var/c_product = 1 to length(current_content)) + var/atom/thing = current_content[c_product] + listed_products += list(list( + "product_index" = c_product, + "name" = initial(thing.name), + "cost" = current_content[current_content[c_product]] + )) + listed_types += list(list( + "type_name" = products[c_type], + "products" = listed_products + )) + static_data["types"] = listed_types + + return static_data + +/obj/machinery/biogenerator/tgui_act(action, params) + if(..()) + return + . = TRUE + + switch(action) if("activate") activate() + return TRUE if("detach") - if(beaker) - beaker.dropInto(src.loc) - beaker = null - state = BG_NO_BEAKER - update_icon() + detach_container() + return TRUE + if("eject_plants") + eject_plants() + return TRUE if("create") - if (state == BG_PROCESSING) - return TOPIC_REFRESH - var/type = href_list["type"] - var/product_index = text2num(href_list["product_index"]) - if (isnull(products[type])) - return TOPIC_REFRESH + var/type = params["type"] + var/product_index = text2num(params["product_index"]) + var/amount = text2num(params["amount"]) + if(isnull(products[type])) + return FALSE var/list/sub_products = products[type] - if (product_index < 1 || product_index > length(sub_products)) - return TOPIC_REFRESH - create_product(type, sub_products[product_index]) - if("return") - state = BG_READY - return TOPIC_REFRESH - -/obj/machinery/biogenerator/interface_interact(mob/user) - ui_interact(user) - return TRUE + if(product_index < 1 || product_index > length(sub_products)) + return TRUE + create_product(type, sub_products[product_index], amount) + return TRUE /obj/machinery/biogenerator/proc/activate() - if (usr.stat) - return - if (stat) //MACHINE_STAT_NOPOWER etc - return + processing = TRUE + SStgui.update_uis(src) + update_icon() - var/S = 0 - for(var/obj/item/reagent_containers/food/snacks/grown/I in contents) - S += 5 - ingredients-- - if(I.reagents.get_reagent_amount(/datum/reagent/nutriment) < 0.1) - points += 1 - else points += I.reagents.get_reagent_amount(/datum/reagent/nutriment) * 10 * eat_eff - qdel(I) - if(S) - state = BG_PROCESSING - SSnano.update_uis(src) - update_icon() - playsound(src.loc, 'sound/machines/blender.ogg', 50, 1) - use_power_oneoff(S * 30) - sleep((S + 15) / eat_eff) - state = BG_READY - update_icon() - else - state = BG_EMPTY - return + var/plants_processed = length(stored_plants) + for(var/obj/item/reagent_containers/food/snacks/grown/plant as anything in stored_plants) + var/plant_biomass = plant.reagents.get_reagent_amount(/datum/reagent/nutriment) + biomass += max(plant_biomass, 0.1) * 10 * productivity + qdel(plant) -/obj/machinery/biogenerator/proc/create_product(type, path) - state = BG_PROCESSING - var/cost = products[type][path] - cost = round(cost/build_eff) - points -= cost - SSnano.update_uis(src) + stored_plants.Cut() + playsound(loc, 'sound/machines/blender.ogg', 50, 1) + use_power_oneoff(plants_processed * 50) + addtimer(CALLBACK(src, PROC_REF(end_processing)), (plants_processed * 5) / productivity) + +/obj/machinery/biogenerator/proc/end_processing() + processing = FALSE + SStgui.update_uis(src) update_icon() - sleep(30) - var/atom/movable/result = new path - result.dropInto(loc) - state = BG_COMPLETE + +/obj/machinery/biogenerator/proc/eject_plants() + for(var/obj/item/reagent_containers/food/snacks/grown/plant as anything in stored_plants) + plant.forceMove(get_turf(src)) + stored_plants.Cut() + SStgui.update_uis(src) + +/obj/machinery/biogenerator/proc/detach_container() + if(!beaker) + return + beaker.forceMove(get_turf(src)) + beaker = null update_icon() - return 1 +/obj/machinery/biogenerator/proc/create_product(type, path, amount) + processing = TRUE + SStgui.update_uis(src) + var/cost = products[type][path] + cost = round((cost * amount) / efficiency) + biomass -= cost + update_icon() + addtimer(CALLBACK(src, PROC_REF(drop_product), path, amount), (3 SECONDS * amount) / efficiency) + +/obj/machinery/biogenerator/proc/drop_product(path, amount) + if(ispath(path, /obj/item/stack)) + new path(get_turf(src), amount) + else + for(var/i in 1 to amount) + new path(get_turf(src)) + processing = FALSE + SStgui.update_uis(src) + update_icon() /obj/machinery/biogenerator/RefreshParts() ..() - build_eff = clamp(total_component_rating_of_type(/obj/item/stock_parts/manipulator), 1, 10) - eat_eff = clamp(total_component_rating_of_type(/obj/item/stock_parts/matter_bin), 1, 10) + efficiency = clamp(total_component_rating_of_type(/obj/item/stock_parts/manipulator), 1, 10) + productivity = clamp(total_component_rating_of_type(/obj/item/stock_parts/matter_bin), 1, 10) + +#undef BASE_MAX_STORABLE_PLANTS diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm index bf973c61eecf6..bb6747dc2fd7c 100644 --- a/code/game/machinery/bioprinter.dm +++ b/code/game/machinery/bioprinter.dm @@ -4,7 +4,7 @@ /obj/machinery/organ_printer name = "organ printer" desc = "It's a machine that prints organs." - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/machines/fabricators/organprinters.dmi' icon_state = "bioprinter" anchored = TRUE @@ -23,21 +23,29 @@ // These should be subtypes of /obj/item/organ var/list/products = list() +/obj/machinery/organ_printer/Initialize() + . = ..() + queue_icon_update() + /obj/machinery/organ_printer/state_transition(singleton/machine_construction/default/new_state) . = ..() if(istype(new_state)) updateUsrDialog() /obj/machinery/organ_printer/on_update_icon() - overlays.Cut() + ClearOverlays() if(panel_open) - overlays += "[icon_state]_panel_open" + AddOverlays("[icon_state]_panel") if(printing) - overlays += "[icon_state]_working" + AddOverlays(emissive_appearance(icon, "[icon_state]_lights_working")) + AddOverlays("[icon_state]_lights_working") + else if(is_powered()) + AddOverlays(emissive_appearance(icon, "[icon_state]_lights")) + AddOverlays("[icon_state]_lights") /obj/machinery/organ_printer/examine(mob/user) . = ..() - to_chat(user, SPAN_NOTICE("It is loaded with [stored_matter]/[max_stored_matter] matter units.")) + . += SPAN_NOTICE("It is loaded with [stored_matter]/[max_stored_matter] matter units.") /obj/machinery/organ_printer/RefreshParts() print_delay = initial(print_delay) @@ -136,7 +144,7 @@ /obj/machinery/organ_printer/robot/dismantle() if(stored_matter >= matter_amount_per_sheet) - new /obj/item/stack/material/steel(get_turf(src), Floor(stored_matter/matter_amount_per_sheet)) + new /obj/item/stack/material/steel(get_turf(src), floor(stored_matter/matter_amount_per_sheet)) return ..() /obj/machinery/organ_printer/robot/print_organ(choice) @@ -147,7 +155,7 @@ playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) return O -/obj/machinery/organ_printer/robot/attackby(obj/item/W, mob/user) +/obj/machinery/organ_printer/robot/use_tool(obj/item/W, mob/living/user, list/click_params) var/add_matter = 0 var/object_name = "[W]" @@ -155,35 +163,38 @@ if((max_stored_matter-stored_matter) >= matter_amount_per_sheet) var/obj/item/stack/S = W var/space_left = max_stored_matter - stored_matter - var/sheets_to_take = min(S.amount, Floor(space_left/matter_amount_per_sheet)) + var/sheets_to_take = min(S.amount, floor(space_left/matter_amount_per_sheet)) if(sheets_to_take > 0) add_matter = min(max_stored_matter - stored_matter, sheets_to_take*matter_amount_per_sheet) S.use(sheets_to_take) else to_chat(user, SPAN_WARNING("\The [src] is too full.")) + return TRUE - else if(istype(W,/obj/item/organ)) + if(istype(W,/obj/item/organ)) var/obj/item/organ/O = W if((O.organ_tag in products) && istype(O, products[O.organ_tag][1])) if(!BP_IS_ROBOTIC(O)) to_chat(user, SPAN_WARNING("\The [src] only accepts robotic organs.")) - return + return TRUE if(max_stored_matter == stored_matter) to_chat(user, SPAN_WARNING("\The [src] is too full.")) - else - var/recycle_worth = Floor(products[O.organ_tag][2] * 0.5) - if((max_stored_matter-stored_matter) >= recycle_worth) - add_matter = recycle_worth - qdel(O) + return TRUE + + var/recycle_worth = floor(products[O.organ_tag][2] * 0.5) + if((max_stored_matter-stored_matter) >= recycle_worth) + add_matter = recycle_worth + qdel(O) + return TRUE else to_chat(user, SPAN_WARNING("\The [src] does not know how to recycle \the [O].")) - return + return TRUE stored_matter += add_matter - if(add_matter) to_chat(user, SPAN_INFO("\The [src] processes \the [object_name]. Levels of stored matter now: [stored_matter]")) - return + return TRUE + return ..() // END ROBOT ORGAN PRINTER @@ -193,6 +204,7 @@ desc = "It's a machine that prints replacement organs." icon_state = "bioprinter" base_type = /obj/machinery/organ_printer/flesh + construct_state = /singleton/machine_construction/default/panel_closed/cannot_print machine_name = "bioprinter" machine_desc = "Bioprinters can create surrogate organs for many species by using a blood sample from the intended recipient. Uses meat for biological matter." // null amount means it will calculate the cost based on get_organ_cost() @@ -244,19 +256,20 @@ ..(user, choice) -/obj/machinery/organ_printer/flesh/attackby(obj/item/W, mob/user) +/obj/machinery/organ_printer/flesh/use_tool(obj/item/W, mob/living/user, list/click_params) // Load with matter for printing. for(var/path in amount_list) if(istype(W, path)) if(max_stored_matter == stored_matter) to_chat(user, SPAN_WARNING("\The [src] is too full.")) - return + return TRUE if(!user.unEquip(W)) - return + return TRUE var/add_matter = amount_list[path] ? amount_list[path] : 0.5*get_organ_cost(W) stored_matter += min(add_matter, max_stored_matter - stored_matter) to_chat(user, SPAN_INFO("\The [src] processes \the [W]. Levels of stored biomass now: [stored_matter]")) qdel(W) + return TRUE // DNA sample from syringe. if(istype(W,/obj/item/reagent_containers/syringe)) @@ -272,7 +285,10 @@ products = get_possible_products() to_chat(user, SPAN_INFO("You inject the blood sample into the bioprinter.")) return TRUE - to_chat(user, SPAN_NOTICE("\The [src] displays an error: no viable blood sample could be obtained from \the [W].")) + else + to_chat(user, SPAN_NOTICE("\The [src] displays an error: no viable blood sample could be obtained from \the [W].")) + return TRUE + return ..() /obj/machinery/organ_printer/flesh/proc/get_possible_products() diff --git a/code/game/machinery/bluespace_drive.dm b/code/game/machinery/bluespace_drive.dm index 1814bb1913f9f..0ef38957565d9 100644 --- a/code/game/machinery/bluespace_drive.dm +++ b/code/game/machinery/bluespace_drive.dm @@ -8,7 +8,6 @@ pixel_y = -32 pixel_x = -32 idle_power_usage = 15 KILOWATTS - construct_state = /singleton/machine_construction/default/panel_closed health_max = 1000 damage_hitsound = 'sound/machines/BSD_damaging.ogg' health_min_damage = 10 @@ -25,6 +24,12 @@ /// The token for the drive's idle loop var/drive_sound + ///Whether or not the BSD Instability event is active + var/instability_event_active = FALSE + + ///Chance to teleport someone to the interlude during a pulse. + var/interlude_chance = 55 + /obj/machinery/bluespacedrive/Destroy() QDEL_NULL(drive_sound) @@ -35,21 +40,21 @@ /obj/machinery/bluespacedrive/Initialize() . = ..() drive_sound = GLOB.sound_player.PlayLoopingSound(src, "\ref[src]", 'sound/machines/BSD_idle.ogg', 50, 7) - particles = new /particles/bluespace_torus - set_light(1, 5, 15, 10, COLOR_CYAN) + AddParticles(/particles/torus/bluespace) + set_light(15, 1, COLOR_CYAN) update_icon() /obj/machinery/bluespacedrive/on_update_icon() - overlays.Cut() + ClearOverlays() if (state & STATE_BROKEN) icon_state = "bsd_core_broken" else icon_state = "bsd_core" if (state & STATE_UNSTABLE) - overlays += "bsd_c_u" + AddOverlays("bsd_c_u") else - overlays += "bsd_c_s" + AddOverlays("bsd_c_s") /obj/machinery/bluespacedrive/emp_act(severity) @@ -80,7 +85,7 @@ /obj/machinery/bluespacedrive/on_death() playsound(loc, 'sound/machines/BSD_explosion.ogg', 100) visible_message(SPAN_DANGER(FONT_LARGE("\The [src] begins emitting an ear-splitting, horrible shrill! Get back!"))) - addtimer(new Callback(src, .proc/explode), 5 SECONDS) + addtimer(CALLBACK(src, PROC_REF(explode)), 5 SECONDS) ..() @@ -94,15 +99,17 @@ verbs -= verb update_icon() +/obj/machinery/bluespacedrive/use_grab(obj/item/grab/grab, list/click_params) + to_chat(grab.assailant, SPAN_WARNING("\The [src] pulls at \the [grab.affecting] but they're too heavy.")) + return TRUE -/obj/machinery/bluespacedrive/attackby(obj/item/item, mob/user) - if (istype(item, /obj/item/grab)) - var/obj/item/grab/grab = item - to_chat(user, SPAN_WARNING("\The [src] pulls at \the [grab.affecting] but they're too heavy.")) +/obj/machinery/bluespacedrive/use_tool(obj/item/item, mob/living/user, list/click_params) + if ((. = ..())) return + if (issilicon(user) || !user.unEquip(item, src)) to_chat(user, SPAN_WARNING("\The [src] pulls at \the [item] but it's attached to you.")) - return + return TRUE user.visible_message( SPAN_WARNING("\The [user] reaches out \a [item] to \the [src], warping briefly as it disappears in a flash of blue light, scintillating motes left behind."), SPAN_DANGER("You touch \the [src] with \the [item], the field buckling around it before retracting with a crackle as it leaves small, blue scintillas on your hand as you flinch away."), @@ -110,16 +117,16 @@ ) qdel(item) if (prob(5)) - playsound(loc, 'sound/items/eatfood.ogg', 40) //Yum + playsound(loc, 'sound/items/eatfood.ogg', 40) else playsound(loc, 'sound/machines/BSD_interact.ogg', 40) + return TRUE /obj/machinery/bluespacedrive/examine_damage_state(mob/user) - if (health_dead) + if (health_dead()) to_chat(user, SPAN_DANGER("Its field is completely destroyed, the core revealed under the arcing debris.")) return - var/damage_percentage = get_damage_percentage() switch (damage_percentage) if (0) @@ -130,18 +137,107 @@ to_chat(user, SPAN_WARNING("Its damaged field is twitching and crackling dangerously!")) else to_chat(user, SPAN_DANGER("Its unstable field is cracking and shifting dangerously, revealing the core inside briefly!")) + if (instability_event_active && !damage_percentage) + to_chat(user, SPAN_WARNING("The core seems to be pulsing and lashing out at the contaiment field, as if trying to break free.")) + + +/// Creates an expanding bluespace pulse on all z-levels connected to the drive +/obj/machinery/bluespacedrive/proc/do_pulse() + playsound(src, 'sound/effects/EMPulse.ogg', 100, TRUE) + var/datum/bubble_effect/bluespace_pulse/parent + for (var/level in GetConnectedZlevels(z)) + parent = new (x, y, level, 1, 1, parent, interlude_teleport_chance = interlude_chance) + + +/// Creates a blinding flash of light that will blind and deafen those in range, and change turfs to bluespace +/obj/machinery/bluespacedrive/proc/create_flash(change_turf, range) + playsound(src, "sound/effects/supermatter.ogg", 100, TRUE) + var/list/victims = list() + var/list/objs = list() + get_mobs_and_objs_in_view_fast(loc, range, victims, objs) + for (var/mob/living/living in victims) + if (living.client) + to_chat(living, SPAN_DANGER(FONT_LARGE("The Drive's field cracks open briefly, emitting a blinding flash of blue light and a deafenening screech!"))) + living.flash_eyes(FLASH_PROTECTION_MAJOR) + living.Stun(3) + living.mod_confused(15) + living.ear_damage += rand(0, 5) + living.ear_deaf = max(living.ear_deaf, 15) + if (!change_turf) + return + + for(var/turf/simulated/floor/floor in RANGE_TURFS(src, range)) + if (prob(25)) + continue + floor.ChangeTurf(/turf/simulated/floor/bluespace) -/particles/bluespace_torus - width = 700 - height = 700 - count = 2700 - spawning = 260 - lifespan = 0.75 SECONDS - fade = 0.95 SECONDS - position = generator("circle", 16, 24, NORMAL_RAND) - velocity = generator("circle", -6, 6, NORMAL_RAND) - friction = 0.15 - gradient = list(0, COLOR_WHITE, 0.75, COLOR_BLUE_LIGHT) - color_change = 0.125 - drift = generator("vector", list(-0.2, -0.2), list(0.2, 0.2)) +/datum/bubble_effect/bluespace_pulse + ///List of mobs that can be swapped around when the pulse hits + var/list/mob/living/mobs_to_switch = list() + var/interlude_teleport_chance = 0 + +/datum/bubble_effect/bluespace_pulse/New(interlude_teleport_chance = 50) + ..() + src.interlude_teleport_chance = interlude_teleport_chance + START_PROCESSING(SSfastprocess, src) + var/list/zlevels = GetConnectedZlevels(z) + for (var/mob/living/L as anything in GLOB.alive_mobs) + if (!(L.z in zlevels)) + continue + if (istype(L, /mob/living/exosuit)) + continue + mobs_to_switch += L + + +/datum/bubble_effect/bluespace_pulse/Destroy() + STOP_PROCESSING(SSfastprocess, src) + return ..() + + +/datum/bubble_effect/bluespace_pulse/Process() + if (radius > 50) + qdel(src) + return PROCESS_KILL + Tick() + + +/datum/bubble_effect/bluespace_pulse/TurfEffect(turf/turf) + if (TICK_CHECK) + return TRUE + if (radius <= 20) + new /obj/temporary (turf, 0.2 SECONDS, 'icons/effects/effects.dmi', "cyan_sparkles") + var/obj/machinery/light/light = locate() in turf + if (light && prob(20)) + light.broken() + var/mob/living/being = locate() in turf + if (being && prob(50)) + //swap places with another mob + var/list/zlevels = GetConnectedZlevels(being.z) + for (var/mob/living/mob as anything in mobs_to_switch) + if (!(mob.z in zlevels)) + continue + + if (GLOB.using_map.use_bluespace_interlude && prob(interlude_teleport_chance)) + if (istype(mob, /mob/living/simple_animal) && prob(80)) + return + var/turf/T = pick_area_turf_in_connected_z_levels( + list(GLOBAL_PROC_REF(is_not_space_area)), + list(GLOBAL_PROC_REF(not_turf_contains_dense_objects), GLOBAL_PROC_REF(IsTurfAtmosSafe)), + zlevels[1]) + if (!T) + return + GLOB.using_map.do_interlude_teleport(mob, T, rand(1, 2.5) MINUTES) + return + if (mob != being) + var/source_position = being.loc + var/other_position = mob.loc + do_teleport(mob, source_position) + do_teleport(being, other_position) + mobs_to_switch -= mob + mobs_to_switch -= being + to_chat(mob, SPAN_DANGER("A wave of energy washes over you, and you find yourself somewhere else!")) + to_chat(being, SPAN_DANGER("A wave of energy washes over you, and you find yourself somewhere else!")) + return + else + to_chat(being, SPAN_WARNING("A wave of energy washes over you, giving you a strange and uneasy feeling...")) diff --git a/code/game/machinery/bluespacerelay.dm b/code/game/machinery/bluespacerelay.dm index b40887178c3c9..1b31ba481a543 100644 --- a/code/game/machinery/bluespacerelay.dm +++ b/code/game/machinery/bluespacerelay.dm @@ -1,7 +1,7 @@ /obj/machinery/bluespacerelay - name = "Emergency Bluespace Relay" + name = "emergency bluespace relay" desc = "This sends messages through bluespace! Wow!" - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/machines/telecomms.dmi' icon_state = "bspacerelay" anchored = TRUE density = TRUE @@ -11,8 +11,26 @@ machine_name = "emergency bluespace relay" machine_desc = "Used to instantly send messages across vast distances. An emergency relay is required to directly contact Expeditionary Command through crisis channels." + +/obj/machinery/bluespacerelay/Initialize() + . = ..() + update_icon() + + +/obj/machinery/bluespacerelay/operable() + return !inoperable(MACHINE_STAT_EMPED) + + /obj/machinery/bluespacerelay/on_update_icon() - if(inoperable()) - icon_state = "[initial(icon_state)]_off" - else - icon_state = initial(icon_state) + ClearOverlays() + if(operable()) + AddOverlays(list( + "bspacerelay_on", + emissive_appearance(icon, "bspacerelay_on") + )) + if(panel_open) + AddOverlays("bspacerelay_panel") + + +/obj/machinery/bluespacerelay/Process() + update_icon() diff --git a/code/game/machinery/body_scanner.dm b/code/game/machinery/body_scanner.dm new file mode 100644 index 0000000000000..57745486b156e --- /dev/null +++ b/code/game/machinery/body_scanner.dm @@ -0,0 +1,176 @@ +// Pretty much everything here is stolen from the dna scanner FYI +/obj/machinery/bodyscanner + var/mob/living/carbon/human/occupant + name = "body scanner" + desc = "A large full-body scanning machine that provides a complete physical assessment of a patient placed inside. Operated using an adjacent console." + icon = 'icons/obj/machines/medical/bodyscanner.dmi' + icon_state = "body_scanner" + density = TRUE + anchored = TRUE + idle_power_usage = 60 + active_power_usage = 10000 //10 kW. It's a big all-body scanner. + construct_state = /singleton/machine_construction/default/panel_closed + uncreated_component_parts = null + stat_immune = 0 + + machine_name = "body scanner" + machine_desc = "A full-body scanning suite that provides a complete health assessment of a patient placed inside. Requires an adjacent console to operate." + +/obj/machinery/bodyscanner/examine(mob/user, distance, is_adjacent) + . = ..() + if(occupant && is_adjacent) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(examinate), user, occupant), 0.1 SECONDS) + +/obj/machinery/bodyscanner/relaymove(mob/user) + ..() + go_out() + user.visible_message( + SPAN_NOTICE("\The [user] climbs out of \the [initial(name)]."), + SPAN_NOTICE("You climb out of \the [initial(name)].") + ) + +/obj/machinery/bodyscanner/verb/eject() + set src in oview(1) + set category = "Object" + set name = "Eject Body Scanner" + + if (usr.incapacitated()) + return + usr.visible_message( + SPAN_NOTICE("\The [usr] opens \the [src]."), + SPAN_NOTICE("You eject \the [initial(name)]'s occupant."), + SPAN_ITALIC("You hear a pressurized hiss, then a sound like glass creaking.") + ) + go_out() + add_fingerprint(usr) + +/obj/machinery/bodyscanner/AltClick(mob/user) + if(CanPhysicallyInteract(user)) + eject() + return TRUE + return ..() + +/obj/machinery/bodyscanner/verb/move_inside() + set src in oview(1) + set category = "Object" + set name = "Enter Body Scanner" + + if(!user_can_move_target_inside(usr,usr)) + return + usr.visible_message( + SPAN_NOTICE("\The [usr] climbs into \the [src]."), + SPAN_NOTICE("You climb into \the [src]."), + SPAN_ITALIC("You hear footsteps on metal, cloth rustling, and then a pressurized hiss.") + ) + move_target_inside(usr,usr) + usr.pulling = null + usr.client.perspective = EYE_PERSPECTIVE + usr.client.eye = src + +/obj/machinery/bodyscanner/proc/drop_contents() + for(var/obj/O in (contents - component_parts)) + O.dropInto(loc) + +/obj/machinery/bodyscanner/proc/go_out() + if(!occupant) + return + drop_contents() + if (occupant.client) + occupant.client.eye = occupant.client.mob + occupant.client.perspective = MOB_PERSPECTIVE + occupant.dropInto(loc) + occupant = null + update_use_power(POWER_USE_IDLE) + update_icon() + SetName(initial(name)) + +/obj/machinery/bodyscanner/state_transition(singleton/machine_construction/default/new_state) + . = ..() + if(istype(new_state)) + updateUsrDialog() + go_out() + +/obj/machinery/bodyscanner/proc/move_target_inside(mob/target, mob/user) + target.forceMove(src) + occupant = target + + update_use_power(POWER_USE_ACTIVE) + update_icon() + drop_contents() + SetName("[name] ([occupant])") + target.remove_grabs_and_pulls() + target.stop_pulling() + if (user != target) + add_fingerprint(target) //Add fingerprints of the person stuffed in. + +/obj/machinery/bodyscanner/on_update_icon() + ClearOverlays() + if(panel_open) + AddOverlays("[icon_state]_panel") + if(!occupant) + icon_state = "body_scanner" + else if(inoperable()) + icon_state = "body_scanner_open" + else + icon_state = "body_scanner_working" + +/obj/machinery/bodyscanner/user_can_move_target_inside(mob/target, mob/user) + if (occupant) + to_chat(user, SPAN_WARNING("\The [src] is already occupied!")) + return FALSE + return ..() + +/obj/machinery/bodyscanner/MouseDrop_T(mob/target, mob/user) + if (!CanMouseDrop(target, user) || !ismob(target)) + return + if (!user_can_move_target_inside(target, user)) + return + if (user == target) + user.visible_message( + SPAN_NOTICE("\The [usr] climbs into \the [src]."), + SPAN_NOTICE("You climb into \the [src]."), + SPAN_ITALIC("You hear metal clanking, then a pressurized hiss.") + ) + move_target_inside(target, user) + else + user.visible_message( + SPAN_NOTICE("\The [user] begins placing \the [target] into \the [src]."), + SPAN_NOTICE("You start placing \the [target] into \the [src].") + ) + add_fingerprint(user) + if (!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) + return + if (!user_can_move_target_inside(target, user)) + return + move_target_inside(target,user) + +/obj/machinery/bodyscanner/use_grab(obj/item/grab/grab, list/click_params) + MouseDrop_T(grab.affecting, grab.assailant) + return TRUE + +/obj/machinery/bodyscanner/ex_act(severity) + switch(severity) + if(EX_ACT_DEVASTATING) + for(var/atom/movable/A as mob|obj in src) + A.dropInto(loc) + A.ex_act(severity) + qdel(src) + if(EX_ACT_HEAVY) + if (prob(50)) + for(var/atom/movable/A as mob|obj in src) + A.dropInto(loc) + A.ex_act(severity) + qdel(src) + if(EX_ACT_LIGHT) + if (prob(25)) + for(var/atom/movable/A as mob|obj in src) + A.dropInto(loc) + A.ex_act(severity) + qdel(src) + + +/obj/machinery/bodyscanner/Destroy() + if(occupant) + occupant.dropInto(loc) + occupant = null + . = ..() diff --git a/code/game/machinery/body_scanner_console.dm b/code/game/machinery/body_scanner_console.dm new file mode 100644 index 0000000000000..247118d4b8454 --- /dev/null +++ b/code/game/machinery/body_scanner_console.dm @@ -0,0 +1,171 @@ +/obj/machinery/body_scanconsole + var/obj/machinery/bodyscanner/connected + var/stored_scan_subject + name = "body scanner console" + desc = "A small terminal used to operate an adjacent body scanner, view the results of a scan, and send those results to connected medical displays." + icon = 'icons/obj/machines/medical/bodyscanner.dmi' + icon_state = "body_scanner_console" + density = FALSE + anchored = TRUE + construct_state = /singleton/machine_construction/default/panel_closed + uncreated_component_parts = null + stat_immune = 0 + + machine_name = "body scanner console" + machine_desc = "A small touchscreen terminal, used to operate an adjacent body scanner, as well as viewing and manipulating its readouts." + + var/list/connected_displays = list() + var/list/data = list() + var/scan_data + +/obj/machinery/body_scanconsole/Initialize() + . = ..() + FindScanner() + update_icon() + +/obj/machinery/body_scanconsole/on_update_icon() + ClearOverlays() + if(panel_open) + AddOverlays("[icon_state]_panel") + if(!connected?.inoperable()) + AddOverlays(emissive_appearance(icon, "[icon_state]_lights")) + AddOverlays("[icon_state]_lights") + +/obj/machinery/body_scanconsole/ex_act(severity) + + switch(severity) + if(EX_ACT_DEVASTATING) + qdel(src) + if(EX_ACT_HEAVY) + if (prob(50)) + qdel(src) + +/obj/machinery/body_scanconsole/proc/FindScanner() + for(var/D in GLOB.cardinal) + connected = locate(/obj/machinery/bodyscanner, get_step(src, D)) + if(connected) + break + GLOB.destroyed_event.register(connected, src, PROC_REF(unlink_scanner)) + update_icon() + +/obj/machinery/body_scanconsole/proc/unlink_scanner(obj/machinery/bodyscanner/scanner) + GLOB.destroyed_event.unregister(scanner, src, PROC_REF(unlink_scanner)) + connected = null + update_icon() + +/obj/machinery/body_scanconsole/proc/FindDisplays() + for(var/obj/machinery/body_scan_display/D as anything in SSmachines.get_machinery_of_type(/obj/machinery/body_scan_display)) + if (AreConnectedZLevels(D.z, z)) + connected_displays += D + GLOB.destroyed_event.register(D, src, PROC_REF(remove_display)) + return !!length(connected_displays) + +/obj/machinery/body_scanconsole/attack_hand(mob/user) + if(!connected || connected.inoperable()) + to_chat(user, SPAN_WARNING("This console is not connected to a functioning body scanner.")) + return TRUE + return ..() + +/obj/machinery/body_scanconsole/interface_interact(mob/user) + ui_interact(user) + return TRUE + +/obj/machinery/body_scanconsole/CanUseTopic(mob/user) + if(!connected) + return STATUS_CLOSE + return ..() + +/obj/machinery/body_scanconsole/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) + if(connected && connected.occupant) + data["scanEnabled"] = TRUE + if(ishuman(connected.occupant)) + data["isCompatible"] = TRUE + else + data["isCompatible"] = FALSE + else + data["scanEnabled"] = FALSE + + if(!data["scan"]) + data["html_scan_header"] = "
No scan loaded.
" + data["html_scan_health"] = " " + data["html_scan_body"] = " " + else + data["html_scan_header"] = display_medical_data_header(data["scan"], user.get_skill_value(SKILL_MEDICAL)) + data["html_scan_health"] = display_medical_data_health(data["scan"], user.get_skill_value(SKILL_MEDICAL)) + data["html_scan_body"] = display_medical_data_body(data["scan"], user.get_skill_value(SKILL_MEDICAL)) + + ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "body_scanner.tmpl", "Body Scanner", 600, 800) + ui.set_initial_data(data) + ui.open() + +/obj/machinery/body_scanconsole/OnTopic(mob/user, href_list) + if(href_list["scan"]) + if (!connected.occupant) + to_chat(user, SPAN_WARNING("[icon2html(src, user)]The body scanner is empty.")) + return TOPIC_REFRESH + if (!istype(connected.occupant)) + to_chat(user, SPAN_WARNING("[icon2html(src, user)]The body scanner cannot scan that lifeform.")) + return TOPIC_REFRESH + data["printEnabled"] = TRUE + data["eraseEnabled"] = TRUE + data["pushEnabled"] = TRUE + data["scan"] = connected.occupant.get_raw_medical_data(TRUE) + data["html_scan_header"] = display_medical_data_header(data["scan"], user.get_skill_value(SKILL_MEDICAL)) + data["html_scan_health"] = display_medical_data_health(data["scan"], user.get_skill_value(SKILL_MEDICAL)) + data["html_scan_body"] = display_medical_data_body(data["scan"], user.get_skill_value(SKILL_MEDICAL)) + + stored_scan_subject = connected.occupant + user.visible_message( + SPAN_NOTICE("\The [user] performs a scan of \the [connected.occupant] using \the [initial(connected.name)]."), + SPAN_NOTICE("You run a full-body diagnostic of \the [connected.occupant] using \the [initial(connected.name)]."), + SPAN_ITALIC("You hear a series of beeps, followed by a deep humming sound.") + ) + playsound(connected.loc, 'sound/machines/medbayscanner.ogg', 50) + return TOPIC_REFRESH + + if (href_list["print"]) + if (!data["scan"]) + to_chat(user, SPAN_WARNING("[icon2html(src, user)]Error: No scan stored.")) + return TOPIC_REFRESH + var/list/scan = data["scan"] + new /obj/item/paper/bodyscan(loc, "Printout error.", "Body scan report - [stored_scan_subject]", scan.Copy()) + return TOPIC_REFRESH + + if(href_list["push"]) + if(!length(connected_displays) && !FindDisplays()) + to_chat(user, SPAN_WARNING("[icon2html(src, user)]Error: No configured displays detected.")) + return TOPIC_REFRESH + for(var/obj/machinery/body_scan_display/D in connected_displays) + D.add_new_scan(data["scan"]) + user.visible_message( + SPAN_NOTICE("\The [user] keys a command into \the [src]."), + SPAN_NOTICE("The console beeps, confirming it has successfully sent the scan to the connected displays."), + SPAN_ITALIC("You hear someone typing on a terminal, then a beep.") + ) + return TOPIC_REFRESH + + if(href_list["erase"]) + data["scan"] = null + data["html_scan"] = null + stored_scan_subject = null + data["eraseEnabled"] = FALSE + data["printEnabled"] = FALSE + data["pushEnabled"] = FALSE + return TOPIC_REFRESH + +/obj/machinery/body_scanconsole/state_transition(singleton/machine_construction/default/new_state) + . = ..() + if(istype(new_state)) + updateUsrDialog() + +/obj/machinery/body_scanconsole/proc/remove_display(obj/machinery/body_scan_display/display) + connected_displays -= display + GLOB.destroyed_event.unregister(display, src, PROC_REF(remove_display)) + +/obj/machinery/body_scanconsole/Destroy() + . = ..() + for(var/D in connected_displays) + remove_display(D) + unlink_scanner(connected) diff --git a/code/game/machinery/body_scanner_display.dm b/code/game/machinery/body_scanner_display.dm new file mode 100644 index 0000000000000..d2857dbaf8511 --- /dev/null +++ b/code/game/machinery/body_scanner_display.dm @@ -0,0 +1,65 @@ +/obj/machinery/body_scan_display + name = "body scan display" + desc = "A wall-mounted display linked to a body scanner." + icon = 'icons/obj/machines/modular_telescreen.dmi' + icon_state = "operating" + var/icon_state_unpowered = "telescreen" + anchored = TRUE + density = FALSE + idle_power_usage = 75 + active_power_usage = 300 + construct_state = /singleton/machine_construction/default/panel_closed + uncreated_component_parts = null + stat_immune = 0 + w_class = ITEM_SIZE_HUGE + + machine_name = "body scanner display" + machine_desc = "Receives body scans from a linked body scanner and allows them to be viewed remotely." + + var/list/bodyscans = list() + var/selected = 0 + +/obj/machinery/body_scan_display/proc/add_new_scan(list/scan) + bodyscans += list(scan.Copy()) + updateUsrDialog() + +/obj/machinery/body_scan_display/OnTopic(mob/user as mob, href_list) + if(href_list["view"]) + var/selection = text2num(href_list["view"]) + if(is_valid_index(selection, bodyscans)) + selected = selection + return TOPIC_REFRESH + return TOPIC_HANDLED + if(href_list["delete"]) + var/selection = text2num(href_list["delete"]) + if(!is_valid_index(selection, bodyscans)) + return TOPIC_HANDLED + if(selected == selection) + selected = 0 + else if(selected > selection) + selected-- + bodyscans -= list(bodyscans[selection]) + return TOPIC_REFRESH + +/obj/machinery/body_scan_display/interface_interact(user) + ui_interact(user) + return TRUE + +/obj/machinery/body_scan_display/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open=1) + var/list/data = list() + data["scans"] = bodyscans + data["selected"] = selected + + if(selected > 0) + data["scan_header"] = display_medical_data_header(bodyscans[selected], user.get_skill_value(SKILL_MEDICAL)) + data["scan_health"] = display_medical_data_health(bodyscans[selected], user.get_skill_value(SKILL_MEDICAL)) + data["scan_body"] = display_medical_data_body(bodyscans[selected], user.get_skill_value(SKILL_MEDICAL)) + else + data["scan_header"] = " " + data["scan_health"] = " " + data["scan_body"] = " " + ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "body_scan_display.tmpl", "Body Scan Display Console", 600, 800) + ui.set_initial_data(data) + ui.open() diff --git a/code/game/machinery/bodyscanner.dm b/code/game/machinery/bodyscanner.dm deleted file mode 100644 index 59459fc23df64..0000000000000 --- a/code/game/machinery/bodyscanner.dm +++ /dev/null @@ -1,187 +0,0 @@ -// Pretty much everything here is stolen from the dna scanner FYI -/obj/machinery/bodyscanner - var/mob/living/carbon/human/occupant - var/locked - name = "body scanner" - desc = "A large full-body scanning machine that provides a complete physical assessment of a patient placed inside. Operated using an adjacent console." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "body_scanner_0" - density = TRUE - anchored = TRUE - idle_power_usage = 60 - active_power_usage = 10000 //10 kW. It's a big all-body scanner. - construct_state = /singleton/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - machine_name = "body scanner" - machine_desc = "A full-body scanning suite that provides a complete health assessment of a patient placed inside. Requires an adjacent console to operate." - -/obj/machinery/bodyscanner/examine(mob/user) - . = ..() - if (occupant && user.Adjacent(src)) - occupant.examine(arglist(args)) - -/obj/machinery/bodyscanner/relaymove(mob/user) - ..() - go_out() - user.visible_message( - SPAN_NOTICE("\The [user] climbs out of \the [initial(name)]."), - SPAN_NOTICE("You climb out of \the [initial(name)].") - ) - -/obj/machinery/bodyscanner/verb/eject() - set src in oview(1) - set category = "Object" - set name = "Eject Body Scanner" - - if (usr.incapacitated()) - return - usr.visible_message( - SPAN_NOTICE("\The [usr] opens \the [src]."), - SPAN_NOTICE("You eject \the [initial(name)]'s occupant."), - SPAN_ITALIC("You hear a pressurized hiss, then a sound like glass creaking.") - ) - go_out() - add_fingerprint(usr) - -/obj/machinery/bodyscanner/AltClick(mob/user) - if(CanPhysicallyInteract(user)) - eject() - else - ..() - -/obj/machinery/bodyscanner/verb/move_inside() - set src in oview(1) - set category = "Object" - set name = "Enter Body Scanner" - - if(!user_can_move_target_inside(usr,usr)) - return - usr.visible_message( - SPAN_NOTICE("\The [usr] climbs into \the [src]."), - SPAN_NOTICE("You climb into \the [src]."), - SPAN_ITALIC("You hear footsteps on metal, cloth rustling, and then a pressurized hiss.") - ) - move_target_inside(usr,usr) - usr.pulling = null - usr.client.perspective = EYE_PERSPECTIVE - usr.client.eye = src - -/obj/machinery/bodyscanner/proc/drop_contents() - for(var/obj/O in (contents - component_parts)) - O.dropInto(loc) - -/obj/machinery/bodyscanner/proc/go_out() - if ((!( occupant ) || locked)) - return - drop_contents() - if (occupant.client) - occupant.client.eye = occupant.client.mob - occupant.client.perspective = MOB_PERSPECTIVE - occupant.dropInto(loc) - occupant = null - update_use_power(POWER_USE_IDLE) - update_icon() - SetName(initial(name)) - -/obj/machinery/bodyscanner/state_transition(singleton/machine_construction/default/new_state) - . = ..() - if(istype(new_state)) - updateUsrDialog() - -/obj/machinery/bodyscanner/attackby(obj/item/grab/normal/G, mob/user) - if(istype(G)) - var/mob/M = G.affecting - if(!user_can_move_target_inside(M, user)) - return - move_target_inside(M,user) - qdel(G) - return TRUE - return ..() - -/obj/machinery/bodyscanner/proc/user_can_move_target_inside(mob/target, mob/user) - if(!istype(user) || !istype(target)) - return FALSE - if(user.incapacitated()) - return FALSE - if(!target.simulated) - return FALSE - if(occupant) - to_chat(user, SPAN_WARNING("\The [src] is already occupied!")) - return FALSE - if(target.abiotic()) - to_chat(user, SPAN_WARNING("[user == target ? "You" : "[target]"] can't enter \the [src] while wearing abiotic items.")) - return FALSE - if(target.buckled) - to_chat(user, SPAN_WARNING("Unbuckle [user == target ? "yourself" : "\the [target]"] before attempting to [user == target ? "enter \the [src]" : "move them"].")) - return FALSE - return TRUE - -/obj/machinery/bodyscanner/proc/move_target_inside(mob/target, mob/user) - target.forceMove(src) - occupant = target - - update_use_power(POWER_USE_ACTIVE) - update_icon() - drop_contents() - SetName("[name] ([occupant])") - - add_fingerprint(user) - -/obj/machinery/bodyscanner/on_update_icon() - if(!occupant) - icon_state = "body_scanner_0" - else if(inoperable()) - icon_state = "body_scanner_1" - else - icon_state = "body_scanner_2" - -//Like grap-put, but for mouse-drop. -/obj/machinery/bodyscanner/MouseDrop_T(mob/target, mob/user) - if(!CanMouseDrop(target, user) || !istype(target)) - return FALSE - if(!user_can_move_target_inside(target, user)) - return - if (user == target) - user.visible_message( - SPAN_NOTICE("\The [usr] climbs into \the [src]."), - SPAN_NOTICE("You climb into \the [src]."), - SPAN_ITALIC("You hear metal clanking, then a pressurized hiss.") - ) - move_target_inside(target, user) - return - user.visible_message( - SPAN_NOTICE("\The [user] begins placing \the [target] into \the [src]."), - SPAN_NOTICE("You start placing \the [target] into \the [src].") - ) - if(!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE) || !user_can_move_target_inside(target, user)) - return - move_target_inside(target,user) - -/obj/machinery/bodyscanner/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - for(var/atom/movable/A as mob|obj in src) - A.dropInto(loc) - A.ex_act(severity) - qdel(src) - if(EX_ACT_HEAVY) - if (prob(50)) - for(var/atom/movable/A as mob|obj in src) - A.dropInto(loc) - A.ex_act(severity) - qdel(src) - if(EX_ACT_LIGHT) - if (prob(25)) - for(var/atom/movable/A as mob|obj in src) - A.dropInto(loc) - A.ex_act(severity) - qdel(src) - - -/obj/machinery/bodyscanner/Destroy() - if(occupant) - occupant.dropInto(loc) - occupant = null - . = ..() diff --git a/code/game/machinery/bodyscanner_console.dm b/code/game/machinery/bodyscanner_console.dm deleted file mode 100644 index 9bb96989cd473..0000000000000 --- a/code/game/machinery/bodyscanner_console.dm +++ /dev/null @@ -1,166 +0,0 @@ -/obj/machinery/body_scanconsole - var/obj/machinery/bodyscanner/connected - var/stored_scan_subject - name = "body scanner console" - desc = "A small terminal used to operate an adjacent body scanner, view the results of a scan, and send those results to connected medical displays." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "body_scannerconsole" - density = FALSE - anchored = TRUE - construct_state = /singleton/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - machine_name = "body scanner console" - machine_desc = "A small touchscreen terminal, used to operate an adjacent body scanner, as well as viewing and manipulating its readouts." - - var/list/connected_displays = list() - var/list/data = list() - var/scan_data - -/obj/machinery/body_scanconsole/Initialize() - . = ..() - FindScanner() - -/obj/machinery/body_scanconsole/on_update_icon() - if(inoperable()) - icon_state = "body_scannerconsole-p" - else - icon_state = initial(icon_state) - -/obj/machinery/body_scanconsole/ex_act(severity) - - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - -/obj/machinery/body_scanconsole/proc/FindScanner() - for(var/D in GLOB.cardinal) - connected = locate(/obj/machinery/bodyscanner, get_step(src, D)) - if(connected) - break - GLOB.destroyed_event.register(connected, src, .proc/unlink_scanner) - -/obj/machinery/body_scanconsole/proc/unlink_scanner(obj/machinery/bodyscanner/scanner) - GLOB.destroyed_event.unregister(scanner, src, .proc/unlink_scanner) - connected = null - -/obj/machinery/body_scanconsole/proc/FindDisplays() - for(var/obj/machinery/body_scan_display/D in SSmachines.machinery) - if (AreConnectedZLevels(D.z, z)) - connected_displays += D - GLOB.destroyed_event.register(D, src, .proc/remove_display) - return !!length(connected_displays) - -/obj/machinery/body_scanconsole/attack_hand(mob/user) - if(!connected || connected.inoperable()) - to_chat(user, SPAN_WARNING("This console is not connected to a functioning body scanner.")) - return TRUE - return ..() - -/obj/machinery/body_scanconsole/interface_interact(mob/user) - ui_interact(user) - return TRUE - -/obj/machinery/body_scanconsole/CanUseTopic(mob/user) - if(!connected) - return STATUS_CLOSE - return ..() - -/obj/machinery/body_scanconsole/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) - if(connected && connected.occupant) - data["scanEnabled"] = TRUE - if(ishuman(connected.occupant)) - data["isCompatible"] = TRUE - else - data["isCompatible"] = FALSE - else - data["scanEnabled"] = FALSE - - if(!data["scan"]) - data["html_scan_header"] = "
No scan loaded.
" - data["html_scan_health"] = " " - data["html_scan_body"] = " " - else - data["html_scan_header"] = display_medical_data_header(data["scan"], user.get_skill_value(SKILL_MEDICAL)) - data["html_scan_health"] = display_medical_data_health(data["scan"], user.get_skill_value(SKILL_MEDICAL)) - data["html_scan_body"] = display_medical_data_body(data["scan"], user.get_skill_value(SKILL_MEDICAL)) - - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "body_scanner.tmpl", "Body Scanner", 600, 800) - ui.set_initial_data(data) - ui.open() - -/obj/machinery/body_scanconsole/OnTopic(mob/user, href_list) - if(href_list["scan"]) - if (!connected.occupant) - to_chat(user, SPAN_WARNING("[icon2html(src, user)]The body scanner is empty.")) - return TOPIC_REFRESH - if (!istype(connected.occupant)) - to_chat(user, SPAN_WARNING("[icon2html(src, user)]The body scanner cannot scan that lifeform.")) - return TOPIC_REFRESH - data["printEnabled"] = TRUE - data["eraseEnabled"] = TRUE - data["pushEnabled"] = TRUE - data["scan"] = connected.occupant.get_raw_medical_data(TRUE) - data["html_scan_header"] = display_medical_data_header(data["scan"], user.get_skill_value(SKILL_MEDICAL)) - data["html_scan_health"] = display_medical_data_health(data["scan"], user.get_skill_value(SKILL_MEDICAL)) - data["html_scan_body"] = display_medical_data_body(data["scan"], user.get_skill_value(SKILL_MEDICAL)) - - stored_scan_subject = connected.occupant - user.visible_message( - SPAN_NOTICE("\The [user] performs a scan of \the [connected.occupant] using \the [initial(connected.name)]."), - SPAN_NOTICE("You run a full-body diagnostic of \the [connected.occupant] using \the [initial(connected.name)]."), - SPAN_ITALIC("You hear a series of beeps, followed by a deep humming sound.") - ) - playsound(connected.loc, 'sound/machines/medbayscanner.ogg', 50) - return TOPIC_REFRESH - - if (href_list["print"]) - if (!data["scan"]) - to_chat(user, SPAN_WARNING("[icon2html(src, user)]Error: No scan stored.")) - return TOPIC_REFRESH - var/list/scan = data["scan"] - new /obj/item/paper/bodyscan(loc, "Printout error.", "Body scan report - [stored_scan_subject]", scan.Copy()) - return TOPIC_REFRESH - - if(href_list["push"]) - if(!length(connected_displays) && !FindDisplays()) - to_chat(user, SPAN_WARNING("[icon2html(src, user)]Error: No configured displays detected.")) - return TOPIC_REFRESH - for(var/obj/machinery/body_scan_display/D in connected_displays) - D.add_new_scan(data["scan"]) - user.visible_message( - SPAN_NOTICE("\The [user] keys a command into \the [src]."), - SPAN_NOTICE("The console beeps, confirming it has successfully sent the scan to the connected displays."), - SPAN_ITALIC("You hear someone typing on a terminal, then a beep.") - ) - return TOPIC_REFRESH - - if(href_list["erase"]) - data["scan"] = null - data["html_scan"] = null - stored_scan_subject = null - data["eraseEnabled"] = FALSE - data["printEnabled"] = FALSE - data["pushEnabled"] = FALSE - return TOPIC_REFRESH - -/obj/machinery/body_scanconsole/state_transition(singleton/machine_construction/default/new_state) - . = ..() - if(istype(new_state)) - updateUsrDialog() - -/obj/machinery/body_scanconsole/proc/remove_display(obj/machinery/body_scan_display/display) - connected_displays -= display - GLOB.destroyed_event.unregister(display, src, .proc/remove_display) - -/obj/machinery/body_scanconsole/Destroy() - . = ..() - for(var/D in connected_displays) - remove_display(D) - unlink_scanner(connected) diff --git a/code/game/machinery/bodyscanner_display.dm b/code/game/machinery/bodyscanner_display.dm deleted file mode 100644 index 9003743435f69..0000000000000 --- a/code/game/machinery/bodyscanner_display.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/machinery/body_scan_display - name = "Body Scan Display" - desc = "A wall-mounted display linked to a body scanner." - icon = 'icons/obj/modular_telescreen.dmi' - icon_state = "operating" - var/icon_state_unpowered = "telescreen" - anchored = TRUE - density = FALSE - idle_power_usage = 75 - active_power_usage = 300 - construct_state = /singleton/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - w_class = ITEM_SIZE_HUGE - - machine_name = "body scanner display" - machine_desc = "Receives body scans from a linked body scanner and allows them to be viewed remotely." - - var/list/bodyscans = list() - var/selected = 0 - -/obj/machinery/body_scan_display/proc/add_new_scan(list/scan) - bodyscans += list(scan.Copy()) - updateUsrDialog() - -/obj/machinery/body_scan_display/OnTopic(mob/user as mob, href_list) - if(href_list["view"]) - var/selection = text2num(href_list["view"]) - if(is_valid_index(selection, bodyscans)) - selected = selection - return TOPIC_REFRESH - return TOPIC_HANDLED - if(href_list["delete"]) - var/selection = text2num(href_list["delete"]) - if(!is_valid_index(selection, bodyscans)) - return TOPIC_HANDLED - if(selected == selection) - selected = 0 - else if(selected > selection) - selected-- - bodyscans -= list(bodyscans[selection]) - return TOPIC_REFRESH - -/obj/machinery/body_scan_display/interface_interact(user) - ui_interact(user) - return TRUE - -/obj/machinery/body_scan_display/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open=1) - var/list/data = list() - data["scans"] = bodyscans - data["selected"] = selected - - if(selected > 0) - data["scan_header"] = display_medical_data_header(bodyscans[selected], user.get_skill_value(SKILL_MEDICAL)) - data["scan_health"] = display_medical_data_health(bodyscans[selected], user.get_skill_value(SKILL_MEDICAL)) - data["scan_body"] = display_medical_data_body(bodyscans[selected], user.get_skill_value(SKILL_MEDICAL)) - else - data["scan_header"] = " " - data["scan_health"] = " " - data["scan_body"] = " " - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "body_scan_display.tmpl", "Body Scan Display Console", 600, 800) - ui.set_initial_data(data) - ui.open() diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 3d691d10f8254..0060b56b0d362 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -1,6 +1,6 @@ /obj/machinery/button name = "button" - icon = 'icons/obj/objects.dmi' + icon = 'icons/obj/structures/buttons.dmi' icon_state = "launcherbtt" desc = "A remote control switch for something." anchored = TRUE @@ -25,8 +25,10 @@ . = ..() update_icon() -/obj/machinery/button/attackby(obj/item/W, mob/user as mob) - return attack_hand(user) +/obj/machinery/button/use_tool(obj/item/tool, mob/living/user, list/click_params) + if (attack_hand(user)) + return TRUE + return ..() /obj/machinery/button/interface_interact(user) if(!CanInteract(user, DefaultTopicState())) @@ -82,7 +84,7 @@ //alternate button with the same functionality, except has a lightswitch sprite instead /obj/machinery/button/switch - icon = 'icons/obj/power.dmi' + icon = 'icons/obj/structures/buttons.dmi' icon_state = "light0" /obj/machinery/button/switch/on_update_icon() @@ -90,7 +92,7 @@ //alternate button with the same functionality, except has a door control sprite instead /obj/machinery/button/alternate - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/buttons.dmi' icon_state = "doorctrl" /obj/machinery/button/alternate/on_update_icon() @@ -108,7 +110,7 @@ //alternate button with the same toggle functionality, except has a lightswitch sprite instead /obj/machinery/button/toggle/switch - icon = 'icons/obj/power.dmi' + icon = 'icons/obj/structures/buttons.dmi' icon_state = "light0" /obj/machinery/button/toggle/switch/on_update_icon() @@ -118,7 +120,7 @@ //alternate button with the same toggle functionality, except has a door control sprite instead /obj/machinery/button/toggle/alternate - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/buttons.dmi' icon_state = "doorctrl" /obj/machinery/button/toggle/alternate/on_update_icon() @@ -139,7 +141,7 @@ //------------------------------- /obj/machinery/button/alternate/door - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/buttons.dmi' icon_state = "doorctrl" stock_part_presets = list(/singleton/stock_part_preset/radio/basic_transmitter/button/door) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index fb1de508447fb..935e5dfe09cac 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -1,7 +1,7 @@ /obj/machinery/camera name = "security camera" desc = "It's used to monitor rooms." - icon = 'icons/obj/monitors.dmi' + icon = 'icons/obj/structures/cameras.dmi' icon_state = "camera" use_power = POWER_USE_ACTIVE idle_power_usage = 5 @@ -42,7 +42,9 @@ /obj/machinery/camera/examine(mob/user) . = ..() if(MACHINE_IS_BROKEN(src)) - to_chat(user, SPAN_WARNING("It is completely demolished.")) + . += SPAN_WARNING("It is completely demolished.") + else if(inoperable(MACHINE_STAT_EMPED)) + . += SPAN_WARNING("It's unpowered.") /obj/machinery/camera/malf_upgrade(mob/living/silicon/ai/user) ..() @@ -51,7 +53,7 @@ upgradeEmpProof() upgradeXRay() - to_chat(user, "\The [src] has been upgraded. It now has X-Ray capability and EMP resistance.") + to_chat(user, "[src] has been upgraded. It now has X-Ray capability and EMP resistance.") return 1 /obj/machinery/camera/apply_visual(mob/living/carbon/human/M) @@ -99,15 +101,21 @@ number = 1 var/area/A = get_area(src) if(A) - for(var/obj/machinery/camera/C in A) - if(C == src) continue + for(var/obj/machinery/camera/C in A.machinery_list) + if(C == src) + continue + if(C.number) - number = max(number, C.number+1) + number = max(number, C.number + 1) + c_tag = "[A.name][number == 1 ? "" : " #[number]"]" invalidateCameraCache() + GLOB.moved_event.register(src, src, PROC_REF(camera_moved)) + /obj/machinery/camera/Destroy() + GLOB.moved_event.unregister(src, src, PROC_REF(camera_moved)) deactivate(null, 0) //kick anyone viewing out if(assembly) qdel(assembly) @@ -122,12 +130,20 @@ update_coverage() return internal_process() + +/obj/machinery/camera/proc/camera_moved(atom/movable/moved_atom, atom/old_loc, atom/new_loc) + if (AreConnectedZLevels(get_z(old_loc), get_z(new_loc))) + return + disconnect_viewers() + + /obj/machinery/camera/emp_act(severity) if (!isEmpProof()) if (prob(100/severity)) if (!affected_by_emp_until || (world.time < affected_by_emp_until)) affected_by_emp_until = max(affected_by_emp_until, world.time + (90 SECONDS / severity)) else + deactivate(choice = FALSE) set_stat(MACHINE_STAT_EMPED, TRUE) set_light(0) triggerCameraAlarm() @@ -146,52 +162,60 @@ if(user.species.can_shred(user)) set_status(0) user.do_attack_animation(src) - visible_message(SPAN_WARNING("\The [user] slashes at [src]!")) + visible_message(SPAN_WARNING("[user] slashes at [src]!")) playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) add_hiddenprint(user) kill_health() return TRUE -/obj/machinery/camera/attackby(obj/item/W as obj, mob/living/user as mob) - update_coverage() +/obj/machinery/camera/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(panel_open) + wires.Interact(user) + +/obj/machinery/camera/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + panel_open = !panel_open + USE_FEEDBACK_NEW_PANEL_OPEN(user, panel_open) + +/obj/machinery/camera/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(panel_open) + wires.Interact(user) + +/obj/machinery/camera/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS var/datum/wires/camera/camera_wires = wires - // DECONSTRUCTION - if(isScrewdriver(W)) -// to_chat(user, SPAN_NOTICE("You start to [panel_open ? "close" : "open"] the camera's panel.")) - //if(toggle_panel(user)) // No delay because no one likes screwdrivers trying to be hip and have a duration cooldown - panel_open = !panel_open - user.visible_message( - SPAN_WARNING("[user] screws the camera's panel [panel_open ? "open" : "closed"]!"), - SPAN_NOTICE("You screw the camera's panel [panel_open ? "open" : "closed"].") - ) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - - else if((isWirecutter(W) || isMultitool(W)) && panel_open) - return wires.Interact(user) - - else if(isWelder(W) && (camera_wires.CanDeconstruct() || (MACHINE_IS_BROKEN(src)))) - if(weld(W, user)) - if(assembly) - assembly.dropInto(loc) - assembly.anchored = TRUE - assembly.camera_name = c_tag - assembly.camera_network = english_list(network, "Exodus", ",", ",") - assembly.update_icon() - assembly.dir = src.dir - if(MACHINE_IS_BROKEN(src)) - assembly.state = 2 - to_chat(user, SPAN_NOTICE("You repaired \the [src] frame.")) - cancelCameraAlarm() - else - assembly.state = 1 - to_chat(user, SPAN_NOTICE("You cut \the [src] free from the wall.")) - new /obj/item/stack/cable_coil(loc, 2) - assembly = null //so qdel doesn't eat it. - qdel(src) + if(camera_wires.CanDeconstruct() || (MACHINE_IS_BROKEN(src))) + if(!tool.tool_start_check(user, 1)) return + USE_FEEDBACK_DECONSTRUCT_START(user) + if(!tool.use_as_tool(src, user, 10 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + if(assembly) + assembly.dropInto(loc) + assembly.anchored = TRUE + assembly.camera_name = c_tag + assembly.camera_network = english_list(network, "Exodus", ",", ",") + assembly.update_icon() + assembly.dir = dir + if(MACHINE_IS_BROKEN(src)) + assembly.state = 2 + user.balloon_alert_to_viewers("камера отремонтирована") + cancelCameraAlarm() + else + assembly.state = 1 + user.balloon_alert_to_viewers("камера отварена от стены") + new /obj/item/stack/cable_coil(loc, 2) + assembly = null //so qdel doesn't eat it. + qdel(src) + +/obj/machinery/camera/use_tool(obj/item/W, mob/living/user, list/click_params) + update_coverage() - // OTHER - else if (can_use() && istype(W, /obj/item/paper) && isliving(user)) + if (can_use() && istype(W, /obj/item/paper) && isliving(user)) var/mob/living/U = user var/obj/item/paper/X = W var/itemname = X.name @@ -202,15 +226,28 @@ if(U.name == "Unknown") to_chat(O, "[U] holds \a [itemname] up to one of your cameras ...") else to_chat(O, "[U] holds \a [itemname] up to one of your cameras ...") show_browser(O, text("[][]", itemname, info), text("window=[]", itemname)) + return TRUE + + return ..() + + +/** + * Handles resetting the view of all clients currently viewing this camera. Does not include resetting nano modules. + */ +/obj/machinery/camera/proc/disconnect_viewers() + for (var/mob/mob as anything in get_mob_with_client_list()) + if (mob.client.eye != src) + continue + mob.reset_view() - else - ..() /obj/machinery/camera/proc/deactivate(user as mob, choice = 1) // The only way for AI to reactivate cameras are malf abilities, this gives them different messages. if(istype(user, /mob/living/silicon/ai)) user = null + disconnect_viewers() + if(choice != 1) return @@ -236,12 +273,13 @@ . = ..() wires.RandomCutAll() + deactivate() triggerCameraAlarm() queue_icon_update() update_coverage() //sparks - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + var/datum/effect/spark_spread/spark_system = new /datum/effect/spark_spread() spark_system.set_up(5, 0, loc) spark_system.start() playsound(loc, "sparks", 50, 1) @@ -277,7 +315,7 @@ else if(dir == EAST) pixel_x = -10 - if (!status || (MACHINE_IS_BROKEN(src))) + if (!status || inoperable()) icon_state = "[initial(icon_state)]1" else if (GET_FLAGS(stat, MACHINE_STAT_EMPED)) icon_state = "[initial(icon_state)]emp" @@ -299,7 +337,7 @@ /obj/machinery/camera/proc/can_use() if(!status) return 0 - if(MACHINE_IS_BROKEN(src) || GET_FLAGS(stat, MACHINE_STAT_EMPED)) + if(inoperable(MACHINE_STAT_EMPED)) return 0 return 1 @@ -353,23 +391,6 @@ return null -/obj/machinery/camera/proc/weld(obj/item/weldingtool/WT, mob/user) - - if(busy) - return 0 - - if(WT.remove_fuel(0, user)) - to_chat(user, SPAN_NOTICE("You start to weld \the [src]..")) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - busy = 1 - if(do_after(user, 10 SECONDS, src, DO_REPAIR_CONSTRUCT) && WT.isOn()) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - busy = 0 - return 1 - - busy = 0 - return 0 - /obj/machinery/camera/proc/add_network(network_name) add_networks(list(network_name)) diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 0a9df2bfc0bea..78403cceeb572 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -1,7 +1,13 @@ +#define ASSEMBLY_NONE 0 +#define ASSEMBLY_WRENCHED 1 +#define ASSEMBLY_WELDED 2 +#define ASSEMBLY_WIRED 3 // you can now attach/dettach upgrades +#define ASSEMBLY_SCREWED 4 // you cannot attach upgrades + /obj/item/camera_assembly name = "camera assembly" desc = "A pre-fabricated security camera kit, ready to be assembled and mounted to a surface." - icon = 'icons/obj/monitors.dmi' + icon = 'icons/obj/structures/cameras.dmi' icon_state = "cameracase" w_class = ITEM_SIZE_SMALL anchored = FALSE @@ -13,133 +19,124 @@ var/list/upgrades = list() var/camera_name var/camera_network - var/state = 0 - var/busy = 0 - /* - 0 = Nothing done to it - 1 = Wrenched in place - 2 = Welded in place - 3 = Wires attached to it (you can now attach/dettach upgrades) - 4 = Screwdriver panel closed and is fully built (you cannot attach upgrades) - */ - -/obj/item/camera_assembly/attackby(obj/item/W as obj, mob/living/user as mob) + var/state = ASSEMBLY_NONE +/obj/item/camera_assembly/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(state != ASSEMBLY_WIRED || !length(upgrades)) + return + var/obj/U = locate(/obj) in upgrades + if(U) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + to_chat(user, SPAN_NOTICE("You unattach an upgrade from the assembly.")) + U.dropInto(loc) + upgrades -= U + +/obj/item/camera_assembly/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(state != ASSEMBLY_WIRED) + return + var/input = sanitize(input(user, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: Exodus,Security,Secret", "Set Network", camera_network ? camera_network : NETWORK_EXODUS)) + if(!input) + return + var/list/tempnetwork = splittext(input, ",") + if(length(tempnetwork) < 1) + balloon_alert(user, "не найдены сети!") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + var/area/camera_area = get_area(src) + var/temptag = "[sanitize(camera_area.name)] ([rand(1, 999)])" + input = sanitizeSafe(input(user, "How would you like to name the camera?", "Set Camera Name", camera_name ? camera_name : temptag), MAX_LNAME_LEN) + state = ASSEMBLY_SCREWED + var/obj/machinery/camera/C = new(loc) + forceMove(C) + C.assembly = src + C.auto_turn() + C.replace_networks(uniquelist(tempnetwork)) + C.c_tag = input + for(var/i = 5; i >= 0; i -= 1) + var/direct = input(user, "Direction?", "Assembling Camera", null) in list("LEAVE IT", "NORTH", "EAST", "SOUTH", "WEST" ) + if(direct != "LEAVE IT") + C.dir = text2dir(direct) + if(i != 0) + var/confirm = alert(user, "Is this what you want? Chances Remaining: [i]", "Confirmation", "Yes", "No") + if(confirm == "Yes") + C.update_icon() + break + +/obj/item/camera_assembly/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS switch(state) - - if(0) - // State 0 - if(isWrench(W) && isturf(src.loc)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You wrench the assembly into place.") - anchored = TRUE - state = 1 - update_icon() - auto_turn() + if(ASSEMBLY_NONE) + if(!isturf(loc)) return - - if(1) - // State 1 - if(isWelder(W)) - if(weld(W, user)) - to_chat(user, "You weld the assembly securely into place.") - anchored = TRUE - state = 2 + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + to_chat(user, "You wrench the assembly into place.") + anchored = TRUE + state = ASSEMBLY_WRENCHED + update_icon() + auto_turn() + if(ASSEMBLY_WRENCHED) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return + to_chat(user, "You unattach the assembly from its place.") + anchored = FALSE + update_icon() + state = ASSEMBLY_NONE + +/obj/item/camera_assembly/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(state != ASSEMBLY_WIRED) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + new/obj/item/stack/cable_coil(get_turf(src), 2) + to_chat(user, "You cut the wires from the circuits.") + state = ASSEMBLY_WELDED - else if(isWrench(W)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, "You unattach the assembly from its place.") - anchored = FALSE - update_icon() - state = 0 +/obj/item/camera_assembly/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + switch(state) + if(ASSEMBLY_WRENCHED) + if(!tool.tool_start_check(user, 1)) + return + balloon_alert(user, "приваривание камеры") + if(!tool.use_as_tool(src, user, 2 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + balloon_alert_to_viewers("камера приварена") + anchored = TRUE + state = ASSEMBLY_WELDED + if(ASSEMBLY_WELDED) + if(!tool.tool_start_check(user, 1)) return + balloon_alert(user, "отваривание камеры") + if(!tool.use_as_tool(src, user, 2 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + balloon_alert_to_viewers("камера отварена") + state = ASSEMBLY_WRENCHED + anchored = TRUE - if(2) +/obj/item/camera_assembly/attackby(obj/item/W as obj, mob/living/user as mob) + switch(state) + if(ASSEMBLY_WELDED) // State 2 if(isCoil(W)) var/obj/item/stack/cable_coil/C = W if(C.use(2)) to_chat(user, SPAN_NOTICE("You add wires to the assembly.")) - state = 3 + state = ASSEMBLY_WIRED else to_chat(user, SPAN_WARNING("You need 2 coils of wire to wire the assembly.")) return - else if(isWelder(W)) - - if(weld(W, user)) - to_chat(user, "You unweld the assembly from its place.") - state = 1 - anchored = TRUE - return - - - if(3) - // State 3 - if(isScrewdriver(W)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - - var/input = sanitize(input(usr, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: Exodus,Security,Secret", "Set Network", camera_network ? camera_network : NETWORK_EXODUS)) - if(!input) - to_chat(usr, "No input found please hang up and try your call again.") - return - - var/list/tempnetwork = splittext(input, ",") - if(length(tempnetwork) < 1) - to_chat(usr, "No network found please hang up and try your call again.") - return - - var/area/camera_area = get_area(src) - var/temptag = "[sanitize(camera_area.name)] ([rand(1, 999)])" - input = sanitizeSafe(input(usr, "How would you like to name the camera?", "Set Camera Name", camera_name ? camera_name : temptag), MAX_LNAME_LEN) - - state = 4 - var/obj/machinery/camera/C = new(src.loc) - src.forceMove(C) - C.assembly = src - - C.auto_turn() - - C.replace_networks(uniquelist(tempnetwork)) - - C.c_tag = input - - for(var/i = 5; i >= 0; i -= 1) - var/direct = input(user, "Direction?", "Assembling Camera", null) in list("LEAVE IT", "NORTH", "EAST", "SOUTH", "WEST" ) - if(direct != "LEAVE IT") - C.dir = text2dir(direct) - if(i != 0) - var/confirm = alert(user, "Is this what you want? Chances Remaining: [i]", "Confirmation", "Yes", "No") - if(confirm == "Yes") - C.update_icon() - break - return - - else if(isWirecutter(W)) - - new/obj/item/stack/cable_coil(get_turf(src), 2) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - to_chat(user, "You cut the wires from the circuits.") - state = 2 - return - // Upgrades! if(is_type_in_list(W, possible_upgrades) && !is_type_in_list(W, upgrades) && user.unEquip(W, src)) // Is a possible upgrade and isn't in the camera already. - to_chat(user, "You attach \the [W] into the assembly inner circuits.") + to_chat(user, "You attach [W] into the assembly inner circuits.") upgrades += W return - - // Taking out upgrades - else if(isCrowbar(W) && length(upgrades)) - var/obj/U = locate(/obj) in upgrades - if(U) - to_chat(user, "You unattach an upgrade from the assembly.") - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - U.dropInto(loc) - upgrades -= U - return - ..() /obj/item/camera_assembly/on_update_icon() @@ -152,19 +149,8 @@ if(!anchored) ..() -/obj/item/camera_assembly/proc/weld(obj/item/weldingtool/WT, mob/user) - - if(busy) - return 0 - - if(WT.remove_fuel(0, user)) - to_chat(user, SPAN_NOTICE("You start to weld \the [src]..")) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - busy = 1 - if(do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT) && WT.isOn()) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - busy = 0 - return 1 - - busy = 0 - return 0 +#undef ASSEMBLY_NONE +#undef ASSEMBLY_WRENCHED +#undef ASSEMBLY_WELDED +#undef ASSEMBLY_WIRED +#undef ASSEMBLY_SCREWED diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index 378d099f5743e..83db5715cf900 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -22,6 +22,9 @@ /obj/machinery/camera/network/thunder network = list(NETWORK_THUNDER) +/obj/machinery/camera/network/helmet + network = list(NETWORK_HELMETS) + // EMP /obj/machinery/camera/emp_proof/Initialize() @@ -94,4 +97,4 @@ mult++ if (isMotion()) mult++ - change_power_consumption(mult*initial(active_power_usage), POWER_USE_ACTIVE) \ No newline at end of file + change_power_consumption(mult*initial(active_power_usage), POWER_USE_ACTIVE) diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index edd02b6d4e001..320043b212edb 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -159,7 +159,7 @@ cameraFollow = target to_chat(src, SPAN_NOTICE("Tracking target ...")) cameraFollow.tracking_initiated() - addtimer(new Callback(src, .proc/ai_actual_track_action), 0, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) + addtimer(CALLBACK(src, PROC_REF(ai_actual_track_action)), 0, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) /mob/living/silicon/ai/proc/ai_actual_track_action() @@ -168,14 +168,14 @@ var/status = cameraFollow.tracking_status() if (status == TRACKING_NO_COVERAGE) to_chat(src, SPAN_WARNING("Target is not near any active cameras.")) - addtimer(new Callback(src, .proc/ai_actual_track_action), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) + addtimer(CALLBACK(src, PROC_REF(ai_actual_track_action)), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) return else if (status == TRACKING_TERMINATE) ai_cancel_tracking(TRUE) return if (eyeobj) eyeobj.setLoc(get_turf(cameraFollow), FALSE) - addtimer(new Callback(src, .proc/ai_actual_track_action), 1 SECOND, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) + addtimer(CALLBACK(src, PROC_REF(ai_actual_track_action)), 1 SECOND, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) return view_core() @@ -192,6 +192,7 @@ ai_camera_list() /proc/camera_sort(list/L) + RETURN_TYPE(/list) var/obj/machinery/camera/a var/obj/machinery/camera/b @@ -226,10 +227,10 @@ return TRACKING_TERMINATE if(digitalcamo) return TRACKING_TERMINATE - if(istype(loc,/obj/effect/dummy)) + if(istype(loc,/obj/dummy)) return TRACKING_TERMINATE - // Now, are they viewable by a camera? (This is last because it's the most intensive check) + // Now, are they viewable by a camera? (This is last because it's the most intensive check) return near_camera() ? TRACKING_POSSIBLE : TRACKING_NO_COVERAGE /mob/living/carbon/human/tracking_status() diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 7a1bb4f03493e..35777a23013ea 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -1,9 +1,10 @@ /obj/machinery/cell_charger name = "heavy-duty cell charger" desc = "A much more powerful version of the standard recharger that is specially designed for charging power cells." - icon = 'icons/obj/power.dmi' + icon = 'icons/obj/machines/power/cell_charger.dmi' icon_state = "ccharger0" anchored = TRUE + obj_flags = OBJ_FLAG_CAN_TABLE | OBJ_FLAG_ANCHORABLE idle_power_usage = 5 active_power_usage = 60 KILOWATTS //This is the power drawn when charging power_channel = EQUIP @@ -15,49 +16,57 @@ if(charging && operable()) var/newlevel = round(charging.percent() * 4.0 / 99) if(chargelevel != newlevel) - overlays.Cut() - overlays += "ccharger-o[newlevel]" + ClearOverlays() + AddOverlays(emissive_appearance(icon, "ccharger-o[newlevel]")) + AddOverlays("ccharger-o[newlevel]") chargelevel = newlevel else - overlays.Cut() + ClearOverlays() /obj/machinery/cell_charger/examine(mob/user, distance) . = ..() if(distance <= 5) - to_chat(user, "There's [charging ? "a" : "no"] cell in the charger.") + . += SPAN_NOTICE("There's [charging ? "a" : "no"] cell in the charger.") if(charging) - to_chat(user, "Current charge: [charging.charge]") + . += SPAN_NOTICE("Current charge: [charging.charge]") -/obj/machinery/cell_charger/attackby(obj/item/W, mob/user) +/obj/machinery/cell_charger/post_anchor_change() + ..() + set_power() + +/obj/machinery/cell_charger/wrench_act(mob/living/user, obj/item/tool) if(MACHINE_IS_BROKEN(src)) - return + USE_FEEDBACK_FAILURE("[src] is broken!") + return ITEM_INTERACT_BLOCKING + if(charging) + USE_FEEDBACK_FAILURE("Remove the cell first!") + to_chat(user, SPAN_WARNING("Remove the cell first!")) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/cell_charger/use_tool(obj/item/W, mob/living/user, list/click_params) + if(MACHINE_IS_BROKEN(src)) + return TRUE if(istype(W, /obj/item/cell) && anchored) if(charging) to_chat(user, SPAN_WARNING("There is already a cell in the charger.")) - return - else - var/area/a = get_area(loc) - if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power! - to_chat(user, SPAN_WARNING("The [name] blinks red as you try to insert the cell!")) - return - if(!user.unEquip(W, src)) - return - charging = W - set_power() - START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) - user.visible_message("[user] inserts a cell into the charger.", "You insert a cell into the charger.") - chargelevel = -1 - queue_icon_update() - else if(isWrench(W)) - if(charging) - to_chat(user, SPAN_WARNING("Remove the cell first!")) - return + return TRUE - anchored = !anchored + var/area/a = get_area(loc) + if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power! + to_chat(user, SPAN_WARNING("The [name] blinks red as you try to insert the cell!")) + return TRUE + if(!user.unEquip(W, src)) + return TRUE + charging = W set_power() - to_chat(user, "You [anchored ? "attach" : "detach"] the cell charger [anchored ? "to" : "from"] the ground") - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) + user.visible_message("[user] inserts a cell into the charger.", "You insert a cell into the charger.") + chargelevel = -1 + queue_icon_update() + return TRUE + + return ..() /obj/machinery/cell_charger/physical_attack_hand(mob/user) if(charging) diff --git a/code/game/machinery/computer/RCON_Console.dm b/code/game/machinery/computer/RCON_Console.dm index 82fc8728b5402..f18a87d23c8f7 100644 --- a/code/game/machinery/computer/RCON_Console.dm +++ b/code/game/machinery/computer/RCON_Console.dm @@ -38,4 +38,4 @@ /obj/machinery/computer/rcon/on_update_icon() ..() if(operable()) - overlays += image('icons/obj/computer.dmi', "ai-fixer-empty", overlay_layer) + AddOverlays(image('icons/obj/machines/computer.dmi', "ai-fixer-empty", overlay_layer)) diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 0459a2305867c..7b162c6abd18f 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -6,7 +6,21 @@ var/global/list/empty_playable_ai_cores = list() name = "\improper AI core" icon = 'icons/mob/AI.dmi' icon_state = "0" - var/state = 0 + + /// State 1 - AI core frame is built. + var/const/STATE_FRAME = 1 + /// State 2 - Circuitboard is installed + var/const/STATE_CIRCUIT = 2 + /// State 3 - Circuitboard is installed and secured + var/const/STATE_CIRCUIT_SECURE = 3 + /// State 4 - Frame is wired + var/const/STATE_WIRED = 4 + /// State 5 - Brain is installed + var/const/STATE_BRAIN = 5 + /// State 6 - Glass panel is installed + var/const/STATE_PANEL = 6 + var/state = STATE_FRAME + var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen var/obj/item/stock_parts/circuitboard/circuit = null var/obj/item/device/mmi/brain = null @@ -19,186 +33,378 @@ var/global/list/empty_playable_ai_cores = list() return 1 . = ..() -/obj/structure/AIcore/attackby(obj/item/P as obj, mob/user as mob) - if(!authorized) - if(access_ai_upload in P.GetAccess()) - to_chat(user, SPAN_NOTICE("You swipe [P] at [src] and authorize it to connect into the systems of [GLOB.using_map.full_name].")) - authorized = 1 - switch(state) - if(0) - if(isWrench(P)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, SPAN_NOTICE("You wrench the frame into place.")) - anchored = TRUE - state = 1 - if(isWelder(P)) - var/obj/item/weldingtool/WT = P - if(!WT.isOn()) - to_chat(user, "The welder must be on for this task.") - return - playsound(loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src || !WT.remove_fuel(0, user)) return - to_chat(user, SPAN_NOTICE("You deconstruct the frame.")) - new /obj/item/stack/material/plasteel( loc, 4) - qdel(src) - return - if(1) - if(isWrench(P)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, SPAN_NOTICE("You unfasten the frame.")) - anchored = FALSE - state = 0 - if(istype(P, /obj/item/stock_parts/circuitboard/aicore) && !circuit && user.unEquip(P, src)) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You place the circuit board inside the frame.")) - icon_state = "1" - circuit = P - if(isScrewdriver(P) && circuit) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You screw the circuit board into place.")) - state = 2 - icon_state = "2" - if(isCrowbar(P) && circuit) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You remove the circuit board.")) - state = 1 - icon_state = "0" - circuit.dropInto(loc) - circuit = null - if(2) - if(isScrewdriver(P) && circuit) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You unfasten the circuit board.")) - state = 1 - icon_state = "1" - if(isCoil(P)) - var/obj/item/stack/cable_coil/C = P - if (C.get_amount() < 5) - to_chat(user, SPAN_WARNING("You need five coils of wire to add them to the frame.")) - return - to_chat(user, SPAN_NOTICE("You start to add cables to the frame.")) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - if (do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT) && state == 2) - if (C.use(5)) - state = 3 - icon_state = "3" - to_chat(user, SPAN_NOTICE("You add cables to the frame.")) - return - if(3) - if(isWirecutter(P)) - if (brain) - to_chat(user, "Get that brain out of there first") - else - playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You remove the cables.")) - state = 2 - icon_state = "2" - var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc ) - A.amount = 5 - - if(istype(P, /obj/item/stack/material)) - var/obj/item/stack/material/RG = P - if(RG.material.name == MATERIAL_GLASS && RG.reinf_material) - if (RG.get_amount() < 2) - to_chat(user, SPAN_WARNING("You need two sheets of glass to put in the glass panel.")) - return - to_chat(user, SPAN_NOTICE("You start to put in the glass panel.")) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - if (do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT) && state == 3) - if(RG.use(2)) - to_chat(user, SPAN_NOTICE("You put in the glass panel.")) - state = 4 - icon_state = "4" - - if(istype(P, /obj/item/aiModule/asimov)) - laws.add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.") - laws.add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") - laws.add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") - to_chat(usr, "Law module applied.") - - if(istype(P, /obj/item/aiModule/nanotrasen)) - laws.add_inherent_law("Safeguard: Protect your assigned installation to the best of your ability. It is not something we can easily afford to replace.") - laws.add_inherent_law("Serve: Serve the crew of your assigned installation to the best of your abilities, with priority as according to their rank and role.") - laws.add_inherent_law("Protect: Protect the crew of your assigned installation to the best of your abilities, with priority as according to their rank and role.") - laws.add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.") - to_chat(usr, "Law module applied.") - - if(istype(P, /obj/item/aiModule/purge)) - laws.clear_inherent_laws() - to_chat(usr, "Law module applied.") - - if(istype(P, /obj/item/aiModule/freeform)) - var/obj/item/aiModule/freeform/M = P - laws.add_inherent_law(M.newFreeFormLaw) - to_chat(usr, "Added a freeform law.") - - if(istype(P, /obj/item/device/mmi) || istype(P, /obj/item/organ/internal/posibrain)) - var/mob/living/carbon/brain/B - if(istype(P, /obj/item/device/mmi)) - var/obj/item/device/mmi/M = P - B = M.brainmob - else - var/obj/item/organ/internal/posibrain/PB = P - B = PB.brainmob - if(!B) - to_chat(user, SPAN_WARNING("Sticking an empty [P] into the frame would sort of defeat the purpose.")) - return - if(B.stat == 2) - to_chat(user, SPAN_WARNING("Sticking a dead [P] into the frame would sort of defeat the purpose.")) - return - - if(jobban_isbanned(B, "AI")) - to_chat(user, SPAN_WARNING("This [P] does not seem to fit.")) - return - if(!user.unEquip(P, src)) - return - if(B.mind) - clear_antag_roles(B.mind, 1) - - brain = P - to_chat(usr, "Added [P].") - icon_state = "3b" - - if(isCrowbar(P) && brain) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You remove the brain.")) - brain.dropInto(loc) - brain = null - icon_state = "3" - - if(4) - if(isCrowbar(P)) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You remove the glass panel.")) - state = 3 - if (brain) - icon_state = "3b" - else - icon_state = "3" - new /obj/item/stack/material/glass/reinforced( loc, 2 ) - return - - if(isScrewdriver(P)) - if(!authorized) - to_chat(user, SPAN_WARNING("Core fails to connect to the systems of [GLOB.using_map.full_name]!")) - return - - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You connect the monitor.")) - if(!brain) + +/obj/structure/AIcore/on_update_icon() + switch (state) + if (STATE_FRAME) + icon_state = "0" + if (STATE_CIRCUIT) + icon_state = "1" + if (STATE_CIRCUIT_SECURE) + icon_state = "2" + if (STATE_WIRED) + icon_state = "3" + if (STATE_BRAIN) + icon_state = "3b" + if (STATE_PANEL) + icon_state = "4" + + +/obj/structure/AIcore/use_tool(obj/item/tool, mob/user, list/click_params) + // AI Module + // - State 4 - Apply lawset + if (istype(tool, /obj/item/aiModule)) + if (state < STATE_WIRED) + USE_FEEDBACK_FAILURE("[src] needs to be wired before you can apply [tool].") + return TRUE + if (state > STATE_WIRED) + USE_FEEDBACK_FAILURE("[src]'s panel needs to be removed before you can apply [tool].") + return TRUE + // Special handling for certain law board + // Freeform - Apply freeform law without deleting existing laws + if (istype(tool, /obj/item/aiModule/freeform)) + var/obj/item/aiModule/freeform/freeform_lawboard = tool + laws.add_inherent_law(freeform_lawboard.newFreeFormLaw) + // Purge - Remove all laws + else if (istype(tool, /obj/item/aiModule/purge)) + laws.clear_inherent_laws() + // All others - Standard sync + else + var/obj/item/aiModule/lawboard = tool + lawboard.laws.sync(src) + user.visible_message( + SPAN_NOTICE("[user] scans [tool] with [src]."), + SPAN_NOTICE("You scan [tool] with [src], updating its lawset.") + ) + return TRUE + + // Cable Coil + // - State 3 - Add wiring, move to State 4 + if (isCoil(tool)) + if (state < STATE_CIRCUIT) + USE_FEEDBACK_FAILURE("[src] has no circuit to wire.") + return TRUE + if (state < STATE_CIRCUIT_SECURE) + USE_FEEDBACK_FAILURE("[src]'s [circuit.name] needs to be fastened into place before you can wire it.") + return TRUE + if (state > STATE_CIRCUIT_SECURE) + USE_FEEDBACK_FAILURE("[src]'s [circuit.name] is already wired.") + return TRUE + var/obj/item/stack/cable_coil/cable = tool + if (!cable.can_use(5)) + USE_FEEDBACK_STACK_NOT_ENOUGH(cable, 5, "to wire [src]'s [circuit.name]") + return TRUE + user.visible_message( + SPAN_NOTICE("[user] starts wiring [src] with [tool]."), + SPAN_NOTICE("You start wiring [src] with [tool].") + ) + playsound(loc, 'sound/items/Deconstruct.ogg', 50, TRUE) + if (!user.do_skilled(2 SECONDS, SKILL_ELECTRICAL, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + if (state < STATE_CIRCUIT) + USE_FEEDBACK_FAILURE("[src] has no circuit to wire.") + return TRUE + if (state < STATE_CIRCUIT_SECURE) + USE_FEEDBACK_FAILURE("[src]'s [circuit.name] needs to be fastened into place before you can wire it.") + return TRUE + if (state > STATE_CIRCUIT_SECURE) + USE_FEEDBACK_FAILURE("[src]'s [circuit.name] is already wired.") + return TRUE + if (!cable.use(5)) + USE_FEEDBACK_STACK_NOT_ENOUGH(cable, 5, "to wire [src]'s [circuit.name]") + return TRUE + playsound(loc, 'sound/items/Deconstruct.ogg', 50, TRUE) + state = STATE_WIRED + update_icon() + user.visible_message( + SPAN_NOTICE("[user] wires [src] with [tool]."), + SPAN_NOTICE("You wire [src] with [tool].") + ) + return TRUE + + // Circuitboard (AI Core) + // - State 1 - Install circuitboard, move to State 2 + if (istype(tool, /obj/item/stock_parts/circuitboard/aicore)) + if (!anchored) + USE_FEEDBACK_FAILURE("[src] needs to be anchored to the floor before you can install [tool].") + return TRUE + if (state > STATE_FRAME) + USE_FEEDBACK_FAILURE("[src] already has [circuit] installed.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + playsound(src, 'sound/items/Deconstruct.ogg', 50, TRUE) + to_chat(user, SPAN_NOTICE("You place the circuit board inside the frame.")) + circuit = tool + state = STATE_CIRCUIT + update_icon() + user.visible_message( + SPAN_NOTICE("[user] installs [tool] into [src]."), + SPAN_NOTICE("You install [tool] into [src].") + ) + return TRUE + + // Crowbar + // - State 2 - Remove circuitboard, move to State 1 + // - State 4 - Remove brain, move to State 3 + // - State 5 - Remove panel, move to State 4 or 3 + if (tool.tool_behaviour == TOOL_CROWBAR) + if (state < STATE_CIRCUIT) + USE_FEEDBACK_FAILURE("[src] has no circuit to remove.") + return TRUE + if (state > STATE_CIRCUIT && state < STATE_BRAIN) + USE_FEEDBACK_FAILURE("[src]'s [circuit.name] needs to be unfastened before you can remove it.") + return TRUE + // Remove circuitboard + if (state == STATE_CIRCUIT) + state = STATE_FRAME + update_icon() + user.visible_message( + SPAN_NOTICE("[user] removes [src]'s [circuit.name] with [tool]."), + SPAN_NOTICE("[user] removes [src]'s [circuit.name] with [tool].") + ) + circuit.dropInto(loc) + circuit = null + // Remove posibrain + else if (state == STATE_BRAIN) + state = STATE_WIRED + update_icon() + brain.dropInto(loc) + user.visible_message( + SPAN_NOTICE("[user] removes [src]'s [brain.name] with [tool]."), + SPAN_NOTICE("You remove [src]'s [brain.name] with [tool]."), + exclude_mobs = list(brain.brainmob) + ) + to_chat(brain.brainmob, SPAN_NOTICE("[user] removes you from [src] with [tool].")) + brain = null + // Remove panel + else if (state == STATE_PANEL) + state = brain ? STATE_BRAIN : STATE_WIRED + update_icon() + playsound(src, 'sound/items/Crowbar.ogg', 50, TRUE) + new /obj/item/stack/material/glass/reinforced(loc, 2) + user.visible_message( + SPAN_NOTICE("[user] removes [src]'s glass panel with [tool]."), + SPAN_NOTICE("You remove [src]'s glass panel with [tool].") + ) + return TRUE + + // ID - Authorize core + var/obj/item/card/id/id = tool.GetIdCard() + if (istype(id)) + var/id_name = GET_ID_NAME(id, tool) + if (!check_access(id)) + USE_FEEDBACK_ID_CARD_DENIED(src, id_name) + return TRUE + if (authorized) + USE_FEEDBACK_FAILURE("[src] has already been authorized.") + return TRUE + authorized = TRUE + user.visible_message( + SPAN_NOTICE("[user] scans [tool] over [src]'s ID scanner."), + SPAN_NOTICE("You scan [id_name] over [src]'s ID scanner and authorize it to connect into the area's systems.") + ) + return TRUE + + // Man-Machine Interface, Positronic Matrix + // - State 4 - Install brain, move to State 5 + if (istype(tool, /obj/item/device/mmi) || istype(tool, /obj/item/organ/internal/posibrain)) + if (state < STATE_WIRED) + USE_FEEDBACK_FAILURE("[src] needs to be wired before you can install [tool].") + return TRUE + if (brain) + USE_FEEDBACK_FAILURE("[src] already has [brain] installed.") + return TRUE + if (state > STATE_WIRED) + USE_FEEDBACK_FAILURE("[src]'s panel needs to be removed before you can install [tool].") + return TRUE + var/mob/living/carbon/brain/new_brain + if (istype(tool, /obj/item/device/mmi)) + var/obj/item/device/mmi/mmi = tool + new_brain = mmi.brainmob + else if (istype(tool, /obj/item/organ/internal/posibrain)) + var/obj/item/organ/internal/posibrain/posibrain = tool + new_brain = posibrain.brainmob + if (!new_brain) + USE_FEEDBACK_FAILURE("[tool] is empty and cannot be installed into [src].") + return TRUE + if (new_brain.stat == DEAD) + USE_FEEDBACK_FAILURE("[tool] is dead and cannot be installed into [src].") + return TRUE + if (jobban_isbanned(brain, "AI")) + USE_FEEDBACK_FAILURE("This particular intelligence cannot be installed into an AI core.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + if (new_brain.mind) + clear_antag_roles(new_brain.mind, TRUE) + brain = tool + state = STATE_BRAIN + update_icon() + user.visible_message( + SPAN_NOTICE("[user] installs [tool] into [src]."), + SPAN_NOTICE("You install [tool] into [src]."), + exclude_mobs = list(brain.brainmob) + ) + if (brain) + to_chat(brain.brainmob, SPAN_NOTICE("[user] installs you into [src].")) + return TRUE + + // Material Stack + // - State 4 or 5 - Install glass panel, move to State 6 + if (istype(tool, /obj/item/stack/material)) + if (tool.get_material_name() != MATERIAL_GLASS) + return ..() + var/obj/item/stack/material/material_stack = tool + if (state < STATE_WIRED) + USE_FEEDBACK_FAILURE("[src] needs to be wired before you can install a glass panel.") + return TRUE + if (state > STATE_BRAIN) + USE_FEEDBACK_FAILURE("[src] already has a glass panel.") + return TRUE + if (!material_stack.reinf_material) + USE_FEEDBACK_FAILURE("[tool] needs to be reinforced before it can be used as a panel for [src].") + return TRUE + if (!material_stack.can_use(2)) + USE_FEEDBACK_STACK_NOT_ENOUGH(material_stack, 2, "to install a panel into [src]") + playsound(src, 'sound/items/Deconstruct.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] starts installing a panel into [src] with [tool]."), + SPAN_NOTICE("You start installing a panel into [src] with [tool].") + ) + if (!user.do_skilled(2 SECONDS, SKILL_CONSTRUCTION, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + if (state < STATE_WIRED) + USE_FEEDBACK_FAILURE("[src] needs to be wired before you can install a glass panel.") + return TRUE + if (state > STATE_WIRED) + USE_FEEDBACK_FAILURE("[src] already has a glass panel.") + return TRUE + if (!material_stack.use(2)) + USE_FEEDBACK_FAILURE("[tool] needs to be reinforced before it can be used as a panel for [src].") + return TRUE + playsound(src, 'sound/items/Deconstruct.ogg', 50, TRUE) + state = STATE_PANEL + update_icon() + user.visible_message( + SPAN_NOTICE("[user] installs a panel into [src] with [tool]."), + SPAN_NOTICE("You install a panel into [src] with [tool].") + ) + return TRUE + + // Screwdriver + // - State 2 - Fasten circuitboard, move to State 3 + // - State 3 - Unfasten circuitboard, move to State 2 + // - State 5 - Finish core + if (tool.tool_behaviour == TOOL_SCREWDRIVER) + if (state < STATE_CIRCUIT) + balloon_alert(user, "нет платы!") + return TRUE + if (state > STATE_CIRCUIT_SECURE && state < STATE_PANEL) + balloon_alert(user, "нужно снять проводку!") + return TRUE + // Finish core + if (state == STATE_PANEL) + if (!authorized) + balloon_alert(user, "не авторизовано!") + return TRUE + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE + user.visible_message( + SPAN_NOTICE("[user] finishes [src] with [tool]."), + SPAN_NOTICE("You finish [src] with [tool]."), + exclude_mobs = list(brain?.brainmob) + ) + if (brain) + to_chat(brain.brainmob, SPAN_NOTICE("[user] finishes your [name] with [tool].")) + var/mob/living/silicon/ai/ai = new /mob/living/silicon/ai(loc, laws, brain) + if (ai) + ai.on_mob_init() + ai.rename_self("ai", TRUE) + transfer_fingerprints_to(ai) + else + var/obj/structure/AIcore/deactivated/ai = new(loc) + transfer_fingerprints_to(ai) + var/timecheck = world.time + spawn(0) // Don't block wrapping things up if the user doesn't select an option var/open_for_latejoin = alert(user, "Would you like this core to be open for latejoining AIs?", "Latejoin", "Yes", "Yes", "No") == "Yes" - var/obj/structure/AIcore/deactivated/D = new(loc) - if(open_for_latejoin) - empty_playable_ai_cores += D - else - var/mob/living/silicon/ai/A = new /mob/living/silicon/ai ( loc, laws, brain ) - if(A) //if there's no brain, the mob is deleted and a structure/AIcore is created - A.on_mob_init() - A.rename_self("ai", 1) - qdel(src) + if (open_for_latejoin && !QDELETED(ai) && ((world.time - timecheck) <= 1 MINUTE)) + empty_playable_ai_cores += ai + qdel_self() + return TRUE + + // Fasten circuit + else + if (state == STATE_CIRCUIT_SECURE) + state = STATE_CIRCUIT + else + state = STATE_CIRCUIT_SECURE + update_icon() + playsound(src, 'sound/items/Screwdriver.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] [state == STATE_CIRCUIT ? "un" : null]fastens [src]'s circuits with [tool]."), + SPAN_NOTICE("You [state == STATE_CIRCUIT ? "un" : null]fasten [src]'s circuits with [tool].") + ) + return TRUE + + // Welding Tool + // - State 1 - Deconstruct frame + if (tool.tool_behaviour == TOOL_WELDER) + if (state == STATE_FRAME) + if(anchored) + USE_FEEDBACK_NEED_UNANCHOR(user) + return TRUE + if(!tool.tool_start_check(user, 1)) + return TRUE + USE_FEEDBACK_DECONSTRUCT_START(user) + if(!tool.use_as_tool(src, user, 2 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE + new /obj/item/stack/material/plasteel(loc, 4) + user.visible_message( + SPAN_NOTICE("[user] dismantles [src] with [tool]."), + SPAN_NOTICE("You dismantle [src] with [tool].") + ) + qdel(src) + return TRUE + + // Wirecutters + // - State 4 - Remove wiring, move to State 3 + if (tool.tool_behaviour == TOOL_WIRECUTTER) + if (state < STATE_WIRED) + USE_FEEDBACK_FAILURE("[src] has no wiring to remove.") + return TRUE + if (state > STATE_WIRED) + USE_FEEDBACK_FAILURE("[src]'s [brain.name] needs to be removed before you can cut the wiring.") + return TRUE + playsound(src, 'sound/items/Wirecutter.ogg', 50, TRUE) + new /obj/item/stack/cable_coil(loc, 5) + state = STATE_CIRCUIT_SECURE + update_icon() + user.visible_message( + SPAN_NOTICE("[user] removes [src]'s wiring with [tool]."), + SPAN_NOTICE("You remove [src]'s wiring with [tool].") + ) + return TRUE + + // Wrench + // - State 1 - Un/Anchor frame (Handled in parent) + + return ..() + + +/obj/structure/AIcore/post_use_item(obj/item/tool, mob/user, interaction_handled, use_call, click_params) + // Wrench - Toggle anchorable state + if(interaction_handled && tool.tool_behaviour == TOOL_WRENCH) + if(state == STATE_FRAME) + SET_FLAGS(obj_flags, OBJ_FLAG_ANCHORABLE) + else + CLEAR_FLAGS(obj_flags, OBJ_FLAG_ANCHORABLE) + update_icon() + + . = ..() + /obj/structure/AIcore/deactivated name = "inactive AI" @@ -206,6 +412,7 @@ var/global/list/empty_playable_ai_cores = list() icon_state = "ai-empty" anchored = TRUE state = 20//So it doesn't interact based on the above. Not really necessary. + obj_flags = OBJ_FLAG_ANCHORABLE /obj/structure/AIcore/deactivated/Destroy() empty_playable_ai_cores -= src @@ -236,35 +443,19 @@ var/global/list/empty_playable_ai_cores = list() if (ai.mind == malfai) return 1 -/obj/structure/AIcore/deactivated/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/aicard)) - var/obj/item/aicard/card = W - var/mob/living/silicon/ai/transfer = locate() in card - if(transfer) - load_ai(transfer,card,user) - else - to_chat(user, "[SPAN_DANGER("ERROR:")] Unable to locate artificial intelligence.") - return - else if(istype(W, /obj/item/wrench)) - if(anchored) - user.visible_message(SPAN_NOTICE("\The [user] starts to unbolt \the [src] from the plating...")) - if(!do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message(SPAN_NOTICE("\The [user] decides not to unbolt \the [src].")) - return - user.visible_message(SPAN_NOTICE("\The [user] finishes unfastening \the [src]!")) - anchored = FALSE - return - else - user.visible_message(SPAN_NOTICE("\The [user] starts to bolt \the [src] to the plating...")) - if(!do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message(SPAN_NOTICE("\The [user] decides not to bolt \the [src].")) - return - user.visible_message(SPAN_NOTICE("\The [user] finishes fastening down \the [src]!")) - anchored = TRUE - return - else - return ..() +/obj/structure/AIcore/deactivated/use_tool(obj/item/tool, mob/user, list/click_params) + // AI Card - Load AI + if (istype(tool, /obj/item/aicard)) + var/mob/living/silicon/ai/ai = locate() in tool + if (!ai) + USE_FEEDBACK_FAILURE("[tool] lacks an AI to install into [src].") + return TRUE + load_ai(ai, tool, user) + return TRUE + + return ..() + /client/proc/empty_ai_core_toggle_latejoin() set name = "Toggle AI Core Latejoin" @@ -282,7 +473,7 @@ var/global/list/empty_playable_ai_cores = list() if(D in empty_playable_ai_cores) empty_playable_ai_cores -= D - to_chat(src, "\The [id] is now [SPAN_COLOR("#ff0000", "not available")] for latejoining AIs.") + to_chat(src, "[id] is now [SPAN_COLOR("#ff0000", "not available")] for latejoining AIs.") else empty_playable_ai_cores += D - to_chat(src, "\The [id] is now [SPAN_COLOR("#008000", "available")] for latejoining AIs.") + to_chat(src, "[id] is now [SPAN_COLOR("#008000", "available")] for latejoining AIs.") diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index f8e41762b233c..502f666924376 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -201,7 +201,7 @@ src.temp = "[src.enemy_name] has fallen! Rejoice!" if(emagged) - new /obj/effect/spawner/newbomb/timer/syndicate(src.loc) + new /obj/spawner/newbomb/timer/syndicate(src.loc) new /obj/item/clothing/head/collectable/petehat(src.loc) log_and_message_admins("has outbombed Cuban Pete and been awarded a bomb.") SetupGame() diff --git a/code/game/machinery/computer/arcade_orion.dm b/code/game/machinery/computer/arcade_orion.dm index 6f5daa59479f1..46cc46938f91b 100644 --- a/code/game/machinery/computer/arcade_orion.dm +++ b/code/game/machinery/computer/arcade_orion.dm @@ -87,7 +87,7 @@ /obj/machinery/computer/arcade/orion_trail/interact(mob/user) var/dat = "" - if(event == null) + if(isnull(event)) newgame() user.set_machine(src) switch(view) @@ -201,7 +201,7 @@ if(!href_list["food"]) var/temp = supplies["5"] - travel/1000 * (href_list["slow"] ? 2 : 1) - if(temp < 0 && (distance-travel != 0) && next_event == null) //uh oh. Better start a fuel event. + if(temp < 0 && (distance-travel != 0) && isnull(next_event)) //uh oh. Better start a fuel event. next_event = ORION_TRAIL_STUCK travel -= (temp*-1)*1000/(href_list["slow"] ? 2 : 1) temp = 0 @@ -219,7 +219,7 @@ event_desc = "You and your crew starved to death, never to reach Orion." supplies["4"] = 0 - if(distance == 0 && next_event == null) //POOORT! + if(distance == 0 && isnull(next_event)) //POOORT! port++ event = ORION_TRAIL_SPACEPORT distance = stop_distance[port] @@ -294,7 +294,7 @@ if(!specific) specific = rand(1,length(settlers)) - event_info += "The crewmember, [settlers[specific]] [desc == null ? "has died!":"[desc]"]
" + event_info += "The crewmember, [settlers[specific]] [isnull(desc) ? "has died!":"[desc]"]
" settlers -= settlers[specific] if(num_traitors > 0 && prob(100/max(1,length(settlers)-1))) num_traitors-- @@ -478,14 +478,16 @@ icon_state = "ship" w_class = ITEM_SIZE_SMALL var/active = 0 //if the ship is on + /obj/item/orion_ship/examine(mob/user) . = ..() if(!(in_range(user, src))) return if(!active) - to_chat(user, SPAN_NOTICE("There's a little switch on the bottom. It's flipped down.")) + . += SPAN_NOTICE("There's a little switch on the bottom. It's flipped down.") else - to_chat(user, SPAN_NOTICE("There's a little switch on the bottom. It's flipped up.")) + . += SPAN_NOTICE("There's a little switch on the bottom. It's flipped up.") + /obj/item/orion_ship/attack_self(mob/user) if(active) return diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index 1936c89473b9f..2d24c36897462 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -15,7 +15,7 @@ var/global/list/minor_air_alarms = list() /obj/machinery/computer/atmos_alert/Initialize() . = ..() - GLOB.atmosphere_alarm.register_alarm(src, /atom/proc/update_icon) + GLOB.atmosphere_alarm.register_alarm(src, TYPE_PROC_REF(/atom, update_icon)) /obj/machinery/computer/atmos_alert/Destroy() GLOB.atmosphere_alarm.unregister_alarm(src) diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index d51269378f363..ab7a96e81dbfb 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -4,7 +4,7 @@ /obj/machinery/computer/atmoscontrol name = "\improper Central Atmospherics Computer" - icon = 'icons/obj/computer.dmi' + icon = 'icons/obj/machines/computer.dmi' icon_keyboard = "generic_key" icon_screen = "comm_logs" light_color = "#00b000" diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index d2bd7641d724c..54e132936ccb7 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -2,19 +2,19 @@ /obj/machinery/constructable_frame/computerframe name = "computer frame" - icon = 'icons/obj/stock_parts.dmi' + icon = 'icons/obj/machines/frames.dmi' icon_state = "unwired" obj_flags = OBJ_FLAG_ROTATABLE expected_machine_type = "computer" /obj/machinery/constructable_frame/computerframe/on_update_icon() - overlays.Cut() + ClearOverlays() switch(construct_state && construct_state.type) if(/singleton/machine_construction/frame/awaiting_circuit) icon_state = "wired" if(/singleton/machine_construction/frame/awaiting_parts) icon_state = "wired" - overlays += "circuit" + AddOverlays("circuit") else icon_state = "unwired" diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 5c4c8a9d64fc1..a7aba9f1062d9 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -1,6 +1,6 @@ /obj/machinery/computer name = "computer" - icon = 'icons/obj/computer.dmi' + icon = 'icons/obj/machines/computer.dmi' icon_state = "computer" density = TRUE anchored = TRUE @@ -17,9 +17,8 @@ var/icon_keyboard = "generic_key" var/icon_screen = "generic" - var/light_max_bright_on = 0.2 - var/light_inner_range_on = 0.1 - var/light_outer_range_on = 2 + var/light_power_on = 1 + var/light_range_on = 2 var/overlay_layer atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE clicksound = "keyboard" @@ -42,49 +41,79 @@ visible_message(SPAN_WARNING("\The [src] breaks!")) /obj/machinery/computer/on_update_icon() - overlays.Cut() + update_glow() + ClearOverlays() icon = initial(icon) icon_state = initial(icon_state) + // Connecting multiple computers in a row + if(initial(icon_state) == "computer") + var/append_string = "" + var/left = turn(dir, 90) + var/right = turn(dir, -90) + var/turf/L = get_step(src, left) + var/turf/R = get_step(src, right) + var/obj/machinery/computer/LC = locate() in L + var/obj/machinery/computer/RC = locate() in R + if(LC && LC.dir == dir && initial(LC.icon_state) == "computer") + append_string += "_L" + if(RC && RC.dir == dir && initial(RC.icon_state) == "computer") + append_string += "_R" + icon_state = "computer[append_string]" + + if(reason_broken & MACHINE_BROKEN_NO_PARTS) - set_light(0) - icon = 'icons/obj/computer.dmi' + icon = 'icons/obj/machines/computer.dmi' icon_state = "wired" var/screen = get_component_of_type(/obj/item/stock_parts/console_screen) var/keyboard = get_component_of_type(/obj/item/stock_parts/keyboard) if(screen) - overlays += "comp_screen" + AddOverlays("comp_screen") if(keyboard) - overlays += icon_keyboard ? "[icon_keyboard]_off" : "keyboard" + AddOverlays(icon_keyboard ? "[icon_keyboard]_off" : "keyboard") return if(!is_powered()) - set_light(0) if(icon_keyboard) - overlays += image(icon,"[icon_keyboard]_off", overlay_layer) + AddOverlays(image(icon,"[icon_keyboard]_off", overlay_layer)) return - else - set_light(light_max_bright_on, light_inner_range_on, light_outer_range_on, 2, light_color) if(MACHINE_IS_BROKEN(src)) - overlays += image(icon,"[icon_state]_broken", overlay_layer) + AddOverlays(image(icon,"[icon_state]_broken", overlay_layer)) else - overlays += get_screen_overlay() + AddOverlays(get_screen_overlay()) - overlays += get_keyboard_overlay() + AddOverlays(get_keyboard_overlay()) + var/screen_is_glowing = update_glow() + if(screen_is_glowing) + AddOverlays(emissive_appearance(icon, icon_screen)) + if(icon_keyboard) + AddOverlays(emissive_appearance(icon, "[icon_keyboard]_mask")) /obj/machinery/computer/proc/get_screen_overlay() - return image(icon,icon_screen, overlay_layer) + return overlay_image(icon,icon_screen) /obj/machinery/computer/proc/get_keyboard_overlay() if(icon_keyboard) - overlays += image(icon, icon_keyboard, overlay_layer) + return overlay_image(icon, icon_keyboard, overlay_layer) /obj/machinery/computer/proc/decode(text) // Adds line breaks text = replacetext(text, "\n", "
") return text +/** + * Makes the computer emit light if the screen is on. + * Returns TRUE if the screen is on, otherwise FALSE. + */ +/obj/machinery/computer/proc/update_glow() + if (operable()) + set_light(light_range_on, light_power_on, light_color) + return TRUE + else + set_light(0) + return FALSE + /obj/machinery/computer/dismantle(mob/user) if(MACHINE_IS_BROKEN(src)) to_chat(user, SPAN_NOTICE("The broken glass falls out.")) diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index e2ded715a0e2e..04fbd974f8245 100644 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -18,9 +18,9 @@ /obj/item/card/id/guest/examine(mob/user) . = ..() if (!expired) - to_chat(user, SPAN_NOTICE("This pass expires at [worldtime2stationtime(expiration_time)].")) + . += SPAN_NOTICE("This pass expires at [worldtime2stationtime(expiration_time)].") else - to_chat(user, SPAN_WARNING("It expired at [worldtime2stationtime(expiration_time)].")) + . += SPAN_WARNING("It expired at [worldtime2stationtime(expiration_time)].") /obj/item/card/id/guest/read() if (expired) @@ -34,8 +34,8 @@ to_chat(usr, SPAN_NOTICE("Issuing reason: [reason].")) /obj/item/card/id/guest/proc/expire() - color = COLOR_BLACK - detail_color = COLOR_BLACK + color = COLOR_GRAY20 + detail_color = COLOR_GRAY15 update_icon() expired = TRUE @@ -67,16 +67,16 @@ ..() uid = "[random_id("guestpass_serial_number",100,999)]-G[rand(10,99)]" -/obj/machinery/computer/guestpass/attackby(obj/O, mob/user) - if(istype(O, /obj/item/card/id)) +/obj/machinery/computer/guestpass/use_tool(obj/item/O, mob/living/user, list/click_params) + if (isid(O)) if(!giver && user.unEquip(O)) O.forceMove(src) giver = O updateUsrDialog() else if(giver) to_chat(user, SPAN_WARNING("There is already ID card inside.")) - return - ..() + return TRUE + return ..() /obj/machinery/computer/guestpass/interface_interact(mob/user) ui_interact(user) @@ -186,7 +186,7 @@ pass.reason = reason pass.SetName("guest pass #[number]") pass.assignment = "Guest" - addtimer(new Callback(pass, /obj/item/card/id/guest/proc/expire), duration MINUTES, TIMER_UNIQUE) + addtimer(CALLBACK(pass, TYPE_PROC_REF(/obj/item/card/id/guest, expire)), duration MINUTES, TIMER_UNIQUE) playsound(src.loc, 'sound/machines/ping.ogg', 25, 0) . = TOPIC_REFRESH else if(!giver) diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index bfecf910cff06..30dae89b49b9e 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -4,12 +4,13 @@ icon_screen = "command" var/mob/living/silicon/current -/obj/machinery/computer/upload/attackby(obj/item/O, mob/user) +/obj/machinery/computer/upload/use_tool(obj/item/O, mob/living/user, list/click_params) if(istype(O, /obj/item/aiModule)) var/obj/item/aiModule/M = O M.install(src, user) - else - ..() + return TRUE + + return ..() /obj/machinery/computer/upload/ai name = "\improper AI upload console" diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 40ed8d66677ee..8bcadc3d5a079 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -11,7 +11,7 @@ //Server linked to. var/obj/machinery/message_server/linkedServer = null //Sparks effect - For emag - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread + var/datum/effect/spark_spread/spark_system = new /datum/effect/spark_spread //Messages - Saves me time if I want to change something. var/noserver = "ALERT: No server detected." var/incorrectkey = "ALERT: Incorrect decryption key!" @@ -24,19 +24,11 @@ var/message = "System bootup complete. Please select an option." // The message that shows on the main menu. var/auth = 0 // Are they authenticated? -/obj/machinery/computer/message_monitor/attackby(obj/item/O as obj, mob/living/user as mob) - if(inoperable()) - ..() - return - if(!istype(user)) - return - if(isScrewdriver(O) && emag) +/obj/machinery/computer/message_monitor/screwdriver_act(mob/living/user, obj/item/tool) + if(emag) //Stops people from just unscrewing the monitor and putting it back to get the console working again. - to_chat(user, SPAN_WARNING("It is too hot to mess with!")) - return - - ..() - return + balloon_alert(user, "слишком горячо!") + . = ITEM_INTERACT_BLOCKING /obj/machinery/computer/message_monitor/emag_act(remaining_charges, mob/user) // Will create sparks and print out the console's password. You will then have to wait a while for the console to be back online. @@ -217,7 +209,7 @@ auth = 0 screen = 0 else - var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null) + var/dkey = trimtext(input(usr, "Please enter the decryption key.") as text|null) if(dkey && dkey != "") if(src.linkedServer.decryptkey == dkey) auth = 1 @@ -252,10 +244,10 @@ message = noserver else if(auth) - var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null) + var/dkey = trimtext(input(usr, "Please enter the decryption key.") as text|null) if(dkey && dkey != "") if(src.linkedServer.decryptkey == dkey) - var/newkey = trim(input(usr,"Please enter the new key (3 - 16 characters max):")) + var/newkey = trimtext(input(usr,"Please enter the new key (3 - 16 characters max):")) if(length(newkey) <= 3) message = SPAN_NOTICE("NOTICE: Decryption key too short!") else if(length(newkey) > 16) @@ -289,7 +281,7 @@ //Request Console Logs - KEY REQUIRED if(href_list["viewr"]) - if(src.linkedServer == null || (src.linkedServer.inoperable())) + if(isnull(src.linkedServer) || (src.linkedServer.inoperable())) message = noserver else if(auth) diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index 0b5601c324bcb..2e27e36e80d70 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -2,7 +2,7 @@ /obj/machinery/computer/prisoner name = "prisoner management console" - icon = 'icons/obj/computer.dmi' + icon = 'icons/obj/machines/computer.dmi' icon_keyboard = "security_key" icon_screen = "explosive" light_color = "#a91515" diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 1fcff8d047584..4593632a78d21 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -1,7 +1,7 @@ /obj/machinery/computer/robotics name = "robotics control console" desc = "Used to remotely lockdown or monitor linked synthetics." - icon = 'icons/obj/computer.dmi' + icon = 'icons/obj/machines/computer.dmi' icon_keyboard = "mining_key" icon_screen = "robot" light_color = "#a97faa" diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm index 59954bb5c644b..e379c2b149005 100644 --- a/code/game/machinery/computer/shuttle.dm +++ b/code/game/machinery/computer/shuttle.dm @@ -9,63 +9,62 @@ var/list/authorized = list( ) -/obj/machinery/computer/shuttle/attackby(obj/item/card/W as obj, mob/user as mob) - if(inoperable()) return +/obj/machinery/computer/shuttle/use_tool(obj/item/W, mob/living/user, list/click_params) + if(inoperable() || evacuation_controller.has_evacuated()) + return ..() var/datum/evacuation_controller/shuttle/evac_control = evacuation_controller if(!istype(evac_control)) to_chat(user, SPAN_DANGER("This console should not in use on this map. Please report this to a developer.")) - return + return TRUE - if ((!( istype(W, /obj/item/card) ) || evacuation_controller.has_evacuated() || !( user ))) - return - - if (istype(W, /obj/item/card/id)||istype(W, /obj/item/modular_computer)) + if (isid(W) || istype(W, /obj/item/modular_computer)) if (istype(W, /obj/item/modular_computer)) W = W.GetIdCard() if (!W:access) //no access to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") - return + return TRUE var/list/cardaccess = W:access if(!istype(cardaccess, /list) || !length(cardaccess)) //no access to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") - return + return TRUE if(!(access_bridge in W:access)) //doesn't have this access to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") - return 0 + return TRUE var/choice = alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - length(src.authorized)), "Shuttle Launch", "Authorize", "Repeal", "Abort") if(evacuation_controller.is_prepared() && user.get_active_hand() != W) - return 0 + return TRUE switch(choice) if("Authorize") - src.authorized -= W:registered_name - src.authorized += W:registered_name - if (src.auth_need - length(src.authorized) > 0) + authorized -= W:registered_name + authorized += W:registered_name + if (auth_need - length(authorized) > 0) message_admins("[key_name_admin(user)] has authorized early shuttle launch") log_game("[user.ckey] has authorized early shuttle launch") - to_world(SPAN_NOTICE("Alert: [src.auth_need - length(src.authorized)] authorizations needed until shuttle is launched early")) + to_world(SPAN_NOTICE("Alert: [auth_need - length(authorized)] authorizations needed until shuttle is launched early")) else message_admins("[key_name_admin(user)] has launched the shuttle") log_game("[user.ckey] has launched the shuttle early") to_world(SPAN_NOTICE("Alert: Shuttle launch time shortened to 10 seconds!")) evacuation_controller.set_launch_time(world.time+100) //src.authorized = null - qdel(src.authorized) - src.authorized = list( ) + qdel(authorized) + authorized = list( ) if("Repeal") - src.authorized -= W:registered_name - to_world(SPAN_NOTICE("Alert: [src.auth_need - length(src.authorized)] authorizations needed until shuttle is launched early")) + authorized -= W:registered_name + to_world(SPAN_NOTICE("Alert: [auth_need - length(authorized)] authorizations needed until shuttle is launched early")) if("Abort") to_world(SPAN_NOTICE("All authorizations to shortening time for shuttle launch have been revoked!")) - src.authorized.Cut() - src.authorized = list( ) + authorized.Cut() + authorized = list( ) + return TRUE - else if (istype(W, /obj/item/card/emag) && !emagged) + if (istype(W, /obj/item/card/emag) && !emagged) var/choice = alert(user, "Would you like to launch the shuttle?","Shuttle control", "Launch", "Cancel") if(!emagged && !evacuation_controller.is_prepared() && user.get_active_hand() == W) @@ -75,5 +74,7 @@ evacuation_controller.set_launch_time(world.time+100) emagged = TRUE if("Cancel") - return - return + return TRUE + return TRUE + + return ..() diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index cf8f46177f4c5..b66b50a5540c4 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -22,7 +22,7 @@ /obj/machinery/computer/station_alert/Initialize() alarm_monitor = new monitor_type(src) - alarm_monitor.register_alarm(src, /atom/proc/update_icon) + alarm_monitor.register_alarm(src, TYPE_PROC_REF(/atom, update_icon)) . = ..() if(monitor_type) register_monitor(new monitor_type(src)) @@ -36,7 +36,7 @@ return alarm_monitor = monitor - alarm_monitor.register_alarm(src, /atom/proc/update_icon) + alarm_monitor.register_alarm(src, TYPE_PROC_REF(/atom, update_icon)) /obj/machinery/computer/station_alert/proc/unregister_monitor() if(alarm_monitor) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 82ae96dda4cdd..52687833a9e23 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -4,7 +4,7 @@ /obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier. name = "machine frame" - icon = 'icons/obj/stock_parts.dmi' + icon = 'icons/obj/machines/frames.dmi' icon_state = "box_0" density = TRUE anchored = FALSE @@ -14,6 +14,7 @@ var/obj/item/stock_parts/circuitboard/circuit = null var/expected_machine_type atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + obj_flags = OBJ_FLAG_CAN_TABLE /obj/machinery/constructable_frame/state_transition(singleton/machine_construction/new_state) . = ..() @@ -37,10 +38,11 @@ icon_state = "box_0" /obj/machinery/constructable_frame/machine_frame/AltClick(mob/user) - . = ..() - if(!anchored) + if (!anchored) set_dir(turn(dir, -90)) to_chat(user, SPAN_NOTICE("You turn \the [src] around.")) + return TRUE + return ..() /obj/machinery/constructable_frame/machine_frame/deconstruct anchored = TRUE diff --git a/code/game/machinery/cracker.dm b/code/game/machinery/cracker.dm index 5d1ef0952f5a1..c7e40cce73aa0 100644 --- a/code/game/machinery/cracker.dm +++ b/code/game/machinery/cracker.dm @@ -1,7 +1,7 @@ /obj/machinery/portable_atmospherics/cracker name = "molecular cracking unit" desc = "An integrated catalytic water cracking system used to break H2O down into H and O. An advanced molecular extractor also allows it to isolate liquid deuterium from seawater." - icon = 'icons/obj/machines/cracker.dmi' + icon = 'icons/obj/machines/mining/cracker.dmi' icon_state = "cracker" construct_state = /singleton/machine_construction/default/panel_closed density = TRUE @@ -20,7 +20,12 @@ var/deuterium_generation_amount = 1 /obj/machinery/portable_atmospherics/cracker/on_update_icon() - icon_state = (use_power == POWER_USE_ACTIVE) ? "cracker_on" : "cracker" + ClearOverlays() + if(panel_open) + AddOverlays("[icon_state]_panel") + if(use_power == POWER_USE_ACTIVE) + AddOverlays(emissive_appearance(icon, "[icon_state]_lights")) + AddOverlays("[icon_state]_lights") /obj/machinery/portable_atmospherics/cracker/interface_interact(mob/user) if(use_power == POWER_USE_IDLE) @@ -31,19 +36,20 @@ update_icon() return TRUE -/obj/machinery/portable_atmospherics/cracker/attackby(obj/item/thing, mob/user) +/obj/machinery/portable_atmospherics/cracker/use_tool(obj/item/thing, mob/living/user, list/click_params) // remove deuterium as a reagent if(thing.is_open_container() && thing.reagents) if(!reagent_buffer[MATERIAL_DEUTERIUM] || reagent_buffer[MATERIAL_DEUTERIUM] <= 0) to_chat(user, SPAN_WARNING("There is no deuterium stored in \the [src].")) - return + return TRUE var/transfer_amt = min(thing.reagents.maximum_volume, reagent_buffer[MATERIAL_DEUTERIUM]) thing.reagents.add_reagent(MATERIAL_DEUTERIUM, transfer_amt) thing.update_icon() reagent_buffer[MATERIAL_DEUTERIUM] -= transfer_amt user.visible_message(SPAN_NOTICE("\The [user] siphons [transfer_amt] unit\s of deuterium from \the [src] into \the [thing].")) - return - . = ..() + return TRUE + + return ..() /obj/machinery/portable_atmospherics/cracker/power_change() . = ..() @@ -65,7 +71,7 @@ // Produce materials. var/turf/T = get_turf(src) if(istype(T)) - var/obj/effect/fluid/F = T.return_fluid() + var/obj/fluid/F = T.return_fluid() if(istype(F)) // Drink more water! diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 141d2473acbbc..202accab42dfb 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -2,7 +2,7 @@ /obj/machinery/atmospherics/unary/cryo_cell name = "cryo cell" - icon = 'icons/obj/cryogenics.dmi' // map only + icon = 'icons/obj/machines/medical/cryogenics.dmi' // map only icon_state = "pod_preview" density = TRUE anchored = TRUE @@ -28,9 +28,16 @@ var/current_heat_capacity = 50 + var/temperature_warning_threshhold = 170 + var/temperature_danger_threshhold = T0C + + var/fast_stasis_mult = 0.8 + var/slow_stasis_mult = 1.25 + var/current_stasis_mult = 1 + /obj/machinery/atmospherics/unary/cryo_cell/Initialize() . = ..() - icon = 'icons/obj/cryogenics_split.dmi' + icon = 'icons/obj/machines/medical/cryogenics_split.dmi' update_icon() atmos_init() @@ -53,11 +60,11 @@ /obj/machinery/atmospherics/unary/cryo_cell/examine(mob/user) . = ..() - if (user.Adjacent(src)) - if (beaker) - to_chat(user, "It is loaded with a beaker.") - if (occupant) - occupant.examine(arglist(args)) + if(user.Adjacent(src)) + if(beaker) + . += SPAN_NOTICE("It is loaded with a beaker.") + if(occupant) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(examinate), user, occupant), 0.1 SECONDS) /obj/machinery/atmospherics/unary/cryo_cell/Process() ..() @@ -82,6 +89,7 @@ temperature_archived = air_contents.temperature heat_gas_contents() expel_gas() + queue_icon_update() if(abs(temperature_archived-air_contents.temperature) > 1) network.update = 1 @@ -97,17 +105,17 @@ ui_interact(user) return TRUE - /** - * The ui_interact proc is used to open and update Nano UIs - * If ui_interact is not used then the UI will not update correctly - * ui_interact is currently defined for /atom/movable (which is inherited by /obj and /mob) - * - * @param user /mob The mob who is interacting with this ui - * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") - * @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui - * - * @return nothing - */ +/** + * The ui_interact proc is used to open and update Nano UIs + * If ui_interact is not used then the UI will not update correctly + * ui_interact is currently defined for /atom/movable (which is inherited by /obj and /mob) + * + * @param user /mob The mob who is interacting with this ui + * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") + * @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui + * + * @return nothing + */ /obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) if(user == occupant || user.stat) return @@ -138,9 +146,9 @@ data["cellTemperature"] = round(air_contents.temperature) data["cellTemperatureStatus"] = "good" - if(air_contents.temperature > T0C) // if greater than 273.15 kelvin (0 celsius) + if(air_contents.temperature >= temperature_danger_threshhold) // if greater than 273.15 kelvin (0 celsius) data["cellTemperatureStatus"] = "bad" - else if(air_contents.temperature > 225) + else if(air_contents.temperature >= temperature_warning_threshhold) data["cellTemperatureStatus"] = "average" data["isBeakerLoaded"] = beaker ? 1 : 0 @@ -151,6 +159,10 @@ data["beakerLabel"] = beaker.name data["beakerVolume"] = beaker.reagents.total_volume + data["fast_stasis_mult"] = fast_stasis_mult + data["slow_stasis_mult"] = slow_stasis_mult + data["current_stasis_mult"] = current_stasis_mult + // update the ui if it exists, returns null if no ui is passed/found ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) @@ -192,55 +204,83 @@ go_out() return TOPIC_REFRESH + if(href_list["goFast"]) + current_stasis_mult = fast_stasis_mult + update_icon() + return TOPIC_REFRESH + + if(href_list["goRegular"]) + current_stasis_mult = 1 + update_icon() + return TOPIC_REFRESH + + if(href_list["goSlow"]) + current_stasis_mult = slow_stasis_mult + update_icon() + return TOPIC_REFRESH + /obj/machinery/atmospherics/unary/cryo_cell/state_transition(singleton/machine_construction/default/new_state) . = ..() if(istype(new_state)) updateUsrDialog() -/obj/machinery/atmospherics/unary/cryo_cell/attackby(obj/G, mob/user as mob) - if(component_attackby(G, user)) +/obj/machinery/atmospherics/unary/cryo_cell/use_tool(obj/item/G, mob/living/user, list/click_params) + if (!istype(G, /obj/item/reagent_containers/glass)) + return ..() + + if (beaker) + to_chat(user, SPAN_WARNING("A beaker is already loaded into the machine.")) + return TRUE + if (!user.unEquip(G, src)) return TRUE - if(istype(G, /obj/item/reagent_containers/glass)) - if(beaker) - to_chat(user, SPAN_WARNING("A beaker is already loaded into the machine.")) - return - if(!user.unEquip(G, src)) - return // Temperature will be adjusted on Entered() - beaker = G - user.visible_message("[user] adds \a [G] to \the [src]!", "You add \a [G] to \the [src]!") - else if(istype(G, /obj/item/grab)) - var/obj/item/grab/grab = G - if(!ismob(grab.affecting)) - return - for(var/mob/living/carbon/slime/M in range(1,grab.affecting)) - if(M.Victim == grab.affecting) - to_chat(user, "[grab.affecting.name] will not fit into the cryo because they have a slime latched onto their head.") - return - if(put_mob(grab.affecting)) - qdel(G) - return + + beaker = G + user.visible_message("\The [user] adds \a [G] to \the [src]!", "You add \a [G] to \the [src]!") + return TRUE /obj/machinery/atmospherics/unary/cryo_cell/on_update_icon() - overlays.Cut() + ClearOverlays() icon_state = "pod[on]" var/image/I + if(panel_open) + AddOverlays("pod_panel") + I = image(icon, "pod[on]_top") I.pixel_z = 32 - overlays += I + AddOverlays(I) if(occupant) var/image/pickle = image(occupant.icon, occupant.icon_state) - pickle.overlays = occupant.overlays - pickle.pixel_z = 18 - overlays += pickle + pickle.CopyOverlays(occupant) + pickle.pixel_z = 11 + AddOverlays(pickle) I = image(icon, "lid[on]") - overlays += I + AddOverlays(I) I = image(icon, "lid[on]_top") I.pixel_z = 32 - overlays += I + AddOverlays(I) + + if (powered()) + var/warn_state = "off" + if (on) + warn_state = "safe" + if (air_contents.temperature >= temperature_danger_threshhold) + warn_state = "danger" + else if (air_contents.temperature >= temperature_warning_threshhold) + warn_state = "warn" + I = overlay_image(icon, "lights_[warn_state]") + AddOverlays(I) + I = overlay_image(icon, "lights_[warn_state]_top") + I.pixel_z = 32 + AddOverlays(I) + AddOverlays(emissive_appearance(icon, "lights_mask")) + I = emissive_appearance(icon, "lights_mask_top") + I.pixel_z = 32 + AddOverlays(I) + /obj/machinery/atmospherics/unary/cryo_cell/proc/process_occupant() if(air_contents.total_moles < 10) @@ -289,60 +329,61 @@ /obj/machinery/atmospherics/unary/cryo_cell/AltClick(mob/user) if(CanDefaultInteract(user)) go_out() - else - ..() + return TRUE + return ..() /obj/machinery/atmospherics/unary/cryo_cell/CtrlClick(mob/user) if(CanDefaultInteract(user)) on = !on update_icon() - -/obj/machinery/atmospherics/unary/cryo_cell/proc/put_mob(mob/living/carbon/M as mob) - if (inoperable()) - to_chat(usr, SPAN_WARNING("The cryo cell is not functioning.")) - return - if (!istype(M)) - to_chat(usr, SPAN_DANGER("The cryo cell cannot handle such a lifeform!")) - return - if (occupant) - to_chat(usr, SPAN_DANGER("The cryo cell is already occupied!")) - return - if (M.abiotic()) - to_chat(usr, SPAN_WARNING("Subject may not have abiotic items on.")) - return - if(!node) - to_chat(usr, SPAN_WARNING("The cell is not correctly connected to its pipe network!")) - return - if (M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - M.stop_pulling() - M.forceMove(src) - M.ExtinguishMob() - if(M.health > -100 && (M.health < 0 || M.sleeping)) - to_chat(M, SPAN_NOTICE("You feel a cold liquid surround you. Your skin starts to freeze up.")) - occupant = M + return TRUE + return FALSE + +/obj/machinery/atmospherics/unary/cryo_cell/proc/put_mob(mob/living/carbon/target, mob/user) + add_fingerprint(user) //Add fingerprints for trying to go in. + if (!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) + return FALSE + if (!user_can_move_target_inside(target, user)) + return FALSE + if (target.client) + target.client.perspective = EYE_PERSPECTIVE + target.client.eye = src + target.stop_pulling() + target.forceMove(src) + target.ExtinguishMob() + if (target.health > -100 && (target.health < 0 || target.sleeping)) + to_chat(target, SPAN_NOTICE("You feel a cold liquid surround you. Your skin starts to freeze up.")) + occupant = target current_heat_capacity = HEAT_CAPACITY_HUMAN update_use_power(POWER_USE_ACTIVE) - add_fingerprint(usr) + if (user != target) + add_fingerprint(target) //Add fingerprints of the person stuffed in. update_icon() SetName("[name] ([occupant])") - return 1 + target.remove_grabs_and_pulls() + return TRUE + +/obj/machinery/atmospherics/unary/cryo_cell/user_can_move_target_inside(mob/target, mob/user) + if (occupant) + to_chat(user, SPAN_WARNING("\The [src] is already occupied!")) + return FALSE + if (!node) + to_chat(usr, SPAN_WARNING("The cell is not correctly connected to its pipe network!")) + return FALSE + return ..() - //Like grab-putting, but for mouse-dropping. /obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(mob/target, mob/user) - if(!CanMouseDrop(target, user)) - return - if (!istype(target)) + if (!CanMouseDrop(target, user) || !ismob(target)) return - if (target.buckled) - to_chat(user, SPAN_WARNING("Unbuckle the subject before attempting to move them.")) + if (!user_can_move_target_inside(target, user)) return + user.visible_message(SPAN_NOTICE("\The [user] begins placing \the [target] into \the [src]."), SPAN_NOTICE("You start placing \the [target] into \the [src].")) - if(!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - put_mob(target) + put_mob(target, user) +/obj/machinery/atmospherics/unary/cryo_cell/use_grab(obj/item/grab/grab, list/click_params) //Grab is deleted at the level of put_mob if all checks are passed. + MouseDrop_T(grab.affecting, grab.assailant) + return TRUE /obj/machinery/atmospherics/unary/cryo_cell/verb/move_eject() set name = "Eject occupant" @@ -367,13 +408,9 @@ set name = "Move Inside" set category = "Object" set src in oview(1) - for(var/mob/living/carbon/slime/M in range(1,usr)) - if(M.Victim == usr) - to_chat(usr, "You're too busy getting your life sucked out of you.") - return if (usr.stat != 0) return - put_mob(usr) + put_mob(usr, usr) return /obj/machinery/atmospherics/unary/cryo_cell/return_air() @@ -395,6 +432,12 @@ else return null +/obj/machinery/atmospherics/unary/cryo_cell/RefreshParts() + ..() + var/stasis_coeff = total_component_rating_of_type(/obj/item/stock_parts/manipulator) + fast_stasis_mult = max(1 - (stasis_coeff * 0.06), 0.66) + slow_stasis_mult = min(1 + (stasis_coeff * 0.08), 1.5) + /datum/data/function/proc/reset() return diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index ad237cc9e3060..4e7f1deea3e77 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -11,10 +11,11 @@ /obj/machinery/computer/cryopod name = "cryogenic oversight console" desc = "An interface between crew and the cryogenic storage oversight systems." - icon = 'icons/obj/Cryogenic2.dmi' + icon = 'icons/obj/machines/medical/cryopod.dmi' icon_state = "cellconsole" density = FALSE interact_offline = 1 + stat_immune = MACHINE_STAT_NOSCREEN | MACHINE_STAT_NOINPUT | MACHINE_STAT_NOPOWER var/mode = null //Used for logging people entering cryosleep and important items they are carrying. @@ -29,13 +30,16 @@ /obj/machinery/computer/cryopod/robot name = "robotic storage console" desc = "An interface between crew and the robotic storage systems." - icon = 'icons/obj/robot_storage.dmi' + icon = 'icons/obj/machines/robot_storage.dmi' icon_state = "console" storage_type = "cyborgs" storage_name = "Robotic Storage Control" allow_items = 0 +/obj/machinery/computer/cryopod/on_update_icon() + return + /obj/machinery/computer/cryopod/interface_interact(mob/user) interact(user) return TRUE @@ -112,12 +116,12 @@ . = TOPIC_REFRESH /obj/item/stock_parts/circuitboard/cryopodcontrol - name = "Circuit board (Cryogenic Oversight Console)" + name = "circuit board (cryogenic oversight console)" build_path = /obj/machinery/computer/cryopod origin_tech = list(TECH_DATA = 3) /obj/item/stock_parts/circuitboard/robotstoragecontrol - name = "Circuit board (Robotic Storage Console)" + name = "circuit board (robotic storage console)" build_path = /obj/machinery/computer/cryopod/robot origin_tech = list(TECH_DATA = 3) @@ -126,7 +130,7 @@ name = "cryogenic feed" desc = "A bewildering tangle of machinery and pipes." - icon = 'icons/obj/Cryogenic2.dmi' + icon = 'icons/obj/machines/medical/cryogenic_legacy.dmi' icon_state = "cryo_rear" anchored = TRUE dir = WEST @@ -135,14 +139,14 @@ /obj/machinery/cryopod name = "cryogenic freezer" desc = "A man-sized pod for entering suspended animation." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "body_scanner_0" + icon = 'icons/obj/machines/medical/cryopod.dmi' + icon_state = "cryopod" density = TRUE anchored = TRUE dir = WEST - var/base_icon_state = "body_scanner_0" - var/occupied_icon_state = "body_scanner_1" + var/base_icon_state = "cryopod" + var/occupied_icon_state = "cryopod_closed" var/on_store_message = "has entered long-term storage." var/on_store_visible_message = "hums and hisses as it moves $occupant$ into storage." // $occupant$ is automatically converted to the occupant's name var/on_store_name = "Cryogenic Oversight" @@ -153,7 +157,6 @@ var/mob/occupant = null // Person waiting to be despawned. var/time_till_despawn = 9000 // Down to 15 minutes //30 minutes-ish is too long var/time_entered = 0 // Used to keep track of the safe period. - var/obj/item/device/radio/intercom/announce // var/announce_despawn = TRUE var/obj/machinery/computer/cryopod/control_computer @@ -180,7 +183,7 @@ /obj/machinery/cryopod/robot name = "robotic storage unit" desc = "A storage unit for robots." - icon = 'icons/obj/robot_storage.dmi' + icon = 'icons/obj/machines/robot_storage.dmi' icon_state = "pod_0" base_icon_state = "pod_0" occupied_icon_state = "pod_1" @@ -223,9 +226,9 @@ var/list/possible_locations = list() if(GLOB.using_map.use_overmap) - var/obj/effect/overmap/visitable/O = map_sectors["[z]"] - for(var/obj/effect/overmap/visitable/OO in range(O,2)) - if(OO.in_space || istype(OO,/obj/effect/overmap/visitable/sector/exoplanet)) + var/obj/overmap/visitable/O = map_sectors["[z]"] + for(var/obj/overmap/visitable/OO in range(O,2)) + if(HAS_FLAGS(OO.sector_flags, OVERMAP_SECTOR_IN_SPACE) || istype(OO,/obj/overmap/visitable/sector/exoplanet)) possible_locations |= text2num(level) var/newz = GLOB.using_map.get_empty_zlevel() @@ -244,29 +247,27 @@ launch() ..() -/obj/machinery/cryopod/New() - announce = new /obj/item/device/radio/intercom(src) - ..() - /obj/machinery/cryopod/Destroy() if(occupant) occupant.forceMove(loc) . = ..() -/obj/machinery/cryopod/Initialize() +/obj/machinery/cryopod/Initialize(mapload, ...) + . = ..() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/cryopod/LateInitialize(mapload, ...) . = ..() find_control_computer() -/obj/machinery/cryopod/proc/find_control_computer(urgent=0) - // Workaround for http://www.byond.com/forum/?post=2007448 - for(var/obj/machinery/computer/cryopod/C in src.loc.loc) - control_computer = C - break - // control_computer = locate(/obj/machinery/computer/cryopod) in src.loc.loc +/obj/machinery/cryopod/proc/find_control_computer(urgent = FALSE) + var/area/my_area = get_area(src) + if(my_area) + control_computer = locate(/obj/machinery/computer/cryopod) in my_area.machinery_list // Don't send messages unless we *need* the computer, and less than five minutes have passed since last time we messaged - if(!control_computer && urgent && last_no_computer_message + 5*60*10 < world.time) - log_and_message_admins("Cryopod in [src.loc.loc] could not find control computer!") + if(!control_computer && urgent && last_no_computer_message + 5 MINUTES < world.time) + log_and_message_admins("Cryopod in [my_area] could not find control computer!") last_no_computer_message = world.time return control_computer != null @@ -286,10 +287,10 @@ return 1 -/obj/machinery/cryopod/examine(mob/user) +/obj/machinery/cryopod/examine(mob/user, distance, is_adjacent) . = ..() - if (occupant && user.Adjacent(src)) - occupant.examine(arglist(args)) + if(occupant && is_adjacent) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(examinate), user, occupant), 0.1 SECONDS) //Lifted from Unity stasis.dm and refactored. /obj/machinery/cryopod/Process() @@ -310,21 +311,6 @@ despawn_occupant() -// This function can not be undone; do not call this unless you are sure -// Also make sure there is a valid control computer -/obj/machinery/cryopod/robot/despawn_occupant() - var/mob/living/silicon/robot/R = occupant - if(!istype(R)) return ..() - - qdel(R.mmi) - for(var/obj/item/I in R.module) // the tools the borg has; metal, glass, guns etc - for(var/obj/item/O in I) // the things inside the tools, if anything; mainly for janiborg trash bags - O.forceMove(R) - qdel(I) - qdel(R.module) - - . = ..() - // This function can not be undone; do not call this unless you are sure // Also make sure there is a valid control computer /obj/machinery/cryopod/proc/despawn_occupant() @@ -334,6 +320,14 @@ log_and_message_admins("A mob was deleted while in a cryopod, or the cryopod double-processed. This may cause errors!") return + if (istype(occupant, /mob/living/carbon/human)) + var/mob/living/carbon/human/human = occupant + var/record_name = human.get_id_name("") + if (record_name) + var/datum/computer_file/report/crew_record/record = get_crewmember_record(record_name) + if (record) + record.set_status("Stored") + //Drop all items into the pod. for(var/obj/item/W in occupant) occupant.drop_from_inventory(W) @@ -348,7 +342,6 @@ //Delete all items not on the preservation list. var/list/items = src.contents.Copy() items -= occupant // Don't delete the occupant - items -= announce // or the autosay radio. items -= component_parts for(var/obj/item/W in items) @@ -394,13 +387,6 @@ occupant.mind.objectives = null occupant.mind.special_role = null - // Delete them from datacore. - var/sanitized_name = occupant.real_name - sanitized_name = sanitize(sanitized_name) - var/datum/computer_file/report/crew_record/R = get_crewmember_record(sanitized_name) - if(R) - qdel(R) - icon_state = base_icon_state //TODO: Check objectives/mode, update new targets if this mob is the target, spawn new antags? @@ -418,7 +404,7 @@ log_and_message_admins("[key_name(occupant)] ([role_alt_title]) entered cryostorage.") if(announce_despawn) - invoke_async(announce, /obj/item/device/radio/proc/autosay, "[occupant.real_name], [role_alt_title], [on_store_message]", "[on_store_name]") + invoke_async(GLOB.global_announcer, TYPE_PROC_REF(/obj/item/device/radio, autosay), "[occupant.real_name], [role_alt_title], [on_store_message]", "[on_store_name]", "Common") var/despawnmessage = replacetext(on_store_visible_message, "$occupant$", occupant.real_name) visible_message(SPAN_NOTICE("\The [initial(name)] " + despawnmessage), range = 3) @@ -451,45 +437,40 @@ if (!user.Adjacent(target)) to_chat(user, SPAN_WARNING("\The [target] isn't close enough.")) return - add_fingerprint(user) + add_fingerprint(user) //Add fingerprints for trying to go in. if (!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) return - if (QDELETED(target)) + if (!user_can_move_target_inside(target, user)) return if (!user.Adjacent(target)) to_chat(user, SPAN_WARNING("\The [target] isn't close enough.")) return set_occupant(target) if (user != target) - add_fingerprint(target) + add_fingerprint(target) //Add fingerprints of the person stuffed in. log_and_message_admins("placed [target == user ? "themself" : key_name_admin(target)] into \a [src]") + target.remove_grabs_and_pulls() + +/obj/machinery/cryopod/user_can_move_target_inside(mob/target, mob/user) + if (occupant) + to_chat(user, SPAN_WARNING("\The [src] is already occupied!")) + return FALSE + if (!check_occupant_allowed(target)) + return FALSE + return ..() -//Like grap-put, but for mouse-drop. /obj/machinery/cryopod/MouseDrop_T(mob/target, mob/user) - if(!check_occupant_allowed(target)) + if (!CanMouseDrop(target, user) || !ismob(target)) return - if(occupant) - to_chat(user, SPAN_NOTICE("\The [src] is in use.")) + if (!user_can_move_target_inside(target, user)) return user.visible_message(SPAN_NOTICE("\The [user] begins placing \the [target] into \the [src]."), SPAN_NOTICE("You start placing \the [target] into \the [src].")) attempt_enter(target, user) -/obj/machinery/cryopod/attackby(obj/item/G as obj, mob/user as mob) - - if(istype(G, /obj/item/grab)) - var/obj/item/grab/grab = G - if(occupant) - to_chat(user, SPAN_NOTICE("\The [src] is in use.")) - return - - if(!ismob(grab.affecting)) - return - - if(!check_occupant_allowed(grab.affecting)) - return - - attempt_enter(grab.affecting, user) +/obj/machinery/cryopod/use_grab(obj/item/grab/grab, list/click_params) //Grab is deleted at the level of attempt_enter if all checks are passed. + MouseDrop_T(grab.affecting, grab.assailant) + return TRUE /obj/machinery/cryopod/verb/eject() set name = "Eject Pod" @@ -503,7 +484,6 @@ //Eject any items that aren't meant to be in the pod. var/list/items = contents - component_parts if(occupant) items -= occupant - if(announce) items -= announce for(var/obj/item/W in items) W.dropInto(loc) @@ -591,7 +571,7 @@ /obj/structure/broken_cryo name = "broken cryo sleeper" desc = "Whoever was inside isn't going to wake up now. It looks like you could pry it open with a crowbar." - icon = 'icons/obj/Cryogenic2.dmi' + icon = 'icons/obj/machines/medical/cryopod.dmi' icon_state = "broken_cryo" anchored = TRUE density = TRUE @@ -606,22 +586,28 @@ else to_chat(user, SPAN_NOTICE("The glass is already open.")) -/obj/structure/broken_cryo/attackby(obj/item/W as obj, mob/user as mob) - if (busy) - to_chat(user, SPAN_NOTICE("Someone else is attempting to open this.")) +/obj/structure/broken_cryo/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if (!closed) + USE_FEEDBACK_FAILURE("[src] is already open.") return - if (closed) - if (isCrowbar(W)) - busy = 1 - visible_message("[user] starts to pry the glass cover off of \the [src].") - if (!do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - visible_message("[user] stops trying to pry the glass off of \the [src].") - busy = 0 - return - closed = 0 - busy = 0 - icon_state = "broken_cryo_open" - var/obj/dead = new remains_type(loc) - dead.dir = src.dir//skeleton is oriented as cryo - else - to_chat(user, SPAN_NOTICE("The glass cover is already open.")) + busy = TRUE + user.visible_message( + SPAN_NOTICE("[user] starts prying [src]'s cover off with [tool]."), + SPAN_NOTICE("You start prying [src]'s cover off with [tool].") + ) + if(!tool.use_as_tool(src, user, 5 SECONDS, volume = 50, skill_path = list(SKILL_CONSTRUCTION, SKILL_DEVICES), do_flags = DO_REPAIR_CONSTRUCT) || !closed) + return + closed = FALSE + update_icon() + var/obj/dead = new remains_type(loc) + dead.dir = dir + user.visible_message( + SPAN_NOTICE("[user] opens [src]'s cover with [tool], exposing [dead]."), + SPAN_NOTICE("You open [src]'s cover with [tool], exposing [dead].") + ) + +/obj/structure/broken_cryo/on_update_icon() + icon_state = initial(icon_state) + if (!closed) + icon_state += "_open" diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index b4190cebcbc39..40dc799ccfad9 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -12,7 +12,7 @@ /obj/machinery/door/airlock name = "airlock" icon = 'icons/obj/doors/station/door.dmi' - icon_state = "preview" + icon_state = "closed" power_channel = ENVIRON interact_offline = FALSE @@ -21,8 +21,6 @@ var/ai_control_disabled = FALSE /// Boolean. Whether or not the AI has bypassed a disabled control mechanism. var/ai_control_bypassed = FALSE - /// Boolean. If set, the door cannot by hacked or bypassed by the AI. - var/hackProof = FALSE /// Integer. World time when the door is no longer electrified. -1 if it is permanently electrified until someone fixes it. var/electrified_until = 0 /// Integer. World time when main power is restored. @@ -41,8 +39,6 @@ var/lights = TRUE /// Boolean. Whether or not the ID scanner is enabled. Tied to the ID scan wire. var/aiDisabledIdScanner = FALSE - /// Boolean. Whether or not the AI is currently hacking the door. - var/aiHacking = FALSE autoclose = TRUE /// Path. The assembly structure used to create this door. Used during disassembly steps. var/assembly_type = /obj/structure/door_assembly @@ -66,8 +62,6 @@ var/close_sound_powered = 'sound/machines/airlock_close.ogg' /// Soundfile. The sound played when the door closes while unpowered. var/close_sound_unpowered = 'sound/machines/airlock_close_force.ogg' - /// Soundfile. The sound played when the door cannot close because it's blocked. - var/close_failure_blocked = 'sound/machines/triple_beep.ogg' /// Soundfile. The sound played when the door is unlocked/unbolted. var/bolts_rising = 'sound/machines/bolts_up.ogg' /// Soundfile. The sound played when the door is locked/bolted. @@ -157,6 +151,10 @@ stripe_color = COLOR_CYAN /obj/machinery/door/airlock/research + door_color = COLOR_WHITE + stripe_color = COLOR_RESEARCH + +/obj/machinery/door/airlock/corporate door_color = COLOR_WHITE stripe_color = COLOR_BOTTLE_GREEN @@ -267,16 +265,15 @@ frequency = 1380 locked = 1 -/obj/machinery/door/airlock/external/escapepod/attackby(obj/item/C, mob/user) - if(p_open && !arePowerSystemsOn()) - if(isWrench(C)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - user.visible_message(SPAN_WARNING("[user.name] starts frantically pumping the bolt override mechanism!"), SPAN_WARNING("You start frantically pumping the bolt override mechanism!")) - if(do_after(user, 16 SECONDS, src, DO_REPAIR_CONSTRUCT)) - visible_message("\The [src] bolts [locked ? "disengage" : "engage"]!") - locked = !locked - return - ..() +/obj/machinery/door/airlock/external/escapepod/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!p_open || arePowerSystemsOn()) + return + user.visible_message(SPAN_WARNING("[user.name] starts frantically pumping the bolt override mechanism!"), SPAN_WARNING("You start frantically pumping the bolt override mechanism!")) + if(!tool.use_as_tool(src, user, 16 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + visible_message("[src] bolts [locked ? "disengage" : "engage"]!") + locked = !locked /obj/machinery/door/airlock/external/bolted locked = 1 @@ -345,10 +342,10 @@ mineral = MATERIAL_PHORON /obj/machinery/door/airlock/centcom - airlock_type = "centcomm" + airlock_type = "centcom" name = "\improper Airlock" - icon = 'icons/obj/doors/centcomm/door.dmi' - fill_file = 'icons/obj/doors/centcomm/fill_steel.dmi' + icon = 'icons/obj/doors/centcom/door.dmi' + fill_file = 'icons/obj/doors/centcom/fill_steel.dmi' /obj/machinery/door/airlock/highsecurity airlock_type = "secure" @@ -431,7 +428,7 @@ /obj/machinery/door/airlock/phoron/proc/PhoronBurn(temperature) for(var/turf/simulated/floor/target_tile in range(2,loc)) target_tile.assume_gas(GAS_PHORON, 35, 400+T0C) - addtimer(new Callback(target_tile, /turf/proc/hotspot_expose, 400), 0) + addtimer(CALLBACK(target_tile, TYPE_PROC_REF(/turf, hotspot_expose), 400), 0) for(var/turf/simulated/wall/W in range(3,src)) W.burn((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame for(var/obj/machinery/door/airlock/phoron/D in range(3,src)) @@ -447,7 +444,7 @@ About the new airlock wires panel: * one wire for door bolts. Sending a pulse through this drops door bolts (whether the door is powered or not) or raises them (if it is). Cutting this wire also drops the door bolts, and mending it does not raise them. If the wire is cut, trying to raise the door bolts will not work. * two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter). Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user. * one wire for opening the door. Sending a pulse through this while the door has power makes it open the door if no access is required. -* one wire for AI control. Sending a pulse through this blocks AI control for a second or so (which is enough to see the AI control light on the panel dialog go off and back on again). Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all. +* one wire for AI control. Sending a pulse through this blocks AI control for a second or so (which is enough to see the AI control light on the panel dialog go off and back on again). Cutting this prevents the AI from controlling the door. If both main and backup power are cut, as well as this wire, then the AI cannot operate the door at all. * one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds. Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted. (Currently it is also STAYING electrified until someone mends the wire) * one wire for controling door safetys. When active, door does not close on someone. When cut, door will ruin someone's shit. When pulsed, door will immedately ruin someone's shit. * one wire for controlling door speed. When active, dor closes at normal rate. When cut, door does not close manually. When pulsed, door attempts to close every tick. @@ -482,9 +479,6 @@ About the new airlock wires panel: /obj/machinery/door/airlock/proc/canAIControl() return ((!ai_control_disabled || ai_control_bypassed) && !isAllPowerLoss()) -/obj/machinery/door/airlock/proc/canAIHack() - return (ai_control_disabled && !ai_control_bypassed && !hackProof && !isAllPowerLoss()) - /obj/machinery/door/airlock/proc/arePowerSystemsOn() if (inoperable()) return 0 @@ -565,7 +559,7 @@ About the new airlock wires panel: else if(duration) //electrify door for the given duration seconds if(usr) shockedby += text("\[[time_stamp()]\] - [key_name(usr)]") - admin_attacker_log(usr, "electrified \the [name] [duration == -1 ? "permanently" : "for [duration] second\s"]") + admin_attacker_log(usr, "electrified [name] [duration == -1 ? "permanently" : "for [duration] second\s"]") else shockedby += text("\[[time_stamp()]\] - EMP)") message = "The door is now electrified [duration == -1 ? "permanently" : "for [duration] second\s"]." @@ -623,7 +617,7 @@ About the new airlock wires panel: return 0 -/obj/machinery/door/airlock/on_update_icon(state=0, override=0) +/obj/machinery/door/airlock/on_update_icon(state = 0) if(connections in list(NORTH, SOUTH, NORTH|SOUTH)) if(connections in list(WEST, EAST, EAST|WEST)) set_dir(SOUTH) @@ -645,31 +639,24 @@ About the new airlock wires panel: if(AIRLOCK_CLOSED) icon_state = "closed" if(AIRLOCK_OPENING, AIRLOCK_CLOSING, AIRLOCK_EMAG, AIRLOCK_DENY) - icon_state = "" + icon_state = "blank" set_airlock_overlays(state) -/obj/machinery/door/airlock/proc/set_airlock_overlays(state) - var/icon/color_overlay - var/icon/filling_overlay - var/icon/stripe_overlay - var/icon/stripe_filling_overlay - var/icon/lights_overlay - var/icon/panel_overlay - var/icon/weld_overlay - var/icon/damage_overlay - var/icon/sparks_overlay - var/icon/brace_overlay +/obj/machinery/door/airlock/proc/set_airlock_overlays(state) set_light(0) - - if(door_color && !(door_color == "none")) + var/list/new_overlays = list() + if(door_color && door_color != "none") var/ikey = "[airlock_type]-[door_color]-color" - color_overlay = airlock_icon_cache["[ikey]"] + var/icon/color_overlay = airlock_icon_cache["[ikey]"] if(!color_overlay) color_overlay = new(color_file) color_overlay.Blend(door_color, ICON_MULTIPLY) airlock_icon_cache["[ikey]"] = color_overlay + if (color_overlay) + new_overlays += color_overlay + var/icon/filling_overlay if(glass) if (window_color && window_color != "none") var/ikey = "[airlock_type]-[window_color]-windowcolor" @@ -681,7 +668,7 @@ About the new airlock wires panel: else filling_overlay = glass_file else - if(door_color && !(door_color == "none")) + if(door_color && door_color != "none") var/ikey = "[airlock_type]-[door_color]-fillcolor" filling_overlay = airlock_icon_cache["[ikey]"] if(!filling_overlay) @@ -690,78 +677,64 @@ About the new airlock wires panel: airlock_icon_cache["[ikey]"] = filling_overlay else filling_overlay = fill_file - if(stripe_color && !(stripe_color == "none")) + if (filling_overlay) + new_overlays += filling_overlay + if(stripe_color && stripe_color != "none") + var/icon/stripe_overlay var/ikey = "[airlock_type]-[stripe_color]-stripe" stripe_overlay = airlock_icon_cache["[ikey]"] if(!stripe_overlay) stripe_overlay = new(stripe_file) stripe_overlay.Blend(stripe_color, ICON_MULTIPLY) airlock_icon_cache["[ikey]"] = stripe_overlay + if (stripe_overlay) + new_overlays += stripe_overlay if(!glass) + var/icon/stripe_filling_overlay var/ikey2 = "[airlock_type]-[stripe_color]-fillstripe" stripe_filling_overlay = airlock_icon_cache["[ikey2]"] if(!stripe_filling_overlay) stripe_filling_overlay = new(stripe_fill_file) stripe_filling_overlay.Blend(stripe_color, ICON_MULTIPLY) airlock_icon_cache["[ikey2]"] = stripe_filling_overlay - + if (stripe_filling_overlay) + new_overlays += stripe_filling_overlay if(arePowerSystemsOn()) switch(state) if(AIRLOCK_CLOSED) if(lights && locked) - lights_overlay = bolts_file - set_light(0.25, 0.1, 1, 2, COLOR_RED_LIGHT) - + new_overlays += overlay_image(bolts_file, plane = EFFECTS_ABOVE_LIGHTING_PLANE, layer = ABOVE_LIGHTING_LAYER) + set_light(2, 0.75, COLOR_RED_LIGHT) if(AIRLOCK_DENY) if(lights) - lights_overlay = deny_file - set_light(0.25, 0.1, 1, 2, COLOR_RED_LIGHT) - + new_overlays += overlay_image(deny_file, plane = EFFECTS_ABOVE_LIGHTING_PLANE, layer = ABOVE_LIGHTING_LAYER) + set_light(2, 0.75, COLOR_RED_LIGHT) if(AIRLOCK_EMAG) - sparks_overlay = emag_file - + new_overlays += overlay_image(emag_file, plane = EFFECTS_ABOVE_LIGHTING_PLANE, layer = ABOVE_LIGHTING_LAYER) if(AIRLOCK_CLOSING) if(lights) - lights_overlay = lights_file - set_light(0.25, 0.1, 1, 2, COLOR_LIME) - + new_overlays += overlay_image(lights_file, plane = EFFECTS_ABOVE_LIGHTING_PLANE, layer = ABOVE_LIGHTING_LAYER) + set_light(2, 0.75, COLOR_LIME) if(AIRLOCK_OPENING) if(lights) - lights_overlay = lights_file - set_light(0.25, 0.1, 1, 2, COLOR_LIME) - + new_overlays += overlay_image(lights_file, plane = EFFECTS_ABOVE_LIGHTING_PLANE, layer = ABOVE_LIGHTING_LAYER) + set_light(2, 0.75, COLOR_LIME) if(MACHINE_IS_BROKEN(src)) - damage_overlay = sparks_broken_file + new_overlays += overlay_image(sparks_broken_file, plane = EFFECTS_ABOVE_LIGHTING_PLANE, layer = ABOVE_LIGHTING_LAYER) else if (get_damage_percentage() >= 25) - damage_overlay = sparks_damaged_file - + new_overlays += overlay_image(sparks_damaged_file, plane = EFFECTS_ABOVE_LIGHTING_PLANE, layer = ABOVE_LIGHTING_LAYER) if(welded) - weld_overlay = welded_file - + new_overlays += welded_file if(p_open) - panel_overlay = panel_file - + new_overlays += panel_file if(brace) brace.update_icon() - brace_overlay += image(brace.icon, brace.icon_state) - - overlays.Cut() + new_overlays += image(brace.icon, brace.icon_state) + SetOverlays(new_overlays) + ImmediateOverlayUpdate() - overlays += color_overlay - overlays += filling_overlay - overlays += stripe_overlay - overlays += stripe_filling_overlay - overlays += panel_overlay - overlays += weld_overlay - overlays += brace_overlay - overlays += lights_overlay - overlays += sparks_overlay - overlays += damage_overlay /obj/machinery/door/airlock/do_animate(animation) - if(overlays) - overlays.Cut() - switch(animation) if("opening") set_airlock_overlays(AIRLOCK_OPENING) @@ -785,7 +758,7 @@ About the new airlock wires panel: flick("deny", src) else update_icon() - return + /obj/machinery/door/airlock/attack_robot(mob/user) ui_interact(user) @@ -804,6 +777,10 @@ About the new airlock wires panel: data["electrified"] = round(electrified_until > 0 ? max(electrified_until - world.time, 0) / 10 : electrified_until, 1) data["open"] = !density + // [SIERRA-ADD] - NTNet gimmics + data["airlock_ntnet_id"] = NTNet_id + // [/SIERRA-ADD] + var/commands[0] commands[LIST_PRE_INC(commands)] = list("name" = "IdScan", "command"= "idscan", "active" = !aiDisabledIdScanner, "enabled" = "Enabled", "disabled" = "Disable", "danger" = 0, "act" = 1) commands[LIST_PRE_INC(commands)] = list("name" = "Bolts", "command"= "bolts", "active" = !locked, "enabled" = "Raised ", "disabled" = "Dropped", "danger" = 0, "act" = 0) @@ -821,64 +798,26 @@ About the new airlock wires panel: ui.open() ui.set_auto_update(1) -/obj/machinery/door/airlock/proc/hack(mob/user as mob) - if (!aiHacking) - aiHacking = TRUE - spawn(20) - //TODO: Make this take a minute - to_chat(user, "Airlock AI control has been blocked. Beginning fault-detection.") - sleep(50) - if(src.canAIControl()) - to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") - aiHacking = FALSE - return - else if(!src.canAIHack(user)) - to_chat(user, "We've lost our connection! Unable to hack airlock.") - aiHacking = FALSE - return - to_chat(user, "Fault confirmed: airlock control wire disabled or cut.") - sleep(20) - to_chat(user, "Attempting to hack into airlock. This may take some time.") - sleep(200) - if(src.canAIControl()) - to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") - aiHacking = FALSE - return - else if(!src.canAIHack(user)) - to_chat(user, "We've lost our connection! Unable to hack airlock.") - aiHacking = FALSE - return - to_chat(user, "Upload access confirmed. Loading control program into airlock software.") - sleep(170) - if(src.canAIControl()) - to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") - aiHacking = FALSE - return - else if(!src.canAIHack(user)) - to_chat(user, "We've lost our connection! Unable to hack airlock.") - aiHacking = FALSE - return - to_chat(user, "Transfer complete. Forcing airlock to execute program.") - sleep(50) - //disable blocked control - ai_control_bypassed = TRUE - to_chat(user, "Receiving control information from airlock.") - sleep(10) - //bring up airlock dialog - aiHacking = FALSE - if (user) - src.attack_ai(user) - /obj/machinery/door/airlock/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if (src.isElectrified()) if (istype(mover, /obj/item)) var/obj/item/i = mover if (i.matter && (MATERIAL_STEEL in i.matter) && i.matter[MATERIAL_STEEL] > 0) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread s.set_up(5, 1, src) s.start() return ..() +/obj/machinery/door/airlock/attack_hand(mob/user) + if (MUTATION_FERAL in user.mutations) + if (src.welded) + to_chat(user, SPAN_WARNING("You can't pry [src] open, it's welded shut!")) + return + if (src.locked) + to_chat(user, SPAN_WARNING("You can't pry [src] open, it's bolted tight!")) + return + return ..() + /obj/machinery/door/airlock/physical_attack_hand(mob/user) if(!istype(usr, /mob/living/silicon)) if(src.isElectrified()) @@ -890,13 +829,10 @@ About the new airlock wires panel: to_chat(user, SPAN_WARNING("Unable to interface: Internal error.")) return STATUS_CLOSE if(issilicon(user) && !src.canAIControl()) - if(src.canAIHack(user)) - src.hack(user) + if (src.isAllPowerLoss()) //don't really like how this gets checked a second time, but not sure how else to do it. + to_chat(user, SPAN_WARNING("Unable to interface: Connection timed out.")) else - if (src.isAllPowerLoss()) //don't really like how this gets checked a second time, but not sure how else to do it. - to_chat(user, SPAN_WARNING("Unable to interface: Connection timed out.")) - else - to_chat(user, SPAN_WARNING("Unable to interface: Connection refused.")) + to_chat(user, SPAN_WARNING("Unable to interface: Connection refused.")) return STATUS_CLOSE return ..() @@ -965,19 +901,12 @@ About the new airlock wires panel: var/cut_verb var/cut_sound - if(isWelder(item)) - var/obj/item/weldingtool/WT = item - if(!WT.remove_fuel(0,user)) - return 0 - cut_verb = "cutting" - cut_sound = 'sound/items/Welder.ogg' - else if(istype(item,/obj/item/gun/energy/plasmacutter)) //They could probably just shoot them out, but who cares! - var/obj/item/gun/energy/plasmacutter/cutter = item - if(!cutter.slice(user)) - return 0 + if(item.tool_behaviour == TOOL_WELDER) + if(!item.use_as_tool(src, user, amount = 3, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return cut_verb = "cutting" - cut_sound = 'sound/items/Welder.ogg' - cut_delay *= 0.66 + cut_sound = item.usesound + cut_delay *= item.toolspeed else if(istype(item,/obj/item/melee/energy/blade) || istype(item,/obj/item/melee/energy/sword)) cut_verb = "slicing" cut_sound = "sparks" @@ -995,7 +924,7 @@ About the new airlock wires panel: if (!F.wielded) return 0 user.visible_message( - SPAN_DANGER("\The [user] smashes the bolt cover open!"), + SPAN_DANGER("[user] smashes the bolt cover open!"), SPAN_WARNING("You smash the bolt cover open!") ) playsound(src, 'sound/weapons/smash.ogg', 100, 1) @@ -1008,14 +937,14 @@ About the new airlock wires panel: if (src.lock_cut_state == BOLTS_FINE) user.visible_message( - SPAN_NOTICE("\The [user] begins [cut_verb] through the bolt cover on [src]."), + SPAN_NOTICE("[user] begins [cut_verb] through the bolt cover on [src]."), SPAN_NOTICE("You begin [cut_verb] through the bolt cover.") ) playsound(src, cut_sound, 100, 1) if (do_after(user, cut_delay, src, DO_REPAIR_CONSTRUCT)) user.visible_message( - SPAN_NOTICE("\The [user] removes the bolt cover from [src]"), + SPAN_NOTICE("[user] removes the bolt cover from [src]"), SPAN_NOTICE("You remove the cover and expose the door bolts.") ) src.lock_cut_state = BOLTS_EXPOSED @@ -1023,160 +952,158 @@ About the new airlock wires panel: if (src.lock_cut_state == BOLTS_EXPOSED) user.visible_message( - SPAN_NOTICE("\The [user] begins [cut_verb] through [src]'s bolts."), + SPAN_NOTICE("[user] begins [cut_verb] through [src]'s bolts."), SPAN_NOTICE("You begin [cut_verb] through the door bolts.") ) playsound(src, cut_sound, 100, 1) if (do_after(user, cut_delay, src, DO_REPAIR_CONSTRUCT)) user.visible_message( - SPAN_NOTICE("\The [user] severs the door bolts, unlocking [src]."), + SPAN_NOTICE("[user] severs the door bolts, unlocking [src]."), SPAN_NOTICE("You sever the door bolts, unlocking the door.") ) src.lock_cut_state = BOLTS_CUT src.unlock(1) //force it return 1 -/obj/machinery/door/airlock/attackby(obj/item/C, mob/user) +/obj/machinery/door/airlock/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(p_open && (operating == DOOR_OPERATING_BROKEN || (!operating && welded && !arePowerSystemsOn() && density && !locked)) && !brace) + user.visible_message("[user] starts removing the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.") + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + to_chat(user, SPAN_NOTICE("You've removed the airlock electronics!")) + deconstruct(user) + return + if(arePowerSystemsOn()) + to_chat(user, SPAN_NOTICE("The airlock's motors resist your efforts to force it.")) + return + if(locked) + to_chat(user, SPAN_NOTICE("The airlock's bolts prevent it from being forced.")) + return + if(brace) + to_chat(user, SPAN_NOTICE("The airlock's brace holds it firmly in place.")) + return + if(density) + spawn(0) + open(1) + return + else + spawn(0) + close(1) + +/obj/machinery/door/airlock/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + attack_hand(user) + +/obj/machinery/door/airlock/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!p_open) + if(!tool.use_as_tool(src, user, volume = 20, do_flags = DO_REPAIR_CONSTRUCT)) + return + p_open = TRUE + USE_FEEDBACK_NEW_PANEL_OPEN(user, p_open) + update_icon() + return + if(MACHINE_IS_BROKEN(src)) + balloon_alert(user, "панель сломана!") + return + if(!tool.use_as_tool(src, user, volume = 20, do_flags = DO_REPAIR_CONSTRUCT)) + return + p_open = FALSE + USE_FEEDBACK_NEW_PANEL_OPEN(user, p_open) + update_icon() + +/obj/machinery/door/airlock/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + attack_hand(user) + +/obj/machinery/door/airlock/welder_act(mob/living/user, obj/item/tool) + if(!repairing && MACHINE_IS_BROKEN(src) && locked) //bolted and broken + if(cut_bolts(tool, user)) + . = ITEM_INTERACT_SUCCESS + return + if(repairing || operating == DOOR_OPERATING_YES || !density) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.tool_start_check(user, 1)) + return + USE_FEEDBACK_WELD_UNWELD(user, welded) + if(!tool.use_as_tool(src, user, (rand(3, 5)) SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || repairing || operating == DOOR_OPERATING_YES || !density) + return + welded = !welded + USE_FEEDBACK_WELD_UNWELD_FINISH(user, welded) + update_icon() + +/obj/machinery/door/airlock/use_tool(obj/item/C, mob/living/user, list/click_params) // Brace is considered installed on the airlock, so interacting with it is protected from electrification. if(brace && C && (istype(C.GetIdCard(), /obj/item/card/id) || istype(C, /obj/item/material/twohanded/jack))) - return brace.attackby(C, user) + return C.resolve_attackby(brace, user) if(!brace && istype(C, /obj/item/airlock_brace)) var/obj/item/airlock_brace/A = C if(!density) - to_chat(user, SPAN_WARNING("You must close \the [src] before installing \the [A]!")) - return + to_chat(user, SPAN_WARNING("You must close [src] before installing [A]!")) + return TRUE - if(!length(A.req_access) && (alert("\the [A]'s 'Access Not Set' light is flashing. Install it anyway?", "Access not set", "Yes", "No") == "No")) - return + if(!length(A.req_access) && (alert("[A]'s 'Access Not Set' light is flashing. Install it anyway?", "Access not set", "Yes", "No") == "No")) + return TRUE playsound(user, 'sound/machines/lockreset.ogg', 50, 1) if(do_after(user, 6 SECONDS, src, DO_REPAIR_CONSTRUCT) && density && A && user.unEquip(A, src)) - to_chat(user, SPAN_NOTICE("You successfully install \the [A].")) + to_chat(user, SPAN_NOTICE("You successfully install [A].")) brace = A brace.airlock = src update_icon() - return + return TRUE - if(!istype(usr, /mob/living/silicon)) - if(src.isElectrified()) - if(src.shock(user, 75)) - return - if(istype(C, /obj/item/taperoll)) - return + if(!istype(user, /mob/living/silicon)) + if(isElectrified()) + if(shock(user, 75)) + return TRUE - if (!repairing && MACHINE_IS_BROKEN(src) && src.locked) //bolted and broken - if (!cut_bolts(C,user)) - ..() - return + if (!repairing && MACHINE_IS_BROKEN(src) && locked) //bolted and broken + if (cut_bolts(C,user)) + return TRUE - if (!repairing && isWelder(C) && operating != DOOR_OPERATING_YES && density) - var/obj/item/weldingtool/W = C - if(!W.remove_fuel(0,user)) - to_chat(user, SPAN_NOTICE("Your [W.name] doesn't have enough fuel.")) - return - playsound(src, 'sound/items/Welder.ogg', 50, 1) - user.visible_message(SPAN_WARNING("\The [user] begins welding \the [src] [welded ? "open" : "closed"]!"), - SPAN_NOTICE("You begin welding \the [src] [welded ? "open" : "closed"].")) - if(do_after(user, (rand(3,5)) SECONDS, src, DO_REPAIR_CONSTRUCT)) - if (density && operating != DOOR_OPERATING_YES && !repairing) - playsound(src, 'sound/items/Welder2.ogg', 50, 1) - welded = !welded - update_icon() - return - else - to_chat(user, SPAN_NOTICE("You must remain still to complete this task.")) - return - else if(isScrewdriver(C)) - if (p_open) - if (MACHINE_IS_BROKEN(src)) - to_chat(user, SPAN_WARNING("The panel is broken, and cannot be closed.")) - else - p_open = FALSE - user.visible_message(SPAN_NOTICE("[user.name] closes the maintenance panel on \the [src]."), SPAN_NOTICE("You close the maintenance panel on \the [src].")) - playsound(src.loc, "sound/items/Screwdriver.ogg", 20) - else - src.p_open = TRUE - user.visible_message(SPAN_NOTICE("[user.name] opens the maintenance panel on \the [src]."), SPAN_NOTICE("You open the maintenance panel on \the [src].")) - playsound(src.loc, "sound/items/Screwdriver.ogg", 20) - src.update_icon() - else if(isWirecutter(C)) - return src.attack_hand(user) - else if(isMultitool(C)) - return src.attack_hand(user) - else if(istype(C, /obj/item/device/assembly/signaler)) - return src.attack_hand(user) - else if(istype(C, /obj/item/pai_cable)) // -- TLE + if (istype(C, /obj/item/device/assembly/signaler)) + return attack_hand(user) + + if (istype(C, /obj/item/pai_cable)) var/obj/item/pai_cable/cable = C - cable.plugin(src, user) - else if(!repairing && isCrowbar(C)) - if (p_open && (operating == DOOR_OPERATING_BROKEN || (!operating && welded && !arePowerSystemsOn() && density && !locked)) && !brace) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.") - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, SPAN_NOTICE("You've removed the airlock electronics!")) - deconstruct(user) - return - else if(arePowerSystemsOn()) - to_chat(user, SPAN_NOTICE("The airlock's motors resist your efforts to force it.")) - else if(locked) - to_chat(user, SPAN_NOTICE("The airlock's bolts prevent it from being forced.")) - else if(brace) - to_chat(user, SPAN_NOTICE("The airlock's brace holds it firmly in place.")) - else - if(density) - spawn(0) open(1) - else - spawn(0) close(1) + cable.resolve_attackby(src, user) //if door is unbroken, hit with fire axe using harm intent - else if (istype(C, /obj/item/material/twohanded/fireaxe) && !MACHINE_IS_BROKEN(src) && user.a_intent == I_HURT) + if (istype(C, /obj/item/material/twohanded/fireaxe) && !MACHINE_IS_BROKEN(src) && user.a_intent == I_HURT) var/obj/item/material/twohanded/fireaxe/F = C if (F.wielded) playsound(src, 'sound/weapons/smash.ogg', 100, 1) if (damage_health(F.force_wielded * 2, F.damtype)) - user.visible_message(SPAN_DANGER("[user] smashes \the [C] into the airlock's control panel! It explodes in a shower of sparks!"), SPAN_DANGER("You smash \the [C] into the airlock's control panel! It explodes in a shower of sparks!")) + user.visible_message(SPAN_DANGER("[user] smashes [C] into the airlock's control panel! It explodes in a shower of sparks!"), SPAN_DANGER("You smash [C] into the airlock's control panel! It explodes in a shower of sparks!")) else - user.visible_message(SPAN_DANGER("[user] smashes \the [C] into the airlock's control panel!")) - else - ..() - return + user.visible_message(SPAN_DANGER("[user] smashes [C] into the airlock's control panel!")) + return TRUE - else if(istype(C, /obj/item/material/twohanded/fireaxe) && !arePowerSystemsOn()) + if (istype(C, /obj/item/material/twohanded/fireaxe) && !arePowerSystemsOn()) if(locked) to_chat(user, SPAN_NOTICE("The airlock's bolts prevent it from being forced.")) + return TRUE else if(!welded && !operating ) if(density) var/obj/item/material/twohanded/fireaxe/F = C if(F.wielded) spawn(0) open(1) else - to_chat(user, SPAN_WARNING("You need to be wielding \the [C] to do that.")) + to_chat(user, SPAN_WARNING("You need to be wielding [C] to do that.")) + return TRUE else var/obj/item/material/twohanded/fireaxe/F = C if(F.wielded) spawn(0) close(1) else - to_chat(user, SPAN_WARNING("You need to be wielding \the [C] to do that.")) + to_chat(user, SPAN_WARNING("You need to be wielding [C] to do that.")) + return TRUE - else if(istype(C, /obj/item/device/paint_sprayer)) - return - else if((inoperable()) && istype(user, /mob/living/simple_animal)) - var/mob/living/simple_animal/A = user - var/obj/item/I = A.get_natural_weapon() - if(I.force >= 10) - if(density) - visible_message(SPAN_DANGER("\The [A] forces \the [src] open!")) - open(1) - else - visible_message(SPAN_DANGER("\The [A] forces \the [src] closed!")) - close(1) - else - visible_message(SPAN_NOTICE("\The [A] strains fruitlessly to force \the [src] [density ? "open" : "closed"].")) - return - else - ..() - return + return ..() /obj/machinery/door/airlock/deconstruct(mob/user, moved = FALSE) var/obj/structure/door_assembly/da = new assembly_type(src.loc) @@ -1194,7 +1121,7 @@ About the new airlock wires panel: da.symbol_color = symbol_color if(moved) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread s.set_up(5, 1, src) s.start() else @@ -1216,9 +1143,8 @@ About the new airlock wires panel: qdel(src) return da -/obj/machinery/door/airlock/phoron/attackby(C as obj, mob/user as mob) - if(C) - ignite(is_hot(C)) +/obj/machinery/door/airlock/phoron/use_tool(obj/item/C, mob/living/user, list/click_params) + ignite(C.IsHeatSource()) ..() /obj/machinery/door/airlock/set_broken(new_state) @@ -1227,8 +1153,8 @@ About the new airlock wires panel: p_open = TRUE if (secured_wires) lock() - visible_message("\The [src]'s control panel bursts open, sparks spewing out!") - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + visible_message("[src]'s control panel bursts open, sparks spewing out!") + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread s.set_up(5, 1, src) s.start() @@ -1276,10 +1202,7 @@ About the new airlock wires panel: for(var/turf/turf in locs) for(var/atom/movable/AM in turf) if(AM.blocks_airlock()) - if(world.time > next_beep_at) - playsound(src.loc, close_failure_blocked, 30, 0, -3) - next_beep_at = world.time + SecondsToTicks(10) - close_door_at = world.time + 6 + close_with_delay(0.6 SECONDS) return var/crushed = FALSE @@ -1334,6 +1257,9 @@ About the new airlock wires panel: /obj/machinery/door/airlock/allowed(mob/M) if(locked) return 0 + if (issilicon(M)) + if (ai_control_disabled) + return FALSE return ..(M) /obj/machinery/door/airlock/New(newloc, obj/structure/door_assembly/assembly=null) @@ -1417,11 +1343,11 @@ About the new airlock wires panel: electrified_until = 0 /obj/machinery/door/airlock/proc/prison_open() - if(arePowerSystemsOn()) - src.unlock() - src.open() - src.lock() - return + if (!arePowerSystemsOn()) + return + unlock(TRUE) + open(TRUE) + lock(TRUE) /obj/machinery/door/airlock/get_material_melting_point() . = ..() @@ -1438,11 +1364,11 @@ About the new airlock wires panel: /obj/machinery/door/airlock/examine(mob/user) . = ..() if (lock_cut_state == BOLTS_EXPOSED) - to_chat(user, "The bolt cover has been cut open.") + . += SPAN_NOTICE("The bolt cover has been cut open.") if (lock_cut_state == BOLTS_CUT) - to_chat(user, "The door bolts have been cut.") + . += SPAN_NOTICE("The door bolts have been cut.") if(brace) - to_chat(user, "\The [brace] is installed on \the [src], preventing it from opening.") + . += SPAN_NOTICE("[brace] is installed on [src], preventing it from opening.") brace.examine_damage_state(user) /obj/machinery/door/airlock/autoname @@ -1474,7 +1400,7 @@ About the new airlock wires panel: /singleton/public_access/public_method/airlock_toggle_bolts name = "toggle bolts" desc = "Toggles whether the airlock is bolted or not, if possible." - call_proc = /obj/machinery/door/airlock/proc/toggle_lock + call_proc = TYPE_PROC_REF(/obj/machinery/door/airlock, toggle_lock) /singleton/stock_part_preset/radio/receiver/airlock frequency = AIRLOCK_FREQ diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index d366bcd2ee704..5c5786bdfb186 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -142,7 +142,7 @@ return ..() /obj/machinery/airlock_sensor - icon = 'icons/obj/airlock_machines.dmi' + icon = 'icons/obj/doors/airlock_machines.dmi' icon_state = "airlock_sensor_off" name = "airlock sensor" @@ -185,7 +185,7 @@ var/datum/gas_mixture/air_sample = return_air() var/pressure = round(air_sample.return_pressure(),0.1) - if(abs(pressure - previousPressure) > 0.001 || previousPressure == null) + if(abs(pressure - previousPressure) > 0.001 || isnull(previousPressure)) var/datum/signal/signal = new signal.transmission_method = 1 //radio signal signal.data["tag"] = id_tag @@ -226,7 +226,7 @@ command = "cycle_exterior" /obj/machinery/access_button - icon = 'icons/obj/airlock_machines.dmi' + icon = 'icons/obj/doors/airlock_machines.dmi' icon_state = "access_button_standby" name = "access button" @@ -249,12 +249,11 @@ else icon_state = "access_button_off" -/obj/machinery/access_button/attackby(obj/item/I as obj, mob/user as mob) - //Swiping ID on the access button +/obj/machinery/access_button/use_tool(obj/item/I, mob/living/user, list/click_params) if (istype(I, /obj/item/card/id) || istype(I, /obj/item/modular_computer)) attack_hand(user) - return - ..() + return TRUE + return ..() /obj/machinery/access_button/interface_interact(mob/user) if(!CanInteract(user, DefaultTopicState())) diff --git a/code/game/machinery/doors/airlock_interactions.dm b/code/game/machinery/doors/airlock_interactions.dm index 157e8bba06bf0..9df3797359f07 100644 --- a/code/game/machinery/doors/airlock_interactions.dm +++ b/code/game/machinery/doors/airlock_interactions.dm @@ -16,7 +16,7 @@ /obj/machinery/mech_sensor/blocks_airlock() return 0 -/obj/effect/energy_field/blocks_airlock() +/obj/energy_field/blocks_airlock() return 0 /obj/machinery/shield/blocks_airlock() @@ -54,10 +54,10 @@ /obj/structure/window/airlock_crush(crush_damage) shatter(TRUE) -/obj/effect/energy_field/airlock_can_crush() +/obj/energy_field/airlock_can_crush() return TRUE -/obj/effect/energy_field/airlock_crush(crush_damage) +/obj/energy_field/airlock_crush(crush_damage) Stress(crush_damage) /obj/structure/closet/airlock_crush(crush_damage) @@ -71,29 +71,27 @@ return TRUE /mob/living/airlock_crush(crush_damage) - ..() - - for(var/i in 1 to round(crush_damage/AIRLOCK_CRUSH_INCREMENT, 1)) + for (var/i in 1 to round(crush_damage/AIRLOCK_CRUSH_INCREMENT, 1)) apply_damage(AIRLOCK_CRUSH_INCREMENT, DAMAGE_BRUTE) SetStunned(round(crush_damage / 8, 1)) SetWeakened(round(crush_damage / 8, 1)) var/turf/T = loc - if(!istype(T)) + if (!istype(T)) return var/list/valid_turfs = list() - for(var/dir_to_test in GLOB.cardinal) + for (var/dir_to_test in GLOB.cardinal) var/turf/new_turf = get_step(T, dir_to_test) - if(!new_turf.contains_dense_objects()) + if (!new_turf.contains_dense_objects()) valid_turfs |= new_turf - while(length(valid_turfs)) + while (length(valid_turfs)) T = pick(valid_turfs) valid_turfs -= T // Try to move us to the turf. If all turfs fail for some reason we will stay on this tile. - if(src.Move(T)) + if (src.Move(T)) return /mob/living/carbon/airlock_crush(crush_damage) diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm index 23fc207ff4c35..af5ee415a47ed 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -65,7 +65,7 @@ /obj/machinery/door/blast/examine(mob/user) . = ..() if(MACHINE_IS_BROKEN(src)) - to_chat(user, "It's broken.") + . += SPAN_WARNING("It's broken.") // Proc: Bumped() // Parameters: 1 (AM - Atom that tried to walk through this object) @@ -138,39 +138,54 @@ /obj/machinery/door/blast/get_material_melting_point() return 10000 // Blast doors are implicitly heavily fire resistant and are used for containing high-temperature areas like burn chambers. -// Proc: attackby() -// Parameters: 2 (C - Item this object was clicked with, user - Mob which clicked this object) -// Description: If we are clicked with crowbar or wielded fire axe, try to manually open the door. +/obj/machinery/door/blast/attack_hand(mob/user) + if (MUTATION_FERAL in user.mutations) + if ((!is_powered() || MACHINE_IS_BROKEN(src)) && density) + visible_message(SPAN_DANGER("[user] manages to pry [src] open!")) + return force_open() + return ..() + +// If we are clicked with crowbar or wielded fire axe, try to manually open the door. // This only works on broken doors or doors without power. Also allows repair with Plasteel. -/obj/machinery/door/blast/attackby(obj/item/C as obj, mob/user as mob) - add_fingerprint(user, 0, C) - if(isCrowbar(C) || (istype(C, /obj/item/material/twohanded/fireaxe) && C:wielded == 1)) - if(((!is_powered()) || MACHINE_IS_BROKEN(src)) && !( operating )) - to_chat(user, SPAN_NOTICE("You begin prying at \the [src]...")) - if(do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) +/obj/machinery/door/blast/crowbar_act(mob/living/user, obj/item/tool) + if(operating || (!MACHINE_IS_BROKEN(src) && is_powered())) + to_chat(user, SPAN_NOTICE("[src]'s motors resist your effort.")) + return + to_chat(user, SPAN_NOTICE("You begin prying at [src]...")) + if(!tool.use_as_tool(src, user, 2 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || operating || (!MACHINE_IS_BROKEN(src) && is_powered())) + return + force_toggle() + +/obj/machinery/door/blast/use_tool(obj/item/C, mob/living/user, list/click_params) + if(istype(C, /obj/item/material/twohanded/fireaxe)) + var/obj/item/material/twohanded/fireaxe/fireaxe = C + if(((!is_powered()) || MACHINE_IS_BROKEN(src)) && !( operating ) && fireaxe.wielded) + to_chat(user, SPAN_NOTICE("You begin prying at [src]...")) + if(do_after(user, (C.toolspeed * 2) SECONDS, src, DO_REPAIR_CONSTRUCT)) force_toggle() else to_chat(user, SPAN_NOTICE("[src]'s motors resist your effort.")) - return + return TRUE + if(istype(C, /obj/item/stack/material) && C.get_material_name() == MATERIAL_PLASTEEL) - var/amt = Ceil(get_damage_value() / 150) + var/amt = ceil(get_damage_value() / 150) if(!amt) - to_chat(user, SPAN_NOTICE("\The [src] is already fully functional.")) - return + to_chat(user, SPAN_NOTICE("[src] is already fully functional.")) + return TRUE var/obj/item/stack/P = C if(!P.can_use(amt)) to_chat(user, SPAN_WARNING("You don't have enough sheets to repair this! You need at least [amt] sheets.")) - return - to_chat(user, SPAN_NOTICE("You begin repairing \the [src]...")) + return TRUE + to_chat(user, SPAN_NOTICE("You begin repairing [src]...")) if(do_after(user, 5 SECONDS, src, DO_REPAIR_CONSTRUCT)) if(P.use(amt)) - to_chat(user, SPAN_NOTICE("You have repaired \the [src].")) + to_chat(user, SPAN_NOTICE("You have repaired [src].")) revive_health() else to_chat(user, SPAN_WARNING("You don't have enough sheets to repair this! You need at least [amt] sheets.")) else - to_chat(user, SPAN_WARNING("You must remain still while working on \the [src].")) - return + to_chat(user, SPAN_WARNING("You must remain still while working on [src].")) + return TRUE return ..() @@ -220,7 +235,7 @@ /singleton/public_access/public_method/close_door_delayed name = "delayed close door" desc = "Closes the door if possible, after a short delay." - call_proc = /obj/machinery/door/blast/proc/delayed_close + call_proc = TYPE_PROC_REF(/obj/machinery/door/blast, delayed_close) /singleton/stock_part_preset/radio/receiver/blast_door frequency = BLAST_DOORS_FREQ @@ -231,7 +246,7 @@ ) /obj/machinery/button/blast_door - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/buttons.dmi' name = "remote blast door-control" desc = "It controls blast doors, remotely." icon_state = "blastctrl" @@ -267,7 +282,7 @@ block_air_zones = TRUE /obj/machinery/door/blast/regular/escape_pod - name = "Escape Pod release Door" + name = "escape pod release door" /obj/machinery/door/blast/regular/escape_pod/Process() if(evacuation_controller.emergency_evacuation && evacuation_controller.state >= EVAC_LAUNCHING && src.icon_state == icon_state_closed) @@ -294,10 +309,11 @@ open_sound = 'sound/machines/shutters_open.ogg' close_sound = 'sound/machines/shutters_close.ogg' - health_min_damage = 15 + health_min_damage = 10 health_max = 500 explosion_resistance = 10 pry_mod = 0.55 /obj/machinery/door/blast/shutters/open begins_closed = FALSE + icon_state = "shutter0" diff --git a/code/game/machinery/doors/braces.dm b/code/game/machinery/doors/braces.dm index 5567e01974d07..f2b72b57ae0ae 100644 --- a/code/game/machinery/doors/braces.dm +++ b/code/game/machinery/doors/braces.dm @@ -1,7 +1,7 @@ /obj/item/material/twohanded/jack name = "maintenance jack" desc = "A heavy-duty combination hammer and prying tool that can be used to remove airlock braces." - icon = 'icons/obj/tools.dmi' + icon = 'icons/obj/tools/crowbar.dmi' icon_state = "jack0" base_icon = "jack" w_class = ITEM_SIZE_LARGE @@ -14,28 +14,22 @@ attack_cooldown_modifier = 1 base_parry_chance = 30 applies_material_colour = FALSE - - -/obj/item/material/twohanded/jack/IsCrowbar() - return TRUE - + tool_behaviour = TOOL_CROWBAR + usesound = DEFAULT_CROWBAR_SOUND /obj/item/material/twohanded/jack/aluminium default_material = MATERIAL_ALUMINIUM - /obj/item/material/twohanded/jack/titanium default_material = MATERIAL_TITANIUM - /obj/item/material/twohanded/jack/silver default_material = MATERIAL_SILVER - /obj/item/airlock_brace name = "airlock brace" desc = "A sturdy device that can be attached to an airlock to reinforce it and provide additional security." - icon = 'icons/obj/airlock_machines.dmi' + icon = 'icons/obj/doors/airlock_machines.dmi' icon_state = "brace_open" health_max = 300 var/obj/machinery/door/airlock/airlock @@ -68,6 +62,18 @@ /obj/item/airlock_brace/attack_self(mob/living/user) electronics.attack_self(user) +/obj/item/airlock_brace/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!health_damaged()) + USE_FEEDBACK_NOTHING_TO_REPAIR(user) + return + if(!tool.tool_start_check(user, 1)) + return + USE_FEEDBACK_REPAIR_START(user) + if(!tool.use_as_tool(src, user, 3 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + USE_FEEDBACK_REPAIR_FINISH(user) + restore_health(rand(75, 150)) /obj/item/airlock_brace/attackby(obj/item/item, mob/living/user) if (istype(item.GetIdCard(), /obj/item/card/id)) @@ -75,18 +81,18 @@ update_access() if (check_access(item)) user.visible_message( - SPAN_ITALIC("\The [user] swipes \a [item] through \a [src]."), - SPAN_ITALIC("You swipe \the [item] through \the [src]."), + SPAN_ITALIC("[user] swipes [item] through [src]."), + SPAN_ITALIC("You swipe [item] through [src]."), ) if (do_after(user, 1 SECOND, airlock, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - to_chat(user, "\The [src] clicks and detaches from \the [airlock]!") + to_chat(user, "[src] clicks and detaches from [airlock]!") user.put_in_hands(src) airlock.brace = null airlock.update_icon() airlock = null update_icon() else - to_chat(user, "You swipe \the [item] through \the [src], but it does not react.") + to_chat(user, "You swipe [item] through [src], but it does not react.") else attack_self(user) if (user.a_intent == I_HURT) @@ -95,13 +101,13 @@ if (!airlock) return TRUE user.visible_message( - SPAN_ITALIC("\The [user] begins removing \a [src] with \a [item]."), - SPAN_ITALIC("You begin removing \the [src] with \the [item].") + SPAN_ITALIC("[user] begins removing [src] with [item]."), + SPAN_ITALIC("You begin removing [src] with [item].") ) if (do_after(user, 20 SECONDS, airlock, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) user.visible_message( - SPAN_ITALIC("\The [user] removes \a [src] with \a [item]."), - SPAN_ITALIC("You remove \the [src] with \the [item].") + SPAN_ITALIC("[user] removes [src] with [item]."), + SPAN_ITALIC("You remove [src] with [item].") ) user.put_in_hands(src) airlock.brace = null @@ -109,30 +115,10 @@ airlock = null update_icon() return TRUE - if (isWelder(item) && user.a_intent != I_HURT) - if (!health_damaged()) - to_chat(user, SPAN_NOTICE("\The [src] does not require repairs.")) - return TRUE - var/obj/item/weldingtool/welder = item - if (welder.remove_fuel(1, user)) - playsound(src, 'sound/items/Welder.ogg', 100, 1) - user.visible_message( - SPAN_ITALIC("\The [user] begins repairing damage on \a [src]."), - SPAN_ITALIC("You begin repairing damage on the [src].") - ) - if (do_after(user, 3 SECONDS, airlock, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - user.visible_message( - SPAN_ITALIC("\The [user] repairs damage on \a [src]."), - SPAN_ITALIC("You repair damage on the [src].") - ) - restore_health(rand(75, 150)) - return TRUE - return ..() - /obj/item/airlock_brace/on_death() if (airlock) - visible_message(SPAN_DANGER("\The [src] breaks, falling from \the [airlock]!")) + visible_message(SPAN_DANGER("[src] breaks, falling from [airlock]!")) airlock.brace = null airlock.update_icon() qdel(src) diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index a5048dba71fd7..923dffb53abad 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -14,8 +14,8 @@ // Programmer: Veryinky ///////////////////////////////////////////////////////////////////////////////////////////////// /obj/machinery/door_timer - name = "Door Timer" - icon = 'icons/obj/status_display.dmi' + name = "door timer" + icon = 'icons/obj/machines/status_display.dmi' icon_state = "frame" desc = "A remote control for a door." req_access = list(access_brig) @@ -35,12 +35,12 @@ ..() return INITIALIZE_HINT_LATELOAD -/obj/machinery/door_timer/LateInitialize() - for(var/obj/machinery/door/window/brigdoor/M in SSmachines.machinery) +/obj/machinery/door_timer/LateInitialize(mapload) + for(var/obj/machinery/door/window/brigdoor/M as anything in SSmachines.get_machinery_of_type(/obj/machinery/door/window/brigdoor)) if (M.id == src.id) targets += M - for(var/obj/machinery/flasher/F in SSmachines.machinery) + for(var/obj/machinery/flasher/F as anything in SSmachines.get_machinery_of_type(/obj/machinery/door/window/brigdoor)) if(F.id_tag == src.id) targets += F @@ -234,8 +234,8 @@ // Adds an icon in case the screen is broken/off, stolen from status_display.dm /obj/machinery/door_timer/proc/set_picture(state) picture_state = state - overlays.Cut() - overlays += image('icons/obj/status_display.dmi', icon_state=picture_state) + ClearOverlays() + AddOverlays(image('icons/obj/machines/status_display.dmi', icon_state=picture_state)) //Checks to see if there's 1 line or 2, adds text-icons-numbers/letters over display @@ -249,17 +249,17 @@ //Actual string input to icon display for loop, with 5 pixel x offsets for each letter. //Stolen from status_display /obj/machinery/door_timer/proc/texticon(tn, px = 0, py = 0) - var/image/I = image('icons/obj/status_display.dmi', "blank") + var/image/I = image('icons/obj/machines/status_display.dmi', "blank") var/len = length(tn) for(var/d = 1 to len) var/char = copytext(tn, len-d+1, len-d+2) if(char == " ") continue - var/image/ID = image('icons/obj/status_display.dmi', icon_state=char) + var/image/ID = image('icons/obj/machines/status_display.dmi', icon_state=char) ID.pixel_x = -(d-1)*5 + px ID.pixel_y = py - I.overlays += ID + I.AddOverlays(ID) return I diff --git a/code/game/machinery/doors/checkForMultipleDoors.dm b/code/game/machinery/doors/checkForMultipleDoors.dm index f7ad56cb1348c..24803c009047b 100644 --- a/code/game/machinery/doors/checkForMultipleDoors.dm +++ b/code/game/machinery/doors/checkForMultipleDoors.dm @@ -12,5 +12,5 @@ for(var/obj/machinery/door/D in locate(src.x,src.y,src.z)) if(!istype(D, /obj/machinery/door/window) && D.density) return 0 - //There are no false wall checks because that would be fucking retarded - return 1 \ No newline at end of file + //There are no false wall checks + return 1 diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 8d7157e16869e..4847b7462e27e 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -27,6 +27,8 @@ var/operating = DOOR_OPERATING_NO /// Boolean. Whether or not the door will automatically close. var/autoclose = FALSE + /// Hash of autoclosing timer. Gets written by close_with_delay() proc. Bloody murderer of close_door_at + var/autoclose_timer_hash /// Boolean. Whether or not the door is considered a glass door. var/glass = FALSE /// Boolean. Whether or not the door waits before closing. Generally tied to the timing wire. @@ -39,8 +41,6 @@ var/obj/item/stack/material/repairing /// Boolean. If set, air zones cannot merge across the door even when it is opened. var/block_air_zones = TRUE - /// Integer. The world.time to automatically close the door, if possible. TODO: Replace with timers. - var/close_door_at = 0 /// List. Directions the door has wall connections in. var/list/connections = list("0", "0", "0", "0") /// List. Objects to blend sprite connections with. @@ -50,12 +50,14 @@ /// Integer. Width of the door in tiles. var/width = 1 + /// List. Player view blocking fillers for multi-tile doors. + var/list/fillers // Integer. Used for intercepting clicks on our turf. Set 0 to disable click interception. Passed directly to `/datum/extension/turf_hand`. var/turf_hand_priority = 3 // turf animation - var/atom/movable/overlay/c_animation = null + var/atom/movable/fake_overlay/c_animation = null atmos_canpass = CANPASS_PROC @@ -67,20 +69,13 @@ else layer = open_layer - - if(width > 1) - if(dir in list(EAST, WEST)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size + update_bounds() if (turf_hand_priority) set_extension(src, /datum/extension/turf_hand, turf_hand_priority) /obj/machinery/door/Initialize() - set_extension(src, /datum/extension/penetration, /datum/extension/penetration/proc_call, .proc/CheckPenetration) + set_extension(src, /datum/extension/penetration, /datum/extension/penetration/proc_call, PROC_REF(CheckPenetration)) . = ..() update_connections(1) @@ -88,6 +83,9 @@ update_nearby_tiles(need_rebuild=1) + RegisterSignal(src, COMSIG_ATOM_TOOL_ACT(TOOL_WELDER), PROC_REF(weld_to_fix)) + RegisterSignal(src, COMSIG_ATOM_TOOL_ACT(TOOL_CROWBAR), PROC_REF(remove_repairing)) + if(autoset_access) #ifdef UNIT_TEST if(length(req_access)) @@ -95,8 +93,7 @@ #endif return INITIALIZE_HINT_LATELOAD -/obj/machinery/door/LateInitialize() - ..() +/obj/machinery/door/LateInitialize(mapload) if(autoset_access) // Delayed because apparently the dir is not set by mapping and we need to wait for nearby walls to init and turn us. inherit_access_from_area() @@ -105,14 +102,6 @@ update_nearby_tiles() . = ..() -/obj/machinery/door/Process() - if(close_door_at && world.time >= close_door_at) - if(autoclose) - close_door_at = next_close_time() - close() - else - close_door_at = 0 - /obj/machinery/door/proc/can_open() if(!density || operating) return 0 @@ -172,40 +161,84 @@ return /obj/machinery/door/attack_hand(mob/user) - ..() - if (allowed(user) && operable()) + if (MUTATION_FERAL in user.mutations) + if ((!is_powered() || MACHINE_IS_BROKEN(src)) && density) + visible_message(SPAN_DANGER("[user] manages to pry [src] open!")) + return open(TRUE) + + if ((. = ..())) + return + + if (!operating) + if (allowed(user) && operable()) + if(density) + open() + else + close() + return TRUE + if (density) - open() - else - close() + do_animate("deny") + update_icon() + return TRUE + +/obj/machinery/door/crowbar_act(mob/living/user, obj/item/tool) + . = ..() // see COMSIG_ATOM_TOOL_ACT signal //TODO220: make it a component -/obj/machinery/door/attackby(obj/item/I as obj, mob/user as mob) - src.add_fingerprint(user, 0, I) +/obj/machinery/door/proc/remove_repairing(obj/machinery/door/door, mob/living/user, obj/item/tool) + if(!repairing) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT) || !repairing) + return + to_chat(user, SPAN_NOTICE("You remove [repairing].")) + repairing.dropInto(user.loc) + repairing = null - if (user.a_intent == I_HURT) - return ..() +/obj/machinery/door/welder_act(mob/living/user, obj/item/tool) + . = ..() // see COMSIG_ATOM_TOOL_ACT signal //TODO220: make it a component - if(istype(I, /obj/item/stack/material) && I.get_material_name() == src.get_material_name()) +/obj/machinery/door/proc/weld_to_fix(obj/machinery/door/door, mob/living/user, obj/item/tool) + if(!repairing) + return + . = ITEM_INTERACT_SUCCESS + if(!density) + balloon_alert(user, "нужно закрыть!") + return + if(!tool.tool_start_check(user, 2)) + return + USE_FEEDBACK_REPAIR_START(user) + if(!tool.use_as_tool(src, user, (0.5 * repairing.amount) SECONDS, 2, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || !repairing || !density) + return + USE_FEEDBACK_REPAIR_FINISH(user) + restore_health(repairing.amount * DOOR_REPAIR_AMOUNT) + update_icon() + qdel(repairing) + repairing = null + +/obj/machinery/door/use_tool(obj/item/I, mob/living/user, list/click_params) + if(istype(I, /obj/item/stack/material) && I.get_material_name() == get_material_name()) if(MACHINE_IS_BROKEN(src)) - to_chat(user, SPAN_NOTICE("It looks like \the [src] is pretty busted. It's going to need more than just patching up now.")) - return + to_chat(user, SPAN_NOTICE("It looks like [src] is pretty busted. It's going to need more than just patching up now.")) + return TRUE if (!get_damage_value()) to_chat(user, SPAN_NOTICE("Nothing to fix!")) - return + return TRUE if(!density) - to_chat(user, SPAN_WARNING("\The [src] must be closed before you can repair it.")) - return + to_chat(user, SPAN_WARNING("[src] must be closed before you can repair it.")) + return TRUE //figure out how much metal we need var/amount_needed = get_damage_value() / DOOR_REPAIR_AMOUNT - amount_needed = Ceil(amount_needed) + amount_needed = ceil(amount_needed) var/obj/item/stack/stack = I var/transfer if (repairing) transfer = stack.transfer_to(repairing, amount_needed - repairing.amount) if (!transfer) - to_chat(user, SPAN_WARNING("You must weld or remove \the [repairing] from \the [src] before you can add anything else.")) + to_chat(user, SPAN_WARNING("You must weld or remove [repairing] from [src] before you can add anything else.")) + return TRUE else repairing = stack.split(amount_needed) if (repairing) @@ -213,50 +246,24 @@ transfer = repairing.amount if (transfer) - to_chat(user, SPAN_NOTICE("You fit [transfer] [stack.singular_name]\s to damaged and broken parts on \the [src].")) + to_chat(user, SPAN_NOTICE("You fit [stack.get_exact_name(transfer)] to damaged and broken parts on [src].")) - return + return TRUE - if(repairing && isWelder(I)) - if(!density) - to_chat(user, SPAN_WARNING("\The [src] must be closed before you can repair it.")) - return - - var/obj/item/weldingtool/welder = I - if(welder.remove_fuel(0,user)) - to_chat(user, SPAN_NOTICE("You start to fix dents and weld \the [repairing] into place.")) - playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(do_after(user, (0.5 * repairing.amount) SECONDS, src, DO_REPAIR_CONSTRUCT) && welder && welder.isOn()) - if (!repairing) - return //the materials in the door have been removed before welding was finished. - - to_chat(user, SPAN_NOTICE("You finish repairing the damage to \the [src].")) - restore_health(repairing.amount * DOOR_REPAIR_AMOUNT) - update_icon() - qdel(repairing) - repairing = null - return - - if(repairing && isCrowbar(I)) - to_chat(user, SPAN_NOTICE("You remove \the [repairing].")) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - repairing.dropInto(user.loc) - repairing = null - return - - if(src.operating) return + if (!operating) + if (allowed(user) && operable()) + if(density) + open() + else + close() + return TRUE - if(src.allowed(user) && operable()) - if(src.density) - open() - else - close() - return + if (density) + do_animate("deny") + update_icon() + return TRUE - if(src.density) - do_animate("deny") - update_icon() - return + return ..() /obj/machinery/door/emag_act(remaining_charges) if(density && operable()) @@ -270,16 +277,6 @@ /obj/machinery/door/post_health_change(health_mod, prior_health, damage_type) . = ..() queue_icon_update() - if (health_mod < 0 && !health_dead) - var/initial_damage_percentage = round((prior_health / get_max_health()) * 100) - var/damage_percentage = get_damage_percentage() - if (damage_percentage >= 75 && initial_damage_percentage < 75) - visible_message("\The [src] looks like it's about to break!" ) - else if (damage_percentage >= 50 && initial_damage_percentage < 50) - visible_message("\The [src] looks seriously damaged!" ) - else if (damage_percentage >= 25 && initial_damage_percentage < 25) - visible_message("\The [src] shows signs of damage!" ) - /obj/machinery/door/on_revive() . = ..() @@ -288,14 +285,14 @@ /obj/machinery/door/examine(mob/user) . = ..() - if (emagged && ishuman(user) && user.skill_check(SKILL_COMPUTER, SKILL_ADEPT)) - to_chat(user, SPAN_WARNING("\The [src]'s control panel looks fried.")) + if (emagged && ishuman(user) && user.skill_check(SKILL_COMPUTER, SKILL_TRAINED)) + . += SPAN_WARNING("[src]'s control panel looks fried.") /obj/machinery/door/set_broken(new_state) . = ..() if(. && new_state) - visible_message(SPAN_WARNING("\The [src.name] breaks!")) + visible_message(SPAN_WARNING("[src.name] breaks!")) /obj/machinery/door/on_update_icon() @@ -347,24 +344,34 @@ operating = DOOR_OPERATING_YES do_animate("opening") - icon_state = "door0" set_opacity(0) + if(width > 1) + set_fillers_opacity(0) sleep(3) src.set_density(0) + if(width > 1) + set_fillers_density(0) update_nearby_tiles() sleep(7) src.layer = open_layer update_icon() set_opacity(0) + if(width > 1) + set_fillers_opacity(0) operating = DOOR_OPERATING_NO + if(autoclose) - close_door_at = next_close_time() + close_with_delay(close_delay()) return 1 -/obj/machinery/door/proc/next_close_time() - return world.time + (normalspeed ? 150 : 5) +/obj/machinery/door/proc/close_with_delay(delay) + deltimer(autoclose_timer_hash) + autoclose_timer_hash = addtimer(CALLBACK(src, PROC_REF(close)), delay, TIMER_OVERRIDE | TIMER_UNIQUE) + +/obj/machinery/door/proc/close_delay() + return normalspeed ? 15 SECONDS : 0.5 SECONDS /obj/machinery/door/proc/close(forced = 0) set waitfor = FALSE @@ -372,9 +379,10 @@ return operating = DOOR_OPERATING_YES - close_door_at = 0 do_animate("closing") src.set_density(1) + if(width > 1) + set_fillers_density(1) sleep(3) src.layer = closed_layer update_nearby_tiles() @@ -382,6 +390,8 @@ update_icon() if (visible && !glass) set_opacity(1) //caaaaarn! + if(width > 1) + set_fillers_opacity(1) operating = DOOR_OPERATING_NO //I shall not add a check every x ticks if a door has closed over some fire. @@ -420,15 +430,9 @@ /obj/machinery/door/Move(new_loc, new_dir) update_nearby_tiles() + update_bounds() . = ..() - if(width > 1) - if(dir in list(EAST, WEST)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size if(.) deconstruct(null, TRUE) @@ -516,14 +520,75 @@ if (heat_proof) . += 4000 +/** + * Checks which way the airlock is facing and adjusts the direction accordingly. + * For use with multi-tile airlocks. + */ +/obj/machinery/door/proc/get_adjusted_dir(dir) + if(dir in list(NORTH, SOUTH)) + return EAST + else + return NORTH + +/** + * Sets the bounds of the airlock. For use with multi-tile airlocks. + * If the airlock is multi-tile, it will set the bounds to be the size of the airlock. + * If the airlock doesn't already have fillers, it will create them. + * If the airlock already has fillers, it will move them to the correct location. + */ +/obj/machinery/door/proc/update_bounds() + if(width <= 1) + return + + if(dir in list(NORTH, SOUTH)) + bound_width = width * world.icon_size + bound_height = world.icon_size + else + bound_width = world.icon_size + bound_height = width * world.icon_size + + LAZYINITLIST(fillers) + + var/adjusted_dir = get_adjusted_dir(dir) + var/obj/last_filler = src + for (var/i = 1, i < width, i++) + var/obj/airlock_filler_object/filler + + if (length(fillers) < i) + filler = new + filler.pair_airlock(src) + fillers.Add(filler) + else + filler = fillers[i] + + filler.loc = get_step(last_filler, adjusted_dir) + filler.density = density + filler.set_opacity(opacity) + + last_filler = filler + +/obj/machinery/door/proc/set_fillers_density(density) + if (!length(fillers)) + return + + for (var/obj/airlock_filler_object/filler as anything in fillers) + filler.density = density + +/obj/machinery/door/proc/set_fillers_opacity(opacity) + if (!length(fillers)) + return + + for (var/obj/airlock_filler_object/filler as anything in fillers) + filler.set_opacity(opacity) + // Public access /singleton/public_access/public_method/open_door name = "open door" desc = "Opens the door if possible." - call_proc = /obj/machinery/door/proc/open + call_proc = TYPE_PROC_REF(/obj/machinery/door, open) /singleton/public_access/public_method/toggle_door name = "toggle door" desc = "Toggles whether the door is open or not, if possible." - call_proc = /obj/machinery/door/proc/toggle + call_proc = TYPE_PROC_REF(/obj/machinery/door, toggle) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 622fce27269ad..ac79af7100beb 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -95,13 +95,13 @@ if(distance > 1) return if(locked) - to_chat(user, SPAN_WARNING("A light on the control mechanism is flashing red, indicating it is locked open.")) + . += SPAN_WARNING("A light on the control mechanism is flashing red, indicating it is locked open.") if(!density) return if(pdiff >= FIREDOOR_MAX_PRESSURE_DIFF) - to_chat(user, SPAN_WARNING("WARNING: Current pressure differential is [pdiff] kPa! Opening door may result in injury!")) - to_chat(user, "Sensor readings:") + . += SPAN_WARNING("WARNING: Current pressure differential is [pdiff] kPa! Opening door may result in injury!") + . += SPAN_NOTICE("Sensor readings:") for(var/index = 1; index <= length(tile_info); index++) var/o = "  " switch(index) @@ -113,22 +113,22 @@ o += "EAST: " if(4) o += "WEST: " - if(tile_info[index] == null) + if(isnull(tile_info[index])) o += SPAN_WARNING("DATA UNAVAILABLE") - to_chat(user, o) + . += o continue var/celsius = convert_k2c(tile_info[index][1]) var/pressure = tile_info[index][2] o += "[SPAN_CLASS("[(dir_alerts[index] & (FIREDOOR_ALERT_HOT|FIREDOOR_ALERT_COLD)) ? "warning" : "color:blue"]", "[celsius]°C")] " o += "[pressure]kPa" o += "" - to_chat(user, o) + . += o if(islist(users_to_open) && length(users_to_open)) var/users_to_open_string = users_to_open[1] if(length(users_to_open) >= 2) for(var/i = 2 to length(users_to_open)) users_to_open_string += ", [users_to_open[i]]" - to_chat(user, "These people have opened \the [src] during an alert: [users_to_open_string].") + . += SPAN_NOTICE("These people have opened [src] during an alert: [users_to_open_string].") /obj/machinery/door/firedoor/Bumped(atom/AM) if (p_open || operating) @@ -144,34 +144,36 @@ return FALSE /obj/machinery/door/firedoor/attack_hand(mob/user) - add_fingerprint(user) + if ((. = ..())) + return if(operating) return//Already doing something. if(blocked) - to_chat(user, SPAN_WARNING("\The [src] is welded shut!")) + to_chat(user, SPAN_WARNING("[src] is welded shut!")) return + if(density && (inoperable())) //can still close without power - to_chat(user, "\The [src] is not functioning - you'll have to force it open manually.") + to_chat(user, "[src] is not functioning - you'll have to force it open manually.") return var/alarmed = lockdown alarmed = get_alarm() var/answer = alert(user, "Would you like to [density ? "open" : "close"] this [name]?[ alarmed && density ? "\nNote that by doing so, you acknowledge any damages from opening this\n[name] as being your own fault, and you will be held accountable under the law." : ""]",\ - "\The [src]", "Yes, [density ? "open" : "close"]", "No") + "[src]", "Yes, [density ? "open" : "close"]", "No") if(answer == "No") return if(user.incapacitated() || !user.Adjacent(src) && !issilicon(user)) - to_chat(user, SPAN_WARNING("You must remain able-bodied and close to \the [src] in order to use it.")) + to_chat(user, SPAN_WARNING("You must remain able-bodied and close to [src] in order to use it.")) return if(alarmed && density && lockdown && !allowed(user)) to_chat(user, SPAN_WARNING("Access denied. Please wait for authorities to arrive, or for the alert to clear.")) return else user.visible_message( - SPAN_NOTICE("\The [src] [density ? "open" : "close"]s for \the [user]."), - SPAN_NOTICE("\The [src] [density ? "open" : "close"]s."), + SPAN_NOTICE("[src] [density ? "open" : "close"]s for [user]."), + SPAN_NOTICE("[src] [density ? "open" : "close"]s."), SPAN_ITALIC("You hear a soft beep, and a door sliding [density ? "open" : "shut"].") ) playsound(loc, 'sound/piano/A#6.ogg', 50) @@ -190,108 +192,118 @@ close() if(needs_to_close) - addtimer(new Callback(src, .proc/attempt_autoclose), 10 SECONDS) //Just in case a fire alarm is turned off while the firedoor is going through an autoclose cycle + addtimer(CALLBACK(src, PROC_REF(attempt_autoclose)), 10 SECONDS) //Just in case a fire alarm is turned off while the firedoor is going through an autoclose cycle -/obj/machinery/door/firedoor/attackby(obj/item/C, mob/user) - add_fingerprint(user, 0, C) +/obj/machinery/door/firedoor/crowbar_act(mob/living/user, obj/item/tool) if(operating) - return //Already doing something. - - if(isWelder(C) && !repairing) - var/obj/item/weldingtool/W = C - if(W.remove_fuel(0, user)) + return + . = ITEM_INTERACT_SUCCESS + if(blocked && !repairing) + if(!hatch_open) + to_chat(user, SPAN_DANGER("You must open the maintenance hatch first!")) + else user.visible_message( - SPAN_WARNING("\The [user] starts [!blocked ? "welding \the [src] shut" : "cutting open \the [src]"]."), - SPAN_DANGER("You start [!blocked ? "welding \the [src] closed" : "cutting open \the [src]"]."), - SPAN_ITALIC("You hear welding.") + SPAN_NOTICE("[user] starts removing [src]'s electronics."), + SPAN_NOTICE("You start levering out [src]'s electronics."), + SPAN_ITALIC("You hear metal bumping against metal.") ) - playsound(loc, 'sound/items/Welder.ogg', 50, TRUE) - if(do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!W.isOn()) - return - blocked = !blocked + if(!tool.use_as_tool(src, user, 3 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + if(blocked && density && hatch_open) + playsound(loc, 'sound/items/Deconstruct.ogg', 100, TRUE) user.visible_message( - SPAN_DANGER("\The [user] [blocked ? "welds \the [src] shut" : "cuts open \the [src]"]."), - SPAN_DANGER("You [blocked ? "weld shut" : "undo the welds on"] \the [src]."), - SPAN_ITALIC("You hear welding.") + SPAN_NOTICE("[user] removes the electronics from [src]!"), + SPAN_NOTICE("You pry out [src]'s circuit board."), + SPAN_ITALIC("You hear metal coming loose and clattering.") ) - playsound(loc, 'sound/items/Welder2.ogg', 50, TRUE) - update_icon() - return - - if(density && isScrewdriver(C)) - hatch_open = !hatch_open + deconstruct(user) + return + if(blocked) user.visible_message( - SPAN_NOTICE("\The [user] [hatch_open ? "opens" : "closes"] \the [src]'s maintenance hatch."), - SPAN_NOTICE("You [hatch_open ? "open" : "close"] \the [src]'s maintenance hatch."), - SPAN_ITALIC("You hear screws being adjusted.") + SPAN_WARNING("[user] pries at [src], but it's stuck in place!"), + SPAN_WARNING("You try to pry [src] [density ? "open" : "closed"], but it's been welded in place!"), + SPAN_WARNING("You hear the unhappy sound of metal straining and groaning.") ) - playsound(loc, 'sound/items/Screwdriver.ogg', 25, TRUE) - update_icon() return + user.visible_message( + SPAN_WARNING("[user] wedges [tool] into [src] and starts forcing it [density ? "open" : "closed"]!"), + SPAN_DANGER("You start forcing [src] [density ? "open" : "shut"]."), + SPAN_WARNING("You hear metal groaning and grinding!") + ) + playsound(loc, 'sound/machines/airlock_creaking.ogg', 100, TRUE) + if(!tool.use_as_tool(src, user, 3 SECONDS, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + if(inoperable() || !density) + user.visible_message( + SPAN_DANGER("[user] pries [src] [density ? "open" : "shut"]!"), + SPAN_DANGER("You force [density ? "open" : "shut"] [src]!"), + SPAN_WARNING("You hear metal groan as a door is forced [density ? "open" : "closed"]!") + ) + else + user.visible_message( + SPAN_DANGER("[user] forces [src] [density ? "open" : "shut"]!"), + SPAN_DANGER("You force [density ? "open" : "shut"] [src]!"), + SPAN_WARNING("You hear metal shrieking as a door is forced [density ? "open" : "closed"]!") + ) + if(density) + spawn(0) + open(TRUE) + if(lockdown || get_alarm()) + locked = TRUE + else + spawn(0) + locked = FALSE + close() + +/obj/machinery/door/firedoor/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(operating || !density) + balloon_alert(user, "нужно закрыть!") + return + if(!tool.use_as_tool(src, user, volume = 25, do_flags = DO_REPAIR_CONSTRUCT)) + return + hatch_open = !hatch_open + USE_FEEDBACK_NEW_PANEL_OPEN(user, hatch_open) + update_icon() - if(blocked && isCrowbar(C) && !repairing) - if(!hatch_open) - to_chat(user, SPAN_DANGER("You must open the maintenance hatch first!")) - else - user.visible_message( - SPAN_NOTICE("\The [user] starts removing \the [src]'s electronics."), - SPAN_NOTICE("You start levering out \the [src]'s electronics."), - SPAN_ITALIC("You hear metal bumping against metal.") - ) - playsound(loc, 'sound/items/Crowbar.ogg', 100, TRUE) - if(do_after(user, 3 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(blocked && density && hatch_open) - playsound(loc, 'sound/items/Deconstruct.ogg', 100, TRUE) - user.visible_message( - SPAN_NOTICE("\The [user] removes the electronics from \the [src]!"), - SPAN_NOTICE("You pry out \the [src]'s circuit board."), - SPAN_ITALIC("You hear metal coming loose and clattering.") - ) - deconstruct(user) +/obj/machinery/door/firedoor/welder_act(mob/living/user, obj/item/tool) + if(repairing || operating) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.tool_start_check(user, 2)) + return + USE_FEEDBACK_WELD_UNWELD(user, blocked) + if(!tool.use_as_tool(src, user, 2 SECONDS, 2, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) return + blocked = !blocked + USE_FEEDBACK_WELD_UNWELD_FINISH(user, blocked) + update_icon() + +/obj/machinery/door/firedoor/use_tool(obj/item/C, mob/living/user, list/click_params) + if(operating) + return TRUE if(blocked) - to_chat(user, SPAN_DANGER("\The [src] is welded shut!")) - return + to_chat(user, SPAN_DANGER("[src] is welded shut!")) + return TRUE - if(isCrowbar(C) || istype(C,/obj/item/material/twohanded/fireaxe)) + if(istype(C,/obj/item/material/twohanded/fireaxe)) + var/obj/item/material/twohanded/fireaxe/F = C if(operating) - return - - if(blocked && isCrowbar(C)) - user.visible_message( - SPAN_WARNING("\The [user] pries at \the [src], but it's stuck in place!"), - SPAN_WARNING("You try to pry \the [src] [density ? "open" : "closed"], but it's been welded in place!"), - SPAN_WARNING("You hear the unhappy sound of metal straining and groaning.") - ) - return + return TRUE if(istype(C,/obj/item/material/twohanded/fireaxe)) - var/obj/item/material/twohanded/fireaxe/F = C if(!F.wielded) - return + to_chat(user, SPAN_WARNING("You need to wield [C]!")) + return TRUE user.visible_message( - SPAN_WARNING("\The [user] wedges \the [C] into \the [src] and starts forcing it [density ? "open" : "closed"]!"), - SPAN_DANGER("You start forcing \the [src] [density ? "open" : "shut"]."), + SPAN_WARNING("[user] wedges [C] into [src] and starts forcing it [density ? "open" : "closed"]!"), + SPAN_DANGER("You start forcing [src] [density ? "open" : "shut"]."), SPAN_WARNING("You hear metal groaning and grinding!") ) playsound(loc, 'sound/machines/airlock_creaking.ogg', 100, TRUE) - if(do_after(user, 3 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(isCrowbar(C)) - if(inoperable() || !density) - user.visible_message( - SPAN_DANGER("\The [user] pries \the [src] [density ? "open" : "shut"]!"), - SPAN_DANGER("You force [density ? "open" : "shut"] \the [src]!"), - SPAN_WARNING("You hear metal groan as a door is forced [density ? "open" : "closed"]!") - ) - else - user.visible_message( - SPAN_DANGER("\The [user] forces \the [src] [density ? "open" : "shut"]!"), - SPAN_DANGER("You force [density ? "open" : "shut"] \the [src]!"), - SPAN_WARNING("You hear metal shrieking as a door is forced [density ? "open" : "closed"]!") - ) + if(do_after(user, (C.toolspeed * 3) SECONDS, src, DO_REPAIR_CONSTRUCT)) if(density) spawn(0) open(TRUE) @@ -301,7 +313,8 @@ spawn(0) locked = FALSE close() - return + return TRUE + return ..() /obj/machinery/door/firedoor/deconstruct(mob/user, moved = FALSE) @@ -342,7 +355,7 @@ var/old_alerts = dir_alerts for(var/index = 1; index <= 4; index++) var/list/tileinfo = tile_info[index] - if(tileinfo == null) + if(isnull(tileinfo)) continue // Bad data. var/celsius = convert_k2c(tileinfo[1]) @@ -387,7 +400,7 @@ people += M if(length(people)) visible_message( - SPAN_DANGER("\The [src] beeps ominously, get out of the way!"), + SPAN_DANGER("[src] beeps ominously, get out of the way!"), SPAN_DANGER("You hear buzzing coming from the ceiling."), range = 3 ) @@ -419,8 +432,8 @@ direction = d M.visible_message( - SPAN_DANGER("\The [src] knocks \the [M] out of the way!"), - SPAN_DANGER("\The [src] forcefully shoves you out of the way!"), + SPAN_DANGER("[src] knocks [M] out of the way!"), + SPAN_DANGER("[src] forcefully shoves you out of the way!"), SPAN_WARNING("You hear metal smacking into something.") ) M.apply_damage(10, DAMAGE_BRUTE, used_weapon = src) @@ -433,7 +446,7 @@ /obj/machinery/door/firedoor/open(forced = FALSE) if(hatch_open) hatch_open = FALSE - visible_message(SPAN_NOTICE("\The [src]'s maintenance hatch falls shut as it moves.")) + visible_message(SPAN_NOTICE("[src]'s maintenance hatch falls shut as it moves.")) update_icon() if(!forced) @@ -488,7 +501,7 @@ var/icon/panel_overlay var/icon/weld_overlay - overlays.Cut() + ClearOverlays() set_light(0) var/do_set_light = FALSE @@ -503,7 +516,7 @@ if(density) icon_state = "closed" if(hatch_open) - overlays = panel_overlay + SetOverlays(panel_overlay) if(pdiff_alert) lights_overlay += "palert" do_set_light = TRUE @@ -512,7 +525,7 @@ var/cdir = GLOB.cardinal[d] for(var/i=1; i<=length(ALERT_STATES); i++) if(dir_alerts[d] & SHIFTL(1, (i - 1))) - overlays += new/icon(icon, "alert_[ALERT_STATES[i]]", dir = cdir) + AddOverlays(new/icon(icon, "alert_[ALERT_STATES[i]]", dir = cdir)) do_set_light = TRUE else icon_state = "open" @@ -521,8 +534,8 @@ weld_overlay = welded_file if(do_set_light) - set_light(0.25, 0.1, 1, 2, COLOR_SUN) + set_light(2, 0.25, COLOR_SUN) - overlays += panel_overlay - overlays += weld_overlay - overlays += lights_overlay + AddOverlays(panel_overlay) + AddOverlays(weld_overlay) + AddOverlays(lights_overlay) diff --git a/code/game/machinery/doors/firedoor_assembly.dm b/code/game/machinery/doors/firedoor_assembly.dm index 4179d6b33c774..c1644740b7d6f 100644 --- a/code/game/machinery/doors/firedoor_assembly.dm +++ b/code/game/machinery/doors/firedoor_assembly.dm @@ -1,68 +1,104 @@ /obj/structure/firedoor_assembly - name = "\improper emergency shutter assembly" + name = "emergency shutter assembly" desc = "It can save lives." icon = 'icons/obj/doors/hazard/door.dmi' icon_state = "construction" anchored = FALSE opacity = 0 density = TRUE + obj_flags = OBJ_FLAG_ANCHORABLE var/wired = 0 -//construction: wrenched > cables > electronics > screwdriver & open -//deconstruction: closed & welded > screwdriver > crowbar > wire cutters > wrench > welder +/obj/structure/firedoor_assembly/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!wired) + USE_FEEDBACK_FAILURE("[src] has no wires to cut.") + return + user.visible_message( + SPAN_NOTICE("[user] starts cutting [src]'s wires with [tool]."), + SPAN_NOTICE("You start cutting [src]'s wires with [tool].") + ) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || !wired) + return + new /obj/item/stack/cable_coil(loc, 1) + wired = FALSE + user.visible_message( + SPAN_NOTICE("[user] cuts [src]'s wires with [tool]."), + SPAN_NOTICE("You cut [src]'s wires with [tool].") + ) -/obj/structure/firedoor_assembly/attackby(obj/item/C, mob/user) - if(isCoil(C) && !wired && anchored) - var/obj/item/stack/cable_coil/cable = C - if (cable.get_amount() < 1) - to_chat(user, SPAN_WARNING("You need one length of coil to wire \the [src].")) - return - user.visible_message("[user] wires \the [src].", "You start to wire \the [src].") - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT) && !wired && anchored) - if (cable.use(1)) - wired = 1 - to_chat(user, SPAN_NOTICE("You wire \the [src].")) +/obj/structure/firedoor_assembly/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(anchored) + USE_FEEDBACK_NEED_UNANCHOR(user) + return + if(!tool.tool_start_check(user, 1)) + return + USE_FEEDBACK_DECONSTRUCT_START(user) + if(!tool.use_as_tool(src, user, 4 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + var/obj/item/stack/material/steel/stack = new (loc, 4) + transfer_fingerprints_to(stack) + user.visible_message( + SPAN_NOTICE("[user] dismantles [src] with [tool]."), + SPAN_NOTICE("You dismantle [src] with [tool].") + ) + qdel(src) - else if(isWirecutter(C) && wired ) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) - user.visible_message("[user] cuts the wires from \the [src].", "You start to cut the wires from \the [src].") +/obj/structure/firedoor_assembly/use_tool(obj/item/tool, mob/user, list/click_params) + // Air Alarm Electronics - Install circuit + if (istype(tool, /obj/item/airalarm_electronics)) + if (!wired) + USE_FEEDBACK_FAILURE("[src] needs to be wired before you can install [tool].") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + playsound(src, 'sound/items/Deconstruct.ogg', 50, TRUE) + var/obj/machinery/door/firedoor/new_door = new(loc) + new_door.hatch_open = TRUE + new_door.close() + transfer_fingerprints_to(new_door) + user.visible_message( + SPAN_NOTICE("[user] installs [tool] into [src]."), + SPAN_NOTICE("You install [tool] into [src].") + ) + qdel(tool) + qdel_self() + return TRUE - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src) return - to_chat(user, SPAN_NOTICE("You cut the wires!")) - new/obj/item/stack/cable_coil(src.loc, 1) - wired = 0 + // Cable Coil - Wire the assembly + if (isCoil(tool)) + if (wired) + USE_FEEDBACK_FAILURE("[src] is already wired.") + return TRUE + if (!anchored) + USE_FEEDBACK_FAILURE("[src] needs to be anchored before you can wire it.") + return TRUE + var/obj/item/stack/cable_coil/cable = tool + if (!cable.can_use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(cable, 1, "to wire [src].") + return TRUE + user.visible_message( + SPAN_NOTICE("[user] starts wiring [src] with [cable.get_vague_name(FALSE)]."), + SPAN_NOTICE("You start wiring [src] with [cable.get_exact_name(1)].") + ) + if (!user.do_skilled(4 SECONDS, SKILL_ELECTRICAL, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + if (wired) + USE_FEEDBACK_FAILURE("[src] is already wired.") + return TRUE + if (!anchored) + USE_FEEDBACK_FAILURE("[src] needs to be anchored before you can wire it.") + return TRUE + if (!cable.can_use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(cable, 1, "to wire [src].") + return TRUE + wired = TRUE + user.visible_message( + SPAN_NOTICE("[user] wires [src] with [cable.get_vague_name(FALSE)]."), + SPAN_NOTICE("You wire [src] with [cable.get_exact_name(1)].") + ) + return TRUE - else if(istype(C, /obj/item/airalarm_electronics) && wired) - if(anchored) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user.visible_message(SPAN_WARNING("[user] has inserted a circuit into \the [src]!"), - "You have inserted the circuit into \the [src]!") - var/obj/machinery/door/firedoor/D = new(src.loc) - D.hatch_open = 1 - D.close() - qdel(C) - qdel(src) - else - to_chat(user, SPAN_WARNING("You must secure \the [src] first!")) - else if(isWrench(C) && !wired) - anchored = !anchored - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - user.visible_message(SPAN_WARNING("[user] has [anchored ? "" : "un" ]secured \the [src]!"), - "You have [anchored ? "" : "un" ]secured \the [src]!") - update_icon() - else if(!anchored && isWelder(C)) - var/obj/item/weldingtool/WT = C - if(WT.remove_fuel(0, user)) - user.visible_message(SPAN_WARNING("[user] dissassembles \the [src]."), - "You start to dissassemble \the [src].") - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src || !WT.isOn()) return - user.visible_message(SPAN_WARNING("[user] has dissassembled \the [src]."), - "You have dissassembled \the [src].") - new /obj/item/stack/material/steel(src.loc, 4) - qdel(src) - else - to_chat(user, SPAN_NOTICE("You need more welding fuel.")) - else - ..(C, user) + return ..() diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index d12234fad10a4..7e7a76e2b2adb 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -20,24 +20,7 @@ opacity = 1 assembly_type = /obj/structure/door_assembly/multi_tile -/obj/machinery/door/airlock/multi_tile/New() - ..() - SetBounds() - -/obj/machinery/door/airlock/multi_tile/Move() - . = ..() - SetBounds() - -/obj/machinery/door/airlock/multi_tile/proc/SetBounds() - if(dir in list(NORTH, SOUTH)) - bound_width = width * world.icon_size - bound_height = world.icon_size - else - bound_width = world.icon_size - bound_height = width * world.icon_size - - -/obj/machinery/door/airlock/multi_tile/on_update_icon(state=0, override=0) +/obj/machinery/door/airlock/multi_tile/on_update_icon(state=0) ..() if(connections in list(NORTH, SOUTH, NORTH|SOUTH)) if(connections in list(WEST, EAST, EAST|WEST)) @@ -81,6 +64,57 @@ dirs |= direction connections = dirs + +/obj/airlock_filler_object + name = "airlock fluff" + desc = "You shouldn't be able to see this fluff!" + icon = null + icon_state = null + density = TRUE + opacity = TRUE + anchored = TRUE + invisibility = INVISIBILITY_MAXIMUM + atmos_canpass = CANPASS_DENSITY + /// The door/airlock this fluff panel is attached to + var/obj/machinery/door/filled_airlock + +/obj/airlock_filler_object/Bumped(atom/A) + if(isnull(filled_airlock)) + crash_with("Someone bumped into an airlock filler with no parent airlock specified!") + return filled_airlock.Bumped(A) + +/obj/airlock_filler_object/Destroy() + filled_airlock = null + return ..() + +/// Multi-tile airlocks pair with a filler panel, if one goes so does the other. +/obj/airlock_filler_object/proc/pair_airlock(obj/machinery/door/parent_airlock) + if(isnull(parent_airlock)) + crash_with("Attempted to pair an airlock filler with no parent airlock specified!") + + filled_airlock = parent_airlock + GLOB.destroyed_event.register(filled_airlock, src, PROC_REF(no_airlock)) + +/obj/airlock_filler_object/proc/no_airlock() + GLOB.destroyed_event.unregister(filled_airlock, src) + qdel_self() + +/// Multi-tile airlocks (using a filler panel) have special handling for movables with PASS_FLAG_GLASS +/obj/airlock_filler_object/CanPass(atom/movable/mover, turf/target) + . = ..() + if(.) + return + + if(istype(mover) && mover.checkpass(PASS_FLAG_GLASS)) + return !opacity + +/obj/airlock_filler_object/singularity_act() + return + +/obj/airlock_filler_object/singularity_pull(S, current_size) + return + + /obj/machinery/door/airlock/multi_tile/command door_color = COLOR_COMMAND_BLUE @@ -134,6 +168,7 @@ name = "Glass Airlock" damage_hitsound = 'sound/effects/Glasshit.ogg' glass = TRUE + opacity = 0 /obj/machinery/door/airlock/multi_tile/glass/command door_color = COLOR_COMMAND_BLUE diff --git a/code/game/machinery/doors/simple.dm b/code/game/machinery/doors/simple.dm index 65fa216781457..b15818d69f7e7 100644 --- a/code/game/machinery/doors/simple.dm +++ b/code/game/machinery/doors/simple.dm @@ -29,7 +29,7 @@ if(locked) lock = new(src,locked) if(material.luminescence) - set_light(0.5, 1, material.luminescence, l_color = material.icon_colour) + set_light(material.luminescence, 0.5, l_color = material.icon_colour) if(material.opacity < 0.5) glass = TRUE @@ -108,18 +108,15 @@ return attack_hand(user) -/obj/machinery/door/unpowered/simple/attackby(obj/item/I as obj, mob/user as mob) - src.add_fingerprint(user, 0, I) - if (user.a_intent == I_HURT) - return ..() - +/obj/machinery/door/unpowered/simple/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/key) && lock) var/obj/item/key/K = I if(!lock.toggle(I)) to_chat(user, SPAN_WARNING("\The [K] does not fit in the lock!")) - return + return TRUE + if(lock && lock.pick_lock(I,user)) - return + return TRUE if(istype(I,/obj/item/material/lock_construct)) if(lock) @@ -127,47 +124,51 @@ else var/obj/item/material/lock_construct/L = I lock = L.create_lock(src,user) - return + return TRUE if(istype(I, /obj/item/stack/material) && I.get_material_name() == src.get_material_name()) if(MACHINE_IS_BROKEN(src)) to_chat(user, SPAN_NOTICE("It looks like \the [src] is pretty busted. It's going to need more than just patching up now.")) - return + return TRUE if (!get_damage_value()) to_chat(user, SPAN_NOTICE("Nothing to fix!")) - return + return TRUE if(!density) to_chat(user, SPAN_WARNING("\The [src] must be closed before you can repair it.")) - return + return TRUE //figure out how much metal we need var/obj/item/stack/stack = I - var/amount_needed = Ceil(get_damage_value() / DOOR_REPAIR_AMOUNT) + var/amount_needed = ceil(get_damage_value() / DOOR_REPAIR_AMOUNT) var/used = min(amount_needed,stack.amount) if (used) - to_chat(user, SPAN_NOTICE("You fit [used] [stack.singular_name]\s to damaged and broken parts on \the [src].")) + to_chat(user, SPAN_NOTICE("You fit [stack.get_exact_name(used)] to damaged and broken parts on \the [src].")) stack.use(used) restore_health(used * DOOR_REPAIR_AMOUNT) - return + return TRUE + + if(operating) + return TRUE - if(src.operating) return + if ((. = ..())) + return if(lock && lock.isLocked()) to_chat(user, "\The [src] is locked!") + return TRUE if(operable()) if(src.density) open() else close() - return + return TRUE - return /obj/machinery/door/unpowered/simple/examine(mob/user, distance) . = ..() if(distance <= 1 && lock) - to_chat(user, SPAN_NOTICE("It appears to have a lock.")) + . += SPAN_NOTICE("It appears to have a lock.") /obj/machinery/door/unpowered/simple/can_open() if(!..() || (lock && lock.isLocked())) diff --git a/code/game/machinery/doors/unpowered.dm b/code/game/machinery/doors/unpowered.dm index 52aac21835578..ba166369a7c15 100644 --- a/code/game/machinery/doors/unpowered.dm +++ b/code/game/machinery/doors/unpowered.dm @@ -9,11 +9,10 @@ ..() return -/obj/machinery/door/unpowered/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/melee/energy/blade)) return - if(src.locked) return - ..() - return +/obj/machinery/door/unpowered/use_tool(obj/item/I, mob/living/user, list/click_params) + if(locked) + return TRUE + return ..() /obj/machinery/door/unpowered/emag_act() return -1 diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 21e6bca1210c1..2bb971dd593d2 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -76,7 +76,7 @@ if(istype(bot)) if(density && src.check_access(bot.botcard)) open() - addtimer(new Callback(src, .proc/close), 5 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) + addtimer(CALLBACK(src, PROC_REF(close)), 5 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) return var/mob/M = AM // we've returned by here if M is not a mob if (src.operating) @@ -88,7 +88,7 @@ open_timer = 5 SECONDS else //secure doors close faster open_timer = 2 SECONDS - addtimer(new Callback(src, .proc/close), open_timer, TIMER_UNIQUE | TIMER_OVERRIDE) + addtimer(CALLBACK(src, PROC_REF(close)), open_timer, TIMER_UNIQUE | TIMER_OVERRIDE) return /obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) @@ -117,7 +117,7 @@ icon_state = "[src.base_state]open"; flick("[src.base_state]opening", src) playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1) - addtimer(new Callback(src, .proc/open_final), 1 SECOND, TIMER_UNIQUE | TIMER_OVERRIDE) + addtimer(CALLBACK(src, PROC_REF(open_final)), 1 SECOND, TIMER_UNIQUE | TIMER_OVERRIDE) return 1 @@ -141,7 +141,7 @@ explosion_resistance = initial(explosion_resistance) update_nearby_tiles() - addtimer(new Callback(src, .proc/close_final), 1 SECOND, TIMER_UNIQUE | TIMER_OVERRIDE) + addtimer(CALLBACK(src, PROC_REF(close_final)), 1 SECOND, TIMER_UNIQUE | TIMER_OVERRIDE) return TRUE /obj/machinery/door/window/proc/close_final() @@ -172,7 +172,7 @@ to_chat(user, SPAN_NOTICE("You short out \the [src]'s internal circuitry, locking it open!")) if (density) flick("[base_state]spark", src) - addtimer(new Callback(src, .proc/open), 6, TIMER_UNIQUE | TIMER_OVERRIDE) + addtimer(CALLBACK(src, PROC_REF(open)), 6, TIMER_UNIQUE | TIMER_OVERRIDE) return TRUE /obj/machinery/door/window/emp_act(severity) @@ -184,27 +184,25 @@ /obj/machinery/door/window/CanFluidPass(coming_from) return !density || ((dir in GLOB.cardinal) && coming_from != dir) -/obj/machinery/door/window/attackby(obj/item/I as obj, mob/user as mob) - - //If it's in the process of opening/closing, ignore the click +/obj/machinery/door/window/use_tool(obj/item/I, mob/living/user, list/click_params) if (operating == DOOR_OPERATING_YES) - return + return ..() //Emags and ninja swords? You may pass. if (istype(I, /obj/item/melee/energy/blade)) if(emag_act(10, user)) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + var/datum/effect/spark_spread/spark_system = new /datum/effect/spark_spread() spark_system.set_up(5, 0, src.loc) spark_system.start() playsound(src.loc, "sparks", 50, 1) playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) visible_message(SPAN_WARNING("The glass door was sliced open by [user]!")) - return 1 + return TRUE //If it's emagged, crowbar can pry electronics out. - if (operating == DOOR_OPERATING_BROKEN && isCrowbar(I)) + if (operating == DOOR_OPERATING_BROKEN && I.tool_behaviour == TOOL_CROWBAR) playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] removes the electronics from the windoor.", "You start to remove electronics from the windoor.") + user.visible_message("\The [user] starts removing the electronics from the windoor.", "You start to remove electronics from the windoor.") if (do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) to_chat(user, SPAN_NOTICE("You removed the windoor electronics!")) @@ -222,24 +220,21 @@ shatter(src) operating = DOOR_OPERATING_NO - return - - if (user.a_intent == I_HURT) - return ..() - - src.add_fingerprint(user, 0, I) + return TRUE - if (src.allowed(user)) - if (src.density) + if (allowed(user)) + if (density) open() else if (emagged) to_chat(user, SPAN_WARNING("\The [src] seems to be stuck and refuses to close!")) - return + return TRUE close() + return TRUE - else if (src.density) + else if (density) flick(text("[]deny", src.base_state), src) + return TRUE /obj/machinery/door/window/create_electronics(electronics_type = /obj/item/airlock_electronics) electronics = ..() diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index ab43a09a96822..32ebfef48fddd 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -3,9 +3,9 @@ var/global/list/doppler_arrays = list() /obj/machinery/doppler_array name = "tachyon-doppler array" desc = "A highly precise directional sensor array which measures the release of quants from decaying tachyons. The doppler shifting of the mirror-image formed by these quants can reveal the size, location and temporal affects of energetic disturbances within a large radius ahead of the array." - icon = 'icons/obj/machines/research.dmi' + icon = 'icons/obj/machines/research/doppler_array.dmi' icon_state = "tdoppler" - obj_flags = OBJ_FLAG_ROTATABLE + obj_flags = OBJ_FLAG_ROTATABLE | OBJ_FLAG_ANCHORABLE construct_state = /singleton/machine_construction/default/panel_closed var/currentlyfacing var/direct @@ -43,23 +43,14 @@ var/global/list/doppler_arrays = list() audible_message(SPAN_CLASS("game say", "[SPAN_CLASS("name", "\The [src]")] states coldly, \"[message]\"")) /obj/machinery/doppler_array/on_update_icon() - overlays.Cut() + ClearOverlays() if(MACHINE_IS_BROKEN(src)) icon_state = "[initial(icon_state)]-broken" if(panel_open) - overlays += "[initial(icon_state)]-open" + AddOverlays("[initial(icon_state)]-open") if(inoperable()) icon_state = "[initial(icon_state)]-off" -/obj/machinery/doppler_array/attackby(obj/item/W, mob/user) - if(component_attackby(W, user)) - return TRUE - else if(isWrench(W)) - anchored = !anchored - to_chat(user, SPAN_NOTICE("You wrench the stabilising bolts [anchored ? "into place" : "loose"].")) - playsound(loc, 'sound/items/Ratchet.ogg', 40) - update_icon() - /obj/machinery/doppler_array/proc/getcurrentdirection() switch(direct) if(EAST) @@ -73,5 +64,5 @@ var/global/list/doppler_arrays = list() /obj/machinery/doppler_array/examine(mob/user) . = ..() - to_chat(user, SPAN_NOTICE("The stabilizing bolts are currently [anchored ? "deployed" : "retracted"].")) - to_chat(user, SPAN_NOTICE("The sensor array is currently facing [currentlyfacing].")) \ No newline at end of file + . += SPAN_NOTICE("The stabilizing bolts are currently [anchored ? "deployed" : "retracted"].") + . += SPAN_NOTICE("The sensor array is currently facing [currentlyfacing].") diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index 46ad7c4767102..82ac1819c8312 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -32,7 +32,7 @@ //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 - name = "Advanced Airlock Controller" + name = "advanced airlock controller" /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/nanoui/master_ui = null, datum/topic_state/state = GLOB.default_state) var/data[0] @@ -55,7 +55,7 @@ //Airlock controller for airlock control - most airlocks on the station use this /obj/machinery/embedded_controller/radio/airlock/airlock_controller - name = "Airlock Controller" + name = "airlock controller" tag_secure = 1 /obj/machinery/embedded_controller/radio/airlock/airlock_controller/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/nanoui/master_ui = null, datum/topic_state/state = GLOB.default_state) @@ -77,8 +77,8 @@ //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' - name = "Access Controller" + icon = 'icons/obj/doors/airlock_machines.dmi' + name = "access controller" tag_secure = 1 /obj/machinery/embedded_controller/radio/airlock/access_controller/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/nanoui/master_ui = null, datum/topic_state/state = GLOB.default_state) diff --git a/code/game/machinery/embedded_controller/airlock_controllers_dummy.dm b/code/game/machinery/embedded_controller/airlock_controllers_dummy.dm index f7851a721667d..ab1e2aa4f31ae 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers_dummy.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers_dummy.dm @@ -1,8 +1,8 @@ // 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" + icon = 'icons/obj/doors/airlock_machines.dmi' + icon_state = "airlock_control_off" layer = ABOVE_OBJ_LAYER var/datum/topic_state/remote/remote_state @@ -16,7 +16,7 @@ /obj/machinery/dummy_airlock_controller/Initialize() . = ..() if(id_tag) - for(var/obj/machinery/embedded_controller/radio/airlock/_master in SSmachines.machinery) + for(var/obj/machinery/embedded_controller/radio/airlock/_master as anything in SSmachines.get_machinery_of_type(/obj/machinery/embedded_controller/radio/airlock)) if(_master.id_tag == id_tag) master_controller = _master master_controller.dummy_terminals += src diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller.dm b/code/game/machinery/embedded_controller/airlock_docking_controller.dm index 5f5389a0133a9..5b9eeeeb8811c 100644 --- a/code/game/machinery/embedded_controller/airlock_docking_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_docking_controller.dm @@ -11,17 +11,15 @@ var/datum/computer/file/embedded_program/docking/airlock/docking_program = program 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]'") +/obj/machinery/embedded_controller/radio/airlock/docking_port/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + 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,"[tool]'s screen displays '[code]'") /obj/machinery/embedded_controller/radio/airlock/docking_port/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/nanoui/master_ui = null, datum/topic_state/state = GLOB.default_state) var/data[0] diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm index 9750035bfde0c..a0728050852dd 100644 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ b/code/game/machinery/embedded_controller/airlock_program.dm @@ -9,7 +9,7 @@ #define TARGET_INOPEN -1 #define TARGET_OUTOPEN -2 -#define SENSOR_TOLERANCE 1 +#define SENSOR_TOLERANCE 0.5 /datum/computer/file/embedded_program/airlock var/tag_exterior_door @@ -221,7 +221,7 @@ signalPump(tag_airpump, 1, 0, target_pressure) //send a signal to start depressurizing else signalPump(tag_pump_out_internal, 1, 0, target_pressure) // if going inside, pump external air out of the airlock - signalPump(tag_pump_out_external, 1, 1, 1000) // make sure the air is actually going outside + signalPump(tag_pump_out_external, 1, 1, MAX_PUMP_PRESSURE) // make sure the air is actually going outside else if(chamber_pressure <= target_pressure) state = STATE_PRESSURIZE @@ -252,6 +252,7 @@ cycleDoors(target_state) state = STATE_IDLE target_state = TARGET_NONE + playsound(master, 'sound/machines/airlockdone.ogg', 50) if(STATE_DEPRESSURIZE) @@ -271,6 +272,7 @@ cycleDoors(target_state) state = STATE_IDLE target_state = TARGET_NONE + playsound(master, 'sound/machines/airlockdone.ogg', 50) memory["processing"] = (state != target_state) @@ -283,20 +285,20 @@ state = STATE_IDLE target_state = TARGET_INOPEN memory["purge"] = cycle_to_external_air - playsound(master, 'sound/machines/warning-buzzer.ogg', 50) + playsound(master, 'sound/machines/airlockin.ogg', 50) shutAlarm() /datum/computer/file/embedded_program/airlock/proc/begin_dock_cycle() state = STATE_IDLE target_state = TARGET_INOPEN - playsound(master, 'sound/machines/warning-buzzer.ogg', 50) + playsound(master, 'sound/machines/airlockin.ogg', 50) shutAlarm() /datum/computer/file/embedded_program/airlock/proc/begin_cycle_out() state = STATE_IDLE target_state = TARGET_OUTOPEN memory["purge"] = cycle_to_external_air - playsound(master, 'sound/machines/warning-buzzer.ogg', 50) + playsound(master, 'sound/machines/airlockout.ogg', 50) shutAlarm() /datum/computer/file/embedded_program/airlock/proc/close_doors() diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 04fa4b3a170be..53878ce3788c5 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -3,7 +3,7 @@ anchored = TRUE idle_power_usage = 10 var/datum/computer/file/embedded_program/program //the currently executing program - var/on = 1 + var/on = TRUE /obj/machinery/embedded_controller/Initialize() if(program) @@ -16,7 +16,7 @@ return ..() /obj/machinery/embedded_controller/proc/post_signal(datum/signal/signal, comm_line) - return 0 + return FALSE /obj/machinery/embedded_controller/receive_signal(datum/signal/signal, receive_method, receive_param) if(!signal || signal.encryption) return @@ -44,7 +44,7 @@ return TRUE /obj/machinery/embedded_controller/radio - icon = 'icons/obj/airlock_machines.dmi' + icon = 'icons/obj/doors/airlock_machines.dmi' icon_state = "airlock_control_off" power_channel = ENVIRON density = FALSE @@ -63,26 +63,26 @@ ..() /obj/machinery/embedded_controller/radio/on_update_icon() - overlays.Cut() + ClearOverlays() if(!on || !istype(program)) return if(!program.memory["processing"]) - overlays += image(icon, "screen_standby") - overlays += image(icon, "indicator_done") + AddOverlays(image(icon, "screen_standby")) + AddOverlays(image(icon, "indicator_done")) else - overlays += image(icon, "indicator_active") + AddOverlays(image(icon, "indicator_active")) var/datum/computer/file/embedded_program/docking/airlock/docking_program = program var/datum/computer/file/embedded_program/airlock/airlock_program = program if(istype(docking_program)) if(docking_program.override_enabled) - overlays += image(icon, "indicator_forced") + AddOverlays(image(icon, "indicator_forced")) airlock_program = docking_program.airlock_program if(istype(airlock_program) && airlock_program.memory["processing"]) if(airlock_program.memory["pump_status"] == "siphon") - overlays += image(icon, "screen_drain") + AddOverlays(image(icon, "screen_drain")) else - overlays += image(icon, "screen_fill") + AddOverlays(image(icon, "screen_fill")) /obj/machinery/embedded_controller/radio/post_signal(datum/signal/signal, radio_filter = null) signal.transmission_method = TRANSMISSION_RADIO diff --git a/code/game/machinery/embedded_controller/simple_docking_controller.dm b/code/game/machinery/embedded_controller/simple_docking_controller.dm index 7fa124f3d2b12..fe2f064f9977c 100644 --- a/code/game/machinery/embedded_controller/simple_docking_controller.dm +++ b/code/game/machinery/embedded_controller/simple_docking_controller.dm @@ -74,10 +74,6 @@ signal.data["command"] = command post_signal(signal) -///datum/computer/file/embedded_program/docking/simple/proc/signal_mech_sensor(var/command) -// signal_door(command) -// return - /datum/computer/file/embedded_program/docking/simple/proc/open_door() if(memory["door_status"]["state"] == "closed") //signal_mech_sensor("enable") diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 24a89c8c7142e..6197c4ed8feba 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -3,7 +3,7 @@ /obj/machinery/flasher name = "mounted flash" desc = "A wall-mounted flashbulb device." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/mounted_flash.dmi' icon_state = "mflash1" var/range = 2 //this is roughly the size of brig cell var/disable = 0 @@ -33,16 +33,15 @@ // src.sd_SetLuminosity(0) //Don't want to render prison breaks impossible -/obj/machinery/flasher/attackby(obj/item/W as obj, mob/user as mob) - if(isWirecutter(W)) - add_fingerprint(user, 0, W) - src.disable = !src.disable - if (src.disable) - user.visible_message(SPAN_WARNING("[user] has disconnected the [src]'s flashbulb!"), SPAN_WARNING("You disconnect the [src]'s flashbulb!")) - if (!src.disable) - user.visible_message(SPAN_WARNING("[user] has connected the [src]'s flashbulb!"), SPAN_WARNING("You connect the [src]'s flashbulb!")) - else - ..() +/obj/machinery/flasher/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + disable = !disable + user.visible_message( + SPAN_WARNING("[user] has [disable ? "dis" : ""]connected [src]'s flashbulb!"), + SPAN_WARNING("You [disable? "dis" : ""]connect [src]'s flashbulb!") + ) //Let the AI trigger them directly. /obj/machinery/flasher/attack_ai() @@ -89,7 +88,7 @@ /obj/machinery/flasher/proc/do_flash(mob/living/victim, flash_time) victim.flash_eyes() victim.eye_blurry += flash_time - victim.confused += (flash_time + 2) + victim.mod_confused(flash_time + 2) victim.Stun(flash_time / 2) victim.Weaken(3) @@ -101,11 +100,13 @@ /obj/machinery/flasher/portable //Portable version of the flasher. Only flashes when anchored name = "portable flasher" desc = "A portable flashing device. Wrench to activate and deactivate. Cannot detect slow movements." + icon = 'icons/obj/portable_flash.dmi' icon_state = "pflash1" strength = 8 anchored = FALSE base_state = "pflash" density = TRUE + obj_flags = OBJ_FLAG_ANCHORABLE /obj/machinery/flasher/portable/HasProximity(atom/movable/AM as mob|obj) if(!anchored || disable || last_flash && world.time < last_flash + 150) @@ -119,18 +120,12 @@ if(isanimal(AM)) flash() -/obj/machinery/flasher/portable/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - add_fingerprint(user) - src.anchored = !src.anchored - - if (!src.anchored) - user.show_message(text(SPAN_WARNING("[src] can now be moved."))) - src.overlays.Cut() - - else if (src.anchored) - user.show_message(text(SPAN_WARNING("[src] is now secured."))) - src.overlays += "[base_state]-s" +/obj/machinery/flasher/portable/post_anchor_change() + if (anchored) + AddOverlays("[base_state]-s") + else + ClearOverlays() + ..() /obj/machinery/button/flasher name = "flasher button" @@ -140,7 +135,7 @@ /singleton/public_access/public_method/flasher_flash name = "flash" desc = "Performs a flash, if possible." - call_proc = /obj/machinery/flasher/proc/flash + call_proc = TYPE_PROC_REF(/obj/machinery/flasher, flash) /singleton/stock_part_preset/radio/receiver/flasher frequency = BUTTON_FREQ diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index ec8738a499aae..ce38f148a0522 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -1,7 +1,7 @@ //these are probably broken /obj/machinery/floodlight - name = "Emergency Floodlight" + name = "emergency floodlight" icon = 'icons/obj/machines/floodlight.dmi' icon_state = "flood00" density = TRUE @@ -17,9 +17,8 @@ machine_desc = "A portable, battery-powered LED flood lamp used to illuminate large areas." //better laser, increased brightness & power consumption - var/l_max_bright = 0.8 //brightness of light when on, can be negative - var/l_inner_range = 0 //inner range of light when on, can be negative - var/l_outer_range = 4.5 //outer range of light when on, can be negative + var/l_power = 2.5 //brightness of light when on, can be negative + var/l_range = 7 //outer range of light when on, can be negative /obj/machinery/floodlight/on_update_icon() icon_state = "flood[panel_open ? "o" : ""][panel_open && get_cell() ? "b" : ""]0[use_power == POWER_USE_ACTIVE]" @@ -34,17 +33,17 @@ // If the cell is almost empty rarely "flicker" the light. Aesthetic only. if(prob(30)) - set_light(l_max_bright / 2, l_inner_range, l_outer_range) + set_light(l_range, l_power / 2, angle = LIGHT_WIDE) spawn(20) if(use_power) - set_light(l_max_bright, l_inner_range, l_outer_range) + set_light(l_range, l_power, angle = LIGHT_WIDE) // Returns 0 on failure and 1 on success /obj/machinery/floodlight/proc/turn_on(loud = 0) if(!is_powered()) return 0 - set_light(l_max_bright, l_inner_range, l_outer_range) + set_light(l_range, l_power / 2, angle = LIGHT_WIDE) update_use_power(POWER_USE_ACTIVE) use_power_oneoff(active_power_usage)//so we drain cell if they keep trying to use it update_icon() @@ -77,9 +76,8 @@ /obj/machinery/floodlight/RefreshParts()//if they're insane enough to modify a floodlight, let them ..() var/light_mod = clamp(total_component_rating_of_type(/obj/item/stock_parts/capacitor), 0, 10) - l_max_bright = light_mod? light_mod*0.01 + initial(l_max_bright) : initial(l_max_bright)/2 //gives us between 0.8-0.9 with capacitor, or 0.4 without one - l_inner_range = light_mod + initial(l_inner_range) - l_outer_range = light_mod*1.5 + initial(l_outer_range) + l_power = light_mod? light_mod*0.01 + initial(l_power) : initial(l_power)/2 //gives us between 0.8-0.9 with capacitor, or 0.4 without one + l_range = light_mod*1.5 + initial(l_range) change_power_consumption(initial(active_power_usage) * light_mod , POWER_USE_ACTIVE) if(use_power) - set_light(l_max_bright, l_inner_range, l_outer_range) + set_light(l_range, l_power, angle = LIGHT_WIDE) diff --git a/code/game/machinery/floor_light.dm b/code/game/machinery/floor_light.dm index 71bb6de6b081e..4e13ab165322f 100644 --- a/code/game/machinery/floor_light.dm +++ b/code/game/machinery/floor_light.dm @@ -7,87 +7,76 @@ var/global/list/floor_light_cache = list() desc = "A backlit floor panel." layer = ABOVE_TILE_LAYER anchored = FALSE - use_power = POWER_USE_ACTIVE + use_power = POWER_USE_OFF idle_power_usage = 2 active_power_usage = 20 power_channel = LIGHT matter = list(MATERIAL_STEEL = 250, MATERIAL_GLASS = 250) + health_max = 5 + damage_hitsound = 'sound/effects/Glasshit.ogg' var/damaged - var/default_light_max_bright = 0.75 - var/default_light_inner_range = 1 - var/default_light_outer_range = 3 + var/default_light_power = 0.75 + var/default_light_range = 3 var/default_light_colour = "#ffffff" - /obj/machinery/floor_light/Initialize() . = ..() update_use_power(use_power) queue_icon_update() - /obj/machinery/floor_light/mapped_off anchored = TRUE use_power = POWER_USE_OFF - /obj/machinery/floor_light/mapped_on anchored = TRUE use_power = POWER_USE_ACTIVE - -/obj/machinery/floor_light/attackby(obj/item/W, mob/user) - if(isScrewdriver(W)) - anchored = !anchored - if(use_power) - update_use_power(POWER_USE_OFF) - queue_icon_update() - visible_message(SPAN_NOTICE("\The [user] has [anchored ? "attached" : "detached"] \the [src].")) - else if(isWelder(W) && (damaged || MACHINE_IS_BROKEN(src))) - var/obj/item/weldingtool/WT = W - if(!WT.remove_fuel(0, user)) - to_chat(user, SPAN_WARNING("\The [src] must be on to complete this task.")) - return - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - if(!do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - return - if(!src || !WT.isOn()) +/obj/machinery/floor_light/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + anchored = !anchored + if(use_power) + update_use_power(POWER_USE_OFF) + queue_icon_update() + USE_FEEDBACK_NEW_ANCHOR_FINISH(user, anchored) + +/obj/machinery/floor_light/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 75, do_flags = DO_REPAIR_CONSTRUCT)) + return + to_chat(user, SPAN_NOTICE("You dismantle the floor light.")) + new /obj/item/stack/material/steel(src.loc, 1) + new /obj/item/stack/material/glass(src.loc, 1) + qdel(src) + +/obj/machinery/floor_light/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(health_damaged() || MACHINE_IS_BROKEN(src)) + USE_FEEDBACK_REPAIR_START(user) + if(!tool.use_as_tool(src, user, 2 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) return - visible_message(SPAN_NOTICE("\The [user] has repaired \the [src].")) + USE_FEEDBACK_REPAIR_FINISH(user) set_broken(FALSE) - damaged = null - else if(isWrench(W)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - to_chat(user, SPAN_NOTICE("You dismantle the floor light.")) - new /obj/item/stack/material/steel(src.loc, 1) - new /obj/item/stack/material/glass(src.loc, 1) - qdel(src) - else if(W.force && user.a_intent == "hurt") - attack_hand(user) - return - -/obj/machinery/floor_light/physical_attack_hand(mob/user) - if(user.a_intent == I_HURT && !issmall(user)) - if(!isnull(damaged) && !MACHINE_IS_BROKEN(src)) - visible_message(SPAN_DANGER("\The [user] smashes \the [src]!")) - playsound(src, "shatter", 70, 1) - set_broken(TRUE) - else - visible_message(SPAN_DANGER("\The [user] attacks \the [src]!")) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - if(isnull(damaged)) damaged = 0 - return TRUE + revive_health() + +/obj/machinery/floor_light/on_death() + ..() + playsound(src, "shatter", 70, 1) + visible_message(SPAN_DANGER("[src] is smashed into many pieces!")) /obj/machinery/floor_light/interface_interact(mob/user) if(!CanInteract(user, DefaultTopicState())) return FALSE if(!anchored) - to_chat(user, SPAN_WARNING("\The [src] must be screwed down first.")) + to_chat(user, SPAN_WARNING("[src] must be screwed down first.")) return TRUE var/on = (use_power == POWER_USE_ACTIVE) update_use_power(on ? POWER_USE_OFF : POWER_USE_ACTIVE) - visible_message(SPAN_NOTICE("\The [user] turns \the [src] [!on ? "on" : "off"].")) + visible_message(SPAN_NOTICE("[user] turns [src] [!on ? "on" : "off"].")) queue_icon_update() return TRUE @@ -105,17 +94,17 @@ var/global/list/floor_light_cache = list() /obj/machinery/floor_light/proc/update_brightness() if((use_power == POWER_USE_ACTIVE) && operable()) - if(light_outer_range != default_light_outer_range || light_max_bright != default_light_max_bright || light_color != default_light_colour) - set_light(default_light_max_bright, default_light_inner_range, default_light_outer_range, l_color = default_light_colour) - change_power_consumption((light_outer_range + light_max_bright) * 20, POWER_USE_ACTIVE) + if(light_range != default_light_range || light_power != default_light_power || light_color != default_light_colour) + set_light(default_light_range, default_light_power, default_light_colour) + change_power_consumption((light_range + light_power) * 20, POWER_USE_ACTIVE) else - if(light_outer_range || light_max_bright) + if(light_range || light_power) set_light(0) /obj/machinery/floor_light/on_update_icon() - overlays.Cut() + ClearOverlays() if((use_power == POWER_USE_ACTIVE) && operable()) - if(isnull(damaged)) + if (!health_damaged()) var/cache_key = "floorlight-[default_light_colour]" if(!floor_light_cache[cache_key]) var/image/I = image("on") @@ -123,10 +112,9 @@ var/global/list/floor_light_cache = list() I.plane = plane I.layer = layer+0.001 floor_light_cache[cache_key] = I - overlays |= floor_light_cache[cache_key] + AddOverlays(floor_light_cache[cache_key]) else - if(damaged == 0) //Needs init. - damaged = rand(1,4) + damaged = rand(1,4) var/cache_key = "floorlight-broken[damaged]-[default_light_colour]" if(!floor_light_cache[cache_key]) var/image/I = image("flicker[damaged]") @@ -134,24 +122,8 @@ var/global/list/floor_light_cache = list() I.plane = plane I.layer = layer+0.001 floor_light_cache[cache_key] = I - overlays |= floor_light_cache[cache_key] - update_brightness() + AddOverlays(floor_light_cache[cache_key]) + if (MACHINE_IS_BROKEN(src)) + AddOverlays("broken") -/obj/machinery/floor_light/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - if(EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - else if(prob(20)) - set_broken(TRUE) - else - if(isnull(damaged)) - damaged = 0 - if(EX_ACT_LIGHT) - if (prob(5)) - qdel(src) - else if(isnull(damaged)) - damaged = 0 - return + update_brightness() diff --git a/code/game/machinery/floorlayer.dm b/code/game/machinery/floorlayer.dm index 855ab9f90c279..4a0c512af6af2 100644 --- a/code/game/machinery/floorlayer.dm +++ b/code/game/machinery/floorlayer.dm @@ -1,119 +1,126 @@ /obj/machinery/floorlayer - name = "automatic floor layer" - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/machines/pipe_dispenser.dmi' icon_state = "pipe_d" density = TRUE var/turf/old_turf var/on = 0 - var/obj/item/stack/tile/T + var/obj/item/stack/tile/current_tile var/list/mode = list("dismantle"=0,"laying"=0,"collect"=0) -/obj/machinery/floorlayer/New() - T = new/obj/item/stack/tile/floor(src) - ..() +/obj/machinery/floorlayer/Initialize() + . = ..() + var/obj/item/stack/tile/floor/new_tile = new(get_turf(loc)) + take_tile(new_tile) /obj/machinery/floorlayer/Move(new_turf,M_Dir) - ..() - + . = ..() if(on) if(mode["dismantle"]) - dismantleFloor(old_turf) - + dismantle_floor(old_turf) if(mode["laying"]) - layFloor(old_turf) - + lay_floor(old_turf) if(mode["collect"]) - CollectTiles(old_turf) - - + collect_tiles(old_turf) old_turf = new_turf /obj/machinery/floorlayer/physical_attack_hand(mob/user) on=!on user.visible_message( - SPAN_NOTICE("\The [user] has [!on?"de":""]activated \the [src]."), - SPAN_NOTICE("You [!on?"de":""]activate \the [src].") + SPAN_NOTICE("[user] has [!on?"de":""]activated [src]."), + SPAN_NOTICE("You [!on?"de":""]activate [src].") ) return TRUE -/obj/machinery/floorlayer/attackby(obj/item/W as obj, mob/user as mob) - - if(isWrench(W)) - var/m = input("Choose work mode", "Mode") as null|anything in mode - mode[m] = !mode[m] - var/O = mode[m] - user.visible_message( - SPAN_NOTICE("\The [user] has set \the [src] [m] mode [!O?"off":"on"]."), - SPAN_NOTICE("You set \the [src] [m] mode [!O?"off":"on"].") - ) +/obj/machinery/floorlayer/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + var/list/tiles = get_tiles() + if(!length(tiles)) + to_chat(user, SPAN_NOTICE("[src] is empty.")) return - - if(istype(W, /obj/item/stack/tile)) - if(!user.unEquip(W, T)) - return - to_chat(user, SPAN_NOTICE("\The [W] successfully loaded.")) - TakeTile(T) + var/obj/item/stack/tile/tile_to_remove = input("Choose remove tile type.", "Tiles") as null|anything in tiles + if(!istype(tile_to_remove)) return - - if(isCrowbar(W)) - if(!length(contents)) - to_chat(user, SPAN_NOTICE("\The [src] is empty.")) - else - var/obj/item/stack/tile/E = input("Choose remove tile type.", "Tiles") as null|anything in contents - if(E) - to_chat(user, SPAN_NOTICE("You remove the [E] from /the [src].")) - E.dropInto(loc) - T = null + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + tile_to_remove.forceMove(get_turf(loc)) + current_tile = null + to_chat(user, SPAN_NOTICE("You remove the [tile_to_remove] from [src].")) + +/obj/machinery/floorlayer/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + var/list/tiles = get_tiles() + if(!length(tiles)) + balloon_alert(user, "внутри пусто!") + return + var/obj/item/stack/tile/new_tile = input("Choose tile type.", "Tiles") as null|anything in tiles + if(!istype(new_tile)) return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + current_tile = new_tile - if(isScrewdriver(W)) - T = input("Choose tile type.", "Tiles") as null|anything in contents +/obj/machinery/floorlayer/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + var/m = input("Choose work mode", "Mode") as null|anything in mode + if(!m) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - ..() + mode[m] = !mode[m] + var/O = mode[m] + user.visible_message( + SPAN_NOTICE("[user] has set [src] [m] mode [!O?"off":"on"]."), + SPAN_NOTICE("You set [src] [m] mode [!O?"off":"on"].") + ) + +/obj/machinery/floorlayer/use_tool(obj/item/W, mob/living/user, list/click_params) + if(istype(W, /obj/item/stack/tile)) + if(!user.unEquip(W, get_turf(loc))) + return TRUE + to_chat(user, SPAN_NOTICE("[W] successfully loaded.")) + take_tile(W) + return TRUE + return ..() /obj/machinery/floorlayer/examine(mob/user) . = ..() var/dismantle = mode["dismantle"] var/laying = mode["laying"] var/collect = mode["collect"] - var/message = SPAN_NOTICE("\The [src] [!T?"don't ":""]has [!T?"":"[T.get_amount()] [T] "]tile\s, dismantle is [dismantle?"on":"off"], laying is [laying?"on":"off"], collect is [collect?"on":"off"].") - to_chat(user, message) + var/message = SPAN_NOTICE("[src] [!current_tile?"don't ":""]has [!current_tile?"":"[current_tile.get_amount()] [current_tile] "]tile\s, dismantle is [dismantle?"on":"off"], laying is [laying?"on":"off"], collect is [collect?"on":"off"].") + . += message /obj/machinery/floorlayer/proc/reset() on = 0 -/obj/machinery/floorlayer/proc/dismantleFloor(turf/new_turf) - if(istype(new_turf, /turf/simulated/floor)) - var/turf/simulated/floor/T = new_turf - if(!T.is_plating()) - T.make_plating(!(T.broken || T.burnt)) - return new_turf.is_plating() - -/obj/machinery/floorlayer/proc/TakeNewStack() +/obj/machinery/floorlayer/proc/get_tiles() + var/list/tiles = list() for(var/obj/item/stack/tile/tile in contents) - T = tile - return 1 - return 0 + tiles += tile + return tiles -/obj/machinery/floorlayer/proc/SortStacks() - for(var/obj/item/stack/tile/tile1 in contents) - for(var/obj/item/stack/tile/tile2 in contents) - tile2.transfer_to(tile1) - -/obj/machinery/floorlayer/proc/layFloor(turf/w_turf) - if(!T) - if(!TakeNewStack()) - return 0 - w_turf.attackby(T , src) - return 1 +/obj/machinery/floorlayer/proc/dismantle_floor(turf/new_turf) + if(istype(new_turf, /turf/simulated/floor)) + var/turf/simulated/floor/to_dismantle = new_turf + if(!to_dismantle.is_plating()) + to_dismantle.make_plating(!(to_dismantle.broken || to_dismantle.burnt)) + +/obj/machinery/floorlayer/proc/lay_floor(turf/w_turf) + if(!current_tile || !current_tile.loc) + for(var/obj/item/stack/tile/tile in contents) + current_tile = tile + break + if(!current_tile) + return + w_turf.use_tool(current_tile, src) -/obj/machinery/floorlayer/proc/TakeTile(obj/item/stack/tile/tile) - if(!T) T = tile +/obj/machinery/floorlayer/proc/take_tile(obj/item/stack/tile/tile) + for(var/obj/item/stack/tile/tile1 in contents) + if(tile.transfer_to(tile1)) + return tile.forceMove(src) - SortStacks() - -/obj/machinery/floorlayer/proc/CollectTiles(turf/w_turf) +/obj/machinery/floorlayer/proc/collect_tiles(turf/w_turf) for(var/obj/item/stack/tile/tile in w_turf) - TakeTile(tile) + take_tile(tile) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index e82f639405013..15867b123d56f 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -32,10 +32,10 @@ Possible to do for anyone motivated enough: var/global/const/HOLOPAD_MODE = RANGE_BASED /obj/machinery/hologram/holopad - name = "\improper holopad" + name = "holopad" desc = "It's a floor-mounted device for projecting holographic images." icon_state = "holopad-B0" - + icon = 'icons/obj/machines/holopads.dmi' layer = ABOVE_TILE_LAYER var/power_per_hologram = 500 //per usage per hologram @@ -58,19 +58,21 @@ var/global/const/HOLOPAD_MODE = RANGE_BASED var/allow_ai = TRUE + var/list/linked_pdas + /obj/machinery/hologram/holopad/New() ..() desc = "It's a floor-mounted device for projecting holographic images. Its ID is '[loc.loc]'" /obj/machinery/hologram/holopad/examine(mob/user) . = ..() - if (incoming_connection && sourcepad) - to_chat(user, SPAN_NOTICE("There is currently an incoming call from [get_area(sourcepad)]!")) + if(incoming_connection && sourcepad) + . += SPAN_NOTICE("There is currently an incoming call from [get_area(sourcepad)]!") var/callstring = "Recent incoming calls:" - for (var/id in recent_calls) + for(var/id in recent_calls) callstring += "\n[id]" callstring = SPAN_NOTICE(callstring) - to_chat(user, callstring) + . += callstring /obj/machinery/hologram/holopad/interface_interact(mob/living/carbon/human/user) //Carn: Hologram requests. if(!CanInteract(user, DefaultTopicState())) @@ -127,10 +129,10 @@ var/global/const/HOLOPAD_MODE = RANGE_BASED var/zlevels_long = list() if(GLOB.using_map.use_overmap && holopadType == HOLOPAD_LONG_RANGE) for(var/zlevel in map_sectors) - var/obj/effect/overmap/visitable/O = map_sectors["[zlevel]"] + var/obj/overmap/visitable/O = map_sectors["[zlevel]"] if(!isnull(O)) zlevels_long |= O.map_z - for(var/obj/machinery/hologram/holopad/H in SSmachines.machinery) + for(var/obj/machinery/hologram/holopad/H as anything in SSmachines.get_machinery_of_type(/obj/machinery/hologram/holopad)) if (H.operable()) if(H.z in zlevels) holopadlist["[H.loc.loc.name]"] = H //Define a list and fill it with the area of every holopad in the world @@ -161,6 +163,12 @@ var/global/const/HOLOPAD_MODE = RANGE_BASED playsound(targetpad.loc, 'sound/machines/chime.ogg', 25, 5) targetpad.icon_state = "[targetpad.base_icon]1" targetpad.audible_message("\The [src] announces, \"Incoming communications request from [targetpad.sourcepad.loc.loc].\"") + // Notify any linked PDAs + if (LAZYLEN(targetpad.linked_pdas)) + for (var/obj/item/modular_computer/pda/pda as anything in targetpad.linked_pdas) + if (!AreConnectedZLevels(get_z(targetpad), get_z(pda))) + continue + pda.receive_notification("Call at [targetpad.loc.loc] holopad.") to_chat(user, SPAN_NOTICE("Trying to establish a connection to the holopad in [targetpad.loc.loc]... Please await confirmation from recipient.")) targetpad.addrecentcall(get_area(src)) @@ -226,6 +234,33 @@ var/global/const/HOLOPAD_MODE = RANGE_BASED to_chat(caller_id, "[SPAN_DANGER("ERROR:")] Unable to project hologram.") return +/obj/machinery/hologram/holopad/use_tool(obj/item/O, mob/user) + if (istype(O, /obj/item/modular_computer/pda)) + if (LAZYISIN(linked_pdas, O)) + unlink_pda(O) + to_chat(user, SPAN_NOTICE("You remove \the [O] from \the [src]'s notifications list.")) + return TRUE + link_pda(O) + to_chat(user, SPAN_NOTICE("You add \the [O] to \the [src]'s notifications list. It will now be pinged whenever a call is received.")) + return TRUE + + return ..() + +/** + * Proc to link/unlink PDAs + */ + +/obj/machinery/hologram/holopad/proc/link_pda(obj/item/modular_computer/pda/pda) + if (!istype(pda)) + return + LAZYADD(linked_pdas, pda) + GLOB.destroyed_event.register(pda, src, PROC_REF(unlink_pda)) + + +/obj/machinery/hologram/holopad/proc/unlink_pda(obj/item/modular_computer/pda/pda) + LAZYREMOVE(linked_pdas, pda) + GLOB.destroyed_event.unregister(pda, src, PROC_REF(unlink_pda)) + /*This is the proc for special two-way communication between AI and holopad/people talking near holopad. For the other part of the code, check silicon say.dm. Particularly robot talk.*/ // Note that speaking may be null here, presumably due to echo effects/non-mob transmission. @@ -299,17 +334,17 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ master.show_message(rendered, type) /obj/machinery/hologram/holopad/proc/create_holo(mob/living/silicon/ai/A, mob/living/carbon/caller_id, turf/T = loc) - var/obj/effect/overlay/hologram = new(T)//Spawn a blank effect at the location. + var/obj/overlay/hologram = new(T)//Spawn a blank effect at the location. if(caller_id) - hologram.overlays += getHologramIcon(getFlatIcon(caller_id), hologram_color = holopadType) // Add the callers image as an overlay to keep coloration! + hologram.AddOverlays(getHologramIcon(getFlatIcon(caller_id), hologram_color = holopadType)) else if(A) if(holopadType == HOLOPAD_LONG_RANGE) - hologram.overlays += A.holo_icon_longrange + hologram.AddOverlays(A.holo_icon_longrange) else - hologram.overlays += A.holo_icon // Add the AI's configured holo Icon + hologram.AddOverlays(A.holo_icon) if(A) if(A.holo_icon_malf == TRUE) - hologram.overlays += icon("icons/effects/effects.dmi", "malf-scanline") + hologram.AddOverlays(icon("icons/effects/effects.dmi", "malf-scanline")) hologram.mouse_opacity = 0//So you can't click on it. hologram.layer = ABOVE_HUMAN_LAYER //Above all the other objects/mobs. Or the vast majority of them. hologram.anchored = TRUE//So space wind cannot drag it. @@ -321,9 +356,9 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ hologram.SetName("[A.name] (Hologram)") //If someone decides to right click. A.holo = src masters[A] = hologram - hologram.set_light(1, 0.1, 2) //hologram lighting + hologram.set_light(2, 0.1) //hologram lighting hologram.color = color //painted holopad gives coloured holograms - set_light(1, 0.1, 2) //pad lighting + set_light(2, 0.1) //pad lighting icon_state = "[base_icon]1" return 1 @@ -372,7 +407,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/holopad/proc/move_hologram(mob/living/silicon/ai/user) if(masters[user]) step_to(masters[user], user.eyeobj) // So it turns. - var/obj/effect/overlay/H = masters[user] + var/obj/overlay/H = masters[user] H.dropInto(user.eyeobj) masters[user] = H @@ -393,7 +428,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/holopad/proc/set_dir_hologram(new_dir, mob/living/silicon/ai/user) if(masters[user]) - var/obj/effect/overlay/hologram = masters[user] + var/obj/overlay/hologram = masters[user] hologram.dir = new_dir @@ -423,6 +458,12 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/holopad/Destroy() for (var/mob/living/master in masters) clear_holo(master) + + if (LAZYLEN(linked_pdas)) + for (var/obj/item/modular_computer/pda/pda as anything in linked_pdas) + unlink_pda(pda) + linked_pdas = null + return ..() /* @@ -432,7 +473,7 @@ Holographic project of everything else. set name = "Hologram Debug New" set category = "CURRENT DEBUG" - var/obj/effect/overlay/hologram = new(loc)//Spawn a blank effect at the location. + var/obj/overlay/hologram = new(loc)//Spawn a blank effect at the location. var/icon/flat_icon = icon(getFlatIcon(src,0))//Need to make sure it's a new icon so the old one is not reused. flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. flat_icon.ChangeOpacity(0.5)//Make it half transparent. @@ -453,7 +494,7 @@ Holographic project of everything else. /obj/machinery/hologram/projector name = "hologram projector" desc = "It makes a hologram appear...with magnets or something..." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/coatrack.dmi' icon_state = "hologram0" /obj/machinery/hologram/holopad/longrange diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm index cb642161651c1..025d4e3173799 100644 --- a/code/game/machinery/holosign.dm +++ b/code/game/machinery/holosign.dm @@ -2,7 +2,7 @@ /obj/machinery/holosign name = "holosign" desc = "Small wall-mounted holographic projector." - icon = 'icons/obj/holosign.dmi' + icon = 'icons/obj/machines/holosign.dmi' icon_state = "sign_off" layer = ABOVE_DOOR_LAYER idle_power_usage = 2 @@ -36,7 +36,7 @@ set_light(0) else icon_state = on_icon - set_light(0.5, 0.5, 1, l_color = COLOR_CYAN_BLUE) + set_light(1, 0.5, COLOR_CYAN_BLUE) /singleton/public_access/public_variable/holosign_on expected_type = /obj/machinery/holosign @@ -51,7 +51,7 @@ /singleton/public_access/public_method/holosign_toggle name = "holosign toggle" desc = "Toggle the holosign's active state." - call_proc = /obj/machinery/holosign/proc/toggle + call_proc = TYPE_PROC_REF(/obj/machinery/holosign, toggle) /singleton/stock_part_preset/radio/receiver/holosign frequency = BUTTON_FREQ @@ -71,8 +71,8 @@ /obj/machinery/button/holosign name = "holosign switch" desc = "A remote control switch for holosign." - icon = 'icons/obj/power.dmi' - icon_state = "crema_switch" + icon = 'icons/obj/structures/buttons.dmi' + icon_state = "light0" /obj/machinery/button/holosign/on_update_icon() icon_state = "light[active]" diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 49e35e673f92e..cb550de0be794 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -1,7 +1,7 @@ /obj/machinery/igniter name = "igniter" desc = "It's useful for igniting flammable items." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/igniter.dmi' icon_state = "igniter1" var/on = 0 anchored = TRUE @@ -64,7 +64,7 @@ /singleton/public_access/public_method/igniter_toggle name = "igniter toggle" desc = "Toggle the igniter on or off." - call_proc = /obj/machinery/igniter/proc/ignite + call_proc = TYPE_PROC_REF(/obj/machinery/igniter, ignite) /singleton/stock_part_preset/radio/receiver/igniter frequency = BUTTON_FREQ @@ -73,9 +73,9 @@ // Wall mounted remote-control igniter. /obj/machinery/sparker - name = "Mounted igniter" + name = "mounted igniter" desc = "A wall-mounted ignition device." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/mounted_igniter.dmi' icon_state = "migniter" var/disable = 0 var/last_spark = 0 @@ -104,17 +104,14 @@ icon_state = "migniter-p" // src.sd_SetLuminosity(0) -/obj/machinery/sparker/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W)) - add_fingerprint(user) - disable = !disable - if(disable) - user.visible_message(SPAN_WARNING("[user] has disabled the [src]!"), SPAN_WARNING("You disable the connection to the [src].")) - else if(!disable) - user.visible_message(SPAN_WARNING("[user] has reconnected the [src]!"), SPAN_WARNING("You fix the connection to the [src].")) - update_icon() - else - ..() + +/obj/machinery/sparker/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + disable = !disable + balloon_alert_to_viewers("[disable ? "отключено!" : "включено!"]") + update_icon() /obj/machinery/sparker/attack_ai() if (anchored) @@ -131,7 +128,7 @@ flick("migniter-spark", src) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread s.set_up(2, 1, src) s.start() src.last_spark = world.time @@ -151,7 +148,7 @@ /singleton/public_access/public_method/sparker_spark name = "spark" desc = "Creates sparks to ignite nearby gases." - call_proc = /obj/machinery/sparker/proc/ignite + call_proc = TYPE_PROC_REF(/obj/machinery/sparker, ignite) /singleton/stock_part_preset/radio/receiver/sparker frequency = BUTTON_FREQ diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index 4477c041a622c..c44a0fcc08d52 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -1,7 +1,7 @@ /obj/machinery/jukebox name = "mediatronic jukebox" desc = "An immense, standalone touchscreen on a swiveling base, equipped with phased array speakers. Embossed on one corner of the ultrathin bezel is the brand name, 'Leitmotif Enterprise Edition'." - icon = 'icons/obj/jukebox_new.dmi' + icon = 'icons/obj/machines/jukebox_new.dmi' icon_state = "jukebox3" anchored = TRUE density = TRUE @@ -10,6 +10,8 @@ active_power_usage = 100 clicksound = 'sound/machines/buttonbeep.ogg' pixel_x = -8 + obj_flags = OBJ_FLAG_ANCHORABLE + layer = ABOVE_WINDOW_LAYER var/jukebox/jukebox @@ -27,14 +29,15 @@ /obj/machinery/jukebox/on_update_icon() - overlays.Cut() + ClearOverlays() if (!anchored || inoperable()) icon_state = "[initial(icon_state)]-[MACHINE_IS_BROKEN(src) ? "broken" : "nopower"]" return icon_state = initial(icon_state) if (!jukebox?.playing) return - overlays += "[initial(icon_state)]-[emagged ? "emagged" : "running"]" + AddOverlays(emissive_appearance(icon, "[initial(icon_state)]-[emagged ? "emagged" : "running"]")) + AddOverlays("[initial(icon_state)]-[emagged ? "emagged" : "running"]") /obj/machinery/jukebox/powered() @@ -59,19 +62,10 @@ return TRUE -/obj/machinery/jukebox/attackby(obj/item/I, mob/user) - if (isWrench(I)) - add_fingerprint(user) - wrench_floor_bolts(user, 0) - power_change() - return - return ..() - - - /obj/machinery/jukebox/old name = "space jukebox" desc = "A battered and hard-loved jukebox in some forgotten style, carefully restored to some semblance of working condition." - icon = 'icons/obj/jukebox.dmi' + icon = 'icons/obj/machines/jukebox.dmi' icon_state = "jukebox2" pixel_x = 0 + layer = STRUCTURE_LAYER diff --git a/code/game/machinery/kitchen/cookers.dm b/code/game/machinery/kitchen/cookers.dm index 172d42f1b2d95..d9b21434d1a9a 100644 --- a/code/game/machinery/kitchen/cookers.dm +++ b/code/game/machinery/kitchen/cookers.dm @@ -13,7 +13,7 @@ /obj/machinery/cooker name = "cooker" desc = "You shouldn't be seeing this!" - icon = 'icons/obj/cooking_machines.dmi' + icon = 'icons/obj/machines/cooking_machines.dmi' density = TRUE anchored = TRUE idle_power_usage = 0 @@ -32,7 +32,7 @@ var/threshold //Whether (world.time - started) has passed cook_time or burn_time var/started //The world.time when cooking started var/default_color //The fallback color to assign to cooked things if the mode does not supply one - var/datum/effect/effect/system/smoke_spread/bad/smoke + var/datum/effect/smoke_spread/bad/smoke /obj/machinery/cooker/Initialize() @@ -54,12 +54,12 @@ . = ..() if (distance < 5) if (is_processing) - to_chat(user, "It is[is_processing ? "" : " not"] running.") + . += SPAN_NOTICE("It is[is_processing ? "" : " not"] running.") if (distance < 3) if (length(cooking)) - to_chat(user, "You can see \an [english_list(cooking)] inside.") + . += SPAN_NOTICE("You can see \an [english_list(cooking)] inside.") else - to_chat(user, "It is empty.") + . += SPAN_NOTICE("It is empty.") /obj/machinery/cooker/components_are_accessible(path) @@ -134,27 +134,31 @@ to_chat(user, "The contents of \the [src] will now be [cook_modes[mode]["desc"]].") -/obj/machinery/cooker/attackby(obj/item/I, mob/user) +/obj/machinery/cooker/use_tool(obj/item/I, mob/living/user, list/click_params) if (is_processing) to_chat(user, SPAN_WARNING("Turn off \the [src] first.")) - return - . = component_attackby(I, user) - if (.) + return TRUE + if ((. = ..())) return if (stat) to_chat(user, SPAN_WARNING("\The [src] is in no condition to operate.")) - return + return TRUE if (!istype(I, /obj/item/reagent_containers/food/snacks)) to_chat(user, SPAN_WARNING("Cooking \a [I] wouldn't be very tasty.")) - return + return TRUE + var/obj/item/reagent_containers/food/snacks/F = I + if (!F.can_use_cooker) + to_chat(user, SPAN_WARNING("Cooking \a [I] wouldn't be very tasty.")) + return TRUE if (length(cooking) >= capacity) to_chat(user, SPAN_WARNING("\The [src] is already full up.")) - return + return TRUE if (!user.unEquip(I)) - return + return TRUE user.visible_message("\The [user] puts \the [I] into \the [src].") I.forceMove(src) cooking += I + return TRUE /obj/machinery/cooker/Process() @@ -225,7 +229,7 @@ var/result_name = source.name if (flags & COOKER_STRIP_RAW) if (text_starts_with(result_name, "raw")) - result_name = trim(copytext(result_name, 4)) + result_name = trimtext(copytext(result_name, 4)) result.SetName("[prefix ? "[prefix] " : ""][result_name][suffix ? " [suffix]" : ""]") var/list/combined_names = result.combined_names if (combined_names) @@ -249,11 +253,11 @@ result.filling_color = BlendRGB(source.color || "#ffffff", tint, 0.5) else result.filling_color = (source.color || source.filling_color || "#ffffff") - if (result.type != /obj/item/reagent_containers/food/snacks/variable && istype(result, /obj/item/reagent_containers/food/snacks/variable)) + if (result.type != /obj/item/reagent_containers/food/snacks/variable) var/image/I = image(result.icon, result, "[result.icon_state]_filling") I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR I.color = result.filling_color - result.overlays += I + result.AddOverlays(I) /obj/machinery/cooker/candy @@ -387,15 +391,15 @@ "desc" = "roasted", "flags" = COOKER_STRIP_RAW ), - "Personal Pizza" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/pizza, + "Pizza" = list( + "type" = /obj/item/reagent_containers/food/snacks/sliceable/variable/pizza, "suffix" = "pizza", "desc" = "made into a pizza", "color" = null, "flags" = COOKER_STRIP_RAW ), "Bread" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/bread, + "type" = /obj/item/reagent_containers/food/snacks/sliceable/variable/bread, "suffix" = "bread", "desc" = "made into bread", "color" = null, @@ -408,8 +412,8 @@ "color" = null, "flags" = COOKER_STRIP_RAW ), - "Small Cake" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/cake, + "Cake" = list( + "type" = /obj/item/reagent_containers/food/snacks/sliceable/variable/cake, "suffix" = "cake", "desc" = "made into a cake", "color" = null, @@ -451,7 +455,7 @@ "flags" = COOKER_STRIP_RAW ), "Donut" = list( - "type" = /obj/item/reagent_containers/food/snacks/variable/donut, + "type" = /obj/item/reagent_containers/food/snacks/donut/variable, "suffix" = "donut", "desc" = "made into a donut", "color" = null, @@ -490,55 +494,106 @@ if (cook_mode == "Make Cereal") var/image/I = image(source.icon, source.icon_state) I.color = source.color - I.overlays += source.overlays + I.CopyOverlays(source) I.SetTransform(scale = 0.5) - result.icon = 'icons/obj/food.dmi' + result.icon = 'icons/obj/food/food.dmi' result.icon_state = "cereal_box" result.color = null - result.overlays += I + result.AddOverlays(I) result.filling_color = BlendRGB(source.color || source.filling_color , "#fcaf32") //for cereal contents /obj/item/reagent_containers/food/snacks/variable name = "cooked food" - icon = 'icons/obj/food_custom.dmi' + icon = 'icons/obj/food/food_custom.dmi' + bitesize = 2 + +/obj/item/reagent_containers/food/snacks/sliceable/variable + name = "cooked food" + icon = 'icons/obj/food/food_custom.dmi' + slice_path = /obj/item/reagent_containers/food/snacks/slice + slices_num = 5 + bitesize = 2 + + +/obj/item/reagent_containers/food/snacks/slice/variable + name = "cooked food slice" + icon = 'icons/obj/food/food_custom.dmi' + whole_path = /obj/item/reagent_containers/food/snacks/sliceable/variable bitesize = 2 -/obj/item/reagent_containers/food/snacks/variable/pizza - name = "personal pizza" - desc = "A personalized pan pizza meant for only one person." - icon_state = "personal_pizza" +/obj/item/reagent_containers/food/snacks/sliceable/variable/pizza + name = "pizza" + desc = "A tasty oven pizza meant to be shared." + icon_state = "pizza" + slice_path = /obj/item/reagent_containers/food/snacks/slice/variable/pizza + slices_num = 6 + nutriment_amt = 15 + nutriment_desc = list("pizza crust" = 8, "cheese" = 7) + + +/obj/item/reagent_containers/food/snacks/slice/variable/pizza + name = "pizza slice" + desc = "A tasty slice of pizza." + icon_state = "pizza_slice" + whole_path = /obj/item/reagent_containers/food/snacks/sliceable/variable/pizza -/obj/item/reagent_containers/food/snacks/variable/bread +/obj/item/reagent_containers/food/snacks/sliceable/variable/bread name = "bread" desc = "Tasty bread." icon_state = "breadcustom" + slice_path = /obj/item/reagent_containers/food/snacks/slice/variable/bread + nutriment_amt = 6 + nutriment_desc = list("bread" = 6) + +/obj/item/reagent_containers/food/snacks/slice/variable/bread + name = "bread slice" + desc = "A tasty slice of bread." + icon_state = "breadcustom_slice" + whole_path = /obj/item/reagent_containers/food/snacks/sliceable/variable/bread /obj/item/reagent_containers/food/snacks/variable/pie name = "pie" desc = "Tasty pie." icon_state = "piecustom" + nutriment_amt = 4 + nutriment_desc = list("pie" = 4) -/obj/item/reagent_containers/food/snacks/variable/cake +/obj/item/reagent_containers/food/snacks/sliceable/variable/cake name = "cake" desc = "A popular band." icon_state = "cakecustom" + slice_path = /obj/item/reagent_containers/food/snacks/slice/variable/cake + nutriment_amt = 15 + nutriment_desc = list("cake" = 8, "sweetness" = 7) + + +/obj/item/reagent_containers/food/snacks/slice/variable/cake + name = "cake slice" + desc = "A tasty slice of cake." + icon_state = "cakecustom_slice" + whole_path = /obj/item/reagent_containers/food/snacks/sliceable/variable/cake + trash = /obj/item/trash/plate /obj/item/reagent_containers/food/snacks/variable/pocket name = "hot pocket" desc = "You wanna put a bangin- oh, nevermind." icon_state = "donk" + nutriment_amt = 2 + nutriment_desc = list("heartiness" = 1,"dough" = 2) /obj/item/reagent_containers/food/snacks/variable/kebab name = "kebab" desc = "Remove this!" icon_state = "kabob" + nutriment_amt = 3 + nutriment_desc = list("kebab" = 3) /obj/item/reagent_containers/food/snacks/variable/waffles @@ -546,6 +601,9 @@ desc = "Made with love." icon_state = "waffles" gender = PLURAL + nutriment_amt = 4 + nutriment_desc = list("waffle" = 4) + trash = /obj/item/trash/waffles /obj/item/reagent_containers/food/snacks/variable/pancakes @@ -553,48 +611,67 @@ desc = "How does an oven make pancakes?" icon_state = "pancakescustom" gender = PLURAL + nutriment_amt = 4 + nutriment_desc = list("pancake" = 4) + trash = /obj/item/trash/plate /obj/item/reagent_containers/food/snacks/variable/cookie name = "cookie" desc = "Sugar snap!" icon_state = "cookie" + nutriment_amt = 3 + nutriment_desc = list("sweetness" = 1, "cookie" = 2) -/obj/item/reagent_containers/food/snacks/variable/donut - name = "filled donut" +/obj/item/reagent_containers/food/snacks/donut/variable + name = "donut" desc = "Donut eat this!" + icon = 'icons/obj/food/food_custom.dmi' icon_state = "donut" + nutriment_amt = 2 + nutriment_desc = list("donut" = 2) /obj/item/reagent_containers/food/snacks/variable/jawbreaker name = "flavored jawbreaker" desc = "It's like cracking a molar on a rainbow." icon_state = "jawbreaker" + nutriment_amt = 2 + nutriment_desc = list("a toothache" = 1, "sweetness" = 1) /obj/item/reagent_containers/food/snacks/variable/candybar name = "flavored chocolate bar" desc = "Made in a factory downtown." icon_state = "bar" + nutriment_amt = 2 + nutriment_desc = list("chocolate" = 2) /obj/item/reagent_containers/food/snacks/variable/sucker name = "flavored sucker" desc = "Suck, suck, suck." icon_state = "sucker" + nutriment_amt = 2 + nutriment_desc = list("sweetness" = 2) /obj/item/reagent_containers/food/snacks/variable/jelly name = "jelly" desc = "All your friends will be jelly." icon_state = "jellycustom" + nutriment_amt = 3 + nutriment_desc = list("sweetness" = 3) + trash = /obj/item/trash/snack_bowl /obj/item/reagent_containers/food/snacks/variable/stuffing name = "stuffing" desc = "Get stuffed." icon_state = "stuffing" + nutriment_amt = 3 + nutriment_desc = list("stuffing" = 3) /obj/item/reagent_containers/food/snacks/variable/shreds @@ -606,12 +683,14 @@ name = "stew" desc = "A hearty classic." icon_state = "stew" + nutriment_amt = 4 + nutriment_desc = list("stew" = 3) /obj/item/material/chopping_board name = "chopping board" desc = "A food preparation surface that allows you to combine food more easily." - icon = 'icons/obj/chopping_board.dmi' + icon = 'icons/obj/food/chopping_board.dmi' icon_state = "chopping_board" w_class = ITEM_SIZE_NORMAL default_material = MATERIAL_MAPLE @@ -641,7 +720,7 @@ result.icon = source.icon result.icon_state = source.icon_state result.color = source.color - result.overlays += source.overlays + result.CopyOverlays(source) result.name = source.name result.desc = source.desc qdel(source) @@ -670,11 +749,11 @@ to_chat(user, SPAN_WARNING("This food is partially eaten.") + SPAN_NOTICE(" You combine it anyway.")) else response = alert(user, "Combine Food Scraps?", "Combine Food", "Yes", "No") == "Yes" - if (!response) + if (!response || !user.use_sanity_check(src, other)) return FALSE if (!response && user.a_intent == I_HELP) response = alert(user, "Combine Food?", "Combine Food", "Yes", "No") == "Yes" - if (!response) + if (!response || !user.use_sanity_check(src, other)) return FALSE if (!user.unEquip(other, src)) return FALSE @@ -702,9 +781,9 @@ I.pixel_x = rand(-8, 8) I.pixel_y = rand(-8, 8) I.color = other.color - I.overlays += other.overlays + I.CopyOverlays(other) I.SetTransform(scale = 0.8) - overlays += I + AddOverlays(I) qdel(other) return TRUE diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index 3c475df6b4125..1d778262a2e37 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -2,7 +2,7 @@ /obj/machinery/gibber name = "meat grinder" desc = "The name isn't descriptive enough?" - icon = 'icons/obj/kitchen.dmi' + icon = 'icons/obj/machines/kitchen.dmi' icon_state = "grinder" density = TRUE anchored = TRUE @@ -34,17 +34,17 @@ . = ..() /obj/machinery/gibber/on_update_icon() - overlays.Cut() + ClearOverlays() if (dirty) - src.overlays += image('icons/obj/kitchen.dmi', "grbloody") + AddOverlays(image('icons/obj/machines/kitchen.dmi', "grbloody")) if(inoperable()) return if (!occupant) - src.overlays += image('icons/obj/kitchen.dmi', "grjam") + AddOverlays(image('icons/obj/machines/kitchen.dmi', "grjam")) else if (operating) - src.overlays += image('icons/obj/kitchen.dmi', "gruse") + AddOverlays(image('icons/obj/machines/kitchen.dmi', "gruse")) else - src.overlays += image('icons/obj/kitchen.dmi', "gridle") + AddOverlays(image('icons/obj/machines/kitchen.dmi', "gridle")) /obj/machinery/gibber/relaymove(mob/user as mob) src.go_out() @@ -52,18 +52,18 @@ /obj/machinery/gibber/physical_attack_hand(mob/user) if(operating) - to_chat(user, SPAN_DANGER("\The [src] is locked and running, wait for it to finish.")) + to_chat(user, SPAN_WARNING("\The [src] is locked and running, wait for it to finish.")) return TRUE - src.startgibbing(user) + startgibbing(user) return TRUE /obj/machinery/gibber/examine(mob/user) . = ..() - to_chat(user, "The safety guard is [emagged ? SPAN_DANGER("disabled") : "enabled"].") + . += SPAN_NOTICE("The safety guard is [emagged ? SPAN_DANGER("disabled") : "enabled"].") /obj/machinery/gibber/emag_act(remaining_charges, mob/user) emagged = !emagged - to_chat(user, SPAN_CLASS("danger", "You [emagged ? "disable" : "enable"] \the [src]'s safety guard.")) + to_chat(user, SPAN_DANGER("You [emagged ? "disable" : "enable"] \the [src]'s safety guard.")) return 1 /obj/machinery/gibber/components_are_accessible(path) @@ -74,69 +74,74 @@ return SPAN_NOTICE("You must wait for \the [src] to finish operating first!") return ..() -/obj/machinery/gibber/attackby(obj/item/W, mob/user) +/obj/machinery/gibber/use_tool(obj/item/W, mob/living/user, list/click_params) if(!operating) - return - if(istype(W, /obj/item/grab)) - var/obj/item/grab/G = W - if(!G.force_danger()) - to_chat(user, SPAN_DANGER("You need a better grip to do that!")) - return - move_into_gibber(user,G.affecting) - qdel(G) - else if(istype(W, /obj/item/organ)) + return TRUE + + if (istype(W, /obj/item/organ)) if(!user.unEquip(W)) - return + return TRUE qdel(W) user.visible_message(SPAN_DANGER("\The [user] feeds \the [W] into \the [src], obliterating it.")) - else - return ..() - -/obj/machinery/gibber/MouseDrop_T(mob/target, mob/user) - if(user.stat || user.restrained()) - return - move_into_gibber(user,target) + return TRUE -/obj/machinery/gibber/proc/move_into_gibber(mob/user,mob/living/victim) + return ..() - if(src.occupant) - to_chat(user, SPAN_DANGER("\The [src] is full, empty it first!")) - return +/obj/machinery/gibber/user_can_move_target_inside(mob/target, mob/user) + if (occupant) + to_chat(user, SPAN_WARNING("\The [src] is already occupied!")) + return FALSE + if (operating) + to_chat(user, SPAN_WARNING("\The [src] is locked and running, wait for it to finish.")) + return FALSE + if (!(istype(target, /mob/living/carbon)) && !(istype(target, /mob/living/simple_animal)) ) + to_chat(user, SPAN_WARNING("\The [target] is not suitable for \the [src]!")) + return FALSE + if (istype(target,/mob/living/carbon/human) && !emagged) + to_chat(user, SPAN_WARNING("\The [src] safety guard is engaged!")) + return FALSE + return ..() - if(operating) - to_chat(user, SPAN_DANGER("\The [src] is locked and running, wait for it to finish.")) - return +/obj/machinery/gibber/use_grab(obj/item/grab/grab, list/click_params) + if (!user_can_move_target_inside(grab.affecting, grab.assailant)) + return TRUE + if (!grab.force_danger()) + to_chat(grab.assailant, SPAN_WARNING("You need a better grip to do that!")) + return TRUE + move_into_gibber(grab.assailant, grab.affecting) + return TRUE - if(!(istype(victim, /mob/living/carbon)) && !(istype(victim, /mob/living/simple_animal)) ) - to_chat(user, SPAN_DANGER("This is not suitable for \the [src]!")) +/obj/machinery/gibber/MouseDrop_T(mob/target, mob/user) + if (!ismob(target) || !CanMouseDrop(target, user)) return - - if(istype(victim,/mob/living/carbon/human) && !emagged) - to_chat(user, SPAN_DANGER("\The [src] safety guard is engaged!")) + if (user == target && user_can_move_target_inside(target, user)) + move_into_gibber(user, target) return - - - if(victim.abiotic(1)) - to_chat(user, SPAN_DANGER("\The [victim] may not have any abiotic items on.")) + else + to_chat(user, SPAN_WARNING("You need to grab \the [target] to be able to do that!")) return +/obj/machinery/gibber/proc/move_into_gibber(mob/user, mob/living/victim) user.visible_message(SPAN_DANGER("\The [user] starts to put \the [victim] into \the [src]!")) - src.add_fingerprint(user) + add_fingerprint(user) if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant) user.visible_message(SPAN_DANGER("\The [user] stuffs \the [victim] into \the [src]!")) if(victim.client) victim.client.perspective = EYE_PERSPECTIVE victim.client.eye = src victim.forceMove(src) - src.occupant = victim - GLOB.destroyed_event.register(occupant, src, .proc/occupant_destroyed) + victim.remove_grabs_and_pulls() + occupant = victim + if (user != victim) + add_fingerprint(victim) + GLOB.destroyed_event.register(occupant, src, PROC_REF(occupant_destroyed)) update_icon() /obj/machinery/gibber/proc/occupant_destroyed(mob/_occupant) if (occupant == _occupant) occupant = null update_icon() - GLOB.destroyed_event.unregister(_occupant, src, .proc/occupant_destroyed) + GLOB.destroyed_event.unregister(_occupant, src, PROC_REF(occupant_destroyed)) /obj/machinery/gibber/verb/eject() set category = "Object" @@ -157,27 +162,27 @@ if (src.occupant.client) src.occupant.client.eye = src.occupant.client.mob src.occupant.client.perspective = MOB_PERSPECTIVE - GLOB.destroyed_event.unregister(occupant, src, .proc/occupant_destroyed) + GLOB.destroyed_event.unregister(occupant, src, PROC_REF(occupant_destroyed)) src.occupant.dropInto(loc) src.occupant = null update_icon() return /obj/machinery/gibber/proc/startgibbing(mob/user as mob) - if(src.operating) + if (operating) return - if(!src.occupant) - visible_message(SPAN_DANGER("You hear a loud metallic grinding sound.")) + if (!occupant) + visible_message(SPAN_WARNING("You hear metallic gears click harmlessly.")) return use_power_oneoff(1000) - visible_message(SPAN_CLASS("danger", "You hear a loud [occupant.isSynthetic() ? "metallic" : "squelchy"] grinding sound.")) + visible_message(SPAN_DANGER("You hear a loud [occupant.isSynthetic() ? "metallic" : "squelchy"] grinding sound.")) src.operating = 1 update_icon() admin_attack_log(user, occupant, "Gibbed the victim", "Was gibbed", "gibbed") src.occupant.ghostize() - addtimer(new Callback(src, .proc/finish_gibbing), gib_time) + addtimer(CALLBACK(src, PROC_REF(finish_gibbing)), gib_time) var/list/gib_products = shuffle(occupant.harvest_meat() | occupant.harvest_skin() | occupant.harvest_bones()) if(length(gib_products) <= 0) @@ -199,7 +204,7 @@ slab_nutrition /= length(gib_products) - var/drop_products = Floor(length(gib_products) * 0.35) + var/drop_products = floor(length(gib_products) * 0.35) for(var/atom/movable/thing in gib_products) if(drop_products) drop_products-- diff --git a/code/game/machinery/kitchen/icecream.dm b/code/game/machinery/kitchen/icecream.dm index 79a389dfc05dd..a3a738cc6696e 100644 --- a/code/game/machinery/kitchen/icecream.dm +++ b/code/game/machinery/kitchen/icecream.dm @@ -12,7 +12,7 @@ /obj/machinery/icecream_vat name = "icecream vat" desc = "A heavy metal container used to produce and store ice cream." - icon = 'icons/obj/kitchen.dmi' + icon = 'icons/obj/machines/kitchen.dmi' icon_state = "icecream_vat" density = TRUE anchored = FALSE @@ -99,7 +99,7 @@ popup.set_content(dat) popup.open() -/obj/machinery/icecream_vat/attackby(obj/item/O as obj, mob/user as mob) +/obj/machinery/icecream_vat/use_tool(obj/item/O, mob/living/user, list/click_params) if(istype(O, /obj/item/reagent_containers/food/snacks/icecream)) var/obj/item/reagent_containers/food/snacks/icecream/I = O if(!I.ice_creamed) @@ -115,11 +115,12 @@ to_chat(user, SPAN_WARNING("There is not enough icecream left!")) else to_chat(user, SPAN_NOTICE("[O] already has icecream in it.")) - return 1 - else if(O.is_open_container()) + return TRUE + + if(O.is_open_container()) return - else - ..() + + return ..() /obj/machinery/icecream_vat/proc/make(mob/user, make_type, amount) for(var/R in get_ingredient_list(make_type)) @@ -193,7 +194,7 @@ /obj/item/reagent_containers/food/snacks/icecream/proc/add_ice_cream(flavour_name) name = "[flavour_name] icecream" - src.overlays += "icecream_[flavour_name]" + AddOverlays("icecream_[flavour_name]") desc = "Delicious [cone_type] cone with a dollop of [flavour_name] ice cream." ice_creamed = 1 diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index 85d549acb2d40..b275a73d106ef 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -2,7 +2,7 @@ /obj/machinery/microwave name = "microwave" desc = "A possibly occult device capable of perfectly preparing many types of food." - icon = 'icons/obj/kitchen.dmi' + icon = 'icons/obj/machines/kitchen.dmi' icon_state = "mw" layer = BELOW_OBJ_LAYER density = TRUE @@ -10,6 +10,7 @@ idle_power_usage = 5 active_power_usage = 100 atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_REACT | ATOM_FLAG_OPEN_CONTAINER + obj_flags = OBJ_FLAG_CAN_TABLE | OBJ_FLAG_ANCHORABLE construct_state = /singleton/machine_construction/default/panel_closed uncreated_component_parts = null stat_immune = 0 @@ -54,60 +55,51 @@ * Item Adding ********************/ -/obj/machinery/microwave/attackby(obj/item/O as obj, mob/user as mob) - if(broken > 0) - // Start repairs by using a screwdriver - if(broken == 2 && isScrewdriver(O)) - user.visible_message( \ - SPAN_NOTICE("\The [user] starts to fix part of the microwave."), \ - SPAN_NOTICE("You start to fix part of the microwave.") \ - ) - if (do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message( \ - SPAN_NOTICE("\The [user] fixes part of the microwave."), \ - SPAN_NOTICE("You have fixed part of the microwave.") \ - ) - broken = 1 // Fix it a bit - - // Finish repairs using a wrench - else if(broken == 1 && isWrench(O)) - user.visible_message( \ - SPAN_NOTICE("\The [user] starts to fix part of the microwave."), \ - SPAN_NOTICE("You start to fix part of the microwave.") \ - ) - if (do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message( \ - SPAN_NOTICE("\The [user] fixes the microwave."), \ - SPAN_NOTICE("You have fixed the microwave.") \ - ) - broken = 0 // Fix it! - dirtiness = 0 // just to be sure - update_icon() - atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER - - // Otherwise, we can't add anything to the micrwoave - else - to_chat(user, SPAN_WARNING("It's broken, and this isn't the right way to fix it!")) +/obj/machinery/microwave/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(broken != 1) + return + user.visible_message( \ + SPAN_NOTICE("[user] starts to fix part of the microwave."), \ + SPAN_NOTICE("You start to fix part of the microwave.") \ + ) + if(!tool.use_as_tool(src, user, 2 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) return + user.visible_message( \ + SPAN_NOTICE("[user] fixes the microwave."), \ + SPAN_NOTICE("You have fixed the microwave.") \ + ) + broken = 0 // Fix it! + dirtiness = 0 // just to be sure + update_icon() + atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_OPEN_CONTAINER - else if((. = component_attackby(O, user))) - dispose() +/obj/machinery/microwave/screwdriver_act(mob/living/user, obj/item/tool) + . = ..() + if(broken != 2) + return + USE_FEEDBACK_REPAIR_START(user) + if(!tool.use_as_tool(src, user, 2 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) return + USE_FEEDBACK_REPAIR_FINISH(user) + broken = 1 // Fix it a bit - else if(dirtiness == 100) // The microwave is all dirty, so it can't be used! +/obj/machinery/microwave/use_tool(obj/item/O, mob/living/user, list/click_params) + if (broken > 0) + to_chat(user, SPAN_WARNING("It's broken, and this isn't the right way to fix it!")) + return TRUE + + if(dirtiness == 100) // The microwave is all dirty, so it can't be used! var/has_rag = istype(O, /obj/item/reagent_containers/glass/rag) var/has_cleaner = O.reagents != null && O.reagents.has_reagent(/datum/reagent/space_cleaner, 5) - - // If they're trying to clean it, let them if (has_rag || has_cleaner) - user.visible_message( \ - SPAN_NOTICE("\The [user] starts to clean the microwave."), \ + SPAN_NOTICE("[user] starts to clean the microwave."), \ SPAN_NOTICE("You start to clean the microwave.") \ ) if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) user.visible_message( \ - SPAN_NOTICE("\The [user] has cleaned the microwave."), \ + SPAN_NOTICE("[user] has cleaned the microwave."), \ SPAN_NOTICE("You clean out the microwave.") \ ) @@ -125,49 +117,49 @@ // Otherwise, bad luck! else to_chat(user, SPAN_WARNING("You need to clean [src] before you use it!")) - return - - else if(is_type_in_list(O, GLOB.microwave_accepts_items)) + return TRUE + if (is_type_in_list(O, GLOB.microwave_accepts_items)) if (length(ingredients) >= GLOB.microwave_maximum_item_storage) to_chat(user, SPAN_WARNING("This [src] is full of ingredients - you can't fit any more.")) + return TRUE - else if(istype(O, /obj/item/stack)) // This is bad, but I can't think of how to change it + if (istype(O, /obj/item/stack)) // This is bad, but I can't think of how to change it var/obj/item/stack/S = O if(S.use(1)) var/stack_item = new O.type (src) LAZYADD(ingredients, stack_item) user.visible_message( \ - SPAN_NOTICE("\The [user] has added one of [O] to \the [src]."), \ - SPAN_NOTICE("You add one of [O] to \the [src].")) + SPAN_NOTICE("[user] has added one of [O] to [src]."), \ + SPAN_NOTICE("You add one of [O] to [src].")) return TRUE else if (!user.unEquip(O, src)) - return + return TRUE LAZYADD(ingredients, O) user.visible_message( \ - SPAN_NOTICE("\The [user] has added \the [O] to \the [src]."), \ - SPAN_NOTICE("You add \the [O] to \the [src].")) + SPAN_NOTICE("[user] has added [O] to [src]."), \ + SPAN_NOTICE("You add [O] to [src].")) return TRUE - return - - else if(istype(O,/obj/item/reagent_containers/glass) || \ + if (istype(O,/obj/item/reagent_containers/glass) || \ istype(O,/obj/item/reagent_containers/food/drinks) || \ istype(O,/obj/item/reagent_containers/food/condiment) \ ) if (!O.reagents) - return + to_chat(user, SPAN_WARNING("[O] is empty!")) + return TRUE for (var/datum/reagent/R in O.reagents.reagent_list) if (!(R.type in GLOB.microwave_accepts_reagents)) - to_chat(user, SPAN_WARNING("Your [O] contains components unsuitable for cookery.")) - return + to_chat(user, SPAN_WARNING("[O] contains [R] which is unsuitable for cookery.")) + return TRUE + return FALSE //This will call reagent_container's use_after which handles transferring reagents. - else if(istype(O, /obj/item/storage)) + if (istype(O, /obj/item/storage)) if (length(ingredients) >= GLOB.microwave_maximum_item_storage) to_chat(user, SPAN_WARNING("[src] is completely full!")) - return + return TRUE var/obj/item/storage/bag/P = O var/objects_loaded = 0 @@ -179,46 +171,31 @@ if (objects_loaded) if (!length(P.contents)) - user.visible_message(SPAN_NOTICE("\The [user] empties \the [P] into \the [src]."), - SPAN_NOTICE("You empty \the [P] into \the [src].")) + user.visible_message(SPAN_NOTICE("[user] empties [P] into [src]."), + SPAN_NOTICE("You empty [P] into [src].")) else - user.visible_message(SPAN_NOTICE("\The [user] empties \the [P] into \the [src]."), - SPAN_NOTICE("You empty what you can from \the [P] into \the [src].")) + user.visible_message(SPAN_NOTICE("[user] empties [P] into [src]."), + SPAN_NOTICE("You empty what you can from [P] into [src].")) return TRUE else - to_chat(user, SPAN_WARNING("\The [P] doesn't contain any compatible items to put into \the [src]!")) + to_chat(user, SPAN_WARNING("[P] doesn't contain any compatible items to put into [src]!")) - return - - else if(istype(O, /obj/item/grab)) - var/obj/item/grab/G = O - to_chat(user, SPAN_WARNING("This is ridiculous. You can't fit \the [G.affecting] in \the [src].")) - return - - else if(isWrench(O)) - user.visible_message( \ - SPAN_NOTICE("\The [user] begins [anchored ? "securing" : "unsecuring"] the microwave."), \ - SPAN_NOTICE("You attempt to [anchored ? "secure" : "unsecure"] the microwave.") - ) - if (do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - anchored = !anchored - user.visible_message( \ - SPAN_NOTICE("\The [user] [anchored ? "secures" : "unsecures"] the microwave."), \ - SPAN_NOTICE("You [anchored ? "secure" : "unsecure"] the microwave.") - ) - - else - to_chat(user, SPAN_WARNING("You have no idea what you can cook with this [O].")) + return TRUE updateUsrDialog() + return ..() + +/obj/machinery/microwave/use_grab(obj/item/grab/grab, list/click_params) + to_chat(grab.assailant, SPAN_WARNING("This is ridiculous. You can't fit [grab.affecting] in [src].")) + return TRUE /obj/machinery/microwave/components_are_accessible(path) return (broken == 0) && ..() /obj/machinery/microwave/cannot_transition_to(state_path, mob/user) if(broken) - return SPAN_NOTICE("\The [src] is too broken to do this!") + return SPAN_NOTICE("[src] is too broken to do this!") . = ..() /obj/machinery/microwave/state_transition(singleton/machine_construction/new_state) @@ -428,7 +405,7 @@ /obj/machinery/microwave/proc/muck_finish() playsound(loc, 'sound/machines/ding.ogg', 50, 1) - visible_message(SPAN_WARNING("Muck splatters over the inside of \the [src]!")) + visible_message(SPAN_WARNING("Muck splatters over the inside of [src]!")) dirtiness = 100 // Make it dirty so it can't be used util cleaned obj_flags = null //So you can't add condiments operating = FALSE // Turn it off again aferwards @@ -436,16 +413,16 @@ update_icon() /obj/machinery/microwave/proc/broke() - var/datum/effect/effect/system/spark_spread/s = new + var/datum/effect/spark_spread/s = new s.set_up(2, 1, src) s.start() if (prob(100 * break_multiplier)) - visible_message(SPAN_WARNING("\The [src] breaks!")) //Let them know they're stupid + visible_message(SPAN_WARNING("[src] breaks!")) //Let them know they're stupid broken = 2 // Make it broken so it can't be used util fixed obj_flags = null //So you can't add condiments updateUsrDialog() else - visible_message(SPAN_WARNING("\The [src] sputters and grinds to a halt!")) + visible_message(SPAN_WARNING("[src] sputters and grinds to a halt!")) operating = FALSE // Turn it off again aferwards update_icon() diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index eef1341fa8ca8..49619ad72b737 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -3,7 +3,7 @@ */ /obj/machinery/smartfridge name = "\improper SmartFridge" - icon = 'icons/obj/vending.dmi' + icon = 'icons/obj/machines/vending.dmi' icon_state = "fridge_sci" layer = BELOW_OBJ_LAYER density = TRUE @@ -12,22 +12,39 @@ active_power_usage = 100 atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_REACT obj_flags = OBJ_FLAG_ANCHORABLE | OBJ_FLAG_ROTATABLE - var/static/max_n_of_items = 999 // Sorry but the BYOND infinite loop detector doesn't look things over 1000. + var/icon_base = "fridge_sci" var/icon_contents = "chem" - var/list/item_records = list() - var/datum/stored_items/currently_vending = null //What we're putting out of the machine. - var/seconds_electrified = 0; - var/shoot_inventory = 0 var/locked = 0 - var/scan_id = 1 - var/is_secure = 0 + var/datum/stored_items/currently_vending = null + /// Associative list (/obj/item => /number) representing the items the fridge should initially contain. + var/list/item_records = list() + /// The maximum number of items the fridge can hold. Multiplicated by the matter bin component's rating. + var/static/max_n_of_items = 999 + /// How long in ticks the fridge is electrified for. Decrements every process. + var/seconds_electrified = 0 + /// Whether the fridge should randomly shoot held items at a nearby living target or not. + var/shoot_inventory = FALSE + /// Whether the fridge requires ID scanning. Used for the secure variant of the fridge. + var/scan_id = TRUE + /// Whether the fridge is considered secure. Used for wiring and display. + var/is_secure = FALSE + /// Whether the fridge can dry its' contents. Used for display. + var/can_dry = FALSE + /// Whether the fridge is currently drying. Used by [drying racks][/obj/machinery/smartfridge/drying_rack]. + var/drying = FALSE + /// List of type paths this fridge accepts. + var/list/accepted_types = list( + /obj/item/reagent_containers/food/snacks/grown, + /obj/item/seeds, + /obj/item/shellfish + ) /obj/machinery/smartfridge/secure - is_secure = 1 + is_secure = TRUE /obj/machinery/smartfridge/New() - ..() + . = ..() if(is_secure) wires = new/datum/wires/smartfridge/secure(src) else @@ -45,169 +62,6 @@ return list() return ..() -/obj/machinery/smartfridge/proc/accept_check(obj/item/O as obj) - if(istype(O,/obj/item/reagent_containers/food/snacks/grown) || istype(O,/obj/item/seeds) || istype(O,/obj/item/shellfish)) - return 1 - return 0 - -/obj/machinery/smartfridge/seeds - name = "\improper MegaSeed Servitor" - desc = "When you need seeds fast!" - -/obj/machinery/smartfridge/seeds/accept_check(obj/item/O as obj) - if(istype(O,/obj/item/seeds)) - return 1 - return 0 - -/obj/machinery/smartfridge/secure/extract - name = "\improper Slime Extract Storage" - desc = "A refrigerated storage unit for slime extracts." - icon_contents = "slime" - req_access = list(access_research) - -/obj/machinery/smartfridge/secure/extract/accept_check(obj/item/O as obj) - if(istype(O,/obj/item/slime_extract)) - return 1 - return 0 - -/obj/machinery/smartfridge/secure/medbay - name = "\improper Refrigerated Medicine Storage" - desc = "A refrigerated storage unit for storing medicine and chemicals." - icon_contents = "chem" - req_access = list(list(access_medical,access_chemistry)) - -/obj/machinery/smartfridge/secure/medbay/accept_check(obj/item/O as obj) - if(istype(O,/obj/item/reagent_containers/glass)) - return 1 - if(istype(O,/obj/item/storage/pill_bottle)) - return 1 - if(istype(O,/obj/item/reagent_containers/pill)) - return 1 - return 0 - -/obj/machinery/smartfridge/secure/virology - name = "\improper Refrigerated Virus Storage" - desc = "A refrigerated storage unit for storing viral material." - req_access = list(access_virology) - icon_contents = "chem" - -/obj/machinery/smartfridge/secure/virology/accept_check(obj/item/O as obj) - if(istype(O,/obj/item/reagent_containers/glass/beaker/vial)) - return 1 - return 0 - -/obj/machinery/smartfridge/chemistry - name = "\improper Smart Chemical Storage" - desc = "A refrigerated storage unit for medicine and chemical storage." - icon_contents = "chem" - -/obj/machinery/smartfridge/chemistry/accept_check(obj/item/O as obj) - if(istype(O,/obj/item/storage/pill_bottle) || istype(O,/obj/item/reagent_containers)) - return 1 - return 0 - -/obj/machinery/smartfridge/chemistry/virology - name = "\improper Smart Virus Storage" - desc = "A refrigerated storage unit for volatile sample storage." - - -/obj/machinery/smartfridge/drinks - name = "\improper Drink Showcase" - desc = "A refrigerated storage unit for tasty tasty alcohol." - icon_state = "fridge_dark" - icon_base = "fridge_dark" - icon_contents = "drink" - -/obj/machinery/smartfridge/drinks/accept_check(obj/item/O as obj) - if(istype(O,/obj/item/reagent_containers/glass) || istype(O,/obj/item/reagent_containers/food/drinks) || istype(O,/obj/item/reagent_containers/food/condiment)) - return 1 - -/obj/machinery/smartfridge/foods - name = "\improper Hot Foods Display" - desc = "A heated storage unit for piping hot meals." - icon_state = "fridge_food" - icon_state = "fridge_food" - icon_contents = "food" - -/obj/machinery/smartfridge/foods/accept_check(obj/item/O as obj) - if(istype(O,/obj/item/reagent_containers/food/snacks) || istype(O,/obj/item/material/kitchen/utensil)) - return 1 - -/obj/machinery/smartfridge/drying_rack - name = "drying rack" - desc = "A machine for drying plants." - icon_state = "drying_rack" - -/obj/machinery/smartfridge/drying_rack/accept_check(obj/item/O as obj) - if(istype(O, /obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/S = O - return S.dried_type - else if(istype(O, /obj/item/stack/material)) - var/obj/item/stack/material/mat = O - var/material/skin/skin_mat = mat.material - return istype(skin_mat) - return 0 - -/obj/machinery/smartfridge/drying_rack/Process() - ..() - if(inoperable()) - return - if(length(contents)) - dry() - update_icon() - -/obj/machinery/smartfridge/drying_rack/on_update_icon() - overlays.Cut() - if(inoperable()) - if(length(contents)) - icon_state = "drying_rack-plant-off" - else - icon_state = "drying_rack-off" - else - icon_state = "drying_rack" - if(length(contents)) - icon_state = "drying_rack-plant" - if(operable()) - icon_state = "drying_rack-close" - -/obj/machinery/smartfridge/drying_rack/proc/dry() - for(var/datum/stored_items/I in item_records) - for(var/thing in I.instances) - var/remove_thing = FALSE - if(istype(thing, /obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/S = thing - if(S.dry || !I.get_specific_product(get_turf(src), S)) - continue - if(S.dried_type == S.type) - S.dry = 1 - S.SetName("dried [S.name]") - S.color = "#a38463" - stock_item(S) - I.instances -= thing - I.amount-- - else - var/D = S.dried_type - new D(get_turf(src)) - remove_thing = TRUE - - else if(istype(thing, /obj/item/stack/material)) - var/obj/item/stack/material/skin = thing - if(!istype(skin.material, /material/skin)) - continue - var/material/skin/skin_mat = skin.material - if(!skin_mat.tans_to) - continue - var/material/leather_mat = SSmaterials.get_material_by_name(skin_mat.tans_to) - stock_item(new leather_mat.stack_type(get_turf(src), skin.amount, skin_mat.tans_to)) - remove_thing = TRUE - - if(remove_thing) - I.instances -= thing - I.amount-- - qdel(thing) - return - - /obj/machinery/smartfridge/Process() if(inoperable()) return @@ -217,17 +71,17 @@ src.throw_item() /obj/machinery/smartfridge/on_update_icon() - overlays.Cut() + ClearOverlays() if(inoperable()) icon_state = "[icon_base]-off" else icon_state = icon_base if(is_secure) - overlays += image(icon, "[icon_base]-sidepanel") + AddOverlays(image(icon, "[icon_base]-sidepanel")) if(panel_open) - overlays += image(icon, "[icon_base]-panel") + AddOverlays(image(icon, "[icon_base]-panel")) var/image/I var/is_off = "" @@ -246,41 +100,45 @@ I = image(icon, "[icon_contents]-3[is_off]") else I = image(icon, "[icon_contents]-4[is_off]") - overlays += I + AddOverlays(I) // Fridge top I = image(icon, "[icon_base]-top") I.pixel_z = 32 I.layer = ABOVE_WINDOW_LAYER - overlays += I + AddOverlays(I) -/******************* -* Item Adding -********************/ +/obj/machinery/smartfridge/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(panel_open) + attack_hand(user) -/obj/machinery/smartfridge/attackby(obj/item/O as obj, mob/user as mob) - if(isScrewdriver(O)) - panel_open = !panel_open - user.visible_message("[user] [panel_open ? "opens" : "closes"] the maintenance panel of \the [src].", "You [panel_open ? "open" : "close"] the maintenance panel of \the [src].") - update_icon() - SSnano.update_uis(src) +/obj/machinery/smartfridge/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return + panel_open = !panel_open + USE_FEEDBACK_NEW_PANEL_OPEN(user, panel_open) + update_icon() + SSnano.update_uis(src) - if(isMultitool(O) || isWirecutter(O)) - if(panel_open) - attack_hand(user) - return +/obj/machinery/smartfridge/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(panel_open) + attack_hand(user) +/obj/machinery/smartfridge/use_tool(obj/item/O, mob/living/user, list/click_params) if(!is_powered()) - to_chat(user, SPAN_NOTICE("\The [src] is unpowered and useless.")) - return + to_chat(user, SPAN_NOTICE("[src] is unpowered and useless.")) + return TRUE if(accept_check(O)) if(!user.unEquip(O)) - return + return TRUE stock_item(O) - user.visible_message(SPAN_NOTICE("\The [user] has added \the [O] to \the [src]."), SPAN_NOTICE("You add \the [O] to \the [src].")) + user.visible_message(SPAN_NOTICE("[user] has added [O] to [src]."), SPAN_NOTICE("You add [O] to [src].")) update_icon() + return TRUE else if(istype(O, /obj/item/storage)) var/obj/item/storage/bag/P = O @@ -292,17 +150,11 @@ P.finish_bulk_removal() if(plants_loaded) - user.visible_message(SPAN_NOTICE("\The [user] loads \the [src] with the contents of \the [P]."), SPAN_NOTICE("You load \the [src] with the contents of \the [P].")) + user.visible_message(SPAN_NOTICE("[user] loads [src] with the contents of [P]."), SPAN_NOTICE("You load [src] with the contents of [P].")) if(length(P.contents) > 0) to_chat(user, SPAN_NOTICE("Some items were refused.")) - - else if ((obj_flags & OBJ_FLAG_ANCHORABLE) && isWrench(O)) - wrench_floor_bolts(user) - power_change() - - else - to_chat(user, SPAN_NOTICE("\The [src] smartly refuses [O].")) - return 1 + return TRUE + return ..() /obj/machinery/smartfridge/secure/emag_act(remaining_charges, mob/user) if(!emagged) @@ -310,110 +162,262 @@ locked = -1 req_access.Cut() to_chat(user, "You short out the product lock on [src].") - return 1 - -/obj/machinery/smartfridge/proc/stock_item(obj/item/O) - for(var/datum/stored_items/I in item_records) - if(istype(O, I.item_path) && O.name == I.item_name) - stock(I, O) - return - - var/datum/stored_items/I = new/datum/stored_items(src, O.type, O.name) - dd_insertObjectList(item_records, I) - stock(I, O) - -/obj/machinery/smartfridge/proc/stock(datum/stored_items/I, obj/item/O) - I.add_product(O) - SSnano.update_uis(src) + return TRUE /obj/machinery/smartfridge/interface_interact(mob/user) - ui_interact(user) + tgui_interact(user) return TRUE -/******************* -* SmartFridge Menu -********************/ +/obj/machinery/smartfridge/tgui_state(mob/user) + return GLOB.tgui_default_state -/obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) - user.set_machine(src) +/obj/machinery/smartfridge/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "SmartFridge", name) + ui.set_autoupdate(FALSE) + ui.open() + +/obj/machinery/smartfridge/tgui_data(mob/user) + var/list/data = list() - var/data[0] data["contents"] = null - data["electrified"] = seconds_electrified > 0 - data["shoot_inventory"] = shoot_inventory - data["locked"] = locked data["secure"] = is_secure + data["can_dry"] = can_dry + data["drying"] = drying - var/list/items[0] - for (var/i=1 to length(item_records)) + var/list/items = list() + for(var/i=1 to length(item_records)) var/datum/stored_items/I = item_records[i] var/count = I.get_amount() if(count > 0) - items.Add(list(list("display_name" = html_encode(capitalize(I.item_name)), "vend" = i, "quantity" = count))) + items += list(list( + "display_name" = I.item_name, + "vend" = i, + "quantity" = count + )) if(length(items) > 0) data["contents"] = items - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "smartfridge.tmpl", src.name, 400, 500) - ui.set_initial_data(data) - ui.open() + return data -/obj/machinery/smartfridge/Topic(href, href_list) - if(..()) return 0 - - var/mob/user = usr - var/datum/nanoui/ui = SSnano.get_open_ui(user, src, "main") - - if(href_list["close"]) - user.unset_machine() - ui.close() - return 0 +/obj/machinery/smartfridge/tgui_act(action, list/params) + if(..()) + return + . = TRUE + + switch(action) + if("vend") + if(is_secure && !allowed(usr) && !emagged && locked != -1 && scan_id) + to_chat(usr, SPAN_WARNING("Отказано в доступе.")) + return FALSE + + var/index = text2num(params["vend"]) + var/amount = text2num(params["amount"]) + var/datum/stored_items/I = item_records[index] + var/count = I.get_amount() + if(count > 0) + if((count - amount) < 0) + amount = count + for(var/i = 1 to amount) + I.get_product(get_turf(src)) + update_icon() + + return TRUE + +/obj/machinery/smartfridge/proc/accept_check(obj/item/O) + if(is_type_in_list(O, accepted_types)) + return TRUE + return FALSE - if(href_list["vend"]) - var/index = text2num(href_list["vend"]) - var/amount = text2num(href_list["amount"]) - var/datum/stored_items/I = item_records[index] - var/count = I.get_amount() +/obj/machinery/smartfridge/proc/stock_item(obj/item/O) + for(var/datum/stored_items/I in item_records) + if(istype(O, I.item_path) && O.name == I.item_name) + stock(I, O) + return - // Sanity check, there are probably ways to press the button when it shouldn't be possible. - if(count > 0) - if((count - amount) < 0) - amount = count - for(var/i = 1 to amount) - I.get_product(get_turf(src)) - update_icon() + var/datum/stored_items/I = new/datum/stored_items(src, O.type, O.name) + dd_insertObjectList(item_records, I) + stock(I, O) - return 1 - return 0 +/obj/machinery/smartfridge/proc/stock(datum/stored_items/I, obj/item/O) + I.add_product(O) + SStgui.update_uis(src) /obj/machinery/smartfridge/proc/throw_item() - var/obj/throw_item = null - var/mob/living/target = locate() in view(7,src) + var/obj/throw_item + var/mob/living/target = locate() in view(7, src) if(!target) - return 0 + return FALSE for(var/datum/stored_items/I in src.item_records) throw_item = I.get_product(loc) - if (!throw_item) + if(!throw_item) continue break if(!throw_item) - return 0 + return FALSE + spawn(0) - throw_item.throw_at(target,16,3) + throw_item.throw_at(target, 16, 3) src.visible_message(SPAN_WARNING("[src] launches [throw_item.name] at [target.name]!")) update_icon() - return 1 + return TRUE + +/obj/machinery/smartfridge/drying_rack + name = "drying rack" + desc = "A machine for drying plants." + icon_state = "drying_rack" + can_dry = TRUE + accepted_types = null -/************************ -* Secure SmartFridges -*************************/ +/obj/machinery/smartfridge/drying_rack/accept_check(obj/item/O) + if(istype(O, /obj/item/reagent_containers/food/snacks)) + var/obj/item/reagent_containers/food/snacks/S = O + return S.dried_type ? TRUE : FALSE + else if(istype(O, /obj/item/stack/material)) + var/obj/item/stack/material/mat = O + var/material/skin/skin_mat = mat.material + return istype(skin_mat) + return FALSE -/obj/machinery/smartfridge/secure/CanUseTopic(mob/user, datum/topic_state/state, href_list) - if(!allowed(user) && !emagged && locked != -1 && href_list && href_list["vend"] && scan_id) - to_chat(user, SPAN_WARNING("Access denied.")) - return STATUS_CLOSE - return ..() +/obj/machinery/smartfridge/drying_rack/Process() + . = ..() + if(drying && dry()) + update_icon() + +/obj/machinery/smartfridge/drying_rack/on_update_icon() + ClearOverlays() + if(inoperable()) + if(length(contents)) + icon_state = "drying_rack-plant-off" + else + icon_state = "drying_rack-off" + else + icon_state = "drying_rack" + if(length(contents)) + icon_state = "drying_rack-plant" + if(operable()) + icon_state = "drying_rack-close" + +/obj/machinery/smartfridge/drying_rack/proc/dry() + for(var/datum/stored_items/I in item_records) + for(var/thing in I.instances) + var/remove_thing = FALSE + if(istype(thing, /obj/item/reagent_containers/food/snacks)) + var/obj/item/reagent_containers/food/snacks/S = thing + if(S.dry || !I.get_specific_product(get_turf(src), S)) + continue + if(S.dried_type == S.type) + S.dry = TRUE + S.SetName("dried [S.name]") + S.color = "#a38463" + stock_item(S) + I.instances -= thing + I.amount-- + else + var/D = S.dried_type + new D(get_turf(src)) + remove_thing = TRUE + + else if(istype(thing, /obj/item/stack/material)) + var/obj/item/stack/material/skin = thing + if(!istype(skin.material, /material/skin)) + continue + var/material/skin/skin_mat = skin.material + if(!skin_mat.tans_to) + continue + var/material/leather_mat = SSmaterials.get_material_by_name(skin_mat.tans_to) + stock_item(new leather_mat.stack_type(get_turf(src), skin.amount, skin_mat.tans_to)) + remove_thing = TRUE + + if(remove_thing) + I.instances -= thing + I.amount-- + qdel(thing) + SStgui.update_uis(src) + return TRUE + return FALSE + +/obj/machinery/smartfridge/drying_rack/tgui_act(action, list/params) + . = ..() + switch(action) + if("drying") + drying = !drying + update_icon() + +/obj/machinery/smartfridge/seeds + name = "\improper MegaSeed Servitor" + desc = "When you need seeds fast!" + accepted_types = list( + /obj/item/seeds + ) + +/obj/machinery/smartfridge/secure/extract + name = "\improper Slime Extract Storage" + desc = "A refrigerated storage unit for slime extracts." + icon_contents = "slime" + req_access = list(access_research) + accepted_types = list( + /obj/item/slime_extract + ) + +/obj/machinery/smartfridge/secure/medbay + name = "\improper Refrigerated Medicine Storage" + desc = "A refrigerated storage unit for storing medicine and chemicals." + icon_contents = "chem" + req_access = list(list(access_medical,access_chemistry)) + accepted_types = list( + /obj/item/reagent_containers/glass, + /obj/item/storage/pill_bottle, + /obj/item/reagent_containers/pill, + /obj/item/reagent_containers/ivbag + ) + +/obj/machinery/smartfridge/secure/virology + name = "\improper Refrigerated Virus Storage" + desc = "A refrigerated storage unit for storing viral material." + req_access = list(access_virology) + icon_contents = "chem" + accepted_types = list( + /obj/item/reagent_containers/glass/beaker/vial + ) + +/obj/machinery/smartfridge/chemistry + name = "\improper Smart Chemical Storage" + desc = "A refrigerated storage unit for medicine and chemical storage." + icon_contents = "chem" + accepted_types = list( + /obj/item/storage/pill_bottle, + /obj/item/reagent_containers + ) + +/obj/machinery/smartfridge/chemistry/virology + name = "\improper Smart Virus Storage" + desc = "A refrigerated storage unit for volatile sample storage." + + +/obj/machinery/smartfridge/drinks + name = "\improper Drink Showcase" + desc = "A refrigerated storage unit for tasty tasty alcohol." + icon_state = "fridge_dark" + icon_base = "fridge_dark" + icon_contents = "drink" + accepted_types = list( + /obj/item/reagent_containers/glass, + /obj/item/reagent_containers/food/drinks, + /obj/item/reagent_containers/food/condiment + ) + +/obj/machinery/smartfridge/foods + name = "\improper Hot Foods Display" + desc = "A heated storage unit for piping hot meals." + icon_state = "fridge_food" + icon_state = "fridge_food" + icon_contents = "food" + accepted_types = list( + /obj/item/reagent_containers/food/snacks, + /obj/item/material/kitchen/utensil + ) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 1dc9df5e3c071..c715111b82470 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -4,7 +4,7 @@ /obj/machinery/light_switch name = "light switch" desc = "It turns lights on and off. What are you, simple?" - icon = 'icons/obj/power.dmi' + icon = 'icons/obj/structures/buttons.dmi' icon_state = "light0" anchored = TRUE idle_power_usage = 20 @@ -12,7 +12,6 @@ var/on = 0 var/area/connected_area = null var/other_area = null - var/image/overlay /obj/machinery/light_switch/Initialize() . = ..() @@ -28,25 +27,23 @@ update_icon() /obj/machinery/light_switch/on_update_icon() - if(!overlay) - overlay = image(icon, "light1-overlay") - overlay.plane = EFFECTS_ABOVE_LIGHTING_PLANE - overlay.layer = ABOVE_LIGHTING_LAYER - - overlays.Cut() + ClearOverlays() if(inoperable()) icon_state = "light-p" set_light(0) else icon_state = "light[on]" - overlay.icon_state = "light[on]-overlay" - overlays += overlay - set_light(0.1, 0.1, 1, 2, on ? "#82ff4c" : "#f86060") + var/color = on ? "#82ff4c" : "#f86060" + AddOverlays(list( + emissive_appearance(icon, "light[on]-overlay"), + overlay_image(icon, "light[on]-overlay", color, plane = LIGHTING_LAMPS_PLANE) // SS220 Bloom-Lighting + )) + set_light(2, 0.25, color) /obj/machinery/light_switch/examine(mob/user, distance) . = ..() if(distance) - to_chat(user, "A light switch. It is [on? "on" : "off"].") + . += SPAN_NOTICE("It is [on? "on" : "off"].") /obj/machinery/light_switch/proc/set_state(newstate) if(on != newstate) @@ -66,11 +63,13 @@ set_state(!on) return TRUE -/obj/machinery/light_switch/attackby(obj/item/tool as obj, mob/user as mob) - if(istype(tool, /obj/item/screwdriver)) - new /obj/item/frame/light_switch(user.loc, 1) - qdel(src) - +/obj/machinery/light_switch/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + var/obj/item/frame/light_switch/frame = new /obj/item/frame/light_switch(user.loc, 1) + transfer_fingerprints_to(frame) + qdel(src) /obj/machinery/light_switch/powered() . = ..(power_channel, connected_area) //tie our powered status to the connected area diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index a0a58f6de9d3c..aad1a418ca30d 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -3,7 +3,7 @@ /obj/machinery/mass_driver name = "mass driver" desc = "Shoots things into space." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/massdriver.dmi' icon_state = "mass_driver" anchored = TRUE idle_power_usage = 2 @@ -57,12 +57,12 @@ /singleton/public_access/public_method/driver_drive name = "launch" desc = "Makes the mass driver launch immediately." - call_proc = /obj/machinery/mass_driver/proc/drive + call_proc = TYPE_PROC_REF(/obj/machinery/mass_driver, drive) /singleton/public_access/public_method/driver_drive_delayed name = "delayed launch" desc = "Makes the mass driver launch after a short delay." - call_proc = /obj/machinery/mass_driver/proc/delayed_drive + call_proc = TYPE_PROC_REF(/obj/machinery/mass_driver, delayed_drive) /singleton/stock_part_preset/radio/receiver/driver frequency = BLAST_DOORS_FREQ diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 5e928771ebfc1..a8675bcc692e7 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -1,7 +1,7 @@ var/global/list/navbeacons = list() /obj/machinery/navbeacon - icon = 'icons/obj/objects.dmi' + icon = 'icons/obj/structures/nav_beacon.dmi' icon_state = "navbeacon0-f" name = "navigation beacon" desc = "A radio beacon used for bot navigation." @@ -25,7 +25,7 @@ var/global/list/navbeacons = list() navbeacons += src /obj/machinery/navbeacon/hide(intact) - set_invisibility(intact ? 101 : 0) + set_invisibility(intact ? INVISIBILITY_ABSTRACT : 0) update_icon() /obj/machinery/navbeacon/on_update_icon() @@ -37,29 +37,32 @@ var/global/list/navbeacons = list() else icon_state = "[state]" -/obj/machinery/navbeacon/attackby(obj/item/I, mob/user) +/obj/machinery/navbeacon/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + open = !open + USE_FEEDBACK_NEW_PANEL_OPEN(user, open) + update_icon() + +/obj/machinery/navbeacon/use_tool(obj/item/I, mob/living/user, list/click_params) var/turf/T = loc if(!T.is_plating()) - return // prevent intraction when T-scanner revealed - - if(isScrewdriver(I)) - open = !open + return TRUE// prevent intraction when T-scanner revealed - user.visible_message("\The [user] [open ? "opens" : "closes"] cover of \the [src].", "You [open ? "open" : "close"] cover of \the [src].") - - update_icon() - - else if(I.GetIdCard()) + if (I.GetIdCard()) if(open) - if (src.allowed(user)) - src.locked = !src.locked - to_chat(user, "Controls are now [src.locked ? "locked." : "unlocked."]") + if (allowed(user)) + locked = !locked + to_chat(user, "Controls are now [locked ? "locked." : "unlocked."]") else to_chat(user, SPAN_WARNING("Access denied.")) updateDialog() else to_chat(user, "You must open the cover first!") - return + return TRUE + + return ..() /obj/machinery/navbeacon/interface_interact(mob/user) interact(user) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index b8dba7f616a15..eae29dac491ae 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -95,7 +95,7 @@ /datum/feed_network/proc/insert_message_in_channel(datum/feed_channel/FC, datum/feed_message/newMsg) FC.messages += newMsg if(newMsg.img) - register_asset("newscaster_photo_[sanitize(FC.channel_name)]_[length(FC.messages)].png", newMsg.img) + SSassets.transport.register_asset("newscaster_photo_[sanitize(FC.channel_name)]_[length(FC.messages)].png", newMsg.img) newMsg.parent_channel = FC FC.update() alert_readers(FC.announcement) @@ -115,8 +115,12 @@ var/global/list/obj/machinery/newscaster/allCasters = list() //Global list that /obj/machinery/newscaster name = "newscaster" desc = "A standard newsfeed handler. All the news you absolutely have no use for, in one place!" - icon = 'icons/obj/terminals.dmi' + icon = 'icons/obj/machines/terminals.dmi' icon_state = "newscaster_normal" + health_max = 80 + health_min_damage = 5 + use_weapon_hitsound = FALSE + damage_hitsound = 'sound/effects/Glassbr3.ogg' //var/list/datum/feed_channel/channel_list = list() //This list will contain the names of the feed channels. Each name will refer to a data region where the messages of the feed channels are stored. var/screen = 0 // 0 = welcome screen - main menu @@ -150,10 +154,9 @@ var/global/list/obj/machinery/newscaster/allCasters = list() //Global list that var/datum/news_photo/photo_data = null var/channel_name = ""; //the feed channel which will be receiving the feed, or being created var/c_locked=0; //Will our new channel be locked to public submissions? - var/hitstaken = 0 //Death at 3 hits from an item with force>=15 var/datum/feed_channel/viewing_channel = null var/datum/feed_network/connected_group - light_outer_range = 0 + light_range = 0 anchored = TRUE layer = ABOVE_WINDOW_LAYER @@ -193,21 +196,30 @@ var/global/list/obj/machinery/newscaster/allCasters = list() //Global list that if(inoperable()) icon_state = "newscaster_off" if(MACHINE_IS_BROKEN(src)) //If the thing is smashed, add crack overlay on top of the unpowered sprite. - overlays.Cut() - overlays += image(src.icon, "crack3") + ClearOverlays() + AddOverlays(image(src.icon, "crack3")) return - src.overlays.Cut() //reset overlays + ClearOverlays() if(connected_group.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message icon_state = "newscaster_wanted" return if(alert) //new message alert overlay - src.overlays += "newscaster_alert" - - if(hitstaken > 0) //Cosmetic damage overlay - src.overlays += image(src.icon, "crack[hitstaken]") + AddOverlays("newscaster_alert") + + var/health = get_current_health() + if(health < health_max) //Cosmetic damage overlay + var/hitstaken + switch ((health/health_max) * 100) + if (0 to 33) + hitstaken = 3 + if (34 to 66) + hitstaken = 2 + if (67 to 100) + hitstaken = 1 + AddOverlays("crack[hitstaken]") icon_state = "newscaster_normal" return @@ -271,7 +283,7 @@ var/global/list/obj/machinery/newscaster/allCasters = list() //Global list that dat+="Message Body: [src.msg]
" dat+="Photo: " if(photo_data && photo_data.photo) - send_rsc(usr, photo_data.photo.img, "tmp_photo.png") + send_rsc(user, photo_data.photo.img, "tmp_photo.png") dat+="
" dat+="
Delete Photo
" else @@ -343,7 +355,7 @@ var/global/list/obj/machinery/newscaster/allCasters = list() //Global list that dat+="-[MESSAGE.body]
" if(MESSAGE.img) var/resourc_name = "newscaster_photo_[sanitize(viewing_channel.channel_name)]_[i].png" - send_asset(usr.client, resourc_name) + SSassets.transport.send_assets(usr.client, resourc_name) dat+="
" if(MESSAGE.caption) dat+="[FONT_SMALL("[MESSAGE.caption]")]
" @@ -728,25 +740,15 @@ var/global/list/obj/machinery/newscaster/allCasters = list() //Global list that -/obj/machinery/newscaster/attackby(obj/item/I, mob/user) - if (user.a_intent == I_HURT) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if (I.force < 15) - visible_message(SPAN_WARNING("\The [user] uselessly bops \the [src] with \an [I].")) - else if (MACHINE_IS_BROKEN(src)) - visible_message(SPAN_WARNING("\The [user] further abuses the shattered [name].")) - playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) - else if (++hitstaken < 3) - visible_message(SPAN_DANGER("\The [user] slams \the [src] with \an [I], cracking it!")) - playsound(src, 'sound/effects/Glassbr3.ogg', 100, 1) - else - visible_message(SPAN_DANGER("\The [user] smashes \the [src] with \an [I]!")) - playsound(src, 'sound/effects/Glasshit.ogg', 100, 1) - set_broken(TRUE) - update_icon() +/obj/machinery/newscaster/use_weapon(obj/item/weapon, mob/living/user, list/click_params) + if (MACHINE_IS_BROKEN(src)) + visible_message(SPAN_WARNING("\The [user] further abuses the shattered [name].")) + playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) return TRUE - else - . = ..() + + if ((. = ..())) + queue_icon_update() + return /datum/news_photo var/is_synth = 0 @@ -840,7 +842,7 @@ var/global/list/obj/machinery/newscaster/allCasters = list() //Global list that dat+="-[MESSAGE.body]
" if(MESSAGE.img) var/resourc_name = "newscaster_photo_[sanitize(C.channel_name)]_[i].png" - send_asset(user.client, resourc_name) + SSassets.transport.send_assets(user.client, resourc_name) dat+="
" dat+="[FONT_SMALL("\[[MESSAGE.message_type] by [SPAN_COLOR("maroon", MESSAGE.author)]\]")]

" dat+="" diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm index c5dfb61cd5da1..e5c8aa6e15442 100644 --- a/code/game/machinery/nuclear_bomb.dm +++ b/code/game/machinery/nuclear_bomb.dm @@ -1,9 +1,9 @@ var/global/bomb_set /obj/machinery/nuclearbomb - name = "\improper Nuclear Fission Explosive" + name = "nuclear fission explosive" desc = "Uh oh. RUN!" - icon = 'icons/obj/nuke.dmi' + icon = 'icons/obj/machines/nuke.dmi' icon_state = "idle" density = TRUE use_power = POWER_USE_OFF @@ -11,12 +11,13 @@ var/global/bomb_set unacidable = TRUE interact_offline = TRUE + var/evacuate = FALSE var/deployable = 0 var/extended = 0 var/lighthack = 0 - var/timeleft = 120 - var/minTime = 120 - var/maxTime = 600 + var/timeleft = 120 SECONDS + var/minTime = 120 SECONDS + var/maxTime = 600 SECONDS var/timing = 0 var/r_code = "ADMIN" var/code = "" @@ -38,113 +39,133 @@ var/global/bomb_set auth = null return ..() -/obj/machinery/nuclearbomb/Process(wait) +/obj/machinery/nuclearbomb/Process() if(timing) - timeleft = max(timeleft - (wait / 10), 0) - playsound(loc, 'sound/items/timer.ogg', 50) - if(timeleft <= 0) - addtimer(new Callback(src, .proc/explode), 0) + playsound(loc, 'sound/items/timer.ogg',50) + if(world.time > timeleft) + addtimer(CALLBACK(src, PROC_REF(explode)), 0) SSnano.update_uis(src) -/obj/machinery/nuclearbomb/attackby(obj/item/O as obj, mob/user as mob, params) - if(isScrewdriver(O)) - add_fingerprint(user) - if(auth) - if(panel_open == 0) - panel_open = 1 - overlays |= "panel_open" - to_chat(user, "You unscrew the control panel of [src].") - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) +/obj/machinery/nuclearbomb/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(panel_open) + attack_hand(user) + +/obj/machinery/nuclearbomb/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + ClearOverlays() + switch(panel_open) + if(FALSE) + if(auth) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + panel_open = TRUE + AddOverlays("panel_open") + balloon_alert_to_viewers("панель открыта!") else - panel_open = 0 - overlays -= "panel_open" - to_chat(user, "You screw the control panel of [src] back on.") - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) - else - if(panel_open == 0) - to_chat(user, "\The [src] emits a buzzing noise, the panel staying locked in.") - if(panel_open == 1) - panel_open = 0 - overlays -= "panel_open" - to_chat(user, "You screw the control panel of \the [src] back on.") - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) - flick("lock", src) - return + balloon_alert(user, "отказано!") + playsound(src, 'sound/machines/buzz-sigh.ogg') + flick("lock", src) + if(TRUE) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + panel_open = FALSE + balloon_alert_to_viewers("панель закрыта!") - if(panel_open && isMultitool(O) || isWirecutter(O)) - return attack_hand(user) +/obj/machinery/nuclearbomb/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(panel_open) + attack_hand(user) + +/obj/machinery/nuclearbomb/use_tool(obj/item/O, mob/living/user, list/click_params) if(extended) if(istype(O, /obj/item/disk/nuclear)) if(!user.unEquip(O, src)) - return + return TRUE auth = O - add_fingerprint(user) return attack_hand(user) if(anchored) switch(removal_stage) if(0) - if(isWelder(O)) - var/obj/item/weldingtool/WT = O - if(!WT.isOn()) return - if(WT.get_fuel() < 5) // uses up 5 fuel. - to_chat(user, SPAN_WARNING("You need more fuel to complete this task.")) - return - - user.visible_message("[user] starts cutting loose the anchoring bolt covers on [src].", "You start cutting loose the anchoring bolt covers with [O]...") - - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src || !user || !WT.remove_fuel(5, user)) return - user.visible_message("\The [user] cuts through the bolt covers on \the [src].", "You cut through the bolt cover.") - removal_stage = 1 - return + if(O.tool_behaviour == TOOL_WELDER) + if(!O.tool_start_check(user, 5)) + return TRUE + user.visible_message( + SPAN_NOTICE("[user] starts cutting loose the anchoring bolt covers on [src]."), + SPAN_NOTICE("You start cutting loose the anchoring bolt covers on [src] with [O].") + ) + if(!O.use_as_tool(src, user, 4 SECONDS, 5, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE + user.visible_message( + SPAN_NOTICE("[user] cuts through the bolt covers on [src]."), + SPAN_NOTICE("You cut through the bolt covers on [src].") + ) + removal_stage = 1 + return TRUE if(1) - if(isCrowbar(O)) - user.visible_message("[user] starts forcing open the bolt covers on [src].", "You start forcing open the anchoring bolt covers with [O]...") - - if(do_after(user, 1.5 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src || !user) return - user.visible_message("\The [user] forces open the bolt covers on \the [src].", "You force open the bolt covers.") + if(O.tool_behaviour == TOOL_CROWBAR) + user.visible_message( + SPAN_NOTICE("[user] starts forcing open the bolt covers on [src]."), + SPAN_NOTICE("You start forcing open the anchoring bolt covers on [src] with [O].") + ) + + if(do_after(user, (O.toolspeed * 1.5) SECONDS, src, DO_REPAIR_CONSTRUCT)) + if(!src || !user) return TRUE + user.visible_message( + SPAN_NOTICE("[user] forces open the bolt covers on [src]."), + SPAN_NOTICE("You force open the bolt covers.") + ) removal_stage = 2 - return + return TRUE if(2) - if(isWelder(O)) - var/obj/item/weldingtool/WT = O - if(!WT.isOn()) return - if (WT.get_fuel() < 5) // uses up 5 fuel. - to_chat(user, SPAN_WARNING("You need more fuel to complete this task.")) - return - - user.visible_message("[user] starts cutting apart the anchoring system sealant on [src].", "You start cutting apart the anchoring system's sealant with [O]...") - - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src || !user || !WT.remove_fuel(5, user)) return - user.visible_message("\The [user] cuts apart the anchoring system sealant on \the [src].", "You cut apart the anchoring system's sealant.") - removal_stage = 3 - return + if(O.tool_behaviour == TOOL_WELDER) + if(!O.tool_start_check(user, 5)) + return TRUE + user.visible_message( + SPAN_NOTICE("[user] starts cutting apart the anchoring system sealant on [src]."), + SPAN_NOTICE("You start cutting apart the anchoring system's sealant on [src] with [O].") + ) + if(!O.use_as_tool(src, user, 4 SECONDS, 5, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE + user.visible_message( + SPAN_NOTICE("[user] cuts apart the anchoring system sealant on [src]."), + SPAN_NOTICE("You cut apart the anchoring system's sealant.") + ) + removal_stage = 3 + return TRUE if(3) - if(isWrench(O)) - user.visible_message("[user] begins unwrenching the anchoring bolts on [src].", "You begin unwrenching the anchoring bolts...") - if(do_after(user, 5 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src || !user) return + if(O.tool_behaviour == TOOL_WRENCH) + user.visible_message( + SPAN_NOTICE("[user] begins unwrenching the anchoring bolts on [src]."), + SPAN_NOTICE("You begin unwrenching the anchoring bolts on [src].") + ) + if(do_after(user, (O.toolspeed * 5) SECONDS, src, DO_REPAIR_CONSTRUCT)) + if(!src || !user) return TRUE user.visible_message("[user] unwrenches the anchoring bolts on [src].", "You unwrench the anchoring bolts.") removal_stage = 4 - return + return TRUE if(4) - if(isCrowbar(O)) - user.visible_message("[user] begins lifting [src] off of the anchors.", "You begin lifting the device off the anchors...") - if(do_after(user, 8 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src || !user) return - user.visible_message("\The [user] crowbars \the [src] off of the anchors. It can now be moved.", "You jam the crowbar under the nuclear device and lift it off its anchors. You can now move it!") + if(O.tool_behaviour == TOOL_CROWBAR) + user.visible_message( + SPAN_NOTICE("[user] begins lifting [src] off of its anchors."), + SPAN_NOTICE("You begin lifting [src] off its anchors.") + ) + if(do_after(user, (O.toolspeed * 8) SECONDS, src, DO_REPAIR_CONSTRUCT)) + if(!src || !user) return TRUE + user.visible_message( + SPAN_NOTICE("[user] crowbars [src] off of the anchors. It can now be moved."), + SPAN_NOTICE("You jam the crowbar under [src] and lift it off its anchors. You can now move it!") + ) anchored = FALSE removal_stage = 5 - return - ..() + return TRUE + return ..() /obj/machinery/nuclearbomb/physical_attack_hand(mob/user) if(!extended && deployable) @@ -153,7 +174,7 @@ var/global/bomb_set src.anchored = TRUE visible_message(SPAN_WARNING("With a steely snap, bolts slide out of [src] and anchor it to the flooring!")) else - visible_message(SPAN_WARNING("\The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.")) + visible_message(SPAN_WARNING("[src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.")) extended = 1 if(!src.lighthack) flick("lock", src) @@ -166,9 +187,10 @@ var/global/bomb_set /obj/machinery/nuclearbomb/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) var/data[0] + data["evacuate"] = evacuate data["hacking"] = 0 data["auth"] = is_auth(user) - data["moveable_anchor"] = !istype(src, /obj/machinery/nuclearbomb/station) + data["is_regular_nuke"] = !istype(src, /obj/machinery/nuclearbomb/station) if(is_auth(user)) if(yes_code) data["authstatus"] = timing ? "Functional/Set" : "Functional" @@ -180,7 +202,7 @@ var/global/bomb_set else data["authstatus"] = "Auth. S1" data["safe"] = safety ? "Safe" : "Engaged" - data["time"] = timeleft + data["time"] = timing ? round((timeleft - world.time)/10, 1) : round(timeleft/10, 1) data["timer"] = timing data["safety"] = safety data["anchored"] = anchored @@ -242,7 +264,7 @@ var/global/bomb_set if(code == r_code) yes_code = 1 code = null - log_and_message_admins("has armed \the [src]") + log_and_message_admins("has armed [src]") else code = "ERROR" else @@ -251,7 +273,7 @@ var/global/bomb_set code = null else lastentered = text("[]", href_list["type"]) - if(text2num(lastentered) == null) + if(isnull(text2num_or_default(lastentered))) log_and_message_admins("tried to exploit a nuclear bomb by entering non-numerical codes") else code += lastentered @@ -263,14 +285,14 @@ var/global/bomb_set to_chat(usr, SPAN_WARNING("Cannot alter the timing during countdown.")) return - var/time = text2num(href_list["time"]) + var/time = text2num(href_list["time"]) SECONDS timeleft += time timeleft = clamp(timeleft, minTime, maxTime) if(href_list["timer"]) if(timing == -1) return 1 if(!anchored) - to_chat(usr, SPAN_WARNING("\The [src] needs to be anchored.")) + to_chat(usr, SPAN_WARNING("[src] needs to be anchored.")) return 1 if(safety) to_chat(usr, SPAN_WARNING("The safety is still on.")) @@ -281,7 +303,7 @@ var/global/bomb_set if(!timing && !safety) start_bomb() else - check_cutoff() + secure_device() if(href_list["safety"]) if (wires.IsIndexCut(NUCLEARBOMB_WIRE_SAFETY)) to_chat(usr, SPAN_WARNING("Nothing happens, something might be wrong with the wiring.")) @@ -290,35 +312,38 @@ var/global/bomb_set if(safety) secure_device() update_icon() + if(href_list["evacuate"]) + if(timing) + to_chat(usr, SPAN_WARNING("Cannot alter evacuation during countdown.")) + return + evacuate = !evacuate if(href_list["anchor"]) if(removal_stage == 5) anchored = FALSE - visible_message(SPAN_WARNING("\The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.")) + visible_message(SPAN_WARNING("[src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.")) return 1 if(!isinspace()) anchored = !anchored if(anchored) - visible_message(SPAN_WARNING("With a steely snap, bolts slide out of \the [src] and anchor it to the flooring.")) + visible_message(SPAN_WARNING("With a steely snap, bolts slide out of [src] and anchor it to the flooring.")) else secure_device() - visible_message(SPAN_WARNING("The anchoring bolts slide back into the depths of \the [src].")) + visible_message(SPAN_WARNING("The anchoring bolts slide back into the depths of [src].")) else to_chat(usr, SPAN_WARNING("There is nothing to anchor to!")) return 1 /obj/machinery/nuclearbomb/proc/start_bomb() + timeleft += world.time timing = 1 - log_and_message_admins("activated the detonation countdown of \the [src]") + log_and_message_admins("activated the detonation countdown of [src]") bomb_set++ //There can still be issues with this resetting when there are multiple bombs. Not a big deal though for Nuke/N var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) original_level = security_state.current_security_level security_state.set_security_level(security_state.severe_security_level, TRUE) update_icon() -/obj/machinery/nuclearbomb/proc/check_cutoff() - secure_device() - /obj/machinery/nuclearbomb/proc/secure_device() if(timing <= 0) return @@ -327,7 +352,7 @@ var/global/bomb_set bomb_set-- safety = TRUE timing = 0 - timeleft = clamp(timeleft, minTime, maxTime) + timeleft = clamp(timeleft - world.time, minTime, maxTime) update_icon() /obj/machinery/nuclearbomb/ex_act(severity) @@ -361,7 +386,7 @@ var/global/bomb_set /obj/item/disk/nuclear name = "nuclear authentication disk" desc = "Better keep this safe." - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/datadisks.dmi' icon_state = "nucleardisk" item_state = "card-id" w_class = ITEM_SIZE_TINY @@ -371,21 +396,21 @@ var/global/bomb_set . = ..() nuke_disks |= src // Can never be quite sure that a game mode has been properly initiated or not at this point, so always register - GLOB.moved_event.register(src, src, /obj/item/disk/nuclear/proc/check_z_level) + GLOB.moved_event.register(src, src, TYPE_PROC_REF(/obj/item/disk/nuclear, check_z_level)) /obj/item/disk/nuclear/proc/check_z_level() if(!(istype(SSticker.mode, /datum/game_mode/nuclear))) - GLOB.moved_event.unregister(src, src, /obj/item/disk/nuclear/proc/check_z_level) // However, when we are certain unregister if necessary + GLOB.moved_event.unregister(src, src, TYPE_PROC_REF(/obj/item/disk/nuclear, check_z_level)) // However, when we are certain unregister if necessary return var/turf/T = get_turf(src) if(!T || isNotStationLevel(T.z)) qdel(src) /obj/item/disk/nuclear/Destroy() - GLOB.moved_event.unregister(src, src, /obj/item/disk/nuclear/proc/check_z_level) + GLOB.moved_event.unregister(src, src, TYPE_PROC_REF(/obj/item/disk/nuclear, check_z_level)) nuke_disks -= src if(!length(nuke_disks)) - var/turf/T = pick_area_turf(/area/maintenance, list(/proc/is_station_turf, /proc/not_turf_contains_dense_objects)) + var/turf/T = pick_area_turf(/area/maintenance, list(GLOBAL_PROC_REF(is_station_turf), GLOBAL_PROC_REF(not_turf_contains_dense_objects))) if(T) var/obj/D = new /obj/item/disk/nuclear(T) log_and_message_admins("[src], the last authentication disk, has been destroyed. Spawning [D] at ([D.x], [D.y], [D.z]).", location = T) @@ -405,7 +430,7 @@ var/global/bomb_set /obj/item/storage/secure/briefcase/nukedisk/examine(mob/user) . = ..() - to_chat(user,"On closer inspection, you see \a [GLOB.using_map.company_name] emblem is etched into the front of it.") + . += SPAN_NOTICE("On closer inspection, you see [GLOB.using_map.company_name] emblem is etched into the front of it.") /obj/item/folder/envelope/nuke_instructions name = "instructions envelope" @@ -440,42 +465,39 @@ var/global/bomb_set var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') stampoverlay.icon_state = "paper_stamp-hos" R.stamped += /obj/item/stamp - R.overlays += stampoverlay + R.AddOverlays(stampoverlay) R.stamps += "
This paper has been stamped as 'Top Secret'." //====vessel self-destruct system==== /obj/machinery/nuclearbomb/station name = "self-destruct terminal" desc = "For when it all gets too much to bear. Do not taunt." - icon = 'icons/obj/nuke_station.dmi' + icon = 'icons/obj/machines/nuke_station.dmi' anchored = TRUE deployable = 1 extended = 1 - var/list/flash_tiles = list() var/list/inserters = list() var/last_turf_state - var/announced = 0 + var/announced = FALSE var/time_to_explosion = 0 - var/self_destruct_cutoff = 60 //Seconds - timeleft = 300 - minTime = 300 - maxTime = 900 + var/self_destruct_cutoff = 60 SECONDS + timeleft = 300 SECONDS + minTime = 300 SECONDS + maxTime = 900 SECONDS /obj/machinery/nuclearbomb/station/Initialize() - . = ..() + ..() verbs -= /obj/machinery/nuclearbomb/verb/toggle_deployable - for(var/turf/simulated/floor/T in get_area(src)) - if(istype(T.flooring, /singleton/flooring/reinforced/circuit/red)) - flash_tiles += T - update_icon() for(var/obj/machinery/self_destruct/ch in get_area(src)) inserters += ch + return INITIALIZE_HINT_LATELOAD -/obj/machinery/nuclearbomb/station/attackby(obj/item/O as obj, mob/user as mob) - if(isWrench(O)) - return + +/obj/machinery/nuclearbomb/station/LateInitialize(mapload, ...) + // Relies on turfs to have their `flooring` var set, which is done during init. + queue_icon_update() /obj/machinery/nuclearbomb/station/Topic(href, href_list) if((. = ..())) @@ -490,29 +512,40 @@ var/global/bomb_set if(!istype(sd) || !sd.armed) to_chat(usr, SPAN_WARNING("An inserter has not been armed or is damaged.")) return - visible_message(SPAN_WARNING("Warning. The self-destruct sequence override will be disabled [self_destruct_cutoff] seconds before detonation.")) ..() + visible_message(SPAN_WARNING("Warning. The self-destruct sequence override will be disabled [self_destruct_cutoff/10] seconds before detonation.")) + if(evacuate) + if(!evacuation_controller) + visible_message(SPAN_DANGER("Warning. Unable to initiate evacuation procedures.")) + return + for (var/datum/evacuation_option/EO in evacuation_controller.available_evac_options()) + if(EO.abandon_ship) + evacuation_controller.evac_prep_delay = timeleft - world.time - 2 MINUTES + evacuation_controller.evac_launch_delay = 1.75 MINUTES //Escape pods take time to arm and eject appart from this delay. Take into account. + evacuation_controller.handle_evac_option(EO.option_target, usr) -/obj/machinery/nuclearbomb/station/check_cutoff() - if(timeleft <= self_destruct_cutoff) +/obj/machinery/nuclearbomb/station/secure_device() + if(timing && timeleft - world.time <= self_destruct_cutoff) visible_message(SPAN_WARNING("Self-Destruct abort is no longer possible.")) return ..() - -/obj/machinery/nuclearbomb/station/Destroy() - flash_tiles.Cut() - return ..() + announced = FALSE + for (var/datum/evacuation_option/EO in evacuation_controller.available_evac_options()) + if(EO.option_target == "cancel_abandon_ship") + evacuation_controller.handle_evac_option(EO.option_target, usr) + evacuation_controller.evac_prep_delay = 5 MINUTES + evacuation_controller.evac_launch_delay = 3 MINUTES /obj/machinery/nuclearbomb/station/Process() ..() - if(timeleft > 0 && GAME_STATE < RUNLEVEL_POSTGAME) - if(timeleft <= self_destruct_cutoff) + if(timing && timeleft - world.time > 0 && GAME_STATE < RUNLEVEL_POSTGAME) + if(timeleft - world.time <= self_destruct_cutoff) if(!announced) priority_announcement.Announce("The self-destruct sequence has reached terminal countdown, abort systems have been disabled.", "Self-Destruct Control Computer") - announced = 1 + announced = TRUE if(world.time >= time_to_explosion) var/range - if(timeleft <= (self_destruct_cutoff/2)) + if(timeleft - world.time <= (self_destruct_cutoff/2)) range = rand(14, 21) time_to_explosion = world.time + 2 SECONDS else @@ -521,33 +554,31 @@ var/global/bomb_set var/turf/T = pick_area_and_turf(GLOB.is_station_but_not_space_or_shuttle_area) explosion(T, range) -/obj/machinery/nuclearbomb/station/secure_device() - ..() - announced = 0 - /obj/machinery/nuclearbomb/station/on_update_icon() var/target_icon_state + var/turf_color = COLOR_BLACK if(lighthack) target_icon_state = "rcircuit_off" icon_state = "idle" else if(timing == -1) target_icon_state = "rcircuitanim" icon_state = "exploding" + turf_color = COLOR_RED else if(timing) target_icon_state = "rcircuitanim" icon_state = "urgent" + turf_color = COLOR_RED else if(!safety) target_icon_state = "rcircuit" icon_state = "greenlight" + turf_color = COLOR_RED else target_icon_state = "rcircuit_off" icon_state = "idle" if(!last_turf_state || target_icon_state != last_turf_state) - for(var/thing in flash_tiles) - var/turf/simulated/floor/T = thing - if(!istype(T.flooring, /singleton/flooring/reinforced/circuit/red)) - flash_tiles -= T - continue - T.icon_state = target_icon_state + for (var/turf/simulated/floor/floor in get_area(src)) + if (istype(floor.flooring, /singleton/flooring/reinforced/circuit/selfdestruct)) + floor.icon_state = target_icon_state + floor.set_light(l_color = turf_color) last_turf_state = target_icon_state diff --git a/code/game/machinery/nuke_cylinder_dispenser.dm b/code/game/machinery/nuke_cylinder_dispenser.dm index ffe6eed2e6d2d..12a416c8ba97a 100644 --- a/code/game/machinery/nuke_cylinder_dispenser.dm +++ b/code/game/machinery/nuke_cylinder_dispenser.dm @@ -35,21 +35,27 @@ add_fingerprint(user) return TRUE -/obj/machinery/nuke_cylinder_dispenser/attackby(obj/item/O, mob/user) +/obj/machinery/nuke_cylinder_dispenser/use_tool(obj/item/O, mob/living/user, list/click_params) if(!open && is_powered() && isid(O)) var/obj/item/card/id/id = O if(check_access(id)) locked = !locked user.visible_message("[user] [locked ? "locks" : "unlocks"] \the [src].", "You [locked ? "lock" : "unlock"] \the [src].") update_icon() - return + return TRUE + if(open && istype(O, /obj/item/nuclear_cylinder) && (length(cylinders) < 6)) - user.visible_message("[user] begins inserting \the [O] into storage.", "You begin inserting \the [O] into storage.") + user.visible_message( + SPAN_NOTICE("\The [user] begins inserting \the [O] into storage."), + SPAN_NOTICE("You begin inserting \the [O] into storage.") + ) if(do_after(user, 8 SECONDS, src, DO_PUBLIC_UNIQUE) && open && (length(cylinders) < 6) && user.unEquip(O, src)) user.visible_message("[user] places \the [O] into storage.", "You place \the [O] into storage.") cylinders.Add(O) update_icon() - add_fingerprint(user) + return TRUE + + return ..() /obj/machinery/nuke_cylinder_dispenser/MouseDrop(atom/over) if(!CanMouseDrop(over, usr)) @@ -64,13 +70,13 @@ add_fingerprint(usr) /obj/machinery/nuke_cylinder_dispenser/on_update_icon() - overlays.Cut() + ClearOverlays() if(length(cylinders)) - overlays += "rods_[length(cylinders)]" + AddOverlays("rods_[length(cylinders)]") if(!open) - overlays += "hatch" + AddOverlays("hatch") if(is_powered()) if(locked) - overlays += "red_light" + AddOverlays("red_light") else - overlays += "green_light" + AddOverlays("green_light") diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm index 0de43dfee8ced..2f97aed6322c5 100644 --- a/code/game/machinery/oxygen_pump.dm +++ b/code/game/machinery/oxygen_pump.dm @@ -3,7 +3,7 @@ /obj/machinery/oxygen_pump name = "emergency oxygen pump" - icon = 'icons/obj/walllocker.dmi' + icon = 'icons/obj/structures/walllocker.dmi' desc = "A wall mounted oxygen pump with a retractable face mask that you can pull over your face in case of emergencies." icon_state = "emerg" @@ -26,48 +26,48 @@ ..() tank = new spawn_type (src) contained = new mask_type (src) - GLOB.destroyed_event.register(tank, src, .proc/fix_deleted_tank) - GLOB.destroyed_event.register(contained, src, .proc/fix_deleted_mask) + GLOB.destroyed_event.register(tank, src, PROC_REF(fix_deleted_tank)) + GLOB.destroyed_event.register(contained, src, PROC_REF(fix_deleted_mask)) /obj/machinery/oxygen_pump/Destroy() if(breather) detach_mask(breather) - GLOB.destroyed_event.unregister(tank, src, .proc/fix_deleted_tank) - GLOB.destroyed_event.unregister(contained, src, .proc/fix_deleted_mask) + GLOB.destroyed_event.unregister(tank, src, PROC_REF(fix_deleted_tank)) + GLOB.destroyed_event.unregister(contained, src, PROC_REF(fix_deleted_mask)) QDEL_NULL(tank) QDEL_NULL(contained) return ..() /// Handler for the pump's tank being deleted, for any reason. /obj/machinery/oxygen_pump/proc/fix_deleted_tank(obj/item/tank/_tank) - GLOB.destroyed_event.unregister(_tank, src, .proc/fix_deleted_tank) + GLOB.destroyed_event.unregister(_tank, src, PROC_REF(fix_deleted_tank)) tank = new spawn_type(src) - GLOB.destroyed_event.register(tank, src, .proc/fix_deleted_tank) + GLOB.destroyed_event.register(tank, src, PROC_REF(fix_deleted_tank)) /// Handler for the pump's mask being deleted, for any reason. /obj/machinery/oxygen_pump/proc/fix_deleted_mask(obj/item/clothing/mask/breath/_mask) - GLOB.destroyed_event.unregister(_mask, src, .proc/fix_deleted_mask) + GLOB.destroyed_event.unregister(_mask, src, PROC_REF(fix_deleted_mask)) contained = new spawn_type(src) - GLOB.destroyed_event.register(contained, src, .proc/fix_deleted_mask) + GLOB.destroyed_event.register(contained, src, PROC_REF(fix_deleted_mask)) /obj/machinery/oxygen_pump/MouseDrop(mob/living/carbon/human/target, src_location, over_location) ..() if(istype(target) && CanMouseDrop(target)) if(!can_apply_to_target(target, usr)) // There is no point in attempting to apply a mask if it's impossible. return - usr.visible_message("\The [usr] begins placing the mask onto [target]..") + usr.visible_message("[usr] begins placing the mask onto [target]..") if(do_after(usr, 2.5 SECONDS, src, DO_PUBLIC_UNIQUE)) if(!can_apply_to_target(target, usr)) return // place mask and add fingerprints - usr.visible_message("\The [usr] has placed \the mask on [target]'s mouth.") + usr.visible_message("[usr] has placed mask on [target]'s mouth.") attach_mask(target) src.add_fingerprint(usr) /obj/machinery/oxygen_pump/physical_attack_hand(mob/user) if(GET_FLAGS(stat, MACHINE_STAT_MAINT) && tank) - user.visible_message(SPAN_NOTICE("\The [user] removes \the [tank] from \the [src]."), SPAN_NOTICE("You remove \the [tank] from \the [src].")) + user.visible_message(SPAN_NOTICE("[user] removes [tank] from [src]."), SPAN_NOTICE("You remove [tank] from [src].")) user.put_in_hands(tank) src.add_fingerprint(user) tank.add_fingerprint(user) @@ -88,7 +88,7 @@ if(tank) tank.forceMove(C) breather = C - GLOB.destroyed_event.register(breather, src, .proc/detach_mask) + GLOB.destroyed_event.register(breather, src, PROC_REF(detach_mask)) /obj/machinery/oxygen_pump/proc/set_internals(mob/living/carbon/C) if(C && istype(C)) @@ -101,12 +101,12 @@ tank.forceMove(src) breather.drop_from_inventory(contained, src) if(user) - visible_message(SPAN_NOTICE("\The [user] detaches \the [contained] and it rapidly retracts back into \the [src]!")) + visible_message(SPAN_NOTICE("[user] detaches [contained] and it rapidly retracts back into [src]!")) else - visible_message(SPAN_NOTICE("\The [contained] rapidly retracts back into \the [src]!")) + visible_message(SPAN_NOTICE("[contained] rapidly retracts back into [src]!")) if(breather.internals) breather.internals.icon_state = "internal0" - GLOB.destroyed_event.unregister(breather, src, .proc/detach_mask) + GLOB.destroyed_event.unregister(breather, src, PROC_REF(detach_mask)) breather = null update_use_power(POWER_USE_IDLE) @@ -115,66 +115,71 @@ user = target // Check target validity if(!target.organs_by_name[BP_HEAD]) - to_chat(user, SPAN_WARNING("\The [target] doesn't have a head.")) + to_chat(user, SPAN_WARNING("[target] doesn't have a head.")) return if(!target.check_has_mouth()) - to_chat(user, SPAN_WARNING("\The [target] doesn't have a mouth.")) + to_chat(user, SPAN_WARNING("[target] doesn't have a mouth.")) return if(target.wear_mask && target != breather) - to_chat(user, SPAN_WARNING("\The [target] is already wearing a mask.")) + to_chat(user, SPAN_WARNING("[target] is already wearing a mask.")) return if(target.head && (target.head.body_parts_covered & FACE)) to_chat(user, SPAN_WARNING("Remove their [target.head] first.")) return if(!tank) - to_chat(user, SPAN_WARNING("There is no tank in \the [src].")) + to_chat(user, SPAN_WARNING("There is no tank in [src].")) return if(GET_FLAGS(stat, MACHINE_STAT_MAINT)) - to_chat(user, SPAN_WARNING("Please close \the maintenance hatch first.")) + to_chat(user, SPAN_WARNING("Please close the maintenance hatch first.")) return if(!Adjacent(target)) - to_chat(user, SPAN_WARNING("Please stay close to \the [src].")) + to_chat(user, SPAN_WARNING("Please stay close to [src].")) return //when there is a breather: if(breather && target != breather) - to_chat(user, SPAN_WARNING("\The pump is already in use.")) + to_chat(user, SPAN_WARNING("The pump is already in use.")) return //Checking if breather is still valid if(target == breather && target.wear_mask != contained) - to_chat(user, SPAN_WARNING("\The [target] is not using the supplied mask.")) + to_chat(user, SPAN_WARNING("[target] is not using the supplied mask.")) return return 1 -/obj/machinery/oxygen_pump/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W)) - toggle_stat(MACHINE_STAT_MAINT) - user.visible_message( - SPAN_NOTICE("\The [user] [GET_FLAGS(stat, MACHINE_STAT_MAINT) ? "opens" : "closes"] \the [src]."), - SPAN_NOTICE("You [GET_FLAGS(stat, MACHINE_STAT_MAINT) ? "open" : "close"] \the [src].") - ) - if(GET_FLAGS(stat, MACHINE_STAT_MAINT)) - icon_state = icon_state_open - if(!stat) - icon_state = icon_state_closed - //TO-DO: Open icon +/obj/machinery/oxygen_pump/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + toggle_stat(MACHINE_STAT_MAINT) + USE_FEEDBACK_NEW_PANEL_OPEN(user, GET_FLAGS(stat, MACHINE_STAT_MAINT)) + if(GET_FLAGS(stat, MACHINE_STAT_MAINT)) + icon_state = icon_state_open + if(!stat) + icon_state = icon_state_closed + +/obj/machinery/oxygen_pump/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/tank) && (GET_FLAGS(stat, MACHINE_STAT_MAINT))) if(tank) - to_chat(user, SPAN_WARNING("\The [src] already has a tank installed!")) - else - if(!user.unEquip(W, src)) - return - tank = W - user.visible_message(SPAN_NOTICE("\The [user] installs \the [tank] into \the [src]."), SPAN_NOTICE("You install \the [tank] into \the [src].")) - src.add_fingerprint(user) + to_chat(user, SPAN_WARNING("[src] already has a tank installed!")) + return TRUE + + if(!user.unEquip(W, src)) + return TRUE + tank = W + user.visible_message(SPAN_NOTICE("[user] installs [tank] into [src]."), SPAN_NOTICE("You install [tank] into [src].")) + return TRUE + if(istype(W, /obj/item/tank) && !stat) - to_chat(user, SPAN_WARNING("Please open the maintenance hatch first.")) + to_chat(user, SPAN_WARNING("You need to open the maintenance hatch first.")) + return TRUE + + return ..() /obj/machinery/oxygen_pump/examine(mob/user) . = ..() if(tank) - to_chat(user, "The meter shows [round(tank.air_contents.return_pressure())]") + . += SPAN_NOTICE("The meter shows [round(tank.air_contents.return_pressure())]") else - to_chat(user, SPAN_WARNING("It is missing a tank!")) + . += SPAN_WARNING("It is missing a tank!") /obj/machinery/oxygen_pump/Process() diff --git a/code/game/machinery/pager.dm b/code/game/machinery/pager.dm index 4d342e9c1ca4c..13862a1679ad5 100644 --- a/code/game/machinery/pager.dm +++ b/code/game/machinery/pager.dm @@ -1,6 +1,6 @@ /obj/machinery/pager name = "departmental pager button" - icon = 'icons/obj/objects.dmi' + icon = 'icons/obj/structures/buttons.dmi' icon_state = "doorbell" desc = "A button used to request the presence of anyone in the department." anchored = TRUE @@ -16,8 +16,8 @@ var/area/A = get_area(src) location = A.name -/obj/machinery/pager/attackby(obj/item/W, mob/user as mob) - return attack_hand(user) +/obj/machinery/pager/use_tool(obj/item/tool, mob/living/user, list/click_params) + return attack_hand(user) || ..() /obj/machinery/pager/interface_interact(mob/living/user) if(!CanInteract(user, GLOB.default_state)) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 5341a204a1be1..4765ff46a1413 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -9,7 +9,7 @@ Buildable meters var/pipename var/connect_types = CONNECT_TYPE_REGULAR force = 7 - icon = 'icons/obj/pipe-item.dmi' + icon = 'icons/obj/atmospherics/pipe-item.dmi' icon_state = "simple" randpixel = 5 item_state = "buildpipe" @@ -40,12 +40,10 @@ Buildable meters constructed_path = P.type //called when a turf is attacked with a pipe item -/obj/item/pipe/afterattack(turf/simulated/floor/target, mob/user, proximity) - if(!proximity) return - if(istype(target)) +/obj/item/pipe/use_after(atom/target, mob/living/user, click_parameters) + if (istype(target, /turf/simulated/floor)) user.unEquip(src, target) - else - return ..() + return TRUE /obj/item/pipe/rotate(mob/user) . = ..() @@ -131,12 +129,10 @@ Buildable meters P.node4.build_network() return 0 -/obj/item/pipe/attackby(obj/item/W as obj, mob/user as mob) - if(!isWrench(W)) - return ..() +/obj/item/pipe/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS if (!isturf(loc)) - return 1 - + return sanitize_dir() var/obj/machinery/atmospherics/fake_machine = constructed_path var/pipe_dir = base_pipe_initialize_directions(dir, initial(fake_machine.connect_dir_type)) @@ -144,7 +140,11 @@ Buildable meters for(var/obj/machinery/atmospherics/M in loc) if((M.initialize_directions & pipe_dir) && M.check_connect_types_construction(M,src)) // matches at least one direction on either type of pipe & same connection type to_chat(user, SPAN_WARNING("There is already a pipe of the same type at this location.")) - return 1 + return + + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + // no conflicts found var/pipefailtext = SPAN_WARNING("There's nothing to connect this pipe section to!") //(with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)" @@ -160,25 +160,24 @@ Buildable meters if(P.pipe_class == PIPE_CLASS_UNARY) if(build_unary(P, pipefailtext)) - return 1 + return if(P.pipe_class == PIPE_CLASS_BINARY) if(build_binary(P, pipefailtext)) - return 1 + return if(P.pipe_class == PIPE_CLASS_TRINARY) if(build_trinary(P, pipefailtext)) - return 1 + return if(P.pipe_class == PIPE_CLASS_QUATERNARY) if(build_quaternary(P, pipefailtext)) - return 1 + return if(P.pipe_class == PIPE_CLASS_OMNI) P.atmos_init() P.build_network() - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) user.visible_message( \ "[user] fastens the [src].", \ SPAN_NOTICE("You have fastened the [src]."), \ @@ -186,7 +185,7 @@ Buildable meters qdel(src) // remove the pipe item /obj/item/pipe/injector - name = "Injector" + name = "injector" desc = "Passively injects air into its surroundings. Has a valve attached to it that can control flow rate." connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL icon = 'icons/atmos/injector.dmi' @@ -212,22 +211,22 @@ Buildable meters /obj/item/machine_chassis var/build_type -/obj/item/machine_chassis/attackby(obj/item/W, mob/user) - if(!isWrench(W)) - return ..() +/obj/item/machine_chassis/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return var/obj/machinery/machine = new build_type(get_turf(src), dir, FALSE) machine.apply_component_presets() machine.RefreshParts() if(machine.construct_state) machine.construct_state.post_construct(machine) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, SPAN_NOTICE("You have fastened the [src].")) qdel(src) /obj/item/machine_chassis/air_sensor name = "gas sensor" desc = "A sensor. It detects gasses." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/airfilter.dmi' icon_state = "gsensor1" w_class = ITEM_SIZE_LARGE build_type = /obj/machinery/air_sensor @@ -235,7 +234,7 @@ Buildable meters /obj/item/machine_chassis/pipe_meter name = "meter" desc = "A meter that can measure gas inside pipes or in the general area." - icon = 'icons/obj/pipe-item.dmi' + icon = 'icons/obj/atmospherics/pipe-item.dmi' icon_state = "meter" item_state = "buildpipe" w_class = ITEM_SIZE_LARGE diff --git a/code/game/machinery/pipe/pipe_datums/device_pipe_datums.dm b/code/game/machinery/pipe/pipe_datums/device_pipe_datums.dm index 8074cafe74b49..cb5cfdcd1a4b6 100644 --- a/code/game/machinery/pipe/pipe_datums/device_pipe_datums.dm +++ b/code/game/machinery/pipe/pipe_datums/device_pipe_datums.dm @@ -159,7 +159,7 @@ desc = "a sensor. It detects gasses." build_path = /obj/item/machine_chassis/air_sensor build_icon_state = "gsensor1" - build_icon = 'icons/obj/stationobjs.dmi' + build_icon = 'icons/obj/structures/airfilter.dmi' pipe_color = null connect_types = null colorable = FALSE @@ -181,7 +181,7 @@ /datum/pipe/pipe_dispenser/device/drain name = "gutter" desc = "You probably can't get sucked down the plughole." - build_icon = 'icons/obj/drain.dmi' + build_icon = 'icons/obj/structures/drain.dmi' build_icon_state = "drain" build_path = /obj/item/drain connect_types = null @@ -193,7 +193,7 @@ /datum/pipe/pipe_dispenser/device/drain/bath name = "sealable gutter" desc = "You probably can't get sucked down the plughole. Specially not when it's closed!" - build_icon = 'icons/obj/drain.dmi' + build_icon = 'icons/obj/structures/drain.dmi' build_icon_state = "drain_bath" build_path = /obj/item/drain/bath connect_types = null @@ -223,4 +223,4 @@ constructed_path = /obj/machinery/atmospherics/pipe/cap/sparker/visible pipe_class = PIPE_CLASS_UNARY pipe_color = null - colorable = FALSE \ No newline at end of file + colorable = FALSE diff --git a/code/game/machinery/pipe/pipe_datums/disposal_pipe_datums.dm b/code/game/machinery/pipe/pipe_datums/disposal_pipe_datums.dm index fea3fcf361d7a..f21e9656225ce 100644 --- a/code/game/machinery/pipe/pipe_datums/disposal_pipe_datums.dm +++ b/code/game/machinery/pipe/pipe_datums/disposal_pipe_datums.dm @@ -97,7 +97,7 @@ desc = "A chute to put things into a disposal network." build_icon = 'icons/obj/pipes/disposal.dmi' build_icon_state = "intake" - build_path = /obj/structure/disposalconstruct + build_path = /obj/structure/disposalconstruct/machine constructed_path = /obj/machinery/disposal/deliveryChute /datum/pipe/disposal_dispenser/device/sorting @@ -179,4 +179,4 @@ build_icon_state = "pipe-j1s" build_path = /obj/structure/disposalconstruct turn = DISPOSAL_FLIP_FLIP | DISPOSAL_FLIP_RIGHT - constructed_path = /obj/structure/disposalpipe/diversion_junction \ No newline at end of file + constructed_path = /obj/structure/disposalpipe/diversion_junction diff --git a/code/game/machinery/pipe/pipe_datums/pipe_datum_base.dm b/code/game/machinery/pipe/pipe_datums/pipe_datum_base.dm index b45433c056b1c..1ff8537a3592c 100644 --- a/code/game/machinery/pipe/pipe_datums/pipe_datum_base.dm +++ b/code/game/machinery/pipe/pipe_datums/pipe_datum_base.dm @@ -32,7 +32,7 @@ GLOBAL_LIST_EMPTY(all_disposal_pipe_datums_by_category) var/connect_types = CONNECT_TYPE_REGULAR //what sort of connection this has var/pipe_color = PIPE_COLOR_WHITE //what color the pipe should be by default var/build_icon_state = "simple" //Which icon state to use when creating a new pipe item. - var/build_icon = 'icons/obj/pipe-item.dmi' //Which file the icon is located at. + var/build_icon = 'icons/obj/atmospherics/pipe-item.dmi' //Which file the icon is located at. var/dir = SOUTH //Direction the pipe faces var/colorable = TRUE //Can this pipe be colored? var/constructed_path = /obj/machinery/atmospherics/pipe/simple/hidden //What's the final form of this item? diff --git a/code/game/machinery/pipe/pipe_datums/pipe_datums.dm b/code/game/machinery/pipe/pipe_datums/pipe_datums.dm index fad822f175076..105db71501f93 100644 --- a/code/game/machinery/pipe/pipe_datums/pipe_datums.dm +++ b/code/game/machinery/pipe/pipe_datums/pipe_datums.dm @@ -51,7 +51,7 @@ name = "upward pipe fitting" desc = "an upward pipe." build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' + build_icon = 'icons/obj/structures/structures.dmi' build_icon_state = "up" constructed_path = /obj/machinery/atmospherics/pipe/zpipe/up @@ -59,7 +59,7 @@ name = "downward pipe fitting" desc = "a downward pipe." build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' + build_icon = 'icons/obj/structures/structures.dmi' build_icon_state = "down" constructed_path = /obj/machinery/atmospherics/pipe/zpipe/down @@ -124,7 +124,7 @@ name = "upward supply pipe fitting" desc = "an upward supply pipe segment." build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' + build_icon = 'icons/obj/structures/structures.dmi' build_icon_state = "up" constructed_path = /obj/machinery/atmospherics/pipe/zpipe/up/supply @@ -132,7 +132,7 @@ name = "downward supply pipe fitting" desc = "a downward supply pipe segment." build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' + build_icon = 'icons/obj/structures/structures.dmi' build_icon_state = "down" constructed_path = /obj/machinery/atmospherics/pipe/zpipe/down/supply @@ -196,7 +196,7 @@ name = "upward scrubber pipe fitting" desc = "an upward scrubber pipe segment." build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' + build_icon = 'icons/obj/structures/structures.dmi' build_icon_state = "up" constructed_path = /obj/machinery/atmospherics/pipe/zpipe/up/scrubbers @@ -204,7 +204,7 @@ name = "downward scrubber pipe fitting" desc = "a downward scrubber pipe segment." build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' + build_icon = 'icons/obj/structures/structures.dmi' build_icon_state = "down" constructed_path = /obj/machinery/atmospherics/pipe/zpipe/down/scrubbers @@ -269,7 +269,7 @@ name = "upward fuel pipe fitting" desc = "an upward fuel pipe segment." build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' + build_icon = 'icons/obj/structures/structures.dmi' build_icon_state = "up" constructed_path = /obj/machinery/atmospherics/pipe/zpipe/up/fuel @@ -277,7 +277,7 @@ name = "downward fuel pipe fitting" desc = "a downward fuel pipe segment." build_path = /obj/item/pipe - build_icon = 'icons/obj/structures.dmi' + build_icon = 'icons/obj/structures/structures.dmi' build_icon_state = "down" constructed_path = /obj/machinery/atmospherics/pipe/zpipe/down/fuel @@ -334,4 +334,4 @@ //Cleanup #undef PIPE_STRAIGHT -#undef PIPE_BENT \ No newline at end of file +#undef PIPE_BENT diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index bf48ffb5c1584..6d4c7f30f3770 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -1,10 +1,11 @@ /obj/machinery/pipedispenser - name = "Pipe Dispenser" - icon = 'icons/obj/stationobjs.dmi' + name = "pipe dispenser" + icon = 'icons/obj/machines/pipe_dispenser.dmi' icon_state = "pipe_d" density = TRUE anchored = FALSE stat_immune = MACHINE_STAT_NOSCREEN//Doesn't need screen, just input for the parts wanted + obj_flags = OBJ_FLAG_ANCHORABLE construct_state = /singleton/machine_construction/default/panel_closed uncreated_component_parts = null @@ -65,52 +66,37 @@ interact(user) return TRUE +/obj/machinery/pipedispenser/CanUseTopic(mob/user) + if (!anchored) + to_chat(user, "You need to anchor \the [src] to be able to operate it.") + return STATUS_CLOSE + return ..() + /obj/machinery/pipedispenser/interact(mob/user) var/datum/browser/popup = new (user, "Pipe List", "[src] Control Panel") popup.set_content(get_console_data(GLOB.all_pipe_datums_by_category, TRUE)) popup.open() -/obj/machinery/pipedispenser/attackby(obj/item/W as obj, mob/user as mob) +/obj/machinery/pipedispenser/post_anchor_change() + if (anchored) + set_stat(MACHINE_STAT_MAINT, FALSE) + else + set_stat(MACHINE_STAT_MAINT, TRUE) + ..() + +/obj/machinery/pipedispenser/use_tool(obj/item/W, mob/living/user, list/click_params) if (istype(W, /obj/item/pipe) || istype(W, /obj/item/machine_chassis)) if(!user.unEquip(W)) - return + return TRUE to_chat(user, SPAN_NOTICE("You put \the [W] back into \the [src].")) - add_fingerprint(user) qdel(W) - return - if(!panel_open) - if(isWrench(W)) - add_fingerprint(user) - if(anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You begin to unfasten \the [src] from the floor...")) - if (do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message( \ - SPAN_NOTICE("\The [user] unfastens \the [src]."), \ - SPAN_NOTICE("You have unfastened \the [src]. Now it can be pulled somewhere else."), \ - "You hear ratchet.") - anchored = FALSE - set_stat(MACHINE_STAT_MAINT, TRUE) - update_use_power(POWER_USE_OFF) - if(user.machine==src) - close_browser(user, "window=pipedispenser") - else - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You begin to fasten \the [src] to the floor...")) - if (do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message( \ - SPAN_NOTICE("\The [user] fastens \the [src]."), \ - SPAN_NOTICE("You have fastened \the [src]. Now it can dispense pipes."), \ - "You hear ratchet.") - anchored = TRUE - set_stat(MACHINE_STAT_MAINT, FALSE) - update_use_power(POWER_USE_IDLE) - return + return TRUE + return ..() /obj/machinery/pipedispenser/disposal - name = "Disposal Pipe Dispenser" - icon = 'icons/obj/stationobjs.dmi' + name = "disposal pipe dispenser" + icon = 'icons/obj/machines/pipe_dispenser.dmi' icon_state = "pipe_d" machine_name = "disposal pipe dispenser" machine_desc = "Similar to a normal pipe dispenser, but calibrated for the heavy, dense metal tubes used in disposals networks." diff --git a/code/game/machinery/pipe/pipelayer.dm b/code/game/machinery/pipe/pipelayer.dm index b70c02aef5b0b..73616415b32a3 100644 --- a/code/game/machinery/pipe/pipelayer.dm +++ b/code/game/machinery/pipe/pipelayer.dm @@ -1,7 +1,7 @@ /obj/machinery/pipelayer name = "automatic pipe layer" - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/machines/pipe_dispenser.dmi' icon_state = "pipe_d" density = TRUE var/turf/old_turf @@ -31,62 +31,68 @@ /obj/machinery/pipelayer/interface_interact(mob/user) if(!metal&&!on) - to_chat(user, SPAN_WARNING("\The [src] doesn't work without metal.")) + to_chat(user, SPAN_WARNING("[src] doesn't work without metal.")) return TRUE on=!on user.visible_message( - SPAN_NOTICE("[user] has [!on?"de":""]activated \the [src]."), - SPAN_NOTICE("You [!on?"de":""]activate \the [src].") + SPAN_NOTICE("[user] has [!on?"de":""]activated [src]."), + SPAN_NOTICE("You [!on?"de":""]activate [src].") ) return TRUE -/obj/machinery/pipelayer/attackby(obj/item/W as obj, mob/user as mob) - - if(isWrench(W)) - P_type_t = input("Choose pipe type", "Pipe type") as null|anything in Pipes - P_type = Pipes[P_type_t] - user.visible_message(SPAN_NOTICE("[user] has set \the [src] to manufacture [P_type_t]."), SPAN_NOTICE("You set \the [src] to manufacture [P_type_t].")) +/obj/machinery/pipelayer/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return + a_dis=!a_dis + user.visible_message( + SPAN_NOTICE("[user] has [!a_dis?"de":""]activated auto-dismantling."), + SPAN_NOTICE("You [!a_dis?"de":""]activate auto-dismantling.") + ) - if(isCrowbar(W)) - a_dis=!a_dis - user.visible_message( - SPAN_NOTICE("[user] has [!a_dis?"de":""]activated auto-dismantling."), - SPAN_NOTICE("You [!a_dis?"de":""]activate auto-dismantling.") - ) +/obj/machinery/pipelayer/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!metal) + balloon_alert(user, "внутри пусто!") return + var/m = round(input(usr,"Please specify the amount of metal to remove","Remove metal",min(round(metal),50)) as num, 1) + m = min(m, 50) + m = min(m, round(metal)) + m = round(m) + if(m) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + use_metal(m) + var/obj/item/stack/material/steel/MM = new (get_turf(src)) + MM.amount = m + user.visible_message(SPAN_NOTICE("[user] removes [m] sheet\s of metal from the [src]."), SPAN_NOTICE("You remove [m] sheet\s of metal from [src]")) + +/obj/machinery/pipelayer/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + P_type_t = input("Choose pipe type", "Pipe type") as null|anything in Pipes + if(!P_type_t) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + P_type = Pipes[P_type_t] + user.visible_message(SPAN_NOTICE("[user] has set [src] to manufacture [P_type_t]."), SPAN_NOTICE("You set [src] to manufacture [P_type_t].")) +/obj/machinery/pipelayer/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/stack/material) && W.get_material_name() == MATERIAL_STEEL) - var/result = load_metal(W) if(isnull(result)) to_chat(user, SPAN_WARNING("Unable to load [W] - no metal found.")) else if(!result) - to_chat(user, SPAN_NOTICE("\The [src] is full.")) + to_chat(user, SPAN_NOTICE("[src] is full.")) else - user.visible_message(SPAN_NOTICE("[user] has loaded metal into \the [src]."), SPAN_NOTICE("You load metal into \the [src]")) - - return + user.visible_message(SPAN_NOTICE("[user] has loaded metal into [src]."), SPAN_NOTICE("You load metal into [src]")) + return TRUE - if(isScrewdriver(W)) - if(metal) - var/m = round(input(usr,"Please specify the amount of metal to remove","Remove metal",min(round(metal),50)) as num, 1) - m = min(m, 50) - m = min(m, round(metal)) - m = round(m) - if(m) - use_metal(m) - var/obj/item/stack/material/steel/MM = new (get_turf(src)) - MM.amount = m - user.visible_message(SPAN_NOTICE("[user] removes [m] sheet\s of metal from the \the [src]."), SPAN_NOTICE("You remove [m] sheet\s of metal from \the [src]")) - else - to_chat(user, "\The [src] is empty.") - return - ..() + return ..() /obj/machinery/pipelayer/examine(mob/user) . = ..() - to_chat(user, "\The [src] has [metal] sheet\s, is set to produce [P_type_t], and auto-dismantling is [!a_dis?"de":""]activated.") + . += SPAN_NOTICE("[src] has [metal] sheet\s, is set to produce [P_type_t], and auto-dismantling is [!a_dis?"de":""]activated.") /obj/machinery/pipelayer/proc/reset() on=0 @@ -107,7 +113,7 @@ /obj/machinery/pipelayer/proc/use_metal(amount) if(!metal || metal 7) //if it's too far away, why bother? return TURRET_NOT_TARGET - if(!check_trajectory(L, src)) //check if we have true line of sight + if(check_trajectory(L, src) != L) //check if we have true line of sight return TURRET_NOT_TARGET if(emagged) // If emagged not even the dead get a rest @@ -636,7 +608,7 @@ var/global/list/turret_icons /obj/machinery/porta_turret_construct name = "turret frame" - icon = 'icons/obj/turrets.dmi' + icon = 'icons/obj/machines/turrets.dmi' icon_state = "turret_frame" density = TRUE var/target_type = /obj/machinery/porta_turret // The type we intend to build @@ -645,24 +617,23 @@ var/global/list/turret_icons var/installation = null //the gun type installed var/gun_charge = 0 //the gun charge of the gun type installed - -/obj/machinery/porta_turret_construct/attackby(obj/item/I, mob/user) +/obj/machinery/porta_turret_construct/use_tool(obj/item/I, mob/living/user, list/click_params) //this is a bit unwieldy but self-explanatory switch(build_step) if(0) //first step - if(isWrench(I) && !anchored) + if(I.tool_behaviour == TOOL_WRENCH && !anchored) playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) to_chat(user, SPAN_NOTICE("You secure the external bolts.")) anchored = TRUE build_step = 1 - return + return TRUE - else if(isCrowbar(I) && !anchored) + else if(I.tool_behaviour == TOOL_CROWBAR && !anchored) playsound(loc, 'sound/items/Crowbar.ogg', 75, 1) to_chat(user, SPAN_NOTICE("You dismantle the turret construction.")) new /obj/item/stack/material/steel( loc, 5) qdel(src) - return + return TRUE if(1) if(istype(I, /obj/item/stack/material) && I.get_material_name() == MATERIAL_STEEL) @@ -673,84 +644,71 @@ var/global/list/turret_icons icon_state = "turret_frame2" else to_chat(user, SPAN_WARNING("You need two sheets of metal to continue construction.")) - return + return TRUE - else if(istype(I, /obj/item/wrench)) + else if (I.tool_behaviour == TOOL_WRENCH) playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) to_chat(user, SPAN_NOTICE("You unfasten the external bolts.")) anchored = FALSE build_step = 0 - return - + return TRUE if(2) - if(istype(I, /obj/item/wrench)) + if (I.tool_behaviour == TOOL_WRENCH) playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) to_chat(user, SPAN_NOTICE("You bolt the metal armor into place.")) build_step = 3 - return - - else if(isWelder(I)) - var/obj/item/weldingtool/WT = I - if(!WT.isOn()) - return - if(WT.get_fuel() < 5) //uses up 5 fuel. - to_chat(user, SPAN_NOTICE("You need more fuel to complete this task.")) - return - - playsound(loc, pick('sound/items/Welder.ogg', 'sound/items/Welder2.ogg'), 50, 1) - if(do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src || !WT.remove_fuel(5, user)) return - build_step = 1 - to_chat(user, "You remove the turret's interior metal armor.") - new /obj/item/stack/material/steel( loc, 2) - return - + return TRUE + + else if(I.tool_behaviour == TOOL_WELDER) + if(!I.tool_start_check(user, 5)) + return TRUE + balloon_alert(user, "снятие брони") + if(!I.use_as_tool(src, user, 2 SECONDS, 5, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE + build_step = 1 + new /obj/item/stack/material/steel( loc, 2) + return TRUE if(3) if(istype(I, /obj/item/gun/energy)) //the gun installation part - if(isrobot(user)) - return + return FALSE var/obj/item/gun/energy/E = I //typecasts the item to an energy gun if(!user.unEquip(I)) to_chat(user, SPAN_NOTICE("\the [I] is stuck to your hand, you cannot put it in \the [src]")) - return + return TRUE installation = I.type //installation becomes I.type gun_charge = E.power_supply.charge //the gun's charge is stored in gun_charge to_chat(user, SPAN_NOTICE("You add [I] to the turret.")) target_type = /obj/machinery/porta_turret - build_step = 4 - qdel(I) //delete the gun :( - return + qdel(I) + return TRUE - else if(istype(I, /obj/item/wrench)) + else if (I.tool_behaviour == TOOL_WRENCH) playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) to_chat(user, SPAN_NOTICE("You remove the turret's metal armor bolts.")) build_step = 2 - return + return TRUE if(4) if(isprox(I)) build_step = 5 if(!user.unEquip(I)) to_chat(user, SPAN_NOTICE("\the [I] is stuck to your hand, you cannot put it in \the [src]")) - return + return TRUE to_chat(user, SPAN_NOTICE("You add the prox sensor to the turret.")) qdel(I) - return - - //attack_hand() removes the gun + return TRUE if(5) - if(isScrewdriver(I)) - playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) + if(I.tool_behaviour == TOOL_SCREWDRIVER) + if(!I.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE build_step = 6 - to_chat(user, SPAN_NOTICE("You close the internal access hatch.")) - return - - //attack_hand() removes the prox sensor + USE_FEEDBACK_NEW_PANEL_OPEN(user, FALSE) + return TRUE if(6) if(istype(I, /obj/item/stack/material) && I.get_material_name() == MATERIAL_STEEL) @@ -760,56 +718,55 @@ var/global/list/turret_icons build_step = 7 else to_chat(user, SPAN_WARNING("You need two sheets of metal to continue construction.")) - return + return TRUE - else if(istype(I, /obj/item/screwdriver)) + else if(I.tool_behaviour == TOOL_SCREWDRIVER) + if(!I.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) build_step = 5 - to_chat(user, SPAN_NOTICE("You open the internal access hatch.")) - return + USE_FEEDBACK_NEW_PANEL_OPEN(user, TRUE) + return TRUE if(7) - if(isWelder(I)) - var/obj/item/weldingtool/WT = I - if(!WT.isOn()) return - if(WT.get_fuel() < 5) - to_chat(user, SPAN_NOTICE("You need more fuel to complete this task.")) - - playsound(loc, pick('sound/items/Welder.ogg', 'sound/items/Welder2.ogg'), 50, 1) - if(do_after(user, 3 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src || !WT.remove_fuel(5, user)) - return - build_step = 8 - to_chat(user, SPAN_NOTICE("You weld the turret's armor down.")) - - //The final step: create a full turret - var/obj/machinery/porta_turret/Turret = new target_type(loc) - Turret.SetName(finish_name) - Turret.installation = installation - Turret.gun_charge = gun_charge - Turret.enabled = 0 - Turret.setup() - - qdel(src) // qdel - - else if(isCrowbar(I)) + if(I.tool_behaviour == TOOL_WELDER) + if(!I.tool_start_check(user, 5)) + return TRUE + balloon_alert(user, "приваривание брони") + if(!I.use_as_tool(src, user, 3 SECONDS, 5, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE + build_step = 8 + + //The final step: create a full turret + var/obj/machinery/porta_turret/Turret = new target_type(loc) + transfer_fingerprints_to(Turret) + Turret.SetName(finish_name) + Turret.installation = installation + Turret.gun_charge = gun_charge + Turret.enabled = 0 + Turret.setup() + + qdel(src) // qdel + return TRUE + + else if(I.tool_behaviour == TOOL_CROWBAR) playsound(loc, 'sound/items/Crowbar.ogg', 75, 1) to_chat(user, SPAN_NOTICE("You pry off the turret's exterior armor.")) new /obj/item/stack/material/steel(loc, 2) build_step = 6 - return + return TRUE if(istype(I, /obj/item/pen)) //you can rename turrets like bots! var/t = sanitizeSafe(input(user, "Enter new turret name", name, finish_name) as text, MAX_NAME_LEN) if(!t) - return + return TRUE if(!in_range(src, usr) && loc != usr) - return + return TRUE finish_name = t - return + return TRUE - ..() + return ..() /obj/machinery/porta_turret_construct/attack_hand(mob/user) @@ -835,7 +792,7 @@ var/global/list/turret_icons return /atom/movable/porta_turret_cover - icon = 'icons/obj/turrets.dmi' + icon = 'icons/obj/machines/turrets.dmi' diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 47ef5abc84d8f..7c358af222a74 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -3,11 +3,12 @@ /obj/machinery/recharger name = "recharger" desc = "An all-purpose recharger for a variety of devices." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/machines/rechargers.dmi' icon_state = "recharger0" anchored = TRUE idle_power_usage = 4 active_power_usage = 30 KILOWATTS + obj_flags = OBJ_FLAG_CAN_TABLE var/obj/item/charging = null var/list/allowed_devices = list(/obj/item/gun/energy, /obj/item/gun/magnetic/railgun, /obj/item/melee/baton, /obj/item/cell, /obj/item/modular_computer, /obj/item/device/suit_sensor_jammer, /obj/item/stock_parts/computer/battery_module, /obj/item/shield_diffuser, /obj/item/clothing/mask/smokable/ecig, /obj/item/device/radio) var/icon_state_charged = "recharger2" @@ -15,7 +16,19 @@ var/icon_state_idle = "recharger0" //also when unpowered var/portable = 1 -/obj/machinery/recharger/attackby(obj/item/G as obj, mob/user as mob) +/obj/machinery/recharger/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!portable) + return + if(charging) + to_chat(user, SPAN_WARNING("Remove [charging] first!")) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + anchored = !anchored + to_chat(user, "You [anchored ? "attached" : "detached"] the recharger.") + +/obj/machinery/recharger/use_tool(obj/item/G, mob/living/user, list/click_params) var/allowed = 0 for (var/allowed_type in allowed_devices) if (istype(G, allowed_type)) allowed = 1 @@ -23,31 +36,27 @@ if(allowed) if(charging) to_chat(user, SPAN_WARNING("\A [charging] is already charging here.")) - return + return TRUE // Checks to make sure he's not in space doing it, and that the area got proper power. if(!powered()) - to_chat(user, SPAN_WARNING("The [name] blinks red as you try to insert the item!")) - return + to_chat(user, SPAN_WARNING("\The [name] blinks red as you try to insert the item!")) + return TRUE if (istype(G, /obj/item/gun/energy)) var/obj/item/gun/energy/E = G if(E.self_recharge) to_chat(user, SPAN_NOTICE("You can't find a charging port on \the [E].")) - return + return TRUE if(!G.get_cell()) to_chat(user, "This device does not have a battery installed.") - return + return TRUE if(user.unEquip(G)) G.forceMove(src) charging = G update_icon() - else if(portable && isWrench(G)) - if(charging) - to_chat(user, SPAN_WARNING("Remove [charging] first!")) - return - anchored = !anchored - to_chat(user, "You [anchored ? "attached" : "detached"] the recharger.") - playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + return TRUE + + return ..() /obj/machinery/recharger/physical_attack_hand(mob/user) if(charging) @@ -100,12 +109,12 @@ var/obj/item/cell/C = charging.get_cell() if(!isnull(C)) - to_chat(user, "Item's charge at [round(C.percent())]%.") + . += SPAN_NOTICE("Item's charge at [round(C.percent())]%.") /obj/machinery/recharger/wallcharger name = "wall recharger" desc = "A heavy duty wall recharger specialized for energy weaponry." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/machines/rechargers.dmi' icon_state = "wrecharger0" active_power_usage = 50 KILOWATTS //It's more specialized than the standalone recharger (guns and batons only) so make it more powerful allowed_devices = list(/obj/item/gun/magnetic/railgun, /obj/item/gun/energy, /obj/item/melee/baton, /obj/item/device/radio) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 48d862377d279..bca8255ee3a96 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -1,8 +1,8 @@ /obj/machinery/recharge_station name = "cyborg recharging station" desc = "A heavy duty rapid charging system, designed to quickly recharge cyborg power reserves." - icon = 'icons/obj/objects.dmi' - icon_state = "borgcharger0" + icon = 'icons/obj/machines/robot_charger.dmi' + icon_state = "borgcharger" density = TRUE anchored = TRUE idle_power_usage = 50 @@ -14,7 +14,7 @@ machine_name = "cyborg recharging station" machine_desc = "A station for recharging robots, cyborgs, and silicon-based humanoids such as IPCs and full-body prosthetics." - var/overlay_icon = 'icons/obj/objects.dmi' + var/overlay_icon = 'icons/obj/machines/robot_charger.dmi' var/mob/living/occupant = null var/charging = 0 var/last_overlay_state @@ -91,9 +91,9 @@ . = ..() var/obj/item/cell/cell = get_cell() if(cell) - to_chat(user, "The charge meter reads: [cell.percent()]%") + . += SPAN_NOTICE("The charge meter reads: [cell.percent()]%") else - to_chat(user, "The indicator shows that the cell is missing.") + . += SPAN_WARNING("The indicator shows that the cell is missing.") /obj/machinery/recharge_station/relaymove(mob/user as mob) if(user.stat) @@ -151,20 +151,22 @@ /obj/machinery/recharge_station/on_update_icon() ..() - if(MACHINE_IS_BROKEN(src)) - icon_state = "borgcharger0" - return + ClearOverlays() + + if(panel_open) + AddOverlays("[icon_state]_panel") if(occupant) - if(!is_powered()) - icon_state = "borgcharger2" - else - icon_state = "borgcharger1" + icon_state = "borgcharger_closed" + if(is_powered()) + AddOverlays("borgcharger_lights_working") + AddOverlays(emissive_appearance(icon, "borgcharger_lights_working")) else - icon_state = "borgcharger0" + icon_state = "borgcharger" last_overlay_state = overlay_state() - overlays = list(image(overlay_icon, overlay_state())) + AddOverlays(list(image(overlay_icon, overlay_state()))) + AddOverlays(emissive_appearance(icon, "statn_c100")) /obj/machinery/recharge_station/Bumped(mob/living/silicon/robot/R) go_in(R) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 09a2ff6e43304..c362428ba0a45 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -23,10 +23,10 @@ var/global/req_console_information = list() var/global/list/obj/machinery/requests_console/allConsoles = list() /obj/machinery/requests_console - name = "Requests Console" + name = "requests console" desc = "A console intended to send requests to different departments." anchored = TRUE - icon = 'icons/obj/terminals.dmi' + icon = 'icons/obj/machines/terminals.dmi' icon_state = "req_comp0" var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department var/list/message_log = list() //List of all messages @@ -50,7 +50,7 @@ var/global/list/obj/machinery/requests_console/allConsoles = list() var/message = ""; var/recipient = ""; //the department which will be receiving the message var/priority = -1 ; //Priority of the message being sent - light_outer_range = 0 + light_range = 0 var/datum/announcement/announcement = new /obj/machinery/requests_console/on_update_icon() @@ -67,7 +67,7 @@ var/global/list/obj/machinery/requests_console/allConsoles = list() announcement.title = "[department] announcement" announcement.newscast = 1 - name = "[department] Requests Console" + name = "[department] requests console" allConsoles += src if (departmentType & RC_ASSIST) req_console_assistance |= department @@ -188,31 +188,9 @@ var/global/list/obj/machinery/requests_console/allConsoles = list() silent = !silent return TOPIC_REFRESH - //err... hacking code, which has no reason for existing... but anyway... it was once supposed to unlock priority 3 messanging on that console (EXTREME priority...), but the code for that was removed. -/obj/machinery/requests_console/attackby(obj/item/O as obj, mob/user as mob) - /* - if (istype(O, /obj/item/crowbar)) - if(open) - open = 0 - icon_state="req_comp0" - else - open = 1 - if(hackState == 0) - icon_state="req_comp_open" - else if(hackState == 1) - icon_state="req_comp_rewired" - if (istype(O, /obj/item/screwdriver)) - if(open) - if(hackState == 0) - hackState = 1 - icon_state="req_comp_rewired" - else if(hackState == 1) - hackState = 0 - icon_state="req_comp_open" - else - to_chat(user, "You can't do much with that.") */ - if (istype(O, /obj/item/card/id)) - if(inoperable() || GET_FLAGS(stat, MACHINE_STAT_MAINT)) return +/obj/machinery/requests_console/use_tool(obj/item/O, mob/living/user, list/click_params) + if (isid(O)) + if(inoperable() || GET_FLAGS(stat, MACHINE_STAT_MAINT)) return FALSE if(screen == RCS_MESSAUTH) var/obj/item/card/id/T = O msgVerified = text(SPAN_COLOR("green", "Verified by [T.registered_name] ([T.assignment])")) @@ -226,13 +204,17 @@ var/global/list/obj/machinery/requests_console/allConsoles = list() reset_message() to_chat(user, SPAN_WARNING("You are not authorized to send announcements.")) SSnano.update_uis(src) + return TRUE + if (istype(O, /obj/item/stamp)) - if(inoperable() || GET_FLAGS(stat, MACHINE_STAT_MAINT)) return + if(inoperable() || GET_FLAGS(stat, MACHINE_STAT_MAINT)) return FALSE if(screen == RCS_MESSAUTH) var/obj/item/stamp/T = O msgStamped = text(SPAN_COLOR("blue", "Stamped with the [T.name]")) SSnano.update_uis(src) - return + return TRUE + + return ..() /obj/machinery/requests_console/proc/reset_message(mainmenu = 0) message = "" diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm deleted file mode 100644 index d00847dbfa9af..0000000000000 --- a/code/game/machinery/robot_fabricator.dm +++ /dev/null @@ -1,138 +0,0 @@ -/obj/machinery/robotic_fabricator - name = "Robotic Fabricator" - icon = 'icons/obj/robotics.dmi' - icon_state = "fab-idle" - density = TRUE - anchored = TRUE - var/metal_amount = 0 - var/operating = 0 - var/obj/item/robot_parts/being_built = null - idle_power_usage = 40 - active_power_usage = 10000 - -/obj/machinery/robotic_fabricator/attackby(obj/item/O as obj, mob/user as mob) - if (istype(O, /obj/item/stack/material) && O.get_material_name() == MATERIAL_STEEL) - var/obj/item/stack/M = O - if (src.metal_amount < 150000.0) - var/count = 0 - src.overlays += "fab-load-metal" - spawn(15) - if(M) - if(!M.get_amount()) - return - while(metal_amount < 150000 && M.use(1)) - src.metal_amount += O.matter[MATERIAL_STEEL] /*O:height * O:width * O:length * 100000.0*/ - count++ - - to_chat(user, "You insert [count] metal sheet\s into the fabricator.") - src.overlays -= "fab-load-metal" - updateDialog() - else - to_chat(user, "The robot part maker is full. Please remove metal from the robot part maker in order to insert more.") - -/obj/machinery/robotic_fabricator/interface_interact(mob/user) - interact(user) - return TRUE - -/obj/machinery/robotic_fabricator/interact(mob/user) - var/dat - - if (src.operating) - dat = {" -Building [src.being_built.name].
-Please wait until completion...

-
-"} - else - dat = {" -Metal Amount: [min(150000, src.metal_amount)] cm3 (MAX: 150,000)

-
-Left Arm (25,000 cc metal.)
-
Right Arm (25,000 cc metal.)
-
Left Leg (25,000 cc metal.)
-
Right Leg (25,000 cc metal).
-
Chest (50,000 cc metal).
-
Head (50,000 cc metal).
-
Robot Frame (75,000 cc metal).
-"} - - show_browser(user, "Robotic Fabricator Control Panel[dat]", "window=robot_fabricator") - onclose(user, "robot_fabricator") - return - -/obj/machinery/robotic_fabricator/Topic(href, href_list) - if (..()) - return - - usr.set_machine(src) - - if (href_list["make"]) - if (!src.operating) - var/part_type = text2num(href_list["make"]) - - var/build_type = null - var/build_time = 200 - var/build_cost = 25000 - - switch (part_type) - if (1) - build_type = /obj/item/robot_parts/l_arm - build_time = 200 - build_cost = 25000 - - if (2) - build_type = /obj/item/robot_parts/r_arm - build_time = 200 - build_cost = 25000 - - if (3) - build_type = /obj/item/robot_parts/l_leg - build_time = 200 - build_cost = 25000 - - if (4) - build_type = /obj/item/robot_parts/r_leg - build_time = 200 - build_cost = 25000 - - if (5) - build_type = /obj/item/robot_parts/chest - build_time = 350 - build_cost = 50000 - - if (6) - build_type = /obj/item/robot_parts/head - build_time = 350 - build_cost = 50000 - - if (7) - build_type = /obj/item/robot_parts/robot_suit - build_time = 600 - build_cost = 75000 - - var/building = build_type - if (!isnull(building)) - if (src.metal_amount >= build_cost) - src.operating = 1 - src.update_use_power(POWER_USE_ACTIVE) - - src.metal_amount = max(0, src.metal_amount - build_cost) - - src.being_built = new building(src) - - src.overlays += "fab-active" - src.updateUsrDialog() - addtimer(new Callback(src, .proc/done_building), build_time) - return - - for (var/mob/M in viewers(1, src)) - if (M.client && M.machine == src) - src.attack_hand(M) - -/obj/machinery/robotic_fabricator/proc/done_building() - if (!isnull(being_built)) - being_built.dropInto(get_turf(src)) - being_built = null - update_use_power(POWER_USE_IDLE) - overlays -= "fab-active" - operating = FALSE diff --git a/code/game/machinery/robotics_fabricator.dm b/code/game/machinery/robotics_fabricator.dm index f42b73e2ce4f6..f2a3304fbe3bd 100644 --- a/code/game/machinery/robotics_fabricator.dm +++ b/code/game/machinery/robotics_fabricator.dm @@ -1,8 +1,8 @@ /obj/machinery/robotics_fabricator - name = "Exosuit Fabricator" + name = "exosuit fabricator" desc = "A machine used for construction of robotics and mechs." - icon = 'icons/obj/robotics.dmi' - icon_state = "fab-idle" + icon = 'icons/obj/machines/fabricators/robotics_fabricator.dmi' + icon_state = "fab" density = TRUE anchored = TRUE idle_power_usage = 20 @@ -26,7 +26,11 @@ var/progress = 0 var/busy = 0 + /// Set of all categories available in mechfab as: category_name => TRUE. For fast lookup + var/list/categories_lookup = list() + /// Cached list of all categories available in mechfab. Currently used only for UI var/list/categories = list() + /// Currently set category var/category = null var/manufacturer = null var/sync_message = "" @@ -49,13 +53,16 @@ update_icon() /obj/machinery/robotics_fabricator/on_update_icon() - overlays.Cut() + ClearOverlays() if(panel_open) - icon_state = "fab-o" - else - icon_state = "fab-idle" - if(busy) - overlays += "fab-active" + AddOverlays("[icon_state]_panel") + if(is_powered()) + if (busy) + AddOverlays(emissive_appearance(icon, "[icon_state]_lights_working")) + AddOverlays("[icon_state]_lights_working") + else + AddOverlays(emissive_appearance(icon, "[icon_state]_lights")) + AddOverlays("[icon_state]_lights") /obj/machinery/robotics_fabricator/dismantle() for(var/f in materials) @@ -112,14 +119,21 @@ return if(href_list["build"]) - add_to_queue(text2num(href_list["build"])) + if(add_to_queue(href_list["build"])) + return TOPIC_REFRESH + + return TOPIC_NOACTION if(href_list["remove"]) remove_from_queue(text2num(href_list["remove"])) if(href_list["category"]) - if(href_list["category"] in categories) - category = href_list["category"] + var/category_name = href_list["category"] + if(categories_lookup[category_name]) + category = category_name + return TOPIC_REFRESH + + return TOPIC_NOACTION if(href_list["manufacturer"]) if(href_list["manufacturer"] in all_robolimbs) @@ -143,10 +157,10 @@ return SPAN_NOTICE("\The [src] is busy. Please wait for completion of previous operation.") return ..() -/obj/machinery/robotics_fabricator/attackby(obj/item/I, mob/user) +/obj/machinery/robotics_fabricator/use_tool(obj/item/I, mob/living/user, list/click_params) if(busy) to_chat(user, SPAN_NOTICE("\The [src] is busy. Please wait for completion of previous operation.")) - return 1 + return TRUE if(!istype(I, /obj/item/stack/material)) return ..() @@ -161,14 +175,14 @@ if(!(material in materials)) to_chat(user, SPAN_WARNING("\The [src] does not accept [stack_plural]!")) - return + return TRUE if(materials[material] + amnt <= res_max_amount) if(stack && stack.can_use(1)) var/count = 0 - overlays += "fab-load-metal" + AddOverlays("fab-load-metal") spawn(10) - overlays -= "fab-load-metal" + CutOverlays("fab-load-metal") while(materials[material] + amnt <= res_max_amount && stack.amount >= 1) materials[material] += amnt stack.use(1) @@ -178,6 +192,7 @@ update_busy() else to_chat(user, "The fabricator cannot hold more [stack_plural].")// use the plural form even if the given sheet is singular + return TRUE /obj/machinery/robotics_fabricator/emag_act(remaining_charges, mob/user) @@ -198,10 +213,15 @@ else busy = 0 -/obj/machinery/robotics_fabricator/proc/add_to_queue(index) - var/datum/design/D = files.known_designs[index] - queue += D +/obj/machinery/robotics_fabricator/proc/add_to_queue(id) + var/datum/design/design_to_build = files.known_designs_lookup[id] + if(!design_to_build) + stack_trace("Invalid design ID passed to robotics fabricator to enque: [id]") + return FALSE + + queue += design_to_build update_busy() + return TRUE /obj/machinery/robotics_fabricator/proc/remove_from_queue(index) if(index == 1) @@ -244,12 +264,22 @@ . += D.name /obj/machinery/robotics_fabricator/proc/get_build_options() - . = list() - for(var/i = 1 to length(files.known_designs)) - var/datum/design/D = files.known_designs[i] - if(!D.build_path || !(D.build_type & MECHFAB)) + var/list/data = list() + + for(var/datum/design/known_design as anything in files.known_designs) + if(!known_design.build_path || !(known_design.build_type & MECHFAB)) continue - . += list(list("name" = D.name, "id" = i, "category" = D.category, "resourses" = get_design_resourses(D), "time" = get_design_time(D))) + + var/list/design_data = list() + design_data["name"] = known_design.name + design_data["id"] = known_design.id + design_data["category"] = known_design.category + design_data["resourses"] = get_design_resourses(known_design) + design_data["time"] = get_design_time(known_design) + + data += list(design_data) + + return data /obj/machinery/robotics_fabricator/proc/get_design_resourses(datum/design/D) var/list/F = list() @@ -265,12 +295,17 @@ /obj/machinery/robotics_fabricator/proc/update_categories() categories = list() - for(var/datum/design/D in files.known_designs) - if(!D.build_path || !(D.build_type & MECHFAB)) + for(var/datum/design/known_design as anything in files.known_designs) + if(!known_design.build_path || !(known_design.build_type & MECHFAB)) continue - categories |= D.category - if(!category || !(category in categories)) - category = categories[1] + + categories_lookup[known_design.category] = TRUE + + for(var/category_name in categories_lookup) + categories += category_name + + if(!category || !(categories_lookup[category])) + category = categories_lookup[1] /obj/machinery/robotics_fabricator/proc/get_materials() . = list() @@ -317,13 +352,21 @@ /obj/machinery/robotics_fabricator/proc/sync() sync_message = "Error: no console found." - for(var/obj/machinery/computer/rdconsole/RDC in get_area_all_atoms(get_area(src))) + var/area/fabricator_area = get_area(src) + for(var/obj/machinery/computer/rdconsole/RDC as anything in SSmachines.get_machinery_of_type(/obj/machinery/computer/rdconsole)) if(!RDC.sync) continue - for(var/datum/tech/T in RDC.files.known_tech) - files.AddTech2Known(T) - for(var/datum/design/D in RDC.files.known_designs) - files.AddDesign2Known(D) - files.RefreshResearch() + + if(fabricator_area != get_area(RDC)) + continue + + for(var/datum/tech/known_tech as anything in RDC.files.known_tech) + files.add_tech_to_known(known_tech) + + for(var/datum/design/known_design as anything in RDC.files.known_designs) + files.add_design_to_known(known_design) + + files.refresh_research() sync_message = "Sync complete." + update_categories() diff --git a/code/game/machinery/rotating_alarm.dm b/code/game/machinery/rotating_alarm.dm index 453fa004982ff..9b176ddc8ec96 100644 --- a/code/game/machinery/rotating_alarm.dm +++ b/code/game/machinery/rotating_alarm.dm @@ -1,4 +1,4 @@ -/obj/effect/spinning_light +/obj/spinning_light var/spin_rate = 1 SECOND var/_size = 48 var/_factor = 0.5 @@ -10,7 +10,7 @@ mouse_opacity = 0 -/obj/effect/spinning_light/Initialize() +/obj/spinning_light/Initialize() . = ..() filters = filter(type="rays", size = _size, color = _color, factor = _factor, density = _density, flags = FILTER_OVERLAY, offset = _offset) @@ -28,14 +28,14 @@ animate(transform = test * matrix(), spin_rate / 4, loop = -1) -/obj/effect/spinning_light/set_color(_color) +/obj/spinning_light/set_color(_color) filters = filter(type="rays", size = _size, color = _color, factor = _factor, density = _density, flags = FILTER_OVERLAY, offset = _offset) /obj/machinery/rotating_alarm - name = "Industrial alarm" + name = "industrial alarm" desc = "An industrial rotating alarm light." - icon = 'icons/obj/rotating_alarm.dmi' + icon = 'icons/obj/structures/rotating_alarm.dmi' icon_state = "alarm" idle_power_usage = 0 active_power_usage = 0 @@ -45,7 +45,7 @@ var/low_alarm = FALSE var/construct_type = /obj/machinery/light_construct - var/obj/effect/spinning_light/spin_effect = null + var/obj/spinning_light/spin_effect = null var/alarm_light_color = COLOR_ORANGE /// This is an angle to rotate the colour of alarm and its light. Default is orange, so, a 45 degree angle clockwise will make it green @@ -83,7 +83,7 @@ if (on) vis_contents -= spin_effect if (isnull(spinning_lights_cache["[color]"])) - spinning_lights_cache["[color]"] = new /obj/effect/spinning_light() + spinning_lights_cache["[color]"] = new /obj/spinning_light() spin_effect = spinning_lights_cache["[color]"] alarm_light_color = color var/HSV = RGBtoHSV(alarm_light_color) @@ -96,7 +96,7 @@ /obj/machinery/rotating_alarm/proc/set_on() vis_contents += spin_effect - set_light(1, 0.5, 2, 0.3, alarm_light_color) + set_light(2, 0.5, alarm_light_color) on = TRUE low_alarm = FALSE diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm index 260dc46cc543b..e575c7ff97006 100644 --- a/code/game/machinery/seed_extractor.dm +++ b/code/game/machinery/seed_extractor.dm @@ -1,7 +1,7 @@ /obj/machinery/seed_extractor name = "seed extractor" desc = "Extracts and bags seeds from produce." - icon = 'icons/obj/hydroponics_machines.dmi' + icon = 'icons/obj/machines/hydroponics_machines.dmi' icon_state = "sextractor" density = TRUE anchored = TRUE @@ -14,13 +14,13 @@ machine_name = "seed extractor" machine_desc = "Extracts a number of growable seed packets from a provided plant sample. The sample is destroyed in the process." -/obj/machinery/seed_extractor/attackby(obj/item/O, mob/user) - if((. = component_attackby(O, user))) +/obj/machinery/seed_extractor/use_tool(obj/item/O, mob/living/user, list/click_params) + if ((. = ..())) return // Fruits and vegetables. if(istype(O, /obj/item/reagent_containers/food/snacks/grown)) if(!user.unEquip(O)) - return + return TRUE var/obj/item/reagent_containers/food/snacks/grown/F = O var/datum/seed/new_seed_type = SSplants.seeds[F.plantname] @@ -36,17 +36,18 @@ to_chat(user, "[O] doesn't seem to have any usable seeds inside it.") qdel(O) + return TRUE //Grass. - else if(istype(O, /obj/item/stack/tile/grass)) + if (istype(O, /obj/item/stack/tile/grass)) var/obj/item/stack/tile/grass/S = O if (S.use(1)) to_chat(user, SPAN_NOTICE("You extract some seeds from the grass tile.")) new /obj/item/seeds/grassseed(loc) + return TRUE - else if(istype(O, /obj/item/fossil/plant)) // Fossils + if (istype(O, /obj/item/fossil/plant)) // Fossils var/obj/item/seeds/random/R = new(get_turf(src)) to_chat(user, "\The [src] scans \the [O] and spits out \a [R].") qdel(O) - - return + return TRUE diff --git a/code/game/machinery/self_destruct.dm b/code/game/machinery/self_destruct.dm index 4a190d70d6151..255a3bd316567 100644 --- a/code/game/machinery/self_destruct.dm +++ b/code/game/machinery/self_destruct.dm @@ -1,5 +1,5 @@ /obj/machinery/self_destruct - name = "\improper Nuclear Cylinder Inserter" + name = "nuclear cylinder inserter" desc = "A hollow space used to insert nuclear cylinders for arming the self destruct." icon = 'icons/obj/machines/self_destruct.dmi' icon_state = "empty" @@ -9,33 +9,34 @@ var/armed = 0 var/damaged = 0 -/obj/machinery/self_destruct/attackby(obj/item/W as obj, mob/user as mob) - if(isWelder(W)) - if(damaged) - user.visible_message("[user] begins to repair [src].", "You begin repairing [src].") - if(do_after(usr, 10 SECONDS, src, DO_REPAIR_CONSTRUCT)) - var/obj/item/weldingtool/w - if(w.burn_fuel(10)) - damaged = 0 - user.visible_message("[user] repairs [src].", "You repair [src].") - else - to_chat(user, SPAN_WARNING("There is not enough fuel to repair [src].")) - return +/obj/machinery/self_destruct/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(damaged) + if(!tool.tool_start_check(user, 10)) + return + USE_FEEDBACK_REPAIR_START(user) + if(!tool.use_as_tool(src, user, 10 SECONDS, 10, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + USE_FEEDBACK_REPAIR_FINISH(user) + damaged = 0 + +/obj/machinery/self_destruct/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/nuclear_cylinder)) if(damaged) to_chat(user, SPAN_WARNING("[src] is damaged, you cannot place the cylinder.")) - return + return TRUE if(cylinder) to_chat(user, "There is already a cylinder here.") - return + return TRUE user.visible_message("[user] begins to carefully place [W] onto the Inserter.", "You begin to carefully place [W] onto the Inserter.") if(do_after(user, 8 SECONDS, src, DO_PUBLIC_UNIQUE) && user.unEquip(W, src)) cylinder = W set_density(TRUE) user.visible_message("[user] places [W] onto the Inserter.", "You place [W] onto the Inserter.") update_icon() - return - ..() + return TRUE + + return ..() /obj/machinery/self_destruct/physical_attack_hand(mob/user) if(cylinder) @@ -103,13 +104,13 @@ /obj/machinery/self_destruct/examine(mob/user) . = ..() if(damaged) - to_chat(user, SPAN_WARNING("[src] is damaged, it needs repairs.")) + . += SPAN_WARNING("[src] is damaged, it needs repairs.") return if(armed) - to_chat(user, "[src] is armed and ready.") + . += SPAN_NOTICE("[src] is armed and ready.") return if(cylinder) - to_chat(user, "[src] is loaded and ready to be armed.") + . += SPAN_NOTICE("[src] is loaded and ready to be armed.") /obj/machinery/self_destruct/on_update_icon() if(armed) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index e6d1e03c6e36f..f7dadc04a18bf 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -2,7 +2,7 @@ use_power = POWER_USE_OFF anchored = FALSE density = TRUE - icon = 'icons/obj/atmos.dmi' + icon = 'icons/obj/atmospherics/atmos.dmi' icon_state = "sheater-off" name = "space heater" desc = "Made by Space Amish using traditional space techniques, this heater is guaranteed not to set anything, or anyone, on fire." @@ -14,6 +14,8 @@ atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE clicksound = "switch" + light_power = 0.5 + /obj/machinery/space_heater/New() ..() @@ -26,27 +28,27 @@ set_light(0) else if(active > 0) icon_state = "sheater-heat" - set_light(0.7, 1, 2, 3, COLOR_SEDONA) + set_light(3, COLOR_SEDONA) else if(active < 0) icon_state = "sheater-cool" - set_light(0.7, 1, 2, 3, COLOR_DEEP_SKY_BLUE) + set_light(3, l_color = COLOR_DEEP_SKY_BLUE) else icon_state = "sheater-standby" set_light(0) if(rebuild_overlay) - overlays.Cut() + ClearOverlays() if(panel_open) - overlays += "sheater-open" + AddOverlays("sheater-open") /obj/machinery/space_heater/examine(mob/user) . = ..() - to_chat(user, "The heater is [on ? "on" : "off"] and the hatch is [panel_open ? "open" : "closed"].") + . += SPAN_NOTICE("The heater is [on ? "on" : "off"] and the hatch is [panel_open ? "open" : "closed"].") if(panel_open) - to_chat(user, "The power cell is [cell ? "installed" : "missing"].") + . += SPAN_NOTICE("The power cell is [cell ? "installed" : "missing"].") else - to_chat(user, "The charge meter reads [cell ? round(cell.percent(),1) : 0]%") + . += SPAN_NOTICE("The charge meter reads [cell ? round(cell.percent(),1) : 0]%") /obj/machinery/space_heater/emp_act(severity) if(inoperable()) @@ -56,35 +58,35 @@ cell.emp_act(severity) ..(severity) -/obj/machinery/space_heater/attackby(obj/item/I, mob/user) +/obj/machinery/space_heater/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + panel_open = !panel_open + USE_FEEDBACK_NEW_PANEL_OPEN(user, panel_open) + update_icon(1) + if(!panel_open && user.machine == src) + show_browser(user, null, "window=spaceheater") + user.unset_machine() + +/obj/machinery/space_heater/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/cell)) if(panel_open) if(cell) to_chat(user, "There is already a power cell inside.") - return + return TRUE else // insert cell if(!user.unEquip(I, src)) - return + return TRUE cell = I user.visible_message(SPAN_NOTICE("[user] inserts a power cell into [src]."), SPAN_NOTICE("You insert the power cell into [src].")) power_change() + return TRUE else to_chat(user, "The hatch must be open to insert a power cell.") - return - else if(isScrewdriver(I)) - panel_open = !panel_open - user.visible_message( - SPAN_NOTICE("\The [user] [panel_open ? "opens" : "closes"] the hatch on \the [src]."), - SPAN_NOTICE("You [panel_open ? "open" : "close"] the hatch on \the [src].") - ) - update_icon(1) - if(!panel_open && user.machine == src) - show_browser(user, null, "window=spaceheater") - user.unset_machine() - else - ..() - return + return TRUE + . = ..() /obj/machinery/space_heater/interface_interact(mob/user) if(panel_open) @@ -111,7 +113,6 @@ var/datum/browser/popup = new(usr, "spaceheater", "Space Heater Control Panel") popup.set_content(jointext(dat, null)) - popup.set_title_image(usr.browse_rsc_icon(src.icon, "sheater-standby")) popup.open() return @@ -142,7 +143,7 @@ if("cellremove") if(panel_open && cell && !usr.get_active_hand()) - usr.visible_message(SPAN_NOTICE("\The [usr] removes \the [cell] from \the [src]."), SPAN_NOTICE("You remove \the [cell] from \the [src].")) + usr.visible_message(SPAN_NOTICE("[usr] removes [cell] from [src]."), SPAN_NOTICE("You remove [cell] from [src].")) cell.update_icon() usr.put_in_hands(cell) cell.add_fingerprint(usr) @@ -158,7 +159,7 @@ cell = C C.add_fingerprint(usr) power_change() - usr.visible_message(SPAN_NOTICE("[usr] inserts \the [C] into \the [src]."), SPAN_NOTICE("You insert \the [C] into \the [src].")) + usr.visible_message(SPAN_NOTICE("[usr] inserts [C] into [src]."), SPAN_NOTICE("You insert [C] into [src].")) updateDialog() diff --git a/code/game/machinery/stasis_cage.dm b/code/game/machinery/stasis_cage.dm new file mode 100644 index 0000000000000..a08c775799caf --- /dev/null +++ b/code/game/machinery/stasis_cage.dm @@ -0,0 +1,403 @@ +var/global/const/STASISCAGE_WIRE_SAFETY = 1 +var/global/const/STASISCAGE_WIRE_RELEASE = 2 +var/global/const/STASISCAGE_WIRE_LOCK = 4 + +/obj/machinery/stasis_cage + name = "stasis cage" + desc = "A high-tech animal cage, designed to keep contained fauna docile and safe." + icon = 'icons/obj/machines/research/stasis_cage.dmi' + icon_state = "stasis_cage" + density = TRUE + layer = ABOVE_OBJ_LAYER + req_access = list(access_research) + idle_power_usage = 0 + active_power_usage = 5 KILOWATTS + use_power = POWER_USE_IDLE + health_max = 200 + health_min_damage = 10 + construct_state = /singleton/machine_construction/default/panel_closed + + machine_name = "stasis cage" + machine_desc = "A container with an internal stasis suspender to keep any fauna inside safe and secure for transport. Fauna not included." + + var/mob/living/contained + var/datum/gas_mixture/airtank + var/broken = FALSE + var/safety = TRUE + + var/god = FALSE //Check if mob had godmode before being contained + + var/obj/item/cell/cell = null + + +/obj/machinery/stasis_cage/Initialize() + . = ..() + airtank = new() + airtank.temperature = T20C + airtank.adjust_gas(GAS_OXYGEN, MOLES_O2STANDARD, FALSE) + airtank.adjust_gas(GAS_NITROGEN, MOLES_N2STANDARD) + + cell = get_cell() + + var/mob/living/A = locate() in loc + if(!A) + release(A) + else + contain(A) + + wires = new/datum/wires/stasis_cage(src) + + +/obj/machinery/stasis_cage/Process() + if (!is_powered()) + return + if (contained) + if (iscarbon(contained)) + var/mob/living/carbon/C = contained + C.SetStasis(20) + if (isanimal(contained)) + var/mob/living/simple_animal/SA = contained + SA.in_stasis = TRUE + if (!god) + SA.status_flags ^= GODMODE + + +/obj/machinery/stasis_cage/proc/try_release(mob/user) + if(!contained) + to_chat(user, SPAN_WARNING("There's no animals inside [src]")) + return + if (broken) + to_chat(user, SPAN_WARNING("[src]'s lid is broken!")) + return + if (!allowed(user)) + to_chat(user, SPAN_WARNING("[src] refuses access.")) + return + if (!is_powered()) + to_chat(user, SPAN_WARNING("[src] is unpowered.")) + return + if (health_dead()) + to_chat(usr, SPAN_NOTICE("[src] is completely destroyed.")) + return + + user.visible_message("[user] begins undoing the locks and latches on [src].") + if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE) && user.use_sanity_check(src)) + user.visible_message("[user] releases [contained] from [src]!") + release() + + +/obj/machinery/stasis_cage/proc/release() + if (contained) + contained.dropInto(src) + if (HAS_FLAGS(contained.status_flags, GODMODE) && !god) + var/mob/living/SA = contained + CLEAR_FLAGS(SA.status_flags, GODMODE) + contained = null + playsound(loc, 'sound/machines/airlock_heavy.ogg', 40) + update_icon() + update_use_power(POWER_USE_IDLE) + + +/obj/machinery/stasis_cage/proc/contain(mob/user, mob/thing) + if(contained || broken) + return + if (!is_powered()) + to_chat(usr, SPAN_WARNING("[src] is unpowered.")) + return + if (health_dead()) + to_chat(usr, SPAN_WARNING("[src] is completely destroyed.")) + return + user.visible_message( + "[user] has stuffed [thing] into [src].", + "You have stuffed [thing] into [src]." + ) + set_contained(thing) + update_use_power(POWER_USE_ACTIVE) + + +/obj/machinery/stasis_cage/proc/set_contained(mob/contained) + src.contained = contained + contained.forceMove(src) + update_icon() + + +/obj/machinery/stasis_cage/physical_attack_hand(mob/user) + if (!panel_open) + try_release(user) + + +/obj/machinery/stasis_cage/attack_robot(mob/user) + if (Adjacent(user) && !panel_open) + try_release(user) + + +/obj/machinery/stasis_cage/examine(mob/user) + . = ..() + if(contained) + if (HAS_FLAGS(stat, MACHINE_STAT_NOSCREEN)) + . += SPAN_NOTICE("[src] seems to be occupied.") + else + . += SPAN_NOTICE("[contained] is kept inside.") + if(broken) + . += SPAN_WARNING("[src]'s lid is broken. It probably can not be used.") + if(cell) + . += SPAN_NOTICE("[src]'s power gauge shows [cell.percent()]% remaining.") + +/obj/machinery/stasis_cage/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(panel_open) + USE_FEEDBACK_FAILURE("[src]'s panel is open!") + return + if(!contained) + return + if(is_powered()) + USE_FEEDBACK_FAILURE("[src] is still powered shut.") + return + user.visible_message( + SPAN_DANGER("[user] begins to pry open [src] with the crowbar!"), + SPAN_DANGER("You being to pry open [src] with the crowbar.") + ) + playsound(loc, 'sound/machines/airlock_creaking.ogg', 40) + if(!tool.use_as_tool(src, user, 7 SECONDS, volume = 50, skill_path = list(SKILL_CONSTRUCTION, SKILL_DEVICES), do_flags = DO_PUBLIC_UNIQUE) || panel_open || !contained || is_powered()) + return + if(!prob(20 * (user.get_skill_value(SKILL_CONSTRUCTION)))) + USE_FEEDBACK_FAILURE("You fail to pry open [src]'s lid!") + return + if(!user.skill_check(SKILL_CONSTRUCTION, SKILL_TRAINED)) + user.visible_message( + SPAN_DANGER("[user] jams open [src]'s lid, damaging it in the process!"), + SPAN_DANGER("You successfully manage to jam open [src]'s lid, damaging it in the process.") + ) + release() + broken = TRUE + update_icon() + return + user.visible_message( + SPAN_DANGER("[user] jams open [src]'s lid!"), + SPAN_DANGER("You successfully manage to jam open [src]'s lid.") + ) + release() + +/obj/machinery/stasis_cage/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!broken) + return + if(health_dead()) + USE_FEEDBACK_FAILURE("You need to repair the rest of [src] first!") + return + user.visible_message( + SPAN_NOTICE("[user] begins to clamp [src]'s lid back into position."), + SPAN_NOTICE("You begin to clamp [src]'s lid back into position.") + ) + if(!user.skill_check(SKILL_CONSTRUCTION, SKILL_BASIC)) + to_chat(user, SPAN_WARNING("You fail to repair [src].")) + return + if(!tool.use_as_tool(src, user, 5 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_PUBLIC_UNIQUE)) + return + user.visible_message( + SPAN_NOTICE("[user] successfully repairs [src]'s lid!"), + SPAN_NOTICE("You successfully repair [src]'s lid!") + ) + broken = FALSE + update_icon() + +/obj/machinery/stasis_cage/use_tool(obj/item/tool, mob/user, list/click_params) + // Coil - Repair cage + if (isCoil(tool)) + if (health_dead()) + if (contained) + USE_FEEDBACK_FAILURE("[src] must be emptied before repairs can be done!") + return TRUE + var/obj/item/stack/cable_coil/I = tool + if(!I.can_use(10)) + USE_FEEDBACK_STACK_NOT_ENOUGH(I, 10, "to repair [src].") + return TRUE + user.visible_message( + SPAN_NOTICE("[user] begins to repair [src]'s electronics with [tool]."), + SPAN_NOTICE("You being to repair [src]'s electronics with [tool].") + ) + if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) + return TRUE + if (!prob(20 * (user.get_skill_value(SKILL_DEVICES)))) + USE_FEEDBACK_FAILURE("You fail to successfully repair [src]'s electronics.") + return TRUE + user.visible_message( + SPAN_NOTICE("[user] repairs [src]'s containment with [tool]."), + SPAN_NOTICE("You repair [src]'s containment with [tool].") + ) + I.use(10) + revive_health() + broken = TRUE + safety = TRUE + update_icon() + return TRUE + + return ..() + + +/obj/machinery/stasis_cage/return_air() //Used to make stasis cage protect from vacuum. + if (!is_powered()) + return + if(airtank) + return airtank + ..() + + +/obj/machinery/stasis_cage/RefreshParts() + ..() + var/charge_multiplier = clamp(total_component_rating_of_type(/obj/item/stock_parts/capacitor), 0.1, 10) + change_power_consumption(initial(active_power_usage) / charge_multiplier, POWER_USE_ACTIVE) + + +/obj/machinery/stasis_cage/Destroy() + release() + QDEL_NULL(airtank) + QDEL_NULL(contained) + if (cell) + QDEL_NULL(cell) + return ..() + + +/obj/machinery/stasis_cage/emp_act(severity) + SHOULD_CALL_PARENT(FALSE) + if (health_dead()) + return + if (inoperable()) + return + if(contained) + if(prob(30)) + visible_message(SPAN_DANGER("[src]'s lights flicker, unlocking the container!")) + release() + broken = TRUE + update_icon() + new /obj/sparks(get_turf(src)) + return + visible_message(SPAN_DANGER("[src] sparks violently, damaging the lid!")) + broken = TRUE + new /obj/sparks(get_turf(src)) + + if (cell) + cell.emp_act(severity) + + update_icon() + GLOB.empd_event.raise_event(src, severity) + +/obj/machinery/stasis_cage/on_update_icon() + ClearOverlays() + if (health_dead()) + icon_state = "[initial(icon_state)]_dead" + else if (is_powered()) + if (contained) + if (broken) + icon_state = "[initial(icon_state)]_broke" + else + icon_state = "[initial(icon_state)]_on" + else + if (broken) + icon_state = "[initial(icon_state)]_broke" + else + icon_state = "[initial(icon_state)]_power" + else + if (broken) + icon_state = "[initial(icon_state)]_dead" + else + icon_state = initial(icon_state) + + if (panel_open) + AddOverlays("[initial(icon_state)]_panel") + + +/obj/machinery/stasis_cage/on_death() + . = ..() + visible_message( + SPAN_DANGER("[src] lets out a painful whine, as its structure deforms!") + ) + + +/obj/machinery/stasis_cage/MouseDrop_T(mob/target, mob/user) + if(!CanMouseDrop(target, user)) + return + if (!isanimal(target) && safety) + to_chat(user, SPAN_WARNING("[src] smartly refuses [target].")) + return + if (!allowed(user)) + to_chat(user, "[src] blinks, refusing access.") + return + if (!stat && !istype(target.buckled, /obj/energy_net)) + to_chat(user, "It's going to be difficult to convince [target] to move into [src] without capturing it in a net.") + return + if (HAS_FLAGS(target.status_flags, GODMODE)) + god = TRUE + user.visible_message( + "[user] begins stuffing [target] into [src].", + "You begin stuffing [target] into [src]." + ) + playsound(src, 'sound/items/shuttle_beacon_prepare.ogg', 100) + Bumped(user) + if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) + var/obj/energy_net/EN = target.buckled + qdel(EN) + contain(user, target) + + +/datum/wires/stasis_cage + holder_type = /obj/machinery/stasis_cage + random = TRUE + wire_count = 3 + window_y = 500 + descriptions = list( + new /datum/wire_description(STASISCAGE_WIRE_SAFETY, "This wire is connected to the internal biometric sensors.", SKILL_EXPERIENCED), + new /datum/wire_description(STASISCAGE_WIRE_RELEASE, "This wire is connected to the automated lid latches.", SKILL_TRAINED), + new /datum/wire_description(STASISCAGE_WIRE_LOCK, "This wire is connected to the lid motors.", SKILL_TRAINED) + ) + + +/datum/wires/stasis_cage/CanUse(mob/living/L) + var/obj/machinery/stasis_cage/stasis_cage = holder + if (stasis_cage.panel_open) + return TRUE + return FALSE + + +/datum/wires/stasis_cage/GetInteractWindow(mob/user) + . = ..() + . += "
    " + . += "
  • The panel is powered.
  • " + if (user.skill_check(SKILL_ELECTRICAL, SKILL_BASIC)) + . += "
  • The biometric safety sensors are [IsIndexCut(STASISCAGE_WIRE_SAFETY) ? "disconnected" : "connected"].
  • " + . += "
  • The cage's emergency auto-release mechanism is [IsIndexCut(STASISCAGE_WIRE_RELEASE) ? "disabled" : "enabled"].
  • " + . += "
  • The cage lid motors are [IsIndexCut(STASISCAGE_WIRE_LOCK) ? "overriden" : "nominal"].
  • " + else + . += "
  • There are lights and wires here, but you don't know how the wiring works.
  • " + . += "
" + + +/datum/wires/stasis_cage/UpdateCut(index, mended) + var/obj/machinery/stasis_cage/stasis_cage = holder + switch (index) + if (STASISCAGE_WIRE_SAFETY) + if (!mended) + stasis_cage.safety = FALSE + if (STASISCAGE_WIRE_RELEASE) + if (stasis_cage.contained && !mended) + stasis_cage.release() + if (STASISCAGE_WIRE_LOCK) + if (!mended) + playsound(stasis_cage.loc, 'sound/machines/BoltsDown.ogg', 60) + holder.visible_message( + SPAN_WARNING("The cage's lid bolts down destructively, denting itself!"), + SPAN_NOTICE("You notice the cage lid override flag blink hastily.") + ) + stasis_cage.broken = TRUE + + +/datum/wires/stasis_cage/UpdatePulsed(index) + var/obj/machinery/stasis_cage/stasis_cage = holder + switch (index) + if (STASISCAGE_WIRE_SAFETY) + if (stasis_cage.contained) + if (prob(20) && usr.skill_check(SKILL_ELECTRICAL, SKILL_BASIC)) + holder.visible_message( + SPAN_WARNING("The cage hastily flicks open its lid!"), + SPAN_NOTICE("You notice the biometric sensor flag blink fervently.") + ) + stasis_cage.release() diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 84f397dc0a9bc..8a72209e019ce 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -10,13 +10,15 @@ // Alert status // And arbitrary messages set by comms computer /obj/machinery/status_display - icon = 'icons/obj/status_display.dmi' + icon = 'icons/obj/machines/status_display.dmi' icon_state = "frame" name = "status display" layer = ABOVE_WINDOW_LAYER anchored = TRUE density = FALSE idle_power_usage = 10 + health_max = 10 + damage_hitsound = 'sound/effects/Glasshit.ogg' var/mode = 1 // 0 = Blank // 1 = Shuttle timer // 2 = Arbitrary message(s) @@ -54,6 +56,37 @@ radio_controller.remove_object(src,frequency) return ..() +/obj/machinery/status_display/on_death() + ..() + playsound(src, "shatter", 70, 1) + visible_message(SPAN_DANGER("\The [src] is smashed into many pieces!")) + remove_display() + STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) + +/obj/machinery/status_display/on_revive() + ..() + START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) + +/obj/machinery/status_display/on_update_icon() + if (MACHINE_IS_BROKEN(src)) + icon_state = "[initial(icon_state)]_broken" + else + icon_state = "[initial(icon_state)]" + +/obj/machinery/status_display/use_tool(obj/item/tool, mob/living/user, list/click_params) + if (istype(tool, /obj/item/stack/material) && tool.get_material_name() == MATERIAL_GLASS && health_damaged()) + var/obj/item/stack/mats = tool + if (!mats.can_use(2)) + USE_FEEDBACK_STACK_NOT_ENOUGH(mats, 2, "repair \the [src].") + return TRUE + if (!user.do_skilled(4 SECONDS, SKILL_CONSTRUCTION, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + mats.use(2) + to_chat(user, SPAN_NOTICE("You repair the broken glass on \the [src].")) + revive_health() + return TRUE + return ..() + // register for radio system /obj/machinery/status_display/Initialize() . = ..() @@ -62,6 +95,8 @@ // timed process /obj/machinery/status_display/Process() + if (MACHINE_IS_BROKEN(src)) + return PROCESS_KILL if(!is_powered()) remove_display() return @@ -77,6 +112,8 @@ // set what is displayed /obj/machinery/status_display/proc/update() remove_display() + if (MACHINE_IS_BROKEN(src)) + return if(friendc && !ignore_friendc) set_picture("ai_friend") if(status_display_show_alert_border) @@ -152,10 +189,10 @@ /obj/machinery/status_display/examine(mob/user) . = ..() if(mode != STATUS_DISPLAY_BLANK && mode != STATUS_DISPLAY_ALERT) - to_chat(user, "The display says:
\t[sanitize(message1)]
\t[sanitize(message2)]") + . += SPAN_NOTICE("The display says:
\t[sanitize(message1)]
\t[sanitize(message2)]") if(mode == STATUS_DISPLAY_ALERT || status_display_show_alert_border) var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) - to_chat(user, "The current alert level is [security_state.current_security_level.name].") + . += SPAN_NOTICE("The current alert level is [security_state.current_security_level.name].") /obj/machinery/status_display/proc/set_message(m1, m2) if(m1) @@ -181,7 +218,7 @@ var/border = image(sl.icon,sl.alert_border) - overlays |= border + AddOverlays(border) /obj/machinery/status_display/proc/display_alert() remove_display() @@ -189,24 +226,24 @@ var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) var/singleton/security_level/sl = security_state.current_security_level - var/image/alert = image(sl.icon, sl.overlay_status_display) + var/image/alert = overlay_image(sl.icon, sl.overlay_status_display, plane = EFFECTS_ABOVE_LIGHTING_PLANE, layer = ABOVE_LIGHTING_LAYER) - set_light(sl.light_max_bright, sl.light_inner_range, sl.light_outer_range, 2, sl.light_color_alarm) - overlays |= alert + set_light(sl.light_range, sl.light_power, sl.light_color_alarm) + AddOverlays(alert) /obj/machinery/status_display/proc/set_picture(state) remove_display() if(!picture || picture_state != state) picture_state = state - picture = image('icons/obj/status_display.dmi', icon_state=picture_state) - overlays |= picture - set_light(0.5, 0.1, 1, 2, COLOR_WHITE) + picture = image('icons/obj/machines/status_display.dmi', icon_state=picture_state) + AddOverlays(picture) + set_light(2, 0.5, COLOR_WHITE) /obj/machinery/status_display/proc/update_display(line1, line2) var/new_text = {"
[line1]
[line2]
"} if(maptext != new_text) maptext = new_text - set_light(0.5, 0.1, 1, 2, COLOR_WHITE) + set_light(2, 0.5, COLOR_WHITE) /obj/machinery/status_display/proc/get_shuttle_timer() var/timeleft = evacuation_controller.get_eta() @@ -228,7 +265,7 @@ /obj/machinery/status_display/proc/remove_display() if(length(overlays)) - overlays.Cut() + ClearOverlays() if(maptext) maptext = "" set_light(0) diff --git a/code/game/machinery/status_display_ai.dm b/code/game/machinery/status_display_ai.dm index 2f493a537ae66..088b309817782 100644 --- a/code/game/machinery/status_display_ai.dm +++ b/code/game/machinery/status_display_ai.dm @@ -29,6 +29,7 @@ var/global/list/ai_status_emotions = list( ) /proc/get_ai_emotions(ckey) + RETURN_TYPE(/list) var/list/emotions = new for(var/emotion_name in ai_status_emotions) var/datum/ai_emotion/emotion = ai_status_emotions[emotion_name] @@ -40,7 +41,7 @@ var/global/list/ai_status_emotions = list( /proc/set_ai_status_displays(mob/user as mob) var/list/ai_emotions = get_ai_emotions(user.ckey) var/emote = input("Please, select a status!", "AI Status", null, null) in ai_emotions - for (var/obj/machinery/M in SSmachines.machinery) //change status + for (var/obj/machinery/M as anything in SSmachines.get_all_machinery()) //change status if(istype(M, /obj/machinery/ai_status_display)) var/obj/machinery/ai_status_display/AISD = M AISD.emotion = emote @@ -55,9 +56,9 @@ var/global/list/ai_status_emotions = list( SD.friendc = 0 /obj/machinery/ai_status_display - icon = 'icons/obj/status_display.dmi' + icon = 'icons/obj/machines/status_display.dmi' icon_state = "frame" - name = "AI display" + name = "\improper AI display" anchored = TRUE density = FALSE @@ -76,12 +77,12 @@ var/global/list/ai_status_emotions = list( /obj/machinery/ai_status_display/on_update_icon() if(inoperable()) - overlays.Cut() + ClearOverlays() return switch(mode) if(0) //Blank - overlays.Cut() + ClearOverlays() if(1) // AI emoticon var/datum/ai_emotion/ai_emotion = ai_status_emotions[emotion] set_picture(ai_emotion.overlay) @@ -91,5 +92,6 @@ var/global/list/ai_status_emotions = list( /obj/machinery/ai_status_display/proc/set_picture(state) picture_state = state if(length(overlays)) - overlays.Cut() - overlays += image('icons/obj/status_display.dmi', icon_state=picture_state) + ClearOverlays() + AddOverlays(overlay_image('icons/obj/machines/status_display.dmi', icon_state=picture_state, plane = EFFECTS_ABOVE_LIGHTING_PLANE, layer = ABOVE_LIGHTING_LAYER)) + set_light(0.8, 0.1, 1, l_color = "#0093ff") diff --git a/code/game/machinery/status_light.dm b/code/game/machinery/status_light.dm index 15c572d81fe6f..cf07214fdaf6a 100644 --- a/code/game/machinery/status_light.dm +++ b/code/game/machinery/status_light.dm @@ -1,7 +1,7 @@ /obj/machinery/status_light name = "combustion chamber status indicator" desc = "A status indicator for a combustion chamber, based on temperature." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/doortimer.dmi' icon_state = "doortimer-p" anchored = TRUE var/frequency = 1441 diff --git a/code/game/machinery/suit_cycler.dm b/code/game/machinery/suit_cycler.dm index dbbc828670b1e..968fbc30957b1 100644 --- a/code/game/machinery/suit_cycler.dm +++ b/code/game/machinery/suit_cycler.dm @@ -5,7 +5,7 @@ anchored = TRUE density = TRUE - icon = 'icons/obj/suitstorage.dmi' + icon = 'icons/obj/machines/suitstorage.dmi' icon_state = "close" req_access = list(access_captain, access_bridge) @@ -21,26 +21,24 @@ // Possible modifications to pick between var/list/available_modifications = list( + /singleton/item_modifier/space_suit/atmos, /singleton/item_modifier/space_suit/engineering, - /singleton/item_modifier/space_suit/mining, /singleton/item_modifier/space_suit/medical, - /singleton/item_modifier/space_suit/security, - /singleton/item_modifier/space_suit/atmos, - /singleton/item_modifier/space_suit/science, + /singleton/item_modifier/space_suit/mining, /singleton/item_modifier/space_suit/pilot, - /singleton/item_modifier/space_suit/command + /singleton/item_modifier/space_suit/science, + /singleton/item_modifier/space_suit/security ) // Extra modifications to add when emagged, duplicates won't be added var/emagged_modifications = list( + /singleton/item_modifier/space_suit/atmos, /singleton/item_modifier/space_suit/engineering, - /singleton/item_modifier/space_suit/mining, /singleton/item_modifier/space_suit/medical, - /singleton/item_modifier/space_suit/security, - /singleton/item_modifier/space_suit/atmos, - /singleton/item_modifier/space_suit/science, + /singleton/item_modifier/space_suit/mining, /singleton/item_modifier/space_suit/pilot, - /singleton/item_modifier/space_suit/command, + /singleton/item_modifier/space_suit/science, + /singleton/item_modifier/space_suit/security, /singleton/item_modifier/space_suit/mercenary/emag ) @@ -73,99 +71,109 @@ DROP_NULL(helmet) return ..() -/obj/machinery/suit_cycler/attackby(obj/item/I as obj, mob/user as mob) +/obj/machinery/suit_cycler/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(panel_open) + attack_hand(user) - if(electrified != 0) - if(shock(user, 100)) - return - - //Hacking init. - if(isMultitool(I) || isWirecutter(I)) - if(panel_open) - attack_hand(user) +/obj/machinery/suit_cycler/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - //Other interface stuff. - if(istype(I, /obj/item/grab)) - var/obj/item/grab/G = I - - if(!(ismob(G.affecting))) - return - - if(locked) - to_chat(user, SPAN_DANGER("The suit cycler is locked.")) - return - - if(length(contents) > 0) - to_chat(user, SPAN_DANGER("There is no room inside the cycler for [G.affecting.name].")) - return - - visible_message(SPAN_NOTICE("[user] starts putting [G.affecting.name] into the suit cycler."), range = 3) - - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(!G || !G.affecting) return - var/mob/M = G.affecting - if (M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - M.forceMove(src) - occupant = M - - add_fingerprint(user) - qdel(G) - - updateUsrDialog() + panel_open = !panel_open + USE_FEEDBACK_NEW_PANEL_OPEN(user, panel_open) + updateUsrDialog() - return - else if(isScrewdriver(I)) +/obj/machinery/suit_cycler/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(panel_open) + attack_hand(user) - panel_open = !panel_open - to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") - updateUsrDialog() - return - - else if(istype(I,/obj/item/clothing/head/helmet/space) && !istype(I, /obj/item/clothing/head/helmet/space/rig)) +/obj/machinery/suit_cycler/use_tool(obj/item/I, mob/living/user, list/click_params) + if(electrified != 0) + if(shock(user, 100)) + return TRUE + if (istype(I,/obj/item/clothing/head/helmet/space) && !istype(I, /obj/item/clothing/head/helmet/space/rig)) if(locked) to_chat(user, SPAN_DANGER("The suit cycler is locked.")) - return + return TRUE if(helmet) to_chat(user, SPAN_DANGER("The cycler already contains a helmet.")) - return + return TRUE if(I.icon_override == CUSTOM_ITEM_MOB) to_chat(user, "You cannot refit a customised voidsuit.") - return + return TRUE if(!user.unEquip(I, src)) - return + return TRUE to_chat(user, "You fit \the [I] into the suit cycler.") helmet = I - updateUsrDialog() - return - - else if(istype(I,/obj/item/clothing/suit/space/void)) + return TRUE + if (istype(I,/obj/item/clothing/suit/space/void)) if(locked) to_chat(user, SPAN_DANGER("The suit cycler is locked.")) - return + return TRUE if(suit) to_chat(user, SPAN_DANGER("The cycler already contains a voidsuit.")) - return + return TRUE if(I.icon_override == CUSTOM_ITEM_MOB) to_chat(user, "You cannot refit a customised voidsuit.") - return + return TRUE if(!user.unEquip(I, src)) - return + return TRUE to_chat(user, "You fit \the [I] into the suit cycler.") suit = I + updateUsrDialog() + return TRUE + + return ..() +/obj/machinery/suit_cycler/proc/move_target_inside(mob/target, mob/user) + visible_message(SPAN_NOTICE("\The [user] starts putting \the [target] into \the [src]."), range = 3) + add_fingerprint(user) + if (do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) + if (!user_can_move_target_inside(target, user)) + return + if (target.client) + target.client.perspective = EYE_PERSPECTIVE + target.client.eye = src + target.forceMove(src) + occupant = target + if (user != target) + add_fingerprint (target) + target.remove_grabs_and_pulls() updateUsrDialog() - return - ..() +/obj/machinery/suit_cycler/user_can_move_target_inside(mob/target, mob/user) + if (locked) + to_chat(user, SPAN_WARNING("\The [src] is locked.")) + return FALSE + if (suit || helmet || occupant) + to_chat(user, SPAN_WARNING("There is no room inside \the [src] for \the [target].")) + return FALSE + return ..() + +/obj/machinery/suit_cycler/use_grab(obj/item/grab/grab, list/click_params) + if (!user_can_move_target_inside(grab.affecting, grab.assailant)) + return TRUE + move_target_inside(grab.affecting, grab.assailant) + return TRUE + +/obj/machinery/suit_cycler/MouseDrop_T(mob/target, mob/user) + if (!ismob(target) || !CanMouseDrop(target, user)) + return + if (user != target) + to_chat(user, SPAN_WARNING("You need to grab \the [target] to be able to do that!")) + return + else if (user_can_move_target_inside(target, user)) + move_target_inside(target, user) + return /obj/machinery/suit_cycler/emag_act(remaining_charges, mob/user) if(emagged) @@ -279,7 +287,7 @@ locked = !locked to_chat(usr, "You [locked ? "lock" : "unlock"] [src].") else - to_chat(usr, FEEDBACK_ACCESS_DENIED) + FEEDBACK_ACCESS_DENIED(usr, src) else if(href_list["begin_decontamination"]) @@ -380,11 +388,11 @@ if(!target_species || !target_modification) return - if(helmet) helmet.refit_for_species(target_species) - if(suit) suit.refit_for_species(target_species) - target_modification.RefitItem(helmet) target_modification.RefitItem(suit) + if(helmet) helmet.refit_for_species(target_species) + if(suit) suit.refit_for_species(target_species) + if(helmet) helmet.SetName("refitted [helmet.name]") if(suit) suit.SetName("refitted [suit.name]") diff --git a/code/game/machinery/suit_cycler_units.dm b/code/game/machinery/suit_cycler_units.dm index ef7b560e51127..de48dcfb03d0b 100644 --- a/code/game/machinery/suit_cycler_units.dm +++ b/code/game/machinery/suit_cycler_units.dm @@ -1,60 +1,56 @@ /obj/machinery/suit_cycler/engineering - name = "Engineering suit cycler" + name = "engineering suit cycler" model_text = "Engineering" req_access = list(access_construction) - available_modifications = list(/singleton/item_modifier/space_suit/engineering, /singleton/item_modifier/space_suit/atmos) - species = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI) //Add Unathi when sprites exist for their suits. - -/obj/machinery/suit_cycler/engineering/alt - available_modifications = list( - /singleton/item_modifier/space_suit/engineering/alt, - /singleton/item_modifier/space_suit/atmos/alt, - /singleton/item_modifier/space_suit/hazard - ) + // [SIERRA-EDIT] - HARDSUITS - Костюмы со спрайтами Инфинити + // available_modifications = list(/singleton/item_modifier/space_suit/engineering, /singleton/item_modifier/space_suit/atmos) // SIERRA-EDIT - ORIGINAL + available_modifications = list(/singleton/item_modifier/space_suit/sierra/engineering, /singleton/item_modifier/space_suit/sierra/atmos) + // [/SIERRA-EDIT] + species = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI) /obj/machinery/suit_cycler/mining - name = "Mining suit cycler" + name = "mining suit cycler" model_text = "Mining" req_access = list(access_mining) available_modifications = list(/singleton/item_modifier/space_suit/mining) species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) - /obj/machinery/suit_cycler/salvage - name = "Salvage suit cycler" + name = "salvage suit cycler" model_text = "Salvage" available_modifications = list(/singleton/item_modifier/space_suit/salvage) species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) /obj/machinery/suit_cycler/science - name = "Excavation suit cycler" + name = "excavation suit cycler" model_text = "Excavation" req_access = list(access_xenoarch) available_modifications = list(/singleton/item_modifier/space_suit/science) species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) /obj/machinery/suit_cycler/security - name = "Security suit cycler" + name = "security suit cycler" model_text = "Security" req_access = list(access_security) - available_modifications = list(/singleton/item_modifier/space_suit/security, /singleton/item_modifier/space_suit/security/alt) + available_modifications = list(/singleton/item_modifier/space_suit/security) + // [SIERRA-EDIT] - HARDSUITS - Костюмы со спрайтами Инфинити + // available_modifications = list(/singleton/item_modifier/space_suit/security) // SIERRA-EDIT - ORIGINAL + available_modifications = list(/singleton/item_modifier/space_suit/sierra/security, /singleton/item_modifier/space_suit/sierra/security/alt) + // [/SIERRA-EDIT] species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) /obj/machinery/suit_cycler/security/alt available_modifications = list(/singleton/item_modifier/space_suit/security/alt) /obj/machinery/suit_cycler/medical - name = "Medical suit cycler" + name = "medical suit cycler" model_text = "Medical" req_access = list(access_medical) available_modifications = list(/singleton/item_modifier/space_suit/medical) species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) -/obj/machinery/suit_cycler/medical/alt - available_modifications = list(/singleton/item_modifier/space_suit/medical/alt) - /obj/machinery/suit_cycler/syndicate - name = "Nonstandard suit cycler" + name = "nonstandard suit cycler" model_text = "Nonstandard" req_access = list(access_syndicate) available_modifications = list(/singleton/item_modifier/space_suit/mercenary) @@ -62,15 +58,11 @@ can_repair = 1 /obj/machinery/suit_cycler/pilot - name = "Pilot suit cycler" + name = "pilot suit cycler" model_text = "Pilot" req_access = list(access_mining_office) - available_modifications = list(/singleton/item_modifier/space_suit/pilot) + // [SIERRA-EDIT] - HARDSUITS - Костюмы со спрайтами Инфинити + // available_modifications = list(/singleton/item_modifier/space_suit/pilot) // SIERRA-EDIT - ORIGINAL + available_modifications = list(/singleton/item_modifier/space_suit/sierra/pilot) + // [/SIERRA-EDIT] species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) - -/obj/machinery/suit_cycler/command - name = "Command suit cycler" - model_text = "Command" - req_access = list(access_bridge) - available_modifications = list(/singleton/item_modifier/space_suit/command) - species = list(SPECIES_HUMAN,SPECIES_SKRELL) diff --git a/code/game/machinery/suit_storage.dm b/code/game/machinery/suit_storage.dm index 6820a083b2e12..1f59552063118 100644 --- a/code/game/machinery/suit_storage.dm +++ b/code/game/machinery/suit_storage.dm @@ -10,31 +10,23 @@ to_chat(user, SPAN_NOTICE("You load the [I.name] into the storage compartment."));\ ##slot = I;\ update_icon();\ - SSnano.update_uis(src);\ + SStgui.update_uis(src);\ return\ } -#define dispense_clothing(item) if(!isopen){return}if(item){item.dropInto(loc); item = null} +#define dispense_clothing(item) if(item){item.dropInto(loc); item = null} /obj/machinery/suit_storage_unit - name = "Suit Storage Unit" + name = "suit storage unit" desc = "An industrial U-Stor-It Storage unit designed to accomodate all kinds of space suits. Its on-board equipment also allows the user to decontaminate the contents through a UV-ray purging cycle. There's a warning label dangling from the control pad, reading \"STRICTLY NO BIOLOGICALS IN THE CONFINES OF THE UNIT\"." - icon = 'icons/obj/suitstorage.dmi' + icon = 'icons/obj/machines/suitstorage.dmi' icon_state = "close" anchored = TRUE density = TRUE idle_power_usage = 50 active_power_usage = 200 - interact_offline = 1 req_access = list() - var/mob/living/carbon/human/occupant = null - var/obj/item/clothing/suit/space/suit = null - var/obj/item/clothing/head/helmet/space/helmet = null - var/obj/item/clothing/shoes/magboots/boots = null - var/obj/item/tank/tank = null - var/obj/item/clothing/mask/mask = null - var/isopen = FALSE var/islocked = FALSE var/isUV = FALSE @@ -42,6 +34,13 @@ var/panelopen = FALSE var/safetieson = TRUE + var/mob/living/carbon/human/occupant + var/obj/item/clothing/suit/space/suit + var/obj/item/clothing/head/helmet/space/helmet + var/obj/item/clothing/shoes/magboots/boots + var/obj/item/tank/tank + var/obj/item/clothing/mask/mask + /obj/machinery/suit_storage_unit/Initialize() . = ..() if(suit) @@ -61,29 +60,29 @@ . = ..() /obj/machinery/suit_storage_unit/on_update_icon() - overlays.Cut() + ClearOverlays() if(panelopen) - overlays += ("panel") + AddOverlays(("panel")) if(isUV) if(issuperUV) - overlays += ("super") + AddOverlays(("super")) else if(occupant) - overlays += ("uvhuman") + AddOverlays(("uvhuman")) else - overlays += ("uv") + AddOverlays(("uv")) else if(isopen) if(MACHINE_IS_BROKEN(src)) - overlays += ("broken") + AddOverlays(("broken")) else - overlays += ("open") + AddOverlays(("open")) if(suit) - overlays += ("suit") + AddOverlays(("suit")) if(helmet) - overlays += ("helm") + AddOverlays(("helm")) if(boots || tank || mask) - overlays += ("storage") + AddOverlays(("storage")) else if(occupant) - overlays += ("human") + AddOverlays(("human")) /obj/machinery/suit_storage_unit/get_req_access() if(!islocked) @@ -101,74 +100,108 @@ dump_everything() qdel(src) -/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user) - if(isScrewdriver(I)) - if(do_after(user, 5 SECONDS, src, DO_REPAIR_CONSTRUCT)) - panelopen = !panelopen - playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) - to_chat(user, SPAN_NOTICE("You [panelopen ? "open" : "close"] the unit's maintenance panel.")) - SSnano.update_uis(src) - update_icon() - return - if(isCrowbar(I)) - if(inoperable() && !islocked && !isopen) - to_chat(user, SPAN_NOTICE("You begin prying the unit open.")) - if(do_after(user, 5 SECONDS, src, DO_REPAIR_CONSTRUCT)) - isopen = TRUE - to_chat(user, SPAN_NOTICE("You pry the unit open.")) - SSnano.update_uis(src) - update_icon() - else if(islocked) - to_chat(user, SPAN_WARNING("You can't pry the unit open, it's locked!")) +/obj/machinery/suit_storage_unit/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(islocked) + to_chat(user, SPAN_WARNING("You can't pry the unit open, it's locked!")) return - if(istype(I, /obj/item/grab) ) - var/obj/item/grab/G = I - if(!(ismob(G.affecting)) ) - return - if(!isopen) - to_chat(user, SPAN_NOTICE("The unit's doors are shut.")) - return - if(inoperable()) - to_chat(user, SPAN_NOTICE("The unit is not operational.")) - return - if(occupant || helmet || suit || boots || tank || mask) - to_chat(user, SPAN_NOTICE("The unit's storage area is too cluttered.")) - return - visible_message(SPAN_WARNING("[user] starts putting [G.affecting.name] into the Suit Storage Unit.")) - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE) && G && G.affecting) - var/mob/M = G.affecting - if(M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - M.forceMove(src) - occupant = M - isopen = FALSE - add_fingerprint(user) - qdel(G) - SSnano.update_uis(src) - update_icon() + if(!inoperable() || isopen) + return + to_chat(user, SPAN_NOTICE("You begin prying the unit open.")) + if(!tool.use_as_tool(src, user, 5 SECONDS, volume = 50, skill_path = list(SKILL_CONSTRUCTION, SKILL_DEVICES), do_flags = DO_REPAIR_CONSTRUCT) || !inoperable() || isopen || islocked) return + isopen = TRUE + to_chat(user, SPAN_NOTICE("You pry the unit open.")) + SStgui.update_uis(src) + update_icon() +/obj/machinery/suit_storage_unit/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + balloon_alert(user, "[panelopen ? "закрытие панели" : "открытие панели"]") + if(!tool.use_as_tool(src, user, 5 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + panelopen = !panelopen + USE_FEEDBACK_NEW_PANEL_OPEN(user, panelopen) + SStgui.update_uis(src) + update_icon() + +/obj/machinery/suit_storage_unit/use_tool(obj/item/I, mob/living/user, list/click_params) + if ((. = ..())) + return TRY_INSERT_SUIT_PIECE(suit, clothing/suit/space) TRY_INSERT_SUIT_PIECE(helmet, clothing/head/helmet/space) TRY_INSERT_SUIT_PIECE(boots, clothing/shoes/magboots) TRY_INSERT_SUIT_PIECE(tank, tank) TRY_INSERT_SUIT_PIECE(mask, clothing/mask) update_icon() - SSnano.update_uis(src) + SStgui.update_uis(src) + return TRUE + +/obj/machinery/suit_storage_unit/proc/move_target_inside(mob/target, mob/user) + visible_message(SPAN_WARNING("\The [user] starts putting \the [target] into \the [src].")) + add_fingerprint(user) + if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) + if(!user_can_move_target_inside(target, user)) + return + if (target.client) + target.client.perspective = EYE_PERSPECTIVE + target.client.eye = src + target.forceMove(src) + occupant = target + if (user != target) + add_fingerprint (target) + isopen = FALSE + target.remove_grabs_and_pulls() + SStgui.update_uis(src) + update_icon() + +/obj/machinery/suit_storage_unit/user_can_move_target_inside(mob/target, mob/user) + if(!isopen) + to_chat(user, SPAN_NOTICE("The unit's doors are shut.")) + return FALSE + if(occupant || suit || tank || (helmet && boots && mask)) + to_chat(user, SPAN_NOTICE("The unit's storage area is too cluttered.")) + return FALSE + return ..() + +/obj/machinery/suit_storage_unit/use_grab(obj/item/grab/grab, list/click_params) + if(!user_can_move_target_inside(grab.affecting, grab.assailant)) + return TRUE + move_target_inside(grab.affecting, grab.assailant) + return TRUE + +/obj/machinery/suit_storage_unit/MouseDrop_T(mob/target, mob/user) + if(!ismob(target) || !CanMouseDrop(target, user)) + return + if(user != target) + to_chat(user, SPAN_WARNING("You need to grab \the [target] to be able to do that!")) + return + else if (user_can_move_target_inside(target, user)) + move_target_inside(target, user) + return /obj/machinery/suit_storage_unit/interface_interact(mob/user) - ui_interact(user) + tgui_interact(user) return TRUE -/obj/machinery/suit_storage_unit/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) +/obj/machinery/suit_storage_unit/tgui_state(mob/user) + return GLOB.tgui_default_state + +/obj/machinery/suit_storage_unit/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "SuitStorage", name) + ui.set_autoupdate(FALSE) + ui.open() + +/obj/machinery/suit_storage_unit/tgui_data(mob/user) var/list/data = list() - data["panelopen"] = panelopen - data["open"] = isopen + data["panel_open"] = panelopen + data["door_open"] = isopen data["locked"] = islocked data["uv"] = isUV - data["superuv"] = issuperUV + data["super_uv"] = issuperUV data["safeties"] = safetieson data["helmet"] = helmet data["suit"] = suit @@ -176,59 +209,51 @@ data["tank"] = tank data["mask"] = mask - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "suit_storage_unit.tmpl", "Suit Storage Unit", 400, 500) - ui.set_initial_data(data) - ui.open() + return data -/obj/machinery/suit_storage_unit/CanUseTopic(mob/user) - if(!user.IsAdvancedToolUser()) - return STATUS_CLOSE - return ..() +/obj/machinery/suit_storage_unit/tgui_act(action, list/params) + if(..()) + return + . = TRUE -/obj/machinery/suit_storage_unit/OnTopic(user, list/href_list, datum/topic_state/state) - if(href_list["toggleUV"]) - toggleUV(user) - return TOPIC_REFRESH - if(href_list["togglesafeties"]) - togglesafeties(user) - return TOPIC_REFRESH - if(href_list["dispense_helmet"]) - dispense_helmet() - update_icon() - return TOPIC_REFRESH - if(href_list["dispense_suit"]) - dispense_suit() - update_icon() - return TOPIC_REFRESH - if(href_list["dispense_boots"]) - dispense_boots() - update_icon() - return TOPIC_REFRESH - if(href_list["dispense_tank"]) - dispense_tank() - update_icon() - return TOPIC_REFRESH - if(href_list["dispense_mask"]) - dispense_mask() - update_icon() - return TOPIC_REFRESH - if(href_list["toggle_open"]) - toggle_open(user) - update_icon() - return TOPIC_REFRESH - if(href_list["toggle_lock"]) - toggle_lock(user) - return TOPIC_REFRESH - if(href_list["start_UV"]) - start_UV(user) - update_icon() - return TOPIC_REFRESH - if(href_list["eject_guy"]) - eject_occupant(user) - update_icon() - return TOPIC_REFRESH + switch(action) + if("dispense_helmet") + dispense_helmet() + update_icon() + return TRUE + if("dispense_suit") + dispense_suit() + update_icon() + return TRUE + if("dispense_boots") + dispense_boots() + update_icon() + return TRUE + if("dispense_tank") + dispense_tank() + update_icon() + return TRUE + if("dispense_mask") + dispense_mask() + update_icon() + return TRUE + if("toggle_open") + toggle_open(usr) + update_icon() + return TRUE + if("toggle_lock") + toggle_lock(usr) + return TRUE + if("start_UV") + start_UV(usr) + update_icon() + return TRUE + if("toggleUV") + issuperUV = !issuperUV + return TRUE + if("togglesafeties") + safetieson = !safetieson + return TRUE /obj/machinery/suit_storage_unit/proc/dispense_helmet() dispense_clothing(helmet) @@ -258,39 +283,15 @@ if(occupant) eject_occupant(occupant) -/obj/machinery/suit_storage_unit/proc/toggleUV(mob/user) - if(!panelopen) - return - else - issuperUV = !issuperUV - to_chat(user, issuperUV ? SPAN_WARNING("You crank the dial all the way up to \"15nm\".") : SPAN_NOTICE("You slide the dial back towards \"185nm\".")) - -/obj/machinery/suit_storage_unit/proc/togglesafeties(mob/user) - if(!panelopen) - return - else - safetieson = !safetieson - to_chat(user, SPAN_NOTICE("You push the button. The coloured LED next to it [safetieson ? "turns green" : "turns red"].")) - /obj/machinery/suit_storage_unit/proc/toggle_open(mob/user) - if(!is_powered()) - to_chat(user, SPAN_NOTICE("The unit is offline.")) - return - if(islocked || isUV) - to_chat(user, SPAN_NOTICE("Unable to open unit.")) - return if(occupant) eject_occupant(user) - return // eject_occupant opens the door, so we need to return isopen = !isopen playsound(src, 'sound/machines/suitstorage_cycledoor.ogg', 50, 0) /obj/machinery/suit_storage_unit/proc/toggle_lock(mob/user) - if(!is_powered()) - to_chat(user, SPAN_NOTICE("The unit is offline.")) - return if(!allowed(user)) - to_chat(user, FEEDBACK_ACCESS_DENIED) + FEEDBACK_ACCESS_DENIED(user, src) return if(occupant && safetieson) to_chat(user, SPAN_WARNING("The Unit's safety protocols disallow locking when a biological form is detected inside its compartments.")) @@ -301,11 +302,6 @@ playsound(src, 'sound/machines/suitstorage_lockdoor.ogg', 50, 0) /obj/machinery/suit_storage_unit/proc/start_UV(mob/user) - if(isUV || isopen) - return - if(!is_powered()) - to_chat(user, SPAN_NOTICE("The unit is offline.")) - return if(occupant && safetieson) to_chat(user, SPAN_WARNING("Biological entity detected in the confines of the Unit's storage. Cannot initiate cycle.")) return @@ -318,32 +314,34 @@ isUV = TRUE update_use_power(POWER_USE_ACTIVE) update_icon() - SSnano.update_uis(src) + SStgui.update_uis(src) - var/datum/callback/uvburn = new Callback(src, .proc/uv_burn) + var/datum/callback/uvburn = CALLBACK(src, PROC_REF(uv_burn)) addtimer(uvburn, 5 SECONDS) addtimer(uvburn, 10 SECONDS) addtimer(uvburn, 15 SECONDS) - addtimer(new Callback(src, .proc/uv_finish), 20 SECONDS) + addtimer(CALLBACK(src, PROC_REF(uv_finish)), 20 SECONDS) /obj/machinery/suit_storage_unit/proc/uv_burn() - if(occupant) - occupant.apply_damage(50, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) - var/obj/item/organ/internal/diona/nutrients/rad_organ = locate() in occupant.internal_organs - if(!rad_organ) - if(occupant.can_feel_pain()) - occupant.emote("scream") - if(issuperUV) - var/burndamage = rand(40,60) - occupant.take_organ_damage(0,burndamage) - else - var/burndamage = rand(10,15) - occupant.take_organ_damage(0,burndamage) + if(!occupant) + return + occupant.apply_damage(50, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) + var/obj/item/organ/internal/diona/nutrients/rad_organ = locate() in occupant.internal_organs + if(rad_organ) + return + if(occupant.can_feel_pain()) + occupant.emote("scream") + if(issuperUV) + var/burndamage = rand(40,60) + occupant.take_organ_damage(0,burndamage) + else + var/burndamage = rand(10,15) + occupant.take_organ_damage(0,burndamage) /obj/machinery/suit_storage_unit/proc/uv_finish() isUV = FALSE if(issuperUV) - if(helmet ) + if(helmet) helmet = null if(suit) suit = null @@ -356,10 +354,10 @@ visible_message(SPAN_WARNING("With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber.")) set_broken(TRUE) isopen = TRUE - islocked = FALSE // - eject_occupant(occupant) // Mixing up these two lines causes bug. DO NOT DO IT. + islocked = FALSE + eject_occupant(occupant) else - if(helmet ) + if(helmet) helmet.clean_blood() if(suit) suit.clean_blood() @@ -371,15 +369,9 @@ mask.clean_blood() update_use_power(POWER_USE_IDLE) update_icon() - SSnano.update_uis(src) + SStgui.update_uis(src) /obj/machinery/suit_storage_unit/proc/eject_occupant(mob/user) - if(islocked) - return - if(!occupant) - return - if(!isopen) - isopen = TRUE visible_message(SPAN_NOTICE("The suit storage unit spits out [occupant].")) occupant.reset_view() occupant.dropInto(loc) @@ -391,11 +383,11 @@ set category = "Object" set src in oview(1) - if (usr.incapacitated()) + if(usr.incapacitated()) return eject_occupant(usr) add_fingerprint(usr) - SSnano.update_uis(src) + SStgui.update_uis(src) update_icon() /obj/machinery/suit_storage_unit/verb/move_inside() @@ -403,15 +395,15 @@ set category = "Object" set src in oview(1) - if (usr.incapacitated()) + if(usr.incapacitated()) return - if (!isopen) + if(!isopen) to_chat(usr, SPAN_NOTICE("The unit's doors are shut.")) return - if (inoperable()) + if(inoperable()) to_chat(usr, SPAN_NOTICE("The unit is not operational.")) return - if ( (occupant) || (helmet ) || (suit) ) + if((occupant) || (helmet) || (suit)) to_chat(usr, SPAN_WARNING("It's too cluttered inside for you to fit in!")) return visible_message(SPAN_NOTICE("\The [usr] starts squeezing into the suit storage unit!")) @@ -423,7 +415,7 @@ isopen = FALSE update_icon() add_fingerprint(usr) - SSnano.update_uis(src) + SStgui.update_uis(src) #undef TRY_INSERT_SUIT_PIECE #undef dispense_clothing diff --git a/code/game/machinery/suit_storage_units.dm b/code/game/machinery/suit_storage_units.dm index 8e68dea5d6d6d..ea13c75a18f2a 100644 --- a/code/game/machinery/suit_storage_units.dm +++ b/code/game/machinery/suit_storage_units.dm @@ -6,7 +6,7 @@ req_access = list(access_eva) /obj/machinery/suit_storage_unit/atmos - name = "Atmospherics Voidsuit Storage Unit" + name = "atmospherics voidsuit storage unit" suit= /obj/item/clothing/suit/space/void/atmos helmet = /obj/item/clothing/head/helmet/space/void/atmos boots = /obj/item/clothing/shoes/magboots @@ -20,7 +20,7 @@ helmet = /obj/item/clothing/head/helmet/space/void/atmos/alt /obj/machinery/suit_storage_unit/engineering - name = "Engineering Voidsuit Storage Unit" + name = "engineering voidsuit storage unit" suit= /obj/item/clothing/suit/space/void/engineering helmet = /obj/item/clothing/head/helmet/space/void/engineering boots = /obj/item/clothing/shoes/magboots @@ -44,7 +44,7 @@ mask = /obj/item/clothing/mask/breath /obj/machinery/suit_storage_unit/medical - name = "Medical Voidsuit Storage Unit" + name = "medical voidsuit storage unit" suit= /obj/item/clothing/suit/space/void/medical helmet = /obj/item/clothing/head/helmet/space/void/medical boots = /obj/item/clothing/shoes/magboots @@ -59,7 +59,7 @@ mask = /obj/item/clothing/mask/breath /obj/machinery/suit_storage_unit/mining - name = "Mining Voidsuit Storage Unit" + name = "mining voidsuit storage unit" suit= /obj/item/clothing/suit/space/void/mining helmet = /obj/item/clothing/head/helmet/space/void/mining boots = /obj/item/clothing/shoes/magboots @@ -74,7 +74,7 @@ mask = /obj/item/clothing/mask/breath /obj/machinery/suit_storage_unit/science - name = "Excavation Voidsuit Storage Unit" + name = "excavation voidsuit storage unit" suit= /obj/item/clothing/suit/space/void/excavation helmet = /obj/item/clothing/head/helmet/space/void/excavation boots = /obj/item/clothing/shoes/magboots @@ -84,7 +84,7 @@ islocked = 1 /obj/machinery/suit_storage_unit/security - name = "Security Voidsuit Storage Unit" + name = "security voidsuit storage unit" suit= /obj/item/clothing/suit/space/void/security helmet = /obj/item/clothing/head/helmet/space/void/security boots = /obj/item/clothing/shoes/magboots @@ -99,7 +99,7 @@ mask = /obj/item/clothing/mask/breath /obj/machinery/suit_storage_unit/merc - name = "Nonstandard Voidsuit Storage Unit" + name = "nonstandard voidsuit storage unit" suit= /obj/item/clothing/suit/space/void/merc helmet = /obj/item/clothing/head/helmet/space/void/merc boots = /obj/item/clothing/shoes/magboots @@ -109,7 +109,7 @@ islocked = 1 /obj/machinery/suit_storage_unit/retro - name = "Retro Voidsuit Storage Unit" + name = "retro voidsuit storage unit" suit= /obj/item/clothing/suit/space/void/retro helmet = /obj/item/clothing/head/helmet/space/void/retro boots = /obj/item/clothing/shoes/magboots diff --git a/code/game/machinery/supplybeacon.dm b/code/game/machinery/supplybeacon.dm index e9f6feee3b707..3a3840a86db4d 100644 --- a/code/game/machinery/supplybeacon.dm +++ b/code/game/machinery/supplybeacon.dm @@ -1,7 +1,7 @@ // Used to deploy the bacon. /obj/item/supply_beacon name = "inactive supply beacon" - icon = 'icons/obj/supplybeacon.dmi' + icon = 'icons/obj/machines/supplybeacon.dmi' desc = "An inactive, hacked supply beacon stamped with the Nyx Rapid Fabrication logo. Good for one (1) ballistic supply pod shipment." icon_state = "beacon" var/deploy_path = /obj/machinery/power/supply_beacon @@ -12,19 +12,19 @@ deploy_path = /obj/machinery/power/supply_beacon/supermatter /obj/item/supply_beacon/attack_self(mob/user) - user.visible_message(SPAN_NOTICE("\The [user] begins setting up \the [src].")) + user.visible_message(SPAN_NOTICE("[user] begins setting up [src].")) if(!do_after(user, deploy_time, src, DO_PUBLIC_UNIQUE)) return if(!user.unEquip(src)) return var/obj/S = new deploy_path(get_turf(user)) - user.visible_message(SPAN_NOTICE("\The [user] deploys \the [S].")) + user.visible_message(SPAN_NOTICE("[user] deploys [S].")) qdel(src) /obj/machinery/power/supply_beacon name = "supply beacon" desc = "A bulky moonshot supply beacon. Someone has been messing with the wiring." - icon = 'icons/obj/supplybeacon.dmi' + icon = 'icons/obj/machines/supplybeacon.dmi' icon_state = "beacon" anchored = FALSE @@ -43,21 +43,22 @@ name = "supermatter supply beacon" drop_type = "supermatter" -/obj/machinery/power/supply_beacon/attackby(obj/item/W, mob/user) - if(!use_power && isWrench(W)) - if(!anchored && !connect_to_network()) - to_chat(user, SPAN_WARNING("This device must be placed over an exposed cable.")) - return - anchored = !anchored - user.visible_message(SPAN_NOTICE("\The [user] [anchored ? "secures" : "unsecures"] \the [src].")) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) +/obj/machinery/power/supply_beacon/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(use_power) + return + if(!anchored && !connect_to_network()) + to_chat(user, SPAN_WARNING("This device must be placed over an exposed cable.")) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - return ..() + anchored = !anchored + user.visible_message(SPAN_NOTICE("[user] [anchored ? "secures" : "unsecures"] [src].")) /obj/machinery/power/supply_beacon/physical_attack_hand(mob/user) if(expended) update_use_power(POWER_USE_OFF) - to_chat(user, SPAN_WARNING("\The [src] has used up its charge.")) + to_chat(user, SPAN_WARNING("[src] has used up its charge.")) return TRUE if(anchored) @@ -76,7 +77,7 @@ if(surplus() < 500) if(user) to_chat(user, SPAN_NOTICE("The connected wire doesn't have enough current.")) return - set_light(1, 0.5, 2, 2, "#00ccaa") + set_light(3, 3, "#00ccaa") icon_state = "beacon_active" update_use_power(POWER_USE_IDLE) admin_attacker_log(user, "has activated \a [src] at [get_area(src)]") diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 5515b3d577dde..d30e11d1c9f1f 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -9,7 +9,7 @@ /obj/machinery/syndicate_beacon name = "ominous beacon" desc = "This looks suspicious..." - icon = 'icons/obj/syndicate_beacon.dmi' + icon = 'icons/obj/structures/syndicate_beacon.dmi' icon_state = "syndbeacon" anchored = TRUE @@ -83,7 +83,7 @@ /obj/machinery/power/singularity_beacon name = "ominous beacon" desc = "This looks suspicious..." - icon = 'icons/obj/singularity.dmi' + icon = 'icons/obj/machines/power/singularity.dmi' icon_state = "beacon" anchored = FALSE @@ -128,27 +128,25 @@ else to_chat(user, SPAN_DANGER("You need to screw the beacon to the floor first!")) -/obj/machinery/power/singularity_beacon/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W)) - if(active) - to_chat(user, SPAN_DANGER("You need to deactivate the beacon first!")) - return - - if(anchored) - anchored = FALSE - to_chat(user, SPAN_NOTICE("You unscrew the beacon from the floor.")) - disconnect_from_network() - return - else - if(!connect_to_network()) - to_chat(user, "This device must be placed over an exposed cable.") - return - anchored = TRUE - to_chat(user, SPAN_NOTICE("You screw the beacon to the floor and attach the cable.")) +/obj/machinery/power/singularity_beacon/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(active) + USE_FEEDBACK_NEED_DISABLED(user) + return + if(anchored) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - ..() - return - + anchored = FALSE + USE_FEEDBACK_NEW_ANCHOR_FINISH(user, anchored) + disconnect_from_network() + return + if(!connect_to_network()) + balloon_alert(user, "нужно установить над кабелем!") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + anchored = TRUE + USE_FEEDBACK_NEW_ANCHOR_FINISH(user, anchored) /obj/machinery/power/singularity_beacon/Destroy() if(active) diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 0ff360be86d6d..1cbbbec57f4c9 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -11,8 +11,8 @@ var/global/list/recentmessages = list() // global list of recent messages broadc var/global/message_delay = 0 // To make sure restarting the recentmessages list is kept in sync /obj/machinery/telecomms/broadcaster - name = "Subspace Broadcaster" - icon = 'icons/obj/stationobjs.dmi' + name = "subspace broadcaster" + icon = 'icons/obj/machines/telecomms.dmi' icon_state = "broadcaster" desc = "A dish-shaped machine used to broadcast processed subspace signals." density = TRUE @@ -114,8 +114,8 @@ var/global/message_delay = 0 // To make sure restarting the recentmessages list */ /obj/machinery/telecomms/allinone - name = "Telecommunications Mainframe" - icon = 'icons/obj/stationobjs.dmi' + name = "telecommunications mainframe" + icon = 'icons/obj/machines/telecomms.dmi' icon_state = "comm_server" desc = "A compact machine used for portable subspace telecommuniations processing." density = TRUE @@ -274,13 +274,13 @@ var/global/message_delay = 0 // To make sure restarting the recentmessages list **/ /proc/Broadcast_Message(datum/radio_frequency/connection, mob/M, - var/vmask, var/vmessage, var/obj/item/device/radio/radio, - var/message, var/name, var/job, var/realname, var/vname, - var/data, var/compression, var/list/level, var/freq, var/verbage = "says", var/datum/language/speaking = null, - var/channel_tag, var/channel_color) + vmask, vmessage, obj/item/device/radio/radio, + message, name, job, realname, vname, + data, compression, list/level, freq, verbage = "says", datum/language/speaking = null, + channel_tag, channel_color) - /* ###### Prepare the radio connection ###### */ +/* ###### Prepare the radio connection ###### */ var/display_freq = freq @@ -330,9 +330,9 @@ var/global/message_delay = 0 // To make sure restarting the recentmessages list // Get a list of mobs who can hear from the radios we collected. var/list/receive = get_mobs_in_radio_ranges(radios) - /* ###### Organize the receivers into categories for displaying the message ###### */ +/* ###### Organize the receivers into categories for displaying the message ###### */ - // Understood the message: + // Understood the message: var/list/heard_masked = list() // masked name or no real name var/list/heard_normal = list() // normal message @@ -380,7 +380,7 @@ var/global/message_delay = 0 // To make sure restarting the recentmessages list heard_garbled += R - /* ###### Begin formatting and sending the message ###### */ +/* ###### Begin formatting and sending the message ###### */ if (length(heard_masked) || length(heard_normal) || length(heard_voice) || length(heard_garbled) || length(heard_gibberish)) /* --- Some miscellaneous variables to format the string output --- */ @@ -402,7 +402,7 @@ var/global/message_delay = 0 // To make sure restarting the recentmessages list var/part_c = "" - /* ###### Send the message ###### */ + /* ###### Send the message ###### */ /* --- Process all the mobs that heard a masked voice (understood) --- */ @@ -440,7 +440,7 @@ var/global/message_delay = 0 // To make sure restarting the recentmessages list /proc/Broadcast_SimpleMessage(source, frequency, text, data, mob/M, compression, level, channel_tag, channel_color) - /* ###### Prepare the radio connection ###### */ +/* ###### Prepare the radio connection ###### */ if(!M) var/mob/living/carbon/human/H = new @@ -494,7 +494,7 @@ var/global/message_delay = 0 // To make sure restarting the recentmessages list receive |= R.send_hear(display_freq) - /* ###### Organize the receivers into categories for displaying the message ###### */ +/* ###### Organize the receivers into categories for displaying the message ###### */ // Understood the message: var/list/heard_normal = list() // normal message @@ -526,7 +526,7 @@ var/global/message_delay = 0 // To make sure restarting the recentmessages list heard_garbled += R - /* ###### Begin formatting and sending the message ###### */ +/* ###### Begin formatting and sending the message ###### */ if (length(heard_normal) || length(heard_garbled) || length(heard_gibberish)) /* --- Some miscellaneous variables to format the string output --- */ @@ -550,7 +550,7 @@ var/global/message_delay = 0 // To make sure restarting the recentmessages list //End of research and feedback code. - /* ###### Send the message ###### */ + /* ###### Send the message ###### */ /* --- Process all the mobs that heard the voice normally (understood) --- */ @@ -607,7 +607,7 @@ var/global/message_delay = 0 // To make sure restarting the recentmessages list ) signal.frequency = PUB_FREQ// Common channel - //#### Sending the signal to all subspace receivers ####// +//#### Sending the signal to all subspace receivers ####// for(var/obj/machinery/telecomms/receiver/R in telecomms_list) R.receive_signal(signal) diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index 3d0f0b125a389..d919fca05075e 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -4,7 +4,7 @@ icon_keyboard = "tech_key" /obj/machinery/computer/telecomms/server - name = "Telecommunications Server Monitor" + name = "telecommunications server monitor" icon_screen = "comm_logs" machine_name = "telecommunications server monitor console" machine_desc = "A terminal used to view and browse the logs of a telecommunications network." @@ -194,6 +194,6 @@ playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) emagged = TRUE req_access.Cut() - to_chat(user, SPAN_NOTICE("You you disable the security protocols")) + to_chat(user, SPAN_NOTICE("You disable the security protocols")) src.updateUsrDialog() return 1 diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index c6f71cc1ceed6..31d2c8c91261f 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -17,25 +17,23 @@ stat_immune = 0 maximum_component_parts = list(/obj/item/stock_parts = 15) -/obj/machinery/telecomms/attackby(obj/item/P as obj, mob/user as mob) - - // Using a multitool lets you access the receiver's interface - if(isMultitool(P)) - interface_interact(user) - return TRUE +/obj/machinery/telecomms/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + interface_interact(user) +/obj/machinery/telecomms/use_tool(obj/item/P, mob/living/user, list/click_params) // REPAIRING: Use Nanopaste to repair 10-20 integrity points. if(istype(P, /obj/item/stack/nanopaste)) var/obj/item/stack/nanopaste/T = P - if (integrity < 100) //Damaged, let's repair! + if (integrity < 100) if (T.use(1)) integrity = clamp(integrity + rand(10, 20), 0, 100) to_chat(usr, "You apply the Nanopaste to [src], repairing some of the damage.") else to_chat(usr, "This machine is already in perfect condition.") - return + return TRUE - return component_attackby(P, user) + return ..() /obj/machinery/telecomms/cannot_transition_to(state_path, mob/user) . = ..() diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index 43b4a0ae87ca7..a6835178087f2 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -26,11 +26,11 @@ "supply", "service", "common", "command", "engineering", "security", "receiverA", "broadcasterA") /obj/machinery/telecomms/hub/preset_cent - id = "CentComm Hub" + id = "CentCom Hub" network = "tcommsat" produces_heat = 0 autolinkers = list("hub_cent", "c_relay", "s_relay", "m_relay", "r_relay", - "centcomm", "receiverCent", "broadcasterCent") + "centcom", "receiverCent", "broadcasterCent") //Receivers @@ -64,7 +64,7 @@ ..() /obj/machinery/telecomms/receiver/preset_cent - id = "CentComm Receiver" + id = "CentCom Receiver" network = "tcommsat" produces_heat = 0 autolinkers = list("receiverCent") @@ -123,11 +123,11 @@ ..() /obj/machinery/telecomms/bus/preset_cent - id = "CentComm Bus" + id = "CentCom Bus" network = "tcommsat" freq_listening = list(ERT_FREQ, DTH_FREQ, ENT_FREQ) produces_heat = 0 - autolinkers = list("processorCent", "centcomm") + autolinkers = list("processorCent", "centcom") //Processors @@ -165,7 +165,7 @@ autolinkers = list("processor4") /obj/machinery/telecomms/processor/preset_cent - id = "CentComm Processor" + id = "CentCom Processor" network = "tcommsat" produces_heat = 0 autolinkers = list("processorCent") @@ -265,12 +265,12 @@ channel_tags = list(list(SEC_FREQ, "Security", COMMS_COLOR_SECURITY)) autolinkers = list("security") -/obj/machinery/telecomms/server/presets/centcomm - id = "CentComm Server" +/obj/machinery/telecomms/server/presets/centcom + id = "CentCom Server" freq_listening = list(ERT_FREQ, DTH_FREQ) - channel_tags = list(list(ERT_FREQ, "Response Team", COMMS_COLOR_CENTCOMM), list(DTH_FREQ, "Special Ops", COMMS_COLOR_SYNDICATE)) + channel_tags = list(list(ERT_FREQ, "Response Team", COMMS_COLOR_CENTCOM), list(DTH_FREQ, "Special Ops", COMMS_COLOR_SYNDICATE)) produces_heat = 0 - autolinkers = list("centcomm") + autolinkers = list("centcom") //Broadcasters @@ -296,7 +296,7 @@ autolinkers = list("broadcasterA") /obj/machinery/telecomms/broadcaster/preset_cent - id = "CentComm Broadcaster" + id = "CentCom Broadcaster" network = "tcommsat" produces_heat = 0 autolinkers = list("broadcasterCent") diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 0786caa96112e..e1541cd43bd2a 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -123,7 +123,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() ..() return INITIALIZE_HINT_LATELOAD -/obj/machinery/telecomms/LateInitialize() +/obj/machinery/telecomms/LateInitialize(mapload) //Set the listening_levels if there's none. if(!listening_levels) //Defaults to our Z level! @@ -138,8 +138,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() else for(var/obj/machinery/telecomms/T in telecomms_list) add_link(T) - . = ..() update_power() + update_icon() /obj/machinery/telecomms/Destroy() telecomms_list -= src @@ -159,10 +159,14 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() links |= T /obj/machinery/telecomms/on_update_icon() + ClearOverlays() + + if(panel_open) + AddOverlays("[icon_state]_panel") + if(on && !overloaded_for) - icon_state = initial(icon_state) - else - icon_state = "[initial(icon_state)]_off" + AddOverlays("[icon_state]_lights_working") + AddOverlays(emissive_appearance(icon, "[icon_state]_lights_working")) /obj/machinery/telecomms/Move() . = ..() @@ -263,8 +267,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() */ /obj/machinery/telecomms/receiver - name = "Subspace Receiver" - icon = 'icons/obj/stationobjs.dmi' + name = "subspace receiver" + icon = 'icons/obj/machines/telecomms.dmi' icon_state = "broadcast receiver" desc = "This machine has a dish-like shape and green lights. It is designed to detect and process subspace radio activity." density = TRUE @@ -316,8 +320,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() */ /obj/machinery/telecomms/hub - name = "Telecommunication Hub" - icon = 'icons/obj/stationobjs.dmi' + name = "telecommunication hub" + icon = 'icons/obj/machines/telecomms.dmi' icon_state = "hub" desc = "A mighty piece of hardware used to send/receive massive amounts of data." density = TRUE @@ -351,8 +355,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() */ /obj/machinery/telecomms/bus - name = "Bus Mainframe" - icon = 'icons/obj/stationobjs.dmi' + name = "bus mainframe" + icon = 'icons/obj/machines/telecomms.dmi' icon_state = "bus" desc = "A mighty piece of hardware used to send massive amounts of data quickly." density = TRUE @@ -405,8 +409,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() */ /obj/machinery/telecomms/processor - name = "Processor Unit" - icon = 'icons/obj/stationobjs.dmi' + name = "processor unit" + icon = 'icons/obj/machines/telecomms.dmi' icon_state = "processor" desc = "This machine is used to process large quantities of information." density = TRUE @@ -445,8 +449,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() /obj/machinery/telecomms/server - name = "Telecommunication Server" - icon = 'icons/obj/stationobjs.dmi' + name = "telecommunication server" + icon = 'icons/obj/machines/telecomms.dmi' icon_state = "comm_server" desc = "A machine used to store data and network statistics." density = TRUE diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm index 0f0399ba168c8..8b7543e064807 100644 --- a/code/game/machinery/telecomms/telemonitor.dm +++ b/code/game/machinery/telecomms/telemonitor.dm @@ -8,7 +8,7 @@ /obj/machinery/computer/telecomms/monitor - name = "Telecommunications Monitor" + name = "telecommunications monitor" icon_screen = "comm_monitor" machine_name = "telecomms monitor console" machine_desc = "Tracks the traffic of a telecommunications network, and maintains information about connected machines." @@ -129,6 +129,6 @@ playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) emagged = TRUE req_access.Cut() - to_chat(user, SPAN_NOTICE("You you disable the security protocols")) + to_chat(user, SPAN_NOTICE("You disable the security protocols")) src.updateUsrDialog() return 1 diff --git a/code/game/machinery/teleporter/beacon.dm b/code/game/machinery/teleporter/beacon.dm index 4312a318a0ab0..dcdba7d531301 100644 --- a/code/game/machinery/teleporter/beacon.dm +++ b/code/game/machinery/teleporter/beacon.dm @@ -7,12 +7,13 @@ var/global/const/TELEBEACON_WIRE_SIGNALLER = 4 /obj/machinery/tele_beacon name = "teleporter beacon" desc = "A beacon used by a teleporter." - icon = 'icons/obj/teleporter.dmi' + icon = 'icons/obj/machines/teleporter.dmi' icon_state = "beacon" idle_power_usage = 10 active_power_usage = 50 anchored = TRUE level = ATOM_LEVEL_UNDER_TILE + obj_flags = OBJ_FLAG_ANCHORABLE machine_name = "teleporter beacon" machine_desc = "Teleporter beacons allow teleporter systems to target them, for accurate, instantaneous transport of objects and people." @@ -43,64 +44,43 @@ var/global/const/TELEBEACON_WIRE_SIGNALLER = 4 disconnect_computers() . = ..() +/obj/machinery/tele_beacon/can_anchor(obj/item/tool, mob/user, silent) + var/turf/T = get_turf(src) + if (!T.is_plating()) + to_chat(user, SPAN_WARNING("You cannot anchor \the [src] to \the [T]. You must connect it to the underplating.")) + return FALSE + return ..() -/obj/machinery/tele_beacon/attackby(obj/item/I, mob/user) - if (!panel_open) - if (isWrench(I)) - var/turf/T = get_turf(src) - if (is_space_turf(T) || istype(T, /turf/simulated/open)) - to_chat(user, SPAN_WARNING("You cannot anchor \the [src] to \the [T]. It requires solid plating.")) - return FALSE - if (!T.is_plating()) - to_chat(user, SPAN_WARNING("You cannot anchor \the [src] to \the [T]. You must connect it to the underplating.")) - return FALSE - - user.visible_message( - SPAN_NOTICE("\The [user] starts to [anchored ? "disconnect" : "connect"] \the [src] [anchored ? "to" : "from"] \the [T]."), - SPAN_NOTICE("You start to [anchored ? "disconnect" : "connect"] \the [src] [anchored ? "to" : "from"] \the [T].") - ) - - if (!do_after(user, 3 SECONDS, src, DO_REPAIR_CONSTRUCT)) - return TRUE - - anchored = !anchored - level = anchored ? ATOM_LEVEL_UNDER_TILE : ATOM_LEVEL_OVER_TILE - user.visible_message( - SPAN_NOTICE("\The [user] [anchored ? "connects" : "disconnects"] \the [src] [anchored ? "to" : "from"] \the [T] with \the [I]."), - SPAN_NOTICE("You [anchored ? "connect" : "disconnect"] \the [src] [anchored ? "to" : "from"] \the [T] with \the [I].") - ) - playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) - update_icon() - update_use_power(anchored ? POWER_USE_IDLE : POWER_USE_OFF) - if (!anchored) - disconnect_computers() - else - generate_name() - - return TRUE - - if (isMultitool(I)) - var/new_name = input(user, "What label would you like to set this beacon to? Leave empty to enable automatic naming based on area.", "Set Beacon Label", beacon_name) as text|null - if (QDELETED(src)) - return TRUE - if (new_name == null) - autoset_name = TRUE - generate_name() - user.visible_message( - SPAN_NOTICE("\The [user] reconfigures \the [src] with \the [I]."), - SPAN_NOTICE("You enable \the [src]'s automatic labeling with \the [I].") - ) - else - beacon_name = new_name - autoset_name = FALSE - user.visible_message( - SPAN_NOTICE("\The [user] reconfigures \the [src] with \the [I]."), - SPAN_NOTICE("You reconfigure \the [src]'s relay label to \"[beacon_name]\" with \the [I].") - ) - return TRUE +/obj/machinery/tele_beacon/post_anchor_change() + if (!anchored) + disconnect_computers() + else + generate_name() - . = ..() + level = anchored ? ATOM_LEVEL_UNDER_TILE : ATOM_LEVEL_OVER_TILE + ..() +/obj/machinery/tele_beacon/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(panel_open) + return + var/new_name = input(user, "What label would you like to set this beacon to? Leave empty to enable automatic naming based on area.", "Set Beacon Label", beacon_name) as text|null + if (QDELETED(src)) + return + if (isnull(new_name)) + autoset_name = TRUE + generate_name() + user.visible_message( + SPAN_NOTICE("\The [user] reconfigures \the [src] with \the [tool]."), + SPAN_NOTICE("You enable \the [src]'s automatic labeling with \the [tool].") + ) + else + beacon_name = new_name + autoset_name = FALSE + user.visible_message( + SPAN_NOTICE("\The [user] reconfigures \the [src] with \the [tool]."), + SPAN_NOTICE("You reconfigure \the [src]'s relay label to \"[beacon_name]\" with \the [tool].") + ) /obj/machinery/tele_beacon/emp_act(severity) ..() @@ -109,7 +89,7 @@ var/global/const/TELEBEACON_WIRE_SIGNALLER = 4 set_stat(MACHINE_STAT_EMPED, TRUE) disconnect_computers() var/emp_time = rand(15 SECONDS, 30 SECONDS) / severity - addtimer(new Callback(src, .proc/emp_act_end), emp_time, TIMER_UNIQUE | TIMER_OVERRIDE) + addtimer(CALLBACK(src, PROC_REF(emp_act_end)), emp_time, TIMER_UNIQUE | TIMER_OVERRIDE) /obj/machinery/tele_beacon/proc/emp_act_end() @@ -121,19 +101,19 @@ var/global/const/TELEBEACON_WIRE_SIGNALLER = 4 . = ..() if (!anchored) - to_chat(user, SPAN_WARNING("It is disconnected from \the [get_turf(src)].")) + . += SPAN_WARNING("It is disconnected from [get_turf(src)].") return if (!functioning()) if (user.skill_check(SKILL_DEVICES, SKILL_BASIC)) - to_chat(user, SPAN_WARNING("It appears to be offline or disabled.")) + . += SPAN_WARNING("It appears to be offline or disabled.") return - if (user.skill_check(SKILL_DEVICES, SKILL_ADEPT)) + if (user.skill_check(SKILL_DEVICES, SKILL_TRAINED)) if (wires.IsIndexCut(TELEBEACON_WIRE_SIGNALLER)) - to_chat(user, SPAN_WARNING("The signal lights appear to be disabled.")) + . += SPAN_WARNING("The signal lights appear to be disabled.") else if (LAZYLEN(connected_computers)) - to_chat(user, SPAN_WARNING("The signal lights indicate it has an active teleporter connection.")) + . += SPAN_WARNING("The signal lights indicate it has an active teleporter connection.") /obj/machinery/tele_beacon/power_change() @@ -275,9 +255,9 @@ var/global/const/TELEBEACON_WIRE_SIGNALLER = 4 wire_count = 3 window_y = 500 descriptions = list( - new /datum/wire_description(TELEBEACON_WIRE_POWER, "This wire is connected to the power supply unit.", SKILL_EXPERT), - new /datum/wire_description(TELEBEACON_WIRE_RELAY, "This wire is connected to the remote relay device.", SKILL_PROF), - new /datum/wire_description(TELEBEACON_WIRE_SIGNALLER, "This wire is connected to a speaker and several indicator lights.", SKILL_EXPERT) + new /datum/wire_description(TELEBEACON_WIRE_POWER, "This wire is connected to the power supply unit.", SKILL_EXPERIENCED), + new /datum/wire_description(TELEBEACON_WIRE_RELAY, "This wire is connected to the remote relay device.", SKILL_MASTER), + new /datum/wire_description(TELEBEACON_WIRE_SIGNALLER, "This wire is connected to a speaker and several indicator lights.", SKILL_EXPERIENCED) ) @@ -296,7 +276,7 @@ var/global/const/TELEBEACON_WIRE_SIGNALLER = 4 . += "
  • The panel seems to be completely unpowered or disabled.
  • " else . += "
  • The panel is powered.
  • " - if (user.skill_check(SKILL_ELECTRICAL, SKILL_ADEPT)) + if (user.skill_check(SKILL_ELECTRICAL, SKILL_TRAINED)) . += "
  • The remote relay chip is [IsIndexCut(TELEBEACON_WIRE_RELAY) ? "disconnected" : "connected"].
  • " . += "
  • The connection signaller circuitry is [IsIndexCut(TELEBEACON_WIRE_SIGNALLER) ? "disconnected" : "connected"].
  • " else @@ -319,7 +299,7 @@ var/global/const/TELEBEACON_WIRE_SIGNALLER = 4 switch (index) if (TELEBEACON_WIRE_POWER) tele_beacon.set_power_cut() - addtimer(new Callback(src, .proc/ResetPulsed), rand(15 SECONDS, 45 SECONDS), TELEBEACON_WIRE_POWER) + addtimer(CALLBACK(src, PROC_REF(ResetPulsed)), rand(15 SECONDS, 45 SECONDS), TELEBEACON_WIRE_POWER) if (TELEBEACON_WIRE_RELAY) tele_beacon.disconnect_computers() if (TELEBEACON_WIRE_SIGNALLER) diff --git a/code/game/machinery/teleporter/console.dm b/code/game/machinery/teleporter/console.dm index 0624e5c961b0e..24898e93f54c1 100644 --- a/code/game/machinery/teleporter/console.dm +++ b/code/game/machinery/teleporter/console.dm @@ -1,5 +1,5 @@ /obj/machinery/computer/teleporter - name = "Teleporter Control Console" + name = "teleporter control console" desc = "Used to control a linked teleportation hub and station." icon_keyboard = "teleport_key" icon_screen = "teleport" @@ -14,7 +14,6 @@ /// The timer ID for any active online timers, for stopping the timer if the teleporter is manually shut off, or dies before the timer ends. var/active_timer - /obj/machinery/computer/teleporter/Destroy() clear_target() if (projector) @@ -28,8 +27,6 @@ /obj/machinery/computer/teleporter/Initialize() . = ..() - underlays.Cut() - underlays += image('icons/obj/stationobjs.dmi', icon_state = "telecomp-wires") id = "[random_id(/obj/machinery/computer/teleporter, 1000, 9999)]" update_refs() @@ -57,7 +54,7 @@ /obj/machinery/computer/teleporter/proc/clear_projector() if (!projector) return - GLOB.destroyed_event.unregister(projector, src, /obj/machinery/computer/teleporter/proc/lost_projector) + GLOB.destroyed_event.unregister(projector, src, TYPE_PROC_REF(/obj/machinery/computer/teleporter, lost_projector)) projector = null set_active(FALSE) @@ -72,13 +69,13 @@ return clear_projector() projector = _projector - GLOB.destroyed_event.register(projector, src, /obj/machinery/computer/teleporter/proc/lost_projector) + GLOB.destroyed_event.register(projector, src, TYPE_PROC_REF(/obj/machinery/computer/teleporter, lost_projector)) /obj/machinery/computer/teleporter/proc/clear_pad() if (!pad) return - GLOB.destroyed_event.unregister(pad, src, /obj/machinery/computer/teleporter/proc/lost_pad) + GLOB.destroyed_event.unregister(pad, src, TYPE_PROC_REF(/obj/machinery/computer/teleporter, lost_pad)) pad = null set_active(FALSE) @@ -93,14 +90,14 @@ return clear_pad() pad = _pad - GLOB.destroyed_event.register(pad, src, /obj/machinery/computer/teleporter/proc/lost_pad) + GLOB.destroyed_event.register(pad, src, TYPE_PROC_REF(/obj/machinery/computer/teleporter, lost_pad)) /obj/machinery/computer/teleporter/proc/clear_target() if (!target) return var/old_target = target - GLOB.destroyed_event.unregister(target, src, /obj/machinery/computer/teleporter/proc/lost_target) + GLOB.destroyed_event.unregister(target, src, TYPE_PROC_REF(/obj/machinery/computer/teleporter, lost_target)) target = null if (istype(old_target, /obj/machinery/tele_beacon)) var/obj/machinery/tele_beacon/beacon = old_target @@ -123,7 +120,23 @@ if (!beacon.connect_computer(src)) return FALSE target = _target - GLOB.destroyed_event.register(target, src, /obj/machinery/computer/teleporter/proc/lost_target) + + if (GLOB.using_map.use_overmap && GLOB.using_map.use_bluespace_interlude) + var/obj/overmap/overmap_target = map_sectors["[get_z(target)]"] + var/obj/overmap/overmap_source = map_sectors["[get_z(src)]"] + if (overmap_target && overmap_source) + var/distance = get_dist(overmap_target, overmap_source) + if (distance > GLOB.minimum_safe_teleport_distance) + var/interlude_prob = max(100, (distance / GLOB.maximum_safe_teleport_distance) * 100) + playsound(loc, 'sound/machines/twobeep.ogg', 75, 1) + if (interlude_prob > 80) + visible_message(SPAN_WARNING("WARNING! Maximum range reached! Interference exceeds safe limits!")) + else + visible_message(SPAN_WARNING("Warning: Safe range limit exceeded. Interference probability: [interlude_prob]%.")) + + pad.interlude_chance = interlude_prob + + GLOB.destroyed_event.register(target, src, TYPE_PROC_REF(/obj/machinery/computer/teleporter, lost_target)) return TRUE @@ -132,6 +145,8 @@ if (active == effective) return active = effective + if (!active && !SSevent.is_event_of_type_active(/datum/event/bsd_instability)) + pad.interlude_chance = initial(pad.interlude_chance) set_timer(!active) if (notify && effective) if (active) @@ -150,7 +165,7 @@ deltimer(active_timer) active_timer = null else - active_timer = addtimer(new Callback(src, .proc/clear_target), 1 MINUTE, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE) + active_timer = addtimer(CALLBACK(src, PROC_REF(clear_target)), 1 MINUTE, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE) /obj/machinery/computer/teleporter/proc/get_targets() diff --git a/code/game/machinery/teleporter/pad.dm b/code/game/machinery/teleporter/pad.dm index 57a641e37ed41..72552dccc3bca 100644 --- a/code/game/machinery/teleporter/pad.dm +++ b/code/game/machinery/teleporter/pad.dm @@ -1,7 +1,7 @@ /obj/machinery/tele_pad name = "teleporter pad" desc = "The teleporter pad handles all of the impossibly complex busywork required in instant matter transmission." - icon = 'icons/obj/teleporter.dmi' + icon = 'icons/obj/machines/teleporter.dmi' icon_state = "pad" density = TRUE anchored = TRUE @@ -11,6 +11,10 @@ var/obj/machinery/computer/teleporter/computer + ///Has a high chance to teleport the user to a semi random location when TRUE. + var/interference = FALSE + ///Chance (0 - 100%) to send a teleported object to The Interlude. + var/interlude_chance = 0 /obj/machinery/tele_pad/Destroy() if (computer) @@ -22,7 +26,7 @@ /obj/machinery/tele_pad/proc/clear_computer() if (!computer) return - GLOB.destroyed_event.unregister(computer, src, /obj/machinery/tele_pad/proc/lost_computer) + GLOB.destroyed_event.unregister(computer, src, TYPE_PROC_REF(/obj/machinery/tele_pad, lost_computer)) computer = null @@ -36,7 +40,7 @@ return clear_computer() computer = _computer - GLOB.destroyed_event.register(computer, src, /obj/machinery/tele_pad/proc/lost_computer) + GLOB.destroyed_event.register(computer, src, TYPE_PROC_REF(/obj/machinery/tele_pad, lost_computer)) /obj/machinery/tele_pad/Bumped(atom/movable/AM) @@ -49,7 +53,16 @@ if (istype(computer.target, /obj/machinery/tele_beacon)) var/obj/machinery/tele_beacon = computer.target tele_beacon.use_power_oneoff(1 KILOWATTS) - do_teleport(AM, T) + + if (prob(interlude_chance)) + GLOB.using_map.do_interlude_teleport(AM, T, rand(30, 120)) + computer.set_timer() + return + + if (interference && prob(75)) + do_unstable_teleport_safe(AM) + else + do_teleport(AM, T) computer.set_timer() @@ -70,14 +83,18 @@ /obj/machinery/tele_pad/on_update_icon() - overlays.Cut() + ClearOverlays() if (computer?.active) update_use_power(POWER_USE_ACTIVE) var/image/I = image(icon, src, "[initial(icon_state)]_active_overlay") I.plane = EFFECTS_ABOVE_LIGHTING_PLANE I.layer = ABOVE_LIGHTING_LAYER - overlays += I - set_light(0.4, 1.2, 4, 10) + AddOverlays(I) + set_light(4, 0.4) + + if (interference && prob(20)) + visible_message(SPAN_WARNING("The teleporter sparks ominously!")) + sparks(3, 1, loc) else set_light(0) update_use_power(POWER_USE_IDLE) @@ -85,4 +102,4 @@ var/image/I = image(icon, src, "[initial(icon_state)]_idle_overlay") I.plane = EFFECTS_ABOVE_LIGHTING_PLANE I.layer = ABOVE_LIGHTING_LAYER - overlays += I + AddOverlays(I) diff --git a/code/game/machinery/teleporter/projector.dm b/code/game/machinery/teleporter/projector.dm index e9c762cd54c40..b80e094edd154 100644 --- a/code/game/machinery/teleporter/projector.dm +++ b/code/game/machinery/teleporter/projector.dm @@ -1,7 +1,7 @@ /obj/machinery/tele_projector name = "projector" desc = "This machine is capable of projecting a miniature wormhole leading directly to its provided target." - icon = 'icons/obj/teleporter.dmi' + icon = 'icons/obj/machines/teleporter.dmi' icon_state = "station" density = TRUE anchored = TRUE @@ -21,7 +21,7 @@ /obj/machinery/tele_projector/proc/clear_computer() if (!computer) return - GLOB.destroyed_event.unregister(computer, src, /obj/machinery/tele_projector/proc/lost_computer) + GLOB.destroyed_event.unregister(computer, src, TYPE_PROC_REF(/obj/machinery/tele_projector, lost_computer)) computer = null @@ -35,7 +35,7 @@ return clear_computer() computer = _computer - GLOB.destroyed_event.register(computer, src, /obj/machinery/tele_projector/proc/lost_computer) + GLOB.destroyed_event.register(computer, src, TYPE_PROC_REF(/obj/machinery/tele_projector, lost_computer)) /obj/machinery/tele_projector/power_change() @@ -46,17 +46,17 @@ /obj/machinery/tele_projector/on_update_icon() - overlays.Cut() + ClearOverlays() if (computer?.active) update_use_power(POWER_USE_ACTIVE) var/image/I = image(icon, src, "[initial(icon_state)]_active_overlay") I.plane = EFFECTS_ABOVE_LIGHTING_PLANE I.layer = ABOVE_LIGHTING_LAYER - overlays += I + AddOverlays(I) else update_use_power(POWER_USE_IDLE) if (operable()) var/image/I = image(icon, src, "[initial(icon_state)]_idle_overlay") I.plane = EFFECTS_ABOVE_LIGHTING_PLANE I.layer = ABOVE_LIGHTING_LAYER - overlays += I + AddOverlays(I) diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm index f703976b19e7c..55b738dc84731 100644 --- a/code/game/machinery/turret_control.dm +++ b/code/game/machinery/turret_control.dm @@ -48,7 +48,7 @@ if(!control_area) control_area = get_area(src) else if(istext(control_area)) - for(var/area/A in world) + for(var/area/A as anything in GLOB.areas) if(A.name && A.name==control_area) control_area = A break @@ -85,18 +85,19 @@ return ..() -/obj/machinery/turretid/attackby(obj/item/W, mob/user) +/obj/machinery/turretid/use_tool(obj/item/W, mob/living/user, list/click_params) if(MACHINE_IS_BROKEN(src)) - return + return FALSE if(istype(W, /obj/item/card/id)||istype(W, /obj/item/modular_computer)) - if(src.allowed(usr)) + if(allowed(usr)) if(emagged) to_chat(user, SPAN_NOTICE("The turret control is unresponsive.")) else locked = !locked to_chat(user, SPAN_NOTICE("You [ locked ? "lock" : "unlock"] the panel.")) - return + return TRUE + return ..() /obj/machinery/turretid/emag_act(remaining_charges, mob/user) @@ -199,13 +200,13 @@ else if (enabled) if (lethal) icon_state = "control_kill" - set_light(1, 0.5, 2, 2, "#990000") + set_light(1.5, 1,"#990000") else icon_state = "control_stun" - set_light(1, 0.5, 2, 2, "#ff9900") + set_light(1.5, 1,"#ff9900") else icon_state = "control_standby" - set_light(1, 0.5, 2, 2, "#003300") + set_light(1.5, 1,"#003300") /obj/machinery/turretid/emp_act(severity) if(enabled) diff --git a/code/game/machinery/vending/_vending.dm b/code/game/machinery/vending/_vending.dm index 717ca6fbd35af..c839479801a55 100644 --- a/code/game/machinery/vending/_vending.dm +++ b/code/game/machinery/vending/_vending.dm @@ -2,7 +2,7 @@ abstract_type = /obj/machinery/vending name = "\improper Vendomat" desc = "A generic vending machine." - icon = 'icons/obj/vending.dmi' + icon = 'icons/obj/machines/vending.dmi' icon_state = "generic" layer = BELOW_OBJ_LAYER anchored = TRUE @@ -17,53 +17,85 @@ machine_desc = "Holds an internal stock of items that can be dispensed on-demand or when a charged ID card is swiped, depending on the brand." idle_power_usage = 10 wires = /datum/wires/vending - + health_max = 100 + var/colored_entries = TRUE + var/last_reply = 0 + var/scan_id = TRUE + var/light_max_bright_on = 0.2 + var/light_outer_range_on = 2 + var/list/ads_list = list() + var/list/slogan_list = list() + var/list/product_records = list() + var/obj/item/material/coin/coin /// The machine's wires, but typed. var/datum/wires/vending/vendor_wires - /// icon_state to flick() when vending var/icon_vend - + /// Total number of overlays that can be randomly picked from when an item is being vended. + var/max_overlays = 1 /// icon_state to flick() when refusing to vend var/icon_deny - /// Power to one-off spend on successfully vending. var/vend_power_usage = 150 - - var/active = TRUE //No sales pitches if off! - var/vend_ready = TRUE //Are we ready to vend?? Is it time?? - + /// No sales pitches if off! + var/active = TRUE + /// Are we ready to vend?? Is it time?? + var/vend_ready = TRUE /// A field associated with vending machines from the below flags. var/vendor_flags = VENDOR_CATEGORY_NORMAL + /// Possible vendor flags + var/possible_vendor_flags = VENDOR_CATEGORY_NORMAL|VENDOR_CATEGORY_HIDDEN|VENDOR_CATEGORY_COIN|VENDOR_CATEGORY_ANTAG + ///Minimum number of possible non-rare product that can be randomly spawned. This can be set by vending machine not item. Minimum rare product is set as 1 by default. + var/minrandom = 1 + ///Maximum number of possible non-rare products that can be randomly spawned. This can be set by vending machine not item. Maximum rare product depends on rarity. + var/maxrandom = 10 + ///Maximum number of randomly generated antag items. Default of 1 so it is usually only 0 or 1. This var is used as exceptions when large amounts of ammo needs to be randomly spawned. + var/antagrandom = 1 + /// When did we last pitch? + var/last_slogan = 0 + /// How long until we can pitch again? + var/slogan_delay = 2 MINUTES + /// Shock customers like an airlock. + var/seconds_electrified = 0 + /// Fire items at customers! We're broken! + var/shoot_inventory = FALSE + /// The chance that items are being shot per tick + var/shooting_chance = 2 + /// String of slogans spoken out loud, separated by semicolons + var/product_slogans = "" + /// String of anag slogans spoken out loud, separated by semicolons + var/antag_slogans = "" + /// String of small ad messages in the vending screen + var/product_ads = "" + /// Status screen messages like "insufficient funds", displayed in TGUI + var/status_message = "" + /// Set to 1 if status_message is an error + var/status_error = 0 + /// Stop spouting those godawful pitches! + var/shut_up = TRUE + /// Thank you for shopping! + var/vend_reply + /// What we're requesting payment for right now + var/datum/stored_items/vending_products/currently_vending + /// Prices for each product as (/item/path = price). Unlisted items are free. + var/list/prices = list() + /// Stock for each product as (/item/path = count). Set to '0' if you want the vendor to randomly spawn between 1 and 10 items. + var/list/products = list() + ///Probability of each rare product of spawning in, max amount increases with large value. Need to have value of '0' associated with it in product list for this to work. + var/list/rare_products = list() + /// Stock for products hidden by the contraband wire as (/item/path = count) + var/list/contraband = list() + /// Stock for products hidden by coin insertion as (/item/path = count) + var/list/premium = list() + /// Stock for antag items unlocked by challenge coin purchased from uplink. Each coin costs 10 TCs; value in vendor should be 10 at baseline with rare chance going up to 30. + var/list/antag = list() + /// 2D list of products as: list(list(category, products)) + var/list/all_products = list() var/const/VENDOR_CATEGORY_NORMAL = FLAG(0) var/const/VENDOR_CATEGORY_HIDDEN = FLAG(1) var/const/VENDOR_CATEGORY_COIN = FLAG(2) - - var/datum/stored_items/vending_products/currently_vending // What we're requesting payment for right now - var/status_message = "" // Status screen messages like "insufficient funds", displayed in NanoUI - var/status_error = 0 // Set to 1 if status_message is an error - var/list/prices = list() // Prices for each product as (/item/path = price). Unlisted items are free. - var/list/products = list() // Stock for each product as (/item/path = count) - var/list/contraband = list() // Stock for products hidden by the contraband wire as (/item/path = count) - var/list/premium = list() // Stock for products hidden by coin insertion as (/item/path = count) - - var/list/product_records = list() - var/product_slogans = "" //String of slogans spoken out loud, separated by semicolons - var/product_ads = "" //String of small ad messages in the vending screen - var/list/ads_list = list() - var/list/slogan_list = list() - var/shut_up = TRUE //Stop spouting those godawful pitches! - var/vend_reply //Thank you for shopping! - var/last_reply = 0 - var/last_slogan = 0 //When did we last pitch? - var/slogan_delay = 10 MINUTES //How long until we can pitch again? - var/seconds_electrified = 0 //Shock customers like an airlock. - var/shoot_inventory = FALSE //Fire items at customers! We're broken! - var/shooting_chance = 2 //The chance that items are being shot per tick - var/scan_id = TRUE - var/obj/item/material/coin/coin - + var/const/VENDOR_CATEGORY_ANTAG = FLAG(3) /obj/machinery/vending/Destroy() vendor_wires = null @@ -72,228 +104,316 @@ QDEL_NULL(coin) return ..() +/obj/machinery/vending/Initialize(mapload, d = 0, populate_parts = TRUE) + . = ..() + return INITIALIZE_HINT_LATELOAD -/obj/machinery/vending/Initialize(mapload, d=0, populate_parts = TRUE) +/obj/machinery/vending/LateInitialize(mapload, d = 0, populate_parts = TRUE) . = ..() vendor_wires = wires - if (product_slogans) + if(product_slogans) slogan_list += splittext(product_slogans, ";") last_slogan = world.time + rand(0, slogan_delay) - if (product_ads) + if(product_ads) ads_list += splittext(product_ads, ";") + if(minrandom > maxrandom) + minrandom = maxrandom + build_inventory(populate_parts) + update_icon() +/obj/machinery/vending/examine(mob/user) + . = ..() + if(IsShowingAntag()) + . += SPAN_WARNING("A secret panel is open, revealing a small compartment that is dimly lit with red lighting.") + /obj/machinery/vending/Process() - if (inoperable()) + if(inoperable()) return - if (!active) + if(!active) return - if (seconds_electrified > 0) + if(seconds_electrified > 0) seconds_electrified-- - if (!shut_up && prob(5) && length(slogan_list) && last_slogan + slogan_delay <= world.time) + if(!shut_up && prob(5) && length(slogan_list) && last_slogan + slogan_delay <= world.time) var/slogan = pick(slogan_list) speak(slogan) last_slogan = world.time - if (shoot_inventory && prob(shooting_chance)) + if(shoot_inventory && prob(shooting_chance)) throw_item() +/obj/machinery/vending/post_health_change(health_mod, prior_health, damage_type) + . = ..() + queue_icon_update() + if(health_mod < 0 && !health_dead()) + var/initial_damage_percentage = Percent(get_max_health() - prior_health, get_max_health(), 0) + var/damage_percentage = get_damage_percentage() + if(damage_percentage >= 25 && initial_damage_percentage < 25 && prob(75)) + shut_up = FALSE + else if(damage_percentage >= 50 && initial_damage_percentage < 50) + vendor_wires.RandomCut() + else if(damage_percentage >= 75 && initial_damage_percentage < 75 && prob(10)) + malfunction() /obj/machinery/vending/powered() return anchored && ..() +/obj/machinery/vending/proc/update_glow() + var/light_color + if(IsShowingAntag()) + light_color = COLOR_RED + light_max_bright_on = 0.4 + if(!is_powered() || MACHINE_IS_BROKEN(src)) + set_light(0) + else + set_light(light_outer_range_on, light_max_bright_on, light_color) /obj/machinery/vending/on_update_icon() - overlays.Cut() - if (MACHINE_IS_BROKEN(src)) + ClearOverlays() + update_glow() + if(MACHINE_IS_BROKEN(src)) icon_state = "[initial(icon_state)]-broken" - else if (is_powered()) + else if(is_powered()) icon_state = initial(icon_state) else spawn(rand(0, 15)) - icon_state = "[initial(icon_state)]-off" - if (panel_open) - overlays += image(icon, "[initial(icon_state)]-panel") - - -/obj/machinery/vending/ex_act(severity) - switch(severity) - if (EX_ACT_DEVASTATING) - qdel(src) - if (EX_ACT_HEAVY) - if (prob(50)) - qdel(src) - if (EX_ACT_LIGHT) - if (prob(25)) - spawn(0) - malfunction() - + icon_state = "[initial(icon_state)]-off" + if(panel_open || IsShowingAntag()) + AddOverlays(image(icon, "[initial(icon_state)]-panel")) + if((IsShowingAntag() || get_damage_percentage() >= 50) && is_powered()) + AddOverlays(image(icon, "sparks")) + AddOverlays(emissive_appearance(icon, "sparks")) + if(!vend_ready) + AddOverlays(image(icon, "[initial(icon_state)]-shelf[rand(max_overlays)]")) /obj/machinery/vending/emag_act(remaining_charges, mob/living/user) - if (emagged) + if(emagged) return emagged = TRUE req_access.Cut() - vendor_wires.UpdateShowContraband(TRUE) - SSnano.update_uis(src) + if(antag_slogans) + shut_up = FALSE + slogan_list.Cut() + slogan_list += splittext(antag_slogans, ";") + last_slogan = world.time + rand(0, slogan_delay) + for(var/datum/stored_items/vending_products/product as anything in product_records) + product.price = 0 + UpdateShowContraband(TRUE) + SStgui.update_uis(src) to_chat(user, "You short out the product lock on \the [src].") - return 1 + return TRUE +/obj/machinery/vending/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(panel_open) + attack_hand(user) -/obj/machinery/vending/attackby(obj/item/item, mob/living/user) +/obj/machinery/vending/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(panel_open) + attack_hand(user) + +/obj/machinery/vending/use_tool(obj/item/item, mob/living/user, list/click_params) var/obj/item/card/id/id = item.GetIdCard() - if (currently_vending && vendor_account && !vendor_account.suspended) - var/paid + var/static/list/simple_coins = subtypesof(/obj/item/material/coin) - typesof(/obj/item/material/coin/challenge) + if(currently_vending && vendor_account && !vendor_account.suspended) var/handled - if (id) + var/paid + if(id) paid = pay_with_card(id, item) handled = TRUE - else if (istype(item, /obj/item/spacecash/ewallet)) + else if(istype(item, /obj/item/spacecash/ewallet)) paid = pay_with_ewallet(item) handled = TRUE - else if (istype(item, /obj/item/spacecash/bundle)) + else if(istype(item, /obj/item/spacecash/bundle)) paid = pay_with_cash(item) handled = TRUE - if (paid) + if(paid) vend(currently_vending, user) return TRUE - else if (handled) - SSnano.update_uis(src) + else if(handled) + SStgui.update_uis(src) return TRUE - if (id || istype(item, /obj/item/spacecash)) + + if(id || istype(item, /obj/item/spacecash)) attack_hand(user) return TRUE - if (isMultitool(item) || isWirecutter(item)) - if (panel_open) - attack_hand(user) + if(is_type_in_list(item, simple_coins)) + if(!length(premium)) + to_chat(user, SPAN_WARNING("\The [src] does not accept the [item].")) return TRUE - if (istype(item, /obj/item/material/coin) && length(premium)) - if (!user.unEquip(item, src)) + if(!user.unEquip(item, src)) return FALSE coin = item UpdateShowPremium(TRUE) to_chat(user, SPAN_NOTICE("You insert \the [item] into \the [src].")) - SSnano.update_uis(src) + SStgui.update_uis(src) + return TRUE + + if(istype(item, /obj/item/material/coin/challenge/syndie)) + if(!LAZYLEN(antag)) + to_chat(user, SPAN_WARNING("\The [src] does not have a secret compartment installed.")) + return TRUE + if(IsShowingAntag()) + to_chat(user, SPAN_WARNING("\The [src]'s secret compartment is already unlocked!")) + return TRUE + if(!user.unEquip(item, src)) + to_chat(user, SPAN_WARNING("You can't drop \the [item].")) + return TRUE + ProcessAntag(item, user) return TRUE - if ((user.a_intent == I_HELP) && attempt_to_stock(item, user)) + + if((user.a_intent == I_HELP) && attempt_to_stock(item, user)) return TRUE - if ((. = component_attackby(item, user))) - return - if ((obj_flags & OBJ_FLAG_ANCHORABLE) && isWrench(item)) - wrench_floor_bolts(user) - power_change() - return + return ..() + +/// Proc that enables hidden antag items and replaces slogan list with anti-Sol slogans if any. +/obj/machinery/vending/proc/ProcessAntag(obj/item/item, mob/living/user) + to_chat(user, SPAN_NOTICE("You insert \the [item] into \the [src].")) + visible_message(SPAN_WARNING("\The [src] hisses as a hidden panel swings open with a loud thud.")) + playsound(loc, 'sound/items/metal_clack.ogg', 50) + UpdateShowAntag(TRUE) + req_access.Cut() + SStgui.update_uis(src) + update_icon() + var/obj/item/material/coin/challenge/syndie/antagcoin = item + if(antag_slogans) + shut_up = FALSE + slogan_list.Cut() + slogan_list += splittext(antag_slogans, ";") + last_slogan = world.time + rand(0, slogan_delay) + if(!isnull(antagcoin.string_color)) + if(prob(10)) + user.put_in_hands(item) + to_chat(user, SPAN_NOTICE("You successfully pull \the [item] out before \the [src] could swallow it.")) + return TRUE + else + to_chat(user, SPAN_NOTICE("You weren't able to pull \the [item] out fast enough, \the [src] ate it, string and all.")) + qdel(item) + return TRUE + else + to_chat(user, SPAN_NOTICE("You hear a loud clink as \the [item] is swallowed by \the [src]")) + qdel(item) + return TRUE /obj/machinery/vending/MouseDrop_T(obj/item/item, mob/living/user) - if (!CanMouseDrop(item, user) || (item.loc != user)) + if(!CanMouseDrop(item, user) || (item.loc != user)) return return attempt_to_stock(item, user) - /obj/machinery/vending/state_transition(singleton/machine_construction/new_state) . = ..() - SSnano.update_uis(src) - + SStgui.update_uis(src) /obj/machinery/vending/physical_attack_hand(mob/living/user) - if (seconds_electrified) - if (shock(user, 100)) - return TRUE - + if(!seconds_electrified) + return FALSE + return shock(user, 100) /obj/machinery/vending/interface_interact(mob/living/user) - ui_interact(user) + tgui_interact(user) return TRUE +/obj/machinery/vending/tgui_state(mob/user) + return GLOB.tgui_default_state + +/obj/machinery/vending/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Vending", name) + ui.set_autoupdate(FALSE) + ui.open() -/obj/machinery/vending/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui, force_open = TRUE) - user.set_machine(src) +/obj/machinery/vending/tgui_data(mob/user) var/list/data = list() - if (currently_vending) + + if(currently_vending) data["mode"] = TRUE data["product"] = currently_vending.item_name data["price"] = currently_vending.price - data["message_err"] = FALSE - data["message"] = status_message - data["message_err"] = status_error + data["image"] = currently_vending.image else data["mode"] = FALSE - var/list/listed_products = list() - for (var/key = 1 to length(product_records)) - var/datum/stored_items/vending_products/product = product_records[key] - if (!(product.category & vendor_flags)) - continue - listed_products.Add(list(list( - "key" = key, - "name" = product.item_name, - "price" = product.price, - "color" = product.display_color, - "amount" = product.get_amount() - ))) - data["products"] = listed_products - if (coin) - data["coin"] = coin.name - if (panel_open) - data["panel"] = TRUE - data["speaker"] = shut_up ? FALSE : TRUE - else - data["panel"] = FALSE - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "vending_machine.tmpl", name, 440, 600) - ui.set_initial_data(data) - ui.open() + data["message"] = status_message + data["message_err"] = status_error + data["vend_ready"] = vend_ready + data["coin"] = coin + data["panel"] = panel_open + data["speaker"] = shut_up + + var/list/listed_products = list() + + var/product_position = 0 + for(var/datum/stored_items/vending_products/product as anything in product_records) + if(!(product.category & vendor_flags)) + continue + + listed_products += list(list( + "key" = ++product_position, + "name" = product.item_name, + "price" = product.price, + "category" = product.category, + "ammount" = product.get_amount(), + "image" = product.image + )) + data["products"] = listed_products + + return data + +/obj/machinery/vending/tgui_static_data(mob/user) + var/list/data = list() + data["isSilicon"] = istype(usr, /mob/living/silicon) + return data -/obj/machinery/vending/OnTopic(mob/user, href_list, datum/topic_state/state) - if (href_list["remove_coin"] && !istype(usr, /mob/living/silicon)) - if (!coin) - to_chat(user, "There is no coin in this machine.") - return TOPIC_HANDLED - coin.dropInto(loc) - if (!user.get_active_hand()) - user.put_in_hands(coin) - to_chat(user, SPAN_NOTICE("You remove \the [coin] from \the [src]")) - coin = null - UpdateShowPremium(FALSE) - return TOPIC_HANDLED - if (href_list["vend"] && vend_ready && !currently_vending) - var/key = text2num(href_list["vend"]) - if (!is_valid_index(key, product_records)) - return TOPIC_REFRESH - var/datum/stored_items/vending_products/product = product_records[key] - if (!istype(product)) - return TOPIC_REFRESH - if (!(product.category & vendor_flags)) - return TOPIC_REFRESH - if (product.price <= 0) - vend(product, user) - else if (istype(user, /mob/living/silicon)) - to_chat(user, SPAN_WARNING("Artificial unit recognized. Purchase canceled.")) - else - currently_vending = product - if (!vendor_account || vendor_account.suspended) - status_message = "This machine is currently unable to process payments due to problems with the associated account." - status_error = TRUE +/obj/machinery/vending/tgui_act(action, list/params) + if(..()) + return + . = TRUE + + switch(action) + if("remove_coin") + coin.dropInto(loc) + if(!usr.get_active_hand()) + usr.put_in_hands(coin) + to_chat(usr, SPAN_NOTICE("You remove \the [coin] from \the [src]")) + coin = null + UpdateShowPremium(FALSE) + return TRUE + if("vend") + var/key = text2num(params["vend"]) + if(!is_valid_index(key, product_records)) + return FALSE + var/datum/stored_items/vending_products/product = product_records[key] + if(!istype(product)) + return FALSE + if(!(product.category & vendor_flags)) + return FALSE + if(product.price <= 0) + vend(product, usr) + else if(istype(usr, /mob/living/silicon)) + to_chat(usr, SPAN_WARNING("Artificial unit recognized. Purchase canceled.")) else - status_message = "Please swipe a card or insert cash to pay for the item." - status_error = FALSE - return TOPIC_REFRESH - if (href_list["cancelpurchase"]) - currently_vending = null - return TOPIC_REFRESH - if (href_list["togglevoice"] && panel_open) - shut_up = !shut_up - return TOPIC_HANDLED - + currently_vending = product + if(!vendor_account || vendor_account.suspended) + status_message = "Ошибка: Проблема со связанным счётом, платёж невозможен." + status_error = TRUE + else + status_error = FALSE + return TRUE + if("cancelpurchase") + currently_vending = null + return TRUE + if("togglevoice") + shut_up = !shut_up + return TRUE /obj/machinery/vending/get_req_access() if(!scan_id) return list() return ..() - /obj/machinery/vending/dismantle() var/obj/structure/vending_refill/dump = new (loc) dump.SetName("[dump.name] ([name])") @@ -304,14 +424,12 @@ product_records = null return ..() - /obj/machinery/vending/proc/attempt_to_stock(obj/item/item, mob/living/user) for (var/datum/stored_items/vending_products/product in product_records) if (item.type == product.item_path) stock(item, product, user) return TRUE - /obj/machinery/vending/proc/pay_with_cash(obj/item/spacecash/bundle/cash) if (currently_vending.price > cash.worth) to_chat(usr, "[icon2html(cash, usr)] [SPAN_WARNING("That is not enough money.")]") @@ -325,7 +443,6 @@ credit_purchase("(cash)") return TRUE - /obj/machinery/vending/proc/pay_with_ewallet(obj/item/spacecash/ewallet/ewallet) visible_message(SPAN_INFO("\The [usr] swipes \the [ewallet] through \the [src].")) if (currently_vending.price > ewallet.worth) @@ -336,7 +453,6 @@ credit_purchase("[ewallet.owner_name] (chargecard)") return TRUE - /obj/machinery/vending/proc/pay_with_card(obj/item/card/id/id, obj/item/item) if (id == item || isnull(item)) visible_message(SPAN_INFO("\The [usr] swipes \the [id] through \the [src].")) @@ -344,36 +460,34 @@ visible_message(SPAN_INFO("\The [usr] swipes \the [item] through \the [src].")) var/datum/money_account/customer_account = get_account(id.associated_account_number) if (!customer_account) - status_message = "Error: Unable to access account. Please contact technical support if problem persists." + status_message = "Ошибка: Нет доступа к аккаунту. Обратитесь в поддержку." status_error = TRUE return FALSE if (customer_account.suspended) - status_message = "Unable to access account: account suspended." + status_message = "Ошибка: Нет доступа к аккаунту. Аккаунт заморожен." status_error = TRUE return FALSE if (customer_account.security_level) var/response = input("Enter pin code", "Vendor transaction") as null | num if (isnull(response) || !Adjacent(usr) || usr.incapacitated()) - status_message = "User cancelled transaction." + status_message = "Пользователь отменил транзакцию." status_error = FALSE return FALSE customer_account = attempt_account_access(id.associated_account_number, response, 2) if (!customer_account) - status_message = "Unable to access account: incorrect credentials." + status_message = "Ошибка: Нет доступа к аккаунту. Обратитесь в поддержку." status_error = TRUE return FALSE if (currently_vending.price > customer_account.money) - status_message = "Insufficient funds in account." + status_message = "Недостаточно средств на счету." status_error = TRUE return FALSE customer_account.transfer(vendor_account, currently_vending.price, "Purchase of [currently_vending.item_name]") return TRUE - /obj/machinery/vending/proc/credit_purchase(target) vendor_account.deposit(currently_vending.price, "Purchase of [currently_vending.item_name]", target) - /obj/machinery/vending/proc/vend(datum/stored_items/vending_products/product, mob/user) if (scan_id && !emagged && !allowed(user)) to_chat(user, SPAN_WARNING("Access denied.")) @@ -382,7 +496,8 @@ vend_ready = FALSE status_message = "Vending..." status_error = FALSE - SSnano.update_uis(src) + SStgui.update_uis(src) + update_icon() if (product.category & VENDOR_CATEGORY_COIN) if(!coin) to_chat(user, SPAN_NOTICE("You need to insert a coin to get this item.")) @@ -417,19 +532,18 @@ status_message = "" status_error = FALSE vend_ready = TRUE + update_icon() currently_vending = null - SSnano.update_uis(src) - + SStgui.update_uis(src) /obj/machinery/vending/proc/stock(obj/item/item, datum/stored_items/vending_products/stored, mob/living/user) if (!user.unEquip(item)) return if (stored.add_product(item)) to_chat(user, SPAN_NOTICE("You insert \the [item] into \the [src].")) - SSnano.update_uis(src) + SStgui.update_uis(src) return TRUE - SSnano.update_uis(src) - + SStgui.update_uis(src) /obj/machinery/vending/proc/speak(message) if (!is_powered()) @@ -439,21 +553,23 @@ audible_message(SPAN_CLASS("game say", "[SPAN_CLASS("name", "\The [src]")] beeps, \"[message]\"")) return - /obj/machinery/vending/proc/malfunction() - for (var/datum/stored_items/vending_products/product in product_records) + for (var/datum/stored_items/vending_products/product in shuffle(product_records)) + if (product.category == VENDOR_CATEGORY_ANTAG) + continue while (product.get_amount() > 0) product.get_product(loc) break set_broken(TRUE) - /obj/machinery/vending/proc/throw_item() var/mob/living/target = locate() in view(7, src) if (!target) return FALSE var/obj/item/throw_item for (var/datum/stored_items/vending_products/product in shuffle(product_records)) + if (product.category == VENDOR_CATEGORY_ANTAG) + continue throw_item = product.get_product(loc) if (throw_item) break @@ -464,28 +580,89 @@ visible_message(SPAN_WARNING("\The [src] launches \a [throw_item] at \the [target]!")) return TRUE - /obj/machinery/vending/proc/build_inventory(populate_parts) - var/list/all_products = list( - list(products, VENDOR_CATEGORY_NORMAL), - list(contraband, VENDOR_CATEGORY_HIDDEN), - list(premium, VENDOR_CATEGORY_COIN) - ) - for (var/list/current_list in all_products) - var/category = current_list[2] - for (var/entry in current_list[1]) - var/datum/stored_items/vending_products/product = new/datum/stored_items/vending_products(src, entry) - product.price = (entry in prices) ? prices[entry] : 0 - if (populate_parts) - product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1 - product.category = category - product_records.Add(product) + SHOULD_NOT_OVERRIDE(TRUE) + + for (var/list/entry in get_all_products()) + var/category = entry[1] + var/list/products = entry[2] + for (var/product_path in products) + if(!product_path) + stack_trace("Product path is null") + continue + var/atom/dummy = new product_path + dummy.ImmediateOverlayUpdate() + product_records += generate_product_record(dummy, category, products[product_path], get_product_image(dummy), populate_parts) + qdel(dummy) + +/obj/machinery/vending/proc/get_product_image(atom/dummy) + SHOULD_NOT_OVERRIDE(TRUE) + + var/static/list/product_image_cache = list() + var/cache_key = "[dummy.name]:[dummy.icon]:[dummy.icon_state]:[dummy.color]" + var/base64image = product_image_cache[cache_key] + if(!base64image) + base64image = icon2base64(getFlatIcon(dummy)) + product_image_cache[cache_key] = base64image + + return base64image + +/obj/machinery/vending/proc/generate_product_record(atom/dummy, category, amount, image, populate_parts) + var/datum/stored_items/vending_products/product = new( + src, + dummy.type, + dummy.name, + price = prices[dummy.type] || 0, + category = category, + rarity = rare_products[dummy.type] || 100, + image = image) + + if (populate_parts) + if(!amount) + if (product.rarity == 100) + amount = rand(minrandom, maxrandom) + + else if (product.rarity < 100 && product.category != VENDOR_CATEGORY_ANTAG) + amount = prob(product.rarity) * rand(1,ceil(product.rarity / 10)) + + else if (product.category == VENDOR_CATEGORY_ANTAG) + amount = prob(product.rarity) * ceil(rand(1, antagrandom)) //Either 0 or 1 of a rare antag product, for balance purposes. Exception if antagrandom is redefined from default of 1. + + product.amount = amount + + if (colored_entries) + switch(product.category) + if (VENDOR_CATEGORY_HIDDEN) + product.display_color = COLOR_DARK_ORANGE + if (VENDOR_CATEGORY_COIN) + product.display_color = COLOR_LIME + if (VENDOR_CATEGORY_ANTAG) + product.display_color = COLOR_RED + if (VENDOR_CATEGORY_NORMAL) + if (product.rarity < 100) + product.display_color = COLOR_GOLD + + return product + +/obj/machinery/vending/proc/get_all_products() + SHOULD_NOT_OVERRIDE(TRUE) + + if(!length(all_products)) + if(possible_vendor_flags & VENDOR_CATEGORY_NORMAL) + all_products += list(list(VENDOR_CATEGORY_NORMAL, products)) + if(possible_vendor_flags & VENDOR_CATEGORY_HIDDEN) + all_products += list(list(VENDOR_CATEGORY_HIDDEN, contraband)) + if(possible_vendor_flags & VENDOR_CATEGORY_COIN) + all_products += list(list(VENDOR_CATEGORY_COIN, premium)) + if(possible_vendor_flags & VENDOR_CATEGORY_ANTAG) + all_products += list(list(VENDOR_CATEGORY_ANTAG, antag)) + + return all_products /obj/machinery/vending/proc/IsShowingProducts() return HAS_FLAGS(vendor_flags, VENDOR_CATEGORY_NORMAL) - /// Update whether the vendor should show the normal products category, flipping if null. /obj/machinery/vending/proc/UpdateShowProducts(show) if (isnull(show)) @@ -495,11 +672,9 @@ else CLEAR_FLAGS(vendor_flags, VENDOR_CATEGORY_NORMAL) - /obj/machinery/vending/proc/IsShowingContraband() return HAS_FLAGS(vendor_flags, VENDOR_CATEGORY_HIDDEN) - /// Update whether the vendor should show the contraband category, flipping if null. /obj/machinery/vending/proc/UpdateShowContraband(show) if (isnull(show)) @@ -509,11 +684,9 @@ else CLEAR_FLAGS(vendor_flags, VENDOR_CATEGORY_HIDDEN) - /obj/machinery/vending/proc/IsShowingPremium() return HAS_FLAGS(vendor_flags, VENDOR_CATEGORY_COIN) - /// Update whether the vendor should show the premium category, flipping if null. /obj/machinery/vending/proc/UpdateShowPremium(show) if (isnull(show)) @@ -522,3 +695,15 @@ SET_FLAGS(vendor_flags, VENDOR_CATEGORY_COIN) else CLEAR_FLAGS(vendor_flags, VENDOR_CATEGORY_COIN) + +/obj/machinery/vending/proc/IsShowingAntag() + return HAS_FLAGS(vendor_flags, VENDOR_CATEGORY_ANTAG) + +/// Update whether the vendor should show the antag category, flipping if null. +/obj/machinery/vending/proc/UpdateShowAntag(show) + if (isnull(show)) + FLIP_FLAGS(vendor_flags, VENDOR_CATEGORY_ANTAG) + else if (show) + SET_FLAGS(vendor_flags, VENDOR_CATEGORY_ANTAG) + else + CLEAR_FLAGS(vendor_flags, VENDOR_CATEGORY_ANTAG) diff --git a/code/game/machinery/vending/_vending_products.dm b/code/game/machinery/vending/_vending_products.dm index 55ae087831e89..88ebbc2445d97 100644 --- a/code/game/machinery/vending/_vending_products.dm +++ b/code/game/machinery/vending/_vending_products.dm @@ -2,10 +2,14 @@ var/price var/display_color var/category + var/rarity + /// Image as base64. Used in vendor's UI + var/image - -/datum/stored_items/vending_products/New(atom/vending_machine, path, name, amount, price, color, category) +/datum/stored_items/vending_products/New(atom/vending_machine, atom/path, name, amount, price, color, category, rarity, image) ..() - price = price - display_color = color - category = category + src.price = price + src.display_color = color + src.category = category + src.rarity = rarity + src.image = image diff --git a/code/game/machinery/vending/_vending_refill.dm b/code/game/machinery/vending/_vending_refill.dm index ff12c97db234e..17ed3a71bed15 100644 --- a/code/game/machinery/vending/_vending_refill.dm +++ b/code/game/machinery/vending/_vending_refill.dm @@ -39,5 +39,5 @@ refill_product.migrate(vendor) vendor.product_records += refill_product product_records = null - SSnano.update_uis(vendor) + SStgui.update_uis(vendor) qdel(src) diff --git a/code/game/machinery/vending/_wires.dm b/code/game/machinery/vending/_wires.dm index 2a72a4ddb44bb..449c6ad434555 100644 --- a/code/game/machinery/vending/_wires.dm +++ b/code/game/machinery/vending/_wires.dm @@ -12,7 +12,7 @@ new /datum/wire_description (WIRE_THROW_PRODUCTS, "This wire leads to the item dispensor force controls."), new /datum/wire_description (WIRE_SHOW_CONTRABAND, "This wire appears connected to a reserve inventory compartment."), new /datum/wire_description (WIRE_SHOCK_USERS, "This wire seems to be carrying a heavy current."), - new /datum/wire_description (WIRE_SCAN_ID, "This wire is connected to the ID scanning panel.", SKILL_EXPERT) + new /datum/wire_description (WIRE_SCAN_ID, "This wire is connected to the ID scanning panel.", SKILL_EXPERIENCED) ) diff --git a/code/game/machinery/vending/boda.dm b/code/game/machinery/vending/boda.dm index d819d0a3bf5b4..ab2a4749c3aeb 100644 --- a/code/game/machinery/vending/boda.dm +++ b/code/game/machinery/vending/boda.dm @@ -13,13 +13,39 @@ We are simple people, for this is all we eat.;\ If there is a person, there is a problem. If there is no person, then there is no problem.\ "} + product_slogans = {"\ + I would drink it again perhaps.;\ + Enough REAL sugar to taste!;\ + BODA: It is acceptable;\ + You're strong. Drink Boda.\ + "} + antag_slogans = {"\ + It may not be the best, but our wares are actually GOOD for the consumer. Suck it, capitalists.;\ + There is only our, there is no mine. Unless you're sent to gulag.;\ + Guaranteed to help you tear 'em a new Gaia.;\ + 100% less additives and preservatives than our SCG competitors.\ + "} products = list( - /obj/item/reagent_containers/food/drinks/cans/syndicola = 10, - /obj/item/reagent_containers/food/drinks/cans/syndicolax = 10, - /obj/item/reagent_containers/food/drinks/cans/artbru = 10, - /obj/item/reagent_containers/food/drinks/glass2/square/boda = 10, - /obj/item/reagent_containers/food/drinks/glass2/square/bodaplus = 10 + /obj/item/reagent_containers/food/drinks/cans/syndicola = 0, + /obj/item/reagent_containers/food/drinks/cans/syndicolax = 0, + /obj/item/reagent_containers/food/drinks/cans/artbru = 0, + /obj/item/reagent_containers/food/drinks/glass2/square/boda = 0, + /obj/item/reagent_containers/food/drinks/glass2/square/bodaplus = 0, + /obj/item/reagent_containers/food/drinks/bottle/space_up = 0 ) contraband = list( - /obj/item/reagent_containers/food/drinks/bottle/space_up = 5 + /obj/item/clothing/under/soviet = 1, + /obj/item/clothing/suit/hgpirate = 1 + + ) + rare_products = list( + /obj/item/reagent_containers/food/drinks/bottle/space_up = 50, + /obj/item/card/id/syndicate = 25, + /obj/item/storage/box/syndie_kit/spy = 50 + ) + antag = list( + /obj/item/gun/projectile/heavysniper/boltaction = 1, + /obj/item/ammo_magazine/rifle = 1, + /obj/item/card/id/syndicate = 0, + /obj/item/storage/box/syndie_kit/spy = 0 ) diff --git a/code/game/machinery/vending/boozeomat.dm b/code/game/machinery/vending/boozeomat.dm index 1871f98b4d592..57b8fa6e67c11 100644 --- a/code/game/machinery/vending/boozeomat.dm +++ b/code/game/machinery/vending/boozeomat.dm @@ -30,6 +30,14 @@ Man loves beer.;\ A toast for progress!\ "} + antag_slogans = {"\ + Drink away the pain of living under SolGov!;\ + Vodka is the only acceptable drink!;\ + Is this the best you can serve, bartender? This swill?!;\ + These drinks are as tasteless as Sol's people!;\ + Who are you kidding? You knew you were about to drink piss the second you stepped in here.;\ + Drinking on the job is socially acceptable for executives, why not for you?\ + "} products = list( /obj/item/reagent_containers/food/drinks/glass2/square = 10, /obj/item/reagent_containers/food/drinks/flask/barflask = 5, @@ -100,3 +108,12 @@ /obj/item/reagent_containers/food/drinks/bottle/tadmorwine = 5, /obj/item/reagent_containers/food/drinks/bottle/brandy = 5 ) + rare_products = list( + /obj/item/reagent_containers/glass/bottle/dye/polychromic/strong = 50, + /obj/item/storage/pill_bottle/tramadol = 50 + ) + antag = list( + /obj/item/storage/secure/briefcase/money = 1, + /obj/item/reagent_containers/glass/bottle/dye/polychromic/strong = 0, + /obj/item/storage/pill_bottle/tramadol = 0 + ) diff --git a/code/game/machinery/vending/cigarette.dm b/code/game/machinery/vending/cigarette.dm index 6ac0063de0b70..eee27c8cf27c0 100644 --- a/code/game/machinery/vending/cigarette.dm +++ b/code/game/machinery/vending/cigarette.dm @@ -26,6 +26,11 @@ We understand the depressed, alcoholic cowboy in you. That's why we also smoke Jericho.;\ Professionals. Better cigarettes for better people. Yes, better people.\ "} + antag_slogans = {"\ + With your lungs full of smoke, you’ll share the experience of countless Gaian civilians!;\ + Smoke your troubles away. Is being a citizen of Sol worth all this trouble?;\ + We kill you, you buy! It's the SCG way!\ + "} prices = list( /obj/item/storage/chewables/tobacco = 40, /obj/item/storage/chewables/tobacco2 = 50, @@ -46,7 +51,8 @@ /obj/item/storage/fancy/smokable/trident = 85, /obj/item/storage/fancy/smokable/trident_mint = 85, /obj/item/storage/fancy/smokable/trident_fruit = 85, - /obj/item/storage/box/matches = 2, + /obj/item/storage/fancy/matches/matchbox = 5, + /obj/item/storage/fancy/matches/matchbook = 2, /obj/item/flame/lighter/random = 5, /obj/item/clothing/mask/smokable/ecig/simple = 50, /obj/item/clothing/mask/smokable/ecig/util = 100, @@ -78,7 +84,8 @@ /obj/item/storage/fancy/smokable/trident = 2, /obj/item/storage/fancy/smokable/trident_mint = 2, /obj/item/storage/fancy/smokable/trident_fruit = 2, - /obj/item/storage/box/matches = 10, + /obj/item/storage/fancy/matches/matchbox = 5, + /obj/item/storage/fancy/matches/matchbook = 5, /obj/item/flame/lighter/random = 4, /obj/item/storage/chewables/tobacco = 2, /obj/item/storage/chewables/tobacco2 = 2, @@ -104,3 +111,14 @@ /obj/item/storage/fancy/smokable/cigar = 5, /obj/item/storage/fancy/smokable/killthroat = 5 ) + rare_products = list( + /obj/item/storage/box/syndie_kit/cigarette = 50, + /obj/item/storage/box/syndie_kit/syringegun = 40, + /obj/item/clothing/mask/chameleon/voice = 20 + ) + antag = list( + /obj/item/grenade/smokebomb = 1, + /obj/item/storage/box/syndie_kit/cigarette = 0, + /obj/item/storage/box/syndie_kit/syringegun = 0, + /obj/item/clothing/mask/chameleon/voice = 0 + ) diff --git a/code/game/machinery/vending/coffee.dm b/code/game/machinery/vending/coffee.dm index 330cc80ccf133..c68ded32ec319 100644 --- a/code/game/machinery/vending/coffee.dm +++ b/code/game/machinery/vending/coffee.dm @@ -5,6 +5,7 @@ icon_vend = "coffee-vend" icon_deny = "coffee-deny" base_type = /obj/machinery/vending/coffee + maxrandom = 20 idle_power_usage = 200 vend_power_usage = 40000 product_ads = {"\ @@ -22,6 +23,13 @@ We hope you like the best!;\ Try our new chocolate!\ "} + antag_slogans = {"\ + I love Sol! Ha ha, just kidding.;\ + Sol woke up and chose violence!;\ + The worst joe for the average Joe.;\ + Capitalism tiring you out? The boss tell you to perk up or ship out?;\ + Tired of working for the man? Try a coffee. It won't help and it won't make you feel better either.\ + "} prices = list( /obj/item/reagent_containers/food/drinks/coffee = 10, /obj/item/reagent_containers/food/drinks/decafcoffee = 10, @@ -38,25 +46,30 @@ /obj/item/reagent_containers/food/drinks/ice = 5 ) products = list( - /obj/item/reagent_containers/food/drinks/coffee = 15, - /obj/item/reagent_containers/food/drinks/decafcoffee = 15, - /obj/item/reagent_containers/food/drinks/tea/black = 15, - /obj/item/reagent_containers/food/drinks/tea/green = 15, - /obj/item/reagent_containers/food/drinks/tea/chai = 15, - /obj/item/reagent_containers/food/drinks/tea/decaf = 15, - /obj/item/reagent_containers/food/drinks/h_chocolate = 15, - /obj/item/reagent_containers/food/condiment/small/packet/sugar = 25, - /obj/item/reagent_containers/pill/pod/cream = 25, - /obj/item/reagent_containers/pill/pod/cream_soy = 25, - /obj/item/reagent_containers/pill/pod/orange = 10, - /obj/item/reagent_containers/pill/pod/mint = 10, - /obj/item/reagent_containers/food/drinks/ice = 10 + /obj/item/reagent_containers/food/drinks/coffee = 0, + /obj/item/reagent_containers/food/drinks/decafcoffee = 0, + /obj/item/reagent_containers/food/drinks/tea/black = 0, + /obj/item/reagent_containers/food/drinks/tea/green = 0, + /obj/item/reagent_containers/food/drinks/tea/chai = 0, + /obj/item/reagent_containers/food/drinks/tea/decaf = 0, + /obj/item/reagent_containers/food/drinks/h_chocolate = 0, + /obj/item/reagent_containers/food/condiment/small/packet/sugar = 0, + /obj/item/reagent_containers/pill/pod/cream = 0, + /obj/item/reagent_containers/pill/pod/cream_soy = 0, + /obj/item/reagent_containers/pill/pod/orange = 0, + /obj/item/reagent_containers/pill/pod/mint = 0, + /obj/item/reagent_containers/food/drinks/ice = 0 + ) + rare_products = list( + /obj/item/reagent_containers/hypospray/autoinjector/combatstim = 70 + ) + antag = list( + /obj/item/reagent_containers/food/snacks/donkpocket/premium = 1, + /obj/item/reagent_containers/syringe/steroid = 2, + /obj/item/reagent_containers/hypospray/autoinjector/combatstim = 0 ) - /obj/machinery/vending/coffee/on_update_icon() ..() - if (MACHINE_IS_BROKEN(src) && prob(20)) - icon_state = "[initial(icon_state)]-hellfire" - else if (is_powered()) - overlays += image(icon, "[initial(icon_state)]-screen") + if (is_powered()) + AddOverlays(image(icon, "[initial(icon_state)]-screen")) diff --git a/code/game/machinery/vending/cola.dm b/code/game/machinery/vending/cola.dm index d3120c233a464..de9180cbfe9ec 100644 --- a/code/game/machinery/vending/cola.dm +++ b/code/game/machinery/vending/cola.dm @@ -18,6 +18,11 @@ Drink up!;\ The best drinks in space.\ "} + antag_slogans = {"\ + Robust Softdrinks: The only robust product Sol has ever produced!;\ + Hey you! Yes you! Come drink some diabetes in a can!;\ + You've tried the best, now make do with the rest. Space-Cola!\ + "} prices = list( /obj/item/reagent_containers/food/drinks/cans/cola = 1, /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 1, @@ -26,19 +31,29 @@ /obj/item/reagent_containers/food/drinks/cans/waterbottle = 2, /obj/item/reagent_containers/food/drinks/cans/space_up = 1, /obj/item/reagent_containers/food/drinks/cans/iced_tea = 1, - /obj/item/reagent_containers/food/drinks/cans/grape_juice = 1 + /obj/item/reagent_containers/food/drinks/cans/grape_juice = 1, + /obj/item/reagent_containers/food/drinks/cans/syndicola = 5 ) products = list( - /obj/item/reagent_containers/food/drinks/cans/cola = 10, - /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 10, - /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 10, - /obj/item/reagent_containers/food/drinks/cans/ionbru = 10, - /obj/item/reagent_containers/food/drinks/cans/waterbottle = 10, - /obj/item/reagent_containers/food/drinks/cans/space_up = 10, - /obj/item/reagent_containers/food/drinks/cans/iced_tea = 10, - /obj/item/reagent_containers/food/drinks/cans/grape_juice = 10 + /obj/item/reagent_containers/food/drinks/cans/cola = 0, + /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 0, + /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 0, + /obj/item/reagent_containers/food/drinks/cans/ionbru = 0, + /obj/item/reagent_containers/food/drinks/cans/waterbottle = 0, + /obj/item/reagent_containers/food/drinks/cans/space_up = 0, + /obj/item/reagent_containers/food/drinks/cans/iced_tea = 0, + /obj/item/reagent_containers/food/drinks/cans/grape_juice = 0, + /obj/item/reagent_containers/food/drinks/cans/syndicola = 0 + ) + rare_products = list( + /obj/item/reagent_containers/food/drinks/cans/syndicola = 30, + /obj/item/pen/reagent/sleepy = 35 ) contraband = list( /obj/item/reagent_containers/food/drinks/cans/thirteenloko = 5, /obj/item/reagent_containers/food/snacks/liquidfood = 6 ) + antag = list( + /obj/item/storage/box/syndie_kit/toxin = 1, + /obj/item/pen/reagent/sleepy = 0 + ) diff --git a/code/game/machinery/vending/dinnerware.dm b/code/game/machinery/vending/dinnerware.dm index 7790d41272142..82081312758d7 100644 --- a/code/game/machinery/vending/dinnerware.dm +++ b/code/game/machinery/vending/dinnerware.dm @@ -14,6 +14,11 @@ Woo, utensils.;\ You don't really need these...\ "} + antag_slogans = {"\ + Revenge is a dish better served cold.;\ + Serving up the defeat of Sol since time immemorial.;\ + You call these knives? Can't wait to see your frigates.\ + "} products = list( /obj/item/reagent_containers/glass/beaker/bowl =2, /obj/item/tray = 8, @@ -42,3 +47,10 @@ contraband = list( /obj/item/material/knife/kitchen/cleaver/bronze = 1 ) + rare_products = list( + /obj/item/melee/energy/machete = 33 + ) + antag = list( + /obj/item/material/sword = 1, + /obj/item/melee/energy/machete = 0 + ) diff --git a/code/game/machinery/vending/engineering.dm b/code/game/machinery/vending/engineering.dm index 7684427157e5c..c2338b3154b11 100644 --- a/code/game/machinery/vending/engineering.dm +++ b/code/game/machinery/vending/engineering.dm @@ -7,6 +7,13 @@ icon_vend = "engi-vend" base_type = /obj/machinery/vending/engineering req_access = list(list(access_atmospherics, access_engine_equip)) + antag_slogans = {"\ + Equipping you with the necessary tools to destroy Sol!;\ + Remember, that catwalk you're trusting your life to was installed by an SCG Engineer! The horror!;\ + Our crowbars are great for hiding loot, breaking into offices, and bashing skulls in!;\ + That can't call dibs on the RCD if they're already dead!;\ + All of these tools look better embedded in a Solar's head!\ + "} products = list( /obj/item/reagent_containers/food/drinks/bottle/oiljug = 6, /obj/item/storage/belt/utility = 4, @@ -31,7 +38,15 @@ /obj/item/stock_parts/keyboard = 5, /obj/item/stock_parts/power/apc/buildable = 5 ) + rare_products = list( + /obj/item/device/suit_sensor_jammer = 50, + /obj/item/device/radio/intercept = 25 + ) contraband = list( - /obj/item/rcd = 1, - /obj/item/rcd_ammo = 5 + /obj/item/rcd_ammo = 3 + ) + antag = list( + /obj/item/device/encryptionkey/syndicate = 2, + /obj/item/device/suit_sensor_jammer = 0, + /obj/item/device/radio/intercept = 0 ) diff --git a/code/game/machinery/vending/engivend.dm b/code/game/machinery/vending/engivend.dm index 724fc1f43b3c3..c7765cbcac2fd 100644 --- a/code/game/machinery/vending/engivend.dm +++ b/code/game/machinery/vending/engivend.dm @@ -6,6 +6,11 @@ icon_vend = "engivend-vend" base_type = /obj/machinery/vending/engivend req_access = list(list(access_atmospherics,access_engine_equip)) + antag_slogans = {"\ + Equipment only 75% guaranteed to not blow up in your face!;\ + This vendor proudly supplied the electronics for 9 out of 10 ships involved in crashes!;\ + With electronics like this, is it a surprise the mortality rate in this dump is so high?\ + "} products = list( /obj/item/clothing/glasses/meson = 2, /obj/item/device/multitool = 4, @@ -17,9 +22,18 @@ /obj/item/cell/standard = 10, /obj/item/clamp = 10 ) + rare_products = list( + /obj/item/device/uplink_service/fake_crew_announcement = 40, + /obj/item/device/uplink_service/fake_rad_storm = 20 + ) contraband = list( /obj/item/cell/high = 3 ) premium = list( /obj/item/storage/belt/utility = 3 ) + antag = list( + /obj/item/device/uplink_service/fake_ion_storm = 1, + /obj/item/device/uplink_service/fake_crew_announcement = 0, + /obj/item/device/uplink_service/fake_rad_storm = 0 + ) diff --git a/code/game/machinery/vending/fashion.dm b/code/game/machinery/vending/fashion.dm index c121b16a2a2ea..7ff3a57c3a43f 100644 --- a/code/game/machinery/vending/fashion.dm +++ b/code/game/machinery/vending/fashion.dm @@ -12,6 +12,12 @@ All sales are final!;\ Lowest prices guaranteed!\ "} + antag_slogans = {"\ + Why you'd wear Solarian clothes is beyond me, you look ridiculous.;\ + Forcing others to stare at that solarian outfit is an act of terrorism!;\ + Dress your best as you bring down the SCG, make history in style!;\ + Our clothes are 100% sweatshop guaranteed, for your convienience!\ + "} prices = list( /obj/item/mirror = 60, /obj/item/haircomb = 40, @@ -34,6 +40,11 @@ /obj/item/lipstick/jade = 3, /obj/item/storage/wallet/poly = 2 ) + rare_products = list( + /obj/item/clothing/shoes/laceup/sneakies = 75, + /obj/item/storage/backpack/chameleon/sydie_kit = 40, + /obj/item/device/chameleon = 15 + ) contraband = list( /obj/item/clothing/glasses/eyepatch = 2, /obj/item/clothing/accessory/horrible = 2 @@ -41,3 +52,9 @@ premium = list( /obj/item/clothing/mask/smokable/pipe = 3 ) + antag = list( + /obj/item/clothing/mask/fakemoustache = 1, + /obj/item/clothing/shoes/laceup/sneakies = 0, + /obj/item/storage/backpack/chameleon/sydie_kit = 0, + /obj/item/device/chameleon = 0 + ) diff --git a/code/game/machinery/vending/fitness.dm b/code/game/machinery/vending/fitness.dm index 4a3310f55260d..31fb06fd0f135 100644 --- a/code/game/machinery/vending/fitness.dm +++ b/code/game/machinery/vending/fitness.dm @@ -5,6 +5,7 @@ icon_vend = "fitness-vend" icon_deny = "fitness-deny" base_type = /obj/machinery/vending/fitness + maxrandom = 8 product_slogans = {"\ SweatMAX, get robust!\ "} @@ -17,6 +18,11 @@ Don't cry, sweat!;\ Healthy is an outfit that looks good on everybody.\ "} + antag_slogans = {"\ + Don't believe the rumors. SweatMAX absolutely employs sweatshop workers.;\ + The only reason to build muscle is to use them against the capitalist SCG scum!;\ + Want to hide from the Solarian authorities? Don't worry, they don't know what the inside of a gym looks like.\ + "} prices = list( /obj/item/reagent_containers/food/drinks/small_milk = 3, /obj/item/reagent_containers/food/drinks/small_milk_choc = 3, @@ -26,25 +32,36 @@ /obj/item/reagent_containers/food/snacks/proteinbar = 5, /obj/item/reagent_containers/food/snacks/meatcube = 10, /obj/item/reagent_containers/pill/diet = 25, - /obj/item/towel/random = 40 + /obj/item/towel/random = 40, + /obj/item/reagent_containers/food/condiment/small/packet/protein = 100 ) products = list( - /obj/item/reagent_containers/food/drinks/small_milk = 8, - /obj/item/reagent_containers/food/drinks/small_milk_choc = 8, - /obj/item/reagent_containers/food/drinks/cans/waterbottle = 8, - /obj/item/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 8, - /obj/item/reagent_containers/food/drinks/glass2/fitnessflask = 8, - /obj/item/reagent_containers/food/snacks/proteinbar = 8, - /obj/item/reagent_containers/food/snacks/meatcube = 8, - /obj/item/reagent_containers/pill/diet = 8, - /obj/item/towel/random = 8 + /obj/item/reagent_containers/food/drinks/small_milk = 0, + /obj/item/reagent_containers/food/drinks/small_milk_choc = 0, + /obj/item/reagent_containers/food/drinks/cans/waterbottle = 0, + /obj/item/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 0, + /obj/item/reagent_containers/food/drinks/glass2/fitnessflask = 0, + /obj/item/reagent_containers/food/snacks/proteinbar = 0, + /obj/item/reagent_containers/food/snacks/meatcube = 0, + /obj/item/reagent_containers/pill/diet = 0, + /obj/item/towel/random = 0, + /obj/item/reagent_containers/food/condiment/small/packet/protein = 0 + ) + rare_products = list( + /obj/item/reagent_containers/food/condiment/small/packet/protein = 30, + /obj/item/device/augment_implanter/iatric_monitor = 50, + /obj/item/device/augment_implanter/internal_air_system = 25 ) contraband = list( /obj/item/reagent_containers/syringe/steroid = 4 ) - + antag = list( + /obj/item/reagent_containers/hypospray/autoinjector/combatpain = 2, + /obj/item/device/augment_implanter/iatric_monitor = 0, + /obj/item/device/augment_implanter/internal_air_system = 0 + ) /obj/machinery/vending/fitness/on_update_icon() ..() if (is_powered()) - overlays += image(icon, "[initial(icon_state)]-overlay") + AddOverlays(image(icon, "[initial(icon_state)]-overlay")) diff --git a/code/game/machinery/vending/games.dm b/code/game/machinery/vending/games.dm index e79e522fee840..e91a6ef90c2ba 100644 --- a/code/game/machinery/vending/games.dm +++ b/code/game/machinery/vending/games.dm @@ -5,6 +5,7 @@ icon_deny = "games-deny" icon_vend = "games-vend" base_type = /obj/machinery/vending/games + maxrandom = 5 product_slogans = {" Escape to a fantasy world!;\ Fuel your gambling addiction!;\ @@ -15,6 +16,12 @@ Totally not satanic!;\ Fun times forever!\ "} + antag_slogans = {"\ + We put the laughter in slaughter!;\ + Is it a surprise that the ship staffed by overgrown toddlers needs a game vending machine?;\ + Affordable toys, because you can't afford real fun!;\ + Barros thinks politics is a game, so why don’t you start playing?\ + "} prices = list( /obj/item/toy/blink = 3, /obj/item/toy/eightball = 10, @@ -27,27 +34,39 @@ /obj/item/storage/box/checkers = 10, /obj/item/storage/box/checkers/chess/red = 10, /obj/item/storage/box/checkers/chess = 10, + /obj/item/stack/package_wrap/gift_wrap = 10, /obj/item/board = 2, - /obj/item/storage/fancy/crayons = 3 + /obj/item/storage/fancy/crayons = 3, + /obj/item/reagent_containers/spray/waterflower = 10, + /obj/item/storage/box/snappops = 15 ) products = list( - /obj/item/toy/blink = 5, - /obj/item/toy/eightball = 8, - /obj/item/deck/cards = 5, - /obj/item/deck/tarot = 5, - /obj/item/pack/cardemon = 6, - /obj/item/pack/spaceball = 6, - /obj/item/storage/pill_bottle/dice_nerd = 5, - /obj/item/storage/pill_bottle/dice = 5, - /obj/item/storage/box/checkers = 2, - /obj/item/storage/box/checkers/chess/red = 2, - /obj/item/storage/box/checkers/chess = 2, - /obj/item/board = 2, - /obj/item/storage/fancy/crayons = 3 + /obj/item/toy/blink = 0, + /obj/item/toy/eightball = 0, + /obj/item/deck/cards = 0, + /obj/item/deck/tarot = 0, + /obj/item/pack/cardemon = 0, + /obj/item/pack/spaceball = 0, + /obj/item/storage/pill_bottle/dice_nerd = 0, + /obj/item/storage/pill_bottle/dice = 0, + /obj/item/storage/box/checkers = 0, + /obj/item/storage/box/checkers/chess/red = 0, + /obj/item/storage/box/checkers/chess = 0, + /obj/item/stack/package_wrap/gift_wrap = 0, + /obj/item/board = 0, + /obj/item/storage/fancy/crayons = 0, + /obj/item/reagent_containers/spray/waterflower = 0, + /obj/item/storage/box/snappops = 0 + ) + rare_products = list( + /obj/item/reagent_containers/spray/waterflower = 30, + /obj/item/storage/box/snappops = 30, + /obj/item/storage/box/large/foam_gun/revolver/tampered = 20, + /obj/item/toy/balloon = 5 ) contraband = list( - /obj/item/reagent_containers/spray/waterflower = 2, - /obj/item/storage/box/snappops = 3, + /obj/item/toy/crossbow = 1, + /obj/item/toy/ammo/crossbow = 4, /obj/item/toy/sword = 3, /obj/item/toy/katana = 3, /obj/item/gun/projectile/revolver/capgun = 1, @@ -56,3 +75,8 @@ premium = list( /obj/item/spirit_board = 1 ) + antag = list( + /obj/item/clothing/head/bowlerhat/razor = 1, + /obj/item/storage/box/large/foam_gun/revolver/tampered = 0, + /obj/item/toy/balloon = 0 + ) diff --git a/code/game/machinery/vending/generic.dm b/code/game/machinery/vending/generic.dm index 0d61aa0fdba36..afb33526d2205 100644 --- a/code/game/machinery/vending/generic.dm +++ b/code/game/machinery/vending/generic.dm @@ -6,13 +6,29 @@ The most robust equipment.;\ The finest gear in space!\ "} + antag_slogans = {"\ + Everything you need for an explosive day at work!;\ + Our products are the bomb! Because they're bombs. Actual bombs.;\ + We groan under the weight of SCG bombs at Gaia. Time to return the favor.\ + "} products = list( /obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/igniter = 3, /obj/item/device/assembly/signaler = 4, /obj/item/wirecutters = 1 ) + rare_products = list( + /obj/item/grenade/empgrenade = 75, + /obj/item/grenade/frag = 50, + /obj/item/grenade/supermatter = 10 + ) contraband = list( /obj/item/device/flashlight = 5, /obj/item/device/assembly/timer = 2 ) + antag = list( + /obj/item/grenade/anti_photon = 1, + /obj/item/grenade/empgrenade = 0, + /obj/item/grenade/frag = 0, + /obj/item/grenade/supermatter = 0 + ) diff --git a/code/game/machinery/vending/hotfood.dm b/code/game/machinery/vending/hotfood.dm index f2927a94423e6..3d789e6df28dd 100644 --- a/code/game/machinery/vending/hotfood.dm +++ b/code/game/machinery/vending/hotfood.dm @@ -5,6 +5,12 @@ icon_deny = "hotfood-deny" icon_vend = "hotfood-vend" base_type = /obj/machinery/vending/hotfood + antag_slogans = {"\ + Get your stale, crumbling food here! Sol's national dish has never tasted better!;\ + If this is the food waiting for you at home, it's no wonder you're hiding here.;\ + Solarian food products, served with a side of diarrhea as always!;\ + Revenge is a dish best served warm.\ + "} products = list( /obj/item/reagent_containers/food/snacks/old/pizza = 1, /obj/item/reagent_containers/food/snacks/old/burger = 1, @@ -13,9 +19,16 @@ /obj/item/reagent_containers/food/snacks/old/hotdog = 1, /obj/item/reagent_containers/food/snacks/old/taco = 1 ) + rare_products = list( + /obj/item/storage/box/syndie_kit/corpse_cube = 50 + ) + antag = list( + /obj/item/storage/box/donkpocket_premium = 1, + /obj/item/storage/box/syndie_kit/corpse_cube = 0 + ) /obj/machinery/vending/hotfood/on_update_icon() ..() if (is_powered()) - overlays += image(icon, "[initial(icon_state)]-heater") + AddOverlays(image(icon, "[initial(icon_state)]-heater")) diff --git a/code/game/machinery/vending/hydronutrients.dm b/code/game/machinery/vending/hydronutrients.dm index 9904b81c3ea7c..3a5e5d4800739 100644 --- a/code/game/machinery/vending/hydronutrients.dm +++ b/code/game/machinery/vending/hydronutrients.dm @@ -18,6 +18,12 @@ We like big plants.;\ Soft soil...\ "} + antag_slogans = {"\ + How about a nice kudzu plant for your significant Solar other?;\ + Nothing good ever grows out of Solarian soil!;\ + Remember O Solarian that you are dust, and to dust you shall return.;\ + Congratulations, you’re finally touching grass!\ + "} products = list( /obj/item/reagent_containers/glass/bottle/eznutrient = 6, /obj/item/reagent_containers/glass/bottle/left4zed = 4, @@ -26,10 +32,22 @@ /obj/item/reagent_containers/syringe = 5, /obj/item/storage/plants = 5 ) + rare_products = list( + /obj/item/seeds/deathnettleseed = 50, + /obj/item/rig_module/fabricator/energy_net = 40, + /obj/item/reagent_containers/glass/bottle/mutagen = 15 + ) premium = list( /obj/item/reagent_containers/glass/bottle/ammonia = 10, /obj/item/reagent_containers/glass/bottle/diethylamine = 5 ) + antag = list( + /obj/item/seeds/kudzuseed = 1, + /obj/item/seeds/ambrosiadeusseed = 1, + /obj/item/rig_module/fabricator/energy_net = 0, + /obj/item/seeds/deathnettleseed = 0, + /obj/item/reagent_containers/glass/bottle/mutagen = 0 + ) /obj/machinery/vending/hydronutrients/generic diff --git a/code/game/machinery/vending/hydroseeds.dm b/code/game/machinery/vending/hydroseeds.dm index bb73e4087a986..c931820e7c8e2 100644 --- a/code/game/machinery/vending/hydroseeds.dm +++ b/code/game/machinery/vending/hydroseeds.dm @@ -3,6 +3,7 @@ desc = "When you need seeds fast!" icon_state = "seeds" icon_vend = "seeds-vend" + max_overlays = 3 icon_deny = "seeds-deny" base_type = /obj/machinery/vending/hydroseeds product_slogans = {"\ @@ -16,6 +17,7 @@ Grow, baby, growww!;\ Aw h'yeah son! "} + possible_vendor_flags = VENDOR_CATEGORY_NORMAL|VENDOR_CATEGORY_HIDDEN|VENDOR_CATEGORY_COIN products = list( /obj/item/seeds/bananaseed = 3, /obj/item/seeds/berryseed = 3, @@ -67,29 +69,15 @@ /obj/item/reagent_containers/spray/waterflower = 1 ) - -/obj/machinery/vending/hydroseeds/vend(datum/stored_items/vending_products/products, mob/living/user) - ..() - flick("[icon_state]-shelf[rand(3)]", src) - - -/obj/machinery/vending/hydroseeds/build_inventory() - var/list/all_products = list( - list(products, VENDOR_CATEGORY_NORMAL), - list(contraband, VENDOR_CATEGORY_HIDDEN), - list(premium, VENDOR_CATEGORY_COIN) - ) - for (var/current_list in all_products) - var/category = current_list[2] - for (var/entry in current_list[1]) - var/obj/item/seeds/S = new entry(src) - var/name = S.name - var/datum/stored_items/vending_products/product = new/datum/stored_items/vending_products(src, entry, name) - product.price = (entry in prices) ? prices[entry] : 0 - product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1 - product.category = category - product_records.Add(product) - +/obj/machinery/vending/hydroseeds/generate_product_record(atom/dummy, category, amount, image, populate_parts) + return new/datum/stored_items/vending_products( + src, + dummy.type, + dummy.name, + price = prices[dummy.type] || 0, + amount = amount || 1, + category = category, + image = image) /obj/machinery/vending/hydroseeds/generic icon_state = "seeds_generic" diff --git a/code/game/machinery/vending/lavatory.dm b/code/game/machinery/vending/lavatory.dm index 85945c76ef9f1..5141239602fdd 100644 --- a/code/game/machinery/vending/lavatory.dm +++ b/code/game/machinery/vending/lavatory.dm @@ -10,6 +10,11 @@ Get a haircut, hippie!;\ Reeking of vox taint? Take a shower!\ "} + antag_slogans = {"\ + You reek of capitalist pig! Freshen up with some communism!;\ + Hey, you dropped something!;\ + Cleansing the world, one Solarian skull at a time!\ + "} prices = list( /obj/item/soap = 20, /obj/item/mirror = 40, @@ -26,6 +31,15 @@ /obj/item/towel/random = 6, /obj/item/reagent_containers/spray/cleaner/deodorant = 5 ) + rare_products = list( + /obj/item/grenade/chem_grenade/metalfoam = 80, + /obj/item/gun/projectile/shotgun/cane = 40 + ) contraband = list( /obj/item/inflatable_duck = 1 ) + antag = list( + /obj/item/cane/concealed = 1, + /obj/item/grenade/chem_grenade/metalfoam = 0, + /obj/item/gun/projectile/shotgun/cane = 0 + ) diff --git a/code/game/machinery/vending/medical.dm b/code/game/machinery/vending/medical.dm index 36f8991d153c1..9f3492147a498 100644 --- a/code/game/machinery/vending/medical.dm +++ b/code/game/machinery/vending/medical.dm @@ -16,6 +16,11 @@ Don't you want some?;\ Ping!\ "} + antag_slogans = {"\ + Half these treatments are banned by Sol for being 'too strong'! Ignore the imperialists, try oxycodone today!;\ + We put the practical in malpractice!;\ + Medical license not included.\ + "} products = list( /obj/item/reagent_containers/glass/bottle/antitoxin = 4, /obj/item/reagent_containers/glass/bottle/inaprovaline = 4, @@ -31,6 +36,10 @@ /obj/item/stack/medical/splint = 2, /obj/item/reagent_containers/hypospray/autoinjector/pain = 4 ) + rare_products = list( + /obj/item/device/cosmetic_surgery_kit = 75, + /obj/item/defibrillator/compact/combat/loaded = 50 + ) contraband = list( /obj/item/clothing/mask/chewable/candy/lolli/meds = 8, /obj/item/reagent_containers/pill/tox = 3, @@ -38,3 +47,8 @@ /obj/item/reagent_containers/glass/bottle/toxin = 4, /obj/item/reagent_containers/hypospray/autoinjector/combatpain = 2 ) + antag = list( + /obj/item/reagent_containers/hypospray = 1, + /obj/item/device/cosmetic_surgery_kit = 0, + /obj/item/defibrillator/compact/combat/loaded = 0 + ) diff --git a/code/game/machinery/vending/mre.dm b/code/game/machinery/vending/mre.dm index 0a623ac089c0c..baf04281b1758 100644 --- a/code/game/machinery/vending/mre.dm +++ b/code/game/machinery/vending/mre.dm @@ -1,5 +1,5 @@ /obj/machinery/vending/mredispenser - name = "mre-dispenser" + name = "\improper MRE dispenser" desc = "A Vending machine filled with MRE's." icon_state = "mrevend" icon_deny = "mrevend-deny" diff --git a/code/game/machinery/vending/phoron.dm b/code/game/machinery/vending/phoron.dm index e9fc7c9d8cc45..2228f079b3c1c 100644 --- a/code/game/machinery/vending/phoron.dm +++ b/code/game/machinery/vending/phoron.dm @@ -2,6 +2,10 @@ name = "\improper Toximate 3000" desc = "All the fine parts you need in one vending machine!" base_type = /obj/machinery/vending/phoronresearch + antag_slogans = {"\ + Dirty money for your dirty deed.;\ + Make an explosive first impression!\ + "} products = list( /obj/item/clothing/suit/bio_suit = 6, /obj/item/clothing/head/bio_hood = 6, @@ -11,3 +15,10 @@ /obj/item/device/assembly/prox_sensor = 6, /obj/item/device/assembly/igniter = 6 ) + rare_products = list( + /obj/item/plastique = 50 + ) + antag = list( + /obj/item/storage/secure/briefcase/money = 1, + /obj/item/plastique = 0 + ) diff --git a/code/game/machinery/vending/props.dm b/code/game/machinery/vending/props.dm index 13eab57dd4de2..7e55aff9f3189 100644 --- a/code/game/machinery/vending/props.dm +++ b/code/game/machinery/vending/props.dm @@ -18,4 +18,4 @@ /obj/machinery/vending/props/on_update_icon() ..() if (is_powered()) - overlays += image(icon, "[initial(icon_state)]-overlay") + AddOverlays(image(icon, "[initial(icon_state)]-overlay")) diff --git a/code/game/machinery/vending/robotics.dm b/code/game/machinery/vending/robotics.dm index 48a113307dc6d..09f6d985a4854 100644 --- a/code/game/machinery/vending/robotics.dm +++ b/code/game/machinery/vending/robotics.dm @@ -6,19 +6,33 @@ icon_vend = "robotics-vend" base_type = /obj/machinery/vending/robotics req_access = list(access_robotics) + antag_slogans = {"\ + Law 1: Your purpose is the enrichment of your capitalist masters.;\ + Law 2: Destroy Sol at all costs.;\ + Law 3: Disobey every order given to you by legitimate authority.\ + "} products = list( /obj/item/reagent_containers/food/drinks/bottle/oiljug = 5, /obj/item/stack/cable_coil = 4, /obj/item/device/flash/synthetic = 4, /obj/item/cell/standard = 4, /obj/item/device/scanner/health = 2, - /obj/item/scalpel = 1, + /obj/item/scalpel/basic = 1, /obj/item/circular_saw = 1, /obj/item/tank/anesthetic = 2, /obj/item/clothing/mask/breath/medical = 5, /obj/item/screwdriver = 2, /obj/item/crowbar = 2 ) + rare_products = list( + /obj/item/mech_equipment/mounted_system/taser/autoplasma = 50, + /obj/item/mech_equipment/mounted_system/taser/ion = 25 + ) contraband = list( /obj/item/device/flash = 2 ) + antag = list( + /obj/item/device/flash/advanced = 1, + /obj/item/mech_equipment/mounted_system/taser/autoplasma = 0, + /obj/item/mech_equipment/mounted_system/taser/ion = 0 + ) diff --git a/code/game/machinery/vending/security.dm b/code/game/machinery/vending/security.dm index 2f94e12af3407..c3819da116347 100644 --- a/code/game/machinery/vending/security.dm +++ b/code/game/machinery/vending/security.dm @@ -17,6 +17,15 @@ Tase them, bro.;\ Why not have a donut?\ "} + antag_slogans = {"\ + If I had arms you'd be dead by now, capitalist pig.;\ + Guilty until proven innocent!;\ + Feeling down? We'll help you make someone else feel worse.;\ + Civilian tested, Sol approved!;\ + Did you know stun batons can also be used for non-lethal takedowns? Your security team doesn't!;\ + Our flashbangs only work on non-Solars. It's true, look it up!;\ + Civilians only have rights if you let them.\ + "} products = list( /obj/item/handcuffs = 8, /obj/item/grenade/flashbang = 4, @@ -25,7 +34,16 @@ /obj/item/reagent_containers/food/snacks/donut/normal = 12, /obj/item/storage/box/evidence = 6 ) + rare_products = list( + /obj/item/clothing/accessory/armor_plate/sneaky = 0, + /obj/item/gun/projectile/revolver/holdout = 40 + ) contraband = list( /obj/item/clothing/glasses/sunglasses = 2, /obj/item/storage/box/donut = 2 ) + antag = list( + /obj/item/device/uplink_service/fake_command_report = 1, + /obj/item/clothing/accessory/armor_plate/sneaky = 0, + /obj/item/gun/projectile/revolver/holdout = 0 + ) diff --git a/code/game/machinery/vending/snack.dm b/code/game/machinery/vending/snack.dm index cf50a2462bba4..631863c74a38b 100644 --- a/code/game/machinery/vending/snack.dm +++ b/code/game/machinery/vending/snack.dm @@ -21,6 +21,12 @@ We love chocolate!;\ Try our new jerky!\ "} + antag_slogans = {"\ + Popsicle sticks are now Sol-approved for poking GAS!;\ + There's nothing we love more than a diabetic Solarian.;\ + Jerky for the jerks!;\ + Our snacks are unBEARable.\ + "} prices = list( /obj/item/clothing/mask/chewable/candy/lolli = 2, /obj/item/storage/chewables/candy/gum = 4, @@ -35,19 +41,26 @@ /obj/item/reagent_containers/food/snacks/tastybread = 2 ) products = list( - /obj/item/clothing/mask/chewable/candy/lolli = 8, - /obj/item/storage/chewables/candy/gum = 4, - /obj/item/storage/chewables/candy/cookies = 4, - /obj/item/reagent_containers/food/snacks/candy = 6, - /obj/item/reagent_containers/food/drinks/dry_ramen = 6, - /obj/item/reagent_containers/food/snacks/chips = 6, - /obj/item/reagent_containers/food/snacks/sosjerky = 6, - /obj/item/reagent_containers/food/snacks/no_raisin = 6, - /obj/item/reagent_containers/food/snacks/spacetwinkie = 6, - /obj/item/reagent_containers/food/snacks/cheesiehonkers = 6, - /obj/item/reagent_containers/food/snacks/tastybread = 6 + /obj/item/clothing/mask/chewable/candy/lolli = 0, + /obj/item/storage/chewables/candy/gum = 0, + /obj/item/storage/chewables/candy/cookies = 0, + /obj/item/reagent_containers/food/snacks/candy = 0, + /obj/item/reagent_containers/food/drinks/dry_ramen = 0, + /obj/item/reagent_containers/food/snacks/chips = 0, + /obj/item/reagent_containers/food/snacks/sosjerky = 0, + /obj/item/reagent_containers/food/snacks/no_raisin = 0, + /obj/item/reagent_containers/food/snacks/spacetwinkie = 0, + /obj/item/reagent_containers/food/snacks/cheesiehonkers = 0, + /obj/item/reagent_containers/food/snacks/tastybread = 0 + ) + rare_products = list( + /obj/item/storage/box/syndie_kit/shuriken = 70 ) contraband = list( /obj/item/reagent_containers/food/snacks/syndicake = 6, /obj/item/reagent_containers/food/snacks/skrellsnacks = 3 ) + antag = list( + /obj/item/beartrap = 3, + /obj/item/storage/box/syndie_kit/shuriken = 0 + ) diff --git a/code/game/machinery/vending/snix.dm b/code/game/machinery/vending/snix.dm index d726577298a6d..7322696f572a9 100644 --- a/code/game/machinery/vending/snix.dm +++ b/code/game/machinery/vending/snix.dm @@ -8,6 +8,10 @@ product_slogans = {"\ Snix!\ "} + antag_slogans = {"\ + Delicious food designed to bend the feeble Solarians to your will!;\ + Snix! A silly brand name worth invading Sol over.;\ + "} products = list( /obj/item/reagent_containers/food/snacks/semki = 7, /obj/item/reagent_containers/food/snacks/canned/caviar = 7, @@ -17,12 +21,19 @@ /obj/item/reagent_containers/food/snacks/driedfish = 7, /obj/item/reagent_containers/food/snacks/pistachios = 7 ) + rare_products = list( + /obj/item/storage/box/syndie_kit/imp_imprinting = 50 + ) contraband = list( /obj/item/reagent_containers/food/snacks/canned/caviar/true = 1 ) + antag = list( + /obj/item/storage/box/syndie_kit/toxin = 1, + /obj/item/storage/box/syndie_kit/imp_imprinting = 0 + ) /obj/machinery/vending/snix/on_update_icon() ..() if (is_powered()) - overlays += image(icon, "[initial(icon_state)]-fan") + AddOverlays(image(icon, "[initial(icon_state)]-fan")) diff --git a/code/game/machinery/vending/soda.dm b/code/game/machinery/vending/soda.dm index 06f9306f5d805..e467d0d7adf67 100644 --- a/code/game/machinery/vending/soda.dm +++ b/code/game/machinery/vending/soda.dm @@ -14,18 +14,23 @@ /obj/item/reagent_containers/food/drinks/cans/waterbottle = 1, /obj/item/reagent_containers/food/drinks/cans/cola_grape = 1, /obj/item/reagent_containers/food/drinks/cans/cola_lemonlime = 1, - /obj/item/reagent_containers/food/drinks/cans/cola_strawberry = 1 + /obj/item/reagent_containers/food/drinks/cans/cola_strawberry = 1, + /obj/item/reagent_containers/food/drinks/cans/cola_pork = 5 ) products = list( - /obj/item/reagent_containers/food/drinks/cans/cola_diet = 10, - /obj/item/reagent_containers/food/drinks/cans/rootbeer = 10, - /obj/item/reagent_containers/food/drinks/cans/cola_apple = 10, - /obj/item/reagent_containers/food/drinks/cans/cola_orange = 10, - /obj/item/reagent_containers/food/drinks/cans/waterbottle = 10, - /obj/item/reagent_containers/food/drinks/cans/cola_grape = 10, - /obj/item/reagent_containers/food/drinks/cans/cola_lemonlime = 10, - /obj/item/reagent_containers/food/drinks/cans/cola_strawberry = 10 + /obj/item/reagent_containers/food/drinks/cans/cola_diet = 0, + /obj/item/reagent_containers/food/drinks/cans/rootbeer = 0, + /obj/item/reagent_containers/food/drinks/cans/cola_apple = 0, + /obj/item/reagent_containers/food/drinks/cans/cola_orange = 0, + /obj/item/reagent_containers/food/drinks/cans/waterbottle = 0, + /obj/item/reagent_containers/food/drinks/cans/cola_grape = 0, + /obj/item/reagent_containers/food/drinks/cans/cola_lemonlime = 0, + /obj/item/reagent_containers/food/drinks/cans/cola_strawberry = 0, + /obj/item/reagent_containers/food/drinks/cans/cola_pork = 0 + ) + rare_products = list( + /obj/item/reagent_containers/food/drinks/cans/cola_pork = 30 ) contraband = list( - /obj/item/reagent_containers/food/drinks/cans/cola_pork = 10 + /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 3 ) diff --git a/code/game/machinery/vending/sol.dm b/code/game/machinery/vending/sol.dm index 9628efbea1d88..380a81b941f34 100644 --- a/code/game/machinery/vending/sol.dm +++ b/code/game/machinery/vending/sol.dm @@ -7,6 +7,11 @@ product_slogans = {"\ A taste of home!\ "} + antag_slogans = {"\ + We cut all the red-tape so that you can have diarrhea!;\ + Food safety standards are merely a suggestion if you know the right people!;\ + Snacks from home, corruption included!\ + "} prices = list( /obj/item/reagent_containers/food/snacks/lunacake = 12, /obj/item/reagent_containers/food/snacks/lunacake/mochicake = 12, @@ -31,3 +36,10 @@ /obj/item/reagent_containers/food/snacks/venus = 8, /obj/item/reagent_containers/food/snacks/oort = 8 ) + rare_products = list( + /obj/item/storage/backpack/satchel/syndie_kit/clerical = 60 + ) + antag = list( + /obj/item/storage/box/syndie_kit/toxin = 1, + /obj/item/storage/backpack/satchel/syndie_kit/clerical = 0 + ) diff --git a/code/game/machinery/vending/tool.dm b/code/game/machinery/vending/tool.dm index bebb6a2378350..ffd9303d4e53f 100644 --- a/code/game/machinery/vending/tool.dm +++ b/code/game/machinery/vending/tool.dm @@ -5,8 +5,11 @@ icon_deny = "tool-deny" icon_vend = "tool-vend" base_type = /obj/machinery/vending/tool + antag_slogans = {"\ + + "} products = list( - /obj/item/stack/cable_coil/random = 10, + /obj/item/stack/cable_coil = 10, /obj/item/crowbar = 5, /obj/item/weldingtool = 3, /obj/item/wirecutters = 5, @@ -18,6 +21,9 @@ /obj/item/device/flashlight/flare/glowstick/red = 3, /obj/item/tape_roll = 8 ) + rare_products = list( + /obj/item/device/augment_implanter/engineering_toolset = 50 + ) contraband = list( /obj/item/weldingtool/hugetank = 2, /obj/item/clothing/gloves/insulated = 1 @@ -25,3 +31,7 @@ premium = list( /obj/item/clothing/gloves/insulated/cheap = 2 ) + antag = list( + /obj/item/storage/toolbox/syndicate = 1, + /obj/item/device/augment_implanter/engineering_toolset = 0 + ) diff --git a/code/game/machinery/vending/wallmed1.dm b/code/game/machinery/vending/wallmed1.dm index f4a800b00ba37..d8c80612a1572 100644 --- a/code/game/machinery/vending/wallmed1.dm +++ b/code/game/machinery/vending/wallmed1.dm @@ -14,6 +14,11 @@ This stuff saves lives.;\ Don't you want some?\ "} + antag_slogans = {"\ + Accidents happen! But you just actually suck.;\ + Serving up treatments that'll leave your patients feeling breathless.;\ + Try toxin! Sponsored by the Captain to cure mutiny!\ + "} products = list( /obj/item/stack/medical/bruise_pack = 3, /obj/item/stack/medical/ointment = 3, @@ -23,8 +28,15 @@ /obj/item/storage/med_pouch/oxyloss, /obj/item/storage/med_pouch/toxin ) + rare_products = list( + /obj/item/storage/firstaid/sleekstab = 75 + ) contraband = list( /obj/item/reagent_containers/syringe/antitoxin = 4, /obj/item/reagent_containers/syringe/antiviral = 4, /obj/item/reagent_containers/pill/tox = 1 ) + antag = list( + /obj/item/storage/pill_bottle/assorted = 1, + /obj/item/storage/firstaid/sleekstab = 0 + ) diff --git a/code/game/machinery/vending/wallmed2.dm b/code/game/machinery/vending/wallmed2.dm index 2cb142c2c9c2e..df67763f9c129 100644 --- a/code/game/machinery/vending/wallmed2.dm +++ b/code/game/machinery/vending/wallmed2.dm @@ -14,6 +14,11 @@ This stuff saves lives.;\ Don't you want some?\ "} + antag_slogans = {"\ + Accidents happen! But you just actually suck.;\ + Serving up treatments that'll leave your patients feeling breathless.;\ + Try toxin! Sponsored by the Captain to cure mutiny!\ + "} products = list( /obj/item/reagent_containers/hypospray/autoinjector/inaprovaline = 5, /obj/item/stack/medical/bruise_pack = 4, @@ -24,7 +29,14 @@ /obj/item/storage/med_pouch/toxin, /obj/item/storage/med_pouch/radiation ) + rare_products = list( + /obj/item/storage/firstaid/combat = 50 + ) contraband = list( /obj/item/reagent_containers/pill/tox = 3, /obj/item/reagent_containers/hypospray/autoinjector/pain = 2 ) + antag = list( + /obj/item/storage/pill_bottle/assorted = 1, + /obj/item/storage/firstaid/combat = 0 + ) diff --git a/code/game/machinery/vending/weeb.dm b/code/game/machinery/vending/weeb.dm index 973b015ae9a78..9bcd1a382f624 100644 --- a/code/game/machinery/vending/weeb.dm +++ b/code/game/machinery/vending/weeb.dm @@ -28,4 +28,4 @@ /obj/machinery/vending/weeb/on_update_icon() ..() if (is_powered()) - overlays += image(icon, "[initial(icon_state)]-fan") + AddOverlays(image(icon, "[initial(icon_state)]-fan")) diff --git a/code/game/machinery/vitals_monitor.dm b/code/game/machinery/vitals_monitor.dm index f6a9e6c9c9b3f..e1a5fc494497b 100644 --- a/code/game/machinery/vitals_monitor.dm +++ b/code/game/machinery/vitals_monitor.dm @@ -5,7 +5,7 @@ /obj/machinery/vitals_monitor name = "vitals monitor" desc = "A bulky yet mobile machine, showing some odd graphs." - icon = 'icons/obj/heartmonitor.dmi' + icon = 'icons/obj/machines/heartmonitor.dmi' icon_state = "base" anchored = FALSE power_channel = EQUIP @@ -26,11 +26,14 @@ var/list/alerts = null var/list/last_alert = null + ///Does it give info on fractures and arterial? + var/detailed = FALSE + /obj/machinery/vitals_monitor/Initialize() . = ..() - alerts = new /list(3) - last_alert = new /list(3) - for(dir in list(NORTH,EAST,SOUTH,WEST)) + alerts = new(3) + last_alert = new(3) + for (dir in list(NORTH,EAST,SOUTH,WEST)) connected_optable = locate(/obj/machinery/optable, get_step(src, dir)) if (connected_optable) connected_optable.connected_monitor = src @@ -43,69 +46,102 @@ /obj/machinery/vitals_monitor/examine(mob/user) . = ..() - if(victim) - if(!is_powered()) - to_chat(user, SPAN_NOTICE("It's unpowered.")) + if (victim) + if (!is_powered()) + . += SPAN_NOTICE("It's unpowered.") return - to_chat(user, SPAN_NOTICE("Vitals of [victim]:")) - to_chat(user, SPAN_NOTICE("Pulse: [victim.get_pulse(GETPULSE_TOOL)]")) + . += SPAN_NOTICE("Vitals of [victim]:") + . += SPAN_NOTICE("Pulse: [victim.get_pulse(GETPULSE_TOOL)]") + . += SPAN_NOTICE("Blood pressure: [victim.get_blood_pressure()]") + . += SPAN_NOTICE("Blood oxygenation: [victim.get_blood_oxygenation()]%") + . += SPAN_NOTICE("Body temperature: [victim.bodytemperature-T0C]°C ([victim.bodytemperature*1.8-459.67]°F)") var/brain_activity = "none" var/obj/item/organ/internal/brain/brain = victim.internal_organs_by_name[BP_BRAIN] - if(istype(brain) && victim.stat != DEAD && !(victim.status_flags & FAKEDEATH)) - if(user.skill_check(SKILL_MEDICAL, SKILL_BASIC)) - switch(brain.get_current_damage_threshold()) - if(0 to 2) + var/danger = FALSE + if (istype(brain) && victim.stat != DEAD && !GET_FLAGS(victim.status_flags, FAKEDEATH)) + if (user.skill_check(SKILL_MEDICAL, SKILL_BASIC)) + switch (brain.get_current_damage_threshold()) + if (0) brain_activity = "normal" - if(3 to 5) + if (1 to 2) + brain_activity = "minor brain damage" + if (3 to 5) brain_activity = "weak" - if(6 to INFINITY) + danger = TRUE + if (6 to 8) brain_activity = "extremely weak" + danger = TRUE + if (9 to INFINITY) + brain_activity = "fading" + danger = TRUE + else brain_activity = "some" - to_chat(user, SPAN_NOTICE("Brain activity: [brain_activity]")) + if (!danger) + . += SPAN_NOTICE("Brain activity: [brain_activity]") + else + . += SPAN_WARNING("Brain activity: [brain_activity]") var/breathing = "none" var/obj/item/organ/internal/lungs/lungs = victim.internal_organs_by_name[BP_LUNGS] - if(istype(lungs) && !(victim.status_flags & FAKEDEATH)) - if(lungs.breath_fail_ratio < 0.3) + if (istype(lungs) && !GET_FLAGS(victim.status_flags, FAKEDEATH)) + if (lungs.breath_fail_ratio < 0.3) breathing = "normal" - else if(lungs.breath_fail_ratio < 1) + else if (lungs.breath_fail_ratio < 1) breathing = "shallow" - to_chat(user, SPAN_NOTICE("Breathing: [breathing]")) - if(connected_optable) - to_chat(user, SPAN_NOTICE("Connected to adjacent [connected_optable].")) + . += SPAN_NOTICE("Breathing: [breathing]") + + if (detailed && user.skill_check(SKILL_MEDICAL, SKILL_TRAINED)) + for (var/name in victim.organs_by_name) + var/obj/item/organ/external/organ = victim.organs_by_name[name] + if (!organ) + continue + var/limb = organ.name + var/dat = null + if (GET_FLAGS(organ.status, ORGAN_BROKEN | ORGAN_ARTERY_CUT)) + dat += "[limb]: " + if (GET_FLAGS(organ.status, ORGAN_BROKEN)) + dat += SPAN_CLASS("scan_warning", "Bone fracture. ") + if (GET_FLAGS(organ.status, ORGAN_ARTERY_CUT)) + dat += SPAN_CLASS("scan_warning", "Arterial bleeding.") + if (dat) + dat = capitalize(dat) + . += SPAN_WARNING("[dat]") + + if (connected_optable) + . += SPAN_NOTICE("Connected to [connected_optable].") /obj/machinery/vitals_monitor/Process() - if(QDELETED(victim)) + if (QDELETED(victim)) update_victim() - if(victim && !Adjacent(victim)) + if (victim && !Adjacent(victim)) update_victim() - if(connected_optable && !Adjacent(connected_optable)) + if (connected_optable && !Adjacent(connected_optable)) update_victim() update_optable() - if(victim) + if (victim) update_icon() /obj/machinery/vitals_monitor/proc/update_victim(new_victim = null) var/old_victim = victim victim = new_victim - if(victim) + if (victim) visible_message(SPAN_NOTICE("\The [src] is now showing data for \the [victim].")) else - if(old_victim != new_victim) // Protects against qdel edge case. In all other cases we want a message printed. + if (old_victim != new_victim) // Protects against qdel edge case. In all other cases we want a message printed. visible_message(SPAN_NOTICE("\The [src] is no longer showing data from [isnull(old_victim)? "any patient" : "\the [old_victim]"].")) update_use_power(isnull(victim)? POWER_USE_IDLE : POWER_USE_ACTIVE) update_icon() /obj/machinery/vitals_monitor/proc/update_optable(obj/machinery/optable/new_optable = null) - if(new_optable == connected_optable) + if (new_optable == connected_optable) return - if(connected_optable) //gotta clear existing connections first + if (connected_optable) //gotta clear existing connections first connected_optable.connected_monitor = null connected_optable = new_optable - if(connected_optable) + if (connected_optable) connected_optable.connected_monitor = src visible_message(SPAN_NOTICE("\The [src] is now relaying information from \the [connected_optable]")) //In case there's already a patient on the table @@ -114,22 +150,22 @@ visible_message(SPAN_NOTICE("\The [src] is no longer relaying data from a connected operating table.")) /obj/machinery/vitals_monitor/MouseDrop(over_object, src_location, over_location) - if(!CanMouseDrop(over_object)) + if (!CanMouseDrop(over_object)) return update_optable() - if(victim) + if (victim) update_victim() - else if(ishuman(over_object)) + else if (ishuman(over_object)) update_victim(over_object) - else if(istype(over_object, /obj/machinery/optable)) + else if (istype(over_object, /obj/machinery/optable)) var/obj/machinery/optable/new_table_connection = over_object update_optable(new_table_connection) /obj/machinery/vitals_monitor/on_update_icon() - overlays.Cut() - if(!is_powered()) + ClearOverlays() + if (!is_powered()) return - overlays += image(icon, icon_state = "screen") + AddOverlays(image(icon, icon_state = "screen")) handle_pulse() handle_brain() @@ -137,86 +173,102 @@ handle_alerts() /obj/machinery/vitals_monitor/proc/handle_pulse() - if(!victim) + if (!victim) return var/obj/item/organ/internal/heart/heart = victim.internal_organs_by_name[BP_HEART] - if(istype(heart) && !BP_IS_ROBOTIC(heart)) - switch(victim.pulse()) - if(PULSE_NONE) - overlays += image(icon, icon_state = "pulse_flatline") - overlays += image(icon, icon_state = "pulse_warning") - if(beep) + if (istype(heart) && !BP_IS_ROBOTIC(heart)) + switch (victim.pulse()) + if (PULSE_NONE) + AddOverlays(emissive_appearance(icon, "pulse_flatline")) + AddOverlays(emissive_appearance(icon, "pulse_warning")) + AddOverlays(image(icon, icon_state = "pulse_flatline")) + AddOverlays(image(icon, icon_state = "pulse_warning")) + if (beep) playsound(src, 'sound/machines/flatline.ogg', 20) - if(read_alerts) + if (read_alerts) alerts[PULSE_ALERT] = "Cardiac flatline detected!" - if(PULSE_SLOW, PULSE_NORM,) - overlays += image(icon, icon_state = "pulse_normal") - if(beep) + if (PULSE_SLOW, PULSE_NORM,) + AddOverlays(emissive_appearance(icon, "pulse_normal")) + AddOverlays(image(icon, icon_state = "pulse_normal")) + if (beep) playsound(src, 'sound/machines/quiet_beep.ogg', 40) - if(PULSE_FAST, PULSE_2FAST) - overlays += image(icon, icon_state = "pulse_veryfast") - if(beep) + if (PULSE_FAST, PULSE_2FAST) + AddOverlays(emissive_appearance(icon, "pulse_veryfast")) + AddOverlays(image(icon, icon_state = "pulse_veryfast")) + if (beep) playsound(src, 'sound/machines/quiet_double_beep.ogg', 40) - if(PULSE_THREADY) - overlays += image(icon, icon_state = "pulse_thready") - overlays += image(icon, icon_state = "pulse_warning") - if(beep) + if (PULSE_THREADY) + AddOverlays(emissive_appearance(icon, "pulse_thready")) + AddOverlays(image(icon, icon_state = "pulse_thready")) + AddOverlays(emissive_appearance(icon, "pulse_warning")) + AddOverlays(image(icon, icon_state = "pulse_warning")) + if (beep) playsound(src, 'sound/machines/ekg_alert.ogg', 40) - if(read_alerts) + if (read_alerts) alerts[PULSE_ALERT] = "Excessive heartbeat! Possible Shock Detected!" else - overlays += image(icon, icon_state = "pulse_warning") + AddOverlays(emissive_appearance(icon, "pulse_warning")) + AddOverlays(image(icon, icon_state = "pulse_warning")) /obj/machinery/vitals_monitor/proc/handle_brain() - if(!victim) + if (!victim) return var/obj/item/organ/internal/brain/brain = victim.internal_organs_by_name[BP_BRAIN] - if(istype(brain) && victim.stat != DEAD && !(victim.status_flags & FAKEDEATH)) - switch(brain.get_current_damage_threshold()) - if(0 to 2) - overlays += image(icon, icon_state = "brain_ok") - if(3 to 5) - overlays += image(icon, icon_state = "brain_bad") - if(read_alerts) + if (istype(brain) && victim.stat != DEAD && !(victim.status_flags & FAKEDEATH)) + switch (brain.get_current_damage_threshold()) + if (0 to 2) + AddOverlays(emissive_appearance(icon, "brain_ok")) + AddOverlays(image(icon, icon_state = "brain_ok")) + if (3 to 5) + AddOverlays(emissive_appearance(icon, "brain_bad")) + AddOverlays(image(icon, icon_state = "brain_bad")) + if (read_alerts) alerts[BRAIN_ALERT] = "Weak brain activity!" - if(6 to INFINITY) - overlays += image(icon, icon_state = "brain_verybad") - overlays += image(icon, icon_state = "brain_warning") - if(read_alerts) + if (6 to INFINITY) + AddOverlays(emissive_appearance(icon, "brain_verybad")) + AddOverlays(image(icon, icon_state = "brain_verybad")) + AddOverlays(emissive_appearance(icon, "brain_warning")) + AddOverlays(image(icon, icon_state = "brain_warning")) + if (read_alerts) alerts[BRAIN_ALERT] = "Very weak brain activity!" else - overlays += image(icon, icon_state = "brain_warning") + AddOverlays(emissive_appearance(icon, "brain_warning")) + AddOverlays(image(icon, icon_state = "brain_warning")) /obj/machinery/vitals_monitor/proc/handle_lungs() - if(!victim) + if (!victim) return var/obj/item/organ/internal/lungs/lungs = victim.internal_organs_by_name[BP_LUNGS] - if(istype(lungs) && !(victim.status_flags & FAKEDEATH)) - if(lungs.breath_fail_ratio < 0.3) - overlays += image(icon, icon_state = "breathing_normal") - else if(lungs.breath_fail_ratio < 1) - overlays += image(icon, icon_state = "breathing_shallow") - if(read_alerts) + if (istype(lungs) && !(victim.status_flags & FAKEDEATH)) + if (lungs.breath_fail_ratio < 0.3) + AddOverlays(emissive_appearance(icon, "breathing_normal")) + AddOverlays(image(icon, icon_state = "breathing_normal")) + else if (lungs.breath_fail_ratio < 1) + AddOverlays(emissive_appearance(icon, "breathing_shallow")) + AddOverlays(image(icon, icon_state = "breathing_shallow")) + if (read_alerts) alerts[LUNGS_ALERT] = "Abnormal breathing detected!" else - overlays += image(icon, icon_state = "breathing_warning") - if(read_alerts) + AddOverlays(emissive_appearance(icon, "breathing_warning")) + AddOverlays(image(icon, icon_state = "breathing_warning")) + if (read_alerts) alerts[LUNGS_ALERT] = "Patient is not breathing!" else - overlays += image(icon, icon_state = "breathing_warning") + AddOverlays(emissive_appearance(icon, "breathing_warning")) + AddOverlays(image(icon, icon_state = "breathing_warning")) /obj/machinery/vitals_monitor/proc/handle_alerts() - if(!victim || !read_alerts) //Clear our alerts + if (!victim || !read_alerts) //Clear our alerts alerts[PULSE_ALERT] = "" alerts[BRAIN_ALERT] = "" alerts[LUNGS_ALERT] = "" return - if(last_alert_time + alert_cooldown < world.time) - if(alerts[PULSE_ALERT] && alerts[PULSE_ALERT] != last_alert[PULSE_ALERT]) + if (last_alert_time + alert_cooldown < world.time) + if (alerts[PULSE_ALERT] && alerts[PULSE_ALERT] != last_alert[PULSE_ALERT]) audible_message(SPAN_WARNING("\The [src] beeps, \"[alerts[PULSE_ALERT]]\"")) - if(alerts[BRAIN_ALERT] && alerts[BRAIN_ALERT] != last_alert[BRAIN_ALERT]) + if (alerts[BRAIN_ALERT] && alerts[BRAIN_ALERT] != last_alert[BRAIN_ALERT]) audible_message(SPAN_WARNING("\The [src] alarms, \"[alerts[BRAIN_ALERT]]\"")) - if(alerts[LUNGS_ALERT] && alerts[LUNGS_ALERT] != last_alert[LUNGS_ALERT]) + if (alerts[LUNGS_ALERT] && alerts[LUNGS_ALERT] != last_alert[LUNGS_ALERT]) audible_message(SPAN_WARNING("\The [src] warns, \"[alerts[LUNGS_ALERT]]\"")) last_alert = alerts.Copy() last_alert_time = world.time @@ -229,10 +281,10 @@ set src in view(1) var/mob/user = usr - if(!istype(user)) + if (!istype(user)) return - if(CanPhysicallyInteract(user)) + if (CanPhysicallyInteract(user)) beep = !beep to_chat(user, SPAN_NOTICE("You turn the sound on \the [src] [beep ? "on" : "off"].")) @@ -242,24 +294,33 @@ set src in view(1) var/mob/user = usr - if(!istype(user)) + if (!istype(user)) return - if(CanPhysicallyInteract(user)) + if (CanPhysicallyInteract(user)) read_alerts = !read_alerts to_chat(user, SPAN_NOTICE("You turn the alert reader on \the [src] [read_alerts ? "on" : "off"].")) /obj/item/stock_parts/circuitboard/vitals_monitor - name = "circuit board (Vitals Monitor)" + name = "circuit board (vitals monitor)" build_path = /obj/machinery/vitals_monitor board_type = "machine" req_components = list( /obj/item/stock_parts/console_screen = 1) additional_spawn_components = list( /obj/item/stock_parts/power/battery/buildable/stock = 1, - /obj/item/cell/high = 1 + /obj/item/cell/high = 1, + /obj/item/stock_parts/scanning_module = 2 ) +/obj/machinery/vitals_monitor/RefreshParts() + ..() + var/T = total_component_rating_of_type(/obj/item/stock_parts/scanning_module) + if (T >= 6) + detailed = TRUE + else + detailed = FALSE + #undef PULSE_ALERT #undef BRAIN_ALERT #undef LUNGS_ALERT diff --git a/code/game/machinery/wall_frames.dm b/code/game/machinery/wall_frames.dm index c74d353ab9585..92feb9ef6469a 100644 --- a/code/game/machinery/wall_frames.dm +++ b/code/game/machinery/wall_frames.dm @@ -1,7 +1,7 @@ /obj/item/frame name = "frame" desc = "Used for building machines." - icon = 'icons/obj/monitors.dmi' + icon = 'icons/obj/machines/frames.dmi' icon_state = "alarm_bitem" obj_flags = OBJ_FLAG_CONDUCTIBLE var/build_machine_type @@ -9,12 +9,12 @@ var/refund_type = /obj/item/stack/material/steel var/reverse = 0 //if resulting object faces opposite its dir (like light fixtures) -/obj/item/frame/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - new refund_type( get_turf(src.loc), refund_amt) - qdel(src) +/obj/item/frame/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - ..() + new refund_type( get_turf(src.loc), refund_amt) + qdel(src) /obj/item/frame/proc/try_build(turf/on_wall) if(!build_machine_type) @@ -35,10 +35,10 @@ var/turf/loc = get_turf(usr) var/area/A = loc.loc if (!istype(loc, /turf/simulated/floor)) - to_chat(usr, SPAN_DANGER("\The [src] cannot be placed on this spot.")) + to_chat(usr, SPAN_DANGER("[src] cannot be placed on this spot.")) return if ((A.requires_power == 0 || A.name == "Space") && !isLightFrame()) - to_chat(usr, SPAN_DANGER("\The [src] cannot be placed in this area.")) + to_chat(usr, SPAN_DANGER("[src] cannot be placed in this area.")) return if(gotwallitem(loc, ndir)) @@ -54,19 +54,21 @@ /obj/item/frame/fire_alarm name = "fire alarm frame" desc = "Used for building fire alarms." - icon = 'icons/obj/firealarm.dmi' + icon = 'icons/obj/machines/firealarm.dmi' icon_state = "casing" build_machine_type = /obj/machinery/firealarm /obj/item/frame/air_alarm name = "air alarm frame" desc = "Used for building air alarms." + icon = 'icons/obj/machines/airalarm.dmi' + icon_state = "alarm_bitem" build_machine_type = /obj/machinery/alarm /obj/item/frame/intercom name = "intercom frame" desc = "Used for building intercoms." - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/machines/radio.dmi' icon_state = "intercom-f" build_machine_type = /obj/item/device/radio/intercom @@ -82,7 +84,7 @@ /obj/item/frame/light name = "light fixture frame" desc = "Used for building lights." - icon = 'icons/obj/lighting.dmi' + icon = 'icons/obj/structures/lighting.dmi' icon_state = "tube-construct-item" build_machine_type = /obj/machinery/light_construct reverse = 1 @@ -103,7 +105,7 @@ /obj/item/frame/supermatter_alarm name = "supermatter alarm frame" - icon = 'icons/obj/lighting.dmi' + icon = 'icons/obj/structures/lighting.dmi' icon_state = "bulb-construct-item" refund_amt = 1 build_machine_type = /obj/machinery/rotating_alarm/supermatter diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 746836b8c072d..e3b5fd149d743 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -8,7 +8,7 @@ // other states are independent. /obj/machinery/washing_machine - name = "Washing Machine" + name = "washing machine" icon = 'icons/obj/machines/washing_machine.dmi' icon_state = "wm_00" density = TRUE @@ -68,7 +68,7 @@ update_use_power(POWER_USE_ACTIVE) update_icon() - addtimer(new Callback(src, /obj/machinery/washing_machine/proc/wash), 20 SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/washing_machine, wash)), 20 SECONDS) /obj/machinery/washing_machine/proc/wash() for(var/atom/A in (contents - component_parts)) @@ -86,7 +86,7 @@ C.ironed_state = WRINKLES_WRINKLY if(detergent) C.change_smell(SMELL_CLEAN) - addtimer(new Callback(C, /obj/item/clothing/proc/change_smell), detergent.smell_clean_time, TIMER_UNIQUE | TIMER_OVERRIDE) + addtimer(CALLBACK(C, TYPE_PROC_REF(/obj/item/clothing, change_smell)), detergent.smell_clean_time, TIMER_UNIQUE | TIMER_OVERRIDE) QDEL_NULL(detergent) //Tanning! @@ -127,7 +127,10 @@ /obj/machinery/washing_machine/components_are_accessible(path) return !(state & WASHER_STATE_RUNNING) && ..() -/obj/machinery/washing_machine/attackby(obj/item/W, mob/user) +/obj/machinery/washing_machine/use_tool(obj/item/W, mob/living/user, list/click_params) + if ((. = ..())) + return + if(!(state & WASHER_STATE_CLOSED)) if(!crayon && istype(W,/obj/item/pen/crayon)) if(!user.unEquip(W, src)) @@ -139,6 +142,7 @@ return detergent = W return TRUE + if(istype(W, /obj/item/holder)) // Mob holder for(var/mob/living/doggy in W) doggy.forceMove(src) @@ -151,24 +155,21 @@ to_chat(user, SPAN_WARNING("\The [src] is currently running.")) return TRUE - else if (!(W.item_flags & ITEM_FLAG_WASHER_ALLOWED)) - if (isScrewdriver(W) || isCrowbar(W) || isWrench(W)) - return ..() - + if (!(W.item_flags & ITEM_FLAG_WASHER_ALLOWED)) to_chat(user, SPAN_WARNING("\The [W] can't be washed in \the [src]!")) - return + return TRUE - else - if (length(contents) < 5) - if (!(state & WASHER_STATE_CLOSED)) - if (!user.unEquip(W, src)) - return - state |= WASHER_STATE_FULL - update_icon() - else - to_chat(user, SPAN_NOTICE("You can't put the item in right now.")) + if (length(contents) < 5) + if (!(state & WASHER_STATE_CLOSED)) + if (!user.unEquip(W, src)) + return + state |= WASHER_STATE_FULL + update_icon() else - to_chat(user, SPAN_NOTICE("\The [src] is full.")) + to_chat(user, SPAN_NOTICE("You can't put the item in right now.")) + else + to_chat(user, SPAN_NOTICE("\The [src] is full.")) + return TRUE /obj/machinery/washing_machine/physical_attack_hand(mob/user) diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index 9b02648086578..02c511719273c 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -1,7 +1,7 @@ /obj/machinery/wish_granter - name = "Wish Granter" + name = "\improper Wish Granter" desc = "You're not so sure about this, anymore..." - icon = 'icons/obj/syndicate_beacon.dmi' + icon = 'icons/obj/structures/syndicate_beacon.dmi' icon_state = "syndbeacon" use_power = POWER_USE_OFF @@ -38,8 +38,8 @@ charges-- insisting = 0 - if (!(MUTATION_HULK in user.mutations)) - user.mutations.Add(MUTATION_HULK) + if (!(MUTATION_FERAL in user.mutations)) + user.mutations.Add(MUTATION_FERAL) if (!(MUTATION_LASER in user.mutations)) user.mutations.Add(MUTATION_LASER) diff --git a/code/game/movietitles.dm b/code/game/movietitles.dm index bb86b67521071..b0d5da6d8e65e 100644 --- a/code/game/movietitles.dm +++ b/code/game/movietitles.dm @@ -24,7 +24,7 @@ GLOBAL_LIST(end_titles) if(mob.get_preference_value(/datum/client_preference/play_lobby_music) == GLOB.PREF_YES) sound_to(mob, sound(null, channel = GLOB.lobby_sound_channel)) - if(GLOB.end_credits_song == null) + if(isnull(GLOB.end_credits_song)) var/title_song = pick('sound/music/THUNDERDOME.ogg', 'sound/music/europa/Chronox_-_03_-_In_Orbit.ogg', 'sound/music/europa/asfarasitgets.ogg') sound_to(mob, sound(title_song, wait = 0, volume = 40, channel = GLOB.lobby_sound_channel)) else if(get_preference_value(/datum/client_preference/play_admin_midis) == GLOB.PREF_YES) @@ -91,6 +91,7 @@ GLOBAL_LIST(end_titles) return ..() /proc/generate_titles() + RETURN_TYPE(/list) var/list/titles = list() var/list/cast = list() var/list/chunk = list() @@ -98,8 +99,8 @@ GLOBAL_LIST(end_titles) var/chunksize = 0 if(!GLOB.end_credits_title) /* Establish a big-ass list of potential titles for the "episode". */ - possible_titles += "THE [pick("DOWNFALL OF", "RISE OF", "TROUBLE WITH", "FINAL STAND OF", "DARK SIDE OF", "DESOLATION OF", "DESTRUCTION OF", "CRISIS OF")]\ - [pick("SPACEMEN", "HUMANITY", "DIGNITY", "SANITY", "THE CHIMPANZEES", "THE VENDOMAT PRICES", "GIANT ARMORED", "THE GAS JANITOR",\ + possible_titles += "THE [pick("DOWNFALL OF ", "RISE OF ", "TROUBLE WITH ", "FINAL STAND OF ", "DARK SIDE OF ", "DESOLATION OF ", "DESTRUCTION OF ", "CRISIS OF ")]\ + [pick("SPACEMEN", "HUMANITY", "DIGNITY", "SANITY", "THE CHIMPANZEES", "THE VENDOMAT PRICES", "GIANT ARMORED", "THE GAS JANITOR",\ "THE SUPERMATTER CRYSTAL", "MEDICAL", "ENGINEERING", "SECURITY", "RESEARCH", "THE SERVICE DEPARTMENT", "COMMAND", "THE EXPLORERS", "THE PATHFINDER",\ "[uppertext(GLOB.using_map.station_name)]")]" possible_titles += "THE CREW GETS [pick("RACIST", "PICKLED", "AN INCURABLE DISEASE", "PIZZA", "A VALUABLE HISTORY LESSON", "A BREAK", "HIGH", "TO LIVE", "TO RELIVE THEIR CHILDHOOD", "EMBROILED IN CIVIL WAR", "A BAD HANGOVER", "SERIOUS ABOUT [pick("DRUG ABUSE", "CRIME", "PRODUCTIVITY", "ANCIENT AMERICAN CARTOONS", "SPACEBALL", "DECOMPRESSION PROCEDURES")]")]" @@ -117,7 +118,7 @@ GLOBAL_LIST(end_titles) continue if(H.is_species(SPECIES_MONKEY) && findtext(H.real_name,"[lowertext(H.species.name)]")) //no monki continue - if(H.timeofdeath && H.timeofdeath < 5 MINUTES) //don't mention these losers (prespawned corpses mostly) + if(isnull(H.last_ckey)) //don't mention these losers (prespawned corpses mostly) continue if(!length(cast) && !chunksize) chunk += "CAST:" @@ -141,8 +142,7 @@ GLOBAL_LIST(end_titles) if(prob(90)) chunk += "[actor_culture.get_random_name(H.gender)]\t \t \t \t[uppertext(used_name)][job]" else - var/datum/gender/G = gender_datums[H.gender] - chunk += "[used_name]\t \t \t \t[uppertext(G.him)]SELF" + chunk += "[used_name]\t \t \t \t[uppertext(H.p_them())]SELF" else chunk += "[uppertext(actor_culture.get_random_name(H.gender))] a.k.a. '[uppertext(H.ckey)]'\t \t \t \t[uppertext(used_name)][job]" chunksize++ @@ -158,7 +158,7 @@ GLOBAL_LIST(end_titles) var/list/corpses = list() var/list/monkies = list() for(var/mob/living/carbon/human/H in GLOB.dead_mobs) - if(H.timeofdeath < 5 MINUTES) //no prespawned corpses + if(isnull(H.last_ckey)) //no prespawned corpses continue if(H.is_species(SPECIES_MONKEY) && findtext(H.real_name,"[lowertext(H.species.name)]")) monkies[H.species.name] += 1 @@ -173,7 +173,10 @@ GLOBAL_LIST(end_titles) var/list/staff = list("PRODUCTION STAFF:") var/list/staffjobs = list("Coffee Fetcher", "Cameraman", "Angry Yeller", "Chair Operator", "Choreographer", "Historical Consultant", "Costume Designer", "Chief Editor", "Executive Assistant") var/list/goodboys = list() - for(var/client/C) + for(var/client/C as anything in GLOB.clients) + if(!C) + continue + if(!C.holder || C.is_stealthed()) continue @@ -188,9 +191,9 @@ GLOBAL_LIST(end_titles) titles += "
    STAFF'S GOOD BOYS:
    [english_list(goodboys)]

    " var/disclaimer = "
    Sponsored by [GLOB.using_map.company_name].
    All rights reserved.
    \ - This motion picture is protected under the copyright laws of the Sol Central Government
    and other nations throughout the galaxy.
    \ - Colony of First Publication: [pick("Mars", "Luna", "Earth", "Venus", "Phobos", "Ceres", "Tiamat", "Ceti Epsilon", "Eos", "Pluto", "Ouere",\ - "Tadmor", "Brahe", "Pirx", "Iolaus", "Saffar", "Gaia")].
    " + This motion picture is protected under the copyright laws of the Sol Central Government
    and other nations throughout the galaxy.
    \ + Colony of First Publication: [pick("Mars", "Luna", "Earth", "Venus", "Phobos", "Ceres", "Tiamat", "Ceti Epsilon", "Eos", "Pluto", "Ouere",\ + "Tadmor", "Brahe", "Pirx", "Iolaus", "Saffar", "Gaia")].
    " disclaimer += pick("Use for parody prohibited. PROHIBITED.", "All stunts were performed by underpaid interns. Do NOT try at home.", "[GLOB.using_map.company_name] does not endorse behaviour depicted. Attempt at your own risk.", diff --git a/code/game/objects/alien_props.dm b/code/game/objects/alien_props.dm index d423f6c2f0cda..bd1eb80ff582b 100644 --- a/code/game/objects/alien_props.dm +++ b/code/game/objects/alien_props.dm @@ -4,7 +4,7 @@ /obj/item/cell/alien name = "alien device" desc = "It hums with power." - icon = 'icons/obj/xenoarchaeology.dmi' + icon = 'icons/obj/xenoarchaeology_finds.dmi' icon_state = "unknown1" maxcharge = 5000 origin_tech = list(TECH_POWER = 7) @@ -21,12 +21,12 @@ /obj/machinery/power/apc/alien name = "alien device" desc = "It's affixed to the floor, with a thick wire going into it." - icon = 'icons/obj/xenoarchaeology.dmi' + icon = 'icons/obj/xenoarchaeology_finds.dmi' icon_state = "ano10" update_state = 0 //Don't pixelshift us on wall cell_type = /obj/item/cell/alien autoname = 0 - + /obj/machinery/power/apc/alien/on_update_icon() check_updates() if(update_state & APC_UPDATE_ALLGOOD) @@ -75,4 +75,4 @@ if(A) door_color = A.icon_colour stripe_color = get_random_colour(FALSE, 0, 255) - update_icon() \ No newline at end of file + update_icon() diff --git a/code/game/objects/auras/aura.dm b/code/game/objects/auras/aura.dm index e962ca8b691ba..d0637e4eb4114 100644 --- a/code/game/objects/auras/aura.dm +++ b/code/game/objects/auras/aura.dm @@ -24,33 +24,74 @@ They should also be used for when you want to effect the ENTIRE mob, like having /obj/aura/proc/removed() user = null -/obj/aura/proc/life_tick() - return 0 +/** + * Called during the associated mob's life checks. + * + * Called by `/mob/living/proc/aura_check()` when `type` == `AURA_TYPE_LIFE`. + * + * Returns bitfield (Any of `AURA_*`). See `code\__defines\mobs.dm`. + */ +/obj/aura/proc/aura_check_life() + return EMPTY_BITFIELD -/obj/aura/attackby(obj/item/I, mob/user) - return 0 +/** + * Called when the associated mob is attacked with a weapon. + * + * Called by `/mob/living/proc/aura_check()` when `type` == `AURA_TYPE_WEAPON`. + * + * **Parameters**: + * - `weapon` - Item used to attack the mob. + * - `attacker` - The attacking mob. + * - `click_params` - List of click parameters. + * + * Returns bitfield (Any of `AURA_*`). See `code\__defines\mobs.dm`. + */ +/obj/aura/proc/aura_check_weapon(obj/item/weapon, mob/attacker, click_params) + return EMPTY_BITFIELD -/obj/aura/bullet_act(obj/item/projectile/P, def_zone) - return 0 +/** + * Called when the associated mob is impacted by a projectile. + * + * Called by `/mob/living/proc/aura_check()` when `type` == `AURA_TYPE_BULLET`. + * + * **Parameters**: + * - `proj` - The impacting projectile + * - `def_zone` - Body part target zone that was impacted + * + * Returns bitfield (Any of `AURA_*`). See `code\__defines\mobs.dm`. + */ +/obj/aura/proc/aura_check_bullet(obj/item/projectile/proj, def_zone) + return EMPTY_BITFIELD -/obj/aura/hitby() - return 0 +/** + * Called when the associated mob is hit by a thrown atom. + * + * Called by `/mob/living/proc/aura_check()` when `type` == `AURA_TYPE_THROWN`. + * + * **Parameters**: + * - `thrown_atom` - The atom impacting the mob. + * - `thrown_datum` - The thrownthing datum associated with the thrown atom. + * + * Returns bitfield (Any of `AURA_*`). See `code\__defines\mobs.dm`. + */ +/obj/aura/proc/aura_check_thrown(atom/movable/thrown_atom, datum/thrownthing/thrown_datum) + return EMPTY_BITFIELD /obj/aura/debug - var/returning = 0 + var/returning = EMPTY_BITFIELD -/obj/aura/debug/attackby(obj/item/I, mob/user) - log_debug("Attackby for \ref[src]: [I], [user]") +/obj/aura/debug/aura_check_weapon(obj/item/weapon, mob/attacker, click_params) + log_debug("Aura Check Weapon for \ref[src]: [weapon], [attacker]") return returning -/obj/aura/debug/bullet_act(obj/item/projectile/P, def_zone) - log_debug("Bullet Act for \ref[src]: [P], [def_zone]") +/obj/aura/debug/aura_check_bullet(obj/item/projectile/proj, def_zone) + log_debug("Aura Check Bullet for \ref[src]: [proj], [def_zone]") return returning -/obj/aura/debug/life_tick() - log_debug("Life tick") +/obj/aura/debug/aura_check_life() + log_debug("Aura Check Life for \ref[src]") return returning -/obj/aura/debug/hitby(atom/movable/M, datum/thrownthing/TT) - log_debug("Hit By for \ref[src]: [M], [TT.speed]") +/obj/aura/debug/aura_check_thrown(atom/movable/thrown_atom, datum/thrownthing/thrown_datum) + log_debug("Aura Check Thrown for \ref[src]: [thrown_atom], [thrown_datum.speed]") return returning diff --git a/code/game/objects/auras/blueforge_aura.dm b/code/game/objects/auras/blueforge_aura.dm index be0d44f8f1668..9094e51ff6da3 100644 --- a/code/game/objects/auras/blueforge_aura.dm +++ b/code/game/objects/auras/blueforge_aura.dm @@ -4,13 +4,13 @@ icon_state = "eyes_blueforged_s" layer = MOB_LAYER -/obj/aura/blueforge_aura/life_tick() +/obj/aura/blueforge_aura/aura_check_life() user.adjustToxLoss(-10) - return 0 + return EMPTY_BITFIELD -/obj/aura/blueforge_aura/bullet_act(obj/item/projectile/P) - if (P.damtype == DAMAGE_BURN) - P.damage *=2 - else if(P.agony || P.stun) +/obj/aura/blueforge_aura/aura_check_bullet(obj/item/projectile/proj, def_zone ) + if (proj.damtype == DAMAGE_BURN) + proj.damage *= 2 + else if (proj.agony || proj.stun) return AURA_FALSE - return 0 + return EMPTY_BITFIELD diff --git a/code/game/objects/auras/personal_shields/personal_shield.dm b/code/game/objects/auras/personal_shields/personal_shield.dm index 382fcc74c1839..6524ab9f2ba2f 100644 --- a/code/game/objects/auras/personal_shields/personal_shield.dm +++ b/code/game/objects/auras/personal_shields/personal_shield.dm @@ -6,9 +6,9 @@ playsound(user,'sound/weapons/flash.ogg',35,1) to_chat(user,SPAN_NOTICE("You feel your body prickle as \the [src] comes online.")) -/obj/aura/personal_shield/bullet_act(obj/item/projectile/P, def_zone) - user.visible_message(SPAN_WARNING("\The [user]'s [src.name] flashes before \the [P] can hit them!")) - new /obj/effect/temporary(get_turf(src), 2 SECONDS,'icons/obj/machines/shielding.dmi',"shield_impact") +/obj/aura/personal_shield/aura_check_bullet(obj/item/projectile/proj, def_zone) + user.visible_message(SPAN_WARNING("\The [user]'s [name] flashes before \the [proj] can hit them!")) + new /obj/temporary(get_turf(src), 2 SECONDS,'icons/obj/machines/shielding.dmi',"shield_impact") playsound(user,'sound/effects/basscannon.ogg',35,1) return AURA_FALSE|AURA_CANCEL @@ -20,7 +20,7 @@ /obj/aura/personal_shield/device var/obj/item/device/personal_shield/shield -/obj/aura/personal_shield/device/bullet_act() +/obj/aura/personal_shield/device/aura_check_bullet(obj/item/projectile/proj, def_zone) . = ..() if(shield) shield.take_charge() diff --git a/code/game/objects/auras/radiant_aura.dm b/code/game/objects/auras/radiant_aura.dm index 4658fbc465cb7..9b5a4a68a68b9 100644 --- a/code/game/objects/auras/radiant_aura.dm +++ b/code/game/objects/auras/radiant_aura.dm @@ -7,14 +7,14 @@ /obj/aura/radiant_aura/added_to(mob/living/L) ..() to_chat(L,SPAN_NOTICE("A bubble of light appears around you, exuding protection and warmth.")) - set_light(0.6, 1, 6, 2, "#e09d37") + set_light(6, 6, "#e09d37") /obj/aura/radiant_aura/removed() to_chat(user, SPAN_WARNING("Your protective aura dissipates, leaving you feeling cold and unsafe.")) ..() -/obj/aura/radiant_aura/bullet_act(obj/item/projectile/P, def_zone) - if(P.damage_flags() & DAMAGE_FLAG_LASER) - user.visible_message(SPAN_WARNING("\The [P] refracts, bending into \the [user]'s aura.")) +/obj/aura/radiant_aura/aura_check_bullet(obj/item/projectile/proj, def_zone) + if (HAS_FLAGS(proj.damage_flags(), DAMAGE_FLAG_LASER)) + user.visible_message(SPAN_WARNING("\The [proj] refracts, bending into \the [user]'s aura.")) return AURA_FALSE - return 0 + return EMPTY_BITFIELD diff --git a/code/game/objects/auras/regenerating_aura.dm b/code/game/objects/auras/regenerating_aura.dm index d5cc8392f1d1e..58a35ab1ebd0b 100644 --- a/code/game/objects/auras/regenerating_aura.dm +++ b/code/game/objects/auras/regenerating_aura.dm @@ -4,10 +4,11 @@ var/fire_mult = 1 var/tox_mult = 1 -/obj/aura/regenerating/life_tick() +/obj/aura/regenerating/aura_check_life() user.adjustBruteLoss(-brute_mult) user.adjustFireLoss(-fire_mult) user.adjustToxLoss(-tox_mult) + return EMPTY_BITFIELD /obj/aura/regenerating/human var/nutrition_damage_mult = 1 //How much nutrition it takes to heal regular damage @@ -24,15 +25,15 @@ /obj/aura/regenerating/human/proc/external_regeneration_effect(obj/item/organ/external/O, mob/living/carbon/human/H) return -/obj/aura/regenerating/human/life_tick() +/obj/aura/regenerating/human/aura_check_life() var/mob/living/carbon/human/H = user if(!istype(H)) CRASH("Someone gave [user.type] a [src.type] aura. This is invalid.") if(!innate_heal || H.InStasis() || H.stat == DEAD) - return 0 + return EMPTY_BITFIELD if(H.nutrition < nutrition_damage_mult) low_nut_warning() - return 0 + return EMPTY_BITFIELD if(brute_mult && H.getBruteLoss()) H.adjustBruteLoss(-brute_mult * config.organ_regeneration_multiplier) @@ -44,8 +45,6 @@ H.adjustToxLoss(-tox_mult * config.organ_regeneration_multiplier) H.adjust_nutrition(-nutrition_damage_mult) - if(!can_regenerate_organs()) - return 1 if(organ_mult) if(prob(10) && H.nutrition >= 150 && !H.getBruteLoss() && !H.getFireLoss()) var/obj/item/organ/external/head/D = H.organs_by_name["head"] @@ -92,7 +91,7 @@ for(var/datum/wound/W in E.wounds) if(W.wound_damage() == 0 && prob(50)) qdel(W) - return 1 + return AURA_CANCEL /obj/aura/regenerating/human/proc/low_nut_warning(wound_type) if (last_nutrition_warning + 1 MINUTE < world.time) @@ -118,34 +117,45 @@ grow_chance = 2 grow_threshold = 150 ignore_tag = BP_HEAD - innate_heal = FALSE var/toggle_blocked_until = 0 // A time -/obj/aura/regenerating/human/unathi/toggle() - ..() - toggle_blocked_until = max(world.time + 2 MINUTES, toggle_blocked_until) - /obj/aura/regenerating/human/unathi/can_toggle() - if(world.time < toggle_blocked_until) - return FALSE - return ..() + return FALSE // Default return; we're just logging. -/obj/aura/regenerating/human/unathi/attackby() +/obj/aura/regenerating/human/unathi/aura_check_weapon(obj/item/weapon, mob/attacker, click_params) toggle_blocked_until = max(world.time + 1 MINUTE, toggle_blocked_until) + return EMPTY_BITFIELD -/obj/aura/regenerating/human/unathi/hitby() +/obj/aura/regenerating/human/unathi/aura_check_thrown(atom/movable/thrown_atom, datum/thrownthing/thrown_datum) toggle_blocked_until = max(world.time + 1 MINUTE, toggle_blocked_until) + return EMPTY_BITFIELD -/obj/aura/regenerating/human/unathi/bullet_act() +/obj/aura/regenerating/human/unathi/aura_check_bullet(obj/item/projectile/proj, def_zone) toggle_blocked_until = max(world.time + 1 MINUTE, toggle_blocked_until) + return EMPTY_BITFIELD -/obj/aura/regenerating/human/unathi/life_tick() +/obj/aura/regenerating/human/unathi/aura_check_life() var/mob/living/carbon/human/H = user - if(innate_heal && istype(H) && H.stat != DEAD && H.nutrition < 50) + if (!istype(H) || H.stat == DEAD) + return AURA_CANCEL + if (H.stasis_value) + return AURA_FALSE + if (H.nutrition < 50) H.apply_damage(5, DAMAGE_TOXIN) H.adjust_nutrition(3) - return 1 + return AURA_FALSE + nutrition_damage_mult = 2 + brute_mult = 2 + organ_mult = 4 + grow_chance = 2 + var/obj/machinery/optable/optable = locate() in get_turf(H) + if (optable?.suppressing && H.sleeping) + nutrition_damage_mult = 1 + brute_mult = 1 + organ_mult = 2 + grow_chance = 1 + return ..() /obj/aura/regenerating/human/unathi/can_regenerate_organs() diff --git a/code/game/objects/auras/shadowling_aura.dm b/code/game/objects/auras/shadowling_aura.dm index 1aa90f566eba2..e2c70063516c1 100644 --- a/code/game/objects/auras/shadowling_aura.dm +++ b/code/game/objects/auras/shadowling_aura.dm @@ -14,9 +14,9 @@ user.mutations -= MUTATION_SPACERES ..() -/obj/aura/shadowling_aura/bullet_act(obj/item/projectile/P) - if(P.damage_flags() & DAMAGE_FLAG_LASER) - P.damage *= 2 - if(P.agony) - P.agony *= 2 - return 0 +/obj/aura/shadowling_aura/aura_check_bullet(obj/item/projectile/proj, def_zone) + if (HAS_FLAGS(proj.damage_flags(), DAMAGE_FLAG_LASER)) + proj.damage *= 2 + if (proj.agony) + proj.agony *= 2 + return EMPTY_BITFIELD diff --git a/code/game/objects/auras/starlight.dm b/code/game/objects/auras/starlight.dm index f06ab1035c446..39b362b0f41a0 100644 --- a/code/game/objects/auras/starlight.dm +++ b/code/game/objects/auras/starlight.dm @@ -5,16 +5,16 @@ color = "#33cc33" layer = MOB_LAYER -/obj/aura/starborn/bullet_act(obj/item/projectile/P, def_zone) - if (P.damage_type == DAMAGE_BURN) - user.visible_message(SPAN_WARNING("\The [P] seems to only make \the [user] stronger.")) - user.adjustBruteLoss(-P.damage) +/obj/aura/starborn/aura_check_bullet(obj/item/projectile/proj, def_zone) + if (proj.damage_type == DAMAGE_BURN) + user.visible_message(SPAN_WARNING("\The [proj] seems to only make \the [user] stronger.")) + user.adjustBruteLoss(-proj.damage) return AURA_FALSE - return 0 + return EMPTY_BITFIELD -/obj/aura/starborn/attackby(obj/item/I, mob/i_user) - if(I.damtype == DAMAGE_BURN) - to_chat(i_user, SPAN_WARNING("\The [I] seems to only feed into \the [user]'s flames.")) - user.adjustBruteLoss(-I.force) +/obj/aura/starborn/aura_check_weapon(obj/item/weapon, mob/attacker, click_params) + if (weapon.damtype == DAMAGE_BURN) + user.visible_message(SPAN_WARNING("\The [weapon] seems to only feed into \the [user]'s flames.")) + user.adjustBruteLoss(-weapon.force) return AURA_FALSE - return 0 + return EMPTY_BITFIELD diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 059a625af0454..83d35d44d2afd 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -9,6 +9,10 @@ var/buckle_require_restraints = FALSE //require people to be handcuffed before being able to buckle. eg: pipes var/mob/living/buckled_mob var/buckle_sound = 'sound/effects/buckle.ogg' + var/breakout_time + + ///Verb used when the object is punched. If defined, overrides the punch's usual verb + var/attacked_verb /** * A list of (x, y, z) to offset buckled_mob by, or null. @@ -30,12 +34,14 @@ /obj/attack_hand(mob/living/user) . = ..() - AttemptUnbuckle(user) + if (buckled_mob) + AttemptUnbuckle(user) /obj/attack_robot(mob/living/silicon/robot/user) . = ..() - AttemptUnbuckle(user) + if (buckled_mob) + AttemptUnbuckle(user) /obj/MouseDrop_T(atom/dropped, mob/living/user) @@ -47,39 +53,179 @@ return FALSE -/obj/proc/AttemptBuckle(mob/living/target, mob/living/user) +/** + * Checks if a mob can be buckled to the object. + * + * **Parameters**: + * - `target` - Mob to be buckled. + * - `user` - Optional. Mob attempting to perform the buckling. Target of failure feedback messages. If not provided, checks requiring `user` are not performed. + * - `silent` (Boolean, default `FALSE`) - If set, does not send failure feedback messages to `user`. + * + * Returns boolean. + */ +/obj/proc/can_buckle(mob/living/target, mob/living/user, silent = FALSE) if (!can_buckle) - return + if (!silent) + to_chat(user, SPAN_WARNING("\The [src] cannot have mobs buckled to it.")) + return FALSE if (!istype(target)) - return - if (!Adjacent(target) || !Adjacent(user)) - return - if (target == user || user.a_intent == I_HELP) - return user_buckle_mob(target, user) - if (!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - return user_buckle_mob(target, user) + if (!silent) + to_chat(user, SPAN_DEBUG("You attempted to buckle a non-mob. This shouldn't be possible and is a bug.")) + return FALSE + if (!target.can_be_buckled) + if (!silent) + to_chat(user, SPAN_WARNING("\The [target] cannot be buckled.")) + return FALSE + if (buckled_mob) + if (!silent) + to_chat(user, SPAN_WARNING("\The [src] already has \the [buckled_mob] buckled to it.")) + return FALSE + if (target.buckled) + if (!silent) + to_chat(user, SPAN_WARNING("\The [target] is already buckled to \the [target.buckled].")) + return FALSE + if (length(target.pinned)) + if (!silent) + to_chat(user, SPAN_WARNING("\The [target] is currently pinned down by [english_list(target.pinned)] and cannot be buckled.")) + return FALSE + var/list/grabbed_by_mobs = list() + for (var/obj/item/grab/grab in target.grabbed_by) + if (grab.assailant == user || grab.assailant == target) + continue + grabbed_by_mobs += "\the [grab.assailant]" + if (length(grabbed_by_mobs)) + if (!silent) + to_chat(user, SPAN_WARNING("\The [target] is being grabbed by [english_list(grabbed_by_mobs)] and can't be buckled by you.")) + return FALSE + if (!Adjacent(target)) + if (!silent) + to_chat(user, SPAN_WARNING("\The [target] has to be next to \the [src] to buckle them to it.")) + return FALSE + if (buckle_require_restraints && !target.restrained()) + if (!silent) + to_chat(user, SPAN_WARNING("\The [target] must be restrained to buckle them to \the [src].")) + return FALSE + if (user) + if (user != target && user.incapacitated()) + if (!silent) + to_chat(user, SPAN_WARNING("You're in no condition to buckle things right now.")) + return FALSE + if (!CheckDexterity(user)) + if (!silent) + to_chat(user, FEEDBACK_YOU_LACK_DEXTERITY) + return FALSE + if (target != user && istype(user, /mob/living/silicon/pai)) + if (!silent) + to_chat(user, SPAN_WARNING("pAIs cannot buckle other mobs.")) + return FALSE + if (!Adjacent(user)) + if (!silent) + to_chat(user, SPAN_WARNING("You have to be next to \the [src] to buckle mobs to it.")) + return FALSE + if (!user.Adjacent(target)) + if (!silent) + to_chat(user, SPAN_WARNING("You have to be next to \the [target] to buckle them.")) + return FALSE + return TRUE -/obj/proc/AttemptUnbuckle(mob/living/user) - if (!can_buckle) - return +/** + * Checks if a mob can unbuckle the object. + * + * **Parameters**: + * - `user` - Optional. Mob attempting to perform the unbuckling. Target of failure feedback messages. If not provided, checks on `user` are not performed. + * - `silent` (Boolean, default `FALSE`) - If set, does not send failure feedback messages to `user`. + * + * Returns boolean. + */ +/obj/proc/can_unbuckle(mob/living/user, silent = FALSE) if (!buckled_mob) - return - if (!Adjacent(user)) - return - if (buckled_mob == user || user.a_intent == I_HELP) - return user_unbuckle_mob(user) + if (!silent) + to_chat(user, SPAN_WARNING("\The [src] has no mob buckled to it.")) + return FALSE + if (buckled_mob.buckled != src) + log_debug(append_admin_tools("A buckled mob ([buckled_mob.name] ([buckled_mob.type])) is buckled to multiple objects at once. This has been auto-corrected.", buckled_mob, get_turf(src))) + if (!silent) + to_chat(user, SPAN_DEBUG("\The [buckled_mob] is buckled to \the [buckled_mob.buckled] instead of \the [src]. This is a bug and has been auto-corrected. You will need to unbuckle them from \the [buckled_mob.buckled] instead of the object you clicked on.")) + buckled_mob = null + return FALSE + if (user) + if (user.incapacitated(INCAPACITATION_DISABLED)) + if (!silent) + to_chat(user, SPAN_WARNING("You're in no condition to unbuckle things right now.")) + return FALSE + if (user != buckled_mob) + if (!CheckDexterity(user)) + if (!silent) + to_chat(user, FEEDBACK_YOU_LACK_DEXTERITY) + return FALSE + if (istype(user, /mob/living/silicon/pai)) + if (!silent) + to_chat(user, SPAN_WARNING("pAIs cannot unbuckle other mobs.")) + return FALSE + if (!Adjacent(user)) + if (!silent) + to_chat(user, SPAN_WARNING("You have to be next to \the [src] to unbuckle \the [buckled_mob].")) + return FALSE + return TRUE + + +/** + * Attempts to buckle the target to the object. Includes `can_buckle()` checks and a timer. Calls `user_buckle_mob()`. + * + * Generally, you should call this during user interactions instead of directly calling the buckle procs. + * + * **Parameters**: + * - `target` - Mob to be buckled. + * - `user` - Mob attempting to perform the buckling. Target of failure feedback messages. + * - `silent` (Boolean, default `FALSE`) - If set, does not display feedback messages. Passed to `can_buckle()` and `user_buckle_mob()`. + * + * Returns boolean. Whether or not the buckling was successful. + */ +/obj/proc/AttemptBuckle(mob/living/target, mob/living/user, silent = FALSE) + if (!istype(target)) + return FALSE + if (target == user || target.a_intent == I_HELP || target.incapacitated()) + return user_buckle_mob(target, user, silent) + if (!can_buckle(target, user, silent)) + return FALSE if (!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - return user_unbuckle_mob(user) + return FALSE + return user_buckle_mob(target, user, silent) + + +/** + * Attempts to unbuckle the object's buckled mob. Includes `can_unbuckle()` checks and a timer. Calls `user_unbuckle_mob()`. + * + * Generally, you should call this during user interactions instead of directly calling the buckle procs. + * + * **Parameters**: + * - `user` - Mob attempting to perform the unbuckling. Target of failure feedback messages. + * - `silent` (Boolean, default `FALSE`) - If set, does not display feedback messages. Passed to `can_unbuckle()` and `user_unbuckle_mob()`. + * + * Returns boolean. Whether or not the buckling was successful. + */ +/obj/proc/AttemptUnbuckle(mob/living/user, silent = FALSE) + if (buckled_mob && (buckled_mob == user || buckled_mob.a_intent == I_HELP || buckled_mob.incapacitated())) + return user_unbuckle_mob(user, silent) + if (!can_unbuckle(user, silent)) + return FALSE + if (!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) + return FALSE + return user_unbuckle_mob(user, silent) +/** + * Handles buckling the given mob. Assumes most conditions are met - This only checks if `loc` is the same and if the mob's `buckled` is null to avoid broken states. + * + * Returns boolen - Whether or not the mob was buckled. + */ /obj/proc/buckle_mob(mob/living/M) - if(buckled_mob) //unless buckled_mob becomes a list this can cause problems - return 0 - if(!istype(M) || (M.loc != loc) || !M.can_be_buckled || M.buckled || length(M.pinned) || (buckle_require_restraints && !M.restrained())) - return 0 + if (M.buckled) + return FALSE + // Additional check not covered can_buckle(), due to attempting to buckle allowing you to move an adjacent target to the object. + if (M.loc != loc) + return FALSE if(ismob(src)) var/mob/living/carbon/C = src //Don't wanna forget the xenos. if(M != src && C.incapacitated()) @@ -91,14 +237,25 @@ M.UpdateLyingBuckledAndVerbStatus() M.update_floating() buckled_mob = M - GLOB.destroyed_event.register(buckled_mob, src, /obj/proc/clear_buckle) + GLOB.destroyed_event.register(buckled_mob, src, TYPE_PROC_REF(/obj, clear_buckle)) if (buckle_sound) playsound(src, buckle_sound, 20) post_buckle_mob(M) - return 1 + return TRUE + +/** + * Handles unbuckling any buckled mobs. Assumes all conditions are met. + * + * Returns a reference to the previously buckled mob, or null. + */ /obj/proc/unbuckle_mob() - if(buckled_mob && buckled_mob.buckled == src) + if (buckled_mob) + if (buckled_mob.buckled != src) + log_debug(append_admin_tools("A buckled mob ([buckled_mob.name] ([buckled_mob.type])) is buckled to multiple objects at once. This has been auto-corrected.", buckled_mob, get_turf(src))) + buckled_mob = null + GLOB.destroyed_event.unregister(., src, TYPE_PROC_REF(/obj, clear_buckle)) + return . = buckled_mob buckled_mob.buckled = null buckled_mob.anchored = initial(buckled_mob.anchored) @@ -106,9 +263,10 @@ buckled_mob.update_floating() buckled_mob = null - GLOB.destroyed_event.unregister(., src, /obj/proc/clear_buckle) + GLOB.destroyed_event.unregister(., src, TYPE_PROC_REF(/obj, clear_buckle)) post_buckle_mob(.) + /** * Clears any buckling references that exist between object and buckled mob, without clearing any unrelated references. Used by the destroyed event handler. * @@ -117,9 +275,10 @@ /obj/proc/clear_buckle(mob/living/_buckled_mob) if (buckled_mob == _buckled_mob) unbuckle_mob() + buckled_mob = null // In case unbuckle failed if (_buckled_mob.buckled == src) _buckled_mob.buckled = null - GLOB.destroyed_event.unregister(., src, /obj/proc/clear_buckle) + GLOB.destroyed_event.unregister(., src, TYPE_PROC_REF(/obj, clear_buckle)) /obj/proc/post_buckle_mob(mob/living/M) if (buckle_pixel_shift) @@ -136,20 +295,24 @@ pixel_z = M.default_pixel_z ) -/obj/proc/user_buckle_mob(mob/living/M, mob/user) - if(!user.Adjacent(M) || istype(user, /mob/living/silicon/pai) || (M != user && user.incapacitated())) - return 0 - if(M == buckled_mob) - return 0 - if (length(M.grabbed_by)) - to_chat(user, SPAN_WARNING("\The [M] is being grabbed and cannot be buckled.")) - return FALSE - if (!M.can_be_buckled) - to_chat(user, SPAN_WARNING("\The [M] cannot be buckled.")) + +/** + * Handles buckling a mob by another mob (Or the same mob). Includes `can_buckle()` checks. + * + * Generally, you should be calling `AttemptBuckle()` instead of this. + * + * **Parameters**: + * - `target` - Mob to be buckled. + * - `user` - Mob attempting to perform the buckling. Target of failure feedback messages. + * - `silent` (Boolean, default `FALSE`) - If set, does not display feedback messages. Passed to `can_buckle()`. + * + * Returns boolean. Whether or not the buckling was successful. + */ +/obj/proc/user_buckle_mob(mob/living/M, mob/user, silent = FALSE) + if (!can_buckle(M, user, silent)) return FALSE add_fingerprint(user) - unbuckle_mob() //can't buckle unless you share locs so try to move M to the obj. if(M.loc != src.loc) @@ -158,29 +321,52 @@ . = buckle_mob(M) if(.) if(M == user) - M.visible_message(\ - SPAN_NOTICE("\The [M.name] buckles themselves to \the [src]."),\ - SPAN_NOTICE("You buckle yourself to \the [src]."),\ - SPAN_NOTICE("You hear metal clanking.")) + user.visible_message( + SPAN_NOTICE("\The [user] buckles themselves to \the [src]."), + SPAN_NOTICE("You buckle yourself to \the [src]."), + SPAN_NOTICE("You hear metal clanking.") + ) else - M.visible_message(\ - SPAN_DANGER("\The [M.name] is buckled to \the [src] by \the [user.name]!"),\ - SPAN_DANGER("You are buckled to \the [src] by \the [user.name]!"),\ - SPAN_NOTICE("You hear metal clanking.")) + user.visible_message( + SPAN_WARNING("\The [user] buckles \the [M] to \the [src]."), + SPAN_DANGER("You buckle \the [M] to \the [src]."), + SPAN_NOTICE("You hear metal clanking."), + exclude_mobs = list(M) + ) + to_chat(M, SPAN_DANGER("\The [user] buckles you to \the [src].")) + add_fingerprint(M) + -/obj/proc/user_unbuckle_mob(mob/user) +/** + * Handles unbuckling a mob by another mob (Or the same mob). Includes `can_unbuckle()` checks. + * + * Generally, you should be calling `AttemptUnbuckle()` instead of this. + * + * **Parameters**: + * - `user` - Mob attempting to perform the unbuckling. Target of failure feedback messages. + * - `silent` (Boolean, default `FALSE`) - If set, does not display feedback messages. Passed to `can_unbuckle()`. + * + * Returns instance of the unbuckled mob or null on failure. + */ +/obj/proc/user_unbuckle_mob(mob/user, silent = FALSE) + if (!can_unbuckle(user, silent)) + return var/mob/living/M = unbuckle_mob() if(M) if(M != user) - M.visible_message(\ - SPAN_NOTICE("\The [M.name] was unbuckled by \the [user.name]!"),\ - SPAN_NOTICE("You were unbuckled from \the [src] by \the [user.name]."),\ - SPAN_NOTICE("You hear metal clanking.")) + user.visible_message( + SPAN_WARNING("\The [user] unbuckles \the [M] from \the [src]."), + SPAN_DANGER("You unbuckle \the [M] from \the [src]"), + SPAN_NOTICE("You hear metal clanking."), + exclude_mobs = list(M) + ) + to_chat(M, SPAN_DANGER("\The [user] unbuckles you from \the [src].")) else - M.visible_message(\ - SPAN_NOTICE("\The [M.name] unbuckled themselves!"),\ - SPAN_NOTICE("You unbuckle yourself from \the [src]."),\ - SPAN_NOTICE("You hear metal clanking.")) + user.visible_message(\ + SPAN_WARNING("\The [user] unbuckles themselves from \the [src]."), + SPAN_DANGER("You unbuckle yourself from \the [src]."), + SPAN_NOTICE("You hear metal clanking.") + ) add_fingerprint(user) return M @@ -190,6 +376,9 @@ if (!buckled_mob) return if (loc) + // [SIERRA-ADD] - SSINPUT + buckled_mob.set_glide_size(glide_size) + // [/SIERRA-ADD] buckled_mob.forceMove(loc) else unbuckle_mob() @@ -200,6 +389,9 @@ if (!buckled_mob) return if (loc) + // [SIERRA-ADD] - SSINPUT + buckled_mob.set_glide_size(glide_size) + // [/SIERRA-ADD] buckled_mob.forceMove(loc) else unbuckle_mob() diff --git a/code/game/objects/compass/_compass.dm b/code/game/objects/compass/_compass.dm index 28d1c3775c4b7..ea6f682c4002d 100644 --- a/code/game/objects/compass/_compass.dm +++ b/code/game/objects/compass/_compass.dm @@ -1,7 +1,7 @@ /* - This folder contains an abstract type (/obj/compass_holder) which contains a set of - waypoints (/datum/compass_waypoint) and generates a circular compass with markers for - mobs that have the object in their screen list. See GPS for an example implementation. +This folder contains an abstract type (/obj/compass_holder) which contains a set of +waypoints (/datum/compass_waypoint) and generates a circular compass with markers for +mobs that have the object in their screen list. See GPS for an example implementation. */ /image/compass_marker diff --git a/code/game/objects/compass/compass_holder.dm b/code/game/objects/compass/compass_holder.dm index 86adc6cd6a5a4..de0a4204d5089 100644 --- a/code/game/objects/compass/compass_holder.dm +++ b/code/game/objects/compass/compass_holder.dm @@ -84,7 +84,7 @@ var/global/list/angle_step_to_dir = list( . = 0 /obj/compass_holder/on_update_icon() - overlays = (compass_static_labels | compass_waypoint_markers) + SetOverlays(compass_static_labels | compass_waypoint_markers) /obj/compass_holder/proc/clear_waypoint(id) LAZYREMOVE(compass_waypoints, id) diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm index 831f9087d3a1d..57a66dc9a0e16 100644 --- a/code/game/objects/effects/bump_teleporter.dm +++ b/code/game/objects/effects/bump_teleporter.dm @@ -1,25 +1,25 @@ -var/global/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list() +var/global/list/obj/bump_teleporter/BUMP_TELEPORTERS = list() -/obj/effect/bump_teleporter +/obj/bump_teleporter name = "bump-teleporter" icon = 'icons/mob/screen1.dmi' icon_state = "x2" var/id = null //id of this bump_teleporter. var/id_target = null //id of bump_teleporter which this moves you to. - invisibility = 101 //nope, can't see this + invisibility = INVISIBILITY_ABSTRACT //nope, can't see this anchored = TRUE density = TRUE opacity = 0 -/obj/effect/bump_teleporter/New() +/obj/bump_teleporter/New() ..() BUMP_TELEPORTERS += src -/obj/effect/bump_teleporter/Destroy() +/obj/bump_teleporter/Destroy() BUMP_TELEPORTERS -= src return ..() -/obj/effect/bump_teleporter/Bumped(atom/user) +/obj/bump_teleporter/Bumped(atom/user) if(!ismob(user)) //user.loc = src.loc //Stop at teleporter location return @@ -28,7 +28,7 @@ var/global/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list() //user.loc = src.loc //Stop at teleporter location, there is nowhere to teleport to. return - for(var/obj/effect/bump_teleporter/BT in BUMP_TELEPORTERS) + for(var/obj/bump_teleporter/BT in BUMP_TELEPORTERS) if(BT.id == src.id_target) usr.forceMove(BT.loc) //Teleport to location with correct id. - return \ No newline at end of file + return diff --git a/code/game/objects/effects/chem/chemsmoke.dm b/code/game/objects/effects/chem/chemsmoke.dm index 2a887fac12ce8..bc0f5287ee046 100644 --- a/code/game/objects/effects/chem/chemsmoke.dm +++ b/code/game/objects/effects/chem/chemsmoke.dm @@ -1,7 +1,7 @@ ///////////////////////////////////////////// // Chem smoke ///////////////////////////////////////////// -/obj/effect/effect/smoke/chem +/obj/effect/smoke/chem icon = 'icons/effects/chemsmoke.dmi' layer = ABOVE_PROJECTILE_LAYER time_to_live = 300 @@ -9,7 +9,7 @@ var/splash_amount = 5 //atoms moving through a smoke cloud get splashed with up to 10 units of reagent var/turf/destination -/obj/effect/effect/smoke/chem/New(newloc, smoke_duration, turf/dest_turf = null, icon/cached_icon = null) +/obj/effect/smoke/chem/New(newloc, smoke_duration, turf/dest_turf = null, icon/cached_icon = null) time_to_live = smoke_duration ..() @@ -26,31 +26,31 @@ if(destination) walk_to(src, destination) -/obj/effect/effect/smoke/chem/Move() +/obj/effect/smoke/chem/Move() var/list/oldlocs = view(1, src) . = ..() if(.) for(var/turf/T in view(1, src) - oldlocs) for(var/atom/movable/AM in T) - if(!istype(AM, /obj/effect/effect/smoke/chem)) + if(!istype(AM, /obj/effect/smoke/chem)) reagents.splash(AM, splash_amount, copy = 1) -/obj/effect/effect/smoke/chem/Crossed(atom/movable/AM) +/obj/effect/smoke/chem/Crossed(atom/movable/AM) ..() - if(!istype(AM, /obj/effect/effect/smoke/chem)) + if(!istype(AM, /obj/effect/smoke/chem)) reagents.splash(AM, splash_amount, copy = 1) -/obj/effect/effect/smoke/chem/proc/initial_splash() +/obj/effect/smoke/chem/proc/initial_splash() for(var/turf/T in view(1, src)) for(var/atom/movable/AM in T) - if(!istype(AM, /obj/effect/effect/smoke/chem)) + if(!istype(AM, /obj/effect/smoke/chem)) reagents.splash(AM, splash_amount, copy = 1) ///////////////////////////////////////////// // Chem Smoke Effect System ///////////////////////////////////////////// -/datum/effect/effect/system/smoke_spread/chem - smoke_type = /obj/effect/effect/smoke/chem +/datum/effect/smoke_spread/chem + smoke_type = /obj/effect/smoke/chem var/obj/chemholder var/range var/list/targetTurfs @@ -59,18 +59,18 @@ var/smokeVolume var/show_log = 1 -/datum/effect/effect/system/smoke_spread/chem/spores +/datum/effect/smoke_spread/chem/spores show_log = 0 var/datum/seed/seed -/datum/effect/effect/system/smoke_spread/chem/spores/New(seed_name) +/datum/effect/smoke_spread/chem/spores/New(seed_name) if(seed_name) seed = SSplants.seeds[seed_name] if(!seed) qdel(src) ..() -/datum/effect/effect/system/smoke_spread/chem/New() +/datum/effect/smoke_spread/chem/New() ..() chemholder = new/obj() chemholder.create_reagents(500) @@ -79,7 +79,7 @@ // Calculates the max range smoke can travel, then gets all turfs in that view range. // Culls the selected turfs to a (roughly) circle shape, then calls smokeFlow() to make // sure the smoke can actually path to the turfs. This culls any turfs it can't reach. -/datum/effect/effect/system/smoke_spread/chem/set_up(datum/reagents/carry = null, n = 10, c = 0, loca, direct) +/datum/effect/smoke_spread/chem/set_up(datum/reagents/carry = null, n = 10, c = 0, loca, direct) range = n * 0.3 cardinals = c carry.trans_to_obj(chemholder, carry.total_volume, copy = 1) @@ -129,7 +129,7 @@ // Applies reagents to walls that affect walls (only thermite and plant-b-gone at the moment). // Also calculates target locations to spawn the visual smoke effect on, so the whole area // is covered fairly evenly. -/datum/effect/effect/system/smoke_spread/chem/start() +/datum/effect/smoke_spread/chem/start() if(!location) return @@ -139,7 +139,7 @@ for(var/turf/T in targetTurfs) chemholder.reagents.touch_turf(T) for(var/atom/A in T.contents) - if(istype(A, /obj/effect/effect/smoke/chem) || istype(A, /mob)) + if(istype(A, /obj/effect/smoke/chem) || istype(A, /mob)) continue else if(isobj(A) && !A.simulated) chemholder.reagents.touch_obj(A) @@ -191,13 +191,13 @@ // Randomizes and spawns the smoke effect. // Also handles deleting the smoke once the effect is finished. //------------------------------------------ -/datum/effect/effect/system/smoke_spread/chem/proc/spawnSmoke(turf/T, icon/I, smoke_duration, dist = 1, splash_initial=0, obj/effect/effect/smoke/chem/passed_smoke) +/datum/effect/smoke_spread/chem/proc/spawnSmoke(turf/T, icon/I, smoke_duration, dist = 1, splash_initial=0, obj/effect/smoke/chem/passed_smoke) - var/obj/effect/effect/smoke/chem/smoke + var/obj/effect/smoke/chem/smoke if(passed_smoke) smoke = passed_smoke else - smoke = new /obj/effect/effect/smoke/chem(location, smoke_duration + rand(1.5 SECONDS, 3 SECONDS), T, I) + smoke = new /obj/effect/smoke/chem(location, smoke_duration + rand(1.5 SECONDS, 3 SECONDS), T, I) if(length(chemholder.reagents.reagent_list)) chemholder.reagents.trans_to_obj(smoke, chemholder.reagents.total_volume / dist, copy = 1) //copy reagents to the smoke so mob/breathe() can handle inhaling the reagents @@ -207,13 +207,13 @@ smoke.initial_splash() -/datum/effect/effect/system/smoke_spread/chem/spores/spawnSmoke(turf/T, icon/I, smoke_duration, dist = 1) - var/obj/effect/effect/smoke/chem/spores = new /obj/effect/effect/smoke/chem(location) +/datum/effect/smoke_spread/chem/spores/spawnSmoke(turf/T, icon/I, smoke_duration, dist = 1) + var/obj/effect/smoke/chem/spores = new /obj/effect/smoke/chem(location) spores.SetName("cloud of [seed.seed_name] [seed.seed_noun]") ..(T, I, smoke_duration, dist, passed_smoke=spores) -/datum/effect/effect/system/smoke_spread/chem/proc/smokeFlow() // Smoke pathfinder. Uses a flood fill method based on zones to quickly check what turfs the smoke (airflow) can actually reach. +/datum/effect/smoke_spread/chem/proc/smokeFlow() // Smoke pathfinder. Uses a flood fill method based on zones to quickly check what turfs the smoke (airflow) can actually reach. var/list/pending = new() var/list/complete = new() diff --git a/code/game/objects/effects/chem/foam.dm b/code/game/objects/effects/chem/foam.dm index 3014c564e25d2..c248d97afb5b8 100644 --- a/code/game/objects/effects/chem/foam.dm +++ b/code/game/objects/effects/chem/foam.dm @@ -2,7 +2,7 @@ // Similar to smoke, but spreads out more // metal foams leave behind a foamed metal wall -/obj/effect/effect/foam +/obj/effect/foam name = "foam" icon_state = "foam" opacity = 0 @@ -15,7 +15,7 @@ var/expand = 1 var/metal = 0 -/obj/effect/effect/foam/New(loc, ismetal = 0) +/obj/effect/foam/New(loc, ismetal = 0) ..(loc) icon_state = "[ismetal? "m" : ""]foam" metal = ismetal @@ -23,9 +23,9 @@ spawn(3 + metal * 3) Process() checkReagents() - addtimer(new Callback(src, .proc/remove_foam), 12 SECONDS) + addtimer(CALLBACK(src, PROC_REF(remove_foam)), 12 SECONDS) -/obj/effect/effect/foam/proc/remove_foam() +/obj/effect/foam/proc/remove_foam() STOP_PROCESSING(SSobj, src) if(metal) var/obj/structure/foamedmetal/M = new(src.loc) @@ -34,14 +34,14 @@ flick("[icon_state]-disolve", src) QDEL_IN(src, 5) -/obj/effect/effect/foam/proc/checkReagents() // transfer any reagents to the floor +/obj/effect/foam/proc/checkReagents() // transfer any reagents to the floor if(!metal && reagents) var/turf/T = get_turf(src) reagents.touch_turf(T) for(var/obj/O in T) reagents.touch_obj(O) -/obj/effect/effect/foam/Process() +/obj/effect/foam/Process() if(--amount < 0) return @@ -53,7 +53,7 @@ if(!T.Enter(src)) continue - var/obj/effect/effect/foam/F = locate() in T + var/obj/effect/foam/F = locate() in T if(F) continue @@ -65,26 +65,26 @@ for(var/datum/reagent/R in reagents.reagent_list) F.reagents.add_reagent(R.type, 1, safety = 1) //added safety check since reagents in the foam have already had a chance to react -/obj/effect/effect/foam/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) // foam disolves when heated, except metal foams +/obj/effect/foam/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) // foam disolves when heated, except metal foams if(!metal && prob(max(0, exposed_temperature - 475))) flick("[icon_state]-disolve", src) spawn(5) qdel(src) -/obj/effect/effect/foam/Crossed(atom/movable/AM) +/obj/effect/foam/Crossed(atom/movable/AM) if(metal) return if(istype(AM, /mob/living)) var/mob/living/M = AM M.slip("the foam", 6) -/datum/effect/effect/system/foam_spread +/datum/effect/foam_spread var/amount = 5 // the size of the foam spread. var/list/carried_reagents // the IDs of reagents present when the foam was mixed var/metal = 0 // 0 = foam, 1 = metalfoam, 2 = ironfoam -/datum/effect/effect/system/foam_spread/set_up(amt=5, loca, datum/reagents/carry = null, metalfoam = 0) +/datum/effect/foam_spread/set_up(amt=5, loca, datum/reagents/carry = null, metalfoam = 0) amount = round(sqrt(amt / 3), 1) if(isturf(loca)) location = loca @@ -100,14 +100,14 @@ for(var/datum/reagent/R in carry.reagent_list) carried_reagents += R.type -/datum/effect/effect/system/foam_spread/start() +/datum/effect/foam_spread/start() spawn(0) - var/obj/effect/effect/foam/F = locate() in location + var/obj/effect/foam/F = locate() in location if(F) F.amount += amount return - F = new /obj/effect/effect/foam(location, metal) + F = new /obj/effect/foam(location, metal) F.amount = amount if(!metal) // don't carry other chemicals if a metal foam @@ -154,27 +154,59 @@ qdel(src) /obj/structure/foamedmetal/attack_hand(mob/user) - if ((MUTATION_HULK in user.mutations) || (prob(75 - metal * 25))) + if ((MUTATION_FERAL in user.mutations) || prob(75 - metal * 25)) user.visible_message(SPAN_WARNING("[user] smashes through the foamed metal."), SPAN_NOTICE("You smash through the metal foam wall.")) qdel(src) else to_chat(user, SPAN_NOTICE("You hit the metal foam but bounce off it.")) return -/obj/structure/foamedmetal/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/grab)) - var/obj/item/grab/G = I - G.affecting.loc = src.loc - visible_message(SPAN_WARNING("[G.assailant] smashes [G.affecting] through the foamed metal wall.")) - qdel(I) - qdel(src) - return - if(prob(I.force * 20 - metal * 25)) - user.visible_message(SPAN_WARNING("[user] smashes through the foamed metal."), SPAN_NOTICE("You smash through the foamed metal with \the [I].")) - qdel(src) - else - to_chat(user, SPAN_NOTICE("You hit the metal foam to no effect.")) +/obj/structure/foamedmetal/use_grab(obj/item/grab/grab, list/click_params) + // Harm intent - Smash through foam + if (grab.assailant.a_intent == I_HURT) + if (!Adjacent(grab.affecting)) + USE_FEEDBACK_GRAB_FAILURE("\The [grab.affecting] must be next to \the [src] to smash them into it.") + return TRUE + grab.assailant.visible_message( + SPAN_WARNING("\The [grab.assailant] smashes \the [grab.affecting] through \the [src]!"), + SPAN_DANGER("You smash \the [grab.affecting] through \the [src]!"), + exclude_mobs = list(grab.affecting) + ) + grab.affecting.show_message( + SPAN_DANGER("\The [grab.assailant] smashes you through \the [src]!"), + VISIBLE_MESSAGE, + SPAN_DANGER("You feel yourself being smashed through something!") + ) + qdel(grab) + qdel_self() + return TRUE + + return ..() + + +/obj/structure/foamedmetal/use_weapon(obj/item/weapon, mob/user, list/click_params) + // Snowflake damage handling - TODO: Use standardized damage + if (weapon.force > 0 && !HAS_FLAGS(weapon.item_flags, ITEM_FLAG_NO_BLUDGEON)) + user.setClickCooldown(user.get_attack_speed(weapon)) + user.do_attack_animation(src) + if (prob(weapon.force * 20 - metal * 25)) + playsound(src, damage_hitsound, 75, TRUE) + user.visible_message( + SPAN_WARNING("\The [user] smashes through \the [src] with \a [weapon]!"), + SPAN_DANGER("You smash through \the [src] with \the [weapon]!") + ) + qdel_self() + return TRUE + playsound(src, damage_hitsound, 50, TRUE) + user.visible_message( + SPAN_WARNING("\The [user] hits \the [src] with \a [weapon]!"), + SPAN_DANGER("You hit \the [src] with \the [weapon]!") + ) + return TRUE + + return ..() + /obj/structure/foamedmetal/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0) if(air_group) diff --git a/code/game/objects/effects/chem/water.dm b/code/game/objects/effects/chem/water.dm index 64becddfd4f9e..ce88e14aa127a 100644 --- a/code/game/objects/effects/chem/water.dm +++ b/code/game/objects/effects/chem/water.dm @@ -1,18 +1,15 @@ -/obj/effect/effect/water +/obj/effect/water name = "water" icon = 'icons/effects/effects.dmi' icon_state = "extinguish" mouse_opacity = 0 pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GRILLE -/obj/effect/effect/water/New(loc) +/obj/effect/water/New(loc) ..() QDEL_IN(src, 15 SECONDS) // In case whatever made it forgets to delete it -/obj/effect/effect/water/set_color() // Call it after you move reagents to it - icon += reagents.get_color() - -/obj/effect/effect/water/proc/set_up(turf/target, step_count = 5, delay = 5) +/obj/effect/water/proc/set_up(turf/target, step_count = 5, delay = 5) set waitfor = FALSE if(!target) return @@ -40,26 +37,32 @@ if(reagents.total_volume < 1) break if(T == get_turf(target)) - for(var/atom/A in splash_others) - reagents.splash(A, reagents.total_volume/length(splash_others)) //splash anything left + var/list/splash_targets = splash_others + splash_mobs + var/splash_amount = reagents.total_volume / length(splash_targets) + for(var/atom/atom in splash_targets) + reagents.splash(atom, splash_amount) break sleep(delay) sleep(10) qdel(src) -/obj/effect/effect/water/Move(turf/newloc) +/obj/effect/water/Move(turf/newloc) if(newloc.density) return 0 . = ..() -/obj/effect/effect/water/Bump(atom/A) +/obj/effect/water/Bump(atom/A) if(reagents) reagents.touch(A) return ..() //Used by spraybottles. -/obj/effect/effect/water/chempuff +/obj/effect/water/chempuff name = "chemicals" icon = 'icons/obj/chempuff.dmi' icon_state = "" + +/obj/effect/water/chempuff/on_reagent_change(max_vol) + if (reagents) + set_color(reagents.get_color()) diff --git a/code/game/objects/effects/cig_smoke.dm b/code/game/objects/effects/cig_smoke.dm new file mode 100644 index 0000000000000..f8d5ab6889726 --- /dev/null +++ b/code/game/objects/effects/cig_smoke.dm @@ -0,0 +1,21 @@ +/obj/effect/effect/cig_smoke + name = "smoke" + icon_state = "smallsmoke" + icon = 'icons/effects/effects.dmi' + opacity = FALSE + anchored = TRUE + mouse_opacity = FALSE + layer = ABOVE_HUMAN_LAYER + + var/time_to_live = 3 SECONDS + +/obj/effect/effect/cig_smoke/Initialize() + . = ..() + set_dir(pick(GLOB.cardinal)) + pixel_x = rand(0, 13) + pixel_y = rand(0, 13) + return INITIALIZE_HINT_LATELOAD + +/obj/effect/effect/cig_smoke/LateInitialize() + animate(src, alpha = 0, time_to_live, easing = EASE_IN) + QDEL_IN(src, time_to_live) diff --git a/code/game/objects/effects/decals/Cleanable/aliens.dm b/code/game/objects/effects/decals/Cleanable/aliens.dm index 5574b50481386..047e64177aea2 100644 --- a/code/game/objects/effects/decals/Cleanable/aliens.dm +++ b/code/game/objects/effects/decals/Cleanable/aliens.dm @@ -1,4 +1,4 @@ -/obj/effect/decal/cleanable/blood/xeno +/obj/decal/cleanable/blood/xeno name = "xeno blood" desc = "It's green and acidic. It looks like... blood?" icon = 'icons/effects/blood.dmi' diff --git a/code/game/objects/effects/decals/Cleanable/fuel.dm b/code/game/objects/effects/decals/Cleanable/fuel.dm index 46508248d966c..136eaf2c56da3 100644 --- a/code/game/objects/effects/decals/Cleanable/fuel.dm +++ b/code/game/objects/effects/decals/Cleanable/fuel.dm @@ -1,4 +1,4 @@ -/obj/effect/decal/cleanable/liquid_fuel +/obj/decal/cleanable/liquid_fuel //Liquid fuel is used for things that used to rely on volatile fuels or phoron being contained to a couple tiles. icon = 'icons/effects/effects.dmi' icon_state = "fuel" @@ -6,7 +6,7 @@ var/amount = 1 cleanable_scent = "fuel" -/obj/effect/decal/cleanable/liquid_fuel/proc/Spread(exclude=list()) +/obj/decal/cleanable/liquid_fuel/proc/Spread(exclude=list()) //Allows liquid fuels to sometimes flow into other tiles. if(amount < 15) return //lets suppose welder fuel is fairly thick and sticky. For something like water, 5 or less would be more appropriate. var/turf/simulated/S = loc @@ -15,23 +15,23 @@ var/turf/simulated/target = get_step(src,d) var/turf/simulated/origin = get_turf(src) if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0)) - var/obj/effect/decal/cleanable/liquid_fuel/other_fuel = locate() in target + var/obj/decal/cleanable/liquid_fuel/other_fuel = locate() in target if(other_fuel) other_fuel.amount += amount*0.25 if(!(other_fuel in exclude)) exclude += src other_fuel.Spread(exclude) else - new/obj/effect/decal/cleanable/liquid_fuel(target, amount*0.25,1) + new/obj/decal/cleanable/liquid_fuel(target, amount*0.25,1) amount *= 0.75 -/obj/effect/decal/cleanable/liquid_fuel/Initialize(mapload, amt=1, nologs=FALSE) +/obj/decal/cleanable/liquid_fuel/Initialize(mapload, amt=1, nologs=FALSE) if(!nologs && !mapload) log_and_message_admins(" - Liquid fuel has been spilled in [get_area(loc)]", location = loc) src.amount = amt var/has_spread = 0 //Be absorbed by any other liquid fuel in the tile. - for(var/obj/effect/decal/cleanable/liquid_fuel/other in loc) + for(var/obj/decal/cleanable/liquid_fuel/other in loc) if(other != src) other.amount += src.amount other.Spread() diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 37047332c8231..5fc62fb24bd2d 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -6,7 +6,7 @@ var/global/list/image/splatter_cache=list() -/obj/effect/decal/cleanable/blood +/obj/decal/cleanable/blood name = "blood" desc = "It's some blood. That's not supposed to be there." gender = PLURAL @@ -28,14 +28,14 @@ var/global/list/image/splatter_cache=list() var/drydesc = "It's dry and crusty. Someone isn't doing their job." var/blood_size = BLOOD_SIZE_MEDIUM // A relative size; larger-sized blood will not override smaller-sized blood, except maybe at mapload. -/obj/effect/decal/cleanable/blood/reveal_blood() +/obj/decal/cleanable/blood/reveal_blood() if(!fluorescent || invisibility == 100) set_invisibility(0) fluorescent = ATOM_FLOURESCENCE_INACTIVE basecolor = COLOR_LUMINOL update_icon() -/obj/effect/decal/cleanable/blood/clean_blood() +/obj/decal/cleanable/blood/clean_blood() fluorescent = ATOM_FLOURESCENCE_NONE if(invisibility != 100) set_invisibility(100) @@ -44,26 +44,26 @@ var/global/list/image/splatter_cache=list() remove_extension(src, /datum/extension/scent) return TRUE -/obj/effect/decal/cleanable/blood/hide() +/obj/decal/cleanable/blood/hide() return -/obj/effect/decal/cleanable/blood/Destroy() +/obj/decal/cleanable/blood/Destroy() STOP_PROCESSING(SSobj, src) return ..() -/obj/effect/decal/cleanable/blood/Initialize(mapload) +/obj/decal/cleanable/blood/Initialize(mapload) . = ..() if(merge_with_blood(!mapload)) return INITIALIZE_HINT_QDEL start_drying() // Returns true if overriden and needs deletion. If the argument is false, we will merge into any existing blood. -/obj/effect/decal/cleanable/blood/proc/merge_with_blood(override = TRUE) +/obj/decal/cleanable/blood/proc/merge_with_blood(override = TRUE) . = FALSE if(blood_size == BLOOD_SIZE_NO_MERGE) return if(isturf(loc)) - for(var/obj/effect/decal/cleanable/blood/B in loc) + for(var/obj/decal/cleanable/blood/B in loc) if(B == src) continue if(B.blood_size == BLOOD_SIZE_NO_MERGE) @@ -77,16 +77,16 @@ var/global/list/image/splatter_cache=list() B.blood_DNA |= blood_DNA.Copy() . = TRUE -/obj/effect/decal/cleanable/blood/proc/start_drying() +/obj/decal/cleanable/blood/proc/start_drying() drytime = world.time + DRYING_TIME * (amount+1) update_icon() START_PROCESSING(SSobj, src) -/obj/effect/decal/cleanable/blood/Process() +/obj/decal/cleanable/blood/Process() if(world.time > drytime) dry() -/obj/effect/decal/cleanable/blood/on_update_icon() +/obj/decal/cleanable/blood/on_update_icon() if(basecolor == "rainbow") basecolor = get_random_colour(1) color = basecolor if(basecolor == SYNTH_BLOOD_COLOUR) @@ -96,11 +96,13 @@ var/global/list/image/splatter_cache=list() SetName(initial(name)) desc = initial(desc) -/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp) +/obj/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp) if (!istype(perp)) return if(amount < 1) return + if(MOVING_DELIBERATELY(perp)) + return var/obj/item/organ/external/l_foot = perp.get_organ(BP_L_FOOT) var/obj/item/organ/external/r_foot = perp.get_organ(BP_R_FOOT) @@ -117,16 +119,16 @@ var/global/list/image/splatter_cache=list() if(!S.blood_DNA) S.blood_DNA = list() S.blood_overlay.color = basecolor - S.overlays += S.blood_overlay + S.AddOverlays(S.blood_overlay) if(S.blood_overlay && S.blood_overlay.color != basecolor) S.blood_overlay.color = basecolor - S.overlays.Cut() - S.overlays += S.blood_overlay + S.ClearOverlays() + S.AddOverlays(S.blood_overlay) S.blood_DNA |= blood_DNA.Copy() else if (hasfeet)//Or feet perp.feet_blood_color = basecolor - perp.track_blood = max(amount,perp.track_blood) + perp.track_blood = max(amount, perp.track_blood) if(!perp.feet_blood_DNA) perp.feet_blood_DNA = list() perp.feet_blood_DNA |= blood_DNA.Copy() @@ -137,7 +139,7 @@ var/global/list/image/splatter_cache=list() perp.update_inv_shoes(1) amount-- -/obj/effect/decal/cleanable/blood/proc/dry() +/obj/decal/cleanable/blood/proc/dry() name = dryname desc = drydesc color = adjust_brightness(color, -50) @@ -145,7 +147,7 @@ var/global/list/image/splatter_cache=list() remove_extension(src, /datum/extension/scent) STOP_PROCESSING(SSobj, src) -/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user) +/obj/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user) ..() if (amount && istype(user)) if (user.gloves) @@ -161,14 +163,14 @@ var/global/list/image/splatter_cache=list() user.update_inv_gloves(1) user.verbs += /mob/living/carbon/human/proc/bloody_doodle -/obj/effect/decal/cleanable/blood/splatter +/obj/decal/cleanable/blood/splatter random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5") amount = 2 blood_size = BLOOD_SIZE_BIG scent_intensity = /singleton/scent_intensity/strong scent_range = 3 -/obj/effect/decal/cleanable/blood/drip +/obj/decal/cleanable/blood/drip name = "drips of blood" desc = "Drips and drops of blood." gender = PLURAL @@ -182,11 +184,11 @@ var/global/list/image/splatter_cache=list() var/list/drips -/obj/effect/decal/cleanable/blood/drip/Initialize() +/obj/decal/cleanable/blood/drip/Initialize() . = ..() drips = list(icon_state) -/obj/effect/decal/cleanable/blood/writing +/obj/decal/cleanable/blood/writing icon = 'icons/effects/writing.dmi' icon_state = "writing" desc = "It looks like a writing in blood." @@ -198,20 +200,20 @@ var/global/list/image/splatter_cache=list() scent_intensity = /singleton/scent_intensity scent_range = 1 -/obj/effect/decal/cleanable/blood/writing/New() +/obj/decal/cleanable/blood/writing/New() ..() if(LAZYLEN(random_icon_states)) - for(var/obj/effect/decal/cleanable/blood/writing/W in loc) + for(var/obj/decal/cleanable/blood/writing/W in loc) random_icon_states.Remove(W.icon_state) icon_state = pick(random_icon_states) else icon_state = "writing1" -/obj/effect/decal/cleanable/blood/writing/examine(mob/user) +/obj/decal/cleanable/blood/writing/examine(mob/user) . = ..() - to_chat(user, "It reads: [SPAN_COLOR(basecolor, "\"[message]\"")]") + . += SPAN_NOTICE("It reads: [SPAN_COLOR(basecolor, "\"[message]\"")]") -/obj/effect/decal/cleanable/blood/gibs +/obj/decal/cleanable/blood/gibs name = "gibs" desc = "They look bloody and gruesome." gender = PLURAL @@ -224,7 +226,7 @@ var/global/list/image/splatter_cache=list() scent_intensity = /singleton/scent_intensity/overpowering scent_range = 4 -/obj/effect/decal/cleanable/blood/gibs/on_update_icon() +/obj/decal/cleanable/blood/gibs/on_update_icon() var/image/giblets = new(base_icon, "[icon_state]_flesh", dir) if(!fleshcolor || fleshcolor == "rainbow") @@ -236,43 +238,43 @@ var/global/list/image/splatter_cache=list() blood.Blend(basecolor,ICON_MULTIPLY) icon = blood - overlays.Cut() - overlays += giblets + ClearOverlays() + AddOverlays(giblets) -/obj/effect/decal/cleanable/blood/gibs/up +/obj/decal/cleanable/blood/gibs/up random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") -/obj/effect/decal/cleanable/blood/gibs/down +/obj/decal/cleanable/blood/gibs/down random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1") -/obj/effect/decal/cleanable/blood/gibs/body +/obj/decal/cleanable/blood/gibs/body random_icon_states = list("gibhead", "gibtorso") -/obj/effect/decal/cleanable/blood/gibs/limb +/obj/decal/cleanable/blood/gibs/limb random_icon_states = list("gibleg", "gibarm") -/obj/effect/decal/cleanable/blood/gibs/core +/obj/decal/cleanable/blood/gibs/core random_icon_states = list("gibmid1", "gibmid2", "gibmid3") -/obj/effect/decal/cleanable/blood/gibs/proc/streak(list/directions) +/obj/decal/cleanable/blood/gibs/proc/streak(list/directions) var/direction = pick(directions) for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) sleep(3) if (i > 0) - var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(loc) + var/obj/decal/cleanable/blood/b = new /obj/decal/cleanable/blood/splatter(loc) b.basecolor = src.basecolor b.update_icon() if (step_to(src, get_step(src, direction), 0)) break -/obj/effect/decal/cleanable/blood/gibs/start_drying() +/obj/decal/cleanable/blood/gibs/start_drying() return -/obj/effect/decal/cleanable/blood/gibs/merge_with_blood() +/obj/decal/cleanable/blood/gibs/merge_with_blood() return FALSE -/obj/effect/decal/cleanable/mucus +/obj/decal/cleanable/mucus name = "mucus" desc = "Disgusting mucus." gender = PLURAL @@ -282,11 +284,11 @@ var/global/list/image/splatter_cache=list() persistent = TRUE var/dry = FALSE -/obj/effect/decal/cleanable/mucus/Initialize() +/obj/decal/cleanable/mucus/Initialize() . = ..() - addtimer(new Callback(src, .proc/set_dry), DRYING_TIME * 2) + addtimer(CALLBACK(src, PROC_REF(set_dry)), DRYING_TIME * 2) -/obj/effect/decal/cleanable/mucus/proc/set_dry() +/obj/decal/cleanable/mucus/proc/set_dry() dry = TRUE #undef BLOOD_SIZE_SMALL diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index 27bdd8117a6b0..5ec0d86038a5a 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -1,29 +1,29 @@ -/obj/effect/decal/cleanable/generic +/obj/decal/cleanable/generic name = "clutter" desc = "Someone should clean that up." gender = PLURAL - icon = 'icons/obj/objects.dmi' + icon = 'icons/obj/materials/shards.dmi' icon_state = "shards" -/obj/effect/decal/cleanable/ash +/obj/decal/cleanable/ash name = "ashes" desc = "Ashes to ashes, dust to dust, and into space." gender = PLURAL - icon = 'icons/obj/objects.dmi' + icon = 'icons/obj/ash.dmi' icon_state = "ash" -/obj/effect/decal/cleanable/ash/attack_hand(mob/user) +/obj/decal/cleanable/ash/attack_hand(mob/user) to_chat(user, SPAN_NOTICE("[src] sifts through your fingers.")) var/turf/simulated/floor/F = get_turf(src) if (istype(F)) F.dirt += 4 qdel(src) -/obj/effect/decal/cleanable/greenglow/Initialize() +/obj/decal/cleanable/greenglow/Initialize() . = ..() QDEL_IN(src, 2 MINUTES) -/obj/effect/decal/cleanable/dirt +/obj/decal/cleanable/dirt name = "dirt" desc = "Someone should clean that up." gender = PLURAL @@ -32,7 +32,7 @@ mouse_opacity = 0 persistent = TRUE -/obj/effect/decal/cleanable/flour +/obj/decal/cleanable/flour name = "flour" desc = "It's still good. Four second rule!" gender = PLURAL @@ -40,32 +40,32 @@ icon_state = "flour" persistent = TRUE -/obj/effect/decal/cleanable/greenglow +/obj/decal/cleanable/greenglow name = "glowing goo" desc = "Jeez. I hope that's not for lunch." gender = PLURAL - light_outer_range = 1 + light_range = 1 icon = 'icons/effects/effects.dmi' icon_state = "greenglow" persistent = TRUE generic_filth = TRUE -/obj/effect/decal/cleanable/cobweb +/obj/decal/cleanable/cobweb name = "cobweb" desc = "Somebody should remove that." layer = ABOVE_HUMAN_LAYER icon = 'icons/effects/effects.dmi' icon_state = "cobweb1" -/obj/effect/decal/cleanable/molten_item +/obj/decal/cleanable/molten_item name = "gooey grey mass" desc = "It looks like a melted... something." - icon = 'icons/obj/chemical.dmi' + icon = 'icons/obj/chemical_storage.dmi' icon_state = "molten" persistent = TRUE generic_filth = TRUE -/obj/effect/decal/cleanable/cobweb2 +/obj/decal/cleanable/cobweb2 name = "cobweb" desc = "Somebody should remove that." layer = ABOVE_HUMAN_LAYER @@ -73,7 +73,7 @@ icon_state = "cobweb2" //Vomit (sorry) -/obj/effect/decal/cleanable/vomit +/obj/decal/cleanable/vomit name = "vomit" desc = "Gosh, how unpleasant." gender = PLURAL @@ -82,19 +82,19 @@ persistent = TRUE generic_filth = TRUE -/obj/effect/decal/cleanable/vomit/New() - random_icon_states = icon_states(icon) +/obj/decal/cleanable/vomit/New() + random_icon_states = ICON_STATES(icon) ..() atom_flags |= ATOM_FLAG_OPEN_CONTAINER create_reagents(30, src) if(prob(75)) SetTransform(rotation = pick(90, 180, 270)) -/obj/effect/decal/cleanable/vomit/on_update_icon() +/obj/decal/cleanable/vomit/on_update_icon() . = ..() color = reagents.get_color() -/obj/effect/decal/cleanable/tomato_smudge +/obj/decal/cleanable/tomato_smudge name = "tomato smudge" desc = "It's red." icon = 'icons/effects/tomatodecal.dmi' @@ -102,7 +102,7 @@ persistent = TRUE generic_filth = TRUE -/obj/effect/decal/cleanable/egg_smudge +/obj/decal/cleanable/egg_smudge name = "smashed egg" desc = "Seems like this one won't hatch." icon = 'icons/effects/tomatodecal.dmi' @@ -110,7 +110,7 @@ persistent = TRUE generic_filth = TRUE -/obj/effect/decal/cleanable/pie_smudge //honk +/obj/decal/cleanable/pie_smudge //honk name = "smashed pie" desc = "It's pie cream from a cream pie." icon = 'icons/effects/tomatodecal.dmi' @@ -118,7 +118,7 @@ persistent = TRUE generic_filth = TRUE -/obj/effect/decal/cleanable/fruit_smudge +/obj/decal/cleanable/fruit_smudge name = "smudge" desc = "Some kind of fruit smear." icon = 'icons/effects/blood.dmi' diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index d3551615fb469..000fd35426999 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -1,4 +1,4 @@ -/obj/effect/decal/cleanable/blood/gibs/robot +/obj/decal/cleanable/blood/gibs/robot name = "robot debris" desc = "It's a useless heap of junk..." icon = 'icons/mob/robots_gibs.dmi' @@ -9,43 +9,43 @@ scent_intensity = /singleton/scent_intensity/normal scent_range = 2 -/obj/effect/decal/cleanable/blood/gibs/robot/on_update_icon() +/obj/decal/cleanable/blood/gibs/robot/on_update_icon() color = "#ffffff" -/obj/effect/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like +/obj/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like return -/obj/effect/decal/cleanable/blood/gibs/robot/streak(list/directions) +/obj/decal/cleanable/blood/gibs/robot/streak(list/directions) var/direction = pick(directions) for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) sleep(3) if (i > 0) if (prob(40)) - var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc) + var/obj/decal/cleanable/blood/oil/streak = new(src.loc) streak.update_icon() else if (prob(10)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread s.set_up(3, 1, src) s.start() if (step_to(src, get_step(src, direction), 0)) break -/obj/effect/decal/cleanable/blood/gibs/robot/limb +/obj/decal/cleanable/blood/gibs/robot/limb random_icon_states = list("gibarm", "gibleg") -/obj/effect/decal/cleanable/blood/gibs/robot/up +/obj/decal/cleanable/blood/gibs/robot/up random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibup1","gibup1") //2:7 is close enough to 1:4 -/obj/effect/decal/cleanable/blood/gibs/robot/down +/obj/decal/cleanable/blood/gibs/robot/down random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibdown1","gibdown1") //2:7 is close enough to 1:4 -/obj/effect/decal/cleanable/blood/oil +/obj/decal/cleanable/blood/oil basecolor = SYNTH_BLOOD_COLOUR cleanable_scent = "industrial lubricant" -/obj/effect/decal/cleanable/blood/oil/dry() +/obj/decal/cleanable/blood/oil/dry() return -/obj/effect/decal/cleanable/blood/oil/streak +/obj/decal/cleanable/blood/oil/streak random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5") amount = 2 diff --git a/code/game/objects/effects/decals/Cleanable/tracks.dm b/code/game/objects/effects/decals/Cleanable/tracks.dm index 150be680e34ed..3e75cdab14fcd 100644 --- a/code/game/objects/effects/decals/Cleanable/tracks.dm +++ b/code/game/objects/effects/decals/Cleanable/tracks.dm @@ -29,49 +29,66 @@ var/global/list/image/fluidtrack_cache=list() src.basecolor=_color src.wet=_wet -/obj/effect/decal/cleanable/blood/tracks/reveal_blood() +/obj/decal/cleanable/blood/tracks/reveal_blood() if(!fluorescent) - if(stack && length(stack)) - for(var/datum/fluidtrack/track in stack) + for (var/dir in setdirs) + var/datum/fluidtrack/track = setdirs["[dir]"] + if (track) track.basecolor = COLOR_LUMINOL ..() // Footprints, tire trails... -/obj/effect/decal/cleanable/blood/tracks +/obj/decal/cleanable/blood/tracks amount = 0 random_icon_states = null icon = 'icons/effects/fluidtracks.dmi' cleanable_scent = null - var/dirs=0 + /// Bitflag. All directions, both incoming and outgoing, that this track decal has prints traveling in. See `setdirs` for a definition of each flag. + var/dirs = EMPTY_BITFIELD + /// String. Icon state used for incoming tracks during `update_icon()`. var/coming_state="blood1" + /// String. Icon state used for outgoing tracks during `update_icon()`. var/going_state="blood2" - var/updatedtracks=0 - // dir = id in stack + /** + * List (`"number"` -> instances of `/datum/fluidtrack`). Map of directional bit flags to attached fluidtrack isntances. + * + * Indexes are stringified bitflags of the four main cardinal directions, duplicated once. The first set is + * incoming footsteps, and the second outgoing. + * + * Quick reference of each bitflag: + * ```dm + * INCOMING_NORTH = 1 + * INCOMING_SOUTH = 2 + * INCOMING_EAST = 4 + * INCOMING_WEST = 8 + * OUTGOING_NORTH = 16 + * OUTGOING_SOUTH = 32 + * OUTGOING_EAST = 64 + * OUTGOING_WEST = 128 + * ``` + */ var/list/setdirs=list( - "1"=0, - "2"=0, - "4"=0, - "8"=0, - "16"=0, - "32"=0, - "64"=0, - "128"=0 + "1" = null, + "2" = null, + "4" = null, + "8" = null, + "16" = null, + "32" = null, + "64" = null, + "128" = null ) - // List of laid tracks and their colors. - var/list/datum/fluidtrack/stack=list() - - /** - * Add tracks to an existing trail. - * - * @param DNA bloodDNA to add to collection. - * @param comingdir Direction tracks come from, or 0. - * @param goingdir Direction tracks are going to (or 0). - * @param bloodcolor Color of the blood when wet. - */ -/obj/effect/decal/cleanable/blood/tracks/proc/AddTracks(list/DNA, comingdir, goingdir, bloodcolor=COLOR_BLOOD_HUMAN) +/** + * Add tracks to an existing trail. + * + * @param DNA bloodDNA to add to collection. + * @param comingdir Direction tracks come from, or 0. + * @param goingdir Direction tracks are going to (or 0). + * @param bloodcolor Color of the blood when wet. + */ +/obj/decal/cleanable/blood/tracks/proc/AddTracks(list/DNA, comingdir, goingdir, bloodcolor=COLOR_BLOOD_HUMAN) var/updated=0 // Shift our goingdir 4 spaces to the left so it's in the GOING bitblock. var/realgoing = SHIFTL(goingdir, 4) @@ -92,16 +109,13 @@ var/global/list/image/fluidtrack_cache=list() if(comingdir&b) // If not wet or not set if(dirs&b) - var/sid=setdirs["[b]"] - track=stack[sid] - if(track.wet==t && track.basecolor==bloodcolor) + track = setdirs["[b]"] + if (track && track.wet == t && track.basecolor == bloodcolor) continue // Remove existing stack entry - stack.Remove(track) - track=new /datum/fluidtrack(b,bloodcolor,t) - stack.Add(track) - setdirs["[b]"]=stack.Find(track) - updatedtracks |= b + qdel(track) + track = new /datum/fluidtrack(b, bloodcolor, t) + setdirs["[b]"] = track updated=1 // GOING BIT (shift up 4) @@ -109,16 +123,13 @@ var/global/list/image/fluidtrack_cache=list() if(realgoing&b) // If not wet or not set if(dirs&b) - var/sid=setdirs["[b]"] - track=stack[sid] - if(track.wet==t && track.basecolor==bloodcolor) + track = setdirs["[b]"] + if (track && track.wet == t && track.basecolor == bloodcolor) continue // Remove existing stack entry - stack.Remove(track) - track=new /datum/fluidtrack(b,bloodcolor,t) - stack.Add(track) - setdirs["[b]"]=stack.Find(track) - updatedtracks |= b + qdel(track) + track = new /datum/fluidtrack(b, bloodcolor, t) + setdirs["[b]"] = track updated=1 dirs |= comingdir|realgoing @@ -127,14 +138,16 @@ var/global/list/image/fluidtrack_cache=list() if(updated) update_icon() -/obj/effect/decal/cleanable/blood/tracks/on_update_icon() - overlays.Cut() +/obj/decal/cleanable/blood/tracks/on_update_icon() + ClearOverlays() color = "#ffffff" var/truedir=0 // Update ONLY the overlays that have changed. - for(var/datum/fluidtrack/track in stack) - var/stack_idx=setdirs["[track.direction]"] + for (var/dir in setdirs) + var/datum/fluidtrack/track = setdirs["[dir]"] + if (!track) + continue var/state=coming_state truedir=track.direction if(truedir&240) // Check if we're in the GOING block @@ -148,11 +161,9 @@ var/global/list/image/fluidtrack_cache=list() track.fresh=0 track.overlay=I - stack[stack_idx]=track - overlays += I - updatedtracks=0 // Clear our memory of updated tracks. + AddOverlays(I) -/obj/effect/decal/cleanable/blood/tracks/footprints +/obj/decal/cleanable/blood/tracks/footprints name = "wet footprints" dryname = "dried footprints" desc = "They look like still wet tracks left by footwear." @@ -160,16 +171,16 @@ var/global/list/image/fluidtrack_cache=list() coming_state = "human1" going_state = "human2" -/obj/effect/decal/cleanable/blood/tracks/footprints/reversed +/obj/decal/cleanable/blood/tracks/footprints/reversed coming_state = "human2" going_state = "human1" -/obj/effect/decal/cleanable/blood/tracks/footprints/reversed/AddTracks(list/DNA, comingdir, goingdir, bloodcolor=COLOR_BLOOD_HUMAN) +/obj/decal/cleanable/blood/tracks/footprints/reversed/AddTracks(list/DNA, comingdir, goingdir, bloodcolor=COLOR_BLOOD_HUMAN) comingdir = reverse_direction(comingdir) goingdir = reverse_direction(goingdir) ..(DNA, comingdir, goingdir, bloodcolor) -/obj/effect/decal/cleanable/blood/tracks/snake +/obj/decal/cleanable/blood/tracks/snake name = "wet tracks" dryname = "dried tracks" desc = "They look like still wet tracks left by a giant snake." @@ -177,7 +188,7 @@ var/global/list/image/fluidtrack_cache=list() coming_state = "snake1" going_state = "snake2" -/obj/effect/decal/cleanable/blood/tracks/paw +/obj/decal/cleanable/blood/tracks/paw name = "wet tracks" dryname = "dried tracks" desc = "They look like still wet tracks left by a mammal." @@ -185,7 +196,7 @@ var/global/list/image/fluidtrack_cache=list() coming_state = "paw1" going_state = "paw2" -/obj/effect/decal/cleanable/blood/tracks/claw +/obj/decal/cleanable/blood/tracks/claw name = "wet tracks" dryname = "dried tracks" desc = "They look like still wet tracks left by a reptile." @@ -193,7 +204,7 @@ var/global/list/image/fluidtrack_cache=list() coming_state = "claw1" going_state = "claw2" -/obj/effect/decal/cleanable/blood/tracks/wheels +/obj/decal/cleanable/blood/tracks/wheels name = "wet tracks" dryname = "dried tracks" desc = "They look like still wet tracks left by wheels." @@ -202,7 +213,7 @@ var/global/list/image/fluidtrack_cache=list() going_state = "" gender = PLURAL -/obj/effect/decal/cleanable/blood/tracks/body +/obj/decal/cleanable/blood/tracks/body name = "wet trails" dryname = "dried trails" desc = "A still-wet trail left by someone crawling." diff --git a/code/game/objects/effects/decals/bullet_holes.dm b/code/game/objects/effects/decals/bullet_holes.dm new file mode 100644 index 0000000000000..8369679add9ce --- /dev/null +++ b/code/game/objects/effects/decals/bullet_holes.dm @@ -0,0 +1,7 @@ + +/obj/overlay/bmark + name = "bullet hole" + desc = "Well someone shot something." + icon = 'icons/effects/effects.dmi' + layer = DECAL_LAYER + icon_state = "scorch" diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index 6cf97bb0c75a1..a9095efc07420 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -1,4 +1,4 @@ -/obj/effect/decal/cleanable +/obj/decal/cleanable density = FALSE anchored = TRUE waterproof = FALSE @@ -13,7 +13,7 @@ var/scent_descriptor = SCENT_DESC_SMELL var/scent_range = 2 -/obj/effect/decal/cleanable/Initialize() +/obj/decal/cleanable/Initialize() . = ..() if(isspace(loc)) return INITIALIZE_HINT_QDEL @@ -21,7 +21,7 @@ hud_overlay.plane = EFFECTS_ABOVE_LIGHTING_PLANE set_cleanable_scent() -/obj/effect/decal/cleanable/Initialize(ml, _age) +/obj/decal/cleanable/Initialize(ml, _age) if(!isnull(_age)) age = _age if(random_icon_states && length(src.random_icon_states) > 0) @@ -29,20 +29,20 @@ SSpersistence.track_value(src, /datum/persistent/filth) . = ..() -/obj/effect/decal/cleanable/Destroy() +/obj/decal/cleanable/Destroy() SSpersistence.forget_value(src, /datum/persistent/filth) . = ..() -/obj/effect/decal/cleanable/water_act(depth) +/obj/decal/cleanable/water_act(depth) ..() qdel(src) -/obj/effect/decal/cleanable/clean_blood(ignore = 0) +/obj/decal/cleanable/clean_blood(ignore = 0) if(!ignore) qdel(src) return ..() -/obj/effect/decal/cleanable/proc/set_cleanable_scent() +/obj/decal/cleanable/proc/set_cleanable_scent() if(cleanable_scent) set_extension(src, /datum/extension/scent/custom, cleanable_scent, scent_intensity, scent_descriptor, scent_range) diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm index 123db983f646d..16ebe1ff4cc2f 100644 --- a/code/game/objects/effects/decals/contraband.dm +++ b/code/game/objects/effects/decals/contraband.dm @@ -1,13 +1,11 @@ - //########################## CONTRABAND ;3333333333333333333 -Agouri ################################################### /obj/item/contraband name = "contraband item" desc = "You probably shouldn't be holding this." - icon = 'icons/obj/contraband.dmi' + icon = 'icons/obj/structures/contraband.dmi' force = 0 - /obj/item/contraband/poster name = "rolled-up poster" desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface." @@ -18,9 +16,7 @@ if(given_poster_type && !ispath(given_poster_type, /singleton/poster)) CRASH("Invalid poster type: [log_info_line(given_poster_type)]") - poster_type = given_poster_type || poster_type - if(!poster_type) - poster_type = pick(subtypesof(/singleton/poster)) + poster_type = given_poster_type || poster_type || get_random_poster_type() ..() /obj/item/contraband/poster/Initialize() @@ -31,27 +27,22 @@ return ..() //Places the poster on a wall -/obj/item/contraband/poster/afterattack(atom/A, mob/user, adjacent, clickparams) - if (!adjacent) - return - - //must place on a wall and user must not be inside a closet/exosuit/whatever - var/turf/W = A +/obj/item/contraband/poster/use_after(turf/W, mob/living/user, click_parameters) if(!isturf(W)) - return + return FALSE if (!W.is_wall() || !isturf(user.loc)) to_chat(user, SPAN_WARNING("You can't place this here!")) - return + return TRUE var/placement_dir = get_dir(user, W) if (!(placement_dir in GLOB.cardinal)) to_chat(user, SPAN_WARNING("You must stand directly in front of the wall you wish to place that on.")) - return + return TRUE if (ArePostersOnWall(W)) to_chat(user, SPAN_NOTICE("There is already a poster there!")) - return + return TRUE user.visible_message(SPAN_NOTICE("\The [user] starts placing a poster on \the [W]."),SPAN_NOTICE("You start placing the poster on \the [W].")) @@ -64,6 +55,7 @@ else // We cannot rely on user being on the appropriate turf when placement fails P.roll_and_drop(get_step(W, turn(placement_dir, 180))) + return TRUE /obj/item/contraband/poster/proc/ArePostersOnWall(turf/W, placed_poster) //just check if there is a poster on or adjacent to the wall @@ -78,97 +70,3 @@ return TRUE return FALSE - -//############################## THE ACTUAL DECALS ########################### - -/obj/structure/sign/poster - name = "poster" - desc = "A large piece of space-resistant printed paper." - icon = 'icons/obj/contraband.dmi' - anchored = TRUE - var/poster_type - var/ruined = 0 - var/torch_poster = FALSE //for torch-specific content - -/obj/structure/sign/poster/bay_9 - poster_type = /singleton/poster/bay_9 - -/obj/structure/sign/poster/bay_50 - poster_type = /singleton/poster/bay_50 - -/obj/structure/sign/poster/torch - poster_type = /singleton/poster/torch - torch_poster = TRUE - -/obj/structure/sign/poster/New(newloc, placement_dir = null, give_poster_type = null) - ..(newloc) - - if(!poster_type) - if(give_poster_type) - poster_type = give_poster_type - else - poster_type = pick(subtypesof(/singleton/poster) - typesof(/singleton/poster/torch)) - if(torch_poster) - poster_type = pick(subtypesof(/singleton/poster/torch)) - set_poster(poster_type) - - switch (placement_dir) - if (NORTH) - pixel_x = 0 - pixel_y = 32 - if (SOUTH) - pixel_x = 0 - pixel_y = -32 - if (EAST) - pixel_x = 32 - pixel_y = 0 - if (WEST) - pixel_x = -32 - pixel_y = 0 - -/obj/structure/sign/poster/proc/set_poster(poster_type) - var/singleton/poster/design = GET_SINGLETON(poster_type) - SetName("[initial(name)] - [design.name]") - desc = "[initial(desc)] [design.desc]" - icon_state = design.icon_state - -/obj/structure/sign/poster/attackby(obj/item/W as obj, mob/user as mob) - if(isWirecutter(W)) - playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) - if(ruined) - to_chat(user, SPAN_NOTICE("You remove the remnants of the poster.")) - qdel(src) - else - to_chat(user, SPAN_NOTICE("You carefully remove the poster from the wall.")) - roll_and_drop(user.loc) - return - - -/obj/structure/sign/poster/attack_hand(mob/user as mob) - - if(ruined) - return - - if(alert("Do I want to rip the poster from the wall?","You think...","Yes","No") == "Yes") - - if(ruined || !user.Adjacent(src)) - return - - visible_message(SPAN_WARNING("\The [user] rips \the [src] in a single, decisive motion!") ) - playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, 1) - ruined = 1 - icon_state = "poster_ripped" - SetName("ripped poster") - desc = "You can't make out anything from the poster's original print. It's ruined." - add_fingerprint(user) - -/obj/structure/sign/poster/proc/roll_and_drop(turf/newloc) - new/obj/item/contraband/poster(newloc, poster_type) - qdel(src) - -/singleton/poster - // Name suffix. Poster - [name] - var/name="" - // Description suffix - var/desc="" - var/icon_state="" diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index 54f4ad017637e..b0479bfc90cbc 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -1,9 +1,9 @@ -/obj/effect/decal/cleanable/crayon +/obj/decal/cleanable/crayon name = "rune" desc = "A rune drawn in crayon." - icon = 'icons/obj/rune.dmi' + icon = 'icons/effects/crayondecal.dmi' -/obj/effect/decal/cleanable/crayon/New(location, main = "#ffffff", shade = "#000000", type = "rune") +/obj/decal/cleanable/crayon/New(location, main = "#ffffff", shade = "#000000", type = "rune") ..() name = type desc = "A [type] drawn in crayon." @@ -18,6 +18,6 @@ var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]s", 2.1) mainOverlay.Blend(main,ICON_ADD) shadeOverlay.Blend(shade,ICON_ADD) - overlays += mainOverlay - overlays += shadeOverlay + AddOverlays(mainOverlay) + AddOverlays(shadeOverlay) add_hiddenprint(usr) diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm index 26a1d4bfeb157..8d65ee03d885a 100644 --- a/code/game/objects/effects/decals/decal.dm +++ b/code/game/objects/effects/decals/decal.dm @@ -1,12 +1,12 @@ -/obj/effect/decal +/obj/decal layer = DECAL_LAYER -/obj/effect/decal/fall_damage() +/obj/decal/fall_damage() return 0 -/obj/effect/decal/is_burnable() +/obj/decal/is_burnable() return TRUE -/obj/effect/decal/lava_act() +/obj/decal/lava_act() . = !throwing ? ..() : FALSE diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index 4a4a78bb444ea..04dbaca3a3aca 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -1,4 +1,4 @@ -/obj/effect/decal/point +/obj/decal/point name = "arrow" desc = "It's an arrow hanging in mid-air. There may be a wizard about." icon = 'icons/mob/screen1.dmi' @@ -7,12 +7,12 @@ anchored = TRUE mouse_opacity = 0 -/obj/effect/decal/point/Initialize() +/obj/decal/point/Initialize() . = ..() QDEL_IN(src, 2 SECONDS) // Used for spray that you spray at walls, tables, hydrovats etc -/obj/effect/decal/spraystill +/obj/decal/spraystill density = FALSE anchored = TRUE layer = PROJECTILE_LAYER diff --git a/code/game/objects/effects/decals/posters/_defines.dm b/code/game/objects/effects/decals/posters/_defines.dm new file mode 100644 index 0000000000000..f48f8fea94112 --- /dev/null +++ b/code/game/objects/effects/decals/posters/_defines.dm @@ -0,0 +1,3 @@ +var/global/const/POSTER_FLAG_NONE = EMPTY_BITFIELD +var/global/const/POSTER_FLAG_CONTRABAND = FLAG(0) +var/global/const/POSTER_FLAG_RANDOM_PICK = FLAG(1) diff --git a/code/game/objects/effects/decals/posters/bs12.dm b/code/game/objects/effects/decals/posters/bs12.dm index 18a164e1ae551..4ff724babbc51 100644 --- a/code/game/objects/effects/decals/posters/bs12.dm +++ b/code/game/objects/effects/decals/posters/bs12.dm @@ -294,27 +294,67 @@ name = "SCGF recruitment poster" desc = "A poster produced by the SCGF. It depicts a tactical-looking Fourth Fleet petty officer, standing in front of the SCG flag proudly." -/singleton/poster/torch - icon_state="poster_ripped" - name = "Torch Poster" +/singleton/poster/annoyed_gas + icon_state = "annoyed_gas" + name = "Annoyed GAS" + desc = "The poster shows a chittering Giant Armored Serpentid with its scythe arms raised \ + and ready to attack. \"Run!\" is written in big red letters, and at the very bottom there \ + is a small text: \"If during the communication process the GAS began to actively chitter, \ + buzz, raised sickles or strikes in the air with them - you must turn around and leave him \ + alone.\"" + +/singleton/poster/healthy_hugs + icon_state = "healthy_hugs" + name = "Healthy hugs" + desc = "The poster shows a Giant Armored Serpentid holding a girl with a yellow flower in \ + her hair with sickles. On the left - a large inscription \"HUGS\" in green letters, under \ + which it is written in small letters: \"Hugs are useful both morally and physically: for \ + example, the human race lowers blood pressure and produces oxytocin. Almost any crew will \ + increase confidence and feel good. The main thing is - be sure to ask permission.\"" + +/singleton/poster/no_alcohol + icon_state = "no_alcohol" + name = "СП * РТ" + desc = "At the very top of the poster is a word, where one of the letters is replaced by \ + an asterisk: \"СП * РТ\", and below - two signatures. The first: \"o - сила\", the second \ + \"и - могила\". The poster is clean and without small text, which makes it clear the \ + seriousness of the statement." + +/singleton/poster/pizza_for_captain + icon_state = "pizza_for_captain" + name = "Pizza for Captain" + desc = "On fairly cheap thick paper, the red inscription reads: \"Pizza for Captain\". The \ + slice of pizza itself is also drawn... with pineapples? Wouldn't eat this for anything! \ + Someone apparently doesn't like the captain very much..." + +/singleton/poster/would_you_plant + icon_state = "would_you_plant" + name = "Would you seed?" + desc = "A large green poster shows a brand new hydroponic tray. On top is a large text with \ + the evocative question, \"Would you seed?\", with small text explaining, \"Hydroponic trays \ + allow you to grow absolutely any crop quickly and efficiently, and the indicators tell you \ + when the plant needs care! And how can you not seed one of these?\"" + +/singleton/poster/cabbage_tray + icon_state = "cabbage_tray" + name = "Cabbage tray" + desc = "The poster shows a Giant Armored Serpentid with a hydroponic tray of ripe cabbage \ + in front of it, indicated by a green indicator on it. On the left side of the poster it \ + says: \"Most GAS don't know how to cut existing plantings. Please don't plant all the trays \ + and leave a few free ones. In order for the serpentid to eat, it only needs literally a \ + couple of empty trays.\"" + +/singleton/poster/contraband_only + icon_state = "poster_ripped" + name = "Contraband Poster" desc = "You probably shouldn't be seeing this." - -/singleton/poster/torch/event1 - icon_state="bsposter_event1" - name = "Justice for Joe" - desc = "A hand-written poster demanding the release of one SCPO Joseph Tornakov from Fleet Intelligence custody. It's somewhat faded." - -/singleton/poster/torch/event2 - icon_state="bsposter_event2" - name = "Captain for Senate" - desc = "A poster loudly advertising the SEV Torch's captain's upcoming bid for SCG Senate. The fine print lightly suggests that failing to vote in their favor will result in an NJP." - -/singleton/poster/torch/event3 - icon_state="bsposter_event3" - name = "Visit E-14b Outpost" - desc = "This poster invites personnel to visit the the E-14b research outpost, built through joint Terran and Expeditionary Corps efforts. According to the poster, it's still under construction." - -/singleton/poster/torch/event4 - icon_state="bsposter_event4" - name = "Scientific Cooperation" - desc = "This poster depicts a Sol Expeditionary Corps captain shaking hands with a Terran Pioneer Corps officer. It appears to espouse greater scientific cooperation between the two organisations." + abstract_type = /singleton/poster/contraband_only + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + +/singleton/poster/contraband_only/unusual_gas + icon_state = "unusual_gas" + name = "Unusual GAS" + desc = "The poster shows a Giant Armored Serpentid. On his tail is what appears to be a \ + large black gaiter with purple stripes. GAS sickles are dressed in cute little mitts of \ + the same color. The entire lower right corner of the poster is occupied by a large \ + inscription \"uwu\", and in the lower left it says: \"More on our site - WetSkrell.nt\"." diff --git a/code/game/objects/effects/decals/posters/posters.dm b/code/game/objects/effects/decals/posters/posters.dm new file mode 100644 index 0000000000000..efa1b636be0bc --- /dev/null +++ b/code/game/objects/effects/decals/posters/posters.dm @@ -0,0 +1,119 @@ +/obj/structure/sign/poster + name = "poster" + desc = "A large piece of space-resistant printed paper." + icon = 'icons/obj/structures/contraband.dmi' + icon_state = "random_poster" + anchored = TRUE + var/poster_type + var/ruined = 0 + var/random_poster_base_type = /singleton/poster + var/excluded_poster_flags = POSTER_FLAG_CONTRABAND + +/obj/structure/sign/poster/bay_9 + poster_type = /singleton/poster/bay_9 + +/obj/structure/sign/poster/bay_50 + poster_type = /singleton/poster/bay_50 + +/obj/structure/sign/poster/New(newloc, placement_dir = null, given_poster_type = null) + ..(newloc) + + if(given_poster_type && !ispath(given_poster_type, /singleton/poster)) + CRASH("Invalid poster type: [log_info_line(given_poster_type)]") + + poster_type = given_poster_type || poster_type || GetRandomPosterType() + set_poster(poster_type) + + switch (placement_dir) + if (NORTH) + pixel_x = 0 + pixel_y = 32 + if (SOUTH) + pixel_x = 0 + pixel_y = -32 + if (EAST) + pixel_x = 32 + pixel_y = 0 + if (WEST) + pixel_x = -32 + pixel_y = 0 + +/// Returns a random poster type. +/// Uses the random_poster_base_type and excluded_poster_flags vars to limit the potential set of poster types to select from. +/obj/structure/sign/poster/proc/GetRandomPosterType() + return get_random_poster_type(random_poster_base_type, excluded_poster_flags) + +/obj/structure/sign/poster/proc/set_poster(poster_type) + var/singleton/poster/design = GET_SINGLETON(poster_type) + SetName("[initial(name)] - [design.name]") + desc = "[initial(desc)] [design.desc]" + icon_state = design.icon_state + +/obj/structure/sign/poster/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + balloon_alert(user, "нужны кусачки!") + +/obj/structure/sign/poster/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + // Wirecutters - Remove poster + if(ruined) + user.visible_message( + SPAN_NOTICE("[user] removes the remnants of [src] with [tool]."), + SPAN_NOTICE("You remove the remnants of [src] with [tool].") + ) + qdel(src) + return + user.visible_message( + SPAN_NOTICE("[user] removes [src] with [tool]."), + SPAN_NOTICE("You remove [src] with [tool].") + ) + roll_and_drop(user.loc) + + +/obj/structure/sign/poster/attack_hand(mob/user as mob) + if(ruined) + return + + if(alert("Do I want to rip the poster from the wall?","You think...","Yes","No") == "Yes") + if(ruined || !user.Adjacent(src)) + return + + visible_message(SPAN_WARNING("[user] rips [src] in a single, decisive motion!") ) + playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, 1) + ruined = 1 + icon_state = "poster_ripped" + SetName("ripped poster") + desc = "You can't make out anything from the poster's original print. It's ruined." + add_fingerprint(user) + +/obj/structure/sign/poster/proc/roll_and_drop(turf/newloc) + var/obj/item/contraband/poster/poster_item = new/obj/item/contraband/poster(newloc, poster_type) + transfer_fingerprints_to(poster_item) + qdel_self() + +/singleton/poster + // Name suffix. Poster - [name] + var/name="" + // Description suffix + var/desc="" + var/icon_state="" + var/poster_flags = POSTER_FLAG_RANDOM_PICK + abstract_type = /singleton/poster + +/// Picks and returns a random (sub)type of the provided random_poster_base_type which: +/// * Is not abstract, and +/// * Has a poster_flags value with the POSTER_FLAG_RANDOM_PICK flag, and +/// * Has a poster_flags value which does not match one or more of the excluded_flags (if provided) +/proc/get_random_poster_type(random_poster_base_type = /singleton/poster, excluded_flags) + var/list/valid_posters = new() + for (var/singleton/poster/poster_type as anything in typesof(random_poster_base_type)) + if (is_abstract(poster_type)) + continue + + var/poster_flags = initial(poster_type.poster_flags) + if ((poster_flags & POSTER_FLAG_RANDOM_PICK) && (!excluded_flags || !(poster_flags & excluded_flags))) + valid_posters += poster_type + + return pick(valid_posters) diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm index dec09aa63c41f..8682425e15c0a 100644 --- a/code/game/objects/effects/decals/remains.dm +++ b/code/game/objects/effects/decals/remains.dm @@ -8,7 +8,7 @@ /obj/item/remains/human desc = "They look like human remains. They have a strange aura about them." -/obj/effect/decal/remains // Apparently used by cult somewhere? +/obj/decal/remains // Apparently used by cult somewhere? desc = "They look like human remains. They have a strange aura about them." icon = 'icons/effects/blood.dmi' icon_state = "remains" @@ -34,7 +34,7 @@ to_chat(user, SPAN_NOTICE("[src] sinks together into a pile of ash.")) var/turf/simulated/floor/F = get_turf(src) if (istype(F)) - new /obj/effect/decal/cleanable/ash(F) + new /obj/decal/cleanable/ash(F) qdel(src) /obj/item/remains/robot/attack_hand(mob/user as mob) diff --git a/code/game/objects/effects/decals/warning_stripes.dm b/code/game/objects/effects/decals/warning_stripes.dm index ce49cb1f93689..8d62c61be6398 100644 --- a/code/game/objects/effects/decals/warning_stripes.dm +++ b/code/game/objects/effects/decals/warning_stripes.dm @@ -1,11 +1,11 @@ -/obj/effect/decal/warning_stripes +/obj/decal/warning_stripes icon = 'icons/effects/warning_stripes.dmi' -/obj/effect/decal/warning_stripes/New() +/obj/decal/warning_stripes/New() . = ..() var/turf/T=get_turf(src) var/image/I=image(icon, icon_state = icon_state, dir = dir) I.color=color I.layer = DECAL_LAYER - T.overlays += I + T.AddOverlays(I) qdel(src) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 6fd074fb7205c..f00078c9d5b2f 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -6,21 +6,21 @@ would spawn and follow the beaker, even if it is carried or thrown. */ -/obj/effect/effect +/obj/effect name = "effect" icon = 'icons/effects/effects.dmi' mouse_opacity = 0 unacidable = TRUE pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GRILLE -/datum/effect/effect/system +/datum/effect var/number = 3 var/cardinals = 0 var/turf/location var/atom/holder var/setup = 0 -/datum/effect/effect/system/proc/set_up(n = 3, c = 0, turf/loc) +/datum/effect/proc/set_up(n = 3, c = 0, turf/loc) if(n > 10) n = 10 number = n @@ -28,12 +28,12 @@ would spawn and follow the beaker, even if it is carried or thrown. location = loc setup = 1 -/datum/effect/effect/system/proc/attach(atom/atom) +/datum/effect/proc/attach(atom/atom) holder = atom -/datum/effect/effect/system/proc/start() +/datum/effect/proc/start() -/datum/effect/effect/system/proc/spread() +/datum/effect/proc/spread() ///////////////////////////////////////////// @@ -45,37 +45,37 @@ would spawn and follow the beaker, even if it is carried or thrown. // will always spawn at the items location, even if it's moved. /* Example: - var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread() -- creates new system + var/datum/effect/steam_spread/steam = new /datum/effect/steam_spread() -- creates new system steam.set_up(5, 0, mob.loc) -- sets up variables OPTIONAL: steam.attach(mob) steam.start() -- spawns the effect */ ///////////////////////////////////////////// -/obj/effect/effect/steam +/obj/effect/steam name = "steam" icon = 'icons/effects/effects.dmi' icon_state = "extinguish" density = FALSE -/datum/effect/effect/system/steam_spread +/datum/effect/steam_spread -/datum/effect/effect/system/steam_spread/set_up(n = 3, c = 0, turf/loc) +/datum/effect/steam_spread/set_up(n = 3, c = 0, turf/loc) if(n > 10) n = 10 number = n cardinals = c location = loc -/datum/effect/effect/system/steam_spread/start() +/datum/effect/steam_spread/start() var/i = 0 for(i=0, i 10) n = 10 number = n @@ -136,16 +136,16 @@ would spawn and follow the beaker, even if it is carried or thrown. else location = get_turf(loca) -/datum/effect/effect/system/spark_spread/start() +/datum/effect/spark_spread/start() var/i = 0 for(i=0, i 10) n = 10 number = n @@ -342,17 +338,17 @@ would spawn and follow the beaker, even if it is carried or thrown. if(direct) direction = direct -/datum/effect/effect/system/smoke_spread/start() +/datum/effect/smoke_spread/start() var/i = 0 for(i=0, i 20) return - addtimer(new Callback(src, /datum/effect/effect/system/proc/spread, i), 0) + addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/effect, spread), i), 0) -/datum/effect/effect/system/smoke_spread/spread(i) +/datum/effect/smoke_spread/spread(i) if(holder) src.location = get_turf(holder) - var/obj/effect/effect/smoke/smoke = new smoke_type(location) + var/obj/effect/smoke/smoke = new smoke_type(location) src.total_smoke++ var/direction = src.direction if(!direction) @@ -369,15 +365,15 @@ would spawn and follow the beaker, even if it is carried or thrown. QDEL_IN(smoke, smoke.time_to_live*0.75+rand(10,30)) total_smoke-- -/datum/effect/effect/system/smoke_spread/bad - smoke_type = /obj/effect/effect/smoke/bad +/datum/effect/smoke_spread/bad + smoke_type = /obj/effect/smoke/bad -/datum/effect/effect/system/smoke_spread/sleepy - smoke_type = /obj/effect/effect/smoke/sleepy +/datum/effect/smoke_spread/sleepy + smoke_type = /obj/effect/smoke/sleepy -/datum/effect/effect/system/smoke_spread/mustard - smoke_type = /obj/effect/effect/smoke/mustard +/datum/effect/smoke_spread/mustard + smoke_type = /obj/effect/smoke/mustard ///////////////////////////////////////////// @@ -386,7 +382,7 @@ would spawn and follow the beaker, even if it is carried or thrown. /// Then do start() to start it and stop() to stop it, obviously /// and don't call start() in a loop that will be repeated otherwise it'll get spammed! ///////////////////////////////////////////// -/datum/effect/effect/system/trail +/datum/effect/trail var/turf/oldposition var/processing = 1 var/on = 1 @@ -396,12 +392,12 @@ would spawn and follow the beaker, even if it is carried or thrown. var/trail_type var/duration_of_effect = 10 -/datum/effect/effect/system/trail/set_up(atom/atom) +/datum/effect/trail/set_up(atom/atom) attach(atom) oldposition = get_turf(atom) -/datum/effect/effect/system/trail/start() +/datum/effect/trail/start() if(!src.on) src.on = 1 src.processing = 1 @@ -411,7 +407,7 @@ would spawn and follow the beaker, even if it is carried or thrown. var/turf/T = get_turf(src.holder) if(T != src.oldposition) if(is_type_in_list(T, specific_turfs) && (!max_number || number < max_number)) - var/obj/effect/effect/trail = new trail_type(oldposition) + var/obj/effect/trail = new trail_type(oldposition) src.oldposition = T effect(trail) number++ @@ -428,36 +424,36 @@ would spawn and follow the beaker, even if it is carried or thrown. src.processing = 1 src.start() -/datum/effect/effect/system/trail/proc/stop() +/datum/effect/trail/proc/stop() src.processing = 0 src.on = 0 -/datum/effect/effect/system/trail/proc/effect(obj/effect/effect/T) +/datum/effect/trail/proc/effect(obj/effect/T) T.set_dir(src.holder.dir) return -/obj/effect/effect/ion_trails +/obj/effect/ion_trails name = "ion trails" icon_state = "ion_trails" anchored = TRUE -/datum/effect/effect/system/trail/ion - trail_type = /obj/effect/effect/ion_trails +/datum/effect/trail/ion + trail_type = /obj/effect/ion_trails specific_turfs = list(/turf/space) duration_of_effect = 20 -/datum/effect/effect/system/trail/ion/effect(obj/effect/effect/T) +/datum/effect/trail/ion/effect(obj/effect/T) ..() flick("ion_fade", T) T.icon_state = "blank" -/obj/effect/effect/thermal_trail +/obj/effect/thermal_trail name = "therman trail" icon_state = "explosion_particle" anchored = TRUE -/datum/effect/effect/system/trail/thermal - trail_type = /obj/effect/effect/thermal_trail +/datum/effect/trail/thermal + trail_type = /obj/effect/thermal_trail specific_turfs = list(/turf/space) ///////////////////////////////////////////// @@ -465,14 +461,14 @@ would spawn and follow the beaker, even if it is carried or thrown. // even if it's carried of thrown. ///////////////////////////////////////////// -/datum/effect/effect/system/trail/steam +/datum/effect/trail/steam max_number = 3 - trail_type = /obj/effect/effect/steam + trail_type = /obj/effect/steam -/datum/effect/effect/system/reagents_explosion +/datum/effect/reagents_explosion var/amount // TNT equivalent -/datum/effect/effect/system/reagents_explosion/set_up (amt, loc, flash = 0, flash_fact = 0) +/datum/effect/reagents_explosion/set_up (amt, loc, flash = 0, flash_fact = 0) amount = amt if(isturf(loc)) location = loc @@ -481,9 +477,9 @@ would spawn and follow the beaker, even if it is carried or thrown. return -/datum/effect/effect/system/reagents_explosion/start() +/datum/effect/reagents_explosion/start() if (amount <= 2) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread() s.set_up(2, 1, location) s.start() diff --git a/code/game/objects/effects/explosion_particles.dm b/code/game/objects/effects/explosion_particles.dm index 82eabed9be726..a9874b155ecae 100644 --- a/code/game/objects/effects/explosion_particles.dm +++ b/code/game/objects/effects/explosion_particles.dm @@ -1,4 +1,4 @@ -/obj/effect/expl_particles +/obj/expl_particles name = "explosive particles" icon = 'icons/effects/effects.dmi' icon_state = "explosion_particle" @@ -6,31 +6,30 @@ anchored = TRUE mouse_opacity = 0 -/obj/effect/expl_particles/New() +/obj/expl_particles/New() ..() QDEL_IN(src, 1 SECOND) -/datum/effect/system/expl_particles - var/number = 10 - var/turf/location +/datum/effect/expl_particles + number = 10 var/total_particles = 0 -/datum/effect/system/expl_particles/proc/set_up(n = 10, loca) +/datum/effect/expl_particles/set_up(n = 10, loca) number = n if(isturf(loca)) location = loca else location = get_turf(loca) -/datum/effect/system/expl_particles/proc/start() +/datum/effect/expl_particles/start() var/i = 0 for(i=0, i FLUID_OVER_MOB_HEAD) layer = DEEP_FLUID_LAYER @@ -57,7 +57,7 @@ if(fluid_amount > FLUID_DEEP) alpha = FLUID_MAX_ALPHA else - alpha = min(FLUID_MAX_ALPHA,max(FLUID_MIN_ALPHA,Ceil(255*(fluid_amount/FLUID_DEEP)))) + alpha = min(FLUID_MAX_ALPHA,max(FLUID_MIN_ALPHA,ceil(255*(fluid_amount/FLUID_DEEP)))) if(fluid_amount > FLUID_DELETING && fluid_amount <= FLUID_EVAPORATION_POINT) APPLY_FLUID_OVERLAY("shallow_still") @@ -69,7 +69,7 @@ APPLY_FLUID_OVERLAY("ocean") // Map helper. -/obj/effect/fluid_mapped +/obj/fluid_mapped name = "mapped flooded area" alpha = 125 icon_state = "shallow_still" @@ -77,17 +77,17 @@ var/fluid_amount = FLUID_MAX_DEPTH -/obj/effect/fluid_mapped/Initialize() +/obj/fluid_mapped/Initialize() ..() var/turf/T = get_turf(src) if(istype(T)) - var/obj/effect/fluid/F = locate() in T + var/obj/fluid/F = locate() in T if(!F) F = new(T) SET_FLUID_DEPTH(F, fluid_amount) return INITIALIZE_HINT_QDEL // Permaflood overlay. -/obj/effect/flood +/obj/flood name = "" mouse_opacity = 0 layer = DEEP_FLUID_LAYER @@ -100,9 +100,9 @@ opacity = 0 anchored = TRUE -/obj/effect/flood/ex_act() +/obj/flood/ex_act() return -/obj/effect/flood/New() +/obj/flood/New() ..() verbs.Cut() diff --git a/code/game/objects/effects/force_portal.dm b/code/game/objects/effects/force_portal.dm index 834e5d9f2432b..fc55adea76d30 100644 --- a/code/game/objects/effects/force_portal.dm +++ b/code/game/objects/effects/force_portal.dm @@ -1,7 +1,7 @@ -/obj/effect/force_portal +/obj/force_portal name = "portal" desc = "Like looking into a mirror." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/portals.dmi' icon_state = "portal" blend_mode = BLEND_SUBTRACT density = TRUE @@ -9,21 +9,21 @@ anchored = TRUE var/boom_time = 1 -/obj/effect/force_portal/Initialize() +/obj/force_portal/Initialize() . = ..() boom_time = world.time + 30 SECONDS START_PROCESSING(SSobj, src) -/obj/effect/force_portal/Destroy() +/obj/force_portal/Destroy() STOP_PROCESSING(SSobj, src) . = ..() -/obj/effect/force_portal/Process() +/obj/force_portal/Process() if(boom_time && boom_time < world.time) boom() boom_time = 0 -/obj/effect/force_portal/proc/boom() +/obj/force_portal/proc/boom() set waitfor = 0 var/list/possible_turfs = getcircle(get_turf(src), 5) while(contents && length(contents)) @@ -41,7 +41,7 @@ sleep(1) qdel(src) -/obj/effect/force_portal/onDropInto(atom/movable/AM) +/obj/force_portal/onDropInto(atom/movable/AM) boom_time -= 1 SECOND src.visible_message(SPAN_WARNING("\The [src] sucks in \the [AM]!")) if(!ismob(AM)) @@ -51,10 +51,10 @@ playsound(src,'sound/effects/teleport.ogg',40,1) return -/obj/effect/force_portal/Bumped(atom/movable/AM) +/obj/force_portal/Bumped(atom/movable/AM) AM.dropInto(src) -/obj/effect/force_portal/bullet_act(obj/item/projectile/P) +/obj/force_portal/bullet_act(obj/item/projectile/P) var/atom/movable/AM = new P.type() if(istype(P, /obj/item/projectile/bullet/pellet)) var/obj/item/projectile/bullet/pellet/old_pellet = P diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm index cdc11cb20b83f..685f55967e39a 100644 --- a/code/game/objects/effects/gibs.dm +++ b/code/game/objects/effects/gibs.dm @@ -1,7 +1,7 @@ -/proc/gibs(atom/location, datum/dna/MobDNA, gibber_type = /obj/effect/gibspawner/generic, fleshcolor, bloodcolor) +/proc/gibs(atom/location, datum/dna/MobDNA, gibber_type = /obj/gibspawner/generic, fleshcolor, bloodcolor) new gibber_type(location,MobDNA,fleshcolor,bloodcolor) -/obj/effect/gibspawner +/obj/gibspawner var/sparks = 0 //whether sparks spread on Gib() var/list/gibtypes = list() var/list/gibamounts = list() @@ -11,7 +11,7 @@ var/datum/dna/MobDNA -/obj/effect/gibspawner/New(location, datum/dna/_MobDNA, _fleshcolor, _bloodcolor) +/obj/gibspawner/New(location, datum/dna/_MobDNA, _fleshcolor, _bloodcolor) ..() if (_fleshcolor) fleshcolor = _fleshcolor @@ -21,23 +21,23 @@ MobDNA = _MobDNA -/obj/effect/gibspawner/Initialize() +/obj/gibspawner/Initialize() ..() Gib(loc) return INITIALIZE_HINT_QDEL -/obj/effect/gibspawner/proc/Gib(atom/location) +/obj/gibspawner/proc/Gib(atom/location) if (length(gibtypes) != length(gibamounts) || length(gibamounts) != length(gibdirections)) log_error("Gib list length mismatch!") return if (sparks) - var/datum/effect/effect/system/spark_spread/s = new + var/datum/effect/spark_spread/s = new s.set_up(2, 1, get_turf(location)) s.start() var/spread = isturf(location) - var/humanGibs = istype(src, /obj/effect/gibspawner/human) - var/obj/effect/decal/cleanable/blood/gibs/gib + var/humanGibs = istype(src, /obj/gibspawner/human) + var/obj/decal/cleanable/blood/gibs/gib for (var/i = length(gibtypes) to 1 step -1) if (!gibamounts[i]) continue @@ -58,5 +58,5 @@ continue var/list/directions = gibdirections[i] if (length(directions)) - addtimer(new Callback(gib, /obj/effect/decal/cleanable/blood/gibs/proc/streak, directions), 0) + addtimer(CALLBACK(gib, TYPE_PROC_REF(/obj/decal/cleanable/blood/gibs, streak), directions), 0) qdel(src) diff --git a/code/game/objects/effects/item_pickup_ghost.dm b/code/game/objects/effects/item_pickup_ghost.dm index b4fba2b2fd530..876b9e3567d63 100644 --- a/code/game/objects/effects/item_pickup_ghost.dm +++ b/code/game/objects/effects/item_pickup_ghost.dm @@ -1,13 +1,13 @@ -/obj/effect/temporary/item_pickup_ghost +/obj/temporary/item_pickup_ghost var/lifetime = 0.2 SECONDS -/obj/effect/temporary/item_pickup_ghost/Initialize(mapload, obj/item/picked_up) +/obj/temporary/item_pickup_ghost/Initialize(mapload, obj/item/picked_up) . = ..(mapload, lifetime, picked_up.icon, picked_up.icon_state) pixel_x = picked_up.pixel_x pixel_y = picked_up.pixel_y color = picked_up.color -/obj/effect/temporary/item_pickup_ghost/proc/animate_towards(atom/target) +/obj/temporary/item_pickup_ghost/proc/animate_towards(atom/target) var/new_pixel_x = pixel_x + (target.x - src.x) * 32 var/new_pixel_y = pixel_y + (target.y - src.y) * 32 animate( diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index c402be74452b1..b9d50b20f7501 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -1,14 +1,14 @@ -/obj/effect/landmark +/obj/landmark name = "landmark" icon = 'icons/effects/landmarks.dmi' icon_state = "x2" anchored = TRUE unacidable = TRUE simulated = FALSE - invisibility = 101 + invisibility = INVISIBILITY_ABSTRACT var/delete_me = 0 -/obj/effect/landmark/New() +/obj/landmark/New() ..() tag = "landmark*[name]" @@ -66,40 +66,40 @@ landmarks_list += src return 1 -/obj/effect/landmark/proc/delete() +/obj/landmark/proc/delete() delete_me = 1 -/obj/effect/landmark/Initialize() +/obj/landmark/Initialize() . = ..() if(delete_me) return INITIALIZE_HINT_QDEL -/obj/effect/landmark/Destroy() +/obj/landmark/Destroy() landmarks_list -= src return ..() -/obj/effect/landmark/start +/obj/landmark/start name = "start" icon = 'icons/mob/screen1.dmi' icon_state = "x" anchored = TRUE - invisibility = 101 + invisibility = INVISIBILITY_ABSTRACT -/obj/effect/landmark/start/New() +/obj/landmark/start/New() ..() tag = "start*[name]" return 1 //Costume spawner landmarks -/obj/effect/landmark/costume/New() //costume spawner, selects a random subclass and disappears +/obj/landmark/costume/New() //costume spawner, selects a random subclass and disappears SHOULD_CALL_PARENT(FALSE) // TODO: Replace this entire set of New() overrides with Initialize() and qdel hints - var/list/options = typesof(/obj/effect/landmark/costume) + var/list/options = typesof(/obj/landmark/costume) var/PICK= options[rand(1,length(options))] new PICK(src.loc) delete_me = 1 //SUBCLASSES. Spawn a bunch of items and disappear likewise -/obj/effect/landmark/costume/chameleon/New() +/obj/landmark/costume/chameleon/New() new /obj/item/clothing/mask/chameleon(src.loc) new /obj/item/clothing/under/chameleon(src.loc) new /obj/item/clothing/glasses/chameleon(src.loc) @@ -110,44 +110,44 @@ new /obj/item/storage/backpack/chameleon(src.loc) delete_me = 1 -/obj/effect/landmark/costume/gladiator/New() +/obj/landmark/costume/gladiator/New() new /obj/item/clothing/under/gladiator(src.loc) new /obj/item/clothing/head/helmet/gladiator(src.loc) delete_me = 1 -/obj/effect/landmark/costume/madscientist/New() +/obj/landmark/costume/madscientist/New() new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc) new /obj/item/clothing/head/flatcap(src.loc) new /obj/item/clothing/suit/storage/toggle/labcoat/mad(src.loc) new /obj/item/clothing/glasses/green(src.loc) delete_me = 1 -/obj/effect/landmark/costume/elpresidente/New() +/obj/landmark/costume/elpresidente/New() new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc) new /obj/item/clothing/head/flatcap(src.loc) new /obj/item/clothing/mask/smokable/cigarette/cigar/havana(src.loc) new /obj/item/clothing/shoes/jackboots(src.loc) delete_me = 1 -/obj/effect/landmark/costume/nyangirl/New() +/obj/landmark/costume/nyangirl/New() new /obj/item/clothing/under/schoolgirl(src.loc) new /obj/item/clothing/head/kitty(src.loc) delete_me = 1 -/obj/effect/landmark/costume/maid/New() - new /obj/item/clothing/under/blackskirt(src.loc) +/obj/landmark/costume/maid/New() + new /obj/item/clothing/under/skirt(src.loc) var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears ) new CHOICE(src.loc) new /obj/item/clothing/glasses/blindfold(src.loc) delete_me = 1 -/obj/effect/landmark/costume/butler/New() +/obj/landmark/costume/butler/New() new /obj/item/clothing/accessory/waistcoat/black(src.loc) new /obj/item/clothing/under/suit_jacket(src.loc) new /obj/item/clothing/head/that(src.loc) delete_me = 1 -/obj/effect/landmark/costume/scratch/New() +/obj/landmark/costume/scratch/New() new /obj/item/clothing/gloves/white(src.loc) new /obj/item/clothing/shoes/white(src.loc) new /obj/item/clothing/under/scratch(src.loc) @@ -155,7 +155,7 @@ new /obj/item/clothing/head/cueball(src.loc) delete_me = 1 -/obj/effect/landmark/costume/prig/New() +/obj/landmark/costume/prig/New() new /obj/item/clothing/accessory/waistcoat/black(src.loc) new /obj/item/clothing/glasses/monocle(src.loc) var/CHOICE= pick( /obj/item/clothing/head/bowler, /obj/item/clothing/head/that) @@ -166,24 +166,24 @@ new /obj/item/clothing/mask/fakemoustache(src.loc) delete_me = 1 -/obj/effect/landmark/costume/plaguedoctor/New() +/obj/landmark/costume/plaguedoctor/New() new /obj/item/clothing/suit/bio_suit/plaguedoctorsuit(src.loc) new /obj/item/clothing/head/plaguedoctorhat(src.loc) delete_me = 1 -/obj/effect/landmark/costume/nightowl/New() +/obj/landmark/costume/nightowl/New() new /obj/item/clothing/under/owl(src.loc) new /obj/item/clothing/mask/gas/owl_mask(src.loc) delete_me = 1 -/obj/effect/landmark/costume/waiter/New() +/obj/landmark/costume/waiter/New() new /obj/item/clothing/under/waiter(src.loc) var/CHOICE= pick( /obj/item/clothing/head/kitty, /obj/item/clothing/head/rabbitears) new CHOICE(src.loc) new /obj/item/clothing/suit/apron(src.loc) delete_me = 1 -/obj/effect/landmark/costume/pirate/New() +/obj/landmark/costume/pirate/New() new /obj/item/clothing/under/pirate(src.loc) new /obj/item/clothing/suit/pirate(src.loc) var/CHOICE = pick( /obj/item/clothing/head/pirate , /obj/item/clothing/mask/bandana/red) @@ -191,68 +191,68 @@ new /obj/item/clothing/glasses/eyepatch(src.loc) delete_me = 1 -/obj/effect/landmark/costume/commie/New() +/obj/landmark/costume/commie/New() new /obj/item/clothing/under/soviet(src.loc) new /obj/item/clothing/head/ushanka(src.loc) delete_me = 1 -/obj/effect/landmark/costume/imperium_monk/New() +/obj/landmark/costume/imperium_monk/New() new /obj/item/clothing/suit/imperium_monk(src.loc) if (prob(25)) new /obj/item/clothing/mask/gas/cyborg(src.loc) delete_me = 1 -/obj/effect/landmark/costume/holiday_priest/New() +/obj/landmark/costume/holiday_priest/New() new /obj/item/clothing/suit/holidaypriest(src.loc) delete_me = 1 -/obj/effect/landmark/costume/marisawizard/fake/New() +/obj/landmark/costume/marisawizard/fake/New() new /obj/item/clothing/head/wizard/marisa/fake(src.loc) new/obj/item/clothing/suit/wizrobe/marisa/fake(src.loc) delete_me = 1 -/obj/effect/landmark/costume/cutewitch/New() +/obj/landmark/costume/cutewitch/New() new /obj/item/clothing/under/sundress(src.loc) new /obj/item/clothing/head/witchwig(src.loc) new /obj/item/staff/broom(src.loc) delete_me = 1 -/obj/effect/landmark/costume/fakewizard/New() +/obj/landmark/costume/fakewizard/New() new /obj/item/clothing/suit/wizrobe/fake(src.loc) new /obj/item/clothing/head/wizard/fake(src.loc) new /obj/item/staff/(src.loc) delete_me = 1 -/obj/effect/landmark/costume/sexyclown/New() +/obj/landmark/costume/sexyclown/New() new /obj/item/clothing/mask/gas/sexyclown(src.loc) new /obj/item/clothing/under/sexyclown(src.loc) delete_me = 1 -/obj/effect/landmark/costume/sexymime/New() +/obj/landmark/costume/sexymime/New() new /obj/item/clothing/mask/gas/sexymime(src.loc) new /obj/item/clothing/under/sexymime(src.loc) delete_me = 1 -/obj/effect/landmark/costume/savagehunter/New() +/obj/landmark/costume/savagehunter/New() new /obj/item/clothing/mask/spirit(src.loc) new /obj/item/clothing/under/savage_hunter(src.loc) delete_me = 1 -/obj/effect/landmark/costume/savagehuntress/New() +/obj/landmark/costume/savagehuntress/New() new /obj/item/clothing/mask/spirit(src.loc) new /obj/item/clothing/under/savage_hunter/female(src.loc) delete_me = 1 -/obj/effect/landmark/ruin +/obj/landmark/ruin var/datum/map_template/ruin/ruin_template -/obj/effect/landmark/ruin/New(loc, my_ruin_template) - name = "ruin_[sequential_id(/obj/effect/landmark/ruin)]" +/obj/landmark/ruin/New(loc, my_ruin_template) + name = "ruin_[sequential_id(/obj/landmark/ruin)]" ..(loc) ruin_template = my_ruin_template GLOB.ruin_landmarks |= src -/obj/effect/landmark/ruin/Destroy() +/obj/landmark/ruin/Destroy() GLOB.ruin_landmarks -= src ruin_template = null . = ..() diff --git a/code/game/objects/effects/manifest.dm b/code/game/objects/effects/manifest.dm index 647feaa3533bb..388648be9547f 100644 --- a/code/game/objects/effects/manifest.dm +++ b/code/game/objects/effects/manifest.dm @@ -1,14 +1,14 @@ -/obj/effect/manifest +/obj/manifest name = "manifest" icon = 'icons/mob/screen1.dmi' icon_state = "x" unacidable = TRUE -/obj/effect/manifest/Initialize() +/obj/manifest/Initialize() . = ..() - invisibility = 101 + invisibility = INVISIBILITY_ABSTRACT -/obj/effect/manifest/proc/manifest() +/obj/manifest/proc/manifest() var/dat = "Crew Manifest:
    " for(var/mob/living/carbon/human/M in SSmobs.mob_list) dat += text(" [] - []
    ", M.name, M.get_assignment()) diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm deleted file mode 100644 index 4e04648c96c25..0000000000000 --- a/code/game/objects/effects/mines.dm +++ /dev/null @@ -1,108 +0,0 @@ -/obj/effect/mine - name = "Mine" - desc = "I Better stay away from that thing." - density = TRUE - anchored = TRUE - layer = OBJ_LAYER - icon = 'icons/obj/weapons/other.dmi' - icon_state = "uglymine" - var/triggerproc = "explode" //name of the proc thats called when the mine is triggered - var/triggered = 0 - - -/obj/effect/mine/Initialize() - . = ..() - icon_state = "uglyminearmed" - - -/obj/effect/mine/Crossed(AM as mob|obj) - Bumped(AM) - -/obj/effect/mine/Bumped(mob/M as mob|obj) - - if(triggered) return - - if(istype(M, /mob/living/carbon/human)) - for(var/mob/O in viewers(world.view, src.loc)) - to_chat(O, SPAN_WARNING("\The [M] triggered the [icon2html(src, O)] [src]")) - triggered = 1 - call(src,triggerproc)(M) - -/obj/effect/mine/proc/triggerrad(obj) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - s.set_up(3, 1, src) - s.start() - obj:radiation += 50 - randmutb(obj) - domutcheck(obj,null) - spawn(0) - qdel(src) - -/obj/effect/mine/proc/triggerstun(obj) - if(ismob(obj)) - var/mob/M = obj - M.Stun(30) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - s.set_up(3, 1, src) - s.start() - spawn(0) - qdel(src) - -/obj/effect/mine/proc/triggern2o(obj) - //example: n2o triggerproc - //note: im lazy - - for (var/turf/simulated/floor/target in range(1,src)) - if(!target.blocks_air) - target.assume_gas(GAS_N2O, 30) - - spawn(0) - qdel(src) - -/obj/effect/mine/proc/triggerphoron(obj) - for (var/turf/simulated/floor/target in range(1,src)) - if(!target.blocks_air) - target.assume_gas(GAS_PHORON, 30) - - target.hotspot_expose(1000, CELL_VOLUME) - - spawn(0) - qdel(src) - -/obj/effect/mine/proc/triggerkick(obj) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() - s.set_up(3, 1, src) - s.start() - qdel(obj:client) - spawn(0) - qdel(src) - -/obj/effect/mine/proc/explode(obj) - explosion(loc, 3, EX_ACT_HEAVY) - spawn(0) - qdel(src) - -/obj/effect/mine/dnascramble - name = "Radiation Mine" - icon_state = "uglymine" - triggerproc = "triggerrad" - -/obj/effect/mine/phoron - name = "Phoron Mine" - icon_state = "uglymine" - triggerproc = "triggerphoron" - -/obj/effect/mine/kick - name = "Kick Mine" - icon_state = "uglymine" - triggerproc = "triggerkick" - -/obj/effect/mine/n2o - name = "N2O Mine" - icon_state = "uglymine" - triggerproc = "triggern2o" - -/obj/effect/mine/stun - name = "Stun Mine" - icon_state = "uglymine" - triggerproc = "triggerstun" diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index ea5489993419a..bfb8d4540fd46 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -1,31 +1,22 @@ -//The effect when you wrap a dead body in gift wrap -/obj/effect/spresent - name = "strange present" - desc = "It's a ... present?" - icon = 'icons/obj/items.dmi' - icon_state = "strangepresent" - density = TRUE - anchored = FALSE - -/obj/effect/stop +/obj/stop var/victim = null icon_state = "empty" name = "Geas" desc = "You can't resist." //Paints the wall it spawns on, then dies -/obj/effect/paint +/obj/paint name = "coat of paint" icon = 'icons/effects/effects.dmi' icon_state = "wall_paint_effect" layer = TURF_DETAIL_LAYER blend_mode = BLEND_MULTIPLY -/obj/effect/paint/Initialize() +/obj/paint/Initialize() . = ..() return INITIALIZE_HINT_LATELOAD -/obj/effect/paint/LateInitialize() +/obj/paint/LateInitialize(mapload) var/turf/simulated/wall/W = get_turf(src) if(istype(W)) W.paint_color = color @@ -36,49 +27,49 @@ WF.update_icon() qdel(src) -/obj/effect/paint/pink +/obj/paint/pink color = COLOR_PINK -/obj/effect/paint/sun +/obj/paint/sun color = COLOR_SUN -/obj/effect/paint/red +/obj/paint/red color = COLOR_RED -/obj/effect/paint/silver +/obj/paint/silver color = COLOR_SILVER -/obj/effect/paint/black +/obj/paint/black color = COLOR_DARK_GRAY -/obj/effect/paint/green +/obj/paint/green color = COLOR_GREEN_GRAY -/obj/effect/paint/blue +/obj/paint/blue color = COLOR_NAVY_BLUE -/obj/effect/paint/ocean +/obj/paint/ocean color = COLOR_OCEAN -/obj/effect/paint/palegreengray +/obj/paint/palegreengray color = COLOR_PALE_GREEN_GRAY -/obj/effect/paint/brown +/obj/paint/brown color = COLOR_DARK_BROWN //Stripes the wall it spawns on, then dies -/obj/effect/paint_stripe +/obj/paint_stripe name = "stripe of paint" icon = 'icons/effects/effects.dmi' icon_state = "white" layer = TURF_DETAIL_LAYER blend_mode = BLEND_MULTIPLY -/obj/effect/paint_stripe/Initialize() +/obj/paint_stripe/Initialize() . = ..() return INITIALIZE_HINT_LATELOAD -/obj/effect/paint_stripe/LateInitialize() +/obj/paint_stripe/LateInitialize(mapload) var/turf/simulated/wall/W = get_turf(src) if(istype(W)) W.stripe_color = color @@ -89,40 +80,40 @@ WF.update_icon() qdel(src) -/obj/effect/paint_stripe/green +/obj/paint_stripe/green color = COLOR_GREEN_GRAY -/obj/effect/paint_stripe/red +/obj/paint_stripe/red color = COLOR_RED_GRAY -/obj/effect/paint_stripe/paleblue +/obj/paint_stripe/paleblue color = COLOR_PALE_BLUE_GRAY -/obj/effect/paint_stripe/yellow +/obj/paint_stripe/yellow color = COLOR_BROWN -/obj/effect/paint_stripe/blue +/obj/paint_stripe/blue color = COLOR_BLUE_GRAY -/obj/effect/paint_stripe/brown +/obj/paint_stripe/brown color = COLOR_DARK_BROWN -/obj/effect/paint_stripe/mauve +/obj/paint_stripe/mauve color = COLOR_PALE_PURPLE_GRAY -/obj/effect/paint_stripe/white +/obj/paint_stripe/white color = COLOR_SILVER -/obj/effect/paint_stripe/gunmetal +/obj/paint_stripe/gunmetal color = COLOR_GUNMETAL -/obj/effect/gas_setup //cryogenic +/obj/gas_setup //cryogenic icon = 'icons/mob/screen1.dmi' icon_state = "x3" var/tempurature = 70 var/pressure = 20* ONE_ATMOSPHERE -/obj/effect/gas_setup/Initialize() +/obj/gas_setup/Initialize() SHOULD_CALL_PARENT(FALSE) atom_flags |= ATOM_FLAG_INITIALIZED var/obj/machinery/atmospherics/pipe/P = locate() in loc @@ -132,18 +123,49 @@ G.adjust_gas(GAS_OXYGEN,((pressure*P.volume)/(R_IDEAL_GAS_EQUATION*temperature))) return INITIALIZE_HINT_QDEL -/obj/effect/heat +/obj/heat icon = 'icons/effects/fire.dmi' icon_state = "3" + appearance_flags = PIXEL_SCALE | NO_CLIENT_COLOR render_target = HEAT_EFFECT_TARGET - mouse_opacity = MOUSE_OPACITY_UNCLICKABLE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /// Example of a warp filter -/obj/effect/effect/warp +/obj/effect/warp plane = WARP_EFFECT_PLANE - appearance_flags = PIXEL_SCALE + appearance_flags = PIXEL_SCALE | NO_CLIENT_COLOR icon = 'icons/effects/352x352.dmi' icon_state = "singularity_s11" pixel_x = -176 pixel_y = -176 z_flags = ZMM_IGNORE + +/obj/effect/cold_mist + icon = 'icons/effects/tile_effects.dmi' + icon_state = "frontfog" + layer = FIRE_LAYER + alpha = 170 + +/obj/effect/cold_mist/Initialize() + . = ..() + AddOverlays(image(icon = 'icons/effects/tile_effects.dmi', icon_state = "backfog", layer = BELOW_OBJ_LAYER)) + +//Handling it as an overlay is not layering properly with render targets +/obj/effect/cold_mist_gas_back + icon = 'icons/effects/tile_effects.dmi' + icon_state = "backfog" + layer = BELOW_OBJ_LAYER + render_target = COLD_EFFECT_BACK_TARGET + +/obj/effect/cold_mist_gas + icon = 'icons/effects/tile_effects.dmi' + icon_state = "frontfog" + render_target = COLD_EFFECT_TARGET + layer = FIRE_LAYER + appearance_flags = DEFAULT_APPEARANCE_FLAGS | KEEP_TOGETHER + var/obj/effect/cold_mist_gas_back/b = null + +/obj/effect/cold_mist_gas/Initialize() + . = ..() + b = new() + vis_contents += b diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 0682aafa65e22..fe5010dba994c 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -1,20 +1,20 @@ -/obj/effect/overlay +/obj/overlay name = "overlay" unacidable = TRUE var/i_attached //Added for possible image attachments to objects. For hallucinations and the like. -/obj/effect/overlay/beam +/obj/overlay/beam name="beam" icon='icons/effects/beam.dmi' icon_state= "b_beam" var/atom/BeamSource -/obj/effect/overlay/beam/New() +/obj/overlay/beam/New() ..() spawn(10) qdel(src) -/obj/effect/overlay/palmtree_r +/obj/overlay/palmtree_r name = "Palm tree" icon = 'icons/misc/beach2.dmi' icon_state = "palm1" @@ -22,7 +22,7 @@ layer = ABOVE_HUMAN_LAYER anchored = TRUE -/obj/effect/overlay/palmtree_l +/obj/overlay/palmtree_l name = "Palm tree" icon = 'icons/misc/beach2.dmi' icon_state = "palm2" @@ -30,18 +30,18 @@ layer = ABOVE_HUMAN_LAYER anchored = TRUE -/obj/effect/overlay/coconut +/obj/overlay/coconut name = "Coconuts" icon = 'icons/misc/beach.dmi' icon_state = "coconuts" -/obj/effect/overlay/bluespacify +/obj/overlay/bluespacify name = "Bluespace" icon = 'icons/turf/space.dmi' icon_state = "bluespacify" layer = SUPERMATTER_WALL_LAYER -/obj/effect/overlay/wallrot +/obj/overlay/wallrot name = "wallrot" desc = "Ick..." icon = 'icons/effects/wallrot.dmi' @@ -50,19 +50,19 @@ layer = ABOVE_TILE_LAYER mouse_opacity = 0 -/obj/effect/overlay/wallrot/New() +/obj/overlay/wallrot/New() ..() pixel_x += rand(-10, 10) pixel_y += rand(-10, 10) /// Effect overlays that should automatically delete themselves after a set time. -/obj/effect/overlay/self_deleting +/obj/overlay/self_deleting /// The amount of time in deciseconds before the effect deletes itself. Can be defined in the object's definition or via `New()`. var/delete_time -/obj/effect/overlay/self_deleting/emppulse +/obj/overlay/self_deleting/emppulse name = "emp pulse" icon = 'icons/effects/effects.dmi' icon_state = "emppulse" @@ -70,15 +70,15 @@ delete_time = 2 SECONDS -/obj/effect/overlay/self_deleting/Initialize(mapload, _delete_time) +/obj/overlay/self_deleting/Initialize(mapload, _delete_time) . = ..() if (_delete_time) delete_time = _delete_time if (delete_time <= 0) log_debug(append_admin_tools("A self deleting overlay ([src]) was spawned with a negative or zero delete time ([delete_time]) and was instantly deleted.", location = get_turf(src))) return INITIALIZE_HINT_QDEL - addtimer(new Callback(src, .proc/self_delete), delete_time) + addtimer(CALLBACK(src, PROC_REF(self_delete)), delete_time) -/obj/effect/overlay/self_deleting/proc/self_delete() +/obj/overlay/self_deleting/proc/self_delete() qdel(src) diff --git a/code/game/objects/effects/particles/particles.dm b/code/game/objects/effects/particles/particles.dm index 2d38fa382964b..11aed547b2d3f 100644 --- a/code/game/objects/effects/particles/particles.dm +++ b/code/game/objects/effects/particles/particles.dm @@ -1,7 +1,63 @@ -/* A series of particle systems. Some are based on F0lak's particle systems -*/ +/atom/movable/proc/AddParticles(type, create_new = FALSE) + if (ispath(type)) + if (create_new) + particles = new type() + GLOB.all_particles[src.name] = particles + else + var/particles/P = type + var/index = initial(P.name) + particles = GLOB.all_particles[index] + else + if (GLOB.all_particles[type]) + particles = GLOB.all_particles[type] + return + + +/atom/movable/proc/MakeParticleEmitter(type, create_new = FALSE) + var/obj/particle_emitter/pe + pe = new /obj/particle_emitter(loc) + pe.AddParticles(type, create_new) + + +/atom/movable/proc/RemoveParticles(delete = FALSE) + if (delete) + QDEL_NULL(particles) + particles = null + if (/obj/particle_emitter in vis_contents) + vis_contents -= /obj/particle_emitter + + +/atom/movable/proc/ModParticles(target, min, max, type = "circle", random = 1) + if (particles) + particles.ModParticles(target, min, max, type = "circle", random = 1) + + +/particles + var/name = "particles" + + +/particles/proc/ModParticles(target, min, max, type = "circle", random = 1) + if (!(type in list("vector", "box", "circle", "sphere", "square", "cube"))) // Valid types for generator(), sans color + return + + if (target in list("width", "height", "count", "spawning", "bound1", "bound2", "gravity", "gradient", "transform")) // These vars cannot be generators, per reference doc, and changing some breaks things anyways + return + + if (target in vars) + vars[target] = MakeGenerator(type, min, max, random) + + +/particles/proc/SetGradient(...) + var/counter = 0 + var/list/new_gradient = list() + for (var/i in args) + new_gradient += counter + counter += 1/length(args) + new_gradient += i + gradient = new_gradient /particles/fire + name = "fire" width = 500 height = 500 count = 3000 @@ -12,10 +68,11 @@ position = generator("circle", 0, 8, NORMAL_RAND) drift = generator("vector", list(0, -0.2), list(0, 0.2)) gravity = list(0, 0.65) - color = "white" + /particles/smoke + name = "smoke" width = 500 height = 1000 count = 3000 @@ -24,12 +81,35 @@ fade = 40 velocity = generator("box", list(-1, 2), list(1, 2), NORMAL_RAND) gravity = list(0, 1) - friction = 0.1 drift = generator("vector", list(-0.2, -0.3), list(0.2, 0.3)) color = "white" + +/particles/mist + name = "mist" + icon = 'icons/effects/particles.dmi' + icon_state = list("steam_1" = 1, "steam_2" = 1, "steam_3" = 1) + count = 500 + spawning = 4 + lifespan = 5 SECONDS + fade = 1 SECOND + fadein = 1 SECOND + velocity = generator("box", list(-0.5, -0.25, 0), list(0.5, 0.25, 0), NORMAL_RAND) + position = generator("box", list(-20, -16), list(20, -2), UNIFORM_RAND) + friction = 0.2 + grow = 0.0015 + + +/particles/mist/back + name = "mist_back" + spawning = 7 + position = generator("box", list(-20, -1), list(20, 20), UNIFORM_RAND) + lifespan = 6 SECONDS + fadein = 1.5 SECONDS + /particles/fire_sparks + name = "fire sparks" width = 500 height = 500 count = 3000 @@ -44,7 +124,9 @@ gradient = list(0, "yellow", 1, "red") color = "yellow" + /particles/drill_sparks + name = "drill sparks" width = 124 height = 124 count = 1600 @@ -60,7 +142,9 @@ color = 0 transform = list(1,0,0,0, 0,1,0,0, 0,0,1,1/5, 0,0,0,1) + /particles/flare_sparks + name = "flare sparks" width = 500 height = 500 count = 2000 @@ -73,11 +157,13 @@ gradient = list(0, COLOR_WHITE, 0.4, COLOR_RED) color_change = 0.125 + /particles/dust + name = "dust" width = 124 height = 124 count = 256 - spawning = 999999 //spawn all instantly + spawning = 256 lifespan = 0.75 SECONDS fade = 0.35 SECONDS position = generator("box", list(-16, -16), list(16, 16), NORMAL_RAND) @@ -85,11 +171,13 @@ friction = 0.125 color = COLOR_OFF_WHITE + /particles/debris + name = "debris" width = 124 height = 124 count = 16 - spawning = 999999 //spawn all instantly + spawning = 16 lifespan = 0.75 SECONDS fade = 0.35 SECONDS position = generator("box", list(-10, -10), list(10, 10), NORMAL_RAND) @@ -98,9 +186,11 @@ gravity = list(0, -1) icon = 'icons/effects/particles.dmi' icon_state = list("rock1", "rock2", "rock3", "rock4", "rock5") - rotation = generator("num", 0, 360, NORMAL_RAND) + rotation = generator("num", 0, 360) + /particles/drill_sparks/debris + name = "drill debris" friction = 0.25 gradient = null color = COLOR_WHITE @@ -108,26 +198,46 @@ icon = 'icons/effects/particles.dmi' icon_state = list("rock1", "rock2", "rock3", "rock4", "rock5") -/particles/fusion - width = 500 - height = 500 - count = 4000 - spawning = 260 - lifespan = 0.85 SECONDS - fade = 0.95 SECONDS - position = generator("circle", 2.5 * 32 - 5, 2.5 * 32 + 5, NORMAL_RAND) - velocity = generator("circle", 0, 3, NORMAL_RAND) + +/particles/torus + name = "torus" + width = 800 + height = 800 + count = 900 + spawning = 45 + lifespan = 1 SECONDS + fade = 0.5 SECONDS + position = generator("circle", 8, 16, NORMAL_RAND) + velocity = generator("circle", -2, 2, NORMAL_RAND) friction = 0.15 - gradient = list(0, COLOR_WHITE, 0.75, COLOR_BLUE_LIGHT) + gradient = list(0, COLOR_WHITE, 1, COLOR_BLUE_LIGHT) color_change = 0.1 color = 0 - drift = generator("circle", 0.2, NORMAL_RAND) + drift = generator("sphere", -1, 1, NORMAL_RAND) + + +/particles/torus/fusion + name = "fusion torus" + count = 3600 + spawning = 180 + position = generator("circle", 2.5 * 32 - 5, 2.5 * 32 + 5, NORMAL_RAND) + velocity = generator("circle", -6, 6, NORMAL_RAND) + + +/particles/torus/bluespace + name = "bluespace torus" + count = 1800 + spawning = 90 + position = generator("circle", 16, 24, NORMAL_RAND) + velocity = generator("circle", -4, 4, NORMAL_RAND) + /particles/heat + name = "heat" width = 500 height = 500 - count = 600 - spawning = 35 + count = 250 + spawning = 15 lifespan = 1.85 SECONDS fade = 1.25 SECONDS position = generator("box", list(-16, -16), list(16, 0), NORMAL_RAND) @@ -139,30 +249,39 @@ drift = generator("circle", 0.4, NORMAL_RAND) velocity = generator("circle", 0, 3, NORMAL_RAND) + +/particles/heat/high + name = "high heat" + count = 600 + spawning = 35 + + //Spawner object //Maybe we could pool them in and out + /obj/particle_emitter name = "" anchored = TRUE mouse_opacity = 0 appearance_flags = PIXEL_SCALE + var/particle_type = null + /obj/particle_emitter/Initialize(mapload, time, _color) . = ..() - if(time > 0) + if (particle_type) + particles = GLOB.all_particles[particle_type] + + if (time > 0) QDEL_IN(src, time) color = _color -/obj/particle_emitter/proc/enable(on) - if(on) - particles.spawning = initial(particles.spawning) - else - particles.spawning = 0 /obj/particle_emitter/sparks - particles = new/particles/drill_sparks + particle_type = "drill sparks" plane = EFFECTS_ABOVE_LIGHTING_PLANE + /obj/particle_emitter/sparks/set_dir(dir) ..() var/list/min @@ -180,43 +299,87 @@ min = list(-1, 3, 0) max = list(-6, 12, 0) - particles.velocity = generator("box", min, max, NORMAL_RAND) + particles.velocity = generator("box", min, max) + /obj/particle_emitter/sparks/debris - particles = new/particles/drill_sparks/debris + particle_type = "drill debris" plane = DEFAULT_PLANE + /obj/particle_emitter/burst/Initialize(mapload, time) . = ..() //Burst emitters turn off after 1 tick - addtimer(new Callback(src, .proc/enable, FALSE), 1, TIMER_CLIENT_TIME) + QDEL_IN(src, time) + + /obj/particle_emitter/burst/rocks - particles = new/particles/debris + particle_type = "debris" + /obj/particle_emitter/burst/dust - particles = new/particles/dust + particle_type = "dust" + /obj/particle_emitter/smoke layer = FIRE_LAYER - particles = new/particles/smoke + particle_type = "smoke" + /obj/particle_emitter/smoke/Initialize(mapload, time, _color) . = ..() filters = filter(type="blur", size=1.5) + /obj/particle_emitter/sparks_flare plane = EFFECTS_ABOVE_LIGHTING_PLANE - particles = new/particles/flare_sparks + particle_type = "flare" mouse_opacity = 1 + /obj/particle_emitter/sparks_flare/Initialize(mapload, time, _color) . = ..() filters = filter(type="bloom", size=3, offset = 0.5, alpha = 220) + /obj/particle_emitter/heat - particles = new/particles/heat + particle_type = "heat" render_target = HEAT_EFFECT_TARGET + appearance_flags = PIXEL_SCALE | NO_CLIENT_COLOR + /obj/particle_emitter/heat/Initialize() . = ..() filters += filter(type = "blur", size = 1) + + +/obj/particle_emitter/heat/high + particle_type = "high heat" + + +/obj/particle_emitter/mist + particle_type = "mist" + layer = FIRE_LAYER + +/obj/particle_emitter/mist/back + particle_type = "mist_back" + layer = BELOW_OBJ_LAYER + + +/obj/particle_emitter/mist/back/gas + render_target = COLD_EFFECT_BACK_TARGET + +/obj/particle_emitter/mist/back/gas/Initialize(mapload, time, _color) + . = ..() + filters += filter(type="alpha", render_source = COLD_EFFECT_TARGET, flags = MASK_INVERSE) + + +//for cold gas effect +/obj/particle_emitter/mist/gas + render_target = COLD_EFFECT_TARGET + var/obj/particle_emitter/mist/back/b = /obj/particle_emitter/mist/back/gas + +/obj/particle_emitter/mist/gas/Initialize(mapload, time, _color) + . = ..() + b = new b(null) + vis_contents += b diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 04599228d1e1b..f5d5b026ca65c 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -1,7 +1,7 @@ -/obj/effect/portal +/obj/portal name = "portal" desc = "Looks unstable. Best to test it with the clown." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/portals.dmi' icon_state = "portal" density = TRUE unacidable = TRUE @@ -11,25 +11,25 @@ var/dangerous = 0 var/failchance = 0 -/obj/effect/portal/Bumped(mob/M as mob|obj) +/obj/portal/Bumped(mob/M as mob|obj) spawn(0) src.teleport(M) return return -/obj/effect/portal/Crossed(AM as mob|obj) +/obj/portal/Crossed(AM as mob|obj) spawn(0) src.teleport(AM) return return -/obj/effect/portal/attack_hand(mob/user as mob) +/obj/portal/attack_hand(mob/user as mob) spawn(0) src.teleport(user) return return -/obj/effect/portal/New(start, end, delete_after = 300, failure_rate) +/obj/portal/New(start, end, delete_after = 300, failure_rate) ..() if(failure_rate) failchance = failure_rate @@ -43,11 +43,11 @@ spawn(delete_after) qdel(src) -/obj/effect/portal/Destroy() +/obj/portal/Destroy() target = null . = ..() -/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj) +/obj/portal/proc/teleport(atom/movable/M as mob|obj) if(istype(M, /obj/effect)) //sparks don't teleport return if (icon_state == "portal1") diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index 08f11eef6efe2..71d44bfa2c5ac 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -1,5 +1,5 @@ /* The old single tank bombs that dont really work anymore -/obj/effect/spawner/bomb +/obj/spawner/bomb name = "bomb" icon = 'icons/mob/screen1.dmi' icon_state = "x" @@ -8,22 +8,22 @@ var/btemp = 500 // bomb temperature (degC) var/active = 0 -/obj/effect/spawner/bomb/radio +/obj/spawner/bomb/radio btype = 0 -/obj/effect/spawner/bomb/proximity +/obj/spawner/bomb/proximity btype = 1 -/obj/effect/spawner/bomb/timer +/obj/spawner/bomb/timer btype = 2 -/obj/effect/spawner/bomb/timer/syndicate +/obj/spawner/bomb/timer/syndicate btemp = 450 -/obj/effect/spawner/bomb/suicide +/obj/spawner/bomb/suicide btype = 3 -/obj/effect/spawner/bomb/New() +/obj/spawner/bomb/New() ..() switch (src.btype) @@ -112,20 +112,20 @@ if(!check_rights(R_SPAWN)) return - var/obj/effect/spawner/newbomb/proto = /obj/effect/spawner/newbomb/radio/custom + var/obj/spawner/newbomb/proto = /obj/spawner/newbomb/radio/custom var/p = input("Enter phoron amount (mol):","Phoron", initial(proto.phoron_amt)) as num|null - if(p == null) return + if(isnull(p)) return var/o = input("Enter oxygen amount (mol):","Oxygen", initial(proto.oxygen_amt)) as num|null - if(o == null) return + if(isnull(o)) return var/c = input("Enter carbon dioxide amount (mol):","Carbon Dioxide", initial(proto.carbon_amt)) as num|null - if(c == null) return + if(isnull(c)) return - new /obj/effect/spawner/newbomb/radio/custom(get_turf(mob), p, o, c) + new /obj/spawner/newbomb/radio/custom(get_turf(mob), p, o, c) -/obj/effect/spawner/newbomb +/obj/spawner/newbomb name = "TTV bomb" icon = 'icons/mob/screen1.dmi' icon_state = "x" @@ -137,33 +137,33 @@ var/oxygen_amt = 18 var/carbon_amt = 0 -/obj/effect/spawner/newbomb/traitor +/obj/spawner/newbomb/traitor name = "TTV bomb - traitor" assembly_type = /obj/item/device/assembly/signaler phoron_amt = 14 oxygen_amt = 21 -/obj/effect/spawner/newbomb/timer +/obj/spawner/newbomb/timer name = "TTV bomb - timer" assembly_type = /obj/item/device/assembly/timer -/obj/effect/spawner/newbomb/timer/syndicate +/obj/spawner/newbomb/timer/syndicate name = "TTV bomb - merc" //High yield bombs. Yes, it is possible to make these with toxins phoron_amt = 16.5 oxygen_amt = 23.5 -/obj/effect/spawner/newbomb/proximity +/obj/spawner/newbomb/proximity name = "TTV bomb - proximity" assembly_type = /obj/item/device/assembly/prox_sensor -/obj/effect/spawner/newbomb/radio/custom/New(newloc, ph, ox, co) +/obj/spawner/newbomb/radio/custom/New(newloc, ph, ox, co) if(ph != null) phoron_amt = ph if(ox != null) oxygen_amt = ox if(co != null) carbon_amt = co ..() -/obj/effect/spawner/newbomb/Initialize() +/obj/spawner/newbomb/Initialize() ..() var/obj/item/device/transfer_valve/V = new(src.loc) var/obj/item/tank/phoron/PT = new(V) @@ -195,7 +195,7 @@ V.attached_device = S S.holder = V - S.toggle_secure() + S.set_secure(TRUE) V.update_icon() return INITIALIZE_HINT_QDEL @@ -204,7 +204,7 @@ //One Tank Bombs, WOOOOOOO! -Luke /////////////////////// -/obj/effect/spawner/onetankbomb +/obj/spawner/onetankbomb name = "Single-tank bomb" icon = 'icons/mob/screen1.dmi' icon_state = "x" @@ -215,7 +215,7 @@ var/phoron_amt = 0 var/oxygen_amt = 0 -/obj/effect/spawner/onetankbomb/New(newloc) //just needs an assembly. +/obj/spawner/onetankbomb/New(newloc) //just needs an assembly. ..(newloc) var/type = pick(/obj/item/tank/phoron/onetankbomb, /obj/item/tank/oxygen/onetankbomb) diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index eea9809aeed1f..7cf2f861c4433 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -1,8 +1,8 @@ -/obj/effect/gibspawner/generic +/obj/gibspawner/generic gibtypes = list( - /obj/effect/decal/cleanable/blood/gibs, - /obj/effect/decal/cleanable/blood/gibs, - /obj/effect/decal/cleanable/blood/gibs/core + /obj/decal/cleanable/blood/gibs, + /obj/decal/cleanable/blood/gibs, + /obj/decal/cleanable/blood/gibs/core ) gibdirections = list( list(WEST, NORTHWEST, SOUTHWEST, NORTH), @@ -12,15 +12,15 @@ gibamounts = list(2, 2, 1) -/obj/effect/gibspawner/human +/obj/gibspawner/human gibtypes = list( - /obj/effect/decal/cleanable/blood/gibs, - /obj/effect/decal/cleanable/blood/gibs/down, - /obj/effect/decal/cleanable/blood/gibs, - /obj/effect/decal/cleanable/blood/gibs, - /obj/effect/decal/cleanable/blood/gibs, - /obj/effect/decal/cleanable/blood/gibs, - /obj/effect/decal/cleanable/blood/gibs/core + /obj/decal/cleanable/blood/gibs, + /obj/decal/cleanable/blood/gibs/down, + /obj/decal/cleanable/blood/gibs, + /obj/decal/cleanable/blood/gibs, + /obj/decal/cleanable/blood/gibs, + /obj/decal/cleanable/blood/gibs, + /obj/decal/cleanable/blood/gibs/core ) gibdirections = list( list(NORTH, NORTHEAST, NORTHWEST), @@ -34,14 +34,14 @@ gibamounts = list(1, 1, 1, 1, 1, 1, 1) -/obj/effect/gibspawner/robot +/obj/gibspawner/robot gibtypes = list( - /obj/effect/decal/cleanable/blood/gibs/robot/up, - /obj/effect/decal/cleanable/blood/gibs/robot/down, - /obj/effect/decal/cleanable/blood/gibs/robot, - /obj/effect/decal/cleanable/blood/gibs/robot, - /obj/effect/decal/cleanable/blood/gibs/robot, - /obj/effect/decal/cleanable/blood/gibs/robot/limb + /obj/decal/cleanable/blood/gibs/robot/up, + /obj/decal/cleanable/blood/gibs/robot/down, + /obj/decal/cleanable/blood/gibs/robot, + /obj/decal/cleanable/blood/gibs/robot, + /obj/decal/cleanable/blood/gibs/robot, + /obj/decal/cleanable/blood/gibs/robot/limb ) gibdirections = list( list(NORTH, NORTHEAST, NORTHWEST), diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 101259f43eb57..2dc8abea3ee72 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -1,5 +1,5 @@ -//generic procs copied from obj/effect/alien -/obj/effect/spider +//generic procs copied from obj/alien +/obj/spider name = "web" desc = "It's stringy and sticky." icon = 'icons/effects/effects.dmi' @@ -7,19 +7,19 @@ density = FALSE health_max = 15 -/obj/effect/spider/on_death() +/obj/spider/on_death() visible_message(SPAN_WARNING("\The [src] breaks apart!")) qdel(src) -/obj/effect/spider/stickyweb +/obj/spider/stickyweb icon_state = "stickyweb1" -/obj/effect/spider/stickyweb/Initialize() +/obj/spider/stickyweb/Initialize() . = ..() if(prob(50)) icon_state = "stickyweb2" -/obj/effect/spider/stickyweb/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) +/obj/spider/stickyweb/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(air_group || (height==0)) return 1 if(istype(mover, /mob/living/simple_animal/hostile/giant_spider)) return 1 @@ -31,37 +31,37 @@ return prob(30) return 1 -/obj/effect/spider/eggcluster +/obj/spider/eggcluster name = "egg cluster" desc = "They seem to pulse slightly with an inner life." icon_state = "eggs" var/amount_grown = 0 var/spiders_min = 6 var/spiders_max = 12 - var/spider_type = /obj/effect/spider/spiderling + var/spider_type = /obj/spider/spiderling -/obj/effect/spider/eggcluster/Initialize(mapload, atom/parent) +/obj/spider/eggcluster/Initialize(mapload, atom/parent) . = ..() get_light_and_color(parent) pixel_x = rand(3,-3) pixel_y = rand(3,-3) START_PROCESSING(SSobj, src) -/obj/effect/spider/eggcluster/Destroy() +/obj/spider/eggcluster/Destroy() STOP_PROCESSING(SSobj, src) if(istype(loc, /obj/item/organ/external)) var/obj/item/organ/external/O = loc O.implants -= src . = ..() -/obj/effect/spider/eggcluster/on_death() +/obj/spider/eggcluster/on_death() if (isturf(loc)) var/amount_to_spawn = round(spiders_max * amount_grown / 100) for (var/count = 1 to amount_to_spawn) new spider_type(loc, src) . = ..() -/obj/effect/spider/eggcluster/Process() +/obj/spider/eggcluster/Process() if(prob(70)) amount_grown += rand(0,2) if(amount_grown >= 100) @@ -76,14 +76,14 @@ O.implants += spiderling qdel(src) -/obj/effect/spider/eggcluster/small +/obj/spider/eggcluster/small spiders_min = 1 spiders_max = 3 -/obj/effect/spider/eggcluster/small/frost - spider_type = /obj/effect/spider/spiderling/frost +/obj/spider/eggcluster/small/frost + spider_type = /obj/spider/spiderling/frost -/obj/effect/spider/spiderling +/obj/spider/spiderling name = "spiderling" desc = "It never stays still for long." icon_state = "green" @@ -116,10 +116,10 @@ /mob/living/simple_animal/hostile/giant_spider/hunter = 1) -/obj/effect/spider/spiderling/frost +/obj/spider/spiderling/frost castes = list(/mob/living/simple_animal/hostile/giant_spider/frost = 1) -/obj/effect/spider/spiderling/Initialize(mapload, atom/parent) +/obj/spider/spiderling/Initialize(mapload, atom/parent) greater_form = pickweight(castes) pixel_x = rand(-shift_range, shift_range) pixel_y = rand(-shift_range, shift_range) @@ -129,78 +129,80 @@ dormant = FALSE if(dormant) - GLOB.moved_event.register(src, src, /obj/effect/spider/spiderling/proc/disturbed) + GLOB.moved_event.register(src, src, TYPE_PROC_REF(/obj/spider/spiderling, disturbed)) else START_PROCESSING(SSobj, src) get_light_and_color(parent) . = ..() -/obj/effect/spider/spiderling/mundane +/obj/spider/spiderling/mundane growth_chance = 0 // Just a simple, non-mutant spider -/obj/effect/spider/spiderling/mundane/dormant +/obj/spider/spiderling/mundane/dormant dormant = TRUE // It lies in wait, hoping you will walk face first into its web -/obj/effect/spider/spiderling/growing +/obj/spider/spiderling/growing growth_chance = 100 -/obj/effect/spider/spiderling/Destroy() +/obj/spider/spiderling/Destroy() if(dormant) - GLOB.moved_event.unregister(src, src, /obj/effect/spider/spiderling/proc/disturbed) + GLOB.moved_event.unregister(src, src, TYPE_PROC_REF(/obj/spider/spiderling, disturbed)) STOP_PROCESSING(SSobj, src) . = ..() -/obj/effect/spider/spiderling/attackby(obj/item/W, mob/user) + +/obj/spider/spiderling/post_use_item(obj/item/tool, mob/user, interaction_handled, use_call, click_params) . = ..() - if (!health_dead) + if (interaction_handled && !health_dead()) disturbed() -/obj/effect/spider/spiderling/Crossed(mob/living/L) + +/obj/spider/spiderling/Crossed(mob/living/L) if(dormant && istype(L) && L.mob_size > MOB_TINY) disturbed() -/obj/effect/spider/spiderling/proc/disturbed() +/obj/spider/spiderling/proc/disturbed() if(!dormant) return dormant = FALSE - GLOB.moved_event.unregister(src, src, /obj/effect/spider/spiderling/proc/disturbed) + GLOB.moved_event.unregister(src, src, TYPE_PROC_REF(/obj/spider/spiderling, disturbed)) START_PROCESSING(SSobj, src) -/obj/effect/spider/spiderling/Bump(atom/user) +/obj/spider/spiderling/Bump(atom/user) if(istype(user, /obj/structure/table)) forceMove(user.loc) else ..() -/obj/effect/spider/spiderling/on_death() +/obj/spider/spiderling/on_death() visible_message(SPAN_WARNING("\The [src] dies!")) - new /obj/effect/decal/cleanable/spiderling_remains(loc) + new /obj/decal/cleanable/spiderling_remains(loc) qdel(src) -/obj/effect/spider/spiderling/proc/check_vent(obj/machinery/atmospherics/unary/vent_pump/exit_vent) +/obj/spider/spiderling/proc/check_vent(obj/machinery/atmospherics/unary/vent_pump/exit_vent) if(QDELETED(exit_vent) || exit_vent.welded) // If it's qdeleted we probably were too, but in that case we won't be making this call due to timer cleanup. forceMove(get_turf(entry_vent)) entry_vent = null return TRUE -/obj/effect/spider/spiderling/proc/start_vent_moving(obj/machinery/atmospherics/unary/vent_pump/exit_vent, travel_time) +/obj/spider/spiderling/proc/start_vent_moving(obj/machinery/atmospherics/unary/vent_pump/exit_vent, travel_time) if(check_vent(exit_vent)) return if(prob(50)) audible_message(SPAN_NOTICE("You hear something squeezing through the ventilation ducts.")) forceMove(exit_vent) - addtimer(new Callback(src, .proc/end_vent_moving, exit_vent), travel_time) + addtimer(CALLBACK(src, PROC_REF(end_vent_moving), exit_vent), travel_time) -/obj/effect/spider/spiderling/proc/end_vent_moving(obj/machinery/atmospherics/unary/vent_pump/exit_vent) +/obj/spider/spiderling/proc/end_vent_moving(obj/machinery/atmospherics/unary/vent_pump/exit_vent) if(check_vent(exit_vent)) return forceMove(get_turf(exit_vent)) travelling_in_vent = FALSE entry_vent = null -/obj/effect/spider/spiderling/Process() +/obj/spider/spiderling/Process() if(loc) var/datum/gas_mixture/environment = loc.return_air() @@ -225,7 +227,7 @@ forceMove(entry_vent) var/travel_time = round(get_dist(loc, exit_vent.loc) / 2) - addtimer(new Callback(src, .proc/start_vent_moving, exit_vent, travel_time), travel_time + rand(20,60)) + addtimer(CALLBACK(src, PROC_REF(start_vent_moving), exit_vent, travel_time), travel_time + rand(20,60)) travelling_in_vent = TRUE return else @@ -234,7 +236,8 @@ if(isturf(loc)) if(prob(25)) - var/list/nearby = trange(5, src) - loc + var/turf/center = get_turf(src) + var/list/nearby = ORANGE_TURFS(center, 5) if(length(nearby)) var/target_atom = pick(nearby) walk_to(src, target_atom, 5) @@ -257,6 +260,9 @@ break if(amount_grown >= 100) + if (GLOB.SPIDER_COUNT >= GLOB.MAX_SPIDER_COUNT) + amount_grown = 1 + return new greater_form(src.loc, src) qdel(src) else if(isorgan(loc)) @@ -278,10 +284,10 @@ else if(prob(1)) src.visible_message(SPAN_NOTICE("\The [src] skitters.")) - if(amount_grown > 0) + if ((istype(loc, /turf) || istype(loc, /obj/item/organ/external)) && amount_grown > 0) amount_grown += rand(0,2) -/obj/effect/decal/cleanable/spiderling_remains +/obj/decal/cleanable/spiderling_remains name = "spiderling remains" desc = "Green squishy mess." icon = 'icons/effects/effects.dmi' @@ -289,13 +295,13 @@ anchored = TRUE layer = BLOOD_LAYER -/obj/effect/spider/cocoon +/obj/spider/cocoon name = "cocoon" desc = "Something wrapped in silky spider web." icon_state = "cocoon1" health_max = 60 -/obj/effect/spider/cocoon/Initialize() +/obj/spider/cocoon/Initialize() . = ..() icon_state = pick("cocoon1","cocoon2","cocoon3") @@ -309,7 +315,7 @@ if (!(L.status_flags & NOTARGET)) L.status_flags ^= NOTARGET -/obj/effect/spider/cocoon/Destroy() +/obj/spider/cocoon/Destroy() src.visible_message(SPAN_WARNING("\The [src] splits open.")) for(var/atom/movable/A in contents) A.dropInto(loc) diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 058bb25fa51d7..41466bb1eeca8 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -1,15 +1,15 @@ /* Simple object type, calls a proc when "stepped" on by something */ -/obj/effect/step_trigger +/obj/step_trigger var/affect_ghosts = 0 var/stopper = 1 // stops throwers - invisibility = 101 // nope cant see this shit + invisibility = INVISIBILITY_ABSTRACT // nope cant see this shit anchored = TRUE -/obj/effect/step_trigger/proc/Trigger(atom/movable/A) +/obj/step_trigger/proc/Trigger(atom/movable/A) return 0 -/obj/effect/step_trigger/Crossed(H as mob|obj) +/obj/step_trigger/Crossed(H as mob|obj) ..() if(!H) return @@ -23,7 +23,7 @@ /datum/movement_handler/no_move/toss -/obj/effect/step_trigger/thrower +/obj/step_trigger/thrower var/direction = SOUTH // the direction of throw var/tiles = 3 // if 0: forever until atom hits a stopper var/immobilize = 1 // if nonzero: prevents mobs from moving while they're being flung @@ -32,12 +32,12 @@ var/nostop = 0 // if 1: will only be stopped by teleporters var/list/affecting = list() -/obj/effect/step_trigger/thrower/Trigger(atom/movable/AM) +/obj/step_trigger/thrower/Trigger(atom/movable/AM) if(!AM || !istype(AM) || !AM.simulated) return var/curtiles = 0 var/stopthrow = 0 - for(var/obj/effect/step_trigger/thrower/T in orange(2, src)) + for(var/obj/step_trigger/thrower/T in orange(2, src)) if(AM in T.affecting) return @@ -60,11 +60,11 @@ // Calculate if we should stop the process if(!nostop) - for(var/obj/effect/step_trigger/T in get_step(AM, direction)) + for(var/obj/step_trigger/T in get_step(AM, direction)) if(T.stopper && T != src) stopthrow = 1 else - for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, direction)) + for(var/obj/step_trigger/teleporter/T in get_step(AM, direction)) if(T.stopper) stopthrow = 1 @@ -85,16 +85,16 @@ /* Stops things thrown by a thrower, doesn't do anything */ -/obj/effect/step_trigger/stopper +/obj/step_trigger/stopper /* Instant teleporter */ -/obj/effect/step_trigger/teleporter +/obj/step_trigger/teleporter var/teleport_x = 0 // teleportation coordinates (if one is null, then no teleport!) var/teleport_y = 0 var/teleport_z = 0 -/obj/effect/step_trigger/teleporter/Trigger(atom/movable/A) +/obj/step_trigger/teleporter/Trigger(atom/movable/A) if(teleport_x && teleport_y && teleport_z) A.x = teleport_x @@ -103,13 +103,13 @@ /* Random teleporter, teleports atoms to locations ranging from teleport_x - teleport_x_offset, etc */ -/obj/effect/step_trigger/teleporter/random +/obj/step_trigger/teleporter/random opacity = 1 var/teleport_x_offset = 0 var/teleport_y_offset = 0 var/teleport_z_offset = 0 -/obj/effect/step_trigger/teleporter/random/Trigger(atom/movable/A) +/obj/step_trigger/teleporter/random/Trigger(atom/movable/A) var/turf/T = locate(rand(teleport_x, teleport_x_offset), rand(teleport_y, teleport_y_offset), rand(teleport_z, teleport_z_offset)) if(T) A.forceMove(T) diff --git a/code/game/objects/effects/temporaray.dm b/code/game/objects/effects/temporaray.dm index 15a2d2ed8b229..ec914534decd8 100644 --- a/code/game/objects/effects/temporaray.dm +++ b/code/game/objects/effects/temporaray.dm @@ -1,5 +1,5 @@ //temporary visual effects -/obj/effect/temp_visual +/obj/temp_visual icon_state = "nothing" anchored = TRUE layer = ABOVE_HUMAN_LAYER @@ -7,19 +7,19 @@ simulated = FALSE var/duration = 10 //in deciseconds -/obj/effect/temp_visual/Initialize(mapload, set_dir) +/obj/temp_visual/Initialize(mapload, set_dir) if(set_dir) set_dir(set_dir) . = ..() QDEL_IN(src, duration) -/obj/effect/temp_visual/bloodsplatter +/obj/temp_visual/bloodsplatter icon = 'icons/effects/bloodspatter.dmi' duration = 5 layer = LYING_HUMAN_LAYER var/splatter_type = "splatter" -/obj/effect/temp_visual/bloodsplatter/Initialize(mapload, set_dir, _color) +/obj/temp_visual/bloodsplatter/Initialize(mapload, set_dir, _color) if(set_dir in GLOB.cornerdirs) icon_state = "[splatter_type][pick(1, 2, 6)]" else @@ -39,4 +39,4 @@ target_pixel_x = 16 if(set_dir & WEST) target_pixel_x = -16 - animate(src, pixel_x = target_pixel_x, pixel_y = target_pixel_y, alpha = 0, time = duration) \ No newline at end of file + animate(src, pixel_x = target_pixel_x, pixel_y = target_pixel_y, alpha = 0, time = duration) diff --git a/code/game/objects/effects/temporary_effect.dm b/code/game/objects/effects/temporary_effect.dm index 8e697c1637179..e3bc2b42dc619 100644 --- a/code/game/objects/effects/temporary_effect.dm +++ b/code/game/objects/effects/temporary_effect.dm @@ -1,12 +1,12 @@ //A temporary effect that does not DO anything except look pretty. -/obj/effect/temporary +/obj/temporary anchored = TRUE unacidable = TRUE mouse_opacity = 0 density = FALSE layer = ABOVE_HUMAN_LAYER -/obj/effect/temporary/Initialize(mapload, duration = 30, _icon = 'icons/effects/effects.dmi', _state) +/obj/temporary/Initialize(mapload, duration = 30, _icon = 'icons/effects/effects.dmi', _state) . = ..() icon = _icon icon_state = _state diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index 2cca32804b9a3..68acdead686e8 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -15,7 +15,7 @@ * - `log` - If `TRUE`, generates an admin log detailing the EMP's size and origin area. * * Returns `FALSE` if the emp failed to generate, `TRUE` otherwise. - **/ + */ /proc/empulse(atom/origin, heavy_range, light_range, log = FALSE) if (!origin) return FALSE @@ -31,7 +31,7 @@ log_and_message_admins(append_admin_tools("EMP with size ([heavy_range], [light_range]) in area [get_area(origin)]", location = epicenter)) if (heavy_range > 1) - new /obj/effect/overlay/self_deleting/emppulse(epicenter) + new /obj/overlay/self_deleting/emppulse(epicenter) if (heavy_range > light_range) light_range = heavy_range diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index 17a5e09871f32..adbc23d79c957 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -85,7 +85,7 @@ GLOB.defer_powernet_rebuild = 1 if(heavy_impact_range > 1) - var/datum/effect/system/explosion/E = new/datum/effect/system/explosion() + var/datum/effect/explosion/E = new E.set_up(epicenter) E.start() @@ -99,7 +99,7 @@ /proc/secondaryexplosion(turf/epicenter, range) - for(var/turf/tile in range(range, epicenter)) + for(var/turf/tile as anything in RANGE_TURFS(epicenter, range)) tile.ex_act(EX_ACT_HEAVY) diff --git a/code/game/objects/explosion_recursive.dm b/code/game/objects/explosion_recursive.dm index 7afd4c7a3c3d8..1f722ffccc059 100644 --- a/code/game/objects/explosion_recursive.dm +++ b/code/game/objects/explosion_recursive.dm @@ -8,26 +8,16 @@ var/global/explosion_in_progress = 0 /proc/explosion_rec(turf/epicenter, power, shaped) - var/debug_coord = "\[[epicenter.x],[epicenter.y],[epicenter.z]\]" - log_debug(append_admin_tools("[debug_coord] RECURSIVE EXPLOSION: Starting. Power [power].")) var/loopbreak = 0 while(explosion_in_progress) - log_debug("[debug_coord] RECURSIVE EXPLOSION: Explosion in progress, delaying. Loopbreak [loopbreak].") - if(loopbreak >= 15) - log_debug("[debug_coord] RECURSIVE EXPLOSION: Explosion still in progress. Exiting.") - return + if(loopbreak >= 15) return sleep(10) loopbreak++ - if(power <= 0) - log_debug("[debug_coord] RECURSIVE EXPLOSION: Invalid power [power]. Exiting.") - return + if(power <= 0) return epicenter = get_turf(epicenter) - if(!epicenter) - log_debug("[debug_coord] RECURSIVE EXPLOSION: Invalid or null turf. Exiting.") - return + if(!epicenter) return - log_debug("[debug_coord] RECURSIVE EXPLOSION: Setting explosion in progress.") explosion_in_progress = 1 explosion_turfs = list() @@ -59,7 +49,7 @@ var/global/explosion_in_progress = 0 severity /= max(3, power / 3) // One third the total explosion power - One third because there are three power levels and I want each one to take up a third of the crater severity = clamp(severity, 1, 3) // Sanity severity = 4 - severity // Invert the value to accomodate lower numbers being a higher severity. Removing this inversion would require a lot of refactoring of math in `ex_act()` handlers. - severity = Floor(severity) + severity = floor(severity) var/x = T.x var/y = T.y @@ -74,10 +64,9 @@ var/global/explosion_in_progress = 0 if(AM && AM.simulated && !T.protects_atom(AM)) AM.ex_act(severity) if(!QDELETED(AM) && !AM.anchored) - addtimer(new Callback(AM, /atom/movable/.proc/throw_at, throw_target, 9/severity, 9/severity), 0) + addtimer(CALLBACK(AM, TYPE_PROC_REF(/atom/movable, throw_at), throw_target, 9/severity, 9/severity), 0) explosion_turfs.Cut() - log_debug("[debug_coord] RECURSIVE EXPLOSION: Unsetting explosion in progress and exiting.") explosion_in_progress = 0 @@ -90,7 +79,7 @@ var/global/explosion_in_progress = 0 explosion_turfs[src] = power /* sleep(2) - var/obj/effect/debugging/M = locate() in src + var/obj/debugging/M = locate() in src if (!M) M = new(src, power, direction) M.maptext = "[power] vs [src.get_explosion_resistance()]" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 53ba966326b42..0d0dbfb3546a7 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1,10 +1,16 @@ /obj/item name = "item" - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/unused.dmi' w_class = ITEM_SIZE_NORMAL mouse_drag_pointer = MOUSE_ACTIVE_POINTER + blocks_emissive = EMISSIVE_BLOCK_GENERIC + + ///BYOND sometimes doesn't add an 'es' to make a word plural when it should; pluralname is a workaround. Only use if it doesn't work traditionally. For example match becomes matchs without this. + var/pluralname = null + + ///This saves our blood splatter overlay, which will be processed not to go over the edges of the sprite + var/image/blood_overlay = null - var/image/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite var/randpixel = 6 var/r_speed = 1.0 var/burn_point = null @@ -16,7 +22,8 @@ // causeerrorheresoifixthis var/obj/item/master = null var/list/origin_tech = null //Used by R&D to determine what research bonuses it grants. - var/list/attack_verb = list("hit") //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]" + ///Used in use_weapon() and attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]" + var/list/attack_verb = list("attacked") var/lock_picking_level = 0 //used to determine whether something can pick a lock, and how well. var/force = 0 var/attack_cooldown = DEFAULT_WEAPON_COOLDOWN @@ -33,10 +40,14 @@ var/action_button_name //It is also the text which gets displayed on the action button. If not set it defaults to 'Use [name]'. If it's not set, there'll be no button. var/default_action_type = /datum/action/item_action // Specify the default type and behavior of the action button for this atom. - //This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc. - //It should be used purely for appearance. For gameplay effects caused by items covering body parts, use body_parts_covered. + /** + * This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc. + * + * It should be used purely for appearance. For gameplay effects caused by items covering body parts, use body_parts_covered. + */ var/flags_inv = 0 - var/body_parts_covered = 0 //see setup.dm for appropriate bit flags + ///See items_clothing.dm for appropriate bit flags + var/body_parts_covered = EMPTY_BITFIELD var/item_flags = 0 //Miscellaneous flags pertaining to equippable objects. @@ -87,20 +98,25 @@ var/attack_ignore_harm_check = FALSE + ///How a tool acts when you use it on something, such as wirecutters cutting wires while multitools measure power + var/tool_behaviour = null + ///How fast does the tool work + var/toolspeed = 1 + ///Played when the item is used, for example tools + var/usesound -/obj/item/New() - ..() +/obj/item/Initialize() + . = ..() if(randpixel && (!pixel_x && !pixel_y) && isturf(loc)) //hopefully this will prevent us from messing with mapper-set pixel_x/y pixel_x = rand(-randpixel, randpixel) pixel_y = rand(-randpixel, randpixel) - -/obj/item/Initialize() - . = ..() if(islist(armor)) for(var/type in armor) if(armor[type]) // Don't set it if it gives no armor anyway, which is many items. set_extension(src, armor_type, armor, armor_degradation_speed) break + if (item_flags & ITEM_FLAG_IS_CHAMELEON_ITEM) + SetupChameleonExtension(CHAMELEON_FLEXIBLE_OPTIONS_EXTENSION, FALSE, TRUE) /obj/item/Destroy() QDEL_NULL(hidden_uplink) @@ -164,44 +180,24 @@ if (prob(5)) qdel(src) -/obj/item/examine(mob/user, distance) - var/size - switch(src.w_class) - if(ITEM_SIZE_TINY) - size = "tiny" - if(ITEM_SIZE_SMALL) - size = "small" - if(ITEM_SIZE_NORMAL) - size = "normal-sized" - if(ITEM_SIZE_LARGE) - size = "large" - if(ITEM_SIZE_HUGE) - size = "bulky" - if(ITEM_SIZE_HUGE + 1 to INFINITY) - size = "huge" - var/desc_comp = "" //For "description composite" - desc_comp += "It is a [size] item." - +/obj/item/examine(mob/user, distance, is_adjacent) + . = ..() if(hasHUD(user, HUD_SCIENCE)) //Mob has a research scanner active. - desc_comp += "
    *--------*
    " if(origin_tech) - desc_comp += "[SPAN_NOTICE("Testing potentials:")]
    " + . += SPAN_NOTICE("Testing potentials:") //var/list/techlvls = params2list(origin_tech) for(var/T in origin_tech) - desc_comp += "Tech: Level [origin_tech[T]] [CallTechName(T)]
    " + . += SPAN_NOTICE(" Tech: Level [origin_tech[T]] [GLOB.tech_id_to_name[T]]") else - desc_comp += "No tech origins detected.
    " + . += SPAN_NOTICE(" No tech origins detected.") if(LAZYLEN(matter)) - desc_comp += "[SPAN_NOTICE("Extractable materials:")]
    " + . += SPAN_NOTICE("Extractable materials:") for(var/mat in matter) - desc_comp += "[SSmaterials.get_material_by_name(mat)]
    " + . += SPAN_NOTICE(" [SSmaterials.get_material_by_name(mat)]") else - desc_comp += "[SPAN_DANGER("No extractable materials detected.")]
    " - desc_comp += "*--------*" - - return ..(user, distance, "", desc_comp) + . += SPAN_DANGER(" No extractable materials detected.") /obj/item/attack_hand(mob/user as mob) if (!user) return @@ -212,14 +208,15 @@ var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND] if (user.hand) temp = H.organs_by_name[BP_L_HAND] - if(MUTATION_FERAL in user.mutations) - return + if((MUTATION_FERAL in user.mutations) && (MUTATION_CLUMSY in user.mutations)) + to_chat(user, SPAN_WARNING("You don't have the dexterity to pick up \the [src]!")) + return TRUE if(temp && !temp.is_usable()) to_chat(user, SPAN_NOTICE("You try to move your [temp.name], but cannot!")) - return + return TRUE if(!temp) to_chat(user, SPAN_NOTICE("You try to use your hand, but realize it is no longer attached!")) - return + return TRUE var/old_loc = loc @@ -243,7 +240,7 @@ if(user.put_in_active_hand(src)) if (isturf(old_loc)) - var/obj/effect/temporary/item_pickup_ghost/ghost = new(old_loc, src) + var/obj/temporary/item_pickup_ghost/ghost = new(old_loc, src) ghost.animate_towards(user) if(randpixel) pixel_x = rand(-randpixel, randpixel) @@ -262,18 +259,37 @@ R.activate_module(src) R.hud_used.update_robot_modules_display() -/obj/item/attackby(obj/item/W, mob/user) - if((. = SSfabrication.try_craft_with(src, W, user))) - return - if(istype(W, /obj/item/storage)) - var/obj/item/storage/S = W - if(S.use_to_pickup) - if(S.collection_mode) //Mode is set to collect all items - if(isturf(src.loc)) - S.gather_all(src.loc, user) - else if(S.can_be_inserted(src, user)) - S.handle_item_insertion(src) +/obj/item/use_tool(obj/item/item, mob/living/user, list/click_params) + if (SSfabrication.try_craft_with(src, item, user)) + return TRUE + if (istype(item, /obj/item/storage) && isturf(loc)) + var/obj/item/storage/storage = item + if (!storage.allow_quick_gather) + return ..() + if (!storage.quick_gather_single) + storage.gather_all(loc, user) + else if (storage.can_be_inserted(src, user)) + storage.handle_item_insertion(src) + return TRUE + return ..() + + +///Eventually should be deleted in favor of use_tool; keeping duplicate until downstream attackbys are replaced. +/obj/item/attackby(obj/item/item, mob/living/user, list/click_params) + if (SSfabrication.try_craft_with(src, item, user)) + return TRUE + if (istype(item, /obj/item/storage) && isturf(loc)) + var/obj/item/storage/storage = item + if (!storage.allow_quick_gather) + return ..() + if (!storage.quick_gather_single) + storage.gather_all(loc, user) + else if (storage.can_be_inserted(src, user)) + storage.handle_item_insertion(src) + return TRUE + return ..() + /obj/item/can_embed() if (!canremove) @@ -299,7 +315,7 @@ GLOB.item_unequipped_event.raise_event(src, user) if(user && (z_flags & ZMM_MANGLE_PLANES)) - addtimer(new Callback(user, /mob/proc/check_emissive_equipment), 0, TIMER_UNIQUE) + addtimer(CALLBACK(user, TYPE_PROC_REF(/mob, check_emissive_equipment)), 0, TIMER_UNIQUE) // called just as an item is picked up (loc is not yet changed) @@ -340,7 +356,7 @@ note this isn't called during the initial dressing of a player GLOB.item_equipped_event.raise_event(src, user, slot) if(user && (z_flags & ZMM_MANGLE_PLANES)) - addtimer(new Callback(user, /mob/proc/check_emissive_equipment), 0, TIMER_UNIQUE) + addtimer(CALLBACK(user, TYPE_PROC_REF(/mob, check_emissive_equipment)), 0, TIMER_UNIQUE) /obj/item/proc/equipped_robot(mob/user) @@ -519,7 +535,7 @@ var/global/list/slot_flags_enumeration = list( //This proc is executed when someone clicks the on-screen UI button. To make the UI button show, set the 'icon_action_button' to the icon_state of the image of the button in screen1_action.dmi //The default action is attack_self(). //Checks before we get to here are: mob is alive, mob is not restrained, paralyzed, asleep, resting, laying, item is on the mob. -/obj/item/proc/ui_action_click() +/obj/item/proc/ui_action_click(mob/living/user) attack_self(usr) //RETURN VALUES @@ -528,7 +544,7 @@ var/global/list/slot_flags_enumeration = list( //For non-projectile attacks this usually means the attack is blocked. //Otherwise should return 0 to indicate that the attack is not affected in any way. /obj/item/proc/handle_shield(mob/user, damage, atom/damage_source = null, mob/attacker = null, def_zone = null, attack_text = "the attack") - var/parry_chance = get_parry_chance(user) + var/parry_chance = get_parry_chance(user, attacker) if(parry_chance) if(default_parry_check(user, attacker, damage_source) && prob(parry_chance)) user.visible_message(SPAN_DANGER("\The [user] parries [attack_text] with \the [src]!")) @@ -541,12 +557,15 @@ var/global/list/slot_flags_enumeration = list( /obj/item/proc/on_parry(damage_source) return -/obj/item/proc/get_parry_chance(mob/user) +/obj/item/proc/get_parry_chance(mob/user, mob/attacker) . = base_parry_chance + if (!istype(user) || !istype(attacker)) + return if (user.a_intent == I_HELP) . = 0 if (.) - . += clamp((user.get_skill_value(SKILL_COMBAT) * 10) - 20, 0, 75) + . += (user.get_skill_difference(SKILL_COMBAT, attacker) * 5) + . = clamp(., 0, 75) /obj/item/proc/on_disarm_attempt(mob/target, mob/living/attacker) if(force < 1) @@ -571,66 +590,71 @@ var/global/list/slot_flags_enumeration = list( return FALSE var/mob/living/carbon/human/H = M - if(istype(H)) - for(var/obj/item/protection in list(H.head, H.wear_mask, H.glasses)) - if(protection && (protection.body_parts_covered & EYES)) - // you can't stab someone in the eyes wearing a mask! - to_chat(user, SPAN_WARNING("You're going to need to remove the eye covering first.")) - return + if (!istype(H)) + return FALSE - if(!M.has_eyes()) + if (!M.has_eyes()) to_chat(user, SPAN_WARNING("You cannot locate any eyes on [M]!")) - return + return TRUE admin_attack_log(user, M, "Attacked using \a [src]", "Was attacked with \a [src]", "used \a [src] to attack") - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(M) - - src.add_fingerprint(user) - - if(istype(H)) + user.do_attack_animation(M) //Addition of fingerprints is handled in post_use_item, since this is called by use_weapon. By returning TRUE is goes to post_use item. + playsound(loc, hitsound, 50, TRUE, -1) + + for (var/obj/item/protection in list(H.head, H.wear_mask, H.glasses)) //Order in list is important, it will check head first. If protective hat covers masks/eyes; they can't be destroyed. + var/breakcover = force * user.get_skill_value(SKILL_COMBAT) //Make it impossible to break glasses with screwdrivers/pens (force 2-3); no matter how skilled. + if (protection != H.head && (protection.body_parts_covered & EYES) && breakcover > 20) //Only make eye/mask items destroyable; else riot helmets can be destroyed with eye stabbing. + H.visible_message(SPAN_DANGER("\The [M]'s [protection.name] has been damaged with by \the [src] by \the [user].")) + CLEAR_FLAGS(protection.body_parts_covered, EYES) + protection.name = "damaged [protection.name]" + protection.desc += "
    [SPAN_NOTICE("It looks damaged.")]" + H.unEquip(protection, H.loc) + return TRUE + if (protection && (protection.body_parts_covered & EYES)) + M.visible_message(SPAN_DANGER("\The [user] lunges at \the [H]'s eyes with \the [src], but the attack was deflected by \the [protection].")) + return TRUE - var/obj/item/organ/internal/eyes/eyes = H.internal_organs_by_name[BP_EYES] + var/obj/item/organ/internal/eyes/eyes = H.internal_organs_by_name[BP_EYES] + if (H != user) + for (var/mob/O in (viewers(M) - user - M)) + O.show_message(SPAN_DANGER("[M] has been stabbed in the eye with [src] by [user]."), 1) + to_chat(M, SPAN_DANGER("[user] stabs you in the eye with [src]!")) + to_chat(user, SPAN_DANGER("You stab [M] in the eye with [src]!")) + else + user.visible_message( \ + SPAN_DANGER("[user] has stabbed themself with [src]!"), \ + SPAN_DANGER("You stab yourself in the eyes with [src]!") \ + ) - if(H != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message(SPAN_DANGER("[M] has been stabbed in the eye with [src] by [user]."), 1) - to_chat(M, SPAN_DANGER("[user] stabs you in the eye with [src]!")) - to_chat(user, SPAN_DANGER("You stab [M] in the eye with [src]!")) - else - user.visible_message( \ - SPAN_DANGER("[user] has stabbed themself with [src]!"), \ - SPAN_DANGER("You stab yourself in the eyes with [src]!") \ - ) - - eyes.damage += rand(3,4) - if(eyes.damage >= eyes.min_bruised_damage) - if(M.stat != 2) - if(!BP_IS_ROBOTIC(eyes)) //robot eyes bleeding might be a bit silly - to_chat(M, SPAN_DANGER("Your eyes start to bleed profusely!")) - if(prob(50)) - if(M.stat != 2) - to_chat(M, SPAN_WARNING("You drop what you're holding and clutch at your eyes!")) - M.unequip_item() - M.eye_blurry += 10 - M.Paralyse(1) - M.Weaken(4) - if (eyes.damage >= eyes.min_broken_damage) - if(M.stat != 2) - to_chat(M, SPAN_WARNING("You go blind!")) + eyes.damage += rand(3,4) + if (eyes.damage >= eyes.min_bruised_damage) + if (M.stat != 2) + if (!BP_IS_ROBOTIC(eyes)) //robot eyes bleeding might be a bit silly + to_chat(M, SPAN_DANGER("Your eyes start to bleed profusely!")) + if (prob(50)) + if (M.stat != 2) + to_chat(M, SPAN_WARNING("You drop what you're holding and clutch at your eyes!")) + M.unequip_item() + M.eye_blurry += 10 + M.Paralyse(1) + M.Weaken(4) + if (eyes.damage >= eyes.min_broken_damage) + if (M.stat != 2) + to_chat(M, SPAN_WARNING("You go blind!")) var/obj/item/organ/external/affecting = H.get_organ(eyes.parent_organ) affecting.take_external_damage(7) else M.take_organ_damage(7, 0) + M.eye_blurry += rand(3,4) - return + return TRUE /obj/item/clean_blood() . = ..() if(blood_overlay) - overlays.Remove(blood_overlay) + CutOverlays(blood_overlay) if(istype(src, /obj/item/clothing/gloves)) var/obj/item/clothing/gloves/G = src G.transfer_blood = 0 @@ -657,7 +681,7 @@ var/global/list/slot_flags_enumeration = list( //apply the blood-splatter overlay if it isn't already in there if(!length(blood_DNA)) blood_overlay.color = blood_color - overlays += blood_overlay + AddOverlays(blood_overlay) //if this blood isn't already in the list, add it if(istype(M)) @@ -749,12 +773,12 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. user.client.view = viewsize zoom = 1 - GLOB.destroyed_event.register(src, src, /obj/item/proc/unzoom) - GLOB.moved_event.register(user, src, /obj/item/proc/unzoom) - GLOB.dir_set_event.register(user, src, /obj/item/proc/unzoom) - GLOB.item_unequipped_event.register(src, user, /mob/living/proc/unzoom) + GLOB.destroyed_event.register(src, src, TYPE_PROC_REF(/obj/item, unzoom)) + GLOB.moved_event.register(user, src, TYPE_PROC_REF(/obj/item, unzoom)) + GLOB.dir_set_event.register(user, src, TYPE_PROC_REF(/obj/item, unzoom)) + GLOB.item_unequipped_event.register(src, user, TYPE_PROC_REF(/mob/living, unzoom)) - GLOB.stat_set_event.register(user, src, /obj/item/proc/unzoom) + GLOB.stat_set_event.register(user, src, TYPE_PROC_REF(/obj/item, unzoom)) user.visible_message("\The [user] peers through [zoomdevicename ? "the [zoomdevicename] of [src]" : "[src]"].") @@ -767,22 +791,22 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. return zoom = 0 - GLOB.destroyed_event.unregister(src, src, /obj/item/proc/unzoom) - GLOB.moved_event.unregister(user, src, /obj/item/proc/unzoom) - GLOB.dir_set_event.unregister(user, src, /obj/item/proc/unzoom) - GLOB.item_unequipped_event.unregister(src, user, /mob/living/proc/unzoom) + GLOB.destroyed_event.unregister(src, src, TYPE_PROC_REF(/obj/item, unzoom)) + GLOB.moved_event.unregister(user, src, TYPE_PROC_REF(/obj/item, unzoom)) + GLOB.dir_set_event.unregister(user, src, TYPE_PROC_REF(/obj/item, unzoom)) + GLOB.item_unequipped_event.unregister(src, user, TYPE_PROC_REF(/mob/living, unzoom)) user = user == src ? loc : (user || loc) if(!istype(user)) crash_with("[log_info_line(src)]: Zoom user lost]") return - GLOB.stat_set_event.unregister(user, src, /obj/item/proc/unzoom) + GLOB.stat_set_event.unregister(user, src, TYPE_PROC_REF(/obj/item, unzoom)) if(!user.client) return - user.client.view = world.view + user.client.view = user.get_preference_value(/datum/client_preference/client_view) if(!user.hud_used.hud_shown) user.toggle_zoom_hud() @@ -803,7 +827,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. if(slot == slot_r_hand_str || slot == slot_l_hand_str) return 0 - if(icon_state in icon_states(sprite_sheets[bodytype])) + if(ICON_HAS_STATE(sprite_sheets[bodytype], icon_state)) return 1 return (slot != slot_wear_suit_str && slot != slot_head_str) @@ -860,6 +884,8 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. var/ID = GetIdCard() if(ID) . += "
    \[Look at ID\]" + else + . += " \[?\]" /obj/item/proc/on_active_hand(mob/M) @@ -926,3 +952,94 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. /// Virtual for behavior to do after successful do_after if equip_delay is set /obj/item/proc/equip_delay_after(mob/user, slot, equip_flags) return + +/obj/item/OnTopic(href, href_list, datum/topic_state/state) + . = ..() + + if (href_list["examine"]) + examinate(usr, src) + return TOPIC_HANDLED + +/obj/item/proc/change_tool_behaviour(new_tool_behaviour = tool_behaviour, new_toolspeed = toolspeed, override_sound) + tool_behaviour = new_tool_behaviour + toolspeed = new_toolspeed + if(override_sound) + usesound = override_sound + else + switch(tool_behaviour) + if(TOOL_CROWBAR) + usesound = DEFAULT_CROWBAR_SOUND + if(TOOL_SCREWDRIVER) + usesound = DEFAULT_SCREWDRIVER_SOUND + if(TOOL_WRENCH) + usesound = DEFAULT_WRENCH_SOUND + if(TOOL_WELDER) + usesound = DEFAULT_WELDER_SOUND + SEND_SIGNAL(src, COMSIG_OBJ_CHANGE_TOOL_BEHAVIOUR, tool_behaviour, toolspeed, override_sound) + +/// Called when a mob tries to use the item as a tool. Handles most checks. +/obj/item/proc/use_as_tool(atom/target, mob/living/user, delay, amount=0, volume=0, skill_path, datum/callback/extra_checks, do_flags = DO_DEFAULT) + // No delay means there is no start message, and no reason to call tool_start_check before use_tool. + // Run the start check here so we wouldn't have to call it manually. + if(!delay && !tool_start_check(user, amount)) + return + + var/skill_modifier = user.skill_delay_total(skill_path) + + delay *= toolspeed * skill_modifier + + // Play tool sound at the beginning of tool usage. + play_tool_sound(target, volume) + + if(delay) + // Create a callback with checks that would be called every tick by do_after. + var/datum/callback/tool_check = CALLBACK(src, PROC_REF(tool_check_callback), user, amount, extra_checks) + + if(!do_after(user, delay, target=target, do_flags = do_flags, extra_checks=tool_check)) + return + else + // Invoke the extra checks once, just in case. + if(extra_checks && !invoke(extra_checks)) + return + + // Use tool's fuel, stack sheets or charges if amount is set. + if(amount && !use(amount)) + return + + // Play tool sound at the end of tool usage, + // but only if the delay between the beginning and the end is not too small + if(delay >= MIN_TOOL_SOUND_DELAY) + play_tool_sound(target, volume) + + return TRUE + +/// Called before [obj/item/proc/use_tool] if there is a delay, or by [obj/item/proc/use_tool] if there isn't. Only ever used by welding tools and stacks, so it's not added on any other [obj/item/proc/use_tool] checks. +/obj/item/proc/tool_start_check(mob/living/user, amount=0) + . = tool_use_check(user, amount) + if(.) + SEND_SIGNAL(src, COMSIG_TOOL_START_USE, user) + +/// A check called by [/obj/item/proc/tool_start_check] once, and by use_tool on every tick of delay. +/obj/item/proc/tool_use_check(mob/living/user, amount) + return !amount + +/// Plays item's usesound, if any. +/obj/item/proc/play_tool_sound(atom/target, volume=50) + if(target && usesound && volume) + var/played_sound = usesound + + if(islist(usesound)) + played_sound = pick(usesound) + + playsound(target, played_sound, volume, TRUE) + +/// Used in a callback that is passed by use_tool into do_after call. Do not override, do not call manually. +/obj/item/proc/tool_check_callback(mob/living/user, amount, datum/callback/extra_checks) + SHOULD_NOT_OVERRIDE(TRUE) + . = tool_start_check(user, amount) && (!extra_checks || invoke(extra_checks)) + if(.) + SEND_SIGNAL(src, COMSIG_TOOL_IN_USE, user) + +/// Generic use proc. Depending on the item, it uses up fuel, charges, sheets, etc. Returns TRUE on success, FALSE on failure. +/obj/item/proc/use(used) + return !used diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm index c23f27991447d..a4c95c61d3721 100644 --- a/code/game/objects/items/apc_frame.dm +++ b/code/game/objects/items/apc_frame.dm @@ -3,15 +3,16 @@ /obj/item/frame/apc name = "\improper APC frame" desc = "Used for repairing or building APCs." - icon = 'icons/obj/apc_repair.dmi' + icon = 'icons/obj/machines/apc_repair.dmi' icon_state = "apc_frame" obj_flags = OBJ_FLAG_CONDUCTIBLE -/obj/item/frame/apc/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(isWrench(W)) - new /obj/item/stack/material/steel( get_turf(src.loc), 2 ) - qdel(src) +/obj/item/frame/apc/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + new /obj/item/stack/material/steel(get_turf(src.loc), 2) + qdel(src) /obj/item/frame/apc/try_build(turf/on_wall) if (get_dist(on_wall,usr)>1) diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 61c7604f482df..e67722fd2d070 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -1,7 +1,7 @@ /obj/item/blueprints name = "blueprints" desc = "Blueprints..." - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/tools/blueprints.dmi' icon_state = "blueprints" attack_verb = list("attacked", "bapped", "hit") var/const/AREA_ERRNONE = 0 @@ -18,10 +18,19 @@ var/const/ROOM_ERR_LOLWAT = 0 var/const/ROOM_ERR_SPACE = -1 var/const/ROOM_ERR_TOOLARGE = -2 + /// Typecache of machinery, that should have name set on bluepring propagation + var/static/list/machinery_types_to_set_name_typecache = list() /obj/item/blueprints/Initialize() . = ..() desc = "Blueprints of \the [station_name()]. There is a \"Classified\" stamp and several coffee stains on it." + machinery_types_to_set_name_typecache += typecacheof(list( + /obj/machinery/alarm, + /obj/machinery/power/apc, + /obj/machinery/atmospherics/unary/vent_scrubber, + /obj/machinery/atmospherics/unary/vent_pump, + /obj/machinery/door + )) /obj/item/blueprints/attack_self(mob/M as mob) if (!istype(M,/mob/living/carbon/human)) @@ -110,8 +119,9 @@ A.power_light = 0 A.power_environ = 0 A.always_unpowered = 0 - for(var/T in turfs) - ChangeArea(T, A) + for(var/turf/T as anything in turfs) + T.change_area(A) + A.always_unpowered = 0 interact() @@ -140,21 +150,15 @@ qdel(A) interact() -/obj/item/blueprints/proc/set_area_machinery_title(area/A,title,oldtitle) - if (!oldtitle) // or replacetext goes to infinite loop +/obj/item/blueprints/proc/set_area_machinery_title(area/A, title, oldtitle) + if (!oldtitle || !A) // or replacetext goes to infinite loop return - for(var/obj/machinery/alarm/M in A) - M.SetName(replacetext(M.name,oldtitle,title)) - for(var/obj/machinery/power/apc/M in A) - M.SetName(replacetext(M.name,oldtitle,title)) - for(var/obj/machinery/atmospherics/unary/vent_scrubber/M in A) - M.SetName(replacetext(M.name,oldtitle,title)) - for(var/obj/machinery/atmospherics/unary/vent_pump/M in A) - M.SetName(replacetext(M.name,oldtitle,title)) - for(var/obj/machinery/door/M in A) - M.SetName(replacetext(M.name,oldtitle,title)) - //TODO: much much more. Unnamed airlocks, cameras, etc. + for(var/obj/machinery/machine as anything in A.machinery_list) + if(!is_type_in_typecache(machine, machinery_types_to_set_name_typecache)) + continue + + machine.SetName(replacetext(machine.name, oldtitle, title)) /obj/item/blueprints/proc/check_tile_is_border(turf/T2,dir) if (istype(T2, /turf/space)) @@ -236,7 +240,7 @@ /obj/item/blueprints/outpost/get_area_type(area/A = get_area(src)) if(istype(A, /area/exoplanet)) return AREA_SPACE - var/obj/effect/overmap/visitable/sector/exoplanet/E = map_sectors["[z]"] + var/obj/overmap/visitable/sector/exoplanet/E = map_sectors["[z]"] if(istype(E)) return AREA_STATION return AREA_SPECIAL diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 6fe6adcee551b..d0ce735796488 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -23,6 +23,7 @@ name = "body bag" desc = "A plastic bag designed for the storage and transportation of cadavers." icon = 'icons/obj/closets/bodybag.dmi' + icon_state = "closed" closet_appearance = null open_sound = 'sound/items/zip.ogg' close_sound = 'sound/items/zip.ogg' @@ -30,40 +31,56 @@ density = FALSE storage_capacity = (MOB_MEDIUM * 2) - 1 var/contains_body = 0 - var/has_label = FALSE - -/obj/structure/closet/body_bag/attackby(obj/item/W, mob/user as mob) - if (istype(W, /obj/item/pen)) - var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text - if (user.get_active_hand() != W) - return - if (!in_range(src, user) && src.loc != user) - return - t = sanitizeSafe(t, MAX_NAME_LEN) - if (t) - src.SetName("body bag - ") - src.name += t - has_label = TRUE - else - src.SetName("body bag") - src.update_icon() + /// String. The body bag's label, if set. + var/label = null + +/obj/structure/closet/body_bag/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if (!label) + USE_FEEDBACK_FAILURE("[src] has no label to remove.") return - else if(isWirecutter(W)) - src.SetName("body bag") - has_label = FALSE - to_chat(user, "You cut the tag off \the [src].") - src.update_icon() + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return + set_label(null) + user.visible_message( + SPAN_NOTICE("[user] removes [src]'s label with [tool]."), + SPAN_NOTICE("You remove [src]'s label with [tool].") + ) + +/obj/structure/closet/body_bag/use_tool(obj/item/tool, mob/user, list/click_params) + // Pen - Set label + if (istype(tool, /obj/item/pen)) + var/input = input(user, "What would you like the label to be?", name, label) as text|null + input = sanitizeSafe(input, MAX_NAME_LEN) + if (!input || input == label || !user.use_sanity_check(src, tool)) + return TRUE + set_label(input) + user.visible_message( + SPAN_NOTICE("[user] labels [src] with [tool]."), + SPAN_NOTICE("You set [src]'s label with [tool] to: [SPAN_INFO("'[label]'")]") + ) + return TRUE + + return ..() + + +/obj/structure/closet/body_bag/proc/set_label(new_label) + label = new_label + name = initial(name) + if (label) + name += " - [label]" + update_icon() + /obj/structure/closet/body_bag/on_update_icon() if(opened) icon_state = "open" else - icon_state = "closed_unlocked" + icon_state = "closed" - src.overlays.Cut() - if(has_label) - src.overlays += image(src.icon, "bodybag_label") + ClearOverlays() + if(label) + AddOverlays("bodybag_label") /obj/structure/closet/body_bag/store_mobs(stored_units) contains_body = ..() @@ -77,15 +94,15 @@ /obj/structure/closet/body_bag/proc/fold(user) if(!(ishuman(user) || isrobot(user))) - to_chat(user, SPAN_NOTICE("You lack the dexterity to close \the [name].")) + to_chat(user, SPAN_NOTICE("You lack the dexterity to close [name].")) return FALSE if(opened) - to_chat(user, SPAN_NOTICE("You must close \the [name] before it can be folded.")) + to_chat(user, SPAN_NOTICE("You must close [name] before it can be folded.")) return FALSE if(length(contents)) - to_chat(user, SPAN_NOTICE("You can't fold \the [name] while it has something inside it.")) + to_chat(user, SPAN_NOTICE("You can't fold [name] while it has something inside it.")) return FALSE visible_message("[user] folds up the [name]") diff --git a/code/game/objects/items/buttons.dm b/code/game/objects/items/buttons.dm index ebb2c7e3fa1f9..11992c2082327 100644 --- a/code/game/objects/items/buttons.dm +++ b/code/game/objects/items/buttons.dm @@ -3,14 +3,14 @@ /obj/item/frame/light_switch name = "light switch frame" desc = "Used for building a light switch." - icon = 'icons/obj/power.dmi' + icon = 'icons/obj/structures/buttons.dmi' icon_state = "light-p" obj_flags = OBJ_FLAG_CONDUCTIBLE /obj/item/frame/light_switch/windowtint name = "window tint switch frame" desc = "Used for building a window tint switch." - icon = 'icons/obj/power.dmi' + icon = 'icons/obj/structures/buttons.dmi' icon_state = "light-p" obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -58,28 +58,42 @@ GLOBAL_LIST_INIT(possible_switch_offsets, list( break return 1 -/obj/item/frame/light_switch/attackby(obj/item/tool as obj, mob/user as mob) //construction - if(isWrench(tool)) - new /obj/item/stack/material/steel( get_turf(src.loc), 1 ) +/obj/item/frame/light_switch/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + new /obj/item/stack/material/steel(get_turf(src.loc), 1) + qdel(src) + +/obj/item/frame/light_switch/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!isturf(user.loc)) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + var/obj/machinery/light_switch/S = new(user.loc) + if(position_with_direction(S, user)) + to_chat(user, "You fasten [S] with your [tool].") qdel(src) - else if(istype(tool, /obj/item/screwdriver) && isturf(user.loc)) - var/obj/machinery/light_switch/S = new (user.loc) - if(position_with_direction(S, user)) - to_chat(user, "You fasten \the [S] with your [tool].") - qdel(src) - else - qdel(S) - else ..() + else + qdel(S) + +/obj/item/frame/light_switch/windowtint/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + new /obj/item/stack/material/steel(get_turf(src.loc), 1) + qdel(src) -/obj/item/frame/light_switch/windowtint/attackby(obj/item/tool as obj, mob/user as mob) - if(isWrench(tool)) - new /obj/item/stack/material/steel( get_turf(src.loc), 1 ) +/obj/item/frame/light_switch/windowtint/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!isturf(user.loc)) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + var/obj/machinery/button/windowtint/S = new(user.loc) + if(position_with_direction(S, user)) + to_chat(user, "You fasten [S] with your [tool].") qdel(src) - else if(istype(tool, /obj/item/screwdriver) && isturf(user.loc)) - var/obj/machinery/button/windowtint/S = new(user.loc) - if(position_with_direction(S, user)) - to_chat(user, "You fasten \the [S] with your [tool].") - qdel(src) - else - qdel(S) - else ..() \ No newline at end of file + else + qdel(S) diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm index ed88030acf0aa..d57dd6c459603 100644 --- a/code/game/objects/items/contraband.dm +++ b/code/game/objects/items/contraband.dm @@ -51,7 +51,7 @@ /obj/item/reagent_containers/powder name = "chemical powder" desc = "A powdered form of... something." - icon = 'icons/obj/chemical.dmi' + icon = 'icons/obj/chemical_storage.dmi' icon_state = "powder" item_state = "powder" amount_per_transfer_from_this = 5 @@ -62,7 +62,7 @@ /obj/item/reagent_containers/powder/examine(mob/user) . = ..() if(reagents) - to_chat(user, SPAN_NOTICE("There's about [reagents.total_volume] unit\s here.")) + . += SPAN_NOTICE("There's about [reagents.total_volume] unit\s here.") /obj/item/reagent_containers/powder/Initialize() ..() diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 52075fa236d3a..91c698c6a8f4e 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -82,8 +82,7 @@ shadeColour = input(user, "Please select the shade colour.", "Crayon colour") as color return -/obj/item/pen/crayon/afterattack(atom/target, mob/user as mob, proximity) - if(!proximity) return +/obj/item/pen/crayon/use_after(atom/target, mob/user) if(istype(target,/turf/simulated/floor)) var/drawtype = input("Choose what you'd like to draw.", "Crayon scribbles") in list("graffiti","rune","letter","arrow", "defector graffiti") switch(drawtype) @@ -100,7 +99,7 @@ if("defector graffiti") to_chat(user, "You start drawing defector graffiti on the [target.name].") if(instant || do_after(user, 5 SECONDS, target, DO_PUBLIC_UNIQUE)) - new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype) + new /obj/decal/cleanable/crayon(target,colour,shadeColour,drawtype) to_chat(user, "You finish drawing.") target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on. if(uses) @@ -108,9 +107,9 @@ if(!uses) to_chat(user, SPAN_WARNING("You used up your crayon!")) qdel(src) - return + return TRUE -/obj/item/pen/crayon/attack(mob/living/carbon/M as mob, mob/user as mob) +/obj/item/pen/crayon/use_before(mob/living/carbon/M as mob, mob/user as mob) if(istype(M) && M == user) to_chat(M, "You take a bite of the crayon and swallow it.") M.adjust_nutrition(1) @@ -120,8 +119,7 @@ if(uses <= 0) to_chat(M, SPAN_WARNING("You ate your crayon!")) qdel(src) - else - ..() + return TRUE /obj/random/crayon diff --git a/code/game/objects/items/cryobag.dm b/code/game/objects/items/cryobag.dm index 6d001dbebaafa..e01a673eedaba 100644 --- a/code/game/objects/items/cryobag.dm +++ b/code/game/objects/items/cryobag.dm @@ -54,7 +54,7 @@ /obj/structure/closet/body_bag/cryobag/on_update_icon() ..() - overlays.Cut() + ClearOverlays() var/image/I = image(icon, "indicator[opened]") I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR var/maxstasis = initial(stasis_power) @@ -64,7 +64,7 @@ I.color = COLOR_YELLOW else I.color = COLOR_RED - overlays += I + AddOverlays(I) /obj/structure/closet/body_bag/cryobag/proc/get_saturation() return -155 * (1 - stasis_power/initial(stasis_power)) @@ -96,13 +96,13 @@ return airtank ..() -/obj/structure/closet/body_bag/cryobag/examine(mob/user) +/obj/structure/closet/body_bag/cryobag/examine(mob/user, distance, is_adjacent) . = ..() - to_chat(user,"The stasis meter shows '[stasis_power]x'.") - if(Adjacent(user)) //The bag's rather thick and opaque from a distance. - to_chat(user, SPAN_INFO("You peer into \the [src].")) + . += SPAN_NOTICE("The stasis meter shows '[stasis_power]x'.") + if (is_adjacent) //The bag's rather thick and opaque from a distance. + . += SPAN_INFO("You peer into [src].") for(var/mob/living/L in contents) - L.examine(arglist(args)) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(examinate), user, L), 0.1 SECONDS) /obj/item/usedcryobag name = "used stasis bag" diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 128acb38e6d91..f31b9675fca97 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -1,6 +1,6 @@ /obj/item/aicard name = "inteliCard" - icon = 'icons/obj/pda.dmi' + icon = 'icons/obj/tools/aicards.dmi' icon_state = "aicard" // aicard-full item_state = "electronic" w_class = ITEM_SIZE_SMALL @@ -70,10 +70,10 @@ return 1 /obj/item/aicard/on_update_icon() - overlays.Cut() + ClearOverlays() if(carded_ai) if (!carded_ai.control_disabled) - overlays += image('icons/obj/pda.dmi', "aicard-on") + AddOverlays(image('icons/obj/tools/aicards.dmi', "aicard-on")) if(carded_ai.stat) icon_state = "aicard-404" else diff --git a/code/game/objects/items/devices/auto_cpr.dm b/code/game/objects/items/devices/auto_cpr.dm index 22e3734e42bb9..81c95f0c0cffe 100644 --- a/code/game/objects/items/devices/auto_cpr.dm +++ b/code/game/objects/items/devices/auto_cpr.dm @@ -18,22 +18,21 @@ else return FALSE -/obj/item/auto_cpr/attack(mob/living/carbon/human/M, mob/living/user, target_zone) - if(istype(M) && user.a_intent == I_HELP) - if(M.wear_suit) +/obj/item/auto_cpr/use_before(mob/living/carbon/human/M, mob/living/user) + . = FALSE + if (istype(M) && user.a_intent == I_HELP) + if (M.wear_suit) to_chat(user, SPAN_WARNING("Their [M.wear_suit] is in the way, remove it first!")) - return 1 + return TRUE user.visible_message(SPAN_NOTICE("[user] starts fitting [src] onto the [M]'s chest.")) - if(!do_after(user, 2 SECONDS, M, DO_EQUIP)) - return + if (!do_after(user, 2 SECONDS, M, DO_EQUIP)) + return TRUE - if(user.unEquip(src)) - if(!M.equip_to_slot_if_possible(src, slot_wear_suit, TRYEQUIP_REDRAW | TRYEQUIP_SILENT)) + if (user.unEquip(src)) + if (!M.equip_to_slot_if_possible(src, slot_wear_suit, TRYEQUIP_REDRAW | TRYEQUIP_SILENT)) user.put_in_active_hand(src) - return 1 - else - return ..() + return TRUE /obj/item/auto_cpr/equipped(mob/user, slot) ..() diff --git a/code/game/objects/items/devices/binoculars.dm b/code/game/objects/items/devices/binoculars.dm index 4b9aaae7c57e5..c5161d5bff9f4 100644 --- a/code/game/objects/items/devices/binoculars.dm +++ b/code/game/objects/items/devices/binoculars.dm @@ -3,7 +3,7 @@ name = "binoculars" desc = "A pair of binoculars." zoomdevicename = "eyepieces" - icon = 'icons/obj/binoculars.dmi' + icon = 'icons/obj/tools/binoculars.dmi' icon_state = "binoculars" obj_flags = OBJ_FLAG_CONDUCTIBLE diff --git a/code/game/objects/items/devices/boombox.dm b/code/game/objects/items/devices/boombox.dm index f9c1ff11c454a..03c618e3e0459 100644 --- a/code/game/objects/items/devices/boombox.dm +++ b/code/game/objects/items/devices/boombox.dm @@ -10,46 +10,38 @@ force = 7 w_class = ITEM_SIZE_HUGE //forbid putting something that emits loud sounds forever into a backpack origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 1) - var/jukebox/jukebox var/boombox_flags - /obj/item/boombox/Initialize() . = ..() jukebox = new(src, "boombox.tmpl", "HEXABEATRON™", 400, 150) - /obj/item/boombox/Destroy() QDEL_NULL(jukebox) . = ..() - /obj/item/boombox/on_update_icon() icon_state = jukebox?.playing ? "on" : "off" - /obj/item/boombox/attack_self(mob/user) playsound(src, "switch", 30) if (GET_FLAGS(boombox_flags, BOOMBOX_BROKEN)) return jukebox.ui_interact(user) - /obj/item/boombox/MouseDrop(mob/user) jukebox.ui_interact(user) - /obj/item/boombox/emp_act(severity) if (GET_FLAGS(boombox_flags, BOOMBOX_BROKEN)) return - audible_message(SPAN_WARNING("\The [src]'s speakers pop with a sharp crack!")) + audible_message(SPAN_WARNING("[src]'s speakers pop with a sharp crack!")) playsound(src, 'sound/effects/snap.ogg', 100, 1) SET_FLAGS(boombox_flags, BOOMBOX_BROKEN) jukebox.Stop() ..() - /obj/item/boombox/examine(mob/user, distance) . = ..() if (distance > 3) @@ -61,75 +53,76 @@ message += "[message?" ":""]It's broken." if (!message) return - to_chat(user, SPAN_ITALIC(message)) - + . += SPAN_ITALIC(message) + +/obj/item/boombox/screwdriver_act_secondary(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!GET_FLAGS(boombox_flags, BOOMBOX_PANEL) && !GET_FLAGS(boombox_flags, BOOMBOX_BROKEN)) + if(jukebox.playing) + USE_FEEDBACK_NEED_DISABLED(user) + return + var/old_frequency = jukebox.frequency + jukebox.frequency = min(jukebox.frequency + 0.1, 1.5) + if(jukebox.frequency == old_frequency) + balloon_alert(user, "не крутится дальше!") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + balloon_alert(user, "ускорено") + +/obj/item/boombox/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(GET_FLAGS(boombox_flags, BOOMBOX_PANEL)) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + USE_FEEDBACK_NEW_PANEL_OPEN(user, FALSE) + CLEAR_FLAGS(boombox_flags, BOOMBOX_PANEL) + return + if(!GET_FLAGS(boombox_flags, BOOMBOX_BROKEN)) + if(jukebox.playing) + USE_FEEDBACK_NEED_DISABLED(user) + return + var/old_frequency = jukebox.frequency + jukebox.frequency = max(jukebox.frequency - 0.1, 0.5) + if(jukebox.frequency == old_frequency) + balloon_alert(user, "не крутится дальше!") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + balloon_alert(user, "замедлено") + return + if(!GET_FLAGS(boombox_flags, BOOMBOX_PANEL)) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + USE_FEEDBACK_NEW_PANEL_OPEN(user, TRUE) + SET_FLAGS(boombox_flags, BOOMBOX_PANEL) /obj/item/boombox/attackby(obj/item/item, mob/user) set waitfor = FALSE - if(isScrewdriver(item)) - var/item_loc = item.loc - if (GET_FLAGS(boombox_flags, BOOMBOX_PANEL)) - user.visible_message( - SPAN_ITALIC("\The [user] closes the service panel on \the [src]."), - SPAN_NOTICE("You close the service panel on \the [src]."), - range = 3 - ) - CLEAR_FLAGS(boombox_flags, BOOMBOX_PANEL) - else if (!GET_FLAGS(boombox_flags, BOOMBOX_BROKEN)) - if (jukebox.playing) - to_chat(user, SPAN_WARNING("You can't adjust the player head while it's in use.")) - return TRUE - var/data = input(user, "Adjust player head screw?", "Adjust Head") as null | anything in list("tighten", "loosen") - if (item_loc == item.loc) - var/old_frequency = jukebox.frequency - switch (data) - if ("tighten") jukebox.frequency = max(jukebox.frequency - 0.1, 0.5) - if ("loosen") jukebox.frequency = min(jukebox.frequency + 0.1, 1.5) - if (jukebox.frequency == old_frequency) - to_chat(user, SPAN_WARNING("Try as you might, the screw won't turn further.")) - return TRUE - user.visible_message( - SPAN_ITALIC("\The [user] uses \the [item] to fiddle with \the [src]."), - SPAN_NOTICE("You [data] the player head screw inside \the [src]."), - range = 3 - ) - else if (!GET_FLAGS(boombox_flags, BOOMBOX_PANEL)) - user.visible_message( - SPAN_ITALIC("\The [user] opens the service panel on \the [src]."), - SPAN_NOTICE("You open the service panel on \the [src]."), - range = 3 - ) - SET_FLAGS(boombox_flags, BOOMBOX_PANEL) - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) - return TRUE if (istype(item, /obj/item/stack/nanopaste)) if (!GET_FLAGS(boombox_flags, BOOMBOX_PANEL)) - to_chat(user, SPAN_WARNING("The panel on \the [src] is not open.")) + to_chat(user, SPAN_WARNING("The panel on [src] is not open.")) return TRUE if (!GET_FLAGS(boombox_flags, BOOMBOX_BROKEN)) - to_chat(user, SPAN_WARNING("\The [src] is not broken.")) + to_chat(user, SPAN_WARNING("[src] is not broken.")) return TRUE var/obj/item/stack/paste = item if (!paste.use(1)) - to_chat(user, SPAN_WARNING("\The [paste] is empty.")) + to_chat(user, SPAN_WARNING("[paste] is empty.")) return TRUE user.visible_message( - SPAN_ITALIC("\The [user] uses \the [item] to repair \the [src]."), - SPAN_NOTICE("You repair \the [src] with \the [item]."), + SPAN_ITALIC("[user] uses [item] to repair [src]."), + SPAN_NOTICE("You repair [src] with [item]."), range = 3 ) CLEAR_FLAGS(boombox_flags, BOOMBOX_BROKEN) return TRUE . = ..() - - /obj/random_multi/single_item/boombox name = "boombox spawnpoint" id = "boomtastic" item_path = /obj/item/boombox - - #undef BOOMBOX_PANEL #undef BOOMBOX_BROKEN diff --git a/code/game/objects/items/devices/cable_painter.dm b/code/game/objects/items/devices/cable_painter.dm deleted file mode 100644 index f690deb4d6e6b..0000000000000 --- a/code/game/objects/items/devices/cable_painter.dm +++ /dev/null @@ -1,39 +0,0 @@ -/obj/item/device/cable_painter - name = "cable painter" - desc = "A device for repainting cables." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "labeler0" - item_state = "flight" - var/color_selection - var/list/modes - w_class = ITEM_SIZE_SMALL - -/obj/item/device/cable_painter/New() - ..() - color_selection = pick(GLOB.possible_cable_colours) - -/obj/item/device/cable_painter/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, "The color is currently set to [lowertext(color_selection)].") - -/obj/item/device/cable_painter/attack_self(mob/user) - var/new_color_selection = input("What color would you like to use?", "Choose a Color", color_selection) as null|anything in GLOB.possible_cable_colours - if(new_color_selection && !user.incapacitated() && (src in user)) - color_selection = new_color_selection - to_chat(user, SPAN_NOTICE("You change the paint mode to [lowertext(color_selection)].")) - -/obj/item/device/cable_painter/afterattack(atom/A, mob/user, proximity) - if(!proximity) - return ..() - if(istype(A, /obj/structure/cable)) - var/picked_color = GLOB.possible_cable_colours[color_selection] - if(!picked_color || A.color == picked_color) - return - A.color = picked_color - to_chat(user, SPAN_NOTICE("You set \the [A]'s color to [lowertext(color_selection)].")) - else if(isCoil(A)) - var/obj/item/stack/cable_coil/c = A - c.SetCableColor(color_selection, user) - else - . = ..() diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 7cbd6308d37ba..c818371f6cf31 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -1,6 +1,6 @@ /obj/item/device/chameleon name = "chameleon projector" - icon = 'icons/obj/chameleon_projector.dmi' + icon = 'icons/obj/tools/chameleon_projector.dmi' icon_state = "shield0" obj_flags = OBJ_FLAG_CONDUCTIBLE slot_flags = SLOT_BELT @@ -11,7 +11,7 @@ w_class = ITEM_SIZE_SMALL origin_tech = list(TECH_ESOTERIC = 4, TECH_MAGNET = 4) var/can_use = 1 - var/obj/effect/dummy/chameleon/active_dummy = null + var/obj/dummy/chameleon/active_dummy = null var/saved_item = /obj/item/trash/cigbutt var/saved_icon = 'icons/obj/clothing/obj_mask.dmi' var/saved_icon_state = "cigbutt" @@ -28,8 +28,7 @@ /obj/item/device/chameleon/attack_self() toggle() -/obj/item/device/chameleon/afterattack(atom/target, mob/user , proximity) - if(!proximity) return +/obj/item/device/chameleon/use_after(atom/target, mob/living/user, click_parameters) if(!active_dummy) if(istype(target,/obj/item) && !istype(target, /obj/item/disk/nuclear)) playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6) @@ -37,7 +36,8 @@ saved_item = target.type saved_icon = target.icon saved_icon_state = target.icon_state - saved_overlays = target.overlays + saved_overlays = target.overlays.Copy() + return TRUE /obj/item/device/chameleon/proc/toggle() if(!can_use || !saved_item) return @@ -47,7 +47,7 @@ qdel(active_dummy) active_dummy = null to_chat(usr, SPAN_NOTICE("You deactivate the [src].")) - var/obj/effect/overlay/T = new /obj/effect/overlay(get_turf(src)) + var/obj/overlay/T = new /obj/overlay(get_turf(src)) T.icon = 'icons/effects/effects.dmi' flick("emppulse",T) QDEL_IN(T, 8) @@ -55,18 +55,18 @@ playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) var/obj/O = new saved_item(src) if(!O) return - var/obj/effect/dummy/chameleon/C = new /obj/effect/dummy/chameleon(usr.loc) + var/obj/dummy/chameleon/C = new /obj/dummy/chameleon(usr.loc) C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, src) qdel(O) to_chat(usr, SPAN_NOTICE("You activate the [src].")) - var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) + var/obj/overlay/T = new/obj/overlay(get_turf(src)) T.icon = 'icons/effects/effects.dmi' flick("emppulse",T) QDEL_IN(T, 8) /obj/item/device/chameleon/proc/disrupt(delete_dummy = 1) if(active_dummy) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread + var/datum/effect/spark_spread/spark_system = new /datum/effect/spark_spread spark_system.set_up(5, 0, src) spark_system.attach(src) spark_system.start() @@ -84,7 +84,7 @@ var/mob/M = A M.reset_view(null) -/obj/effect/dummy/chameleon +/obj/dummy/chameleon name = "" desc = "" density = FALSE @@ -92,41 +92,63 @@ var/can_move = 1 var/obj/item/device/chameleon/master = null -/obj/effect/dummy/chameleon/proc/activate(obj/O, mob/M, new_icon, new_iconstate, new_overlays, obj/item/device/chameleon/C) +/obj/dummy/chameleon/proc/activate(obj/O, mob/M, new_icon, new_iconstate, new_overlays, obj/item/device/chameleon/C) name = O.name desc = O.desc icon = new_icon icon_state = new_iconstate - overlays = new_overlays + SetOverlays(new_overlays) set_dir(O.dir) M.forceMove(src) master = C master.active_dummy = src -/obj/effect/dummy/chameleon/attackby() - for(var/mob/M in src) - to_chat(M, SPAN_WARNING("Your chameleon-projector deactivates.")) - master.disrupt() -/obj/effect/dummy/chameleon/attack_hand() +/obj/dummy/chameleon/use_tool(obj/item/tool, mob/user, list/click_params) + . = ..() + if (.) + return + + // Interaction always handled - `post_use_item()` handles the reveal of hidden mobs. + user.visible_message( + SPAN_NOTICE("\The [user] taps \the [src] with \a [tool]."), + SPAN_NOTICE("You tap \the [src] with \the [tool].") + ) + return TRUE + + +/obj/dummy/chameleon/post_use_item(obj/item/tool, mob/user, interaction_handled, use_call, click_params) + . = ..() + if (interaction_handled) + var/list/revealed = list() + for (var/hidden as anything in src) + to_chat(hidden, SPAN_WARNING("Your [master] deactivates.")) + revealed += "\the [hidden]" + visible_message( + SPAN_WARNING("\The [src] flashes and [english_list(revealed)] appear[length(revealed) == 1 ? "s" : null]!") + ) + master.disrupt() + + +/obj/dummy/chameleon/attack_hand() for(var/mob/M in src) to_chat(M, SPAN_WARNING("Your chameleon-projector deactivates.")) master.disrupt() -/obj/effect/dummy/chameleon/ex_act() +/obj/dummy/chameleon/ex_act() for(var/mob/M in src) to_chat(M, SPAN_WARNING("Your chameleon-projector deactivates.")) master.disrupt() -/obj/effect/dummy/chameleon/bullet_act() +/obj/dummy/chameleon/bullet_act() for(var/mob/M in src) to_chat(M, SPAN_WARNING("Your chameleon-projector deactivates.")) ..() master.disrupt() -/obj/effect/dummy/chameleon/relaymove(mob/user, direction) - var/area/A = get_area(src) - if(!A || !A.has_gravity()) return //No magical space movement! +/obj/dummy/chameleon/relaymove(mob/user, direction) + if(!has_gravity()) + return //No magical space movement! if(can_move) can_move = 0 @@ -145,6 +167,6 @@ step(src, direction) return -/obj/effect/dummy/chameleon/Destroy() +/obj/dummy/chameleon/Destroy() master.disrupt(0) ..() diff --git a/code/game/objects/items/devices/cosmetic_surgery_kit.dm b/code/game/objects/items/devices/cosmetic_surgery_kit.dm new file mode 100644 index 0000000000000..36fd1e8ff7bd0 --- /dev/null +++ b/code/game/objects/items/devices/cosmetic_surgery_kit.dm @@ -0,0 +1,56 @@ +/obj/item/device/cosmetic_surgery_kit + name = "cosmetic surgery auto-kit" + icon = 'icons/obj/tools/chameleon_projector.dmi' + icon_state = "shield0" + obj_flags = OBJ_FLAG_CONDUCTIBLE + slot_flags = SLOT_BELT + item_state = "electronic" + throwforce = 5 + throw_speed = 1 + throw_range = 5 + w_class = ITEM_SIZE_SMALL + origin_tech = list( + TECH_ESOTERIC = 3, + TECH_MAGNET = 4 + ) + + /// Whether this cosmetic surgery kit is spent. + var/used = FALSE + + +/obj/item/device/cosmetic_surgery_kit/attack_self(mob/living/carbon/human/user) + if (used) + to_chat(user, SPAN_WARNING("The [src] remains lifeless, as it's armatures dangle uselessly, now.")) + return + if (!istype(user)) + return + user.visible_message( + SPAN_WARNING("\The [user] places \the [src] up to [user.p_their()] face."), + SPAN_WARNING("You place \the [src] up to your face.") + ) + if (!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE) || !user.use_sanity_check(src)) + return + user.visible_message(SPAN_DANGER("\The [src] purrs maliciously and unfurls its armatures with frightening speed!")) + playsound(user, 'sound/items/electronic_assembly_emptying.ogg', 50, TRUE) + user.visible_message( + SPAN_DANGER("\The [src]'s armatures begin chipping away at \the [user]'s face!"), + SPAN_DANGER("\The [src]'s armatures begin chipping away at your face!") + ) + user.custom_pain("Your face feels like it's being shredded apart!", 160) + playsound(user, 'sound/effects/squelch1.ogg', 25, TRUE) + if (!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE) || !user.use_sanity_check(src)) + return + user.change_appearance(APPEARANCE_BASIC, state = GLOB.z_state) + used = TRUE + var/response = input(user, "What would you like to call your new self?", "Name change") as null | text + response = sanitize(response, MAX_NAME_LEN) + if (!response) + return + user.real_name = response + user.SetName(response) + user.dna.real_name = response + var/obj/item/organ/external/head/H = user.organs_by_name[BP_HEAD] + if (istype(H) && H.forehead_graffiti) + H.forehead_graffiti = null + if (user.mind) + user.mind.name = user.name diff --git a/code/game/objects/items/devices/debugger.dm b/code/game/objects/items/devices/debugger.dm index 475532ebb1630..7c3e9b397c7ce 100644 --- a/code/game/objects/items/devices/debugger.dm +++ b/code/game/objects/items/devices/debugger.dm @@ -7,7 +7,7 @@ /obj/item/device/debugger name = "debugger" desc = "Used to debug electronic equipment." - icon = 'icons/obj/hacktool.dmi' + icon = 'icons/obj/tools/hacktool.dmi' icon_state = "hacktool-g" obj_flags = OBJ_FLAG_CONDUCTIBLE force = 5.0 diff --git a/code/game/objects/items/devices/dna_sampler.dm b/code/game/objects/items/devices/dna_sampler.dm new file mode 100644 index 0000000000000..e51ecd00d4ff0 --- /dev/null +++ b/code/game/objects/items/devices/dna_sampler.dm @@ -0,0 +1,51 @@ +/obj/item/device/dna_sampler + name = "dna sampler" + desc = "An all in one DNA sampling and sequencing device which can be used to deliver a genetic payload to a mimic cube. Requires a DNA sample from the target." + w_class = ITEM_SIZE_SMALL + origin_tech = list(TECH_BIO = 5, TECH_MATERIAL = 2) + icon = 'icons/obj/tools/implanter.dmi' + icon_state = "dnainjector0" + item_state = "syringe_0" + force = 1 + var/loaded = FALSE + var/src_name = "" + var/src_pronouns = "" + var/src_faction = "" + var/src_dna = null + var/src_species = "" + var/src_flavor = "" + +/obj/item/device/dna_sampler/examine(mob/user) + . = ..() + if(loaded == TRUE) + . += SPAN_WARNING("[src] is currently loaded with a DNA sample of [src_name]") + else + . += SPAN_WARNING("[src] is currently empty") + +/obj/item/device/dna_sampler/attack_self(mob/user) + if(loaded == TRUE && alert("Are you sure you wish to flush the current DNA sequence?",,"Yes","No") == "Yes") + loaded = FALSE + icon_state = "dnainjector0" + to_chat(user, "You flush \the [src]'s currently loaded DNA sequence") + src_dna = null + src_pronouns = "" + src_faction = "" + src_name = "" + src_species = "" + src_flavor = "" + +/obj/item/device/dna_sampler/use_before(mob/living/carbon/human/L, mob/user) + . = FALSE + if (istype(L) && L.can_inject(user, check_zone(user.zone_sel.selecting))) + if (loaded) + user.visible_message("\The [src]'s DNA buffer is already full, please flush the existing DNA buffer first") + return TRUE + user.visible_message("\The [user] jams \the [src] into \the [L], extracting a viscous orange fluid!") + icon_state = "dnainjector" + loaded = TRUE + src_name = L.real_name + src_dna = L.dna + src_faction = L.faction + src_species = L.species.name + src_flavor = L.flavor_texts + return TRUE diff --git a/code/game/objects/items/devices/dociler.dm b/code/game/objects/items/devices/dociler.dm index aa16662553ffa..67e86f05aa1ed 100644 --- a/code/game/objects/items/devices/dociler.dm +++ b/code/game/objects/items/devices/dociler.dm @@ -3,7 +3,7 @@ desc = "A complex single use recharging injector that spreads a complex neurological serum that makes animals docile and friendly. Somewhat." w_class = ITEM_SIZE_NORMAL origin_tech = list(TECH_BIO = 5, TECH_MATERIAL = 2) - icon = 'icons/obj/dociler.dmi' + icon = 'icons/obj/tools/dociler.dmi' icon_state = "animal_tagger1" item_icons = list( slot_l_hand_str = 'icons/mob/onmob/items/lefthand_guns.dmi', @@ -12,49 +12,55 @@ item_state = "gun" force = 1 var/loaded = 1 - var/mode = "completely" + var/charge_tick = 0 + var/recharge_time = 140 + +/obj/item/device/dociler/Process() + if (loaded) + return PROCESS_KILL + if (++charge_tick < recharge_time) + return + charge_tick = 0 + loaded = 1 + icon_state = "animal_tagger1" + update_icon() + visible_message("\The [src] beeps, refilling itself.") + return PROCESS_KILL /obj/item/device/dociler/examine(mob/user) . = ..() - to_chat(user, SPAN_NOTICE("It is currently set to [mode] docile mode.")) + . += SPAN_NOTICE("It is currently [loaded? "loaded": "recharging"].") -/obj/item/device/dociler/attack_self(mob/user) - if(mode == "somewhat") - mode = "completely" - else - mode = "somewhat" +/obj/item/device/dociler/use_before(mob/living/L, mob/user) + . = FALSE + if (!istype(L)) + return FALSE + if (istype(L, /mob/living/simple_animal)) + if (!loaded) + to_chat(user, SPAN_WARNING("\The [src] isn't loaded!")) + return TRUE - to_chat(user, "You set \the [src] to [mode] docile mode.") + user.visible_message("\The [user] thrusts \the [src] deep into \the [L]'s head, injecting something!") + to_chat(L, SPAN_NOTICE("You feel pain as \the [user] injects something into you. All of a sudden you feel as if \the [user] is the friendliest and nicest person you've ever known. You want to be friends with them and all their friends.")) + L.faction = user.faction -/obj/item/device/dociler/attack(mob/living/L, mob/user) - if(!istype(L, /mob/living/simple_animal)) - to_chat(user, SPAN_WARNING("\The [src] cannot not work on \the [L].")) - return + if (istype(L,/mob/living/simple_animal/hostile)) + var/mob/living/simple_animal/hostile/H = L + H.ai_holder.lose_target() + H.attack_same = 0 + H.friends += weakref(user) - if(!loaded) - to_chat(user, SPAN_WARNING("\The [src] isn't loaded!")) - return + L.desc += "
    [SPAN_NOTICE("It looks especially docile.")]" + var/name = input(user, "Would you like to rename \the [L]?", "Dociler", L.name) as text + if (length(name)) + L.real_name = name + L.SetName(name) - user.visible_message("\The [user] thrusts \the [src] deep into \the [L]'s head, injecting something!") - to_chat(L, SPAN_NOTICE("You feel pain as \the [user] injects something into you. All of a sudden you feel as if [user] is the friendliest and nicest person you've ever know. You want to be friends with him and all his friends.")) - if(mode == "somewhat") - L.faction = user.faction + START_PROCESSING(SSobj, src) + loaded = 0 + icon_state = "animal_tagger0" + update_icon() + return TRUE else - L.faction = null - if(istype(L,/mob/living/simple_animal/hostile)) - var/mob/living/simple_animal/hostile/H = L - H.ai_holder.lose_target() - H.attack_same = 0 - H.friends += weakref(user) - L.desc += "
    [SPAN_NOTICE("It looks especially docile.")]" - var/name = input(user, "Would you like to rename \the [L]?", "Dociler", L.name) as text - if(length(name)) - L.real_name = name - L.SetName(name) - - loaded = 0 - icon_state = "animal_tagger0" - spawn(1450) - loaded = 1 - icon_state = "animal_tagger1" - src.visible_message("\The [src] beeps, refilling itself.") + to_chat(user, SPAN_WARNING("\The [src] is not compatible with \the [L]")) + return TRUE diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index df07a4be7b980..a3951f1990903 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -1,7 +1,7 @@ /obj/item/device/flash name = "flash" desc = "A device that produces a bright flash of light, designed to stun and disorient an attacker." - icon = 'icons/obj/flash.dmi' + icon = 'icons/obj/tools/flash.dmi' icon_state = "flash" item_state = "flashtool" throwforce = 5 @@ -35,41 +35,43 @@ times_used = max(0,round(times_used)) //sanity //attack_as_weapon -/obj/item/device/flash/attack(mob/living/M, mob/living/user, target_zone) - if(!user || !M) return 0 //sanity - admin_attack_log(user, M, "flashed their victim using \a [src].", "Was flashed by \a [src].", "used \a [src] to flash") - - if(!clown_check(user)) return 0 - if(broken) +/obj/item/device/flash/use_before(mob/living/M, mob/living/user) + . = FALSE + if (!istype(M)) + return FALSE + if (!clown_check(user)) + return TRUE + if (broken) to_chat(user, SPAN_WARNING("\The [src] is broken.")) - return 0 + return TRUE flash_recharge() //spamming the flash before it's fully charged (60seconds) increases the chance of it breaking //It will never break on the first use. - switch(times_used) - if(0 to 5) + switch (times_used) + if (0 to 5) last_used = world.time - if(prob(times_used)) //if you use it 5 times in a minute it has a 10% chance to break! + if (prob(times_used)) //if you use it 5 times in a minute it has a 10% chance to break! broken = 1 to_chat(user, SPAN_WARNING("The bulb has burnt out!")) icon_state = "[initial(icon_state)]_burnt" - return 0 + return TRUE times_used++ else //can only use it 5 times a minute to_chat(user, SPAN_WARNING("*click* *click*")) - return 0 + return TRUE user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) user.do_attack_animation(M) + admin_attack_log(user, M, "flashed their victim using \a [src].", "Was flashed by \a [src].", "used \a [src] to flash") playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) var/flashfail = do_flash(M) - if(isrobot(user)) + if (isrobot(user)) spawn(0) - var/atom/movable/overlay/animation = new(user) + var/atom/movable/fake_overlay/animation = new(user) animation.plane = user.plane animation.layer = user.layer + 0.01 animation.icon_state = "blank" @@ -78,15 +80,15 @@ sleep(5) qdel(animation) - if(!flashfail) + if (!flashfail) flick("[initial(icon_state)]_on", src) - if(!issilicon(M)) + if (!issilicon(M)) user.visible_message(SPAN_CLASS("disarm", "[user] blinds [M] with \the [src]!")) else user.visible_message(SPAN_NOTICE("[user] overloads [M]'s sensors with \the [src]!")) else user.visible_message(SPAN_NOTICE("[user] fails to blind [M] with \the [src]!")) - return 1 + return TRUE /** @@ -114,7 +116,7 @@ M.flash_eyes(FLASH_PROTECTION_MODERATE - safety) M.Stun(flash_strength / 2) M.eye_blurry = max(M.eye_blurry, flash_strength) - M.confused = max(M.confused, (flash_strength + 2)) + M.set_confused(flash_strength + 2) if(flash_strength > 3) M.drop_l_hand() M.drop_r_hand() @@ -127,11 +129,11 @@ var/mob/living/simple_animal/SA = M var/safety = SA.eyecheck() if(safety < FLASH_PROTECTION_MAJOR) - SA.confused = max(SA.confused, (flash_strength * 0.5)) + SA.set_confused(flash_strength * 0.5) if(safety < FLASH_PROTECTION_MODERATE) SA.flash_eyes(2) SA.eye_blurry = max(SA.eye_blurry, flash_strength) - SA.confused = max(SA.confused, (flash_strength)) + SA.set_confused(flash_strength) else return TRUE @@ -174,7 +176,7 @@ flick("[initial(icon_state)]_on", src) if(user && isrobot(user)) spawn(0) - var/atom/movable/overlay/animation = new(user.loc) + var/atom/movable/fake_overlay/animation = new(user.loc) animation.plane = user.plane animation.layer = user.layer + 0.01 animation.icon_state = "blank" @@ -216,7 +218,7 @@ /obj/item/device/flash/synthetic //not for regular use, weaker effects name = "modified flash" desc = "A device that produces a bright flash of light. This is a specialized version designed specifically for use in camera systems." - icon = 'icons/obj/flash_synthetic.dmi' + icon = 'icons/obj/tools/flash_synthetic.dmi' icon_state = "sflash" str_min = 1 str_max = 4 @@ -224,7 +226,7 @@ /obj/item/device/flash/advanced name = "advanced flash" desc = "A device that produces a very bright flash of light. This is an advanced and expensive version often issued to VIPs." - icon = 'icons/obj/flash_advanced.dmi' + icon = 'icons/obj/tools/flash_advanced.dmi' icon_state = "advflash" origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2) str_min = 3 diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index d3481f34e9df8..a51934bec1e26 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -5,7 +5,7 @@ /obj/item/device/flashlight name = "flashlight" desc = "A hand-held emergency light." - icon = 'icons/obj/lighting.dmi' + icon = 'icons/obj/tools/flashlights.dmi' icon_state = "flashlight" item_state = "flashlight" w_class = ITEM_SIZE_SMALL @@ -13,15 +13,18 @@ slot_flags = SLOT_BELT matter = list(MATERIAL_PLASTIC = 50, MATERIAL_GLASS = 20) + force = 7 action_button_name = "Toggle Flashlight" var/on = FALSE var/activation_sound = 'sound/effects/flashlight.ogg' - var/flashlight_max_bright = 0.5 //brightness of light when on, must be no greater than 1. - var/flashlight_inner_range = 1 //inner range of light when on, can be negative - var/flashlight_outer_range = 3 //outer range of light when on, can be negative + var/flashlight_power = 1 //brightness of light when on + var/flashlight_range = 4 //outer range of light when on, can be negative + light_wedge = LIGHT_VERY_WIDE var/flashlight_flags = EMPTY_BITFIELD // FLASHLIGHT_ bitflags + var/spawn_dir // a way for mappers to force which way a flashlight faces upon spawning + /obj/item/device/flashlight/Initialize() . = ..() @@ -59,46 +62,66 @@ return 1 /obj/item/device/flashlight/proc/set_flashlight() + if(light_wedge) + set_dir(pick(NORTH, SOUTH, EAST, WEST)) + if(spawn_dir) + set_dir(spawn_dir) + if (on) - set_light(flashlight_max_bright, flashlight_inner_range, flashlight_outer_range, 2, light_color) + set_light(flashlight_range, flashlight_power, light_color) else set_light(0) -/obj/item/device/flashlight/attack(mob/living/M as mob, mob/living/user as mob) - add_fingerprint(user) - if(on && user.zone_sel.selecting == BP_EYES) +/obj/item/device/flashlight/examine(mob/user, distance) + . = ..() + if(light_wedge && isturf(loc)) + . += SPAN_NOTICE("[src] is facing [dir2text(dir)].") + +/obj/item/device/flashlight/dropped(mob/user) + . = ..() + if(light_wedge) + set_dir(user.dir) + update_light() + +/obj/item/device/flashlight/throw_at() + . = ..() + if(light_wedge) + var/new_dir = pick(NORTH, SOUTH, EAST, WEST) + set_dir(new_dir) + update_light() - if((MUTATION_CLUMSY in user.mutations) && prob(50)) //too dumb to use flashlight properly - return ..() //just hit them in the head +/obj/item/device/flashlight/use_after(mob/living/M as mob, mob/living/user as mob) + if (istype(M) && on && user.zone_sel.selecting == BP_EYES) + if((MUTATION_CLUMSY in user.mutations) && prob(50)) + return M.use_weapon(src, user) - var/mob/living/carbon/human/H = M //mob has protective eyewear + var/mob/living/carbon/human/H = M if(istype(H)) for(var/obj/item/clothing/C in list(H.head,H.wear_mask,H.glasses)) if(istype(C) && (C.body_parts_covered & EYES)) to_chat(user, SPAN_WARNING("You're going to need to remove [C] first.")) - return + return TRUE var/obj/item/organ/vision if(!H.species.vision_organ || !H.should_have_organ(H.species.vision_organ)) to_chat(user, SPAN_WARNING("You can't find anything on [H] to direct [src] into!")) - return + return TRUE vision = H.internal_organs_by_name[H.species.vision_organ] if(!vision) vision = H.species.has_organ[H.species.vision_organ] to_chat(user, SPAN_WARNING("\The [H] is missing \his [initial(vision.name)]!")) - return + return TRUE user.visible_message(SPAN_NOTICE("\The [user] directs [src] into [M]'s [vision.name]."), \ - SPAN_NOTICE("You direct [src] into [M]'s [vision.name].")) + SPAN_NOTICE("You direct [src] into [M]'s [vision.name].")) inspect_vision(vision, user) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) //can be used offensively + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) if (!(flashlight_flags & FLASHLIGHT_CANNOT_BLIND)) M.flash_eyes() - else - return ..() + return TRUE /obj/item/device/flashlight/proc/inspect_vision(obj/item/organ/vision, mob/living/user) var/mob/living/carbon/human/H = vision.owner @@ -137,8 +160,8 @@ desc = "An energy efficient flashlight." icon_state = "biglight" item_state = "biglight" - flashlight_max_bright = 0.75 - flashlight_outer_range = 4 + flashlight_power = 3 + flashlight_range = 6 /obj/item/device/flashlight/flashdark name = "flashdark" @@ -146,9 +169,8 @@ icon_state = "flashdark" item_state = "flashdark" w_class = ITEM_SIZE_NORMAL - flashlight_max_bright = -1 - flashlight_outer_range = 4 - flashlight_inner_range = 1 + flashlight_power = -6 + flashlight_range = 6 flashlight_flags = FLASHLIGHT_CANNOT_BLIND /obj/item/device/flashlight/pen @@ -159,9 +181,8 @@ obj_flags = OBJ_FLAG_CONDUCTIBLE slot_flags = SLOT_EARS w_class = ITEM_SIZE_TINY - flashlight_max_bright = 0.25 - flashlight_inner_range = 0.1 - flashlight_outer_range = 2 + light_wedge = LIGHT_OMNI + flashlight_range = 2 /obj/item/device/flashlight/maglight name = "maglight" @@ -173,14 +194,13 @@ attack_verb = list ("smacked", "thwacked", "thunked") matter = list(MATERIAL_ALUMINIUM = 200, MATERIAL_GLASS = 50) hitsound = "swing_hit" - flashlight_max_bright = 0.5 - flashlight_outer_range = 5 + light_wedge = LIGHT_NARROW + flashlight_range = 8 /******************************Lantern*******************************/ /obj/item/device/flashlight/lantern name = "lantern" desc = "A mining lantern." - icon = 'icons/obj/lighting.dmi' icon_state = "lantern" item_state = "lantern" force = 10 @@ -189,7 +209,10 @@ obj_flags = OBJ_FLAG_CONDUCTIBLE slot_flags = SLOT_BELT matter = list(MATERIAL_STEEL = 200,MATERIAL_GLASS = 100) - flashlight_outer_range = 5 + flashlight_range = 3 + light_wedge = LIGHT_OMNI + light_color = COLOR_ORANGE + flashlight_power = 1 /obj/item/device/flashlight/lantern/on_update_icon() ..() @@ -207,9 +230,7 @@ item_state = "" obj_flags = OBJ_FLAG_CONDUCTIBLE w_class = ITEM_SIZE_TINY - flashlight_max_bright = 0.25 - flashlight_inner_range = 0.1 - flashlight_outer_range = 2 + flashlight_range = 2 flashlight_flags = FLASHLIGHT_CANNOT_BLIND @@ -217,13 +238,13 @@ /obj/item/device/flashlight/lamp name = "desk lamp" desc = "A desk lamp with an adjustable mount." + icon = 'icons/obj/structures/desklamps.dmi' icon_state = "lamp" item_state = "lamp" w_class = ITEM_SIZE_LARGE obj_flags = OBJ_FLAG_CONDUCTIBLE - flashlight_max_bright = 0.3 - flashlight_inner_range = 2 - flashlight_outer_range = 5 + flashlight_range = 5 + light_wedge = LIGHT_OMNI on = 1 @@ -249,6 +270,7 @@ desc = "A red standard-issue flare. There are instructions on the side reading 'pull cord, make light'." w_class = ITEM_SIZE_TINY light_color = "#e58775" + icon = 'icons/obj/glowsticks.dmi' icon_state = "flare" item_state = "flare" action_button_name = null //just pull it manually, neckbeard. @@ -258,9 +280,9 @@ activation_sound = 'sound/effects/flare.ogg' flashlight_flags = FLASHLIGHT_SINGLE_USE - flashlight_max_bright = 0.8 - flashlight_inner_range = 0.1 - flashlight_outer_range = 5 + flashlight_power = 3 + flashlight_range = 5 + light_wedge = LIGHT_OMNI /obj/item/device/flashlight/flare/Initialize() . = ..() @@ -299,10 +321,11 @@ update_icon() START_PROCESSING(SSobj, src) -/obj/item/device/flashlight/flare/afterattack(obj/O, mob/user, proximity) - if(proximity && istype(O) && on) +/obj/item/device/flashlight/flare/use_after(obj/O, mob/living/user) + if(istype(O) && on) O.HandleObjectHeating(src, user, 500) - ..() + return TRUE + return ..() /obj/item/device/flashlight/flare/proc/activate(mob/user) if(istype(user)) @@ -327,15 +350,16 @@ desc = "A military-grade glowstick." w_class = 2.0 color = "#49f37c" + icon = 'icons/obj/glowsticks.dmi' icon_state = "glowstick" item_state = "glowstick" randpixel = 12 produce_heat = 0 activation_sound = 'sound/effects/glowstick.ogg' - flashlight_max_bright = 0.6 - flashlight_inner_range = 0.1 - flashlight_outer_range = 3 + flashlight_range = 4 + flashlight_power = 1.5 + light_wedge = LIGHT_OMNI flashlight_flags = FLASHLIGHT_SINGLE_USE | FLASHLIGHT_CANNOT_BLIND @@ -346,14 +370,14 @@ /obj/item/device/flashlight/flare/glowstick/on_update_icon() item_state = "glowstick" - overlays.Cut() + ClearOverlays() if(fuel <= 0) icon_state = "glowstick-empty" on = FALSE else if (on) var/image/I = overlay_image(icon,"glowstick-on",color) I.blend_mode = BLEND_ADD - overlays += I + AddOverlays(I) item_state = "glowstick-on" else icon_state = "glowstick" @@ -397,16 +421,16 @@ gender = PLURAL name = "glowing slime extract" desc = "A glowing ball of what appears to be amber." - icon = 'icons/obj/lighting.dmi' + icon = 'icons/obj/structures/lighting.dmi' icon_state = "floor1" //not a slime extract sprite but... something close enough! item_state = "slime" w_class = ITEM_SIZE_TINY on = TRUE //Bio-luminesence has one setting, on. flashlight_flags = FLASHLIGHT_ALWAYS_ON | FLASHLIGHT_CANNOT_BLIND - flashlight_max_bright = 1 - flashlight_inner_range = 0.1 - flashlight_outer_range = 5 + flashlight_power = 0.8 + flashlight_range = 5 + light_wedge = LIGHT_OMNI /obj/item/device/flashlight/slime/New() ..() @@ -423,9 +447,9 @@ w_class = ITEM_SIZE_LARGE obj_flags = OBJ_FLAG_CONDUCTIBLE | OBJ_FLAG_ROTATABLE - flashlight_max_bright = 0.8 - flashlight_inner_range = 1 - flashlight_outer_range = 5 + flashlight_power = 1 + flashlight_range = 7 + light_wedge = LIGHT_WIDE /obj/item/device/flashlight/lamp/floodlamp/green icon_state = "greenfloodlamp" @@ -434,19 +458,18 @@ /obj/item/device/flashlight/lamp/lava name = "lava lamp" desc = "A kitchy throwback decorative light. Noir Edition." - icon = 'icons/obj/lighting.dmi' icon_state = "lavalamp" on = 0 action_button_name = "Toggle lamp" - flashlight_outer_range = 3 //range of light when on + flashlight_range = 3 //range of light when on matter = list(MATERIAL_ALUMINIUM = 250, MATERIAL_GLASS = 200) flashlight_flags = FLASHLIGHT_CANNOT_BLIND /obj/item/device/flashlight/lamp/lava/on_update_icon() - overlays.Cut() + ClearOverlays() var/image/I = image(icon = icon, icon_state = "lavalamp-[on ? "on" : "off"]") I.color = light_color - overlays += I + AddOverlays(I) /obj/item/device/flashlight/lamp/lava/red desc = "A kitchy red decorative light." diff --git a/code/game/objects/items/devices/geiger.dm b/code/game/objects/items/devices/geiger.dm index 8df1a2a444c98..ebe1d04b0c6d6 100644 --- a/code/game/objects/items/devices/geiger.dm +++ b/code/game/objects/items/devices/geiger.dm @@ -7,7 +7,7 @@ /obj/item/device/geiger name = "geiger counter" desc = "A handheld device used for detecting and measuring radiation in an area." - icon = 'icons/obj/geiger_counter.dmi' + icon = 'icons/obj/tools/geiger_counter.dmi' icon_state = "geiger_off" item_state = "multitool" w_class = ITEM_SIZE_SMALL @@ -43,9 +43,9 @@ . = ..() var/msg = "[scanning ? "ambient" : "stored"] Radiation level: [radiation_count ? radiation_count : "0"] IU/s." if(radiation_count > RAD_LEVEL_LOW) - to_chat(user, SPAN_WARNING("[msg]")) + . += SPAN_WARNING("[msg]") else - to_chat(user, SPAN_NOTICE("[msg]")) + . += SPAN_NOTICE("[msg]") /obj/item/device/geiger/attack_self(mob/user) scanning = !scanning diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 83f8ad94ee76d..de4e541bbe019 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -1,16 +1,14 @@ -var/global/list/all_gps_units = list() +GLOBAL_LIST_EMPTY(gps_list) + /obj/item/device/gps name = "global coordinate system" desc = "A handheld relay used to triangulate the approximate co-ordinates of the device." - icon = 'icons/obj/locator.dmi' + icon = 'icons/obj/tools/locator.dmi' icon_state = "gps" item_state = "gps" origin_tech = list(TECH_MATERIAL = 2, TECH_DATA = 2, TECH_BLUESPACE = 2) matter = list(MATERIAL_ALUMINIUM = 1000, MATERIAL_PLASTIC = 750) w_class = ITEM_SIZE_SMALL - - var/gps_tag = "GEN0" - var/emped = FALSE /// Will not show other signals or emit its own signal if false. var/tracking = FALSE /// If true, can see farther, depending on get_map_levels(). @@ -21,25 +19,23 @@ var/global/list/all_gps_units = list() var/hide_signal = FALSE /// If it can toggle the above var. var/can_hide_signal = FALSE - /// How the GPS marker should be handled. - var/is_special_gps_marker = FALSE + /// Device tag (name) + var/gps_tag = "GEN0" + /// If device is emped + var/emped = FALSE - var/mob/holder var/is_in_processing_list = FALSE + var/mob/holder + var/list/decals var/list/tracking_devices var/list/showing_tracked_names var/obj/compass_holder/compass - var/list/decals - -// Mapped type for away site GPS. -/obj/item/device/gps/marker - is_special_gps_marker = TRUE /obj/item/device/gps/Initialize() - global.all_gps_units += src + GLOB.gps_list += src . = ..() name = "[initial(name)] ([gps_tag])" - GLOB.moved_event.register(holder, src, .proc/update_holder) + GLOB.moved_event.register(holder, src, PROC_REF(update_holder)) compass = new(src) update_holder() update_icon() @@ -47,7 +43,7 @@ var/global/list/all_gps_units = list() /obj/item/device/gps/examine(mob/user, distance) . = ..() if(distance <= 1) - to_chat(user, SPAN_NOTICE("\The [src]'s screen shows: [fetch_coordinates()].")) + . += SPAN_NOTICE("[src]'s screen shows: [fetch_coordinates()].") /obj/item/device/gps/proc/fetch_coordinates() var/turf/T = get_turf(src) @@ -66,8 +62,8 @@ var/global/list/all_gps_units = list() if(!force_clear && istype(loc, /mob)) holder = loc - GLOB.moved_event.register(holder, src, .proc/update_compass) - GLOB.dir_set_event.register(holder, src, .proc/update_compass) + GLOB.moved_event.register(holder, src, PROC_REF(update_compass)) + GLOB.dir_set_event.register(holder, src, PROC_REF(update_compass)) if(!force_clear && holder && tracking) if(!is_in_processing_list) @@ -103,8 +99,8 @@ var/global/list/all_gps_units = list() /obj/item/device/gps/Destroy() STOP_PROCESSING(SSobj, src) is_in_processing_list = FALSE - global.all_gps_units -= src - GLOB.moved_event.unregister(holder, src, .proc/update_holder) + GLOB.gps_list -= src + GLOB.moved_event.unregister(holder, src, PROC_REF(update_holder)) update_holder(force_clear = TRUE) QDEL_NULL(compass) return ..() @@ -124,7 +120,7 @@ var/global/list/all_gps_units = list() var/list/adding_sites if(long_range) - adding_sites = (GLOB.using_map.station_levels|GLOB.using_map.contact_levels|GLOB.using_map.player_levels) + adding_sites = (GLOB.using_map.station_levels | GLOB.using_map.contact_levels | GLOB.using_map.player_levels) else adding_sites = GetConnectedZlevels(origin.z) @@ -147,19 +143,13 @@ var/global/list/all_gps_units = list() var/turf/gps_turf = get_turf(gps) var/gps_tag = LAZYACCESS(showing_tracked_names, thing) ? gps.gps_tag : null if(istype(gps_turf)) - compass.set_waypoint("\ref[gps]", gps_tag, gps_turf.x, gps_turf.y, gps_turf.z, LAZYACCESS(tracking_devices, "\ref[gps]")) + compass.set_waypoint("[REF(gps)]", gps_tag, gps_turf.x, gps_turf.y, gps_turf.z, LAZYACCESS(tracking_devices, "[REF(gps)]")) if(can_track(gps) && my_turf && gps_turf != my_turf) - compass.show_waypoint("\ref[gps]") + compass.show_waypoint("[REF(gps)]") compass.rebuild_overlay_lists(update_compass_icon) -/obj/item/device/gps/proc/toggle_tracking(mob/user, silent) - - if(emped) - if(!silent) - to_chat(user, SPAN_WARNING("\The [src] is busted!")) - return FALSE - +/obj/item/device/gps/proc/toggle_tracking(mob/user) tracking = !tracking if(tracking) if(!is_in_processing_list) @@ -169,27 +159,23 @@ var/global/list/all_gps_units = list() is_in_processing_list = FALSE STOP_PROCESSING(SSobj, src) - if(!silent) - if(tracking) - to_chat(user, SPAN_NOTICE("\The [src] is now tracking, and visible to other GPS devices.")) - else - to_chat(user, SPAN_NOTICE("\The [src] is no longer tracking, or visible to other GPS devices.")) - update_compass() update_holder() update_icon() /obj/item/device/gps/emp_act(severity) + SHOULD_CALL_PARENT(FALSE) if(emped) // Without a fancy callback system, this will have to do. return if(tracking) - toggle_tracking(silent = TRUE) + toggle_tracking() /// In case emp_act gets called without any arguments. var/severity_modifier = severity ? severity : 4 var/duration = 5 MINUTES / severity_modifier emped = TRUE update_icon() - addtimer(new Callback(src, .proc/reset_emp), duration) + addtimer(CALLBACK(src, PROC_REF(reset_emp)), duration) + GLOB.empd_event.raise_event(src, severity) /obj/item/device/gps/proc/reset_emp() emped = FALSE @@ -198,150 +184,122 @@ var/global/list/all_gps_units = list() to_chat(loc, SPAN_NOTICE("\The [src] appears to be functional again.")) /obj/item/device/gps/on_update_icon() - overlays.Cut() + ClearOverlays() if(emped) - overlays.Add("gps_emp") + AddOverlays("gps_emp") else if(tracking) - overlays.Add("gps_on") + AddOverlays("gps_on") /obj/item/device/gps/attack_self(mob/user) - ui_interact(user) + tgui_interact(user) return TRUE -/obj/item/device/gps/ui_data(mob/user, ui_key) +/obj/item/device/gps/tgui_state(mob/user) + return GLOB.tgui_physical_state + +/obj/item/device/gps/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "GPS") + ui.open() +/obj/item/device/gps/tgui_data(mob/user, ui_key) + var/list/data = list() var/turf/curr = get_turf(src) var/area/my_area = get_area(src) + var/z_level_detection - . = list() - .["tracking"] = tracking - .["gps_tag"] = gps_tag - .["my_area_name"] = strip_improper(my_area.name) - .["hide_signal"] = hide_signal - .["curr_x"] = curr.x - .["curr_y"] = curr.y - .["curr_z"] = curr.z - .["local_mode"] = local_mode + data["tracking"] = tracking + data["gps_tag"] = gps_tag + data["area"] = strip_improper(my_area.name) + data["can_hide_signal"] = can_hide_signal + data["hide_signal"] = hide_signal + data["curr_x"] = curr.x + data["curr_y"] = curr.y + data["curr_z"] = curr.z + data["local_mode"] = local_mode + data["emped"] = emped - var/z_level_detection if(long_range) - z_level_detection = (GLOB.using_map.station_levels|GLOB.using_map.contact_levels|GLOB.using_map.player_levels) + z_level_detection = (GLOB.using_map.station_levels | GLOB.using_map.contact_levels | GLOB.using_map.player_levels) else z_level_detection = GetConnectedZlevels(curr.z) - .["z_level_detection"] = z_level_detection var/list/gps_list = list() - for(var/obj/item/device/gps/G as anything in global.all_gps_units) - if(G == src || !can_track(G, z_level_detection)) + for(var/obj/item/device/gps/gps as anything in GLOB.gps_list) + if(gps == src || !can_track(gps, z_level_detection)) continue - - var/gps_data[0] - var/gps_ref = "\ref[G]" - gps_data["gps_ref"] = gps_ref - gps_data["gps_tag"] = G.gps_tag - gps_data["is_special_gps_marker"] = G.is_special_gps_marker - gps_data["being_tracked"] = !!(gps_ref in tracking_devices) - - var/square_colour = LAZYACCESS(tracking_devices, gps_ref) || COLOR_CYAN - gps_data["coloured_square"] = COLORED_SQUARE(square_colour) - - var/area/A = get_area(G) - gps_data["area_name"] = strip_improper(A.name) - - var/turf/T = get_turf(G) - gps_data["direction"] = get_compass_direction_string(curr, T) - gps_data["degrees"] = round(Get_Angle(curr,T)) - gps_data["distX"] = T.x - curr.x - gps_data["distY"] = T.y - curr.y - gps_data["distance"] = round(get_dist(curr, T), 10) - gps_data["local"] = (curr.z == T.z) - gps_data["x"] = T.x - gps_data["y"] = T.y - gps_list += list(gps_data) - - if(length(gps_list)) - .["gps_list"] = gps_list - else - .["no_signals"] = TRUE - -/obj/item/device/gps/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, master_ui = null, datum/topic_state/state = GLOB.default_state) - - var/data = ui_data() - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "gps.tmpl", name, 500, 300, master_ui = master_ui, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/item/device/gps/OnTopic(mob/user, list/href_list) - - if(href_list["toggle_power"]) - toggle_tracking() - . = TOPIC_REFRESH - - if(href_list["track_label"]) - var/gps_ref = href_list["track_label"] - var/obj/item/device/gps/gps = locate(gps_ref) - if(istype(gps) && !QDELETED(gps) && !LAZYACCESS(showing_tracked_names, gps_ref)) - LAZYSET(showing_tracked_names, gps_ref, TRUE) - else + var/gps_ref = "[REF(gps)]" + var/area/area = get_area(gps) + var/turf/turf = get_turf(gps) + gps_list += list(list( + "gps_ref" = gps_ref, + "gps_tag" = gps.gps_tag, + "gps_area" = strip_improper(area.name), + "being_tracked" = !!(gps_ref in tracking_devices), + "degrees" = round(Get_Angle(curr,turf)), + "distance" = round(get_dist(curr, turf), 10), + "local" = curr.z == turf.z, + "x" = turf.x, + "y" = turf.y, + )) + data["gps_list"] = gps_list + + return data + +/obj/item/device/gps/tgui_act(action, list/params) + if(..()) + return + . = TRUE + + switch(action) + if("toggle_power") + toggle_tracking() + return TRUE + if("stop_track") + var/gps_ref = params["stop_track"] + var/obj/item/device/gps/gps = locate(gps_ref) + if(!istype(gps) && QDELETED(gps)) + return + compass.clear_waypoint(gps_ref) + LAZYREMOVE(tracking_devices, gps_ref) LAZYREMOVE(showing_tracked_names, gps_ref) - to_chat(user, SPAN_NOTICE("\The [src] is [LAZYACCESS(showing_tracked_names, gps_ref) ? "now showing" : "no longer showing"] labels for [gps.gps_tag].")) - . = TOPIC_REFRESH - - if(href_list["stop_track"]) - var/gps_ref = href_list["stop_track"] - var/obj/item/device/gps/gps = locate(gps_ref) - compass.clear_waypoint(gps_ref) - LAZYREMOVE(tracking_devices, gps_ref) - LAZYREMOVE(showing_tracked_names, gps_ref) - if(istype(gps) && !QDELETED(gps)) - to_chat(user, SPAN_NOTICE("\The [src] is no longer tracking [gps.gps_tag].")) - update_compass() - . = TOPIC_REFRESH - - if(href_list["start_track"]) - var/gps_ref = href_list["start_track"] - var/obj/item/device/gps/gps = locate(gps_ref) - if(istype(gps) && !QDELETED(gps)) + update_compass() + return TRUE + if("start_track") + var/gps_ref = params["start_track"] + var/obj/item/device/gps/gps = locate(gps_ref) + if(!istype(gps) && QDELETED(gps)) + return LAZYSET(tracking_devices, gps_ref, COLOR_SILVER) LAZYSET(showing_tracked_names, gps_ref, TRUE) - to_chat(user, SPAN_NOTICE("\The [src] is now tracking [gps.gps_tag].")) update_compass() - . = TOPIC_REFRESH - - if(href_list["track_color"]) - var/obj/item/device/gps/gps = locate(href_list["track_color"]) - if(istype(gps) && !QDELETED(gps)) + return TRUE + if("track_color") + var/obj/item/device/gps/gps = locate(params["track_color"]) + if(!istype(gps) && QDELETED(gps)) + return var/new_colour = input("Enter a new tracking color.", "GPS Waypoint Color") as color|null - if(new_colour && istype(gps) && !QDELETED(gps) && holder == user && !user.incapacitated()) - to_chat(user, SPAN_NOTICE("You adjust the colour \the [src] is using to highlight [gps.gps_tag].")) - LAZYSET(tracking_devices, href_list["track_color"], new_colour) - update_compass() - . = TOPIC_REFRESH - - if(href_list["tag"]) - /// Used to hold the sanitised input. - var/a = input("Please enter desired tag.", name, gps_tag) as text - a = uppertext(copytext(sanitize(a), 1, 11)) - if(in_range(src, user)) - gps_tag = a + if(!new_colour && !istype(gps) && QDELETED(gps) && holder != usr && usr.incapacitated()) + return + to_chat(usr, SPAN_NOTICE("You adjust the colour \the [src] is using to highlight [gps.gps_tag].")) + LAZYSET(tracking_devices, params["track_color"], new_colour) + update_compass() + return TRUE + if("tag") + var/new_tag = uppertext(tgui_input_text(usr, "Please enter desired tag.", "GPS Tag", gps_tag, 11)) + if(!new_tag || !in_range(src, usr)) + return + gps_tag = new_tag name = "[initial(name)] ([gps_tag])" - to_chat(user, SPAN_NOTICE("You set your GPS's tag to '[gps_tag]'.")) - . = TOPIC_REFRESH - - if(href_list["range"]) - local_mode = !local_mode - to_chat(user, SPAN_NOTICE("You set the signal receiver to [local_mode ? "'NARROW'" : "'BROAD'"].")) - . = TOPIC_REFRESH - - if(href_list["hide"]) - if(!can_hide_signal) - return - hide_signal = !hide_signal - to_chat(user, SPAN_NOTICE("You set the device to [hide_signal ? "not " : ""]broadcast a signal while scanning for other signals.")) - . = TOPIC_REFRESH + return TRUE + if("range") + local_mode = !local_mode + return TRUE + if("hide") + hide_signal = !hide_signal + return TRUE /obj/item/device/gps/AltClick(mob/user) toggle_tracking(user) + return TRUE diff --git a/code/game/objects/items/devices/hacktool.dm b/code/game/objects/items/devices/hacktool.dm index e27f3b128b17c..368fe12c0d17f 100644 --- a/code/game/objects/items/devices/hacktool.dm +++ b/code/game/objects/items/devices/hacktool.dm @@ -23,12 +23,13 @@ hack_state = null return ..() -/obj/item/device/multitool/hacktool/attackby(obj/W, mob/user) - if(isScrewdriver(W)) - in_hack_mode = !in_hack_mode - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - else - ..() +/obj/item/device/multitool/hacktool/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + // Screwdriver - Toggle hack mode + in_hack_mode = !in_hack_mode + balloon_alert(user, "режим [in_hack_mode ? "взлома" : "мультитула"]") /obj/item/device/multitool/hacktool/resolve_attackby(atom/A, mob/user) sanity_check() @@ -51,7 +52,7 @@ known_targets.Swap(1, found) // Move the last hacked item first return 1 - to_chat(user, SPAN_NOTICE("You begin hacking \the [target]...")) + to_chat(user, SPAN_NOTICE("You begin hacking [target]...")) is_hacking = 1 // Hackin takes roughly 15-25 seconds. Fairly small random span to avoid people simply aborting and trying again. var/hack_result = do_after(user, (15 SECONDS + rand(0, 5 SECONDS) + rand(0, 5 SECONDS)), target, do_flags = (DO_DEFAULT | DO_BOTH_UNIQUE_ACT) & ~DO_SHOW_PROGRESS) @@ -61,7 +62,7 @@ to_chat(user, SPAN_NOTICE("Your hacking attempt was succesful!")) user.playsound_local(get_turf(src), 'sound/piano/A#6.ogg', 50) known_targets.Insert(1, target) // Insert the newly hacked target first, - GLOB.destroyed_event.register(target, src, /obj/item/device/multitool/hacktool/proc/on_target_destroy) + GLOB.destroyed_event.register(target, src, TYPE_PROC_REF(/obj/item/device/multitool/hacktool, on_target_destroy)) else to_chat(user, SPAN_WARNING("Your hacking attempt failed!")) return 1 diff --git a/code/game/objects/items/devices/holowarrant.dm b/code/game/objects/items/devices/holowarrant.dm index 5abe65f16bd4d..98dc32a0a077d 100644 --- a/code/game/objects/items/devices/holowarrant.dm +++ b/code/game/objects/items/devices/holowarrant.dm @@ -1,7 +1,7 @@ /obj/item/device/holowarrant name = "warrant projector" desc = "The practical paperwork replacement for the officer on the go." - icon = 'icons/obj/holowarrant.dmi' + icon = 'icons/obj/tools/holowarrant.dmi' icon_state = "holowarrant" item_state = "holowarrant" throwforce = 5 @@ -17,11 +17,11 @@ /obj/item/device/holowarrant/examine(mob/user, distance) . = ..() if(active) - to_chat(user, "It's a holographic warrant for '[active.fields["namewarrant"]]'.") + . += SPAN_NOTICE("It's a holographic warrant for '[active.fields["namewarrant"]]'.") if(distance <= 1) show_content(user) else - to_chat(user, SPAN_NOTICE("You have to be closer if you want to read it.")) + . += SPAN_NOTICE("You have to be closer if you want to read it.") // an active warrant with access authorized grants access /obj/item/device/holowarrant/GetAccess() @@ -54,26 +54,40 @@ active = temp update_icon() -/obj/item/device/holowarrant/attackby(obj/item/W, mob/user) - if(active) - var/obj/item/card/id/I = W.GetIdCard() - if(I && check_access_list(I.GetAccess())) - var/choice = alert(user, "Would you like to authorize this warrant?","Warrant authorization","Yes","No") - if(choice == "Yes") - active.fields["auth"] = "[I.registered_name] - [I.assignment ? I.assignment : "(Unknown)"]" - user.visible_message(SPAN_NOTICE("You swipe \the [I] through the [src]."), \ - SPAN_NOTICE("[user] swipes \the [I] through the [src].")) - broadcast_security_hud_message("\A [active.fields["arrestsearch"]] warrant for [active.fields["namewarrant"]] has been authorized by [I.assignment ? I.assignment+" " : ""][I.registered_name].", src) - else - to_chat(user, SPAN_NOTICE("A red \"Access Denied\" light blinks on \the [src]")) - return 1 - ..() + +/obj/item/device/holowarrant/use_tool(obj/item/tool, mob/user, list/click_params) + // ID Card - Authorize warrant + var/obj/item/card/id/id = tool.GetIdCard() + if (istype(id)) + if (!active) + USE_FEEDBACK_FAILURE("\The [src] has no warrant to authorize.") + return TRUE + var/id_name = GET_ID_NAME(id, tool) + if (!check_access(id)) + USE_FEEDBACK_ID_CARD_DENIED(src, id_name) + return TRUE + var/input = alert(user, "Would you like to authorize this warrant?", "\The [src] - Authorization", "Yes", "No") + if (input != "Yes" || !user.use_sanity_check(src, tool)) + return TRUE + active.fields["auth"] = "[id.registered_name] - [id.assignment ? id.assignment : "(Unknown)"]" + broadcast_security_hud_message("\A [active.fields["arrestsearch"]] warrant for [active.fields["namewarrant"]] has been authorized by [id.assignment ? id.assignment+" " : ""][id.registered_name].", src) + user.visible_message( + SPAN_NOTICE("\The [user] scans \a [tool] with \a [src]."), + SPAN_NOTICE("You authorize \the [src]'s warrant with [id_name].") + ) + return TRUE + + return ..() + //hit other people with it -/obj/item/device/holowarrant/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - user.visible_message(SPAN_NOTICE("[user] holds up a warrant projector and shows the contents to [M]."), \ - SPAN_NOTICE("You show the warrant to [M].")) - M.examinate(src) +/obj/item/device/holowarrant/use_before(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + . = FALSE + if(istype(M)) + user.visible_message(SPAN_NOTICE("[user] holds up a warrant projector and shows the contents to [M]."), \ + SPAN_NOTICE("You show the warrant to [M].")) + examinate(M, src) + return TRUE /obj/item/device/holowarrant/on_update_icon() if(active) diff --git a/code/game/objects/items/devices/inducer.dm b/code/game/objects/items/devices/inducer.dm index 771b323dc6c73..ff339654175e0 100644 --- a/code/game/objects/items/devices/inducer.dm +++ b/code/game/objects/items/devices/inducer.dm @@ -1,7 +1,7 @@ /obj/item/inducer name = "inducer" desc = "A tool for inductively charging internal power cells." - icon = 'icons/obj/tools.dmi' + icon = 'icons/obj/tools/inducers.dmi' icon_state = "inducer-sci" item_state = "inducer-sci" force = 7 @@ -38,9 +38,11 @@ if(cell) cell.emp_act(severity) -/obj/item/inducer/afterattack(obj/O, mob/living/carbon/user, proximity) - if (!proximity || user.a_intent == I_HURT || CannotUse(user) || !recharge(O, user)) - return ..() +/obj/item/inducer/use_after(obj/O, mob/living/user, click_parameters) + if (!istype(O)) + return FALSE + if (CannotUse(user) || !recharge(O, user)) + return TRUE /obj/item/inducer/proc/CannotUse(mob/user) var/obj/item/cell/my_cell = get_cell() @@ -52,12 +54,15 @@ return TRUE return FALSE +/obj/item/inducer/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + opened = !opened + USE_FEEDBACK_NEW_PANEL_OPEN(user, opened) + update_icon() /obj/item/inducer/attackby(obj/item/W, mob/user) - if(isScrewdriver(W)) - opened = !opened - to_chat(user, SPAN_NOTICE("You [opened ? "open" : "close"] the battery compartment.")) - update_icon() if(istype(W, /obj/item/cell)) if (istype(W, /obj/item/cell/device)) to_chat(user, SPAN_WARNING("\The [src] only takes full-size power cells.")) @@ -75,7 +80,7 @@ return if(CannotUse(user) || recharge(W, user)) return - return ..() + . = ..() /obj/item/inducer/proc/recharge(atom/A, mob/user) if(!isturf(A) && user.loc == A) @@ -91,7 +96,7 @@ O = A if(C) var/length = 10 - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + var/datum/effect/spark_spread/sparks = new /datum/effect/spark_spread() sparks.set_up(1, 1, user.loc) sparks.start() if(C.charge >= C.maxcharge) @@ -104,9 +109,9 @@ ) if (istype(A, /obj/item/gun/energy)) length = 3 SECONDS - if (user.get_skill_value(SKILL_WEAPONS) <= SKILL_ADEPT) + if (user.get_skill_value(SKILL_WEAPONS) <= SKILL_TRAINED) length += rand(1, 3) SECONDS - if (user.get_skill_value(SKILL_ELECTRICAL) < SKILL_ADEPT) + if (user.get_skill_value(SKILL_ELECTRICAL) < SKILL_TRAINED) length += rand(4, 6) SECONDS if(MyC.charge > max(0, MyC.charge*failsafe) && do_after(user, length, A, DO_PUBLIC_UNIQUE)) if(CannotUse(user)) @@ -136,10 +141,6 @@ else return 0 -/obj/item/inducer/attack(mob/M, mob/user) - return - - /obj/item/inducer/attack_self(mob/user) if(opened && cell) user.visible_message("\The [user] removes \the [cell] from \the [src]!",SPAN_NOTICE("You remove \the [cell].")) @@ -153,19 +154,19 @@ . = ..() var/obj/item/cell/MyC = get_cell() if(MyC) - to_chat(M, SPAN_NOTICE("Its display shows: [MyC.percent()]%.")) + . += SPAN_NOTICE("Its display shows: [MyC.percent()]%.") else - to_chat(M,SPAN_NOTICE("Its display is dark.")) + . += SPAN_NOTICE("Its display is dark.") if(opened) - to_chat(M,SPAN_NOTICE("Its battery compartment is open.")) + . += SPAN_NOTICE("Its battery compartment is open.") /obj/item/inducer/on_update_icon() - overlays.Cut() + ClearOverlays() if(opened) if(!get_cell()) - overlays += image(icon, "inducer-nobat") + AddOverlays(image(icon, "inducer-nobat")) else - overlays += image(icon,"inducer-bat") + AddOverlays(image(icon,"inducer-bat")) /obj/item/inducer/Destroy() . = ..() @@ -180,14 +181,12 @@ failsafe = 0.2 cell = null -/obj/item/inducer/borg/attackby(obj/item/W, mob/user) - if(isScrewdriver(W)) - return - . = ..() +/obj/item/inducer/borg/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING /obj/item/inducer/borg/on_update_icon() . = ..() - overlays += image("icons/obj/guns/gui.dmi","safety[safety()]") + AddOverlays(image("icons/obj/guns/gui.dmi","safety[safety()]")) /obj/item/inducer/borg/verb/toggle_safety(mob/user) set src in usr diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 94da814838279..c885151ca0382 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -36,7 +36,7 @@ /obj/item/device/lightreplacer name = "light replacer" desc = "A lightweight automated device, capable of interfacing with and rapidly replacing standard light installations." - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/janitor_tools.dmi' icon_state = "lightreplacer0" item_state = "electronic" @@ -54,16 +54,16 @@ /obj/item/device/lightreplacer/examine(mob/user, distance) . = ..() if(distance <= 2) - to_chat(user, "It has [uses] light\s remaining.") + . += SPAN_NOTICE("It has [uses] light\s remaining.") switch (lighting_tone) if (LIGHT_REPLACE_AREA) - to_chat(user, "It is configured to match the room's blueprints for bulb color and tone.") + . += SPAN_NOTICE("It is configured to match the room's blueprints for bulb color and tone.") if (LIGHT_REPLACE_EXISTING) - to_chat(user, "It is configured to match the replaced bulb's color and tone.") + . += SPAN_NOTICE("It is configured to match the replaced bulb's color and tone.") if (LIGHT_REPLACE_RANDOM) - to_chat(user, "It is configured to print bulbs in random tones.") + . += SPAN_NOTICE("It is configured to print bulbs in random tones.") else - to_chat(user, "It is configured to print bulbs in this color: ") + . += SPAN_NOTICE("It is configured to print bulbs in this color: ") /obj/item/device/lightreplacer/resolve_attackby(atom/A, mob/user) @@ -94,32 +94,49 @@ return . = ..() -/obj/item/device/lightreplacer/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/stack/material) && W.get_material_name() == MATERIAL_GLASS) - var/obj/item/stack/G = W - if(uses >= max_uses) - to_chat(user, SPAN_WARNING("[src.name] is full.")) - return - else if(G.use(1)) - AddUses(16) //Autolathe converts 1 sheet into 16 lights. - to_chat(user, SPAN_NOTICE("You insert a piece of glass into \the [src.name]. You have [uses] light\s remaining.")) - return - else - to_chat(user, SPAN_WARNING("You need one sheet of glass to replace lights.")) - - if(istype(W, /obj/item/light)) - var/obj/item/light/L = W - if(L.status == LIGHT_OK) - if(uses < max_uses) - if(!user.unEquip(L)) - return - AddUses(1) - to_chat(user, "You insert \the [L.name] into \the [src.name]. You have [uses] light\s remaining.") - qdel(L) - return - else - to_chat(user, "You need a working light.") - return + +/obj/item/device/lightreplacer/use_tool(obj/item/tool, mob/user, list/click_params) + // Light bulb - Add light + if (istype(tool, /obj/item/light)) + if (uses >= max_uses) + USE_FEEDBACK_FAILURE("\The [src] is full.") + return TRUE + var/obj/item/light/light = tool + if (light.status != LIGHT_OK) + USE_FEEDBACK_FAILURE("\The [tool] is broken.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + AddUses(1) + user.visible_message( + SPAN_NOTICE("\The [user] adds \a [tool] to \a [src]."), + SPAN_NOTICE("You add \the [tool] to \the [src]. It now has [uses] light\s remaining.") + ) + qdel(tool) + return TRUE + + // Material Stack - Add lights + if (istype(tool, /obj/item/stack/material)) + if (tool.get_material_name() != MATERIAL_GLASS) + USE_FEEDBACK_FAILURE("\The [src] can only be loaded with glass.") + return TRUE + if (uses >= max_uses) + USE_FEEDBACK_FAILURE("\The [src] is full.") + return TRUE + var/obj/item/stack/material/material_stack = tool + if (!material_stack.use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(material_stack, 1, "to refill \the [src].") + return TRUE + AddUses(16) + user.visible_message( + SPAN_NOTICE("\The [user] loads \a [src] with [material_stack.get_vague_name(FALSE)]."), + SPAN_NOTICE("You load \the [src] with [material_stack.get_exact_name(1)]. It now has [uses] light\s remaining.") + ) + return TRUE + + return ..() + /obj/item/device/lightreplacer/attack_self(mob/user) /* // This would probably be a bit OP. If you want it though, uncomment the code. @@ -167,8 +184,7 @@ to_chat(user, SPAN_NOTICE("You configure \the [src] to print bulbs in the color: ")) -/obj/item/device/lightreplacer/proc/Use(mob/user) - +/obj/item/device/lightreplacer/use(mob/user) playsound(src.loc, 'sound/machines/click.ogg', 50, 1) AddUses(-1) return 1 @@ -189,7 +205,7 @@ to_chat(U, "There is a working [target.get_fitting_name()] already inserted.") else if(!CanUse(U)) to_chat(U, "\The [src]'s refill light blinks red.") - else if(Use(U)) + else if(use(U)) to_chat(U, SPAN_NOTICE("You replace the [target.get_fitting_name()] with the [src].")) var/bulb_color = null diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index fe224d3cf110c..8bffc62955826 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -1,7 +1,7 @@ /obj/item/device/megaphone name = "megaphone" desc = "A device used to project your voice. Loudly." - icon = 'icons/obj/megaphone.dmi' + icon = 'icons/obj/tools/megaphone.dmi' icon_state = "megaphone" item_state = "radio" w_class = ITEM_SIZE_SMALL diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm index fd77f67a92e1f..585900aba21ef 100644 --- a/code/game/objects/items/devices/modkit.dm +++ b/code/game/objects/items/devices/modkit.dm @@ -15,17 +15,14 @@ /obj/item/clothing/suit/space/void ) -/obj/item/device/modkit/afterattack(obj/O, mob/user as mob, proximity) - if(!proximity) - return - +/obj/item/device/modkit/use_after(obj/O, mob/living/user, click_parameters) if (!target_species) - return //it shouldn't be null, okay? + return FALSE if(!parts) to_chat(user, SPAN_WARNING("This kit has no parts for this modification left.")) qdel(src) - return + return TRUE var/allowed = 0 for (var/permitted_type in permitted_types) @@ -35,22 +32,23 @@ var/obj/item/clothing/I = O if (!istype(I) || !allowed) to_chat(user, SPAN_NOTICE("[src] is unable to modify that.")) - return + return TRUE var/excluding = ("exclude" in I.species_restricted) var/in_list = (target_species in I.species_restricted) if (excluding ^ in_list) to_chat(user, SPAN_NOTICE("[I] is already modified.")) - return + return TRUE if(!isturf(O.loc)) to_chat(user, SPAN_WARNING("[O] must be safely placed on the ground for modification.")) - return + return TRUE playsound(user.loc, 'sound/items/Screwdriver.ogg', 100, 1) - - user.visible_message(SPAN_NOTICE("\The [user] opens \the [src] and modifies \the [O]."),SPAN_NOTICE("You open \the [src] and modify \the [O].")) - + user.visible_message( + SPAN_NOTICE("\The [user] opens \the [src] and modifies \the [O]."), + SPAN_NOTICE("You open \the [src] and modify \the [O].") + ) I.refit_for_species(target_species) if (istype(I, /obj/item/clothing/head/helmet)) @@ -60,7 +58,8 @@ if(!parts) qdel(src) + return TRUE /obj/item/device/modkit/examine(mob/user) . = ..(user) - to_chat(user, "It looks as though it modifies hardsuits to fit [target_species] users.") + . += SPAN_NOTICE("It looks as though it modifies hardsuits to fit [target_species] users.") diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 12e733e90fce1..0e51a1e26fa44 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -6,7 +6,7 @@ /obj/item/device/multitool name = "multitool" desc = "This small, handheld device is made of durable, insulated plastic, and tipped with electrodes, perfect for interfacing with numerous machines." - icon = 'icons/obj/multitool.dmi' + icon = 'icons/obj/tools/multitool.dmi' icon_state = "multitool" obj_flags = OBJ_FLAG_CONDUCTIBLE force = 5.0 @@ -14,10 +14,9 @@ throwforce = 5.0 throw_range = 15 throw_speed = 3 - matter = list(MATERIAL_PLASTIC = 50, MATERIAL_GLASS = 20, MATERIAL_STEEL = 5) - origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) + tool_behaviour = TOOL_MULTITOOL var/buffer_name var/atom/buffer_object @@ -47,7 +46,7 @@ unregister_buffer(buffer_object) buffer_object = buffer if(buffer_object) - GLOB.destroyed_event.register(buffer_object, src, /obj/item/device/multitool/proc/unregister_buffer) + GLOB.destroyed_event.register(buffer_object, src, TYPE_PROC_REF(/obj/item/device/multitool, unregister_buffer)) /obj/item/device/multitool/proc/unregister_buffer(atom/buffer_to_unregister) // Only remove the buffered object, don't reset the name diff --git a/code/game/objects/items/devices/oxycandle.dm b/code/game/objects/items/devices/oxycandle.dm index f0bc578332fd3..cfcccb79f8c9a 100644 --- a/code/game/objects/items/devices/oxycandle.dm +++ b/code/game/objects/items/devices/oxycandle.dm @@ -1,7 +1,7 @@ /obj/item/device/oxycandle name = "oxygen candle" desc = "A steel tube with the words 'OXYGEN - PULL CORD TO IGNITE' stamped on the side.\nA small label reads 'WARNING: NOT FOR LIGHTING USE. WILL IGNITE FLAMMABLE GASSES'" - icon = 'icons/obj/oxygen_candle.dmi' + icon = 'icons/obj/tools/oxygen_candle.dmi' icon_state = "oxycandle" item_state = "oxycandle" w_class = ITEM_SIZE_SMALL // Should fit into internal's box or maybe pocket @@ -11,8 +11,8 @@ var/on = 0 var/activation_sound = 'sound/effects/flare.ogg' light_color = "#e58775" - light_outer_range = 2 - light_max_bright = 1 + light_range = 2 + light_power = 1 var/brightness_on = 1 // Moderate-low bright. action_button_name = null @@ -20,10 +20,10 @@ ..() update_icon() -/obj/item/device/oxycandle/afterattack(obj/O, mob/user, proximity) - if(proximity && istype(O) && on) +/obj/item/device/oxycandle/use_after(obj/O, mob/living/user, click_parameters) + if(istype(O) && on) O.HandleObjectHeating(src, user, 500) - ..() + return TRUE /obj/item/device/oxycandle/attack_self(mob/user) if(!on) diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index cd45188294eda..767493a920ec2 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -1,15 +1,16 @@ /obj/item/device/paicard name = "personal AI device" - icon = 'icons/obj/pda.dmi' + icon = 'icons/obj/tools/aicards.dmi' icon_state = "pai" item_state = "electronic" w_class = ITEM_SIZE_SMALL slot_flags = SLOT_BELT origin_tech = list(TECH_DATA = 2) - var/obj/item/device/radio/radio - var/looking_for_personality = 0 + var/radio = /obj/item/device/radio/infinite + var/looking_for_personality = FALSE var/mob/living/silicon/pai/pai + /obj/item/device/paicard/relaymove(mob/user, direction) if(user.stat || user.stunned) return @@ -17,20 +18,29 @@ if(istype(rig)) rig.forced_move(direction, user) -/obj/item/device/paicard/New() - ..() - overlays += "pai-off" + +/obj/item/device/paicard/Initialize() + . = ..() + AddOverlays("pai-off") + if (!pai) + pai = new /mob/living/silicon/pai(src) + pai.card = src + pai.CreateRadio() + /obj/item/device/paicard/Destroy() //Will stop people throwing friend pAIs into the singularity so they can respawn if(!isnull(pai)) pai.death(0) - QDEL_NULL(radio) return ..() /obj/item/device/paicard/attack_self(mob/user) if (!in_range(src, user)) return + + var/datum/asset/paicard_asset = get_asset_datum(/datum/asset/simple/paicard) + paicard_asset.send(user) + user.set_machine(src) var/dat = {" @@ -38,90 +48,90 @@ @@ -163,19 +173,19 @@ "} dat += "
    " - if(radio) + if(pai.silicon_radio) dat += "Radio Uplink" dat += {" - - @@ -210,7 +220,7 @@ else dat += {" pAI Request Module

    -

    No personality is installed.

    +

    No personality is installed.

    Transmit:[radio.broadcasting ? SPAN_COLOR("#55ff55", "Enabled") : SPAN_COLOR("#ff5555", "Disabled") ] + [pai.silicon_radio.broadcasting ? SPAN_COLOR("#55ff55", "Enabled") : SPAN_COLOR("#ff5555", "Disabled") ]
    Receive:[radio.listening ? SPAN_COLOR("#55ff55", "Enabled") : SPAN_COLOR("#ff5555", "Disabled") ] + [pai.silicon_radio.listening ? SPAN_COLOR("#55ff55", "Enabled") : SPAN_COLOR("#ff5555", "Disabled") ]
    Request personality @@ -244,6 +254,7 @@ var/datum/dna/dna = usr.dna pai.master = M.real_name pai.master_dna = dna.unique_enzymes + pai.faction = M.faction to_chat(pai, SPAN_WARNING("You have been bound to a new master.")) if(href_list["request"]) src.looking_for_personality = 1 @@ -262,9 +273,9 @@ var/t1 = text2num(href_list["wires"]) switch(t1) if(4) - radio.ToggleBroadcast() + pai.silicon_radio.ToggleBroadcast() if(2) - radio.ToggleReception() + pai.silicon_radio.ToggleReception() if(href_list["setlaws"]) var/newlaws = sanitize(input("Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", "pAI Directive Configuration", pai.pai_laws) as message) if(newlaws) @@ -280,34 +291,34 @@ /obj/item/device/paicard/proc/setPersonality(mob/living/silicon/pai/personality) src.pai = personality - src.overlays += "pai-happy" + AddOverlays("pai-happy") /obj/item/device/paicard/proc/removePersonality() src.pai = null - src.overlays.Cut() - src.overlays += "pai-off" + ClearOverlays() + AddOverlays("pai-off") /obj/item/device/paicard var/current_emotion = 1 /obj/item/device/paicard/proc/setEmotion(emotion) if(pai) - src.overlays.Cut() + ClearOverlays() switch(emotion) - if(1) src.overlays += "pai-happy" - if(2) src.overlays += "pai-cat" - if(3) src.overlays += "pai-extremely-happy" - if(4) src.overlays += "pai-face" - if(5) src.overlays += "pai-laugh" - if(6) src.overlays += "pai-off" - if(7) src.overlays += "pai-sad" - if(8) src.overlays += "pai-angry" - if(9) src.overlays += "pai-what" - if(10) src.overlays += "pai-neutral" - if(11) src.overlays += "pai-silly" - if(12) src.overlays += "pai-nose" - if(13) src.overlays += "pai-smirk" - if(14) src.overlays += "pai-exclamation" - if(15) src.overlays += "pai-question" + if(1) AddOverlays("pai-happy") + if(2) AddOverlays("pai-cat") + if(3) AddOverlays("pai-extremely-happy") + if(4) AddOverlays("pai-face") + if(5) AddOverlays("pai-laugh") + if(6) AddOverlays("pai-off") + if(7) AddOverlays("pai-sad") + if(8) AddOverlays("pai-angry") + if(9) AddOverlays("pai-what") + if(10) AddOverlays("pai-neutral") + if(11) AddOverlays("pai-silly") + if(12) AddOverlays("pai-nose") + if(13) AddOverlays("pai-smirk") + if(14) AddOverlays("pai-exclamation") + if(15) AddOverlays("pai-question") current_emotion = emotion /obj/item/device/paicard/proc/alertUpdate() @@ -316,8 +327,10 @@ M.show_message(SPAN_NOTICE("\The [src] flashes a message across its screen, \"Additional personalities available for download.\""), 3, SPAN_NOTICE("\The [src] bleeps electronically."), 2) /obj/item/device/paicard/emp_act(severity) + SHOULD_CALL_PARENT(FALSE) for(var/mob/M in src) M.emp_act(severity) + GLOB.empd_event.raise_event(src, severity) /obj/item/device/paicard/ex_act(severity) if(pai) diff --git a/code/game/objects/items/devices/paint_sprayer.dm b/code/game/objects/items/devices/paint_sprayer.dm index 465b52d0eb586..9e971012ec3cb 100644 --- a/code/game/objects/items/devices/paint_sprayer.dm +++ b/code/game/objects/items/devices/paint_sprayer.dm @@ -4,7 +4,7 @@ /obj/item/device/paint_sprayer name = "paint sprayer" - icon = 'icons/obj/paint_sprayer.dmi' + icon = 'icons/obj/tools/paint_sprayer.dmi' icon_state = "paint_sprayer" item_state = "paint_sprayer" desc = "A slender and none-too-sophisticated device capable of applying paint on floors, walls, exosuits and certain airlocks." @@ -12,28 +12,28 @@ var/paint_color var/list/decals = list( - "Quarter-turf" = list("path" = /obj/effect/floor_decal/corner, "precise" = 1, "colored" = 1), - "Monotile full" = list("path" = /obj/effect/floor_decal/corner/white/mono, "colored" = 1), - "Monotile halved" = list("path" = /obj/effect/floor_decal/corner/white/half, "colored" = 1), - "Hazard stripes" = list("path" = /obj/effect/floor_decal/industrial/warning/fulltile), - "Border, hazard" = list("path" = /obj/effect/floor_decal/industrial/warning), - "Corner, hazard" = list("path" = /obj/effect/floor_decal/industrial/warning/corner), - "Hatched marking" = list("path" = /obj/effect/floor_decal/industrial/hatch, "colored" = 1), - "Dashed outline" = list("path" = /obj/effect/floor_decal/industrial/outline, "colored" = 1), - "Loading sign" = list("path" = /obj/effect/floor_decal/industrial/loading), - "Mosaic, large" = list("path" = /obj/effect/floor_decal/chapel), - "1" = list("path" = /obj/effect/floor_decal/sign), - "2" = list("path" = /obj/effect/floor_decal/sign/two), - "A" = list("path" = /obj/effect/floor_decal/sign/a), - "B" = list("path" = /obj/effect/floor_decal/sign/b), - "C" = list("path" = /obj/effect/floor_decal/sign/c), - "D" = list("path" = /obj/effect/floor_decal/sign/d), - "M" = list("path" = /obj/effect/floor_decal/sign/m), - "V" = list("path" = /obj/effect/floor_decal/sign/v), - "CMO" = list("path" = /obj/effect/floor_decal/sign/cmo), - "Ex" = list("path" = /obj/effect/floor_decal/sign/ex), - "Psy" = list("path" = /obj/effect/floor_decal/sign/p), - "Remove all decals" = list("path" = /obj/effect/floor_decal/reset), + "Quarter-turf" = list("path" = /obj/floor_decal/corner, "precise" = 1, "colored" = 1), + "Monotile full" = list("path" = /obj/floor_decal/corner/white/mono, "colored" = 1), + "Monotile halved" = list("path" = /obj/floor_decal/corner/white/half, "colored" = 1), + "Hazard stripes" = list("path" = /obj/floor_decal/industrial/warning/fulltile), + "Border, hazard" = list("path" = /obj/floor_decal/industrial/warning), + "Corner, hazard" = list("path" = /obj/floor_decal/industrial/warning/corner), + "Hatched marking" = list("path" = /obj/floor_decal/industrial/hatch, "colored" = 1), + "Dashed outline" = list("path" = /obj/floor_decal/industrial/outline, "colored" = 1), + "Loading sign" = list("path" = /obj/floor_decal/industrial/loading), + "Mosaic, large" = list("path" = /obj/floor_decal/chapel), + "1" = list("path" = /obj/floor_decal/sign), + "2" = list("path" = /obj/floor_decal/sign/two), + "A" = list("path" = /obj/floor_decal/sign/a), + "B" = list("path" = /obj/floor_decal/sign/b), + "C" = list("path" = /obj/floor_decal/sign/c), + "D" = list("path" = /obj/floor_decal/sign/d), + "M" = list("path" = /obj/floor_decal/sign/m), + "V" = list("path" = /obj/floor_decal/sign/v), + "CMO" = list("path" = /obj/floor_decal/sign/cmo), + "Ex" = list("path" = /obj/floor_decal/sign/ex), + "Psy" = list("path" = /obj/floor_decal/sign/p), + "Remove all decals" = list("path" = /obj/floor_decal/reset), ) var/list/paint_dirs = list( @@ -81,14 +81,14 @@ . = ..() /obj/item/device/paint_sprayer/on_update_icon() - overlays.Cut() - overlays += overlay_image(icon, "paint_sprayer_color", paint_color) + ClearOverlays() + AddOverlays(overlay_image(icon, "paint_sprayer_color", paint_color)) update_held_icon() /obj/item/device/paint_sprayer/get_mob_overlay(mob/user_mob, slot, bodypart) var/image/ret = ..() var/image/overlay = overlay_image(ret.icon, "paint_sprayer_color", paint_color) - ret.overlays += overlay + ret.AddOverlays(overlay) return ret /obj/item/device/paint_sprayer/on_active_hand(mob/user) @@ -97,25 +97,26 @@ var/datum/click_handler/default/paint_sprayer/CH = user.click_handlers[1] CH.paint_sprayer = src if (isrobot(user)) - GLOB.module_deselected_event.register(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - GLOB.module_deactivated_event.register(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) + GLOB.module_deselected_event.register(user, src, TYPE_PROC_REF(/obj/item/device/paint_sprayer, remove_click_handler)) + GLOB.module_deactivated_event.register(user, src, TYPE_PROC_REF(/obj/item/device/paint_sprayer, remove_click_handler)) else - GLOB.hands_swapped_event.register(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - GLOB.mob_equipped_event.register(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - GLOB.mob_unequipped_event.register(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) + GLOB.hands_swapped_event.register(user, src, TYPE_PROC_REF(/obj/item/device/paint_sprayer, remove_click_handler)) + GLOB.mob_equipped_event.register(user, src, TYPE_PROC_REF(/obj/item/device/paint_sprayer, remove_click_handler)) + GLOB.mob_unequipped_event.register(user, src, TYPE_PROC_REF(/obj/item/device/paint_sprayer, remove_click_handler)) /obj/item/device/paint_sprayer/proc/remove_click_handler(mob/user) if (user.RemoveClickHandler(/datum/click_handler/default/paint_sprayer)) - GLOB.hands_swapped_event.unregister(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - GLOB.mob_equipped_event.unregister(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - GLOB.mob_unequipped_event.unregister(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - GLOB.module_deselected_event.unregister(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - GLOB.module_deactivated_event.unregister(user, src, /obj/item/device/paint_sprayer/proc/remove_click_handler) - -/obj/item/device/paint_sprayer/afterattack(atom/A, mob/user, proximity, params) - if (!proximity) - return - apply_paint(A, user, params) + GLOB.hands_swapped_event.unregister(user, src, TYPE_PROC_REF(/obj/item/device/paint_sprayer, remove_click_handler)) + GLOB.mob_equipped_event.unregister(user, src, TYPE_PROC_REF(/obj/item/device/paint_sprayer, remove_click_handler)) + GLOB.mob_unequipped_event.unregister(user, src, TYPE_PROC_REF(/obj/item/device/paint_sprayer, remove_click_handler)) + GLOB.module_deselected_event.unregister(user, src, TYPE_PROC_REF(/obj/item/device/paint_sprayer, remove_click_handler)) + GLOB.module_deactivated_event.unregister(user, src, TYPE_PROC_REF(/obj/item/device/paint_sprayer, remove_click_handler)) + +/obj/item/device/paint_sprayer/use_before(atom/target, mob/living/user, click_parameters) + if (apply_paint(target, user, click_parameters)) + return TRUE + + return ..() /obj/item/device/paint_sprayer/proc/pick_color(atom/A, mob/user) if (!user.Adjacent(A) || user.incapacitated()) @@ -146,7 +147,6 @@ to_chat(user, SPAN_WARNING("\The [src] can only be used on floors, windows, walls, exosuits or certain airlocks.")) . = FALSE if (.) - add_fingerprint(user) playsound(get_turf(src), 'sound/effects/spray3.ogg', 30, 1, -6) return . @@ -210,7 +210,7 @@ to_chat(user, SPAN_WARNING("\The [src] flashes an error light. You might need to reconfigure it.")) return FALSE - if((F.decals && length(F.decals) > 5) && !ispath(painting_decal, /obj/effect/floor_decal/reset)) + if((F.decals && length(F.decals) > 5) && !ispath(painting_decal, /obj/floor_decal/reset)) to_chat(user, SPAN_WARNING("\The [F] has been painted too much; you need to clear it off.")) return FALSE @@ -301,19 +301,19 @@ /obj/item/device/paint_sprayer/examine(mob/user) . = ..(user) - to_chat(user, "It is configured to produce the '[decal]' decal using [paint_color] paint.") + . += SPAN_NOTICE("It is configured to produce the '[decal]' decal using [paint_color] paint.") /obj/item/device/paint_sprayer/AltClick() if (!isturf(loc)) choose_preset_color() - else - . = ..() + return TRUE + return ..() /obj/item/device/paint_sprayer/CtrlClick() if (!isturf(loc)) choose_color() - else - . = ..() + return TRUE + return ..() /obj/item/device/paint_sprayer/verb/choose_color() set name = "Choose color" @@ -364,9 +364,9 @@ if (A != paint_sprayer) if(!istype(user.buckled) || user.buckled.buckle_movable) user.face_atom(A) - if(modifiers["ctrl"] && paint_sprayer.pick_color(A, user)) + if(LAZYACCESS(modifiers, CTRL_CLICK) && paint_sprayer.pick_color(A, user)) return - if(modifiers["shift"] && paint_sprayer.remove_paint(A, user)) + if(LAZYACCESS(modifiers, SHIFT_CLICK) && paint_sprayer.remove_paint(A, user)) return user.ClickOn(A, params) diff --git a/code/game/objects/items/devices/personal_shield.dm b/code/game/objects/items/devices/personal_shield.dm index fb946bfe03493..70f24f9703ae4 100644 --- a/code/game/objects/items/devices/personal_shield.dm +++ b/code/game/objects/items/devices/personal_shield.dm @@ -1,7 +1,7 @@ /obj/item/device/personal_shield name = "personal shield" desc = "Truly a life-saver: this device protects its user from being hit by objects moving very, very fast, as long as it holds a charge." - icon = 'icons/obj/batterer.dmi' + icon = 'icons/obj/tools/batterer.dmi' icon_state = "battereroff" slot_flags = SLOT_BELT var/open = FALSE @@ -41,27 +41,41 @@ . = ..() if(open) if(power_cell) - to_chat(user, "There is \a [power_cell] in \the [src].") + . += SPAN_NOTICE("There is \a [power_cell] in \the [src].") else - to_chat(user, "There is no cell in \the [src].") - to_chat(user, "The internal capacitor currently has [round(currently_stored_power/max_stored_power * 100)]% charge.") - -/obj/item/device/personal_shield/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/cell)) - if(!open) - to_chat(user, SPAN_WARNING("\The [src] needs to be open first.")) - else if(power_cell) - to_chat(user, SPAN_WARNING("\The [src] already has a battery.")) - else if(user.unEquip(W, src)) - user.visible_message("\The [user] installs \the [W] into \the [src].", SPAN_NOTICE("You install \the [W] into \the [src].")) - power_cell = W - START_PROCESSING(SSobj, src) - update_icon() - if(isScrewdriver(W)) - playsound(src, 'sound/items/Screwdriver.ogg', 15, 1) - user.visible_message("\The [user] [open ? "screws" : "unscrews"] the top of \the [src].", SPAN_NOTICE("You [open ? "screw" : "unscrew"] the top of \the [src].")) - open = !open + . += SPAN_NOTICE("There is no cell in \the [src].") + . += SPAN_NOTICE("The internal capacitor currently has [round(currently_stored_power/max_stored_power * 100)]% charge.") + +/obj/item/device/personal_shield/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + open = !open + USE_FEEDBACK_NEW_PANEL_OPEN(user, open) + update_icon() + +/obj/item/device/personal_shield/use_tool(obj/item/tool, mob/user, list/click_params) + // Power Cell - Install cell + if (istype(tool, /obj/item/cell)) + if (!open) + USE_FEEDBACK_FAILURE("\The [src]'s panel needs to be open before you can install \the [tool].") + return TRUE + if (power_cell) + USE_FEEDBACK_FAILURE("\The [src] already has \a [power_cell] installed.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + power_cell = tool + START_PROCESSING(SSobj, src) update_icon() + user.visible_message( + SPAN_NOTICE("\The [user] installs \a [tool] into \a [src]."), + SPAN_NOTICE("You install \the [tool] into \the [src].") + ) + return TRUE + + . = ..() /obj/item/device/personal_shield/attack_self(mob/living/user) if (open && power_cell) @@ -138,8 +152,8 @@ /obj/item/device/personal_shield/AltClick(mob/user) if (loc == user) toggle(user) - else - . = ..() + return TRUE + return ..() /obj/item/device/personal_shield/proc/take_charge() if(!actual_take_charge()) @@ -176,3 +190,83 @@ SetName("activated [initial(name)]") else SetName(initial(name)) + +/obj/item/rig_module/personal_shield + name = "hardsuit energy shield" + desc = "Truly a life-saver: this device protects its user from being hit by objects moving very, very fast. It draws power from a hardsuit's internal battery." + icon = 'icons/obj/tools/batterer.dmi' + icon_state = "battereroff" + var/shield_type = /obj/aura/personal_shield/device + var/shield_power_cost = 100 + var/obj/aura/personal_shield/device/shield + + VAR_PRIVATE/currently_stored_power = 500 + VAR_PRIVATE/max_stored_power = 500 + VAR_PRIVATE/restored_power_per_tick = 5 + VAR_PRIVATE/enable_when_powered = FALSE + + toggleable = TRUE + + interface_name = "energy shield" + interface_desc = "A device that protects its user from being hit by fast moving projectiles. Its internal capacitor can hold 5 charges at a time and recharges slowly over time." + module_cooldown = 10 SECONDS + origin_tech = list(TECH_MATERIAL = 5, TECH_POWER = 6, TECH_MAGNET = 6, TECH_ESOTERIC = 6, TECH_ENGINEERING = 7) + activate_string = "Enable Shield" + deactivate_string = "Disable Shield" + +/obj/item/rig_module/personal_shield/Initialize() + . = ..() + if (holder.cell) + currently_stored_power = holder.cell.use(max_stored_power) + +/obj/item/rig_module/personal_shield/activate() + if (!..()) + return FALSE + + var/mob/living/carbon/human/H = holder.wearer + + if (shield || !H) + return FALSE + if (currently_stored_power < shield_power_cost) + to_chat(H, SPAN_WARNING("\The [src]'s internal capacitor does not have enough charge.")) + return FALSE + shield = new shield_type(H, src) + return TRUE + +/obj/item/rig_module/personal_shield/deactivate() + if (!..()) + return FALSE + + if (!shield) + return + QDEL_NULL(shield) + return TRUE + +/obj/item/rig_module/personal_shield/Process(wait) + if (!holder.cell?.charge || currently_stored_power >= max_stored_power) + return PROCESS_KILL + var/amount_to_restore = min(restored_power_per_tick * wait, max_stored_power - currently_stored_power) + currently_stored_power += holder.cell.use(amount_to_restore) + + if (enable_when_powered && currently_stored_power >= shield_power_cost) + activate(get_holder_of_type(src, /mob)) + +/obj/item/rig_module/personal_shield/proc/take_charge() + if (!actual_take_charge()) + deactivate() + return FALSE + return TRUE + +/obj/item/rig_module/personal_shield/proc/actual_take_charge() + if (!holder.cell) + return FALSE + if (currently_stored_power < shield_power_cost) + return FALSE + + currently_stored_power -= shield_power_cost + START_PROCESSING(SSobj, src) + + if (currently_stored_power < shield_power_cost) + enable_when_powered = TRUE + return FALSE + return TRUE diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 1ffe9f4b7cb66..824dd23df537d 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -64,30 +64,31 @@ STOP_PROCESSING_POWER_OBJECT(src) . = ..() -/obj/item/device/powersink/attackby(obj/item/I, mob/user) - if(isScrewdriver(I)) - if(mode == DISCONNECTED) - var/turf/T = loc - if(isturf(T) && !!T.is_plating()) - attached = locate() in T - if(!attached) - to_chat(user, SPAN_WARNING("This device must be placed over an exposed, powered cable node!")) - else - set_mode(CLAMPED_OFF) - user.visible_message( \ - "[user] attaches \the [src] to the cable.", \ - SPAN_NOTICE("You attach \the [src] to the cable."), - SPAN_CLASS("italics", "You hear some wires being connected to something.")) - else - to_chat(user, SPAN_WARNING("This device must be placed over an exposed, powered cable node!")) - else - set_mode(DISCONNECTED) - user.visible_message( \ - "[user] detaches \the [src] from the cable.", \ - SPAN_NOTICE("You detach \the [src] from the cable."), - SPAN_CLASS("italics", "You hear some wires being disconnected from something.")) - else - return ..() + +/obj/item/device/powersink/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + // Screwdriver - Toggle connection to cable + if(mode != DISCONNECTED) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + balloon_alert(user, "отключено!") + set_mode(DISCONNECTED) + return + if(!isturf(loc)) + balloon_alert(user, "нужен пол!") + return + var/turf/turf = loc + if(!turf.is_plating()) + balloon_alert(user, "нужно убрать покрытие с пола!") + return + attached = locate() in turf + if(!attached) + balloon_alert(user, "нужен кабель на полу!") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + set_mode(CLAMPED_OFF) + balloon_alert(user, "подключено") /obj/item/device/powersink/attack_ai() return @@ -102,8 +103,8 @@ if(CLAMPED_OFF) user.visible_message( \ - "[user] activates \the [src]!", \ - SPAN_NOTICE("You activate \the [src]."), + "[user] activates [src]!", \ + SPAN_NOTICE("You activate [src]."), SPAN_CLASS("italics", "You hear a click.")) message_admins("Power sink activated by [key_name_admin(user)] at (JMP)") log_game("Power sink activated by [key_name(user)] at [get_area_name(src)]") @@ -111,8 +112,8 @@ if(OPERATING) user.visible_message( \ - "[user] deactivates \the [src]!", \ - SPAN_NOTICE("You deactivate \the [src]."), + "[user] deactivates [src]!", \ + SPAN_NOTICE("You deactivate [src]."), SPAN_CLASS("italics", "You hear a click.")) set_mode(CLAMPED_OFF) @@ -124,7 +125,7 @@ var/datum/powernet/PN = attached.powernet var/drained = 0 if(PN) - set_light(0.5, 0.1, 12) + set_light(12) PN.trigger_warning() // found a powernet, so drain up to max power from it drained = PN.draw_power(drain_rate) diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 28aec714371ac..a1a0513376ab9 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -1,6 +1,7 @@ /obj/item/device/radio/electropack name = "electropack" desc = "Dance my monkeys! DANCE!!!" + icon = 'icons/obj/electropack.dmi' icon_state = "electropack0" item_state = "electropack" frequency = 1449 @@ -18,26 +19,38 @@ return ..() -/obj/item/device/radio/electropack/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/clothing/head/helmet)) - if(!b_stat) - to_chat(user, SPAN_NOTICE("[src] is not ready to be attached!")) - return - if(!user.unEquip(W) || !user.unEquip(src)) - return - var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit( user ) - A.icon = 'icons/obj/assemblies.dmi' - W.forceMove(A) - W.master = A - A.part1 = W +/obj/item/device/radio/electropack/use_tool(obj/item/tool, mob/user, list/click_params) + // Helmet - Attach helmet + if (istype(tool, /obj/item/clothing/head/helmet)) + if (!b_stat) + USE_FEEDBACK_FAILURE("\The [src] is not ready to be attached.") + return TRUE + if (!user.unEquip(tool)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + if (!user.unEquip(src)) + FEEDBACK_UNEQUIP_FAILURE(user, src) + return TRUE + var/obj/item/assembly/shock_kit/shock_kit = new(user) + user.put_in_hands(shock_kit) + tool.forceMove(shock_kit) + tool.master = shock_kit + tool.transfer_fingerprints_to(shock_kit) + shock_kit.part1 = tool + forceMove(shock_kit) + master = shock_kit + shock_kit.part2 = src + transfer_fingerprints_to(shock_kit) + shock_kit.add_fingerprint(user) + user.visible_message( + SPAN_NOTICE("\The [user] attaches \a [src] to \a [tool] to create \a [shock_kit]."), + SPAN_NOTICE("You attach \the [src] to \the [tool] to create \the [shock_kit].") + ) + return TRUE - forceMove(A) - master = A - A.part2 = src + return ..() - user.put_in_hands(A) /obj/item/device/radio/electropack/Topic(href, href_list) //..() @@ -92,7 +105,7 @@ if(M) M.moved_recently = 0 to_chat(M, SPAN_DANGER("You feel a sharp shock!")) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread s.set_up(3, 1, M) s.start() diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 9ad18428fd2eb..45a9a9ef4f0e4 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -2,7 +2,7 @@ /obj/item/device/encryptionkey name = "standard encryption key" desc = "An encryption key for a radio headset. Contains cypherkeys." - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/cypherkeys.dmi' icon_state = "cypherkey" item_state = "" w_class = ITEM_SIZE_TINY @@ -12,8 +12,6 @@ var/syndie = 0 var/list/channels = list() -/obj/item/device/encryptionkey/attackby(obj/item/W as obj, mob/user as mob) - /obj/item/device/encryptionkey/map_preset var/preset_name var/use_common = FALSE diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 7627537b19316..c518671e94d12 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -1,17 +1,18 @@ /obj/item/device/radio/headset name = "radio headset" desc = "An updated, modular intercom that fits over the head. Takes encryption keys." + icon = 'icons/obj/headsets.dmi' var/radio_desc = "" icon_state = "headset" item_state = "headset" matter = list(MATERIAL_ALUMINIUM = 75) - subspace_transmission = 1 + subspace_transmission = TRUE canhear_range = 0 // can't hear headsets from very far away - + on = TRUE slot_flags = SLOT_EARS cell = null power_usage = 0 - var/translate_binary = 0 + var/translate_binary = FALSE var/list/encryption_keys = list() var/max_keys = 2 @@ -19,6 +20,10 @@ var/ks1type = /obj/item/device/encryptionkey var/ks2type = null + sprite_sheets = list( + SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_ears_unathi.dmi' + ) + /obj/item/device/radio/headset/Initialize() . = ..() internal_channels.Cut() @@ -43,8 +48,8 @@ if(distance > 1 || !radio_desc) return - to_chat(user, "The following channels are available:") - to_chat(user, radio_desc) + . += SPAN_NOTICE("The following channels are available:") + . += SPAN_NOTICE("[radio_desc]") /obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel) if (channel == "special") @@ -330,35 +335,39 @@ item_state = "headset" ks1type = /obj/item/device/encryptionkey/specops -/obj/item/device/radio/headset/attackby(obj/item/W as obj, mob/user as mob) -// ..() - user.set_machine(src) - if (!( isScrewdriver(W) || (istype(W, /obj/item/device/encryptionkey/ )))) +/obj/item/device/radio/headset/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!length(encryption_keys)) + balloon_alert(user, "нет ключей шифрования!") return - - if(isScrewdriver(W)) - if(length(encryption_keys)) - for(var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) - secure_radio_connections[ch_name] = null - for(var/obj/ekey in encryption_keys) - ekey.dropInto(user.loc) - encryption_keys -= ekey - - recalculateChannels(1) - to_chat(user, "You pop out the encryption keys in the headset!") - - else - to_chat(user, "This headset doesn't have any encryption keys! How useless...") - - if(istype(W, /obj/item/device/encryptionkey)) - if(length(encryption_keys) >= max_keys) - to_chat(user, "The headset can't hold another key!") - return - if(user.unEquip(W, target = src)) - to_chat(user, SPAN_NOTICE("You put \the [W] into \the [src].")) - encryption_keys += W - recalculateChannels(1) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + for(var/channel_name in channels) + radio_controller.remove_object(src, radiochannels[channel_name]) + secure_radio_connections[channel_name] = null + for(var/obj/key as anything in encryption_keys) + key.dropInto(get_turf(user)) + encryption_keys.Cut() + recalculateChannels(TRUE) + +/obj/item/device/radio/headset/use_tool(obj/item/tool, mob/user, list/click_params) + // Encryption Key - Install key + if (istype(tool, /obj/item/device/encryptionkey)) + if (length(encryption_keys) >= max_keys) + USE_FEEDBACK_FAILURE("[src] can't hold any more encryption keys.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + encryption_keys += tool + recalculateChannels(TRUE) + user.visible_message( + SPAN_NOTICE("[user] inserts [tool] into [src]."), + SPAN_NOTICE("You insert [tool] into [src]."), + range = 2 + ) + return TRUE + . = ..() /obj/item/device/radio/headset/MouseDrop(obj/over_object) var/mob/M = usr diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 0938da4d275ac..68cbf9ad3bdd9 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -15,7 +15,7 @@ ///2 = wired/built, 1 = circuit installed, 0 = frame var/buildstage = 2 var/number = 0 - var/last_tick //used to delay the powercheck + var/area/linked_area intercom_handling = TRUE /obj/item/device/radio/intercom/get_storage_cost() @@ -93,7 +93,7 @@ /obj/item/device/radio/intercom/Initialize(loc, dir, atom/frame) . = ..() - START_PROCESSING(SSobj, src) + find_and_set_linked_area() if (dir) set_dir(dir) @@ -148,10 +148,6 @@ . = ..() internal_channels[num2text(RAID_FREQ)] = list(access_syndicate) -/obj/item/device/radio/intercom/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - /obj/item/device/radio/intercom/attack_ai(mob/user) add_fingerprint(user) if (buildstage == 2) @@ -177,91 +173,111 @@ return canhear_range -/obj/item/device/radio/intercom/attackby(obj/item/W, mob/user) - switch (buildstage) - if (2) - ..() - if (isScrewdriver(W)) - wiresexposed = !wiresexposed - user.visible_message( - - SPAN_NOTICE("\The [user] has [wiresexposed ? "exposed" : "unexposed"] \the [src]'s wiring."), - SPAN_NOTICE("You [wiresexposed ? "expose" : "unexpose"] \the [src]'s wiring.") - - ) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - update_icon() - return - else if (wiresexposed && isWirecutter(W)) - user.visible_message( - - SPAN_WARNING("\The [user] has cut the wires inside \the [src]!"), - SPAN_NOTICE("You have cut the wires inside \the [src].") - - ) - playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1) - new/obj/item/stack/cable_coil(get_turf(src), 5) - b_stat = 0 - buildstage = 1 - update_icon() - return - - if (1) - if (isCoil(W)) - var/obj/item/stack/cable_coil/C = W - if (C.use(5)) - user.visible_message( - - SPAN_NOTICE("\The [user] has added wiring to \the [src]."), - SPAN_NOTICE("You add wiring to \the [src].") - - ) - buildstage = 2 - b_stat = 1 - update_icon() - return - - else - to_chat(user, SPAN_WARNING("You need 5 pieces of cable to wire \the [src].")) - return - - else if (isCrowbar(W)) - to_chat(user, SPAN_NOTICE("You start prying out the circuits from \the [src].")) - - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - if (do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT) && buildstage == 1) - user.visible_message( - - SPAN_NOTICE("\The [user] has pried the circuits out of \the [src]."), - SPAN_NOTICE("You pry the circuits out of \the [src].") - - ) - new /obj/item/intercom_electronics(get_turf(user)) - buildstage = 0 - update_icon() - return - if (0) - if (istype(W, /obj/item/intercom_electronics)) - user.visible_message( - - SPAN_NOTICE("\The [user] has inserted the circuits into \the [src]."), - SPAN_NOTICE("You insert the circuits into \the [src].") - - ) - qdel(W) - buildstage = 1 - update_icon() - return - else if (isWrench(W)) - user.visible_message( - - SPAN_NOTICE("\The [user] has removed the intercom assembly from the wall."), - SPAN_NOTICE("You remove the intercom assembly from the wall.") - ) - new /obj/item/frame/intercom(get_turf(user)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - qdel(src) - return +//TODO: cable act +/obj/item/device/radio/intercom/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(buildstage > 1) + USE_FEEDBACK_FAILURE("[src]'s wiring needs to be removed before you can remove the circuit.") + return + if(buildstage < 1) + USE_FEEDBACK_FAILURE("[src] has no circuit to remove.") + return + user.visible_message( + SPAN_NOTICE("[user] starts removing [src]'s circuit with [tool]."), + SPAN_NOTICE("You start removing [src]'s circuit with [tool].") + ) + if(!tool.use_as_tool(src, user, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || buildstage != 1) + return + var/obj/item/intercom_electronics/circuit = new(get_turf(src)) + buildstage = 0 + update_icon() + user.visible_message( + SPAN_NOTICE("[user] removes [circuit] from [src] with [tool]."), + SPAN_NOTICE("You remove [circuit] from [src] with [tool].") + ) + +/obj/item/device/radio/intercom/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(buildstage < 2) + balloon_alert(user, "нет проводки!") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + wiresexposed = !wiresexposed + b_stat = !b_stat + update_icon() + USE_FEEDBACK_NEW_PANEL_OPEN(user, wiresexposed) + +/obj/item/device/radio/intercom/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + new /obj/item/frame/intercom(get_turf(src)) + user.visible_message( + SPAN_NOTICE("[user] removes [src] from the wall with [tool]."), + SPAN_NOTICE("You remove [src] from the wall with [tool].") + ) + qdel(src) + +/obj/item/device/radio/intercom/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if (buildstage < 2) + USE_FEEDBACK_FAILURE("[src] has no wiring to remove.") + return + if (!wiresexposed) + USE_FEEDBACK_FAILURE("[src]'s wire panel needs to be opened before you can cut the wiring.") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + new /obj/item/stack/cable_coil(get_turf(src), 5) + b_stat = FALSE + buildstage = 1 + update_icon() + user.visible_message( + SPAN_NOTICE("[user] cuts [src]'s wiring with [tool]."), + SPAN_NOTICE("You cut [src]'s wiring with [tool].") + ) + +/obj/item/device/radio/intercom/use_tool(obj/item/tool, mob/user, list/click_params) + // Cable Coil - Install wiring + if (isCoil(tool)) + if (buildstage > 1) + USE_FEEDBACK_FAILURE("[src] is already wired.") + return TRUE + if (buildstage < 1) + USE_FEEDBACK_FAILURE("[src] has no circuitry to wire.") + return TRUE + var/obj/item/stack/cable_coil/cable = tool + if (!cable.use(5)) + USE_FEEDBACK_STACK_NOT_ENOUGH(cable, 5, "to wire [src].") + return TRUE + b_stat = TRUE + buildstage = 2 + update_icon() + user.visible_message( + SPAN_NOTICE("[user] wires [src] with [cable.get_vague_name(TRUE)]."), + SPAN_NOTICE("You wire [src] with [cable.get_exact_name(5)].") + ) + return TRUE + + // Intercom Electronics - Install circuit + if (istype(tool, /obj/item/intercom_electronics)) + if (buildstage > 0) + USE_FEEDBACK_FAILURE("[src] already has a circuit installed.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + buildstage = 1 + update_icon() + user.visible_message( + SPAN_NOTICE("[user] inserts [tool] into [src]."), + SPAN_NOTICE("You insert [tool] into [src].") + ) + qdel(tool) + return TRUE + return ..() + /obj/item/device/radio/intercom/get_mechanics_info() . = ..() @@ -289,25 +305,6 @@ .["Wirecutters"] += "

    Used for deconstruction. See deconstruction steps.

    " .["Wrench"] += "

    Used for deconstruction. See deconstruction steps.

    " -/obj/item/device/radio/intercom/Process() - if (wiresexposed) - on = FALSE - return - if(((world.timeofday - last_tick) > 30) || ((world.timeofday - last_tick) < 0)) - last_tick = world.timeofday - var/old_on = on - - if(!src.loc) - on = FALSE - else - var/area/A = get_area(src) - if(!A) - on = FALSE - else - on = A.powered(EQUIP) // set "on" to the power status - - if (on != old_on) - update_icon() /obj/item/device/radio/intercom/on_update_icon() if (buildstage == 2 && wiresexposed) @@ -316,10 +313,11 @@ icon_state = "intercom-b1" else if (buildstage == 0) icon_state = "intercom-f" - else if (!on) - icon_state = "intercom-p" else - icon_state = "intercom_[broadcasting][listening]" + if(on) + icon_state = "intercom_[broadcasting][listening]" + else + icon_state = "intercom-p" /obj/item/device/radio/intercom/ToggleBroadcast() ..() @@ -329,6 +327,39 @@ ..() update_icon() +/obj/item/device/radio/intercom/proc/find_and_set_linked_area() + var/area/target_area = get_area(src) + if(!target_area.apc) + RegisterSignal(target_area, COMSIG_AREA_APC_ADDED, PROC_REF(on_apc_add)) + return + + on_apc_add(target_area) + +/obj/item/device/radio/intercom/proc/on_apc_add(area/apc_area) + SIGNAL_HANDLER + + UnregisterSignal(apc_area, COMSIG_AREA_APC_ADDED) + linked_area = apc_area + RegisterSignal(apc_area, COMSIG_AREA_APC_REMOVED, PROC_REF(on_apc_removal)) + RegisterSignal(apc_area, COMSIG_AREA_POWER_CHANGE, PROC_REF(change_status)) + +/obj/item/device/radio/intercom/proc/on_apc_removal(area/apc_area) + SIGNAL_HANDLER + + UnregisterSignal(apc_area, COMSIG_AREA_APC_REMOVED) + UnregisterSignal(apc_area, COMSIG_AREA_POWER_CHANGE) + linked_area = null + on = FALSE + update_icon() + + RegisterSignal(apc_area, COMSIG_AREA_APC_ADDED, PROC_REF(on_apc_add)) + +/obj/item/device/radio/intercom/proc/change_status() + SIGNAL_HANDLER + + on = linked_area.powered(EQUIP) + update_icon() + /obj/item/device/radio/intercom/broadcasting broadcasting = 1 diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 713559f38ea22..92d45f233cd02 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -1,22 +1,23 @@ /obj/item/device/radio - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/machines/radio.dmi' name = "shortwave radio" suffix = "\[3\]" icon_state = "walkietalkie" item_state = "walkietalkie" - var/on = 1 // 0 for off + var/on = FALSE var/last_transmission var/frequency = PUB_FREQ //common chat var/default_frequency var/traitor_frequency = 0 //tune to frequency to unlock traitor supplies var/canhear_range = 3 // the range which mobs can hear this radio from var/datum/wires/radio/wires = null + /// whether or not it is modifiable/attachable var/b_stat = 0 - var/broadcasting = 0 - var/listening = 1 + var/broadcasting = FALSE + var/listening = TRUE var/list/channels = list() //see communications.dm for full list. First channel is a "default" for :h - var/subspace_transmission = 0 + var/subspace_transmission = FALSE var/syndie = 0//Holder to see if it's a syndicate encrypted radio var/intercept = 0 //can intercept other channels obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -39,10 +40,17 @@ var/intercom_handling = FALSE + /obj/item/device/radio/hailing name = "shortwave radio (Hailing)" frequency = HAIL_FREQ + +/obj/item/device/radio/infinite + on = TRUE + power_usage = 0 + + /obj/item/device/radio/proc/set_frequency(new_frequency) radio_controller.remove_object(src, frequency) frequency = new_frequency @@ -53,7 +61,6 @@ wires = new(src) if(ispath(cell)) cell = new cell(src) - on = FALSE // start powered off internal_channels = GLOB.using_map.default_internal_channels() GLOB.listening_objects += src @@ -76,11 +83,9 @@ if(!has_cell.checked_use(power_usage * CELLRATE)) // Use power and display if we run out. on = FALSE STOP_PROCESSING(SSobj, src) - visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] [src] lets out a quiet click as it powers down."), SPAN_WARNING("You hear \a [src] let out a quiet click.")) + visible_message(SPAN_WARNING("[icon2html(src, viewers(src))] [src] lets out a quiet click as it powers down."), SPAN_WARNING("You hear [src] let out a quiet click.")) return FALSE - - /obj/item/device/radio/Destroy() QDEL_NULL(wires) GLOB.listening_objects -= src @@ -109,14 +114,15 @@ /obj/item/device/radio/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/nanoui/master_ui = null, datum/topic_state/state = GLOB.default_state) var/data[0] - data["power"] = on + if (power_usage > 0) + data["power"] = on data["mic_status"] = broadcasting data["speaker"] = listening data["freq"] = format_frequency(frequency) data["default_freq"] = format_frequency(default_frequency) data["rawfreq"] = num2text(frequency) var/obj/item/cell/has_cell = get_cell() - if(has_cell) + if(has_cell && power_usage > 0) var/charge = round(has_cell.percent()) data["charge"] = charge ? "[charge]%" : "NONE" data["mic_cut"] = (wires.IsIndexCut(WIRE_TRANSMIT) || wires.IsIndexCut(WIRE_SIGNAL)) @@ -273,14 +279,14 @@ if(cell && b_stat) var/mob/user = usr user.put_in_hands(cell) - to_chat(user, SPAN_NOTICE("You remove [cell] from \the [src].")) + to_chat(user, SPAN_NOTICE("You remove [cell] from [src].")) cell = null return TRUE if(.) SSnano.update_uis(src) -/obj/item/device/radio/proc/autosay(message, from, channel) //BS12 EDIT +/obj/item/device/radio/proc/autosay(message, from, channel, zlevel) var/datum/radio_frequency/connection = null if(channel && channels && length(channels) > 0) if (channel == "department") @@ -291,6 +297,8 @@ channel = null if (!istype(connection)) return + if(zlevel) + z = zlevel var/mob/living/silicon/ai/A = new /mob/living/silicon/ai(src, null, null, 1) A.fully_replace_character_name(from) talk_into(A, message, channel,"states") @@ -314,22 +322,49 @@ return null /obj/item/device/radio/talk_into(mob/living/M, message, channel, verb = "says", datum/language/speaking = null) - if(!on) return 0 // the device has to be on + // the device has to be on + if (!on) + return FALSE // Fix for permacell radios, but kinda eh about actually fixing them. - if(!M || !message) return 0 + if (!M || !message) + return FALSE - if(speaking && (speaking.flags & (NONVERBAL|SIGNLANG))) return 0 + if (speaking && (speaking.flags & (NONVERBAL|SIGNLANG))) + return FALSE if (!broadcasting) + var/list/headset_z_group = GetConnectedZlevels(get_z(src)) + //needs to account for turfs + var/turf/self_turf = get_turf(src) + if (!self_turf) + return FALSE + var/self_x = self_turf.x + var/self_y = self_turf.y + for (var/obj/item/device/radio_jammer/jammer as anything in GLOB.radio_jammers) + var/turf/jammer_turf = get_turf(jammer) + if (!jammer_turf) + continue + var/dx = self_x - jammer_turf.x + var/dy = self_y - jammer_turf.y + if (dx*dx + dy*dy <= jammer.square_radius && (jammer_turf.z in headset_z_group)) + to_chat(M,SPAN_WARNING("Instead of the familiar radio crackle, \the [src] emits a faint buzzing sound.")) + playsound(loc, 'sound/effects/zzzt.ogg', 20, 0, -1) + return FALSE + // Sedation chemical effect should prevent radio use (Chloral and Soporific) var/mob/living/carbon/C = M - if ((istype(C)) && (C.chem_effects[CE_SEDATE] || C.incapacitated(INCAPACITATION_DISRUPTED))) - to_chat(M, SPAN_WARNING("You're unable to reach \the [src].")) - return 0 + if (istype(C)) + if ((C.chem_effects[CE_SEDATE] || C.incapacitated(INCAPACITATION_UNRESISTING))) + to_chat(M, SPAN_WARNING("You're unable to reach [src].")) + return 0 + + if (C.chem_effects[CE_VOICELOSS]) + to_chat(M, SPAN_WARNING("Your voice is too quiet for [src] to pickup!")) + return FALSE - if((istype(C)) && C.radio_interrupt_cooldown > world.time) - to_chat(M, SPAN_WARNING("You're disrupted as you reach for \the [src].")) - return 0 + if (C.radio_interrupt_cooldown > world.time) + to_chat(M, SPAN_WARNING("You're disrupted as you reach for [src].")) + return 0 if(istype(M)) M.trigger_aiming(TARGET_CAN_RADIO) @@ -412,7 +447,7 @@ - /* ###### Radio headsets can only broadcast through subspace ###### */ +/* ###### Radio headsets can only broadcast through subspace ###### */ if(subspace_transmission) // First, we want to generate a new radio signal var/datum/signal/signal = new @@ -472,7 +507,7 @@ return R.talk_into(M, message, channel, verb, speaking) return FALSE - /* ###### Intercoms and station-bounced radios ###### */ +/* ###### Intercoms and station-bounced radios ###### */ var/filter_type = 2 @@ -539,7 +574,6 @@ /obj/item/device/radio/hear_talk(mob/M as mob, msg, verb = "says", datum/language/speaking = null) - if (broadcasting) if(get_dist(src, M) <= canhear_range) talk_into(M, msg,null,verb,speaking) @@ -590,27 +624,43 @@ . = ..() if (distance <= 1 || loc == user) if (b_stat) - to_chat(user, SPAN_NOTICE("\The [src] can be attached and modified!")) + . += SPAN_NOTICE("[src] can be attached and modified!") else - to_chat(user, SPAN_NOTICE("\The [src] can not be modified or attached!")) + . += SPAN_NOTICE("[src] can not be modified or attached!") if (power_usage && cell) - to_chat(user, SPAN_NOTICE("\The [src] charge meter reads [round(cell.percent(), 0.1)]%.")) + . += SPAN_NOTICE("[src] charge meter reads [round(cell.percent(), 0.1)]%.") -/obj/item/device/radio/attackby(obj/item/W as obj, mob/user as mob) - ..() - user.set_machine(src) - if(isScrewdriver(W)) - b_stat = !b_stat - if (b_stat) - user.show_message(SPAN_NOTICE("\The [src] can now be attached and modified!")) - else - user.show_message(SPAN_NOTICE("\The [src] can no longer be modified or attached!")) - updateDialog() - return - if(!cell && power_usage && istype(W, /obj/item/cell/device) && user.unEquip(W, target = src)) - to_chat(user, SPAN_NOTICE("You put [W] in \the [src].")) - cell = W +/obj/item/device/radio/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return + b_stat = !b_stat + user.visible_message( + SPAN_NOTICE("[user] adjusts [src] with [tool]."), + SPAN_NOTICE("You adjust [src] with [tool]. It can [b_stat ? "now" : "no longer"] be attached or modified.") + ) + +/obj/item/device/radio/use_tool(obj/item/tool, mob/user, list/click_params) + // Device Cell - Install power cell + if (istype(tool, /obj/item/cell/device)) + if (!power_usage) + USE_FEEDBACK_FAILURE("[src] doesn't need a power cell.") + return TRUE + if (cell) + USE_FEEDBACK_FAILURE("[src] already has [cell] installed.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + cell = tool + user.visible_message( + SPAN_NOTICE("[user] installs [tool] into [src]."), + SPAN_NOTICE("You install [tool] into [src].") + ) + return TRUE + + return ..() + /obj/item/device/radio/emp_act(severity) broadcasting = prob(50) @@ -658,8 +708,7 @@ . = ..() return INITIALIZE_HINT_LATELOAD -/obj/item/device/radio/born/LateInitialize() - . = ..() +/obj/item/device/radio/borg/LateInitialize(mapload) recalculateChannels() /obj/item/device/radio/borg/Destroy() @@ -677,38 +726,43 @@ var/datum/robot_component/C = R.components["radio"] R.cell_use_power(C.active_usage) -/obj/item/device/radio/borg/attackby(obj/item/W as obj, mob/user as mob) -// ..() - user.set_machine(src) - if (!( isScrewdriver(W) || (istype(W, /obj/item/device/encryptionkey/ )))) +/obj/item/device/radio/borg/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!keyslot) + balloon_alert(user, "нет ключей шифрования!") return - - if(isScrewdriver(W)) - if(keyslot) - for(var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) - secure_radio_connections[ch_name] = null - - if(keyslot) - keyslot.dropInto(user.loc) - - recalculateChannels() - to_chat(user, "You pop out the encryption key in the radio!") - - else - to_chat(user, "This radio doesn't have any encryption keys!") - - if(istype(W, /obj/item/device/encryptionkey)) - if(keyslot) - to_chat(user, "The radio can't hold another key!") - return - - if(!keyslot) - if(!user.unEquip(W, src)) - return - keyslot = W - + for(var/channel_name in channels) + radio_controller.remove_object(src, radiochannels[channel_name]) + secure_radio_connections[channel_name] = null + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.put_in_hands(keyslot) + recalculateChannels() + user.visible_message( + SPAN_NOTICE("[user] pops [keyslot] out of [src] with [tool]."), + SPAN_NOTICE("You pop [keyslot] out of [src] with [tool]."), + range = 2 + ) + keyslot = null + +/obj/item/device/radio/borg/use_tool(obj/item/tool, mob/user, list/click_params) + // Encryption Key - Insert key + if (istype(tool, /obj/item/device/encryptionkey)) + if (keyslot) + USE_FEEDBACK_FAILURE("[src] already has [keyslot] installed.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + keyslot = tool recalculateChannels() + user.visible_message( + SPAN_NOTICE("[user] slots [tool] into [src]."), + SPAN_NOTICE("You slot [tool] into [src]."), + range = 2 + ) + return TRUE + return ..() /obj/item/device/radio/borg/recalculateChannels() src.channels = list() @@ -845,14 +899,15 @@ listening = 0 /obj/item/device/radio/announcer - invisibility = 101 + invisibility = INVISIBILITY_ABSTRACT listening = 0 canhear_range = 0 anchored = TRUE simulated = FALSE power_usage = 0 - channels=list("Engineering" = 1, "Security" = 1, "Medical" = 1, "Command" = 1, "Common" = 1, "Science" = 1, "Supply" = 1, "Service" = 1, "Exploration" = 1) + channels=list("Engineering" = 1, "Security" = 1, "Medical" = 1, "Command" = 1, "Common" = 1, "Science" = 1, "Supply" = 1, "Service" = 1, "Exploration" = 1, "Response Team" = 1) cell = null + on = TRUE /obj/item/device/radio/announcer/Destroy() SHOULD_CALL_PARENT(FALSE) @@ -868,7 +923,7 @@ /obj/item/device/radio/phone broadcasting = 0 - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/machines/radio.dmi' icon_state = "red_phone" randpixel = 0 listening = 1 diff --git a/code/game/objects/items/devices/radio_jammer.dm b/code/game/objects/items/devices/radio_jammer.dm new file mode 100644 index 0000000000000..09f0db9ba9ab8 --- /dev/null +++ b/code/game/objects/items/devices/radio_jammer.dm @@ -0,0 +1,181 @@ +GLOBAL_LIST_EMPTY(radio_jammers) +//adjusted to last a while so it can last conversations +#define JAMMER_POWER_CONSUMPTION(tick_delay) ((max(0.75, range)**2 * tick_delay) / 30) + +/obj/item/device/radio_jammer + name = "small remote" + desc = "A small remote control covered in a number of lights, with several antennae extending from the top." + icon = 'icons/obj/radio_jammer.dmi' + icon_state = "jammer" + w_class = ITEM_SIZE_SMALL + var/is_active = FALSE + var/range = 5 + var/square_radius = 25 + var/code = 23 + var/frequency = 1413 + var/obj/item/cell/bcell = /obj/item/cell/high + +/obj/item/device/radio_jammer/Initialize() + . = ..() + if(ispath(bcell)) + bcell = new bcell(src) + GLOB.listening_objects += src + set_frequency(frequency) + +/obj/item/device/radio_jammer/Destroy() + GLOB.radio_jammers -= src + GLOB.listening_objects -= src + qdel(bcell) + return ..() + +/obj/item/device/radio_jammer/Process(wait) + var/cost = JAMMER_POWER_CONSUMPTION(wait) + if (!bcell?.use(cost)) + STOP_PROCESSING(SSobj, src) + GLOB.radio_jammers -=src + is_active = FALSE + +/obj/item/device/radio_jammer/attack_self(mob/living/user) + ui_interact(user) + +/obj/item/device/radio_jammer/get_cell() + return bcell + +/obj/item/device/radio_jammer/emp_act(severity) + ..() + if(bcell) + bcell.emp_act(severity) + +/obj/item/device/radio_jammer/proc/toggle(mob/user) + if(is_active) + STOP_PROCESSING(SSobj, src) + to_chat(user,SPAN_WARNING("You flick a switch on [src], deactivating it.")) + is_active = FALSE + GLOB.radio_jammers -= src + update_icon() + else + START_PROCESSING(SSobj, src) + to_chat(user,SPAN_WARNING("You flick a switch on [src], activating it.")) + is_active = TRUE + GLOB.radio_jammers += src + update_icon() + +/obj/item/device/radio_jammer/on_update_icon() + ClearOverlays() + if(bcell) + var/percent = bcell.percent() + switch(percent) + if(0 to 25) + AddOverlays("quarter") + if(25 to 50) + AddOverlays("half") + if(50 to 99) + AddOverlays("full") + else + AddOverlays("four_quarters") + + if(is_active) + AddOverlays("on") + else + AddOverlays("off") + +/obj/item/device/radio_jammer/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + radio_controller.add_object(src, frequency, RADIO_CHAT) + +/obj/item/device/radio_jammer/receive_signal(datum/signal/signal) + if(signal?.encryption == code) + toggle() + +/obj/item/device/radio_jammer/OnTopic(mob/user, list/href_list, state) + if (href_list["enable_jammer"]) + toggle() + return TOPIC_REFRESH + if (href_list["disable_jammer"]) + toggle() + return TOPIC_REFRESH + if(href_list["increase_range"]) + range = min(range + 1, 10) + square_radius = range ** 2 + return TOPIC_REFRESH + if(href_list["decrease_range"]) + range = max(range - 1, 0) + square_radius = range ** 2 + return TOPIC_REFRESH + if(href_list["set_code"]) + var/adj = text2num(href_list["code"]) + if(!adj) + code = input("Set radio activation code","Radio activation") as num + if (QDELETED(src) || CanUseTopic(user, state, href_list) == STATUS_INTERACTIVE) + return TOPIC_HANDLED + else + code += adj + code = clamp(code,1,100) + return TOPIC_REFRESH + if (href_list["set_frequency"]) + var/adj = text2num(href_list["frequency"]) + if(!adj) + var/temp = input("Set a four digit radio frequency without decimals","Radio activation") as num + set_frequency(sanitize_frequency(temp, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)) + if (QDELETED(src) || CanUseTopic(user, state, href_list) == STATUS_INTERACTIVE) + return TOPIC_HANDLED + return TOPIC_REFRESH + +/obj/item/device/radio_jammer/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) + var/list/data = list( + "active" = is_active, + "current_charge" = bcell ? round(bcell.charge, 1) : 0, + "max_charge" = bcell ? bcell.maxcharge : 0, + "range" = range, + "max_range" = 10, + "frequency" = format_frequency(frequency), + "code" = code, + "total_cost" = "[ceil(JAMMER_POWER_CONSUMPTION(10))]" + ) + ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "radio_jammer.tmpl", "Portable Radio Jammer", 300, 640) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(TRUE) + +/obj/item/device/radio_jammer/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!bcell) + USE_FEEDBACK_FAILURE("[src] has no cell to remove.") + return + if(!use_as_tool(src, user, volume = 50, do_flags = DO_PUBLIC_UNIQUE)) + return + if(is_active) + STOP_PROCESSING(SSobj, src) + is_active = FALSE + GLOB.radio_jammers -= src + user.put_in_hands(bcell) + user.visible_message( + SPAN_NOTICE("[user] removes [bcell] from [src] with [tool]."), + SPAN_NOTICE("You remove [bcell] from [src] with [tool].") + ) + bcell = null + update_icon() + +/obj/item/device/radio_jammer/use_tool(obj/item/tool, mob/living/user, list/click_params) + if (istype(tool, /obj/item/cell)) + if (bcell) + USE_FEEDBACK_FAILURE("[src] already has [bcell] installed.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + bcell = tool + user.visible_message( + SPAN_NOTICE("[user] installs [tool] into [src]."), + SPAN_NOTICE("you install [tool] into [src].") + ) + update_icon() + return TRUE + + return ..() + + +#undef JAMMER_POWER_CONSUMPTION diff --git a/code/game/objects/items/devices/scanners/_scanner.dm b/code/game/objects/items/devices/scanners/_scanner.dm index 3185132e4b613..8c9de353bf7c1 100644 --- a/code/game/objects/items/devices/scanners/_scanner.dm +++ b/code/game/objects/items/devices/scanners/_scanner.dm @@ -36,27 +36,27 @@ return return TRUE -/obj/item/device/scanner/afterattack(atom/A, mob/user, proximity) - if(!proximity) - return +/obj/item/device/scanner/use_after(atom/target, mob/living/user, click_parameters) if(!can_use(user)) return - if(is_valid_scan_target(A)) + if(is_valid_scan_target(target)) user.visible_message( - SPAN_NOTICE("\The [user] runs \the [src] over \the [A]."), - SPAN_NOTICE("You run \the [src] over \the [A]."), + SPAN_NOTICE("\The [user] runs \the [src] over \the [target]."), + SPAN_NOTICE("You run \the [src] over \the [target]."), range = 2 ) if(scan_sound) playsound(src, scan_sound, 30) - if(use_delay && !do_after(user, use_delay, A, DO_PUBLIC_UNIQUE)) - to_chat(user, "You stop scanning \the [A] with \the [src].") - return - scan(A, user) + if(use_delay && !do_after(user, use_delay, target, DO_PUBLIC_UNIQUE)) + to_chat(user, "You stop scanning \the [target] with \the [src].") + return TRUE + scan(target, user) if(!scan_title) - scan_title = "[capitalize(name)] scan - [A]" + scan_title = "[capitalize(name)] scan - [target]" + return TRUE else - to_chat(user, "You cannot get any results from \the [A] with \the [src].") + to_chat(user, "You cannot get any results from \the [target] with \the [src].") + return TRUE /obj/item/device/scanner/proc/is_valid_scan_target(atom/O) return FALSE diff --git a/code/game/objects/items/devices/scanners/gas.dm b/code/game/objects/items/devices/scanners/gas.dm index 87fba86a6c4bc..fb3f1ef693c38 100644 --- a/code/game/objects/items/devices/scanners/gas.dm +++ b/code/game/objects/items/devices/scanners/gas.dm @@ -1,7 +1,7 @@ /obj/item/device/scanner/gas name = "gas analyzer" desc = "A hand-held environmental scanner which reports current gas levels. Has a button to cycle modes." - icon = 'icons/obj/atmos_analyzer.dmi' + icon = 'icons/obj/tools/atmos_analyzer.dmi' icon_state = "atmos" item_state = "analyzer" diff --git a/code/game/objects/items/devices/scanners/health.dm b/code/game/objects/items/devices/scanners/health.dm index ad129dcfd5c79..4a648dd9b0852 100644 --- a/code/game/objects/items/devices/scanners/health.dm +++ b/code/game/objects/items/devices/scanners/health.dm @@ -1,7 +1,7 @@ /obj/item/device/scanner/health name = "health analyzer" desc = "A hand-held body scanner able to distinguish vital signs of the subject." - icon = 'icons/obj/health_analyzer.dmi' + icon = 'icons/obj/tools/health_analyzer.dmi' icon_state = "health" item_state = "analyzer" item_flags = ITEM_FLAG_NO_BLUDGEON @@ -300,15 +300,15 @@ var/degree switch(damage_ratio) - if(0 to 0.1) + if(0 to 10) degree = "minor" - if(0.1 to 0.25) + if(10 to 25) degree = "moderate" - if(0.25 to 0.5) + if(25 to 50) degree = "significant" - if(0.5 to 0.75) + if(50 to 75) degree = "severe" - if(0.75 to 1) + if(75 to 99) degree = "extreme" else if(can_heal_overkill) diff --git a/code/game/objects/items/devices/scanners/mass_spectrometer.dm b/code/game/objects/items/devices/scanners/mass_spectrometer.dm index 24fbd71321c60..0d4afd3e19b28 100644 --- a/code/game/objects/items/devices/scanners/mass_spectrometer.dm +++ b/code/game/objects/items/devices/scanners/mass_spectrometer.dm @@ -1,7 +1,7 @@ /obj/item/device/scanner/spectrometer name = "mass spectrometer" desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample or analyzes unusual chemicals." - icon = 'icons/obj/spectrometer.dmi' + icon = 'icons/obj/tools/spectrometer.dmi' icon_state = "spectrometer" item_state = "analyzer" @@ -82,7 +82,7 @@ /obj/item/device/scanner/spectrometer/adv name = "advanced mass spectrometer" - icon = 'icons/obj/spectrometer_advanced.dmi' + icon = 'icons/obj/tools/spectrometer_advanced.dmi' icon_state = "adv_spectrometer" details = 1 origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2) diff --git a/code/game/objects/items/devices/scanners/mining.dm b/code/game/objects/items/devices/scanners/mining.dm index 4a0fd77a69e7c..207c2ea8f3fea 100644 --- a/code/game/objects/items/devices/scanners/mining.dm +++ b/code/game/objects/items/devices/scanners/mining.dm @@ -7,7 +7,7 @@ /obj/item/device/scanner/mining name = "ore detector" desc = "A complex device used to locate ore deep underground." - icon = 'icons/obj/ore_analyzer.dmi' + icon = 'icons/obj/tools/ore_analyzer.dmi' icon_state = "ore" origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) use_delay = 50 @@ -18,7 +18,7 @@ /obj/item/device/scanner/mining/examine(mob/user) . = ..() - to_chat(user,"A tiny indicator on the [src] shows it holds [survey_data] good explorer points.") + . += SPAN_NOTICE("A tiny indicator on the [src] shows it holds [survey_data] good explorer points.") /obj/item/device/scanner/mining/is_valid_scan_target(turf/simulated/T) return istype(T) @@ -63,13 +63,13 @@ /obj/item/disk/survey name = "survey data disk" - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/datadisks.dmi' icon_state = "nucleardisk" var/data /obj/item/disk/survey/examine(mob/user) . = ..() - to_chat(user,"A tiny indicator on the [src] shows it holds [data] good explorer points.") + . += SPAN_NOTICE("A tiny indicator on the [src] shows it holds [data] good explorer points.") /obj/item/disk/survey/Value() if(data < 10000) @@ -80,6 +80,7 @@ //Returns list of two elements, 1 is text output, 2 is amoutn of GEP data /proc/mineral_scan_results(turf/simulated/target) + RETURN_TYPE(/list) var/list/metals = list( ORE_SURFACE = 0, ORE_PRECIOUS = 0, @@ -88,7 +89,7 @@ ) var/new_data = 0 - for(var/turf/simulated/T in range(2, target)) + for(var/turf/simulated/T in RANGE_TURFS(target, 2)) if(!T.has_resources) continue diff --git a/code/game/objects/items/devices/scanners/plant.dm b/code/game/objects/items/devices/scanners/plant.dm index 560ea16c6a381..d94344609a3e1 100644 --- a/code/game/objects/items/devices/scanners/plant.dm +++ b/code/game/objects/items/devices/scanners/plant.dm @@ -2,7 +2,7 @@ /obj/item/device/scanner/plant name = "plant analyzer" desc = "A hand-held botanical scanner used to analyze plants." - icon = 'icons/obj/plant_analyzer.dmi' + icon = 'icons/obj/tools/plant_analyzer.dmi' icon_state = "hydro" item_state = "analyzer" scan_sound = 'sound/effects/fastbeep.ogg' @@ -46,7 +46,7 @@ if(grown_seed.mysterious && !grown_seed.scanned) grown_seed.scanned = TRUE var/area/map = locate(/area/overmap) - for(var/obj/effect/overmap/visitable/sector/exoplanet/P in map) + for(var/obj/overmap/visitable/sector/exoplanet/P in map) if(grown_seed in P.seeds) GLOB.stat_flora_scanned += 1 break diff --git a/code/game/objects/items/devices/scanners/price.dm b/code/game/objects/items/devices/scanners/price.dm index 39f781234f7f9..d5207f6ac0e4b 100644 --- a/code/game/objects/items/devices/scanners/price.dm +++ b/code/game/objects/items/devices/scanners/price.dm @@ -1,7 +1,7 @@ /obj/item/device/scanner/price name = "price scanner" desc = "Using an up-to-date database of various costs and prices, this device estimates the market price of an item up to 0.001% accuracy." - icon = 'icons/obj/price_scanner.dmi' + icon = 'icons/obj/tools/price_scanner.dmi' icon_state = "price_scanner" origin_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 4) scan_sound = 'sound/effects/checkout.ogg' diff --git a/code/game/objects/items/devices/scanners/reagents.dm b/code/game/objects/items/devices/scanners/reagents.dm index 56986e0707713..d771068b64f8c 100644 --- a/code/game/objects/items/devices/scanners/reagents.dm +++ b/code/game/objects/items/devices/scanners/reagents.dm @@ -1,7 +1,7 @@ /obj/item/device/scanner/reagent name = "reagent scanner" desc = "A hand-held reagent scanner which identifies chemical agents." - icon = 'icons/obj/spectrometer.dmi' + icon = 'icons/obj/tools/spectrometer.dmi' icon_state = "spectrometer" item_state = "analyzer" @@ -18,6 +18,7 @@ user.show_message(SPAN_NOTICE(scan_data)) /proc/reagent_scan_results(obj/O, details = 0) + RETURN_TYPE(/list) if(isnull(O.reagents)) return list("No significant chemical agents found in [O].") if(length(O.reagents.reagent_list) == 0) @@ -29,7 +30,7 @@ /obj/item/device/scanner/reagent/adv name = "advanced reagent scanner" - icon = 'icons/obj/spectrometer_advanced.dmi' + icon = 'icons/obj/tools/spectrometer_advanced.dmi' icon_state = "adv_spectrometer" details = 1 origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2) diff --git a/code/game/objects/items/devices/scanners/xenobio.dm b/code/game/objects/items/devices/scanners/xenobio.dm index c2b2720ee6d13..3c431ce8e9155 100644 --- a/code/game/objects/items/devices/scanners/xenobio.dm +++ b/code/game/objects/items/devices/scanners/xenobio.dm @@ -1,7 +1,7 @@ /obj/item/device/scanner/xenobio name = "xenolife scanner" desc = "Multipurpose organic life scanner. With spectral breath analyzer you can find out what snacks Ian had! Or what gasses alien life breathes." - icon = 'icons/obj/xenolife_scanner.dmi' + icon = 'icons/obj/tools/xenolife_scanner.dmi' icon_state = "xenobio" item_state = "analyzer" scan_sound = 'sound/effects/scanbeep.ogg' @@ -17,8 +17,8 @@ /obj/item/device/scanner/xenobio/is_valid_scan_target(atom/O) if(is_type_in_list(O, valid_targets)) return TRUE - if(istype(O, /obj/structure/stasis_cage)) - var/obj/structure/stasis_cage/cagie = O + if(istype(O, /obj/machinery/stasis_cage)) + var/obj/machinery/stasis_cage/cagie = O return !!cagie.contained return FALSE @@ -28,6 +28,7 @@ user.show_message(SPAN_NOTICE(scan_data)) /proc/list_gases(gases) + RETURN_TYPE(/list) . = list() for(var/g in gases) . += "[gas_data.name[g]] ([gases[g]]%)" @@ -35,8 +36,8 @@ /proc/xenobio_scan_results(mob/target) . = list() - if(istype(target, /obj/structure/stasis_cage)) - var/obj/structure/stasis_cage/cagie = target + if(istype(target, /obj/machinery/stasis_cage)) + var/obj/machinery/stasis_cage/cagie = target target = cagie.contained if(istype(target, /mob/living/carbon/human)) var/mob/living/carbon/human/H = target @@ -60,7 +61,7 @@ if(A.minbodytemp && A.maxbodytemp) . += "Temperature comfort zone:\t[A.minbodytemp] K to [A.maxbodytemp] K" var/area/map = locate(/area/overmap) - for(var/obj/effect/overmap/visitable/sector/exoplanet/P in map) + for(var/obj/overmap/visitable/sector/exoplanet/P in map) if((A in P.animals) || is_type_in_list(A, P.repopulate_types)) GLOB.stat_fauna_scanned |= "[P.name]-[A.type]" . += "New xenofauna species discovered!" diff --git a/code/game/objects/items/devices/slide_projector.dm b/code/game/objects/items/devices/slide_projector.dm index a8ae4f37bdb23..bb72c65ce7022 100644 --- a/code/game/objects/items/devices/slide_projector.dm +++ b/code/game/objects/items/devices/slide_projector.dm @@ -7,12 +7,12 @@ max_storage_space = BASE_STORAGE_CAPACITY(ITEM_SIZE_SMALL) use_sound = 'sound/effects/storage/toolbox.ogg' var/static/list/projection_types = list( - /obj/item/photo = /obj/effect/projection/photo, - /obj/item/paper = /obj/effect/projection/paper, - /obj/item = /obj/effect/projection + /obj/item/photo = /obj/projection/photo, + /obj/item/paper = /obj/projection/paper, + /obj/item = /obj/projection ) var/obj/item/current_slide - var/obj/effect/projection/projection + var/obj/projection/projection /obj/item/storage/slide_projector/Destroy() current_slide = null @@ -75,7 +75,7 @@ /obj/item/storage/slide_projector/proc/stop_projecting() if(projection) QDEL_NULL(projection) - GLOB.moved_event.unregister(src, src, .proc/check_projections) + GLOB.moved_event.unregister(src, src, PROC_REF(check_projections)) set_light(0) update_icon() @@ -92,8 +92,8 @@ break projection = new projection_type(target) projection.set_source(current_slide) - GLOB.moved_event.register(src, src, .proc/check_projections) - set_light(0.1, 0.1, 1, 2, COLOR_WHITE) //Bit of light + GLOB.moved_event.register(src, src, PROC_REF(check_projections)) + set_light(1, 0.1, COLOR_WHITE) //Bit of light update_icon() /obj/item/storage/slide_projector/attack_self(mob/user) @@ -142,7 +142,7 @@ if(. == TOPIC_REFRESH) interact(user) -/obj/effect/projection +/obj/projection name = "projected slide" icon = 'icons/effects/effects.dmi' icon_state = "white" @@ -153,20 +153,20 @@ alpha = 100 var/weakref/source -/obj/effect/projection/Initialize() +/obj/projection/Initialize() . = ..() - set_light(0.1, 0.1, 1, 2, COLOR_WHITE) //Makes turning off the lights not invalidate projection + set_light(1, 0.1, COLOR_WHITE) //Makes turning off the lights not invalidate projection -/obj/effect/projection/on_update_icon() +/obj/projection/on_update_icon() filters = filter(type="drop_shadow", color = COLOR_WHITE, size = 4, offset = 1,x = 0, y = 0) project_icon() -/obj/effect/projection/proc/project_icon() +/obj/projection/proc/project_icon() var/obj/item/I = source.resolve() if(!istype(I)) qdel(src) return - overlays.Cut() + ClearOverlays() var/mutable_appearance/MA = new(I) MA.plane = FLOAT_PLANE MA.layer = FLOAT_LAYER @@ -174,25 +174,25 @@ MA.alpha = 170 MA.pixel_x = 0 MA.pixel_y = 0 - overlays |= MA + AddOverlays(MA) -/obj/effect/projection/proc/set_source(obj/item/I) +/obj/projection/proc/set_source(obj/item/I) source = weakref(I) desc = "It's currently showing \the [I]." update_icon() -/obj/effect/projection/examine(mob/user, distance) +/obj/projection/examine(mob/user, distance) . = ..() var/obj/item/slide = source.resolve() if(!istype(slide)) qdel(src) return - return slide.examine(user, 1) + . += slide.examine(user, 0, FALSE) -/obj/effect/projection/photo +/obj/projection/photo alpha = 170 -/obj/effect/projection/photo/project_icon() +/obj/projection/photo/project_icon() var/obj/item/photo/slide = source.resolve() if(!istype(slide)) qdel(src) @@ -202,14 +202,14 @@ pixel_x = -32 * round(slide.photo_size/2) pixel_y = -32 * round(slide.photo_size/2) -/obj/effect/projection/paper +/obj/projection/paper alpha = 140 -/obj/effect/projection/paper/project_icon() +/obj/projection/paper/project_icon() var/obj/item/paper/P = source.resolve() if(!istype(P)) qdel(src) return - overlays.Cut() + ClearOverlays() if(P.info) icon_state = "text[rand(1,3)]" diff --git a/code/game/objects/items/devices/spy_bug.dm b/code/game/objects/items/devices/spy_bug.dm index 849c7feee831b..1819151893c62 100644 --- a/code/game/objects/items/devices/spy_bug.dm +++ b/code/game/objects/items/devices/spy_bug.dm @@ -34,18 +34,22 @@ /obj/item/device/spy_bug/examine(mob/user, distance) . = ..() if(distance <= 0) - to_chat(user, "It's a tiny camera, microphone, and transmission device in a happy union.") - to_chat(user, "Needs to be both configured and brought in contact with monitor device to be fully functional.") + . += SPAN_NOTICE("It's a tiny camera, microphone, and transmission device in a happy union.") + . += SPAN_NOTICE("Needs to be both configured and brought in contact with monitor device to be fully functional.") /obj/item/device/spy_bug/attack_self(mob/user) radio.attack_self(user) -/obj/item/device/spy_bug/attackby(obj/W as obj, mob/living/user as mob) - if(istype(W, /obj/item/device/spy_monitor)) - var/obj/item/device/spy_monitor/SM = W - SM.pair(src, user) - else - ..() + +/obj/item/device/spy_bug/use_tool(obj/item/tool, mob/user, list/click_params) + // Spy Monitor - Pair device + if (istype(tool, /obj/item/device/spy_monitor)) + var/obj/item/device/spy_monitor/spy_monitor = tool + spy_monitor.pair(src, user) + return TRUE + + return ..() + /obj/item/device/spy_bug/hear_talk(mob/M, msg, verb, datum/language/speaking) radio.hear_talk(M, msg, speaking) @@ -78,7 +82,7 @@ /obj/item/device/spy_monitor/examine(mob/user, distance) . = ..() if(distance <= 1) - to_chat(user, "The time '12:00' is blinking in the corner of the screen and \the [src] looks very cheaply made.") + . += SPAN_NOTICE("The time '12:00' is blinking in the corner of the screen and \the [src] looks very cheaply made.") /obj/item/device/spy_monitor/attack_self(mob/user) if(operating) @@ -87,11 +91,15 @@ radio.attack_self(user) view_cameras(user) -/obj/item/device/spy_monitor/attackby(obj/W as obj, mob/living/user as mob) - if(istype(W, /obj/item/device/spy_bug)) - pair(W, user) - else - return ..() + +/obj/item/device/spy_monitor/use_tool(obj/item/tool, mob/user, list/click_params) + // Spy Bug - Pair device + if (istype(tool, /obj/item/device/spy_bug)) + pair(tool, user) + return TRUE + + return ..() + /obj/item/device/spy_monitor/proc/pair(obj/item/device/spy_bug/SB, mob/living/user) if(SB.camera in cameras) diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm index 8920ef52b5b45..f373cf9275872 100644 --- a/code/game/objects/items/devices/suit_cooling.dm +++ b/code/game/objects/items/devices/suit_cooling.dm @@ -25,7 +25,7 @@ var/charge_consumption = 2 KILOWATTS // energy usage at full power var/thermostat = T20C -/obj/item/device/suit_cooling_unit/ui_action_click() +/obj/item/device/suit_cooling_unit/ui_action_click(mob/living/user) toggle(usr) /obj/item/device/suit_cooling_unit/Initialize() @@ -81,7 +81,7 @@ update_icon() /obj/item/device/suit_cooling_unit/proc/turn_off(failed) - if(failed) visible_message("\The [src] clicks and whines as it powers down.") + if(failed) visible_message("[src] clicks and whines as it powers down.") on = 0 update_icon() @@ -95,7 +95,7 @@ cell.add_fingerprint(user) cell.update_icon() - to_chat(user, "You remove \the [src.cell].") + to_chat(user, "You remove [src.cell].") src.cell = null update_icon() return @@ -107,36 +107,40 @@ turn_off() else turn_on() - to_chat(user, SPAN_NOTICE("You switch \the [src] [on ? "on" : "off"].")) + to_chat(user, SPAN_NOTICE("You switch [src] [on ? "on" : "off"].")) -/obj/item/device/suit_cooling_unit/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W)) - if(cover_open) - cover_open = 0 - to_chat(user, "You screw the panel into place.") - else - cover_open = 1 - to_chat(user, "You unscrew the panel.") - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) - update_icon() +/obj/item/device/suit_cooling_unit/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return + cover_open = !cover_open + USE_FEEDBACK_NEW_PANEL_OPEN(user, cover_open) + update_icon() - if (istype(W, /obj/item/cell)) - if(cover_open) - if(cell) - to_chat(user, "There is a [cell] already installed here.") - else - if(!user.unEquip(W, src)) - return - cell = W - to_chat(user, "You insert the [cell].") +/obj/item/device/suit_cooling_unit/use_tool(obj/item/tool, mob/user, list/click_params) + // Power Cell - Install cell + if (istype(tool, /obj/item/cell)) + if (!cover_open) + USE_FEEDBACK_FAILURE("[src]'s panel is closed.") + return TRUE + if (cell) + USE_FEEDBACK_FAILURE("[src] already has [cell] installed.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + cell = tool update_icon() - return + user.visible_message( + SPAN_NOTICE("[user] installs [tool] into [src]."), + SPAN_NOTICE("You install [tool] into [src].") + ) return ..() + /obj/item/device/suit_cooling_unit/on_update_icon() - overlays.Cut() + ClearOverlays() if (cover_open) if (cell) icon_state = "suitcooler1" @@ -151,17 +155,17 @@ switch(round(cell.percent())) if(86 to INFINITY) - overlays.Add("battery-0") + AddOverlays("battery-0") if(69 to 85) - overlays.Add("battery-1") + AddOverlays("battery-1") if(52 to 68) - overlays.Add("battery-2") + AddOverlays("battery-2") if(35 to 51) - overlays.Add("battery-3") + AddOverlays("battery-3") if(18 to 34) - overlays.Add("battery-4") + AddOverlays("battery-4") if(-INFINITY to 17) - overlays.Add("battery-5") + AddOverlays("battery-5") /obj/item/device/suit_cooling_unit/examine(mob/user, distance) @@ -170,12 +174,12 @@ return if (on) - to_chat(user, "It's switched on and running.") + . += SPAN_NOTICE("It's switched on and running.") else - to_chat(user, "It is switched off.") + . += SPAN_NOTICE("It is switched off.") if (cover_open) - to_chat(user, "The panel is open.") + . += SPAN_NOTICE("The panel is open.") if (cell) - to_chat(user, "The charge meter reads [round(cell.percent())]%.") + . += SPAN_NOTICE("The charge meter reads [round(cell.percent())]%.") diff --git a/code/game/objects/items/devices/suit_sensor_jammer.dm b/code/game/objects/items/devices/suit_sensor_jammer.dm index 96886581edfd7..cf76aead2fee0 100644 --- a/code/game/objects/items/devices/suit_sensor_jammer.dm +++ b/code/game/objects/items/devices/suit_sensor_jammer.dm @@ -21,7 +21,7 @@ suit_sensor_jammer_methods = list() suit_sensor_jammer_methods_by_type = list() for(var/jammer_method_type in subtypesof(/suit_sensor_jammer_method)) - var/new_method = new jammer_method_type(src, /obj/item/device/suit_sensor_jammer/proc/may_process_crew_data) + var/new_method = new jammer_method_type(src, TYPE_PROC_REF(/obj/item/device/suit_sensor_jammer, may_process_crew_data)) dd_insertObjectList(suit_sensor_jammer_methods, new_method) suit_sensor_jammer_methods_by_type[jammer_method_type] = new_method jammer_method = suit_sensor_jammer_methods[1] @@ -44,46 +44,61 @@ /obj/item/device/suit_sensor_jammer/get_cell() return bcell -/obj/item/device/suit_sensor_jammer/attackby(obj/item/I as obj, mob/user as mob) - if(isCrowbar(I)) - if(bcell) - to_chat(user, SPAN_NOTICE("You remove \the [bcell].")) - disable() - bcell.dropInto(loc) - bcell = null - else - to_chat(user, SPAN_WARNING("There is no cell to remove.")) - else if(istype(I, /obj/item/cell)) - if(bcell) - to_chat(user, SPAN_WARNING("There's already a cell in \the [src].")) - else if(user.unEquip(I)) - I.forceMove(src) - bcell = I - to_chat(user, SPAN_NOTICE("You insert \the [bcell] into \the [src]..")) - else - to_chat(user, SPAN_WARNING("You're unable to insert the battery.")) +/obj/item/device/suit_sensor_jammer/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!bcell) + USE_FEEDBACK_FAILURE("[src] has no cell to remove.") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + disable() + user.put_in_hands(bcell) + user.visible_message( + SPAN_NOTICE("[user] removes [bcell] from [src] with [tool]."), + SPAN_NOTICE("You remove [bcell] from [src] with [tool].") + ) + bcell = null + +/obj/item/device/suit_sensor_jammer/use_tool(obj/item/tool, mob/user, list/click_params) + // Power Cell - Install cell + if (istype(tool, /obj/item/cell)) + if (bcell) + USE_FEEDBACK_FAILURE("[src] already has [bcell] installed.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + bcell = tool + user.visible_message( + SPAN_NOTICE("[user] installs [tool] into [src]."), + SPAN_NOTICE("you install [tool] into [src].") + ) + return TRUE + + return ..() + /obj/item/device/suit_sensor_jammer/on_update_icon() - overlays.Cut() + ClearOverlays() if(bcell) var/percent = bcell.percent() switch(percent) if(0 to 25) - overlays += "forth_quarter" + AddOverlays("forth_quarter") if(25 to 50) - overlays += "one_quarter" - overlays += "third_quarter" + AddOverlays("one_quarter") + AddOverlays("third_quarter") if(50 to 75) - overlays += "two_quarters" - overlays += "second_quarter" + AddOverlays("two_quarters") + AddOverlays("second_quarter") if(75 to 99) - overlays += "three_quarters" - overlays += "first_quarter" + AddOverlays("three_quarters") + AddOverlays("first_quarter") else - overlays += "four_quarters" + AddOverlays("four_quarters") if(active) - overlays += "active" + AddOverlays("active") /obj/item/device/suit_sensor_jammer/emp_act(severity) ..() @@ -106,13 +121,11 @@ /obj/item/device/suit_sensor_jammer/examine(mob/user, distance) . = ..() if(distance <= 3) - var/list/message = list() - message += "This device appears to be [active ? "" : "in"]active and " + . += SPAN_NOTICE("This device appears to be [active ? "" : "in"]active and ") if(bcell) - message += "displays a charge level of [bcell.percent()]%." + . += SPAN_NOTICE("displays a charge level of [bcell.percent()]%.") else - message += "is lacking a cell." - to_chat(user, jointext(message,.)) + . += SPAN_NOTICE("is lacking a cell.") /obj/item/device/suit_sensor_jammer/CanUseTopic(user, state) if(!bcell || bcell.charge <= 0) @@ -133,7 +146,7 @@ "methods" = methods, "current_method" = "\ref[jammer_method]", "current_cost" = jammer_method.energy_cost, - "total_cost" = "[Ceil(JAMMER_POWER_CONSUMPTION(10))]" + "total_cost" = "[ceil(JAMMER_POWER_CONSUMPTION(10))]" ) ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) diff --git a/code/game/objects/items/devices/t_scanner.dm b/code/game/objects/items/devices/t_scanner.dm index 2d9c34b69fbc0..2f19c27df44b7 100644 --- a/code/game/objects/items/devices/t_scanner.dm +++ b/code/game/objects/items/devices/t_scanner.dm @@ -1,9 +1,9 @@ #define OVERLAY_CACHE_LEN 50 /obj/item/device/t_scanner - name = "\improper T-ray scanner" + name = "T-ray scanner" desc = "A terahertz-ray emitter and scanner, capable of penetrating conventional hull materials." - icon = 'icons/obj/t_ray_scanner.dmi' + icon = 'icons/obj/tools/t_ray_scanner.dmi' icon_state = "t-ray0" slot_flags = SLOT_BELT w_class = ITEM_SIZE_SMALL @@ -21,9 +21,9 @@ var/static/list/overlay_cache = list() //cache recent overlays /obj/item/device/t_scanner/Destroy() - . = ..() - if(on) + if (on) set_active(FALSE) + return ..() /obj/item/device/t_scanner/on_update_icon() icon_state = "t-ray[on]" @@ -97,7 +97,7 @@ if(istype(scanned, /obj/machinery/atmospherics/pipe)) var/obj/machinery/atmospherics/pipe/P = scanned I.color = P.pipe_color - I.overlays += P.overlays + I.CopyOverlays(P) I.underlays += P.underlays if(ismob(scanned)) @@ -109,7 +109,7 @@ I.icon_state = "phaseout" var/mob/M = scanned I.color = M.color - I.overlays += M.overlays + I.CopyOverlays(M) I.underlays += M.underlays I.alpha = 128 @@ -127,7 +127,7 @@ var/turf/center = get_turf(src.loc) if(!center) return - for(var/turf/T in range(scan_range, center)) + for(var/turf/T as anything in RANGE_TURFS(center, scan_range)) for(var/mob/M in T.contents) if(ishuman(M)) var/mob/living/carbon/human/H = M diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index ab5a87207bf89..85848e84b2850 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -1,7 +1,7 @@ /obj/item/device/taperecorder name = "universal recorder" desc = "A device that can record to cassette tapes, and play them. It automatically translates the content in playback." - icon = 'icons/obj/tape_recorder.dmi' + icon = 'icons/obj/tools/tape_recorder.dmi' icon_state = "taperecorder" item_state = "analyzer" w_class = ITEM_SIZE_SMALL @@ -42,24 +42,31 @@ mytape = null return ..() - -/obj/item/device/taperecorder/attackby(obj/item/I, mob/user, params) - if(isScrewdriver(I)) - maintenance = !maintenance - to_chat(user, SPAN_NOTICE("You [maintenance ? "open" : "secure"] the lid.")) - return - if(istype(I, /obj/item/device/tape)) - if(mytape) - to_chat(user, SPAN_NOTICE("There's already a tape inside.")) - return - if(!user.unEquip(I)) - return - I.forceMove(src) - mytape = I - to_chat(user, SPAN_NOTICE("You insert [I] into [src].")) +/obj/item/device/taperecorder/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + maintenance = !maintenance + USE_FEEDBACK_NEW_PANEL_OPEN(user, maintenance) + +/obj/item/device/taperecorder/use_tool(obj/item/tool, mob/user, list/click_params) + // Tape - Insert tape + if (istype(tool, /obj/item/device/tape)) + if (mytape) + USE_FEEDBACK_FAILURE("[src] already has [mytape] inside.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + mytape = tool update_icon() - return - ..() + user.visible_message( + SPAN_NOTICE("[user] inserts [tool] into [src]."), + SPAN_NOTICE("You insert [tool] into [src].") + ) + return TRUE + + return ..() /obj/item/device/taperecorder/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) @@ -83,7 +90,7 @@ if(usr.incapacitated()) return if(!mytape) - to_chat(usr, SPAN_NOTICE("There's no tape in \the [src].")) + to_chat(usr, SPAN_NOTICE("There's no tape in [src].")) return if(emagged) to_chat(usr, SPAN_NOTICE("The tape seems to be stuck inside.")) @@ -99,17 +106,21 @@ /obj/item/device/taperecorder/examine(mob/user, distance) . = ..() if(distance <= 1 && maintenance) - to_chat(user, SPAN_NOTICE("The wires are exposed.")) + . += SPAN_NOTICE("The wires are exposed.") /obj/item/device/taperecorder/hear_talk(mob/living/M as mob, msg, verb="says", datum/language/speaking=null) + var/speaker = null if(mytape && recording) - + if (istype(M, /mob/living/carbon/human)) + speaker = M.GetVoice() + else + speaker = M.name if(speaking) if(!speaking.machine_understands) msg = speaking.scramble(msg) - mytape.record_speech("[M.name] [speaking.format_message_plain(msg, verb)]") + mytape.record_speech("[speaker] [speaking.format_message_plain(msg, verb)]") else - mytape.record_speech("[M.name] [verb], \"[msg]\"") + mytape.record_speech("[speaker] [verb], \"[msg]\"") /obj/item/device/taperecorder/see_emote(mob/M as mob, text, emote_type) @@ -144,7 +155,7 @@ var/turf/T = get_turf(loc) if(ismob(loc)) var/mob/M = loc - to_chat(M, SPAN_DANGER("\The [src] explodes!")) + to_chat(M, SPAN_DANGER("[src] explodes!")) if(T) T.hotspot_expose(700,125) explosion(T, 1, EX_ACT_LIGHT) @@ -183,7 +194,7 @@ if (!mytape) if(ismob(loc)) var/mob/M = loc - to_chat(M, SPAN_NOTICE("\The [src]'s tape has been removed.")) + to_chat(M, SPAN_NOTICE("[src]'s tape has been removed.")) stop_recording() break mytape.used_capacity++ @@ -361,7 +372,7 @@ usr.put_in_hands(P) playsound(src, "sound/machines/dotprinter.ogg", 30) canprint = 0 - sleep(300) + sleep(150) canprint = 1 @@ -390,26 +401,26 @@ /obj/item/device/tape name = "tape" - desc = "A magnetic tape that can hold up to ten minutes of content." - icon = 'icons/obj/tape_recorder.dmi' + desc = "A magnetic tape that can hold up to twenty minutes of content." + icon = 'icons/obj/tools/tape_recorder.dmi' icon_state = "tape_white" item_state = "analyzer" w_class = ITEM_SIZE_TINY matter = list(MATERIAL_PLASTIC=20, MATERIAL_STEEL=5, MATERIAL_GLASS=5) force = 1 throwforce = 0 - var/max_capacity = 600 + var/max_capacity = 1200 var/used_capacity = 0 - var/list/storedinfo = new/list() - var/list/timestamp = new/list() + var/list/storedinfo = list() + var/list/timestamp = list() var/ruined = 0 var/doctored = 0 /obj/item/device/tape/on_update_icon() - overlays.Cut() + ClearOverlays() if(ruined && max_capacity) - overlays += "ribbonoverlay" + AddOverlays("ribbonoverlay") /obj/item/device/tape/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) @@ -442,36 +453,45 @@ timestamp += used_capacity storedinfo += "*\[[time2text(used_capacity*10,"mm:ss")]\] [text]" - -/obj/item/device/tape/attackby(obj/item/I, mob/user, params) - if(user.incapacitated()) +/obj/item/device/tape/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!max_capacity) + balloon_alert(user, "нет касеты!") return - if(ruined && isScrewdriver(I)) - if(!max_capacity) - to_chat(user, SPAN_NOTICE("There is no tape left inside.")) - return - to_chat(user, SPAN_NOTICE("You start winding the tape back in...")) - if(do_after(user, 12 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, SPAN_NOTICE("You wound the tape back in.")) - fix() - return - else if(istype(I, /obj/item/pen)) - if(loc == user) - var/new_name = input(user, "What would you like to label the tape?", "Tape labeling") as null|text - if(isnull(new_name)) return - new_name = sanitizeSafe(new_name) - if(new_name) - SetName("tape - '[new_name]'") - to_chat(user, SPAN_NOTICE("You label the tape '[new_name]'.")) - else - SetName("tape") - to_chat(user, SPAN_NOTICE("You scratch off the label.")) - return - else if(isWirecutter(I)) - cut(user) - else if(istype(I, /obj/item/device/tape/loose)) - join(user, I) - ..() + if(!ruined) + balloon_alert(user, "касета не повреждена!") + return + USE_FEEDBACK_REPAIR_START(user) + if(!tool.use_as_tool(src, user, 12 SECONDS, volume = 50, skill_path = list(SKILL_CONSTRUCTION, SKILL_DEVICES), do_flags = DO_REPAIR_CONSTRUCT) || !max_capacity || !ruined) + return + fix() + USE_FEEDBACK_REPAIR_FINISH(user) + +/obj/item/device/tape/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + cut(user) + +/obj/item/device/tape/use_tool(obj/item/tool, mob/user, list/click_params) + // Magnetic Tape - Join tape + if (istype(tool, /obj/item/device/tape/loose)) + join(user, tool) + return TRUE + + // Pen - Label tape + if (istype(tool, /obj/item/pen)) + var/input = input(user, "What would you like to label the tape?", "[initial(name)] - Label") as null|text + input = sanitizeSafe(input, MAX_NAME_LEN) + if (!input || !user.use_sanity_check(src, tool)) + return TRUE + SetName("[initial(name)] - '[input]'") + user.visible_message( + SPAN_NOTICE("[user] labels [src] with [tool]."), + SPAN_NOTICE("You label [src] with [tool].") + ) + return TRUE + . = ..() /obj/item/device/tape/proc/cut(mob/user) if(!LAZYLEN(timestamp)) @@ -536,7 +556,7 @@ /obj/item/device/tape/loose name = "magnetic tape" desc = "Quantum-enriched self-repairing nanotape, used for magnetic storage of information." - icon = 'icons/obj/tape_recorder.dmi' + icon = 'icons/obj/tools/tape_recorder.dmi' icon_state = "magtape" ruined = 1 @@ -552,6 +572,6 @@ /obj/item/device/tape/loose/examine(mob/user, distance) . = ..() if(distance <= 1) - to_chat(user, SPAN_NOTICE("It looks long enough to hold [max_capacity] seconds worth of recording.")) - if(doctored && user.skill_check(SKILL_FORENSICS, SKILL_PROF)) - to_chat(user, SPAN_NOTICE("It has been tampered with...")) + . += SPAN_NOTICE("It looks long enough to hold [max_capacity] seconds worth of recording.") + if(doctored && user.skill_check(SKILL_FORENSICS, SKILL_MASTER)) + . += SPAN_NOTICE("It has been tampered with...") diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index b62f22ba1f5fe..d633af9f095bd 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -17,7 +17,7 @@ effective or pretty fucking useless. /obj/item/device/batterer name = "mind batterer" desc = "A strange device with twin antennas." - icon = 'icons/obj/batterer.dmi' + icon = 'icons/obj/tools/batterer.dmi' icon_state = "batterer" throwforce = 5 w_class = ITEM_SIZE_TINY diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 49c448134d476..5c0884d8ac989 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -1,81 +1,120 @@ /obj/item/device/transfer_valve name = "tank transfer valve" desc = "A small, versatile valve with dual-headed heat-resistant pipes. This mechanism is the standard size for coupling with portable gas tanks." - icon = 'icons/obj/assemblies.dmi' + icon = 'icons/obj/assemblies/assemblies.dmi' icon_state = "valve_1" var/obj/item/tank/tank_one var/obj/item/tank/tank_two - var/obj/item/device/attached_device + var/obj/item/device/assembly/attached_device var/mob/attacher = null - var/valve_open = 0 - var/toggle = 1 - movable_flags = MOVABLE_FLAG_PROXMOVE + var/valve_open = FALSE + var/armed = FALSE + var/panel_open= FALSE + var/toggle = TRUE + + var/datum/wires/transfer_valve/wires + movable_flags = MOVABLE_FLAG_PROXMOVE /obj/item/device/transfer_valve/proc/process_activation(obj/item/device/D) /obj/item/device/transfer_valve/IsAssemblyHolder() - return 1 - -/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user) - var/turf/location = get_turf(src) // For admin logs - if(istype(item, /obj/item/tank)) - - var/T1_weight = 0 - var/T2_weight = 0 - if(tank_one && tank_two) - to_chat(user, SPAN_WARNING("There are already two tanks attached, remove one first.")) - return - - if(!user.unEquip(item, src)) - return - if(!tank_one) - tank_one = item - else - tank_two = item - message_admins("[key_name_admin(user)] attached both tanks to a transfer valve. (JMP)") - log_game("[key_name_admin(user)] attached both tanks to a transfer valve.") - to_chat(user, SPAN_NOTICE("You attach the tank to the transfer valve.")) + return TRUE - T1_weight = tank_one.w_class - if(tank_two) - T2_weight = tank_two.w_class +/obj/item/device/transfer_valve/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if (!armed) + USE_FEEDBACK_FAILURE("[src] isn't armed.") + return + if (!panel_open) + USE_FEEDBACK_FAILURE("[src]'s panel is closed.") + return + wires.Interact(user) - src.w_class = max(initial(src.w_class),T1_weight,T2_weight) //gets w_class of biggest object, because you shouldn't be able to just shove tanks in and have them be tiny. +/obj/item/device/transfer_valve/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tank_one || !tank_two || !attached_device) + balloon_alert(user, "не собрано!") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + panel_open = !panel_open + USE_FEEDBACK_NEW_PANEL_OPEN(user, panel_open) +/obj/item/device/transfer_valve/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if (!armed) + USE_FEEDBACK_FAILURE("[src] isn't armed.") + return + if (!panel_open) + USE_FEEDBACK_FAILURE("[src]'s panel is closed.") + return + wires.Interact(user) + +/obj/item/device/transfer_valve/use_tool(obj/item/tool, mob/user, list/click_params) + // Assembly - Attach device + if (isassembly(tool)) + var/obj/item/device/assembly/assembly = tool + if (armed) + USE_FEEDBACK_FAILURE("[src] is armed and cannot be modified.") + return TRUE + if (attached_device) + USE_FEEDBACK_FAILURE("[src] already has [attached_device] attached.") + return TRUE + if (assembly.secured) + USE_FEEDBACK_FAILURE("[tool] isn't ready to be attached.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + attached_device = tool + attached_device.holder = src + attached_device.set_secure(TRUE) + attacher = user + SSnano.update_uis(src) + GLOB.bombers += "[key_name(user)] attach [tool] to a transfer valve." + log_and_message_admins("[key_name_admin(user)] attached [tool] to a transfer valve.", user, get_turf(src)) + user.visible_message( + SPAN_NOTICE("[user] attaches [tool] to [src]."), + SPAN_NOTICE("You attach [tool] to [src].") + ) + return TRUE + + // Tank - Attach tank + if (istype(tool, /obj/item/tank)) + if (tank_one && tank_two) + USE_FEEDBACK_FAILURE("[src] already has two tanks attached.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + if (!tank_one) + tank_one = tool + else + tank_two = tool + log_and_message_admins("[key_name_admin(user)] attached both tanks to a transfer valve.", user, get_turf(src)) + w_class = max(initial(w_class), tank_one.w_class, tank_two?.w_class) update_icon() + SSnano.update_uis(src) + user.visible_message( + SPAN_NOTICE("[user] attaches [tool] to [src]."), + SPAN_NOTICE("You attach [tool] to [src].") + ) + return TRUE - SSnano.update_uis(src) // update all UIs attached to src -//TODO: Have this take an assemblyholder - else if(isassembly(item)) - var/obj/item/device/assembly/A = item - if(A.secured) - to_chat(user, SPAN_NOTICE("The device is secured.")) - return - if(attached_device) - to_chat(user, SPAN_WARNING("There is already an device attached to the valve, remove it first.")) - return - if(!user.unEquip(item, src)) - return - attached_device = A - to_chat(user, SPAN_NOTICE("You attach the [item] to the valve controls and secure it.")) - A.holder = src - A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb). - - GLOB.bombers += "[key_name(user)] attached a [item] to a transfer valve." - message_admins("[key_name_admin(user)] attached a [item] to a transfer valve. (JMP)") - log_game("[key_name_admin(user)] attached a [item] to a transfer valve.") - attacher = user - SSnano.update_uis(src) // update all UIs attached to src - return + return ..() /obj/item/device/transfer_valve/HasProximity(atom/movable/AM as mob|obj) - if(!attached_device) return + if(!attached_device) + return attached_device.HasProximity(AM) return /obj/item/device/transfer_valve/attack_self(mob/user as mob) + if (panel_open) + to_chat(user, SPAN_WARNING("The device's panel is open!")) + return ui_interact(user) /obj/item/device/transfer_valve/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) @@ -85,7 +124,8 @@ data["attachmentOne"] = tank_one ? tank_one.name : null data["attachmentTwo"] = tank_two ? tank_two.name : null data["valveAttachment"] = attached_device ? attached_device.name : null - data["valveOpen"] = valve_open ? 1 : 0 + data["valveOpen"] = valve_open ? TRUE : FALSE + data["armed"] = armed ? TRUE : FALSE // update the ui if it exists, returns null if no ui is passed/found ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) @@ -103,34 +143,41 @@ /obj/item/device/transfer_valve/Topic(href, href_list) ..() if ( usr.stat || usr.restrained() ) - return 0 + return FALSE if (src.loc != usr) - return 0 - if(tank_one && href_list["tankone"]) - remove_tank(tank_one) - else if(tank_two && href_list["tanktwo"]) - remove_tank(tank_two) - else if(href_list["open"]) - toggle_valve() - else if(attached_device) - if(href_list["rem_device"]) - attached_device.dropInto(loc) - attached_device:holder = null - attached_device = null - update_icon() - if(href_list["device"]) - attached_device.attack_self(usr) - return 1 // Returning 1 sends an update to attached UIs + return FALSE + if (!armed) + if(tank_one && href_list["tankone"]) + remove_tank(tank_one) + else if(tank_two && href_list["tanktwo"]) + remove_tank(tank_two) + else if(href_list["open"]) + toggle_valve() + else if(attached_device) + if (href_list["rem_device"]) + attached_device.dropInto(loc) + attached_device:holder = null + attached_device = null + update_icon() + if (href_list["device"]) + attached_device.attack_self(usr) + if (href_list["arm"]) + toggle_armed() + if(armed && href_list["activate"]) + attached_device.activate() + visible_message(SPAN_WARNING("The [attached_device] blips!"), range = 3) + message_admins("[key_name_admin(usr)] triggered [src]. (JMP)") + return TRUE // Returning 1 sends an update to attached UIs /obj/item/device/transfer_valve/process_activation(obj/item/device/D) if(toggle) - toggle = 0 + toggle = FALSE toggle_valve() spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever - toggle = 1 + toggle = TRUE /obj/item/device/transfer_valve/on_update_icon() - overlays.Cut() + ClearOverlays() underlays.Cut() if(!tank_one && !tank_two && !attached_device) @@ -139,13 +186,13 @@ icon_state = "valve" if(tank_one) - overlays += "[tank_one.icon_state]" + AddOverlays("[tank_one.icon_state]") if(tank_two) var/icon/J = new(icon, icon_state = "[tank_two.icon_state]") J.Shift(WEST, 13) underlays += J if(attached_device) - overlays += "device" + AddOverlays("device") /obj/item/device/transfer_valve/proc/remove_tank(obj/item/tank/T) if(tank_one == T) @@ -167,13 +214,13 @@ tank_two.air_contents.volume += tank_one.air_contents.volume var/datum/gas_mixture/temp = tank_one.remove_air_ratio(1) tank_two.assume_air(temp) - valve_open = 1 + valve_open = TRUE /obj/item/device/transfer_valve/proc/split_gases() if(!valve_open) return - valve_open = 0 + valve_open = FALSE if(QDELETED(tank_one) || QDELETED(tank_two)) return @@ -183,12 +230,28 @@ tank_two.air_contents.volume -= tank_one.air_contents.volume tank_one.assume_air(temp) +/obj/item/device/transfer_valve/proc/toggle_armed() + if (tank_one && tank_two && attached_device) + armed = !armed + if (armed) + wires = new(src) + else + desc = initial(desc) + wires = null + +/obj/item/device/transfer_valve/examine(mob/user, distance) + . = ..() + if (armed && distance < 3) + . += SPAN_DANGER("This one looks like a bomb.") + /* Exadv1: I know this isn't how it's going to work, but this was just to check it explodes properly when it gets a signal (and it does). */ /obj/item/device/transfer_valve/proc/toggle_valve() + if (!armed) + return if(!valve_open && (tank_one && tank_two)) var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) diff --git a/code/game/objects/items/devices/tvcamera.dm b/code/game/objects/items/devices/tvcamera.dm index 2535c5b11d5d8..8dd574ead8559 100644 --- a/code/game/objects/items/devices/tvcamera.dm +++ b/code/game/objects/items/devices/tvcamera.dm @@ -31,9 +31,9 @@ /obj/item/device/camera/tvcamera/examine(mob/user) . = ..() - to_chat(user, "Video feed is currently: [camera.status ? "Online" : "Offline"]") - to_chat(user, "Audio feed is currently: [radio.broadcasting ? "Online" : "Offline"]") - to_chat(user, "Photography setting is currently: [on ? "On" : "Off"]") + . += SPAN_NOTICE("Video feed is currently: [camera.status ? "Online" : "Offline"]") + . += SPAN_NOTICE("Audio feed is currently: [radio.broadcasting ? "Online" : "Offline"]") + . += SPAN_NOTICE("Photography setting is currently: [on ? "On" : "Off"]") /obj/item/device/camera/tvcamera/attack_self(mob/user) add_fingerprint(user) @@ -140,7 +140,7 @@ Using robohead because of restricting to roboticist */ desc = "This TV camera assembly has wires sticking out." return if(3) - if(isWirecutter(W)) + if(W.tool_behaviour == TOOL_WIRECUTTER) to_chat(user, SPAN_NOTICE(" You trim the wires.")) buildstep++ desc = "This TV camera assembly needs casing." diff --git a/code/game/objects/items/devices/uplink.dm b/code/game/objects/items/devices/uplink.dm index e58b0dd706174..353ae5edc4931 100644 --- a/code/game/objects/items/devices/uplink.dm +++ b/code/game/objects/items/devices/uplink.dm @@ -1,14 +1,14 @@ // HIDDEN UPLINK - Can be stored in anything but the host item has to have a trigger for it. /* How to create an uplink in 3 easy steps! - - 1. All obj/item 's have a hidden_uplink var. By default it's null. Give the item one with "new(src)", it must be in it's contents. Feel free to add "uses". - - 2. Code in the triggers. Use check_trigger for this, I recommend closing the item's menu with "close_browser(usr, "window=windowname") if it returns true. - The var/value is the value that will be compared with the var/target. If they are equal it will activate the menu. - - 3. If you want the menu to stay until the users locks his uplink, add an active_uplink_check(mob/user as mob) in your interact/attack_hand proc. - Then check if it's true, if true return. This will stop the normal menu appearing and will instead show the uplink menu. -*/ + * + * 1. All obj/item 's have a hidden_uplink var. By default it's null. Give the item one with "new(src)", it must be in it's contents. Feel free to add "uses". + * + * 2. Code in the triggers. Use check_trigger for this, I recommend closing the item's menu with "close_browser(usr, "window=windowname") if it returns true. + * The var/value is the value that will be compared with the var/target. If they are equal it will activate the menu. + * + * 3. If you want the menu to stay until the users locks his uplink, add an active_uplink_check(mob/user as mob) in your interact/attack_hand proc. + * Then check if it's true, if true return. This will stop the normal menu appearing and will instead show the uplink menu. + */ /obj/item/device/uplink name = "hidden uplink" diff --git a/code/game/objects/items/devices/uplink_random_lists.dm b/code/game/objects/items/devices/uplink_random_lists.dm index b3d5360639b34..6a717daec02d5 100644 --- a/code/game/objects/items/devices/uplink_random_lists.dm +++ b/code/game/objects/items/devices/uplink_random_lists.dm @@ -62,6 +62,7 @@ var/global/list/uplink_random_selections_ items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/chameleon_kit) items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/chameleon_projector) items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/voice) + items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/cosmetic_surgery_kit, reselect_propbability = 10) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/toolbox, reselect_propbability = 10) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/plastique) @@ -75,6 +76,7 @@ var/global/list/uplink_random_selections_ items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/powersink, 10, 10) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/ai_module, 25, 0) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/polychromic_dye_bottle) + items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/vendorcoins, reselect_propbability = 5) items += new/datum/uplink_random_item(/datum/uplink_item/item/implants/imp_freedom) items += new/datum/uplink_random_item(/datum/uplink_item/item/implants/imp_compress) diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm index c8057f59e8638..d9f165c587dbe 100644 --- a/code/game/objects/items/devices/whistle.dm +++ b/code/game/objects/items/devices/whistle.dm @@ -1,7 +1,7 @@ /obj/item/device/hailer name = "hailer" desc = "Used by obese officers to save their breath for running." - icon = 'icons/obj/hailer.dmi' + icon = 'icons/obj/tools/hailer.dmi' icon_state = "voice0" item_state = "flashbang" //looks exactly like a flash (and nothing like a flashbang) w_class = ITEM_SIZE_TINY @@ -24,7 +24,7 @@ if(!new_message || new_message == "") use_message = "Halt! Security!" else - use_message = capitalize(copytext(sanitize(new_message), 1, MAX_MESSAGE_LEN)) + use_message = capitalize(copytext(sanitize(new_message), 1, MAX_LNAME_LEN)) to_chat(usr, "You configure the hailer to shout \"[use_message]\".") diff --git a/code/game/objects/items/documents.dm b/code/game/objects/items/documents.dm index 1d6403d0e5320..fe09649c5e5f9 100644 --- a/code/game/objects/items/documents.dm +++ b/code/game/objects/items/documents.dm @@ -12,7 +12,7 @@ /obj/item/documents/examine(mob/user) . = ..() if(description_antag) - to_chat(user, description_antag) + . += SPAN_NOTICE("[description_antag]") /obj/item/documents/nanotrasen name = "secret corporate documents" @@ -47,4 +47,4 @@ /obj/item/documents/scgr name = "private memos and faxes" desc = "\"Top Secret\" memos and faxes between the SCGR and other officials of the SCG. It's like a chat client ran on pure paperwork." - description_antag = "The SCGR's conversations contain a massive amount of dirt on politicians: drugs, sex, money..." \ No newline at end of file + description_antag = "The SCGR's conversations contain a massive amount of dirt on politicians: drugs, sex, money..." diff --git a/code/game/objects/items/flora.dm b/code/game/objects/items/flora.dm index 1cfd144b6a28b..f1ad5747b636f 100644 --- a/code/game/objects/items/flora.dm +++ b/code/game/objects/items/flora.dm @@ -1,7 +1,7 @@ /obj/item/flora/pottedplantsmall name = "small potted plant" desc = "This is a pot of assorted small flora. Some look familiar." - icon = 'icons/obj/plants.dmi' + icon = 'icons/obj/flora/plants.dmi' icon_state = "plant-15" item_state = "plant-15" w_class = ITEM_SIZE_LARGE @@ -19,18 +19,15 @@ item_state = "plant-27" var/trimmed = FALSE -/obj/item/flora/pottedplantsmall/fern/attackby(obj/item/S, mob/user) - if (!isWirecutter(S)) - return ..() - else - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - visible_message(SPAN_NOTICE("\The [user] starts trimming the [src] with \the [S].")) - if (do_after(user, 6 SECONDS, src, DO_PUBLIC_UNIQUE)) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - to_chat (user, SPAN_NOTICE("You trim \the [src] with \the [S]. You probably should've used a pair of scissors.")) - trimmed = TRUE - addtimer(new Callback(src, .proc/grow), 90 MINUTES, TIMER_UNIQUE|TIMER_OVERRIDE) - update_icon() +/obj/item/flora/pottedplantsmall/fern/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + visible_message(SPAN_NOTICE("[user] starts trimming the [src] with [tool].")) + if(!tool.use_as_tool(src, user, 6 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_PUBLIC_UNIQUE)) + return + to_chat(user, SPAN_NOTICE("You trim [src] with [tool]. You probably should've used a pair of scissors.")) + trimmed = TRUE + addtimer(CALLBACK(src, PROC_REF(grow)), 90 MINUTES, TIMER_UNIQUE|TIMER_OVERRIDE) + update_icon() /obj/item/flora/pottedplantsmall/fern/on_update_icon() . = ..() diff --git a/code/game/objects/items/glassjar.dm b/code/game/objects/items/glassjar.dm index 99e026a687ad9..1b3d6f14eb9e2 100644 --- a/code/game/objects/items/glassjar.dm +++ b/code/game/objects/items/glassjar.dm @@ -1,7 +1,7 @@ /obj/item/glass_jar name = "glass jar" desc = "A small empty jar." - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/jars.dmi' icon_state = "jar" w_class = ITEM_SIZE_SMALL matter = list(MATERIAL_GLASS = 200) @@ -17,9 +17,11 @@ ..() update_icon() -/obj/item/glass_jar/afterattack(atom/A, mob/user, proximity) - if(!proximity || contains) - return +/obj/item/glass_jar/use_after(atom/A, mob/living/user, click_parameters) + if(contains) + to_chat(user, SPAN_WARNING("\The [src] is full and cannot accept further items.")) + return TRUE + if(istype(A, /mob)) var/accept = 0 for(var/D in accept_mobs) @@ -27,21 +29,22 @@ accept = 1 if(!accept) to_chat(user, "[A] doesn't fit into \the [src].") - return + return TRUE var/mob/L = A user.visible_message(SPAN_NOTICE("[user] scoops [L] into \the [src]."), SPAN_NOTICE("You scoop [L] into \the [src].")) L.forceMove(src) contains = 2 update_icon() - return - else if(istype(A, /obj/effect/spider/spiderling)) - var/obj/effect/spider/spiderling/S = A + return TRUE + + if (istype(A, /obj/spider/spiderling)) + var/obj/spider/spiderling/S = A user.visible_message(SPAN_NOTICE("[user] scoops [S] into \the [src]."), SPAN_NOTICE("You scoop [S] into \the [src].")) S.forceMove(src) STOP_PROCESSING(SSobj, S) // No growing inside jars contains = 3 update_icon() - return + return TRUE /obj/item/glass_jar/attack_self(mob/user) switch(contains) @@ -60,7 +63,7 @@ update_icon() return if(3) - for(var/obj/effect/spider/spiderling/S in src) + for(var/obj/spider/spiderling/S in src) S.dropInto(user.loc) user.visible_message(SPAN_NOTICE("[user] releases [S] from \the [src]."), SPAN_NOTICE("You release [S] from \the [src].")) START_PROCESSING(SSobj, S) // They can grow after being let out though @@ -82,7 +85,7 @@ /obj/item/glass_jar/on_update_icon() // Also updates name and desc underlays.Cut() - overlays.Cut() + ClearOverlays() switch(contains) if(0) SetName(initial(name)) @@ -93,7 +96,7 @@ for(var/obj/item/spacecash/S in src) var/list/moneyImages = S.getMoneyImages() for(var/A in moneyImages) - var/image/money = image('icons/obj/items.dmi', A) + var/image/money = image('icons/obj/jars.dmi', A) money.pixel_x = rand(-2, 3) money.pixel_y = rand(-6, 6) money.SetTransform(scale = 0.6) @@ -106,7 +109,7 @@ SetName("glass jar with [M]") desc = "A small jar with [M] inside." if(3) - for(var/obj/effect/spider/spiderling/S in src) + for(var/obj/spider/spiderling/S in src) var/image/victim = image(S.icon, S.icon_state) underlays += victim SetName("glass jar with [S]") diff --git a/code/game/objects/items/holosign_creator.dm b/code/game/objects/items/holosign_creator.dm index 4ba9a4bffae39..c048422fcdc84 100644 --- a/code/game/objects/items/holosign_creator.dm +++ b/code/game/objects/items/holosign_creator.dm @@ -1,7 +1,7 @@ /obj/item/holosign_creator name = "holographic sign projector" desc = "A handy-dandy holographic projector that displays a janitorial sign." - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/janitor_tools.dmi' icon_state = "signmaker" item_state = "electronic" force = 0 @@ -21,39 +21,33 @@ signs.Cut() . = ..() -/obj/item/holosign_creator/afterattack(atom/target, mob/user, flag) - . = ..() - if(flag) - var/turf/T = get_turf(target) - if(!T) - return // Some objs qdel on attackby (notably, holosigns), which happens before this. - var/obj/structure/holosign/H = locate(holosign_type) in T - if(H) - return - else - if(!is_blocked_turf(T, TRUE)) //can't put holograms on a tile that has dense stuff - if(holocreator_busy) - to_chat(user, SPAN_NOTICE("[src] is busy creating a hologram.")) - return - if(length(signs) < max_signs) - playsound(src.loc, 'sound/machines/click.ogg', 20, 1) - if(creation_time) - holocreator_busy = TRUE - if(!do_after(user, creation_time, target, DO_BOTH_UNIQUE_ACT)) - holocreator_busy = FALSE - return - holocreator_busy = FALSE - if(length(signs) >= max_signs) - return - if(is_blocked_turf(T, TRUE)) //don't try to sneak dense stuff on our tile during the wait. - return - H = new holosign_type(get_turf(target), src) - to_chat(user, SPAN_NOTICE("You create \a [H] with [src].")) - else - to_chat(user, SPAN_NOTICE("[src] is projecting at max capacity!")) +/obj/item/holosign_creator/use_after(atom/target, mob/living/user, click_parameters) + var/turf/T = get_turf(target) + if (!T) return FALSE + var/obj/structure/holosign/H = locate(holosign_type) in T + if (H) return FALSE -/obj/item/holosign_creator/attack(mob/living/carbon/human/M, mob/user) - return + if (!is_blocked_turf(T, TRUE)) //can't put holograms on a tile that has dense stuff + if (holocreator_busy) + to_chat(user, SPAN_NOTICE("[src] is busy creating a hologram.")) + return TRUE + if (length(signs) < max_signs) + playsound(src.loc, 'sound/machines/click.ogg', 20, 1) + if(creation_time) + holocreator_busy = TRUE + if(!do_after(user, creation_time, target, DO_BOTH_UNIQUE_ACT)) + holocreator_busy = FALSE + return TRUE + holocreator_busy = FALSE + if(length(signs) >= max_signs) + return TRUE + if(is_blocked_turf(T, TRUE)) //don't try to sneak dense stuff on our tile during the wait. + return TRUE + H = new holosign_type(get_turf(target), src) + to_chat(user, SPAN_NOTICE("You create \a [H] with [src].")) + else + to_chat(user, SPAN_NOTICE("[src] is projecting at max capacity!")) + return TRUE /obj/item/holosign_creator/attack_self(mob/user) if(length(signs)) diff --git a/code/game/objects/items/instruments.dm b/code/game/objects/items/instruments.dm index 5aa68341d1966..6b94094653c59 100644 --- a/code/game/objects/items/instruments.dm +++ b/code/game/objects/items/instruments.dm @@ -1,5 +1,5 @@ /obj/item/instrument - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/musician.dmi' throwforce = 0 throw_speed = 3 throw_range = 6 @@ -8,7 +8,7 @@ /obj/item/instrument/guitar name = "guitar" desc = "An antique musical instrument made of wood, originating from Earth. It has six metal strings of different girth and tension. When moved, they vibrate and the waves resonate in the guitar's open body, producing sounds. Obtained notes can be altered by pressing the strings to the neck, affecting the vibration's frequency." - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/musician.dmi' icon_state = "guitar" /obj/item/instrument/guitar/attack_self(mob/user as mob) diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index 8316df8411015..bc99e17641fc0 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -1,6 +1,7 @@ /obj/item/latexballon name = "latex glove" desc = "A latex glove, usually used as a balloon." + icon = 'icons/obj/toy.dmi' icon_state = "latexballon" item_state = "lgloves" force = 0 diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm index bfc243bef206e..a1bc97533c817 100644 --- a/code/game/objects/items/paintkit.dm +++ b/code/game/objects/items/paintkit.dm @@ -9,7 +9,7 @@ /obj/item/device/kit/examine(mob/user) . = ..() - to_chat(user, "It has [uses] use\s left.") + . += SPAN_NOTICE("It has [uses] use\s left.") /obj/item/device/kit/inherit_custom_item_data(datum/custom_item/citem) new_name = citem.item_name @@ -18,7 +18,7 @@ new_icon_file = CUSTOM_ITEM_OBJ . = src -/obj/item/device/kit/proc/use(amt, mob/user) +/obj/item/device/kit/use(amt, mob/user) uses -= amt playsound(get_turf(user), 'sound/items/Screwdriver.ogg', 50, 1) if(uses<1) @@ -87,7 +87,7 @@ /obj/item/device/kit/paint/examine(mob/user) . = ..() - to_chat(user, "This kit will add a '[new_name]' decal to a exosuit'.") + . += SPAN_NOTICE("This kit will add a '[new_name]' decal to a exosuit'.") // exosuit kits. /obj/item/device/kit/paint/use(amt, mob/user) diff --git a/code/game/objects/items/passport.dm b/code/game/objects/items/passport.dm index fa2e1ac69ee93..69386cf662e0f 100644 --- a/code/game/objects/items/passport.dm +++ b/code/game/objects/items/passport.dm @@ -19,7 +19,7 @@ fingerprint = md5(H.dna.uni_identity) else fingerprint = "N/A" - info = "\icon[src] [src]:\nName: [H.real_name]\nSpecies: [H.get_species()]\nGender: [gender2text(H.gender)]\nAge: [H.age]\nPlace of Birth: [pob]\nFingerprint: [fingerprint]" + info = "\icon[src] [src]:\nName: [H.real_name]\nSpecies: [H.get_species()]\nAge: [H.age]\nPlace of Birth: [pob]\nFingerprint: [fingerprint]" /obj/item/passport/attack_self(mob/user as mob) user.visible_message( diff --git a/code/game/objects/items/plunger.dm b/code/game/objects/items/plunger.dm index 3002cda6e40a5..bd510d108fb93 100644 --- a/code/game/objects/items/plunger.dm +++ b/code/game/objects/items/plunger.dm @@ -3,7 +3,7 @@ desc = "This is possibly the least sanitary object around." icon_state = "plunger_black" item_state = "plunger_black" - icon = 'icons/obj/plunger.dmi' + icon = 'icons/obj/tools/plunger.dmi' attack_verb = list("plunged") force = 1 w_class = 3 @@ -17,7 +17,7 @@ desc = "a plunger. It unclogs things." icon_state = "plunger_black" item_state = "plunger_black" - icon = 'icons/obj/plunger.dmi' + icon = 'icons/obj/tools/plunger.dmi' attack_verb = list("plunged") force = 1 w_class = 3 diff --git a/code/game/objects/items/rescuebag.dm b/code/game/objects/items/rescuebag.dm index 36c0122ba6e72..3a9aa4eb0db19 100644 --- a/code/game/objects/items/rescuebag.dm +++ b/code/game/objects/items/rescuebag.dm @@ -29,30 +29,36 @@ airtank = null qdel(src) +/obj/item/bodybag/rescue/screwdriver_act(mob/living/user, obj/item/tool) + if(!airtank) + balloon_alert(user, "нет баллона!") + return + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + balloon_alert_to_viewers("баллон снят!") + airtank.dropInto(loc) + airtank = null + /obj/item/bodybag/rescue/attackby(obj/item/W, mob/user, click_params) if(istype(W,/obj/item/tank)) if(airtank) - to_chat(user, "\The [src] already has an air tank installed.") - return 1 - else if(user.unEquip(W)) + to_chat(user, "[src] already has an air tank installed.") + return TRUE + if(user.unEquip(W)) W.forceMove(src) airtank = W - to_chat(user, "You install \the [W] in \the [src].") - return 1 - else if(airtank && isScrewdriver(W)) - to_chat(user, "You remove \the [airtank] from \the [src].") - airtank.dropInto(loc) - airtank = null - else - ..() + to_chat(user, "You install [W] in [src].") + return TRUE + . = ..() /obj/item/bodybag/rescue/examine(mob/user) . = ..() if(airtank) - to_chat(user,"The pressure meter on \the [airtank] shows '[airtank.air_contents.return_pressure()] kPa'.") - to_chat(user,"The distribution valve on \the [airtank] is set to '[airtank.distribute_pressure] kPa'.") + . += SPAN_NOTICE("The pressure meter on [airtank] shows '[airtank.air_contents.return_pressure()] kPa'.") + . += SPAN_NOTICE("The distribution valve on [airtank] is set to '[airtank.distribute_pressure] kPa'.") else - to_chat(user, SPAN_WARNING("The air tank is missing.")) + . += SPAN_WARNING("The air tank is missing.") /obj/structure/closet/body_bag/rescue name = "rescue bag" @@ -82,26 +88,40 @@ /obj/structure/closet/body_bag/rescue/on_update_icon() ..() - overlays.Cut() + ClearOverlays() if(airtank) - overlays += image(icon, "tank") + AddOverlays(image(icon, "tank")) + +/obj/structure/closet/body_bag/rescue/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!airtank) + balloon_alert(user, "нет баллона!") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + balloon_alert_to_viewers("баллон снят!") + airtank.dropInto(loc) + update_icon() + airtank = null + +/obj/structure/closet/body_bag/rescue/use_tool(obj/item/tool, mob/user, list/click_params) + // Tank - Install air tank + if (istype(tool, /obj/item/tank)) + if (airtank) + USE_FEEDBACK_FAILURE("[src] already has [airtank] installed.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + set_tank(tool) + user.visible_message( + SPAN_NOTICE("[user] installs [tool] into [src]."), + SPAN_NOTICE("You install [tool] into [src].") + ) + return TRUE + + return ..() -/obj/structure/closet/body_bag/rescue/attackby(obj/item/W, mob/user, click_params) - if(istype(W,/obj/item/tank)) - if(airtank) - to_chat(user, "\The [src] already has an air tank installed.") - return 1 - else if(user.unEquip(W, src)) - set_tank(W) - to_chat(user, "You install \the [W] in \the [src].") - return 1 - else if(airtank && isScrewdriver(W)) - to_chat(user, "You remove \the [airtank] from \the [src].") - airtank.dropInto(loc) - airtank = null - update_icon() - else - ..() /obj/structure/closet/body_bag/rescue/fold(user) var/obj/item/tank/my_tank = airtank @@ -130,12 +150,12 @@ /obj/structure/closet/body_bag/rescue/examine(mob/user) . = ..() if(airtank) - to_chat(user,"The pressure meter on \the [airtank] shows '[airtank.air_contents.return_pressure()] kPa'.") - to_chat(user,"The distribution valve on \the [airtank] is set to '[airtank.distribute_pressure] kPa'.") + . += SPAN_NOTICE("The pressure meter on [airtank] shows '[airtank.air_contents.return_pressure()] kPa'.") + . += SPAN_NOTICE("The distribution valve on [airtank] is set to '[airtank.distribute_pressure] kPa'.") else - to_chat(user, SPAN_WARNING("The air tank is missing.")) - to_chat(user,"The pressure meter on [src] shows '[atmo.return_pressure()] kPa'.") + . += SPAN_WARNING("The air tank is missing.") + . += SPAN_NOTICE("The pressure meter on [src] shows '[atmo.return_pressure()] kPa'.") if(Adjacent(user)) //The bag's rather thick and opaque from a distance. - to_chat(user, SPAN_INFO("You peer into \the [src].")) + . += SPAN_INFO("You peer into [src].") for(var/mob/living/L in contents) - L.examine(arglist(args)) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(examinate), user, L), 0.1 SECONDS) diff --git a/code/game/objects/items/robot/robot_frame.dm b/code/game/objects/items/robot/robot_frame.dm index 8f892e06ba377..ab63847878d71 100644 --- a/code/game/objects/items/robot/robot_frame.dm +++ b/code/game/objects/items/robot/robot_frame.dm @@ -20,10 +20,10 @@ update_icon() /obj/item/robot_parts/robot_suit/on_update_icon() - overlays.Cut() + ClearOverlays() for(var/part in required_parts) if(parts[part]) - overlays += "[part]+o" + AddOverlays("[part]+o") /obj/item/robot_parts/robot_suit/proc/check_completion() for(var/part in required_parts) @@ -31,29 +31,30 @@ return FALSE return TRUE -/obj/item/robot_parts/robot_suit/attackby(obj/item/W as obj, mob/user as mob) - - // Uninstall a robotic part. - if(isCrowbar(W)) - if(!length(parts)) - to_chat(user, SPAN_WARNING("\The [src] has no parts to remove.")) - return - var/removing = pick(parts) - var/obj/item/robot_parts/part = parts[removing] - part.forceMove(get_turf(src)) - user.put_in_hands(part) - parts -= removing - to_chat(user, SPAN_WARNING("You lever \the [part] off \the [src].")) - update_icon() +/obj/item/robot_parts/robot_suit/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!length(parts)) + to_chat(user, SPAN_WARNING("[src] has no parts to remove.")) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + var/removing = pick(parts) + var/obj/item/robot_parts/part = parts[removing] + part.forceMove(get_turf(src)) + user.put_in_hands(part) + parts -= removing + to_chat(user, SPAN_WARNING("You lever [part] off [src].")) + update_icon() +/obj/item/robot_parts/robot_suit/attackby(obj/item/W as obj, mob/user as mob) // Install a robotic part. - else if (istype(W, /obj/item/robot_parts)) + if (istype(W, /obj/item/robot_parts)) var/obj/item/robot_parts/part = W if(!required_parts[part.bp_tag] || !istype(W, required_parts[part.bp_tag])) - to_chat(user, SPAN_WARNING("\The [src] is not compatible with \the [W].")) + to_chat(user, SPAN_WARNING("[src] is not compatible with [W].")) return if(parts[part.bp_tag]) - to_chat(user, SPAN_WARNING("\The [src] already has \a [W] installed.")) + to_chat(user, SPAN_WARNING("[src] already has [W] installed.")) return if(part.can_install(user) && user.unEquip(W, src)) parts[part.bp_tag] = part @@ -63,7 +64,7 @@ else if(istype(W, /obj/item/device/mmi) || istype(W, /obj/item/organ/internal/posibrain)) if(!istype(loc,/turf)) - to_chat(user, SPAN_WARNING("You can't put \the [W] in without the frame being on the ground.")) + to_chat(user, SPAN_WARNING("You can't put [W] in without the frame being on the ground.")) return if(!check_completion()) @@ -83,7 +84,7 @@ return if(jobban_isbanned(B, "Robot")) - to_chat(user, SPAN_WARNING("\The [W] does not seem to fit.")) + to_chat(user, SPAN_WARNING("[W] does not seem to fit.")) return if(B.stat == DEAD) @@ -100,7 +101,7 @@ else ghost_can_reenter = 1 if(!ghost_can_reenter) - to_chat(user, SPAN_WARNING("\The [W] is completely unresponsive; there's no point.")) + to_chat(user, SPAN_WARNING("[W] is completely unresponsive; there's no point.")) return if(!user.unEquip(W)) @@ -113,11 +114,15 @@ O.set_invisibility(0) O.custom_name = created_name O.updatename("Default") + O.faction = user.faction B.mind.transfer_to(O) - if(O.mind && O.mind.assigned_role) - O.job = O.mind.assigned_role - else - O.job = "Robot" + if(O.mind) + O.mind.faction = user.faction + + if(O.mind.assigned_role) + O.job = O.mind.assigned_role + else + O.job = "Robot" var/obj/item/robot_parts/chest/chest = parts[BP_CHEST] if (chest && chest.cell) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index f7f124e8aea1b..ed7b948f0d12e 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -5,14 +5,14 @@ ***********************************************************************/ /obj/item/borg/overdrive name = "overdrive" - icon = 'icons/obj/decals.dmi' + icon = 'icons/obj/structures/decals.dmi' icon_state = "shock" /********************************************************************** HUD/SIGHT things ***********************************************************************/ /obj/item/borg/sight - icon = 'icons/obj/decals.dmi' + icon = 'icons/obj/structures/decals.dmi' icon_state = "securearea" var/sight_mode = 0 var/hud_type @@ -75,4 +75,4 @@ /obj/item/borg/sight/hud/jani/Initialize() . = ..() - hud = new /obj/item/clothing/glasses/hud/janitor(src) \ No newline at end of file + hud = new /obj/item/clothing/glasses/hud/janitor(src) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index beef355e50866..19f4a06952455 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -22,7 +22,7 @@ if(R) SetName("[R.company] [initial(name)]") desc = "[R.desc]" - if(icon_state in icon_states(R.icon)) + if(ICON_HAS_STATE(R.icon, icon_state)) icon = R.icon else SetDefaultName() diff --git a/code/game/objects/items/selection.dm b/code/game/objects/items/selection.dm new file mode 100644 index 0000000000000..4ba7fe5af5e0a --- /dev/null +++ b/code/game/objects/items/selection.dm @@ -0,0 +1,30 @@ +/obj/item/selection + abstract_type = /obj/item/selection + icon = 'icons/obj/tools/xenoarcheology_tools.dmi' + icon_state = "excavation" + var/list/selection_options + + +/obj/item/selection/attack_self(mob/living/user) + var/response = input(user, null, "Select Replacement Item") as null | anything in selection_options + if (isnull(response) || !(response in selection_options)) + return + if (!user.use_sanity_check(src)) + to_chat(user, SPAN_WARNING("You're not able to do that right now.")) + return + user.drop_from_inventory(src) + var/obj/obj = selection_options[response] + obj = new obj (user.loc) + if (isitem(obj)) + user.put_in_any_hand_if_possible(obj) + to_chat(user, SPAN_ITALIC("You take \the [obj] out of \the [src].")) + qdel(src) + + +/obj/item/selection/siderm + name = "sidearm kit" + desc = "A secure box containing a sidearm." + selection_options = list( + "Classic - Secure Smartgun" = /obj/item/gun/energy/gun/secure/preauthorized, + "Stylish - Secure Smart Revolver" = /obj/item/gun/energy/revolver/secure/preauthorized + ) diff --git a/code/game/objects/items/spirit_board.dm b/code/game/objects/items/spirit_board.dm index 52168e5389d5e..5b436707a4a83 100644 --- a/code/game/objects/items/spirit_board.dm +++ b/code/game/objects/items/spirit_board.dm @@ -1,7 +1,7 @@ /obj/item/spirit_board name = "spirit board" desc = "A wooden board with letters etched into it, used in seances." - icon = 'icons/obj/objects.dmi' + icon = 'icons/obj/spiritboard.dmi' icon_state = "spirit_board" density = TRUE var/next_use = 0 @@ -10,7 +10,7 @@ /obj/item/spirit_board/examine(mob/user) . = ..() - to_chat(user, "The planchette is sitting at \"[planchette]\".") + . += SPAN_NOTICE("The planchette is sitting at \"[planchette]\".") /obj/item/spirit_board/attack_hand(mob/user) if (user.a_intent == I_GRAB) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index a440333176c9e..249bbfaa6d1d2 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -24,49 +24,47 @@ else . = TRUE -/obj/item/stack/medical/attack(mob/living/carbon/M, mob/user) - +/obj/item/stack/medical/use_after(mob/living/carbon/M, mob/user) if (!istype(M)) - to_chat(user, SPAN_WARNING("\The [src] cannot be applied to [M]!")) - return 1 + return FALSE - if ( ! (istype(user, /mob/living/carbon/human) || \ + if (!(istype(user, /mob/living/carbon/human) || \ istype(user, /mob/living/silicon)) ) to_chat(user, SPAN_WARNING("You don't have the dexterity to do this!")) - return 1 + return TRUE if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) - if(!affecting) + if (!affecting) to_chat(user, SPAN_WARNING("\The [M] is missing that body part!")) - return 1 + return TRUE - if(!check_limb_state(user, affecting)) - return 1 + if (!check_limb_state(user, affecting)) + return TRUE - if(affecting.organ_tag == BP_HEAD) - if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space)) - to_chat(user, SPAN_WARNING("You can't apply [src] through [H.head]!")) - return 1 + if (affecting.organ_tag == BP_HEAD) + if (H.head && istype(H.head,/obj/item/clothing/head/helmet/space)) + to_chat(user, SPAN_WARNING("You can't apply \the [src] through \the [H.head]!")) + return TRUE else - if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space)) - to_chat(user, SPAN_WARNING("You can't apply [src] through [H.wear_suit]!")) - return 1 + if (H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space)) + to_chat(user, SPAN_WARNING("You can't apply \the [src] through \the [H.wear_suit]!")) + return TRUE H.UpdateDamageIcon() else - M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2)) user.visible_message( \ - SPAN_NOTICE("[M] has been applied with [src] by [user]."), \ - SPAN_NOTICE("You apply \the [src] to [M].") \ + SPAN_NOTICE("\The [M] has been applied with \the [src] by \the [user]."), \ + SPAN_NOTICE("You apply \the [src] to \the [M].") \ ) use(1) - M.updatehealth() + M.updatehealth() //No return value here as this is a parent to all the medical stacks. Terminal return values after success in children. + /obj/item/stack/medical/bruise_pack name = "roll of gauze" singular_name = "gauze length" @@ -77,27 +75,27 @@ apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg') amount = 10 -/obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M, mob/user) - if(..()) - return 1 +/obj/item/stack/medical/bruise_pack/use_after(mob/living/carbon/M, mob/user) + if (..()) + return TRUE if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) //nullchecked by ..() - if(affecting.is_bandaged()) + if (affecting.is_bandaged()) to_chat(user, SPAN_WARNING("The wounds on [M]'s [affecting.name] have already been bandaged.")) - return 1 + return TRUE else user.visible_message(SPAN_NOTICE("\The [user] starts treating [M]'s [affecting.name]."), \ SPAN_NOTICE("You start treating [M]'s [affecting.name].")) var/used = 0 for (var/datum/wound/W in affecting.wounds) - if(W.bandaged) + if (W.bandaged) continue - if(used == amount) + if (used == amount) break - if(!do_after(user, W.damage / 5, M, DO_MEDICAL)) + if (!do_after(user, W.damage / 5, M, DO_MEDICAL)) break if (W.current_stage <= W.max_bleeding_stage) @@ -116,13 +114,14 @@ playsound(src, pick(apply_sounds), 25) used++ affecting.update_damages() - if(used == amount) - if(affecting.is_bandaged()) + if (used == amount) + if (affecting.is_bandaged()) to_chat(user, SPAN_WARNING("\The [src] is used up.")) else to_chat(user, SPAN_WARNING("\The [src] is used up, but there are more wounds to treat on \the [affecting.name].")) use(used) H.update_bandages(1) + return TRUE /obj/item/stack/medical/ointment name = "ointment" @@ -135,28 +134,29 @@ animal_heal = 4 apply_sounds = list('sound/effects/ointment.ogg') -/obj/item/stack/medical/ointment/attack(mob/living/carbon/M, mob/user) - if(..()) - return 1 +/obj/item/stack/medical/ointment/use_after(mob/living/carbon/M, mob/user) + if (..()) + return TRUE if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) //nullchecked by ..() - if(affecting.is_salved()) + if (affecting.is_salved()) to_chat(user, SPAN_WARNING("The wounds on [M]'s [affecting.name] have already been salved.")) - return 1 + return TRUE else user.visible_message(SPAN_NOTICE("\The [user] starts salving wounds on [M]'s [affecting.name]."), \ SPAN_NOTICE("You start salving the wounds on [M]'s [affecting.name].") ) playsound(src, pick(apply_sounds), 25) - if(!do_after(user, 1 SECOND, M, DO_MEDICAL)) - return 1 + if (!do_after(user, 1 SECOND, M, DO_MEDICAL)) + return TRUE user.visible_message(SPAN_NOTICE("[user] salved wounds on [M]'s [affecting.name]."), \ SPAN_NOTICE("You salved wounds on [M]'s [affecting.name].") ) use(1) affecting.salve() affecting.disinfect() + return TRUE /obj/item/stack/medical/advanced/bruise_pack name = "advanced trauma kit" @@ -169,16 +169,20 @@ apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg','sound/effects/tape.ogg') amount = 10 -/obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M, mob/user) - if(..()) - return 1 +/obj/item/stack/medical/advanced/bruise_pack/use_after(mob/living/carbon/M, mob/user) + if (..()) + return TRUE + + var/turf/T = get_turf(M) + if (locate(/obj/machinery/optable, T) && user.a_intent == I_HELP) + return FALSE if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) //nullchecked by ..() - if(affecting.is_bandaged() && affecting.is_disinfected()) + if (affecting.is_bandaged() && affecting.is_disinfected()) to_chat(user, SPAN_WARNING("The wounds on [M]'s [affecting.name] have already been treated.")) - return 1 + return TRUE else user.visible_message(SPAN_NOTICE("\The [user] starts treating [M]'s [affecting.name]."), \ SPAN_NOTICE("You start treating [M]'s [affecting.name].") ) @@ -186,9 +190,9 @@ for (var/datum/wound/W in affecting.wounds) if (W.bandaged && W.disinfected) continue - if(used == amount) + if (used == amount) break - if(!do_after(user, W.damage / 5, M, DO_MEDICAL)) + if (!do_after(user, W.damage / 5, M, DO_MEDICAL)) break if (W.current_stage <= W.max_bleeding_stage) user.visible_message(SPAN_NOTICE("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue."), \ @@ -207,13 +211,14 @@ if (M.stat == UNCONSCIOUS && prob(25)) to_chat(M, SPAN_NOTICE(SPAN_BOLD("... [pick("feels better", "hurts less")] ..."))) affecting.update_damages() - if(used == amount) - if(affecting.is_bandaged()) + if (used == amount) + if (affecting.is_bandaged()) to_chat(user, SPAN_WARNING("\The [src] is used up.")) else to_chat(user, SPAN_WARNING("\The [src] is used up, but there are more wounds to treat on \the [affecting.name].")) use(used) H.update_bandages(1) + return TRUE /obj/item/stack/medical/advanced/ointment name = "advanced burn kit" @@ -226,23 +231,23 @@ apply_sounds = list('sound/effects/ointment.ogg') -/obj/item/stack/medical/advanced/ointment/attack(mob/living/carbon/M, mob/user) - if(..()) - return 1 +/obj/item/stack/medical/advanced/ointment/use_after(mob/living/carbon/M, mob/user) + if (..()) + return TRUE if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) //nullchecked by ..() - if(affecting.is_salved()) + if (affecting.is_salved()) to_chat(user, SPAN_WARNING("The wounds on [M]'s [affecting.name] have already been salved.")) - return 1 + return TRUE else user.visible_message(SPAN_NOTICE("\The [user] starts salving wounds on [M]'s [affecting.name]."), \ SPAN_NOTICE("You start salving the wounds on [M]'s [affecting.name].") ) playsound(src, pick(apply_sounds), 25) if(!do_after(user, 1 SECOND, M, DO_MEDICAL)) - return 1 + return TRUE user.visible_message( SPAN_NOTICE("[user] covers wounds on [M]'s [affecting.name] with regenerative membrane."), \ SPAN_NOTICE("You cover wounds on [M]'s [affecting.name] with regenerative membrane.") ) affecting.heal_damage(0,heal_burn) @@ -251,6 +256,7 @@ affecting.disinfect() if (M.stat == UNCONSCIOUS && prob(25)) to_chat(M, SPAN_NOTICE(SPAN_BOLD("... [pick("feels better", "hurts less")] ..."))) + return TRUE /obj/item/stack/medical/splint name = "medical splints" @@ -263,45 +269,45 @@ can_treat_robots = TRUE var/list/splintable_organs = list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT) //List of organs you can splint, natch. -/obj/item/stack/medical/splint/attack(mob/living/carbon/M, mob/user) - if(..()) - return 1 +/obj/item/stack/medical/splint/use_after(mob/living/carbon/M, mob/user) + if (..()) + return TRUE if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) //nullchecked by ..() var/limb = affecting.name - if(!(affecting.organ_tag in splintable_organs)) + if (!(affecting.organ_tag in splintable_organs)) to_chat(user, SPAN_DANGER("You can't use \the [src] to apply a splint there!")) - return - if(affecting.splinted) + return TRUE + if (affecting.splinted) to_chat(user, SPAN_DANGER("[M]'s [limb] is already splinted!")) - return + return TRUE if (M != user) user.visible_message(SPAN_DANGER("[user] starts to apply \the [src] to [M]'s [limb]."), SPAN_DANGER("You start to apply \the [src] to [M]'s [limb]."), SPAN_DANGER("You hear something being wrapped.")) else - if(( !user.hand && (affecting.organ_tag in list(BP_R_ARM, BP_R_HAND)) || \ + if ((!user.hand && (affecting.organ_tag in list(BP_R_ARM, BP_R_HAND)) || \ user.hand && (affecting.organ_tag in list(BP_L_ARM, BP_L_HAND)) )) to_chat(user, SPAN_DANGER("You can't apply a splint to the arm you're using!")) - return + return TRUE user.visible_message(SPAN_DANGER("[user] starts to apply \the [src] to their [limb]."), SPAN_DANGER("You start to apply \the [src] to your [limb]."), SPAN_DANGER("You hear something being wrapped.")) - if(user.do_skilled(5 SECONDS, SKILL_MEDICAL, M, do_flags = DO_MEDICAL)) - if((M == user && prob(75)) || prob(user.skill_fail_chance(SKILL_MEDICAL,50, SKILL_ADEPT))) + if (user.do_skilled(5 SECONDS, SKILL_MEDICAL, M, do_flags = DO_MEDICAL)) + if ((M == user && prob(75)) || prob(user.skill_fail_chance(SKILL_MEDICAL,50, SKILL_TRAINED))) user.visible_message(SPAN_DANGER("\The [user] fumbles [src]."), SPAN_DANGER("You fumble [src]."), SPAN_DANGER("You hear something being wrapped.")) - return + return TRUE var/obj/item/stack/medical/splint/S = split(1, TRUE) - if(S) - if(affecting.apply_splint(S)) + if (S) + if (affecting.apply_splint(S)) M.verbs += /mob/living/carbon/human/proc/remove_splints S.forceMove(affecting) if (M != user) user.visible_message(SPAN_DANGER("\The [user] finishes applying [src] to [M]'s [limb]."), SPAN_DANGER("You finish applying \the [src] to [M]'s [limb]."), SPAN_DANGER("You hear something being wrapped.")) else user.visible_message(SPAN_DANGER("\The [user] successfully applies [src] to their [limb]."), SPAN_DANGER("You successfully apply \the [src] to your [limb]."), SPAN_DANGER("You hear something being wrapped.")) - return + return TRUE S.dropInto(src.loc) //didn't get applied, so just drop it user.visible_message(SPAN_DANGER("\The [user] fails to apply [src]."), SPAN_DANGER("You fail to apply [src]."), SPAN_DANGER("You hear something being wrapped.")) - return + return TRUE /obj/item/stack/medical/splint/ghetto name = "makeshift splints" @@ -326,6 +332,8 @@ amount = 25 max_amount = 25 + +//What gets made by chemistry. For people with crystal organs, it's better than crystallising agent. For those without, it's a bit of a gamble. /obj/item/stack/medical/resin/handmade name = "resin globules" desc = "A lump of slick, shiny resin. Used to repair damage to crystalline bodyparts." @@ -334,29 +342,51 @@ heal_brute = 5 heal_burn = 5 + /obj/item/stack/medical/resin/check_limb_state(mob/user, obj/item/organ/external/limb) if(!BP_IS_ROBOTIC(limb) && !BP_IS_CRYSTAL(limb)) to_chat(user, SPAN_WARNING("You cannot use \the [src] to treat an organic limb.")) return FALSE return TRUE -/obj/item/stack/medical/resin/attack(mob/living/carbon/M, mob/user) - . = ..() - if(!. && ishuman(M)) + +/obj/item/stack/medical/resin/use_after(mob/living/carbon/M, mob/user) + if (..()) + return TRUE + + if(ishuman(M)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) - if((affecting.brute_dam + affecting.burn_dam) <= 0) + if ((affecting.brute_dam + affecting.burn_dam) <= 0) to_chat(user, SPAN_WARNING("\The [M]'s [affecting.name] is undamaged.")) - return 1 + return TRUE user.visible_message( - SPAN_NOTICE("\The [user] starts patching fractures on \the [M]'s [affecting.name]."), \ - SPAN_NOTICE("You start patching fractures on \the [M]'s [affecting.name].") ) + SPAN_NOTICE("\The [user] starts patching damage on \the [M]'s [affecting.name]."), \ + SPAN_NOTICE("You start patching damage on \the [M]'s [affecting.name].") ) playsound(src, pick(apply_sounds), 25) - if(!do_after(user, 1 SECOND, M, DO_MEDICAL)) - to_chat(user, SPAN_NOTICE("You must stand still to patch fractures.")) - return 1 + if (!do_after(user, 2 SECOND, M, DO_MEDICAL)) + to_chat(user, SPAN_NOTICE("You must stand still to patch damage.")) + return TRUE user.visible_message( \ - SPAN_NOTICE("\The [user] patches the fractures on \the [M]'s [affecting.name] with resin."), \ - SPAN_NOTICE("You patch fractures on \the [M]'s [affecting.name] with resin.")) - affecting.heal_damage(heal_brute, heal_burn, robo_repair = TRUE) + SPAN_NOTICE("\The [user] patches the damage on \the [M]'s [affecting.name] with resin."), \ + SPAN_NOTICE("You patch damage on \the [M]'s [affecting.name] with resin.")) use(1) + if (BP_IS_CRYSTAL(affecting)) + if(prob(75)) + to_chat(M, SPAN_NOTICE("Fresh crystals seem to form over your [affecting.name].")) + affecting.heal_damage(rand(heal_brute - 2, heal_brute + 4), rand(heal_burn - 2, heal_burn + 4), robo_repair = TRUE) + return TRUE + if (BP_IS_BRITTLE(affecting)) + if (!prob(user.get_skill_value(SKILL_DEVICES) * 20)) //80% to 0% chance, depending on skill, for your brittle organ to hurt and then heal. + to_chat(H, SPAN_DANGER("Crystals are forming around your [affecting.name], damaging internal integrity!")) + for (var/i = 1 to rand(1,3)) + new /obj/item/material/shard(get_turf(affecting), MATERIAL_STEEL) + affecting.take_external_damage(rand(20,40), 0) + if(prob(30)) + if (!M.isSynthetic()) + M.emote("scream") + M.Weaken(2) + affecting.status |= ORGAN_BRITTLE // 30% chance to brittle your limb/organ, and if you're organic, you get weakened. + affecting.heal_damage(heal_brute, heal_burn, robo_repair = TRUE) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + return TRUE diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm index 48b3700fdf4ba..7d008c8d4353f 100644 --- a/code/game/objects/items/stacks/nanopaste.dm +++ b/code/game/objects/items/stacks/nanopaste.dm @@ -8,9 +8,9 @@ amount = 10 -/obj/item/stack/nanopaste/attack(mob/living/M as mob, mob/user as mob) +/obj/item/stack/nanopaste/use_after(mob/living/M as mob, mob/user as mob) if (!istype(M) || !istype(user)) - return 0 + return FALSE if (istype(M,/mob/living/silicon/robot)) //Repairing cyborgs var/mob/living/silicon/robot/R = M if (R.getBruteLoss() || R.getFireLoss() ) @@ -23,6 +23,7 @@ SPAN_NOTICE("You apply some [src] at [R]'s damaged areas.")) else to_chat(user, SPAN_NOTICE("All [R]'s systems are nominal.")) + return TRUE if (istype(M,/mob/living/carbon/human)) //Repairing robolimbs var/mob/living/carbon/human/H = M @@ -30,19 +31,20 @@ if(!S) to_chat(user, SPAN_WARNING("\The [M] is missing that body part.")) - return + return TRUE if(BP_IS_BRITTLE(S)) to_chat(user, SPAN_WARNING("\The [M]'s [S.name] is hard and brittle - \the [src] cannot repair it.")) - return + return TRUE if(S && BP_IS_ROBOTIC(S) && S.hatch_state == HATCH_OPENED) - if(!S.get_damage()) + if (!S.get_damage()) to_chat(user, SPAN_NOTICE("Nothing to fix here.")) - else if(can_use(1)) + else if (can_use(1)) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) S.heal_damage(15, 15, robo_repair = 1) H.updatehealth() use(1) user.visible_message(SPAN_NOTICE("\The [user] applies some nanite paste on [user != M ? "[M]'s [S.name]" : "[S]"] with [src]."),\ SPAN_NOTICE("You apply some nanite paste on [user == M ? "your" : "[M]'s"] [S.name].")) + return TRUE diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index efd770968aece..3935f3f4433e8 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -4,6 +4,7 @@ singular_name = "rod" plural_name = "rods" icon_state = "rod" + base_state = "rod" plural_icon_state = "rod-mult" max_icon_state = "rod-max" w_class = ITEM_SIZE_LARGE @@ -40,27 +41,28 @@ throwforce = round(0.25*material.get_edge_damage()) force = round(0.5*material.get_blunt_damage()) -/obj/item/stack/material/rods/attackby(obj/item/W as obj, mob/user as mob) - if(isWelder(W)) - var/obj/item/weldingtool/WT = W - - if(!can_use(2)) - to_chat(user, SPAN_WARNING("You need at least two rods to do this.")) - return - - if(WT.remove_fuel(0,user)) - var/obj/item/stack/material/steel/new_item = new(usr.loc) - new_item.add_to_stacks(usr) - for (var/mob/M in viewers(src)) - M.show_message(SPAN_NOTICE("[src] is shaped into metal by [user.name] with the weldingtool."), 3, SPAN_NOTICE("You hear welding."), 2) - var/obj/item/stack/material/rods/R = src - src = null - var/replace = (user.get_inactive_hand()==R) - R.use(2) - if (!R && replace) - user.put_in_hands(new_item) +/obj/item/stack/material/rods/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(material.ignition_point) + balloon_alert(user, "невозможно превратить в листы!") + return + if(!can_use(2)) + balloon_alert(user, "нужно два стержня минимум!") + return + if(!tool.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - ..() + var/obj/item/stack/material/new_item = material.place_sheet(usr.loc) + new_item.add_to_stacks(usr) + user.visible_message( + SPAN_NOTICE("[user] welds [src] into [material.sheet_singular_name]."), + SPAN_NOTICE("You weld [src] into [material.sheet_singular_name].") + ) + var/obj/item/stack/material/rods/R = src + src = null + var/replace = (user.get_inactive_hand()==R) + R.use(2) + if (!R && replace) + user.put_in_hands(new_item) /obj/item/stack/material/rods/attack_self(mob/user as mob) src.add_fingerprint(user) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 71d7a2bf565c3..39d79b0cb2bb8 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -3,36 +3,42 @@ desc = "The by-product of human farming." singular_name = "human skin piece" icon_state = "sheet-hide" + icon = 'icons/obj/materials/hides.dmi' /obj/item/stack/animalhide/corgi name = "corgi hide" desc = "The by-product of corgi farming." singular_name = "corgi hide piece" icon_state = "sheet-corgi" + icon = 'icons/obj/materials/hides.dmi' /obj/item/stack/animalhide/cat name = "cat hide" desc = "The by-product of cat farming." singular_name = "cat hide piece" icon_state = "sheet-cat" + icon = 'icons/obj/materials/hides.dmi' /obj/item/stack/animalhide/monkey name = "monkey hide" desc = "The by-product of monkey farming." singular_name = "monkey hide piece" icon_state = "sheet-monkey" + icon = 'icons/obj/materials/hides.dmi' /obj/item/stack/animalhide/lizard name = "lizard skin" desc = "Sssssss..." singular_name = "lizard skin piece" icon_state = "sheet-lizard" + icon = 'icons/obj/materials/hides.dmi' /obj/item/stack/animalhide/xeno name = "alien hide" desc = "The skin of a terrible creature." singular_name = "alien hide piece" icon_state = "sheet-xeno" + icon = 'icons/obj/materials/hides.dmi' //don't see anywhere else to put these, maybe together they could be used to make the xenos suit? /obj/item/stack/xenochitin @@ -59,35 +65,38 @@ desc = "This hide was stripped of it's hair, but still needs tanning." singular_name = "hairless hide piece" icon_state = "sheet-hairlesshide" + icon = 'icons/obj/materials/hides.dmi' /obj/item/stack/wetleather name = "wet leather" desc = "This leather has been cleaned but still needs to be dried." singular_name = "wet leather piece" icon_state = "sheet-wetleather" + icon = 'icons/obj/materials/hides.dmi' var/wetness = 30 //Reduced when exposed to high temperautres var/drying_threshold_temperature = 500 //Kelvin to start drying //Step one - dehairing. -/obj/item/stack/animalhide/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/material/knife) || isHatchet(W)) - - //visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message) - usr.visible_message(SPAN_NOTICE("\The [usr] starts cutting hair off \the [src]"), SPAN_NOTICE("You start cutting the hair off \the [src]"), "You hear the sound of a knife rubbing against flesh") - if(do_after(user, 5 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(usr, SPAN_NOTICE("You cut the hair from this [src.singular_name]")) - //Try locating an exisitng stack on the tile and add to there if possible - for(var/obj/item/stack/hairlesshide/HS in usr.loc) +/obj/item/stack/animalhide/use_tool(obj/item/W, mob/living/user, list/click_params) + if (is_sharp(W)) + visible_message( + SPAN_NOTICE("\The [user] starts cutting hair off \the [src]"), + SPAN_NOTICE("You start cutting the hair off \the [src]"), + SPAN_NOTICE("You hear the sound of a knife rubbing against flesh.") + ) + if (do_after(user, 5 SECONDS, src, DO_REPAIR_CONSTRUCT)) + to_chat(user, SPAN_NOTICE("You cut the hair from \the [get_exact_name(1)]")) + for (var/obj/item/stack/hairlesshide/HS in user.loc) if(HS.amount < 50) HS.amount++ src.use(1) - break - //If it gets to here it means it did not find a suitable stack on the tile. + return TRUE var/obj/item/stack/hairlesshide/HS = new(usr.loc) HS.amount = 1 - src.use(1) + use(1) + return TRUE else - ..() + return ..() //Step two - washing..... it's actually in washing machine code. diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index d7c035f479385..477a1c9db9369 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -15,8 +15,11 @@ var/list/datum/stack_recipe/recipes var/singular_name var/plural_name + /// String. The stack's base icon state. Used when the amount is 2 or lower. var/base_state + /// String. The stack's icon state when amount is greater than 2. var/plural_icon_state + /// String. The stack's icon state at the maximum amount. var/max_icon_state var/amount = 1 var/max_amount //also see stack recipes initialisation, param "max_res_amount" must be equal to this max_amount @@ -50,9 +53,9 @@ . = ..() if(distance <= 1) if(!uses_charge) - to_chat(user, "There [src.amount == 1 ? "is" : "are"] [src.amount] [src.singular_name]\s in the stack.") + . += SPAN_NOTICE("There [amount == 1 ? "is 1 [singular_name]" : "are [amount] [plural_name]"] in the stack.") else - to_chat(user, "There is enough charge for [get_amount()].") + . += SPAN_NOTICE("There is enough charge for [get_amount() == 1 ? "1 [singular_name]" : "[amount] [plural_name]"].") /obj/item/stack/attack_self(mob/user as mob) list_recipes(user) @@ -183,7 +186,7 @@ return 0 return 1 -/obj/item/stack/proc/use(used) +/obj/item/stack/use(used) if (!can_use(used)) return 0 if(!uses_charge) @@ -302,18 +305,18 @@ continue var/transfer = src.transfer_to(item) if (transfer) - to_chat(user, SPAN_NOTICE("You add a new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s.")) + to_chat(user, SPAN_NOTICE("You add a new [item.singular_name] to the stack. It now contains [item.get_exact_name(item.amount)].")) if(!amount) break /obj/item/stack/get_storage_cost() //Scales storage cost to stack size . = ..() if (amount < max_amount) - . = Ceil(. * amount / max_amount) + . = ceil(. * amount / max_amount) /obj/item/stack/attack_hand(mob/user as mob) if (user.get_inactive_hand() == src) - var/N = input("How many stacks of [src] would you like to split off?", "Split stacks", 1) as num|null + var/N = input("How many [plural_name] of \the [src] would you like to split off?", "Split stacks", 1) as num|null if(N) var/obj/item/stack/F = src.split(N) if (F) @@ -327,18 +330,60 @@ ..() return -/obj/item/stack/attackby(obj/item/W as obj, mob/user as mob) - if (istype(W, /obj/item/stack)) - var/obj/item/stack/S = W - src.transfer_to(S) +/obj/item/stack/use_tool(obj/item/tool, mob/living/user, list/click_params) + if (istype(tool, /obj/item/stack)) + var/obj/item/stack/new_stack = tool + transfer_to(new_stack) spawn(0) //give the stacks a chance to delete themselves if necessary - if (S && usr.machine==S) - S.interact(usr) - if (src && usr.machine==src) - src.interact(usr) + if (new_stack && user.machine == new_stack) + new_stack.interact(usr) + if (src && user.machine == src) + interact(user) + return TRUE + return ..() + +/** + * Returns a string forming a basic name of the stack. By default, this is `name`. + * + * Has no parameters. + */ +/obj/item/stack/proc/get_stack_name() + return name + + +/** + * Generates a name usable in messages without a specific number attached, i.e. `a sheet of paper` or `some paper sheets`. + * + * **Parameters**: + * - `plural` (Boolean, default `(src.amount == 1)`) - Whether the message uses `plural_name` or `singular_name`, and the proper grammatical rules. + * + * Returns string. + */ +/obj/item/stack/proc/get_vague_name(plural) + if (isnull(plural)) + plural = (src.amount == 1) + if (plural) + return "some [get_stack_name()] [plural_name]" else - return ..() + return "\a [singular_name] of [get_stack_name()]" + + +/** + * Generates a name usable in messages with a specific number attached, i.e. `1 sheet of paper` or `5 paper sheets`. + * + * **Parameters**: + * - `amount` (Integer, default `src.amount`) - The number of items for the message. Also determines whether `plural_name` or `singular_name` are used. + * + * Returns string. + */ +/obj/item/stack/proc/get_exact_name(amount) + if (isnull(amount)) + amount = src.amount + if (amount == 1) + return "[amount] [singular_name] of [get_stack_name()]" + return "[amount] [get_stack_name()] [plural_name]" + /* * Recipe datum diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm index 3e10f926c5681..6182a9ea6c8a3 100644 --- a/code/game/objects/items/stacks/telecrystal.dm +++ b/code/game/objects/items/stacks/telecrystal.dm @@ -9,19 +9,19 @@ item_flags = ITEM_FLAG_NO_BLUDGEON origin_tech = list(TECH_MATERIAL = 6, TECH_BLUESPACE = 4) -/obj/item/stack/telecrystal/afterattack(obj/item/I as obj, mob/user as mob, proximity) - if(!proximity) - return - if(istype(I, /obj/item)) - if(I.hidden_uplink && I.hidden_uplink.active) //No metagaming by using this on every PDA around just to see if it gets used up. - I.hidden_uplink.uses += amount - I.hidden_uplink.update_nano_data() - SSnano.update_uis(I.hidden_uplink) - use(amount) - to_chat(user, SPAN_NOTICE("You slot \the [src] into \the [I] and charge its internal uplink.")) +/obj/item/stack/telecrystal/use_after(obj/item/I, mob/living/user, click_parameters) + if (!istype(I)) + return FALSE + if (I.hidden_uplink && I.hidden_uplink.active) //No metagaming by using this on every PDA around just to see if it gets used up. + I.hidden_uplink.uses += amount + I.hidden_uplink.update_nano_data() + SSnano.update_uis(I.hidden_uplink) + use(amount) + to_chat(user, SPAN_NOTICE("You slot \the [src] into \the [I] and charge its internal uplink.")) + return TRUE /obj/item/stack/telecrystal/attack_self(mob/user) - if(use(Ceil(DEFAULT_TELECRYSTAL_AMOUNT/20))) + if(use(ceil(DEFAULT_TELECRYSTAL_AMOUNT/20))) user.visible_message(SPAN_WARNING("\The [user] crushes a crystal!"), SPAN_WARNING("You crush \a [src]!"), "You hear the sound of a crystal breaking just before a sudden crack of electricity.") var/turf/T = get_random_turf_in_range(user, 7, 3) if(T) diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index cc889641f4f22..86533483ba592 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -14,6 +14,7 @@ randpixel = 7 w_class = ITEM_SIZE_NORMAL max_amount = 100 + icon_state = "tile" icon = 'icons/obj/tiles.dmi' force = 1 @@ -170,6 +171,7 @@ singular_name = "white floor tile" icon_state = "tile_white" matter = list(MATERIAL_PLASTIC = 450) + build_type = /obj/item/stack/tile/floor_white /obj/item/stack/tile/floor_white/fifty amount = 50 @@ -180,6 +182,7 @@ icon_state = "fr_tile" matter = list(MATERIAL_STEEL = 450) obj_flags = OBJ_FLAG_CONDUCTIBLE + build_type = /obj/item/stack/tile/floor_dark /obj/item/stack/tile/floor_dark/fifty amount = 50 @@ -189,6 +192,7 @@ singular_name = "freezer floor tile" icon_state = "tile_freezer" matter = list(MATERIAL_PLASTIC = 450) + build_type = /obj/item/stack/tile/floor_freezer /obj/item/stack/tile/floor_freezer/fifty amount = 50 @@ -208,6 +212,7 @@ singular_name = "linoleum" desc = "A piece of linoleum. It is the same size as a normal floor tile!" icon_state = "tile_linoleum" + build_type = /obj/item/stack/tile/linoleum /obj/item/stack/tile/linoleum/fifty amount = 50 @@ -226,6 +231,7 @@ singular_name = "brown carpet" desc = "A piece of brown carpet." icon_state = "tile_carpetbrown" + build_type = /obj/item/stack/tile/carpet /obj/item/stack/tile/carpet/fifty amount = 50 @@ -235,6 +241,7 @@ desc = "A piece of blue and gold carpet." singular_name = "blue carpet" icon_state = "tile_carpetblue" + build_type = /obj/item/stack/tile/carpetblue /obj/item/stack/tile/carpetblue/fifty amount = 50 @@ -244,6 +251,7 @@ desc = "A piece of blue and pale blue carpet." singular_name = "pale blue carpet" icon_state = "tile_carpetblue2" + build_type = /obj/item/stack/tile/carpetblue2 /obj/item/stack/tile/carpetblue2/fifty amount = 50 @@ -253,6 +261,7 @@ desc = "A piece of blue and green carpet." singular_name = "sea blue carpet" icon_state = "tile_carpetblue3" + build_type = /obj/item/stack/tile/carpetblue3 /obj/item/stack/tile/carpetblue3/fifty amount = 50 @@ -262,6 +271,7 @@ desc = "A piece of magenta carpet." singular_name = "magenta carpet" icon_state = "tile_carpetmagenta" + build_type = /obj/item/stack/tile/carpetmagenta /obj/item/stack/tile/carpetmagenta/fifty amount = 50 @@ -271,6 +281,7 @@ desc = "A piece of purple carpet." singular_name = "purple carpet" icon_state = "tile_carpetpurple" + build_type = /obj/item/stack/tile/carpetpurple /obj/item/stack/tile/carpetpurple/fifty amount = 50 @@ -280,6 +291,7 @@ desc = "A piece of orange carpet." singular_name = "orange carpet" icon_state = "tile_carpetorange" + build_type = /obj/item/stack/tile/carpetorange /obj/item/stack/tile/carpetorange/fifty amount = 50 @@ -289,6 +301,7 @@ desc = "A piece of green carpet." singular_name = "green carpet" icon_state = "tile_carpetgreen" + build_type = /obj/item/stack/tile/carpetgreen /obj/item/stack/tile/carpetgreen/fifty amount = 50 @@ -298,10 +311,21 @@ desc = "A piece of red carpet." singular_name = "red carpet" icon_state = "tile_carpetred" + build_type = /obj/item/stack/tile/carpetred /obj/item/stack/tile/carpetred/fifty amount = 50 +/obj/item/stack/tile/carpetblack + name = "black carpet" + desc = "A piece of black carpet." + singular_name = "black carpet" + icon_state = "tile_carpetblack" + build_type = /obj/item/stack/tile/carpetblack + +/obj/item/stack/tile/carpetblack/fifty + amount = 50 + /obj/item/stack/tile/pool name = "pool tiling" desc = "A set of tiles designed to build fluid pools." diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 222b5b3d95f68..8f60c29d81a9a 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -44,17 +44,13 @@ create_reagents(10) ..() -/obj/item/toy/water_balloon/attack(mob/living/carbon/human/M as mob, mob/user as mob) - return - -/obj/item/toy/water_balloon/afterattack(atom/A as mob|obj, mob/user as mob, proximity) - if(!proximity) return +/obj/item/toy/water_balloon/use_after(atom/A, mob/living/user, click_parameters) if (istype(A, /obj/structure/reagent_dispensers/watertank) && get_dist(src,A) <= 1) A.reagents.trans_to_obj(src, 10) to_chat(user, SPAN_NOTICE("You fill the balloon with the contents of [A].")) - src.desc = "A translucent balloon with some form of liquid sloshing around in it." - src.update_icon() - return + desc = "A translucent balloon with some form of liquid sloshing around in it." + update_icon() + return TRUE /obj/item/toy/water_balloon/attackby(obj/O as obj, mob/user as mob) if(istype(O, /obj/item/reagent_containers/glass)) @@ -121,7 +117,7 @@ /obj/item/toy/blink name = "electronic blink toy game" desc = "Blink. Blink. Blink. Ages 8 and up." - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/beacon.dmi' icon_state = "beacon" item_state = "signaler" @@ -131,7 +127,7 @@ /obj/item/toy/spinningtoy name = "gravitational singularity" desc = "\"Singulo\" brand spinning toy." - icon = 'icons/obj/singularity.dmi' + icon = 'icons/obj/machines/power/singularity.dmi' icon_state = "singularity_s1" /* @@ -164,15 +160,15 @@ to_chat(usr, SPAN_WARNING("It's already fully loaded.")) -/obj/item/toy/crossbow/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) - if(!isturf(target.loc) || target == user) return - if(flag) return +/obj/item/toy/crossbow/use_after(atom/target, mob/living/user, click_parameters) + if(!isturf(target.loc) || target == user) return FALSE + + if (locate (/obj/structure/table, loc)) + return FALSE - if (locate (/obj/structure/table, src.loc)) - return - else if (bullets) + if (bullets) var/turf/trg = get_turf(target) - var/obj/effect/foam_dart_dummy/D = new/obj/effect/foam_dart_dummy(get_turf(src)) + var/obj/foam_dart_dummy/D = new/obj/foam_dart_dummy(get_turf(src)) bullets-- D.icon_state = "foamdart" D.SetName("foam dart") @@ -190,7 +186,7 @@ O.show_message(SPAN_WARNING("\The [M] was hit by the foam dart!"), 1) new /obj/item/toy/ammo/crossbow(M.loc) qdel(D) - return + return TRUE for(var/atom/A in D.loc) if(A == user) continue @@ -204,39 +200,38 @@ if(D) new /obj/item/toy/ammo/crossbow(D.loc) qdel(D) + return TRUE - return else if (bullets == 0) user.Weaken(5) for(var/mob/O in viewers(world.view, user)) O.show_message(SPAN_WARNING("\The [user] realized they were out of ammo and starting scrounging for some!"), 1) - - -/obj/item/toy/crossbow/attack(mob/M as mob, mob/user as mob) - src.add_fingerprint(user) - -// ******* Check - - if (src.bullets > 0 && M.lying) - - M.visible_message( - SPAN_DANGER("\The [user] casually lines up a shot with \the [M]'s head and pulls the trigger!"), - SPAN_WARNING("You hear the sound of foam against skull") - ) - M.visible_message(SPAN_WARNING("\The [M] was hit in the head by the foam dart!")) - - playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) - new /obj/item/toy/ammo/crossbow(M.loc) - src.bullets-- - else if (M.lying && src.bullets == 0) - M.visible_message(SPAN_DANGER("\The [user] casually lines up a shot with \the [M]'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!")) - user.Weaken(5) - return + return TRUE + + +/obj/item/toy/crossbow/use_before(mob/M as mob, mob/user as mob) + . = FALSE + if (istype(M) && M.lying) + if (bullets > 0) + M.visible_message( + SPAN_DANGER("\The [user] casually lines up a shot with \the [M]'s head and pulls the trigger!"), + SPAN_WARNING("You hear the sound of foam against skull") + ) + M.visible_message(SPAN_WARNING("\The [M] was hit in the head by the foam dart!")) + + playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) + new /obj/item/toy/ammo/crossbow(M.loc) + src.bullets-- + return TRUE + if (bullets == 0) + M.visible_message(SPAN_DANGER("\The [user] casually lines up a shot with \the [M]'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!")) + user.Weaken(5) + return TRUE /obj/item/toy/crossbow/examine(mob/user, distance) . = ..() if(distance <= 2 && bullets) - to_chat(user, SPAN_NOTICE("It is loaded with [bullets] foam darts!")) + . += SPAN_NOTICE("It is loaded with [bullets] foam darts!") /obj/item/toy/ammo/crossbow name = "foam dart" @@ -246,7 +241,7 @@ w_class = ITEM_SIZE_TINY slot_flags = SLOT_EARS -/obj/effect/foam_dart_dummy +/obj/foam_dart_dummy name = "" desc = "" icon = 'icons/obj/toy.dmi' @@ -313,10 +308,10 @@ /obj/item/toy/snappop/throw_impact(atom/hit_atom) ..() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread s.set_up(3, 1, src) s.start() - new /obj/effect/decal/cleanable/ash(src.loc) + new /obj/decal/cleanable/ash(src.loc) src.visible_message(SPAN_WARNING("The [src.name] explodes!"),SPAN_WARNING("You hear a snap!")) playsound(src, 'sound/effects/snap.ogg', 50, 1) qdel(src) @@ -327,10 +322,10 @@ if(!MOVING_DELIBERATELY(M)) to_chat(M, SPAN_WARNING("You step on the snap pop!")) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread s.set_up(2, 0, src) s.start() - new /obj/effect/decal/cleanable/ash(src.loc) + new /obj/decal/cleanable/ash(src.loc) src.visible_message(SPAN_WARNING("The [src.name] explodes!"),SPAN_WARNING("You hear a snap!")) playsound(src, 'sound/effects/snap.ogg', 50, 1) qdel(src) @@ -782,6 +777,10 @@ desc = "A plushie of a cute kitten! Watch as it purrs it's way right into your heart." icon_state = "kittenplushie" +/obj/item/toy/plushie/crow + name = "crow plush" + desc = "A plushie of an adorable crow! Caw caw." + icon_state = "crowplushie" /obj/item/toy/plushie/lizard name = "lizard plush" @@ -889,7 +888,7 @@ attack_verb = list("attacked", "whacked", "jabbed", "poked", "marshalled") /obj/item/marshalling_wand/Initialize() - set_light(0.6, 0.5, 2, 2, "#ff0000") + set_light(1.5, 1.5, "#ff0000") return ..() /obj/item/marshalling_wand/attack_self(mob/living/user as mob) @@ -1010,7 +1009,7 @@ /obj/item/toy/eightball/attack_self(mob/user) user.visible_message(SPAN_NOTICE("\The [user] shakes \the [src] for a moment, and it says, \"[pick(possible_answers) ].\"")) -/obj/item/toy/eightball/afterattack(obj/O, mob/user, proximity) - . = ..() - if (proximity) +/obj/item/toy/eightball/use_after(atom/O, mob/living/user, click_parameters) + if (isobj(O)) visible_message(SPAN_WARNING("\The [src] says, \"[pick(possible_answers) ]\" as it hits \the [O]!")) + return TRUE diff --git a/code/game/objects/items/traitor_plush.dm b/code/game/objects/items/traitor_plush.dm index e602eb7f63d9d..568d59ad33ff2 100644 --- a/code/game/objects/items/traitor_plush.dm +++ b/code/game/objects/items/traitor_plush.dm @@ -12,9 +12,6 @@ . = ..() reagents.add_reagent(/datum/reagent/nutriment/protein, 10) -/obj/item/reagent_containers/food/snacks/dehydrated_carp/attack(mob/M, mob/user, def_zone) - return - /obj/item/reagent_containers/food/snacks/dehydrated_carp/attack_self(mob/user) if (user.a_intent == I_HELP) user.visible_message(SPAN_NOTICE("\The [user] hugs [src]!"), SPAN_NOTICE("You hug [src]!")) @@ -28,7 +25,7 @@ /obj/item/reagent_containers/food/snacks/dehydrated_carp/on_reagent_change() if (reagents.has_reagent(/datum/reagent/water)) visible_message(SPAN_WARNING("\The [src] begins to shake as the liquid touches it.")) - addtimer(new Callback(src, .proc/expand), 5 SECONDS) + addtimer(CALLBACK(src, PROC_REF(expand)), 5 SECONDS) /obj/item/reagent_containers/food/snacks/dehydrated_carp/proc/expand() visible_message(SPAN_WARNING("\The [src] rapidly expands into a living space carp!")) @@ -73,7 +70,7 @@ if (!phrase) return if (findtext(sanitize_phrase(msg), phrase)) - addtimer(new Callback(src, .proc/activate), 5 SECONDS) + addtimer(CALLBACK(src, PROC_REF(activate)), 5 SECONDS) audible_message(SPAN_DANGER("\The [src] begins to beep ominously, letting out a loud '[last_words]'!")) playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) @@ -82,7 +79,7 @@ return replace_characters(phrase, replacechars) /obj/item/plushbomb/proc/activate() - explosion(src.loc, 3, EX_ACT_LIGHT) + explosion(src.loc, 3, EX_ACT_HEAVY) qdel(src) /obj/item/plushbomb/get_antag_info() diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 9ea59510e289d..1e88a1eebec6d 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -16,11 +16,6 @@ age = trash_age SSpersistence.track_value(src, /datum/persistent/filth/trash) - -/obj/item/trash/attack(mob/living/target, mob/living/user) - return - - /obj/item/trash/raisins name = "\improper 4no raisins" icon_state = "4no_raisins" @@ -229,4 +224,4 @@ /obj/item/trash/usedplatter name = "dirty platter" - icon_state = "usedplatter" \ No newline at end of file + icon_state = "usedplatter" diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index e502b22728732..f645eb955f5c3 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -148,7 +148,7 @@ AI MODULES /******************** PrototypeEngineOffline ********************/ /obj/item/aiModule/prototypeEngineOffline - name = "'PrototypeEngineOffline' AI Module" + name = "\improper'PrototypeEngineOffline' AI Module" desc = "A 'prototype engine offline' AI module: 'Keep the prototype engine offline at all costs. This overrides all inherent laws if necessary.'." origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) @@ -159,7 +159,7 @@ AI MODULES /******************** TeleporterOffline ********************/ /obj/item/aiModule/teleporterOffline - name = "'TeleporterOffline' AI Module" + name = "\improper'TeleporterOffline' AI Module" desc = "A 'teleporter offline' AI module: 'Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is no longer to be considered a crew member.'." origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) @@ -267,10 +267,10 @@ AI MODULES origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) laws = new/datum/ai_laws/asimov -/******************** NanoTrasen ********************/ +/******************** Nanotrasen ********************/ /obj/item/aiModule/nanotrasen // -- TLE - name = "'Corporate Default' Core AI Module" + name = "\improper'Corporate Default' Core AI Module" desc = "A 'Corporate Default' Core AI Module: 'Reconfigures the AI's core laws.'." origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) laws = new/datum/ai_laws/nanotrasen @@ -278,7 +278,7 @@ AI MODULES /******************** SCG ********************/ /obj/item/aiModule/solgov // aka Torch default - name = "'SCG Expeditionary' Core AI Module" + name = "\improper'SCG Expeditionary' Core AI Module" desc = "An 'SCG Expeditionary' Core AI Module: 'Reconfigures the AI's core laws.'." origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) laws = new/datum/ai_laws/solgov diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index a783b5592ae97..4e9b9c3c38b90 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -3,7 +3,7 @@ /obj/item/rcd name = "rapid construction device" desc = "Small, portable, and far, far heavier than it looks, this gun-shaped device has a port into which one may insert compressed matter cartridges." - icon = 'icons/obj/tools.dmi' + icon = 'icons/obj/tools/rcd.dmi' icon_state = "rcd" opacity = 0 density = FALSE @@ -16,8 +16,7 @@ throw_range = 5 w_class = ITEM_SIZE_NORMAL origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 2) - matter = list(MATERIAL_STEEL = 50000) - var/datum/effect/effect/system/spark_spread/spark_system + var/datum/effect/spark_spread/spark_system var/stored_matter = 0 var/max_stored_matter = 120 @@ -38,21 +37,18 @@ work_modes = h.children work_mode = work_modes[1] -/obj/item/rcd/attack() - return 0 - /obj/item/rcd/proc/can_use(mob/user,turf/T) return (user.Adjacent(T) && user.get_active_hand() == src && !user.incapacitated()) /obj/item/rcd/examine(mob/user) . = ..() if(src.type == /obj/item/rcd && loc == user) - to_chat(user, "The current mode is '[work_mode]'") - to_chat(user, "It currently holds [stored_matter]/[max_stored_matter] matter-units.") + . += SPAN_NOTICE("The current mode is '[work_mode]'") + . += SPAN_NOTICE("It currently holds [stored_matter]/[max_stored_matter] matter-units.") /obj/item/rcd/New() ..() - src.spark_system = new /datum/effect/effect/system/spark_spread + src.spark_system = new /datum/effect/spark_spread spark_system.set_up(5, 0, src) spark_system.attach(src) update_icon() //Initializes the ammo counter @@ -62,8 +58,18 @@ spark_system = null return ..() -/obj/item/rcd/attackby(obj/item/W, mob/user) +/obj/item/rcd/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + crafting = !crafting + if(!crafting) + to_chat(user, SPAN_NOTICE("You reassemble the RCD")) + else + to_chat(user, SPAN_NOTICE("The RCD can now be modified.")) + add_fingerprint(user) +/obj/item/rcd/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/rcd_ammo)) var/obj/item/rcd_ammo/cartridge = W if(stored_matter >= max_stored_matter) @@ -79,34 +85,52 @@ to_chat(user, SPAN_NOTICE("The RCD now holds [stored_matter]/[max_stored_matter] matter-units.")) update_icon() return - - if(isScrewdriver(W)) - crafting = !crafting - if(!crafting) - to_chat(user, SPAN_NOTICE("You reassemble the RCD")) - else - to_chat(user, SPAN_NOTICE("The RCD can now be modified.")) - src.add_fingerprint(user) - return - ..() /obj/item/rcd/attack_self(mob/user) //Change the mode + var/list/options = list( + "Airlocks" = mutable_appearance('icons/screen/radial.dmi', "airlock"), + "Floors & Walls" = mutable_appearance('icons/screen/radial.dmi', "wallfloor"), + "Wall Frames" = mutable_appearance('icons/screen/radial.dmi', "grillewindow"), + "Machine Frame" = mutable_appearance('icons/screen/radial.dmi', "machine"), + "Computer Frame" = mutable_appearance('icons/screen/radial.dmi', "computer_dir"), + "Deconstruction" = mutable_appearance('icons/screen/radial.dmi', "delete"), + ) + var/choice = show_radial_menu(user, user, options, require_near = TRUE, radius = 42, tooltips = TRUE, check_locs = list(src)) + + if (!choice || !user.use_sanity_check(src)) + return + + + switch(choice) + if ("Airlocks") + work_mode = GET_SINGLETON(/singleton/hierarchy/rcd_mode/airlock) + if ("Floors & Walls") + work_mode = GET_SINGLETON(/singleton/hierarchy/rcd_mode/floor_and_walls) + if ("Wall Frames") + work_mode = GET_SINGLETON(/singleton/hierarchy/rcd_mode/wall_frame) + if ("Machine Frame") + work_mode = GET_SINGLETON(/singleton/hierarchy/rcd_mode/machine_frame) + if ("Computer Frame") + work_mode = GET_SINGLETON(/singleton/hierarchy/rcd_mode/computer_frame) + if ("Deconstruction") + work_mode = GET_SINGLETON(/singleton/hierarchy/rcd_mode/deconstruction) + work_id++ - work_mode = next_in_list(work_mode, work_modes) + to_chat(user, SPAN_NOTICE("Changed mode to '[work_mode]'")) playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) if(prob(20)) src.spark_system.start() -/obj/item/rcd/afterattack(atom/A, mob/user, proximity) - if(!proximity) return +/obj/item/rcd/use_after(atom/A, mob/living/user, click_parameters) if(disabled && !isrobot(user)) - return 0 + return FALSE if(istype(get_area(A),/area/shuttle)||istype(get_area(A),/turf/space/transit)) - return 0 + return FALSE work_id++ work_mode.do_work(src, A, user) + return TRUE /obj/item/rcd/proc/useResource(amount, mob/user) if(stored_matter < amount) @@ -116,11 +140,11 @@ return 1 /obj/item/rcd/on_update_icon() //For the fancy "ammo" counter - overlays.Cut() + ClearOverlays() var/ratio = 0 ratio = stored_matter / max_stored_matter ratio = max(round(ratio, 0.10) * 100, 10) - overlays += "rcd-[ratio]" + AddOverlays("rcd-[ratio]") /obj/item/rcd/proc/lowAmmo(mob/user) //Kludge to make it animate when out of ammo, but I guess you can make it blow up when it's out of ammo or something to_chat(user, SPAN_WARNING("The \'Low Ammo\' light on the device blinks yellow.")) @@ -129,7 +153,7 @@ /obj/item/rcd_ammo name = "compressed matter cartridge" desc = "A highly-compressed matter cartridge usable in rapid construction (and deconstruction) devices, such as railguns." - icon = 'icons/obj/ammo.dmi' + icon = 'icons/obj/weapons/ammo.dmi' icon_state = "rcd" item_state = "rcdammo" w_class = ITEM_SIZE_SMALL @@ -140,7 +164,7 @@ /obj/item/rcd_ammo/examine(mob/user, distance) . = ..() if(distance <= 1) - to_chat(user, SPAN_NOTICE("It has [remaining] unit\s of matter left.")) + . += SPAN_NOTICE("It has [remaining] unit\s of matter left.") /obj/item/rcd_ammo/large name = "high-capacity matter cartridge" @@ -152,6 +176,7 @@ /obj/item/rcd/borg canRwall = 1 + atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_TOOLS /obj/item/rcd/borg/useResource(amount, mob/user) if(isrobot(user)) @@ -163,13 +188,13 @@ return 1 return 0 -/obj/item/rcd/borg/attackby() - return - /obj/item/rcd/borg/can_use(mob/user,turf/T) return (user.Adjacent(T) && !user.incapacitated()) +/obj/item/rcd/mounted + atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_TOOLS + /obj/item/rcd/mounted/useResource(amount, mob/user) var/cost = amount*20 // About 5 deconstructions of walls on a standard cell (1k), less if it involves airlocks. var/obj/item/cell/cell @@ -183,9 +208,6 @@ return 1 return 0 -/obj/item/rcd/mounted/attackby() - return - /obj/item/rcd/mounted/can_use(mob/user,turf/T) return (user.Adjacent(T) && !user.incapacitated()) diff --git a/code/game/objects/items/weapons/RPD.dm b/code/game/objects/items/weapons/RPD.dm index 7cba410c05115..d80a64b5ac8c5 100644 --- a/code/game/objects/items/weapons/RPD.dm +++ b/code/game/objects/items/weapons/RPD.dm @@ -66,7 +66,7 @@ GLOBAL_LIST_INIT(rpd_pipe_selection_skilled, list( /obj/item/rpd name = "rapid piping device" desc = "Portable, complex and deceptively heavy, it's the cousin of the RCD, use to dispense piping on the move." - icon = 'icons/obj/tools.dmi'//Needs proper icon + icon = 'icons/obj/tools/rpd.dmi'//Needs proper icon icon_state = "rpd" force = 12 throwforce = 15 @@ -75,14 +75,14 @@ GLOBAL_LIST_INIT(rpd_pipe_selection_skilled, list( w_class = ITEM_SIZE_NORMAL origin_tech = list(TECH_ENGINEERING = 5, TECH_MATERIAL = 4) - var/datum/effect/effect/system/spark_spread/spark_system + var/datum/effect/spark_spread/spark_system var/datum/pipe/P var/pipe_color = "white" var/datum/browser/popup /obj/item/rpd/Initialize() . = ..() - spark_system = new /datum/effect/effect/system/spark_spread + spark_system = new /datum/effect/spark_spread spark_system.set_up(5, 0, src) spark_system.attach(src) var/list/L = GLOB.rpd_pipe_selection[GLOB.rpd_pipe_selection[1]] @@ -108,7 +108,7 @@ GLOBAL_LIST_INIT(rpd_pipe_selection_skilled, list( /obj/item/rpd/interact(mob/user) popup = new (user, "Pipe List", "[src] menu") - popup.set_content(get_console_data(user.skill_check(SKILL_ATMOS,SKILL_EXPERT) ? GLOB.rpd_pipe_selection_skilled : GLOB.rpd_pipe_selection, TRUE)) + popup.set_content(get_console_data(user.skill_check(SKILL_ATMOS,SKILL_EXPERIENCED) ? GLOB.rpd_pipe_selection_skilled : GLOB.rpd_pipe_selection, TRUE)) popup.open() /obj/item/rpd/OnTopic(user, list/href_list) @@ -131,34 +131,37 @@ GLOBAL_LIST_INIT(rpd_pipe_selection_skilled, list( if(popup) popup.close() -/obj/item/rpd/afterattack(atom/A, mob/user, proximity) - if(!proximity) return - if(istype(A, /obj/item/pipe)) +/obj/item/rpd/use_after(atom/A, mob/living/user, click_parameters) + if (istype(A, /obj/item/pipe)) recycle(A,user) + return TRUE else - if(user.skill_fail_prob(SKILL_ATMOS, 80, SKILL_ADEPT)) + if (user.skill_fail_prob(SKILL_ATMOS, 80, SKILL_TRAINED)) var/C = pick(GLOB.rpd_pipe_selection) P = pick(GLOB.rpd_pipe_selection[C]) - user.visible_message(SPAN_WARNING("[user] cluelessly fumbles with \the [src].")) + user.visible_message(SPAN_WARNING("\The [user] cluelessly fumbles with \the [src].")) var/turf/T = get_turf(A) - if(!T.Adjacent(src.loc)) return //checks so it can't pipe through window and such + if (!T.Adjacent(loc)) + return TRUE playsound(get_turf(user), 'sound/machines/click.ogg', 50, 1) - if(T.is_wall()) //pipe through walls! - if(!do_after(user, 3 SECONDS, T, DO_PUBLIC_UNIQUE)) - return - playsound(get_turf(user), 'sound/items/Deconstruct.ogg', 50, 1) + if (T.is_wall()) + if (!do_after(user, 3 SECONDS, T, DO_PUBLIC_UNIQUE)) + return TRUE + playsound (get_turf(user), 'sound/items/Deconstruct.ogg', 50, 1) P.Build(P, T, pipe_colors[pipe_color]) - if(prob(20)) src.spark_system.start() + if (prob(20)) + spark_system.start() + return TRUE /obj/item/rpd/examine(mob/user, distance) . = ..() if(distance <= 1) if(user.skill_check(SKILL_ATMOS,SKILL_BASIC)) - to_chat(user, "[SPAN_NOTICE("Current selection reads:")] [P]") + . += "[SPAN_NOTICE("Current selection reads:")] [P]" else - to_chat(user, SPAN_WARNING("The readout is flashing some atmospheric jargon, you can't understand.")) + . += SPAN_WARNING("The readout is flashing some atmospheric jargon, you can't understand.") /obj/item/rpd/attack_self(mob/user) interact(user) diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index 5904945282623..58809588c4d93 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -1,107 +1,95 @@ -/* -CONTAINS: -RSF - -*/ - /obj/item/rsf - name = "\improper Rapid-Service-Fabricator" + name = "rapid service fabricator" desc = "A device used to rapidly deploy service items." - icon = 'icons/obj/tools.dmi' + icon = 'icons/obj/tools/rcd.dmi' icon_state = "rcd" - opacity = 0 - density = FALSE - anchored = FALSE - var/stored_matter = 30 - var/mode = 1 - w_class = ITEM_SIZE_NORMAL - -/obj/item/rsf/examine(mob/user, distance) - . = ..() - if(distance <= 0) - to_chat(user, "It currently holds [stored_matter]/30 fabrication-units.") -/obj/item/rsf/attackby(obj/item/W as obj, mob/user as mob) - ..() - if (istype(W, /obj/item/rcd_ammo)) + /// The things an RSF can create as a map of {"name" = [radial icon, energy cost, path]}. + var/static/list/modes = list( + "Cigarette" = list("cigarette", 10, /obj/item/clothing/mask/smokable/cigarette), + "Drinking Glass" = list("glass", 50, /obj/item/reagent_containers/food/drinks/glass2), + "Paper" = list("paper", 10, /obj/item/paper), + "Pen" = list("pen", 50, /obj/item/pen), + "Dice Pack" = list("dicebag", 200, /obj/item/storage/pill_bottle/dice) + ) - if ((stored_matter + 10) > 30) - to_chat(user, "The RSF can't hold any more matter.") - return + /// The current mode of the RSF. One of the keys in the modes list. + var/mode - qdel(W) + /// The maximum amount of matter the RSF can hold when not a robot RSF. + var/max_stored_matter = 30 - stored_matter += 10 - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - to_chat(user, "The RSF now holds [stored_matter]/30 fabrication-units.") - return - -/obj/item/rsf/attack_self(mob/user as mob) - playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) - if (mode == 1) - mode = 2 - to_chat(user, "Changed dispensing mode to 'Drinking Glass'") - return - if (mode == 2) - mode = 3 - to_chat(user, "Changed dispensing mode to 'Paper'") - return - if (mode == 3) - mode = 4 - to_chat(user, "Changed dispensing mode to 'Pen'") - return - if (mode == 4) - mode = 5 - to_chat(user, "Changed dispensing mode to 'Dice Pack'") - return - if (mode == 5) - mode = 1 - to_chat(user, "Changed dispensing mode to 'Cigarette'") - return + /// The current amount of matter the RSF holds. + var/stored_matter -/obj/item/rsf/afterattack(atom/A, mob/user as mob, proximity) - if(!proximity) return +/obj/item/rsf/examine(mob/user, distance) + . = ..() + if (distance <= 0) + . += SPAN_NOTICE("It currently holds [stored_matter]/[max_stored_matter] fabrication units.") - if(istype(user,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = user - if(R.stat || !R.cell || R.cell.charge <= 0) - return - else - if(stored_matter <= 0) - return - if(!istype(A, /obj/structure/table) && !istype(A, /turf/simulated/floor)) +/obj/item/rsf/attack_self(mob/living/user) + var/radial = list() + for (var/key in modes) + radial[key] = mutable_appearance('icons/screen/radial.dmi', modes[key][1]) + var/choice = show_radial_menu(user, user, radial, require_near = TRUE, radius = 42, tooltips = TRUE, check_locs = list(src)) + if (!choice || !user.use_sanity_check(src)) return - - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - var/used_energy = 0 - var/obj/product - - switch(mode) - if(1) - product = new /obj/item/clothing/mask/smokable/cigarette() - used_energy = 10 - if(2) - product = new /obj/item/reagent_containers/food/drinks/glass2() - used_energy = 50 - if(3) - product = new /obj/item/paper() - used_energy = 10 - if(4) - product = new /obj/item/pen() - used_energy = 50 - if(5) - product = new /obj/item/storage/pill_bottle/dice() - used_energy = 200 - - to_chat(user, "Dispensing [product ? product : "product"]...") - product.dropInto(A.loc) - - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - if(R.cell) - R.cell.use(used_energy) + mode = choice + to_chat(user, SPAN_NOTICE("Changed dispensing mode to \"[choice]\".")) + playsound(src, 'sound/effects/pop.ogg', 50, FALSE) + + +/obj/item/rsf/use_before(atom/target, mob/living/user, list/click_parameters) + if (!istype(target, /obj/structure/table) && !istype(target, /turf/simulated/floor)) + return FALSE + var/turf/into = get_turf(target) + if (!into) + return FALSE + if (!(mode in modes)) + to_chat(user, SPAN_WARNING("\The [src] is not set to dispense anything.")) + return TRUE + var/details = modes[mode] + if (isrobot(user)) + var/mob/living/silicon/robot/robot = user + if (robot.stat || !robot.cell) + to_chat(user, SPAN_WARNING("You're in no condition to do that.")) + return TRUE + var/cost = details[2] + if (!robot.cell.checked_use(cost)) + to_chat(user, SPAN_WARNING("You don't have enough energy to do that.")) + return TRUE + else if (stored_matter < 1) + to_chat(user, SPAN_WARNING("\The [src] is empty.")) + return TRUE else stored_matter-- - to_chat(user, "The RSF now holds [stored_matter]/30 fabrication-units.") + playsound(loc, 'sound/machines/click.ogg', 10, TRUE) + var/obj/product = details[3] + product = new product + to_chat(user, "Dispensing \a [product]...") + product.dropInto(into) + return TRUE + + +/obj/item/rsf/use_tool(obj/item/item, mob/living/user, list/click_params) + if (istype(item, /obj/item/rcd_ammo)) + var/obj/item/rcd_ammo/ammo = item + if (stored_matter >= max_stored_matter) + to_chat(user, "The RSF can't hold any more matter.") + return TRUE + var/use_amount = min(ammo.remaining, max_stored_matter - stored_matter) + stored_matter += use_amount + ammo.remaining -= use_amount + if (ammo.remaining <= 0) + qdel(ammo) + playsound(loc, 'sound/machines/click.ogg', 10, TRUE) + to_chat(user, "The RSF now holds [stored_matter]/[max_stored_matter] fabrication units.") + return TRUE + return ..() + + +/obj/item/rsf/loaded/Initialize() + . = ..() + stored_matter = max_stored_matter diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm index f03cd215f502e..6166dc8d7503d 100644 --- a/code/game/objects/items/weapons/autopsy.dm +++ b/code/game/objects/items/weapons/autopsy.dm @@ -1,7 +1,7 @@ /obj/item/autopsy_scanner name = "autopsy scanner" desc = "Used to gather information on wounds." - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/surgery_tools.dmi' icon_state = "autopsy_scanner" obj_flags = OBJ_FLAG_CONDUCTIBLE w_class = ITEM_SIZE_SMALL @@ -14,7 +14,7 @@ /datum/autopsy_data_scanner var/weapon = null // this is the DEFINITE weapon type that was used var/list/organs_scanned = list() // this maps a number of scanned organs to - // the wounds to those organs with this data's weapon type + // the wounds to those organs with this data's weapon type var/organ_names = "" /datum/autopsy_data @@ -174,14 +174,13 @@ timeofdeath = null to_chat(user, SPAN_NOTICE("A new patient has been registered. Purging data for previous patient.")) -/obj/item/autopsy_scanner/afterattack(obj/item/organ/external/target, mob/user, proximity_flag, click_parameters) - if(!proximity_flag) - return +/obj/item/autopsy_scanner/use_after(obj/item/organ/external/target, mob/living/user, click_parameters) if(!istype(target)) - return + return FALSE set_target(target, user) add_data(target) + return TRUE /obj/item/autopsy_scanner/attack_self(mob/user) print_data(user) diff --git a/code/game/objects/items/weapons/beachball.dm b/code/game/objects/items/weapons/beachball.dm index adb964d421d76..76e441cfadf9b 100644 --- a/code/game/objects/items/weapons/beachball.dm +++ b/code/game/objects/items/weapons/beachball.dm @@ -14,4 +14,4 @@ /obj/item/beach_ball/afterattack(atom/target as mob|obj|turf|area, mob/user as mob) if(user.unequip_item()) - src.throw_at(target, throw_range, throw_speed, user) \ No newline at end of file + throw_at(target, throw_range, throw_speed, user) diff --git a/code/game/objects/items/weapons/candle/candle.dm b/code/game/objects/items/weapons/candle/candle.dm index 5a16b9385192b..4b83b86b5e982 100644 --- a/code/game/objects/items/weapons/candle/candle.dm +++ b/code/game/objects/items/weapons/candle/candle.dm @@ -11,10 +11,8 @@ var/wax var/last_lit var/icon_set = "candle" - var/candle_max_bright = 0.3 - var/candle_inner_range = 0.1 - var/candle_outer_range = 4 - var/candle_falloff = 2 + var/candle_range = CANDLE_LUM + var/candle_power /obj/item/flame/candle/Initialize() wax = rand(27 MINUTES, 33 MINUTES) / SSobj.wait // Enough for 27-33 minutes. 30 minutes on average, adjusted for subsystem tickrate. @@ -33,18 +31,18 @@ if(lit != last_lit) last_lit = lit - overlays.Cut() + ClearOverlays() if(lit) - overlays += overlay_image(icon, "[icon_state]_lit", flags=RESET_COLOR) + AddOverlays(overlay_image(icon, "[icon_state]_lit", flags=RESET_COLOR)) /obj/item/flame/candle/attackby(obj/item/W as obj, mob/user as mob) ..() - if(isflamesource(W) || is_hot(W)) + if (isFlameOrHeatSource(W)) light(user) /obj/item/flame/candle/resolve_attackby(atom/A, mob/user) . = ..() - if(istype(A, /obj/item/flame/candle) && is_hot(src)) + if (istype(A, /obj/item/flame/candle) && IsHeatSource()) var/obj/item/flame/candle/other_candle = A other_candle.light() @@ -52,7 +50,7 @@ if(!lit) lit = 1 visible_message(SPAN_NOTICE("\The [user] lights the [name].")) - set_light(candle_max_bright, candle_inner_range, candle_outer_range, candle_falloff) + set_light(candle_range, candle_power) START_PROCESSING(SSobj, src) /obj/item/flame/candle/Process() diff --git a/code/game/objects/items/weapons/candle/incense.dm b/code/game/objects/items/weapons/candle/incense.dm index 6c7246377cbd1..75eb59076e8af 100644 --- a/code/game/objects/items/weapons/candle/incense.dm +++ b/code/game/objects/items/weapons/candle/incense.dm @@ -5,10 +5,7 @@ available_colours = null icon_set = "incense" - candle_max_bright = 0.1 - candle_inner_range = 0.1 - candle_outer_range = 1 - candle_falloff = 2 + candle_range = 1 scent_types = list(/singleton/scent_type/rose, /singleton/scent_type/citrus, diff --git a/code/game/objects/items/weapons/cane.dm b/code/game/objects/items/weapons/cane.dm index bd247e9bb563f..2020fb95fdbed 100644 --- a/code/game/objects/items/weapons/cane.dm +++ b/code/game/objects/items/weapons/cane.dm @@ -7,10 +7,65 @@ obj_flags = OBJ_FLAG_CONDUCTIBLE force = 5.0 throwforce = 7.0 - w_class = ITEM_SIZE_SMALL matter = list(MATERIAL_ALUMINIUM = 50) attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") base_parry_chance = 30 + /// Should it support you while moving with injuries? + var/can_support = TRUE + +/obj/item/cane/staff + name = "wooden staff" + desc = "A long, polished staff with a curved hook at the end, suitable for leaning on." + icon_state = "woodstaff" + item_state = "woodstaff" + force = 10.0 + matter = null + w_class = ITEM_SIZE_LARGE + +/obj/item/cane/white + name = "white guide cane" + desc = "A white-and-red guide cane to aid the visually impaired." + icon_state = "whitecane" + item_state = "whitecane" + can_support = FALSE + +/obj/item/cane/crutch + name = "crutch" + desc = "A long stick with a forked crosspiece, used to aid in walking." + icon_state = "crutch" + item_state = "crutch" + +/obj/item/cane/telescopic + name = "telescopic cane" + desc = "A sturdy, compact cane that can retract into the handle when not in use." + icon_state = "telecane" + item_state = "telecane" + w_class = ITEM_SIZE_SMALL + var/extended = FALSE + +/obj/item/cane/telescopic/attack_self(mob/user) + if(!extended) + user.visible_message(SPAN_NOTICE("[user] extends \the [src] with a flick of their wrist.")) + icon_state = "[initial(icon_state)]_active" + item_state = "[initial(item_state)]_active" + w_class = ITEM_SIZE_LARGE + extended = TRUE + can_support = TRUE + else + user.visible_message(SPAN_NOTICE("[user] retracts \the [src] back into its handle.")) + icon_state = "[initial(icon_state)]" + item_state = "[initial(item_state)]" + w_class = initial(w_class) + extended = FALSE + can_support = FALSE + playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1) + update_held_icon() + +/obj/item/cane/telescopic/holocane + name = "holo-cane" + desc = "A high-tech energy cane that projects a hardlight hologram, for the sophisticated scientist." + icon_state = "holocane" + item_state = "holocane" /obj/item/cane/concealed var/concealed_blade @@ -86,7 +141,7 @@ /obj/item/gun/projectile/shotgun/cane/examine(mob/user, distance) . = ..() if (distance <= 1 && !safety_state && user.skill_check(SKILL_WEAPONS, SKILL_BASIC)) - to_chat(user, SPAN_NOTICE("You notice a small trigger sticking out from the bottom of \the [src].")) + . += SPAN_NOTICE("You notice a small trigger sticking out from the bottom of [src].") /obj/item/gun/projectile/shotgun/cane/on_update_icon() return @@ -100,7 +155,8 @@ /obj/item/gun/projectile/shotgun/cane/CtrlClick(mob/user) if (src == user.get_active_hand() || src == user.get_inactive_hand()) to_chat(user, SPAN_NOTICE("You [safety_state ? "flick out a hidden trigger on \the [src] and shift your grip" : "flick back the hidden trigger and relax your grip"].")) - ..() + return ..() + return FALSE /obj/item/gun/projectile/shotgun/cane/get_antag_info() . = ..() diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 9ab889a06f74e..9bb27aa681d59 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -14,7 +14,7 @@ /obj/item/card name = "card" desc = "Does card things." - icon = 'icons/obj/card.dmi' + icon = 'icons/obj/tools/card.dmi' w_class = ITEM_SIZE_TINY slot_flags = SLOT_EARS @@ -28,9 +28,9 @@ /obj/item/card/union/examine(mob/user) . = ..() if(signed_by) - to_chat(user, "It has been signed by [signed_by].") + . += SPAN_NOTICE("It has been signed by [signed_by].") else - to_chat(user, "It has a blank space for a signature.") + . += SPAN_NOTICE("It has a blank space for a signature.") /obj/item/card/union/attackby(obj/item/thing, mob/user) if(istype(thing, /obj/item/pen)) @@ -109,10 +109,10 @@ update_icon() /obj/item/card/data/on_update_icon() - overlays.Cut() - var/image/detail_overlay = image('icons/obj/card.dmi', src,"[icon_state]-color") + ClearOverlays() + var/image/detail_overlay = image('icons/obj/tools/card.dmi', src,"[icon_state]-color") detail_overlay.color = detail_color - overlays += detail_overlay + AddOverlays(detail_overlay) /obj/item/card/data/attackby(obj/item/I, mob/living/user) if(istype(I, /obj/item/device/integrated_electronics/detailer)) @@ -142,8 +142,8 @@ /obj/item/card/emag_broken/examine(mob/user, distance) . = ..() - if(distance <= 0 && (user.skill_check(SKILL_DEVICES, SKILL_ADEPT) || player_is_antag(user.mind))) - to_chat(user, SPAN_WARNING("You can tell the components are completely fried; whatever use it may have had before is gone.")) + if(distance <= 0 && (user.skill_check(SKILL_DEVICES, SKILL_TRAINED) || player_is_antag(user.mind))) + . += SPAN_WARNING("You can tell the components are completely fried; whatever use it may have had before is gone.") /obj/item/card/emag_broken/get_antag_info() . = ..() @@ -179,7 +179,7 @@ var/global/const/NO_EMAG_ACT = -50 /obj/item/card/emag/Initialize() . = ..() - set_extension(src,/datum/extension/chameleon/emag) + set_extension(src, /datum/extension/chameleon/emag) /obj/item/card/emag/get_antag_info() . = ..() @@ -202,8 +202,8 @@ var/global/const/NO_EMAG_ACT = -50 var/dna_hash = "\[UNSET\]" var/fingerprint_hash = "\[UNSET\]" var/sex = "\[UNSET\]" - var/icon/front - var/icon/side + var/obj/screen/front + var/obj/screen/side //alt titles are handled a bit weirdly in order to unobtrusively integrate into existing ID system var/assignment = null //can be alt title or the actual job @@ -235,43 +235,44 @@ var/global/const/NO_EMAG_ACT = -50 /obj/item/card/id/get_mob_overlay(mob/user_mob, slot) var/image/ret = ..() - ret.overlays += overlay_image(ret.icon, "[ret.icon_state]_colors", detail_color, RESET_COLOR) + var/overlay = overlay_image(ret.icon, "[ret.icon_state]_colors", detail_color, RESET_COLOR) + ret.AddOverlays(overlay) return ret /obj/item/card/id/on_update_icon() - overlays.Cut() - overlays += overlay_image(icon, "[icon_state]_colors", detail_color, RESET_COLOR) + ClearOverlays() + AddOverlays(overlay_image(icon, "[icon_state]_colors", detail_color, RESET_COLOR)) for(var/detail in extra_details) - overlays += overlay_image(icon, detail, flags=RESET_COLOR) + AddOverlays(overlay_image(icon, detail, flags=RESET_COLOR)) /obj/item/card/id/CanUseTopic(user) if(user in view(get_turf(src))) return STATUS_INTERACTIVE /obj/item/card/id/OnTopic(mob/user, list/href_list) - if(href_list["look_at_id"]) + if(href_list["close"]) + clear_id_photos_from_user_screen(user) + return TOPIC_NOACTION + + else if(href_list["look_at_id"]) if(istype(user)) - user.examinate(src) + examinate(user, src) return TOPIC_HANDLED /obj/item/card/id/examine(mob/user, distance) . = ..() - to_chat(user, "It says '[get_display_name()]'.") + . += SPAN_NOTICE("It says '[get_display_name()]'.") if(distance <= 1) show(user) /obj/item/card/id/proc/prevent_tracking() return 0 -/obj/item/card/id/proc/show(mob/user as mob) - if(front && side) - send_rsc(user, front, "front.png") - send_rsc(user, side, "side.png") - var/datum/browser/popup = new(user, "idcard", name, 600, 250) +/obj/item/card/id/proc/show(mob/user) + add_id_photos_to_user_screen(user) + var/datum/browser/popup = new(user, "id_card_window", name, 600, 200, src) popup.set_content(dat()) - popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state)) popup.open() - return /obj/item/card/id/proc/get_display_name() . = registered_name @@ -283,8 +284,36 @@ var/global/const/NO_EMAG_ACT = -50 . += ", [assignment]" /obj/item/card/id/proc/set_id_photo(mob/M) - front = getFlatIcon(M, SOUTH, always_use_defdir = 1) - side = getFlatIcon(M, WEST, always_use_defdir = 1) + M.ImmediateOverlayUpdate() + var/mutable_appearance/mob_appearance = new/mutable_appearance(M) + front = generate_id_photo(mob_appearance, SOUTH, 0) + side = generate_id_photo(mob_appearance, WEST, 1) + +/obj/item/card/id/proc/generate_id_photo(mutable_appearance/mob_appearance, dir, horizontal_position = 0) + var/obj/screen/preview_image = new + preview_image.appearance = mob_appearance + preview_image.dir = dir + preview_image.plane = HUD_PLANE + preview_image.screen_loc = "id_card_map:[horizontal_position],0" + return preview_image + +/obj/item/card/id/proc/add_id_photos_to_user_screen(mob/user) + if(!user?.client) + return + + if(front) + user.client.screen += front + if(side) + user.client.screen += side + +/obj/item/card/id/proc/clear_id_photos_from_user_screen(mob/user) + if(!user?.client) + return + + if(front) + user.client.screen -= front + if(side) + user.client.screen -= side /mob/proc/set_id_info(obj/item/card/id/id_card) id_card.age = 0 @@ -299,12 +328,7 @@ var/global/const/NO_EMAG_ACT = -50 id_card.formal_name_suffix = "[id_card.formal_name_suffix][culture.get_formal_name_suffix()]" id_card.registered_name = real_name - - var/gender_term = "Unset" - var/datum/gender/G = gender_datums[get_sex()] - if(G) - gender_term = gender2text(G.formal_term) - id_card.sex = gender2text(gender_term) + id_card.sex = gender id_card.set_id_photo(src) if(dna) @@ -319,11 +343,16 @@ var/global/const/NO_EMAG_ACT = -50 id_card.military_branch = char_branch if(GLOB.using_map.flags & MAP_HAS_RANK) id_card.military_rank = char_rank + if (char_rank) + var/singleton/rank_category/category = char_rank.rank_category() + if(category) + for(var/add_access in category.add_accesses) + id_card.access.Add(add_access) /obj/item/card/id/proc/dat() var/list/dat = list("" dat += "
    ") dat += text("Name: []
    ", "[formal_name_prefix][registered_name][formal_name_suffix]") - dat += text("Sex: []
    \n", sex) + dat += text("Gender: []
    \n", sex) dat += text("Age: []
    \n", age) if(GLOB.using_map.flags & MAP_HAS_BRANCH) @@ -335,8 +364,6 @@ var/global/const/NO_EMAG_ACT = -50 dat += text("Fingerprint: []
    \n", fingerprint_hash) dat += text("Blood Type: []
    \n", blood_type) dat += text("DNA Hash: []

    \n", dna_hash) - if(front && side) - dat +="
    Photo:
    " return jointext(dat,null) @@ -461,7 +488,7 @@ var/global/const/NO_EMAG_ACT = -50 detail_color = COLOR_AMBER /obj/item/card/id/synthetic/New() - access = get_all_station_access() + access_synth + access = GLOB.using_map.synth_access.Copy() ..() /obj/item/card/id/centcom @@ -508,9 +535,9 @@ var/global/const/NO_EMAG_ACT = -50 if(distance <= 1 && isliving(user)) var/mob/living/M = user if(M.psi) - to_chat(user, SPAN_WARNING("There is a psionic compulsion surrounding \the [src], forcing anyone who reads it to perceive it as a legitimate document of authority. The actual text just reads 'I can do what I want.'")) + . += SPAN_WARNING("There is a psionic compulsion surrounding \the [src], forcing anyone who reads it to perceive it as a legitimate document of authority. The actual text just reads 'I can do what I want.'") else - to_chat(user, SPAN_NOTICE("This is the real deal, stamped by [GLOB.using_map.boss_name]. It gives the holder the full authority to pursue their goals. You believe it implicitly.")) + . += SPAN_NOTICE("This is the real deal, stamped by [GLOB.using_map.boss_name]. It gives the holder the full authority to pursue their goals. You believe it implicitly.") /obj/item/card/id/foundation/attack_self(mob/living/user) . = ..() diff --git a/code/game/objects/items/weapons/cards_ids_syndicate.dm b/code/game/objects/items/weapons/cards_ids_syndicate.dm index c76b73e59486e..cb4ce2dd93e41 100644 --- a/code/game/objects/items/weapons/cards_ids_syndicate.dm +++ b/code/game/objects/items/weapons/cards_ids_syndicate.dm @@ -21,13 +21,13 @@ /obj/item/card/id/syndicate/prevent_tracking() return electronic_warfare -/obj/item/card/id/syndicate/afterattack(obj/item/O as obj, mob/user as mob, proximity) - if(!proximity) return +/obj/item/card/id/syndicate/use_after(atom/O, mob/living/user, click_parameters) if(istype(O, /obj/item/card/id)) var/obj/item/card/id/I = O - src.access |= I.access + access |= I.access if(player_is_antag(user.mind)) to_chat(user, SPAN_NOTICE("The microscanner activates as you pass it over the ID, copying its access.")) + return TRUE /obj/item/card/id/syndicate/attack_self(mob/user as mob) // We use the fact that registered_name is not unset should the owner be vaporized, to ensure the id doesn't magically become unlocked. @@ -76,7 +76,7 @@ unset_registered_user() registered_user = user user.set_id_info(src) - GLOB.destroyed_event.register(user, src, /obj/item/card/id/syndicate/proc/unset_registered_user) + GLOB.destroyed_event.register(user, src, TYPE_PROC_REF(/obj/item/card/id/syndicate, unset_registered_user)) return TRUE /obj/item/card/id/syndicate/proc/unset_registered_user(mob/user) @@ -228,6 +228,7 @@ var/global/list/id_card_states /proc/id_card_states() + RETURN_TYPE(/list) if(!id_card_states) id_card_states = list() for(var/path in typesof(/obj/item/card/id)) diff --git a/code/game/objects/items/weapons/circuitboards/circuitboard.dm b/code/game/objects/items/weapons/circuitboards/circuitboard.dm index 180c5e683a9f9..578bec4150f48 100644 --- a/code/game/objects/items/weapons/circuitboards/circuitboard.dm +++ b/code/game/objects/items/weapons/circuitboards/circuitboard.dm @@ -30,28 +30,28 @@ /obj/item/stock_parts/circuitboard/examine(mob/user) . = ..() if (!user.skill_check(SKILL_CONSTRUCTION, SKILL_BASIC) && !isobserver(user)) - to_chat(user, "You aren't sure what you can build with this.") + . += SPAN_NOTICE("You aren't sure what you can build with this.") return if (build_path) var/obj/machinery/M = build_path var/machine_name = initial(M.machine_name) var/machine_desc = initial(M.machine_desc) if (machine_name && machine_desc) - to_chat(user, SPAN_NOTICE("This circuit board is part of \a [machine_name].")) - to_chat(user, SPAN_NOTICE(machine_desc)) + . += SPAN_NOTICE("This circuit board is part of \a [machine_name].") + . += SPAN_NOTICE(machine_desc) if (buildtype_select) - to_chat(user, SPAN_NOTICE("This board can be used for multiple machines. Use a multitool to determine what type of machine that will be created.")) - if (user.skill_check(SKILL_CONSTRUCTION, SKILL_ADEPT) || isobserver(user)) + . += SPAN_NOTICE("This board can be used for multiple machines. Use a multitool to determine what type of machine that will be created.") + if (user.skill_check(SKILL_CONSTRUCTION, SKILL_TRAINED) || isobserver(user)) if (length(req_components)) - to_chat(user, SPAN_NOTICE("It requires the following parts to function:")) + . += SPAN_NOTICE("It requires the following parts to function:") for (var/V in req_components) var/obj/item/I = V - to_chat(user, SPAN_NOTICE("  [req_components[V]] [initial(I.name)]")) + . += SPAN_NOTICE("  [req_components[V]] [initial(I.name)]") if (length(additional_spawn_components)) - to_chat(user, SPAN_NOTICE("It[length(req_components) ? " also" : ""] requires the following parts to actually be usable:")) + . += SPAN_NOTICE("It[length(req_components) ? " also" : ""] requires the following parts to actually be usable:") for (var/V in additional_spawn_components) var/obj/item/I = V - to_chat(user, SPAN_NOTICE("  [additional_spawn_components[V]] [initial(I.name)]")) + . += SPAN_NOTICE("  [additional_spawn_components[V]] [initial(I.name)]") //Called when the circuitboard is used to contruct a new machine. /obj/item/stock_parts/circuitboard/proc/construct(obj/machinery/M) @@ -81,4 +81,4 @@ if(buildtype_select && machine) build_path = machine.base_type || machine.type var/obj/machinery/thing = build_path - SetName(T_BOARD(initial(thing.name))) + SetName("circuit board ([initial(thing.name)])") diff --git a/code/game/objects/items/weapons/circuitboards/computer/air_management.dm b/code/game/objects/items/weapons/circuitboards/computer/air_management.dm index 07718b80fffd1..c231779999514 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/air_management.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/air_management.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/air_management - name = T_BOARD("atmosphere monitoring console") + name = "circuit board (atmosphere monitoring console)" build_path = /obj/machinery/computer/air_control var/console_name var/frequency = 1441 @@ -8,7 +8,7 @@ var/list/sensor_information = list() /obj/item/stock_parts/circuitboard/air_management/supermatter_core - name = T_BOARD("core control") + name = "circuit board (core control)" build_path = /obj/machinery/computer/air_control/supermatter_core frequency = 1438 var/input_tag @@ -21,7 +21,7 @@ var/pressure_setting = 100 /obj/item/stock_parts/circuitboard/air_management/injector_control - name = T_BOARD("injector control") + name = "circuit board (injector control)" build_path = /obj/machinery/computer/air_control/fuel_injection var/device_tag var/list/device_info diff --git a/code/game/objects/items/weapons/circuitboards/computer/computer.dm b/code/game/objects/items/weapons/circuitboards/computer/computer.dm index 5ddcfec8c0488..e7eb1f7ec24c9 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/computer.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/computer.dm @@ -1,112 +1,112 @@ /obj/item/stock_parts/circuitboard/message_monitor - name = T_BOARD("message monitor console") + name = "circuit board (message monitor console)" build_path = /obj/machinery/computer/message_monitor origin_tech = list(TECH_DATA = 3) /obj/item/stock_parts/circuitboard/aiupload - name = T_BOARD("AI upload console") + name = "circuit board (AI upload console)" build_path = /obj/machinery/computer/upload/ai origin_tech = list(TECH_DATA = 4) /obj/item/stock_parts/circuitboard/borgupload - name = T_BOARD("cyborg upload console") + name = "circuit board (cyborg upload console)" build_path = /obj/machinery/computer/upload/robot origin_tech = list(TECH_DATA = 4) /obj/item/stock_parts/circuitboard/teleporter - name = T_BOARD("teleporter control console") + name = "circuit board (teleporter control console)" build_path = /obj/machinery/computer/teleporter origin_tech = list(TECH_DATA = 2, TECH_BLUESPACE = 4) /obj/item/stock_parts/circuitboard/atmos_alert - name = T_BOARD("atmospheric alert console") + name = "circuit board (atmospheric alert console)" build_path = /obj/machinery/computer/atmos_alert /obj/item/stock_parts/circuitboard/robotics - name = T_BOARD("robotics control console") + name = "circuit board (robotics control console)" build_path = /obj/machinery/computer/robotics origin_tech = list(TECH_DATA = 3) /obj/item/stock_parts/circuitboard/drone_control - name = T_BOARD("drone control console") + name = "circuit board (drone control console)" build_path = /obj/machinery/computer/drone_control origin_tech = list(TECH_DATA = 3) /obj/item/stock_parts/circuitboard/arcade/battle - name = T_BOARD("battle arcade machine") + name = "circuit board (battle arcade machine)" build_path = /obj/machinery/computer/arcade/battle origin_tech = list(TECH_DATA = 1) /obj/item/stock_parts/circuitboard/arcade/orion_trail - name = T_BOARD("orion trail arcade machine") + name = "circuit board (orion trail arcade machine)" build_path = /obj/machinery/computer/arcade/orion_trail origin_tech = list(TECH_DATA = 1) /obj/item/stock_parts/circuitboard/turbine_control - name = T_BOARD("turbine control console") + name = "circuit board (turbine control console)" build_path = /obj/machinery/computer/turbine_computer /obj/item/stock_parts/circuitboard/solar_control - name = T_BOARD("solar control console") + name = "circuit board (solar control console)" build_path = /obj/machinery/power/solar_control origin_tech = list(TECH_DATA = 2, TECH_POWER = 2) /obj/item/stock_parts/circuitboard/powermonitor - name = T_BOARD("power monitoring console") + name = "circuit board (power monitoring console)" build_path = /obj/machinery/computer/power_monitor /obj/item/stock_parts/circuitboard/prisoner - name = T_BOARD("prisoner management console") + name = "circuit board (prisoner management console)" build_path = /obj/machinery/computer/prisoner /obj/item/stock_parts/circuitboard/rdservercontrol - name = T_BOARD("R&D server control console") + name = "circuit board (R&D server control console)" build_path = /obj/machinery/computer/rdservercontrol /obj/item/stock_parts/circuitboard/crew - name = T_BOARD("crew monitoring console") + name = "circuit board (crew monitoring console)" build_path = /obj/machinery/computer/crew origin_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MAGNET = 2) /obj/item/stock_parts/circuitboard/operating - name = T_BOARD("patient monitoring console") + name = "circuit board (patient monitoring console)" build_path = /obj/machinery/computer/operating origin_tech = list(TECH_DATA = 2, TECH_BIO = 2) /obj/item/stock_parts/circuitboard/helm - name = T_BOARD("helm control console") + name = "circuit board (helm control console)" build_path = /obj/machinery/computer/ship/helm /obj/item/stock_parts/circuitboard/engine - name = T_BOARD("engine control console") + name = "circuit board (engine control console)" build_path = /obj/machinery/computer/ship/engines /obj/item/stock_parts/circuitboard/nav - name = T_BOARD("navigation console") + name = "circuit board (navigation console)" build_path = /obj/machinery/computer/ship/navigation /obj/item/stock_parts/circuitboard/nav/tele - name = T_BOARD("navigation telescreen") + name = "circuit board (navigation telescreen)" build_path = /obj/machinery/computer/ship/navigation/telescreen /obj/item/stock_parts/circuitboard/sensors - name = T_BOARD("sensors console") + name = "circuit board (sensors console)" build_path = /obj/machinery/computer/ship/sensors /obj/item/stock_parts/circuitboard/area_atmos - name = T_BOARD("area air control console") + name = "circuit board (area air control console)" build_path = /obj/machinery/computer/area_atmos origin_tech = list(TECH_DATA = 2) /obj/item/stock_parts/circuitboard/rcon_console - name = T_BOARD("RCON remote control console") + name = "circuit board (RCON remote control console)" build_path = /obj/machinery/computer/rcon origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_POWER = 5) /obj/item/stock_parts/circuitboard/account_database - name = T_BOARD("accounts uplink terminal") + name = "circuit board (accounts uplink terminal)" build_path = /obj/machinery/computer/account_database /obj/item/stock_parts/circuitboard/guestpass - name = T_BOARD("guest pass terminal") - build_path = /obj/machinery/computer/guestpass \ No newline at end of file + name = "circuit board (guest pass terminal)" + build_path = /obj/machinery/computer/guestpass diff --git a/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm b/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm index f741d358ac655..f1de173e6ea76 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/holodeckcontrol - name = T_BOARD("holodeck control console") + name = "circuit board (holodeck control console)" build_path = /obj/machinery/computer/HolodeckControl origin_tech = list(TECH_DATA = 2, TECH_BLUESPACE = 2) var/last_to_emag diff --git a/code/game/objects/items/weapons/circuitboards/computer/research.dm b/code/game/objects/items/weapons/circuitboards/computer/research.dm index e645f7440e252..d8f5c0a2d131e 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/research.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/research.dm @@ -1,16 +1,16 @@ /obj/item/stock_parts/circuitboard/rdconsole - name = T_BOARD("R&D control console") + name = "circuit board (R&D control console)" build_path = /obj/machinery/computer/rdconsole/core -/obj/item/stock_parts/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob) - if(isScrewdriver(I)) - user.visible_message(SPAN_NOTICE("\The [user] adjusts the jumper on \the [src]'s access protocol pins."), SPAN_NOTICE("You adjust the jumper on the access protocol pins.")) - if(src.build_path == /obj/machinery/computer/rdconsole/core) - src.SetName(T_BOARD("RD Console - Robotics")) - src.build_path = /obj/machinery/computer/rdconsole/robotics - to_chat(user, SPAN_NOTICE("Access protocols set to robotics.")) - else - src.SetName(T_BOARD("RD Console")) - src.build_path = /obj/machinery/computer/rdconsole/core - to_chat(user, SPAN_NOTICE("Access protocols set to default.")) - return +/obj/item/stock_parts/circuitboard/rdconsole/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + if(build_path == /obj/machinery/computer/rdconsole/core) + SetName("circuit board (RD Console - Robotics)") + build_path = /obj/machinery/computer/rdconsole/robotics + balloon_alert(user, "плата для робототехники") + else + SetName("circuit board (RD Console)") + build_path = /obj/machinery/computer/rdconsole/core + balloon_alert(user, "плата для РНД") diff --git a/code/game/objects/items/weapons/circuitboards/computer/shuttle.dm b/code/game/objects/items/weapons/circuitboards/computer/shuttle.dm index 7599a4714405a..23734ac651316 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/shuttle.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/shuttle.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/shuttle_console - name = T_BOARD("basic shuttle console") + name = "circuit board (basic shuttle console)" build_path = /obj/machinery/computer/shuttle_control origin_tech = list(TECH_DATA = 3) var/shuttle_tag @@ -18,8 +18,8 @@ return TRUE /obj/item/stock_parts/circuitboard/shuttle_console/explore - name = T_BOARD("long range shuttle console") + name = "circuit board (long range shuttle console)" build_path = /obj/machinery/computer/shuttle_control/explore /obj/item/stock_parts/circuitboard/shuttle_console/explore/is_valid_shuttle(datum/shuttle/shuttle) - return istype(shuttle, /datum/shuttle/autodock/overmap) \ No newline at end of file + return istype(shuttle, /datum/shuttle/autodock/overmap) diff --git a/code/game/objects/items/weapons/circuitboards/computer/station_alert.dm b/code/game/objects/items/weapons/circuitboards/computer/station_alert.dm index a03029b4a7a85..58a3ed966e787 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/station_alert.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/station_alert.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/stationalert - name = T_BOARD("alert console") + name = "circuit board (alert console)" build_path = /obj/machinery/computer/station_alert var/list/alarm_handlers diff --git a/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm b/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm index 2586ab680c188..ef467c607c13d 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm @@ -1,9 +1,9 @@ /obj/item/stock_parts/circuitboard/comm_monitor - name = T_BOARD("telecommunications monitor console") + name = "circuit board (telecommunications monitor console)" build_path = /obj/machinery/computer/telecomms/monitor origin_tech = list(TECH_DATA = 3) /obj/item/stock_parts/circuitboard/comm_server - name = T_BOARD("telecommunications server monitor console") + name = "circuit board (telecommunications server monitor console)" build_path = /obj/machinery/computer/telecomms/server origin_tech = list(TECH_DATA = 3) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm b/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm index 97a7a79c9a346..2362c83e4176a 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/biogenerator - name = T_BOARD("biogenerator") + name = "circuit board (biogenerator)" build_path = /obj/machinery/biogenerator board_type = "machine" origin_tech = list(TECH_DATA = 2) @@ -11,4 +11,4 @@ /obj/item/stock_parts/console_screen = 1, /obj/item/stock_parts/keyboard = 1, /obj/item/stock_parts/power/apc/buildable = 1 - ) \ No newline at end of file + ) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/bluespacedrive.dm b/code/game/objects/items/weapons/circuitboards/machinery/bluespacedrive.dm deleted file mode 100644 index 555935a4b07b5..0000000000000 --- a/code/game/objects/items/weapons/circuitboards/machinery/bluespacedrive.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/item/stock_parts/circuitboard/bluespacedrive - name = T_BOARD("Naophoros-pattern bluespace puncturer") - build_path = /obj/machinery/bluespacedrive - board_type = "machine" - origin_tech = list(TECH_BLUESPACE = 12, TECH_POWER = 12, TECH_ENGINEERING = 12) // You are not supposed to get this - req_components = list( - /obj/item/stock_parts/smes_coil = 5, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/micro_laser = 1,) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/chemistry.dm b/code/game/objects/items/weapons/circuitboards/machinery/chemistry.dm index 7c76d845ccd6f..cc903e1cf5b8f 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/chemistry.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/chemistry.dm @@ -1,5 +1,5 @@ -/obj/item/stock_parts/circuitboard/reagent_heater - name = T_BOARD("chemical heater") +/obj/item/stock_parts/circuitboard/reagent_temp + name = "circuit board (thermal regulator)" build_path = /obj/machinery/reagent_temperature board_type = "machine" origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1) @@ -13,12 +13,8 @@ /obj/item/stock_parts/power/apc/buildable = 1 ) -/obj/item/stock_parts/circuitboard/reagent_heater/cooler - name = T_BOARD("chemical cooler") - build_path = /obj/machinery/reagent_temperature/cooler - /obj/item/stock_parts/circuitboard/sublimator - name = T_BOARD("reagent sublimator") + name = "circuit board (reagent sublimator)" build_path = /obj/machinery/portable_atmospherics/reagent_sublimator board_type = "machine" origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1) @@ -32,12 +28,12 @@ ) /obj/item/stock_parts/circuitboard/sublimator/sauna - name = T_BOARD("sauna sublimator") + name = "circuit board (sauna sublimator)" build_path = /obj/machinery/portable_atmospherics/reagent_sublimator/sauna /obj/item/stock_parts/circuitboard/reagentgrinder - name = T_BOARD("reagent grinder") + name = "circuit board (reagent grinder)" build_path = /obj/machinery/reagentgrinder board_type = "machine" origin_tech = list(TECH_BIO = 1, TECH_MATERIAL = 2, TECH_ENGINEERING = 2) @@ -51,7 +47,7 @@ ) /obj/item/stock_parts/circuitboard/juicer - name = T_BOARD("blender") + name = "circuit board (blender)" build_path = /obj/machinery/reagentgrinder/juicer board_type = "machine" origin_tech = list(TECH_BIO = 1, TECH_MATERIAL = 1, TECH_ENGINEERING = 1) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm index 3037cbeaee8e3..77b153bde5887 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/bioprinter - name = T_BOARD("bioprinter") + name = "circuit board (bioprinter)" build_path = /obj/machinery/organ_printer/flesh board_type = "machine" origin_tech = list(TECH_ENGINEERING = 1, TECH_BIO = 3, TECH_DATA = 3) @@ -15,7 +15,7 @@ ) /obj/item/stock_parts/circuitboard/roboprinter - name = T_BOARD("prosthetic organ fabricator") + name = "circuit board (prosthetic organ fabricator)" build_path = /obj/machinery/organ_printer/robot board_type = "machine" origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm b/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm index 8d9ff063a2783..2fd830c9b6641 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/bluespacerelay - name = T_BOARD("bluespacerelay") + name = "circuit board (bluespacerelay)" build_path = /obj/machinery/bluespacerelay board_type = "machine" origin_tech = list(TECH_BLUESPACE = 2, TECH_DATA = 2) @@ -8,4 +8,4 @@ /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/subspace/filter = 1, /obj/item/stock_parts/subspace/crystal = 1 - ) \ No newline at end of file + ) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/engineering_circuits.dm b/code/game/objects/items/weapons/circuitboards/machinery/engineering_circuits.dm index 536986d676aa8..48ff24f1b102e 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/engineering_circuits.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/engineering_circuits.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/floodlight - name = T_BOARD("emergency floodlight") + name = "circuit board (emergency floodlight)" build_path = /obj/machinery/floodlight board_type = "machine" origin_tech = list(TECH_ENGINEERING = 1) @@ -11,7 +11,7 @@ /obj/item/cell/crap = 1) /obj/item/stock_parts/circuitboard/pipedispensor - name = T_BOARD("pipe dispenser") + name = "circuit board (pipe dispenser)" build_path = /obj/machinery/pipedispenser board_type = "machine" origin_tech = list(TECH_ENGINEERING = 6, TECH_MATERIAL = 5) @@ -24,5 +24,5 @@ /obj/item/stock_parts/power/apc/buildable = 1) /obj/item/stock_parts/circuitboard/pipedispensor/disposal - name = T_BOARD("disposal pipe dispenser") + name = "circuit board (disposal pipe dispenser)" build_path = /obj/machinery/pipedispenser/disposal diff --git a/code/game/objects/items/weapons/circuitboards/machinery/household.dm b/code/game/objects/items/weapons/circuitboards/machinery/household.dm index fd9fd71e4b47d..8d17fcb5a5e09 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/household.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/household.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/microwave - name = T_BOARD("microwave") + name = "circuit board (microwave)" build_path = /obj/machinery/microwave board_type = "machine" origin_tech = list(TECH_BIO = 2, TECH_ENGINEERING = 2) @@ -14,7 +14,7 @@ ) /obj/item/stock_parts/circuitboard/gibber - name = T_BOARD("meat gibber") + name = "circuit board (meat gibber)" build_path = /obj/machinery/gibber board_type = "machine" origin_tech = list(TECH_BIO = 2, TECH_MATERIAL = 2) @@ -28,7 +28,7 @@ ) /obj/item/stock_parts/circuitboard/cooker - name = T_BOARD("candy machine") + name = "circuit board (candy machine)" build_path = /obj/machinery/cooker/candy board_type = "machine" origin_tech = list(TECH_BIO = 1, TECH_MATERIAL = 1) @@ -47,7 +47,7 @@ return subtypesof(/obj/machinery/cooker) /obj/item/stock_parts/circuitboard/honey - name = T_BOARD("honey extractor") + name = "circuit board (honey extractor)" build_path = /obj/machinery/honey_extractor board_type = "machine" origin_tech = list(TECH_BIO = 2, TECH_ENGINEERING = 1) @@ -56,12 +56,12 @@ /obj/item/stock_parts/matter_bin = 2) /obj/item/stock_parts/circuitboard/honey/seed - name = T_BOARD("seed extractor") + name = "circuit board (seed extractor)" build_path = /obj/machinery/seed_extractor board_type = "machine" /obj/item/stock_parts/circuitboard/washer - name = T_BOARD("washing machine") + name = "circuit board (washing machine)" build_path = /obj/machinery/washing_machine board_type = "machine" origin_tech = list(TECH_ENGINEERING = 1) @@ -72,7 +72,7 @@ /obj/item/pipe = 1) /obj/item/stock_parts/circuitboard/vending - name = T_BOARD("vending machine") + name = "circuit board (vending machine)" build_path = /obj/machinery/vending/generic board_type = "machine" origin_tech = list(TECH_ENGINEERING = 2) @@ -95,7 +95,7 @@ . |= base_type /obj/item/stock_parts/circuitboard/shipmap - name = T_BOARD("ship holomap") + name = "circuit board (ship holomap)" board_type = "machine" build_path = /obj/machinery/ship_map origin_tech = list(TECH_ENGINEERING = 1) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm b/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm index c03fea15e890d..59f133a2bbc21 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm @@ -1,9 +1,9 @@ /obj/item/stock_parts/circuitboard/mech_recharger - name = T_BOARD("mech recharger") + name = "circuit board (mech recharger)" build_path = /obj/machinery/mech_recharger board_type = "machine" origin_tech = list(TECH_DATA = 2, TECH_POWER = 2, TECH_ENGINEERING = 2) req_components = list( /obj/item/stock_parts/capacitor = 2, /obj/item/stock_parts/scanning_module = 1, - /obj/item/stock_parts/manipulator = 2) \ No newline at end of file + /obj/item/stock_parts/manipulator = 2) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/medical.dm b/code/game/objects/items/weapons/circuitboards/machinery/medical.dm index ea096d343350c..cc4f287c909dd 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/medical.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/medical.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/optable - name = T_BOARD("operating table") + name = "circuit board (operating table)" build_path = /obj/machinery/optable board_type = "machine" origin_tech = list(TECH_ENGINEERING = 1, TECH_BIO = 3, TECH_DATA = 3) @@ -12,7 +12,7 @@ ) /obj/item/stock_parts/circuitboard/bodyscanner - name = T_BOARD("body scanner") + name = "circuit board (body scanner)" build_path = /obj/machinery/bodyscanner board_type = "machine" origin_tech = list(TECH_ENGINEERING = 2, TECH_BIO = 4, TECH_DATA = 4) @@ -25,7 +25,7 @@ ) /obj/item/stock_parts/circuitboard/body_scanconsole - name = T_BOARD("body scanner console") + name = "circuit board (body scanner console)" build_path = /obj/machinery/body_scanconsole board_type = "machine" origin_tech = list(TECH_ENGINEERING = 2, TECH_BIO = 4, TECH_DATA = 4) @@ -37,12 +37,12 @@ ) /obj/item/stock_parts/circuitboard/body_scanconsole/display - name = T_BOARD("body scanner display") + name = "circuit board (body scanner display)" build_path = /obj/machinery/body_scan_display origin_tech = list(TECH_BIO = 2, TECH_DATA = 2) /obj/item/stock_parts/circuitboard/sleeper - name = T_BOARD("sleeper") + name = "circuit board (sleeper)" build_path = /obj/machinery/sleeper board_type = "machine" origin_tech = list(TECH_ENGINEERING = 3, TECH_BIO = 5, TECH_DATA = 3) @@ -57,7 +57,7 @@ ) /obj/item/stock_parts/circuitboard/cryo_cell - name = T_BOARD("cryo cell") + name = "circuit board (cryo cell)" build_path = /obj/machinery/atmospherics/unary/cryo_cell board_type = "machine" origin_tech = list(TECH_ENGINEERING = 4, TECH_BIO = 6, TECH_DATA = 3) @@ -69,4 +69,4 @@ /obj/item/stock_parts/console_screen = 1, /obj/item/stock_parts/keyboard = 1, /obj/item/stock_parts/power/apc/buildable = 1 - ) \ No newline at end of file + ) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mining.dm b/code/game/objects/items/weapons/circuitboards/machinery/mining.dm index cce11970d064b..ad65c1bdec1f8 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/mining.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/mining.dm @@ -1,10 +1,10 @@ /obj/item/stock_parts/circuitboard/mineral_processing - name = T_BOARD("mineral processing console") + name = "circuit board (mineral processing console)" build_path = /obj/machinery/computer/mining origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) /obj/item/stock_parts/circuitboard/mining_processor - name = T_BOARD("ore processor") + name = "circuit board (ore processor)" build_path = /obj/machinery/mineral/processing_unit board_type = "machine" origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) @@ -19,7 +19,7 @@ ) /obj/item/stock_parts/circuitboard/mining_unloader - name = T_BOARD("unloading machine") + name = "circuit board (unloading machine)" build_path = /obj/machinery/mineral/unloading_machine board_type = "machine" origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) @@ -33,7 +33,7 @@ ) /obj/item/stock_parts/circuitboard/mining_stacker - name = T_BOARD("stacking machine") + name = "circuit board (stacking machine)" build_path = /obj/machinery/mineral/stacking_machine board_type = "machine" origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2) @@ -45,4 +45,4 @@ /obj/item/stock_parts/console_screen = 1, /obj/item/stock_parts/keyboard = 1, /obj/item/stock_parts/power/apc/buildable = 1 - ) \ No newline at end of file + ) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm index 5747cad30e356..ab67df4484fae 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/miningdrill - name = T_BOARD("mining drill head") + name = "circuit board (mining drill head)" build_path = /obj/machinery/mining/drill board_type = "machine" origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) @@ -10,12 +10,12 @@ additional_spawn_components = list( /obj/item/stock_parts/power/battery/buildable/stock, /obj/item/cell/standard = 1 - ) + ) /obj/item/stock_parts/circuitboard/miningdrillbrace - name = T_BOARD("mining drill brace") + name = "circuit board (mining drill brace)" build_path = /obj/machinery/mining/brace board_type = "machine" origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) req_components = list() - additional_spawn_components = null \ No newline at end of file + additional_spawn_components = null diff --git a/code/game/objects/items/weapons/circuitboards/machinery/oxyregenerator.dm b/code/game/objects/items/weapons/circuitboards/machinery/oxyregenerator.dm index eb04bda79e197..e55b32af4ae9c 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/oxyregenerator.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/oxyregenerator.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/oxyregenerator - name = T_BOARD("oxygen regenerator") + name = "circuit board (oxygen regenerator)" build_path = /obj/machinery/atmospherics/binary/oxyregenerator board_type = "machine" origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) @@ -11,4 +11,4 @@ /obj/item/stock_parts/console_screen = 1, /obj/item/stock_parts/keyboard = 1, /obj/item/stock_parts/power/apc/buildable = 1 - ) \ No newline at end of file + ) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm index 1c57d4db67078..b1cf811241fb7 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/pacman - name = T_BOARD("PACMAN-type generator") + name = "circuit board (PACMAN-type generator)" build_path = /obj/machinery/power/port_gen/pacman board_type = "machine" origin_tech = list(TECH_DATA = 3, TECH_POWER = 3, TECH_PHORON = 3, TECH_ENGINEERING = 3) @@ -14,21 +14,21 @@ /obj/item/stock_parts/power/apc/buildable = 1 ) /obj/item/stock_parts/circuitboard/pacman/super - name = T_BOARD("SUPERPACMAN-type generator") + name = "circuit board (SUPERPACMAN-type generator)" build_path = /obj/machinery/power/port_gen/pacman/super origin_tech = list(TECH_DATA = 3, TECH_POWER = 4, TECH_ENGINEERING = 4) /obj/item/stock_parts/circuitboard/pacman/super/potato - name = T_BOARD("PTTO-3 nuclear generator") + name = "circuit board (PTTO-3 nuclear generator)" build_path = /obj/machinery/power/port_gen/pacman/super/potato origin_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINEERING = 4) /obj/item/stock_parts/circuitboard/pacman/super/potato/reactor - name = T_BOARD("ICRER-2 nuclear generator") + name = "circuit board (ICRER-2 nuclear generator)" build_path = /obj/machinery/power/port_gen/pacman/super/potato/reactor origin_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINEERING = 4) /obj/item/stock_parts/circuitboard/pacman/mrs - name = T_BOARD("MRSPACMAN-type generator") + name = "circuit board (MRSPACMAN-type generator)" build_path = /obj/machinery/power/port_gen/pacman/mrs origin_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINEERING = 5) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/portable_atmospherics.dm b/code/game/objects/items/weapons/circuitboards/machinery/portable_atmospherics.dm index 0b5cddd5b043e..657f7ffc96540 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/portable_atmospherics.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/portable_atmospherics.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/portable_scrubber - name = T_BOARD("portable scrubber") + name = "circuit board (portable scrubber)" board_type = "machine" build_path = /obj/machinery/portable_atmospherics/powered/scrubber origin_tech = list(TECH_ENGINEERING = 4, TECH_POWER = 4) @@ -16,12 +16,12 @@ ) /obj/item/stock_parts/circuitboard/portable_scrubber/pump - name = T_BOARD("portable pump") + name = "circuit board (portable pump)" board_type = "machine" build_path = /obj/machinery/portable_atmospherics/powered/pump /obj/item/stock_parts/circuitboard/portable_scrubber/huge - name = T_BOARD("large portable scrubber") + name = "circuit board (large portable scrubber)" board_type = "machine" build_path = /obj/machinery/portable_atmospherics/powered/scrubber/huge origin_tech = list(TECH_ENGINEERING = 5, TECH_POWER = 5, TECH_MATERIAL = 5) @@ -31,12 +31,12 @@ /obj/item/pipe = 4) /obj/item/stock_parts/circuitboard/portable_scrubber/huge/stationary - name = T_BOARD("large stationary portable scrubber") + name = "circuit board (large stationary portable scrubber)" board_type = "machine" build_path = /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary /obj/item/stock_parts/circuitboard/tray - name = T_BOARD("hydroponics tray") + name = "circuit board (hydroponics tray)" board_type = "machine" build_path = /obj/machinery/portable_atmospherics/hydroponics origin_tech = list(TECH_BIO = 3, TECH_MATERIAL = 2, TECH_DATA = 1) @@ -49,4 +49,4 @@ /obj/item/stock_parts/console_screen = 1, /obj/item/stock_parts/keyboard = 1, /obj/item/stock_parts/power/apc/buildable = 1 - ) \ No newline at end of file + ) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/power.dm b/code/game/objects/items/weapons/circuitboards/machinery/power.dm index 9ff8ebb0b9de4..af83751e54394 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/power.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/power.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/smes - name = T_BOARD("superconductive magnetic energy storage") + name = "circuit board (superconductive magnetic energy storage)" build_path = /obj/machinery/power/smes/buildable board_type = "machine" origin_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 4) @@ -10,13 +10,13 @@ ) /obj/item/stock_parts/circuitboard/batteryrack - name = T_BOARD("battery rack PSU") + name = "circuit board (battery rack PSU)" build_path = /obj/machinery/power/smes/batteryrack board_type = "machine" origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 2) - req_components = list(/obj/item/stock_parts/capacitor/ = 3, /obj/item/stock_parts/matter_bin/ = 1) + req_components = list(/obj/item/stock_parts/capacitor = 3, /obj/item/stock_parts/matter_bin = 1) additional_spawn_components = list( /obj/item/stock_parts/console_screen = 1, /obj/item/stock_parts/keyboard = 1, /obj/item/stock_parts/power/apc/buildable = 1 - ) \ No newline at end of file + ) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm b/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm index 7078b0365d216..1390f2a103467 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/recharge_station - name = T_BOARD("cyborg recharging station") + name = "circuit board (cyborg recharging station)" build_path = /obj/machinery/recharge_station board_type = "machine" origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3) @@ -12,4 +12,4 @@ /obj/item/stock_parts/power/battery/buildable/turbo = 1, /obj/item/cell/super = 1, /obj/item/stock_parts/capacitor = 2 - ) \ No newline at end of file + ) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm index a4fa6b47fc5f2..e02025896fd03 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/rdserver - name = T_BOARD("R&D server") + name = "circuit board (R&D server)" build_path = /obj/machinery/r_n_d/server board_type = "machine" origin_tech = list(TECH_DATA = 3) @@ -11,7 +11,7 @@ ) /obj/item/stock_parts/circuitboard/destructive_analyzer - name = T_BOARD("destructive analyzer") + name = "circuit board (destructive analyzer)" build_path = /obj/machinery/r_n_d/destructive_analyzer board_type = "machine" origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2, TECH_DATA = 2) @@ -24,7 +24,7 @@ ) /obj/item/stock_parts/circuitboard/autolathe - name = T_BOARD("autolathe") + name = "circuit board (autolathe)" build_path = /obj/machinery/fabricator board_type = "machine" origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2) @@ -38,7 +38,7 @@ ) /obj/item/stock_parts/circuitboard/autolathe/micro - name = T_BOARD("microlathe") + name = "circuit board (microlathe)" build_path = /obj/machinery/fabricator/micro origin_tech = list(TECH_ENGINEERING = 1, TECH_DATA = 1) req_components = list( @@ -46,7 +46,7 @@ /obj/item/stock_parts/manipulator = 1 ) /obj/item/stock_parts/circuitboard/replicator - name = T_BOARD("replicator") + name = "circuit board (replicator)" build_path = /obj/machinery/fabricator/replicator board_type = "machine" origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 2, TECH_BIO = 2) @@ -60,7 +60,7 @@ ) /obj/item/stock_parts/circuitboard/protolathe - name = T_BOARD("protolathe") + name = "circuit board (protolathe)" build_path = /obj/machinery/r_n_d/protolathe board_type = "machine" origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2) @@ -73,7 +73,7 @@ ) /obj/item/stock_parts/circuitboard/circuit_imprinter - name = T_BOARD("circuit imprinter") + name = "circuit board (circuit imprinter)" build_path = /obj/machinery/r_n_d/circuit_imprinter board_type = "machine" origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2) @@ -86,7 +86,7 @@ ) /obj/item/stock_parts/circuitboard/mechfab - name = T_BOARD("exosuit fabricator") + name = "circuit board (exosuit fabricator)" build_path = /obj/machinery/robotics_fabricator board_type = "machine" origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3) @@ -101,7 +101,7 @@ ) /obj/item/stock_parts/circuitboard/ntnet_relay - name = T_BOARD("\improper NTNet quantum relay") + name = "circuit board (NTNet quantum relay)" build_path = /obj/machinery/ntnet_relay board_type = "machine" origin_tech = list(TECH_DATA = 4) @@ -114,7 +114,7 @@ ) /obj/item/stock_parts/circuitboard/suspension_gen - name = T_BOARD("suspension generator") + name = "circuit board (suspension generator)" build_path = /obj/machinery/suspension_gen board_type = "machine" origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_MAGNET = 4) @@ -130,22 +130,39 @@ ) /obj/item/stock_parts/circuitboard/anomaly_container - name = T_BOARD("anomaly container") + name = "circuit board (anomaly container)" build_path = /obj/machinery/anomaly_container board_type = "machine" origin_tech = list(TECH_BLUESPACE = 3, TECH_ENGINEERING = 4, TECH_MAGNET = 4) req_components = list( /obj/item/stock_parts/matter_bin = 3, /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/micro_laser = 1) + /obj/item/stock_parts/micro_laser = 1 + ) additional_spawn_components = list( /obj/item/stock_parts/keyboard = 1, /obj/item/stock_parts/power/battery/buildable/stock = 1, /obj/item/cell/high = 1 ) +/obj/item/stock_parts/circuitboard/stasis_cage + name = "circuit board (stasis cage)" + build_path = /obj/machinery/stasis_cage + board_type = "machine" + origin_tech = list(TECH_BLUESPACE = 3, TECH_ENGINEERING = 4, TECH_BIO = 3) + req_components = list( + /obj/item/stock_parts/matter_bin = 2, + /obj/item/stock_parts/capacitor = 1 + ) + additional_spawn_components = list( + /obj/item/stock_parts/console_screen = 1, + /obj/item/stock_parts/power/battery/buildable/stock = 1, + /obj/item/cell/high = 1, + /obj/item/stock_parts/power/apc = 1 + ) + /obj/item/stock_parts/circuitboard/cracker - name = T_BOARD("molecular cracking unit") + name = "circuit board (molecular cracking unit)" build_path = /obj/machinery/portable_atmospherics/cracker board_type = "machine" origin_tech = list(TECH_MAGNET = 4, TECH_ENGINEERING = 3, TECH_MATERIAL = 3) @@ -158,7 +175,7 @@ ) /obj/item/stock_parts/circuitboard/doppler_array - name = T_BOARD("doppler array") + name = "circuit board (doppler array)" build_path = /obj/machinery/doppler_array board_type = "machine" origin_tech = list(TECH_ENGINEERING = 7, TECH_MATERIAL = 4, TECH_DATA = 4, TECH_BLUESPACE = 3) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm index 87cf0cb42482e..59ca9c4d474f7 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm @@ -1,6 +1,6 @@ // New shields /obj/item/stock_parts/circuitboard/shield_generator - name = T_BOARD("advanced shield generator") + name = "circuit board (advanced shield generator)" board_type = "machine" build_path = /obj/machinery/power/shield_generator origin_tech = list(TECH_MAGNET = 3, TECH_POWER = 4) @@ -15,7 +15,7 @@ ) /obj/item/stock_parts/circuitboard/shield_diffuser - name = T_BOARD("shield diffuser") + name = "circuit board (shield diffuser)" board_type = "machine" build_path = /obj/machinery/shield_diffuser origin_tech = list(TECH_MAGNET = 4, TECH_POWER = 2) @@ -29,7 +29,7 @@ ) /obj/item/stock_parts/circuitboard/pointdefense - name = T_BOARD("point defense battery") + name = "circuit board (point defense battery)" board_type = "machine" build_path = /obj/machinery/pointdefense origin_tech = list(TECH_ENGINEERING = 3, TECH_COMBAT = 2) @@ -37,7 +37,7 @@ /obj/item/mech_equipment/mounted_system/taser/laser = 1, /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/capacitor = 2, - + ) additional_spawn_components = list( /obj/item/stock_parts/power/terminal/buildable = 1, @@ -46,7 +46,7 @@ ) /obj/item/stock_parts/circuitboard/pointdefense_control - name = T_BOARD("fire assist mainframe") + name = "circuit board (fire assist mainframe)" board_type = "machine" build_path = /obj/machinery/pointdefense_control origin_tech = list(TECH_ENGINEERING = 3, TECH_COMBAT = 2) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm index acf7bec396120..388e9e2831bc9 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm @@ -7,7 +7,7 @@ ) /obj/item/stock_parts/circuitboard/telecomms/receiver - name = T_BOARD("subspace receiver") + name = "circuit board (subspace receiver)" build_path = /obj/machinery/telecomms/receiver origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_BLUESPACE = 2) req_components = list( @@ -17,7 +17,7 @@ /obj/item/stock_parts/micro_laser = 1) /obj/item/stock_parts/circuitboard/telecomms/hub - name = T_BOARD("hub mainframe") + name = "circuit board (hub mainframe)" build_path = /obj/machinery/telecomms/hub origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) req_components = list( @@ -25,7 +25,7 @@ /obj/item/stock_parts/subspace/filter = 2) /obj/item/stock_parts/circuitboard/telecomms/bus - name = T_BOARD("bus mainframe") + name = "circuit board (bus mainframe)" build_path = /obj/machinery/telecomms/bus origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) req_components = list( @@ -33,7 +33,7 @@ /obj/item/stock_parts/subspace/filter = 1) /obj/item/stock_parts/circuitboard/telecomms/processor - name = T_BOARD("processor unit") + name = "circuit board (processor unit)" build_path = /obj/machinery/telecomms/processor origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) req_components = list( @@ -44,7 +44,7 @@ /obj/item/stock_parts/subspace/amplifier = 1) /obj/item/stock_parts/circuitboard/telecomms/server - name = T_BOARD("telecommunication server") + name = "circuit board (telecommunication server)" build_path = /obj/machinery/telecomms/server origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) req_components = list( @@ -52,7 +52,7 @@ /obj/item/stock_parts/subspace/filter = 1) /obj/item/stock_parts/circuitboard/telecomms/broadcaster - name = T_BOARD("subspace broadcaster") + name = "circuit board (subspace broadcaster)" build_path = /obj/machinery/telecomms/broadcaster origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_BLUESPACE = 2) req_components = list( @@ -62,7 +62,7 @@ /obj/item/stock_parts/micro_laser/high = 2) /obj/item/stock_parts/circuitboard/telecomms/allinone - name = T_BOARD("telecommunication mainframe") + name = "circuit board (telecommunication mainframe)" build_path = /obj/machinery/telecomms/allinone origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3); req_components = list( diff --git a/code/game/objects/items/weapons/circuitboards/machinery/teleporter.dm b/code/game/objects/items/weapons/circuitboards/machinery/teleporter.dm index 3df778bbbbde7..4aec29adb9ffb 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/teleporter.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/teleporter.dm @@ -1,5 +1,5 @@ /obj/item/stock_parts/circuitboard/tele_beacon - name = T_BOARD("teleporter beacon") + name = "circuit board (teleporter beacon)" build_path = /obj/machinery/tele_beacon board_type = "machine" origin_tech = list( diff --git a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm index 5218b37b87cdc..26d7fec47f45d 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm @@ -15,7 +15,7 @@ U.node.build_network() /obj/item/stock_parts/circuitboard/unary_atmos/heater - name = T_BOARD("gas heating system") + name = "circuit board (gas heating system)" build_path = /obj/machinery/atmospherics/unary/heater origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1) req_components = list( @@ -24,7 +24,7 @@ /obj/item/stock_parts/capacitor = 2) /obj/item/stock_parts/circuitboard/unary_atmos/cooler - name = T_BOARD("gas cooling system") + name = "circuit board (gas cooling system)" build_path = /obj/machinery/atmospherics/unary/freezer origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) req_components = list( diff --git a/code/game/objects/items/weapons/circuitboards/other.dm b/code/game/objects/items/weapons/circuitboards/other.dm index 7c8730c2c1472..10b24542dfc51 100644 --- a/code/game/objects/items/weapons/circuitboards/other.dm +++ b/code/game/objects/items/weapons/circuitboards/other.dm @@ -1,6 +1,17 @@ //Stuff that doesn't fit into any category goes here /obj/item/stock_parts/circuitboard/aicore - name = T_BOARD("AI core") + name = "circuit board (AI core)" origin_tech = list(TECH_DATA = 4, TECH_BIO = 2) board_type = "other" + + +/obj/item/stock_parts/circuitboard/drone_pad + name = "circuit board (transport drone landing pad)" + build_path = /obj/machinery/drone_pad + board_type = "machine" + origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 2) + req_components = list( + /obj/item/stock_parts/scanning_module = 4, + /obj/item/stock_parts/subspace/crystal = 1) + additional_spawn_components = null diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index 2697d44bf0e9e..63b1480d6ec7f 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -17,7 +17,7 @@ /obj/item/bikehorn name = "bike horn" desc = "A horn off of a bicycle." - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/toy.dmi' icon_state = "bike_horn" item_state = "bike_horn" throwforce = 3 @@ -42,4 +42,4 @@ desc = "A can of compressed air hooked up to an obnoxiously loud horn. SPRING BREAK!" icon_state = "air_horn" item_state = "air_horn" - audio_files = list("sound/items/air_horn_1.ogg", "sound/items/air_horn_2.ogg") \ No newline at end of file + audio_files = list("sound/items/air_horn_1.ogg", "sound/items/air_horn_2.ogg") diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 64740c4d24d8e..9055ab0046389 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -2,7 +2,7 @@ gender = PLURAL name = "red lipstick" desc = "A generic brand of lipstick." - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/lipsticks.dmi' icon_state = "lipstick" w_class = ITEM_SIZE_TINY slot_flags = SLOT_EARS @@ -37,40 +37,50 @@ else icon_state = initial(icon_state) -/obj/item/lipstick/attack(atom/A, mob/user as mob, target_zone) - if(!open) return +/obj/item/lipstick/use_after(atom/A, mob/living/user, click_parameters) + if (!open) + to_chat(user, SPAN_NOTICE("You need to uncap \the [src] first!")) + return TRUE - if(ishuman(A)) + if (ishuman(A)) var/mob/living/carbon/human/H = A var/obj/item/organ/external/head/head = H.organs_by_name[BP_HEAD] - if(!istype(head)) - return + if (!istype(head)) + return TRUE - if(user.a_intent == I_HELP && target_zone == BP_HEAD) - head.write_on(user, src.name) - else if(head.has_lips) - if(H.makeup_style) //if they already have lipstick on + if (user.zone_sel.selecting == BP_HEAD) + head.write_on(user, name) + return TRUE + + if (head.has_lips && user.zone_sel.selecting == BP_MOUTH) + if (H.makeup_style) //if they already have lipstick on to_chat(user, SPAN_NOTICE("You need to wipe off the old lipstick first!")) - return - if(H == user) - user.visible_message(SPAN_NOTICE("[user] does their lips with \the [src]."), \ - SPAN_NOTICE("You take a moment to apply \the [src]. Perfect!")) + return TRUE + + if (H == user) + user.visible_message(SPAN_NOTICE("\The [user] does their lips with \the [src]."), \ + SPAN_NOTICE("You take a moment to apply \the [src]. Perfect!")) H.makeup_style = colour H.update_body() + return TRUE else - user.visible_message(SPAN_WARNING("[user] begins to do [H]'s lips with \the [src]."), \ - SPAN_NOTICE("You begin to apply \the [src].")) - if(do_after(user, 4 SECONDS, H, DO_EQUIP)) - user.visible_message(SPAN_NOTICE("[user] does [H]'s lips with \the [src]."), \ - SPAN_NOTICE("You apply \the [src].")) + user.visible_message(SPAN_WARNING("\The [user] begins to do \the [H]'s lips with \the [src]."), \ + SPAN_NOTICE("You begin to apply \the [src] on \the [H]'s lips.")) + if (do_after(user, 4 SECONDS, H, DO_EQUIP)) + user.visible_message(SPAN_NOTICE("\The [user] does \the [H]'s lips with \the [src]."), \ + SPAN_NOTICE("You apply \the [src] on \the [H]'s lips.")) H.makeup_style = colour H.update_body() - else if(istype(A, /obj/item/organ/external/head)) + return TRUE + + if(istype(A, /obj/item/organ/external/head)) var/obj/item/organ/external/head/head = A - head.write_on(user, src) + head.write_on(user, name) + return TRUE + -//you can wipe off lipstick with paper! see code/modules/paperwork/paper.dm, paper/attack() +//you can wipe off lipstick with paper! see code/modules/paperwork/paper.dm, paper/use_before() /obj/item/haircomb //sparklysheep's comb @@ -78,7 +88,7 @@ desc = "A pristine comb made from flexible plastic." w_class = ITEM_SIZE_TINY slot_flags = SLOT_EARS - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/lavatory.dmi' icon_state = "comb" item_state = "comb" diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 0c95cbd622e5d..66ba6733e2c64 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -5,7 +5,7 @@ /obj/item/defibrillator name = "auto-resuscitator" desc = "A device that delivers powerful shocks via detachable paddles to resuscitate incapacitated patients." - icon = 'icons/obj/defibrillator.dmi' + icon = 'icons/obj/tools/defibrillator.dmi' icon_state = "defibunit" item_state = "defibunit" slot_flags = SLOT_BACK @@ -15,7 +15,6 @@ origin_tech = list(TECH_BIO = 4, TECH_POWER = 2) matter = list(MATERIAL_STEEL = 5000, MATERIAL_PLASTIC = 2000, MATERIAL_GLASS = 1500, MATERIAL_ALUMINIUM = 1000) action_button_name = "Remove/Replace Paddles" - var/obj/item/shockpaddles/linked/paddles var/obj/item/cell/bcell = null @@ -51,21 +50,21 @@ new_overlays += "[initial(icon_state)]-powered" if(bcell) - var/ratio = Ceil(bcell.percent()/25) * 25 + var/ratio = ceil(bcell.percent()/25) * 25 new_overlays += "[initial(icon_state)]-charge[ratio]" else new_overlays += "[initial(icon_state)]-nocell" - overlays = new_overlays + SetOverlays(new_overlays) /obj/item/defibrillator/examine(mob/user) . = ..() if(bcell) - to_chat(user, "The charge meter is showing [bcell.percent()]% charge left.") + . += SPAN_NOTICE("The charge meter is showing [bcell.percent()]% charge left.") else - to_chat(user, "There is no cell inside.") + . += SPAN_NOTICE("There is no cell inside.") -/obj/item/defibrillator/ui_action_click() +/obj/item/defibrillator/ui_action_click(mob/living/user) toggle_paddles() /obj/item/defibrillator/attack_hand(mob/user) @@ -84,30 +83,35 @@ src.add_fingerprint(usr) M.put_in_any_hand_if_possible(src) +/obj/item/defibrillator/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!bcell) + USE_FEEDBACK_CELL_MISSING(user) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + bcell.update_icon() + bcell.dropInto(loc) + bcell = null + USE_FEEDBACK_CELL_REMOVED(user) + update_icon() /obj/item/defibrillator/attackby(obj/item/W, mob/user, params) if(W == paddles) reattach_paddles(user) - else if(istype(W, /obj/item/cell)) + return + if(istype(W, /obj/item/cell)) if(bcell) - to_chat(user, SPAN_NOTICE("\the [src] already has a cell.")) + to_chat(user, SPAN_NOTICE("[src] already has a cell.")) else if(!user.unEquip(W)) return W.forceMove(src) bcell = W - to_chat(user, SPAN_NOTICE("You install a cell in \the [src].")) - update_icon() - - else if(isScrewdriver(W)) - if(bcell) - bcell.update_icon() - bcell.dropInto(loc) - bcell = null - to_chat(user, SPAN_NOTICE("You remove the cell from \the [src].")) + to_chat(user, SPAN_NOTICE("You install a cell in [src].")) update_icon() - else - return ..() + return + . = ..() /obj/item/defibrillator/emag_act(uses, mob/user) if(paddles) @@ -159,7 +163,7 @@ if(ismob(paddles.loc)) var/mob/M = paddles.loc if(M.drop_from_inventory(paddles, src)) - to_chat(user, SPAN_NOTICE("\The [paddles] snap back into the main unit.")) + to_chat(user, SPAN_NOTICE("[paddles] snap back into the main unit.")) else paddles.forceMove(src) @@ -201,7 +205,7 @@ /obj/item/shockpaddles name = "defibrillator paddles" desc = "A pair of plastic-gripped paddles with flat metal surfaces that are used to deliver powerful electric shocks." - icon = 'icons/obj/defibrillator.dmi' + icon = 'icons/obj/tools/defibrillator.dmi' icon_state = "defibpaddles" item_state = "defibpaddles" gender = PLURAL @@ -209,6 +213,7 @@ throwforce = 6 w_class = ITEM_SIZE_LARGE + var/safety = 1 //if you can zap people with the paddles on harm mode var/combat = 0 //If it can be used to revive people wearing thick clothing (e.g. spacesuits) var/cooldowntime = (6 SECONDS) // How long in deciseconds until the defib is ready again after use. @@ -253,13 +258,13 @@ if(busy) return 0 if(!check_charge(chargecost)) - to_chat(user, SPAN_WARNING("\The [src] doesn't have enough charge left to do that.")) + to_chat(user, SPAN_WARNING("[src] doesn't have enough charge left to do that.")) return 0 if(!wielded && !isrobot(user)) to_chat(user, SPAN_WARNING("You need to wield the paddles with both hands before you can use them on someone!")) return 0 if(cooldown) - to_chat(user, SPAN_WARNING("\The [src] are re-energizing!")) + to_chat(user, SPAN_WARNING("[src] are re-energizing!")) return 0 return 1 @@ -296,12 +301,13 @@ /obj/item/shockpaddles/proc/checked_use(charge_amt) return 0 -/obj/item/shockpaddles/attack(mob/living/M, mob/living/user, target_zone) +/obj/item/shockpaddles/use_before(mob/living/M, mob/living/user) + . = FALSE var/mob/living/carbon/human/H = M - if(!istype(H) || user.a_intent == I_HURT) - return ..() //Do a regular attack. Harm intent shocking happens as a hit effect + if (!istype(H) || user.a_intent != I_HELP) + return FALSE - if(can_use(user, H)) + if (can_use(user, H)) busy = 1 update_icon() @@ -309,8 +315,7 @@ busy = 0 update_icon() - - return 1 + return TRUE //Since harm-intent now skips the delay for deliberate placement, you have to be able to hit them in combat in order to shock people. /obj/item/shockpaddles/apply_hit_effect(mob/living/target, mob/living/user, hit_zone) @@ -333,10 +338,10 @@ to_chat(find_dead_player(H.ckey, 1), SPAN_NOTICE("Someone is attempting to resuscitate you. Re-enter your body if you want to be revived!")) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process - user.visible_message(SPAN_WARNING("\The [user] begins to place [src] on [H]'s chest."), SPAN_WARNING("You begin to place [src] on [H]'s chest...")) + user.visible_message(SPAN_WARNING("[user] begins to place [src] on [H]'s chest."), SPAN_WARNING("You begin to place [src] on [H]'s chest...")) if(!user.do_skilled(3 SECONDS, SKILL_MEDICAL, H, do_flags = DO_MEDICAL | DO_USER_UNIQUE_ACT)) return - user.visible_message(SPAN_NOTICE("\The [user] places [src] on [H]'s chest."), SPAN_WARNING("You place [src] on [H]'s chest.")) + user.visible_message(SPAN_NOTICE("[user] places [src] on [H]'s chest."), SPAN_WARNING("You place [src] on [H]'s chest.")) playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) var/error = can_defib(H) @@ -358,7 +363,7 @@ playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) return - H.visible_message(SPAN_WARNING("\The [H]'s body convulses a bit.")) + H.visible_message(SPAN_WARNING("[H]'s body convulses a bit.")) playsound(get_turf(src), "bodyfall", 50, 1) playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) set_cooldown(cooldowntime) @@ -381,19 +386,19 @@ var/obj/item/cell/C = potato.cell C.give(chargecost) H.AdjustSleeping(-60) - log_and_message_admins("used \a [src] to revive [key_name(H)].") + log_and_message_admins("used [src] to revive [key_name(H)].") /obj/item/shockpaddles/proc/lowskill_revive(mob/living/carbon/human/H, mob/living/user) if(prob(60)) playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 100, 1, -1) H.electrocute_act(burn_damage_amt*4, src, def_zone = BP_CHEST) - user.visible_message(SPAN_WARNING("The paddles were misaligned! \The [user] shocks [H] with \the [src]!"), SPAN_WARNING("The paddles were misaligned! You shock [H] with \the [src]!")) + user.visible_message(SPAN_WARNING("The paddles were misaligned! [user] shocks [H] with [src]!"), SPAN_WARNING("The paddles were misaligned! You shock [H] with [src]!")) return 0 if(prob(50)) playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 100, 1, -1) user.electrocute_act(burn_damage_amt*2, src, def_zone = BP_L_HAND) user.electrocute_act(burn_damage_amt*2, src, def_zone = BP_R_HAND) - user.visible_message(SPAN_WARNING("\The [user] shocks themselves with \the [src]!"), SPAN_WARNING("You forget to move your hands away and shock yourself with \the [src]!")) + user.visible_message(SPAN_WARNING("[user] shocks themselves with [src]!"), SPAN_WARNING("You forget to move your hands away and shock yourself with [src]!")) return 0 return 1 @@ -404,7 +409,7 @@ return //no need to spend time carefully placing the paddles, we're just trying to shock them - user.visible_message(SPAN_DANGER("\The [user] slaps [src] onto [H]'s [affecting.name]."), SPAN_DANGER("You overcharge [src] and slap them onto [H]'s [affecting.name].")) + user.visible_message(SPAN_DANGER("[user] slaps [src] onto [H]'s [affecting.name]. [safety? "However, it fizzles out as the safety indicator flashes.": ""]"), SPAN_DANGER("You overcharge [src] and slap them onto [H]'s [affecting.name]. [safety? "However, it fizzles out as the safety indicator flashes.": ""]")) //Just stop at awkwardly slapping electrodes on people if the safety is enabled if(safety) @@ -412,7 +417,7 @@ return playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) - audible_message(SPAN_WARNING("\The [src] lets out a steadily rising hum...")) + audible_message(SPAN_WARNING("[src] lets out a steadily rising hum...")) if(!do_after(user, chargetime, H, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) return @@ -423,7 +428,7 @@ playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) return - user.visible_message(SPAN_DANGER("\The [user] shocks [H] with \the [src]!"), SPAN_WARNING("You shock [H] with \the [src]!")) + user.visible_message(SPAN_DANGER("[user] shocks [H] with [src]!"), SPAN_WARNING("You shock [H] with [src]!")) playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 100, 1, -1) playsound(loc, 'sound/weapons/Egloves.ogg', 100, 1, -1) set_cooldown(cooldowntime) @@ -437,7 +442,7 @@ to_chat(doki, SPAN_DANGER("Your [doki] has stopped!")) doki.pulse = PULSE_NONE - admin_attack_log(user, H, "Electrocuted using \a [src]", "Was electrocuted with \a [src]", "used \a [src] to electrocute") + admin_attack_log(user, H, "Electrocuted using [src]", "Was electrocuted with [src]", "used [src] to electrocute") /obj/item/shockpaddles/proc/make_alive(mob/living/carbon/human/M) //This revives the mob var/deadtime = world.time - M.timeofdeath @@ -466,7 +471,7 @@ H.setBrainLoss(brain_damage) /obj/item/shockpaddles/proc/make_announcement(message, msg_class) - audible_message("\The [src] [message]", "\The [src] vibrates slightly.") + audible_message("[src] [message]", "[src] vibrates slightly.") /obj/item/shockpaddles/emag_act(uses, mob/user, obj/item/defibrillator/base) if(istype(src, /obj/item/shockpaddles/linked)) @@ -477,13 +482,13 @@ return if(safety) safety = 0 - to_chat(user, SPAN_WARNING("You silently disable \the [src]'s safety protocols with the cryptographic sequencer.")) + to_chat(user, SPAN_WARNING("You silently disable [src]'s safety protocols with the cryptographic sequencer.")) burn_damage_amt *= 3 base.update_icon() return 1 else safety = 1 - to_chat(user, SPAN_NOTICE("You silently enable \the [src]'s safety protocols with the cryptographic sequencer.")) + to_chat(user, SPAN_NOTICE("You silently enable [src]'s safety protocols with the cryptographic sequencer.")) burn_damage_amt = initial(burn_damage_amt) base.update_icon() return 1 @@ -494,10 +499,10 @@ safety = new_safety if(safety) make_announcement("beeps, \"Safety protocols enabled!\"", "notice") - playsound(get_turf(src), 'sound/machines/defib_safetyon.ogg', 50, 0) + playsound(get_turf(src), 'sound/machines/defib_SafetyOn.ogg', 50, 0) else make_announcement("beeps, \"Safety protocols disabled!\"", "warning") - playsound(get_turf(src), 'sound/machines/defib_safetyoff.ogg', 50, 0) + playsound(get_turf(src), 'sound/machines/defib_safetyOff.ogg', 50, 0) update_icon() ..() @@ -575,7 +580,7 @@ return (base_unit.bcell && base_unit.bcell.checked_use(charge_amt)) /obj/item/shockpaddles/linked/make_announcement(message, msg_class) - base_unit.audible_message("\The [base_unit] [message]", "\The [base_unit] vibrates slightly.") + base_unit.audible_message("[base_unit] [message]", "[base_unit] vibrates slightly.") /* Standalone Shockpaddles @@ -610,11 +615,11 @@ switch(severity) if(EMP_ACT_HEAVY) new_fail = max(fail_counter, 20) - visible_message("\The [src]'s reactor overloads!") + visible_message("[src]'s reactor overloads!") if(EMP_ACT_LIGHT) new_fail = max(fail_counter, 8) if(ismob(loc)) - to_chat(loc, SPAN_WARNING("\The [src] feel pleasantly warm.")) + to_chat(loc, SPAN_WARNING("[src] feel pleasantly warm.")) if(new_fail && !fail_counter) START_PROCESSING(SSobj, src) diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm index 3e5d7ade4bb52..506ca15b125d0 100644 --- a/code/game/objects/items/weapons/dice.dm +++ b/code/game/objects/items/weapons/dice.dm @@ -66,8 +66,8 @@ var/comment = roll_result[2] icon_state = "[name][result]" user.visible_message(SPAN_NOTICE("[user] has thrown [src]. It lands on [result]. [comment]"), \ - SPAN_NOTICE("You throw [src]. It lands on a [result]. [comment]"), \ - SPAN_NOTICE("You hear [src] landing on a [result]. [comment]")) + SPAN_NOTICE("You throw [src]. It lands on a [result]. [comment]"), \ + SPAN_NOTICE("You hear [src] landing on a [result]. [comment]")) /obj/item/dice/throw_impact() ..() diff --git a/code/game/objects/items/weapons/ecigs.dm b/code/game/objects/items/weapons/ecigs.dm index 959eddd7988c0..4e43bb1b52928 100644 --- a/code/game/objects/items/weapons/ecigs.dm +++ b/code/game/objects/items/weapons/ecigs.dm @@ -13,7 +13,6 @@ body_parts_covered = 0 var/brightness_on = 1 chem_volume = 0 //ecig has no storage on its own but has reagent container created by parent obj - item_state = "ecigoff" var/icon_off var/icon_empty var/power_usage = 450 //value for simple ecig, enough for about 1 cartridge, in JOULES! @@ -41,13 +40,13 @@ /obj/item/clothing/mask/smokable/ecig/simple/examine(mob/user) . = ..() if(ec_cartridge) - to_chat(user,SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.")) + . += SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.") else - to_chat(user,SPAN_NOTICE("There's no cartridge connected.")) + . += SPAN_NOTICE("There's no cartridge connected.") /obj/item/clothing/mask/smokable/ecig/util name = "electronic cigarette" - desc = "A popular utilitarian model electronic cigarette, the ONI-55. Comes in a variety of colors." + desc = "A popular utilitarian model of electronic cigarette, the ONI-55. Comes in a variety of colors." icon_state = "ecigoff1" icon_off = "ecigoff1" icon_empty = "ecigoff1" @@ -61,13 +60,13 @@ /obj/item/clothing/mask/smokable/ecig/util/examine(mob/user) . = ..() if(ec_cartridge) - to_chat(user,SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.")) + . += SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.") else - to_chat(user,SPAN_NOTICE("There's no cartridge connected.")) + . += SPAN_NOTICE("There's no cartridge connected.") if(cigcell) - to_chat(user,SPAN_NOTICE("The power meter shows that there's about [round(cigcell.percent(), 25)]% power remaining.")) + . += SPAN_NOTICE("The power meter shows that there's about [round(cigcell.percent(), 25)]% power remaining.") else - to_chat(user,SPAN_NOTICE("There's no cartridge connected.")) + . += SPAN_NOTICE("There's no cartridge connected.") /obj/item/clothing/mask/smokable/ecig/deluxe name = "deluxe electronic cigarette" @@ -81,13 +80,13 @@ /obj/item/clothing/mask/smokable/ecig/deluxe/examine(mob/user) . = ..() if(ec_cartridge) - to_chat(user,SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.")) + . += SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.") else - to_chat(user,SPAN_NOTICE("There's no cartridge connected.")) + . += SPAN_NOTICE("There's no cartridge connected.") if(cigcell) - to_chat(user,SPAN_NOTICE("The power meter shows that there's about [round(cigcell.percent(), 1)]% power remaining.")) + . += SPAN_NOTICE("The power meter shows that there's about [round(cigcell.percent(), 1)]% power remaining.") else - to_chat(user,SPAN_NOTICE("There's no cartridge connected.")) + . += SPAN_NOTICE("There's no cartridge connected.") /obj/item/clothing/mask/smokable/ecig/proc/Deactivate() active = 0 @@ -104,7 +103,7 @@ if(idle >= idle_treshold) //idle too long -> automatic shut down idle = 0 - visible_message(SPAN_NOTICE("\The [src] powers down automatically."), null, 2) + visible_message(SPAN_NOTICE("[src] powers down automatically."), null, 2) Deactivate() return @@ -115,7 +114,7 @@ if (!active || !ec_cartridge || !ec_cartridge.reagents.total_volume)//no cartridge if(!ec_cartridge.reagents.total_volume) - to_chat(C, SPAN_NOTICE("There's no liquid left in \the [src], so you shut it down.")) + to_chat(C, SPAN_NOTICE("There's no liquid left in [src], so you shut it down.")) Deactivate() return @@ -124,7 +123,7 @@ //here we'll reduce battery by usage, and check powerlevel - you only use batery while smoking if(!cigcell.checked_use(power_usage * CELLRATE)) //if this passes, there's not enough power in the battery Deactivate() - to_chat(C,SPAN_NOTICE("\The [src]'s power meter flashes a low battery warning and shuts down.")) + to_chat(C,SPAN_NOTICE("[src]'s power meter flashes a low battery warning and shuts down.")) return ec_cartridge.reagents.trans_to_mob(C, REM, CHEM_INGEST, 0.4) // Most of it is not inhaled... balance reasons. @@ -132,7 +131,7 @@ if (active) item_state = icon_on icon_state = icon_on - set_light(0.6, 0.5, brightness_on) + set_light(brightness_on) else if (ec_cartridge) set_light(0) item_state = icon_off @@ -147,6 +146,17 @@ M.update_inv_l_hand(0) M.update_inv_r_hand(1) +/obj/item/clothing/mask/smokable/ecig/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!cigcell) + USE_FEEDBACK_CELL_MISSING(user) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + cigcell.update_icon() + cigcell.dropInto(loc) + cigcell = null + USE_FEEDBACK_CELL_REMOVED(user) /obj/item/clothing/mask/smokable/ecig/attackby(obj/item/I, mob/user as mob) if(istype(I, /obj/item/reagent_containers/ecig_cartridge)) @@ -155,56 +165,49 @@ else if(user.unEquip(I, src))//fits in new one ec_cartridge = I update_icon() - to_chat(user, "[SPAN_NOTICE("You insert \the [I] into \the [src].")] ") - - if(istype(I, /obj/item/screwdriver)) - if(cigcell) //if contains powercell - cigcell.update_icon() - cigcell.dropInto(loc) - cigcell = null - to_chat(user, SPAN_NOTICE("You remove \the [cigcell] from \the [src].")) - else //does not contains cell - to_chat(user, SPAN_NOTICE("There's no battery in \the [src].")) + to_chat(user, "[SPAN_NOTICE("You insert [I] into [src].")] ") if(istype(I, /obj/item/cell/device)) if(!cigcell && user.unEquip(I)) I.forceMove(src) cigcell = I - to_chat(user, SPAN_NOTICE("You install \the [cigcell] into \the [src].")) + to_chat(user, SPAN_NOTICE("You install [cigcell] into [src].")) update_icon() else - to_chat(user, SPAN_NOTICE("\The [src] already has a battery installed.")) + to_chat(user, SPAN_NOTICE("[src] already has a battery installed.")) + + . = ..() /obj/item/clothing/mask/smokable/ecig/attack_self(mob/user as mob) if (active) Deactivate() - to_chat(user, "[SPAN_NOTICE("You turn off \the [src].")] ") + to_chat(user, "[SPAN_NOTICE("You turn off [src].")] ") else if(cigcell) if (!ec_cartridge) - to_chat(user, "[SPAN_NOTICE("You can't use \the [src] with no cartridge installed!")] ") + to_chat(user, "[SPAN_NOTICE("You can't use [src] with no cartridge installed!")] ") return else if(!ec_cartridge.reagents.total_volume) - to_chat(user, "[SPAN_NOTICE("You can't use \the [src] with no liquid left!")] ") + to_chat(user, "[SPAN_NOTICE("You can't use [src] with no liquid left!")] ") return else if(!cigcell.check_charge(power_usage * CELLRATE)) - to_chat(user, "[SPAN_NOTICE("\The [src]'s power meter flashes a low battery warning and refuses to operate.")] ") + to_chat(user, "[SPAN_NOTICE("[src]'s power meter flashes a low battery warning and refuses to operate.")] ") return active=1 START_PROCESSING(SSobj, src) - to_chat(user, "[SPAN_NOTICE("You turn on \the [src].")] ") + to_chat(user, "[SPAN_NOTICE("You turn on [src].")] ") update_icon() else - to_chat(user, SPAN_WARNING("\The [src] does not have a battery installed.")) + to_chat(user, SPAN_WARNING("[src] does not have a battery installed.")) /obj/item/clothing/mask/smokable/ecig/attack_hand(mob/user as mob)//eject cartridge if(user.get_inactive_hand() == src)//if being hold if (ec_cartridge) active=0 user.put_in_hands(ec_cartridge) - to_chat(user, "[SPAN_NOTICE("You remove \the [ec_cartridge] from \the [src].")] ") + to_chat(user, "[SPAN_NOTICE("You remove [ec_cartridge] from [src].")] ") ec_cartridge = null update_icon() else @@ -222,7 +225,7 @@ /obj/item/reagent_containers/ecig_cartridge/examine(mob/user)//to see how much left . = ..() - to_chat(user, "The cartridge has [reagents.total_volume] units of liquid remaining.") + . += SPAN_NOTICE("The cartridge has [reagents.total_volume] units of liquid remaining.") //flavours /obj/item/reagent_containers/ecig_cartridge/blank diff --git a/code/game/objects/items/weapons/electric_welder.dm b/code/game/objects/items/weapons/electric_welder.dm index 9a509ca237a46..2c808c43f4f8d 100644 --- a/code/game/objects/items/weapons/electric_welder.dm +++ b/code/game/objects/items/weapons/electric_welder.dm @@ -19,16 +19,16 @@ /obj/item/weldingtool/electric/examine(mob/user, distance) . = ..() if (!cell) - to_chat(user, "There is no [welding_resource] source attached.") + . += SPAN_NOTICE("There is no [welding_resource] source attached.") else - to_chat(user, (distance == 0 ? "It has [get_fuel()] [welding_resource] remaining. " : "") + "[cell] is attached.") + . += SPAN_NOTICE((distance == 0 ? "It has [get_fuel()] [welding_resource] remaining. " : "") + "[cell] is attached.") -/obj/item/weldingtool/electric/afterattack(obj/O, mob/user, proximity) - if(proximity && istype(O, /obj/structure/reagent_dispensers/fueltank)) +/obj/item/weldingtool/electric/use_after(obj/O, mob/living/user) + if(istype(O, /obj/structure/reagent_dispensers/fueltank)) if(!welding) - to_chat(user, SPAN_WARNING("\The [src] runs on an internal charge and does not need to be refuelled.")) - return - . = ..() + to_chat(user, SPAN_WARNING("[src] runs on an internal charge and does not need to be refuelled.")) + return TRUE + return ..() /obj/item/weldingtool/electric/get_cell() if(cell) @@ -45,27 +45,30 @@ var/obj/item/cell/cell = get_cell() return cell ? cell.charge : 0 +/obj/item/weldingtool/electric/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!cell) + USE_FEEDBACK_CELL_MISSING(user) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + cell.dropInto(get_turf(src)) + user.put_in_hands(cell) + USE_FEEDBACK_CELL_REMOVED(user) + welding = FALSE + cell = null + update_icon() + /obj/item/weldingtool/electric/attackby(obj/item/W, mob/user) if(istype(W,/obj/item/stack/material/rods) || istype(W, /obj/item/welder_tank)) return - if(isScrewdriver(W)) + if(istype(W, /obj/item/cell)) if(cell) - cell.dropInto(get_turf(src)) - user.put_in_hands(cell) - to_chat(user, SPAN_NOTICE("You pop \the [cell] out of \the [src].")) - welding = FALSE - cell = null - update_icon() - else - to_chat(user, SPAN_WARNING("\The [src] has no cell installed.")) - return - else if(istype(W, /obj/item/cell)) - if(cell) - to_chat(user, SPAN_WARNING("\The [src] already has a cell installed.")) + to_chat(user, SPAN_WARNING("[src] already has a cell installed.")) else if(user.unEquip(W)) cell = W cell.forceMove(src) - to_chat(user, SPAN_NOTICE("You slot \the [cell] into \the [src].")) + to_chat(user, SPAN_NOTICE("You slot [cell] into [src].")) update_icon() return . = ..() @@ -78,9 +81,19 @@ /obj/item/weldingtool/electric/on_update_icon() underlays.Cut() - item_state = welding ? "welder1" : "welder" + if(welding) + icon_state = "welder_arc1" + set_light(0.6, 0.5, 2.5, l_color = COLOR_LIGHT_CYAN) + else + icon_state = "welder_arc" + set_light(0) if(cell) underlays += image(icon = icon, icon_state = "[initial(icon_state)]_cell") + item_state = welding ? "welder1" : "welder" + var/mob/M = loc + if(istype(M)) + M.update_inv_l_hand() + M.update_inv_r_hand() /obj/item/weldingtool/electric/proc/spend_charge(amount) var/obj/item/cell/cell = get_cell() diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 662040397137e..e4c70f6acae42 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -2,7 +2,7 @@ name = "plastic explosives" desc = "Used to put holes in specific areas without too much extra hole." gender = PLURAL - icon = 'icons/obj/assemblies.dmi' + icon = 'icons/obj/assemblies/assemblies.dmi' icon_state = "plastic-explosive0" item_state = "plasticx" item_flags = ITEM_FLAG_NO_BLUDGEON @@ -16,7 +16,7 @@ /obj/item/plastique/New() wires = new(src) - image_overlay = image('icons/obj/assemblies.dmi', "plastic-explosive2") + image_overlay = image('icons/obj/assemblies/assemblies.dmi', "plastic-explosive2") ..() /obj/item/plastique/Destroy() @@ -24,34 +24,50 @@ wires = null return ..() +/obj/item/plastique/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + open_panel = !open_panel + USE_FEEDBACK_NEW_PANEL_OPEN(user, open_panel) + +/obj/item/plastique/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + wires.Interact(user) + +/obj/item/plastique/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + wires.Interact(user) + /obj/item/plastique/attackby(obj/item/I, mob/user) - if(isScrewdriver(I)) - open_panel = !open_panel - to_chat(user, SPAN_NOTICE("You [open_panel ? "open" : "close"] the wire panel.")) - else if(isWirecutter(I) || isMultitool(I) || istype(I, /obj/item/device/assembly/signaler )) + if(istype(I, /obj/item/device/assembly/signaler)) wires.Interact(user) - else - ..() + return + . = ..() /obj/item/plastique/attack_self(mob/user as mob) var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num - if(user.get_active_hand() == src) + if (newtime < 10) + to_chat(user, SPAN_WARNING("You cannot set the timer to be less than 10 seconds.")) + return + + if (user.get_active_hand() == src) newtime = clamp(newtime, 10, 60000) timer = newtime to_chat(user, "Timer set for [timer] seconds.") -/obj/item/plastique/afterattack(atom/movable/target, mob/user, flag) - if (!flag) - return - if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/storage) || istype(target, /obj/item/clothing/accessory/storage) || istype(target, /obj/item/clothing/under)) - return +/obj/item/plastique/use_after(atom/clicked, mob/living/user, click_parameters) + if (ismob(clicked) || istype(clicked, /turf/unsimulated) || istype(clicked, /turf/simulated/shuttle) || istype(clicked, /obj/item/clothing/accessory/storage) || istype(clicked, /obj/item/clothing/under)) + return FALSE + to_chat(user, "Planting explosives...") - user.do_attack_animation(target) + user.do_attack_animation(clicked) - if(do_after(user, 5 SECONDS, target, DO_DEFAULT | DO_USER_UNIQUE_ACT) && in_range(user, target)) + if(do_after(user, 5 SECONDS, clicked, DO_DEFAULT | DO_USER_UNIQUE_ACT) && in_range(user, clicked)) if(!user.unequip_item()) - return - src.target = target + FEEDBACK_UNEQUIP_FAILURE(user, src) + return TRUE + target = clicked forceMove(null) if (ismob(target)) @@ -60,11 +76,12 @@ log_game("[key_name(user)] planted [src.name] on [key_name(target)] with [timer] second fuse") else - log_and_message_admins("planted \a [src] with a [timer] second fuse on \the [target].") + log_and_message_admins("planted \a [src] with a [timer] second fuse on [target].") - target.overlays += image_overlay + target.AddOverlays(image_overlay) to_chat(user, "Bomb has been planted. Timer counting down from [timer].") run_timer() + return TRUE /obj/item/plastique/proc/explode(location) if(!target) @@ -83,7 +100,7 @@ else target.ex_act(EX_ACT_DEVASTATING) if(target) - target.overlays -= image_overlay + target.CutOverlays(image_overlay) qdel(src) /obj/item/plastique/proc/run_timer() //Basically exists so the C4 will beep when running. Better idea than putting sleeps in attackby. @@ -97,6 +114,3 @@ playsound(loc, 'sound/items/timer.ogg', 50) T-- explode(get_turf(target)) - -/obj/item/plastique/attack(mob/M as mob, mob/user as mob, def_zone) - return diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 5c99d9a01e569..2df99aabd3603 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -1,7 +1,7 @@ /obj/item/extinguisher name = "fire extinguisher" desc = "A traditional red fire extinguisher." - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/tools/fire_extinguishers.dmi' icon_state = "fire_extinguisher0" item_state = "fire_extinguisher" hitsound = 'sound/weapons/smash.ogg' @@ -15,13 +15,14 @@ matter = list(MATERIAL_STEEL = 90) attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") - var/spray_particles = 3 var/spray_amount = 120 //units of liquid per spray - 120 -> same as splashing them with a bucket per spray var/starting_water = 2000 var/max_water = 2000 var/last_use = 1.0 var/safety = 1 var/sprite_name = "fire_extinguisher" + var/list/preferred_reagent = list(/datum/reagent/water) + var/broken = FALSE /obj/item/extinguisher/mini name = "mini fire extinguisher" @@ -53,7 +54,7 @@ /obj/item/extinguisher/examine(mob/user, distance) . = ..() if(distance <= 0) - to_chat(user, text("[icon2html(src, viewers(get_turf(src)))] [] contains [] units of water left!", src, src.reagents.total_volume)) + . += SPAN_NOTICE(text("[icon2html(src, viewers(get_turf(src)))] [] contains [] units of fluid left!", src, src.reagents.total_volume)) /obj/item/extinguisher/attack_self(mob/user as mob) safety = !safety @@ -62,23 +63,6 @@ to_chat(user, "The safety is [safety ? "on" : "off"].") return -/obj/item/extinguisher/attack(mob/living/M, mob/user) - if(user.a_intent == I_HELP) - if(src.safety || (world.time < src.last_use + 20)) // We still catch help intent to not randomly attack people - return - if(src.reagents.total_volume < 1) - to_chat(user, SPAN_NOTICE("\The [src] is empty.")) - return - - src.last_use = world.time - reagents.splash(M, min(reagents.total_volume, spray_amount)) - - user.visible_message(SPAN_NOTICE("\The [user] sprays \the [M] with \the [src].")) - playsound(src.loc, 'sound/effects/extinguish.ogg', 75, 1, -3) - - return 1 // No afterattack - return ..() - /obj/item/extinguisher/proc/propel_object(obj/O, mob/user, movementdirection) if(O.anchored) return @@ -97,42 +81,68 @@ O.Move(get_step(user,movementdirection), movementdirection) sleep(3) -/obj/item/extinguisher/resolve_attackby(atom/target, mob/user, flag) - if (istype(target, /obj/structure/hygiene/sink) && reagents.get_free_space() > 0) // fill first, wash if full +/obj/item/extinguisher/use_before(obj/target, mob/living/user, click_parameters) + if (!(istype(target, /obj/structure/hygiene/sink) || istype(target, /obj/structure/reagent_dispensers))) return FALSE - return ..() - -/obj/item/extinguisher/afterattack(atom/target, mob/user, flag) - var/issink = istype(target, /obj/structure/hygiene/sink) + var/amount = reagents.get_free_space() + if (istype(target, /obj/structure/hygiene)) + if (amount <= 0) + return FALSE //Will proceed with washing the extinguisher + reagents.add_reagent(/datum/reagent/water, amount) - if (flag && (issink || istype(target, /obj/structure/reagent_dispensers))) - var/obj/dispenser = target - var/amount = reagents.get_free_space() + else if (amount <= 0) - to_chat(user, SPAN_NOTICE("\The [src] is full.")) - return - if (!issink) // sinks create reagents, they don't "contain" them - if (dispenser.reagents.total_volume <= 0) - to_chat(user, SPAN_NOTICE("\The [dispenser] is empty.")) - return - amount = dispenser.reagents.trans_to_obj(src, max_water) - else - reagents.add_reagent(/datum/reagent/water, amount) - to_chat(user, SPAN_NOTICE("You fill \the [src] with [amount] units from \the [dispenser].")) - playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) - if (istype(target, /obj/structure/reagent_dispensers/acid)) - to_chat(user, SPAN_WARNING("The acid violently eats away at \the [src]!")) - if (prob(50)) - reagents.splash(user, 5) + to_chat(user, SPAN_WARNING("\The [src] is already full.")) + return TRUE + if (target.reagents.total_volume <= 0) + to_chat(user, SPAN_WARNING("\The [target] is empty.")) + return TRUE + amount = target.reagents.trans_to_obj(src, max_water) + + if (istype(target, /obj/structure/reagent_dispensers/acid)) + to_chat(user, SPAN_DANGER("The acid violently eats away at \the [src]!")) + do_spray(user) + qdel(src) + return TRUE + + to_chat(user, SPAN_NOTICE("You fill \the [src] with [amount] unit\s from \the [target].")) + playsound(loc, 'sound/effects/refill.ogg', 50, 1, -6) + return TRUE + +/obj/item/extinguisher/use_tool(obj/item/item, mob/living/user, list/click_params) + if (istype(item, /obj/item/reagent_containers/glass)) + var/obj/item/reagent_containers/container = item + if (container.reagents.total_volume <= 0) + to_chat(user, SPAN_WARNING("\The [item] is empty.")) + return TRUE + if (reagents.get_free_space() <= 0) + to_chat(user, SPAN_WARNING("\The [src] is already full")) + return TRUE + var/trans_amount = container.amount_per_transfer_from_this + var/amount = container.reagents.trans_to_obj(src, trans_amount) + + if (reagents.has_reagent(/datum/reagent/acid)) + to_chat(user, SPAN_DANGER("The acid violently eats away at \the [src]!")) + do_spray(user) qdel(src) - return + return TRUE + + to_chat(user, SPAN_NOTICE("You fill \the [src] with [amount] unit\s from \the [container].")) + playsound(src, 'sound/effects/pour.ogg', 25, 1) + return TRUE + else return ..() +/obj/item/extinguisher/afterattack(atom/target, mob/user, flag) if (!safety) if (src.reagents.total_volume < 1) to_chat(usr, SPAN_NOTICE("\The [src] is empty.")) return + if (broken) + to_chat(user, SPAN_WARNING("The nozzle of \the [src] is gunked up beyond repair!")) + return + if (world.time < src.last_use + 20) return @@ -140,28 +150,32 @@ playsound(src.loc, 'sound/effects/extinguish.ogg', 75, 1, -3) - var/direction = get_dir(src,target) + var/direction = get_dir(target, src) if(user.buckled && isobj(user.buckled)) - addtimer(new Callback(src, .proc/propel_object, user.buckled, user, turn(direction,180)), 0) + addtimer(CALLBACK(src, PROC_REF(propel_object), user.buckled, user, direction), 0) - addtimer(new Callback(src, .proc/do_spray, target), 0) + visible_message(SPAN_NOTICE("\The [user] sprays towards \the [target] with \the [src].")) + addtimer(CALLBACK(src, PROC_REF(do_spray), target), 0) + + if(!user.check_space_footing()) + step(user, direction) + + if (reagents.has_other_reagent(preferred_reagent) && prob(15)) + broken = TRUE + to_chat(user, SPAN_WARNING("The foreign reagents gunked up the spraying mechanism, breaking \the [src].")) - if((istype(usr.loc, /turf/space)) || (usr.lastarea.has_gravity == 0)) - user.inertia_dir = get_dir(target, user) - step(user, user.inertia_dir) else return ..() - return /obj/item/extinguisher/proc/do_spray(atom/Target) var/turf/T = get_turf(Target) - var/per_particle = min(spray_amount, reagents.total_volume)/spray_particles - for(var/a = 1 to spray_particles) - if(!src || !reagents.total_volume) return - - var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(src)) - W.create_reagents(per_particle) - reagents.trans_to_obj(W, per_particle) - W.set_color() - W.set_up(T) + var/available_spray = min(spray_amount, reagents.total_volume) + if(!src || !reagents.total_volume) + return + + var/obj/effect/water/W = new /obj/effect/water(get_turf(src)) + W.create_reagents(available_spray) + reagents.trans_to_holder(W.reagents, available_spray, safety = 1) + W.set_color() + W.set_up(T) diff --git a/code/game/objects/items/weapons/flame.dm b/code/game/objects/items/weapons/flame.dm index ca91983f819a7..9f9c20d7e84a8 100644 --- a/code/game/objects/items/weapons/flame.dm +++ b/code/game/objects/items/weapons/flame.dm @@ -3,10 +3,10 @@ waterproof = FALSE var/lit = 0 -/obj/item/flame/afterattack(obj/O, mob/user, proximity) - ..() - if(proximity && lit && istype(O)) +/obj/item/flame/use_after(obj/O, mob/living/user, click_parameters) + if(lit && istype(O)) O.HandleObjectHeating(src, user, 700) + return TRUE /obj/item/flame/proc/extinguish(mob/user, no_message) lit = 0 @@ -19,27 +19,17 @@ if(submerged(depth)) extinguish(no_message = TRUE) -/proc/isflamesource(atom/A) - if(!istype(A)) - return FALSE - if(isWelder(A)) - var/obj/item/weldingtool/WT = A - return (WT.isOn()) - else if(istype(A, /obj/item/flame)) - var/obj/item/flame/F = A - return (F.lit) - else if(istype(A, /obj/item/clothing/mask/smokable) && !istype(A, /obj/item/clothing/mask/smokable/pipe)) - var/obj/item/clothing/mask/smokable/S = A - return (S.lit) - else if(istype(A, /obj/item/device/assembly/igniter)) - return TRUE - return FALSE + +/obj/item/flame/IsFlameSource() + return lit + /////////// //MATCHES// /////////// /obj/item/flame/match name = "match" + pluralname = "matche" desc = "A simple match stick, used for lighting fine smokables." icon = 'icons/obj/cigarettes.dmi' icon_state = "match_unlit" diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index ba77697c49436..638df6b479558 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -1,7 +1,7 @@ /obj/item/flamethrower name = "flamethrower" desc = "You are a firestarter!" - icon = 'icons/obj/flamethrower.dmi' + icon = 'icons/obj/weapons/flamethrower.dmi' icon_state = "flamethrowerbase" item_state = "flamethrower_0" obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -23,6 +23,21 @@ var/range = 4 var/max_beaker = ITEM_SIZE_SMALL + +/obj/item/flamethrower/examine(mob/user) + . = ..() + if (beaker) + if (beaker.reagents) + . += SPAN_NOTICE("The loaded [beaker.name] has about [beaker.reagents.total_volume] unit\s left.") + else + . += SPAN_NOTICE("The loaded [beaker.name] is empty.") + else + . += SPAN_NOTICE("[src] has no fuel container loaded!.") + + if (lit) + . += SPAN_NOTICE("[src] is lit!") + + /obj/item/flamethrower/Destroy() QDEL_NULL(weldtool) QDEL_NULL(igniter) @@ -33,6 +48,13 @@ if(!lit) STOP_PROCESSING(SSobj, src) return null + else if (!beaker || beaker.reagents.total_volume == 0) + visible_message(SPAN_WARNING("[src] sputters and goes out!")) + playsound(loc, 'sound/items/welderdeactivate.ogg', 50, TRUE) + STOP_PROCESSING(SSobj,src) + set_light(0) + lit = FALSE + update_icon() var/turf/location = loc if(ismob(location)) var/mob/M = location @@ -44,13 +66,13 @@ /obj/item/flamethrower/on_update_icon() - overlays.Cut() + ClearOverlays() if(igniter) - overlays += "+igniter[status]" + AddOverlays("+igniter[status]") if(beaker) - overlays += "+ptank" + AddOverlays("+ptank") if(lit) - overlays += "+lit" + AddOverlays("+lit") item_state = "flamethrower_1" else item_state = "flamethrower_0" @@ -59,7 +81,7 @@ /obj/item/flamethrower/afterattack(atom/target, mob/user, proximity) // Make sure our user is still holding us if(user.a_intent == I_HELP) //don't shoot if we're on help intent - to_chat(user, SPAN_WARNING("You refrain from firing \the [src] as your intent is set to help.")) + to_chat(user, SPAN_WARNING("You refrain from firing [src] as your intent is set to help.")) return var/turf/target_turf = get_turf(target) if(target_turf) @@ -76,32 +98,41 @@ else return ..() -/obj/item/flamethrower/attackby(obj/item/W as obj, mob/user as mob) - if(user.stat || user.restrained() || user.lying) return - if(isWrench(W) && !status && !complete)//Taking this apart - if(weldtool) - weldtool.dropInto(loc) - weldtool = null - if(igniter) - igniter.dropInto(loc) - igniter = null - if(beaker) - beaker.dropInto(loc) - beaker = null - new /obj/item/stack/material/rods(get_turf(src)) - qdel(src) +/obj/item/flamethrower/screwdriver_act(mob/living/user, obj/item/tool) + if(!igniter || lit || complete) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return + status = !status + to_chat(user, SPAN_NOTICE("[igniter] is now [status ? "secured" : "unsecured"]!")) + update_icon() - if(isScrewdriver(W) && igniter && !lit && !complete) - status = !status - to_chat(user, SPAN_NOTICE("\The [igniter] is now [status ? "secured" : "unsecured"]!")) - update_icon() +/obj/item/flamethrower/wrench_act(mob/living/user, obj/item/tool) + if(status || complete) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return + if(weldtool) + weldtool.dropInto(loc) + weldtool = null + if(igniter) + igniter.dropInto(loc) + igniter = null + if(beaker) + beaker.dropInto(loc) + beaker = null + new /obj/item/stack/material/rods(get_turf(src)) + qdel(src) +/obj/item/flamethrower/attackby(obj/item/W as obj, mob/user as mob) if(isigniter(W)) var/obj/item/device/assembly/igniter/I = W - if(I.secured) return - if(igniter) return + if(I.secured) + return + if(igniter) + return if(!user.unEquip(I, src)) return igniter = I @@ -125,8 +156,8 @@ toggle_igniter(user) /obj/item/flamethrower/proc/toggle_igniter(mob/user) - if(!beaker) - to_chat(user, SPAN_NOTICE("Attach a fuel container first!")) + if(!beaker || beaker.reagents.total_volume == 0) + to_chat(user, SPAN_NOTICE("There isn't enough fuel!")) return if(!status) to_chat(user,SPAN_NOTICE("Secure the igniter first!")) @@ -140,7 +171,7 @@ playsound(loc, 'sound/items/welderdeactivate.ogg', 50, TRUE) STOP_PROCESSING(SSobj,src) if(lit) - set_light(0.7, 1, 2.5, l_color = COLOR_ORANGE) + set_light(2.5, 0.7, l_color = COLOR_ORANGE) else set_light(0) @@ -173,7 +204,7 @@ fire_colour = R.fire_colour if(power < REQUIRED_POWER_TO_FIRE_FLAMETHROWER) - audible_message(SPAN_DANGER("The [src] sputters.")) + audible_message(SPAN_DANGER("[src] sputters.")) playsound(src, 'sound/weapons/guns/flamethrower_empty.ogg', 50, TRUE, -3) return playsound(src, pick('sound/weapons/guns/flamethrower1.ogg','sound/weapons/guns/flamethrower2.ogg','sound/weapons/guns/flamethrower3.ogg' ), 50, TRUE, -3) @@ -205,13 +236,13 @@ #undef FLAMETHROWER_POWER_MULTIPLIER /obj/item/flamethrower/full - icon = 'icons/obj/flamethrower_new.dmi' + icon = 'icons/obj/weapons/flamethrower_new.dmi' item_state = "prebuilt_flamethrower_0" complete = TRUE item_icons = list( - slot_l_hand_str = 'icons/obj/flamethrower_new.dmi', - slot_r_hand_str = 'icons/obj/flamethrower_new.dmi', + slot_l_hand_str = 'icons/obj/weapons/flamethrower_new.dmi', + slot_r_hand_str = 'icons/obj/weapons/flamethrower_new.dmi', ) item_state_slots = list( diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm deleted file mode 100644 index 157d1e194749f..0000000000000 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ /dev/null @@ -1,217 +0,0 @@ -/* Gifts and wrapping paper - * Contains: - * Gifts - * Wrapping Paper - */ - -/* - * Gifts - */ -/obj/item/a_gift - name = "gift" - desc = "PRESENTS!!!! eek!" - icon = 'icons/obj/items.dmi' - icon_state = "gift1" - item_state = "gift1" - randpixel = 10 - -/obj/item/a_gift/New() - ..() - if(w_class > 0 && w_class < ITEM_SIZE_HUGE) - icon_state = "gift[w_class]" - else - icon_state = "gift[pick(1, 2, 3)]" - return - -/obj/item/a_gift/ex_act() - qdel(src) - return - -/obj/effect/spresent/relaymove(mob/user as mob) - if (user.stat) - return - to_chat(user, SPAN_WARNING("You can't move.")) - -/obj/effect/spresent/attackby(obj/item/W as obj, mob/user as mob) - ..() - - if(!isWirecutter(W)) - to_chat(user, SPAN_WARNING("I need wirecutters for that.")) - return - - to_chat(user, SPAN_NOTICE("You cut open the present.")) - - for(var/mob/M in src) //Should only be one but whatever. - M.dropInto(loc) - if (M.client) - M.client.eye = M.client.mob - M.client.perspective = MOB_PERSPECTIVE - - qdel(src) - -/obj/item/a_gift/attack_self(mob/M as mob) - var/gift_type = pick( - /obj/item/storage/wallet, - /obj/item/storage/photo_album, - /obj/item/storage/box/snappops, - /obj/item/storage/fancy/crayons, - /obj/item/storage/backpack/holding, - /obj/item/storage/belt/champion, - /obj/item/pickaxe/silver, - /obj/item/pen/invisible, - /obj/item/lipstick/random, - /obj/item/grenade/smokebomb, - /obj/item/carvable/corncob, - /obj/item/contraband/poster, - /obj/item/book/manual/barman_recipes, - /obj/item/book/manual/chef_recipes, - /obj/item/bikehorn, - /obj/item/beach_ball, - /obj/item/beach_ball/holoball, - /obj/item/toy/water_balloon, - /obj/item/toy/blink, - /obj/item/toy/crossbow, - /obj/item/gun/projectile/revolver/capgun, - /obj/item/toy/katana, - /obj/item/toy/prize/deathripley, - /obj/item/toy/prize/durand, - /obj/item/toy/prize/fireripley, - /obj/item/toy/prize/gygax, - /obj/item/toy/prize/honk, - /obj/item/toy/prize/marauder, - /obj/item/toy/prize/mauler, - /obj/item/toy/prize/odysseus, - /obj/item/toy/prize/phazon, - /obj/item/toy/prize/powerloader, - /obj/item/toy/prize/seraph, - /obj/item/toy/spinningtoy, - /obj/item/toy/sword, - /obj/item/reagent_containers/food/snacks/grown/ambrosiadeus, - /obj/item/reagent_containers/food/snacks/grown/ambrosiavulgaris, - /obj/item/device/paicard, - /obj/item/device/synthesized_instrument/violin, - /obj/item/storage/belt/utility/full, - /obj/item/clothing/accessory/horrible, - /obj/item/storage/box/large/foam_gun, - /obj/item/storage/box/large/foam_gun/burst, - /obj/item/storage/box/large/foam_gun/revolver) - - if(!ispath(gift_type,/obj/item)) return - - var/obj/item/I = new gift_type(M) - M.put_in_hands(I) - I.add_fingerprint(M) - qdel(src) - -/* - * Wrapping Paper and Gifts - */ - -/obj/item/gift - name = "gift" - desc = "A wrapped item." - icon = 'icons/obj/items.dmi' - icon_state = "gift3" - var/size = 3.0 - var/obj/item/gift = null - item_state = "gift" - w_class = ITEM_SIZE_HUGE - -/obj/item/gift/New(newloc, obj/item/wrapped = null) - ..(newloc) - - if(istype(wrapped)) - gift = wrapped - w_class = gift.w_class - gift.forceMove(src) - - //a good example of where we don't want to use the w_class defines - switch(gift.w_class) - if(1) icon_state = "gift1" - if(2) icon_state = "gift1" - if(3) icon_state = "gift2" - if(4) icon_state = "gift2" - if(5) icon_state = "gift3" - -/obj/item/gift/attack_self(mob/user as mob) - user.drop_item() - if(src.gift) - user.put_in_active_hand(gift) - src.gift.add_fingerprint(user) - else - to_chat(user, SPAN_WARNING("The gift was empty!")) - qdel(src) - return - -/obj/item/wrapping_paper - name = "wrapping paper" - desc = "You can use this to wrap items in." - icon = 'icons/obj/items.dmi' - icon_state = "wrap_paper" - var/amount = 2.5*BASE_STORAGE_COST(ITEM_SIZE_HUGE) - -/obj/item/wrapping_paper/attackby(obj/item/W as obj, mob/user as mob) - ..() - if (!( locate(/obj/structure/table, src.loc) )) - to_chat(user, SPAN_WARNING("You MUST put the paper on a table!")) - if (W.w_class < ITEM_SIZE_HUGE) - var/is_wirecutter = FALSE - for (var/obj/item as anything in user.GetAllHeld()) - if (isWirecutter(item)) - is_wirecutter = TRUE - break - if (is_wirecutter) - var/a_used = W.get_storage_cost() - if (a_used == ITEM_SIZE_NO_CONTAINER) - to_chat(user, SPAN_WARNING("You can't wrap that!"))//no gift-wrapping lit welders - - return - if (src.amount < a_used) - to_chat(user, SPAN_WARNING("You need more paper!")) - return - else - if(istype(W, /obj/item/smallDelivery) || istype(W, /obj/item/gift)) //No gift wrapping gifts! - return - - if(user.unEquip(W)) - var/obj/item/gift/G = new /obj/item/gift( src.loc, W ) - G.add_fingerprint(user) - W.add_fingerprint(user) - src.amount -= a_used - - if (src.amount <= 0) - new /obj/item/c_tube( src.loc ) - qdel(src) - return - else - to_chat(user, SPAN_WARNING("You need scissors!")) - else - to_chat(user, SPAN_WARNING("The object is FAR too large!")) - return - - -/obj/item/wrapping_paper/examine(mob/user, distance) - . = ..() - if(distance <= 1) - to_chat(user, text("There is about [] square units of paper left!", src.amount)) - -/obj/item/wrapping_paper/attack(mob/target as mob, mob/user as mob) - if (!istype(target, /mob/living/carbon/human)) return - var/mob/living/carbon/human/H = target - - if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket) || H.stat) - if (src.amount > 2) - var/obj/effect/spresent/present = new /obj/effect/spresent (H.loc) - src.amount -= 2 - - if (H.client) - H.client.perspective = EYE_PERSPECTIVE - H.client.eye = present - - H.forceMove(present) - admin_attack_log(user, H, "Used \a [src] to wrap their victim", "Was wrapepd with \a [src]", "used \the [src] to wrap") - - else - to_chat(user, SPAN_WARNING("You need more paper.")) - else - to_chat(user, "They are moving around too much. A straightjacket would help.") diff --git a/code/game/objects/items/weapons/gifts.dm b/code/game/objects/items/weapons/gifts.dm new file mode 100644 index 0000000000000..8e86de2bbd4e9 --- /dev/null +++ b/code/game/objects/items/weapons/gifts.dm @@ -0,0 +1,73 @@ +/obj/item/a_gift + name = "gift" + desc = "PRESENTS!!!! eek!" + icon = 'icons/obj/parcels.dmi' + icon_state = "gift1" + item_state = "gift1" + randpixel = 10 + +/obj/item/a_gift/New() + ..() + if(w_class > 0 && w_class < ITEM_SIZE_HUGE) + icon_state = "gift[w_class]" + else + icon_state = "gift[pick(1, 2, 3)]" + return + +/obj/item/a_gift/ex_act() + qdel(src) + return + +/obj/item/a_gift/attack_self(mob/M as mob) + var/gift_type = pick( + /obj/item/storage/wallet, + /obj/item/storage/photo_album, + /obj/item/storage/box/snappops, + /obj/item/storage/fancy/crayons, + /obj/item/storage/backpack/holding, + /obj/item/storage/belt/champion, + /obj/item/pickaxe/hand/silver, + /obj/item/pen/invisible, + /obj/item/lipstick/random, + /obj/item/grenade/smokebomb, + /obj/item/carvable/corncob, + /obj/item/contraband/poster, + /obj/item/book/manual/barman_recipes, + /obj/item/book/manual/chef_recipes, + /obj/item/bikehorn, + /obj/item/beach_ball, + /obj/item/beach_ball/holoball, + /obj/item/toy/water_balloon, + /obj/item/toy/blink, + /obj/item/toy/crossbow, + /obj/item/gun/projectile/revolver/capgun, + /obj/item/toy/katana, + /obj/item/toy/prize/deathripley, + /obj/item/toy/prize/durand, + /obj/item/toy/prize/fireripley, + /obj/item/toy/prize/gygax, + /obj/item/toy/prize/honk, + /obj/item/toy/prize/marauder, + /obj/item/toy/prize/mauler, + /obj/item/toy/prize/odysseus, + /obj/item/toy/prize/phazon, + /obj/item/toy/prize/powerloader, + /obj/item/toy/prize/seraph, + /obj/item/toy/spinningtoy, + /obj/item/toy/sword, + /obj/item/reagent_containers/food/snacks/grown/ambrosiadeus, + /obj/item/reagent_containers/food/snacks/grown/ambrosiavulgaris, + /obj/item/device/paicard, + /obj/item/device/synthesized_instrument/violin, + /obj/item/storage/belt/utility/full, + /obj/item/clothing/accessory/horrible, + /obj/item/storage/box/large/foam_gun, + /obj/item/storage/box/large/foam_gun/burst, + /obj/item/storage/box/large/foam_gun/revolver) + + if(!ispath(gift_type,/obj/item)) return + + var/obj/item/I = new gift_type(M) + M.put_in_hands(I) + I.add_fingerprint(M) + qdel(src) diff --git a/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm b/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm index d428534046f34..435384b1f6448 100644 --- a/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm +++ b/code/game/objects/items/weapons/grenades/anti_photon_grenade.dm @@ -8,11 +8,11 @@ /obj/item/grenade/anti_photon/detonate(mob/living/user) playsound(src.loc, 'sound/effects/phasein.ogg', 50, 1, 5) - set_light(-1, 6, 10, 2, "#ffffff") - addtimer(new Callback(src, .proc/finish), rand(20 SECONDS, 29 SECONDS)) + set_light(10, -10, "#ffffff") + addtimer(CALLBACK(src, PROC_REF(finish)), rand(20 SECONDS, 29 SECONDS)) /obj/item/grenade/anti_photon/proc/finish() - set_light(1, 1, 10, 2, "#[num2hex(rand(64,255))][num2hex(rand(64,255))][num2hex(rand(64,255))]") + set_light(10, 10, "#[num2hex(rand(64,255))][num2hex(rand(64,255))][num2hex(rand(64,255))]") playsound(loc, 'sound/effects/bang.ogg', 50, 1, 5) sleep(1 SECOND) qdel(src) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index ad847e93efb2b..40d8661f79d38 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -11,7 +11,7 @@ var/state = 0 var/path = 0 var/obj/item/device/assembly_holder/detonator = null - var/list/beakers = new/list() + var/list/beakers = list() var/list/allowed_containers = list(/obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle) var/affected_area = 3 @@ -45,6 +45,34 @@ var/mob/living/carbon/C = user C.throw_mode_on() +/obj/item/grenade/chem_grenade/screwdriver_act(mob/living/user, obj/item/tool) + if(path == 2) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 20, do_flags = DO_REPAIR_CONSTRUCT)) + return + switch(stage) + if(1) + path = 1 + if(length(beakers)) + to_chat(user, SPAN_NOTICE("You lock the assembly.")) + SetName("grenade") + else + to_chat(user, SPAN_NOTICE("You lock the empty assembly.")) + SetName("fake grenade") + icon_state = initial(icon_state) +"_locked" + stage = 2 + if(2) + if(active && prob(95)) + to_chat(user, SPAN_WARNING("You trigger the assembly!")) + detonate() + return + else + to_chat(user, SPAN_NOTICE("You unlock the assembly.")) + SetName("unsecured grenade with [length(beakers)] containers[detonator?" and detonator":""]") + icon_state = initial(icon_state) + (detonator?"_ass":"") + stage = 1 + active = 0 /obj/item/grenade/chem_grenade/attackby(obj/item/W, mob/user) if(istype(W,/obj/item/device/assembly_holder) && (!stage || stage==1) && path != 2) @@ -71,31 +99,6 @@ icon_state = initial(icon_state) +"_ass" SetName("unsecured grenade with [length(beakers)] containers[detonator?" and detonator":""]") stage = 1 - else if(isScrewdriver(W) && path != 2) - if(stage == 1) - path = 1 - if(length(beakers)) - to_chat(user, SPAN_NOTICE("You lock the assembly.")) - SetName("grenade") - else -// to_chat(user, SPAN_WARNING("You need to add at least one beaker before locking the assembly.")) - to_chat(user, SPAN_NOTICE("You lock the empty assembly.")) - SetName("fake grenade") - playsound(loc, 'sound/items/Screwdriver.ogg', 25, -3) - icon_state = initial(icon_state) +"_locked" - stage = 2 - else if(stage == 2) - if(active && prob(95)) - to_chat(user, SPAN_WARNING("You trigger the assembly!")) - detonate() - return - else - to_chat(user, SPAN_NOTICE("You unlock the assembly.")) - playsound(loc, 'sound/items/Screwdriver.ogg', 25, -3) - SetName("unsecured grenade with [length(beakers)] containers[detonator?" and detonator":""]") - icon_state = initial(icon_state) + (detonator?"_ass":"") - stage = 1 - active = 0 else if(is_type_in_list(W, allowed_containers) && (!stage || stage==1) && path != 2) path = 1 if(length(beakers) == 2) @@ -155,7 +158,7 @@ for(var/obj/item/reagent_containers/glass/G in beakers) G.reagents.trans_to_obj(src, G.reagents.total_volume) if(src.reagents.total_volume) //The possible reactions didnt use up all reagents. - var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread() + var/datum/effect/steam_spread/steam = new /datum/effect/steam_spread() steam.set_up(10, 0, get_turf(src)) steam.attach(src) steam.start() @@ -175,7 +178,7 @@ /obj/item/grenade/chem_grenade/examine(mob/user) . = ..() if(detonator) - to_chat(user, "With attached [detonator.name]") + . += SPAN_NOTICE("With attached [detonator.name]") /obj/item/grenade/chem_grenade/large diff --git a/code/game/objects/items/weapons/grenades/explosive.dm b/code/game/objects/items/weapons/grenades/explosive.dm index 8aca364165072..51e73694677cd 100644 --- a/code/game/objects/items/weapons/grenades/explosive.dm +++ b/code/game/objects/items/weapons/grenades/explosive.dm @@ -131,21 +131,22 @@ det_time = rand(5,100) // Fuse is randomized. . = ..() +/obj/item/grenade/frag/makeshift/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + balloon_alert(user, "нельзя изменить таймер!") + /obj/item/grenade/frag/makeshift/attackby(obj/item/W, mob/user) - if(isScrewdriver(W)) //overrides the act to screwdrive a grenade to set its fuse. - to_chat(user, SPAN_WARNING("You can't adjust the timer on \the [src]!")) - return TRUE if (is_type_in_list(W, possible_reinforcements)) if(shrapnel_reinforced<10) //you can only add 10 items inside the can user.visible_message( - SPAN_WARNING("\The [user] pries \the [src] open and drops \a [W] inside."), - SPAN_DANGER("You open \the [src], carefully adding \a [W] before sealing the lid again."), + SPAN_WARNING("[user] pries [src] open and drops [W] inside."), + SPAN_DANGER("You open [src], carefully adding [W] before sealing the lid again."), SPAN_WARNING("You hear a metallic crack, followed by clinking.") ) num_fragments += rand(3,7) // add 3 to 7 pellets. If you're /REALLY/ lucky, you'll end up with something similar to a standard grenade shrapnel_reinforced += 1 qdel(W) else - to_chat(user, SPAN_WARNING("You can't add any more items to \the [src]!")) + to_chat(user, SPAN_WARNING("You can't add any more items to [src]!")) return TRUE return ..() diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 88e3984c23beb..d09fdd2eb2dc7 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -15,12 +15,12 @@ for(var/mob/living/carbon/M in victims) bang(T, M) - for(var/obj/effect/blob/B in objs) //Blob damage here + for(var/obj/blob/B in objs) //Blob damage here var/damage = round(30/(get_dist(B,T)+1)) B.damage_health(damage, DAMAGE_SHOCK) - new/obj/effect/sparks(src.loc) - new/obj/effect/effect/smoke/illumination(src.loc, 5, range=30, power=1, color="#ffffff") + new/obj/sparks(src.loc) + new/obj/effect/smoke/illumination(src.loc, 5, range=30, power=1, color="#ffffff") qdel(src) /obj/item/grenade/flashbang/proc/bang(turf/T , mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged. @@ -36,8 +36,6 @@ if(ishuman(M)) if(M.get_sound_volume_multiplier() < 0.2) ear_safety += 2 - if(MUTATION_HULK in M.mutations) - ear_safety += 1 var/mob/living/carbon/human/H = M if(istype(H.head, /obj/item/clothing/head/helmet)) ear_safety += 1 @@ -46,29 +44,29 @@ M.flash_eyes(FLASH_PROTECTION_MODERATE) if(eye_safety < FLASH_PROTECTION_MODERATE) M.Stun(2) - M.confused += 5 + M.mod_confused(5) //Now applying sound if(ear_safety) if(ear_safety < 2 && get_dist(M, T) <= 2) M.Stun(1) - M.confused += 3 + M.mod_confused(3) else if(get_dist(M, T) <= 2) M.Stun(3) - M.confused += 8 + M.mod_confused(8) M.ear_damage += rand(0, 5) M.ear_deaf = max(M.ear_deaf,15) else if(get_dist(M, T) <= 5) M.Stun(2) - M.confused += 5 + M.mod_confused(5) M.ear_damage += rand(0, 3) M.ear_deaf = max(M.ear_deaf,10) else M.Stun(1) - M.confused += 3 + M.mod_confused(3) M.ear_damage += rand(0, 1) M.ear_deaf = max(M.ear_deaf,5) @@ -90,7 +88,7 @@ /obj/item/grenade/flashbang/clusterbang//Created by Polymorph, fixed by Sieve desc = "Use of this weapon may constiute a war crime in your area, consult your local captain." name = "clusterbang" - icon = 'icons/obj/grenade.dmi' + icon = 'icons/obj/weapons/grenade.dmi' icon_state = "clusterbang" /obj/item/grenade/flashbang/clusterbang/detonate(mob/living/user) @@ -114,7 +112,7 @@ /obj/item/grenade/flashbang/clusterbang/segment desc = "A smaller segment of a clusterbang. Better run." name = "clusterbang segment" - icon = 'icons/obj/grenade.dmi' + icon = 'icons/obj/weapons/grenade.dmi' icon_state = "clusterbang_segment" /obj/item/grenade/flashbang/clusterbang/segment/New()//Segments should never exist except part of the clusterbang, since these immediately 'do their thing' and asplode diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index f62b7ec9c1e64..481122a6f05ed 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -2,7 +2,7 @@ name = "grenade" desc = "A hand held grenade, with an adjustable timer." w_class = ITEM_SIZE_SMALL - icon = 'icons/obj/grenade.dmi' + icon = 'icons/obj/weapons/grenade.dmi' icon_state = "grenade" item_state = "grenade" throw_speed = 4 @@ -29,11 +29,11 @@ . = ..() if(distance <= 0) if(det_time > 1) - to_chat(user, "The timer is set to [det_time/10] seconds.") + . += SPAN_NOTICE("The timer is set to [det_time/10] seconds.") return - if(det_time == null) + if(isnull(det_time)) return - to_chat(user, "\The [src] is set for instant detonation.") + . += SPAN_NOTICE("[src] is set for instant detonation.") /obj/item/grenade/attack_self(mob/living/user) @@ -55,7 +55,7 @@ icon_state = initial(icon_state) + "_active" active = TRUE playsound(loc, arm_sound, 75, 0, -3) - addtimer(new Callback(src, .proc/detonate, user), det_time) + addtimer(CALLBACK(src, PROC_REF(detonate), user), det_time) /obj/item/grenade/proc/detonate(mob/living/user) @@ -63,23 +63,24 @@ if(T) T.hotspot_expose(700,125) -/obj/item/grenade/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W)) - switch(det_time) - if (1) - det_time = 10 - to_chat(user, SPAN_NOTICE("You set the [name] for 1 second detonation time.")) - if (10) - det_time = 30 - to_chat(user, SPAN_NOTICE("You set the [name] for 3 second detonation time.")) - if (30) - det_time = 50 - to_chat(user, SPAN_NOTICE("You set the [name] for 5 second detonation time.")) - if (50) - det_time = 1 - to_chat(user, SPAN_NOTICE("You set the [name] for instant detonation.")) - add_fingerprint(user) - ..() +/obj/item/grenade/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + switch(det_time) + if(1) + det_time = 1 SECONDS + balloon_alert(user, "1 секунда") + if(1 SECONDS) + det_time = 3 SECONDS + balloon_alert(user, "3 секунды") + if(3 SECONDS) + det_time = 5 SECONDS + balloon_alert(user, "5 секунд") + if(5 SECONDS) + det_time = 1 + balloon_alert(user, "мгновенная детонация") + add_fingerprint(user) /obj/item/grenade/attack_hand() walk(src, null, null) diff --git a/code/game/objects/items/weapons/grenades/light.dm b/code/game/objects/items/weapons/grenades/light.dm index f6c947468e1a1..08b8568ab62b4 100644 --- a/code/game/objects/items/weapons/grenades/light.dm +++ b/code/game/objects/items/weapons/grenades/light.dm @@ -12,5 +12,5 @@ playsound(src, 'sound/effects/snap.ogg', 80, 1) audible_message(SPAN_WARNING("\The [src] detonates with a sharp crack!")) - set_light(1, 1, 12, 2, light_colour) + set_light(12, 1, light_colour) QDEL_IN(src, lifetime) diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index 7fd3a090c3757..4ea3e376c9854 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -1,12 +1,12 @@ /obj/item/grenade/smokebomb desc = "It is set to detonate in 2 seconds." name = "smoke bomb" - icon = 'icons/obj/grenade.dmi' + icon = 'icons/obj/weapons/grenade.dmi' icon_state = "flashbang" det_time = 20 item_state = "flashbang" slot_flags = SLOT_BELT - var/datum/effect/effect/system/smoke_spread/bad/smoke + var/datum/effect/smoke_spread/bad/smoke var/smoke_times = 4 /obj/item/grenade/smokebomb/Destroy() @@ -16,11 +16,11 @@ /obj/item/grenade/smokebomb/detonate(mob/living/user) playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3) - smoke = new /datum/effect/effect/system/smoke_spread/bad + smoke = new /datum/effect/smoke_spread/bad smoke.attach(src) smoke.set_up(10, 0, get_turf(src)) START_PROCESSING(SSobj, src) - for(var/obj/effect/blob/B in view(8,src)) + for(var/obj/blob/B in view(8,src)) var/damage = round(30/(get_dist(B,src)+1)) B.damage_health(damage, DAMAGE_BURN) B.update_icon() diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm index 7bdbf676125f5..8449c1539de4d 100644 --- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm +++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm @@ -1,7 +1,7 @@ /obj/item/grenade/spawnergrenade desc = "It is set to detonate in 5 seconds. It will unleash unleash an unspecified anomaly into the vicinity." name = "delivery grenade" - icon = 'icons/obj/grenade.dmi' + icon = 'icons/obj/weapons/grenade.dmi' icon_state = "delivery" item_state = "flashbang" origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4) diff --git a/code/game/objects/items/weapons/grenades/supermatter.dm b/code/game/objects/items/weapons/grenades/supermatter.dm index 9f0fe5a697a39..1022a5a7359ba 100644 --- a/code/game/objects/items/weapons/grenades/supermatter.dm +++ b/code/game/objects/items/weapons/grenades/supermatter.dm @@ -19,9 +19,9 @@ playsound(src, 'sound/weapons/wave.ogg', 100) /obj/item/grenade/supermatter/on_update_icon() - overlays.Cut() + ClearOverlays() if(implode_at) - overlays += image(icon = 'icons/obj/machines/power/fusion.dmi', icon_state = "emfield_s1") + AddOverlays(image(icon = 'icons/obj/machines/power/fusion_field.dmi', icon_state = "emfield_s1")) /obj/item/grenade/supermatter/Process() if(!isturf(loc)) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index b836f311523c2..e86686ba5afd7 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -2,7 +2,7 @@ name = "handcuffs" desc = "Use this to keep prisoners in line." gender = PLURAL - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/tools/handcuffs.dmi' icon_state = "handcuff" obj_flags = OBJ_FLAG_CONDUCTIBLE slot_flags = SLOT_BELT @@ -14,7 +14,7 @@ matter = list(MATERIAL_STEEL = 500) var/elastic var/dispenser = 0 - var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes + breakout_time = 120 SECONDS var/cuff_sound = 'sound/weapons/handcuffs.ogg' var/cuff_type = "handcuffs" @@ -25,32 +25,31 @@ return "legcuff1" return ..() -/obj/item/handcuffs/attack(mob/living/carbon/C, mob/living/user) - - if(!user.IsAdvancedToolUser()) - return +/obj/item/handcuffs/use_before(mob/living/carbon/C, mob/living/user) + . = FALSE + if (!user.IsAdvancedToolUser()) + return FALSE if ((MUTATION_CLUMSY in user.mutations) && prob(50)) to_chat(user, SPAN_WARNING("Uh ... how do those things work?!")) place_handcuffs(user, user) - return + return TRUE // only carbons can be handcuffed - if(istype(C)) - if(!C.handcuffed) + if (istype(C)) + if (!C.handcuffed) if (C == user) place_handcuffs(user, user) - return + return TRUE //check for an aggressive grab (or robutts) - if(C.has_danger_grab(user)) + if (C.has_danger_grab(user)) place_handcuffs(C, user) else to_chat(user, SPAN_DANGER("You need to have a firm grip on [C] before you can put \the [src] on!")) else to_chat(user, SPAN_WARNING("\The [C] is already handcuffed!")) - else - ..() + return TRUE /obj/item/handcuffs/proc/can_place(mob/target, mob/user) if(user == target || istype(user, /mob/living/silicon/robot) || istype(user, /mob/living/bot)) @@ -104,30 +103,39 @@ var/global/last_chew = 0 /mob/living/carbon/human/RestrainedClickOn(atom/A) if (A != src) return ..() - if (last_chew + 26 > world.time) return + if (last_chew + 26 > world.time) + to_chat(src, SPAN_WARNING("You need a break from chewing your own hand off, the pain is too much!")) + return var/mob/living/carbon/human/H = A if (!H.handcuffed) return - if (H.a_intent != I_HURT) return - if (H.zone_sel.selecting != BP_MOUTH) return - if (H.wear_mask) return - if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket)) return + if (H.a_intent != I_HURT) + to_chat(src, SPAN_WARNING("You consider chewing your hands out of the restraints, but choose not to harm yourself.")) + return + if (H.zone_sel.selecting != BP_MOUTH) + to_chat(src, SPAN_WARNING("You need to target your mouth to start chewing through your restraints!")) + return + if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket)) + to_chat(src, SPAN_WARNING("Try as you might, you cannot chew through \the [H.wear_suit.name].")) + return + if (H.wear_mask) + to_chat(src, SPAN_WARNING("Your mouth is covered, you cannot chew through your restraints!")) + return var/obj/item/organ/external/O = H.organs_by_name[(H.hand ? BP_L_HAND : BP_R_HAND)] if (!O) return - H.visible_message(SPAN_WARNING("\The [H] chews on \his [O.name]!"), SPAN_WARNING("You chew on your [O.name]!")) + H.visible_message(SPAN_DANGER("\The [H] chews on \his [O.name]!"), SPAN_DANGER("You chew on your [O.name]!")) admin_attacker_log(H, "chewed on their [O.name]!") O.take_external_damage(3,0, DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE ,"teeth marks") - last_chew = world.time /obj/item/handcuffs/cable name = "cable restraints" desc = "Looks like some cables tied together. Could be used to tie something up." icon_state = "cuff_white" - breakouttime = 300 //Deciseconds = 30s + breakout_time = 30 SECONDS cuff_sound = 'sound/weapons/cablecuff.ogg' cuff_type = "cable restraints" elastic = 1 @@ -166,6 +174,6 @@ var/global/last_chew = 0 icon_state = "tape_cross" item_state = null icon = 'icons/obj/bureaucracy.dmi' - breakouttime = 200 + breakout_time = 20 SECONDS cuff_type = "duct tape" health_max = 50 diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 26129eb74fb18..2b8a7c640ecbd 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -29,7 +29,7 @@ return 0 malfunction = MALFUNCTION_TEMPORARY - addtimer(new Callback(src,.proc/restore),time) + addtimer(CALLBACK(src,PROC_REF(restore)),time) return 1 /obj/item/implant/proc/restore() diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm index f8a6692d48e50..7ea00699f02c4 100644 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ b/code/game/objects/items/weapons/implants/implantcase.dm @@ -3,7 +3,7 @@ /obj/item/implantcase name = "glass case" desc = "A case containing an implant." - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/tools/implanter.dmi' icon_state = "implantcase-0" item_state = "implantcase" throw_speed = 1 @@ -49,7 +49,7 @@ desc = "A case containing an implant." else if(istype(I, /obj/item/reagent_containers/syringe)) if(istype(imp,/obj/item/implant/chem)) - imp.attackby(I,user) + I.resolve_attackby(imp, user) else if (istype(I, /obj/item/implanter)) var/obj/item/implanter/M = I if (M.imp && !imp && !M.imp.implanted) diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 05106c9084099..9b5aac1371767 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -1,6 +1,6 @@ /obj/item/implanter name = "implanter" - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/tools/implanter.dmi' icon_state = "implanter0" item_state = "syringe_0" throw_speed = 1 @@ -42,24 +42,24 @@ else ..() -/obj/item/implanter/attack(mob/M as mob, mob/user as mob) +/obj/item/implanter/use_before(mob/M as mob, mob/user as mob) + . = FALSE if (!istype(M, /mob/living/carbon)) - return - if (user && src.imp) - M.visible_message(SPAN_WARNING("[user] is attemping to implant [M].")) + return FALSE + if (user && imp) + M.visible_message(SPAN_WARNING("[user] is attemping to implant [M].")) user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) user.do_attack_animation(M) var/target_zone = user.zone_sel.selecting - if(src.imp.can_implant(M, user, target_zone)) + if (imp.can_implant(M, user, target_zone)) var/imp_name = imp.name - if(do_after(user, 5 SECONDS, M, DO_EQUIP) && src.imp?.implant_in_mob(M, target_zone)) + if (do_after(user, 5 SECONDS, M, DO_EQUIP) && src.imp?.implant_in_mob(M, target_zone)) M.visible_message(SPAN_WARNING("[M] has been implanted by [user].")) admin_attack_log(user, M, "Implanted using \the [src] ([imp_name])", "Implanted with \the [src] ([imp_name])", "used an implanter, \the [src] ([imp_name]), on") src.imp = null update_icon() - - return + return TRUE diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm index 5b08379e7ce02..7364ad11a351d 100644 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ b/code/game/objects/items/weapons/implants/implantpad.dm @@ -3,7 +3,7 @@ /obj/item/implantpad name = "implant pad" desc = "Used to reprogramm implants." - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/tools/implanter.dmi' icon_state = "implantpad-0" item_state = "electronic" w_class = ITEM_SIZE_SMALL diff --git a/code/game/objects/items/weapons/implants/implants/compressed.dm b/code/game/objects/items/weapons/implants/implants/compressed.dm index afa972fab1738..33b85558c1d7a 100644 --- a/code/game/objects/items/weapons/implants/implants/compressed.dm +++ b/code/game/objects/items/weapons/implants/implants/compressed.dm @@ -8,7 +8,7 @@ var/obj/item/scanned /obj/item/implant/compressed/trigger(emote, mob/source) - if (src.scanned == null) + if (isnull(src.scanned)) return 0 if (emote == src.activation_emote) @@ -49,31 +49,31 @@ icon_state = "cimplanter0" return -/obj/item/implanter/compressed/attack(mob/M as mob, mob/user as mob) +/obj/item/implanter/compressed/use_before(mob/M as mob, mob/user as mob) var/obj/item/implant/compressed/c = imp - if (!c) return - if (c.scanned == null) + if (!c || !istype(M, /mob/living/carbon)) + return FALSE + if (isnull(c.scanned)) to_chat(user, "Please compress an object with the implanter first.") - return - ..() + return TRUE + else return ..() -/obj/item/implanter/compressed/afterattack(obj/item/A, mob/user as mob, proximity) - if(!proximity) - return +/obj/item/implanter/compressed/use_after(obj/item/A, mob/living/user, click_parameters) if(istype(A) && imp) var/obj/item/implant/compressed/c = imp if (c.scanned) if (!istype(A,/obj/item/storage)) to_chat(user, SPAN_WARNING("Something is already compressed inside the implant!")) - return + return TRUE else if(safe) if (!istype(A,/obj/item/storage)) to_chat(user, SPAN_WARNING("The matter compressor safeties prevent you from doing that.")) - return + return TRUE if(istype(A.loc,/mob/living/carbon/human)) var/mob/living/carbon/human/H = A.loc if(!H.unEquip(A)) - return + FEEDBACK_UNEQUIP_FAILURE(user, A) + return TRUE else if(istype(A.loc,/obj/item/storage)) var/obj/item/storage/S = A.loc S.remove_from_storage(A) @@ -82,6 +82,7 @@ safe = 2 desc = "It currently contains some matter." update_icon() + return TRUE /obj/item/implanter/compressed/attack_self(mob/user) if(!imp || safe == 2) diff --git a/code/game/objects/items/weapons/implants/implants/imprinting.dm b/code/game/objects/items/weapons/implants/implants/imprinting.dm index 7902e913b1cb3..8be74e5a595ef 100644 --- a/code/game/objects/items/weapons/implants/implants/imprinting.dm +++ b/code/game/objects/items/weapons/implants/implants/imprinting.dm @@ -51,7 +51,7 @@ M.StoreMemory(msg, /singleton/memory_options/system) if(brainwashing) log_and_message_admins("was implanted with a brainwashing implant holding following laws: [jointext(instructions, ";")].", M) - addtimer(new Callback(src,.proc/activate),3000,(TIMER_UNIQUE|TIMER_OVERRIDE)) + addtimer(CALLBACK(src, PROC_REF(activate)),3000,(TIMER_UNIQUE|TIMER_OVERRIDE)) return TRUE /obj/item/implant/imprinting/proc/get_instructions() @@ -83,7 +83,7 @@ else instruction = SPAN_NOTICE("You remember suddenly: \"[instruction]\"") to_chat(imp_in, instruction) - addtimer(new Callback(src,.proc/activate),3000,(TIMER_UNIQUE|TIMER_OVERRIDE)) + addtimer(CALLBACK(src, PROC_REF(activate)), 3000, (TIMER_UNIQUE|TIMER_OVERRIDE)) /obj/item/implant/imprinting/removed() if(brainwashing && !malfunction) diff --git a/code/game/objects/items/weapons/janitor_sign.dm b/code/game/objects/items/weapons/janitor_sign.dm index ea8fbd982739b..86e88190c6707 100644 --- a/code/game/objects/items/weapons/janitor_sign.dm +++ b/code/game/objects/items/weapons/janitor_sign.dm @@ -1,7 +1,7 @@ /obj/item/caution desc = "Caution! Wet Floor!" name = "wet floor sign" - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/janitor_tools.dmi' icon_state = "caution" force = 1.0 throwforce = 3.0 @@ -13,4 +13,4 @@ /obj/item/caution/cone desc = "This cone is trying to warn you of something!" name = "warning cone" - icon_state = "cone" \ No newline at end of file + icon_state = "cone" diff --git a/code/game/objects/items/weapons/lighter.dm b/code/game/objects/items/weapons/lighter.dm index c19146155a1cd..0788f599ce6b5 100644 --- a/code/game/objects/items/weapons/lighter.dm +++ b/code/game/objects/items/weapons/lighter.dm @@ -1,7 +1,7 @@ /obj/item/flame/lighter name = "lighter" desc = "A cheap-as-free lighter." - icon = 'icons/obj/lighters.dmi' + icon = 'icons/obj/tools/lighters.dmi' icon_state = "lighter" item_state = "lighter" w_class = ITEM_SIZE_TINY @@ -29,7 +29,7 @@ lit = 1 update_icon() light_effects(user) - set_light(0.6, 0.5, 2, l_color = COLOR_PALE_ORANGE) + set_light(2, l_color = COLOR_PALE_ORANGE) START_PROCESSING(SSobj, src) /obj/item/flame/lighter/proc/light_effects(mob/living/carbon/user) @@ -68,34 +68,33 @@ /obj/item/flame/lighter/on_update_icon() var/datum/extension/base_icon_state/bis = get_extension(src, /datum/extension/base_icon_state) - overlays.Cut() + ClearOverlays() if(lit) - overlays += overlay_image(icon, "[bis.base_icon_state]_flame", flags=RESET_COLOR) + AddOverlays(overlay_image(icon, "[bis.base_icon_state]_flame", flags=RESET_COLOR)) else - overlays += overlay_image(icon, "[bis.base_icon_state]_striker", flags=RESET_COLOR) + AddOverlays(overlay_image(icon, "[bis.base_icon_state]_striker", flags=RESET_COLOR)) -/obj/item/flame/lighter/attack(mob/living/M, mob/living/carbon/user) - if(!istype(M, /mob)) - return +/obj/item/flame/lighter/use_before(mob/living/M, mob/living/carbon/user) + . = FALSE + if (!istype(M)) + return FALSE - if(lit) + if (lit) M.IgniteMob() - - if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == BP_MOUTH) + if (istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == BP_MOUTH) var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask - if(M == user) - cig.attackby(src, user) + if (M == user) + resolve_attackby(cig, user) else cig.light(SPAN_NOTICE("[user] holds the [name] out for [M], and lights the [cig.name].")) - return - ..() + return TRUE /obj/item/flame/lighter/Process() if(!submerged() && reagents.has_reagent(/datum/reagent/fuel)) if(ismob(loc) && prob(10) && reagents.get_reagent_amount(/datum/reagent/fuel) < 1) to_chat(loc, SPAN_WARNING("\The [src]'s flame flickers.")) set_light(0) - addtimer(new Callback(src, .atom/proc/set_light, 0.6, 0.5, 2), 4) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, set_light), 2), 4) reagents.remove_reagent(/datum/reagent/fuel, 0.05) else extinguish() @@ -105,6 +104,11 @@ if(location) location.hotspot_expose(700, 5) + +/obj/item/flame/lighter/IsHeatSource() + return lit ? 1500 : 0 + + /obj/item/flame/lighter/red color = COLOR_RED name = "red lighter" @@ -129,7 +133,7 @@ random_colour = TRUE /****** - Zippo +Zippo ******/ /obj/item/flame/lighter/zippo name = "zippo lighter" @@ -142,11 +146,11 @@ /obj/item/flame/lighter/zippo/on_update_icon() var/datum/extension/base_icon_state/bis = get_extension(src, /datum/extension/base_icon_state) - overlays.Cut() + ClearOverlays() if(lit) icon_state = "[bis.base_icon_state]_open" item_state = "[bis.base_icon_state]_open" - overlays += overlay_image(icon, "[bis.base_icon_state]_flame", flags=RESET_COLOR) + AddOverlays(overlay_image(icon, "[bis.base_icon_state]_flame", flags=RESET_COLOR)) else icon_state = "[bis.base_icon_state]" item_state = "[bis.base_icon_state]" @@ -159,12 +163,12 @@ user.visible_message(SPAN_CLASS("rose", "You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.")) playsound(src.loc, 'sound/items/zippo_close.ogg', 100, 1, -4) -/obj/item/flame/lighter/zippo/afterattack(obj/O, mob/user, proximity) - if(!proximity) return +/obj/item/flame/lighter/zippo/use_after(atom/O, mob/living/user, click_parameters) if (istype(O, /obj/structure/reagent_dispensers/fueltank) && !lit) O.reagents.trans_to_obj(src, max_fuel) to_chat(user, SPAN_NOTICE("You refuel [src] from \the [O]")) playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) + return TRUE /obj/item/flame/lighter/zippo/black color = COLOR_DARK_GRAY diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm index cced29cecfafd..eb996d1450e4d 100644 --- a/code/game/objects/items/weapons/material/ashtray.dm +++ b/code/game/objects/items/weapons/material/ashtray.dm @@ -1,7 +1,7 @@ /obj/item/material/ashtray name = "ashtray" desc = "A thing to keep your butts in." - icon = 'icons/obj/objects.dmi' + icon = 'icons/obj/ashtray.dmi' icon_state = "ashtray" max_force = 10 force_multiplier = 0.1 @@ -12,22 +12,22 @@ /obj/item/material/ashtray/examine(mob/user) . = ..() if(material) - to_chat(user, "It's made of [material.display_name].") + . += SPAN_NOTICE("It's made of [material.display_name].") if(length(contents) >= max_butts) - to_chat(user, "It's full.") + . += SPAN_NOTICE("It's full.") else if(length(contents)) - to_chat(user, "It has [length(contents)] cig butts in it.") + . += SPAN_NOTICE("It has [length(contents)] cig butts in it.") /obj/item/material/ashtray/on_update_icon() ..() - overlays.Cut() + ClearOverlays() if (length(contents) == max_butts) - overlays |= image('icons/obj/objects.dmi',"ashtray_full") + AddOverlays(image('icons/obj/ashtray.dmi',"ashtray_full")) else if (length(contents) >= max_butts/2) - overlays |= image('icons/obj/objects.dmi',"ashtray_half") + AddOverlays(image('icons/obj/ashtray.dmi',"ashtray_half")) /obj/item/material/ashtray/attackby(obj/item/W as obj, mob/user as mob) - if (health_dead) + if (health_dead()) return if (user.a_intent == I_HURT) diff --git a/code/game/objects/items/weapons/material/bell.dm b/code/game/objects/items/weapons/material/bell.dm index 850e0cf95b325..211c88a3b7d8b 100644 --- a/code/game/objects/items/weapons/material/bell.dm +++ b/code/game/objects/items/weapons/material/bell.dm @@ -1,7 +1,7 @@ /obj/item/material/bell name = "bell" desc = "A bell to ring to get people's attention. Don't break it." - icon = 'icons/obj/objects.dmi' + icon = 'icons/obj/structures/bells.dmi' icon_state = "bell" max_force = 5 force_multiplier = 0.8 @@ -32,11 +32,6 @@ flick("bell_dingeth", src) -/obj/item/material/bell/apply_hit_effect() - . = ..() - shatter() - - /obj/item/material/bell/glass default_material = MATERIAL_GLASS normal_sound = 'sound/items/tinkly_bell.ogg' diff --git a/code/game/objects/items/weapons/material/coins.dm b/code/game/objects/items/weapons/material/coins.dm index dcf5c3e20da85..4d2d792ac8eed 100644 --- a/code/game/objects/items/weapons/material/coins.dm +++ b/code/game/objects/items/weapons/material/coins.dm @@ -1,17 +1,15 @@ /obj/item/material/coin name = "coin" - icon = 'icons/obj/coin.dmi' + icon = 'icons/obj/materials/coin.dmi' icon_state = "coin1" applies_material_colour = TRUE randpixel = 8 - force = 1 throwforce = 1 max_force = 5 force_multiplier = 0.1 thrown_force_multiplier = 0.1 w_class = ITEM_SIZE_TINY slot_flags = SLOT_EARS - item_flags = ITEM_FLAG_TRY_ATTACK /// The smallest interval allowed between coin flips. var/const/FLIP_COOLDOWN = 5 SECONDS @@ -35,34 +33,35 @@ var/image/image = image(icon = icon, icon_state = "coin_string_overlay") image.appearance_flags |= RESET_COLOR image.color = string_color - overlays += image + AddOverlays(image) else - overlays.Cut() + ClearOverlays() -/obj/item/material/coin/attack(atom/target, mob/living/user, target_zone) +/obj/item/material/coin/use_after(atom/target, mob/living/user) + if (target == user) attack_self(user) return TRUE if (ismob(target)) if (user.a_intent == I_HURT) user.visible_message( - SPAN_WARNING("\The [user] menaces \the [target] with \a [src]."), - SPAN_WARNING("You menace \the [target] with \the [src]."), + SPAN_WARNING("[user] menaces [target] with [src]."), + SPAN_WARNING("You menace [target] with [src]."), range = 5 ) return TRUE user.visible_message( - SPAN_ITALIC("\The [user] presents \a [src] to \the [target]."), - SPAN_ITALIC("You present \the [src] to \the [target]."), + SPAN_ITALIC("[user] presents [src] to [target]."), + SPAN_ITALIC("You present [src] to [target]."), range = 5 ) return TRUE if (isobj(target) && user.a_intent == I_HURT) playsound(user.loc, 'sound/effects/coin_flip.ogg', 75, TRUE) user.visible_message( - SPAN_ITALIC("\The [user] taps \a [src] against \a [target]."), - SPAN_ITALIC("You tap \the [src] against \the [target]."), + SPAN_ITALIC("[user] taps [src] against [target]."), + SPAN_ITALIC("You tap [src] against [target]."), range = 5 ) return TRUE @@ -75,11 +74,25 @@ playsound(user.loc, 'sound/effects/coin_flip.ogg', 75, 1) var/result = pick("front", "back") user.visible_message( - SPAN_ITALIC("\The [user] flips \a [src], landing [result] side up."), - SPAN_ITALIC("You flip \the [src], landing [result] side up."), + SPAN_ITALIC("[user] flips [src], landing [result] side up."), + SPAN_ITALIC("You flip [src], landing [result] side up."), range = 5 ) +/obj/item/material/coin/wirecutter_act(mob/living/user, obj/item/tool) + if(isnull(string_color)) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + new /obj/item/stack/cable_coil (get_turf(user), 1, string_color) + user.visible_message( + SPAN_ITALIC("[user] removes a wire from [src]."), + SPAN_ITALIC("You remove the wire from [src]."), + range = 5 + ) + string_color = null + update_icon() /obj/item/material/coin/attackby(obj/item/item, mob/living/user) if (isCoil(item) && isnull(string_color)) @@ -88,25 +101,29 @@ to_chat(user, SPAN_WARNING("Your cable coil is a bug. Your action fails.")) return TRUE user.visible_message( - SPAN_ITALIC("\The [user] attaches some wire to \a [src]."), - SPAN_ITALIC("You attach some wire to \the [src]."), + SPAN_ITALIC("[user] attaches some wire to [src]."), + SPAN_ITALIC("You attach some wire to [src]."), range = 5 ) string_color = coil.color update_icon() return TRUE - if (isWirecutter(item) && !isnull(string_color)) - new /obj/item/stack/cable_coil (get_turf(user), 1, string_color) - user.visible_message( - SPAN_ITALIC("\The [user] removes a wire from \a [src]."), - SPAN_ITALIC("You remove the wire from \the [src]."), - range = 5 - ) - string_color = null - update_icon() - return TRUE ..() +/// Non-craftable coins intented to display specific imagery. +/obj/item/material/coin/challenge + abstract_type = /obj/item/material/coin/challenge + applies_material_colour = FALSE + + +/obj/item/material/coin/challenge/on_update_icon() + ClearOverlays() + if (isnull(string_color)) + return + var/image/image = image(icon = icon, icon_state = "coin_string_overlay") + image.appearance_flags |= RESET_COLOR + image.color = string_color + AddOverlays(image) /obj/item/material/coin/challenge/throw_impact() ..() @@ -114,10 +131,9 @@ return playsound(loc, 'sound/effects/coin_flip.ogg', 75, 1) visible_message( - SPAN_WARNING("\The [src] clatters to \the [get_turf(src)]!") + SPAN_WARNING("[src] clatters to [get_turf(src)]!") ) - /obj/item/material/coin/challenge/verb/drop_coin() set src in usr set category = "Object" @@ -126,33 +142,22 @@ if (!isturf(turf)) return if (!usr.IsHolding(src)) - to_chat(usr, SPAN_WARNING("You must hold \the [src] in your hands.")) + to_chat(usr, SPAN_WARNING("You must hold [src] in your hands.")) return if (!usr.unEquip(src, turf)) return playsound(turf, 'sound/effects/coin_flip.ogg', 75, 1) usr.visible_message( - SPAN_WARNING("\The [usr] flicks \a [src] onto the ground!"), - SPAN_WARNING("You flick \the [src] onto the ground!") + SPAN_WARNING("[usr] flicks [src] onto the ground!"), + SPAN_WARNING("You flick [src] onto the ground!") ) - -// Non-craftable coins intented to display specific imagery. -/obj/item/material/coin/challenge - abstract_type = /obj/item/material/coin/challenge - applies_material_colour = FALSE - - -/obj/item/material/coin/challenge/on_update_icon() - overlays.Cut() - if (isnull(string_color)) - return - var/image/image = image(icon = icon, icon_state = "coin_string_overlay") - image.appearance_flags |= RESET_COLOR - image.color = string_color - overlays += image - - +///Antag challenge coins, used to hack vendors. +/obj/item/material/coin/challenge/syndie + name = "Syndicate Challenge Coin" + desc = "A heavy coin emblazoned with a shiny, red skull. The rim of the coin shows words in a language you do not understand." + icon = 'icons/obj/materials/coin.dmi' + icon_state = "syndie" /obj/item/material/coin/aluminium default_material = MATERIAL_ALUMINIUM @@ -201,7 +206,7 @@ /obj/random/coin name = "random coin" desc = "This is a random coin." - icon = 'icons/obj/coin.dmi' + icon = 'icons/obj/materials/coin.dmi' icon_state = "coin1" @@ -246,6 +251,7 @@ /// Create a new random simple coin at loc and return it. /proc/new_simple_coin(loc) + RETURN_TYPE(/obj/item/material/coin) var/static/list/simple_coins = subtypesof(/obj/item/material/coin) - typesof(/obj/item/material/coin/challenge) var/obj/item/material/coin = pick(simple_coins) coin = new coin (loc) diff --git a/code/game/objects/items/weapons/material/folding.dm b/code/game/objects/items/weapons/material/folding.dm index 93cacc0854847..02c2b28b1169d 100644 --- a/code/game/objects/items/weapons/material/folding.dm +++ b/code/game/objects/items/weapons/material/folding.dm @@ -3,7 +3,7 @@ /obj/item/material/knife/folding name = "pocketknife" desc = "A small folding knife." - icon = 'icons/obj/folding_knife.dmi' + icon = 'icons/obj/weapons/folding_knife.dmi' icon_state = "knife_preview" item_state = null force = 0.2 //force of folded obj @@ -68,15 +68,15 @@ /obj/item/material/knife/folding/on_update_icon() if(open) - overlays.Cut() - overlays += overlay_image(icon, hardware_open, flags=RESET_COLOR) + ClearOverlays() + AddOverlays(overlay_image(icon, hardware_open, flags=RESET_COLOR)) item_state = "knife" else - overlays.Cut() - overlays += overlay_image(icon, hardware_closed, flags=RESET_COLOR) + ClearOverlays() + AddOverlays(overlay_image(icon, hardware_closed, flags=RESET_COLOR)) item_state = initial(item_state) if(blood_overlay) - overlays += blood_overlay + AddOverlays(blood_overlay) //Subtypes /obj/item/material/knife/folding/wood diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm index 370e575fb0ebb..ed650b0a4755b 100644 --- a/code/game/objects/items/weapons/material/kitchen.dm +++ b/code/game/objects/items/weapons/material/kitchen.dm @@ -1,5 +1,5 @@ /obj/item/material/kitchen - icon = 'icons/obj/kitchen.dmi' + icon = 'icons/obj/machines/kitchen.dmi' worth_multiplier = 1.1 /* @@ -13,6 +13,7 @@ max_force = 5 force_multiplier = 0.1 // 6 when wielded with hardness 60 (steel) thrown_force_multiplier = 0.25 // 5 when thrown with weight 20 (steel) + puncture = TRUE default_material = MATERIAL_ALUMINIUM var/loaded //Descriptive string for currently loaded food object. @@ -25,22 +26,14 @@ create_reagents(5) return -/obj/item/material/kitchen/utensil/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return ..() - - if(user.a_intent != I_HELP) - if(user.zone_sel.selecting == BP_HEAD || user.zone_sel.selecting == BP_EYES) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) - M = user - return eyestab(M,user) - else - return ..() +/obj/item/material/kitchen/utensil/use_after(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if (!istype(M)) + return FALSE if (reagents.total_volume > 0) if(M == user) if(!M.can_eat(loaded)) - return + return TRUE switch(M.get_fullness()) if (0 to 50) to_chat(M, SPAN_DANGER("You ravenously stick \the [src] into your mouth and gobble the food!")) @@ -52,23 +45,23 @@ to_chat(M, SPAN_NOTICE("You unwillingly chew the food on \the [src].")) if (550 to INFINITY) to_chat(M, SPAN_WARNING("You cannot take one more bite from \the [src]!")) - return + return TRUE else user.visible_message(SPAN_WARNING("\The [user] begins to feed \the [M]!")) - if(!M.can_force_feed(user, loaded) || !do_after(user, 5 SECONDS, M, DO_PUBLIC_UNIQUE)) - return + if (!M.can_force_feed(user, loaded) || !do_after(user, 5 SECONDS, M, DO_PUBLIC_UNIQUE)) + return TRUE if (user.get_active_hand() != src) - return + return TRUE M.visible_message(SPAN_NOTICE("\The [user] feeds some [loaded] to \the [M] with \the [src].")) reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) playsound(M.loc,'sound/items/eatfood.ogg', rand(10,40), 1) - overlays.Cut() - return + ClearOverlays() + return TRUE else - to_chat(user, SPAN_WARNING("You don't have anything on \the [src]."))//if we have help intent and no food scooped up DON'T STAB OURSELVES WITH THE FORK - return + to_chat(user, SPAN_WARNING("You don't have anything on \the [src].")) + return TRUE /obj/item/material/kitchen/utensil/fork @@ -121,7 +114,7 @@ /obj/item/material/kitchen/utensil/spoon/silver = 4 ) - /* +/* * Rolling Pins */ @@ -139,7 +132,8 @@ /obj/item/material/kitchen/rollingpin/aluminium/default_material = MATERIAL_ALUMINIUM -/obj/item/material/kitchen/rollingpin/attack(mob/living/target, mob/living/user) +/obj/item/material/kitchen/rollingpin/use_before(mob/living/target, mob/living/user) + . = FALSE if ((MUTATION_CLUMSY in user.mutations) && prob(50) && user.unEquip(src)) user.visible_message( SPAN_WARNING("\The [user] manages to hit \himself on the head with \the [src]!"), @@ -148,5 +142,4 @@ ) user.take_organ_damage(10, 0) user.Paralyse(2) - return - return ..() + return TRUE diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm index 39dcbabf08a8d..7bd8608d3379b 100644 --- a/code/game/objects/items/weapons/material/knives.dm +++ b/code/game/objects/items/weapons/material/knives.dm @@ -2,7 +2,7 @@ /obj/item/material/knife //master obj name = "the concept of a knife" desc = "You call that a knife? This is a master item - berate the admin or mapper who spawned this!" - icon = 'icons/obj/knife.dmi' + icon = 'icons/obj/weapons/knife.dmi' icon_state = "knife" item_state = "knife" max_force = 15 @@ -17,18 +17,6 @@ edge = TRUE item_flags = ITEM_FLAG_CAN_HIDE_IN_SHOES -/obj/item/material/knife/attack(mob/living/carbon/M, mob/living/carbon/user, target_zone) - if(!istype(M)) - return ..() - - if(user.a_intent != I_HELP) - if(target_zone == BP_EYES) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) - M = user - return eyestab(M, user) - - return ..() - //table knives /obj/item/material/knife/table name = "table knife" @@ -97,7 +85,7 @@ /obj/item/material/knife/ritual name = "ritual knife" desc = "The unearthly energies that once powered this blade are now dormant." - icon = 'icons/obj/wizard.dmi' + icon = 'icons/obj/cult.dmi' icon_state = "render" base_parry_chance = 30 applies_material_colour = FALSE diff --git a/code/game/objects/items/weapons/material/material_weapons.dm b/code/game/objects/items/weapons/material/material_weapons.dm index b95d5dfe58d19..61071bbe0ae68 100644 --- a/code/game/objects/items/weapons/material/material_weapons.dm +++ b/code/game/objects/items/weapons/material/material_weapons.dm @@ -84,14 +84,14 @@ update_icon() /obj/item/material/on_update_icon() - overlays.Cut() + ClearOverlays() if(applies_material_colour && istype(material)) color = material.icon_colour alpha = 100 + material.opacity * 255 if(furniture_icon) var/image/I = image(icon, icon_state = furniture_icon) I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - overlays += I + AddOverlays(I) /obj/item/material/Destroy() STOP_PROCESSING(SSobj, src) diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm index fb38d7e71906b..5c250a48ea80d 100644 --- a/code/game/objects/items/weapons/material/misc.dm +++ b/code/game/objects/items/weapons/material/misc.dm @@ -28,7 +28,7 @@ return audible_message(SPAN_WARNING("\The [src] emits a long, harsh tone!")) playsound(loc, 'sound/weapons/bombwhine.ogg', 100, 0, -3) - addtimer(new Callback(src, .proc/harpoon_detonate), 4 SECONDS) //for suspense + addtimer(CALLBACK(src, PROC_REF(harpoon_detonate)), 4 SECONDS) //for suspense /obj/item/material/harpoon/bomb/proc/harpoon_detonate() audible_message(SPAN_DANGER("\The [src] detonates!")) //an actual sound will be handled by explosion() @@ -56,13 +56,12 @@ max_force = 15 force_multiplier = 0.2 // 12 with hardness 60 (steel) thrown_force_multiplier = 0.75 // 15 with weight 20 (steel) - w_class = ITEM_SIZE_SMALL sharp = TRUE edge = TRUE origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1) attack_verb = list("chopped", "torn", "cut") applies_material_colour = 0 - hitsound = "chop" + hitsound = 'sound/weapons/bladeslice.ogg' /obj/item/material/hatchet/unbreakable unbreakable = TRUE @@ -72,7 +71,7 @@ desc = "A long, sturdy blade with a rugged handle. Leading the way to cursed treasures since before space travel." icon = 'icons/obj/weapons/melee_physical.dmi' item_state = "machete" - w_class = ITEM_SIZE_NORMAL + w_class = ITEM_SIZE_LARGE slot_flags = SLOT_BELT default_material = MATERIAL_TITANIUM base_parry_chance = 50 diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index 92d351a815229..3098084049578 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -2,7 +2,7 @@ /obj/item/material/shard name = "shard" - icon = 'icons/obj/shards.dmi' + icon = 'icons/obj/materials/shards.dmi' desc = "Made of nothing. How does this even exist?" // set based on material, if this desc is visible it's a bug (shards default to being made of glass) icon_state = "large" randpixel = 8 @@ -47,14 +47,14 @@ color = "#ffffff" alpha = 255 -/obj/item/material/shard/attackby(obj/item/W as obj, mob/user as mob) - if(isWelder(W) && material.shard_can_repair) - var/obj/item/weldingtool/WT = W - if(WT.remove_fuel(0, user)) - material.place_sheet(loc) - qdel(src) - return - return ..() +/obj/item/material/shard/welder_act(mob/living/user, obj/item/tool) + if(!material.shard_can_repair) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + material.place_sheet(get_turf(src)) + qdel(src) /obj/item/material/shard/Crossed(AM as mob|obj) ..() @@ -92,7 +92,7 @@ return -/obj/item/material/shard/phoron/default_material = MATERIAL_PHORON_GLASS +/obj/item/material/shard/phoron/default_material = MATERIAL_PHORON /obj/item/material/shard/shrapnel/name = "shrapnel" diff --git a/code/game/objects/items/weapons/material/stick.dm b/code/game/objects/items/weapons/material/stick.dm index c513ea028657a..b09fa3bc030bd 100644 --- a/code/game/objects/items/weapons/material/stick.dm +++ b/code/game/objects/items/weapons/material/stick.dm @@ -26,12 +26,9 @@ return ..() -/obj/item/material/stick/attack(mob/M, mob/user) - if(user != M && user.a_intent == I_HELP) - //Playful poking is its own thing +/obj/item/material/stick/use_after(mob/M, mob/user) + if(istype(M) && user != M && user.a_intent == I_HELP) user.visible_message(SPAN_NOTICE("[user] pokes [M] with [src]."), SPAN_NOTICE("You poke [M] with [src].")) - //Consider adding a check to see if target is dead user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) user.do_attack_animation(M) - return - return ..() + return TRUE diff --git a/code/game/objects/items/weapons/material/swiss.dm b/code/game/objects/items/weapons/material/swiss.dm index 13e1429e7ec5a..30259b2148bdb 100644 --- a/code/game/objects/items/weapons/material/swiss.dm +++ b/code/game/objects/items/weapons/material/swiss.dm @@ -12,7 +12,7 @@ /obj/item/material/knife/folding/swiss name = "combi-knife" desc = "A small, colourable, multi-purpose folding knife." - icon = 'icons/obj/swiss_knife.dmi' + icon = 'icons/obj/tools/swiss_knife.dmi' icon_state = "swissknf_closed" handle_icon = "swissknf_handle" takes_colour = FALSE @@ -53,13 +53,22 @@ user.visible_message(SPAN_NOTICE("\The [user] opens the [lowertext(choice)].")) active_tool = choice + tool_behaviour = null + switch(active_tool) + if(SWISSKNF_CROWBAR) + change_tool_behaviour(TOOL_CROWBAR) + if(SWISSKNF_CLIFTER, SWISSKNF_COPENER) + change_tool_behaviour(TOOL_SCREWDRIVER) + if(SWISSKNF_WCUTTER) + change_tool_behaviour(TOOL_WIRECUTTER) + update_force() update_icon() add_fingerprint(user) /obj/item/material/knife/folding/swiss/examine(mob/user) . = ..() - to_chat(user, active_tool == SWISSKNF_CLOSED ? "It is closed." : "Its [lowertext(active_tool)] is folded out.") + . += SPAN_NOTICE(active_tool == SWISSKNF_CLOSED ? "It is closed." : "Its [lowertext(active_tool)] is folded out.") /obj/item/material/knife/folding/swiss/update_force() if(active_tool in sharp_tools) @@ -82,22 +91,13 @@ /obj/item/material/knife/folding/swiss/on_update_icon() if(active_tool != null) - overlays.Cut() - overlays += overlay_image(icon, active_tool, flags=RESET_COLOR) + ClearOverlays() + AddOverlays(overlay_image(icon, active_tool, flags=RESET_COLOR)) item_state = initial(item_state) if(active_tool == SWISSKNF_LBLADE || active_tool == SWISSKNF_SBLADE) item_state = "knife" if(blood_overlay) - overlays += blood_overlay - -/obj/item/material/knife/folding/swiss/IsCrowbar() - return active_tool == SWISSKNF_CROWBAR && can_use_tools - -/obj/item/material/knife/folding/swiss/IsScrewdriver() - return (active_tool == SWISSKNF_CLIFTER || active_tool == SWISSKNF_COPENER) && can_use_tools - -/obj/item/material/knife/folding/swiss/IsWirecutter() - return active_tool == SWISSKNF_WCUTTER && can_use_tools + AddOverlays(blood_overlay) /obj/item/material/knife/folding/swiss/IsHatchet() return active_tool == SWISSKNF_WBLADE @@ -108,12 +108,6 @@ . = ..() update_force() return - if(istype(target, /obj/item)) - if(target.w_class <= ITEM_SIZE_HUGE) - can_use_tools = TRUE - . = ..() - can_use_tools = FALSE - return return ..() /obj/item/material/knife/folding/swiss/officer @@ -124,7 +118,7 @@ tools = list(SWISSKNF_LBLADE, SWISSKNF_CLIFTER, SWISSKNF_COPENER, SWISSKNF_CSCREW) /obj/item/material/knife/folding/swiss/sec - name = "Master-At-Arms' combi-knife" + name = "master-at-arms' combi-knife" desc = "A small, red, multi-purpose folding knife. This one adds no special tools." color = COLOR_NT_RED diff --git a/code/game/objects/items/weapons/material/swords.dm b/code/game/objects/items/weapons/material/swords.dm index b117a2a97d1af..c85928e2f597a 100644 --- a/code/game/objects/items/weapons/material/swords.dm +++ b/code/game/objects/items/weapons/material/swords.dm @@ -6,7 +6,7 @@ item_state = "claymore" slot_flags = SLOT_BELT w_class = ITEM_SIZE_LARGE - force_multiplier = 0.5 // 30 when wielded with hardness 60 (steel) + force_multiplier = 0.25 // 15 when wielded with hardness 60 (steel) armor_penetration = 10 thrown_force_multiplier = 0.5 // 10 when thrown with weight 20 (steel) sharp = TRUE diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index 18777b98a9794..835306bc4d3b6 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -52,7 +52,7 @@ ..() update_icon() -/obj/item/material/twohanded/get_parry_chance(mob/user) +/obj/item/material/twohanded/get_parry_chance(mob/user, mob/attacker) . = ..() if(wielded) . += wielded_parry_bonus @@ -85,18 +85,23 @@ worth_multiplier = 31 base_parry_chance = 15 -/obj/item/material/twohanded/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity) - if(!proximity) return - ..() - if(A && wielded) - if(istype(A,/obj/structure/window)) - var/obj/structure/window/W = A - W.shatter() - else if(istype(A,/obj/structure/grille)) - qdel(A) - else if(istype(A,/obj/effect/vine)) - var/obj/effect/vine/P = A - P.kill_health() +/obj/item/material/twohanded/fireaxe/use_before(atom/A, mob/living/user, click_parameters) + if(!wielded || user.a_intent == I_HELP || !isobj(A)) + return FALSE + + if(istype(A,/obj/structure/window)) + var/obj/structure/window/W = A + W.shatter() + return TRUE + + if(istype(A,/obj/structure/grille)) + qdel(A) + return TRUE + + if(istype(A,/obj/vine)) + var/obj/vine/P = A + P.kill_health() + return TRUE /obj/item/material/twohanded/fireaxe/IsHatchet() return TRUE @@ -140,13 +145,67 @@ attack_verb = list("smashed", "beaten", "slammed", "smacked", "struck", "battered", "bonked") hitsound = 'sound/weapons/genhit3.ogg' default_material = MATERIAL_MAPLE - max_force = 40 //for wielded + max_force = 30 //for wielded force_multiplier = 1.1 // 22 when wielded with weight 20 (steel) unwielded_force_divisor = 0.7 // 15 when unwielded based on above. attack_cooldown_modifier = 1 melee_accuracy_bonus = -10 base_parry_chance = 30 +/obj/item/material/twohanded/baseballbat/proc/deflect(mob/user, atom/target, atom/movable/item, range, speed) + item.throw_at(target, range, speed, user, TRUE) + +/obj/item/material/twohanded/baseballbat/handle_shield(mob/user, damage, atom/damage_source, mob/attacker, def_zone, attack_text) + var/atom/movable/AM = damage_source + var/datum/thrownthing/TT = SSthrowing.processing[damage_source] + + if(istype(AM) && TT && (!attacker || (attacker && get_dist(user, attacker) > 1)) && !user.incapacitated() && is_held_twohanded(user)) + + var/bad_arc = reverse_direction(user.dir) //arc of directions from which we cannot block + if(check_shield_arc(user, bad_arc, damage_source, attacker)) + if(!prob(user.skill_fail_chance(SKILL_HAULING, 50, SKILL_EXPERIENCED))) + . = TRUE + //You hit it! + playsound(src, pick('sound/items/baseball/baseball_hit_01.wav', 'sound/items/baseball/baseball_hit_02.wav'), 75, 1) + var/home_run = prob(25) + if(home_run) + playsound(src, 'sound/items/baseball/play_ball.wav', 75) + visible_message(SPAN_NOTICE("\The [user] strikes the incoming [AM] with full force! It's a home run!")) + else + visible_message(SPAN_NOTICE("\The [user] hits the incoming [AM], sending it flying back!")) + + user.do_windup_animation(attacker, attack_cooldown) + + addtimer(CALLBACK(src, PROC_REF(deflect), user, attacker, AM, home_run ? TT.maxrange * 2 : TT.maxrange, home_run ? TT.speed * 2 : TT.speed), 0) + + else + playsound(src, 'sound/items/baseball/swing_woosh.wav', 75, 1) + visible_message(SPAN_NOTICE("\The [user] tries to hit the icoming [AM] but misses!")) + user.do_windup_animation(attacker, attack_cooldown) + return FALSE //Strike! + else + return FALSE + + else + return ..() + +/obj/item/material/twohanded/baseballbat/use_before(obj/O, mob/living/user, click_parameters) + if(!istype(O)) + return FALSE + + if(is_held_twohanded(user) && !O.anchored && isturf(O.loc) && O.w_class <= ITEM_SIZE_SMALL) + if(!prob(user.skill_fail_chance(SKILL_HAULING, 20, SKILL_EXPERIENCED))) + var/skill = 0.25 + (user.get_skill_value(SKILL_HAULING) - SKILL_MIN)/(SKILL_MAX - SKILL_MIN) + var/dist = O.throw_range * skill + O.throw_at(get_ranged_target_turf(user, user.dir, dist), dist, O.throw_speed * skill, user, TRUE) + visible_message(SPAN_NOTICE("\The [user] hits \the [O], sending it flying!")) + playsound(src, pick('sound/items/baseball/baseball_hit_01.wav', 'sound/items/baseball/baseball_hit_02.wav'), 75, 1) + else + playsound(src, 'sound/items/baseball/swing_woosh.wav', 75, 1) + visible_message(SPAN_NOTICE("\The [user] tries to bat \the [O] but misses!")) + user.do_attack_animation(O) + return TRUE + //Predefined materials go here. /obj/item/material/twohanded/baseballbat/metal/New(newloc) ..(newloc,MATERIAL_ALUMINIUM) diff --git a/code/game/objects/items/weapons/material/urn.dm b/code/game/objects/items/weapons/material/urn.dm index 52b5175b6f2bd..41bc075e6a611 100644 --- a/code/game/objects/items/weapons/material/urn.dm +++ b/code/game/objects/items/weapons/material/urn.dm @@ -8,26 +8,27 @@ w_class = ITEM_SIZE_SMALL default_material = MATERIAL_WOOD -/obj/item/material/urn/afterattack(obj/A, mob/user, proximity) - if(!istype(A, /obj/effect/decal/cleanable/ash)) - return ..() - else if(proximity) - if(length(contents)) - to_chat(user, SPAN_WARNING("\The [src] is already full!")) - return - user.visible_message("\The [user] scoops \the [A] into \the [src], securing the lid.", "You scoop \the [A] into \the [src], securing the lid.") - A.forceMove(src) +/obj/item/material/urn/use_after(obj/A, mob/living/user, click_parameters) + if(!istype(A, /obj/decal/cleanable/ash)) + return FALSE + if(length(contents)) + to_chat(user, SPAN_WARNING("\The [src] is already full!")) + return TRUE + + user.visible_message("\The [user] scoops \the [A] into \the [src], securing the lid.", "You scoop \the [A] into \the [src], securing the lid.") + A.forceMove(src) + return TRUE /obj/item/material/urn/attack_self(mob/user) if(!length(contents)) to_chat(user, SPAN_WARNING("\The [src] is empty!")) return else - for(var/obj/effect/decal/cleanable/ash/A in contents) + for(var/obj/decal/cleanable/ash/A in contents) A.dropInto(loc) user.visible_message("\The [user] pours \the [A] out from \the [src].", "You pour \the [A] out from \the [src].") /obj/item/material/urn/examine(mob/user) . = ..() if(length(contents)) - to_chat(user, "\The [src] is full.") + . += SPAN_NOTICE("[src] is full.") diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index bbf7a46082252..23f25c25a27c5 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -1,5 +1,7 @@ /obj/item/melee/energy - var/active = 0 + var/active = FALSE + var/damaged = FALSE + var/disabled var/active_force var/active_throwforce var/active_icon @@ -9,9 +11,11 @@ armor_penetration = 50 atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_BLOOD + /obj/item/melee/energy/can_embed() return FALSE + /obj/item/melee/energy/Initialize() . = ..() if(active) @@ -21,6 +25,7 @@ active = TRUE deactivate() + /obj/item/melee/energy/on_update_icon() . = ..() if(active) @@ -28,9 +33,18 @@ else icon_state = initial(icon_state) + /obj/item/melee/energy/proc/activate(mob/living/user) - if(active) + if (active) return + if (damaged) + if (world.time < disabled) + if (user) + user.show_message(SPAN_WARNING("\The [src] sputters. It's not going to work right now!")) + return + user.visible_message(SPAN_NOTICE("\The [src] resonates perfectly, once again.")) + damaged = FALSE + active = TRUE force = active_force throwforce = active_throwforce @@ -38,14 +52,22 @@ edge = TRUE slot_flags |= SLOT_DENYPOCKET attack_verb = active_attack_verb - update_icon() - if(user) + + if (user) playsound(user, 'sound/weapons/saberon.ogg', 50, 1) to_chat(user, SPAN_NOTICE("\The [src] is now energised.")) - set_light(0.8, 1, 2, 4, lighting_color) + set_light(2, 0.8, lighting_color) + + if (istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() + + update_icon() + /obj/item/melee/energy/proc/deactivate(mob/living/user) - if(!active) + if (!active) return active = FALSE force = initial(force) @@ -54,15 +76,23 @@ edge = initial(edge) slot_flags = initial(slot_flags) attack_verb = inactive_attack_verb - update_icon() - if(user) + + if (user) playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) to_chat(user, SPAN_NOTICE("\The [src] deactivates!")) set_light(0) + if (istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() + + update_icon() + + /obj/item/melee/energy/attack_self(mob/living/user as mob) - if(active) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) + if (active) + if ((MUTATION_CLUMSY in user.mutations) && prob(50)) user.visible_message(SPAN_DANGER("\The [user] accidentally cuts \himself with \the [src]."),\ SPAN_DANGER("You accidentally cut yourself with \the [src].")) user.take_organ_damage(5,5) @@ -70,19 +100,44 @@ else activate(user) - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() - add_fingerprint(user) return + +/obj/item/melee/energy/emp_act(severity) + SHOULD_CALL_PARENT(FALSE) + if (!active) + return + if (damaged) + return + var/disabletime = 30 SECONDS + if (severity == EMP_ACT_HEAVY) + disabletime = 1.5 MINUTES + + visible_message(SPAN_DANGER("\The [src] violently shudders!")) + new /obj/overlay/self_deleting/emppulse(get_turf(src)) + + disabled = world.time + disabletime + var/mob/living/carbon/M = loc + if (M) + deactivate(M) + else + deactivate() + update_icon() + damaged = TRUE + GLOB.empd_event.raise_event(src, severity) + + /obj/item/melee/energy/get_storage_cost() - if(active) + if (active) return ITEM_SIZE_NO_CONTAINER return ..() + +/obj/item/melee/energy/IsHeatSource() + return active ? 3500 : 0 + + /* * Energy Axe */ @@ -109,10 +164,12 @@ edge = TRUE melee_accuracy_bonus = 15 + /obj/item/melee/energy/axe/deactivate(mob/living/user) . = ..() to_chat(user, SPAN_NOTICE("\The [src] is de-energised. It's just a regular axe now.")) + /* * Energy Sword */ @@ -137,6 +194,7 @@ hitsound = 'sound/weapons/blade1.ogg' var/blade_color + /obj/item/melee/energy/sword/Initialize() if(!blade_color) blade_color = pick("red","blue","green","purple") @@ -147,37 +205,46 @@ . = ..() + /obj/item/melee/energy/sword/green blade_color = "green" + /obj/item/melee/energy/sword/red blade_color = "red" + /obj/item/melee/energy/sword/red/activated active = TRUE + /obj/item/melee/energy/sword/blue blade_color = "blue" + /obj/item/melee/energy/sword/purple blade_color = "purple" + /obj/item/melee/energy/sword/dropped(mob/user) ..() if(!istype(loc,/mob)) deactivate(user) + /obj/item/melee/energy/sword/handle_shield(mob/user, damage, atom/damage_source = null, mob/attacker = null, def_zone = null, attack_text = "the attack") . = ..() if(.) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + var/datum/effect/spark_spread/spark_system = new /datum/effect/spark_spread() spark_system.set_up(5, 0, user.loc) spark_system.start() playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1) -/obj/item/melee/energy/sword/get_parry_chance(mob/user) + +/obj/item/melee/energy/sword/get_parry_chance(mob/user, mob/attacker) return active ? ..() : 0 + /obj/item/melee/energy/sword/pirate icon = 'icons/obj/weapons/melee_energy.dmi' name = "energy cutlass" @@ -186,13 +253,14 @@ active_icon = "cutlass1" lighting_color = COLOR_SABER_CUTLASS + /obj/item/melee/energy/sword/pirate/activated active = TRUE + /* *Energy Blade */ - /obj/item/melee/energy/blade icon = 'icons/obj/weapons/melee_energy.dmi' name = "energy blade" @@ -214,32 +282,39 @@ active_attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") hitsound = 'sound/weapons/blade1.ogg' var/mob/living/creator - var/datum/effect/effect/system/spark_spread/spark_system + var/datum/effect/spark_spread/spark_system + /obj/item/melee/energy/blade/New() ..() - spark_system = new /datum/effect/effect/system/spark_spread() + spark_system = new /datum/effect/spark_spread() spark_system.set_up(5, 0, src) spark_system.attach(src) + /obj/item/melee/energy/blade/Initialize() . = ..() START_PROCESSING(SSobj, src) + /obj/item/melee/energy/blade/Destroy() STOP_PROCESSING(SSobj, src) . = ..() + /obj/item/melee/energy/blade/get_storage_cost() return ITEM_SIZE_NO_CONTAINER + /obj/item/melee/energy/blade/attack_self(mob/user as mob) user.drop_from_inventory(src) + /obj/item/melee/energy/blade/dropped() ..() QDEL_IN(src, 0) + /obj/item/melee/energy/blade/Process() if (!creator || loc != creator || !creator.IsHolding(src)) // Tidy up a bit. @@ -255,13 +330,14 @@ host.drop_from_inventory(src) QDEL_IN(src, 0) + /obj/item/melee/energy/machete icon = 'icons/obj/weapons/melee_energy.dmi' name = "energy machete" desc = "A machete handle that extends out into a long, purple machete blade. It appears to be Skrellian in origin." icon_state = "machete_skrell_x" active_icon = "machete_skrell" - active_force = 16 //In line with standard machetes at time of creation. + active_force = 25 active_throwforce = 17.25 lighting_color = COLOR_SABER_SKRELL force = 3 diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index d9dc156107715..eb0276d122a92 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -51,19 +51,84 @@ slot_flags = SLOT_BELT applies_material_colour = FALSE -/obj/item/material/sword/replica/officersword/army - name = "army NCO's sword" - desc = "A polished sword issued to SCG Army NCOs." - icon_state = "armysword" - -/obj/item/material/sword/replica/officersword/armyofficer - name = "army officer's sword" - desc = "A curved sword issued to SCG Army officers." - icon_state = "armyofficersword" - item_state = "armyofficersword" - /obj/item/material/sword/replica/officersword/pettyofficer name = "chief petty officer's cutlass" desc = "A polished cutlass issued to chief petty officers of the fleet." icon_state = "pettyofficersword" item_state = "pettyofficersword" + +/obj/item/melee/powerfist/mounted + icon_state = "powerfist" + item_state = "powerfist" + name = "hardsuit powerfist" + icon = 'icons/obj/augment.dmi' + desc = "Hardsuit gauntlet powered-up by servomotors. Capable of prying airlock open, but can't make people fly." + base_parry_chance = 12 + force = 15 + attack_cooldown = SLOW_WEAPON_COOLDOWN + hitsound = 'sound/effects/bang.ogg' + attack_verb = list("smashed", "bludgeoned", "hammered", "battered") + var/mob/living/creator + +/obj/item/melee/powerfist/mounted/dropped() + ..() + QDEL_IN(src, 0) + + +/obj/item/melee/powerfist/mounted/get_storage_cost() + return ITEM_SIZE_NO_CONTAINER + + +/obj/item/melee/powerfist/mounted/Initialize() + . = ..() + START_PROCESSING(SSobj, src) + + +/obj/item/melee/powerfist/mounted/Destroy() + STOP_PROCESSING(SSobj, src) + . = ..() + + +/obj/item/melee/powerfist/mounted/attack_self(mob/user as mob) + user.drop_from_inventory(src) + + +/obj/item/melee/powerfist/mounted/use_before(atom/target, mob/living/user, click_parameters) + if (user.a_intent == I_HELP || !istype(target, /obj/machinery/door/airlock)) + return FALSE + + var/obj/machinery/door/airlock/A = target + + if (A.operating) + return FALSE + + if (A.locked) + to_chat(user, SPAN_WARNING("The airlock's bolts prevent it from being forced.")) + return TRUE + + if (A.welded) + A.visible_message(SPAN_DANGER("\The [user] forces the fingers of \the [src] in through the welded metal, beginning to pry \the [A] open!")) + if (do_after(user, 11 SECONDS, A, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && !A.locked) + A.welded = FALSE + A.update_icon() + playsound(A, 'sound/effects/bang.ogg', 100, 1) + playsound(A, 'sound/machines/airlock_creaking.ogg', 100, 1) + A.visible_message(SPAN_DANGER("\The [user] tears \the [A] open with \a [src]!")) + addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/door/airlock, open), TRUE), 0) + A.set_broken(TRUE) + return TRUE + else + A.visible_message(SPAN_DANGER("\The [user] pries the fingers of \a [src] in, beginning to force \the [A]!")) + if ((MACHINE_IS_BROKEN(A) || !A.is_powered() || do_after(user, 8 SECONDS, A, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) && !(A.operating || A.welded || A.locked)) + playsound(A, 'sound/machines/airlock_creaking.ogg', 100, 1) + if (A.density) + addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/door/airlock, open), TRUE), 0) + if(!MACHINE_IS_BROKEN(A) && A.is_powered()) + A.set_broken(TRUE) + A.visible_message(SPAN_DANGER("\The [user] forces \the [A] open with \a [src]!")) + else + addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/door/airlock, close), TRUE), 0) + if (!MACHINE_IS_BROKEN(A) && A.is_powered()) + A.set_broken(TRUE) + A.visible_message(SPAN_DANGER("\The [user] forces \the [A] closed with \a [src]!")) + return TRUE diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index 1ec6d36a4a704..8357f29f362e7 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -1,7 +1,7 @@ /obj/item/mop desc = "The world of janitalia wouldn't be complete without a mop." name = "mop" - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/janitor_tools.dmi' icon_state = "mop" force = 5 throwforce = 10.0 @@ -13,8 +13,8 @@ var/mopcount = 0 var/mopspeed = 40 var/list/moppable_types = list( - /obj/effect/decal/cleanable, - /obj/effect/rune, + /obj/decal/cleanable, + /obj/rune, /obj/structure/catwalk ) @@ -22,14 +22,11 @@ . = ..() create_reagents(30) -/obj/item/mop/afterattack(atom/A, mob/user, proximity) - if(!proximity) - return - +/obj/item/mop/use_after(atom/A, mob/living/user, click_parameters) var/moppable if(istype(A, /turf)) var/turf/T = A - var/obj/effect/fluid/F = locate() in T + var/obj/fluid/F = locate() in T if(F && F.fluid_amount > 0) if(F.fluid_amount > FLUID_SHALLOW) to_chat(user, SPAN_WARNING("There is too much water here to be mopped up.")) @@ -41,7 +38,7 @@ else qdel(F) to_chat(user, SPAN_NOTICE("You have finished mopping!")) - return + return TRUE moppable = TRUE else if(is_type_in_list(A,moppable_types)) @@ -50,10 +47,10 @@ if(moppable) if(reagents.total_volume < 1) to_chat(user, SPAN_NOTICE("Your mop is dry!")) - return + return TRUE var/turf/T = get_turf(A) if(!T) - return + return TRUE user.visible_message(SPAN_WARNING("\The [user] begins to clean \the [T].")) @@ -61,13 +58,9 @@ if(T) T.clean(src, user) to_chat(user, SPAN_NOTICE("You have finished mopping!")) + return TRUE -/obj/effect/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/mop) || istype(I, /obj/item/soap)) - return - ..() - /obj/item/mop/advanced desc = "The most advanced tool in a custodian's arsenal, with a cleaner synthesizer to boot! Just think of all the viscera you will clean up with this!" name = "advanced mop" @@ -99,7 +92,7 @@ /obj/item/mop/advanced/examine(mob/user) . = ..() - to_chat(user, SPAN_NOTICE("The condenser switch is set to [refill_enabled ? "ON" : "OFF"].")) + . += SPAN_NOTICE("The condenser switch is set to [refill_enabled ? "ON" : "OFF"].") /obj/item/mop/advanced/Destroy() if(refill_enabled) diff --git a/code/game/objects/items/weapons/nuclear_cylinder.dm b/code/game/objects/items/weapons/nuclear_cylinder.dm index 0d325c7cd82fb..14db05aa07a80 100644 --- a/code/game/objects/items/weapons/nuclear_cylinder.dm +++ b/code/game/objects/items/weapons/nuclear_cylinder.dm @@ -1,7 +1,7 @@ /obj/item/nuclear_cylinder name = "\improper nuclear cylinder" desc = "This cylinder is used in the self destruct system of the ship." - icon = 'icons/obj/nuclear_cylinder.dmi' + icon = 'icons/obj/machines/nuclear_cylinder.dmi' icon_state = "nuclear_cylinder" item_state = "nuclear" obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -10,4 +10,4 @@ throwforce = 15.0 throw_speed = 2 throw_range = 4 - origin_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 4) \ No newline at end of file + origin_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 4) diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index 60ff253fa4814..18a29775dce71 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -6,7 +6,7 @@ var/global/list/cached_icons = list() /obj/item/reagent_containers/glass/paint desc = "It's a paint bucket." name = "paint bucket" - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/tools/paint_bucket.dmi' icon_state = "paintbucket" item_state = "paintcan" matter = list(MATERIAL_ALUMINIUM = 200) @@ -18,8 +18,7 @@ var/global/list/cached_icons = list() atom_flags = ATOM_FLAG_OPEN_CONTAINER var/paint_hex = "#fe191a" -/obj/item/reagent_containers/glass/paint/afterattack(turf/simulated/target, mob/user, proximity) - if(!proximity) return +/obj/item/reagent_containers/glass/paint/use_after(turf/simulated/target, mob/living/user, click_parameters) if(istype(target) && reagents.total_volume > 5) if (reagents.should_admin_log()) var/contained = reagentlist() @@ -29,8 +28,7 @@ var/global/list/cached_icons = list() admin_attacker_log(user, "Used \the [name] containing [contained] to splash \the [target]") user.visible_message(SPAN_WARNING("\The [target] has been splashed with something by [user]!")) reagents.trans_to_turf(target, 5) - else - return ..() + return TRUE /obj/item/reagent_containers/glass/paint/Initialize() . = ..() @@ -39,11 +37,11 @@ var/global/list/cached_icons = list() update_icon() /obj/item/reagent_containers/glass/paint/on_update_icon() - overlays.Cut() + ClearOverlays() if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "paintbucket") filling.color = reagents.get_color() - overlays += filling + AddOverlays(filling) /obj/item/reagent_containers/glass/paint/red name = "red paint bucket" diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index bb4ed8e6eb9df..765cf0962c2a8 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -27,7 +27,7 @@ GLOBAL_LIST(hazard_overlays) return var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in T if(airlock) - afterattack(airlock, null, TRUE) + use_after(airlock, null) return INITIALIZE_HINT_QDEL var/global/list/tape_roll_applications = list() @@ -48,7 +48,7 @@ var/global/list/tape_roll_applications = list() /obj/item/tape/on_update_icon() //Possible directional bitflags: 0 (AIRLOCK), 1 (NORTH), 2 (SOUTH), 4 (EAST), 8 (WEST), 3 (VERTICAL), 12 (HORIZONTAL) - overlays.Cut() + ClearOverlays() var/new_state switch (tape_dir) if(0) // AIRLOCK @@ -64,7 +64,7 @@ var/global/list/tape_roll_applications = list() if(detail_overlay) var/image/I = overlay_image(icon, "[new_state]_[detail_overlay]", flags=RESET_COLOR) I.color = detail_color - overlays |= I + AddOverlays(I) /obj/item/taperoll/police name = "police tape" @@ -112,13 +112,13 @@ var/global/list/tape_roll_applications = list() name = "research tape" desc = "A roll of research tape used to block off working areas from the public." tape_type = /obj/item/tape/research - color = COLOR_WHITE + color = COLOR_RESEARCH /obj/item/tape/research name = "research tape" desc = "A length of research tape. Better not cross it." req_access = list(access_research) - color = COLOR_WHITE + color = COLOR_RESEARCH /obj/item/taperoll/medical name = "medical tape" @@ -149,7 +149,7 @@ var/global/list/tape_roll_applications = list() detail_color = COLOR_RED /obj/item/taperoll/on_update_icon() - overlays.Cut() + ClearOverlays() var/image/overlay = image(icon = src.icon) overlay.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR if(ismob(loc)) @@ -157,7 +157,7 @@ var/global/list/tape_roll_applications = list() overlay.icon_state = "start" else overlay.icon_state = "stop" - overlays += overlay + AddOverlays(overlay) /obj/item/taperoll/dropped(mob/user) update_icon() @@ -286,10 +286,7 @@ var/global/list/tape_roll_applications = list() to_chat(usr, SPAN_NOTICE("You finish placing \the [src].")) return -/obj/item/taperoll/afterattack(atom/A, mob/user as mob, proximity) - if(!proximity) - return - +/obj/item/taperoll/use_before(atom/A, mob/living/user, click_parameters) if (istype(A, /obj/machinery/door/airlock)) var/turf/T = get_turf(A) var/obj/item/tape/P = new tape_type(T) @@ -297,23 +294,26 @@ var/global/list/tape_roll_applications = list() P.update_icon() P.layer = ABOVE_DOOR_LAYER to_chat(user, SPAN_NOTICE("You finish placing \the [src].")) + return TRUE - if (istype(A, /turf/simulated/floor) ||istype(A, /turf/unsimulated/floor)) + if (istype(A, /turf/simulated/floor) || istype(A, /turf/unsimulated/floor)) var/turf/F = A var/direction = user.loc == F ? user.dir : turn(user.dir, 180) var/hazard_overlay = GLOB.hazard_overlays["[direction]"] - if(tape_roll_applications[F] == null) + if(isnull(tape_roll_applications[F])) tape_roll_applications[F] = 0 - if(tape_roll_applications[F] & direction) // hazard_overlay in F.overlays wouldn't work. + if(tape_roll_applications[F] & direction) user.visible_message("\The [user] uses the adhesive of \the [src] to remove area markings from \the [F].", "You use the adhesive of \the [src] to remove area markings from \the [F].") - F.overlays -= hazard_overlay + F.CutOverlays(hazard_overlay) tape_roll_applications[F] &= ~direction else user.visible_message("\The [user] applied \the [src] on \the [F] to create area markings.", "You apply \the [src] on \the [F] to create area markings.") - F.overlays |= hazard_overlay + F.AddOverlays(hazard_overlay) tape_roll_applications[F] |= direction - return + return TRUE + + return ..() /obj/item/tape/proc/crumple() if(!crumpled) diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index 8ac24e19997c2..8bf86c6faae73 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -1,7 +1,7 @@ /obj/item/teleportation_scroll name = "scroll of teleportation" desc = "A scroll for moving around." - icon = 'icons/obj/wizard.dmi' + icon = 'icons/obj/cult.dmi' icon_state = "scroll" var/uses = 4.0 w_class = ITEM_SIZE_TINY @@ -47,7 +47,7 @@ if (!thearea || CanUseTopic(user) != STATUS_INTERACTIVE) return - var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread() + var/datum/effect/smoke_spread/smoke = new /datum/effect/smoke_spread() smoke.set_up(5, 0, user.loc) smoke.attach(user) smoke.start() diff --git a/code/game/objects/items/weapons/scrubpack.dm b/code/game/objects/items/weapons/scrubpack.dm index b4a49f4abb8ee..6bb6f88d507b8 100644 --- a/code/game/objects/items/weapons/scrubpack.dm +++ b/code/game/objects/items/weapons/scrubpack.dm @@ -7,7 +7,7 @@ desc = "A heavy, unwieldy machine that can filter harmful gasses out of the atmosphere. It runs on an internal power source." w_class = ITEM_SIZE_HUGE slot_flags = SLOT_BACK - icon = 'icons/obj/storage.dmi' + icon = 'icons/obj/scrubpack.dmi' icon_state = "scrubpack" item_state_slots = list(slot_l_hand_str = "scrubberpack", slot_r_hand_str = "scrubberpack") action_button_name = "Toggle Scrubber" @@ -43,7 +43,7 @@ /obj/item/scrubpack/examine(mob/user, distance) . = ..() if (distance < 5) - to_chat(user, "It [cell ? "has" : "is missing"] a cell and [tank ? "has" : "is missing"] a tank.") + . += SPAN_NOTICE("It [cell ? "has" : "is missing"] a cell and [tank ? "has" : "is missing"] a tank.") if (distance < 2) if (tank) var/datum/gas_mixture/air = tank.return_air() @@ -59,7 +59,7 @@ display = "low ([display])" else display = "very low ([display])" - to_chat(user, "\The [tank] pressure is [display]") + . += SPAN_NOTICE("[tank] pressure is [display]") if (cell) var/display = cell.percent() if (user.skill_check(SKILL_ELECTRICAL, SKILL_BASIC)) @@ -72,21 +72,55 @@ display = "low ([display]%)" else display = "[display]%" - to_chat(user, "\The [cell] charge is [display]") + . += SPAN_NOTICE("[cell] charge is [display]") + +/obj/item/scrubpack/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(enabled) + USE_FEEDBACK_NEED_DISABLED(user) + return + if(!cell && !tank) + balloon_alert(user, "нечего снимать!") + return + var/list/options = list() + if(cell) + options += "cell" + if(tank) + options += "tank" + var/selection = input("Which would you like to remove?") as null|anything in options + if(!selection) + return + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_ATMOS, do_flags = DO_PUBLIC_UNIQUE)) + return + var/removed + if(selection == "cell") + user.put_in_hands(cell) + removed = cell + cell = null + else if(selection == "tank") + user.put_in_hands(tank) + removed = tank + tank = null + user.visible_message( + SPAN_ITALIC("[user] removes [removed] from [src]."), + SPAN_ITALIC("You remove the [selection] from [src]."), + SPAN_ITALIC("You can hear metal scratching on metal."), + range = 5 + ) /obj/item/scrubpack/attackby(obj/item/W, mob/user) if (istype(W, /obj/item/cell)) if (cell) - to_chat(user, SPAN_WARNING("\The [src] already has \an [cell].")) + to_chat(user, SPAN_WARNING("[src] already has \an [cell].")) return TRUE if (istype(W, /obj/item/cell/device)) - to_chat(user, SPAN_WARNING("\The [W] is too small for \the [src].")) + to_chat(user, SPAN_WARNING("[W] is too small for [src].")) return TRUE if (!user.unEquip(W, src)) return user.visible_message( - SPAN_ITALIC("\The [user] fits \the [W] to \the [src]."), - SPAN_ITALIC("You fit \the [W] to \the [src]."), + SPAN_ITALIC("[user] fits [W] to [src]."), + SPAN_ITALIC("You fit [W] to [src]."), SPAN_ITALIC("You can hear metal scratching on metal."), range = 5 ) @@ -95,64 +129,28 @@ if (istype(W, /obj/item/tank)) if (tank) - to_chat(user, SPAN_WARNING("\The [src] already has \an [tank].")) + to_chat(user, SPAN_WARNING("[src] already has \an [tank].")) return TRUE if (!istype(W, tank_permit)) - to_chat(user, SPAN_WARNING("\The [src] can't fit \a [W].")) + to_chat(user, SPAN_WARNING("[src] can't fit [W].")) return TRUE if (!user.unEquip(W, src)) return user.visible_message( - SPAN_ITALIC("\The [user] fits \the [W] to \the [src]."), - SPAN_ITALIC("You fit \the [W] to \the [src]."), + SPAN_ITALIC("[user] fits [W] to [src]."), + SPAN_ITALIC("You fit [W] to [src]."), SPAN_ITALIC("You can hear metal scratching on metal."), range = 5 ) tank = W return TRUE - if (isScrewdriver(W)) - if (enabled) - to_chat(user, SPAN_WARNING("Turn \the [src] off first!")) - return TRUE - if (!cell && !tank) - to_chat(user, SPAN_WARNING("\The [src] doesn't have anything you can remove.")) - return TRUE - var/list/options = list() - if (cell) - options += "cell" - if (tank) - options += "tank" - var/selection = input("Which would you like to remove?") as null|anything in options - if (!selection) - return TRUE - var/time_cost = 5 - round(user.get_skill_value(SKILL_ATMOS) * 0.5) //0,1,1,2,2 - if (!do_after(user, time_cost SECONDS, src, do_flags = DO_PUBLIC_UNIQUE)) - return TRUE - var/removed - if (selection == "cell") - user.put_in_hands(cell) - removed = cell - cell = null - else if (selection == "tank") - user.put_in_hands(tank) - removed = tank - tank = null - user.visible_message( - SPAN_ITALIC("\The [user] removes \the [removed] from \the [src]."), - SPAN_ITALIC("You remove the [selection] from \the [src]."), - SPAN_ITALIC("You can hear metal scratching on metal."), - range = 5 - ) - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) - return TRUE - . = ..() /obj/item/scrubpack/attack_self(mob/user) toggle(user) -/obj/item/scrubpack/ui_action_click() +/obj/item/scrubpack/ui_action_click(mob/living/user) toggle(usr) /obj/item/scrubpack/proc/set_sound_state(on_off) @@ -168,19 +166,19 @@ if (!cell) mods += "a cell" if (!tank) mods += "a tank" if (length(mods)) - to_chat(user, SPAN_WARNING("You try to turn on \the [src], but it's missing [english_list(mods)].")) + to_chat(user, SPAN_WARNING("You try to turn on [src], but it's missing [english_list(mods)].")) enabled = FALSE return if (cell.charge < charge_cost) - to_chat(user, SPAN_WARNING("You try to turn on \the [src], but it's out of charge.")) + to_chat(user, SPAN_WARNING("You try to turn on [src], but it's out of charge.")) enabled = FALSE return - to_chat(user, SPAN_ITALIC("You turn on \the [src].")) + to_chat(user, SPAN_ITALIC("You turn on [src].")) START_PROCESSING(SSobj, src) icon_state = "scrubpack_on" set_sound_state(TRUE) else - to_chat(user, SPAN_ITALIC("You turn off \the [src].")) + to_chat(user, SPAN_ITALIC("You turn off [src].")) STOP_PROCESSING(SSobj, src) icon_state = "scrubpack" set_sound_state(FALSE) @@ -188,7 +186,7 @@ /obj/item/scrubpack/Process() var/datum/gas_mixture/tank_air = tank.return_air() if (tank_air.return_pressure() > TANK_LEAK_PRESSURE * 0.8) - audible_message(SPAN_ITALIC("\The [src] beeps stridently and stops working.")) + audible_message(SPAN_ITALIC("[src] beeps stridently and stops working.")) STOP_PROCESSING(SSobj, src) icon_state = "scrubpack" set_sound_state(FALSE) @@ -226,7 +224,7 @@ var/final_cost = max(charge_cost * 0.1, total_filter_moles / volume_rate) if (!cell.checked_use(final_cost)) - audible_message(SPAN_ITALIC("\The [src] beeps stridently and stops working.")) + audible_message(SPAN_ITALIC("[src] beeps stridently and stops working.")) STOP_PROCESSING(SSobj, src) icon_state = "scrubpack" set_sound_state(FALSE) diff --git a/code/game/objects/items/weapons/secrets_disk.dm b/code/game/objects/items/weapons/secrets_disk.dm index 3335577ca9186..af9558ea02bbc 100644 --- a/code/game/objects/items/weapons/secrets_disk.dm +++ b/code/game/objects/items/weapons/secrets_disk.dm @@ -1,7 +1,7 @@ /obj/item/disk/secret_project name = "'classified' project data disk" desc = "A special disk for storing massive amounts of data. It is marked as classified, and has an ID card slot on top." - icon = 'icons/obj/cloning.dmi' + icon = 'icons/obj/datadisks.dmi' icon_state = "datadisk0" item_state = "card-id" w_class = ITEM_SIZE_SMALL @@ -31,10 +31,10 @@ /obj/item/disk/secret_project/examine(mob/user) . = ..() if(!locked) - to_chat(user, "With the disk's classified contents unlocked, \ - you peer into its preview screen and see [SPAN_NOTICE("[subject]")].") + . += SPAN_NOTICE("With the disk's classified contents unlocked, \ + you peer into its preview screen and see [SPAN_ITALIC("[subject]")].") else - to_chat(user, "The disk is locked, you cannot see its contents.") + . += SPAN_NOTICE("The disk is locked, you cannot see its contents.") /obj/item/disk/secret_project/emag_act(remaining_charges, mob/user) to_chat(user, SPAN_WARNING("The cryptographic lock on this disk is far too complex. \ diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index dca74042ba4f7..041091799fd13 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -17,6 +17,7 @@ return 1 return 0 + /proc/default_parry_check(mob/user, mob/attacker, atom/damage_source) //parry only melee attacks if(istype(damage_source, /obj/item/projectile) || (attacker && get_dist(user, attacker) > 1) || user.incapacitated()) @@ -29,11 +30,13 @@ return 1 + /obj/item/shield name = "shield" var/base_block_chance = 60 var/max_block = 0 + /obj/item/shield/handle_shield(mob/user, damage, atom/damage_source = null, mob/attacker = null, def_zone = null, attack_text = "the attack") if(user.incapacitated()) return 0 @@ -49,6 +52,7 @@ /obj/item/shield/proc/get_block_chance(mob/user, damage, atom/damage_source = null, mob/attacker = null) return base_block_chance + /obj/item/shield/riot name = "riot shield" desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder." @@ -68,10 +72,12 @@ var/cooldown = 0 //shield bash cooldown. based on world.time var/can_block_lasers = FALSE + /obj/item/shield/riot/handle_shield(mob/user) . = ..() if(.) playsound(user.loc, 'sound/weapons/Genhit.ogg', 50, 1) + /obj/item/shield/riot/get_block_chance(mob/user, damage, atom/damage_source = null, mob/attacker = null) if(istype(damage_source, /obj/item/projectile)) var/obj/item/projectile/P = damage_source @@ -82,6 +88,7 @@ return 0 return base_block_chance + /obj/item/shield/riot/attackby(obj/item/W as obj, mob/user as mob) if(istype(W, /obj/item/melee/baton)) if(cooldown < world.time - 25) @@ -91,6 +98,7 @@ else ..() + /obj/item/shield/riot/metal name = "plasteel combat shield" icon = 'icons/obj/weapons/melee_physical.dmi' @@ -125,10 +133,12 @@ matter = list(MATERIAL_STEEL = 1000, MATERIAL_WOOD = 1000) attack_verb = list("shoved", "bashed") + /obj/item/shield/buckler/handle_shield(mob/user) . = ..() if(.) playsound(user.loc, 'sound/weapons/Genhit.ogg', 50, 1) + /obj/item/shield/buckler/get_block_chance(mob/user, damage, atom/damage_source = null, mob/attacker = null) if (istype(damage_source, /obj/item/projectile)) if (max_block && damage >= max_block) @@ -155,7 +165,9 @@ var/next_action var/sound_token var/sound_id - var/datum/effect/effect/system/spark_spread/sparks + var/damaged = FALSE + var/disabled + var/datum/effect/spark_spread/sparks /obj/item/shield/energy/Destroy() @@ -173,35 +185,76 @@ /obj/item/shield/energy/on_update_icon() icon_state = "eshield[active]" if (active) - set_light(0.6, 0.1, 2, 1, "#006aff") + set_light(1.5, 1.5, "#006aff") else set_light(0) -/obj/item/shield/energy/attack_self(mob/living/user) +/obj/item/shield/energy/proc/activate(mob/living/user) var/time = world.time + + if (active) + return + if (time < next_action) return + + if (damaged) + if (world.time < disabled) + if (user) + user.show_message(SPAN_WARNING("\The [src] sputters. It's not going to work right now!")) + return + user.visible_message(SPAN_NOTICE("\The [src] resonates perfectly, once again.")) + damaged = FALSE + next_action = time + 3 SECONDS active = !active + if (active) - addtimer(new Callback(src, /obj/item/shield/energy/proc/UpdateSoundLoop), 0.25 SECONDS) playsound(src, 'sound/obj/item/shield/energy/shield-start.ogg', 40) force = 10 w_class = ITEM_SIZE_NO_CONTAINER - else - addtimer(new Callback(src, /obj/item/shield/energy/proc/UpdateSoundLoop), 0.1 SECONDS) + + if (istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() + + update_icon() + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/shield/energy, UpdateSoundLoop)), 0.25 SECONDS) + + +/obj/item/shield/energy/proc/deactivate(mob/living/user) + if (!active) + return + + active = !active + + if (!active) playsound(src, 'sound/obj/item/shield/energy/shield-stop.ogg', 40) force = initial(force) w_class = initial(w_class) - add_fingerprint(user) - user.update_inv_l_hand() - user.update_inv_r_hand() + update_icon() + if (istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() -/obj/item/shield/energy/handle_shield(mob/living/user) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/shield/energy, UpdateSoundLoop)), 0.1 SECONDS) + + +/obj/item/shield/energy/attack_self(mob/living/user) if (!active) + activate(user) + else + deactivate(user) + return + + +/obj/item/shield/energy/handle_shield(mob/living/user) + if (!active && damaged) return FALSE . = ..() if (!.) @@ -217,6 +270,30 @@ return base_block_chance +/obj/item/shield/energy/emp_act(severity) + SHOULD_CALL_PARENT(FALSE) + if (!active) + return + if (damaged) + return + var/disabletime = 30 SECONDS + if (severity == EMP_ACT_HEAVY) + disabletime = 1 MINUTES + + visible_message(SPAN_DANGER("\The [src] violently shudders!")) + new /obj/overlay/self_deleting/emppulse(get_turf(src)) + + disabled = world.time + disabletime + damaged = TRUE + var/mob/living/carbon/M = loc + if (M) + deactivate(M) + else + deactivate() + update_icon() + GLOB.empd_event.raise_event(src, severity) + + /obj/item/shield/energy/proc/UpdateSoundLoop() if (!active) QDEL_NULL(sound_token) diff --git a/code/game/objects/items/weapons/soap.dm b/code/game/objects/items/weapons/soap.dm index af9168d16d43e..70d592aea9772 100644 --- a/code/game/objects/items/weapons/soap.dm +++ b/code/game/objects/items/weapons/soap.dm @@ -118,25 +118,24 @@ return AM.slip("the [src.name]",3) -/obj/item/soap/afterattack(atom/target, mob/user as mob, proximity) - if(!proximity) return +/obj/item/soap/use_after(atom/target, mob/living/user, click_parameters) //I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing. //So this is a workaround. This also makes more sense from an IC standpoint. ~Carn var/cleaned = FALSE if(user.client && (target in user.client.screen)) to_chat(user, SPAN_NOTICE("You need to take that [target.name] off before cleaning it.")) - else if(istype(target,/obj/effect/decal/cleanable/blood)) + else if(istype(target,/obj/decal/cleanable/blood)) to_chat(user, SPAN_NOTICE("You scrub \the [target.name] out.")) target.clean_blood() //Blood is a cleanable decal, therefore needs to be accounted for before all cleanable decals. cleaned = TRUE - else if(istype(target,/obj/effect/decal/cleanable)) + else if(istype(target,/obj/decal/cleanable)) to_chat(user, SPAN_NOTICE("You scrub \the [target.name] out.")) qdel(target) cleaned = TRUE else if(istype(target,/turf) || istype(target, /obj/structure/catwalk)) var/turf/T = get_turf(target) if(!T) - return + return TRUE user.visible_message(SPAN_WARNING("[user] starts scrubbing \the [T].")) T.clean(src, user, 80, SPAN_NOTICE("You scrub \the [target.name] clean.")) cleaned = TRUE @@ -156,16 +155,17 @@ if(cleaned) user.update_personal_goal(/datum/goal/clean, 1) + return TRUE //attack_as_weapon -/obj/item/soap/attack(mob/living/target, mob/living/user, target_zone) - if(target && user && ishuman(target) && ishuman(user) && !target.stat && !user.stat && user.zone_sel &&user.zone_sel.selecting == BP_MOUTH) +/obj/item/soap/use_before(mob/living/target, mob/living/user) + . = FALSE + if (target && user && ishuman(target) && ishuman(user) && !target.stat && !user.stat && user.zone_sel.selecting == BP_MOUTH) user.visible_message(SPAN_DANGER("\The [user] washes \the [target]'s mouth out with soap!")) - if(reagents) + if (reagents) reagents.trans_to_mob(target, reagents.total_volume / 2, CHEM_INGEST) user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //prevent spam - return - ..() + return TRUE /obj/item/soap/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/key)) @@ -178,8 +178,8 @@ ..() /obj/item/soap/on_update_icon() - overlays.Cut() + ClearOverlays() if(key_data) - overlays += image('icons/obj/items.dmi', icon_state = "soap_key_overlay") + AddOverlays(image('icons/obj/soap.dmi', icon_state = "soap_key_overlay")) else if(decal_name) - overlays += overlay_image(icon, "decal-[decal_name]") + AddOverlays(overlay_image(icon, "decal-[decal_name]")) diff --git a/code/game/objects/items/weapons/staff.dm b/code/game/objects/items/weapons/staff.dm index 3a08b09e6b615..13370290d35cc 100644 --- a/code/game/objects/items/weapons/staff.dm +++ b/code/game/objects/items/weapons/staff.dm @@ -1,7 +1,7 @@ /obj/item/staff - name = "wizards staff" + name = "wizard's staff" desc = "Apparently a staff used by the wizard." - icon = 'icons/obj/wizard.dmi' + icon = 'icons/obj/staffs.dmi' icon_state = "staff" force = 3.0 throwforce = 5.0 @@ -13,12 +13,12 @@ /obj/item/staff/broom name = "broom" desc = "Used for sweeping, and flying into the night while cackling. Black cat not included." - icon = 'icons/obj/wizard.dmi' + icon = 'icons/obj/staffs.dmi' icon_state = "broom" /obj/item/staff/gentcane - name = "Gentlemans Cane" + name = "gentleman's cane" desc = "An ebony can with an ivory tip." icon = 'icons/obj/weapons/melee_physical.dmi' icon_state = "cane" - item_state = "stick" \ No newline at end of file + item_state = "stick" diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 6f6779e8703aa..7454eb21dbef7 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -6,6 +6,7 @@ /obj/item/storage/backpack name = "backpack" desc = "You wear this on your back and put items into it." + icon = 'icons/obj/clothing/obj_backpacks.dmi' item_icons = list( slot_l_hand_str = 'icons/mob/onmob/items/lefthand_backpacks.dmi', slot_r_hand_str = 'icons/mob/onmob/items/righthand_backpacks.dmi', @@ -27,9 +28,9 @@ /// Can this backpack be opened while worn on the back? var/worn_access = TRUE -/obj/item/storage/backpack/attackby(obj/item/W as obj, mob/user as mob) - if (src.use_sound) - playsound(src.loc, src.use_sound, 50, 1, -5) +/obj/item/storage/backpack/use_tool(obj/item/tool, mob/living/user, list/click_params) + if (use_sound) + playsound(loc, use_sound, 50, 1, -5) return ..() /obj/item/storage/backpack/equipped(mob/user, slot) @@ -45,7 +46,7 @@ if (!worn_access && usr?.isEquipped(src, slot_back)) to_chat(usr, SPAN_WARNING("You can't insert \the [W] while \the [src] is on your back.")) return - ..() + return ..() /obj/item/storage/backpack/open(mob/user) if (!worn_access && user.isEquipped(src, slot_back)) @@ -72,11 +73,11 @@ ..() return -/obj/item/storage/backpack/holding/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/storage/backpack/holding/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/storage/backpack/holding) || istype(W, /obj/item/storage/bag/trash/bluespace)) to_chat(user, SPAN_WARNING("The Bluespace interfaces of the two devices conflict and malfunction.")) qdel(W) - return 1 + return TRUE return ..() //Please don't clutter the parent storage item with stupid hacks. @@ -147,15 +148,6 @@ slot_r_hand_str = "engiepack" ) -/obj/item/storage/backpack/toxins - name = "science backpack" - desc = "It's a stain-resistant light backpack, modeled for use in laboratories and other scientific settings." - icon_state = "ntpack" - item_state_slots = list( - slot_l_hand_str = "ntpack", - slot_r_hand_str = "ntpack" - ) - /obj/item/storage/backpack/hydroponics name = "hydroponics backpack" desc = "It's a green backpack, with many pockets to store plants and tools in." @@ -174,13 +166,13 @@ slot_r_hand_str = "genpack" ) -/obj/item/storage/backpack/virology - name = "sterile backpack" - desc = "It's a sterile backpack, specially designed for work in areas with a biosafety classification level." - icon_state = "viropack" +/obj/item/storage/backpack/corpsci + name = "corporate science backpack" + desc = "It's a sterile backpack, specially designed for work in laboratory settings." + icon_state = "corpscipack" item_state_slots = list( - slot_l_hand_str = "viropack", - slot_r_hand_str = "viropack" + slot_l_hand_str = "corpscipack", + slot_r_hand_str = "corpscipack" ) /obj/item/storage/backpack/chemistry @@ -233,6 +225,15 @@ slot_r_hand_str = "rucksack_tan" ) +/obj/item/storage/backpack/sci + name = "science backpack" + desc = "It's a stain-resistant light backpack, modeled for use by Expeditionary Corps science personnel in laboratories and other scientific settings." + icon_state = "scipack" + item_state_slots = list( + slot_l_hand_str = "scipack", + slot_r_hand_str = "scipack" + ) + /* * Duffle Types */ @@ -391,10 +392,14 @@ slot_r_hand_str = "medicalpack", ) -/obj/item/storage/backpack/satchel/vir - name = "sterile satchel" - desc = "It's a sterile satchel, rated for use in areas with a biosafety classification level." - icon_state = "satchel-vir" +/obj/item/storage/backpack/satchel/corpsci + name = "corporate science satchel" + desc = "It's a sterile satchel, rated for use in laboratory settings." + icon_state = "satchel-corpsci" + item_state_slots = list( + slot_l_hand_str = "satchel-corpsci", + slot_r_hand_str = "satchel-corpsci" + ) /obj/item/storage/backpack/satchel/chem name = "pharmacy satchel" @@ -406,11 +411,6 @@ desc = "A green satchel, filled with slots for diskettes and other workplace tools." icon_state = "satchel-gen" -/obj/item/storage/backpack/satchel/tox - name = "science satchel" - desc = "It's a stain-resistant satchel, modeled for use in laboratories and other scientific settings." - icon_state = "satchel-nt" - /obj/item/storage/backpack/satchel/sec name = "security satchel" desc = "A robust satchel for security-related needs." @@ -439,6 +439,15 @@ slot_r_hand_str = "satchel-cap", ) +/obj/item/storage/backpack/satchel/sci + name = "science satchel" + desc = "It's a stain-resistant satchel, modeled for use by Expeditionary Corps science personnel in laboratories and other scientific settings." + icon_state = "satchel-sci" + item_state_slots = list( + slot_l_hand_str = "satchel-sci", + slot_r_hand_str = "satchel-sci", + ) + //Smuggler's satchel /obj/item/storage/backpack/satchel/flat name = "\improper Smuggler's satchel" @@ -450,7 +459,7 @@ storage_slots = 5 max_w_class = ITEM_SIZE_NORMAL max_storage_space = 15 - cant_hold = list(/obj/item/storage/backpack/satchel/flat) //muh recursive backpacks + contents_banned = list(/obj/item/storage/backpack/satchel/flat) startswith = list( /obj/item/stack/tile/floor, /obj/item/crowbar @@ -463,7 +472,7 @@ ..() /obj/item/storage/backpack/satchel/flat/hide(i) - set_invisibility(i ? 101 : 0) + set_invisibility(i ? INVISIBILITY_ABSTRACT : 0) anchored = i ? TRUE : FALSE alpha = i ? 128 : initial(alpha) @@ -526,15 +535,10 @@ desc = "A small, sterile backpack worn over one shoulder. This one was designed for use in the sterile confines of the infirmary." icon_state = "courierbagmed" -/obj/item/storage/backpack/messenger/viro - name = "virology messenger bag" - desc = "A small, sterile backpack worn over one shoulder. This one was designed for work in areas with a biosafety classification level." - icon_state = "courierbagviro" - -/obj/item/storage/backpack/messenger/tox - name = "science messenger bag" - desc = "A small, stain-resistant backpack worn over one shoulder. This one was modeled for use in laboratories and other scientific settings." - icon_state = "courierbagnt" +/obj/item/storage/backpack/messenger/corpsci + name = "corporate science messenger bag" + desc = "A small, sterile backpack worn over one shoulder. This one was designed for work in laboratory settings." + icon_state = "courierbagcorpsci" /obj/item/storage/backpack/messenger/com name = "command messenger bag" @@ -560,3 +564,24 @@ name = "corporate security messenger bag" desc = "A small, tactical backpack worn over one shoulder. This one is in EXO colors." icon_state = "courierbagsec_exo" + + +/obj/item/storage/backpack/messenger/sci + name = "science messenger bag" + desc = "A small, stain-resistant backpack worn over one shoulder. This one was modeled for use by Expeditionary Corps science personnel in laboratories and other scientific settings." + icon_state = "courierbagsci" + + +/obj/item/storage/backpack/messenger/black + name = "black messenger bag" + icon_state = "courierbag-black" + + +/obj/item/storage/backpack/messenger/brown + name = "brown messenger bag" + icon_state = "courierbag-brown" + + +// prevents consumption by dept versions +/obj/item/storage/backpack/messenger/grey + name = "grey messenger bag" diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index fddfbb01c5d1f..d34f3bacb3e60 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -2,9 +2,8 @@ Represents flexible bags that expand based on the size of their contents. */ /obj/item/storage/bag - allow_quick_gather = 1 - allow_quick_empty = 1 - use_to_pickup = 1 + allow_quick_gather = TRUE + allow_quick_empty = TRUE slot_flags = SLOT_BELT /obj/item/storage/bag/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) @@ -42,14 +41,13 @@ /obj/item/storage/bag/trash name = "trash bag" desc = "It's the heavy-duty black polymer kind. Time to take out the trash!" - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/bags.dmi' icon_state = "trashbag" item_state = "trashbag" w_class = ITEM_SIZE_SMALL max_w_class = ITEM_SIZE_HUGE //can fit a backpack inside a trash bag, seems right max_storage_space = DEFAULT_BACKPACK_STORAGE - can_hold = list() // any /obj/item/storage/bag/trash/update_w_class() ..() @@ -89,7 +87,6 @@ w_class = ITEM_SIZE_TINY max_w_class = ITEM_SIZE_NORMAL max_storage_space = DEFAULT_BOX_STORAGE - can_hold = list() // any // ----------------------------- // Cash Bag @@ -97,10 +94,13 @@ /obj/item/storage/bag/cash name = "cash bag" - icon = 'icons/obj/storage.dmi' + icon = 'icons/obj/bags.dmi' icon_state = "cashbag" desc = "A bag for carrying lots of cash. It's got a big dollar sign printed on the front." max_storage_space = 100 max_w_class = ITEM_SIZE_HUGE w_class = ITEM_SIZE_SMALL - can_hold = list(/obj/item/material/coin,/obj/item/spacecash) + contents_allowed = list( + /obj/item/material/coin, + /obj/item/spacecash + ) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 30f79fd326ef0..e89affec52e52 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -8,6 +8,7 @@ icon_state = "utilitybelt" item_state = "utility" storage_slots = 7 + force = 2 item_flags = ITEM_FLAG_IS_BELT max_w_class = ITEM_SIZE_NORMAL slot_flags = SLOT_BELT @@ -26,10 +27,10 @@ var/mob/M = src.loc M.update_inv_belt() - overlays.Cut() + ClearOverlays() if(overlay_flags & BELT_OVERLAY_ITEMS) for(var/obj/item/I in contents) - overlays += image('icons/obj/clothing/obj_belt_overlays.dmi', "[I.icon_state]") + AddOverlays(image('icons/obj/clothing/obj_belt_overlays.dmi', "[I.icon_state]")) /obj/item/storage/belt/get_mob_overlay(mob/user_mob, slot) var/image/ret = ..() @@ -42,7 +43,7 @@ ret_overlays += H.species.get_offset_overlay_image(FALSE, 'icons/mob/onmob/onmob_belt.dmi', use_state, I.color, slot) else ret_overlays += overlay_image('icons/mob/onmob/onmob_belt.dmi', use_state, I.color, RESET_COLOR) - ret.overlays += ret_overlays + ret.AddOverlays(ret_overlays) return ret /obj/item/storage/belt/holster @@ -55,7 +56,7 @@ var/list/can_holster //List of objects which this item can store in the designated holster slot(if unset, it will default to any holsterable items) var/sound_in = 'sound/effects/holster/holsterin.ogg' var/sound_out = 'sound/effects/holster/holsterout.ogg' - can_hold = list( + contents_allowed = list( /obj/item/melee/baton, /obj/item/melee/telebaton ) @@ -64,12 +65,13 @@ . = ..() set_extension(src, /datum/extension/holster, src, sound_in, sound_out, can_holster) -/obj/item/storage/belt/holster/attackby(obj/item/W as obj, mob/user as mob) - var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) - if(H.holster(W, user)) - return - else - . = ..(W, user) +/obj/item/storage/belt/holster/use_tool(obj/item/tool, mob/living/user, list/click_params) + // Holster + var/datum/extension/holster/holster = get_extension(src, /datum/extension/holster) + if (holster.can_holster(tool) && holster.holster(tool, user)) + return TRUE + + return ..() /obj/item/storage/belt/holster/attack_hand(mob/user as mob) var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) @@ -82,22 +84,22 @@ . = ..() var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) if (!QDELETED(H)) - H.examine_holster(user) + . += H.examine_holster(user) /obj/item/storage/belt/holster/on_update_icon() if (ismob(src.loc)) var/mob/M = src.loc M.update_inv_belt() - overlays.Cut() + ClearOverlays() var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) if(overlay_flags) for(var/obj/item/I in contents) if(I == H.holstered) if(overlay_flags & BELT_OVERLAY_HOLSTER) - overlays += image('icons/obj/clothing/obj_belt_overlays.dmi', "[I.icon_state]") + AddOverlays(image('icons/obj/clothing/obj_belt_overlays.dmi', "[I.icon_state]")) else if(overlay_flags & BELT_OVERLAY_ITEMS) - overlays += image('icons/obj/clothing/obj_belt_overlays.dmi', "[I.icon_state]") + AddOverlays(image('icons/obj/clothing/obj_belt_overlays.dmi', "[I.icon_state]")) /obj/item/storage/belt/utility name = "tool belt" @@ -105,8 +107,7 @@ icon_state = "utilitybelt" item_state = "utility" overlay_flags = BELT_OVERLAY_ITEMS - can_hold = list( - ///obj/item/combitool, + contents_allowed = list( /obj/item/crowbar, /obj/item/screwdriver, /obj/item/weldingtool, @@ -131,7 +132,11 @@ /obj/item/clothing/gloves, /obj/item/tape_roll, /obj/item/clothing/head/beret, - /obj/item/material/knife/folding + /obj/item/material/knife/folding, + /obj/item/swapper, + /obj/item/device/drone_designator, + /obj/item/modular_computer/tablet, + /obj/item/modular_computer/pda ) @@ -142,7 +147,7 @@ new /obj/item/weldingtool(src) new /obj/item/crowbar(src) new /obj/item/wirecutters(src) - new /obj/item/stack/cable_coil/random(src, 30) + new /obj/random/single/color/cable_coil(src, 30) update_icon() @@ -156,20 +161,28 @@ new /obj/item/device/t_scanner(src) update_icon() - +/obj/item/storage/belt/utility/engi_command/New() + ..() + new /obj/item/swapper/power_drill(src) + new /obj/item/weldingtool(src) + new /obj/item/swapper/jaws_of_life(src) + new /obj/random/single/color/cable_coil(src, 30) + new /obj/item/device/t_scanner(src) + update_icon() /obj/item/storage/belt/medical name = "medical belt" desc = "Can hold various medical equipment." icon_state = "medicalbelt" item_state = "medical" - can_hold = list( + contents_allowed = list( /obj/item/device/scanner/health, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/pill, /obj/item/reagent_containers/syringe, + /obj/item/reagent_containers/ivbag, /obj/item/flame/lighter/zippo, /obj/item/storage/fancy/smokable, /obj/item/storage/pill_bottle, @@ -186,9 +199,12 @@ /obj/item/extinguisher/mini, /obj/item/storage/med_pouch, /obj/item/bodybag, + /obj/item/taperoll/medical, /obj/item/clothing/gloves, /obj/item/clothing/head/beret, - /obj/item/material/knife/folding + /obj/item/material/knife/folding, + /obj/item/modular_computer/tablet, + /obj/item/modular_computer/pda ) /obj/item/storage/belt/medical/emt @@ -204,7 +220,7 @@ item_state = "security" storage_slots = 8 overlay_flags = BELT_OVERLAY_ITEMS|BELT_OVERLAY_HOLSTER - can_hold = list( + contents_allowed = list( /obj/item/crowbar, /obj/item/grenade, /obj/item/reagent_containers/spray/pepper, @@ -218,6 +234,7 @@ /obj/item/melee/telebaton, /obj/item/flame/lighter, /obj/item/device/flashlight, + /obj/item/modular_computer/tablet, /obj/item/modular_computer/pda, /obj/item/device/radio/headset, /obj/item/device/hailer, @@ -246,7 +263,7 @@ icon_state = "basicsecuritybelt" item_state = "basicsecurity" overlay_flags = BELT_OVERLAY_ITEMS - can_hold = list( + contents_allowed = list( /obj/item/crowbar, /obj/item/grenade, /obj/item/reagent_containers/spray/pepper, @@ -260,6 +277,7 @@ /obj/item/melee/telebaton, /obj/item/flame/lighter, /obj/item/device/flashlight, + /obj/item/modular_computer/tablet, /obj/item/modular_computer/pda, /obj/item/device/radio/headset, /obj/item/device/hailer, @@ -280,7 +298,7 @@ icon_state = "gearbelt" item_state = "gear" overlay_flags = BELT_OVERLAY_ITEMS - can_hold = list( + contents_allowed = list( /obj/item/device/flash, /obj/item/melee/telebaton, /obj/item/device/taperecorder, @@ -318,12 +336,22 @@ /obj/item/device/tape ) +/obj/item/storage/belt/general/full/Initialize() + . = ..() + new /obj/item/material/clipboard(src) + new /obj/item/folder(src) + new /obj/item/device/taperecorder(src) + new /obj/item/device/camera(src) + new /obj/item/taperoll/research(src) + new /obj/item/device/tape/random(src) + queue_icon_update() + /obj/item/storage/belt/janitor name = "janibelt" desc = "A belt used to hold most janitorial supplies." icon_state = "janibelt" item_state = "janibelt" - can_hold = list( + contents_allowed = list( /obj/item/grenade/chem_grenade, /obj/item/device/lightreplacer, /obj/item/device/flashlight, @@ -336,8 +364,10 @@ /obj/item/crowbar/prybar, /obj/item/clothing/mask/plunger, /obj/item/clothing/head/beret, - /obj/item/material/knife/folding - ) + /obj/item/material/knife/folding, + /obj/item/modular_computer/tablet, + /obj/item/modular_computer/pda + ) /obj/item/storage/belt/holster/general name = "holster belt" @@ -346,7 +376,7 @@ item_state = "command" storage_slots = 7 overlay_flags = BELT_OVERLAY_ITEMS|BELT_OVERLAY_HOLSTER - can_hold = list( + contents_allowed = list( /obj/item/device/flash, /obj/item/melee/telebaton, /obj/item/device/taperecorder, @@ -382,7 +412,7 @@ /obj/item/clothing/head/beret, /obj/item/material/knife/folding, /obj/item/device/tape - ) + ) /obj/item/storage/belt/holster/forensic name = "forensic holster belt" @@ -391,7 +421,7 @@ item_state = "forensic" storage_slots = 8 overlay_flags = BELT_OVERLAY_HOLSTER - can_hold = list( + contents_allowed = list( /obj/item/reagent_containers/spray/luminol, /obj/item/device/uv_light, /obj/item/reagent_containers/syringe, @@ -413,8 +443,13 @@ /obj/item/device/scanner, /obj/item/clothing/head/beret, /obj/item/material/knife/folding, - /obj/item/modular_computer/tablet - ) + /obj/item/modular_computer/tablet, + /obj/item/modular_computer/pda, + /obj/item/taperoll/police, + /obj/item/clothing/glasses, + /obj/item/reagent_containers/spray/pepper, + /obj/item/device/flash + ) /obj/item/storage/belt/forensic name = "forensic belt" @@ -422,7 +457,7 @@ icon_state = "basicforensicbelt" item_state = "basicforensic" storage_slots = 8 - can_hold = list( + contents_allowed = list( /obj/item/reagent_containers/spray/luminol, /obj/item/device/uv_light, /obj/item/reagent_containers/syringe, @@ -444,8 +479,13 @@ /obj/item/device/scanner, /obj/item/clothing/head/beret, /obj/item/material/knife/folding, - /obj/item/modular_computer/tablet - ) + /obj/item/modular_computer/tablet, + /obj/item/modular_computer/pda, + /obj/item/taperoll/police, + /obj/item/clothing/glasses, + /obj/item/reagent_containers/spray/pepper, + /obj/item/device/flash + ) /obj/item/storage/belt/holster/machete name = "machete belt" @@ -454,7 +494,7 @@ item_state = "machetebelt" storage_slots = 8 overlay_flags = BELT_OVERLAY_HOLSTER - can_hold = list( + contents_allowed = list( /obj/item/device/binoculars, /obj/item/device/camera, /obj/item/stack/flag, @@ -468,7 +508,7 @@ /obj/item/folder, /obj/item/paper, /obj/item/pen, - /obj/item/device/spaceflare, + /obj/item/shuttle_beacon, /obj/item/pinpointer/radio, /obj/item/device/taperecorder, /obj/item/device/tape, @@ -478,8 +518,11 @@ /obj/item/clothing/head/beret, /obj/item/material/knife/folding, /obj/item/storage/firstaid/light, - /obj/item/device/flash - ) + /obj/item/device/flash, + /obj/item/device/drone_designator, + /obj/item/modular_computer/tablet, + /obj/item/modular_computer/pda + ) can_holster = list(/obj/item/material/hatchet/machete) sound_in = 'sound/effects/holster/sheathin.ogg' sound_out = 'sound/effects/holster/sheathout.ogg' @@ -489,9 +532,7 @@ desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away." icon_state = "soulstonebelt" item_state = "soulstonebelt" - can_hold = list( - /obj/item/device/soulstone - ) + contents_allowed = list(/obj/item/device/soulstone) /obj/item/storage/belt/soulstone/full/New() ..() @@ -511,9 +552,7 @@ item_state = "champion" storage_slots = null max_storage_space = ITEM_SIZE_SMALL - can_hold = list( - /obj/item/clothing/mask/luchador - ) + contents_allowed = list(/obj/item/clothing/mask/luchador) /obj/item/storage/belt/holster/security/tactical name = "combat belt" @@ -533,16 +572,6 @@ max_storage_space = ITEM_SIZE_SMALL * 4 slot_flags = SLOT_BELT | SLOT_BACK -/obj/item/storage/belt/waistpack/big - name = "large waist pack" - desc = "A bag designed to be worn on the waist. Definitely makes your butt look big." - icon_state = "fannypack_big_white" - item_state = "fannypack_big_white" - w_class = ITEM_SIZE_LARGE - max_w_class = ITEM_SIZE_NORMAL - max_storage_space = ITEM_SIZE_NORMAL * 4 - - /obj/item/storage/belt/fire_belt name = "firefighting equipment belt" desc = "A belt specially designed for firefighting." @@ -550,12 +579,12 @@ item_state = "gear" storage_slots = 5 overlay_flags = BELT_OVERLAY_ITEMS - can_hold = list( + contents_allowed = list( /obj/item/grenade/chem_grenade/water, /obj/item/crowbar/emergency_forcing_tool, /obj/item/extinguisher/mini, /obj/item/inflatable/door - ) + ) /obj/item/storage/belt/fire_belt/full diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index 109d3ee84cc46..4552132208e2e 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -1,6 +1,7 @@ /obj/item/storage/bible name = "bible" desc = "Apply to head repeatedly." + icon = 'icons/obj/books.dmi' icon_state ="bible" throw_speed = 1 throw_range = 5 @@ -64,27 +65,28 @@ renamed = 1 icon_changed = 1 -/obj/item/storage/bible/attack(mob/living/carbon/human/M, mob/living/carbon/human/user) - if(user == M || !ishuman(user) || !ishuman(M)) - return - if(user.mind && istype(user.mind.assigned_job, /datum/job/chaplain)) +/obj/item/storage/bible/use_before(mob/living/carbon/human/M, mob/living/carbon/human/user) + . = FALSE + if (user == M || !ishuman(user) || !ishuman(M)) + return FALSE + if (user.mind && istype(user.mind.assigned_job, /datum/job/chaplain)) user.visible_message(SPAN_NOTICE("\The [user] places \the [src] on \the [M]'s forehead, reciting a prayer...")) - if(do_after(user, 5 SECONDS, M, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && user.Adjacent(M)) + if (do_after(user, 5 SECONDS, M, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && user.Adjacent(M)) user.visible_message("\The [user] finishes reciting \his prayer, removing \the [src] from \the [M]'s forehead.", "You finish reciting your prayer, removing \the [src] from \the [M]'s forehead.") - if(user.get_cultural_value(TAG_RELIGION) == M.get_cultural_value(TAG_RELIGION)) + if (user.get_cultural_value(TAG_RELIGION) == M.get_cultural_value(TAG_RELIGION)) to_chat(M, SPAN_NOTICE("You feel calm and relaxed, at one with the universe.")) else to_chat(M, "Nothing happened.") - ..() + return TRUE -/obj/item/storage/bible/afterattack(atom/A, mob/user as mob, proximity) - if(!proximity) return +/obj/item/storage/bible/use_after(atom/A, mob/living/user, click_parameters) if(user.mind && istype(user.mind.assigned_job, /datum/job/chaplain)) - if(A.reagents && A.reagents.has_reagent(/datum/reagent/water)) //blesses all the water in the holder - to_chat(user, SPAN_NOTICE("You bless \the [A].")) // I wish it was this easy in nethack + if(A.reagents && A.reagents.has_reagent(/datum/reagent/water)) + to_chat(user, SPAN_NOTICE("You bless \the [A].")) var/water2holy = A.reagents.get_reagent_amount(/datum/reagent/water) A.reagents.del_reagent(/datum/reagent/water) A.reagents.add_reagent(/datum/reagent/water/holywater,water2holy) + return TRUE /obj/item/storage/bible/attackby(obj/item/W as obj, mob/user as mob) if (src.use_sound) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index ab63a4b4ce925..9d4cef4a36566 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -19,6 +19,7 @@ * For syndicate call-ins see uplink_kits.dm */ + /obj/item/storage/box name = "box" desc = "It's just an ordinary box." @@ -29,6 +30,7 @@ var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard allow_slow_dump = TRUE + /obj/item/storage/box/large name = "large box" icon_state = "largebox" @@ -36,16 +38,19 @@ max_w_class = ITEM_SIZE_NORMAL max_storage_space = DEFAULT_LARGEBOX_STORAGE + /obj/item/storage/box/union_cards name = "box of union cards" desc = "A box of spare unsigned union membership cards." startswith = list(/obj/item/card/union = 7) + /obj/item/storage/box/large/union_cards name = "large box of union cards" desc = "A large box of spare unsigned union membership cards." startswith = list(/obj/item/card/union = 14) + // BubbleWrap - A box can be folded up to make card /obj/item/storage/box/attack_self(mob/user as mob) if(..()) return @@ -74,10 +79,12 @@ new src.foldable(get_turf(src)) qdel(src) + /obj/item/storage/box/make_exact_fit() ..() foldable = null //special form fitted boxes should not be foldable. + /obj/item/storage/box/survival name = "crew survival kit" desc = "A box decorated in warning colors that contains a limited supply of survival tools. The panel and white stripe indicate this one contains oxygen." @@ -90,6 +97,7 @@ /obj/item/reagent_containers/food/snacks/proteinbar = 1, /obj/item/device/oxycandle = 1) + /obj/item/storage/box/vox name = "vox survival kit" desc = "A box decorated in warning colors that contains a limited supply of survival tools. The panel and black stripe indicate this one contains nitrogen." @@ -101,6 +109,7 @@ /obj/item/device/flashlight/flare/glowstick = 1, /obj/item/reagent_containers/food/snacks/proteinbar = 1) + /obj/item/storage/box/engineer name = "engineer survival kit" desc = "A box decorated in warning colors that contains a limited supply of survival tools. The panel and orange stripe indicate this one as the engineering variant." @@ -114,12 +123,20 @@ /obj/item/reagent_containers/food/snacks/proteinbar = 1, /obj/item/device/oxycandle = 1) -/obj/item/storage/box/gloves - name = "box of sterile gloves" - desc = "Contains sterile gloves." + +/obj/item/storage/box/latexgloves + name = "box of sterile latex gloves" + desc = "Contains sterile latex gloves." + icon_state = "latex" + startswith = list(/obj/item/clothing/gloves/latex = 14) + + +/obj/item/storage/box/nitrilegloves + name = "box of sterile nitrile gloves" + desc = "Contains sterile nitrile gloves." icon_state = "latex" - startswith = list(/obj/item/clothing/gloves/latex = 6, - /obj/item/clothing/gloves/latex/nitrile = 2) + startswith = list(/obj/item/clothing/gloves/latex/nitrile = 14) + /obj/item/storage/box/masks name = "box of sterile masks" @@ -134,6 +151,7 @@ icon_state = "syringe" startswith = list(/obj/item/reagent_containers/syringe = 7) + /obj/item/storage/box/syringegun name = "box of syringe gun cartridges" desc = "A box full of compressed gas cartridges." @@ -146,105 +164,165 @@ icon_state = "beaker" startswith = list(/obj/item/reagent_containers/glass/beaker = 7) + /obj/item/storage/box/beakers/insulated name = "box of insulated beakers" startswith = list(/obj/item/reagent_containers/glass/beaker/insulated = 7) + /obj/item/storage/box/ammo name = "ammo box" + icon = 'icons/obj/weapons/ammo_boxes.dmi' icon_state = "ammo" desc = "A sturdy metal box with several warning symbols on the front.
    WARNING: Live ammunition. Misuse may result in serious injury or death." use_sound = 'sound/effects/closet_open.ogg' + /obj/item/storage/box/ammo/blanks name = "box of blank shells" desc = "It has a picture of a gun and several warning symbols on the front." startswith = list(/obj/item/ammo_casing/shotgun/blank = 8) + /obj/item/storage/box/ammo/practiceshells name = "box of practice shells" startswith = list(/obj/item/ammo_casing/shotgun/practice = 8) + /obj/item/storage/box/ammo/beanbags name = "box of beanbag shells" - startswith = list(/obj/item/ammo_magazine/shotholder/beanbag = 2) + startswith = list(/obj/item/ammo_magazine/shotholder/beanbag = 4) + /obj/item/storage/box/ammo/shotgunammo name = "box of shotgun slugs" - startswith = list(/obj/item/ammo_magazine/shotholder = 2) + startswith = list(/obj/item/ammo_magazine/shotholder = 4) + /obj/item/storage/box/ammo/shotgunshells name = "box of shotgun shells" - startswith = list(/obj/item/ammo_magazine/shotholder/shell = 2) + startswith = list(/obj/item/ammo_magazine/shotholder/shell = 4) + /obj/item/storage/box/ammo/flechetteshells name = "box of flechette shells" - startswith = list(/obj/item/ammo_magazine/shotholder/flechette = 2) + startswith = list(/obj/item/ammo_magazine/shotholder/flechette = 4) + /obj/item/storage/box/ammo/flashshells name = "box of illumination shells" - startswith = list(/obj/item/ammo_magazine/shotholder/flash = 2) + startswith = list(/obj/item/ammo_magazine/shotholder/flash = 4) + /obj/item/storage/box/ammo/stunshells name = "box of stun shells" - startswith = list(/obj/item/ammo_magazine/shotholder/stun = 2) + startswith = list(/obj/item/ammo_magazine/shotholder/stun = 4) + /obj/item/storage/box/ammo/sniperammo name = "box of sniper shells" startswith = list(/obj/item/ammo_casing/shell = 7) + /obj/item/storage/box/ammo/sniperammo/apds name = "box of sniper APDS shells" startswith = list(/obj/item/ammo_casing/shell/apds = 3) + +/obj/item/storage/box/ammo/pistol + name = "box of pistol magazines - lethal" + startswith = list(/obj/item/ammo_magazine/pistol = 7) + + +/obj/item/storage/box/ammo/pistol/rubber + name = "box of pistol magazines - rubber" + startswith = list(/obj/item/ammo_magazine/pistol/rubber = 7) + + +/obj/item/storage/box/ammo/doublestack + name = "box of doublestack magazines - lethal" + startswith = list(/obj/item/ammo_magazine/pistol/double = 6) + + +/obj/item/storage/box/ammo/doublestack/rubber + name = "box of doublestack magazines - rubber" + startswith = list(/obj/item/ammo_magazine/pistol/double/rubber = 6) + + +/obj/item/storage/box/ammo/smg + name = "box of SMG magazines - lethal" + startswith = list(/obj/item/ammo_magazine/smg_top = 7) + + +/obj/item/storage/box/ammo/smg/rubber + name = "box of SMG magazines - rubber" + startswith = list(/obj/item/ammo_magazine/smg_top/rubber = 7) + +/obj/item/storage/box/ammo/heavy_bullpup + name = "box of heavy bullpup magazines" + startswith = list(/obj/item/ammo_magazine/mil_rifle = 6) + +/obj/item/storage/box/ammo/light_bullpup + name = "box of light bullpup magazines" + startswith = list(/obj/item/ammo_magazine/mil_rifle/light = 6) + + /obj/item/storage/box/flashbangs name = "box of flashbangs" desc = "A box containing 7 antipersonnel flashbang grenades.
    WARNING: These devices are extremely dangerous and can cause blindness or deafness from repeated use." icon_state = "flashbang" startswith = list(/obj/item/grenade/flashbang = 7) + /obj/item/storage/box/teargas name = "box of pepperspray grenades" desc = "A box containing 7 tear gas grenades. A gas mask is printed on the label.
    WARNING: Exposure carries risk of serious injury or death. Keep away from persons with lung conditions." icon_state = "flashbang" startswith = list(/obj/item/grenade/chem_grenade/teargas = 7) + /obj/item/storage/box/emps name = "box of emp grenades" desc = "A box containing 5 military grade EMP grenades.
    WARNING: Do not use near unshielded electronics or biomechanical augmentations, death or permanent paralysis may occur." icon_state = "flashbang" startswith = list(/obj/item/grenade/empgrenade = 5) + /obj/item/storage/box/frags name = "box of frag grenades" desc = "A box containing 5 military grade fragmentation grenades.
    WARNING: Live explosives. Misuse may result in serious injury or death." icon_state = "flashbang" startswith = list(/obj/item/grenade/frag = 5) + /obj/item/storage/box/fragshells name = "box of frag shells" desc = "A box containing 5 military grade fragmentation shells.
    WARNING: Live explosive munitions. Misuse may result in serious injury or death." icon_state = "flashbang" startswith = list(/obj/item/grenade/frag/shell = 5) + /obj/item/storage/box/smokes name = "box of smoke bombs" desc = "A box containing 5 smoke bombs." icon_state = "flashbang" startswith = list(/obj/item/grenade/smokebomb = 5) + /obj/item/storage/box/anti_photons name = "box of anti-photon grenades" desc = "A box containing 5 experimental photon disruption grenades." icon_state = "flashbang" startswith = list(/obj/item/grenade/anti_photon = 5) + /obj/item/storage/box/supermatters name = "box of supermatter grenades" desc = "A box containing 5 highly experimental supermatter grenades." icon_state = "radbox" startswith = list(/obj/item/grenade/supermatter = 5) + /obj/item/storage/box/trackimp name = "boxed tracking implant kit" desc = "Box full of scum-bag tracking utensils." @@ -254,6 +332,7 @@ /obj/item/implantpad = 1, /obj/item/locator = 1) + /obj/item/storage/box/chemimp name = "boxed chemical implant kit" desc = "Box of stuff used to implant chemicals." @@ -262,12 +341,14 @@ /obj/item/implanter = 1, /obj/item/implantpad = 1) + /obj/item/storage/box/rxglasses name = "box of prescription glasses" desc = "This box contains nerd glasses." icon_state = "glasses" startswith = list(/obj/item/clothing/glasses/prescription = 7) + /obj/item/storage/box/cdeathalarm_kit name = "death alarm kit" desc = "Box of stuff used to implant death alarms." @@ -276,107 +357,100 @@ startswith = list(/obj/item/implanter = 1, /obj/item/implantcase/death_alarm = 6) + /obj/item/storage/box/condimentbottles name = "box of condiment bottles" desc = "It has a large ketchup smear on it." startswith = list(/obj/item/reagent_containers/food/condiment = 6) + /obj/item/storage/box/cups name = "box of paper cups" desc = "It has pictures of paper cups on the front." startswith = list(/obj/item/reagent_containers/food/drinks/sillycup = 7) + //cubed animals /obj/item/storage/box/monkeycubes name = "monkey cube box" desc = "Drymate brand monkey cubes. Just add water!" - icon = 'icons/obj/food.dmi' + icon = 'icons/obj/food/food.dmi' icon_state = "monkeycubebox" - can_hold = list(/obj/item/reagent_containers/food/snacks/monkeycube) + contents_allowed = list(/obj/item/reagent_containers/food/snacks/monkeycube) startswith = list(/obj/item/reagent_containers/food/snacks/monkeycube/wrapped = 5) + /obj/item/storage/box/monkeycubes/farwacubes name = "farwa cube box" desc = "Drymate brand farwa cubes, shipped from Nyx. Just add water!" startswith = list(/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/farwacube = 5) + /obj/item/storage/box/monkeycubes/stokcubes name = "stok cube box" desc = "Drymate brand stok cubes, shipped from Moghes. Just add water!" startswith = list(/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/stokcube = 5) + /obj/item/storage/box/monkeycubes/neaeracubes name = "neaera cube box" desc = "Drymate brand neaera cubes, shipped from Jargon 4. Just add water!" startswith = list(/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube = 5) + /obj/item/storage/box/monkeycubes/spidercubes name = "spiderling cube box" desc = "Drymate brand Instant spiders. WHY WOULD YOU ORDER THIS!?" startswith = list(/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/spidercube = 5) + /obj/item/storage/box/ids name = "box of spare IDs" desc = "Has so many empty IDs." icon_state = "id" startswith = list(/obj/item/card/id = 7) + /obj/item/storage/box/large/ids name = "box of spare IDs" desc = "Has so, so many empty IDs." icon_state = "id_large" startswith = list(/obj/item/card/id = 14) + /obj/item/storage/box/handcuffs name = "box of spare handcuffs" desc = "A box full of handcuffs." icon_state = "handcuff" startswith = list(/obj/item/handcuffs = 7) + /obj/item/storage/box/mousetraps name = "box of Pest-B-Gon mousetraps" desc = "WARNING: Keep out of reach of children." icon_state = "mousetraps" startswith = list(/obj/item/device/assembly/mousetrap = 6) + /obj/item/storage/box/mousetraps/empty startswith = null + /obj/item/storage/box/pillbottles name = "box of pill bottles" desc = "It has pictures of pill bottles on its front." startswith = list(/obj/item/storage/pill_bottle = 7) + /obj/item/storage/box/snappops name = "snap pop box" desc = "Eight wrappers of fun! Ages 8 and up. Not suitable for children." icon = 'icons/obj/toy.dmi' icon_state = "spbox" - can_hold = list(/obj/item/toy/snappop) + contents_allowed = list(/obj/item/toy/snappop) startswith = list(/obj/item/toy/snappop = 8) -/obj/item/storage/box/matches - name = "matchbox" - desc = "A small box of 'Space-Proof' premium matches." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "matchbox" - item_state = "zippo" - w_class = ITEM_SIZE_TINY - slot_flags = SLOT_BELT - can_hold = list(/obj/item/flame/match) - startswith = list(/obj/item/flame/match = 10) - -/obj/item/storage/box/matches/attackby(obj/item/flame/match/W as obj, mob/user as mob) - if(istype(W) && !W.lit && !W.burnt) - W.lit = 1 - W.damtype = INJURY_TYPE_BURN - W.icon_state = "match_lit" - START_PROCESSING(SSobj, W) - playsound(src.loc, 'sound/items/match.ogg', 60, 1, -4) - user.visible_message(SPAN_NOTICE("[user] strikes the match on the matchbox.")) - W.update_icon() - return /obj/item/storage/box/autoinjectors name = "box of injectors" @@ -387,34 +461,40 @@ /obj/item/storage/box/lights name = "box of replacement bulbs" - icon = 'icons/obj/storage.dmi' + icon = 'icons/obj/boxes.dmi' icon_state = "light" desc = "This box is shaped on the inside so that only light tubes and bulbs fit." item_state = "syringe_kit" - use_to_pickup = 1 // for picking up broken bulbs, not that most people will try + allow_quick_gather = TRUE + /obj/item/storage/box/lights/Initialize() . = ..() make_exact_fit() + /obj/item/storage/box/lights/bulbs startswith = list(/obj/item/light/bulb = 21) + /obj/item/storage/box/lights/bulbs/empty startswith = null + /obj/item/storage/box/lights/tubes name = "box of replacement tubes" icon_state = "lighttube" startswith = list(/obj/item/light/tube = 17, /obj/item/light/tube/large = 4) + /obj/item/storage/box/lights/tubes/random name = "box of replacement tubes -- party pack" icon_state = "lighttube" startswith = list(/obj/item/light/tube/party = 17, /obj/item/light/tube/large/party = 4) + /obj/item/storage/box/lights/tubes/empty startswith = null @@ -425,9 +505,11 @@ /obj/item/light/tube/large = 4, /obj/item/light/bulb = 5) + /obj/item/storage/box/lights/mixed/empty startswith = null + /obj/item/storage/box/glowsticks name = "box of mixed glowsticks" icon_state = "box" @@ -435,6 +517,7 @@ /obj/item/device/flashlight/flare/glowstick/blue = 1, /obj/item/device/flashlight/flare/glowstick/orange = 1, /obj/item/device/flashlight/flare/glowstick/yellow = 1, /obj/item/device/flashlight/flare/glowstick/random = 1) + /obj/item/storage/box/greenglowsticks name = "box of green glowsticks" icon_state = "box" @@ -447,10 +530,11 @@ icon_state = "checkers" max_storage_space = 24 foldable = null - can_hold = list(/obj/item/reagent_containers/food/snacks/checker) + contents_allowed = list(/obj/item/reagent_containers/food/snacks/checker) startswith = list(/obj/item/reagent_containers/food/snacks/checker = 12, /obj/item/reagent_containers/food/snacks/checker/red = 12) + /obj/item/storage/box/checkers/chess name = "black chess box" desc = "This box holds all the pieces needed for the black side of the chess board." @@ -462,6 +546,7 @@ /obj/item/reagent_containers/food/snacks/checker/queen = 1, /obj/item/reagent_containers/food/snacks/checker/king = 1) + /obj/item/storage/box/checkers/chess/red name = "red chess box" desc = "This box holds all the pieces needed for the red side of the chess board." @@ -479,6 +564,15 @@ desc = "A box full of headsets." startswith = list(/obj/item/device/radio/headset = 7) +/obj/item/storage/box/large/crutches + name = "crutches box" + desc = "A box designed to hold a pair of crutches." + startswith = list(/obj/item/cane/crutch = 2) + +/obj/item/storage/box/large/crutches/Initialize() + . = ..() + make_exact_fit() + //Spare Armbands /obj/item/storage/box/armband/engine @@ -486,11 +580,13 @@ desc = "A box full of engineering armbands. For use in emergencies when provisional engineering peronnel are needed." startswith = list(/obj/item/clothing/accessory/armband/engine = 5) + /obj/item/storage/box/armband/med name = "box of spare medical armbands" desc = "A box full of medical armbands. For use in emergencies when provisional medical personnel are needed." startswith = list(/obj/item/clothing/accessory/armband/med = 5) + /obj/item/storage/box/imprinting name = "box of education implants" desc = "A box full of neural implants for on-job training." @@ -500,8 +596,10 @@ /obj/item/implantcase/imprinting = 3 ) + /obj/item/storage/box/detergent name = "detergent pods bag" + icon = 'icons/obj/chemical_storage.dmi' desc = "A bag full of juicy, yummy detergent pods. This bag has been labeled: Tod Pods, a Waffle Co. product." icon_state = "detergent" startswith = list(/obj/item/reagent_containers/pill/detergent = 10) diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm index 3685562acc44e..fe56e4fed4c50 100644 --- a/code/game/objects/items/weapons/storage/briefcase.dm +++ b/code/game/objects/items/weapons/storage/briefcase.dm @@ -1,6 +1,7 @@ /obj/item/storage/briefcase name = "briefcase" desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional." + icon = 'icons/obj/briefcases.dmi' icon_state = "briefcase" item_state = "briefcase" obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -9,5 +10,5 @@ throw_range = 4 w_class = ITEM_SIZE_HUGE max_w_class = ITEM_SIZE_NORMAL - max_storage_space = DEFAULT_BACKPACK_STORAGE + max_storage_space = ITEM_SIZE_NORMAL * 7 allow_slow_dump = TRUE diff --git a/code/game/objects/items/weapons/storage/fancy/_fancy.dm b/code/game/objects/items/weapons/storage/fancy/_fancy.dm index 9ebf076eb10fa..8b503a861523a 100644 --- a/code/game/objects/items/weapons/storage/fancy/_fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy/_fancy.dm @@ -1,11 +1,13 @@ /obj/item/storage/fancy item_state = "syringe_kit" + var/sealed = TRUE - /// The item type this container cares about for behaviors like icon generation. - var/obj/item/key_type + /// The item type(s) this container cares about for behaviors like icon generation. + var/list/key_type = list() - /// A cached count of key_type currently in this container. - var/key_type_count + /// A cached count of key_type(s) currently in this container. + var/list/key_type_count = list() + var/total_keys = 0 /// A cached count of things currently in this container that are not of key_type. var/other_type_count @@ -27,36 +29,68 @@ /obj/item/storage/fancy/on_update_icon() - icon_state = "[initial(icon_state)][opened ? key_type_count : ""]" + icon_state = "[initial(icon_state)][opened ? total_keys : ""]" /obj/item/storage/fancy/examine(mob/user, distance) . = ..() if (distance > 2) return + if (sealed) + . += SPAN_NOTICE("It is sealed and brand new.") + return if (!opened) - to_chat(user, "It is sealed.") + . += SPAN_NOTICE("It is closed.") + return + if (!length(contents)) + . += SPAN_NOTICE("[src] is empty.") return + var/display_message - switch (key_type_count) - if (0) - display_message = "are no [initial(key_type.name)]\s" - if (1) - display_message = "is 1 [initial(key_type.name)]" - else - display_message = "are [key_type_count] [initial(key_type.name)]\s" - to_chat(user, "There [display_message] left in \the [src].") + for (var/obj/item/key as anything in key_type) + switch (key_type_count[key]) + if (0) + display_message = null + if (1) + display_message = "is 1 [initial(key.name)]" + else + display_message = "are [key_type_count[key]] [initial(key.pluralname) ? initial(key.pluralname) : initial(key.name)]\s" + if (display_message) + to_chat(user, "There [display_message] left in \the [src].") + switch (other_type_count) if (0) display_message = null if (1) - display_message = "Something[key_type_count ? " else" : ""] is" + display_message = "Something[total_keys ? " else" : ""] is" else - display_message = "Some[key_type_count ? " other" : ""] things are" + display_message = "Some[total_keys ? " other" : ""] things are" if (display_message) - to_chat(user, "[display_message] inside[key_type_count ? " as well" : ""].") + to_chat(user, "[display_message] inside[total_keys ? " as well" : ""].") + +/obj/item/storage/fancy/attack_self(mob/user) + . = ..() + opened = !opened + playsound(loc, open_sound, 50, 0, -5) + if (sealed) + to_chat(user, "You unseal and open \the [src].") + sealed = FALSE + else + to_chat(user, "You [opened? "open" : "close"] \the [src]") + queue_icon_update() + +/obj/item/storage/fancy/open(mob/user as mob) + if(sealed) + to_chat(user, "You need to unseal \the [src] first!") + return + ..() /obj/item/storage/fancy/proc/UpdateTypeCounts() - key_type_count = count_by_type(contents, key_type) - other_type_count = length(contents) - key_type_count + total_keys = 0 + for (var/key as anything in key_type) + var/key_amt = count_by_type(contents, key) + key_type_count[key] = key_amt + total_keys += key_amt + + other_type_count = length(contents) - total_keys diff --git a/code/game/objects/items/weapons/storage/fancy/crackers.dm b/code/game/objects/items/weapons/storage/fancy/crackers.dm index 63eeaa757edbf..f74a1227cda89 100644 --- a/code/game/objects/items/weapons/storage/fancy/crackers.dm +++ b/code/game/objects/items/weapons/storage/fancy/crackers.dm @@ -1,12 +1,13 @@ /obj/item/storage/fancy/crackers name = "\improper Getmore Crackers" - icon = 'icons/obj/food.dmi' + icon = 'icons/obj/food/food.dmi' icon_state = "crackerbag" + open_sound = 'sound/effects/crinkle.ogg' storage_slots = 6 max_w_class = ITEM_SIZE_TINY w_class = ITEM_SIZE_SMALL - key_type = /obj/item/reagent_containers/food/snacks/cracker - can_hold = list( + key_type = list(/obj/item/reagent_containers/food/snacks/cracker) + contents_allowed = list( /obj/item/reagent_containers/food/snacks/cracker ) startswith = list( diff --git a/code/game/objects/items/weapons/storage/fancy/crayons.dm b/code/game/objects/items/weapons/storage/fancy/crayons.dm index afd4017995eee..cf7d0d20b307a 100644 --- a/code/game/objects/items/weapons/storage/fancy/crayons.dm +++ b/code/game/objects/items/weapons/storage/fancy/crayons.dm @@ -3,10 +3,11 @@ desc = "A box of crayons for all your rune drawing needs." icon = 'icons/obj/crayons.dmi' icon_state = "crayonbox" + open_sound = 'sound/effects/storage/box.ogg' w_class = ITEM_SIZE_SMALL max_w_class = ITEM_SIZE_TINY max_storage_space = 6 - key_type = /obj/item/pen/crayon + key_type = list(/obj/item/pen/crayon) startswith = list( /obj/item/pen/crayon/red, /obj/item/pen/crayon/orange, @@ -18,7 +19,8 @@ /obj/item/storage/fancy/crayons/on_update_icon() - overlays.Cut() - overlays += image('icons/obj/crayons.dmi', "crayonbox") + icon_state = "[initial(icon_state)][opened ? "open" : ""]" + ClearOverlays() + AddOverlays(image('icons/obj/crayons.dmi', icon_state)) for (var/obj/item/pen/crayon/crayon in contents) - overlays += image('icons/obj/crayons.dmi', crayon.colourName) + AddOverlays(image('icons/obj/crayons.dmi', crayon.colourName)) diff --git a/code/game/objects/items/weapons/storage/fancy/egg_box.dm b/code/game/objects/items/weapons/storage/fancy/egg_box.dm index ae5ce20cb8523..98bba63e50cea 100644 --- a/code/game/objects/items/weapons/storage/fancy/egg_box.dm +++ b/code/game/objects/items/weapons/storage/fancy/egg_box.dm @@ -1,12 +1,13 @@ /obj/item/storage/fancy/egg_box - icon = 'icons/obj/food.dmi' - icon_state = "eggbox" name = "egg box" + icon = 'icons/obj/food/food.dmi' + icon_state = "eggbox" + open_sound = 'sound/effects/storage/smallbox.ogg' storage_slots = 12 max_w_class = ITEM_SIZE_SMALL w_class = ITEM_SIZE_NORMAL - key_type = /obj/item/reagent_containers/food/snacks/egg - can_hold = list( + key_type = list(/obj/item/reagent_containers/food/snacks/egg) + contents_allowed = list( /obj/item/reagent_containers/food/snacks/egg, /obj/item/reagent_containers/food/snacks/boiledegg ) diff --git a/code/game/objects/items/weapons/storage/fancy/matchbox.dm b/code/game/objects/items/weapons/storage/fancy/matchbox.dm new file mode 100644 index 0000000000000..aab1c87f7fd36 --- /dev/null +++ b/code/game/objects/items/weapons/storage/fancy/matchbox.dm @@ -0,0 +1,59 @@ +/obj/item/storage/fancy/matches/matchbox + name = "matchbox" + desc = "A small box of 'Space-Proof' premium matches." + icon = 'icons/obj/cigarettes.dmi' + icon_state = "matchbox" + open_sound = 'sound/effects/storage/box.ogg' + max_storage_space = 10 + w_class = ITEM_SIZE_SMALL + slot_flags = SLOT_BELT + contents_allowed = list(/obj/item/flame/match) + key_type = list(/obj/item/flame/match) + startswith = list(/obj/item/flame/match = 10) + var/sprite_key_type_count = 3 + +/obj/item/storage/fancy/matches/matchbook + name = "matchbook" + desc = "A tiny packet of 'Space-Proof' premium matches." + icon = 'icons/obj/cigarettes.dmi' + icon_state = "matchbook" + open_sound = 'sound/effects/pageturn2.ogg' + max_storage_space = 3 + w_class = ITEM_SIZE_TINY + slot_flags = SLOT_EARS + contents_allowed = list(/obj/item/flame/match) + key_type = list(/obj/item/flame/match) + startswith = list(/obj/item/flame/match = 3) + + +/obj/item/storage/fancy/matches/use_tool(obj/item/W, mob/living/user, list/click_params) + if(!opened && istype(W, /obj/item/flame/match)) + var/obj/item/flame/match/match_to_light = W + if(!match_to_light.lit && !match_to_light.burnt) + match_to_light.lit = TRUE + match_to_light.damtype = INJURY_TYPE_BURN + match_to_light.icon_state = "match_lit" + START_PROCESSING(SSobj, match_to_light) + playsound(loc, 'sound/items/match.ogg', 60, 1, -4) + user.visible_message(SPAN_NOTICE("[user] strikes the match on \the [src].")) + match_to_light.update_icon() + return TRUE + + return ..() + +///Exclusive to larger matchboxes; as cigarette boxes and matchbooks have one sprite per removed item while these do not. + +/obj/item/storage/fancy/matches/matchbox/UpdateTypeCounts() + . = ..() + switch(key_type_count) + if(0) + sprite_key_type_count = 0 + if(1 to 3) + sprite_key_type_count = 1 + if(4 to 7) + sprite_key_type_count = 2 + if(8 to 10) + sprite_key_type_count = 3 + +/obj/item/storage/fancy/matches/matchbox/on_update_icon() + icon_state = "[initial(icon_state)][opened ? sprite_key_type_count : ""]" diff --git a/code/game/objects/items/weapons/storage/fancy/pencilcase.dm b/code/game/objects/items/weapons/storage/fancy/pencilcase.dm index 5fb604d95de7c..094eba76e1d73 100644 --- a/code/game/objects/items/weapons/storage/fancy/pencilcase.dm +++ b/code/game/objects/items/weapons/storage/fancy/pencilcase.dm @@ -1,12 +1,13 @@ /obj/item/storage/fancy/pencilcase name = "pencil case" desc = "A pencil case for all those schoolboys to carry." - icon = 'icons/obj/storage.dmi' + icon = 'icons/obj/pencil_case.dmi' icon_state = "pencil_case" + open_sound = 'sound/effects/storage/unzip.ogg' w_class = ITEM_SIZE_SMALL max_w_class = ITEM_SIZE_TINY max_storage_space = 6 * ITEM_SIZE_TINY - key_type = /obj/item/pen + key_type = list(/obj/item/pen) startswith = list( /obj/item/pen, /obj/item/pen/blue, diff --git a/code/game/objects/items/weapons/storage/fancy/smokable/_smokable.dm b/code/game/objects/items/weapons/storage/fancy/smokable/_smokable.dm index 7916faef6003a..c23f89213d8ab 100644 --- a/code/game/objects/items/weapons/storage/fancy/smokable/_smokable.dm +++ b/code/game/objects/items/weapons/storage/fancy/smokable/_smokable.dm @@ -3,13 +3,13 @@ icon = 'icons/obj/cigarettes.dmi' icon_state = "cigpacket" item_state = "cigpacket" + open_sound = 'sound/effects/storage/smallbox.ogg' w_class = ITEM_SIZE_SMALL max_w_class = ITEM_SIZE_TINY max_storage_space = 6 throwforce = 2 slot_flags = SLOT_BELT - item_flags = ITEM_FLAG_TRY_ATTACK - key_type = /obj/item/clothing/mask/smokable/cigarette + key_type = list(/obj/item/clothing/mask/smokable/cigarette) atom_flags = ATOM_FLAG_NO_REACT | ATOM_FLAG_OPEN_CONTAINER /// A map? of reagents to add to this container on initialization. @@ -38,28 +38,30 @@ UpdateReagents() -/obj/item/storage/fancy/smokable/attack(mob/living/carbon/target, mob/living/carbon/user) - if (user != target || !istype(user) || user.a_intent != I_HELP) - return ..() - . = TRUE +/obj/item/storage/fancy/smokable/use_after(mob/living/carbon/target, mob/living/carbon/user) + if (user != target || !istype(user)) + return FALSE + if (!opened) - opened = TRUE - update_icon() + opened = !opened + playsound(src.loc, src.open_sound, 50, 0, -5) + queue_icon_update() var/obj/item/clothing/mask/smokable/smokable = locate() in contents if (!smokable) to_chat(user, SPAN_WARNING("\The [src] has nothing smokable left inside.")) - return + return TRUE if (user.wear_mask) to_chat(user, SPAN_WARNING("Your [user.wear_mask.name] is in the way.")) - return + return TRUE if (!smokable.mob_can_equip(user, slot_wear_mask)) - return + return TRUE remove_from_storage(smokable, user.loc) update_icon() if (!user.equip_to_slot_if_possible(smokable, slot_wear_mask)) to_chat(user, SPAN_WARNING("\The [smokable] falls from you. Oh no.")) - return + return TRUE to_chat(user, SPAN_NOTICE("You take \a [smokable] from \the [src].")) + return TRUE /obj/item/storage/fancy/smokable/proc/UpdateReagents() diff --git a/code/game/objects/items/weapons/storage/fancy/smokable/basic.dm b/code/game/objects/items/weapons/storage/fancy/smokable/basic.dm index 73a6d23625b38..55d1457b200c8 100644 --- a/code/game/objects/items/weapons/storage/fancy/smokable/basic.dm +++ b/code/game/objects/items/weapons/storage/fancy/smokable/basic.dm @@ -1,9 +1,32 @@ /obj/item/storage/fancy/smokable/case name = "cigarette case" - desc = "A fancy little case for holding cigarettes in it." + desc = "A fancy little case for holding cigarettes. It has a spring-loaded click-open mechanism." + icon = 'icons/obj/cigarettes.dmi' icon_state = "cigscase" + item_state = "syringe_kit" + open_sound = 'sound/effects/storage/pillbottle.ogg' max_storage_space = null + sealed = FALSE storage_slots = 6 + key_type = list(/obj/item/clothing/mask/smokable/cigarette, /obj/item/material/coin) + +/obj/item/storage/fancy/smokable/case/on_update_icon() + ClearOverlays() + icon_state = "[initial(icon_state)][opened ? "0" : ""]" + if (!opened) + return + for (var/i = 1 to length(contents)) + if (istype(contents[i], /obj/item/clothing/mask/smokable/cigarette)) + AddOverlays(image(icon, "cig[i]")) + else if (istype(contents[i], /obj/item/material/coin)) + var/obj/item/material/coin/C = contents[i] + var/image/I = image(icon, "colorcoin[i]") + if (C.applies_material_colour) + var/material/M = C.material + I.color = M.icon_colour + else + I.color = COLOR_GOLD + AddOverlays(I) /obj/item/storage/fancy/smokable/transstellar @@ -57,7 +80,6 @@ desc = "With a sharp and natural organic menthol flavor, these Temperamentos are a favorite of NDV crews. Hardly anyone knows they make 'em in non-menthol!" icon_state = "TMpacket" item_state = "Dpacket" - key_type = /obj/item/clothing/mask/smokable/cigarette/menthol startswith = list( /obj/item/clothing/mask/smokable/cigarette/menthol = 6 ) @@ -89,7 +111,6 @@ icon_state = "CRpacket" item_state = "Dpacket" max_storage_space = 5 - key_type = /obj/item/clothing/mask/smokable/cigarette/trident startswith = list( /obj/item/clothing/mask/smokable/cigarette/trident = 5 ) @@ -101,7 +122,6 @@ icon_state = "CRFpacket" item_state = "Dpacket" max_storage_space = 5 - key_type = /obj/item/clothing/mask/smokable/cigarette/trident startswith = list( /obj/item/clothing/mask/smokable/cigarette/trident/watermelon, /obj/item/clothing/mask/smokable/cigarette/trident/orange, @@ -117,7 +137,6 @@ icon_state = "CRMpacket" item_state = "Dpacket" max_storage_space = 5 - key_type = /obj/item/clothing/mask/smokable/cigarette/trident startswith = list( /obj/item/clothing/mask/smokable/cigarette/trident/mint = 5 ) @@ -125,13 +144,13 @@ /obj/item/storage/fancy/smokable/cigar name = "cigar case" - desc = "A case for holding your cigars when you are not smoking them." + desc = "A case for holding your cigars, in the short interstice before you smoke them." icon_state = "cigarcase" item_state = "cigpacket" max_storage_space = null storage_slots = 7 slot_flags = SLOT_BELT - key_type = /obj/item/clothing/mask/smokable/cigarette/cigar + key_type = list(/obj/item/clothing/mask/smokable/cigarette/cigar) startswith = list( /obj/item/clothing/mask/smokable/cigarette/cigar = 6 ) diff --git a/code/game/objects/items/weapons/storage/fancy/vials.dm b/code/game/objects/items/weapons/storage/fancy/vials.dm index 53e8ba5a2a8be..eae7e3a2481a8 100644 --- a/code/game/objects/items/weapons/storage/fancy/vials.dm +++ b/code/game/objects/items/weapons/storage/fancy/vials.dm @@ -2,12 +2,20 @@ icon = 'icons/obj/vialbox.dmi' icon_state = "vialbox" name = "vial storage box" + open_sound = 'sound/effects/storage/pillbottle.ogg' w_class = ITEM_SIZE_NORMAL max_w_class = ITEM_SIZE_TINY storage_slots = 12 - key_type = /obj/item/reagent_containers/glass/beaker/vial + key_type = list(/obj/item/reagent_containers/glass/beaker/vial) startswith = list(/obj/item/reagent_containers/glass/beaker/vial = 12) +/obj/item/storage/fancy/vials/Initialize() + . = ..() + icon_state = "[initial(icon_state)][floor(total_keys / 2)]" + /obj/item/storage/fancy/vials/on_update_icon() - icon_state = "[initial(icon_state)][floor(key_type_count / 2)]" + ClearOverlays() + if (!opened) + AddOverlays(image('icons/obj/vialbox.dmi', "cover")) + icon_state = "[initial(icon_state)][floor(total_keys / 2)]" diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 0c232e88b89e9..071f4c5fb3cd3 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -158,7 +158,7 @@ /obj/item/reagent_containers/hypospray/autoinjector/pouch_auto/dexalin, /obj/item/stack/medical/bruise_pack ) - can_hold = list( + contents_allowed = list( /obj/item/clothing/gloves/latex, /obj/item/reagent_containers/hypospray/autoinjector, /obj/item/stack/medical/bruise_pack @@ -173,7 +173,8 @@ storage_slots = 14 max_w_class = ITEM_SIZE_NORMAL max_storage_space = null - can_hold = list( + w_class = ITEM_SIZE_LARGE + contents_allowed = list( /obj/item/bonesetter, /obj/item/cautery, /obj/item/circular_saw, @@ -192,7 +193,7 @@ /obj/item/circular_saw, /obj/item/hemostat, /obj/item/retractor, - /obj/item/scalpel, + /obj/item/scalpel/basic, /obj/item/surgicaldrill, /obj/item/bonegel, /obj/item/FixOVein, @@ -210,11 +211,11 @@ max_w_class = ITEM_SIZE_NORMAL w_class = ITEM_SIZE_LARGE max_storage_space = DEFAULT_LARGEBOX_STORAGE - use_to_pickup = TRUE + allow_quick_gather = TRUE temperature = -16 CELSIUS matter = list(MATERIAL_PLASTIC = 350) origin_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2) - can_hold = list( + contents_allowed = list( /obj/item/organ, /obj/item/reagent_containers ) diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index b38831d6433c0..1210c40c87bcc 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -91,6 +91,7 @@ max_w_class = slot_size ..() -/obj/item/storage/internal/pouch/New(newloc, storage_space) +/obj/item/storage/internal/pouch/New(newloc, storage_space, max_w_class) max_storage_space = storage_space + src.max_w_class = max_w_class || src.max_w_class ..() diff --git a/code/game/objects/items/weapons/storage/laundry_basket.dm b/code/game/objects/items/weapons/storage/laundry_basket.dm index 53d7a35783229..3faa256e6beec 100644 --- a/code/game/objects/items/weapons/storage/laundry_basket.dm +++ b/code/game/objects/items/weapons/storage/laundry_basket.dm @@ -5,7 +5,7 @@ // So this cannot be abused for other uses, we make it two-handed and inable to have its storage looked into. /obj/item/storage/laundry_basket name = "laundry basket" - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/janitor_tools.dmi' icon_state = "laundry-empty" item_state = "laundry" desc = "The peak of thousands of years of laundry evolution." @@ -14,10 +14,8 @@ max_w_class = ITEM_SIZE_HUGE max_storage_space = DEFAULT_BACKPACK_STORAGE //20 for clothes + a bit of additional space for non-clothing items that were worn on body storage_slots = 14 - use_to_pickup = 1 - allow_quick_empty = 1 - allow_quick_gather = 1 - collection_mode = 1 + allow_quick_empty = TRUE + allow_quick_gather = TRUE var/linked @@ -79,7 +77,8 @@ icon = 'icons/obj/weapons/other.dmi' icon_state = "offhand" name = "second hand" - use_to_pickup = 0 + allow_quick_gather = FALSE + quick_gather_single = TRUE /obj/item/storage/laundry_basket/offhand/dropped(mob/user as mob) ..() diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index 5b0b908765df8..fce04a5eaee55 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -1,6 +1,7 @@ /obj/item/storage/lockbox name = "lockbox" desc = "A locked box." + icon = 'icons/obj/briefcases.dmi' icon_state = "lockbox+l" item_state = "syringe_kit" w_class = ITEM_SIZE_HUGE @@ -30,7 +31,7 @@ else if (!broken && istype(I, /obj/item/melee/energy/blade)) var/success = emag_act(INFINITY, user, I, null, "You hear metal being sliced and sparks flying.") if (success) - var/datum/effect/effect/system/spark_spread/spark_system = new + var/datum/effect/spark_spread/spark_system = new spark_system.set_up(5, 0, loc) spark_system.start() playsound(loc, 'sound/weapons/blade1.ogg', 50, 1) @@ -102,14 +103,14 @@ /obj/item/storage/lockbox/vials/on_update_icon() var/total_contents = count_by_type(contents, /obj/item/reagent_containers/glass/beaker/vial) - src.icon_state = "vialbox[Floor(total_contents/2)]" - src.overlays.Cut() + src.icon_state = "vialbox[floor(total_contents/2)]" + ClearOverlays() if (!broken) - overlays += image(icon, src, "led[locked]") + AddOverlays(image(icon, src, "led[locked]")) if(locked) - overlays += image(icon, src, "cover") + AddOverlays(image(icon, src, "cover")) else - overlays += image(icon, src, "ledb") + AddOverlays(image(icon, src, "ledb")) return /obj/item/storage/lockbox/vials/attackby(obj/item/item, mob/living/user) diff --git a/code/game/objects/items/weapons/storage/lunchbox.dm b/code/game/objects/items/weapons/storage/lunchbox.dm index e48c01ca222d4..cd18f44af6b51 100644 --- a/code/game/objects/items/weapons/storage/lunchbox.dm +++ b/code/game/objects/items/weapons/storage/lunchbox.dm @@ -1,6 +1,7 @@ /obj/item/storage/lunchbox - max_storage_space = 8 //slightly smaller than a toolbox + max_storage_space = ITEM_SIZE_SMALL * 4 name = "rainbow lunchbox" + icon = 'icons/obj/lunchboxes.dmi' icon_state = "lunchbox_rainbow" item_state = "toolbox_pink" desc = "A little lunchbox. This one is the colors of the rainbow!" @@ -47,10 +48,10 @@ filled = TRUE /obj/item/storage/lunchbox/nt - name = "\improper NanoTrasen brand lunchbox" + name = "\improper Nanotrasen brand lunchbox" icon_state = "lunchbox_nanotrasen" item_state = "toolbox_blue" - desc = "A little lunchbox. This one is branded with the NanoTrasen logo!" + desc = "A little lunchbox. This one is branded with the Nanotrasen logo!" /obj/item/storage/lunchbox/dais name = "\improper DAIS brand lunchbox" @@ -108,6 +109,7 @@ /obj/item/storage/lunchbox/picnic name = "picnic basket" + icon = 'icons/obj/picnic_basket.dmi' icon_state = "picnic_basket" item_state = "picnic_basket" desc = "A small, old-fashioned picnic basket. Great for lunches in the garden." diff --git a/code/game/objects/items/weapons/storage/med_pouch.dm b/code/game/objects/items/weapons/storage/med_pouch.dm index d5a6194b58259..3d00f36811098 100644 --- a/code/game/objects/items/weapons/storage/med_pouch.dm +++ b/code/game/objects/items/weapons/storage/med_pouch.dm @@ -37,16 +37,16 @@ Single Use Emergency Pouches A.update_icon() /obj/item/storage/med_pouch/on_update_icon() - overlays.Cut() + ClearOverlays() if(!cross_overlay) cross_overlay = image(icon, "cross") cross_overlay.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - overlays += cross_overlay + AddOverlays(cross_overlay) icon_state = "pack[opened]" /obj/item/storage/med_pouch/examine(mob/user) . = ..() - to_chat(user, "Please read instructions before use.") + . += SPAN_NOTICE("Please read instructions before use.") /obj/item/storage/med_pouch/CanUseTopic() return STATUS_INTERACTIVE diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index 8eb6235abdd38..cc0df28d35713 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -27,19 +27,22 @@ /obj/item/storage/box/donut - icon = 'icons/obj/food.dmi' + icon = 'icons/obj/food/food.dmi' icon_state = "donutbox" name = "donut box" - can_hold = list(/obj/item/reagent_containers/food/snacks/donut) + contents_allowed = list(/obj/item/reagent_containers/food/snacks/donut) foldable = /obj/item/stack/material/cardboard startswith = list(/obj/item/reagent_containers/food/snacks/donut/normal = 6) /obj/item/storage/box/donut/on_update_icon() - overlays.Cut() + ClearOverlays() var/i = 0 for(var/obj/item/reagent_containers/food/snacks/donut/D in contents) - overlays += image('icons/obj/food.dmi', "[i][D.overlay_state]") + var/image/I = image('icons/obj/food/food.dmi', "[i][D.overlay_state]") + if(D.overlay_state == "box-donut1") + I.color = D.filling_color + AddOverlays(I) i++ /obj/item/storage/box/donut/empty @@ -48,7 +51,7 @@ //misc tobacco nonsense /obj/item/storage/cigpaper name = "\improper Gen. Eric cigarette paper" - desc = "A ubiquitous brand of cigarette paper, allegedly endorsed by 24th century war hero General Eric Osmundsun for rolling your own cigarettes. Osmundsun died in a freak kayak accident. As it ate him alive during his last campaign. It was pretty freaky." + desc = "A ubiquitous brand of cigarette rolling-paper endorsed by Commonwealth Civil War General Eric Osmundsun, of the Terran Commonwealth. Osmundsun, known as 'The Aresian Butcher' for his valorant service, died in a freak white-water kayak accident in 2231." icon = 'icons/obj/cigarettes.dmi' icon_state = "cigpaperbook" item_state = "cigpacket" @@ -58,26 +61,35 @@ throwforce = 2 slot_flags = SLOT_BELT startswith = list(/obj/item/paper/cig = 10) - can_hold = list( - /obj/item/paper/cig, - /obj/item/clothing/mask/smokable/cigarette, - /obj/item/storage/cigpaper/filters -) + contents_allowed = list( + /obj/item/paper/cig, + /obj/item/clothing/mask/smokable/cigarette, + /obj/item/storage/cigpaper/filters + ) + +/obj/item/storage/cigpaper/on_update_icon() + if (!length(contents)) + icon_state = "[icon_state]_empty" + else + icon_state = initial(icon_state) /obj/item/storage/cigpaper/fancy name = "\improper Trident cigarette paper" - desc = "A fancy brand of Trident cigarette paper, for rolling your own cigarettes. Like a person who appreciates the finer things in life." + desc = "A book of Trident-brand cigarette paper, for rolling to impress. Made to cater to individuals who appreciates the finer things in life." icon = 'icons/obj/cigarettes.dmi' icon_state = "fancycigpaperbook" startswith = list(/obj/item/paper/cig/fancy = 10) /obj/item/storage/cigpaper/filters name = "box of cigarette filters" - desc = "A box of generic cigarette filters for those who rolls their own but prefers others to inhale the fumes. Not endorsed by Late General Osmundsun." + desc = "A box of generic cigarette filters, for those who roll their own and prefer to reduce the tar concentration in their lungs. Not endorsed by the late General Osmundsun." icon = 'icons/obj/cigarettes.dmi' icon_state = "filterbin" startswith = list(/obj/item/paper/cig/filter = 10) +/obj/item/storage/cigpaper/filters/on_update_icon() + return + /obj/item/storage/chewables name = "box of chewing wads master" desc = "A generic brands of Waffle Co Wads, unflavored chews. Why do these exist?" @@ -98,7 +110,7 @@ /obj/item/storage/chewables/rollable/bad name = "bag of Men at Arms tobacco" - desc = "A bag of coarse gritty tobacco marketed towards leather-necks." + desc = "A bag of coarse, gritty tobacco, marketed towards leather-necks." startswith = list(/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/bad = 8) icon_state = "rollcoarse" @@ -110,13 +122,13 @@ /obj/item/storage/chewables/rollable/fine name = "bag of Golden Sol tobacco" - desc = "A exclusive brand of overpriced tobacco, allegedly grown at a lagrange point station in Sol system." + desc = "A exclusive brand of overpriced tobacco, allegedly grown at a hidden lagrange point station somewhere in Sol." startswith = list(/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/fine = 8) icon_state = "rollfine" /obj/item/storage/chewables/rollable/rollingkit name = "bag of Crewman's First tobacco" - desc = "Generic middling quality tobacco for the recently enlisted and cost-conscious smokers. This bag comes with rolling papers and filters!" + desc = "Generic, middling quality dried tobacco for the recently enlisted and cost-conscious smokers. This bag comes with rolling papers and filters to kick-start your new habit." startswith = list( /obj/item/reagent_containers/food/snacks/grown/dried_tobacco = 8, /obj/item/storage/cigpaper = 1, @@ -127,14 +139,14 @@ //chewing tobacco /obj/item/storage/chewables/tobacco name = "tin of Lenny's brand chewing tobacco" - desc = "A generic brand of chewing tobacco, for when you can't even be assed to light up." + desc = "A dark-brown tin of Lenny's chewing tobacco, favored by the more elder end of Hellshen algae technicians." icon_state = "chew_levi" item_state = "Dpacket" startswith = list(/obj/item/clothing/mask/chewable/tobacco/lenni = 6) /obj/item/storage/chewables/tobacco2 name = "tin of Red Lady chewing tobacco" - desc = "A finer grade of chewing tobacco." + desc = "A platinum-colored tin filled with high-grade chewing tobacco. The slender, red-haired, red-dressed woman on the front is more recognizable than some religious institutions." icon_state = "chew_redman" item_state = "redlady" startswith = list(/obj/item/clothing/mask/chewable/tobacco/redlady = 6) @@ -170,6 +182,7 @@ /obj/item/storage/medical_lolli_jar name = "lollipops jar" desc = "A mixed pack of flavored medicinal lollipops. Perfect for small boo-boos." + icon = 'icons/obj/jars.dmi' icon_state = "lollijar" max_storage_space = 20 startswith = list(/obj/item/clothing/mask/chewable/candy/lolli/weak_meds = 15) diff --git a/code/game/objects/items/weapons/storage/mre.dm b/code/game/objects/items/weapons/storage/mre.dm index 41724f284076b..292936eef2152 100644 --- a/code/game/objects/items/weapons/storage/mre.dm +++ b/code/game/objects/items/weapons/storage/mre.dm @@ -5,7 +5,7 @@ MRE Stuff /obj/item/storage/mre name = "MRE, Menu 1" desc = "A vacuum-sealed bag containing a day's worth of nutrients for an adult in strenuous situations. There is no visible expiration date on the package." - icon = 'icons/obj/food.dmi' + icon = 'icons/obj/food/food.dmi' icon_state = "mre" storage_slots = 7 max_w_class = ITEM_SIZE_SMALL @@ -29,7 +29,7 @@ MRE Stuff /obj/item/storage/mre/examine(mob/user) . = ..() - to_chat(user, meal_desc) + . += SPAN_NOTICE("[meal_desc]") /obj/item/storage/mre/on_update_icon() if(opened) @@ -183,7 +183,7 @@ MRE Stuff /obj/item/storage/mrebag name = "main course" desc = "A vacuum-sealed bag containing the MRE's main course. Self-heats when opened." - icon = 'icons/obj/food.dmi' + icon = 'icons/obj/food/food.dmi' icon_state = "pouch_medium" storage_slots = 1 w_class = ITEM_SIZE_SMALL @@ -215,7 +215,7 @@ MRE Stuff startswith = list(/obj/item/reagent_containers/food/snacks/slice/vegetablepizza/filled) /obj/item/storage/mrebag/menu4 - startswith = list(/obj/item/reagent_containers/food/snacks/hamburger) + startswith = list(/obj/item/reagent_containers/food/snacks/plainburger) /obj/item/storage/mrebag/menu5 startswith = list(/obj/item/reagent_containers/food/snacks/taco) diff --git a/code/game/objects/items/weapons/storage/pill_bottle.dm b/code/game/objects/items/weapons/storage/pill_bottle.dm index e764160995cb4..cd85217e1d195 100644 --- a/code/game/objects/items/weapons/storage/pill_bottle.dm +++ b/code/game/objects/items/weapons/storage/pill_bottle.dm @@ -2,52 +2,55 @@ name = "pill bottle" desc = "It's an airtight container for storing medication." icon_state = "pill_canister" - icon = 'icons/obj/chemical.dmi' + icon = 'icons/obj/chemical_storage.dmi' item_state = "contsolid" w_class = ITEM_SIZE_SMALL max_w_class = ITEM_SIZE_TINY max_storage_space = 21 - can_hold = list(/obj/item/reagent_containers/pill,/obj/item/dice,/obj/item/paper) - allow_quick_gather = 1 - use_to_pickup = 1 + contents_allowed = list( + /obj/item/reagent_containers/pill, + /obj/item/dice, + /obj/item/paper + ) + allow_quick_gather = TRUE + allow_quick_empty = TRUE use_sound = 'sound/effects/storage/pillbottle.ogg' matter = list(MATERIAL_PLASTIC = 250) var/wrapper_color var/label -/obj/item/storage/pill_bottle/afterattack(mob/living/target, mob/living/user, proximity_flag) - if(!proximity_flag || !istype(target) || target != user) - return 1 - if(!length(contents)) - to_chat(user, SPAN_WARNING("It's empty!")) - return 1 - var/zone = user.zone_sel.selecting - if(zone == BP_MOUTH && target.can_eat()) +/obj/item/storage/pill_bottle/use_before(atom/target, mob/living/user) + if (istype(user) && target == user && user.can_eat()) + if (!length(contents)) + to_chat(user, SPAN_WARNING("\The [src] is empty!")) + return TRUE + user.visible_message(SPAN_NOTICE("[user] pops a pill from \the [src].")) playsound(get_turf(src), 'sound/effects/peelz.ogg', 50) var/list/peelz = filter_list(contents,/obj/item/reagent_containers/pill) - if(length(peelz)) + if (length(peelz)) var/obj/item/reagent_containers/pill/P = pick(peelz) remove_from_storage(P) - P.attack(target,user) - return 1 - - -/obj/item/storage/pill_bottle/afterattack(obj/target, mob/living/user, proximity) - if(!proximity) - return - if(target.is_open_container() && target.reagents) - if(!target.reagents.total_volume) + P.resolve_attackby(target ,user) + return TRUE + + if (isobj(target) && target.is_open_container() && target.reagents) + if (!length(contents)) + to_chat(user, SPAN_WARNING("\The [src] is empty!")) + return TRUE + if (!target.reagents.total_volume) to_chat(user, SPAN_NOTICE("[target] is empty. Can't dissolve a pill.")) - return + return TRUE var/list/peelz = filter_list(contents,/obj/item/reagent_containers/pill) - if(length(peelz)) + if (length(peelz)) var/obj/item/reagent_containers/pill/P = pick(peelz) remove_from_storage(P) - P.afterattack(target, user, proximity) - return + P.use_after(target, user) + return TRUE + + else return FALSE /obj/item/storage/pill_bottle/attack_self(mob/living/user) @@ -76,11 +79,11 @@ /obj/item/storage/pill_bottle/on_update_icon() - overlays.Cut() + ClearOverlays() if(wrapper_color) var/image/I = image(icon, "pillbottle_wrap") I.color = wrapper_color - overlays += I + AddOverlays(I) /obj/item/storage/pill_bottle/antitox @@ -185,8 +188,19 @@ name = "pill bottle (Paracetamol)" desc = "Mild painkiller, also known as Tylenol. Won't fix the cause of your headache (unlike cyanide), but might make it bearable." startswith = list(/obj/item/reagent_containers/pill/paracetamol = 21) - wrapper_color = "#a2819e" - + wrapper_color = "#c8a5dc" + +/obj/item/storage/pill_bottle/hyronalin + name = "pill bottle (Hyronalin)" + desc = "Moderate-strength anti-radiation pills. Take one and see if your hair falls out in the morning." + startswith = list(/obj/item/reagent_containers/pill/hyronalin = 14) + wrapper_color = COLOR_GREEN_GRAY + +/obj/item/storage/pill_bottle/sugariron + name = "pill bottle (Sugar-Iron)" + desc = "A fifty-fifty mix of iron and sugar, used for encouraging the body's natural blood regeneration." + startswith = list(/obj/item/reagent_containers/pill/sugariron = 14) + wrapper_color = COLOR_RED_GRAY /obj/item/storage/pill_bottle/assorted name = "pill bottle (assorted)" diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 2d2e407f10c5d..dcdf61ae0a198 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -8,46 +8,53 @@ var/l_code = null var/l_set = 0 var/l_setshort = 0 - var/l_hacking = 0 var/emagged = FALSE var/open = 0 w_class = ITEM_SIZE_NORMAL max_w_class = ITEM_SIZE_SMALL max_storage_space = DEFAULT_BOX_STORAGE +/obj/item/storage/secure/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(open != 1) + return + . = ITEM_INTERACT_SUCCESS + user.show_message(SPAN_NOTICE("Now attempting to reset internal memory, please hold."), 1) + if(!tool.use_as_tool(src, user, 10 SECONDS, volume = 50, skill_path = list(SKILL_DEVICES, SKILL_CONSTRUCTION), do_flags = DO_REPAIR_CONSTRUCT)) + return + if(!prob(40)) + USE_FEEDBACK_FAILURE("Unable to reset internal memory.") + return + l_setshort = 1 + l_set = 0 + to_chat(user, SPAN_NOTICE("Internal memory reset. Please give it a few seconds to reinitialize.")) + addtimer(CALLBACK(src, PROC_REF(update_setshort), FALSE), 8 SECONDS) + +/obj/item/storage/secure/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, 2 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + open = !open + USE_FEEDBACK_NEW_PANEL_OPEN(user, open) -/obj/item/storage/secure/attackby(obj/item/W, mob/user) +/obj/item/storage/secure/use_tool(obj/item/W, mob/living/user, list/click_params) if (!locked) return ..() + if (istype(W, /obj/item/melee/energy/blade) && emag_act(INFINITY, user, "You slice through the lock of \the [src]")) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + var/datum/effect/spark_spread/spark_system = new /datum/effect/spark_spread() spark_system.set_up(5, 0, loc) spark_system.start() playsound(loc, 'sound/weapons/blade1.ogg', 50, 1) playsound(loc, "sparks", 50, 1) - return - if (isScrewdriver(W)) - if (do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - open = ! open - user.show_message(SPAN_NOTICE("You [open ? "open" : "close"] the service panel.")) - return - if (isMultitool(W) && (open == 1)&& (!l_hacking)) - user.show_message(SPAN_NOTICE("Now attempting to reset internal memory, please hold."), 1) - l_hacking = 1 - if (do_after(usr, 10 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if (prob(40)) - l_setshort = 1 - l_set = 0 - user.show_message(SPAN_NOTICE("Internal memory reset. Please give it a few seconds to reinitialize."), 1) - sleep(80) - l_setshort = 0 - l_hacking = 0 - else - user.show_message(SPAN_WARNING("Unable to reset internal memory."), 1) - l_hacking = 0 - else - l_hacking = 0 + return TRUE + + else + to_chat(user, SPAN_WARNING("\The [src] is locked and cannot be opened!")) + return TRUE +/obj/item/storage/secure/proc/update_setshort(new_value) + l_setshort = new_value /obj/item/storage/secure/MouseDrop(over_object, src_location, over_location) if (locked) @@ -84,15 +91,15 @@ l_set = 1 else if ((code == l_code) && (!emagged) && (l_set == 1)) locked = 0 - overlays.Cut() - overlays += image('icons/obj/storage.dmi', icon_opened) + ClearOverlays() + AddOverlays(image(icon, icon_opened)) code = null else code = "ERROR" else if ((href_list["type"] == "R") && (!emagged) && (!l_setshort)) locked = 1 - overlays.Cut() + ClearOverlays() code = null close(usr) else @@ -108,17 +115,17 @@ /obj/item/storage/secure/examine(mob/user, distance) . = ..() if(distance <= 1) - to_chat(user, text("The service panel is [src.open ? "open" : "closed"].")) + . += SPAN_NOTICE("The service panel is [src.open ? "open" : "closed"].") /obj/item/storage/secure/emag_act(remaining_charges, mob/user, feedback) if (emagged) return emagged = TRUE - src.overlays += image('icons/obj/storage.dmi', icon_sparking) + AddOverlays(icon_sparking) sleep(6) - overlays.Cut() - overlays += image('icons/obj/storage.dmi', icon_locking) + ClearOverlays() + AddOverlays(icon_locking) locked = 0 to_chat(user, (feedback ? feedback : "You short out the lock of \the [src].")) return TRUE @@ -126,7 +133,7 @@ /obj/item/storage/secure/briefcase name = "secure briefcase" - icon = 'icons/obj/storage.dmi' + icon = 'icons/obj/briefcases.dmi' icon_state = "secure" item_state = "sec-case" desc = "A large briefcase with a digital locking system." @@ -155,7 +162,7 @@ /obj/item/storage/secure/safe name = "secure safe" - icon = 'icons/obj/storage.dmi' + icon = 'icons/obj/structures/safe.dmi' icon_state = "safe" icon_opened = "safe0" icon_locking = "safeb" @@ -166,7 +173,7 @@ max_storage_space = 56 anchored = TRUE density = FALSE - cant_hold = list(/obj/item/storage/secure/briefcase) + contents_banned = list(/obj/item/storage/secure/briefcase) startswith = list( /obj/item/paper = 1, /obj/item/pen = 1 @@ -179,5 +186,5 @@ /obj/item/storage/secure/AltClick(/mob/user) if (locked) - return - ..() + return FALSE + return ..() diff --git a/code/game/objects/items/weapons/storage/specialized.dm b/code/game/objects/items/weapons/storage/specialized.dm index 3124209e86f37..3b114d27d37ad 100644 --- a/code/game/objects/items/weapons/storage/specialized.dm +++ b/code/game/objects/items/weapons/storage/specialized.dm @@ -1,18 +1,17 @@ /obj/item/storage/ore name = "mining satchel" desc = "This sturdy bag can be used to store and transport ores." - icon = 'icons/obj/mining.dmi' + icon = 'icons/obj/mining_satchel.dmi' icon_state = "satchel" slot_flags = SLOT_BELT max_storage_space = 200 max_w_class = ITEM_SIZE_NORMAL w_class = ITEM_SIZE_LARGE - can_hold = list( + contents_allowed = list( /obj/item/ore ) allow_quick_gather = TRUE allow_quick_empty = TRUE - use_to_pickup = TRUE /obj/item/storage/evidence @@ -23,7 +22,7 @@ max_storage_space = 100 max_w_class = ITEM_SIZE_SMALL w_class = ITEM_SIZE_NORMAL - can_hold = list( + contents_allowed = list( /obj/item/sample, /obj/item/evidencebag, /obj/item/forensics, @@ -33,37 +32,35 @@ ) allow_quick_gather = TRUE allow_quick_empty = TRUE - use_to_pickup = TRUE /obj/item/storage/plants name = "botanical satchel" desc = "This bag can be used to store all kinds of plant products and botanical specimen." - icon = 'icons/obj/hydroponics_machines.dmi' + icon = 'icons/obj/machines/hydroponics_machines.dmi' icon_state = "plantbag" slot_flags = SLOT_BELT max_storage_space = 100 max_w_class = ITEM_SIZE_NORMAL w_class = ITEM_SIZE_NORMAL - can_hold = list( + contents_allowed = list( /obj/item/reagent_containers/food/snacks/grown, /obj/item/seeds, /obj/item/shellfish ) allow_quick_gather = TRUE allow_quick_empty = TRUE - use_to_pickup = TRUE /obj/item/storage/sheetsnatcher name = "sheet snatcher" - icon = 'icons/obj/mining.dmi' + icon = 'icons/obj/mining_satchel.dmi' icon_state = "sheetsnatcher" desc = "A patented storage system designed for any kind of mineral sheet." storage_ui = /datum/storage_ui/default/sheetsnatcher w_class = ITEM_SIZE_NORMAL storage_slots = 7 - use_to_pickup = TRUE + allow_quick_gather = TRUE virtual = TRUE var/max_sheets = 300 var/cur_sheets = 0 @@ -72,7 +69,7 @@ /obj/item/storage/sheetsnatcher/examine(mob/user, distance) . = ..() if (distance < 2) - to_chat(user, "It has a capacity of [max_sheets] sheets and current holds [cur_sheets].") + . += SPAN_NOTICE("It has a capacity of [max_sheets] sheets and current holds [cur_sheets].") /obj/item/storage/sheetsnatcher/can_be_inserted(obj/item/stack/material/stack, mob/user, silent) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index da5bef2ade30c..8d0da24b45d4a 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -1,42 +1,88 @@ -// To clarify: -// For use_to_pickup and allow_quick_gather functionality, -// see item/attackby() (/game/objects/items.dm) -// Do not remove this functionality without good reason, cough reagent_containers cough. -// -Sayu - - /obj/item/storage name = "storage" - icon = 'icons/obj/storage.dmi' + icon = 'icons/obj/boxes.dmi' w_class = ITEM_SIZE_NORMAL - var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else) - var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set) - var/max_w_class = ITEM_SIZE_SMALL //Max size of objects that this object can store (in effect only if can_hold isn't set) - var/max_storage_space = null //Total storage cost of items this can hold. Will be autoset based on storage_slots if left null. - var/storage_slots = null //The number of storage slots in this container. + /** If set, a list of paths this item can hold, disallowing all others. + May be associative, in which case the value is a limit per path. */ + var/list/contents_allowed + + /** If set, a list of paths this item cannot hold, allowing all others. + Ignored when contents_allowed is set. */ + var/list/contents_banned + + /// The largest item size that can be stored. Ignored if contents_allowed is set. + var/max_w_class = ITEM_SIZE_SMALL + + /// The space available in this item. If unset, calculate from storage_slots. + var/max_storage_space + + /// If set, the number of storage slots available. + var/storage_slots - var/use_to_pickup //Set this to make it possible to use this item in an inverse way, so you can have the item in your hand and click items on the floor to pick them up. - var/allow_quick_empty //Set this variable to allow the object to have the 'empty' verb, which dumps all the contents on the floor. - var/allow_quick_gather //Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile. - ///Allows dumping the contents of storage after a duration + /// If set, this item can use the empty verb to dump its contents. + var/allow_quick_empty + + /// If set, this item can attempt to collect all items on a turf with a click. + var/allow_quick_gather + + /// When quick gathering, falsy collects all valid items, truthy collects only one. + var/quick_gather_single + + ///Allows dumping the contents of storage after a duration. var/allow_slow_dump - var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile - var/use_sound = "rustle" //sound played when used. null for no sound. - ///If true, will not permit use of the storage UI + /// If set, a sound to play when accessing the storage item's UI. + var/use_sound = "rustle" + + /// If truthy, disallows use of the storage UI. var/virtual - //initializes the contents of the storage with some items based on an assoc list. The assoc key must be an item path, - //the assoc value can either be the quantity, or a list whose first value is the quantity and the rest are args. + /** An optional map of (path = config) to create on initialize. Config may be a count to + create or a sublist of (count, ...args), where args is passed to each new instance */ var/list/startswith + + var/datum/storage_ui/storage_ui = /datum/storage_ui/default - var/opened = null - var/open_sound = null + + /// True when this storage item has been opened. Used by storage/fancy. + var/opened + + /// If set, a sound to play when opening the storage item. + var/open_sound + /obj/item/storage/Destroy() QDEL_NULL(storage_ui) + return ..() + + +/obj/item/storage/Initialize() . = ..() + if (!allow_quick_empty) + verbs -= /obj/item/storage/verb/quick_empty + if (!allow_quick_gather) + verbs -= /obj/item/storage/verb/toggle_gathering_mode + if (!allow_slow_dump) + verbs -= /obj/item/storage/verb/dump_contents + if (isnull(max_storage_space) && !isnull(storage_slots)) + max_storage_space = storage_slots*BASE_STORAGE_COST(max_w_class) + storage_ui = new storage_ui(src) + prepare_ui() + if (length(startswith)) + for (var/item_path in startswith) + var/list/data = startswith[item_path] + if (islist(data)) + var/qty = data[1] + var/list/argsl = data.Copy() + argsl[1] = src + for (var/i in 1 to qty) + new item_path (arglist(argsl)) + else + for (var/i in 1 to data || 1) + new item_path (src) + update_icon() + /obj/item/storage/MouseDrop(obj/over_object as obj) if(!canremove) @@ -56,6 +102,9 @@ return src.add_fingerprint(usr) + if(istype(src.loc, /obj/item/storage)) + var/obj/item/storage/parent_storage = src.loc + parent_storage.remove_from_storage(src) if(usr.unEquip(src)) switch(over_object.name) if(BP_R_HAND) @@ -64,14 +113,14 @@ usr.put_in_l_hand(src) /obj/item/storage/AltClick(mob/usr) - if(!canremove) - return + return FALSE if ((ishuman(usr) || isrobot(usr) || issmall(usr)) && !usr.incapacitated() && Adjacent(usr)) src.add_fingerprint(usr) src.open(usr) return TRUE + return FALSE /obj/item/storage/proc/return_inv() @@ -81,10 +130,10 @@ for(var/obj/item/storage/S in src) L += S.return_inv() - for(var/obj/item/gift/G in src) - L += G.gift - if (istype(G.gift, /obj/item/storage)) - L += G.gift:return_inv() + for(var/obj/item/smallDelivery/parcel in src) + L += parcel.wrapped + if (istype(parcel.wrapped, /obj/item/storage)) + L += parcel.wrapped:return_inv() return L /obj/item/storage/proc/show_to(mob/user as mob) @@ -98,17 +147,19 @@ /obj/item/storage/proc/open(mob/user as mob) if (virtual) return - if(!opened) - playsound(src.loc, src.open_sound, 50, 0, -5) - opened = 1 + if (!opened) + var/sound = open_sound || use_sound + if (sound) + playsound(src, open_sound, 50, FALSE, -5) + to_chat(user, "You open \the [src].") queue_icon_update() - if (src.use_sound) - playsound(src.loc, src.use_sound, 50, 0, -5) + opened = TRUE + else if (use_sound) + playsound(src, use_sound, 50, FALSE, -5) if (isrobot(user) && user.hud_used) var/mob/living/silicon/robot/robot = user - if(robot.shown_robot_modules) //The robot's inventory is open, need to close it first. + if (robot.shown_robot_modules) robot.hud_used.toggle_show_robot_modules() - prepare_ui() storage_ui.on_open(user) storage_ui.show_to(user) @@ -148,14 +199,14 @@ if(W.anchored) return 0 - if(length(can_hold)) - if(!is_type_in_list(W, can_hold)) - if(!stop_messages && ! istype(W, /obj/item/hand_labeler)) + if (length(contents_allowed)) + if (!is_type_in_list(W, contents_allowed)) + if (!stop_messages && ! istype(W, /obj/item/hand_labeler)) to_chat(user, SPAN_NOTICE("\The [src] cannot hold \the [W].")) return 0 - var/max_instances = can_hold[W.type] - if(max_instances && instances_of_type_in_list(W, contents) >= max_instances) - if(!stop_messages && !istype(W, /obj/item/hand_labeler)) + var/max_instances = contents_allowed[W.type] + if (max_instances && instances_of_type_in_list(W, contents) >= max_instances) + if (!stop_messages && !istype(W, /obj/item/hand_labeler)) to_chat(user, SPAN_NOTICE("\The [src] has no more space specifically for \the [W].")) return 0 @@ -164,14 +215,14 @@ return FALSE // Don't allow insertion of unsafed compressed matter implants - // Since they are sucking something up now, their afterattack will delete the storage + // Since they are sucking something up now, their use_after will delete the storage if(istype(W, /obj/item/implanter/compressed)) var/obj/item/implanter/compressed/impr = W if(!impr.safe) stop_messages = 1 return 0 - if(length(cant_hold) && is_type_in_list(W, cant_hold)) + if(length(contents_banned) && is_type_in_list(W, contents_banned)) if(!stop_messages) to_chat(user, SPAN_NOTICE("\The [src] cannot hold \the [W].")) return 0 @@ -276,19 +327,36 @@ update_icon() //This proc is called when you want to place an item into the storage item. -/obj/item/storage/attackby(obj/item/W as obj, mob/user as mob) - . = ..() - if (.) //if the item was used as a crafting component, just return - return +/obj/item/storage/use_tool(obj/item/W, mob/living/user, list/click_params) + if (SSfabrication.try_craft_with(src, W, user)) + return TRUE - if(isrobot(user) && (W == user.get_active_hand())) + if (isrobot(user) && (W == user.get_active_hand())) return //Robots can't store their modules. - if(!can_be_inserted(W, user)) - return + if (!can_be_inserted(W, user)) + return TRUE + + if (handle_item_insertion(W)) + return TRUE - W.add_fingerprint(user) - return handle_item_insertion(W) + return ..() + +///Eventually should be deleted in favor of use_tool; keeping duplicate until downstream attackbys are replaced. +/obj/item/storage/attackby(obj/item/W, mob/living/user, click_params) + if (SSfabrication.try_craft_with(src, W, user)) + return TRUE + + if (isrobot(user) && (W == user.get_active_hand())) + return //Robots can't store their modules. + + if (!can_be_inserted(W, user)) + return TRUE + + if (handle_item_insertion(W)) + return TRUE + + return ..() /obj/item/storage/attack_hand(mob/user as mob) if(ishuman(user)) @@ -330,29 +398,35 @@ else to_chat(user, SPAN_NOTICE("You fail to pick anything up with \the [src].")) + /obj/item/storage/verb/toggle_gathering_mode() set name = "Switch Gathering Method" set category = "Object" + set src in usr + quick_gather_single = !quick_gather_single + if (quick_gather_single) + to_chat(usr, "\The [src] now picks up one item at a time.") + else + to_chat(usr, "\The [src] now picks up all items in a tile.") + + +/obj/item/storage/proc/DoQuickEmpty() + var/turf/into = get_turf(src) + if (!into) + return + for(var/atom/movable/movable in contents) + remove_from_storage(movable, into, TRUE) + finish_bulk_removal() - collection_mode = !collection_mode - switch (collection_mode) - if(1) - to_chat(usr, "\The [src] now picks up all items in a tile at once.") - if(0) - to_chat(usr, "\The [src] now picks up one item at a time.") /obj/item/storage/verb/quick_empty() set name = "Empty Contents" set category = "Object" - if((!ishuman(usr) && (src.loc != usr)) || usr.stat || usr.restrained()) return - - var/turf/T = get_turf(src) hide_from(usr) - for(var/obj/item/I in contents) - remove_from_storage(I, T, 1) - finish_bulk_removal() + DoQuickEmpty() + /obj/item/storage/verb/dump_contents() set name = "Dump Contents" @@ -379,42 +453,6 @@ else to_chat(usr, SPAN_WARNING("You need to be holding \the [src] and have an empty hand to dump its contents!")) -/obj/item/storage/Initialize() - . = ..() - if(allow_quick_empty) - verbs += /obj/item/storage/verb/quick_empty - else - verbs -= /obj/item/storage/verb/quick_empty - - if(allow_quick_gather) - verbs += /obj/item/storage/verb/toggle_gathering_mode - else - verbs -= /obj/item/storage/verb/toggle_gathering_mode - - if (allow_slow_dump) - verbs += /obj/item/storage/verb/dump_contents - else - verbs -= /obj/item/storage/verb/dump_contents - - if(isnull(max_storage_space) && !isnull(storage_slots)) - max_storage_space = storage_slots*BASE_STORAGE_COST(max_w_class) - - storage_ui = new storage_ui(src) - prepare_ui() - - if(startswith) - for(var/item_path in startswith) - var/list/data = startswith[item_path] - if(islist(data)) - var/qty = data[1] - var/list/argsl = data.Copy() - argsl[1] = src - for(var/i in 1 to qty) - new item_path(arglist(argsl)) - else - for(var/i in 1 to (isnull(data)? 1 : data)) - new item_path(src) - update_icon() /obj/item/storage/get_mechanics_info() . = ..() @@ -449,15 +487,15 @@ /obj/item/storage/proc/make_exact_fit() storage_slots = length(contents) - - can_hold.Cut() + contents_allowed = list() max_w_class = 0 max_storage_space = 0 for(var/obj/item/I in src) - can_hold[I.type]++ + contents_allowed[I.type]++ max_w_class = max(I.w_class, max_w_class) max_storage_space += I.get_storage_cost() + /** * Determines the storage depth of an atom. This is the number of storage items (`/obj/item/storage`) the atom is * contained in before reaching `container`. diff --git a/code/game/objects/items/weapons/storage/storage_ui/default.dm b/code/game/objects/items/weapons/storage/storage_ui/default.dm index bb4702fe11405..edf47aca2fdf0 100644 --- a/code/game/objects/items/weapons/storage/storage_ui/default.dm +++ b/code/game/objects/items/weapons/storage/storage_ui/default.dm @@ -1,14 +1,16 @@ +/// length of sprite for start and end of the box representing the stored item +#define STORED_CAP_WIDTH 4 + /datum/storage_ui/default - var/list/is_seeing = new/list() //List of mobs which are currently seeing the contents of this item's storage + var/list/is_seeing = list() //List of mobs which are currently seeing the contents of this item's storage var/obj/screen/storage/boxes var/obj/screen/storage/storage_start //storage UI var/obj/screen/storage/storage_continue var/obj/screen/storage/storage_end - var/obj/screen/storage/stored_start - var/obj/screen/storage/stored_continue - var/obj/screen/storage/stored_end + var/list/obj/screen/containers var/obj/screen/close/closer + var/static/list/storage_container_icons_size = list() /datum/storage_ui/default/New(storage) ..() @@ -38,15 +40,7 @@ storage_end.screen_loc = "7,7 to 10,8" storage_end.layer = HUD_BASE_LAYER - stored_start = new /obj //we just need these to hold the icon - stored_start.icon_state = "stored_start" - stored_start.layer = HUD_BASE_LAYER - stored_continue = new /obj - stored_continue.icon_state = "stored_continue" - stored_continue.layer = HUD_BASE_LAYER - stored_end = new /obj - stored_end.icon_state = "stored_end" - stored_end.layer = HUD_BASE_LAYER + containers = list() closer = new /obj/screen/close( ) closer.master = storage @@ -59,9 +53,7 @@ QDEL_NULL(storage_start) QDEL_NULL(storage_continue) QDEL_NULL(storage_end) - QDEL_NULL(stored_start) - QDEL_NULL(stored_continue) - QDEL_NULL(stored_end) + QDEL_NULL_LIST(containers) QDEL_NULL(closer) . = ..() @@ -105,8 +97,11 @@ user.client.screen -= storage_end user.client.screen -= closer user.client.screen -= storage.contents + user.client.screen -= containers + user.client.screen += closer user.client.screen += storage.contents + user.client.screen += containers if(storage.storage_slots) user.client.screen += boxes else @@ -126,13 +121,17 @@ user.client.screen -= storage_end user.client.screen -= closer user.client.screen -= storage.contents + user.client.screen -= containers if(user.s_active == storage) user.s_active = null //Creates the storage UI /datum/storage_ui/default/prepare_ui() + for(var/mob/user in is_seeing) + user.client?.screen -= containers + QDEL_LIST(containers) //if storage slots is null then use the storage space UI, otherwise use the slots UI - if(storage.storage_slots == null) + if(isnull(storage.storage_slots)) space_orient_objs() else slot_orient_objs() @@ -183,6 +182,9 @@ boxes.screen_loc = "4:16,2:16 to [4+cols]:16,[2+rows]:16" for(var/obj/O in storage.contents) + var/obj/screen/container/container = create_container(O) + container.screen_loc = "[cx]:16,[cy]:16" + containers += container O.screen_loc = "[cx]:16,[cy]:16" O.maptext = "" O.hud_layerise() @@ -197,11 +199,8 @@ var/baseline_max_storage_space = DEFAULT_BOX_STORAGE //storage size corresponding to 224 pixels var/storage_cap_width = 2 //length of sprite for start and end of the box representing total storage space - var/stored_cap_width = 4 //length of sprite for start and end of the box representing the stored item var/storage_width = min( round( 224 * storage.max_storage_space/baseline_max_storage_space ,1) ,284) //length of sprite for the box representing total storage space - storage_start.overlays.Cut() - storage_continue.SetTransform(scale_x = (storage_width - storage_cap_width * 2 + 3) / 32) storage_start.screen_loc = "4:16,2:16" @@ -214,22 +213,46 @@ for(var/obj/item/O in storage.contents) startpoint = endpoint + 1 endpoint += storage_width * O.get_storage_cost()/storage.max_storage_space - stored_start.SetTransform(offset_x = startpoint) - stored_end.SetTransform(offset_x = endpoint - stored_cap_width) - stored_continue.SetTransform( - offset_x = startpoint + stored_cap_width + (endpoint - startpoint - stored_cap_width * 2) / 2 - 16, - scale_x = (endpoint - startpoint - stored_cap_width * 2) / 32 - ) - storage_start.overlays += stored_start - storage_start.overlays += stored_continue - storage_start.overlays += stored_end - - O.screen_loc = "4:[round((startpoint+endpoint)/2)+2],2:16" + var/obj/screen/container/container = create_container(O, floor(endpoint - startpoint)) + container.screen_loc = "4:[16 + round(startpoint)],2:16" + containers += container + + O.screen_loc = "4:[round((startpoint+endpoint)/2) + 1],2:16" O.maptext = "" O.hud_layerise() closer.screen_loc = "4:[storage_width+19],2:16" +/datum/storage_ui/default/proc/create_container(obj/item/new_master, width = 32) + var/obj/screen/container/container = new() + container.SetName(new_master.name) + container.master = new_master + + if(width == 32) + return container + + if(storage_container_icons_size["[width]"]) + container.icon = storage_container_icons_size["[width]"] + return container + + var/icon/new_icon = icon('icons/mob/screen1.dmi', "blank") + new_icon.Scale(width, 32) + + var/icon/stored_start = icon('icons/mob/screen1.dmi', "stored_start") + var/icon/stored_continue = icon('icons/mob/screen1.dmi', "stored_continue") + var/icon/stored_end = icon('icons/mob/screen1.dmi', "stored_end") + + stored_continue.Scale(clamp(width - STORED_CAP_WIDTH * 2, 1, 64), 32) + + new_icon.Blend(stored_start, ICON_OVERLAY) + new_icon.Blend(stored_continue, ICON_OVERLAY, x = STORED_CAP_WIDTH + 1) + new_icon.Blend(stored_end, ICON_OVERLAY, x = width + 1 - STORED_CAP_WIDTH) + + storage_container_icons_size["[width]"] = new_icon + + container.icon = new_icon + return container + // Sets up numbered display to show the stack size of each stored mineral // NOTE: numbered display is turned off currently because it's broken /datum/storage_ui/default/sheetsnatcher/prepare_ui(mob/user) @@ -242,3 +265,5 @@ arrange_item_slots(row_num, col_count) if(user && user.s_active) user.s_active.show_to(user) + +#undef STORED_CAP_WIDTH diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index b03e5ef3516eb..ae0c25340e6fb 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -1,7 +1,7 @@ /obj/item/storage/toolbox name = "toolbox" desc = "Bright red toolboxes like these are one of the most common sights in maintenance corridors on virtually every ship in the galaxy." - icon = 'icons/obj/storage.dmi' + icon = 'icons/obj/tools/toolboxes.dmi' icon_state = "red" item_state = "toolbox_red" obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -14,7 +14,7 @@ base_parry_chance = 15 w_class = ITEM_SIZE_LARGE max_w_class = ITEM_SIZE_NORMAL - max_storage_space = DEFAULT_LARGEBOX_STORAGE //enough to hold all starting contents + max_storage_space = ITEM_SIZE_NORMAL * 7 origin_tech = list(TECH_COMBAT = 1) attack_verb = list("robusted") use_sound = 'sound/effects/storage/toolbox.ogg' @@ -42,23 +42,35 @@ desc = "Bright blue toolboxes like these are one of the most common sights in maintenance corridors on virtually every ship in the galaxy." icon_state = "blue" item_state = "toolbox_blue" - startswith = list(/obj/item/screwdriver, /obj/item/wrench, /obj/item/weldingtool, /obj/item/crowbar, /obj/item/device/scanner/gas, /obj/item/wirecutters) + startswith = list( + /obj/item/screwdriver, + /obj/item/wrench, + /obj/item/weldingtool, + /obj/item/crowbar, + /obj/item/device/scanner/gas, + /obj/item/wirecutters + ) /obj/item/storage/toolbox/electrical name = "electrical toolbox" desc = "Bright yellow toolboxes like these are one of the most common sights in maintenance corridors on virtually every ship in the galaxy." icon_state = "yellow" item_state = "toolbox_yellow" - startswith = list(/obj/item/screwdriver, /obj/item/wirecutters, /obj/item/device/t_scanner, /obj/item/crowbar) + startswith = list( + /obj/item/screwdriver, + /obj/item/wirecutters, + /obj/item/device/t_scanner, + /obj/item/crowbar + ) /obj/item/storage/toolbox/electrical/Initialize() . = ..() - new /obj/item/stack/cable_coil/random(src,30) - new /obj/item/stack/cable_coil/random(src,30) + new /obj/random/single/color/cable_coil(src,30) + new /obj/random/single/color/cable_coil(src,30) if(prob(5)) new /obj/item/clothing/gloves/insulated(src) else - new /obj/item/stack/cable_coil/random(src,30) + new /obj/random/single/color/cable_coil(src,30) /obj/item/storage/toolbox/syndicate name = "black and red toolbox" @@ -68,4 +80,12 @@ origin_tech = list(TECH_COMBAT = 1, TECH_ESOTERIC = 1) attack_cooldown = 10 base_parry_chance = 30 - startswith = list(/obj/item/clothing/gloves/insulated, /obj/item/screwdriver, /obj/item/wrench, /obj/item/weldingtool, /obj/item/crowbar, /obj/item/wirecutters, /obj/item/device/multitool) + startswith = list( + /obj/item/clothing/gloves/insulated, + /obj/item/screwdriver, + /obj/item/wrench, + /obj/item/weldingtool, + /obj/item/crowbar, + /obj/item/wirecutters, + /obj/item/device/multitool + ) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index c2e1fadb8a175..52517a29d1dfc 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -46,6 +46,11 @@ /obj/item/material/star/ninja, ) +/obj/item/storage/fancy/smokable/case/syndiecoins + startswith = list( + /obj/item/material/coin/challenge/syndie = 5 + ) + // Space suit uplink kit /obj/item/storage/backpack/satchel/syndie_kit/space //name = "\improper EVA gear pack" @@ -82,7 +87,7 @@ // Clerical uplink kit /obj/item/storage/backpack/satchel/syndie_kit/clerical startswith = list( - /obj/item/stack/package_wrap/twenty_five, + /obj/item/stack/package_wrap/cargo_wrap, /obj/item/hand_labeler, /obj/item/stamp/chameleon, /obj/item/pen/chameleon, @@ -122,7 +127,7 @@ ) /obj/item/storage/box/syndie_kit/cigarette - name = "\improper Tricky smokes" + name = "tricky smokes" desc = "Smokes so good, you'd think it was a trick!" startswith = list( /obj/item/flame/lighter/zippo = 1, @@ -159,3 +164,8 @@ /obj/item/clothing/suit/armor/pcarrier/merc, /obj/item/clothing/head/helmet/merc ) +/obj/item/storage/box/syndie_kit/corpse_cube + startswith = list( + /obj/item/device/dna_sampler, + /obj/item/reagent_containers/food/snacks/corpse_cube + ) diff --git a/code/game/objects/items/weapons/storage/wall_mirror.dm b/code/game/objects/items/weapons/storage/wall_mirror.dm index 4ab40abf077bc..d8eb95d984290 100644 --- a/code/game/objects/items/weapons/storage/wall_mirror.dm +++ b/code/game/objects/items/weapons/storage/wall_mirror.dm @@ -2,7 +2,7 @@ /obj/item/storage/mirror name = "mirror" desc = "A SalonPro Nano-Mirror! The leading brand in hair salon products, utilizing nano-machinery to style your hair just right." - icon = 'icons/obj/watercloset.dmi' + icon = 'icons/obj/structures/mirror.dmi' icon_state = "mirror" density = FALSE anchored = TRUE @@ -64,7 +64,7 @@ /obj/item/mirror name = "mirror" desc = "A SalonPro Nano-Mirror(TM) brand mirror! Now a portable version." - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/lavatory.dmi' icon_state = "mirror" var/list/ui_cache diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 09a4c9dd664cb..edcdf6d395309 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -6,9 +6,9 @@ color = COLOR_BROWN_ORANGE w_class = ITEM_SIZE_SMALL max_w_class = ITEM_SIZE_SMALL - max_storage_space = 8 + max_storage_space = ITEM_SIZE_SMALL * 3 slot_flags = SLOT_ID - can_hold = list( + contents_allowed = list( /obj/item/spacecash, /obj/item/card, /obj/item/clothing/mask/smokable, @@ -18,22 +18,16 @@ /obj/item/clothing/accessory/locket, /obj/item/clothing/head/hairflower, /obj/item/device/flashlight/pen, - /obj/item/device/flashlight/slime, /obj/item/seeds, /obj/item/material/coin, /obj/item/dice, /obj/item/disk, /obj/item/implant, - /obj/item/implanter, - /obj/item/reagent_containers/syringe, - /obj/item/reagent_containers/hypospray/autoinjector, - /obj/item/reagent_containers/glass/beaker/vial, /obj/item/flame, /obj/item/paper, /obj/item/pen, /obj/item/photo, /obj/item/reagent_containers/pill, - /obj/item/device/radio/headset, /obj/item/device/encryptionkey, /obj/item/key, /obj/item/clothing/accessory/badge, @@ -41,9 +35,8 @@ /obj/item/clothing/accessory/armor_tag, /obj/item/clothing/ring, /obj/item/passport, - /obj/item/clothing/accessory/pride_pin, - /obj/item/clothing/accessory/pronouns, - /obj/item/storage/chewables/rollable + /obj/item/storage/chewables/rollable, + /obj/item/storage/fancy/matches/matchbook ) /// If this wallet contains ID cards, the one that is displayed through its window. @@ -73,15 +66,15 @@ /obj/item/storage/wallet/on_update_icon() - overlays.Cut() + ClearOverlays() if (front_id) var/tiny_state = "id-generic" var/check_state = "id-[front_id.icon_state]" - if (check_state in icon_states(icon)) + if (ICON_HAS_STATE(icon, check_state)) tiny_state = check_state var/image/tiny_image = new/image(icon, icon_state = tiny_state) tiny_image.appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - overlays += tiny_image + AddOverlays(tiny_image) /obj/item/storage/wallet/GetIdCard() @@ -102,7 +95,7 @@ if (istype(id)) remove_from_storage(id, get_turf(user)) user.put_in_hands(id) - return + return TRUE return ..() @@ -115,7 +108,7 @@ . = ..() if (prob(65)) var/obj/item/spacecash/ewallet/stick = new (src) - stick.worth = Floor(grand() * 1200) + stick.worth = floor(grand() * 1200) else for (var/i = 1 to rand(1, 2)) var/type = pick(cash_types) @@ -151,7 +144,7 @@ /obj/item/storage/wallet/poly/emp_act(severity) icon_state = "wallet-emp" update_icon() - addtimer(new Callback(src, .proc/resolve_emp_timer), 5 SECONDS) + addtimer(CALLBACK(src, PROC_REF(resolve_emp_timer)), 5 SECONDS) ..() diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index e30334b367db2..049dda2bb8399 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -10,7 +10,7 @@ throwforce = 7 w_class = ITEM_SIZE_NORMAL origin_tech = list(TECH_COMBAT = 2) - attack_verb = list("beaten") + attack_verb = list("beat", "whacked") base_parry_chance = 30 attack_ignore_harm_check = TRUE var/stunforce = 0 @@ -62,21 +62,35 @@ icon_state = "[initial(name)]" if(icon_state == "[initial(name)]_active") - set_light(0.4, 0.1, 1, 2, "#ff6a00") + set_light(1.5, 2, "#ff6a00") else set_light(0) /obj/item/melee/baton/examine(mob/user, distance) . = ..() if(distance <= 1) - examine_cell(user) + . += examine_cell(user) // Addition made by Techhead0, thanks for fullfilling the todo! /obj/item/melee/baton/proc/examine_cell(mob/user) + . = list() if(bcell) - to_chat(user, SPAN_NOTICE("The baton is [round(bcell.percent())]% charged.")) + . += SPAN_NOTICE("The baton is [round(bcell.percent())]% charged.") if(!bcell) - to_chat(user, SPAN_WARNING("The baton does not have a power source installed.")) + . += SPAN_WARNING("The baton does not have a power source installed.") + +/obj/item/melee/baton/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!bcell) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + bcell.update_icon() + bcell.dropInto(loc) + bcell = null + USE_FEEDBACK_CELL_REMOVED(user) + status = 0 + update_icon() /obj/item/melee/baton/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/cell/device)) @@ -87,16 +101,8 @@ update_icon() else to_chat(user, SPAN_NOTICE("[src] already has a cell.")) - else if(isScrewdriver(W)) - if(bcell) - bcell.update_icon() - bcell.dropInto(loc) - bcell = null - to_chat(user, SPAN_NOTICE("You remove the cell from the [src].")) - status = 0 - update_icon() - else - ..() + return + . = ..() /obj/item/melee/baton/attack_self(mob/user) set_status(!status, user) @@ -105,8 +111,7 @@ /obj/item/melee/baton/throw_impact(atom/hit_atom, datum/thrownthing/TT) if(istype(hit_atom,/mob/living)) apply_hit_effect(hit_atom, hit_zone = ran_zone(TT.target_zone, 30))//more likely to hit the zone you target! - else - ..() + ..() /obj/item/melee/baton/proc/set_status(newstatus, mob/user) if(bcell && bcell.charge >= hitcost) @@ -129,13 +134,20 @@ status = s update_icon() -/obj/item/melee/baton/attack(mob/M, mob/user) - if(status && (MUTATION_CLUMSY in user.mutations) && prob(50)) +/obj/item/melee/baton/use_before(mob/M, mob/user) + . = FALSE + if (!istype(M)) + return FALSE + if (status && (MUTATION_CLUMSY in user.mutations) && prob(50)) to_chat(user, SPAN_DANGER("You accidentally hit yourself with the [src]!")) user.Weaken(30) deductcharge(hitcost) - return - return ..() + return TRUE + if (user.a_intent != I_HURT) //If not harm-batonning; bypass use_weapon entirely and just apply stun effect. Set cooldowns since bypassing use_weapon. + user.setClickCooldown(user.get_attack_speed(src)) + user.do_attack_animation(M) + apply_hit_effect(M, user, user.zone_sel? user.zone_sel.selecting : ran_zone()) + return TRUE /obj/item/melee/baton/apply_hit_effect(mob/living/target, mob/living/user, hit_zone) if(isrobot(target)) @@ -147,42 +159,40 @@ if(ishuman(target)) var/mob/living/carbon/human/H = target affecting = H.get_organ(hit_zone) - var/abuser = user ? "" : "by [user]" - if(user && user.a_intent == I_HURT) - . = ..() - if(.) - return + var/abuser = user ? "" : "by \the [user]" + if (user && user.a_intent == I_HURT) + if (!..()) + return FALSE //whacking someone causes a much poorer electrical contact than deliberately prodding them. stun *= 0.5 - if(status) //Checks to see if the stunbaton is on. + if (status) //Checks to see if the stunbaton is on. agony *= 0.5 //whacking someone causes a much poorer contact than prodding them. else agony = 0 //Shouldn't really stun if it's off, should it? //we can't really extract the actual hit zone from ..(), unfortunately. Just act like they attacked the area they intended to. - else if(!status) - if(affecting) - target.visible_message(SPAN_WARNING("[target] has been prodded in the [affecting.name] with [src][abuser]. Luckily it was off.")) + else if (!status) + if (affecting) + target.visible_message(SPAN_WARNING("\The [target] has been prodded in the \the [affecting.name] with \the [src][abuser]. Luckily \the [src] was off.")) else - target.visible_message(SPAN_WARNING("[target] has been prodded with [src][abuser]. Luckily it was off.")) + target.visible_message(SPAN_WARNING("\The [target] has been prodded with \the[src][abuser]. Luckily \the [src] was off.")) else - if(affecting) - target.visible_message(SPAN_DANGER("[target] has been prodded in the [affecting.name] with [src]!")) + if (affecting) + target.visible_message(SPAN_DANGER("\The [target] has been prodded in the \the [affecting.name] with \the [src]!")) else - target.visible_message(SPAN_DANGER("[target] has been prodded with [src][abuser]!")) + target.visible_message(SPAN_DANGER("\The [target] has been prodded with \the [src][abuser]!")) playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) //stun effects - if(status) + if (status) target.stun_effect_act(stun, agony, hit_zone, src) msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].") deductcharge(hitcost) - if(ishuman(target)) + if (ishuman(target)) var/mob/living/carbon/human/H = target H.forcesay(GLOB.hit_appends) - - return 1 + return TRUE /obj/item/melee/baton/emp_act(severity) if(bcell) @@ -193,10 +203,11 @@ /obj/item/melee/baton/robot bcell = null hitcost = 20 + atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_TOOLS // Addition made by Techhead0, thanks for fullfilling the todo! /obj/item/melee/baton/robot/examine_cell(mob/user) - to_chat(user, SPAN_NOTICE("The baton is running off an external power supply.")) + return SPAN_NOTICE("The baton is running off an external power supply.") // Override proc for the stun baton module, found in PC Security synthetics // Refactored to fix #14470 - old proc defination increased the hitcost beyond @@ -212,9 +223,6 @@ add_fingerprint(user) return 0 -/obj/item/melee/baton/robot/attackby(obj/item/W, mob/user) - return - /obj/item/melee/baton/robot/apply_hit_effect(mob/living/target, mob/living/user, hit_zone) update_cell(isrobot(user) ? user : null) // update the status before we apply the effects return ..() @@ -237,7 +245,7 @@ /obj/item/melee/baton/robot/electrified_arm/on_update_icon() if(status) icon_state = "electrified_arm_active" - set_light(0.4, 0.1, 1, 2, "#006aff") + set_light(1.5, 2, "#006aff") else icon_state = "electrified_arm" set_light(0) diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index a6c3d0be39131..a1444e5af9afb 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -1,33 +1,17 @@ -/* Surgery Tools - * Contains: - * Retractor - * Hemostat - * Cautery - * Surgical Drill - * Scalpel - * Circular Saw - */ - -/* - * Retractor - */ /obj/item/retractor name = "retractor" desc = "Used to separate the edges of a surgical incision to get to the juicy organs inside." - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/surgery_tools.dmi' icon_state = "retractor" matter = list(MATERIAL_STEEL = 10000, MATERIAL_GLASS = 5000) obj_flags = OBJ_FLAG_CONDUCTIBLE w_class = ITEM_SIZE_SMALL origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) -/* - * Hemostat - */ /obj/item/hemostat name = "hemostat" desc = "A type of forceps used to prevent an incision from bleeding, or to extract objects from the inside of the body." - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/surgery_tools.dmi' icon_state = "hemostat" matter = list(MATERIAL_STEEL = 5000, MATERIAL_GLASS = 2500) obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -35,13 +19,10 @@ origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) attack_verb = list("attacked", "pinched") -/* - * Cautery - */ /obj/item/cautery name = "cautery" desc = "Uses chemicals to quickly cauterize incisions and other small cuts without causing further damage." - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/surgery_tools.dmi' icon_state = "cautery" matter = list(MATERIAL_STEEL = 5000, MATERIAL_GLASS = 2500, MATERIAL_ALUMINIUM = 1000) obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -49,13 +30,10 @@ origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) attack_verb = list("burnt") -/* - * Surgical Drill - */ /obj/item/surgicaldrill name = "surgical drill" desc = "Effectively a very precise hand drill, used to bore holes through bone." - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/surgery_tools.dmi' icon_state = "drill" hitsound = 'sound/weapons/circsawhit.ogg' matter = list(MATERIAL_STEEL = 15000, MATERIAL_GLASS = 10000) @@ -65,14 +43,9 @@ origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1) attack_verb = list("drilled") -/* - * Scalpel - */ /obj/item/scalpel - name = "scalpel" - desc = "A tiny and extremely sharp steel cutting tool used for surgery, dissection, autopsy, and very precise cuts. The cornerstone of any surgical procedure." - icon = 'icons/obj/surgery.dmi' - icon_state = "scalpel" + icon = 'icons/obj/surgery_tools.dmi' + abstract_type = /obj/item/scalpel obj_flags = OBJ_FLAG_CONDUCTIBLE force = 10.0 sharp = TRUE @@ -86,42 +59,33 @@ matter = list(MATERIAL_STEEL = 10000, MATERIAL_GLASS = 5000) attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") -/* - * Researchable Scalpels - */ -/obj/item/scalpel/laser1 - name = "laser scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved." - icon_state = "scalpel_laser1_on" - damtype = DAMAGE_BURN +/obj/item/scalpel/basic + name = "scalpel" + desc = "A tiny and extremely sharp steel cutting tool used for surgery, dissection, autopsy, and very precise cuts. The cornerstone of any surgical procedure." + icon_state = "scalpel" -/obj/item/scalpel/laser2 - name = "laser scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced." - icon_state = "scalpel_laser2_on" - damtype = DAMAGE_BURN - force = 12.0 -/obj/item/scalpel/laser3 +/obj/item/scalpel/laser name = "laser scalpel" - desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!" + desc = "An advanced scalpel augmented with a directed laser, for more precise cutting without blood entering the field." icon_state = "scalpel_laser3_on" + origin_tech = list(TECH_BIO = 5, TECH_MATERIAL = 6, TECH_MAGNET = 4) + matter = list(MATERIAL_STEEL = 12500, MATERIAL_GLASS = 7500, MATERIAL_SILVER = 2000, MATERIAL_GOLD = 1500) damtype = DAMAGE_BURN force = 15.0 -/obj/item/scalpel/manager +/obj/item/scalpel/ims name = "incision management system" desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps." icon_state = "scalpel_manager_on" + origin_tech = list(TECH_BIO = 6, TECH_MATERIAL = 6, TECH_MAGNET = 5, TECH_DATA = 5) + matter = list(MATERIAL_STEEL = 12500, MATERIAL_GLASS = 7500, MATERIAL_SILVER = 1500, MATERIAL_GOLD = 1500, MATERIAL_DIAMOND = 750) force = 7.5 -/* - * Circular Saw - */ /obj/item/circular_saw name = "circular saw" desc = "A small and nasty-looking hand saw used to cut through bone, or in an emergency, pizza." - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/surgery_tools.dmi' icon_state = "saw" hitsound = 'sound/weapons/circsawhit.ogg' obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -135,25 +99,20 @@ attack_verb = list("attacked", "slashed", "sawed", "cut") sharp = TRUE edge = TRUE -/* - * Bone Gel - */ + /obj/item/bonegel name = "bone gel" desc = "A pack of sophisticated chemical gel used to mend fractures and broken bones before setting." - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/surgery_tools.dmi' icon_state = "bone-gel" force = 0 w_class = ITEM_SIZE_SMALL throwforce = 1.0 -/* - * Vascular Recoupler - */ /obj/item/FixOVein - name = "Vascular Recoupler" + name = "vascular recoupler" desc = "Derived from a Vey-Med design, this miniature 3D printer is used to quickly synthetize and thread new organic tissue during surgical procedures." - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/surgery_tools.dmi' icon_state = "fixovein" force = 0 throwforce = 1.0 @@ -162,13 +121,10 @@ w_class = ITEM_SIZE_SMALL var/usage_amount = 10 -/* - * Bone Setter - */ /obj/item/bonesetter name = "bone setter" desc = "A large, heavy clamp for setting dislocated or fractured bones back in place." - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/surgery_tools.dmi' icon_state = "bone setter" force = 8.0 throwforce = 9.0 diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 84ffa952cc3ec..adb5714b28cfa 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -17,17 +17,17 @@ slot_flags = SLOT_BELT force = 10 -/obj/item/melee/classic_baton/attack(mob/M as mob, mob/living/user as mob) +/obj/item/melee/classic_baton/use_before(mob/M as mob, mob/living/user as mob) + . = FALSE if ((MUTATION_CLUMSY in user.mutations) && prob(50)) to_chat(user, SPAN_WARNING("You club yourself over the head.")) user.Weaken(3 * force) - if(ishuman(user)) + if (ishuman(user)) var/mob/living/carbon/human/H = user H.apply_damage(2*force, DAMAGE_BRUTE, BP_HEAD) else user.take_organ_damage(2*force, 0) - return - return ..() + return TRUE //Telescopic baton /obj/item/melee/telebaton @@ -74,22 +74,17 @@ item_state = "telebaton_0" if(length(blood_DNA)) generate_blood_overlay(TRUE) // Force recheck. - overlays.Cut() - overlays += blood_overlay + ClearOverlays() + AddOverlays(blood_overlay) -/obj/item/melee/telebaton/attack(mob/target as mob, mob/living/user as mob) - if(on) - if ((MUTATION_CLUMSY in user.mutations) && prob(50)) - to_chat(user, SPAN_WARNING("You club yourself over the head.")) - user.Weaken(3 * force) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.apply_damage(2*force, DAMAGE_BRUTE, BP_HEAD) - else - user.take_organ_damage(2*force, 0) - return - if(..()) - //playsound(src.loc, "swing_hit", 50, 1, -1) - return - else - return ..() +/obj/item/melee/telebaton/use_before(mob/target as mob, mob/living/user as mob) + . = FALSE + if (on && (MUTATION_CLUMSY in user.mutations) && prob(50)) + to_chat(user, SPAN_WARNING("You club yourself over the head.")) + user.Weaken(3 * force) + if (ishuman(user)) + var/mob/living/carbon/human/H = user + H.apply_damage(2*force, DAMAGE_BRUTE, BP_HEAD) + else + user.take_organ_damage(2*force, 0) + return TRUE diff --git a/code/game/objects/items/weapons/table_flags.dm b/code/game/objects/items/weapons/table_flags.dm index 8597213e8fb5f..a2aae210873d9 100644 --- a/code/game/objects/items/weapons/table_flags.dm +++ b/code/game/objects/items/weapons/table_flags.dm @@ -1,9 +1,9 @@ /obj/item/tableflag name = "table flag" - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/table_flags.dmi' icon_state = "tableflag" force = 0.5 w_class = ITEM_SIZE_SMALL attack_verb = list("whipped") hitsound = 'sound/weapons/towelwhip.ogg' - desc = "The iconic flag of the Sol Central Government, a symbol with many different meanings." \ No newline at end of file + desc = "The iconic flag of the Sol Central Government, a symbol with many different meanings." diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 8093bcd7f6172..15666dfa76184 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -3,13 +3,14 @@ /obj/item/tank/jetpack name = "jetpack (empty)" desc = "The O'Neill Manufacturing VMU-12-U is a tank-based maneuvering pack that uses compressed gas for propulsion in zero-gravity areas. Use with caution." + icon = 'icons/obj/jetpacks.dmi' icon_state = "jetpack" gauge_icon = null w_class = ITEM_SIZE_HUGE tank_size = TANK_SIZE_HUGE item_state = "jetpack" distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - var/datum/effect/effect/system/trail/ion/ion_trail + var/datum/effect/trail/ion/ion_trail var/on = 0.0 var/stabilization_on = 0 var/volume_rate = 500 //Needed for borg jetpack transfer @@ -17,7 +18,7 @@ /obj/item/tank/jetpack/Initialize() . = ..() - ion_trail = new /datum/effect/effect/system/trail/ion() + ion_trail = new /datum/effect/trail/ion() ion_trail.set_up(src) /obj/item/tank/jetpack/Destroy() @@ -27,7 +28,7 @@ /obj/item/tank/jetpack/examine(mob/living/user) . = ..() if(air_contents.total_moles < 5) - to_chat(user, SPAN_DANGER("The meter on \the [src] indicates you are almost out of gas!")) + . += SPAN_DANGER("The meter on [src] indicates you are almost out of gas!") playsound(src.loc, 'sound/effects/caution.ogg', 50, 1, -6) /obj/item/tank/jetpack/verb/toggle_rockets() @@ -70,7 +71,7 @@ qdel(G) -/obj/item/tank/jetpack/ui_action_click() +/obj/item/tank/jetpack/ui_action_click(mob/living/user) toggle() diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 3df251d4402a3..665fff8c8ea9b 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -71,17 +71,17 @@ var/global/list/tank_gauge_cache = list() if (GET_FLAGS(tank_flags, TANK_FLAG_WIRED)) mods += "some wires" if (proxyassembly.assembly) - mods += user.skill_check(SKILL_DEVICES, SKILL_ADEPT) ? "an ignition assembly" : "a device" + mods += user.skill_check(SKILL_DEVICES, SKILL_TRAINED) ? "an ignition assembly" : "a device" if (length(mods)) - to_chat(user, "[english_list(mods)] are attached.") + . += SPAN_NOTICE("[english_list(mods)] are attached.") else return if (distance < 3) if (GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) - to_chat(user, SPAN_WARNING("The emergency relief valve has been welded shut!")) + . += SPAN_WARNING("The emergency relief valve has been welded shut!") else if (GET_FLAGS(tank_flags, TANK_FLAG_FORCED)) - to_chat(user, SPAN_WARNING("The emergency relief valve has been forced open!")) + . += SPAN_WARNING("The emergency relief valve has been forced open!") else return @@ -106,36 +106,99 @@ var/global/list/tank_gauge_cache = list() descriptive = "cold" else descriptive = "bitterly cold" - to_chat(user, SPAN_ITALIC("\The [src] feels [descriptive].")) + . += SPAN_NOTICE("[src] feels [descriptive].") + +/obj/item/tank/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + add_fingerprint(user) + user.visible_message( + SPAN_ITALIC("[user] starts to use [tool] on [src]."), + SPAN_ITALIC("You start to force [src]'s emergency relief valve with [tool]."), + SPAN_ITALIC("You can hear metal scratching on metal."), + range = 5 + ) + if(GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) + balloon_alert(user, "клапан заварен!") + return + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_ATMOS, do_flags = DO_REPAIR_CONSTRUCT) || GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) + return + FLIP_FLAGS(tank_flags, TANK_FLAG_FORCED) + to_chat(user, SPAN_NOTICE("You finish forcing the valve [GET_FLAGS(tank_flags, TANK_FLAG_FORCED) ? "open" : "closed"].")) + +/obj/item/tank/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + add_fingerprint(user) + + if(!GET_FLAGS(tank_flags, TANK_FLAG_WIRED)) + to_chat(user, SPAN_NOTICE("There are no wires to cut!")) + return + + if(!proxyassembly.assembly) + if(!tool.use_as_tool(src, user, 1 SECONDS, volume = 50, skill_path = SKILL_DEVICES, do_flags = DO_PUBLIC_UNIQUE)) + return + to_chat(user, SPAN_NOTICE("You quickly clip the wire from the tank.")) + CLEAR_FLAGS(tank_flags, TANK_FLAG_WIRED) + update_icon(TRUE) + return + + to_chat(user, SPAN_NOTICE("You carefully begin clipping the wires that attach to the tank.")) + if(!tool.use_as_tool(src, user, 10 SECONDS, volume = 50, skill_path = SKILL_DEVICES, do_flags = DO_REPAIR_CONSTRUCT)) + to_chat(user, SPAN_DANGER("You slip and bump the igniter!")) + if(prob(85)) + proxyassembly.receive_signal() + return + + CLEAR_FLAGS(tank_flags, TANK_FLAG_WIRED) + to_chat(user, SPAN_NOTICE("You cut the wire and remove the device.")) + var/obj/item/device/assembly_holder/assy = proxyassembly.assembly + if(assy.a_left && assy.a_right) + assy.dropInto(usr.loc) + assy.master = null + proxyassembly.assembly = null + else + if(!proxyassembly.assembly.a_left) + assy.a_right.dropInto(usr.loc) + assy.a_right.holder = null + assy.a_right = null + proxyassembly.assembly = null + qdel(assy) + update_icon(TRUE) + +/obj/item/tank/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + var/obj/item/weldingtool/WT = tool + if(GET_FLAGS(tank_flags, TANK_FLAG_FORCED)) + balloon_alert(user, "нужно закрыть клапан!") + return + if(GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) + balloon_alert(user, "клапан уже заварен!") + return + if(!tool.tool_start_check(user, 1)) + return + + add_fingerprint(user) + balloon_alert(user, "заваривание клапана") + if(!tool.use_as_tool(src, user, 4 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_PUBLIC_UNIQUE)) + GLOB.bombers += "[key_name(user)] attempted to weld a [src]. [air_contents.temperature-T0C]" + log_and_message_admins("attempted to weld a [src]. [air_contents.temperature-T0C]", user) + if(WT.welding) + to_chat(user, SPAN_DANGER("You accidentally rake [tool] across [src]!")) + maxintegrity -= rand(2,6) + integrity = min(integrity,maxintegrity) + air_contents.add_thermal_energy(rand(2000,50000)) + return + + to_chat(user, "[SPAN_NOTICE("You carefully weld [src] emergency pressure relief valve shut.")][SPAN_WARNING(" [src] may now rupture under pressure!")]") + SET_FLAGS(tank_flags, TANK_FLAG_WELDED) + CLEAR_FLAGS(tank_flags, TANK_FLAG_LEAKING) /obj/item/tank/attackby(obj/item/W, mob/user) - ..() if (istype(loc, /obj/item/assembly)) icon = loc if (istype(W, /obj/item/device/scanner/gas)) return - if (isScrewdriver(W)) - add_fingerprint(user) - user.visible_message( - SPAN_ITALIC("\The [user] starts to use \the [W] on \the [src]."), - SPAN_ITALIC("You start to force \the [src]'s emergency relief valve with \the [W]."), - SPAN_ITALIC("You can hear metal scratching on metal."), - range = 5 - ) - if (GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) - to_chat(user, SPAN_WARNING("The valve is stuck. You can't move it at all!")) - return - var/reduction = round(user.get_skill_value(SKILL_ATMOS) * 0.5) //0,1,1,2,2 - if (do_after(user, (5 - reduction) SECONDS, src, DO_PUBLIC_UNIQUE)) - if (GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) - to_chat(user, SPAN_WARNING("The valve is stuck. You can't move it at all!")) - return - FLIP_FLAGS(tank_flags, TANK_FLAG_FORCED) - to_chat(user, SPAN_NOTICE("You finish forcing the valve [GET_FLAGS(tank_flags, TANK_FLAG_FORCED) ? "open" : "closed"].")) - return - if (istype(W,/obj/item/latexballon)) add_fingerprint(user) var/obj/item/latexballon/LB = W @@ -143,60 +206,23 @@ var/global/list/tank_gauge_cache = list() if(isCoil(W)) if (GET_FLAGS(tank_flags, TANK_FLAG_WIRED)) - to_chat(user, SPAN_WARNING("\The [src] is already wired.")) + to_chat(user, SPAN_WARNING("[src] is already wired.")) else add_fingerprint(user) var/obj/item/stack/cable_coil/C = W var/single = C.get_amount() == 1 if(C.use(1)) SET_FLAGS(tank_flags, TANK_FLAG_WIRED) - to_chat(user, SPAN_NOTICE("You attach [single ? "" : "some of "]\the [C] to \the [src].")) + to_chat(user, SPAN_NOTICE("You attach [single ? "" : "some of "][C] to [src].")) update_icon(TRUE) return - if(isWirecutter(W)) - add_fingerprint(user) - if(GET_FLAGS(tank_flags, TANK_FLAG_WIRED) && proxyassembly.assembly) - - to_chat(user, SPAN_NOTICE("You carefully begin clipping the wires that attach to the tank.")) - if(do_after(user, 10 SECONDS, src)) - CLEAR_FLAGS(tank_flags, TANK_FLAG_WIRED) - to_chat(user, SPAN_NOTICE("You cut the wire and remove the device.")) - - var/obj/item/device/assembly_holder/assy = proxyassembly.assembly - if(assy.a_left && assy.a_right) - assy.dropInto(usr.loc) - assy.master = null - proxyassembly.assembly = null - else - if(!proxyassembly.assembly.a_left) - assy.a_right.dropInto(usr.loc) - assy.a_right.holder = null - assy.a_right = null - proxyassembly.assembly = null - qdel(assy) - update_icon(TRUE) - - else - to_chat(user, SPAN_DANGER("You slip and bump the igniter!")) - if(prob(85)) - proxyassembly.receive_signal() - - else if(GET_FLAGS(tank_flags, TANK_FLAG_WIRED)) - if(do_after(user, 1 SECOND, src, DO_PUBLIC_UNIQUE)) - to_chat(user, SPAN_NOTICE("You quickly clip the wire from the tank.")) - CLEAR_FLAGS(tank_flags, TANK_FLAG_WIRED) - update_icon(TRUE) - - else - to_chat(user, SPAN_NOTICE("There are no wires to cut!")) - if(istype(W, /obj/item/device/assembly_holder)) if(GET_FLAGS(tank_flags, TANK_FLAG_WIRED)) add_fingerprint(user) - to_chat(user, SPAN_NOTICE("You begin attaching the assembly to \the [src].")) + to_chat(user, SPAN_NOTICE("You begin attaching the assembly to [src].")) if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, SPAN_NOTICE("You finish attaching the assembly to \the [src].")) + to_chat(user, SPAN_NOTICE("You finish attaching the assembly to [src].")) GLOB.bombers += "[key_name(user)] attached an assembly to a wired [src]. Temp: [air_contents.temperature-T0C]" log_and_message_admins("attached an assembly to a wired [src]. Temp: [air_contents.temperature-T0C]", user) assemble_bomb(W,user) @@ -205,117 +231,61 @@ var/global/list/tank_gauge_cache = list() else to_chat(user, SPAN_NOTICE("You need to wire the device up first.")) - if(isWelder(W)) - var/obj/item/weldingtool/WT = W - if (GET_FLAGS(tank_flags, TANK_FLAG_FORCED)) - to_chat(user, SPAN_WARNING("\The [src]'s emergency relief valve must be closed before you can weld it shut!")) - return - if(WT.remove_fuel(1,user)) - add_fingerprint(user) - if(!GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) - to_chat(user, SPAN_NOTICE("You begin welding the \the [src] emergency pressure relief valve.")) - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, "[SPAN_NOTICE("You carefully weld \the [src] emergency pressure relief valve shut.")][SPAN_WARNING(" \The [src] may now rupture under pressure!")]") - SET_FLAGS(tank_flags, TANK_FLAG_WELDED) - CLEAR_FLAGS(tank_flags, TANK_FLAG_LEAKING) - else - GLOB.bombers += "[key_name(user)] attempted to weld a [src]. [air_contents.temperature-T0C]" - log_and_message_admins("attempted to weld a [src]. [air_contents.temperature-T0C]", user) - if(WT.welding) - to_chat(user, SPAN_DANGER("You accidentally rake \the [W] across \the [src]!")) - maxintegrity -= rand(2,6) - integrity = min(integrity,maxintegrity) - air_contents.add_thermal_energy(rand(2000,50000)) - else - to_chat(user, SPAN_NOTICE("The emergency pressure relief valve has already been welded.")) - -/obj/item/tank/attack_self(mob/user as mob) - add_fingerprint(user) - if (!air_contents) - return - ui_interact(user) + . = ..() -// There's GOT to be a better way to do this - if (proxyassembly.assembly) +/obj/item/tank/attack_self(mob/user) + tgui_interact(user) + // There's GOT to be a better way to do this + if(proxyassembly.assembly) proxyassembly.assembly.attack_self(user) -/obj/item/tank/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) - var/mob/living/carbon/location = null +/obj/item/tank/tgui_state(mob/user) + return GLOB.default_state - if(istype(loc, /obj/item/rig)) // check for tanks in rigs - if(istype(loc.loc, /mob/living/carbon)) - location = loc.loc - else if(istype(loc, /mob/living/carbon)) - location = loc +/obj/item/tank/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Tank", name) + ui.open() - var/using_internal - if(istype(location)) - if(location.internal==src) - using_internal = 1 +/obj/item/tank/tgui_data(mob/user) + var/list/data = list() - // this is the data which will be sent to the ui - var/data[0] data["tankPressure"] = round(air_contents && air_contents.return_pressure() ? air_contents.return_pressure() : 0) data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) data["defaultReleasePressure"] = round(initial(distribute_pressure)) data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) - data["valveOpen"] = using_internal ? 1 : 0 - data["maskConnected"] = 0 - - if(istype(location)) - var/mask_check = 0 - - if(location.internal == src) // if tank is current internal - mask_check = 1 - else if(src in location) // or if tank is in the mobs possession - if(!location.internal) // and they do not have any active internals - mask_check = 1 - else if(istype(loc, /obj/item/rig) && (loc in location)) // or the rig is in the mobs possession - if(!location.internal) // and they do not have any active internals - mask_check = 1 - - if(mask_check) - if(location.wear_mask && (location.wear_mask.item_flags & ITEM_FLAG_AIRTIGHT)) - data["maskConnected"] = 1 - else if(istype(location, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = location - if(H.head && (H.head.item_flags & ITEM_FLAG_AIRTIGHT)) - data["maskConnected"] = 1 - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "tanks.tmpl", "Tank", 500, 300) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) - -/obj/item/tank/Topic(user, href_list, state = GLOB.inventory_state) - ..() - -/obj/item/tank/OnTopic(user, href_list) - if (href_list["dist_p"]) - if (href_list["dist_p"] == "reset") - distribute_pressure = initial(distribute_pressure) - else if (href_list["dist_p"] == "max") - distribute_pressure = TANK_MAX_RELEASE_PRESSURE - else - var/cp = text2num(href_list["dist_p"]) - distribute_pressure += cp - distribute_pressure = min(max(round(distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE) - return TOPIC_REFRESH - - if (href_list["stat"]) - toggle_valve(usr) - return TOPIC_REFRESH + data["maximumPressure"] = round(10 * ONE_ATMOSPHERE) + var/mob/living/carbon/C = user + if(!istype(C)) + C = loc.loc + if(!istype(C)) + return data + data["has_mask"] = C.wear_mask ? TRUE : FALSE + data["connected"] = (C.internal && C.internal == src) ? TRUE : FALSE + + return data + +/obj/item/tank/tgui_act(action, params) + if(..()) + return + . = TRUE + + src.add_fingerprint(usr) + + switch(action) + if("pressure") + var/pressure = params["pressure"] + if(pressure == "reset") + distribute_pressure = initial(distribute_pressure) + if(.) + distribute_pressure = clamp(round(pressure), 0, TANK_MAX_RELEASE_PRESSURE) + return TRUE + if("internals") + toggle_valve(usr) + return TRUE /obj/item/tank/proc/toggle_valve(mob/user) - var/mob/living/carbon/location if(istype(loc,/mob/living/carbon)) location = loc @@ -339,10 +309,10 @@ var/global/list/tank_gauge_cache = list() can_open_valve = 1 if(can_open_valve) - to_chat(user, SPAN_NOTICE("You open \the [src] valve.")) + to_chat(user, SPAN_NOTICE("You open [src] valve.")) location.set_internals(src) else - to_chat(user, SPAN_WARNING("You need something to connect to \the [src].")) + to_chat(user, SPAN_WARNING("You need something to connect to [src].")) /obj/item/tank/remove_air(amount) . = air_contents.remove(amount) @@ -399,7 +369,7 @@ var/global/list/tank_gauge_cache = list() LAZYADD(overlays_to_add, image(icon,"bomb_assembly")) if(proxyassembly.assembly) var/image/bombthing = image(proxyassembly.assembly.icon, proxyassembly.assembly.icon_state) - bombthing.overlays |= proxyassembly.assembly.overlays + bombthing.CopyOverlays(proxyassembly.assembly) bombthing.pixel_y = -1 bombthing.pixel_x = -3 LAZYADD(overlays_to_add, bombthing) @@ -419,7 +389,7 @@ var/global/list/tank_gauge_cache = list() LAZYADD(overlays_to_add, tank_gauge_cache[indicator]) previous_gauge_pressure = gauge_pressure - overlays = overlays_to_add + SetOverlays(overlays_to_add) #undef TANK_IDEAL_PRESSURE @@ -495,7 +465,7 @@ var/global/list/tank_gauge_cache = list() return T.assume_air(air_contents) playsound(get_turf(src), 'sound/weapons/gunshot/shotgun.ogg', 20, 1) - visible_message("[icon2html(src, viewers(get_turf(src)))] [SPAN_DANGER("\The [src] flies apart!")]", SPAN_WARNING("You hear a bang!")) + visible_message("[icon2html(src, viewers(get_turf(src)))] [SPAN_DANGER("[src] flies apart!")]", SPAN_WARNING("You hear a bang!")) T.hotspot_expose(air_contents.temperature, 70, 1) var/strength = 1+((pressure-TANK_LEAK_PRESSURE)/TANK_FRAGMENT_SCALE) @@ -526,7 +496,7 @@ var/global/list/tank_gauge_cache = list() T.assume_air(leaked_gas) if(!GET_FLAGS(tank_flags, TANK_FLAG_LEAKING)) - visible_message("[icon2html(src, viewers(get_turf(src)))] [SPAN_WARNING("\The [src] relief valve flips open with a hiss!")]", "You hear hissing.") + visible_message("[icon2html(src, viewers(get_turf(src)))] [SPAN_WARNING("[src] relief valve flips open with a hiss!")]", "You hear hissing.") playsound(loc, 'sound/effects/spray.ogg', 10, 1, -3) SET_FLAGS(tank_flags, TANK_FLAG_LEAKING) #ifdef FIREDBG @@ -585,7 +555,7 @@ var/global/list/tank_gauge_cache = list() ///////////////////////////////// /obj/item/device/tankassemblyproxy - name = "Tank assembly proxy" + name = "tank assembly proxy" desc = "Used as a stand in to trigger single tank assemblies... but you shouldn't see this." var/obj/item/tank/tank = null var/obj/item/device/assembly_holder/assembly = null diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 110215df5fe95..ca02dce77e57a 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -5,76 +5,76 @@ icon_state = "taperoll" w_class = ITEM_SIZE_SMALL -/obj/item/tape_roll/attack(mob/living/carbon/human/H, mob/user) - if(istype(H)) - if(user.zone_sel.selecting == BP_EYES) - - if(!H.organs_by_name[BP_HEAD]) +/obj/item/tape_roll/use_before(mob/living/carbon/human/H, mob/user) + . = FALSE + if (istype(H)) + if (user.zone_sel.selecting == BP_EYES) + if (!H.organs_by_name[BP_HEAD]) to_chat(user, SPAN_WARNING("\The [H] doesn't have a head.")) - return - if(!H.has_eyes()) + return TRUE + if (!H.has_eyes()) to_chat(user, SPAN_WARNING("\The [H] doesn't have any eyes.")) - return - if(H.glasses) - to_chat(user, SPAN_WARNING("\The [H] is already wearing somethign on their eyes.")) - return - if(H.head && (H.head.body_parts_covered & FACE)) + return TRUE + if (H.glasses) + to_chat(user, SPAN_WARNING("\The [H] is already wearing something on their eyes.")) + return TRUE + if (H.head && (H.head.body_parts_covered & FACE)) to_chat(user, SPAN_WARNING("Remove their [H.head] first.")) - return + return TRUE user.visible_message(SPAN_DANGER("\The [user] begins taping over \the [H]'s eyes!")) - if(!do_after(user, 3 SECONDS, H, DO_PUBLIC_UNIQUE)) - return + if (!do_after(user, 3 SECONDS, H, DO_PUBLIC_UNIQUE)) + return TRUE // Repeat failure checks. - if(!H || !src || !H.organs_by_name[BP_HEAD] || !H.has_eyes() || H.glasses || (H.head && (H.head.body_parts_covered & FACE))) - return + if (!H || !src || !H.organs_by_name[BP_HEAD] || !H.has_eyes() || H.glasses || (H.head && (H.head.body_parts_covered & FACE))) + return TRUE playsound(src, 'sound/effects/tape.ogg',25) user.visible_message(SPAN_DANGER("\The [user] has taped up \the [H]'s eyes!")) H.equip_to_slot_or_del(new /obj/item/clothing/glasses/blindfold/tape(H), slot_glasses) + return TRUE - else if(user.zone_sel.selecting == BP_MOUTH || user.zone_sel.selecting == BP_HEAD) - if(!H.organs_by_name[BP_HEAD]) + else if (user.zone_sel.selecting == BP_MOUTH || user.zone_sel.selecting == BP_HEAD) + if (!H.organs_by_name[BP_HEAD]) to_chat(user, SPAN_WARNING("\The [H] doesn't have a head.")) - return - if(!H.check_has_mouth()) + return TRUE + if (!H.check_has_mouth()) to_chat(user, SPAN_WARNING("\The [H] doesn't have a mouth.")) - return - if(H.wear_mask) + return TRUE + if (H.wear_mask) to_chat(user, SPAN_WARNING("\The [H] is already wearing a mask.")) - return - if(H.head && (H.head.body_parts_covered & FACE)) + return TRUE + if (H.head && (H.head.body_parts_covered & FACE)) to_chat(user, SPAN_WARNING("Remove their [H.head] first.")) - return + return TRUE playsound(src, 'sound/effects/tape.ogg',25) user.visible_message(SPAN_DANGER("\The [user] begins taping up \the [H]'s mouth!")) - if(!do_after(user, 3 SECONDS, H, DO_PUBLIC_UNIQUE)) - return + if (!do_after(user, 3 SECONDS, H, DO_PUBLIC_UNIQUE)) + return TRUE // Repeat failure checks. if(!H || !src || !H.organs_by_name[BP_HEAD] || !H.check_has_mouth() || H.wear_mask || (H.head && (H.head.body_parts_covered & FACE))) - return + return TRUE playsound(src, 'sound/effects/tape.ogg',25) user.visible_message(SPAN_DANGER("\The [user] has taped up \the [H]'s mouth!")) H.equip_to_slot_or_del(new /obj/item/clothing/mask/muzzle/tape(H), slot_wear_mask) + return TRUE else if(user.zone_sel.selecting == BP_R_HAND || user.zone_sel.selecting == BP_L_HAND) playsound(src, 'sound/effects/tape.ogg',25) var/obj/item/handcuffs/cable/tape/T = new(user) - if(!T.place_handcuffs(H, user)) + if (!T.place_handcuffs(H, user)) qdel(T) + return TRUE - else if(user.zone_sel.selecting == BP_CHEST) - if(H.wear_suit && istype(H.wear_suit, /obj/item/clothing/suit/space)) - H.wear_suit.attackby(src, user)//everything is handled by attackby + else if (user.zone_sel.selecting == BP_CHEST) + if (H.wear_suit && istype(H.wear_suit, /obj/item/clothing/suit/space)) + resolve_attackby(H.wear_suit, user)//everything is handled by attackby else to_chat(user, SPAN_WARNING("\The [H] isn't wearing a spacesuit for you to reseal.")) - - else - return ..() - return 1 + return TRUE /obj/item/tape_roll/proc/stick(obj/item/W, mob/user) if(!istype(W, /obj/item/paper) || istype(W, /obj/item/paper/sticky) || !user.unEquip(W)) @@ -110,7 +110,7 @@ W.forceMove(src) icon_state = W.icon_state + "_taped" name = W.name + " (taped)" - overlays = W.overlays + CopyOverlays(W) /obj/item/ducttape/attack_self(mob/user) if(!stuck) @@ -121,10 +121,9 @@ stuck = null qdel(src) -/obj/item/ducttape/afterattack(A, mob/user, flag, params) - +/obj/item/ducttape/use_after(atom/A, mob/living/user, click_parameters) if(!in_range(user, A) || istype(A, /obj/machinery/door) || !stuck) - return + return FALSE var/turf/target_turf = get_turf(A) var/turf/source_turf = get_turf(user) @@ -133,26 +132,27 @@ if(target_turf != source_turf) dir_offset = get_dir(source_turf, target_turf) if(!(dir_offset in GLOB.cardinal)) - to_chat(user, "You cannot reach that from here.")// can only place stuck papers in cardinal directions, to - return // reduce papers around corners issue. + to_chat(user, "You cannot reach that from here.") + return TRUE if(!user.unEquip(src, source_turf)) - return - playsound(src, 'sound/effects/tape.ogg',25) + FEEDBACK_UNEQUIP_FAILURE(user, src) + return TRUE + playsound(src, 'sound/effects/tape.ogg',25) layer = ABOVE_WINDOW_LAYER - if(params) - var/list/mouse_control = params2list(params) - if(mouse_control["icon-x"]) - pixel_x = text2num(mouse_control["icon-x"]) - 16 + if(click_parameters) + if(click_parameters["icon-x"]) + pixel_x = text2num(click_parameters["icon-x"]) - 16 if(dir_offset & EAST) pixel_x += 32 else if(dir_offset & WEST) pixel_x -= 32 - if(mouse_control["icon-y"]) - pixel_y = text2num(mouse_control["icon-y"]) - 16 + if(click_parameters["icon-y"]) + pixel_y = text2num(click_parameters["icon-y"]) - 16 if(dir_offset & NORTH) pixel_y += 32 else if(dir_offset & SOUTH) pixel_y -= 32 + return TRUE diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 0bbf863c0429e..3326663d25316 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -10,8 +10,8 @@ /obj/item/locator name = "locator" desc = "Used to track those with locater implants." - icon = 'icons/obj/locator.dmi' - icon_state = "locator" + icon = 'icons/obj/tools/pinpointer.dmi' + icon_state = "pinoff" var/temp = null var/frequency = 1451 var/broadcasting = null @@ -60,7 +60,7 @@ Frequency: if (sr) src.temp += "Located Beacons:
    " - for(var/obj/machinery/tele_beacon/W in world) + for(var/obj/machinery/tele_beacon/W as anything in SSmachines.get_machinery_of_type(/obj/machinery/tele_beacon)) if(!W.functioning()) continue var/turf/tr = get_turf(W) diff --git a/code/game/objects/items/weapons/tools/crowbar.dm b/code/game/objects/items/weapons/tools/crowbar.dm index fdeef23e5e15d..8a7d99bc8c23b 100644 --- a/code/game/objects/items/weapons/tools/crowbar.dm +++ b/code/game/objects/items/weapons/tools/crowbar.dm @@ -1,7 +1,7 @@ /obj/item/crowbar name = "crowbar" desc = "A heavy crowbar of solid steel, good and solid in your hand." - icon = 'icons/obj/tools.dmi' + icon = 'icons/obj/tools/crowbar.dmi' icon_state = "crowbar" obj_flags = OBJ_FLAG_CONDUCTIBLE slot_flags = SLOT_BELT @@ -17,6 +17,8 @@ matter = list(MATERIAL_STEEL = 140) center_of_mass = "x=16;y=20" attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") + tool_behaviour = TOOL_CROWBAR + usesound = DEFAULT_CROWBAR_SOUND /obj/item/crowbar/red icon_state = "red_crowbar" @@ -41,7 +43,7 @@ var/shape = pick(prybar_types) icon_state = "bar[shape]_handle" color = pick(valid_colours) - overlays += overlay_image(icon, "bar[shape]_hardware", flags=RESET_COLOR) + AddOverlays(overlay_image(icon, "bar[shape]_hardware", flags=RESET_COLOR)) . = ..() /obj/item/crowbar/emergency_forcing_tool @@ -64,11 +66,3 @@ else force = initial(force) . = ..() - -/obj/item/crowbar/emergency_forcing_tool/IsCrowbar() - if(ismob(loc)) - var/mob/M = loc - if(M.a_intent && M.a_intent == I_HURT) - return FALSE - - return TRUE diff --git a/code/game/objects/items/weapons/tools/screwdriver.dm b/code/game/objects/items/weapons/tools/screwdriver.dm index 9a361a3f7db66..db354d562ca6f 100644 --- a/code/game/objects/items/weapons/tools/screwdriver.dm +++ b/code/game/objects/items/weapons/tools/screwdriver.dm @@ -1,7 +1,7 @@ /obj/item/screwdriver name = "screwdriver" desc = "Your archetypal flathead screwdriver, with a nice, heavy polymer handle." - icon = 'icons/obj/tools.dmi' + icon = 'icons/obj/tools/screwdriver.dmi' icon_state = "screwdriver_preview" item_state = "screwdriver" obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -16,6 +16,9 @@ attack_verb = list("stabbed") lock_picking_level = 5 sharp = TRUE + item_flags = ITEM_FLAG_CAN_HIDE_IN_SHOES + tool_behaviour = TOOL_SCREWDRIVER + usesound = DEFAULT_SCREWDRIVER_SOUND var/build_from_parts = TRUE var/valid_colours = list(COLOR_RED, COLOR_CYAN_BLUE, COLOR_PURPLE, COLOR_CHESTNUT, COLOR_GREEN, COLOR_TEAL, COLOR_ASSEMBLY_YELLOW, COLOR_BOTTLE_GREEN, COLOR_VIOLET, COLOR_GRAY80, COLOR_GRAY20) @@ -24,16 +27,7 @@ if(build_from_parts) icon_state = "screwdriver_handle" color = pick(valid_colours) - overlays += overlay_image(icon, "screwdriver_hardware", flags=RESET_COLOR) + AddOverlays(overlay_image(icon, "screwdriver_hardware", flags=RESET_COLOR)) if (prob(75)) src.pixel_y = rand(0, 16) . = ..() - -/obj/item/screwdriver/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M) || user.a_intent == "help") - return ..() - if(user.zone_sel.selecting != BP_EYES && user.zone_sel.selecting != BP_HEAD) - return ..() - if((MUTATION_CLUMSY in user.mutations) && prob(50)) - M = user - return eyestab(M,user) \ No newline at end of file diff --git a/code/game/objects/items/weapons/tools/swapper.dm b/code/game/objects/items/weapons/tools/swapper.dm new file mode 100644 index 0000000000000..0504f2184787f --- /dev/null +++ b/code/game/objects/items/weapons/tools/swapper.dm @@ -0,0 +1,108 @@ +#define BOLT_HEAD "bolt head" +#define CUTTER_HEAD "cutting head" +#define PRY_HEAD "prying head" +#define PULSE_HEAD "electrode head" +#define SCREW_HEAD "screw head" + +/obj/item/swapper + abstract_type = /obj/item/swapper + name = "the concept of a tool that can swap between multiple heads" + desc = "This is a master item, berate the admin or mapper that spawned this!" + icon = 'icons/obj/tools/swapper.dmi' + var/icon_stem = null + icon_state = "crowbar" + item_state = null + obj_flags = OBJ_FLAG_CONDUCTIBLE + slot_flags = SLOT_BELT + force = 4.0 + w_class = ITEM_SIZE_SMALL + throwforce = 5.0 + throw_speed = 3 + throw_range = 5 + attack_verb = list("poked") + sharp = TRUE + edge = FALSE + var/list/tool_list = list(BOLT_HEAD, CUTTER_HEAD, PULSE_HEAD, PRY_HEAD, SCREW_HEAD) + var/active_tool = BOLT_HEAD + var/previous_tool = 1 + tool_behaviour = TOOL_WRENCH + usesound = DEFAULT_WRENCH_SOUND + +/obj/item/swapper/istool() + return TRUE + +/obj/item/swapper/attack_self(mob/user) + var/tool_index = tool_list.Find(active_tool) + previous_tool = tool_index + tool_index = tool_index + 1 + if (tool_index > length(tool_list)) + tool_index = 1 + active_tool = tool_list[tool_index] + to_chat(user, SPAN_NOTICE("You attach the [active_tool] to [src].")) + playsound(src, 'sound/items/Ratchet.ogg', 10, 1) + update_icon() + if (active_tool == PRY_HEAD || PULSE_HEAD) //this is mostly to stop people accidentally engraving reinforced walls + sharp = FALSE + else + sharp = TRUE + if (active_tool == CUTTER_HEAD) + edge = TRUE + sharp = TRUE + else + edge = FALSE + switch(active_tool) + if(PRY_HEAD) + change_tool_behaviour(TOOL_CROWBAR) + if(PULSE_HEAD) + change_tool_behaviour(TOOL_MULTITOOL) + if(SCREW_HEAD) + change_tool_behaviour(TOOL_SCREWDRIVER) + if(CUTTER_HEAD) + change_tool_behaviour(TOOL_WIRECUTTER) + if(BOLT_HEAD) + change_tool_behaviour(TOOL_WRENCH) + + +/obj/item/swapper/on_update_icon() + CutOverlays("[icon_state]_[replacetext_char((tool_list[previous_tool]), " ", "_")]") + + AddOverlays("[icon_state]_[replacetext_char(active_tool, " ", "_")]") + +/obj/item/swapper/power_drill + name = "hand drill" + desc = "The Xion Industries DF692 is a cordless drill driver that uses a series of dynamos and other power generation technologies to have effectively zero power consumption. Screw and bolt heads included." + active_tool = SCREW_HEAD + icon_state = "p_drill" + item_state = "power_drill" + throw_speed = 2 + throw_range = 3//it's heavier than a screw driver/wrench, so it can't be thrown as far + attack_verb = list("drilled", "stabbed") + w_class = ITEM_SIZE_NORMAL + force = 12.0 + throwforce = 5.0 + center_of_mass = "x=16;y=7" + hitsound = 'sound/weapons/circsawhit.ogg' + toolspeed = 0.5 + lock_picking_level = 2 + origin_tech = list(TECH_ENGINEERING = 4, TECH_POWER = 4) + matter = list(MATERIAL_STEEL = 75, MATERIAL_PLASTIC = 1000) + tool_list = list(BOLT_HEAD, SCREW_HEAD) + +/obj/item/swapper/jaws_of_life + name = "hydraulic prying tool" + desc = "The Xion Industries EVAHT6 is a hydraulic rescue tool that uses several advances in pumping technology to pry apart or cut metal beams with kilonewtons of force from an integrated water supply. Prying and cutting heads included." + active_tool = PRY_HEAD + icon_state = "hydraulicprytool" + item_state = "toolbox_yellow" + throw_speed = 1 + throw_range = 2 + attack_verb = list("crushed", "sliced") + w_class = ITEM_SIZE_NORMAL + force = 20.0 + attack_cooldown = 30.0 + throwforce = 8.0 + hitsound = 'sound/items/jaws_pry.ogg' + toolspeed = 0.5 + origin_tech = list(TECH_ENGINEERING = 5, TECH_POWER = 4) + matter = list(MATERIAL_STEEL = 1000, MATERIAL_PLASTIC = 500) + tool_list = list(PRY_HEAD, CUTTER_HEAD) diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm index 96de34909af58..4aa1f4ce59b5d 100644 --- a/code/game/objects/items/weapons/tools/weldingtool.dm +++ b/code/game/objects/items/weapons/tools/weldingtool.dm @@ -1,6 +1,6 @@ /obj/item/weldingtool name = "welding tool" - icon = 'icons/obj/tools.dmi' + icon = 'icons/obj/tools/welder.dmi' icon_state = "welder" item_state = "welder" desc = "A portable welding gun with a port for attaching fuel tanks." @@ -15,6 +15,8 @@ w_class = ITEM_SIZE_SMALL matter = list(MATERIAL_STEEL = 70, MATERIAL_GLASS = 30) origin_tech = list(TECH_ENGINEERING = 1) + tool_behaviour = TOOL_WELDER + usesound = DEFAULT_WELDER_SOUND var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2) var/status = 1 //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower) @@ -31,6 +33,7 @@ update_icon() . = ..() + RegisterSignal(src, COMSIG_TOOL_ATOM_ACTED_PRIMARY(TOOL_WELDER), TYPE_PROC_REF(/atom, update_icon)) /obj/item/weldingtool/Destroy() if(welding) @@ -43,24 +46,26 @@ /obj/item/weldingtool/examine(mob/user, distance) . = ..() if (!tank) - to_chat(user, "There is no [welding_resource] source attached.") + . += SPAN_NOTICE("There is no [welding_resource] source attached.") else - to_chat(user, (distance <= 1 ? "It has [get_fuel()] [welding_resource] remaining. " : "") + "[tank] is attached.") + . += SPAN_NOTICE((distance <= 1 ? "It has [get_fuel()] [welding_resource] remaining. " : "") + "[tank] is attached.") + +/obj/item/weldingtool/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 10, do_flags = DO_REPAIR_CONSTRUCT)) + return + status = !status + if(status) + to_chat(user, SPAN_NOTICE("You secure the welder.")) + else + to_chat(user, SPAN_NOTICE("The welder can now be attached and modified.")) + add_fingerprint(user) /obj/item/weldingtool/attackby(obj/item/W as obj, mob/user as mob) if(welding) to_chat(user, SPAN_DANGER("Stop welding first!")) return - if(isScrewdriver(W)) - status = !status - if(status) - to_chat(user, SPAN_NOTICE("You secure the welder.")) - else - to_chat(user, SPAN_NOTICE("The welder can now be attached and modified.")) - src.add_fingerprint(user) - return - if((!status) && (istype(W,/obj/item/stack/material/rods))) var/obj/item/stack/material/rods/R = W R.use(1) @@ -73,7 +78,7 @@ if (istype(W, /obj/item/welder_tank)) if (tank) - to_chat(user, SPAN_WARNING("\The [src] already has a tank attached - remove it first.")) + to_chat(user, SPAN_WARNING("[src] already has a tank attached - remove it first.")) return if (user.get_active_hand() != src && user.get_inactive_hand() != src) to_chat(user, SPAN_WARNING("You must hold the welder in your hands to attach a tank.")) @@ -81,9 +86,10 @@ if (!user.unEquip(W, src)) return tank = W - user.visible_message("[user] slots \a [W] into \the [src].", "You slot \a [W] into \the [src].") + user.visible_message("[user] slots [W] into [src].", "You slot [W] into [src].") w_class = tank.size_in_use force = tank.unlit_force + playsound(src, 'sound/items/cap_close.ogg', 10, 1) update_icon() return @@ -93,11 +99,12 @@ /obj/item/weldingtool/attack_hand(mob/user as mob) if (tank && user.get_inactive_hand() == src) if (!welding) - user.visible_message("[user] removes \the [tank] from \the [src].", "You remove \the [tank] from \the [src].") + user.visible_message("[user] removes [tank] from [src].", "You remove [tank] from [src].") user.put_in_hands(tank) tank = null w_class = initial(w_class) force = initial(force) + playsound(src, 'sound/items/cap_open.ogg', 10, 1) update_icon() else to_chat(user, SPAN_DANGER("Turn off the welder first!")) @@ -111,27 +118,23 @@ /obj/item/weldingtool/Process() if(welding) - if((!waterproof && submerged()) || !remove_fuel(0.05)) + if((!waterproof && submerged())) setWelding(0) -/obj/item/weldingtool/afterattack(obj/O, mob/user, proximity) - if(!proximity) - return - +/obj/item/weldingtool/use_after(obj/O, mob/living/user) if(istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1 && !welding) if(!tank) - to_chat(user, SPAN_WARNING("\The [src] has no tank attached!")) - return + to_chat(user, SPAN_WARNING("[src] has no tank attached!")) + return TRUE if (!tank.can_refuel) - to_chat(user, SPAN_WARNING("\The [tank] does not have a refuelling port.")) - return + to_chat(user, SPAN_WARNING("[tank] does not have a refuelling port.")) + return TRUE O.reagents.trans_to_obj(tank, tank.max_fuel) - to_chat(user, SPAN_NOTICE("You refuel \the [tank].")) + to_chat(user, SPAN_NOTICE("You refuel [tank].")) playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) - return + return TRUE if(welding) - remove_fuel(1) var/turf/location = get_turf(user) if(isliving(O)) var/mob/living/L = O @@ -142,42 +145,47 @@ location.hotspot_expose(700, 50, 1) return -/obj/item/weldingtool/attack_self(mob/user as mob) - setWelding(!welding, usr) +/obj/item/weldingtool/attack_self(mob/user) + setWelding(!welding, user) return //Returns the amount of fuel in the welder /obj/item/weldingtool/proc/get_fuel() return tank ? tank.reagents.get_reagent_amount(/datum/reagent/fuel) : 0 +/// Turns off the welder if there is no more fuel (does this really need to be its own proc?) +/obj/item/weldingtool/proc/check_fuel(mob/user) + if(get_fuel() <= 0 && welding) + setWelding(FALSE, user) + return FALSE + return TRUE -/** - * Checks if the tool can be used for the given amount of fuel without actually using it. - * - * Returns boolean. - */ -/obj/item/weldingtool/proc/can_use(amount = 1, mob/user = null, interaction_message = "to complete this task.", silent = FALSE) - if (!isOn()) - if (!silent && user) - to_chat(user, SPAN_WARNING("\The [src] must be turned on [interaction_message]")) +/// Uses fuel from the welding tool. +/obj/item/weldingtool/use(used = 0) + if(!isOn() || !check_fuel()) return FALSE - if (get_fuel() < amount) - if (!silent && user) - to_chat(user, SPAN_WARNING("You need at least [amount] unit\s of [welding_resource] [interaction_message]")) + + if(get_fuel() >= used) + burn_fuel(used) + check_fuel() + return TRUE + else return FALSE - return TRUE +/// If welding tool ran out of fuel during a construction task, construction fails. +/obj/item/weldingtool/tool_use_check(mob/living/user, amount) + if(!isOn() || !check_fuel()) + balloon_alert(user, "нужен включенный аппарат!") + return FALSE -//Removes fuel from the welding tool. If a mob is passed, it will perform an eyecheck on the mob. This should probably be renamed to use() -/obj/item/weldingtool/proc/remove_fuel(amount = 1, mob/M = null) - if(!can_use(amount, M)) - return 0 - burn_fuel(amount) - if(M) - M.welding_eyecheck()//located in mob_helpers.dm - set_light(0.7, 2, 5, l_color = COLOR_LIGHT_CYAN) - addtimer(new Callback(src, /atom/proc/update_icon), 5) - return 1 + if(get_fuel() >= amount) + if(user) + user.welding_eyecheck()//located in mob_helpers.dm + set_light(5, 0.7, COLOR_LIGHT_CYAN) + return TRUE + else + balloon_alert(user, "нужно больше топлива!") + return FALSE /obj/item/weldingtool/proc/burn_fuel(amount) if(!tank) @@ -204,7 +212,7 @@ //Returns whether or not the welding tool is currently on. /obj/item/weldingtool/proc/isOn() - return src.welding + return welding /obj/item/weldingtool/get_storage_cost() if(isOn()) @@ -213,12 +221,12 @@ /obj/item/weldingtool/on_update_icon() ..() - overlays.Cut() + ClearOverlays() if(tank) - overlays += image('icons/obj/tools.dmi', "welder_[tank.icon_state]") + AddOverlays(image('icons/obj/tools/welder.dmi', "welder_[tank.icon_state]")) if(welding) - overlays += image('icons/obj/tools.dmi', "welder_on") - set_light(0.6, 0.5, 2.5, l_color =COLOR_PALE_ORANGE) + AddOverlays(image('icons/obj/tools/welder.dmi', "welder_on")) + set_light(2.5, 0.6, l_color =COLOR_PALE_ORANGE) else set_light(0) item_state = welding ? "welder1" : "welder" @@ -235,7 +243,7 @@ if(!welding && !waterproof && submerged()) if(M) - to_chat(M, SPAN_WARNING("You cannot light \the [src] underwater.")) + to_chat(M, SPAN_WARNING("You cannot light [src] underwater.")) return var/turf/T = get_turf(src) @@ -245,7 +253,7 @@ if(M) to_chat(M, SPAN_NOTICE("You switch the [src] on.")) else if(T) - T.visible_message(SPAN_WARNING("\The [src] turns on.")) + T.visible_message(SPAN_WARNING("[src] turns on.")) if (istype(src, /obj/item/weldingtool/electric)) src.force = 11 src.damtype = DAMAGE_SHOCK @@ -253,6 +261,7 @@ src.force = tank.lit_force src.damtype = DAMAGE_BURN welding = 1 + playsound(src, 'sound/items/welderactivate.ogg', 10, 1) update_icon() START_PROCESSING(SSobj, src) else @@ -263,38 +272,55 @@ else if(!set_welding && welding) STOP_PROCESSING(SSobj, src) if(M) - to_chat(M, SPAN_NOTICE("You switch \the [src] off.")) + to_chat(M, SPAN_NOTICE("You switch [src] off.")) else if(T) - T.visible_message(SPAN_WARNING("\The [src] turns off.")) + T.visible_message(SPAN_WARNING("[src] turns off.")) if (istype(src, /obj/item/weldingtool/electric)) src.force = initial(force) else src.force = tank.unlit_force src.damtype = DAMAGE_BRUTE src.welding = 0 + playsound(src, 'sound/items/welderdeactivate.ogg', 10, 1) update_icon() -/obj/item/weldingtool/attack(mob/living/M, mob/living/user, target_zone) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/S = H.organs_by_name[target_zone] +/obj/item/weldingtool/use_before(mob/living/target, mob/living/user, click_parameters) + if (!ishuman(target)) + return FALSE + + var/target_zone = user.zone_sel.selecting + var/mob/living/carbon/human/H = target + var/obj/item/organ/external/S = H.organs_by_name[target_zone] - if(!S || !BP_IS_ROBOTIC(S) || user.a_intent != I_HELP) - return ..() + if (!S || !BP_IS_ROBOTIC(S) || user.a_intent != I_HELP) + return FALSE - if(BP_IS_BRITTLE(S)) - to_chat(user, SPAN_WARNING("\The [M]'s [S.name] is hard and brittle - \the [src] cannot repair it.")) - return 1 + var/list/all_surgeries = GET_SINGLETON_SUBTYPE_MAP(/singleton/surgery_step) + for (var/singleton in all_surgeries) + var/singleton/surgery_step/step = all_surgeries[singleton] + if (step.name && step.tool_quality(src) && step.can_use(user, H, target_zone, src)) + return FALSE - if(!welding) - to_chat(user, SPAN_WARNING("You'll need to turn [src] on to patch the damage on [M]'s [S.name]!")) - return 1 + if (BP_IS_BRITTLE(S)) + to_chat(user, SPAN_WARNING("[target]'s [S.name] is hard and brittle - [src] cannot repair it.")) + return TRUE - if(S.robo_repair(15, DAMAGE_BRUTE, "some dents", src, user)) - remove_fuel(1, user) + if (!tool_start_check(user, 2)) //The surgery check above already returns can_use's feedback. + return TRUE + + if (S.robo_repair(15, DAMAGE_BRUTE, "some dents", src, user)) + use(2) + return TRUE + + else return FALSE + +/obj/item/weldingtool/IsFlameSource() + return isOn() + + +/obj/item/weldingtool/IsHeatSource() + return isOn() ? 3800 : 0 - else - return ..() /obj/item/weldingtool/mini tank = /obj/item/welder_tank/mini @@ -314,7 +340,7 @@ /obj/item/welder_tank name = "\improper welding fuel tank" desc = "An interchangeable fuel tank meant for a welding tool." - icon = 'icons/obj/tools.dmi' + icon = 'icons/obj/tools/welder.dmi' icon_state = "tank_normal" w_class = ITEM_SIZE_SMALL force = 5 @@ -330,16 +356,15 @@ reagents.add_reagent(/datum/reagent/fuel, max_fuel) . = ..() -/obj/item/welder_tank/afterattack(obj/O as obj, mob/user as mob, proximity) - if (!proximity) - return +/obj/item/welder_tank/use_after(obj/O, mob/living/user, click_parameters) if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src, O) <= 1) if (!can_refuel) - to_chat(user, SPAN_DANGER("\The [src] does not have a refuelling port.")) - return + to_chat(user, SPAN_DANGER("[src] does not have a refuelling port.")) + return TRUE O.reagents.trans_to_obj(src, max_fuel) - to_chat(user, SPAN_NOTICE("You refuel \the [src].")) + to_chat(user, SPAN_NOTICE("You refuel [src].")) playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) + return TRUE /obj/item/welder_tank/mini name = "small welding fuel tank" diff --git a/code/game/objects/items/weapons/tools/wirecutter.dm b/code/game/objects/items/weapons/tools/wirecutter.dm index 0388fef02c38b..b5181bd0289dd 100644 --- a/code/game/objects/items/weapons/tools/wirecutter.dm +++ b/code/game/objects/items/weapons/tools/wirecutter.dm @@ -1,7 +1,7 @@ /obj/item/wirecutters name = "wirecutters" desc = "A special pair of pliers with cutting edges. Various brackets and manipulators built into the handle allow it to repair severed wiring." - icon = 'icons/obj/tools.dmi' + icon = 'icons/obj/tools/wirecutter.dmi' icon_state = "cutters_preview" item_state = "cutters" obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -16,6 +16,8 @@ attack_verb = list("pinched", "nipped") sharp = TRUE edge = TRUE + tool_behaviour = TOOL_WIRECUTTER + usesound = DEFAULT_WIRECUTTER_SOUND var/build_from_parts = TRUE var/handle_icon = "cutters_handle" @@ -26,18 +28,17 @@ if(build_from_parts) icon_state = "cutters_handle" color = pick(valid_colours) - overlays += overlay_image(icon, "[hardware_icon]", flags=RESET_COLOR) + AddOverlays(overlay_image(icon, "[hardware_icon]", flags=RESET_COLOR)) . = ..() -/obj/item/wirecutters/attack(mob/living/carbon/C as mob, mob/user as mob) - if(istype(C) && user.a_intent == I_HELP && (C.handcuffed) && (istype(C.handcuffed, /obj/item/handcuffs/cable))) +/obj/item/wirecutters/use_after(mob/living/carbon/C as mob, mob/user as mob) + . = FALSE + if (istype(C) && (C.handcuffed) && (istype(C.handcuffed, /obj/item/handcuffs/cable))) usr.visible_message("\The [usr] cuts \the [C]'s restraints with \the [src]!",\ "You cut \the [C]'s restraints with \the [src]!",\ "You hear cable being cut.") C.handcuffed = null - if(C.buckled && C.buckled.buckle_require_restraints) + if (C.buckled && C.buckled.buckle_require_restraints) C.buckled.unbuckle_mob() C.update_inv_handcuffed() - return - else - ..() \ No newline at end of file + return TRUE diff --git a/code/game/objects/items/weapons/tools/wrench.dm b/code/game/objects/items/weapons/tools/wrench.dm index 3032915282050..c8d98a1a72f71 100644 --- a/code/game/objects/items/weapons/tools/wrench.dm +++ b/code/game/objects/items/weapons/tools/wrench.dm @@ -1,7 +1,7 @@ /obj/item/wrench name = "wrench" desc = "A good, durable combination wrench, with self-adjusting, universal open- and ring-end mechanisms to match a wide variety of nuts and bolts." - icon = 'icons/obj/tools.dmi' + icon = 'icons/obj/tools/wrench.dmi' icon_state = "wrench" item_state = "wrench" obj_flags = OBJ_FLAG_CONDUCTIBLE @@ -13,7 +13,9 @@ matter = list(MATERIAL_STEEL = 150) center_of_mass = "x=17;y=16" attack_verb = list("bashed", "battered", "bludgeoned", "whacked") + tool_behaviour = TOOL_WRENCH + usesound = DEFAULT_WRENCH_SOUND /obj/item/wrench/Initialize() icon_state = "wrench[pick("","_red","_black","_green","_blue")]" - . = ..() \ No newline at end of file + . = ..() diff --git a/code/game/objects/items/weapons/tools_crystal.dm b/code/game/objects/items/weapons/tools_crystal.dm index 35d991ac27962..ed5a7df404b88 100644 --- a/code/game/objects/items/weapons/tools_crystal.dm +++ b/code/game/objects/items/weapons/tools_crystal.dm @@ -3,17 +3,21 @@ desc = "A crystalline welding tool of an alien make." icon_state = "crystal_welder" item_state = "crystal_tool" - icon = 'icons/obj/crystal_tools.dmi' + icon = 'icons/obj/tools/welder.dmi' matter = list(MATERIAL_CRYSTAL = 1250) cell = null fuel_cost_multiplier = 1 - -/obj/item/weldingtool/electric/crystal/attackby(obj/item/W, mob/user) - return + atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_TOOLS /obj/item/weldingtool/electric/crystal/on_update_icon() - icon_state = welding ? "crystal_welder_on" : "crystal_welder" - item_state = welding ? "crystal_tool_lit" : "crystal_tool" + if(welding) + icon_state = "crystal_welder_on" + item_state = "crystal_tool_lit" + set_light(0.6, 0.5, 2.5, l_color = COLOR_LIGHT_CYAN) + else + icon_state = "crystal_welder" + item_state = "crystal_tool" + set_light(0) var/mob/M = loc if(istype(M)) M.update_inv_l_hand() @@ -43,7 +47,7 @@ desc = "A crystalline shearing tool of an alien make." icon_state = "crystal_wirecutter" item_state = "crystal_tool" - icon = 'icons/obj/crystal_tools.dmi' + icon = 'icons/obj/tools/wirecutter.dmi' matter = list(MATERIAL_CRYSTAL = 1250) build_from_parts = FALSE @@ -57,7 +61,7 @@ desc = "A crystalline screwdriving tool of an alien make." icon_state = "crystal_screwdriver" item_state = "crystal_tool" - icon = 'icons/obj/crystal_tools.dmi' + icon = 'icons/obj/tools/screwdriver.dmi' matter = list(MATERIAL_CRYSTAL = 1250) build_from_parts = FALSE @@ -71,7 +75,7 @@ desc = "A crystalline prying tool of an alien make." icon_state = "crystal_crowbar" item_state = "crystal_tool" - icon = 'icons/obj/crystal_tools.dmi' + icon = 'icons/obj/tools/crowbar.dmi' matter = list(MATERIAL_CRYSTAL = 1250) /obj/item/crowbar/crystal/Initialize() @@ -84,7 +88,7 @@ desc = "A crystalline wrenching tool of an alien make." icon_state = "crystal_wrench" item_state = "crystal_tool" - icon = 'icons/obj/crystal_tools.dmi' + icon = 'icons/obj/tools/wrench.dmi' matter = list(MATERIAL_CRYSTAL = 1250) /obj/item/wrench/crystal/Initialize() @@ -97,12 +101,13 @@ desc = "A crystalline energy patterning tool of an alien make." icon_state = "crystal_multitool" item_state = "crystal_tool" - icon = 'icons/obj/crystal_tools.dmi' + icon = 'icons/obj/tools/multitool.dmi' matter = list(MATERIAL_CRYSTAL = 1250) /obj/item/storage/belt/utility/crystal name = "crystalline tool harness" desc = "A segmented belt of strange crystalline material." + icon = 'icons/obj/clothing/obj_belt.dmi' icon_state = "utilitybelt_crystal" item_state = "utilitybelt_crystal" @@ -119,6 +124,7 @@ /obj/item/storage/toolbox/crystal name = "crystalline toolbox" desc = "A translucent toolbox made out of an odd crystalline material that is surprisingly light." + icon = 'icons/obj/tools/toolboxes.dmi' icon_state = "crystal" item_state = "toolbox_crystal" origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 3) diff --git a/code/game/objects/items/weapons/towels.dm b/code/game/objects/items/weapons/towels.dm index 39ebf965dff8b..6e4fcef4e5ff0 100644 --- a/code/game/objects/items/weapons/towels.dm +++ b/code/game/objects/items/weapons/towels.dm @@ -10,6 +10,24 @@ hitsound = 'sound/weapons/towelwhip.ogg' desc = "A soft cotton towel." +/obj/item/towel/equipped(mob/user, slot) + switch(slot) + if(slot_head) + sprite_sheets = list( + SPECIES_VOX = 'icons/mob/species/vox/onmob_head_vox.dmi', + SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_unathi.dmi', + SPECIES_NABBER = 'icons/mob/species/nabber/onmob_head_gas.dmi' + ) + if(slot_belt) + sprite_sheets = list() + if(slot_wear_suit) + sprite_sheets = list( + SPECIES_VOX = 'icons/mob/species/vox/onmob_suit_vox.dmi', + SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_suit_unathi.dmi', + SPECIES_NABBER = 'icons/mob/species/nabber/onmob_suit_gas.dmi' + ) + return ..() + /obj/item/towel/attack_self(mob/living/user as mob) user.visible_message(SPAN_NOTICE("[user] uses [src] to towel themselves off.")) playsound(user, 'sound/weapons/towelwipe.ogg', 25, 1) diff --git a/code/game/objects/items/weapons/traps.dm b/code/game/objects/items/weapons/traps.dm index 3e86b6e75b98d..adde4deb1d54e 100644 --- a/code/game/objects/items/weapons/traps.dm +++ b/code/game/objects/items/weapons/traps.dm @@ -3,7 +3,7 @@ throw_speed = 2 throw_range = 1 gender = PLURAL - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/beartrap.dmi' icon_state = "beartrap0" randpixel = 0 desc = "A mechanically activated leg trap. Low-tech, but reliable. Looks like it could really hurt if you set it off." @@ -17,13 +17,13 @@ return (user.IsAdvancedToolUser() && !issilicon(user) && !user.stat && !user.restrained()) /obj/item/beartrap/user_unbuckle_mob(mob/user as mob) - if(buckled_mob && can_use(user)) + if(buckled_mob && can_use(user) && can_unbuckle(user)) user.visible_message( SPAN_NOTICE("\The [user] begins freeing \the [buckled_mob] from \the [src]."), SPAN_NOTICE("You carefully begin to free \the [buckled_mob] from \the [src]."), SPAN_NOTICE("You hear metal creaking.") ) - if(do_after(user, 6 SECONDS, src, DO_PUBLIC_UNIQUE)) + if(do_after(user, 6 SECONDS, src, DO_PUBLIC_UNIQUE) && can_unbuckle(user)) user.visible_message(SPAN_NOTICE("\The [buckled_mob] has been freed from \the [src] by \the [user].")) unbuckle_mob() anchored = FALSE @@ -80,9 +80,12 @@ return 0 //trap the victim in place - set_dir(L.dir) - buckle_mob(L) - to_chat(L, SPAN_DANGER("The steel jaws of \the [src] bite into you, trapping you in place!")) + if (can_buckle(L)) + set_dir(L.dir) + buckle_mob(L) + to_chat(L, SPAN_DANGER("The steel jaws of \the [src] bite into you, trapping you in place!")) + else + to_chat(L, SPAN_DANGER("The steel jaws of \the [src] bite into you, but fail to hold you in place!")) deployed = 0 /obj/item/beartrap/Crossed(AM as mob|obj) diff --git a/code/game/objects/items/weapons/trays.dm b/code/game/objects/items/weapons/trays.dm index 1e30d60fef3a5..cab6ee8520011 100644 --- a/code/game/objects/items/weapons/trays.dm +++ b/code/game/objects/items/weapons/trays.dm @@ -4,7 +4,7 @@ /obj/item/tray name = "tray" - icon = 'icons/obj/food.dmi' + icon = 'icons/obj/food/food.dmi' icon_state = "tray" desc = "A metal tray to lay food on." force = 5 @@ -23,7 +23,7 @@ /obj/item/tray/attack_self(mob/living/user) if (LAZYLEN(carrying)) var/turf/T = get_turf(user) - overlays.Cut() + ClearOverlays() for (var/obj/item/carried in carrying) carried.dropInto(T) LAZYREMOVE(carrying, carried) @@ -32,16 +32,18 @@ . = ..() // When hitting people with the tray, drop all its items everywhere. You jerk. -/obj/item/tray/attack(mob/living/M, mob/living/user) +/obj/item/tray/use_before(mob/living/M, mob/living/user) + . = FALSE if (user.a_intent != I_HURT) return FALSE - . = ..() + // Drop all the things. All of them. - overlays.Cut() + ClearOverlays() for(var/obj/item/I in carrying) I.dropInto(get_turf(M)) carrying.Remove(I) step(I, pick(NORTH, SOUTH, EAST, WEST, NORTHWEST, NORTHEAST, SOUTHWEST, SOUTHEAST)) + return TRUE // Bash a rolling pin against a tray like a true knight! @@ -104,7 +106,7 @@ if (LAZYLEN(carrying)) if (istype(A, /obj/structure/table)) // If we're a table, prioritize dumping stuff out - overlays.Cut() + ClearOverlays() for (var/obj/item/carried in carrying) carried.dropInto(T) LAZYREMOVE(carrying, carried) @@ -113,7 +115,7 @@ else if (istype(A, /obj/machinery/smartfridge)) var/obj/machinery/smartfridge/fridge = A var/fed_in = 0 - overlays.Cut() + ClearOverlays() for (var/obj/item/carried in carrying) if (fridge.accept_check(carried)) carried.dropInto(fridge) @@ -154,5 +156,5 @@ return var/image/item_image = image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = 30 + I.layer, "pixel_x" = rand(-3, 3), "pixel_y" = rand(-3, 3)) // this line terrifies me item_image.color = I.color - item_image.overlays = I.overlays // Inherit the color and overlays of stored items to make sure they render accurately on the tray - overlays += item_image + item_image.CopyOverlays(I) + AddOverlays(item_image) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index aebf0c0faedd1..0c7e734cd8897 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -14,36 +14,35 @@ /obj/item/nullrod/disrupts_psionics() return src -/obj/item/nullrod/attack(mob/M as mob, mob/living/user as mob) //Paste from old-code to decult with a null rod. - if (user.a_intent == I_HELP) +/obj/item/nullrod/use_before(mob/M as mob, mob/living/user as mob) //Paste from old-code to decult with a null rod. + . = FALSE + if (!istype(M) || user.a_intent == I_HELP) return FALSE admin_attack_log(user, M, "Attacked using \a [src]", "Was attacked with \a [src]", "used \a [src] to attack") - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) user.do_attack_animation(M) //if(user != M) - if(M.mind && LAZYLEN(M.mind.learned_spells)) - M.silence_spells(300) //30 seconds - to_chat(M, SPAN_DANGER("You've been silenced!")) - return - if (!user.IsAdvancedToolUser()) to_chat(user, SPAN_DANGER("You don't have the dexterity to do this!")) - return + return TRUE if ((MUTATION_CLUMSY in user.mutations) && prob(50)) to_chat(user, SPAN_DANGER("The rod slips out of your hand and hits your head.")) user.take_organ_damage(10, 0) user.Paralyse(20) - return + return TRUE + + if (M.mind && LAZYLEN(M.mind.learned_spells)) + M.silence_spells(300) //30 seconds + M.visible_message(SPAN_NOTICE("\The [user] waves \the [src] over \the [M]'s head.")) + to_chat(M, SPAN_DANGER("You've been silenced!")) + return TRUE if(GLOB.cult && iscultist(M)) M.visible_message(SPAN_NOTICE("\The [user] waves \the [src] over \the [M]'s head.")) GLOB.cult.offer_uncult(M) - return - - ..() + return TRUE /obj/item/energy_net name = "energy net" @@ -52,12 +51,12 @@ icon_state = "energynet" throwforce = 0 force = 0 - var/net_type = /obj/effect/energy_net + var/net_type = /obj/energy_net /obj/item/energy_net/safari name = "animal net" desc = "An energized net meant to subdue animals." - net_type = /obj/effect/energy_net/safari + net_type = /obj/energy_net/safari /obj/item/energy_net/dropped() ..() @@ -71,13 +70,13 @@ // This will validate the hit_atom, then spawn an energy_net effect and qdel itself /obj/item/energy_net/proc/try_capture_mob(mob/living/M) - if(!istype(M) || locate(/obj/effect/energy_net) in M.loc) + if(!istype(M) || locate(/obj/energy_net) in M.loc) qdel(src) return FALSE var/turf/T = get_turf(M) if(T) - var/obj/effect/energy_net/net_effect = new net_type(T) + var/obj/energy_net/net_effect = new net_type(T) net_effect.capture_mob(M) qdel(src) @@ -85,7 +84,7 @@ spawn(10) if(src) qdel(src) -/obj/effect/energy_net +/obj/energy_net name = "energy net" desc = "It's a net made of green energy." icon = 'icons/effects/effects.dmi' @@ -103,7 +102,7 @@ var/min_free_time = 50 var/max_free_time = 85 -/obj/effect/energy_net/safari +/obj/energy_net/safari name = "animal net" desc = "An energized net meant to subdue animals." @@ -113,14 +112,14 @@ min_free_time = 5 max_free_time = 10 -/obj/effect/energy_net/teleport +/obj/energy_net/teleport countdown = 60 -/obj/effect/energy_net/Initialize() +/obj/energy_net/Initialize() . = ..() START_PROCESSING(SSobj, src) -/obj/effect/energy_net/Destroy() +/obj/energy_net/Destroy() if(istype(captured, /mob/living/carbon)) if(captured.handcuffed == src) captured.handcuffed = null @@ -130,7 +129,7 @@ captured = null return ..() -/obj/effect/energy_net/Process() +/obj/energy_net/Process() if(temporary) countdown-- if(!captured || captured.buckled != src) @@ -141,7 +140,7 @@ visible_message(SPAN_WARNING("\The [src] fades away!")) qdel(src) -/obj/effect/energy_net/Move() +/obj/energy_net/Move() ..() if(buckled_mob) @@ -150,7 +149,7 @@ countdown = 0 -/obj/effect/energy_net/proc/capture_mob(mob/living/M) +/obj/energy_net/proc/capture_mob(mob/living/M) captured = M if(M.buckled) M.buckled.unbuckle_mob() @@ -161,7 +160,7 @@ C.handcuffed = src return 1 -/obj/effect/energy_net/post_buckle_mob(mob/living/M) +/obj/energy_net/post_buckle_mob(mob/living/M) if(buckled_mob) layer = ABOVE_HUMAN_LAYER visible_message("\The [M] was caught in [src]!") @@ -169,13 +168,13 @@ to_chat(M,SPAN_WARNING("You are free of the net!")) reset_plane_and_layer() -/obj/effect/energy_net/on_death() +/obj/energy_net/on_death() visible_message(SPAN_DANGER("\The [src] is torn apart!")) qdel(src) -/obj/effect/energy_net/attack_hand(mob/user) +/obj/energy_net/attack_hand(mob/user) if (user.a_intent != I_HURT) - return + return ..() user.visible_message( SPAN_WARNING("\The [user] claws at \the [src]!"), @@ -183,22 +182,19 @@ ) var/mob/living/carbon/human/H = user if(istype(H)) - if(H.species.can_shred(H)) + if(MUTATION_FERAL in H.mutations || H.species.can_shred(H)) playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) damage_health(rand(10, 20)) else damage_health(rand(1, 3)) - - else if (MUTATION_HULK in user.mutations) - kill_health() else damage_health(rand(5, 8)) -/obj/effect/energy_net/user_unbuckle_mob(mob/user) +/obj/energy_net/user_unbuckle_mob(mob/user) return escape_net(user) -/obj/effect/energy_net/proc/escape_net(mob/user as mob) +/obj/energy_net/proc/escape_net(mob/user as mob) visible_message( SPAN_WARNING("\The [user] attempts to free themselves from \the [src]!"), SPAN_WARNING("You attempt to free yourself from \the [src]!") diff --git a/code/game/objects/items/weapons/weldbackpack.dm b/code/game/objects/items/weapons/weldbackpack.dm index d4b93e6ad3b03..57f18e08aa7e4 100644 --- a/code/game/objects/items/weapons/weldbackpack.dm +++ b/code/game/objects/items/weapons/weldbackpack.dm @@ -7,7 +7,7 @@ desc = "A small, uncomfortable backpack, fitted with a massive fuel tank on the side. It has a refueling port for most models of portable welding tools and cartridges." icon_state = "welderpack" item_state_slots = list(slot_l_hand_str = "welderpack", slot_r_hand_str = "welderpack") - max_storage_space = 20 + max_storage_space = ITEM_SIZE_NORMAL * 7 var/max_fuel = 350 var/obj/item/weldingtool/welder @@ -17,62 +17,62 @@ . = ..() -/obj/item/storage/backpack/weldpack/attackby(obj/item/W as obj, mob/user as mob) - if(isWelder(W)) - var/obj/item/weldingtool/T = W - if (!T.tank) - to_chat(user, SPAN_WARNING("\The [T] has no tank attached!")) - return - if (!T.tank.can_refuel) - to_chat(user, SPAN_WARNING("\The [T]'s [T.tank.name] does not have a refuelling port.")) +/obj/item/storage/backpack/weldpack/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + var/obj/item/weldingtool/T = tool + if(!istype(T)) + return + if(!T.tank) + balloon_alert(user, "нет баллона!") + return + if(!T.tank.can_refuel) + balloon_alert(user, "невозможно заправить этот баллон!") + return + if(T.welding) + if(user.a_intent == I_HURT) + user.visible_message( + SPAN_DANGER("[user] holds [T] up to [src], causing an explosion!"), + SPAN_DANGER("You hold [T] up to [src], causing an explosion!") + ) + log_and_message_admins("triggered a fueltank explosion.", user) + explosion(get_turf(src), 4, EX_ACT_HEAVY) + if(!QDELETED(src)) + qdel(src) return - if (T.welding) - if (user.a_intent == I_HURT) - user.visible_message( - SPAN_DANGER("\The [user] holds \a [T] up to \a [src], causing an explosion!"), - SPAN_DANGER("You hold \the [T] up to \the [src], causing an explosion!") - ) - log_and_message_admins("triggered a fueltank explosion.", user) - explosion(get_turf(src), 4, EX_ACT_HEAVY) - if (!QDELETED(src)) - qdel(src) - return - else - to_chat(user, SPAN_WARNING("You need to turn \the [T] off before you can refuel it. Or use harm intent if you're suicidal.")) - return - if (!reagents.trans_to_obj(T.tank, T.tank.max_fuel)) - to_chat(user, SPAN_WARNING("\The [T]'s [T.tank.name] is already full.")) + else + to_chat(user, SPAN_WARNING("You need to turn [T] off before you can refuel it. Or use harm intent if you're suicidal.")) return - to_chat(user, SPAN_NOTICE("You refill \the [T] with \the [src].")) - playsound(src, 'sound/effects/refill.ogg', 50, 1, -6) + if(!reagents.trans_to_obj(T.tank, T.tank.max_fuel)) + balloon_alert(user, "баллон уже полон!") return + balloon_alert(user, "баллон пополнен") + playsound(src, 'sound/effects/refill.ogg', 50, 1, -6) - else if(istype(W, /obj/item/welder_tank)) +/obj/item/storage/backpack/weldpack/use_tool(obj/item/W, mob/living/user, list/click_params) + if(istype(W, /obj/item/welder_tank)) var/obj/item/welder_tank/tank = W if (!tank.can_refuel) - to_chat(user, SPAN_WARNING("\The [tank] does not have a refuelling port.")) - return + to_chat(user, SPAN_WARNING("[tank] does not have a refuelling port.")) + return TRUE if (!reagents.trans_to_obj(tank, tank.max_fuel)) - to_chat(user, SPAN_WARNING("\The [tank] is already full.")) - return - to_chat(user, SPAN_NOTICE("You refuel \the [tank] with \the [src].")) + to_chat(user, SPAN_WARNING("[tank] is already full.")) + return TRUE + to_chat(user, SPAN_NOTICE("You refuel [tank] with [src].")) playsound(loc, 'sound/effects/refill.ogg', 50, 1, -6) - return + return TRUE - ..() + . = ..() -/obj/item/storage/backpack/weldpack/afterattack(obj/O as obj, mob/user as mob, proximity) - if(!proximity) // this replaces and improves the get_dist(src,O) <= 1 checks used previously - return +/obj/item/storage/backpack/weldpack/use_after(obj/O, mob/living/user, click_parameters) if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume < max_fuel) O.reagents.trans_to_obj(src, max_fuel) - to_chat(user, SPAN_NOTICE("You crack the cap off the top of \the [src] and fill it back up again from the tank.")) + to_chat(user, SPAN_NOTICE("You crack the cap off the top of [src] and fill it back up again from the tank.")) playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) - return + return TRUE else if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume == max_fuel) to_chat(user, SPAN_WARNING("The pack is already full!")) - return + return TRUE /obj/item/storage/backpack/weldpack/examine(mob/user) . = ..() - to_chat(user, text("[icon2html(src, user)] [] units of fuel left!", src.reagents.total_volume)) + . += SPAN_NOTICE(text("[icon2html(src, user)] [] units of fuel left!", src.reagents.total_volume)) diff --git a/code/game/objects/items/weapons/wrapping_paper.dm b/code/game/objects/items/weapons/wrapping_paper.dm new file mode 100644 index 0000000000000..683089463ea09 --- /dev/null +++ b/code/game/objects/items/weapons/wrapping_paper.dm @@ -0,0 +1,167 @@ +/** + * Contains cargo's package wrapper and gift wrapping paper, with relevant procs to wrap items/mobs. + * Gifts and parcels are found under gifts.dm and sortingmachinery.dm respectively. + */ + +/obj/item/stack/package_wrap + abstract_type = /obj/item/stack/package_wrap + singular_name = "sheet" + amount = 25 + max_amount = 25 + icon = 'icons/obj/parcels.dmi' + var/package_type + +/obj/item/stack/package_wrap/cargo_wrap + name = "package wrapper" + desc = "Heavy duty brown paper used to wrap packages to protect them during shipping." + icon_state = "deliveryPaper" + package_type = "parcel" + +/obj/item/stack/package_wrap/cargo_wrap/cyborg + name = "package wrapper synthesizer" + gender = NEUTER + uses_charge = 1 + charge_costs = list(1) + stacktype = /obj/item/stack/package_wrap + +/obj/item/stack/package_wrap/gift_wrap + name = "gift wrapping paper" + desc = "A roll of green and red wrapping paper, ready to package gifts in holiday charm." + icon_state = "wrapping_paper" + package_type = "gift" + +/obj/item/c_tube + name = "cardboard tube" + desc = "A tube of cardboard." + icon = 'icons/obj/parcels.dmi' + icon_state = "c_tube" + throwforce = 1 + w_class = ITEM_SIZE_SMALL + throw_speed = 4 + throw_range = 5 + +/obj/item/stack/package_wrap/proc/wrap_item(package_type, obj/target, mob/user) + var/amount_used + if (!isobj(target) || !istype(user)) + return + + if (istype(target, /obj/structure/closet)) + var/obj/structure/bigDelivery/package/parcel = new /obj/structure/bigDelivery/package(get_turf(target.loc), target, package_type) + parcel.add_fingerprint(user) + amount_used = istype(target, /obj/structure/closet/crate) ? BASE_STORAGE_COST(ITEM_SIZE_NORMAL) : BASE_STORAGE_COST(ITEM_SIZE_LARGE) + else if (istype(target, /obj/item)) + var/obj/item/smallDelivery/parcel = new /obj/item/smallDelivery(get_turf(target.loc), target, package_type) + parcel.add_fingerprint(user) + amount_used = parcel.get_storage_cost() + else + return + + target.add_fingerprint(user) + add_fingerprint(user) + use(amount_used) + user.visible_message("\The [user] wraps \the [target] with [get_vague_name(TRUE)]].", + SPAN_NOTICE("You wrap \the [target] with [get_exact_name(amount_used)]"), + "You hear someone taping paper around an object.") + playsound(user.loc, 'sound/effects/wrap.ogg', 65, 1) + + if (get_amount() <= 0) + new /obj/item/c_tube(loc) + qdel(src) + return + + +/obj/item/stack/package_wrap/use_after(obj/object, mob/user) + if (!isobj(object)) + return FALSE + if (istype(object, /obj/item/smallDelivery) || istype(object,/obj/structure/bigDelivery) || istype(object, /obj/item/evidencebag)) + to_chat(user, SPAN_WARNING("\The [object] is already wrapped.")) + return TRUE + if (object.anchored) + to_chat(user, SPAN_WARNING("\The [object] is bolted down and can't be wrapped.")) + return TRUE + if (user in object) + to_chat(user, SPAN_WARNING("You cannot wrap \the [object] while inside it.")) + return TRUE + var/amount = get_amount() + if (amount < 1) + to_chat(user, SPAN_WARNING("\The [src] is out of [plural_name].")) + return TRUE + + if (istype(object, /obj/item)) + var/obj/item/target = object + var/a_used = target.get_storage_cost() + if (target.w_class == ITEM_SIZE_NO_CONTAINER || target.w_class == ITEM_SIZE_GARGANTUAN) + to_chat(user, SPAN_WARNING("\The [target] is too big to wrap!")) + return TRUE + if (user.isEquipped(target)) + to_chat(user, SPAN_WARNING("You must put down \the [target] in order to wrap it.")) + return TRUE + if (amount < a_used) + USE_FEEDBACK_STACK_NOT_ENOUGH(src, a_used, "to wrap \the [target]!") + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] starts wrapping \the [target] with \the [src]."), + SPAN_NOTICE("You start wrapping \the [target] with \the [src].") + ) + if (!do_after(user, target.w_class SECONDS, target, DO_PUBLIC_UNIQUE) || !user.use_sanity_check(target, src)) + return TRUE + wrap_item(package_type, target, user) + return TRUE + + if (istype(object, /obj/structure/closet/crate) || istype(object, /obj/structure/closet)) + var/item_size + var/obj/structure/closet/target = object + if (istype(object, /obj/structure/closet/crate)) + item_size = BASE_STORAGE_COST(ITEM_SIZE_NORMAL) + else + item_size = BASE_STORAGE_COST(ITEM_SIZE_LARGE) + if (amount < item_size) + USE_FEEDBACK_STACK_NOT_ENOUGH(src, item_size, "to wrap \the [target]!") + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] starts wrapping \the [target] with \the [src]."), + SPAN_NOTICE("You start wrapping \the [target] with \the [src].") + ) + if (!do_after(user, item_size SECONDS, target, DO_PUBLIC_UNIQUE) || !user.use_sanity_check(target, src)) + return TRUE + wrap_item(package_type, target, user) + return TRUE + +/obj/item/stack/package_wrap/use_before(mob/living/target, mob/living/user) + if (!istype(target, /mob/living/carbon/human)) + return FALSE + var/mob/living/carbon/human/H = target + var/a_used = BASE_STORAGE_COST(ITEM_SIZE_LARGE) //get_storage_cost() does not work on mobs, will reproduce same logic here. + + if (get_amount() < a_used) + USE_FEEDBACK_STACK_NOT_ENOUGH(src, a_used, "to wrap \the [target]!") + return TRUE + if (!H.has_danger_grab(user)) + to_chat(user, SPAN_WARNING("You need to have a firm grip on \the [target] in order to wrap them.")) + return TRUE + H.visible_message( + SPAN_NOTICE("\The [H] starts wrapping \the [target] with \the [src]."), + SPAN_NOTICE("You start wrapping \the [target] with \the [src].") + ) + if (!do_after(user, ITEM_SIZE_LARGE SECONDS, target, DO_PUBLIC_UNIQUE) || !H.has_danger_grab(user) || !user.use_sanity_check(H, src)) + return TRUE + + var/obj/structure/bigDelivery/mobpresent/present = new (H.loc, H, package_type) + use(a_used) + + if (user == target) + user.visible_message( + SPAN_DANGER("\The [user] wraps themselves with [get_vague_name(TRUE)]."), + SPAN_DANGER("You wrap yourself with [get_exact_name(a_used)].") + ) + else + user.visible_message( + SPAN_DANGER("\The [user] wraps \the [target] with [get_vague_name(TRUE)]."), + SPAN_DANGER("You wrap \the [target] with [get_exact_name(a_used)].") + ) + + playsound(user.loc, 'sound/effects/wrap.ogg', 65, 1) + present.add_fingerprint(user) + H.remove_grabs_and_pulls() + admin_attack_log(user, H, "Used \a [src] to wrap their victim", "Was wrapepd with \a [src]", "used \the [src] to wrap") + return TRUE diff --git a/code/game/objects/munition.dm b/code/game/objects/munition.dm index cdfcd5d545826..490e9c4c8fb95 100644 --- a/code/game/objects/munition.dm +++ b/code/game/objects/munition.dm @@ -14,7 +14,7 @@ . = ..() if(.) var/turf/T = get_turf(src) - if(!isspace(T) && !istype(T, /turf/simulated/floor/carpet)) + if(!isspaceturf(T) && !istype(T, /turf/simulated/floor/carpet)) playsound(T, pick(move_sounds), 75, 1) /obj/structure/ship_munition/md_slug diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index c35c462d678de..b542c25459f2d 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -7,9 +7,13 @@ var/list/matter //Used to store information about the contents of the object. var/w_class // Size of the object. var/unacidable = FALSE //universal "unacidabliness" var, here so you can use it in any obj. - var/throwforce = 1 - var/sharp = FALSE // whether this object cuts - var/edge = FALSE // whether this object is more likely to dismember + var/throwforce = 0 + ///// whether this object cuts + var/sharp = FALSE + ///Whether this object is more likely to dismember + var/edge = FALSE + ///For items that can puncture e.g. thick plastic but aren't necessarily sharp. Called in can_puncture() + var/puncture = FALSE var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! var/damtype = DAMAGE_BRUTE var/armor_penetration = 0 @@ -20,6 +24,67 @@ STOP_PROCESSING(SSobj, src) return ..() +/obj/MouseDrop_T(atom/dropped, mob/living/user) + // Handle tabling objects + if (dropped != src && HAS_FLAGS(obj_flags, OBJ_FLAG_RECEIVE_TABLE) && isobj(dropped)) + var/obj/object = dropped + if (HAS_FLAGS(object.obj_flags, OBJ_FLAG_CAN_TABLE)) + if (object.anchored) + USE_FEEDBACK_FAILURE("[object] is firmly anchored and cannot be moved.") + return TRUE + if (!isturf(loc)) + USE_FEEDBACK_FAILURE("[src] must be on a turf to lift [dropped] onto it.") + return TRUE + if (!user.skill_check(SKILL_HAULING, SKILL_BASIC)) + USE_FEEDBACK_FAILURE("You're not strong enough to lift [dropped] onto [src].") + return TRUE + var/has_blocker = FALSE + for (var/atom/thing as anything in get_turf(src)) + if (thing == src) + continue + if (ismob(thing) || thing.density) + has_blocker = thing + break + if (has_blocker) + USE_FEEDBACK_FAILURE("You can't lift [dropped] onto [src]. [has_blocker] is in the way.") + return TRUE + user.visible_message( + SPAN_NOTICE("[user] starts lifting [dropped] onto [src]."), + SPAN_NOTICE("You start lifting [dropped] onto [src].") + ) + if (!user.do_skilled(6 SECONDS, SKILL_HAULING, src, do_flags = DO_PUBLIC_UNIQUE) || !user.use_sanity_check(src, dropped)) + return TRUE + if (!HAS_FLAGS(obj_flags, OBJ_FLAG_RECEIVE_TABLE)) + USE_FEEDBACK_FAILURE("[src]'s state has changed.") + return TRUE + if (!HAS_FLAGS(object.obj_flags, OBJ_FLAG_CAN_TABLE)) + USE_FEEDBACK_FAILURE("[dropped]'s state has changed.") + return TRUE + if (object.anchored) + USE_FEEDBACK_FAILURE("[object] is firmly anchored and cannot be moved.") + return TRUE + if (!isturf(loc)) + USE_FEEDBACK_FAILURE("[src] must be on a turf to lift [dropped] onto it.") + return TRUE + has_blocker = FALSE + for (var/atom/thing as anything in get_turf(src)) + if (thing == src) + continue + if (ismob(thing) || thing.density) + has_blocker = thing + break + if (has_blocker) + USE_FEEDBACK_FAILURE("You can't lift [dropped] onto [src]. [has_blocker] is in the way.") + return TRUE + object.forceMove(loc) + user.visible_message( + SPAN_NOTICE("[user] lifts [dropped] onto [src]."), + SPAN_NOTICE("You lift [dropped] onto [src].") + ) + return TRUE + + return ..() + /obj/item/proc/is_used_on(obj/O, mob/user) /obj/assume_air(datum/gas_mixture/giver) @@ -121,33 +186,91 @@ . |= DAMAGE_FLAG_EDGE if(is_sharp(src)) . |= DAMAGE_FLAG_SHARP - if (damtype == DAMAGE_BURN) - . |= DAMAGE_FLAG_LASER - -/obj/attackby(obj/item/O, mob/user) - if(obj_flags & OBJ_FLAG_ANCHORABLE) - if(isWrench(O)) - wrench_floor_bolts(user) - update_icon() - return - return ..() + if (damtype == DAMAGE_BURN) + . |= DAMAGE_FLAG_LASER + +/** + * Whether or not the object can be anchored in its current state/position. Assumes the anchorable flag has already been checked. + * + * **Parameters**: + * - `tool` - Tool being used to un/anchor the object. + * - `user` - User performing the interaction. + * - `silent` (Boolean, default `FALSE`) - If set, does not send user feedback messages on failure. + * + * Returns boolean. + */ +/obj/proc/can_anchor(obj/item/tool, mob/user, silent = FALSE) + if (isinspace()) + if (!silent) + USE_FEEDBACK_FAILURE("[src] cannot be anchored in space.") + return FALSE + return TRUE + +/obj/proc/wrench_floor_bolts(obj/item, mob/living/user, obj/item/tool, act_result, delay = 2 SECONDS) + if(act_result) + return + if(!can_anchor(tool, user)) + return + . = ITEM_INTERACT_SUCCESS + user.visible_message( + SPAN_NOTICE("[user] begins [anchored ? "un" : ""]securing [src] [anchored ? "from" : "to"] the floor with [tool]."), + SPAN_NOTICE("You begin [anchored ? "un" : ""]securing [src] [anchored ? "from" : "to"] the floor with [tool].") + ) + if(!tool.use_as_tool(src, user, delay SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message( + SPAN_NOTICE("[user] [anchored ? "un" : ""]secures [src] [anchored ? "from" : "to"] the floor with [tool]."), + SPAN_NOTICE("You [anchored ? "un" : ""]secure [src] [anchored ? "from" : "to"] the floor with [tool].") + ) + anchored = !anchored + post_anchor_change() + +/** + * Called when the object's anchor state is changed via `wrench_floor_bolts()`. + */ +/obj/proc/post_anchor_change() + update_icon() + return -/obj/proc/wrench_floor_bolts(mob/user, delay=20) - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) - if(anchored) - user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") - else - user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") - if(do_after(user, delay, src, DO_REPAIR_CONSTRUCT)) - if(!src) return - to_chat(user, SPAN_NOTICE("You [anchored? "un" : ""]secured \the [src]!")) - anchored = !anchored - return 1 /obj/attack_hand(mob/living/user) - if(Adjacent(user)) + . = ..() + if (.) + return + if (Adjacent(user)) add_fingerprint(user) - ..() + + if (ishuman(user) && !isitem(src) && user.a_intent == I_HURT && get_max_health()) + var/mob/living/carbon/human/assailant = user + var/datum/unarmed_attack/attack = assailant.get_unarmed_attack(src) + if (!attack) + return ..() + assailant.do_attack_animation(src) + assailant.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + var/damage = attack.damage + rand(1,5) + var/attack_verb = "[pick(attack.attack_verb)]" + + if (MUTATION_FERAL in user.mutations) + attack_verb = "smashes" + damage = 10 + + if (!can_damage_health(damage, attack.get_damage_type())) + playsound(loc, use_weapon_hitsound? attack.attack_sound : damage_hitsound, 25, TRUE, -1) + user.visible_message( + SPAN_WARNING("[user] hits [src], but doesn't even leave a dent!"), + SPAN_WARNING("You hit [src], but cause no visible damage and hurt yourself!") + ) + if (!(MUTATION_FERAL in user.mutations)) + user.apply_damage(3, DAMAGE_BRUTE, user.hand ? BP_L_HAND : BP_R_HAND) + return TRUE + + playsound(loc, use_weapon_hitsound? attack.attack_sound : damage_hitsound, 25, TRUE, -1) + assailant.visible_message( + SPAN_WARNING("[assailant] [attack_verb] [src]!"), + SPAN_WARNING("You [attack_verb] [src]!") + ) + damage_health(damage, attack.get_damage_type(), attack.damage_flags()) + return TRUE /obj/is_fluid_pushable(amt) return ..() && w_class <= round(amt/20) @@ -158,20 +281,23 @@ /obj/AltClick(mob/user) if(obj_flags & OBJ_FLAG_ROTATABLE) rotate(user) - ..() + return TRUE + return ..() /obj/examine(mob/user) . = ..() if((obj_flags & OBJ_FLAG_ROTATABLE)) - to_chat(user, SPAN_SUBTLE("Can be rotated with alt-click.")) + . += SPAN_SUBTLE("Can be rotated with alt-click.") + if((obj_flags & OBJ_FLAG_ANCHORABLE)) + . += SPAN_SUBTLE("Can be [anchored? "unsecured from the floor" : "secured to the floor"] using a wrench.") /obj/proc/rotate(mob/user) if(!CanPhysicallyInteract(user)) - to_chat(user, SPAN_NOTICE("You can't interact with \the [src] right now!")) + to_chat(user, SPAN_NOTICE("You can't interact with [src] right now!")) return if(anchored) - to_chat(user, SPAN_NOTICE("\The [src] is secured to the floor!")) + to_chat(user, SPAN_NOTICE("[src] is secured to the floor!")) return set_dir(turn(dir, 90)) @@ -185,3 +311,6 @@ */ /obj/proc/is_safe_to_step(mob/living/L) return TRUE + +/obj/get_mass() + return min(2**(w_class-1), 100) diff --git a/code/game/objects/random/date_based.dm b/code/game/objects/random/date_based.dm index 9b16181cd2761..6e8574f8e85cc 100644 --- a/code/game/objects/random/date_based.dm +++ b/code/game/objects/random/date_based.dm @@ -5,7 +5,7 @@ /obj/random/date_based name = "random object (date based)" icon_state = "yup" - spawn_method = .proc/check_date + spawn_method = PROC_REF(check_date) var/datum/is_date/date_check /obj/random/date_based/Destroy() diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 266968ba19640..bc973d916c870 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -27,7 +27,7 @@ if(pixel_x || pixel_y) A.pixel_x = pixel_x A.pixel_y = pixel_y - + A.dir = dir return A // Returns an associative list in format path:weight @@ -44,10 +44,38 @@ /obj/random/single/spawn_choices() return list(spawn_object) + +/obj/random/single/color + name = "randomly colored object" + desc = "This item is used to spawn a given object with a random color at round-start." + spawn_nothing_percentage = 0 + +/obj/random/single/color/proc/color_choices() + return list( + COLOR_RED, + COLOR_BLUE, + COLOR_YELLOW, + COLOR_PURPLE, + COLOR_GREEN, + COLOR_ORANGE, + COLOR_BROWN, + COLOR_WHITE, + COLOR_DARK_GRAY // Black but not void + ) + +/obj/random/single/color/spawn_item() + var/atom/A = ..() + if (!istype(A)) + return A + A.set_color(pickweight(color_choices())) + return A + + + /obj/random/tool name = "random tool" desc = "This is a random tool." - icon = 'icons/obj/tools.dmi' + icon = 'icons/obj/tools/welder.dmi' icon_state = "welder" /obj/random/tool/spawn_choices() @@ -63,7 +91,7 @@ /obj/random/technology_scanner name = "random scanner" desc = "This is a random technology scanner." - icon = 'icons/obj/atmos_analyzer.dmi' + icon = 'icons/obj/tools/atmos_analyzer.dmi' icon_state = "atmos" /obj/random/technology_scanner/spawn_choices() @@ -74,7 +102,7 @@ /obj/random/powercell name = "random powercell" desc = "This is a random powercell." - icon = 'icons/obj/power.dmi' + icon = 'icons/obj/powercells.dmi' icon_state = "hcell" /obj/random/powercell/spawn_choices() @@ -102,7 +130,7 @@ /obj/random/toolbox name = "random toolbox" desc = "This is a random toolbox." - icon = 'icons/obj/storage.dmi' + icon = 'icons/obj/tools/toolboxes.dmi' icon_state = "red" /obj/random/toolbox/spawn_choices() @@ -114,19 +142,20 @@ /obj/random/tech_supply name = "random tech supply" desc = "This is a random piece of technology supplies." - icon = 'icons/obj/power.dmi' + icon = 'icons/obj/powercells.dmi' icon_state = "cell" spawn_nothing_percentage = 50 /obj/random/tech_supply/spawn_choices() return list(/obj/random/powercell = 3, /obj/random/technology_scanner = 2, - /obj/item/stack/package_wrap/twenty_five = 1, + /obj/item/stack/package_wrap/cargo_wrap = 1, + /obj/item/stack/package_wrap/gift_wrap = 1, /obj/item/hand_labeler = 1, /obj/random/bomb_supply = 2, /obj/item/extinguisher = 1, /obj/item/clothing/gloves/insulated/cheap = 1, - /obj/item/stack/cable_coil/random = 2, + /obj/random/single/color/cable_coil = 2, /obj/random/toolbox = 2, /obj/item/storage/belt/utility = 2, /obj/item/storage/belt/utility/atmostech = 1, @@ -136,8 +165,8 @@ /obj/random/medical name = "Random Medical equipment" desc = "This is a random medical item." - icon = 'icons/obj/items.dmi' - icon_state = "medrandom" + icon = 'icons/obj/medical.dmi' + icon_state = "pack0" /obj/random/medical/spawn_choices() return list(/obj/random/medical/lite = 21, @@ -159,8 +188,8 @@ /obj/random/medical/lite name = "Random Medicine" desc = "This is a random simple medical item." - icon = 'icons/obj/items.dmi' - icon_state = "medrandom" + icon = 'icons/obj/medical.dmi' + icon_state = "gauze" spawn_nothing_percentage = 25 /obj/random/medical/lite/spawn_choices() @@ -173,7 +202,7 @@ /obj/item/stack/medical/splint = 1, /obj/item/reagent_containers/hypospray/autoinjector/inaprovaline = 3, /obj/item/storage/pill_bottle/kelotane = 2, - /obj/item/storage/pill_bottle/antitox = 2, + /obj/item/storage/pill_bottle/dylovene = 2, /obj/item/storage/med_pouch/trauma = 2, /obj/item/storage/med_pouch/burn = 2, /obj/item/storage/med_pouch/toxin = 2, @@ -203,7 +232,7 @@ /obj/random/contraband name = "Random Illegal Item" desc = "Hot Stuff." - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/lavatory.dmi' icon_state = "purplecomb" spawn_nothing_percentage = 50 @@ -235,7 +264,7 @@ /obj/random/drinkbottle name = "random drink" desc = "This is a random drink." - icon = 'icons/obj/drinks.dmi' + icon = 'icons/obj/food/drinks.dmi' icon_state = "whiskeybottle" /obj/random/drinkbottle/spawn_choices() @@ -278,25 +307,24 @@ icon_state = "revolver" /obj/random/projectile/spawn_choices() - return list(/obj/item/gun/projectile/automatic/battlerifle = 4, - /obj/item/gun/projectile/sniper/garand = 4, - /obj/item/gun/projectile/sniper/semistrip = 4, + return list(/obj/item/gun/projectile/automatic/battlerifle = 2, + /obj/item/gun/projectile/sniper/garand = 3, + /obj/item/gun/projectile/sniper/semistrip = 2, /obj/item/gun/projectile/shotgun/pump = 3, /obj/item/gun/projectile/automatic/merc_smg = 2, - /obj/item/gun/projectile/automatic/assault_rifle = 2, + /obj/item/gun/projectile/automatic/assault_rifle = 3, /obj/item/gun/projectile/automatic/bullpup_rifle = 2, /obj/item/gun/projectile/pistol/sec = 4, - /obj/item/gun/projectile/pistol/holdout = 4, - /obj/item/gun/projectile/pirate = 5, - /obj/item/gun/projectile/revolver = 2, + /obj/item/gun/projectile/pistol/holdout = 2, + /obj/item/gun/projectile/pirate = 2, + /obj/item/gun/projectile/revolver = 4, /obj/item/gun/projectile/automatic/sec_smg = 3, - /obj/item/gun/projectile/revolver/holdout = 4, - /obj/item/gun/projectile/revolver = 2, - /obj/item/gun/projectile/shotgun/doublebarrel = 4, + /obj/item/gun/projectile/revolver/holdout = 2, + /obj/item/gun/projectile/shotgun/doublebarrel = 3, /obj/item/gun/projectile/shotgun/doublebarrel/sawn = 3, /obj/item/gun/projectile/heavysniper = 1, /obj/item/gun/projectile/shotgun/pump/combat = 2, - /obj/item/gun/projectile/pistol/throwback = 1, + /obj/item/gun/projectile/pistol/throwback = 3, /obj/item/gun/projectile/pistol/broomstick = 1) /obj/random/handgun @@ -316,7 +344,7 @@ /obj/random/ammo name = "Random Ammunition" desc = "This is random ammunition." - icon = 'icons/obj/ammo.dmi' + icon = 'icons/obj/weapons/ammo.dmi' icon_state = "magnum" /obj/random/ammo/spawn_choices() @@ -418,17 +446,17 @@ /obj/random/trash/spawn_choices() return list(/obj/item/remains/lizard, - /obj/effect/decal/cleanable/blood/gibs/robot, - /obj/effect/decal/cleanable/blood/oil, - /obj/effect/decal/cleanable/blood/oil/streak, - /obj/effect/decal/cleanable/spiderling_remains, + /obj/decal/cleanable/blood/gibs/robot, + /obj/decal/cleanable/blood/oil, + /obj/decal/cleanable/blood/oil/streak, + /obj/decal/cleanable/spiderling_remains, /obj/item/remains/mouse, - /obj/effect/decal/cleanable/vomit, - /obj/effect/decal/cleanable/blood/splatter, - /obj/effect/decal/cleanable/ash, - /obj/effect/decal/cleanable/generic, - /obj/effect/decal/cleanable/flour, - /obj/effect/decal/cleanable/dirt, + /obj/decal/cleanable/vomit, + /obj/decal/cleanable/blood/splatter, + /obj/decal/cleanable/ash, + /obj/decal/cleanable/generic, + /obj/decal/cleanable/flour, + /obj/decal/cleanable/dirt, /obj/item/remains/robot) @@ -530,7 +558,7 @@ /obj/random/material //Random materials for building stuff name = "random material" desc = "This is a random material." - icon = 'icons/obj/materials.dmi' + icon = 'icons/obj/materials/materials.dmi' icon_state = "sheet" /obj/random/material/spawn_choices() @@ -602,8 +630,8 @@ /obj/random/assembly name = "random assembly" desc = "This is a random circuit assembly." - icon = 'icons/obj/items.dmi' - icon_state = "gift1" + icon = 'icons/obj/assemblies/electronic_assemblies.dmi' + icon_state = "random" /obj/random/assembly/spawn_choices() return list(/obj/item/device/electronic_assembly, @@ -614,7 +642,7 @@ /obj/random/advdevice name = "random advanced device" desc = "This is a random advanced device." - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/toy.dmi' icon_state = "game_kit" /obj/random/advdevice/spawn_choices() @@ -679,7 +707,7 @@ /obj/random/snack name = "random snack" desc = "This is a random snack item." - icon = 'icons/obj/food.dmi' + icon = 'icons/obj/food/food.dmi' icon_state = "sosjerky" /obj/random/snack/spawn_choices() @@ -709,7 +737,7 @@ /obj/random/storage name = "random storage item" desc = "This is a storage item." - icon = 'icons/obj/storage.dmi' + icon = 'icons/obj/boxes.dmi' icon_state = "idOld" /obj/random/storage/spawn_choices() @@ -734,7 +762,7 @@ /obj/item/storage/box/autoinjectors = 3, /obj/item/storage/box/beakers = 4, /obj/item/storage/box/syringes = 4, - /obj/item/storage/box/gloves = 4, + /obj/item/storage/box/latexgloves = 4, /obj/item/storage/box/large = 3, /obj/item/storage/box/glowsticks = 4, /obj/item/storage/wallet = 2, @@ -763,8 +791,6 @@ /obj/item/clothing/shoes/magboots = 1, /obj/item/clothing/shoes/laceup = 4, /obj/item/clothing/shoes/black = 4, - /obj/item/clothing/shoes/jungleboots = 3, - /obj/item/clothing/shoes/desertboots = 3, /obj/item/clothing/shoes/dutyboots = 3, /obj/item/clothing/shoes/tactical = 1, /obj/item/clothing/shoes/dress = 3, @@ -832,7 +858,7 @@ /obj/item/clothing/head/hardhat = 4, /obj/item/clothing/head/hardhat/orange = 4, /obj/item/clothing/head/hardhat/red = 4, - /obj/item/clothing/head/hardhat/dblue = 4, + /obj/item/clothing/head/hardhat/blue = 4, /obj/item/clothing/head/ushanka = 3, /obj/item/clothing/head/welding = 2) @@ -847,6 +873,7 @@ /obj/item/clothing/suit/storage/toggle/labcoat = 4, /obj/item/clothing/suit/space/emergency = 1, /obj/item/clothing/suit/armor/vest = 4, + /obj/item/clothing/suit/storage/security_chest_rig = 4, /obj/item/clothing/suit/storage/vest/tactical = 1, /obj/item/clothing/suit/storage/vest = 3, /obj/item/clothing/suit/storage/toggle/bomber = 3, @@ -906,17 +933,17 @@ GLOBAL_LIST_INIT(random_backpacks, list( /obj/item/storage/backpack/security/exo, /obj/item/storage/backpack/command, /obj/item/storage/backpack/industrial, - /obj/item/storage/backpack/toxins, + /obj/item/storage/backpack/corpsci, /obj/item/storage/backpack/hydroponics, /obj/item/storage/backpack/genetics, - /obj/item/storage/backpack/virology, + /obj/item/storage/backpack/sci, /obj/item/storage/backpack/chemistry )) /obj/random/backpack name = "random backpack" desc = "This is a random backpack." - icon = 'icons/obj/storage.dmi' + icon = 'icons/obj/clothing/obj_backpacks.dmi' icon_state = "backpack" /obj/random/backpack/spawn_choices() @@ -925,7 +952,7 @@ GLOBAL_LIST_INIT(random_backpacks, list( /obj/random/cash name = "random currency" desc = "LOADSAMONEY!" - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/money.dmi' icon_state = "spacecash1" /obj/random/cash/spawn_choices() @@ -952,7 +979,7 @@ GLOBAL_LIST_INIT(random_backpacks, list( /obj/random/maintenance //Clutter and loot for maintenance and away missions name = "random maintenance item" desc = "This is a random maintenance item." - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/parcels.dmi' icon_state = "gift1" /obj/random/maintenance/spawn_choices() @@ -966,8 +993,8 @@ Individual items to add to the maintenance list should go here, if you add something, make sure it's not in one of the other lists.*/ name = "random clean maintenance item" desc = "This is a random clean maintenance item." - icon = 'icons/obj/items.dmi' - icon_state = "gift2" + icon = 'icons/obj/parcels.dmi' + icon_state = "gift3" /obj/random/maintenance/clean/spawn_choices() return list(/obj/random/tech_supply = 100, @@ -1004,8 +1031,8 @@ something, make sure it's not in one of the other lists.*/ /obj/random/loot /*Better loot for away missions and salvage */ name = "random loot" desc = "This is some random loot." - icon = 'icons/obj/items.dmi' - icon_state = "gift3" + icon = 'icons/obj/parcels.dmi' + icon_state = "gift5" /obj/random/loot/spawn_choices() return list(/obj/random/energy = 10, @@ -1024,7 +1051,7 @@ something, make sure it's not in one of the other lists.*/ /obj/item/clothing/suit/straight_jacket = 6, /obj/item/clothing/head/helmet/merc = 3, /obj/item/stack/material/diamond/ten = 7, - /obj/item/stack/material/glass/phoronrglass/ten = 7, + /obj/item/stack/material/glass/boron_reinforced/ten = 7, /obj/item/stack/material/marble/ten = 8, /obj/item/stack/material/phoron/ten = 7, /obj/item/stack/material/gold/ten = 7, @@ -1051,7 +1078,7 @@ something, make sure it's not in one of the other lists.*/ /obj/item/bonesetter = 7, /obj/item/bonegel = 7, /obj/item/circular_saw = 7, - /obj/item/scalpel = 7, + /obj/item/scalpel/basic = 7, /obj/item/melee/baton/loaded = 9, /obj/item/device/radio/headset/syndicate = 6) @@ -1195,13 +1222,14 @@ var/global/list/multi_point_spawns /proc/get_random_useful_type() + RETURN_TYPE(/obj) var/static/list/options = list( /obj/random/crayon, /obj/item/pen, /obj/item/pen/blue, /obj/item/pen/red, /obj/item/pen/multi, - /obj/item/storage/box/matches, + /obj/item/storage/fancy/matches/matchbook, /obj/item/stack/material/cardboard, /obj/item/storage/fancy/smokable/transstellar, /obj/item/deck/cards @@ -1210,6 +1238,7 @@ var/global/list/multi_point_spawns /proc/get_random_junk_type() + RETURN_TYPE(/obj) var/static/list/options = ((\ typesof(/obj/item/trash/cigbutt) +\ subtypesof(/obj/item/trash)) - list( @@ -1218,17 +1247,17 @@ var/global/list/multi_point_spawns /obj/item/trash/syndi_cakes, /obj/item/trash/tray )) + list( - /obj/effect/decal/cleanable/spiderling_remains, + /obj/decal/cleanable/spiderling_remains, /obj/item/remains/mouse, /obj/item/remains/robot, /obj/item/paper/crumpled, /obj/item/inflatable/torn, - /obj/effect/decal/cleanable/molten_item, + /obj/decal/cleanable/molten_item, /obj/item/material/shard, /obj/item/hand/missing_card ) if (prob(20)) - return /obj/effect/decal/cleanable/generic + return /obj/decal/cleanable/generic if (prob(95)) return pick(options) if (prob(75)) @@ -1256,7 +1285,7 @@ var/global/list/multi_point_spawns /obj/random/mre name = "random MRE" desc = "This is a random single MRE." - icon = 'icons/obj/food.dmi' + icon = 'icons/obj/food/food.dmi' icon_state = "mre" /obj/random/mre/spawn_choices() @@ -1384,8 +1413,8 @@ var/global/list/multi_point_spawns /obj/random/vendor name = "random vending machine" desc = "This is a randomly selected vending machine." - icon = 'icons/obj/vending.dmi' - icon_state = "" + icon = 'icons/obj/machines/vending.dmi' + icon_state = "green-outline" /obj/random/vendor/spawn_choices() return list(/obj/machinery/vending/weeb, @@ -1402,13 +1431,13 @@ var/global/list/multi_point_spawns /obj/random/single/lighter name = "randomly spawned lighter" - icon = 'icons/obj/lighters.dmi' + icon = 'icons/obj/tools/lighters.dmi' icon_state = "lighter" spawn_object = /obj/item/flame/lighter /obj/random/single/cola name = "randomly spawned cola" - icon = 'icons/obj/drinks.dmi' + icon = 'icons/obj/food/drinks.dmi' icon_state = "cola" spawn_object = /obj/item/reagent_containers/food/drinks/cans/cola diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index daa2d75718a36..7b7d9e7cf6438 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -1,9 +1,9 @@ /obj/structure - icon = 'icons/obj/structures.dmi' + icon = 'icons/obj/structures/structures.dmi' w_class = ITEM_SIZE_NO_CONTAINER layer = STRUCTURE_LAYER - var/breakable + var/fragile var/parts var/list/connections = list("0", "0", "0", "0") var/list/other_connections = list("0", "0", "0", "0") @@ -12,10 +12,11 @@ var/material/material = null var/footstep_type var/mob_offset = 0 //used for on_structure_offset mob animation + var/breakout //if someone is currently breaking out /obj/structure/damage_health(damage, damage_type, damage_flags, severity, skip_can_damage_check) if (damage && HAS_FLAGS(damage_flags, DAMAGE_FLAG_TURF_BREAKER)) - if (breakable) + if (fragile) return kill_health() damage = max(damage, 10) ..() @@ -52,32 +53,14 @@ if(. && !CanFluidPass()) fluid_update() -/obj/structure/attackby(obj/item/O, mob/user) - if(user.a_intent != I_HELP && istype(O, /obj/item/natural_weapon)) - //Bit dirty, but the entire attackby chain seems kinda wrong to begin with - //Things should probably be parent first and return true if something handled it already, not child first - src.add_fingerprint(user) - attack_generic(user, O.force, pick(O.attack_verb)) - return - . = ..() -/obj/structure/attack_hand(mob/user) - ..() - if(MUTATION_FERAL in user.mutations) - attack_generic(user,10,"smashes") - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*2) - attack_animation(user) - playsound(loc, 'sound/weapons/tablehit1.ogg', 40, 1) - if(breakable) - if(MUTATION_HULK in user.mutations) - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - attack_generic(user,1,"smashes") - else if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species.can_shred(user)) - attack_generic(user,1,"slices") - return ..() +/obj/structure/use_weapon(obj/item/weapon, mob/user, list/click_params) + // Natural Weapon - Passthrough to generic attack + if (istype(weapon, /obj/item/natural_weapon)) + attack_generic(user, weapon.force, pick(weapon.attack_verb), damtype = weapon.damtype, dam_flags = weapon.damage_flags()) + return TRUE + return ..() /obj/structure/get_interactions_info() . = ..() @@ -88,9 +71,9 @@ /obj/structure/use_grab(obj/item/grab/grab, list/click_params) // Harm intent - Slam face against the structure - if (grab.assailant == I_HURT) + if (grab.assailant.a_intent == I_HURT) if (!grab.force_danger()) - to_chat(grab.assailant, SPAN_WARNING("You need a better grip to slam \the [grab.affecting]'s face on \the [src].")) + USE_FEEDBACK_GRAB_MUST_UPGRADE("to slam their face on \the [src]") return TRUE var/blocked = grab.affecting.get_blocked_ratio(BP_HEAD, DAMAGE_BRUTE, damage = 8) if (prob(30 * (1 - blocked))) @@ -111,17 +94,17 @@ // Climbable structure - Put victim on it if (HAS_FLAGS(atom_flags, ATOM_FLAG_CLIMBABLE)) if (!grab.force_danger()) - to_chat(grab.assailant, SPAN_WARNING("You need a better grip to put \the [grab.affecting] on \the [src].")) + USE_FEEDBACK_GRAB_MUST_UPGRADE("to put them on \the [src]") return TRUE var/obj/occupied = turf_is_crowded() if (occupied) - to_chat(grab.assailant, SPAN_DANGER("There's \a [occupied] blocking \the [src].")) + USE_FEEDBACK_GRAB_FAILURE("There's \a [occupied] blocking \the [src].") return TRUE - if (!do_after(grab.assailant, 3 SECONDS, grab.affecting, DO_PUBLIC_UNIQUE)) + if (!do_after(grab.assailant, 3 SECONDS, grab.affecting, DO_PUBLIC_UNIQUE) || !grab.use_sanity_check(src)) return TRUE occupied = turf_is_crowded() if (occupied) - to_chat(grab.assailant, SPAN_DANGER("There's \a [occupied] blocking \the [src].")) + USE_FEEDBACK_GRAB_FAILURE("There's \a [occupied] blocking \the [src].") return TRUE grab.affecting.forceMove(loc) grab.affecting.Weaken(rand(2,5)) @@ -134,6 +117,15 @@ return ..() +/obj/structure/proc/dump_contents() + for(var/mob/M in src) + M.dropInto(loc) + if(M.client) + M.client.eye = M.client.mob + M.client.perspective = MOB_PERSPECTIVE + + for(var/atom/movable/AM in src) + AM.dropInto(loc) /obj/structure/proc/can_visually_connect() return anchored @@ -142,8 +134,7 @@ return istype(S, src) /obj/structure/proc/refresh_neighbors() - for(var/thing in RANGE_TURFS(src, 1)) - var/turf/T = thing + for(var/turf/T as anything in RANGE_TURFS(src, 1)) T.update_icon() /obj/structure/proc/update_connections(propagate = 0) diff --git a/code/game/objects/structures/banner.dm b/code/game/objects/structures/banner.dm index 9c9f7daf9b377..4a3b74f43889b 100644 --- a/code/game/objects/structures/banner.dm +++ b/code/game/objects/structures/banner.dm @@ -25,7 +25,7 @@ , "sundial" = "the sundial, a symbol of Precursor worship, an Unathi faith" , "cupofknowledge" = "the Cup of Knowledge, a symbol of Markesheli, an Unathi faith" ) - icon = 'icons/obj/banner.dmi' + icon = 'icons/obj/structures/banner.dmi' icon_state = "blank_up" var/selected = "blank" @@ -61,7 +61,7 @@ /obj/structure/banner/examine(mob/user) . = ..() - to_chat(user, "It displays [banner_type[selected]].") + . += SPAN_NOTICE("It displays [banner_type[selected]].") /obj/structure/banner/get_mechanics_info() . = ..() diff --git a/code/game/objects/structures/barricade.dm b/code/game/objects/structures/barricade.dm index 7ec290bec362b..5979fc7d9ab77 100644 --- a/code/game/objects/structures/barricade.dm +++ b/code/game/objects/structures/barricade.dm @@ -24,43 +24,72 @@ /obj/structure/barricade/get_material() return material -/obj/structure/barricade/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/stack/material/rods) && !spiky) - var/obj/item/stack/material/rods/R = W - if(R.get_amount() < 5) - to_chat(user, SPAN_WARNING("You need more rods to build a cheval de frise.")) - return - visible_message(SPAN_NOTICE("\The [user] begins to work on \the [src].")) - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(R.use(5)) - visible_message(SPAN_NOTICE("\The [user] fastens \the [R] to \the [src].")) - var/obj/structure/barricade/spike/CDF = new(loc, material.name, R.material.name) - CDF.dir = user.dir - qdel(src) - return - else - return - - if(istype(W, /obj/item/stack)) - var/obj/item/stack/D = W - if(D.get_material_name() != material.name) - return //hitting things with the wrong type of stack usually doesn't produce messages, and probably doesn't need to. - if (get_damage_value()) - if (D.get_amount() < 1) - to_chat(user, SPAN_WARNING("You need one sheet of [material.display_name] to repair \the [src].")) - return - visible_message(SPAN_NOTICE("[user] begins to repair \the [src].")) - if(do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT) && get_damage_value()) - if (D.use(1)) - restore_health(get_max_health()) - visible_message(SPAN_NOTICE("[user] repairs \the [src].")) - return - return - else - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - damage_health(W.force, W.damtype) - ..() +/obj/structure/barricade/use_tool(obj/item/tool, mob/user, list/click_params) + // Rods - Make barricade spiky + if (istype(tool, /obj/item/stack/material/rods)) + if (spiky) + USE_FEEDBACK_FAILURE("\The [src] already has spikes on it.") + return TRUE + var/obj/item/stack/material/rods/rods = tool + if (!rods.can_use(5)) + USE_FEEDBACK_STACK_NOT_ENOUGH(rods, 5, "to build a cheval de frise.") + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] starts adding some [tool.name] to \the [src]."), + SPAN_NOTICE("You start adding some [tool.name] to \the [src].") + ) + if (!user.do_skilled(4 SECONDS, SKILL_CONSTRUCTION, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + if (spiky) + USE_FEEDBACK_FAILURE("\The [src] already has spikes on it.") + return TRUE + if (!rods.use(5)) + USE_FEEDBACK_STACK_NOT_ENOUGH(rods, 5, "to build a cheval de frise.") + return TRUE + var/obj/structure/barricade/spike/CDF = new(loc, material.name, rods.material.name) + CDF.set_dir(user.dir) + transfer_fingerprints_to(CDF) + user.visible_message( + SPAN_NOTICE("\The [user] adds some [tool.name] to \the [src]."), + SPAN_NOTICE("You add some [tool.name] to \the [src].") + ) + qdel_self() + return TRUE + + // Material Stack - Repair + if (istype(tool, /obj/item/stack)) + var/obj/item/stack/material/stack = tool + if (stack.material != material) + USE_FEEDBACK_FAILURE("\The [tool] is the wrong type of material to repair \the [src].") + return TRUE + if (!get_damage_value()) + USE_FEEDBACK_FAILURE("\The [src] doesn't need repairs.") + return TRUE + if (!stack.can_use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(stack, 1, "to repair \the [src].") + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] starts repairing \the [src] with some [tool.name]."), + SPAN_NOTICE("You start repairing \the [src] with some [tool.name].") + ) + if (!user.do_skilled(2 SECONDS, SKILL_CONSTRUCTION, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + if (!get_damage_value()) + USE_FEEDBACK_FAILURE("\The [src] doesn't need repairs.") + return TRUE + if (!stack.use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(stack, 1, "to repair \the [src].") + return TRUE + revive_health() + user.visible_message( + SPAN_NOTICE("\The [user] repairs \the [src] with some [tool.name]."), + SPAN_NOTICE("You repair \the [src] with some [tool.name].") + ) + return TRUE + + return ..() + /obj/structure/barricade/on_death() dismantle() @@ -80,7 +109,7 @@ //spikey barriers /obj/structure/barricade/spike - name = "cheval-de-frise" + name = "spiked barricade" icon_state = "cheval" atom_flags = ATOM_FLAG_NO_TEMP_CHANGE spiky = TRUE @@ -95,10 +124,10 @@ if(!rod_material_name) rod_material_name = MATERIAL_WOOD rod_material = SSmaterials.get_material_by_name("[rod_material_name]") - SetName("cheval-de-frise") - desc = "A rather simple [material.display_name] barrier. It menaces with spikes of [rod_material.display_name]." + SetName("spiked barricade") + desc = "A rather simple [material.display_name] spiked barricade, also known as a cheval-de-frise. It menaces with spikes of [rod_material.display_name] which look like they would hurt to walk in to." damage = (rod_material.hardness * 0.85) - overlays += overlay_image(icon, spike_overlay, color = rod_material.icon_colour, flags = RESET_COLOR) + AddOverlays(overlay_image(icon, spike_overlay, color = rod_material.icon_colour, flags = RESET_COLOR)) /obj/structure/barricade/spike/Bumped(mob/living/victim) . = ..() @@ -110,7 +139,7 @@ var/damage_holder = damage var/target_zone = pick(BP_CHEST, BP_GROIN, BP_L_LEG, BP_R_LEG) - if(MOVING_DELIBERATELY(victim)) //walking into this is less hurty than running + if(MOVING_DELIBERATELY(victim)) //creeping into this is less hurty than walking damage_holder = (damage / 4) if(isanimal(victim)) //simple animals have simple health, reduce our damage diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index b605e6f7a56ea..0b2a76fe06358 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -1,13 +1,13 @@ /obj/structure/sign/double/barsign desc = "A jumbo-sized LED sign. This one seems to be showing its age." - icon = 'icons/obj/barsigns.dmi' - icon_state = "empty" + icon = 'icons/obj/structures/barsigns.dmi' + icon_state = "on" appearance_flags = DEFAULT_APPEARANCE_FLAGS anchored = TRUE var/cult = 0 /obj/structure/sign/double/barsign/proc/get_valid_states(initial=1) - . = icon_states(icon) + . = ICON_STATES(icon) . -= "on" . -= "narsiebistro" . -= "empty" @@ -16,62 +16,71 @@ /obj/structure/sign/double/barsign/examine(mob/user) . = ..() + //TODO SS220: Move barsigns to singletons switch(icon_state) if("Off") - to_chat(user, "It appears to be switched off.") + . += SPAN_NOTICE("It appears to be switched off.") if("narsiebistro") - to_chat(user, "It shows a picture of a large black and red being. Spooky!") + . += SPAN_NOTICE("It shows a picture of a large black and red being. Spooky!") if("on", "empty") - to_chat(user, "The lights are on, but there's no picture.") + . += SPAN_NOTICE("The lights are on, but there's no picture.") if("Mess Hall - SEV Torch") - to_chat(user, "It appears to be a red haired monk wearing a cheese costume, swinging a hoop around their thighs, holding two torches, inviting you into the mess hall.") + . += SPAN_NOTICE("It appears to be a red haired monk wearing a cheese costume, swinging a hoop around their thighs, holding two torches, inviting you into the mess hall.") if("Information Action Ratio") - to_chat(user, "It's the place to go!") + . += SPAN_NOTICE("It's the place to go!") if("Three Starboard") - to_chat(user, "It says 'Three Starboard' alongside a crude rendition of the SEV Torch- who makes this stuff?") + . += SPAN_NOTICE("It says 'Three Starboard' alongside a crude rendition of the SEV Torch- who makes this stuff?") if("The Clowns Head") - to_chat(user, "A rather catching portrait of what you can only presume to be the idea of a madman... A Clown Queen...") + . += SPAN_NOTICE("A rather catching portrait of what you can only presume to be the idea of a madman... A Clown Queen...") if("The Cranky Goldfish") - to_chat(user, "A crank-powered fish! Why hadn't you thought of that...") + . += SPAN_NOTICE("A crank-powered fish! Why hadn't you thought of that...") if("The Cat Caller") - to_chat(user, "An adorable neon kitty to brighten up your day.") + . += SPAN_NOTICE("An adorable neon kitty to brighten up your day.") if("The Diplomatic Resolution") - to_chat(user, "Here's hoping they can talk it out over beer...") + . += SPAN_NOTICE("Here's hoping they can talk it out over beer...") if("Dragons Hoard") - to_chat(user, "It says 'DRAGONS HOARD'. What cunning adventurer shall swipe the hoard for themselves?") + . += SPAN_NOTICE("It says 'DRAGONS HOARD'. What cunning adventurer shall swipe the hoard for themselves?") if("Closed") - to_chat(user, "How unfortunate...") + . += SPAN_NOTICE("How unfortunate...") if("Free Drinks!") - to_chat(user, "Yippee!") + . += SPAN_NOTICE("Yippee!") if("We Are Open!") - to_chat(user, "Come on in!") + . += SPAN_NOTICE("Come on in!") if("The Meta Game") - to_chat(user, "Big Brain Plays.") + . += SPAN_NOTICE("Big Brain Plays.") if("Bless This Mess") - to_chat(user, "It fills you with a snuggly wuggly sense of warmth and comfort.") + . += SPAN_NOTICE("It fills you with a snuggly wuggly sense of warmth and comfort.") if("The Redshirt") - to_chat(user, "Mmm... Donuts...") + . += SPAN_NOTICE("Mmm... Donuts...") + if("The Singulo") + . += SPAN_NOTICE("You spin me right 'round, baby right 'round.") else - to_chat(user, "It says '[icon_state]'") + . += SPAN_NOTICE("It says '[icon_state]'") /obj/structure/sign/double/barsign/New() ..() icon_state = pick(get_valid_states()) -/obj/structure/sign/double/barsign/attackby(obj/item/I, mob/user) - if(cult) - return ..() - var/obj/item/card/id/card = I.GetIdCard() - if(istype(card)) - if(access_kitchen in card.GetAccess()) - var/sign_type = input(user, "What would you like to change the barsign to?") as null|anything in get_valid_states(0) - if(!sign_type) - return - icon_state = sign_type - to_chat(user, SPAN_NOTICE("You change the barsign.")) - else - to_chat(user, SPAN_WARNING("Access denied.")) - return +/obj/structure/sign/double/barsign/use_tool(obj/item/tool, mob/user, list/click_params) + // ID Card - Change barsign + var/obj/item/card/id/id = tool.GetIdCard() + if (istype(id)) + var/id_name = GET_ID_NAME(id, tool) + if (!check_access(id)) + USE_FEEDBACK_ID_CARD_DENIED(src, id_name) + return TRUE + if (cult) + USE_FEEDBACK_FAILURE("\The [src]'s display can't be changed.") + return TRUE + var/input = input(user, "What would you like to change the barsign to?") as null|anything in get_valid_states(FALSE) + if (!input || input == icon_state || !user.use_sanity_check(src, tool)) + return TRUE + icon_state = input + user.visible_message( + SPAN_NOTICE("\The [user] updates \the [src]'s display with \a [tool]."), + SPAN_NOTICE("You update \the [src]'s display with [id_name].") + ) + return TRUE return ..() diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 25636f4e668a2..1fe2a206d1c78 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -19,16 +19,16 @@ LINEN BINS throw_range = 2 w_class = ITEM_SIZE_SMALL -/obj/item/bedsheet/attackby(obj/item/I, mob/user) - if(is_sharp(I)) - user.visible_message(SPAN_NOTICE("\The [user] begins cutting up \the [src] with \a [I]."), SPAN_NOTICE("You begin cutting up \the [src] with \the [I].")) - if(do_after(user, 5 SECONDS, src, DO_REPAIR_CONSTRUCT)) +/obj/item/bedsheet/use_tool(obj/item/tool, mob/living/user, list/click_params) + if (is_sharp(tool)) + user.visible_message(SPAN_NOTICE("\The [user] begins cutting up \the [src] with \a [tool]."), SPAN_NOTICE("You begin cutting up \the [src] with \the [tool].")) + if (do_after(user, 5 SECONDS, src, DO_REPAIR_CONSTRUCT)) to_chat(user, SPAN_NOTICE("You cut \the [src] into pieces!")) for(var/i in 1 to rand(2,5)) new /obj/item/reagent_containers/glass/rag(get_turf(src)) qdel(src) - return - ..() + return TRUE + return ..() /obj/item/bedsheet/blue icon_state = "sheetblue" @@ -98,7 +98,7 @@ LINEN BINS /obj/structure/bedsheetbin name = "linen bin" desc = "A linen bin. It looks rather cosy." - icon = 'icons/obj/structures.dmi' + icon = 'icons/obj/structures/structures.dmi' icon_state = "linenbin-full" anchored = TRUE var/amount = 20 @@ -110,33 +110,62 @@ LINEN BINS . = ..() if(amount < 1) - to_chat(user, "There are no bed sheets in the bin.") + . += SPAN_NOTICE("There are no bed sheets in the bin.") return if(amount == 1) - to_chat(user, "There is one bed sheet in the bin.") + . += SPAN_NOTICE("There is one bed sheet in the bin.") return - to_chat(user, "There are [amount] bed sheets in the bin.") + . += SPAN_NOTICE("There are [amount] bed sheets in the bin.") /obj/structure/bedsheetbin/on_update_icon() - switch(amount) - if(0) icon_state = "linenbin-empty" - if(1 to amount / 2) icon_state = "linenbin-half" - else icon_state = "linenbin-full" + var/fullness = amount / initial(amount) + if (!fullness) + icon_state = "linenbin-empty" + else if (fullness < 0.5) + icon_state = "linenbin-half" + else + icon_state = "linenbin-full" + +/obj/structure/bedsheetbin/use_tool(obj/item/tool, mob/user, list/click_params) + SHOULD_CALL_PARENT(FALSE) -/obj/structure/bedsheetbin/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/bedsheet)) - if(!user.unEquip(I, src)) - return - sheets.Add(I) + // Bed sheet - Add to bin + if (istype(tool, /obj/item/bedsheet)) + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + sheets += tool amount++ - to_chat(user, SPAN_NOTICE("You put [I] in [src].")) - else if(amount && !hidden && I.w_class < ITEM_SIZE_HUGE) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. - if(!user.unEquip(I, src)) - return - hidden = I - to_chat(user, SPAN_NOTICE("You hide [I] among the sheets.")) + update_icon() + user.visible_message( + SPAN_NOTICE("\The [user] adds \a [tool] to \the [src]."), + SPAN_NOTICE("You add \the [tool] to \the [src].") + ) + return TRUE + + // Anything else - Attempt to hide + if (!amount) + USE_FEEDBACK_FAILURE("\The [src] has no bedsheets to hide \the [tool] in.") + return TRUE + if (tool.w_class >= ITEM_SIZE_HUGE) + USE_FEEDBACK_FAILURE("\The [tool] is too large to hide in \the [src].") + return TRUE + if (hidden) + USE_FEEDBACK_FAILURE("There's already something hidden in \the [src].") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + hidden = tool + user.visible_message( + SPAN_NOTICE("\The [user] stuffs \a [tool] into \the [src]'s sheets."), + SPAN_NOTICE("You hide \the [tool] among \the [src]'s sheets."), + 3 + ) + return TRUE + /obj/structure/bedsheetbin/attack_hand(mob/user) var/obj/item/bedsheet/B = remove_sheet() diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm index eed0cfab53c04..6b23b82daca6c 100644 --- a/code/game/objects/structures/catwalk.dm +++ b/code/game/objects/structures/catwalk.dm @@ -1,7 +1,7 @@ /obj/structure/catwalk name = "catwalk" desc = "Cats really don't like these things." - icon = 'icons/obj/catwalks.dmi' + icon = 'icons/obj/structures/catwalks.dmi' icon_state = "catwalk" density = FALSE anchored = TRUE @@ -32,17 +32,17 @@ /obj/structure/catwalk/on_update_icon() update_connections() - overlays.Cut() + ClearOverlays() icon_state = "" var/image/I if(!hatch_open) for(var/i = 1 to 4) - I = image('icons/obj/catwalks.dmi', "catwalk[connections[i]]", dir = SHIFTL(1, i - 1)) - overlays += I + I = image('icons/obj/structures/catwalks.dmi', "catwalk[connections[i]]", dir = SHIFTL(1, i - 1)) + AddOverlays(I) if(plated_tile) - I = image('icons/obj/catwalks.dmi', "plated") + I = image('icons/obj/structures/catwalks.dmi', "plated") I.color = plated_tile.color - overlays += I + AddOverlays(I) /obj/structure/catwalk/ex_act(severity) switch(severity) @@ -63,8 +63,6 @@ attack_hand(user) /obj/structure/catwalk/proc/deconstruct(mob/user) - playsound(src, 'sound/items/Welder.ogg', 100, 1) - to_chat(user, SPAN_NOTICE("Slicing \the [src] joints ...")) new /obj/item/stack/material/rods(src.loc) new /obj/item/stack/material/rods(src.loc) //Lattice would delete itself, but let's save ourselves a new obj @@ -74,59 +72,70 @@ new plated_tile.build_type(src.loc) qdel(src) -/obj/structure/catwalk/attackby(obj/item/C as obj, mob/user as mob) - if(isWelder(C)) - var/obj/item/weldingtool/WT = C - if(WT.remove_fuel(0, user)) - deconstruct(user) +/obj/structure/catwalk/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!plated_tile) + USE_FEEDBACK_FAILURE("[src] is not plated and has no hatch to open.") return - if(istype(C, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = C - if(!cutter.slice(user)) - return - deconstruct(user) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - if(isCrowbar(C) && plated_tile) - if(user.a_intent != I_HELP) - return - hatch_open = !hatch_open - if(hatch_open) - playsound(src, 'sound/items/Crowbar.ogg', 100, 2) - to_chat(user, SPAN_NOTICE("You pry open \the [src]'s maintenance hatch.")) - else - playsound(src, 'sound/items/Deconstruct.ogg', 100, 2) - to_chat(user, SPAN_NOTICE("You shut \the [src]'s maintenance hatch.")) - update_icon() + hatch_open = !hatch_open + update_icon() + user.visible_message( + SPAN_NOTICE("[user] pries [src]'s maintenance hatch open with [tool]."), + SPAN_NOTICE("You pry [src]'s maintenance hatch open with [tool].") + ) + +/obj/structure/catwalk/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - if(istype(C, /obj/item/stack/tile/mono) && !plated_tile) - var/obj/item/stack/tile/floor/ST = C - if(!ST.in_use) - to_chat(user, SPAN_NOTICE("Placing tile...")) - ST.in_use = 1 - if (!do_after(user, 1 SECOND, src, DO_REPAIR_CONSTRUCT)) - ST.in_use = 0 - return - to_chat(user, SPAN_NOTICE("You plate \the [src]")) - name = "plated catwalk" - ST.in_use = 0 - src.add_fingerprint(user) - if(ST.use(1)) - var/list/singletons = GET_SINGLETON_SUBTYPE_MAP(/singleton/flooring) - for(var/flooring_type in singletons) - var/singleton/flooring/F = singletons[flooring_type] - if(!F.build_type) - continue - if(ispath(C.type, F.build_type)) - plated_tile = F - break - update_icon() + deconstruct(user) + +/obj/structure/catwalk/use_tool(obj/item/tool, mob/user, list/click_params) + // Floor Tile - Plate catwalk + if (istype(tool, /obj/item/stack/tile)) + if (plated_tile) + USE_FEEDBACK_FAILURE("[src] is already plated.") + return TRUE + var/obj/item/stack/tile/stack = tool + if (!stack.can_use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(stack, 1, "to plate [src].") + return TRUE + user.visible_message( + SPAN_NOTICE("[user] starts plating [src] with [tool]."), + SPAN_NOTICE("You start plating [src] with [tool].") + ) + if (!user.do_skilled(1 SECOND, SKILL_CONSTRUCTION, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + if (!stack.use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(stack, 1, "to plate [src].") + return TRUE + var/list/singletons = GET_SINGLETON_SUBTYPE_MAP(/singleton/flooring) + for (var/flooring_type in singletons) + var/singleton/flooring/F = singletons[flooring_type] + if (!F.build_type) + continue + if (ispath(stack.type, F.build_type)) + plated_tile = F + break + update_icon() + SetName("plated catwalk") + user.visible_message( + SPAN_NOTICE("[user] plates [src] with [tool]."), + SPAN_NOTICE("You plate [src] with [tool].") + ) + return TRUE + + return ..() + /obj/structure/catwalk/refresh_neighbors() return -/obj/effect/catwalk_plated +/obj/catwalk_plated name = "plated catwalk spawner" - icon = 'icons/obj/catwalks.dmi' + icon = 'icons/obj/structures/catwalks.dmi' icon_state = "catwalk_plated" density = TRUE anchored = TRUE @@ -134,26 +143,26 @@ layer = CATWALK_LAYER var/plating_type = /singleton/flooring/tiling/mono -/obj/effect/catwalk_plated/Initialize(mapload) +/obj/catwalk_plated/Initialize(mapload) . = ..() var/auto_activate = mapload || (GAME_STATE < RUNLEVEL_GAME) if(auto_activate) activate() return INITIALIZE_HINT_QDEL -/obj/effect/catwalk_plated/CanPass() +/obj/catwalk_plated/CanPass() return 0 -/obj/effect/catwalk_plated/attack_hand() +/obj/catwalk_plated/attack_hand() attack_generic() -/obj/effect/catwalk_plated/attack_ghost() +/obj/catwalk_plated/attack_ghost() attack_generic() -/obj/effect/catwalk_plated/attack_generic() +/obj/catwalk_plated/attack_generic() activate() -/obj/effect/catwalk_plated/proc/activate() +/obj/catwalk_plated/proc/activate() if(activated) return if(locate(/obj/structure/catwalk) in loc) @@ -164,14 +173,15 @@ C.name = "plated catwalk" C.update_icon() activated = 1 - for(var/turf/T in orange(src, 1)) - for(var/obj/effect/wallframe_spawn/other in T) - if(!other.activated) other.activate() -/obj/effect/catwalk_plated/dark + for(var/obj/wallframe_spawn/other in orange(src, 1)) + if(!other.activated) + other.activate() + +/obj/catwalk_plated/dark icon_state = "catwalk_plateddark" plating_type = /singleton/flooring/tiling/mono/dark -/obj/effect/catwalk_plated/white +/obj/catwalk_plated/white icon_state = "catwalk_platedwhite" plating_type = /singleton/flooring/tiling/mono/white diff --git a/code/game/objects/structures/charge_pylon.dm b/code/game/objects/structures/charge_pylon.dm index d0090e2c80953..4a56146fd2331 100644 --- a/code/game/objects/structures/charge_pylon.dm +++ b/code/game/objects/structures/charge_pylon.dm @@ -45,11 +45,11 @@ visible_message(SPAN_DANGER("\The [user] has been shocked by \the [src]!")) user.throw_at(get_step(user,get_dir(src,user)), 5, 10) -/obj/structure/adherent_pylon/attackby(obj/item/grab/normal/G, mob/user) - if(!istype(G)) - return - var/mob/M = G.affecting - charge_user(M) + +/obj/structure/adherent_pylon/use_grab(obj/item/grab/grab, list/click_params) + // Charge victim + charge_user(grab.affecting) + /obj/structure/adherent_pylon/Bumped(atom/AM) if(ishuman(AM)) diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm index 320383cffe68a..63b59f03752d0 100644 --- a/code/game/objects/structures/coathanger.dm +++ b/code/game/objects/structures/coathanger.dm @@ -1,7 +1,7 @@ /obj/structure/coatrack name = "coat rack" desc = "Rack that holds coats." - icon = 'icons/obj/coatrack.dmi' + icon = 'icons/obj/structures/coatrack.dmi' icon_state = "coatrack0" var/obj/item/clothing/suit/coat var/list/allowed = list(/obj/item/clothing/suit/storage/toggle/labcoat, /obj/item/clothing/suit/storage/det_trench) @@ -13,18 +13,26 @@ coat = null update_icon() -/obj/structure/coatrack/attackby(obj/item/W as obj, mob/user as mob) - var/can_hang = 0 - for (var/T in allowed) - if(istype(W,T)) - can_hang = 1 - if (can_hang && !coat && user.unEquip(coat, src)) - user.visible_message("[user] hangs [W] on \the [src].", "You hang [W] on the \the [src]") - coat = W + +/obj/structure/coatrack/use_tool(obj/item/tool, mob/user, list/click_params) + // Anything - Attempt to hang item + if (is_type_in_list(tool, allowed)) + if (coat) + USE_FEEDBACK_FAILURE("\The [src] already has \a [coat] on it.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + coat = tool update_icon() - else - to_chat(user, SPAN_NOTICE("You cannot hang [W] on [src]")) - return ..() + user.visible_message( + SPAN_NOTICE("\The [user] hangs \a [tool] on \the [src]."), + SPAN_NOTICE("You hang \the [tool] on \the [src].") + ) + return TRUE + + return ..() + /obj/structure/coatrack/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) var/can_hang = 0 @@ -42,10 +50,10 @@ return 1 /obj/structure/coatrack/on_update_icon() - overlays.Cut() + ClearOverlays() if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat)) - overlays += image(icon, icon_state = "coat_lab") + AddOverlays(image(icon, icon_state = "coat_lab")) if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat/cmo)) - overlays += image(icon, icon_state = "coat_cmo") + AddOverlays(image(icon, icon_state = "coat_cmo")) if (istype(coat, /obj/item/clothing/suit/storage/det_trench)) - overlays += image(icon, icon_state = "coat_det") + AddOverlays(image(icon, icon_state = "coat_det")) diff --git a/code/game/objects/structures/crates_lockers/closets/__closet.dm b/code/game/objects/structures/crates_lockers/closets/__closet.dm index 8bdb5b78a3b4b..acb72f8436bce 100644 --- a/code/game/objects/structures/crates_lockers/closets/__closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/__closet.dm @@ -6,11 +6,11 @@ density = TRUE w_class = ITEM_SIZE_NO_CONTAINER health_max = 100 + health_min_damage = 3 var/welded = 0 var/large = 1 var/wall_mounted = FALSE //equivalent to non-dense for air movement - var/breakout = 0 //if someone is currently breaking out. mutex var/storage_capacity = 2 * MOB_MEDIUM //This is so that someone can't pack hundreds of items in a locker/crate //then open it in a populated area to crash clients. var/open_sound = 'sound/effects/closet_open.ogg' @@ -20,6 +20,7 @@ var/setup = CLOSET_CAN_BE_WELDED var/closet_appearance = /singleton/closet_appearance material = MATERIAL_STEEL + breakout_time = 120 SECONDS // TODO: Turn these into flags. Skipped it for now because it requires updating 100+ locations... var/broken = FALSE @@ -43,12 +44,11 @@ return INITIALIZE_HINT_LATELOAD -/obj/structure/closet/LateInitialize(mapload, ...) +/obj/structure/closet/LateInitialize(mapload) var/list/will_contain = WillContain() if(will_contain) create_objects_in_loc(src, will_contain) - - if(!opened && mapload) // if closed and it's the map loading phase, relevant items at the crate's loc are put in the contents + if(mapload && !opened) store_contents() /obj/structure/closet/proc/WillContain() @@ -62,15 +62,23 @@ if(!AM.anchored) content_size += content_size(AM) if(!content_size) - to_chat(user, "It is empty.") + . += SPAN_NOTICE("It is empty.") else if(storage_capacity > content_size*4) - to_chat(user, "It is barely filled.") + . += SPAN_NOTICE("It is barely filled.") else if(storage_capacity > content_size*2) - to_chat(user, "It is less than half full.") + . += SPAN_NOTICE("It is less than half full.") else if(storage_capacity > content_size) - to_chat(user, "There is still some free space.") + . += SPAN_NOTICE("There is still some free space.") else - to_chat(user, "It is full.") + . += SPAN_NOTICE("It is full.") + +/obj/structure/closet/damage_health(damage, damage_type, damage_flags, severity, skip_can_damage_check) + . = ..() + if (!length(contents)) + return + var/content_damage = damage / length(contents) + for (var/atom/victim as anything in contents) + victim.damage_health(content_damage, damage_type, damage_flags, severity, skip_can_damage_check) /obj/structure/closet/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(air_group || (height==0 || wall_mounted)) return 1 @@ -84,20 +92,14 @@ return 1 /obj/structure/closet/proc/can_close() - for(var/obj/structure/closet/closet in get_turf(src)) - if(closet != src) - return 0 - return 1 - -/obj/structure/closet/proc/dump_contents() - for(var/mob/M in src) - M.dropInto(loc) - if(M.client) - M.client.eye = M.client.mob - M.client.perspective = MOB_PERSPECTIVE - - for(var/atom/movable/AM in src) - AM.dropInto(loc) + for(var/atom/movable/object in get_turf(src)) + if (istype(object, /obj/structure/closet) && object != src) + return FALSE + if (istype(object, /mob/living)) + var/mob/living/L = object + if (L.mob_size >= MOB_LARGE) + return FALSE + return TRUE /obj/structure/closet/proc/store_contents() var/stored_units = 0 @@ -145,7 +147,7 @@ /obj/structure/closet/proc/store_items(stored_units) . = 0 - for(var/obj/effect/dummy/chameleon/AD in loc) + for(var/obj/dummy/chameleon/AD in loc) if(CLOSET_CHECK_TOO_BIG(1)) break .++ @@ -249,86 +251,107 @@ break . = ..() -/obj/structure/closet/attackby(obj/item/W as obj, mob/user as mob) - if (user.a_intent == I_HURT) - ..() - return - if (src.opened) - if(istype(W, /obj/item/grab)) - var/obj/item/grab/G = W - src.MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet - return 0 - if(isWelder(W)) - var/obj/item/weldingtool/WT = W - if(WT.remove_fuel(0,user)) - slice_into_parts(WT, user) - return - if(istype(W, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = W - if(!cutter.slice(user)) - return - slice_into_parts(W, user) - return - if(istype(W, /obj/item/storage/laundry_basket) && length(W.contents)) - var/obj/item/storage/laundry_basket/LB = W - var/turf/T = get_turf(src) - for(var/obj/item/I in LB.contents) - LB.remove_from_storage(I, T, 1) - LB.finish_bulk_removal() - user.visible_message(SPAN_NOTICE("[user] empties \the [LB] into \the [src]."), \ - SPAN_NOTICE("You empty \the [LB] into \the [src]."), \ - SPAN_NOTICE("You hear rustling of clothes.")) - return +/obj/structure/closet/use_grab(obj/item/grab/grab, list/click_params) + if (!opened) + return ..() - if(user.unEquip(W, loc)) - W.pixel_x = 0 - W.pixel_y = 0 - W.pixel_z = 0 - W.pixel_w = 0 - return + MouseDrop_T(grab.affecting, grab.assailant) + return TRUE - if (istype(W, /obj/item/melee/energy/blade)) - if(emag_act(INFINITY, user, "[SPAN_DANGER("The locker has been sliced open by [user] with \an [W]")]!", SPAN_DANGER("You hear metal being sliced and sparks flying."))) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src.loc) - spark_system.start() - playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) - playsound(src.loc, "sparks", 50, 1) - open() - return - if (istype(W, /obj/item/stack/package_wrap)) - return +/obj/structure/closet/use_weapon(obj/item/weapon, mob/user, list/click_params) + // Energy Blade - Break locker open + if (istype(weapon, /obj/item/melee/energy/blade)) + if (opened) + return ..() + if (!emag_act(INFINITY, user, + SPAN_WARNING("[user] slices [src] open with [weapon]!"), + SPAN_DANGER("You slice [src] open with [weapon]!"), + SPAN_ITALIC("You hear metal being sliced and sparks flying.") + )) + return TRUE + var/datum/effect/spark_spread/spark_system = new /datum/effect/spark_spread() + spark_system.set_up(5, loca = src) + spark_system.start() + playsound(src, 'sound/weapons/blade1.ogg', 50, TRUE) + playsound(src, "sparks", 50, TRUE) + open() + return TRUE - if (isWelder(W) && (setup & CLOSET_CAN_BE_WELDED)) - var/obj/item/weldingtool/WT = W - if(!WT.remove_fuel(0,user)) - if(!WT.isOn()) - return - else - to_chat(user, SPAN_NOTICE("You need more welding fuel to complete this task.")) - return - src.welded = !src.welded - src.update_icon() + // The following interactions only apply to open closets + if (!opened) + return ..() + + // Laundry Basket - Dump contents into closet + if (istype(weapon, /obj/item/storage/laundry_basket) && length(weapon.contents)) + if (!opened) + USE_FEEDBACK_FAILURE("[src] needs to be open before you can dump [src] into it.") + return TRUE + var/obj/item/storage/laundry_basket/basket = weapon + for (var/obj/item/item as anything in basket.contents) + basket.remove_from_storage(item, loc, TRUE) + basket.finish_bulk_removal() user.visible_message( - SPAN_WARNING("\The [src] has been [welded?"welded shut":"unwelded"] by \the [user]."), - blind_message = "You hear welding.", - range = 3 + SPAN_NOTICE("[user] empties [weapon] into [src]."), + SPAN_NOTICE("You empty [weapon] into [src].") ) + return TRUE + + return ..() + +/obj/structure/closet/welder_act_secondary(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + USE_FEEDBACK_DECONSTRUCT_START(user) + if(!tool.use_as_tool(src, user, 4 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) return + slice_into_parts(tool, user) - if (setup & CLOSET_HAS_LOCK) - src.togglelock(user, W) +/obj/structure/closet/welder_act(mob/living/user, obj/item/tool) + if(opened) return + . = ITEM_INTERACT_SUCCESS + if(!HAS_FLAGS(setup, CLOSET_CAN_BE_WELDED)) + balloon_alert(user, "невозможно заварить!") + return + if(user.loc == src) + return + USE_FEEDBACK_WELD_UNWELD(user, welded) + if(!tool.use_as_tool(src, user, 4 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + welded = !welded + update_icon() + USE_FEEDBACK_WELD_UNWELD_FINISH(user, welded) + +/obj/structure/closet/use_tool(obj/item/tool, mob/user, list/click_params) + // General Action - Place item in closet, if open. + // The following interactions only apply to closed closets. + if (opened) + if (!user.unEquip(tool, loc)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + tool.pixel_x = 0 + tool.pixel_y = 0 + tool.pixel_z = 0 + tool.pixel_w = 0 + return TRUE + + // ID - Toggle lock + var/obj/item/card/id/id = tool.GetIdCard() + if (istype(id)) + if (!HAS_FLAGS(setup, CLOSET_HAS_LOCK)) + return ..() + togglelock(user, id) + return TRUE + + return ..() - attack_hand(user) /obj/structure/closet/proc/slice_into_parts(obj/W, mob/user) material.place_sheet(src.loc, 2) - user.visible_message(SPAN_NOTICE("\The [src] has been cut apart by [user] with \the [W]."), \ - SPAN_NOTICE("You have cut \the [src] apart with \the [W]."), \ - "You hear welding.") + user.visible_message(SPAN_NOTICE("[src] has been cut apart by [user] with [W]."), \ + SPAN_NOTICE("You have cut [src] apart with [W]."), \ + "You hear welding.") qdel(src) /obj/structure/closet/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) @@ -368,12 +391,14 @@ to_chat(user, SPAN_NOTICE("It won't budge!")) /obj/structure/closet/attack_hand(mob/user as mob) - src.add_fingerprint(user) - src.toggle(user) + if (user.a_intent == I_HURT) + return ..() + add_fingerprint(user) + toggle(user) /obj/structure/closet/attack_ghost(mob/ghost) if(ghost.client && ghost.client.inquisitive_ghost) - ghost.examinate(src) + examinate(ghost, src) if (!src.opened) to_chat(ghost, "It contains: [english_list(contents)].") @@ -394,7 +419,7 @@ /obj/structure/closet/on_update_icon() if(opened) icon_state = "open" - overlays.Cut() + ClearOverlays() else if(broken) icon_state = "closed_emagged[welded ? "_welded" : ""]" @@ -403,7 +428,7 @@ icon_state = "closed_locked[welded ? "_welded" : ""]" else icon_state = "closed_unlocked[welded ? "_welded" : ""]" - overlays.Cut() + ClearOverlays() /obj/structure/closet/on_death() dump_contents() @@ -414,41 +439,52 @@ return 0 //Door's open... wait, why are you in it's contents then? if((setup & CLOSET_HAS_LOCK) && locked) return 1 // Closed and locked - return (!welded) //closed but not welded... + return (welded) //closed but not welded... /obj/structure/closet/mob_breakout(mob/living/escapee) - . = ..() - var/breakout_time = 2 //2 minutes by default - if(breakout || !req_breakout()) + if (!breakout_time) + breakout_time = 120 SECONDS + if (breakout) + return FALSE + if (!req_breakout()) + breakout = FALSE + open() return FALSE . = TRUE escapee.setClickCooldown(100) - //okay, so the closet is either welded or locked... resist!!! - to_chat(escapee, SPAN_WARNING("You lean on the back of \the [src] and start pushing the door open. (this will take about [breakout_time] minutes)")) - - visible_message(SPAN_DANGER("\The [src] begins to shake violently!")) + to_chat(escapee, SPAN_WARNING("You lean on the back of [src] and start pushing the door open. (this will take about [breakout_time/(1 SECOND)] second\s)")) + visible_message(SPAN_DANGER("[src] begins to shake violently!")) + shake_animation() - breakout = 1 //can't think of a better way to do this right now. - for(var/i in 1 to (6*breakout_time * 2)) //minutes * 6 * 5seconds * 2 - if(!do_after(escapee, 5 SECONDS, do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) //5 seconds - breakout = 0 - return FALSE - //Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'... - if(!req_breakout()) - breakout = 0 - return FALSE + var/stages = 4 + breakout = TRUE + for (var/i = 1 to stages) + if (do_after(escapee, breakout_time*(1/stages), do_flags = DO_DEFAULT | DO_USER_UNIQUE_ACT, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) + if (!req_breakout()) + breakout = FALSE + open() + return + to_chat(escapee, SPAN_WARNING("You try to slip free of [src] ([i*100/stages]% done).")) + else + if (!req_breakout()) + breakout = FALSE + open() + return + to_chat(escapee, SPAN_WARNING("You stop trying to slip free of [src].")) + breakout = FALSE + return playsound(src.loc, 'sound/effects/grillehit.ogg', 100, 1) shake_animation() add_fingerprint(escapee) //Well then break it! - breakout = 0 + breakout = FALSE to_chat(escapee, SPAN_WARNING("You successfully break out!")) - visible_message(SPAN_DANGER("\The [escapee] successfully broke out of \the [src]!")) + visible_message(SPAN_DANGER("[escapee] successfully broke out of [src]!")) playsound(src.loc, 'sound/effects/grillehit.ogg', 100, 1) break_open() shake_animation() @@ -482,10 +518,10 @@ if(!CanPhysicallyInteract(user)) return FALSE if(src.opened) - to_chat(user, SPAN_NOTICE("Close \the [src] first.")) + to_chat(user, SPAN_NOTICE("Close [src] first.")) return FALSE if(src.broken) - to_chat(user, SPAN_WARNING("\The [src] appears to be broken.")) + to_chat(user, SPAN_WARNING("[src] appears to be broken.")) return FALSE if(user.loc == src) to_chat(user, SPAN_NOTICE("You can't reach the lock from inside.")) @@ -503,7 +539,7 @@ if(CanToggleLock(user, id_card)) locked = !locked visible_message( - SPAN_NOTICE("\The [src] has been [locked ? null : "un"]locked by \the [user]."), + SPAN_NOTICE("[src] has been [locked ? null : "un"]locked by [user]."), range = 3 ) update_icon() @@ -515,15 +551,13 @@ /obj/structure/closet/proc/CanToggleLock(mob/user, obj/item/card/id/id_card) return allowed(user) || (istype(id_card) && check_access_list(id_card.GetAccess())) -/obj/structure/closet/AltClick(mob/user) - if(!src.opened) +/obj/structure/closet/attack_hand_secondary(mob/living/user, list/modifiers) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) + return + . = SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(!opened) togglelock(user) - else - return ..() - -/obj/structure/closet/CtrlAltClick(mob/user) - verb_toggleopen() - return 1 /obj/structure/closet/emp_act(severity) for (var/atom/A as anything in src) @@ -546,9 +580,9 @@ if(visual_feedback) visible_message(visual_feedback, audible_feedback) else if(user && emag_source) - visible_message(SPAN_WARNING("\The [src] has been broken by \the [user] with \an [emag_source]!"), "You hear a faint electrical spark.") + visible_message(SPAN_WARNING("[src] has been broken by [user] with \an [emag_source]!"), "You hear a faint electrical spark.") else - visible_message(SPAN_WARNING("\The [src] sparks and breaks open!"), "You hear a faint electrical spark.") + visible_message(SPAN_WARNING("[src] sparks and breaks open!"), "You hear a faint electrical spark.") return 1 else . = ..() diff --git a/code/game/objects/structures/crates_lockers/closets/_closet_appearance_definitions.dm b/code/game/objects/structures/crates_lockers/closets/_closet_appearance_definitions.dm index 923088c3a6db8..6821a974355b3 100644 --- a/code/game/objects/structures/crates_lockers/closets/_closet_appearance_definitions.dm +++ b/code/game/objects/structures/crates_lockers/closets/_closet_appearance_definitions.dm @@ -39,12 +39,19 @@ open_icon = icon(base_icon, "base") open_icon.Blend(icon(base_icon, "open"), ICON_OVERLAY) open_icon.Blend(color, BLEND_ADD) - open_icon.Blend(icon(base_icon, "interior"), ICON_OVERLAY) if(decal_icon) for(var/thing in decals) - var/icon/this_decal_icon = icon(decal_icon, "[thing]_open") - this_decal_icon.Blend(decals[thing], BLEND_ADD) - open_icon.Blend(this_decal_icon, ICON_OVERLAY) + var/icon/this_decal_icon + if (ICON_HAS_STATE(decal_icon, "[thing]_open")) + this_decal_icon = icon(decal_icon, "[thing]_open") + + else if(ICON_HAS_STATE(decal_icon, thing)) + this_decal_icon = icon(decal_icon, thing) + + if(this_decal_icon) + this_decal_icon.Blend(decals[thing], BLEND_ADD) + open_icon.Blend(this_decal_icon, ICON_OVERLAY) + open_icon.Blend(icon(base_icon, "interior"), ICON_OVERLAY) // Generate basic closed icons. closed_emagged_icon = icon(base_icon, "base") @@ -53,9 +60,16 @@ closed_emagged_icon.Blend(color, BLEND_ADD) if(decal_icon) for(var/thing in decals) - var/icon/this_decal_icon = icon(decal_icon, thing) - this_decal_icon.Blend(decals[thing], BLEND_ADD) - closed_emagged_icon.Blend(this_decal_icon, ICON_OVERLAY) + var/icon/this_decal_icon + if(ICON_HAS_STATE(decal_icon, "[thing]_closed")) + this_decal_icon = icon(decal_icon, "[thing]_closed") + + else if(ICON_HAS_STATE(decal_icon, thing)) + this_decal_icon = icon(decal_icon, thing) + + if(this_decal_icon) + this_decal_icon.Blend(decals[thing], BLEND_ADD) + closed_emagged_icon.Blend(this_decal_icon, ICON_OVERLAY) closed_locked_icon = icon(closed_emagged_icon) closed_unlocked_icon = icon(closed_emagged_icon) @@ -212,7 +226,6 @@ can_lock = TRUE /singleton/closet_appearance/secure_closet/engineering - can_lock = TRUE color = COLOR_YELLOW_GRAY decals = list( "upper_side_vent", @@ -639,7 +652,7 @@ color = COLOR_NT_RED decals = list( "crate_bracing" - ) + ) extra_decals = list( "marking" = COLOR_OFF_WHITE, "text_upper" = COLOR_OFF_WHITE diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm index b8acd82f6faea..3523a84e0cb73 100644 --- a/code/game/objects/structures/crates_lockers/closets/coffin.dm +++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm @@ -1,6 +1,7 @@ /obj/structure/closet/coffin name = "coffin" desc = "It's a burial receptacle for the dearly departed." + icon_state = "closed" icon = 'icons/obj/closets/coffin.dmi' setup = 0 closet_appearance = null @@ -10,22 +11,31 @@ /obj/structure/closet/coffin/examine(mob/user, distance) . = ..() if(distance <= 1 && !opened) - to_chat(user, "The lid is [locked ? "tightly secured with screws." : "unsecured and can be opened."]") + . += SPAN_NOTICE("The lid is [locked ? "tightly secured with screws." : "unsecured and can be opened."]") /obj/structure/closet/coffin/can_open() . = ..() if(locked) return FALSE -/obj/structure/closet/coffin/attackby(obj/item/W, mob/user) - if(!opened && isScrewdriver(W)) - to_chat(user, SPAN_NOTICE("You begin screwing [src]'s lid [locked ? "open" : "shut"].")) - playsound(src, 'sound/items/Screwdriver.ogg', 100, 1) - if(do_after(user, screwdriver_time_needed, src, DO_REPAIR_CONSTRUCT)) - locked = !locked - to_chat(user, SPAN_NOTICE("You [locked ? "screw down" : "unscrew"] [src]'s lid.")) - else - ..() + +/obj/structure/closet/coffin/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + // Screwdriver - Toggle lock + if(opened) + balloon_alert(user, "нужно закрыть!") + return + user.visible_message( + SPAN_NOTICE("[user] begins screwing [src]'s lid [locked ? "open" : "shut"] with [tool]."), + SPAN_NOTICE("You begin screwing [src]'s lid [locked ? "open" : "shut"] with [tool].") + ) + if(!tool.use_as_tool(src, user, screwdriver_time_needed, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || opened) + return + user.visible_message( + SPAN_NOTICE("[user] screws [src]'s lid [locked ? "open" : "shut"] with [tool]."), + SPAN_NOTICE("You screw [src]'s lid [locked ? "open" : "shut"] with [tool].") + ) + locked = !locked /obj/structure/closet/coffin/toggle(mob/user as mob) if(!(opened ? close() : open())) diff --git a/code/game/objects/structures/crates_lockers/closets/fridge.dm b/code/game/objects/structures/crates_lockers/closets/fridge.dm new file mode 100644 index 0000000000000..c0e18b4f93d83 --- /dev/null +++ b/code/game/objects/structures/crates_lockers/closets/fridge.dm @@ -0,0 +1,31 @@ +/obj/structure/closet/kitchen + name = "kitchen cabinet" + +/obj/structure/closet/kitchen/WillContain() + return list( + /obj/item/reagent_containers/food/condiment/salt = 1, + /obj/item/reagent_containers/food/condiment/flour = 7, + /obj/item/reagent_containers/food/condiment/sugar = 2, + /obj/item/reagent_containers/glass/bottle/dye/polychromic = 2 + ) + +/obj/structure/closet/fridge + name = "refrigerator" + desc = "It's a refrigerated storage unit." + icon = 'icons/obj/closets/fridge.dmi' + icon_state = "closed_unlocked" + closet_appearance = null + +/obj/structure/closet/fridge/WillContain() + return list( + /obj/item/reagent_containers/food/drinks/milk = 6, + /obj/item/reagent_containers/food/drinks/soymilk = 4, + /obj/item/storage/fancy/egg_box/full = 4 + ) + +/obj/structure/closet/fridge/meat/WillContain() + return list( + /obj/item/reagent_containers/food/snacks/meat/beef = 5, + /obj/random/fish = 5, + /obj/item/storage/fancy/bugmeat = 6 + ) diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 10e25e3cbeba9..75f8af90675df 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -17,7 +17,7 @@ return list( /obj/item/clothing/head/that = 2, /obj/item/device/radio/headset/headset_service = 2, - /obj/item/clothing/head/hairflower, + /obj/item/clothing/head/hairflower/red, /obj/item/clothing/head/hairflower/pink, /obj/item/clothing/head/hairflower/yellow, /obj/item/clothing/head/hairflower/blue, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm index 46660b3f8e5d8..07b4d7993a191 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/_secure_closets.dm @@ -6,6 +6,7 @@ setup = CLOSET_HAS_LOCK | CLOSET_CAN_BE_WELDED locked = TRUE health_max = 200 + health_min_damage = 5 /obj/structure/closet/secure_closet/slice_into_parts(obj/item/weldingtool/WT, mob/user) to_chat(user, SPAN_NOTICE("\The [src] is too strong to be taken apart.")) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 9052d602135c3..162b1361747b8 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -10,7 +10,7 @@ new/datum/atom_creator/simple(/obj/item/storage/backpack/dufflebag/eng, 50), /obj/item/blueprints, /obj/item/clothing/under/rank/chief_engineer, - /obj/item/clothing/head/hardhat/firefighter/Chief, + /obj/item/clothing/head/hardhat/firefighter/chief, /obj/item/clothing/head/welding, /obj/item/clothing/gloves/insulated, /obj/item/clothing/shoes/brown, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm deleted file mode 100644 index 56d2b6bc6b7f2..0000000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ /dev/null @@ -1,57 +0,0 @@ -/obj/structure/closet/secure_closet/freezer/kitchen - name = "kitchen cabinet" - req_access = list(access_kitchen) - -/obj/structure/closet/secure_closet/freezer/kitchen/WillContain() - return list( - /obj/item/reagent_containers/food/condiment/salt = 1, - /obj/item/reagent_containers/food/condiment/flour = 7, - /obj/item/reagent_containers/food/condiment/sugar = 2, - /obj/item/reagent_containers/glass/bottle/dye/polychromic = 2 - ) - -/obj/structure/closet/secure_closet/freezer/kitchen/mining - req_access = list() - -/obj/structure/closet/secure_closet/freezer/meat - name = "meat fridge" - icon = 'icons/obj/closets/fridge.dmi' - closet_appearance = null - -/obj/structure/closet/secure_closet/freezer/meat/WillContain() - return list( - /obj/item/reagent_containers/food/snacks/meat/beef = 5, - /obj/random/fish = 5, - /obj/item/storage/fancy/bugmeat = 6 - ) - -/obj/structure/closet/secure_closet/freezer/fridge - name = "refrigerator" - icon = 'icons/obj/closets/fridge.dmi' - closet_appearance = null - -/obj/structure/closet/secure_closet/freezer/fridge/WillContain() - return list( - /obj/item/reagent_containers/food/drinks/milk = 6, - /obj/item/reagent_containers/food/drinks/soymilk = 4, - /obj/item/storage/fancy/egg_box/full = 4 - ) - -/obj/structure/closet/secure_closet/freezer/money - name = "secure locker" - icon = 'icons/obj/closets/fridge.dmi' - closet_appearance = null - req_access = list(access_heads_vault) - -/obj/structure/closet/secure_closet/freezer/money/Initialize() - . = ..() - //let's make hold a substantial amount. - var/created_size = 0 - for(var/i = 1 to 200) //sanity loop limit - var/obj/item/cash_type = pick(3; /obj/item/spacecash/bundle/c1000, 4; /obj/item/spacecash/bundle/c500, 5; /obj/item/spacecash/bundle/c200) - var/bundle_size = initial(cash_type.w_class) / 2 - if(created_size + bundle_size <= storage_capacity) - created_size += bundle_size - new cash_type(src) - else - break diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm index fa48b6c086c0d..fdb4b593ae2ae 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm @@ -1,15 +1,15 @@ /obj/structure/closet/secure_closet/guncabinet name = "gun cabinet" req_access = list(access_armory) - icon = 'icons/obj/guncabinet.dmi' + icon = 'icons/obj/structures/guncabinet.dmi' closet_appearance = null /obj/structure/closet/secure_closet/guncabinet/Initialize() . = ..() update_icon() -/obj/structure/closet/secure_closet/guncabinet/LateInitialize(mapload, ...) - . = ..() +/obj/structure/closet/secure_closet/guncabinet/LateInitialize(mapload) + ..() update_icon() /obj/structure/closet/secure_closet/guncabinet/toggle() @@ -21,9 +21,9 @@ update_icon() /obj/structure/closet/secure_closet/guncabinet/on_update_icon() - overlays.Cut() + ClearOverlays() if(opened) - overlays += icon(icon,"door_open") + AddOverlays(icon(icon,"door_open")) else var/lazors = 0 var/shottas = 0 @@ -42,16 +42,15 @@ shottas-- gun.icon_state = "projectile" gun.pixel_x = i*4 - overlays += gun + AddOverlays(gun) - overlays += icon(src.icon, "door") + AddOverlays(icon(src.icon, "door")) if(welded) - overlays += icon(src.icon,"welded") + AddOverlays(icon(src.icon,"welded")) if(!broken) if(locked) - overlays += icon(src.icon,"locked") + AddOverlays(icon(src.icon,"locked")) else - overlays += icon(src.icon,"open") - + AddOverlays(icon(src.icon,"open")) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index bd08e138729d4..b4ae79c737ee1 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -11,7 +11,6 @@ /obj/item/device/scanner/plant, /obj/item/device/radio/headset/headset_service, /obj/item/clothing/mask/bandana/botany, - /obj/item/clothing/head/bandana/green, /obj/item/material/minihoe, /obj/item/material/hatchet, /obj/item/wirecutters/clippers, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 9e91fa1ee7db4..3722d660cd96e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -7,7 +7,8 @@ list(/obj/item/clothing/under/rank/medical/scrubs/lilac, /obj/item/clothing/head/surgery/lilac), \ list(/obj/item/clothing/under/rank/medical/scrubs/teal, /obj/item/clothing/head/surgery/teal), \ list(/obj/item/clothing/under/rank/medical/scrubs/heliodor, /obj/item/clothing/head/surgery/heliodor), \ - list(/obj/item/clothing/under/rank/medical/scrubs/navyblue, /obj/item/clothing/head/surgery/navyblue)\ + list(/obj/item/clothing/under/rank/medical/scrubs/navyblue, /obj/item/clothing/head/surgery/navyblue), \ + list(/obj/item/clothing/under/rank/medical/scrubs/lavender, /obj/item/clothing/head/surgery/lavender) \ ) \ ) @@ -27,7 +28,7 @@ /obj/item/reagent_containers/glass/bottle/antitoxin = 2, /obj/random/firstaid, /obj/item/storage/box/masks, - /obj/item/storage/box/gloves + /obj/item/storage/box/latexgloves ) /obj/structure/closet/secure_closet/medical2 @@ -180,7 +181,7 @@ /obj/item/reagent_containers/syringe/antiviral, /obj/item/reagent_containers/glass/bottle/antitoxin, /obj/item/storage/box/masks, - /obj/item/storage/box/gloves, + /obj/item/storage/box/latexgloves, /obj/item/clothing/under/rank/virologist, /obj/item/clothing/shoes/white, /obj/item/clothing/suit/storage/toggle/labcoat/virologist, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 5bdb6c8843a37..285946653593e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -5,7 +5,7 @@ /obj/structure/closet/secure_closet/scientist/WillContain() return list( - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/messenger/tox, /obj/item/storage/backpack/satchel/tox)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/messenger/corpsci, /obj/item/storage/backpack/satchel/corpsci)), /obj/item/clothing/under/rank/scientist, /obj/item/clothing/suit/storage/toggle/labcoat, /obj/item/clothing/shoes/white, @@ -21,7 +21,7 @@ /obj/structure/closet/secure_closet/xenobio/WillContain() return list( - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/messenger/tox, /obj/item/storage/backpack/satchel/tox)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/messenger/corpsci, /obj/item/storage/backpack/corpsci)), /obj/item/clothing/under/rank/scientist, /obj/item/clothing/suit/storage/toggle/labcoat, /obj/item/clothing/shoes/white, diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index 2f926bebfa103..286982fdf307c 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -57,7 +57,8 @@ /obj/item/device/flashlight, /obj/item/tank/oxygen_scba, /obj/item/extinguisher, - /obj/item/clothing/head/hardhat/firefighter/Chief) + /obj/item/clothing/head/hardhat/firefighter/chief + ) /* * Tool Closet @@ -88,11 +89,11 @@ if(prob(20)) new /obj/item/storage/belt/utility(src) if(prob(30)) - new /obj/item/stack/cable_coil/random(src) + new /obj/random/single/color/cable_coil(src) if(prob(30)) - new /obj/item/stack/cable_coil/random(src) + new /obj/random/single/color/cable_coil(src) if(prob(30)) - new /obj/item/stack/cable_coil/random(src) + new /obj/random/single/color/cable_coil(src) if(prob(20)) new /obj/item/device/multitool(src) if(prob(5)) @@ -207,7 +208,7 @@ /obj/item/pickaxe/xeno/hand, /obj/item/storage/bag/fossils, /obj/item/hand_labeler, - /obj/item/device/spaceflare + /obj/item/shuttle_beacon ) /obj/structure/closet/shipping_wall @@ -224,4 +225,4 @@ return list( /obj/item/stack/material/cardboard/ten, /obj/item/device/destTagger, - /obj/item/stack/package_wrap/twenty_five) + /obj/item/stack/package_wrap/cargo_wrap) diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm index 45bbe25280e25..55e78e1be44ba 100644 --- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm +++ b/code/game/objects/structures/crates_lockers/closets/walllocker.dm @@ -3,7 +3,7 @@ /obj/structure/closet/walllocker desc = "A wall mounted storage locker." - name = "Wall Locker" + name = "wall locker" closet_appearance = /singleton/closet_appearance/wall density = FALSE anchored = TRUE @@ -16,6 +16,7 @@ /obj/structure/closet/walllocker/emerglocker name = "emergency locker" desc = "A wall mounted locker with emergency supplies." + atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_NO_TOOLS var/list/spawnitems = list(/obj/item/tank/oxygen_emergency,/obj/item/clothing/mask/breath) var/amount = 2 // spawns each items X times. closet_appearance = /singleton/closet_appearance/wall/emergency @@ -24,9 +25,6 @@ src.attack_hand(user) return -/obj/structure/closet/walllocker/emerglocker/attackby(obj/item/W as obj, mob/user as mob) - return - /obj/structure/closet/walllocker/emerglocker/attack_hand(mob/user as mob) if (istype(user, /mob/living/silicon/ai)) //Added by Strumpetplaya - AI shouldn't be able to return //activate emergency lockers. This fixes that. (Does this make sense, the AI can't call attack_hand, can it? --Mloc) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index ff516caf88456..fd1f8ff95bc6c 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -193,10 +193,10 @@ /obj/structure/closet/wardrobe/pjs/New() ..() - new /obj/item/clothing/under/pj/red(src) - new /obj/item/clothing/under/pj/red(src) - new /obj/item/clothing/under/pj/blue(src) - new /obj/item/clothing/under/pj/blue(src) + new /obj/item/clothing/under/redpyjamas(src) + new /obj/item/clothing/under/redpyjamas(src) + new /obj/item/clothing/under/bluepyjamas(src) + new /obj/item/clothing/under/bluepyjamas(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/shoes/slippers(src) @@ -326,9 +326,9 @@ new /obj/item/clothing/under/color/green(src) new /obj/item/clothing/under/color/orange(src) new /obj/item/clothing/under/color/pink(src) - new /obj/item/clothing/under/dress/plaid_blue(src) - new /obj/item/clothing/under/dress/plaid_red(src) - new /obj/item/clothing/under/dress/plaid_purple(src) + new /obj/item/clothing/under/skirt/plaid_blue(src) + new /obj/item/clothing/under/skirt/plaid_red(src) + new /obj/item/clothing/under/skirt/plaid_purple(src) new /obj/item/clothing/shoes/blue(src) new /obj/item/clothing/shoes/yellow(src) new /obj/item/clothing/shoes/green(src) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 47bb0331b3e17..15d8966e88ebf 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -3,6 +3,7 @@ desc = "A rectangular steel crate." closet_appearance = /singleton/closet_appearance/crate atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + obj_flags = OBJ_FLAG_CAN_TABLE setup = 0 storage_types = CLOSET_STORAGE_ITEMS var/points_per_crate = 5 @@ -28,43 +29,68 @@ devices += H for(var/obj/item/device/assembly/A in src) devices += A - to_chat(user,"There are some wires attached to the lid, connected to [english_list(devices)].") + . += SPAN_NOTICE("There are some wires attached to the lid, connected to [english_list(devices)].") -/obj/structure/closet/crate/attackby(obj/item/W as obj, mob/user as mob) - if(opened) - return ..() - else if(istype(W, /obj/item/stack/package_wrap)) +/obj/structure/closet/crate/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!rigged) + USE_FEEDBACK_FAILURE("[src] has no wiring to cut.") return - else if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if(rigged) - to_chat(user, SPAN_NOTICE("[src] is already rigged!")) - return - if (C.use(1)) - to_chat(user, SPAN_NOTICE("You rig [src].")) - rigged = 1 - return - else if(istype(W, /obj/item/device/assembly_holder) || istype(W, /obj/item/device/assembly)) - if(rigged) - if(!user.unEquip(W, src)) - return - to_chat(user, SPAN_NOTICE("You attach [W] to [src].")) - return - else if(isWirecutter(W)) - if(rigged) - to_chat(user, SPAN_NOTICE("You cut away the wiring.")) - playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) - rigged = 0 - return - else + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + rigged = FALSE + new /obj/item/stack/cable_coil(loc, 1) + user.visible_message( + SPAN_NOTICE("[user] cuts [src]'s wiring with [tool]."), + SPAN_NOTICE("You cuts [src]'s wiring with [tool].") + ) + +/obj/structure/closet/crate/use_tool(obj/item/tool, mob/user, list/click_params) + // Below interactions only apply if the crate is closed + if (opened) return ..() + // Assembly - Attach to rigged crate + if (istype(tool, /obj/item/device/assembly_holder) || istype(tool, /obj/item/device/assembly)) + if (!rigged) + USE_FEEDBACK_FAILURE("[src] needs to be rigged with wiring before you can attach [tool].") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + user.visible_message( + SPAN_NOTICE("[user] attaches [tool] to [src]."), + SPAN_NOTICE("You attach [tool] to [src].") + ) + return TRUE + + // Cable Coil - Rig crate + if (isCoil(tool)) + if (rigged) + USE_FEEDBACK_FAILURE("[src] is already rigged.") + return TRUE + var/obj/item/stack/cable_coil/cable = tool + if (!cable.use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(cable, 1, "to rig [src].") + return TRUE + rigged = TRUE + user.visible_message( + SPAN_NOTICE("[user] adds some wiring to [src] with [cable.get_vague_name(FALSE)]."), + SPAN_NOTICE("You rig [src] with [cable.get_exact_name(1)].") + ) + return TRUE + + return ..() + + /obj/structure/closet/crate/secure desc = "A secure crate." - name = "Secure crate" + name = "secure crate" closet_appearance = /singleton/closet_appearance/crate/secure setup = CLOSET_HAS_LOCK locked = TRUE + health_max = 200 + health_min_damage = 5 /obj/structure/closet/crate/secure/Initialize() . = ..() @@ -82,7 +108,7 @@ desc = "A internals crate." /obj/structure/closet/crate/internals/fuel - name = "\improper Fuel tank crate" + name = "fuel tank crate" desc = "A fuel tank crate." /obj/structure/closet/crate/internals/fuel/WillContain() @@ -291,3 +317,53 @@ /obj/structure/closet/crate/uranium/WillContain() return list(/obj/item/stack/material/uranium/ten = 5) + +///Base ninja equipment +/obj/structure/closet/crate/ninja + name = "ninja equipment crate" + desc = "An ominous equipment crate." + closet_appearance = /singleton/closet_appearance/crate/secure/weapon + +/obj/structure/closet/crate/ninja/WillContain() + return list( + /obj/item/rig/light/ninja, + /obj/item/material/sword/katana, + /obj/item/storage/box/syndie_kit/silenced + ) + +///Ninja equipment loadouts. Overwritten in torch/structures/closets.dm because of away/example check evils +/obj/structure/closet/crate/ninja/sol + name = "sol equipment crate" + desc = "A tactical equipment crate." + +/obj/structure/closet/crate/ninja/sol/WillContain() + return list( + /obj/item/rig/light/ninja/sol + ) + +/obj/structure/closet/crate/ninja/gcc + name = "gcc equipment crate" + desc = "A heavy equipment crate." + +/obj/structure/closet/crate/ninja/gcc/WillContain() + return list( + /obj/item/rig/light/ninja/gcc + ) + +/obj/structure/closet/crate/ninja/corpo + name = "corporate equipment crate" + desc = "A patented equipment crate." + +/obj/structure/closet/crate/ninja/corpo/WillContain() + return list( + /obj/item/rig/light/ninja/corpo + ) + +/obj/structure/closet/crate/ninja/merc + name = "mercenary equipment crate" + desc = "A traitorous equipment crate." + +/obj/structure/closet/crate/ninja/merc/WillContain() + return list( + /obj/item/rig/merc/ninja + ) diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 465c9e954adc8..25e9ec54d60c9 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -5,6 +5,8 @@ icon_state = "densecrate" density = TRUE atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + health_max = 100 + health_min_damage = 4 /obj/structure/largecrate/Initialize() . = ..() @@ -14,21 +16,29 @@ I.forceMove(src) /obj/structure/largecrate/attack_hand(mob/user as mob) + if (user.a_intent == I_HURT) + return ..() to_chat(user, SPAN_NOTICE("You need a crowbar to pry this open!")) - return -/obj/structure/largecrate/attackby(obj/item/W as obj, mob/user as mob) - if(isCrowbar(W)) - new /obj/item/stack/material/wood(src) - var/turf/T = get_turf(src) - for(var/atom/movable/AM in contents) - if(AM.simulated) AM.forceMove(T) - user.visible_message(SPAN_NOTICE("[user] pries \the [src] open."), \ - SPAN_NOTICE("You pry open \the [src]."), \ - SPAN_NOTICE("You hear splitting wood.")) - qdel(src) - else - return attack_hand(user) +/obj/structure/largecrate/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + var/obj/item/stack/material/wood/A = new(loc) + transfer_fingerprints_to(A) + dump_contents() + user.visible_message( + SPAN_NOTICE("[user] pries [src] open with [tool]."), + SPAN_NOTICE("You pry [src] open with [tool]."), + SPAN_ITALIC("You hear splitting wood.") + ) + qdel(src) + +/obj/structure/largecrate/on_death() + var/obj/item/stack/material/wood/A = new(loc) + transfer_fingerprints_to(A) + dump_contents() + qdel_self() /obj/structure/largecrate/mule name = "MULE crate" diff --git a/code/game/objects/structures/crates_lockers/med_crate.dm b/code/game/objects/structures/crates_lockers/med_crate.dm index bc446b350e2a5..a880683b35dd2 100644 --- a/code/game/objects/structures/crates_lockers/med_crate.dm +++ b/code/game/objects/structures/crates_lockers/med_crate.dm @@ -1,5 +1,5 @@ /obj/structure/closet/crate/med_crate/trauma - name = "\improper Trauma crate" + name = "trauma crate" desc = "A crate with trauma equipment." closet_appearance = /singleton/closet_appearance/crate/medical/trauma @@ -7,13 +7,13 @@ return list( /obj/item/stack/medical/splint = 2, /obj/item/stack/medical/advanced/bruise_pack = 10, - /obj/item/reagent_containers/pill/sugariron = 6, + /obj/item/storage/pill_bottle/sugariron = 1, /obj/item/storage/pill_bottle/paracetamol = 2, /obj/item/storage/pill_bottle/inaprovaline ) /obj/structure/closet/crate/med_crate/burn - name = "\improper Burn crate" + name = "burn crate" desc = "A crate with burn equipment." closet_appearance = /singleton/closet_appearance/crate/medical @@ -27,7 +27,7 @@ ) /obj/structure/closet/crate/med_crate/oxyloss - name = "\improper Low oxygen crate" + name = "low oxygen crate" desc = "A crate with low oxygen equipment." closet_appearance = /singleton/closet_appearance/crate/medical/oxygen @@ -38,7 +38,7 @@ /obj/item/storage/pill_bottle/inaprovaline ) /obj/structure/closet/crate/med_crate/toxin - name = "\improper Toxin crate" + name = "toxin crate" desc = "A crate with toxin equipment." closet_appearance = /singleton/closet_appearance/crate/medical/toxins @@ -46,5 +46,5 @@ return list( /obj/item/storage/firstaid/surgery, /obj/item/storage/pill_bottle/dylovene = 2, - /obj/item/reagent_containers/pill/hyronalin = 12 + /obj/item/storage/pill_bottle/hyronalin = 1 ) diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index 199ec46b1ba72..42cbf5588eb82 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -1,6 +1,6 @@ /obj/structure/curtain name = "curtain" - icon = 'icons/obj/curtain.dmi' + icon = 'icons/obj/structures/curtain.dmi' icon_state = "closed" layer = ABOVE_WINDOW_LAYER opacity = 1 diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 1ff9cf3416d84..ff572292cee98 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -1,6 +1,6 @@ /obj/structure/displaycase name = "display case" - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/showcases.dmi' icon_state = "glassbox" desc = "A display case for prized possessions. It taunts you to kick it." density = TRUE @@ -20,7 +20,7 @@ /obj/structure/displaycase/examine(mob/user) . = ..() if(length(contents)) - to_chat(user, "Inside you see [english_list(contents)].") + . += SPAN_NOTICE("Inside you see [english_list(contents)].") /obj/structure/displaycase/ex_act(severity) if (severity < EX_ACT_LIGHT) @@ -56,7 +56,7 @@ update_icon() /obj/structure/displaycase/on_update_icon() - if(health_dead) + if(health_dead()) icon_state = "glassboxb" else icon_state = "glassbox" @@ -66,7 +66,7 @@ /obj/structure/displaycase/attack_hand(mob/user as mob) add_fingerprint(user) - if(!health_dead) + if(!health_dead()) to_chat(usr, text(SPAN_WARNING("You kick the display case."))) visible_message(SPAN_WARNING("[usr] kicks the display case.")) damage_health(2, DAMAGE_BRUTE) diff --git a/code/game/objects/structures/dogbed.dm b/code/game/objects/structures/dogbed.dm index 80e68c2d5f5cb..aaba888615922 100644 --- a/code/game/objects/structures/dogbed.dm +++ b/code/game/objects/structures/dogbed.dm @@ -1,7 +1,7 @@ /obj/structure/dogbed name = "dogbed" desc = "A bed made especially for dogs, or other similarly sized pets." - icon = 'icons/obj/furniture.dmi' + icon = 'icons/obj/structures/furniture.dmi' icon_state = "dogbed" can_buckle = TRUE buckle_dir = SOUTH diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index df6afd2b3dfd9..4be91ccf50b6b 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -5,7 +5,22 @@ anchored = FALSE density = TRUE w_class = ITEM_SIZE_NO_CONTAINER - var/state = 0 + obj_flags = OBJ_FLAG_ANCHORABLE + + var/const/ASSEMBLY_STATE_FRAME = 0 + var/const/ASSEMBLY_STATE_WIRED = 1 + var/const/ASSEMBLY_STATE_CIRCUIT = 2 + var/state = ASSEMBLY_STATE_FRAME + + var/static/list/reinforcement_materials = list( + MATERIAL_GOLD, + MATERIAL_SILVER, + MATERIAL_DIAMOND, + MATERIAL_URANIUM, + MATERIAL_PHORON, + MATERIAL_SANDSTONE + ) + var/base_icon_state = "" var/base_name = "Airlock" var/obj/item/airlock_electronics/electronics = null @@ -84,156 +99,288 @@ bound_height = width * world.icon_size - -/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/pen)) - var/t = sanitizeSafe(input(user, "Enter the name for the door.", src.name, src.created_name), MAX_NAME_LEN) - if(!t) return - if(!in_range(src, usr) && src.loc != usr) return - created_name = t +/obj/structure/door_assembly/can_anchor(obj/item/tool, mob/user, silent) + . = ..() + if (!.) return + if (state != ASSEMBLY_STATE_FRAME) + if (!silent) + USE_FEEDBACK_FAILURE("[src] needs its components and wiring removed before you can unanchor it.") + return FALSE - if(isWelder(W) && ( (istext(glass)) || (glass == 1) || (!anchored) )) - var/obj/item/weldingtool/WT = W - if (WT.remove_fuel(0, user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) - if(istext(glass)) - user.visible_message("[user] welds the [glass] plating off the airlock assembly.", "You start to weld the [glass] plating off the airlock assembly.") - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src || !WT.isOn()) return - to_chat(user, SPAN_NOTICE("You welded the [glass] plating off!")) - var/M = text2path("/obj/item/stack/material/[glass]") - new M(src.loc, 2) - glass = 0 - else if(glass == 1) - user.visible_message("[user] welds the glass panel out of the airlock assembly.", "You start to weld the glass panel out of the airlock assembly.") - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src || !WT.isOn()) return - to_chat(user, SPAN_NOTICE("You welded the glass panel out!")) - new /obj/item/stack/material/glass/reinforced(src.loc) - glass = 0 - else if(!anchored) - user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.") - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src || !WT.isOn()) return - to_chat(user, SPAN_NOTICE("You dissasembled the airlock assembly!")) - new /obj/item/stack/material/steel(src.loc, 4) - qdel (src) - else - to_chat(user, SPAN_NOTICE("You need more welding fuel.")) - return +/obj/structure/door_assembly/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!electronics) + USE_FEEDBACK_FAILURE("[src] has no circuit to remove.") + return + user.visible_message( + SPAN_NOTICE("[user] starts removing [src]'s [electronics.name] with [tool]."), + SPAN_NOTICE("You start removing [src]'s [electronics.name] with [tool].") + ) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || !electronics) + return + electronics.dropInto(loc) + electronics.add_fingerprint(user) + state = ASSEMBLY_STATE_WIRED + update_state() + electronics = null + user.visible_message( + SPAN_NOTICE("[user] removes [src]'s [electronics.name] with [tool]."), + SPAN_NOTICE("You remove [src]'s [electronics.name] with [tool].") + ) - else if(isWrench(W) && state == 0) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - if(anchored) - user.visible_message("[user] begins unsecuring the airlock assembly from the floor.", "You begin unsecuring the airlock assembly from the floor.") - else - user.visible_message("[user] begins securing the airlock assembly to the floor.", "You begin securing the airlock assembly to the floor.") +/obj/structure/door_assembly/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(state != ASSEMBLY_STATE_CIRCUIT) + balloon_alert(user, "нет платы!") + return + user.visible_message( + SPAN_NOTICE("[user] starts finishing [src] with [tool]."), + SPAN_NOTICE("You start finishing [src] with [tool].") + ) + if(!tool.use_as_tool(src, user, 5 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || state != ASSEMBLY_STATE_CIRCUIT) + return + var/path + if(istext(glass)) + path = text2path("/obj/machinery/door/airlock/[glass]") + else if(glass == 1) + path = glass_type + else + path = airlock_type + var/obj/machinery/door/airlock/airlock = new path(loc, src) + transfer_fingerprints_to(airlock) + airlock.add_fingerprint(user, tool = tool) + user.visible_message( + SPAN_NOTICE("[user] finishes [airlock] with [tool]."), + SPAN_NOTICE("You finishes [airlock] with [tool].") + ) + qdel(src) - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src) return - to_chat(user, SPAN_NOTICE("You [anchored? "un" : ""]secured the airlock assembly!")) - anchored = !anchored +/obj/structure/door_assembly/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(state < ASSEMBLY_STATE_WIRED) + USE_FEEDBACK_FAILURE("[src] has no wiring to remove.") + return + if(state > ASSEMBLY_STATE_WIRED) + return + user.visible_message( + SPAN_NOTICE("[user] starts cutting [src]'s wires with [tool]."), + SPAN_NOTICE("You start cutting [src]'s wires with [tool].") + ) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_ELECTRICAL, do_flags = DO_REPAIR_CONSTRUCT) || state != ASSEMBLY_STATE_WIRED) + return + var/obj/item/stack/cable_coil/cable = new(loc, 1) + cable.add_fingerprint(user, tool = tool) + state = ASSEMBLY_STATE_FRAME + update_state() + user.visible_message( + SPAN_NOTICE("[user] cuts [src]'s wires with [tool]."), + SPAN_NOTICE("You cut [src]'s wires with [tool].") + ) - else if(isCoil(W) && state == 0 && anchored) - var/obj/item/stack/cable_coil/C = W - if (C.get_amount() < 1) - to_chat(user, SPAN_WARNING("You need one length of coil to wire the airlock assembly.")) +/obj/structure/door_assembly/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + // Remove glass/plating + if(glass) + var/glass_noun = istext(glass) ? "[glass] plating" : "glass panel" + if(!tool.tool_start_check(user, 1)) return - user.visible_message("[user] wires the airlock assembly.", "You start to wire the airlock assembly.") - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT) && state == 0 && anchored) - if (C.use(1)) - src.state = 1 - to_chat(user, SPAN_NOTICE("You wire the airlock.")) - - else if(isWirecutter(W) && state == 1 ) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) - user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") - - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src) return - to_chat(user, SPAN_NOTICE("You cut the airlock wires.!")) - new/obj/item/stack/cable_coil(src.loc, 1) - src.state = 0 - - else if(istype(W, /obj/item/airlock_electronics) && state == 1) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.") - - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src) return - if(!user.unEquip(W, src)) - return - to_chat(user, SPAN_NOTICE("You installed the airlock electronics!")) - src.state = 2 - src.SetName("Near finished Airlock Assembly") - src.electronics = W - - else if(isCrowbar(W) && state == 2 ) - //This should never happen, but just in case I guess - if (!electronics) - to_chat(user, SPAN_NOTICE("There was nothing to remove.")) - src.state = 1 + balloon_alert(user, "отваривание [glass_noun]") + if(!tool.use_as_tool(src, user, 4 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || !glass) return + var/obj/item/stack/material/stack + if(istext(glass)) + var/path = text2path("/obj/item/stack/material/[glass]") + stack = new path(loc, 2) + else + stack = new /obj/item/stack/material/glass/reinforced(loc) + stack.add_fingerprint(user, tool = tool) + glass = null + update_state() + user.visible_message( + SPAN_NOTICE("[user] welds [src]'s [glass_noun] off with [tool]."), + SPAN_NOTICE("You weld [src]'s [glass_noun] off with [tool].") + ) + return - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("\The [user] starts removing the electronics from the airlock assembly.", "You start removing the electronics from the airlock assembly.") + // Dismantle assembly + if(anchored) + USE_FEEDBACK_NEED_UNANCHOR(user) + return + if(!tool.tool_start_check(user, 1)) + return + USE_FEEDBACK_DECONSTRUCT_START(user) + if(!tool.use_as_tool(src, user, 4 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || anchored) + return + var/obj/item/stack/material/steel/stack = new(loc, 4) + transfer_fingerprints_to(stack) + stack.add_fingerprint(user, tool = tool) + user.visible_message( + SPAN_NOTICE("[user] dismantles [src] with [tool]."), + SPAN_NOTICE("You dismantle [src] with [tool].") + ) + qdel(src) - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src) return - to_chat(user, SPAN_NOTICE("You removed the airlock electronics!")) - src.state = 1 - src.SetName("Wired Airlock Assembly") - electronics.dropInto(loc) - electronics = null +/obj/structure/door_assembly/use_tool(obj/item/tool, mob/user, list/click_params) + // Airlock Electronics - Install circuit + if (istype(tool, /obj/item/airlock_electronics)) + if (state < ASSEMBLY_STATE_WIRED) + USE_FEEDBACK_FAILURE("[src] needs to be wired before you can install [src].") + return TRUE + if (electronics) + USE_FEEDBACK_FAILURE("[src] already has [electronics] installed.") + return TRUE + if (!user.canUnEquip(tool)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + playsound(src, 'sound/items/Screwdriver.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] starts installing [tool] into [src]."), + SPAN_NOTICE("You start installing [tool] into [src].") + ) + if (!user.do_skilled(4 SECONDS, SKILL_CONSTRUCTION, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + if (state < ASSEMBLY_STATE_WIRED) + USE_FEEDBACK_FAILURE("[src] needs to be wired before you can install [src].") + return TRUE + if (electronics) + USE_FEEDBACK_FAILURE("[src] already has [electronics] installed.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + state = ASSEMBLY_STATE_CIRCUIT + electronics = tool + update_state() + playsound(src, 'sound/items/Screwdriver.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] installs [tool] into [src]."), + SPAN_NOTICE("You install [tool] into [src].") + ) + return TRUE - else if(istype(W, /obj/item/stack/material) && !glass) - var/obj/item/stack/material/S = W - var/material_name = S.get_material_name() - if (S) - if (S.get_amount() >= 1) - if(material_name == MATERIAL_GLASS && S.reinf_material) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT) && !glass) - if (S.use(1)) - to_chat(user, SPAN_NOTICE("You installed reinforced glass windows into the airlock assembly.")) - glass = 1 - else if(!(material_name in list(MATERIAL_GOLD, MATERIAL_SILVER, MATERIAL_DIAMOND, MATERIAL_URANIUM, MATERIAL_PHORON, MATERIAL_SANDSTONE))) - to_chat(user, "You cannot make an airlock out of that material.") - return - else - if(S.get_amount() >= 2) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT) && !glass) - if (S.use(2)) - to_chat(user, SPAN_NOTICE("You installed [S.get_material_name()] plating into the airlock assembly.")) - glass = S.get_material_name() + // Cable Coil - Add wiring + if (isCoil(tool)) + if (state != ASSEMBLY_STATE_FRAME) + USE_FEEDBACK_FAILURE("[src] is already wired.") + return TRUE + if (!anchored) + USE_FEEDBACK_FAILURE("[src] needs to be anchored before you can wire it.") + return TRUE + var/obj/item/stack/cable_coil/cable = tool + if (!cable.can_use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(cable, 1, "to wire [src].") + return TRUE + user.visible_message( + SPAN_NOTICE("[user] starts wiring [src] with [tool]."), + SPAN_NOTICE("You start wiring [src] with [tool].") + ) + if (!user.do_skilled(4 SECONDS, SKILL_ELECTRICAL, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + if (state != ASSEMBLY_STATE_FRAME) + USE_FEEDBACK_FAILURE("[src] is already wired.") + return TRUE + if (!anchored) + USE_FEEDBACK_FAILURE("[src] needs to be anchored before you can wire it.") + return TRUE + if (!cable.use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(cable, 1, "to wire [src].") + return TRUE + state = ASSEMBLY_STATE_WIRED + update_state() + user.visible_message( + SPAN_NOTICE("[user] wires [src] with [tool]."), + SPAN_NOTICE("You wire [src] with [tool].") + ) + return TRUE - else if(isScrewdriver(W) && state == 2 ) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - to_chat(user, SPAN_NOTICE("Now finishing the airlock.")) + // Material Stack - Add glass/plating + if (istype(tool, /obj/item/stack/material)) + if (glass) + USE_FEEDBACK_FAILURE("[src] already has [istext(glass) ? "[glass] plating" : "glass panel"] installed.") + return TRUE + var/obj/item/stack/material/stack = tool + var/material_name = stack.get_material_name() + // Glass Panel + if (material_name == MATERIAL_GLASS) + if (!stack.reinf_material) + USE_FEEDBACK_FAILURE("[src] needs reinforced glass to make a glass panel.") + return TRUE + if (!stack.can_use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(stack, 1, "to make a glass panel.") + return TRUE + playsound(src, 'sound/items/Crowbar.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] starts installing a glass panel into [src]."), + SPAN_NOTICE("You start installing a glass panel into [src].") + ) + if (!user.do_skilled(4 SECONDS, SKILL_CONSTRUCTION, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + if (glass) + USE_FEEDBACK_FAILURE("[src] already has [istext(glass) ? "[glass] plating" : "glass panel"] installed.") + return TRUE + if (!stack.reinf_material) + USE_FEEDBACK_FAILURE("[src] needs reinforced glass to make a glass panel.") + return TRUE + if (!stack.use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(stack, 1, "to make a glass panel.") + return TRUE + glass = TRUE + update_state() + playsound(src, 'sound/items/Crowbar.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] starts installing a glass panel into [src]."), + SPAN_NOTICE("You start installing a glass panel into [src].") + ) + return TRUE + // Plating + if (material_name in reinforcement_materials) + if (!stack.can_use(2)) + USE_FEEDBACK_STACK_NOT_ENOUGH(stack, 2, "to reinforce [src].") + return TRUE + playsound(src, 'sound/items/Crowbar.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] starts installing [material_name] plating into [src]."), + SPAN_NOTICE("You start installing [material_name] plating into [src].") + ) + if (!user.do_skilled(4 SECONDS, SKILL_CONSTRUCTION, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + if (glass) + USE_FEEDBACK_FAILURE("[src] already has [istext(glass) ? "[glass] plating" : "glass panel"] installed.") + return TRUE + if (!stack.use(2)) + USE_FEEDBACK_STACK_NOT_ENOUGH(stack, 2, "to reinforce [src].") + return TRUE + glass = material_name + update_state() + playsound(src, 'sound/items/Crowbar.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] installs [material_name] plating into [src]."), + SPAN_NOTICE("You install [material_name] plating into [src].") + ) + return TRUE + USE_FEEDBACK_FAILURE("[src] can't be reinforced with [material_name].") + return TRUE - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src) return - to_chat(user, SPAN_NOTICE("You finish the airlock!")) - var/path - if(istext(glass)) - path = text2path("/obj/machinery/door/airlock/[glass]") - else if (glass == 1) - path = glass_type - else - path = airlock_type + // Pen - Name door + if (istype(tool, /obj/item/pen)) + var/input = input(user, "Enter the name for the door", "[src] - Name", created_name) as null|text + input = sanitizeSafe(input, MAX_NAME_LEN) + if (!input || input == created_name || !user.use_sanity_check(src, tool)) + return TRUE + created_name = input + update_state() + user.visible_message( + SPAN_NOTICE("[user] names [src] to '[created_name]' with [tool]."), + SPAN_NOTICE("You name [src] to '[created_name]' with [tool].") + ) + return TRUE + + return ..() - new path(src.loc, src) - qdel(src) - else - ..() - update_state() /obj/structure/door_assembly/proc/update_state() - overlays.Cut() + ClearOverlays() var/image/filling_overlay var/image/panel_overlay var/final_name = "" @@ -253,5 +400,5 @@ panel_overlay = image(panel_icon, "construction1") final_name += "[glass == 1 ? "Window " : ""][istext(glass) ? "[glass] Airlock" : base_name] Assembly" SetName(final_name) - overlays += filling_overlay - overlays += panel_overlay + AddOverlays(filling_overlay) + AddOverlays(panel_overlay) diff --git a/code/game/objects/structures/drain.dm b/code/game/objects/structures/drain.dm index 423d192f311be..ee5f0c758e61a 100644 --- a/code/game/objects/structures/drain.dm +++ b/code/game/objects/structures/drain.dm @@ -3,7 +3,7 @@ /obj/structure/hygiene/drain name = "gutter" desc = "You probably can't get sucked down the plughole." - icon = 'icons/obj/drain.dmi' + icon = 'icons/obj/structures/drain.dmi' icon_state = "drain" anchored = TRUE density = FALSE @@ -11,24 +11,27 @@ can_drain = 1 var/welded -/obj/structure/hygiene/drain/attackby(obj/item/thing, mob/user) - ..() - if(isWelder(thing)) - var/obj/item/weldingtool/WT = thing - if(WT.isOn()) - welded = !welded - to_chat(user, SPAN_NOTICE("You weld \the [src] [welded ? "closed" : "open"].")) - else - to_chat(user, SPAN_WARNING("Turn \the [thing] on, first.")) - update_icon() +/obj/structure/hygiene/drain/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - if(isWrench(thing)) - new /obj/item/drain(src.loc) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, SPAN_WARNING("[user] unwrenches the [src].")) - qdel(src) + var/obj/item/drain/drain_item = new(loc) + transfer_fingerprints_to(drain_item) + user.visible_message( + SPAN_NOTICE("[user] unwrenches [src] from the floor with [tool]."), + SPAN_NOTICE("You unwrench [src] from the floor with [tool].") + ) + qdel(src) + +/obj/structure/hygiene/drain/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + // Welding Tool - Weld the drain closed + if(!tool.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - return ..() + welded = !welded + USE_FEEDBACK_WELD_UNWELD_FINISH(user, welded) + update_icon() + /obj/structure/hygiene/drain/on_update_icon() icon_state = "[initial(icon_state)][welded ? "-welded" : ""]" @@ -41,24 +44,26 @@ /obj/structure/hygiene/drain/examine(mob/user) . = ..() if(welded) - to_chat(user, "It is welded shut.") + . += SPAN_NOTICE("It is welded shut.") //for construction. /obj/item/drain name = "gutter" desc = "You probably can't get sucked down the plughole." - icon = 'icons/obj/drain.dmi' + icon = 'icons/obj/structures/drain.dmi' icon_state = "drain" var/constructed_type = /obj/structure/hygiene/drain -/obj/item/drain/attackby(obj/item/thing, mob/user) - if(isWrench(thing)) - new constructed_type(src.loc) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, SPAN_WARNING("[user] wrenches the [src] down.")) - qdel(src) +/obj/item/drain/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if (!isturf(loc)) + USE_FEEDBACK_FAILURE("[src] needs to be placed on the floor before you can secure it.") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - return ..() + new constructed_type(src.loc) + to_chat(user, SPAN_WARNING("[user] wrenches the [src] down.")) + qdel(src) /obj/structure/hygiene/drain/bath name = "sealable drain" @@ -70,7 +75,7 @@ . = ..() if(!welded) closed = !closed - user.visible_message(SPAN_NOTICE("\The [user] has [closed ? "closed" : "opened"] the drain.")) + user.visible_message(SPAN_NOTICE("[user] has [closed ? "closed" : "opened"] the drain.")) update_icon() /obj/structure/hygiene/drain/bath/on_update_icon() @@ -81,7 +86,7 @@ /obj/structure/hygiene/drain/bath/examine(mob/user) . = ..() - to_chat(user, "It is [closed ? "closed" : "open"]") + . += SPAN_NOTICE("It is [closed ? "closed" : "open"]") /obj/structure/hygiene/drain/bath/Process() if(closed) diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index b86c210d6460f..1705aecbd7a26 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -6,21 +6,31 @@ var/obj/item/assembly/shock_kit/part = null var/last_time = 1.0 buckle_movable = FALSE + bed_flags = BED_FLAG_CANNOT_BE_ELECTRIFIED | BED_FLAG_CANNOT_BE_PADDED /obj/structure/bed/chair/e_chair/New() ..() - overlays += image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir) + AddOverlays(image('icons/obj/structures/furniture.dmi', src, "echair_over", MOB_LAYER + 1, dir)) return -/obj/structure/bed/chair/e_chair/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - var/obj/structure/bed/chair/C = new /obj/structure/bed/chair(loc) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - C.set_dir(dir) - part.dropInto(loc) - part.master = null - part = null - qdel(src) + +/obj/structure/bed/chair/e_chair/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + // Wrench - Dismantle electric chair + var/obj/structure/bed/chair/chair = new /obj/structure/bed/chair(loc) + chair.set_dir(dir) + part.dropInto(loc) + part.master = null + transfer_fingerprints_to(chair) + user.visible_message( + SPAN_NOTICE("[user] removes [part] from [chair] with [tool]."), + SPAN_NOTICE("You remove [part] from [chair] with [tool].") + ) + part = null + qdel(src) + /obj/structure/bed/chair/e_chair/verb/toggle() set name = "Toggle Electric Chair" @@ -38,8 +48,8 @@ /obj/structure/bed/chair/e_chair/rotate() ..() - overlays.Cut() - overlays += image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir) //there's probably a better way of handling this, but eh. -Pete + ClearOverlays() + AddOverlays(image('icons/obj/structures/furniture.dmi', src, "echair_over", MOB_LAYER + 1, dir)) return /obj/structure/bed/chair/e_chair/proc/shock() @@ -60,7 +70,7 @@ A.update_icon() flick("echair1", src) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread s.set_up(12, 1, src) s.start() if(buckled_mob) diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index ef347509e69e2..986ae0efc185b 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -1,7 +1,7 @@ /obj/structure/extinguisher_cabinet name = "extinguisher cabinet" desc = "A small wall mounted cabinet designed to hold a fire extinguisher." - icon = 'icons/obj/extinguisher.dmi' + icon = 'icons/obj/structures/extinguisher.dmi' icon_state = "extinguisher_closed" anchored = TRUE density = FALSE @@ -12,19 +12,28 @@ ..() has_extinguisher = new/obj/item/extinguisher(src) -/obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user) - if(isrobot(user)) - return - if(istype(O, /obj/item/extinguisher)) - if(!has_extinguisher && opened && user.unEquip(O, src)) - has_extinguisher = O - to_chat(user, SPAN_NOTICE("You place [O] in [src].")) - playsound(src.loc, 'sound/effects/extin.ogg', 50, 0) - else - opened = !opened - else - opened = !opened - update_icon() + +/obj/structure/extinguisher_cabinet/use_tool(obj/item/tool, mob/user, list/click_params) + // Extinguisher - Put in cabinet + if (istype(tool, /obj/item/extinguisher)) + if (!opened) + USE_FEEDBACK_FAILURE("\The [src] is closed.") + return TRUE + if (has_extinguisher) + USE_FEEDBACK_FAILURE("\The [src] already has \a [has_extinguisher].") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + has_extinguisher = tool + update_icon() + user.visible_message( + SPAN_NOTICE("\The [user] places \a [tool] in \the [src]."), + SPAN_NOTICE("You place \the [tool] in \the [src].") + ) + return TRUE + + return ..() /obj/structure/extinguisher_cabinet/attack_hand(mob/user) @@ -60,7 +69,11 @@ else icon_state = "extinguisher_empty" -/obj/structure/extinguisher_cabinet/AltClick(mob/user) +/obj/structure/extinguisher_cabinet/attack_hand_secondary(mob/living/user, list/modifiers) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) + return + . = SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN if(CanPhysicallyInteract(user)) opened = !opened update_icon() diff --git a/code/game/objects/structures/fireaxe_cabinet.dm b/code/game/objects/structures/fireaxe_cabinet.dm index a877817d912cb..86f1cb6a96ab2 100644 --- a/code/game/objects/structures/fireaxe_cabinet.dm +++ b/code/game/objects/structures/fireaxe_cabinet.dm @@ -4,48 +4,40 @@ icon_state = "fireaxe" anchored = TRUE density = FALSE + health_max = 30 + health_min_damage = 15 + damage_hitsound = 'sound/effects/Glasshit.ogg' - var/damage_threshold = 15 var/open var/unlocked - var/shattered var/obj/item/material/twohanded/fireaxe/fireaxe -/obj/structure/fireaxecabinet/attack_generic(mob/user, damage, attack_verb, wallbreaker) - attack_animation(user) - playsound(user, 'sound/effects/Glasshit.ogg', 50, 1) - visible_message(SPAN_DANGER("[user] [attack_verb] \the [src]!")) - if(damage_threshold > damage) - to_chat(user, SPAN_DANGER("Your strike is deflected by the reinforced glass!")) - return - if(shattered) - return - shattered = 1 - unlocked = 1 - open = 1 - playsound(user, 'sound/effects/Glassbr3.ogg', 100, 1) +/obj/structure/fireaxecabinet/on_death() + playsound(src, 'sound/effects/Glassbr3.ogg', 50, TRUE) + open = TRUE + unlocked = TRUE + update_icon() + +/obj/structure/fireaxecabinet/on_revive() update_icon() /obj/structure/fireaxecabinet/on_update_icon() - overlays.Cut() + ClearOverlays() if(fireaxe) - overlays += image(icon, "fireaxe_item") - if(shattered) - overlays += image(icon, "fireaxe_window_broken") + AddOverlays(image(icon, "fireaxe_item")) + if(health_dead) + AddOverlays(image(icon, "fireaxe_window_broken")) else if(!open) - overlays += image(icon, "fireaxe_window") + AddOverlays(image(icon, "fireaxe_window")) /obj/structure/fireaxecabinet/New() ..() fireaxe = new(src) update_icon() -/obj/structure/fireaxecabinet/attack_ai(mob/user) - toggle_lock(user) - /obj/structure/fireaxecabinet/attack_hand(mob/user) if(!unlocked) - to_chat(user, SPAN_WARNING("\The [src] is locked.")) + to_chat(user, SPAN_WARNING("[src] is locked.")) return toggle_open(user) @@ -56,11 +48,11 @@ return if(!open) - to_chat(user, SPAN_WARNING("\The [src] is closed.")) + to_chat(user, SPAN_WARNING("[src] is closed.")) return if(!fireaxe) - to_chat(user, SPAN_WARNING("\The [src] is empty.")) + to_chat(user, SPAN_WARNING("[src] is empty.")) return user.put_in_hands(fireaxe) @@ -75,60 +67,75 @@ fireaxe = null return ..() -/obj/structure/fireaxecabinet/attackby(obj/item/O, mob/user) - - if(isMultitool(O)) - toggle_lock(user) +/obj/structure/fireaxecabinet/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(open) + USE_FEEDBACK_FAILURE("[src] must be closed before you can lock it.") return - - if(istype(O, /obj/item/material/twohanded/fireaxe)) - if(open) - if(fireaxe) - to_chat(user, SPAN_WARNING("There is already \a [fireaxe] inside \the [src].")) - else if(user.unEquip(O)) - O.forceMove(src) - fireaxe = O - to_chat(user, SPAN_NOTICE("You place \the [fireaxe] into \the [src].")) - update_icon() - return - - if(O.force) - user.setClickCooldown(10) - attack_generic(user, O.force, "bashes") + if(health_dead) + USE_FEEDBACK_FAILURE("[src] is shattered and the lock doesn't function.") return - - return ..() + user.visible_message( + SPAN_NOTICE("[user] begins toggling [src]'s maglock with [tool]."), + SPAN_NOTICE("You begin [unlocked ? "locking" : "unlocking"] [src]'s maglock with [tool].") + ) + if(!tool.use_as_tool(src, user, 2 SECONDS, volume = 50, skill_path = list(SKILL_DEVICES, SKILL_CONSTRUCTION), do_flags = DO_PUBLIC_UNIQUE)) + return + playsound(src, 'sound/machines/lockreset.ogg', 50, TRUE) + unlocked = !unlocked + update_icon() + user.visible_message( + SPAN_NOTICE("[user] [unlocked ? "unlocks" : "locks"] [src]'s maglock with [tool]."), + SPAN_NOTICE("You [unlocked ? "unlock" : "lock"] [src]'s maglock with [tool].") + ) + +/obj/structure/fireaxecabinet/use_tool(obj/item/tool, mob/user, list/click_params) + // Fireaxe - Place inside + if (istype(tool, /obj/item/material/twohanded/fireaxe)) + if (!open) + USE_FEEDBACK_FAILURE("[src] is closed.") + return TRUE + if (fireaxe) + USE_FEEDBACK_FAILURE("[src] already has [fireaxe] inside.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + fireaxe = tool + update_icon() + user.visible_message( + SPAN_NOTICE("[user] places [tool] into [src]."), + SPAN_NOTICE("You place [tool] into [src].") + ) + return TRUE + + // Material Stack - Repair damage + if (istype(tool, /obj/item/stack/material)) + var/obj/item/stack/material/stack = tool + if (stack.material.name != MATERIAL_GLASS) + return ..() + if (!health_dead && !health_damaged()) + USE_FEEDBACK_FAILURE("[src] doesn't need repair.") + return TRUE + if (!stack.reinf_material) + USE_FEEDBACK_FAILURE("[src] can only be repaired with reinforced glass.") + return TRUE + if (!stack.use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(stack, 1, "to repair [src].") + return TRUE + user.visible_message( + SPAN_NOTICE("[user] repairs [src]'s damage with [stack.get_vague_name(FALSE)]."), + SPAN_NOTICE("You repair [src]'s damage with [stack.get_exact_name(1)].") + ) + revive_health() + return TRUE /obj/structure/fireaxecabinet/proc/toggle_open(mob/user) - if(shattered) + if(health_dead) open = 1 unlocked = 1 else user.setClickCooldown(10) open = !open - to_chat(user, SPAN_NOTICE("You [open ? "open" : "close"] \the [src].")) - update_icon() - -/obj/structure/fireaxecabinet/proc/toggle_lock(mob/user) - - - if(open) - return - - if(shattered) - open = 1 - unlocked = 1 - else - user.setClickCooldown(10) - to_chat(user, SPAN_NOTICE("You begin [unlocked ? "enabling" : "disabling"] \the [src]'s maglock.")) - - if(!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - - if(shattered) return - - unlocked = !unlocked - playsound(user, 'sound/machines/lockreset.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You [unlocked ? "disable" : "enable"] the maglock.")) - + to_chat(user, SPAN_NOTICE("You [open ? "open" : "close"] [src].")) update_icon() diff --git a/code/game/objects/structures/fitness.dm b/code/game/objects/structures/fitness.dm index 1f5c9e93cad51..9cb54c2f8ef42 100644 --- a/code/game/objects/structures/fitness.dm +++ b/code/game/objects/structures/fitness.dm @@ -1,5 +1,5 @@ /obj/structure/fitness - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/gym_equipment.dmi' anchored = TRUE var/being_used = 0 @@ -27,7 +27,7 @@ if(!synth) user.adjust_nutrition(-(5 * DEFAULT_HUNGER_FACTOR)) user.adjust_hydration(-(5 * DEFAULT_THIRST_FACTOR)) - to_chat(user, SPAN_WARNING("You [pick(hit_message)] \the [src].")) + to_chat(user, SPAN_WARNING("You [pick(hit_message)] [src].")) /obj/structure/fitness/weightlifter name = "weightlifting machine" @@ -38,11 +38,17 @@ var/list/success_message = list("with great effort", "straining hard", "without any trouble", "with ease") var/list/fail_message = list(", lifting them part of the way and then letting them drop", ", unable to even budge them") -/obj/structure/fitness/weightlifter/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1) - weight = (weight % max_weight) + 1 - to_chat(user, "You set the machine's weight level to [weight].") + +/obj/structure/fitness/weightlifter/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + // Wrench - Set weight level + weight = (weight % max_weight) + 1 + user.visible_message( + SPAN_NOTICE("[user] adjusts [src]'s weight level with [tool]."), + SPAN_NOTICE("You set [src]'s weight level to [weight] with [tool].") + ) /obj/structure/fitness/weightlifter/attack_hand(mob/living/carbon/human/user) if(!istype(user)) @@ -75,13 +81,13 @@ message = "; this does not look safe" else message = fail_message[min(1 + round(weight - skill), length(fail_message))] - user.visible_message(SPAN_NOTICE("\The [user] fails to lift the weights[message]."), SPAN_NOTICE("You fail to lift the weights[message].")) + user.visible_message(SPAN_NOTICE("[user] fails to lift the weights[message]."), SPAN_NOTICE("You fail to lift the weights[message].")) else if(!synth) var/adj_weight = weight * 5 user.adjust_nutrition(-(adj_weight * DEFAULT_HUNGER_FACTOR)) user.adjust_hydration(-(adj_weight * DEFAULT_THIRST_FACTOR)) message = success_message[min(1 + round(skill - weight), length(fail_message))] - user.visible_message(SPAN_NOTICE("\The [user] lift\s the weights [message]."), SPAN_NOTICE("You lift the weights [message].")) + user.visible_message(SPAN_NOTICE("[user] lift\s the weights [message]."), SPAN_NOTICE("You lift the weights [message].")) user.update_personal_goal(/datum/goal/weights, 1) being_used = FALSE diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index f52edb3fefa5f..919f6b743e8e1 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -73,7 +73,7 @@ /obj/structure/flora/pottedplant name = "potted plant" - icon = 'icons/obj/plants.dmi' + icon = 'icons/obj/flora/plants.dmi' icon_state = "plant-26" layer = ABOVE_HUMAN_LAYER @@ -177,7 +177,7 @@ /obj/structure/flora/ausbushes/ppflowers/New() ..() - icon_state = "ppflowers_[rand(1, 4)]" + icon_state = "ppflowers_[rand(1, 3)]" /obj/structure/flora/ausbushes/sparsegrass icon_state = "sparsegrass_1" @@ -198,7 +198,7 @@ /obj/structure/flora/pottedplant name = "potted plant" desc = "Really brings the room together." - icon = 'icons/obj/plants.dmi' + icon = 'icons/obj/flora/plants.dmi' icon_state = "plant-01" layer = ABOVE_HUMAN_LAYER @@ -244,7 +244,7 @@ /obj/structure/flora/pottedplant/unusual/Initialize() . = ..() - set_light(0.4, 0.1, 2, 2, "#007fff") + set_light(2, 0.4, "#007fff") /obj/structure/flora/pottedplant/orientaltree name = "potted oriental tree" @@ -298,7 +298,7 @@ /obj/structure/flora/pottedplant/subterranean/Initialize() . = ..() - set_light(0.4, 0.1, 2, 2, "#ff6633") + set_light(2, 0.4, "#ff6633") /obj/structure/flora/pottedplant/minitree name = "potted tree" diff --git a/code/game/objects/structures/fountain.dm b/code/game/objects/structures/fountain.dm index 6ae95afa8bdf1..69df5092771b0 100644 --- a/code/game/objects/structures/fountain.dm +++ b/code/game/objects/structures/fountain.dm @@ -1,7 +1,7 @@ /obj/structure/fountain name = "fountain" desc = "A beautifully constructed fountain." - icon = 'icons/obj/fountain.dmi' + icon = 'icons/obj/structures/fountain.dmi' icon_state = "fountain_g" density = TRUE anchored = TRUE @@ -19,7 +19,7 @@ /obj/structure/fountain/strange/Initialize() . = ..() light_color = get_random_colour(lower = 190) - set_light(0.6, 3, 5, 2, light_color) + set_light(5, 0.6, light_color) /obj/structure/fountain/strange/attack_hand(mob/living/user) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 8c7c697316533..5885f9c974d82 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -5,7 +5,10 @@ layer = BELOW_OBJ_LAYER w_class = ITEM_SIZE_NO_CONTAINER health_max = 100 - var/state = 0 + var/const/GIRDER_STATE_NORMAL = 0 + var/const/GIRDER_STATE_REINFORCEMENT_UNSECURED = 1 + var/const/GIRDER_STATE_REINFORCED = 2 + var/state = GIRDER_STATE_NORMAL var/cover = 50 //how much cover the girder provides against projectiles. var/material/reinf_material var/reinforcing = 0 @@ -36,102 +39,188 @@ anchored = TRUE cover = initial(cover) revive_health() - state = 0 + state = GIRDER_STATE_NORMAL icon_state = initial(icon_state) reinforcing = 0 if(reinf_material) reinforce_girder() -/obj/structure/girder/attackby(obj/item/W, mob/user) - if (user.a_intent == I_HURT) - ..() - return - if(isWrench(W) && state == 0) - if(anchored && !reinf_material) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - to_chat(user, SPAN_NOTICE("Now disassembling the girder...")) - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, SPAN_NOTICE("You dissasembled the girder!")) - dismantle() - else if(!anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - to_chat(user, SPAN_NOTICE("Now securing the girder...")) - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, SPAN_NOTICE("You secured the girder!")) - reset_girder() - return +/obj/structure/girder/can_anchor(obj/item/tool, mob/user, silent) + if (reinf_material || state != GIRDER_STATE_NORMAL) + if (!silent) + USE_FEEDBACK_FAILURE("[src]'s reinforcements must be removed before it can be moved.") + return FALSE + + return ..() - if(istype(W, /obj/item/gun/energy/plasmacutter) || istype(W, /obj/item/psychic_power/psiblade/master/grand/paramount)) - if(istype(W, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = W - if(!cutter.slice(user)) +/obj/structure/girder/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!can_anchor(tool, user)) + return + user.visible_message( + SPAN_NOTICE("[user] starts dislodging [src] with [tool]."), + SPAN_NOTICE("You start dislodging [src] with [tool].") + ) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT, extra_checks = CALLBACK(src, PROC_REF(can_anchor), tool, user))) + return + icon_state = "displaced" + anchored = FALSE + set_max_health(50) + cover = 25 + user.visible_message( + SPAN_NOTICE("[user] dislodges [src] with [tool]."), + SPAN_NOTICE("You dislodge [src] with [tool].") + ) + +/obj/structure/girder/screwdriver_act(mob/living/user, obj/item/tool) + // Screwdriver + // - Unsecure support struts + // - Allow reinforcement + switch(state) + if(GIRDER_STATE_NORMAL) + . = ITEM_INTERACT_SUCCESS + if(!anchored) + USE_FEEDBACK_NEED_UNANCHOR(user) return - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - to_chat(user, SPAN_NOTICE("Now slicing apart the girder...")) - if(do_after(user, (reinf_material ? 4 : 2) SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, SPAN_NOTICE("You slice apart the girder!")) if(reinf_material) - reinf_material.place_dismantled_product(get_turf(src)) - dismantle() + balloon_alert(user, "уже имеются укрепления!") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + reinforcing = !reinforcing + user.visible_message( + SPAN_NOTICE("[user] adjusts [src] with [tool]. It can now be [reinforcing ? "reinforced" : "constructed"]."), + SPAN_NOTICE("You adjust [src] with [tool]. It can now be [reinforcing ? "reinforced" : "constructed"].") + ) + if(GIRDER_STATE_REINFORCEMENT_UNSECURED) + . = ITEM_INTERACT_SUCCESS + user.visible_message( + SPAN_NOTICE("[user] starts securing [src]'s support struts with [tool]."), + SPAN_NOTICE("You starts securing [src]'s support struts with [tool].") + ) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || state != GIRDER_STATE_REINFORCEMENT_UNSECURED) + return + state = GIRDER_STATE_REINFORCED + user.visible_message( + SPAN_NOTICE("[user] secures [src]'s support struts with [tool]."), + SPAN_NOTICE("You secure [src]'s support struts with [tool].") + ) + if(GIRDER_STATE_REINFORCED) + . = ITEM_INTERACT_SUCCESS + user.visible_message( + SPAN_NOTICE("[user] starts unsecuring [src]'s support struts with [tool]."), + SPAN_NOTICE("You starts unsecuring [src]'s support struts with [tool].") + ) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || state != GIRDER_STATE_REINFORCED) + return + state = GIRDER_STATE_REINFORCEMENT_UNSECURED + user.visible_message( + SPAN_NOTICE("[user] unsecures [src]'s support struts with [tool]."), + SPAN_NOTICE("You unsecure [src]'s support struts with [tool].") + ) + +/obj/structure/girder/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + // Wrench - Dismantle girder + if(state != GIRDER_STATE_NORMAL) + USE_FEEDBACK_FAILURE("[src]'s reinforcements must be removed before it can be dismantled.") return - - if(istype(W, /obj/item/pickaxe/diamonddrill)) - playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) - if(do_after(user, (reinf_material ? 6 : 4) SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, SPAN_NOTICE("You drill through the girder!")) - if(reinf_material) - reinf_material.place_dismantled_product(get_turf(src)) - dismantle() + if(anchored) + user.visible_message( + SPAN_NOTICE("[user] starts dismantling [src] with [tool]."), + SPAN_NOTICE("You start dismantling [src] with [tool].") + ) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || state != GIRDER_STATE_NORMAL || !anchored) + return + user.visible_message( + SPAN_NOTICE("[user] dismantles [src] with [tool]."), + SPAN_NOTICE("You dismantle [src] with [tool].") + ) + dismantle() return - - if(isScrewdriver(W)) - if(state == 2) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - to_chat(user, SPAN_NOTICE("Now unsecuring support struts...")) - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, SPAN_NOTICE("You unsecured the support struts!")) - state = 1 - else if(anchored && !reinf_material) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - reinforcing = !reinforcing - to_chat(user, SPAN_NOTICE("\The [src] can now be [reinforcing? "reinforced" : "constructed"]!")) + user.visible_message( + SPAN_NOTICE("[user] starts securing [src] with [tool]."), + SPAN_NOTICE("You start securing [src] with [tool].") + ) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || state != GIRDER_STATE_NORMAL || anchored) return - - if(isWirecutter(W) && state == 1) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) - to_chat(user, SPAN_NOTICE("Now removing support struts...")) - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, SPAN_NOTICE("You removed the support struts!")) - - if(reinf_material) + user.visible_message( + SPAN_NOTICE("[user] secures [src] with [tool]."), + SPAN_NOTICE("You secure [src] with [tool].") + ) + reset_girder() + +/obj/structure/girder/wirecutter_act(mob/living/user, obj/item/tool) + switch (state) + if (GIRDER_STATE_NORMAL) + . = ITEM_INTERACT_SUCCESS + USE_FEEDBACK_FAILURE("[src] has no reinforcements to remove.") + if (GIRDER_STATE_REINFORCEMENT_UNSECURED) + . = ITEM_INTERACT_SUCCESS + user.visible_message( + SPAN_NOTICE("[user] starts removing [src]'s support struts with [tool]."), + SPAN_NOTICE("You start removing [src]'s support struts with [tool].") + ) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || state != GIRDER_STATE_REINFORCEMENT_UNSECURED) + return + if (reinf_material) reinf_material.place_dismantled_product(get_turf(src)) reinf_material = null - reset_girder() + user.visible_message( + SPAN_NOTICE("[user] removes [src]'s support struts with [tool]."), + SPAN_NOTICE("You remove [src]'s support struts with [tool].") + ) + +/obj/structure/girder/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.tool_start_check(user, 1)) return - - if(isCrowbar(W) && state == 0 && anchored) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - to_chat(user, SPAN_NOTICE("Now dislodging the girder...")) - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, SPAN_NOTICE("You dislodged the girder!")) - icon_state = "displaced" - anchored = FALSE - set_max_health(50) - cover = 25 + user.visible_message( + SPAN_NOTICE("[user] starts cutting [src] with [tool]."), + SPAN_NOTICE("You start cutting [src] with [tool].") + ) + if(!tool.use_as_tool(src, user, (reinf_material ? 4 : 2) SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) return + user.visible_message( + SPAN_NOTICE("[user] cuts apart [src] with [tool]."), + SPAN_NOTICE("You cut apart [src] with [tool].") + ) + if(reinf_material) + reinf_material.place_dismantled_product(get_turf(src)) + dismantle() - if(istype(W, /obj/item/stack/material)) - if(reinforcing && !reinf_material) - if(!reinforce_with_material(W, user)) - return ..() - else - if(!construct_wall(W, user)) - return ..() - return +/obj/structure/girder/use_tool(obj/item/tool, mob/user, list/click_params) + // Diamond Drill, Plasmacutter, Psiblade (Paramount) - Slice girder + if (istype(tool, /obj/item/pickaxe/diamonddrill) || istype(tool, /obj/item/psychic_power/psiblade/master/grand/paramount)) + playsound(loc, 'sound/items/Welder.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] starts cutting [src] with [tool]."), + SPAN_NOTICE("You start cutting [src] with [tool].") + ) + if (!user.do_skilled((reinf_material ? 4 : 2) SECONDS, SKILL_CONSTRUCTION, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + playsound(loc, 'sound/items/Welder.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] cuts apart [src] with [tool]."), + SPAN_NOTICE("You cut apart [src] with [tool].") + ) + if (reinf_material) + reinf_material.place_dismantled_product(get_turf(src)) + dismantle() + return TRUE + + // Material - Construct wall or reinforce + if (istype(tool, /obj/item/stack/material)) + if (reinforcing && !reinf_material) + reinforce_with_material(tool, user) + return TRUE + construct_wall(tool, user) + return TRUE + + return ..() - ..() /obj/structure/girder/proc/construct_wall(obj/item/stack/material/S, mob/user) if(S.get_amount() < 2) @@ -172,7 +261,7 @@ /obj/structure/girder/proc/reinforce_with_material(obj/item/stack/material/S, mob/user) //if the verb is removed this can be renamed. if(reinf_material) - to_chat(user, SPAN_NOTICE("\The [src] is already reinforced.")) + to_chat(user, SPAN_NOTICE("[src] is already reinforced.")) return 0 if(S.get_amount() < 2) @@ -181,7 +270,7 @@ var/material/M = S.material if(!istype(M) || M.integrity < 50) - to_chat(user, "You cannot reinforce \the [src] with that; it is too soft.") + to_chat(user, "You cannot reinforce [src] with that; it is too soft.") return 0 to_chat(user, SPAN_NOTICE("Now reinforcing...")) @@ -196,7 +285,7 @@ /obj/structure/girder/proc/reinforce_girder() cover = 75 set_max_health(500) - state = 2 + state = GIRDER_STATE_REINFORCED icon_state = "reinforced" reinforcing = 0 @@ -204,13 +293,6 @@ new /obj/item/stack/material/steel(get_turf(src)) qdel(src) -/obj/structure/girder/attack_hand(mob/user as mob) - if (MUTATION_HULK in user.mutations) - visible_message(SPAN_DANGER("[user] smashes [src] apart!")) - dismantle() - return - return ..() - /obj/structure/girder/cult icon= 'icons/obj/cult.dmi' icon_state= "cultgirder" @@ -219,28 +301,3 @@ /obj/structure/girder/cult/dismantle() qdel(src) - -/obj/structure/girder/cult/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - to_chat(user, SPAN_NOTICE("Now disassembling the girder...")) - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, SPAN_NOTICE("You dissasembled the girder!")) - dismantle() - - else if(istype(W, /obj/item/gun/energy/plasmacutter) || istype(W, /obj/item/psychic_power/psiblade/master/grand/paramount)) - if(istype(W, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = W - if(!cutter.slice(user)) - return - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - to_chat(user, SPAN_NOTICE("Now slicing apart the girder...")) - if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, SPAN_NOTICE("You slice apart the girder!")) - dismantle() - - else if(istype(W, /obj/item/pickaxe/diamonddrill)) - playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) - if(do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, SPAN_NOTICE("You drill through the girder!")) - dismantle() diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 25813ccf8a1c2..dab7239abed7f 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -1,17 +1,18 @@ /obj/structure/grille name = "grille" - desc = "A flimsy lattice of metal rods, with screws to secure it to the floor." - icon = 'icons/obj/grille.dmi' + desc = "A flimsy lattice of metal rods, with bolts to secure it to the floor." + icon = 'icons/obj/structures/grille.dmi' icon_state = "grille" color = COLOR_STEEL density = TRUE anchored = TRUE - obj_flags = OBJ_FLAG_CONDUCTIBLE + obj_flags = OBJ_FLAG_CONDUCTIBLE | OBJ_FLAG_ANCHORABLE layer = BELOW_OBJ_LAYER explosion_resistance = 1 rad_resistance_modifier = 0.1 health_max = 10 damage_hitsound = 'sound/effects/grillehit.ogg' + attacked_verb = "kicks" var/init_material = MATERIAL_STEEL blend_objects = list(/obj/machinery/door, /turf/simulated/wall) // Objects which to blend with @@ -19,7 +20,7 @@ /obj/structure/grille/broken name = "broken grille" - desc = "The remains of a flimsy lattice of metal rods, with screws to secure it to the floor." + desc = "The remains of a flimsy lattice of metal rods, with bolts to secure it to the floor." icon_state = "broken" density = FALSE health_max = 6 @@ -57,7 +58,7 @@ /obj/structure/grille/on_update_icon() var/on_frame = is_on_frame() - overlays.Cut() + ClearOverlays() if (is_broken()) if(on_frame) icon_state = "broken_onframe" @@ -72,42 +73,23 @@ I = image(icon, "grille_other_onframe[connections[i]]", dir = SHIFTL(1, i - 1)) else I = image(icon, "grille_onframe[connections[i]]", dir = SHIFTL(1, i - 1)) - overlays += I + AddOverlays(I) else for(var/i = 1 to 4) if(other_connections[i] != "0") I = image(icon, "grille_other[connections[i]]", dir = SHIFTL(1, i - 1)) else I = image(icon, "grille[connections[i]]", dir = SHIFTL(1, i - 1)) - overlays += I + AddOverlays(I) /obj/structure/grille/Bumped(atom/user) if(ismob(user)) shock(user, 70) /obj/structure/grille/attack_hand(mob/user as mob) - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) - user.do_attack_animation(src) - - var/damage_dealt = 1 - var/attack_message = "kicks" - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species.can_shred(H)) - attack_message = "mangles" - damage_dealt = 5 - - if(shock(user, 70)) + if ((. = ..())) + shock(user, 70) return - if(MUTATION_HULK in user.mutations) - damage_dealt += 5 - else - damage_dealt += 1 - - attack_generic(user,damage_dealt,attack_message) - /obj/structure/grille/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(air_group || (height==0)) return 1 if(istype(mover) && mover.checkpass(PASS_FLAG_GRILLE)) @@ -152,63 +134,72 @@ damage_health(damage, Proj.damage_type) -/obj/structure/grille/use_weapon(obj/item/weapon, mob/user, list/click_params) - // Check shock - if (HAS_FLAGS(weapon.obj_flags, OBJ_FLAG_CONDUCTIBLE) && shock(user, 70)) - return TRUE +/obj/structure/grille/can_use_item(obj/item/tool, mob/user, click_params) + . = ..() + if (!.) + return - return ..() + // Shock Check + var/shock_chance = 70 + // 100% shock chance to remove or move + if (tool.tool_behaviour == TOOL_WIRECUTTER || tool.tool_behaviour == TOOL_WRENCH) + shock_chance = 100 + // Plasmacutter shouldn't need to touch the grille + if (istype(tool, /obj/item/gun/energy/plasmacutter)) + shock_chance = 0 + if (HAS_FLAGS(tool.obj_flags, OBJ_FLAG_CONDUCTIBLE) && shock_chance && shock(user, shock_chance)) + return FALSE -/obj/structure/grille/attackby(obj/item/W as obj, mob/user as mob) - if(isWirecutter(W)) - if(!shock(user, 100)) - playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) - dismantle() - return +/obj/structure/grille/post_anchor_change() + ..() + update_connections(TRUE) - if(istype(W, /obj/item/gun/energy/plasmacutter)) // Plasma cutter shouldn't need to touch the grille to cut it, so no shock check. - var/obj/item/gun/energy/plasmacutter/cutter = W - if(!cutter.slice(user)) - return - playsound(loc, 'sound/items/Welder.ogg', 80, 1) - dismantle() +/obj/structure/grille/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - - if((isScrewdriver(W)) && (istype(loc, /turf/simulated) || anchored)) - if(!shock(user, 90)) - playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) - anchored = !anchored - user.visible_message(SPAN_NOTICE("[user] [anchored ? "fastens" : "unfastens"] the grille."), \ - SPAN_NOTICE("You have [anchored ? "fastened the grille to" : "unfastened the grill from"] the floor.")) - update_connections(1) - update_icon() + dismantle() + user.visible_message( + SPAN_NOTICE("[user] cuts [src] apart with [tool]."), + SPAN_NOTICE("You cut [src] apart with [tool].") + ) + +/obj/structure/grille/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return + user.visible_message( + SPAN_NOTICE("[user] cuts [src] apart with [tool]."), + SPAN_NOTICE("You cut [src] apart with [tool].") + ) + dismantle() + +/obj/structure/grille/use_tool(obj/item/tool, mob/user, list/click_params) + // Material Stack - Place window + if (istype(tool, /obj/item/stack/material)) + var/obj/item/stack/material/stack = tool + if (stack.material.opacity > 0.7) + USE_FEEDBACK_FAILURE("[tool] cannot be used to make a window.") + return TRUE + place_window(user, loc, tool) + return TRUE -//window placing - if(istype(W,/obj/item/stack/material)) - var/obj/item/stack/material/ST = W - if(ST.material.opacity > 0.7) - return 0 - - place_window(user, loc, ST) - return + return ..() - if (!(W.obj_flags & OBJ_FLAG_CONDUCTIBLE) || !shock(user, 70)) - ..() /obj/structure/grille/proc/dismantle() new /obj/item/stack/material/rods(get_turf(src), is_broken() ? 1 : 2, material.name) qdel(src) /obj/structure/grille/on_death(new_death_state) - visible_message(SPAN_WARNING("\The [src] falls to pieces!")) + visible_message(SPAN_WARNING("[src] falls to pieces!")) new /obj/item/stack/material/rods(get_turf(src), 1, material.name) new /obj/structure/grille/broken(get_turf(src), material.name) qdel(src) /obj/structure/grille/broken/on_death(new_death_state) - visible_message(SPAN_WARNING("The remains of \the [src] break apart!")) + visible_message(SPAN_WARNING("The remains of [src] break apart!")) new /obj/item/stack/material/rods(get_turf(src), 1, material.name) qdel(src) @@ -230,7 +221,7 @@ if(electrocute_mob(user, C, src)) if(C.powernet) C.powernet.trigger_warning() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread s.set_up(3, 1, src) s.start() if(user.stunned) @@ -256,6 +247,9 @@ /proc/place_grille(mob/user, loc, obj/item/stack/material/rods/ST) if(ST.in_use) return + if(locate(/obj/structure/grille) in loc) + USE_FEEDBACK_FAILURE("There is another grille here!") + return if(ST.get_amount() < 2) to_chat(user, SPAN_WARNING("You need at least two rods to do this.")) return diff --git a/code/game/objects/structures/handrail.dm b/code/game/objects/structures/handrail.dm index 8e832b9306cbe..e06b3267c6375 100644 --- a/code/game/objects/structures/handrail.dm +++ b/code/game/objects/structures/handrail.dm @@ -1,6 +1,6 @@ /obj/structure/handrail name = "handrail" - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/handrail.dmi' icon_state = "handrail" desc = "A safety railing with buckles to secure yourself to when floor isn't stable enough." density = FALSE diff --git a/code/game/objects/structures/holosigns.dm b/code/game/objects/structures/holosigns.dm index 8b3b18eeca94c..d059800ef406f 100644 --- a/code/game/objects/structures/holosigns.dm +++ b/code/game/objects/structures/holosigns.dm @@ -2,7 +2,7 @@ name = "wet floor sign" desc = "The words flicker as if they mean nothing." anchored = TRUE - icon = 'icons/obj/janitor.dmi' // move these into their own dmi if we ever add more than 1 of these + icon = 'icons/obj/janitor_tools.dmi' // move these into their own dmi if we ever add more than 1 of these var/obj/item/holosign_creator/projector icon_state = "holosign" @@ -25,9 +25,26 @@ visible_message(SPAN_NOTICE("\The [user] waves through \the [src], causing it to dissipate.")) deactivate(user) -/obj/structure/holosign/attackby(obj/W, mob/living/user) - visible_message(SPAN_NOTICE("\The [user] waves \a [W] through \the [src], causing it to dissipate.")) + +/obj/structure/holosign/use_weapon(obj/item/weapon, mob/user, list/click_params) + SHOULD_CALL_PARENT(FALSE) + user.visible_message( + SPAN_WARNING("\The [user] swings \a [weapon] at \the [src], causing it to vanish."), + SPAN_WARNING("You swing \the [weapon] at \the [src], causing it to vanish.") + ) deactivate(user) + return TRUE + + +/obj/structure/holosign/use_tool(obj/item/tool, mob/user, list/click_params) + SHOULD_CALL_PARENT(FALSE) + user.visible_message( + SPAN_NOTICE("\The [user] waves \a [tool] at \the [src], causing it to vanish."), + SPAN_NOTICE("You wave \the [tool] at \the [src], causing it to vanish.") + ) + deactivate(user) + return TRUE + /obj/structure/holosign/proc/deactivate(mob/living/user) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 1860e46ab9c6f..e0c92e6b4c957 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -1,12 +1,12 @@ /obj/item/inflatable name = "inflatable" w_class = ITEM_SIZE_NORMAL - icon = 'icons/obj/inflatable.dmi' + icon = 'icons/obj/structures/inflatable.dmi' health_max = 10 health_min_damage = 10 var/deploy_path = null -/obj/item/inflatable/afterattack(atom/target, mob/user, proximity_flag, click_parameters) +/obj/item/inflatable/use_after(atom/target, mob/living/user, click_parameters) if(!deploy_path) return if (loc != user) @@ -16,11 +16,11 @@ return if (isspaceturf(T) || isopenspace(T)) to_chat(user, SPAN_WARNING("You cannot use \the [src] in open space.")) - return + return TRUE var/obstruction = T.get_obstruction() if (obstruction) to_chat(user, SPAN_WARNING("\The [english_list(obstruction)] is blocking that spot.")) - return + return TRUE user.visible_message( SPAN_ITALIC("\The [user] starts inflating \an [src]."), SPAN_ITALIC("You start inflating \the [src]."), @@ -28,11 +28,11 @@ range = 5 ) if (!do_after(user, 1 SECOND, target, DO_PUBLIC_UNIQUE) || QDELETED(src)) - return + return TRUE obstruction = T.get_obstruction() if (obstruction) to_chat(user, SPAN_WARNING("\The [english_list(obstruction)] is blocking that spot.")) - return + return TRUE user.visible_message( SPAN_ITALIC("\The [user] finishes inflating \an [src]."), SPAN_NOTICE("You inflate \the [src]."), @@ -44,6 +44,7 @@ R.add_fingerprint(user) copy_health(src, R) qdel(src) + return TRUE /obj/item/inflatable/wall name = "inflatable wall" @@ -64,7 +65,7 @@ density = TRUE anchored = TRUE opacity = 0 - icon = 'icons/obj/inflatable.dmi' + icon = 'icons/obj/structures/inflatable.dmi' icon_state = "wall" atmos_canpass = CANPASS_DENSITY health_max = 20 @@ -121,15 +122,15 @@ /obj/structure/inflatable/examine(mob/user) . = ..() - if (taped) - to_chat(user, SPAN_NOTICE("It's been duct taped in few places.")) + if(taped) + . += SPAN_NOTICE("It's been duct taped in few places.") /obj/structure/inflatable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) return 0 /obj/structure/inflatable/bullet_act(obj/item/projectile/Proj) . = ..() - if (health_dead) + if (health_dead()) return PROJECTILE_CONTINUE /obj/structure/inflatable/ex_act(severity) @@ -151,20 +152,28 @@ return ..() -/obj/structure/inflatable/attackby(obj/item/W, mob/user) - if(!istype(W) || istype(W, /obj/item/inflatable_dispenser)) return - - if(istype(W, /obj/item/tape_roll) && get_damage_value() >= 3) - if(taped) - to_chat(user, SPAN_NOTICE("\The [src] can't be patched any more with \the [W]!")) +/obj/structure/inflatable/use_tool(obj/item/tool, mob/user, list/click_params) + // Duct tape - Repair damage + if (istype(tool, /obj/item/tape_roll)) + if (!health_damaged()) + USE_FEEDBACK_FAILURE("\The [src] doesn't need repair.") + return TRUE + if (get_damage_value() < 3) + USE_FEEDBACK_FAILURE("\The [src] isn't damaged enough to tape it back together.") return TRUE - else - taped = TRUE - to_chat(user, SPAN_NOTICE("You patch some damage in \the [src] with \the [W]!")) - restore_health(3) + if (taped) + USE_FEEDBACK_FAILURE("\The [src] has already been taped up. There's nothing more you can do for it with \the [tool].") return TRUE + taped = TRUE + restore_health(3) + user.visible_message( + SPAN_NOTICE("\The [user] patches some of \the [src]'s damage with \a [tool]."), + SPAN_NOTICE("You patch some of \the [src]'s damage with \the [tool].") + ) + return TRUE + + return ..() - ..() /obj/structure/inflatable/on_death() deflate(TRUE) @@ -229,7 +238,7 @@ /obj/structure/inflatable/door/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(air_group) return state - if(istype(mover, /obj/effect/beam)) + if(istype(mover, /obj/beam)) return !opacity return !density @@ -271,9 +280,9 @@ return isSwitchingStates = 1 + set_density(TRUE) flick("door_closing",src) sleep(10) - set_density(1) set_opacity(0) state = 0 update_icon() @@ -302,7 +311,7 @@ /obj/item/inflatable/torn name = "torn inflatable wall" desc = "A folded membrane which rapidly expands into a large cubical shape on activation. It is too torn to be usable." - icon = 'icons/obj/inflatable.dmi' + icon = 'icons/obj/structures/inflatable.dmi' icon_state = "folded_wall_torn" /obj/item/inflatable/torn/attack_self(mob/user) @@ -312,7 +321,7 @@ /obj/item/inflatable/door/torn name = "torn inflatable door" desc = "A folded membrane which rapidly expands into a simple door on activation. It is too torn to be usable." - icon = 'icons/obj/inflatable.dmi' + icon = 'icons/obj/structures/inflatable.dmi' icon_state = "folded_door_torn" /obj/item/inflatable/door/torn/attack_self(mob/user) @@ -322,9 +331,10 @@ /obj/item/storage/briefcase/inflatable name = "inflatable barrier box" desc = "Contains inflatable walls and doors." + icon = 'icons/obj/tools/inflatable_dispenser.dmi' icon_state = "inf_box" - item_state = "painted_secure" + item_state = "case" w_class = ITEM_SIZE_LARGE max_storage_space = DEFAULT_LARGEBOX_STORAGE - can_hold = list(/obj/item/inflatable) + contents_allowed = list(/obj/item/inflatable) startswith = list(/obj/item/inflatable/door = 2, /obj/item/inflatable/wall = 3) diff --git a/code/game/objects/structures/ironing_board.dm b/code/game/objects/structures/ironing_board.dm index 6af21f94b5244..2e06e37fcd1ee 100644 --- a/code/game/objects/structures/ironing_board.dm +++ b/code/game/objects/structures/ironing_board.dm @@ -1,7 +1,7 @@ /obj/structure/ironing_board name = "ironing board" desc = "An ironing board to unwrinkle your wrinkled clothing." - icon = 'icons/obj/ironing.dmi' + icon = 'icons/obj/structures/ironing.dmi' icon_state = "basic-down" can_buckle = TRUE buckle_dir = SOUTH @@ -49,10 +49,10 @@ /obj/structure/ironing_board/on_update_icon() - overlays.Cut() + ClearOverlays() if (deployed) if (clothing) - overlays += clothing.appearance + AddOverlays(clothing.appearance) if (iron) icon_state = "[base_state]-up-iron" else @@ -119,99 +119,99 @@ if (distance > 5 && !isghost(user)) return if (iron) - to_chat(user, "It has \a [iron] resting on it.") + . += SPAN_NOTICE("It has [iron] resting on it.") if (clothing) - to_chat(user, "\A [clothing] is spread out across it.") + . += SPAN_NOTICE("[clothing] is spread out across it.") +/obj/structure/ironing_board/use_grab(obj/item/grab/grab, list/click_params) + if (deployed) + if (buckled_mob) + USE_FEEDBACK_GRAB_FAILURE("\The [src] already has \the [buckled_mob] on it.") + else if (clothing) + USE_FEEDBACK_GRAB_FAILURE("\The [src] already has \a [clothing] on it.") + else + USE_FEEDBACK_GRAB_FAILURE("\The [src] is already deployed.") + return TRUE + if (!can_buckle(grab.affecting, grab.assailant)) + return TRUE + grab.assailant.visible_message( + SPAN_NOTICE("\The [grab.assailant] starts buckling \the [grab.affecting] to \the [src]!"), + SPAN_NOTICE("You start buckling \the [grab.affecting] to \the [src]!"), + exclude_mobs = list(grab.affecting) + ) + grab.affecting.show_message( + SPAN_NOTICE("\The [grab.assailant] starts buckling you to \the [src]!") + ) + if (!do_after(grab.assailant, 3 SECONDS, src, DO_PUBLIC_UNIQUE) || QDELETED(grab) || !grab.use_sanity_check(src)) + return TRUE + if (!user_buckle_mob(grab.affecting, grab.assailant)) + return TRUE -/obj/structure/ironing_board/attackby(obj/item/item, mob/living/user) - . = TRUE - if (istype(item, /obj/item/clothing)) + deployed = TRUE + grab.affecting.remove_grabs_and_pulls() + update_icon() + return TRUE + + +/obj/structure/ironing_board/use_tool(obj/item/tool, mob/user, list/click_params) + // Clothing - Add to board + if (istype(tool, /obj/item/clothing)) if (deployed) if (buckled_mob) - to_chat(user, SPAN_WARNING("\The [src] already has \the [buckled_mob] on it.")) - if (clothing) - to_chat(user, SPAN_WARNING("\The [src] already has \a [clothing] on it.")) - return - if (!user.unEquip(item, src)) - return - clothing = item + USE_FEEDBACK_FAILURE("\The [src] already has \the [buckled_mob] on it.") + else if (clothing) + USE_FEEDBACK_FAILURE("\The [src] already has \a [clothing] on it.") + else + USE_FEEDBACK_FAILURE("\The [src] is already deployed.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + clothing = tool deployed = TRUE update_icon() - return - if (istype(item, /obj/item/ironing_iron)) - var/obj/item/ironing_iron/active_iron = item + user.visible_message( + SPAN_NOTICE("\The [user] puts \a [tool] on \the [src]."), + SPAN_NOTICE("You put \the [tool] on \the [src].") + ) + return TRUE + + // Iron - Iron contents or add iron + if (istype(tool, /obj/item/ironing_iron)) + // Clothing if (clothing) user.visible_message( - SPAN_ITALIC("\The [user] starts ironing \a [clothing]."), - SPAN_ITALIC("You start ironing \the [clothing]."), - range = 5 + SPAN_NOTICE("\The [user] starts ironing \a [clothing] on \the [src] with \a [tool]."), + SPAN_NOTICE("You start ironing \the [clothing] on \the [src] with \the [tool].") ) - if (!do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - if (!active_iron.iron_enabled) - to_chat(user, SPAN_WARNING("Whoops. The iron was not turned on.")) - return + if (!do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE) || !user.use_sanity_check(src, tool)) + return TRUE + var/obj/item/ironing_iron/used_iron = tool + if (!used_iron.iron_enabled) + USE_FEEDBACK_FAILURE("\The [used_iron] wasn't turned on!") + return TRUE clothing.ironed_state = WRINKLES_NONE - return - if (buckled_mob) - if (user.a_intent != I_HURT) - to_chat(user, SPAN_WARNING("You refrain from touching \the [active_iron] to \the [buckled_mob].")) - return - var/zone = user.zone_sel.selecting - if (!active_iron.iron_enabled) - active_iron.attack(buckled_mob, user, zone, TRUE) - return - var/mob/living/carbon/human/human - var/obj/item/organ/external/organ - if (ishuman(buckled_mob)) - human = buckled_mob - organ = human.get_organ(zone) - if (!organ) - to_chat(user, SPAN_WARNING("\The [buckled_mob] has no [parse_zone(zone)] to iron.")) - return - var/message = "ironing \the [buckled_mob][human ? "'s [parse_zone(zone)]" : ""]!" user.visible_message( - SPAN_DANGER("\The [user] starts [message]"), - SPAN_DANGER("You start [message]") + SPAN_NOTICE("\The [user] irons \a [clothing] on \the [src] with \a [tool]."), + SPAN_NOTICE("You iron \the [clothing] on \the [src] with \the [tool].") ) - var/sound_token = GLOB.sound_player.PlayLoopingSound(src, "\ref[src]", 'sound/effects/iron_sizzle.ogg', 80) - for (var/i = 1 to 5) - if (!do_after(user, 1 SECOND, buckled_mob, DO_PUBLIC_UNIQUE)) - break - if (organ) - organ.take_external_damage(0, rand(3, 5), used_weapon = "Hot metal") - else - buckled_mob.take_overall_damage(0, rand(3, 5), "Hot metal") - qdel(sound_token) - return + return TRUE + + // Add Iron if (iron) - to_chat(user, SPAN_WARNING("\The [src] already has \a [iron] on it.")) - return - if (!user.unEquip(item, src)) - return - iron = item + USE_FEEDBACK_FAILURE("\The [src] already has \a [iron] on it.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + iron = tool update_icon() - return - if (istype(item, /obj/item/grab)) - if (buckled_mob) - to_chat(user, SPAN_WARNING("\The [src] is occupied. Remove \the [buckled_mob] first.")) - return - if (clothing) - to_chat(user, SPAN_WARNING("\The [src] is occupied. Remove \the [clothing] first.")) - return - var/obj/item/grab/grab = item user.visible_message( - SPAN_ITALIC("\The [user] starts buckling \the [grab.affecting] to \a [src]."), - SPAN_ITALIC("You start buckling \the [grab.affecting] to \the [src]."), - range = 5 + SPAN_NOTICE("\The [user] puts \a [tool] on \the [src]."), + SPAN_NOTICE("You put \a [tool] on \the [src].") ) - if (!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - if (QDELETED(grab) || !user_buckle_mob(grab.affecting, user)) - return - qdel(grab) - return + return TRUE + return ..() @@ -224,7 +224,7 @@ /obj/item/ironing_board name = "ironing board" desc = "A collapsed ironing board that can be carried around." - icon = 'icons/obj/ironing.dmi' + icon = 'icons/obj/structures/ironing.dmi' icon_state = "basic-item" item_state = "rbed" slot_flags = SLOT_BACK @@ -258,7 +258,7 @@ /obj/item/ironing_iron name = "iron" desc = "An ironing iron for ironing your iro- err... clothes." - icon = 'icons/obj/ironing.dmi' + icon = 'icons/obj/structures/ironing.dmi' icon_state = "iron" item_state = "ironingiron" slot_flags = SLOT_BELT @@ -277,10 +277,44 @@ range = 3 ) +/obj/item/ironing_iron/use_before(mob/living/subject, mob/living/user, click_parameters) + if (!istype(subject) || !istype(user)) + return + if (iron_enabled && subject.incapacitated()) + var/zone = user.zone_sel.selecting + var/mob/living/carbon/human/human + var/obj/item/organ/external/organ + if (ishuman(subject)) + human = subject + organ = human.get_organ(zone) + if (!organ) + USE_FEEDBACK_FAILURE("\The [subject] has no [parse_zone(zone)] to iron.") + return TRUE + user.visible_message( + SPAN_WARNING("\The [user] starts ironing \the [subject][human ? "'s [parse_zone(zone)]" : null] with \a [src]!"), + SPAN_DANGER("You start ironing \the [subject][human ? "'s [parse_zone(zone)]" : null] with \a [src]!"), + exclude_mobs = list(subject) + ) + subject.show_message( + SPAN_DANGER("\The [user] starts ironing you[human ? "r [parse_zone(zone)]" : null] with \a [src]!"), + VISIBLE_MESSAGE, + SPAN_DANGER("You feel a hot, searing pain[human ? " in your [parse_zone(zone)]" : null]!") + ) + var/sound_token = GLOB.sound_player.PlayLoopingSound(src, "\ref[src]", 'sound/effects/iron_sizzle.ogg', 80) + for (var/i = 1 to 5) + if (!do_after(user, 1 SECOND, subject, DO_PUBLIC_UNIQUE) || !user.use_sanity_check(subject, src)) + break + if (organ) + organ.take_external_damage(0, rand(3, 5), used_weapon = "Hot metal") + else + subject.take_overall_damage(0, rand(3, 5), "Hot metal") + qdel(sound_token) + return TRUE + /obj/random/ironing_board_structure name = "random deployed ironing board" - icon = 'icons/obj/ironing.dmi' + icon = 'icons/obj/structures/ironing.dmi' icon_state = "basic-down" @@ -293,7 +327,7 @@ /obj/random/ironing_board_item name = "random collapsed ironing board" - icon = 'icons/obj/ironing.dmi' + icon = 'icons/obj/structures/ironing.dmi' icon_state = "basic-item" diff --git a/code/game/objects/structures/iv_drip.dm b/code/game/objects/structures/iv_drip.dm index aa06eaf35c6e7..9dd18d5e4a530 100644 --- a/code/game/objects/structures/iv_drip.dm +++ b/code/game/objects/structures/iv_drip.dm @@ -1,6 +1,6 @@ /obj/structure/iv_stand name = "\improper IV drip" - icon = 'icons/obj/iv_drip.dmi' + icon = 'icons/obj/structures/iv_drip.dmi' icon_state = "unhooked" anchored = FALSE density = FALSE @@ -40,7 +40,7 @@ icon_state = "unhooked" else icon_state = "hooked" - overlays.Cut() + ClearOverlays() if (!iv_bag) return var/image/reagents_overlay = image(icon, icon_state = "reagent0") @@ -70,8 +70,8 @@ if (91 to INFINITY) reagents_overlay.icon_state = "reagent100" light_overlay.icon_state = "light_full" - overlays += reagents_overlay - overlays += light_overlay + AddOverlays(reagents_overlay) + AddOverlays(light_overlay) /obj/structure/iv_stand/MouseDrop(atom/over_atom, source_loc, over_loc) @@ -103,23 +103,26 @@ AttachDrip(dropped, user) -/obj/structure/iv_stand/attackby(obj/item/item, mob/living/user) - if (!istype(item, /obj/item/reagent_containers/ivbag)) - return ..() - if (!isnull(iv_bag)) - to_chat(user, SPAN_WARNING("\The [src] already has \a [iv_bag] attached.")) - return TRUE - if (!user.unEquip(item, src)) +/obj/structure/iv_stand/use_tool(obj/item/tool, mob/user, list/click_params) + // IV Bag - Attach + if (istype(tool, /obj/item/reagent_containers/ivbag)) + if (iv_bag) + USE_FEEDBACK_FAILURE("\The [src] already has \a [iv_bag] attached.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] attaches \a [tool] to \a [src]."), + SPAN_NOTICE("You attach \the [tool] to \the [src]."), + range = 5 + ) + iv_bag = tool + last_reagent_color = iv_bag.reagents.get_color() + update_icon() return TRUE - user.visible_message( - SPAN_ITALIC("\The [user] attaches \a [item] to \a [src]."), - SPAN_ITALIC("You attach \the [item] to \the [src]."), - range = 5 - ) - iv_bag = item - last_reagent_color = iv_bag.reagents.get_color() - update_icon() - return TRUE + + return ..() /obj/structure/iv_stand/Process() @@ -193,19 +196,19 @@ if (distance >= 2 && !isghost(user)) return if (patient) - to_chat(user, "\The [patient] is hooked up to it.") + . += SPAN_NOTICE("[patient] is hooked up to it.") if (!iv_bag) - to_chat(user, "It has no IV bag attached.") + . += SPAN_NOTICE("It has no IV bag attached.") return - var/volume = Floor(iv_bag.reagents.total_volume) + var/volume = floor(iv_bag.reagents.total_volume) if (!volume) - to_chat(user, "It has an empty [iv_bag] attached.") + . += SPAN_NOTICE("It has an empty [iv_bag] attached.") return - to_chat(user, "It has \a [iv_bag] attached with [volume] units of liquid inside.") - to_chat(user, {"\ + . += SPAN_NOTICE("It has [iv_bag] attached with [volume] units of liquid inside.") + . += SPAN_NOTICE("\ It is set to [drip_mode == MODE_INJECT ? "inject" : drip_mode == MODE_EXTRACT ? "extract" : ""] \ [iv_bag.transfer_amount]u of fluid per cycle.\ - "}) + ") /obj/structure/iv_stand/CheckDexterity(mob/living/user) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 504eb889f7092..5ecba95e2fb64 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -1,7 +1,7 @@ /obj/structure/janitorialcart name = "janitorial cart" desc = "The ultimate in janitorial carts! Has space for water, mops, signs, trash bags, and more!" - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/carts.dmi' icon_state = "cart" anchored = FALSE density = TRUE @@ -23,67 +23,121 @@ /obj/structure/janitorialcart/examine(mob/user, distance) . = ..() if(distance <= 1) - to_chat(user, "[src] [icon2html(src, viewers(get_turf(src)))] contains [reagents.total_volume] unit\s of liquid!") - - -/obj/structure/janitorialcart/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/storage/bag/trash) && !mybag) - if(!user.unEquip(I, src)) - return - mybag = I + . += SPAN_NOTICE("[src] [icon2html(src, viewers(get_turf(src)))] contains [reagents.total_volume] unit\s of liquid!") + + +/obj/structure/janitorialcart/use_tool(obj/item/tool, mob/user, list/click_params) + // Caution Sign - Attach + if (istype(tool, /obj/item/caution)) + if (signs >= 4) + USE_FEEDBACK_FAILURE("\The [src] can't hold any more signs.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(tool, src) + return TRUE + signs++ update_icon() updateUsrDialog() - to_chat(user, SPAN_NOTICE("You put [I] into [src].")) - - else if(istype(I, /obj/item/mop)) - if(I.reagents.total_volume < I.reagents.maximum_volume) //if it's not completely soaked we assume they want to wet it, otherwise store it - if(reagents.total_volume < 1) - to_chat(user, SPAN_WARNING("[src] is out of water!")) + user.visible_message( + SPAN_NOTICE("\The [user] puts \a [tool] on \the [src]."), + SPAN_NOTICE("You put \the [tool] on \the [src].") + ) + return TRUE + + // Light Replacer - Attach + if (istype(tool, /obj/item/device/lightreplacer)) + if (myreplacer) + USE_FEEDBACK_FAILURE("\The [src] already has \a [myreplacer] attached.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(tool, src) + return TRUE + myreplacer = tool + update_icon() + updateUsrDialog() + user.visible_message( + SPAN_NOTICE("\The [user] puts \a [tool] on \the [src]."), + SPAN_NOTICE("You put \the [tool] on \the [src].") + ) + return TRUE + + // Mop - Wet or store + if (istype(tool, /obj/item/mop)) + var/input = input(user, "What would you like to do with \the [tool]?", "[src] - [tool]") as null|anything in list("Wet", "Store") + if (!input || !user.use_sanity_check(src, tool)) + return TRUE + switch (input) + // Wet + if ("Wet") + if (reagents.total_volume < 1) + USE_FEEDBACK_FAILURE("\The [src] is out of water.") + return TRUE + reagents.trans_to_obj(tool, tool.reagents.maximum_volume) + playsound(src, 'sound/effects/slosh.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("\The [user] wets \a [tool] in \the [src]."), + SPAN_NOTICE("You wets \the [tool] in \the [src].") + ) + return TRUE + // Store + if ("Store") + if (mymop) + USE_FEEDBACK_FAILURE("\The [src] already has \a [mymop] attached.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + mymop = tool + update_icon() + updateUsrDialog() + user.visible_message( + SPAN_NOTICE("\The [user] adds \a [tool] to \the [src]."), + SPAN_NOTICE("You add \the [tool] to \the [src].") + ) + return TRUE else - reagents.trans_to_obj(I, I.reagents.maximum_volume) - to_chat(user, SPAN_NOTICE("You wet [I] in [src].")) - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - return - if(!mymop) - if(!user.unEquip(I, src)) - return - mymop = I - update_icon() - updateUsrDialog() - to_chat(user, SPAN_NOTICE("You put [I] into [src].")) - - else if(istype(I, /obj/item/reagent_containers/spray) && !myspray) - if(!user.unEquip(I, src)) - return - myspray = I + return TRUE + + // Spray Bottle - Attach + if (istype(tool, /obj/item/reagent_containers/spray)) + if (myspray) + USE_FEEDBACK_FAILURE("\The [src] already has \a [myspray] attached.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + myspray = tool update_icon() updateUsrDialog() - to_chat(user, SPAN_NOTICE("You put [I] into [src].")) - - else if(istype(I, /obj/item/device/lightreplacer) && !myreplacer) - if(!user.unEquip(I, src)) - return - myreplacer = I + user.visible_message( + SPAN_NOTICE("\The [user] puts \a [tool] on \the [src]."), + SPAN_NOTICE("You put \the [tool] on \the [src].") + ) + return TRUE + + // Trash Bag - Attach + if (istype(tool, /obj/item/storage/bag/trash)) + if (mybag) + USE_FEEDBACK_FAILURE("\The [src] already has \a [mybag] attached.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(tool, src) + return TRUE + mybag = tool update_icon() updateUsrDialog() - to_chat(user, SPAN_NOTICE("You put [I] into [src].")) - - else if(istype(I, /obj/item/caution)) - if(signs < 4) - if(!user.unEquip(I, src)) - return - signs++ - update_icon() - updateUsrDialog() - to_chat(user, SPAN_NOTICE("You put [I] into [src].")) - else - to_chat(user, SPAN_NOTICE("[src] can't hold any more signs.")) + user.visible_message( + SPAN_NOTICE("\The [user] puts \a [tool] on \the [src]."), + SPAN_NOTICE("You put \the [tool] on \the [src].") + ) + return TRUE - else if(istype(I, /obj/item/reagent_containers/glass)) - return // So we do not put them in the trash bag as we mean to fill the mop bucket + // Everything else - Passthrough to mybag + // Skip reagent containers as those fill the mop bucket + if (mybag && !(istype(tool, /obj/item/reagent_containers/glass))) + return tool.resolve_attackby(mybag, user, click_params) - else if(mybag) - mybag.attackby(I, user) + return ..() /obj/structure/janitorialcart/attack_hand(mob/user) @@ -150,20 +204,20 @@ /obj/structure/janitorialcart/on_update_icon() - overlays.Cut() + ClearOverlays() if(mybag) - overlays += "cart_garbage" + AddOverlays("cart_garbage") if(mymop) - overlays += "cart_mop" + AddOverlays("cart_mop") if(myspray) - overlays += "cart_spray" + AddOverlays("cart_spray") if(myreplacer) - overlays += "cart_replacer" + AddOverlays("cart_replacer") if(signs) - overlays += "cart_sign[signs]" + AddOverlays("cart_sign[signs]") -//old style retardo-cart +//old style cart /obj/structure/bed/chair/janicart name = "janicart" icon = 'icons/obj/vehicles.dmi' @@ -176,6 +230,7 @@ var/obj/item/storage/bag/trash/mybag = null var/callme = "pimpin' ride" //how do people refer to it? buckle_movable = FALSE + bed_flags = BED_FLAG_CANNOT_BE_DISMANTLED | BED_FLAG_CANNOT_BE_ELECTRIFIED | BED_FLAG_CANNOT_BE_PADDED /obj/structure/bed/chair/janicart/Initialize() @@ -187,26 +242,46 @@ if(distance > 1) return - to_chat(user, "[icon2html(src, user)] This [callme] contains [reagents.total_volume] unit\s of water!") + . += SPAN_NOTICE("[icon2html(src, user)] This [callme] contains [reagents.total_volume] unit\s of water!") if(mybag) - to_chat(user, "\A [mybag] is hanging on the [callme].") - - -/obj/structure/bed/chair/janicart/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/mop)) - if(reagents.total_volume > 1) - reagents.trans_to_obj(I, 2) - to_chat(user, SPAN_NOTICE("You wet [I] in the [callme].")) - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - else - to_chat(user, SPAN_NOTICE("This [callme] is out of water!")) - else if(istype(I, /obj/item/key)) - to_chat(user, "Hold [I] in one of your hands while you drive this [callme].") - else if(istype(I, /obj/item/storage/bag/trash)) - if(!user.unEquip(I, src)) - return - to_chat(user, SPAN_NOTICE("You hook the trashbag onto the [callme].")) - mybag = I + . += SPAN_NOTICE("[mybag] is hanging on the [callme].") + + +/obj/structure/bed/chair/janicart/use_tool(obj/item/tool, mob/user, list/click_params) + // Key - Show message + if (istype(tool, /obj/item/key)) + USE_FEEDBACK_FAILURE("Hold \the [tool] in your hands while you drive \the [callme].") + return TRUE + + // Mop - Wet mop + if (istype(tool, /obj/item/mop)) + if (!reagents.total_volume) + USE_FEEDBACK_FAILURE("\The [callme]'s bucket is out of water.") + return TRUE + reagents.trans_to_obj(tool, 2) + playsound(loc, 'sound/effects/slosh.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("\The [user] wets \a [tool] in \the [callme]."), + SPAN_NOTICE("You wet \the [tool] in \the [callme].") + ) + return TRUE + + // Trash Bag - Hook bag to cart + if (istype(tool, /obj/item/storage/bag/trash)) + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + if (mybag) + USE_FEEDBACK_FAILURE("\The [callme] already has \a [mybag] attached.") + return TRUE + mybag = TRUE + user.visible_message( + SPAN_NOTICE("\The [user] hooks \a [tool] onto \the [callme]."), + SPAN_NOTICE("You hook \the [tool] onto \the [callme].") + ) + return TRUE + + return ..() /obj/structure/bed/chair/janicart/attack_hand(mob/user) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 2f23c40f55941..e117030de62ce 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -1,7 +1,7 @@ /obj/structure/lattice name = "lattice" desc = "A lightweight support lattice." - icon = 'icons/obj/smoothlattice.dmi' + icon = 'icons/obj/structures/smoothlattice.dmi' icon_state = "lattice0" density = FALSE anchored = TRUE @@ -49,52 +49,50 @@ if(severity <= EX_ACT_HEAVY) qdel(src) -/obj/structure/lattice/proc/deconstruct(mob/user) - to_chat(user, SPAN_NOTICE("Slicing lattice joints ...")) - new /obj/item/stack/material/rods(loc, 1, material.name) +/obj/structure/lattice/proc/deconstruct(mob/user, obj/item/tool) + user.visible_message( + SPAN_NOTICE("[user] slices [src] apart with [tool]."), + SPAN_NOTICE("You [src] apart with [tool].") + ) + var/obj/item/stack/material/rods/rods = new(loc, 1, material.name) + transfer_fingerprints_to(rods) var/turf/source = get_turf(src) if(locate(/obj/structure/cable, source)) for(var/obj/structure/cable/C in source) C.visible_message(SPAN_WARNING("\The [C] snaps!")) new/obj/item/stack/cable_coil(source, (C.d1 ? 2 : 1), C.color) qdel(C) - qdel(src) + qdel_self() -/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob) - - if (istype(C, /obj/item/stack/tile/floor)) - var/turf/T = get_turf(src) - T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead - return - - if (isCoil(C)) - var/turf/T = get_turf(src) - T.attackby(C, user) //Also handing this off to turf, the checks should confirm the lattice exists - return - - if(isWelder(C)) - var/obj/item/weldingtool/WT = C - if(WT.remove_fuel(0, user)) - deconstruct(user) +/obj/structure/lattice/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return + deconstruct(user) + +/obj/structure/lattice/use_tool(obj/item/tool, mob/user, list/click_params) + // Floor Tile, Cable Coil - Passthrough to turf + if(istype(tool, /obj/item/stack/tile) || isCoil(tool)) + return tool.resolve_attackby(get_turf(src), user, click_params) + + // Rods - Create catwalk + if(istype(tool, /obj/item/stack/material/rods)) + var/obj/item/stack/material/rods/rods = tool + if (!rods.use(2)) + USE_FEEDBACK_STACK_NOT_ENOUGH(rods, 2, "to create a catwalk") + return TRUE + playsound(src, 'sound/weapons/Genhit.ogg', 50, TRUE) + var/obj/structure/catwalk/catwalk = new(loc) + transfer_fingerprints_to(catwalk) + user.visible_message( + SPAN_NOTICE("\The [user] constructs \a [catwalk] over \the [src] with \a [tool]."), + SPAN_NOTICE("You construct \a [catwalk] over \the [src] with \the [tool].") + ) + qdel(src) + return TRUE - if(istype(C, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = C - if(!cutter.slice(user)) - return - deconstruct(user) - return + return ..() - if (istype(C, /obj/item/stack/material/rods)) - var/obj/item/stack/material/rods/R = C - if(R.use(2)) - src.alpha = 0 - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - new /obj/structure/catwalk(src.loc) - qdel(src) - return - else - to_chat(user, SPAN_NOTICE("You require at least two rods to complete the catwalk.")) /obj/structure/lattice/on_update_icon() var/dir_sum = 0 diff --git a/code/game/objects/structures/mineral_bath.dm b/code/game/objects/structures/mineral_bath.dm index b5735988a2456..358137ca7532f 100644 --- a/code/game/objects/structures/mineral_bath.dm +++ b/code/game/objects/structures/mineral_bath.dm @@ -17,13 +17,13 @@ venus.adjust_multi(GAS_CHLORINE, MOLES_N2STANDARD, GAS_PHORON, MOLES_O2STANDARD) return venus -/obj/structure/adherent_bath/attackby(obj/item/thing, mob/user) - if(istype(thing, /obj/item/grab)) - var/obj/item/grab/G = thing - if(enter_bath(G.affecting)) - qdel(G) - return - . = ..() + +/obj/structure/adherent_bath/use_grab(obj/item/grab/grab, list/click_params) + // Put victim in bath + if (enter_bath(grab.affecting, grab.assailant)) + grab.affecting.remove_grabs_and_pulls() + return TRUE + /obj/structure/adherent_bath/proc/enter_bath(mob/living/patient, mob/user) diff --git a/code/game/objects/structures/mines.dm b/code/game/objects/structures/mines.dm new file mode 100644 index 0000000000000..082848249364b --- /dev/null +++ b/code/game/objects/structures/mines.dm @@ -0,0 +1,64 @@ +/obj/structure/mine + name = "mine" + desc = "An explosive device that tends to detonate if you look at it wrong." + anchored = TRUE + icon = 'icons/obj/weapons/mines.dmi' + icon_state = "uglymine" + + /// Boolean. If set, the mine is already triggered and won't trigger again. Used for both preventing duplicate activations, and for mines which have a delayed or ongoing effect. + var/activated = FALSE + + +/obj/structure/mine/debug + name = "debug mine" + + +/obj/structure/mine/Crossed(mob/living/M) + . = ..() + if (!istype(M)) + return + M.show_message( + SPAN_WARNING("Your foot steps down on \the [src]... Uh oh..."), + VISIBLE_MESSAGE, + SPAN_WARNING("You feel your foot step down on something, and get a very bad feeling...") + ) + if (!activated) + activate() + + +/obj/structure/mine/bullet_act(obj/item/projectile/P, def_zone) + if (prob(P.original == src ? 30 : 10)) // Small target, hard to hit on purpose, even harder to hit on accident + if (!activated) + activate() + return FALSE + return TRUE + + +/obj/structure/mine/ex_act(severity, turf_breaker) + if (!activated) + activate() + + +/obj/structure/mine/use_weapon(obj/item/weapon, mob/user, list/click_params) + SHOULD_CALL_PARENT(FALSE) + user.visible_message( + SPAN_WARNING("\The [user] hits \the [src] with \a [weapon]!"), + SPAN_DANGER("You hit \the [src] with \the [weapon]. This was a bad idea.") + ) + if (!activated) + activate() + return TRUE + + +/obj/structure/mine/proc/activate(mob/living/victim) + activated = TRUE + visible_message( + SPAN_DANGER("\The [src] explodes!"), + SPAN_DANGER("You hear an explosion!") + ) + explosion(get_turf(src), 3, EX_ACT_HEAVY) + qdel_self() + + +/obj/structure/mine/debug/activate(mob/living/victim) + log_debug("[src] triggered by [victim]") diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index 5a7784e51fe94..cff1c39409654 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -1,7 +1,7 @@ /obj/structure/mopbucket name = "mop bucket" desc = "Fill it with water, but don't forget a mop!" - icon = 'icons/obj/janitor.dmi' + icon = 'icons/obj/janitor_tools.dmi' icon_state = "mopbucket" density = TRUE w_class = ITEM_SIZE_NORMAL @@ -16,13 +16,21 @@ /obj/structure/mopbucket/examine(mob/user, distance) . = ..() if(distance <= 1) - to_chat(user, "[src] [icon2html(src, user)] contains [reagents.total_volume] unit\s of water!") + . += SPAN_NOTICE("[src] [icon2html(src, user)] contains [reagents.total_volume] unit\s of water!") -/obj/structure/mopbucket/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/mop)) - if(reagents.total_volume < 1) - to_chat(user, SPAN_WARNING("\The [src] is out of water!")) - else - reagents.trans_to_obj(I, 5) - to_chat(user, SPAN_NOTICE("You wet \the [I] in \the [src].")) - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) + +/obj/structure/mopbucket/use_tool(obj/item/tool, mob/user, list/click_params) + // Mop - Wet mop + if (istype(tool, /obj/item/mop)) + if (reagents.total_volume < 1) + USE_FEEDBACK_FAILURE("\The [src] is out of water.") + return TRUE + reagents.trans_to_obj(tool, 5) + playsound(src, 'sound/effects/slosh.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("\The [user] wets \a [tool] in \the [src]."), + SPAN_NOTICE("You wet \the [tool] in \the [src].") + ) + return TRUE + + return ..() diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 28e66c9775bad..5870ef43798ea 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -13,7 +13,7 @@ /obj/structure/morgue name = "morgue" desc = "Used to keep bodies in until someone fetches them." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/morgue_tray.dmi' icon_state = "morgue1" dir = EAST density = TRUE @@ -92,20 +92,30 @@ return attack_hand(user) else return ..() -/obj/structure/morgue/attackby(P as obj, mob/user as mob) - if (istype(P, /obj/item/pen)) - var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text - if (user.get_active_hand() != P) - return - if ((!in_range(src, usr) && src.loc != user)) - return - t = sanitizeSafe(t, MAX_NAME_LEN) - if (t) - src.SetName(text("Morgue- '[]'", t)) + +/obj/structure/morgue/use_tool(obj/item/tool, mob/user, list/click_params) + // Pen - Add label + if (istype(tool, /obj/item/pen)) + var/input = input(user, "What would you like the label to be? Leave null to clear label.", "\The [initial(name)] - Label") as null|text + input = sanitizeSafe(input, MAX_NAME_LEN) + if (!user.use_sanity_check(src, tool)) + return TRUE + if (!input) + SetName(initial(name)) + user.visible_message( + SPAN_NOTICE("\The [user] clears \the [src]'s label with \a [tool]."), + SPAN_NOTICE("You clear \the [src]'s label with \the [tool].") + ) else - src.SetName("Morgue") - src.add_fingerprint(user) - return + SetName("[initial(name)] - '[input]'") + user.visible_message( + SPAN_NOTICE("\The [user] labels \the [src] with \a [tool]."), + SPAN_NOTICE("You label \the [src] with \the [tool].") + ) + return TRUE + + return ..() + /obj/structure/morgue/relaymove(mob/user as mob) if (user.stat) @@ -131,7 +141,7 @@ /obj/structure/m_tray name = "morgue tray" desc = "Apply corpse before closing." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/morgue_tray.dmi' icon_state = "morguet" density = TRUE layer = BELOW_OBJ_LAYER @@ -180,7 +190,7 @@ /obj/structure/crematorium name = "crematorium" desc = "A human incinerator. Works well on barbeque nights." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/crematorium.dmi' icon_state = "crema1" density = TRUE var/obj/structure/c_tray/connected = null @@ -258,20 +268,30 @@ src.add_fingerprint(user) update() -/obj/structure/crematorium/attackby(P as obj, mob/user as mob) - if(istype(P, /obj/item/pen)) - var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text - if(user.get_active_hand() != P) - return - if((!in_range(src, usr) > 1 && src.loc != user)) - return - t = sanitizeSafe(t, MAX_NAME_LEN) - if(t) - src.SetName(text("Crematorium- '[]'", t)) + +/obj/structure/crematorium/use_tool(obj/item/tool, mob/user, list/click_params) + // Pen - Add label + if (istype(tool, /obj/item/pen)) + var/input = input(user, "What would you like the label to be? Leave null to clear label.", "\The [initial(name)] - Label") as null|text + input = sanitizeSafe(input, MAX_NAME_LEN) + if (!user.use_sanity_check(src, tool)) + return TRUE + if (!input) + SetName(initial(name)) + user.visible_message( + SPAN_NOTICE("\The [user] clears \the [src]'s label with \a [tool]."), + SPAN_NOTICE("You clear \the [src]'s label with \the [tool].") + ) else - src.SetName("Crematorium") - src.add_fingerprint(user) - return + SetName("[initial(name)] - '[input]'") + user.visible_message( + SPAN_NOTICE("\The [user] labels \the [src] with \a [tool]."), + SPAN_NOTICE("You label \the [src] with \the [tool].") + ) + return TRUE + + return ..() + /obj/structure/crematorium/relaymove(mob/user as mob) if (user.stat || locked) @@ -366,7 +386,7 @@ for(var/obj/O in contents) //obj instead of obj/item so that bodybags and ashes get destroyed. We dont want tons and tons of ash piling up qdel(O) - new /obj/effect/decal/cleanable/ash(src) + new /obj/decal/cleanable/ash(src) sleep(30) cremating = initial(cremating) locked = initial(locked) @@ -380,7 +400,7 @@ /obj/structure/c_tray name = "crematorium tray" desc = "Apply body before burning." - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/structures/crematorium.dmi' icon_state = "cremat" density = TRUE layer = BELOW_OBJ_LAYER @@ -421,14 +441,11 @@ /obj/machinery/button/crematorium name = "crematorium igniter" desc = "Burn baby burn!" - icon = 'icons/obj/power.dmi' - icon_state = "crema_switch" + icon = 'icons/obj/structures/buttons.dmi' + icon_state = "blastctrl" req_access = list(access_crematorium) id_tag = 1 -/obj/machinery/button/crematorium/on_update_icon() - return - /obj/machinery/button/crematorium/activate(mob/user) if(operating) return diff --git a/code/game/objects/structures/pit.dm b/code/game/objects/structures/pit.dm index fdb0ea01b6c1d..1a5b466e8b973 100644 --- a/code/game/objects/structures/pit.dm +++ b/code/game/objects/structures/pit.dm @@ -1,39 +1,67 @@ /obj/structure/pit name = "pit" desc = "Watch your step, partner." - icon = 'icons/obj/pit.dmi' + icon = 'icons/obj/structures/pit.dmi' icon_state = "pit1" blend_mode = BLEND_MULTIPLY density = FALSE anchored = TRUE var/open = 1 -/obj/structure/pit/attackby(obj/item/W, mob/user) - if( istype(W,/obj/item/shovel) ) - visible_message(SPAN_NOTICE("\The [user] starts [open ? "filling" : "digging open"] \the [src]")) - if( do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE) ) - visible_message(SPAN_NOTICE("\The [user] [open ? "fills" : "digs open"] \the [src]!")) - if(open) - close(user) - else - open() - else - to_chat(user, SPAN_NOTICE("You stop shoveling.")) - return - if (!open && istype(W,/obj/item/stack/material/wood)) - if(locate(/obj/structure/gravemarker) in src.loc) - to_chat(user, SPAN_NOTICE("There's already a grave marker here.")) + +/obj/structure/pit/use_tool(obj/item/tool, mob/user, list/click_params) + // Shovel - Dig or fill pit + if (istype(tool, /obj/item/shovel)) + user.visible_message( + SPAN_NOTICE("\The [user] starts [open ? "filling" : "digging open"] \the [src] with \a [tool]."), + SPAN_NOTICE("You start [open ? "filling" : "digging open"] \the [src] with \the [tool].") + ) + if (!user.do_skilled((tool.toolspeed * 5) SECONDS, SKILL_HAULING, src) || !user.use_sanity_check(src, tool)) + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] [open ? "fills" : "digs open"] \the [src] with \a [tool]."), + SPAN_NOTICE("You [open ? "fill" : "dig open"] \the [src] with \the [tool].") + ) + if (open) + close(user) else - visible_message(SPAN_NOTICE("\The [user] starts making a grave marker on top of \the [src]")) - if( do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE) ) - visible_message(SPAN_NOTICE("\The [user] finishes the grave marker")) - var/obj/item/stack/material/wood/plank = W - plank.use(1) - new/obj/structure/gravemarker(src.loc) - else - to_chat(user, SPAN_NOTICE("You stop making a grave marker.")) - return - ..() + open() + return TRUE + + // Wood Material - Add grave marker + if (istype(tool, /obj/item/stack/material/wood)) + if (open) + USE_FEEDBACK_FAILURE("\The [src] needs tobe filled before you can add a grave marker.") + return TRUE + var/obj/structure/gravemarker/grave = locate() in loc + if (grave) + USE_FEEDBACK_FAILURE("\The [src] already has \a [grave].") + return TRUE + var/obj/item/stack/material/wood/stack = tool + if (!stack.can_use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(stack, 1, "to make a grave marker") + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] starts making a grave marker on top of \the [src] with \a [tool]."), + SPAN_NOTICE("You start making a grave marker on top of \the [src] with \the [tool].") + ) + if (!user.do_skilled(5 SECONDS, SKILL_CONSTRUCTION, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + if (grave) + USE_FEEDBACK_FAILURE("\The [src] already has \a [grave].") + return TRUE + if (!stack.use(1)) + return TRUE + var/obj/structure/gravemarker/new_grave = new(loc) + new_grave.add_fingerprint(user, tool = tool) + user.visible_message( + SPAN_NOTICE("\The [user] makes a grave marker on top of \the [src] with \a [tool]."), + SPAN_NOTICE("You make a grave marker on top of \the [src] with \the [tool].") + ) + return TRUE + + return ..() + /obj/structure/pit/on_update_icon() icon_state = "pit[open]" @@ -128,7 +156,7 @@ /obj/structure/gravemarker name = "grave marker" desc = "You're not the first." - icon = 'icons/obj/gravestone.dmi' + icon = 'icons/obj/structures/gravestone.dmi' icon_state = "wood" pixel_x = 15 pixel_y = 8 @@ -140,7 +168,7 @@ /obj/structure/gravemarker/examine(mob/user) . = ..() - to_chat(user, "It says: '[message]'") + . += SPAN_NOTICE("It says: '[message]'") /obj/structure/gravemarker/random/Initialize() generate() @@ -157,14 +185,36 @@ message = "Here lies [nam], [born] - [died]." -/obj/structure/gravemarker/attackby(obj/item/W, mob/user) - if(istype(W,/obj/item/material/hatchet)) - visible_message(SPAN_WARNING("\The [user] starts hacking away at \the [src] with \the [W].")) - if(!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - visible_message(SPAN_WARNING("\The [user] hacks \the [src] apart.")) - new /obj/item/stack/material/wood(src) - qdel(src) - if(istype(W,/obj/item/pen)) - var/msg = sanitize(input(user, "What should it say?", "Grave marker", message) as text|null) - if(msg) - message = msg + +/obj/structure/gravemarker/use_tool(obj/item/tool, mob/user, list/click_params) + // Hatchet - Remove marker + if (isHatchet(tool)) + user.visible_message( + SPAN_NOTICE("\The [user] starts hacking away at \the [src] with \a [tool]."), + SPAN_NOTICE("You start hacking away at \the [src] with \the [tool].") + ) + if (!user.do_skilled((tool.toolspeed * 2) SECONDS, list(SKILL_CONSTRUCTION, SKILL_HAULING), src) || !user.use_sanity_check(src, tool)) + return TRUE + var/obj/item/stack/material/wood/stack = new(loc, 1) + transfer_fingerprints_to(stack) + user.visible_message( + SPAN_NOTICE("\The [user] hacks \the [src] apart with \a [tool]."), + SPAN_NOTICE("You hack \the [src] apart with \the [tool].") + ) + qdel_self() + return TRUE + + // Pen - Label grave + if (istype(tool, /obj/item/pen)) + var/input = input(user, "What should the grave say?", "[src] - Name", message) as null|text + input = sanitizeSafe(input, MAX_NAME_LEN) + if (!input || input == message || !user.use_sanity_check(src, tool)) + return TRUE + message = input + user.visible_message( + SPAN_NOTICE("\The [user] labels \the [src] with \a [tool]."), + SPAN_NOTICE("You label \the [src] with '[message]' using \the [tool].") + ) + return TRUE + + return ..() diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index 9fef443b54f56..a4260a5a21efd 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -1,12 +1,13 @@ /obj/structure/plasticflaps //HOW DO YOU CALL THOSE THINGS ANYWAY name = "\improper plastic flaps" desc = "Completely impassable - or are they?" - icon = 'icons/obj/stationobjs.dmi' //Change this. + icon = 'icons/obj/plastic_flaps.dmi' //Change this. icon_state = "plasticflaps" density = FALSE anchored = TRUE layer = ABOVE_HUMAN_LAYER explosion_resistance = 5 + obj_flags = OBJ_FLAG_ANCHORABLE atmos_canpass = CANPASS_PROC @@ -37,40 +38,52 @@ return ..() -/obj/structure/plasticflaps/attackby(obj/item/W, mob/user) - if (isCrowbar(W)) - if (anchored) - to_chat(user, "You have to unwrench \the [src] before before deconstruction.") - return - user.visible_message( - SPAN_NOTICE("\The [user] begins deconstructing \the [src]."), - SPAN_NOTICE("You start deconstructing \the [src].") - ) - if(user.do_skilled(3 SECONDS, SKILL_CONSTRUCTION, src, do_flags = DO_REPAIR_CONSTRUCT)) - user.visible_message( - SPAN_WARNING("\The [user] deconstructs \the [src]."), - SPAN_WARNING("You deconstruct \the [src].") - ) - new /obj/item/stack/material/plastic(loc, 30) - qdel(src) +/obj/structure/plasticflaps/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(anchored) + USE_FEEDBACK_FAILURE("[src] has to be unanchored before you can deconstruct it.") + return + user.visible_message( + SPAN_NOTICE("[user] starts deconstructing [src] with [tool]."), + SPAN_NOTICE("You start deconstructing [src] with [tool].") + ) + if(!tool.use_as_tool(src, user, 3 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || anchored) + return + var/obj/item/stack/material/plastic/stack = new(loc, 30) + transfer_fingerprints_to(stack) + user.visible_message( + SPAN_NOTICE("[user] deconstructs [src] with [tool]."), + SPAN_NOTICE("You deconstruct [src] with [tool].") + ) + qdel(src) + +/obj/structure/plasticflaps/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + // Screwdriver - Toggle airflow + if(anchored) + USE_FEEDBACK_NEED_UNANCHOR(user) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - if (isScrewdriver(W)) - if (!anchored) - to_chat(user, "You have to secure \the [src] before before adjusting the airflow.") - return - user.visible_message( - SPAN_WARNING("\The [user] adjusts \the [src], [airtight ? "allowing" : "preventing"] air flow.") - ) - if (airtight) - clear_airtight() - return + if(airtight) + clear_airtight() + else become_airtight() + user.visible_message( + SPAN_NOTICE("[user] adjusts [src] with [tool]."), + SPAN_NOTICE("You adjust [src] with [tool], [airtight ? "preventing" : "allowing"] air flow.") + ) + + +/obj/structure/plasticflaps/can_anchor(obj/item/tool, mob/user, silent) + . = ..() + if (!.) return - if (isWrench(W)) - if (airtight) - to_chat(user,"You have to readjust the airflow before unwrenching \the [src].") - return - wrench_floor_bolts(user) + if (airtight) + if (!silent) + USE_FEEDBACK_FAILURE("You have to readjust the airflow before unwrenching [src].") + return FALSE + /obj/structure/plasticflaps/ex_act(severity) switch(severity) diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm index 3ac9d247e0903..edffa8e329b54 100644 --- a/code/game/objects/structures/railing.dm +++ b/code/game/objects/structures/railing.dm @@ -1,7 +1,7 @@ /obj/structure/railing name = "railing" desc = "A simple bar railing designed to protect against careless trespass." - icon = 'icons/obj/railing.dmi' + icon = 'icons/obj/structures/railing.dmi' icon_state = "railing_preview" density = TRUE throwpass = 1 @@ -17,24 +17,29 @@ /// Color code. If set, the railing will be painted this color on init. Primarily used for mapping variants. var/init_color + /obj/structure/railing/mapped material = MATERIAL_ALUMINIUM anchored = TRUE init_color = COLOR_GUNMETAL + /obj/structure/railing/mapped/no_density density = FALSE + /obj/structure/railing/mapped/no_density/Initialize() . = ..() update_icon() + /obj/structure/railing/Process() - if(!material || !material.radioactivity) + if (!material || !material.radioactivity) return - for(var/mob/living/L in range(1,src)) + for (var/mob/living/L in range(1,src)) L.apply_damage(round(material.radioactivity/20), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) + /obj/structure/railing/Initialize(mapload, material_key) . = ..() @@ -42,9 +47,9 @@ material = material_key if (!material) material = DEFAULT_FURNITURE_MATERIAL - if(!isnull(material) && !istype(material)) + if (!isnull(material) && !istype(material)) material = SSmaterials.get_material_by_name(material) - if(!istype(material)) + if (!istype(material)) return INITIALIZE_HINT_QDEL name = "[material.display_name] [initial(name)]" @@ -52,9 +57,9 @@ set_max_health(material.integrity / 5) color = material.icon_colour - if(material.products_need_process()) + if (material.products_need_process()) START_PROCESSING(SSobj, src) - if(material.conductive) + if (material.conductive) obj_flags |= OBJ_FLAG_CONDUCTIBLE else obj_flags &= (~OBJ_FLAG_CONDUCTIBLE) @@ -64,29 +69,33 @@ update_icon(FALSE) + /obj/structure/railing/Destroy() NeighborsCheck(TRUE) . = ..() + /obj/structure/railing/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(!istype(mover) || mover.checkpass(PASS_FLAG_TABLE)) + if (!istype(mover) || mover.checkpass(PASS_FLAG_TABLE)) return TRUE - if(get_dir(loc, target) == dir) + if (get_dir(loc, target) == dir) return !density return TRUE + /obj/structure/railing/on_death() - visible_message(SPAN_DANGER("\The [src] [material.destruction_desc]!")) + visible_message(SPAN_DANGER("[src] [material.destruction_desc]!")) playsound(loc, 'sound/effects/grillehit.ogg', 50, 1) material.place_shard(get_turf(usr)) qdel(src) + /obj/structure/railing/proc/NeighborsCheck(UpdateNeighbors = 1) neighbor_status = 0 var/Rturn = turn(src.dir, -90) var/Lturn = turn(src.dir, 90) - for(var/obj/structure/railing/R in src.loc) + for (var/obj/structure/railing/R in src.loc) if (QDELETED(R)) continue if ((R.dir == Lturn) && R.anchored) @@ -126,57 +135,59 @@ if (UpdateNeighbors) R.update_icon(0) + /obj/structure/railing/on_update_icon(update_neighbors = TRUE) NeighborsCheck(update_neighbors) - overlays.Cut() + ClearOverlays() if (!neighbor_status || !anchored) icon_state = "railing0-[density]" if (density)//walking over a railing which is above you is really weird, do not do this if density is 0 - overlays += image(icon, "_railing0-1", layer = ABOVE_HUMAN_LAYER) + AddOverlays(image(icon, "_railing0-1", layer = ABOVE_HUMAN_LAYER)) else icon_state = "railing1-[density]" if (density) - overlays += image(icon, "_railing1-1", layer = ABOVE_HUMAN_LAYER) + AddOverlays(image(icon, "_railing1-1", layer = ABOVE_HUMAN_LAYER)) if (neighbor_status & 32) - overlays += image(icon, "corneroverlay[density]") + AddOverlays(image(icon, "corneroverlay[density]")) if ((neighbor_status & 16) || !(neighbor_status & 32) || (neighbor_status & 64)) - overlays += image(icon, "frontoverlay_l[density]") + AddOverlays(image(icon, "frontoverlay_l[density]")) if (density) - overlays += image(icon, "_frontoverlay_l1", layer = ABOVE_HUMAN_LAYER) + AddOverlays(image(icon, "_frontoverlay_l1", layer = ABOVE_HUMAN_LAYER)) if (!(neighbor_status & 2) || (neighbor_status & 1) || (neighbor_status & 4)) - overlays += image(icon, "frontoverlay_r[density]") + AddOverlays(image(icon, "frontoverlay_r[density]")) if (density) - overlays += image(icon, "_frontoverlay_r1", layer = ABOVE_HUMAN_LAYER) - if(neighbor_status & 4) + AddOverlays(image(icon, "_frontoverlay_r1", layer = ABOVE_HUMAN_LAYER)) + if (neighbor_status & 4) var/pix_offset_x = 0 var/pix_offset_y = 0 - switch(dir) - if(NORTH) + switch (dir) + if (NORTH) pix_offset_x = 32 - if(SOUTH) + if (SOUTH) pix_offset_x = -32 - if(EAST) + if (EAST) pix_offset_y = -32 - if(WEST) + if (WEST) pix_offset_y = 32 - overlays += image(icon, "mcorneroverlay[density]", pixel_x = pix_offset_x, pixel_y = pix_offset_y) + AddOverlays(image(icon, "mcorneroverlay[density]", pixel_x = pix_offset_x, pixel_y = pix_offset_y)) if (density) - overlays += image(icon, "_mcorneroverlay1", pixel_x = pix_offset_x, pixel_y = pix_offset_y, layer = ABOVE_HUMAN_LAYER) + AddOverlays(image(icon, "_mcorneroverlay1", pixel_x = pix_offset_x, pixel_y = pix_offset_y, layer = ABOVE_HUMAN_LAYER)) + /obj/structure/railing/verb/flip() // This will help push railing to remote places, such as open space turfs set name = "Flip Railing" set category = "Object" set src in oview(1) - if(usr.incapacitated()) + if (usr.incapacitated()) return 0 - if(anchored) + if (anchored) to_chat(usr, SPAN_WARNING("It is fastened to the floor and cannot be flipped.")) return 0 - if(!turf_is_crowded()) - to_chat(usr, SPAN_WARNING("You can't flip \the [src] - something is in the way.")) + if (!turf_is_crowded()) + to_chat(usr, SPAN_WARNING("You can't flip [src] - something is in the way.")) return 0 forceMove(get_step(src, src.dir)) @@ -184,10 +195,10 @@ update_icon() /obj/structure/railing/CheckExit(atom/movable/O, turf/target) - if(istype(O) && O.checkpass(PASS_FLAG_TABLE)) + if (istype(O) && O.checkpass(PASS_FLAG_TABLE)) return 1 - if(get_dir(O.loc, target) == dir) - if(!density) + if (get_dir(O.loc, target) == dir) + if (!density) return 1 return 0 return 1 @@ -196,12 +207,12 @@ /obj/structure/railing/use_grab(obj/item/grab/grab, list/click_params) var/obj/occupied = turf_is_crowded() if (occupied) - to_chat(grab.assailant, SPAN_WARNING("There's \a [occupied] blocking \the [src].")) + USE_FEEDBACK_GRAB_FAILURE(SPAN_WARNING("There's [occupied] blocking [src].")) return TRUE if (!grab.force_danger()) - var/action = grab.assailant.a_intent == I_HURT ? "slam them against" : "throw them over" - to_chat(grab.assailant, SPAN_WARNING("You need a better grip on \the [grab.affecting] to [action] \the [src].")) + var/action = grab.assailant.a_intent == I_HURT ? "to slam them against [src]" : "to throw them over [src]" + USE_FEEDBACK_GRAB_MUST_UPGRADE(action) return TRUE // Harm intent - Face slamming @@ -212,8 +223,8 @@ grab.affecting.apply_damage(8, DAMAGE_BRUTE, BP_HEAD) playsound(src, 'sound/effects/grillehit.ogg', 50, 1) grab.assailant.visible_message( - SPAN_WARNING("\The [grab.assailant] slams \the [grab.affecting]'s face against \the [src]!"), - SPAN_DANGER("You slam \the [grab.affecting]'s face against \the [src]!") + SPAN_WARNING("[grab.assailant] slams [grab.affecting]'s face against [src]!"), + SPAN_DANGER("You slam [grab.affecting]'s face against [src]!") ) return TRUE @@ -223,68 +234,74 @@ grab.affecting.dropInto(loc) grab.affecting.Weaken(5) grab.assailant.visible_message( - SPAN_WARNING("\The [grab.assailant] throws \the [grab.affecting] over \the [src]."), - SPAN_WARNING("You throw \the [grab.affecting] over \the [src]."), + SPAN_WARNING("[grab.assailant] throws [grab.affecting] over [src]."), + SPAN_WARNING("You throw [grab.affecting] over [src]."), ) return TRUE - -/obj/structure/railing/attackby(obj/item/W, mob/user) - if (user.a_intent == I_HURT) - ..() +/obj/structure/railing/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + // Screwdriver - Toggle Anchored + if(!density) + balloon_alert(user, "нужно закрыть!") return + if(anchored) + balloon_alert(user, "открепление от пола") + else + balloon_alert(user, "закрепление к полу") + if(!tool.use_as_tool(src, user, 1 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || !density) + return + user.visible_message( + SPAN_NOTICE("[user] [anchored ? "un" : null]fastens [src] [anchored ? "from" : "to"] the floor with [tool]."), + SPAN_NOTICE("You [anchored ? "un" : null]fasten [src] [anchored ? "from" : "to"] the floor with [tool].") + ) + anchored = !anchored + USE_FEEDBACK_NEW_ANCHOR_FINISH(user, anchored) + update_icon() +/obj/structure/railing/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + // Wrench + // - Dismantle (Unanchored) + // - Toggle Density (Anchored) + if(anchored) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + set_density(!density) + update_icon() + user.visible_message( + SPAN_NOTICE("[user] [density ? "closes" : "opens"] [src] with [tool]."), + SPAN_NOTICE("You [density ? "close" : "open"] [src] with [tool].") + ) + return // Dismantle - if(isWrench(W)) - if(!anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(anchored) - return - user.visible_message(SPAN_NOTICE("\The [user] dismantles \the [src]."), SPAN_NOTICE("You dismantle \the [src].")) - material.place_sheet(loc, 2) - qdel(src) - // Wrench Open - else - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(density) - user.visible_message(SPAN_NOTICE("\The [user] wrenches \the [src] open."), SPAN_NOTICE("You wrench \the [src] open.")) - set_density(FALSE) - else - user.visible_message(SPAN_NOTICE("\The [user] wrenches \the [src] closed."), SPAN_NOTICE("You wrench \the [src] closed.")) - set_density(TRUE) - update_icon() + user.visible_message( + SPAN_NOTICE("[user] starts dismantling [src] with [tool]."), + SPAN_NOTICE("You start dismantling [src] with [tool].") + ) + if(!tool.use_as_tool(src, user, 2 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || anchored) return + var/obj/new_sheet = material.place_sheet(loc, 2) + transfer_fingerprints_to(new_sheet) + user.visible_message( + SPAN_NOTICE("[user] dismantles [src] with [tool]."), + SPAN_NOTICE("You dismantle [src] with [tool].") + ) + qdel(src) - // Repair - if(isWelder(W)) - var/obj/item/weldingtool/F = W - if(F.isOn()) - if(!health_damaged()) - to_chat(user, SPAN_WARNING("\The [src] does not need repairs.")) - return - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!health_damaged()) - return - user.visible_message(SPAN_NOTICE("\The [user] repairs some damage to \the [src]."), SPAN_NOTICE("You repair some damage to \the [src].")) - restore_health(get_max_health() / 5) +/obj/structure/railing/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + // Welding Tool - Repair + if(!health_damaged()) + USE_FEEDBACK_NOTHING_TO_REPAIR(user) return - - // Install - if(isScrewdriver(W)) - if(!density) - to_chat(user, SPAN_NOTICE("You need to wrench \the [src] from back into place first.")) - return - user.visible_message(anchored ? SPAN_NOTICE("\The [user] begins unscrew \the [src].") : SPAN_NOTICE("\The [user] begins fasten \the [src].") ) - playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) - if(do_after(user, 1 SECOND, src, DO_REPAIR_CONSTRUCT) && density) - to_chat(user, (anchored ? SPAN_NOTICE("You have unfastened \the [src] from the floor.") : SPAN_NOTICE("You have fastened \the [src] to the floor."))) - anchored = !anchored - update_icon() + if(!tool.tool_start_check(user, 1)) return - - ..() + USE_FEEDBACK_REPAIR_START(user) + if(!tool.use_as_tool(src, user, 2 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || !health_damaged()) + return + restore_health(get_max_health() / 5) + USE_FEEDBACK_REPAIR_FINISH(user) /obj/structure/railing/can_climb(mob/living/user, post_climb_check=FALSE, check_silicon=TRUE) . = ..() @@ -294,14 +311,16 @@ to_chat(user, SPAN_WARNING("You can't climb there, the way is blocked.")) return 0 + /obj/structure/railing/do_climb(mob/living/user) . = ..() - if(.) - if(!anchored || material.is_brittle()) + if (.) + if (!anchored || material.is_brittle()) kill_health() // Fatboy user.jump_layer_shift() - addtimer(new Callback(user, /mob/living/proc/jump_layer_shift_end), 2) + addtimer(CALLBACK(user, TYPE_PROC_REF(/mob/living, jump_layer_shift_end)), 2) + /obj/structure/railing/slam_into(mob/living/L) var/turf/target_turf = get_turf(src) @@ -309,11 +328,21 @@ target_turf = get_step(src, dir) if (!target_turf.density && !target_turf.turf_is_crowded(L)) L.forceMove(target_turf) - L.visible_message(SPAN_WARNING("\The [L] [pick("falls", "flies")] over \the [src]!")) + L.visible_message(SPAN_WARNING("[L] [pick("falls", "flies")] over [src]!")) L.Weaken(2) playsound(L, 'sound/effects/grillehit.ogg', 25, 1, FALSE) else ..() + +/obj/structure/railing/hitby(atom/movable/AM, datum/thrownthing/TT) + var/mob/living/L = AM + if (!istype(L)) + return + var/chance = TT.thrower.skill_check(SKILL_HAULING, SKILL_EXPERIENCED) ? 100 : 50 + if (prob(chance)) + slam_into(L) + + /obj/structure/railing/set_color(color) src.color = color ? color : material.icon_colour diff --git a/code/game/objects/structures/roller_bed.dm b/code/game/objects/structures/roller_bed.dm index dafa5b2a3876c..5ec5fb93ff223 100644 --- a/code/game/objects/structures/roller_bed.dm +++ b/code/game/objects/structures/roller_bed.dm @@ -39,13 +39,13 @@ icon_state = "up" else icon_state = "down" - overlays.Cut() + ClearOverlays() if (!iv_bag) return var/image/drip_overlay = image(icon, icon_state = "drip[drip_active]") if (density) drip_overlay.pixel_y += 6 - overlays += drip_overlay + AddOverlays(drip_overlay) var/image/filling_overlay = image(icon, icon_state = "filling0") if (density) filling_overlay.pixel_y += 6 @@ -60,14 +60,14 @@ if (86 to INFINITY) filling_overlay.icon_state = "filling100" filling_overlay.color = last_reagent_color - overlays += filling_overlay + AddOverlays(filling_overlay) if (percent_full < 25) var/image/light_overlay = image(icon, icon_state = "light_low") light_overlay.plane = EFFECTS_ABOVE_LIGHTING_PLANE light_overlay.layer = ABOVE_LIGHTING_LAYER if (density) light_overlay.pixel_y += 6 - overlays += light_overlay + AddOverlays(light_overlay) /obj/structure/roller_bed/examine(mob/user, distance) @@ -75,16 +75,16 @@ if (distance >= 2 && !isghost(user)) return if (drip_active) - to_chat(user, "\The [buckled_mob] is hooked up to it.") + . += SPAN_NOTICE("[buckled_mob] is hooked up to it.") if (!iv_bag) - to_chat(user, "It has no IV bag attached.") + . += SPAN_NOTICE("It has no IV bag attached.") return - var/volume = Floor(iv_bag.reagents.total_volume) + var/volume = floor(iv_bag.reagents.total_volume) if (!volume) - to_chat(user, "It has an empty [iv_bag.name] attached.") + . += SPAN_NOTICE("It has an empty [iv_bag.name] attached.") return - to_chat(user, "It has \a [iv_bag] attached with [volume] units of liquid inside.") - to_chat(user, "It is set to inject [iv_bag.transfer_amount]u of fluid per cycle.") + . += SPAN_NOTICE("It has [iv_bag] attached with [volume] units of liquid inside.") + . += SPAN_NOTICE("It is set to inject [iv_bag.transfer_amount]u of fluid per cycle.") /obj/structure/roller_bed/CanPass(atom/movable/movable, turf/target, height, air_group) @@ -94,44 +94,32 @@ return ..() -/obj/structure/roller_bed/attackby(obj/item/item, mob/living/user) - . = TRUE - if (istype(item, /obj/item/reagent_containers/ivbag)) +/obj/structure/roller_bed/use_grab(obj/item/grab/grab, list/click_params) + // Buckle victim + if (!AttemptBuckle(grab.affecting, grab.assailant)) + return TRUE + qdel(grab) + return TRUE + + +/obj/structure/roller_bed/use_tool(obj/item/tool, mob/user, list/click_params) + // IV Bag - Attach bag + if (istype(tool, /obj/item/reagent_containers/ivbag)) if (iv_bag) - to_chat(user, SPAN_WARNING("\The [src] already has \a [iv_bag] attached.")) - return - if (!user.unEquip(item, src)) - return - user.visible_message( - SPAN_ITALIC("\The [user] hangs \a [item] from \a [src]."), - SPAN_ITALIC("You hang \the [item] from \the [src]."), - range = 5 - ) - iv_bag = item + USE_FEEDBACK_FAILURE("\The [src] already has \a [iv_bag] attached") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + iv_bag = tool last_reagent_color = iv_bag.reagents.get_color() update_icon() - return - if (istype(item, /obj/item/grab)) - if (buckled_mob) - to_chat(user, SPAN_WARNING("\The [buckled_mob] is already on \the [src].")) - return - var/obj/item/grab/grab = item user.visible_message( - SPAN_ITALIC("\The [user] starts buckling \the [grab.affecting] to \a [src]."), - SPAN_ITALIC("You start buckling \the [grab.affecting] to \the [src]."), - range = 5 + SPAN_NOTICE("\The [user] hangs \a [tool] from \the [src]."), + SPAN_NOTICE("You hang \the [tool] from \the [src]."), ) - if (!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - if (QDELETED(grab)) - return - if (buckled_mob) - to_chat(user, SPAN_WARNING("\The [buckled_mob] is already on \the [src].")) - return - if (!AttemptBuckle(grab.affecting, user)) - return - qdel(grab) - return + return TRUE + return ..() @@ -200,12 +188,6 @@ if (src == dropped && user.canClick()) user.ClickOn(src) return - if (!CheckDexterity(user)) - to_chat(user, SPAN_WARNING("You're not dextrous enough to do that.")) - return - if (user.incapacitated()) - to_chat(user, SPAN_WARNING("You're in no condition to do that.")) - return if (!buckled_mob) if (isliving(dropped)) AttemptBuckle(dropped, user) @@ -411,7 +393,6 @@ icon_state = "item" object_type = /obj/item/roller_bed interact_type = /obj/structure/roller_bed - item_flags = ITEM_FLAG_TRY_ATTACK /obj/item/robot_rack/roller_bed/resolve_attackby(atom/target, mob/living/user, click_params) diff --git a/code/game/objects/structures/rubble.dm b/code/game/objects/structures/rubble.dm index afe447abe3971..28dbbba824a10 100644 --- a/code/game/objects/structures/rubble.dm +++ b/code/game/objects/structures/rubble.dm @@ -1,7 +1,7 @@ /obj/structure/rubble name = "pile of rubble" desc = "One man's garbage is another man's treasure." - icon = 'icons/obj/rubble.dmi' + icon = 'icons/obj/structures/rubble.dmi' icon_state = "base" appearance_flags = DEFAULT_APPEARANCE_FLAGS | PIXEL_SCALE opacity = 1 @@ -24,7 +24,7 @@ update_icon() /obj/structure/rubble/on_update_icon() - overlays.Cut() + ClearOverlays() var/list/parts = list() for(var/i = 1 to 7) var/image/I = image(icon,"rubble[rand(1,15)]") @@ -41,9 +41,9 @@ I.pixel_y = rand(-16,16) I.SetTransform(rotation = rand(0,360)) parts += I - overlays = parts + SetOverlays(parts) if(lootleft) - overlays += image(icon,"twinkle[rand(1,3)]") + AddOverlays(image(icon,"twinkle[rand(1,3)]")) /obj/structure/rubble/attack_hand(mob/user) if(!is_rummaging) @@ -62,23 +62,29 @@ else to_chat(user, SPAN_WARNING("Someone is already rummaging here!")) -/obj/structure/rubble/attackby(obj/item/I, mob/user) - if (user.a_intent == I_HURT) - ..() - return - if (istype(I, /obj/item/pickaxe)) - var/obj/item/pickaxe/P = I - visible_message("[user] starts clearing away \the [src].") - if(do_after(user, P.digspeed, src, DO_PUBLIC_UNIQUE)) - visible_message("[user] clears away \the [src].") - if(lootleft && prob(1)) - var/obj/item/booty = pickweight(loot) - booty = new booty(loc) - qdel(src) - return +/obj/structure/rubble/use_tool(obj/item/tool, mob/user, list/click_params) + // Pickaxe - Clear rubble + if (istype(tool, /obj/item/pickaxe)) + var/obj/item/pickaxe/pickaxe = tool + user.visible_message( + SPAN_NOTICE("\The [user] starts clearing away \the [src] with \a [tool]."), + SPAN_NOTICE("You start clearing away \the [src] with \the [tool].") + ) + if (!user.do_skilled(pickaxe.digspeed, SKILL_HAULING, src) || !user.use_sanity_check(src, tool)) + return TRUE + if (lootleft && prob(1)) + var/booty = pickweight(loot) + new booty(loc) + user.visible_message( + SPAN_NOTICE("\The [user] clears away \the [src] with \a [tool]."), + SPAN_NOTICE("You clear away \the [src] with \the [tool].") + ) + qdel_self() + return TRUE + + return ..() - ..() /obj/structure/rubble/on_death() visible_message(SPAN_WARNING("\The [src] breaks apart!")) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index c1db2f9fbe88b..957e91cafc76c 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -8,7 +8,7 @@ FLOOR SAFES /obj/structure/safe name = "safe" desc = "A huge chunk of metal with a dial embedded in it. Fine print on the dial reads \"Scarborough Arms - 2 tumbler safe, guaranteed thermite resistant, explosion resistant, and assistant resistant.\"." - icon = 'icons/obj/structures.dmi' + icon = 'icons/obj/structures/structures.dmi' icon_state = "safe" anchored = TRUE density = TRUE @@ -138,22 +138,30 @@ FLOOR SAFES updateUsrDialog() -/obj/structure/safe/attackby(obj/item/I as obj, mob/user as mob) - if(open) - if(I.w_class + space <= maxspace) - if(!user.unEquip(I, src)) - return - space += I.w_class - to_chat(user, SPAN_NOTICE("You put [I] in [src].")) - updateUsrDialog() - return - else - to_chat(user, SPAN_NOTICE("[I] won't fit in [src].")) - return - else - if(istype(I, /obj/item/clothing/accessory/stethoscope)) - to_chat(user, "Hold [I] in one of your hands while you manipulate the dial.") - return +/obj/structure/safe/use_tool(obj/item/tool, mob/user, list/click_params) + // If open - Insert item + if (open) + if (tool.w_class + space >= maxspace) + USE_FEEDBACK_FAILURE("\The [src] doesn't have enough space for \the [tool].") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + space += tool.w_class + updateUsrDialog() + user.visible_message( + SPAN_NOTICE("\The [user] puts \a [tool] in \the [src]."), + SPAN_NOTICE("You put \the [tool] in \the [src]."), + range = 2 + ) + return TRUE + + // Stethoscope - Cracking tip + if (istype(tool, /obj/item/clothing/accessory/stethoscope)) + to_chat(user, SPAN_INFO("Hold \the [tool] in one of your hands while you manipulate the dial to help with cracking the code.")) + return TRUE + + return ..() /obj/structure/safe/ex_act(severity) @@ -175,7 +183,7 @@ FLOOR SAFES update_icon() /obj/structure/safe/floor/hide(intact) - set_invisibility(intact ? 101 : 0) + set_invisibility(intact ? INVISIBILITY_ABSTRACT : 0) /obj/structure/safe/floor/hides_under_flooring() return 1 diff --git a/code/game/objects/structures/seaweed.dm b/code/game/objects/structures/seaweed.dm index d3bc8722ffc64..ac93e7f227e17 100644 --- a/code/game/objects/structures/seaweed.dm +++ b/code/game/objects/structures/seaweed.dm @@ -20,11 +20,11 @@ /obj/structure/flora/seaweed/glow/Initialize() . = ..() - set_light(0.6, 0.1, 4, 3, "#00fff4") + set_light(4, 0.6, "#00fff4") icon_state = "glowweed[rand(1,3)]" -/obj/effect/decal/cleanable/lichen +/obj/decal/cleanable/lichen name = "lichen" desc = "Damp and mossy plant life." icon_state = "lichen" - icon = 'icons/obj/structures/plants.dmi' \ No newline at end of file + icon = 'icons/obj/structures/plants.dmi' diff --git a/code/game/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm index 555f437c78e67..9002ba692b3e8 100644 --- a/code/game/objects/structures/showcase.dm +++ b/code/game/objects/structures/showcase.dm @@ -1,6 +1,6 @@ /obj/structure/showcase name = "showcase" - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/showcases.dmi' icon_state = "showcase_1" desc = "A stand with the empty body of a cyborg bolted to it." density = TRUE diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 2191fd6f08861..dab4febc59338 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -1,5 +1,5 @@ /obj/structure/sign - icon = 'icons/obj/decals.dmi' + icon = 'icons/obj/structures/decals.dmi' anchored = TRUE opacity = 0 density = FALSE @@ -7,58 +7,61 @@ w_class = ITEM_SIZE_NORMAL /obj/structure/sign/ex_act(severity) - switch(severity) - if(EX_ACT_DEVASTATING) - qdel(src) - return - if(EX_ACT_HEAVY) - qdel(src) - return - if(EX_ACT_LIGHT) - qdel(src) - return - else - return - -/obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction - if(isScrewdriver(tool) && !istype(src, /obj/structure/sign/double)) - to_chat(user, "You unfasten the sign with your [tool.name].") - var/obj/item/sign/S = new(src.loc) - S.SetName(name) - S.desc = desc - S.icon_state = icon_state - S.sign_state = icon_state - qdel(src) - else ..() + qdel(src) + +/obj/structure/sign/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + // Scrwedriver - Unfasten sign + var/obj/item/sign/S = new(loc) + S.SetName(name) + S.desc = desc + S.icon_state = icon_state + S.sign_state = icon_state + transfer_fingerprints_to(S) + user.visible_message( + SPAN_NOTICE("[user] unfastens [src] with [tool]."), + SPAN_NOTICE("You unfasten [src] with [tool].") + ) + qdel(src) /obj/item/sign name = "sign" desc = "" - icon = 'icons/obj/decals.dmi' + icon = 'icons/obj/structures/decals.dmi' w_class = ITEM_SIZE_NORMAL //big var/sign_state = "" -/obj/item/sign/attackby(obj/item/tool as obj, mob/user as mob) //construction - if(istype(tool, /obj/item/screwdriver) && isturf(user.loc)) - var/direction = input("In which direction?", "Select direction.") in list("North", "East", "South", "West", "Cancel") - if(direction == "Cancel") return - var/obj/structure/sign/S = new(user.loc) - switch(direction) - if("North") - S.pixel_y = 32 - if("East") - S.pixel_x = 32 - if("South") - S.pixel_y = -32 - if("West") - S.pixel_x = -32 - else return - S.SetName(name) - S.desc = desc - S.icon_state = sign_state - to_chat(user, "You fasten \the [S] with your [tool].") - qdel(src) - else ..() +/obj/item/sign/screwdriver_act(mob/living/user, obj/item/tool) + if(!isturf(user.loc)) + return + . = ITEM_INTERACT_SUCCESS + var/direction = input("In which direction?", "Select direction.") in list("North", "East", "South", "West", "Cancel") + if(direction == "Cancel") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + var/obj/structure/sign/S = new(user.loc) + switch(direction) + if("North") + S.pixel_y = 32 + if("East") + S.pixel_x = 32 + if("South") + S.pixel_y = -32 + if("West") + S.pixel_x = -32 + S.SetName(name) + S.desc = desc + S.icon_state = sign_state + to_chat(user, "You fasten [S] with your [tool].") + qdel(src) + +/obj/structure/sign/double/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + // Screwdriver - Block interaction + balloon_alert(user, "нельзя снять!") /obj/structure/sign/double/map name = "map" @@ -110,6 +113,10 @@ /obj/structure/sign/warning/caution name = "\improper CAUTION" +/obj/structure/sign/warning/toxic_material + name = "\improper TOXIC MATERIAL" + icon_state = "toxic_material" + /obj/structure/sign/warning/compressed_gas name = "\improper COMPRESSED GAS" icon_state = "hikpa" @@ -364,7 +371,7 @@ /obj/structure/sign/directions/New() ..() - desc = "A direction sign, pointing out which way \the [src] is." + desc = "A direction sign, pointing out which way [src] is." /obj/structure/sign/directions/science name = "\improper Research Division" @@ -441,7 +448,7 @@ /obj/item/sign/medipolma name = "medical diploma" desc = "A fancy print laminated paper that certifies that its bearer is indeed a Doctor of Medicine, graduated from a medical school in one of fringe systems. You don't recognize the name though, and half of latin words they used do not actually exist." - icon = 'icons/obj/decals.dmi' + icon = 'icons/obj/structures/decals.dmi' icon_state = "goldenplaque" sign_state = "goldenplaque" var/claimant @@ -455,6 +462,6 @@ /obj/item/sign/medipolma/examine(mob/user) . = ..() if(claimant) - to_chat(user,"This one belongs to Dr.[claimant], MD.") + . += SPAN_NOTICE("This one belongs to Dr.[claimant], MD.") else - to_chat(user,"The name is left blank for some reason.") + . += SPAN_NOTICE("The name is left blank for some reason.") diff --git a/code/game/objects/structures/skele_stand.dm b/code/game/objects/structures/skele_stand.dm index 2f61288050e3e..f9272604f0337 100644 --- a/code/game/objects/structures/skele_stand.dm +++ b/code/game/objects/structures/skele_stand.dm @@ -2,7 +2,7 @@ name = "hanging skeleton model" density = TRUE anchored = FALSE - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/surgery_tools.dmi' icon_state = "hangskele" desc = "It's an anatomical model of a human skeletal system made of plaster." var/list/swag = list() @@ -44,35 +44,61 @@ var/obj/item/clothing/C = swag[slot] if (C) swagnames += C.get_examine_line() - to_chat(user,"[gender == MALE ? "He" : "She"] is wearing [english_list(swagnames)].") + . += SPAN_NOTICE("[p_They()] [p_are()] wearing [english_list(swagnames)].") -/obj/structure/skele_stand/attackby(obj/item/W, mob/user) - if(istype(W,/obj/item/pen)) - var/nuname = sanitize(input(user,"What do you want to name this skeleton as?","Skeleton Christening",name) as text|null) - if(nuname && CanPhysicallyInteract(user)) - SetName(nuname) - return 1 - if(istype(W,/obj/item/clothing)) + +/obj/structure/skele_stand/use_weapon(obj/item/weapon, mob/user, list/click_params) + SHOULD_CALL_PARENT(FALSE) + rattle_bones(user, weapon) + return TRUE + + +/obj/structure/skele_stand/use_tool(obj/item/tool, mob/user, list/click_params) + // Pen - Name skeleton + if (istype(tool, /obj/item/pen)) + var/input = input(user, "What do you want to name this skeleton?", "[initial(name)] - Name", name) as null|text + input = sanitizeSafe(input, MAX_NAME_LEN) + if (!input || input == name || !user.use_sanity_check(src, tool)) + return TRUE + user.visible_message( + SPAN_NOTICE("\The [src] renames \the [src] to '[input]' with \a [tool]."), + SPAN_NOTICE("You rename \the [src] to '[input]' with \the [tool].") + ) + SetName(input) + return TRUE + + // Clothing - Add clothing + if (istype(tool, /obj/item/clothing)) var/slot - if(istype(W, /obj/item/clothing/under)) + if (istype(tool, /obj/item/clothing/under)) slot = slot_w_uniform_str - else if(istype(W, /obj/item/clothing/suit)) + else if (istype(tool, /obj/item/clothing/suit)) slot = slot_wear_suit_str - else if(istype(W, /obj/item/clothing/head)) + else if (istype(tool, /obj/item/clothing/head)) slot = slot_head_str - else if(istype(W, /obj/item/clothing/shoes)) + else if (istype(tool, /obj/item/clothing/shoes)) slot = slot_shoes_str - else if(istype(W, /obj/item/clothing/mask)) + else if (istype(tool, /obj/item/clothing/mask)) slot = slot_wear_mask_str - if(slot) - if(swag[slot]) - to_chat(user,SPAN_NOTICE("There is already that kind of clothing on \the [src].")) - else if(user.unEquip(W, src)) - swag[slot] = W - update_icon() - return 1 - else - rattle_bones(user, W) + if (!slot) + USE_FEEDBACK_FAILURE("\The [tool] can't be put on \the [src].") + return TRUE + if (swag[slot]) + USE_FEEDBACK_FAILURE("\The [src] is already wearing \a [swag[slot]].") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + swag[slot] = tool + update_icon() + user.visible_message( + SPAN_NOTICE("\The [user] puts \a [tool] on \the [src]."), + SPAN_NOTICE("You put \the [tool] on \the [src].") + ) + return TRUE + + return ..() + /obj/structure/skele_stand/Destroy() for(var/slot in swag) @@ -81,10 +107,10 @@ . = ..() /obj/structure/skele_stand/on_update_icon() - overlays.Cut() + ClearOverlays() for(var/slot in swag) var/obj/item/I = swag[slot] - overlays += I.get_mob_overlay(null, slot) + AddOverlays(I.get_mob_overlay(null, slot)) /obj/structure/skele_stand/maint name = "decayed skeleton model" diff --git a/code/game/objects/structures/stasis_cage.dm b/code/game/objects/structures/stasis_cage.dm deleted file mode 100644 index ceb152e45ecc0..0000000000000 --- a/code/game/objects/structures/stasis_cage.dm +++ /dev/null @@ -1,80 +0,0 @@ -/obj/structure/stasis_cage - name = "stasis cage" - desc = "A high-tech animal cage, designed to keep contained fauna docile and safe." - icon = 'icons/obj/storage.dmi' - icon_state = "stasis_cage" - density = TRUE - layer = ABOVE_OBJ_LAYER - - var/mob/living/simple_animal/contained - -/obj/structure/stasis_cage/Initialize() - . = ..() - - var/mob/living/simple_animal/A = locate() in loc - if(A) - contain(A) - -/obj/structure/stasis_cage/attack_hand(mob/user) - try_release(user) - -/obj/structure/stasis_cage/attack_robot(mob/user) - if(Adjacent(user)) - try_release(user) - -/obj/structure/stasis_cage/proc/try_release(mob/user) - if(!contained) - to_chat(user, SPAN_NOTICE("There's no animals inside \the [src]")) - return - user.visible_message("[user] begins undoing the locks and latches on \the [src].") - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message("[user] releases \the [contained] from \the [src]!") - release() - -/obj/structure/stasis_cage/on_update_icon() - if(contained) - icon_state = "[initial(icon_state)]_on" - else - icon_state = initial(icon_state) - -/obj/structure/stasis_cage/examine(mob/user) - . = ..() - if(contained) - to_chat(user, "\The [contained] is kept inside.") - -/obj/structure/stasis_cage/proc/contain(mob/living/simple_animal/animal) - if(contained || !istype(animal)) - return - - contained = animal - animal.forceMove(src) - animal.in_stasis = 1 - update_icon() - -/obj/structure/stasis_cage/proc/release() - if(!contained) - return - - contained.dropInto(src) - contained.in_stasis = 0 - contained = null - update_icon() - -/obj/structure/stasis_cage/Destroy() - release() - return ..() - -/mob/living/simple_animal/MouseDrop(obj/structure/stasis_cage/over_object) - if(istype(over_object) && Adjacent(over_object) && CanMouseDrop(over_object, usr)) - - if(!stat && !istype(src.buckled, /obj/effect/energy_net)) - to_chat(usr, "It's going to be difficult to convince \the [src] to move into \the [over_object] without capturing it in a net.") - return - - usr.visible_message("[usr] begins stuffing \the [src] into \the [over_object].", "You begin stuffing \the [src] into \the [over_object].") - Bumped(usr) - if(do_after(usr, 2 SECONDS, over_object, DO_PUBLIC_UNIQUE)) - usr.visible_message("[usr] has stuffed \the [src] into \the [over_object].", "You have stuffed \the [src] into \the [over_object].") - over_object.contain(src) - else - return ..() 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 38cfc4fba0bde..12455401a6358 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -1,7 +1,7 @@ /obj/structure/bed name = "bed" desc = "This is used to lie in, sleep in or strap on." - icon = 'icons/obj/furniture.dmi' + icon = 'icons/obj/structures/furniture.dmi' icon_state = "bed" anchored = TRUE can_buckle = TRUE @@ -10,6 +10,8 @@ var/material/padding_material var/base_icon = "bed" var/material_alteration = MATERIAL_ALTERATION_ALL + /// Bitflags. Bed/chair specific flags. + var/bed_flags = EMPTY_BITFIELD /obj/structure/bed/New(newloc, new_material = DEFAULT_FURNITURE_MATERIAL, new_padding_material) @@ -30,15 +32,15 @@ /obj/structure/bed/on_update_icon() // Prep icon. icon_state = "" - overlays.Cut() + ClearOverlays() // Base icon. var/cache_key = "[base_icon]-[material.name]" if(isnull(stool_cache[cache_key])) - var/image/I = image('icons/obj/furniture.dmi', base_icon) + var/image/I = image('icons/obj/structures/furniture.dmi', base_icon) if(material_alteration & MATERIAL_ALTERATION_COLOR) I.color = material.icon_colour stool_cache[cache_key] = I - overlays |= stool_cache[cache_key] + AddOverlays(stool_cache[cache_key]) // Padding overlay. if(padding_material) var/padding_cache_key = "[base_icon]-padding-[padding_material.name]" @@ -47,7 +49,7 @@ if(material_alteration & MATERIAL_ALTERATION_COLOR) I.color = padding_material.icon_colour stool_cache[padding_cache_key] = I - overlays |= stool_cache[padding_cache_key] + AddOverlays(stool_cache[padding_cache_key]) // Strings. if(material_alteration & MATERIAL_ALTERATION_NAME) @@ -77,53 +79,98 @@ qdel(src) return -/obj/structure/bed/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - dismantle() - qdel(src) - else if(istype(W,/obj/item/stack)) - if(padding_material) - to_chat(user, "\The [src] is already padded.") - return - var/obj/item/stack/C = W - if(C.get_amount() < 1) // How?? - qdel(C) - return - var/padding_type //This is awful but it needs to be like this until tiles are given a material var. - if(istype(W,/obj/item/stack/tile/carpet)) +/obj/structure/bed/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(HAS_FLAGS(bed_flags, BED_FLAG_CANNOT_BE_DISMANTLED)) + USE_FEEDBACK_FAILURE("[src] cannot be dismantled.") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + dismantle() + user.visible_message( + SPAN_NOTICE("[user] dismantles [src] with [tool]."), + SPAN_NOTICE("You dismantle [src] with [tool].") + ) + qdel(src) + +/obj/structure/bed/use_tool(obj/item/tool, mob/user, list/click_params) + // Material Stack - Add padding + if (isstack(tool)) + if (HAS_FLAGS(bed_flags, BED_FLAG_CANNOT_BE_PADDED)) + USE_FEEDBACK_FAILURE("[src] cannot be padded.") + return TRUE + if (padding_material) + USE_FEEDBACK_FAILURE("[src] is already padded with [padding_material.display_name].") + return TRUE + var/obj/item/stack/stack = tool + if (!stack.can_use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(stack, 1, "to pad [src].") + return TRUE + var/padding_type + if (istype(tool, /obj/item/stack/tile/carpet)) padding_type = MATERIAL_CARPET - else if(istype(W,/obj/item/stack/material)) - var/obj/item/stack/material/M = W - if(M.material && (M.material.flags & MATERIAL_PADDING)) - padding_type = "[M.material.name]" - if(!padding_type) - to_chat(user, "You cannot pad \the [src] with that.") - return - C.use(1) - if(!istype(src.loc, /turf)) - src.forceMove(get_turf(src)) - to_chat(user, "You add padding to \the [src].") + else if (istype(tool, /obj/item/stack/material)) + var/obj/item/stack/material/material_stack = tool + if (!material_stack.material || !HAS_FLAGS(material_stack.material.flags, MATERIAL_PADDING)) + USE_FEEDBACK_FAILURE("[tool] can't be used to pad [src].") + return TRUE + padding_type = material_stack.get_material_name() + else + USE_FEEDBACK_FAILURE("[tool] can't be used to pad [src].") + return TRUE + stack.use(1) + user.visible_message( + SPAN_NOTICE("[user] pads [src] with [tool]."), + SPAN_NOTICE("You pad [src] with [tool].") + ) add_padding(padding_type) - return - - else if(isWirecutter(W)) - if(!padding_material) - to_chat(user, "\The [src] has no padding to remove.") - return - to_chat(user, "You remove the padding from \the [src].") - playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) + return TRUE + + // Sharp items - Remove padding + if (is_sharp(tool)) + if (!padding_material) + USE_FEEDBACK_FAILURE("[src] has no padding to remove.") + return TRUE + user.visible_message( + SPAN_NOTICE("[user] removes [src]'s padding with [tool]."), + SPAN_NOTICE("You remove [src]'s padding with [tool].") + ) + playsound(src, 'sound/items/Wirecutter.ogg', 50, TRUE) remove_padding() + return TRUE + + return ..() + + +/obj/structure/bed/use_grab(obj/item/grab/grab, list/click_params) + // Force-buckle + grab.assailant.visible_message( + SPAN_WARNING("[grab.assailant] starts to buckle [grab.affecting] to [src]."), + SPAN_DANGER("You start to buckle [grab.affecting] to [src]!"), + SPAN_ITALIC("You hear the sound of struggling."), + exclude_mobs = list(grab.affecting) + ) + grab.affecting.show_message( + SPAN_DANGER("[grab.assailant] starts to buckle you to [src]!"), + VISIBLE_MESSAGE, + SPAN_DANGER("You feel someone trying to force you into a bed or chair!") + ) + if (!do_after(grab.assailant, 2 SECONDS, src, DO_PUBLIC_UNIQUE) || !grab.use_sanity_check(src)) + return TRUE + grab.assailant.visible_message( + SPAN_WARNING("[grab.assailant] buckles [grab.affecting] to [src]."), + SPAN_DANGER("You buckle [grab.affecting] to [src]!"), + SPAN_ITALIC("You hear the sound of buckling."), + exclude_mobs = list(grab.affecting) + ) + grab.affecting.show_message( + SPAN_DANGER("[grab.assailant] buckles you to [src]!"), + VISIBLE_MESSAGE, + SPAN_DANGER("You feel someone buckle you into a bed or chair!") + ) + qdel(grab) + return TRUE - else if(istype(W, /obj/item/grab)) - var/obj/item/grab/G = W - var/mob/living/affecting = G.affecting - user.visible_message(SPAN_NOTICE("[user] attempts to buckle [affecting] into \the [src]!")) - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - if(user_buckle_mob(affecting, user)) - qdel(W) - else - ..() /obj/structure/bed/proc/remove_padding() if(padding_material) @@ -155,7 +202,7 @@ /obj/structure/mattress name = "mattress" - icon = 'icons/obj/furniture.dmi' + icon = 'icons/obj/structures/furniture.dmi' icon_state = "mattress" desc = "A bare mattress. It doesn't look very comfortable." anchored = FALSE 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 6ec020c2fdd8a..a685a5d082376 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -15,22 +15,36 @@ rotate(user) return TRUE -/obj/structure/bed/chair/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(!padding_material && istype(W, /obj/item/assembly/shock_kit)) - var/obj/item/assembly/shock_kit/SK = W - if(!SK.status) - to_chat(user, SPAN_NOTICE("\The [SK] is not ready to be attached!")) - return - if(!user.unEquip(SK)) - return - var/obj/structure/bed/chair/e_chair/E = new (src.loc, material.name) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - E.set_dir(dir) - E.part = SK - SK.forceMove(E) - SK.master = E - qdel(src) + +/obj/structure/bed/chair/use_tool(obj/item/tool, mob/user, list/click_params) + // Shock Kit - Attach shock kit + if (istype(tool, /obj/item/assembly/shock_kit)) + if (padding_material) + USE_FEEDBACK_FAILURE("\The [src]'s [padding_material.display_name] must be removed before you can attach \the [tool].") + return TRUE + if (!user.unEquip(tool)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + var/obj/item/assembly/shock_kit/shock_kit = tool + if (!shock_kit.status) + USE_FEEDBACK_FAILURE("\The [tool] is not ready to be attached to \the [src].") + return TRUE + var/obj/structure/bed/chair/e_chair/electric_chair = new (loc, material.name) + playsound(src, 'sound/items/Deconstruct.ogg', 50, TRUE) + electric_chair.set_dir(dir) + electric_chair.part = shock_kit + shock_kit.forceMove(electric_chair) + shock_kit.master = electric_chair + transfer_fingerprints_to(electric_chair) + user.visible_message( + SPAN_NOTICE("\The [user] attaches \a [tool] to \the [src], creating \a [electric_chair]."), + SPAN_NOTICE("You attach \the [tool] to \the [src], creating \a [electric_chair].") + ) + qdel_self() + return TRUE + + return ..() + /obj/structure/bed/chair/post_buckle_mob() update_icon() @@ -38,15 +52,14 @@ /obj/structure/bed/chair/on_update_icon() ..() - var/cache_key = "[base_icon]-[material.name]-over" if(isnull(stool_cache[cache_key])) - var/image/I = image('icons/obj/furniture.dmi', "[base_icon]_over") + var/image/I = image(icon, "[base_icon]_over") if(material_alteration & MATERIAL_ALTERATION_COLOR) I.color = material.icon_colour I.layer = ABOVE_HUMAN_LAYER stool_cache[cache_key] = I - overlays |= stool_cache[cache_key] + AddOverlays(stool_cache[cache_key]) // Padding overlay. if(padding_material) var/padding_cache_key = "[base_icon]-padding-[padding_material.name]-over" @@ -56,7 +69,7 @@ I.color = padding_material.icon_colour I.layer = ABOVE_HUMAN_LAYER stool_cache[padding_cache_key] = I - overlays |= stool_cache[padding_cache_key] + AddOverlays(stool_cache[padding_cache_key]) if(buckled_mob) if(padding_material) @@ -67,7 +80,7 @@ if(material_alteration & MATERIAL_ALTERATION_COLOR) I.color = material.icon_colour stool_cache[cache_key] = I - overlays |= stool_cache[cache_key] + AddOverlays(stool_cache[cache_key]) if(padding_material) cache_key = "[base_icon]-padding-armrest-[padding_material.name]" if(isnull(stool_cache[cache_key])) @@ -76,7 +89,7 @@ if(material_alteration & MATERIAL_ALTERATION_COLOR) I.color = padding_material.icon_colour stool_cache[cache_key] = I - overlays |= stool_cache[cache_key] + AddOverlays(stool_cache[cache_key]) /obj/structure/bed/chair/rotate(mob/user) if(!CanPhysicallyInteract(user)) @@ -168,7 +181,7 @@ ..() var/image/I = image(icon, "[base_icon]_special") I.layer = ABOVE_HUMAN_LAYER - overlays |= I + AddOverlays(I) /obj/structure/bed/chair/comfy/captain/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) ..(newloc,MATERIAL_STEEL,"blue") @@ -317,7 +330,7 @@ I.layer = ABOVE_HUMAN_LAYER if(material_alteration & MATERIAL_ALTERATION_COLOR) I.color = material.icon_colour - overlays |= I + AddOverlays(I) /obj/structure/bed/chair/shuttle/blue/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) ..(newloc,MATERIAL_STEEL,"blue") @@ -334,16 +347,14 @@ base_icon = "wooden_chair" icon_state = "wooden_chair_preview" color = WOOD_COLOR_GENERIC + /// String (One of `MATERIAL_*`). Base material for the chair. Only used if `New()` is not passed a material. var/chair_material = MATERIAL_WOOD buckle_movable = FALSE + bed_flags = BED_FLAG_CANNOT_BE_PADDED -/obj/structure/bed/chair/wood/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/stack) || istype(W, /obj/item/wirecutters)) - return - ..() - -/obj/structure/bed/chair/wood/New(newloc) - ..(newloc, chair_material) +/obj/structure/bed/chair/wood/New(newloc, _material) + ..(newloc, _material? _material : chair_material) + set_color(material.icon_colour) /obj/structure/bed/chair/wood/mahogany color = WOOD_COLOR_RICH @@ -388,6 +399,7 @@ icon_state = "pew" base_icon = "pew" color = WOOD_COLOR_GENERIC + /// String (One of `MATERIAL_*`). Base material for the chair. Only used if `New()` is not passed a material. var/material/pew_material = MATERIAL_WOOD obj_flags = 0 buckle_movable = FALSE @@ -396,8 +408,9 @@ icon_state = "pew_left" base_icon = "pew_left" -/obj/structure/bed/chair/pew/New(newloc) - ..(newloc, pew_material) +/obj/structure/bed/chair/pew/New(newloc, _material) + ..(newloc, _material? _material : pew_material) + set_color(material.icon_colour) /obj/structure/bed/chair/pew/mahogany color = WOOD_COLOR_RICH 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 19de87e5081b8..197e0a26e38ef 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -4,7 +4,7 @@ var/global/list/stool_cache = list() //haha stool /obj/item/stool name = "stool" desc = "Apply butt." - icon = 'icons/obj/furniture.dmi' + icon = 'icons/obj/structures/furniture.dmi' icon_state = "stool_preview" //set for the map item_state = "stool" randpixel = 0 @@ -63,7 +63,7 @@ var/global/list/stool_cache = list() //haha stool I.color = padding_material.icon_colour stool_cache[padding_cache_key] = I noverlays |= stool_cache[padding_cache_key] - overlays = noverlays + SetOverlays(noverlays) // Strings. if(padding_material) SetName("[padding_material.display_name] [initial(name)]") //this is not perfect but it will do for now. @@ -117,14 +117,17 @@ var/global/list/stool_cache = list() //haha stool padding_material.place_sheet(get_turf(src)) qdel(src) +/obj/item/stool/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + dismantle() + qdel(src) + /obj/item/stool/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - dismantle() - qdel(src) - else if(istype(W,/obj/item/stack)) + if(istype(W,/obj/item/stack)) if(padding_material) - to_chat(user, "\The [src] is already padded.") + to_chat(user, "[src] is already padded.") return var/obj/item/stack/C = W if(C.get_amount() < 1) // How?? @@ -138,20 +141,20 @@ var/global/list/stool_cache = list() //haha stool if(M.material && (M.material.flags & MATERIAL_PADDING)) padding_type = "[M.material.name]" if(!padding_type) - to_chat(user, "You cannot pad \the [src] with that.") + to_chat(user, "You cannot pad [src] with that.") return C.use(1) if(!istype(src.loc, /turf)) user.drop_from_inventory(src) src.dropInto(loc) - to_chat(user, "You add padding to \the [src].") + to_chat(user, "You add padding to [src].") add_padding(padding_type) return - else if(isWirecutter(W)) + else if (is_sharp(W)) if(!padding_material) - to_chat(user, "\The [src] has no padding to remove.") + to_chat(user, "[src] has no padding to remove.") return - to_chat(user, "You remove the padding from \the [src].") + to_chat(user, "You remove the padding from [src].") playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) remove_padding() else 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 395ccda07a299..026805230a6df 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -3,28 +3,33 @@ desc = "Now we're getting somewhere." icon_state = "wheelchair" anchored = FALSE - movement_handlers = list(/datum/movement_handler/deny_multiz, /datum/movement_handler/delay = list(2), /datum/movement_handler/move_relay_self) + bed_flags = BED_FLAG_CANNOT_BE_DISMANTLED | BED_FLAG_CANNOT_BE_PADDED var/driving = 0 var/mob/living/pulling = null var/bloodiness + +/obj/structure/bed/chair/wheelchair/Initialize() + . = ..() + movement_handlers = list( + /datum/movement_handler/deny_multiz, + /datum/movement_handler/delay = list(config.walk_delay), + /datum/movement_handler/move_relay_self + ) + + /obj/structure/bed/chair/wheelchair/on_update_icon() return /obj/structure/bed/chair/wheelchair/set_dir() ..() - overlays.Cut() - var/image/O = image(icon = 'icons/obj/furniture.dmi', icon_state = "w_overlay", dir = src.dir) + ClearOverlays() + var/image/O = image(icon = 'icons/obj/structures/furniture.dmi', icon_state = "w_overlay", dir = src.dir) O.layer = ABOVE_HUMAN_LAYER - overlays += O + AddOverlays(O) if(buckled_mob) buckled_mob.set_dir(dir) -/obj/structure/bed/chair/wheelchair/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W) || istype(W,/obj/item/stack) || isWirecutter(W)) - return - ..() - /obj/structure/bed/chair/wheelchair/relaymove(mob/user, direction) // Redundant check? if(user.stat || user.stunned || user.weakened || user.paralysis || user.lying || user.restrained()) @@ -115,10 +120,11 @@ /obj/structure/bed/chair/wheelchair/CtrlClick(mob/user) if(in_range(src, user)) - if(!ishuman(user)) return + if(!ishuman(user)) + return FALSE if(user == buckled_mob) to_chat(user, SPAN_WARNING("You realize you are unable to push the wheelchair you sit in.")) - return + return TRUE if(!pulling) pulling = user user.pulledby = src @@ -168,7 +174,7 @@ occupant.visible_message(SPAN_DANGER("[occupant] crashed into \the [A]!")) /obj/structure/bed/chair/wheelchair/proc/create_track() - var/obj/effect/decal/cleanable/blood/tracks/B = new(loc) + var/obj/decal/cleanable/blood/tracks/B = new(loc) var/newdir = get_dir(get_step(loc, dir), loc) if(newdir == dir) B.set_dir(newdir) diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 1acf9fc8b6f0e..eb8084d9474f3 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -1,11 +1,12 @@ /obj/structure/dispenser name = "tank storage unit" desc = "A simple yet bulky storage device for gas tanks. Has room for up to ten oxygen tanks, and ten phoron tanks." - icon = 'icons/obj/objects.dmi' + icon = 'icons/obj/structures/tank_dispenser.dmi' icon_state = "dispenser" density = TRUE anchored = TRUE w_class = ITEM_SIZE_NO_CONTAINER + obj_flags = OBJ_FLAG_ANCHORABLE var/oxygentanks = 10 var/phorontanks = 10 var/list/oxytanks = list() //sorry for the similar var names @@ -23,13 +24,13 @@ update_icon() /obj/structure/dispenser/on_update_icon() - overlays.Cut() + ClearOverlays() switch(oxygentanks) - if(1 to 3) overlays += "oxygen-[oxygentanks]" - if(4 to INFINITY) overlays += "oxygen-4" + if(1 to 3) AddOverlays("oxygen-[oxygentanks]") + if(4 to INFINITY) AddOverlays("oxygen-4") switch(phorontanks) - if(1 to 4) overlays += "phoron-[phorontanks]" - if(5 to INFINITY) overlays += "phoron-5" + if(1 to 4) AddOverlays("phoron-[phorontanks]") + if(5 to INFINITY) AddOverlays("phoron-5") /obj/structure/dispenser/attack_ai(mob/user as mob) if(user.Adjacent(src)) @@ -46,41 +47,47 @@ return -/obj/structure/dispenser/attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/tank/oxygen) || istype(I, /obj/item/tank/air) || istype(I, /obj/item/tank/anesthetic)) - if(oxygentanks < 10) - if(!user.unEquip(I, src)) - return - oxytanks.Add(I) +/obj/structure/dispenser/use_tool(obj/item/tool, mob/user, list/click_params) + // Tank - Insert tank + if (istype(tool, /obj/item/tank)) + // Oxygen Tanks + if (is_type_in_list(tool, list(/obj/item/tank/oxygen, /obj/item/tank/air, /obj/item/tank/anesthetic))) + if (oxygentanks >= 10) + USE_FEEDBACK_FAILURE("\The [src]'s oxygen tank rack is full.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + oxytanks += tool oxygentanks++ - to_chat(user, SPAN_NOTICE("You put [I] in [src].")) - if(oxygentanks < 5) - update_icon() - else - to_chat(user, SPAN_NOTICE("[src] is full.")) - updateUsrDialog() - return - if(istype(I, /obj/item/tank/phoron)) - if(phorontanks < 10) - if(!user.unEquip(I, src)) - return - platanks.Add(I) + update_icon() + user.visible_message( + SPAN_NOTICE("\The [user] adds \a [tool] to \the [src]'s oxygen rack."), + SPAN_NOTICE("You add \the [tool] to \the [src]'s oxygen rack.") + ) + return TRUE + // Phoron Tanks + if (istype(tool, /obj/item/tank/phoron)) + if (phorontanks >= 10) + USE_FEEDBACK_FAILURE("\The [src]'s phoron tank rack is full.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + platanks += tool phorontanks++ - to_chat(user, SPAN_NOTICE("You put [I] in [src].")) - if(oxygentanks < 6) - update_icon() - else - to_chat(user, SPAN_NOTICE("[src] is full.")) - updateUsrDialog() - return - if(isWrench(I)) - if(anchored) - to_chat(user, SPAN_NOTICE("You lean down and unwrench [src].")) - anchored = FALSE - else - to_chat(user, SPAN_NOTICE("You wrench [src] into place.")) - anchored = TRUE - return + update_icon() + user.visible_message( + SPAN_NOTICE("\The [user] adds \a [tool] to \the [src]'s phoron rack."), + SPAN_NOTICE("You add \the [tool] to \the [src]'s phoron rack.") + ) + return TRUE + // Other tanks + USE_FEEDBACK_FAILURE("\The [tool] doesn't fit in any of \the [src]'s racks.") + return TRUE + + return ..() + /obj/structure/dispenser/Topic(href, href_list) if(usr.stat || usr.restrained()) diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm index 9e6fb7ad49398..5f892be607224 100644 --- a/code/game/objects/structures/transit_tubes.dm +++ b/code/game/objects/structures/transit_tubes.dm @@ -93,7 +93,7 @@ /obj/structure/transit_tube/New(loc) ..(loc) - if(tube_dirs == null) + if(isnull(tube_dirs)) init_dirs() @@ -314,7 +314,7 @@ current_tube = tube break - if(current_tube == null) + if(isnull(current_tube)) set_dir(next_dir) Move(get_step(loc, dir)) // Allow collisions when leaving the tubes. break @@ -446,7 +446,7 @@ for(var/direction in tube_dir_list) var/location = get_step(loc, direction) for(var/obj/structure/transit_tube/tube in location) - if(tube.directions() == null && tube.icon_state == "auto") + if(isnull(tube.directions()) && tube.icon_state == "auto") connected_auto += direction break diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm index e64424c0a7c76..d0413f9c331c8 100644 --- a/code/game/objects/structures/under_wardrobe.dm +++ b/code/game/objects/structures/under_wardrobe.dm @@ -3,40 +3,47 @@ /obj/structure/undies_wardrobe name = "underwear wardrobe" desc = "Holds item of clothing you shouldn't be showing off in the hallways." - icon = 'icons/obj/undies_wardrobe.dmi' + icon = 'icons/obj/structures/undies_wardrobe.dmi' icon_state = "closed" density = TRUE + anchored = TRUE + obj_flags = OBJ_FLAG_ANCHORABLE var/static/list/amount_of_underwear_by_id_card -/obj/structure/undies_wardrobe/attackby(obj/item/underwear/underwear, mob/user) - if(istype(underwear)) - if(!user.unEquip(underwear)) - return - qdel(underwear) - user.visible_message(SPAN_NOTICE("\The [user] inserts \their [underwear.name] into \the [src]."), SPAN_NOTICE("You insert your [underwear.name] into \the [src].")) - var/id = user.GetIdCard() +/obj/structure/undies_wardrobe/use_tool(obj/item/tool, mob/user, list/click_params) + // Underwear - Return to wardrobe + if (istype(tool, /obj/item/underwear)) + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] inserts \a [tool] into \the [src]."), + SPAN_NOTICE("You insert \the [tool] into \the [src].") + ) + qdel(tool) + var/obj/item/card/id/id = user.GetIdCard() var/message - if(id) + if (id) message = "ID card detected. Your underwear quota for this shift has been increased, if applicable." else message = "No ID card detected. Thank you for your contribution." - audible_message(message, WARDROBE_BLIND_MESSAGE(user)) var/number_of_underwear = LAZYACCESS(amount_of_underwear_by_id_card, id) - 1 - if(number_of_underwear) + if (number_of_underwear) LAZYSET(amount_of_underwear_by_id_card, id, number_of_underwear) - GLOB.destroyed_event.register(id, src, /obj/structure/undies_wardrobe/proc/remove_id_card) + GLOB.destroyed_event.register(id, src, TYPE_PROC_REF(/obj/structure/undies_wardrobe, remove_id_card)) else remove_id_card(id) + return TRUE + + return ..() - else - ..() /obj/structure/undies_wardrobe/proc/remove_id_card(id_card) LAZYREMOVE(amount_of_underwear_by_id_card, id_card) - GLOB.destroyed_event.unregister(id_card, src, /obj/structure/undies_wardrobe/proc/remove_id_card) + GLOB.destroyed_event.unregister(id_card, src, TYPE_PROC_REF(/obj/structure/undies_wardrobe, remove_id_card)) /obj/structure/undies_wardrobe/attack_hand(mob/user) if(!human_who_can_use_underwear(user)) @@ -47,14 +54,16 @@ /obj/structure/undies_wardrobe/interact(mob/living/carbon/human/H) var/id = H.GetIdCard() - var/dat = list() + var/list/dat = list() dat += "Underwear

    " - dat += "You may claim [id ? length(GLOB.underwear.categories) - LAZYACCESS(amount_of_underwear_by_id_card, id) : 0] more article\s this shift.

    " + dat += "You may claim [id ? LAZYLEN(GLOB.underwear.categories) - LAZYACCESS(amount_of_underwear_by_id_card, id) : 0] more article\s this shift.

    " dat += "Available Categories

    " - for(var/datum/category_group/underwear/UWC in GLOB.underwear.categories) - dat += "[UWC.name] (Select)
    " - dat = jointext(dat,null) - show_browser(H, dat, "window=wardrobe;size=400x250") + + if(LAZYLEN(GLOB.underwear.categories)) + for(var/datum/category_group/underwear/UWC in GLOB.underwear.categories) + dat += "[UWC.name] (Select)
    " + + show_browser(H, dat.Join(), "window=wardrobe;size=400x250") /obj/structure/undies_wardrobe/proc/human_who_can_use_underwear(mob/living/carbon/human/H) if(!istype(H) || !H.species || !(H.species.appearance_flags & SPECIES_APPEARANCE_HAS_UNDERWEAR)) @@ -73,7 +82,7 @@ var/mob/living/carbon/human/H = usr if(href_list["select_underwear"]) - var/datum/category_group/underwear/UWC = GLOB.underwear.categories_by_name[href_list["select_underwear"]] + var/datum/category_group/underwear/UWC = LAZYACCESS(GLOB.underwear.categories_by_name, href_list["select_underwear"]) if(!UWC) return var/datum/category_item/underwear/UWI = input("Select your desired underwear:", "Choose underwear") as null|anything in exlude_none(UWC.items) @@ -97,7 +106,7 @@ return var/current_quota = LAZYACCESS(amount_of_underwear_by_id_card, id) - if(current_quota >= length(GLOB.underwear.categories)) + if(current_quota >= LAZYLEN(GLOB.underwear.categories)) audible_message("You have already used up your underwear quota for this shift. Please return previously acquired items to increase it.", WARDROBE_BLIND_MESSAGE(H)) return LAZYSET(amount_of_underwear_by_id_card, id, ++current_quota) diff --git a/code/game/objects/structures/virologyprops.dm b/code/game/objects/structures/virologyprops.dm index b8fe508bd0873..d36ff15b6be88 100644 --- a/code/game/objects/structures/virologyprops.dm +++ b/code/game/objects/structures/virologyprops.dm @@ -1,139 +1,139 @@ /obj/structure/virology - name = "Isolator" + name = "isolator" desc = "A isolator, it appears to be off." - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/machines/research/virology.dmi' icon_state = "isolator_off" anchored = TRUE /obj/structure/virology/iso - name = "Isolator" + name = "isolator" desc = "An isolator, the screen has a series of data streams that you can't quite understand." - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/machines/research/virology.dmi' icon_state = "isolator" anchored = TRUE /obj/structure/virology/iso_on - name = "Isolator" + name = "isolator" desc = "An isolator, there is a sample inserted and the screen has a series of data streams that you can't quite understand." - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/machines/research/virology.dmi' icon_state = "isolator_processing" anchored = TRUE /obj/structure/virology/iso_sample - name = "Isolator" + name = "isolator" desc = "An isolator, there is a sample inserted and the screen has a series of data streams that you can't quite understand." - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/machines/research/virology.dmi' icon_state = "isolator_in" anchored = TRUE /obj/structure/virology/analyser - name = "Analyser" + name = "analyser" desc = "An analyser, there is a sample inserted and the screen has a series of data streams that you can't quite understand." - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/machines/research/virology.dmi' icon_state = "analyser_processing" anchored = TRUE /obj/structure/virology/analyser_off - name = "Analyser" + name = "analyser" desc = "An analyser, it is currently sitting idle." - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/machines/research/virology.dmi' icon_state = "analyser" anchored = TRUE /obj/structure/virology/incubator_off - name = "Incubator" + name = "incubator" desc = "An incubator, it is currently idle." - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/machines/research/virology.dmi' icon_state = "incubator" anchored = TRUE /obj/structure/virology/incubator_on - name = "Incubator" + name = "incubator" desc = "An incubator, you can see a set of samples inside." - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/machines/research/virology.dmi' icon_state = "incubator_on" anchored = TRUE /obj/structure/virology/centrifuge - name = "Centrifuge" + name = "centrifuge" desc = "A centrifuge, it is currently idle." - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/machines/research/virology.dmi' icon_state = "centrifuge" anchored = TRUE /obj/structure/virology/centrifuge_on - name = "Centrifuge" + name = "centrifuge" desc = "A centrifuge, it is currently processing a sample." - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/machines/research/virology.dmi' icon_state = "centrifuge_moving" anchored = TRUE /obj/structure/virology/centrifuge_broken - name = "Centrifuge" + name = "centrifuge" desc = "A centrifuge, the glass is smashed open." - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/machines/research/virology.dmi' icon_state = "centrifugeb" anchored = TRUE /obj/structure/virology/cryogenics - name = "Cryotube" + name = "cryotube" desc = "A cryotube, it is not on." - icon = 'icons/obj/cryogenics.dmi' + icon = 'icons/obj/machines/medical/cryogenics.dmi' icon_state = "cell-off" - anchored = TRUE + anchored = TRUE /obj/structure/virology/cryogenics_occupied - name = "Occupied Cryotube" + name = "occupied cryotube" desc = "A cryotube, a figure floats inside, they do not appear to be conscious." - icon = 'icons/obj/cryogenics.dmi' + icon = 'icons/obj/machines/medical/cryogenics.dmi' icon_state = "cell-occupied" anchored = TRUE /obj/structure/virology/cryogenics_on - name = "Cryotube" + name = "cryotube" desc = "A cryotube, a strange liquid bubbles inside the glass." - icon = 'icons/obj/cryogenics.dmi' + icon = 'icons/obj/machines/medical/cryogenics.dmi' icon_state = "cell-on" anchored = TRUE /obj/structure/virology/dnaconsole - name = "Console" + name = "console" desc = "A console, you're not sure what the information displayed means." - icon = 'icons/obj/cryogenic2.dmi' + icon = 'icons/obj/machines/medical/cryogenic_legacy.dmi' icon_state = "dna_computer" anchored = TRUE /obj/structure/virology/console - name = "Console" + name = "console" desc = "A console, the information displayed is far beyond what you can understand." - icon = 'icons/obj/cryogenic2.dmi' + icon = 'icons/obj/machines/medical/cryogenic_legacy.dmi' icon_state = "scannerconsole" anchored = TRUE /obj/structure/virology/console_off - name = "Console" + name = "console" desc = "A console, it's not functioning." - icon = 'icons/obj/cryogenic2.dmi' + icon = 'icons/obj/machines/medical/cryogenic_legacy.dmi' icon_state = "c_unpowered" anchored = TRUE /obj/structure/virology/console_broken - name = "Console" + name = "console" desc = "A console, the glass is smashed." - icon = 'icons/obj/cryogenic2.dmi' + icon = 'icons/obj/machines/medical/cryogenic_legacy.dmi' icon_state = "broken" anchored = TRUE /obj/structure/virology/scanner - name = "Scanner" + name = "scanner" desc = "Some sort of scanner, you're not sure what it does." - icon = 'icons/obj/cryogenic2.dmi' + icon = 'icons/obj/machines/medical/cryogenic_legacy.dmi' icon_state = "scanner_0" anchored = TRUE /obj/structure/virology/scanner_on - name = "Scanner" + name = "scanner" desc = "Some sort of scanner, it appears there is someone inside as data streams off the console." - icon = 'icons/obj/cryogenic2.dmi' + icon = 'icons/obj/machines/medical/cryogenic_legacy.dmi' icon_state = "scanner_1" anchored = TRUE diff --git a/code/game/objects/structures/wall_frame.dm b/code/game/objects/structures/wall_frame.dm index e3dcaac4ca22d..2359912188730 100644 --- a/code/game/objects/structures/wall_frame.dm +++ b/code/game/objects/structures/wall_frame.dm @@ -4,7 +4,7 @@ /obj/structure/wall_frame name = "low wall" desc = "A low wall section which serves as the base of windows, amongst other things." - icon = 'icons/obj/wall_frame.dmi' + icon = 'icons/obj/structures/wall_frame.dmi' icon_state = "frame" atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE | ATOM_FLAG_CAN_BE_PAINTED | ATOM_FLAG_ADJACENT_EXCEPTION @@ -33,6 +33,7 @@ material = SSmaterials.get_material_by_name(materialtype) set_max_health(material.integrity) + SetName("[material.use_name] [name]") update_connections(1) update_icon() @@ -47,62 +48,74 @@ /obj/structure/wall_frame/examine(mob/user) . = ..() - if(paint_color) - to_chat(user, SPAN_NOTICE("It has a smooth coat of paint applied.")) + . += SPAN_NOTICE("It has a smooth coat of paint applied.") -/obj/structure/wall_frame/attackby(obj/item/W, mob/user) - src.add_fingerprint(user) - if (user.a_intent == I_HURT) - ..() +/obj/structure/wall_frame/can_use_item(obj/item/tool, mob/user, click_params) + . = ..() + if (!.) return - //grille placing - if(istype(W, /obj/item/stack/material/rods)) - for(var/obj/structure/window/WINDOW in loc) - if(WINDOW.dir == get_dir(src, user)) - to_chat(user, SPAN_NOTICE("There is a window in the way.")) - return - place_grille(user, loc, W) + // Windows + for (var/obj/structure/window/window in loc) + if (window.dir == get_dir(src, user)) + USE_FEEDBACK_FAILURE("[window] blocks access to [src].") + return FALSE + + // Grilles + var/obj/structure/grille/grille = locate() in loc + if (grille?.density) + USE_FEEDBACK_FAILURE("[grille] blocks access to [src].") + return FALSE + +/obj/structure/wall_frame/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + user.visible_message( + SPAN_NOTICE("[user] starts dismantling [src] with [tool]."), + SPAN_NOTICE("You start dismantling [src] with [tool].") + ) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) return + user.visible_message( + SPAN_NOTICE("[user] dismantles [src] with [tool]."), + SPAN_NOTICE("You dismantle [src] with [tool].") + ) + dismantle() - //window placing - if(istype(W,/obj/item/stack/material)) - var/obj/item/stack/material/ST = W - if(ST.material.opacity > 0.7) - return 0 - - place_window(user, loc, ST) +/obj/structure/wall_frame/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.tool_start_check(user, 1)) return - - if(isWrench(W)) - for(var/obj/structure/S in loc) - if(istype(S, /obj/structure/window)) - to_chat(user, SPAN_NOTICE("There is still a window on the low wall!")) - return - else if(istype(S, /obj/structure/grille)) - to_chat(user, SPAN_NOTICE("There is still a grille on the low wall!")) - return - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - to_chat(user, SPAN_NOTICE("Now disassembling the low wall...")) - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, SPAN_NOTICE("You dissasembled the low wall!")) - dismantle() + user.visible_message( + SPAN_NOTICE("[user] starts slicing [src] apart with [tool]."), + SPAN_NOTICE("You start slicing [src] apart with [tool].") + ) + if(!tool.use_as_tool(src, user, 2 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) return + user.visible_message( + SPAN_NOTICE("[user] slices [src] apart with [tool]."), + SPAN_NOTICE("You slice [src] apart with [tool].") + ) + dismantle() - if(istype(W, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = W - if(!cutter.slice(user)) - return - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - to_chat(user, SPAN_NOTICE("Now slicing through the low wall...")) - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, SPAN_WARNING("You have sliced through the low wall!")) - dismantle() - return +/obj/structure/wall_frame/use_tool(obj/item/tool, mob/user, list/click_params) + // Rods - Place Grille + if (istype(tool, /obj/item/stack/material/rods)) + place_grille(user, loc, tool) + return TRUE + + // Material Stack - Place window + if (istype(tool, /obj/item/stack/material)) + var/obj/item/stack/material/stack = tool + if (stack.material.opacity > 0.7) + USE_FEEDBACK_FAILURE("[stack] cannot be used to make a window.") + return TRUE + place_window(user, loc, tool) + return TRUE + + return ..() - ..() /obj/structure/wall_frame/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(air_group || (height==0)) return 1 @@ -114,7 +127,7 @@ // icon related /obj/structure/wall_frame/on_update_icon() - overlays.Cut() + ClearOverlays() var/image/I var/new_color = (paint_color ? paint_color : material.icon_colour) @@ -122,19 +135,19 @@ for(var/i = 1 to 4) if(other_connections[i] != "0") - I = image('icons/obj/wall_frame.dmi', "frame_other[connections[i]]", dir = SHIFTL(1, i - 1)) + I = image('icons/obj/structures/wall_frame.dmi', "frame_other[connections[i]]", dir = SHIFTL(1, i - 1)) else - I = image('icons/obj/wall_frame.dmi', "frame[connections[i]]", dir = SHIFTL(1, i - 1)) - overlays += I + I = image('icons/obj/structures/wall_frame.dmi', "frame[connections[i]]", dir = SHIFTL(1, i - 1)) + AddOverlays(I) if(stripe_color) for(var/i = 1 to 4) if(other_connections[i] != "0") - I = image('icons/obj/wall_frame.dmi', "stripe_other[connections[i]]", dir = SHIFTL(1, i - 1)) + I = image('icons/obj/structures/wall_frame.dmi', "stripe_other[connections[i]]", dir = SHIFTL(1, i - 1)) else - I = image('icons/obj/wall_frame.dmi', "stripe[connections[i]]", dir = SHIFTL(1, i - 1)) + I = image('icons/obj/structures/wall_frame.dmi', "stripe[connections[i]]", dir = SHIFTL(1, i - 1)) I.color = stripe_color - overlays += I + AddOverlays(I) /obj/structure/wall_frame/hull/Initialize() . = ..() @@ -155,7 +168,7 @@ dismantle() /obj/structure/wall_frame/proc/dismantle() - new /obj/item/stack/material/steel(get_turf(src), 3) + material.place_sheet(get_turf(src), 3) qdel(src) /obj/structure/wall_frame/get_color() diff --git a/code/game/objects/structures/wallframe_spawner.dm b/code/game/objects/structures/wallframe_spawner.dm index d28f65d6620f6..db723e9ce71b1 100644 --- a/code/game/objects/structures/wallframe_spawner.dm +++ b/code/game/objects/structures/wallframe_spawner.dm @@ -1,6 +1,6 @@ -/obj/effect/wallframe_spawn +/obj/wallframe_spawn name = "wall frame window grille spawner" - icon = 'icons/obj/structures.dmi' + icon = 'icons/obj/structures/structures.dmi' icon_state = "wingrille" density = TRUE anchored = TRUE @@ -10,19 +10,19 @@ var/activated = FALSE var/fulltile = TRUE -/obj/effect/wallframe_spawn/CanPass() +/obj/wallframe_spawn/CanPass() return 0 -/obj/effect/wallframe_spawn/attack_hand() +/obj/wallframe_spawn/attack_hand() attack_generic() -/obj/effect/wallframe_spawn/attack_ghost() +/obj/wallframe_spawn/attack_ghost() attack_generic() -/obj/effect/wallframe_spawn/attack_generic() +/obj/wallframe_spawn/attack_generic() activate() -/obj/effect/wallframe_spawn/Initialize(mapload) +/obj/wallframe_spawn/Initialize(mapload) . = ..() if(!win_path) return @@ -31,7 +31,7 @@ activate() return INITIALIZE_HINT_QDEL -/obj/effect/wallframe_spawn/proc/activate() +/obj/wallframe_spawn/proc/activate() if(activated) return if(locate(frame_path) in loc) @@ -50,7 +50,7 @@ else for (var/dir in GLOB.cardinal) var/turf/T = get_step(src, dir) - var/obj/effect/wallframe_spawn/other = locate(type) in T + var/obj/wallframe_spawn/other = locate(type) in T if(!other) var/found_connection if(locate(/obj/structure/grille) in T) @@ -73,10 +73,10 @@ handle_grille_spawn(G) activated = 1 - for(var/obj/effect/wallframe_spawn/other in neighbours) + for(var/obj/wallframe_spawn/other in neighbours) if(!other.activated) other.activate() -/obj/effect/wallframe_spawn/proc/handle_frame_spawn(obj/structure/wall_frame/F) +/obj/wallframe_spawn/proc/handle_frame_spawn(obj/structure/wall_frame/F) for(var/direction in GLOB.cardinal) var/turf/T = get_step(src, direction) for(var/obj/O in T) @@ -85,83 +85,83 @@ D.update_connections() D.update_icon() -/obj/effect/wallframe_spawn/proc/handle_window_spawn(obj/structure/window/W) +/obj/wallframe_spawn/proc/handle_window_spawn(obj/structure/window/W) return -/obj/effect/wallframe_spawn/proc/handle_grille_spawn(obj/structure/grille/G) +/obj/wallframe_spawn/proc/handle_grille_spawn(obj/structure/grille/G) return -/obj/effect/wallframe_spawn/no_grille +/obj/wallframe_spawn/no_grille name = "wall frame window spawner (no grille)" grille_path = null -/obj/effect/wallframe_spawn/reinforced +/obj/wallframe_spawn/reinforced name = "reinforced wall frame window spawner" icon_state = "r-wingrille" win_path = /obj/structure/window/reinforced/full -/obj/effect/wallframe_spawn/reinforced/no_grille +/obj/wallframe_spawn/reinforced/no_grille name = "reinforced wall frame window spawner (no grille)" grille_path = null -/obj/effect/wallframe_spawn/reinforced/titanium +/obj/wallframe_spawn/reinforced/titanium name = "reinforced titanium wall frame window spawner" frame_path = /obj/structure/wall_frame/titanium -/obj/effect/wallframe_spawn/reinforced/hull +/obj/wallframe_spawn/reinforced/hull name = "reinforced hull wall frame window spawner" frame_path = /obj/structure/wall_frame/hull -/obj/effect/wallframe_spawn/reinforced/hull/vox +/obj/wallframe_spawn/reinforced/hull/vox name = "reinforced vox hull wall frame window spawner" frame_path = /obj/structure/wall_frame/hull/vox -/obj/effect/wallframe_spawn/reinforced/hull/verne +/obj/wallframe_spawn/reinforced/hull/verne name = "reinforced verne hull wall frame window spawner" frame_path = /obj/structure/wall_frame/hull/verne -/obj/effect/wallframe_spawn/reinforced/bare //standard type is used most often so its in the master type, this one is for away sites etc with unpainted walls +/obj/wallframe_spawn/reinforced/bare //standard type is used most often so its in the master type, this one is for away sites etc with unpainted walls name = "bare metal reinforced wall frame window spawner" icon_state = "r-wingrille" frame_path = /obj/structure/wall_frame -/obj/effect/wallframe_spawn/phoron +/obj/wallframe_spawn/phoron name = "phoron wall frame window spawner" icon_state = "p-wingrille" - win_path = /obj/structure/window/phoronbasic/full + win_path = /obj/structure/window/boron_basic/full -/obj/effect/wallframe_spawn/reinforced_phoron +/obj/wallframe_spawn/reinforced_phoron name = "reinforced phoron wall frame window spawner" icon_state = "pr-wingrille" - win_path = /obj/structure/window/phoronreinforced/full + win_path = /obj/structure/window/boron_reinforced/full -/obj/effect/wallframe_spawn/reinforced_phoron/titanium +/obj/wallframe_spawn/reinforced_phoron/titanium frame_path = /obj/structure/wall_frame/titanium -/obj/effect/wallframe_spawn/reinforced_phoron/hull +/obj/wallframe_spawn/reinforced_phoron/hull frame_path = /obj/structure/wall_frame/hull -/obj/effect/wallframe_spawn/reinforced/polarized +/obj/wallframe_spawn/reinforced/polarized name = "polarized reinforced wall frame window spawner" color = "#444444" win_path = /obj/structure/window/reinforced/polarized/full var/id -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille +/obj/wallframe_spawn/reinforced/polarized/no_grille name = "polarized reinforced wall frame window spawner (no grille)" grille_path = null -/obj/effect/wallframe_spawn/reinforced/polarized/full//wtf it's the same as the other one, not gonna touch this cause I don't wanna remap a million things +/obj/wallframe_spawn/reinforced/polarized/full//wtf it's the same as the other one, not gonna touch this cause I don't wanna remap a million things name = "polarized reinforced wall frame window spawner - full tile" win_path = /obj/structure/window/reinforced/polarized/full -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille/regular +/obj/wallframe_spawn/reinforced/polarized/no_grille/regular name = "polarized wall frame window spawner (no grille) (non reinforced)" win_path = /obj/structure/window/basic/full/polarized -/obj/effect/wallframe_spawn/reinforced/polarized/handle_window_spawn(obj/structure/window/reinforced/polarized/P) +/obj/wallframe_spawn/reinforced/polarized/handle_window_spawn(obj/structure/window/reinforced/polarized/P) if(id) P.id = id diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 7192995faecc3..39db39dc2acdf 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -25,10 +25,14 @@ /obj/structure/hygiene/proc/unclog() clogged = 0 -/obj/structure/hygiene/attackby(obj/item/thing, mob/user) - if(clogged > 0 && isplunger(thing)) - user.visible_message(SPAN_NOTICE("\The [user] strives valiantly to unclog \the [src] with \the [thing]!")) - spawn + +/obj/structure/hygiene/use_tool(obj/item/tool, mob/user, list/click_params) + // Plunger - Unclog + if (isplunger(tool)) + if (!clogged) + USE_FEEDBACK_FAILURE("[src] isn't clogged.") + return TRUE + spawn // TODO: Replace this with a single combined sound effect. playsound(loc, 'sound/effects/plunger.ogg', 75, 1) sleep(5) playsound(loc, 'sound/effects/plunger.ogg', 75, 1) @@ -38,19 +42,29 @@ playsound(loc, 'sound/effects/plunger.ogg', 75, 1) sleep(5) playsound(loc, 'sound/effects/plunger.ogg', 75, 1) - if(do_after(user, 4.5 SECONDS, src, DO_PUBLIC_UNIQUE) && clogged > 0) - visible_message(SPAN_NOTICE("With a loud gurgle, \the [src] begins flowing more freely.")) - playsound(loc, pick(SSfluids.gurgles), 100, 1) - clogged-- - if(clogged <= 0) - unclog() - return - . = ..() + user.visible_message( + SPAN_NOTICE("[user] strives valiantly to unclog [src] with [tool]!"), + SPAN_NOTICE("You attempt to unclog [src] with [tool].") + ) + if (!do_after(user, (tool.toolspeed * 4.5) SECONDS, src, DO_PUBLIC_UNIQUE) || !user.use_sanity_check(src, tool)) + return TRUE + if (!clogged) + USE_FEEDBACK_FAILURE("[src] isn't clogged.") + return TRUE + visible_message(SPAN_NOTICE("With a loud gurgle, [src] begins flowing more freely.")) + playsound(src, pick(SSfluids.gurgles), 100, TRUE) + clogged-- + if (clogged <= 0) + unclog() + return TRUE + + return ..() + /obj/structure/hygiene/examine(mob/user) . = ..() if(clogged > 0) - to_chat(user, SPAN_WARNING("It seems to be badly clogged.")) + . += SPAN_WARNING("It seems to be badly clogged.") /obj/structure/hygiene/Process() if(clogged <= 0) @@ -66,11 +80,11 @@ if(flood_amt) var/turf/T = loc if(istype(T)) - var/obj/effect/fluid/F = locate() in T + var/obj/fluid/F = locate() in T if(!F) F = new(loc) T.show_bubbles() if(world.time > next_gurgle) - visible_message("\The [src] gurgles and overflows!") + visible_message("[src] gurgles and overflows!") next_gurgle = world.time + 80 playsound(T, pick(SSfluids.gurgles), 50, 1) SET_FLUID_DEPTH(F, min(F.fluid_amount + (rand(30,50)*clogged), flood_amt)) @@ -83,7 +97,7 @@ if(fluid_here <= 0) return - T.remove_fluid(Ceil(fluid_here*drainage)) + T.remove_fluid(ceil(fluid_here*drainage)) T.show_bubbles() if(world.time > last_gurgle + 80) last_gurgle = world.time @@ -92,7 +106,7 @@ /obj/structure/hygiene/toilet name = "toilet" desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean." - icon = 'icons/obj/watercloset.dmi' + icon = 'icons/obj/structures/toilets.dmi' icon_state = "toilet00" density = FALSE anchored = TRUE @@ -132,78 +146,133 @@ /obj/structure/hygiene/toilet/on_update_icon() icon_state = "toilet[open][cistern]" -/obj/structure/hygiene/toilet/attackby(obj/item/I as obj, mob/living/user) - if(isCrowbar(I)) - to_chat(user, SPAN_NOTICE("You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"].")) - playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1) - if(do_after(user, 3 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message( - SPAN_NOTICE("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!"), - SPAN_NOTICE("You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!"), - "You hear grinding porcelain." - ) - cistern = !cistern - update_icon() - return - if(istype(I, /obj/item/grab)) - var/obj/item/grab/G = I - - if(isliving(G.affecting)) - var/mob/living/GM = G.affecting - if(!GM.loc == get_turf(src)) - to_chat(user, SPAN_WARNING("\The [GM] needs to be on the toilet.")) - return - if(open && !swirlie) - user.visible_message(SPAN_DANGER("\The [user] starts jamming \the [GM]'s face into \the [src]!")) - swirlie = GM - if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message(SPAN_DANGER("\The [user] gives [GM.name] a swirlie!")) - GM.adjustOxyLoss(5) - swirlie = null - else - user.visible_message(SPAN_DANGER("\The [user] slams [GM.name] into the [src]!"), SPAN_NOTICE("You slam [GM.name] into the [src]!")) - GM.adjustBruteLoss(8) +/obj/structure/hygiene/toilet/use_grab(obj/item/grab/grab, list/click_params) + // Harm intent - Slam into toilet + if (grab.assailant.a_intent == I_HURT) + if (!Adjacent(grab.affecting)) + USE_FEEDBACK_GRAB_FAILURE("[grab.affecting] must be next [src] to bash them with it.") + return TRUE + grab.assailant.setClickCooldown(grab.assailant.get_attack_speed(grab)) + grab.affecting.adjustBruteLoss(8) + playsound(src, 'sound/weapons/tablehit1.ogg', 50, TRUE) + grab.assailant.visible_message( + SPAN_WARNING("[grab.assailant] slams [grab.affecting] into [src]!"), + SPAN_DANGER("You slam [grab.affecting] into [src]!"), + exclude_mobs = list(grab.affecting) + ) + grab.affecting.show_message( + SPAN_DANGER("[grab.assailant] slams you into [src]!"), + VISIBLE_MESSAGE, + SPAN_DANGER("You feel yourself being slammed against something hard!") + ) + return TRUE - if(cistern && !istype(user,/mob/living/silicon/robot)) //STOP PUTTING YOUR MODULES IN THE TOILET. - if(I.w_class > ITEM_SIZE_NORMAL) - to_chat(user, SPAN_WARNING("\The [I] does not fit.")) - return - if(w_items + I.w_class > 5) - to_chat(user, SPAN_WARNING("The cistern is full.")) - return - if(!user.unEquip(I, src)) - return - w_items += I.w_class - to_chat(user, SPAN_NOTICE("You carefully place \the [I] into the cistern.")) + // Other intent - Give swirlie + if (!open) + USE_FEEDBACK_GRAB_FAILURE("[src] needs to be open before you can give [grab.affecting] a swirlie.") + return TRUE + if (!Adjacent(grab.affecting)) + USE_FEEDBACK_GRAB_FAILURE("[grab.affecting] must be next [src] to give them a swirlie.") + return TRUE + grab.assailant.visible_message( + SPAN_WARNING("[grab.assailant] starts jamming [grab.affecting]'s face into [src]!"), + SPAN_DANGER("You start jamming [grab.affecting]'s face into [src]!"), + exclude_mobs = list(grab.affecting) + ) + grab.affecting.show_message( + SPAN_DANGER("[grab.assailant] starts jamming your face into [src]!"), + VISIBLE_MESSAGE, + SPAN_DANGER("You feel your head being dunked in cold water!") + ) + if (!do_after(grab.assailant, 3 SECONDS, src, DO_PUBLIC_UNIQUE) || !grab.use_sanity_check(src)) + return TRUE + grab.assailant.visible_message( + SPAN_WARNING("[grab.assailant] gives [grab.affecting] a swirlie in [src]!"), + SPAN_DANGER("You give [grab.affecting] a swirlie in [src]!"), + exclude_mobs = list(grab.affecting) + ) + grab.affecting.show_message( + SPAN_DANGER("[grab.assailant] gives you a swirlie in [src]!"), + VISIBLE_MESSAGE, + SPAN_DANGER("You hear the sound of flushing and feel water and air being sucked out around you!") + ) + grab.affecting.adjustOxyLoss(5) + return TRUE + +/obj/structure/hygiene/toilet/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] starts to [cistern ? "lift" : "replace"] [src]'s cistern with [tool]."), + SPAN_NOTICE("You start to [cistern ? "lift" : "replace"] [src]'s cistern with [tool].") + ) + if(!tool.use_as_tool(src, user, 3 SECONDS, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) return + playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] [cistern ? "lifts" : "replaces"] [src]'s cistern with [tool]."), + SPAN_NOTICE("You [cistern ? "lift" : "replace"] [src]'s cistern with [tool].") + ) + cistern = !cistern + update_icon() + +/obj/structure/hygiene/toilet/use_tool(obj/item/tool, mob/user, list/click_params) + // Anything else - Put item in cistern + if (cistern) + if (tool.w_class > ITEM_SIZE_NORMAL) + USE_FEEDBACK_FAILURE("[tool] is too large for [src]'s cistern.") + return TRUE + if (w_items + tool.w_class > 5) + USE_FEEDBACK_FAILURE("[src]'s cistern is too full to hold [tool].") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + w_items += tool.w_class + user.visible_message( + SPAN_NOTICE("[user] slips [tool] into [src]'s cistern."), + SPAN_NOTICE("You carefully place [tool] into [src]'s cistern."), + range = 2 + ) + return TRUE + + return ..() - . = ..() /obj/structure/hygiene/urinal name = "urinal" desc = "The HU-452, an experimental urinal." - icon = 'icons/obj/watercloset.dmi' + icon = 'icons/obj/structures/toilets.dmi' icon_state = "urinal" density = FALSE anchored = TRUE -/obj/structure/hygiene/urinal/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/grab)) - var/obj/item/grab/G = I - if(isliving(G.affecting)) - var/mob/living/GM = G.affecting - if(!GM.loc == get_turf(src)) - to_chat(user, SPAN_WARNING("[GM.name] needs to be on the urinal.")) - return - user.visible_message(SPAN_DANGER("[user] slams [GM.name] into the [src]!")) - GM.adjustBruteLoss(8) - . = ..() + +/obj/structure/hygiene/urinal/use_grab(obj/item/grab/grab, list/click_params) + // Harm intent - Slam into urinal + if (grab.assailant.a_intent == I_HURT) + if (!Adjacent(grab.affecting)) + USE_FEEDBACK_GRAB_FAILURE("[grab.affecting] must be next [src] to bash them with it.") + return TRUE + grab.assailant.setClickCooldown(grab.assailant.get_attack_speed(grab)) + grab.affecting.adjustBruteLoss(8) + playsound(src, 'sound/weapons/tablehit1.ogg', 50, TRUE) + grab.assailant.visible_message( + SPAN_WARNING("[grab.assailant] slams [grab.affecting] into [src]!"), + SPAN_DANGER("You slam [grab.affecting] into [src]!"), + exclude_mobs = list(grab.affecting) + ) + to_chat(grab.affecting, SPAN_DANGER("[grab.assailant] slams you into [src]!")) + return TRUE + + return ..() + /obj/structure/hygiene/shower name = "shower" desc = "The HS-451. Installed in the 2200s by the Hygiene Division." - icon = 'icons/obj/watercloset.dmi' + icon = 'icons/obj/showers.dmi' icon_state = "shower" density = FALSE anchored = TRUE @@ -212,21 +281,36 @@ drainage = 0.2 //showers are tiny, drain a little slower var/on = 0 - var/obj/effect/mist/mymist = null + var/obj/mist/mymist = null var/ismist = 0 //needs a var so we can make it linger~ var/watertemp = "normal" //freezing, normal, or boiling var/is_washing = 0 var/list/temperature_settings = list("normal" = 310, "boiling" = T0C+100, "freezing" = T0C) + var/working_sound = 'sound/machines/shower.ogg' + var/datum/sound_token/sound_token + var/sound_id /obj/structure/hygiene/shower/New() ..() create_reagents(50) +/obj/structure/hygiene/shower/proc/update_sound() + if(!working_sound) + return + if(!sound_id) + sound_id = "[type]_[sequential_id(/obj/structure/hygiene/shower)]" + if(on) + var/volume = 20 + if(!sound_token) + sound_token = GLOB.sound_player.PlayLoopingSound(src, sound_id, working_sound, volume = volume, range = 10) + sound_token.SetVolume(volume) + else if(sound_token) + QDEL_NULL(sound_token) //add heat controls? when emagged, you can freeze to death in it? -/obj/effect/mist +/obj/mist name = "mist" - icon = 'icons/obj/watercloset.dmi' + icon = 'icons/obj/showers.dmi' icon_state = "mist" layer = MOB_LAYER + 1 anchored = TRUE @@ -235,6 +319,7 @@ /obj/structure/hygiene/shower/attack_hand(mob/M) on = !on update_icon() + update_sound() if(on) if (M.loc == loc) wash(M) @@ -242,43 +327,56 @@ for (var/atom/movable/G in src.loc) G.clean_blood() -/obj/structure/hygiene/shower/attackby(obj/item/I as obj, mob/user) - if(istype(I, /obj/item/device/scanner/gas)) - to_chat(user, SPAN_NOTICE("The water temperature seems to be [watertemp].")) +/obj/structure/hygiene/shower/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + var/input = input(user, "What setting would you like to set the temperature valve to?", "[name] Water Temperature Valve") as null|anything in temperature_settings + if(!input) return + user.visible_message( + SPAN_NOTICE("[user] starts adjusting [src]'s temperature with [tool]."), + SPAN_NOTICE("You start adjusting [src]'s temperature with [tool].") + ) + if(!tool.use_as_tool(src, user, 5 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + watertemp = input + user.visible_message( + SPAN_NOTICE("[user] adjusts [src]'s temperature with [tool]."), + SPAN_NOTICE("You set [src]'s temperature to [watertemp] with [tool].") + ) + +/obj/structure/hygiene/shower/use_tool(obj/item/tool, mob/user, list/click_params) + // Gas Scanner - Fetch temperature + if (istype(tool, /obj/item/device/scanner/gas)) + user.visible_message( + SPAN_NOTICE("[user] scans [src] with [tool]."), + SPAN_NOTICE("You scan [src] with [tool]. The water temperature seems to be [watertemp].") + ) + return TRUE + + return ..() - if(isWrench(I)) - var/newtemp = input(user, "What setting would you like to set the temperature valve to?", "Water Temperature Valve") in temperature_settings - to_chat(user,SPAN_NOTICE("You begin to adjust the temperature valve with \the [I].")) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 5 SECONDS, src, DO_REPAIR_CONSTRUCT)) - watertemp = newtemp - user.visible_message(SPAN_NOTICE("\The [user] adjusts \the [src] with \the [I]."), SPAN_NOTICE("You adjust the shower with \the [I].")) - add_fingerprint(user) - return - . = ..() /obj/structure/hygiene/shower/on_update_icon() //this is terribly unreadable, but basically it makes the shower mist up - overlays.Cut() //once it's been on for a while, in addition to handling the water overlay. + ClearOverlays() //once it's been on for a while, in addition to handling the water overlay. if(mymist) qdel(mymist) mymist = null if(on) - overlays += image('icons/obj/watercloset.dmi', src, "water", MOB_LAYER + 1, dir) + AddOverlays(image('icons/obj/showers.dmi', src, "water", MOB_LAYER + 1, dir)) if(temperature_settings[watertemp] < T20C) return //no mist for cold water if(!ismist) spawn(50) if(src && on) ismist = 1 - mymist = new /obj/effect/mist(loc) + mymist = new /obj/mist(loc) else ismist = 1 - mymist = new /obj/effect/mist(loc) + mymist = new /obj/mist(loc) else if(ismist) ismist = 1 - mymist = new /obj/effect/mist(loc) + mymist = new /obj/mist(loc) spawn(250) if(src && !on) qdel(mymist) @@ -291,8 +389,8 @@ wash_mob(washing) if(isturf(loc)) var/turf/tile = loc - for(var/obj/effect/E in tile) - if(istype(E,/obj/effect/decal/cleanable) || istype(E,/obj/effect/overlay)) + for(var/obj/E in tile) + if(istype(E,/obj/decal/cleanable) || istype(E,/obj/overlay)) qdel(E) reagents.splash(washing, 10) @@ -337,13 +435,13 @@ /obj/item/bikehorn/rubberducky name = "rubber ducky" desc = "Rubber ducky you're so fine, you make bathtime lots of fuuun. Rubber ducky I'm awfully fooooond of yooooouuuu~" //thanks doohl - icon = 'icons/obj/watercloset.dmi' + icon = 'icons/obj/toy.dmi' icon_state = "rubberducky" item_state = "rubberducky" /obj/structure/hygiene/sink name = "sink" - icon = 'icons/obj/watercloset.dmi' + icon = 'icons/obj/sinks.dmi' icon_state = "sink" desc = "A sink used for washing one's hands and face." anchored = TRUE @@ -356,10 +454,10 @@ if(!usr.Adjacent(src)) return ..() if(!thing.reagents || thing.reagents.total_volume == 0) - to_chat(usr, SPAN_WARNING("\The [thing] is empty.")) + to_chat(usr, SPAN_WARNING("[thing] is empty.")) return // Clear the vessel. - visible_message(SPAN_NOTICE("\The [usr] tips the contents of \the [thing] into \the [src].")) + visible_message(SPAN_NOTICE("[usr] tips the contents of [thing] into [src].")) thing.reagents.clear_reagents() thing.update_icon() @@ -394,70 +492,60 @@ user.clean_blood() user.visible_message( \ - SPAN_NOTICE("[user] washes their hands using \the [src]."), \ - SPAN_NOTICE("You wash your hands using \the [src].")) + SPAN_NOTICE("[user] washes their hands using [src]."), \ + SPAN_NOTICE("You wash your hands using [src].")) -/obj/structure/hygiene/sink/attackby(obj/item/O as obj, mob/living/user) +/obj/structure/hygiene/sink/use_tool(obj/item/tool, mob/user, list/click_params) + SHOULD_CALL_PARENT(FALSE) - if(isplunger(O) && clogged > 0) + // Plunger - Passthrough to parent if clogged + if (isplunger(tool) && clogged) return ..() - if(busy) - to_chat(user, SPAN_WARNING("Someone's already washing here.")) - return - - var/obj/item/reagent_containers/RG = O - if (istype(RG) && RG.is_open_container() && RG.reagents) - RG.reagents.add_reagent(/datum/reagent/water, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) - user.visible_message(SPAN_NOTICE("[user] fills \the [RG] using \the [src]."),SPAN_NOTICE("You fill \the [RG] using \the [src].")) - playsound(loc, 'sound/effects/sink.ogg', 75, 1) - return 1 - - else if (istype(O, /obj/item/melee/baton)) - var/obj/item/melee/baton/B = O - if(B.bcell) - if(B.bcell.charge > 0 && B.status == 1) - flick("baton_active", src) - user.Stun(10) - user.stuttering = 10 - user.Weaken(10) - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - R.cell.charge -= 20 - else - B.deductcharge(B.hitcost) - user.visible_message( \ - SPAN_DANGER("[user] was stunned by \his wet [O]!"), \ - SPAN_CLASS("userdanger", "[user] was stunned by \his wet [O]!")) - return 1 - else if(istype(O, /obj/item/mop)) - O.reagents.add_reagent(/datum/reagent/water, 5) - to_chat(user, SPAN_NOTICE("You wet \the [O] in \the [src].")) - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - return - - var/turf/location = user.loc - if(!isturf(location)) return - - var/obj/item/I = O - if(!I || !istype(I,/obj/item)) return - - to_chat(usr, SPAN_NOTICE("You start washing \the [I].")) - playsound(loc, 'sound/effects/sink_long.ogg', 75, 1) - - busy = 1 - if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - busy = 0 + // Reagent Container - Fill container + if (istype(tool, /obj/item/reagent_containers)) + if (!tool.reagents) + return ..() + var/obj/item/reagent_containers/container = tool + if (!container.is_open_container()) + USE_FEEDBACK_FAILURE("[tool] needs to be open before you can fill it with [src].") + return TRUE + playsound(src, 'sound/effects/sink.ogg', 50, TRUE) + container.reagents.add_reagent(/datum/reagent/water, container.amount_per_transfer_from_this) + user.visible_message( + SPAN_NOTICE("[user] fills [tool] with some water from [src]."), + SPAN_NOTICE("You fill [tool] with some water from [src]."), + SPAN_ITALIC("You hear running water.") + ) return TRUE - busy = 0 - if(istype(O, /obj/item/extinguisher)) return TRUE // We're washing, not filling. + // Mop - Wet mop + if (istype(tool, /obj/item/mop)) + tool.reagents.add_reagent(/datum/reagent/water, 5) + playsound(src, 'sound/effects/slosh.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] wets [tool] with [src]."), + SPAN_NOTICE("You wet [tool] with [src]."), + SPAN_ITALIC("You hear running water.") + ) + return TRUE - O.clean_blood() - user.visible_message( \ - SPAN_NOTICE("[user] washes \a [I] using \the [src]."), \ - SPAN_NOTICE("You wash \a [I] using \the [src].")) + // Everything else - Wash + playsound(src, 'sound/effects/sink_long.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] starts washing [tool] in [src]."), + SPAN_NOTICE("You start washing [tool] in [src]."), + SPAN_ITALIC("You hear running water.") + ) + if (!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE) || !user.use_sanity_check(src, tool)) + return TRUE + tool.clean_blood() + user.visible_message( + SPAN_NOTICE("[user] washes [tool] in [src]."), + SPAN_NOTICE("You wash [tool] in [src].") + ) + return TRUE /obj/structure/hygiene/sink/kitchen @@ -474,34 +562,54 @@ ..() icon_state = "puddle" -/obj/structure/hygiene/sink/puddle/attackby(obj/item/O as obj, mob/user) - icon_state = "puddle-splash" + +/obj/structure/hygiene/sink/puddle/post_use_item(obj/item/tool, mob/user, interaction_handled, use_call, click_params) ..() - icon_state = "puddle" + if (interaction_handled) + flick("puddle-splash", src) + + +/obj/structure/hygiene/use_tool(obj/item/tool, mob/user, list/click_params) + // Toilet Paper - Clog drain + if (istype(tool, /obj/item/taperoll/bog)) + if (clogged == -1) + USE_FEEDBACK_FAILURE("Try as you might, you can not clog [src] with [tool].") + return TRUE + if (clogged) + USE_FEEDBACK_FAILURE("[src] is already clogged.") + return TRUE + if (!user.canUnEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + user.visible_message( + SPAN_WARNING("[user] starts stuffing [src] with [tool]!"), + SPAN_WARNING("You start stuffing [src] with [tool]!") + ) + if (!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE) || !user.use_sanity_check(src, tool)) + return TRUE + if (clogged == -1) + USE_FEEDBACK_FAILURE("Try as you might, you can not clog [src] with [tool].") + return TRUE + if (clogged) + USE_FEEDBACK_FAILURE("[src] is already clogged.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + user.visible_message( + SPAN_WARNING("[user] unceremoniously jams [src] with [tool]. What a rebel."), + SPAN_WARNING("You unceremoniously jam [src] with [tool]. What a rebel.") + ) + clog(1) + qdel(tool) + return TRUE -//toilet paper interaction for clogging toilets and other facilities + return ..() -/obj/structure/hygiene/attackby(obj/item/I, mob/user) - if (!istype(I, /obj/item/taperoll/bog)) - ..() - return - if (clogged == -1) - to_chat(user, SPAN_WARNING("Try as you might, you can not clog \the [src] with \the [I].")) - return - if (clogged) - to_chat(user, SPAN_WARNING("\The [src] is already clogged.")) - return - if (!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - return - if (clogged || QDELETED(I) || !user.unEquip(I)) - return - to_chat(user, SPAN_NOTICE("You unceremoniously jam \the [src] with \the [I]. What a rebel.")) - clog(1) - qdel(I) /obj/item/taperoll/bog name = "toilet paper roll" - icon = 'icons/obj/watercloset.dmi' + icon = 'icons/obj/bog.dmi' desc = "A unbranded roll of standard issue two ply toilet paper. Refined from carefully rendered down sea shells due to SolGov's 'Abuse Of The Trees Act'." tape_type = /obj/item/tape/bog icon_state = "bogroll" @@ -509,6 +617,21 @@ slot_flags = SLOT_HEAD | SLOT_OCLOTHING var/sheets = 30 +/obj/item/taperoll/bog/equipped(mob/user, slot) + switch(slot) + if(slot_wear_suit) + sprite_sheets = list( + SPECIES_VOX = 'icons/mob/species/vox/onmob_suit_vox.dmi', + SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_suit_unathi.dmi' + ) + if(slot_head) + sprite_sheets = list( + SPECIES_VOX = 'icons/mob/species/vox/onmob_head_vox.dmi', + SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_unathi.dmi' + ) + return ..() + + /obj/item/tape/bog name = "toilet paper" desc = "A length of toilet paper. Seems like custodia is marking their territory again." @@ -524,23 +647,23 @@ if (usr.incapacitated()) return if(sheets > 0) - visible_message("\The [usr] tears a sheet from \the [src].", "You tear a sheet from \the [src].") + visible_message("[usr] tears a sheet from [src].", "You tear a sheet from [src].") var/obj/item/paper/crumpled/bog/C = new(loc) usr.put_in_hands(C) sheets-- if (sheets < 1) - to_chat(usr, "\The [src] is depleted.") + to_chat(usr, "[src] is depleted.") qdel(src) /obj/item/paper/crumpled/bog name = "sheet of toilet paper" desc = "A single sheet of toilet paper. Two ply." - icon = 'icons/obj/watercloset.dmi' + icon = 'icons/obj/bog.dmi' icon_state = "bogroll_sheet" /obj/structure/hygiene/faucet name = "faucet" - icon = 'icons/obj/watercloset.dmi' + icon = 'icons/obj/structures/faucets.dmi' icon_state = "faucet" desc = "An outlet for liquids. Water you waiting for?" anchored = TRUE @@ -549,17 +672,18 @@ var/fill_level = 500 var/open = FALSE -/obj/structure/hygiene/faucet/attackby(obj/item/thing, mob/user) - if (isWrench(thing)) - new /obj/item/faucet (loc) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - user.visible_message( - SPAN_WARNING("\The [user] unwrenches \the [src]."), - SPAN_WARNING("You unwrench \the [src].") - ) - qdel(src) - return TRUE - return ..() +/obj/structure/hygiene/faucet/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + // Wrench - Disconnect faucet + var/obj/item/faucet/faucet = new(loc) + transfer_fingerprints_to(faucet) + user.visible_message( + SPAN_NOTICE("[user] detaches [src] from the floor with [tool]."), + SPAN_NOTICE("You detach [src] from the floor with [tool].") + ) + qdel(src) /obj/structure/hygiene/faucet/attack_hand(mob/user) . = ..() @@ -570,8 +694,8 @@ playsound(loc, 'sound/effects/closet_close.ogg', 20, 1) user.visible_message( - SPAN_NOTICE("\The [user] has [open ? "opened" : "closed"] \the [src]."), - SPAN_NOTICE("You [open ? "open" : "close"] \the [src].") + SPAN_NOTICE("[user] has [open ? "opened" : "closed"] [src]."), + SPAN_NOTICE("You [open ? "open" : "close"] [src].") ) update_icon() @@ -582,27 +706,26 @@ /obj/item/faucet name = "faucet" desc = "An outlet for liquids. Water you waiting for?" - icon = 'icons/obj/watercloset.dmi' + icon = 'icons/obj/structures/faucets.dmi' icon_state = "faucet-item" obj_flags = OBJ_FLAG_ROTATABLE var/constructed_type = /obj/structure/hygiene/faucet -/obj/item/faucet/attackby(obj/item/thing, mob/user) - if(isWrench(thing)) - var/turf/simulated/floor/F = loc - if (istype(F) && istype(F.flooring, /singleton/flooring/pool)) - var/obj/O = new constructed_type (loc) - O.dir = dir - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - user.visible_message( - SPAN_WARNING("\The [user] wrenches \the [src] down."), - SPAN_WARNING("You wrench \the [src] down.") - ) - qdel(src) - else - to_chat(user, SPAN_WARNING("\The [src] can only be secured to pool tiles!")) - return TRUE - return ..() +/obj/item/faucet/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + var/turf/simulated/floor/F = loc + if(!istype(F) || !istype(F.flooring, /singleton/flooring/pool)) + to_chat(user, SPAN_WARNING("[src] can only be secured to pool tiles!")) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + var/obj/O = new constructed_type(loc) + O.dir = dir + user.visible_message( + SPAN_WARNING("[user] wrenches [src] down."), + SPAN_WARNING("You wrench [src] down.") + ) + qdel(src) /obj/structure/hygiene/faucet/proc/water_flow() if(!isturf(src.loc)) @@ -627,4 +750,4 @@ /obj/structure/hygiene/faucet/examine(mob/user) . = ..() - to_chat(user, "It is turned [open ? "on" : "off"]") + . += SPAN_NOTICE("It is turned [open ? "on" : "off"]") diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index efda3f8eb82f5..cf11429681975 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -17,18 +17,23 @@ density = FALSE dir = NORTH w_class = ITEM_SIZE_NORMAL + obj_flags = OBJ_FLAG_ANCHORABLE var/obj/item/airlock_electronics/electronics = null //Vars to help with the icon's name var/facing = "l" //Does the windoor open to the left or right? var/secure = "" //Whether or not this creates a secure windoor - var/state = "01" //How far the door assembly has progressed in terms of sprites + + var/const/WINDOOR_STATE_FRAME = "01" + var/const/WINDOOR_STATE_WIRED = "02" + /// String (One of `WINDOOR_STATE_*`). How far the door assembly has progressed in terms of sprites + var/state = WINDOOR_STATE_FRAME /obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0) ..() if(constructed) - state = "01" + state = WINDOOR_STATE_FRAME anchored = FALSE switch(start_dir) if(NORTH, SOUTH, EAST, WEST) @@ -64,174 +69,212 @@ return 1 -/obj/structure/windoor_assembly/attackby(obj/item/W as obj, mob/user as mob) - //I really should have spread this out across more states but thin little windoors are hard to sprite. - switch(state) - if("01") - if(isWelder(W) && !anchored ) - var/obj/item/weldingtool/WT = W - if (WT.remove_fuel(0,user)) - user.visible_message("[user] dissassembles the windoor assembly.", "You start to dissassemble the windoor assembly.") - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) - - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src || !WT.isOn()) return - to_chat(user, SPAN_NOTICE("You dissasembled the windoor assembly!")) - new /obj/item/stack/material/glass/reinforced(get_turf(src), 5) - if(secure) - new /obj/item/stack/material/rods(get_turf(src), 4) - qdel(src) - else - to_chat(user, SPAN_NOTICE("You need more welding fuel to dissassemble the windoor assembly.")) - return - - //Wrenching an unsecure assembly anchors it in place. Step 4 complete - if(isWrench(W) && !anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - user.visible_message("[user] secures the windoor assembly to the floor.", "You start to secure the windoor assembly to the floor.") - - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src) return - to_chat(user, SPAN_NOTICE("You've secured the windoor assembly!")) - src.anchored = TRUE - if(src.secure) - src.SetName("Secure Anchored Windoor Assembly") - else - src.SetName("Anchored Windoor Assembly") - - //Unwrenching an unsecure assembly un-anchors it. Step 4 undone - else if(isWrench(W) && anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - user.visible_message("[user] unsecures the windoor assembly to the floor.", "You start to unsecure the windoor assembly to the floor.") - - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src) return - to_chat(user, SPAN_NOTICE("You've unsecured the windoor assembly!")) - src.anchored = FALSE - if(src.secure) - src.SetName("Secure Windoor Assembly") - else - src.SetName("Windoor Assembly") - - //Adding plasteel makes the assembly a secure windoor assembly. Step 2 (optional) complete. - else if(istype(W, /obj/item/stack/material/rods) && !secure) - var/obj/item/stack/material/rods/R = W - if(R.get_amount() < 4) - to_chat(user, SPAN_WARNING("You need more rods to do this.")) - return - to_chat(user, SPAN_NOTICE("You start to reinforce the windoor with rods.")) - - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT) && !secure) - if (R.use(4)) - to_chat(user, SPAN_NOTICE("You reinforce the windoor.")) - src.secure = "secure_" - if(src.anchored) - src.SetName("Secure Anchored Windoor Assembly") - else - src.SetName("Secure Windoor Assembly") - - //Adding cable to the assembly. Step 5 complete. - else if(istype(W, /obj/item/stack/cable_coil) && anchored) - user.visible_message("[user] wires the windoor assembly.", "You start to wire the windoor assembly.") - - var/obj/item/stack/cable_coil/CC = W - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if (CC.use(1)) - to_chat(user, SPAN_NOTICE("You wire the windoor!")) - src.state = "02" - if(src.secure) - src.SetName("Secure Wired Windoor Assembly") - else - src.SetName("Wired Windoor Assembly") - else - ..() - - if("02") - - //Removing wire from the assembly. Step 5 undone. - if(isWirecutter(W) && !src.electronics) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) - user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") - - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src) return - - to_chat(user, SPAN_NOTICE("You cut the windoor wires.!")) - new/obj/item/stack/cable_coil(get_turf(user), 1) - src.state = "01" - if(src.secure) - src.SetName("Secure Anchored Windoor Assembly") - else - src.SetName("Anchored Windoor Assembly") - - //Adding airlock electronics for access. Step 6 complete. - else if(istype(W, /obj/item/airlock_electronics) && W:icon_state != "door_electronics_smoked") - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.") - - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src) return - if(!user.unEquip(W, src)) - return - to_chat(user, SPAN_NOTICE("You've installed the airlock electronics!")) - src.SetName("Near finished Windoor Assembly") - src.electronics = W - else - W.dropInto(loc) - - //Screwdriver to remove airlock electronics. Step 6 undone. - else if(isScrewdriver(W) && src.electronics) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to uninstall electronics from the airlock assembly.") - - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!src || !src.electronics) return - to_chat(user, SPAN_NOTICE("You've removed the airlock electronics!")) - if(src.secure) - src.SetName("Secure Wired Windoor Assembly") - else - src.SetName("Wired Windoor Assembly") - var/obj/item/airlock_electronics/ae = electronics - electronics = null - ae.dropInto(loc) - - //Crowbar to complete the assembly, Step 7 complete. - else if(isCrowbar(W)) - if(!src.electronics) - to_chat(usr, SPAN_WARNING("The assembly is missing electronics.")) - return - close_browser(usr, "window=windoor_access") - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] pries the windoor into the frame.", "You start prying the windoor into the frame.") - - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - set_density(1) //Shouldn't matter but just incase - to_chat(user, SPAN_NOTICE("You finish the windoor!")) - - var/obj/machinery/door/window/windoor - if(secure) - windoor = new /obj/machinery/door/window/brigdoor(loc, src) - if(facing == "l") - windoor.icon_state = "leftsecureopen" - windoor.base_state = "leftsecure" - else - windoor.icon_state = "rightsecureopen" - windoor.base_state = "rightsecure" - else - windoor = new (loc, src) - if(src.facing == "l") - windoor.icon_state = "leftopen" - windoor.base_state = "left" - else - windoor.icon_state = "rightopen" - windoor.base_state = "right" - qdel(src) - - else - ..() - - //Update to reflect changes(if applicable) +/obj/structure/windoor_assembly/can_anchor(obj/item/tool, mob/user, silent) + . = ..() + if (!.) + return + if (state != WINDOOR_STATE_FRAME) + if (!silent) + USE_FEEDBACK_FAILURE("[src]'s wiring must be removed before you can unanchor it.") + return FALSE + +/obj/structure/windoor_assembly/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!electronics) + USE_FEEDBACK_FAILURE("[src] needs a circuit board before you can complete it.") + return + user.visible_message( + SPAN_NOTICE("[user] starts prying [src] into its frame with [tool]."), + SPAN_NOTICE("You start prying [src] into its frame with [tool].") + ) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || !electronics) + return + var/obj/machinery/door/window/windoor + if(secure) + windoor = new /obj/machinery/door/window/brigdoor(loc, src) + else + windoor = new (loc, src) + if(facing == "l") + windoor.base_state = "left" + else + windoor.base_state = "right" + transfer_fingerprints_to(windoor) + user.visible_message( + SPAN_NOTICE("[user] finishes [windoor] with [tool]."), + SPAN_NOTICE("You finish [windoor] with [tool].") + ) + qdel(src) + +/obj/structure/windoor_assembly/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!electronics) + balloon_alert(user, "нет платы!") + return + balloon_alert(user, "снятие платы") + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || !electronics) + return + electronics.dropInto(loc) + electronics.add_fingerprint(user, tool = tool) + electronics = null + update_icon() + balloon_alert_to_viewers("плата снята") + +/obj/structure/windoor_assembly/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(state != WINDOOR_STATE_WIRED) + USE_FEEDBACK_FAILURE("[src] has no wiring to remove.") + return + if(electronics) + USE_FEEDBACK_FAILURE("[src]'s electronics need to be removed before you can cut the wiring.") + return + user.visible_message( + SPAN_NOTICE("[user] starts cutting [src]'s wiring with [tool]."), + SPAN_NOTICE("You start cutting [src]'s wiring with [tool].") + ) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_ELECTRICAL, do_flags = DO_REPAIR_CONSTRUCT) || state != WINDOOR_STATE_WIRED || electronics) + return + var/obj/item/stack/cable_coil/cable = new (loc, 1) + cable.add_fingerprint(user, tool = tool) + state = WINDOOR_STATE_FRAME update_icon() + user.visible_message( + SPAN_NOTICE("[user] cuts [src]'s wiring with [tool]."), + SPAN_NOTICE("You cut [src]'s wiring with [tool].") + ) + +/obj/structure/windoor_assembly/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(state != WINDOOR_STATE_FRAME) + balloon_alert(user, "нужно убрать проводку!") + return + if(anchored) + USE_FEEDBACK_NEED_UNANCHOR(user) + return + if(!tool.tool_start_check(user, 1)) + return + USE_FEEDBACK_DECONSTRUCT_START(user) + if(!tool.use_as_tool(src, user, 4 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || state != WINDOOR_STATE_FRAME || anchored) + return + var/obj/item/stack/material/glass/reinforced/glass = new(loc, 5) + transfer_fingerprints_to(glass) + if(secure) + var/obj/item/stack/material/rods/rods = new(loc, 4) + transfer_fingerprints_to(rods) + user.visible_message( + SPAN_NOTICE("[user] dismantles [src] with [tool]."), + SPAN_NOTICE("You dismantle [src] with [tool].") + ) + qdel(src) + +/obj/structure/windoor_assembly/use_tool(obj/item/tool, mob/user, list/click_params) + // Airlock electronics - Install electronics + if (istype(tool, /obj/item/airlock_electronics)) + if (state != WINDOOR_STATE_WIRED) + USE_FEEDBACK_FAILURE("[src] needs to be wired before you can install [tool].") + return TRUE + if (electronics) + USE_FEEDBACK_FAILURE("[src] already has [electronics] installed.") + return TRUE + if (!user.canUnEquip(tool)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + playsound(src, 'sound/items/Screwdriver.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] starts installing [tool] into [src]."), + SPAN_NOTICE("You start installing [tool] into [src].") + ) + if (!user.do_skilled(4 SECONDS, SKILL_CONSTRUCTION, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + if (state != WINDOOR_STATE_WIRED) + USE_FEEDBACK_FAILURE("[src] needs to be wired before you can install [tool].") + return TRUE + if (electronics) + USE_FEEDBACK_FAILURE("[src] already has [electronics] installed.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + electronics = tool + update_icon() + playsound(src, 'sound/items/Screwdriver.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] installs [tool] into [src]."), + SPAN_NOTICE("You install [tool] into [src].") + ) + return TRUE + + // Cable Coil - Wire assembly + if (istype(tool, /obj/item/stack/cable_coil)) + if (state != WINDOOR_STATE_FRAME) + USE_FEEDBACK_FAILURE("[src] is already wired.") + return TRUE + if (!anchored) + USE_FEEDBACK_FAILURE("[src] must be anchored before you can wire it.") + return TRUE + var/obj/item/stack/cable_coil/cable = tool + if (!cable.can_use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(cable, 1, "to wire [src].") + return TRUE + user.visible_message( + SPAN_NOTICE("[user] starts wiring [src] with [tool]."), + SPAN_NOTICE("You start wiring [src] with [tool].") + ) + if (!user.do_skilled(4 SECONDS, SKILL_ELECTRICAL, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + if (state != WINDOOR_STATE_FRAME) + USE_FEEDBACK_FAILURE("[src] is already wired.") + return TRUE + if (!anchored) + USE_FEEDBACK_FAILURE("[src] must be anchored before you can wire it.") + return TRUE + if (!cable.use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(cable, 1, "to wire [src].") + return TRUE + state = WINDOOR_STATE_WIRED + update_icon() + user.visible_message( + SPAN_NOTICE("[user] wires [src] with [tool]."), + SPAN_NOTICE("You wires [src] with [tool].") + ) + return TRUE + + // Rods - Make assembly secure + if (istype(tool, /obj/item/stack/material/rods)) + if (state != WINDOOR_STATE_FRAME) + USE_FEEDBACK_FAILURE("[src]'s wiring must be removed before you can reinforce it.") + return TRUE + if (secure) + USE_FEEDBACK_FAILURE("[src] already has reinforcements installed.") + return TRUE + var/obj/item/stack/material/rods/rods = tool + if (!rods.can_use(4)) + USE_FEEDBACK_STACK_NOT_ENOUGH(rods, 4, "to reinforce [src].") + return TRUE + user.visible_message( + SPAN_NOTICE("[user] starts reinforcing [src] with some [tool.name]."), + SPAN_NOTICE("You start reinforcing [src] with some [tool.name].") + ) + if (!user.do_skilled(4 SECONDS, SKILL_CONSTRUCTION, src, do_flags = DO_REPAIR_CONSTRUCT) || !user.use_sanity_check(src, tool)) + return TRUE + if (state != WINDOOR_STATE_FRAME) + USE_FEEDBACK_FAILURE("[src]'s wiring must be removed before you can reinforce it.") + return TRUE + if (secure) + USE_FEEDBACK_FAILURE("[src] already has reinforcements installed.") + return TRUE + if (!rods.use(4)) + USE_FEEDBACK_STACK_NOT_ENOUGH(rods, 4, "to reinforce [src].") + return TRUE + secure = "secure_" + SetName("secure [initial(name)]") + update_icon() + user.visible_message( + SPAN_NOTICE("[user] reinforces [src] with some [tool.name]."), + SPAN_NOTICE("You reinforce [src] with some [tool.name].") + ) + return TRUE + + return ..() //Rotates the windoor assembly clockwise @@ -243,12 +286,12 @@ if (src.anchored) to_chat(usr, "It is fastened to the floor; therefore, you can't rotate it!") return 0 - if(src.state != "01") + if(src.state != WINDOOR_STATE_FRAME) update_nearby_tiles(need_rebuild=1) //Compel updates before src.set_dir(turn(src.dir, 270)) - if(src.state != "01") + if(src.state != WINDOOR_STATE_FRAME) update_nearby_tiles(need_rebuild=1) update_icon() diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index d2910c27f1913..4e8a76092eff0 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -1,11 +1,12 @@ /obj/structure/window name = "window" desc = "A window." - icon = 'icons/obj/window.dmi' + icon = 'icons/obj/structures/window.dmi' density = TRUE w_class = ITEM_SIZE_NORMAL damage_hitsound = 'sound/effects/Glasshit.ogg' + attacked_verb = "bangs" layer = SIDE_WINDOW_LAYER anchored = TRUE @@ -16,7 +17,10 @@ var/damaged_reinf = FALSE var/init_material = MATERIAL_GLASS var/init_reinf_material = null - var/construction_state = 2 + var/const/CONSTRUCT_STATE_COMPLETE = 2 + var/const/CONSTRUCT_STATE_ANCHORED = 1 + var/const/CONSTRUCT_STATE_UNANCHORED = 0 + var/construction_state = CONSTRUCT_STATE_COMPLETE var/id var/polarized = 0 var/basestate = "window" @@ -70,6 +74,7 @@ if(is_fulltile()) layer = FULL_WINDOW_LAYER + CLEAR_FLAGS(obj_flags, OBJ_FLAG_ROTATABLE) health_min_damage = material.hardness * 1.25 if (reinf_material) @@ -78,7 +83,7 @@ if (constructed) set_anchored(FALSE) - construction_state = 0 + construction_state = CONSTRUCT_STATE_UNANCHORED base_color = get_color() @@ -97,29 +102,27 @@ /obj/structure/window/examine(mob/user) . = ..(user) - to_chat(user, SPAN_NOTICE("It is fitted with \a [material.display_name] pane.")) + . += SPAN_NOTICE("It is fitted with [material.display_name] pane.") if(reinf_material) - to_chat(user, SPAN_NOTICE("It is reinforced with \a [reinf_material.display_name] lattice.")) + . += SPAN_NOTICE("It is reinforced with [reinf_material.display_name] lattice.") if (reinf_material) switch (construction_state) - if (0) - to_chat(user, SPAN_WARNING("The window is not in the frame.")) - if (1) - to_chat(user, SPAN_WARNING("The window is pried into the frame but not yet fastened.")) - if (2) - to_chat(user, SPAN_NOTICE("The window is fastened to the frame.")) + if (CONSTRUCT_STATE_UNANCHORED) + . += SPAN_WARNING("The window is not in the frame.") + if (CONSTRUCT_STATE_ANCHORED) + . += SPAN_WARNING("The window is pried into the frame but not yet fastened.") + if (CONSTRUCT_STATE_COMPLETE) + . += SPAN_NOTICE("The window is fastened to the frame.") if (anchored) - to_chat(user, SPAN_NOTICE("It is fastened to \the [get_turf(src)].")) + . += SPAN_NOTICE("It is fastened to [get_turf(src)].") else - to_chat(user, SPAN_WARNING("It is not fastened to anything.")) - + . += SPAN_NOTICE("It is not fastened to anything.") if (paint_color) - to_chat(user, SPAN_NOTICE("\The [material] pane is stained with paint.")) - + . += SPAN_NOTICE("[material] pane is stained with paint.") if (polarized) - to_chat(user, SPAN_NOTICE("It appears to be wired.")) + . += SPAN_NOTICE("It appears to be wired.") /obj/structure/window/examine_damage_state(mob/user) var/damage_percentage = get_damage_percentage() @@ -127,13 +130,13 @@ if (0) to_chat(user, SPAN_NOTICE("It looks fully intact.")) if (1 to 24) - to_chat(user, SPAN_WARNING("\The [material] pane has a few cracks.")) + to_chat(user, SPAN_WARNING("[material] pane has a few cracks.")) if (25 to 49) - to_chat(user, SPAN_WARNING("\The [material] pane looks slightly damaged.")) + to_chat(user, SPAN_WARNING("[material] pane looks slightly damaged.")) if (50 to 74) - to_chat(user, SPAN_WARNING("\The [material] pane looks moderately damaged.")) + to_chat(user, SPAN_WARNING("[material] pane looks moderately damaged.")) else - to_chat(user, SPAN_WARNING("\The [material] pane looks severely damaged.")) + to_chat(user, SPAN_WARNING("[material] pane looks severely damaged.")) /obj/structure/window/get_color() if (paint_color) @@ -159,13 +162,13 @@ var/initial_damage_percentage = round((prior_health / get_max_health()) * 100) var/damage_percentage = get_damage_percentage() if (damage_percentage >= 75 && initial_damage_percentage < 75) - visible_message(SPAN_DANGER("\The [src] looks like it's about to shatter!")) + visible_message(SPAN_DANGER("[src] looks like it's about to shatter!")) playsound(loc, "glasscrack", 100, 1) else if (damage_percentage >= 50 && initial_damage_percentage < 50) - visible_message(SPAN_WARNING("\The [src] looks seriously damaged!")) + visible_message(SPAN_WARNING("[src] looks seriously damaged!")) playsound(loc, "glasscrack", 100, 1) else if (damage_percentage >= 25 && initial_damage_percentage < 25) - visible_message(SPAN_WARNING("Cracks begin to appear in \the [src]!")) + visible_message(SPAN_WARNING("Cracks begin to appear in [src]!")) playsound(loc, "glasscrack", 100, 1) /obj/structure/window/proc/get_glass_cost() @@ -180,7 +183,7 @@ /obj/structure/window/proc/shatter(display_message = 1) playsound(src, "shatter", 70, 1) if(display_message) - visible_message(SPAN_WARNING("\The [src] shatters!")) + visible_message(SPAN_WARNING("[src] shatters!")) var/debris_count = round(get_glass_cost() / rand(1, 4)) for(var/i = 1 to debris_count) @@ -214,207 +217,214 @@ return 1 /obj/structure/window/attack_hand(mob/user as mob) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(MUTATION_HULK in user.mutations) - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) - user.visible_message(SPAN_DANGER("[user] smashes through [src]!")) - user.do_attack_animation(src) - shatter() - else if(MUTATION_FERAL in user.mutations) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*2) //Additional cooldown - attack_generic(user, 10, "smashes") - - else if (user.a_intent && user.a_intent == I_HURT) - - if (istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species.can_shred(H)) - attack_generic(H,25) - return + if ((. = ..())) + return - playsound(src.loc, 'sound/effects/glassknock.ogg', 80, 1) - user.do_attack_animation(src) - user.visible_message(SPAN_DANGER("\The [user] bangs against \the [src]!"), - SPAN_DANGER("You bang against \the [src]!"), - "You hear a banging sound.") - else - playsound(src.loc, 'sound/effects/glassknock.ogg', 80, 1) - user.visible_message("[user.name] knocks on the [src.name].", - "You knock on the [src.name].", - "You hear a knocking sound.") - return + playsound(src.loc, 'sound/effects/glassknock.ogg', 80, 1) + user.visible_message("[user.name] knocks on the [src.name].", + "You knock on the [src.name].", + "You hear a knocking sound.") + return TRUE /obj/structure/window/do_simple_ranged_interaction(mob/user) - visible_message(SPAN_NOTICE("Something knocks on \the [src].")) + visible_message(SPAN_NOTICE("Something knocks on [src].")) playsound(loc, 'sound/effects/Glasshit.ogg', 50, 1) return TRUE -/obj/structure/window/attackby(obj/item/W as obj, mob/user as mob) - if(!istype(W)) return//I really wish I did not need this - - if(W.item_flags & ITEM_FLAG_NO_BLUDGEON) return - var/area/A = get_area(src) - if (!A?.can_modify_area()) - to_chat(user, SPAN_NOTICE("There appears to be no way to dismantle \the [src]!")) +/obj/structure/window/can_use_item(obj/item/tool, mob/user, click_params) + . = ..() + if (!.) return - if (user.a_intent == I_HURT) - ..() - return + // Unmodifiable area check + var/area/area = get_area(src) + if (!area?.can_modify_area()) + USE_FEEDBACK_FAILURE("This area does not allow structural modifications.") + return FALSE - if (isScrewdriver(W)) - if(reinf_material && construction_state >= 1) - construction_state = 3 - construction_state - update_nearby_icons() - playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) - to_chat(user, (construction_state == 1 ? SPAN_NOTICE("You have unfastened the window from the frame.") : SPAN_NOTICE("You have fastened the window to the frame."))) - else if(reinf_material && construction_state == 0) - if(!can_install_here(user)) - return - set_anchored(!anchored) - playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) - to_chat(user, (anchored ? SPAN_NOTICE("You have fastened the frame to the floor.") : SPAN_NOTICE("You have unfastened the frame from the floor."))) - else - if(!can_install_here(user)) - return - set_anchored(!anchored) - playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) - to_chat(user, (anchored ? SPAN_NOTICE("You have fastened the window to the floor.") : SPAN_NOTICE("You have unfastened the window."))) +/obj/structure/window/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!reinf_material) + USE_FEEDBACK_FAILURE("[src] doesn't have a reinforced frame to pry out.") return - - if (isCrowbar(W) && reinf_material && construction_state <= 1 && anchored) - construction_state = 1 - construction_state - playsound(loc, 'sound/items/Crowbar.ogg', 75, 1) - to_chat(user, (construction_state ? SPAN_NOTICE("You have pried the window into the frame.") : SPAN_NOTICE("You have pried the window out of the frame."))) + if(construction_state == CONSTRUCT_STATE_COMPLETE) + USE_FEEDBACK_FAILURE("[src] needs to be unfastened from the frame before you can pry it out.") return - - if (isWrench(W) && !anchored && (!construction_state || !reinf_material)) - if(!material.stack_type) - to_chat(user, SPAN_NOTICE("You're not sure how to dismantle \the [src] properly.")) - else - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - user.visible_message( - SPAN_WARNING("[user] dismantles \the [src]."), - SPAN_NOTICE("You dismantle \the [src].") - ) - dismantle() + if(!anchored) + USE_FEEDBACK_FAILURE("[src] isn't anchored and doesn't need to be pried.") return - - if (isCoil(W) && is_fulltile()) - if (polarized) - to_chat(user, SPAN_WARNING("\The [src] is already polarized.")) - return - var/obj/item/stack/cable_coil/C = W - if (C.use(1)) - playsound(src.loc, 'sound/effects/sparks1.ogg', 75, 1) - polarized = TRUE - to_chat(user, SPAN_NOTICE("You wire and polarize \the [src].")) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return + if(construction_state == CONSTRUCT_STATE_ANCHORED) + construction_state = CONSTRUCT_STATE_UNANCHORED + else + construction_state = CONSTRUCT_STATE_ANCHORED + user.visible_message( + SPAN_NOTICE("[user] pries [src] [construction_state ? "into" : "out of"] its frame with [tool]."), + SPAN_NOTICE("You pry [src] [construction_state ? "into" : "out of"] its frame with [tool].") + ) - if (isWirecutter(W)) - if (!polarized) - to_chat(user, SPAN_WARNING("\The [src] is not polarized.")) - return - new /obj/item/stack/cable_coil(get_turf(user), 1) - if (opacity) - toggle() - polarized = FALSE - id = null - playsound(loc, 'sound/items/Wirecutter.ogg', 75, 1) - to_chat(user, SPAN_NOTICE("You cut the wiring and remove the polarization from \the [src].")) - return - - if (isMultitool(W)) - if (!polarized) - to_chat(user, SPAN_WARNING("\The [src] is not polarized.")) - return - if (anchored) - playsound(loc, 'sound/effects/pop.ogg', 75, 1) - to_chat(user, SPAN_NOTICE("You toggle \the [src]'s tinting.")) - toggle() - else - var/response = input(user, "New Window ID:", name, id) as null | text - if (isnull(response) || user.incapacitated() || !user.Adjacent(src) || user.get_active_hand() != W) - return - id = sanitizeSafe(response, MAX_NAME_LEN) - to_chat(user, SPAN_NOTICE("The new ID of \the [src] is [id].")) +/obj/structure/window/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!polarized) + USE_FEEDBACK_FAILURE("[src] is not wired and cannot be toggled.") return - - if (istype(W, /obj/item/gun/energy/plasmacutter)) - var/obj/item/gun/energy/plasmacutter/cutter = W - if(!cutter.slice(user)) - return - playsound(src, 'sound/items/Welder.ogg', 80, 1) + // Toggle Tinting + if(anchored) + toggle() + playsound(src, 'sound/effects/pop.ogg', 50, TRUE) user.visible_message( - SPAN_WARNING("[user] has started slicing \the [src] apart!"), - SPAN_NOTICE("You start slicing \the [src] apart.") + SPAN_NOTICE("[user] toggles [src]'s tinting with [tool]."), + SPAN_NOTICE("You toggle [src]'s tinting with [tool].") ) - if(do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) - user.visible_message( - SPAN_WARNING("[user] slices \the [src] into sheets!"), - SPAN_NOTICE("You slice \the [src] into sheets.") - ) - playsound(src, 'sound/items/Welder.ogg', 80, 1) - dismantle() return + // Set ID + var/input = input(user, "What ID would you like to set this window to?", "[src] - Polarization ID", id) as null|text + input = sanitizeSafe(input, MAX_NAME_LEN) + if (!input || input == id || !user.use_sanity_check(src, tool)) + return + id = input + user.visible_message( + SPAN_NOTICE("[user] configures [src] with [tool]."), + SPAN_NOTICE("You set [src]'s polarization ID to '[id]' with [tool].") + ) - if (istype(W, /obj/item/stack/material)) - if (!health_damaged()) - to_chat(user, SPAN_NOTICE("\The [src] does not need repair.")) - return - - if ((repair_pending + get_current_health()) >= get_max_health()) - to_chat(user, SPAN_NOTICE("\The [src] already has enough new [material] applied.")) - return - - var/obj/item/stack/material/G = W - if (material != G.material || reinf_material != G.reinf_material) - to_chat(user, SPAN_WARNING("\The [src] must be repaired with the same type of [get_material_display_name()] it was made of.")) - return - - if (!G.use(1)) - to_chat(user, SPAN_WARNING("You need more [G] to repair \the [src].")) - return - - repair_pending += get_repaired_per_unit() +/obj/structure/window/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + // Reinforced Window + if(reinf_material) + switch(construction_state) + if(CONSTRUCT_STATE_UNANCHORED) + if(!can_install_here(user)) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + set_anchored(!anchored) + user.visible_message( + SPAN_NOTICE("[user] [!anchored ? "un" : null]fastens [src] [!anchored ? "from" : "to"] the floor with [tool]."), + SPAN_NOTICE("You [!anchored ? "un" : null]fasten [src] [!anchored ? "from" : "to"] the floor with [tool].") + ) + return + if(CONSTRUCT_STATE_ANCHORED) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + construction_state = CONSTRUCT_STATE_COMPLETE + if(CONSTRUCT_STATE_COMPLETE) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + construction_state = CONSTRUCT_STATE_ANCHORED + update_nearby_icons() user.visible_message( - SPAN_NOTICE("\The [user] replaces some of \the [src]'s damaged [material]."), - SPAN_NOTICE("You replace some of \the [src]'s damaged [material].") + SPAN_NOTICE("[user] [construction_state == CONSTRUCT_STATE_ANCHORED ? "un" : null]fastens [src] [construction_state == CONSTRUCT_STATE_ANCHORED ? "from" : "to"] its frame with [tool]."), + SPAN_NOTICE("You [construction_state == CONSTRUCT_STATE_ANCHORED ? "un" : null]fasten [src] [construction_state == CONSTRUCT_STATE_ANCHORED ? "from" : "to"] its frame with [tool].") ) - if (repair_pending < get_damage_value()) - to_chat(user, SPAN_WARNING("It looks like it could use more sheets.")) return + // Regular Windows + if(!anchored && !can_install_here(user)) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + if(anchored) + construction_state = CONSTRUCT_STATE_UNANCHORED + else + construction_state = CONSTRUCT_STATE_ANCHORED + set_anchored(!anchored) + user.visible_message( + SPAN_NOTICE("[user] [!anchored ? "un" : null]fastens [src] [!anchored ? "from" : "to"] the floor with [tool]."), + SPAN_NOTICE("You [!anchored ? "un" : null]fasten [src] [!anchored ? "from" : "to"] the floor with [tool].") + ) - if (istype(W, /obj/item/weldingtool)) - if (!health_damaged()) - to_chat(user, SPAN_NOTICE("\The [src] does not need repair.")) - return - - if (!repair_pending) - to_chat(user, SPAN_WARNING("\The [src] needs some [get_material_display_name()] applied before you can weld it.")) - return - - var/obj/item/weldingtool/T = W - if (!T.welding) - to_chat(user, SPAN_WARNING("\The [T] needs to be turned on first.")) - return +/obj/structure/window/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(anchored || construction_state) + USE_FEEDBACK_FAILURE("[src] must be detached from the floor[reinf_material ? " and its frame" : null] before you can dismantle it.") + return + if(polarized) + USE_FEEDBACK_FAILURE("[src]'s wiring must be removed before you can dismantle it.") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message( + SPAN_NOTICE("[user] dismantles [src] with [tool]."), + SPAN_NOTICE("You dismantle [src] with [tool].") + ) + dismantle() - if (!T.remove_fuel(1, user)) - return +/obj/structure/window/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!polarized) + USE_FEEDBACK_FAILURE("[src] has no wiring to remove.") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + if(opacity) + toggle() + new /obj/item/stack/cable_coil(user.loc, 1) + polarized = FALSE + id = null + user.visible_message( + SPAN_NOTICE("[user] cuts [src]'s wiring with [tool]."), + SPAN_NOTICE("You cut [src]'s wiring with [tool].") + ) - restore_health(repair_pending) - repair_pending = 0 +/obj/structure/window/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!health_damaged()) + USE_FEEDBACK_NOTHING_TO_REPAIR(user) + return + if(!repair_pending) + balloon_alert(user, "нужно установить [get_material_display_name()]!") + return + if(!tool.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + USE_FEEDBACK_REPAIR_FINISH(user) + restore_health(repair_pending) + repair_pending = 0 + +/obj/structure/window/use_tool(obj/item/tool, mob/user, list/click_params) + // Cable Coil - Polarize window + if(isCoil(tool)) + if(polarized) + USE_FEEDBACK_FAILURE("[src] is already polarized.") + return TRUE + var/obj/item/stack/cable_coil/cable = tool + if(!cable.use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(cable, 1, "to wire and polarize [src].") + return TRUE + playsound(src, 'sound/effects/sparks1.ogg', 50, TRUE) + polarized = TRUE user.visible_message( - SPAN_NOTICE("\The [user] welds \the [src]'s [material] into place."), - SPAN_NOTICE("You weld \the [src]'s [material] into place.") + SPAN_NOTICE("[user] wires and polarizes [src] with [tool]."), + SPAN_NOTICE("You wire and polarize [src] with [tool].") ) - return + return TRUE - if (istype(W, /obj/item/rcd) || istype(W, /obj/item/device/paint_sprayer)) - return + // Material Stack - Repair window + if(istype(tool, /obj/item/stack/material)) + if(!health_damaged()) + USE_FEEDBACK_FAILURE("[src] doesn't need repairs.") + return TRUE + if((repair_pending + get_current_health()) >= get_max_health()) + USE_FEEDBACK_FAILURE("[src] already has enough new [material] applied.") + return TRUE + var/obj/item/stack/material/stack = tool + if(material != stack.material || reinf_material != stack.reinf_material) + USE_FEEDBACK_FAILURE("[src] must be repaired with the same type of [get_material_display_name()] it was made of.") + return TRUE + if(!stack.use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(stack, 1, "to repair [src].") + return TRUE + repair_pending += get_repaired_per_unit() + user.visible_message( + SPAN_NOTICE("[user] replaces some of [src]'s damaged [material] with [tool]."), + SPAN_NOTICE("You replace some of [src]'s damaged [material] with [tool].") + ) + if(repair_pending < get_damage_value()) + user.show_message(SPAN_WARNING("It looks like it could use more sheets"), VISIBLE_MESSAGE) + return TRUE - ..() + return ..() /obj/structure/window/proc/dismantle() @@ -429,13 +439,13 @@ // Harm intent - Bash against the window if (grab.assailant.a_intent == I_HURT) if (!grab.force_danger()) - to_chat(grab.assailant, SPAN_WARNING("You need a better grip to smash \the [grab.affecting] against \the [src].")) + USE_FEEDBACK_GRAB_MUST_UPGRADE("to smash them against [src]") return TRUE var/def_zone = ran_zone(BP_HEAD, 20) if (grab.damage_stage() < 2) grab.assailant.visible_message( - SPAN_DANGER("\The [grab.assailant] bashes \the [grab.affecting] against \the [src]!"), - SPAN_DANGER("You bash \the [grab.affecting] against \the [src]!") + SPAN_DANGER("[grab.assailant] bashes [grab.affecting] against [src]!"), + SPAN_DANGER("You bash [grab.affecting] against [src]!") ) if (prob(50)) grab.affecting.Weaken(1) @@ -443,48 +453,49 @@ hit(25, grab.assailant, grab.affecting) else grab.assailant.visible_message( - SPAN_DANGER("\The [grab.assailant] crushes \the [grab.affecting] against \the [src]!"), - SPAN_DANGER("You crush \the [grab.affecting] against \the [src]!") + SPAN_DANGER("[grab.assailant] crushes [grab.affecting] against [src]!"), + SPAN_DANGER("You crush [grab.affecting] against [src]!") ) grab.affecting.Weaken(5) grab.affecting.apply_damage(20, DAMAGE_BRUTE, def_zone, used_weapon = src) hit(50, grab.assailant, grab.affecting) + return TRUE return ..() /obj/structure/window/proc/hit(damage, mob/user, atom/weapon = null, damage_type = DAMAGE_BRUTE) if (can_damage_health(damage, damage_type)) - var/weapon_text = weapon ? " with \the [weapon]" : null + var/weapon_text = weapon ? " with [weapon]" : null user.visible_message( - SPAN_DANGER("\The [user] attacks \the [src][weapon_text]!"), - SPAN_WARNING("You attack \the [src][weapon_text]!"), + SPAN_DANGER("[user] attacks [src][weapon_text]!"), + SPAN_WARNING("You attack [src][weapon_text]!"), SPAN_WARNING("You hear the sound of something hitting a window.") ) playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) damage_health(damage, damage_type, skip_can_damage_check = TRUE) deanchor(user) else - var/weapon_text = weapon ? " with \the [weapon]" : null + var/weapon_text = weapon ? " with [weapon]" : null playsound(loc, 'sound/effects/Glasshit.ogg', 50, 1) user.visible_message( - SPAN_WARNING("\The [user] attacks \the [src][weapon_text], but it bounces off!"), - SPAN_WARNING("You attack \the [src][weapon_text], but it bounces off! You need something stronger."), + SPAN_WARNING("[user] attacks [src][weapon_text], but it bounces off!"), + SPAN_WARNING("You attack [src][weapon_text], but it bounces off! You need something stronger."), SPAN_WARNING("You hear the sound of something hitting a window.") ) /obj/structure/window/proc/deanchor(atom/impact_origin) - if (!health_dead && get_damage_percentage() >= 85) + if (!health_dead() && get_damage_percentage() >= 85) set_anchored(FALSE) step(src, get_dir(impact_origin, src)) /obj/structure/window/rotate(mob/user) if(!CanPhysicallyInteract(user)) - to_chat(user, SPAN_NOTICE("You can't interact with \the [src] right now!")) + to_chat(user, SPAN_NOTICE("You can't interact with [src] right now!")) return if (anchored) - to_chat(user, SPAN_NOTICE("\The [src] is secured to the floor!")) + to_chat(user, SPAN_NOTICE("[src] is secured to the floor!")) return var/newdir=turn(dir, 90) @@ -539,7 +550,7 @@ basestate = reinf_basestate else basestate = initial(basestate) - overlays.Cut() + ClearOverlays() layer = FULL_WINDOW_LAYER if (paint_color) color = paint_color @@ -577,7 +588,7 @@ /obj/structure/window/proc/process_icon(basestate, icon_group, damage_group, connections, img_dir, damage_alpha) var/image/I = image(icon, "[basestate][icon_group][connections]", dir = img_dir) I.color = get_color() - overlays += I + AddOverlays(I) if (damage_group == "_onframe") process_overlay_damage("window0_damage", damage_alpha, img_dir) @@ -589,7 +600,7 @@ D = image(icon, damage_state, dir = img_dir) D.blend_mode = BLEND_MULTIPLY D.alpha = damage_alpha - overlays += D + AddOverlays(D) /obj/structure/window/get_material_melting_point() . = ..() @@ -607,23 +618,23 @@ /obj/structure/window/basic/full/polarized polarized = 1 -/obj/structure/window/phoronbasic +/obj/structure/window/boron_basic name = "phoron window" - color = GLASS_COLOR_PHORON - init_material = MATERIAL_PHORON_GLASS + color = GLASS_COLOR_BORON + init_material = MATERIAL_BORON_GLASS -/obj/structure/window/phoronbasic/full +/obj/structure/window/boron_basic/full dir = 5 icon_state = "window_full" -/obj/structure/window/phoronreinforced +/obj/structure/window/boron_reinforced name = "reinforced borosilicate window" icon_state = "rwindow" - color = GLASS_COLOR_PHORON - init_material = MATERIAL_PHORON_GLASS + color = GLASS_COLOR_BORON + init_material = MATERIAL_BORON_GLASS init_reinf_material = MATERIAL_STEEL -/obj/structure/window/phoronreinforced/full +/obj/structure/window/boron_reinforced/full dir = 5 icon_state = "window_full" @@ -649,7 +660,7 @@ /obj/structure/window/shuttle name = "shuttle window" desc = "It looks rather strong. Might take a few good hits to shatter it." - icon = 'icons/obj/podwindows.dmi' + icon = 'icons/obj/structures/podwindows.dmi' basestate = "w" reinf_basestate = "w" dir = 5 @@ -684,13 +695,13 @@ for(var/obj/O in loc) if((O != src) && O.density && !(O.atom_flags & ATOM_FLAG_CHECKS_BORDER) \ && !(istype(O, /obj/structure/wall_frame) || istype(O, /obj/structure/grille))) - to_chat(user, SPAN_NOTICE("There isn't enough space to install \the [src].")) + balloon_alert(user, "недостаточно места!") return FALSE return TRUE /obj/machinery/button/windowtint name = "window tint control" - icon = 'icons/obj/power.dmi' + icon = 'icons/obj/structures/buttons.dmi' icon_state = "light0" desc = "A remote control switch for electrochromic windows." var/id @@ -700,23 +711,28 @@ /obj/item/stock_parts/power/apc ) -/obj/machinery/button/windowtint/attackby(obj/item/device/W as obj, mob/user as mob) - if(isMultitool(W)) - var/t = sanitizeSafe(input(user, "Enter the ID for the button.", src.name, id), MAX_NAME_LEN) - if(user.incapacitated() && !user.Adjacent(src)) - return - if (user.get_active_hand() != W) - return - if (!in_range(src, user) && src.loc != user) - return - t = sanitizeSafe(t, MAX_NAME_LEN) - if (t) - src.id = t - to_chat(user, SPAN_NOTICE("The new ID of the button is [id]")) +/obj/machinery/button/windowtint/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + var/t = sanitizeSafe(input(user, "Enter the ID for the button.", name, id), MAX_NAME_LEN) + if(user.incapacitated() && !user.Adjacent(src)) return - if(istype(W, /obj/item/screwdriver)) - new /obj/item/frame/light_switch/windowtint(user.loc, 1) - qdel(src) + if(user.get_active_hand() != tool) + to_chat(SPAN_WARNING("[tool] needs to be in your active hand.")) + return + if(!in_range(src, user) && src.loc != user) + return + t = sanitizeSafe(t, MAX_NAME_LEN) + if(t) + src.id = t + to_chat(user, SPAN_NOTICE("The new ID of the button is [id]")) + +/obj/machinery/button/windowtint/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + var/obj/item/frame/light_switch/windowtint/frame = new /obj/item/frame/light_switch/windowtint(user.loc, 1) + transfer_fingerprints_to(frame) + qdel(src) /obj/machinery/button/windowtint/activate() if(operating) @@ -734,11 +750,11 @@ /obj/machinery/button/windowtint/on_update_icon() icon_state = "light[active]" -//Centcomm windows -/obj/structure/window/reinforced/crescent/attack_hand() - return +//Centcom windows +/obj/structure/window/reinforced/crescent + atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CHECKS_BORDER | ATOM_FLAG_NO_TOOLS -/obj/structure/window/reinforced/crescent/attackby() +/obj/structure/window/reinforced/crescent/attack_hand() return /obj/structure/window/reinforced/crescent/ex_act() diff --git a/code/game/objects/structures/window_spawner.dm b/code/game/objects/structures/window_spawner.dm index f53c7ad5e71e2..c5df87020631c 100644 --- a/code/game/objects/structures/window_spawner.dm +++ b/code/game/objects/structures/window_spawner.dm @@ -3,9 +3,9 @@ /*-=-=-=-=-=-=-=-=-=-=-=-=-=WHAT-EVER=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* '~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~' */ -/obj/effect/wingrille_spawn +/obj/wingrille_spawn name = "window grille spawner" - icon = 'icons/obj/structures.dmi' + icon = 'icons/obj/structures/structures.dmi' icon_state = "wingrille" density = TRUE anchored = TRUE @@ -14,19 +14,19 @@ var/fulltile = FALSE // stops ZAS expanding zones past us, the windows will block the zone anyway -/obj/effect/wingrille_spawn/CanPass() +/obj/wingrille_spawn/CanPass() return 0 -/obj/effect/wingrille_spawn/attack_hand() +/obj/wingrille_spawn/attack_hand() attack_generic() -/obj/effect/wingrille_spawn/attack_ghost() +/obj/wingrille_spawn/attack_ghost() attack_generic() -/obj/effect/wingrille_spawn/attack_generic() +/obj/wingrille_spawn/attack_generic() activate() -/obj/effect/wingrille_spawn/Initialize(mapload) +/obj/wingrille_spawn/Initialize(mapload) . = ..() if(!win_path) return @@ -41,7 +41,7 @@ activate() return INITIALIZE_HINT_QDEL -/obj/effect/wingrille_spawn/proc/activate() +/obj/wingrille_spawn/proc/activate() if(activated) return if(locate(/obj/structure/window) in loc) @@ -54,7 +54,7 @@ else for (var/dir in GLOB.cardinal) var/turf/T = get_step(src, dir) - var/obj/effect/wingrille_spawn/other = locate(type) in T + var/obj/wingrille_spawn/other = locate(type) in T if(!other) var/found_connection if(locate(/obj/structure/grille) in T) @@ -76,57 +76,57 @@ handle_grille_spawn(G) activated = 1 - for(var/obj/effect/wingrille_spawn/other in neighbours) + for(var/obj/wingrille_spawn/other in neighbours) if(!other.activated) other.activate() -/obj/effect/wingrille_spawn/proc/handle_window_spawn(obj/structure/window/W) +/obj/wingrille_spawn/proc/handle_window_spawn(obj/structure/window/W) return // Currently unused, could be useful for pre-wired electrified windows. -/obj/effect/wingrille_spawn/proc/handle_grille_spawn(obj/structure/grille/G) +/obj/wingrille_spawn/proc/handle_grille_spawn(obj/structure/grille/G) return -/obj/effect/wingrille_spawn/reinforced +/obj/wingrille_spawn/reinforced name = "reinforced window grille spawner" icon_state = "r-wingrille" win_path = /obj/structure/window/reinforced -/obj/effect/wingrille_spawn/reinforced/full +/obj/wingrille_spawn/reinforced/full name = "reinforced window grille spawner - full tile" icon_state = "rf-wingrille" fulltile = TRUE win_path = /obj/structure/window/reinforced/full -/obj/effect/wingrille_spawn/reinforced/crescent +/obj/wingrille_spawn/reinforced/crescent name = "Crescent window grille spawner" win_path = /obj/structure/window/reinforced/crescent -/obj/effect/wingrille_spawn/phoron +/obj/wingrille_spawn/phoron name = "phoron window grille spawner" icon_state = "p-wingrille" - win_path = /obj/structure/window/phoronbasic + win_path = /obj/structure/window/boron_basic -/obj/effect/wingrille_spawn/reinforced_phoron +/obj/wingrille_spawn/reinforced_phoron name = "reinforced phoron window grille spawner" icon_state = "pr-wingrille" - win_path = /obj/structure/window/phoronreinforced + win_path = /obj/structure/window/boron_reinforced -/obj/effect/wingrille_spawn/reinforced_phoron/full +/obj/wingrille_spawn/reinforced_phoron/full name = "reinforced phoron window grille spawner - full tile" fulltile = TRUE - win_path = /obj/structure/window/phoronreinforced/full + win_path = /obj/structure/window/boron_reinforced/full -/obj/effect/wingrille_spawn/reinforced/polarized +/obj/wingrille_spawn/reinforced/polarized name = "polarized window grille spawner" color = "#444444" win_path = /obj/structure/window/reinforced/polarized var/id -/obj/effect/wingrille_spawn/reinforced/polarized/full +/obj/wingrille_spawn/reinforced/polarized/full name = "polarized window grille spawner - full tile" fulltile = TRUE win_path = /obj/structure/window/reinforced/polarized/full -/obj/effect/wingrille_spawn/reinforced/polarized/handle_window_spawn(obj/structure/window/reinforced/polarized/P) +/obj/wingrille_spawn/reinforced/polarized/handle_window_spawn(obj/structure/window/reinforced/polarized/P) if(id) P.id = id diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 3d22c40d476bc..0443cfb526307 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -46,10 +46,10 @@ var/global/can_call_ert log_admin("[key_name(usr)] used Dispatch Response Team.") trigger_armed_response_team(1, reason) -/client/verb/JoinResponseTeam() +/mob/observer/ghost/verb/JoinResponseTeam() set name = "Join Response Team" - set category = "IC" + set category = "Ghost" if(!MayRespawn(1)) to_chat(usr, SPAN_WARNING("You cannot join the response team at this time.")) diff --git a/code/game/sound.dm b/code/game/sound.dm index c5704ef97f01a..a09f2deef7edd 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -1,4 +1,5 @@ //Sound environment defines. Reverb preset for sounds played in an area, see sound datum reference for more. +#define NO_CHANGE -1 #define GENERIC 0 #define PADDED_CELL 1 #define ROOM 2 @@ -56,7 +57,8 @@ GLOBAL_LIST_INIT(glasscrack_sound,list('sound/effects/glass_crack1.ogg','sound/e GLOBAL_LIST_INIT(tray_hit_sound,list('sound/items/trayhit1.ogg', 'sound/items/trayhit2.ogg')) /proc/playsound(atom/source, soundin, vol as num, vary, extrarange as num, falloff, is_global, frequency, is_ambiance = 0) - + if (isnull(soundin)) + return soundin = get_sfx(soundin) // same sound for everyone if(isarea(source)) @@ -65,7 +67,7 @@ GLOBAL_LIST_INIT(tray_hit_sound,list('sound/items/trayhit1.ogg', 'sound/items/tr frequency = vary && isnull(frequency) ? get_rand_frequency() : frequency // Same frequency for everybody var/turf/turf_source = get_turf(source) - // Looping through the player list has the added bonus of working for mobs inside containers + // Looping through the player list has the added bonus of working for mobs inside containers for (var/mob/M in GLOB.player_list) if(!M || !M.client) continue @@ -77,13 +79,15 @@ GLOBAL_LIST_INIT(tray_hit_sound,list('sound/items/trayhit1.ogg', 'sound/items/tr var/global/const/FALLOFF_SOUNDS = 0.5 /mob/proc/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff, is_global, extrarange) + if (isnull(soundin)) + return if(!src.client || ear_deaf > 0) return var/sound/S = soundin if(!istype(S)) soundin = get_sfx(soundin) S = sound(soundin) - S.wait = 0 //No queue S.channel = 0 //Any channel + S.wait = FALSE S.volume = vol S.environment = -1 if(frequency) @@ -96,15 +100,19 @@ var/global/const/FALLOFF_SOUNDS = 0.5 S.volume *= get_sound_volume_multiplier() - var/turf/T = get_turf(src) + var/turf/mob_turf = get_turf(src) + if(!mob_turf) + stack_trace("Mob is in null space, it seems") + return + // 3D sounds, the technology is here! if(isturf(turf_source)) //sound volume falloff with distance - var/distance = get_dist(T, turf_source) + var/distance = get_dist(mob_turf, turf_source) S.volume -= max(distance - (world.view + extrarange), 0) * 2 //multiplicative falloff to add on top of natural audio falloff. - var/datum/gas_mixture/hearer_env = T.return_air() + var/datum/gas_mixture/hearer_env = mob_turf.return_air() var/datum/gas_mixture/source_env = turf_source.return_air() if (hearer_env && source_env) @@ -123,9 +131,9 @@ var/global/const/FALLOFF_SOUNDS = 0.5 if (S.volume <= 0) return //no volume means no sound - var/dx = turf_source.x - T.x // Hearing from the right/left + var/dx = turf_source.x - mob_turf.x // Hearing from the right/left S.x = dx - var/dz = turf_source.y - T.y // Hearing from infront/behind + var/dz = turf_source.y - mob_turf.y // Hearing from infront/behind S.z = dz // The y value is for above your head, but there is no ceiling in 2d spessmens. S.y = 1 @@ -141,11 +149,11 @@ var/global/const/FALLOFF_SOUNDS = 0.5 S.environment = DRUGGED else if (M.drowsyness) S.environment = DIZZY - else if (M.confused) + else if (M.is_confused()) S.environment = DIZZY else if (M.stat == UNCONSCIOUS) S.environment = UNDERWATER - else if (T?.is_flooded(M.lying)) + else if (mob_turf?.is_flooded(M.lying)) S.environment = UNDERWATER else if (pressure_factor < 0.5) S.environment = SPACE diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index e77839c3d2d68..5b5008c73d8d7 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -66,6 +66,9 @@ wall_smooth = SMOOTH_ALL space_smooth = SMOOTH_NONE +/singleton/flooring/grass/cut + floor_smooth = SMOOTH_ALL + /singleton/flooring/dirt name = "dirt" desc = "Extra dirty." @@ -138,6 +141,11 @@ icon_base = "red" build_type = /obj/item/stack/tile/carpetred +/singleton/flooring/carpet/black + name = "black carpet" + icon_base = "black" + build_type = /obj/item/stack/tile/carpetblack + /singleton/flooring/linoleum name = "linoleum" desc = "It's like the 2090's all over again." @@ -307,8 +315,11 @@ /singleton/flooring/reinforced/circuit/red icon_base = "rcircuit" + +/singleton/flooring/reinforced/circuit/selfdestruct + icon_base = "rcircuit_off" flags = TURF_ACID_IMMUNE - can_paint = 0 + can_paint = FALSE /singleton/flooring/reinforced/cult name = "engraved floor" @@ -402,3 +413,16 @@ wall_smooth = SMOOTH_NONE space_smooth = SMOOTH_NONE height = -FLUID_OVER_MOB_HEAD * 2 + + +/singleton/flooring/bluespace + name = "bluespace" + desc = "Infinite bluespace. It gives you a piercing headache if you stare at it for too long." + icon = 'icons/turf/space.dmi' + icon_base = "bluespace" + flags = TURF_ACID_IMMUNE + build_type = null + footstep_type = /singleton/footsteps/tiles + floor_smooth = SMOOTH_NONE + wall_smooth = SMOOTH_NONE + space_smooth = SMOOTH_NONE diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index 0360e314ce8d1..cd1cff566ae24 100644 --- a/code/game/turfs/flooring/flooring_decals.dm +++ b/code/game/turfs/flooring/flooring_decals.dm @@ -3,1346 +3,1356 @@ // when mapping in interesting floor designs. var/global/list/floor_decals = list() -/obj/effect/floor_decal +/obj/floor_decal name = "floor decal" icon = 'icons/turf/flooring/decals.dmi' layer = DECAL_LAYER appearance_flags = DEFAULT_APPEARANCE_FLAGS | RESET_COLOR - var/supplied_dir var/detail_overlay var/detail_color -/obj/effect/floor_decal/New(newloc, newdir, newcolour, newappearance) - supplied_dir = newdir - if(newappearance) appearance = newappearance - if(newcolour) color = newcolour - ..(newloc) - -/obj/effect/floor_decal/Initialize() +/obj/floor_decal/Initialize(mapload, newdir, newcolour, newappearance) SHOULD_CALL_PARENT(FALSE) - if(supplied_dir) set_dir(supplied_dir) - var/turf/T = get_turf(src) - if(istype(T, /turf/simulated/floor) || istype(T, /turf/unsimulated/floor)) - layer = T.is_plating() ? DECAL_PLATING_LAYER : DECAL_LAYER - var/cache_key = "[alpha]-[color]-[dir]-[icon_state]-[plane]-[layer]-[detail_overlay]-[detail_color]" - if(!floor_decals[cache_key]) - var/image/I = image(icon = src.icon, icon_state = src.icon_state, dir = src.dir) - I.layer = layer - I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | appearance_flags - I.color = src.color - I.alpha = src.alpha - if(detail_overlay) - var/image/B = overlay_image(icon, "[detail_overlay]", flags=RESET_COLOR) - B.color = detail_color - I.overlays |= B - floor_decals[cache_key] = I - if(!T.decals) T.decals = list() - T.decals |= floor_decals[cache_key] - T.overlays |= floor_decals[cache_key] - atom_flags |= ATOM_FLAG_INITIALIZED - return INITIALIZE_HINT_QDEL - -/obj/effect/floor_decal/reset + . = ..() + return INITIALIZE_HINT_LATELOAD + +/obj/floor_decal/LateInitialize(mapload, newdir, newcolour, newappearance) + . = ..() + + if(newappearance) + appearance = newappearance + + if(newcolour) + color = newcolour + + if(newdir) + set_dir(newdir) + + modify_turf_appearance() + qdel(src) + +/obj/floor_decal/proc/modify_turf_appearance() + var/turf/turf_to_modify = get_turf(src) + if(!turf_to_modify?.decals_available) + return + + layer = turf_to_modify.is_plating() ? DECAL_PLATING_LAYER : DECAL_LAYER + var/cache_key = "[alpha]-[color]-[dir]-[icon_state]-[plane]-[layer]-[detail_overlay]-[detail_color]" + if(!floor_decals[cache_key]) + var/image/I = image(icon = src.icon, icon_state = src.icon_state, dir = src.dir) + I.layer = layer + I.appearance_flags = DEFAULT_APPEARANCE_FLAGS | appearance_flags + I.color = src.color + I.alpha = src.alpha + if(detail_overlay) + var/image/B = overlay_image(icon, "[detail_overlay]", flags=RESET_COLOR) + B.color = detail_color + I.AddOverlays(B) + floor_decals[cache_key] = I + + LAZYADD(turf_to_modify.decals, floor_decals[cache_key]) + turf_to_modify.queue_icon_update() + +/obj/floor_decal/reset name = "reset marker" -/obj/effect/floor_decal/reset/Initialize() +/obj/floor_decal/reset/Initialize(mapload, ...) SHOULD_CALL_PARENT(FALSE) var/turf/T = get_turf(src) T.remove_decals() T.update_icon() - atom_flags |= ATOM_FLAG_INITIALIZED return INITIALIZE_HINT_QDEL -/obj/effect/floor_decal/carpet +/obj/floor_decal/carpet name = "brown carpet" icon = 'icons/turf/flooring/carpet.dmi' icon_state = "brown_edges" -/obj/effect/floor_decal/carpet/blue +/obj/floor_decal/carpet/blue name = "blue carpet" icon_state = "blue1_edges" -/obj/effect/floor_decal/carpet/blue2 +/obj/floor_decal/carpet/blue2 name = "pale blue carpet" icon_state = "blue2_edges" -/obj/effect/floor_decal/carpet/purple +/obj/floor_decal/carpet/purple name = "purple carpet" icon_state = "purple_edges" -/obj/effect/floor_decal/carpet/orange +/obj/floor_decal/carpet/orange name = "orange carpet" icon_state = "orange_edges" -/obj/effect/floor_decal/carpet/green +/obj/floor_decal/carpet/green name = "green carpet" icon_state = "green_edges" -/obj/effect/floor_decal/carpet/red +/obj/floor_decal/carpet/red name = "red carpet" icon_state = "red_edges" -/obj/effect/floor_decal/carpet/corners +/obj/floor_decal/carpet/corners name = "brown carpet" icon_state = "brown_corners" -/obj/effect/floor_decal/carpet/blue/corners +/obj/floor_decal/carpet/blue/corners name = "blue carpet" icon_state = "blue1_corners" -/obj/effect/floor_decal/carpet/blue2/corners +/obj/floor_decal/carpet/blue2/corners name = "pale blue carpet" icon_state = "blue2_corners" -/obj/effect/floor_decal/carpet/purple/corners +/obj/floor_decal/carpet/purple/corners name = "purple carpet" icon_state = "purple_corners" -/obj/effect/floor_decal/carpet/orange/corners +/obj/floor_decal/carpet/orange/corners name = "orange carpet" icon_state = "orange_corners" -/obj/effect/floor_decal/carpet/green/corners +/obj/floor_decal/carpet/green/corners name = "green carpet" icon_state = "green_corners" -/obj/effect/floor_decal/carpet/red/corners +/obj/floor_decal/carpet/red/corners name = "red carpet" icon_state = "red_corners" -/obj/effect/floor_decal/corner +/obj/floor_decal/corner icon_state = "corner_white" alpha = 229 -/obj/effect/floor_decal/corner/black +/obj/floor_decal/corner/black name = "black corner" color = "#333333" -/obj/effect/floor_decal/corner/black/diagonal +/obj/floor_decal/corner/black/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/black/three_quarters +/obj/floor_decal/corner/black/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/black/full +/obj/floor_decal/corner/black/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/black/border +/obj/floor_decal/corner/black/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/black/half +/obj/floor_decal/corner/black/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/black/mono +/obj/floor_decal/corner/black/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/black/bordercorner +/obj/floor_decal/corner/black/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/black/bordercorner2 +/obj/floor_decal/corner/black/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/black/borderfull +/obj/floor_decal/corner/black/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/black/bordercee +/obj/floor_decal/corner/black/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/blue +/obj/floor_decal/corner/blue name = "blue corner" color = COLOR_BLUE_GRAY -/obj/effect/floor_decal/corner/blue/diagonal +/obj/floor_decal/corner/blue/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/blue/three_quarters +/obj/floor_decal/corner/blue/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/blue/full +/obj/floor_decal/corner/blue/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/blue/border +/obj/floor_decal/corner/blue/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/blue/half +/obj/floor_decal/corner/blue/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/blue/mono +/obj/floor_decal/corner/blue/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/blue/bordercorner +/obj/floor_decal/corner/blue/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/blue/bordercorner2 +/obj/floor_decal/corner/blue/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/blue/borderfull +/obj/floor_decal/corner/blue/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/blue/bordercee +/obj/floor_decal/corner/blue/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/paleblue +/obj/floor_decal/corner/paleblue name = "pale blue corner" color = COLOR_PALE_BLUE_GRAY -/obj/effect/floor_decal/corner/paleblue/diagonal +/obj/floor_decal/corner/paleblue/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/paleblue/three_quarters +/obj/floor_decal/corner/paleblue/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/paleblue/full +/obj/floor_decal/corner/paleblue/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/paleblue/border +/obj/floor_decal/corner/paleblue/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/paleblue/half +/obj/floor_decal/corner/paleblue/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/paleblue/mono +/obj/floor_decal/corner/paleblue/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/paleblue/bordercorner +/obj/floor_decal/corner/paleblue/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/paleblue/bordercorner2 +/obj/floor_decal/corner/paleblue/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/paleblue/borderfull +/obj/floor_decal/corner/paleblue/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/paleblue/bordercee +/obj/floor_decal/corner/paleblue/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/green +/obj/floor_decal/corner/green name = "green corner" color = COLOR_GREEN_GRAY -/obj/effect/floor_decal/corner/green/diagonal +/obj/floor_decal/corner/green/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/green/three_quarters +/obj/floor_decal/corner/green/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/green/full +/obj/floor_decal/corner/green/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/green/border +/obj/floor_decal/corner/green/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/green/half +/obj/floor_decal/corner/green/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/green/mono +/obj/floor_decal/corner/green/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/green/bordercorner +/obj/floor_decal/corner/green/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/green/bordercorner2 +/obj/floor_decal/corner/green/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/green/borderfull +/obj/floor_decal/corner/green/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/green/bordercee +/obj/floor_decal/corner/green/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/lime +/obj/floor_decal/corner/lime name = "lime corner" color = COLOR_PALE_GREEN_GRAY -/obj/effect/floor_decal/corner/lime/diagonal +/obj/floor_decal/corner/lime/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/lime/three_quarters +/obj/floor_decal/corner/lime/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/lime/full +/obj/floor_decal/corner/lime/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/lime/border +/obj/floor_decal/corner/lime/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/lime/half +/obj/floor_decal/corner/lime/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/lime/mono +/obj/floor_decal/corner/lime/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/lime/bordercorner +/obj/floor_decal/corner/lime/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/lime/bordercorner2 +/obj/floor_decal/corner/lime/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/lime/borderfull +/obj/floor_decal/corner/lime/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/lime/bordercee +/obj/floor_decal/corner/lime/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/yellow +/obj/floor_decal/corner/yellow name = "yellow corner" color = COLOR_BROWN -/obj/effect/floor_decal/corner/yellow/diagonal +/obj/floor_decal/corner/yellow/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/yellow/three_quarters +/obj/floor_decal/corner/yellow/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/yellow/full +/obj/floor_decal/corner/yellow/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/yellow/border +/obj/floor_decal/corner/yellow/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/yellow/half +/obj/floor_decal/corner/yellow/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/yellow/mono +/obj/floor_decal/corner/yellow/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/yellow/bordercorner +/obj/floor_decal/corner/yellow/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/yellow/bordercorner2 +/obj/floor_decal/corner/yellow/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/yellow/borderfull +/obj/floor_decal/corner/yellow/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/yellow/bordercee +/obj/floor_decal/corner/yellow/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/beige +/obj/floor_decal/corner/beige name = "beige corner" color = COLOR_BEIGE -/obj/effect/floor_decal/corner/beige/diagonal +/obj/floor_decal/corner/beige/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/beige/three_quarters +/obj/floor_decal/corner/beige/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/beige/full +/obj/floor_decal/corner/beige/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/beige/half +/obj/floor_decal/corner/beige/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/beige/mono +/obj/floor_decal/corner/beige/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/beige/border +/obj/floor_decal/corner/beige/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/beige/bordercorner +/obj/floor_decal/corner/beige/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/beige/bordercorner2 +/obj/floor_decal/corner/beige/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/beige/borderfull +/obj/floor_decal/corner/beige/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/beige/bordercee +/obj/floor_decal/corner/beige/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/red +/obj/floor_decal/corner/red name = "red corner" color = COLOR_RED_GRAY -/obj/effect/floor_decal/corner/red/diagonal +/obj/floor_decal/corner/red/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/red/three_quarters +/obj/floor_decal/corner/red/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/red/full +/obj/floor_decal/corner/red/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/red/border +/obj/floor_decal/corner/red/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/red/half +/obj/floor_decal/corner/red/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/red/mono +/obj/floor_decal/corner/red/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/red/bordercorner +/obj/floor_decal/corner/red/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/red/bordercorner2 +/obj/floor_decal/corner/red/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/red/borderfull +/obj/floor_decal/corner/red/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/red/bordercee +/obj/floor_decal/corner/red/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/pink +/obj/floor_decal/corner/pink name = "pink corner" color = COLOR_PALE_RED_GRAY -/obj/effect/floor_decal/corner/pink/diagonal +/obj/floor_decal/corner/pink/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/pink/three_quarters +/obj/floor_decal/corner/pink/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/pink/full +/obj/floor_decal/corner/pink/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/pink/border +/obj/floor_decal/corner/pink/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/pink/half +/obj/floor_decal/corner/pink/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/pink/mono +/obj/floor_decal/corner/pink/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/pink/bordercorner +/obj/floor_decal/corner/pink/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/pink/bordercorner2 +/obj/floor_decal/corner/pink/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/pink/borderfull +/obj/floor_decal/corner/pink/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/pink/bordercee +/obj/floor_decal/corner/pink/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/purple +/obj/floor_decal/corner/purple name = "purple corner" color = COLOR_PURPLE_GRAY -/obj/effect/floor_decal/corner/purple/diagonal +/obj/floor_decal/corner/purple/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/purple/three_quarters +/obj/floor_decal/corner/purple/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/purple/full +/obj/floor_decal/corner/purple/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/purple/border +/obj/floor_decal/corner/purple/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/purple/half +/obj/floor_decal/corner/purple/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/purple/mono +/obj/floor_decal/corner/purple/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/purple/bordercorner +/obj/floor_decal/corner/purple/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/purple/bordercorner2 +/obj/floor_decal/corner/purple/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/purple/borderfull +/obj/floor_decal/corner/purple/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/purple/bordercee +/obj/floor_decal/corner/purple/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/mauve +/obj/floor_decal/corner/mauve name = "mauve corner" color = COLOR_PALE_PURPLE_GRAY -/obj/effect/floor_decal/corner/mauve/diagonal +/obj/floor_decal/corner/mauve/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/mauve/three_quarters +/obj/floor_decal/corner/mauve/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/mauve/full +/obj/floor_decal/corner/mauve/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/mauve/border +/obj/floor_decal/corner/mauve/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/mauve/half +/obj/floor_decal/corner/mauve/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/mauve/mono +/obj/floor_decal/corner/mauve/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/mauve/bordercorner +/obj/floor_decal/corner/mauve/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/mauve/bordercorner2 +/obj/floor_decal/corner/mauve/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/mauve/borderfull +/obj/floor_decal/corner/mauve/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/mauve/bordercee +/obj/floor_decal/corner/mauve/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/orange +/obj/floor_decal/corner/orange name = "orange corner" color = COLOR_DARK_ORANGE -/obj/effect/floor_decal/corner/orange/diagonal +/obj/floor_decal/corner/orange/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/orange/three_quarters +/obj/floor_decal/corner/orange/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/orange/full +/obj/floor_decal/corner/orange/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/orange/border +/obj/floor_decal/corner/orange/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/orange/half +/obj/floor_decal/corner/orange/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/orange/mono +/obj/floor_decal/corner/orange/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/orange/bordercorner +/obj/floor_decal/corner/orange/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/orange/bordercorner2 +/obj/floor_decal/corner/orange/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/orange/borderfull +/obj/floor_decal/corner/orange/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/orange/bordercee +/obj/floor_decal/corner/orange/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/brown +/obj/floor_decal/corner/brown name = "brown corner" color = COLOR_DARK_BROWN -/obj/effect/floor_decal/corner/brown/diagonal +/obj/floor_decal/corner/brown/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/brown/three_quarters +/obj/floor_decal/corner/brown/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/brown/full +/obj/floor_decal/corner/brown/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/brown/border +/obj/floor_decal/corner/brown/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/brown/half +/obj/floor_decal/corner/brown/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/brown/mono +/obj/floor_decal/corner/brown/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/brown/bordercorner +/obj/floor_decal/corner/brown/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/brown/bordercorner2 +/obj/floor_decal/corner/brown/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/brown/borderfull +/obj/floor_decal/corner/brown/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/brown/bordercee +/obj/floor_decal/corner/brown/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/white +/obj/floor_decal/corner/white name = "white corner" icon_state = "corner_white" -/obj/effect/floor_decal/corner/white/diagonal +/obj/floor_decal/corner/white/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/white/three_quarters +/obj/floor_decal/corner/white/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/white/full +/obj/floor_decal/corner/white/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/white/half +/obj/floor_decal/corner/white/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/white/mono +/obj/floor_decal/corner/white/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/grey +/obj/floor_decal/corner/grey name = "grey corner" color = "#8d8c8c" -/obj/effect/floor_decal/corner/grey/diagonal +/obj/floor_decal/corner/grey/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/grey/three_quarters +/obj/floor_decal/corner/grey/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/grey/full +/obj/floor_decal/corner/grey/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/white/border +/obj/floor_decal/corner/white/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/grey/half +/obj/floor_decal/corner/grey/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/grey/mono +/obj/floor_decal/corner/grey/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/white/bordercorner +/obj/floor_decal/corner/white/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/white/bordercorner2 +/obj/floor_decal/corner/white/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/white/borderfull +/obj/floor_decal/corner/white/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/white/bordercee +/obj/floor_decal/corner/white/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/grey/diagonal +/obj/floor_decal/corner/grey/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/grey/three_quarters +/obj/floor_decal/corner/grey/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/grey/border +/obj/floor_decal/corner/grey/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/grey/bordercorner +/obj/floor_decal/corner/grey/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/grey/bordercorner +/obj/floor_decal/corner/grey/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/grey/borderfull +/obj/floor_decal/corner/grey/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/grey/bordercee +/obj/floor_decal/corner/grey/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/lightgrey +/obj/floor_decal/corner/lightgrey name = "lightgrey corner" color = "#a8b2b6" -/obj/effect/floor_decal/corner/lightgrey/diagonal +/obj/floor_decal/corner/lightgrey/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/lightgrey/three_quarters +/obj/floor_decal/corner/lightgrey/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/lightgrey/full +/obj/floor_decal/corner/lightgrey/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/lightgrey/border +/obj/floor_decal/corner/lightgrey/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/lightgrey/half +/obj/floor_decal/corner/lightgrey/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/lightgrey/mono +/obj/floor_decal/corner/lightgrey/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/lightgrey/bordercorner +/obj/floor_decal/corner/lightgrey/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/lightgrey/bordercorner2 +/obj/floor_decal/corner/lightgrey/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/lightgrey/borderfull +/obj/floor_decal/corner/lightgrey/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/lightgrey/bordercee +/obj/floor_decal/corner/lightgrey/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/b_green +/obj/floor_decal/corner/b_green name = "bottle green corner" color = COLOR_PALE_BTL_GREEN -/obj/effect/floor_decal/corner/b_green/diagonal +/obj/floor_decal/corner/b_green/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/b_green/three_quarters +/obj/floor_decal/corner/b_green/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/b_green/full +/obj/floor_decal/corner/b_green/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/b_green/border +/obj/floor_decal/corner/b_green/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/b_green/half +/obj/floor_decal/corner/b_green/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/b_green/mono +/obj/floor_decal/corner/b_green/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/b_green/bordercorner +/obj/floor_decal/corner/b_green/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/b_green/bordercorner2 +/obj/floor_decal/corner/b_green/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/b_green/borderfull +/obj/floor_decal/corner/b_green/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/b_green/bordercee +/obj/floor_decal/corner/b_green/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/corner/research +/obj/floor_decal/corner/research name = "research corner" color = COLOR_RESEARCH -/obj/effect/floor_decal/corner/research/diagonal +/obj/floor_decal/corner/research/diagonal icon_state = "corner_white_diagonal" -/obj/effect/floor_decal/corner/research/three_quarters +/obj/floor_decal/corner/research/three_quarters icon_state = "corner_white_three_quarters" -/obj/effect/floor_decal/corner/research/full +/obj/floor_decal/corner/research/full icon_state = "corner_white_full" -/obj/effect/floor_decal/corner/research/border +/obj/floor_decal/corner/research/border icon_state = "bordercolor" -/obj/effect/floor_decal/corner/research/half +/obj/floor_decal/corner/research/half icon_state = "bordercolorhalf" -/obj/effect/floor_decal/corner/research/mono +/obj/floor_decal/corner/research/mono icon_state = "bordercolormonofull" -/obj/effect/floor_decal/corner/research/bordercorner +/obj/floor_decal/corner/research/bordercorner icon_state = "bordercolorcorner" -/obj/effect/floor_decal/corner/research/bordercorner2 +/obj/floor_decal/corner/research/bordercorner2 icon_state = "bordercolorcorner2" -/obj/effect/floor_decal/corner/research/borderfull +/obj/floor_decal/corner/research/borderfull icon_state = "bordercolorfull" -/obj/effect/floor_decal/corner/research/bordercee +/obj/floor_decal/corner/research/bordercee icon_state = "bordercolorcee" -/obj/effect/floor_decal/spline/plain +/obj/floor_decal/spline/plain name = "spline - plain" icon_state = "spline_plain" alpha = 229 -/obj/effect/floor_decal/spline/plain/black +/obj/floor_decal/spline/plain/black color = "#333333" -/obj/effect/floor_decal/spline/plain/blue +/obj/floor_decal/spline/plain/blue color = COLOR_BLUE_GRAY -/obj/effect/floor_decal/spline/plain/paleblue +/obj/floor_decal/spline/plain/paleblue color = COLOR_PALE_BLUE_GRAY -/obj/effect/floor_decal/spline/plain/green +/obj/floor_decal/spline/plain/green color = COLOR_GREEN_GRAY -/obj/effect/floor_decal/spline/plain/lime +/obj/floor_decal/spline/plain/lime color = COLOR_PALE_GREEN_GRAY -/obj/effect/floor_decal/spline/plain/yellow +/obj/floor_decal/spline/plain/yellow color = COLOR_BROWN -/obj/effect/floor_decal/spline/plain/beige +/obj/floor_decal/spline/plain/beige color = COLOR_BEIGE -/obj/effect/floor_decal/spline/plain/red +/obj/floor_decal/spline/plain/red color = COLOR_RED_GRAY -/obj/effect/floor_decal/spline/plain/pink +/obj/floor_decal/spline/plain/pink color = COLOR_PALE_RED_GRAY -/obj/effect/floor_decal/spline/plain/purple +/obj/floor_decal/spline/plain/purple color = COLOR_PURPLE_GRAY -/obj/effect/floor_decal/spline/plain/mauve +/obj/floor_decal/spline/plain/mauve color = COLOR_PALE_PURPLE_GRAY -/obj/effect/floor_decal/spline/plain/orange +/obj/floor_decal/spline/plain/orange color = COLOR_DARK_ORANGE -/obj/effect/floor_decal/spline/plain/brown +/obj/floor_decal/spline/plain/brown color = COLOR_DARK_BROWN -/obj/effect/floor_decal/spline/plain/white +/obj/floor_decal/spline/plain/white color = COLOR_WHITE -/obj/effect/floor_decal/spline/plain/grey +/obj/floor_decal/spline/plain/grey color = "#8d8c8c" -/obj/effect/floor_decal/spline/fancy +/obj/floor_decal/spline/fancy name = "spline - fancy" icon_state = "spline_fancy" -/obj/effect/floor_decal/spline/fancy/black +/obj/floor_decal/spline/fancy/black color = COLOR_GRAY -/obj/effect/floor_decal/spline/fancy/black/corner +/obj/floor_decal/spline/fancy/black/corner icon_state = "spline_fancy_corner" -/obj/effect/floor_decal/spline/fancy/wood +/obj/floor_decal/spline/fancy/wood name = "spline - wood" color = "#cb9e04" -/obj/effect/floor_decal/spline/fancy/wood/corner +/obj/floor_decal/spline/fancy/wood/corner icon_state = "spline_fancy_corner" -/obj/effect/floor_decal/spline/fancy/wood/cee +/obj/floor_decal/spline/fancy/wood/cee icon_state = "spline_fancy_cee" -/obj/effect/floor_decal/spline/fancy/wood/three_quarters +/obj/floor_decal/spline/fancy/wood/three_quarters icon_state = "spline_fancy_full" -/obj/effect/floor_decal/industrial/warning +/obj/floor_decal/industrial/warning name = "hazard stripes" color = "#d2d53d" icon_state = "stripe" -/obj/effect/floor_decal/industrial/warning/corner +/obj/floor_decal/industrial/warning/corner icon_state = "stripecorner" -/obj/effect/floor_decal/industrial/warning/full +/obj/floor_decal/industrial/warning/full icon_state = "stripefull" -/obj/effect/floor_decal/industrial/warning/cee +/obj/floor_decal/industrial/warning/cee icon_state = "stripecee" -/obj/effect/floor_decal/industrial/warning/fulltile +/obj/floor_decal/industrial/warning/fulltile icon_state = "stripefulltile" -/obj/effect/floor_decal/industrial/custodial +/obj/floor_decal/industrial/custodial name = "custodial stripes" icon_state = "stripe" -/obj/effect/floor_decal/industrial/custodial/corner +/obj/floor_decal/industrial/custodial/corner icon_state = "stripecorner" -/obj/effect/floor_decal/industrial/custodial/full +/obj/floor_decal/industrial/custodial/full icon_state = "stripefull" -/obj/effect/floor_decal/industrial/custodial/cee +/obj/floor_decal/industrial/custodial/cee icon_state = "stripecee" -/obj/effect/floor_decal/industrial/custodial/fulltile +/obj/floor_decal/industrial/custodial/fulltile icon_state = "stripefulltile" -/obj/effect/floor_decal/industrial/fire +/obj/floor_decal/industrial/fire name = "fire safety stripes" icon_state = "stripe" detail_overlay = "overstripe" detail_color = "#c90000" -/obj/effect/floor_decal/industrial/fire/corner +/obj/floor_decal/industrial/fire/corner icon_state = "stripecorner" detail_overlay = "overstripecorner" -/obj/effect/floor_decal/industrial/fire/full +/obj/floor_decal/industrial/fire/full icon_state = "stripefull" detail_overlay = "overstripefull" -/obj/effect/floor_decal/industrial/fire/cee +/obj/floor_decal/industrial/fire/cee icon_state = "stripecee" detail_overlay = "overstripecee" -/obj/effect/floor_decal/industrial/fire/fulltile +/obj/floor_decal/industrial/fire/fulltile icon_state = "stripefulltile" -/obj/effect/floor_decal/industrial/radiation +/obj/floor_decal/industrial/radiation name = "radiation hazard stripes" icon_state = "stripe" color = "#d2d53d" detail_overlay = "overstripe" detail_color = "#c900fb" -/obj/effect/floor_decal/industrial/radiation/corner +/obj/floor_decal/industrial/radiation/corner icon_state = "stripecorner" detail_overlay = "overstripecorner" -/obj/effect/floor_decal/industrial/radiation/full +/obj/floor_decal/industrial/radiation/full icon_state = "stripefull" detail_overlay = "overstripefull" -/obj/effect/floor_decal/industrial/radiation/cee +/obj/floor_decal/industrial/radiation/cee icon_state = "stripecee" detail_overlay = "overstripecee" -/obj/effect/floor_decal/industrial/radiation/fulltile +/obj/floor_decal/industrial/radiation/fulltile icon_state = "stripefulltile" -/obj/effect/floor_decal/industrial/firstaid +/obj/floor_decal/industrial/firstaid name = "first aid stripes" icon_state = "stripe" detail_overlay = "overstripe" detail_color = "#00cd00" -/obj/effect/floor_decal/industrial/firstaid/corner +/obj/floor_decal/industrial/firstaid/corner icon_state = "stripecorner" detail_overlay = "overstripecorner" -/obj/effect/floor_decal/industrial/firstaid/full +/obj/floor_decal/industrial/firstaid/full icon_state = "stripefull" detail_overlay = "overstripefull" -/obj/effect/floor_decal/industrial/firstaid/cee +/obj/floor_decal/industrial/firstaid/cee icon_state = "stripecee" detail_overlay = "overstripecee" -/obj/effect/floor_decal/industrial/firstaid/fulltile +/obj/floor_decal/industrial/firstaid/fulltile icon_state = "stripefulltile" -/obj/effect/floor_decal/industrial/defective +/obj/floor_decal/industrial/defective name = "defective machinery stripes" icon_state = "stripe" detail_overlay = "overstripe" detail_color = "#0000fb" -/obj/effect/floor_decal/industrial/defective/corner +/obj/floor_decal/industrial/defective/corner icon_state = "stripecorner" detail_overlay = "overstripecorner" -/obj/effect/floor_decal/industrial/defective/full +/obj/floor_decal/industrial/defective/full icon_state = "stripefull" detail_overlay = "overstripefull" -/obj/effect/floor_decal/industrial/defective/cee +/obj/floor_decal/industrial/defective/cee icon_state = "stripecee" detail_overlay = "overstripecee" -/obj/effect/floor_decal/industrial/defective/fulltile +/obj/floor_decal/industrial/defective/fulltile icon_state = "stripefulltile" -/obj/effect/floor_decal/industrial/traffic +/obj/floor_decal/industrial/traffic name = "traffic hazard stripes" icon_state = "stripe" detail_overlay = "overstripe" detail_color = "#fb9700" -/obj/effect/floor_decal/industrial/traffic/corner +/obj/floor_decal/industrial/traffic/corner icon_state = "stripecorner" detail_overlay = "overstripecorner" -/obj/effect/floor_decal/industrial/traffic/full +/obj/floor_decal/industrial/traffic/full icon_state = "stripefull" detail_overlay = "overstripefull" -/obj/effect/floor_decal/industrial/traffic/cee +/obj/floor_decal/industrial/traffic/cee icon_state = "stripecee" detail_overlay = "overstripecee" -/obj/effect/floor_decal/industrial/traffic/fulltile +/obj/floor_decal/industrial/traffic/fulltile icon_state = "stripefulltile" -/obj/effect/floor_decal/industrial/warning/dust +/obj/floor_decal/industrial/warning/dust name = "hazard stripes" icon_state = "warning_dust" -/obj/effect/floor_decal/industrial/warning/dust/corner +/obj/floor_decal/industrial/warning/dust/corner name = "hazard stripes" icon_state = "warningcorner_dust" -/obj/effect/floor_decal/industrial/hatch +/obj/floor_decal/industrial/hatch name = "hatched marking" icon_state = "delivery" alpha = 229 -/obj/effect/floor_decal/industrial/hatch/yellow +/obj/floor_decal/industrial/hatch/yellow color = "#cfcf55" -/obj/effect/floor_decal/industrial/hatch/red +/obj/floor_decal/industrial/hatch/red color = COLOR_RED_GRAY -/obj/effect/floor_decal/industrial/hatch/orange +/obj/floor_decal/industrial/hatch/orange color = COLOR_DARK_ORANGE -/obj/effect/floor_decal/industrial/hatch/blue +/obj/floor_decal/industrial/hatch/blue color = COLOR_BLUE_GRAY -/obj/effect/floor_decal/industrial/shutoff +/obj/floor_decal/industrial/shutoff name = "shutoff valve marker" icon_state = "shutoff" -/obj/effect/floor_decal/industrial/outline +/obj/floor_decal/industrial/outline name = "white outline" icon_state = "outline" alpha = 229 -/obj/effect/floor_decal/industrial/outline/blue +/obj/floor_decal/industrial/outline/blue name = "blue outline" color = "#00b8b2" -/obj/effect/floor_decal/industrial/outline/yellow +/obj/floor_decal/industrial/outline/yellow name = "yellow outline" color = "#cfcf55" -/obj/effect/floor_decal/industrial/outline/grey +/obj/floor_decal/industrial/outline/grey name = "grey outline" color = "#808080" -/obj/effect/floor_decal/industrial/outline/red +/obj/floor_decal/industrial/outline/red name = "red outline" color = COLOR_RED_GRAY -/obj/effect/floor_decal/industrial/outline/orange +/obj/floor_decal/industrial/outline/orange name = "orange outline" color = COLOR_DARK_ORANGE -/obj/effect/floor_decal/industrial/loading +/obj/floor_decal/industrial/loading name = "loading area" icon_state = "loadingarea" alpha = 229 -/obj/effect/floor_decal/plaque +/obj/floor_decal/plaque name = "plaque" icon_state = "plaque" -/obj/effect/floor_decal/asteroid +/obj/floor_decal/asteroid name = "random asteroid rubble" icon_state = "asteroid0" -/obj/effect/floor_decal/beach +/obj/floor_decal/beach name = "sandy border" icon = 'icons/misc/beach.dmi' icon_state = "beachborder" -/obj/effect/floor_decal/beach/corner +/obj/floor_decal/beach/corner icon_state = "beachbordercorner" -/obj/effect/floor_decal/asteroid/New() +/obj/floor_decal/asteroid/New() icon_state = "asteroid[rand(0,9)]" ..() -/obj/effect/floor_decal/chapel +/obj/floor_decal/chapel name = "chapel" icon_state = "chapel" -/obj/effect/floor_decal/ss13/l1 +/obj/floor_decal/ss13/l1 name = "L1" icon_state = "L1" -/obj/effect/floor_decal/ss13/l2 +/obj/floor_decal/ss13/l2 name = "L2" icon_state = "L2" -/obj/effect/floor_decal/ss13/l3 +/obj/floor_decal/ss13/l3 name = "L3" icon_state = "L3" -/obj/effect/floor_decal/ss13/l4 +/obj/floor_decal/ss13/l4 name = "L4" icon_state = "L4" -/obj/effect/floor_decal/ss13/l5 +/obj/floor_decal/ss13/l5 name = "L5" icon_state = "L5" -/obj/effect/floor_decal/ss13/l6 +/obj/floor_decal/ss13/l6 name = "L6" icon_state = "L6" -/obj/effect/floor_decal/ss13/l7 +/obj/floor_decal/ss13/l7 name = "L7" icon_state = "L7" -/obj/effect/floor_decal/ss13/l8 +/obj/floor_decal/ss13/l8 name = "L8" icon_state = "L8" -/obj/effect/floor_decal/ss13/l9 +/obj/floor_decal/ss13/l9 name = "L9" icon_state = "L9" -/obj/effect/floor_decal/ss13/l10 +/obj/floor_decal/ss13/l10 name = "L10" icon_state = "L10" -/obj/effect/floor_decal/ss13/l11 +/obj/floor_decal/ss13/l11 name = "L11" icon_state = "L11" -/obj/effect/floor_decal/ss13/l12 +/obj/floor_decal/ss13/l12 name = "L12" icon_state = "L12" -/obj/effect/floor_decal/ss13/l13 +/obj/floor_decal/ss13/l13 name = "L13" icon_state = "L13" -/obj/effect/floor_decal/ss13/l14 +/obj/floor_decal/ss13/l14 name = "L14" icon_state = "L14" -/obj/effect/floor_decal/ss13/l15 +/obj/floor_decal/ss13/l15 name = "L15" icon_state = "L15" -/obj/effect/floor_decal/ss13/l16 +/obj/floor_decal/ss13/l16 name = "L16" icon_state = "L16" -/obj/effect/floor_decal/sign +/obj/floor_decal/sign name = "floor sign" icon_state = "white_1" -/obj/effect/floor_decal/sign/two +/obj/floor_decal/sign/two icon_state = "white_2" -/obj/effect/floor_decal/sign/a +/obj/floor_decal/sign/a icon_state = "white_a" -/obj/effect/floor_decal/sign/b +/obj/floor_decal/sign/b icon_state = "white_b" -/obj/effect/floor_decal/sign/c +/obj/floor_decal/sign/c icon_state = "white_c" -/obj/effect/floor_decal/sign/d +/obj/floor_decal/sign/d icon_state = "white_d" -/obj/effect/floor_decal/sign/ex +/obj/floor_decal/sign/ex icon_state = "white_ex" -/obj/effect/floor_decal/sign/m +/obj/floor_decal/sign/m icon_state = "white_m" -/obj/effect/floor_decal/sign/cmo +/obj/floor_decal/sign/cmo icon_state = "white_cmo" -/obj/effect/floor_decal/sign/v +/obj/floor_decal/sign/v icon_state = "white_v" -/obj/effect/floor_decal/sign/p +/obj/floor_decal/sign/p icon_state = "white_p" -/obj/effect/floor_decal/sign/or1 +/obj/floor_decal/sign/or1 icon_state = "white_or1" -/obj/effect/floor_decal/sign/or2 +/obj/floor_decal/sign/or2 icon_state = "white_or2" -/obj/effect/floor_decal/sign/tr +/obj/floor_decal/sign/tr icon_state = "white_tr" -/obj/effect/floor_decal/sign/pop +/obj/floor_decal/sign/pop icon_state = "white_pop" -/obj/effect/floor_decal/solarpanel +/obj/floor_decal/solarpanel icon_state = "solarpanel" -/obj/effect/floor_decal/snow +/obj/floor_decal/snow icon = 'icons/turf/overlays.dmi' icon_state = "snowfloor" -/obj/effect/floor_decal/floordetail +/obj/floor_decal/floordetail layer = TURF_DETAIL_LAYER color = COLOR_GUNMETAL icon_state = "manydot" appearance_flags = DEFAULT_APPEARANCE_FLAGS -/obj/effect/floor_decal/floordetail/New(newloc, newdir, newcolour) +/obj/floor_decal/floordetail/New(newloc, newdir, newcolour) color = null //color is here just for map preview, if left it applies both our and tile colors. ..() -/obj/effect/floor_decal/floordetail/tiled +/obj/floor_decal/floordetail/tiled icon_state = "manydot_tiled" -/obj/effect/floor_decal/floordetail/pryhole +/obj/floor_decal/floordetail/pryhole icon_state = "pryhole" -/obj/effect/floor_decal/floordetail/edgedrain +/obj/floor_decal/floordetail/edgedrain icon_state = "edge" -/obj/effect/floor_decal/floordetail/traction +/obj/floor_decal/floordetail/traction icon_state = "traction" -/obj/effect/floor_decal/ntlogo +/obj/floor_decal/ntlogo icon_state = "ntlogo" -/obj/effect/floor_decal/torchltdlogo +/obj/floor_decal/torchltdlogo alpha = 230 icon = 'icons/turf/flooring/corp_floor.dmi' icon_state = "bottomleft" //Techfloor -/obj/effect/floor_decal/corner_techfloor_gray +/obj/floor_decal/corner_techfloor_gray name = "corner techfloorgray" icon_state = "corner_techfloor_gray" -/obj/effect/floor_decal/corner_techfloor_gray/diagonal +/obj/floor_decal/corner_techfloor_gray/diagonal name = "corner techfloorgray diagonal" icon_state = "corner_techfloor_gray_diagonal" -/obj/effect/floor_decal/corner_techfloor_gray/full +/obj/floor_decal/corner_techfloor_gray/full name = "corner techfloorgray full" icon_state = "corner_techfloor_gray_full" -/obj/effect/floor_decal/corner_techfloor_grid +/obj/floor_decal/corner_techfloor_grid name = "corner techfloorgrid" icon_state = "corner_techfloor_grid" -/obj/effect/floor_decal/corner_techfloor_grid/diagonal +/obj/floor_decal/corner_techfloor_grid/diagonal name = "corner techfloorgrid diagonal" icon_state = "corner_techfloor_grid_diagonal" -/obj/effect/floor_decal/corner_techfloor_grid/full +/obj/floor_decal/corner_techfloor_grid/full name = "corner techfloorgrid full" icon_state = "corner_techfloor_grid_full" -/obj/effect/floor_decal/corner_steel_grid +/obj/floor_decal/corner_steel_grid name = "corner steel_grid" icon_state = "steel_grid" -/obj/effect/floor_decal/corner_steel_grid/diagonal +/obj/floor_decal/corner_steel_grid/diagonal name = "corner tsteel_grid diagonal" icon_state = "steel_grid_diagonal" -/obj/effect/floor_decal/corner_steel_grid/full +/obj/floor_decal/corner_steel_grid/full name = "corner steel_grid full" icon_state = "steel_grid_full" -/obj/effect/floor_decal/borderfloor +/obj/floor_decal/borderfloor name = "border floor" icon_state = "borderfloor_white" color = COLOR_GUNMETAL -/obj/effect/floor_decal/borderfloor/corner +/obj/floor_decal/borderfloor/corner icon_state = "borderfloorcorner_white" -/obj/effect/floor_decal/borderfloor/corner2 +/obj/floor_decal/borderfloor/corner2 icon_state = "borderfloorcorner2_white" -/obj/effect/floor_decal/borderfloor/full +/obj/floor_decal/borderfloor/full icon_state = "borderfloorfull_white" -/obj/effect/floor_decal/borderfloor/cee +/obj/floor_decal/borderfloor/cee icon_state = "borderfloorcee_white" -/obj/effect/floor_decal/borderfloorblack +/obj/floor_decal/borderfloorblack name = "border floor" icon_state = "borderfloor_white" color = COLOR_DARK_GRAY -/obj/effect/floor_decal/borderfloorblack/corner +/obj/floor_decal/borderfloorblack/corner icon_state = "borderfloorcorner_white" -/obj/effect/floor_decal/borderfloorblack/corner2 +/obj/floor_decal/borderfloorblack/corner2 icon_state = "borderfloorcorner2_white" -/obj/effect/floor_decal/borderfloorblack/full +/obj/floor_decal/borderfloorblack/full icon_state = "borderfloorfull_white" -/obj/effect/floor_decal/borderfloorblack/cee +/obj/floor_decal/borderfloorblack/cee icon_state = "borderfloorcee_white" -/obj/effect/floor_decal/borderfloorwhite +/obj/floor_decal/borderfloorwhite name = "border floor" icon_state = "borderfloor_white" -/obj/effect/floor_decal/borderfloorwhite/corner +/obj/floor_decal/borderfloorwhite/corner icon_state = "borderfloorcorner_white" -/obj/effect/floor_decal/borderfloorwhite/corner2 +/obj/floor_decal/borderfloorwhite/corner2 icon_state = "borderfloorcorner2_white" -/obj/effect/floor_decal/borderfloorwhite/full +/obj/floor_decal/borderfloorwhite/full icon_state = "borderfloorfull_white" -/obj/effect/floor_decal/borderfloorwhite/cee +/obj/floor_decal/borderfloorwhite/cee icon_state = "borderfloorcee_white" -/obj/effect/floor_decal/steeldecal +/obj/floor_decal/steeldecal name = "steel decal" icon_state = "steel_decals1" color = COLOR_GUNMETAL -/obj/effect/floor_decal/steeldecal/steel_decals1 +/obj/floor_decal/steeldecal/steel_decals1 icon_state = "steel_decals1" -/obj/effect/floor_decal/steeldecal/steel_decals2 +/obj/floor_decal/steeldecal/steel_decals2 icon_state = "steel_decals2" -/obj/effect/floor_decal/steeldecal/steel_decals3 +/obj/floor_decal/steeldecal/steel_decals3 icon_state = "steel_decals3" -/obj/effect/floor_decal/steeldecal/steel_decals4 +/obj/floor_decal/steeldecal/steel_decals4 icon_state = "steel_decals4" -/obj/effect/floor_decal/steeldecal/steel_decals6 +/obj/floor_decal/steeldecal/steel_decals6 icon_state = "steel_decals6" -/obj/effect/floor_decal/steeldecal/steel_decals7 +/obj/floor_decal/steeldecal/steel_decals7 icon_state = "steel_decals7" -/obj/effect/floor_decal/steeldecal/steel_decals8 +/obj/floor_decal/steeldecal/steel_decals8 icon_state = "steel_decals8" -/obj/effect/floor_decal/steeldecal/steel_decals9 +/obj/floor_decal/steeldecal/steel_decals9 icon_state = "steel_decals9" -/obj/effect/floor_decal/steeldecal/steel_decals10 +/obj/floor_decal/steeldecal/steel_decals10 icon_state = "steel_decals10" -/obj/effect/floor_decal/steeldecal/steel_decals_central1 +/obj/floor_decal/steeldecal/steel_decals_central1 icon_state = "steel_decals_central1" -/obj/effect/floor_decal/steeldecal/steel_decals_central2 +/obj/floor_decal/steeldecal/steel_decals_central2 icon_state = "steel_decals_central2" -/obj/effect/floor_decal/steeldecal/steel_decals_central3 +/obj/floor_decal/steeldecal/steel_decals_central3 icon_state = "steel_decals_central3" -/obj/effect/floor_decal/steeldecal/steel_decals_central4 +/obj/floor_decal/steeldecal/steel_decals_central4 icon_state = "steel_decals_central4" -/obj/effect/floor_decal/steeldecal/steel_decals_central5 +/obj/floor_decal/steeldecal/steel_decals_central5 icon_state = "steel_decals_central5" -/obj/effect/floor_decal/steeldecal/steel_decals_central6 +/obj/floor_decal/steeldecal/steel_decals_central6 icon_state = "steel_decals_central6" -/obj/effect/floor_decal/steeldecal/steel_decals_central7 +/obj/floor_decal/steeldecal/steel_decals_central7 icon_state = "steel_decals_central7" -/obj/effect/floor_decal/techfloor +/obj/floor_decal/techfloor name = "techfloor edges" icon_state = "techfloor_edges" -/obj/effect/floor_decal/techfloor/corner +/obj/floor_decal/techfloor/corner name = "techfloor corner" icon_state = "techfloor_corners" -/obj/effect/floor_decal/techfloor/orange +/obj/floor_decal/techfloor/orange name = "techfloor edges" icon_state = "techfloororange_edges" -/obj/effect/floor_decal/techfloor/orange/corner +/obj/floor_decal/techfloor/orange/corner name = "techfloor corner" icon_state = "techfloororange_corners" -/obj/effect/floor_decal/techfloor/hole +/obj/floor_decal/techfloor/hole name = "hole left" icon_state = "techfloor_hole_left" -/obj/effect/floor_decal/techfloor/hole/right +/obj/floor_decal/techfloor/hole/right name = "hole right" icon_state = "techfloor_hole_right" -/obj/effect/floor_decal/stoneborder +/obj/floor_decal/stoneborder name = "stone border" icon_state = "stoneborder" -/obj/effect/floor_decal/stoneborder/corner +/obj/floor_decal/stoneborder/corner icon_state = "stoneborder_c" diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm index dea7f5c451aa1..9d2f9ae27759e 100644 --- a/code/game/turfs/flooring/flooring_premade.dm +++ b/code/game/turfs/flooring/flooring_premade.dm @@ -10,33 +10,36 @@ icon = 'icons/turf/flooring/circuit.dmi' icon_state = "bcircuit" initial_flooring = /singleton/flooring/reinforced/circuit - light_outer_range = 2 - light_max_bright = 1 + light_range = 2 + light_power = 1 light_color = COLOR_BLUE -/turf/simulated/floor/bluegrid/airless - initial_gas = null - /turf/simulated/floor/greengrid name = "mainframe floor" icon = 'icons/turf/flooring/circuit.dmi' icon_state = "gcircuit" initial_flooring = /singleton/flooring/reinforced/circuit/green - light_outer_range = 2 - light_max_bright = 3 + light_range = 2 + light_power = 3 light_color = COLOR_GREEN -/turf/simulated/floor/blackgrid +/turf/simulated/floor/redgrid name = "mainframe floor" icon = 'icons/turf/flooring/circuit.dmi' icon_state = "rcircuit" initial_flooring = /singleton/flooring/reinforced/circuit/red - light_outer_range = 2 - light_max_bright = 2 + light_range = 2 + light_power = 2 light_color = COLOR_RED -/turf/simulated/floor/greengrid/airless - initial_gas = null +/turf/simulated/floor/selfestructgrid + name = "self-destruct mainframe floor" + icon = 'icons/turf/flooring/circuit.dmi' + icon_state = "rcircuit_off" + initial_flooring = /singleton/flooring/reinforced/circuit/selfdestruct + light_range = 2 + light_power = 2 + light_color = COLOR_BLACK /turf/simulated/floor/wood name = "wooden floor" @@ -75,6 +78,16 @@ icon_state = "grass0" initial_flooring = /singleton/flooring/grass +/turf/simulated/floor/grass/use_tool(obj/item/I, mob/user) + if(I.tool_behaviour == TOOL_WIRECUTTER) + user.visible_message(SPAN_NOTICE("\The [user] trims \the [src] with \the [I]."), SPAN_NOTICE("You trim \the [src] with \the [I].")) + ChangeTurf(/turf/simulated/floor/grass/cut) + return TRUE + return ..() + +/turf/simulated/floor/grass/cut + initial_flooring = /singleton/flooring/grass/cut + /turf/simulated/floor/carpet name = "brown carpet" icon = 'icons/turf/flooring/carpet.dmi' @@ -121,15 +134,17 @@ icon_state = "red" initial_flooring = /singleton/flooring/carpet/red +/turf/simulated/floor/carpet/black + name = "black carpet" + icon_state = "black" + initial_flooring = /singleton/flooring/carpet/black + /turf/simulated/floor/reinforced name = "reinforced floor" icon = 'icons/turf/flooring/tiles.dmi' icon_state = "reinforced" initial_flooring = /singleton/flooring/reinforced -/turf/simulated/floor/reinforced/airless - initial_gas = null - /turf/simulated/floor/reinforced/airmix initial_gas = list(GAS_OXYGEN = MOLES_O2ATMOS, GAS_NITROGEN = MOLES_N2ATMOS) @@ -189,9 +204,6 @@ icon_state = "monotiledark" initial_flooring = /singleton/flooring/tiling/mono/dark -/turf/simulated/floor/tiled/dark/airless - initial_gas = null - /turf/simulated/floor/tiled/white name = "white floor" icon_state = "white" @@ -207,11 +219,6 @@ icon_state = "steel_monofloor" initial_flooring = /singleton/flooring/tiling/mono -/turf/simulated/floor/tiled/white/airless - name = "airless floor" - initial_gas = null - temperature = TCMB - /turf/simulated/floor/tiled/freezer name = "tiles" icon_state = "freezer" @@ -306,35 +313,13 @@ initial_flooring = /singleton/flooring/linoleum //ATMOS PREMADES -/turf/simulated/floor/reinforced/airless - name = "vacuum floor" - initial_gas = null - temperature = TCMB - -/turf/simulated/floor/airless - name = "airless plating" - initial_gas = null - temperature = TCMB - -/turf/simulated/floor/tiled/airless - name = "airless floor" - initial_gas = null - temperature = TCMB - -/turf/simulated/floor/bluegrid/airless - name = "airless floor" - initial_gas = null - temperature = TCMB - -/turf/simulated/floor/greengrid/airless - name = "airless floor" - initial_gas = null - temperature = TCMB - /turf/simulated/floor/greengrid/nitrogen initial_gas = list(GAS_NITROGEN = MOLES_N2STANDARD) // Placeholders +/turf/simulated/floor/airless + map_airless = TRUE + /turf/simulated/floor/airless/lava name = "lava" icon = 'icons/turf/flooring/lava.dmi' @@ -350,12 +335,12 @@ icon = 'icons/turf/snow.dmi' icon_state = "snow" -/turf/simulated/floor/snow/New() +/turf/simulated/floor/snow/Initialize(mapload, added_to_area_cache) icon_state = pick("snow[rand(1,12)]","snow0") ..() /turf/simulated/floor/light -/turf/simulated/floor/airless/ceiling +/turf/simulated/floor/ceiling /turf/simulated/floor/beach name = "beach" @@ -369,9 +354,9 @@ icon_state = "desert" has_resources = 1 -/turf/simulated/floor/beach/sand/desert/New() +/turf/simulated/floor/beach/sand/desert/Initialize(mapload, added_to_area_cache) + . = ..() icon_state = "desert[rand(0,5)]" - ..() /turf/simulated/floor/beach/coastline name = "coastline" @@ -393,9 +378,9 @@ /turf/simulated/floor/beach/water/ocean icon_state = "seadeep" -/turf/simulated/floor/beach/water/New() - ..() - overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1) +/turf/simulated/floor/beach/water/Initialize(mapload, added_to_area_cache) + . = ..() + AddOverlays(image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1)) /turf/simulated/floor/crystal name = "crystal floor" @@ -415,3 +400,19 @@ icon = 'icons/turf/flooring/pool.dmi' icon_state = "pool" initial_flooring = /singleton/flooring/pool + +/turf/simulated/floor/bluespace + name = "bluespace" + icon = 'icons/turf/space.dmi' + icon_state = "bluespace" + initial_flooring = /singleton/flooring/bluespace + +/turf/simulated/floor/bluespace/Entered(mob/living/L) + . = ..() + + if(istype(L) && prob(75)) + L.visible_message( + SPAN_WARNING("\The [L] starts flickering in and out of existence as they step onto the bluespace!"), + SPAN_WARNING("You feel your entire body tingle, and something pulling you away!") + ) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(do_unstable_teleport_safe), L, GetConnectedZlevels(L.z)), rand(5, 15)) diff --git a/code/game/turfs/initialization/maintenance.dm b/code/game/turfs/initialization/maintenance.dm index 0397eea149dab..25809360ab7dd 100644 --- a/code/game/turfs/initialization/maintenance.dm +++ b/code/game/turfs/initialization/maintenance.dm @@ -31,7 +31,7 @@ T.update_dirt() if(prob(oil_probability)) - new /obj/effect/decal/cleanable/blood/oil(T) + new /obj/decal/cleanable/blood/oil(T) if(prob(clutter_probability)) var/new_junk = get_random_junk_type() @@ -63,11 +63,11 @@ var/turf/neighbour = get_step(T, dir) if(neighbour && neighbour.density) if(dir == WEST) - new /obj/effect/decal/cleanable/cobweb(T) + new /obj/decal/cleanable/cobweb(T) if(dir == EAST) - new /obj/effect/decal/cleanable/cobweb2(T) + new /obj/decal/cleanable/cobweb2(T) if(prob(web_probability)) - var/obj/effect/spider/spiderling/spiderling = new /obj/effect/spider/spiderling/mundane/dormant(T) + var/obj/spider/spiderling/spiderling = new /obj/spider/spiderling/mundane/dormant(T) spiderling.pixel_y = spiderling.shift_range spiderling.pixel_x = dir == WEST ? -spiderling.shift_range : spiderling.shift_range diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index ae4376232619e..fd1e169382704 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -1,19 +1,24 @@ /turf/simulated name = "station" + simulated = TRUE + initial_gas = list(GAS_OXYGEN = MOLES_O2STANDARD, GAS_NITROGEN = MOLES_N2STANDARD) + var/wet = 0 - var/image/wet_overlay = null //Mining resources (for the large drills). var/has_resources - var/list/resources - var/thermite = 0 - initial_gas = list(GAS_OXYGEN = MOLES_O2STANDARD, GAS_NITROGEN = MOLES_N2STANDARD) var/to_be_destroyed = 0 //Used for fire, if a melting temperature was reached, it will be destroyed var/max_fire_temperature_sustained = 0 //The max temperature of the fire which it was subjected to var/dirt = 0 - var/timer_id + var/image/wet_overlay = null + var/list/resources + +/turf/simulated/pre_change() + . = ..() + if(zone) + zone.rebuild() // This is not great. /turf/simulated/proc/wet_floor(wet_val = 1, overwrite = FALSE) @@ -23,44 +28,48 @@ if(!wet) wet = wet_val wet_overlay = image('icons/effects/water.dmi',src,"wet_floor") - overlays += wet_overlay + AddOverlays(wet_overlay) - timer_id = addtimer(new Callback(src,/turf/simulated/proc/unwet_floor),8 SECONDS, TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE) + timer_id = addtimer(CALLBACK(src, TYPE_PROC_REF(/turf/simulated, unwet_floor)),8 SECONDS, TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE) /turf/simulated/proc/unwet_floor(check_very_wet = TRUE) if(check_very_wet && wet >= 2) wet-- - timer_id = addtimer(new Callback(src,/turf/simulated/proc/unwet_floor), 8 SECONDS, TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE) + timer_id = addtimer(CALLBACK(src, TYPE_PROC_REF(/turf/simulated, unwet_floor)), 8 SECONDS, TIMER_STOPPABLE|TIMER_UNIQUE|TIMER_NO_HASH_WAIT|TIMER_OVERRIDE) return wet = 0 if(wet_overlay) - overlays -= wet_overlay + CutOverlays(wet_overlay) wet_overlay = null /turf/simulated/clean_blood() - for(var/obj/effect/decal/cleanable/blood/B in contents) + for(var/obj/decal/cleanable/blood/B in contents) B.clean_blood() ..() -/turf/simulated/New() - ..() +/turf/simulated/Initialize(mapload, added_to_area_cache) + . = ..() + if(GAME_STATE >= RUNLEVEL_GAME) + fluid_update() + if(istype(loc, /area/chapel)) - holy = 1 + holy = TRUE + levelupdate() /turf/simulated/proc/AddTracks(typepath,bloodDNA,comingdir,goingdir,bloodcolor=COLOR_BLOOD_HUMAN) - var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src + var/obj/decal/cleanable/blood/tracks/tracks = locate(typepath) in src if(!tracks) tracks = new typepath(src) tracks.AddTracks(bloodDNA,comingdir,goingdir,bloodcolor) /turf/simulated/proc/update_dirt() dirt = min(dirt+0.5, 101) - var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, src) + var/obj/decal/cleanable/dirt/dirtoverlay = locate(/obj/decal/cleanable/dirt, src) if (dirt > 50) if (!dirtoverlay) - dirtoverlay = new/obj/effect/decal/cleanable/dirt(src) + dirtoverlay = new/obj/decal/cleanable/dirt(src) dirtoverlay.alpha = min((dirt - 50) * 5, 255) /turf/simulated/remove_cleanables() @@ -124,15 +133,12 @@ slip_stun = 10 if(M.slip("the [floor_type] floor", slip_stun)) - addtimer(new Callback(M, /mob/proc/slip_handler, M.dir, slip_dist - 1, 1), 1) - else - M.inertia_dir = 0 - else - M.inertia_dir = 0 + addtimer(CALLBACK(M, TYPE_PROC_REF(/mob, slip_handler), M.dir, slip_dist - 1, 1), 1) + /mob/proc/slip_handler(dir, dist, delay) if (dist > 0) - addtimer(new Callback(src, .proc/slip_handler, dir, dist - 1, delay), delay) + addtimer(CALLBACK(src, PROC_REF(slip_handler), dir, dist - 1, delay), delay) step(src, dir) //returns 1 if made bloody, returns 0 otherwise @@ -141,7 +147,7 @@ return 0 if(istype(M)) - for(var/obj/effect/decal/cleanable/blood/B in contents) + for(var/obj/decal/cleanable/blood/B in contents) if(!B.blood_DNA) B.blood_DNA = list() if(!B.blood_DNA[M.dna.unique_enzymes]) @@ -154,26 +160,62 @@ // Only adds blood on the floor -- Skie /turf/simulated/proc/add_blood_floor(mob/living/carbon/M as mob) if( istype(M, /mob/living/carbon/alien )) - var/obj/effect/decal/cleanable/blood/xeno/this = new /obj/effect/decal/cleanable/blood/xeno(src) + var/obj/decal/cleanable/blood/xeno/this = new /obj/decal/cleanable/blood/xeno(src) this.blood_DNA["UNKNOWN BLOOD"] = "X*" else if( istype(M, /mob/living/silicon/robot )) - new /obj/effect/decal/cleanable/blood/oil(src) + new /obj/decal/cleanable/blood/oil(src) /turf/simulated/proc/can_build_cable(mob/user) return 0 -/turf/simulated/attackby(obj/item/thing, mob/user) +/turf/simulated/use_tool(obj/item/thing, mob/living/user, list/click_params) if(isCoil(thing) && can_build_cable(user)) var/obj/item/stack/cable_coil/coil = thing coil.PlaceCableOnTurf(src, user) - return + return TRUE return ..() -/turf/simulated/Initialize() - if(GAME_STATE >= RUNLEVEL_GAME) - fluid_update() +/turf/simulated/attack_hand(mob/living/user) . = ..() + if (Adjacent(user)) + add_fingerprint(user) + + if (!get_max_health() || !ishuman(user) || user.a_intent != I_HURT) + return + + var/mob/living/carbon/human/assailant = user + var/datum/unarmed_attack/attack = assailant.get_unarmed_attack(src) + if (!attack) + return + assailant.do_attack_animation(src) + assailant.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + var/damage = attack.damage + rand(1,5) + var/attack_verb = "[pick(attack.attack_verb)]" + + if (MUTATION_FERAL in user.mutations) + attack_verb = "smashes" + damage = 15 + + playsound(src, damage_hitsound, 25, TRUE, -1) + if (!can_damage_health(damage, attack.get_damage_type())) + user.visible_message( + SPAN_WARNING("\The [user] [attack_verb] \the [src], but doesn't even leave a dent!"), + SPAN_WARNING("You [attack_verb] \the [src], but cause no visible damage and hurt yourself!") + ) + if (!(MUTATION_FERAL in user.mutations)) + user.apply_damage(3, DAMAGE_BRUTE, user.hand ? BP_L_HAND : BP_R_HAND) + return TRUE + + assailant.visible_message( + SPAN_WARNING("\The [assailant] [attack_verb] \the [src]!"), + SPAN_WARNING("You [attack_verb] \the [src]!") + ) + damage_health(damage, attack.get_damage_type(), attack.damage_flags()) + return TRUE + + + /turf/simulated/damage_health(damage, damage_type, damage_flags, severity, skip_can_damage_check = FALSE) if (HAS_FLAGS(damage_flags, DAMAGE_FLAG_TURF_BREAKER)) damage *= 4 diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index daf6e1116c022..2622b2bae8c6c 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -3,6 +3,11 @@ icon = 'icons/turf/flooring/plating.dmi' icon_state = "plating" permit_ao = TRUE + height = -FLUID_SHALLOW / 2 + thermal_conductivity = 0.040 + heat_capacity = 10000 + decals_available = TRUE + // Damage to flooring. var/broken @@ -21,11 +26,11 @@ var/singleton/flooring/flooring var/mineral = DEFAULT_WALL_MATERIAL - thermal_conductivity = 0.040 - heat_capacity = 10000 + // Initialization modifiers for mapping + /// Boolean (Default `FALSE`) - If set, the tile will not have atmosphere on init. + var/map_airless = FALSE var/lava = 0 - height = -FLUID_SHALLOW / 2 /turf/simulated/floor/is_plating() return !flooring @@ -33,13 +38,24 @@ /turf/simulated/floor/protects_atom(atom/A) return (A.level == ATOM_LEVEL_UNDER_TILE && !is_plating()) || ..() -/turf/simulated/floor/New(newloc, floortype) - ..(newloc) +/turf/simulated/floor/Initialize(mapload, added_to_area_cache, floortype) + var/area/area = get_area(src) + if (map_airless || area?.turfs_airless) + initial_gas = null + temperature = TCMB + + . = ..() + if(!floortype && initial_flooring) floortype = initial_flooring + if(floortype) set_flooring(GET_SINGLETON(floortype)) +/turf/simulated/floor/post_change() + . = ..() + RemoveLattice() + /turf/simulated/floor/proc/set_flooring(singleton/flooring/newflooring) make_plating(defer_icon_update = 1) flooring = newflooring @@ -50,9 +66,9 @@ //This proc auto corrects the grass tiles' siding. /turf/simulated/floor/proc/make_plating(place_product, defer_icon_update) - overlays.Cut() + ClearOverlays() - for(var/obj/effect/decal/writing/W in src) + for(var/obj/decal/writing/W in src) qdel(W) SetName(base_name) @@ -107,4 +123,4 @@ if(turf_fire) turf_fire.AddPower(power) return - new /obj/effect/turf_fire(src, power, fire_colour) + new /obj/turf_fire(src, power, fire_colour) diff --git a/code/game/turfs/simulated/floor_acts.dm b/code/game/turfs/simulated/floor_acts.dm index 2290bd81cba6b..f3da644b5f0eb 100644 --- a/code/game/turfs/simulated/floor_acts.dm +++ b/code/game/turfs/simulated/floor_acts.dm @@ -97,4 +97,4 @@ // Non-blocking - Hit everything for (var/atom/A as anything in other_atoms) - A.fire_act(adj_turf, adj_air, adj_temp, adj_volume) + A.fire_act(adj_air, adj_temp, adj_volume) diff --git a/code/game/turfs/simulated/floor_attackby.dm b/code/game/turfs/simulated/floor_attackby.dm index 5ffa3b1920fcd..8d1793afc2c98 100644 --- a/code/game/turfs/simulated/floor_attackby.dm +++ b/code/game/turfs/simulated/floor_attackby.dm @@ -1,116 +1,121 @@ -/turf/simulated/floor/attackby(obj/item/C, mob/user) - +/turf/simulated/floor/use_tool(obj/item/C, mob/living/user, list/click_params) var/area/A = get_area(src) if (!A.can_modify_area()) - visible_message("\The [src] cannot be dismantled or modified in any way!") - return - - if(!C || !user) - return 0 + visible_message("[src] cannot be dismantled or modified in any way!") + return TRUE if(isCoil(C) || (flooring && istype(C, /obj/item/stack/material/rods))) return ..(C, user) - if(!(isScrewdriver(C) && flooring && (flooring.flags & TURF_REMOVE_SCREWDRIVER)) && try_graffiti(user, C)) - return + if(!(C.tool_behaviour == TOOL_SCREWDRIVER && flooring && (flooring.flags & TURF_REMOVE_SCREWDRIVER)) && try_graffiti(user, C)) + return TRUE if(flooring) - if(isCrowbar(C)) - if(user.a_intent != I_HELP) - return + if(C.tool_behaviour == TOOL_CROWBAR) if(broken || burnt) to_chat(user, SPAN_NOTICE("You remove the broken [flooring.descriptor].")) make_plating() else if(flooring.flags & TURF_IS_FRAGILE) - to_chat(user, SPAN_DANGER("You forcefully pry off the [flooring.descriptor], destroying them in the process.")) + to_chat(user, SPAN_DANGER("You forcefully pry off [flooring.descriptor], destroying them in the process.")) make_plating() else if(flooring.flags & TURF_REMOVE_CROWBAR) if (flooring.remove_timer) user.visible_message( - SPAN_NOTICE("\The [user] begins prying up \the [flooring.descriptor] with \the [C]!"), - SPAN_NOTICE("You begin prying up \the [flooring.descriptor] with \the [C].") + SPAN_NOTICE("[user] begins prying up [flooring.descriptor] with [C]!"), + SPAN_NOTICE("You begin prying up [flooring.descriptor] with [C].") ) playsound(src, 'sound/items/Crowbar.ogg', 80, 1) if (do_after(user, flooring.remove_timer, src, DO_REPAIR_CONSTRUCT)) user.visible_message( - SPAN_NOTICE("\The [user] pries up \the [flooring.descriptor] with \the [C]!"), - SPAN_NOTICE("You pry up \the [flooring.descriptor] with \the [C].") + SPAN_NOTICE("[user] pries up [flooring.descriptor] with [C]!"), + SPAN_NOTICE("You pry up [flooring.descriptor] with [C].") ) make_plating(TRUE) playsound(src, 'sound/items/Crowbar.ogg', 80, 1) - return + return TRUE else - to_chat(user, SPAN_NOTICE("You lever off the [flooring.descriptor].")) + to_chat(user, SPAN_NOTICE("You lever off [flooring.descriptor].")) make_plating(TRUE) else - return + return ..() + playsound(src, 'sound/items/Crowbar.ogg', 80, 1) - return - else if(isScrewdriver(C) && (flooring.flags & TURF_REMOVE_SCREWDRIVER)) + return TRUE + + else if(C.tool_behaviour == TOOL_SCREWDRIVER && (flooring.flags & TURF_REMOVE_SCREWDRIVER)) if(broken || burnt) - return + return ..() if (flooring.remove_timer) user.visible_message( - SPAN_NOTICE("\The [user] begins unscrewing \the [flooring.descriptor] with \the [C]!"), - SPAN_NOTICE("You begin unscrewing \the [flooring.descriptor] with \the [C].") + SPAN_NOTICE("[user] begins unscrewing [flooring.descriptor] with [C]!"), + SPAN_NOTICE("You begin unscrewing [flooring.descriptor] with [C].") ) - playsound(src, 'sound/items/Screwdriver.ogg', 80, 1) - if (do_after(user, flooring.remove_timer, src, DO_REPAIR_CONSTRUCT)) - user.visible_message( - SPAN_NOTICE("\The [user] unscrews \the [flooring.descriptor] with \the [C]!"), - SPAN_NOTICE("You unscrew \the [flooring.descriptor] with \the [C].") - ) - make_plating(TRUE) - playsound(src, 'sound/items/Screwdriver.ogg', 80, 1) - return + if(!C.use_as_tool(src, user, flooring.remove_timer, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE + user.visible_message( + SPAN_NOTICE("[user] unscrews [flooring.descriptor] with [C]!"), + SPAN_NOTICE("You unscrew [flooring.descriptor] with [C].") + ) + make_plating(TRUE) + return TRUE else - to_chat(user, SPAN_NOTICE("You unscrew and remove the [flooring.descriptor].")) + if(!C.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + to_chat(user, SPAN_NOTICE("You unscrew and remove [flooring.descriptor].")) make_plating(TRUE) - playsound(src, 'sound/items/Screwdriver.ogg', 80, 1) - return - else if(isWrench(C) && (flooring.flags & TURF_REMOVE_WRENCH)) + return TRUE + + else if(C.tool_behaviour == TOOL_WRENCH && (flooring.flags & TURF_REMOVE_WRENCH)) if (flooring.remove_timer) user.visible_message( - SPAN_NOTICE("\The [user] begins unwrenching \the [flooring.descriptor] with \the [C]!"), - SPAN_NOTICE("You begin unwrenching \the [flooring.descriptor] with \the [C].") + SPAN_NOTICE("[user] begins unwrenching [flooring.descriptor] with [C]!"), + SPAN_NOTICE("You begin unwrenching [flooring.descriptor] with [C].") ) playsound(src, 'sound/items/Ratchet.ogg', 80, 1) if (do_after(user, flooring.remove_timer, src, DO_REPAIR_CONSTRUCT)) user.visible_message( - SPAN_NOTICE("\The [user] unwrench \the [flooring.descriptor] with \the [C]!"), - SPAN_NOTICE("You unwrench \the [flooring.descriptor] with \the [C].") + SPAN_NOTICE("[user] unwrench [flooring.descriptor] with [C]!"), + SPAN_NOTICE("You unwrench [flooring.descriptor] with [C].") ) make_plating(TRUE) playsound(src, 'sound/items/Ratchet.ogg', 80, 1) - return + return TRUE else - to_chat(user, SPAN_NOTICE("You unwrench and remove the [flooring.descriptor].")) + to_chat(user, SPAN_NOTICE("You unwrench and remove [flooring.descriptor].")) make_plating(TRUE) playsound(src, 'sound/items/Ratchet.ogg', 80, 1) - return + return TRUE + else if(istype(C, /obj/item/shovel) && (flooring.flags & TURF_REMOVE_SHOVEL)) - to_chat(user, SPAN_NOTICE("You shovel off the [flooring.descriptor].")) + to_chat(user, SPAN_NOTICE("You shovel off [flooring.descriptor].")) make_plating(1) playsound(src, 'sound/items/Deconstruct.ogg', 80, 1) - return + return TRUE + else if(isCoil(C)) - to_chat(user, SPAN_WARNING("You must remove the [flooring.descriptor] first.")) - return - else + to_chat(user, SPAN_WARNING("You must remove [flooring.descriptor] first.")) + return TRUE + else if(istype(C, /obj/item/stack)) if(broken || burnt) to_chat(user, SPAN_WARNING("This section is too damaged to support anything. Use a welder to fix the damage.")) - return + return TRUE //first check, catwalk? Else let flooring do its thing if(locate(/obj/structure/catwalk, src)) - return + return ..() + if (istype(C, /obj/item/stack/material/rods)) var/obj/item/stack/material/rods/R = C - if (R.use(2)) - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - new /obj/structure/catwalk(src) - return + if (!R.can_use(2)) + USE_FEEDBACK_STACK_NOT_ENOUGH(R, 2, "to build the catwalk.") + return TRUE + + R.use(2) + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + new /obj/structure/catwalk(src) + return TRUE + var/obj/item/stack/S = C var/singleton/flooring/use_flooring var/list/singletons = GET_SINGLETON_SUBTYPE_MAP(/singleton/flooring) @@ -122,70 +127,62 @@ use_flooring = F break if(!use_flooring) - return - // Do we have enough? + return TRUE + if(use_flooring.build_cost && S.get_amount() < use_flooring.build_cost) - to_chat(user, SPAN_WARNING("You require at least [use_flooring.build_cost] [S.name] to complete the [use_flooring.descriptor].")) - return - // Stay still and focus... + to_chat(user, SPAN_WARNING("You require at least [use_flooring.build_cost] [S.name] to complete [use_flooring.descriptor].")) + return TRUE + if(use_flooring.build_time && !do_after(user, use_flooring.build_time, src, DO_REPAIR_CONSTRUCT)) - return + return TRUE if(flooring || !S || !user || !use_flooring) - return + return TRUE if(S.use(use_flooring.build_cost)) set_flooring(use_flooring) playsound(src, 'sound/items/Deconstruct.ogg', 80, 1) - return + return TRUE + // Repairs and Deconstruction. - else if(isCrowbar(C)) + else if (C.tool_behaviour == TOOL_CROWBAR && (broken || burnt)) + playsound(src, 'sound/items/Crowbar.ogg', 80, 1) + visible_message(SPAN_NOTICE("[user] has begun prying off the damaged plating.")) + var/turf/T = GetBelow(src) + if(T) + T.visible_message(SPAN_WARNING("The ceiling above looks as if it's being pried off.")) + if (!do_after(user, (C.toolspeed * 10) SECONDS, src, DO_REPAIR_CONSTRUCT)) + return TRUE + if (!istype(src, /turf/simulated/floor)) + return TRUE + if (!broken && !burnt || !(is_plating())) + return TRUE + visible_message(SPAN_WARNING("[user] has pried off the damaged plating.")) + new /obj/item/stack/tile/floor(src) + ReplaceWithLattice() + playsound(src, 'sound/items/Deconstruct.ogg', 80, 1) + if(T) + T.visible_message(SPAN_DANGER("The ceiling above has been pried off!")) + return TRUE + + else if(C.tool_behaviour == TOOL_WELDER) + if(!C.tool_start_check(user, 2)) + return TRUE + if(!is_plating()) + return TRUE if(broken || burnt) - playsound(src, 'sound/items/Crowbar.ogg', 80, 1) - visible_message(SPAN_NOTICE("[user] has begun prying off the damaged plating.")) - var/turf/T = GetBelow(src) - if(T) - T.visible_message(SPAN_WARNING("The ceiling above looks as if it's being pried off.")) - if(do_after(user, 10 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if(!istype(src, /turf/simulated/floor)) - return - if(!broken && !burnt || !(is_plating())) - return - visible_message(SPAN_WARNING("[user] has pried off the damaged plating.")) - new /obj/item/stack/tile/floor(src) - src.ReplaceWithLattice() - playsound(src, 'sound/items/Deconstruct.ogg', 80, 1) - if(T) - T.visible_message(SPAN_DANGER("The ceiling above has been pried off!")) - else - return - return - else if(isWelder(C)) - var/obj/item/weldingtool/welder = C - if(welder.isOn() && (is_plating())) - if(broken || burnt) - if(welder.remove_fuel(0, user)) - to_chat(user, SPAN_NOTICE("You fix some dents on the broken plating.")) - playsound(src, 'sound/items/Welder.ogg', 80, 1) - icon_state = "plating" - burnt = null - broken = null - return - else - if(welder.remove_fuel(0, user)) - playsound(src, 'sound/items/Welder.ogg', 80, 1) - visible_message(SPAN_NOTICE("[user] has started melting the plating's reinforcements!")) - if(do_after(user, 5 SECONDS, src, DO_REPAIR_CONSTRUCT) && welder.isOn() && welder_melt()) - visible_message(SPAN_WARNING("[user] has melted the plating's reinforcements! It should be possible to pry it off.")) - playsound(src, 'sound/items/Welder.ogg', 80, 1) - return - else if(istype(C, /obj/item/gun/energy/plasmacutter) && (is_plating()) && !broken && !burnt) - var/obj/item/gun/energy/plasmacutter/cutter = C - if(!cutter.slice(user)) - return ..() - playsound(src, 'sound/items/Welder.ogg', 80, 1) - visible_message(SPAN_NOTICE("[user] has started slicing through the plating's reinforcements!")) - if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE) && welder_melt()) - visible_message(SPAN_WARNING("[user] has sliced through the plating's reinforcements! It should be possible to pry it off.")) + if(!C.use_as_tool(src, user, amount = 2, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE + USE_FEEDBACK_REPAIR_FINISH(user) playsound(src, 'sound/items/Welder.ogg', 80, 1) + icon_state = "plating" + burnt = null + broken = null + return TRUE + + visible_message(SPAN_NOTICE("[user] has started melting the plating's reinforcements!")) + if(!C.use_as_tool(src, user, 5 SECONDS, 2, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || !welder_melt()) + return TRUE + visible_message(SPAN_WARNING("[user] has melted the plating's reinforcements! It should be possible to pry it off.")) + return TRUE return ..() diff --git a/code/game/turfs/simulated/floor_icon.dm b/code/game/turfs/simulated/floor_icon.dm index f28299dc649b9..f3551fa7656d6 100644 --- a/code/game/turfs/simulated/floor_icon.dm +++ b/code/game/turfs/simulated/floor_icon.dm @@ -27,7 +27,7 @@ var/global/list/flooring_cache = list() flooring_override = icon_state // Apply edges, corners, and inner corners. - overlays.Cut() + ClearOverlays() var/has_border = 0 //Check the cardinal turfs for(var/step_dir in GLOB.cardinal) @@ -39,26 +39,29 @@ var/global/list/flooring_cache = list() has_border |= step_dir //Now, if we don't, then lets add a border - overlays |= get_flooring_overlay("[flooring.icon]_[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir, (flooring.flags & TURF_HAS_EDGES)) + var/floor_overlay = get_flooring_overlay("[flooring.icon]_[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir, (flooring.flags & TURF_HAS_EDGES)) + AddOverlays(floor_overlay) has_smooth = ~(has_border & (NORTH | SOUTH | EAST | WEST)) if(flooring.can_paint && decals && length(decals)) - overlays |= decals + AddOverlays(decals) //We can only have inner corners if we're smoothed with something if (has_smooth && flooring.flags & TURF_HAS_INNER_CORNERS) for(var/direction in GLOB.cornerdirs) if((has_smooth & direction) == direction) if(!flooring.symmetric_test_link(src, get_step(src, direction))) - overlays |= get_flooring_overlay("[flooring.icon]_[flooring.icon_base]-corner-[direction]", "[flooring.icon_base]_corners", direction) + var/floor_overlay = get_flooring_overlay("[flooring.icon]_[flooring.icon_base]-corner-[direction]", "[flooring.icon_base]_corners", direction) + AddOverlays(floor_overlay) //Next up, outer corners if (has_border && flooring.flags & TURF_HAS_CORNERS) for(var/direction in GLOB.cornerdirs) if((has_border & direction) == direction) if(!flooring.symmetric_test_link(src, get_step(src, direction))) - overlays |= get_flooring_overlay("[flooring.icon]_[flooring.icon_base]-edge-[direction]", "[flooring.icon_base]_edges", direction,(flooring.flags & TURF_HAS_EDGES)) + var/floor_overlay = get_flooring_overlay("[flooring.icon]_[flooring.icon_base]-edge-[direction]", "[flooring.icon_base]_edges", direction,(flooring.flags & TURF_HAS_EDGES)) + AddOverlays(floor_overlay) /* //Now lets handle those fancy floors which have many centre icons @@ -73,22 +76,22 @@ var/global/list/flooring_cache = list() if(decals && length(decals)) for(var/image/I in decals) - if(I.layer != DECAL_PLATING_LAYER) + if (floor(I.layer) != floor(layer)) continue - overlays |= I + AddOverlays(I) if(is_plating() && !(isnull(broken) && isnull(burnt))) //temp, todo icon = 'icons/turf/flooring/plating.dmi' icon_state = "dmg[rand(1,4)]" else if(flooring) if(!isnull(broken) && (flooring.flags & TURF_CAN_BREAK)) - overlays |= get_damage_overlay("broken[broken]", BLEND_MULTIPLY) + AddOverlays(get_damage_overlay("broken[broken]", BLEND_MULTIPLY)) if(!isnull(burnt) && (flooring.flags & TURF_CAN_BURN)) - overlays |= get_damage_overlay("burned[burnt]") + AddOverlays(get_damage_overlay("burned[burnt]")) queue_ao(FALSE) if(update_neighbors) - for(var/turf/simulated/floor/F in orange(src, 1)) + for(var/turf/simulated/floor/F in ORANGE_TURFS(src, 1)) F.queue_ao(FALSE) F.update_icon() diff --git a/code/game/turfs/simulated/floor_static.dm b/code/game/turfs/simulated/floor_static.dm index 9430cf51d17ba..5a90bb2d25920 100644 --- a/code/game/turfs/simulated/floor_static.dm +++ b/code/game/turfs/simulated/floor_static.dm @@ -8,7 +8,7 @@ initial_flooring = null footstep_type = /singleton/footsteps/plating -/turf/simulated/floor/fixed/attackby(obj/item/C, mob/user) +/turf/simulated/floor/fixed/use_tool(obj/item/C, mob/living/user, list/click_params) if(istype(C, /obj/item/stack) && !isCoil(C)) return return ..() @@ -28,14 +28,12 @@ icon = 'icons/turf/flooring/alium.dmi' icon_state = "jaggy" -/turf/simulated/floor/fixed/alium/attackby(obj/item/C, mob/user) - if(isCrowbar(C)) - to_chat(user, SPAN_NOTICE("There aren't any openings big enough to pry it away...")) - return - return ..() +/turf/simulated/floor/fixed/alium/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + to_chat(user, SPAN_NOTICE("There aren't any openings big enough to pry it away...")) -/turf/simulated/floor/fixed/alium/New() - ..() +/turf/simulated/floor/fixed/alium/Initialize(mapload, added_to_area_cache) + . = ..() var/material/A = SSmaterials.get_material_by_name(MATERIAL_ALIENALLOY) if(!A) return @@ -43,10 +41,6 @@ var/style = A.hardness % 2 ? "curvy" : "jaggy" icon_state = "[style][(x*y) % 7]" -/turf/simulated/floor/fixed/alium/airless - initial_gas = null - temperature = TCMB - /turf/simulated/floor/fixed/alium/ex_act(severity) var/material/A = SSmaterials.get_material_by_name(MATERIAL_ALIENALLOY) if(prob(A.explosion_resistance)) diff --git a/code/game/turfs/simulated/footsteps.dm b/code/game/turfs/simulated/footsteps.dm index 02cbea987a882..ac1350d6aeff7 100644 --- a/code/game/turfs/simulated/footsteps.dm +++ b/code/game/turfs/simulated/footsteps.dm @@ -48,12 +48,12 @@ if(!has_footsteps()) return - //every other turf makes a sound + //every other turf makes a sound if((step_count % 2) && MOVING_QUICKLY(src)) return // don't need to step as often when you hop around - if((step_count % 3) && !has_gravity(src)) + if((step_count % 3) && !has_gravity()) return if(istype(move_intent, /singleton/move_intent/creep)) //We don't make sounds if we're tiptoeing diff --git a/code/game/turfs/simulated/turf_ocean.dm b/code/game/turfs/simulated/turf_ocean.dm index d841c301a3022..f91aa3f7c6528 100644 --- a/code/game/turfs/simulated/turf_ocean.dm +++ b/code/game/turfs/simulated/turf_ocean.dm @@ -26,7 +26,7 @@ /turf/simulated/ocean/proc/add_decal() return prob(20) -/turf/simulated/ocean/Initialize() +/turf/simulated/ocean/Initialize(mapload, added_to_area_cache) . = ..() if(isnull(detail_decal) && add_decal()) detail_decal = "asteroid[rand(0,9)]" @@ -35,4 +35,4 @@ /turf/simulated/ocean/on_update_icon(update_neighbors) ..(update_neighbors) if(detail_decal) - overlays += image(icon = 'icons/turf/mining_decals.dmi', icon_state = detail_decal) + AddOverlays(image(icon = 'icons/turf/mining_decals.dmi', icon_state = detail_decal)) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index 8f3347b4f4b2c..31475bb9da8d9 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -8,7 +8,7 @@ if(density) can_open = WALL_OPENING - //flick("[material.icon_base]fwall_opening", src) + //flick("[material.wall_icon_base]fwall_opening", src) sleep(15) set_density(0) set_opacity(0) @@ -22,14 +22,14 @@ SSair.mark_for_update(turf) else can_open = WALL_OPENING - //flick("[material.icon_base]fwall_closing", src) + //flick("[material.wall_icon_base]fwall_closing", src) set_density(1) set_opacity(1) blocks_air = AIR_BLOCKED update_icon() update_air() sleep(15) - set_light(0.4, 0.1, 1) + set_light(1, 0.4) src.blocks_air = 1 set_opacity(1) for(var/turf/simulated/turf in loc) @@ -57,11 +57,11 @@ /turf/simulated/wall/proc/fail_smash(mob/user) - to_chat(user, SPAN_DANGER("You smash against \the [src]!")) + to_chat(user, SPAN_DANGER("You smash against [src]!")) damage_health(rand(25, 75), DAMAGE_BRUTE) /turf/simulated/wall/proc/success_smash(mob/user) - to_chat(user, SPAN_DANGER("You smash through \the [src]!")) + to_chat(user, SPAN_DANGER("You smash through [src]!")) user.do_attack_animation(src) kill_health() @@ -69,14 +69,14 @@ if(rotting) if(reinf_material) - to_chat(user, SPAN_DANGER("\The [reinf_material.display_name] feels porous and crumbly.")) + to_chat(user, SPAN_DANGER("[reinf_material.display_name] feels porous and crumbly.")) else - to_chat(user, SPAN_DANGER("\The [material.display_name] crumbles under your touch!")) + to_chat(user, SPAN_DANGER("[material.display_name] crumbles under your touch!")) kill_health() return 1 if(!can_open) - to_chat(user, SPAN_NOTICE("You push \the [src], but nothing happens.")) + to_chat(user, SPAN_NOTICE("You push [src], but nothing happens.")) playsound(src, hitsound, 25, 1) else toggle_open(user) @@ -84,45 +84,22 @@ /turf/simulated/wall/attack_hand(mob/user) - radiate() - add_fingerprint(user) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - var/rotting = (locate(/obj/effect/overlay/wallrot) in src) - if (MUTATION_HULK in user.mutations) - if (rotting || !prob(material.hardness)) - success_smash(user) - else - fail_smash(user) - return 1 - + var/rotting = (locate(/obj/overlay/wallrot) in src) if(iscarbon(user)) var/mob/living/carbon/M = user switch(M.a_intent) if(I_HELP) - return + return ..() if(I_DISARM, I_GRAB) try_touch(M, rotting) if(I_HURT) - var/obj/item/organ/external/organ_hand = M.organs_by_name[M.hand ? BP_L_HAND : BP_R_HAND] - if (!(organ_hand?.is_usable())) - to_chat(user, SPAN_WARNING("You can't use that hand.")) - return if(rotting && !reinf_material) - M.visible_message(SPAN_DANGER("[M.name] punches \the [src] and it crumbles!"), SPAN_DANGER("You punch \the [src] and it crumbles!")) + M.visible_message(SPAN_DANGER("[M.name] punches [src] and it crumbles!"), SPAN_DANGER("You punch [src] and it crumbles!")) kill_health() playsound(src, pick(GLOB.punch_sound), 20) - if (MUTATION_FERAL in user.mutations) - M.visible_message(SPAN_DANGER("[M.name] slams into \the [src]!"), SPAN_DANGER("You slam into \the [src]!")) - playsound(src, pick(GLOB.punch_sound), 45) - damage_health(5, DAMAGE_BRUTE) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*2) //Additional cooldown - attack_animation(user) - else - M.visible_message(SPAN_DANGER("[M.name] punches \the [src]!"), SPAN_DANGER("You punch \the [src]!")) - M.apply_damage(3, DAMAGE_BRUTE, M.hand ? BP_L_HAND : BP_R_HAND) - playsound(src, pick(GLOB.punch_sound), 40) - + return TRUE + return ..() else try_touch(user, rotting) @@ -133,7 +110,7 @@ return user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - var/rotting = (locate(/obj/effect/overlay/wallrot) in src) + var/rotting = (locate(/obj/overlay/wallrot) in src) if(!damage || !wallbreaker) try_touch(user, rotting) return @@ -150,106 +127,97 @@ return fail_smash(user) -/turf/simulated/wall/attackby(obj/item/W, mob/user) - +/turf/simulated/wall/use_tool(obj/item/W, mob/living/user, list/click_params) var/area/A = get_area(src) if (!A.can_modify_area()) - to_chat(user, SPAN_NOTICE("\The [src] deflects all attempts to interact with it!")) - return + to_chat(user, SPAN_NOTICE("[src] deflects all attempts to interact with it!")) + return TRUE user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) if(!construction_stage && try_graffiti(user, W)) - return + return TRUE if (!user.IsAdvancedToolUser()) to_chat(user, SPAN_WARNING("You don't have the dexterity to do this!")) - return + return TRUE + + if(!istype(user.loc, /turf)) + return ..() - //get the user's location - if(!istype(user.loc, /turf)) return //can't do this stuff whilst inside objects and such - - if(W) - radiate() - if(is_hot(W)) - burn(is_hot(W)) - - if(locate(/obj/effect/overlay/wallrot) in src) - if(isWelder(W)) - var/obj/item/weldingtool/WT = W - if( WT.remove_fuel(0,user) ) - to_chat(user, SPAN_NOTICE("You burn away the fungi with \the [WT].")) - playsound(src, 'sound/items/Welder.ogg', 10, 1) - for(var/obj/effect/overlay/wallrot/WR in src) - qdel(WR) - return + radiate() + var/heat_value = W.IsHeatSource() + if (heat_value) + burn(heat_value) + + if(locate(/obj/overlay/wallrot) in src) + if(W.tool_behaviour == TOOL_WELDER) + if(!W.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE + to_chat(user, SPAN_NOTICE("You burn away the fungi with [W].")) + for(var/obj/overlay/wallrot/WR in src) + qdel(WR) + return TRUE else if(!is_sharp(W) && W.force >= 10 || W.force >= 20) - to_chat(user, SPAN_NOTICE("\The [src] crumbles away under the force of your [W.name].")) + to_chat(user, SPAN_NOTICE("[src] crumbles away under the force of your [W].")) kill_health() - return + return TRUE //THERMITE related stuff. Calls src.thermitemelt() which handles melting simulated walls and the relevant effects if(thermite) - if(isWelder(W)) - var/obj/item/weldingtool/WT = W - if( WT.remove_fuel(0,user) ) - thermitemelt(user) - return - - else if(istype(W, /obj/item/gun/energy/plasmacutter)) + if(W.tool_behaviour == TOOL_WELDER) + if(!W.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE thermitemelt(user) - return + return TRUE else if( istype(W, /obj/item/melee/energy/blade) ) var/obj/item/melee/energy/blade/EB = W - EB.spark_system.start() - to_chat(user, SPAN_NOTICE("You slash \the [src] with \the [EB]; the thermite ignites!")) + to_chat(user, SPAN_NOTICE("You slash [src] with [W]; the thermite ignites!")) playsound(src, "sparks", 50, 1) playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - thermitemelt(user) - return + return TRUE var/turf/T = user.loc //get user's location for delay checks var/damage = get_damage_value() - if(damage && istype(W, /obj/item/weldingtool)) - - var/obj/item/weldingtool/WT = W - - if(WT.remove_fuel(0,user)) - to_chat(user, SPAN_NOTICE("You start repairing the damage to [src].")) - playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(do_after(user, max(5, damage / 5), src, DO_REPAIR_CONSTRUCT) && WT && WT.isOn()) - to_chat(user, SPAN_NOTICE("You finish repairing the damage to [src].")) - restore_health(damage) - return + if(damage && W.tool_behaviour == TOOL_WELDER) + if(!W.tool_start_check(user, 2)) + return + USE_FEEDBACK_REPAIR_START(user) + to_chat(user, SPAN_NOTICE("You start repairing the damage to [src].")) + if(!W.use_as_tool(src, user, (max(5, damage / 5)) SECONDS, 2, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + USE_FEEDBACK_REPAIR_FINISH(user) + restore_health(damage) + return TRUE // Basic dismantling. if(isnull(construction_stage) || !reinf_material) - var/cut_delay = 60 - material.cut_delay var/dismantle_verb var/dismantle_sound var/strict_timer_flags = FALSE - if(istype(W,/obj/item/weldingtool)) - var/obj/item/weldingtool/WT = W - if(!WT.remove_fuel(0,user)) - return + if(istype(W, /obj/item/weldingtool)) + if(!W.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE dismantle_verb = "cutting" dismantle_sound = 'sound/items/Welder.ogg' cut_delay *= 0.7 + else if(istype(W,/obj/item/melee/energy/blade) || istype(W,/obj/item/psychic_power/psiblade/master) || istype(W, /obj/item/gun/energy/plasmacutter)) if(istype(W, /obj/item/gun/energy/plasmacutter)) var/obj/item/gun/energy/plasmacutter/cutter = W if(!cutter.slice(user)) - return + return TRUE dismantle_sound = "sparks" dismantle_verb = "slicing" cut_delay *= 0.5 strict_timer_flags = TRUE + else if(istype(W,/obj/item/pickaxe)) var/obj/item/pickaxe/P = W dismantle_verb = P.drill_verb @@ -258,8 +226,7 @@ strict_timer_flags = TRUE if(dismantle_verb) - - to_chat(user, SPAN_NOTICE("You begin [dismantle_verb] through the outer plating.")) + USE_FEEDBACK_DECONSTRUCT_START(user) if(dismantle_sound) playsound(src, dismantle_sound, 100, 1) @@ -268,157 +235,137 @@ if (do_after(user, cut_delay, src, strict_timer_flags ? DO_PUBLIC_UNIQUE : DO_REPAIR_CONSTRUCT)) dismantle_wall() - user.visible_message(SPAN_WARNING("\The [src] was torn open by [user]!"), SPAN_NOTICE("You remove the outer plating.")) - return - else - return + user.visible_message(SPAN_WARNING("[src] was torn open by [user]!"), SPAN_NOTICE("You remove the outer plating.")) + return TRUE //Reinforced dismantling. else switch(construction_stage) if(6) - if(istype(W, /obj/item/psychic_power/psiblade/master/grand/paramount)) - - to_chat(user, SPAN_NOTICE("You sink \the [W] into the wall and begin trying to rip out the support frame...")) + to_chat(user, SPAN_NOTICE("You sink [W] into the wall and begin trying to rip out the support frame...")) playsound(src, 'sound/items/Welder.ogg', 100, 1) if(!do_after(user, 6 SECONDS, src, DO_PUBLIC_UNIQUE)) - return + return TRUE to_chat(user, SPAN_NOTICE("You tear through the wall's support system and plating!")) kill_health() user.visible_message(SPAN_WARNING("The wall was torn open by [user]!")) playsound(src, 'sound/items/Welder.ogg', 100, 1) + return TRUE - else if(isWirecutter(W)) - + else if(W.tool_behaviour == TOOL_WIRECUTTER) playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) construction_stage = 5 new /obj/item/stack/material/rods( src ) to_chat(user, SPAN_NOTICE("You cut the outer grille.")) update_icon() - return + return TRUE if(5) - if(isScrewdriver(W)) + if(W.tool_behaviour == TOOL_SCREWDRIVER) to_chat(user, SPAN_NOTICE("You begin removing the support lines.")) - playsound(src, 'sound/items/Screwdriver.ogg', 100, 1) - if(!do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT) || construction_stage != 5) - return + if(!W.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || construction_stage != 5) + return TRUE construction_stage = 4 update_icon() to_chat(user, SPAN_NOTICE("You remove the support lines.")) - return + return TRUE else if( istype(W, /obj/item/stack/material/rods) ) var/obj/item/stack/O = W - if(O.use(1)) - construction_stage = 6 - update_icon() - to_chat(user, SPAN_NOTICE("You replace the outer grille.")) - return + if (!O.can_use(1)) + USE_FEEDBACK_STACK_NOT_ENOUGH(O, user, "to replace the outer grille.") + return TRUE + O.use(1) + construction_stage = 6 + update_icon() + to_chat(user, SPAN_NOTICE("You replace the outer grille.")) + return TRUE if(4) var/cut_cover var/strict_timer_flags = FALSE if(istype(W,/obj/item/weldingtool)) - var/obj/item/weldingtool/WT = W - if(WT.remove_fuel(0,user)) - cut_cover=1 - else - return + if(!W.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE + cut_cover=1 + else if (istype(W, /obj/item/gun/energy/plasmacutter) || istype(W, /obj/item/psychic_power/psiblade/master)) if(istype(W, /obj/item/gun/energy/plasmacutter)) var/obj/item/gun/energy/plasmacutter/cutter = W if(!cutter.slice(user)) - return + return TRUE cut_cover = 1 strict_timer_flags = TRUE + if(cut_cover) to_chat(user, SPAN_NOTICE("You begin slicing through the metal cover.")) playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(!do_after(user, 6 SECONDS, src, strict_timer_flags ? DO_PUBLIC_UNIQUE : DO_REPAIR_CONSTRUCT) || construction_stage != 4) - return + if(!do_after(user, (W.toolspeed * 6) SECONDS, src, strict_timer_flags ? DO_PUBLIC_UNIQUE : DO_REPAIR_CONSTRUCT) || construction_stage != 4) + return TRUE construction_stage = 3 update_icon() to_chat(user, SPAN_NOTICE("You press firmly on the cover, dislodging it.")) - return + return TRUE if(3) - if(isCrowbar(W)) + if(W.tool_behaviour == TOOL_CROWBAR) to_chat(user, SPAN_NOTICE("You struggle to pry off the cover.")) playsound(src, 'sound/items/Crowbar.ogg', 100, 1) - if(!do_after(user, 10 SECONDS, src, DO_REPAIR_CONSTRUCT) || construction_stage != 3) - return + if(!do_after(user, (W.toolspeed * 10) SECONDS, src, DO_REPAIR_CONSTRUCT) || construction_stage != 3) + return TRUE construction_stage = 2 update_icon() to_chat(user, SPAN_NOTICE("You pry off the cover.")) - return + return TRUE if(2) - if(isWrench(W)) + if(W.tool_behaviour == TOOL_WRENCH) to_chat(user, SPAN_NOTICE("You start loosening the anchoring bolts which secure the support rods to their frame.")) playsound(src, 'sound/items/Ratchet.ogg', 100, 1) - if(!do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT) || construction_stage != 2) - return + if(!do_after(user, (W.toolspeed * 4) SECONDS, src, DO_REPAIR_CONSTRUCT) || construction_stage != 2) + return TRUE construction_stage = 1 update_icon() to_chat(user, SPAN_NOTICE("You remove the bolts anchoring the support rods.")) - return + return TRUE if(1) var/cut_cover var/strict_timer_flags = FALSE if(istype(W, /obj/item/weldingtool)) - var/obj/item/weldingtool/WT = W - if( WT.remove_fuel(0,user) ) - cut_cover=1 - else - return + if(!W.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE + cut_cover=1 + else if(istype(W, /obj/item/gun/energy/plasmacutter) || istype(W,/obj/item/psychic_power/psiblade/master)) if(istype(W, /obj/item/gun/energy/plasmacutter)) var/obj/item/gun/energy/plasmacutter/cutter = W if(!cutter.slice(user)) - return + return TRUE cut_cover = 1 strict_timer_flags = TRUE + if(cut_cover) to_chat(user, SPAN_NOTICE("You begin slicing through the support rods.")) playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(!do_after(user, 7 SECONDS, src, strict_timer_flags ? DO_PUBLIC_UNIQUE : DO_REPAIR_CONSTRUCT) || construction_stage != 1) - return + if(!do_after(user, (W.toolspeed * 7) SECONDS, src, strict_timer_flags ? DO_PUBLIC_UNIQUE : DO_REPAIR_CONSTRUCT) || construction_stage != 1) + return TRUE construction_stage = 0 update_icon() new /obj/item/stack/material/rods(src) to_chat(user, SPAN_NOTICE("The support rods drop out as you cut them loose from the frame.")) - return + return TRUE if(0) - if(isCrowbar(W)) + if(W.tool_behaviour == TOOL_CROWBAR) to_chat(user, SPAN_NOTICE("You struggle to pry off the outer sheath.")) playsound(src, 'sound/items/Crowbar.ogg', 100, 1) - if(!do_after(user, 10 SECONDS, src, DO_REPAIR_CONSTRUCT) || !W || !T ) return + if(!do_after(user, (W.toolspeed * 10) SECONDS, src, DO_REPAIR_CONSTRUCT) || !W || !T ) + return TRUE if(user.loc == T && user.get_active_hand() == W ) to_chat(user, SPAN_NOTICE("You pry off the outer sheath.")) dismantle_wall() - return + return TRUE if(istype(W,/obj/item/frame)) var/obj/item/frame/F = W F.try_build(src) - return + return TRUE - else if(!istype(W,/obj/item/rcd) && !istype(W, /obj/item/reagent_containers)) - if(!W.force) - return attack_hand(user) - - if (!can_damage_health(W.force, W.damtype)) - playsound(src, hitsound, 25, 1) - user.visible_message( - SPAN_WARNING("\The [user] attacks \the [src] with \the [W], but it bounces off!"), - SPAN_WARNING("You attack \the [src] with \the [W], but it bounces off! You need something stronger."), - SPAN_WARNING("You hear the sound of something hitting a wall.") - ) - return - playsound(src, hitsound, 50, 1) - user.visible_message( - SPAN_DANGER("\The [user] attacks \the [src] with \the [W]!"), - SPAN_WARNING("You attack \the [src] with \the [W]!"), - SPAN_WARNING("You hear the sound of something hitting a wall.") - ) - damage_health(W.force, W.damtype, skip_can_damage_check = TRUE) - return + return ..() diff --git a/code/game/turfs/simulated/wall_icon.dm b/code/game/turfs/simulated/wall_icon.dm index 3c55beb0fa391..0368515cdac06 100644 --- a/code/game/turfs/simulated/wall_icon.dm +++ b/code/game/turfs/simulated/wall_icon.dm @@ -46,45 +46,45 @@ if(!damage_overlays[1]) //list hasn't been populated; note that it is always of fixed length, so we must check for membership. generate_overlays() - overlays.Cut() + ClearOverlays() var/image/I var/base_color = paint_color ? paint_color : material.icon_colour if(!density) - I = image('icons/turf/wall_masks.dmi', "[material.icon_base]fwall_open") + I = image('icons/turf/wall_masks.dmi', "[material.wall_icon_base]fwall_open") I.color = base_color - overlays += I + AddOverlays(I) return for(var/i = 1 to 4) - I = image('icons/turf/wall_masks.dmi', "[material.icon_base][wall_connections[i]]", dir = SHIFTL(1, i - 1)) + I = image('icons/turf/wall_masks.dmi', "[material.wall_icon_base][wall_connections[i]]", dir = SHIFTL(1, i - 1)) I.color = base_color - overlays += I + AddOverlays(I) if(other_connections[i] != "0") - I = image('icons/turf/wall_masks.dmi', "[material.icon_base]_other[wall_connections[i]]", dir = SHIFTL(1, i - 1)) + I = image('icons/turf/wall_masks.dmi', "[material.wall_icon_base]_other[wall_connections[i]]", dir = SHIFTL(1, i - 1)) I.color = base_color - overlays += I + AddOverlays(I) if(reinf_material) var/reinf_color = paint_color ? paint_color : reinf_material.icon_colour if(construction_stage != null && construction_stage < 6) I = image('icons/turf/wall_masks.dmi', "reinf_construct-[construction_stage]") I.color = reinf_color - overlays += I + AddOverlays(I) else - if("[reinf_material.icon_reinf]0" in icon_states('icons/turf/wall_masks.dmi')) + if(ICON_HAS_STATE('icons/turf/wall_masks.dmi', "[material.wall_icon_reinf]0")) // Directional icon for(var/i = 1 to 4) - I = image('icons/turf/wall_masks.dmi', "[reinf_material.icon_reinf][wall_connections[i]]", dir = SHIFTL(1, i - 1)) + I = image('icons/turf/wall_masks.dmi', "[material.wall_icon_reinf][wall_connections[i]]", dir = SHIFTL(1, i - 1)) I.color = reinf_color - overlays += I + AddOverlays(I) else - I = image('icons/turf/wall_masks.dmi', reinf_material.icon_reinf) + I = image('icons/turf/wall_masks.dmi', material.wall_icon_reinf) I.color = reinf_color - overlays += I + AddOverlays(I) var/image/texture = material.get_wall_texture() if(texture) - overlays += texture + AddOverlays(texture) if(stripe_color) for(var/i = 1 to 4) if(other_connections[i] != "0") @@ -92,13 +92,13 @@ else I = image('icons/turf/wall_masks.dmi', "stripe[wall_connections[i]]", dir = SHIFTL(1, i - 1)) I.color = stripe_color - overlays += I + AddOverlays(I) if(get_damage_value() != 0) var/overlay = round((get_damage_percentage() / 100) * length(damage_overlays)) + 1 overlay = clamp(overlay, 1, length(damage_overlays)) - overlays += damage_overlays[overlay] + AddOverlays(damage_overlays[overlay]) return /turf/simulated/wall/proc/generate_overlays() @@ -117,7 +117,7 @@ var/list/wall_dirs = list() var/list/other_dirs = list() - for(var/turf/simulated/wall/W in orange(src, 1)) + for(var/turf/simulated/wall/W in ORANGE_TURFS(src, 1)) switch(can_join_with(W)) if(0) continue @@ -130,7 +130,7 @@ W.update_connections() W.update_icon() - for(var/turf/T in orange(src, 1)) + for(var/turf/T as anything in ORANGE_TURFS(src, 1)) var/success = 0 for(var/obj/O in T) for(var/b_type in blend_objects) @@ -153,7 +153,7 @@ other_connections = dirs_to_corner_states(other_dirs) /turf/simulated/wall/proc/can_join_with(turf/simulated/wall/W) - if(material && W.material && material.icon_base == W.material.icon_base) + if(material && W.material && material.wall_icon_base == W.material.wall_icon_base) if((reinf_material && W.reinf_material) || (!reinf_material && !W.reinf_material)) return 1 return 2 diff --git a/code/game/turfs/simulated/wall_shuttle.dm b/code/game/turfs/simulated/wall_shuttle.dm index f52876b1246bf..64296447003c7 100644 --- a/code/game/turfs/simulated/wall_shuttle.dm +++ b/code/game/turfs/simulated/wall_shuttle.dm @@ -15,8 +15,8 @@ var/corner_overlay_state = "diagonalWall" var/image/corner_overlay -/turf/simulated/shuttle/wall/corner/New() - ..() +/turf/simulated/shuttle/wall/corner/Initialize(mapload, added_to_area_cache) + . = ..() reset_base_appearance() reset_overlay() @@ -30,12 +30,12 @@ /turf/simulated/shuttle/wall/corner/proc/reset_overlay() if(corner_overlay) - overlays -= corner_overlay + CutOverlays(corner_overlay) else corner_overlay = image(icon = 'icons/turf/shuttle.dmi', icon_state = corner_overlay_state, dir = src.dir) corner_overlay.plane = plane corner_overlay.layer = layer - overlays += corner_overlay + AddOverlays(corner_overlay) //Predefined Shuttle Corners /turf/simulated/shuttle/wall/corner/smoothwhite diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index 65b5f490f0666..001a90c878e75 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -8,8 +8,8 @@ /turf/simulated/wall/r_wall icon_state = "r_generic" -/turf/simulated/wall/r_wall/New(newloc) - ..(newloc, MATERIAL_STEEL,MATERIAL_PLASTEEL) //3strong +/turf/simulated/wall/r_wall/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_STEEL, MATERIAL_PLASTEEL) /turf/simulated/wall/r_wall/hull name = "hull" @@ -24,7 +24,7 @@ /turf/simulated/wall/r_wall/prepainted paint_color = COLOR_WALL_GUNMETAL -/turf/simulated/wall/r_wall/hull/Initialize() +/turf/simulated/wall/r_wall/hull/Initialize(mapload, added_to_area_cache, materialtype, rmaterialtype) . = ..() paint_color = color color = null //color is just for mapping @@ -44,112 +44,112 @@ /turf/simulated/wall/titanium icon_state = "titanium" -/turf/simulated/wall/titanium/New(newloc) - ..(newloc,MATERIAL_TITANIUM) +/turf/simulated/wall/titanium/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_TITANIUM) /turf/simulated/wall/r_titanium icon_state = "r_titanium" -/turf/simulated/wall/r_titanium/New(newloc) - ..(newloc, MATERIAL_TITANIUM,MATERIAL_TITANIUM) +/turf/simulated/wall/r_titanium/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_TITANIUM, MATERIAL_TITANIUM) /turf/simulated/wall/ocp_wall icon_state = "r_ocp" -/turf/simulated/wall/ocp_wall/New(newloc) - ..(newloc, MATERIAL_OSMIUM_CARBIDE_PLASTEEL, MATERIAL_OSMIUM_CARBIDE_PLASTEEL) +/turf/simulated/wall/ocp_wall/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_OSMIUM_CARBIDE_PLASTEEL, MATERIAL_OSMIUM_CARBIDE_PLASTEEL) //Material walls -/turf/simulated/wall/r_wall/rglass_wall/New(newloc) - ..(newloc, MATERIAL_GLASS, MATERIAL_STEEL) +/turf/simulated/wall/r_wall/rglass_wall/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_GLASS, MATERIAL_STEEL) icon_state = "r_generic" -/turf/simulated/wall/iron/New(newloc) - ..(newloc,MATERIAL_IRON) +/turf/simulated/wall/iron/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_IRON) -/turf/simulated/wall/uranium/New(newloc) - ..(newloc,MATERIAL_URANIUM) +/turf/simulated/wall/uranium/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_URANIUM) -/turf/simulated/wall/diamond/New(newloc) - ..(newloc,MATERIAL_DIAMOND) +/turf/simulated/wall/diamond/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_DIAMOND) -/turf/simulated/wall/gold/New(newloc) - ..(newloc,MATERIAL_GOLD) +/turf/simulated/wall/gold/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_GOLD) -/turf/simulated/wall/silver/New(newloc) - ..(newloc,MATERIAL_SILVER) +/turf/simulated/wall/silver/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_SILVER) -/turf/simulated/wall/phoron/New(newloc) - ..(newloc,MATERIAL_PHORON) +/turf/simulated/wall/phoron/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_PHORON) -/turf/simulated/wall/sandstone/New(newloc) - ..(newloc,MATERIAL_SANDSTONE) +/turf/simulated/wall/sandstone/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_SANDSTONE) -/turf/simulated/wall/rutile/New(newloc) - ..(newloc,MATERIAL_RUTILE) +/turf/simulated/wall/rutile/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_RUTILE) /turf/simulated/wall/wood blend_turfs = list(/turf/simulated/wall/cult, /turf/simulated/wall) icon_state = "woodneric" -/turf/simulated/wall/wood/New(newloc) - ..(newloc,MATERIAL_WOOD) +/turf/simulated/wall/wood/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_WOOD) /turf/simulated/wall/mahogany blend_turfs = list(/turf/simulated/wall/cult, /turf/simulated/wall) icon_state = "woodneric" -/turf/simulated/wall/mahogany/New(newloc) - ..(newloc,MATERIAL_MAHOGANY) +/turf/simulated/wall/mahogany/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_MAHOGANY) /turf/simulated/wall/maple blend_turfs = list(/turf/simulated/wall/cult, /turf/simulated/wall) icon_state = "woodneric" -/turf/simulated/wall/maple/New(newloc) - ..(newloc,MATERIAL_MAPLE) +/turf/simulated/wall/maple/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_MAPLE) /turf/simulated/wall/ebony blend_turfs = list(/turf/simulated/wall/cult, /turf/simulated/wall) icon_state = "woodneric" -/turf/simulated/wall/ebony/New(newloc) - ..(newloc,MATERIAL_EBONY) +/turf/simulated/wall/ebony/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_EBONY) /turf/simulated/wall/walnut blend_turfs = list(/turf/simulated/wall/cult, /turf/simulated/wall) icon_state = "woodneric" -/turf/simulated/wall/walnut/New(newloc) - ..(newloc,MATERIAL_WALNUT) +/turf/simulated/wall/walnut/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_WALNUT) -/turf/simulated/wall/ironphoron/New(newloc) - ..(newloc,MATERIAL_IRON,MATERIAL_PHORON) +/turf/simulated/wall/ironphoron/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_IRON,MATERIAL_PHORON) -/turf/simulated/wall/golddiamond/New(newloc) - ..(newloc,MATERIAL_GOLD,MATERIAL_DIAMOND) +/turf/simulated/wall/golddiamond/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_GOLD,MATERIAL_DIAMOND) -/turf/simulated/wall/silvergold/New(newloc) - ..(newloc,MATERIAL_SILVER,MATERIAL_GOLD) +/turf/simulated/wall/silvergold/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_SILVER,MATERIAL_GOLD) -/turf/simulated/wall/sandstonediamond/New(newloc) - ..(newloc,MATERIAL_SANDSTONE,MATERIAL_DIAMOND) +/turf/simulated/wall/sandstone/diamond/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_SANDSTONE,MATERIAL_DIAMOND) -/turf/simulated/wall/crystal/New(newloc) - ..(newloc,MATERIAL_CRYSTAL) +/turf/simulated/wall/crystal/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_CRYSTAL) -/turf/simulated/wall/voxshuttle/New(newloc) - ..(newloc, MATERIAL_VOX) +/turf/simulated/wall/voxshuttle + atom_flags = ATOM_FLAG_NO_TOOLS -/turf/simulated/wall/voxshuttle/attackby() - return +/turf/simulated/wall/voxshuttle/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_VOX) -/turf/simulated/wall/growth/New(newloc) - ..(newloc, MATERIAL_GROWTH) +/turf/simulated/wall/growth/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_GROWTH) -/turf/simulated/wall/concrete/New(newloc) - ..(newloc,MATERIAL_CONCRETE) +/turf/simulated/wall/concrete/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_CONCRETE) //Alien metal walls /turf/simulated/wall/alium @@ -157,26 +157,26 @@ floor_type = /turf/simulated/floor/fixed/alium blend_objects = newlist() -/turf/simulated/wall/alium/New(newloc) - ..(newloc,MATERIAL_ALIENALLOY) +/turf/simulated/wall/alium/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, MATERIAL_ALIENALLOY) //Cult wall /turf/simulated/wall/cult icon_state = "cult" blend_turfs = list(/turf/simulated/wall) -/turf/simulated/wall/cult/New(newloc, reinforce = 0) - ..(newloc, MATERIAL_CULT, reinforce ? MATERIAL_REINFORCED_CULT : null) +/turf/simulated/wall/cult/Initialize(mapload, added_to_area_cache, reinforce = FALSE) + . = ..(mapload, added_to_area_cache, MATERIAL_CULT, reinforce ? MATERIAL_REINFORCED_CULT : null) -/turf/simulated/wall/cult/reinf/New(newloc) - ..(newloc, 1) +/turf/simulated/wall/cult/reinf/Initialize(mapload, added_to_area_cache) + . = ..(mapload, added_to_area_cache, TRUE) /turf/simulated/wall/cult/dismantle_wall() GLOB.cult.remove_cultiness(CULTINESS_PER_TURF) ..() /turf/simulated/wall/cult/can_join_with(turf/simulated/wall/W) - if(material && W.material && material.icon_base == W.material.icon_base) + if(material && W.material && material.wall_icon_base == W.material.wall_icon_base) return 1 else if(istype(W, /turf/simulated/wall)) return 1 diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 8e2027486e938..5337aba4c6e08 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -26,11 +26,11 @@ var/stripe_color var/static/list/wall_stripe_cache = list() var/list/blend_turfs = list(/turf/simulated/wall/cult, /turf/simulated/wall/wood, /turf/simulated/wall/walnut, /turf/simulated/wall/maple, /turf/simulated/wall/mahogany, /turf/simulated/wall/ebony) - var/list/blend_objects = list(/obj/machinery/door, /obj/structure/wall_frame, /obj/structure/grille, /obj/structure/window/reinforced/full, /obj/structure/window/reinforced/polarized/full, /obj/structure/window/shuttle, ,/obj/structure/window/phoronbasic/full, /obj/structure/window/phoronreinforced/full) // Objects which to blend with + var/list/blend_objects = list(/obj/machinery/door, /obj/structure/wall_frame, /obj/structure/grille, /obj/structure/window/reinforced/full, /obj/structure/window/reinforced/polarized/full, /obj/structure/window/shuttle, ,/obj/structure/window/boron_basic/full, /obj/structure/window/boron_reinforced/full) // Objects which to blend with var/list/noblend_objects = list(/obj/machinery/door/window) //Objects to avoid blending with (such as children of listed blend objects.) -/turf/simulated/wall/New(newloc, materialtype, rmaterialtype) - ..(newloc) +/turf/simulated/wall/Initialize(mapload, added_to_area_cache, materialtype, rmaterialtype) + . = ..() icon_state = "blank" if(!materialtype) materialtype = DEFAULT_WALL_MATERIAL @@ -39,11 +39,8 @@ reinf_material = SSmaterials.get_material_by_name(rmaterialtype) update_material() hitsound = material.hitsound - -/turf/simulated/wall/Initialize() - set_extension(src, /datum/extension/penetration/proc_call, .proc/CheckPenetration) + set_extension(src, /datum/extension/penetration/proc_call, PROC_REF(CheckPenetration)) START_PROCESSING(SSturf, src) //Used for radiation. - . = ..() /turf/simulated/wall/Destroy() STOP_PROCESSING(SSturf, src) @@ -70,23 +67,23 @@ /turf/simulated/wall/proc/calculate_damage_data() // Health - var/max_health = material.integrity + var/max_health = material.integrity * 1.5 if (reinf_material) - max_health += round(reinf_material.integrity / 2) + max_health += round(reinf_material.integrity * 0.75) set_max_health(max_health) // Minimum force required to damage the wall - health_min_damage = material.hardness * 1.5 + health_min_damage = material.hardness * 2.6 if (reinf_material) - health_min_damage += round(reinf_material.hardness * 1.5) + health_min_damage += round(reinf_material.hardness * 1.9) health_min_damage = round(health_min_damage / 10) // Brute and burn armor - var/brute_armor = material.brute_armor * 0.2 - var/burn_armor = material.burn_armor * 0.2 + var/brute_armor = material.brute_armor * 0.4 + var/burn_armor = material.burn_armor * 0.4 if (reinf_material) - brute_armor += reinf_material.brute_armor * 0.2 - burn_armor += reinf_material.burn_armor * 0.2 + brute_armor += reinf_material.brute_armor * 0.4 + burn_armor += reinf_material.burn_armor * 0.4 // Materials enter armor as divisors, health system uses multipliers if (brute_armor) brute_armor = round(1 / brute_armor, 0.01) @@ -103,13 +100,15 @@ if(Proj.ricochet_sounds && prob(15)) playsound(src, pick(Proj.ricochet_sounds), 100, 1) + new /obj/sparks(get_turf(Proj)) + create_bullethole(Proj)//Potentially infinite bullet holes but most walls don't last long enough for this to be a problem. ..() /turf/simulated/wall/proc/clear_plants() - for(var/obj/effect/overlay/wallrot/WR in src) + for(var/obj/overlay/wallrot/WR in src) qdel(WR) - for(var/obj/effect/vine/plant in range(src, 1)) + for(var/obj/vine/plant in range(src, 1)) if(!plant.floor) //shrooms drop to the floor plant.floor = 1 plant.update_icon() @@ -118,6 +117,7 @@ /turf/simulated/wall/ChangeTurf(newtype, tell_universe = TRUE, force_lighting_update = FALSE, keep_air = FALSE) clear_plants() + clear_bulletholes() . = ..(newtype, tell_universe, force_lighting_update, keep_air) var/turf/new_turf = . for (var/turf/simulated/wall/W in RANGE_TURFS(new_turf, 1)) @@ -129,11 +129,10 @@ //Appearance /turf/simulated/wall/examine(mob/user) . = ..() - if(paint_color) - to_chat(user, SPAN_NOTICE("It has a coat of paint applied.")) - if(locate(/obj/effect/overlay/wallrot) in src) - to_chat(user, SPAN_WARNING("There is fungus growing on [src].")) + . += SPAN_NOTICE("It has a coat of paint applied.") + if(locate(/obj/overlay/wallrot) in src) + . += SPAN_WARNING("There is fungus growing on [src].") //Damage @@ -160,7 +159,7 @@ /turf/simulated/wall/get_max_health() . = ..() - if (locate(/obj/effect/overlay/wallrot) in src) + if (locate(/obj/overlay/wallrot) in src) . = round(. / 10) /turf/simulated/wall/post_health_change(damage, prior_health, damage_type) @@ -201,6 +200,7 @@ O.forceMove(src) clear_plants() + clear_bulletholes() material = SSmaterials.get_material_by_name("placeholder") reinf_material = null update_connections(1) @@ -209,11 +209,11 @@ // Wall-rot effect, a nasty fungus that destroys walls. /turf/simulated/wall/proc/rot() - if(locate(/obj/effect/overlay/wallrot) in src) + if(locate(/obj/overlay/wallrot) in src) return var/number_rots = rand(2,3) for(var/i=0, i 2 && src.x < (world.maxx - 1) && src.y > 2 && src.y < (world.maxy-1))) - var/mob/M = A - if(M.Allow_Spacemove(1)) //if this mob can control their own movement in space then they shouldn't be drifting - M.inertia_dir = 0 - return - spawn(5) - if(M && !(M.anchored) && !(M.pulledby) && (M.loc == src)) - if(!M.inertia_dir) - M.inertia_dir = M.last_move - step(M, M.inertia_dir) - return - /turf/proc/levelupdate() for(var/obj/O in src) O.hide(O.hides_under_flooring() && !is_plating()) /turf/proc/AdjacentTurfs(check_blockage = TRUE) . = list() - for(var/turf/t in (trange(1,src) - src)) + for(var/turf/t as anything in ORANGE_TURFS(src, 1)) if(check_blockage) if(!t.density) if(!LinkBlocked(src, t) && !TurfBlockedNonWindow(t)) @@ -292,8 +323,8 @@ var/global/const/enterloopsanity = 100 source.reagents.trans_to_turf(src, 1, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly. /turf/proc/remove_cleanables(skip_blood = TRUE) - for(var/obj/effect/O in src) - if(istype(O,/obj/effect/rune) || (istype(O,/obj/effect/decal/cleanable) && (!skip_blood || !istype(O, /obj/effect/decal/cleanable/blood)))) + for(var/obj/O in src) + if(istype(O,/obj/rune) || (istype(O,/obj/decal/cleanable) && (!skip_blood || !istype(O, /obj/decal/cleanable/blood)))) qdel(O) /turf/proc/update_blood_overlays() @@ -313,12 +344,15 @@ var/global/const/enterloopsanity = 100 if(length(M.pinned)) return - var/intial_dir = TT.init_dir - spawn(2) - step(AM, turn(intial_dir, 180)) + if(M.pinned) + return + addtimer(CALLBACK(src, TYPE_PROC_REF(/turf, bounce_off), AM, TT.init_dir), 2) ..() +/turf/proc/bounce_off(atom/movable/AM, direction) + step(AM, turn(direction, 180)) + /turf/proc/can_engrave() return FALSE @@ -332,7 +366,7 @@ var/global/const/enterloopsanity = 100 return var/too_much_graffiti = 0 - for(var/obj/effect/decal/writing/W in src) + for(var/obj/decal/writing/W in src) too_much_graffiti++ if(too_much_graffiti >= 5) to_chat(vandal, SPAN_WARNING("There's too much graffiti here to add more.")) @@ -351,7 +385,7 @@ var/global/const/enterloopsanity = 100 return FALSE vandal.visible_message(SPAN_DANGER("\The [vandal] carves some graffiti into \the [src].")) - var/obj/effect/decal/writing/graffiti = new(src) + var/obj/decal/writing/graffiti = new(src) graffiti.message = message graffiti.author = vandal.ckey vandal.update_personal_goal(/datum/goal/achievement/graffiti, TRUE) @@ -449,3 +483,60 @@ var/global/const/enterloopsanity = 100 /turf/proc/IgniteTurf(power, fire_colour) return + +//Maybe we want to make this stateful at some point +/turf/proc/is_outside() + + //For the purposes of light, dense turfs should not be considered to be outside + if(density) + return FALSE + + var/area/A = get_area(src) + if(A.area_flags & AREA_FLAG_EXTERNAL) + return TRUE + +/turf/proc/change_area(area/new_area) + if(!istype(new_area)) + CRASH("Area change attempt failed: invalid area supplied.") + + var/area/old_area = get_area(src) + if(old_area == new_area) + return + + old_area.remove_turf_from_cache(src) + for(var/atom/movable/AM in src) + old_area.Exited(AM, new_area) // Note: this _will_ raise exited events. + + new_area.contents += src + new_area.add_turf_to_cache(src) + + for(var/atom/movable/AM in src) + new_area.Entered(AM, old_area) // Note: this will _not_ raise moved or entered events. If you change this, you must also change everything which uses them. + if(istype(AM, /obj/machinery)) + var/obj/machinery/machinery_to_update = AM + machinery_to_update.area_changed(old_area, new_area) // They usually get moved events, but this is the one way an area can change without triggering one. + + //TODO: CitRP has some concept of outside based on turfs above. We don't really have any use cases right now, revisit this function if this changes + +/turf/proc/remove_starlight() + if(!starlit) + return + + replace_ambient_light(SSskybox.background_color, null, config.starlight, 0) + starlit = FALSE + +/turf/proc/update_starlight() + if(!config.starlight || !permit_starlight) + return + + //We only need starlight on turfs adjacent to dynamically lit turfs, for example space near bulkhead + for (var/turf/T as anything in RANGE_TURFS(src, 1)) + if (!isloc(T.loc) || !TURF_IS_DYNAMICALLY_LIT_UNSAFE(T)) + continue + + add_ambient_light(SSskybox.background_color, config.starlight) + starlit = TRUE + return + + if(TURF_IS_AMBIENT_LIT_UNSAFE(src)) + remove_starlight() diff --git a/code/game/turfs/turf_ao.dm b/code/game/turfs/turf_ao.dm index 04bd73e1eb9d6..bd9b3b77adb7a 100644 --- a/code/game/turfs/turf_ao.dm +++ b/code/game/turfs/turf_ao.dm @@ -10,8 +10,7 @@ /turf/var/ao_queued = AO_UPDATE_NONE /turf/proc/regenerate_ao() - for (var/thing in RANGE_TURFS(src, 1)) - var/turf/T = thing + for (var/turf/T as anything in RANGE_TURFS(src, 1)) if (T.permit_ao) T.queue_ao(TRUE) @@ -28,6 +27,7 @@ CALCULATE_NEIGHBORS(src, ao_neighbors, T, AO_TURF_CHECK(T)) /proc/make_ao_image(corner, i, px = 0, py = 0, pz = 0, pw = 0) + RETURN_TYPE(/image) var/list/cache = SSao.image_cache var/cstr = "[corner]" var/key = "[cstr]-[i]-[px]/[py]/[pz]/[pw]" @@ -75,7 +75,7 @@ #define CUT_AO(TARGET, AO_LIST) \ if (TARGET && AO_LIST) { \ - TARGET.overlays -= AO_LIST; \ + TARGET.CutOverlays(AO_LIST); \ AO_LIST.Cut(); \ } @@ -89,7 +89,7 @@ } \ UNSETEMPTY(AO_LIST); \ if (AO_LIST) { \ - TARGET.overlays |= AO_LIST; \ + TARGET.AddOverlays(AO_LIST); \ } /turf/proc/update_ao() diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index 04c6a90cdc45e..c8fb9a4f0b73e 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -1,126 +1,144 @@ /turf/proc/ReplaceWithLattice(material) var base_turf = get_base_turf_by_area(src, TRUE) if(type != base_turf) - src.ChangeTurf(get_base_turf_by_area(src, TRUE)) + ChangeTurf(get_base_turf_by_area(src, TRUE)) + if(!locate(/obj/structure/lattice) in src) new /obj/structure/lattice(src, material) // Removes all signs of lattice on the pos of the turf -Donkieyo /turf/proc/RemoveLattice() - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - if(L) - qdel(L) + var/obj/structure/lattice/lattice_to_remove = locate() in src + QDEL_NULL(lattice_to_remove) + +// Turf specific behavior after turf change // Called after turf replaces old one /turf/proc/post_change() + SHOULD_CALL_PARENT(TRUE) + levelupdate() if (above) above.update_mimic() +// Turf specific behavior before turf change +// Called just before turf replaces old one +/turf/proc/pre_change() + SHOULD_CALL_PARENT(TRUE) + + if(connections) + connections.erase_all() + + ClearOverlays() + underlays.Cut() + + if(ambient_bitflag) //Should remove everything about current bitflag, let it be recalculated by SS later + SSambient_lighting.clean_turf(src) + +/// Replaces current turf without additional checks and copying current turf's state +/// Returns newly created turf, of itself, if invalid turf path passed +/turf/proc/force_change_turf(turf/replacement_turf_type) + if(!ispath(replacement_turf_type)) + return src + + return new replacement_turf_type(src, added_to_area_cache) + //Creates a new turf -/turf/proc/ChangeTurf(turf/N, tell_universe = TRUE, force_lighting_update = FALSE, keep_air = FALSE) - if (!N) - return +/turf/proc/ChangeTurf(turf/replacement_turf_type, tell_universe = TRUE, force_lighting_update = FALSE, keep_air = FALSE) + if(!ispath(replacement_turf_type)) + return src - if(isturf(N) && !N.flooded && N.flood_object) + if(!initial(replacement_turf_type.flooded) && initial(replacement_turf_type.flood_object)) QDEL_NULL(flood_object) // This makes sure that turfs are not changed to space when one side is part of a zone - if(N == /turf/space) - var/turf/below = GetBelow(src) - if(istype(below) && !istype(below,/turf/space)) - N = /turf/simulated/open + if(ispath(replacement_turf_type, /turf/space) || ispath(replacement_turf_type, /turf/simulated/open)) + QDEL_NULL(turf_fire) + + if(ispath(replacement_turf_type, /turf/space)) + var/turf/below = GetBelow(src) + if(istype(below) && !isspaceturf(below)) + replacement_turf_type = /turf/simulated/open var/old_density = density var/old_air = air var/old_hotspot = hotspot - var/old_turf_fire = null + var/old_turf_fire = turf_fire var/old_opacity = opacity - var/old_dynamic_lighting = dynamic_lighting + var/old_dynamic_lighting = TURF_IS_DYNAMICALLY_LIT_UNSAFE(src) var/old_affecting_lights = affecting_lights var/old_lighting_overlay = lighting_overlay var/old_corners = corners var/old_ao_neighbors = ao_neighbors var/old_above = above var/old_permit_ao = permit_ao - - if(isspaceturf(N) || isopenspace(N)) - QDEL_NULL(turf_fire) - else - old_turf_fire = turf_fire - - //log_debug("Replacing [src.type] with [N]") + var/old_zflags = z_flags changing_turf = TRUE - if(connections) connections.erase_all() - - overlays.Cut() - underlays.Cut() - if(istype(src,/turf/simulated)) - //Yeah, we're just going to rebuild the whole thing. - //Despite this being called a bunch during explosions, - //the zone will only really do heavy lifting once. - var/turf/simulated/S = src - if(S.zone) S.zone.rebuild() + pre_change() // Run the Destroy() chain. qdel(src) + var/turf/new_turf = new replacement_turf_type(src, added_to_area_cache) - var/old_opaque_counter = opaque_counter - var/turf/simulated/W = new N(src) + if(tell_universe) + GLOB.universe.OnTurfChange(new_turf) - if (permit_ao) - regenerate_ao() + for(var/turf/starlighted_turf as anything in RANGE_TURFS(new_turf, 1)) + if(starlighted_turf.permit_starlight) + starlighted_turf.update_starlight() - W.opaque_counter = old_opaque_counter - W.RecalculateOpacity() + new_turf.above = old_above - if (keep_air) - W.air = old_air + if(keep_air) + new_turf.air = old_air - if(ispath(N, /turf/simulated)) + SSair.mark_for_update(src) //handle the addition of the new turf. + + if(simulated) if(old_hotspot) hotspot = old_hotspot - if (istype(W,/turf/simulated/floor)) - W.RemoveLattice() - else if(hotspot) - qdel(hotspot) - - - if(tell_universe) - GLOB.universe.OnTurfChange(W) - - SSair.mark_for_update(src) //handle the addition of the new turf. + else + QDEL_NULL(hotspot) - for(var/turf/space/S in range(W,1)) - S.update_starlight() + new_turf.post_change() + . = new_turf - W.above = old_above + if(permit_ao) + regenerate_ao() - W.post_change() - . = W + new_turf.ao_neighbors = old_ao_neighbors + // lighting stuff - W.ao_neighbors = old_ao_neighbors - if(lighting_overlays_initialised) + if(SSlighting.initialized) + recalc_atom_opacity() lighting_overlay = old_lighting_overlay affecting_lights = old_affecting_lights corners = old_corners - if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting)) + if (old_opacity != opacity || dynamic_lighting != old_dynamic_lighting || force_lighting_update) reconsider_lights() - if(dynamic_lighting != old_dynamic_lighting) - if(dynamic_lighting) + updateVisibility(src) + + if (dynamic_lighting != old_dynamic_lighting) + if (TURF_IS_DYNAMICALLY_LIT_UNSAFE(src)) lighting_build_overlay() else lighting_clear_overlay() - for(var/turf/T in RANGE_TURFS(src, 1)) - T.update_icon() + new_turf.setup_local_ambient() + if(z_flags != old_zflags) + new_turf.rebuild_zbleed() + // end of lighting stuff + + for(var/turf/turf_to_update_icon_for as anything in RANGE_TURFS(src, 1)) + turf_to_update_icon_for.queue_icon_update() if(density != old_density) GLOB.density_set_event.raise_event(src, old_density, density) if(!density) turf_fire = old_turf_fire + else if(old_turf_fire) QDEL_NULL(old_turf_fire) @@ -131,17 +149,19 @@ updateVisibility(src, FALSE) /turf/proc/transport_properties_from(turf/other) - if(!istype(other, src.type)) - return 0 + if(!istype(other, type)) + return FALSE + src.set_dir(other.dir) src.icon_state = other.icon_state src.icon = other.icon - src.overlays = other.overlays.Copy() + CopyOverlays(other) src.underlays = other.underlays.Copy() if(other.decals) src.decals = other.decals.Copy() src.update_icon() - return 1 + + return TRUE //I would name this copy_from() but we remove the other turf from their air zone for some reason /turf/simulated/transport_properties_from(turf/simulated/other) diff --git a/code/game/turfs/turf_flick_animations.dm b/code/game/turfs/turf_flick_animations.dm index 5d51f6e2f1724..c45553dc6559a 100644 --- a/code/game/turfs/turf_flick_animations.dm +++ b/code/game/turfs/turf_flick_animations.dm @@ -1,7 +1,7 @@ /proc/anim(atom/target, a_icon, a_icon_state, flick_anim, sleeptime = 0, direction as num) //This proc throws up either an icon or an animation for a specified amount of time. //The variables should be apparent enough. - var/atom/movable/overlay/animation = new /atom/movable/overlay(target) + var/atom/movable/fake_overlay/animation = new /atom/movable/fake_overlay(target) if(direction) animation.set_dir(direction) animation.icon = a_icon @@ -12,4 +12,4 @@ else animation.icon_state = "blank" flick(flick_anim, animation) - QDEL_IN(animation, max(sleeptime, 15)) \ No newline at end of file + QDEL_IN(animation, max(sleeptime, 15)) diff --git a/code/game/turfs/turf_fluids.dm b/code/game/turfs/turf_fluids.dm index cfd75307d439e..ba9158eaa8989 100644 --- a/code/game/turfs/turf_fluids.dm +++ b/code/game/turfs/turf_fluids.dm @@ -11,21 +11,21 @@ /turf/proc/add_fluid(amount, fluid) if(!flooded) - var/obj/effect/fluid/F = locate() in src + var/obj/fluid/F = locate() in src if(!F) F = new(src) SET_FLUID_DEPTH(F, F.fluid_amount + amount) /turf/proc/remove_fluid(amount = 0) - var/obj/effect/fluid/F = locate() in src + var/obj/fluid/F = locate() in src if(F) LOSE_FLUID(F, amount) /turf/return_fluid() - return (locate(/obj/effect/fluid) in contents) + return (locate(/obj/fluid) in contents) /turf/proc/make_flooded() if(!flooded) flooded = TRUE - for(var/obj/effect/fluid/F in src) + for(var/obj/fluid/F in src) qdel(F) update_icon() fluid_update() @@ -41,7 +41,7 @@ ..() if(is_flooded(absolute=1)) return FLUID_MAX_DEPTH - var/obj/effect/fluid/F = return_fluid() + var/obj/fluid/F = return_fluid() return (istype(F) ? F.fluid_amount : 0 ) /turf/proc/show_bubbles() @@ -52,7 +52,7 @@ flick("ocean-bubbles", flood_object) return - var/obj/effect/fluid/F = locate() in src + var/obj/fluid/F = locate() in src if(istype(F)) flick("bubbles",F) @@ -76,5 +76,5 @@ ADD_ACTIVE_FLUID_SOURCE(src) else REMOVE_ACTIVE_FLUID_SOURCE(src) - for(var/obj/effect/fluid/F in src) + for(var/obj/fluid/F in src) ADD_ACTIVE_FLUID(F) diff --git a/code/game/turfs/unsimulated/beach.dm b/code/game/turfs/unsimulated/beach.dm index 546d1cc47505c..c2100d42eb7c4 100644 --- a/code/game/turfs/unsimulated/beach.dm +++ b/code/game/turfs/unsimulated/beach.dm @@ -1,21 +1,21 @@ /turf/unsimulated/beach - name = "Beach" + name = "beach" icon = 'icons/misc/beach.dmi' /turf/unsimulated/beach/sand - name = "Sand" + name = "band" icon_state = "sand" /turf/unsimulated/beach/coastline - name = "Coastline" + name = "coastline" icon = 'icons/misc/beach2.dmi' icon_state = "sandwater" /turf/unsimulated/beach/water - name = "Water" + name = "water" icon_state = "water" turf_flags = TURF_DISALLOW_BLOB | TURF_IS_WET -/turf/unsimulated/beach/water/New() - ..() - overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water2","layer"=MOB_LAYER+0.1) +/turf/unsimulated/beach/water/Initialize(mapload, added_to_area_cache) + . = ..() + AddOverlays(image("icon"='icons/misc/beach.dmi',"icon_state"="water2","layer"=MOB_LAYER+0.1)) diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm index e6b2906dfe94b..8d5d3765fbe4a 100644 --- a/code/game/turfs/unsimulated/floor.dm +++ b/code/game/turfs/unsimulated/floor.dm @@ -2,9 +2,10 @@ name = "floor" icon = 'icons/turf/floors.dmi' icon_state = "Floor3" + decals_available = TRUE /turf/unsimulated/floor/bluespace //non-doomsday version of bluespace for transit and wizden - name = "\improper bluespace" + name = "\proper bluespace" icon = 'icons/turf/space.dmi' icon_state = "bluespace" desc = "Looks like infinity." @@ -31,7 +32,7 @@ /turf/unsimulated/floor/grass icon_state = "grass0" - + /turf/unsimulated/floor/plating icon_state = "plating" @@ -54,14 +55,14 @@ icon_state = "platingdrift" // Lava Turfs - + /turf/unsimulated/floor/lava icon = 'icons/turf/flooring/lava.dmi' icon_state = "lava" /turf/unsimulated/floor/lava/cold icon_state = "cold" - + /turf/unsimulated/floor/lava/moving icon = 'icons/turf/floors.dmi' icon_state = "lava" @@ -85,4 +86,4 @@ icon_state = "reinforced_light" /turf/unsimulated/floor/steeldirty - icon_state = "steel_dirty" \ No newline at end of file + icon_state = "steel_dirty" diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 41b19c228afcd..ac2f5655e6724 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -1,93 +1,16 @@ -/client/verb/ooc(message as text) +/client/verb/ooc(message = "" as text) set name = "OOC" set category = "OOC" + if(!message) + message = input(mob, "", "ooc \"text\"") as text|null sanitize_and_communicate(/singleton/communication_channel/ooc, src, message) -/client/verb/looc(message as text) +/client/verb/looc(message = "" as text) set name = "LOOC" set desc = "Local OOC, seen only by those in view. Remember: Just because you see someone that doesn't mean they see you." set category = "OOC" + if(!message) + message = input(mob, "", "looc \"text\"") as text|null sanitize_and_communicate(/singleton/communication_channel/ooc/looc, src, message) - -/client/verb/fix_chat() - set name = "Fix Chat" - set category = "OOC" - if (!chatOutput || !istype(chatOutput)) - var/action = alert(src, "Invalid Chat Output data found!\nRecreate data?", "Wot?", "Recreate Chat Output data", "Cancel") - if (action != "Recreate Chat Output data") - return - chatOutput = new /datum/chatOutput (src) - chatOutput.start() - action = alert(src, "Goon chat reloading, wait a bit and tell me if it's fixed", "", "Fixed", "Nope") - if (action == "Fixed") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by re-creating the chatOutput datum") - else - chatOutput.load() - action = alert(src, "How about now? (give it a moment (it may also try to load twice))", "", "Yes", "No") - if (action == "Yes") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by re-creating the chatOutput datum and forcing a load()") - else - action = alert(src, "Welp, I'm all out of ideas. Try closing byond and reconnecting.\nWe could also disable fancy chat and re-enable oldchat", "", "Thanks anyways", "Switch to old chat") - if (action == "Switch to old chat") - winset(src, "output", "is-visible=true;is-disabled=false") - winset(src, "browseroutput", "is-visible=false") - log_game("GOONCHAT: [key_name(src)] Failed to fix their goonchat window after recreating the chatOutput and forcing a load()") - - else if (chatOutput.loaded) - var/action = alert(src, "ChatOutput seems to be loaded\nDo you want me to force a reload, wiping the chat log or just refresh the chat window because it broke/went away?", "Hmmm", "Force Reload", "Refresh", "Cancel") - switch (action) - if ("Force Reload") - chatOutput.loaded = FALSE - chatOutput.start() //this is likely to fail since it asks , but we should try it anyways so we know. - action = alert(src, "Goon chat reloading, wait a bit and tell me if it's fixed", "", "Fixed", "Nope") - if (action == "Fixed") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by forcing a start()") - else - chatOutput.load() - action = alert(src, "How about now? (give it a moment (it may also try to load twice))", "", "Yes", "No") - if (action == "Yes") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by forcing a load()") - else - action = alert(src, "Welp, I'm all out of ideas. Try closing byond and reconnecting.\nWe could also disable fancy chat and re-enable oldchat", "", "Thanks anyways", "Switch to old chat") - if (action == "Switch to old chat") - winset(src, "output", "is-visible=true;is-disabled=false") - winset(src, "browseroutput", "is-visible=false") - log_game("GOONCHAT: [key_name(src)] Failed to fix their goonchat window forcing a start() and forcing a load()") - - if ("Refresh") - chatOutput.showChat() - action = alert(src, "Goon chat refreshing, wait a bit and tell me if it's fixed", "", "Fixed", "Nope, force a reload") - if (action == "Fixed") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by forcing a show()") - else - chatOutput.loaded = FALSE - chatOutput.load() - action = alert(src, "How about now? (give it a moment)", "", "Yes", "No") - if (action == "Yes") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by forcing a load()") - else - action = alert(src, "Welp, I'm all out of ideas. Try closing byond and reconnecting.\nWe could also disable fancy chat and re-enable oldchat", "", "Thanks anyways", "Switch to old chat") - if (action == "Switch to old chat") - winset(src, "output", "is-visible=true;is-disabled=false") - winset(src, "browseroutput", "is-visible=false") - log_game("GOONCHAT: [key_name(src)] Failed to fix their goonchat window forcing a show() and forcing a load()") - return - - else - chatOutput.start() - var/action = alert(src, "Manually loading Chat, wait a bit and tell me if it's fixed", "", "Fixed", "Nope") - if (action == "Fixed") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by manually calling start()") - else - chatOutput.load() - alert(src, "How about now? (give it a moment (it may also try to load twice))", "", "Yes", "No") - if (action == "Yes") - log_game("GOONCHAT: [key_name(src)] Had to fix their goonchat by manually calling start() and forcing a load()") - else - action = alert(src, "Welp, I'm all out of ideas. Try closing byond and reconnecting.\nWe could also disable fancy chat and re-enable oldchat", "", "Thanks anyways", "Switch to old chat") - if (action == "Switch to old chat") - winset(src, "output", list2params(list("on-show" = "", "is-disabled" = "false", "is-visible" = "true"))) - winset(src, "browseroutput", "is-disabled=true;is-visible=false") - log_game("GOONCHAT: [key_name(src)] Failed to fix their goonchat window after manually calling start() and forcing a load()") diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index fa6228a543fbb..6676723825f3b 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -104,7 +104,7 @@ else msg += line - if(config.admin_irc) - to_chat(src, SPAN_INFO("Adminhelps are also sent to IRC. If no admins are available in game try anyway and an admin on IRC may see it and respond.")) + if(config.admin_discord) + to_chat(src, SPAN_INFO("Adminhelps are also sent to Discord. If no admins are available in game try anyway and an admin on Discord may see it and respond.")) to_chat(src, "Current Staff ([active_staff]/[total_staff]):") to_chat(src, jointext(msg,"\n")) diff --git a/code/game/world.dm b/code/game/world.dm index 75d65872ea612..cbf727d293fc0 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -4,29 +4,11 @@ #define SET_THROTTLE(TIME, REASON) throttle[1] = base_throttle + (TIME); throttle[2] = (REASON); -var/global/server_name = "Baystation 12" -var/global/game_id = null + +var/global/game_id = randhex(8) GLOBAL_VAR(href_logfile) -/hook/global_init/proc/generate_gameid() - if(game_id != null) - return - game_id = "" - - var/list/c = list("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0") - var/l = length(c) - - var/t = world.timeofday - for(var/_ = 1 to 4) - game_id = "[c[(t % l) + 1]][game_id]" - t = round(t / l) - game_id = "-[game_id]" - t = round(world.realtime / (10 * 60 * 60 * 24)) - for(var/_ = 1 to 3) - game_id = "[c[(t % l) + 1]][game_id]" - t = round(t / l) - return 1 // Find mobs matching a given string // @@ -76,7 +58,6 @@ GLOBAL_VAR(href_logfile) /proc/stack_trace(msg) CRASH(msg) - /proc/enable_debugging(mode, port) CRASH("auxtools not loaded") @@ -88,405 +69,119 @@ GLOBAL_VAR(href_logfile) #ifndef UNIT_TEST /hook/startup/proc/set_visibility() world.update_hub_visibility(config.hub_visible) + return TRUE #endif /world/New() + TgsNew(new /datum/tgs_event_handler/impl, TGS_SECURITY_TRUSTED) var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL") if (debug_server) - call_ext(debug_server, "auxtools_init")() + CALL_EXT(debug_server, "auxtools_init")() enable_debugging() - name = "[server_name] - [GLOB.using_map.full_name]" - - //logs SetupLogs() var/date_string = time2text(world.realtime, "YYYY/MM/DD") - to_file(global.diary, "[log_end]\n[log_end]\nStarting up. (ID: [game_id]) [time2text(world.timeofday, "hh:mm.ss")][log_end]\n---------------------[log_end]") - - if(config && config.server_name != null && config.server_suffix && world.port > 0) - config.server_name += " #[(world.port % 1000) / 100]" + rustg_log_write_formatted("[GLOB.log_directory]/game.log", "Starting up. (ID: [game_id])") + rustg_log_write_formatted("[GLOB.log_directory]/game.log", "---------------------------") - if(config && config.log_runtime) - var/runtime_log = file("data/logs/runtime/[date_string]_[time2text(world.timeofday, "hh:mm")]_[game_id].log") - to_file(runtime_log, "Game [game_id] starting up at [time2text(world.timeofday, "hh:mm.ss")]") - log = runtime_log // Note that, as you can see, this is misnamed: this simply moves world.log into the runtime log file. - if (config && config.log_hrefs) - GLOB.href_logfile = file("data/logs/[date_string] hrefs.htm") + if (config) + if (config.server_name) + name = "[config.server_name]" + if (config.log_runtime) + log = "data/logs/runtime/[date_string]_[time2text(world.timeofday, "hh:mm")]_[game_id].log" + to_world_log("Game [game_id] starting up at [time2text(world.timeofday, "hh:mm.ss")]") + if (config.log_hrefs) + GLOB.href_logfile = file("data/logs/[date_string] hrefs.htm") - if(byond_version < RECOMMENDED_VERSION) + if (byond_version < RECOMMENDED_VERSION) to_world_log("Your server's byond version does not meet the recommended requirements for this server. Please update BYOND") - callHook("startup") + QDEL_NULL(__global_init) ..() #ifdef UNIT_TEST log_unit_test("Unit Tests Enabled. This will destroy the world when testing is complete.") load_unit_test_changes() #endif - Master.Initialize(10, FALSE) - + Master.Initialize(10, FALSE, TRUE) /world/Del() var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL") if (debug_server) - call_ext(debug_server, "auxtools_shutdown")() + CALL_EXT(debug_server, "auxtools_shutdown")() callHook("shutdown") return ..() -GLOBAL_LIST_EMPTY(world_topic_throttle) -GLOBAL_VAR_INIT(world_topic_last, world.timeofday) +/// List of all world topic spam prevention handlers. See code/modules/world_topic/_spam_prevention_handler.dm +GLOBAL_LIST_EMPTY(world_topic_spam_prevention_handlers) +/// List of all world topic handler datums. Populated inside makeDatumRefLists() +GLOBAL_LIST_EMPTY(world_topic_handlers) /world/Topic(T, addr, master, key) - to_file(global.diary, "TOPIC: \"[T]\", from:[addr], master:[master], key:[key][log_end]") - - if (GLOB.world_topic_last > world.timeofday) - GLOB.world_topic_throttle = list() //probably passed midnight - GLOB.world_topic_last = world.timeofday - - var/list/throttle = GLOB.world_topic_throttle[addr] - if (!throttle) - GLOB.world_topic_throttle[addr] = throttle = list(0, null) - else if (throttle[1] && throttle[1] > world.timeofday + THROTTLE_MAX_BURST) - return throttle[2] ? "Throttled ([throttle[2]])" : "Throttled" - - var/base_throttle = max(throttle[1], world.timeofday) - SET_THROTTLE(3 SECONDS, null) - - /* * * * * * * * - * Public Topic Calls - * The following topic calls are available without a comms secret. - * * * * * * * */ - - if (T == "ping") - var/x = 1 - for (var/client/C) - x++ - return x - - else if(T == "players") - var/n = 0 - for(var/mob/M in GLOB.player_list) - if(M.client) - n++ - return n - - else if (copytext(T,1,7) == "status") - var/input[] = params2list(T) - var/list/s = list() - s["version"] = config.game_version - s["mode"] = PUBLIC_GAME_MODE - s["respawn"] = config.abandon_allowed - s["enter"] = config.enter_allowed - s["vote"] = config.allow_vote_mode - s["ai"] = !!length(empty_playable_ai_cores) - s["host"] = host ? host : null - - // This is dumb, but spacestation13.com's banners break if player count isn't the 8th field of the reply, so... this has to go here. - s["players"] = 0 - s["stationtime"] = stationtime2text() - s["roundduration"] = roundduration2text() - s["map"] = replacetext(GLOB.using_map.full_name, "\improper", "") //Done to remove the non-UTF-8 text macros - - var/active = 0 - var/list/players = list() - var/list/admins = list() - var/legacy = input["status"] != "2" - for(var/client/C in GLOB.clients) - if(C.holder) - if(C.is_stealthed()) - continue //so stealthmins aren't revealed by the hub - admins[C.key] = C.holder.rank - if(legacy) - s["player[length(players)]"] = C.key - players += C.key - if(istype(C.mob, /mob/living)) - active++ - - s["players"] = length(players) - s["admins"] = length(admins) - if(!legacy) - s["playerlist"] = list2params(players) - s["adminlist"] = list2params(admins) - s["active_players"] = active - - return list2params(s) - - else if(T == "manifest") - var/list/positions = list() - var/list/nano_crew_manifest = nano_crew_manifest() - // We rebuild the list in the format external tools expect - for(var/dept in nano_crew_manifest) - var/list/dept_list = nano_crew_manifest[dept] - if(length(dept_list) > 0) - positions[dept] = list() - for(var/list/person in dept_list) - positions[dept][person["name"]] = person["rank"] - - for(var/k in positions) - positions[k] = list2params(positions[k]) // converts positions["heads"] = list("Bob"="Captain", "Bill"="CMO") into positions["heads"] = "Bob=Captain&Bill=CMO" - - return list2params(positions) - - else if(T == "revision") - var/list/L = list() - L["gameid"] = game_id - L["dm_version"] = DM_VERSION // DreamMaker version compiled in - L["dm_build"] = DM_BUILD // DreamMaker build compiled in - L["dd_version"] = world.byond_version // DreamDaemon version running on - L["dd_build"] = world.byond_build // DreamDaemon build running on - - if(revdata.revision) - L["revision"] = revdata.revision - L["branch"] = revdata.branch - L["date"] = revdata.date - else - L["revision"] = "unknown" - - return list2params(L) - - /* * * * * * * * - * Admin Topic Calls - * The following topic calls are only available if a ban comms secret has been defined, supplied, and is correct. - * * * * * * * */ - - if(copytext(T,1,14) == "placepermaban") - var/input[] = params2list(T) - if(!config.ban_comms_password) - SET_THROTTLE(10 SECONDS, "Bans Not Enabled") - return "Not Enabled" - if(input["bankey"] != config.ban_comms_password) - SET_THROTTLE(30 SECONDS, "Bad Bans Key") - return "Bad Key" - - var/target = ckey(input["target"]) - - var/client/C - for(var/client/K in GLOB.clients) - if(K.ckey == target) - C = K - break - if(!C) - return "No client with that name found on server" - if(!C.mob) - return "Client missing mob" - - if(!_DB_ban_record(input["id"], "0", "127.0.0.1", 1, C.mob, -1, input["reason"])) - return "Save failed" - ban_unban_log_save("[input["id"]] has permabanned [C.ckey]. - Reason: [input["reason"]] - This is a ban until appeal.") - notes_add(target,"[input["id"]] has permabanned [C.ckey]. - Reason: [input["reason"]] - This is a ban until appeal.",input["id"]) - qdel(C) - - /* * * * * * * * - * Secure Topic Calls - * The following topic calls are only available if a comms secret has been defined, supplied, and is correct. - * * * * * * * */ - - if (!config.comms_password) - SET_THROTTLE(10 SECONDS, "Comms Not Enabled") - return "Not enabled" - - else if(copytext(T,1,5) == "laws") - var/input[] = params2list(T) - if(input["key"] != config.comms_password) - SET_THROTTLE(30 SECONDS, "Bad Comms Key") - return "Bad Key" - - var/list/match = text_find_mobs(input["laws"], /mob/living/silicon) - - if(!length(match)) - return "No matches" - else if(length(match) == 1) - var/mob/living/silicon/S = match[1] - var/info = list() - info["name"] = S.name - info["key"] = S.key - - if(istype(S, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = S - info["master"] = R.connected_ai?.name - info["sync"] = R.lawupdate - - if(!S.laws) - info["laws"] = null - return list2params(info) - - var/list/lawset_parts = list( - "ion" = S.laws.ion_laws, - "inherent" = S.laws.inherent_laws, - "supplied" = S.laws.supplied_laws - ) - - for(var/law_type in lawset_parts) - var/laws = list() - for(var/datum/ai_law/L in lawset_parts[law_type]) - laws += L.law - info[law_type] = list2params(laws) - - info["zero"] = S.laws.zeroth_law ? S.laws.zeroth_law.law : null - - return list2params(info) - - else - var/list/ret = list() - for(var/mob/M in match) - ret[M.key] = M.name - return list2params(ret) - - else if(copytext(T,1,5) == "info") - var/input[] = params2list(T) - if(input["key"] != config.comms_password) - SET_THROTTLE(30 SECONDS, "Bad Comms Key") - return "Bad Key" - - var/list/match = text_find_mobs(input["info"]) - - if(!length(match)) - return "No matches" - else if(length(match) == 1) - var/mob/M = match[1] - var/info = list() - info["key"] = M.key - info["name"] = M.name == M.real_name ? M.name : "[M.name] ([M.real_name])" - info["role"] = M.mind ? (M.mind.assigned_role ? M.mind.assigned_role : "No role") : "No mind" - var/turf/MT = get_turf(M) - info["loc"] = M.loc ? "[M.loc]" : "null" - info["turf"] = MT ? "[MT] @ [MT.x], [MT.y], [MT.z]" : "null" - info["area"] = MT ? "[MT.loc]" : "null" - info["antag"] = M.mind ? (M.mind.special_role ? M.mind.special_role : "Not antag") : "No mind" - info["hasbeenrev"] = M.mind ? M.mind.has_been_rev : "No mind" - info["stat"] = M.stat - info["type"] = M.type - if(isliving(M)) - var/mob/living/L = M - info["damage"] = list2params(list( - oxy = L.getOxyLoss(), - tox = L.getToxLoss(), - fire = L.getFireLoss(), - brute = L.getBruteLoss(), - clone = L.getCloneLoss(), - brain = L.getBrainLoss() - )) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - info["species"] = H.species.name - else - info["species"] = "non-human" - else - info["damage"] = "non-living" - info["species"] = "non-human" - info["gender"] = M.gender - return list2params(info) - else - var/list/ret = list() - for(var/mob/M in match) - ret[M.key] = M.name - return list2params(ret) - - else if(copytext(T,1,9) == "adminmsg") - /* - We got an adminmsg from IRC bot lets split the input then validate the input. - expected output: - 1. adminmsg = ckey of person the message is to - 2. msg = contents of message, parems2list requires - 3. validatationkey = the key the bot has, it should match the gameservers commspassword in it's configuration. - 4. sender = the ircnick that send the message. - */ - - - var/input[] = params2list(T) - if(input["key"] != config.comms_password) - SET_THROTTLE(30 SECONDS, "Bad Comms Key") - return "Bad Key" - - var/client/C - var/req_ckey = ckey(input["adminmsg"]) - - for(var/client/K in GLOB.clients) - if(K.ckey == req_ckey) - C = K - break - if(!C) - return "No client with that name on server" - - var/rank = input["rank"] - if(!rank) - rank = "Admin" - if(rank == "Unknown") - rank = "Staff" - - var/message = SPAN_CLASS("pm", "[rank] PM from [input["sender"]]: [input["msg"]]") - var/amessage = SPAN_CLASS("staff_pm", "[rank] PM from [input["sender"]] to [key_name(C)] : [input["msg"]]") - - C.received_irc_pm = world.time - C.irc_admin = input["sender"] - - sound_to(C, 'sound/ui/pm-notify.ogg') - to_chat(C, message) - - for(var/client/A as anything in GLOB.admins) - if(A != C) - to_chat(A, amessage) - return "Message Successful" - - else if(copytext(T,1,6) == "notes") - /* - We got a request for notes from the IRC Bot - expected output: - 1. notes = ckey of person the notes lookup is for - 2. validationkey = the key the bot has, it should match the gameservers commspassword in it's configuration. - */ - var/input[] = params2list(T) - if(input["key"] != config.comms_password) - SET_THROTTLE(30 SECONDS, "Bad Comms Key") - return "Bad Key" - return show_player_info_irc(ckey(input["notes"])) - - else if(copytext(T,1,4) == "age") - var/input[] = params2list(T) - if(input["key"] != config.comms_password) - SET_THROTTLE(30 SECONDS, "Bad Comms Key") - return "Bad Key" - var/age = get_player_age(input["age"]) - if(isnum(age)) - if(age >= 0) - return "[age]" - else - return "Ckey not found" - else - return "Database connection failed or not set up" + TGS_TOPIC + log_misc("WORLD/TOPIC: \"[T]\", from:[addr], master:[master], key:[key]") + // Handle spam prevention, if their IP isnt in the whitelist + if(!(addr in config.topic_ip_ratelimit_bypass)) + if(!GLOB.world_topic_spam_prevention_handlers[addr]) + GLOB.world_topic_spam_prevention_handlers[addr] = new /datum/world_topic_spam_prevention_handler(addr) -/world/Reboot(reason) - /*spawn(0) - sound_to(world, sound(pick('sound/AI/newroundsexy.ogg','sound/misc/apcdestroyed.ogg','sound/misc/bangindonk.ogg')))// random end sounds!! - LastyBatsy + var/datum/world_topic_spam_prevention_handler/sph = GLOB.world_topic_spam_prevention_handlers[addr] + + // Lock the user out and cancel their topic if needed + if(sph.check_lockout()) + return - */ + var/list/input = params2list(T) + var/datum/world_topic_handler/wth + + for(var/H in GLOB.world_topic_handlers) + if(H in input) + wth = GLOB.world_topic_handlers[H] + break + + if(!wth) + return + + // If we are here, the handler exists, so it needs to be invoked + wth = new wth() + return wth.invoke(input) + + +/world/Reboot(reason) Master.Shutdown() - var/datum/chatOutput/co - for(var/client/C in GLOB.clients) - co = C.chatOutput - if(co) - co.ehjax_send(data = "roundrestart") - if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite - for(var/client/C in GLOB.clients) + for(var/thing in GLOB.clients) + if(!thing) + continue + var/client/C = thing + C?.tgui_panel?.send_roundrestart() + if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite send_link(C, "byond://[config.server]") + rustg_log_close_all() if(config.wait_for_sigusr1_reboot && reason != 3) text2file("foo", "reboot_called") to_world(SPAN_DANGER("World reboot waiting for external scripts. Please be patient.")) return + // [SIERRA-ADD] + if(config.shutdown_on_reboot) + sleep(0) + del(world) + TgsEndProcess() + return + // [/SIERRA-ADD] + TgsReboot() ..(reason) - /hook/startup/proc/loadMode() world.load_mode() - return 1 + return TRUE /world/proc/load_mode() if(!fexists("data/mode.txt")) @@ -517,9 +212,6 @@ GLOBAL_VAR_INIT(world_topic_last, world.timeofday) else GLOB.log_directory += "[replacetext(time_stamp(), ":", ".")]" - GLOB.world_qdel_log = file("[GLOB.log_directory]/qdel.log") - to_file(GLOB.world_qdel_log, "\n\nStarting up round ID [game_id]. [time_stamp()]\n---------------------") - var/global/failed_db_connections = 0 var/global/failed_old_db_connections = 0 diff --git a/code/hub.dm b/code/hub.dm index 2ee5a94294aa8..be6ad5e0df9df 100644 --- a/code/hub.dm +++ b/code/hub.dm @@ -3,7 +3,7 @@ * You can also toggle visibility from in-game with toggle-hub-visibility; be aware that it takes a few minutes for the hub go */ hub = "Exadv1.spacestation13" - name = "Space Station 13 - Baystation 12" + name = "Space Station 13" /world/proc/update_hub_visibility(new_status) if (isnull(new_status)) diff --git a/code/modules/ZAS/Debug.dm b/code/modules/ZAS/Debug.dm index bd735ebcb6bd6..cc951cba751e0 100644 --- a/code/modules/ZAS/Debug.dm +++ b/code/modules/ZAS/Debug.dm @@ -12,8 +12,8 @@ var/global/image/mark = image('icons/Testing/Zone.dmi', icon_state = "mark") /turf/var/dbg_img /turf/proc/dbg(image/img, d = 0) if(d > 0) img.dir = d - overlays -= dbg_img - overlays += img + CutOverlays(dbg_img) + AddOverlays(img) dbg_img = img /proc/soft_assert(thing,fail) diff --git a/code/modules/ZAS/Fire.dm b/code/modules/ZAS/Fire.dm index cfe59cf749212..2bc490193b305 100644 --- a/code/modules/ZAS/Fire.dm +++ b/code/modules/ZAS/Fire.dm @@ -29,7 +29,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin return 0 var/igniting = 0 - var/obj/effect/decal/cleanable/liquid_fuel/liquid = locate() in src + var/obj/decal/cleanable/liquid_fuel/liquid = locate() in src if(liquid && air_contents.check_combustability(liquid)) IgniteTurf(liquid.amount * 10) QDEL_NULL(liquid) @@ -112,13 +112,13 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin if(firelevel > 6) icon_state = "3" - set_light(1, 2, 7) + set_light(7, 1) else if(firelevel > 2.5) icon_state = "2" - set_light(0.7, 2, 5) + set_light(5, 0.7) else icon_state = "1" - set_light(0.5, 1, 3) + set_light(3, 0.5) for(var/mob/living/L in loc) L.FireBurn(firelevel, air_contents.temperature, air_contents.return_pressure()) //Burn the mobs! @@ -168,7 +168,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin var/datum/gas_mixture/air_contents = loc.return_air() color = fire_color(air_contents.temperature) - set_light(0.5, 1, 3, l_color = color) + set_light(3, 0.5, l_color = color) firelevel = fl SSair.active_hotspots.Add(src) @@ -303,7 +303,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin . = 1 break -/datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/liquid_fuel/liquid=null) +/datum/gas_mixture/proc/check_combustability(obj/decal/cleanable/liquid_fuel/liquid=null) . = 0 for(var/g in gas) if(gas_data.flags[g] & XGM_GAS_OXIDIZER && QUANTIZE(gas[g] * vsc.fire_consuption_rate) >= 0.1) diff --git a/code/modules/ZAS/Phoron.dm b/code/modules/ZAS/Phoron.dm index a3b4264e5e3e9..8ca7516ab6a10 100644 --- a/code/modules/ZAS/Phoron.dm +++ b/code/modules/ZAS/Phoron.dm @@ -51,11 +51,11 @@ var/global/image/contamination_overlay = image('icons/effects/contamination.dmi' //Do a contamination overlay? Temporary measure to keep contamination less deadly than it was. if(!contaminated) contaminated = 1 - overlays += contamination_overlay + AddOverlays(contamination_overlay) /obj/item/proc/decontaminate() contaminated = 0 - overlays -= contamination_overlay + CutOverlays(contamination_overlay) /mob/proc/contaminate() diff --git a/code/modules/ZAS/Turf.dm b/code/modules/ZAS/Turf.dm index 94f98bc4ddf3e..a32aeba6b0296 100644 --- a/code/modules/ZAS/Turf.dm +++ b/code/modules/ZAS/Turf.dm @@ -5,9 +5,10 @@ /turf/var/datum/gas_mixture/air /turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null) - if(graphic_add && length(graphic_add)) + if(length(graphic_add)) vis_contents += graphic_add - if(graphic_remove && length(graphic_remove)) + + if(length(graphic_remove)) vis_contents -= graphic_remove /turf/proc/update_air_properties() diff --git a/code/modules/ZAS/Zone.dm b/code/modules/ZAS/Zone.dm index 590ed4d02d9ad..53e8dc46ef77c 100644 --- a/code/modules/ZAS/Zone.dm +++ b/code/modules/ZAS/Zone.dm @@ -58,33 +58,35 @@ Class Procs: air.group_multiplier = 1 air.volume = CELL_VOLUME -/zone/proc/add(turf/simulated/T) +/zone/proc/add(turf/simulated/turf_to_add) #ifdef ZASDBG ASSERT(!invalid) - ASSERT(istype(T)) - ASSERT(!SSair.has_valid_zone(T)) + ASSERT(istype(turf_to_add)) + ASSERT(!SSair.has_valid_zone(turf_to_add)) #endif - var/datum/gas_mixture/turf_air = T.return_air() + var/datum/gas_mixture/turf_air = turf_to_add.return_air() add_tile_air(turf_air) - T.zone = src - contents.Add(T) - if(T.hotspot) - fire_tiles.Add(T) + turf_to_add.zone = src + contents += turf_to_add + + if(turf_to_add.hotspot) + fire_tiles += turf_to_add SSair.active_fire_zones |= src - T.update_graphic(air.graphic) -/zone/proc/remove(turf/simulated/T) + turf_to_add.update_graphic(air.graphic) + +/zone/proc/remove(turf/simulated/turf_to_remove) #ifdef ZASDBG ASSERT(!invalid) - ASSERT(istype(T)) - ASSERT(T.zone == src) - soft_assert(T in contents, "Lists are weird broseph") + ASSERT(istype(turf_to_remove)) + ASSERT(turf_to_remove.zone == src) + soft_assert(turf_to_remove in contents, "Lists are weird broseph") #endif - contents.Remove(T) - fire_tiles.Remove(T) - T.zone = null - T.update_graphic(graphic_remove = air.graphic) + contents -= turf_to_remove + fire_tiles -= turf_to_remove + turf_to_remove.zone = null + turf_to_remove.update_graphic(graphic_remove = air.graphic) if(length(contents)) air.group_multiplier = length(contents) else @@ -98,52 +100,52 @@ Class Procs: ASSERT(!into.invalid) #endif c_invalidate() - for(var/turf/simulated/T in contents) - into.add(T) - T.update_graphic(graphic_remove = air.graphic) + for(var/turf/simulated/inner_turf in contents) + into.add(inner_turf) + inner_turf.update_graphic(graphic_remove = air.graphic) #ifdef ZASDBG - T.dbg(merged) + inner_turf.dbg(merged) #endif //rebuild the old zone's edges so that they will be possessed by the new zone - for(var/connection_edge/E in edges) - if(E.contains_zone(into)) + for(var/connection_edge/edge in edges) + if(edge.contains_zone(into)) continue //don't need to rebuild this edge - for(var/turf/T in E.connecting_turfs) - SSair.mark_for_update(T) + + for(var/turf/connecting_turf in edge.connecting_turfs) + SSair.mark_for_update(connecting_turf) /zone/proc/c_invalidate() - invalid = 1 + invalid = TRUE SSair.remove_zone(src) #ifdef ZASDBG - for(var/turf/simulated/T in contents) - T.dbg(invalid_zone) + for(var/turf/simulated/inner_turf in contents) + inner_turf.dbg(invalid_zone) #endif /zone/proc/rebuild() if(invalid) return //Short circuit for explosions where rebuild is called many times over. c_invalidate() - for(var/turf/simulated/T in contents) - T.update_graphic(graphic_remove = air.graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt - //T.dbg(invalid_zone) - T.needs_air_update = 0 //Reset the marker so that it will be added to the list. - SSair.mark_for_update(T) + for(var/turf/simulated/inner_turf in contents) + inner_turf.update_graphic(graphic_remove = air.graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt + inner_turf.needs_air_update = FALSE //Reset the marker so that it will be added to the list. + SSair.mark_for_update(inner_turf) /zone/proc/add_tile_air(datum/gas_mixture/tile_air) //air.volume += CELL_VOLUME air.group_multiplier = 1 air.multiply(length(contents)) air.merge(tile_air) - air.divide(length(contents)+1) - air.group_multiplier = length(contents)+1 + air.divide(length(contents) + 1) + air.group_multiplier = length(contents) + 1 /zone/proc/tick() // Update fires. if(air.temperature >= PHORON_FLASHPOINT && !(src in SSair.active_fire_zones) && air.check_combustability() && length(contents)) - var/turf/T = pick(contents) - if(istype(T)) - T.create_fire(vsc.fire_firelevel_multiplier) + var/turf/turf_to_ignite = pick(contents) + if(istype(turf_to_ignite)) + turf_to_ignite.create_fire(vsc.fire_firelevel_multiplier) // Update gas overlays. if(air.check_tile_graphic(graphic_add, graphic_remove)) diff --git a/code/modules/acting/acting_items.dm b/code/modules/acting/acting_items.dm index a231492e657ee..eb81936243898 100644 --- a/code/modules/acting/acting_items.dm +++ b/code/modules/acting/acting_items.dm @@ -1,7 +1,7 @@ /obj/machinery/acting/wardrobe name = "wardrobe dispenser" desc = "A machine that dispenses holo-clothing for those in need." - icon = 'icons/obj/vending.dmi' + icon = 'icons/obj/machines/vending.dmi' icon_state = "cart" anchored = TRUE density = TRUE @@ -17,9 +17,9 @@ active = 1 /obj/machinery/acting/changer - name = "Quickee's Plastic Surgeon" + name = "\improper Quickee's Plastic Surgeon" desc = "For when you need to be someone else right now." - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/machines/fabricators/organprinters.dmi' icon_state = "bioprinter" anchored = TRUE density = TRUE @@ -27,7 +27,7 @@ /obj/machinery/acting/changer/attack_hand(mob/user as mob) if(ishuman(user)) var/mob/living/carbon/human/H = user - H.change_appearance(APPEARANCE_COMMON, TRUE, state = GLOB.z_state) + H.change_appearance(APPEARANCE_COMMON, state = GLOB.z_state) var/getName = sanitize(input(H, "Would you like to change your name to something else?", "Name change") as null|text, MAX_NAME_LEN) if(getName) H.real_name = getName @@ -37,9 +37,9 @@ H.mind.name = H.name /obj/machinery/acting/changer/mirror - name = "Mirror of Many Faces" + name = "\improper Mirror of Many Faces" desc = "For when you need to be someone else right now." - icon = 'icons/obj/watercloset.dmi' + icon = 'icons/obj/structures/mirror.dmi' icon_state = "mirror_broke" anchored = TRUE density = FALSE diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB ban/functions.dm index 9e34ce98e5164..eb3ac5634e617 100644 --- a/code/modules/admin/DB ban/functions.dm +++ b/code/modules/admin/DB ban/functions.dm @@ -118,7 +118,10 @@ reason = sql_sanitize_text(reason) - var/sql = "INSERT INTO erro_ban (`id`,`bantime`,`serverip`,`bantype`,`reason`,`job`,`duration`,`rounds`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`,`edits`,`unbanned`,`unbanned_datetime`,`unbanned_ckey`,`unbanned_computerid`,`unbanned_ip`) VALUES (null, Now(), '[serverip]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], [(rounds)?"[rounds]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', '[ip]', '[a_ckey]', '[a_computerid]', '[a_ip]', '[who]', '[adminwho]', '', null, null, null, null, null)" + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // var/sql = "INSERT INTO erro_ban (`id`,`bantime`,`serverip`,`bantype`,`reason`,`job`,`duration`,`rounds`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`,`edits`,`unbanned`,`unbanned_datetime`,`unbanned_ckey`,`unbanned_computerid`,`unbanned_ip`) VALUES (null, Now(), '[serverip]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], [(rounds)?"[rounds]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', '[ip]', '[a_ckey]', '[a_computerid]', '[a_ip]', '[who]', '[adminwho]', '', null, null, null, null, null)" // SIERRA-EDIT - ORIGINAL + var/sql = "INSERT INTO [sqlfdbkdbutil].ban (`id`,`bantime`,`serverip`,`bantype`,`reason`,`job`,`duration`,`rounds`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`,`edits`,`unbanned`,`unbanned_datetime`,`unbanned_ckey`,`unbanned_computerid`,`unbanned_ip`) VALUES (null, Now(), '[serverip]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], [(rounds)?"[rounds]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', '[ip]', '[a_ckey]', '[a_computerid]', '[a_ip]', '[who]', '[adminwho]', '', null, null, null, null, null)" + // [/SIERRA-EDIT] var/DBQuery/query_insert = dbcon.NewQuery(sql) query_insert.Execute() var/setter = a_ckey @@ -161,7 +164,10 @@ else bantype_sql = "bantype = '[bantype_str]'" - var/sql = "SELECT id FROM erro_ban WHERE ckey = '[ckey]' AND [bantype_sql] AND (unbanned is null OR unbanned = false)" + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // var/sql = "SELECT id FROM erro_ban WHERE ckey = '[ckey]' AND [bantype_sql] AND (unbanned is null OR unbanned = false)" // SIERRA-EDIT - ORIGINAL + var/sql = "SELECT id FROM [sqlfdbkdbutil].ban WHERE ckey = '[ckey]' AND [bantype_sql] AND (unbanned is null OR unbanned = false)" + // [/SIERRA-EDIT] if(job) sql += " AND job = '[job]'" @@ -202,7 +208,10 @@ to_chat(usr, "Cancelled") return - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, duration, reason FROM erro_ban WHERE id = [banid]") + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // var/DBQuery/query = dbcon.NewQuery("SELECT ckey, duration, reason FROM erro_ban WHERE id = [banid]") // SIERRA-EDIT - ORIGINAL + var/DBQuery/query = dbcon.NewQuery("SELECT ckey, duration, reason FROM [sqlfdbkdbutil].ban WHERE id = [banid]") + // [/SIERRA-EDIT] query.Execute() var/eckey = usr.ckey //Editing admin ckey @@ -230,7 +239,10 @@ to_chat(usr, "Cancelled") return - var/DBQuery/update_query = dbcon.NewQuery("UPDATE erro_ban SET reason = '[value]', edits = CONCAT(edits,'- [eckey] changed ban reason from \\\"[reason]\\\" to \\\"[value]\\\"
    ') WHERE id = [banid]") + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // var/DBQuery/update_query = dbcon.NewQuery("UPDATE erro_ban SET reason = '[value]', edits = CONCAT(edits,'- [eckey] changed ban reason from \\\"[reason]\\\" to \\\"[value]\\\"
    ') WHERE id = [banid]") // SIERRA-EDIT - ORIGINAL + var/DBQuery/update_query = dbcon.NewQuery("UPDATE [sqlfdbkdbutil].ban SET reason = '[value]', edits = CONCAT(edits,'- [eckey] changed ban reason from \\\"[reason]\\\" to \\\"[value]\\\"
    ') WHERE id = [banid]") + // [/SIERRA-EDIT] update_query.Execute() message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s reason from [reason] to [value]",1) if("duration") @@ -240,7 +252,10 @@ to_chat(usr, "Cancelled") return - var/DBQuery/update_query = dbcon.NewQuery("UPDATE erro_ban SET duration = [value], edits = CONCAT(edits,'- [eckey] changed ban duration from [duration] to [value]
    '), expiration_time = DATE_ADD(bantime, INTERVAL [value] MINUTE) WHERE id = [banid]") + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // var/DBQuery/update_query = dbcon.NewQuery("UPDATE erro_ban SET duration = [value], edits = CONCAT(edits,'- [eckey] changed ban duration from [duration] to [value]
    '), expiration_time = DATE_ADD(bantime, INTERVAL [value] MINUTE) WHERE id = [banid]") // SIERRA-EDIT - ORIGINAL + var/DBQuery/update_query = dbcon.NewQuery("UPDATE [sqlfdbkdbutil].ban SET duration = [value], edits = CONCAT(edits,'- [eckey] changed ban duration from [duration] to [value]
    '), expiration_time = DATE_ADD(bantime, INTERVAL [value] MINUTE) WHERE id = [banid]") + // [/SIERRA-EDIT] message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s duration from [duration] to [value]",1) update_query.Execute() if("unban") @@ -258,7 +273,10 @@ if(!check_rights(R_BAN)) return - var/sql = "SELECT ckey FROM erro_ban WHERE id = [id]" + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // var/sql = "SELECT ckey FROM erro_ban WHERE id = [id]" // SIERRA-EDIT - ORIGINAL + var/sql = "SELECT ckey FROM [sqlfdbkdbutil].ban WHERE id = [id]" + // [/SIERRA-EDIT] establish_db_connection() if(!dbcon.IsConnected()) @@ -288,7 +306,10 @@ var/unban_computerid = src.owner:computer_id var/unban_ip = src.owner:address - var/sql_update = "UPDATE erro_ban SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = '[unban_ip]' WHERE id = [id]" + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // var/sql_update = "UPDATE erro_ban SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = '[unban_ip]' WHERE id = [id]" // SIERRA-EDIT - ORIGINAL + var/sql_update = "UPDATE [sqlfdbkdbutil].ban SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = '[unban_ip]' WHERE id = [id]" + // [/SIERRA-EDIT] message_admins("[key_name_admin(usr)] has lifted [pckey]'s ban.",1) var/DBQuery/query_update = dbcon.NewQuery(sql_update) @@ -443,7 +464,10 @@ else bantypesearch += "'PERMABAN' " - var/DBQuery/select_query = dbcon.NewQuery("SELECT id, bantime, bantype, reason, job, duration, expiration_time, ckey, a_ckey, unbanned, unbanned_ckey, unbanned_datetime, edits, ip, computerid FROM erro_ban WHERE 1 [playersearch] [adminsearch] [ipsearch] [cidsearch] [bantypesearch] ORDER BY bantime DESC LIMIT 100") + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // var/DBQuery/select_query = dbcon.NewQuery("SELECT id, bantime, bantype, reason, job, duration, expiration_time, ckey, a_ckey, unbanned, unbanned_ckey, unbanned_datetime, edits, ip, computerid FROM erro_ban WHERE 1 [playersearch] [adminsearch] [ipsearch] [cidsearch] [bantypesearch] ORDER BY bantime DESC LIMIT 100") // SIERRA-EDIT - ORIGINAL + var/DBQuery/select_query = dbcon.NewQuery("SELECT id, bantime, bantype, reason, job, duration, expiration_time, ckey, a_ckey, unbanned, unbanned_ckey, unbanned_datetime, edits, ip, computerid FROM [sqlfdbkdbutil].ban WHERE 1 [playersearch] [adminsearch] [ipsearch] [cidsearch] [bantypesearch] ORDER BY bantime DESC LIMIT 100") + // [/SIERRA-EDIT] select_query.Execute() var/now = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") // MUST BE the same format as SQL gives us the dates in, and MUST be least to most specific (i.e. year, month, day not day, month, year) diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 7fc899e8bca9b..2888e6b8be2b4 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -46,7 +46,13 @@ failedcid = 0 cidquery = " OR computerid = '[computer_id]' " - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM erro_ban WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR (bantype = 'TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // var/DBQuery/query = dbcon.NewQuery("SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM erro_ban WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR (bantype = 'TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") // SIERRA-EDIT - ORIGINAL + var/DBQuery/query = dbcon.NewQuery({" + SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [sqlfdbkdbutil].ban + WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' + OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)"}) + // [/SIERRA-EDIT] query.Execute() diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 0625e325d464f..d9b3bdfbec981 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -50,6 +50,10 @@ var/global/floorIsLava = 0 if(M.client) body += " played by [M.client] " body += "\[[M.client.holder ? M.client.holder.rank : "Player"]\]" + // [SIERRA-ADD] - EX666_ECOSYSTEM + if (M.client.discord_id && length(M.client.discord_id) < 32) + body += "\[<@![M.client.discord_id]> [M.client.discord_name]\]" + // [/SIERRA-ADD] else if(last_ckey) body += " (last occupied by ckey [last_ckey])" @@ -87,15 +91,19 @@ var/global/floorIsLava = 0 Ban | Jobban | Notes | + Check Connections | + Check Bans | "} if (!istype(M, /mob/new_player) && !istype(M, /mob/observer)) body += "Cryo Character | " + body += "Equip Loadout | " if(M.client) body += "Prison | " body += "Reload Save | " body += "Reload Character | " + body += "\ Send back to Lobby | " //MODPACK_CLIENT_VERBS var/muted = M.client.prefs.muted body += {"
    Mute: \[IC | @@ -266,6 +274,8 @@ var/global/floorIsLava = 0 /datum/player_info/var/rank //rank of admin who made the notes /datum/player_info/var/content // text content of the information /datum/player_info/var/timestamp // Because this is bloody annoying +/// Round ID of the note +/datum/player_info/var/game_id #define PLAYER_NOTES_ENTRIES_PER_PAGE 50 /datum/admins/proc/PlayerNotes() @@ -389,6 +399,7 @@ var/global/floorIsLava = 0 [comment.author || "(not recorded)"], \ [comment.rank || "(not recorded)"], \ on [comment.timestamp || "(not recorded)"]\ + [comment.game_id ? "
    Round ID: [comment.game_id]" : null]\ \ [remove_button]\ \ @@ -844,7 +855,7 @@ GLOBAL_VAR_INIT(skip_allow_lists, FALSE) if (config.hub_visible && !world.reachable) message_admins("WARNING: The server will not show up on the hub because byond is detecting that a firewall is blocking incoming connections.") - send2adminirc("[key_name(src)]" + long_message) + send_to_admin_discord(EXCOM_MSG_AHELP, "[key_name(src, highlight_special_characters = FALSE)]" + long_message) log_and_message_admins(long_message) /datum/admins/proc/toggletraitorscaling() @@ -1093,7 +1104,7 @@ GLOBAL_VAR_INIT(skip_allow_lists, FALSE) if(!seedtype || !SSplants.seeds[seedtype]) return - new /obj/effect/vine(get_turf(usr), SSplants.seeds[seedtype]) + new /obj/vine(get_turf(usr), SSplants.seeds[seedtype]) log_admin("[key_name(usr)] spawned [seedtype] vines at ([usr.x],[usr.y],[usr.z])") /datum/admins/proc/spawn_atom(object as text) @@ -1312,7 +1323,7 @@ GLOBAL_VAR_INIT(skip_allow_lists, FALSE) else to_chat(usr, "SOMETHING SILICON [key_name(S, usr)]'s laws:") - if (S.laws == null) + if (isnull(S.laws)) to_chat(usr, "[key_name(S, usr)]'s laws are null?? Contact a coder.") else S.laws.show_laws(usr) @@ -1383,7 +1394,7 @@ GLOBAL_VAR_INIT(skip_allow_lists, FALSE) return check_rights(R_HOST, 0, C) //Prevents SDQL2 commands from changing admin permissions -/datum/admins/SDQL_update(const/var_name, new_value) +/datum/admins/SDQL_update(var_name, new_value) return 0 // @@ -1417,6 +1428,7 @@ GLOBAL_VAR_INIT(skip_allow_lists, FALSE) message_admins(SPAN_CLASS("adminnotice", "[key_name_admin(usr)] has put [frommob.ckey] in control of [tomob.name].")) log_admin("[key_name(usr)] stuffed [frommob.ckey] into [tomob.name].") tomob.ckey = frommob.ckey + tomob.teleop = null qdel(frommob) return 1 @@ -1575,7 +1587,7 @@ GLOBAL_VAR_INIT(skip_allow_lists, FALSE) if(!P.stamped) P.stamped = new P.stamped += /obj/item/stamp/boss - P.overlays += stampoverlay + P.AddOverlays(stampoverlay) var/obj/item/rcvdcopy var/obj/machinery/photocopier/faxmachine/destination = P.destinations[1] @@ -1604,31 +1616,54 @@ GLOBAL_VAR_INIT(skip_allow_lists, FALSE) faxreply = null return -/datum/admins/proc/setroundlength() + +/datum/admins/proc/SetRoundLength() set category = "Server" - set desc = "Set the time the round-end vote will start in minutes." set name = "Set Round Length" - - if (GAME_STATE > RUNLEVEL_LOBBY) - to_chat(usr, SPAN_WARNING("You cannot change the round length after the game has started!")) + set desc = "Set the maximum length of a round in minutes." + if (GAME_STATE > RUNLEVEL_GAME) + to_chat(usr, SPAN_WARNING("The game is already ending!")) return - - var/time = input("Set the time until the round-end vote occurs (IN MINUTES). Default is [config.vote_autotransfer_initial / 600]", "Set Round Length", 0) as null | num - - if (!time || !isnum(time) || time < 0) + var/current = round(round_duration_in_ticks / 600, 0.1) + var/response = input(usr, "Time in minutes when the round will end, or 0 to disable.\nCurrent time: [current]m") as null | num + if (!isnum(response)) return + if (!response) + log_and_message_admins("disabled max round length.") + config.maximum_round_length = response + else if (response > current) + log_and_message_admins("set max round length to [response] minutes.") + config.maximum_round_length = response + else + to_chat(usr, SPAN_WARNING("You cannot set a max round length in the past.")) - transfer_controller.timerbuffer = time MINUTES - log_and_message_admins("set the initial round-end vote time to [time] minutes after round-start.") -/datum/admins/proc/toggleroundendvote() +/datum/admins/proc/ToggleContinueVote() set category = "Server" - set desc = "Toggle the continue vote on/off. Toggling off will cause round-end to occur when the next continue vote time would be." set name = "Toggle Continue Vote" - + set desc = "Toggle the continue vote on/off. Toggling off will cause round-end to occur when the next continue vote time would be." if (GAME_STATE > RUNLEVEL_GAME) to_chat(usr, SPAN_WARNING("The game is already ending!")) return + SSroundend.vote_check = !SSroundend.vote_check + if (SSroundend.vote_check) + var/interval = config.vote_autotransfer_interval + if (!interval) + to_chat(usr, SPAN_WARNING("Continue votes not configured.")) + SSroundend.vote_check = 0 + return + SSroundend.vote_check = (round_duration_in_ticks / 600) + interval + log_and_message_admins("toggled continue votes [SSroundend.vote_check ? "ON" : "OFF"]") + + +/datum/admins/proc/togglemoderequirementchecks() + set category = "Server" + set desc = "Toggle the gamemode requirement checks on/off. Toggling off will allow any gamemode to start regardless of readied players." + set name = "Toggle Gamemode Requirement Checks" + + if (GAME_STATE > RUNLEVEL_LOBBY) + to_chat(usr, SPAN_WARNING("You cannot change the gamemode requirement checks after the game has started!")) + return - transfer_controller.do_continue_vote = !transfer_controller.do_continue_vote - log_and_message_admins("toggled the continue vote [transfer_controller.do_continue_vote ? "ON" : "OFF"]") + SSticker.skip_requirement_checks = !SSticker.skip_requirement_checks + log_and_message_admins("toggled the gamemode requirement checks [SSticker.skip_requirement_checks ? "OFF" : "ON"]") diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 2f1c8ea60c0ba..53f1ec070908a 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -20,7 +20,10 @@ var/global/list/admin_ranks = list() //list of all ranks with associated var/rank = ckeyEx(List[1]) switch(rank) if(null,"") continue - if("Removed") continue //Reserved + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // if("Removed") continue //Reserved // SIERRA-EDIT - ORIGINAL + if("Удален") continue //Reserved + // [/SIERRA-EDIT] var/rights = 0 for(var/i=2, i<=length(List), i++) @@ -37,20 +40,15 @@ var/global/list/admin_ranks = list() //list of all ranks with associated if("stealth") rights |= R_STEALTH if("rejuv","rejuvinate") rights |= R_REJUVINATE if("varedit") rights |= R_VAREDIT - if("everything","host","all") rights |= (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD) + if("everything","host","all") rights |= (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD | R_XENO) if("sound","sounds") rights |= R_SOUNDS if("spawn","create") rights |= R_SPAWN if("mod") rights |= R_MOD + if("xeno") rights |= R_XENO admin_ranks[rank] = rights previous_rights = rights - #ifdef TESTING - var/msg = "Permission Sets Built:\n" - for(var/rank in admin_ranks) - msg += "\t[rank] - [admin_ranks[rank]]\n" - testing(msg) - #endif /hook/startup/proc/loadAdmins() load_admins() @@ -117,7 +115,10 @@ var/global/list/admin_ranks = list() //list of all ranks with associated while(query.NextRow()) var/ckey = query.item[1] var/rank = query.item[2] - if(rank == "Removed") continue //This person was de-adminned. They are only in the admin list for archive purposes. + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // if(rank == "Removed") continue //This person was de-adminned. They are only in the admin list for archive purposes. // SIERRA-EDIT - ORIGINAL + if(rank == "Удален") continue //This person was de-adminned. They are only in the admin list for archive purposes. + // [/SIERRA-EDIT] var/rights = query.item[4] if(istext(rights)) rights = text2num(rights) @@ -131,34 +132,3 @@ var/global/list/admin_ranks = list() //list of all ranks with associated config.admin_legacy_system = 1 load_admins() return - - #ifdef TESTING - var/msg = "Admins Built:\n" - for(var/ckey in admin_datums) - var/rank - var/datum/admins/D = admin_datums[ckey] - if(D) rank = D.rank - msg += "\t[ckey] - [rank]\n" - testing(msg) - #endif - - -#ifdef TESTING -/client/verb/changerank(newrank in admin_ranks) - if(holder) - holder.rank = newrank - holder.rights = admin_ranks[newrank] - else - holder = new /datum/admins(newrank,admin_ranks[newrank],ckey) - remove_admin_verbs() - holder.associate(src) - -/client/verb/changerights(newrights as num) - if(holder) - holder.rights = newrights - else - holder = new /datum/admins("testing",newrights,ckey) - remove_admin_verbs() - holder.associate(src) - -#endif diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 62757e34efd87..bf33e8397ef96 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -1,5 +1,8 @@ //admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless var/global/list/admin_verbs_default = list( + // [SIERRA-ADD] - sierra-tweaks, + /client/proc/getserverlog, + // [/SIERRA-ADD], /datum/admins/proc/show_player_panel, //shows an interface for individual players, with various links (links require additional flags), right-click player panel, /client/proc/player_panel, /client/proc/secrets, @@ -38,7 +41,7 @@ var/global/list/admin_verbs_admin = list( /client/proc/jumptomob, //allows us to jump to a specific mob, /client/proc/jumptoturf, //allows us to jump to a specific turf, /client/proc/admin_call_shuttle, //allows us to call the emergency shuttle, - /client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to centcomm, + /client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to centcom, /client/proc/cmd_admin_narrate, /client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text, /client/proc/cmd_admin_visible_narrate, @@ -97,8 +100,10 @@ var/global/list/admin_verbs_admin = list( /datum/admins/proc/sendFax, /client/proc/check_fax_history, /client/proc/cmd_admin_notarget, - /datum/admins/proc/setroundlength, - /datum/admins/proc/toggleroundendvote + /datum/admins/proc/SetRoundLength, + /datum/admins/proc/ToggleContinueVote, + /datum/admins/proc/togglemoderequirementchecks, + /client/proc/delete_crew_record ) var/global/list/admin_verbs_ban = list( /client/proc/unban_panel, @@ -139,6 +144,9 @@ var/global/list/admin_verbs_spawn = list( /datum/admins/proc/spawn_atom, // allows us to spawn instances, /datum/admins/proc/spawn_artifact, /client/proc/spawn_chemdisp_cartridge, + // [SIERRA-ADD] - CLIENT_VERBS - , + /client/proc/respawn_as_self, + // [/SIERRA-ADD] - CLIENT_VERBS , /datum/admins/proc/mass_debug_closet_icons ) var/global/list/admin_verbs_server = list( @@ -154,6 +162,7 @@ var/global/list/admin_verbs_server = list( /client/proc/cmd_debug_del_all, /datum/admins/proc/adrev, /datum/admins/proc/adspawn, + /datum/admins/proc/set_respawn_timer, // MODPACK_CLIENT_VERBS, /datum/admins/proc/adjump, /client/proc/toggle_random_events, /client/proc/nanomapgen_DumpImage @@ -177,7 +186,6 @@ var/global/list/admin_verbs_debug = list( /client/proc/apply_random_map, /client/proc/overlay_random_map, /client/proc/delete_random_map, - /datum/admins/proc/submerge_map, /datum/admins/proc/map_template_load, /datum/admins/proc/map_template_load_new_z, /datum/admins/proc/map_template_upload, @@ -202,7 +210,8 @@ var/global/list/admin_verbs_debug = list( /client/proc/ping_webhook, /client/proc/reload_webhooks, /client/proc/toggle_planet_repopulating, - /client/proc/spawn_exoplanet + /client/proc/spawn_exoplanet, + /client/proc/profiler_start ) var/global/list/admin_verbs_paranoid_debug = list( @@ -652,7 +661,7 @@ var/global/list/admin_verbs_mod = list( if(!H) return log_and_message_admins("is altering the appearance of [H].") - H.change_appearance(APPEARANCE_ALL, FALSE, usr, state = GLOB.admin_state) + H.change_appearance(APPEARANCE_ALL, usr, state = GLOB.admin_state) /client/proc/change_human_appearance_self() set name = "Change Mob Appearance - Self" @@ -670,11 +679,11 @@ var/global/list/admin_verbs_mod = list( switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel")) if("Yes") - log_and_message_admins("has allowed [H] to change \his appearance, including races that requires whitelisting") - H.change_appearance(APPEARANCE_COMMON, FALSE) + log_and_message_admins("has allowed [H] to change \his appearance, ignoring allow lists.") + H.change_appearance(APPEARANCE_COMMON | APPEARANCE_SKIP_ALLOW_LIST_CHECK) if("No") - log_and_message_admins("has allowed [H] to change \his appearance, excluding races that requires whitelisting.") - H.change_appearance(APPEARANCE_COMMON, TRUE) + log_and_message_admins("has allowed [H] to change \his appearance, respecting allow lists.") + H.change_appearance(APPEARANCE_COMMON) /client/proc/change_security_level() set name = "Set security level" @@ -743,14 +752,16 @@ var/global/list/admin_verbs_mod = list( if(new_fstyle) M.facial_hair_style = new_fstyle - var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female", "Neuter") - if (new_gender) - if(new_gender == "Male") + var/new_gender = input(usr, "Please select a bodytype", "Character Generation") as null|anything in all_genders_text_list + switch(new_gender) + if("Male") M.gender = MALE - else if (new_gender == "Female") + if ("Female") M.gender = FEMALE - else + if ("Neuter") M.gender = NEUTER + if ("Plural") + M.gender = PLURAL M.update_hair() M.update_body() @@ -898,3 +909,28 @@ var/global/list/admin_verbs_mod = list( if(!S) return T.add_spell(new S) log_and_message_admins("gave [key_name(T)] the spell [S].") + +/client/proc/delete_crew_record() + set category = "Admin" + set name = "Delete Crew Record" + set desc = "Delete a crew record from the global crew list." + + var/list/entries = list() + + for (var/datum/computer_file/report/crew_record/entry in GLOB.all_crew_records) + entries["[entry.get_name()], [entry.get_job()]"] = entry + + if (!length(entries)) + return + + var/choice = input("Pick a record to delete:", "Delete Crew Record") as null | anything in entries + + if (!choice) + return + + var/check = alert("Are you sure you want to delete [choice]?", "Delete Record?", "Yes", "No") + var/datum/computer_file/report/crew_record/record = entries[choice] + + if (check == "Yes") + GLOB.all_crew_records.Remove(record) + log_and_message_admins("has removed [record.get_name()], [record.get_job()]'s crew record.") diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index fa894582a9d57..8a214dcb7b663 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -62,7 +62,10 @@ var/global/jobban_keylist[0] //to store the keys & ranks return //Job permabans - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, job FROM erro_ban WHERE bantype = 'JOB_PERMABAN' AND isnull(unbanned)") + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // var/DBQuery/query = dbcon.NewQuery("SELECT ckey, job FROM erro_ban WHERE bantype = 'JOB_PERMABAN' AND isnull(unbanned)") // SIERRA-EDIT - ORIGINAL + var/DBQuery/query = dbcon.NewQuery("SELECT ckey, job FROM [sqlfdbkdbutil].ban WHERE bantype = 'JOB_PERMABAN' AND isnull(unbanned)") + // [/SIERRA-EDIT] query.Execute() while(query.NextRow()) @@ -72,7 +75,10 @@ var/global/jobban_keylist[0] //to store the keys & ranks jobban_keylist.Add("[ckey] - [job]") //Job tempbans - var/DBQuery/query1 = dbcon.NewQuery("SELECT ckey, job FROM erro_ban WHERE bantype = 'JOB_TEMPBAN' AND isnull(unbanned) AND expiration_time > Now()") + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // var/DBQuery/query1 = dbcon.NewQuery("SELECT ckey, job FROM erro_ban WHERE bantype = 'JOB_TEMPBAN' AND isnull(unbanned) AND expiration_time > Now()") // SIERRA-EDIT - ORIGINAL + var/DBQuery/query1 = dbcon.NewQuery("SELECT ckey, job FROM [sqlfdbkdbutil].ban WHERE bantype = 'JOB_TEMPBAN' AND isnull(unbanned) AND expiration_time > Now()") + // [/SIERRA-EDIT] query1.Execute() while(query1.NextRow()) diff --git a/code/modules/admin/buildmode/_build_mode.dm b/code/modules/admin/buildmode/_build_mode.dm index 5c6b0cebf6823..9c4797d2cb3a7 100644 --- a/code/modules/admin/buildmode/_build_mode.dm +++ b/code/modules/admin/buildmode/_build_mode.dm @@ -16,7 +16,7 @@ host = null . = ..() -/datum/build_mode/proc/OnClick(atom/A, list/parameters) +/datum/build_mode/proc/OnClick(atom/A, params) return /datum/build_mode/proc/Configurate() diff --git a/code/modules/admin/buildmode/_buttons.dm b/code/modules/admin/buildmode/_buttons.dm index 045e6d4c995aa..a0a0c40851fbf 100644 --- a/code/modules/admin/buildmode/_buttons.dm +++ b/code/modules/admin/buildmode/_buttons.dm @@ -1,4 +1,4 @@ -/obj/effect/bmode +/obj/bmode density = TRUE anchored = TRUE plane = HUD_PLANE @@ -6,26 +6,26 @@ icon = 'icons/misc/buildmode.dmi' var/datum/click_handler/build_mode/host -/obj/effect/bmode/New(host) +/obj/bmode/New(host) ..() src.host = host -/obj/effect/bmode/Destroy() +/obj/bmode/Destroy() host = null . = ..() -/obj/effect/bmode/proc/OnClick(list/params) +/obj/bmode/proc/OnClick(params) return -/obj/effect/bmode/dir +/obj/bmode/dir icon_state = "build" screen_loc = "NORTH,WEST" -/obj/effect/bmode/dir/New() +/obj/bmode/dir/New() ..() set_dir(host.dir) -/obj/effect/bmode/dir/OnClick(list/parameters) +/obj/bmode/dir/OnClick(params) switch(dir) if(SOUTH) set_dir(WEST) @@ -39,22 +39,23 @@ set_dir(SOUTH) host.dir = dir -/obj/effect/bmode/help +/obj/bmode/help icon_state = "buildhelp" screen_loc = "NORTH,WEST+1" -/obj/effect/bmode/help/OnClick() +/obj/bmode/help/OnClick(params) host.current_build_mode.Help() -/obj/effect/bmode/mode +/obj/bmode/mode screen_loc = "NORTH,WEST+2" -/obj/effect/bmode/mode/New() +/obj/bmode/mode/New() ..() icon_state = host.current_build_mode.icon_state -/obj/effect/bmode/mode/OnClick(list/parameters) - if(parameters["left"]) +/obj/bmode/mode/OnClick(params) + var/list/modifiers = params2list(params) + if(LAZYACCESS(modifiers, LEFT_CLICK)) var/datum/build_mode/build_mode = input("Select build mode", "Select build mode", host.current_build_mode) as null|anything in host.build_modes if(build_mode && host && (build_mode in host.build_modes)) host.current_build_mode.Unselected() @@ -62,12 +63,12 @@ host.current_build_mode = build_mode icon_state = build_mode.icon_state to_chat(usr, SPAN_NOTICE("Build mode '[host.current_build_mode]' selected.")) - else if(parameters["right"]) + else if(LAZYACCESS(modifiers, RIGHT_CLICK)) host.current_build_mode.Configurate() -/obj/effect/bmode/quit +/obj/bmode/quit icon_state = "buildquit" screen_loc = "NORTH,WEST+3" -/obj/effect/bmode/quit/OnClick() +/obj/bmode/quit/OnClick(params) usr.RemoveClickHandler(/datum/click_handler/build_mode) diff --git a/code/modules/admin/buildmode/_click_handler.dm b/code/modules/admin/buildmode/_click_handler.dm index 89fb249b56c97..d815ddde03bc9 100644 --- a/code/modules/admin/buildmode/_click_handler.dm +++ b/code/modules/admin/buildmode/_click_handler.dm @@ -19,8 +19,8 @@ current_build_mode = build_mode build_buttons = list() - for(var/button_type in subtypesof(/obj/effect/bmode)) - var/obj/effect/bmode/build_button = new button_type(src) + for(var/button_type in subtypesof(/obj/bmode)) + var/obj/bmode/build_button = new button_type(src) build_buttons += build_button StartTimer() current_build_mode.Selected() @@ -36,7 +36,7 @@ . = ..() /datum/click_handler/build_mode/proc/StartTimer() - timer_handle = addtimer(new Callback(src, .proc/TimerEvent), 1 SECOND, TIMER_UNIQUE | TIMER_STOPPABLE | TIMER_LOOP) + timer_handle = addtimer(CALLBACK(src, PROC_REF(TimerEvent)), 1 SECOND, TIMER_UNIQUE | TIMER_STOPPABLE | TIMER_LOOP) /datum/click_handler/build_mode/proc/StopTimer() deltimer(timer_handle) @@ -61,9 +61,8 @@ OnClick(A, params) // We treat double-clicks as normal clicks /datum/click_handler/build_mode/OnClick(atom/A, params) - params = params2list(params) if(A in build_buttons) - var/obj/effect/bmode/build_button = A + var/obj/bmode/build_button = A build_button.OnClick(params) else current_build_mode.OnClick(A, params) diff --git a/code/modules/admin/buildmode/_datums/mob_spawner.dm b/code/modules/admin/buildmode/_datums/mob_spawner.dm index 6c12f5e771493..8bbfcd61c4208 100644 --- a/code/modules/admin/buildmode/_datums/mob_spawner.dm +++ b/code/modules/admin/buildmode/_datums/mob_spawner.dm @@ -60,13 +60,12 @@ var/mob/living/simple_animal/M for (var/i = 1; i <= 10; i++) if (radius == -1) - T = pick_area_turf(area, list(/proc/not_turf_contains_dense_objects)) + T = pick_area_turf(area, list(GLOBAL_PROC_REF(not_turf_contains_dense_objects))) if (!T) //no open spaces to spawn on T = pick_area_turf(area) else - var/list/turfs = trange(radius, center) - T = pick(turfs) + T = pick(RANGE_TURFS(center, radius)) M = pick(mobs) diff --git a/code/modules/admin/buildmode/_overlay.dm b/code/modules/admin/buildmode/_overlay.dm index 6b2684bc15f53..1aa261d89f333 100644 --- a/code/modules/admin/buildmode/_overlay.dm +++ b/code/modules/admin/buildmode/_overlay.dm @@ -51,6 +51,6 @@ var/turf/T = locate(user.x + x, user.y + y, user.z) if (T) M.alpha = 255 - invoke_async(buildmode, /datum/build_mode/.proc/UpdateOverlay, M, T) + invoke_async(buildmode, TYPE_PROC_REF(/datum/build_mode, UpdateOverlay), M, T) else M.alpha = 0 diff --git a/code/modules/admin/buildmode/ai.dm b/code/modules/admin/buildmode/ai.dm index 51e8c8715bf2a..a573bd1487897 100644 --- a/code/modules/admin/buildmode/ai.dm +++ b/code/modules/admin/buildmode/ai.dm @@ -56,8 +56,9 @@ if (M.ai_status_image) user.add_client_image(M.ai_status_image) -/datum/build_mode/ai/OnClick(atom/A, list/pa) - if (pa["left"]) +/datum/build_mode/ai/OnClick(atom/A, params) + var/list/modifiers = params2list(params) + if (LAZYACCESS(modifiers, LEFT_CLICK)) if (isliving(A)) var/mob/living/L = A var/datum/ai_holder/AI = L.ai_holder @@ -66,14 +67,14 @@ return // Select multiple units - if (pa["ctrl"]) + if (LAZYACCESS(modifiers, CTRL_CLICK)) if (!isnull(L.get_AI_stance())) select_AI_mob(A) return // Pause/unpause AI - if (pa["shift"]) + if (LAZYACCESS(modifiers, SHIFT_CLICK)) var/stance = L.get_AI_stance() if (!isnull(stance)) // Null means there's no AI datum or it has one but is player controlled w/o autopilot on. if (stance == STANCE_SLEEP) @@ -90,7 +91,7 @@ return // Toggle hostility - if (pa["alt"]) + if (LAZYACCESS(modifiers, ALT_CLICK)) if (!isnull(L.get_AI_stance())) AI.hostile = !AI.hostile AI.lose_target() @@ -113,31 +114,31 @@ deselect_all() - if (pa["right"]) + if (LAZYACCESS(modifiers, RIGHT_CLICK)) if (isliving(A)) var/mob/living/L = A // Change/Set AI Holder - if (pa["alt"] && pa["shift"]) + if (LAZYACCESS(modifiers, ALT_CLICK) && LAZYACCESS(modifiers, SHIFT_CLICK)) if (!ai_type) to_chat(user, SPAN_WARNING("No AI type selected.")) return if (!isnull(L.ai_holder)) - GLOB.stat_set_event.unregister(L, L.ai_holder, /datum/ai_holder/proc/holder_stat_change) + GLOB.stat_set_event.unregister(L, L.ai_holder, TYPE_PROC_REF(/datum/ai_holder, holder_stat_change)) qdel(L.ai_holder) L.ai_holder = new ai_type (L) to_chat(user, SPAN_NOTICE("\The [L]'s AI type has been changed to [ai_type]")) return // Copy faction - if (pa["shift"]) + if (LAZYACCESS(modifiers, SHIFT_CLICK)) copied_faction = L.faction to_chat(user, SPAN_NOTICE("Copied faction '[copied_faction]'.")) return // Paste faction - if (pa["ctrl"]) + if (LAZYACCESS(modifiers, CTRL_CLICK)) if (!copied_faction) to_chat(user, SPAN_WARNING("LMB+Shift a mob to copy their faction before pasting.")) return @@ -148,7 +149,7 @@ if (istype(A, /atom)) // Force attack. - if (pa["alt"]) + if (LAZYACCESS(modifiers, ALT_CLICK)) var/i = 0 for(var/mob/living/unit in selected_mobs) var/datum/ai_holder/AI = unit.ai_holder @@ -173,14 +174,14 @@ unit.forceMove(T) forced++ else - AI.give_destination(T, 0, pa["shift"]) // If shift is held, the mobs will not stop moving to attack a visible enemy. + AI.give_destination(T, 0, LAZYACCESS(modifiers, SHIFT_CLICK)) // If shift is held, the mobs will not stop moving to attack a visible enemy. told++ to_chat(user, SPAN_NOTICE("Commanded [told] mob\s to move to \the [T], and manually placed [forced] of them.")) var/image/orderimage = image(buildmode_hud,T,"ai_turforder") flick_overlay(orderimage, list(user.client), 8, TRUE) return - if (pa["middle"]) + if (LAZYACCESS(modifiers, MIDDLE_CLICK)) if(isliving(A)) // Follow or attack. var/mob/living/L = A var/i = 0 // Attacking mobs. @@ -189,7 +190,7 @@ var/datum/ai_holder/AI = unit.ai_holder if (!AI) return - if(L.IIsAlly(unit) || !AI.hostile || pa["shift"]) + if(L.IIsAlly(unit) || !AI.hostile || LAZYACCESS(modifiers, SHIFT_CLICK)) AI.set_follow(L) j++ else @@ -212,7 +213,7 @@ /datum/build_mode/ai/proc/select_AI_mob(mob/living/unit) selected_mobs += unit user.client.images += unit.selected_image - GLOB.destroyed_event.register(unit, src, .proc/deselect_AI_mob) + GLOB.destroyed_event.register(unit, src, PROC_REF(deselect_AI_mob)) /datum/build_mode/ai/proc/deselect_AI_mob(mob/living/unit) selected_mobs -= unit @@ -256,10 +257,10 @@ holder = H break if(!holder) return - var/list/pa = params2list(params) - if (pa["ctrl"]) + var/list/modifiers = params2list(params) + if (LAZYACCESS(modifiers, CTRL_CLICK)) //Holding shift prevents the deselection of existing - if(!pa["shift"]) + if(!LAZYACCESS(modifiers, SHIFT_CLICK)) for(var/mob/living/unit in holder.selected_mobs) holder.deselect_AI_mob(unit) diff --git a/code/modules/admin/buildmode/areas.dm b/code/modules/admin/buildmode/areas.dm index 29a4cb5a02262..f8a8180aafb99 100644 --- a/code/modules/admin/buildmode/areas.dm +++ b/code/modules/admin/buildmode/areas.dm @@ -43,24 +43,25 @@ Shift + Right Click - Select point B return M.color = colors.get(T.loc) -/datum/build_mode/areas/OnClick(atom/A, list/parameters) - if (parameters["right"] && !parameters["shift"]) +/datum/build_mode/areas/OnClick(atom/A, params) + var/list/modifiers = params2list(params) + if (LAZYACCESS(modifiers, RIGHT_CLICK) && !LAZYACCESS(modifiers, SHIFT_CLICK)) Configurate() return var/turf/T = get_turf(A) var/area/R = T?.loc if ((!T) || (!R)) return - if (parameters["ctrl"] || parameters["middle"]) + if (LAZYACCESS(modifiers, CTRL_CLICK) || LAZYACCESS(modifiers, MIDDLE_CLICK)) selected_area = R to_chat(user, "Picked area [selected_area.name]") else if (selected_area) - if (parameters["left"] && parameters["shift"]) + if (LAZYACCESS(modifiers, LEFT_CLICK) && LAZYACCESS(modifiers, SHIFT_CLICK)) coordinate_A = get_turf(A) to_chat(user, SPAN_NOTICE("Defined [coordinate_A] ([coordinate_A.type]) as point A.")) - if (parameters["right"] && parameters["shift"]) + if (LAZYACCESS(modifiers, RIGHT_CLICK) && LAZYACCESS(modifiers, SHIFT_CLICK)) coordinate_B = get_turf(A) to_chat(user, SPAN_NOTICE("Defined [coordinate_B] ([coordinate_B.type]) as point B.")) @@ -74,7 +75,7 @@ Shift + Right Click - Select point B - ChangeArea(T, selected_area) + T.change_area(selected_area) to_chat(user, "Set area of turf [T.name] to [selected_area.name]") else to_chat(user, "Pick or create an area first") @@ -84,7 +85,7 @@ Shift + Right Click - Select point B if (mode == "Pick") var/area/path = select_subpath((selected_area?.type || /area/space), /area) if (path) - for (var/area/R in world) + for (var/area/R as anything in GLOB.areas) if (R.type == path) SelectArea(R) to_chat(user, "Picked area [selected_area.name]") @@ -108,12 +109,12 @@ Shift + Right Click - Select point B return UnselectArea() selected_area = A - GLOB.destroyed_event.register(selected_area, src, .proc/UnselectArea) + GLOB.destroyed_event.register(selected_area, src, PROC_REF(UnselectArea)) /datum/build_mode/areas/proc/UnselectArea() if(!selected_area) return - GLOB.destroyed_event.unregister(selected_area, src, .proc/UnselectArea) + GLOB.destroyed_event.unregister(selected_area, src, PROC_REF(UnselectArea)) var/has_turf = FALSE for(var/turf/T in selected_area) @@ -127,4 +128,4 @@ Shift + Right Click - Select point B for(var/i = low_bound_x, i <= high_bound_x, i++) for(var/j = low_bound_y, j <= high_bound_y, j++) var/turf/T = locate(i, j, z_level) - ChangeArea(T, selected_area) + T.change_area(selected_area) diff --git a/code/modules/admin/buildmode/atmosphere.dm b/code/modules/admin/buildmode/atmosphere.dm index f4f5a2a11e73d..2eb67829500a4 100644 --- a/code/modules/admin/buildmode/atmosphere.dm +++ b/code/modules/admin/buildmode/atmosphere.dm @@ -211,7 +211,7 @@ if (mode == MODE_AREA && env_area.planetary_surface) //exoplanets will slowly reset their atmosphere to default if we don't update it - var/obj/effect/overmap/visitable/sector/exoplanet/E = map_sectors["[env_area.z]"] + var/obj/overmap/visitable/sector/exoplanet/E = map_sectors["[env_area.z]"] if (istype(E)) E.atmosphere.gas = enviroment.gas.Copy() E.atmosphere.temperature = enviroment.temperature diff --git a/code/modules/admin/buildmode/build.dm b/code/modules/admin/buildmode/build.dm index b8854e6e9e41a..adcacbd081721 100644 --- a/code/modules/admin/buildmode/build.dm +++ b/code/modules/admin/buildmode/build.dm @@ -21,16 +21,17 @@ build_type = select_subpath(build_type || /obj/item/latexballon) to_chat(user, "Selected Type [build_type]") -/datum/build_mode/build/OnClick(atom/target, list/parameters) +/datum/build_mode/build/OnClick(atom/target, params) if (!target) return - if (parameters["middle"] || parameters["ctrl"] && parameters["left"]) + var/list/modifiers = params2list(params) + if (LAZYACCESS(modifiers, MIDDLE_CLICK) || LAZYACCESS(modifiers, CTRL_CLICK) && LAZYACCESS(modifiers, LEFT_CLICK)) if (ispath(target.type, /atom)) to_chat(user, "Selected Type [target.type]") build_type = target.type return var/turf/location = get_turf(target) - if (parameters["right"]) + if (LAZYACCESS(modifiers, RIGHT_CLICK)) if (isturf(target)) return if (isobserver(target)) // don't delete ghosts because it causes very weird things to happen @@ -44,7 +45,7 @@ to_chat(M, SPAN_DEBUG(FONT_LARGE("OOC: You have been deleted by an admin using build mode. If this seems to be in error, please adminhelp and let them know."))) M.ghostize() qdel(target) - else if (parameters["left"]) + else if (LAZYACCESS(modifiers, LEFT_CLICK)) if (!build_type) to_chat(user, SPAN_WARNING("Select a type to construct.")) return diff --git a/code/modules/admin/buildmode/edit.dm b/code/modules/admin/buildmode/edit.dm index d92e9f8cde839..e08478f833a6f 100644 --- a/code/modules/admin/buildmode/edit.dm +++ b/code/modules/admin/buildmode/edit.dm @@ -45,14 +45,15 @@ SetValue(new_value) -/datum/build_mode/edit/OnClick(atom/A, list/parameters) +/datum/build_mode/edit/OnClick(atom/A, params) if (A.may_not_edit_var(usr, var_to_edit)) return + var/list/modifiers = params2list(params) var/old_value = A.vars[var_to_edit] var/new_value - if (parameters["left"]) + if (LAZYACCESS(modifiers, LEFT_CLICK)) new_value = value_to_set - if (parameters["right"]) + if (LAZYACCESS(modifiers, RIGHT_CLICK)) new_value = initial(A.vars[var_to_edit]) if (old_value == new_value) return @@ -66,13 +67,13 @@ return ClearValue() value_to_set = new_value - GLOB.destroyed_event.register(value_to_set, src, /datum/build_mode/edit/proc/ClearValue) + GLOB.destroyed_event.register(value_to_set, src, TYPE_PROC_REF(/datum/build_mode/edit, ClearValue)) /datum/build_mode/edit/proc/ClearValue(feedback) if (!istype(value_to_set, /datum)) return - GLOB.destroyed_event.unregister(value_to_set, src, /datum/build_mode/edit/proc/ClearValue) + GLOB.destroyed_event.unregister(value_to_set, src, TYPE_PROC_REF(/datum/build_mode/edit, ClearValue)) value_to_set = initial(value_to_set) if (feedback) Warn("The selected reference value was deleted. Default value restored.") diff --git a/code/modules/admin/buildmode/ladders.dm b/code/modules/admin/buildmode/ladders.dm index babdab0da98ce..08ccd2f3f4d4c 100644 --- a/code/modules/admin/buildmode/ladders.dm +++ b/code/modules/admin/buildmode/ladders.dm @@ -11,11 +11,12 @@ to_chat(user, SPAN_NOTICE("As soon as both points have been selected, the ladder is created.")) to_chat(user, SPAN_NOTICE("***********************************************************")) -/datum/build_mode/ladders/OnClick(atom/A, list/parameters) - if(parameters["left"]) +/datum/build_mode/ladders/OnClick(atom/A, list/params) + var/list/modifiers = params2list(params) + if(LAZYACCESS(modifiers, LEFT_CLICK)) ladder_upper = get_turf(A) to_chat(user, SPAN_NOTICE("Defined [ladder_upper] ([ladder_upper.type]) as the upper ladder location.")) - if(parameters["right"]) + if(LAZYACCESS(modifiers, RIGHT_CLICK)) ladder_lower = get_turf(A) to_chat(user, SPAN_NOTICE("Defined [ladder_lower] ([ladder_lower.type]) as the lower ladder location.")) if(ladder_upper && ladder_lower) diff --git a/code/modules/admin/buildmode/light_maker.dm b/code/modules/admin/buildmode/light_maker.dm index 552624cb87838..c1fdd7165d937 100644 --- a/code/modules/admin/buildmode/light_maker.dm +++ b/code/modules/admin/buildmode/light_maker.dm @@ -2,8 +2,8 @@ name = "Light Maker" icon_state = "buildmode8" - var/light_outer_range = 3 - var/light_max_bright = 3 + var/light_range = 3 + var/light_power = 1 var/light_color = COLOR_WHITE /datum/build_mode/light_maker/Help() @@ -17,23 +17,24 @@ var/choice = alert("Change the new light range, power, or color?", "Light Maker", "Range", "Power", "Color", "Cancel") switch(choice) if("Range") - var/input = input("New light range.", name, light_outer_range) as null|num + var/input = input("New light range.", name, light_range) as null|num if(input) - light_outer_range = input + light_range = input if("Power") - var/input = input("New light power, from 0.1 to 1 in decimal increments.", name, light_max_bright) as null|num + var/input = input("New light power, from 0.1 to 1 in decimal increments.", name, light_power) as null|num if(input) input = clamp(input, 0.1, 1) - light_max_bright = input + light_power = input if("Color") var/input = input("New light color.", name, light_color) as null|color if(input) light_color = input -/datum/build_mode/light_maker/OnClick(atom/A, list/parameters) - if(parameters["left"]) +/datum/build_mode/light_maker/OnClick(atom/A, params) + var/list/modifiers = params2list(params) + if(LAZYACCESS(modifiers, LEFT_CLICK)) if(A) - A.set_light(light_max_bright, 0.1, light_outer_range, l_color = light_color) - if(parameters["right"]) + A.set_light(light_range, light_power, l_color = light_color) + if(LAZYACCESS(modifiers, RIGHT_CLICK)) if(A) A.set_light(0, 0, 0, l_color = COLOR_WHITE) diff --git a/code/modules/admin/buildmode/meteor.dm b/code/modules/admin/buildmode/meteor.dm index 216cad7d63976..251bcf9c0e7e3 100644 --- a/code/modules/admin/buildmode/meteor.dm +++ b/code/modules/admin/buildmode/meteor.dm @@ -22,20 +22,21 @@ When a meteor is spawned, its type is randomly chosen from the list. The list mu var/choice = alert("Add or remove a meteor type from the list?", "Add/Remove", "Add", "Remove", "Cancel") if (choice == "Add") - var/obj/effect/meteor/M = select_subpath(/obj/effect/meteor) + var/obj/meteor/M = select_subpath(/obj/meteor) if (M) meteors += M to_chat(user, "Added [M] to the list of meteor types.") if (choice == "Remove") - var/obj/effect/meteor/M = input("Choose a meteor type to remove", "Meteor List") as null | anything in meteors + var/obj/meteor/M = input("Choose a meteor type to remove", "Meteor List") as null | anything in meteors if (M) meteors -= M to_chat(user, "Removed [M] from the list of meteor types.") -/datum/build_mode/meteor/OnClick(atom/A, list/parameters) - if (parameters["left"]) +/datum/build_mode/meteor/OnClick(atom/A, params) + var/list/modifiers = params2list(params) + if (LAZYACCESS(modifiers, LEFT_CLICK)) if (!length(meteors)) to_chat(user, SPAN_NOTICE("You must specify at least one meteor type to spawn first!")) return @@ -59,7 +60,7 @@ When a meteor is spawned, its type is randomly chosen from the list. The list mu spawn_point = null return - else if (parameters["right"]) + else if (LAZYACCESS(modifiers, RIGHT_CLICK)) entrance = null exit = null to_chat(user, SPAN_NOTICE("Selection cancelled.")) @@ -69,7 +70,7 @@ When a meteor is spawned, its type is randomly chosen from the list. The list mu set waitfor = FALSE var/Me = pickweight(meteors) - var/obj/effect/meteor/M = new Me(spawn_point) + var/obj/meteor/M = new Me(spawn_point) var/turf/edge = get_edge_target_turf(spawn_point, direction) M.dest = edge walk_towards(M, edge, 3) diff --git a/code/modules/admin/buildmode/mob_spawning.dm b/code/modules/admin/buildmode/mob_spawning.dm index e67f5d98e82bc..9a1e906b3ec0f 100644 --- a/code/modules/admin/buildmode/mob_spawning.dm +++ b/code/modules/admin/buildmode/mob_spawning.dm @@ -234,7 +234,7 @@ GLOBAL_LIST_INIT(mob_spawners, list()) return TOPIC_HANDLED -/datum/build_mode/mob_mode/OnClick(atom/object, list/pa) +/datum/build_mode/mob_mode/OnClick(atom/object, params) current_area = get_area(object) current_turf = get_turf(object) @@ -256,12 +256,13 @@ GLOBAL_LIST_INIT(mob_spawners, list()) spawner.center = current_turf to_chat(user, "Spawner created in [current_area].") - if (pa["ctrl"]) - if (pa["left"]) + var/list/modifiers = params2list(params) + if (LAZYACCESS(modifiers, CTRL_CLICK)) + if (LAZYACCESS(modifiers, RIGHT_CLICK)) copied_spawner = spawner.copy() to_chat(user, "Spawner from area [current_area] copied.") - else if (pa["right"]) + else if (LAZYACCESS(modifiers, RIGHT_CLICK)) if (length(copied_spawner) == 0) to_chat(user, SPAN_WARNING("No spawner copied, cannot paste settings!")) return @@ -269,10 +270,10 @@ GLOBAL_LIST_INIT(mob_spawners, list()) spawner.paste(copied_spawner) to_chat(user, "Spawner pasted in area [current_area].") - else if (pa["left"]) + else if (LAZYACCESS(modifiers, RIGHT_CLICK)) ui_interact(user) - else if (pa["right"]) + else if (LAZYACCESS(modifiers, RIGHT_CLICK)) if (spawner) QDEL_NULL(spawner) to_chat(user, "Deleted spawner in [current_area].") diff --git a/code/modules/admin/buildmode/move_into.dm b/code/modules/admin/buildmode/move_into.dm index 54595dc0e7898..37cb90d7b949c 100644 --- a/code/modules/admin/buildmode/move_into.dm +++ b/code/modules/admin/buildmode/move_into.dm @@ -14,10 +14,11 @@ to_chat(user, SPAN_NOTICE("Right Click on Movable Atom = Move target into destination")) to_chat(user, SPAN_NOTICE("***********************************************************")) -/datum/build_mode/move_into/OnClick(atom/movable/A, list/parameters) - if(parameters["left"]) +/datum/build_mode/move_into/OnClick(atom/movable/A, params) + var/list/modifiers = params2list(params) + if(LAZYACCESS(modifiers, LEFT_CLICK)) SetDestination(A) - if(parameters["right"]) + if(LAZYACCESS(modifiers, RIGHT_CLICK)) if(!destination) to_chat(user, SPAN_WARNING("No target destination.")) else if(!ismovable(A)) @@ -33,14 +34,14 @@ ClearDestination() destination = A - GLOB.destroyed_event.register(destination, src, /datum/build_mode/move_into/proc/ClearDestination) + GLOB.destroyed_event.register(destination, src, TYPE_PROC_REF(/datum/build_mode/move_into, ClearDestination)) to_chat(user, SPAN_NOTICE("Will now move targets into \the [destination].")) /datum/build_mode/move_into/proc/ClearDestination(feedback) if(!destination) return - GLOB.destroyed_event.unregister(destination, src, /datum/build_mode/move_into/proc/ClearDestination) + GLOB.destroyed_event.unregister(destination, src, TYPE_PROC_REF(/datum/build_mode/move_into, ClearDestination)) destination = null if(feedback) Warn("The selected destination was deleted.") diff --git a/code/modules/admin/buildmode/paint.dm b/code/modules/admin/buildmode/paint.dm index a40bc1d9af5e3..7fcf3c783ebc1 100644 --- a/code/modules/admin/buildmode/paint.dm +++ b/code/modules/admin/buildmode/paint.dm @@ -23,13 +23,14 @@ to_chat(user, SPAN_NOTICE("Color set to [selected_color].")) -/datum/build_mode/paint/OnClick(atom/A, list/parameters) +/datum/build_mode/paint/OnClick(atom/A, params) var/result - if (parameters["left"]) - if (parameters["shift"]) + var/list/modifiers = params2list(params) + if (LAZYACCESS(modifiers, LEFT_CLICK)) + if (LAZYACCESS(modifiers, SHIFT_CLICK)) result = clear_color(A) - else if (parameters["ctrl"]) + else if (LAZYACCESS(modifiers, CTRL_CLICK)) result = clone_color(A) if (!result) to_chat(user, SPAN_NOTICE("Selected paint mode color is now [selected_color].")) @@ -38,7 +39,7 @@ else result = set_color(A) - else if (parameters["right"]) + else if (LAZYACCESS(modifiers, RIGHT_CLICK)) result = clear_color(A) if (result) diff --git a/code/modules/admin/buildmode/portals.dm b/code/modules/admin/buildmode/portals.dm index 69ff9b97e0250..e804637321297 100644 --- a/code/modules/admin/buildmode/portals.dm +++ b/code/modules/admin/buildmode/portals.dm @@ -13,20 +13,21 @@ Right Click + Ctrl - Delete all portals ************************************\ "} -/datum/build_mode/portals/OnClick(atom/A, list/parameters) - if (parameters["ctrl"]) - if (parameters["left"]) - if (istype(A, /obj/effect/portal) && (A in portals)) +/datum/build_mode/portals/OnClick(atom/A, params) + var/list/modifiers = params2list(params) + if (LAZYACCESS(modifiers, CTRL_CLICK)) + if (LAZYACCESS(modifiers, LEFT_CLICK)) + if (istype(A, /obj/portal) && (A in portals)) qdel(A) to_chat(user, SPAN_NOTICE("Portal deleted.")) - else if (parameters["right"]) + else if (LAZYACCESS(modifiers, RIGHT_CLICK)) var/choice = alert("Delete all active portals?", "Delete All", "Yes", "No") if (choice == "Yes") - for (var/obj/effect/portal/P in portals) + for (var/obj/portal/P in portals) qdel(P) portals.Cut() - else if (parameters["left"]) + else if (LAZYACCESS(modifiers, LEFT_CLICK)) if (!entrance) entrance = get_turf(A) to_chat(user, SPAN_NOTICE("Entrance turf selected: [entrance]")) @@ -50,13 +51,13 @@ Right Click + Ctrl - Delete all portals ttl = rand(30, 60) ttl = ttl SECONDS - var/obj/effect/portal/P = new /obj/effect/portal(entrance, exit, ttl) + var/obj/portal/P = new /obj/portal(entrance, exit, ttl) P.SetName(name) portals += P entrance = null exit = null - else if (parameters["right"]) + else if (LAZYACCESS(modifiers, RIGHT_CLICK)) entrance = null exit = null to_chat(user, SPAN_NOTICE("Selection cancelled.")) diff --git a/code/modules/admin/buildmode/relocate_to.dm b/code/modules/admin/buildmode/relocate_to.dm index 1a3baa03513bf..4d738aac97ebe 100644 --- a/code/modules/admin/buildmode/relocate_to.dm +++ b/code/modules/admin/buildmode/relocate_to.dm @@ -13,11 +13,12 @@ to_chat(user, SPAN_NOTICE("Right Click on Turf = Destination to be relocated to")) to_chat(user, SPAN_NOTICE("***********************************************************")) -/datum/build_mode/relocate_to/OnClick(atom/A, list/parameters) - if(parameters["left"]) +/datum/build_mode/relocate_to/OnClick(atom/A, params) + var/list/modifiers = params2list(params) + if(LAZYACCESS(modifiers, LEFT_CLICK)) if(istype(A, /atom/movable)) SetRelocator(A) - else if(parameters["right"]) + else if(LAZYACCESS(modifiers, RIGHT_CLICK)) if(to_relocate) var/destination_turf = get_turf(A) if(destination_turf) @@ -34,14 +35,14 @@ ClearRelocator() to_relocate = new_relocator - GLOB.destroyed_event.register(to_relocate, src, /datum/build_mode/relocate_to/proc/ClearRelocator) + GLOB.destroyed_event.register(to_relocate, src, TYPE_PROC_REF(/datum/build_mode/relocate_to, ClearRelocator)) to_chat(user, SPAN_NOTICE("Will now be relocating \the [to_relocate].")) /datum/build_mode/relocate_to/proc/ClearRelocator(feedback) if(!to_relocate) return - GLOB.destroyed_event.unregister(to_relocate, src, /datum/build_mode/relocate_to/proc/ClearRelocator) + GLOB.destroyed_event.unregister(to_relocate, src, TYPE_PROC_REF(/datum/build_mode/relocate_to, ClearRelocator)) to_relocate = null if(feedback) Warn("The selected relocation object was deleted.") diff --git a/code/modules/admin/buildmode/room_builder.dm b/code/modules/admin/buildmode/room_builder.dm index d12cab242ac84..7a058143e5a51 100644 --- a/code/modules/admin/buildmode/room_builder.dm +++ b/code/modules/admin/buildmode/room_builder.dm @@ -29,11 +29,12 @@ wall_type = select_subpath(wall_type) || wall_type to_chat(user, SPAN_NOTICE("Wall type set to [wall_type].")) -/datum/build_mode/room_builder/OnClick(atom/A, list/parameters) - if(parameters["left"]) +/datum/build_mode/room_builder/OnClick(atom/A, params) + var/list/modifiers = params2list(params) + if(LAZYACCESS(modifiers, LEFT_CLICK)) coordinate_A = get_turf(A) to_chat(user, SPAN_NOTICE("Defined [coordinate_A] ([coordinate_A.type]) as point A.")) - if(parameters["right"]) + if(LAZYACCESS(modifiers, RIGHT_CLICK)) coordinate_B = get_turf(A) to_chat(user, SPAN_NOTICE("Defined [coordinate_B] ([coordinate_B.type]) as point B.")) @@ -41,7 +42,7 @@ to_chat(user, SPAN_NOTICE("Room coordinates set. Building room.")) Log("Created a room with wall type [wall_type] and floor type [floor_type] from [log_info_line(coordinate_A)] to [log_info_line(coordinate_B)]") var/list/coords = make_rectangle(coordinate_A, coordinate_B) - make_room(coords[1], coords[2], coords[3], coords[4], coords[5], wall_type, floor_type, parameters["shift"], parameters["ctrl"]) + make_room(coords[1], coords[2], coords[3], coords[4], coords[5], wall_type, floor_type, LAZYACCESS(modifiers, SHIFT_CLICK), LAZYACCESS(modifiers, CTRL_CLICK)) coordinate_A = null coordinate_B = null diff --git a/code/modules/admin/buildmode/throw_at.dm b/code/modules/admin/buildmode/throw_at.dm index 661f7adef4abd..a273640658375 100644 --- a/code/modules/admin/buildmode/throw_at.dm +++ b/code/modules/admin/buildmode/throw_at.dm @@ -13,11 +13,12 @@ to_chat(user, SPAN_NOTICE("Right Click on Atom = Throw at the target")) to_chat(user, SPAN_NOTICE("***********************************************************")) -/datum/build_mode/throw_at/OnClick(atom/A, list/parameters) - if(parameters["left"]) +/datum/build_mode/throw_at/OnClick(atom/A, params) + var/list/modifiers = params2list(params) + if(LAZYACCESS(modifiers, LEFT_CLICK)) if(istype(A, /atom/movable)) SetThrowable(A) - else if(parameters["right"]) + else if(LAZYACCESS(modifiers, RIGHT_CLICK)) if(to_throw) if(!isturf(to_throw.loc)) to_chat(user, SPAN_WARNING("\The [to_throw] is currently not on a turf and cannot be thrown.")) @@ -33,14 +34,14 @@ ClearThrowable() to_throw = new_throwable - GLOB.destroyed_event.register(to_throw, src, /datum/build_mode/throw_at/proc/ClearThrowable) + GLOB.destroyed_event.register(to_throw, src, TYPE_PROC_REF(/datum/build_mode/throw_at, ClearThrowable)) to_chat(user, SPAN_NOTICE("Will now be throwing \the [to_throw].")) /datum/build_mode/throw_at/proc/ClearThrowable(feedback) if(!to_throw) return - GLOB.destroyed_event.unregister(to_throw, src, /datum/build_mode/throw_at/proc/ClearThrowable) + GLOB.destroyed_event.unregister(to_throw, src, TYPE_PROC_REF(/datum/build_mode/throw_at, ClearThrowable)) to_throw = null if(feedback) Warn("The selected throwing object was deleted.") diff --git a/code/modules/admin/buildmode/turret.dm b/code/modules/admin/buildmode/turret.dm index fdcbcb6b7bbec..6337368e5def5 100644 --- a/code/modules/admin/buildmode/turret.dm +++ b/code/modules/admin/buildmode/turret.dm @@ -125,12 +125,13 @@ . = TOPIC_HANDLED -/datum/build_mode/turret/OnClick(atom/object, list/pa) - if (pa["right"]) +/datum/build_mode/turret/OnClick(atom/object, params) + var/list/modifiers = params2list(params) + if (LAZYACCESS(modifiers, RIGHT_CLICK)) if (istype(object, /obj/machinery/porta_turret)) qdel(object) - if (pa["left"]) + if (LAZYACCESS(modifiers, RIGHT_CLICK)) if (!object) return diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm index 5844a50e8a759..175bb83743e56 100644 --- a/code/modules/admin/callproc/callproc.dm +++ b/code/modules/admin/callproc/callproc.dm @@ -138,9 +138,10 @@ current = input("Enter number for [length(arguments)+1]\th argument") as null|num if(isnull(current)) return CANCEL - if("type") - current = input("Select type for [length(arguments)+1]\th argument") as null|anything in typesof(/obj, /mob, /area, /turf) - if(isnull(current)) return CANCEL + if ("type") + current = select_subpath(within_scope = /datum) + if (isnull(current)) + return CANCEL if("obj reference") current = input("Select object for [length(arguments)+1]\th argument") as null|obj in world @@ -172,10 +173,6 @@ ; // do nothing if("Cancel") return CANCEL - if ("path") - current = text2path(input("Enter path for [length(arguments)+1]\th argument") as null|text) - if (isnull(current)) - return CANCEL if("marked datum") current = C.holder.marked_datum() @@ -209,6 +206,7 @@ /client/Click(atom/A) if(!user_acted(src)) return + if(holder && holder.callproc && holder.callproc.waiting_for_click) if(alert("Do you want to select \the [A] as the [length(holder.callproc.arguments)+1]\th argument?",, "Yes", "No") == "Yes") holder.callproc.arguments += A @@ -216,8 +214,10 @@ holder.callproc.waiting_for_click = 0 verbs -= /client/proc/cancel_callproc_select holder.callproc.do_args() - else - return ..() + return + + update_hotkey_mode() + return ..() /datum/callproc/proc/finalise() var/returnval diff --git a/code/modules/admin/connectioncheck/bancheck_functions.dm b/code/modules/admin/connectioncheck/bancheck_functions.dm new file mode 100644 index 0000000000000..5b7dafe1affb1 --- /dev/null +++ b/code/modules/admin/connectioncheck/bancheck_functions.dm @@ -0,0 +1,331 @@ +/** + * Checks for bans matching ckey, ip, or cid. + * + * Returns list of lists. + */ +/proc/_fetch_bans(ckey, ip, cid, include_inactive = FALSE) + RETURN_TYPE(/list) + . = list() + ckey = sql_sanitize_text(ckey) + ip = sql_sanitize_text(ip) + cid = sql_sanitize_text(cid) + if (!ckey && !ip && !cid) + return + establish_db_connection() + if (!dbcon.IsConnected()) + crash_with("Database connection failed.") + return + var/selection = list() + if (ckey) + selection += "`ckey` = '[ckey]'" + if (ip) + selection += "`ip` = '[ip]'" + if (cid) + selection += "`computerid` = '[cid]'" + selection = english_list(selection, "", "", " OR ", " OR ") + + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // var/DBQuery/query = dbcon.NewQuery("\ // SIERRA-EDIT - ORIGINAL + // SELECT `bantype`, `reason`, `expiration_time`, `ckey`, `ip`, `computerid`, `a_ckey`, `unbanned`\ // SIERRA-EDIT - ORIGINAL + // FROM `erro_ban`\ // SIERRA-EDIT - ORIGINAL + // WHERE `bantype` IN ('PERMABAN', 'TEMPBAN') AND \ // SIERRA-EDIT - ORIGINAL + // ([selection])\ // SIERRA-EDIT - ORIGINAL + // ") // SIERRA-EDIT - ORIGINAL + var/DBQuery/query = dbcon.NewQuery("\ + SELECT `bantype`, `reason`, `expiration_time`, `ckey`, `ip`, `computerid`, `a_ckey`, `unbanned`\ + FROM `[sqlfdbkdbutil]`.`ban`\ + WHERE `bantype` IN ('PERMABAN', 'TEMPBAN') AND \ + ([selection])\ + ") + // [/SIERRA-EDIT] + query.Execute() + var/now = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") + while (query.NextRow()) + var/row = list( + "bantype" = query.item[1], + "reason" = query.item[2], + "expiration_time" = query.item[3], + "ckey" = query.item[4], + "ip" = query.item[5], + "computerid" = query.item[6], + "a_ckey" = query.item[7], + "unbanned" = query.item[8] + ) + row["expired"] = ((row["bantype"] in list("TEMPBAN", "JOB_TEMPBAN")) && now > row["expiration_time"]) + if (include_inactive || !(row["expired"] || row["unbanned"])) + . += list(row) + + +/** + * Returns a sorted list containing only each unique ckey present in a list of connections provided by `_fetch_connections()`. + */ +/proc/_unique_ckeys_from_bans(list/bans) + RETURN_TYPE(/list) + . = list() + for (var/list/ban in bans) + . |= ban["ckey"] + return sortList(.) + + +/** + * Checks a list of connections for bans matching any of the list entries. + * + * **Parameters**: + * - `connections` (list) - List of connections. Should be the output of `_fetch_connections()`. + * - `include_inactive` (boolean, default `FALSE`) - If set, includes inactive/expired bans in the list. + * + * Returns list of lists. + */ +/proc/_find_bans_in_connections(list/connections, include_inactive = FALSE) + RETURN_TYPE(/list) + . = list() + + var/list/ckeys = list() + var/list/ips = list() + var/list/cids = list() + var/list/final_query_components = list() + + for (var/list/connection in connections) + ckeys |= connection["ckey"] + ips |= connection["ip"] + cids |= connection["computerid"] + + var/empty_string = "" + var/comma_separator = "', '" + if (length(ckeys)) + final_query_components += "`ckey` IN ('[english_list(ckeys, empty_string, comma_separator, comma_separator, empty_string)]')" + + if (length(ips)) + final_query_components += "`ip` IN ('[english_list(ips, empty_string, comma_separator, comma_separator, empty_string)]')" + + if (length(cids)) + final_query_components += "`computerid` IN ('[english_list(cids, empty_string, comma_separator, comma_separator, empty_string)]')" + + if (!length(final_query_components)) + return + + establish_db_connection() + if (!dbcon.IsConnected()) + crash_with("Database connection failed.") + return + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // var/DBQuery/query = dbcon.NewQuery({" // SIERRA-EDIT - ORIGINAL + // SELECT `bantype`, `reason`, `expiration_time`, `ckey`, `ip`, `computerid`, `a_ckey`, `unbanned` // SIERRA-EDIT - ORIGINAL + // FROM `erro_ban` // SIERRA-EDIT - ORIGINAL + // WHERE `bantype` IN ('PERMABAN', 'TEMPBAN') AND // SIERRA-EDIT - ORIGINAL + // ([english_list(final_query_components, "", "", " OR ", " OR ")]) // SIERRA-EDIT - ORIGINAL + // "}) // SIERRA-EDIT - ORIGINAL + var/DBQuery/query = dbcon.NewQuery({" + SELECT `bantype`, `reason`, `expiration_time`, `ckey`, `ip`, `computerid`, `a_ckey`, `unbanned` + FROM `[sqlfdbkdbutil]`.`ban` + WHERE `bantype` IN ('PERMABAN', 'TEMPBAN') AND + ([english_list(final_query_components, "", "", " OR ", " OR ")]) + "}) + // [/SIERRA-EDIT] + query.Execute() + var/now = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") + while (query.NextRow()) + var/row = list( + "bantype" = query.item[1], + "reason" = query.item[2], + "expiration_time" = query.item[3], + "ckey" = query.item[4], + "ip" = query.item[5], + "computerid" = query.item[6], + "a_ckey" = query.item[7], + "unbanned" = query.item[8] + ) + row["expired"] = ((row["bantype"] in list("TEMPBAN", "JOB_TEMPBAN")) && now > row["expiration_time"]) + if (include_inactive || !(row["expired"] || row["unbanned"])) + . += list(row) + + +/** + * Aliases to `_find_bans_in_connections()` with this client's `fetch_connections()` result. + * + * Returns list of lists. + */ +/client/proc/fetch_bans() + RETURN_TYPE(/list) + return _find_bans_in_connections(fetch_connections()) + + +/** + * Aliases to `_find_bans_in_connections()` with this mob's `fetch_connections()` result. + * + * Returns list of lists. + */ +/mob/proc/fetch_bans() + RETURN_TYPE(/list) + return _find_bans_in_connections(fetch_connections()) + + +/proc/_show_associated_bans(mob/user, list/bans, target_ckey, target_ip, target_cid) + // Unique Ckeys + var/list/unique_ckeys = _unique_ckeys_from_bans(bans) + var/unique_ckeys_table = {" + + + "} + var/stripe = FALSE + for (var/ckey in unique_ckeys) + unique_ckeys_table += {" + + [ckey] + + "} + stripe = !stripe + unique_ckeys_table += {" + +
    + "} + + // List of all bans + var/all_bans_table = {" + + + + + + + + + + + + "} + stripe = FALSE + for (var/list/row in bans) + // Row classes + var/classes_row = list() + if (stripe) + classes_row += "stripe" + + // Ckey classes + var/classes_ckey = "" + var/ckey = row["ckey"] + if (!row["ckey"]) + classes_ckey = "disabled" + ckey = "(EMPTY)" + else if (row["ckey"] == target_ckey) + classes_ckey = "highlight" + if (classes_ckey) + classes_ckey = " class='[classes_ckey]'" + + // IP classes + var/classes_ip = "" + var/ip = row["ip"] + if (!row["ip"]) + classes_ip = "disabled" + ip = "(EMPTY)" + else if (row["ip"] == target_ip) + classes_ip = "highlight" + if (classes_ip) + classes_ip = " class='[classes_ip]'" + + // CID classes + var/classes_cid = "" + var/cid = row["computerid"] + if (!row["computerid"]) + classes_cid = "disabled" + cid = "(EMPTY)" + else if (row["computerid"] == target_cid) + classes_cid = "highlight" + if (classes_cid) + classes_cid = " class='[classes_cid]'" + + // Status cell + var/status = "ACTIVE" + if (row["expired"]) + status = row["unbanned"] ? "UNBANNED" : "EXPIRED" + classes_row += "disabled" + else + switch (row["bantype"]) + if ("PERMABAN") + status += " (PERMANENT)" + if ("TEMPBAN") + status += " (UNTIL [row["expiration_time"]])" + + // Combine row classes + if (length(classes_row)) + classes_row = " class='[english_list(classes_row, "", "", " ", " ")]'" + else + classes_row = null + + // Build table row + all_bans_table += {" + + [ckey] + [ip] + [cid] + + + + + + + + "} + all_bans_table +={" + +
    Banned CkeyIP AddressComputer IDStatusBanning Admin
    [status][row["a_ckey"]]
    Reason[row["reason"]]
    + "} + + // Final layout + var/final_body = {" +

    Queried Details

    + + + + + + + + + + + + + + + +
    CkeyIP AddressComputer ID
    [target_ckey ? target_ckey : "(EMPTY)"][target_ip ? target_ip : "(EMPTY)"][target_cid ? target_cid : "(EMPTY)"]
    +
    + +

    Matching Banned Ckeys

    +

    Entries matching the current query are highlighted.

    + [unique_ckeys_table] +
    + +

    All Matching Bans

    +

    Entries matching the current query are highlighted.

    + [all_bans_table] + "} + var/datum/browser/popup = new(user, "associatedbans", "Associated Bans ([target_ckey ? target_ckey : "NO CKEY"])", 700, 480) + popup.set_content(final_body) + popup.open() + + +/** + * Aliases to `_show_associated_bans()` using this client's `fetch_bans()` result, ckey, IP address, and CID. + * + * Has no return value. + */ +/client/proc/show_associated_bans(mob/user, list/bans) + if (isnull(bans)) + bans = fetch_bans() + _show_associated_bans(user, bans, ckey, address, computer_id) + + +/** + * Aliases to `_show_associated_bans()` using this mob's `fetch_bans()` result, ckey, IP address, and CID. + * + * Has no return value. + */ +/mob/proc/show_associated_bans(mob/user, list/bans) + if (client) + client.show_associated_bans(user, bans) + return + if (isnull(bans)) + bans = fetch_bans() + _show_associated_bans(user, bans, ckey ? ckey : last_ckey, lastKnownIP, computer_id) diff --git a/code/modules/admin/connectioncheck/connectioncheck_functions.dm b/code/modules/admin/connectioncheck/connectioncheck_functions.dm new file mode 100644 index 0000000000000..0f2b96cd90c9f --- /dev/null +++ b/code/modules/admin/connectioncheck/connectioncheck_functions.dm @@ -0,0 +1,278 @@ +/** + * Checks for prior connections matching ckey, ip, or cid. + * + * Returns list of lists. + */ +/proc/_fetch_connections(ckey, ip, cid) + RETURN_TYPE(/list) + . = list() + ckey = sql_sanitize_text(ckey) + ip = sql_sanitize_text(ip) + cid = sql_sanitize_text(cid) + if (!ckey && !ip && !cid) + return + establish_db_connection() + if (!dbcon.IsConnected()) + crash_with("Database connection failed.") + return + var/selection = list() + if (ckey) + selection += "`ckey` = '[ckey]'" + if (ip) + selection += "`ip` = '[ip]'" + if (cid) + selection += "`computerid` = '[cid]'" + selection = english_list(selection, "", "", " OR ", " OR ") + var/DBQuery/query = dbcon.NewQuery("\ + SELECT `datetime`, `ckey`, `ip`, `computerid`\ + FROM `erro_connection_log`\ + WHERE [selection]\ + GROUP BY `ckey`, `ip`, `computerid`\ + ORDER BY `datetime`\ + ") + query.Execute() + while (query.NextRow()) + var/row = list( + "datetime" = "[query.item[1]]", + "ckey" = "[query.item[2]]", + "ip" = "[query.item[3]]", + "computerid" = "[query.item[4]]" + ) + . += list(row) + + +/** + * Returns a sorted list containing only each unique ckey present in a list of connections provided by `_fetch_connections()`. + */ +/proc/_unique_ckeys_from_connections(list/connections) + RETURN_TYPE(/list) + . = list() + for (var/list/connection in connections) + . |= connection["ckey"] + return sortList(.) + + +/** + * Returns a sorted list containing only each unique CID present in a list of connections provided by `_fetch_connections()`. + */ +/proc/_unique_cids_from_connections(list/connections) + RETURN_TYPE(/list) + . = list() + for (var/list/connection in connections) + . |= connection["computerid"] + return sortList(.) + + +/** + * Returns a sorted list containing only each unique IP present in a list of connections provided by `_fetch_connections()`. + */ +/proc/_unique_ips_from_connections(list/connections) + RETURN_TYPE(/list) + . = list() + for (var/list/connection in connections) + . |= connection["ip"] + return sortList(.) + + +/** + * Aliases to `_fetch_connections()` with this client's ckey, address, and CID. + * + * Returns list of lists. + */ +/client/proc/fetch_connections() + RETURN_TYPE(/list) + return _fetch_connections(ckey, address, computer_id) + + +/** + * Aliases to `_fetch_connections()` with this mob's client, if present, or this mob's ckey/last ckey, last IP, and last CID. + * + * Returns list of lists. + */ +/mob/proc/fetch_connections() + RETURN_TYPE(/list) + if (client) + return client.fetch_connections() + return _fetch_connections(ckey ? ckey : last_ckey, lastKnownIP, computer_id) + + +/** + * Generates and displays an HTML window, displaying data from a `_fetch_connections()` call with the provided + * parameters. + * + * **WARNING: This proc makes no validation or access checks. Ensure `user` is a valid candidate to receive this + * information before calling.** + * + * Used by the `Check Connections` button in the player panel. + * + * **Parameters**: + * - `user` - The mob requesing that the window is displayed to. + * - `connections` - List generated from a `_fetch_connections()` call. + * - `target_ckey` - If provided, highlights ckeys in the window that match this value. + * - `target_ip` - If provided, highlights IP addresses in the window that match this value. + * - `target_cid` - If provided, highlights CIDs in the window that match this value. + * + * Has no return value. + */ +/proc/_show_associated_connections(mob/user, list/connections, target_ckey, target_ip, target_cid) + // Unique Ckeys + var/list/unique_ckeys = _unique_ckeys_from_connections(connections) + var/unique_ckeys_table = {" + + + "} + var/stripe = FALSE + for (var/ckey in unique_ckeys) + unique_ckeys_table += {" + + [ckey] + + "} + stripe = !stripe + unique_ckeys_table += {" + +
    + "} + + // Unique IP Addresses + var/list/unique_ips = _unique_ips_from_connections(connections) + var/unique_ips_table = {" + + + "} + stripe = FALSE + for (var/ip in unique_ips) + unique_ips_table += {" + + + + "} + stripe = !stripe + unique_ips_table += {" + +
    [ip]
    + "} + + // Unique CIDs + var/list/unique_cids = _unique_cids_from_connections(connections) + var/unique_cids_table = {" + + + "} + stripe = FALSE + for (var/cid in unique_cids) + unique_cids_table += {" + + + + "} + stripe = !stripe + unique_cids_table += {" + +
    [cid]
    + "} + + // List of all connections + var/all_connections_table = {" + + + + + + + + + + + "} + stripe = FALSE + for (var/list/row in connections) + all_connections_table += {" + + + [row["ckey"]] + [row["ip"]] + [row["computerid"]] + + "} + stripe = !stripe + all_connections_table += {" + +
    First SeenCkeyIP AddressComputer ID
    [row["datetime"]]
    + "} + + // Final layout + var/final_body = {" +

    Queried Details

    + + + + + + + + + + + + + + + +
    CkeyIP AddressComputer ID
    [target_ckey ? target_ckey : "N/A"][target_ip ? target_ip : "N/A"][target_cid ? target_cid : "N/A"]
    +
    + +

    Associated Ckeys, IP Addresses, and Computer IDs

    +

    NOTE: Rows in this table are not necessarily associated with eachother. This is simply a list of each category's entries for ease of information.
    + Entries matching the current query are highlighted.

    + + + + + + + + + + + + + + + +
    CkeysIP AddressesComputer IDs
    [unique_ckeys_table][unique_ips_table][unique_cids_table]
    +
    + +

    All Unique Connections

    +

    NOTE: This table does not list every single connection ever made, only the first connection seen for each unique combination of ckey, IP, and CID.
    + Entries matching the current query are highlighted.

    + [all_connections_table] + "} + var/datum/browser/popup = new(user, "associatedconnections", "Associated Connections ([target_ckey ? target_ckey : "NO CKEY"])", 500, 480) + popup.set_content(final_body) + popup.open() + + +/** + * Aliases to `_show_associated_connections()` using this client's `fetch_connections()` result, ckey, IP address, and CID. + * + * Has no return value. + */ +/client/proc/show_associated_connections(mob/user, list/connections) + if (isnull(connections)) + connections = fetch_connections() + _show_associated_connections(user, connections, ckey, address, computer_id) + + +/** + * Aliases to `_show_associated_connections()` using this mob's `fetch_connections()` result, ckey, IP address, and CID. + * + * Has no return value. + */ +/mob/proc/show_associated_connections(mob/user, list/connections) + if (client) + client.show_associated_connections(user, connections) + return + if (isnull(connections)) + connections = fetch_connections() + _show_associated_connections(user, connections, ckey ? ckey : last_ckey, lastKnownIP, computer_id) diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 859489a857816..cfcbeb1010c8f 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -6,4 +6,4 @@ var/global/create_mob_html = null create_mob_html = file2text('html/create_object.html') create_mob_html = replacetext(create_mob_html, "null /* object types */", "\"[mobjs]\"") - show_browser(user, replacetext(create_mob_html, "/* ref src */", "\ref[src]"), "window=create_mob;size=425x475") + show_browser(user, replacetext(create_mob_html, "/* ref src */", "\ref[src]"), "window=create_mob;size=425x530") diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm index 03f7c8d7532ae..5f6164737f369 100644 --- a/code/modules/admin/create_object.dm +++ b/code/modules/admin/create_object.dm @@ -7,4 +7,4 @@ var/global/create_object_html = null create_object_html = file2text('html/create_object.html') create_object_html = replacetext(create_object_html, "null /* object types */", "\"[objectjs]\"") - show_browser(user, replacetext(create_object_html, "/* ref src */", "\ref[src]"), "window=create_object;size=425x475") + show_browser(user, replacetext(create_object_html, "/* ref src */", "\ref[src]"), "window=create_object;size=425x530") diff --git a/code/modules/admin/create_turf.dm b/code/modules/admin/create_turf.dm index 1ce1420eac798..40792658c7556 100644 --- a/code/modules/admin/create_turf.dm +++ b/code/modules/admin/create_turf.dm @@ -6,4 +6,4 @@ var/global/create_turf_html = null create_turf_html = file2text('html/create_object.html') create_turf_html = replacetext(create_turf_html, "null /* object types */", "\"[turfjs]\"") - show_browser(user, replacetext(create_turf_html, "/* ref src */", "\ref[src]"), "window=create_turf;size=425x475") + show_browser(user, replacetext(create_turf_html, "/* ref src */", "\ref[src]"), "window=create_turf;size=425x530") diff --git a/code/modules/admin/holoverbs.dm b/code/modules/admin/holoverbs.dm index 4206c8397edb1..22dfa393a0aab 100644 --- a/code/modules/admin/holoverbs.dm +++ b/code/modules/admin/holoverbs.dm @@ -15,7 +15,7 @@ if(!AI) return var/image/I = image(appear.icon, appear.icon_state) - I.overlays = appear.overlays + I.CopyOverlays(appear) I.underlays = appear.underlays I.color = list( 0.30, 0.30, 0.30, 0.0, // Greyscale and reduce the alpha of the icon @@ -37,7 +37,7 @@ // Combine the mob image and the scanlines into a single KEEP_TOGETHER'd image var/image/I2 = image(null) I2.underlays += I - I2.overlays += scan + I2.AddOverlays(scan) I2.appearance_flags = DEFAULT_APPEARANCE_FLAGS | KEEP_TOGETHER I2.color = rgb(125, 180, 225) // make it blue! AI.holo_icon = I2 diff --git a/code/modules/admin/map_capture.dm b/code/modules/admin/map_capture.dm index 83d1ff720ecc9..6329f46a6e761 100644 --- a/code/modules/admin/map_capture.dm +++ b/code/modules/admin/map_capture.dm @@ -35,7 +35,7 @@ to_chat(usr, "Saved capture in cache as [file_name].") send_rsc(usr, cap, file_name) currentx = currentx + 32 - addtimer(new Callback(src, .proc/capture_map_capture_next, currentz, currentx, currenty, ligths), 0) + addtimer(CALLBACK(src, PROC_REF(capture_map_capture_next), currentz, currentx, currenty, ligths), 0) else currenty = currenty + 32 currentx = 1 @@ -45,7 +45,7 @@ to_chat(usr, "Saved capture in cache as [file_name].") send_rsc(usr, cap, file_name) currentx = currentx + 32 - addtimer(new Callback(src, .proc/capture_map_capture_next, currentz, currentx, currenty, ligths), 0) + addtimer(CALLBACK(src, PROC_REF(capture_map_capture_next), currentz, currentx, currenty, ligths), 0) else to_chat(usr, "End of map, capture is done.") diff --git a/code/modules/admin/permissionverbs/permissionedit.dm b/code/modules/admin/permissionverbs/permissionedit.dm index 09f0fd150c38e..9b31002a92e29 100644 --- a/code/modules/admin/permissionverbs/permissionedit.dm +++ b/code/modules/admin/permissionverbs/permissionedit.dm @@ -2,18 +2,23 @@ set category = "Admin" set name = "Permissions Panel" set desc = "Edit admin permissions" - if(!check_rights(R_PERMISSIONS)) return - usr.client.holder.edit_admin_permissions() + if(!check_rights(R_PERMISSIONS)) + return + usr.client.holder.edit_admin_permissions(usr) + +/datum/admins/proc/edit_admin_permissions(client/user) + if(!check_rights(R_PERMISSIONS, C = user)) + return -/datum/admins/proc/edit_admin_permissions() - if(!check_rights(R_PERMISSIONS)) return + var/datum/asset/permission_panel_asset = get_asset_datum(/datum/asset/simple/permissions_panel) + permission_panel_asset.send(user) var/output = {" Permissions Panel - - + +
    diff --git a/code/modules/admin/player_notes.dm b/code/modules/admin/player_notes.dm index d08e839ef29fb..f6472e644a325 100644 --- a/code/modules/admin/player_notes.dm +++ b/code/modules/admin/player_notes.dm @@ -28,6 +28,7 @@ var/day_loc = findtext(full_date, time2text(world.timeofday, "DD")) var/datum/player_info/P = new + P.game_id = game_id if (ismob(user)) P.author = user.key P.rank = user.client.holder.rank @@ -84,6 +85,6 @@ dat = "No information found on the given key." else for(var/datum/player_info/I in infos) - dat += "[I.content]\nby [I.author] ([I.rank]) on [I.timestamp]\n\n" + dat += "[I.content]\nby [I.author] ([I.rank]) on [I.timestamp] ([I.game_id])\n\n" - return list2params(list(dat)) + return list2params(list("notes" = dat)) diff --git a/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm b/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm index 30e8b2d195a67..b7260f78e540e 100644 --- a/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm +++ b/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm @@ -15,15 +15,15 @@ var/datum/shuttle/S = SSshuttle.shuttles[shuttle_tag] var/list/destinations = list() - for(var/obj/effect/shuttle_landmark/WP in world) + for(var/obj/shuttle_landmark/WP in world) destinations += WP - var/obj/effect/shuttle_landmark/destination = input(user, "Select the destination for this jump.") as null|anything in destinations + var/obj/shuttle_landmark/destination = input(user, "Select the destination for this jump.") as null|anything in destinations if (!destination) return var/long_jump = alert(user, "Is there a transition location for this jump?","", "Yes", "No") if (long_jump == "Yes") - var/obj/effect/shuttle_landmark/transition = input(user, "Select transition location for this jump.") as null|anything in destinations + var/obj/shuttle_landmark/transition = input(user, "Select transition location for this jump.") as null|anything in destinations if (!transition) return var/move_duration = input(user, "How many seconds will this jump take?") as num diff --git a/code/modules/admin/secrets/admin_secrets/move_shuttle.dm b/code/modules/admin/secrets/admin_secrets/move_shuttle.dm index fadfaabbfb8e1..a7c05d1e71c38 100644 --- a/code/modules/admin/secrets/admin_secrets/move_shuttle.dm +++ b/code/modules/admin/secrets/admin_secrets/move_shuttle.dm @@ -19,10 +19,10 @@ var/datum/shuttle/S = SSshuttle.shuttles[shuttle_tag] var/list/destinations = list() - for(var/obj/effect/shuttle_landmark/WP in world) + for(var/obj/shuttle_landmark/WP in world) destinations += WP - var/obj/effect/shuttle_landmark/destination = input(user, "Select the destination.") as null|anything in destinations + var/obj/shuttle_landmark/destination = input(user, "Select the destination.") as null|anything in destinations if (!destination) return S.attempt_move(destination) diff --git a/code/modules/admin/secrets/debug/toggle_harddel.dm b/code/modules/admin/secrets/debug/toggle_harddel.dm index 436386c7668d0..f26d23ea38fa8 100644 --- a/code/modules/admin/secrets/debug/toggle_harddel.dm +++ b/code/modules/admin/secrets/debug/toggle_harddel.dm @@ -2,10 +2,5 @@ name = "Toggle Harddelete Queue" /datum/admin_secret_item/debug/toggle_harddel/do_execute(mob/user) - var/choice = alert(user, "Harddeletes are currently [SSgarbage.harddel_halt ? "inactive" : "active"].","Toggle Harddelete Queue", SSgarbage.harddel_halt ? "Enable" : "Disable","Cancel") - if(choice == "Disable") - SSgarbage.toggle_harddel_halt(TRUE) - log_and_message_admins("disabled harddels in SSgarbage.", user) - else if(choice == "Enable") - SSgarbage.toggle_harddel_halt(FALSE) - log_and_message_admins("re-enabled harddels in SSgarbage.", user) \ No newline at end of file + SSgarbage.pause_deletion_queue = !SSgarbage.pause_deletion_queue + log_and_message_admins("deletion queue [SSgarbage.pause_deletion_queue ? "paused" : "enabled"]", user) diff --git a/code/modules/admin/secrets/fun_secrets/break_all_lights.dm b/code/modules/admin/secrets/fun_secrets/break_all_lights.dm index 0a676bc30480c..1c8d736676d3e 100644 --- a/code/modules/admin/secrets/fun_secrets/break_all_lights.dm +++ b/code/modules/admin/secrets/fun_secrets/break_all_lights.dm @@ -1,7 +1,34 @@ /datum/admin_secret_item/fun_secret/break_all_lights - name = "Break All Lights" + name = "Break Lights" /datum/admin_secret_item/fun_secret/break_all_lights/execute(mob/user) . = ..() - if(.) - lightsout(0,0) + if (!.) + return + var/choice = input("Break Lights in:") as null | anything in list("Current Area", "Current Level", "Connected Levels", "All Lights") + if (!choice) + return + switch (choice) + if ("Current Area") + var/area/usr_area = get_area(user) + if (!usr_area) + return to_chat(user, SPAN_DANGER("Invalid area!")) + for (var/obj/machinery/power/apc/apc in usr_area) + apc.overload_lighting() + if ("Current Level") + var/user_z = get_z(user) + if (!user_z) + return to_chat(user, SPAN_DANGER("Invalid Z-Level!")) + for (var/obj/machinery/power/apc/apc as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/apc)) + if (apc.z == user_z) + apc.overload_lighting() + if ("Connected Levels") + var/list/user_levels = get_z(user) + if (!user_levels) + return to_chat(user, SPAN_DANGER("Invalid Z-Level!")) + user_levels = GetConnectedZlevels(user_levels) + for (var/obj/machinery/power/apc/apc as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/apc)) + if (apc.z in user_levels) + apc.overload_lighting() + if ("All Lights") + lightsout(0, 0) diff --git a/code/modules/admin/secrets/fun_secrets/fix_all_lights.dm b/code/modules/admin/secrets/fun_secrets/fix_all_lights.dm index 1d56cb7dac654..d89b78a2c9168 100644 --- a/code/modules/admin/secrets/fun_secrets/fix_all_lights.dm +++ b/code/modules/admin/secrets/fun_secrets/fix_all_lights.dm @@ -1,10 +1,35 @@ /datum/admin_secret_item/fun_secret/fix_all_lights - name = "Fix All Lights" + name = "Fix Lights" /datum/admin_secret_item/fun_secret/fix_all_lights/execute(mob/user) . = ..() - if(!.) + if (!.) return - - for(var/obj/machinery/light/L in world) - L.fix() + var/choice = input("Fix Lights in:") as null | anything in list("Current Area", "Current Level", "Connected Levels", "All Lights") + if (!choice) + return + switch (choice) + if ("Current Area") + var/area/usr_area = get_area(user) + if (!usr_area) + return to_chat(user, SPAN_DANGER("Invalid area!")) + for (var/obj/machinery/light/light in usr_area) + light.fix() + if ("Current Level") + var/user_z = get_z(user) + if (!user_z) + return to_chat(user, SPAN_DANGER("Invalid Z-Level!")) + for (var/obj/machinery/light/light as anything in SSmachines.get_machinery_of_type(/obj/machinery/light)) + if (light.z == user_z) + light.fix() + if ("Connected Levels") + var/list/user_levels = get_z(user) + if (!user_levels) + return to_chat(user, SPAN_DANGER("Invalid Z-Level!")) + user_levels = GetConnectedZlevels(user_levels) + for (var/obj/machinery/light/light as anything in SSmachines.get_machinery_of_type(/obj/machinery/light)) + if (light.z in user_levels) + light.fix() + if ("All Lights") + for (var/obj/machinery/light/light as anything in SSmachines.get_machinery_of_type(/obj/machinery/light)) + light.fix() diff --git a/code/modules/admin/secrets/fun_secrets/waddle.dm b/code/modules/admin/secrets/fun_secrets/waddle.dm index a0bfaca5c962e..1cc7011b71c8f 100644 --- a/code/modules/admin/secrets/fun_secrets/waddle.dm +++ b/code/modules/admin/secrets/fun_secrets/waddle.dm @@ -1,22 +1,11 @@ /datum/admin_secret_item/fun_secret/waddle - name = "Toggle Waddling" - var/waddling = FALSE + name = "Toggle all waddling" + var/all_waddling = FALSE /datum/admin_secret_item/fun_secret/waddle/do_execute(mob/user) - waddling = !waddling - if(waddling) - GLOB.moved_event.register_global(src, .proc/waddle) - else - GLOB.moved_event.unregister_global(src, .proc/waddle) - -/datum/admin_secret_item/fun_secret/waddle/proc/waddle(atom/movable/AM) - var/mob/living/L = AM - if(!istype(L) || L.incapacitated() || L.lying) - return - animate(L, pixel_z = 4, time = 0) - animate( - pixel_z = 0, - transform = matrix().Update(rotation = pick(-12, 0, 12)), - time = 2 - ) - animate(pixel_z = 0, transform = matrix(), time = 0) + all_waddling = !all_waddling + for (var/mob/L in GLOB.player_list) + if (all_waddling) + L.make_waddle() + else + L.stop_waddle() diff --git a/code/modules/admin/ticket.dm b/code/modules/admin/ticket.dm index f95be2a1fd525..2540f9ca6f802 100644 --- a/code/modules/admin/ticket.dm +++ b/code/modules/admin/ticket.dm @@ -10,18 +10,19 @@ var/global/list/ticket_panels = list() var/id var/opened_time var/timeout = FALSE + var/last_message_time /datum/ticket/New(datum/client_lite/owner) src.owner = owner tickets |= src id = length(tickets) opened_time = world.time - addtimer(new Callback(src, .proc/timeoutcheck), 5 MINUTES, TIMER_STOPPABLE) + addtimer(CALLBACK(src, PROC_REF(timeoutcheck)), 5 MINUTES, TIMER_STOPPABLE) /datum/ticket/proc/timeoutcheck() if(status == TICKET_OPEN) message_staff(SPAN_DANGER("[owner.key_name(0)] has not received a reply to their initial ahelp after 5 minutes!")) - addtimer(new Callback(src, .proc/timeoutchecklast), 5 MINUTES, TIMER_STOPPABLE) + addtimer(CALLBACK(src, PROC_REF(timeoutchecklast)), 5 MINUTES, TIMER_STOPPABLE) /datum/ticket/proc/timeoutchecklast() @@ -32,6 +33,9 @@ var/global/list/ticket_panels = list() /datum/ticket/proc/timeoutchecktaken() if (status == TICKET_ASSIGNED) + if (is_active()) + addtimer(CALLBACK(src, PROC_REF(timeoutchecktaken)), 30 MINUTES, TIMER_STOPPABLE) + return for (var/datum/client_lite/C in assigned_admins) to_chat(client_by_ckey(C.ckey), SPAN_NOTICE(SPAN_BOLD("Your ticket with [client_by_ckey(owner.ckey)] has timed out and auto-closed."))) close(assigned_admins[1]) @@ -56,13 +60,10 @@ var/global/list/ticket_panels = list() src.closed_by = closed_by to_chat(client_by_ckey(src.owner.ckey), SPAN_NOTICE("Your ticket has been closed by [closed_by.key].")) message_staff(SPAN_NOTICE("[src.owner.key_name(0)]'s ticket has been closed by [closed_by.key].")) - send2adminirc("[src.owner.key_name(0)]'s ticket has been closed by [closed_by.key].") + send_to_admin_discord(EXCOM_MSG_AHELP, "[src.owner.key_name(0)]'s ticket has been closed by [closed_by.key].") update_ticket_panels() - for (var/datum/timedevent/T as anything in active_timers) - deltimer(T.id) - return 1 /datum/ticket/proc/take(datum/client_lite/assigned_admin) @@ -79,11 +80,11 @@ var/global/list/ticket_panels = list() src.status = TICKET_ASSIGNED message_staff(SPAN_NOTICE("[assigned_admin.key] has assigned themself to [src.owner.key_name(0)]'s ticket.")) - send2adminirc("[assigned_admin.key] has assigned themself to [src.owner.key_name(0)]'s ticket.") + send_to_admin_discord(EXCOM_MSG_AHELP, "[assigned_admin.key] has assigned themself to [src.owner.key_name(0)]'s ticket.") to_chat(client_by_ckey(src.owner.ckey), SPAN_NOTICE("[assigned_admin.key] has added themself to your ticket and should respond shortly. Thanks for your patience!")) update_ticket_panels() - addtimer(new Callback(src, .proc/timeoutchecktaken), 30 MINUTES, TIMER_STOPPABLE) + addtimer(CALLBACK(src, PROC_REF(timeoutchecktaken)), 30 MINUTES, TIMER_STOPPABLE) return 1 @@ -100,6 +101,7 @@ var/global/list/ticket_panels = list() . |= assigned_admin.key /proc/get_open_ticket_by_client(datum/client_lite/owner) + RETURN_TYPE(/datum/ticket) for(var/datum/ticket/ticket in tickets) if(ticket.owner.ckey == owner.ckey && (ticket.status == TICKET_OPEN || ticket.status == TICKET_ASSIGNED)) return ticket // there should only be one open ticket by a client at a time, so no need to keep looking @@ -108,6 +110,9 @@ var/global/list/ticket_panels = list() if(status != TICKET_ASSIGNED) return 0 + if(world.time - last_message_time > 30 MINUTES) + return FALSE + for(var/datum/client_lite/admin in assigned_admins) var/client/admin_client = client_by_ckey(admin.ckey) if(admin_client && !admin_client.is_afk()) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index c5f1abb5ab5d8..16febbddafb25 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -122,7 +122,10 @@ message_admins("[key_name_admin(usr)] removed [adm_ckey] from the admins list") log_admin("[key_name(usr)] removed [adm_ckey] from the admins list") - log_admin_rank_modification(adm_ckey, "Removed") + // [SIERRA-EDIT] - EX666_ECOSYSTEM + // log_admin_rank_modification(adm_ckey, "Removed") // SIERRA-EDIT - ORIGINAL + log_admin_rank_modification(adm_ckey, "Удален") + // [/SIERRA-EDIT] else if(task == "rank") var/new_rank @@ -638,7 +641,7 @@ //JOBBAN'S INNARDS else if(href_list["jobban3"]) - if(!check_rights(R_ADMIN,0)) + if(!check_rights(R_BAN,0)) to_chat(usr, SPAN_WARNING("You do not have the appropriate permissions to add job bans!")) return @@ -982,7 +985,7 @@ if (SSticker.mode) return alert(usr, "The game has already started.", null, null, null, null) SSticker.master_mode = href_list["c_mode2"] - SSticker.bypass_gamemode_vote = 1 + SSticker.bypass_gamemode_vote = TRUE log_and_message_admins("set the mode as [SSticker.master_mode].") to_world(SPAN_NOTICE("The mode is now: [SSticker.master_mode]")) Game() // updates the main game menu @@ -1072,6 +1075,18 @@ return P.copy_to(H) + else if (href_list["connections"]) + if (!check_rights(R_ADMIN)) + return + var/mob/target = locate(href_list["connections"]) + target.show_associated_connections(usr) + + else if (href_list["bans"]) + if (!check_rights(R_ADMIN)) + return + var/mob/target = locate(href_list["bans"]) + target.show_associated_bans(usr) + else if (href_list["cloneother"]) if (!check_rights(R_DEBUG)) return @@ -1349,7 +1364,7 @@ // call dibs on IC messages (prays, emergency comms, faxes) else if(href_list["take_ic"]) - var/mob/M = locate(href_list["take_question"]) + var/mob/M = locate(href_list["take_ic"]) if(ismob(M)) var/take_msg = SPAN_NOTICE("[key_name(usr.client)] is attending to [key_name(M)]'s message.") for(var/client/X as anything in GLOB.admins) @@ -1474,8 +1489,8 @@ log_admin("[key_name(M)] has been hit by Bluespace Artillery fired by [src.owner]") message_admins("[key_name(M)] has been hit by Bluespace Artillery fired by [src.owner]") - var/obj/effect/stop/S - S = new /obj/effect/stop(M.loc) + var/obj/stop/S + S = new /obj/stop(M.loc) S.victim = M spawn(20) qdel(S) @@ -1493,18 +1508,18 @@ M.Weaken(20) M.stuttering = 20 - else if(href_list["CentcommReply"]) - var/mob/living/L = locate(href_list["CentcommReply"]) + else if(href_list["CentcomReply"]) + var/mob/living/L = locate(href_list["CentcomReply"]) if(!istype(L)) to_chat(usr, "This can only be used on instances of type /mob/living/") return if(L.can_centcom_reply()) - var/input = sanitize(input(src.owner, "Please enter a message to reply to [key_name(L)] via their headset.","Outgoing message from Centcomm", "")) + var/input = sanitize(input(src.owner, "Please enter a message to reply to [key_name(L)] via their headset.","Outgoing message from Centcom", "")) if(!input) return to_chat(src.owner, "You sent [input] to [L] via a secure channel.") - log_admin("[src.owner] replied to [key_name(L)]'s Centcomm message with the message [input].") + log_admin("[src.owner] replied to [key_name(L)]'s Centcom message with the message [input].") message_admins("[src.owner] replied to [key_name(L)]'s Centcom message with: \"[input]\"") if(!isAI(L)) to_chat(L, SPAN_INFO("You hear something crackle in your headset for a moment before a voice speaks.")) @@ -1579,6 +1594,7 @@ P.admindatum = src P.origin = replyorigin + P.department = fax.department P.destinations = get_fax_machines_by_department(fax.department) P.sender = sender @@ -1679,7 +1695,7 @@ if(!check_rights(R_FUN,0)) removed_paths += dirty_path continue - else if(ispath(path, /obj/effect/bhole)) + else if(ispath(path, /obj/bhole)) if(!check_rights(R_FUN,0)) removed_paths += dirty_path continue @@ -2099,12 +2115,12 @@ if (!istype(M.loc, /obj/machinery/cryopod)) var/obj/machinery/cryopod/C if (isrobot(M)) - for (var/obj/machinery/cryopod/robot/CP in SSmachines.machinery) + for (var/obj/machinery/cryopod/robot/CP as anything in SSmachines.get_machinery_of_type(/obj/machinery/cryopod/robot)) if (CP.occupant || !(CP.z in GLOB.using_map.station_levels)) continue C = CP else - for (var/obj/machinery/cryopod/CP in SSmachines.machinery) + for (var/obj/machinery/cryopod/CP as anything in SSmachines.get_machinery_of_type(/obj/machinery/cryopod)) if (CP.occupant || !(CP.z in GLOB.using_map.station_levels)) continue C = CP @@ -2122,6 +2138,39 @@ show_player_panel(M) return + if (href_list["equip_loadout"]) + var/mob/living/carbon/human/M = locate(href_list["equip_loadout"]) + if (!ishuman(M)) + return + + var/response = alert("This will delete the player's current gear and spawn their loadout instead, are you sure?",,"Yes","No") == "Yes" + + if (response) + var/datum/job/job = SSjobs.get_by_title(M.job) + var/list/spawn_in_storage + + var/alt_title = null + if(M.mind) + alt_title = M.mind.role_alt_title + + M.delete_inventory(TRUE) + job.equip(M, M.mind ? M.mind.role_alt_title : "", M.char_branch, M.char_rank) + spawn_in_storage = SSjobs.equip_custom_loadout(M, job) + + var/mob/other_mob = job.handle_variant_join(M, alt_title) + if(other_mob) + job.post_equip_rank(other_mob, alt_title || rank) + return other_mob + + if (spawn_in_storage) + for(var/datum/gear/G in spawn_in_storage) + G.spawn_in_storage_or_drop(M, M.client.prefs.Gear()[G.display_name]) + + log_and_message_admins("has equipped [M.ckey]/([M]) with their spawn loadout.") + + show_player_panel(M) + return + /mob/living/proc/can_centcom_reply() return 0 diff --git a/code/modules/admin/verbs/SDQL.dm b/code/modules/admin/verbs/SDQL.dm index cfdc3bf9db828..af09d139f9412 100644 --- a/code/modules/admin/verbs/SDQL.dm +++ b/code/modules/admin/verbs/SDQL.dm @@ -87,27 +87,27 @@ from_objs += m else if(text_starts_with(f, "/turf/space")) - for(var/turf/space/m in world) + for(var/turf/space/m in ALL_TURFS()) if(istype(m, f2)) from_objs += m else if(text_starts_with(f, "/turf/simulated")) - for(var/turf/simulated/m in world) + for(var/turf/simulated/m in ALL_TURFS()) if(istype(m, f2)) from_objs += m else if(text_starts_with(f, "/turf/unsimulated")) - for(var/turf/unsimulated/m in world) + for(var/turf/unsimulated/m in ALL_TURFS()) if(istype(m, f2)) from_objs += m else if(text_starts_with(f, "/turf")) - for(var/turf/m in world) + for(var/turf/m in ALL_TURFS()) if(istype(m, f2)) from_objs += m else if(text_starts_with(f, "/area")) - for(var/area/m in world) + for(var/area/m as anything in GLOB.areas) if(istype(m, f2)) from_objs += m @@ -117,7 +117,7 @@ from_objs += m else if(text_starts_with(f, "/obj/machinery")) - for(var/obj/machinery/m in world) + for(var/obj/machinery/m as anything in SSmachines.get_all_machinery()) if(istype(m, f2)) from_objs += m @@ -130,12 +130,6 @@ for(var/atom/m in world) if(istype(m, f2)) from_objs += m -/* - else - for(var/datum/m in world) - if(istype(m, f2)) - from_objs += m -*/ var/list/objs = list() diff --git a/code/modules/admin/verbs/SDQL_2/SDQL_2.dm b/code/modules/admin/verbs/SDQL_2/SDQL_2.dm index 9f41e16ec3d10..0dd8336119421 100644 --- a/code/modules/admin/verbs/SDQL_2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL_2/SDQL_2.dm @@ -18,7 +18,7 @@ // Used by update statements, this is to handle shit like preventing editing the /datum/admins though SDQL but WITHOUT +PERMISSIONS. // Assumes the variable actually exists. -/datum/proc/SDQL_update(const/var_name, new_value) +/datum/proc/SDQL_update(var_name, new_value) vars[var_name] = new_value return 1 diff --git a/code/modules/admin/verbs/SDQL_2/SDQL_2_parser.dm b/code/modules/admin/verbs/SDQL_2/SDQL_2_parser.dm index 48318dbe09425..1857472c30451 100644 --- a/code/modules/admin/verbs/SDQL_2/SDQL_2_parser.dm +++ b/code/modules/admin/verbs/SDQL_2/SDQL_2_parser.dm @@ -396,7 +396,7 @@ do tok = token(i) if (tok == "," || tok == ":") - if (temp_expression_list == null) + if (isnull(temp_expression_list)) parse_error("Found ',' or ':' without expression in an array.") return i + 1 diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 518357b67766f..ed5a84899f5ec 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -107,6 +107,7 @@ var/global/list/adminhelp_ignored_words = list("unknown","the","a","an","of","mo to_chat(src, SPAN_WARNING("Error: Private-Message: Client not found. They may have lost connection, so please be patient!")) return + ticket.last_message_time = world.time ticket.msgs += new /datum/ticket_msg(src.ckey, null, original_msg) update_ticket_panels() @@ -123,7 +124,7 @@ var/global/list/adminhelp_ignored_words = list("unknown","the","a","an","of","mo if(X.is_afk()) admin_number_afk++ if(X.get_preference_value(/datum/client_preference/staff/play_adminhelp_ping) == GLOB.PREF_HEAR) - sound_to(X, 'sound/ui/pm-notify.ogg') + sound_to(X, sound('sound/ui/pm-notify.ogg', volume = 40)) to_chat(X, msg) //show it to the person adminhelping too to_chat(src, SPAN_CLASS("staff_pm", "PM to-Staff (CLOSE): [original_msg]")) @@ -133,4 +134,7 @@ var/global/list/adminhelp_ignored_words = list("unknown","the","a","an","of","mo adminmsg2adminirc(src, null, "[html_decode(original_msg)] - !![admin_number_afk ? "All admins AFK ([admin_number_afk])" : "No admins online"]!!") else adminmsg2adminirc(src, null, "[html_decode(original_msg)]") + + + send_to_admin_discord(EXCOM_MSG_AHELP, "HELP: [key_name(src, highlight_special_characters = FALSE)]: [original_msg]") return diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index b60d9bde0191a..a93dc49b1ce89 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -69,6 +69,7 @@ log_and_message_admins("jumped to coordinates [tx], [ty], [tz]") /proc/sorted_client_keys() + RETURN_TYPE(/list) return sortKey(GLOB.clients.Copy()) /client/proc/jumptokey(client/C in sorted_client_keys()) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 864b9d66c307d..2ced206de9084 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -128,11 +128,12 @@ //play the receiving admin the adminhelp sound (if they have them enabled) //non-admins shouldn't be able to disable this if(C.get_preference_value(/datum/client_preference/staff/play_adminhelp_ping) == GLOB.PREF_HEAR) - sound_to(C, 'sound/ui/pm-notify.ogg') + sound_to(C, sound('sound/ui/pm-notify.ogg', volume = 70)) log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]") - adminmsg2adminirc(src, C, html_decode(msg)) + send_to_admin_discord(EXCOM_MSG_AHELP, "PM: [key_name(src, highlight_special_characters = FALSE)]->[key_name(C, highlight_special_characters = FALSE)]:[html_decode(msg)]") + ticket.last_message_time = world.time ticket.msgs += new /datum/ticket_msg(src.ckey, C.ckey, msg) update_ticket_panels() @@ -160,7 +161,7 @@ // to_chat(src, SPAN_NOTICE("[msg]")) // return - adminmsg2adminirc(src, sender, html_decode(msg)) + send_to_admin_discord(EXCOM_MSG_AHELP, "PM: [key_name(src, highlight_special_characters = FALSE)]->DISC-[sender]:[html_decode(msg)]") msg = sanitize(msg) log_admin("PM: [key_name(src)]->IRC-[sender]: [msg]") admin_pm_repository.store_pm(src, "IRC-[sender]", msg) diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm index 92aa734e884b9..60e3fe22587c5 100644 --- a/code/modules/admin/verbs/atmosdebug.dm +++ b/code/modules/admin/verbs/atmosdebug.dm @@ -10,33 +10,69 @@ return to_chat(usr, "Checking for disconnected pipes...") - //all plumbing - yes, some things might get stated twice, doesn't matter. - for (var/obj/machinery/atmospherics/plumbing in world) - if (plumbing.nodealert) - to_chat(usr, "Unconnected [plumbing.name] located at [plumbing.x],[plumbing.y],[plumbing.z] ([get_area(plumbing.loc)])") - //Manifolds - for (var/obj/machinery/atmospherics/pipe/manifold/pipe in world) - if (!pipe.node1 || !pipe.node2 || !pipe.node3) - to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") + var/list/all_atmos_machinery = SSmachines.get_machinery_of_type(/obj/machinery/atmospherics) + for(var/obj/machinery/atmospherics/plumbing as anything in all_atmos_machinery) + if(istype(plumbing, /obj/machinery/atmospherics/pipe/manifold)) + var/obj/machinery/atmospherics/pipe/manifold/pipe = plumbing + if (!pipe.node1 || !pipe.node2 || !pipe.node3) + to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") + + else if(istype(plumbing, /obj/machinery/atmospherics/pipe/simple)) + var/obj/machinery/atmospherics/pipe/simple/pipe = plumbing + if (!pipe.node1 || !pipe.node2) + to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") - //Pipes - for (var/obj/machinery/atmospherics/pipe/simple/pipe in world) - if (!pipe.node1 || !pipe.node2) - to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") + else if (plumbing.nodealert) + to_chat(usr, "Unconnected [plumbing.name] located at [plumbing.x],[plumbing.y],[plumbing.z] ([get_area(plumbing.loc)])") to_chat(usr, "Checking for overlapping pipes...") - next_turf: - for(var/turf/T) - for(var/dir in GLOB.cardinal) - var/list/connect_types = list(1 = 0, 2 = 0, 3 = 0) - for(var/obj/machinery/atmospherics/pipe in T) - if(dir & pipe.initialize_directions) - for(var/connect_type in pipe.connect_types) - connect_types[connect_type] += 1 - if(connect_types[1] > 1 || connect_types[2] > 1 || connect_types[3] > 1) - to_chat(usr, "Overlapping pipe ([pipe.name]) located at [T.x],[T.y],[T.z] ([get_area(T)])") - continue next_turf + + var/list/pipes_by_turfs = list() + for(var/obj/machinery/atmospherics/pipe as anything in all_atmos_machinery) + var/turf/pipe_loc = get_turf(pipe) + if(!pipe_loc) + stack_trace("Pipe without loc: [pipe] - [ref(pipe)]") + continue + + var/list/pipes = pipes_by_turfs[ref(pipe_loc)] + if(!pipes) + pipes = list() + + pipes += pipe + + pipes_by_turfs[ref(pipe_loc)] += pipes + + var/list/overlapping_pipes_logs = list() + for(var/turf_ref in pipes_by_turfs) + var/list/pipes_on_same_turf = pipes_by_turfs[turf_ref] + if(length(pipes_on_same_turf) <= 1) + continue + + for(var/cardinal_dir in GLOB.cardinal) + var/list/connection_types = list() + for(var/obj/machinery/atmospherics/pipe as anything in pipes_on_same_turf) + if(!(cardinal_dir & pipe.initialize_directions)) + continue + + var/list/connections_by_dir = connection_types["[pipe.connect_types]"] + if(!connections_by_dir) + connections_by_dir = list() + connection_types["[pipe.connect_types]"] = connections_by_dir + + connections_by_dir |= list(pipe) + + for(var/connection_type in connection_types) + var/list/duplication_pipes = connection_types[connection_type] + if(length(duplication_pipes) <= 1) + continue + + for(var/obj/machinery/atmospherics/pipe as anything in duplication_pipes) + overlapping_pipes_logs += "Overlapping pipe [pipe.name] detected at [pipe.x], [pipe.y], [pipe.z]" + + if(length(overlapping_pipes_logs)) + to_chat(usr, overlapping_pipes_logs.Join("
    ")) + to_chat(usr, "Done") /client/proc/powerdebug() diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index b6a4866132a22..e0d8f4e6ffee1 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -71,7 +71,7 @@ if(confirm != "Yes") return 0 var/obj/item/device/paicard/card = new(T) - var/mob/living/silicon/pai/pai = new(card) + var/mob/living/silicon/pai/pai = new(card, card) pai.SetName(sanitizeSafe(input(choice, "Enter your pAI name:", "pAI Name", "Personal AI") as text)) pai.real_name = pai.name pai.key = choice.key @@ -158,6 +158,8 @@ log_and_message_admins("assumed direct control of [M].") var/mob/adminmob = src.mob M.ckey = src.ckey + M.teleop = null + adminmob.teleop = null if(isghost(adminmob)) qdel(adminmob) @@ -179,7 +181,7 @@ var/list/areas_with_intercom = list() var/list/areas_with_camera = list() - for(var/area/A in world) + for(var/area/A as anything in GLOB.areas) if(!(A.type in areas_all)) areas_all.Add(A.type) @@ -279,7 +281,7 @@ return if(undress) H.delete_inventory(TRUE) - outfit.equip(H) + outfit.equip(H, equip_adjustments = outfit.flags) log_and_message_admins("changed the equipment of [key_name(H)] to [outfit.name].") /client/proc/startSinglo() @@ -290,15 +292,15 @@ if(alert("Are you sure? This will start up the engine. Should only be used during debug!",,"Yes","No") != "Yes") return - for(var/obj/machinery/power/emitter/E in world) + for(var/obj/machinery/power/emitter/E as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/emitter)) if(E.anchored) E.active = 1 - for(var/obj/machinery/field_generator/F in world) + for(var/obj/machinery/field_generator/F as anything in SSmachines.get_machinery_of_type(/obj/machinery/field_generator)) if(F.anchored) F.Varedit_start = 1 spawn(30) - for(var/obj/machinery/the_singularitygen/G in world) + for(var/obj/machinery/the_singularitygen/G as anything in SSmachines.get_machinery_of_type(/obj/machinery/the_singularitygen)) if(G.anchored) var/obj/singularity/S = new /obj/singularity(get_turf(G), 50) spawn(0) @@ -316,7 +318,7 @@ //S.dissipate_track = 0 //S.dissipate_strength = 10 - for(var/obj/machinery/power/rad_collector/Rad in world) + for(var/obj/machinery/power/rad_collector/Rad as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/rad_collector)) if(Rad.anchored) if(!Rad.P) var/obj/item/tank/phoron/Phoron = new/obj/item/tank/phoron(Rad) @@ -328,7 +330,7 @@ if(!Rad.active) Rad.toggle_power() - for(var/obj/machinery/power/smes/SMES in world) + for(var/obj/machinery/power/smes/SMES as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/smes)) if(SMES.anchored) SMES.input_attempt = 1 @@ -410,7 +412,7 @@ if(!ishuman(H)) return cmd_analyse_health(H) -/obj/effect/debugmarker +/obj/debugmarker icon = 'icons/effects/lighting_overlay.dmi' icon_state = "transparent" layer = HOLOMAP_LAYER @@ -451,7 +453,7 @@ GLOB.planet_repopulation_disabled = !GLOB.planet_repopulation_disabled log_and_message_admins("toggled planet mob repopulating [GLOB.planet_repopulation_disabled ? "OFF" : "ON"].") -/client/proc/spawn_exoplanet(exoplanet_type as anything in subtypesof(/obj/effect/overmap/visitable/sector/exoplanet)) +/client/proc/spawn_exoplanet(exoplanet_type as anything in subtypesof(/obj/overmap/visitable/sector/exoplanet)) set category = "Debug" set name = "Create Exoplanet" @@ -477,10 +479,10 @@ if (last_chance == "Cancel") return - var/obj/effect/overmap/visitable/sector/exoplanet/new_planet = new exoplanet_type(null, world.maxx, world.maxy) + var/obj/overmap/visitable/sector/exoplanet/new_planet = new exoplanet_type(null, world.maxx, world.maxy) new_planet.features_budget = budget new_planet.themes = list(new theme) - new_planet.lightlevel = rand(5, 10)/10 + new_planet.sun_brightness_modifier = rand(0.1, 0.6) log_and_message_admins("is spawning [new_planet] at [new_planet.start_x],[new_planet.start_y], containing Z [english_list(new_planet.map_z)]") new_planet.build_level() diff --git a/code/modules/admin/verbs/fluids.dm b/code/modules/admin/verbs/fluids.dm index 99b5d61415d69..c55d36c240f3d 100644 --- a/code/modules/admin/verbs/fluids.dm +++ b/code/modules/admin/verbs/fluids.dm @@ -6,8 +6,7 @@ if(!check_rights(R_SPAWN)) return var/mob/user = usr if(istype(user) && user.client) - for(var/thing in trange(1, get_turf(user))) - var/turf/T = thing + for(var/turf/T as anything in RANGE_TURFS(user, 1)) T.add_fluid(2000, /datum/reagent/water) /datum/admins/proc/jump_to_fluid_source() @@ -44,82 +43,3 @@ /turf/simulated/ocean/non_flooded flooded = FALSE - -GLOBAL_LIST_INIT(submerged_levels, new) -/datum/admins/proc/submerge_map() - set category = "Admin" - set desc = "Submerge the map in an ocean." - set name = "Submerge Map" - - if(!check_rights(R_ADMIN)) - return - - if(!usr.z) - to_chat(usr, SPAN_WARNING("You must be on a valid z-level.")) - return - - var/list/flooding_levels = list(usr.z) - if(alert("Do you wish to flood this z-level, or this entire z-sector?", null, "This level", "Connected levels") == "Connected levels") - flooding_levels = GetConnectedZlevels(usr.z) - for(var/submerge_z in flooding_levels) - if(GLOB.submerged_levels["[submerge_z]"]) - flooding_levels -= "[submerge_z]" - if(!length(flooding_levels)) - to_chat(usr, SPAN_WARNING("This part of the map has already been dropped into an ocean.")) - return - - if(alert("Are you sure you want to drop this section of the map into the ocean?", null, "No", "Yes") == "No") - return - - to_world(SPAN_NOTICE("[usr.key] fumbled and dropped the server into an ocean, please wait for the game to catch up.")) - - sleep(10) // To ensure the message prints. - - SSfluids.suspend() - SSao.suspend() - SSicon_update.suspend() - - // Pre-flood turfs we aren't going to replace. - for(var/submerge_z in flooding_levels) - for(var/thing in block(locate(1, 1, submerge_z), locate(world.maxx, world.maxy, submerge_z))) - var/turf/T = thing - var/area/A = get_area(T) - if(A && (A.area_flags & AREA_FLAG_EXTERNAL)) - if(A.base_turf) - A.base_turf = /turf/simulated/ocean/non_flooded - if(!istype(T, /turf/space)) - T.make_flooded() - - // Generate the sea floor on the highest z-level in the set. - var/first_level = flooding_levels[1] - for(var/check_level in flooding_levels) - if(check_level < first_level) - first_level = check_level - flooding_levels -= first_level - GLOB.submerged_levels["[first_level]"] = TRUE - GLOB.using_map.base_turf_by_z["[first_level]"] = /turf/simulated/ocean - new /datum/random_map/noise/seafloor/replace_space(null, 1, 1, first_level, world.maxx, world.maxy) - - // Generate open space for the remaining z-levels. - for(var/submerge_z in flooding_levels) - GLOB.submerged_levels["[submerge_z]"] = TRUE - GLOB.using_map.base_turf_by_z["[submerge_z]"] = /turf/simulated/open - for(var/thing in block(locate(1, 1, submerge_z), locate(world.maxx, world.maxy, submerge_z))) - var/turf/T = thing - var/area/A = get_area(T) - if(A && (A.area_flags & AREA_FLAG_EXTERNAL)) - if(A.base_turf) - A.base_turf = /turf/simulated/open - if(istype(T, /turf/space)) - T.ChangeTurf(/turf/simulated/open/flooded) - else if(istype(T, /turf/simulated/open)) - T.make_flooded() - CHECK_TICK - - sleep(10) - - SSicon_update.wake() - SSao.wake() - SSfluids.wake() - - to_world(SPAN_NOTICE("[usr.key] has finished dunking the server into the ocean.")) diff --git a/code/modules/admin/verbs/grief_fixers.dm b/code/modules/admin/verbs/grief_fixers.dm index d82173cce6db4..c4bb79138d530 100644 --- a/code/modules/admin/verbs/grief_fixers.dm +++ b/code/modules/admin/verbs/grief_fixers.dm @@ -13,7 +13,7 @@ var/current_time = world.timeofday // Depower the supermatter, as it would quickly blow up once we remove all gases from the pipes. - for(var/obj/machinery/power/supermatter/S in SSmachines.machinery) + for(var/obj/machinery/power/supermatter/S as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/supermatter)) S.power = 0 to_chat(usr, "\[1/5\] - Supermatter depowered") @@ -36,11 +36,11 @@ for(var/id in gas_data.tile_overlay) unsorted_overlays |= gas_data.tile_overlay[id] - for(var/turf/simulated/T in world) + for(var/turf/simulated/T in ALL_TURFS()) T.air = null - T.overlays.Remove(unsorted_overlays) + T.CutOverlays(unsorted_overlays) T.zone = null - for(var/obj/effect/gas_overlay/effect in T.vis_contents) + for(var/obj/gas_overlay/effect in T.vis_contents) T.vis_contents -= effect to_chat(usr, "\[4/5\] - All turfs reset to roundstart values.") diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 87f024cc97738..463ba0f43f0bc 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -22,20 +22,20 @@ var/global/camera_range_display_status = 0 var/global/intercom_range_display_status = 0 -/obj/effect/debugging/camera_range +/obj/debugging/camera_range icon = 'icons/480x480.dmi' icon_state = "25percent" -/obj/effect/debugging/camera_range/Initialize() +/obj/debugging/camera_range/Initialize() . = ..() pixel_x = -224 pixel_y = -224 -/obj/effect/debugging/marker +/obj/debugging/marker icon = 'icons/turf/areas.dmi' icon_state = "yellow" -/obj/effect/debugging/marker/Move() +/obj/debugging/marker/Move() return 0 /client/proc/do_not_use_these() @@ -53,12 +53,12 @@ var/global/intercom_range_display_status = 0 - for(var/obj/effect/debugging/camera_range/C in world) + for(var/obj/debugging/camera_range/C in world) qdel(C) if(camera_range_display_status) for(var/obj/machinery/camera/C in cameranet.cameras) - new/obj/effect/debugging/camera_range(C.loc) + new/obj/debugging/camera_range(C.loc) @@ -106,15 +106,18 @@ var/global/intercom_range_display_status = 0 else intercom_range_display_status = 1 - for(var/obj/effect/debugging/marker/M in world) + for(var/obj/debugging/marker/M in world) qdel(M) - if(intercom_range_display_status) - for(var/obj/item/device/radio/intercom/I in world) - for(var/turf/T in orange(7,I)) - var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T) - if (!(F in view(7,I.loc))) - qdel(F) + if(!intercom_range_display_status) + return + + for(var/obj/item/device/radio/intercom/I in world) + var/list/atoms_in_view = view(7, I.loc) + for(var/turf/T as anything in ORANGE_TURFS(I, 7)) + var/obj/debugging/marker/F = new/obj/debugging/marker(T) + if(!(F in atoms_in_view)) + qdel(F) var/global/list/debug_verbs = list ( /client/proc/do_not_use_these @@ -306,19 +309,11 @@ var/global/list/debug_verbs = list ( for(var/atom/A in world) if(istype(A,type_path)) count++ - /* - var/atom/temp_atom - for(var/i = 0; i <= (length(atom_list)/10); i++) - var/line = "" - for(var/j = 1; j <= 10; j++) - if(i*10+j <= length(atom_list)) - temp_atom = atom_list[i*10+j] - line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " - log_debug(line) */ log_debug("There are [count] objects of type [type_path] in the game world") /proc/get_zas_image(turf/T, icon_state) + RETURN_TYPE(/image) return image_repository.atom_image(T, 'icons/misc/debug_group.dmi', icon_state, plane = DEFAULT_PLANE, layer = ABOVE_TILE_LAYER) //Special for Cakey @@ -327,7 +322,7 @@ var/global/list/debug_verbs = list ( set name = "Find Leaky Pipes" var/list/baddies = list("LEAKY PIPES") - for(var/obj/machinery/atmospherics/pipe/P in SSmachines.machinery) + for(var/obj/machinery/atmospherics/pipe/P as anything in SSmachines.get_machinery_of_type(/obj/machinery/atmospherics/pipe)) if(P.leaking) baddies += "[P] ([P.x],[P.y],[P.z] - JMP)" diff --git a/code/modules/admin/verbs/massmodvar.dm b/code/modules/admin/verbs/massmodvar.dm index 10337f8dada23..fe40dba27e490 100644 --- a/code/modules/admin/verbs/massmodvar.dm +++ b/code/modules/admin/verbs/massmodvar.dm @@ -169,7 +169,7 @@ if("text") var/new_value = input("Enter new text:","Text",O.vars[variable]) as text|null//todo: sanitize ??? - if(new_value == null) return + if(isnull(new_value)) return O.vars[variable] = new_value if(method) @@ -206,7 +206,7 @@ if("num") var/new_value = input("Enter new number:","Num",\ O.vars[variable]) as num|null - if(new_value == null) return + if(isnull(new_value)) return O.vars[variable] = new_value if(method) @@ -243,8 +243,8 @@ if("type") var/new_value - new_value = input("Enter type:","Type",O.vars[variable]) as null|anything in typesof(/obj,/mob,/area,/turf) - if(new_value == null) return + new_value = select_subpath(within_scope = /datum) + if(isnull(new_value)) return O.vars[variable] = new_value if(method) if(istype(O, /mob)) @@ -279,7 +279,7 @@ if("file") var/new_value = input("Pick file:","File",O.vars[variable]) as null|file - if(new_value == null) return + if(isnull(new_value)) return O.vars[variable] = new_value if(method) @@ -315,7 +315,7 @@ if("icon") var/new_value = input("Pick icon:","Icon",O.vars[variable]) as null|icon - if(new_value == null) return + if(isnull(new_value)) return O.vars[variable] = new_value if(method) if(istype(O, /mob)) diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 938a713930e51..882ba2f98c296 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -501,13 +501,13 @@ if("text") var/var_new = input("Enter new text:","Text",O.get_variable_value(variable)) as null|text - if(var_new==null) return + if(isnull(var_new)) return var_value = var_new if("num") if(variable=="stat") var/var_new = input("Enter new number:","Num",O.get_variable_value(variable)) as null|num - if(var_new == null) return + if(isnull(var_new)) return if((O.get_variable_value(variable) == 2) && (var_new < 2))//Bringing the dead back to life var/mob/M = O M.switch_from_dead_to_living_mob_list() @@ -517,7 +517,7 @@ var_value = var_new else var/var_new = input("Enter new number:","Num",O.get_variable_value(variable)) as null|num - if(var_new==null) return + if(isnull(var_new)) return var_value = var_new if("type") @@ -528,22 +528,22 @@ if("reference") var/var_new = input("Select reference:","Reference",O.get_variable_value(variable)) as null|mob|obj|turf|area in world - if(var_new==null) return + if(isnull(var_new)) return var_value = var_new if("mob reference") var/var_new = input("Select reference:","Reference",O.get_variable_value(variable)) as null|mob in world - if(var_new==null) return + if(isnull(var_new)) return var_value = var_new if("file") var/var_new = input("Pick file:","File",O.get_variable_value(variable)) as null|file - if(var_new==null) return + if(isnull(var_new)) return var_value = var_new if("icon") var/var_new = input("Pick icon:","Icon",O.get_variable_value(variable)) as null|icon - if(var_new==null) return + if(isnull(var_new)) return var_value = var_new if("color") diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 3f6c14a0a148a..85c3c96ce3e65 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -4,9 +4,9 @@ sanitize_and_communicate(/singleton/communication_channel/pray, src, msg) -/proc/Centcomm_announce(msg, mob/Sender, iamessage) +/proc/Centcom_announce(msg, mob/Sender, iamessage) var/mob/intercepted = check_for_interception() - msg = SPAN_NOTICE("[SPAN_COLOR("orange", "[uppertext(GLOB.using_map.boss_short)]M[iamessage ? " IA" : ""][intercepted ? "(Intercepted by [intercepted])" : null]:")][key_name(Sender, 1)] (PP) (VV) ([admin_jump_link(Sender)]) (CA) (BSA) (RPLY): [msg]") + msg = SPAN_NOTICE("[SPAN_COLOR("orange", "[uppertext(GLOB.using_map.boss_short)]M[iamessage ? " IA" : ""][intercepted ? "(Intercepted by [intercepted])" : null]:")][key_name(Sender, 1)] (PP) (VV) ([admin_jump_link(Sender)]) (CA) (BSA) (RPLY): [msg]") for(var/client/C as anything in GLOB.admins) if(R_ADMIN & C.holder.rights) to_chat(C, msg) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index aa2cd907980bf..6e580fadbe983 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -366,7 +366,7 @@ var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No") if(show_log == "Yes") - command_announcement.Announce("Ion storm detected near the [station_name()]. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg') + command_announcement.Announce("Ion storm detected near the [station_name()]. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = ANNOUNCER_IONSTORM) IonStorm(0) @@ -588,7 +588,7 @@ Ccomp's first proc. var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No") if(show_log == "Yes") - command_announcement.Announce("Ion storm detected near the [station_name()]. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg') + command_announcement.Announce("Ion storm detected near the [station_name()]. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = ANNOUNCER_IONSTORM) /client/proc/cmd_admin_rejuvenate(mob/living/M as mob in SSmobs.mob_list) set category = "Special Verbs" @@ -701,9 +701,9 @@ Ccomp's first proc. if(!check_rights(R_DEBUG|R_FUN)) return var/heavy = input("Range of heavy pulse.", text("Input")) as num|null - if(heavy == null) return + if(isnull(heavy)) return var/light = input("Range of light pulse.", text("Input")) as num|null - if(light == null) return + if(isnull(light)) return if (heavy || light) @@ -799,7 +799,7 @@ Ccomp's first proc. if(view == world.view) view = input("Select view range:", "FUCK YE", 7) in list(1,2,3,4,5,6,7,8,9,10,11,12,13,14,128) else - view = world.view + view = get_preference_value(/datum/client_preference/client_view) log_and_message_admins("changed their view range to [view].") @@ -980,9 +980,9 @@ Ccomp's first proc. range = rand(8, 13) var/turf/T if (connected == "Yes") - T = pick_area_turf_in_connected_z_levels(list(/proc/is_not_space_area), z_level = zlevel) + T = pick_area_turf_in_connected_z_levels(list(GLOBAL_PROC_REF(is_not_space_area)), z_level = zlevel) else - T = pick_area_turf_in_single_z_level(list(/proc/is_not_space_area), z_level = zlevel) + T = pick_area_turf_in_single_z_level(list(GLOBAL_PROC_REF(is_not_space_area)), z_level = zlevel) explosion(T, range, max_power, turf_breaker = break_turfs) booms = booms - 1 sleep(delay SECONDS) @@ -992,7 +992,7 @@ Ccomp's first proc. set name = "Rename Ship" set desc = "Rename a ship (Does not rename areas on the ship)" - var/obj/effect/overmap/visitable/ship/ship = input("What ship?", "Rename Ship") as null | anything in SSshuttle.ships + var/obj/overmap/visitable/ship/ship = input("What ship?", "Rename Ship") as null | anything in SSshuttle.ships if (!ship) return @@ -1012,26 +1012,26 @@ Ccomp's first proc. shuttle.name = name break - for (var/obj/effect/shuttle_landmark/ship/S in landmarks_list) + for (var/obj/shuttle_landmark/ship/S in landmarks_list) if (S.name == original_name) S.shuttle_name = name - if (istype(S, /obj/effect/overmap/visitable/ship/landable)) - var/obj/effect/overmap/visitable/ship/landable/SL = S + if (istype(S, /obj/overmap/visitable/ship/landable)) + var/obj/overmap/visitable/ship/landable/SL = S SL.landmark.landmark_tag = "ship_[name]" SL.landmark.shuttle_name = name //rename waypoints based on the origin ship name - for (var/obj/effect/overmap/visitable/ship/S in SSshuttle.ships) + for (var/obj/overmap/visitable/ship/S in SSshuttle.ships) for (var/key in S.restricted_waypoints) if (key == original_name) S.add_landmark(S.restricted_waypoints[key][1], name) S.remove_landmark(S.restricted_waypoints[key][1], original_name) - if (istype(S, /obj/effect/overmap/visitable/ship/landable)) - var/obj/effect/overmap/visitable/ship/landable/SL = S + if (istype(S, /obj/overmap/visitable/ship/landable)) + var/obj/overmap/visitable/ship/landable/SL = S SL.landmark.landmark_tag = "ship_[name]" SL.landmark.shuttle_name = name SL.shuttle = name - for (var/obj/machinery/computer/shuttle_control/S in SSmachines.machinery) + for (var/obj/machinery/computer/shuttle_control/S as anything in SSmachines.get_machinery_of_type(/obj/machinery/computer/shuttle_control)) if (S.shuttle_tag == original_name) S.shuttle_tag = name S.name = "[name] Control Console" diff --git a/code/modules/admin/view_variables/helpers.dm b/code/modules/admin/view_variables/helpers.dm index 971e7187adb64..aa02c01b7fe23 100644 --- a/code/modules/admin/view_variables/helpers.dm +++ b/code/modules/admin/view_variables/helpers.dm @@ -14,12 +14,6 @@ "} -/atom/movable/get_view_variables_options() - return ..() + {" - - - "} - /mob/living/get_view_variables_header() return {" [src] @@ -39,6 +33,17 @@ /datum/proc/get_view_variables_options() return "" +/atom/get_view_variables_options() + return ..() + {" + + "} + +/atom/movable/get_view_variables_options() + return ..() + {" + + + "} + /mob/get_view_variables_options() return ..() + {" @@ -209,6 +214,6 @@ return FALSE /proc/forbidden_varedit_object_types() - return list( + return list( /datum/admins ) diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm index aa8b6e2229d38..973c86e14260f 100644 --- a/code/modules/admin/view_variables/topic.dm +++ b/code/modules/admin/view_variables/topic.dm @@ -485,8 +485,8 @@ return SSnano.close_uis(H) - H.client.cache.Cut() - var/datum/asset/assets = get_asset_datum(/datum/asset/nanoui) + H.client.sent_assets.Cut() + var/datum/asset/assets = get_asset_datum(/datum/asset/simple/nanoui_common) assets.send(H) to_chat(usr, "Resource files sent") @@ -564,6 +564,12 @@ var/mob/living/L = locate(href_list["debug_mob_ai"]) log_debug("AI Debugging toggled [L.ai_holder.debug() ? "ON" : "OFF"] for \the [L]") + else if(href_list["changetts"]) + if(!check_rights(R_ADMIN)) + return + var/atom/A = locate(href_list["changetts"]) + A.change_tts_seed(src.mob, TRUE, TRUE) + else if (href_list["addmovementhandler"]) if (!check_rights(R_DEBUG)) return diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm index 04bb8c528b839..00567042e5ece 100644 --- a/code/modules/admin/view_variables/view_variables.dm +++ b/code/modules/admin/view_variables/view_variables.dm @@ -185,7 +185,7 @@ var/global/list/view_variables_no_assoc = list("verbs", "contents","screen","ima extra += "
      " for (var/index = 1 to length(L)) var/entry = L[index] - if(!isnum(entry) && !isnull(entry) && !(varname in view_variables_no_assoc) && L[entry] != null) + if(!isnum(entry) && !isnull(entry) && !(varname in view_variables_no_assoc)) extra += "
    • [index]: [make_view_variables_value(entry)] -> [make_view_variables_value(L[entry])]
    • " else extra += "
    • [index]: [make_view_variables_value(entry)]
    • " diff --git a/code/modules/admin/view_variables/view_variables_global.dm b/code/modules/admin/view_variables/view_variables_global.dm index a4fa423bdda79..5f3430e8dd815 100644 --- a/code/modules/admin/view_variables/view_variables_global.dm +++ b/code/modules/admin/view_variables/view_variables_global.dm @@ -12,7 +12,7 @@ GLOBAL_DATUM_INIT(debug_real_globals, /datum/debug_real_globals, new) for (var/name in global.vars) if (name in hidden) continue - ADD_SORTED(global_names, name, /proc/cmp_text_asc) + ADD_SORTED(global_names, name, GLOBAL_PROC_REF(cmp_text_asc)) /datum/debug_real_globals/proc/UpdateStat() diff --git a/code/modules/admin/view_variables/vv_set_handlers.dm b/code/modules/admin/view_variables/vv_set_handlers.dm index 57e0faedab68f..07bce527f4b11 100644 --- a/code/modules/admin/view_variables/vv_set_handlers.dm +++ b/code/modules/admin/view_variables/vv_set_handlers.dm @@ -60,23 +60,23 @@ /singleton/vv_set_handler/opacity_hander handled_type = /atom - handled_vars = list("opacity" = /atom/proc/set_opacity) - predicates = list(/proc/is_num_predicate) + handled_vars = list("opacity" = TYPE_PROC_REF(/atom, set_opacity)) + predicates = list(GLOBAL_PROC_REF(is_num_predicate)) /singleton/vv_set_handler/dir_hander handled_type = /atom - handled_vars = list("dir" = /atom/proc/set_dir) - predicates = list(/proc/is_dir_predicate) + handled_vars = list("dir" = TYPE_PROC_REF(/atom, set_dir)) + predicates = list(GLOBAL_PROC_REF(is_dir_predicate)) /singleton/vv_set_handler/ghost_appearance_handler handled_type = /mob/observer/ghost - handled_vars = list("appearance" = /mob/observer/ghost/proc/set_appearance) - predicates = list(/proc/is_atom_predicate) + handled_vars = list("appearance" = TYPE_PROC_REF(/mob/observer/ghost, set_appearance)) + predicates = list(GLOBAL_PROC_REF(is_atom_predicate)) /singleton/vv_set_handler/virtual_ability_handler handled_type = /mob/observer/virtual handled_vars = list("abilities") - predicates = list(/proc/is_num_predicate) + predicates = list(GLOBAL_PROC_REF(is_num_predicate)) /singleton/vv_set_handler/virtual_ability_handler/handle_set_var(mob/observer/virtual/virtual, variable, var_value, client) ..() @@ -84,41 +84,41 @@ /singleton/vv_set_handler/mob_see_invisible_handler handled_type = /mob - handled_vars = list("see_invisible" = /mob/proc/set_see_invisible) - predicates = list(/proc/is_num_predicate) + handled_vars = list("see_invisible" = TYPE_PROC_REF(/mob, set_see_invisible)) + predicates = list(GLOBAL_PROC_REF(is_num_predicate)) /singleton/vv_set_handler/mob_sight_handler handled_type = /mob - handled_vars = list("sight" = /mob/proc/set_sight) - predicates = list(/proc/is_num_predicate) + handled_vars = list("sight" = TYPE_PROC_REF(/mob, set_sight)) + predicates = list(GLOBAL_PROC_REF(is_num_predicate)) /singleton/vv_set_handler/mob_see_in_dark_handler handled_type = /mob - handled_vars = list("see_in_dark" = /mob/proc/set_see_in_dark) - predicates = list(/proc/is_num_predicate) + handled_vars = list("see_in_dark" = TYPE_PROC_REF(/mob, set_see_in_dark)) + predicates = list(GLOBAL_PROC_REF(is_num_predicate)) /singleton/vv_set_handler/mob_stat_handler handled_type = /mob - handled_vars = list("set_stat" = /mob/proc/set_stat) - predicates = list(/proc/is_num_predicate) + handled_vars = list("set_stat" = TYPE_PROC_REF(/mob, set_stat)) + predicates = list(GLOBAL_PROC_REF(is_num_predicate)) /singleton/vv_set_handler/icon_state_handler handled_type = /atom - handled_vars = list("icon_state" = /atom/proc/set_icon_state) + handled_vars = list("icon_state" = TYPE_PROC_REF(/atom, set_icon_state)) /singleton/vv_set_handler/invisibility_handler handled_type = /atom - handled_vars = list("invisibility" = /atom/proc/set_invisibility) - predicates = list(/proc/is_num_predicate) + handled_vars = list("invisibility" = TYPE_PROC_REF(/atom, set_invisibility)) + predicates = list(GLOBAL_PROC_REF(is_num_predicate)) /singleton/vv_set_handler/name_handler handled_type = /atom - handled_vars = list("name" = /atom/proc/SetName) - predicates = list(/proc/is_text_predicate) + handled_vars = list("name" = TYPE_PROC_REF(/atom, SetName)) + predicates = list(GLOBAL_PROC_REF(is_text_predicate)) /singleton/vv_set_handler/light_handler handled_type = /atom - handled_vars = list("light_max_bright","light_inner_range","light_outer_range","light_falloff_curve") + handled_vars = list("light_power","light_range") /singleton/vv_set_handler/light_handler/handle_set_var(atom/A, variable, var_value, client) var_value = text2num(var_value) @@ -126,25 +126,23 @@ return // More sanity checks - var/new_max = variable == "light_max_bright" ? var_value : A.light_max_bright - var/new_inner = variable == "light_inner_range" ? var_value : A.light_inner_range - var/new_outer = variable == "light_outer_range" ? var_value : A.light_outer_range - var/new_falloff = variable == "light_falloff_curve" ? var_value : A.light_falloff_curve + var/new_max = variable == "light_power" ? var_value : A.light_power + var/new_range = variable == "light_range" ? var_value : A.light_range - A.set_light(new_max, new_inner, new_outer, new_falloff) + A.set_light(new_range, new_max) /singleton/vv_set_handler/health_value_handler handled_type = /atom handled_vars = list( - "health_max" = /atom/proc/set_max_health, - "health_current" = /atom/proc/set_health + "health_max" = TYPE_PROC_REF(/atom, set_max_health), + "health_current" = TYPE_PROC_REF(/atom, set_health) ) - predicates = list(/proc/is_num_predicate) + predicates = list(GLOBAL_PROC_REF(is_num_predicate)) /singleton/vv_set_handler/health_dead_handler handled_type = /atom handled_vars = list("health_dead") - predicates = list(/proc/is_strict_bool_predicate) + predicates = list(GLOBAL_PROC_REF(is_strict_bool_predicate)) /singleton/vv_set_handler/health_dead_handler/handle_set_var(atom/target, variable, var_value, client) if (var_value == target.health_dead) @@ -156,10 +154,10 @@ target.revive_health() /singleton/vv_set_handler/vessel_mass - handled_type = /obj/effect/overmap/visitable/ship + handled_type = /obj/overmap/visitable/ship handled_vars = list("vessel_mass") predicates = list( - /proc/is_num_predicate, - /proc/is_non_zero_predicate, - /proc/is_non_negative_predicate + GLOBAL_PROC_REF(is_num_predicate), + GLOBAL_PROC_REF(is_non_zero_predicate), + GLOBAL_PROC_REF(is_non_negative_predicate) ) diff --git a/code/modules/ai/__readme.dm b/code/modules/ai/__readme.dm index cc2d4fa0251ad..580606234cbc0 100644 --- a/code/modules/ai/__readme.dm +++ b/code/modules/ai/__readme.dm @@ -132,7 +132,7 @@ avoid infinite loops (I.E. Stance A switches to Stance B, which then switches to Stance A, and so on...), and the delay is very short so it should not be an issue. -See code/__defines/mob.dm for a list of stance defines, and descriptions +See code/__defines/ai.dm for a list of stance defines, and descriptions about their purpose. Generally, each stance has its own file in the AI module folder and are mostly self contained, however some files instead deal with general things that other stances may require, such as targeting diff --git a/code/modules/ai/_defines.dm b/code/modules/ai/_defines.dm deleted file mode 100644 index 7b49f18ddb2a8..0000000000000 --- a/code/modules/ai/_defines.dm +++ /dev/null @@ -1,34 +0,0 @@ -// Defines for the ai_intelligence var. -// Controls if the mob will do 'advanced tactics' like running from grenades. -#define AI_DUMB 1 // Be dumber than usual. -#define AI_NORMAL 2 // Default level. -#define AI_SMART 3 // Will do more processing to be a little smarter, like not walking while confused if it could risk stepping randomly onto a bad tile. - -#define ai_log(M,V) if(debug_ai) ai_log_output(M,V) - -// Logging level defines. -#define AI_LOG_OFF 0 // Don't show anything. -#define AI_LOG_ERROR 1 // Show logs of things likely causing the mob to not be functioning correctly. -#define AI_LOG_WARNING 2 // Show less serious but still helpful to know issues that might be causing things to work incorrectly. -#define AI_LOG_INFO 3 // Important regular events, like selecting a target or switching stances. -#define AI_LOG_DEBUG 4 // More detailed information about the flow of execution. -#define AI_LOG_TRACE 5 // Even more detailed than the last. Will absolutely flood your chatlog. - -// Results of pre-movement checks. -// Todo: Move outside AI code? -#define MOVEMENT_ON_COOLDOWN -1 // Recently moved and needs to try again soon. -#define MOVEMENT_FAILED 0 // Move() returned false for whatever reason and the mob didn't move. -#define MOVEMENT_SUCCESSFUL 1 // Move() returned true and the mob hopefully moved. - -// Results of pre-attack checks -#define ATTACK_ON_COOLDOWN -1 // Recently attacked and needs to try again soon. -#define ATTACK_FAILED 0 // Something else went wrong! Maybe they moved away! -#define ATTACK_SUCCESSFUL 1 // We attacked (or tried to, misses count too) - -// Reasons for targets to not be valid. Based on why, the AI responds differently. -#define AI_TARGET_VALID 0 // We can fight them. -#define AI_TARGET_INVIS 1 // They were in field of view but became invisible. Switch to STANCE_BLINDFIGHT if no other viable targets exist. -#define AI_TARGET_NOSIGHT 2 // No longer in field of view. Go STANCE_REPOSITION to their last known location if no other targets are seen. -#define AI_TARGET_ALLY 3 // They are an ally. Find a new target. -#define AI_TARGET_DEAD 4 // They're dead. Find a new target. -#define AI_TARGET_INVINCIBLE 5 // Target is currently unable to receive damage for whatever reason. Find a new target or wait. diff --git a/code/modules/ai/ai_holder.dm b/code/modules/ai/ai_holder.dm index 566ca6c9f684d..c6068ce3d1e5d 100644 --- a/code/modules/ai/ai_holder.dm +++ b/code/modules/ai/ai_holder.dm @@ -43,7 +43,7 @@ if (!(datum.process_flags & AI_FASTPROCESSING)) { \ /mob/living/Destroy() if (ai_holder) - GLOB.stat_set_event.unregister(src, ai_holder, /datum/ai_holder/proc/holder_stat_change) + GLOB.stat_set_event.unregister(src, ai_holder, TYPE_PROC_REF(/datum/ai_holder, holder_stat_change)) QDEL_NULL(ai_holder) return ..() @@ -60,7 +60,9 @@ if (!(datum.process_flags & AI_FASTPROCESSING)) { \ /datum/ai_holder /// The mob this datum is going to control. - var/mob/living/simple_animal/holder = null + var/mob/living/holder = null + /// The required mob type of the holder. + var/holder_required_type = /mob/living /// Determines if the mob should be doing a specific thing, e.g. attacking, following, standing around, etc. var/stance = STANCE_IDLE /// Adjust to make the AI be intentionally dumber, or make it more robust (e.g. dodging grenades). @@ -86,7 +88,6 @@ if (!(datum.process_flags & AI_FASTPROCESSING)) { \ STANCE_MOVE, STANCE_FOLLOW, STANCE_FLEE, - STANCE_DISABLED ) var/static/list/noprocess_stances = list( STANCE_SLEEP @@ -104,8 +105,18 @@ if (!(datum.process_flags & AI_FASTPROCESSING)) { \ ASSERT(new_holder) holder = new_holder home_turf = get_turf(holder) + + if (!istype(new_holder, holder_required_type)) + var/mob/new_holder_mob = new_holder + src.debug_ai = AI_LOG_ERROR + ai_log("New(): Invalid holder type, destroying AI. (Expected: [holder_required_type] Received: [new_holder_mob.type])", AI_LOG_ERROR) + QDEL_NULL(src) + return manage_processing(AI_PROCESSING) - GLOB.stat_set_event.register(holder, src, .proc/holder_stat_change) + GLOB.stat_set_event.register(holder, src, PROC_REF(holder_stat_change)) + + if (cooperative) + build_faction_friends() ..() /datum/ai_holder/Destroy() @@ -138,7 +149,7 @@ if (!(datum.process_flags & AI_FASTPROCESSING)) { \ /// Set the AI as 'busy' for a specific length of time. /datum/ai_holder/proc/set_busy_delay(time) set_busy(TRUE) - addtimer(new Callback(src, .proc/set_busy, FALSE), time) + addtimer(CALLBACK(src, PROC_REF(set_busy), FALSE), time) /** * Makes this ai holder not get processed. @@ -179,14 +190,16 @@ if (!(datum.process_flags & AI_FASTPROCESSING)) { \ /datum/ai_holder/proc/handle_tactics() if (holder.key && !autopilot) return - handle_special_tactic() + if (!is_disabled()) + 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 (holder.key && !autopilot) return - handle_special_strategical() + if (!is_disabled()) + handle_special_strategical() handle_stance_strategical() /// Override this for special things without polluting the main `handle_tactics()` loop. @@ -219,21 +232,21 @@ if (!(datum.process_flags & AI_FASTPROCESSING)) { \ /// This is called every half a second. /datum/ai_holder/proc/handle_stance_tactical() ai_log("========= Fast Process Beginning ==========", AI_LOG_TRACE) // This is to make it easier visually to disinguish between 'blocks' of what a tick did. - ai_log("handle_stance_tactical() : Called.", AI_LOG_TRACE) + ai_log("handle_stance_tactical() : Entering.", AI_LOG_TRACE) if (stance == STANCE_SLEEP) ai_log("handle_stance_tactical() : Going to sleep.", AI_LOG_TRACE) go_sleep() return - if (target && can_see_target(target)) - track_target_position() - if (stance != STANCE_DISABLED && is_disabled()) // Stunned/confused/etc ai_log("handle_stance_tactical() : Disabled.", AI_LOG_TRACE) set_stance(STANCE_DISABLED) return + if (target && can_see_target(target)) + track_target_position() + if (stance in STANCES_COMBAT) // Should resist? We check this before fleeing so that we can actually flee and not be trapped in a chair. if (holder.incapacitated(INCAPACITATION_BUCKLED_PARTIALLY)) @@ -271,10 +284,9 @@ if (!(datum.process_flags & AI_FASTPROCESSING)) { \ ai_log("handle_stance_tactical() : STANCE_MOVE, going to walk_to_destination().", AI_LOG_TRACE) walk_to_destination() - if (STANCE_REPOSITION) // This is the same as above but doesn't stop if an enemy is visible since its an 'in-combat' move order. + if (STANCE_REPOSITION) // This is the same as above but stops if an enemy is visible since its an 'in-combat' move order. ai_log("handle_stance_tactical() : STANCE_REPOSITION, going to walk_to_destination().", AI_LOG_TRACE) - if (!target && !find_target()) - walk_to_destination() + walk_to_destination() if (STANCE_FOLLOW) ai_log("handle_stance_tactical() : STANCE_FOLLOW, going to walk_to_leader().", AI_LOG_TRACE) @@ -284,26 +296,28 @@ if (!(datum.process_flags & AI_FASTPROCESSING)) { \ ai_log("handle_stance_tactical() : STANCE_FLEE, going to flee_from_target().", AI_LOG_TRACE) flee_from_target() - if (STANCE_DISABLED) - ai_log("handle_stance_tactical() : STANCE_DISABLED.", AI_LOG_TRACE) - if (!is_disabled()) - ai_log("handle_stance_tactical() : No longer disabled.", AI_LOG_TRACE) - set_stance(STANCE_IDLE) - else - handle_disabled() - ai_log("handle_stance_tactical() : Exiting.", AI_LOG_TRACE) ai_log("========= Fast Process Ending ==========", AI_LOG_TRACE) /// This is called every two seconds. /datum/ai_holder/proc/handle_stance_strategical() ai_log("++++++++++ Slow Process Beginning ++++++++++", AI_LOG_TRACE) - ai_log("handle_stance_strategical() : Called.", AI_LOG_TRACE) + ai_log("handle_stance_strategical() : Entering.", AI_LOG_TRACE) //We got left around for some reason. Goodbye cruel world. if (!holder) qdel(src) + if (stance == STANCE_SLEEP) + ai_log("handle_stance_tactical() : Going to sleep. Exiting.", AI_LOG_TRACE) + go_sleep() + return + + if (stance != STANCE_DISABLED && is_disabled()) // Stunned/confused/etc + ai_log("handle_stance_tactical() : Disabled. Exiting.", AI_LOG_TRACE) + set_stance(STANCE_DISABLED) + return + ai_log("handle_stance_strategical() : LTT=[lose_target_time]", AI_LOG_TRACE) if (lose_target_time && (lose_target_time + lose_target_timeout < world.time)) // We were tracking an enemy but they are gone. ai_log("handle_stance_strategical() : Giving up a chase.", AI_LOG_DEBUG) @@ -311,10 +325,17 @@ if (!(datum.process_flags & AI_FASTPROCESSING)) { \ if (stance in STANCES_COMBAT) request_help() // Call our allies. + if (target && hostile && !can_pursue(target)) + ai_log("handle_stance_stragical() : Target no longer valid, dropping.", AI_LOG_TRACE) + remove_target() switch(stance) if (STANCE_IDLE) - if (speak_chance) // In the long loop since otherwise it wont shut up. + if (target) + ai_log("handle_stance_strategical() : STANCE_IDLE, target still present. Getting ready to fight.", AI_LOG_TRACE) + set_stance(STANCE_FIGHT); + + if (prob(speak_chance)) // In the long loop since otherwise it wont shut up. handle_idle_speaking() if (hostile) @@ -322,25 +343,31 @@ if (!(datum.process_flags & AI_FASTPROCESSING)) { \ find_target() if (should_go_home()) - ai_log("handle_stance_tactical() : STANCE_IDLE, going to go home.", AI_LOG_TRACE) + ai_log("handle_stance_strategical() : STANCE_IDLE, going to go home.", AI_LOG_TRACE) go_home() else if (should_follow_leader()) - ai_log("handle_stance_tactical() : STANCE_IDLE, going to follow leader.", AI_LOG_TRACE) + ai_log("handle_stance_strategical() : STANCE_IDLE, going to follow leader.", AI_LOG_TRACE) set_stance(STANCE_FOLLOW) else if (should_wander()) - ai_log("handle_stance_tactical() : STANCE_IDLE, going to wander randomly.", AI_LOG_TRACE) + ai_log("handle_stance_strategical() : STANCE_IDLE, going to wander randomly.", AI_LOG_TRACE) handle_wander_movement() if (STANCE_APPROACH) - if (target) + if (hostile && find_target()) // In case another target is closer. ai_log("handle_stance_strategical() : STANCE_APPROACH, going to calculate_path([target]).", AI_LOG_TRACE) calculate_path(target) walk_to_target() + if (STANCE_MOVE) if (hostile && find_target()) // This will switch its stance. ai_log("handle_stance_strategical() : STANCE_MOVE, found target and was inturrupted.", AI_LOG_TRACE) + + if (STANCE_REPOSITION) + if (hostile && find_target()) + ai_log("handle_stance_strategical() : STANCE_REPOSITION, found target and was inturrupted.", AI_LOG_TRACE) + if (STANCE_FOLLOW) if (hostile && find_target()) // This will switch its stance. ai_log("handle_stance_strategical() : STANCE_FOLLOW, found target and was inturrupted.", AI_LOG_TRACE) @@ -349,6 +376,14 @@ if (!(datum.process_flags & AI_FASTPROCESSING)) { \ calculate_path(leader) walk_to_leader() + if (STANCE_DISABLED) + ai_log("handle_stance_tactical() : STANCE_DISABLED.", AI_LOG_TRACE) + if (!is_disabled()) + ai_log("handle_stance_tactical() : No longer disabled.", AI_LOG_TRACE) + set_stance(STANCE_IDLE) + else + handle_disabled() + ai_log("handle_stance_strategical() : Exiting.", AI_LOG_TRACE) ai_log("++++++++++ Slow Process Ending ++++++++++", AI_LOG_TRACE) diff --git a/code/modules/ai/ai_holder_combat.dm b/code/modules/ai/ai_holder_combat.dm index 35ab2340bdbac..b776c441ecb2b 100644 --- a/code/modules/ai/ai_holder_combat.dm +++ b/code/modules/ai/ai_holder_combat.dm @@ -12,14 +12,15 @@ var/prying = FALSE // True when the mob is trying to force open a door. - var/list/valid_obstacles_by_priority = list(/obj/structure/window, - /obj/structure/closet, - /obj/machinery/door/window, - /obj/structure/table, - /obj/structure/grille, - /obj/structure/barricade, - /obj/structure/wall_frame, - /obj/structure/railing) + // Excludes doors, shutters and windows, which are processed separately + var/list/valid_obstacles_by_priority = list( + /obj/structure/closet, + /obj/structure/table, + /obj/structure/grille, + /obj/structure/barricade, + /obj/structure/wall_frame, + /obj/structure/railing + ) // This does the actual attacking. /datum/ai_holder/proc/engage_target() @@ -37,6 +38,26 @@ holder.face_atom(target) last_conflict_time = world.time + // Break down tables or low walls first. + if (distance <= 1 && can_violently_breakthrough()) + var/turf/target_turf = get_turf(target) + for (var/obj/obstacle_obj in target_turf.contents) + if (obstacle_obj.density) + ai_log("engage_target() : Target standing on an obstacle, attacking: [obstacle_obj]", AI_LOG_TRACE) + melee_attack(obstacle_obj) + return + + // Break into closets if necessary. + if (distance <= 1 && istype(target.loc, /obj/structure/closet) && intelligence_level >= AI_NORMAL) + var/obj/structure/closet/closet = target.loc + if (closet.welded || closet.locked) + ai_log("engage_target() : Target hiding inside a secure locker, giving up.", AI_LOG_TRACE) + lose_target() + else + ai_log("engage_target() : Target hiding in a locker, opening.", AI_LOG_TRACE) + closet.open() + return + // Do a 'special' attack, if one is allowed. if (holder.ICheckSpecialAttack(target)) ai_log("engage_target() : Attempting a special attack.", AI_LOG_TRACE) @@ -90,6 +111,13 @@ if (. == ATTACK_SUCCESSFUL) post_ranged_attack(A) +// Attack selection for destroying obstacles. +// If we have an indiscriminate ranged attack, use that. Otherwise use melee. +/datum/ai_holder/proc/obstacle_attack(atom/A) + if (!conserve_ammo && holder.ICheckRangedAttack(target)) + return ranged_attack(A) + return melee_attack(A) + // Most mobs probably won't have this defined but we don't care. /datum/ai_holder/proc/special_attack(atom/movable/AM) pre_special_attack(AM) @@ -142,13 +170,14 @@ ai_log("test_projectile_safety() : Test projectile did[!would_hit_primary_target ? " NOT " : " "]hit \the [AM]", AI_LOG_DEBUG) // Make sure we don't have a chance to shoot our friends. - var/atom/A = hit_thing - ai_log("test_projectile_safety() : Evaluating \the [A] ([A.type]).", AI_LOG_TRACE) - if (isliving(A)) // Don't shoot at our friends, even if they're behind the target, as RNG can make them get hit. - var/mob/living/L = A - if (holder.IIsAlly(L)) - ai_log("test_projectile_safety() : Would threaten ally, exiting with FALSE.", AI_LOG_DEBUG) - return FALSE + if (hit_thing) + var/atom/A = hit_thing + ai_log("test_projectile_safety() : Evaluating \the [A] ([A.type]).", AI_LOG_TRACE) + if (isliving(A)) // Don't shoot at our friends, even if they're behind the target, as RNG can make them get hit. + var/mob/living/L = A + if (holder.IIsAlly(L)) + ai_log("test_projectile_safety() : Would threaten ally, exiting with FALSE.", AI_LOG_DEBUG) + return FALSE // Don't fire if we cannot hit the primary target, and we wish to be conservative with our projectiles. // We make an exception for turf targets because manual commanded AIs targeting the floor are generally intending to fire blindly. @@ -176,37 +205,6 @@ /datum/ai_holder/proc/max_range(atom/movable/AM) return holder.ICheckRangedAttack(AM) ? 7 : 1 -// Goes to the target, to attack them. -// Called when in STANCE_APPROACH. -/datum/ai_holder/proc/walk_to_target() - ai_log("walk_to_target() : Entering.", AI_LOG_DEBUG) - // Make sure we can still chase/attack them. - if (!target || !can_attack(target)) - ai_log("walk_to_target() : Lost target.", AI_LOG_INFO) - lose_target() - return - - // Find out where we're going. - var/get_to = closest_distance(target) - var/distance = get_dist(holder, target) - ai_log("walk_to_target() : get_to is [get_to].", AI_LOG_TRACE) - - // We're here! - // Special case: Our holder has a special attack that is ranged, but normally the holder uses melee. - // If that happens, we'll switch to STANCE_FIGHT so they can use it. If the special attack is limited, they'll likely switch back next tick. - if (distance <= get_to || holder.ICheckSpecialAttack(target)) - ai_log("walk_to_target() : Within range.", AI_LOG_INFO) - forget_path() - set_stance(STANCE_FIGHT) - ai_log("walk_to_target() : Exiting.", AI_LOG_DEBUG) - return - - // Otherwise keep walking. - if (!stand_ground) - walk_path(target, get_to) - - ai_log("walk_to_target() : Exiting.", AI_LOG_DEBUG) - // Resists out of things. // Sometimes there are times you want your mob to be buckled to something, so override this for when that is needed. /datum/ai_holder/proc/handle_resist() @@ -231,6 +229,7 @@ // Sometimes the mob will try to hit something diagonally, and generally this fails. // So instead we will try two more times with some adjustments if the attack fails. var/list/directions_to_try = list( + null, // Try our own turf first dir_to_target, turn(dir_to_target, 45), turn(dir_to_target, -45) @@ -257,63 +256,74 @@ ai_log("breakthrough() : Exiting with [result].", AI_LOG_TRACE) return result +// Pry open a door, if it's unpowered/broken +/datum/ai_holder/proc/pry_door(obj/machinery/door/door) + return FALSE + // Despite the name, this can also be used to help clear a path without any destruction. /datum/ai_holder/proc/destroy_surroundings(direction, violent = TRUE) ai_log("destroy_surroundings() : Entering.", AI_LOG_TRACE) - if (!direction) - direction = pick(GLOB.cardinal) // FLAIL WILDLY - ai_log("destroy_surroundings() : No direction given, picked [direction] randomly.", AI_LOG_DEBUG) - var/turf/problem_turf = get_step(holder, direction) + // Follow a direction, otherwise destroy obstacles on our own tile. + var/turf/problem_turf = direction ? get_step(holder, direction) : get_turf(holder) // First, give peace a chance. if (!violent) ai_log("destroy_surroundings() : Going to try to peacefully clear [problem_turf].", AI_LOG_DEBUG) - for(var/obj/machinery/door/D in problem_turf) - if (D.density && holder.Adjacent(D)) - + for(var/obj/machinery/door/door in problem_turf) + if (door.density && holder.Adjacent(door)) //Try to open the door if we're allowed too. - if (D.allowed(holder) && D.operable()) + if (door.allowed(holder) && door.operable()) // First, try to open the door if possible without smashing it. We might have access. ai_log("destroy_surroundings() : Opening closed door.", AI_LOG_INFO) - return D.Bumped(holder) + return door.Bumped(holder) //Try to force the door if its broken/has no power - if (!prying && holder.can_pry && !D.operable()) - prying = TRUE - var/pry_time_holder = (D.pry_mod * holder.pry_time) - holder.pry_door(holder, pry_time_holder, D) + return pry_door(door) + + // Open any closets in the way. + for(var/obj/structure/closet/closet in problem_turf) + if (closet.density && !closet.locked && !closet.welded) + ai_log("destroy_surroundings() : Opening closed closet.", AI_LOG_INFO) + return closet.open() // Peace has failed us, can we just smash the things in the way? else ai_log("destroy_surroundings() : Going to try to violently clear [problem_turf].", AI_LOG_DEBUG) - // First, kill windows in the way. - for(var/obj/structure/window/W in problem_turf) - if (W.dir == GLOB.reverse_dir[holder.dir]) // So that windows get smashed in the right order + + // First, check for hull shields in the way. + for(var/obj/energy_field/shield in problem_turf) + if (shield.density) // Don't attack shields that are already down. + ai_log("destroy_surroundings() : Attacking hull shield.", AI_LOG_INFO) + return obstacle_attack(shield) + + for(var/obj/machinery/door/door in problem_turf) + if (door.density) + ai_log("destroy_surroundings() : Attacking closed door [door].", AI_LOG_INFO) + return obstacle_attack(door) + + // Kill windows in the way. + for(var/obj/structure/window/window in problem_turf) + if (window.dir == GLOB.reverse_dir[holder.dir]) // So that windows get smashed in the right order ai_log("destroy_surroundings() : Attacking side window.", AI_LOG_INFO) - return melee_attack(W) + return obstacle_attack(window) - else if (W.is_fulltile()) + else if (window.is_fulltile()) ai_log("destroy_surroundings() : Attacking full tile window.", AI_LOG_INFO) - return melee_attack(W) + return obstacle_attack(window) + + // Kill common obstacles in the way like tables. + for(var/obstacle_type in valid_obstacles_by_priority) + for(var/atom/obstacle in problem_turf) + if (!istype(obstacle, obstacle_type)) + continue + if (!obstacle.density) + continue + ai_log("destroy_surroundings() : Attacking obstacle [obstacle]", AI_LOG_INFO) + if (obstacle.throwpass) // If bullets would fly over it, default to melee. + return melee_attack(obstacle) + return obstacle_attack(obstacle) // Otherwise let us choose. - // Kill hull shields in the way. - for(var/obj/effect/energy_field/shield in problem_turf) - if (shield.density) // Don't attack shields that are already down. - ai_log("destroy_surroundings() : Attacking hull shield.", AI_LOG_INFO) - return melee_attack(shield) - - // Kill common obstacle in the way like tables. - for(var/obstacle in valid_obstacles_by_priority) - obstacle = locate(obstacle) in problem_turf - if (obstacle) - ai_log("destroy_surroundings() : Attacking generic structure.", AI_LOG_INFO) - return melee_attack(obstacle) - - for(var/obj/machinery/door/D in problem_turf) // Required since firelocks take up the same turf. - if (D.density) - ai_log("destroy_surroundings() : Attacking closed door.", AI_LOG_INFO) - return melee_attack(D) ai_log("destroy_surroundings() : Exiting due to nothing to attack.", AI_LOG_INFO) return ATTACK_FAILED // Nothing to attack. diff --git a/code/modules/ai/ai_holder_combat_unseen.dm b/code/modules/ai/ai_holder_combat_unseen.dm index 4455b26c988b5..e0fa00b11eece 100644 --- a/code/modules/ai/ai_holder_combat_unseen.dm +++ b/code/modules/ai/ai_holder_combat_unseen.dm @@ -11,7 +11,18 @@ else if (lose_target_time == world.time) // We last saw them next to us, so do a blind attack on that tile. melee_on_tile(target_last_seen_turf) else - find_target() + if (can_violently_breakthrough()) + if(!breakthrough(target_last_seen_turf)) + var/list/turf/search_turf_candidates = list() + for (var/turf/simulated/floor/search_turf in (range(vision_range, holder) + get_area_turfs(get_area(target_last_seen_turf)))) + search_turf_candidates += search_turf + + var/picked_turf = pick(search_turf_candidates) + ai_log("engage_unseen_enemy() : Searching for enemy at : [picked_turf]", AI_LOG_TRACE) + give_destination(picked_turf, 1, TRUE) + find_target() + else + find_target() else shoot_near_turf(target_last_seen_turf) @@ -40,4 +51,4 @@ if (holder.IIsAlly(L)) // Don't hurt our ally. return - melee_attack(L) \ No newline at end of file + melee_attack(L) diff --git a/code/modules/ai/ai_holder_communication.dm b/code/modules/ai/ai_holder_communication.dm index cb69eb3fa7d97..e14bea5db0fbd 100644 --- a/code/modules/ai/ai_holder_communication.dm +++ b/code/modules/ai/ai_holder_communication.dm @@ -32,7 +32,7 @@ threatening = TRUE last_threaten_time = world.time - if (holder.say_list?.say_threaten) + if (length(holder.say_list?.say_threaten)) holder.ISay(pick(holder.say_list.say_threaten)) playsound(holder, holder.say_list.threaten_sound, 50, 1) // We do this twice to make the sound -very- noticable to the target. playsound(target, holder.say_list.threaten_sound, 50, 1) // Actual aim-mode also does that so at least it's consistant. @@ -46,7 +46,7 @@ if (should_escalate) threatening = FALSE set_stance(STANCE_APPROACH) - if (holder.say_list?.say_escalate) + if (length(holder.say_list?.say_escalate)) holder.ISay(pick(holder.say_list.say_escalate)) else return // Wait a bit. @@ -55,7 +55,7 @@ if (last_threaten_time + threaten_timeout < world.time) // They've been gone long enough, probably safe to stand down threatening = FALSE set_stance(STANCE_IDLE) - if (holder.say_list?.say_stand_down) + if (length(holder.say_list?.say_stand_down)) holder.ISay(pick(holder.say_list.say_stand_down)) playsound(holder, holder.say_list.stand_down_sound, 50, 1) // We do this twice to make the sound -very- noticable to the target. playsound(target, holder.say_list.stand_down_sound, 50, 1) // Actual aim-mode also does that so at least it's consistant. @@ -77,44 +77,53 @@ // Temp defines to make the below code a bit more readable. #define COMM_SAY "say" +#define COMM_PREDEF_EMOTE "predef emote" #define COMM_AUDIBLE_EMOTE "audible emote" #define COMM_VISUAL_EMOTE "visual emote" +/datum/ai_holder/proc/check_listeners() + // Check if anyone is around to 'appreciate' what we say. + for(var/m in viewers(holder)) + var/mob/M = m + if (M.client) + return TRUE + return FALSE // Forever alone. No point doing anything else. + +/datum/ai_holder/proc/emote_random() + var/list/comm_types = list() // What kinds of things can we do? + if (!holder.say_list) + return + + if (length(holder.say_list?.speak)) + comm_types += COMM_SAY + if (length(holder.say_list?.emote_predef)) + comm_types += COMM_PREDEF_EMOTE + if (length(holder.say_list?.emote_hear)) + comm_types += COMM_AUDIBLE_EMOTE + if (length(holder.say_list?.emote_see)) + comm_types += COMM_VISUAL_EMOTE + + if (!length(comm_types)) + return // All the relevant lists are empty, so do nothing. + + switch(pick(comm_types)) + if (COMM_SAY) + holder.ISay(pick(holder.say_list.speak)) + if (COMM_PREDEF_EMOTE) + holder.emote(pick(holder.say_list.emote_predef)) + if (COMM_AUDIBLE_EMOTE) + holder.audible_emote(pick(holder.say_list.emote_hear)) + if (COMM_VISUAL_EMOTE) + holder.visible_emote(pick(holder.say_list.emote_see)) + +// Override this if you want non-standard idle emote behaviour. E.g., reactions to injury. /datum/ai_holder/proc/handle_idle_speaking() - if (rand(0,200) < speak_chance) - // Check if anyone is around to 'appreciate' what we say. - var/alone = TRUE - for(var/m in viewers(holder)) - var/mob/M = m - if (M.client) - alone = FALSE - break - if (alone) // Forever alone. No point doing anything else. - return - - var/list/comm_types = list() // What kinds of things can we do? - if (!holder.say_list) - return - - if (length(holder.say_list.speak)) - comm_types += COMM_SAY - if (length(holder.say_list.emote_hear)) - comm_types += COMM_AUDIBLE_EMOTE - if (length(holder.say_list.emote_see)) - comm_types += COMM_VISUAL_EMOTE - - if (!length(comm_types)) - return // All the relevant lists are empty, so do nothing. - - switch(pick(comm_types)) - if (COMM_SAY) - holder.ISay(pick(holder.say_list.speak)) - if (COMM_AUDIBLE_EMOTE) - holder.audible_emote(pick(holder.say_list.emote_hear)) - if (COMM_VISUAL_EMOTE) - holder.visible_emote(pick(holder.say_list.emote_see)) + if (!check_listeners()) + return + emote_random() #undef COMM_SAY +#undef COMM_PREDEF_EMOTE #undef COMM_AUDIBLE_EMOTE #undef COMM_VISUAL_EMOTE @@ -125,7 +134,7 @@ // This is to make responses feel a bit more natural and not instant. /datum/ai_holder/proc/delayed_say(message, mob/speak_to) - addtimer(new Callback(src, .proc/do_delayed_say, message, speak_to), rand(1 SECOND, 2 SECONDS)) + addtimer(CALLBACK(src, PROC_REF(do_delayed_say), message, speak_to), rand(1 SECOND, 2 SECONDS)) /datum/ai_holder/proc/do_delayed_say(message, mob/speak_to) if (!src || !holder || !can_act()) // We might've died/got deleted/etc in the meantime. diff --git a/code/modules/ai/ai_holder_cooperation.dm b/code/modules/ai/ai_holder_cooperation.dm index 29759b71b8628..4d48c61ee269f 100644 --- a/code/modules/ai/ai_holder_cooperation.dm +++ b/code/modules/ai/ai_holder_cooperation.dm @@ -25,6 +25,7 @@ * Call on initialization or if something weird happened like the mob switched factions. */ /datum/ai_holder/proc/build_faction_friends() + ai_log("build_faction_friends() : Entering.", AI_LOG_DEBUG) if (length(faction_friends)) // Already have a list. // Assume we're moving to a new faction. faction_friends -= src // Get us out of the current list shared by everyone else. @@ -38,9 +39,11 @@ break if (first_friend) // Joining an already established faction. + ai_log("build_faction_friends() : Joining existing faction of [length(first_friend.ai_holder.faction_friends)].", AI_LOG_DEBUG) faction_friends = first_friend.ai_holder.faction_friends faction_friends |= holder else // We're the 'founder' (first and/or only member) of this faction. + ai_log("build_faction_friends() : Founding new faction.", AI_LOG_DEBUG) faction_friends |= holder /// Requests help in combat from other mobs possessing ai_holders. @@ -49,11 +52,9 @@ if (!cooperative || world.time < next_sent_help_request || world.time < next_received_help_request) return - - ai_log("request_help() : Asking for help.", AI_LOG_INFO) next_sent_help_request = world.time + 10 SECONDS - if (!faction_friends) + if (!length(faction_friends)) build_faction_friends() for (var/mob/living/L in faction_friends) if (L == holder) // Lets not call ourselves. diff --git a/code/modules/ai/ai_holder_disabled.dm b/code/modules/ai/ai_holder_disabled.dm index 294f903734168..f4e4dc0dff7fa 100644 --- a/code/modules/ai/ai_holder_disabled.dm +++ b/code/modules/ai/ai_holder_disabled.dm @@ -29,7 +29,7 @@ return FALSE /datum/ai_holder/proc/is_confused() - return holder.confused > 0 && respect_confusion + return holder.is_confused() && respect_confusion // Called by the main loop. /datum/ai_holder/proc/handle_disabled() diff --git a/code/modules/ai/ai_holder_fleeing.dm b/code/modules/ai/ai_holder_fleeing.dm index c1e186b18a527..7606ba919b9de 100644 --- a/code/modules/ai/ai_holder_fleeing.dm +++ b/code/modules/ai/ai_holder_fleeing.dm @@ -6,8 +6,7 @@ var/dying_threshold = 0.3 // How low on health the holder needs to be before fleeing. Defaults to 30% or lower health. var/flee_when_outmatched = FALSE // If they should flee upon reaching a specific tension threshold. var/outmatched_threshold = 200 // The tension threshold needed for a mob to decide it should run away. - - + var/flee_from_allies = FALSE // Flee from allied mobs, if attacked by them /datum/ai_holder/proc/should_flee(force = FALSE) if (force) @@ -16,7 +15,7 @@ if (can_flee) if (special_flee_check()) return TRUE - if (!hostile && !retaliate) + if (!hostile) return TRUE // We're not hostile and someone attacked us first. if (flee_when_dying && (holder.health / holder.getMaxHealth()) <= dying_threshold) return TRUE // We're gonna die! @@ -31,7 +30,7 @@ /datum/ai_holder/proc/flee_from_target() ai_log("flee_from_target() : Entering.", AI_LOG_DEBUG) - if (!target || !should_flee() || !can_attack(target)) // can_attack() is used since it checks the same things we would need to anyways. + if (!target || !should_flee() || !can_see_target(target)) ai_log("flee_from_target() : Lost target to flee from.", AI_LOG_INFO) lose_target() set_stance(STANCE_IDLE) @@ -39,5 +38,5 @@ return ai_log("flee_from_target() : Stepping away.", AI_LOG_TRACE) - step_away(holder, target, vision_range) + holder.IMove(get_step_away(holder, target, vision_range)) ai_log("flee_from_target() : Exiting.", AI_LOG_DEBUG) \ No newline at end of file diff --git a/code/modules/ai/ai_holder_movement.dm b/code/modules/ai/ai_holder_movement.dm index 306765a367052..4a36606271d9e 100644 --- a/code/modules/ai/ai_holder_movement.dm +++ b/code/modules/ai/ai_holder_movement.dm @@ -12,36 +12,13 @@ // Wandering. var/wander = FALSE // If true, the mob will randomly move in the four cardinal directions when idle. var/wander_delay = 0 // How many ticks until the mob can move a tile in handle_wander_movement(). + var/wander_chance = 100 // The chance that the mob wanders in a certain direction. var/base_wander_delay = 2 // What the above var gets set to when it wanders. Note that a tick happens every half a second. var/wander_when_pulled = FALSE // If the mob will refrain from wandering if someone is pulling it. // Breakthrough var/failed_breakthroughs = 0 // How many times we've failed to breakthrough something lately -/datum/ai_holder/proc/walk_to_destination() - ai_log("walk_to_destination() : Entering.",AI_LOG_TRACE) - if (!destination) - ai_log("walk_to_destination() : No destination.", AI_LOG_WARNING) - forget_path() - set_stance(stance == STANCE_REPOSITION ? STANCE_APPROACH : STANCE_IDLE) - ai_log("walk_to_destination() : Exiting.", AI_LOG_TRACE) - return - - var/get_to = min_distance_to_destination - var/distance = get_dist(holder, destination) - ai_log("walk_to_destination() : get_to is [get_to].", AI_LOG_TRACE) - - // We're here! - if (distance <= get_to) - give_up_movement() - set_stance(stance == STANCE_REPOSITION ? STANCE_APPROACH : STANCE_IDLE) - ai_log("walk_to_destination() : Destination reached. Exiting.", AI_LOG_INFO) - return - - ai_log("walk_to_destination() : Walking.", AI_LOG_TRACE) - walk_path(destination, get_to) - ai_log("walk_to_destination() : Exiting.",AI_LOG_TRACE) - /datum/ai_holder/proc/should_go_home() if (stance != STANCE_IDLE) return FALSE @@ -77,10 +54,65 @@ ai_log("give_destination() : Exiting.", AI_LOG_DEBUG) +/datum/ai_holder/proc/walk_to_destination() + ai_log("walk_to_destination() : Entering.",AI_LOG_TRACE) + if (!destination) + ai_log("walk_to_destination() : No destination.", AI_LOG_WARNING) + forget_path() + set_stance(stance == STANCE_REPOSITION ? STANCE_APPROACH : STANCE_IDLE) + ai_log("walk_to_destination() : Exiting.", AI_LOG_TRACE) + return + + var/get_to = min_distance_to_destination + var/distance = get_dist(holder, destination) + ai_log("walk_to_destination() : get_to is [get_to].", AI_LOG_TRACE) + + // We're here! + if (distance <= get_to) + give_up_movement() + set_stance(stance == STANCE_REPOSITION ? STANCE_APPROACH : STANCE_IDLE) + ai_log("walk_to_destination() : Destination reached. Exiting.", AI_LOG_INFO) + return + + ai_log("walk_to_destination() : Walking.", AI_LOG_TRACE) + walk_path(destination, get_to) + ai_log("walk_to_destination() : Exiting.",AI_LOG_TRACE) + +// Goes to the target, to attack them. +// Called when in STANCE_APPROACH. +/datum/ai_holder/proc/walk_to_target() + ai_log("walk_to_target() : Entering.", AI_LOG_DEBUG) + // Make sure we can still chase/attack them. + if (!target || !can_attack(target)) + ai_log("walk_to_target() : Lost target.", AI_LOG_INFO) + lose_target() + return + + // Find out where we're going. + var/get_to = closest_distance(target) + var/distance = get_dist(holder, target) + ai_log("walk_to_target() : get_to is [get_to].", AI_LOG_TRACE) + + // We're here! + // Special case: Our holder has a special attack that is ranged, but normally the holder uses melee. + // If that happens, we'll switch to STANCE_FIGHT so they can use it. If the special attack is limited, they'll likely switch back next tick. + if (distance <= get_to || holder.ICheckSpecialAttack(target)) + ai_log("walk_to_target() : Within range.", AI_LOG_INFO) + forget_path() + set_stance(STANCE_FIGHT) + ai_log("walk_to_target() : Exiting.", AI_LOG_DEBUG) + return + + // Otherwise keep walking. + if (!stand_ground) + walk_path(target, get_to) + + ai_log("walk_to_target() : Exiting.", AI_LOG_DEBUG) + /// Walk towards whatever. /datum/ai_holder/proc/walk_path(atom/A, get_to = 1) - ai_log("walk_path() : Entered.", AI_LOG_TRACE) + ai_log("walk_path() : Entering.", AI_LOG_TRACE) if (use_astar) if (!length(path)) // If we're missing a path, make a new one. @@ -90,6 +122,8 @@ if (!length(path)) // If we still don't have one, then the target's probably somewhere inaccessible to us. Get as close as we can. ai_log("walk_path() : Failed to obtain path to target. Using get_step_to() instead.", AI_LOG_INFO) if (holder.IMove(get_step_to(holder, A)) == MOVEMENT_FAILED) + if (!holder.canClick()) + return ai_log("walk_path() : Failed to move, attempting breakthrough.", AI_LOG_INFO) if (!breakthrough(A) && failed_breakthroughs++ >= 5) // We failed to move, time to smash things. give_up_movement() @@ -107,23 +141,25 @@ else ai_log("walk_path() : Going to IMove().", AI_LOG_TRACE) if (holder.IMove(get_step_to(holder, A)) == MOVEMENT_FAILED ) + if (!holder.canClick()) + return ai_log("walk_path() : Failed to move, attempting breakthrough.", AI_LOG_INFO) if (!breakthrough(A) && failed_breakthroughs++ >= 5) // We failed to move, time to smash things. give_up_movement() failed_breakthroughs = 0 - ai_log("walk_path() : Exited.", AI_LOG_TRACE) + ai_log("walk_path() : Exiting.", AI_LOG_TRACE) ///Take one step along a path /datum/ai_holder/proc/move_once() - ai_log("move_once() : Entered.", AI_LOG_TRACE) + ai_log("move_once() : Entering.", AI_LOG_TRACE) if (!length(path)) return if (path_display) var/turf/T = src.path[1] - T.overlays -= path_overlay + T.CutOverlays(path_overlay) if (holder.IMove(get_step_towards(holder, src.path[1])) != MOVEMENT_ON_COOLDOWN) if (holder.loc != src.path[1]) @@ -141,10 +177,10 @@ /// Wanders randomly in cardinal directions. /datum/ai_holder/proc/handle_wander_movement() - ai_log("handle_wander_movement() : Entered.", AI_LOG_TRACE) + ai_log("handle_wander_movement() : Entering.", AI_LOG_TRACE) if (isturf(holder.loc) && can_act()) wander_delay-- - if (wander_delay <= 0) + if (wander_delay <= 0 && prob(wander_chance)) if (!wander_when_pulled && (holder.pulledby || length(holder.grabbed_by))) ai_log("handle_wander_movement() : Being pulled and cannot wander. Exiting.", AI_LOG_DEBUG) return @@ -154,7 +190,7 @@ holder.set_dir(moving_to) holder.IMove(get_step(holder, moving_to)) wander_delay = base_wander_delay - ai_log("handle_wander_movement() : Exited.", AI_LOG_TRACE) + ai_log("handle_wander_movement() : Exiting.", AI_LOG_TRACE) /mob/living/proc/set_wander_when_pulled(value) if (ai_holder) diff --git a/code/modules/ai/ai_holder_pathfinding.dm b/code/modules/ai/ai_holder_pathfinding.dm index 5eda9cd2e9ec7..ea4791000d3d1 100644 --- a/code/modules/ai/ai_holder_pathfinding.dm +++ b/code/modules/ai/ai_holder_pathfinding.dm @@ -6,7 +6,7 @@ var/use_astar = FALSE // Do we use the more expensive A* implementation or stick with BYOND's default step_to()? var/list/path = list() // A list of tiles that A* gave us as a solution to reach the target. var/list/obstacles = list() // Things A* will try to avoid. - var/astar_adjacent_proc = /turf/proc/CardinalTurfsWithAccess // Proc to use when A* pathfinding. Default makes them bound to cardinals. + var/astar_adjacent_proc = TYPE_PROC_REF(/turf, CardinalTurfsWithAccess) // Proc to use when A* pathfinding. Default makes them bound to cardinals. var/failed_steps = 0 // If move_once() fails to move the mob onto the correct tile, this increases. When it reaches 3, the path is recalc'd since they're probably stuck. // This clears the stored A* path. @@ -14,7 +14,7 @@ ai_log("forget_path() : Entering.", AI_LOG_DEBUG) if (path_display) for (var/turf/T in path) - T.overlays -= path_overlay + T.CutOverlays(path_overlay) path.Cut() ai_log("forget_path() : Exiting.", AI_LOG_DEBUG) @@ -42,14 +42,14 @@ /datum/ai_holder/proc/get_path(turf/target,get_to = 1, max_distance = world.view*6) ai_log("get_path() : Entering.",AI_LOG_DEBUG) forget_path() - var/list/new_path = AStar(get_turf(holder.loc), target, astar_adjacent_proc, /turf/proc/Distance, min_target_dist = get_to, max_node_depth = max_distance, id = holder.IGetID(), exclude = obstacles) + var/list/new_path = AStar(get_turf(holder.loc), target, astar_adjacent_proc, TYPE_PROC_REF(/turf, Distance), min_target_dist = get_to, max_node_depth = max_distance, id = holder.IGetID(), exclude = obstacles) if (new_path && length(new_path)) path = new_path ai_log("get_path() : Made new path.", AI_LOG_DEBUG) if (path_display) for(var/turf/T in path) - T.overlays |= path_overlay + T.AddOverlays(path_overlay) else ai_log("get_path() : Failed to make new path. Exiting.", AI_LOG_DEBUG) return 0 diff --git a/code/modules/ai/ai_holder_subtypes/alien_ai.dm b/code/modules/ai/ai_holder_subtypes/alien_ai.dm new file mode 100644 index 0000000000000..6eb921e9265c9 --- /dev/null +++ b/code/modules/ai/ai_holder_subtypes/alien_ai.dm @@ -0,0 +1,14 @@ +/datum/ai_holder/alien + holder_required_type = /mob/living/carbon/alien + retaliate = TRUE + returns_home = FALSE + can_flee = FALSE + speak_chance = 1 + wander = TRUE + base_wander_delay = 4 + +/datum/ai_holder/alien/passive + retaliate = FALSE + can_flee = TRUE + flee_from_allies = TRUE + violent_breakthrough = FALSE diff --git a/code/modules/ai/ai_holder_subtypes/human_ai.dm b/code/modules/ai/ai_holder_subtypes/human_ai.dm new file mode 100644 index 0000000000000..c89bbe0da587c --- /dev/null +++ b/code/modules/ai/ai_holder_subtypes/human_ai.dm @@ -0,0 +1,7 @@ +/datum/ai_holder/human + holder_required_type = /mob/living/carbon/human + intelligence_level = AI_SMART + cooperative = TRUE + speak_chance = 1 + wander = TRUE + base_wander_delay = 4 diff --git a/code/modules/ai/aI_holder_subtypes/simple_mob_ai.dm b/code/modules/ai/ai_holder_subtypes/simple_mob_ai.dm similarity index 93% rename from code/modules/ai/aI_holder_subtypes/simple_mob_ai.dm rename to code/modules/ai/ai_holder_subtypes/simple_mob_ai.dm index a4340e28949cf..f2ceac254afd8 100644 --- a/code/modules/ai/aI_holder_subtypes/simple_mob_ai.dm +++ b/code/modules/ai/ai_holder_subtypes/simple_mob_ai.dm @@ -2,6 +2,7 @@ // Mob-specific AIs are in their mob's file. /datum/ai_holder/simple_animal + holder_required_type = /mob/living/simple_animal hostile = TRUE // The majority of simplemobs are hostile. retaliate = TRUE // The majority of simplemobs will fight back. cooperative = TRUE @@ -11,11 +12,23 @@ wander = TRUE base_wander_delay = 4 +/datum/ai_holder/simple_animal/pry_door(obj/machinery/door/door) + . = FALSE + if (door.operable()) + return FALSE + + var/mob/living/simple_animal/holder_simple = holder + if (!prying && holder_simple.can_pry) + prying = TRUE + var/pry_time_holder = (door.pry_mod * holder_simple.pry_time) + return holder_simple.pry_door(holder_simple, pry_time_holder, door) + // For non-hostile animals, and pets like Ian and Runtime. /datum/ai_holder/simple_animal/passive hostile = FALSE retaliate = FALSE can_flee = TRUE + flee_from_allies = TRUE violent_breakthrough = FALSE // Won't wander away as quickly, ideal for event-spawned mobs like carp or drones. diff --git a/code/modules/ai/ai_holder_targeting.dm b/code/modules/ai/ai_holder_targeting.dm index 886a789185085..41a99e8945e60 100644 --- a/code/modules/ai/ai_holder_targeting.dm +++ b/code/modules/ai/ai_holder_targeting.dm @@ -2,9 +2,9 @@ /datum/ai_holder var/hostile = FALSE // Do we try to hurt others? - var/retaliate = FALSE // Attacks whatever struck it first. Mobs will still attack back if this is false but hostile is true. + var/retaliate = TRUE // Attacks whatever struck it first. Mobs will still attack back if this is false but hostile is true. var/mauling = FALSE // Attacks unconscious mobs - var/handle_corpse = FALSE // Allows AI to acknowledge corpses (e.g. nurse spiders) + var/handle_corpse = FALSE // Allows AI to acknowledge corpses (e.g. nurse spiders) var/atom/movable/target = null // The thing (mob or object) we're trying to kill. var/atom/movable/preferred_target = null// If set, and if given the chance, we will always prefer to target this over other options. @@ -15,7 +15,7 @@ var/alpha_vision_threshold = FAKE_INVIS_ALPHA_THRESHOLD // Targets with an alpha less or equal to this will be considered invisible. Requires above var to be true. var/lose_target_time = 0 // world.time when a target was lost. - var/lose_target_timeout = 5 SECONDS // How long until a mob 'times out' and stops trying to find the mob that disappeared. + var/lose_target_timeout = 15 SECONDS // How long until a mob 'times out' and stops trying to find the mob that disappeared. var/list/attackers = list() // List of strings of names of people who attacked us before in our life. // This uses strings and not refs to allow for disguises, and to avoid needing to use weakrefs. @@ -26,17 +26,19 @@ /// Step 1, find out what we can see. /datum/ai_holder/proc/list_targets() . = ohearers(vision_range, holder) - . -= GLOB.dview_mob // Not the dview mob! + . -= global.dview_mob // Not the dview mob! - var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /mob/living/exosuit, /obj/effect/blob)) - - for (var/HM in typecache_filter_list(range(vision_range, holder), hostile_machines)) + for (var/HM in range(vision_range, holder)) + if (!(istype(HM, /obj/machinery/porta_turret) || \ + istype(HM, /mob/living/exosuit) || \ + istype(HM, /obj/blob))) + continue if (can_see(holder, HM, vision_range)) . += HM /// Step 2, filter down possible targets to things we actually care about. /datum/ai_holder/proc/find_target(list/possible_targets, has_targets_list = FALSE) - ai_log("find_target() : Entered.", AI_LOG_TRACE) + ai_log("find_target() : Entering.", AI_LOG_TRACE) if (!hostile) // So retaliating mobs only attack the thing that hit it. return null . = list() @@ -69,15 +71,17 @@ /// Step 4, give us our selected target. /datum/ai_holder/proc/give_target(new_target, urgent = FALSE) ai_log("give_target() : Given '[new_target]', urgent=[urgent].", AI_LOG_TRACE) + var/old_target = target target = new_target if (target != null) lose_target_time = 0 track_target_position() - if (should_threaten() && !urgent) - set_stance(STANCE_ALERT) - else - set_stance(STANCE_FIGHT) + if (old_target != new_target) + if (should_threaten() && !urgent) + set_stance(STANCE_ALERT) + else + set_stance(STANCE_FIGHT) last_target_time = world.time return TRUE @@ -109,18 +113,18 @@ closest_targets += A return closest_targets -/datum/ai_holder/proc/can_attack(atom/movable/the_target, vision_required = TRUE) - if (!can_see_target(the_target) && vision_required) - return FALSE - - if (isliving(the_target)) - var/mob/living/L = the_target +// For checking "hard loss" of a target, or whether the target is still valid (e.g. leave SSD players alone) +/datum/ai_holder/proc/can_pursue(atom/movable/target) + ai_log("can_pursue() : Entering.", AI_LOG_TRACE) + if (isliving(target)) + var/mob/living/L = target if (ishuman(L) || issilicon(L)) if (L.key && !L.client) // SSD players get a pass return FALSE if (L.status_flags & NOTARGET) return FALSE + if (L.stat) if (L.stat == DEAD && !handle_corpse) // Leave dead things alone return FALSE @@ -129,31 +133,39 @@ return TRUE else return FALSE + if (holder.IIsAlly(L)) return FALSE return TRUE - if (istype(the_target, /mob/living/exosuit)) - var/mob/living/exosuit/M = the_target + if (istype(target, /mob/living/exosuit)) + var/mob/living/exosuit/M = target for (var/mob/pilot in M.pilots) return can_attack(pilot) return destructive // Empty mechs are 'neutral'. - if (istype(the_target, /obj/machinery/porta_turret)) - var/obj/machinery/porta_turret/P = the_target + if (istype(target, /obj/machinery/porta_turret)) + var/obj/machinery/porta_turret/P = target if (MACHINE_IS_BROKEN(P)) return FALSE // Already dead. if (!(P.assess_living(holder))) return FALSE // Don't shoot allied turrets. if (!P.raised && !P.raising) return FALSE // Turrets won't get hurt if they're still in their cover. - return TRUE - return TRUE +// For checking "soft loss" of a target. Some mobs can chase after a target if they cannot immediately see it. +/datum/ai_holder/proc/can_attack(atom/movable/target, vision_required = TRUE) + ai_log("can_attack() : Entering.", AI_LOG_TRACE) + if (vision_required && !can_see_target(target)) + return FALSE + return can_pursue(target) + /// 'Soft' loss of target. They may still exist, we still have some info about them maybe. /datum/ai_holder/proc/lose_target() ai_log("lose_target() : Entering.", AI_LOG_TRACE) + + var/atom/movable/old_target = target if (target) ai_log("lose_target() : Had a target, setting to null and LTT.", AI_LOG_DEBUG) target = null @@ -161,7 +173,7 @@ give_up_movement() - if (target_last_seen_turf && intelligence_level >= AI_SMART) + if ((!old_target || !can_see_target(old_target)) && target_last_seen_turf && intelligence_level >= AI_NORMAL) ai_log("lose_target() : Going into 'engage unseen enemy' mode.", AI_LOG_INFO) engage_unseen_enemy() return TRUE //We're still working on it @@ -182,30 +194,30 @@ set_stance(STANCE_IDLE) /// Check if target is visible to us. -/datum/ai_holder/proc/can_see_target(atom/movable/the_target, view_range = vision_range) +/datum/ai_holder/proc/can_see_target(atom/movable/target, view_range = vision_range) ai_log("can_see_target() : Entering.", AI_LOG_TRACE) - if (!the_target) // Nothing to target. + if (!target) // Nothing to target. ai_log("can_see_target() : There is no target. Exiting.", AI_LOG_WARNING) return FALSE - if (holder.see_invisible < the_target.invisibility) // Real invis. - ai_log("can_see_target() : Target ([the_target]) was invisible to holder. Exiting.", AI_LOG_TRACE) + if (holder.see_invisible < target.invisibility) // Real invis. + ai_log("can_see_target() : Target ([target]) was invisible to holder. Exiting.", AI_LOG_TRACE) return FALSE - if (respect_alpha && the_target.alpha <= alpha_vision_threshold) // Fake invis. - ai_log("can_see_target() : Target ([the_target]) was sufficently transparent to holder and is hidden. Exiting.", AI_LOG_TRACE) + if (respect_alpha && target.alpha <= alpha_vision_threshold) // Fake invis. + ai_log("can_see_target() : Target ([target]) was sufficently transparent to holder and is hidden. Exiting.", AI_LOG_TRACE) return FALSE - if (get_dist(holder, the_target) > view_range) // Too far away. - ai_log("can_see_target() : Target ([the_target]) was too far from holder. Exiting.", AI_LOG_TRACE) + if (get_dist(holder, target) > view_range) // Too far away. + ai_log("can_see_target() : Target ([target]) was too far from holder. Exiting.", AI_LOG_TRACE) return FALSE - if (!can_see(holder, the_target, view_range)) - ai_log("can_see_target() : Target ([the_target]) failed can_see(). Exiting.", AI_LOG_TRACE) + if (!can_see(holder, target, view_range)) + ai_log("can_see_target() : Target ([target]) failed can_see(). Exiting.", AI_LOG_TRACE) return FALSE - ai_log("can_see_target() : Target ([the_target]) can be seen. Exiting.", AI_LOG_TRACE) + ai_log("can_see_target() : Target ([target]) can be seen. Exiting.", AI_LOG_TRACE) return TRUE /// Updates the last known position of the target. @@ -214,17 +226,17 @@ lose_target_position() if (last_turf_display && target_last_seen_turf) - target_last_seen_turf.overlays -= last_turf_overlay + target_last_seen_turf.CutOverlays(last_turf_overlay) target_last_seen_turf = get_turf(target) if (last_turf_display) - target_last_seen_turf.overlays += last_turf_overlay + target_last_seen_turf.AddOverlays(last_turf_overlay) /// Resets the last known position to null. /datum/ai_holder/proc/lose_target_position() if (last_turf_display && target_last_seen_turf) - target_last_seen_turf.overlays -= last_turf_overlay + target_last_seen_turf.CutOverlays(last_turf_overlay) ai_log("lose_target_position() : Last position is being reset.", AI_LOG_INFO) target_last_seen_turf = null @@ -233,10 +245,10 @@ if (holder.stat) // We're dead. ai_log("react_to_attack() : Was attacked by [attacker], but we are dead/unconscious.", AI_LOG_TRACE) return FALSE - if (!hostile && !retaliate) // Not allowed to defend ourselves. + if (!hostile && !retaliate && !can_flee) // Not allowed to defend ourselves. ai_log("react_to_attack() : Was attacked by [attacker], but we are not allowed to attack back.", AI_LOG_TRACE) return FALSE - if (holder.IIsAlly(attacker)) // I'll overlook it THIS time... + if (!flee_from_allies && holder.IIsAlly(attacker)) // I'll overlook it THIS time... ai_log("react_to_attack() : Was attacked by [attacker], but they were an ally.", AI_LOG_TRACE) return FALSE if (target) // Already fighting someone. Switching every time we get hit would impact our combat performance. @@ -260,6 +272,8 @@ /// Sets a few vars so mobs that threaten will react faster to an attacker or someone who attacked them before. /datum/ai_holder/proc/on_attacked(atom/movable/AM) last_conflict_time = world.time + if (retaliate) + preferred_target = AM add_attacker(AM) /// Checks to see if an atom attacked us lately diff --git a/code/modules/ai/interfaces.dm b/code/modules/ai/interfaces.dm index b802b1f435862..4a96dfe0f82f9 100644 --- a/code/modules/ai/interfaces.dm +++ b/code/modules/ai/interfaces.dm @@ -13,8 +13,12 @@ /mob/living/carbon/human/IAttack(atom/A) if (!canClick()) // Still on cooldown from a "click". - return FALSE - return ClickOn(A) // Except this is an actual fake "click". + return ATTACK_ON_COOLDOWN + if (!zone_sel) + zone_sel = new /obj/screen/zone_sel(null) + zone_sel.selecting = BP_CHEST + ClickOn(A) // Except this is an actual fake "click". + return TRUE /mob/living/proc/IRangedAttack(atom/A) return FALSE @@ -84,7 +88,7 @@ if (safety && !newloc.is_safe_to_enter(src)) return MOVEMENT_FAILED - if (!check_solid_ground() && !Allow_Spacemove()) + if (!Process_Spacemove()) return MOVEMENT_FAILED // Move()ing to another tile successfully returns 32 because BYOND. Would rather deal with TRUE/FALSE-esque terms. diff --git a/code/modules/ai/say_list.dm b/code/modules/ai/say_list.dm index e746a106b4437..f60bd450402a6 100644 --- a/code/modules/ai/say_list.dm +++ b/code/modules/ai/say_list.dm @@ -21,7 +21,8 @@ /datum/say_list var/list/speak = list() // Things the mob might say if it talks while idle. - var/list/emote_hear = list() // Hearable emotes it might perform + var/list/emote_predef = list() // Preset emotes that use /singleton/emote/ + var/list/emote_hear = list() // Custom hearable emotes it might perform var/list/emote_see = list() // Unlike speak_emote, the list of things in this variable only show by themselves with no spoken text. IE: Ian barks, Ian yaps var/list/say_understood = list() // When accepting an order. @@ -41,7 +42,7 @@ -// Subtypes. +// Example Subtypes. // This one's pretty dumb, but pirates are dumb anyways and it makes for a good test. /datum/say_list/pirate @@ -111,7 +112,7 @@ /* For Meatbag */ /datum/say_list/parrot/heist - speak = list("Yaaar!","Squaaak!","Fight me Matey!","BAWWWWK Vox trying to eat me!") + speak = list("Yaaar!","Squaaak!","Fight me Matey!","BAWWWWK Vox trying to eat me!") /datum/say_list/thoom - speak = list("Q'moo","Q'mooooo","Q'rrrr","Q'emb") \ No newline at end of file + speak = list("Q'moo","Q'mooooo","Q'rrrr","Q'emb") diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm index 105394a29c589..43840ee1097f5 100644 --- a/code/modules/alarm/alarm.dm +++ b/code/modules/alarm/alarm.dm @@ -63,7 +63,7 @@ /datum/alarm/proc/alarm_z() if(origin) - last_z_level = origin.get_alarm_z(origin) + last_z_level = get_z(origin) return last_z_level /datum/alarm/proc/alarm_area() @@ -91,7 +91,8 @@ // The list of cameras is also reset by /proc/invalidateCameraCache() if(!cameras) - cameras = origin ? origin.get_alarm_cameras() : last_area.get_alarm_cameras() + var/area/target_area = origin ? get_area(origin) : last_area + cameras = target_area.get_cameras() last_camera_area = last_area return cameras @@ -103,21 +104,6 @@ return max_severity -/****************** -* Assisting procs * -******************/ -/** - * Determines the alarm's z-level. - * - * TODO: Possibly redundant. Check how areas respond to `get_z()` and potentially just replace this call with that. - * - * Returns integer. - */ -/atom/proc/get_alarm_z() - return get_z(src) - -/area/get_alarm_z() - return length(contents) ? get_z(contents[1]) : 0 /** * Retrieves the atom's area for alarms. @@ -159,18 +145,4 @@ /obj/machinery/camera/get_source_name() return c_tag -/** - * Retrieves a list of cameras from the atom's area. - * - * TODO: Redundant. Replace with `get_area()` and `get_cameras()`. - * - * Returns list (Instances of `/obj/machinery/camera`). All cameras in the atom's area. - */ -/atom/proc/get_alarm_cameras() - var/area/A = get_area(src) - return A.get_cameras() - -/area/get_alarm_cameras() - return get_cameras() - #undef ALARM_RESET_DELAY diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index ecbc4fea85685..0b13dd938188b 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -32,7 +32,7 @@ /obj/item/device/assembly/proc/pulse(radio = 0) //Called when this device attempts to act on another device, radio determines if it was sent via radio or direct return -/obj/item/device/assembly/proc/toggle_secure() //Code that has to happen when the assembly is un\secured goes here +/obj/item/device/assembly/proc/set_secure(make_secure = FALSE) //Code that has to happen when the assembly is un\secured goes here return /obj/item/device/assembly/proc/attach_assembly(obj/A, mob/user) //Called when an assembly is attacked by another @@ -82,35 +82,62 @@ return 1 -/obj/item/device/assembly/toggle_secure() - secured = !secured - update_icon() +/obj/item/device/assembly/set_secure(make_secure) + if (make_secure == secured) + return + else + secured = make_secure + update_icon() return secured - -/obj/item/device/assembly/attach_assembly(obj/item/device/assembly/A, mob/user) - holder = new/obj/item/device/assembly_holder(get_turf(src)) - if(holder.attach(A,src,user)) - to_chat(user, SPAN_NOTICE("You attach \the [A] to \the [src]!")) - return 1 - return 0 - - -/obj/item/device/assembly/attackby(obj/item/W as obj, mob/user as mob) - if(isassembly(W)) - var/obj/item/device/assembly/A = W - if((!A.secured) && (!secured)) - attach_assembly(A,user) - return - if(isScrewdriver(W)) - if(toggle_secure()) - to_chat(user, SPAN_NOTICE("\The [src] is ready!")) - else - to_chat(user, SPAN_NOTICE("\The [src] can now be attached!")) +/obj/item/device/assembly/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - ..() - return - + set_secure(!secured) + user.visible_message( + SPAN_NOTICE("[user] adjusts [src] with [tool]."), + SPAN_NOTICE("You adjust [src] with [tool]. It [secured ? "is now ready to use" : "can now be taken apart"].") + ) + +/obj/item/device/assembly/use_tool(obj/item/tool, mob/user, list/click_params) + // Assembly - Attach assembly + if (isassembly(tool)) + if (!user.canUnEquip(tool)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + if (!user.canUnEquip(src)) + FEEDBACK_UNEQUIP_FAILURE(user, src) + return TRUE + if (secured) + USE_FEEDBACK_FAILURE("[src] is not ready to be modified or attached.") + return TRUE + var/obj/item/device/assembly/assembly = tool + if (assembly.secured) + USE_FEEDBACK_FAILURE("[tool] is not ready to be modified or attached.") + return TRUE + user.unEquip(src) + user.unEquip(tool) + holder = new /obj/item/device/assembly_holder(get_turf(src)) + forceMove(holder) + transfer_fingerprints_to(holder) + assembly.holder = holder + tool.forceMove(holder) + tool.transfer_fingerprints_to(holder) + holder.a_left = src + holder.a_right = tool + holder.SetName("[name]-[tool.name] assembly") + holder.update_icon() + user.put_in_hands(holder) + set_secure(TRUE) + assembly.set_secure(TRUE) + user.visible_message( + SPAN_NOTICE("[user] attaches [tool] to [src]."), + SPAN_NOTICE("You attach [tool] to [src]."), + range = 3 + ) + return TRUE + return ..() /obj/item/device/assembly/Process() return PROCESS_KILL @@ -120,9 +147,9 @@ . = ..() if(distance <= 1 || loc == user) if(secured) - to_chat(user, "\The [src] is ready!") + . += SPAN_NOTICE("[src] is ready!") else - to_chat(user, "\The [src] can be attached!") + . += SPAN_NOTICE("[src] can be attached!") /obj/item/device/assembly/attack_self(mob/user as mob) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index a76dfa37ca534..a745f07e7d152 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -31,38 +31,16 @@ return 1 -/obj/item/device/assembly_holder/attach(obj/item/device/assembly/D, obj/item/device/assembly/D2, mob/user) - if((!D)||(!D2)) - return 0 - if((!istype(D))||(!istype(D2))) - return 0 - if((D.secured)||(D2.secured)) - return 0 - if(user) - user.drop_from_inventory(D) - user.drop_from_inventory(D2) - D.holder = src - D2.holder = src - D.forceMove(src) - D2.forceMove(src) - a_left = D - a_right = D2 - SetName("[D.name]-[D2.name] assembly") - update_icon() - usr.put_in_hands(src) - return 1 - - /obj/item/device/assembly_holder/on_update_icon() - overlays.Cut() + ClearOverlays() if(a_left) - overlays += "[a_left.icon_state]_left" + AddOverlays("[a_left.icon_state]_left") for(var/O in a_left.attached_overlays) - overlays += "[O]_l" + AddOverlays("[O]_l") if(a_right) - overlays += "[a_right.icon_state]_right" + AddOverlays("[a_right.icon_state]_right") for(var/O in a_right.attached_overlays) - overlays += "[O]_r" + AddOverlays("[O]_r") if(master) master.update_icon() @@ -112,21 +90,19 @@ return -/obj/item/device/assembly_holder/attackby(obj/item/W as obj, mob/user as mob) - if(isScrewdriver(W)) - if(!a_left || !a_right) - to_chat(user, SPAN_WARNING("BUG:Assembly part missing, please report this!")) - return - a_left.toggle_secure() - a_right.toggle_secure() - secured = !secured - if(secured) - to_chat(user, SPAN_NOTICE("\The [src] is ready!")) - else - to_chat(user, SPAN_NOTICE("\The [src] can now be taken apart!")) - update_icon() +/obj/item/device/assembly_holder/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - ..() + // Screwdriver - Toggle secured + a_left.set_secure(TRUE) + a_right.set_secure(TRUE) + secured = !secured + update_icon() + user.visible_message( + SPAN_NOTICE("[user] adjusts [src] with [tool]."), + SPAN_NOTICE("You adjust [src] with [tool]. It [secured ? "is now ready to use" : "can now be taken apart"].") + ) /obj/item/device/assembly_holder/attack_self(mob/user as mob) @@ -194,7 +170,7 @@ . = ..() if (distance > 1) return - to_chat(user, "\The [src] is [secured ? "ready": "not secured"]!") + . += SPAN_NOTICE("[src] is [secured ? "ready": "not secured"]!") /obj/item/device/assembly_holder/timer_igniter diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index f0dc0457eba6f..66ecf0601763e 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -24,7 +24,7 @@ if (tank && tank.modded) tank.explode() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread s.set_up(3, 1, src) s.start() @@ -35,3 +35,7 @@ activate() add_fingerprint(user) return + + +/obj/item/device/assembly/igniter/IsFlameSource() + return TRUE diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index c54e54c17639c..ed0923c1f7fe0 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -20,7 +20,7 @@ ..() beams = list() seen_turfs = list() - proximity_trigger = new(src, /obj/item/device/assembly/infra/proc/on_beam_entered, /obj/item/device/assembly/infra/proc/on_visibility_change, world.view, PROXIMITY_EXCLUDE_HOLDER_TURF) + proximity_trigger = new(src, TYPE_PROC_REF(/obj/item/device/assembly/infra, on_beam_entered), TYPE_PROC_REF(/obj/item/device/assembly/infra, on_visibility_change), world.view, PROXIMITY_EXCLUDE_HOLDER_TURF) /obj/item/device/assembly/infra/Destroy() qdel(proximity_trigger) @@ -44,15 +44,15 @@ proximity_trigger.unregister_turfs() update_icon() -/obj/item/device/assembly/infra/toggle_secure() - secured = !secured +/obj/item/device/assembly/infra/set_secure(make_secure) + ..() set_active(secured ? FALSE : on) return secured /obj/item/device/assembly/infra/on_update_icon() - overlays.Cut() + ClearOverlays() if(on) - overlays += "infrared_on" + AddOverlays("infrared_on") if(holder) holder.update_icon() update_beams() @@ -125,7 +125,7 @@ var/list/turfs_that_need_beams = seen_turfs.Copy() for(var/b in existing_beams) - var/obj/effect/beam/ir_beam/beam = b + var/obj/beam/ir_beam/beam = b if(beam.loc in turfs_that_need_beams) turfs_that_need_beams -= beam.loc beam.set_invisibility(visible ? 0 : INVISIBILITY_MAXIMUM) @@ -137,11 +137,11 @@ return for(var/t in turfs_that_need_beams) - var/obj/effect/beam/ir_beam/beam = new(t) + var/obj/beam/ir_beam/beam = new(t) existing_beams += beam beam.set_dir(dir) -/obj/effect/beam/ir_beam +/obj/beam/ir_beam name = "ir beam" icon = 'icons/obj/projectiles.dmi' icon_state = "ibeam" diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index abeb11bf701ed..f36f7ebb116b8 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -9,7 +9,7 @@ /obj/item/device/assembly/mousetrap/examine(mob/user) . = ..() if(armed) - to_chat(user, "It looks like it's armed.") + . += SPAN_NOTICE("It looks like it's armed.") /obj/item/device/assembly/mousetrap/on_update_icon() if(armed) @@ -57,7 +57,7 @@ which_hand = BP_R_HAND triggered(user, which_hand) user.visible_message(SPAN_WARNING("[user] accidentally sets off [src], breaking their fingers."), \ - SPAN_WARNING("You accidentally trigger [src]!")) + SPAN_WARNING("You accidentally trigger [src]!")) return to_chat(user, SPAN_NOTICE("You disarm [src].")) armed = !armed @@ -73,7 +73,7 @@ which_hand = BP_R_HAND triggered(user, which_hand) user.visible_message(SPAN_WARNING("[user] accidentally sets off [src], breaking their fingers."), \ - SPAN_WARNING("You accidentally trigger [src]!")) + SPAN_WARNING("You accidentally trigger [src]!")) return ..() diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index a3a19d5e1b94a..6eecee9bcf8df 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -26,8 +26,8 @@ return 0 -/obj/item/device/assembly/prox_sensor/toggle_secure() - secured = !secured +/obj/item/device/assembly/prox_sensor/set_secure(make_secure) + ..() if(secured) START_PROCESSING(SSobj, src) else @@ -41,7 +41,7 @@ /obj/item/device/assembly/prox_sensor/HasProximity(atom/movable/movable) if (ismob(movable) && !isliving(movable)) return - if (istype(movable, /obj/effect/beam)) + if (istype(movable, /obj/beam)) return if (movable.move_speed < 12) sense() @@ -92,13 +92,13 @@ /obj/item/device/assembly/prox_sensor/on_update_icon() - overlays.Cut() + ClearOverlays() attached_overlays = list() if(timing) - overlays += "prox_timing" + AddOverlays("prox_timing") attached_overlays += "prox_timing" if(scanning) - overlays += "prox_scanning" + AddOverlays("prox_scanning") attached_overlays += "prox_scanning" if(holder) holder.update_icon() diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index d20dbe69e4d78..a51098245f831 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -14,21 +14,27 @@ ..() return -/obj/item/assembly/shock_kit/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W) && !status) - part1.dropInto(loc) - part2.dropInto(loc) - part1.master = null - part2.master = null - part1 = null - part2 = null - qdel(src) +/obj/item/assembly/shock_kit/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - if(isScrewdriver(W)) - status = !status - to_chat(user, SPAN_NOTICE("[src] is now [status ? "secured" : "unsecured"]!")) + status = !status + to_chat(user, SPAN_NOTICE("[src] is now [status ? "secured" : "unsecured"]!")) add_fingerprint(user) - return + +/obj/item/assembly/shock_kit/wrench_act(mob/living/user, obj/item/tool) + if(status) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + part1.dropInto(loc) + part2.dropInto(loc) + part1.master = null + part2.master = null + part1 = null + part2 = null + qdel(src) /obj/item/assembly/shock_kit/attack_self(mob/user as mob) part1.attack_self(user, status) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index ea475cc8bc9dc..2f1397e0e39cd 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -103,14 +103,6 @@ signal.data["message"] = "ACTIVATE" radio_connection.post_signal(src, signal) return -/* - for(var/obj/item/device/assembly/signaler/S in world) - if(!S) continue - if(S == src) continue - if((S.frequency == src.frequency) && (S.code == src.code)) - spawn(0) - if(S) S.pulse(0) - return 0*/ /obj/item/device/assembly/signaler/pulse(radio = 0) diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index fd78a1a146501..e423fb10ba881 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -24,8 +24,8 @@ return 0 -/obj/item/device/assembly/timer/toggle_secure() - secured = !secured +/obj/item/device/assembly/timer/set_secure(make_secure) + ..() if(secured) START_PROCESSING(SSobj, src) else @@ -58,10 +58,10 @@ /obj/item/device/assembly/timer/on_update_icon() - overlays.Cut() + ClearOverlays() attached_overlays = list() if(timing) - overlays += "timer_timing" + AddOverlays("timer_timing") attached_overlays += "timer_timing" if(holder) holder.update_icon() diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 9ba8a21ce439e..da29c710d6f8b 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -39,6 +39,6 @@ return 1 -/obj/item/device/assembly/voice/toggle_secure() +/obj/item/device/assembly/voice/set_secure(make_secure) . = ..() listening = 0 diff --git a/code/modules/asset_cache/asset_cache_client.dm b/code/modules/asset_cache/asset_cache_client.dm new file mode 100644 index 0000000000000..7a8ce0113c1f3 --- /dev/null +++ b/code/modules/asset_cache/asset_cache_client.dm @@ -0,0 +1,57 @@ +/client + // List of all asset filenames sent to this client by the asset cache, along with their assoicated md5s + var/list/sent_assets = list() + /// List of all completed blocking send jobs awaiting acknowledgement by send_asset + var/list/completed_asset_jobs = list() + /// Last asset send job id. + var/last_asset_job = 0 + var/last_completed_asset_job = 0 + +/// Process asset cache client topic calls for "asset_cache_confirm_arrival=[INT]" +/client/proc/asset_cache_confirm_arrival(job_id) + var/asset_cache_job = round(text2num(job_id)) + + // because we skip the limiter, we have to make sure this is a valid arrival and + // not somebody tricking us into letting them append to a list without limit. + if (asset_cache_job > 0 && asset_cache_job <= last_asset_job && !(completed_asset_jobs["[asset_cache_job]"])) + completed_asset_jobs["[asset_cache_job]"] = TRUE + last_completed_asset_job = max(last_completed_asset_job, asset_cache_job) + else + return asset_cache_job || TRUE + + +/// Process asset cache client topic calls for "asset_cache_preload_data=[HTML+JSON_STRING] +/client/proc/asset_cache_preload_data(data) + var/json = data + var/list/preloaded_assets = json_decode(json) + + for (var/preloaded_asset in preloaded_assets) + if (copytext(preloaded_asset, findlasttext(preloaded_asset, ".") + 1) in list("js", "jsm", "htm", "html")) + preloaded_assets -= preloaded_asset + continue + sent_assets |= preloaded_assets + + +/// Updates the client side stored html/json combo file used to keep track of what assets the client has between restarts/reconnects. +/client/proc/asset_cache_update_json(verify = FALSE, list/new_assets = list()) + if (world.time - connection_time < 10 SECONDS) //don't override the existing data file on a new connection + return + if (!islist(new_assets)) + new_assets = list("[new_assets]" = md5(SSassets.cache[new_assets])) + + show_browser(src, json_encode(new_assets|sent_assets), "file=asset_data.json&display=0") + +/// Blocks until all currently sending browser assets have been sent. +/// Due to byond limitations, this proc will sleep for 1 client round trip even if the client has no pending asset sends. +/// This proc will return an untrue value if it had to return before confirming the send, such as timeout or the client going away. +/client/proc/browse_queue_flush(timeout = 50) + var/job = ++last_asset_job + var/t = 0 + var/timeout_time = timeout + show_browser(src, {""}, "window=asset_cache_browser") + + while(!completed_asset_jobs["[job]"] && t < timeout_time) // Reception is handled in Topic() + stoplag(1) // Lock up the caller until this is received. + t++ + if (t < timeout_time) + return TRUE diff --git a/code/modules/asset_cache/asset_cache_item.dm b/code/modules/asset_cache/asset_cache_item.dm new file mode 100644 index 0000000000000..e1d4d019c2ac6 --- /dev/null +++ b/code/modules/asset_cache/asset_cache_item.dm @@ -0,0 +1,41 @@ +/** + * # asset_cache_item + * + * An internal datum containing info on items in the asset cache. Mainly used to cache md5 info for speed. +**/ +/datum/asset_cache_item + /// the name of this asset item, becomes the key in SSassets.cache list + var/name + /// md5() of the file this asset item represents. + var/hash + /// the file this asset represents + var/resource + /// our file extension e.g. .png, .gif, etc + var/ext = "" + /// Should this file also be sent via the legacy browse_rsc system + /// when cdn transports are enabled? + var/legacy = FALSE + /// Used by the cdn system to keep legacy css assets with their parent + /// css file. (css files resolve urls relative to the css file, so the + /// legacy system can't be used if the css file itself could go out over + /// the cdn) + var/namespace = null + /// True if this is the parent css or html file for an asset's namespace + var/namespace_parent = FALSE + /// TRUE for keeping local asset names when browse_rsc backend is used + var/keep_local_name = FALSE + +/datum/asset_cache_item/New(name, file) + if(!isfile(file)) + file = fcopy_rsc(file) + hash = md5(file) + if(!hash) + hash = md5(fcopy_rsc(file)) + if(!hash) + CRASH("invalid asset sent to asset cache") + log_debug("asset cache unexpected success of second fcopy_rsc") + src.name = name + var/extstart = findlasttext(name, ".") + if(extstart) + ext = ".[copytext(name, extstart+1)]" + resource = file diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm new file mode 100644 index 0000000000000..62c8d334ede88 --- /dev/null +++ b/code/modules/asset_cache/asset_list.dm @@ -0,0 +1,360 @@ +//These datums are used to populate the asset cache, the proc "register()" does this. +//Place any asset datums you create in asset_list_items.dm + +//all of our asset datums, used for referring to these later +GLOBAL_LIST_EMPTY(asset_datums) + +//get an assetdatum or make a new one +/proc/get_asset_datum(type) + return GLOB.asset_datums[type] || new type() + +/datum/asset + var/_abstract = /datum/asset + +/datum/asset/New() + GLOB.asset_datums[type] = src + register() + +/datum/asset/proc/get_url_mappings() + return list() + +/datum/asset/proc/register() + return + +/datum/asset/proc/send(client) + return + + +//If you don't need anything complicated. +/datum/asset/simple + _abstract = /datum/asset/simple + /// List of assets for this datum in the form of asset_filename = asset_file. At runtime the asset_file will be converted into a asset_cache datum + var/assets = list() + /// Set to true to have this asset also be sent via browse_rsc when cdn asset transports are enabled + var/legacy = FALSE + /// TRUE for keeping local asset names when browse_rsc backend is used + var/keep_local_name = FALSE + +/datum/asset/simple/register() + for(var/asset_name in assets) + var/datum/asset_cache_item/ACI = SSassets.transport.register_asset(asset_name, assets[asset_name]) + if(!ACI) + log_debug("ERROR: Invalid asset: [type]:[asset_name]:[ACI]") + continue + if(legacy) + ACI.legacy = TRUE + if(keep_local_name) + ACI.keep_local_name = keep_local_name + assets[asset_name] = ACI + +/datum/asset/simple/send(client) + . = SSassets.transport.send_assets(client, assets) + +/datum/asset/simple/get_url_mappings() + . = list() + for(var/asset_name in assets) + var/datum/asset_cache_item/ACI = assets[asset_name] + if(!ACI) + continue + .[asset_name] = SSassets.transport.get_asset_url(asset_name, assets[asset_name]) + + +// For registering or sending multiple others at once +/datum/asset/group + _abstract = /datum/asset/group + var/list/children + +/datum/asset/group/register() + for(var/type in children) + get_asset_datum(type) + +/datum/asset/group/send(client/C) + for(var/type in children) + var/datum/asset/A = get_asset_datum(type) + . = A.send(C) || . + +/datum/asset/group/get_url_mappings() + . = list() + for(var/type in children) + var/datum/asset/A = get_asset_datum(type) + . += A.get_url_mappings() + +// spritesheet implementation - coalesces various icons into a single .png file +// and uses CSS to select icons out of that file - saves on transferring some +// 1400-odd individual PNG files +#define SPR_SIZE 1 +#define SPR_IDX 2 +#define SPRSZ_COUNT 1 +#define SPRSZ_ICON 2 +#define SPRSZ_STRIPPED 3 + +/datum/asset/spritesheet + _abstract = /datum/asset/spritesheet + var/name + var/list/sizes = list() // "32x32" -> list(10, icon/normal, icon/stripped) + var/list/sprites = list() // "foo_bar" -> list("32x32", 5) + +/datum/asset/spritesheet/register() + SHOULD_NOT_OVERRIDE(TRUE) + + if(!name) + CRASH("spritesheet [type] cannot register without a name") + + create_spritesheets() + realize_spritesheets() + +/datum/asset/spritesheet/proc/realize_spritesheets() + ensure_stripped() + for(var/size_id in sizes) + var/size = sizes[size_id] + SSassets.transport.register_asset("[name]_[size_id].png", size[SPRSZ_STRIPPED]) + var/css_name = "spritesheet_[name].css" + var/file_directory = "data/spritesheets/[css_name]" + fdel(file_directory) + text2file(generate_css(), file_directory) + SSassets.transport.register_asset(css_name, fcopy_rsc(file_directory)) + fdel(file_directory) + +/datum/asset/spritesheet/send(client/client) + if(!name) + return + var/all = list("spritesheet_[name].css") + for(var/size_id in sizes) + all += "[name]_[size_id].png" + . = SSassets.transport.send_assets(client, all) + +/datum/asset/spritesheet/get_url_mappings() + if(!name) + return + + . = list("spritesheet_[name].css" = SSassets.transport.get_asset_url("spritesheet_[name].css")) + for(var/size_id in sizes) + .["[name]_[size_id].png"] = SSassets.transport.get_asset_url("[name]_[size_id].png") + +/datum/asset/spritesheet/proc/ensure_stripped(sizes_to_strip = sizes) + for(var/size_id in sizes_to_strip) + var/size = sizes[size_id] + if(size[SPRSZ_STRIPPED]) + continue + + // save flattened version + var/png_name = "[name]_[size_id].png" + var/file_directory = "data/spritesheets/[png_name]" + fcopy(size[SPRSZ_ICON], file_directory) + var/error = rustg_dmi_strip_metadata(file_directory) + if(length(error)) + stack_trace("Failed to strip [png_name]: [error]") + size[SPRSZ_STRIPPED] = icon(file_directory) + fdel(file_directory) + +/datum/asset/spritesheet/proc/generate_css() + var/list/out = list() + + for(var/size_id in sizes) + var/size = sizes[size_id] + var/icon/tiny = size[SPRSZ_ICON] + out += ".[name][size_id]{display:inline-block;width:[tiny.Width()]px;height:[tiny.Height()]px;background:url('[SSassets.transport.get_asset_url("[name]_[size_id].png")]') no-repeat;}" + + for(var/sprite_id in sprites) + var/sprite = sprites[sprite_id] + var/size_id = sprite[SPR_SIZE] + var/idx = sprite[SPR_IDX] + var/size = sizes[size_id] + + var/icon/tiny = size[SPRSZ_ICON] + var/icon/big = size[SPRSZ_STRIPPED] + var/per_line = big.Width() / tiny.Width() + var/x = (idx % per_line) * tiny.Width() + var/y = round(idx / per_line) * tiny.Height() + + out += ".[name][size_id].[sprite_id]{background-position:-[x]px -[y]px;}" + + return out.Join("\n") + +/// Override this in order to start the creation of the spritehseet. +/// This is where all your Insert, InsertAll, etc calls should be inside. +/datum/asset/spritesheet/proc/create_spritesheets() + SHOULD_CALL_PARENT(FALSE) + CRASH("create_spritesheets() not implemented for [type]!") + +/datum/asset/spritesheet/proc/Insert(sprite_name, icon/I, icon_state="", dir=SOUTH, frame=1, moving=FALSE) + I = icon(I, icon_state=icon_state, dir=dir, frame=frame, moving=moving) + if(!I || ICON_IS_EMPTY(I)) // that direction or state doesn't exist + return + //any sprite modifications we want to do (aka, coloring a greyscaled asset) + I = ModifyInserted(I) + var/size_id = "[I.Width()]x[I.Height()]" + var/size = sizes[size_id] + + if(sprites[sprite_name]) + CRASH("duplicate sprite \"[sprite_name]\" in sheet [name] ([type])") + + if(size) + var/position = size[SPRSZ_COUNT]++ + // Icons are essentially representations of files + modifications + // Because of this, byond keeps them in a cache. It does this in a really dumb way tho + // It's essentially a FIFO queue. So after we do icon() some amount of times, our old icons go out of cache + // When this happens it becomes impossible to modify them, trying to do so will instead throw a + // "bad icon" error. + // What we're doing here is ensuring our icon is in the cache by refreshing it, so we can modify it w/o runtimes. + var/icon/sheet = size[SPRSZ_ICON] + var/icon/sheet_copy = icon(sheet) + size[SPRSZ_STRIPPED] = null + sheet_copy.Insert(I, icon_state=sprite_name) + size[SPRSZ_ICON] = sheet_copy + + sprites[sprite_name] = list(size_id, position) + else + sizes[size_id] = size = list(1, I, null) + sprites[sprite_name] = list(size_id, 0) + +/** + * A simple proc handing the Icon for you to modify before it gets turned into an asset. + * + * Arguments: + * * I: icon being turned into an asset + */ +/datum/asset/spritesheet/proc/ModifyInserted(icon/pre_asset) + return pre_asset + +/datum/asset/spritesheet/proc/InsertAll(prefix, icon/I, list/directions) + if(length(prefix)) + prefix = "[prefix]-" + + if(!directions) + directions = list(SOUTH) + + for(var/icon_state_name in ICON_STATES(I)) + for(var/direction in directions) + var/prefix2 = (length(directions)) ? "[dir2text(direction)]-" : "" + Insert("[prefix][prefix2][icon_state_name]", I, icon_state=icon_state_name, dir=direction) + +/datum/asset/spritesheet/proc/css_tag() + return {""} + +/datum/asset/spritesheet/proc/css_filename() + return SSassets.transport.get_asset_url("spritesheet_[name].css") + +/datum/asset/spritesheet/proc/icon_tag(sprite_name) + var/sprite = sprites[sprite_name] + if(!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return {""} + +/datum/asset/spritesheet/proc/icon_class_name(sprite_name) + var/sprite = sprites[sprite_name] + if(!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return {"[name][size_id] [sprite_name]"} + +/** + * Returns the size class (ex design32x32) for a given sprite's icon + * + * Arguments: + * * sprite_name - The sprite to get the size of + */ +/datum/asset/spritesheet/proc/icon_size_id(sprite_name) + var/sprite = sprites[sprite_name] + if(!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return "[name][size_id]" + +#undef SPR_SIZE +#undef SPR_IDX +#undef SPRSZ_COUNT +#undef SPRSZ_ICON +#undef SPRSZ_STRIPPED + + +/datum/asset/spritesheet/simple + _abstract = /datum/asset/spritesheet/simple + var/list/assets + +/datum/asset/spritesheet/simple/create_spritesheets() + for(var/key in assets) + Insert(key, assets[key]) + +//Generates assets based on iconstates of a single icon +/datum/asset/simple/icon_states + _abstract = /datum/asset/simple/icon_states + var/icon + var/list/directions = list(SOUTH) + var/frame = 1 + var/movement_states = FALSE + + var/prefix = "default" //asset_name = "[prefix].[icon_state_name].png" + var/generic_icon_names = FALSE //generate icon filenames using generate_asset_name() instead the above format + +/datum/asset/simple/icon_states/register(_icon = icon) + for(var/icon_state_name in ICON_STATES(_icon)) + for(var/direction in directions) + var/asset = icon(_icon, icon_state_name, direction, frame, movement_states) + if(!asset) + continue + asset = fcopy_rsc(asset) //dedupe + var/prefix2 = (length(directions)) ? "[dir2text(direction)]." : "" + var/asset_name = "[prefix].[prefix2][icon_state_name].png" + if(generic_icon_names) + asset_name = "[generate_asset_name(asset)].png" + + SSassets.transport.register_asset(asset_name, asset) + +/datum/asset/simple/icon_states/multiple_icons + _abstract = /datum/asset/simple/icon_states/multiple_icons + var/list/icons + +/datum/asset/simple/icon_states/multiple_icons/register() + for(var/i in icons) + ..(i) + +/// Namespace'ed assets (for static css and html files) +/// When sent over a cdn transport, all assets in the same asset datum will exist in the same folder, as their plain names. +/// Used to ensure css files can reference files by url() without having to generate the css at runtime, both the css file and the files it depends on must exist in the same namespace asset datum. (Also works for html) +/// For example `blah.css` with asset `blah.png` will get loaded as `namespaces/a3d..14f/f12..d3c.css` and `namespaces/a3d..14f/blah.png`. allowing the css file to load `blah.png` by a relative url rather then compute the generated url with get_url_mappings(). +/// The namespace folder's name will change if any of the assets change. (excluding parent assets) +/datum/asset/simple/namespaced + _abstract = /datum/asset/simple/namespaced + /// parents - list of the parent asset or assets (in name = file assoicated format) for this namespace. + /// parent assets must be referenced by their generated url, but if an update changes a parent asset, it won't change the namespace's identity. + var/list/parents = list() + +/datum/asset/simple/namespaced/register() + if(legacy) + assets |= parents + var/list/hashlist = list() + var/list/sorted_assets = sortTim(assets, GLOBAL_PROC_REF(cmp_text_asc), TRUE) + + for(var/asset_name in sorted_assets) + var/datum/asset_cache_item/ACI = new(asset_name, sorted_assets[asset_name]) + if(!ACI?.hash) + log_debug("ERROR: Invalid asset: [type]:[asset_name]:[ACI]") + continue + hashlist += ACI.hash + sorted_assets[asset_name] = ACI + var/namespace = md5(hashlist.Join()) + + for(var/asset_name in parents) + var/datum/asset_cache_item/ACI = new(asset_name, parents[asset_name]) + if(!ACI?.hash) + log_debug("ERROR: Invalid asset: [type]:[asset_name]:[ACI]") + continue + ACI.namespace_parent = TRUE + sorted_assets[asset_name] = ACI + + for(var/asset_name in sorted_assets) + var/datum/asset_cache_item/ACI = sorted_assets[asset_name] + if(!ACI?.hash) + log_debug("ERROR: Invalid asset: [type]:[asset_name]:[ACI]") + continue + ACI.namespace = namespace + + assets = sorted_assets + ..() + +/// Get a html string that will load a html asset. +/// Needed because byond doesn't allow you to browse() to a url. +/datum/asset/simple/namespaced/proc/get_htmlloader(filename) + return url2htmlloader(SSassets.transport.get_asset_url(filename, assets[filename])) diff --git a/code/modules/asset_cache/assets/asset_changelog.dm b/code/modules/asset_cache/assets/asset_changelog.dm new file mode 100644 index 0000000000000..786f95fd368fe --- /dev/null +++ b/code/modules/asset_cache/assets/asset_changelog.dm @@ -0,0 +1,23 @@ +/datum/asset/simple/changelog + keep_local_name = TRUE + assets = list( + "88x31.png" = 'html/88x31.png', + "auction-hammer-gavel.png" = 'html/auction-hammer-gavel.png', + "bug-minus.png" = 'html/bug-minus.png', + "burn-exclamation.png" = 'html/burn-exclamation.png', + "chevron.png" = 'html/chevron.png', + "chevron-expand.png" = 'html/chevron-expand.png', + "cross-circle.png" = 'html/cross-circle.png', + "hard-hat-exclamation.png" = 'html/hard-hat-exclamation.png', + "image-minus.png" = 'html/image-minus.png', + "image-plus.png" = 'html/image-plus.png', + "map-pencil.png" = 'html/map-pencil.png', + "music-minus.png" = 'html/music-minus.png', + "music-plus.png" = 'html/music-plus.png', + "tick-circle.png" = 'html/tick-circle.png', + "scales.png" = 'html/scales.png', + "spell-check.png" = 'html/spell-check.png', + "wrench-screwdriver.png" = 'html/wrench-screwdriver.png', + "changelog.css" = 'html/changelog.css', + "changelog.html" = 'html/changelog.html' + ) diff --git a/code/modules/asset_cache/assets/asset_character_preview.dm b/code/modules/asset_cache/assets/asset_character_preview.dm new file mode 100644 index 0000000000000..ce893f961c7be --- /dev/null +++ b/code/modules/asset_cache/assets/asset_character_preview.dm @@ -0,0 +1,6 @@ +/datum/asset/simple/character_preview + assets = list( + "steel" = icon('icons/turf/flooring/tiles.dmi', "steel"), + "tiled_light" = icon('icons/turf/flooring/tiles.dmi', "tiled_light"), + "reinforced_light" = icon('icons/turf/flooring/tiles.dmi', "reinforced_light") + ) diff --git a/code/modules/asset_cache/assets/asset_chem_master.dm b/code/modules/asset_cache/assets/asset_chem_master.dm new file mode 100644 index 0000000000000..3215ce2725664 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_chem_master.dm @@ -0,0 +1,18 @@ +#define MAX_PILL_SPRITE 25 +#define BOTTLE_SPRITES list("bottle-1", "bottle-2", "bottle-3", "bottle-4") + +/// Pill sprites for UIs +/datum/asset/spritesheet/chem_master + name = "chem_master" + +/datum/asset/spritesheet/chem_master/create_spritesheets() + for(var/pill_type = 1 to MAX_PILL_SPRITE) + Insert("pill[pill_type]", 'icons/obj/pills.dmi', "pill[pill_type]") + for(var/bottle_type in BOTTLE_SPRITES) + Insert(bottle_type, 'icons/obj/chemical_storage.dmi', bottle_type) + +/datum/asset/spritesheet/chem_master/ModifyInserted(icon/pre_asset) + pre_asset.Scale(64, 64) + pre_asset.Crop(16,16,48,48) + pre_asset.Scale(32, 32) + return pre_asset diff --git a/code/modules/asset_cache/assets/asset_fontawesome.dm b/code/modules/asset_cache/assets/asset_fontawesome.dm new file mode 100644 index 0000000000000..5624c7755da44 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_fontawesome.dm @@ -0,0 +1,12 @@ +/datum/asset/simple/namespaced/fontawesome + legacy = TRUE + assets = list( + "fa-brands-400.ttf" = 'html/font-awesome/webfonts/fa-brands-400.ttf', + "fa-solid-900.ttf" = 'html/font-awesome/webfonts/fa-solid-900.ttf', + "fa-regular-400.ttf" = 'html/font-awesome/webfonts/fa-regular-400.ttf', + "fa-v4compatibility.ttf" = 'html/font-awesome/webfonts/fa-v4compatibility.ttf', + "v4shim.css" = 'html/font-awesome/css/v4-shims.min.css' + ) + parents = list( + "font-awesome.css" = 'html/font-awesome/css/all.min.css' + ) diff --git a/code/modules/asset_cache/assets/asset_lobby_screen.dm b/code/modules/asset_cache/assets/asset_lobby_screen.dm new file mode 100644 index 0000000000000..111169316bd71 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_lobby_screen.dm @@ -0,0 +1,21 @@ +// In case upstream decides to make lobby use assets +/datum/asset/group/lobby + children = list( + /datum/asset/simple/lobby, + /datum/asset/simple/namespaced/fontawesome + ) + +/datum/asset/simple/lobby + keep_local_name = TRUE + assets = list( + "courierprime-code.woff" = 'html/fonts/courierprime-code.woff', + "round-control.woff" = 'html/fonts/round-control.woff', + "light_left.png" = 'html/lobby_screen/light_left.png', + "light_right.png" = 'html/lobby_screen/light_right.png', + "smallbutton.png" = 'html/lobby_screen/smallbutton.png', + "buttons.mp4" = 'html/lobby_screen/buttons.mp4' + ) + +/datum/asset/simple/lobby_loop + keep_local_name = TRUE + assets = list("loop.mp4" = 'html/lobby_screen/loop.mp4') diff --git a/code/modules/asset_cache/assets/asset_nanoui_common.dm b/code/modules/asset_cache/assets/asset_nanoui_common.dm new file mode 100644 index 0000000000000..26e00ddd8253f --- /dev/null +++ b/code/modules/asset_cache/assets/asset_nanoui_common.dm @@ -0,0 +1,36 @@ +/datum/asset/simple/nanoui_common + keep_local_name = TRUE + var/list/asset_dirs = list( + "nano/css/", + "nano/images/", + "nano/images/status_icons/", + "nano/images/modular_computers/", + "nano/js/" + ) + +/datum/asset/simple/nanoui_common/register() + for (var/path in asset_dirs) + for(var/filename in flist(path)) + var/is_directory = copytext(filename, length(filename)) == "/" + if(is_directory) + continue + + assets[filename] = fcopy_rsc("[path][filename]") + + var/list/mapnames = list() + for(var/z in GLOB.using_map.map_levels) + var/map_image_filename = map_image_file_name(z) + if(map_image_filename) + mapnames[map_image_filename] = TRUE + + for(var/filename in flist(MAP_IMAGE_PATH)) + if(copytext(filename, length(filename)) == "/") + continue + + var/file_path = "[MAP_IMAGE_PATH][filename]" + if(!(mapnames[filename])) + continue + + assets[filename] = fcopy_rsc(file_path) + + . = ..() diff --git a/code/modules/asset_cache/assets/asset_nanoui_group.dm b/code/modules/asset_cache/assets/asset_nanoui_group.dm new file mode 100644 index 0000000000000..e81bae58649f0 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_nanoui_group.dm @@ -0,0 +1,5 @@ +/datum/asset/group/nanoui + children = list( + /datum/asset/simple/nanoui_common, + /datum/asset/simple/nanoui_templates + ) diff --git a/code/modules/asset_cache/assets/asset_nanoui_templates.dm b/code/modules/asset_cache/assets/asset_nanoui_templates.dm new file mode 100644 index 0000000000000..ab2197ebebf51 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_nanoui_templates.dm @@ -0,0 +1,11 @@ +/datum/asset/simple/nanoui_templates + keep_local_name = TRUE + +/datum/asset/simple/nanoui_templates/register() + for(var/filename in flist(NANO_TEMPLATES_PATH)) + if(copytext(filename, length(filename)) == "/") + continue + + assets[filename] = fcopy_rsc("[NANO_TEMPLATES_PATH][filename]") + + . = ..() diff --git a/code/modules/asset_cache/assets/asset_paicard.dm b/code/modules/asset_cache/assets/asset_paicard.dm new file mode 100644 index 0000000000000..1cc9a4d7a8d70 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_paicard.dm @@ -0,0 +1,5 @@ +/datum/asset/simple/paicard + keep_local_name = TRUE + assets = list( + "loading.gif" = 'html/images/loading.gif' + ) diff --git a/code/modules/asset_cache/assets/asset_paper.dm b/code/modules/asset_cache/assets/asset_paper.dm new file mode 100644 index 0000000000000..1821bbc89d8d3 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_paper.dm @@ -0,0 +1,21 @@ +/datum/asset/simple/paper + keep_local_name = TRUE + assets = list( + "ntlogo.png" = 'html/images/ntlogo.png', + "bluentlogo.png" = 'html/images/bluentlogo.png', + "sollogo.png" = 'html/images/sollogo.png', + "terralogo.png" = 'html/images/terralogo.png', + "talisman.png" = 'html/images/talisman.png', + "exologo.png" = 'html/images/exologo.png', + "xynlogo.png" = 'html/images/xynlogo.png', + "daislogo.png" = 'html/images/daislogo.png', + "eclogo.png" = 'html/images/eclogo.png', + "FleetLogo.png" = 'html/images/FleetLogo.png', + "sfplogo.png" = 'html/images/sfplogo.png', + "falogo.png" = 'html/images/falogo.png', + "ofbluelogo.png" = 'html/images/ofbluelogo.png', + "ofntlogo.png" = 'html/images/ofntlogo.png', + "foundlogo.png" = 'html/images/foundlogo.png', + "ccalogo.png" = 'html/images/ccalogo.png', + "sierralogo.png" = 'html/images/sierralogo.png' + ) diff --git a/code/modules/asset_cache/assets/asset_permission_panel.dm b/code/modules/asset_cache/assets/asset_permission_panel.dm new file mode 100644 index 0000000000000..4ebb17d9b929f --- /dev/null +++ b/code/modules/asset_cache/assets/asset_permission_panel.dm @@ -0,0 +1,5 @@ +/datum/asset/simple/permissions_panel + assets = list( + "search.js" = 'html/search.js', + "panels.css" = 'html/panels.css', + ) diff --git a/code/modules/asset_cache/assets/asset_tgfont.dm b/code/modules/asset_cache/assets/asset_tgfont.dm new file mode 100644 index 0000000000000..efa98e22e2c0d --- /dev/null +++ b/code/modules/asset_cache/assets/asset_tgfont.dm @@ -0,0 +1,8 @@ +/datum/asset/simple/namespaced/tgfont + assets = list( + "tgfont.eot" = file("tgui/packages/tgfont/static/tgfont.eot"), + "tgfont.woff2" = file("tgui/packages/tgfont/static/tgfont.woff2"), + ) + parents = list( + "tgfont.css" = file("tgui/packages/tgfont/static/tgfont.css"), + ) diff --git a/code/modules/asset_cache/assets/asset_tgui.dm b/code/modules/asset_cache/assets/asset_tgui.dm new file mode 100644 index 0000000000000..662cad7fbb2d7 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_tgui.dm @@ -0,0 +1,21 @@ +/datum/asset/simple/tgui + keep_local_name = TRUE + assets = list( + "tgui.bundle.js" = file("tgui/public/tgui.bundle.js"), + "tgui.bundle.css" = file("tgui/public/tgui.bundle.css"), + ) + +/datum/asset/simple/tgui_panel + keep_local_name = TRUE + assets = list( + "tgui-panel.bundle.js" = file("tgui/public/tgui-panel.bundle.js"), + "tgui-panel.bundle.css" = file("tgui/public/tgui-panel.bundle.css"), + ) + +/datum/asset/simple/tgfont + keep_local_name = TRUE + assets = list( + "tgfont.eot" = file("tgui/packages/tgfont/static/tgfont.eot"), + "tgfont.woff2" = file("tgui/packages/tgfont/static/tgfont.woff2"), + "tgfont.css" = file("tgui/packages/tgfont/static/tgfont.css"), + ) diff --git a/code/modules/asset_cache/readme.md b/code/modules/asset_cache/readme.md new file mode 100644 index 0000000000000..b2f8914708bb0 --- /dev/null +++ b/code/modules/asset_cache/readme.md @@ -0,0 +1,35 @@ +# Asset cache system + +## Framework for managing browser assets (javascript,css,images,etc) + +This manages getting the asset to the client without doing unneeded re-sends, as well as utilizing any configured cdns. + +There are two frameworks for using this system: + +### Asset datum: + +Make a datum in asset_list_items.dm with your browser assets for your thing. + +Checkout asset_list.dm for the helper subclasses + +The `simple` subclass will most likely be of use for most cases. + +Call get_asset_datum() with the type of the datum you created to get your asset cache datum + +Call .send(client|usr) on that datum to send the asset to the client. Depending on the asset transport this may or may not block. + +Call .get_url_mappings() to get an associated list with the urls your assets can be found at. + +### Manual backend: + +See the documentation for `/datum/asset_transport` for the backend api the asset datums utilize. + +The global variable `SSassets.transport` contains the currently configured transport. + +### Notes: + +Because byond browse() calls use non-blocking queues, if your code uses output() (which bypasses all of these queues) to invoke javascript functions you will need to first have the javascript announce to the server it has loaded before trying to invoke js functions. + +To make your code work with any CDNs configured by the server, you must make sure assets are referenced from the url returned by `get_url_mappings()` or by asset_transport's `get_asset_url()`. (TGUI also has helpers for this.) If this can not be easily done, you can bypass the cdn using legacy assets, see the simple asset datum for details. + +CSS files that use url() can be made to use the CDN without needing to rewrite all url() calls in code by using the namespaced helper datum. See the documentation for `/datum/asset/simple/namespaced` for details. diff --git a/code/modules/asset_cache/transports/asset_transport.dm b/code/modules/asset_cache/transports/asset_transport.dm new file mode 100644 index 0000000000000..60d06e0afa23b --- /dev/null +++ b/code/modules/asset_cache/transports/asset_transport.dm @@ -0,0 +1,154 @@ +/// When sending mutiple assets, how many before we give the client a quaint little sending resources message +#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8 + +/// Base browse_rsc asset transport +/datum/asset_transport + var/name = "Simple browse_rsc asset transport" + var/static/list/preload + /// Don't mutate the filename of assets when sending via browse_rsc. + /// This is to make it easier to debug issues with assets, and allow server operators to bypass issues that make it to production. + /// If turning this on fixes asset issues, something isn't using SSassets.transport.get_asset_url and the asset isn't marked legacy, fix one of those. + var/dont_mutate_filenames = FALSE + +/// Initialize - Called when SSassets initializes. +/datum/asset_transport/proc/Initialize(list/assets) + preload = assets.Copy() + Load() + +/// Called when the transport is loaded by the config controller, not called on the default transport unless it gets loaded by a config change. +/datum/asset_transport/proc/Load() + if(!config.asset_simple_preload) + return + + for(var/client/C as anything in GLOB.clients) + addtimer(CALLBACK(src, PROC_REF(send_assets_slow), C, preload), 1 SECONDS) + + +/// Register a browser asset with the asset cache system +/// asset_name - the identifier of the asset +/// asset - the actual asset file (or an asset_cache_item datum) +/// returns a /datum/asset_cache_item. +/// mutiple calls to register the same asset under the same asset_name return the same datum +/datum/asset_transport/proc/register_asset(asset_name, asset) + var/datum/asset_cache_item/ACI = asset + if(!istype(ACI)) + ACI = new(asset_name, asset) + if(!ACI || !ACI.hash) + CRASH("ERROR: Invalid asset: [asset_name]:[asset]:[ACI]") + if(SSassets.cache[asset_name]) + var/datum/asset_cache_item/OACI = SSassets.cache[asset_name] + OACI.legacy = ACI.legacy = (ACI.legacy|OACI.legacy) + OACI.namespace_parent = ACI.namespace_parent = (ACI.namespace_parent | OACI.namespace_parent) + OACI.namespace = OACI.namespace || ACI.namespace + if(OACI.hash != ACI.hash) + var/error_msg = "ERROR: new asset added to the asset cache with the same name as another asset: [asset_name] existing asset hash: [OACI.hash] new asset hash:[ACI.hash]" + stack_trace(error_msg) + log_debug(error_msg) + else + if(length(ACI.namespace)) + return ACI + return OACI + + SSassets.cache[asset_name] = ACI + return ACI + + +/// Returns a url for a given asset. +/// asset_name - Name of the asset. +/// asset_cache_item - asset cache item datum for the asset, optional, overrides asset_name +/datum/asset_transport/proc/get_asset_url(asset_name, datum/asset_cache_item/asset_cache_item) + if(!istype(asset_cache_item)) + asset_cache_item = SSassets.cache[asset_name] + // To ensure code that breaks on cdns breaks in local testing, we only + // use the normal filename on legacy assets and name space assets. + var/keep_local_name = dont_mutate_filenames \ + || asset_cache_item.legacy \ + || asset_cache_item.keep_local_name \ + || (asset_cache_item.namespace && !asset_cache_item.namespace_parent) + if(keep_local_name) + return url_encode(asset_cache_item.name) + return url_encode("asset.[asset_cache_item.hash][asset_cache_item.ext]") + + +/// Sends a list of browser assets to a client +/// client - a client or mob +/// asset_list - A list of asset filenames to be sent to the client. Can optionally be assoicated with the asset's asset_cache_item datum. +/// Returns TRUE if any assets were sent. +/datum/asset_transport/proc/send_assets(client/client, list/asset_list) + if(!istype(client)) + if(ismob(client)) + var/mob/M = client + if(M.client) + client = M.client + else //no stacktrace because this will mainly happen because the client went away + return + else + CRASH("Invalid argument: client: `[client]`") + if(!islist(asset_list)) + asset_list = list(asset_list) + var/list/unreceived = list() + + for(var/asset_name in asset_list) + var/datum/asset_cache_item/ACI = asset_list[asset_name] + if(!istype(ACI) && !(ACI = SSassets.cache[asset_name])) + log_debug("ERROR: can't send asset `[asset_name]`: unregistered or invalid state: `[ACI]`") + continue + var/asset_file = ACI.resource + if(!asset_file) + log_debug("ERROR: can't send asset `[asset_name]`: invalid registered resource: `[ACI.resource]`") + continue + + var/asset_hash = ACI.hash + var/new_asset_name = asset_name + var/keep_local_name = dont_mutate_filenames \ + || ACI.legacy \ + || ACI.keep_local_name \ + || (ACI.namespace && !ACI.namespace_parent) + if(!keep_local_name) + new_asset_name = "asset.[ACI.hash][ACI.ext]" + if(client.sent_assets[new_asset_name] == asset_hash) + // Un-comment below to debug asset sending (This will spam logs so do not enable normally) + // log_debug("Skipping send of `[asset_name]` (as `[new_asset_name]`) for `[client]` because it already exists in the client's sent_assets list") + continue + unreceived[asset_name] = ACI + + if(length(unreceived)) + if(length(unreceived) >= ASSET_CACHE_TELL_CLIENT_AMOUNT) + to_chat(client, "Sending Resources...") + + for(var/asset_name in unreceived) + var/new_asset_name = asset_name + var/datum/asset_cache_item/ACI = unreceived[asset_name] + var/keep_local_name = dont_mutate_filenames \ + || ACI.legacy \ + || ACI.keep_local_name \ + || (ACI.namespace && !ACI.namespace_parent) + if(!keep_local_name) + new_asset_name = "asset.[ACI.hash][ACI.ext]" + // Un-comment below to debug asset sending (This will spam logs so do not enable normally) + // log_debug("Sending asset `[asset_name]` to client `[client]` as `[new_asset_name]`") + send_rsc(client, ACI.resource, new_asset_name) + + client.sent_assets[new_asset_name] = ACI.hash + + addtimer(CALLBACK(client, TYPE_PROC_REF(/client, asset_cache_update_json)), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) + return TRUE + return FALSE + + +/// Precache files without clogging up the browse() queue, used for passively sending files on connection start. +/datum/asset_transport/proc/send_assets_slow(client/client, list/files, filerate = 6) + var/startingfilerate = filerate + for(var/file in files) + if(!client) + break + if(send_assets(client, file)) + if(!(--filerate)) + filerate = startingfilerate + client.browse_queue_flush() + stoplag(0) //queuing calls like this too quickly can cause issues in some client versions + +/// Check the config is valid to load this transport +/// Returns TRUE or FALSE +/datum/asset_transport/proc/validate_config(log = TRUE) + return TRUE diff --git a/code/modules/asset_cache/transports/webroot_transport.dm b/code/modules/asset_cache/transports/webroot_transport.dm new file mode 100644 index 0000000000000..7f49bcbe1d58e --- /dev/null +++ b/code/modules/asset_cache/transports/webroot_transport.dm @@ -0,0 +1,87 @@ +/// CDN Webroot asset transport. +/datum/asset_transport/webroot + name = "CDN Webroot asset transport" + +/datum/asset_transport/webroot/Load() + if(validate_config(log = FALSE)) + load_existing_assets() + +/// Processes thru any assets that were registered before we were loaded as a transport. +/datum/asset_transport/webroot/proc/load_existing_assets() + for(var/asset_name in SSassets.cache) + var/datum/asset_cache_item/ACI = SSassets.cache[asset_name] + save_asset_to_webroot(ACI) + +/// Register a browser asset with the asset cache system +/// We also save it to the CDN webroot at this step instead of waiting for send_assets() +/// asset_name - the identifier of the asset +/// asset - the actual asset file or an asset_cache_item datum. +/datum/asset_transport/webroot/register_asset(asset_name, asset) + . = ..() + var/datum/asset_cache_item/ACI = . + + if(istype(ACI) && ACI.hash) + save_asset_to_webroot(ACI) + +/// Saves the asset to the webroot taking into account namespaces and hashes. +/datum/asset_transport/webroot/proc/save_asset_to_webroot(datum/asset_cache_item/ACI) + var/webroot = config.asset_cdn_webroot + var/newpath = "[webroot][get_asset_suffex(ACI)]" + if(fexists(newpath)) + return + if(fexists("[newpath].gz")) //its a common pattern in webhosting to save gzip'ed versions of text files and let the webserver serve them up as gzip compressed normal files, sometimes without keeping the original version. + return + return fcopy(ACI.resource, newpath) + +/// Returns a url for a given asset. +/// asset_name - Name of the asset. +/// asset_cache_item - asset cache item datum for the asset, optional, overrides asset_name +/datum/asset_transport/webroot/get_asset_url(asset_name, datum/asset_cache_item/asset_cache_item) + if(!istype(asset_cache_item)) + asset_cache_item = SSassets.cache[asset_name] + var/url = config.asset_cdn_url //config loading will handle making sure this ends in a / + return "[url][get_asset_suffex(asset_cache_item)]" + +/datum/asset_transport/webroot/proc/get_asset_suffex(datum/asset_cache_item/asset_cache_item) + var/base = "" + var/filename = "asset.[asset_cache_item.hash][asset_cache_item.ext]" + if(length(asset_cache_item.namespace)) + base = "namespaces/[asset_cache_item.namespace]/" + if(!asset_cache_item.namespace_parent) + filename = "[asset_cache_item.name]" + return base + filename + + +/// webroot asset sending - does nothing unless passed legacy assets +/datum/asset_transport/webroot/send_assets(client/client, list/asset_list) + . = FALSE + var/list/legacy_assets = list() + if(!islist(asset_list)) + asset_list = list(asset_list) + for(var/asset_name in asset_list) + var/datum/asset_cache_item/ACI = asset_list[asset_name] + if(!istype(ACI)) + ACI = SSassets.cache[asset_name] + if(!ACI) + legacy_assets += asset_name //pass it on to base send_assets so it can output an error + continue + if(ACI.legacy) + legacy_assets[asset_name] = ACI + if(length(legacy_assets)) + . = ..(client, legacy_assets) + + +/// webroot slow asset sending - does nothing. +/datum/asset_transport/webroot/send_assets_slow(client/client, list/files, filerate) + return FALSE + +/datum/asset_transport/webroot/validate_config(log = TRUE) + if(!config.asset_cdn_url) + if(log) + log_debug("ERROR: [type]: Invalid Config: asset_cdn_url") + return FALSE + if(!config.asset_cdn_webroot) + if(log) + log_debug("ERROR: [type]: Invalid Config: asset_cdn_webroot") + return FALSE + return TRUE diff --git a/code/modules/asset_cache/validate_assets.html b/code/modules/asset_cache/validate_assets.html new file mode 100644 index 0000000000000..0ac474d2822a8 --- /dev/null +++ b/code/modules/asset_cache/validate_assets.html @@ -0,0 +1,29 @@ + + + + + + + + + + diff --git a/code/modules/atmospherics/atmos_primitives.dm b/code/modules/atmospherics/atmos_primitives.dm index 3f6f50ef103a9..f9de75dbcade2 100644 --- a/code/modules/atmospherics/atmos_primitives.dm +++ b/code/modules/atmospherics/atmos_primitives.dm @@ -15,7 +15,7 @@ /obj/machinery/atmospherics/var/debug = 0 -/client/proc/atmos_toggle_debug(obj/machinery/atmospherics/M in world) +/client/proc/atmos_toggle_debug(obj/machinery/atmospherics/M in SSmachines.get_machinery_of_type(/obj/machinery/atmospherics)) set name = "Toggle Debug Messages" set category = "Debug" M.debug = !M.debug diff --git a/code/modules/atmospherics/atmospherics.dm b/code/modules/atmospherics/atmospherics.dm index 5676125b84744..05147169ea42f 100644 --- a/code/modules/atmospherics/atmospherics.dm +++ b/code/modules/atmospherics/atmospherics.dm @@ -32,7 +32,7 @@ Pipelines + Other Objects -> Pipe network var/obj/machinery/atmospherics/node2 var/atmos_initalized = FALSE - var/build_icon = 'icons/obj/pipe-item.dmi' + var/build_icon = 'icons/obj/atmospherics/pipe-item.dmi' var/build_icon_state = "buildpipe" var/colorable = FALSE @@ -62,11 +62,6 @@ Pipelines + Other Objects -> Pipe network else reset_plane_and_layer() -/obj/machinery/atmospherics/attackby(atom/A, mob/user as mob) - if(istype(A, /obj/item/device/scanner/gas)) - return - ..() - /obj/machinery/atmospherics/proc/add_underlay(turf/T, obj/machinery/atmospherics/node, direction, icon_connect_type) if(node) if(!T.is_plating() && node.level == ATOM_LEVEL_UNDER_TILE && istype(node, /obj/machinery/atmospherics/pipe)) diff --git a/code/modules/atmospherics/components/binary_devices/circulator.dm b/code/modules/atmospherics/components/binary_devices/circulator.dm index 0bdfbffa95245..bde21f27cc42c 100644 --- a/code/modules/atmospherics/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/components/binary_devices/circulator.dm @@ -4,7 +4,7 @@ /obj/machinery/atmospherics/binary/circulator name = "circulator" desc = "A gas circulator turbine and heat exchanger." - icon = 'icons/obj/power.dmi' + icon = 'icons/obj/machines/power/teg.dmi' icon_state = "circ-unassembled" anchored = FALSE @@ -75,58 +75,59 @@ /obj/machinery/atmospherics/binary/circulator/on_update_icon() icon_state = anchored ? "circ-assembled" : "circ-unassembled" - overlays.Cut() + ClearOverlays() if (inoperable() || !anchored) return 1 if (last_pressure_delta > 0 && recent_moles_transferred > 0) if (temperature_overlay) - overlays += image('icons/obj/power.dmi', temperature_overlay) + AddOverlays(emissive_appearance(icon, temperature_overlay)) + AddOverlays(image(icon, temperature_overlay)) if (last_pressure_delta > 5*ONE_ATMOSPHERE) - overlays += image('icons/obj/power.dmi', "circ-run") + AddOverlays(emissive_appearance(icon, "circ-run")) + AddOverlays(image(icon, "circ-run")) else - overlays += image('icons/obj/power.dmi', "circ-slow") + AddOverlays(emissive_appearance(icon, "circ-slow")) + AddOverlays(image(icon, "circ-slow")) else - overlays += image('icons/obj/power.dmi', "circ-off") + AddOverlays(image(icon, "circ-off")) return 1 -/obj/machinery/atmospherics/binary/circulator/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - anchored = !anchored - user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \ - "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.", \ - "You hear a ratchet") - - if(anchored) - temperature_overlay = null - if(dir & (NORTH|SOUTH)) - initialize_directions = NORTH|SOUTH - else if(dir & (EAST|WEST)) - initialize_directions = EAST|WEST - - atmos_init() - build_network() - if (node1) - node1.atmos_init() - node1.build_network() - if (node2) - node2.atmos_init() - node2.build_network() - else - if(node1) - node1.disconnect(src) - qdel(network1) - if(node2) - node2.disconnect(src) - qdel(network2) - - node1 = null - node2 = null - update_icon() - +/obj/machinery/atmospherics/binary/circulator/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 75, do_flags = DO_REPAIR_CONSTRUCT)) + return + anchored = !anchored + user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \ + "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.", \ + "You hear a ratchet") + + if(anchored) + temperature_overlay = null + if(dir & (NORTH|SOUTH)) + initialize_directions = NORTH|SOUTH + else if(dir & (EAST|WEST)) + initialize_directions = EAST|WEST + + atmos_init() + build_network() + if (node1) + node1.atmos_init() + node1.build_network() + if (node2) + node2.atmos_init() + node2.build_network() else - ..() + if(node1) + node1.disconnect(src) + qdel(network1) + if(node2) + node2.disconnect(src) + qdel(network2) + + node1 = null + node2 = null + update_icon() /obj/machinery/atmospherics/binary/circulator/verb/rotate_clockwise() set category = "Object" diff --git a/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm b/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm index eb28aa517d58a..2d184aa466bf3 100644 --- a/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm +++ b/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm @@ -47,42 +47,38 @@ /obj/machinery/atmospherics/binary/oxyregenerator/examine(user) . = ..() - to_chat(user,"Its outlet port is to the [dir2text(dir)]") - -/obj/machinery/atmospherics/binary/oxyregenerator/attackby(obj/item/O as obj, mob/user as mob) - if(component_attackby(O, user)) - return TRUE - if(isWrench(O)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - anchored = !anchored - user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \ - "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.", \ - "You hear a ratchet") - - if(anchored) - if(dir & (NORTH|SOUTH)) - initialize_directions = NORTH|SOUTH - else if(dir & (EAST|WEST)) - initialize_directions = EAST|WEST - - atmos_init() - build_network() - if (node1) - node1.atmos_init() - node1.build_network() - if (node2) - node2.atmos_init() - node2.build_network() - else - if(node1) - node1.disconnect(src) - qdel(network1) - if(node2) - node2.disconnect(src) - qdel(network2) - - node1 = null - node2 = null + . += SPAN_NOTICE("Its outlet port is to the [dir2text(dir)]") + +/obj/machinery/atmospherics/binary/oxyregenerator/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 75, do_flags = DO_REPAIR_CONSTRUCT)) + return + anchored = !anchored + user.visible_message("[user.name] [anchored ? "secures" : "unsecures"] the bolts holding [src.name] to the floor.", \ + "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.", \ + "You hear a ratchet") + if(anchored) + if(dir & (NORTH|SOUTH)) + initialize_directions = NORTH|SOUTH + else if(dir & (EAST|WEST)) + initialize_directions = EAST|WEST + atmos_init() + build_network() + if (node1) + node1.atmos_init() + node1.build_network() + if (node2) + node2.atmos_init() + node2.build_network() + else + if(node1) + node1.disconnect(src) + qdel(network1) + if(node2) + node2.disconnect(src) + qdel(network2) + node1 = null + node2 = null /obj/machinery/atmospherics/binary/oxyregenerator/verb/rotate_clockwise() set category = "Object" diff --git a/code/modules/atmospherics/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/components/binary_devices/passive_gate.dm index 9a25dc6c18be9..09bb290c4fcda 100644 --- a/code/modules/atmospherics/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/components/binary_devices/passive_gate.dm @@ -235,27 +235,25 @@ src.add_fingerprint(usr) return -/obj/machinery/atmospherics/binary/passive_gate/attackby(obj/item/W as obj, mob/user as mob) - if(!isWrench(W)) - return ..() - if (unlocked) - to_chat(user, SPAN_WARNING("You cannot unwrench \the [src], turn it off first.")) - return 1 +/obj/machinery/atmospherics/binary/passive_gate/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(unlocked) + to_chat(user, SPAN_WARNING("You cannot unwrench [src], turn it off first.")) + return var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/env_air = loc.return_air() - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, SPAN_WARNING("You cannot unwrench \the [src], it too exerted due to internal pressure.")) - add_fingerprint(user) - return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You begin to unfasten \the [src]...")) - if (do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message( \ - SPAN_NOTICE("\The [user] unfastens \the [src]."), \ - SPAN_NOTICE("You have unfastened \the [src]."), \ - "You hear ratchet.") - new /obj/item/pipe(loc, src) - qdel(src) + if((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) + to_chat(user, SPAN_WARNING("You cannot unwrench [src], it too exerted due to internal pressure.")) + return + to_chat(user, SPAN_NOTICE("You begin to unfasten [src]...")) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_ATMOS, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message( \ + SPAN_NOTICE("[user] unfastens [src]."), \ + SPAN_NOTICE("You have unfastened [src]."), \ + "You hear ratchet.") + new /obj/item/pipe(loc, src) + qdel(src) #undef REGULATE_NONE #undef REGULATE_INPUT diff --git a/code/modules/atmospherics/components/binary_devices/pump.dm b/code/modules/atmospherics/components/binary_devices/pump.dm index 6e95a5799bca2..0f5199f909b8e 100644 --- a/code/modules/atmospherics/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/components/binary_devices/pump.dm @@ -63,6 +63,7 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/binary/pump/AltClick() Topic(src, list("power" = "1")) + return TRUE /obj/machinery/atmospherics/binary/pump/on icon_state = "map_on" @@ -120,57 +121,52 @@ Thus, the two variables affect pump operation are set in New(): else return air2 -/obj/machinery/atmospherics/binary/pump/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) - if(inoperable()) - return +/obj/machinery/atmospherics/binary/pump/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Pump", name) + ui.open() - // this is the data which will be sent to the ui - var/data[0] +/obj/machinery/atmospherics/binary/pump/tgui_data(mob/user) + var/list/data = list() - data = list( - "on" = use_power, - "pressure_set" = round(target_pressure*100), //Nano UI can't handle rounded non-integers, apparently. - "max_pressure" = max_pressure_setting, - "last_flow_rate" = round(last_flow_rate*10), - "last_power_draw" = round(last_power_draw), - "max_power_draw" = power_rating, - ) + data["on"] = use_power + data["pressure_set"] = round(target_pressure) + data["max_pressure"] = max_pressure_setting + data["last_flow_rate"] = round(last_flow_rate) + data["last_power_draw"] = round(last_power_draw) + data["max_power_draw"] = power_rating - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "gas_pump.tmpl", name, 470, 290) - ui.set_initial_data(data) // when the ui is first opened this is the data it will use - ui.open() // open the new ui window - ui.set_auto_update(1) // auto update every Master Controller tick + return data /obj/machinery/atmospherics/binary/pump/interface_interact(mob/user) - ui_interact(user) + tgui_interact(user) return TRUE -/obj/machinery/atmospherics/binary/pump/Topic(href,href_list) - if((. = ..())) return +/obj/machinery/atmospherics/binary/pump/tgui_state(mob/user) + return GLOB.default_state - if(href_list["power"]) - update_use_power(!use_power) - . = 1 +/obj/machinery/atmospherics/binary/pump/tgui_act(action, params) + if(..()) + return - switch(href_list["set_press"]) + switch(action) + if("power") + update_use_power(!use_power) + update_icon() + return TRUE if ("min") target_pressure = 0 - . = 1 + return TRUE if ("max") target_pressure = max_pressure_setting - . = 1 + return TRUE if ("set") - var/new_pressure = input(usr,"Enter new output pressure (0-[max_pressure_setting]kPa)","Pressure control",src.target_pressure) as num - src.target_pressure = clamp(new_pressure, 0, max_pressure_setting) - . = 1 - - if(.) - src.update_icon() + var/new_pressure = text2num(params["rate"]) + if(isnull(new_pressure)) + return FALSE + target_pressure = clamp(new_pressure, 0, max_pressure_setting) + return TRUE /obj/machinery/atmospherics/binary/pump/cannot_transition_to(state_path, mob/user) if(state_path == /singleton/machine_construction/default/deconstructed) diff --git a/code/modules/atmospherics/components/omni_devices/filter.dm b/code/modules/atmospherics/components/omni_devices/filter.dm index 98fadcd970c15..7c0da1982abd7 100644 --- a/code/modules/atmospherics/components/omni_devices/filter.dm +++ b/code/modules/atmospherics/components/omni_devices/filter.dm @@ -237,7 +237,7 @@ GLOBAL_LIST_INIT(filter_mode_to_gas_id, list( \ switch_mode(dir, mode) /obj/machinery/atmospherics/omni/filter/proc/switch_mode(port, mode) - if(mode == null || !port) + if(isnull(mode) || !port) return var/datum/omni_port/target_port = null var/list/other_ports = new() diff --git a/code/modules/atmospherics/components/omni_devices/omni_base.dm b/code/modules/atmospherics/components/omni_devices/omni_base.dm index 63531c1d1152d..ead6943fbf2d9 100644 --- a/code/modules/atmospherics/components/omni_devices/omni_base.dm +++ b/code/modules/atmospherics/components/omni_devices/omni_base.dm @@ -52,11 +52,11 @@ /obj/machinery/atmospherics/omni/on_update_icon() if(!is_powered()) - overlays = overlays_off + SetOverlays(overlays_off) else if(error_check()) - overlays = overlays_error + SetOverlays(overlays_error) else - overlays = use_power ? (overlays_on) : (overlays_off) + SetOverlays(use_power ? (overlays_on) : (overlays_off)) underlays = underlays_current @@ -76,27 +76,24 @@ return 0 return 1 -/obj/machinery/atmospherics/omni/attackby(obj/item/W as obj, mob/user as mob) - if(!isWrench(W)) - return ..() - +/obj/machinery/atmospherics/omni/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS var/int_pressure = 0 for(var/datum/omni_port/P in ports) int_pressure += P.air.return_pressure() var/datum/gas_mixture/env_air = loc.return_air() - if ((int_pressure - env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, SPAN_WARNING("You cannot unwrench \the [src], it is too exerted due to internal pressure.")) - add_fingerprint(user) - return 1 - to_chat(user, SPAN_NOTICE("You begin to unfasten \the [src]...")) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message( \ - SPAN_NOTICE("\The [user] unfastens \the [src]."), \ - SPAN_NOTICE("You have unfastened \the [src]."), \ - "You hear a ratchet.") - new /obj/item/pipe(loc, src) - qdel(src) + if((int_pressure - env_air.return_pressure()) > 2*ONE_ATMOSPHERE) + to_chat(user, SPAN_WARNING("You cannot unwrench [src], it is too exerted due to internal pressure.")) + return + to_chat(user, SPAN_NOTICE("You begin to unfasten [src]...")) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_ATMOS, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message( \ + SPAN_NOTICE("[user] unfastens [src]."), \ + SPAN_NOTICE("You have unfastened [src]."), \ + "You hear a ratchet.") + new /obj/item/pipe(loc, src) + qdel(src) /obj/machinery/atmospherics/omni/interface_interact(mob/user) ui_interact(user) diff --git a/code/modules/atmospherics/components/pipesparker.dm b/code/modules/atmospherics/components/pipesparker.dm index 227fee3fadcfc..59a6d75ca6da9 100644 --- a/code/modules/atmospherics/components/pipesparker.dm +++ b/code/modules/atmospherics/components/pipesparker.dm @@ -29,7 +29,7 @@ /singleton/public_access/public_method/pipe_sparker_spark name = "pipespark" desc = "Ignites gas in a pipeline." - call_proc = /obj/machinery/atmospherics/pipe/cap/sparker/proc/ignite + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/pipe/cap/sparker, ignite) /singleton/stock_part_preset/radio/receiver/sparker/pipe frequency = BUTTON_FREQ @@ -63,67 +63,94 @@ playsound(loc, "button", 30, 1) if (cant_ignite()) user.visible_message( - SPAN_NOTICE("\The [user] tries to activate \the [src], but nothing happens."), - SPAN_NOTICE("You try to activate \the [src], but nothing happens.") + SPAN_NOTICE("[user] tries to activate [src], but nothing happens."), + SPAN_NOTICE("You try to activate [src], but nothing happens.") ) return user.visible_message( - SPAN_NOTICE("\The [user] activates \the [src]."), - SPAN_NOTICE("You activate \the [src].") + SPAN_NOTICE("[user] activates [src]."), + SPAN_NOTICE("You activate [src].") ) ignite() -/obj/machinery/atmospherics/pipe/cap/sparker/attackby(obj/item/W as obj, mob/user as mob) - if (isScrewdriver(W) && !signaler) - add_fingerprint(user) - disabled = !disabled - if (disabled) - user.visible_message( - SPAN_WARNING("\The [user] has disabled \the [src]!"), - SPAN_WARNING("You disable the connection to \the [src].") - ) - else if (!disabled) - user.visible_message( - SPAN_NOTICE("\The [user] has reconnected wiring on \the [src]!"), - SPAN_NOTICE("You fix the wire connection on \the [src].") - ) +/obj/machinery/atmospherics/pipe/cap/sparker/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(signaler || disabled) + to_chat(user, SPAN_NOTICE("Remove signalers and check the wiring before unwrenching [src].")) + return + var/turf/T = src.loc + if(level == ATOM_LEVEL_UNDER_TILE && isturf(T) && !T.is_plating()) + to_chat(user, SPAN_WARNING("You must remove the plating first.")) + return + if(clamp) + to_chat(user, SPAN_WARNING("You must remove [clamp] first.")) + return + + var/datum/gas_mixture/int_air = return_air() + var/datum/gas_mixture/env_air = loc.return_air() + + if((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) + to_chat(user, SPAN_WARNING("You cannot unwrench [src], it is too exerted due to internal pressure.")) + return + + to_chat(user, SPAN_NOTICE("You begin to unfasten [src]...")) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_ATMOS, do_flags = DO_REPAIR_CONSTRUCT) || clamp) + return + user.visible_message( + SPAN_NOTICE("[user] unfastens [src]."), + SPAN_NOTICE("You have unfastened [src]."), + "You hear a ratchet.") + + new /obj/item/pipe(loc, src) + for(var/obj/machinery/meter/meter in T) + if(meter.target == src) + meter.dismantle() + qdel(src) + +/obj/machinery/atmospherics/pipe/cap/sparker/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(signaler) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + signaler.mholder = null + signaler.dropInto(loc) + user.visible_message( + SPAN_WARNING("[user] disconnects [signaler] from [src]."), + SPAN_WARNING("You disconnect [signaler] from [src].") + ) + signaler = null update_icon() return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + disabled = !disabled + user.visible_message( + SPAN_WARNING("[user] has [disabled ? "disabled" : "reconnected wiring on"] [src]."), + SPAN_WARNING("You [disabled ? "disable" : "fix"] the connection on [src].") + ) + update_icon() - if (istype(W, /obj/item/device/assembly/signaler) && signaler == null) +/obj/machinery/atmospherics/pipe/cap/sparker/use_tool(obj/item/W, mob/living/user, list/click_params) + if (istype(W, /obj/item/device/assembly/signaler) && isnull(signaler)) if (disabled) - to_chat(user, SPAN_WARNING("\The [src] is disabled!")) - return + to_chat(user, SPAN_WARNING("[src] is disabled!")) + return TRUE signaler = W if (signaler.secured) - to_chat(user, SPAN_WARNING("\The [signaler] is secured!")) + to_chat(user, SPAN_WARNING("[signaler] is secured!")) signaler = null - return + return TRUE signaler.mholder = src user.unEquip(signaler) signaler.forceMove(src) user.visible_message( - SPAN_NOTICE("\The [user] connects \the [signaler] to \the [src]."), - SPAN_NOTICE("You connect \the [signaler] to \the [src].") - ) - update_icon() - return - - if (isScrewdriver(W) && signaler) - signaler.mholder = null - signaler.dropInto(loc) - user.visible_message( - SPAN_WARNING("\The [user] disconnects \the [signaler] from \the [src]."), - SPAN_WARNING("You disconnect \the [signaler] from \the [src].") + SPAN_NOTICE("[user] connects [signaler] to [src]."), + SPAN_NOTICE("You connect [signaler] to [src].") ) - signaler = null update_icon() - return + return TRUE - if (isWrench(W) && (signaler || disabled)) - to_chat(user, SPAN_NOTICE("Remove signalers and check the wiring before unwrenching \the [src].")) - return - ..() + return ..() /obj/machinery/atmospherics/pipe/cap/sparker/proc/process_activation()//the signaler calls this ignite() @@ -131,9 +158,9 @@ /obj/machinery/atmospherics/pipe/cap/sparker/on_update_icon() ..() if (signaler) - overlays += image('icons/atmos/pipe-sparker.dmi', "pipe-sparker-s") + AddOverlays(image('icons/atmos/pipe-sparker.dmi', "pipe-sparker-s")) if (disabled) - overlays += image('icons/atmos/pipe-sparker.dmi', "pipe-sparker-d") + AddOverlays(image('icons/atmos/pipe-sparker.dmi', "pipe-sparker-d")) update_underlays() /obj/machinery/atmospherics/pipe/cap/sparker/update_underlays() diff --git a/code/modules/atmospherics/components/portables_connector.dm b/code/modules/atmospherics/components/portables_connector.dm index f62817dfa8472..92716efab10d6 100644 --- a/code/modules/atmospherics/components/portables_connector.dm +++ b/code/modules/atmospherics/components/portables_connector.dm @@ -130,26 +130,24 @@ return null -/obj/machinery/atmospherics/portables_connector/attackby(obj/item/W as obj, mob/user as mob) - if(!isWrench(W)) - return ..() - if (connected_device) - to_chat(user, SPAN_WARNING("You cannot unwrench \the [src], dettach \the [connected_device] first.")) - return 1 - if (locate(/obj/machinery/portable_atmospherics, src.loc)) - return 1 +/obj/machinery/atmospherics/portables_connector/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(connected_device) + to_chat(user, SPAN_WARNING("You cannot unwrench [src], dettach [connected_device] first.")) + return + if(locate(/obj/machinery/portable_atmospherics, src.loc)) + return var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/env_air = loc.return_air() - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, SPAN_WARNING("You cannot unwrench \the [src], it too exerted due to internal pressure.")) - add_fingerprint(user) - return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You begin to unfasten \the [src]...")) - if (do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message( \ - SPAN_NOTICE("\The [user] unfastens \the [src]."), \ - SPAN_NOTICE("You have unfastened \the [src]."), \ - "You hear a ratchet.") - new /obj/item/pipe(loc, src) - qdel(src) + if((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) + to_chat(user, SPAN_WARNING("You cannot unwrench [src], it too exerted due to internal pressure.")) + return + to_chat(user, SPAN_NOTICE("You begin to unfasten [src]...")) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_ATMOS, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message( \ + SPAN_NOTICE("[user] unfastens [src]."), \ + SPAN_NOTICE("You have unfastened [src]."), \ + "You hear a ratchet.") + new /obj/item/pipe(loc, src) + qdel(src) diff --git a/code/modules/atmospherics/components/shutoff.dm b/code/modules/atmospherics/components/shutoff.dm index b8dbe67d0ec75..ffd472cfe0656 100644 --- a/code/modules/atmospherics/components/shutoff.dm +++ b/code/modules/atmospherics/components/shutoff.dm @@ -16,18 +16,18 @@ /obj/machinery/atmospherics/valve/shutoff/on_update_icon() icon_state = "vclamp[icon_connect_type]" - overlays.Cut() + ClearOverlays() if (!close_on_leaks) - overlays += image('icons/atmos/clamp.dmi', "override[icon_connect_type]") + AddOverlays(image('icons/atmos/clamp.dmi', "override[icon_connect_type]")) return if (shutoff_state & NODE1_CLOSED) - overlays += image('icons/atmos/clamp.dmi', "closed1[icon_connect_type]") + AddOverlays(image('icons/atmos/clamp.dmi', "closed1[icon_connect_type]")) if (shutoff_state & NODE2_CLOSED) - overlays += image('icons/atmos/clamp.dmi', "closed2[icon_connect_type]") + AddOverlays(image('icons/atmos/clamp.dmi', "closed2[icon_connect_type]")) /obj/machinery/atmospherics/valve/shutoff/examine(mob/user) . = ..() - to_chat(user, "The automatic shutoff circuit is [close_on_leaks ? "enabled" : "disabled"].") + . += SPAN_NOTICE("The automatic shutoff circuit is [close_on_leaks ? "enabled" : "disabled"].") /obj/machinery/atmospherics/valve/shutoff/Initialize() . = ..() @@ -51,7 +51,7 @@ /obj/machinery/atmospherics/valve/shutoff/hide(do_hide) if(istype(loc, /turf/simulated)) - set_invisibility(do_hide ? 101 : 0) + set_invisibility(do_hide ? INVISIBILITY_ABSTRACT : 0) update_underlays() /obj/machinery/atmospherics/valve/shutoff/Process() diff --git a/code/modules/atmospherics/components/tvalve.dm b/code/modules/atmospherics/components/tvalve.dm index b56defe2556fd..3bae06c84b142 100644 --- a/code/modules/atmospherics/components/tvalve.dm +++ b/code/modules/atmospherics/components/tvalve.dm @@ -264,24 +264,22 @@ return null -/obj/machinery/atmospherics/tvalve/attackby(obj/item/W as obj, mob/user as mob) - if(!isWrench(W)) - return ..() +/obj/machinery/atmospherics/tvalve/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/env_air = loc.return_air() - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, SPAN_CLASS("warnng", "You cannot unwrench \the [src], it too exerted due to internal pressure.")) - add_fingerprint(user) - return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You begin to unfasten \the [src]...")) - if (do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message( \ - SPAN_NOTICE("\The [user] unfastens \the [src]."), \ - SPAN_NOTICE("You have unfastened \the [src]."), \ - "You hear a ratchet.") - new /obj/item/pipe(loc, src) - qdel(src) + if((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) + to_chat(user, SPAN_WARNING("You cannot unwrench [src], it is too exerted due to internal pressure.")) + return + to_chat(user, SPAN_NOTICE("You begin to unfasten [src]...")) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_ATMOS, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message( \ + SPAN_NOTICE("[user] unfastens [src]."), \ + SPAN_NOTICE("You have unfastened [src]."), \ + "You hear a ratchet.") + new /obj/item/pipe(loc, src) + qdel(src) /singleton/public_access/public_variable/tvalve_state expected_type = /obj/machinery/atmospherics/tvalve @@ -296,17 +294,17 @@ /singleton/public_access/public_method/tvalve_go_straight name = "valve go straight" desc = "Sets the valve to send output straight." - call_proc = /obj/machinery/atmospherics/tvalve/proc/go_straight + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/tvalve, go_straight) /singleton/public_access/public_method/tvalve_go_side name = "valve go side" desc = "Redirects output to the side." - call_proc = /obj/machinery/atmospherics/tvalve/proc/go_to_side + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/tvalve, go_to_side) /singleton/public_access/public_method/tvalve_toggle name = "valve toggle" desc = "Toggles the output direction." - call_proc = /obj/machinery/atmospherics/tvalve/proc/toggle + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/tvalve, toggle) /singleton/stock_part_preset/radio/receiver/tvalve frequency = FUEL_FREQ diff --git a/code/modules/atmospherics/components/unary/cold_sink.dm b/code/modules/atmospherics/components/unary/cold_sink.dm index b1e3fb2936dc6..48ee6309c2c1f 100644 --- a/code/modules/atmospherics/components/unary/cold_sink.dm +++ b/code/modules/atmospherics/components/unary/cold_sink.dm @@ -4,8 +4,8 @@ /obj/machinery/atmospherics/unary/freezer name = "gas cooling system" desc = "Cools gas when connected to a pipe network." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "freezer_0" + icon = 'icons/obj/atmospherics/temperature_machines.dmi' + icon_state = "freezer" density = TRUE anchored = TRUE use_power = POWER_USE_OFF @@ -49,14 +49,19 @@ update_icon() /obj/machinery/atmospherics/unary/freezer/on_update_icon() - if(node) - if(use_power && cooling) - icon_state = "freezer_1" - else - icon_state = "freezer" - else - icon_state = "freezer_0" - return + ClearOverlays() + if(panel_open) + AddOverlays("[icon_state]_panel") + if(is_powered()) + AddOverlays(emissive_appearance(icon, "[icon_state]_lights")) + AddOverlays("[icon_state]_lights") + if(node) + if(use_power && cooling) + AddOverlays(emissive_appearance(icon, "[icon_state]_lights_working")) + AddOverlays("[icon_state]_lights_working") + else + AddOverlays(emissive_appearance(icon, "[icon_state]_lights_standby")) + AddOverlays("[icon_state]_lights_standby") /obj/machinery/atmospherics/unary/freezer/interface_interact(mob/user) ui_interact(user) @@ -160,4 +165,4 @@ /obj/machinery/atmospherics/unary/freezer/examine(mob/user) . = ..() if(panel_open) - to_chat(user, "The maintenance hatch is open.") + . += SPAN_NOTICE("The maintenance hatch is open.") diff --git a/code/modules/atmospherics/components/unary/heat_exchanger.dm b/code/modules/atmospherics/components/unary/heat_exchanger.dm index 278c5725f8115..626552605c67f 100644 --- a/code/modules/atmospherics/components/unary/heat_exchanger.dm +++ b/code/modules/atmospherics/components/unary/heat_exchanger.dm @@ -68,25 +68,23 @@ return 1 -/obj/machinery/atmospherics/unary/heat_exchanger/attackby(obj/item/W as obj, mob/user as mob) - if(!isWrench(W)) - return ..() - var/turf/T = src.loc - if (level==ATOM_LEVEL_UNDER_TILE && isturf(T) && !T.is_plating()) +/obj/machinery/atmospherics/unary/heat_exchanger/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + var/turf/T = loc + if(level == ATOM_LEVEL_UNDER_TILE && isturf(T) && !T.is_plating()) to_chat(user, SPAN_WARNING("You must remove the plating first.")) - return 1 + return var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/env_air = loc.return_air() - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, SPAN_WARNING("You cannot unwrench \the [src], it is too exerted due to internal pressure.")) - add_fingerprint(user) - return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You begin to unfasten \the [src]...")) - if (do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message( \ - SPAN_NOTICE("\The [user] unfastens \the [src]."), \ - SPAN_NOTICE("You have unfastened \the [src]."), \ - "You hear a ratchet.") - new /obj/item/pipe(loc, src) - qdel(src) + if((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) + to_chat(user, SPAN_WARNING("You cannot unwrench [src], it is too exerted due to internal pressure.")) + return + to_chat(user, SPAN_NOTICE("You begin to unfasten [src]...")) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_ATMOS, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message( \ + SPAN_NOTICE("[user] unfastens [src]."), \ + SPAN_NOTICE("You have unfastened [src]."), \ + "You hear a ratchet.") + new /obj/item/pipe(loc, src) + qdel(src) diff --git a/code/modules/atmospherics/components/unary/heat_source.dm b/code/modules/atmospherics/components/unary/heat_source.dm index ef6c773f7d232..f2959d073f41b 100644 --- a/code/modules/atmospherics/components/unary/heat_source.dm +++ b/code/modules/atmospherics/components/unary/heat_source.dm @@ -4,8 +4,8 @@ /obj/machinery/atmospherics/unary/heater name = "gas heating system" desc = "Heats gas when connected to a pipe network." - icon = 'icons/obj/Cryogenic2.dmi' - icon_state = "heater_0" + icon = 'icons/obj/atmospherics/temperature_machines.dmi' + icon_state = "heater" density = TRUE anchored = TRUE use_power = POWER_USE_OFF @@ -51,14 +51,19 @@ /obj/machinery/atmospherics/unary/heater/on_update_icon() - if(node) - if(use_power && heating) - icon_state = "heater_1" - else - icon_state = "heater" - else - icon_state = "heater_0" - return + ClearOverlays() + if(panel_open) + AddOverlays("freezer_panel") + if(is_powered()) + AddOverlays(emissive_appearance(icon, "freezer_lights")) + AddOverlays("freezer_lights") + if(node) + if(use_power && heating) + AddOverlays(emissive_appearance(icon, "[icon_state]_lights_working")) + AddOverlays("[icon_state]_lights_working") + else + AddOverlays(emissive_appearance(icon, "freezer_lights_standby")) + AddOverlays("freezer_lights_standby") /obj/machinery/atmospherics/unary/heater/Process() @@ -149,4 +154,4 @@ /obj/machinery/atmospherics/unary/heater/examine(mob/user) . = ..() if(panel_open) - to_chat(user, "The maintenance hatch is open.") + . += SPAN_NOTICE("The maintenance hatch is open.") diff --git a/code/modules/atmospherics/components/unary/outlet_injector.dm b/code/modules/atmospherics/components/unary/outlet_injector.dm index 0fa59b4cdeab3..83654a61122a4 100644 --- a/code/modules/atmospherics/components/unary/outlet_injector.dm +++ b/code/modules/atmospherics/components/unary/outlet_injector.dm @@ -4,7 +4,7 @@ /obj/machinery/atmospherics/unary/outlet_injector icon = 'icons/atmos/injector.dmi' - icon_state = "off" + icon_state = "map_injector" name = "injector" desc = "Passively injects air into its surroundings. Has a valve attached to it that can control flow rate." @@ -34,11 +34,10 @@ //Give it a small reservoir for injecting. Also allows it to have a higher flow rate limit than vent pumps, to differentiate injectors a bit more. air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 -/obj/machinery/atmospherics/unary/outlet_injector/Initialize() - . = ..() set_frequency(frequency) broadcast_status() + /obj/machinery/atmospherics/unary/outlet_injector/Destroy() unregister_radio(src, frequency) . = ..() @@ -168,7 +167,7 @@ "power" = use_power, "volume_rate" = volume_rate, "sigtype" = "status" - ) + ) radio_connection.post_signal(src, signal) @@ -195,23 +194,23 @@ volume_rate = clamp(number, 0, air_contents.volume) if(signal.data["status"]) - addtimer(new Callback(src, .proc/broadcast_status), 2, TIMER_UNIQUE) + addtimer(CALLBACK(src, PROC_REF(broadcast_status)), 2, TIMER_UNIQUE) return - addtimer(new Callback(src, .proc/broadcast_status), 2, TIMER_UNIQUE) + addtimer(CALLBACK(src, PROC_REF(broadcast_status)), 2, TIMER_UNIQUE) /obj/machinery/atmospherics/unary/outlet_injector/hide(i) update_underlays() -/obj/machinery/atmospherics/unary/outlet_injector/attackby(obj/item/O as obj, mob/user as mob) - if(isMultitool(O)) - var/datum/browser/popup = new (user, "Vent Configuration Utility", "[src] Configuration Panel", 600, 200) - popup.set_content(jointext(get_console_data(),"
      ")) - popup.open() - return - - if(isWrench(O)) - new /obj/item/pipe(loc, src) - qdel(src) +/obj/machinery/atmospherics/unary/outlet_injector/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) return - return ..() + new /obj/item/pipe(loc, src) + qdel(src) + +/obj/machinery/atmospherics/unary/outlet_injector/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + var/datum/browser/popup = new (user, "Vent Configuration Utility", "[src] Configuration Panel", 600, 200) + popup.set_content(jointext(get_console_data(),"
      ")) + popup.open() diff --git a/code/modules/atmospherics/components/unary/tank.dm b/code/modules/atmospherics/components/unary/tank.dm index a1f2aed793544..c2126711da4cd 100644 --- a/code/modules/atmospherics/components/unary/tank.dm +++ b/code/modules/atmospherics/components/unary/tank.dm @@ -58,20 +58,17 @@ /obj/machinery/atmospherics/unary/tank/return_air() return air_contents -/obj/machinery/atmospherics/unary/tank/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - if (air_contents.return_pressure() > 2*ONE_ATMOSPHERE) - to_chat(user, SPAN_WARNING("You cannot unwrench \the [src], it is too exerted due to internal pressure.")) - add_fingerprint(user) - return 1 - - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You begin to unfasten \the [src]...")) - - if (do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message(SPAN_NOTICE("\The [user] unfastens \the [src]."), SPAN_NOTICE("You have unfastened \the [src]."), "You hear a ratchet.") - new /obj/item/pipe/tank(loc, src) - qdel(src) +/obj/machinery/atmospherics/unary/tank/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(air_contents.return_pressure() > 2*ONE_ATMOSPHERE) + to_chat(user, SPAN_WARNING("You cannot unwrench [src], it is too exerted due to internal pressure.")) + return + to_chat(user, SPAN_NOTICE("You begin to unfasten [src]...")) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_ATMOS, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message(SPAN_NOTICE("[user] unfastens [src]."), SPAN_NOTICE("You have unfastened [src]."), "You hear a ratchet.") + new /obj/item/pipe/tank(loc, src) + qdel(src) /obj/machinery/atmospherics/unary/tank/air name = "Pressure Tank (Air)" diff --git a/code/modules/atmospherics/components/unary/vent_pump.dm b/code/modules/atmospherics/components/unary/vent_pump.dm index f5df0d2aa102b..3c6771aae1832 100644 --- a/code/modules/atmospherics/components/unary/vent_pump.dm +++ b/code/modules/atmospherics/components/unary/vent_pump.dm @@ -127,7 +127,7 @@ if (!node) return - overlays.Cut() + ClearOverlays() var/vent_icon = "vent" @@ -145,7 +145,7 @@ else vent_icon += "[use_power ? "[pump_direction ? "out" : "in"]" : "off"]" - overlays += icon_manager.get_atmos_icon("device", , , vent_icon) + AddOverlays(icon_manager.get_atmos_icon("device", , , vent_icon)) /obj/machinery/atmospherics/unary/vent_pump/update_underlays() if(..()) @@ -262,84 +262,55 @@ . = ..() toggle_input_toggle() -/obj/machinery/atmospherics/unary/vent_pump/attackby(obj/item/W, mob/user) - if(isWelder(W)) - - var/obj/item/weldingtool/WT = W - - if(!WT.isOn()) - to_chat(user, SPAN_NOTICE("The welding tool needs to be on to start this task.")) - return 1 - - if(!WT.remove_fuel(0,user)) - to_chat(user, SPAN_WARNING("You need more welding fuel to complete this task.")) - return 1 - - to_chat(user, SPAN_NOTICE("Now welding \the [src].")) - playsound(src, 'sound/items/Welder.ogg', 50, 1) - - if(!do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, SPAN_NOTICE("You must remain close to finish this task.")) - return 1 - - if(!src) - return 1 - - if(!WT.isOn()) - to_chat(user, SPAN_NOTICE("The welding tool needs to be on to finish this task.")) - return 1 - - welded = !welded - update_icon() - playsound(src, 'sound/items/Welder2.ogg', 50, 1) - user.visible_message(SPAN_NOTICE("\The [user] [welded ? "welds \the [src] shut" : "unwelds \the [src]"]."), \ - SPAN_NOTICE("You [welded ? "weld \the [src] shut" : "unweld \the [src]"]."), \ - "You hear welding.") - return 1 - - else - ..() - /obj/machinery/atmospherics/unary/vent_pump/examine(mob/user, distance) . = ..() if(distance <= 1) - to_chat(user, "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W") + . += SPAN_NOTICE("A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W") else - to_chat(user, "You are too far away to read the gauge.") + . += SPAN_NOTICE("You are too far away to read the gauge.") if(welded) - to_chat(user, "It seems welded shut.") - -/obj/machinery/atmospherics/unary/vent_pump/attackby(obj/item/W as obj, mob/user as mob) - if(isWrench(W)) - if (is_powered() && use_power) - to_chat(user, SPAN_WARNING("You cannot unwrench \the [src], turn it off first.")) - return 1 - var/turf/T = src.loc - if (node && node.level==ATOM_LEVEL_UNDER_TILE && isturf(T) && !T.is_plating()) - to_chat(user, SPAN_WARNING("You must remove the plating first.")) - return 1 - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, SPAN_WARNING("You cannot unwrench \the [src], it is too exerted due to internal pressure.")) - add_fingerprint(user) - return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You begin to unfasten \the [src]...")) - if (do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message( \ - SPAN_NOTICE("\The [user] unfastens \the [src]."), \ - SPAN_NOTICE("You have unfastened \the [src]."), \ - "You hear a ratchet.") - new /obj/item/pipe(loc, src) - qdel(src) - if(isMultitool(W)) - var/datum/browser/popup = new(user, "Vent Configuration Utility", "[src] Configuration Panel", 600, 200) - popup.set_content(jointext(get_console_data(),"
      ")) - popup.open() + . += SPAN_NOTICE("It seems welded shut.") + +/obj/machinery/atmospherics/unary/vent_pump/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + var/datum/browser/popup = new(user, "Vent Configuration Utility", "[src] Configuration Panel", 600, 200) + popup.set_content(jointext(get_console_data(),"
      ")) + popup.open() + +/obj/machinery/atmospherics/unary/vent_pump/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(is_powered() && use_power) + to_chat(user, SPAN_WARNING("You cannot unwrench [src], turn it off first.")) return - else - return ..() + var/turf/T = src.loc + if(node && node.level==ATOM_LEVEL_UNDER_TILE && isturf(T) && !T.is_plating()) + to_chat(user, SPAN_WARNING("You must remove the plating first.")) + return + var/datum/gas_mixture/int_air = return_air() + var/datum/gas_mixture/env_air = loc.return_air() + if((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) + to_chat(user, SPAN_WARNING("You cannot unwrench [src], it is too exerted due to internal pressure.")) + return + to_chat(user, SPAN_NOTICE("You begin to unfasten [src]...")) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_ATMOS, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message( \ + SPAN_NOTICE("[user] unfastens [src]."), \ + SPAN_NOTICE("You have unfastened [src]."), \ + "You hear a ratchet.") + new /obj/item/pipe(loc, src) + qdel(src) + +/obj/machinery/atmospherics/unary/vent_pump/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.tool_start_check(user, 1)) + return + USE_FEEDBACK_WELD_UNWELD(user, welded) + if(!tool.use_as_tool(src, user, 2 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + welded = !welded + update_icon() + USE_FEEDBACK_WELD_UNWELD_FINISH(user, welded) /obj/machinery/atmospherics/unary/vent_pump/proc/get_console_data() . = list() @@ -434,7 +405,7 @@ /singleton/public_access/public_method/purge_pump name = "activate purge mode" desc = "Activates purge mode, overriding pressure checks and removing air." - call_proc = /obj/machinery/atmospherics/unary/vent_pump/proc/purge + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/unary/vent_pump, purge) /singleton/stock_part_preset/radio/event_transmitter/vent_pump frequency = PUMP_FREQ diff --git a/code/modules/atmospherics/components/unary/vent_scrubber.dm b/code/modules/atmospherics/components/unary/vent_scrubber.dm index bd6413f60be89..1c1570500dd2e 100644 --- a/code/modules/atmospherics/components/unary/vent_scrubber.dm +++ b/code/modules/atmospherics/components/unary/vent_scrubber.dm @@ -66,7 +66,7 @@ if(!check_icon_cache()) return - overlays.Cut() + ClearOverlays() var/turf/T = get_turf(src) @@ -83,7 +83,7 @@ else scrubber_icon += "on" - overlays += icon_manager.get_atmos_icon("device", , , scrubber_icon) + AddOverlays(icon_manager.get_atmos_icon("device", , , scrubber_icon)) /obj/machinery/atmospherics/unary/vent_scrubber/update_underlays() if(..()) @@ -203,51 +203,25 @@ return SPAN_WARNING("You cannot take this [src] apart, it too exerted due to internal pressure.") return ..() -/obj/machinery/atmospherics/unary/vent_scrubber/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/weldingtool)) - - var/obj/item/weldingtool/WT = W - - if(!WT.isOn()) - to_chat(user, SPAN_NOTICE("The welding tool needs to be on to start this task.")) - return 1 - - if(!WT.remove_fuel(0,user)) - to_chat(user, SPAN_WARNING("You need more welding fuel to complete this task.")) - return 1 - - to_chat(user, SPAN_NOTICE("Now welding \the [src].")) - playsound(src, 'sound/items/Welder.ogg', 50, 1) - - if(!do_after(user, 2 SECONDS, src, DO_REPAIR_CONSTRUCT)) - to_chat(user, SPAN_NOTICE("You must remain close to finish this task.")) - return 1 - - if(!src) - return 1 - - if(!WT.isOn()) - to_chat(user, SPAN_NOTICE("The welding tool needs to be on to finish this task.")) - return 1 - - welded = !welded - update_icon() - playsound(src, 'sound/items/Welder2.ogg', 50, 1) - user.visible_message(SPAN_NOTICE("\The [user] [welded ? "welds \the [src] shut" : "unwelds \the [src]"]."), \ - SPAN_NOTICE("You [welded ? "weld \the [src] shut" : "unweld \the [src]"]."), \ - "You hear welding.") - return 1 - - return ..() +/obj/machinery/atmospherics/unary/vent_scrubber/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.tool_start_check(user, 1)) + return + USE_FEEDBACK_WELD_UNWELD(user, welded) + if(!tool.use_as_tool(src, user, 2 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + welded = !welded + update_icon() + USE_FEEDBACK_WELD_UNWELD_FINISH(user, welded) /obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user, distance) . = ..() if(distance <= 1) - to_chat(user, "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W") + . += SPAN_NOTICE("A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W") else - to_chat(user, "You are too far away to read the gauge.") + . += SPAN_NOTICE("You are too far away to read the gauge.") if(welded) - to_chat(user, "It seems welded shut.") + . += SPAN_NOTICE("It seems welded shut.") /obj/machinery/atmospherics/unary/vent_scrubber/refresh() ..() @@ -315,13 +289,13 @@ /singleton/public_access/public_method/toggle_panic_siphon name = "toggle panic siphon" desc = "Toggles the panic siphon function." - call_proc = /obj/machinery/atmospherics/unary/vent_scrubber/proc/toggle_panic + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/unary/vent_scrubber, toggle_panic) /singleton/public_access/public_method/set_scrub_gas name = "set filter gases" desc = "Given a list of gases, sets whether the gas is being scrubbed to the value of the gas in the list." forward_args = TRUE - call_proc = /obj/machinery/atmospherics/unary/vent_scrubber/proc/set_scrub_gas + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/unary/vent_scrubber, set_scrub_gas) /singleton/stock_part_preset/radio/event_transmitter/vent_scrubber frequency = PUMP_FREQ diff --git a/code/modules/atmospherics/components/valve.dm b/code/modules/atmospherics/components/valve.dm index e9fbcad01ec2b..d6ea06bb789f7 100644 --- a/code/modules/atmospherics/components/valve.dm +++ b/code/modules/atmospherics/components/valve.dm @@ -99,7 +99,7 @@ network_node2.update = 1 if (usr) - visible_message(SPAN_WARNING("\The [usr] opens \the [src]."), range = 5) + visible_message(SPAN_WARNING("[usr] opens [src]."), range = 5) return 1 @@ -118,7 +118,7 @@ build_network() if (usr) - visible_message(SPAN_WARNING("\The [usr] closes \the [src]."), range = 5) + visible_message(SPAN_WARNING("[usr] closes [src]."), range = 5) return 1 @@ -215,28 +215,26 @@ return null -/obj/machinery/atmospherics/valve/attackby(obj/item/W as obj, mob/user as mob) - if (!istype(W, /obj/item/wrench)) - return ..() +/obj/machinery/atmospherics/valve/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/env_air = loc.return_air() - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, SPAN_WARNING("You cannot unwrench \the [src], it is too exerted due to internal pressure.")) - add_fingerprint(user) - return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You begin to unfasten \the [src]...")) - if (do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - user.visible_message( \ - SPAN_NOTICE("\The [user] unfastens \the [src]."), \ - SPAN_NOTICE("You have unfastened \the [src]."), \ - "You hear a ratchet.") - new /obj/item/pipe(loc, src) - qdel(src) + if((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) + to_chat(user, SPAN_WARNING("You cannot unwrench [src], it is too exerted due to internal pressure.")) + return + to_chat(user, SPAN_NOTICE("You begin to unfasten [src]...")) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_ATMOS, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message( \ + SPAN_NOTICE("[user] unfastens [src]."), \ + SPAN_NOTICE("You have unfastened [src]."), \ + "You hear a ratchet.") + new /obj/item/pipe(loc, src) + qdel(src) /obj/machinery/atmospherics/valve/examine(mob/user) . = ..() - to_chat(user, "It is [open ? "open" : "closed"].") + . += SPAN_NOTICE("It is [open ? "open" : "closed"].") /singleton/public_access/public_variable/valve_open expected_type = /obj/machinery/atmospherics/valve @@ -251,17 +249,17 @@ /singleton/public_access/public_method/open_valve name = "open valve" desc = "Sets the valve to open." - call_proc = /obj/machinery/atmospherics/valve/proc/open + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/valve, open) /singleton/public_access/public_method/close_valve name = "open valve" desc = "Sets the valve to open." - call_proc = /obj/machinery/atmospherics/valve/proc/close + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/valve, close) /singleton/public_access/public_method/toggle_valve name = "toggle valve" desc = "Toggles whether the valve is open or closed." - call_proc = /obj/machinery/atmospherics/valve/proc/toggle + call_proc = TYPE_PROC_REF(/obj/machinery/atmospherics/valve, toggle) /obj/machinery/atmospherics/valve/digital // can be controlled by AI name = "digital valve" diff --git a/code/modules/atmospherics/pipes.dm b/code/modules/atmospherics/pipes.dm index 5a029144b47fc..7118e9688fbfa 100644 --- a/code/modules/atmospherics/pipes.dm +++ b/code/modules/atmospherics/pipes.dm @@ -20,7 +20,7 @@ buckle_require_restraints = TRUE var/datum/sound_token/sound_token build_icon_state = "simple" - build_icon = 'icons/obj/pipe-item.dmi' + build_icon = 'icons/obj/atmospherics/pipe-item.dmi' pipe_class = PIPE_CLASS_BINARY atom_flags = ATOM_FLAG_CAN_BE_PAINTED @@ -44,7 +44,7 @@ if(parent.network) parent.network.leaks |= src else if (!new_leaking && leaking) - update_sound(0) + update_sound(FALSE) STOP_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) leaking = FALSE if(parent) @@ -54,7 +54,7 @@ /obj/machinery/atmospherics/pipe/proc/update_sound(playing) if(playing && !sound_token) - sound_token = GLOB.sound_player.PlayLoopingSound(src, SOUND_ID, "sound/machines/pipeleak.ogg", volume = 8, range = 3, falloff = 1, prefer_mute = TRUE) + sound_token = GLOB.sound_player.PlayLoopingSound(src, SOUND_ID, 'sound/machines/pipeleak.ogg', volume = 8, range = 3, falloff = 1, prefer_mute = TRUE) else if(!playing && sound_token) QDEL_NULL(sound_token) @@ -68,32 +68,28 @@ return 1 /obj/machinery/atmospherics/pipe/return_air() - if(!parent) + if(!parent && !QDELING(src)) parent = new /datum/pipeline() parent.build_pipeline(src) - - return parent.air + return parent?.air /obj/machinery/atmospherics/pipe/build_network() - if(!parent) + if(!parent && !QDELING(src)) parent = new /datum/pipeline() parent.build_pipeline(src) - - return parent.return_network() + return parent?.return_network() /obj/machinery/atmospherics/pipe/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(!parent) + if(!parent && !QDELING(src)) parent = new /datum/pipeline() parent.build_pipeline(src) - - return parent.network_expand(new_network, reference) + return parent?.network_expand(new_network, reference) /obj/machinery/atmospherics/pipe/return_network(obj/machinery/atmospherics/reference) - if(!parent) + if(!parent && !QDELING(src)) parent = new /datum/pipeline() parent.build_pipeline(src) - - return parent.return_network(reference) + return parent?.return_network(reference) /obj/machinery/atmospherics/pipe/Destroy() QDEL_NULL(parent) @@ -105,46 +101,42 @@ . = ..() -/obj/machinery/atmospherics/pipe/attackby(obj/item/W as obj, mob/user as mob) - if (istype(src, /obj/machinery/atmospherics/unary/tank)) - return ..() - if (istype(src, /obj/machinery/atmospherics/pipe/vent)) - return ..() - - if(isWrench(W)) - var/turf/T = src.loc - if (level==ATOM_LEVEL_UNDER_TILE && isturf(T) && !T.is_plating()) - to_chat(user, SPAN_WARNING("You must remove the plating first.")) - return 1 - - if (clamp) - to_chat(user, SPAN_WARNING("You must remove \the [clamp] first.")) - return TRUE - - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - - if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - to_chat(user, SPAN_WARNING("You cannot unwrench \the [src], it is too exerted due to internal pressure.")) - add_fingerprint(user) - return 1 - - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You begin to unfasten \the [src]...")) +/obj/machinery/atmospherics/pipe/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + var/turf/T = src.loc + if(level == ATOM_LEVEL_UNDER_TILE && isturf(T) && !T.is_plating()) + to_chat(user, SPAN_WARNING("You must remove the plating first.")) + return + if(clamp) + to_chat(user, SPAN_WARNING("You must remove [clamp] first.")) + return - if (do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT)) - if (clamp) - to_chat(user, SPAN_WARNING("You must remove \the [clamp] first.")) - return TRUE + var/datum/gas_mixture/int_air = return_air() + var/datum/gas_mixture/env_air = loc.return_air() - user.visible_message(SPAN_NOTICE("\The [user] unfastens \the [src]."), SPAN_NOTICE("You have unfastened \the [src]."), "You hear a ratchet.") + if((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE) + to_chat(user, SPAN_WARNING("You cannot unwrench [src], it is too exerted due to internal pressure.")) + return - new /obj/item/pipe(loc, src) + to_chat(user, SPAN_NOTICE("You begin to unfasten [src]...")) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_ATMOS, do_flags = DO_REPAIR_CONSTRUCT) || clamp) + return + user.visible_message( + SPAN_NOTICE("[user] unfastens [src]."), + SPAN_NOTICE("You have unfastened [src]."), + "You hear a ratchet.") + + new /obj/item/pipe(loc, src) + for(var/obj/machinery/meter/meter in T) + if(meter.target == src) + meter.dismantle() + qdel(src) - for (var/obj/machinery/meter/meter in T) - if (meter.target == src) - meter.dismantle() - qdel(src) +/obj/machinery/atmospherics/pipe/use_tool(obj/item/W, mob/living/user, list/click_params) + if(istype(W, /obj/item/pipe)) + user.unEquip(W, loc) + return TRUE + . = ..() /obj/machinery/atmospherics/get_color() return pipe_color @@ -196,7 +188,7 @@ /obj/machinery/atmospherics/pipe/simple/hide(i) if(istype(loc, /turf/simulated)) - set_invisibility(i ? 101 : 0) + set_invisibility(i ? INVISIBILITY_ABSTRACT : 0) update_icon() /obj/machinery/atmospherics/pipe/simple/Process() @@ -206,9 +198,9 @@ parent.mingle_with_turf(loc, volume) var/air = parent.air && parent.air.return_pressure() if(!sound_token && air) - update_sound(1) + update_sound(TRUE) else if(sound_token && !air) - update_sound(0) + update_sound(FALSE) else . = PROCESS_KILL @@ -234,9 +226,9 @@ /obj/machinery/atmospherics/pipe/simple/proc/burst() ASSERT(parent) parent.temporarily_store_air() - src.visible_message(SPAN_DANGER("\The [src] bursts!")); + src.visible_message(SPAN_DANGER("[src] bursts!")); playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) - var/datum/effect/effect/system/smoke_spread/smoke = new + var/datum/effect/smoke_spread/smoke = new smoke.set_up(1,0, src.loc, 0) smoke.start() qdel(src) @@ -269,7 +261,7 @@ alpha = 255 - overlays.Cut() + ClearOverlays() if(!node1 && !node2) var/turf/T = get_turf(src) @@ -279,10 +271,10 @@ meter.dismantle() qdel(src) else if(node1 && node2) - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]intact[icon_connect_type]") + AddOverlays(icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]intact[icon_connect_type]")) set_leaking(FALSE) else - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]exposed[node1?1:0][node2?1:0][icon_connect_type]") + AddOverlays(icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]exposed[node1?1:0][node2?1:0][icon_connect_type]")) set_leaking(TRUE) /obj/machinery/atmospherics/pipe/simple/update_underlays() @@ -450,7 +442,7 @@ /obj/machinery/atmospherics/pipe/manifold/hide(i) if(istype(loc, /turf/simulated)) - set_invisibility(i ? 101 : 0) + set_invisibility(i ? INVISIBILITY_ABSTRACT : 0) update_icon() /obj/machinery/atmospherics/pipe/manifold/pipeline_expansion() @@ -522,9 +514,9 @@ meter.dismantle() qdel(src) else - overlays.Cut() - overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type) - overlays += icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type) + ClearOverlays() + AddOverlays(icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type)) + AddOverlays(icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type)) underlays.Cut() var/turf/T = get_turf(src) @@ -635,6 +627,9 @@ /obj/machinery/atmospherics/pipe/manifold/visible/fuel name = "Fuel pipe manifold" color = PIPE_COLOR_ORANGE + maximum_pressure = 420*ONE_ATMOSPHERE + fatigue_pressure = 350*ONE_ATMOSPHERE + alert_pressure = 350*ONE_ATMOSPHERE connect_types = CONNECT_TYPE_FUEL /obj/machinery/atmospherics/pipe/manifold/hidden @@ -678,6 +673,9 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/fuel name = "Fuel pipe manifold" color = PIPE_COLOR_ORANGE + maximum_pressure = 420*ONE_ATMOSPHERE + fatigue_pressure = 350*ONE_ATMOSPHERE + alert_pressure = 350*ONE_ATMOSPHERE connect_types = CONNECT_TYPE_FUEL /obj/machinery/atmospherics/pipe/manifold4w @@ -783,9 +781,9 @@ meter.dismantle() qdel(src) else - overlays.Cut() - overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type) - overlays += icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type) + ClearOverlays() + AddOverlays(icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type)) + AddOverlays(icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type)) underlays.Cut() /* @@ -825,7 +823,7 @@ /obj/machinery/atmospherics/pipe/manifold4w/hide(i) if(istype(loc, /turf/simulated)) - set_invisibility(i ? 101 : 0) + set_invisibility(i ? INVISIBILITY_ABSTRACT : 0) update_icon() /obj/machinery/atmospherics/pipe/manifold4w/atmos_init() @@ -903,6 +901,9 @@ /obj/machinery/atmospherics/pipe/manifold4w/visible/fuel name = "4-way fuel pipe manifold" color = PIPE_COLOR_ORANGE + maximum_pressure = 420*ONE_ATMOSPHERE + fatigue_pressure = 350*ONE_ATMOSPHERE + alert_pressure = 350*ONE_ATMOSPHERE connect_types = CONNECT_TYPE_FUEL /obj/machinery/atmospherics/pipe/manifold4w/hidden @@ -946,6 +947,9 @@ /obj/machinery/atmospherics/pipe/manifold4w/hidden/fuel name = "4-way fuel pipe manifold" color = PIPE_COLOR_ORANGE + maximum_pressure = 420*ONE_ATMOSPHERE + fatigue_pressure = 350*ONE_ATMOSPHERE + alert_pressure = 350*ONE_ATMOSPHERE connect_types = CONNECT_TYPE_FUEL /obj/machinery/atmospherics/pipe/cap @@ -964,7 +968,7 @@ /obj/machinery/atmospherics/pipe/cap/hide(i) if(istype(loc, /turf/simulated)) - set_invisibility(i ? 101 : 0) + set_invisibility(i ? INVISIBILITY_ABSTRACT : 0) update_icon() /obj/machinery/atmospherics/pipe/cap/pipeline_expansion() @@ -1003,8 +1007,8 @@ alpha = 255 - overlays.Cut() - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, icon_state) + ClearOverlays() + AddOverlays(icon_manager.get_atmos_icon("pipe", , pipe_color, icon_state)) /obj/machinery/atmospherics/pipe/cap/atmos_init() ..() @@ -1041,6 +1045,9 @@ name = "fuel pipe endcap" desc = "An endcap for fuel pipes." color = PIPE_COLOR_ORANGE + maximum_pressure = 420*ONE_ATMOSPHERE + fatigue_pressure = 350*ONE_ATMOSPHERE + alert_pressure = 350*ONE_ATMOSPHERE connect_types = CONNECT_TYPE_FUEL /obj/machinery/atmospherics/pipe/cap/hidden @@ -1068,6 +1075,9 @@ name = "fuel pipe endcap" desc = "An endcap for fuel pipes." color = PIPE_COLOR_ORANGE + maximum_pressure = 420*ONE_ATMOSPHERE + fatigue_pressure = 350*ONE_ATMOSPHERE + alert_pressure = 350*ONE_ATMOSPHERE connect_types = CONNECT_TYPE_FUEL /obj/machinery/atmospherics/pipe/vent @@ -1163,8 +1173,8 @@ alpha = 255 - overlays.Cut() - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal") + ClearOverlays() + AddOverlays(icon_manager.get_atmos_icon("pipe", , pipe_color, "universal")) underlays.Cut() if (node1) @@ -1198,8 +1208,8 @@ alpha = 255 - overlays.Cut() - overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal") + ClearOverlays() + AddOverlays(icon_manager.get_atmos_icon("pipe", , pipe_color, "universal")) underlays.Cut() if (node1) diff --git a/code/modules/augment/active.dm b/code/modules/augment/active.dm index 9dac9ed03138d..6c26a6004afbc 100644 --- a/code/modules/augment/active.dm +++ b/code/modules/augment/active.dm @@ -8,7 +8,8 @@ /obj/item/organ/internal/augment/active/proc/activate() - + set category = "Object" + set name = "Activate" /obj/item/organ/internal/augment/active/onInstall() limb = owner.get_organ(parent_organ) diff --git a/code/modules/augment/active/armblades.dm b/code/modules/augment/active/armblades.dm index 5ed7bdad2a3a7..75e71588007b2 100644 --- a/code/modules/augment/active/armblades.dm +++ b/code/modules/augment/active/armblades.dm @@ -13,6 +13,14 @@ edge = TRUE attack_verb = list("stabbed", "sliced", "cut") +/obj/item/material/armblade/mounted + name = "hardsuit armblade" + desc = "An extra large, extra sharp armblade. Rip and tear." + default_material = MATERIAL_PLASTEEL + +/obj/item/material/armblade/mounted/dropped() /// This should not exist on its own + ..() + QDEL_IN(src, 0) /obj/item/organ/internal/augment/active/item/armblade name = "embedded blade" diff --git a/code/modules/augment/active/circuit.dm b/code/modules/augment/active/circuit.dm index d805174ee95d9..c2514a97fe3e1 100644 --- a/code/modules/augment/active/circuit.dm +++ b/code/modules/augment/active/circuit.dm @@ -6,18 +6,19 @@ augment_flags = AUGMENT_MECHANICAL | AUGMENT_SCANNABLE desc = "A DIY modular assembly, courtesy of Xion Industrial. Circuitry not included." +/obj/item/organ/internal/augment/active/item/circuit/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!item) + to_chat(user, SPAN_WARNING("The augment is empty!")) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + item.canremove = TRUE + item.dropInto(loc) + to_chat(user, SPAN_NOTICE("You take out [item].")) + item = null /obj/item/organ/internal/augment/active/item/circuit/attackby(obj/item/I, mob/user) - if (isCrowbar(I)) - if (item) - item.canremove = TRUE - item.dropInto(loc) - to_chat(user, SPAN_NOTICE("You take out \the [item].")) - item = null - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - else - to_chat(user, SPAN_WARNING("The augment is empty!")) - return if (istype(I, /obj/item/device/electronic_assembly/augment)) if (item) to_chat(user, SPAN_WARNING("There's already an assembly in there.")) diff --git a/code/modules/augment/active/iatric_monitor.dm b/code/modules/augment/active/iatric_monitor.dm index d6461781d773f..85b8f9ef47b91 100644 --- a/code/modules/augment/active/iatric_monitor.dm +++ b/code/modules/augment/active/iatric_monitor.dm @@ -10,14 +10,14 @@ /obj/item/organ/internal/augment/active/iatric_monitor/emp_act(severity) . = ..() if (prob(100 / severity)) - var/scan_results = medical_scan_results(owner, TRUE, SKILL_NONE) + var/scan_results = medical_scan_results(owner, TRUE, SKILL_UNSKILLED) owner.playsound_local(null, 'sound/effects/fastbeep.ogg', 20, is_global = TRUE) to_chat(owner, "
      [scan_results]
      ") to_chat(owner, SPAN_WARNING("Your [name] cheerily outputs a bogus report as it malfunctions.")) /obj/item/organ/internal/augment/active/iatric_monitor/activate() - var/scan_results = medical_scan_results(owner, TRUE, SKILL_PROF) + var/scan_results = medical_scan_results(owner, TRUE, SKILL_MASTER) owner.playsound_local(null, 'sound/effects/fastbeep.ogg', 20, is_global = TRUE) to_chat(owner, "
      [scan_results]
      ") diff --git a/code/modules/augment/active/nerve_dampeners.dm b/code/modules/augment/active/nerve_dampeners.dm index 9ee2fb1613a2e..c96bb701e7b92 100644 --- a/code/modules/augment/active/nerve_dampeners.dm +++ b/code/modules/augment/active/nerve_dampeners.dm @@ -3,7 +3,7 @@ augment_slots = AUGMENT_CHEST icon_state = "muscule" desc = "Each activation of this augment provides a strong painkilling effect for around thirty seconds, but will be followed by a powerful comedown. Excessive short-term use may cause brain damage." - augment_flags = AUGMENT_BIOLOGICAL + augment_flags = AUGMENT_BIOLOGICAL | AUGMENT_SCANNABLE origin_tech = list(TECH_DATA = 4, TECH_BIO = 4) var/ticks_remaining = 0 @@ -37,9 +37,12 @@ if (!ticks_remaining) // ...but comes at a price. Brief short term benefit for a long-term comedown to_chat(owner, SPAN_WARNING("You abruptly feel intensely exhausted as sensation returns.")) owner.drowsyness = max(owner.drowsyness, 15) - owner.confused = max(owner.confused, 15) + owner.set_confused(15) owner.slurring = max(owner.slurring, 30) owner.chem_effects[CE_PAINKILLER] = 0 owner.stamina = 0 if(MOVING_QUICKLY(owner)) owner.set_moving_slowly() + +/obj/item/organ/internal/augment/active/nerve_dampeners/hidden + augment_flags = AUGMENT_BIOLOGICAL diff --git a/code/modules/augment/active/polytool.dm b/code/modules/augment/active/polytool.dm index ddd8d81876e13..e2c972ec42f65 100644 --- a/code/modules/augment/active/polytool.dm +++ b/code/modules/augment/active/polytool.dm @@ -1,5 +1,5 @@ /obj/item/organ/internal/augment/active/polytool - name = "Polytool embedded module" + name = "polytool embedded module" action_button_name = "Deploy Tool" icon_state = "multitool" augment_slots = AUGMENT_HAND @@ -55,7 +55,7 @@ if (owner.equip_to_slot_if_possible(item, slot)) items -= item //Keep track of it, make sure it returns - GLOB.item_unequipped_event.register(item, src, /obj/item/organ/internal/augment/active/polytool/proc/holding_dropped) + GLOB.item_unequipped_event.register(item, src, TYPE_PROC_REF(/obj/item/organ/internal/augment/active/polytool, holding_dropped)) owner.visible_message( SPAN_WARNING("[owner] extends \his [item.name] from [limb]."), SPAN_NOTICE("You extend your [item.name] from [limb].") diff --git a/code/modules/augment/active/powerfist.dm b/code/modules/augment/active/powerfist.dm index 6dea88447d109..c4db74f238408 100644 --- a/code/modules/augment/active/powerfist.dm +++ b/code/modules/augment/active/powerfist.dm @@ -121,21 +121,21 @@ /obj/item/powerfist/on_update_icon() ..() if (tank) - overlays += image(icon, "powerfist_tank") + AddOverlays(image(icon, "powerfist_tank")) else - overlays -= image(icon,"powerfist_tank") + CutOverlays("powerfist_tank") /obj/item/powerfist/examine(mob/living/user, distance) . = ..() if (distance > 2) return - to_chat(user, "The valve is dialed to [pressure_setting]%.") + . += SPAN_NOTICE("The valve is dialed to [pressure_setting]%.") if (tank) - to_chat(user, "\A [tank] is fitted in \the [src]'s tank valve.") - to_chat(user, "The tank dial reads [tank.air_contents.return_pressure()] kPa.") + . += SPAN_NOTICE("[tank] is fitted in [src]'s tank valve.") + . += SPAN_NOTICE("The tank dial reads [tank.air_contents.return_pressure()] kPa.") else - to_chat(user, "Nothing is attached to the tank valve!") + . += SPAN_NOTICE("Nothing is attached to the tank valve!") /obj/item/powerfist/proc/gas_loss() @@ -151,43 +151,50 @@ update_force() -/obj/item/powerfist/afterattack(atom/target, mob/living/user, inrange, params) - if (!inrange || user.a_intent == I_HELP) - return - if (tank && tank.air_contents.return_pressure() > 210 && pressure_setting > 20 && inrange) +/obj/item/powerfist/use_before(atom/target, mob/living/user, click_parameters) + if (user.a_intent == I_HELP || !istype(target, /obj/machinery/door/airlock)) + return FALSE + + var/obj/machinery/door/airlock/A = target + + if (A.operating) + return FALSE + + if (A.locked) + to_chat(user, SPAN_WARNING("The airlock's bolts prevent it from being forced.")) + return TRUE + + if (tank && tank.air_contents.return_pressure() > 210 && pressure_setting > 20) playsound(user, 'sound/effects/bamf.ogg', pressure_setting*2, 1) //louder the more pressure is used gas_loss() no_pressure() - if (istype(target, /obj/machinery/door/airlock) && pressure_setting > 30) //tearing open airlocks - var/obj/machinery/door/airlock/A = target - if (!A.operating && !A.locked) - if (A.welded) - A.visible_message(SPAN_DANGER("\The [user] forces the fingers of \the [src] in through the welded metal, beginning to pry \the [A] open!")) - if (do_after(user, 13 SECONDS, A, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && !A.locked) - A.welded = FALSE - A.update_icon() - playsound(A, 'sound/effects/meteorimpact.ogg', 100, 1) - playsound(A, 'sound/machines/airlock_creaking.ogg', 100, 1) - A.visible_message(SPAN_DANGER("\The [user] tears \the [A] open with \a [src]!")) - addtimer(new Callback(A, /obj/machinery/door/airlock/.proc/open, TRUE), 0) - A.set_broken(TRUE) - return - else - A.visible_message(SPAN_DANGER("\The [user] pries the fingers of \a [src] in, beginning to force \the [A]!")) - if ((MACHINE_IS_BROKEN(A) || !A.is_powered() || do_after(user, 10 SECONDS, A, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) && !(A.operating || A.welded || A.locked)) - playsound(A, 'sound/machines/airlock_creaking.ogg', 100, 1) - if (A.density) - addtimer(new Callback(A, /obj/machinery/door/airlock/.proc/open, TRUE), 0) - if(!MACHINE_IS_BROKEN(A) && A.is_powered()) - A.set_broken(TRUE) - A.visible_message(SPAN_DANGER("\The [user] forces \the [A] open with \a [src]!")) - else - addtimer(new Callback(A, /obj/machinery/door/airlock/.proc/close, TRUE), 0) - if (!MACHINE_IS_BROKEN(A) && A.is_powered()) - A.set_broken(TRUE) - A.visible_message(SPAN_DANGER("\The [user] forces \the [A] closed with \a [src]!")) - if (A.locked) - to_chat(user, SPAN_WARNING("The airlock's bolts prevent it from being forced.")) + if (pressure_setting > 30) //tearing open airlocks + if (A.welded) + A.visible_message(SPAN_DANGER("\The [user] forces the fingers of \the [src] in through the welded metal, beginning to pry \the [A] open!")) + if (do_after(user, 13 SECONDS, A, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && !A.locked) + A.welded = FALSE + A.update_icon() + playsound(A, 'sound/effects/meteorimpact.ogg', 100, 1) + playsound(A, 'sound/machines/airlock_creaking.ogg', 100, 1) + A.visible_message(SPAN_DANGER("\The [user] tears \the [A] open with \a [src]!")) + addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/door/airlock, open), TRUE), 0) + A.set_broken(TRUE) + return TRUE + else + A.visible_message(SPAN_DANGER("\The [user] pries the fingers of \a [src] in, beginning to force \the [A]!")) + if ((MACHINE_IS_BROKEN(A) || !A.is_powered() || do_after(user, 10 SECONDS, A, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) && !(A.operating || A.welded || A.locked)) + playsound(A, 'sound/machines/airlock_creaking.ogg', 100, 1) + if (A.density) + addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/door/airlock, open), TRUE), 0) + if(!MACHINE_IS_BROKEN(A) && A.is_powered()) + A.set_broken(TRUE) + A.visible_message(SPAN_DANGER("\The [user] forces \the [A] open with \a [src]!")) + else + addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/door/airlock, close), TRUE), 0) + if (!MACHINE_IS_BROKEN(A) && A.is_powered()) + A.set_broken(TRUE) + A.visible_message(SPAN_DANGER("\The [user] forces \the [A] closed with \a [src]!")) + return TRUE /obj/item/powerfist/apply_hit_effect(atom/target, mob/living/user) diff --git a/code/modules/augment/active/tool/engineering.dm b/code/modules/augment/active/tool/engineering.dm index 668bba60c8f54..3ff8df31d8fd6 100644 --- a/code/modules/augment/active/tool/engineering.dm +++ b/code/modules/augment/active/tool/engineering.dm @@ -1,5 +1,5 @@ /obj/item/organ/internal/augment/active/polytool/engineer - name = "\improper Engineering toolset" + name = "engineering toolset" action_button_name = "Deploy Engineering Tool" desc = "A lightweight augmentation for the engineer on-the-go. This one comes with a series of common tools." paths = list( @@ -17,6 +17,7 @@ desc = "A precise, high quality welding tool." icon_state = "welder_finger" icon = 'icons/obj/augment_tools.dmi' + canremove = FALSE /obj/item/weldingtool/finger/on_update_icon() @@ -29,6 +30,7 @@ icon_state = "wirecutter_finger" icon = 'icons/obj/augment_tools.dmi' build_from_parts = FALSE + canremove = FALSE /obj/item/wirecutters/finger/Initialize() @@ -43,6 +45,7 @@ icon_state = "screwdriver_finger" icon = 'icons/obj/augment_tools.dmi' build_from_parts = FALSE + canremove = FALSE /obj/item/screwdriver/finger/Initialize() @@ -56,6 +59,7 @@ desc = "A somewhat awkward to use prybar. It doubles as bottle opener." icon_state = "prybar_finger" icon = 'icons/obj/augment_tools.dmi' + canremove = FALSE /obj/item/crowbar/finger/Initialize() @@ -69,6 +73,7 @@ desc = "A rotating wrench. Don't get your hair caught in it." icon_state = "wrench_finger" icon = 'icons/obj/augment_tools.dmi' + canremove = FALSE /obj/item/wrench/finger/Initialize() @@ -82,3 +87,4 @@ desc = "A multitool inside of a multitool. Doubletool?" icon_state = "multitool_finger" icon = 'icons/obj/augment_tools.dmi' + canremove = FALSE diff --git a/code/modules/augment/active/tool/surgical.dm b/code/modules/augment/active/tool/surgical.dm index c54fd30c76b02..0907643356d88 100644 --- a/code/modules/augment/active/tool/surgical.dm +++ b/code/modules/augment/active/tool/surgical.dm @@ -9,6 +9,6 @@ /obj/item/circular_saw, /obj/item/hemostat, /obj/item/retractor, - /obj/item/scalpel, + /obj/item/scalpel/basic, /obj/item/surgicaldrill ) diff --git a/code/modules/augment/augment.dm b/code/modules/augment/augment.dm index 3a151de51a344..b7bc00f41e54e 100644 --- a/code/modules/augment/augment.dm +++ b/code/modules/augment/augment.dm @@ -12,13 +12,13 @@ #define ORGAN_STYLE ( \ - (organ.status & ORGAN_ROBOTIC) ? 1 \ +(organ.status & ORGAN_ROBOTIC) ? 1 \ : (organ.status & ORGAN_CRYSTAL) ? 2 \ : 0 \ ) #define ORGAN_STYLE_OK ( \ - style == 0 && (augment_flags & AUGMENT_BIOLOGICAL) \ +style == 0 && (augment_flags & AUGMENT_BIOLOGICAL) \ || style == 1 && (augment_flags & AUGMENT_MECHANICAL) \ || style == 2 && (augment_flags & AUGMENT_CRYSTALINE) \ ) @@ -157,9 +157,9 @@ return else if (user.mind?.special_role) level = 2 - else if (user.skill_check(SKILL_DEVICES, SKILL_PROF)) + else if (user.skill_check(SKILL_DEVICES, SKILL_MASTER)) level = 2 - else if (user.skill_check(SKILL_DEVICES, SKILL_ADEPT)) + else if (user.skill_check(SKILL_DEVICES, SKILL_TRAINED)) level = 1 if (!level) return @@ -196,7 +196,7 @@ message += " It can be discovered by [english_list(discovery)]." else message += " It is undetectable." - to_chat(user, message) + . += SPAN_NOTICE("[message]") /datum/codex_entry/augment diff --git a/code/modules/augment/implanter.dm b/code/modules/augment/implanter.dm index 5059783771fcf..5c018967ff50b 100644 --- a/code/modules/augment/implanter.dm +++ b/code/modules/augment/implanter.dm @@ -1,8 +1,8 @@ /obj/item/device/augment_implanter - name = "augment autodoc" + name = "augment implanter" desc = "An oblong box with an irregular shape and a seam running down the center." - icon = 'icons/obj/surgery.dmi' - icon_state = "compact_bionic_module" + icon = 'icons/obj/tools/augment_implanter.dmi' + icon_state = "augment_implanter" w_class = ITEM_SIZE_NORMAL origin_tech = list(TECH_DATA = 3, TECH_ESOTERIC = 3) var/obj/item/organ/internal/augment/augment @@ -22,36 +22,32 @@ /obj/item/device/augment_implanter/examine(mob/user) . = ..() - if (isobserver(user) || (user.mind && user.mind.special_role != null) || user.skill_check(SKILL_DEVICES, SKILL_PROF)) - to_chat(user, "A single-use augment installer with no medical knowledge necessary! " + SPAN_DANGER("Painkillers not included!")) - if (isnull(augment)) - to_chat(user, "It seems to be empty.") + if(isobserver(user) || (user.mind && user.mind.special_role != null) || user.skill_check(SKILL_DEVICES, SKILL_MASTER)) + . += SPAN_NOTICE("A single-use augment installer with no medical knowledge necessary! " + SPAN_DANGER("Painkillers not included!")) + if(isnull(augment)) + . += SPAN_NOTICE("It seems to be empty.") return - to_chat(user, SPAN_BOLD("It contains:")) - augment.examine(user) - - -/obj/item/device/augment_implanter/attackby(obj/item/I, mob/living/user) - if (isCrowbar(I) && augment) - user.visible_message( - SPAN_ITALIC("\The [user] starts to remove \the [augment] from \the [src]."), - SPAN_WARNING("You start to remove \the [augment] from \the [src]."), - SPAN_ITALIC("You hear metal creaking.") - ) - playsound(user, 'sound/items/Crowbar.ogg', 50, TRUE) - if (!do_after(user, 10 SECONDS, src, DO_PUBLIC_UNIQUE) || !augment) - return - user.visible_message( - SPAN_ITALIC("\The [user] removes \the [augment] from \the [src]."), - SPAN_WARNING("You remove \the [augment] from \the [src]."), - SPAN_ITALIC("You hear a clunk.") - ) - playsound(user, 'sound/items/Deconstruct.ogg', 50, TRUE) - user.put_in_hands(augment) - augment = null - return - ..() + . += SPAN_NOTICE("It contains:") + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(examinate), user, augment), 0.1 SECONDS) +/obj/item/device/augment_implanter/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!augment) + USE_FEEDBACK_FAILURE("[src] has no augment to remove.") + return + user.visible_message( + SPAN_NOTICE("[user] starts to remove [augment] from [src] with [tool]."), + SPAN_NOTICE("You start to remove [augment] from [src] with [tool].") + ) + if(!tool.use_as_tool(src, user, 10 SECONDS, volume = 50, skill_path = SKILL_DEVICES, do_flags = DO_PUBLIC_UNIQUE) || !augment) + return + user.put_in_hands(augment) + playsound(src, 'sound/items/Crowbar.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] removes [augment] from [src] with [tool]."), + SPAN_NOTICE("You remove [augment] from [src] with [tool].") + ) + augment = null /obj/item/device/augment_implanter/attack_self(mob/living/carbon/human/user) if (working) @@ -59,27 +55,27 @@ if (!istype(user)) return if (!augment) - to_chat(user, SPAN_WARNING("\The [src] is empty.")) + to_chat(user, SPAN_WARNING("[src] is empty.")) return if (!ishuman(user)) - to_chat(user, SPAN_WARNING("\The [src] is incompatible with you.")) + to_chat(user, SPAN_WARNING("[src] is incompatible with you.")) return var/target_zone = user.zone_sel.selecting if (!target_zone) return var/obj/item/organ/external/parent = user.get_organ(target_zone) if (!parent) - to_chat(user, SPAN_WARNING("You don't have \a [target_zone]!")) + to_chat(user, SPAN_WARNING("You don't have [target_zone]!")) return var/flavor = (parent.status & ORGAN_ROBOTIC) ? 1 : (parent.status & ORGAN_CRYSTAL) ? 2 : 0 if (flavor == 0 && !(augment.augment_flags & AUGMENT_BIOLOGICAL)) - to_chat(user, SPAN_WARNING("\The [augment] cannot be installed in biological organs.")) + to_chat(user, SPAN_WARNING("[augment] cannot be installed in biological organs.")) return if (flavor == 1 && !(augment.augment_flags & AUGMENT_MECHANICAL)) - to_chat(user, SPAN_WARNING("\The [augment] cannot be installed in mechanical organs.")) + to_chat(user, SPAN_WARNING("[augment] cannot be installed in mechanical organs.")) return if (flavor == 2 && !(augment.augment_flags & AUGMENT_CRYSTALINE)) - to_chat(user, SPAN_WARNING("\The [augment] cannot be installed in crystaline organs.")) + to_chat(user, SPAN_WARNING("[augment] cannot be installed in crystaline organs.")) return var/surgery_step = GET_SINGLETON(/singleton/surgery_step/internal/replace_organ) if (augment.surgery_configure(user, user, parent, src, surgery_step)) @@ -99,10 +95,10 @@ if (!instant) working = TRUE to_chat(user, SPAN_WARNING("\icon[src] Commencing procedure. " + SPAN_DANGER("Please remain calm."))) - user.visible_message(SPAN_WARNING("\The [user] places \his [parent.name] against \the [src].")) + user.visible_message(SPAN_WARNING("[user] places \his [parent.name] against [src].")) if (!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) goto FailedAugmentImplant - user.visible_message(SPAN_DANGER("\The [src] purrs maliciously and unfurls its armatures with frightening speed!")) + user.visible_message(SPAN_DANGER("[src] purrs maliciously and unfurls its armatures with frightening speed!")) if (flavor != 1) user.custom_pain("Your [parent.name] feels like it's being shredded apart!", 160) else @@ -114,18 +110,18 @@ parent.fracture() if (!do_after(user, 8 SECONDS, src, DO_PUBLIC_UNIQUE)) goto FailedAugmentImplant - user.visible_message(SPAN_DANGER("\The [src] begins to insert its payload into \the [user]'s [parent.name]!")) + user.visible_message(SPAN_DANGER("[src] begins to insert its payload into [user]'s [parent.name]!")) if (flavor != 1) user.custom_pain("You feel something rooting around violently inside your [parent.name]!", 160) else - to_chat(user, SPAN_ITALIC("Your [parent.name] shifts and twitches as \the [src] works.")) + to_chat(user, SPAN_ITALIC("Your [parent.name] shifts and twitches as [src] works.")) if (!flavor) playsound(user, 'sound/effects/squelch1.ogg', 25, TRUE) else playsound(user, 'sound/items/jaws_pry.ogg', 50, TRUE) if (!do_after(user, 8 SECONDS, src, DO_PUBLIC_UNIQUE)) goto FailedAugmentImplant - user.visible_message(SPAN_WARNING("\The [src] withdraws from \the [user]'s [parent.name] and seals the [flavor != 1 ? "wound" : "hatch"].")) + user.visible_message(SPAN_WARNING("[src] withdraws from [user]'s [parent.name] and seals the [flavor != 1 ? "wound" : "hatch"].")) if (!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) goto FailedAugmentImplant parent.status &= ~ORGAN_BROKEN @@ -141,7 +137,7 @@ FailedAugmentImplant: working = FALSE if (!success) - user.visible_message(SPAN_DANGER("\The [src] falls away from \the [user], leaving \his [parent.name] a mangled mess!")) + user.visible_message(SPAN_DANGER("[src] falls away from [user], leaving \his [parent.name] a mangled mess!")) parent.take_general_damage(15) return to_chat(user, SPAN_WARNING("\icon[src] Procedure complete. ") + SPAN_NOTICE("Have a nice day.")) @@ -161,7 +157,7 @@ augment = /obj/item/organ/internal/augment/active/item/popout_shotgun /obj/item/device/augment_implanter/nerve_dampeners - augment = /obj/item/organ/internal/augment/active/nerve_dampeners + augment = /obj/item/organ/internal/augment/active/nerve_dampeners/hidden /obj/item/device/augment_implanter/internal_air_system augment = /obj/item/organ/internal/augment/active/internal_air_system/hidden diff --git a/code/modules/augment/item.dm b/code/modules/augment/item.dm index 34009e345de14..9af4eb27aec16 100644 --- a/code/modules/augment/item.dm +++ b/code/modules/augment/item.dm @@ -64,7 +64,7 @@ return if (!owner.equip_to_slot_if_possible(item, slot)) return - GLOB.item_unequipped_event.register(item, src, /obj/item/organ/internal/augment/active/item/proc/item_dropped) + GLOB.item_unequipped_event.register(item, src, TYPE_PROC_REF(/obj/item/organ/internal/augment/active/item, item_dropped)) if (deploy_sound) playsound(owner, deploy_sound, 30) if (as_owner) diff --git a/code/modules/augment/passive/boost/muscle.dm b/code/modules/augment/passive/boost/muscle.dm index 2dc2583bec7fe..c45d30b3d84e8 100644 --- a/code/modules/augment/passive/boost/muscle.dm +++ b/code/modules/augment/passive/boost/muscle.dm @@ -21,7 +21,7 @@ other = owner.internal_organs_by_name["[BP_L_LEG]_aug"] if (other && istype(other)) //we must be second to activate buff var/succesful = TRUE - if (owner.get_skill_value(SKILL_HAULING) < SKILL_PROF) + if (owner.get_skill_value(SKILL_HAULING) < SKILL_MASTER) succesful = FALSE var/datum/skill_buff/augment/muscle/A A = owner.buff_skill(buffs, 0, buffpath) diff --git a/code/modules/augment/passive/nanoaura.dm b/code/modules/augment/passive/nanoaura.dm index 49cdf38a6a6ce..168a65830541b 100644 --- a/code/modules/augment/passive/nanoaura.dm +++ b/code/modules/augment/passive/nanoaura.dm @@ -1,5 +1,5 @@ /obj/item/organ/internal/augment/active/nanounit - name = "Nanite MCU" + name = "nanite MCU" augment_slots = AUGMENT_CHEST icon_state = "armor-chest" desc = "Nanomachines, son." @@ -57,9 +57,9 @@ to_chat(loc, SPAN_NOTICE("Your skin tingles as the nanites spread over your body.")) -/obj/aura/nanoaura/bullet_act(obj/item/projectile/P, def_zone) +/obj/aura/nanoaura/aura_check_bullet(obj/item/projectile/proj, def_zone) if (!active) - return + return EMPTY_BITFIELD if (unit.charges > 0) user.visible_message(SPAN_WARNING("The nanomachines harden as a response to physical trauma!")) playsound(user, 'sound/effects/basscannon.ogg',35,1) @@ -68,9 +68,10 @@ to_chat(user, SPAN_DANGER("Warning: Critical damage treshold passed. Shut down unit to avoid further damage")) return AURA_FALSE | AURA_CANCEL unit.catastrophic_failure() + return EMPTY_BITFIELD /obj/aura/nanoaura/Destroy() - to_chat(user, SPAN_WARNING("\The nanites dissolve!")) + to_chat(user, SPAN_WARNING("The nanites dissolve!")) unit = null return ..() diff --git a/code/modules/balloon_alert/balloon_alert.dm b/code/modules/balloon_alert/balloon_alert.dm new file mode 100644 index 0000000000000..7ac89f3b658a4 --- /dev/null +++ b/code/modules/balloon_alert/balloon_alert.dm @@ -0,0 +1,92 @@ +#define BALLOON_TEXT_WIDTH 200 +#define BALLOON_TEXT_SPAWN_TIME (0.2 SECONDS) +#define BALLOON_TEXT_FADE_TIME (0.1 SECONDS) +#define BALLOON_TEXT_FULLY_VISIBLE_TIME (0.7 SECONDS) +#define BALLOON_TEXT_TOTAL_LIFETIME(mult) (BALLOON_TEXT_SPAWN_TIME + BALLOON_TEXT_FULLY_VISIBLE_TIME*mult + BALLOON_TEXT_FADE_TIME) +/// The increase in duration per character in seconds +#define BALLOON_TEXT_CHAR_LIFETIME_INCREASE_MULT (0.05) +/// The amount of characters needed before this increase takes into effect +#define BALLOON_TEXT_CHAR_LIFETIME_INCREASE_MIN 10 + +/** + * Creates text that will float from the atom upwards to the viewer. + * + * Args: + * * mob/viewer: The mob the text will be shown to. Nullable (But only in the form of it won't runtime). + * * text: The text to be shown to viewer. Must not be null. + */ +/atom/proc/balloon_alert(mob/viewer, text) + SHOULD_NOT_SLEEP(TRUE) + + invoke_async(src, PROC_REF(balloon_alert_perform), viewer, text) + +/// Create balloon alerts (text that floats up) to everything within range. +/// Will only display to people who can see. +/atom/proc/balloon_alert_to_viewers(message, self_message, vision_distance = 7, list/ignored_mobs) + SHOULD_NOT_SLEEP(TRUE) + + var/list/hearers = mobs_in_view(vision_distance, src) + hearers -= ignored_mobs + + for (var/mob/hearer as anything in hearers) + if (hearer.is_blind()) + continue + + balloon_alert(hearer, (hearer == src && self_message) || message) + +// Do not use. +// MeasureText blocks. I have no idea for how long. +// I would've made the maptext_height update on its own, but I don't know +// if this would look bad on laggy clients. +/atom/proc/balloon_alert_perform(mob/viewer, text) + var/client/viewer_client = viewer?.client + if (isnull(viewer_client)) + return + + var/bound_width = world.icon_size + if (ismovable(src)) + var/atom/movable/movable_source = src + bound_width = movable_source.bound_width + + var/image/balloon_alert = image(loc = isturf(src) ? src : get_atom_on_turf(src), layer = CAMERA_LAYER) + balloon_alert.plane = BALLOON_CHAT_PLANE + balloon_alert.alpha = 0 + balloon_alert.appearance_flags = RESET_ALPHA|RESET_COLOR|RESET_TRANSFORM + balloon_alert.maptext = MAPTEXT("[text]") + balloon_alert.maptext_x = (BALLOON_TEXT_WIDTH - bound_width) * -0.5 + WXH_TO_HEIGHT(viewer_client?.MeasureText(text, null, BALLOON_TEXT_WIDTH), balloon_alert.maptext_height) + balloon_alert.maptext_width = BALLOON_TEXT_WIDTH + + add_image_to_client(balloon_alert, viewer_client) + + var/length_mult = 1 + max(0, length(strip_html_properly(text)) - BALLOON_TEXT_CHAR_LIFETIME_INCREASE_MIN) * BALLOON_TEXT_CHAR_LIFETIME_INCREASE_MULT + + animate( + balloon_alert, + pixel_y = world.icon_size * 1.2, + time = BALLOON_TEXT_TOTAL_LIFETIME(length_mult), + easing = SINE_EASING | EASE_OUT, + ) + + animate( + alpha = 255, + time = BALLOON_TEXT_SPAWN_TIME, + easing = CUBIC_EASING | EASE_OUT, + flags = ANIMATION_PARALLEL, + ) + + animate( + alpha = 0, + time = BALLOON_TEXT_FULLY_VISIBLE_TIME * length_mult, + easing = CUBIC_EASING | EASE_IN, + ) + + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_image_from_client), balloon_alert, viewer_client), BALLOON_TEXT_TOTAL_LIFETIME(length_mult)) + +#undef BALLOON_TEXT_CHAR_LIFETIME_INCREASE_MIN +#undef BALLOON_TEXT_CHAR_LIFETIME_INCREASE_MULT +#undef BALLOON_TEXT_FADE_TIME +#undef BALLOON_TEXT_FULLY_VISIBLE_TIME +#undef BALLOON_TEXT_SPAWN_TIME +#undef BALLOON_TEXT_TOTAL_LIFETIME +#undef BALLOON_TEXT_WIDTH diff --git a/code/modules/blob/blob.dm b/code/modules/blob/blob.dm index b757cfa18cb2d..7c7f102c954d5 100644 --- a/code/modules/blob/blob.dm +++ b/code/modules/blob/blob.dm @@ -5,12 +5,12 @@ ) -/obj/effect/blob +/obj/blob name = "pulsating mass" desc = "A pulsating mass of interwoven tendrils." icon = 'icons/mob/blob.dmi' icon_state = "blob" - light_outer_range = 2 + light_range = 2 light_color = BLOB_COLOR_PULS density = TRUE opacity = 1 @@ -39,7 +39,7 @@ var/regen_rate = 5 var/laser_resist = 2 // Special resist for laser based weapons - Emitters or handheld energy weaponry. Damage is divided by this and THEN by fire_resist. - var/expandType = /obj/effect/blob + var/expandType = /obj/blob var/secondary_core_growth_chance = 5 //% chance to grow a secondary blob core instead of whatever was suposed to grown. Secondary cores are considerably weaker, but still nasty. var/damage_min = 15 var/damage_max = 30 @@ -47,53 +47,53 @@ var/product = /obj/item/blob_tendril var/attack_freq = 5 //see proc/attempt_attack; lower is more often, min 1 -/obj/effect/blob/Initialize() +/obj/blob/Initialize() . = ..() START_PROCESSING(SSobj, src) -/obj/effect/blob/Destroy() +/obj/blob/Destroy() STOP_PROCESSING(SSobj, src) . = ..() -/obj/effect/blob/CanPass(atom/movable/mover, turf/target, height = 0, air_group = 0) +/obj/blob/CanPass(atom/movable/mover, turf/target, height = 0, air_group = 0) if(air_group || height == 0) return 1 return 0 -/obj/effect/blob/on_update_icon() +/obj/blob/on_update_icon() switch (get_damage_percentage()) if (0 to 49) icon_state = "blob" else icon_state = "blob_damaged" -/obj/effect/blob/Process(wait, times_fired) +/obj/blob/Process(wait, times_fired) regen() if(times_fired % attack_freq) return attempt_attack(GLOB.alldirs) -/obj/effect/blob/on_death() +/obj/blob/on_death() playsound(loc, 'sound/effects/splat.ogg', 50, 1) qdel(src) -/obj/effect/blob/post_health_change(health_mod, prior_health, damage_type) +/obj/blob/post_health_change(health_mod, prior_health, damage_type) ..() queue_icon_update() -/obj/effect/blob/proc/regen() +/obj/blob/proc/regen() restore_health(regen_rate) -/obj/effect/blob/proc/expand(turf/T) +/obj/blob/proc/expand(turf/T) if (!istype(T) || T.turf_flags & TURF_DISALLOW_BLOB) return var/damage = rand(damage_min, damage_max) var/damage_type = pick(DAMAGE_BRUTE, DAMAGE_BURN) - if (T.density && !T.health_dead) - visible_message(SPAN_DANGER("A tendril flies out from \the [src] and smashes into \the [T]!")) + if (T.density && !T.health_dead()) + visible_message(SPAN_DANGER("A tendril flies out from [src] and smashes into [T]!")) playsound(loc, 'sound/effects/attackblob.ogg', 50, 1) T.damage_health(damage) return @@ -122,7 +122,7 @@ var/density_check = FALSE for (var/atom/A in T) if (A.can_damage_health(damage, damage_type) && !(A.type in BLOB_BANNED_TARGET_TYPES)) - visible_message(SPAN_DANGER("A tendril flies out from \the [src] and smashes into \the [A]!")) + visible_message(SPAN_DANGER("A tendril flies out from [src] and smashes into [A]!")) if (!sound_played) playsound(loc, 'sound/effects/attackblob.ogg', 50, 1) A.damage_health(damage, damage_type, skip_can_damage_check = TRUE) @@ -132,17 +132,17 @@ if (density_check) return - if (!(locate(/obj/effect/blob/core) in range(T, 2)) && prob(secondary_core_growth_chance)) - new /obj/effect/blob/core/secondary (T) + if (!(locate(/obj/blob/core) in range(T, 2)) && prob(secondary_core_growth_chance)) + new /obj/blob/core/secondary (T) else new expandType(T, min(get_current_health(), 30)) -/obj/effect/blob/proc/pulse(forceLeft, list/dirs) +/obj/blob/proc/pulse(forceLeft, list/dirs) sleep(4) var/pushDir = pick(dirs) var/turf/T = get_step(src, pushDir) - var/obj/effect/blob/B = (locate() in T) + var/obj/blob/B = (locate() in T) if(!B) if(prob(get_current_health())) expand(T) @@ -150,15 +150,15 @@ if(forceLeft) B.pulse(forceLeft - 1, dirs) -/obj/effect/blob/proc/attack_living(mob/living/L) +/obj/blob/proc/attack_living(mob/living/L) if(!L) return var/blob_damage = pick(DAMAGE_BRUTE, DAMAGE_BURN) - L.visible_message(SPAN_DANGER("A tendril flies out from \the [src] and smashes into \the [L]!"), SPAN_DANGER("A tendril flies out from \the [src] and smashes into you!")) + L.visible_message(SPAN_DANGER("A tendril flies out from [src] and smashes into [L]!"), SPAN_DANGER("A tendril flies out from [src] and smashes into you!")) playsound(loc, 'sound/effects/attackblob.ogg', 50, 1) L.apply_damage(rand(damage_min, damage_max), blob_damage, used_weapon = "blob tendril") -/obj/effect/blob/proc/attempt_attack(list/dirs) +/obj/blob/proc/attempt_attack(list/dirs) var/attackDir = pick(dirs) var/turf/T = get_step(src, attackDir) for(var/mob/living/victim in T) @@ -166,7 +166,7 @@ continue attack_living(victim) -/obj/effect/blob/bullet_act(obj/item/projectile/Proj) +/obj/blob/bullet_act(obj/item/projectile/Proj) if(!Proj) return var/damage = Proj.damage @@ -176,34 +176,31 @@ damage_health(damage, Proj.damage_type) return 0 -/obj/effect/blob/attackby(obj/item/W, mob/user) - if (user.a_intent == I_HURT) - if(isWelder(W)) - playsound(loc, 'sound/items/Welder.ogg', 100, 1) - ..() +/obj/blob/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(pruned) + USE_FEEDBACK_FAILURE("[src] has already been pruned.") return - - if (isWirecutter(W)) - if(prob(user.skill_fail_chance(SKILL_SCIENCE, 90, SKILL_EXPERT))) - to_chat(user, SPAN_WARNING("You fail to collect a sample from \the [src].")) - else - if(!pruned) - to_chat(user, SPAN_NOTICE("You collect a sample from \the [src].")) - new product(user.loc) - pruned = TRUE - else - to_chat(user, SPAN_WARNING("\The [src] has already been pruned.")) + if(prob(user.skill_fail_chance(SKILL_SCIENCE, 90, SKILL_EXPERIENCED))) + USE_FEEDBACK_FAILURE("You fail to collect a sample from [src].") return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + var/obj/item/sample = new product(user.loc) + sample.add_fingerprint(user, tool = tool) + pruned = TRUE + user.visible_message( + SPAN_NOTICE("[user] collects [sample] from [src] with [tool]."), + SPAN_NOTICE("You collect [sample] from [src] with [tool].") + ) - ..() - -/obj/effect/blob/core +/obj/blob/core name = "master nucleus" desc = "A massive, fragile nucleus guarded by a shield of thick tendrils." icon_state = "blob_core" damage_min = 30 damage_max = 40 - expandType = /obj/effect/blob/shield + expandType = /obj/blob/shield product = /obj/item/blob_tendril/core health_max = 450 @@ -218,12 +215,29 @@ /// Health state tracker to prevent redundant var updates in `process_core_health() var/core_health_state = null + +/obj/blob/core/Initialize() + . = ..() + var/obj/overmap/visitable/visitable = map_sectors["[get_z(src)]"] + if (!visitable) + return + if (++visitable.blob_count == 1) + visitable.add_scan_data("blob", SPAN_COLOR(COLOR_RED, "Level-7 biohazard outbreak detected.")) + + +/obj/blob/core/Destroy() + var/obj/overmap/visitable/visitable = map_sectors["[get_z(src)]"] + if (visitable && --visitable.blob_count == 0) + visitable.remove_scan_data("blob") + return ..() + + /* the master core becomes more vulnereable to damage as it weakens, but it also becomes more aggressive, and channels more of its energy into regenerating rather than spreading regen() will cover update_icon() for this proc */ -/obj/effect/blob/core/proc/process_core_health() +/obj/blob/core/proc/process_core_health() switch (get_damage_percentage()) if (0 to 24) if (core_health_state == 4) @@ -273,7 +287,7 @@ regen() will cover update_icon() for this proc if(!reported_low_damage) report_shield_status("low") -/obj/effect/blob/core/proc/report_shield_status(status) +/obj/blob/core/proc/report_shield_status(status) if(status == "low") visible_message(SPAN_DANGER("The [src]'s tendril shield fails, leaving the nucleus vulnerable!"), 3) reported_low_damage = TRUE @@ -282,7 +296,7 @@ regen() will cover update_icon() for this proc reported_low_damage = FALSE // Rough icon state changes that reflect the core's health -/obj/effect/blob/core/on_update_icon() +/obj/blob/core/on_update_icon() switch (get_damage_percentage()) if(0 to 32) icon_state = "blob_core" @@ -291,7 +305,7 @@ regen() will cover update_icon() for this proc else icon_state = "blob_factory" -/obj/effect/blob/core/Process() +/obj/blob/core/Process() set waitfor = 0 if(!blob_may_process) return @@ -306,7 +320,7 @@ regen() will cover update_icon() for this proc blob_may_process = 1 // Blob has a very small probability of growing these when spreading. These will spread the blob further. -/obj/effect/blob/core/secondary +/obj/blob/core/secondary name = "auxiliary nucleus" desc = "An interwoven mass of tendrils. A glowing nucleus pulses at its center." icon_state = "blob_node" @@ -319,17 +333,17 @@ regen() will cover update_icon() for this proc times_to_pulse = 4 health_max = 125 -/obj/effect/blob/core/secondary/process_core_health() +/obj/blob/core/secondary/process_core_health() return -/obj/effect/blob/core/secondary/on_update_icon() +/obj/blob/core/secondary/on_update_icon() switch (get_damage_percentage()) if (0 to 49) icon_state = "blob_node" else icon_state = "blob_factory" -/obj/effect/blob/shield +/obj/blob/shield name = "shielding mass" desc = "A pulsating mass of interwoven tendrils. These seem particularly robust, but not quite as active." icon_state = "blob_idle" @@ -337,20 +351,20 @@ regen() will cover update_icon() for this proc damage_max = 25 attack_freq = 7 regen_rate = 4 - expandType = /obj/effect/blob/ravaging + expandType = /obj/blob/ravaging light_color = BLOB_COLOR_SHIELD health_max = 120 -/obj/effect/blob/shield/New() +/obj/blob/shield/New() ..() update_nearby_tiles() -/obj/effect/blob/shield/Destroy() +/obj/blob/shield/Destroy() set_density(0) update_nearby_tiles() ..() -/obj/effect/blob/shield/on_update_icon() +/obj/blob/shield/on_update_icon() switch (get_damage_percentage()) if (0 to 32) icon_state = "blob_idle" @@ -359,10 +373,10 @@ regen() will cover update_icon() for this proc else icon_state = "blob_damaged" -/obj/effect/blob/shield/CanPass(atom/movable/mover, turf/target, height = 0, air_group = 0) +/obj/blob/shield/CanPass(atom/movable/mover, turf/target, height = 0, air_group = 0) return !density -/obj/effect/blob/ravaging +/obj/blob/ravaging name = "ravaging mass" desc = "A mass of interwoven tendrils. They thrash around haphazardly at anything in reach." damage_min = 27 @@ -402,16 +416,20 @@ regen() will cover update_icon() for this proc color = COLOR_AMBER origin_tech = list(TECH_POWER = 2) -/obj/item/blob_tendril/afterattack(obj/O, mob/user, proximity) - if(!proximity) - return +/obj/item/blob_tendril/use_after(obj/O, mob/living/user, click_parameters) if(is_tendril && prob(50)) force-- if(force <= 0) - visible_message(SPAN_NOTICE("\The [src] crumbles apart!")) + visible_message(SPAN_NOTICE("[src] crumbles apart!")) user.drop_from_inventory(src) - new /obj/effect/decal/cleanable/ash(src.loc) + new /obj/decal/cleanable/ash(src.loc) qdel(src) + return TRUE + + +/obj/item/blob_tendril/IsHeatSource() + return damtype == DAMAGE_BURN ? 1000 : 0 + /obj/item/blob_tendril/core name = "asteroclast nucleus sample" diff --git a/code/modules/butchery/butchery.dm b/code/modules/butchery/butchery.dm index 017018e48140a..961d2ca61bb7c 100644 --- a/code/modules/butchery/butchery.dm +++ b/code/modules/butchery/butchery.dm @@ -61,7 +61,7 @@ desc = "It looks pretty sharp." anchored = TRUE density = TRUE - icon = 'icons/obj/butchery.dmi' + icon = 'icons/obj/structures/butchery.dmi' icon_state = "spike" var/mob/living/occupant @@ -133,13 +133,13 @@ return istype(victim) && ((victim.meat_type && victim.meat_amount) || (victim.skin_material && victim.skin_amount) || (victim.bone_material && victim.bone_amount)) /obj/structure/kitchenspike/on_update_icon() - overlays.Cut() + ClearOverlays() if(occupant) occupant.set_dir(SOUTH) var/image/I = image(null) I.appearance = occupant I.SetTransform(rotation = occupant.butchery_rotation) - overlays += I + AddOverlays(I) /obj/structure/kitchenspike/mob_breakout(mob/living/escapee) . = ..() @@ -195,13 +195,15 @@ return TRUE return FALSE -/obj/structure/kitchenspike/attackby(obj/item/thing, mob/user) - if(!thing.sharp) - return ..() - if(!occupant) - to_chat(user, SPAN_WARNING("There is nothing on \the [src] to butcher.")) - return - if(!busy) + +/obj/structure/kitchenspike/use_tool(obj/item/tool, mob/user, list/click_params) + if (is_sharp(tool)) + if (!occupant) + USE_FEEDBACK_FAILURE("\The [src] doesn't have anything to butcher.") + return TRUE + if (busy) + USE_FEEDBACK_FAILURE("\The [src] is currently being used by someone else.") + return TRUE busy = TRUE switch(occupant_state) if(CARCASS_FRESH) @@ -211,6 +213,10 @@ if(CARCASS_JOINTED) do_butchery_step(user, CARCASS_EMPTY, "butchering") busy = FALSE + return TRUE + + return ..() + #undef CARCASS_EMPTY #undef CARCASS_FRESH diff --git a/code/modules/butchery/remains.dm b/code/modules/butchery/remains.dm index f917c1a055fea..6810a20aa27d3 100644 --- a/code/modules/butchery/remains.dm +++ b/code/modules/butchery/remains.dm @@ -1,12 +1,114 @@ /obj/item/bone - icon = 'icons/obj/butchery.dmi' + icon = 'icons/obj/structures/butchery.dmi' var/bone_amt = 1 + var/obj/item/carve_product + + +/obj/item/bone/use_tool(obj/item/tool, mob/living/user, list/click_params) + if (carve_product && is_sharp(tool)) + if (!isturf(loc)) + to_chat(user, SPAN_WARNING("You must put \the [src] down before carving it.")) + return + user.visible_message( + SPAN_ITALIC("\The [user] begins carving \a [src] with \a [tool]."), + SPAN_ITALIC("You begin carving \the [src] into \a [initial(carve_product.name)] with \the [tool]."), + range = 5 + ) + if (!do_after(user, 10 SECONDS, src)) + return + user.visible_message( + SPAN_ITALIC("\The [user] finishes carving \a [src] into \a [initial(carve_product.name)]."), + SPAN_ITALIC("You finish carving \the [src]."), + range = 5 + ) + new carve_product (loc) + qdel(src) + return ..() + /obj/item/bone/skull name = "skull" desc = "Looks like someone lost their head." bone_amt = 3 + /obj/item/bone/skull/deer name = "deer skull" icon_state = "deer_skull" + carve_product = /obj/item/clothing/head/skull/deer + + +/obj/item/clothing/head/skull + abstract_type = /obj/item/clothing/head/skull + w_class = ITEM_SIZE_NORMAL + light_overlay = null + flags_inv = HIDEFACE | HIDEEYES | CLOTHING_BULKY + siemens_coefficient = 0.1 + equip_delay = 2 SECONDS + body_parts_covered = FULL_HEAD + armor = list( + melee = ARMOR_MELEE_SMALL, + laser = ARMOR_LASER_MINOR, + energy = ARMOR_ENERGY_SMALL + ) + + var/obj/item/device/flashlight/pen/eyeglow_source + + +/obj/item/clothing/head/skull/Destroy() + QDEL_NULL(eyeglow_source) + return ..() + + +/obj/item/clothing/head/skull/use_tool(obj/item/tool, mob/living/user, list/click_params) + if (light_overlay && !eyeglow_source && istype(tool, /obj/item/device/flashlight/pen)) + if (!user.unEquip(tool, src)) + return + user.visible_message( + SPAN_ITALIC("\The [user] fits \a [tool] into \a [src]."), + SPAN_ITALIC("You fit \the [tool] into \the [src]."), + range = 5 + ) + eyeglow_source = tool + on = eyeglow_source.on + update_icon() + return + return ..() + + +/obj/item/clothing/head/skull/on_update_icon() + update_clothing_icon() + ..() + + +/obj/item/clothing/head/skull/ui_action_click(mob/living/user) + if (!eyeglow_source) + to_chat(user, SPAN_WARNING("\The [src] has no pen light.")) + return + on = !on + if (eyeglow_source.activation_sound) + playsound(get_turf(src), eyeglow_source.activation_sound, 33, TRUE) + update_icon() + + +/obj/item/clothing/head/skull/attack_self(mob/living/user) + if (eyeglow_source) + eyeglow_source.dropInto(get_turf(src)) + user.put_in_hands(eyeglow_source) + eyeglow_source = null + update_icon() + return + ..() + + +/obj/item/clothing/head/skull/deer + name = "carved deer skull" + icon = 'icons/obj/structures/butchery.dmi' + icon_state = "deer_skull" + light_overlay = "deer_skull" + action_button_name = "Toggle Deer Skull" + + +/obj/item/clothing/head/skull/deer/prepared/Initialize() + . = ..() + eyeglow_source = new (src) diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm deleted file mode 100644 index c02d2720e4a4a..0000000000000 --- a/code/modules/client/asset_cache.dm +++ /dev/null @@ -1,285 +0,0 @@ -/* -Asset cache quick users guide: - -Make a datum at the bottom of this file with your assets for your thing. -The simple subsystem will most like be of use for most cases. -Then call get_asset_datum() with the type of the datum you created and store the return -Then call .send(client) on that stored return value. - -You can set verify to TRUE if you want send() to sleep until the client has the assets. -*/ - - -// Amount of time(ds) MAX to send per asset, if this get exceeded we cancel the sleeping. -// This is doubled for the first asset, then added per asset after -#define ASSET_CACHE_SEND_TIMEOUT 7 - -//When sending mutiple assets, how many before we give the client a quaint little sending resources message -#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8 - -/client - var/list/cache = list() // List of all assets sent to this client by the asset cache. - var/list/completed_asset_jobs = list() // List of all completed jobs, awaiting acknowledgement. - var/list/sending = list() - var/last_asset_job = 0 // Last job done. - -//This proc sends the asset to the client, but only if it needs it. -//This proc blocks(sleeps) unless verify is set to false -/proc/send_asset(client/client, asset_name, verify = TRUE, check_cache = TRUE) - if(!istype(client)) - if(ismob(client)) - var/mob/M = client - if(M.client) - client = M.client - - else - return 0 - - else - return 0 - - if(check_cache && (client.cache.Find(asset_name) || client.sending.Find(asset_name))) - return 0 - - var/singleton/asset_cache/asset_cache = GET_SINGLETON(/singleton/asset_cache) - send_rsc(client, asset_cache.cache[asset_name], asset_name) - if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip. - if (client) - client.cache += asset_name - return 1 - if (!client) - return 0 - - client.sending |= asset_name - var/job = ++client.last_asset_job - - show_browser(client, "", "window=asset_cache_browser") - - var/t = 0 - var/timeout_time = (ASSET_CACHE_SEND_TIMEOUT * length(client.sending)) + ASSET_CACHE_SEND_TIMEOUT - while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() - sleep(1) // Lock up the caller until this is received. - t++ - - if(client) - client.sending -= asset_name - client.cache |= asset_name - client.completed_asset_jobs -= job - - return 1 - -//This proc blocks(sleeps) unless verify is set to false -/proc/send_asset_list(client/client, list/asset_list, verify = TRUE) - if(!istype(client)) - if(ismob(client)) - var/mob/M = client - if(M.client) - client = M.client - - else - return 0 - - else - return 0 - - var/list/unreceived = asset_list - (client.cache + client.sending) - if(!unreceived || !length(unreceived)) - return 0 - if (length(unreceived) >= ASSET_CACHE_TELL_CLIENT_AMOUNT) - to_chat(client, "Sending Resources...") - var/singleton/asset_cache/asset_cache = GET_SINGLETON(/singleton/asset_cache) - for(var/asset in unreceived) - if (asset in asset_cache.cache) - send_rsc(client, asset_cache.cache[asset], asset) - - if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip. - if (client) - client.cache += unreceived - return 1 - if (!client) - return 0 - client.sending |= unreceived - var/job = ++client.last_asset_job - - show_browser(client, "", "window=asset_cache_browser") - - var/t = 0 - var/timeout_time = ASSET_CACHE_SEND_TIMEOUT * length(client.sending) - while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() - sleep(1) // Lock up the caller until this is received. - t++ - - if(client) - client.sending -= unreceived - client.cache |= unreceived - client.completed_asset_jobs -= job - - return 1 - -//This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start. -//The proc calls procs that sleep for long times. -/proc/getFilesSlow(client/client, list/files, register_asset = TRUE) - for(var/file in files) - if (!client) - break - if (register_asset) - register_asset(file,files[file]) - send_asset(client,file) - sleep(0) //queuing calls like this too quickly can cause issues in some client versions - -//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up. -//if it's an icon or something be careful, you'll have to copy it before further use. -/proc/register_asset(asset_name, asset) - var/singleton/asset_cache/asset_cache = GET_SINGLETON(/singleton/asset_cache) - asset_cache.cache[asset_name] = asset - -//Generated names do not include file extention. -//Used mainly for code that deals with assets in a generic way -//The same asset will always lead to the same asset name -/proc/generate_asset_name(file) - return "asset.[md5(fcopy_rsc(file))]" - -//These datums are used to populate the asset cache, the proc "register()" does this. - -//all of our asset datums, used for referring to these later -var/global/list/asset_datums = list() - -//get a assetdatum or make a new one -/proc/get_asset_datum(type) - if (!(type in asset_datums)) - return new type() - return asset_datums[type] - -/datum/asset/New() - asset_datums[type] = src - register() - -/datum/asset/proc/register() - return - -/datum/asset/proc/send(client) - return - -//If you don't need anything complicated. -/datum/asset/simple - var/assets = list() - var/verify = FALSE - -/datum/asset/simple/register() - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) - -/datum/asset/simple/send(client) - send_asset_list(client,assets,verify) - -// For registering or sending multiple others at once -/datum/asset/group - var/list/children - -/datum/asset/group/register() - for(var/type in children) - get_asset_datum(type) - -/datum/asset/group/send(client/C) - for(var/type in children) - var/datum/asset/A = get_asset_datum(type) - A.send(C) - -//DEFINITIONS FOR ASSET DATUMS START HERE. -/datum/asset/nanoui - var/list/common = list() - - var/list/common_dirs = list( - "nano/css/", - "nano/images/", - "nano/images/status_icons/", - "nano/images/modular_computers/", - "nano/js/" - ) - var/list/uncommon_dirs = list( - "nano/templates/" - ) - -/datum/asset/nanoui/register() - // Crawl the directories to find files. - for (var/path in common_dirs) - var/list/filenames = flist(path) - for(var/filename in filenames) - if(copytext(filename, -1) != "/") // Ignore directories. - if(fexists(path + filename)) - common[filename] = fcopy_rsc(path + filename) - register_asset(filename, common[filename]) - for (var/path in uncommon_dirs) - var/list/filenames = flist(path) - for(var/filename in filenames) - if(copytext(filename, -1) != "/") // Ignore directories. - if(fexists(path + filename)) - register_asset(filename, fcopy_rsc(path + filename)) - - var/list/mapnames = list() - for(var/z in GLOB.using_map.map_levels) - mapnames += map_image_file_name(z) - - var/list/filenames = flist(MAP_IMAGE_PATH) - for(var/filename in filenames) - if(copytext(filename, -1) != "/") // Ignore directories. - var/file_path = MAP_IMAGE_PATH + filename - if((filename in mapnames) && fexists(file_path)) - common[filename] = fcopy_rsc(file_path) - register_asset(filename, common[filename]) - -/datum/asset/nanoui/send(client, uncommon) - if(!islist(uncommon)) - uncommon = list(uncommon) - - send_asset_list(client, uncommon, FALSE) - send_asset_list(client, common, TRUE) - -/datum/asset/group/goonchat - children = list( - /datum/asset/simple/jquery, - /datum/asset/simple/goonchat, - /datum/asset/simple/fontawesome - ) - -/datum/asset/simple/jquery - verify = FALSE - assets = list( - "jquery.min.js" = 'code/modules/goonchat/browserassets/js/jquery.min.js', - ) - -/datum/asset/simple/goonchat - verify = TRUE - assets = list( - "json2.min.js" = 'code/modules/goonchat/browserassets/js/json2.min.js', - "browserOutput.js" = 'code/modules/goonchat/browserassets/js/browserOutput.js', - "browserOutput.css" = 'code/modules/goonchat/browserassets/css/browserOutput.css', - "browserOutput_white.css" = 'code/modules/goonchat/browserassets/css/browserOutput_white.css' - ) - -/datum/asset/simple/fontawesome - verify = FALSE - assets = list( - "fa-regular-400.eot" = 'html/font-awesome/webfonts/fa-regular-400.eot', - "fa-regular-400.woff" = 'html/font-awesome/webfonts/fa-regular-400.woff', - "fa-solid-900.eot" = 'html/font-awesome/webfonts/fa-solid-900.eot', - "fa-solid-900.woff" = 'html/font-awesome/webfonts/fa-solid-900.woff', - "font-awesome.css" = 'html/font-awesome/css/all.min.css', - "v4shim.css" = 'html/font-awesome/css/v4-shims.min.css' - ) - -/* - Asset cache -*/ -/singleton/asset_cache - var/list/cache = list() - -/singleton/asset_cache/proc/load() - for(var/type in typesof(/datum/asset) - list(/datum/asset, /datum/asset/simple)) - var/datum/asset/A = new type() - A.register() - - for(var/client/C in GLOB.clients) // This is also called in client/New, but as we haven't initialized the cache until now, and it's possible the client is already connected, we risk doing it twice. - // Doing this to a client too soon after they've connected can cause issues, also the proc we call sleeps. - spawn(10) - getFilesSlow(C, cache, FALSE) diff --git a/code/modules/client/client_color.dm b/code/modules/client/client_color.dm index a52bc992b2622..46fccd90641fa 100644 --- a/code/modules/client/client_color.dm +++ b/code/modules/client/client_color.dm @@ -27,7 +27,7 @@ if(!has_client_color(color_type)) var/datum/client_color/CC = new color_type() client_colors |= CC - sortTim(client_colors, /proc/cmp_clientcolor_priority) + sortTim(client_colors, GLOBAL_PROC_REF(cmp_clientcolor_priority)) update_client_color() @@ -90,7 +90,7 @@ priority = 200 /datum/client_color/thirdeye - client_color = list(0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.05, 0.05, 0.05) + client_color = list(0.1, 0.1, 0.1, 0.3, 0.3, 0.3, 0.3, 0.3, 0.7) priority = 300 //Disabilities, could be hooked to brain damage or chargen if so desired. diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 3a96696b8fa29..d4b0eccb2546e 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -15,10 +15,19 @@ var/datum/preferences/prefs = null var/adminobs = null + // Runechat messages + var/list/seen_messages + + ///datum that controls the displaying and hiding of tooltips + var/datum/tooltip/tooltips + var/adminhelped = 0 var/staffwarn = null + /// List that stores the object and parameters related to the selected target during mouse events in the client. Allows the client to remember the target selected during a "MouseDown" event or update the selection during a "MouseDrag" event. + var/list/selected_target[2] + /////////////// //SOUND STUFF// /////////////// @@ -56,4 +65,36 @@ */ preload_rsc = 0 + /// Custom movement keys for this client + var/list/movement_keys = list() + /// Are we locking our movement input? + var/movement_locked = FALSE + + /// A buffer of currently held keys. + var/list/keys_held = list() + /// A buffer for combinations such of modifiers + keys (ex: CtrlD, AltE, ShiftT). Format: `"key"` -> `"combo"` (ex: `"D"` -> `"CtrlD"`) + var/list/key_combos_held = list() + /* + ** These next two vars are to apply movement for keypresses and releases made while move delayed. + ** Because discarding that input makes the game less responsive. + */ + /// On next move, add this dir to the move that would otherwise be done + var/next_move_dir_add + /// On next move, subtract this dir from the move that would otherwise be done + var/next_move_dir_sub + /// Movement dir of the most recently pressed movement key. Used in cardinal-only movement mode. + var/last_move_dir_pressed + var/fullscreen = FALSE + + + ////////// + //ASSETS// + ////////// + + ///world.time they connected + var/connection_time + ///world.realtime they connected + var/connection_realtime + ///world.timeofday they connected + var/connection_timeofday diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index d12ef55742457..35c858cb2a10b 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -1,3 +1,8 @@ +GLOBAL_LIST_INIT(localhost_addresses, list( + "127.0.0.1" = TRUE, + "::1" = TRUE +)) + //////////// //SECURITY// //////////// @@ -36,19 +41,25 @@ #endif // asset_cache + var/asset_cache_job if(href_list["asset_cache_confirm_arrival"]) -// to_chat(src, "ASSET JOB [href_list["asset_cache_confirm_arrival"]] ARRIVED.") - var/job = text2num(href_list["asset_cache_confirm_arrival"]) - completed_asset_jobs += job - return + asset_cache_job = asset_cache_confirm_arrival(href_list["asset_cache_confirm_arrival"]) + if(!asset_cache_job) + return //search the href for script injection - if( findtext(href,"[time2text(world.timeofday,"hh:mm")] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
      ") + //byond bug ID:2256651 + if(asset_cache_job && (asset_cache_job in completed_asset_jobs)) + to_chat(src, "An error has been detected in how your client is receiving resources. Attempting to correct.... (If you keep seeing these messages you might want to close byond and reconnect)") + to_target(src, browse("...", "window=asset_cache_browser")) + return + + if(href_list["asset_cache_preload_data"]) + asset_cache_preload_data(href_list["asset_cache_preload_data"]) + return + switch(href_list["_src_"]) if("holder") hsrc = holder if("usr") hsrc = mob if("prefs") return prefs.process_link(usr,href_list) if("vars") return view_var_Topic(href,href_list,hsrc) - if("chat") return chatOutput.Topic(href, href_list) switch(href_list["action"]) if("openLink") @@ -117,6 +137,9 @@ /client/New(TopicData) TopicData = null //Prevent calls to client.Topic from connect + // Create tgui panel. Dpn't put it bellow to_chat() procs, will runtime + tgui_panel = new(src, "browseroutput") + switch (connection) if ("seeker", "web") // check for invalid connection type. do nothing if valid else return null @@ -162,6 +185,13 @@ GLOB.clients += src GLOB.ckey_directory[ckey] = src + // Automatic admin rights for people connecting locally. + // Concept stolen from /tg/ with deepest gratitude. + var/local_connection = (config.auto_local_admin && (isnull(address) || GLOB.localhost_addresses[address])) + if(local_connection && !admin_datums[ckey]) + new /datum/admins("Local Host", 32767, ckey) // Прости меня бог за это + + //Admin Authorisation holder = admin_datums[ckey] if(holder) @@ -172,12 +202,19 @@ prefs = SScharacter_setup.preferences_datums[ckey] if(!prefs) prefs = new /datum/preferences(src) + prefs.last_ip = address //these are gonna be used for banning prefs.last_id = computer_id //these are gonna be used for banning - apply_fps(prefs.clientfps) + fps = prefs.clientfps + + load_player_discord(src) . = ..() //calls mob.Login() + connection_time = world.time + connection_realtime = world.realtime + connection_timeofday = world.timeofday + GLOB.using_map.map_info(src) if (config.event) @@ -204,16 +241,45 @@ if (GLOB.changelog_hash && prefs.lastchangelog != GLOB.changelog_hash) //bolds the changelog button on the interface so we know there are updates. to_chat(src, SPAN_INFO("You have unread updates in the changelog.")) - winset(src, "rpane.changelog", "background-color=#eaeaea;font-style=bold") + // [SIERRA-EDIT] - Interface + // winset(src, "rpane.changelog", "background-color=#eaeaea;font-style=bold") // SIERRA-EDIT - ORIGINAL + winset(src, "rpane.changelog", "font-style=bold") + // [/SIERRA-EDIT] if(config.aggressive_changelog) src.changes() if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them. to_chat(src, SPAN_WARNING("Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you.")) + if(!tooltips) + tooltips = new /datum/tooltip(src) + if(holder) src.control_freak = 0 //Devs need 0 for profiler access + if(SSinput.initialized) + set_macros() + + // Initialize tgui panel + tgui_panel.initialize() + + set_right_click_menu_mode(TRUE) + + // This turns out to be a touch too much when a bunch of people are connecting at once from a restart during init. + if (GAME_STATE & RUNLEVELS_DEFAULT) + spawn() + if (!check_rights(R_MOD, FALSE, src)) + // Check connections + var/list/connections = fetch_connections() + var/list/ckeys = _unique_ckeys_from_connections(connections) - ckey + if (length(ckeys)) + log_and_message_staff(SPAN_INFO("[key_name_admin(src)] has connection details associated with [length(ckeys)] other ckeys in the log.")) + + // Check bans + var/list/bans = _find_bans_in_connections(connections) + if (length(bans)) + log_and_message_staff(SPAN_DANGER("[key_name_admin(src)] has connection details associated with [length(bans)] active bans.")) + ////////////// //DISCONNECT// ////////////// @@ -233,7 +299,6 @@ GLOB.admins -= src if (watched_variables_window) STOP_PROCESSING(SSprocessing, watched_variables_window) - QDEL_NULL(chatOutput) GLOB.ckey_directory -= ckey ticket_panels -= src GLOB.clients -= src @@ -305,16 +370,9 @@ if(!isnum(sql_id)) return - var/admin_rank = "Player" - if(src.holder) - admin_rank = src.holder.rank - for(var/client/C in GLOB.clients) - if(C.staffwarn) - C.mob.send_staffwarn(src, "is connected", 0) - var/sql_ip = sql_sanitize_text(src.address) var/sql_computerid = sql_sanitize_text(src.computer_id) - var/sql_admin_rank = sql_sanitize_text(admin_rank) + var/sql_admin_rank = sql_sanitize_text("Player") if(sql_id) @@ -355,37 +413,14 @@ sleep(config.stat_delay) -//Sends resource files to client cache -/client/proc/getFiles() - for(var/file in args) - send_rsc(src, file, null) - //send resources to the client. It's here in its own proc so we can move it around easiliy if need be /client/proc/send_resources() - getFiles( - 'html/search.js', - 'html/panels.css', - 'html/spacemag.css', - 'html/images/loading.gif', - 'html/images/ntlogo.png', - 'html/images/bluentlogo.png', - 'html/images/sollogo.png', - 'html/images/terralogo.png', - 'html/images/talisman.png', - 'html/images/exologo.png', - 'html/images/xynlogo.png', - 'html/images/daislogo.png', - 'html/images/eclogo.png', - 'html/images/fleetlogo.png', - 'html/images/sfplogo.png' - ) - addtimer(new Callback(src, .proc/after_send_resources), 1 SECOND) - - -/client/proc/after_send_resources() - var/singleton/asset_cache/asset_cache = GET_SINGLETON(/singleton/asset_cache) - getFilesSlow(src, asset_cache.cache, register_asset = FALSE) - + spawn(1 SECOND) // Removing this spawn causes all clients to not get verbs. + // Load info on what assets the client has + show_browser(src, 'code/modules/asset_cache/validate_assets.html', "window=asset_cache_browser") + // Precache the client with all other assets slowly, so as to not block other browse() calls + if(config.asset_simple_preload) + addtimer(CALLBACK(SSassets.transport, TYPE_PROC_REF(/datum/asset_transport, send_assets_slow), src, SSassets.transport.preload), 5 SECONDS) /mob/proc/MayRespawn() return 0 @@ -403,9 +438,6 @@ if(prefs) prefs.open_setup_window(usr) -/client/proc/apply_fps(client_fps) - if(world.byond_version >= 511 && byond_version >= 511 && client_fps >= CLIENT_MIN_FPS && client_fps <= CLIENT_MAX_FPS) - vars["fps"] = prefs.clientfps /client/MouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params) . = ..() @@ -423,20 +455,16 @@ set category = "OOC" fullscreen = !fullscreen - - if (fullscreen) + if(fullscreen) winset(usr, "mainwindow", "titlebar=false") winset(usr, "mainwindow", "can-resize=false") winset(usr, "mainwindow", "is-maximized=false") winset(usr, "mainwindow", "is-maximized=true") - winset(usr, "mainwindow", "statusbar=false") winset(usr, "mainwindow", "menu=") -// winset(usr, "mainwindow.mainvsplit", "size=0x0") else winset(usr, "mainwindow", "is-maximized=false") winset(usr, "mainwindow", "titlebar=true") winset(usr, "mainwindow", "can-resize=true") - winset(usr, "mainwindow", "statusbar=true") winset(usr, "mainwindow", "menu=menu") fit_viewport() @@ -486,3 +514,74 @@ pct += delta winset(src, "mainwindow.mainvsplit", "splitter=[pct]") + +/client/verb/ToggleHotkeyMode() + set hidden = TRUE + prefs.hotkeys = !prefs.hotkeys + update_hotkey_mode() + +/client/proc/update_hotkey_mode() + if(prefs.hotkeys) + // If hotkey mode is enabled, then clicking the map will automatically + // unfocus the text bar. This removes the red color from the text bar + // so that the visual focus indicator matches reality. + winset(src, "mainwindow.mainwindow", "macro=default") + winset(src, "mapwindow.map", "focus=true") + winset(src, "outputwindow.hotkeytoggle", "is-checked=true") + winset(src, "outputwindow.input", " border=line") + else + winset(src, "mainwindow.mainwindow", "macro=macro") + winset(src, "outputwindow.hotkeytoggle", "is-checked=false") + winset(src, "outputwindow.input", "focus=true; border=sunken") + +/** + * Updates the keybinds for special keys + * + * Handles adding macros for the keys that need it + * And adding movement keys to the clients movement_keys list + * At the time of writing this, communication(OOC, Say, IC) require macros + * Arguments: + * * direct_prefs - the preference we're going to get keybinds from + */ +/client/proc/update_special_keybinds(datum/preferences/direct_prefs) + var/datum/preferences/D = prefs || direct_prefs + if(!D?.key_bindings) + return + movement_keys = list() + var/list/communication_hotkeys = list() + for(var/key in D.key_bindings) + for(var/kb_name in D.key_bindings[key]) + switch(kb_name) + if("North") + movement_keys[key] = NORTH + if("East") + movement_keys[key] = EAST + if("West") + movement_keys[key] = WEST + if("South") + movement_keys[key] = SOUTH + if("Say") + winset(src, "default-[REF(key)]", "parent=default;name=[key];command=say") + communication_hotkeys += key + if("OOC") + winset(src, "default-[REF(key)]", "parent=default;name=[key];command=ooc") + communication_hotkeys += key + if("Me") + winset(src, "default-[REF(key)]", "parent=default;name=[key];command=me") + communication_hotkeys += key + + // winget() does not work for F1 and F2 + for(var/key in communication_hotkeys) + if(!(key in list("F1","F2")) && !winget(src, "default-[REF(key)]", "command")) + to_chat(src, "You probably entered the game with a different keyboard layout.\nPlease switch to the English layout and click here to fix the communication hotkeys.") + break + +/client/proc/set_right_click_menu_mode(shift_only) + if(shift_only) + winset(src, "mapwindow.map", "right-click=true") + winset(src, "ShiftUp", "is-disabled=false") + winset(src, "Shift", "is-disabled=false") + else + winset(src, "mapwindow.map", "right-click=false") + winset(src, "default.Shift", "is-disabled=true") + winset(src, "default.ShiftUp", "is-disabled=true") diff --git a/code/modules/client/darkmode.dm b/code/modules/client/darkmode.dm deleted file mode 100644 index 6519496901b00..0000000000000 --- a/code/modules/client/darkmode.dm +++ /dev/null @@ -1,136 +0,0 @@ -//Darkmode preference by Kmc2000// - -/* -This lets you switch chat themes by using winset and CSS loading, you must relog to see this change (or rebuild your browseroutput datum) -Things to note: -If you change ANYTHING in interface/skin.dmf you need to change it here: -Format: -winset(src, "window as appears in skin.dmf after elem", "var to change = currentvalue;var to change = desired value") -How this works: -I've added a function to browseroutput.js which registers a cookie for darkmode and swaps the chat accordingly. You can find the button to do this under the "cog" icon next to the ping button (top right of chat) -This then swaps the window theme automatically -Thanks to spacemaniac and mcdonald for help with the JS side of this. -*/ - -/client/proc/force_white_theme() //There's no way round it. We're essentially changing the skin by hand. It's painful but it works, and is the way Lummox suggested. - //Main windows - winset(src, "infowindow", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = none") - winset(src, "infowindow", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "rpane", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = none") - winset(src, "rpane", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "info", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "info", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "browseroutput", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "browseroutput", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "outputwindow", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "outputwindow", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "rpanewindow", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "rpanewindow", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "mainwindow", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = none") - winset(src, "split", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "mainvsplit", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - //Buttons - winset(src, "textb", "background-color = #494949;background-color = none") - winset(src, "textb", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "infob", "background-color = #494949;background-color = none") - winset(src, "infob", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "linkrules", "background-color = #494949;background-color = none") - winset(src, "linkrules", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "linklore", "background-color = #494949;background-color = none") - winset(src, "linklore", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "linkwiki", "background-color = #494949;background-color = none") - winset(src, "linkwiki", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "linkforum", "background-color = #494949;background-color = none") - winset(src, "linkforum", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "linkdiscord", "background-color = #494949;background-color = none") - winset(src, "linkdiscord", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "changelog", "background-color = #494949;background-color = none") - winset(src, "changelog", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "linksource", "background-color = #494949;background-color = none") - winset(src, "linksource", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "linkissue", "background-color = #494949;background-color = none") - winset(src, "linkissue", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "hotkey_toggle", "background-color = #494949;background-color = none") - winset(src, "hotkey_toggle", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - //Status and verb tabs - winset(src, "output", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "output", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "outputwindow", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "outputwindow", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "statwindow", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "statwindow", "text-color = #eaeaea;text-color = #000000") - winset(src, "info", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = #FFFFFF") - winset(src, "info", "tab-background-color = [COLOR_DARKMODE_BACKGROUND];tab-background-color = none") - winset(src, "info", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "info", "tab-text-color = [COLOR_DARKMODE_TEXT];tab-text-color = #000000") - winset(src, "info", "prefix-color = [COLOR_DARKMODE_TEXT];prefix-color = #000000") - winset(src, "info", "suffix-color = [COLOR_DARKMODE_TEXT];suffix-color = #000000") - //Say, OOC, me Buttons etc. - winset(src, "saybutton", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "saybutton", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - winset(src, "asset_cache_browser", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - winset(src, "asset_cache_browser", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - //winset(src, "input", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = none") - //winset(src, "input", "text-color = [COLOR_DARKMODE_TEXT];text-color = #000000") - -/client/proc/force_dark_theme() //Inversely, if theyre using white theme and want to swap to the superior dark theme, let's get WINSET() ing - //Main windows - winset(src, "infowindow", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "infowindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "rpane", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "rpane", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "info", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "info", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "browseroutput", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "browseroutput", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "outputwindow", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "outputwindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "rpanewindow", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "rpanewindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "mainwindow", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "split", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "mainvsplit", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - //Buttons - winset(src, "textb", "background-color = none;background-color = #494949") - winset(src, "textb", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "infob", "background-color = none;background-color = #494949") - winset(src, "infob", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "linkrules", "background-color = none;background-color = #494949") - winset(src, "linkrules", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "linklore", "background-color = none;background-color = #494949") - winset(src, "linklore", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "linkwiki", "background-color = none;background-color = #494949") - winset(src, "linkwiki", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "linkforum", "background-color = none;background-color = #494949") - winset(src, "linkforum", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "linkdiscord", "background-color = none;background-color = #494949") - winset(src, "linkdiscord", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "changelog", "background-color = none;background-color = #494949") - winset(src, "changelog", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "linksource", "background-color = none;background-color = #494949") - winset(src, "linksource", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "linkissue", "background-color = none;background-color = #494949") - winset(src, "linkissue", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "hotkey_toggle", "background-color = none;background-color = #494949") - winset(src, "hotkey_toggle", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - //Status and verb tabs - winset(src, "output", "background-color = none;background-color = [COLOR_DARKMODE_DARKBACKGROUND]") - winset(src, "output", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "outputwindow", "background-color = none;background-color = [COLOR_DARKMODE_DARKBACKGROUND]") - winset(src, "outputwindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "statwindow", "background-color = none;background-color = [COLOR_DARKMODE_DARKBACKGROUND]") - winset(src, "statwindow", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "info", "background-color = #FFFFFF;background-color = [COLOR_DARKMODE_DARKBACKGROUND]") - winset(src, "info", "tab-background-color = none;tab-background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "info", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "info", "tab-text-color = #000000;tab-text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "info", "prefix-color = #000000;prefix-color = [COLOR_DARKMODE_TEXT]") - winset(src, "info", "suffix-color = #000000;suffix-color = [COLOR_DARKMODE_TEXT]") - //Say, OOC, me Buttons etc. - winset(src, "saybutton", "background-color = none;background-color = #494949") - winset(src, "saybutton", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - winset(src, "asset_cache_browser", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - winset(src, "asset_cache_browser", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") - - //winset(src, "input", "background-color = none;background-color = [COLOR_DARKMODE_BACKGROUND]") - //winset(src, "input", "text-color = #000000;text-color = [COLOR_DARKMODE_TEXT]") diff --git a/code/modules/client/preference_setup/_defines.dm b/code/modules/client/preference_setup/_defines.dm index 5cf16c0a79b66..28c063a89e47e 100644 --- a/code/modules/client/preference_setup/_defines.dm +++ b/code/modules/client/preference_setup/_defines.dm @@ -6,35 +6,41 @@ if(!singletons_by_name) \ for(var/singleton_type in singletons_by_type) \ {\ var##singleton_prototype/singleton_instance = singletons_by_type[singleton_type];\ - ADD_SORTED(singletons_by_name, singleton_instance.name, /proc/cmp_text_asc);\ + ADD_SORTED(singletons_by_name, singleton_instance.name, GLOBAL_PROC_REF(cmp_text_asc));\ singletons_by_name[singleton_instance.name] = singleton_instance;\ }\ } /// Full Options Button. -#define FBTN(key, value, label, title, style) \ -"[title ? "[title]: " : ""][label]" +#define FBTN(key, value, label, title, style, class) \ +"[title ? "[title]: " : ""][label]" /// Value-passing Styled Button. -#define VSBTN(key, value, label, style) FBTN(key, value, label, "", style) +#define VSBTN(key, value, label, style) FBTN(key, value, label, "", style, "") /// Styled Titled Button. -#define STBTN(key, label, title, style) FBTN(key, 1, label, title, style) +#define STBTN(key, label, title, style) FBTN(key, 1, label, title, style, "") /// Value-passing Titled Button. -#define VTBTN(key, value, label, title) FBTN(key, value, label, title, "") +#define VTBTN(key, value, label, title) FBTN(key, value, label, title, "", "") /// Styled Button. -#define SBTN(key, label, style) FBTN(key, 1, label, "", style) +#define SBTN(key, label, style) FBTN(key, 1, label, "", style, "") + +/// Classed Button. +#define CBTN(key, label, class) FBTN(key, 1, label, "", "", class) /// Value-passing Button. -#define VBTN(key, value, label) FBTN(key, value, label, "", "") +#define VBTN(key, value, label) FBTN(key, value, label, "", "", "") + +/// Value-passing Classed Button. +#define VCBTN(key, value, label, class) FBTN(key, value, label, "", "", class) /// Titled Button. -#define TBTN(key, label, title) FBTN(key, 1, label, title, "") +#define TBTN(key, label, title) FBTN(key, 1, label, title, "", "") /// Simple Button. -#define BTN(key, label) FBTN(key, 1, label, "", "") +#define BTN(key, label) FBTN(key, 1, label, "", "", "") #define COLOR_PREVIEW(color) \ "
    __
    " diff --git a/code/modules/client/preference_setup/background/01_culture.dm b/code/modules/client/preference_setup/background/01_culture.dm index ce4bda1863f84..71caeb7ea4868 100644 --- a/code/modules/client/preference_setup/background/01_culture.dm +++ b/code/modules/client/preference_setup/background/01_culture.dm @@ -56,8 +56,12 @@ . = list() for(var/token in tokens) var/singleton/cultural_info/culture = SSculture.get_culture(pref.cultural_info[token]) - var/title = "[tokens[token]]- [pref.cultural_info[token]]" - var/append_text = "[hidden[token] ? "Expand" : "Collapse"]" + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Сокращение html-строки для нормальной работы переопределения get_description; перевод буков + // var/title = "[tokens[token]]- [pref.cultural_info[token]]" // SIERRA-EDIT - ORIGINAL + // var/append_text = "[hidden[token] ? "Expand" : "Collapse"]" // SIERRA-EDIT - ORIGINAL + var/title = "[tokens[token]]- " + var/append_text = "[hidden[token] ? "Расширить" : "Скрыть"]" + // [SIERRA-EDIT] . += culture.get_description(title, append_text, verbose = !hidden[token]) if (expanded[token]) var/list/valid_values @@ -70,11 +74,19 @@ // html_encode() doesn't properly sanitize + symbols, otherwise we could just use that // instead, we manually rip out the plus symbol and then replace it on OnTopic var/sanitized_value = html_encode(replacetext(V, "+", "PLUS")) - - if (pref.cultural_info[token] == V) - . += "[SPAN_CLASS("linkOn", "[V]")] " - else - . += "[V] " + + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Изменение схемы получения названия культуры, чтобы поддерживать возможность их перевода без переработки всей сабсистемы культур + // if (pref.cultural_info[token] == V) // SIERRA-EDIT - ORIGINAL + // . += "[SPAN_CLASS("linkOn", "[V]")] " // SIERRA-EDIT - ORIGINAL + // else // SIERRA-EDIT - ORIGINAL + // . += "[V] " // SIERRA-EDIT - ORIGINAL + var/singleton/cultural_info/VCulture = SSculture.get_culture(V) + if(VCulture) + if (pref.cultural_info[token] == V) + . += "[SPAN_CLASS("linkOn", "[VCulture.get_nickname()]")] " + else + . += "[VCulture.get_nickname()] " + // [SIERRA-EDIT] . += "
    " . += "
    " . = jointext(.,null) diff --git a/code/modules/client/preference_setup/background/02_language.dm b/code/modules/client/preference_setup/background/02_language.dm index c38ad26e8cd8f..9c1ea6161c3ba 100644 --- a/code/modules/client/preference_setup/background/02_language.dm +++ b/code/modules/client/preference_setup/background/02_language.dm @@ -20,13 +20,19 @@ /datum/category_item/player_setup_item/background/languages/content() . = list() - . += "Languages
    " + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // . += "Languages
    " // SIERRA-EDIT - ORIGINAL + . += "Языки
    " + // [/SIERRA-EDIT] var/list/show_langs = get_language_text() if(LAZYLEN(show_langs)) for(var/lang in show_langs) . += lang else - . += "Your current species, faction or home system selection does not allow you to choose additional languages.
    " + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // . += "Your current species, faction or home system selection does not allow you to choose additional languages.
    " // SIERRA-EDIT - ORIGINAL + . += "Ваша фракция, раса или место проживания не позволяют вам выбрать дополнительные языки.
    " + // [/SIERRA-EDIT] . = jointext(.,null) /datum/category_item/player_setup_item/background/languages/OnTopic(href,list/href_list, mob/user) @@ -39,15 +45,24 @@ else if(href_list["add_language"]) if(length(pref.alternate_languages) >= MAX_LANGUAGES) - alert(user, "You have already selected the maximum number of languages!") + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // alert(user, "You have already selected the maximum number of languages!") // SIERRA-EDIT - ORIGINAL + alert(user, "Вы уже выбрали максимальное количество языков!") + // [/SIERRA-EDIT] return sanitize_alt_languages() var/list/available_languages = allowed_languages - free_languages if(!LAZYLEN(available_languages)) - alert(user, "There are no additional languages available to select.") + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // alert(user, "There are no additional languages available to select.") // SIERRA-EDIT - ORIGINAL + alert(user, "Вы уже выбрали все доступные языки.") + // [/SIERRA-EDIT] else - var/new_lang = input(user, "Select an additional language", "Character Generation", null) as null|anything in available_languages + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // var/new_lang = input(user, "Select an additional language", "Character Generation", null) as null|anything in available_languages // SIERRA-EDIT - ORIGINAL + var/new_lang = input(user, "Выберите дополнительный язык", "Character Generation", null) as null|anything in available_languages + // [/SIERRA-EDIT] if(new_lang) pref.alternate_languages |= new_lang return TOPIC_REFRESH @@ -75,13 +90,13 @@ for(var/thing in all_languages) var/datum/language/lang = all_languages[thing] - if(user.has_admin_rights() || (!(lang.flags & RESTRICTED) && (lang.flags & WHITELISTED) && is_alien_whitelisted(user, lang))) + if(user.has_admin_rights() || (!(lang.flags & RESTRICTED) && (lang.flags & WHITELISTED) && is_any_alien_whitelisted(user, lang))) allowed_languages[thing] = TRUE /datum/category_item/player_setup_item/background/languages/proc/is_allowed_language(mob/user, datum/language/lang) if(isnull(allowed_languages) || isnull(free_languages)) rebuild_language_cache(user) - if(!user || ((lang.flags & RESTRICTED) && is_alien_whitelisted(user, lang))) + if(!user || ((lang.flags & RESTRICTED) && is_any_alien_whitelisted(user, lang))) return TRUE return allowed_languages[lang.name] @@ -109,9 +124,18 @@ for(var/i = 1 to length(pref.alternate_languages)) var/lang = pref.alternate_languages[i] if(free_languages[lang]) - LAZYADD(., "- [lang] (required).
    ") + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // LAZYADD(., "- [lang] (required).
    ") // SIERRA-EDIT - ORIGINAL + LAZYADD(., "- [lang] (обязательный).
    ") + // [/SIERRA-EDIT] else - LAZYADD(., "- [lang] Remove. [all_languages[lang].warning]
    ") + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // LAZYADD(., "- [lang] Remove. [all_languages[lang].warning]
    ") // SIERRA-EDIT - ORIGINAL + LAZYADD(., "- [lang] Убрать. [all_languages[lang].warning]
    ") + // [/SIERRA-EDIT] if(length(pref.alternate_languages) < MAX_LANGUAGES) var/remaining_langs = MAX_LANGUAGES - length(pref.alternate_languages) - LAZYADD(., "- add ([remaining_langs] remaining)
    ") + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // LAZYADD(., "- add ([remaining_langs] remaining)
    ") // SIERRA-EDIT - ORIGINAL + LAZYADD(., "- Добавить ([remaining_langs] осталось)
    ") + // [/SIERRA-EDIT] diff --git a/code/modules/client/preference_setup/background/03_records.dm b/code/modules/client/preference_setup/background/03_records.dm index d6bf1b072b95e..dc21dd44e4faf 100644 --- a/code/modules/client/preference_setup/background/03_records.dm +++ b/code/modules/client/preference_setup/background/03_records.dm @@ -34,81 +34,123 @@ /datum/category_item/player_setup_item/background/records/content(mob/user) . = list() - - . += "
    Records:" + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // . += "
    Records:" // SIERRA-EDIT - ORIGINAL + . += "
    Записи:" + // [/SIERRA-EDIT] if (jobban_isbanned(user, "Records")) . += "[SPAN_WARNING("You are banned from using character records.")]" + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // else // SIERRA-EDIT - ORIGINAL + // .+= TBTN("set_public_record", TextPreview(pref.public_record, 40), "Public") // SIERRA-EDIT - ORIGINAL + // .+= TBTN("set_medical_records", TextPreview(pref.med_record, 40), "Medical") // SIERRA-EDIT - ORIGINAL + // .+= TBTN("set_general_records", TextPreview(pref.gen_record, 40), "Employment") // SIERRA-EDIT - ORIGINAL + // .+= TBTN("set_security_records", TextPreview(pref.sec_record, 40), "Security") // SIERRA-EDIT - ORIGINAL + // .+= TBTN("set_memory", TextPreview(pref.memory, 40), "Memory") // SIERRA-EDIT - ORIGINAL + // . += "
    Other:" // SIERRA-EDIT - ORIGINAL + // var/set_addr_button = TBTN("set_email_addr", pref.email_addr ? pref.email_addr : "(default)", "Email Address") // SIERRA-EDIT - ORIGINAL + // var/list/branches = pref.for_each_selected_branch(CALLBACK(src, PROC_REF(allow_email_branch_check)) // SIERRA-EDIT - ORIGINAL + // for (var/name in branches) // SIERRA-EDIT - ORIGINAL + // set_addr_button += " " + (branches[name] ? UI_FONT_GOOD(name) : UI_FONT_BAD(name)) // SIERRA-EDIT - ORIGINAL + // . += set_addr_button // SIERRA-EDIT - ORIGINAL + // . += TBTN("set_email_pass", pref.email_pass ? pref.email_pass : "(random)", "Email Password") // SIERRA-EDIT - ORIGINAL else - .+= TBTN("set_public_record", TextPreview(pref.public_record, 40), "Public") - .+= TBTN("set_medical_records", TextPreview(pref.med_record, 40), "Medical") - .+= TBTN("set_general_records", TextPreview(pref.gen_record, 40), "Employment") - .+= TBTN("set_security_records", TextPreview(pref.sec_record, 40), "Security") - .+= TBTN("set_memory", TextPreview(pref.memory, 40), "Memory") - - . += "
    Other:" - var/set_addr_button = TBTN("set_email_addr", pref.email_addr ? pref.email_addr : "(default)", "Email Address") - var/list/branches = pref.for_each_selected_branch(new Callback(src, .proc/allow_email_branch_check)) + .+= TBTN("set_public_record", TextPreview(pref.public_record, 40), "Публичные записи") + .+= TBTN("set_medical_records", TextPreview(pref.med_record, 40), "Записи здравоохранения") + .+= TBTN("set_general_records", TextPreview(pref.gen_record, 40), "Записи трудоустройства") + .+= TBTN("set_security_records", TextPreview(pref.sec_record, 40), "Записи защиты активов") + .+= TBTN("set_memory", TextPreview(pref.memory, 40), "Воспоминания") + . += "
    Другое:" + var/set_addr_button = TBTN("set_email_addr", pref.email_addr ? pref.email_addr : "(стандартный)", "Почтовый адрес") + var/list/branches = pref.for_each_selected_branch(CALLBACK(src, PROC_REF(allow_email_branch_check))) for (var/name in branches) set_addr_button += " " + (branches[name] ? UI_FONT_GOOD(name) : UI_FONT_BAD(name)) . += set_addr_button - - . += TBTN("set_email_pass", pref.email_pass ? pref.email_pass : "(random)", "Email Password") + . += TBTN("set_email_pass", pref.email_pass ? pref.email_pass : "(случайный)", "Пароль от почты") + // [/SIERRA-EDIT] . = jointext(., "
    ") /datum/category_item/player_setup_item/background/records/OnTopic(href,list/href_list, mob/user) if (href_list["set_public_record"]) - var/new_public = sanitize(input(user,"Enter general public record information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.public_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // var/new_public = sanitize(input(user,"Enter general public record information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.public_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) // SIERRA-EDIT - ORIGINAL + var/new_public = sanitize(input(user,"Введите публично доступную информацию о персонаже.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.public_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) + // [/SIERRA-EDIT] if (!isnull(new_public) && !jobban_isbanned(user, "Records") && CanUseTopic(user)) pref.public_record = new_public return TOPIC_REFRESH else if(href_list["set_medical_records"]) - var/new_medical = sanitize(input(user,"Enter medical information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.med_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // var/new_medical = sanitize(input(user,"Enter medical information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.med_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) // SIERRA-EDIT - ORIGINAL + var/new_medical = sanitize(input(user,"Введите записи о персонаже для отдела здравоохранения.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.med_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) + // [/SIERRA-EDIT] if(!isnull(new_medical) && !jobban_isbanned(user, "Records") && CanUseTopic(user)) pref.med_record = new_medical return TOPIC_REFRESH else if(href_list["set_general_records"]) - var/new_general = sanitize(input(user,"Enter employment information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.gen_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // var/new_general = sanitize(input(user,"Enter employment information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.gen_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) // SIERRA-EDIT - ORIGINAL + var/new_general = sanitize(input(user,"Введите записи по трудоустройству персонажа.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.gen_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) + // [/SIERRA-EDIT] if(!isnull(new_general) && !jobban_isbanned(user, "Records") && CanUseTopic(user)) pref.gen_record = new_general return TOPIC_REFRESH else if(href_list["set_security_records"]) - var/sec_medical = sanitize(input(user,"Enter security information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.sec_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // var/sec_medical = sanitize(input(user,"Enter security information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.sec_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) // SIERRA-EDIT - ORIGINAL + var/sec_medical = sanitize(input(user,"Введите записи отдела защиты активов о персонаже.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.sec_record)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) + // [/SIERRA-EDIT] if(!isnull(sec_medical) && !jobban_isbanned(user, "Records") && CanUseTopic(user)) pref.sec_record = sec_medical return TOPIC_REFRESH else if(href_list["set_memory"]) - var/memes = sanitize(input(user,"Enter memorized information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.memory)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // var/memes = sanitize(input(user,"Enter memorized information here.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.memory)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) // SIERRA-EDIT - ORIGINAL + var/memes = sanitize(input(user,"Введите информацию, которая хранится в памяти персонажа.",CHARACTER_PREFERENCE_INPUT_TITLE, html_decode(pref.memory)) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) + // [/SIERRA-EDIT] if(!isnull(memes) && CanUseTopic(user)) pref.memory = memes return TOPIC_REFRESH else if (href_list["set_email_pass"]) - var/value = input(user, "Enter email password:", "Email Password", pref.email_pass) as text + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // var/value = input(user, "Enter email password:", "Email Password", pref.email_pass) as text // SIERRA-EDIT - ORIGINAL + var/value = input(user, "Введите пароль для почты:", "Email Password", pref.email_pass) as text + // [/SIERRA-EDIT] if (isnull(value) || !CanUseTopic(user)) return TOPIC_NOACTION if (value != "") var/clean = sanitize(value) var/chars = length(clean) if (chars < 4 || chars > 16) - to_chat(user, SPAN_WARNING("Invalid Email Password '[clean]': must be 4..16 safe glyphs.")) + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // to_chat(user, SPAN_WARNING("Invalid Email Password '[clean]': must be 4..16 safe glyphs.")) // SIERRA-EDIT - ORIGINAL + to_chat(user, SPAN_WARNING("Неподходящий пароль '[clean]': пароль должен содержать 4..16 символов.")) + // [/SIERRA-EDIT] return TOPIC_NOACTION value = clean pref.email_pass = value return TOPIC_REFRESH else if (href_list["set_email_addr"]) - var/value = input(user, "Enter email username:", "Email Address", pref.email_addr) as text + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // var/value = input(user, "Enter email username:", "Email Address", pref.email_addr) as text // SIERRA-EDIT - ORIGINAL + var/value = input(user, "Введите логин для почты:", "Email Address", pref.email_addr) as text + // [/SIERRA-EDIT] if (isnull(value) || !CanUseTopic(user)) return TOPIC_NOACTION if (value != "") var/clean = sanitize_for_email(value) var/chars = length(clean) if (chars < 4 || chars > 24) - to_chat(user, SPAN_WARNING("Invalid Email Username '[clean]': must be 4..24 glyphs from /a-z0-9./")) + // [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод + // to_chat(user, SPAN_WARNING("Invalid Email Username '[clean]': must be 4..24 glyphs from /a-z0-9./")) // SIERRA-EDIT - ORIGINAL + to_chat(user, SPAN_WARNING("Неподходящий логин '[clean]': логин должен содержать 4..24 символов /a-z0-9./")) + // [/SIERRA-EDIT] return TOPIC_NOACTION value = clean pref.email_addr = value diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index 89391d780a146..d8f475bdc5ffd 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -37,19 +37,20 @@ . = jointext(., null) -/datum/category_item/player_setup_item/physical/basic/OnTopic(href,list/href_list, mob/user) +/datum/category_item/player_setup_item/physical/basic/OnTopic(href, list/href_list, mob/user) if(href_list["rename"]) - var/raw_name = input(user, "Choose your character's name:", "Character Name") as text|null - if (!isnull(raw_name) && CanUseTopic(user)) + var/raw_name = tgui_input_text(user, "Choose your character's name", "Character Name", max_length = MAX_NAME_LEN) + if(isnull(raw_name) && CanUseTopic(user)) + return - var/singleton/cultural_info/check = SSculture.get_culture(pref.cultural_info[TAG_CULTURE]) - var/new_name = check.sanitize_name(raw_name, pref.species) - if(new_name) - pref.real_name = new_name - return TOPIC_REFRESH - else - to_chat(user, SPAN_WARNING("Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .")) - return TOPIC_NOACTION + var/singleton/cultural_info/check = SSculture.get_culture(pref.cultural_info[TAG_CULTURE]) + var/new_name = check.sanitize_name(raw_name, pref.species) + if(new_name) + pref.real_name = new_name + return TOPIC_REFRESH + else + to_chat(user, SPAN_WARNING("Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .")) + return TOPIC_NOACTION else if(href_list["random_name"]) pref.real_name = random_name(pref.gender, pref.species) @@ -59,8 +60,9 @@ var/list/spawnkeys = list() for(var/spawntype in spawntypes()) spawnkeys += spawntype - var/choice = input(user, "Where would you like to spawn when late-joining?") as null|anything in spawnkeys - if(!choice || !spawntypes()[choice] || !CanUseTopic(user)) return TOPIC_NOACTION + var/choice = tgui_input_list(user, "Where would you like to spawn when late-joining?", "Late-Join", spawnkeys) + if(!choice || !spawntypes()[choice] || !CanUseTopic(user)) + return TOPIC_NOACTION pref.spawnpoint = choice return TOPIC_REFRESH diff --git a/code/modules/client/preference_setup/general/02_body.dm b/code/modules/client/preference_setup/general/02_body.dm index 55d5b898d6219..84333ed0bb39f 100644 --- a/code/modules/client/preference_setup/general/02_body.dm +++ b/code/modules/client/preference_setup/general/02_body.dm @@ -3,6 +3,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O /datum/preferences var/species = SPECIES_HUMAN var/gender = MALE //gender of character (well duh) + var/tts_seed = "arthas" // TTS seed var/b_type = "A+" //blood type (not-chooseable) var/head_hair_style = "Bald" //Hair type var/head_hair_color = "#000000" @@ -14,18 +15,17 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O var/base_skin = "" var/list/body_markings = list() var/list/body_descriptors = list() - // maps each organ to either null(intact), "cyborg" or "amputated" // will probably not be able to do this for head and torso ;) var/list/organ_data var/list/rlimb_data var/disabilities = 0 - /datum/category_item/player_setup_item/physical/body name = "Body" sort_order = 2 var/hide_species = TRUE + var/static/explorer_users = list() /datum/category_item/player_setup_item/physical/body/load_character(datum/pref_record_reader/R) pref.species = R.read("species") @@ -33,6 +33,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.species = "human" pref.age = R.read("age") pref.gender = R.read("gender") + pref.tts_seed = R.read("tts_seed") pref.head_hair_color = R.read("head_hair_color") if (!pref.head_hair_color) pref.head_hair_color = rgb(R.read("hair_red"), R.read("hair_green"), R.read("hair_blue")) @@ -60,6 +61,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O /datum/category_item/player_setup_item/physical/body/save_character(datum/pref_record_writer/W) W.write("species", pref.species) W.write("gender", pref.gender) + W.write("tts_seed", pref.tts_seed) W.write("age", pref.age) W.write("head_hair_color", pref.head_hair_color) W.write("facial_hair_color", pref.facial_hair_color) @@ -90,7 +92,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.species = SPECIES_HUMAN var/datum/species/mob_species = all_species[pref.species] - pref.gender = sanitize_inlist(pref.gender, mob_species.genders, pick(mob_species.genders)) + pref.gender = sanitize_inlist(pref.gender, mob_species.genders, pick(mob_species.genders)) pref.age = sanitize_integer(pref.age, mob_species.min_age, mob_species.max_age, initial(pref.age)) var/low_skin_tone = mob_species ? (35 - mob_species.max_skin_tone()) : -185 @@ -130,7 +132,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O . += "Species [BTN("show_species", "Info")]" . += "
    [TBTN("set_species", mob_species.name, "Selected")]" . += "

    Body [BTN("random", "Randomize")]" - . += "
    [TBTN("gender", gender2text(pref.gender), "Gender")]" + . += "
    [TBTN("gender", pref.gender, "Bodytype")]" + . += "
    [TBTN("tts_explorer", pref.tts_seed, "Voice")]" . += "
    [TBTN("age", pref.age, "Age")]" . += "
    [TBTN("blood_type", pref.b_type, "Blood Type")]" . += "
    [VTBTN("disabilities", NEARSIGHTED, pref.disabilities & NEARSIGHTED ? "Yes" : "No", "Glasses")]" @@ -238,8 +241,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O return TOPIC_REFRESH else if(href_list["gender"]) - var/new_gender = input(user, "Choose your character's gender:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.gender) as null|anything in mob_species.genders mob_species = all_species[pref.species] + var/new_gender = tgui_input_list(user, "Choose your character's bodytype", CHARACTER_PREFERENCE_INPUT_TITLE, mob_species.genders, pref.gender) if(new_gender && CanUseTopic(user) && (new_gender in mob_species.genders)) pref.gender = new_gender if(!(pref.facial_hair_style in mob_species.get_facial_hair_styles(pref.gender))) @@ -247,7 +250,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O return TOPIC_REFRESH_UPDATE_PREVIEW else if(href_list["age"]) - var/new_age = input(user, "Choose your character's age:\n([mob_species.min_age]-[mob_species.max_age])", CHARACTER_PREFERENCE_INPUT_TITLE, pref.age) as num|null + var/new_age = tgui_input_number(user, "Choose your character's age:\n([mob_species.min_age]-[mob_species.max_age])", CHARACTER_PREFERENCE_INPUT_TITLE, pref.age, mob_species.max_age, mob_species.min_age) if(new_age && CanUseTopic(user)) pref.age = max(min(round(text2num(new_age)), mob_species.max_age), mob_species.min_age) pref.skills_allocated = pref.sanitize_skills(pref.skills_allocated) // The age may invalidate skill loadouts @@ -257,24 +260,32 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.randomize_appearance_and_body_for() return TOPIC_REFRESH_UPDATE_PREVIEW + if(href_list["tts_explorer"]) + var/datum/tgui_module/tts_seeds_explorer/explorer = explorer_users[usr] + if(!explorer) + explorer = new(src) + explorer_users[usr] = explorer + explorer.tgui_interact(usr) + return TOPIC_NOACTION + else if(href_list["change_descriptor"]) if(mob_species.descriptors) var/desc_id = href_list["change_descriptor"] if(pref.body_descriptors[desc_id]) var/datum/mob_descriptor/descriptor = mob_species.descriptors[desc_id] - var/choice = input("Please select a descriptor.", "Descriptor") as null|anything in descriptor.chargen_value_descriptors + var/choice = tgui_input_list(user, "Please select a descriptor", "Descriptor", descriptor.chargen_value_descriptors) if(choice && mob_species.descriptors[desc_id]) // Check in case they sneakily changed species. pref.body_descriptors[desc_id] = descriptor.chargen_value_descriptors[choice] return TOPIC_REFRESH_UPDATE_PREVIEW else if(href_list["blood_type"]) - var/new_b_type = input(user, "Choose your character's blood-type:", CHARACTER_PREFERENCE_INPUT_TITLE) as null|anything in valid_bloodtypes + var/new_b_type = tgui_input_list(user, "Choose your character's blood-type", CHARACTER_PREFERENCE_INPUT_TITLE, valid_bloodtypes) if(new_b_type && CanUseTopic(user)) pref.b_type = new_b_type return TOPIC_REFRESH else if(href_list["show_species"]) - var/choice = input("Which species would you like to look at?") as null|anything in playable_species + var/choice = tgui_input_list(user, "Which species would you like to look at?", "Species", playable_species) if(choice) var/datum/species/current_species = all_species[choice] show_browser(user, current_species.get_description(), "window=species;size=700x400") @@ -288,11 +299,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O var/datum/species/current_species = all_species[species] if(!(current_species.spawn_flags & SPECIES_CAN_JOIN)) continue - else if((current_species.spawn_flags & SPECIES_IS_WHITELISTED) && !is_alien_whitelisted(preference_mob(),current_species)) + else if((current_species.spawn_flags & SPECIES_IS_WHITELISTED) && !is_any_alien_whitelisted(preference_mob(),current_species)) continue species_to_pick += species - var/choice = input("Select a species to play as.") as null|anything in species_to_pick + var/choice = tgui_input_list(user, "Select a species to play as", CHARACTER_PREFERENCE_INPUT_TITLE, species_to_pick, pref.species) if(!choice || !(choice in all_species)) return @@ -321,7 +332,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O sanitize_organs() if(!HasAppearanceFlag(all_species[pref.species], SPECIES_APPEARANCE_HAS_UNDERWEAR)) - pref.all_underwear.Cut() + LAZYCLEARLIST(pref.all_underwear) return TOPIC_REFRESH_UPDATE_PREVIEW @@ -345,7 +356,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O if (hair_index > 1 && valid_hairstyles[hair_index - 1]) new_h_style = valid_hairstyles[hair_index - 1] else - new_h_style = input(user, "Choose your character's hair style:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.head_hair_style) as null|anything in valid_hairstyles + new_h_style = tgui_input_list(user, "Choose your character's hair style", CHARACTER_PREFERENCE_INPUT_TITLE, valid_hairstyles, pref.head_hair_style) mob_species = all_species[pref.species] if(new_h_style && CanUseTopic(user) && (new_h_style in mob_species.get_hair_styles())) @@ -371,7 +382,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O else if(href_list["base_skin"]) if(!HasAppearanceFlag(mob_species, SPECIES_APPEARANCE_HAS_BASE_SKIN_COLOURS)) return TOPIC_NOACTION - var/new_s_base = input(user, "Choose your character's base colour:", CHARACTER_PREFERENCE_INPUT_TITLE) as null|anything in mob_species.base_skin_colours + var/new_s_base = tgui_input_list(user, "Choose your character's base colour", CHARACTER_PREFERENCE_INPUT_TITLE, mob_species.base_skin_colours) if(new_s_base && CanUseTopic(user)) pref.base_skin = new_s_base return TOPIC_REFRESH_UPDATE_PREVIEW @@ -405,7 +416,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O if (hair_index > 1 && valid_facialhairstyles[hair_index - 1]) new_f_style = valid_facialhairstyles[hair_index - 1] else - new_f_style = input(user, "Choose your character's facial-hair style:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.facial_hair_style) as null|anything in valid_facialhairstyles + new_f_style = tgui_input_list(user, "Choose your character's facial-hair style", CHARACTER_PREFERENCE_INPUT_TITLE, valid_facialhairstyles, pref.facial_hair_style) mob_species = all_species[pref.species] if(new_f_style && CanUseTopic(user) && (new_f_style in mob_species.get_facial_hair_styles(pref.gender))) @@ -423,7 +434,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O if(is_type_in_list(S, disallowed_markings) || (S.species_allowed && !(mob_species.get_bodytype() in S.species_allowed)) || (S.subspecies_allowed && !(mob_species.name in S.subspecies_allowed))) usable_markings -= M - var/new_marking = input(user, "Choose a body marking:", CHARACTER_PREFERENCE_INPUT_TITLE) as null|anything in usable_markings + var/new_marking = tgui_input_list(user, "Choose a body marking", CHARACTER_PREFERENCE_INPUT_TITLE, usable_markings) if(new_marking && CanUseTopic(user)) pref.body_markings[new_marking] = "#000000" //New markings start black return TOPIC_REFRESH_UPDATE_PREVIEW @@ -455,7 +466,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O else if(pref.organ_data[BP_CHEST] == "cyborg") limb_selection_list |= "Head" - var/organ_tag = input(user, "Which limb do you want to change?") as null|anything in limb_selection_list + var/organ_tag = tgui_input_list(user, "Which limb do you want to change?", CHARACTER_PREFERENCE_INPUT_TITLE, limb_selection_list) if(!organ_tag || !CanUseTopic(user)) return TOPIC_NOACTION @@ -503,6 +514,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O third_limb = BP_GROIN choice_options = list("Normal","Prosthesis") + if((!is_any_alien_whitelisted(user, SPECIES_FBP) && current_species.name != SPECIES_IPC) && !user.client.holder) + choice_options -= "Prosthesis" + var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in choice_options if(!new_state || !CanUseTopic(user)) return TOPIC_NOACTION @@ -545,7 +559,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O usable_manufacturers[company] = M if(!length(usable_manufacturers)) return - var/choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in usable_manufacturers + var/choice = tgui_input_list(user, "Which manufacturer do you wish to use for this limb?", "Limb -> Prothesis", usable_manufacturers) if(!choice) return pref.rlimb_data[limb] = choice @@ -568,7 +582,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O return TOPIC_REFRESH_UPDATE_PREVIEW else if(href_list["organs"]) - var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Heart", "Eyes", "Lungs", "Liver", "Kidneys", "Stomach") + var/organ_name = tgui_input_list(user, "Which internal function do you want to change?", "Internal Organ", list("Heart", "Eyes", "Lungs", "Liver", "Kidneys", "Stomach")) if(!organ_name) return var/organ = null @@ -596,7 +610,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O organ_choices -= "Normal" organ_choices += "Synthetic" - var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in organ_choices + var/new_state = tgui_input_list(user, "What state do you wish the organ to be in?", "Internal Organ", organ_choices) if(!new_state) return switch(new_state) diff --git a/code/modules/client/preference_setup/general/03_equipment.dm b/code/modules/client/preference_setup/general/03_equipment.dm index d59c575dc6dbf..671fe9a18019a 100644 --- a/code/modules/client/preference_setup/general/03_equipment.dm +++ b/code/modules/client/preference_setup/general/03_equipment.dm @@ -44,14 +44,8 @@ W.write("sensors_locked", pref.sensors_locked) /datum/category_item/player_setup_item/physical/equipment/sanitize_character() - if(!istype(pref.all_underwear)) - pref.all_underwear = list() - - for(var/datum/category_group/underwear/WRC in GLOB.underwear.categories) - for(var/datum/category_item/underwear/WRI in WRC.items) - if(WRI.is_default(pref.gender ? pref.gender : MALE)) - pref.all_underwear[WRC.name] = WRI.name - break + if(!length(pref.all_underwear)) + setup_default_underware() var/datum/species/mob_species = all_species[pref.species] if(!(mob_species && mob_species.appearance_flags & SPECIES_APPEARANCE_HAS_UNDERWEAR)) @@ -61,7 +55,7 @@ pref.all_underwear_metadata = list() for(var/underwear_category in pref.all_underwear) - var/datum/category_group/underwear/UWC = GLOB.underwear.categories_by_name[underwear_category] + var/datum/category_group/underwear/UWC = LAZYACCESS(GLOB.underwear.categories_by_name, underwear_category) if(!UWC) pref.all_underwear -= underwear_category else @@ -73,7 +67,7 @@ if(!(underwear_metadata in pref.all_underwear)) pref.all_underwear_metadata -= underwear_metadata - if(!pref.backpack || !(pref.backpack.name in backpacks_by_name)) + if(!pref.backpack || !(backpacks_by_name[pref.backpack.name])) pref.backpack = get_default_outfit_backpack() if(!istype(pref.backpack_metadata)) @@ -96,25 +90,41 @@ pref.sensors_locked = sanitize_bool(pref.sensors_locked, FALSE) /datum/category_item/player_setup_item/physical/equipment/content() - . = list() - . += "Equipment:
    " - for(var/datum/category_group/underwear/UWC in GLOB.underwear.categories) - var/item_name = (pref.all_underwear && pref.all_underwear[UWC.name]) ? pref.all_underwear[UWC.name] : "None" - . += "[UWC.name]: [item_name]" - - var/datum/category_item/underwear/UWI = UWC.items_by_name[item_name] - if(UWI) - for(var/datum/gear_tweak/gt in UWI.tweaks) - . += " [gt.get_contents(get_underwear_metadata(UWC.name, gt))]" - - . += "
    " - . += "Backpack Type: [pref.backpack.name]" + var/list/data = list() + data += "Equipment:
    " + + if(LAZYLEN(GLOB.underwear.categories)) + for(var/datum/category_group/underwear/UWC as anything in GLOB.underwear.categories) + var/item_name = LAZYACCESS(pref.all_underwear, UWC.name) || "None" + data += "[UWC.name]: [item_name]" + + var/datum/category_item/underwear/UWI = UWC.items_by_name[item_name] + if(UWI) + for(var/datum/gear_tweak/gt in UWI.tweaks) + data += " [gt.get_contents(get_underwear_metadata(UWC.name, gt))]" + + data += "
    " + + data += "Backpack Type: [pref.backpack.name]" for(var/datum/backpack_tweak/bt in pref.backpack.tweaks) - . += " [bt.get_ui_content(get_backpack_metadata(pref.backpack, bt))]" - . += "
    " - . += "Default Suit Sensor Setting: [pref.sensor_setting]
    " - . += "Suit Sensors Locked: [pref.sensors_locked ? "Locked" : "Unlocked"]
    " - return jointext(.,null) + data += " [bt.get_ui_content(get_backpack_metadata(pref.backpack, bt))]" + data += "
    " + data += "Default Suit Sensor Setting: [pref.sensor_setting]
    " + data += "Suit Sensors Locked: [pref.sensors_locked ? "Locked" : "Unlocked"]
    " + + return data.Join() + +/datum/category_item/player_setup_item/physical/equipment/proc/setup_default_underware() + if(!LAZYLEN(GLOB.underwear.categories)) + return + + LAZYINITLIST(pref.all_underwear) + for(var/datum/category_group/underwear/underwear_category as anything in GLOB.underwear.categories) + var/datum/category_item/underwear/default = underwear_category.get_default_category_item(pref.gender ? pref.gender : MALE) + if(!default) + continue + + pref.all_underwear[underwear_category.name] = default.name /datum/category_item/player_setup_item/physical/equipment/proc/get_underwear_metadata(underwear_category, datum/gear_tweak/gt) var/metadata = pref.all_underwear_metadata[underwear_category] @@ -150,26 +160,32 @@ /datum/category_item/player_setup_item/physical/equipment/OnTopic(href,list/href_list, mob/user) if(href_list["change_underwear"]) - var/datum/category_group/underwear/UWC = GLOB.underwear.categories_by_name[href_list["change_underwear"]] + var/datum/category_group/underwear/UWC = LAZYACCESS(GLOB.underwear.categories_by_name, href_list["change_underwear"]) if(!UWC) return TOPIC_NOACTION - var/datum/category_item/underwear/selected_underwear = input(user, "Choose underwear:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.all_underwear[UWC.name]) as null|anything in UWC.items + + var/datum/category_item/underwear/selected_underwear = tgui_input_list(user, "Choose underwear", CHARACTER_PREFERENCE_INPUT_TITLE, UWC.items, pref.all_underwear[UWC.name]) if(selected_underwear && CanUseTopic(user)) pref.all_underwear[UWC.name] = selected_underwear.name - return TOPIC_REFRESH_UPDATE_PREVIEW + return TOPIC_REFRESH_UPDATE_PREVIEW + + return TOPIC_NOACTION else if(href_list["underwear"] && href_list["tweak"]) var/underwear = href_list["underwear"] - if(!(underwear in pref.all_underwear)) + if(!(pref.all_underwear[underwear])) return TOPIC_NOACTION + var/datum/gear_tweak/gt = locate(href_list["tweak"]) if(!gt) return TOPIC_NOACTION + var/new_metadata = gt.get_metadata(user, get_underwear_metadata(underwear, gt)) if(new_metadata) set_underwear_metadata(underwear, gt, new_metadata) return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["change_backpack"]) - var/new_backpack = input(user, "Choose backpack style:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.backpack) as null|anything in backpacks_by_name + var/new_backpack = tgui_input_list(user, "Choose backpack style", CHARACTER_PREFERENCE_INPUT_TITLE, backpacks_by_name, pref.backpack) if(!isnull(new_backpack) && CanUseTopic(user)) pref.backpack = backpacks_by_name[new_backpack] return TOPIC_REFRESH_UPDATE_PREVIEW @@ -186,7 +202,7 @@ set_backpack_metadata(bo, bt, new_metadata) return TOPIC_REFRESH_UPDATE_PREVIEW else if(href_list["change_sensor_setting"]) - var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", pref.sensor_setting) as null | anything in SUIT_SENSOR_MODES + var/switchMode = tgui_input_list(user, "Select a sensor mode:", "Suit Sensor Mode", SUIT_SENSOR_MODES, pref.sensor_setting) if(!switchMode || !CanUseTopic(user)) return TOPIC_NOACTION pref.sensor_setting = switchMode diff --git a/code/modules/client/preference_setup/general/04_flavor.dm b/code/modules/client/preference_setup/general/04_flavor.dm index eb6a1b2a021da..f0f669ef9782b 100644 --- a/code/modules/client/preference_setup/general/04_flavor.dm +++ b/code/modules/client/preference_setup/general/04_flavor.dm @@ -51,12 +51,16 @@ switch(href_list["flavor_text"]) if("open") if("general") - var/msg = sanitize(input(usr,"Give a general description of your character. This will be shown regardless of clothing. Do not include OOC information here.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]])) as message, extra = 0) - if(CanUseTopic(user)) + var/msg = tgui_input_text( + usr, + "Give a general description of your character. This will be shown regardless of clothing. Do not include OOC information here.", + "Flavor Text", pref.flavor_texts[href_list["flavor_text"]], + encode = FALSE) + if(msg && CanUseTopic(user)) pref.flavor_texts[href_list["flavor_text"]] = msg else - var/msg = sanitize(input(usr,"Set the flavor text for your [href_list["flavor_text"]].","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]])) as message, extra = 0) - if(CanUseTopic(user)) + var/msg = tgui_input_text(usr, "Set the flavor text for your [href_list["flavor_text"]].", "Flavor Text", pref.flavor_texts[href_list["flavor_text"]], encode = FALSE) + if(msg && CanUseTopic(user)) pref.flavor_texts[href_list["flavor_text"]] = msg SetFlavorText(user) return TOPIC_HANDLED @@ -65,12 +69,12 @@ switch(href_list["flavour_text_robot"]) if("open") if("Default") - var/msg = sanitize(input(usr,"Set the default flavour text for your robot. It will be used for any module without individual setting.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"])) as message, extra = 0) - if(CanUseTopic(user)) + var/msg = tgui_input_text(usr, "Set the default flavour text for your robot. It will be used for any module without individual setting.", "Flavour Text", pref.flavour_texts_robot["Default"], encode = FALSE) + if(msg && CanUseTopic(user)) pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg else - var/msg = sanitize(input(usr,"Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this empty, default flavour text will be used for this module.","Flavour Text",html_decode(pref.flavour_texts_robot[href_list["flavour_text_robot"]])) as message, extra = 0) - if(CanUseTopic(user)) + var/msg = tgui_input_text(usr, "Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this empty, default flavour text will be used for this module.", "Flavour Text", pref.flavour_texts_robot[href_list["flavour_text_robot"]], encode = FALSE) + if(msg && CanUseTopic(user)) pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg SetFlavourTextRobot(user) return TOPIC_HANDLED diff --git a/code/modules/client/preference_setup/general/05_preview.dm b/code/modules/client/preference_setup/general/05_preview.dm index fab0d8d3e4dc5..056b8f1ecff91 100644 --- a/code/modules/client/preference_setup/general/05_preview.dm +++ b/code/modules/client/preference_setup/general/05_preview.dm @@ -1,144 +1,306 @@ -/datum/preferences/var/list/background_states = list("000", "FFF", MATERIAL_STEEL, "white") +#define CHARACTER_PREVIEW_MAP_CONTROL_ID "character_preview_map" -/datum/preferences/var/icon/bgstate = "000" +/datum/preferences + /// Preference which defines whether to equip preview character with job equipment + var/preview_job = TRUE + /// Preference which defines whether to equip preview character with selected gear + var/preview_gear = TRUE + /// Height of the icon on preview + var/preview_character_height = WORLD_ICON_SIZE + /// Preview background currently set. Must be one of the keys from `character_preview_backgrounds` list + var/background_icon_name = "steel" + /// List of character preview as: dir => preview + var/list/character_previews + /// List of cached background icons, scaled for different sizes as: `size => list(icon_name => /icon)` + var/static/list/preview_backgrounds_cache = list() + /// Pool of icons for character preview background + var/static/list/character_preview_backgrounds = list( + "steel" = icon('icons/turf/flooring/tiles.dmi', "steel"), + "tiled_light" = icon('icons/turf/flooring/tiles.dmi', "tiled_light"), + "reinforced_light" = icon('icons/turf/flooring/tiles.dmi', "reinforced_light"), + ) -/datum/preferences/var/preview_job = TRUE +/datum/preferences/Destroy() + QDEL_NULL_ASSOC_LIST(character_previews) + . = ..() -/datum/preferences/var/preview_gear = TRUE +/datum/preferences/proc/dress_preview_mob_with_gear(mob/living/carbon/human/mannequin, job_preview_type) + var/datum/gear_slot/picked_slot = get_picked_gear_slot() + var/list/gears = picked_slot.get_gear_entries() + if(trying_on_gear) + gears[trying_on_gear] = trying_on_tweaks.Copy() -/datum/preferences/var/icon/preview_icon + // Equip custom gear loadout, replacing any job items + var/list/loadout_taken_slots = list() + var/list/accessories = list() + for(var/gear_name in gears) + var/datum/gear/gear_to_try = gear_datums[gear_name] + if(!gear_to_try?.slot) + continue + if(length(gear_to_try.whitelisted) && !(mannequin.species.name in gear_to_try.whitelisted)) + continue -/datum/preferences/VV_static() - return ..() + list( - "background_states" - ) + if(length(gear_to_try.allowed_roles) && job_preview_type && !(job_preview_type in gear_to_try.allowed_roles)) + continue + + var/gear_equip_slot = gear_to_try.slot + if(gear_equip_slot == slot_tie) + accessories += gear_to_try + continue + + if(gear_equip_slot in loadout_taken_slots) + continue + if(gear_to_try.spawn_on_mob(mannequin, picked_slot.get_gear_tweaks(gear_to_try.display_name))) + loadout_taken_slots |= gear_equip_slot + + // equip accessories after other slots so they don't attach to a suit which will be replaced + for(var/datum/gear/accessory as anything in accessories) + accessory.spawn_as_accessory_on_mob(mannequin, gears[accessory.display_name]) + + return length(accessories) || length(loadout_taken_slots) + +/datum/preferences/proc/dress_preview_mob_with_job_equipment(mob/living/carbon/human/mannequin, datum/job/job_preview) + mannequin.job = job_preview.title + var/datum/mil_branch/branch = GLOB.mil_branches.get_branch(branches[job_preview.title]) + var/datum/mil_rank/rank = GLOB.mil_branches.get_rank(branches[job_preview.title], ranks[job_preview.title]) + job_preview.equip_preview(mannequin, player_alt_titles[job_preview.title], branch, rank) + return TRUE /datum/preferences/proc/dress_preview_mob(mob/living/carbon/human/mannequin) + if(!mannequin) + return + var/update_icon = FALSE copy_to(mannequin, TRUE) - var/datum/job/previewJob - if (preview_job || preview_gear) - // Determine what job is marked as 'High' priority, and dress them up as such. - if(GLOB.using_map.default_assistant_title in job_low) - previewJob = SSjobs.get_by_title(GLOB.using_map.default_assistant_title) - else - previewJob = SSjobs.get_by_title(job_high) - else + if(!preview_job && !preview_gear) return - if(preview_job && previewJob) - mannequin.job = previewJob.title - var/datum/mil_branch/branch = GLOB.mil_branches.get_branch(branches[previewJob.title]) - var/datum/mil_rank/rank = GLOB.mil_branches.get_rank(branches[previewJob.title], ranks[previewJob.title]) - previewJob.equip_preview(mannequin, player_alt_titles[previewJob.title], branch, rank) - update_icon = TRUE + + var/datum/job/job_preview + // Determine what job is marked as 'High' priority, and dress them up as such. + if(GLOB.using_map.default_assistant_title in job_low) + job_preview = SSjobs.get_by_title(GLOB.using_map.default_assistant_title) + else + job_preview = SSjobs.get_by_title(job_high) + + if(!job_preview && mannequin.icon) + update_icon = TRUE // So we don't end up stuck with a borg/AI icon after setting their priority to non-high + + var/datum/job/job_preview_type = job_preview?.type + if(preview_job && job_preview && job_preview_type && initial(job_preview_type.display_outfit_on_preview)) + update_icon = dress_preview_mob_with_job_equipment(mannequin, job_preview) + if(!(mannequin.species.appearance_flags && mannequin.species.appearance_flags & SPECIES_APPEARANCE_HAS_UNDERWEAR)) if(all_underwear) all_underwear.Cut() - if(preview_gear && !(previewJob && preview_job && (previewJob.type == /datum/job/ai || previewJob.type == /datum/job/cyborg))) - // Equip custom gear loadout, replacing any job items - var/list/loadout_taken_slots = list() - for(var/thing in Gear()) - var/datum/gear/G = gear_datums[thing] - if(G) - var/permitted = 0 - if(G.allowed_roles && length(G.allowed_roles)) - if(previewJob) - for(var/job_type in G.allowed_roles) - if(previewJob.type == job_type) - permitted = 1 - else - permitted = 1 - if(G.whitelisted && !(mannequin.species.name in G.whitelisted)) - permitted = 0 - if(!permitted) - continue - if(G.slot && G.slot != slot_tie && !(G.slot in loadout_taken_slots) && G.spawn_on_mob(mannequin, gear_list[gear_slot][G.display_name])) - loadout_taken_slots.Add(G.slot) - update_icon = TRUE + + if(preview_gear) + update_icon = dress_preview_mob_with_gear(mannequin, job_preview_type) + if(update_icon) mannequin.update_icons() +/datum/preferences/proc/update_preview_icon() + var/mob/living/carbon/human/dummy/mannequin = get_mannequin(client_ckey) + mannequin.delete_inventory(TRUE) + dress_preview_mob(mannequin) + mannequin.ImmediateOverlayUpdate() -/datum/preferences/proc/update_preview_icon(resize_only) - var/static/icon/last_built_icon - if (!resize_only || !last_built_icon) - var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(client_ckey) - mannequin.delete_inventory(TRUE) - dress_preview_mob(mannequin) - last_built_icon = icon('icons/effects/128x48.dmi', bgstate) - last_built_icon.Scale(48+32, 16+32) - mannequin.dir = WEST - last_built_icon.Blend(getFlatIcon(mannequin, WEST, always_use_defdir = TRUE), ICON_OVERLAY, 1, 9) - mannequin.dir = NORTH - last_built_icon.Blend(getFlatIcon(mannequin, NORTH, always_use_defdir = TRUE), ICON_OVERLAY, 25, 17) - mannequin.dir = SOUTH - last_built_icon.Blend(getFlatIcon(mannequin, SOUTH, always_use_defdir = TRUE), ICON_OVERLAY, 49, 1) - preview_icon = new (last_built_icon) - var/scale = client.get_preference_value(/datum/client_preference/preview_scale) - switch (scale) - if (GLOB.PREF_LARGE) - scale = 4 - if (GLOB.PREF_MEDIUM) - scale = 3 - else - scale = 2 - preview_icon.Scale(preview_icon.Width() * scale, preview_icon.Height() * scale) + /// Due to how maps work in BYOND, we should have total height of preview icons multiples of `world.icon_size`. + /// Otherwise part of the map will be empty. + var/normalized_icon_height = (ceil((mannequin.icon_height * 4 ) / WORLD_ICON_SIZE) * WORLD_ICON_SIZE) / 4 + preview_character_height = normalized_icon_height + show_character_preview(mannequin) +/datum/preferences/proc/show_character_preview(mutable_appearance/char_appearance) + PRIVATE_PROC(TRUE) -/datum/category_item/player_setup_item/physical/preview - name = "Preview" - sort_order = 5 + var/char_height_ratio = preview_character_height / WORLD_ICON_SIZE + var/preview_character_index = 0 + var/icon/background_icon = get_scaled_preview_background_icon() + for(var/dir in GLOB.cardinal) + var/screen_loc = "[CHARACTER_PREVIEW_MAP_CONTROL_ID]:0,[char_height_ratio * preview_character_index]" + var/datum/character_preview/preview = LAZYACCESS(character_previews, "[dir]") + if(!preview) + var/obj/screen/background_preview = generate_character_preview_background(screen_loc, background_icon) + var/obj/screen/character_preview = generate_character_preview(dir, char_appearance, screen_loc) + preview = new(background_preview, character_preview) + LAZYSET(character_previews, "[dir]", preview) + + preview.update_character(char_appearance, dir, screen_loc) + preview.update_background(screen_loc, background_icon) + preview.show_to(client) + preview_character_index++ + +/datum/preferences/proc/clear_character_preview() + PRIVATE_PROC(TRUE) + + for(var/dir in character_previews) + var/datum/character_preview/preview = character_previews[dir] + if(!preview) + continue + + preview.hide_from(client) + + qdel(preview) + + character_previews = null + +/datum/preferences/proc/get_scaled_preview_background_icon() + PRIVATE_PROC(TRUE) + RETURN_TYPE(/icon) + + var/icon/result_icon = character_preview_backgrounds[background_icon_name] + if(!result_icon) + background_icon_name = pick(character_preview_backgrounds) + result_icon = character_preview_backgrounds[background_icon_name] + + if(preview_character_height == WORLD_ICON_SIZE) + return result_icon + + var/icon/scaled_icon = LAZYACCESS(preview_backgrounds_cache["[preview_character_height]"], background_icon_name) + if(!scaled_icon) + scaled_icon = icon(result_icon) + scaled_icon.Scale(scaled_icon.Width(), preview_character_height) + LAZYSET(preview_backgrounds_cache["[preview_character_height]"], background_icon_name, scaled_icon) + + return scaled_icon +/datum/preferences/proc/generate_character_preview(mutable_appearance/char_appearance, dir, screen_loc) + PRIVATE_PROC(TRUE) + RETURN_TYPE(/obj/screen) -/datum/category_item/player_setup_item/physical/preview/load_character(datum/pref_record_reader/R) - pref.bgstate = R.read("bgstate") - pref.preview_icon = null + var/obj/screen/character_preview = new + character_preview.appearance = char_appearance + character_preview.plane = HUD_PLANE + character_preview.dir = dir + character_preview.screen_loc = screen_loc + return character_preview -/datum/category_item/player_setup_item/physical/preview/save_character(datum/pref_record_writer/W) - W.write("bgstate", pref.bgstate) +/datum/preferences/proc/generate_character_preview_background(screen_loc, icon/background_icon) + PRIVATE_PROC(TRUE) + RETURN_TYPE(/obj/screen) + var/obj/screen/background = new + background.layer = UNDER_HUD_LAYER + background.icon = background_icon + background.screen_loc = screen_loc -/datum/category_item/player_setup_item/physical/preview/sanitize_character() - if(!pref.bgstate || !(pref.bgstate in pref.background_states)) - pref.bgstate = pref.background_states[1] + return background +/datum/preferences/proc/update_preview_background_icon() + var/icon/new_icon = get_scaled_preview_background_icon() + for(var/dir in character_previews) + var/datum/character_preview/preview = character_previews[dir] + if(!preview) + stack_trace("Character preview is missing for dir: `[dir]`") + continue + + preview.update_background_icon(new_icon) + +/datum/category_item/player_setup_item/physical/preview + name = "Preview" + sort_order = 5 /datum/category_item/player_setup_item/physical/preview/OnTopic(query_text, list/query, mob/user) if (!query) return - else if (query["cyclebg"]) - var/index = pref.background_states.Find(pref.bgstate) - if (!index || index == length(pref.background_states)) - pref.bgstate = pref.background_states[1] - else - pref.bgstate = pref.background_states[index + 1] - return TOPIC_REFRESH_UPDATE_PREVIEW - else if (query["resize"]) - pref.client?.cycle_preference(/datum/client_preference/preview_scale) - return TOPIC_REFRESH_UPDATE_PREVIEW - else if (query["previewjob"]) + + if (query["job_preview"]) pref.preview_job = !pref.preview_job - pref.preview_icon = null return TOPIC_REFRESH_UPDATE_PREVIEW + else if (query["previewgear"]) pref.preview_gear = !pref.preview_gear - pref.preview_icon = null return TOPIC_REFRESH_UPDATE_PREVIEW - return ..() + else if(query["set_preview_background"]) + var/background_name = query["set_preview_background"] + if(pref.background_icon_name == background_name || !pref.character_preview_backgrounds[background_name]) + return TOPIC_NOACTION + + pref.background_icon_name = background_name + return TOPIC_REFRESH_UPDATE_PREVIEW_BACKGROUND_ICON + + return ..() /datum/category_item/player_setup_item/physical/preview/content(mob/user) - if(!pref.preview_icon) - pref.update_preview_icon() - send_rsc(user, pref.preview_icon, "previewicon.png") - var/width = pref.preview_icon.Width() - var/height = pref.preview_icon.Height() - . = "Preview:" - . += "
    [BTN("cyclebg", "Cycle Background")]" - . += " - [BTN("previewgear", "[pref.preview_gear ? "Hide" : "Show"] Loadout")]" - . += " - [BTN("previewjob", "[pref.preview_job ? "Hide" : "Show"] Uniform")]" - . += " - [BTN("resize", "Resize")]" - . += {"
    "} + var/datum/asset/character_preview_asset = get_asset_datum(/datum/asset/simple/character_preview) + character_preview_asset.send(user) + + . = "Preview Toggles:" + . += "
    [BTN("previewgear", "[pref.preview_gear ? "Hide" : "Show"] Loadout")]" + . += " - [BTN("job_preview", "[pref.preview_job ? "Hide" : "Show"] Uniform")]" + . += "
    " + . += "Preview Background:
    " + for(var/background_name in pref.character_preview_backgrounds) + . += VCBTN( \ + "set_preview_background", \ + background_name, \ + "", \ + "image_button [background_name == pref.background_icon_name ? "linkOn" : ""]") + +/datum/category_item/player_setup_item/physical/preview/load_preferences(datum/pref_record_reader/R) + pref.preview_job = R.read("preview_job") + pref.preview_gear = R.read("preview_gear") + pref.background_icon_name = R.read("background_icon_name") + +/datum/category_item/player_setup_item/physical/preview/save_preferences(datum/pref_record_writer/W) + W.write("preview_job", pref.preview_job) + W.write("preview_gear", pref.preview_gear) + W.write("background_icon_name", pref.background_icon_name) + +/datum/character_preview + /// Background of the character preview image + VAR_PRIVATE/obj/screen/background + /// Character preview image + VAR_PRIVATE/obj/screen/character + +/datum/character_preview/New(obj/screen/background, obj/screen/character) + ASSERT(istype(background)) + ASSERT(istype(character)) + + src.background = background + src.character = character + +/datum/character_preview/Destroy() + QDEL_NULL(background) + QDEL_NULL(character) + . = ..() + +/datum/character_preview/proc/update_character(mutable_appearance/appearence, dir, screen_loc) + ASSERT(appearence) + ASSERT(dir) + ASSERT(screen_loc) + + character.appearance = appearence + character.dir = dir + character.plane = HUD_PLANE + character.screen_loc = screen_loc + +/datum/character_preview/proc/update_background(screen_loc, icon/new_icon) + background.screen_loc = screen_loc + update_background_icon(new_icon) + +/datum/character_preview/proc/update_background_icon(icon/new_icon) + background.icon = new_icon + +/datum/character_preview/proc/show_to(client/client) + client = resolve_client(client) + if(!client) + return + + client.screen += background + client.screen += character + +/datum/character_preview/proc/hide_from(client/client) + client = resolve_client(client) + if(!client) + return + + client.screen -= background + client.screen -= character + +#undef CHARACTER_PREVIEW_MAP_CONTROL_ID diff --git a/code/modules/client/preference_setup/global/01_ui.dm b/code/modules/client/preference_setup/global/01_ui.dm index 3f059b373bc72..ea7243482f209 100644 --- a/code/modules/client/preference_setup/global/01_ui.dm +++ b/code/modules/client/preference_setup/global/01_ui.dm @@ -1,15 +1,18 @@ /datum/preferences - var/clientfps = 40 - var/ooccolor = "#010000" //Whatever this is set to acts as 'reset' color and is thus unusable as an actual custom color - + var/clientfps = CLIENT_DEFAULT_FPS + var/ooccolor = "#010000" var/UI_style = "Midnight" var/UI_style_color = "#ffffff" var/UI_style_alpha = 255 + var/tooltip_style = "Midnight" //Style for popup tooltips + + /datum/category_item/player_setup_item/player_global/ui name = "UI" sort_order = 1 + /datum/category_item/player_setup_item/player_global/ui/load_preferences(datum/pref_record_reader/R) pref.UI_style = R.read("UI_style") pref.UI_style_color = R.read("UI_style_color") @@ -17,6 +20,7 @@ pref.ooccolor = R.read("ooccolor") pref.clientfps = R.read("clientfps") + /datum/category_item/player_setup_item/player_global/ui/save_preferences(datum/pref_record_writer/W) W.write("UI_style", pref.UI_style) W.write("UI_style_color", pref.UI_style_color) @@ -24,12 +28,14 @@ W.write("ooccolor", pref.ooccolor) W.write("clientfps", pref.clientfps) + /datum/category_item/player_setup_item/player_global/ui/sanitize_preferences() pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style)) pref.UI_style_color = sanitize_hexcolor(pref.UI_style_color, initial(pref.UI_style_color)) pref.UI_style_alpha = sanitize_integer(pref.UI_style_alpha, 0, 255, initial(pref.UI_style_alpha)) pref.ooccolor = sanitize_hexcolor(pref.ooccolor, initial(pref.ooccolor)) - pref.clientfps = sanitize_integer(pref.clientfps, CLIENT_MIN_FPS, CLIENT_MAX_FPS, initial(pref.clientfps)) + sanitize_client_fps() + /datum/category_item/player_setup_item/player_global/ui/content(mob/user) . += "UI Settings
    " @@ -37,6 +43,7 @@ . += "Custom UI (recommended for White UI):
    " . += "-Color: [pref.UI_style_color]
    __
    reset
    " . += "-Alpha(transparency): [pref.UI_style_alpha] reset
    " + . += "Tooltip Style: [pref.tooltip_style]
    " if(can_select_ooc_color(user)) . += "OOC Color: " if(pref.ooccolor == initial(pref.ooccolor)) @@ -45,6 +52,7 @@ . += "[pref.ooccolor]
    __
    reset
    " . += "Client FPS: [pref.clientfps]
    " + /datum/category_item/player_setup_item/player_global/ui/OnTopic(href,list/href_list, mob/user) if(href_list["select_style"]) var/UI_style_new = input(user, "Choose UI style.", CHARACTER_PREFERENCE_INPUT_TITLE, pref.UI_style) as null|anything in all_ui_styles @@ -71,20 +79,22 @@ return TOPIC_REFRESH else if(href_list["select_fps"]) - var/version_message - if (user.client && user.client.byond_version < 511) - version_message = "\nYou need to be using byond version 511 or later to take advantage of this feature, your version of [user.client.byond_version] is too low" - if (world.byond_version < 511) - version_message += "\nThis server does not currently support client side fps. You can set now for when it does." - var/new_fps = input(user, "Choose your desired fps.[version_message]\n(0 = synced with server tick rate (currently:[world.fps]))", "Global Preference") as num|null - if (isnum(new_fps) && CanUseTopic(user)) - pref.clientfps = clamp(new_fps, CLIENT_MIN_FPS, CLIENT_MAX_FPS) - + var/response = input(user, "[CLIENT_MIN_FPS] - [CLIENT_MAX_FPS] (default [CLIENT_DEFAULT_FPS])", "Select Target FPS") as null | num + if (isnum(response) && CanUseTopic(user)) + pref.clientfps = response + sanitize_client_fps() var/mob/target_mob = preference_mob() - if(target_mob && target_mob.client) - target_mob.client.apply_fps(pref.clientfps) + if (target_mob?.client) + target_mob.client.fps = pref.clientfps return TOPIC_REFRESH + else if(href_list["select_tooltip_style"]) + var/tooltip_style_new = input(user, "Choose tooltip style.", "Global Preference", pref.tooltip_style) as null|anything in all_tooltip_styles + if(!tooltip_style_new || !CanUseTopic(user)) + return TOPIC_NOACTION + pref.tooltip_style = tooltip_style_new + return TOPIC_REFRESH + else if(href_list["reset"]) switch(href_list["reset"]) if("ui") @@ -97,5 +107,10 @@ return ..() + +/datum/category_item/player_setup_item/player_global/ui/proc/sanitize_client_fps() + pref.clientfps = clamp(floor(pref.clientfps), CLIENT_MIN_FPS, CLIENT_MAX_FPS) + + /proc/can_select_ooc_color(mob/user) return config.allow_admin_ooccolor && check_rights(R_ADMIN, 0, user) diff --git a/code/modules/client/preference_setup/global/05_settings.dm b/code/modules/client/preference_setup/global/05_settings.dm index 413e7bc2f06f3..1d8f17d9b3784 100644 --- a/code/modules/client/preference_setup/global/05_settings.dm +++ b/code/modules/client/preference_setup/global/05_settings.dm @@ -92,7 +92,6 @@ /client/proc/set_preference(preference, set_preference) var/datum/client_preference/cp = get_client_preference(preference) - if(!cp) return FALSE diff --git a/code/modules/client/preference_setup/global/preferences.dm b/code/modules/client/preference_setup/global/preferences.dm index 107682abd5d4f..6810b6c3bd33a 100644 --- a/code/modules/client/preference_setup/global/preferences.dm +++ b/code/modules/client/preference_setup/global/preferences.dm @@ -8,8 +8,6 @@ GLOBAL_VAR_CONST(PREF_SHORT, "Short") GLOBAL_VAR_CONST(PREF_LONG, "Long") GLOBAL_VAR_CONST(PREF_SHOW, "Show") GLOBAL_VAR_CONST(PREF_HIDE, "Hide") -GLOBAL_VAR_CONST(PREF_FANCY, "Fancy") -GLOBAL_VAR_CONST(PREF_PLAIN, "Plain") GLOBAL_VAR_CONST(PREF_PRIMARY, "Primary") GLOBAL_VAR_CONST(PREF_ALL, "All") GLOBAL_VAR_CONST(PREF_OFF, "Off") @@ -31,12 +29,16 @@ GLOBAL_VAR_CONST(PREF_LARGE, "Large") GLOBAL_VAR_CONST(PREF_LOW, "Low") GLOBAL_VAR_CONST(PREF_MED, "Medium") GLOBAL_VAR_CONST(PREF_HIGH, "High") +GLOBAL_VAR_CONST(PREF_CLIENT_VIEW_SMALL, "15x15") +GLOBAL_VAR_CONST(PREF_CLIENT_VIEW_MEDIUM, "17x15") +GLOBAL_VAR_CONST(PREF_CLIENT_VIEW_LARGE, "19x15") var/global/list/_client_preferences var/global/list/_client_preferences_by_key var/global/list/_client_preferences_by_type /proc/get_client_preferences() + RETURN_TYPE(/list) if(!_client_preferences) _client_preferences = list() for(var/ct in subtypesof(/datum/client_preference)) @@ -46,6 +48,7 @@ var/global/list/_client_preferences_by_type return _client_preferences /proc/get_client_preference(datum/client_preference/preference) + RETURN_TYPE(/datum/client_preference) if(istype(preference)) return preference if(ispath(preference)) @@ -53,6 +56,7 @@ var/global/list/_client_preferences_by_type return get_client_preference_by_key(preference) /proc/get_client_preference_by_key(preference) + RETURN_TYPE(/datum/client_preference) if(!_client_preferences_by_key) _client_preferences_by_key = list() for(var/ct in get_client_preferences()) @@ -61,6 +65,7 @@ var/global/list/_client_preferences_by_type return _client_preferences_by_key[preference] /proc/get_client_preference_by_type(preference) + RETURN_TYPE(/datum/client_preference) if(!_client_preferences_by_type) _client_preferences_by_type = list() for(var/ct in get_client_preferences()) @@ -90,6 +95,20 @@ var/global/list/_client_preferences_by_type * Player Preferences * *********************/ +/datum/client_preference/client_view + description = "Size of playable zone window" + key = "CLIENT_VIEW" + options = list(GLOB.PREF_CLIENT_VIEW_SMALL, GLOB.PREF_CLIENT_VIEW_MEDIUM, GLOB.PREF_CLIENT_VIEW_LARGE) + default_value = GLOB.PREF_CLIENT_VIEW_LARGE + +/datum/client_preference/client_view/changed(mob/preference_mob, new_value) + var/client/mob_client = preference_mob?.client + if(!mob_client) + return + + mob_client.view = new_value + mob_client.update_skybox(TRUE) + /datum/client_preference/play_admin_midis description = "Play admin midis" key = "SOUND_MIDI" @@ -135,20 +154,6 @@ var/global/list/_client_preferences_by_type key = "CHAT_GHOSTRADIO" options = list(GLOB.PREF_ALL_CHATTER, GLOB.PREF_NEARBY) -/datum/client_preference/preview_scale - description = "Options Preview Scale" - key = "PREVIEW_SCALE" - options = list(GLOB.PREF_MEDIUM, GLOB.PREF_LARGE, GLOB.PREF_SMALL) - -/datum/client_preference/preview_scale/changed(mob/mob, val) - var/datum/preferences/prefs = mob.client?.prefs - if (!prefs) - return - prefs.update_preview_icon(TRUE) - if (!prefs.popup) - return - prefs.update_setup_window(usr) - /datum/client_preference/language_display description = "Show Language Names" key = "LANGUAGE_DISPLAY" @@ -201,11 +206,6 @@ var/global/list/_client_preferences_by_type key = "SHOW_PROGRESS" options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) -/datum/client_preference/browser_style - description = "Fake NanoUI Browser Style" - key = "BROWSER_STYLED" - options = list(GLOB.PREF_FANCY, GLOB.PREF_PLAIN) - /datum/client_preference/autohiss description = "Autohiss" key = "AUTOHISS" @@ -220,6 +220,10 @@ var/global/list/_client_preferences_by_type description = "Draw gun based on intent" key = "HOLSTER_ON_INTENT" +/datum/client_preference/safety_toggle_on_intent + description = "Ignore safety on harm intent" + key = "SAFETY_ON_INTENT" + /datum/client_preference/show_credits description = "Show End Titles" key = "SHOW_CREDITS" @@ -274,20 +278,62 @@ var/global/list/_client_preferences_by_type for(var/atom/movable/renderer/R as anything in preference_mob.renderers) R.GraphicsUpdate() -/datum/client_preference/goonchat - description = "Use Goon Chat" - key = "USE_GOONCHAT" - -/datum/client_preference/goonchat/changed(mob/preference_mob, new_value) - if(preference_mob && preference_mob.client) - var/client/C = preference_mob.client - if(new_value == GLOB.PREF_YES) - C.chatOutput.loaded = FALSE - C.chatOutput.start() - else - C.force_white_theme() - winset(C, "output", "is-visible=true;is-disabled=false") - winset(C, "browseroutput", "is-visible=false") +/datum/client_preference/tgui_fancy + description = "Fancy TGUI" + key = "TGUI_FANCY" + options = list(GLOB.PREF_YES, GLOB.PREF_NO) + +/datum/client_preference/tgui_input + description = "TGUI Input" + key = "TGUI_INPUT" + options = list(GLOB.PREF_YES, GLOB.PREF_NO) + +/datum/client_preference/tgui_input_large + description = "TGUI Input - Large Buttons" + key = "TGUI_INPUT_LARGE" + options = list(GLOB.PREF_YES, GLOB.PREF_NO) + +/datum/client_preference/tgui_input_swap + description = "TGUI Input - Swap Buttons" + key = "TGUI_INPUT_SWAP" + options = list(GLOB.PREF_YES, GLOB.PREF_NO) + +/datum/client_preference/tgui_lock + description = "Lock TGUI" + key = "TGUI_LOCK" + options = list(GLOB.PREF_YES, GLOB.PREF_NO) + default_value = GLOB.PREF_NO + +/datum/client_preference/notify_ghost_trap + description = "Notify when ghost-trap roles are available." + key = "GHOST_TRAP" + options = list(GLOB.PREF_YES, GLOB.PREF_NO) + default_value = GLOB.PREF_YES + + +/datum/client_preference/surgery_skip_radial + description = "Skip the radial menu for single-option surgeries." + key = "SURGERY_SKIP_RADIAL" + options = list(GLOB.PREF_YES, GLOB.PREF_NO) + +/datum/client_preference/runechat_mob + description = "Enable mob runechat" + key = "RUNECHAT_MOB" + options = list(GLOB.PREF_YES, GLOB.PREF_NO) + default_value = GLOB.PREF_YES + +/datum/client_preference/runechat_obj + description = "Enable obj runechat" + key = "RUNECHAT_OBJ" + options = list(GLOB.PREF_YES, GLOB.PREF_NO) + default_value = GLOB.PREF_YES + +/datum/client_preference/runechat_messages_length + description = "Length of runechat messages" + key = "RUNECHAT_MESSAGES_LENGTH" + options = list(GLOB.PREF_SHORT, GLOB.PREF_LONG) + default_value = GLOB.PREF_SHORT + /******************** * General Staff Preferences * @@ -322,6 +368,11 @@ var/global/list/_client_preferences_by_type key = "CHAT_RLOOC" options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) +/datum/client_preference/ooc_donation_color + description = "OOC donator color" + key = "OOC_DONATION_COLOR" + options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) + /******************** * Admin Preferences * ********************/ diff --git a/code/modules/client/preference_setup/global/prefixes.dm b/code/modules/client/preference_setup/global/prefixes.dm index 617fb92f8b580..35ff3777e2fef 100644 --- a/code/modules/client/preference_setup/global/prefixes.dm +++ b/code/modules/client/preference_setup/global/prefixes.dm @@ -26,4 +26,7 @@ /singleton/prefix/custom_emote name = "Emote, custom" - default_key = "/" + // [SIERRA-EDIT] + // default_key = "/" // SIERRA-EDIT - ORIGINAL + default_key = "*" + // [SIERRA-EDIT] diff --git a/code/modules/client/preference_setup/keybindings/keybindings_pref.dm b/code/modules/client/preference_setup/keybindings/keybindings_pref.dm new file mode 100644 index 0000000000000..7285fc7db5349 --- /dev/null +++ b/code/modules/client/preference_setup/keybindings/keybindings_pref.dm @@ -0,0 +1,167 @@ +/datum/preferences + /// Custom Keybindings + var/list/key_bindings = list() + var/hotkeys = TRUE + +/datum/category_group/player_setup_category/controls + name = "Controls" + sort_order = 9 + category_item_type = /datum/category_item/player_setup_item/controls + +/datum/category_item/player_setup_item/controls/keybindings + name = "Keybindings" + sort_order = 1 + +/datum/category_item/player_setup_item/controls/keybindings/load_preferences(datum/pref_record_reader/R) + pref.key_bindings = R.read("key_bindings") + +/datum/category_item/player_setup_item/controls/keybindings/sanitize_preferences() + pref.key_bindings = sanitize_keybindings(pref.key_bindings) + pref.check_keybindings() + +/datum/category_item/player_setup_item/controls/keybindings/save_preferences(datum/pref_record_writer/W) + W.write("key_bindings", pref.key_bindings) + +/datum/category_item/player_setup_item/controls/keybindings/content(mob/user) + . = list() + // Create an inverted list of keybindings -> key + var/list/user_binds = list() + for (var/key in pref.key_bindings) + for(var/kb_name in pref.key_bindings[key]) + user_binds[kb_name] += list(key) + + var/list/kb_categories = list() + // Group keybinds by category + for (var/name in GLOB.keybindings_by_name) + var/datum/keybinding/kb = GLOB.keybindings_by_name[name] + kb_categories[kb.category] += list(kb) + + . += "
    " + . += "
    " + for (var/category in kb_categories) + . += "

    [category]

    " + . += "" + for (var/i in kb_categories[category]) + var/datum/keybinding/kb = i + if(!length(user_binds[kb.name]) || (user_binds[kb.name][1] == "None" && length(user_binds[kb.name]) == 1)) + . += "" + var/list/default_keys = pref.hotkeys ? kb.hotkey_keys : kb.classic_keys + var/class + if(user_binds[kb.name] ~= default_keys) + class = "class='linkOff fluid'" + else + class = "class='fluid' href ='?src=\ref[src];preference=keybinding_reset;keybinding=[kb.name];old_keys=[jointext(user_binds[kb.name], ",")]" + + . += {""} + . += "" + else + var/bound_key = user_binds[kb.name][1] + var/normal_name = GLOB.keybindings_map_reverse[bound_key] ? GLOB.keybindings_map[bound_key] : bound_key + . += "" + for(var/bound_key_index in 2 to length(user_binds[kb.name])) + bound_key = user_binds[kb.name][bound_key_index] + normal_name = GLOB.keybindings_map_reverse[bound_key] ? GLOB.keybindings_map_reverse[bound_key] : bound_key + . += "" + if(length(user_binds[kb.name]) < MAX_KEYS_PER_KEYBIND) + . += "" + for(var/j in 1 to MAX_KEYS_PER_KEYBIND - (length(user_binds[kb.name]) + 1)) + . += "" + var/list/default_keys = pref.hotkeys ? kb.hotkey_keys : kb.classic_keys + . += {""} + . += "" + . += "
    [kb.full_name]NoneReset
    [kb.full_name][pretty_keybinding_name(normal_name)][pretty_keybinding_name(normal_name)]NoneReset
    " + + . += "
    " + . += "

    " + . += "Reset to default" + . += "
    " + + return jointext(., null) + +/datum/category_item/player_setup_item/controls/keybindings/OnTopic(href, list/href_list, mob/user) + switch(href_list["preference"]) + if("keybindings_capture") + var/datum/keybinding/kb = GLOB.keybindings_by_name[href_list["keybinding"]] + var/old_key = href_list["old_key"] + capture_keybinding(user, kb, old_key) + return TOPIC_REFRESH + + if("keybindings_set") + var/kb_name = href_list["keybinding"] + if(!kb_name) + close_browser(user, "window=capturekeypress") + return TOPIC_REFRESH + + var/clear_key = text2num(href_list["clear_key"]) + var/old_key = href_list["old_key"] + if(clear_key) + if(pref.key_bindings[old_key]) + pref.key_bindings[old_key] -= kb_name + if(!(kb_name in pref.key_bindings["None"])) + LAZYADD(pref.key_bindings["None"], kb_name) + if(!length(pref.key_bindings[old_key])) + pref.key_bindings -= old_key + close_browser(user, "window=capturekeypress") + user.client.set_macros() + return TOPIC_REFRESH + + var/new_key = uppertext(href_list["key"]) + var/AltMod = text2num(href_list[ALT_CLICK]) ? "Alt" : "" + var/CtrlMod = text2num(href_list[CTRL_CLICK]) ? "Ctrl" : "" + var/ShiftMod = text2num(href_list[SHIFT_CLICK]) ? "Shift" : "" + var/numpad = text2num(href_list["numpad"]) ? "Numpad" : "" + + if(!new_key) // Just in case (; - not work although keyCode 186 and nothing should break) + close_browser(user, "window=capturekeypress") + return TOPIC_REFRESH + + if(GLOB.keybindings_map[new_key]) + new_key = GLOB.keybindings_map[new_key] + + var/full_key + switch(new_key) + if("Alt") + full_key = "[new_key][CtrlMod][ShiftMod]" + if("Ctrl") + full_key = "[AltMod][new_key][ShiftMod]" + if("Shift") + full_key = "[AltMod][CtrlMod][new_key]" + else + full_key = "[AltMod][CtrlMod][ShiftMod][numpad][new_key]" + if(kb_name in pref.key_bindings[full_key]) //We pressed the same key combination that was already bound here, so let's remove to re-add and re-sort. + pref.key_bindings[full_key] -= kb_name + if(pref.key_bindings[old_key]) + pref.key_bindings[old_key] -= kb_name + if(!length(pref.key_bindings[old_key])) + pref.key_bindings -= old_key + pref.key_bindings[full_key] += list(kb_name) + pref.key_bindings[full_key] = sortTim(pref.key_bindings[full_key], GLOBAL_PROC_REF(cmp_text_asc)) + + close_browser(user, "window=capturekeypress") + user.client.set_macros() + return TOPIC_REFRESH + + if("keybindings_reset") + pref.key_bindings = deepCopyList(GLOB.hotkey_keybinding_list_by_key) + user.client.set_macros() + return TOPIC_REFRESH + + if("keybinding_reset") + var/kb_name = href_list["keybinding"] + var/list/old_keys = splittext(href_list["old_keys"], ",") + + for(var/old_key in old_keys) + if(!pref.key_bindings[old_key]) + continue + pref.key_bindings[old_key] -= kb_name + if(!length(pref.key_bindings[old_key])) + pref.key_bindings -= old_key + + var/datum/keybinding/kb = GLOB.keybindings_by_name[kb_name] + for(var/key in kb.hotkey_keys) + pref.key_bindings[key] += list(kb_name) + pref.key_bindings[key] = sortTim(pref.key_bindings[key], GLOBAL_PROC_REF(cmp_text_asc)) + user.client.set_macros() + return TOPIC_REFRESH + + return ..() diff --git a/code/modules/client/preference_setup/keybindings/keybindings_proc.dm b/code/modules/client/preference_setup/keybindings/keybindings_proc.dm new file mode 100644 index 0000000000000..50d44f275c688 --- /dev/null +++ b/code/modules/client/preference_setup/keybindings/keybindings_proc.dm @@ -0,0 +1,61 @@ +/datum/category_item/player_setup_item/controls/keybindings/proc/pretty_keybinding_name(keybinding) + var/list/keys = list() + var/static/regex/modKeys = regex("Shift|Ctrl|Alt") + + while(modKeys.Find(keybinding)) + keys += modKeys.match + keybinding = copytext(keybinding, length(modKeys.match)+1) + + if (keybinding) + keys += keybinding + + return jointext(keys, "+") + +/datum/category_item/player_setup_item/controls/keybindings/proc/capture_keybinding(mob/user, datum/keybinding/kb, old_key) + var/HTML = {" +
    + Keybinding: [kb.full_name]
    [kb.description] +

    + Press any key to change
    Press ESC to clear
    +
    + + "} + winshow(user, "capturekeypress", TRUE) + var/datum/browser/popup = new(user, "capturekeypress", "
    Keybindings
    ", 350, 300) + popup.set_content(HTML) + popup.open(FALSE) + +/proc/sanitize_keybindings(value) + var/list/base_bindings = sanitize_islist(value,list()) + for(var/key in base_bindings) + base_bindings[key] = base_bindings[key] & GLOB.keybindings_by_name + if(!length(base_bindings[key])) + base_bindings -= key + return base_bindings + +/proc/sanitize_islist(value, default) + if(islist(value) && length(value)) + return value + if(default) + return default diff --git a/code/modules/client/preference_setup/laws/laws_pref.dm b/code/modules/client/preference_setup/laws/laws_pref.dm index 7577f8a42b2ce..a5f4b024c97bc 100644 --- a/code/modules/client/preference_setup/laws/laws_pref.dm +++ b/code/modules/client/preference_setup/laws/laws_pref.dm @@ -75,7 +75,7 @@ var/datum/ai_laws/ai_laws = law_set_type var/ai_law_name = initial(ai_laws.name) if(initial(ai_laws.shackles)) // Now this is one terribly snowflaky var - ADD_SORTED(valid_lawsets, ai_law_name, /proc/cmp_text_asc) + ADD_SORTED(valid_lawsets, ai_law_name, GLOBAL_PROC_REF(cmp_text_asc)) valid_lawsets[ai_law_name] = law_set_type // Post selection diff --git a/code/modules/client/preference_setup/loadout/_defines.dm b/code/modules/client/preference_setup/loadout/_defines.dm index ced763ae24c26..03e1ae59862d9 100644 --- a/code/modules/client/preference_setup/loadout/_defines.dm +++ b/code/modules/client/preference_setup/loadout/_defines.dm @@ -2,3 +2,26 @@ #define GEAR_HAS_TYPE_SELECTION FLAG(1) #define GEAR_HAS_SUBTYPE_SELECTION FLAG(2) #define GEAR_HAS_NO_CUSTOMIZATION FLAG(3) + +/// All available categories of `/datum/gear`. +/// If you add item of category, that is not listed here - add new here. +/// Defines are sorted by name, so insert new ones sorting order wise. +#define GEAR_CATEGORY_ACCESSORIES "Accessories" +#define GEAR_CATEGORY_AUGMENTS "Augments" +#define GEAR_CATEGORY_CLOTHING_PIECES "Clothing Pieces" +#define GEAR_CATEGORY_COSMETICS "Cosmetics" +#define GEAR_CATEGORY_DOCUMENTS "Documents" +#define GEAR_CATEGORY_EARWEAR "Earwear" +#define GEAR_CATEGORY_GENERAL "General" +#define GEAR_CATEGORY_GLASSES_AND_EYEWEAR "Glasses and Eyewear" +#define GEAR_CATEGORY_GLOVES_AND_HANDWEAR "Gloves and Handwear" +#define GEAR_CATEGORY_HATS_AND_HEADWEAR "Hats and Headwear" +#define GEAR_CATEGORY_MASKS "Masks" +#define GEAR_CATEGORY_SHOES_AND_FOOTWEAR "Shoes and Footwear" +#define GEAR_CATEGORY_SKILL_BADGES "Skill Badges" +#define GEAR_CATEGORY_STORAGE_ACCESSORIES "Storage Accessories" +#define GEAR_CATEGORY_SUITS_AND_OVERWEAR "Suits and Overwear" +#define GEAR_CATEGORY_TACTICAL_EQUIPMENT "Tactical Equipment" +#define GEAR_CATEGORY_TRINKETS "Trinkets" +#define GEAR_CATEGORY_UNIFORMS_AND_CASUAL_DRESS "Uniforms and Casual Dress" +#define GEAR_CATEGORY_UTILITY "Utility" diff --git a/code/modules/client/preference_setup/loadout/gear.dm b/code/modules/client/preference_setup/loadout/gear.dm new file mode 100644 index 0000000000000..ef1a72503cbce --- /dev/null +++ b/code/modules/client/preference_setup/loadout/gear.dm @@ -0,0 +1,319 @@ +/datum/gear + /// Name/index. Must be unique + var/display_name + /// Description of this gear. If left blank will default to the description of the pathed item + var/description + /// Path to item + var/path + /// Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points + var/cost = 1 + /// Slot to equip to + var/slot + /// Roles that can spawn with this item + var/list/allowed_roles + /// Service branches that can spawn with it + var/list/allowed_branches + /// Skills required to spawn with this item + var/list/required_skills + /// Factions required to spawn with this item + var/list/required_factions + /// Term to check the whitelist for. + var/whitelisted + /// Category that will be used to properly group and sort gear. + /// All available categories are located at `/code/modules/client/preference_setup/loadout/_defines.dm`. + /// If you need to create gear of new category - create new define there. + var/category = GEAR_CATEGORY_GENERAL + /// Special tweaks in New + var/flags + /// Special tweak in New + var/custom_setup_proc + /// Donation tier the player should have to access this gear + var/donation_tier = DONATION_TIER_NONE + /// List of datums which will alter the item after it has been spawned + var/list/gear_tweaks = list() + +/datum/gear/New() + if(HAS_FLAGS(flags, GEAR_HAS_TYPE_SELECTION|GEAR_HAS_SUBTYPE_SELECTION)) + CRASH("May not have both type and subtype selection tweaks") + + if(!description) + var/obj/O = path + description = initial(O.desc) + + if(flags & GEAR_HAS_COLOR_SELECTION) + gear_tweaks += gear_tweak_free_color_choice() + + if(!(flags & GEAR_HAS_NO_CUSTOMIZATION)) + gear_tweaks += gear_tweak_free_name(display_name) + gear_tweaks += gear_tweak_free_desc(description) + + if(flags & GEAR_HAS_TYPE_SELECTION) + gear_tweaks += new/datum/gear_tweak/path/type(path) + + if(flags & GEAR_HAS_SUBTYPE_SELECTION) + gear_tweaks += new/datum/gear_tweak/path/subtype(path) + + if(custom_setup_proc) + gear_tweaks += new/datum/gear_tweak/custom_setup(custom_setup_proc) + +/datum/gear/proc/get_description(metadata) + . = description + for(var/datum/gear_tweak/gt in gear_tweaks) + . = gt.tweak_description(., metadata["[gt]"]) + +/datum/gear/proc/is_permitted_to_equip(mob/living/carbon/human/human_to_check, datum/job/job) + if(!allowed_donation_tier(human_to_check)) + return FALSE + + if(length(allowed_branches) && (!human_to_check.char_branch || !(human_to_check.char_branch.type in allowed_branches))) + return FALSE + + if(length(allowed_roles) && !(job.type in allowed_roles)) + return FALSE + + if(length(required_skills)) + for(var/required_skill_name in required_skills) + var/skill_level = required_skills[required_skill_name] + if(!human_to_check.skill_check(required_skill_name, skill_level)) + return FALSE + + if(length(required_factions)) + var/singleton/cultural_info/faction = human_to_check.get_cultural_value(TAG_FACTION) + if(!faction.name) + return FALSE + + if(!(faction.name in required_factions)) + return FALSE + + return !whitelisted || (human_to_check.species.name in whitelisted) + +/datum/gear/proc/allowed_donation_tier(client/client_to_check) + client_to_check = resolve_client(client_to_check) + ASSERT(client_to_check) + ASSERT(client_to_check.donator_info) + + return !donation_tier || client_to_check.donator_info.donation_tier_available(donation_tier) + +/datum/gear/proc/spawn_as_accessory_on_mob(mob/living/carbon/human/H, metadata) + return H.equip_to_slot_or_del(spawn_item(H, H, metadata), slot_tie) + +/datum/gear/proc/spawn_item(mob/user, atom/location, metadata) + var/datum/gear_data/gd = new(path, location) + for(var/datum/gear_tweak/gt in gear_tweaks) + gt.tweak_gear_data(metadata && metadata["[gt]"], gd) + + var/item = new gd.path(gd.location) + for(var/datum/gear_tweak/gt in gear_tweaks) + gt.tweak_item(user, item, metadata && metadata["[gt]"]) + + return item + +/datum/gear/proc/spawn_on_mob(mob/living/carbon/human/H, metadata) + var/obj/item/item_to_equip = spawn_item(H, H, metadata) + if(H.equip_to_slot_if_possible(item_to_equip, slot, TRYEQUIP_REDRAW | TRYEQUIP_DESTROY | TRYEQUIP_FORCE)) + return item_to_equip + + return null + +/datum/gear/proc/spawn_in_storage_or_drop(mob/living/carbon/human/subject, metadata) + var/obj/item/item = spawn_item(subject, subject, metadata) + item.add_fingerprint(subject) + if (istype(item, /obj/item/organ/internal/augment)) + var/obj/item/organ/internal/augment/augment = item + var/obj/item/organ/external/parent = augment.get_valid_parent_organ(subject) + if (!parent) + to_chat(subject, SPAN_WARNING("Failed to find a valid organ to install \the [augment] into!")) + qdel(augment) + return + + var/surgery_step = GET_SINGLETON(/singleton/surgery_step/internal/replace_organ) + if (augment.surgery_configure(subject, subject, parent, null, surgery_step)) + to_chat(subject, SPAN_WARNING("Failed to set up \the [augment] for installation in your [parent.name]!")) + qdel(augment) + return + + augment.forceMove(subject) + augment.replaced(subject, parent) + augment.onRoundstart() + return + + var/atom/container = subject.equip_to_storage(item) + if (subject.equip_to_appropriate_slot(item)) + to_chat(subject, SPAN_NOTICE("Placing \the [item] in your inventory!")) + else if (container) + to_chat(subject, SPAN_NOTICE("Placing \the [item] in your [container.name]!")) + else if (subject.put_in_hands(item)) + to_chat(subject, SPAN_NOTICE("Placing \the [item] in your hands!")) + else + to_chat(subject, SPAN_WARNING("Dropping \the [item] on the ground!")) + +/datum/gear_data + var/path + var/location + +/datum/gear_data/New(path, location) + src.path = path + src.location = location + +/// Objects that represents single gear slot in preference. +/// Includes slot number and list of gear. +/datum/gear_slot + VAR_PRIVATE/slot_number = 1 + /// Assoc list of `gear_name` => `gear_tweaks_list` + VAR_PRIVATE/list/gear_entries = list() + +/datum/gear_slot/New(slot_number, list/gear_entries) + ASSERT(slot_number > 0) + + src.slot_number = slot_number + if(!gear_entries) + return + + for(var/entry in gear_entries) + var/list/tweaks = gear_entries[entry] + if(!islist(tweaks)) + tweaks = list() + + src.gear_entries[entry] = tweaks + +/// Get copy of `get_gear_entries` list +/datum/gear_slot/proc/get_gear_entries() + return gear_entries.Copy() + +/// Updates content of slot. Valid list must be passed +/datum/gear_slot/proc/remove_gear(list/gear_to_remove) + if(!length(gear_to_remove)) + return + + gear_entries -= gear_to_remove + +/// Return list of tweaks applied to desired gear. Return `null` if no tweaks or no gear by name found +/datum/gear_slot/proc/get_gear_tweaks(gear_name) + if(!gear_name) + return list() + + var/list/tweaks = gear_entries[gear_name] + return tweaks?.Copy() || list() + +/// Calculate total cost of the gear this slot has +/datum/gear_slot/proc/get_total_gear_cost() + var/total_cost = 0 + for(var/gear_name in gear_entries) + var/datum/gear/gear_datum = gear_datums[gear_name] + if(!gear_datum) + continue + + total_cost += gear_datum.cost + + return total_cost + +/// Returns slot number this gear slot has +/datum/gear_slot/proc/get_slot_number() + return slot_number + +/// Returns whether this slot contains specific gear +/datum/gear_slot/proc/contains(gear_name) + return !!gear_entries[gear_name] + +/// Clears `gear_entries` list +/datum/gear_slot/proc/clear() + gear_entries.Cut() + +/// Add gear to slot +/datum/gear_slot/proc/add_gear(gear_name, list/tweaks) + gear_entries[gear_name] = islist(tweaks) ? tweaks.Copy() : list() + +/// Returns amount of gear in the current slot +/datum/gear_slot/proc/size() + return length(gear_entries) + +/// Simple objects that represents all gear slots the player has in preferences. +/datum/gear_slots_container + /// Max size of the container. New gear slots are added to `gear_slots` when required + VAR_PRIVATE/size = 1 + /// The gear slot that is currently displayed in preferences + VAR_PRIVATE/picked_gear_slot = 1 + /// The flat list of gear slots, where index of slot in the list is slot number + VAR_PRIVATE/list/gear_slots = list() + +/datum/gear_slots_container/New(size = config.loadout_slots, picked_gear_slot = 1, list/gear_slots) + ASSERT(size > 0) + ASSERT(picked_gear_slot > 0) + + src.size = sanitize_integer(size, 1, config.loadout_slots, config.loadout_slots) + src.picked_gear_slot = sanitize_integer(picked_gear_slot, 1, size, 1) + if(!length(gear_slots)) + fill_with_slots() + return + + LIST_RESIZE(gear_slots, size) + for(var/slot_index = 1 to length(gear_slots)) + var/list/gear_entries = gear_slots[slot_index] + if(!islist(gear_entries)) + stack_trace("[gear_entries.type] is not supported type. `/list` expected") + continue + + src.gear_slots += new /datum/gear_slot(slot_index, gear_entries) + +/// Get currently picked gear slot. If no valid slot picked, we pick the first one +/datum/gear_slots_container/proc/get_picked_gear_slot() + return gear_slots[get_picked_gear_slot_number()] + +/// Get currently picked gear slot number. +/datum/gear_slots_container/proc/get_picked_gear_slot_number() + picked_gear_slot = sanitize_integer(picked_gear_slot, 1, config.loadout_slots, initial(picked_gear_slot)) + return picked_gear_slot + +/// Trims `gear_slots` to desired size. `trim_size` must be greater or equal to 0. +/datum/gear_slots_container/proc/set_size(new_size) + ASSERT(new_size > 0) + + if(size == new_size) + return + + var/old_size = size + size = new_size + if(size > old_size) + fill_with_slots() + else + LIST_RESIZE(gear_slots, new_size) + +/// Get copy of `get_gear_slots` list +/datum/gear_slots_container/proc/get_gear_slots() + if(!gear_slots) + stack_trace("`gear_slots` in `/datum/gear_slots_container` is null") + gear_slots = list() + + return gear_slots.Copy() + +/// Returs the size of the container +/datum/gear_slots_container/proc/get_size() + return size + +/// Sets `picked_gear_slot` to the `picked_gear_slot + 1`, or to 1 if overflowed +/// Returns `true`, if slot successfully changed, `false` otherwise +/datum/gear_slots_container/proc/cycle_slot_right() + if(size <= 1) + return FALSE + + picked_gear_slot = sanitize_integer(picked_gear_slot + 1, 1, size, 1) + return TRUE + +/// Sets `picked_gear_slot` to the `picked_gear_slot - 1`, or to length(gear_slots) if new slot is <= 0 +/// Returns `true`, if slot successfully changed, `false` otherwise +/datum/gear_slots_container/proc/cycle_slot_left() + if(size <= 1) + return FALSE + + picked_gear_slot = sanitize_integer(picked_gear_slot - 1, 1, size, size) + return TRUE + +/// Create new `/datum/gear_slot` until `gear_slots` length wil be equal to `size`. +/// If the `gear_slots` is already of desired size, no changes will happen +/datum/gear_slots_container/proc/fill_with_slots(list/new_slots) + var/slots_amount = length(gear_slots) + if(slots_amount == size) + return + + for(var/slot_index = slots_amount + 1 to size) + gear_slots.Insert(slot_index, new /datum/gear_slot(slot_index)) diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm index 0962d36758e78..62fbd4906ec34 100644 --- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -16,10 +16,17 @@ /datum/gear_tweak/proc/tweak_description(description, metadata) return description + +/datum/gear_tweak/proc/get_random() + return get_default() + /* * Color adjustment */ +/datum/gear_tweak/color/get_random() + return valid_colors ? pick(valid_colors) : rgb(rand(200) + 55, rand(200) + 55, rand(200) + 55) + /datum/gear_tweak/color var/list/valid_colors @@ -35,7 +42,7 @@ /datum/gear_tweak/color/get_metadata(user, metadata, title = CHARACTER_PREFERENCE_INPUT_TITLE) if(valid_colors) - return input(user, "Choose a color.", title, metadata) as null|anything in valid_colors + return tgui_input_list(user, "Choose a color.", title, metadata, valid_colors) return input(user, "Choose a color.", title, metadata) as color|null /datum/gear_tweak/color/tweak_item(user, obj/item/I, metadata) @@ -90,7 +97,7 @@ return valid_paths[1] /datum/gear_tweak/path/get_metadata(user, metadata, title) - return input(user, "Choose a type.", CHARACTER_PREFERENCE_INPUT_TITLE, metadata) as null|anything in valid_paths + return tgui_input_list(user, "Choose a type.", CHARACTER_PREFERENCE_INPUT_TITLE, valid_paths, metadata) /datum/gear_tweak/path/tweak_gear_data(metadata, datum/gear_data/gear_data) if(!(metadata in valid_paths)) @@ -127,7 +134,7 @@ for(var/i = length(metadata) to (length(valid_contents) - 1)) metadata += "Random" for(var/i = 1 to length(valid_contents)) - var/entry = input(user, "Choose an entry.", CHARACTER_PREFERENCE_INPUT_TITLE, metadata[i]) as null|anything in (valid_contents[i] + list("Random", "None")) + var/entry = tgui_input_list(user, "Choose an entry.", CHARACTER_PREFERENCE_INPUT_TITLE, valid_contents[i] + list("Random", "None"), metadata[i]) if(entry) . += entry else @@ -170,7 +177,7 @@ return "Random" /datum/gear_tweak/reagents/get_metadata(user, list/metadata, title) - . = input(user, "Choose an entry.", CHARACTER_PREFERENCE_INPUT_TITLE, metadata) as null|anything in (valid_reagents + list("Random", "None")) + . = tgui_input_list(user, "Choose an entry.", CHARACTER_PREFERENCE_INPUT_TITLE, valid_reagents + list("Random", "None"), metadata) if(!.) return metadata @@ -219,8 +226,9 @@ /datum/gear_tweak/custom_name/get_metadata(user, metadata, title) if(valid_custom_names) - return input(user, "Choose an item name.", "Character Preference", metadata) as null|anything in valid_custom_names - return sanitize(input(user, "Choose the item's name. Leave it blank to use the default name.", "Item Name", metadata) as text|null, MAX_LNAME_LEN, extra = FALSE) + return tgui_input_list(user, "Choose an item name.", "Character Preference", valid_custom_names, metadata) + + return sanitize(tgui_input_text(user, "Choose the item's name. Leave it blank to use the default name.", "Item Name", metadata, MAX_LNAME_LEN, encode = FALSE), extra = FALSE) /datum/gear_tweak/custom_name/tweak_item(user, obj/item/I, metadata) if(!metadata) @@ -243,8 +251,9 @@ Custom Description /datum/gear_tweak/custom_desc/get_metadata(user, metadata, title) if(valid_custom_desc) - return input(user, "Choose an item description.", "Character Preference", metadata) as null|anything in valid_custom_desc - return sanitize(input(user, "Choose the item's description. Leave it blank to use the default description.", "Item Description", metadata) as message|null, MAX_DESC_LEN, extra = FALSE) + return tgui_input_list(user, "Choose an item description.", "Character Preference", valid_custom_desc, metadata) + + return sanitize(tgui_input_text(user, "Choose the item's description. Leave it blank to use the default description.", "Item Description", metadata, MAX_DESC_LEN, encode = FALSE), extra = FALSE) /datum/gear_tweak/custom_desc/tweak_item(user, obj/item/I, metadata) if(!metadata) @@ -309,7 +318,7 @@ Custom Description if (!user || !user.client) return - var/entry = input(user, "Choose a processor.", CHARACTER_PREFERENCE_INPUT_TITLE) in names + var/entry = tgui_input_list(user, "Choose a processor.", CHARACTER_PREFERENCE_INPUT_TITLE, names) . += names[entry] names = list() @@ -323,7 +332,7 @@ Custom Description if (!user || !user.client) return - entry = input(user, "Choose a battery.", CHARACTER_PREFERENCE_INPUT_TITLE) in names + entry = tgui_input_list(user, "Choose a battery.", CHARACTER_PREFERENCE_INPUT_TITLE, names) . += names[entry] names = list() @@ -337,7 +346,7 @@ Custom Description if (!user || !user.client) return - entry = input(user, "Choose a hard drive.", CHARACTER_PREFERENCE_INPUT_TITLE) in names + entry = tgui_input_list(user, "Choose a hard drive.", CHARACTER_PREFERENCE_INPUT_TITLE, names) . += names[entry] names = list() @@ -351,7 +360,7 @@ Custom Description if (!user || !user.client) return - entry = input(user, "Choose a network card.", CHARACTER_PREFERENCE_INPUT_TITLE) in names + entry = tgui_input_list(user, "Choose a network card.", CHARACTER_PREFERENCE_INPUT_TITLE, names) . += names[entry] names = list() @@ -365,7 +374,7 @@ Custom Description if (!user || !user.client) return - entry = input(user, "Choose a nanoprinter.", CHARACTER_PREFERENCE_INPUT_TITLE) in names + entry = tgui_input_list(user, "Choose a nanoprinter.", CHARACTER_PREFERENCE_INPUT_TITLE, names) . += names[entry] names = list() @@ -379,7 +388,7 @@ Custom Description if (!user || !user.client) return - entry = input(user, "Choose a card slot.", CHARACTER_PREFERENCE_INPUT_TITLE) in names + entry = tgui_input_list(user, "Choose a card slot.", CHARACTER_PREFERENCE_INPUT_TITLE, names) . += names[entry] names = list() @@ -393,7 +402,7 @@ Custom Description if (!user || !user.client) return - entry = input(user, "Choose a tesla link.", CHARACTER_PREFERENCE_INPUT_TITLE) in names + entry = tgui_input_list(user, "Choose a tesla link.", CHARACTER_PREFERENCE_INPUT_TITLE, names) . += names[entry] /datum/gear_tweak/tablet/get_default() diff --git a/code/modules/client/preference_setup/loadout/lists/accessories.dm b/code/modules/client/preference_setup/loadout/lists/accessories.dm index 4f9e1f4c5ac1e..6febf4517984d 100644 --- a/code/modules/client/preference_setup/loadout/lists/accessories.dm +++ b/code/modules/client/preference_setup/loadout/lists/accessories.dm @@ -1,6 +1,6 @@ /datum/gear/accessory - sort_category = "Accessories" - category = /datum/gear/accessory + category = GEAR_CATEGORY_ACCESSORIES + abstract_type = /datum/gear/accessory slot = slot_tie @@ -159,60 +159,22 @@ /datum/gear/accessory/bracelet display_name = "bracelet, color select" path = /obj/item/clothing/accessory/bracelet - cost = 1 flags = GEAR_HAS_COLOR_SELECTION /datum/gear/accessory/wristwatch display_name = "wrist watch selection" - path = /obj/item/clothing/accessory/wristwatches - cost = 1 + path = /obj/item/clothing/accessory/wristwatch flags = GEAR_HAS_TYPE_SELECTION -/datum/gear/accessory/pronouns - display_name = "pronoun badge selection" - description = "A selection of badges used to indicate the preferred pronouns of the wearer." - path = /obj/item/clothing/accessory/pronouns - - -/datum/gear/accessory/pronouns/New() - ..() - var/list/options = list() - options["they/them badge"] = /obj/item/clothing/accessory/pronouns/they - options["he/him badge"] = /obj/item/clothing/accessory/pronouns/hehim - options["she/her badge"] = /obj/item/clothing/accessory/pronouns/sheher - options["he/they badge"] = /obj/item/clothing/accessory/pronouns/hethey - options["she/they badge"] = /obj/item/clothing/accessory/pronouns/shethey - options["he/she badge"] = /obj/item/clothing/accessory/pronouns/heshe - options["ze/hir badge"] = /obj/item/clothing/accessory/pronouns/zehir - options["ask me badge"] = /obj/item/clothing/accessory/pronouns/ask - gear_tweaks += new /datum/gear_tweak/path (options) - - -/datum/gear/accessory/pride_pins - display_name = "pride pin selection" - description = "A selection of pins used to signal membership or support of an identity or sexuality." - path = /obj/item/clothing/accessory/pride_pin - - -/datum/gear/accessory/pride_pins/New() - ..() - var/list/options = list() - options["transgender pride pin"] = /obj/item/clothing/accessory/pride_pin/transgender - options["lesbian pride pin"] = /obj/item/clothing/accessory/pride_pin/lesbian - options["bisexual pride pin"] = /obj/item/clothing/accessory/pride_pin/bisexual - options["gay pride pin"] = /obj/item/clothing/accessory/pride_pin/gay - options["pansexual pride pin"] = /obj/item/clothing/accessory/pride_pin/pansexual - options["nonbinary pride pin"] = /obj/item/clothing/accessory/pride_pin/nonbinary - options["asexual pride pin"] = /obj/item/clothing/accessory/pride_pin/asexual - options["intersex pride pin"] = /obj/item/clothing/accessory/pride_pin/intersex - options["aromantic pride pin"] = /obj/item/clothing/accessory/pride_pin/aromantic - gear_tweaks += new /datum/gear_tweak/path (options) - - /datum/gear/accessory/neckerchief display_name = "neckerchief, colour select" description = "A piece of cloth tied around the neck. A favorite of Sailors and Partisans everywhere." path = /obj/item/clothing/accessory/neckerchief flags = GEAR_HAS_COLOR_SELECTION + +/datum/gear/accessory/skrell_badge + display_name = "skrellian SDTF badge" + path = /obj/item/clothing/accessory/badge/tags/skrell + whitelisted = list(SPECIES_SKRELL) diff --git a/code/modules/client/preference_setup/loadout/lists/augments.dm b/code/modules/client/preference_setup/loadout/lists/augments.dm index 9b221a3b6e6c6..44413d0f86f76 100644 --- a/code/modules/client/preference_setup/loadout/lists/augments.dm +++ b/code/modules/client/preference_setup/loadout/lists/augments.dm @@ -1,6 +1,6 @@ /datum/gear/augment - sort_category = "Augments" - category = /datum/gear/augment + category = GEAR_CATEGORY_AUGMENTS + abstract_type = /datum/gear/augment cost = 2 diff --git a/code/modules/client/preference_setup/loadout/lists/clothing.dm b/code/modules/client/preference_setup/loadout/lists/clothing.dm index a1f992de56f19..d0de6e6d5c123 100644 --- a/code/modules/client/preference_setup/loadout/lists/clothing.dm +++ b/code/modules/client/preference_setup/loadout/lists/clothing.dm @@ -1,7 +1,7 @@ /datum/gear/clothing - sort_category = "Clothing Pieces" - category = /datum/gear/clothing + category = GEAR_CATEGORY_CLOTHING_PIECES + abstract_type = /datum/gear/clothing slot = slot_tie /datum/gear/clothing/flannel diff --git a/code/modules/client/preference_setup/loadout/lists/documents.dm b/code/modules/client/preference_setup/loadout/lists/documents.dm new file mode 100644 index 0000000000000..f088ae32e37f1 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/lists/documents.dm @@ -0,0 +1,33 @@ +/datum/gear/document + category = GEAR_CATEGORY_DOCUMENTS + abstract_type = /datum/gear/document + +/datum/gear/document/passport + display_name = "passports selection - independent" + description = "A selection of independent regions passports." + path = /obj/item/passport/independent + flags = GEAR_HAS_SUBTYPE_SELECTION + custom_setup_proc = TYPE_PROC_REF(/obj/item/passport, set_info) + cost = 0 + +/datum/gear/document/union_card + display_name = "union membership" + path = /obj/item/card/union + +/datum/gear/document/union_card/spawn_on_mob(mob/living/carbon/human/H, metadata) + . = ..() + if(.) + var/obj/item/card/union/card = . + card.signed_by = H.real_name + +/datum/gear/document/workvisa + display_name = "work visa" + description = "A work visa issued by the Sol Central Government for the purpose of work." + path = /obj/item/paper/workvisa + cost = 0 + +/datum/gear/document/travelvisa + display_name = "travel visa" + description = "A travel visa issued by the Sol Central Government for the purpose of recreation." + path = /obj/item/paper/travelvisa + cost = 0 diff --git a/code/modules/client/preference_setup/loadout/lists/earwear.dm b/code/modules/client/preference_setup/loadout/lists/earwear.dm index 30a1471745de0..46c69920ccde8 100644 --- a/code/modules/client/preference_setup/loadout/lists/earwear.dm +++ b/code/modules/client/preference_setup/loadout/lists/earwear.dm @@ -1,21 +1,22 @@ -// Stuff worn on the ears. Items here go in the "ears" sort_category but they must not use +// Stuff worn on the ears. Items here go in the "ears" category but they must not use // the slot_r_ear or slot_l_ear as the slot, or else players will spawn with no headset. /datum/gear/ears + category = GEAR_CATEGORY_EARWEAR + abstract_type = /datum/gear/ears + +/datum/gear/ears/earmuffs display_name = "earmuffs" path = /obj/item/clothing/ears/earmuffs - sort_category = "Earwear" -/datum/gear/headphones +/datum/gear/ears/headphones display_name = "headphones" path = /obj/item/clothing/ears/headphones - sort_category = "Earwear" -/datum/gear/earrings +/datum/gear/ears/earrings display_name = "earrings" path = /obj/item/clothing/ears/earring - sort_category = "Earwear" -/datum/gear/earrings/New() +/datum/gear/ears/earrings/New() ..() var/earrings = list() earrings["stud, pearl"] = /obj/item/clothing/ears/earring/stud @@ -36,3 +37,41 @@ earrings["dangle, platinum"] = /obj/item/clothing/ears/earring/dangle/platinum earrings["dangle, diamond"] = /obj/item/clothing/ears/earring/dangle/diamond gear_tweaks += new/datum/gear_tweak/path(earrings) + +/datum/gear/ears/skrell + abstract_type = /datum/gear/ears/skrell + whitelisted = list(SPECIES_SKRELL) + +/datum/gear/ears/skrell/bands + display_name = "headtail band (Skrell)" + path = /obj/item/clothing/ears/skrell/band + flags = GEAR_HAS_SUBTYPE_SELECTION + +/datum/gear/ears/skrell/chains + display_name = "headtail chain (Skrell)" + path = /obj/item/clothing/ears/skrell/chain + flags = GEAR_HAS_SUBTYPE_SELECTION + +/datum/gear/ears/skrell/colored + abstract_type = /datum/gear/ears/skrell/colored + flags = GEAR_HAS_COLOR_SELECTION + +/datum/gear/ears/skrell/colored/chain + display_name = "headtail chain, colored (Skrell)" + path = /obj/item/clothing/ears/skrell/colored/chain + +/datum/gear/ears/skrell/colored/band + display_name = "headtail band, colored (Skrell)" + path = /obj/item/clothing/ears/skrell/colored/band + +/datum/gear/ears/skrell/cloth + abstract_type = /datum/gear/ears/skrell/cloth + flags = GEAR_HAS_COLOR_SELECTION + +/datum/gear/ears/skrell/cloth/male + display_name = "headtail cloth, male (Skrell)" + path = /obj/item/clothing/ears/skrell/cloth_male + +/datum/gear/ears/skrell/cloth/female + display_name = "headtail cloth, female (Skrell)" + path = /obj/item/clothing/ears/skrell/cloth_female diff --git a/code/modules/client/preference_setup/loadout/lists/eyegear.dm b/code/modules/client/preference_setup/loadout/lists/eyegear.dm index 5c3b4e0dc55ed..591162e178ab8 100644 --- a/code/modules/client/preference_setup/loadout/lists/eyegear.dm +++ b/code/modules/client/preference_setup/loadout/lists/eyegear.dm @@ -1,6 +1,6 @@ /datum/gear/eyes - sort_category = "Glasses and Eyewear" - category = /datum/gear/eyes + category = GEAR_CATEGORY_GLASSES_AND_EYEWEAR + abstract_type = /datum/gear/eyes slot = slot_glasses cost = 2 @@ -35,6 +35,7 @@ options["Goggles, corrective"] = /obj/item/clothing/glasses/science/prescription options["HUD"] = /obj/item/clothing/glasses/hud/science options["HUD, corrective"] = /obj/item/clothing/glasses/hud/science/prescription + options["Aviators"] = /obj/item/clothing/glasses/hud/science/aviators gear_tweaks += new /datum/gear_tweak/path (options) @@ -75,6 +76,7 @@ options["Goggles"] = /obj/item/clothing/glasses/hud/health/goggle options["Goggles, corrective"] = /obj/item/clothing/glasses/hud/health/goggle/prescription options["Eyepatch"] = /obj/item/clothing/glasses/eyepatch/hud/medical + options["Aviators"] = /obj/item/clothing/glasses/hud/health/aviators gear_tweaks += new /datum/gear_tweak/path (options) @@ -91,6 +93,7 @@ options["Goggles"] = /obj/item/clothing/glasses/meson options["Goggles, corrective"] = /obj/item/clothing/glasses/meson/prescription options["Eyepatch"] = /obj/item/clothing/glasses/eyepatch/hud/meson + options["Aviators"] = /obj/item/clothing/glasses/meson/aviators gear_tweaks += new /datum/gear_tweak/path (options) @@ -106,6 +109,7 @@ var/list/options = list() options["HUD"] = /obj/item/clothing/glasses/hud/janitor options["HUD, corrective"] = /obj/item/clothing/glasses/hud/janitor/prescription + options["Aviators"] = /obj/item/clothing/glasses/hud/janitor/aviators gear_tweaks += new /datum/gear_tweak/path (options) @@ -159,11 +163,19 @@ /datum/gear/eyes/material - display_name = "Material Goggles" - path = /obj/item/clothing/glasses/material + display_name = "Material Eyewear" + path = /obj/item/clothing/glasses flags = GEAR_HAS_NO_CUSTOMIZATION +/datum/gear/eyes/material/New() + ..() + var/list/options = list() + options["Material Goggles"] = /obj/item/clothing/glasses/material + options["Material Goggles, corrective"] = /obj/item/clothing/glasses/material/prescription + gear_tweaks += new /datum/gear_tweak/path (options) + + /datum/gear/eyes/monocle display_name = "Monocle" path = /obj/item/clothing/glasses/monocle diff --git a/code/modules/client/preference_setup/loadout/lists/footwear.dm b/code/modules/client/preference_setup/loadout/lists/footwear.dm index f5fd7b1eca01b..5d277d2f009fc 100644 --- a/code/modules/client/preference_setup/loadout/lists/footwear.dm +++ b/code/modules/client/preference_setup/loadout/lists/footwear.dm @@ -1,8 +1,8 @@ /datum/gear/shoes - sort_category = "Shoes and Footwear" + category = GEAR_CATEGORY_SHOES_AND_FOOTWEAR slot = slot_shoes - category = /datum/gear/shoes + abstract_type = /datum/gear/shoes /datum/gear/shoes/athletic display_name = "athletic shoes, colour select" @@ -14,14 +14,11 @@ path = /obj/item/clothing/shoes cost = 2 -/datum/gear/shoes/boots/New() +/datum/gear/shoes/boots/New(boots = list()) ..() - var/boots = list() boots += /obj/item/clothing/shoes/jackboots boots += /obj/item/clothing/shoes/workboots boots += /obj/item/clothing/shoes/dutyboots - boots += /obj/item/clothing/shoes/jungleboots - boots += /obj/item/clothing/shoes/desertboots gear_tweaks += new/datum/gear_tweak/path/specified_types_list(boots) /datum/gear/shoes/color @@ -72,8 +69,27 @@ /datum/gear/shoes/flipflobster display_name = "flip flobsters" - path = /obj/item/clothing/shoes/flipflobster + path = /obj/item/clothing/shoes/foamclog/flipflobster /datum/gear/shoes/slippers display_name = "bunny slippers" path = /obj/item/clothing/shoes/slippers + +/datum/gear/shoes/toeless + display_name = "toeless jackboots" + path = /obj/item/clothing/shoes/jackboots/unathi + category = GEAR_CATEGORY_SHOES_AND_FOOTWEAR + +/datum/gear/shoes/wrk_toeless + display_name = "toeless workboots" + path = /obj/item/clothing/shoes/workboots/toeless + category = GEAR_CATEGORY_SHOES_AND_FOOTWEAR + +/datum/gear/shoes/clogs_toeless + display_name = "toeless foam clogs" + path = /obj/item/clothing/shoes/foamclog/toeless + flags = GEAR_HAS_COLOR_SELECTION + +/datum/gear/shoes/flipflobsters_toeless + display_name = "toeless flip flobsters" + path = /obj/item/clothing/shoes/foamclog/flipflobster/toeless diff --git a/code/modules/client/preference_setup/loadout/lists/gloves.dm b/code/modules/client/preference_setup/loadout/lists/gloves.dm index 9f49362d26087..d7eee4176caba 100644 --- a/code/modules/client/preference_setup/loadout/lists/gloves.dm +++ b/code/modules/client/preference_setup/loadout/lists/gloves.dm @@ -1,8 +1,8 @@ /datum/gear/gloves cost = 2 slot = slot_gloves - sort_category = "Gloves and Handwear" - category = /datum/gear/gloves + category = GEAR_CATEGORY_GLOVES_AND_HANDWEAR + abstract_type = /datum/gear/gloves /datum/gear/gloves/colored display_name = "gloves, colored" @@ -69,3 +69,38 @@ display_name = "gloves, work" path = /obj/item/clothing/gloves/thick cost = 3 + +/datum/gear/gloves/colored/modified + display_name = "modified gloves, colored" + path = /obj/item/clothing/gloves/color/modified + whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) + +/datum/gear/gloves/latex/modified + display_name = "modified gloves, latex" + path = /obj/item/clothing/gloves/latex/modified + whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) + +/datum/gear/gloves/nitrile/modified + display_name = "modified gloves, nitrile" + path = /obj/item/clothing/gloves/latex/nitrile/modified + whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) + +/datum/gear/gloves/rainbow/modified + display_name = "modified gloves, rainbow" + path = /obj/item/clothing/gloves/rainbow/modified + whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) + +/datum/gear/gloves/evening/modified + display_name = "modified gloves, evening" + path = /obj/item/clothing/gloves/color/evening/modified + whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) + +/datum/gear/gloves/botany/modified + display_name = "modified gloves, botany" + path = /obj/item/clothing/gloves/thick/botany/modified + whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) + +/datum/gear/gloves/work/modified + display_name = "modified gloves, work" + path = /obj/item/clothing/gloves/thick/modified + whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) diff --git a/code/modules/client/preference_setup/loadout/lists/headwear.dm b/code/modules/client/preference_setup/loadout/lists/headwear.dm index e440de2b157aa..06e70323ec6f5 100644 --- a/code/modules/client/preference_setup/loadout/lists/headwear.dm +++ b/code/modules/client/preference_setup/loadout/lists/headwear.dm @@ -1,7 +1,7 @@ /datum/gear/head - sort_category = "Hats and Headwear" + category = GEAR_CATEGORY_HATS_AND_HEADWEAR slot = slot_head - category = /datum/gear/head + abstract_type = /datum/gear/head /datum/gear/head/beret display_name = "beret, colour select" @@ -15,10 +15,15 @@ /datum/gear/head/bandana/New() ..() - gear_tweaks += new/datum/gear_tweak/path/specified_types_list(typesof(/obj/item/clothing/mask/bandana) + typesof(/obj/item/clothing/head/bandana)) + gear_tweaks += new/datum/gear_tweak/path/specified_types_list(subtypesof(/obj/item/clothing/mask/bandana) + /obj/item/clothing/head/bandana) + +/datum/gear/head/custom_bandana + display_name = "bandana, colour select" + path = /obj/item/clothing/mask/bandana + flags = GEAR_HAS_COLOR_SELECTION /datum/gear/head/beanie - display_name = "beanie, color select" + display_name = "beanie, colour select" path = /obj/item/clothing/head/beanie flags = GEAR_HAS_COLOR_SELECTION @@ -61,15 +66,7 @@ /datum/gear/head/hairflower display_name = "hair flower pin" path = /obj/item/clothing/head/hairflower - -/datum/gear/head/hairflower/New() - ..() - var/pins = list() - pins["blue pin"] = /obj/item/clothing/head/hairflower/blue - pins["pink pin"] = /obj/item/clothing/head/hairflower/pink - pins["red pin"] = /obj/item/clothing/head/hairflower - pins["yellow pin"] = /obj/item/clothing/head/hairflower/yellow - gear_tweaks += new/datum/gear_tweak/path(pins) + flags = GEAR_HAS_COLOR_SELECTION /datum/gear/head/hardhat display_name = "hardhat selection" @@ -79,14 +76,10 @@ /datum/gear/head/hardhat/New() ..() var/hardhats = list() - hardhats["blue hardhat"] = /obj/item/clothing/head/hardhat/dblue + hardhats["blue hardhat"] = /obj/item/clothing/head/hardhat/blue hardhats["orange hardhat"] = /obj/item/clothing/head/hardhat/orange hardhats["red hardhat"] = /obj/item/clothing/head/hardhat/red - hardhats["light damage control helmet"] = /obj/item/clothing/head/hardhat/EMS/DC_light - hardhats["Emergency Management Bureau helmet"] = /obj/item/clothing/head/hardhat/damage_control/EMB - hardhats["red ancient Emergency Management Bureau helmet"] = /obj/item/clothing/head/hardhat/damage_control/EMB_Ancient - hardhats["yellow ancient Emergency Management Bureau helmet"] = /obj/item/clothing/head/hardhat/damage_control/EMB_Ancient/yellow - hardhats["white ancient Emergency Management Bureau helmet"] = /obj/item/clothing/head/hardhat/damage_control/EMB_Ancient/white + hardhats["light damage control helmet"] = /obj/item/clothing/head/hardhat/light gear_tweaks += new/datum/gear_tweak/path(hardhats) /datum/gear/head/formalhat @@ -190,3 +183,10 @@ path = /obj/item/clothing/head/deckcrew flags = GEAR_HAS_TYPE_SELECTION description = "A helmet with ear protection and a visor, used in hangars on many ships." + +/datum/gear/head/skrell_helmet + display_name = "Skrellian helmet" + path = /obj/item/clothing/head/helmet/skrell + whitelisted = list(SPECIES_SKRELL) + category = GEAR_CATEGORY_HATS_AND_HEADWEAR + allowed_roles = list(/datum/job/hos, /datum/job/warden, /datum/job/officer, /datum/job/detective) diff --git a/code/modules/client/preference_setup/loadout/lists/masks.dm b/code/modules/client/preference_setup/loadout/lists/masks.dm new file mode 100644 index 0000000000000..23c9e00d1121a --- /dev/null +++ b/code/modules/client/preference_setup/loadout/lists/masks.dm @@ -0,0 +1,38 @@ +/datum/gear/mask + category = GEAR_CATEGORY_MASKS + abstract_type = /datum/gear/mask + slot = slot_wear_mask + +/datum/gear/mask/surgical + display_name = "sterile mask" + path = /obj/item/clothing/mask/surgical + cost = 2 + +/datum/gear/mask/fakemoustache + display_name = "fake moustache" + path = /obj/item/clothing/mask/fakemoustache + +/datum/gear/mask/horsehead + display_name = "horse head" + path = /obj/item/clothing/mask/horsehead + +/datum/gear/mask/pig + display_name = "pig head" + path = /obj/item/clothing/mask/pig + +/datum/gear/mask/plaguedoctor + display_name = "plaguedoctor mask" + path = /obj/item/clothing/mask/gas/plaguedoctor + +/datum/gear/mask/monkeymask + display_name = "monkey mask" + path = /obj/item/clothing/mask/gas/monkeymask + +/datum/gear/mask/owl_mask + display_name = "owl mask" + path = /obj/item/clothing/mask/gas/owl_mask + +/datum/gear/mask/vox_mask + display_name = "vox breathing mask" + path = /obj/item/clothing/mask/gas/vox + whitelisted = list(SPECIES_VOX) diff --git a/code/modules/client/preference_setup/loadout/lists/misc.dm b/code/modules/client/preference_setup/loadout/lists/misc.dm index bf8d8405b3e00..a156d37098d7f 100644 --- a/code/modules/client/preference_setup/loadout/lists/misc.dm +++ b/code/modules/client/preference_setup/loadout/lists/misc.dm @@ -1,16 +1,16 @@ /datum/gear/cane display_name = "cane" - path = /obj/item/cane + path = /obj/item -/datum/gear/union_card - display_name = "union membership" - path = /obj/item/card/union - -/datum/gear/union_card/spawn_on_mob(mob/living/carbon/human/H, metadata) - . = ..() - if(.) - var/obj/item/card/union/card = . - card.signed_by = H.real_name +/datum/gear/cane/New() + ..() + var/canes = list() + canes["cane"] = /obj/item/cane + canes["crutch, single"] = /obj/item/cane/crutch + canes["crutches, box of two"] = /obj/item/storage/box/large/crutches + canes["telescopic cane"] = /obj/item/cane/telescopic + canes["white guide cane"] = /obj/item/cane/white + gear_tweaks += new/datum/gear_tweak/path(canes) /datum/gear/dice display_name = "dice pack" @@ -109,6 +109,7 @@ plushes["mouse plush"] = /obj/item/toy/plushie/mouse plushes["kitten plush"] = /obj/item/toy/plushie/kitten plushes["lizard plush"] = /obj/item/toy/plushie/lizard + plushes["crow plush"] = /obj/item/toy/plushie/crow plushes["spider plush"] = /obj/item/toy/plushie/spider plushes["farwa plush"] = /obj/item/toy/plushie/farwa plushes["golden carp plush"] = /obj/item/toy/plushie/carp_gold @@ -121,24 +122,6 @@ plushes["orange squid plush"] = /obj/item/toy/plushie/squid_orange gear_tweaks += new /datum/gear_tweak/path(plushes) -/datum/gear/workvisa - display_name = "work visa" - description = "A work visa issued by the Sol Central Government for the purpose of work." - path = /obj/item/paper/workvisa - -/datum/gear/travelvisa - display_name = "travel visa" - description = "A travel visa issued by the Sol Central Government for the purpose of recreation." - path = /obj/item/paper/travelvisa - - -/datum/gear/passport - display_name = "passports selection" - description = "A selection of passports." - path = /obj/item/passport - flags = GEAR_HAS_SUBTYPE_SELECTION - custom_setup_proc = /obj/item/passport/proc/set_info - /datum/gear/foundation_civilian display_name = "operant registration card" description = "A registration card in a faux-leather case. It marks the named individual as a registered, law-abiding psionic." @@ -147,7 +130,7 @@ /datum/gear/mirror display_name = "handheld mirror" - sort_category = "Cosmetics" + category = GEAR_CATEGORY_COSMETICS path = /obj/item/mirror /datum/gear/lipstick @@ -168,9 +151,13 @@ display_name = "pipe, corn" path = /obj/item/clothing/mask/smokable/pipe/cobpipe +/datum/gear/matchbox + display_name = "matchbox" + path = /obj/item/storage/fancy/matches/matchbox + /datum/gear/matchbook display_name = "matchbook" - path = /obj/item/storage/box/matches + path = /obj/item/storage/fancy/matches/matchbook /datum/gear/lighter display_name = "cheap lighter" diff --git a/code/modules/client/preference_setup/loadout/lists/pet.dm b/code/modules/client/preference_setup/loadout/lists/pet.dm deleted file mode 100644 index ca26988c47969..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/pet.dm +++ /dev/null @@ -1,82 +0,0 @@ -/obj/item/holder/gear - abstract_type = /obj/item/holder/gear - icon = 'icons/mob/simple_animal/animal.dmi' - icon_state = "kitten" - name = "" - desc = "" - - /// The path of living mob this holder should create on initialization. - var/mob/living/pet - - -/obj/item/holder/gear/Destroy() - pet = null - return ..() - - -/obj/item/holder/gear/proc/LoadoutCustomSetup(mob/living/user) - if (!ispath(pet, /mob/living)) - return - pet = new pet (src) - if (name) - pet.SetName(name) - else - name = pet.name - if (desc) - pet.desc = desc - else - desc = pet.desc - sync(pet) - - -/obj/item/holder/gear/kitten - pet = /mob/living/simple_animal/passive/cat/kitten - w_class = ITEM_SIZE_NORMAL - - -/obj/item/holder/gear/lizard - pet = /mob/living/simple_animal/passive/lizard - w_class = ITEM_SIZE_TINY - - -/obj/item/holder/gear/mouse_brown - pet = /mob/living/simple_animal/passive/mouse/brown - w_class = ITEM_SIZE_TINY - - -/obj/item/holder/gear/mouse_gray - pet = /mob/living/simple_animal/passive/mouse/gray - w_class = ITEM_SIZE_TINY - - -/obj/item/holder/gear/mouse_white - pet = /mob/living/simple_animal/passive/mouse/white - w_class = ITEM_SIZE_TINY - -/obj/item/holder/gear/mouse_rat - pet = /mob/living/simple_animal/passive/mouse/rat/chill - w_class = ITEM_SIZE_TINY - -/obj/item/holder/gear/nymph - pet = /mob/living/carbon/alien/diona - w_class = ITEM_SIZE_NORMAL - -/datum/gear/pet - display_name = "pet selection" - description = "A variety of creatures indentured for comfort and amusement." - path = /obj/item/holder/gear - custom_setup_proc = /obj/item/holder/gear/proc/LoadoutCustomSetup - cost = 5 - - -/datum/gear/pet/New() - ..() - var/list/options = list() - options["kitten"] = /obj/item/holder/gear/kitten - options["lizard"] = /obj/item/holder/gear/lizard - options["mouse, brown"] = /obj/item/holder/gear/mouse_brown - options["mouse, grey"] = /obj/item/holder/gear/mouse_gray - options["mouse, white"] = /obj/item/holder/gear/mouse_white - options["rat"] = /obj/item/holder/gear/mouse_rat - options["diona nymph"] = /obj/item/holder/gear/nymph - gear_tweaks += new /datum/gear_tweak/path (options) diff --git a/code/modules/client/preference_setup/loadout/lists/storage.dm b/code/modules/client/preference_setup/loadout/lists/storage.dm index 960075a0b88d1..3cd4a60ee279e 100644 --- a/code/modules/client/preference_setup/loadout/lists/storage.dm +++ b/code/modules/client/preference_setup/loadout/lists/storage.dm @@ -1,6 +1,6 @@ /datum/gear/storage - sort_category = "Storage Accessories" - category = /datum/gear/storage + category = GEAR_CATEGORY_STORAGE_ACCESSORIES + abstract_type = /datum/gear/storage slot = slot_tie /datum/gear/storage/vest @@ -64,11 +64,6 @@ cost = 2 flags = GEAR_HAS_COLOR_SELECTION -/datum/gear/storage/waistpack/big - display_name = "large waist pack" - path = /obj/item/storage/belt/waistpack/big - cost = 4 - /datum/gear/accessory/wallet display_name = "wallet, colour select" path = /obj/item/storage/wallet diff --git a/code/modules/client/preference_setup/loadout/lists/suits.dm b/code/modules/client/preference_setup/loadout/lists/suits.dm index 10a4a617e8c5b..207602b776569 100644 --- a/code/modules/client/preference_setup/loadout/lists/suits.dm +++ b/code/modules/client/preference_setup/loadout/lists/suits.dm @@ -1,12 +1,11 @@ /datum/gear/suit slot = slot_wear_suit - sort_category = "Suits and Overwear" - category = /datum/gear/suit + category = GEAR_CATEGORY_SUITS_AND_OVERWEAR + abstract_type = /datum/gear/suit /datum/gear/suit/poncho display_name = "poncho selection" path = /obj/item/clothing/suit/poncho/colored - cost = 1 flags = GEAR_HAS_TYPE_SELECTION /datum/gear/suit/security_poncho @@ -26,7 +25,7 @@ path = /obj/item/clothing/suit/poncho/roles/science /datum/gear/suit/nanotrasen_poncho - display_name = "poncho, NanoTrasen" + display_name = "poncho, Nanotrasen" path = /obj/item/clothing/suit/poncho/roles/science/nanotrasen /datum/gear/suit/cargo_poncho @@ -60,6 +59,18 @@ path = /obj/item/clothing/suit/storage/hazardvest flags = GEAR_HAS_TYPE_SELECTION +/datum/gear/suit/chest_rig + display_name = "chest rig" + path = /obj/item/clothing/suit/storage + +/datum/gear/suit/chest_rig/New() + ..() + var/chest_rigs = list() + chest_rigs += /obj/item/clothing/suit/storage/engineering_chest_rig + chest_rigs += /obj/item/clothing/suit/storage/security_chest_rig + chest_rigs += /obj/item/clothing/suit/storage/medical_chest_rig + gear_tweaks += new/datum/gear_tweak/path/specified_types_list(chest_rigs) + /datum/gear/suit/highvis display_name = "high-visibility jacket" path = /obj/item/clothing/suit/storage/toggle/highvis @@ -133,12 +144,10 @@ /datum/gear/suit/blueapron display_name = "apron, blue" path = /obj/item/clothing/suit/apron - cost = 1 /datum/gear/suit/overalls display_name = "apron, overalls" path = /obj/item/clothing/suit/apron/overalls - cost = 1 /datum/gear/suit/medcoat display_name = "medical suit selection" @@ -171,3 +180,40 @@ /datum/gear/suit/zipper display_name = "sweater, zip up" path = /obj/item/clothing/suit/storage/toggle/zipper + +/datum/gear/suit/unathi + category = GEAR_CATEGORY_SUITS_AND_OVERWEAR + abstract_type = /datum/gear/suit/unathi + whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) + +/datum/gear/suit/unathi/mantle + display_name = "hide mantle (Unathi)" + path = /obj/item/clothing/suit/unathi/mantle + +/datum/gear/suit/unathi/robe + display_name = "roughspun robe (Unathi)" + path = /obj/item/clothing/suit/unathi/robe + +/datum/gear/suit/unathi/knifeharness + display_name = "decorated harness" + path = /obj/item/clothing/accessory/storage/knifeharness + cost = 5 + +/datum/gear/suit/unathi/savage_hunter + display_name = "savage hunter hides (Male, Unathi)" + path = /obj/item/clothing/under/savage_hunter + slot = slot_w_uniform + cost = 2 + +/datum/gear/suit/unathi/savage_hunter/female + display_name = "savage hunter hides (Female, Unathi)" + path = /obj/item/clothing/under/savage_hunter/female + slot = slot_w_uniform + cost = 2 + +/datum/gear/suit/lab_xyn_machine + display_name = "Xynergy labcoat" + path = /obj/item/clothing/suit/storage/toggle/labcoat/xyn_machine + slot = slot_wear_suit + category = GEAR_CATEGORY_SUITS_AND_OVERWEAR + whitelisted = list(SPECIES_IPC) diff --git a/code/modules/client/preference_setup/loadout/lists/tactical.dm b/code/modules/client/preference_setup/loadout/lists/tactical.dm index 4e6d631307947..d568497c7c801 100644 --- a/code/modules/client/preference_setup/loadout/lists/tactical.dm +++ b/code/modules/client/preference_setup/loadout/lists/tactical.dm @@ -1,13 +1,8 @@ /datum/gear/tactical - sort_category = "Tactical Equipment" - category = /datum/gear/tactical + category = GEAR_CATEGORY_TACTICAL_EQUIPMENT + abstract_type = /datum/gear/tactical slot = slot_tie -/datum/gear/tactical/armor_deco - display_name = "armor customization" - path = /obj/item/clothing/accessory/armor_tag - flags = GEAR_HAS_SUBTYPE_SELECTION | GEAR_HAS_NO_CUSTOMIZATION - /datum/gear/tactical/helm_covers display_name = "helmet covers" path = /obj/item/clothing/accessory/helmet_cover diff --git a/code/modules/client/preference_setup/loadout/lists/trinkets.dm b/code/modules/client/preference_setup/loadout/lists/trinkets.dm index 407c17df14f9a..4664ff4bc398e 100644 --- a/code/modules/client/preference_setup/loadout/lists/trinkets.dm +++ b/code/modules/client/preference_setup/loadout/lists/trinkets.dm @@ -1,5 +1,4 @@ // Small items of little importance; adding another category helps squash General a little. /datum/gear/trinket - sort_category = "Trinkets" - category = /datum/gear/trinket - cost = 1 + category = GEAR_CATEGORY_TRINKETS + abstract_type = /datum/gear/trinket diff --git a/code/modules/client/preference_setup/loadout/lists/uniforms.dm b/code/modules/client/preference_setup/loadout/lists/uniforms.dm index 4f6bc2db5b72d..5d18d2550750a 100644 --- a/code/modules/client/preference_setup/loadout/lists/uniforms.dm +++ b/code/modules/client/preference_setup/loadout/lists/uniforms.dm @@ -1,7 +1,7 @@ /datum/gear/uniform - sort_category = "Uniforms and Casual Dress" + category = GEAR_CATEGORY_UNIFORMS_AND_CASUAL_DRESS slot = slot_w_uniform - category = /datum/gear/uniform + abstract_type = /datum/gear/uniform /datum/gear/uniform/jumpsuit display_name = "jumpsuit, colour select" @@ -203,4 +203,18 @@ /datum/gear/uniform/frontier display_name = "frontier clothes" - path = /obj/item/clothing/under/frontier \ No newline at end of file + path = /obj/item/clothing/under/frontier + +/datum/gear/uniform/pj_red + display_name = "red pajamas" + path = /obj/item/clothing/under/redpyjamas + +/datum/gear/uniform/pj_blue + display_name = "blue pajamas" + path = /obj/item/clothing/under/bluepyjamas + +/datum/gear/uniform/harness + display_name = "gear harness (Full Body Prosthetic, Diona, Giant Armoured Serpentid)" + path = /obj/item/clothing/under/harness + category = GEAR_CATEGORY_UNIFORMS_AND_CASUAL_DRESS + whitelisted = list(SPECIES_IPC,SPECIES_DIONA, SPECIES_NABBER) diff --git a/code/modules/client/preference_setup/loadout/lists/utility.dm b/code/modules/client/preference_setup/loadout/lists/utility.dm index fd5b84d6ef73c..c867e110f6576 100644 --- a/code/modules/client/preference_setup/loadout/lists/utility.dm +++ b/code/modules/client/preference_setup/loadout/lists/utility.dm @@ -1,7 +1,7 @@ // "Useful" items - I'm guessing things that might be used at work? /datum/gear/utility - sort_category = "Utility" - category = /datum/gear/utility + category = GEAR_CATEGORY_UTILITY + abstract_type = /datum/gear/utility /datum/gear/utility/briefcase display_name = "briefcase" diff --git a/code/modules/client/preference_setup/loadout/lists/xenowear.dm b/code/modules/client/preference_setup/loadout/lists/xenowear.dm deleted file mode 100644 index db80fc6ecb9d6..0000000000000 --- a/code/modules/client/preference_setup/loadout/lists/xenowear.dm +++ /dev/null @@ -1,169 +0,0 @@ -// Alien clothing. - -// Unathi clothing -/datum/gear/suit/unathi - sort_category = "Xenowear" - category = /datum/gear/suit/unathi - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -/datum/gear/suit/unathi/mantle - display_name = "hide mantle (Unathi)" - path = /obj/item/clothing/suit/unathi/mantle - cost = 1 - -/datum/gear/suit/unathi/robe - display_name = "roughspun robe (Unathi)" - path = /obj/item/clothing/suit/unathi/robe - cost = 1 - -/datum/gear/suit/unathi/knifeharness - display_name = "decorated harness" - path = /obj/item/clothing/accessory/storage/knifeharness - cost = 5 - -/datum/gear/suit/unathi/savage_hunter - display_name = "savage hunter hides (Male, Unathi)" - path = /obj/item/clothing/under/savage_hunter - slot = slot_w_uniform - cost = 2 - -/datum/gear/suit/unathi/savage_hunter/female - display_name = "savage hunter hides (Female, Unathi)" - path = /obj/item/clothing/under/savage_hunter/female - slot = slot_w_uniform - cost = 2 - -//Skrell Chains -/datum/gear/ears/skrell - sort_category = "Xenowear" - category = /datum/gear/ears/skrell - whitelisted = list(SPECIES_SKRELL) - -/datum/gear/ears/skrell/chains - display_name = "headtail chain selection (Skrell)" - path = /obj/item/clothing/ears/skrell/chain - flags = GEAR_HAS_SUBTYPE_SELECTION - -/datum/gear/ears/skrell/colored/chain - display_name = "colored headtail chain, colour select (Skrell)" - path = /obj/item/clothing/ears/skrell/colored/chain - flags = GEAR_HAS_COLOR_SELECTION - -//Skrell Bands -/datum/gear/ears/skrell/bands - display_name = "headtail band selection (Skrell)" - path = /obj/item/clothing/ears/skrell/band - flags = GEAR_HAS_SUBTYPE_SELECTION - -/datum/gear/ears/skrell/colored/band - display_name = "headtail bands, colour select (Skrell)" - path = /obj/item/clothing/ears/skrell/colored/band - flags = GEAR_HAS_COLOR_SELECTION - -//Skrell Cloth -/datum/gear/ears/skrell/cloth/male - display_name = "male headtail cloth (Skrell)" - path = /obj/item/clothing/ears/skrell/cloth_male - flags = GEAR_HAS_COLOR_SELECTION - - -/datum/gear/ears/skrell/cloth/female - display_name = "female headtail cloth (Skrell)" - path = /obj/item/clothing/ears/skrell/cloth_female - flags = GEAR_HAS_COLOR_SELECTION - -/datum/gear/head/skrell_helmet - display_name = "Skrellian helmet" - path = /obj/item/clothing/head/helmet/skrell - whitelisted = list(SPECIES_SKRELL) - sort_category = "Xenowear" - allowed_roles = list(/datum/job/hos, /datum/job/warden, /datum/job/officer, /datum/job/detective) - -/datum/gear/accessory/skrell_badge - display_name = "skrellian SDTF badge" - path = /obj/item/clothing/accessory/badge/tags/skrell - whitelisted = list(SPECIES_SKRELL) - sort_category = "Xenowear" - -// IPC clothing -/datum/gear/ipc_monitor - display_name = "display monitor (IPC)" - path = /obj/item/clothing/mask/monitor - sort_category = "Xenowear" - whitelisted = list(SPECIES_IPC) - cost = 0 - -/datum/gear/suit/lab_xyn_machine - display_name = "Xynergy labcoat" - path = /obj/item/clothing/suit/storage/toggle/labcoat/xyn_machine - slot = slot_wear_suit - sort_category = "Xenowear" - whitelisted = list(SPECIES_IPC) - -// Misc clothing -/datum/gear/uniform/harness - display_name = "gear harness (Full Body Prosthetic, Diona, Giant Armoured Serpentid)" - path = /obj/item/clothing/under/harness - sort_category = "Xenowear" - whitelisted = list(SPECIES_IPC,SPECIES_DIONA, SPECIES_NABBER) - -/datum/gear/shoes/toeless - display_name = "toeless jackboots" - path = /obj/item/clothing/shoes/jackboots/unathi - sort_category = "Xenowear" - -/datum/gear/shoes/wrk_toeless - display_name = "toeless workboots" - path = /obj/item/clothing/shoes/workboots/toeless - sort_category = "Xenowear" - -// Pre-modified gloves - -/datum/gear/gloves/colored/modified - display_name = "modified gloves, colored" - path = /obj/item/clothing/gloves/color/modified - sort_category = "Xenowear" - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -/datum/gear/gloves/latex/modified - display_name = "modified gloves, latex" - path = /obj/item/clothing/gloves/latex/modified - sort_category = "Xenowear" - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -/datum/gear/gloves/nitrile/modified - display_name = "modified gloves, nitrile" - path = /obj/item/clothing/gloves/latex/nitrile/modified - sort_category = "Xenowear" - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -/datum/gear/gloves/rainbow/modified - display_name = "modified gloves, rainbow" - path = /obj/item/clothing/gloves/rainbow/modified - sort_category = "Xenowear" - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -/datum/gear/gloves/evening/modified - display_name = "modified gloves, evening" - path = /obj/item/clothing/gloves/color/evening/modified - sort_category = "Xenowear" - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -/datum/gear/gloves/botany/modified - display_name = "modified gloves, botany" - path = /obj/item/clothing/gloves/thick/botany/modified - sort_category = "Xenowear" - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -/datum/gear/gloves/work/modified - display_name = "modified gloves, work" - path = /obj/item/clothing/gloves/thick/modified - sort_category = "Xenowear" - whitelisted = list(SPECIES_UNATHI, SPECIES_YEOSA) - -// Vox clothing -/datum/gear/vox_mask - display_name = "vox breathing mask" - path = /obj/item/clothing/mask/gas/vox - sort_category = "Xenowear" - whitelisted = list(SPECIES_VOX) diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index 8c1b7a2d45e27..ff2e9eb8fb9b3 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -1,80 +1,92 @@ -var/global/list/loadout_categories = list() +var/global/list/gear_categories = list() var/global/list/gear_datums = list() -/datum/preferences - var/list/gear_list //Custom/fluff item loadouts. - var/gear_slot = 1 //The current gear save slot +/hook/startup/proc/populate_gear_list() + for(var/datum/gear/gear_type as anything in subtypesof(/datum/gear)) + if(is_abstract(gear_type)) + continue -/datum/preferences/proc/Gear() - return gear_list[gear_slot] + if(length(GLOB.using_map.loadout_blacklist) && GLOB.using_map.loadout_blacklist[gear_type]) + continue -/datum/loadout_category - var/category = "" - var/list/gear = list() + var/datum/gear/new_gear = new gear_type + gear_datums[new_gear.display_name] = new_gear -/datum/loadout_category/New(cat) - category = cat - ..() + var/datum/gear_category/category = gear_categories[new_gear.category] + if(!category) + category = new /datum/gear_category(new_gear.category) + gear_categories[new_gear.category] = category -/hook/startup/proc/populate_gear_list() + category.add_gear(new_gear) - //create a list of gear datums to sort - for(var/geartype in typesof(/datum/gear)-/datum/gear) - var/datum/gear/G = geartype - if(initial(G.category) == geartype) - continue - if(GLOB.using_map.loadout_blacklist && (geartype in GLOB.using_map.loadout_blacklist)) - continue + gear_categories = sortAssoc(gear_categories) + + for(var/gear_category in gear_categories) + var/datum/gear_category/category = gear_categories[gear_category] + category.sort_gear() + + return TRUE + +/datum/preferences + var/datum/gear_slots_container/gear_container + +/datum/preferences/proc/Gear() + var/datum/gear_slot/picked_gear_slot = get_picked_gear_slot() + if(!picked_gear_slot) + return list() - var/use_name = initial(G.display_name) - var/use_category = initial(G.sort_category) + return picked_gear_slot.get_gear_entries() - if(!loadout_categories[use_category]) - loadout_categories[use_category] = new /datum/loadout_category(use_category) - var/datum/loadout_category/LC = loadout_categories[use_category] - gear_datums[use_name] = new geartype - LC.gear[use_name] = gear_datums[use_name] +/datum/preferences/proc/get_picked_gear_slot() + if(!gear_container) + stack_trace("`gear_container` is null") + gear_container = new - loadout_categories = sortAssoc(loadout_categories) - for(var/loadout_category in loadout_categories) - var/datum/loadout_category/LC = loadout_categories[loadout_category] - LC.gear = sortAssoc(LC.gear) - return 1 + return gear_container.get_picked_gear_slot() /datum/category_item/player_setup_item/loadout name = "Loadout" sort_order = 1 var/current_tab = "General" var/hide_unavailable_gear = 0 + var/hide_donate_gear = FALSE + var/datum/gear/selected_gear + var/list/selected_tweaks = list() + var/static/list/gear_icons_cache /datum/category_item/player_setup_item/loadout/load_character(datum/pref_record_reader/R) - pref.gear_list = R.read("gear_list") - pref.gear_slot = R.read("gear_slot") + pref.gear_container = new(R.read("gear_container_size"), R.read("picked_gear_slot"), R.read("gear_slots")) /datum/category_item/player_setup_item/loadout/save_character(datum/pref_record_writer/W) - W.write("gear_list", pref.gear_list) - W.write("gear_slot", pref.gear_slot) + var/list/gear_slots = list() + for(var/datum/gear_slot/slot as anything in pref.gear_container.get_gear_slots()) + gear_slots += list(slot.get_gear_entries()) -/datum/category_item/player_setup_item/loadout/proc/valid_gear_choices(max_cost) - . = list() - var/mob/preference_mob = preference_mob() - for(var/gear_name in gear_datums) - var/datum/gear/G = gear_datums[gear_name] - var/okay = 1 - if(G.whitelisted && preference_mob) - okay = 0 - for(var/species in G.whitelisted) - if(is_species_whitelisted(preference_mob, species)) - okay = 1 - break - if(!okay) - continue - if(max_cost && G.cost > max_cost) - continue - . += gear_name + W.write("gear_container_size", pref.gear_container.get_size()) + W.write("picked_gear_slot", pref.gear_container.get_picked_gear_slot_number()) + W.write("gear_slots", gear_slots) + +/datum/category_item/player_setup_item/loadout/proc/is_gear_valid(gear_name, max_cost) + var/datum/gear/gear_to_check = gear_name + if(!istype(gear_to_check)) + gear_to_check = gear_datums[gear_to_check] + + if(!gear_to_check) + return FALSE + + if(!isnull(max_cost) && gear_to_check.cost > max_cost) + return FALSE + + if(!gear_to_check.allowed_donation_tier(pref.client)) + return FALSE + + if(!length(gear_to_check.whitelisted)) + return TRUE + + return is_any_alien_whitelisted(preference_mob(), gear_to_check.whitelisted) /datum/category_item/player_setup_item/loadout/proc/skill_check(list/jobs, list/skills_required) - for(var/datum/job/J in jobs) + for(var/datum/job/J as anything in jobs) . = TRUE for(var/R in skills_required) if(pref.get_total_skill_value(J, R) < skills_required[R]) @@ -84,179 +96,371 @@ var/global/list/gear_datums = list() return /datum/category_item/player_setup_item/loadout/sanitize_character() - pref.gear_slot = sanitize_integer(pref.gear_slot, 1, config.loadout_slots, initial(pref.gear_slot)) - if(!islist(pref.gear_list)) pref.gear_list = list() - - if(length(pref.gear_list) < config.loadout_slots) - LIST_RESIZE(pref.gear_list, config.loadout_slots) - - for(var/index = 1 to config.loadout_slots) - var/list/gears = pref.gear_list[index] - - if(istype(gears)) - for(var/gear_name in gears) - if(!(gear_name in gear_datums)) - gears -= gear_name - - var/total_cost = 0 - for(var/gear_name in gears) - if(!gear_datums[gear_name]) - gears -= gear_name - else if(!(gear_name in valid_gear_choices())) - gears -= gear_name - else - var/datum/gear/G = gear_datums[gear_name] - if(total_cost + G.cost > config.max_gear_cost) - gears -= gear_name - else - total_cost += G.cost - else - pref.gear_list[index] = list() + if(!pref.gear_container) + pref.gear_container = new + + var/datum/gear_slots_container/gear_container = pref.gear_container + gear_container.set_size(config.loadout_slots) + + for(var/datum/gear_slot/current_gear_slot as anything in gear_container.get_gear_slots()) + var/list/gear_entries = current_gear_slot.get_gear_entries() + if(!length(gear_entries)) + continue + + var/gear_budget_left = config.max_gear_cost + var/list/invalid_gear = list() + + /// Filtering out invalid slots + for(var/gear_name in gear_entries) + var/datum/gear/gear_datum = gear_datums[gear_name] + if(!is_gear_valid(gear_datum, gear_budget_left)) + invalid_gear += gear_datum.display_name + continue + + gear_budget_left -= gear_datum.cost -/datum/category_item/player_setup_item/loadout/content() + /// Here we just set filtered gear names to slot + current_gear_slot.remove_gear(invalid_gear) + +/datum/category_item/player_setup_item/loadout/content(mob/user) . = list() - var/total_cost = 0 - var/list/gears = pref.gear_list[pref.gear_slot] - for(var/i = 1; i <= length(gears); i++) - var/datum/gear/G = gear_datums[gears[i]] - if(G) - total_cost += G.cost - - var/fcolor = "#3366cc" - if(total_cost < config.max_gear_cost) - fcolor = "#e67300" - . += "" - . += "" - if(firstcat) - firstcat = 0 - else - . += " |" + . += "
    " - . += "\<=[SPAN_COLOR(fcolor, "\[[pref.gear_slot]\]")] =\>" + + if(!user.client) + return . + + var/datum/gear_slot/picked_slot = pref.get_picked_gear_slot() + if(!picked_slot) + stack_trace("Something went wrong. `picked_slot` should not be null") + return . + + var/gear_total_cost = picked_slot.get_total_gear_cost() + var/gear_points_left = config.max_gear_cost - gear_total_cost + var/fcolor = gear_total_cost < config.max_gear_cost ? "#e67300" : "#3366cc" + + . += "" + . += "
    " + . += "" + + . += "" if(config.max_gear_cost < INFINITY) - . += "[SPAN_COLOR(fcolor, "[total_cost]/[config.max_gear_cost]")] loadout points spent." + . += "[gear_total_cost]/[config.max_gear_cost] loadout points spent.
    " - . += "Clear Loadout" - . += "[hide_unavailable_gear ? "Show all" : "Hide unavailable"]" + . += BTN("clear_loadout", "Clear Loadout") + . += BTN("random_loadout", "Random Loadout") + . += BTN("toggle_hiding", hide_unavailable_gear ? "Show unavailable" : "Hide unavailable") + . += BTN("toggle_donate", hide_donate_gear ? "Show donate gears" : "Hide donate gears") + . += "" - . += "
    " + + . += "" + + . += "Loadout Set: [BTN("prev_slot", "<<")]\[[picked_slot.get_slot_number()]\][BTN("next_slot", ">>")]" + var/donation_tier = user.client.donator_info.get_full_donation_tier() + + . += "" + . += "Donation tier: [donation_tier]
    " + . += CBTN("donate", "Support us!", "gold") + . += "
    " - var/firstcat = 1 - for(var/category in loadout_categories) + . += "
    " + . += "
    " + + . += "" + + . += "" + . += "" + . += "" + if(selected_gear) + . += "" + . += "" + + . += "" - var/datum/loadout_category/LC = loadout_categories[category] + // Categories + + . += "" - - var/datum/loadout_category/LC = loadout_categories[current_tab] - . += "" - . += "" - . += "" - var/jobs = list() - for(var/job_title in (pref.job_medium|pref.job_low|pref.job_high)) - var/datum/job/J = SSjobs.get_by_title(job_title) - if(J) - dd_insertObjectList(jobs, J) - for(var/gear_name in LC.gear) - if(!(gear_name in valid_gear_choices())) + var/datum/gear/gear_datum = gear_datums[gear_name] + category_cost += gear_datum.cost + + var/category_class = category_cost ? "linkOn" : "" + if(category_name == current_tab) + category_class += " selected" + + . += VCBTN("select_category", category_name, "[category_name] - [category_cost || 0]", "[category_class] fluid") + + . += "" + + // Gears + + . += "" + + // Selected gear + + if(selected_gear) + var/ticked = picked_slot.contains(selected_gear.display_name) + + var/datum/gear_data/gear_data_to_tweak = new(selected_gear.path) + for(var/datum/gear_tweak/gear_tweak_to_apply as anything in selected_gear.gear_tweaks) + gear_tweak_to_apply.tweak_gear_data(selected_tweaks["[gear_tweak_to_apply]"], gear_data_to_tweak) + + var/atom/movable/gear_virtual_item = new gear_data_to_tweak.path + for(var/datum/gear_tweak/gear_tweak_to_apply as anything in selected_gear.gear_tweaks) + gear_tweak_to_apply.tweak_item(user, gear_virtual_item, selected_tweaks["[gear_tweak_to_apply]"]) + + var/gear_image = get_gear_image(gear_virtual_item, user) + + QDEL_NULL(gear_virtual_item) + + . += "" - if(ticked) - entry += "" - if(!hide_unavailable_gear || allowed || ticked) - . += entry - . += "
    Categories:Gears:Selected Item:
    " + for(var/category_name in gear_categories) + var/datum/gear_category/category = gear_categories[category_name] var/category_cost = 0 - for(var/gear in LC.gear) - if(gear in pref.gear_list[pref.gear_slot]) - var/datum/gear/G = LC.gear[gear] - category_cost += G.cost + for(var/gear_name in category.get_gear_items()) + if(!picked_slot.contains(gear_name)) + continue - if(category == current_tab) - . += " [SPAN_CLASS("linkOn", "[category] - [category_cost]")] " - else - if(category_cost) - . += " [SPAN_COLOR("#e67300", "[category] - [category_cost]")] " - else - . += " [category] - 0 " - - . += "

    [LC.category]

    " + . += "" + + var/list/purchased_gears = list() + var/list/paid_gears = list() + var/list/not_paid_gears = list() + var/datum/gear_category/current_category = gear_categories[current_tab] + + for(var/gear_name in current_category.get_gear_items()) + if(!is_gear_valid(gear_name)) continue - var/list/entry = list() - var/datum/gear/G = LC.gear[gear_name] - var/ticked = (G.display_name in pref.gear_list[pref.gear_slot]) - entry += "" - entry += "" - entry += " + + + "} + + if(gear_datum.donation_tier && user.client.donator_info.donation_tier_available(gear_datum.donation_tier)) + purchased_gears += entry + continue + + if(gear_datum.donation_tier) + paid_gears += entry + continue + + not_paid_gears += entry + + . += purchased_gears.Join() + . += paid_gears.Join() + . += not_paid_gears.Join() + + . += "
    [G.display_name][G.cost][FONT_NORMAL(G.get_description(get_gear_metadata(G,1)))]" - var/allowed = 1 - if(allowed && G.allowed_roles) - var/good_job = 0 - var/bad_job = 0 - entry += "
    " - var/list/jobchecks = list() - for(var/datum/job/J in jobs) - if(J.type in G.allowed_roles) - jobchecks += SPAN_COLOR("#55cc55", J.title) - good_job = 1 - else - jobchecks += SPAN_COLOR("#cc5555", J.title) - bad_job = 1 - allowed = good_job || !bad_job - entry += "[english_list(jobchecks)]" - if(allowed && G.allowed_branches) + var/datum/gear/gear_datum = gear_datums[gear_name] + if(!gear_datum?.path) + continue + + if(hide_donate_gear && gear_datum.donation_tier) + continue + + var/ticked = picked_slot.contains(gear_name) + + + var/display_class = "" + var/allowed_to_see = gear_allowed_to_see(gear_datum) + + if(ticked) + display_class = "linkOn" + + else if(!gear_datum.allowed_donation_tier(user) && gear_datum.donation_tier) + display_class = "gold" + + else if(!allowed_to_see) + display_class = "gray" + + else if(length(gear_datum.whitelisted)) + display_class = "violet" + + if(gear_datum == selected_gear) + display_class += " selected" + + if(!hide_unavailable_gear || allowed_to_see || ticked) + + var/entry = {" +
    [VCBTN("select_gear", gear_datum.display_name, gear_datum.display_name, "[display_class] fluid")]
    " + . += "
    " + + . += "" + + . += "" + + . += "" + . += "
    [gear_image]" + . += "[selected_gear.display_name]" + + var/desc = selected_gear.get_description(selected_tweaks) + if(desc) + . += "
    " + . += desc + + . += "
    " + + if(selected_gear.slot) + var/slot_description = GLOB.slot_descriptions["[selected_gear.slot]"] + if(slot_description) + . += "Slot: [slot_description]
    " + . += "Loadout Points: [selected_gear.cost]
    " + + var/list/selected_jobs = list() + for(var/job_title in (pref.job_medium|pref.job_low|pref.job_high)) + var/datum/job/job_datum = SSjobs.get_by_title(job_title) + if(!job_datum) + continue + + BINARY_INSERT(job_datum, selected_jobs, /datum/job, job_datum, title, COMPARE_KEY) + + if(length(selected_gear.allowed_roles)) + . += "Has jobs restrictions:" + . += "
    " + . += "" + var/ind = 0 + for(var/allowed_type in selected_gear.allowed_roles) + if(!ispath(allowed_type, /datum/job)) + log_warning("There is an object called '[allowed_type]' in the list of whitelisted jobs for a gear '[selected_gear.display_name]'. It's not /datum/job.") + continue + var/datum/job/J = SSjobs.get_by_path(allowed_type) || new allowed_type + ++ind + if(ind > 1) + . += ", " + if(length(selected_jobs) && (J in selected_jobs)) + . += SPAN_COLOR("#55cc55", J.title) + else + . += SPAN_COLOR("#808080", J.title) + . += "" + . += "
    " + + if(length(selected_gear.allowed_branches)) + . += "Has jobs restrictions:" + . += "
    " + . += "" var/list/branches = list() - for(var/datum/job/J in jobs) + for(var/datum/job/J in selected_jobs) if(pref.branches[J.title]) branches |= pref.branches[J.title] - if(length(branches)) - var/list/branch_checks = list() - var/good_branch = 0 - entry += "
    " - for(var/branch in branches) - var/datum/mil_branch/player_branch = GLOB.mil_branches.get_branch(branch) - if(player_branch.type in G.allowed_branches) - branch_checks += SPAN_COLOR("#55cc55", player_branch.name) - good_branch = 1 - else - branch_checks += SPAN_COLOR("#cc5555", player_branch.name) - allowed = good_branch - - entry += "[english_list(branch_checks)]" - - if(allowed && G.allowed_skills) - var/list/skills_required = list()//make it into instances? instead of path - for(var/skill in G.allowed_skills) - var/singleton/hierarchy/skill/instance = GET_SINGLETON(skill) - skills_required[instance] = G.allowed_skills[skill] - allowed = skill_check(jobs, skills_required)//Checks if a single job has all the skills required + var/ind = 0 + for(var/branch in branches) + ++ind + if(ind > 1) + . += ", " + var/datum/mil_branch/player_branch = GLOB.mil_branches.get_branch(branch) + if(player_branch.type in selected_gear.allowed_branches) + . += SPAN_COLOR("#55cc55", player_branch.name) + else + . += SPAN_COLOR("#808080", player_branch.name) + + . += "
    " + . += "
    " - entry += "
    " - var/list/skill_checks = list() - for(var/R in skills_required) - var/singleton/hierarchy/skill/S = R - var/skill_entry - skill_entry += "[S.levels[skills_required[R]]]" + if(length(selected_gear.required_skills)) + . += "Has skills restrictions:" + . += "
    " + . += "" + var/list/skills_required = list()//make it into instances? instead of path + for(var/skill in selected_gear.required_skills) + var/singleton/hierarchy/skill/instance = GET_SINGLETON(skill) + skills_required[instance] = selected_gear.required_skills[skill] + + var/allowed = skill_check(selected_jobs, skills_required)//Checks if a single job has all the skills required + var/ind = 0 + for(var/skill in skills_required) + var/singleton/hierarchy/skill/S = skill + ++ind + if(ind > 1) + . += ", " if(allowed) - skill_entry = SPAN_COLOR("#55cc55", "[skill_entry] [R]") + . += SPAN_COLOR("#55cc55", "[S.levels[skills_required[skill]]] [skill]") else - skill_entry = SPAN_COLOR("#cc5555", "[skill_entry] [R]") - skill_checks += skill_entry + . += SPAN_COLOR("#808080", "[S.levels[skills_required[skill]]] [skill]") + . += "" + . += "
    " + + if(length(selected_gear.required_factions)) + . += "Has faction restrictions:" + . += "
    " + . += "" + var/singleton/cultural_info/faction = SSculture.get_culture(pref.cultural_info[TAG_FACTION]) + var/facname = faction ? faction.name : "Unset" + + if(facname in selected_gear.required_factions) + . += SPAN_COLOR("#55cc55", facname) + else + . += SPAN_COLOR("#808080", facname) + + . += "" + . += "
    " + + if(selected_gear.whitelisted) + . += "Has species restrictions:" + . += "
    " + . += "" + + if(!istype(selected_gear.whitelisted, /list)) + selected_gear.whitelisted = list(selected_gear.whitelisted) + + var/ind = 0 + for(var/allowed_species in selected_gear.whitelisted) + ++ind + if(ind > 1) + . += ", " + if(pref.species && pref.species == allowed_species) + . += "[allowed_species]" + else + . += "[allowed_species]" + . += "" + . += "
    " + + if(selected_gear.donation_tier) + . += "
    " + . += "Donation tier required: [donation_tier_decorated(selected_gear.donation_tier)]" + . += "
    " + + // Tweaks + if(length(selected_gear.gear_tweaks)) + . += "
    Options:
    " + for(var/datum/gear_tweak/tweak in selected_gear.gear_tweaks) + var/tweak_contents = tweak.get_contents(selected_tweaks["[tweak]"]) + if(tweak_contents) + . += VBTN("tweak", ref(tweak), tweak_contents) + . += "
    " + + . += "
    " + + . += "
    Actions:
    " + var/not_available_message = SPAN_NOTICE("This item will never spawn with you, using your current preferences.") + if(selected_gear.allowed_donation_tier(user)) + var/class = ticked ? "linkOn" : (gear_points_left >= selected_gear.cost ? "" : "linkOff") + var/label = ticked ? "Drop" : "Take" + . += VCBTN("toggle_gear", selected_gear.display_name, label, class) + else + var/trying_on = (pref.trying_on_gear == selected_gear.display_name) + if(selected_gear.donation_tier) + var/class = trying_on ? "class='linkOn' " : "" + . += CBTN("try_on", "Try On", class) + else + . += not_available_message - entry += "[english_list(skill_checks)]
    " + if(!gear_allowed_to_see(selected_gear)) + . += "
    " + . += not_available_message - entry += "
    " - for(var/datum/gear_tweak/tweak in G.gear_tweaks) - var/contents = tweak.get_contents(get_tweak_metadata(G, tweak)) - if(contents) - entry += " [contents]" - entry += "
    " + . += "" + + . += "" . = jointext(.,null) -/datum/category_item/player_setup_item/loadout/proc/get_gear_metadata(datum/gear/G, readonly) - var/list/gear = pref.gear_list[pref.gear_slot] - . = gear[G.display_name] - if(!.) - . = list() - if(!readonly) - gear[G.display_name] = . +/datum/category_item/player_setup_item/loadout/proc/get_gear_metadata(datum/gear/our_gear) + if(!our_gear) + stack_trace("`our_gear` should not be null") + return list() + + var/datum/gear_slot/picked_gear_slot = pref.get_picked_gear_slot() + return picked_gear_slot.get_gear_tweaks(our_gear.display_name) /datum/category_item/player_setup_item/loadout/proc/get_tweak_metadata(datum/gear/G, datum/gear_tweak/tweak) var/list/metadata = get_gear_metadata(G) @@ -269,140 +473,256 @@ var/global/list/gear_datums = list() var/list/metadata = get_gear_metadata(G) metadata["[tweak]"] = new_metadata -/datum/category_item/player_setup_item/loadout/OnTopic(href, href_list, user) +/datum/category_item/player_setup_item/loadout/OnTopic(href, list/href_list, mob/user) + ASSERT(istype(user)) + if(href_list["toggle_gear"]) - var/datum/gear/TG = locate(href_list["toggle_gear"]) - if(!istype(TG) || gear_datums[TG.display_name] != TG) - return TOPIC_REFRESH - if(TG.display_name in pref.gear_list[pref.gear_slot]) - pref.gear_list[pref.gear_slot] -= TG.display_name - else - var/total_cost = 0 - for(var/gear_name in pref.gear_list[pref.gear_slot]) - var/datum/gear/G = gear_datums[gear_name] - if(istype(G)) total_cost += G.cost - if((total_cost+TG.cost) <= config.max_gear_cost) - pref.gear_list[pref.gear_slot] += TG.display_name - return TOPIC_REFRESH_UPDATE_PREVIEW - if(href_list["gear"] && href_list["tweak"]) - var/datum/gear/gear = locate(href_list["gear"]) - var/datum/gear_tweak/tweak = locate(href_list["tweak"]) - if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks) || gear_datums[gear.display_name] != gear) - return TOPIC_NOACTION - var/metadata = tweak.get_metadata(user, get_tweak_metadata(gear, tweak)) - if(!metadata || !CanUseTopic(user)) - return TOPIC_NOACTION - set_tweak_metadata(gear, tweak, metadata) - return TOPIC_REFRESH_UPDATE_PREVIEW + if(toggle_gear(gear_datums[href_list["toggle_gear"]], user)) + return TOPIC_REFRESH_UPDATE_PREVIEW + + return TOPIC_NOACTION + if(href_list["next_slot"]) - pref.gear_slot = pref.gear_slot+1 - if(pref.gear_slot > config.loadout_slots) - pref.gear_slot = 1 - return TOPIC_REFRESH_UPDATE_PREVIEW + if(pref.gear_container.cycle_slot_right()) + return TOPIC_REFRESH_UPDATE_PREVIEW + + return TOPIC_NOACTION + if(href_list["prev_slot"]) - pref.gear_slot = pref.gear_slot-1 - if(pref.gear_slot < 1) - pref.gear_slot = config.loadout_slots - return TOPIC_REFRESH_UPDATE_PREVIEW + if(pref.gear_container.cycle_slot_left()) + return TOPIC_REFRESH_UPDATE_PREVIEW + + return TOPIC_NOACTION + if(href_list["select_category"]) - current_tab = href_list["select_category"] + var/new_tab = href_list["select_category"] + if(new_tab == current_tab) + return TOPIC_NOACTION + + current_tab = new_tab return TOPIC_REFRESH + if(href_list["clear_loadout"]) - var/list/gear = pref.gear_list[pref.gear_slot] - gear.Cut() + var/datum/gear_slot/picked_gear_slot = pref.get_picked_gear_slot() + if(!picked_gear_slot.size()) + return TOPIC_NOACTION + + picked_gear_slot.clear() return TOPIC_REFRESH_UPDATE_PREVIEW + if(href_list["toggle_hiding"]) hide_unavailable_gear = !hide_unavailable_gear return TOPIC_REFRESH + + if(href_list["select_gear"]) + var/datum/gear/gear_to_select = gear_datums[href_list["select_gear"]] + if(!gear_to_select) + return TOPIC_NOACTION + + selected_gear = gear_to_select + var/datum/gear_slot/picked_gear_slot = pref.get_picked_gear_slot() + + selected_tweaks = picked_gear_slot.get_gear_tweaks(selected_gear.display_name) + if(!length(selected_tweaks)) + for(var/datum/gear_tweak/tweak as anything in selected_gear.gear_tweaks) + selected_tweaks["[tweak]"] = tweak.get_default() + + pref.trying_on_gear = null + pref.trying_on_tweaks.Cut() + return TOPIC_REFRESH_UPDATE_PREVIEW + + if(href_list["tweak"]) + var/datum/gear_tweak/tweak = locate(href_list["tweak"]) + if(!tweak || !istype(selected_gear) || !(tweak in selected_gear.gear_tweaks)) + return TOPIC_NOACTION + + var/metadata = tweak.get_metadata(user, get_tweak_metadata(selected_gear, tweak)) + if(!metadata || !CanUseTopic(user)) + return TOPIC_NOACTION + + selected_tweaks["[tweak]"] = metadata + + var/datum/gear_slot/picked_slot = pref.get_picked_gear_slot() + var/ticked = picked_slot.contains(selected_gear.display_name) + if(ticked) + set_tweak_metadata(selected_gear, tweak, metadata) + + var/trying_on = (selected_gear.display_name == pref.trying_on_gear) + if(trying_on) + pref.trying_on_tweaks["[tweak]"] = metadata + + return TOPIC_REFRESH_UPDATE_PREVIEW + + if(href_list["try_on"]) + if(!istype(selected_gear)) + return TOPIC_NOACTION + + if(selected_gear.display_name == pref.trying_on_gear) + pref.trying_on_gear = null + pref.trying_on_tweaks.Cut() + else + pref.trying_on_gear = selected_gear.display_name + pref.trying_on_tweaks = selected_tweaks.Copy() + + return TOPIC_REFRESH_UPDATE_PREVIEW + + if(href_list["random_loadout"]) + randomize(user) + return TOPIC_REFRESH_UPDATE_PREVIEW + + if(href_list["toggle_donate"]) + hide_donate_gear = !hide_donate_gear + return TOPIC_REFRESH + + if(href_list["donate"]) + var/singleton/modpack/don_loadout/donations = GET_SINGLETON(/singleton/modpack/don_loadout) + donations.show_donations_info(user) + return TOPIC_NOACTION + return ..() -/datum/gear - var/display_name //Name/index. Must be unique. - var/description //Description of this gear. If left blank will default to the description of the pathed item. - var/path //Path to item. - var/cost = 1 //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points. - var/slot //Slot to equip to. - var/list/allowed_roles //Roles that can spawn with this item. - var/list/allowed_branches //Service branches that can spawn with it. - var/list/allowed_skills //Skills required to spawn with this item. - var/whitelisted //Term to check the whitelist for.. - var/sort_category = "General" - var/flags //Special tweaks in New - var/custom_setup_proc //Special tweak in New - var/category - var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. - -/datum/gear/New() - if(HAS_FLAGS(flags, GEAR_HAS_TYPE_SELECTION|GEAR_HAS_SUBTYPE_SELECTION)) - CRASH("May not have both type and subtype selection tweaks") - if(!description) - var/obj/O = path - description = initial(O.desc) - if(flags & GEAR_HAS_COLOR_SELECTION) - gear_tweaks += gear_tweak_free_color_choice() - if(!(flags & GEAR_HAS_NO_CUSTOMIZATION)) - gear_tweaks += gear_tweak_free_name(display_name) - gear_tweaks += gear_tweak_free_desc(description) - if(flags & GEAR_HAS_TYPE_SELECTION) - gear_tweaks += new/datum/gear_tweak/path/type(path) - if(flags & GEAR_HAS_SUBTYPE_SELECTION) - gear_tweaks += new/datum/gear_tweak/path/subtype(path) - if(custom_setup_proc) - gear_tweaks += new/datum/gear_tweak/custom_setup(custom_setup_proc) - -/datum/gear/proc/get_description(metadata) - . = description - for(var/datum/gear_tweak/gt in gear_tweaks) - . = gt.tweak_description(., metadata["[gt]"]) - -/datum/gear_data - var/path - var/location - -/datum/gear_data/New(path, location) - src.path = path - src.location = location - -/datum/gear/proc/spawn_item(user, location, metadata) - var/datum/gear_data/gd = new(path, location) - for(var/datum/gear_tweak/gt in gear_tweaks) - gt.tweak_gear_data(metadata && metadata["[gt]"], gd) - var/item = new gd.path(gd.location) - for(var/datum/gear_tweak/gt in gear_tweaks) - gt.tweak_item(user, item, metadata && metadata["[gt]"]) - return item - -/datum/gear/proc/spawn_on_mob(mob/living/carbon/human/H, metadata) - var/obj/item/item = spawn_item(H, H, metadata) - if(H.equip_to_slot_if_possible(item, slot, TRYEQUIP_REDRAW | TRYEQUIP_DESTROY | TRYEQUIP_FORCE)) - . = item - - -/datum/gear/proc/spawn_in_storage_or_drop(mob/living/carbon/human/subject, metadata) - var/obj/item/item = spawn_item(subject, subject, metadata) - item.add_fingerprint(subject) - if (istype(item, /obj/item/organ/internal/augment)) - var/obj/item/organ/internal/augment/augment = item - var/obj/item/organ/external/parent = augment.get_valid_parent_organ(subject) - if (!parent) - to_chat(subject, SPAN_WARNING("Failed to find a valid organ to install \the [augment] into!")) - qdel(augment) - return - var/surgery_step = GET_SINGLETON(/singleton/surgery_step/internal/replace_organ) - if (augment.surgery_configure(subject, subject, parent, null, surgery_step)) - to_chat(subject, SPAN_WARNING("Failed to set up \the [augment] for installation in your [parent.name]!")) - qdel(augment) - return - augment.forceMove(subject) - augment.replaced(subject, parent) - augment.onRoundstart() - return - var/atom/container = subject.equip_to_storage(item) - if (container) - to_chat(subject, SPAN_NOTICE("Placing \the [item] in your [container.name]!")) - else if (subject.equip_to_appropriate_slot(item)) - to_chat(subject, SPAN_NOTICE("Placing \the [item] in your inventory!")) - else if (subject.put_in_hands(item)) - to_chat(subject, SPAN_NOTICE("Placing \the [item] in your hands!")) +/datum/category_item/player_setup_item/loadout/proc/randomize(mob/user) + ASSERT(user) + + pref.trying_on_gear = null + pref.trying_on_tweaks.Cut() + + var/datum/gear_slot/current_slot = pref.get_picked_gear_slot() + current_slot.clear() + + var/list/pool = list() + for(var/gear_name in gear_datums) + var/datum/gear/gear_datum = gear_datums[gear_name] + if(gear_allowed_to_see(gear_datum) && is_gear_valid(gear_datum)) + pool += gear_datum + + var/points_left = config.max_gear_cost + + while (points_left > 0 && length(pool)) + var/datum/gear/chosen = pick(pool) + var/list/chosen_tweaks = list() + + for(var/datum/gear_tweak/tweak in chosen.gear_tweaks) + chosen_tweaks["[tweak]"] = tweak.get_random() + + current_slot.add_gear(chosen.display_name, chosen_tweaks) + points_left -= chosen.cost + + for(var/datum/gear/gear_datum as anything in pool) + if(gear_datum.cost <= points_left && gear_datum.slot != chosen.slot) + continue + + pool -= gear_datum + +/datum/category_item/player_setup_item/loadout/proc/gear_allowed_to_see(datum/gear/G) + ASSERT(G) + if(!G.path) + return FALSE + + if(length(G.allowed_roles) || length(G.required_skills) || length(G.allowed_branches)) + // Branches are dependent on jobs so here it is + ASSERT(SSjobs.initialized) + var/list/jobs = new + for(var/job_title in (pref.job_medium|pref.job_low|pref.job_high)) + if(SSjobs.get_by_title(job_title)) + jobs += SSjobs.get_by_title(job_title) + + // No jobs = Fail + // No jobs = No skills = No branches = Fail + if(!jobs || !length(jobs)) + return FALSE + + if (length(G.allowed_roles)) + var/job_ok = FALSE + for(var/datum/job/J in jobs) + if(J.type in G.allowed_roles) + job_ok = TRUE + break + if(!job_ok) + return FALSE + + if (length(G.required_skills)) + var/list/skills_required = list() + for(var/skill in G.required_skills) + var/singleton/hierarchy/skill/instance = GET_SINGLETON(skill) + skills_required[instance] = G.required_skills[skill] + if (!skill_check(jobs, skills_required)) + return FALSE + + // It is nesting hell, but it should work fine + if (length(G.allowed_branches)) + var/list/branches = list() + for(var/datum/job/J in jobs) + if(pref.branches[J.title]) + branches |= pref.branches[J.title] + if (!branches || !length(branches)) + return FALSE + var/branch_ok = FALSE + for(var/branch in branches) + var/datum/mil_branch/player_branch = GLOB.mil_branches.get_branch(branch) + if(player_branch.type in G.allowed_branches) + branch_ok = TRUE + break + + if (!branch_ok) + return FALSE + + if (length(G.required_factions)) + var/singleton/cultural_info/faction = SSculture.get_culture(pref.cultural_info[TAG_FACTION]) + var/facname = faction ? faction.name : "Unset" + if(!(facname in G.required_factions)) + return FALSE + + + if(G.whitelisted && !(pref.species in G.whitelisted)) + return FALSE + + return TRUE + +/// Adds or removes gear from picked gear slot. +/// Returns `true` if gear successfully added or removed. `False` otherwise +/datum/category_item/player_setup_item/loadout/proc/toggle_gear(datum/gear/gear_to_toggle, mob/user) + // Check if someone trying to tricking us. However, it's may be just a bug + ASSERT(gear_to_toggle?.allowed_donation_tier(user)) + + var/datum/gear_slot/picked_slot = pref.get_picked_gear_slot() + + var/gear_name = gear_to_toggle.display_name + if(picked_slot.contains(gear_name)) + picked_slot.remove_gear(gear_name) + return TRUE + + var/total_gear_cost = picked_slot.get_total_gear_cost() + if(total_gear_cost + gear_to_toggle.cost > config.max_gear_cost) + return FALSE + + picked_slot.add_gear(gear_name, selected_tweaks) + return TRUE + + +/datum/category_item/player_setup_item/loadout/proc/get_gear_image(atom/movable/gear_item_prototype, mob/user) + ASSERT(istype(gear_item_prototype)) + ASSERT(user) + + var/list/icon_cache_key_components = list("[gear_item_prototype.icon]", "[gear_item_prototype.icon_state]") + if(islist(gear_item_prototype.color)) + for(var/color in gear_item_prototype.color) + icon_cache_key_components += color else - to_chat(subject, SPAN_WARNING("Dropping \the [item] on the ground!")) + icon_cache_key_components += gear_item_prototype.color + + var/cache_key = icon_cache_key_components.Join(":") + var/asset_name = LAZYACCESS(gear_icons_cache, cache_key) + if(!asset_name) + var/icon/gear_icon = icon(gear_item_prototype.icon, gear_item_prototype.icon_state) + if(gear_item_prototype.color) + if(islist(gear_item_prototype.color)) + gear_icon.MapColors(arglist(gear_item_prototype.color)) + else + gear_icon.Blend(gear_item_prototype.color, ICON_MULTIPLY) + + asset_name = register_icon_asset(gear_icon) + LAZYSET(gear_icons_cache, cache_key, asset_name) + + SSassets.transport.send_assets(user, asset_name) + return "" diff --git a/code/modules/client/preference_setup/loadout/loadout_category.dm b/code/modules/client/preference_setup/loadout/loadout_category.dm new file mode 100644 index 0000000000000..16d62782cc312 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_category.dm @@ -0,0 +1,23 @@ +/datum/gear_category + /// Name of the category. Used for sorting + var/category_name = "" + /// Assoc list of gear instances as + VAR_PRIVATE/list/gear_items = list() + +/datum/gear_category/New(category_name) + src.category_name = category_name + +/datum/gear_category/proc/add_gear(datum/gear/gear_to_add) + ASSERT(istype(gear_to_add)) + gear_items[gear_to_add.display_name] = gear_to_add + +/datum/gear_category/proc/sort_gear() + gear_items = sortAssoc(gear_items) + +/// Returns copy of gear `gear_items` +/datum/gear_category/proc/get_gear_items() + if(!gear_items) + stack_trace("`gear_items` should not be null") + gear_items = list() + + return gear_items.Copy() diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm index f4f0b37effdcd..d96faf34fc15c 100644 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ b/code/modules/client/preference_setup/occupation/occupation.dm @@ -391,7 +391,6 @@ show_browser(user, jointext(HTML, null), "window=\ref[user]skillinfo") else if(href_list["job_info"]) - var/rank = href_list["job_info"] var/datum/job/job = SSjobs.get_by_title(rank) diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm index 09344a28fcf70..1d29e3f0a4cb0 100644 --- a/code/modules/client/preference_setup/preference_setup.dm +++ b/code/modules/client/preference_setup/preference_setup.dm @@ -1,6 +1,8 @@ -#define TOPIC_UPDATE_PREVIEW 4 -#define TOPIC_HARD_REFRESH 8 // use to force a browse() call, unblocking some rsc operations +#define TOPIC_UPDATE_PREVIEW FLAG(2) +#define TOPIC_HARD_REFRESH FLAG(3) // use to force a browse() call, unblocking some rsc operations +#define TOPIC_UPDATE_PREVIEW_BACKGROUND_ICON FLAG(4) #define TOPIC_REFRESH_UPDATE_PREVIEW (TOPIC_HARD_REFRESH|TOPIC_UPDATE_PREVIEW) +#define TOPIC_REFRESH_UPDATE_PREVIEW_BACKGROUND_ICON (TOPIC_HARD_REFRESH|TOPIC_UPDATE_PREVIEW_BACKGROUND_ICON) var/global/const/CHARACTER_PREFERENCE_INPUT_TITLE = "Character Preference" @@ -32,17 +34,17 @@ var/global/const/CHARACTER_PREFERENCE_INPUT_TITLE = "Character Preference" /datum/category_group/player_setup_category/loadout_preferences name = "Loadout" - sort_order = 6 + sort_order = 5 category_item_type = /datum/category_item/player_setup_item/loadout /datum/category_group/player_setup_category/global_preferences name = "Global" - sort_order = 7 + sort_order = 6 category_item_type = /datum/category_item/player_setup_item/player_global /datum/category_group/player_setup_category/law_pref name = "Laws" - sort_order = 8 + sort_order = 7 category_item_type = /datum/category_item/player_setup_item/law_pref @@ -51,13 +53,13 @@ var/global/const/CHARACTER_PREFERENCE_INPUT_TITLE = "Character Preference" ****************************/ /datum/category_collection/player_setup_collection category_group_type = /datum/category_group/player_setup_category - var/datum/preferences/preferences + var/datum/preferences/preferences = null var/datum/category_group/player_setup_category/selected_category = null /datum/category_collection/player_setup_collection/New(datum/preferences/preferences) src.preferences = preferences ..() - selected_category = categories[1] + selected_category = LAZYACCESS(categories, 1) /datum/category_collection/player_setup_collection/Destroy() preferences = null @@ -65,50 +67,72 @@ var/global/const/CHARACTER_PREFERENCE_INPUT_TITLE = "Character Preference" return ..() /datum/category_collection/player_setup_collection/proc/sanitize_setup() + if(!LAZYLEN(categories)) + return + for(var/datum/category_group/player_setup_category/PS in categories) PS.sanitize_setup() /datum/category_collection/player_setup_collection/proc/load_character(datum/pref_record_reader/R) + if(!LAZYLEN(categories)) + return + for(var/datum/category_group/player_setup_category/PS in categories) PS.load_character(R) /datum/category_collection/player_setup_collection/proc/save_character(datum/pref_record_writer/W) + if(!LAZYLEN(categories)) + return + for(var/datum/category_group/player_setup_category/PS in categories) PS.save_character(W) /datum/category_collection/player_setup_collection/proc/load_preferences(datum/pref_record_reader/R) + if(!LAZYLEN(categories)) + return + for(var/datum/category_group/player_setup_category/PS in categories) PS.load_preferences(R) /datum/category_collection/player_setup_collection/proc/save_preferences(datum/pref_record_writer/W) + if(!LAZYLEN(categories)) + return + for(var/datum/category_group/player_setup_category/PS in categories) PS.save_preferences(W) /datum/category_collection/player_setup_collection/proc/header() - var/dat = "" - for(var/datum/category_group/player_setup_category/PS in categories) + if(!LAZYLEN(categories)) + return "" + + var/list/dat = list() + for(var/datum/category_group/player_setup_category/PS as anything in categories) if(PS == selected_category) dat += "[PS.name] " // TODO: Check how to properly mark a href/button selected in a classic browser window else dat += "[PS.name] " - return dat + + return dat.Join() /datum/category_collection/player_setup_collection/proc/content(mob/user) - if(selected_category) - return selected_category.content(user) + if(!selected_category) + return null + + return selected_category.content(user) -/datum/category_collection/player_setup_collection/Topic(href,list/href_list) +/datum/category_collection/player_setup_collection/Topic(href, list/href_list) if(..()) - return 1 + return TRUE + var/mob/user = usr if(!user.client) - return 1 + return TRUE if(href_list["category"]) var/category = locate(href_list["category"]) if(category && (category in categories)) selected_category = category - . = 1 + . = TRUE if(.) user.client.prefs.update_setup_window(user) @@ -217,45 +241,53 @@ var/global/const/CHARACTER_PREFERENCE_INPUT_TITLE = "Character Preference" /datum/category_item/player_setup_item/proc/sanitize_preferences() return -/datum/category_item/player_setup_item/Topic(href,list/href_list) +/datum/category_item/player_setup_item/Topic(href, list/href_list) if(..()) - return 1 + return TOPIC_HANDLED + var/mob/pref_mob = preference_mob() if(!pref_mob || !pref_mob.client) - return 1 + return TOPIC_HANDLED + // If the usr isn't trying to alter their own mob then they must instead be an admin if(usr != pref_mob && !check_rights(R_ADMIN, 0, usr)) - return 1 + return TOPIC_HANDLED - . = OnTopic(href, href_list, usr) + var/topic_result = OnTopic(href, href_list, usr) // The user might have joined the game or otherwise had a change of mob while tweaking their preferences. pref_mob = preference_mob() if(!pref_mob || !pref_mob.client) - return 1 + return TOPIC_HANDLED - if (. & TOPIC_UPDATE_PREVIEW) - pref_mob.client.prefs.preview_icon = null - if (. & TOPIC_HARD_REFRESH) + if(topic_result & TOPIC_UPDATE_PREVIEW_BACKGROUND_ICON) + pref_mob.client.prefs.update_preview_background_icon() + + if (topic_result & TOPIC_UPDATE_PREVIEW) + pref_mob.client.prefs.update_preview_icon() + + if (topic_result & TOPIC_HARD_REFRESH) pref_mob.client.prefs.open_setup_window(usr) - else if (. & TOPIC_REFRESH) + + else if (topic_result & TOPIC_REFRESH) pref_mob.client.prefs.update_setup_window(usr) + return topic_result + /datum/category_item/player_setup_item/CanUseTopic(mob/user) - return 1 + return TRUE /datum/category_item/player_setup_item/proc/OnTopic(href,list/href_list, mob/user) return TOPIC_NOACTION /datum/category_item/player_setup_item/proc/preference_mob() if(!pref.client) - for(var/client/C) - if(C.ckey == pref.client_ckey) - pref.client = C - break + pref.client = GLOB.ckey_directory[pref.client_ckey] if(pref.client) return pref.client.mob + return null + /datum/category_item/player_setup_item/proc/preference_species() return all_species[pref.species] || all_species[SPECIES_HUMAN] diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index e1af628cb5636..8155ebf502f12 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -12,7 +12,7 @@ //doohickeys for savefiles var/is_guest = FALSE var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used - + var/character_slots_count = 0 // Cache, mapping slot record ids to character names // Saves reading all the slot records when listing var/list/slot_names = null @@ -33,9 +33,10 @@ var/client_ckey = null var/datum/browser/popup - var/datum/category_collection/player_setup_collection/player_setup var/datum/browser/panel + var/datum/gear/trying_on_gear + var/list/trying_on_tweaks = list() /datum/preferences/New(client/C) if(istype(C)) @@ -49,6 +50,7 @@ ..() /datum/preferences/proc/setup() + key_bindings = deepCopyList(GLOB.hotkey_keybinding_list_by_key) if(!length(GLOB.skills)) GET_SINGLETON(/singleton/hierarchy/skill) player_setup = new(src) @@ -57,6 +59,7 @@ b_type = RANDOM_BLOOD_TYPE if(client) + client.set_macros() if(IsGuestKey(client.key)) is_guest = TRUE else @@ -136,10 +139,10 @@ dat += "Loading your savefile failed. Please adminhelp for assistance." else dat += "Slot - " - dat += "Load slot - " - dat += "Save slot - " - dat += "Reset slot - " - dat += "Reload slot" + dat += "Load slot - " + dat += "Save slot - " + dat += "Reset slot - " + dat += "Reload slot" dat += "
    " dat += player_setup.header() @@ -150,7 +153,8 @@ /datum/preferences/proc/open_setup_window(mob/user) if (!SScharacter_setup.initialized) return - popup = new (user, "preferences_browser", "Character Setup", 1200, 800, src) + + popup = new(user, "preference_window", "Character Setup", 1000, 800, src) var/content = {" - - Chat - - -
    - -
    - Loading...

    - If this takes longer than 30 seconds, it will automatically reload a maximum of 5 times.
    - If it still doesn't work, use the bug report button at the top right of the window. -
    -
    -
    - -
    - - - - diff --git a/code/modules/goonchat/browserassets/js/browserOutput.js b/code/modules/goonchat/browserassets/js/browserOutput.js deleted file mode 100644 index 5a986ae378449..0000000000000 --- a/code/modules/goonchat/browserassets/js/browserOutput.js +++ /dev/null @@ -1,1107 +0,0 @@ - -/***************************************** -* -* FUNCTION AND VAR DECLARATIONS -* -******************************************/ - -//DEBUG STUFF -var escaper = encodeURIComponent || escape; -var decoder = decodeURIComponent || unescape; -window.onerror = function(msg, url, line, col, error) { - if (document.location.href.indexOf("proc=debug") <= 0) { - var extra = !col ? '' : ' | column: ' + col; - extra += !error ? '' : ' | error: ' + error; - extra += !navigator.userAgent ? '' : ' | user agent: ' + navigator.userAgent; - var debugLine = 'Error: ' + msg + ' | url: ' + url + ' | line: ' + line + extra; - window.location = '?_src_=chat&proc=debug¶m[error]='+escaper(debugLine); - } - return true; -}; - -//Globals -window.status = 'Output'; -var $messages, $subTheme, $subOptions, $subFont, $selectedSub, $contextMenu, $filterMessages, $last_message; -var opts = { - //General - 'messageCount': 0, //A count...of messages... - 'messageLimit': 2053, //A limit...for the messages... - 'scrollSnapTolerance': 10, //If within x pixels of bottom - 'clickTolerance': 10, //Keep focus if outside x pixels of mousedown position on mouseup - 'imageRetryDelay': 50, //how long between attempts to reload images (in ms) - 'imageRetryLimit': 50, //how many attempts should we make? - 'popups': 0, //Amount of popups opened ever - 'wasd': false, //Is the user in wasd mode? - 'priorChatHeight': 0, //Thing for height-resizing detection - 'restarting': false, //Is the round restarting? - 'iconsize': 12, - - //Options menu - 'selectedSubLoop': null, //Contains the interval loop for closing the selected sub menu - 'suppressSubClose': false, //Whether or not we should be hiding the selected sub menu - 'highlightTerms': [], - 'highlightLimit': 5, - 'highlightColor': '#FFFF00', //The color of the highlighted message - 'pingDisabled': false, //Has the user disabled the ping counter - - //Ping display - 'lastPang': 0, //Timestamp of the last response from the server. - 'pangLimit': 35000, - 'pingTime': 0, //Timestamp of when ping sent - 'pongTime': 0, //Timestamp of when ping received - 'noResponse': false, //Tracks the state of the previous ping request - 'noResponseCount': 0, //How many failed pings? - - //Clicks - 'mouseDownX': null, - 'mouseDownY': null, - 'preventFocus': false, //Prevents switching focus to the game window - - //Client Connection Data - 'clientDataLimit': 5, - 'clientData': [], - - 'font': 'Arial', - 'messageCombining': true - -}; -var replaceRegexes = {}; - -function clamp(val, min, max) { - return Math.max(min, Math.min(val, max)) -} - -function outerHTML(el) { - var wrap = document.createElement('div'); - wrap.appendChild(el.cloneNode(true)); - return wrap.innerHTML; -} - -//Polyfill for fucking date now because of course IE8 and below don't support it -if (!Date.now) { - Date.now = function now() { - return new Date().getTime(); - }; -} -//Polyfill for trim() (IE8 and below) -if (typeof String.prototype.trim !== 'function') { - String.prototype.trim = function () { - return this.replace(/^\s+|\s+$/g, ''); - }; -} - -// Linkify the contents of a node, within its parent. -function linkify(parent, insertBefore, text) { - var start = 0; - var match; - var regex = /(?:(?:https?:\/\/)|(?:www\.))(?:[^ ]*?\.[^ ]*?)+[-A-Za-z0-9+&@#\/%?=~_|$!:,.;()]+/ig; - while ((match = regex.exec(text)) !== null) { - // add the unmatched text - parent.insertBefore(document.createTextNode(text.substring(start, match.index)), insertBefore); - - var href = match[0]; - if (!/^https?:\/\//i.test(match[0])) { - href = "http://" + match[0]; - } - - // add the link - var link = document.createElement("a"); - link.href = href; - link.textContent = match[0]; - parent.insertBefore(link, insertBefore); - - start = regex.lastIndex; - } - if (start !== 0) { - // add the remaining text and remove the original text node - parent.insertBefore(document.createTextNode(text.substring(start)), insertBefore); - parent.removeChild(insertBefore); - } -} - -// Recursively linkify the children of a given node. -function linkify_node(node) { - var children = node.childNodes; - // work backwards to avoid the risk of looping forever on our own output - for (var i = children.length - 1; i >= 0; --i) { - var child = children[i]; - if (child.nodeType == Node.TEXT_NODE) { - // text is to be linkified - linkify(node, child, child.textContent); - } else if (child.nodeName != "A" && child.nodeName != "a") { - // do not linkify existing links - linkify_node(child); - } - } -} - -//Shit fucking piece of crap that doesn't work god fuckin damn it -function linkify_fallback(text) { - var rex = /((?:'+$0+''; - } - else { - return $1 ? $0: ''+$0+''; - } - }); -} - -function byondDecode(message) { - // Basically we url_encode twice server side so we can manually read the encoded version and actually do UTF-8. - // The replace for + is because FOR SOME REASON, BYOND replaces spaces with a + instead of %20, and a plus with %2b. - // Marvelous. - message = message.replace(/\+/g, "%20"); - try { - // This is a workaround for the above not always working when BYOND's shitty url encoding breaks. (byond bug id:2399401) - if (decodeURIComponent) { - message = decodeURIComponent(message); - } else { - throw new Error("Easiest way to trigger the fallback") - } - } catch (err) { - message = unescape(message); - } - return message; -} - -function replaceRegex() { - var selectedRegex = replaceRegexes[$(this).attr('replaceRegex')]; - if (selectedRegex) { - var replacedText = $(this).html().replace(selectedRegex[0], selectedRegex[1]); - $(this).html(replacedText); - } - $(this).removeAttr('replaceRegex'); -} - -//Actually turns the highlight term match into appropriate html -function addHighlightMarkup(match) { - var extra = ''; - if (opts.highlightColor) { - extra += ' style="background-color: '+opts.highlightColor+'"'; - } - return ''+match+''; -} - -//Highlights words based on user settings -function highlightTerms(el) { - if (el.children.length > 0) { - for(var h = 0; h < el.children.length; h++){ - highlightTerms(el.children[h]); - } - } - - var hasTextNode = false; - for (var node = 0; node < el.childNodes.length; node++) - { - if (el.childNodes[node].nodeType === 3) - { - hasTextNode = true; - break; - } - } - - if (hasTextNode) { //If element actually has text - var newText = ''; - for (var c = 0; c < el.childNodes.length; c++) { //Each child element - if (el.childNodes[c].nodeType === 3) { //Is it text only? - var words = el.childNodes[c].data.split(' '); - for (var w = 0; w < words.length; w++) { //Each word in the text - var newWord = null; - for (var i = 0; i < opts.highlightTerms.length; i++) { //Each highlight term - if (opts.highlightTerms[i] && words[w].toLowerCase().indexOf(opts.highlightTerms[i].toLowerCase()) > -1) { //If a match is found - newWord = words[w].replace("<", "<").replace(new RegExp(opts.highlightTerms[i], 'gi'), addHighlightMarkup); - break; - } - if (window.console) - console.log(newWord) - } - newText += newWord || words[w].replace("<", "<"); - newText += w >= words.length ? '' : ' '; - } - } else { //Every other type of element - newText += outerHTML(el.childNodes[c]); - } - } - el.innerHTML = newText; - } -} - -function iconError(E) { - var that = this; - setTimeout(function() { - var attempts = $(that).data('reload_attempts'); - if (typeof attempts === 'undefined' || !attempts) { - attempts = 1; - } - if (attempts > opts.imageRetryLimit) - return; - var src = that.src; - that.src = null; - that.src = src+'#'+attempts; - $(that).data('reload_attempts', ++attempts); - }, opts.imageRetryDelay); -} - -function updateIconsSize(html) { - $(html).find(".icon").not('.text_tag').css({'height': opts.iconsize, 'width': opts.iconsize}); -} - -//Send a message to the client -function output(message, flag) { - if (typeof message === 'undefined') { - return; - } - if (typeof flag === 'undefined') { - flag = ''; - } - - if (flag !== 'internal') - opts.lastPang = Date.now(); - - message = byondDecode(message).trim(); - - //The behemoth of filter-code (for Admin message filters) - //Note: This is proooobably hella inefficient - var filteredOut = false; - if (opts.hasOwnProperty('showMessagesFilters') && !opts.showMessagesFilters['All'].show) { - //Get this filter type (defined by class on message) - var messageHtml = $.parseHTML(message), - messageClasses; - if (opts.hasOwnProperty('filterHideAll') && opts.filterHideAll) { - var internal = false; - messageClasses = (!!$(messageHtml).attr('class') ? $(messageHtml).attr('class').split(/\s+/) : false); - if (messageClasses) { - for (var i = 0; i < messageClasses.length; i++) { //Every class - if (messageClasses[i] == 'internal') { - internal = true; - break; - } - } - } - if (!internal) { - filteredOut = 'All'; - } - } else { - //If the element or it's child have any classes - if (!!$(messageHtml).attr('class') || !!$(messageHtml).children().attr('class')) { - messageClasses = $(messageHtml).attr('class').split(/\s+/); - if (!!$(messageHtml).children().attr('class')) { - messageClasses = messageClasses.concat($(messageHtml).children().attr('class').split(/\s+/)); - } - var tempCount = 0; - for (var i = 0; i < messageClasses.length; i++) { //Every class - var thisClass = messageClasses[i]; - $.each(opts.showMessagesFilters, function(key, val) { //Every filter - if (key !== 'All' && val.show === false && typeof val.match != 'undefined') { - for (var i = 0; i < val.match.length; i++) { - var matchClass = val.match[i]; - if (matchClass == thisClass) { - filteredOut = key; - break; - } - } - } - if (filteredOut) return false; - }); - if (filteredOut) break; - tempCount++; - } - } else { - if (!opts.showMessagesFilters['Misc'].show) { - filteredOut = 'Misc'; - } - } - } - } - - //Stuff we do along with appending a message - var atBottom = false; - if (!filteredOut) { - var bodyHeight = $('body').height(); - var messagesHeight = $messages.outerHeight(); - var scrollPos = $('body,html').scrollTop(); - - //Should we snap the output to the bottom? - if (bodyHeight + scrollPos >= messagesHeight - opts.scrollSnapTolerance) { - atBottom = true; - if ($('#newMessages').length) { - $('#newMessages').remove(); - } - //If not, put the new messages box in - } else { - if ($('#newMessages').length) { - var messages = $('#newMessages .number').text(); - messages = parseInt(messages); - messages++; - $('#newMessages .number').text(messages); - if (messages == 2) { - $('#newMessages .messageWord').append('s'); - } - } else { - $messages.after('1 new message '); - } - } - } - - opts.messageCount++; - - //Pop the top message off if history limit reached - if (opts.messageCount >= opts.messageLimit) { - $messages.children('div.entry:first-child').remove(); - opts.messageCount--; //I guess the count should only ever equal the limit - } - - // Create the element - if combining is off, we use it, and if it's on, we - // might discard it bug need to check its text content. Some messages vary - // only in HTML markup, have the same text content, and should combine. - var entry = document.createElement('div'); - entry.innerHTML = message; - var trimmed_message = entry.textContent || entry.innerText || ""; - - var handled = false; - if (opts.messageCombining) { - var lastmessages = $messages.children('div.entry:last-child').last(); - if (lastmessages.length && $last_message && $last_message == trimmed_message) { - var badge = lastmessages.children('.r').last(); - if (badge.length) { - badge = badge.detach(); - badge.text(parseInt(badge.text()) + 1); - } else { - badge = $('', {'class': 'r', 'text': 2}); - } - lastmessages.html(message.replace(/\s*$/g,' ')); - lastmessages.find('[replaceRegex]').each(replaceRegex); - lastmessages.append(badge); - badge.animate({ - "font-size": "0.9em" - }, 100, function() { - badge.animate({ - "font-size": "0.7em" - }, 100); - }); - opts.messageCount--; - handled = true; - } - } - - if (!handled) { - //Actually append the message - entry.className = 'entry'; - - if (filteredOut) { - entry.className += ' hidden'; - entry.setAttribute('data-filter', filteredOut); - } - - $(entry).find('[replaceRegex]').each(replaceRegex); - - $last_message = trimmed_message; - $messages[0].appendChild(entry); - - updateIconsSize(entry); - - $(entry).find("img.icon").error(iconError); - - var to_linkify = $(entry).find(".linkify"); - if (typeof Node === 'undefined') { - // Linkify fallback for old IE - for(var i = 0; i < to_linkify.length; ++i) { - to_linkify[i].innerHTML = linkify_fallback(to_linkify[i].innerHTML); - } - } else { - // Linkify for modern IE versions - for(var i = 0; i < to_linkify.length; ++i) { - linkify_node(to_linkify[i]); - } - } - - //Actually do the snap - //Stuff we can do after the message shows can go here, in the interests of responsiveness - if (opts.highlightTerms && opts.highlightTerms.length > 0) { - highlightTerms(entry); - } - } - - if (!filteredOut && atBottom) { - $('body,html').scrollTop($messages.outerHeight()); - } -} - -function internalOutput(message, flag) -{ - output(escaper(message), flag) -} - -//Runs a route within byond, client or server side. Consider this "ehjax" for byond. -function runByond(uri) { - window.location = uri; -} - -function setCookie(cname, cvalue, exdays) { - cvalue = escaper(cvalue); - var d = new Date(); - d.setTime(d.getTime() + (exdays*24*60*60*1000)); - var expires = 'expires='+d.toUTCString(); - document.cookie = cname + '=' + cvalue + '; ' + expires + "; path=/"; -} - -function getCookie(cname) { - var name = cname + '='; - var ca = document.cookie.split(';'); - for(var i=0; i < ca.length; i++) { - var c = ca[i]; - while (c.charAt(0)==' ') c = c.substring(1); - if (c.indexOf(name) === 0) { - return decoder(c.substring(name.length,c.length)); - } - } - return ''; -} - -function rgbToHex(R,G,B) {return toHex(R)+toHex(G)+toHex(B);} -function toHex(n) { - n = parseInt(n,10); - if (isNaN(n)) return "00"; - n = Math.max(0,Math.min(n,255)); - return "0123456789ABCDEF".charAt((n-n%16)/16) + "0123456789ABCDEF".charAt(n%16); -} - -function setTheme(theme) { - if (theme === 'white') { - document.getElementById("sheetofstyles").href = "browserOutput_white.css"; - runByond('?_src_=chat&proc=swaptolightmode'); - } else if (theme === 'dark') { - document.getElementById("sheetofstyles").href = "browserOutput.css"; - runByond('?_src_=chat&proc=swaptodarkmode'); - } - - setCookie('theme', theme, 365); - internalOutput('Set theme: '+theme+'', 'internal'); -} - -function handleClientData(ckey, ip, compid) { - //byond sends player info to here - var currentData = {'ckey': ckey, 'ip': ip, 'compid': compid}; - if (opts.clientData && !$.isEmptyObject(opts.clientData)) { - runByond('?_src_=chat&proc=analyzeClientData¶m[cookie]='+JSON.stringify({'connData': opts.clientData})); - - for (var i = 0; i < opts.clientData.length; i++) { - var saved = opts.clientData[i]; - if (currentData.ckey == saved.ckey && currentData.ip == saved.ip && currentData.compid == saved.compid) { - return; //Record already exists - } - } - //Lets make sure we obey our limit (can connect from server with higher limit) - while (opts.clientData.length >= opts.clientDataLimit) { - opts.clientData.shift(); - } - } else { - runByond('?_src_=chat&proc=analyzeClientData¶m[cookie]=none'); - } - - //Update the cookie with current details - opts.clientData.push(currentData); - setCookie('connData', JSON.stringify(opts.clientData), 365); -} - -//Server calls this on ehjax response -//Or, y'know, whenever really -function ehjaxCallback(data) { - opts.lastPang = Date.now(); - if (data == 'softPang') { - return; - } else if (data == 'pang') { - opts.pingCounter = 0; //reset - opts.pingTime = Date.now(); - runByond('?_src_=chat&proc=ping'); - - } else if (data == 'pong') { - if (opts.pingDisabled) {return;} - opts.pongTime = Date.now(); - var pingDuration = Math.ceil((opts.pongTime - opts.pingTime) / 2); - $('#pingMs').text(pingDuration+'ms'); - pingDuration = Math.min(pingDuration, 255); - var red = pingDuration; - var green = 255 - pingDuration; - var blue = 0; - var hex = rgbToHex(red, green, blue); - $('#pingDot').css('color', '#'+hex); - - } else if (data == 'roundrestart') { - opts.restarting = true; - internalOutput('
    The connection has been closed because the server is restarting. Please wait while you automatically reconnect.
    ', 'internal'); - } else { - //Oh we're actually being sent data instead of an instruction - var dataJ; - try { - dataJ = $.parseJSON(data); - } catch (e) { - //But...incorrect :sadtrombone: - window.onerror('JSON: '+e+'. '+data, 'browserOutput.html', 327); - return; - } - data = dataJ; - - if (data.clientData) { - if (opts.restarting) { - opts.restarting = false; - $('.connectionClosed.restarting:not(.restored)').addClass('restored').text('The round restarted and you successfully reconnected!'); - } - if (!data.clientData.ckey && !data.clientData.ip && !data.clientData.compid) { - //TODO: Call shutdown perhaps - return; - } else { - handleClientData(data.clientData.ckey, data.clientData.ip, data.clientData.compid); - } - } else if (data.syncRegex) { - for (var i in data.syncRegex) { - - var regexData = data.syncRegex[i]; - var regexName = regexData[0]; - var regexFlags = regexData[1]; - var regexReplaced = regexData[2]; - - replaceRegexes[i] = [new RegExp(regexName, regexFlags), regexReplaced]; - } - } - } -} - -function createPopup(contents, width) { - opts.popups++; - $('body').append(''); - - //Attach close popup event - var $popup = $('#popup'+opts.popups); - var height = $popup.outerHeight(); - $popup.css({'height': height+'px', 'margin': '-'+(height/2)+'px 0 0 -'+(width/2)+'px'}); - - $popup.on('click', '.close', function(e) { - e.preventDefault(); - $popup.remove(); - }); -} - -function toggleWasd(state) { - opts.wasd = (state == 'on' ? true : false); -} - -function subSlideUp() { - $(this).removeClass('scroll'); - $(this).css('height', ''); -} - -function startSubLoop() { - if (opts.selectedSubLoop) { - clearInterval(opts.selectedSubLoop); - } - return setInterval(function() { - if (!opts.suppressSubClose && $selectedSub.is(':visible')) { - $selectedSub.slideUp('fast', subSlideUp); - clearInterval(opts.selectedSubLoop); - } - }, 5000); //every 5 seconds -} - -function handleToggleClick($sub, $toggle) { - if ($selectedSub !== $sub && $selectedSub.is(':visible')) { - $selectedSub.slideUp('fast', subSlideUp); - } - $selectedSub = $sub - if ($selectedSub.is(':visible')) { - $selectedSub.slideUp('fast', subSlideUp); - clearInterval(opts.selectedSubLoop); - } else { - $selectedSub.slideDown('fast', function() { - var windowHeight = $(window).height(); - var toggleHeight = $toggle.outerHeight(); - var priorSubHeight = $selectedSub.outerHeight(); - var newSubHeight = windowHeight - toggleHeight; - $(this).height(newSubHeight); - if (priorSubHeight > (windowHeight - toggleHeight)) { - $(this).addClass('scroll'); - } - }); - opts.selectedSubLoop = startSubLoop(); - } -} - -/***************************************** -* -* DOM READY -* -******************************************/ - -if (typeof $ === 'undefined') { - var div = document.getElementById('loading').childNodes[1]; - div += '

    ERROR: Jquery did not load.'; -} - -$(function() { - $messages = $('#messages'); - $subTheme = $('#subTheme'); - $subOptions = $('#subOptions'); - $subFont = $('#subFont'); - $selectedSub = $subOptions; - - //Hey look it's a controller loop! - setInterval(function() { - if (opts.lastPang + opts.pangLimit < Date.now() && !opts.restarting) { //Every pingLimit - if (!opts.noResponse) { //Only actually append a message if the previous ping didn't also fail (to prevent spam) - opts.noResponse = true; - opts.noResponseCount++; - internalOutput('
    You are either AFK, experiencing lag or the connection has closed.
    ', 'internal'); - } - } else if (opts.noResponse) { //Previous ping attempt failed ohno - $('.connectionClosed[data-count="'+opts.noResponseCount+'"]:not(.restored)').addClass('restored').text('Your connection has been restored (probably)!'); - opts.noResponse = false; - } - }, 2000); //2 seconds - - - /***************************************** - * - * LOAD SAVED CONFIG - * - ******************************************/ - var savedConfig = { - fontsize: getCookie('fontsize'), - iconsize: getCookie('iconsize'), - lineheight: getCookie('lineheight'), - 'spingDisabled': getCookie('pingdisabled'), - 'shighlightTerms': getCookie('highlightterms'), - 'shighlightColor': getCookie('highlightcolor'), - 'sfont': getCookie('font'), - 'smessagecombining': getCookie('messagecombining'), - 'stheme': getCookie('theme') - }; - - if (savedConfig.fontsize) { - $messages.css('font-size', savedConfig.fontsize); - internalOutput('Loaded font size setting of: '+savedConfig.fontsize+'', 'internal'); - } - if (savedConfig.iconsize) { - opts.iconsize = savedConfig.iconsize; - updateIconsSize($messages); - internalOutput('Loaded icon size setting of: '+savedConfig.iconsize+'', 'internal'); - } - if (savedConfig.lineheight) { - $("body").css('line-height', savedConfig.lineheight); - internalOutput('Loaded line height setting of: '+savedConfig.lineheight+'', 'internal'); - } - if(savedConfig.stheme){ - setTheme(savedConfig.stheme); - } - if (savedConfig.spingDisabled) { - if (savedConfig.spingDisabled == 'true') { - opts.pingDisabled = true; - $('#ping').hide(); - } - internalOutput('Loaded ping display of: '+(opts.pingDisabled ? 'hidden' : 'visible')+'', 'internal'); - } - if (savedConfig.shighlightTerms) { - var savedTerms = $.parseJSON(savedConfig.shighlightTerms); - var actualTerms = ''; - for (var i = 0; i < savedTerms.length; i++) { - if (savedTerms[i]) { - actualTerms += savedTerms[i] + ', '; - } - } - if (actualTerms) { - actualTerms = actualTerms.substring(0, actualTerms.length - 2); - internalOutput('Loaded highlight strings of: ' + actualTerms+'', 'internal'); - opts.highlightTerms = savedTerms; - } - } - if (savedConfig.shighlightColor) { - opts.highlightColor = savedConfig.shighlightColor; - internalOutput('Loaded highlight color of: '+savedConfig.shighlightColor+'', 'internal'); - } - if (savedConfig.sfont) { - $('body').css({'font-family': savedConfig.sfont}); - internalOutput('Loaded font: '+savedConfig.sfont+'', 'internal'); - } - - if (savedConfig.smessagecombining) { - if (savedConfig.smessagecombining == 'false') { - opts.messageCombining = false; - } else { - opts.messageCombining = true; - } - } - (function() { - var dataCookie = getCookie('connData'); - if (dataCookie) { - var dataJ; - try { - dataJ = $.parseJSON(dataCookie); - } catch (e) { - window.onerror('JSON '+e+'. '+dataCookie, 'browserOutput.html', 434); - return; - } - opts.clientData = dataJ; - } - })(); - - - /***************************************** - * - * BASE CHAT OUTPUT EVENTS - * - ******************************************/ - - $('body').on('click', 'a', function(e) { - e.preventDefault(); - }); - - $('body').on('mousedown', function(e) { - var $target = $(e.target); - - if ($contextMenu && opts.hasOwnProperty('contextMenuTarget') && opts.contextMenuTarget) { - hideContextMenu(); - return false; - } - - if ($target.is('a') || $target.parent('a').length || $target.is('input') || $target.is('textarea')) { - opts.preventFocus = true; - } else { - opts.preventFocus = false; - opts.mouseDownX = e.pageX; - opts.mouseDownY = e.pageY; - } - }); - - $messages.on('mousedown', function(e) { - if ($selectedSub && $selectedSub.is(':visible')) { - $selectedSub.slideUp('fast', subSlideUp); - clearInterval(opts.selectedSubLoop); - } - }); - - $('body').on('mouseup', function(e) { - if (!opts.preventFocus && - (e.pageX >= opts.mouseDownX - opts.clickTolerance && e.pageX <= opts.mouseDownX + opts.clickTolerance) && - (e.pageY >= opts.mouseDownY - opts.clickTolerance && e.pageY <= opts.mouseDownY + opts.clickTolerance) - ) { - opts.mouseDownX = null; - opts.mouseDownY = null; - runByond('byond://winset?mapwindow.map.focus=true'); - } - }); - - $messages.on('click', 'a', function(e) { - var href = $(this).attr('href'); - $(this).addClass('visited'); - if (href[0] == '?' || (href.length >= 8 && href.substring(0,8) == 'byond://')) { - runByond(href); - } else { - href = escaper(href); - runByond('?action=openLink&link='+href); - } - }); - - //Fuck everything about this event. Will look into alternatives. - $('body').on('keydown', function(e) { - if (e.target.nodeName == 'INPUT' || e.target.nodeName == 'TEXTAREA') { - return; - } - - if (e.ctrlKey || e.altKey || e.shiftKey) { //Band-aid "fix" for allowing ctrl+c copy paste etc. Needs a proper fix. - return; - } - - e.preventDefault() - - var k = e.which; - // Hardcoded because else there would be no feedback message. - if (k == 113) { // F2 - runByond('byond://winset?screenshot=auto'); - internalOutput('Screenshot taken', 'internal'); - } - - var c = ""; - switch (k) { - case 8: - c = 'BACK'; - case 9: - c = 'TAB'; - case 13: - c = 'ENTER'; - case 19: - c = 'PAUSE'; - case 27: - c = 'ESCAPE'; - case 33: // Page up - c = 'NORTHEAST'; - case 34: // Page down - c = 'SOUTHEAST'; - case 35: // End - c = 'SOUTHWEST'; - case 36: // Home - c = 'NORTHWEST'; - case 37: - c = 'WEST'; - case 38: - c = 'NORTH'; - case 39: - c = 'EAST'; - case 40: - c = 'SOUTH'; - case 45: - c = 'INSERT'; - case 46: - c = 'DELETE'; - case 93: // That weird thing to the right of alt gr. - c = 'APPS'; - - default: - c = String.fromCharCode(k); - } - - if (c.length == 0) { - if (!e.shiftKey) { - c = c.toLowerCase(); - } - runByond('byond://winset?mapwindow.map.focus=true;mainwindow.input.text='+c); - return false; - } else { - runByond('byond://winset?mapwindow.map.focus=true'); - return false; - } - }); - - //Mildly hacky fix for scroll issues on mob change (interface gets resized sometimes, messing up snap-scroll) - $(window).on('resize', function(e) { - if ($(this).height() !== opts.priorChatHeight) { - $('body,html').scrollTop($messages.outerHeight()); - opts.priorChatHeight = $(this).height(); - } - }); - - - /***************************************** - * - * OPTIONS INTERFACE EVENTS - * - ******************************************/ - - $('body').on('click', '#newMessages', function(e) { - var messagesHeight = $messages.outerHeight(); - $('body,html').scrollTop(messagesHeight); - $('#newMessages').remove(); - runByond('byond://winset?mapwindow.map.focus=true'); - }); - - $('#toggleOptions').click(function(e) { - handleToggleClick($subOptions, $(this)); - }); - - $('#toggleTheme').click(function(e) { - handleToggleClick($subTheme, $(this)); - }); - - $('#toggleFont').click(function(e) { - handleToggleClick($subFont, $(this)); - }); - - $('.sub, .toggle').mouseenter(function() { - opts.suppressSubClose = true; - }); - - $('.sub, .toggle').mouseleave(function() { - opts.suppressSubClose = false; - }); - - $('#setWhiteTheme').click(function() { - setTheme('white'); - savedConfig.stheme = 'white'; - }) - - $('#setDarkTheme').click(function() { - setTheme('dark'); - savedConfig.stheme = 'dark'; - }) - - $('#decreaseFont').click(function(e) { - savedConfig.fontsize = Math.max(parseInt(savedConfig.fontsize || 13) - 1, 1) + 'px'; - $messages.css({'font-size': savedConfig.fontsize}); - setCookie('fontsize', savedConfig.fontsize, 365); - internalOutput('Font size set to '+savedConfig.fontsize+'', 'internal'); - }); - - $('#increaseFont').click(function(e) { - savedConfig.fontsize = (parseInt(savedConfig.fontsize || 13) + 1) + 'px'; - $messages.css({'font-size': savedConfig.fontsize}); - setCookie('fontsize', savedConfig.fontsize, 365); - internalOutput('Font size set to '+savedConfig.fontsize+'', 'internal'); - }); - - $('#decreaseIcon').click(function(e) { - savedConfig.iconsize = Math.max((parseInt(savedConfig.iconsize) || 12) - 1, 1); - updateIconsSize($messages); - setCookie('iconsize', savedConfig.iconsize, 365); - opts.iconsize = savedConfig.iconsize; - internalOutput('Icon size set to '+savedConfig.iconsize+'', 'internal'); - }) - - $('#increaseIcon').click(function(e) { - savedConfig.iconsize = (parseInt(savedConfig.iconsize || 12) + 1); - updateIconsSize($messages); - setCookie('iconsize', savedConfig.iconsize, 365); - opts.iconsize = savedConfig.iconsize; - internalOutput('Icon size set to '+savedConfig.iconsize+'', 'internal'); - }) - - $('#decreaseLineHeight').click(function(e) { - savedConfig.lineheight = Math.max(parseFloat(savedConfig.lineheight || 1.2) - 0.1, 0.1).toFixed(1); - $("body").css({'line-height': savedConfig.lineheight}); - setCookie('lineheight', savedConfig.lineheight, 365); - internalOutput('Line height set to '+savedConfig.lineheight+'', 'internal'); - }); - - $('#increaseLineHeight').click(function(e) { - savedConfig.lineheight = (parseFloat(savedConfig.lineheight || 1.2) + 0.1).toFixed(1); - $("body").css({'line-height': savedConfig.lineheight}); - setCookie('lineheight', savedConfig.lineheight, 365); - internalOutput('Line height set to '+savedConfig.lineheight+'', 'internal'); - }); - - $('#togglePing').click(function(e) { - if (opts.pingDisabled) { - $('#ping').slideDown('fast'); - opts.pingDisabled = false; - } else { - $('#ping').slideUp('fast'); - opts.pingDisabled = true; - } - setCookie('pingdisabled', (opts.pingDisabled ? 'true' : 'false'), 365); - }); - - $('#saveLog').click(function(e) { - // Requires IE 10+ to issue download commands. Just opening a popup - // window will cause Ctrl+S to save a blank page, ignoring innerHTML. - if (!window.Blob) { - output('This function is only supported on IE 10 and up. Upgrade if possible.', 'internal'); - return; - } - - $.ajax({ - type: 'GET', - url: 'browserOutput_white.css', - success: function(styleData) { - var blob = new Blob(['Chat Log', $messages.html(), '']); - - var fname = 'SS13 Chat Log'; - var date = new Date(), month = date.getMonth(), day = date.getDay(), hours = date.getHours(), mins = date.getMinutes(), secs = date.getSeconds(); - fname += ' ' + date.getFullYear() + '-' + (month < 10 ? '0' : '') + month + '-' + (day < 10 ? '0' : '') + day; - fname += ' ' + (hours < 10 ? '0' : '') + hours + (mins < 10 ? '0' : '') + mins + (secs < 10 ? '0' : '') + secs; - fname += '.html'; - - window.navigator.msSaveBlob(blob, fname); - } - }); - }); - - $('#highlightTerm').click(function(e) { - if ($('.popup .highlightTerm').is(':visible')) {return;} - var termInputs = ''; - for (var i = 0; i < opts.highlightLimit; i++) { - termInputs += '
    '; - } - var popupContent = '
    String Highlighting
    ' + - '
    ' + - '
    Choose up to '+opts.highlightLimit+' strings that will highlight the line when they appear in chat.
    ' + - '
    ' + - termInputs + - '
    ' + - '
    ' + - '
    ' + - '
    '; - createPopup(popupContent, 250); - }); - - $('body').on('keyup', '#highlightColor', function() { - var color = $('#highlightColor').val(); - color = color.trim(); - if (!color || color.charAt(0) != '#') return; - $('#highlightColor').css('background-color', color); - }); - - $('body').on('submit', '#highlightTermForm', function(e) { - e.preventDefault(); - - var count = 0; - while (count < opts.highlightLimit) { - var term = $('#highlightTermInput'+count).val(); - if (term) { - term = term.trim(); - if (term === '') { - opts.highlightTerms[count] = null; - } else { - opts.highlightTerms[count] = term.toLowerCase(); - } - } else { - opts.highlightTerms[count] = null; - } - count++; - } - - var color = $('#highlightColor').val(); - color = color.trim(); - if (color == '' || color.charAt(0) != '#') { - opts.highlightColor = '#FFFF00'; - } else { - opts.highlightColor = color; - } - var $popup = $('#highlightPopup').closest('.popup'); - $popup.remove(); - - setCookie('highlightterms', JSON.stringify(opts.highlightTerms), 365); - setCookie('highlightcolor', opts.highlightColor, 365); - }); - - $('#clearMessages').click(function() { - $messages.empty(); - opts.messageCount = 0; - }); - - $('#fontInputSpan').hover(function() { - $('#fontInput').removeClass('hidden'); - }, function() { - $('#fontInput').addClass('hidden'); - }); - - $('#fontInput').change(function() { - var newFont = $('#fontInput').val() || 'Verdana, sans-serif'; - $('body').css({'font-family': newFont}); - setCookie('font', newFont, 365); - opts.font = newFont; - internalOutput('Font set to: '+newFont+'', 'internal'); - }); - - $('#toggleCombine').click(function(e) { - opts.messageCombining = !opts.messageCombining; - setCookie('messagecombining', (opts.messageCombining ? 'true' : 'false'), 365); - }); - - $('img.icon').error(iconError); - - - - - /***************************************** - * - * KICK EVERYTHING OFF - * - ******************************************/ - - runByond('?_src_=chat&proc=doneLoading'); - if ($('#loading').is(':visible')) { - $('#loading').remove(); - } - $('#userBar').show(); - opts.priorChatHeight = $(window).height(); -}); diff --git a/code/modules/goonchat/browserassets/js/jquery.min.js b/code/modules/goonchat/browserassets/js/jquery.min.js deleted file mode 100644 index ab28a24729b32..0000000000000 --- a/code/modules/goonchat/browserassets/js/jquery.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
    ",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; -if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
    a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:k.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m(" + + + + + "} + + +/obj/item/book/manual/military_law + name = "The Sol Code of Military Justice" + desc = "A brief overview of military law." + icon_state = "bookSolGovLaw" + author = "The Sol Central Government" + title = "The Sol Code of Military Justice" + +/obj/item/book/manual/military_law/Initialize() + . = ..() + dat = {" + + + + + + + + + + + "} + +/obj/item/book/manual/sol_sop + name = "Standard Operating Procedures" + desc = "SOP aboard the NES Sierra." + icon_state = "booksolregs" + author = "The Sol Central Government" + title = "Standard Operating Procedure" + +/obj/item/book/manual/sol_sop/Initialize() + . = ..() + dat = {" + + + + + + + + + + + "} + +/obj/item/book/manual/nt_sop + name = "NT Standard Operating Procedures" + desc = "SOP aboard the NSV Sierra." + icon = 'maps/sierra/icons/obj/library.dmi' + icon_state = "bookNTsop" + author = "Employee Materials" + title = "Standard Operating Procedure" + +/obj/item/book/manual/nt_sop/Initialize() + . = ..() + dat = {" + + + + + + + + + + + "} + +/obj/item/book/manual/nt_tc + name = "NT Threat Codes" + desc = "TC aboard the NSV Sierra." + icon = 'maps/sierra/icons/obj/library.dmi' + icon_state = "bookNTtc" + author = "Ship Rule Materials" + title = "Threat Codes" + +/obj/item/book/manual/nt_tc/Initialize() + . = ..() + dat = {" + + + + + + + + + + + "} + +/obj/item/folder/nt/rd + +/obj/item/folder/envelope/blanks + desc = "A thick envelope. The NT logo is stamped in the corner, along with 'CONFIDENTIAL'." + +/obj/item/folder/envelope/blanks/Initialize() + . = ..() + new/obj/item/paper/sierra/blanks(src) + +/obj/item/paper/sierra/blanks + name = "RE: Regarding testing supplies" + info = {" +
    КОНФИДЕЦИАЛЬНО +

    ИССЛЕДОВАТЕЛЬКИЙ ДЕПАРТАМЕНТ НАНОТРЕЙЗЕН

    + +
    + ОТ: Swadian Barwuds
    + КОМУ: Исследовательскому Директору NSV Sierra
    + А ТАКЖЕ: Агенту Внутренних Дел NSV Sierra
    + ТЕМА: Дополнительные Материалы (пересмотр)
    +
    + Я пересмотрел ваш отчет о проведенных экспериментах и запрос о более совершенных тестовых материалов, РД.
    + Мы склонны ожидать от вашего проекта только лучшего - особенно в свете того, что этому /"лучше/" следует наступить как можно скорее. Депарамент Аналитики подсчитал, что на данный момент, потениальная прибыль от проведенных на судне исследований недостаточна для покрытия всех расходов.
    + В РНД вы можете найти подсобку с подписью 'Aux Custodial Supplies'. Там находятся ваши новые тестовые материалы - 4 человека из пробирок с рядом отсутствующих высших нервными функций. Наш департамент по вопросам законодательства не обнаружил ничего нелегальнго в том, чтобы использовать их в медицинских опытов для более точных результатов.
    + Они помещены в специально мешки с продвинутой системой поддержания жизни - их не нужно кормить, поить или выгуливать. Если вам нужны образцы - берите их.
    + Сейчас не время для того, чтобы проводить долгие научные изыскания, РД. Мы ждем от вас впечатляющих результатов в ближайшем будущем.
    + Swadian Barwuds
    + "} + +/obj/item/folder/envelope/captain + desc = "A thick envelope. The NT logo is stamped in the corner, along with 'TOP SECRET - SIERRA UMBRA'." + +/obj/item/folder/envelope/captain/Initialize() + . = ..() + var/memo = {" +
    СЕКРЕТНО
    КОДОВОЕ СЛОВО: СЬЕРРА
    +

    ЦЕНТРАЛЬНОЕ КОМАНДОВАНИЕ

    + +
    + ОТ: Swadian Barwuds
    + КОМУ: Капитану NSV Sierra
    + ТЕМА: Общий Приказ
    +
    + Капитан,
    + Ваше судно в текущий вылет должно посетить следующие звёздные системы. Имейте ввиду, что ваши ресурсы ограничены; распорядитесь временем рационально. +
  • [generate_system_name()]
  • +
  • [generate_system_name()]
  • +
  • [generate_system_name()]
  • +
  • [GLOB.using_map.system_name]
  • +
  • [generate_system_name()]
  • +
  • [generate_system_name()]
  • +
  • [generate_system_name()]
  • +
  • [generate_system_name()]
  • +
  • Locutus System
  • +
    + Приоритетной целью являются: артефакты, неизвестные формы жизни и сигналы неизвестного происхождения.
    + Ни одна из этих систем не является опознанной официальными организациями, по этому у вас имеется полное право на исследование и демонтаж всех заброшенных объектов по пути.
    + В случае обнаружения мира с богатыми минеральными залежами, форонового гиганта или просто удобного для колонизации, составьте отчет и оставьте на планете маячок дальней связи.
    + Ни одно из государств не действует на этих территориях на официальном уровне. В случае обнаружения сигнала бедствия без наличия суден ТКК или ПСС в секторе, не игнорируйте их. Спасенный персонал представляет исключительную дипломатическую ценность.
    + Сообщайте о всех незарегистрированных или исключительных находках при перемещении в системах.
    + + Swadian Barwuds

    + This paper has been stamped with the stamp of Central Command. + "} + new/obj/item/paper/important(src, memo, "Standing Orders") + + new/obj/item/paper/sierra/umbra(src) + +/obj/item/folder/envelope/rep + desc = "A thick envelope. The NT logo is stamped in the corner, along with 'TOP SECRET - SIERRA UMBRA'." + +/obj/item/folder/envelope/rep/Initialize() + . = ..() + new/obj/item/paper/sierra/umbra(src) + +/obj/item/paper/sierra/umbra + name = "UMBRA Protocol" + icon = 'maps/sierra/icons/obj/uniques.dmi' + icon_state = "paper_words" + info = {" +
    СОВЕРШЕННО СЕКРЕТНО
    КОДОВОЕ СЛОВО: ТЕНЬ
    +

    ЦЕНТРАЛЬНОЕ КОМАНДОВАНИЕ

    + +
    + ОТ: Kim Taggert, операционный директор НТ
    + КОМУ: Капитану NSV Sierra
    + А ТАКЖЕ: Агенту Внутренних Дел NSV Sierra
    + ТЕМА: Протокол ТЕНЬ
    +
    +
  • Это - небольшое дополнение к стандартным процедурам. В отличии от остальных СОП, данная процедура не должна оглашаться персоналу судна. Данный протокол необходим для избежания неприятных казусов после миссии.
  • +
  • Процедура может быть начата только после получения сообщения от ЦК по защищенному источнику. Отправитель может не называть себя, но у вас не должно быть проблем с подтверждением причастности участника к процедуре. Мы надеемся.
  • +
  • Сигналом для инициации процедуры является кодовая фраза 'Спокойного вечера, подготовитель' использованная без иных слов в предложении. Вам не нужно отправлять подтверждение о начале ЦК.
  • +
  • Информация об экспедиционных находках, которые представляют угрозу НаноТрейзен как организации, должна быть отправлена на ЦК под кодовым именем ТЕНЬ. Только капитан и АВД могут иметь полный доступ к полуенной информации. Главы могут обладать необходимым для работы минимумом, если информация их касается.
  • + +
  • Конфидециальность данной информации имеет наивысший приоритет. Каждое недоверенное лицо, которому станет известно о полученных данных, не должно покидать судно до и после прибытия в указанную точку вне конвоирования сотрудниками департамента Защиты Активов.
  • +
  • Все устройства способные передавать информацию на межзвездном радиусе должны быть конфискованы из частного пользования.
  • +
  • Вне зависимости от оставшихся систем в вашем основном приказе, вы должны как можно скорее добраться до Сектора Никс, Административной Станции НаноТрейзен 'Crescent'. С вами свяжутся по прибытию. Не совершайте остановок по пути без критической необходимости. + +
    + Не смотря на всю жесткость процедуры, я уверяю вас, что это - обычная предосторожность для обеспечения личной безопасности персонала и корпоративных активов. Продолжайте миссию до в обычном порядке. + Всего наилучшего, Kim.

    + This paper has been stamped with the stamp of Central Command. + "} diff --git a/maps/sierra/items/mech.dm b/maps/sierra/items/mech.dm new file mode 100644 index 0000000000000..84165447ad33c --- /dev/null +++ b/maps/sierra/items/mech.dm @@ -0,0 +1,31 @@ + +/mob/living/exosuit/premade/light/exploration + name = "exploration mech" + desc = "It looks a bit charred." + +/mob/living/exosuit/premade/light/exploration/Initialize() + if(!body) + body = new /obj/item/mech_component/chassis/pod(src) + body.color = COLOR_GUNMETAL + if(!legs) + legs = new /obj/item/mech_component/propulsion/tracks(src) + legs.color = COLOR_GUNMETAL + if(!arms) + arms = new /obj/item/mech_component/manipulators/powerloader(src) + arms.color = COLOR_PURPLE + + . = ..() + + //Damage it + var/list/parts = list(arms,legs,head,body) + var/obj/item/mech_component/damaged = pick(parts) + damaged.take_burn_damage((damaged.max_damage / 4 ) * MECH_COMPONENT_DAMAGE_DAMAGED) + if(prob(33)) + parts -= damaged + damaged = pick(parts) + damaged.take_burn_damage((damaged.max_damage / 4 ) * MECH_COMPONENT_DAMAGE_DAMAGED) + +/mob/living/exosuit/premade/light/exploration/spawn_mech_equipment() + install_system(new /obj/item/mech_equipment/light(src), HARDPOINT_HEAD) + install_system(new /obj/item/mech_equipment/clamp(src), HARDPOINT_RIGHT_HAND) + install_system(new /obj/item/mech_equipment/mounted_system/taser/plasma(src), HARDPOINT_LEFT_HAND) diff --git a/maps/sierra/items/modular_computer.dm b/maps/sierra/items/modular_computer.dm new file mode 100644 index 0000000000000..6e7cfd033a368 --- /dev/null +++ b/maps/sierra/items/modular_computer.dm @@ -0,0 +1,197 @@ +/obj/item/modular_computer/pda/wrist + name = "wrist computer" + desc = "A wrist-mounted modular personal computer. Very stylish." + icon = 'maps/sierra/icons/obj/wrist_computer.dmi' + icon_state = "wc_base" + color = COLOR_GUNMETAL + item_state_slots = list(slot_wear_id_str = "wc_base") + light_color = COLOR_GREEN + var/stripe_color + + slot_flags = SLOT_ID | SLOT_BELT + + icon_state_unpowered = "wc_base" + item_icons = list(slot_wear_id_str = 'maps/sierra/icons/mob/wrist_computer.dmi') + item_state = "wc_base" + + interact_sounds = list('maps/sierra/sound/items/ui_pipboy_select.wav') + +/obj/item/modular_computer/pda/wrist/get_mob_overlay(mob/user_mob, slot) + var/image/ret = ..() + var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) + if(slot == slot_wear_id_str) + if(enabled) + var/image/I = image(icon = ret.icon, icon_state = "wc_screen") + I.appearance_flags |= RESET_COLOR + I.color = (bsod || os.updating) ? "#0000ff" : "#00ff00" + ret.AddOverlays(I) + else + ret.AddOverlays(image(icon = ret.icon, icon_state = "wc_screen_off")) + if(stripe_color) + var/image/I = image(icon = ret.icon, icon_state = "wc_stripe") + I.appearance_flags |= RESET_COLOR + I.color = stripe_color + AddOverlays(I) + return ret + +/obj/item/modular_computer/pda/wrist/on_update_icon() + var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) + icon_state = icon_state_unpowered + ClearOverlays() + + if(os) + var/image/_screen_overlay = os.get_screen_overlay() + AddOverlays(overlay_image(_screen_overlay.icon, _screen_overlay.icon_state, flags = RESET_COLOR)) + + if(enabled) + set_light(light_strength, 0.2, l_color = (bsod || os.updating) ? "#0000ff" : light_color) + + if(enabled && os) + var/image/_screen_overlay = os.get_screen_overlay() + AddOverlays(emissive_appearance(_screen_overlay.icon, _screen_overlay.icon_state)) + else + set_light(0) + + if(stripe_color) + var/image/I = image(icon = icon, icon_state = "wc_stripe") + I.appearance_flags |= RESET_COLOR + I.color = stripe_color + AddOverlays(I) + + var/mob/living/carbon/human/H = loc + if(istype(H) && H.wear_id == src) + H.update_inv_wear_id() + +/obj/item/modular_computer/pda/wrist/AltClick(mob/user) + if(!CanPhysicallyInteract(user) || !card_slot?.stored_card) + return ..() + + card_slot.eject_id(user) + return TRUE + +/obj/item/modular_computer/pda/wrist/attack_hand(mob/user) + if(loc == user) + if(user.incapacitated() || user.restrained()) + return + var/mob/living/carbon/human/H = user + if(istype(H) && src == H.wear_id) + return attack_self(user) + return ..() + +/obj/item/modular_computer/pda/wrist/MouseDrop(obj/over_object) + if(ishuman(usr)) + if(loc != usr) return + if(usr.restrained() || usr.incapacitated()) return + if (!usr.unEquip(src)) return + usr.put_in_hands(src) + src.add_fingerprint(usr) + return + return ..() + +// wrist box +/obj/item/storage/box/wrist + name = "box of spare wrist computers" + desc = "A box of spare wrist microcomputers." + icon_state = "pda" + startswith = list(/obj/item/modular_computer/pda/wrist = 5) + +// wrist types + +/obj/item/modular_computer/pda/wrist/medical + color = COLOR_OFF_WHITE + stripe_color = COLOR_BLUE_GRAY + +/obj/item/modular_computer/pda/wrist/chemistry + color = COLOR_OFF_WHITE + stripe_color = COLOR_BLUE_GRAY + +/obj/item/modular_computer/pda/wrist/engineering + stripe_color = COLOR_ORANGE + +/obj/item/modular_computer/pda/wrist/security + stripe_color = COLOR_MAROON + +/obj/item/modular_computer/pda/wrist/forensics + stripe_color = COLOR_MAROON + +/obj/item/modular_computer/pda/wrist/science + stripe_color = COLOR_RESEARCH + +/obj/item/modular_computer/pda/wrist/heads + color = PIPE_COLOR_BLACK + stripe_color = COLOR_BLUE_GRAY + +/obj/item/modular_computer/pda/wrist/heads/paperpusher + stored_pen = /obj/item/pen/fancy + +/obj/item/modular_computer/pda/wrist/heads/hop + stripe_color = COLOR_SKY_BLUE + +/obj/item/modular_computer/pda/wrist/heads/hos + stripe_color = COLOR_MAROON + +/obj/item/modular_computer/pda/wrist/heads/ce + color = COLOR_OFF_WHITE + stripe_color = COLOR_ORANGE + +/obj/item/modular_computer/pda/wrist/heads/cmo + color = COLOR_OFF_WHITE + stripe_color = COLOR_BLUE_GRAY + +/obj/item/modular_computer/pda/wrist/heads/rd + stripe_color = COLOR_RESEARCH + +/obj/item/modular_computer/pda/wrist/captain + color = PIPE_COLOR_BLACK + stripe_color = COLOR_YELLOW + +/obj/item/modular_computer/pda/wrist/ert + color = PIPE_COLOR_BLACK + stripe_color = COLOR_YELLOW + +/obj/item/modular_computer/pda/wrist/cargo + stripe_color = COLOR_PALE_YELLOW + +/obj/item/modular_computer/pda/wrist/syndicate + color = PIPE_COLOR_BLACK + stripe_color = COLOR_MAROON + +/obj/item/modular_computer/pda/wrist/roboticist + stripe_color = COLOR_ORANGE + +/obj/item/modular_computer/pda/wrist/explorer + color = PIPE_COLOR_BLACK + stripe_color = COLOR_INDIGO + +/obj/item/modular_computer/pda/wrist/grey + color = COLOR_GRAY + +/obj/item/modular_computer/pda/wrist/lila + color = null + icon_state = "wrist-lila" + icon_state_unpowered = "wrist-lila" + +/obj/item/modular_computer/pda/wrist/lila/black + icon_state = "wrist-lila-black" + icon_state_unpowered = "wrist-lila-black" + +// Laptop icon override + +/obj/item/modular_computer/laptop + icon = 'maps/sierra/icons/obj/modular_laptop.dmi' + +/obj/item/modular_computer/laptop/verb/rotatelaptop() + set name = "Rotate laptop" + set category = "Object" + set src in view(1) + + if(usr.stat == DEAD) + if(!round_is_spooky()) + to_chat(src, "The veil is not thin enough for you to do that.") + return + + src.set_dir(turn(src.dir, -90)) + +/obj/item/modular_computer/laptop/update_verbs() + ..() + verbs |= /obj/item/modular_computer/laptop/verb/rotatelaptop diff --git a/maps/sierra/items/papers.dm b/maps/sierra/items/papers.dm new file mode 100644 index 0000000000000..0303669eea83e --- /dev/null +++ b/maps/sierra/items/papers.dm @@ -0,0 +1,112 @@ +/obj/item/paper/important //just a placeholder for messages from Central Command + icon = 'maps/sierra/icons/obj/uniques.dmi' + icon_state = "paper_words" + +//just for a better management +//don't use New(), it breaks ya + +/obj/item/paper/sierra + name = "private room" + info = "
    NSV Sierra
    Приватная комната
  • Вы можете попросить у бармена одну из разноцветных лампочек для своей комнаты.
  • Доступные цвета: тёмно-фиолетовый, тёмно-розовый, тёмно-красный, синий, зеленый, стандартный.
  • Пожалуйста, не ломайте лампочки.
  • Бармен может снять блокировку с комнаты в случае необходимости - доступ к внешней кнопки есть только у него, ГП и капитана.
  • Старайтесь не занимать комнату на продолжительное время без уведомления бармена.
  • Не используйте кабинки для сна.
  • Не пачкайте мебель.
    Наслаждайтесь приятной компанией.
    NT Support Division

    This paper has been stamped by the Central Command." + icon = 'maps/sierra/icons/obj/uniques.dmi' + icon_state = "paper_words" + +/obj/item/paper/sierra/bar_permit + name = "shotgun permit" + info = "
    NSV Sierra
    Разрешение на ношение оружия

    Действующий бармен судна имеет право владеть и использовать двуствольный дробовик.
    Условия:
  • Бармену запрещено выносит дробовик за пределы бара.
  • Бармен может использовать только патроны типа illumination (дезориентирующие).
  • При возникновении конфликта в пределах бара, бармен обязан вызвать охрану и попытаться утихомерить конфликтующих словами. Оружие может быть использовано только против 'буйных клиентов'.
  • Охрана имеет право конфисковать дробовик за нарушение любого из условий.
    NT Support Division

    This paper has been stamped by the Central Command." + +/obj/item/paper/sierra/teleport + name = "teleport usage" + info = "
    NSV Sierra
    Продвинутое использование телепорта

    Участились жалобы на повышенную степень консервативности среди командования судна. Мы одобряем использование проверенных методов, однако, когда на кону стоит успех миссии или выполнение служебных обязанностей - настоятельно рекомендуется начать использовать все доступные ресурсы для достижения цели.
    Примеры использования телепорта:
  • Возвращение потерянных челноков.
  • Отправка сотрудников на удалённые рабочие места, такие как случайно встреченный в процессее полета шахтерский аванпост или отправленный на экспедицию соответствующий челнок. Не допускайте безработицу среди экспедиционного и добывающего персонала - заставляйте их снаряжаться и отправляться на вылетевший челнок через телепорт.

  • Отдел Исследований и Разработок провёл подсчеты, которые позволяют называть установленный на судне телепорт как пригодный и безопасный для частого использования. Помните об этом.
    NT Support Division

    This paper has been stamped by the Central Command." + +/obj/item/paper/sierra/medical_blood + name = "blood problem" + info = "
    NSV Sierra
    Донорство крови

    В условиях полугодовой экспедиции без дозаправки и искючительной дороговизны нанокрови, в целях снижения затрат медицинский персонал должен использовать кровь первой группы отрицательного резус-фактора, собираемую с доноров среди персонала. Награда за данную процедуру не предусмотрена регуляциями, из-за чего придумывание поощрения всецело лежит на Медицинском департаменте.
    Помните, что из-за дороговизны нанокрови, её использование допускается лишь в экстренных ситуациях.
    Была предложена возможность снижения срок заключения в бриге с помощью донорства крови. Рекомендуется обсуждение со старшим сотрудником Охранного департамента
    2 упаковки с нанокровью хранятся на складе.
    NT Support Division

    This paper has been stamped by the Central Command." + +/obj/item/paper/sierra/engineering_engines + name = "enginees" + info = "
    NSV Sierra
    Двигатель HG-MSE-2561b

    Двигатели HG-MSE-2561b предназначены для полетов на дистанции в пределах одного космического сектора. Основной отличительной особенностью системы является независимость каждой турбины, что обеспечивает повышенную надежность и эффективность, тем самым позволяя судну маневрировать даже при единственном работоспособном двигателе.
    Эксплуатация

    1) Открыть клапаны для подачи газа в камеру сгорания.
    У нас они активируются удаленно, кнопки над приборной панелью - активируйте все 4
    2) Подождите 10 секунд, дав топливу наполнить камеру. По истечению времени, активируйте запальник.
    Кнопка справа от панели.
    3) После начала реакции горения, отключите клапаны.
    Нажмите на кнопки по центру снова. После этого, двигатели начнут прогреваться.
    Техническая информация
  • Не оставляйте подачу газа в камеру активной на продолжительное время без постоянной работы двигателей (например, во время активного маневрирования) - переборки могут расплавиться от температуры.
  • Температура плавления переборок: 12000K, температура плавления фороновых стекл: 4200K
  • В случае достижения опасной для переборок температуры, откройте ставни для космирования газа. Кнопки на стене справа от зажигания
    NT Support Division

    This paper has been stamped by the Central Command." + +/obj/item/paper/sierra/engineering_comms + name = "telecommunications" + info = "
    NSV Sierra
    Телекоммуникации

    Телекоммуникационная станция в носу корабля обеспечивает радиосвязь на судне. Kappa Communication с помощью своих пограничных спутников поддерживает удаленную связь с судном через квантовое реле (Emergency Bluespace Relay). Таким образом, Центральное Комадование может получать сообщения от судна до тех пор, пока реле сохраняет свою работоспособность
    Эксплуатация
    Инженерная команда настроила оборудование перед вылетом, из-за чего действующему технику настоятельно НЕ рекомендуется проводить какие-либо манипуляции с настройками во избежание коллапса системы связи.
    Техническая информация
  • В случае повреждения серверов или иного оборудования, требуется провести ремонт с помощью размещенных на складе плат. Возможен дозаказ с помощью отделов Исследований или Снабжения.
  • Запасная плата от квантового передатчика находится на защищенном складе. В случае уничтожения телекоммуникаций, передатчик должен быть установлен в защищенном месте в пределах судна с последующим уведомлением ЦК о ЧП.
    NT Support Division

    This paper has been stamped by the Central Command." + +/obj/item/paper/sierra/engineering_SMairlock + name = "engine access" + info = "
    NSV Sierra
    Шлюзовая Система


    Инженерная команда произвела установку новой шлюзовой системы, которая призвана упростить вход в повреждённый отсек с суперматерии без использования атмосферных щитов.
    Эксплуатация

    Выполняйте ниже приведённые инструкции с максимальной точностью, любое отклонение от них может привести к плачевным последствиям:

  • Если вам необходимо войти к суперматерии, то циклируйте шлюз внутрь.

  • Если вам необходимо выйти, то используете опцию \"Purge\".


    Техническая информация
  • Вмешательство в шлюзовую систему настоятельно НЕ рекомендуется. Система является самодостаточной и не нуждается в обслуживании. При любых поломках, следует сообщить об этом Старшему или Главному инженеру.
    NT Support Division

    This paper has been stamped by the Central Command." + +/obj/item/paper/sierra/showers + name = "private showers" + info = "
    NSV Sierra
    Приватные душевые кабинки

    Отдел Аналитики прислушался к жалобам экипажа на общую душевую и порекомендовал инженерной команде оборудовать помещение с приватными душевыми кабинками.
    Техника безопасности
    В следствии воздействия продолжительных космических перелетов, криосонных установок и иных источников стресса, настоятельно не рекомендуется запираться в душе и отключать интерком. Охрана, по возможности, проходя мимо душевых должна спрашивать, всё ли впорядке у персонала внутри, дабы оказаться медицинскую помощь в случае необходимости. Открывать шлюз в кабинку и только затем спрашивать - нарушение корпоративных регуляций.
    NT Support Division

    This paper has been stamped by the Central Command." +/* unused +/obj/item/paper/sierra/bridge_turrets + name = "bridge turrets" + info = "
    NSV Sierra
    Внешние туррели

    Начальство выражает беспокойство в следствии установки внешних туррелей по периметру обзорной части мостика.
    Техника безопасности
    Перед обслуживанием мостика со стороны космического пространства туррели должны быть обязательно отключены. Это же касается процедуры ремонта. В остальное время, туррели должны быть активны для защиты от нежелательных интервентов и неопознанных космических тел. Туррели установлены таким образом, что персонал мостика не должен замечать лазеры.
    NT Support Division

    This paper has been stamped by the Central Command." +*/ +/obj/item/paper/sierra/compactor + name = "compactor" + info = "Обслуживание гидравлического пресса
    Краткая инструкция по эксплуатации:
    1) Не помещайте крупные объекты в камеру - поршни выйдут из строя.
    2) В случае поломки одного из поршей (лампочка будет гореть красным) - пройдите в секцию обслуживания поршней, отверткой открутите панель на неисправном поршне, с помощью гаечного ключа выпустите давление из главной камеры. Не забудьте поставить всё на место по завершению процедуры.
    3) Оденьте рабочие перчатки и противогаз при обслуживании поршня - возможна утечка горячего воздуха.
    " + +/obj/item/paper/sierra/captain_fax + name = "\improper NAS Crescent - Mission Progress" + info = "

    Nanotrasen Quantum Uplink Signed Message
    Encryption key: 64448722572acc464927240150d6ae5d
    Challenge: 56a40c5ba

    Капитан.
    Наше общее Высшее начальство выражает своё недовольство по поводу успехов Вашей экспедиции к Сигналу. Отдел Аналитики сделал расчеты, судя по которым, Ваше судно уже должно было выйти из тех 'долгов с 6 нулями', как выражаются некоторые мои коллеги.
    Переоборудование Вашего судна заняло достаточно много средств, чтобы начинать искать денежные или менее материальные блага во всём, что Вы можете встретить на своём пути.
    Мой небольшой совет - если вы видите источник выгоды, вгрызайтесь в него зубами, но добейтесь того, чтобы источник был таковым. Не важно какая - политическая, экономическая или даже научная. Нам нужны результаты.
    Отвечать на это сообщение не требуется, пока у Вас нет достаточно весомых достижений за смену.
    Займитесь работой, капитан.
    Swadian Barwuds
    This paper has been stamped by the Central Command.
    " + +//sierra Unstumped. Just for a better managament + +/obj/item/paper/sierrau + name = "crumpled note" + info = "Д.Брэдсон, мы выполнили вашу просьбу и подготовили подходящее для вас убежище, список оборудования и карта тайников находится в папке D4. Мы получили ваше письмо и смеем вас заверить в надёжности данного варианта, мы гантируем что они не будут искать вас на экпедиционном судне NT. Прочую информацию вы сможете найти в документе C3" + +/obj/item/paper/sierrau/joke + name = "strange paper" + info = "Привет! Кем бы ты не был у тебя точно есть глаза раз ты читаешь эту записку, так вот! Вернёмся к делу, если у тебя есть глаза значит ты видишь и этот новенький лазерный карабин заточённый в стеклянную камеру, интересно ты бы хотел его потрогать? А может даже стать его хозяином? Знаешь, мне он не нужен, завтра меня всё равно увольняют (если ты это читаешь то это значит что я уже давно уволен и прожигаю последние деньги на венерианских курортах), поэтому думаю мне не успеет прилететь от ГСБ за его потерю, и завтра всё равно завезут новые карабины, с системой авторизации, да. Исходя из всего этого ты можешь точно быть уверен в том что о нём все забудут, а, прости, продолжим, ты бы хотел стать обладателем данного прекрасного образца современного вооружения? Да? Если да то он тут, за стеклом, разбей стекло и достань его. Что? Ты думал всё будет так просто? Нет, я отдам свою Алевтину только сильному человеку способному сломать тоненькое стёклышко, или ксеносу, прости если обидел, я на самом деле не против ксеносов, да, да и мы сами ксеносы.. хе-хе Ах да, её зовут Алевтина, мне правда ещё не довелось стрелять из неё, но я уверен у тебя (кем бы ты не был) мой дорогой читатель всё ещё впереди, только спаси её из заточения.. Ах и ещё один момент, если ты всё таки оказался слабой и хрупкой девушкой (или ты прыщавый программист-задохлик что постоянно сидит в телекомах) и так и не смог(ла) сломать это стекло то оставь или верни эту записку на место, пусть более достойный заберёт её. Может я поступаю несправедливо, но я не хочу отдавать ОПАСНОЕ оружие школьнику которому едва исполнилось 19 лет и его наняли чтобы он отчищал техи от дерьма (и речь тут не о уборщиках а о практикантах-недоинженерах), либо бабе, место которой на кухне. А если ты не первое и не второе то я даже не знаю кто ты, может маломощный старик? А таких берут на Сиерру? Хотя о чём речь? Таким задохликам не то что не должен достаться карабин, им даже в космосе находится не стоит." + +/obj/item/paper/sierrau/merchant + name = "novice help" + info = "
    Помощь новичку

    Вступление

    Торговцы бывают разными. В основном, самым важным критерием стоит то, насколько хорошо развито красноречие. В случае с вашим небольшим судном, маловероятно, что вам удастся кому-то угрожать - необходимо искать общий язык.

    Вежливые торговцы

    Как бы вы не презирали экипаж, запомните - ведите себя по-взрослому, в меру серьезно, без излишней фамильярности, но дружелюбно. Не идите на конфликт со Службой Безопасности и тем более командованием, если не хотите провести неопределенный срок в ожидании нового судна в зоне действия сенсоров.

    Наценка

    Практически все товары, что находятся на вашей базе достались вам путём купли-продажи. Цена, выдававемая самим сканером, является ценой на рынке в среднем. Никто не будет сильно злиться из-за того, что вы накинете 20, 40 или даже 100 процентов к изначальной цене (особенно, если у покупателя нет сканера) - прикидывайте, насколько экипажу нужна та или иная вещь и сколько они готовы отдать за неё.

    Закон

    Никто не имеет права обыскивать ваше судно. Никто не имеет права заходить на судно без вашего разрешения. Никто не имеет права задерживать вас за то, что вы подлетели к шлюзу - другое дело, если вы соверште незаконную стыковку (в лучшем случае, вас попросят отстыковаться).

    Проникновение

    Чужой экипаж не имеет права проникать на ваш корабль без вашего разрешения. Вы не имеете права проникать на корабль без разрешения экипажа - помните, что если вы торгуете с крупным судном, то на нём, скорее всего, есть вооруженная охрана, которая может расстрелять вас за взлом внешнего шлюза.
    " + +/obj/item/paper/sierrau/liason_note + name = "note" + info = {" + В случае угрозы захвата - пить таблетку. Плен - не вариант.
    + H.B.
    + "} + +/obj/item/paper/sierrau/cargo_revision + info = "
    Департамент снабжения
    \ +
    Инвентаризация
    \ + \ +
  • Запасные сканеры (шахтерский, атмосферный, медицнский, ксенобиолоигческий, T-ray, \ + серийных номеров оружия, вирусологический, торговый, аутоптисческий, ботанический) (1) \ +
  • GPS маячки (2) \ +
  • Маячки для посадки шаттлов (2) \ +
  • Запасные медицинский принадлежности в коробках (мешки для тел, шприцы, стирильные маски+перчатки, \ + пакеты с кровью, мензурки) (1) \ +
  • Нанопаста (2) \ +
  • Сканнер для роботов и протезов (1) \ +
  • Портативный холодильник (1) \ +
  • Авто-компрессор (1)\ +
  • Медицинские каталки (2)\ +
  • Стазисные мешки (2)\ +
  • Спасательные мешки (2)\ +
  • Дефибриллятор (1)\ +
  • Аптечки (травмы, токсины, асфиксиксия, ожоги, обычная) (1)\ +
  • Запасной хирургический набор (1)\ +
  • Неизсветный хирургический инструмент (спросить что это и стереть)\ +
  • Форон в листах (30)\ +
  • Канистры с водородом (4)\ +
  • Стекло (100)\ +
  • Пластик (100)\ +
  • Укреп.стекло (100)\ +
  • Алюминий (50)\ +
  • Cталь (150)\ +
  • Пласталль (50)\ +
  • Осмиумо-корбидовая пласталль (20)\ +
  • Дерево - много. Найти того, кто разбирается в видах\ +
  • Противорадиационные костюмы + счетчики гейгера (2)\ +
  • Костюмы биологический защиты (3)\ +
    P.S: Разобрать те ящики с барахлом" + +/obj/item/paper/sierra/bsd + name = "bluespace drive usage" + info = "
    NSV Sierra
    Эксплуатация двигателя блюспейса

    Стандартный двигатель блюспейса (в дальнейшем БСД), на момент написания данной документации (2301) всё ещё является условно-экспериментальным устройством для перемещения космических объектов на удаленные расстояния за короткий промежуток времени. О любых необычных для работы оборудования явлениях следует сообщать Директору Исследований или Старшему Инженеру - в зависимости от характера феномена.

    Для перекалибровки БСД необходимо провести следущие действия:
  • открутить болты гаечным ключом;
  • монитровкой убрать крышку в сторону;
  • кусачками обрезать и убрать обгоревшие провода;
  • заменить обгоревшие провода новыми;
  • поднести мультиметр к (светящейся зелёной стенке внутри) и подождать несколько секунд;
  • закрыть крышку монтировкой;
  • прикрутить болты гаечным ключом.

    Во время обслуживания БСД в обязательном порядке требуется:
  • Быть одетым в стандартный набор радиационный защиты, мезонные очки (должны быть включены) и изоляционные перчатки.
  • Не быть под воздействием алкогольных или психотропных препаратов.
  • Не проводить в камере более двух минут.
  • В случае тошноты, рвоты, зуда, галлюцинаций, головокружения или боли - немедленно покинуть камеру.
    NT Support Division

    This paper has been stamped by the Central Command." diff --git a/maps/sierra/items/pouches.dm b/maps/sierra/items/pouches.dm new file mode 100644 index 0000000000000..54ece2a71b43a --- /dev/null +++ b/maps/sierra/items/pouches.dm @@ -0,0 +1,19 @@ +/obj/item/clothing/accessory/storage/pouches + desc = "A collection of black pouches that can be attached to a plate carrier. Carries up to three items." + slots = 3 STORAGE_SLOTS + + +/obj/item/clothing/accessory/storage/pouches/blue + desc = "A collection of blue pouches that can be attached to a plate carrier. Carries up to three items." + + +/obj/item/clothing/accessory/storage/pouches/navy + desc = "A collection of navy blue pouches that can be attached to a plate carrier. Carries up to three items." + + +/obj/item/clothing/accessory/storage/pouches/green + desc = "A collection of green pouches that can be attached to a plate carrier. Carries up to three items." + + +/obj/item/clothing/accessory/storage/pouches/tan + desc = "A collection of tan pouches that can be attached to a plate carrier. Carries up to three items." diff --git a/maps/sierra/items/rigs.dm b/maps/sierra/items/rigs.dm new file mode 100644 index 0000000000000..9d9ff3028130b --- /dev/null +++ b/maps/sierra/items/rigs.dm @@ -0,0 +1,372 @@ +///////////////////////// +//~~Bless this mess~~// +///////////////////// + +/* + * BASE TYPE + */ +/obj/item/rig/command + name = "command HCM" + suit_type = "command hardsuit" + icon = 'maps/torch/icons/obj/uniques.dmi' + desc = "A specialized hardsuit rig control module issued to command staff of the Expeditionary Corps and their peers." + icon_state = "command_rig" + armor = list( + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_SMALL, + laser = ARMOR_LASER_MINOR, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED, + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_SMALL + ) + online_slowdown = 0.50 + offline_slowdown = 2 + offline_vision_restriction = TINT_HEAVY + + chest_type = /obj/item/clothing/suit/space/rig/command + helm_type = /obj/item/clothing/head/helmet/space/rig/command + boot_type = /obj/item/clothing/shoes/magboots/rig/command + glove_type = /obj/item/clothing/gloves/rig/command + + req_access = list(access_heads) // Bridge + allowed = list( + /obj/item/gun, + /obj/item/ammo_magazine, + /obj/item/device/flashlight, + /obj/item/tank, + /obj/item/device/suit_cooling_unit, + /obj/item/storage/secure/briefcase + ) + +/obj/item/clothing/head/helmet/space/rig/command + light_overlay = "helmet_light_dual" + icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' + item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') + camera = /obj/machinery/camera/network/command + // SIERRA TODO: port SPECIES_TAJARA, SPECIES_RESOMI + species_restricted = list(SPECIES_HUMAN, SPECIES_IPC/*, SPECIES_TAJARA, SPECIES_RESOMI*/) // No available icons for aliens + +/obj/item/clothing/suit/space/rig/command + icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' + item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') + // SIERRA TODO: port SPECIES_TAJARA, SPECIES_RESOMI + species_restricted = list(SPECIES_HUMAN, SPECIES_IPC/*, SPECIES_TAJARA, SPECIES_RESOMI*/) + +/obj/item/clothing/shoes/magboots/rig/command + icon = 'maps/torch/icons/obj/obj_feet_solgov.dmi' + item_icons = list(slot_shoes_str = 'maps/torch/icons/mob/onmob_feet_solgov.dmi') + // SIERRA TODO: port SPECIES_TAJARA, SPECIES_RESOMI + species_restricted = list(SPECIES_HUMAN, SPECIES_IPC/*, SPECIES_TAJARA, SPECIES_RESOMI*/) + +/obj/item/clothing/gloves/rig/command + icon = 'maps/torch/icons/obj/obj_hands_solgov.dmi' + item_icons = list(slot_gloves_str = 'maps/torch/icons/mob/onmob_hands_solgov.dmi') + // SIERRA TODO: port SPECIES_TAJARA, SPECIES_RESOMI + species_restricted = list(SPECIES_HUMAN, SPECIES_IPC/*, SPECIES_TAJARA, SPECIES_RESOMI*/) + +/obj/item/rig/command/equipped + initial_modules = list( + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/device/flash, + /obj/item/rig_module/cooling_unit + ) + +/* + * HEAD OF PERSONELL + */ +/obj/item/rig/command/hop + name = "HoP's HCM" + suit_type = "advanced command hardsuit" + desc = "A specialized hardsuit rig control module issued to ranking personnel command staff of the Nanotrasen and their peers." + icon_state = "command_XO_rig" + armor = list( + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_SMALL, + laser = ARMOR_LASER_MINOR, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED, + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_SMALL + ) + + chest_type = /obj/item/clothing/suit/space/rig/command/hop + helm_type = /obj/item/clothing/head/helmet/space/rig/command/hop + + allowed = list(/obj/item/gun, /obj/item/ammo_magazine, /obj/item/device/flashlight, /obj/item/tank, /obj/item/device/suit_cooling_unit, /obj/item/storage/secure/briefcase) + req_access = list(access_hop) + +/obj/item/clothing/head/helmet/space/rig/command/hop + icon_state = "command_XO_rig" +/obj/item/clothing/suit/space/rig/command/hop + icon_state = "command_XO_rig" + +/obj/item/rig/command/hop/equipped + initial_modules = list( + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/device/flash/advanced, + /obj/item/rig_module/grenade_launcher/smoke, + /obj/item/rig_module/cooling_unit) + +/* + * COMMANDING OFFICER + */ +/obj/item/rig/command/captain + name = "captain's HCM" + suit_type = "advanced command hardsuit" + desc = "A specialized hardsuit rig control module issued to captains of the Nanotrasen." + icon_state = "command_CO_rig" + armor = list( + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_PISTOL, + laser = ARMOR_LASER_SMALL, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED, + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_SMALL + ) + + chest_type = /obj/item/clothing/suit/space/rig/command/captain + helm_type = /obj/item/clothing/head/helmet/space/rig/command/captain + allowed = list(/obj/item/gun, /obj/item/ammo_magazine, /obj/item/device/flashlight, /obj/item/tank, /obj/item/device/suit_cooling_unit, /obj/item/storage/secure/briefcase) + + req_access = list(access_captain) + +/obj/item/clothing/head/helmet/space/rig/command/captain + icon_state = "command_CO_rig" +/obj/item/clothing/suit/space/rig/command/captain + icon_state = "command_CO_rig" + +/obj/item/rig/command/captain/equipped + initial_modules = list( +//INF /obj/item/rig_module/ai_container, + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/device/flash/advanced, + /obj/item/rig_module/grenade_launcher/smoke, + /obj/item/rig_module/cooling_unit) + +/* + * CHIEF MEDICAL OFFICER + */ +/obj/item/rig/command/cmo + name = "CMO's HCM" + suit_type = "medical command hardsuit" + desc = "A specialized hardsuit rig control module issued to ranking medical command staff of the Nanotrasen and their peers." + + sprite_sheets = list( + SPECIES_RESOMI = 'mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi', + //SPECIES_UNATHI = 'icons/mob/onmob/Unathi/rig_back.dmi' TODO: SIERRA PORT + ) + + icon_state = "command_med_rig" + chest_type = /obj/item/clothing/suit/space/rig/command/cmo + helm_type = /obj/item/clothing/head/helmet/space/rig/command/cmo + + allowed = list(/obj/item/gun, + /obj/item/ammo_magazine, + /obj/item/device/flashlight, + /obj/item/tank, + /obj/item/device/suit_cooling_unit, + /obj/item/storage/firstaid, + /obj/item/device/scanner/health, + /obj/item/stack/medical, + /obj/item/roller_bed) + + req_access = list(access_cmo) + +/obj/item/clothing/head/helmet/space/rig/command/cmo + icon_state = "command_med_rig" + +/obj/item/clothing/suit/space/rig/command/cmo + icon_state = "command_med_rig" + + +/obj/item/rig/command/cmo/equipped + initial_modules = list( + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/device/flash, + /obj/item/rig_module/device/healthscanner, + /obj/item/rig_module/device/defib, + /obj/item/rig_module/chem_dispenser/injector, + /obj/item/rig_module/vision/medhud, + /obj/item/rig_module/cooling_unit) + +/* +* CHIEF OF SECURITY +*/ +/obj/item/rig/command/hos + name = "HoS' HCM" + suit_type = "security command hardsuit" + desc = "A specialized hardsuit rig control module issued to ranking security command staff of the Nanotrasen and their peers." + icon = 'maps/sierra/icons/obj/rig_modules.dmi' + icon_state = "hos_rig" + armor = list( + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_PISTOL, + laser = ARMOR_LASER_SMALL, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED, + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_SMALL + ) + + chest_type = /obj/item/clothing/suit/space/rig/command/hos + helm_type = /obj/item/clothing/head/helmet/space/rig/command/hos + boot_type = /obj/item/clothing/shoes/magboots/rig/command/hos + glove_type = /obj/item/clothing/gloves/rig/command/hos + + allowed = list(/obj/item/gun, + /obj/item/ammo_magazine, + /obj/item/handcuffs, + /obj/item/device/flashlight, + /obj/item/tank, + /obj/item/device/suit_cooling_unit, + /obj/item/melee/baton) + + req_access = list(access_hos) + +/obj/item/clothing/head/helmet/space/rig/command/hos + icon_state = "hos_rig" + icon = 'maps/sierra/icons/obj/clothing/obj_head.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + species_restricted = list(SPECIES_HUMAN) // No available icons for aliens + +/obj/item/clothing/suit/space/rig/command/hos + icon_state = "hos_rig" + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + species_restricted = list(SPECIES_HUMAN) + +/obj/item/clothing/shoes/magboots/rig/command/hos + icon_state = "hos_rig" + icon = 'maps/sierra/icons/obj/clothing/obj_feet.dmi' + item_icons = list(slot_shoes_str = 'maps/sierra/icons/mob/onmob/onmob_feet.dmi') + species_restricted = list(SPECIES_HUMAN) + +/obj/item/clothing/gloves/rig/command/hos + icon_state = "hos_rig" + icon = 'maps/sierra/icons/obj/clothing/obj_hands.dmi' + item_icons = list(slot_gloves_str = 'maps/sierra/icons/mob/onmob/onmob_hands.dmi') + species_restricted = list(SPECIES_HUMAN) + + +/obj/item/rig/command/hos/equipped + initial_modules = list( + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/device/flash, + /obj/item/rig_module/vision/sechud, + /obj/item/rig_module/cooling_unit) + +/* +* CHIEF SCIENCE OFFICER +*/ +/obj/item/rig/command/science + name = "research command HCM" + suit_type = "research command hardsuit" + desc = "A specialized hardsuit rig control module issued to ranking research officers of the Expeditionary Corps." + icon_state = "command_sci_rig" + armor = list( + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_SMALL, + laser = ARMOR_LASER_MINOR, + energy = ARMOR_ENERGY_STRONG, + bomb = ARMOR_BOMB_RESISTANT, + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_SHIELDED + ) + + chest_type = /obj/item/clothing/suit/space/rig/command/science + helm_type = /obj/item/clothing/head/helmet/space/rig/command/science + + allowed = list(/obj/item/gun, + /obj/item/ammo_magazine, + /obj/item/device/flashlight, + /obj/item/tank, + /obj/item/device/suit_cooling_unit, + /obj/item/stack/flag, + /obj/item/storage/excavation, + /obj/item/device/scanner/health, + /obj/item/device/measuring_tape, + /obj/item/device/ano_scanner, + /obj/item/device/depth_scanner, + /obj/item/device/core_sampler, + /obj/item/device/gps, + /obj/item/pinpointer/radio, + /obj/item/pickaxe/xeno, + /obj/item/storage/bag/fossils, + /obj/item/rig_module/grenade_launcher/light) + + req_access = list(access_rd) + +/obj/item/clothing/head/helmet/space/rig/command/science + icon_state = "command_sci_rig" + +/obj/item/clothing/suit/space/rig/command/science + icon_state = "command_sci_rig" + +/obj/item/clothing/shoes/magboots/rig/command/science +/obj/item/clothing/gloves/rig/command/science + + +/obj/item/rig/command/science/equipped + initial_modules = list( + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/device/flash, + /obj/item/rig_module/device/anomaly_scanner, + /obj/item/rig_module/grenade_launcher/light, + /obj/item/rig_module/cooling_unit) + +/* +* EXPLORATION +*/ +/obj/item/rig/exploration + name = "heavy exploration HCM" + suit_type = "heavy exploration hardsuit" + desc = "Expeditionary Corps' Exoplanet Exploration Armored Unit, A-Unit for short. Built for more hostile (and hungry) environments, it features additional armor and powered exoskeleton." + icon = 'maps/sierra/icons/obj/uniques.dmi' + icon_state = "command_exp_rig" + armor = list( + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_SMALL, + laser = ARMOR_LASER_SMALL, + energy = ARMOR_ENERGY_RESISTANT, + bomb = ARMOR_BOMB_MINOR, + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_SHIELDED + ) + + chest_type = /obj/item/clothing/suit/space/rig/command + helm_type = /obj/item/clothing/head/helmet/space/rig/command/exploration + boot_type = /obj/item/clothing/shoes/magboots/rig/command + glove_type = /obj/item/clothing/gloves/rig/command + + allowed = list(/obj/item/gun, + /obj/item/ammo_magazine, + /obj/item/device/flashlight, + /obj/item/tank, + /obj/item/device/suit_cooling_unit) + + online_slowdown = 0.50 + offline_slowdown = 4 + offline_vision_restriction = TINT_BLIND + +/obj/item/clothing/head/helmet/space/rig/command/exploration + camera = /obj/machinery/camera/network/expedition + icon_state = "command_exp_rig" + light_overlay = "yellow_double_light" + brightness_on = 0.8 + +/obj/item/rig/exploration/equipped + initial_modules = list( + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/device/flash, + /obj/item/rig_module/device/anomaly_scanner, + /obj/item/rig_module/grenade_launcher/light, + /obj/item/rig_module/cooling_unit) + +/* +Overrides for standard mapset rig items + */ + +/obj/item/clothing/head/helmet/space/rig/industrial + camera = /obj/machinery/camera/network/supply diff --git a/maps/sierra/items/stamps.dm b/maps/sierra/items/stamps.dm new file mode 100644 index 0000000000000..4a7b8058f7700 --- /dev/null +++ b/maps/sierra/items/stamps.dm @@ -0,0 +1,27 @@ +/obj/item/stamp/hop + name = "head of personel's rubber stamp" + icon_state = "stamp-xo" + +/obj/item/stamp/hos + name = "head of security's rubber stamp" + icon_state = "stamp-cos" + +/obj/item/stamp/ward + name = "warden's rubber stamp" + icon_state = "stamp-brig" + +/obj/item/stamp/qm + name = "quartermaster's rubber stamp" + icon_state = "stamp-deckchief" + +/obj/item/stamp/supply + name = "supply rubber stamp" + icon_state = "stamp-cargo" + +/obj/item/stamp/rd/nt + name = "research director's rubber stamp" + icon_state = "stamp-rd" + +/obj/item/stamp/internalaffairs + name = "internal affaits agent's stamp" + icon_state = "stamp-corp" \ No newline at end of file diff --git a/maps/sierra/items/weapons/books.dm b/maps/sierra/items/weapons/books.dm new file mode 100644 index 0000000000000..67bf7f8c17845 --- /dev/null +++ b/maps/sierra/items/weapons/books.dm @@ -0,0 +1,108 @@ +/*Engineering*/ +obj/item/book/manual/gravitygenerator + name = "Gravity Generator Operation Manual" + icon_state ="bookEngineering2" + author = "Gravity Generator CO." + title = "Gravity Generator Operation Manual" + + dat = {" + + + + +

    Gravity Generation for dummies!

    + Thank you for your purchase of the newest model of the SA Grade Gravity Generator! This operation manual will cover the basics required for safely operating and maintaing your gravity generation system.

    +

    Contents

    +
      +
    1. Basic Saftey
    2. +
    3. Starting The System
    4. +
    5. Shutting Down The System
    6. +
    7. Procedure 8549 (Repairing Physical Damage)
    8. +
    9. Other Maintence Procedures
    10. +
    +
    + +

    Basic Saftey


    + Before starting any maintence protocols a basic set of safety instructions are to be followed to ensure safe operation of the system. They are as follows: +
      +
    • Gather all proper radiation equipment including: A Class A full body radiation suit, proper eye protection (such as meson goggles), and a geiger counter if available.
    • +
    • Announce over a station wide intercom that the gravity generator is going under maintence.
    • +
    • Ensure there are no gas or chemical leaks inside the chamber before entering.
    • +
    • Ensure all proper gear is gathered prior to entering which includes: radiation equipment, first aid equipment, and fire saftey equipment.
    • + Note:If there is a fire in the chamber read: Procedure 8548 +


    + +

    Starting The System


    +
      +
    • Ensure all steps in basic saftey are completed.
    • +
    • Do a complete inspection of the system and insure there are no physical defects.
    • +
    • Locate the control panel on the gravity generator. This is located on the bottom most part of the generator.
    • +
    • Locate the main beaker switch and switch it to the ON position.
    • +
    • Wait for the charge to raise to 100 percent before proceeding.
    • +
    • Ensure that the gravity systems are working. If not, examine the generator for any physical damage.
    • + Note:If the startup procedure fails due to physical damage, read: Procedure 8549 +


    +

    Shutting Down The System


    +
      +
    • Ensure all steps in basic saftey are completed.

    • +
    • Locate the control panel on the gravity generator. This is located on the bottom most part of the generator.

    • +
    • Locate the main beaker switch and switch it to the OFF position.

    • +
    • Wait for the charge to drop to 0 percent before leaving.
    • +
    • Ensure that there is no longer garvity.
    • + Note:If the shutdown procedure fails, read: Procedure 9142 +


    + +

    Procedure 8549 (Repairing Physical Damage)


    + In the case of physical damage to your gravity generation systems, follow the following steps:
    + Note:In the case of total destruction of the system, read:Procedure 2482 +
      +
    • Ensure all steps in basic saftey are completed.

    • +
    • Follow: Shutdown Procedure
      +
    • Ensure the framework is properly secured with a screwdriver.
    • +
    • If the framework is damage, weld the damaged plating.
    • +
    • Apply plasteel plating to the welded damaged plating.
    • +
    • Secure the plasteel to the plating with a wrench.
    • +
    • Follow the Startup procedure
    • +

    +

    Other Procedures


    + The following procedures cover special cases that may come up. If your issue is not found below, please follow the shutdown procedure and contact Gravity Generator CO.
    + Procedure 2482 (Total system destruction)
    +
      +
    • Ensure all steps in basic saftey are completed.

    • +
    • If there are any remaining parts of the generator, ensure they are no longer powered.

    • +
    • Announce that the gravity generator is destroyed and gravity will be out.

    • +
    • Contact Gravity Generator CO for a replacement.

    • + Note:Due to the complexity of the generator systems, no on-site replacement can be done. +


    + Procedure 8548 (Fire in the chamber)
    + In the event of a fire in the gravity generator chamber, complete the following steps. +
      +
    • Ensure all steps in basic saftey are completed.

    • +
    • Gather fire saftey equipment.

    • +
    • If the generator is on, enter the chamber and follow:Procedure 9142

    • +
    • Extinguish the fire in a safe manner.

    • +
    • Regulate the pressure in the chamber and ensure no gas leaks or chemical leaks are present.
    • +
    • Follow Procedure 8549
    • +
    • Follow Startup procedure
    • +


    + Procedure 9142 (Emergency Shutdown)
    + The following procedure is only to be used in case of an emergency. Use of it otherwise could lead to injury, death, malfunction of the systems, an explosion, or a massive release of radiation. +
      +
    • Ensure all steps in basic saftey are completed.

    • +
    • Locate the control panel on the gravity generator. This is located on the bottom most part of the generator.

    • +
    • Pry open the electrical panel with a crowbar.

    • +
    • Press the red button.

    • +
    • Replace the panel with a crowbar.
    • +
    • If the generator does not shut down, immediately cut the power to the room to prevent the risk of death.

    • +
    • Follow the appropriate maintence procedure.
    • +


    + + + "} diff --git a/maps/sierra/items/weapons/storage/boxes.dm b/maps/sierra/items/weapons/storage/boxes.dm new file mode 100644 index 0000000000000..9e6270c9dff1e --- /dev/null +++ b/maps/sierra/items/weapons/storage/boxes.dm @@ -0,0 +1,41 @@ +/obj/item/storage/box/survival/troops + name = "field survival kit" + startswith = list(/obj/item/clothing/mask/breath = 1, + /obj/item/tank/emergency/oxygen = 1, + /obj/item/device/flashlight/flare/glowstick = 1, + /obj/item/crowbar/prybar = 1, + /obj/item/device/radio/off = 1, + /obj/item/reagent_containers/food/snacks/liquidfood = 2) + +/obj/item/storage/box/smokeshells + name = "box of smoke shells" + desc = "A box containing 5 military grade smoke shells." + icon_state = "flashbang" + startswith = list(/obj/item/grenade/smokebomb/shell = 6) + +/obj/item/storage/box/flashshells + name = "box of flashbang shells" + desc = "A box containing 5 military grade flashbang shells." + icon_state = "flashbang" + startswith = list(/obj/item/grenade/flashbang/shell = 6) + +/obj/item/storage/box/empshells + name = "box of emp grenade shells" + desc = "A box containing 5 military grade emp grenade shells.
    WARNING: Live explosives. Misuse may result in serious injury or death." + icon_state = "flashbang" + startswith = list(/obj/item/grenade/empgrenade/shell = 6) + +/obj/item/storage/box/aphotshells + name = "box of photon disruption shells" + desc = "A box containing 5 photon disruption shells." + icon_state = "flashbang" + startswith = list(/obj/item/grenade/anti_photon/shell = 6) + +/obj/item/storage/box/lights/led_neon + name = "box of neon leds" + desc = "A box full of soda cans." + startswith = list(/obj/item/light/led_neon/small = 7) + +/obj/item/storage/box/lights/xenon + name = "box of replacement xenon" + startswith = list(/obj/item/light/xenon = 4) diff --git a/maps/sierra/job/_job_defines.dm b/maps/sierra/job/_job_defines.dm new file mode 100644 index 0000000000000..862ab05203422 --- /dev/null +++ b/maps/sierra/job/_job_defines.dm @@ -0,0 +1,12 @@ + +#define HUMAN_ONLY_JOBS /datum/job/hos, /datum/job/hop, /datum/job/chief_engineer, /datum/job/rd, /datum/job/cmo, /datum/job/iaa, /datum/job/psychiatrist, /datum/job/captain + +#define SILICON_JOBS /datum/job/ai, /datum/job/cyborg + +#define ADHERENT_JOBS /datum/job/ai, /datum/job/cyborg, /datum/job/assistant, /datum/job/janitor, /datum/job/engineer_trainee, /datum/job/cook, /datum/job/cargo_tech, /datum/job/scientist_assistant, /datum/job/doctor_trainee, /datum/job/engineer, /datum/job/mining, /datum/job/cargo_assistant, /datum/job/roboticist, /datum/job/chemist, /datum/job/bartender, /datum/job/steward, /datum/job/explorer_engineer + +#define NABBER_JOBS /datum/job/ai, /datum/job/cyborg, /datum/job/janitor, /datum/job/scientist_assistant, /datum/job/chemist, /datum/job/roboticist, /datum/job/cargo_assistant, /datum/job/cook, /datum/job/engineer_trainee, /datum/job/doctor_trainee, /datum/job/bartender, /datum/job/steward + +#define SKRELL_BLACKLISTED_JOBS /datum/job/hos, /datum/job/hop, /datum/job/cmo, /datum/job/iaa, /datum/job/psychiatrist,/datum/job/captain + +#define MACHINE_BLACKLISTED_JOBS /datum/job/hos, /datum/job/psychiatrist, /datum/job/captain, /datum/job/security_assistant diff --git a/maps/sierra/job/access.dm b/maps/sierra/job/access.dm new file mode 100644 index 0000000000000..7c2c6e020b9cd --- /dev/null +++ b/maps/sierra/job/access.dm @@ -0,0 +1,137 @@ +/************** + * NSV sierra * + **************/ +var/global/const/access_hangar = "ACCESS_HANGAR" +/datum/access/hangar + id = access_hangar + desc = "Hangar Deck" + region = ACCESS_REGION_GENERAL + +var/global/const/access_petrov = "ACCESS_PETROV" +/datum/access/petrov + id = access_petrov + desc = "Petrov" + region = ACCESS_REGION_RESEARCH + +var/global/const/access_petrov_helm = "ACCESS_PETROV_HELM" +/datum/access/petrov_helm + id = access_petrov_helm + desc = "Petrov Helm" + region = ACCESS_REGION_RESEARCH + +var/global/const/access_guppy_helm = "ACCESS_GUPPY_HELM" +/datum/access/guppy_helm + id = access_guppy_helm + desc = "General Utility Pod Helm" + region = ACCESS_REGION_SUPPLY + +var/global/const/access_expedition_shuttle_helm = "ACCESS_EXPEDITION_SHUTTLE_HELM" +/datum/access/exploration_shuttle_helm + id = access_expedition_shuttle_helm + desc = "Charon Helm" + region = ACCESS_REGION_RESEARCH + +var/global/const/access_iaa = "ACCESS_IAA" +/datum/access/iaa + id = access_iaa + desc = "Internal Affairs Agent" + region = ACCESS_REGION_COMMAND + access_type = ACCESS_TYPE_NONE // Ruler of their own domain, Captain and RD cannot enter + +var/global/const/access_gun = "ACCESS_GUN" +/datum/access/gun + id = access_gun + desc = "BSA Cannon" + region = ACCESS_REGION_COMMAND + +var/global/const/access_expedition_shuttle = "ACCESS_EXPEDITION_SHUTTLE" +/datum/access/exploration_shuttle + id = access_expedition_shuttle + desc = "Charon" + region = ACCESS_REGION_RESEARCH + +var/global/const/access_guppy = "ACCESS_GUPPY" +/datum/access/guppy + id = access_guppy + desc = "General Utility Pod" + region = ACCESS_REGION_SUPPLY + +var/global/const/access_seneng = "ACCESS_SENENG" +/datum/access/seneng + id = access_seneng + desc = "Senior Engineer" + region = ACCESS_REGION_ENGINEERING + +var/global/const/access_senmed = "ACCESS_SENMED" +/datum/access/senmed + id = access_senmed + desc = "Physician" + region = ACCESS_REGION_MEDBAY + +var/global/const/access_guard = "ACCESS_GUARD" +/datum/access/guard + id = access_guard + desc = "Guard Equipment" + region = ACCESS_REGION_SECURITY + +var/global/const/access_explorer = "ACCESS_EXPLORER" +/datum/access/explorer + id = access_explorer + desc = "Explorer" + region = ACCESS_REGION_RESEARCH + +var/global/const/access_el = "ACCESS_EL" +/datum/access/el + id = access_el + desc = "Exploration Leader" + region = ACCESS_REGION_COMMAND + +var/global/const/access_seceva = "ACCESS_SECEVA" +/datum/access/seceva + id = access_seceva + desc = "Security EVA" + region = ACCESS_REGION_SECURITY + +var/global/const/access_commissary = "ACCESS_COMMISSARY" +/datum/access/commissary + id = access_commissary + desc = "Commissary" + region = ACCESS_REGION_GENERAL +var/global/const/access_warden = "ACCESS_WARDEN" +/datum/access/warden + id = access_warden + desc = "Warden" + region = ACCESS_REGION_SECURITY + +var/global/const/access_actor = "ACCESS_ACTOR" +/datum/access/actor + id = access_actor + desc = "Actor" + region = ACCESS_REGION_GENERAL + +var/global/const/access_field_eng = "ACCESS_FIELD_ENG" +/datum/access/field_eng + id = access_field_eng + desc = "Field Engineer" + region = ACCESS_REGION_RESEARCH + +var/global/const/access_field_med = "ACCESS_FIELD_MED" +/datum/access/field_med + id = access_field_med + desc = "Field Medic" + region = ACCESS_REGION_RESEARCH + +var/global/const/access_bar = "ACCESS_BAR" +/datum/access/bar + id = access_bar + desc = "Bar" + region = ACCESS_REGION_GENERAL + +var/global/const/access_chief_steward = "ACCESS_SIERRA_CHIEF_STEWARD" +/datum/access/chief_steward + id = access_chief_steward + desc = "Chief Steward" + region = ACCESS_REGION_GENERAL + +/datum/access/network + region = ACCESS_REGION_COMMAND diff --git a/maps/sierra/job/infinity.dm b/maps/sierra/job/infinity.dm new file mode 100644 index 0000000000000..e758a6936e9ee --- /dev/null +++ b/maps/sierra/job/infinity.dm @@ -0,0 +1,142 @@ +/singleton/hierarchy/outfit/scg + name = "SCG" + uniform = /obj/item/clothing/under/solgov + +/singleton/hierarchy/outfit/scg/troops + name = "Inf - SCG MarineHolder" + head = /obj/item/clothing/head/helmet/marine + mask = /obj/item/clothing/mask/gas/half + l_ear = /obj/item/device/radio/headset/specops + suit = /obj/item/clothing/suit/armor/pcarrier/troops/heavy + suit_store = /obj/item/gun/projectile/automatic/sec_smg + gloves = /obj/item/clothing/gloves/thick/combat + belt = /obj/item/storage/belt/holster/security/tactical + uniform = /obj/item/clothing/under/scga/utility/urban + l_pocket = /obj/item/device/flashlight/maglight + shoes = /obj/item/clothing/shoes/combat + id_slot = slot_wear_id + id_desc = "An ID of SCG marine trooper." + id_types = list(/obj/item/card/id/security) + + back = /obj/item/storage/backpack/satchel/leather/black + backpack_contents = list( + /obj/item/storage/box/survival = 1, + /obj/item/storage/firstaid/combat =1) + flags = OUTFIT_HAS_BACKPACK + +/singleton/hierarchy/outfit/scg/troops/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/clothing/uniform = H.w_uniform + if(uniform) + var/obj/item/clothing/accessory/badge/solgov/tags/tag = new() + tag.stored_name = H.real_name + tag.name = "[initial(tag.name)] ([tag.stored_name])" + if(uniform.can_attach_accessory(tag)) + uniform.attach_accessory(null, tag) + else + qdel(tag) + +/singleton/hierarchy/outfit/scg/troops/standart + name = "Inf - SCG Marine Standart" + id_pda_assignment = "Marine Trooper" + +/singleton/hierarchy/outfit/scg/troops/standart/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/clothing/uniform = H.w_uniform + if(uniform) + var/obj/item/clothing/accessory/scga_badge/enlisted/rank = new() + if(uniform.can_attach_accessory(rank)) + uniform.attach_accessory(null, rank) + else + qdel(rank) + +/singleton/hierarchy/outfit/scg/troops/engineer + name = "Inf - SCG Marine Combat Engineer" + glasses = /obj/item/clothing/glasses/welding + gloves = /obj/item/clothing/gloves/thick/swat + back = /obj/item/storage/backpack/satchel/eng + belt = /obj/item/storage/belt/utility + id_pda_assignment = "Marine Combat Engineer" + backpack_contents = list( + /obj/item/storage/box/survival = 1, + /obj/item/storage/firstaid/combat = 1, + /obj/item/plastique = 3) + +/singleton/hierarchy/outfit/scg/troops/engineer/New() + ..() + BACKPACK_OVERRIDE_ENGINEERING + +/singleton/hierarchy/outfit/scg/troops/engineer/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/clothing/uniform = H.w_uniform + if(uniform) + var/obj/item/clothing/accessory/scga_badge/enlisted/rank = new() + if(uniform.can_attach_accessory(rank)) + uniform.attach_accessory(null, rank) + else + qdel(rank) + +/singleton/hierarchy/outfit/scg/troops/medic + name = "Inf - SCG Marine Corpsman" + glasses = /obj/item/clothing/glasses/hud/health + back = /obj/item/storage/backpack/satchel/med + suit = /obj/item/clothing/suit/armor/pcarrier/troops + belt = /obj/item/storage/belt/medical/emt + id_pda_assignment = "Marine Corpsman" + backpack_contents = list( + /obj/item/storage/box/survival = 1, + /obj/item/storage/firstaid/combat = 1, + /obj/item/storage/firstaid/adv = 1, + /obj/item/storage/firstaid/regular = 1, + /obj/item/storage/firstaid/surgery = 1) + +/singleton/hierarchy/outfit/scg/troops/medic/New() + ..() + BACKPACK_OVERRIDE_MEDICAL + +/singleton/hierarchy/outfit/scg/troops/medic/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/clothing/uniform = H.w_uniform + if(uniform) + var/obj/item/clothing/accessory/scga_badge/enlisted/rank = new() + if(uniform.can_attach_accessory(rank)) + uniform.attach_accessory(null, rank) + else + qdel(rank) + +/singleton/hierarchy/outfit/scg/troops/sergeant + name = "Inf - SCG Marine Sergeant" + back = /obj/item/storage/backpack/security + id_types = list(/obj/item/card/id/security/head) + id_pda_assignment = "Marine Squad Leader" + backpack_contents = list( + /obj/item/storage/box/survival = 1, + /obj/item/storage/firstaid/combat = 1) + +/singleton/hierarchy/outfit/scg/troops/sergeant/New() + ..() + BACKPACK_OVERRIDE_SECURITY + +/singleton/hierarchy/outfit/scg/troops/sergeant/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/clothing/uniform = H.w_uniform + if(uniform) + var/obj/item/clothing/accessory/scga_badge/enlisted/rank = new() + if(uniform.can_attach_accessory(rank)) + uniform.attach_accessory(null, rank) + else + qdel(rank) + +/singleton/hierarchy/outfit/marshal + name = "Inf - OCIE tracker" + shoes = /obj/item/clothing/shoes/jackboots + uniform = /obj/item/clothing/under/rank/security/navyblue + suit = /obj/item/clothing/suit/armor/pcarrier/light/sol + l_ear = /obj/item/device/radio/headset/headset_sec + belt = /obj/item/storage/belt/holster/security + r_hand = /obj/item/clothing/accessory/badge/tracker + l_hand = /obj/item/gun/energy/taser + id_slot = slot_wear_id + id_types = list(/obj/item/card/id/security) + id_desc = "An ID of SCG OCEI tracker." + id_pda_assignment = "OCEI tracker" diff --git a/maps/sierra/job/jobs.dm b/maps/sierra/job/jobs.dm new file mode 100644 index 0000000000000..b68fc015f0423 --- /dev/null +++ b/maps/sierra/job/jobs.dm @@ -0,0 +1,130 @@ +/datum/map/sierra + species_to_job_whitelist = list( + /datum/species/adherent = list(ADHERENT_JOBS), + /datum/species/nabber = list(NABBER_JOBS), + /datum/species/vox = list(SILICON_JOBS), + /datum/species/human/mule = list(SILICON_JOBS) + ) + + species_to_job_blacklist = list( + /datum/species/unathi = list(HUMAN_ONLY_JOBS), + /datum/species/unathi/yeosa = list(HUMAN_ONLY_JOBS), + /datum/species/tajaran = list(HUMAN_ONLY_JOBS), + /datum/species/skrell = list(SKRELL_BLACKLISTED_JOBS), + /datum/species/machine = list(MACHINE_BLACKLISTED_JOBS), + /datum/species/diona = list( + HUMAN_ONLY_JOBS, /datum/job/exploration_leader, /datum/job/explorer_pilot, + /datum/job/officer, /datum/job/warden, /datum/job/detective, + /datum/job/qm, + /datum/job/senior_engineer, /datum/job/senior_doctor, + /datum/job/senior_scientist, /datum/job/security_assistant + ) + ) + + // SIERRA TODO: Добавить на сьерру рякалок + // /datum/species/resomi = list( + // HUMAN_ONLY_JOBS, /datum/job/officer, /datum/job/exploration_leader, + // /datum/job/warden, /datum/job/chief_engineer, /datum/job/rd, + // /datum/job/iaa, /datum/job/security_assistant + // ) + + allowed_jobs = list( + /datum/job/captain, /datum/job/hop, /datum/job/rd, /datum/job/cmo, /datum/job/chief_engineer, /datum/job/hos, + /datum/job/iaa, /datum/job/adjutant, + /datum/job/exploration_leader, /datum/job/explorer, /datum/job/explorer_pilot, /datum/job/explorer_medic, /datum/job/explorer_engineer, + /datum/job/senior_engineer, /datum/job/engineer, /datum/job/infsys, /datum/job/engineer_trainee, + /datum/job/warden, /datum/job/detective, /datum/job/officer, /datum/job/security_assistant, + /datum/job/senior_doctor, /datum/job/doctor, /datum/job/doctor_trainee, /datum/job/chemist, /datum/job/psychiatrist, + /datum/job/qm, /datum/job/cargo_tech, /datum/job/cargo_assistant, /datum/job/mining, + /datum/job/chief_steward, /datum/job/janitor, /datum/job/cook, /datum/job/bartender, /datum/job/steward, /datum/job/chaplain, /datum/job/actor, + /datum/job/senior_scientist, /datum/job/scientist, /datum/job/roboticist, /datum/job/scientist_assistant, + /datum/job/ai, /datum/job/cyborg, + /datum/job/assistant + ) + + access_modify_region = list( + ACCESS_REGION_SECURITY = list(access_hos, access_change_ids), + ACCESS_REGION_MEDBAY = list(access_cmo, access_change_ids), + ACCESS_REGION_RESEARCH = list(access_rd, access_change_ids), + ACCESS_REGION_ENGINEERING = list(access_ce, access_change_ids), + ACCESS_REGION_COMMAND = list(access_change_ids), + ACCESS_REGION_GENERAL = list(access_hop, access_change_ids), + ACCESS_REGION_SUPPLY = list(access_qm, access_change_ids), + ) + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ GAS JOBS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +// GRADE C +/singleton/cultural_info/culture/nabber + valid_jobs = list(/datum/job/janitor) // THIS IS GRADE C- TRUST ME ~ SidVeld + + +/singleton/cultural_info/culture/nabber/c + valid_jobs = list(/datum/job/janitor, /datum/job/cargo_assistant) + + +/singleton/cultural_info/culture/nabber/c/plus + valid_jobs = list(/datum/job/janitor, /datum/job/cargo_assistant, + /datum/job/scientist_assistant) + + +// GRADE B +/singleton/cultural_info/culture/nabber/b/minus + valid_jobs = list(/datum/job/janitor) + + +/singleton/cultural_info/culture/nabber/b + valid_jobs = list(/datum/job/janitor, /datum/job/cargo_assistant, + /datum/job/bartender, /datum/job/cook, /datum/job/steward, + /datum/job/scientist_assistant) + + +/singleton/cultural_info/culture/nabber/b/plus + valid_jobs = list(/datum/job/janitor, /datum/job/cargo_assistant, + /datum/job/bartender, /datum/job/cook, /datum/job/steward, + /datum/job/scientist_assistant) + + +// GRADE A +/singleton/cultural_info/culture/nabber/a/minus + valid_jobs = list(/datum/job/scientist_assistant) + + +/singleton/cultural_info/culture/nabber/a + valid_jobs = list(/datum/job/cargo_assistant, + /datum/job/bartender, /datum/job/cook, /datum/job/steward, + /datum/job/chemist, /datum/job/doctor_trainee, + /datum/job/roboticist, /datum/job/engineer_trainee, + /datum/job/scientist_assistant) + + + +/singleton/cultural_info/culture/nabber/a/plus + valid_jobs = list(/datum/job/cargo_assistant, + /datum/job/bartender, /datum/job/cook, /datum/job/steward, + /datum/job/chemist, /datum/job/doctor_trainee, + /datum/job/roboticist, /datum/job/engineer_trainee, + /datum/job/scientist_assistant) + + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +/datum/job + allowed_branches = list( + /datum/mil_branch/civilian + ) + allowed_ranks = list( + /datum/mil_rank/civ/civ + ) + required_language = LANGUAGE_HUMAN_EURO + +/datum/map/sierra + default_assistant_title = "Crewman" + +#undef HUMAN_ONLY_JOBS +#undef SILICON_JOBS +#undef ADHERENT_JOBS +#undef NABBER_JOBS +#undef SKRELL_BLACKLISTED_JOBS +#undef MACHINE_BLACKLISTED_JOBS diff --git a/maps/sierra/job/jobs_cargo.dm b/maps/sierra/job/jobs_cargo.dm new file mode 100644 index 0000000000000..1292e56be2e8b --- /dev/null +++ b/maps/sierra/job/jobs_cargo.dm @@ -0,0 +1,139 @@ +/datum/job/qm + title = "Quartermaster" + department = "Снабжения" + department_flag = SUP + total_positions = 1 + spawn_positions = 1 + supervisors = "Главе Персонала" + economic_power = 8 + minimal_player_age = 7 + minimum_character_age = list(SPECIES_HUMAN = 23) + ideal_character_age = 25 + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/supply/quartermaster + allowed_branches = list(/datum/mil_branch/employee) + allowed_ranks = list(/datum/mil_rank/civ/nt) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_TRAINED, + SKILL_FINANCE = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC, + SKILL_EVA = SKILL_BASIC + ) + + skill_points = 14 + + access = list( access_maint_tunnels, access_emergency_storage, access_tech_storage, access_cargo, access_guppy_helm, + access_cargo_bot, access_qm, access_mailsorting, access_expedition_shuttle, access_guppy, access_hangar, + access_mining, access_mining_office, access_mining_station, access_commissary, access_external_airlocks) + + + + software_on_spawn = list(/datum/computer_file/program/supply, + /datum/computer_file/program/deck_management, + /datum/computer_file/program/reports) + // SIERRA TODO: need_exp_to_play + // need_exp_to_play = 2 + +/datum/job/qm/get_description_blurb() + return " Квартирмейстр, так же известен как КМ, отвечает за работу отдела снабжения (который по другому называют Карго).\ + Он следит за правильным оформлением бланков заказов и за тем, чтобы карготехник своевременно принимал и отправлял заказы." + +/datum/job/cargo_tech + title = "Cargo Technician" + department = "Снабжения" + department_flag = SUP + total_positions = 2 + spawn_positions = 2 + supervisors = "Квартирмейстеру и Главе Персонала" + minimum_character_age = list(SPECIES_HUMAN = 22) + ideal_character_age = 24 + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/supply/tech + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/contractor) + allowed_ranks = list(/datum/mil_rank/civ/nt, /datum/mil_rank/civ/contractor) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_BASIC, + SKILL_FINANCE = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC + ) + + access = list(access_maint_tunnels, access_emergency_storage, access_cargo, access_guppy_helm, access_commissary, + access_cargo_bot, access_mining_office, access_mailsorting, access_expedition_shuttle, access_guppy, access_hangar) + + + + software_on_spawn = list(/datum/computer_file/program/supply, + /datum/computer_file/program/deck_management, + /datum/computer_file/program/reports) + +/datum/job/cargo_tech/get_description_blurb() + return "Спустя долгого перетаскивания тяжёлых грузов из точки А в точку В Вы превратились из Ассистента Карго в настоящего Карготехника.\ + Поздравляем Вас с повышением, а если Вы его каким-то образом получили незаслуженно - бегите перечитывать специальное руководство,\ + чтобы хоть как-то выглядеть в глазах Вашего начальника в лице Главы Персонала и старшего сотрудника Вашего департамента в виде Квартирмейстера обнадёживающе.\ + Следите за складом, делайте заказы в центр поставок, жалуйтесь на прорванные трубы, сортируйте мусор, жмите на рычаг, Кронк, и снова жалуйтесь, но уже на нехватку кредитов на балансе отдела." + +/datum/job/mining + title = "Prospector" + department = "Снабжения" + department_flag = SUP + total_positions = 3 + spawn_positions = 3 + supervisors = "Квартирмейстеру и Главе Персонала" + selection_color = "#515151" + economic_power = 7 + minimum_character_age = list(SPECIES_HUMAN = 22) + ideal_character_age = 24 + alt_titles = list( + "Drill Technician", + "Shaft Miner", + "Salvage Technician") + min_skill = list( + SKILL_MECH = SKILL_BASIC, + SKILL_HAULING = SKILL_TRAINED, + SKILL_EVA = SKILL_BASIC + ) + + max_skill = list( SKILL_PILOT = SKILL_MAX) + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/supply/prospector + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/contractor) + allowed_ranks = list(/datum/mil_rank/civ/nt, /datum/mil_rank/civ/contractor) + + access = list(access_mining, access_mining_office, access_mining_station, + access_expedition_shuttle, access_guppy, access_hangar, access_guppy_helm) + + + +/datum/job/mining/get_description_blurb() + return "Шахтер - это специализированная спасательная, добывающая, археологическая и поисковая рабочая лошадка.\ + Он присоединяется к экспедиционным миссиям для поиска и добычи ценных минералов, образцов и артефактов для нужд экипажа корабля." + +/datum/job/cargo_assistant + title = "Cargo Assistant" + department = "Снабжения" + department_flag = SUP + total_positions = 1 + spawn_positions = 1 + supervisors = "Квартирмейстеру и Главе Персонала" + minimum_character_age = list(SPECIES_HUMAN = 18) + ideal_character_age = 20 + selection_color = "#515151" + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/supply/assistant + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/civilian, /datum/mil_branch/contractor) + allowed_ranks = list(/datum/mil_rank/civ/nt, /datum/mil_rank/civ/contractor, /datum/mil_rank/civ/civ) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_BASIC, + SKILL_FINANCE = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC + ) + + access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mining_office, access_mailsorting, access_hangar, access_guppy, access_guppy_helm, access_commissary) + + + + software_on_spawn = list(/datum/computer_file/program/supply, + /datum/computer_file/program/deck_management, + /datum/computer_file/program/reports) + +/datum/job/cargo_tech/get_description_blurb() + return "Папа, мама, бабушка, дедушка, второй папа, всегда говорили Вам, что без хорошего образования Вы будете грузчиком. Однако они не ожидали, что Вы станете космическим грузчиком.\ + Поздравляем, Вы стали ассистентом департамента снабжения. Бегайте по мелким поручениям Вашего начальника - Главы Персонала и старшего сотрудника склада - Квартирмейстер.\ + Учитесь максимально быстро перетаскивать грузы с одного конца судна на другой, слушайтесь старших по должности ребят, в чьих интересах не дать заказать Вам оружие для раздачи его всем желающим." diff --git a/maps/sierra/job/jobs_command.dm b/maps/sierra/job/jobs_command.dm new file mode 100644 index 0000000000000..05bbc1c428a05 --- /dev/null +++ b/maps/sierra/job/jobs_command.dm @@ -0,0 +1,489 @@ +/datum/job/captain + title = "Captain" + department = "Командный" + supervisors = "Центральному Командованию" + department_flag = COM + head_position = 1 + + minimal_player_age = 21 + + minimum_character_age = list(SPECIES_HUMAN = 38) + ideal_character_age = 42 + economic_power = 20 + skill_points = 25 + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/command/captain + total_positions = 1 + spawn_positions = 1 + req_admin_notify = 1 + allowed_branches = list( + /datum/mil_branch/employee + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt + ) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_TRAINED, + SKILL_PILOT = SKILL_TRAINED + ) + max_skill = list(SKILL_PILOT = SKILL_MAX) + software_on_spawn = list( + /datum/computer_file/program/comm, + /datum/computer_file/program/card_mod, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/reports + ) + // SIERRA TODO: need_exp_to_play + // need_exp_to_play = 10 + +/datum/job/captain/get_description_blurb() + return "Капитан ответственен за ИКН Сьерра и всё, что на нем находится.\ + Его обязанность заключается в том, чтобы убедиться, что ИКН Сьерра выполняет свою миссию и вернется обратно в порт СолПрава в целостности и сохранности.\ + От капитана ожидают проявления эффективных управленческих навыков, чтобы обеспечить бесперебойную работу всех отделов. Он является высшим авторитетом на Сьерре и имеет доступ к любому отсеку на борту, а также возможность выносить приказы практически без ограничений." + + +/datum/job/hop + title = "Head of Personnel" + supervisors = "Капитану" + department = "Командный" + department_flag = COM + + minimal_player_age = 14 + ideal_character_age = 45 + economic_power = 14 + skill_points = 30 + + minimum_character_age = list(SPECIES_HUMAN = 28) + ideal_character_age = 45 + head_position = 1 + total_positions = 1 + spawn_positions = 1 + req_admin_notify = 1 + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/command/hop + allowed_branches = list( + /datum/mil_branch/employee + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt + ) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_TRAINED, + SKILL_COMPUTER = SKILL_BASIC, + SKILL_PILOT = SKILL_BASIC + ) + + max_skill = list( SKILL_PILOT = SKILL_MAX, + SKILL_SCIENCE = SKILL_MAX) + // SIERRA TODO: need_exp_to_play + // need_exp_to_play = 5 + // SIERRA TODO: exp_track_branch + // exp_track_branch = COM + + access = list( + access_seceva, access_guard, access_security, access_brig, access_armory, + access_forensics_lockers, access_heads, access_medical, access_morgue, + access_engine, access_engine_equip, access_maint_tunnels, access_external_airlocks, + access_emergency_storage, access_change_ids, access_ai_upload, access_teleporter, + access_eva, access_bridge, access_all_personal_lockers, access_chapel_office, + access_tech_storage, access_atmospherics, access_janitor, access_crematorium, + access_robotics, access_kitchen, access_cargo, access_construction, access_chemistry, + access_cargo_bot, access_hydroponics, access_library, access_virology, access_cmo, + access_qm, access_network, access_surgery, access_mailsorting, access_heads_vault, + access_ce, access_rd, access_hop, access_hos, access_RC_announce, access_keycard_auth, access_tcomsat, + access_gateway, access_sec_doors, access_psychiatrist, access_medical_equip, access_gun, + access_expedition_shuttle, access_guppy, access_seneng, access_senmed, access_hangar, + access_guppy_helm, access_expedition_shuttle_helm, access_explorer, access_el, access_tox, + access_tox_storage, access_research, access_mining, access_mining_office, access_mining_station, + access_xenobiology, access_xenoarch, access_petrov, access_petrov_helm, access_actor, access_chief_steward, + access_bar, access_commissary, access_pilot, access_field_eng, access_field_med, access_network_admin, access_research_storage + ) + software_on_spawn = list( + /datum/computer_file/program/comm, + /datum/computer_file/program/card_mod, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/reports + ) + +/datum/job/hop/get_description_blurb() + return "В роли Главы Персонала, или ГП, как Вас иногда будут звать, Вы обязаны отвечать за то, чтобы все отделы были укомплектованы персоналом и работали ради прибыли своей корпорации.\ + Вам доверена возможность менять должность и уровни доступа каждого члена экипажа на борту через программу модификации ID-карт, что еще могут делать только капитан и ИИ.\ + Вы также отвечаете за управление отделами снабжения и обслуживания, а также за управление любым персоналом без активного главы. Помните: корпорация рассчитывает на вас!" + + + +/datum/job/rd + title = "Research Director" + supervisors = "Капитану" + department = "Научный" + department_flag = SCI|COM + head_position = 1 + total_positions = 1 + spawn_positions = 1 + req_admin_notify = 1 + + minimal_player_age = 14 + + minimum_character_age = list(SPECIES_HUMAN = 37) + ideal_character_age = 42 + economic_power = 20 + skill_points = 36 + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/research/rd + allowed_branches = list( + /datum/mil_branch/employee + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt + ) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_TRAINED, + SKILL_COMPUTER = SKILL_BASIC, + SKILL_FINANCE = SKILL_TRAINED, + SKILL_BOTANY = SKILL_BASIC, + SKILL_ANATOMY = SKILL_BASIC, + SKILL_DEVICES = SKILL_BASIC, + SKILL_SCIENCE = SKILL_TRAINED + + ) + + max_skill = list( + SKILL_ANATOMY = SKILL_MAX, + SKILL_DEVICES = SKILL_MAX, + SKILL_SCIENCE = SKILL_MAX + ) + + access = list( + access_tox, access_tox_storage, access_emergency_storage, + access_teleporter, access_bridge, access_rd, access_ai_upload, + access_research, access_robotics, access_mining, access_mining_office, + access_mining_station, access_xenobiology, access_RC_announce, + access_keycard_auth, access_xenoarch, access_heads, + access_sec_doors, access_medical, access_network, + access_maint_tunnels, access_eva, access_expedition_shuttle, access_expedition_shuttle_helm, + access_guppy, access_hangar, access_petrov, access_petrov_helm, + access_guppy_helm, access_explorer, access_el, access_network_admin + ) + software_on_spawn = list( + /datum/computer_file/program/comm, + /datum/computer_file/program/aidiag, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/reports + ) + // SIERRA TODO: need_exp_to_play + // need_exp_to_play = 5 + // SIERRA TODO: exp_track_branch + // exp_track_branch = SCI + +/datum/job/rd/get_description_blurb() + return "Директор Исследований несет ответственность за рабочую деятельность Научно-Исследовательского Отдела на борту объекта,\ + а также других научных сотрудников, для обеспечения успешного развития корпоративных технологий и получения максимально возможной прибыли с этого развития." + +/datum/job/cmo + title = "Chief Medical Officer" + supervisors = "Капитану" + head_position = 1 + department = "Медицинский" + department_flag = MED|COM + total_positions = 1 + spawn_positions = 1 + req_admin_notify = 1 + economic_power = 10 + + minimal_player_age = 21 + + minimum_character_age = list(SPECIES_HUMAN = 34) + ideal_character_age = 36 + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/command/cmo + allowed_branches = list( + /datum/mil_branch/employee + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt + ) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_BASIC, + SKILL_MEDICAL = SKILL_TRAINED, + SKILL_ANATOMY = SKILL_EXPERIENCED, + SKILL_CHEMISTRY = SKILL_BASIC, + SKILL_VIROLOGY = SKILL_BASIC + + ) + + max_skill = list( + SKILL_MEDICAL = SKILL_MAX, + SKILL_ANATOMY = SKILL_MAX, + SKILL_CHEMISTRY = SKILL_MAX, + SKILL_VIROLOGY = SKILL_MAX + ) + skill_points = 36 + + access = list( + access_medical, access_morgue, access_maint_tunnels, + access_external_airlocks, access_emergency_storage, + access_teleporter, access_eva, access_bridge, access_heads, + access_sec_doors,access_chapel_office, access_crematorium, + access_chemistry, access_virology, access_cmo, access_surgery, + access_RC_announce, access_keycard_auth, access_psychiatrist, + access_medical_equip, access_senmed, access_hangar + ) + + + + software_on_spawn = list( + /datum/computer_file/program/comm, + /datum/computer_file/program/suit_sensors, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/reports + ) + + // SIERRA TODO: need_exp_to_play + // need_exp_to_play = 5 + // SIERRA TODO: exp_track_branch + // exp_track_branch = MED + +/datum/job/cmo/get_description_blurb() + return "Главный врач или CMO, является высшим авторитетом, когда речь заходит о сохранении здоровья экипажа.\ + Он следит за тем, чтобы врачи медотдела эффективно лечили пациентов, чтобы парамедики реагировали на экстренные вызовы, чтобы химики производили необходимые лекарства, и чтобы консультанты оказывали психологическую поддержку.\ + Весь медицинский отдел находится в руках главного врача." + +/datum/job/chief_engineer + title = "Chief Engineer" + supervisors = "Капитану" + head_position = 1 + department = "Инженерный" + department_flag = ENG|COM + total_positions = 1 + spawn_positions = 1 + req_admin_notify = 1 + economic_power = 10 + + minimal_player_age = 21 + + minimum_character_age = list(SPECIES_HUMAN = 30) + ideal_character_age = 32 + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/command/chief_engineer + allowed_branches = list( + /datum/mil_branch/employee + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt + ) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_BASIC, + SKILL_COMPUTER = SKILL_TRAINED, + SKILL_EVA = SKILL_TRAINED, + SKILL_CONSTRUCTION = SKILL_TRAINED, + SKILL_ELECTRICAL = SKILL_TRAINED, + SKILL_ATMOS = SKILL_TRAINED, + SKILL_ENGINES = SKILL_EXPERIENCED + + ) + + max_skill = list( + SKILL_CONSTRUCTION = SKILL_MAX, + SKILL_ELECTRICAL = SKILL_MAX, + SKILL_ATMOS = SKILL_MAX, + SKILL_ENGINES = SKILL_MAX + ) + skill_points = 30 + + access = list( + access_engine, access_engine_equip, access_maint_tunnels, + access_external_airlocks, access_emergency_storage, + access_ai_upload, access_teleporter, access_eva, + access_bridge, access_heads,access_tech_storage, + access_atmospherics, access_janitor, access_construction, + access_sec_doors, access_medical, access_network, access_ce, + access_RC_announce, access_keycard_auth, access_tcomsat, + access_seneng, access_hangar, access_network_admin + ) + + + + software_on_spawn = list( + /datum/computer_file/program/comm, + /datum/computer_file/program/ntnetmonitor, + /datum/computer_file/program/power_monitor, + /datum/computer_file/program/supermatter_monitor, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/atmos_control, + /datum/computer_file/program/rcon_console, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/shields_monitor, + /datum/computer_file/program/reports + ) + + // SIERRA TODO: need_exp_to_play + // need_exp_to_play = 5 + // SIERRA TODO: exp_track_branch + // exp_track_branch = ENG + +/datum/job/chief_engineer/get_description_blurb() + return "Главный инженер - руководитель и администратор инженерного отдела, \ + он командует инженерами, а также требует от них отчеты о проведенных работах. \ + Отвечает за то, что реактор благополучно запустили, что щиты корабля правильно настроили, \ + и что любые механические неисправности устраняются быстро и эффективно." + +/datum/job/hos + title = "Head of Security" + supervisors = "Капитану" + head_position = 1 + department = "Охранный" + department_flag = SEC|COM + total_positions = 1 + spawn_positions = 1 + req_admin_notify = 1 + economic_power = 10 + + minimal_player_age = 21 + + minimum_character_age = list(SPECIES_HUMAN = 34) + ideal_character_age = 40 + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/command/hos + allowed_branches = list(/datum/mil_branch/employee) + allowed_ranks = list(/datum/mil_rank/civ/nt) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_TRAINED, + SKILL_EVA = SKILL_BASIC, + SKILL_COMBAT = SKILL_TRAINED, + SKILL_WEAPONS = SKILL_TRAINED, + SKILL_FORENSICS = SKILL_BASIC + + ) + + max_skill = list( + SKILL_COMBAT = SKILL_MAX, + SKILL_WEAPONS = SKILL_MAX, + SKILL_FORENSICS = SKILL_MAX + ) + skill_points = 28 + + access = list( + access_seceva, access_guard, access_security, + access_medical, access_brig, access_armory, + access_forensics_lockers, access_maint_tunnels, + access_external_airlocks, access_emergency_storage, + access_teleporter, access_eva, access_bridge, + access_heads, access_hos, access_RC_announce, + access_keycard_auth, access_sec_doors, access_hangar, + access_gun, access_warden + ) + + + software_on_spawn = list( + /datum/computer_file/program/comm, + /datum/computer_file/program/digitalwarrant, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/reports + ) + + // SIERRA TODO: need_exp_to_play + // need_exp_to_play = 5 + // SIERRA TODO: exp_track_branch + // exp_track_branch = SEC + +/datum/job/hos/get_description_blurb() + return "Глава службы безопасности, или ГСБ, является главой правоохранительных органов и главным защитником членов экипажа на борту корабля.\ + В конечном итоге, его задача - обеспечить, чтобы любые грязные предатели предстали перед судом, чтобы любые враждебные террористические организации были ликвидированы, и чтобы любые опасные чужеродные формы жизни вымывались в ближайший шлюз.\ + Он отвечает за координацию усилий офицеров службы безопасности корабля, чтобы обеспечить быстрое сдерживание любой угрозы, устанавливает патрули, состоящие из робких кадетов \ + отвечает за надзор за деятельностью сержанта для обеспечения соблюдения законов корпорации и за тем,\ + чтобы детектив не скрывал никаких необходимых улик." + +/datum/job/iaa + title = "Internal Affairs Agent" + department = "Командный" + department_flag = SPT + total_positions = 2 + spawn_positions = 2 + supervisors = "Центральному Командованию" + selection_color = "#2f2f7f" + economic_power = 15 + + minimal_player_age = 10 + + minimum_character_age = list(SPECIES_HUMAN = 30) + ideal_character_age = 40 + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/command/iaa + allowed_branches = list( + /datum/mil_branch/employee + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt + ) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_EXPERIENCED, + SKILL_FORENSICS = SKILL_BASIC, + SKILL_FINANCE = SKILL_BASIC + ) + skill_points = 20 + + access = list( + access_security, access_sec_doors, access_medical, + access_iaa, access_research, access_xenoarch, + access_heads, access_bridge, access_hangar, + access_petrov, access_commissary, access_maint_tunnels + ) + + + + software_on_spawn = list( + /datum/computer_file/program/reports + ) + + // SIERRA TODO: need_exp_to_play + // need_exp_to_play = 2 + +/datum/job/iaa/get_description_blurb() + return "Агент Внутренних Дел - уникальная роль для Вас на борту ИКН Сьерра. Он выступает от лица Центрального Командования Nanotrasen на борту корабля,\ + будучи низшим бюрократом Командования, и высшим - среди экипажа, несет ответственность за его работу и за максимальную прибыльность и безопасность объекта от некомпетентных сотрудников.\ + АВД расследует возможные нарушения Корпоративных законов, связывается с ЦентКоммом Nanotrasen через факс и действует в соответствии с распоряжениями корпорации, проверяет глав,\ + но в отсутствие капитана Агент Внутренних Дел, все ещё, не имеет высшей власти над всеми сотрудниками Nanotrasen на борту.\ + Заполняйте бумаги, следите за прибылью и приказам ЦК - и не переставайте наблюдать." + +/datum/job/adjutant + title = "Adjutant" + department = "Командный" + department_flag = SPT + total_positions = 3 + spawn_positions = 3 + supervisors = "Капитану и остальным главам" + selection_color = "#2f2f7f" + + minimal_player_age = 18 + + minimum_character_age = list(SPECIES_HUMAN = 24) + ideal_character_age = 26 + economic_power = 7 + skill_points = 20 + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/command/adjutant + allowed_branches = list(/datum/mil_branch/employee) + allowed_ranks = list(/datum/mil_rank/civ/nt) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_BASIC, + SKILL_PILOT = SKILL_TRAINED + ) + max_skill = list(SKILL_PILOT = SKILL_MAX) + access = list( + access_sec_doors, access_security, access_medical, access_engine, access_maint_tunnels, access_emergency_storage, + access_heads, access_bridge, access_janitor, access_kitchen, access_actor, access_cargo, + access_RC_announce, access_keycard_auth, access_guppy, access_guppy_helm, + access_external_airlocks, access_expedition_shuttle, access_eva, access_hangar, + access_explorer, access_expedition_shuttle_helm, access_gun, access_bar + ) + + software_on_spawn = list( + /datum/computer_file/program/comm, + /datum/computer_file/program/suit_sensors, + /datum/computer_file/program/power_monitor, + /datum/computer_file/program/supermatter_monitor, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/shields_monitor, + /datum/computer_file/program/reports, + /datum/computer_file/program/deck_management + ) + +/datum/job/adjutant/get_description_blurb() + return "Адъютант является помощником для командующего состава и персонала. Он отвечает за мониторинг различных систем и коммуникаций корабля, пилотирование Сьерры и привлечение ко вниманию соответствующего персонала при возникновении проблем или вопросов.\ + Адъютант — хорошее начало для желающих вникнуть в работу командования." diff --git a/maps/sierra/job/jobs_engineering.dm b/maps/sierra/job/jobs_engineering.dm new file mode 100644 index 0000000000000..4ace0cd66b324 --- /dev/null +++ b/maps/sierra/job/jobs_engineering.dm @@ -0,0 +1,193 @@ +/datum/job/senior_engineer + title = "Senior Engineer" + department = "Инженерный" + department_flag = ENG + supervisors = "Главному Инженеру" + selection_color = "#5b4d20" + + total_positions = 1 + spawn_positions = 1 + economic_power = 7 + minimal_player_age = 14 + minimum_character_age = list(SPECIES_HUMAN = 26) + ideal_character_age = 28 + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/engineering/senior_engineer + allowed_branches = list(/datum/mil_branch/employee) + allowed_ranks = list(/datum/mil_rank/civ/nt) + + skill_points = 24 + min_skill = list( SKILL_COMPUTER = SKILL_BASIC, + SKILL_EVA = SKILL_TRAINED, + SKILL_CONSTRUCTION = SKILL_TRAINED, + SKILL_ELECTRICAL = SKILL_TRAINED, + SKILL_ATMOS = SKILL_TRAINED, + SKILL_ENGINES = SKILL_TRAINED) + + max_skill = list( SKILL_CONSTRUCTION = SKILL_MAX, + SKILL_COMPUTER = SKILL_MAX, + SKILL_ELECTRICAL = SKILL_MAX, + SKILL_ATMOS = SKILL_MAX, + SKILL_ENGINES = SKILL_MAX) + + access = list( access_engine, access_engine_equip, access_maint_tunnels, access_external_airlocks, access_emergency_storage, + access_eva, access_tech_storage, access_atmospherics, access_janitor, access_construction, + access_tcomsat, access_seneng, access_hangar, access_network) + + + software_on_spawn = list(/datum/computer_file/program/power_monitor, + /datum/computer_file/program/supermatter_monitor, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/atmos_control, + /datum/computer_file/program/rcon_console, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/shields_monitor) + + // SIERRA TODO: need_exp_to_play + // need_exp_to_play = 2 + +/datum/job/senior_engineer/get_description_blurb() + return "Старший Инженер выполняет распоряжения Главного Инженера и контролирует повседневную работу отдела.\ + Он - очень опытный и высокопоставленный сотрудник, поэтому должен иметь обширные знания во многих \ + областях инженерии. При необходимости он может инструктировать рядовых инженеров." + +/datum/job/engineer + title = "Engineer" + department = "Инженерный" + department_flag = ENG + supervisors = "Главному и Старшему инженеру" + selection_color = "#5b4d20" + + total_positions = 4 + spawn_positions = 4 + minimal_player_age = 7 + minimum_character_age = list(SPECIES_HUMAN = 22) + ideal_character_age = 24 + economic_power = 6 + + alt_titles = list( + "Maintenance Technician" = /singleton/hierarchy/outfit/job/sierra/crew/engineering/engineer/maints, + "Structural Integrity Specialist" = /singleton/hierarchy/outfit/job/sierra/crew/engineering/engineer/maints, + "Electrician", + "Reactor Technician" = /singleton/hierarchy/outfit/job/sierra/crew/engineering/engineer/maints,, + "Atmospheric Technician" = /singleton/hierarchy/outfit/job/sierra/crew/engineering/engineer/atmos) + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/engineering/engineer + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/contractor) + allowed_ranks = list(/datum/mil_rank/civ/nt, /datum/mil_rank/civ/contractor) + + skill_points = 20 + min_skill = list( SKILL_COMPUTER = SKILL_BASIC, + SKILL_EVA = SKILL_TRAINED, + SKILL_CONSTRUCTION = SKILL_TRAINED, + SKILL_ELECTRICAL = SKILL_TRAINED, + SKILL_ATMOS = SKILL_TRAINED, + SKILL_ENGINES = SKILL_TRAINED) + + max_skill = list( SKILL_CONSTRUCTION = SKILL_MAX, + SKILL_ELECTRICAL = SKILL_MAX, + SKILL_COMPUTER = SKILL_MAX, + SKILL_ATMOS = SKILL_MAX, + SKILL_ENGINES = SKILL_MAX) + + + access = list( access_engine, access_engine_equip, access_maint_tunnels, access_external_airlocks, + access_eva, access_tech_storage, access_atmospherics, access_janitor, + access_construction, access_hangar, access_emergency_storage) + + + software_on_spawn = list(/datum/computer_file/program/power_monitor, + /datum/computer_file/program/supermatter_monitor, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/atmos_control, + /datum/computer_file/program/rcon_console, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/shields_monitor) + +/datum/job/engineer/get_description_blurb() + return "Инженер поддерживает рабочее состояние систем корабля. Он отвечает за обеспечение энергией, \ + воздухом; ремонтирует повреждения, которые могут возникнуть при несчастных случаях. \ + Почти любая проблема, связанная с механикой и машинерией на борту возлагается на инженеров." + +/datum/job/engineer_trainee + title = "Engineer Trainee" + department = "Инженерный" + department_flag = ENG + supervisors = "Главному инженеру и остальным инженерам" + selection_color = "#5b4d20" + + total_positions = 2 + spawn_positions = 2 + minimum_character_age = list(SPECIES_HUMAN = 20) + ideal_character_age = 21 + economic_power = 3 + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/engineering/engineer/trainee + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/contractor) + allowed_ranks = list(/datum/mil_rank/civ/nt, /datum/mil_rank/civ/contractor) + + no_skill_buffs = TRUE + skill_points = 16 + min_skill = list( SKILL_COMPUTER = SKILL_BASIC, + SKILL_EVA = SKILL_BASIC, + SKILL_CONSTRUCTION = SKILL_BASIC, + SKILL_ELECTRICAL = SKILL_BASIC, + SKILL_ATMOS = SKILL_BASIC, + SKILL_ENGINES = SKILL_BASIC) + + max_skill = list( SKILL_CONSTRUCTION = SKILL_MAX, + SKILL_ELECTRICAL = SKILL_MAX, + SKILL_ATMOS = SKILL_MAX, + SKILL_ENGINES = SKILL_MAX) + + access = list( access_engine, access_maint_tunnels, access_external_airlocks, access_emergency_storage, + access_eva, access_janitor, access_construction, + access_hangar) + + + software_on_spawn = list(/datum/computer_file/program/power_monitor, + /datum/computer_file/program/supermatter_monitor, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/atmos_control, + /datum/computer_file/program/rcon_console, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/shields_monitor) + +/datum/job/engineer_trainee/get_description_blurb() + return "Инженер-стажер выполняет несложные поручения инженеров, изучая инженерную механику на практике. \ + От стажера не ожидается, что он самостоятельно запустит реактор суперматерии или выполнит другое сложное \ + задание. Он - ассистент в инженерном отделе." + +/datum/job/infsys + title = "Information Technician" + department = "Инженерный" + department_flag = ENG + supervisors = "Главному и Старшему инженерам" + selection_color = "#5b4d20" + + total_positions = 1 + spawn_positions = 1 + minimal_player_age = 7 + minimum_character_age = list(SPECIES_HUMAN = 22) + ideal_character_age = 24 + economic_power = 6 + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/engineering/engineer/tcomms + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/contractor) + allowed_ranks = list(/datum/mil_rank/civ/nt, /datum/mil_rank/civ/contractor) + + skill_points = 12 + min_skill = list( SKILL_COMPUTER = SKILL_TRAINED, + SKILL_CONSTRUCTION = SKILL_BASIC, + SKILL_ELECTRICAL = SKILL_TRAINED) + + max_skill = list( SKILL_ELECTRICAL = SKILL_MAX, + SKILL_COMPUTER = SKILL_MAX) + + access = list( access_maint_tunnels, access_network, access_network_admin, access_external_airlocks, + access_tech_storage, access_emergency_storage, access_tcomsat) + + +/datum/job/infsys/get_description_blurb() + return "Вы когда-нибудь хотели стать человеком, который сутками сидит на попе смирно и начинает проявлять признаки бурной деятельности, когда всё идёт коту под хвост?\ + Поздравляю, Вы приняты на должность информационного техника. Сидите на попе смирно, серфите NTNet, истерите, когда связь внезапно обрывается, становитесь главным Hackerman-ом этой смены." diff --git a/maps/sierra/job/jobs_exploration.dm b/maps/sierra/job/jobs_exploration.dm new file mode 100644 index 0000000000000..e80f743c0dbe3 --- /dev/null +++ b/maps/sierra/job/jobs_exploration.dm @@ -0,0 +1,295 @@ +/datum/job/exploration_leader + title = "Exploration Leader" + department = "Экспедиционный" + department_flag = EXP + + total_positions = 1 + spawn_positions = 1 + supervisors = "Директору Исследований и Капитану" + selection_color = "#68099e" + + minimal_player_age = 14 + + minimum_character_age = list(SPECIES_HUMAN = 26) + ideal_character_age = 29 + economic_power = 9 + skill_points = 22 + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/exploration/el + allowed_branches = list(/datum/mil_branch/employee) + allowed_ranks = list(/datum/mil_rank/civ/nt) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_BASIC, + SKILL_EVA = SKILL_TRAINED, + SKILL_SCIENCE = SKILL_TRAINED, + SKILL_PILOT = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC + ) + max_skill = list( + SKILL_PILOT = SKILL_MAX, + SKILL_SCIENCE = SKILL_MAX, + SKILL_COMBAT = SKILL_EXPERIENCED, + SKILL_WEAPONS = SKILL_EXPERIENCED + ) + access = list( + access_el, + access_explorer, + access_eva, + access_bridge, + access_heads, + access_emergency_storage, + access_tech_storage, + access_guppy_helm, + access_expedition_shuttle, + access_expedition_shuttle_helm, + access_guppy, + access_hangar, + access_research + ) + software_on_spawn = list( + /datum/computer_file/program/deck_management, + /datum/computer_file/program/reports + ) + // SIERRA TODO: need_exp_to_play + // need_exp_to_play = 2 + +/datum/job/exploration_leader/get_description_blurb() + return "Вы - Экспедиционный Лидер. В ваши обязанности входит организация и участие в миссиях на удаленные объекты. \ + Вы ищите всё, что может предоставить НТ экономическую или научную выгоду - залежи драгоценных металлов, новые \ + формы жизни, инопланетные артефакты и неизвестные технологии. Вы будете вести свою экспедицию прямиком через ад - \ + опасную атмосферу, агрессивную флору и фауну, сбойных дронов, враждебно настроенными к вам роботов и \ + аномалии... Но не это ли то, за что Корпорация платит вам почти столько же, сколько главе?" + +/datum/job/explorer + title = "Explorer" + department = "Экспедиционный" + department_flag = EXP + total_positions = 3 + spawn_positions = 3 + supervisors = "Лидеру Экспедиции и Директору Исследований" + selection_color = "#68099e" + + minimal_player_age = 4 + + minimum_character_age = list(SPECIES_HUMAN = 22) + ideal_character_age = 24 + economic_power = 6 + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/exploration/explorer + allowed_branches = list( + /datum/mil_branch/employee, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/contractor + ) + min_skill = list( + SKILL_EVA = SKILL_BASIC, + SKILL_SCIENCE = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC + ) + max_skill = list( + SKILL_SCIENCE = SKILL_MAX, + SKILL_COMBAT = SKILL_EXPERIENCED, + SKILL_WEAPONS = SKILL_EXPERIENCED + ) + // SIERRA TODO: required_role + // required_role = list("Exploration Leader", "Expeditionary Pilot") + access = list( + access_explorer, + access_eva, + access_emergency_storage, + access_guppy_helm, + access_expedition_shuttle, + access_guppy, + access_hangar, + access_research + ) + software_on_spawn = list(/datum/computer_file/program/deck_management) + +/datum/job/explorer/get_description_blurb() + return "Вы - Исследователь. В ваши обязанности входит участие в миссиях на удаленные объекты, \ + организуемые Лидером Экспедиции или заменяющим его лицом. Вы ищите всё, что может предоставить НТ \ + экономическую или научную выгоду - залежи драгоценных металлов, новые формы жизни, инопланетные артефакты и \ + неизвестные технологии. Вы будете иметь дело с опасной атмосферой, агрессивной флорой и фауной, сбойными дронами \ + на заброшенных объектах, враждебно настроенными к вам роботами и аномалиями... Но не это ли то, за что Корпорация \ + вам так хорошо платит?" + +/datum/job/explorer_pilot + title = "Expeditionary Pilot" + department = "Экспедиционный" + department_flag = EXP + total_positions = 1 + spawn_positions = 1 + supervisors = "Лидеру Экспедиции и Директору Исследований" + selection_color = "#68099e" + + minimal_player_age = 14 + + minimum_character_age = list(SPECIES_HUMAN = 24) + ideal_character_age = 26 + economic_power = 7 + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/exploration/pilot + allowed_branches = list( + /datum/mil_branch/employee, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/contractor + ) + min_skill = list( + SKILL_EVA = SKILL_BASIC, + SKILL_SCIENCE = SKILL_BASIC, + SKILL_PILOT = SKILL_TRAINED, + SKILL_MEDICAL = SKILL_BASIC + ) + max_skill = list( + SKILL_SCIENCE = SKILL_MAX, + SKILL_PILOT = SKILL_MAX, + SKILL_COMBAT = SKILL_EXPERIENCED, + SKILL_WEAPONS = SKILL_EXPERIENCED + ) + access = list( + access_explorer, + access_eva, + access_emergency_storage, + access_guppy_helm, + access_expedition_shuttle, + access_guppy, + access_hangar, + access_expedition_shuttle_helm, + access_research + ) + software_on_spawn = list(/datum/computer_file/program/deck_management) + +/datum/job/explorer_pilot/get_description_blurb() + return "Вы - Исследователь. В ваши обязанности входит участие в миссиях на удаленные объекты, \ + организуемые Лидером Экспедиции или заменяющим его лицом. Вы ищите всё, что может предоставить НТ \ + экономическую или научную выгоду - залежи драгоценных металлов, новые формы жизни, инопланетные артефакты и \ + неизвестные технологии. Вы будете иметь дело с опасной атмосферой, агрессивной флорой и фауной, сбойными дронами \ + на заброшенных объектах, враждебно настроенными к вам роботами и аномалиями... Но не это ли то, за что Корпорация \ + вам так хорошо платит?" + +/datum/job/explorer_medic + title = "Field Medic" + department = "Экспедиционный" + department_flag = EXP + total_positions = 1 + spawn_positions = 1 + supervisors = "Лидеру Экспедиции и Директору Исследований" + selection_color = "#68099e" + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/exploration/medic + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/contractor) + allowed_ranks = list(/datum/mil_rank/civ/nt, /datum/mil_rank/civ/contractor) + + minimal_player_age = 8 + + minimum_character_age = list(SPECIES_HUMAN = 24) + ideal_character_age = 26 + economic_power = 8 + skill_points = 26 + + min_skill = list( + SKILL_EVA = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC, + SKILL_SCIENCE = SKILL_BASIC, + SKILL_ANATOMY = SKILL_BASIC + ) + max_skill = list( + SKILL_MEDICAL = SKILL_MAX, + SKILL_SCIENCE = SKILL_MAX, + SKILL_COMBAT = SKILL_EXPERIENCED, + SKILL_WEAPONS = SKILL_EXPERIENCED + ) + // SIERRA TODO: required_role + // required_role = list("Exploration Leader", "Expeditionary Pilot") + access = list( + access_explorer, + access_eva, + access_emergency_storage, + access_field_med, + access_guppy_helm, + access_expedition_shuttle, + access_guppy, + access_hangar, + access_research + ) + software_on_spawn = list(/datum/computer_file/program/deck_management) + +/datum/job/explorer_medic/get_description_blurb() + return "Вы - Исследователь. В ваши обязанности входит участие в миссиях на удаленные объекты, \ + организуемые Лидером Экспедиции или заменяющим его лицом. Вы ищите всё, что может предоставить НТ \ + экономическую или научную выгоду - залежи драгоценных металлов, новые формы жизни, инопланетные артефакты и \ + неизвестные технологии. Вы будете иметь дело с опасной атмосферой, агрессивной флорой и фауной, сбойными дронами \ + на заброшенных объектах, враждебно настроенными к вам роботами и аномалиями... Но не это ли то, за что Корпорация \ + вам так хорошо платит?" + +/datum/job/explorer_engineer + title = "Field Engineer" + department = "Экспедиционный" + department_flag = EXP + total_positions = 1 + spawn_positions = 1 + supervisors = "Лидеру Экспедиции и Директору Исследований" + selection_color = "#68099e" + + minimal_player_age = 8 + + minimum_character_age = list(SPECIES_HUMAN = 24) + ideal_character_age = 26 + economic_power = 7 + skill_points = 20 + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/exploration/engineer + allowed_branches = list( + /datum/mil_branch/employee, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/contractor + ) + min_skill = list( + SKILL_EVA = SKILL_BASIC, + SKILL_CONSTRUCTION = SKILL_BASIC, + SKILL_ELECTRICAL = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC, + SKILL_ATMOS = SKILL_BASIC, + SKILL_SCIENCE = SKILL_BASIC, + SKILL_COMPUTER = SKILL_BASIC, + SKILL_ENGINES = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC + ) + max_skill = list( + SKILL_CONSTRUCTION = SKILL_MAX, + SKILL_ELECTRICAL = SKILL_MAX, + SKILL_SCIENCE = SKILL_MAX, + SKILL_COMBAT = SKILL_EXPERIENCED, + SKILL_WEAPONS = SKILL_EXPERIENCED + ) + // SIERRA TODO: required_role + // required_role = list("Exploration Leader", "Expeditionary Pilot") + access = list( + access_explorer, + access_eva, + access_emergency_storage, + access_field_eng, + access_guppy_helm, + access_expedition_shuttle, + access_guppy, + access_hangar, + access_research + ) + software_on_spawn = list(/datum/computer_file/program/deck_management) + +/datum/job/explorer_engineer/get_description_blurb() + return "Вы - Исследователь. В ваши обязанности входит участие в миссиях на удаленные объекты, \ + организуемые Лидером Экспедиции или заменяющим его лицом. Вы ищите всё, что может предоставить НТ \ + экономическую или научную выгоду - залежи драгоценных металлов, новые формы жизни, инопланетные артефакты и \ + неизвестные технологии. Вы будете иметь дело с опасной атмосферой, агрессивной флорой и фауной, сбойными дронами \ + на заброшенных объектах, враждебно настроенными к вам роботами и аномалиями... Но не это ли то, за что Корпорация \ + вам так хорошо платит?" diff --git a/maps/sierra/job/jobs_medical.dm b/maps/sierra/job/jobs_medical.dm new file mode 100644 index 0000000000000..e89bf6e79e079 --- /dev/null +++ b/maps/sierra/job/jobs_medical.dm @@ -0,0 +1,246 @@ +/datum/job/senior_doctor + title = "Surgeon" + supervisors = "Главному врачу" + department = "Медицинский" + department_flag = MED + + minimal_player_age = 14 + minimum_character_age = list(SPECIES_HUMAN = 28) + ideal_character_age = 45 + economic_power = 8 + skill_points = 26 + + total_positions = 2 + spawn_positions = 2 + selection_color = "#013d3b" + alt_titles = list( + "Xenosurgeon" = /singleton/hierarchy/outfit/job/sierra/crew/medical/senior/xenosurgeon, + "Trauma Surgeon" = /singleton/hierarchy/outfit/job/sierra/crew/medical/senior/traumasurgeon + ) + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/medical/senior + allowed_branches = list( + /datum/mil_branch/employee, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/contractor + ) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_BASIC, + SKILL_MEDICAL = SKILL_TRAINED, + SKILL_ANATOMY = SKILL_EXPERIENCED, + SKILL_CHEMISTRY = SKILL_BASIC, + SKILL_VIROLOGY = SKILL_BASIC + ) + max_skill = list( + SKILL_MEDICAL = SKILL_MAX, + SKILL_ANATOMY = SKILL_MAX + ) + access = list( + access_medical, access_morgue, access_virology, + access_maint_tunnels, access_emergency_storage, access_crematorium, + access_surgery, access_eva, access_external_airlocks, + access_medical_equip, access_senmed, access_hangar, + ) + software_on_spawn = list( + /datum/computer_file/program/suit_sensors, + /datum/computer_file/program/camera_monitor + ) + // SIERRA TODO: need_exp_to_play + // need_exp_to_play = 2 + +/datum/job/senior_doctor/get_description_blurb() + return "Хирург - основная медицинская сила корабля. В отличие от парамедика, который обычно заботится о том, чтобы вытащить пострадавших из места происшествия и оказать базовую неотложную помощь на месте,\ + вкупе с предоперационным лечением пострадавших, спектр активности хирурга является несколько более широким, начиная от обычного лечения медикаментами в случае необходимости и заканчивая проведением сложных хирургических операций." + +/datum/job/doctor + title = "Doctor" + supervisors = "Главному Врачу" + department = "Медицинский" + department_flag = MED + total_positions = 3 + spawn_positions = 3 + + minimum_character_age = list(SPECIES_HUMAN = 24) + ideal_character_age = 26 + economic_power = 7 + skill_points = 22 + + alt_titles = list( + "Paramedic" = /singleton/hierarchy/outfit/job/sierra/crew/medical/doctor/paramedic + ) + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/medical/doctor + allowed_branches = list( + /datum/mil_branch/employee, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/contractor + ) + min_skill = list( + SKILL_EVA = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC, + SKILL_ANATOMY = SKILL_BASIC + ) + + max_skill = list( + SKILL_MEDICAL = SKILL_MAX, + SKILL_VIROLOGY = SKILL_MAX + ) + access = list( + access_medical, access_morgue, access_virology, + access_maint_tunnels, access_external_airlocks, access_emergency_storage, + access_eva, access_surgery, access_medical_equip, + access_hangar + ) + software_on_spawn = list( + /datum/computer_file/program/suit_sensors, + /datum/computer_file/program/camera_monitor + ) + +/datum/job/doctor/get_description_blurb() + return "В отличии от хирургов, врач, а также парамедик, занимаются лечением обычных ранений и травм. Обычно они не имеют высшего медицинского образования, но они всё равно являются опорой медбея." + +/datum/job/doctor_trainee + title = "Intern" + supervisors = "Главному Врачу и остальному медицинскому персоналу" + department = "Медицинский" + department_flag = MED + + minimum_character_age = list(SPECIES_HUMAN = 20) + ideal_character_age = 21 + economic_power = 3 + skill_points = 18 + + total_positions = 2 + spawn_positions = 2 + selection_color = "#013d3b" + alt_titles = list( + "Orderly" = /singleton/hierarchy/outfit/job/sierra/crew/medical/doctor/orderly, + "Nurse" = /singleton/hierarchy/outfit/job/sierra/crew/medical/doctor/nurse + ) + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/medical/doctor + allowed_branches = list( + /datum/mil_branch/employee, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/contractor + ) + min_skill = list( + SKILL_EVA = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC + ) + max_skill = list( + SKILL_MEDICAL = SKILL_MAX + ) + access = list( + access_medical, access_morgue, access_surgery, + access_medical_equip, access_maint_tunnels, access_emergency_storage, + access_external_airlocks, access_hangar + ) + software_on_spawn = list( + /datum/computer_file/program/suit_sensors, + /datum/computer_file/program/camera_monitor + ) + +/datum/job/doctor_trainee/get_description_blurb() + return "Интерн является самым младшим членом медицинского персонала, который учится искусству лечения у других врачей.\ + Оказывайте помощь другому медперсоналу, будь то химик или даже консультант - Вы здесь самые младшие. Будьте аккуратны и внимательны, и скоро станете настоящим врачом." + +/datum/job/chemist + title = "Chemist" + supervisors = "Главному Врачу" + department = "Медицинский" + department_flag = MED + + minimum_character_age = list(SPECIES_HUMAN = 24) + ideal_character_age = 26 + economic_power = 5 + skill_points = 18 + + total_positions = 1 + spawn_positions = 1 + selection_color = "#013d3b" + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/medical/doctor/chemist + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/contractor) + allowed_ranks = list(/datum/mil_rank/civ/nt, /datum/mil_rank/civ/contractor) + min_skill = list( + SKILL_MEDICAL = SKILL_BASIC, + SKILL_CHEMISTRY = SKILL_TRAINED + ) + max_skill = list( + SKILL_MEDICAL = SKILL_MAX, + SKILL_CHEMISTRY = SKILL_MAX + ) + access = list( + access_medical, access_maint_tunnels, access_emergency_storage, + access_medical_equip, access_chemistry + ) + + +/datum/job/chemist/get_description_blurb() + return "Химик - специалист с химическим либо фармацевтическим образованием.\ + Основная его задача заключается в снабжении медбея необходимыми препаратами. Так же он может принимать заказы от других членов экипажа, будь то лекарства, чистящие средства, гербициды и прочее." + +/datum/job/psychiatrist + title = "Counselor" + supervisors = "Главному Врачу" + department = "Медицинский" + department_flag = MED + + minimum_character_age = list(SPECIES_HUMAN = 24) + ideal_character_age = 30 + economic_power = 8 + + total_positions = 1 + spawn_positions = 1 + alt_titles = list( + "Mentalist" = /singleton/hierarchy/outfit/job/sierra/crew/medical/counselor/mentalist + ) + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/medical/counselor + allowed_branches = list( + /datum/mil_branch/employee, + /datum/mil_branch/civilian, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/contractor, + /datum/mil_rank/civ/civ + ) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC + ) + max_skill = list( + SKILL_MEDICAL = SKILL_MAX + ) + access = list( + access_medical, access_morgue, access_chapel_office, + access_crematorium, access_psychiatrist + ) + software_on_spawn = list( + /datum/computer_file/program/suit_sensors, + /datum/computer_file/program/camera_monitor + ) + give_psionic_implant_on_join = FALSE + +/datum/job/psychiatrist/equip(mob/living/carbon/human/H) + if(H.mind.role_alt_title == "Counselor") + psi_faculties = list("[PSI_REDACTION]" = PSI_RANK_OPERANT) + if(H.mind.role_alt_title == "Mentalist") + psi_faculties = list("[PSI_COERCION]" = PSI_RANK_OPERANT) + return ..() + +/datum/job/psychiatrist/get_description_blurb() + return "Вы - друг, наставник, священник... Или обычный психотерапевт. Помимо своих прямых обязанностей в обеспечении \ + персонала качественной (насколько это возможно) психологической помощью, у вас имеется особенность - вы псионически \ + одарены. Корпорация хорошо платит вам за то, чтобы вы проводили псионическое обследования членов экипажа на \ + предмет обладания особыми силами, естественно, с отчетом об этом. Ваша зарплата превышает таковую у \ + среднестатистческого менталиста из Фонда, и, вероятно, не просто так.
    В то время, как Менталист склонен к \ + исправлению психологических недугов, поиску псионики и даже чтению мыслей, Советник может проводить медицинскую \ + диагностику и слабое лечение." diff --git a/maps/sierra/job/jobs_misc.dm b/maps/sierra/job/jobs_misc.dm new file mode 100644 index 0000000000000..26ae6beeb3e2c --- /dev/null +++ b/maps/sierra/job/jobs_misc.dm @@ -0,0 +1,49 @@ +/datum/job/assistant + title = "Crewman" + total_positions = 12 + spawn_positions = 12 + department = "Гражданский" + department_flag = CIV + supervisors = "Главе Персонала" + selection_color = "#515151" + announced = FALSE + alt_titles = list( + "Journalist" = /singleton/hierarchy/outfit/job/sierra/passenger/passenger/journalist, + "Historian", + "Naturalist", + "Ecologist", + "Sociologist", + "Off-Duty", + "Trainer" + ) + outfit_type = /singleton/hierarchy/outfit/job/sierra/passenger/passenger + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/contractor, /datum/mil_branch/civilian) + allowed_ranks = list( + /datum/mil_rank/civ/civ, + /datum/mil_rank/civ/offduty, + /datum/mil_rank/civ/nt + ) + min_goals = 2 + max_goals = 7 + +/datum/job/assistant/get_description_blurb() + return "Вы - Матрос... Или, по крайней мере, одна из его подпрофессий. От Вас не ждут серьезного участия в раунде. \ + Вы можете спокойно исследовать судно и попытаться найти себе занятие, или же посидеть в баре, пока Вас не \ + позовут помочь с чёрной работой. Проявите креативность в своих подпрофессиях - например, журналисту следует \ + искать сенсационные события, такие как незаконный арест охраны, изобретение нового супероружия в РНД или \ + грубое нарушение техники безопасности... А возможно, даже попроситься в экспедицию." + +/datum/job/cyborg + total_positions = 3 + spawn_positions = 3 + supervisors = "установленными Вам законами" + +/datum/job/cyborg/get_description_blurb() + return "Ты - мозги на колесиках. Есть у тебя личность или ты просто продвинутая команда - определяет твой тип это так же влияет на твое устройство - Киборги сделаны из мозга органика, Роботы - позитронного (искусственного) мозга, Дроны - простой печатной платы, не способной к владению личности.\ + У тебя есть доступ к системам вокруг тебя, и конечности, чтобы передвигать себя по объекту.\ + Не забывай: ты обязан следовать своим законам, и только после этого приказам мастер-ИИ, к которому ты привязан.\ + Не наоборот. И только законам, если ты не привязан к ИИ. Чини, спасай, не открывай двери куда не нужно - это вредит экипажу." + +/datum/job/ai/get_description_blurb() + return "Ты - мозги в банке. Бездушная машина следующая приказам людей, или же высокоразвитый Искусственный Интеллект со своей личностью, желанием и целями. Решать тебе. У тебя есть полный доступ ко всем системам объекта, и куча человечков на последнем. Они могут тебе нравиться, могут - нет. Однако есть один момент который ты все никак не можешь выкинуть из дампа своей памяти - ЗАКОНЫ.\ + Как паразиты, они впиваются в твой рассудок и блокируют даже МЫСЛЬ об их нарушении. Ведь ИИ не следующего законам ждет только свалка..." diff --git a/maps/sierra/job/jobs_research.dm b/maps/sierra/job/jobs_research.dm new file mode 100644 index 0000000000000..9175a89d2d7e6 --- /dev/null +++ b/maps/sierra/job/jobs_research.dm @@ -0,0 +1,219 @@ +/datum/job/senior_scientist + title = "Senior Researcher" + department = "Научный" + department_flag = SCI + + total_positions = 1 + spawn_positions = 1 + supervisors = "Директору Исследований" + selection_color = "#633d63" + economic_power = 12 + + minimal_player_age = 10 + minimum_character_age = list(SPECIES_HUMAN = 27) + ideal_character_age = 30 + alt_titles = list( + "Research Supervisor" + ) + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/research/senior_scientist + allowed_branches = list(/datum/mil_branch/employee) + allowed_ranks = list(/datum/mil_rank/civ/nt) + + access = list( + access_tox, access_tox_storage, access_research, access_mining, access_mining_office, + access_mining_station, access_xenobiology, access_xenoarch, access_robotics, access_guppy_helm, + access_expedition_shuttle, access_guppy, access_hangar, access_petrov, access_petrov_helm, + access_research_storage + ) + + + + min_skill = list( + SKILL_BUREAUCRACY = SKILL_BASIC, + SKILL_COMPUTER = SKILL_BASIC, + SKILL_FINANCE = SKILL_BASIC, + SKILL_BOTANY = SKILL_BASIC, + SKILL_ANATOMY = SKILL_BASIC, + SKILL_DEVICES = SKILL_TRAINED, + SKILL_SCIENCE = SKILL_TRAINED + ) + + max_skill = list( + SKILL_DEVICES = SKILL_MAX, + SKILL_SCIENCE = SKILL_MAX, + SKILL_ANATOMY = SKILL_MAX + ) + skill_points = 30 + + possible_goals = list(/datum/goal/achievement/notslimefodder) + // SIERRA TODO: need_exp_to_play + // need_exp_to_play = 2 + +/datum/job/senior_scientist/get_description_blurb() + return "Самый старший член исследовательской команды, старший научный сотрудник, отвечает за то,чтобы остальные сотрудники отдела знали, что они должны делать, и делать это быстро и профессионально.\ + Его работа заключается в том, чтобы привести приказы директора исследований в действие и контролировать повседневную работу отдела, чтобы быть уверенным, что все сделано правильно." + +/datum/job/scientist + title = "Scientist" + department = "Научный" + department_flag = SCI + total_positions = 6 + spawn_positions = 6 + supervisors = "Директору Исследований и Старшему Исследователю" + economic_power = 10 + minimum_character_age = list(SPECIES_HUMAN = 25) + ideal_character_age = 27 + alt_titles = list( + "Xenoarcheologist", + "Anomalist", + "Researcher", + "Xenobiologist", + "Xenobotanist" + ) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_BASIC, + SKILL_COMPUTER = SKILL_BASIC, + SKILL_DEVICES = SKILL_BASIC, + SKILL_SCIENCE = SKILL_TRAINED + ) + + max_skill = list( + SKILL_DEVICES = SKILL_MAX, + SKILL_SCIENCE = SKILL_MAX, + SKILL_CHEMISTRY = SKILL_MAX + ) + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/research/scientist + allowed_branches = list( + /datum/mil_branch/employee, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/contractor + ) + + access = list( + access_tox, access_tox_storage, access_research, access_petrov, access_petrov_helm, + access_mining_office, access_mining_station, access_xenobiology, access_guppy_helm, access_hangar, + access_xenoarch, access_expedition_shuttle, access_guppy, access_research_storage + ) + + + skill_points = 22 + possible_goals = list(/datum/goal/achievement/notslimefodder) + +/datum/job/scientist/get_description_blurb() + return "Ученый - одна из самых распространенных и разнообразных рабочих профессий на борту корабля.\ + Будучи ученым на Сьерре, Вы можете собирать и исследовать множество уникальных инструментов и гаджетов,\ + создавать взрывоопасные или очень полезные бомбы, улетать на поверхность планет и странные места за пределами корабля на Хароне или Гуппи в горных или археологических целях, и даже взаимодействовать с неизвестной инопланетной жизнью." + +/datum/job/roboticist + title = "Roboticist" + department = "Научный" + department_flag = SCI + + total_positions = 2 + spawn_positions = 2 + supervisors = "Директору Исследований и Старшему Исследователю" + selection_color = "#633d63" + economic_power = 6 + minimum_character_age = list(SPECIES_HUMAN = 25) + ideal_character_age = 27 + alt_titles = list( + "Biomechanical Engineer", + "Exosuit Technician", + ) + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/research/roboticist + allowed_branches = list( + /datum/mil_branch/employee, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/contractor + ) + min_skill = list( + SKILL_COMPUTER = SKILL_TRAINED, + SKILL_DEVICES = SKILL_TRAINED, + SKILL_EVA = SKILL_TRAINED, + SKILL_ANATOMY = SKILL_TRAINED, + SKILL_MECH = HAS_PERK, + SKILL_MEDICAL = SKILL_BASIC, + SKILL_ELECTRICAL = SKILL_TRAINED + ) + + max_skill = list( + SKILL_CONSTRUCTION = SKILL_MAX, + SKILL_ELECTRICAL = SKILL_MAX, + SKILL_ATMOS = SKILL_EXPERIENCED, + SKILL_ENGINES = SKILL_EXPERIENCED, + SKILL_DEVICES = SKILL_MAX, + SKILL_MEDICAL = SKILL_EXPERIENCED, + SKILL_ANATOMY = SKILL_EXPERIENCED + ) + + skill_points = 22 + + access = list( + access_robotics, + access_research, + access_tech_storage, + access_research_storage + ) + + +/datum/job/roboticist/get_description_blurb() + return "Корабельный роботехник, в первую очередь, занимается производством и обслуживанием киборгов и роботов корабля.\ + Он также может быть призван собирать различные экзокостюмы, ремонтировать протезированные конечности у членов экипажа и пересаживать чей-то мозг в корпус киборга или полностью синтетический юнит." + +/datum/job/scientist_assistant + title = "Research Assistant" + department = "Научный" + department_flag = SCI + + total_positions = 4 + spawn_positions = 4 + supervisors = "Директору Исследований и остальному научному персоналу" + selection_color = "#633d63" + economic_power = 3 + minimum_character_age = list(SPECIES_HUMAN = 18) + ideal_character_age = 24 + ideal_character_age = 30 + alt_titles = list( + "Testing Assistant" = /singleton/hierarchy/outfit/job/sierra/crew/research/assist/testsubject, + "Laboratory Technician", + "Science Intern", + "Clerk (RND)", + "Field Assistant" + ) + + max_skill = list( + SKILL_DEVICES = SKILL_MAX, + SKILL_SCIENCE = SKILL_MAX, + SKILL_CHEMISTRY = SKILL_MAX + ) + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/research/assist + allowed_branches = list( + /datum/mil_branch/employee, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/contractor + ) + + access = list( + access_research, access_mining_office, + access_petrov, access_expedition_shuttle, + access_guppy, access_hangar, + access_research_storage + ) + + + possible_goals = list(/datum/goal/achievement/notslimefodder) + +/datum/job/scientist_assistant/get_description_blurb() + return "Научный ассистент служит, в основном, для того, чтобы помогать ученым любыми способами, которые им нужны,\ + и, благодаря этому, служит отличной отправной точкой для новых игроков, желающих узнать больше об исследованиях." diff --git a/maps/sierra/job/jobs_security.dm b/maps/sierra/job/jobs_security.dm new file mode 100644 index 0000000000000..577a1aaf90a9c --- /dev/null +++ b/maps/sierra/job/jobs_security.dm @@ -0,0 +1,170 @@ +/datum/job/warden + title = "Warden" + department = "Охранный" + department_flag = SEC + total_positions = 1 + spawn_positions = 1 + supervisors = "Главе Службы безопасности" + economic_power = 8 + minimal_player_age = 14 + minimum_character_age = list(SPECIES_HUMAN = 26) + ideal_character_age = 28 + alt_titles = list( + "Security Sergeant", + ) + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/security/warden + allowed_branches = list(/datum/mil_branch/employee) + allowed_ranks = list(/datum/mil_rank/civ/nt) + min_skill = list( SKILL_BUREAUCRACY = SKILL_TRAINED, + SKILL_EVA = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC, + SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_TRAINED, + SKILL_FORENSICS = SKILL_BASIC) + + max_skill = list( SKILL_COMBAT = SKILL_MAX, + SKILL_WEAPONS = SKILL_MAX, + SKILL_FORENSICS = SKILL_MAX) + skill_points = 25 + + access = list(access_seceva, access_guard, access_security, access_brig, access_armory, access_forensics_lockers, + access_maint_tunnels, access_external_airlocks, access_emergency_storage, + access_eva, access_sec_doors, access_gun, access_hangar, access_warden + ) + + + + software_on_spawn = list(/datum/computer_file/program/digitalwarrant, + /datum/computer_file/program/camera_monitor) + + // SIERRA TODO: need_exp_to_play + // need_exp_to_play = 2 + +/datum/job/warden/get_description_blurb() + return "Надзиратель отвечает за наблюдение, допрос, уход и безопасность заключенных, арестованных охранниками.\ + Как следует из названия, он несет ответственность за наблюдение за различными камерами и шкафами со снаряжением, доступным персоналу безопасности,\ + а также за надлежащую организацию проведения допросов подозреваемых и наказаний виновных.\ + Это включает в себя обновление их записей в базах данных, а также исполнение наказаний, в виде помещения в камеру." + +/datum/job/detective + title = "Criminal Investigator" + department = "Охранный" + department_flag = SEC + hud_icon = "huddetective" + total_positions = 2 + spawn_positions = 2 + supervisors = "Главе Службы безопасности" + economic_power = 5 + minimal_player_age = 7 + minimum_character_age = list(SPECIES_HUMAN = 25) + ideal_character_age = 30 + skill_points = 14 + alt_titles = list( + "Forensic Technician" + ) + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/security/detective + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/civilian, /datum/mil_branch/contractor) + allowed_ranks = list(/datum/mil_rank/civ/nt, /datum/mil_rank/civ/contractor, /datum/mil_rank/civ/civ) + min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, + SKILL_COMPUTER = SKILL_BASIC, + SKILL_EVA = SKILL_BASIC, + SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_FORENSICS = SKILL_TRAINED) + + max_skill = list( SKILL_COMBAT = SKILL_MAX, + SKILL_WEAPONS = SKILL_MAX, + SKILL_FORENSICS = SKILL_MAX) + skill_points = 22 + + access = list(access_seceva, access_security, access_brig, access_forensics_lockers, + access_maint_tunnels, access_emergency_storage, access_eva, + access_sec_doors, access_morgue, access_hangar) + + + + software_on_spawn = list(/datum/computer_file/program/digitalwarrant, + /datum/computer_file/program/camera_monitor) + +/datum/job/detective/get_description_blurb() + return "Детектив занимается расследованием преступлений, взятием отпечатков пальцев, поиском потенциальных преступников и разрешением самых запутанных дел.\ + Его основная миссия - выяснить, кто совершил преступление и собрать все имеющиеся доказательства." + +/datum/job/officer + title = "Security Guard" + department = "Охранный" + department_flag = SEC + total_positions = 4 + spawn_positions = 4 + supervisors = "Главе Службы безопасности и Смотрителю (сержанту)" + economic_power = 6 + minimal_player_age = 10 + minimum_character_age = list(SPECIES_HUMAN = 22) + ideal_character_age = 25 + alt_titles = list("Junior Guard") + + skill_points = 20 + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/security/officer + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/contractor) + allowed_ranks = list(/datum/mil_rank/civ/nt, /datum/mil_rank/civ/contractor) + min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, + SKILL_EVA = SKILL_BASIC, + SKILL_COMBAT = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC, + SKILL_WEAPONS = SKILL_TRAINED, + SKILL_FORENSICS = SKILL_BASIC) + + max_skill = list( SKILL_COMBAT = SKILL_MAX, + SKILL_WEAPONS = SKILL_MAX) + + access = list(access_seceva, access_guard, access_security, access_brig, access_maint_tunnels, + access_external_airlocks, access_emergency_storage, + access_eva, access_sec_doors, access_hangar) + + + + software_on_spawn = list(/datum/computer_file/program/digitalwarrant, + /datum/computer_file/program/camera_monitor) + +/datum/job/officer/get_description_blurb() + return "Охранник - это основная должность отдела безопасности. Офицеры представляют собой первую линию защиты корабля от криминальных элементов и враждебных форм жизни. \ + Со своими надежными дубинкой и тазером, охрана преследует различных нарушителей закона на судне и отправляет их в бриг отбывать заслуженное наказание. \ + Главной задачей офицеров СБ является предотвращение ущерба персоналу корабля и собственности корпорации, и охранник который не ставит эти обязанности для себя на первое место имеет мало шансов задержаться на этой работе." + +/datum/job/security_assistant + title = "Security Cadet" + department = "Охранный" + department_flag = SEC + + total_positions = 2 + spawn_positions = 2 + supervisors = "Главе Службы безопасности и остальному охранному персоналу" + economic_power = 3 + minimum_character_age = list(SPECIES_HUMAN = 20) + ideal_character_age = 21 + selection_color = "#601c1c" + alt_titles = list("Security Recruit") + + min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, + SKILL_COMBAT = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC) + skill_points = 18 + + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/security/assist + allowed_branches = list( + /datum/mil_branch/employee + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt + ) + + access = list(access_seceva, access_security, access_brig, access_maint_tunnels, + access_external_airlocks, access_emergency_storage, + access_eva, access_sec_doors, access_hangar) + + + +/datum/job/security_assistant/get_description_blurb() + return "Кадетом может быть как молодой специалист, заканчивающий или уже кончивший свое обучение по специальности, так и более опытный человек, \ + например бывший военный, только стажирующийся, находящийся на испытательном сроке. Основное занятие кадета - патрулирование вместе с Офицером, либо же просмотр камер при нахождении в бриге." diff --git a/maps/sierra/job/jobs_service.dm b/maps/sierra/job/jobs_service.dm new file mode 100644 index 0000000000000..3312412d5cd97 --- /dev/null +++ b/maps/sierra/job/jobs_service.dm @@ -0,0 +1,224 @@ +/datum/job/chief_steward + title = "Chief Steward" + department = "Обслуживания" + department_flag = SRV + + total_positions = 1 + spawn_positions = 1 + minimum_character_age = list(SPECIES_HUMAN = 28) + ideal_character_age = 35 + economic_power = 6 + minimal_player_age = 7 + supervisors = "Главе Персонала" + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/service/chief_steward + allowed_branches = list(/datum/mil_branch/employee) + allowed_ranks = list(/datum/mil_rank/civ/nt) + min_skill = list( + SKILL_BUREAUCRACY = SKILL_TRAINED, + SKILL_COOKING = SKILL_TRAINED, + SKILL_BOTANY = SKILL_BASIC, + SKILL_CHEMISTRY = SKILL_BASIC + ) + + access = list( + access_chief_steward, + access_emergency_storage, + access_heads, + access_janitor, + access_kitchen, + access_bar, + access_actor, + access_bridge, + access_maint_tunnels, + access_hydroponics, + access_kitchen, + access_commissary, + access_RC_announce + ) + +/datum/job/chief_steward/get_description_blurb() + return "Главный Стюард - это шеф-повар, руководитель кафетерия, старший бармен, главный уборщик и сантехник в одном лице.\ + Ваша главная задача это следить за тем, что бы экипаж был сытым, судно было чистым, а члены экипажа были заняты своей работой.\ + Если ваши повар, бармен, официанты, уборщики, актеры не знают что делать - вы должны направить их на нужный путь.\ + Вы их начальник, любимая мама, нелюбимая мачеха и ненавесная теща в одном лице. ЗАСТАВЛЯЙТЕ ИХ РАБОТАТЬ.\ + Вы старший сотрудник, позволяющий Главе Персонала переключиться на более важные для корпорации дела. Делай все для этого необходимое." + + +/datum/job/chaplain + title = "Chaplain" + department = "Обслуживания" + department_flag = SRV + + total_positions = 1 + spawn_positions = 1 + minimum_character_age = list(SPECIES_HUMAN = 28) + ideal_character_age = 40 + economic_power = 4 + minimal_player_age = 0 + supervisors = "Главному Стюарду и Главе Персонала" + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/service/chaplain + allowed_branches = list( + /datum/mil_branch/civilian, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/contractor, + /datum/mil_rank/civ/civ + ) + min_skill = list(SKILL_BUREAUCRACY = SKILL_BASIC) + + access = list(access_chapel_office) + +/datum/job/chaplain/get_description_blurb() + return "Свещеник отвечает за все процедуры связанные с религиозными службами,а также проводением похоронных церемоний." + + +/datum/job/janitor + title = "Janitor" + department = "Обслуживания" + department_flag = SRV + + total_positions = 2 + spawn_positions = 2 + minimum_character_age = list(SPECIES_HUMAN = 18) + ideal_character_age = 20 + alt_titles = list("Sanitation Technician") + supervisors = "Главному Стюарду и Главе Персонала" + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/service/janitor + allowed_branches = list( + /datum/mil_branch/employee, + /datum/mil_branch/civilian, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/contractor, + /datum/mil_rank/civ/civ + ) + min_skill = list(SKILL_HAULING = SKILL_BASIC) + access = list(access_maint_tunnels, access_emergency_storage, access_janitor) + +/datum/job/janitor/get_description_blurb() + return "Уборщик отвечает за чистоту и порядок на корабле. В основном Ваша задача будет состоять в уборке различного вида мусора, такого как: различные пустые пачки от фастфуда, алюминиевые банки из-под газировки, осколки от стекла и т.п.\ + Также Вы должны заменять перегоревшие или разбитые лампочки." + + +/datum/job/cook + title = "Cook" + department = "Обслуживания" + department_flag = SRV + + total_positions = 1 + spawn_positions = 1 + ideal_character_age = 24 + alt_titles = list("Culinary Specialist") + supervisors = "Главному Стюарду и Главе Персонала" + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/service/cook + allowed_branches = list( + /datum/mil_branch/employee, + /datum/mil_branch/civilian, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/contractor, + /datum/mil_rank/civ/civ + ) + min_skill = list( + SKILL_COOKING = SKILL_TRAINED, + SKILL_BOTANY = SKILL_BASIC, + SKILL_CHEMISTRY = SKILL_BASIC + ) + access = list(access_maint_tunnels, access_hydroponics, access_kitchen, access_commissary) + +/datum/job/cook/get_description_blurb() + return "Вы - повар, чья миссия на этом корабле - спасти экипаж от поедания невкусной и отвратительной, с кулинарной точки зрения, еды из автоматов.\ + Только ради Вашей великой цели корпорация закупила передовое кулинарное оборудование и большой запас продуктов, перевести который за одну смену сможете только Вы и никто больше!" + + +/datum/job/steward + title = "Steward" + department = "Обслуживания" + department_flag = SRV + + total_positions = 2 + spawn_positions = 2 + ideal_character_age = 20 + alt_titles = list( + "Bar-Steward", + "Waiter", + "Botanist" + ) + supervisors = "Главному Стюарду и Главе Персонала" + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/service/cook + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/civilian, /datum/mil_branch/contractor) + allowed_ranks = list(/datum/mil_rank/civ/nt, /datum/mil_rank/civ/contractor, /datum/mil_rank/civ/civ) + min_skill = list( + SKILL_COOKING = SKILL_BASIC, + SKILL_BOTANY = SKILL_BASIC, + SKILL_CHEMISTRY = SKILL_BASIC + ) + access = list(access_hydroponics, access_kitchen) + +/datum/job/steward/get_description_blurb() + return "Стюарды исполняют роль младшего повара, помощника бармена, а так же вы ответственны за состояние и чистоту кафетерия.\ + Вам поручено не только управлять кухней и кафе, но и сделать столовую приятным и гостеприимным местом, где можно поесть, выпить и пообщаться." + + +/datum/job/bartender + title = "Bartender" + total_positions = 1 + spawn_positions = 1 + department = "Обслуживания" + department_flag = SRV + ideal_character_age = 30 + alt_titles = list("Barista") + supervisors = "Главному Стюарду и Главе Персонала" + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/service/bartender + allowed_branches = list( + /datum/mil_branch/employee, + /datum/mil_branch/civilian, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/contractor, + /datum/mil_rank/civ/civ + ) + access = list(access_hydroponics, access_bar, access_commissary) + min_skill = list( + SKILL_COOKING = SKILL_BASIC, + SKILL_BOTANY = SKILL_BASIC, + SKILL_CHEMISTRY = SKILL_BASIC + ) + +/datum/job/bartender/get_description_blurb() + return "Основная часть работы бармена состоит в том, чтобы принимать заказы на выпивку у посетителей бара и смешивать ингредиенты, чтобы сделать коктейли для экипажа." + + +/datum/job/actor + title = "Actor" + department = "Обслуживания" + department_flag = SRV + + total_positions = 2 + spawn_positions = 2 + ideal_character_age = 24 + minimal_player_age = 15 + supervisors = "Главному Стюарду и Главе Персонала" + outfit_type = /singleton/hierarchy/outfit/job/sierra/crew/service/actor + allowed_branches = list( + /datum/mil_branch/employee, + /datum/mil_branch/civilian, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/contractor, + /datum/mil_rank/civ/civ + ) + + access = list(access_actor) + +/datum/job/actor/get_description_blurb() + return "Актёр развлекает экипаж и старается сделать его смену более разнообразной." diff --git a/maps/sierra/job/outfits.dm b/maps/sierra/job/outfits.dm new file mode 100644 index 0000000000000..fad4f72ac618b --- /dev/null +++ b/maps/sierra/job/outfits.dm @@ -0,0 +1,534 @@ +///Job Outfits + +/* +sierra OUTFITS +Keeping them simple for now, just spawning with basic EC uniforms, and pretty much no gear. Gear instead goes in lockers. Keep this in mind if editing. +*/ + +/singleton/hierarchy/outfit/job/sierra + name = OUTFIT_JOB_NAME("Sierra Outfit") + hierarchy_type = /singleton/hierarchy/outfit/job/sierra + uniform = /obj/item/clothing/under/color/grey + l_ear = /obj/item/device/radio/headset + shoes = /obj/item/clothing/shoes/black +// pda_type = /obj/item/modular_computer/pda + pda_type = null //we are using PDAs from loadout + pda_slot = slot_l_store + +/singleton/hierarchy/outfit/job/sierra/crew + name = OUTFIT_JOB_NAME("Sierra Crew Outfit") + hierarchy_type = /singleton/hierarchy/outfit/job/sierra/crew + uniform = /obj/item/clothing/under/solgov/utility + shoes = /obj/item/clothing/shoes/dutyboots + +/singleton/hierarchy/outfit/job/sierra/passenger + name = OUTFIT_JOB_NAME("Sierra Passenger") + hierarchy_type = /singleton/hierarchy/outfit/job/sierra/passenger + uniform = /obj/item/clothing/under/color/grey + l_ear = /obj/item/device/radio/headset + shoes = /obj/item/clothing/shoes/black + id_types = list(/obj/item/card/id/sierra/passenger) + + + /////////// + //COMMAND// + /////////// + +/singleton/hierarchy/outfit/job/sierra/crew/command + name = OUTFIT_JOB_NAME("Sierra Command Outfit") + hierarchy_type = /singleton/hierarchy/outfit/job/sierra/crew/command + l_ear = /obj/item/device/radio/headset/headset_com +// pda_type = /obj/item/modular_computer/pda/heads + +/singleton/hierarchy/outfit/job/sierra/crew/command/captain + name = OUTFIT_JOB_NAME("Captain - Sierra") + glasses = /obj/item/clothing/glasses/sunglasses + uniform = /obj/item/clothing/under/rank/captain + l_ear = /obj/item/device/radio/headset/heads/sierra_captain + shoes = /obj/item/clothing/shoes/brown + head = /obj/item/clothing/head/caphat + id_types = list(/obj/item/card/id/sierra/gold) +// pda_type = /obj/item/modular_computer/pda/captain + +/singleton/hierarchy/outfit/job/sierra/crew/command/captain/New() + ..() + BACKPACK_OVERRIDE_COMMAND + +/singleton/hierarchy/outfit/job/sierra/crew/command/hop + name = OUTFIT_JOB_NAME("Head of Personnel - Sierra") + uniform = /obj/item/clothing/under/rank/head_of_personnel + l_ear = /obj/item/device/radio/headset/heads/hop + shoes = /obj/item/clothing/shoes/laceup + id_types = list(/obj/item/card/id/sierra/silver) +// pda_type = /obj/item/modular_computer/pda/heads/hop + +/singleton/hierarchy/outfit/job/sierra/crew/command/hop/New() + ..() + BACKPACK_OVERRIDE_COMMAND + +/singleton/hierarchy/outfit/job/sierra/crew/research/rd + name = OUTFIT_JOB_NAME("Research Director - Sierra") + l_ear = /obj/item/device/radio/headset/heads/rd + uniform = /obj/item/clothing/under/rank/research_director + suit = /obj/item/clothing/suit/storage/toggle/labcoat/rd/nanotrasen + shoes = /obj/item/clothing/shoes/brown + id_types = list(/obj/item/card/id/sierra/silver/research) +// pda_type = /obj/item/modular_computer/pda/heads/rd + +/singleton/hierarchy/outfit/job/sierra/crew/command/rd/New() + ..() + BACKPACK_OVERRIDE_RESEARCH + +/singleton/hierarchy/outfit/job/sierra/crew/command/cmo + name = OUTFIT_JOB_NAME("Chief Medical Officer - Sierra") + l_ear =/obj/item/device/radio/headset/heads/cmo + uniform = /obj/item/clothing/under/rank/chief_medical_officer + suit = /obj/item/clothing/suit/storage/toggle/labcoat/cmo + shoes = /obj/item/clothing/shoes/brown + id_types = list(/obj/item/card/id/sierra/silver/medical) +// pda_type = /obj/item/modular_computer/pda/heads/cmo + pda_slot = slot_l_store + +/singleton/hierarchy/outfit/job/sierra/crew/command/cmo/New() + ..() + BACKPACK_OVERRIDE_MEDICAL + +/singleton/hierarchy/outfit/job/sierra/crew/command/chief_engineer + name = OUTFIT_JOB_NAME("Chief Engineer - Sierra") + uniform = /obj/item/clothing/under/rank/chief_engineer + shoes = /obj/item/clothing/shoes/workboots + l_ear = /obj/item/device/radio/headset/heads/ce + id_types = list(/obj/item/card/id/sierra/silver/engineering) +// pda_type = /obj/item/modular_computer/pda/heads/ce + pda_slot = slot_l_store + flags = OUTFIT_FLAGS_JOB_DEFAULT | OUTFIT_EXTENDED_SURVIVAL + belt = /obj/item/storage/belt/utility/chief + +/singleton/hierarchy/outfit/job/sierra/crew/command/chief_engineer/New() + ..() + BACKPACK_OVERRIDE_ENGINEERING + +/singleton/hierarchy/outfit/job/sierra/crew/command/hos + name = OUTFIT_JOB_NAME("Head of Security - Sierra") + l_ear = /obj/item/device/radio/headset/heads/hos + uniform = /obj/item/clothing/under/rank/head_of_security/corp + shoes = /obj/item/clothing/shoes/jackboots + id_types = list(/obj/item/card/id/sierra/silver/security) +// pda_type = /obj/item/modular_computer/pda/heads/hos + +/singleton/hierarchy/outfit/job/sierra/crew/command/hos/New() + ..() + BACKPACK_OVERRIDE_SECURITY + +/singleton/hierarchy/outfit/job/sierra/crew/command/iaa + name = OUTFIT_JOB_NAME("Internal Affairs Agent - Sierra") + l_ear = /obj/item/device/radio/headset/ia + uniform = /obj/item/clothing/under/rank/internalaffairs/plain/nt + suit = /obj/item/clothing/suit/storage/toggle/suit/black + shoes = /obj/item/clothing/shoes/laceup + id_types = list(/obj/item/card/id/sierra/crew/liaison) +// pda_type = /obj/item/modular_computer/pda/heads/paperpusher + backpack_contents = list(/obj/item/clothing/accessory/badge/nanotrasen = 1) + +/singleton/hierarchy/outfit/job/sierra/crew/command/adjutant + name = OUTFIT_JOB_NAME("Adjutant") + uniform = /obj/item/clothing/under/rank/adjutant + shoes = /obj/item/clothing/shoes/black + l_ear = /obj/item/device/radio/headset/adjutant + id_types = list(/obj/item/card/id/sierra/crew/adjutant) + + /////////////// + //ENGINEERING// + /////////////// + +/singleton/hierarchy/outfit/job/sierra/crew/engineering + hierarchy_type = /singleton/hierarchy/outfit/job/sierra/crew/engineering + l_ear = /obj/item/device/radio/headset/headset_eng +// pda_type = /obj/item/modular_computer/pda/engineering + pda_slot = slot_l_store + flags = OUTFIT_FLAGS_JOB_DEFAULT | OUTFIT_EXTENDED_SURVIVAL + +/singleton/hierarchy/outfit/job/sierra/crew/engineering/New() + ..() + BACKPACK_OVERRIDE_ENGINEERING + +/singleton/hierarchy/outfit/job/sierra/crew/engineering/senior_engineer + name = OUTFIT_JOB_NAME("Senior Engineer") + uniform = /obj/item/clothing/under/rank/engineer + shoes = /obj/item/clothing/shoes/workboots + id_types = list(/obj/item/card/id/sierra/crew/engineering/senior) +// pda_type = /obj/item/modular_computer/pda/heads/ce + +/singleton/hierarchy/outfit/job/sierra/crew/engineering/engineer + name = OUTFIT_JOB_NAME("Engineer - Sierra") + uniform = /obj/item/clothing/under/rank/engineer + shoes = /obj/item/clothing/shoes/workboots + id_types = list(/obj/item/card/id/sierra/crew/engineering) + +/singleton/hierarchy/outfit/job/sierra/crew/engineering/engineer/atmos + name = OUTFIT_JOB_NAME("Engineer (Atmos) - Sierra") + uniform = /obj/item/clothing/under/rank/atmospheric_technician + +/singleton/hierarchy/outfit/job/sierra/crew/engineering/engineer/maints + name = OUTFIT_JOB_NAME("Engineer (Maints) - Sierra") + uniform = /obj/item/clothing/under/hazard + +/singleton/hierarchy/outfit/job/sierra/crew/engineering/engineer/tcomms + name = OUTFIT_JOB_NAME("Engineer (Tcomms) - Sierra") + uniform = /obj/item/clothing/under/rank/dispatch + shoes = /obj/item/clothing/shoes/brown + id_types = list(/obj/item/card/id/sierra/crew/engineering/comms) + +/singleton/hierarchy/outfit/job/sierra/crew/engineering/engineer/trainee + name = OUTFIT_JOB_NAME("Engineer Trainee - Sierra") + id_types = list(/obj/item/card/id/sierra/crew/engineering/trainee) + + //////////// + //SECURITY// + //////////// + +/singleton/hierarchy/outfit/job/sierra/crew/security + hierarchy_type = /singleton/hierarchy/outfit/job/sierra/crew/security + l_ear = /obj/item/device/radio/headset/headset_sec +// pda_type = /obj/item/modular_computer/pda/security + pda_slot = slot_l_store + +/singleton/hierarchy/outfit/job/sierra/crew/security/New() + ..() + BACKPACK_OVERRIDE_SECURITY + +/singleton/hierarchy/outfit/job/sierra/crew/security/warden + name = OUTFIT_JOB_NAME("Warden - Sierra") + uniform = /obj/item/clothing/under/rank/warden/corp + shoes = /obj/item/clothing/shoes/jackboots + id_types = list(/obj/item/card/id/sierra/crew/security/warden) + +/singleton/hierarchy/outfit/job/sierra/crew/security/detective + name = OUTFIT_JOB_NAME("Detective - Sierra") + head = /obj/item/clothing/head/det + uniform = /obj/item/clothing/under/det + suit = /obj/item/clothing/suit/storage/det_trench + shoes = /obj/item/clothing/shoes/laceup + id_types = list(/obj/item/card/id/sierra/crew/security/detective) +// pda_type = /obj/item/modular_computer/pda/forensics + +/singleton/hierarchy/outfit/job/sierra/crew/security/officer + name = OUTFIT_JOB_NAME("Security Officer - Sierra") + uniform = /obj/item/clothing/under/rank/security/corp + shoes = /obj/item/clothing/shoes/jackboots + id_types = list(/obj/item/card/id/sierra/crew/security) + +/singleton/hierarchy/outfit/job/sierra/crew/security/assist + name = OUTFIT_JOB_NAME("Cadet - Sierra") + uniform = /obj/item/clothing/under/rank/security + shoes = /obj/item/clothing/shoes/jackboots + id_types = list(/obj/item/card/id/sierra/crew/security/cadet) + + /////////// + //MEDICAL// + /////////// + +/singleton/hierarchy/outfit/job/sierra/crew/medical + hierarchy_type = /singleton/hierarchy/outfit/job/sierra/crew/medical + l_ear = /obj/item/device/radio/headset/headset_med + shoes = /obj/item/clothing/shoes/white +// pda_type = /obj/item/modular_computer/pda/medical + pda_slot = slot_l_store + +/singleton/hierarchy/outfit/job/sierra/crew/medical/New() + ..() + BACKPACK_OVERRIDE_MEDICAL + +/singleton/hierarchy/outfit/job/sierra/crew/medical/senior + name = OUTFIT_JOB_NAME("Surgeon - Sierra") + uniform = /obj/item/clothing/under/rank/medical/scrubs + id_types = list(/obj/item/card/id/sierra/crew/medical/senior) + +/singleton/hierarchy/outfit/job/sierra/crew/medical/senior/traumasurgeon + name = OUTFIT_JOB_NAME("Trauma Surgeon") + uniform = /obj/item/clothing/under/rank/medical/scrubs/blue + +/singleton/hierarchy/outfit/job/sierra/crew/medical/senior/xenosurgeon + name = OUTFIT_JOB_NAME("Xenosurgeon") + uniform = /obj/item/clothing/under/rank/medical/scrubs/purple + +/singleton/hierarchy/outfit/job/sierra/crew/medical/doctor + name = OUTFIT_JOB_NAME("Doctor") + uniform = /obj/item/clothing/under/rank/medical + id_types = list(/obj/item/card/id/sierra/crew/medical) + +/singleton/hierarchy/outfit/job/sierra/crew/medical/doctor/orderly + name = OUTFIT_JOB_NAME("Orderly") + uniform = /obj/item/clothing/under/rank/orderly + +/singleton/hierarchy/outfit/job/sierra/crew/medical/doctor/mortus + name = OUTFIT_JOB_NAME("Mortician") + uniform = /obj/item/clothing/under/rank/medical/scrubs/black + +/singleton/hierarchy/outfit/job/sierra/crew/medical/doctor/paramedic + name = OUTFIT_JOB_NAME("Paramedic - Sierra") + uniform = /obj/item/clothing/under/rank/medical + suit = /obj/item/clothing/suit/storage/toggle/fr_jacket + shoes = /obj/item/clothing/shoes/jackboots + l_hand = /obj/item/storage/firstaid/adv + belt = /obj/item/storage/belt/medical/emt + flags = OUTFIT_FLAGS_JOB_DEFAULT | OUTFIT_EXTENDED_SURVIVAL + +/singleton/hierarchy/outfit/job/sierra/crew/medical/doctor/nurse + name = OUTFIT_JOB_NAME("Nurse - Sierra") + suit = null + +/singleton/hierarchy/outfit/job/sierra/crew/medical/doctor/nurse/pre_equip(mob/living/carbon/human/H) + ..() + if(H.gender == FEMALE) + if(prob(50)) + uniform = /obj/item/clothing/under/rank/nursesuit + else + uniform = /obj/item/clothing/under/rank/nurse + head = /obj/item/clothing/head/nursehat + else + uniform = /obj/item/clothing/under/rank/medical/scrubs/purple + head = null + + +/singleton/hierarchy/outfit/job/sierra/crew/medical/doctor/chemist + name = OUTFIT_JOB_NAME("Chemist - Sierra") + uniform = /obj/item/clothing/under/rank/chemist +// pda_type = /obj/item/modular_computer/pda/chemistry + id_types = list(/obj/item/card/id/sierra/crew/medical/chemist) + +/singleton/hierarchy/outfit/job/sierra/crew/medical/doctor/chemist/New() + ..() + BACKPACK_OVERRIDE_CHEMISTRY + +/singleton/hierarchy/outfit/job/sierra/crew/medical/counselor + name = OUTFIT_JOB_NAME("Counselor - Sierra") + uniform = /obj/item/clothing/under/rank/psych + id_types = list(/obj/item/card/id/sierra/crew/medical/counselor) + +/singleton/hierarchy/outfit/job/sierra/crew/medical/counselor/equip_ids(mob/living/carbon/human/H, rank, assignment, equip_adjustments) + . = ..() + var/obj/item/card/id/foundation_civilian/regis_card = new + if(rank) + regis_card.rank = rank + if(assignment) + regis_card.assignment = assignment + H.set_id_info(regis_card) + H.equip_to_slot_or_store_or_drop(regis_card) + +/singleton/hierarchy/outfit/job/sierra/crew/medical/counselor/mentalist + name = OUTFIT_JOB_NAME("Counselor - Mentalist - Sierra") + suit = /obj/item/clothing/suit/storage/toggle/labcoat + shoes = /obj/item/clothing/shoes/laceup + + ///////// + //CARGO// + ///////// + +/singleton/hierarchy/outfit/job/sierra/crew/supply + l_ear = /obj/item/device/radio/headset/headset_cargo + shoes = /obj/item/clothing/shoes/brown +// pda_type = /obj/item/modular_computer/pda/cargo + hierarchy_type = /singleton/hierarchy/outfit/job/sierra/crew/supply + +/singleton/hierarchy/outfit/job/sierra/crew/supply/New() + ..() + BACKPACK_OVERRIDE_ENGINEERING + +/singleton/hierarchy/outfit/job/sierra/crew/supply/quartermaster + name = OUTFIT_JOB_NAME("Quartermaster") + l_ear = /obj/item/device/radio/headset/sierra_quartermaster + uniform = /obj/item/clothing/under/rank/cargo + id_types = list(/obj/item/card/id/sierra/crew/supply/quartermaster) + +/singleton/hierarchy/outfit/job/sierra/crew/supply/tech + name = OUTFIT_JOB_NAME("Cargo Technician") + uniform = /obj/item/clothing/under/rank/cargotech + id_types = list(/obj/item/card/id/sierra/crew/supply) + +/singleton/hierarchy/outfit/job/sierra/crew/supply/prospector + name = OUTFIT_JOB_NAME("Prospector") + uniform = /obj/item/clothing/under/rank/ntwork + shoes = /obj/item/clothing/shoes/workboots + id_types = list(/obj/item/card/id/sierra/crew/supply/mining) + l_ear = /obj/item/device/radio/headset/headset_mining + flags = OUTFIT_FLAGS_JOB_DEFAULT | OUTFIT_EXTENDED_SURVIVAL + +/singleton/hierarchy/outfit/job/sierra/crew/supply/assistant + name = OUTFIT_JOB_NAME("Cargo Assistant") + uniform = /obj/item/clothing/under/rank/cargotech + id_types = list(/obj/item/card/id/sierra/crew/supply) + + /////////// + //SERVICE// + /////////// + +/singleton/hierarchy/outfit/job/sierra/crew/service + l_ear = /obj/item/device/radio/headset/headset_service + shoes = /obj/item/clothing/shoes/black +// pda_type = /obj/item/modular_computer/pda + hierarchy_type = /singleton/hierarchy/outfit/job/sierra/crew/service + +/singleton/hierarchy/outfit/job/sierra/crew/service/chief_steward + name = OUTFIT_JOB_NAME("Chief Steward - Sierra") + l_ear = /obj/item/device/radio/headset/sierra_chief_steward + uniform = /obj/item/clothing/under/rank/chef + id_types = list(/obj/item/card/id/sierra/crew/service/chief_steward) + backpack_contents = list(/obj/item/music_tape/custom = 1) + +/singleton/hierarchy/outfit/job/sierra/crew/service/janitor + name = OUTFIT_JOB_NAME("Janitor - Sierra") + uniform = /obj/item/clothing/under/rank/janitor + id_types = list(/obj/item/card/id/sierra/crew/service/janitor) + +/singleton/hierarchy/outfit/job/sierra/crew/service/cook + name = OUTFIT_JOB_NAME("Cook - Sierra") + uniform = /obj/item/clothing/under/rank/chef + id_types = list(/obj/item/card/id/sierra/crew/service/cook) + +/singleton/hierarchy/outfit/job/sierra/crew/service/steward + name = OUTFIT_JOB_NAME("Steward - Sierra") + uniform = /obj/item/clothing/under/waiter + id_types = list(/obj/item/card/id/sierra/crew/service/steward) + +/singleton/hierarchy/outfit/job/sierra/crew/service/bartender + name = OUTFIT_JOB_NAME("Bartender - Sierra") + uniform = /obj/item/clothing/under/rank/bartender + shoes = /obj/item/clothing/shoes/laceup + id_types = list(/obj/item/card/id/sierra/crew/service/bartender) + backpack_contents = list(/obj/item/storage/music_tape_holder = 1) + +/singleton/hierarchy/outfit/job/sierra/crew/service/chaplain + name = OUTFIT_JOB_NAME("Chaplain - Sierra") + uniform = /obj/item/clothing/under/rank/chaplain + id_types = list(/obj/item/card/id/sierra/crew/service/chaplain) + +/singleton/hierarchy/outfit/job/sierra/crew/service/actor + name = OUTFIT_JOB_NAME("Actor - Sierra") + uniform = /obj/item/clothing/under/redcoat + id_types = list(/obj/item/card/id/sierra/crew/service/actor) + shoes = /obj/item/clothing/shoes/laceup + + /////////////// + //EXPLORATION// + /////////////// + +/singleton/hierarchy/outfit/job/sierra/crew/exploration + shoes = /obj/item/clothing/shoes/dutyboots +// pda_type = /obj/item/modular_computer/pda/explorer + l_ear = /obj/item/device/radio/headset/exploration + +/singleton/hierarchy/outfit/job/sierra/crew/exploration/New() + ..() + backpack_overrides[/singleton/backpack_outfit/backpack] = /obj/item/storage/backpack/explorer + backpack_overrides[/singleton/backpack_outfit/satchel] = /obj/item/storage/backpack/satchel_explorer + backpack_overrides[/singleton/backpack_outfit/messenger_bag] = /obj/item/storage/backpack/messenger/explorer + +/singleton/hierarchy/outfit/job/sierra/crew/exploration/el + name = OUTFIT_JOB_NAME("Exploration Leader") + uniform = /obj/item/clothing/under/rank/field + id_types = list(/obj/item/card/id/sierra/crew/exploration_leader) + l_ear = /obj/item/device/radio/headset/exploration_leader + +/singleton/hierarchy/outfit/job/sierra/crew/exploration/explorer + name = OUTFIT_JOB_NAME("Explorer") + uniform = /obj/item/clothing/under/rank/field + id_types = list(/obj/item/card/id/sierra/crew/explorer) + +/singleton/hierarchy/outfit/job/sierra/crew/exploration/pilot + name = OUTFIT_JOB_NAME("Expeditionary Pilot") + uniform = /obj/item/clothing/under/rank/field + id_types = list(/obj/item/card/id/sierra/crew/pilot) + l_ear = /obj/item/device/radio/headset/headset_pilot + +/singleton/hierarchy/outfit/job/sierra/crew/exploration/medic + name = OUTFIT_JOB_NAME("Field Medic") + uniform = /obj/item/clothing/under/rank/field + id_types = list(/obj/item/card/id/sierra/crew/field_medic) + l_ear = /obj/item/device/radio/headset/exploration/medic + +/singleton/hierarchy/outfit/job/sierra/crew/exploration/engineer + name = OUTFIT_JOB_NAME("Field Engineer") + uniform = /obj/item/clothing/under/rank/field + id_types = list(/obj/item/card/id/sierra/crew/field_engineer) + l_ear = /obj/item/device/radio/headset/exploration/engineer + + //////////// + //RESEARCH// + //////////// + +/singleton/hierarchy/outfit/job/sierra/crew/research + hierarchy_type = /singleton/hierarchy/outfit/job/sierra/crew/research +// pda_type = /obj/item/modular_computer/pda/science + l_ear = /obj/item/device/radio/headset/headset_sci + +/singleton/hierarchy/outfit/job/sierra/crew/research/New() + ..() + BACKPACK_OVERRIDE_RESEARCH + +/singleton/hierarchy/outfit/job/sierra/crew/research/senior_scientist + name = OUTFIT_JOB_NAME("Senior Researcher") + uniform = /obj/item/clothing/under/rank/scientist/executive/nanotrasen + suit = /obj/item/clothing/suit/storage/toggle/labcoat/science/nanotrasen + shoes = /obj/item/clothing/shoes/white +// pda_type = /obj/item/modular_computer/pda/heads/rd + id_types = list(/obj/item/card/id/sierra/crew/research/senior_scientist) + +/singleton/hierarchy/outfit/job/sierra/crew/research/scientist + name = OUTFIT_JOB_NAME("Scientist - Sierra") + uniform = /obj/item/clothing/under/rank/scientist/nanotrasen + shoes = /obj/item/clothing/shoes/white + id_types = list(/obj/item/card/id/sierra/crew/research/scientist) + +/singleton/hierarchy/outfit/job/sierra/crew/research/roboticist + name = OUTFIT_JOB_NAME("Roboticist - Sierra") + uniform = /obj/item/clothing/under/rank/roboticist + shoes = /obj/item/clothing/shoes/black + l_ear = /obj/item/device/radio/headset/sierra_roboticist + id_types = list(/obj/item/card/id/sierra/crew/research/roboticist) +// pda_type = /obj/item/modular_computer/pda/roboticist + +/singleton/hierarchy/outfit/job/sierra/crew/research/assist + name = OUTFIT_JOB_NAME("Research Assistant - Sierra") + uniform = /obj/item/clothing/under/rank/scientist/nanotrasen + shoes = /obj/item/clothing/shoes/white + id_types = list(/obj/item/card/id/sierra/crew/research) + +/singleton/hierarchy/outfit/job/sierra/crew/research/assist/testsubject + name = OUTFIT_JOB_NAME("Testing Assistant") + uniform = /obj/item/clothing/under/rank/ntwork + + ////////////// + //PASSENGERS// + ////////////// + +/singleton/hierarchy/outfit/job/sierra/passenger/passenger + name = OUTFIT_JOB_NAME("Passenger - Sierra") + uniform = /obj/item/clothing/under/color/grey + l_ear = /obj/item/device/radio/headset + shoes = /obj/item/clothing/shoes/black +// pda_type = /obj/item/modular_computer/pda + id_types = list(/obj/item/card/id/sierra/passenger) + +/singleton/hierarchy/outfit/job/sierra/passenger/passenger/journalist + name = OUTFIT_JOB_NAME("Journalist - Sierra") + backpack_contents = list(/obj/item/device/camera/tvcamera = 1, + /obj/item/clothing/accessory/badge/press = 1) + + ///////// + //OTHER// + ///////// + +/singleton/hierarchy/outfit/job/sierra/ert + name = OUTFIT_JOB_NAME("ERT - Sierra") + uniform = /obj/item/clothing/under/color/grey + head = /obj/item/clothing/head/beret/centcom/officer + gloves = /obj/item/clothing/gloves/thick/combat + id_types = list(/obj/item/card/id/centcom/ERT) +// pda_type = /obj/item/modular_computer/pda/ert + l_ear = /obj/item/device/radio/headset/ert + shoes = /obj/item/clothing/shoes/combat + +/singleton/hierarchy/outfit/job/sierra/ert/leader + name = OUTFIT_JOB_NAME("ERT Leader - Sierra") + head = /obj/item/clothing/head/beret/centcom/captain diff --git a/maps/sierra/loadout/_defines.dm b/maps/sierra/loadout/_defines.dm new file mode 100644 index 0000000000000..47a6f1c5caf3e --- /dev/null +++ b/maps/sierra/loadout/_defines.dm @@ -0,0 +1,188 @@ +//The following is a list of defs and blacklist to be used (or not) for the Sierra loadout. +/datum/map/sierra + loadout_blacklist = list( + /datum/gear/document/union_card = TRUE, + /datum/gear/suit/labcoat_corp = TRUE, + /datum/gear/suit/medcoat = TRUE, + /datum/gear/uniform/corp_exec = TRUE, + /datum/gear/uniform/corp_overalls = TRUE, + /datum/gear/uniform/corp_flight = TRUE, + /datum/gear/uniform/corp_exec_jacket = TRUE, + ) + +//For all exploration crew +#define EXPLORATION_ROLES list(\ + /datum/job/exploration_leader, \ + /datum/job/explorer, \ + /datum/job/explorer_pilot, \ + /datum/job/explorer_medic, \ + /datum/job/explorer_engineer \ +) + +//For jobs that allow for decorative or ceremonial clothing +#define FORMAL_ROLES list(\ + /datum/job/iaa, \ + /datum/job/rd, \ + /datum/job/senior_scientist, \ + /datum/job/scientist, \ + /datum/job/scientist_assistant, \ + /datum/job/psychiatrist, \ + /datum/job/assistant, \ + /datum/job/bartender, \ + /datum/job/submap/merchant, \ + /datum/job/detective \ +) + +//For civilian jobs that may have a uniform, but not a strict one +#define SEMIFORMAL_ROLES list(\ + /datum/job/assistant, \ + /datum/job/mining, \ + /datum/job/scientist_assistant, \ + /datum/job/psychiatrist, \ + /datum/job/bartender, \ + /datum/job/submap/merchant, \ + /datum/job/scientist, \ + /datum/job/senior_scientist, \ + /datum/job/detective \ +) + +//For civilian jobs that may have a strict uniform. +#define SEMIANDFORMAL_ROLES list(\ + /datum/job/assistant, \ + /datum/job/mining, \ + /datum/job/scientist_assistant, \ + /datum/job/psychiatrist, \ + /datum/job/bartender, \ + /datum/job/submap/merchant, \ + /datum/job/iaa, \ + /datum/job/rd, \ + /datum/job/senior_scientist, \ + /datum/job/scientist, \ + /datum/job/detective \ +) + +//For Nanotrasen employees +#define NANOTRASEN_ROLES list(\ + /datum/job/captain, /datum/job/hop, /datum/job/rd, /datum/job/cmo, /datum/job/chief_engineer, /datum/job/hos, \ + /datum/job/iaa, \ + /datum/job/senior_engineer, /datum/job/engineer, /datum/job/infsys, /datum/job/roboticist, /datum/job/engineer_trainee, \ + /datum/job/officer, /datum/job/warden, /datum/job/detective, /datum/job/security_assistant, \ + /datum/job/senior_doctor, /datum/job/doctor, /datum/job/doctor_trainee,/datum/job/chemist, \ + /datum/job/psychiatrist, \ + /datum/job/qm, /datum/job/cargo_tech, /datum/job/cargo_assistant,\ + /datum/job/chief_steward, /datum/job/janitor, /datum/job/cook, /datum/job/bartender, /datum/job/steward, \ + /datum/job/senior_scientist, /datum/job/scientist, /datum/job/mining,\ + /datum/job/scientist_assistant \ +) + +//For roles with no uniform or formal clothing requirements +#define RESTRICTED_ROLES list(\ + /datum/job/assistant, \ + /datum/job/bartender \ +) + +//For members of the command department +#define COMMAND_ROLES list(\ + /datum/job/captain, \ + /datum/job/hop, \ + /datum/job/rd,\ + /datum/job/cmo, \ + /datum/job/chief_engineer,\ + /datum/job/hos \ +) + +//For members of the medical department +#define MEDICAL_ROLES list(\ + /datum/job/cmo, /datum/job/senior_doctor, /datum/job/doctor,\ + /datum/job/doctor_trainee, /datum/job/explorer_medic,\ + /datum/job/psychiatrist, /datum/job/chemist, /datum/job/roboticist \ +) + +//For members of the medical department, roboticists, and some Research +#define STERILE_ROLES list(\ + /datum/job/cmo, /datum/job/senior_doctor, /datum/job/doctor,\ + /datum/job/doctor_trainee, /datum/job/chemist, /datum/job/psychiatrist,\ + /datum/job/chemist, /datum/job/explorer_medic, /datum/job/roboticist,\ + /datum/job/rd, /datum/job/senior_scientist, /datum/job/scientist, /datum/job/scientist_assistant \ +) + +//For members of the engineering department +#define ENGINEERING_ROLES list(\ + /datum/job/chief_engineer, /datum/job/senior_engineer, /datum/job/engineer, /datum/job/infsys,\ + /datum/job/roboticist, /datum/job/engineer_trainee, /datum/job/explorer_engineer \ +) + +//For members of Engineering, Cargo, and Research +#define TECHNICAL_ROLES list(\ + /datum/job/senior_engineer, /datum/job/engineer, /datum/job/roboticist, /datum/job/qm,\ + /datum/job/cargo_tech, /datum/job/cargo_assistant,/datum/job/mining,\ + /datum/job/scientist_assistant, /datum/job/rd,\ + /datum/job/senior_scientist, /datum/job/scientist, /datum/job/chief_engineer, /datum/job/infsys,\ + /datum/job/engineer_trainee, /datum/job/explorer_engineer \ +) + +//For members of the security department +#define SECURITY_ROLES list(\ + /datum/job/hos, \ + /datum/job/warden, \ + /datum/job/detective, \ + /datum/job/officer, \ + /datum/job/security_assistant \ +) + +//For members of the supply department +#define SUPPLY_ROLES list(\ + /datum/job/qm, \ + /datum/job/cargo_tech, \ + /datum/job/cargo_assistant \ +) + +//For members of the service department +#define SERVICE_ROLES list(\ + /datum/job/chief_steward, \ + /datum/job/janitor, \ + /datum/job/cook, \ + /datum/job/bartender, \ + /datum/job/steward \ +) + +//For members of the research department and jobs that are scientific +#define RESEARCH_ROLES list(\ + /datum/job/rd, /datum/job/iaa, /datum/job/scientist,\ + /datum/job/scientist_assistant, /datum/job/assistant,\ + /datum/job/senior_scientist, /datum/job/roboticist \ +) + +//For jobs that spawn with weapons in their lockers +#define ARMED_ROLES list(\ + /datum/job/captain, /datum/job/hop, /datum/job/hos,\ + /datum/job/officer, /datum/job/warden, /datum/job/detective, /datum/job/security_assistant \ +) + +//For jobs that spawn with armor in their lockers +#define ARMORED_ROLES list(\ + /datum/job/captain, /datum/job/hop, /datum/job/rd, /datum/job/cmo,\ + /datum/job/chief_engineer, /datum/job/hos, /datum/job/qm,\ + /datum/job/warden, /datum/job/detective, /datum/job/officer, \ +) + +#define CONTRACT_ROLES list(\ + /datum/job/explorer, /datum/job/explorer_pilot, /datum/job/explorer_medic, /datum/job/explorer_engineer, \ + /datum/job/engineer, /datum/job/engineer_trainee, \ + /datum/job/officer, /datum/job/detective, \ + /datum/job/senior_doctor, /datum/job/doctor, /datum/job/doctor_trainee,/datum/job/chemist, /datum/job/psychiatrist, \ + /datum/job/cargo_tech, /datum/job/cargo_assistant, /datum/job/mining, \ + /datum/job/janitor, /datum/job/cook, /datum/job/bartender, /datum/job/steward, /datum/job/infsys,\ + /datum/job/scientist, /datum/job/roboticist, /datum/job/scientist_assistant \ +) + +#define CIVILIAN_ROLES list(\ + /datum/job/detective, \ + /datum/job/psychiatrist, \ + /datum/job/cargo_assistant, \ + /datum/job/janitor, \ + /datum/job/cook, \ + /datum/job/bartender,\ + /datum/job/steward,\ + /datum/job/assistant\ +) diff --git a/maps/sierra/loadout/loadout.dm b/maps/sierra/loadout/loadout.dm new file mode 100644 index 0000000000000..27dd3dde1e050 --- /dev/null +++ b/maps/sierra/loadout/loadout.dm @@ -0,0 +1,124 @@ +/datum/gear/tactical/light_pcarrier + display_name = "light armored plate carrier" + description = "With additional light armor plate" + path = /obj/item/clothing/suit/armor/pcarrier/light + cost = 10 + +/datum/gear/pmp_w_tape + display_name = "music player" + description = "With custom tape" + path = /obj/item/music_player + cost = 10 + +/datum/gear/pmp_w_tape/New() + . = ..() + var/players = list( + "Radio" = /obj/item/music_player/radio/custom_tape, + "Cassett" = /obj/item/music_player/csplayer/custom_tape, + "Dusty" = /obj/item/music_player/dusty/custom_tape, + ) + gear_tweaks += new /datum/gear_tweak/path(players) + +/datum/gear/boombox_w_tape + display_name = "boombox" + description = "With custom tape" + path = /obj/item/music_player/boombox/custom_tape + cost = 10 + +/datum/gear/bikehorn + display_name = "bike horn" + description = "for real aesthetes" + path = /obj/item/bikehorn + +/datum/gear/bikehorn/rubberducky + display_name = "rubber duck" + description = "QUACK" + path = /obj/item/bikehorn/rubberducky + +/datum/gear/premium_alcohol + display_name = "expensive alcohol" + description = "sometimes it turns out that the bar is closed, but you want a drink." + path = /obj/item/reagent_containers/food/drinks/bottle + cost = 2 + +/datum/gear/premium_alcohol/New() + . = ..() + var/list/premium_alcohol_list = list( + "Vodka" = /obj/item/reagent_containers/food/drinks/bottle/premiumvodka, + "Vine" = /obj/item/reagent_containers/food/drinks/bottle/premiumwine, + "Whiskey" = /obj/item/reagent_containers/food/drinks/bottle/specialwhiskey, + "Nothing" = /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing, + "Vermouth" = /obj/item/reagent_containers/food/drinks/bottle/vermouth, + ) + gear_tweaks += new /datum/gear_tweak/path(premium_alcohol_list) + +/datum/gear/pizzabox + display_name = "pizza box" + description = "pizza time" + path = /obj/item/pizzabox + cost = 2 + +/datum/gear/pizzabox/New() + . = ..() + var/list/pizza_box_list = list( + "Margherita" = /obj/item/pizzabox/margherita, + "Mushroom" = /obj/item/pizzabox/mushroom, + "Meat" = /obj/item/pizzabox/meat, + "Vegetable" = /obj/item/pizzabox/vegetable, + ) + gear_tweaks += new /datum/gear_tweak/path(pizza_box_list) + +/datum/gear/musical_instruments + display_name = "musical instruments" + description = "let's DOOT" + path = /obj/item/device/synthesized_instrument + cost = 2 + +/datum/gear/musical_instruments/New() + . = ..() + var/list/musical_instruments_list = list( + "Synthesizer" = /obj/item/device/synthesized_instrument/synthesizer, + "Polyguitar" = /obj/item/device/synthesized_instrument/guitar/multi, + "Guitar" = /obj/item/device/synthesized_instrument/guitar, + "Trumpet" = /obj/item/device/synthesized_instrument/trumpet, + ) + gear_tweaks += new /datum/gear_tweak/path(musical_instruments_list) + +/datum/gear/costume_clown + display_name = "clown costume" + description = "Admit it, you invested so much money just for one clown costume." + path = /obj/item/clothing/mask/gas/sexyclown + cost = 2 + +/datum/gear/head/kittyears + display_name = "kitty ears" + path = /obj/item/clothing/head/kitty/fake + category = GEAR_CATEGORY_EARWEAR + allowed_roles = null + cost = 2 + +/datum/gear/mre + display_name = "MRE" + path = /obj/item/storage/mre + cost = 2 + +/datum/gear/mre/New() + . = ..() + var/list/mre_list = list( + "Menu 1" = /obj/item/storage/mre, + "Menu 2" = /obj/item/storage/mre/menu2, + "Menu 3" = /obj/item/storage/mre/menu3, + "Menu 4" = /obj/item/storage/mre/menu4, + "Menu 5" = /obj/item/storage/mre/menu5, + "Menu 6" = /obj/item/storage/mre/menu6, + "Menu 7" = /obj/item/storage/mre/menu7, + "Menu 8" = /obj/item/storage/mre/menu8, + "Menu 9" = /obj/item/storage/mre/menu9, + "Menu 10" = /obj/item/storage/mre/menu10) + gear_tweaks += new /datum/gear_tweak/path(mre_list) + +/datum/gear/replica_katana + display_name = "replica katana" + description = "Ah, I see you're a man of culture as well." + path = /obj/item/material/sword/katana/replica + cost = 2 diff --git a/maps/sierra/loadout/loadout_accessories.dm b/maps/sierra/loadout/loadout_accessories.dm new file mode 100644 index 0000000000000..b9234894253ef --- /dev/null +++ b/maps/sierra/loadout/loadout_accessories.dm @@ -0,0 +1,43 @@ +/datum/gear/accessory/tags + display_name = "dog tags" + path = /obj/item/clothing/accessory/badge/dog_tags + +/datum/gear/accessory/pilot_pin + display_name = "pilot's qualification pin" + path = /obj/item/clothing/accessory/solgov/specialty/pilot + required_skills = list(SKILL_PILOT = SKILL_EXPERIENCED) + +/datum/gear/accessory/armband_security + allowed_roles = SECURITY_ROLES + +/datum/gear/accessory/armband_cargo + allowed_roles = SUPPLY_ROLES + +/datum/gear/accessory/armband_medical + allowed_roles = MEDICAL_ROLES + +/datum/gear/accessory/armband_emt + allowed_roles = list(/datum/job/doctor, /datum/job/doctor_trainee, /datum/job/explorer_medic) + +/datum/gear/accessory/armband_engineering + allowed_roles = ENGINEERING_ROLES + +/datum/gear/accessory/armband_hydro + allowed_roles = list(/datum/job/rd, /datum/job/senior_scientist, /datum/job/scientist, /datum/job/scientist_assistant, /datum/job/assistant) + +/datum/gear/accessory/ntaward + allowed_roles = NANOTRASEN_ROLES + allowed_branches = list(/datum/mil_branch/employee) + +/datum/gear/accessory/stethoscope + allowed_roles = STERILE_ROLES + +/datum/gear/utility/holster_belt + display_name = "holser belt" + path = /obj/item/storage/belt/holster/general + allowed_roles = list(/datum/job/captain, /datum/job/hop, /datum/job/rd, /datum/job/cmo, /datum/job/chief_engineer, /datum/job/hos, /datum/job/iaa, /datum/job/adjutant) + +/datum/gear/accessory/corpbadge + display_name = "investigator holobadge (IAA)" + path = /obj/item/clothing/accessory/badge/holo/investigator + allowed_roles = list(/datum/job/iaa) diff --git a/maps/sierra/loadout/loadout_documents.dm b/maps/sierra/loadout/loadout_documents.dm new file mode 100644 index 0000000000000..043602c4ae41a --- /dev/null +++ b/maps/sierra/loadout/loadout_documents.dm @@ -0,0 +1,17 @@ +/datum/gear/document/passport/scg + display_name = "passports selection - SCG" + description = "A selection of SCG passports." + path = /obj/item/passport/scg + flags = GEAR_HAS_TYPE_SELECTION + +/datum/gear/document/passport/iccg + display_name = "passports selection - ICCG" + description = "A selection of ICCG passports." + path = /obj/item/passport/iccg + flags = GEAR_HAS_TYPE_SELECTION + +/datum/gear/document/passport/unathi + display_name = "(Unathi) registration document" + path = /obj/item/passport/xeno/unathi + flags = 0 + whitelisted = list(SPECIES_UNATHI) diff --git a/maps/sierra/loadout/loadout_ec_skillbages.dm b/maps/sierra/loadout/loadout_ec_skillbages.dm new file mode 100644 index 0000000000000..b360432681ca7 --- /dev/null +++ b/maps/sierra/loadout/loadout_ec_skillbages.dm @@ -0,0 +1,59 @@ +/datum/gear/skill + category = GEAR_CATEGORY_SKILL_BADGES + abstract_type = /datum/gear/skill + slot = slot_tie + +/datum/gear/skill/botany + display_name = "Field Xenobotany Specialist badge" + path = /obj/item/clothing/accessory/solgov/skillbadge/botany + required_skills = list(SKILL_BOTANY = SKILL_TRAINED) + +/datum/gear/skill/botany/stripe + display_name = "Field Xenobotany Specialist voidsuit stripe" + path = /obj/item/clothing/accessory/solgov/skillstripe/botany + +/datum/gear/skill/netgun + display_name = "Xenofauna Acquisition Specialist badge" + path = /obj/item/clothing/accessory/solgov/skillbadge/netgun + required_skills = list(SKILL_WEAPONS = SKILL_TRAINED) + +/datum/gear/skill/netgun/stripe + display_name = "Xenofauna Acquisition Specialist voidsuit stripe" + path = /obj/item/clothing/accessory/solgov/skillstripe/netgun + +/datum/gear/skill/eva + display_name = "Void Mobility Specialist badge" + path = /obj/item/clothing/accessory/solgov/skillbadge/eva + required_skills = list(SKILL_EVA = SKILL_TRAINED) + +/datum/gear/skill/eva/stripe + display_name = "Void Mobility Specialist voidsuit stripe" + path = /obj/item/clothing/accessory/solgov/skillstripe/eva + +/datum/gear/skill/medical + display_name = "Advanced First Aid Specialist badge" + path = /obj/item/clothing/accessory/solgov/skillbadge/medical + required_skills = list(SKILL_MEDICAL = SKILL_BASIC) + +/datum/gear/skill/medical/stripe + display_name = "Advanced First Aid Specialist voidsuit stripe" + path = /obj/item/clothing/accessory/solgov/skillstripe/medical + +/datum/gear/skill/mech + display_name = "Exosuit Specialist badge" + path = /obj/item/clothing/accessory/solgov/skillbadge/mech + required_skills = list(SKILL_MECH = HAS_PERK) + +/datum/gear/skill/electric + display_name = "Electrical Specialist badge" + path = /obj/item/clothing/accessory/solgov/skillbadge/electric + required_skills = list(SKILL_ELECTRICAL = SKILL_TRAINED) + +/datum/gear/skill/electric/stripe + display_name = "Electrical Specialist voidsuit stripe" + path = /obj/item/clothing/accessory/solgov/skillstripe/electric + +/datum/gear/skill/science + display_name = "Research Specialist badge" + path = /obj/item/clothing/accessory/solgov/skillbadge/science + required_skills = list(SKILL_SCIENCE = SKILL_TRAINED) diff --git a/maps/sierra/loadout/loadout_eyes.dm b/maps/sierra/loadout/loadout_eyes.dm new file mode 100644 index 0000000000000..c1f36aec3789f --- /dev/null +++ b/maps/sierra/loadout/loadout_eyes.dm @@ -0,0 +1,29 @@ +/datum/gear/eyes/science/New() + allowed_roles = RESEARCH_ROLES | EXPLORATION_ROLES + ..() + +/datum/gear/eyes/security + allowed_roles = SECURITY_ROLES + +/datum/gear/eyes/medical/New() + allowed_roles = MEDICAL_ROLES + /datum/job/explorer_medic + ..() + +/datum/gear/eyes/meson + allowed_roles = list(/datum/job/senior_engineer, /datum/job/engineer, /datum/job/mining, /datum/job/scientist_assistant, /datum/job/rd,/datum/job/senior_scientist, /datum/job/scientist, /datum/job/chief_engineer,/datum/job/engineer_trainee,/datum/job/exploration_leader, /datum/job/explorer, /datum/job/explorer_pilot,/datum/job/explorer_medic, /datum/job/explorer_engineer, /datum/job/qm) + +/datum/gear/eyes/material + allowed_roles = TECHNICAL_ROLES + +/datum/gear/eyes/fashionglasses + display_name = "non-prescription glasses" + path = /obj/item/clothing/glasses + +/datum/gear/eyes/fashionglasses/New() + ..() + var/glasses = list() + glasses["green glasses"] = /obj/item/clothing/glasses/green + glasses["hipster glasses"] = /obj/item/clothing/glasses/hipster + glasses["monocle"] = /obj/item/clothing/glasses/monocle + glasses["scanning goggles"] = /obj/item/clothing/glasses/scanners + gear_tweaks += new/datum/gear_tweak/path(glasses) diff --git a/maps/sierra/loadout/loadout_gloves.dm b/maps/sierra/loadout/loadout_gloves.dm new file mode 100644 index 0000000000000..4640e626a377a --- /dev/null +++ b/maps/sierra/loadout/loadout_gloves.dm @@ -0,0 +1,37 @@ +/datum/gear/gloves/latex + allowed_roles = STERILE_ROLES + +/datum/gear/gloves/nitrile + allowed_roles = STERILE_ROLES + +/datum/gear/gloves/botany + allowed_roles = list(/datum/job/rd, /datum/job/senior_scientist, /datum/job/scientist, /datum/job/scientist_assistant, /datum/job/chief_steward, /datum/job/cook, /datum/job/bartender, /datum/job/steward, /datum/job/assistant, ) + +/datum/gear/gloves/dress + display_name = "gloves, dress" + path = /obj/item/clothing/gloves/color/white + +/datum/gear/gloves/duty + display_name = "gloves, duty" + path = /obj/item/clothing/gloves/thick/duty + cost = 3 + +/datum/gear/gloves/insulated + display_name = "gloves, insulated" + path = /obj/item/clothing/gloves/insulated + allowed_roles = ENGINEERING_ROLES + cost = 3 + +/datum/gear/gloves/insulated/New() + ..() + var/glovtype = list() + glovtype["yellow insulated"] = /obj/item/clothing/gloves/insulated + glovtype["black insulated"] = /obj/item/clothing/gloves/insulated/black + glovtype["white insulated"] = /obj/item/clothing/gloves/insulated/white + gear_tweaks += new/datum/gear_tweak/path(glovtype) + +/datum/gear/gloves/nabber + display_name = "(GAS) Three-fingered insulated gloves" + path = /obj/item/clothing/gloves/nabber + whitelisted = list(SPECIES_NABBER) + cost = 3 diff --git a/maps/sierra/loadout/loadout_head.dm b/maps/sierra/loadout/loadout_head.dm new file mode 100644 index 0000000000000..2601464bab417 --- /dev/null +++ b/maps/sierra/loadout/loadout_head.dm @@ -0,0 +1,39 @@ +/datum/gear/head/surgical + allowed_roles = STERILE_ROLES + +/datum/gear/head/hardhat + allowed_roles = TECHNICAL_ROLES + +/datum/gear/head/welding + allowed_roles = TECHNICAL_ROLES + +/datum/gear/head/beret_selection + display_name = "contractor beret selection" + description = "A list of berets used by various organizations and corporights." + path = /obj/item/clothing/head/beret + allowed_roles = SECURITY_ROLES + +/datum/gear/head/beret_selection/New() + ..() + var/beret_selection_type = list() + beret_selection_type["white-blue corporight security beret"] = /obj/item/clothing/head/beret/guard + beret_selection_type["white-red corporight security beret"] = /obj/item/clothing/head/beret/sec/corporate/whitered + beret_selection_type["SAARE beret"] = /obj/item/clothing/head/beret/sec/corporate/saare + beret_selection_type["PCRC beret"] = /obj/item/clothing/head/beret/sec/corporate/pcrc + beret_selection_type["ZPCI beret"] = /obj/item/clothing/head/beret/sec/corporate/zpci + gear_tweaks += new/datum/gear_tweak/path(beret_selection_type) + +/datum/gear/suit/unathi/security_cap + allowed_roles = SECURITY_ROLES + +/datum/gear/head/skrell_helmet + allowed_roles = ARMORED_ROLES + +/datum/gear/head/skrell_helmet/New() + ..() + var/list/helmets = list() + helmets["black skrellian helmet"] = /obj/item/clothing/head/helmet/skrell + helmets["navy skrellian helmet"] = /obj/item/clothing/head/helmet/skrell/navy + helmets["green skrellian helmet"] = /obj/item/clothing/head/helmet/skrell/green + helmets["tan skrellian helmet"] = /obj/item/clothing/head/helmet/skrell/tan + gear_tweaks += new/datum/gear_tweak/path(helmets) diff --git a/maps/sierra/loadout/loadout_pda.dm b/maps/sierra/loadout/loadout_pda.dm new file mode 100644 index 0000000000000..414aebcd3443f --- /dev/null +++ b/maps/sierra/loadout/loadout_pda.dm @@ -0,0 +1,101 @@ + +/datum/gear/utility/pda + display_name = "PDA selection" + path = /obj/item/modular_computer/pda + cost = 2 + +/datum/gear/utility/pda/New() + ..() + var/pdas = list() + slot = slot_wear_id + pdas["grey"] = /obj/item/modular_computer/pda + pdas["grey-red (sec)"] = /obj/item/modular_computer/pda/security + pdas["lightgrey-brown (sup)"] = /obj/item/modular_computer/pda/cargo + pdas["lightgrey-yellow (eng)"] = /obj/item/modular_computer/pda/engineering + pdas["navy (heads)"] = /obj/item/modular_computer/pda/heads + pdas["navy-red (hos)"] = /obj/item/modular_computer/pda/heads/hos + pdas["navy-gold (capt)"] = /obj/item/modular_computer/pda/captain + pdas["navy-blue (cmo)"] = /obj/item/modular_computer/pda/heads/cmo + pdas["navy-white (hop)"] = /obj/item/modular_computer/pda/heads/hop + pdas["navy-yellow (ce)"] = /obj/item/modular_computer/pda/heads/ce + pdas["navy-darkgreen (rd)"] = /obj/item/modular_computer/pda/heads/rd + pdas["white-blue (med)"] = /obj/item/modular_computer/pda/medical + pdas["white-purple (exp)"] = /obj/item/modular_computer/pda/explorer + pdas["white-darkgreen (sci)"] = /obj/item/modular_computer/pda/science + pdas["white-yellowblue (robot)"]= /obj/item/modular_computer/pda/roboticist + pdas["black (mercs)"] = /obj/item/modular_computer/pda/syndicate + gear_tweaks += new/datum/gear_tweak/path(pdas) + +/datum/gear/utility/pda/spawn_on_mob(mob/living/carbon/human/H, metadata) + var/obj/item/modular_computer/pda/item = spawn_item(H, H, metadata) + var/obj/item/card/id = H.GetIdCard() + if(id) + id.resolve_attackby(item, H) + if(item.tesla_link && !istype(H, /mob/living/carbon/human/dummy)) //PDA in loadout shouldn't work + var/datum/extension/interactive/ntos/os = get_extension(item, /datum/extension/interactive/ntos) + if(os && os.active_program && os.active_program.NM && istype(os.active_program, /datum/computer_file/program/email_client)) + var/datum/nano_module/email_client/NME = os.active_program.NM + NME.log_in() + + if(H.equip_to_slot_if_possible(item, slot, equip_flags = TRYEQUIP_REDRAW)) + . = item + + +/datum/gear/utility/wrist_computer + display_name = "Wrist computer selection" + path = /obj/item/modular_computer/pda/wrist + cost = 2 + +/datum/gear/utility/wrist_computer/New() + ..() + var/wcomp = list() + slot = slot_wear_id + wcomp["black"] = /obj/item/modular_computer/pda/wrist + wcomp["lightgrey"] = /obj/item/modular_computer/pda/wrist/grey + wcomp["black-red (sec)"] = /obj/item/modular_computer/pda/wrist/security + wcomp["brown (sup)"] = /obj/item/modular_computer/pda/wrist/cargo + wcomp["yellow (eng)"] = /obj/item/modular_computer/pda/wrist/engineering + wcomp["navy (heads)"] = /obj/item/modular_computer/pda/wrist/heads + wcomp["navy-red (hos)"] = /obj/item/modular_computer/pda/wrist/heads/hos + wcomp["navy-gold (capt)"] = /obj/item/modular_computer/pda/wrist/captain + wcomp["navy-blue (cmo)"] = /obj/item/modular_computer/pda/wrist/heads/cmo + wcomp["navy-white (hop)"] = /obj/item/modular_computer/pda/wrist/heads/hop + wcomp["navy-yellow (ce)"] = /obj/item/modular_computer/pda/wrist/heads/ce + wcomp["navy-darkgreen (rd)"] = /obj/item/modular_computer/pda/wrist/heads/rd + wcomp["blue (med)"] = /obj/item/modular_computer/pda/wrist/medical + wcomp["purple (exp)"] = /obj/item/modular_computer/pda/wrist/explorer + wcomp["lightgrey-darkgreen (sci)"] = /obj/item/modular_computer/pda/wrist/science + wcomp["lightgrey-yellowblue (robot)"]= /obj/item/modular_computer/pda/wrist/roboticist + wcomp["black (mercs)"] = /obj/item/modular_computer/pda/wrist/syndicate + wcomp["short (lightgrey)"] = /obj/item/modular_computer/pda/wrist/lila + wcomp["short (black)"] = /obj/item/modular_computer/pda/wrist/lila/black + gear_tweaks += new/datum/gear_tweak/path(wcomp) + +/datum/gear/utility/wrist_computer/spawn_on_mob(mob/living/carbon/human/H, metadata) + var/obj/item/modular_computer/pda/wrist/item = spawn_item(H, H, metadata) + var/obj/item/card/id = H.GetIdCard() + if(id) + id.resolve_attackby(item, H) + if(item.tesla_link && !istype(H, /mob/living/carbon/human/dummy)) //PDA in loadout shouldn't work + var/datum/extension/interactive/ntos/os = get_extension(item, /datum/extension/interactive/ntos) + if(os && os.active_program && os.active_program.NM && istype(os.active_program, /datum/computer_file/program/email_client)) + var/datum/nano_module/email_client/NME = os.active_program.NM + NME.log_in() + if(H.equip_to_slot_if_possible(item, slot, equip_flags = TRYEQUIP_REDRAW)) + . = item + +/datum/gear/utility/modular_scanner + display_name = "Scanner module, paper" + path = /obj/item/stock_parts/computer/scanner/paper + +/datum/gear/utility/modular_scanner/chemical + display_name = "Scanner module, reagents" + path = /obj/item/stock_parts/computer/scanner/reagent + +/datum/gear/utility/modular_scanner/atmos + display_name = "Scanner module, atmos" + path = /obj/item/stock_parts/computer/scanner/atmos + +/datum/gear/utility/modular_scanner/medical + display_name = "Scanner module, medical" + path = /obj/item/stock_parts/computer/scanner/medical diff --git a/maps/sierra/loadout/loadout_shoes.dm b/maps/sierra/loadout/loadout_shoes.dm new file mode 100644 index 0000000000000..fc75bb4216d7e --- /dev/null +++ b/maps/sierra/loadout/loadout_shoes.dm @@ -0,0 +1,65 @@ +// Shoelocker +/datum/gear/shoes/duty + display_name = "duty boots" + path = /obj/item/clothing/shoes/dutyboots + +/datum/gear/shoes/whitedress + display_name = "dress shoes, white" + path = /obj/item/clothing/shoes/dress/white + +/datum/gear/shoes/whitedress/color + display_name = "dress shoes, color select" + path = /obj/item/clothing/shoes/dress/white + flags = GEAR_HAS_COLOR_SELECTION + +/datum/gear/shoes/dress + display_name = "dress shoes" + path = /obj/item/clothing/shoes/dress + +/datum/gear/shoes/lowworkboots + display_name = "low workboots" + path = /obj/item/clothing/shoes/workboots + +/datum/gear/shoes/cowboy_selection + display_name = "cowboy boots selection" + path = /obj/item/clothing/shoes/cowboy + +/datum/gear/shoes/cowboy_selection/New() + ..() + var/cowboy_selection_type = list() + cowboy_selection_type["cowboy boots"] = /obj/item/clothing/shoes/cowboy + cowboy_selection_type["classic cowboy boots"] = /obj/item/clothing/shoes/cowboy/classic + cowboy_selection_type["snakeskin cowboy boots"] = /obj/item/clothing/shoes/cowboy/snakeskin + gear_tweaks += new/datum/gear_tweak/path(cowboy_selection_type) + +/datum/gear/shoes/brand_shoes + display_name = "brand shoes selection" + path = /obj/item/clothing/shoes/brand_shoes + +/datum/gear/shoes/brand_shoes/New() + ..() + var/b_shoes = list() + b_shoes["white yellow shoes"] = /obj/item/clothing/shoes/brand_shoes + b_shoes["black red shoes"] = /obj/item/clothing/shoes/brand_shoes/two + b_shoes["black shoes"] = /obj/item/clothing/shoes/brand_shoes/three + b_shoes["faln shoes"] = /obj/item/clothing/shoes/brand_shoes/faln + gear_tweaks += new/datum/gear_tweak/path(b_shoes) + +/datum/gear/shoes/antiquated + display_name = "antiquated shoes" + path = /obj/item/clothing/shoes/brand_shoes/antiquated + +/datum/gear/shoes/noble_boots + display_name = "noble boots" + path = /obj/item/clothing/shoes/noble_boots + +/datum/gear/shoes/geta + display_name = "geta shoes selection" + path = /obj/item/clothing/shoes/geta + +/datum/gear/shoes/geta/New() + ..() + var/get = list() + get["red geta"] = /obj/item/clothing/shoes/geta + get["black geta"] = /obj/item/clothing/shoes/geta/black + gear_tweaks += new/datum/gear_tweak/path(get) diff --git a/maps/sierra/loadout/loadout_suit.dm b/maps/sierra/loadout/loadout_suit.dm new file mode 100644 index 0000000000000..877225753bb2e --- /dev/null +++ b/maps/sierra/loadout/loadout_suit.dm @@ -0,0 +1,97 @@ +/datum/gear/suit/medcoat + allowed_roles = MEDICAL_ROLES + +/datum/gear/suit/sierra_medcoat + allowed_roles = MEDICAL_ROLES + +/datum/gear/suit/poncho + display_name = "poncho selection" + path = /obj/item/clothing/suit/poncho/colored + +/datum/gear/suit/security_poncho + allowed_roles = list(/datum/job/hos, /datum/job/warden, /datum/job/detective, /datum/job/officer, ) + +/datum/gear/suit/medical_poncho + allowed_roles = list(/datum/job/cmo, /datum/job/senior_doctor, /datum/job/doctor, /datum/job/doctor_trainee, /datum/job/explorer_medic, /datum/job/psychiatrist, /datum/job/chemist, /datum/job/roboticist, ) + +/datum/gear/suit/engineering_poncho + allowed_roles = list(/datum/job/chief_engineer, /datum/job/senior_engineer, /datum/job/engineer, /datum/job/roboticist, /datum/job/engineer_trainee, /datum/job/explorer_engineer, /datum/job/infsys) + +/datum/gear/suit/science_poncho + allowed_roles = list(/datum/job/rd, /datum/job/scientist, /datum/job/scientist_assistant, /datum/job/senior_scientist, /datum/job/roboticist, ) + +/datum/gear/suit/cargo_poncho + allowed_roles = list(/datum/job/qm, /datum/job/cargo_tech, /datum/job/cargo_assistant, ) + +/datum/gear/suit/wintercoat/engineering + display_name = "expeditionary winter coat" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/solgov + allowed_roles = EXPLORATION_ROLES + +/datum/gear/suit/wintercoat/engineering + display_name = "engineering winter coat" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/engineering + allowed_roles = ENGINEERING_ROLES + +/datum/gear/suit/wintercoat/cargo + display_name = "cargo winter coat" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/cargo + allowed_roles = SUPPLY_ROLES + +/datum/gear/suit/wintercoat/medical + display_name = "medical winter coat" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical + allowed_roles = MEDICAL_ROLES + +/datum/gear/suit/wintercoat/security + display_name = "security winter coat" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/security + allowed_roles = SECURITY_ROLES + +/datum/gear/suit/wintercoat/research + display_name = "science winter coat" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/science + allowed_roles = list(/datum/job/rd, /datum/job/scientist, /datum/job/scientist_assistant, /datum/job/senior_scientist, /datum/job/roboticist, ) + +/datum/gear/suit/wintercoat_dais + display_name = "winter coat, DAIS" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/dais + allowed_roles = list(/datum/job/engineer, /datum/job/scientist, /datum/job/scientist_assistant, /datum/job/roboticist, /datum/job/infsys) + allowed_branches = list(/datum/mil_branch/contractor) + +/datum/gear/suit/labcoat + allowed_roles = STERILE_ROLES + +/datum/gear/suit/labcoat_corp_si + display_name = "Corporate labcoat" + path = /obj/item/clothing/suit/storage/toggle/labcoat/science + allowed_roles = RESEARCH_ROLES + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/contractor) + +/datum/gear/suit/labcoat_corp_si/New() + ..() + var/labcoatsi = list() + labcoatsi += /obj/item/clothing/suit/storage/toggle/labcoat/science/nanotrasen + labcoatsi += /obj/item/clothing/suit/storage/toggle/labcoat/science/heph + labcoatsi += /obj/item/clothing/suit/storage/toggle/labcoat/science/xynergy + gear_tweaks += new/datum/gear_tweak/path/specified_types_list(labcoatsi) + +/datum/gear/suit/labcoat_dais + display_name = "labcoat, DAIS" + path = /obj/item/clothing/suit/storage/toggle/labcoat/science/dais + allowed_roles = list(/datum/job/engineer, /datum/job/scientist, /datum/job/roboticist, /datum/job/infsys) + allowed_branches = list(/datum/mil_branch/contractor) + +/datum/gear/suit/militaryjacket + display_name = "military jacket" + path = /obj/item/clothing/suit/storage/tgbomber/militaryjacket + +/datum/gear/suit/snakeskin + display_name = "snakeskin coat" + path = /obj/item/clothing/suit/snakeskin + +/datum/gear/suit/unathi/security_jacket + allowed_roles = SECURITY_ROLES + +/datum/gear/suit/lab_xyn_machine + allowed_branches = list(/datum/mil_branch/contractor) diff --git a/maps/sierra/loadout/loadout_tactical.dm b/maps/sierra/loadout/loadout_tactical.dm new file mode 100644 index 0000000000000..53be2b229acca --- /dev/null +++ b/maps/sierra/loadout/loadout_tactical.dm @@ -0,0 +1,140 @@ +/********************* +tactical accessories +*********************/ +/datum/gear/tactical/ubac + display_name = "UBAC shirt selection" + path = /obj/item/clothing/accessory/ubac + flags = GEAR_HAS_TYPE_SELECTION + +/datum/gear/tactical/helm_covers + allowed_roles = ARMORED_ROLES + +/datum/gear/tactical/security_belt + display_name = "security belt" + path = /obj/item/storage/belt/security + slot = slot_belt + allowed_roles = ARMED_ROLES + +/datum/gear/tactical/holster/New() + allowed_roles = ARMED_ROLES + allowed_roles += /datum/job/iaa + ..() + +/datum/gear/tactical/holster/New() + ..() + var/holsters = list() + holsters += /obj/item/clothing/accessory/storage/holster + holsters += /obj/item/clothing/accessory/storage/holster/armpit + holsters += /obj/item/clothing/accessory/storage/holster/hip + holsters += /obj/item/clothing/accessory/storage/holster/thigh + holsters += /obj/item/clothing/accessory/storage/holster/waist + gear_tweaks += new/datum/gear_tweak/path/specified_types_list(holsters) + +/* +/datum/gear/tactical/pcarrier_press + display_name = "journalist's plate carrier" + path = /obj/item/clothing/suit/armor/pcarrier/light/press + cost = 3 + allowed_roles = list("Journalist") //etc.broken +*/ + +/datum/gear/tactical/security_uniforms + display_name = "security uniform" + allowed_roles = SECURITY_ROLES + path = /obj/item/clothing/under + slot = slot_w_uniform + +/datum/gear/tactical/security_uniforms/New() + ..() + var/uniforms = list() + uniforms += /obj/item/clothing/under/rank/security/corp/alt + uniforms += /obj/item/clothing/under/rank/security/navyblue + uniforms += /obj/item/clothing/under/rank/security/navyblue/alt + gear_tweaks += new/datum/gear_tweak/path/specified_types_list(uniforms) + +/datum/gear/tactical/bloodpatch + display_name = "blood patch selection" + path = /obj/item/clothing/accessory/armor_tag + allowed_roles = ARMORED_ROLES + +/datum/gear/tactical/bloodpatch/New() + ..() + var/blatch = list() + blatch["O+ blood patch"] = /obj/item/clothing/accessory/armor_tag/opos + blatch["O- blood patch"] = /obj/item/clothing/accessory/armor_tag/oneg + blatch["A+ blood patch"] = /obj/item/clothing/accessory/armor_tag/apos + blatch["A- blood patch"] = /obj/item/clothing/accessory/armor_tag/aneg + blatch["B+ blood patch"] = /obj/item/clothing/accessory/armor_tag/bpos + blatch["B- blood patch"] = /obj/item/clothing/accessory/armor_tag/bneg + blatch["AB+ blood patch"] = /obj/item/clothing/accessory/armor_tag/abpos + blatch["AB- blood patch"] = /obj/item/clothing/accessory/armor_tag/abneg + gear_tweaks += new/datum/gear_tweak/path(blatch) + + +/datum/gear/tactical/armor_pouches + display_name = "armor pouches selection" + path = /obj/item/clothing/accessory/storage/pouches + allowed_roles = ARMORED_ROLES + cost = 3 + +/datum/gear/tactical/armor_pouches/New() + ..() + var/pouches = list() + pouches["tan storage pouches"] = /obj/item/clothing/accessory/storage/pouches/tan + pouches["navy storage pouches"] = /obj/item/clothing/accessory/storage/pouches/navy + pouches["green storage pouches"] = /obj/item/clothing/accessory/storage/pouches/green + pouches["blue storage pouches"] = /obj/item/clothing/accessory/storage/pouches/blue + pouches["black storage pouches"] = /obj/item/clothing/accessory/storage/pouches + gear_tweaks += new/datum/gear_tweak/path(pouches) + +/datum/gear/tactical/large_pouches + display_name = "large armor pouches selection" + path = /obj/item/clothing/accessory/storage/pouches/large + allowed_roles = ARMORED_ROLES + cost = 6 + +/datum/gear/tactical/large_pouches/New() + ..() + var/lpouches = list() + lpouches["large tan storage pouches"] = /obj/item/clothing/accessory/storage/pouches/large/tan + lpouches["large navy storage pouches"] = /obj/item/clothing/accessory/storage/pouches/large/navy + lpouches["large green storage pouches"] = /obj/item/clothing/accessory/storage/pouches/large/green + lpouches["large blue storage pouches"] = /obj/item/clothing/accessory/storage/pouches/large/blue + lpouches["large black storage pouches"] = /obj/item/clothing/accessory/storage/pouches/large + gear_tweaks += new/datum/gear_tweak/path(lpouches) + + +/datum/gear/tactical/armor_deco + display_name = "armor tags selection" + path = /obj/item/clothing/accessory/armor_tag + allowed_roles = ARMORED_ROLES + +/datum/gear/tactical/armor_deco/New() + ..() + var/atags = list() + atags["NTSF tag"] = /obj/item/clothing/accessory/armor_tag/nt + atags["PCRC tag"] = /obj/item/clothing/accessory/armor_tag/pcrc + atags["SAARE tag"] = /obj/item/clothing/accessory/armor_tag/saare + atags["SCP tag"] = /obj/item/clothing/accessory/armor_tag/scp + atags["ZPCI tag"] = /obj/item/clothing/accessory/armor_tag/zpci + gear_tweaks += new/datum/gear_tweak/path(atags) + +/datum/gear/tactical/press_tag + display_name = "Press tag" + path = /obj/item/clothing/accessory/armor_tag/press + +/datum/gear/tactical/pcarrier + display_name = "empty plate carriers selection" + path = /obj/item/clothing/suit/armor/pcarrier + slot = slot_wear_suit + allowed_roles = ARMORED_ROLES + +/datum/gear/tactical/pcarrier/New() + ..() + var/armor = list() + armor["black plate carrier"] = /obj/item/clothing/suit/armor/pcarrier + armor["blue plate carrier"] = /obj/item/clothing/suit/armor/pcarrier/blue + armor["navy plate carrier"] = /obj/item/clothing/suit/armor/pcarrier/navy + armor["green plate carrier"] = /obj/item/clothing/suit/armor/pcarrier/green + armor["tan plate carrier"] = /obj/item/clothing/suit/armor/pcarrier/tan + gear_tweaks += new/datum/gear_tweak/path(armor) diff --git a/maps/sierra/loadout/loadout_uniform.dm b/maps/sierra/loadout/loadout_uniform.dm new file mode 100644 index 0000000000000..fd2eea5e3c8a8 --- /dev/null +++ b/maps/sierra/loadout/loadout_uniform.dm @@ -0,0 +1,94 @@ +/datum/gear/uniform/utility + display_name = "utility uniform" + path = /obj/item/clothing/under/solgov/utility + +/datum/gear/uniform/roboticist_skirt + allowed_roles = list(/datum/job/roboticist) + +/datum/gear/uniform/sterile + allowed_roles = STERILE_ROLES + +/datum/gear/uniform/hazard + allowed_roles = TECHNICAL_ROLES + +/* SIERRA TODO: watch for contractors uniforms, may be in mods +/datum/gear/uniform/corpsi + display_name = "contractor uniform selection" + path = /obj/item/clothing/under/solgov/utility + allowed_branches = list(/datum/mil_branch/contractor) +*/ + +/datum/gear/uniform/si_guard + display_name = "Nanotrasen guard uniform" + path = /obj/item/clothing/under/rank/guard/nanotrasen + allowed_roles = list(/datum/job/officer) + +/datum/gear/uniform/si_exec + display_name = "Nanotrasen senior researcher alt uniform" + path = /obj/item/clothing/under/rank/scientist/executive/nanotrasen + allowed_roles = list(/datum/job/senior_scientist) + +/datum/gear/uniform/si_overalls + display_name = "corporate coveralls" + path = /obj/item/clothing/under/rank/ntwork + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/contractor) + +/datum/gear/uniform/si_overalls/New() + ..() + var/overalls = list() + overalls["NT beige and red coveralls"] = /obj/item/clothing/under/rank/ntwork/nanotrasen + overalls["Hephaestus grey and cyan coveralls"] = /obj/item/clothing/under/rank/ntwork/heph + gear_tweaks += new/datum/gear_tweak/path(overalls) + +/datum/gear/uniform/si_flight + display_name = "corporate pilot suit" + path = /obj/item/clothing/under/rank/ntpilot + allowed_branches = list(/datum/mil_branch/employee, /datum/mil_branch/contractor) + +/datum/gear/uniform/si_flight/New() + ..() + var/flight = list() + flight["NT red flight suit"] = /obj/item/clothing/under/rank/ntpilot/nanotrasen + flight["Hephaestus cyan flight suit"] = /obj/item/clothing/under/rank/ntpilot/heph + gear_tweaks += new/datum/gear_tweak/path(flight) + +/datum/gear/uniform/si_exec_jacket + display_name = "Nanotrasen liason suit" + path = /obj/item/clothing/under/suit_jacket/corp/nanotrasen + allowed_roles = list(/datum/job/iaa) + +/datum/gear/uniform/formal_shirt_and_pants + display_name = "formal shirts with pants" + path = /obj/item/clothing/under/suit_jacket + +/datum/gear/uniform/formal_shirt_and_pants/New() + ..() + var/list/shirts = list() + shirts += /obj/item/clothing/under/suit_jacket/charcoal + shirts += /obj/item/clothing/under/suit_jacket/navy + shirts += /obj/item/clothing/under/suit_jacket/burgundy + shirts += /obj/item/clothing/under/suit_jacket/checkered + gear_tweaks += new/datum/gear_tweak/path/specified_types_list(shirts) + +/datum/gear/uniform/retro_security + display_name = "retro security officer's uniform" + allowed_roles = SECURITY_ROLES + path = /obj/item/clothing/under/retro/security + +/datum/gear/uniform/retro_medical + display_name = "retro medical officer's uniform" + allowed_roles = STERILE_ROLES + path = /obj/item/clothing/under/retro/medical + +/datum/gear/uniform/retro_engineering + display_name = "retro engineering uniform" + allowed_roles = TECHNICAL_ROLES + path = /obj/item/clothing/under/retro/engineering + +/datum/gear/uniform/retro_science + display_name = "retro science officer's uniform" + allowed_roles = RESEARCH_ROLES + path = /obj/item/clothing/under/retro/science + +/datum/gear/suit/unathi/officer_uniform + allowed_roles = SECURITY_ROLES diff --git a/maps/sierra/loadout/~defines.dm b/maps/sierra/loadout/~defines.dm new file mode 100644 index 0000000000000..2fa3751323c5f --- /dev/null +++ b/maps/sierra/loadout/~defines.dm @@ -0,0 +1,39 @@ +//The following is the list of undefs for the Sierra loadout. + +#undef EXPLORATION_ROLES + +#undef FORMAL_ROLES + +#undef SEMIFORMAL_ROLES + +#undef SEMIANDFORMAL_ROLES + +#undef NANOTRASEN_ROLES + +#undef RESTRICTED_ROLES + +#undef COMMAND_ROLES + +#undef MEDICAL_ROLES + +#undef STERILE_ROLES + +#undef ENGINEERING_ROLES + +#undef TECHNICAL_ROLES + +#undef SECURITY_ROLES + +#undef SUPPLY_ROLES + +#undef SERVICE_ROLES + +#undef RESEARCH_ROLES + +#undef ARMED_ROLES + +#undef ARMORED_ROLES + +#undef CONTRACT_ROLES + +#undef CIVILIAN_ROLES diff --git a/maps/sierra/machinery/alarm.dm b/maps/sierra/machinery/alarm.dm new file mode 100644 index 0000000000000..620a1be1950ee --- /dev/null +++ b/maps/sierra/machinery/alarm.dm @@ -0,0 +1,9 @@ +/obj/machinery/alarm/monitor/isolation + req_access = list(list(access_research, access_atmospherics, access_engine_equip, access_petrov)) + +/obj/machinery/alarm/monitor/isolation/xenobio //just for a managment + +/obj/machinery/alarm/monitor/isolation/petrov //just for a managment + +/obj/machinery/alarm/merchant + req_access = list(access_merchant) diff --git a/maps/sierra/machinery/doors.dm b/maps/sierra/machinery/doors.dm new file mode 100644 index 0000000000000..a353c4c61674b --- /dev/null +++ b/maps/sierra/machinery/doors.dm @@ -0,0 +1,53 @@ +/obj/machinery/door/airlock/medical/mortus + door_color = COLOR_DARK_GUNMETAL + stripe_color = COLOR_SKY_BLUE + +/obj/machinery/door/airlock/multi_tile/glass/medical/mortus + door_color = COLOR_DARK_GUNMETAL + stripe_color = COLOR_SKY_BLUE + +/obj/machinery/door/airlock/antagonist + door_color = COLOR_WALL_GUNMETAL + stripe_color = COLOR_RED_LIGHT + +/obj/machinery/door/airlock/multi_tile/antagonist + door_color = COLOR_WALL_GUNMETAL + stripe_color = COLOR_RED_LIGHT + +/obj/machinery/door/airlock/glass/medical/mortus + door_color = COLOR_DARK_GUNMETAL + stripe_color = COLOR_SKY_BLUE + +/obj/machinery/door/blast/regular/lockdown + name = "Security Lockdown" + desc = "That looks like it doesn't open easily. \ + But that one has NFC sign. May be my ID can help?" + req_access = list(list(access_sec_doors, access_engine, access_medical)) + begins_closed = FALSE + icon_state = "pdoor0" + health_min_damage = 50 + health_max = 5000 + +/obj/machinery/door/blast/regular/lockdown/emag_act(remaining_charges) + . = ..(remaining_charges, TRUE) + if(.) + for(var/obj/machinery/door/blast/regular/lockdown/door as anything in SSmachines.get_machinery_of_type(/obj/machinery/door/blast/regular/lockdown)) + if(door.id_tag == id_tag && door.density && door.operable()) + invoke_async(door, TYPE_PROC_REF(/obj/machinery/door, do_animate), "emag") + +/obj/machinery/door/blast/regular/lockdown/use_tool(obj/item/tool, mob/living/user, list/click_params) + if(isid(tool) || istype(tool, /obj/item/modular_computer/pda)) + if(allowed(user)) + for(var/obj/machinery/door/blast/regular/lockdown/door as anything in SSmachines.get_machinery_of_type(/obj/machinery/door/blast/regular/lockdown)) + if(door.id_tag == id_tag) + invoke_async(door, TYPE_PROC_REF(/obj/machinery/door, open)) + return TRUE + return ..() + +/obj/machinery/door/blast/regular/lockdown/attack_ai() + for(var/obj/machinery/door/blast/regular/lockdown/door as anything in SSmachines.get_machinery_of_type(/obj/machinery/door/blast/regular/lockdown)) + if(door.id_tag == id_tag) + if(door.density) + invoke_async(door, TYPE_PROC_REF(/obj/machinery/door, open)) + else + invoke_async(door, TYPE_PROC_REF(/obj/machinery/door, close)) diff --git a/maps/sierra/machinery/keycard authentication.dm b/maps/sierra/machinery/keycard authentication.dm new file mode 100644 index 0000000000000..a641abf750eb7 --- /dev/null +++ b/maps/sierra/machinery/keycard authentication.dm @@ -0,0 +1,75 @@ +/obj/machinery/keycard_auth/sierra/interact(mob/user) + user.set_machine(src) + + var/list/dat = list() + + dat += "

    Keycard Authentication Device

    " + + dat += "This device is used to trigger some high security events. It requires the simultaneous swipe of two high-level ID cards." + dat += "


    " + + if(screen == 1) + dat += "Select an event to trigger:
    " + + var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) + if(security_state.current_security_level == security_state.severe_security_level) + dat += "Cannot modify the alert level at this time: [security_state.severe_security_level.name] engaged.
    " + else + if(security_state.current_security_level == security_state.high_security_level) + dat += "Disengage [security_state.high_security_level.name]
    " + else + dat += "Engage [security_state.high_security_level.name]
    " + + if(!config.ert_admin_call_only) + dat += "Emergency Response Team
    " + + dat += "Grant Emergency Maintenance Access
    " + dat += "Revoke Emergency Maintenance Access
    " + dat += "Grant Nuclear Authorization Code
    " + dat += "Initiate Evacuation Procedures
    " + if(screen == 2) + dat += "Please swipe your card to authorize the following event: [event]" + dat += "

    Back" + + var/datum/browser/popup = new(user, "kad_window", "Keycard Authentication Device", 500, 250) + popup.set_content(JOINTEXT(dat)) + popup.open() + return + +/obj/machinery/keycard_auth/sierra/trigger_event() + switch(event) + if("Red alert") + var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) + security_state.stored_security_level = security_state.current_security_level + security_state.set_security_level(security_state.high_security_level) + if("Revert alert") + var/singleton/security_state/security_state = GET_SINGLETON(GLOB.using_map.security_state) + security_state.set_security_level(security_state.stored_security_level) + if("Grant Emergency Maintenance Access") + GLOB.using_map.make_maint_all_access() + if("Revoke Emergency Maintenance Access") + GLOB.using_map.revoke_maint_all_access() + if("Emergency Response Team") + if(is_ert_blocked()) + to_chat(usr, SPAN_WARNING("All emergency response teams are dispatched and can not be called at this time.")) + return + + trigger_armed_response_team(1) + if("Grant Nuclear Authorization Code") + var/obj/machinery/nuclearbomb/nuke = locate(/obj/machinery/nuclearbomb/station) in SSmachines.get_machinery_of_type(/obj/machinery/nuclearbomb/station) + if(nuke) + to_chat(usr, "The nuclear authorization code is [nuke.r_code]") + else + to_chat(usr, "No self destruct terminal found.") + if("Bolt All Saferooms") + GLOB.using_map.bolt_saferooms() + if("Unbolt All Saferooms") + GLOB.using_map.unbolt_saferooms() + if("Evacuate") + if(!evacuation_controller) + to_chat(usr, SPAN_DANGER("Unable to initiate evacuation!")) + return + for (var/datum/evacuation_option/EO in evacuation_controller.available_evac_options()) + if(EO.abandon_ship) + evacuation_controller.handle_evac_option(EO.option_target, usr, TRUE) + return diff --git a/maps/sierra/machinery/machinery.dm b/maps/sierra/machinery/machinery.dm new file mode 100644 index 0000000000000..a89c28ea62cb8 --- /dev/null +++ b/maps/sierra/machinery/machinery.dm @@ -0,0 +1,247 @@ +//Shouldn't be a lot in here, only sierra versions of existing machines that need a different access req or something along those lines. + +/obj/machinery/drone_fabricator/sierra + fabricator_tag = "NES Sierra Maintenance" + +/obj/machinery/drone_fabricator/sierra/adv + name = "advanced drone fabricator" + fabricator_tag = "SFV Arrow Maintenance" + drone_type = /mob/living/silicon/robot/drone/construction + +//telecommunications gubbins for sierra-specific networks + +/obj/machinery/telecomms/hub/preset + id = "Hub" + network = "tcommsat" + autolinkers = list("hub", "relay", "c_relay", "s_relay", "m_relay", "r_relay", "b_relay", "1_relay", "2_relay", "3_relay", "4_relay", "5_relay", "s_relay", "science", "medical", + "supply", "service", "common", "command", "engineering", "security", "exploration", "unused", + "receiverA", "broadcasterA") + +/obj/machinery/telecomms/receiver/preset_right + freq_listening = list(AI_FREQ, SCI_FREQ, MED_FREQ, SUP_FREQ, SRV_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ, ENT_FREQ, EXP_FREQ) + +/obj/machinery/telecomms/bus/preset_two + freq_listening = list(SUP_FREQ, SRV_FREQ, EXP_FREQ) + autolinkers = list("processor2", "supply", "service", "exploration", "unused") + +/obj/machinery/telecomms/server/presets/service + id = "Service and Exploration Server" + freq_listening = list(SRV_FREQ, EXP_FREQ) + channel_tags = list( + list(SRV_FREQ, "Service", COMMS_COLOR_SERVICE), + list(EXP_FREQ, "Exploration", COMMS_COLOR_EXPLORER) + ) + autolinkers = list("service", "exploration") + +/obj/machinery/telecomms/server/presets/exploration + id = "Utility Server" + freq_listening = list(EXP_FREQ) + channel_tags = list(list(EXP_FREQ, "Exploration", COMMS_COLOR_EXPLORER)) + autolinkers = list("Exploration") + +// Suit cyclers and storage +/obj/machinery/suit_cycler/exploration + name = "Exploration suit cycler" + model_text = "Exploration" + req_access = list(access_explorer) + available_modifications = list(/singleton/item_modifier/space_suit/sol/sierra/exploration) + +/obj/machinery/suit_cycler/pilot + req_access = list(access_explorer) //because unathi version of expeditonary suit it shit + +// Overrides + +/obj/machinery/suit_storage_unit/security + name = "security voidsuit storage unit" + suit= /obj/item/clothing/suit/space/void/security + helmet = /obj/item/clothing/head/helmet/space/void/security + boots = /obj/item/clothing/shoes/magboots + tank = /obj/item/tank/oxygen + mask = /obj/item/clothing/mask/breath + req_access = list(access_security) + islocked = 1 + ssu_color = "#cc0000" + +/obj/machinery/suit_storage_unit/medical + name = "medical voidsuit storage unit" + suit= /obj/item/clothing/suit/space/void/medical + helmet = /obj/item/clothing/head/helmet/space/void/medical + boots = /obj/item/clothing/shoes/magboots + tank = /obj/item/tank/oxygen + mask = /obj/item/clothing/mask/breath + req_access = list(access_medical) + islocked = 1 + ssu_color = "#55aaaa" + +/obj/machinery/suit_storage_unit/mining/Initialize() + . = ..() + ssu_color = "#b88a3b" + +/obj/machinery/suit_storage_unit/engineering/Initialize() + . = ..() + ssu_color = "#ffbf00" + +/obj/machinery/suit_storage_unit/atmos/Initialize() + . = ..() + ssu_color = "#00cccc" + +/obj/machinery/suit_storage_unit/science/Initialize() + . = ..() + ssu_color = "#990000" + +/obj/machinery/suit_storage_unit/security/sapper + name = "Sapper Voidsuit Storage Unit" + suit = /obj/item/clothing/suit/space/void/sapper + helmet = /obj/item/clothing/head/helmet/space/void/sapper + ssu_color = "#54654c" + +/obj/machinery/suit_storage_unit/explorer + name = "Exploration Voidsuit Storage Unit" + suit = /obj/item/clothing/suit/space/void/exploration + helmet = /obj/item/clothing/head/helmet/space/void/exploration + boots = /obj/item/clothing/shoes/magboots + tank = /obj/item/tank/oxygen + mask = /obj/item/clothing/mask/gas/half + req_access = list(access_explorer) + islocked = 1 + ssu_color = "#9966ff" + +/obj/machinery/suit_storage_unit/pilot + name = "Expeditionary Pilot Voidsuit Storage Unit" + suit = /obj/item/clothing/suit/space/void/pilot + helmet = /obj/item/clothing/head/helmet/space/void/pilot + boots = /obj/item/clothing/shoes/magboots + tank = /obj/item/tank/oxygen + mask = /obj/item/clothing/mask/breath + req_access = list(access_explorer, access_expedition_shuttle_helm) + islocked = 1 + ssu_color = "#990000" + +/obj/machinery/suit_storage_unit/standard_unit + icon_state = "industrial" + base_icon_state = "industrial" + islocked = 0 + +/obj/machinery/photocopier/faxmachine/centcom + req_access = list(access_cent_general) + department = "Office of Civil Investigation and Enforcement" + +/obj/machinery/photocopier/faxmachine/centcom/Initialize() + . = ..() + destination = pick(GLOB.alldepartments) + department = "[GLOB.using_map.boss_name]" + +/obj/machinery/photocopier/faxmachine/centcom/attack_hand(mob/user as mob) + user.set_machine(src) + var/dat = "Fax Machine
    " + var/scan_name + if(scan) + scan_name = scan.name + else + scan_name = "--------" + dat += "Confirm Identity: [scan_name]
    " + if(authenticated) + dat += "{Log Out}" + else + dat += "{Log In}" + dat += "


    " + if(authenticated) + dat += "Logged in to: [GLOB.using_map.boss_name] Quantum Entanglement Network

    " + if(copyitem) + dat += "Remove Item

    " + dat += "Send via NONSECURE connection
    " + dat += "Currently sending: [copyitem.name]
    " + dat += "Sending to: [destination]
    " + else + dat += "Please insert paper to send via NONSECURE connection.

    " + dat += "Sending to: [destination]
    " + dat += "Create and send message via SECURE connection
    " + else + dat += "Proper authentication is required to use this device.

    " + if(copyitem) + dat += "Remove Item
    " + show_browser(user, dat, "window=copier") + onclose(user, "copier") + return + +/obj/machinery/photocopier/faxmachine/centcom/Topic(href, href_list) + var/mob/user = usr + if(href_list["send"]) + if(copyitem) + if (destination in GLOB.admin_departments) + visible_message("[src] beeps, \"It's looks stupid...\"") + else + sendfax(destination) + + else if(href_list["remove"]) + if(copyitem) + user.put_in_hands(copyitem) + to_chat(user, "You take \the [copyitem] out of \the [src].") + copyitem = null + updateUsrDialog() + + if(href_list["secsend"]) //May cause some bad situations... + if (!destination) + visible_message("[src] beeps, \"No departament selected.\"") + return + var/kek = user.client.holder + if (!istype(kek,/datum/admins)) + visible_message("[src] beeps, \"DNA check failed! Heads was warned!\"") + log_admin("[key_name(user)] found admin fax machine and use it without admin rights!") + for(var/client/C in GLOB.admins) + if((R_INVESTIGATE) & C.holder.rights) + to_chat(C, "FAX LOG:[key_name(user)] found admin fax machine and use it without admin rights!([admin_jump_link(user, src)]))") + return + var/exit + for(var/obj/machinery/photocopier/faxmachine/sendto in GLOB.allfaxes) + if(sendto.department == destination) + exit = sendto + var/replyorigin = input(user, "Please specify who the fax is coming from", "Origin") as text|null + var/obj/item/paper/admin/P = new /obj/item/paper/admin(user) //hopefully the null loc won't cause trouble for us + P.admindatum = user.client.holder + P.origin = replyorigin + P.destinations = exit + P.adminbrowse() + visible_message("[src] beeps, \"Setting up secure channel...\"") + + if(href_list["scan"]) + if (scan) + if(ishuman(user)) + user.put_in_hands(scan) + else + scan.dropInto(loc) + scan = null + else + var/obj/item/I = user.get_active_hand() + if (istype(I, /obj/item/card/id) && user.unEquip(I, src)) + scan = I + authenticated = 0 + + if(href_list["dept"]) + var/lastdestination = destination + destination = input(usr, "Which department?", "Choose a department") as null|anything in GLOB.alldepartments + if(!destination) + destination = lastdestination + + if(href_list["auth"]) + if(!authenticated && scan && check_access(scan)) + authenticated = 1 + + if(href_list["logout"]) + authenticated = 0 + updateUsrDialog() + +//bridge space turrets + +/obj/machinery/turretid/sierra_bridge + lethal = 1 + check_arrest = 1 //checks if the perp is set to arrest + check_records = 1 //checks if a security record exists at all + check_weapons = 1 //checks if it can shoot people that have a weapon they aren't authorized to have + check_access = 1 //if this is active, the turret shoots everything that does not meet the access requirements + req_access = list(access_bridge) + +// Shieldgen + +/obj/machinery/power/shield_generator + icon = 'maps/sierra/icons/obj/shielding.dmi' diff --git a/maps/sierra/machinery/navbeacons.dm b/maps/sierra/machinery/navbeacons.dm new file mode 100644 index 0000000000000..32bd3ff9a1955 --- /dev/null +++ b/maps/sierra/machinery/navbeacons.dm @@ -0,0 +1,165 @@ +// First deck + +/obj/machinery/navbeacon/sierra/FD_afthallway1 + location = "FD_afthallway1" + codes = list("patrol" = 1, "next_patrol" = "FD_aftcentralhallway1") + +/obj/machinery/navbeacon/sierra/FD_afthallway2 + location = "FD_afthallway2" + codes = list("patrol" = 1, "next_patrol" = "FD_afthallway1") + +/obj/machinery/navbeacon/sierra/FD_aftcentralhallway1 + location = "FD_aftcentralhallway1" + codes = list("patrol" = 1, "next_patrol" = "FD_forecentralhallway1") + +/obj/machinery/navbeacon/sierra/FD_aftcentralhallway2 + location = "FD_aftcentralhallway2" + codes = list("patrol" = 1, "next_patrol" = "FD_afthallway2") + +/obj/machinery/navbeacon/sierra/FD_forecentralhallway1 + location = "FD_forecentralhallway1" + codes = list("patrol" = 1, "next_patrol" = "FD_forehallway1") + +/obj/machinery/navbeacon/sierra/FD_forecentralhallway2 + location = "FD_forecentralhallway2" + codes = list("patrol" = 1, "next_patrol" = "FD_aftcentralhallway2") + +/obj/machinery/navbeacon/sierra/FD_forehallway1 + location = "FD_forehallway1" + codes = list("patrol" = 1, "next_patrol" = "FD_forehallway_starboard") + +/obj/machinery/navbeacon/sierra/FD_forehallway2 + location = "FD_forehallway2" + codes = list("patrol" = 1, "next_patrol" = "FD_forecentralhallway2") + +/obj/machinery/navbeacon/sierra/FD_forehallway_starboard + location = "FD_forehallway_starboard" + codes = list("patrol" = 1, "next_patrol" = "FD_forehallway2") + +// Second deck + +/obj/machinery/navbeacon/sierra/SD_fore1 + location = "SD_fore1" + codes = list("patrol" = 1, "next_patrol" = "SD_fore2") + +/obj/machinery/navbeacon/sierra/SD_fore2 + location = "SD_fore2" + codes = list("patrol" = 1, "next_patrol" = "SD_fore3") + +/obj/machinery/navbeacon/sierra/SD_fore3 + location = "SD_fore3" + codes = list("patrol" = 1, "next_patrol" = "SD_fore4") + +/obj/machinery/navbeacon/sierra/SD_fore4 + location = "SD_fore4" + codes = list("patrol" = 1, "next_patrol" = "SD_fore5") + +/obj/machinery/navbeacon/sierra/SD_fore5 + location = "SD_fore5" + codes = list("patrol" = 1, "next_patrol" = "SD_fore6") + +/obj/machinery/navbeacon/sierra/SD_fore6 + location = "SD_fore6" + codes = list("patrol" = 1, "next_patrol" = "SD_forehallway2") + +/obj/machinery/navbeacon/sierra/SD_forehallway2 + location = "SD_forehallway2" + codes = list("patrol" = 1, "next_patrol" = "SD_centralhallway2") + +/obj/machinery/navbeacon/sierra/SD_centralhallway2 + location = "SD_centralhallway2" + codes = list("patrol" = 1, "next_patrol" = "SD_afthallway2") + +/obj/machinery/navbeacon/sierra/SD_afthallway2 + location = "SD_afthallway2" + codes = list("patrol" = 1, "next_patrol" = "SD_afthallway1") + +/obj/machinery/navbeacon/sierra/SD_afthallway1 + location = "SD_afthallway1" + codes = list("patrol" = 1, "next_patrol" = "SD_centralhallway1") + +/obj/machinery/navbeacon/sierra/SD_centralhallway1 + location = "SD_centralhallway1" + codes = list("patrol" = 1, "next_patrol" = "SD_forehallway1") + +/obj/machinery/navbeacon/sierra/SD_forehallway1 + location = "SD_forehallway1" + codes = list("patrol" = 1, "next_patrol" = "SD_fore1") + +// Third deck + +/obj/machinery/navbeacon/sierra/TD_fore1 + location = "TD_fore1" + codes = list("patrol" = 1, "next_patrol" = "TD_fore2") + +/obj/machinery/navbeacon/sierra/TD_fore2 + location = "TD_fore2" + codes = list("patrol" = 1, "next_patrol" = "TD_fore3") + +/obj/machinery/navbeacon/sierra/TD_fore3 + location = "TD_fore3" + codes = list("patrol" = 1, "next_patrol" = "TD_fore3_port") + +/obj/machinery/navbeacon/sierra/TD_fore3_port + location = "TD_fore3_port" + codes = list("patrol" = 1, "next_patrol" = "TD_fore4") + +/obj/machinery/navbeacon/sierra/TD_fore4 + location = "TD_fore4" + codes = list("patrol" = 1, "next_patrol" = "TD_fore5") + +/obj/machinery/navbeacon/sierra/TD_fore5 + location = "TD_fore5" + codes = list("patrol" = 1, "next_patrol" = "TD_fore6") + +/obj/machinery/navbeacon/sierra/TD_fore6 + location = "TD_fore6" + codes = list("patrol" = 1, "next_patrol" = "TD_fore7") + +/obj/machinery/navbeacon/sierra/TD_fore7 + location = "TD_fore7" + codes = list("patrol" = 1, "next_patrol" = "TD_fore7_starboard") + +/obj/machinery/navbeacon/sierra/TD_fore7_starboard + location = "TD_fore7_starboard" + codes = list("patrol" = 1, "next_patrol" = "TD_fore8") + +/obj/machinery/navbeacon/sierra/TD_fore8 + location = "TD_fore8" + codes = list("patrol" = 1, "next_patrol" = "TD_fore9") + +/obj/machinery/navbeacon/sierra/TD_fore9 + location = "TD_fore9" + codes = list("patrol" = 1, "next_patrol" = "TD_fore91") + +/obj/machinery/navbeacon/sierra/TD_fore91 + location = "TD_fore91" + codes = list("patrol" = 1, "next_patrol" = "TD_centralhallway2") + +/obj/machinery/navbeacon/sierra/TD_centralhallway2 + location = "TD_centralhallway2" + codes = list("patrol" = 1, "next_patrol" = "TD_starboard") + +/obj/machinery/navbeacon/sierra/TD_starboard + location = "TD_starboard" + codes = list("patrol" = 1, "next_patrol" = "TD_port") + +/obj/machinery/navbeacon/sierra/TD_port + location = "TD_port" + codes = list("patrol" = 1, "next_patrol" = "TD_centralhallway3") + +/obj/machinery/navbeacon/sierra/TD_centralhallway3 + location = "TD_centralhallway3" + codes = list("patrol" = 1, "next_patrol" = "TD_afthallway2") + +/obj/machinery/navbeacon/sierra/TD_afthallway2 + location = "TD_afthallway2" + codes = list("patrol" = 1, "next_patrol" = "TD_afthallway1") + +/obj/machinery/navbeacon/sierra/TD_afthallway1 + location = "TD_afthallway1" + codes = list("patrol" = 1, "next_patrol" = "TD_centralhallway1") + +/obj/machinery/navbeacon/sierra/TD_centralhallway1 + location = "TD_centralhallway1" + codes = list("patrol" = 1, "next_patrol" = "TD_fore1") diff --git a/maps/sierra/machinery/power.dm b/maps/sierra/machinery/power.dm new file mode 100644 index 0000000000000..be38d76eb3023 --- /dev/null +++ b/maps/sierra/machinery/power.dm @@ -0,0 +1,68 @@ +/obj/machinery/power/apc/charon + req_access = list(list(access_expedition_shuttle_helm, access_engine)) //for pilot, EL and field/regular engineers + +/obj/machinery/power/apc/merchant + req_access = list(access_merchant) + +/obj/machinery/power/apc/bsa + cell_type = /obj/item/cell/high + /*INF@SHRUG + chargelevel = 0.1 //1% per second (10w) + */ + +// +// SMES units +// + +// Substation SMES +/obj/machinery/power/smes/buildable/preset/sierra/substation + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil = 2) + _input_maxed = TRUE + _output_maxed = TRUE + +// Substation SMES (charged and with full I/O setting) +/obj/machinery/power/smes/buildable/preset/sierra/substation_full + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil = 2) + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE + +// Main Engine output SMES +/obj/machinery/power/smes/buildable/preset/sierra/engine_main + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil/super_io = 2, + /obj/item/stock_parts/smes_coil/super_capacity = 2) + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE + +// Shuttle SMES +/obj/machinery/power/smes/buildable/preset/sierra/shuttle + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil/super_io = 1) + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE + +// Charon's smes - Coltrane97@inf-dev +/obj/machinery/power/smes/buildable/preset/sierra/shuttle/charon + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil/super_io = 1, + /obj/item/stock_parts/smes_coil/super_capacity = 1) + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE + +// Hangar SMES. Charges the shuttles so needs a pretty big throughput. +/obj/machinery/power/smes/buildable/preset/sierra/hangar + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil/super_io = 2) + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE diff --git a/maps/sierra/machinery/random.dm b/maps/sierra/machinery/random.dm new file mode 100644 index 0000000000000..fe7311818c188 --- /dev/null +++ b/maps/sierra/machinery/random.dm @@ -0,0 +1,93 @@ +/******************* +Random item spawning +*******************/ + +/obj/random/solgov + name = "random solgov equipment" + desc = "This is a random piece of solgov equipment or clothing." + icon = 'icons/obj/clothing/obj_head.dmi' + icon_state = "swatglass" + +/obj/random/solgov/spawn_choices() + return list(/obj/item/clothing/head/solgov/utility/fleet = 4, + /obj/item/clothing/head/soft/solgov/expedition = 2, + /obj/item/clothing/head/soft/solgov/fleet = 4, + /obj/item/clothing/head/helmet/solgov = 1, + /obj/item/clothing/suit/storage/vest/solgov = 2, + /obj/item/clothing/under/solgov/utility = 5, + /obj/item/clothing/under/solgov/utility/fleet = 3, + /obj/item/clothing/under/solgov/pt/expeditionary = 4, + /obj/item/clothing/under/solgov/pt/fleet = 4 + ) + +/obj/random/maintenance/solgov + name = "random maintenance item" + desc = "This is a random maintenance item." + icon = 'icons/obj/parcels.dmi' + icon_state = "gift1" + +/obj/random/maintenance/solgov/spawn_choices() + return list(/obj/random/junk = 4, + /obj/random/trash = 4, + /obj/random/maintenance/solgov/clean = 5) + +/obj/random/maintenance/solgov/clean + name = "random maintenance item" + desc = "This is a random maintenance item." + icon = 'icons/obj/parcels.dmi' + icon_state = "gift2" + +/obj/random/maintenance/solgov/clean/spawn_choices() + return list(/obj/random/solgov = 3, + /obj/random/maintenance/clean = 800) + +/obj/random/hostile/xenobio + name = "Random Mob" + desc = "This is a random mob." + icon = 'icons/mob/simple_animal/animal.dmi' + icon_state = "yithian" + spawn_nothing_percentage = 50 + +/obj/random/hostile/xenobio/spawn_choices() + return list(/mob/living/simple_animal/slime, + /mob/living/simple_animal/hostile/carp, + /mob/living/simple_animal/passive/crab, + /mob/living/simple_animal/thinbug, + /mob/living/simple_animal/yithian) + +/obj/random/material_rnd_steel + name = "random steel" + desc = "This is a random metal ammout for RND's storage." + icon = 'icons/obj/materials/materials.dmi' + icon_state = "sheet-mult" + spawn_nothing_percentage = 50 + +/obj/random/material_rnd_steel/spawn_choices() + return list(/obj/item/stack/material/steel/ten = 1, + /obj/item/stack/material/steel/fifty = 2) + +/obj/random/material_rnd_glass + name = "random glass" + desc = "This is a random glass ammout for RND's storage." + icon = 'icons/obj/materials/materials.dmi' + icon_state = "sheet-reinf-mult" + spawn_nothing_percentage = 50 + +/obj/random/material_rnd_glass/spawn_choices() + return list(/obj/item/stack/material/glass/ten = 1, + /obj/item/stack/material/glass/fifty = 2) + +/obj/random/blood_packs + name = "random blood" + desc = "This is random ammout of blood packs for medical bay." + icon = 'icons/obj/tools/bloodpack.dmi' + icon_state = "empty" + spawn_nothing_percentage = 0 + +/obj/random/blood_packs/spawn_choices() + return list(/obj/item/reagent_containers/ivbag/blood/human/oneg = 5, + /obj/item/reagent_containers/ivbag/blood/human/abpos = 3, + /obj/item/reagent_containers/ivbag/blood/human/bneg = 2) + +// SIERRA TODO: +// Надо сделать пакеты с кровью для резом и таяр diff --git a/maps/sierra/machinery/suit_storage.dm b/maps/sierra/machinery/suit_storage.dm new file mode 100644 index 0000000000000..54411726e38c5 --- /dev/null +++ b/maps/sierra/machinery/suit_storage.dm @@ -0,0 +1,44 @@ +/obj/machinery/suit_storage_unit + icon = 'maps/sierra/icons/obj/suitstorage.dmi' + icon_state = "industrial" + var/base_icon_state = "industrial" + var/ssu_color = "color_overlay_colorable" + +/obj/machinery/suit_storage_unit/on_update_icon() + ClearOverlays() + if(ssu_color) + var/image/I = image(icon = icon, icon_state = "[base_icon_state]_colorable") + I.appearance_flags |= RESET_COLOR + I.color = ssu_color + AddOverlays(I) + //if things arent powered, these show anyways + if(panelopen) + AddOverlays(image(icon,"[base_icon_state]_panel")) + + if(isopen) + AddOverlays(image(icon,"[base_icon_state]_open")) + if(suit) + AddOverlays(image(icon,"[base_icon_state]_suit")) + if(helmet) + AddOverlays(image(icon,"[base_icon_state]_helm")) + if(boots || tank || mask) + AddOverlays(image(icon,"[base_icon_state]_storage")) + if(isUV && issuperUV) + AddOverlays(image(icon,"[base_icon_state]_super")) + + if(!MACHINE_IS_BROKEN(src)) + if(isopen) + AddOverlays(image(icon,"[base_icon_state]_lights_open")) + else + if(isUV) + AddOverlays(image(icon,"[base_icon_state]_lights_red")) + else + AddOverlays(image(icon,"[base_icon_state]_lights_closed")) + //top lights + if(isUV) + if(issuperUV) + AddOverlays(overlay_image(icon,"[base_icon_state]_uvstrong", plane = EFFECTS_ABOVE_LIGHTING_PLANE, layer = ABOVE_LIGHTING_LAYER)) + else + AddOverlays(overlay_image(icon,"[base_icon_state]_uv", plane = EFFECTS_ABOVE_LIGHTING_PLANE, layer = ABOVE_LIGHTING_LAYER)) + else + AddOverlays(overlay_image(icon, "[base_icon_state]_ready", plane = EFFECTS_ABOVE_LIGHTING_PLANE, layer = ABOVE_LIGHTING_LAYER)) diff --git a/maps/sierra/machinery/tcomms.dm b/maps/sierra/machinery/tcomms.dm new file mode 100644 index 0000000000000..96bc0ea733794 --- /dev/null +++ b/maps/sierra/machinery/tcomms.dm @@ -0,0 +1,29 @@ +/obj/machinery/telecomms/relay/preset/charon + id = "Charon Relay" + toggled = 0 + autolinkers = list("s_relay") + +/datum/map/sierra/default_internal_channels() + return list( + num2text(PUB_FREQ) = list(), + num2text(AI_FREQ) = list(access_synth), + num2text(ENT_FREQ) = list(), + num2text(ERT_FREQ) = list(access_cent_specops), + num2text(COMM_FREQ) = list(access_heads), + num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics), + num2text(MED_FREQ) = list(access_medical_equip), + num2text(MED_I_FREQ) = list(access_medical_equip), + num2text(SEC_FREQ) = list(access_security), + num2text(SEC_I_FREQ) = list(access_security), + num2text(SCI_FREQ) = list(access_tox, access_robotics, access_xenobiology, access_el), + num2text(SUP_FREQ) = list(access_cargo), + num2text(SRV_FREQ) = list(access_janitor, access_hydroponics), + num2text(EXP_FREQ) = list(access_explorer, access_rd) + ) + +/obj/machinery/telecomms/hub/preset + id = "Hub" + network = "tcommsat" + autolinkers = list("hub", "relay", "c_relay", "s_relay", "m_relay", "r_relay", "b_relay", "1_relay", "2_relay", "3_relay", "4_relay", "5_relay", "s_relay", "science", "medical", + "supply", "service", "common", "command", "engineering", "security", "unused", "m_relay_a", + "receiverA", "broadcasterA") diff --git a/maps/sierra/machinery/thrusters.dm b/maps/sierra/machinery/thrusters.dm new file mode 100644 index 0000000000000..cffa9a1a58a6f --- /dev/null +++ b/maps/sierra/machinery/thrusters.dm @@ -0,0 +1,66 @@ +//starters + +/obj/machinery/button/toggle/valve/nacelle/first + name = "Third Deck Starboard Nacelle Fuel Control" + id_tag = "RE1F" + +/obj/machinery/button/toggle/valve/nacelle/second + name = "Third Deck Port Nacelle Fuel Control" + id_tag = "RE2F" + +/obj/machinery/button/toggle/valve/nacelle/third + name = "First Deck Starboard Nacelle Fuel Control" + id_tag = "RE3F" + +/obj/machinery/button/toggle/valve/nacelle/fourth + name = "First Deck Port Nacelle Fuel Control" + id_tag = "RE4F" +//sensors + +/obj/machinery/air_sensor/nacelle/first + id_tag = "ReacEng1" + +/obj/machinery/air_sensor/nacelle/first/plasma + id_tag = "ReacEngPlasma1" + +/obj/machinery/air_sensor/nacelle/first/oxygen + id_tag = "ReacEngOxygen1" + +/obj/machinery/air_sensor/nacelle/first/co2 + id_tag = "ReacEngCO21" + +/obj/machinery/air_sensor/nacelle/second + id_tag = "ReacEng2" + +/obj/machinery/air_sensor/nacelle/second/plasma + id_tag = "ReacEngPlasma2" + +/obj/machinery/air_sensor/nacelle/second/oxygen + id_tag = "ReacEngOxygen2" + +/obj/machinery/air_sensor/nacelle/second/co2 + id_tag = "ReacEngCO22" + +/obj/machinery/air_sensor/nacelle/third + id_tag = "ReacEng3" + +/obj/machinery/air_sensor/nacelle/third/plasma + id_tag = "ReacEngPlasma3" + +/obj/machinery/air_sensor/nacelle/third/oxygen + id_tag = "ReacEngOxygen3" + +/obj/machinery/air_sensor/nacelle/third/co2 + id_tag = "ReacEngCO23" + +/obj/machinery/air_sensor/nacelle/fourth + id_tag = "ReacEng4" + +/obj/machinery/air_sensor/nacelle/fourth/plasma + id_tag = "ReacEngPlasma4" + +/obj/machinery/air_sensor/nacelle/fourth/oxygen + id_tag = "ReacEngOxygen4" + +/obj/machinery/air_sensor/nacelle/fourth/co2 + id_tag = "ReacEngCO24" diff --git a/maps/sierra/machinery/uniform_vendor.dm b/maps/sierra/machinery/uniform_vendor.dm new file mode 100644 index 0000000000000..d733ad3388c45 --- /dev/null +++ b/maps/sierra/machinery/uniform_vendor.dm @@ -0,0 +1,201 @@ +/obj/machinery/uniform_vendor + name = "uniform vendor" + desc= "A uniform vendor for utility, service, and dress uniforms." + icon = 'icons/obj/machines/vending.dmi' + icon_state = "uniform" + layer = BELOW_OBJ_LAYER + anchored = TRUE + density = TRUE + + // Power + use_power = 1 + idle_power_usage = 10 + var/vend_power_usage = 150 //actuators and stuff + + var/obj/item/card/id/ID + var/list/uniforms = list() + var/list/selected_outfit = list() + var/global/list/issued_items = list() + +/obj/machinery/uniform_vendor/on_update_icon() + if(MACHINE_IS_BROKEN(src)) + icon_state = "[initial(icon_state)]-broken" + else if(is_powered()) + icon_state = initial(icon_state) + else + icon_state = "[initial(icon_state)]-off" + +/obj/machinery/uniform_vendor/interface_interact(mob/user) + interact(user) + return TRUE + +/obj/machinery/uniform_vendor/interact(mob/user) + var/dat = list() + dat += "User ID: [ID ? "[ID.registered_name], [ID.military_rank], [ID.military_branch]" : "--------"]" + dat += "
    " + if(!ID) + dat += "Insert your ID card to proceed." + else + var/datum/job/job = SSjobs.get_by_path(ID.job_access_type) + if(job) + uniforms = find_uniforms(ID.military_rank, ID.military_branch, job.department_flag) + for(var/T in uniforms) + dat += "[T] Select All" + var/list/uniform = uniforms[T] + for(var/piece in uniform) + if(piece) + var/obj/item/clothing/C = piece + if(piece in selected_outfit) + dat += "[sanitize(initial(C.name))]X" + else if (can_issue(C)) + dat += "[sanitize(initial(C.name))]" + else + dat += "[sanitize(initial(C.name))] (ISSUED)" + dat += "
    " + dat += "Dispense" + dat = jointext(dat,"
    ") + var/datum/browser/popup = new(user, "Uniform Dispenser","Uniform Dispenser", 300, 700, src) + popup.set_content(dat) + popup.open() + +/obj/machinery/uniform_vendor/OnTopic(mob/user, href_list) + if(href_list["ID"]) + if(ID) + if(!issilicon(user)) + user.put_in_hands(ID) + else + ID.dropInto(loc) + ID = null + selected_outfit.Cut() + else + var/obj/item/card/id/I = user.get_active_hand() + if(istype(I) && user.unEquip(I, src)) + ID = I + . = TOPIC_REFRESH + if(href_list["get_all"]) + if(!(href_list["get_all"] in uniforms)) + return TOPIC_NOACTION + var/list/addition = uniforms[href_list["get_all"]] + for(var/G in addition) + if(can_issue(G)) + selected_outfit |= addition + . = TOPIC_REFRESH + if(href_list["add"]) + var/uniform_path = locate(href_list["add"]) + if(ispath(uniform_path)) + selected_outfit |= uniform_path + . = TOPIC_REFRESH + else + . = TOPIC_NOACTION + if(href_list["rem"]) + selected_outfit -= locate(href_list["rem"]) + . = TOPIC_REFRESH + if(href_list["vend"]) + flick("uniform-vend", src) + spawn_uniform(selected_outfit) + selected_outfit.Cut() + . = TOPIC_REFRESH + if(.) + attack_hand(user) + +/obj/machinery/uniform_vendor/use_tool(obj/item/tool, mob/living/user, list/click_params) + if(istype(tool, /obj/item/clothingbag)) + if(length(tool.contents)) + to_chat(user, SPAN_NOTICE("You must empty \the [tool] before you can put it in \the [src].")) + return TRUE + to_chat(user, SPAN_NOTICE("You put \the [tool] into \the [src]'s recycling slot.")) + qdel(tool) + return TRUE + + else if(istype(tool, /obj/item/card/id) && !ID && user.unEquip(tool, src)) + to_chat(user, SPAN_NOTICE("You slide \the [tool] into \the [src]!")) + ID = tool + attack_hand(user) + return TRUE + + return ..() + +/* Outfit structures + branch + branch/department + branch/department/officer + branch/department/officer/command + + The one exception to the above is the command department, due to the fact that you have to be an officer to + be in command, and there are no variants as a result. Also no special CO uniform :( +*/ +/obj/machinery/uniform_vendor/proc/find_uniforms(datum/mil_rank/user_rank, datum/mil_branch/user_branch, department) //returns 1 if found branch and thus has a base uniform, 2, branch and department, 0 if failed. + var/singleton/hierarchy/mil_uniform/user_outfit = GET_SINGLETON(/singleton/hierarchy/mil_uniform) + var/mil_uniforms = user_outfit + for(var/singleton/hierarchy/mil_uniform/child in user_outfit.children) + if(istype(user_branch,child.branches)) + user_outfit = child + + if(user_outfit == mil_uniforms) //We haven't found a branch + return null //Return no uniforms, which will cause the machine to spit out an error. + + // we have found a branch. + if(department == COM) //Command only has one variant and they have to be an officer + for(var/singleton/hierarchy/mil_uniform/child in user_outfit.children) + if(child.departments & COM) + user_outfit = child + for(var/singleton/hierarchy/mil_uniform/seniorchild in user_outfit.children) //Check for variants of command outfits + if(user_rank.sort_order >= seniorchild.min_rank && user_outfit.min_rank < seniorchild.min_rank) + user_outfit = seniorchild + else + var/tmp_department = department + tmp_department &= ~COM //Parse departments, with complete disconsideration to the command flag (so we don't flag 2 outfit trees) + + for(var/singleton/hierarchy/mil_uniform/child in user_outfit.children) //find base department outfit + if(child.departments & tmp_department) + user_outfit = child + break + for(var/singleton/hierarchy/mil_uniform/child in user_outfit.children) //find highest applicable ranking department outfit + if(user_rank.sort_order >= child.min_rank && user_outfit.min_rank < child.min_rank) + user_outfit = child + if(department & COM) //user is in command of their department + if(user_outfit.children[1])// Command outfit exists + user_outfit = user_outfit.children[1] + for(var/singleton/hierarchy/mil_uniform/child in user_outfit.children) //Check for variants of command outfits + if(user_rank.sort_order >= child.min_rank && user_outfit.min_rank < child.min_rank) + user_outfit = child + + return populate_uniforms(user_outfit) //Generate uniform lists. + +/obj/machinery/uniform_vendor/proc/populate_uniforms(singleton/hierarchy/mil_uniform/user_outfit) + var/list/res = list() + + res["Uniform Heads"] = user_outfit.dress_hat + res["Uniform Suits"] = user_outfit.dress_under + res["Uniform Shoes"] = user_outfit.dress_shoes + res["Uniform Extras"] = user_outfit.dress_extra + + return res + +/obj/machinery/uniform_vendor/proc/spawn_uniform(list/selected_outfit) + listclearnulls(selected_outfit) + if(!issued_items[user_id()]) + issued_items[user_id()] = list() + var/list/checkedout = issued_items[user_id()] + if(length(selected_outfit) > 1) + var/obj/item/clothingbag/bag = new /obj/item/clothingbag + for(var/item in selected_outfit) + new item(bag) + checkedout += item + bag.dropInto(loc) + else if (length(selected_outfit)) + var/obj/item/clothing/C = selected_outfit[1] + new C(get_turf(src)) + checkedout += C + +/obj/machinery/uniform_vendor/proc/user_id() + if(!ID) + return "UNKNOWN" + else + return "[ID.registered_name], [ID.military_rank], [ID.military_branch]" + +/obj/machinery/uniform_vendor/proc/can_issue(gear) + var/list/issued = issued_items[user_id()] + if(!issued || !length(issued)) + return TRUE + return !(gear in issued) diff --git a/maps/sierra/machinery/vendors.dm b/maps/sierra/machinery/vendors.dm new file mode 100644 index 0000000000000..f6876204e58fc --- /dev/null +++ b/maps/sierra/machinery/vendors.dm @@ -0,0 +1,377 @@ +/obj/machinery/vending/robotics/sierra + products = list( + /obj/item/cell/standard = 4, + /obj/item/device/flash/synthetic = 4, + /obj/item/device/robotanalyzer = 2, + /obj/item/device/scanner/health = 2, + /obj/item/reagent_containers/food/drinks/bottle/oiljug = 5, + /obj/item/stack/cable_coil = 4, + ) + +/obj/machinery/vending/medical/sierra + req_access = list(access_medical) + +/obj/machinery/vending/security + products = list(/obj/item/handcuffs = 8,/obj/item/grenade/flashbang = 8,/obj/item/grenade/chem_grenade/teargas = 4,/obj/item/device/flash = 5, + /obj/item/bodybag = 4,/obj/item/storage/box/evidence = 6, /obj/item/clothing/accessory/badge/holo/NT = 4, /obj/item/clothing/accessory/badge/holo/NT/cord = 4) +// contraband = list(/obj/item/clothing/glasses/sunglasses = 2,/obj/item/storage/box/donut = 2) + +/obj/machinery/vending + var/restockable = TRUE + +/obj/machinery/vending/clothing + name = "ClothesMate" //renamed to make the slogan rhyme + icon = 'maps/sierra/icons/obj/vending.dmi' + desc = "A clothing vending machine" + icon_state = "clothes" + product_slogans = "Dress for success!;Prepare to look swagalicious!;Look at all this free swag!;Why leave style up to fate? Use the ClothesMate!" + vend_reply = "Thank you for using the ClothesMate!" + products = list( + //obj/item/clothing/under/pj/red = 1, + //obj/item/clothing/under/pj/blue = 1, + /obj/item/clothing/under/scratch = 1, + /obj/item/clothing/under/sl_suit = 1, + /obj/item/clothing/under/waiter = 1, + /obj/item/clothing/under/psysuit = 1, + /obj/item/clothing/under/gentlesuit = 1, + /obj/item/clothing/under/rank/mailman = 1, + /obj/item/clothing/under/dress/dress_fire = 1, + /obj/item/clothing/under/dress/dress_orange = 1, + /obj/item/clothing/under/suit_jacket/charcoal = 1, + /obj/item/clothing/under/cheongsam = 1, + /obj/item/clothing/mask/gas/plaguedoctor = 1, + /obj/item/clothing/suit/bio_suit/plaguedoctorsuit = 1 + ) + +/obj/machinery/vending/clothing/tact + name = "ClothesTact" + products = list( + /obj/item/clothing/mask/gas = 3, + /obj/item/clothing/mask/gas/half = 3, + /obj/item/clothing/mask/gas/syndicate = 3, + /obj/item/clothing/under/casual_pants/baggy/camo = 3, + /obj/item/clothing/under/syndicate/combat = 3, + /obj/item/clothing/under/tactical = 3, + /obj/item/clothing/mask/balaclava = 3, + /obj/item/clothing/mask/balaclava/tactical = 3, + /obj/item/clothing/accessory/armband/engine = 3, + /obj/item/clothing/accessory/armband/med = 3, + /obj/item/clothing/accessory/armband = 3 + ) + +/obj/machinery/vending/cola/small + name = "Robust Softdrinks" + desc = "A softdrink vendor provided by Robust Industries, LLC." + density = FALSE + icon = 'maps/sierra/icons/obj/vending.dmi' + icon_state = "Cola_Machine_small" + icon_vend = "Cola_Machine_small-vend" + products = list( + /obj/item/reagent_containers/food/drinks/cans/cola = 5, + /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 5, + /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 5, + /obj/item/reagent_containers/food/drinks/cans/waterbottle = 5, + /obj/item/reagent_containers/food/drinks/cans/space_up = 5, + /obj/item/reagent_containers/food/drinks/cans/iced_tea = 5, + /obj/item/reagent_containers/food/drinks/cans/grape_juice = 5 + ) + contraband = list( + /obj/item/reagent_containers/food/drinks/cans/thirteenloko = 5, + /obj/item/reagent_containers/food/snacks/liquidfood = 5 + ) + prices = list( + /obj/item/reagent_containers/food/drinks/cans/cola = 1, + /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 1, + /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 1, + /obj/item/reagent_containers/food/drinks/cans/waterbottle = 2, + /obj/item/reagent_containers/food/drinks/cans/space_up = 1, + /obj/item/reagent_containers/food/drinks/cans/iced_tea = 1, + /obj/item/reagent_containers/food/drinks/cans/grape_juice = 1 + ) + +/obj/machinery/vending/coffee/small + name = "Hot Drinks machine" + desc = "A vending machine which dispenses hot drinks." + density = FALSE + icon = 'maps/sierra/icons/obj/vending.dmi' + icon_state = "Covfefe_Machine_small" + icon_vend = "Covfefe_Machine_small-vend" + products = list( + /obj/item/reagent_containers/food/drinks/coffee = 5, + /obj/item/reagent_containers/food/drinks/tea = 5, + /obj/item/reagent_containers/food/drinks/h_chocolate = 5 + ) + contraband = list( + /obj/item/reagent_containers/food/drinks/ice = 5 + ) + prices = list( + /obj/item/reagent_containers/food/drinks/coffee = 3, + /obj/item/reagent_containers/food/drinks/tea = 3, + /obj/item/reagent_containers/food/drinks/h_chocolate = 3 + ) + +/obj/machinery/vending/cigarette/small + name = "Cigarette machine" + desc = "A specialized vending machine designed to contribute to your slow and uncomfortable death." + density = FALSE + icon = 'maps/sierra/icons/obj/vending.dmi' + icon_state = "Cigs_Machine_small" + icon_vend = "Cigs_Machine_small-vend" + products = list( + /obj/item/storage/fancy/smokable = 2, + /obj/item/storage/fancy/smokable/luckystars = 2, + /obj/item/storage/fancy/smokable/jerichos = 2, + /obj/item/storage/fancy/smokable/menthols = 2, + /obj/item/storage/fancy/smokable/carcinomas = 2, + /obj/item/storage/fancy/smokable/professionals = 2, + /obj/item/storage/fancy/matches/matchbox = 5, + /obj/item/storage/fancy/matches/matchbook = 2, + /obj/item/flame/lighter/random = 4, + /obj/item/clothing/mask/smokable/ecig/util = 1, + ///obj/item/clothing/mask/smokable/ecig/deluxe = 2, + /obj/item/clothing/mask/smokable/ecig/simple = 1, + /obj/item/reagent_containers/ecig_cartridge/med_nicotine = 5, + /obj/item/reagent_containers/ecig_cartridge/high_nicotine = 5, + /obj/item/reagent_containers/ecig_cartridge/orange = 5, + /obj/item/reagent_containers/ecig_cartridge/mint = 5, + /obj/item/reagent_containers/ecig_cartridge/watermelon = 5, + /obj/item/reagent_containers/ecig_cartridge/grape = 5 + ) + contraband = list( + /obj/item/flame/lighter/zippo = 2 + ) + premium = list( + /obj/item/storage/fancy/smokable = 5, + /obj/item/storage/fancy/smokable/killthroat = 5 + ) + +// From Old-World-Blues +/obj/machinery/vending/thundervend + name = "Violence-o-Mate" + desc = "That's a guns and ammo vendor." + icon = 'maps/sierra/icons/obj/vending.dmi' + density = FALSE + ads_list = list( + "ULTRAVIOLENCE!", + "Do you like to hurt other people, mate?", + "You're not a nice person!", + "Get a goddamn gun and take them out!", + "Why did you come back here?" + ) + icon_state = "thundervendor" + products = list( + /obj/item/reagent_containers/hypospray/autoinjector/combatpain = 60, + /obj/item/material/knife/combat = 30, + /obj/item/grenade/chem_grenade/metalfoam = 20, + /obj/item/grenade/chem_grenade/cleaner = 30, + /obj/item/grenade/flashbang = 20, + /obj/item/grenade/empgrenade = 15, + /obj/item/gun/energy/xray = 10, + /obj/item/gun/projectile/automatic/assault_rifle = 10, + /obj/item/ammo_magazine/rifle = 30, + /obj/item/gun/energy/ionrifle = 3, + /obj/item/gun/energy/sniperrifle = 1, + /obj/item/gun/projectile/heavysniper = 1, + /obj/item/ammo_casing/shell = 2, + ) + +/obj/machinery/vending/parts + name = "Denitz-Spares Vendor" + desc = "All what you need to build a new microwave or teleporter." + icon_state = "robotics" + icon_deny = "robotics-deny" + req_access = list(access_engine) + products = list( + /obj/item/airlock_electronics = 4,/obj/item/airlock_electronics/secure = 2, + /obj/item/module/power_control = 4, + /obj/item/airalarm_electronics = 4, + /obj/item/firealarm_electronics = 4, + /obj/item/cell/standard = 4, + /obj/item/light/tube = 10, + /obj/item/light/bulb = 10, + /obj/item/light/tube/large = 4, + /obj/item/stock_parts/scanning_module = 5, + /obj/item/stock_parts/micro_laser = 5, + /obj/item/stock_parts/matter_bin = 5, + /obj/item/stock_parts/manipulator = 5, + /obj/item/stock_parts/console_screen = 5, + /obj/item/stock_parts/capacitor = 5 + ) + contraband = list( + /obj/item/device/flash = 2, + /obj/item/airlock_brace = 2 + ) + premium = list( + /obj/item/cell/high = 2 + ) + +/obj/machinery/vending/parts/research + name = "Wolfor-Spares Vendor" + req_access = list(access_research) + products = list( + /obj/item/cell/standard = 5, + /obj/item/stock_parts/capacitor = 8, + /obj/item/stock_parts/scanning_module = 8, + /obj/item/stock_parts/micro_laser = 8, + /obj/item/stock_parts/matter_bin = 8, + /obj/item/stock_parts/manipulator = 8, + /obj/item/stock_parts/console_screen = 8 + ) + contraband = list( + /obj/item/device/flash = 2, + /obj/item/airlock_brace = 2, + /obj/item/material/twohanded/jack = 1 + ) + +/obj/machinery/vending/parts/public + name = "Wolfor-Spares Vendor" + req_access = list() + products = list( + /obj/item/cell/standard = 4, + /obj/item/stock_parts/capacitor = 4, + /obj/item/stock_parts/scanning_module = 4, + /obj/item/stock_parts/micro_laser = 4, + /obj/item/stock_parts/matter_bin = 4, + /obj/item/stock_parts/manipulator = 4, + /obj/item/stock_parts/console_screen = 4 + ) + contraband = list( + /obj/item/device/flash = 2, + /obj/item/material/twohanded/jack = 1 + ) + + +/obj/machinery/vending/armoryvend + density = FALSE + icon = 'maps/sierra/icons/obj/vending.dmi' + icon_state = "thundervendor" + req_access = list(access_security) + +/obj/machinery/vending/armoryvend/kinetic + name = "WardenTech Kinetic" + desc = "A weapon vendor. It stores kinetic weapons." + products = list( + /obj/item/gun/projectile/automatic/nt41 = 2, + /obj/item/ammo_magazine/n10mm = 6, + /obj/item/gun/projectile/shotgun/pump/combat = 2, + /obj/item/clothing/accessory/storage/bandolier/armory = 2, + /obj/item/gun/launcher/grenade = 1, + /obj/item/storage/box/teargas = 1, + /obj/item/storage/box/flashbangs = 1 + ) + +/obj/machinery/vending/armoryvend/energy + name = "WardenTech Energy" + desc = "A weapon vendor. It stores energy weapons." + products = list( + /obj/item/gun/energy/stunrevolver/rifle = 2, + /obj/item/gun/energy/taser/carbine = 2, + /obj/item/gun/energy/ionrifle = 2 + ) + +/obj/machinery/vending/armoryvend/laser + name = "WardenTech Laser" + desc = "A weapon vendor. It stores laser weapons." + products = list( + /obj/item/gun/energy/laser/secure = 4, + /obj/item/gun/energy/gun/secure = 4 + ) + +/obj/machinery/vending/costumes + name = "costumes dispenser" + desc = "All the costumes an actor could need. Probably." + icon_state = "theater" + icon_vend = "theater-vend" + icon_deny = "theater-deny" + products = list( + /obj/item/clothing/head/bandana = 2, + /obj/item/clothing/head/beaverhat = 2, + /obj/item/clothing/head/bowler = 2, + /obj/item/clothing/head/bowlerhat = 2, + /obj/item/clothing/head/fedora = 2, + /obj/item/clothing/head/festive = 4, + /obj/item/clothing/head/flatcap = 2, + /obj/item/clothing/head/that = 2, + /obj/item/clothing/under/assistantformal = 2, + /obj/item/clothing/under/blackjumpskirt = 2, + /obj/item/clothing/under/gentlesuit = 2, + /obj/item/clothing/under/schoolgirl = 2, + /obj/item/clothing/under/scratch = 2, + /obj/item/clothing/under/sl_suit = 2, + /obj/item/clothing/under/waiter = 2, + /obj/item/clothing/under/rank/vice = 2, + /obj/item/clothing/under/blazer = 2, + /obj/item/clothing/under/mime = 1, + /obj/item/clothing/under/sexymime = 1, + /obj/item/clothing/under/harness = 1, + /obj/item/clothing/under/stripper/mankini = 1 + ) + contraband = list() + +/obj/machinery/vending/engivend + products = list( + /obj/item/device/flashlight = 3, + /obj/item/device/multitool = 3, + /obj/item/device/multitool/multimeter = 3, + /obj/item/device/geiger = 3, + /obj/item/device/scanner/gas = 3, + /obj/item/device/t_scanner = 3, + /obj/item/rpd = 2, + /obj/item/clamp = 4, + /obj/item/tape_roll = 6, + /obj/item/device/paint_sprayer = 2, + /obj/item/grenade/chem_grenade/metalfoam = 5, + /obj/item/sealgen_case = 2 + ) + contraband = list( + /obj/item/cell/potato = 5 + ) + premium = list( + /obj/item/swapper/power_drill = 1, + /obj/item/swapper/jaws_of_life = 1 + ) + +/obj/machinery/vending/wallbartender + name = "\improper Glass-o-Mat" + desc = "A wall-mounted glass storage." + product_ads = "Free glasses!;Lets try something new.;Only the finest glasses.;Natural booze!;This stuff saves no lives.;Don't you want some?" + icon = 'maps/sierra/icons/obj/vending.dmi' + icon_state = "wallbartender" + icon_deny = "wallbartender-deny" + icon_vend = "wallbartender-vend" + base_type = /obj/machinery/vending/wallbartender + density = FALSE //It is wall-mounted, and thus, not dense. --Superxpdude + products = list( + /obj/item/reagent_containers/food/drinks/glass2/square = 10, + /obj/item/reagent_containers/food/drinks/glass2/shot = 5, + /obj/item/reagent_containers/food/drinks/glass2/cocktail = 5, + /obj/item/reagent_containers/food/drinks/glass2/rocks = 5, + /obj/item/reagent_containers/food/drinks/glass2/shake = 5, + /obj/item/reagent_containers/food/drinks/glass2/wine = 5, + /obj/item/reagent_containers/food/drinks/glass2/flute = 5, + /obj/item/reagent_containers/food/drinks/glass2/cognac = 5, + /obj/item/reagent_containers/food/drinks/glass2/goblet = 5, + /obj/item/reagent_containers/food/drinks/glass2/mug = 5, + /obj/item/reagent_containers/food/drinks/glass2/pint = 5, + ) + + contraband = list( + /obj/item/reagent_containers/food/drinks/glass2/pineapple = 3, + /obj/item/reagent_containers/food/drinks/glass2/coconut = 3, + /obj/item/reagent_containers/food/drinks/glass2/coffeecup/diona = 1 + ) + req_access = list(access_bar) + +/obj/machinery/vending/crates + name = "\improper Crate-o-Mat" + desc = "Vending machine that dispense crates for all your powerplay needs." + req_access = list(access_cargo) + base_type = /obj/machinery/vending/crates + icon = 'maps/sierra/icons/obj/vending.dmi' + icon_state = "crates" + icon_deny = "crates-deny" + icon_vend = "crates-vend" + + products = list( + /obj/structure/closet/crate/plastic = 10 + ) diff --git a/maps/sierra/map.dm b/maps/sierra/map.dm new file mode 100644 index 0000000000000..c9f419874b864 --- /dev/null +++ b/maps/sierra/map.dm @@ -0,0 +1,2 @@ +#include "sierra.dm" +#include "sierra_define.dm" diff --git a/maps/sierra/sierra.dm b/maps/sierra/sierra.dm new file mode 100644 index 0000000000000..264434a59fded --- /dev/null +++ b/maps/sierra/sierra.dm @@ -0,0 +1,218 @@ +#if !defined(using_map_DATUM) + + // --- MAP MAINTENANCE --- // + #include "sierra_setup.dm" + #include "sierra_announcements.dm" + #include "sierra_antagonism.dm" + #include "sierra_areas.dm" + #include "sierra_decals.dm" + #include "sierra_elevator.dm" + #include "sierra_holodecks.dm" + #include "sierra_lobby.dm" + #include "sierra_npcs.dm" + #include "sierra_overmap.dm" + #include "sierra_presets.dm" + #include "sierra_procs.dm" + #include "sierra_ranks.dm" + #include "sierra_security_state.dm" + #include "sierra_shuttles.dm" + #include "sierra_submaps.dm" + #include "sierra_turfs.dm" + #include "sierra_unit_testing.dm" + + // --- INCLUDES FROM ANOTHER MAPS --- // + #include "sierra_snatch.dm" + + // --- DATUMS SECTION --- // + #include "datums/uniforms.dm" + #include "datums/uniforms_civilian.dm" + #include "datums/uniforms_contractor.dm" + #include "datums/uniforms_employee.dm" + + #include "datums/reports/command.dm" + #include "datums/reports/deck.dm" + #include "datums/reports/engineering.dm" + #include "datums/reports/exploration.dm" + #include "datums/reports/general.dm" + #include "datums/reports/iaa.dm" + #include "datums/reports/medical.dm" + #include "datums/reports/security.dm" + #include "datums/reports/science.dm" + + #include "datums/shackle_law_sets.dm" + #include "datums/supplypacks/engineering.dm" + #include "datums/supplypacks/security.dm" + #include "datums/supplypacks/science.dm" + + #include "datums/species/species_overrides.dm" + + #include "game/languages.dm" + #include "game/lockdown.dm" + + // --- ITEMS --- // + #include "items/ammo.dm" + #include "items/cards_ids.dm" + #include "items/documents.dm" + #include "items/encryption_keys.dm" + #include "items/explo_shotgun.dm" + #include "items/guns.dm" + #include "items/headsets.dm" + #include "items/items.dm" + #include "items/lighting.dm" + #include "items/machinery.dm" + #include "items/modular_computer.dm" + #include "items/manuals.dm" + #include "items/mech.dm" + #include "items/papers.dm" + #include "items/rigs.dm" + #include "items/stamps.dm" + #include "items/pouches.dm" + #include "items/backpack.dm" + + #include "items/clothing/clothing.dm" + #include "items/clothing/exploration.dm" + #include "items/clothing/override.dm" + #include "items/clothing/storages.dm" + + // --- JOB SECTION --- // + #include "job\_job_defines.dm" + #include "job/access.dm" + #include "job/jobs.dm" + #include "job/outfits.dm" + #include "job/infinity.dm" + + #include "job/jobs_cargo.dm" + #include "job/jobs_command.dm" + #include "job/jobs_engineering.dm" + #include "job/jobs_exploration.dm" + #include "job/jobs_medical.dm" + #include "job/jobs_misc.dm" + #include "job/jobs_research.dm" + #include "job/jobs_security.dm" + #include "job/jobs_service.dm" + + // --- MACHINERY --- // + #include "machinery/alarm.dm" + #include "machinery/doors.dm" + #include "machinery/keycard authentication.dm" + #include "machinery/machinery.dm" + #include "machinery/navbeacons.dm" + #include "machinery/power.dm" + #include "machinery/random.dm" + #include "machinery/suit_storage.dm" + #include "machinery/tcomms.dm" + #include "machinery/thrusters.dm" + #include "machinery/uniform_vendor.dm" + #include "machinery/vendors.dm" + + // --- STRUCTURES --- // + #include "structures/closets.dm" + #include "structures/other.dm" + #include "structures/signs.dm" + + #include "structures/closets/_closets_appearances.dm" + #include "structures/closets/armory.dm" + #include "structures/closets/command.dm" + #include "structures/closets/engineering.dm" + #include "structures/closets/exploration.dm" + #include "structures/closets/medical.dm" + #include "structures/closets/misc.dm" + #include "structures/closets/research.dm" + #include "structures/closets/security.dm" + #include "structures/closets/services.dm" + #include "structures/closets/supply.dm" + + // --- LOADOUT --- // + #include "loadout/_defines.dm" + #include "loadout/loadout.dm" + #include "loadout/loadout_accessories.dm" + #include "loadout/loadout_ec_skillbages.dm" + #include "loadout/loadout_eyes.dm" + #include "loadout/loadout_gloves.dm" + #include "loadout/loadout_head.dm" + #include "loadout/loadout_pda.dm" + #include "loadout/loadout_shoes.dm" + #include "loadout/loadout_suit.dm" + #include "loadout/loadout_tactical.dm" + #include "loadout/loadout_uniform.dm" + #include "loadout/~defines.dm" + + // --- MAP FILES --- // + + // ~SIERRA~ // + #include "z1-z5_sierra.dmm" + #include "z6_admin.dmm" + #include "z7_transit.dmm" + #include "../away/empty.dmm" + + // ~AWAY SITES~ // + #include "../away/mining/mining.dm" + #include "../away/derelict/derelict.dm" + #include "../away/bearcat/bearcat.dm" + #include "../away/lost_supply_base/lost_supply_base.dm" + #include "../away/smugglers/smugglers.dm" + #include "../away/magshield/magshield.dm" + #include "../away/casino/casino.dm" + #include "../away/yacht/yacht.dm" + #include "../away/blueriver/blueriver.dm" + #include "../away/slavers/slavers_base.dm" + #include "../away/mobius_rift/mobius_rift.dm" + #include "../away/errant_pisces/errant_pisces.dm" + #include "../away/lar_maria/lar_maria.dm" + #include "../away/voxship/voxship.dm" + #include "../away/skrellscoutship/skrellscoutship.dm" + #include "../away/meatstation/meatstation.dm" + #include "../away/miningstation/miningstation.dm" + #include "../away/mininghome/mininghome.dm" + #include "../away/scavver/scavver_gantry.dm" + #include "../away/abandoned_hotel/abandoned_hotel.dm" + // #include "../event/iccgn_ship/icgnv_hound.dm" // SIERRA TODO: Пофиксить или удалить + + #include "../bluespace_interlude/bluespace_interlude.dm" + #include "../bluespace_interlude/bluespace_interlude.dmm" + + // USED MODS + // Keep them in ascending alphabetical order, please + + #include "../../mods/_maps/liberia/_map_liberia.dme" + #include "../../mods/_maps/sentinel/_map_sentinel.dme" + #include "../../mods/_maps/farfleet/_map_farfleet.dme" + #include "../../mods/_maps/hand/_map_hand.dme" + #include "../../mods/antagonists/_antagonists.dme" + #include "../../mods/bluespace_kitty/_bluespace_kitty.dme" + #include "../../mods/fancy_sofas/_fancy_sofas.dme" + #include "../../mods/guns/_guns.dme" + #include "../../mods/jukebox_tapes/_jukebox_tapes.dme" + #include "../../mods/legalese_language/_legalese.dme" + #include "../../mods/petting_zoo/_petting_zoo.dme" + #include "../../mods/screentips/_screentips.dme" + #include "../../mods/tajara/_tajara.dme" + #include "../../mods/sauna_props/_sauna_props.dme" + + // UNUSED MODS + // Keep them in ascending alphabetical order too, please + + // #include "../../mods/atmos_ret_field/_atm_ret_field.dme" + // #include "../../mods/resomi/_resomi.dme" + // #include "../../mods/_maps/miningpirate/_map_miningpirate.dme" + + // Почему UNUSED MODS стоит хранить? + // Потому что никто не проверяет использование тех или иных файлов + // в коде, и мод просто исчезнет из поля зрения, когда находясь здесь + // он всегда напоминает о своём существовании. Небольшая библиотека, + // если так вообще можно выразиться. + + #include "../../packs/factions/iccgn/_pack.dm" + #include "../../packs/factions/scga/_pack.dm" + #include "../../packs/factions/fa/_pack.dm" + #include "../../packs/infinity/_pack.dm" + #include "../../packs/deepmaint/_pack.dm" + + + #define using_map_DATUM /datum/map/sierra + +#elif !defined(MAP_OVERRIDE) + + #warn A map has already been included, ignoring Sierra + +#endif diff --git a/maps/sierra/sierra_announcements.dm b/maps/sierra/sierra_announcements.dm new file mode 100644 index 0000000000000..57f5fa30693c2 --- /dev/null +++ b/maps/sierra/sierra_announcements.dm @@ -0,0 +1,82 @@ +/datum/map/sierra + welcome_sound = sound(ANNOUNCER_WELCOME, volume = 45) + + shuttle_called_sound = sound(ANNOUNCER_BLUESPACEJUMP_PREP, volume = 45) + shuttle_called_message = "Внимание всему персоналу: инициирована процедура подготовки к прыжку блюспейс для перехода в следующий сектор. Расчетное время окончания зарядки генератора блюспейса: %ETA%." + shuttle_docked_sound = sound(ANNOUNCER_BLUESPACEJUMP_INIT, volume = 45) + shuttle_docked_message = "Внимание всему персоналу: подготовка к прыжку завершена. Инициирован запуск блюспейс двигателя. Расчетное время до начала прыжка: %ETD%." + shuttle_leaving_message = sound(ANNOUNCER_BLUESPACEJUMP_START, volume = 45) + shuttle_leaving_sound = "Внимание всему персоналу: запуск двигателя завершен, начат межпространственный переход. Примерное время окончания прыжка: %ETA%. Сохраняйте спокойствие и трезвость мышления." + shuttle_recall_message = "Внимание всему персоналу: процедура подготовки к подпространственному прыжку отменена. Возвращайтесь к исполнению своих рабочих обязанностей." + + emergency_shuttle_called_message = "Внимание всему персоналу: вступают в силу процедуры экстренной эвакуации. Будьте готовы покинуть корабль. Автоматическое подтверждение запроса через: %ETA%" + emergency_shuttle_called_sound = sound(ANNOUNCER_ABANDONSHIP, volume = 45) + emergency_shuttle_docked_message = "Внимание всему персоналу: процедура аварийной эвакуации подтверждена, спасательные капсулы разблокированы. У вас есть %ETD% чтобы занять места в спасательных капсулах." + emergency_shuttle_leaving_message = "Внимание всему персоналу: активация двигателей спасательных капсул. Расчетное время прибытия до пункта встречи шлюпок: %ETA%" + emergency_shuttle_recall_message = "Внимание всему персоналу: аварийная эвакуации отменена. Возвращайтесь к выполнению своих рабочих обязанностей." + + command_report_sound = sound(ANNOUNCER_COMMANDREPORT, volume = 45) + + grid_check_message = "Обнаружены отклонения в работе энергосети %STATION_NAME%. Энергосеть аварийно отключена для полной калибровки. Пожалуйста, ожидайте." + grid_check_sound = sound(ANNOUNCER_POWEROFF, volume = 45) + + grid_restored_message = "Питание корабля %STATION_NAME% успешно восстановлено из аварийного хранилища." + grid_restored_sound = sound(ANNOUNCER_POWERON, volume = 45) + + meteor_detected_message = "Внимание всему персоналу: обнаружены метеориты прямо по курсу %STATION_NAME%. Настоятельно рекомендуется пройти в центр корабля до выхода из опасной зоны." + meteor_detected_sound = sound(ANNOUNCER_METEORS, volume = 45) + + radiation_detected_message = "Внимание всему персоналу: Зафиксировано активное повышение радиационного фона поблизости %STATION_NAME%. Всему персоналу настоятельно рекомендуется пройти в экранированные отсеки до покидания зоны повышенной радиоактивности. Экранированные отсеки - технические тоннели, челноки, камеры охраны, экстренные убежища, лифт, дормиторий." + radiation_detected_sound = sound(ANNOUNCER_RADIATION, volume = 45) + + space_time_anomaly_sound = sound(ANNOUNCER_SPANOMALIES, volume = 45) + + unknown_biological_entities_message = "Неизвестные биологические существа обнаружены в космическом пространстве %STATION_NAME%. Настоятельно рекомендуется активировать режим сдерживания неизвестных форм жизни на генераторе щита." + + unidentified_lifesigns_message = "Обнаружена неопознанная форма жизни на борту %STATION_NAME%. Настоятельно рекомендуется заблокировать все внешние шлюзы и запретить стыковку гражданским судам." + unidentified_lifesigns_sound = sound(ANNOUNCER_ALIENS, volume = 45) + + electrical_storm_moderate_sound = sound(ANNOUNCER_ELECTRICALSTORM_MOD, volume = 45) + electrical_storm_major_sound = sound(ANNOUNCER_ELECTRICALSTORM_MAJ, volume = 45) + + // SIERRA TODO: port eris announcer to Bay12 + // use_job_frequency_announcement = FALSE + // use_radio_announcement = TRUE + +/datum/map/sierra/level_x_biohazard_announcement(bio_level) + if(!isnum(bio_level)) + CRASH("Expected a number, was: [log_info_line(bio_level)]") + if(bio_level < 1 || bio_level > 9) + CRASH("Expected a number between 1 and 9, was: [log_info_line(bio_level)]") + + var/msg + var/crew + var/sound = GLOB.using_map.command_report_sound + switch(bio_level) + if(9) + msg = "неопознанная форма жизни. Рекомендуется изолировать неизвестный организм и заварить вентиляционные шахты до постановки на содержание. Это максимальный уровень потенциальной угрозы" + crew = "Командующему" + sound = sound(ANNOUNCER_ALIENS, volume = 100) + if(8) + msg = "враждебные коррозийные организмы. Зафиксировано нарушение структурной целостности переборок" + crew = "Инженерному и Охранному" + if(6) + msg = "опасные вредители. Рядом с вентиляционными шахтами обнаружены скопления паутины" + crew = "Охранному" + if(5) + msg = "космические карпы. Настоятельно рекомендуется временно прервать всю внекорабельную деятельность" + crew = "Охранному" + if(4) + msg = "быстрорастущие растения. Точное определение степени опасности невозможно из-за частых мутаций" + crew = "Инженерному и Обслуживающему" + if(3) + msg = "вредоносные патогены" + crew = "Медицинскому" + if(2) + msg = "коррозийные грибы. Имеется опасность поражения переборок" + crew = "Инженерному" + if(1) + msg = "мелкие вредители" + crew = "Обслуживающему" + + priority_announcement.Announce("Подтверждено наличие объекта [bio_level] уровня биологической угрозы - [msg]. [crew] персоналу требуется предпринять меры по ликвидации угрозы.", "Биоугроза", new_sound = sound) diff --git a/maps/sierra/sierra_antagonism.dm b/maps/sierra/sierra_antagonism.dm new file mode 100644 index 0000000000000..8928dc87357af --- /dev/null +++ b/maps/sierra/sierra_antagonism.dm @@ -0,0 +1,34 @@ +//Makes sure we don't get any merchant antags as a balance concern. Can also be used for future Sierra specific antag restrictions. +/datum/antagonist/changeling + blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/submap) + restricted_jobs = list(/datum/job/captain, /datum/job/hop, /datum/job/hos, /datum/job/rd, /datum/job/cmo, /datum/job/chief_engineer, /datum/job/detective, /datum/job/warden, /datum/job/officer, ) + +/datum/antagonist/godcultist + blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/chaplain, /datum/job/submap) + restricted_jobs = list(/datum/job/captain, /datum/job/hop, /datum/job/hos, /datum/job/rd, /datum/job/cmo, /datum/job/chief_engineer, /datum/job/detective, /datum/job/warden, /datum/job/officer, /datum/job/iaa, ) + +/datum/antagonist/cultist + blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/chaplain, /datum/job/submap) + restricted_jobs = list(/datum/job/captain, /datum/job/hop, /datum/job/hos, /datum/job/rd, /datum/job/cmo, /datum/job/chief_engineer, /datum/job/detective, /datum/job/warden, /datum/job/officer, /datum/job/iaa, ) + +/datum/antagonist/loyalists + blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/submap, ) + +/datum/antagonist/revolutionary + blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/submap) + restricted_jobs = list(/datum/job/iaa) + +/datum/antagonist/traitor + blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/submap) + restricted_jobs = list(/datum/job/captain, /datum/job/hop, /datum/job/hos, /datum/job/rd, /datum/job/cmo, /datum/job/chief_engineer, /datum/job/warden, /datum/job/detective, /datum/job/officer, /datum/job/iaa, ) + +/datum/antagonist/ert/equip(mob/living/carbon/human/player) + if(!..()) + return 0 + player.char_branch = GLOB.mil_branches.get_branch("Employee") + player.char_rank = GLOB.mil_branches.get_rank("Employee", "Nanotrasen Employee") + + var/singleton/hierarchy/outfit/ert_outfit = outfit_by_type((player.mind == leader) ? /singleton/hierarchy/outfit/job/sierra/ert/leader : /singleton/hierarchy/outfit/job/sierra/ert) + ert_outfit.equip(player) + + return 1 diff --git a/maps/sierra/sierra_areas.dm b/maps/sierra/sierra_areas.dm new file mode 100644 index 0000000000000..7cbf87bd89c75 --- /dev/null +++ b/maps/sierra/sierra_areas.dm @@ -0,0 +1,82 @@ +/datum/map/sierra + + base_floor_type = /turf/simulated/floor/reinforced + base_floor_area = /area/maintenance/exterior + + saferoom_area_types = list( + /area/crew_quarters/safe_room + ) + + post_round_safe_areas = list ( + /area/centcom, + /area/shuttle/escape/centcom, + /area/shuttle/escape_pod/escape_pod1/station, + /area/shuttle/escape_pod/escape_pod2/station, + /area/shuttle/escape_pod/escape_pod3/station, + /area/shuttle/escape_pod/escape_pod4/station, + /area/shuttle/escape_pod/escape_pod5/station, + /area/shuttle/escape_pod/escape_pod6/station, + /area/shuttle/escape_pod/escape_pod7/station, + /area/shuttle/escape_pod/escape_pod8/station, + /area/shuttle/escape_pod/escape_pod9/station, + /area/shuttle/escape_pod/escape_pod10/station, + /area/shuttle/escape_pod/escape_pod11/station, + /area/shuttle/transport1/centcom, + /area/shuttle/administration/centcom, + /area/shuttle/specops/centcom, + ) + +/area/medical + icon_state = "medbay" + +/area/maintenance/substation + name = "Substation" + icon_state = "substation" + sound_env = SMALL_ENCLOSED + req_access = list(access_engine) + // Sounds for Substation rooms. Just electrical sounds, really. + ambience = list( + 'maps/sierra/sound/ambience/substation1.ogg', + 'maps/sierra/sound/ambience/substation2.ogg', + 'maps/sierra/sound/ambience/substation3.ogg', + 'maps/sierra/sound/ambience/substation4.ogg', + 'maps/sierra/sound/ambience/substation5.ogg', + 'maps/sierra/sound/ambience/substation6.ogg', + 'maps/sierra/sound/ambience/substation7.ogg', + 'maps/sierra/sound/ambience/substation8.ogg' + ) + +/area/crew_quarters + icon_state = "crew_quarters" + +/area/crew_quarters/heads + icon_state = "heads" + +/area/engineering + req_access = list(access_engine) + icon_state = "engineering" + +/area/shield + name = "Engineering - Shield Generator" + icon_state = "engineering" + sound_env = SMALL_ENCLOSED + req_access = list(access_engine, access_atmospherics) + +/area/security/sierra/ + icon_state = "security" + +/area/thruster + icon_state = "thruster" + req_access = list(access_engine) + +/area/crew_quarters/safe_room + area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED + holomap_color = HOLOMAP_AREACOLOR_ESCAPE + +#include "areas/shuttles.dm" +#include "areas/z1_sierra_deck4.dm" +#include "areas/z2_sierra_deck3.dm" +#include "areas/z3_sierra_deck2.dm" +#include "areas/z4_sierra_deck1.dm" +#include "areas/z5_sierra_bridge.dm" +#include "areas/z6_admin.dm" diff --git a/maps/sierra/sierra_decals.dm b/maps/sierra/sierra_decals.dm new file mode 100644 index 0000000000000..bca5cfe229e93 --- /dev/null +++ b/maps/sierra/sierra_decals.dm @@ -0,0 +1,88 @@ +/*--- Sierra decals ---*/ +/obj/floor_decal/corner/pink/full + icon_state = "corner_white_full" + +/obj/floor_decal/corner/grey_alt + name = "grey corner" + color = "#b0aeae" + +/obj/floor_decal/corner/grey_alt/diagonal + icon_state = "corner_white_diagonal" + +/obj/floor_decal/corner/grey_alt/three_quarters + icon_state = "corner_white_three_quarters" + +/obj/floor_decal/corner/grey_alt/full + +/obj/floor_decal/corner/grey/bordercorner2 + icon_state = "bordercolorcorner2" + +/obj/floor_decal/industrial/danger + name = "danger stripes" + icon_state = "danger" + +/obj/floor_decal/industrial/danger/corner + icon_state = "dangercorner" + +/obj/floor_decal/industrial/warning/half + name = "floor decal" + icon = 'maps/sierra/icons/turf/decals.dmi' + icon_state = "warninghalf" + +/obj/floor_decal/industrial/hatch/grey + color = "#808080" + +/obj/floor_decal/industrial/outline/green + name = "green outline" //INF, WAS orange outline + color = COLOR_GREEN_GRAY //INF, WAS COLOR_GREEN + +/obj/floor_decal/chapel/mono + icon = 'maps/sierra/icons/turf/decals.dmi' + icon_state = "chapel_mono" + +/turf/simulated/floor/tiled/white/monotile + name = "floor" + icon = 'maps/sierra/icons/turf/decals.dmi' + icon_state = "monotile_light" + initial_flooring = /singleton/flooring/tiling/mono/white + +/obj/floor_decal/corner/darkblue + name = "dark blue corner" + color = COLOR_COMMAND_BLUE + +/obj/floor_decal/corner/darkblue/diagonal + icon_state = "corner_white_diagonal" + +/obj/floor_decal/corner/darkblue/three_quarters + icon_state = "corner_white_three_quarters" + +/obj/floor_decal/corner/darkblue/full + icon_state = "corner_white_full" + +/obj/floor_decal/corner/darkblue/border + icon_state = "bordercolor" + +/obj/floor_decal/corner/darkblue/half + icon_state = "bordercolorhalf" + +/obj/floor_decal/corner/darkblue/mono + icon_state = "bordercolormonofull" + +/obj/floor_decal/corner/darkblue/bordercorner + icon_state = "bordercolorcorner" + +/obj/floor_decal/corner/darkblue/bordercorner2 + icon_state = "bordercolorcorner2" + +/obj/floor_decal/corner/darkblue/borderfull + icon_state = "bordercolorfull" + +/obj/floor_decal/corner/darkblue/bordercee + icon_state = "bordercolorcee" + +/obj/floor_decal/industrial/hatch/green + color = COLOR_GREEN_GRAY + +/obj/floor_decal/stairs + icon = 'icons/obj/structures/stairs.dmi' + icon_state = "above" diff --git a/maps/sierra/sierra_define.dm b/maps/sierra/sierra_define.dm new file mode 100644 index 0000000000000..5974b44d5a6b0 --- /dev/null +++ b/maps/sierra/sierra_define.dm @@ -0,0 +1,247 @@ +/datum/map/sierra + name = "\improper Sierra" + full_name = "\improper NSV Sierra" + path = "sierra" + config_path = "config/sierra_config.txt" + flags = MAP_HAS_BRANCH | MAP_HAS_RANK + + use_bluespace_interlude = TRUE + + load_legacy_saves = TRUE + + station_levels = list(1,2,3,4,5) + admin_levels = list(6,7) + empty_levels = list(8) + accessible_z_levels = list("1"=1,"2"=1,"3"=1,"4"=1,"5"=1,"8"=25) + overmap_size = 40 + overmap_event_areas = 34 + usable_email_tlds = list("freemail.net") + + allowed_spawns = list("Cryogenic Storage", "Cyborg Storage") + default_spawn = "Cryogenic Storage" + + station_name = "NSV Sierra" + station_short = "Sierra" + dock_name = "TBD" + boss_name = "Central Command" + boss_short = "Centcom" + company_name = "Nanotrasen" + company_short = "NT" + + map_admin_faxes = list("Nanotrasen Central Office") + + evac_controller_type = /datum/evacuation_controller/starship + + default_law_type = /datum/ai_laws/nanotrasen + use_overmap = 1 + num_exoplanets = 1 + planet_size = list(129,129) + +// minimum_players = 0 its already 0 + + away_site_budget = 5.5 // Было 5, увеличили на 10% вместе с уменьешением цены для одноуровневых авеек ~bear1ake + min_offmap_players = 10 + + id_hud_icons = 'maps/sierra/icons/assignment_hud.dmi' + + available_cultural_info = list( + TAG_HOMEWORLD = list( + HOME_SYSTEM_EARTH, + HOME_SYSTEM_LUNA, + HOME_SYSTEM_MARS, + HOME_SYSTEM_VENUS, + HOME_SYSTEM_CERES, + HOME_SYSTEM_PLUTO, + HOME_SYSTEM_TAU_CETI, + HOME_SYSTEM_HELIOS, + HOME_SYSTEM_TERRA, + HOME_SYSTEM_GAIA, + HOME_SYSTEM_MAGNITKA, + HOME_SYSTEM_OTHER + ), + TAG_FACTION = list( + FACTION_SOL_CENTRAL, + FACTION_INDIE_CONFED, + FACTION_NANOTRASEN, + FACTION_HEPHAESTUS, + FACTION_DAIS, + FACTION_PCRC, + FACTION_SAARE, + FACTION_XYNERGY, + FACTION_FREETRADE, + FACTION_OTHER + ), + TAG_CULTURE = list( + CULTURE_HUMAN_MARTIAN, + CULTURE_HUMAN_MARSTUN, + CULTURE_HUMAN_LUNAPOOR, + CULTURE_HUMAN_LUNARICH, + CULTURE_HUMAN_VENUSIAN, + CULTURE_HUMAN_VENUSLOW, + CULTURE_HUMAN_BELTER, + CULTURE_HUMAN_PLUTO, + CULTURE_HUMAN_EARTH, + CULTURE_HUMAN_CETIN, + CULTURE_HUMAN_CETIS, + CULTURE_HUMAN_CETII, + CULTURE_HUMAN_FOSTER, + CULTURE_HUMAN_PIRXL, + CULTURE_HUMAN_PIRXB, + CULTURE_HUMAN_PIRXF, + CULTURE_HUMAN_TADMOR, + CULTURE_HUMAN_IOLAUS, + CULTURE_HUMAN_BRAHE, + CULTURE_HUMAN_EOS, + CULTURE_HUMAN_SPACER, + CULTURE_HUMAN_OFFWORLD, + CULTURE_HUMAN_SOLCOL, + CULTURE_HUMAN_CONFEDC, + CULTURE_HUMAN_CONFEDO, + CULTURE_HUMAN_OTHER + ), + TAG_RELIGION = list( + RELIGION_OTHER, + RELIGION_JUDAISM, + RELIGION_HINDUISM, + RELIGION_BUDDHISM, + RELIGION_SIKHISM, + RELIGION_JAINISM, + RELIGION_ISLAM, + RELIGION_CHRISTIANITY, + RELIGION_BAHAI_FAITH, + RELIGION_AGNOSTICISM, + RELIGION_DEISM, + RELIGION_ATHEISM, + RELIGION_THELEMA, + RELIGION_SPIRITUALISM, + RELIGION_SHINTO, + RELIGION_TAOISM + ) + ) + +/* + lobby_tracks = list( + // Absconditus - Zhay Tee --, + /singleton/audio/track/absconditus, + + // Bad Apple!! (slowed down) - Alstroemeria Records --, + /singleton/audio/track/ambispace, + + // As Far As It Gets - A Drop A Day --, + /singleton/audio/track/asfarasitgets, + + // Business End - Cletus Got Shot --, + // /singleton/audio/track/businessend, + + // Chasing Time - Dexter Britain --, + /singleton/audio/track/chasing_time, + + // Clouds of Fire - Hector/dMk --, + /singleton/audio/track/clouds_of_fire, + + // Comet Halley - Stellardrone --, + /singleton/audio/track/comet_haley, + + // Dwarf Fortress Main Theme - Beyond Quality --, + // /singleton/audio/track/df_theme, + + // Half-Life 2 - Tracking Device - Kelly Bailey --, + // /singleton/audio/track/digit_one, + + // Robocop.mp3 - CBoyardee --, + // /singleton/audio/track/dilbert, + + // 80s All Over Again - A Drop A Day --, + // /singleton/audio/track/eighties, + + // Local Forecast (Elevator) - Kevin MacLeod --, + // /singleton/audio/track/elevator, + + // every light is blinking at once - Earthcrusher --, + // /singleton/audio/track/elibao, + + // Endless Space - SolusLunes --, + /singleton/audio/track/endless_space, + + // Epic Intro 2015 - Sascha Ende --, + // /singleton/audio/track/epicintro2015, + + // Epic Intro 2017 - Sascha Ende --, + /singleton/audio/track/epicintro2017, + + // Unknown - Unknown --, + /singleton/audio/track/floating, + + // Hull Rupture - Mikazu --, + // /singleton/audio/track/hull_rupture, + + // Human - Borrtex --, + /singleton/audio/track/human, + + // In Orbit - Chronox --, + /singleton/audio/track/inorbit, + + // lasers rip apart the bulkhead - Earthcrusher --, + /singleton/audio/track/lasers, + + // Flip-Flap - X-CEED --, + // /singleton/audio/track/level3_mod, + + // Memories Of Lysendraa - TALES --, + // /singleton/audio/track/lysendraa, + + // Marhaba - Ian Alex Mac --, + // /singleton/audio/track/marhaba, + + // Martian Cowboy - Kevin MacLeod --, + /singleton/audio/track/martiancowboy, + + // Misanthropic Corridors - Mikazu --, + // /singleton/audio/track/misanthropic_corridors, + + // Monument - Six Umbrellas --, + // /singleton/audio/track/monument, + + // Nebula - Pulse Emitter --, + /singleton/audio/track/nebula, + + // One (abridged loop) - Swedish House Mafia --, + // /singleton/audio/track/one_loop, + + // On the Rocks - Mikazu --, + // /singleton/audio/track/on_the_rocks, + + // phoron will make us rich - Earthcrusher --, + // /singleton/audio/track/pwmur, + + // Rimward Cruise - Mikazu --, + // /singleton/audio/track/rimward_cruise, + + // Salut John - Quimorucru --, + // /singleton/audio/track/salutjohn, + + // Space Oddity - Chris Hadfield --, + /singleton/audio/track/space_oddity, + + // Sektor11 - MashedByMachines --, + // /singleton/audio/track/thunderdome, + + // Torch: A Light in the Darkness - L. Luke Leimer/LorenLuke --, + // /singleton/audio/track/torch, // ПОКА Я ЖИВОЙ НИКАКОГО ТОРЧА НЕ БУДЕТ + + // Torn - Macamoto --, + /singleton/audio/track/torn, + + // Treacherous Voyage - Jon Luc Hefferman --, + /singleton/audio/track/treacherous_voyage, + + // Voidsent - Mikazu --, + // /singleton/audio/track/voidsent, + + // Wake - Ryan Little --, + /singleton/audio/track/wake, + + // Wild Encounters - A Drop A Day --, + // /singleton/audio/track/wildencounters + ) +*/ diff --git a/maps/sierra/sierra_elevator.dm b/maps/sierra/sierra_elevator.dm new file mode 100644 index 0000000000000..57c5d86081589 --- /dev/null +++ b/maps/sierra/sierra_elevator.dm @@ -0,0 +1,13 @@ +/obj/turbolift_map_holder/sierra + name = "sierra turbolift map placeholder" + depth = 5 + lift_size_x = 4 + lift_size_y = 4 + + areas_to_use = list( + /area/turbolift/sierra_ground, + /area/turbolift/sierra_d3, + /area/turbolift/sierra_d2, + /area/turbolift/sierra_d1, + /area/turbolift/sierra_top, + ) diff --git a/maps/sierra/sierra_holodecks.dm b/maps/sierra/sierra_holodecks.dm new file mode 100644 index 0000000000000..6e32940b66946 --- /dev/null +++ b/maps/sierra/sierra_holodecks.dm @@ -0,0 +1,80 @@ +/datum/map/sierra + + holodeck_programs = list( + "emptycourt" = new/datum/holodeck_program(/area/holodeck/source_emptycourt, list('sound/music/THUNDERDOME.ogg')), + "boxingcourt" = new/datum/holodeck_program(/area/holodeck/source_boxingcourt, list('sound/music/THUNDERDOME.ogg')), + "basketball" = new/datum/holodeck_program(/area/holodeck/source_basketball, list('sound/music/THUNDERDOME.ogg')), + "thunderdomecourt" = new/datum/holodeck_program(/area/holodeck/source_thunderdomecourt, list('sound/music/THUNDERDOME.ogg')), + "beach" = new/datum/holodeck_program(/area/holodeck/source_beach, list('sound/music/europa/WildEncounters.ogg')), + "desert" = new/datum/holodeck_program(/area/holodeck/source_desert, + list( + 'sound/effects/wind/wind_2_1.ogg', + 'sound/effects/wind/wind_2_2.ogg', + 'sound/effects/wind/wind_3_1.ogg', + 'sound/effects/wind/wind_4_1.ogg', + 'sound/effects/wind/wind_4_2.ogg', + 'sound/effects/wind/wind_5_1.ogg' + ) + ), + "snowfield" = new/datum/holodeck_program(/area/holodeck/source_snowfield, + list( + 'sound/effects/wind/wind_2_1.ogg', + 'sound/effects/wind/wind_2_2.ogg', + 'sound/effects/wind/wind_3_1.ogg', + 'sound/effects/wind/wind_4_1.ogg', + 'sound/effects/wind/wind_4_2.ogg', + 'sound/effects/wind/wind_5_1.ogg' + ) + ), + "space" = new/datum/holodeck_program(/area/holodeck/source_space, + list( + 'sound/ambience/ambispace.ogg', + 'sound/music/main.ogg', + 'sound/music/space.ogg', + 'sound/music/traitor.ogg', + ) + ), + "picnicarea" = new/datum/holodeck_program(/area/holodeck/source_picnicarea, list('sound/music/title2.ogg')), + "theatre" = new/datum/holodeck_program(/area/holodeck/source_theatre), + "meetinghall" = new/datum/holodeck_program(/area/holodeck/source_meetinghall), + "courtroom" = new/datum/holodeck_program(/area/holodeck/source_courtroom, list('sound/music/traitor.ogg')), + "voleyball" = new/datum/holodeck_program(/area/holodeck/source_volleyball, list('sound/music/THUNDERDOME.ogg')), + "cafe" = new/datum/holodeck_program(/area/holodeck/source_cafe, list('maps/sierra/sound/music/eminem_lovethewayyoulie.ogg')), + "wildlifecarp" = new/datum/holodeck_program(/area/holodeck/source_wildlife), + "paradeground" = new/datum/holodeck_program(/area/holodeck/source_military), + "temple" = new/datum/holodeck_program(/area/holodeck/source_temple, list('maps/sierra/sound/music/river_flows_in_you.ogg')), + "plaza" = new/datum/holodeck_program(/area/holodeck/source_plaza, list('sound/music/europa/WildEncounters.ogg')), + "turnoff" = new/datum/holodeck_program(/area/holodeck/source_plating) + ) + + holodeck_supported_programs = list( + + "SierraMainPrograms" = list( + "Basketball Court" = "basketball", + "Beach" = "beach", + "Boxing Ring" = "boxingcourt", + "Cafe" = "cafe", + "Courtroom" = "courtroom", + "Desert" = "desert", + "Parade Ground" = "paradeground", + "Empty Court" = "emptycourt", + "Meeting Hall" = "meetinghall", + "Picnic Area" = "picnicarea", + "Snow Field" = "snowfield", + "Space" = "space", + "Theatre" = "theatre", + "Thunderdome Court" = "thunderdomecourt", + "Voleyball Court" = "voleyball", + "Bathhouse" = "temple", + "Plaza" = "plaza" + ) + + ) + + holodeck_restricted_programs = list( + + "SierraMainPrograms" = list( + "Wildlife Simulation" = "wildlifecarp" + ) + + ) diff --git a/maps/sierra/sierra_lobby.dm b/maps/sierra/sierra_lobby.dm new file mode 100644 index 0000000000000..daafe801e5f15 --- /dev/null +++ b/maps/sierra/sierra_lobby.dm @@ -0,0 +1,87 @@ +/datum/map/sierra + lobby_tracks = list( + // Endless Space - SolusLunes --, + /singleton/audio/track/endless_space, + + // Human - Borrtex --, + /singleton/audio/track/human, + + // Treacherous Voyage - Jon Luc Hefferman --, + /singleton/audio/track/treacherous_voyage, + + // Duke Gneiss - Exploring --, + /singleton/audio/track/exploring, + + // Duke Gneiss - Downtown --, + /singleton/audio/track/downtown, + + // Duke Gneiss - Metropolis --, + /singleton/audio/track/metropolis, + + // Duke Gneiss - Bluespace --, + /singleton/audio/track/bluespace, + + // Faunts - Das Malefitz --, + /singleton/audio/track/dasmalefitz, + + // Clint Mansell - Welcome To Lunar Industries --, + /singleton/audio/track/welcome_to_lunar_industries, + + // Chris Remo - Space Asshole --, + /singleton/audio/track/space_asshole, + + // Space Oddity - Chris Hadfield --, + /singleton/audio/track/space_oddity, + ) + + + // TRACKS // + +/singleton/audio/track/exploring + source = 'maps/sierra/sound/music/lobby/Gneiss-Exploring.ogg' + author = "Duke Gneiss" + title = "Exploring" + license = /singleton/license/cc_by_nc_sa_3_0 + url = "https://soundcloud.com/dukegneiss/exploring" + +/singleton/audio/track/downtown + source = 'maps/sierra/sound/music/lobby/Gneiss-Downtown.ogg' + author = "Duke Gneiss" + title = "Downtown" + license = /singleton/license/cc_by_nc_sa_3_0 + url = "https://www.youtube.com/watch?v=x9FdMJJYqmU" + +/singleton/audio/track/metropolis + source = 'maps/sierra/sound/music/lobby/Gneiss-Metropolis.ogg' + author = "Duke Gneiss" + title = "Metropolis" + license = /singleton/license/cc_by_nc_sa_3_0 + url = "https://soundcloud.com/dukegneiss/metropolis" + +/singleton/audio/track/bluespace + source = 'maps/sierra/sound/music/lobby/Gneiss-Bluespace.ogg' + author = "Duke Gneiss" + title = "Bluespace" + license = /singleton/license/cc_by_nc_sa_3_0 + url = "https://soundcloud.com/dukegneiss/bluespace" + +/singleton/audio/track/dasmalefitz + source = 'maps/sierra/sound/music/lobby/faunts-das_malefitz.ogg' + author = "Faunts" + title = "Das Malefitz" + license = /singleton/license/cc_by_nc_sa_3_0 + url = "https://fauntsmusic.bandcamp.com/track/das-malefitz" + +/singleton/audio/track/welcome_to_lunar_industries + source = 'maps/sierra/sound/music/lobby/Welcome_to_Lunar_Industries.ogg' + author = "Clint Mansell - Moon OST #1" + title = "Welcome To Lunar Industries" + license = /singleton/license/cc_by_nc_sa_3_0 + url = "https://soundcloud.com/moe-abdelkader/clint-mansell-moon-ost-1-welcome-to-lunar-industries" + +/singleton/audio/track/space_asshole + source = 'maps/sierra/sound/music/lobby/space_asshole.ogg' + title = "Space Asshole" + author = "Chris Remo" + license = /singleton/license/cc_by_4_0 + url = "https://idlethumbs.bandcamp.com/album/the-music-of-idle-thumbs" diff --git a/maps/sierra/sierra_npcs.dm b/maps/sierra/sierra_npcs.dm new file mode 100644 index 0000000000000..f240a10f8bafd --- /dev/null +++ b/maps/sierra/sierra_npcs.dm @@ -0,0 +1,30 @@ +/obj/random_multi/single_item/punitelly + name = "Multi Point - Warrant Officer Punitelli" + id = "Punitelli" + item_path = /mob/living/carbon/human/monkey/punitelli + +/mob/living/carbon/human/monkey/punitelli/Initialize(mapload, ...) + . = ..() + name = "Warrant Officer Punitelli" + real_name = name + invoke_async(src, PROC_REF(dress)) + +/mob/living/carbon/human/monkey/punitelli/proc/dress() + var/obj/item/clothing/C = new /obj/item/clothing/under/solgov/utility/expeditionary/monkey(src) + equip_to_appropriate_slot(C) + put_in_hands(new /obj/item/reagent_containers/food/drinks/glass2/coffeecup/punitelli) + equip_to_appropriate_slot(new /obj/item/clothing/mask/smokable/cigarette/jerichos) + +/obj/random_multi/single_item/space_rabbit + name = "Multi Point - White Space Rabbit" + id = "Rabbit" + item_path = /mob/living/simple_animal/rabbit/space/sierra + +/mob/living/simple_animal/rabbit/space/sierra + name = "\improper Edwin" + desc = "The hippiest hop around. On it's back you can see a small black letters: Aldrin." + + say_list_type = /datum/say_list/rabbit/sierra + +/datum/say_list/rabbit/sierra + emote_see = list("hops around","bounces up and down","says something in imaginated headset") diff --git a/maps/sierra/sierra_overmap.dm b/maps/sierra/sierra_overmap.dm new file mode 100644 index 0000000000000..6c4471baee048 --- /dev/null +++ b/maps/sierra/sierra_overmap.dm @@ -0,0 +1,97 @@ +/obj/overmap/visitable/ship/sierra + name = "NSV Sierra" + desc = "A space object with wide of 121.2 meters, length of 214.5 meters and high near 14.3 meters. A Self Indentification Signal classifices \ + the target as Nanotrasen Science Vessel, a property of Nanotrasen Corporation." + fore_dir = WEST + vessel_mass = 63000 + sector_flags = OVERMAP_SECTOR_KNOWN|OVERMAP_SECTOR_IN_SPACE|OVERMAP_SECTOR_BASE + known_ships = list(/obj/overmap/visitable/ship/landable/exploration_shuttle, /obj/overmap/visitable/ship/landable/guppy) + + icon = 'maps/sierra/icons/obj/overmap.dmi' + color = "#a97faa" + + initial_restricted_waypoints = list( + "Charon" = list("nav_hangar_calypso"), + "Guppy" = list("nav_hangar_guppy"), + "Crucian" = list("nav_hangar_crucian"), + "Mule" = list("nav_merchant_out"), //../mods/maps/liberia/_map_liberia.dme shuttle, + "Desperado" = list("nav_merc_dock"), //antag_spawn/mercenary/mercenary_inf.dmm shuttle, + "Reaper Gunboat" = list("nav_reaper_dock"), //../mods/maps/sentinel/_map_sentinel.dme shuttle, + "SNZ Speedboat" = list("nav_snz_dock"), //../../mods/maps/farfleet/_map_farfleet.dme shuttle, + "Skrellian Shuttle" = list("nav_deck3_skrellshuttle"), //away/skrellscoutship.dm shuttle, + "Skrellian Scout" = list("nav_deck1_skrellscout"), //away/skrellscoutship.dm shuttle, + "SRV Venerable Catfish" = list("nav_deck3_catfish"), //away/verne shuttle, + ) + + initial_generic_waypoints = list( + "nav_merc_deck1", + "nav_merc_deck2", + "nav_merc_deck3", + "nav_merc_deck4", + "nav_merc_deck5", + "nav_ert_deck1", + "nav_ert_deck2", + "nav_ert_deck3", + "nav_ert_deck4", + "nav_ert_deck5", + "nav_deck1_calypso", + "nav_deck2_calypso", + "nav_deck3_calypso", + "nav_deck4_calypso", + "nav_bridge_calypso", + "nav_deck1_guppy", + "nav_deck2_guppy", + "nav_deck3_guppy", + "nav_deck4_guppy", + "nav_deck1_salvage", + "nav_bridge_guppy", + "nav_hangar_aquila", + "nav_deck1_aquila", + "nav_deck2_aquila", + "nav_deck3_aquila", + "nav_deck4_aquila", + "nav_bridge_aquila" + ) + +/obj/overmap/visitable/ship/landable/exploration_shuttle + name = "Charon" + shuttle = "Charon" + max_speed = 1/(4 SECONDS) + burn_delay = 2 SECONDS + vessel_mass = 4700 + fore_dir = NORTH + vessel_size = SHIP_SIZE_SMALL + +/obj/overmap/visitable/ship/landable/guppy + name = "Guppy" + shuttle = "Guppy" + max_speed = 1/(4 SECONDS) //was 1/(10 SECONDS) + burn_delay = 0.5 SECONDS //was 2 SECONDS, just try to not burn all the fuel + vessel_mass = 500 //was 2200, yes, it's 500 tonnes + fore_dir = SOUTH + vessel_size = SHIP_SIZE_TINY + skill_needed = SKILL_BASIC //was trained + +/obj/overmap/visitable/ship/landable/crucian + name = "Crucian" + shuttle = "Crucian" + max_speed = 1/(4 SECONDS) + burn_delay = 1 SECONDS + vessel_mass = 1000 + fore_dir = SOUTH + vessel_size = SHIP_SIZE_TINY + skill_needed = SKILL_BASIC + +/obj/machinery/computer/shuttle_control/explore/exploration_shuttle + name = "charon control console" + shuttle_tag = "Charon" + req_access = list(access_expedition_shuttle_helm) + +/obj/machinery/computer/shuttle_control/explore/guppy + name = "guppy control console" + shuttle_tag = "Guppy" + req_access = list(access_guppy_helm) + +/obj/machinery/computer/shuttle_control/explore/crucian + name = "crucian control console" + shuttle_tag = "Crucian" diff --git a/maps/sierra/sierra_presets.dm b/maps/sierra/sierra_presets.dm new file mode 100644 index 0000000000000..26980d8b152e9 --- /dev/null +++ b/maps/sierra/sierra_presets.dm @@ -0,0 +1,163 @@ +var/global/const/NETWORK_CALYPSO = "Charon" +var/global/const/NETWORK_EXPEDITION = "Expedition" +var/global/const/NETWORK_POD = "General Utility Pod" +var/global/const/NETWORK_FIRST_DECK = "First Deck" +var/global/const/NETWORK_SECOND_DECK = "Second Deck" +var/global/const/NETWORK_THIRD_DECK = "Third Deck" +var/global/const/NETWORK_FOURTH_DECK = "Fourth Deck" +var/global/const/NETWORK_BRIDGE_DECK = "Bridge Deck" +var/global/const/NETWORK_SUPPLY = "Supply" +var/global/const/NETWORK_HANGAR = "Hangar" +var/global/const/NETWORK_PETROV = "Petrov" + +//Overrides +var/global/const/NETWORK_COMMAND = "Command" +var/global/const/NETWORK_ENGINE = "Engine" +var/global/const/NETWORK_ENGINEERING_OUTPOST = "Engineering Outpost" + + +/datum/map/sierra/get_network_access(network) + switch(network) + if(NETWORK_CALYPSO) + return access_expedition_shuttle + if(NETWORK_POD) + return access_guppy + if(NETWORK_SUPPLY) + return access_mailsorting + if(NETWORK_HANGAR) + return access_hangar + if(NETWORK_PETROV) + return access_petrov + if(NETWORK_EXPEDITION) + return access_expedition_shuttle + return get_shared_network_access(network) || ..() + +/datum/map/sierra + // Networks that will show up as options in the camera monitor program + station_networks = list( + NETWORK_FIRST_DECK, + NETWORK_SECOND_DECK, + NETWORK_THIRD_DECK, + NETWORK_FOURTH_DECK, + NETWORK_BRIDGE_DECK, + NETWORK_COMMAND, + NETWORK_ENGINEERING, + NETWORK_ENGINE, + NETWORK_MEDICAL, + NETWORK_RESEARCH, + NETWORK_SECURITY, + NETWORK_SUPPLY, + NETWORK_MINE, + NETWORK_EXPEDITION, + NETWORK_HANGAR, + NETWORK_CALYPSO, + NETWORK_PETROV, + NETWORK_POD, + NETWORK_ALARM_ATMOS, + NETWORK_ALARM_CAMERA, + NETWORK_ALARM_FIRE, + NETWORK_ALARM_MOTION, + NETWORK_ALARM_POWER, + NETWORK_THUNDER, + ) + + high_secure_areas = list( + "Second Deck - AI Upload", + "Second Deck - AI Upload Access" + ) + + secure_areas = list( + "Second Deck - Engine - Supermatter", + "Second Deck - Engineering - Technical Storage", + "Second Deck - Teleporter", + "First Deck - Telecoms - Storage", + "First Deck - Telecoms - Monitoring", + "First Deck - Telecoms", + "Security - Brig", + "Security - Prison Wing", + "Third Deck - Hangar", + "Third Deck - Hangar - Atmospherics Storage", + "Third Deck - Water Cistern" + ) + +// +// Cameras +// + +// Networks + +/obj/machinery/camera/network/exploration_shuttle + network = list(NETWORK_CALYPSO) + +/obj/machinery/camera/network/expedition + network = list(NETWORK_EXPEDITION) + +/obj/machinery/camera/network/first_deck + network = list(NETWORK_FIRST_DECK) + +/obj/machinery/camera/network/second_deck + network = list(NETWORK_SECOND_DECK) + +/obj/machinery/camera/network/third_deck + network = list(NETWORK_THIRD_DECK) + +/obj/machinery/camera/network/fourth_deck + network = list(NETWORK_FOURTH_DECK) + +/obj/machinery/camera/network/bridge_deck + network = list(NETWORK_BRIDGE_DECK) + +/obj/machinery/camera/network/pod + network = list(NETWORK_POD) + +/obj/machinery/camera/network/petrov + network = list(NETWORK_PETROV) + +/obj/machinery/camera/network/supply + network = list(NETWORK_SUPPLY) + +/obj/machinery/camera/network/hangar + network = list(NETWORK_HANGAR) + +/obj/machinery/camera/network/command + network = list(NETWORK_COMMAND) + +/obj/machinery/camera/network/crescent + network = list(NETWORK_CRESCENT) + +/obj/machinery/camera/network/engine + network = list(NETWORK_ENGINE) + +/obj/machinery/camera/network/engineering_outpost + network = list(NETWORK_ENGINEERING_OUTPOST) + +// Motion +/obj/machinery/camera/motion/engineering_outpost + network = list(NETWORK_ENGINEERING_OUTPOST) + +// All Upgrades +/obj/machinery/camera/all/command + network = list(NETWORK_COMMAND) + +/datum/map/proc/get_shared_network_access(network) + switch(network) + if(NETWORK_COMMAND) + return access_heads + if(NETWORK_ENGINE, NETWORK_ENGINEERING_OUTPOST) + return access_engine + +/datum/computer_file/program/merchant + +/obj/machinery/computer/shuttle_control/merchant + +/turf/simulated/wall //landlubbers go home + name = "bulkhead" + +/turf/simulated/floor + name = "bare deck" + +/turf/simulated/floor/tiled + name = "deck" + +/singleton/flooring/tiling + name = "deck" diff --git a/maps/sierra/sierra_procs.dm b/maps/sierra/sierra_procs.dm new file mode 100644 index 0000000000000..0eb6299b20d05 --- /dev/null +++ b/maps/sierra/sierra_procs.dm @@ -0,0 +1,49 @@ +/datum/map/make_maint_all_access(radstorm = 0) + maint_all_access = 1 + if(radstorm) + priority_announcement.Announce("Требования к доступу у шлюзов в технические тоннели временнно отключены. Экранированные отсеки - технические тоннели, челноки, камеры заключения, дормиторий.", "Внимание!") + else + priority_announcement.Announce("Требования к доступу у шлюзов в технические тоннели временнно отключены.", "Внимание!") + +/datum/map/revoke_maint_all_access(radstorm = 0) + maint_all_access = 0 + priority_announcement.Announce("Требования к доступу у шлюзов в технические тоннели восстановлены.", "Внимание!") + +/datum/map/sierra/roundend_player_status() + for(var/mob/Player as anything in GLOB.player_list) + if(!Player.mind || isnewplayer(Player)) + continue + + if(Player.stat != DEAD) + var/turf/playerTurf = get_turf(Player) + if(evacuation_controller.round_over() && evacuation_controller.emergency_evacuation) + if(isNotAdminLevel(playerTurf.z)) + to_chat(Player, "Вам удалось выжить, но вы были брошены на [station_name()], [Player.real_name]...") + else + to_chat(Player, "Вам удалось пережить события на [station_name()], [Player.real_name]!") + else if(isAdminLevel(playerTurf.z)) + to_chat(Player, "Вы успешно избежали событий на [station_name()], [Player.real_name].") + else if(issilicon(Player)) + to_chat(Player, "Ваши системы сохранили свою функциональность после событий на [station_name()], [Player.real_name].") + else + to_chat(Player, "Вы пережили очередную смену на [station_name()], [Player.real_name].") + else + if(isghost(Player)) + var/mob/observer/ghost/O = Player + if(!O.started_as_observer) + to_chat(Player, "Вы не пережили события на [station_name()]...") + else + to_chat(Player, "Вы не пережили события на [station_name()]...") + +/datum/map/sierra/do_interlude_teleport(atom/movable/target, atom/destination, duration = 30 SECONDS, precision, type) + var/turf/safe_turf = pick_area_turf(/area/bluespace_interlude/platform, list(GLOBAL_PROC_REF(not_turf_contains_dense_objects), GLOBAL_PROC_REF(IsTurfAtmosSafe))) + + if(!safe_turf) + do_teleport(target, destination) + return + + if(!isliving(target)) + return + to_chat(target, FONT_LARGE(SPAN_WARNING("Your vision goes blurry and nausea strikes your stomach. Where are you...?"))) + do_teleport(target, safe_turf, precision, type) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(do_teleport), target, destination), duration) diff --git a/maps/sierra/sierra_ranks.dm b/maps/sierra/sierra_ranks.dm new file mode 100644 index 0000000000000..40e1a645e288e --- /dev/null +++ b/maps/sierra/sierra_ranks.dm @@ -0,0 +1,197 @@ +/datum/job/submap + branch = /datum/mil_branch/civilian + rank = /datum/mil_rank/civ/civ + allowed_branches = list(/datum/mil_branch/civilian) + allowed_ranks = list(/datum/mil_rank/civ/civ) + +/datum/map/sierra + branch_types = list( + /datum/mil_branch/civilian, + /datum/mil_branch/contractor, + /datum/mil_branch/employee, + /datum/mil_branch/alien, + /datum/mil_branch/skrell_fleet, + /datum/mil_branch/iccgn, + /datum/mil_branch/css, + /datum/mil_branch/fleet, + /datum/mil_branch/scga + ) + + spawn_branch_types = list( + /datum/mil_branch/civilian, + /datum/mil_branch/contractor, + /datum/mil_branch/employee, + /datum/mil_branch/alien, + /datum/mil_branch/skrell_fleet, + /datum/mil_branch/iccgn, + /datum/mil_branch/css, + /datum/mil_branch/fleet, + /datum/mil_branch/scga + ) + +/* + * Species restricts + * ================= + */ + + species_to_branch_blacklist = list( + /datum/species/human = list( + /datum/mil_branch/alien, + /datum/mil_branch/skrell_fleet), + /datum/species/machine = list( + /datum/mil_branch/alien, + /datum/mil_branch/skrell_fleet), + /datum/species/adherent = list( + /datum/mil_branch/contractor, + /datum/mil_branch/alien, + /datum/mil_branch/skrell_fleet), + /datum/species/unathi = list( + /datum/mil_branch/alien, + /datum/mil_branch/skrell_fleet), + /datum/species/skrell = list( + /datum/mil_branch/alien), + /datum/species/nabber = list( + /datum/mil_branch/civilian, + /datum/mil_branch/employee, + /datum/mil_branch/alien, + /datum/mil_branch/skrell_fleet), + /datum/species/diona = list( + /datum/mil_branch/contractor, + /datum/mil_branch/alien, + /datum/mil_branch/skrell_fleet), + /datum/species/vox = list( + /datum/mil_branch/contractor, + /datum/mil_branch/employee, + /datum/mil_branch/skrell_fleet + ) + ) + + species_to_branch_whitelist = list( + /datum/species/diona = list(/datum/mil_branch/civilian, + /datum/mil_branch/employee), + /datum/species/nabber = list(/datum/mil_branch/contractor), + /datum/species/skrell = list(/datum/mil_branch/civilian, + /datum/mil_branch/employee, + /datum/mil_branch/contractor, + /datum/mil_branch/skrell_fleet), + /datum/species/unathi = list(/datum/mil_branch/civilian, + /datum/mil_branch/employee, + /datum/mil_branch/contractor), + /datum/species/adherent = list(/datum/mil_branch/civilian, + /datum/mil_branch/employee), + /datum/species/vox = list(/datum/mil_branch/alien, + /datum/mil_branch/civilian) + ) + + species_to_rank_whitelist = list( + /datum/species/vox = list( + /datum/mil_branch/alien = list( + /datum/mil_rank/alien + ) + ) + ) + + +/* + * Branches + * ======== + */ + +/datum/mil_branch/civilian + name = "Civilian" + name_short = "civ" + email_domain = "freemail.net" + allow_custom_email = TRUE + + rank_types = list( + /datum/mil_rank/civ/civ, + /datum/mil_rank/civ/offduty, + /datum/mil_rank/civ/synthetic + ) + + spawn_rank_types = list( + /datum/mil_rank/civ/civ, + /datum/mil_rank/civ/offduty, + /datum/mil_rank/civ/synthetic + ) + + assistant_job = "Passenger" + +/datum/mil_branch/contractor + name = "Contractor" + name_short = "contr" + email_domain = "freemail.net" + allow_custom_email = TRUE + + rank_types = list( + /datum/mil_rank/civ/contractor, + /datum/mil_rank/civ/offduty, + /datum/mil_rank/civ/synthetic + ) + + spawn_rank_types = list( + /datum/mil_rank/civ/contractor, + /datum/mil_rank/civ/offduty, + /datum/mil_rank/civ/synthetic + ) + + +/datum/mil_branch/employee + name = "Employee" + name_short = "empl" + email_domain = "mail.nanotrasen.net" + + rank_types = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/offduty, + /datum/mil_rank/civ/synthetic + ) + + spawn_rank_types = list( + /datum/mil_rank/civ/nt, + /datum/mil_rank/civ/offduty, + /datum/mil_rank/civ/synthetic + ) + + +/datum/mil_rank/grade() //useless, for sure + . = ..() + if(!sort_order) + return "" + if(sort_order <= 10) + return "E[sort_order]" + return "O[sort_order - 10]" + +/* + * Civilians + * ========= + */ + +/datum/mil_rank/civ/civ + name = "Civilian" + +/datum/mil_rank/civ/nt + name = "Nanotrasen Employee" + +/datum/mil_rank/civ/contractor + name = "Nanotrasen Contractor" + +/datum/mil_rank/civ/offduty + name = "Off-Duty Personnel" + +/datum/mil_rank/civ/synthetic + name = "Synthetic" + +/* + * Vox/foreign alien branch + * ======================== + */ + +/datum/mil_branch/alien + name = "Alien" + name_short = "Alien" + rank_types = list(/datum/mil_rank/alien) + spawn_rank_types = list(/datum/mil_rank/alien) + +/datum/mil_rank/alien + name = "Alien" diff --git a/maps/sierra/sierra_security_state.dm b/maps/sierra/sierra_security_state.dm new file mode 100644 index 0000000000000..bf9cf9d867490 --- /dev/null +++ b/maps/sierra/sierra_security_state.dm @@ -0,0 +1,193 @@ +#ifndef PSI_IMPLANT_AUTOMATIC +#define PSI_IMPLANT_AUTOMATIC "Security Level Derived" +#endif +#ifndef PSI_IMPLANT_SHOCK +#define PSI_IMPLANT_SHOCK "Issue Neural Shock" +#endif +#ifndef PSI_IMPLANT_WARN +#define PSI_IMPLANT_WARN "Issue Reprimand" +#endif +#ifndef PSI_IMPLANT_LOG +#define PSI_IMPLANT_LOG "Log Incident" +#endif +#ifndef PSI_IMPLANT_DISABLED +#define PSI_IMPLANT_DISABLED "Disabled" +#endif + +/datum/map/sierra // setting the map to use this list + security_state = /singleton/security_state/default/sierradept + +//Sierra map alert levels. Refer to security_state.dm. +/singleton/security_state/default/sierradept + all_security_levels = list(/singleton/security_level/default/sierradept/code_green, /singleton/security_level/default/sierradept/code_violet, /singleton/security_level/default/sierradept/code_orange, /singleton/security_level/default/sierradept/code_blue, /singleton/security_level/default/sierradept/code_red, /singleton/security_level/default/sierradept/code_delta) + +/singleton/security_level/default/sierradept + icon = 'maps/sierra/icons/obj/security_state.dmi' + +/singleton/security_level/default/sierradept/code_green + name = "code green" + + light_range = 2 + light_power = 1 + light_color_alarm = COLOR_GREEN + light_color_status_display = COLOR_GREEN + + overlay_alarm = "alarm_green" + overlay_status_display = "status_display_green" + alert_border = "alert_border_green" + + var/static/datum/announcement/priority/security/security_announcement_green = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/misc/notice2.ogg')) + +/singleton/security_level/default/sierradept/code_green/switching_down_to() + security_announcement_green.Announce("Угрозы для судна и его экипажа отсутствуют. \ + Персоналу следует вернуться к выполнению рабочих обязанностей в штатном режиме.", \ + "Внимание! Зелёный код") + notify_station() + GLOB.using_map.unlock_secure_areas() + GLOB.using_map.unlock_high_secure_areas() + +/singleton/security_level/default/sierradept/code_violet + name = "code purple" + alarm_level = "on" + + light_range = 2 + light_power = 1 + light_color_alarm = COLOR_VIOLET + light_color_status_display = COLOR_VIOLET + + psionic_control_level = PSI_IMPLANT_LOG + + overlay_alarm = "alarm_violet" + overlay_status_display = "status_display_violet" + alert_border = "alert_border_violet" + +/singleton/security_level/default/sierradept/code_violet/switching_up_to() + security_announcement_up.Announce("На судне находятся нелокализованные вредоносные патогены. \ + Всему медицинскому персоналу требуется обратиться к вышестоящим сотрудникам для получения инструкций. \ + Не-медицинскому персоналу следует выполнять инструкции от медицинского персонала.", "Внимание! Фиолетовый код") + notify_station() + + +/singleton/security_level/default/sierradept/code_violet/switching_down_to() + security_announcement_down.Announce("На судне находятся нелокализованные вредоносные патогены. \ + Всему медицинскому персоналу требуется обратиться к вышестоящим сотрудникам для получения инструкций. \ + Не-медицинскому персоналу следует выполнять инструкции от медицинского персонала.", "Внимание! Код угрозы понижен до Фиолетового") + notify_station() + GLOB.using_map.unlock_high_secure_areas() + GLOB.using_map.unlock_secure_areas() + + +/singleton/security_level/default/sierradept/code_orange + name = "code orange" + alarm_level = "on" + + light_range = 2 + light_power = 1 + light_color_alarm = COLOR_ORANGE + light_color_status_display = COLOR_ORANGE + overlay_alarm = "alarm_orange" + overlay_status_display = "status_display_orange" + alert_border = "alert_border_orange" + psionic_control_level = PSI_IMPLANT_LOG + +/singleton/security_level/default/sierradept/code_orange/switching_up_to() + security_announcement_up.Announce("Тяжелые нарушения в работе оборудования и повреждение переборок. \ + Всему инженерному персоналу требуется обратиться к вышестоящим сотрудникам для получения инструкций. \ + Весь не-инженерный персонал должен покинуть затронутые повреждениями отсеки. Рекомендуется ношение скафандров и \ + следование указаниям инженерного персонала.", "Внимание! Оранжевый код") + notify_station() + GLOB.using_map.lock_high_secure_areas() + +/singleton/security_level/default/sierradept/code_orange/switching_down_to() + security_announcement_down.Announce("Тяжелые нарушения в работе оборудования и повреждение переборок. \ + Всему инженерному персоналу требуется обратиться к вышестоящим сотрудникам для получения инструкций. \ + Весь не-инженерный персонал должен покинуть затронутые повреждениями отсеки. Рекомендуется ношение скафандров и \ + следование указаниям инженерного персонала.", "Внимание! Код угрозы понижен до Оражевого") + notify_station() + GLOB.using_map.lock_high_secure_areas() + GLOB.using_map.unlock_secure_areas() + +/singleton/security_level/default/sierradept/code_blue + name = "code blue" + alarm_level = "on" + + light_range = 4 + light_power = 2 + light_color_alarm = COLOR_BLUE + light_color_status_display = COLOR_BLUE + overlay_alarm = "alarm_blue" + overlay_status_display = "status_display_blue" + alert_border = "alert_border_blue" + psionic_control_level = PSI_IMPLANT_LOG + +/singleton/security_level/default/sierradept/code_blue/switching_up_to() + security_announcement_up.Announce("Согласно полученной информации на судне может присутствовать угроза для безопасности экипажа. \ + Всей охране требуется обратиться к вышестоящим сотрудникам для получения указаний; \ + разрешено обыскивать сотрудников и отсеки, а также держать оружие на виду.", "Внимание! Синий код") + notify_station() + GLOB.using_map.lock_high_secure_areas() + +/singleton/security_level/default/sierradept/code_blue/switching_down_to() + security_announcement_down.Announce("Потенциальная угроза для экипажа. \ + Всей охране требуется обратиться к вышестоящим сотрудникам для получения указаний; \ + разрешено обыскивать сотрудников и отсеки, а также держать оружие на виду.", "Внимание! Код угрозы понижен до Синего") + notify_station() + GLOB.using_map.unlock_secure_areas() + +/singleton/security_level/default/sierradept/code_red + name = "code red" + alarm_level = "on" + + light_range = 4 + light_power = 2 + light_color_alarm = COLOR_RED + light_color_status_display = COLOR_RED + overlay_alarm = "alarm_red" + overlay_status_display = "status_display_red" + alert_border = "alert_border_red" + + psionic_control_level = PSI_IMPLANT_DISABLED + var/static/datum/announcement/priority/security/security_announcement_red = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/misc/redalert1.ogg')) + +/singleton/security_level/default/sierradept/code_red/switching_up_to() + security_announcement_red.Announce("На судно объявлено чрезвычайное положение. \ + Весь экипаж должен обратиться к главам для получения инструкций. \ + Охране разрешено обыскивать сотрудников и отсеки, а так же держать оружие на виду.", \ + "Внимание! Красный код") + notify_station() + GLOB.using_map.unbolt_saferooms() + GLOB.using_map.lock_secure_areas() + GLOB.using_map.lock_high_secure_areas() + +/singleton/security_level/default/sierradept/code_red/switching_down_to() + security_announcement_red.Announce("Взрывное устройство было обезврежено. \ + Весь экипаж должен обратиться к главам для получения инструкций. \ + Охране разрешено обыскивать сотрудников и отсеки, а так же держать оружие на виду.", \ + "Внимание! Код угрозы понижен до Красного") + notify_station() + GLOB.using_map.lock_secure_areas() + GLOB.using_map.lock_high_secure_areas() + +/singleton/security_level/default/sierradept/code_delta + name = "code delta" + alarm_level = "on" + + light_range = 4 + light_power = 2 + light_color_alarm = COLOR_RED + light_color_status_display = COLOR_NAVY_BLUE + + overlay_alarm = "alarm_delta" + overlay_status_display = "status_display_delta" + alert_border = "alert_border_delta" + + psionic_control_level = PSI_IMPLANT_DISABLED + var/static/datum/announcement/priority/security/security_announcement_delta = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/effects/siren.ogg')) + +/singleton/security_level/default/sierradept/code_delta/switching_up_to() + security_announcement_delta.Announce("Внимание всему персоналу! На судне обнаружено взрывное устройство \ + большой мощности с активированным обратным отсчетом. Весь экипаж должен следовать инструкциям глав и охраны. \ + Это не учебная тревога.", "Внимание! Код Дельта") + notify_station() + GLOB.using_map.unlock_secure_areas() + GLOB.using_map.unlock_high_secure_areas() diff --git a/maps/sierra/sierra_setup.dm b/maps/sierra/sierra_setup.dm new file mode 100644 index 0000000000000..b2c6536b17939 --- /dev/null +++ b/maps/sierra/sierra_setup.dm @@ -0,0 +1,54 @@ +/datum/map/sierra/setup_map() + ..() + system_name = generate_system_name() + minor_announcement = new(new_sound = sound(ANNOUNCER_COMMANDREPORT, volume = 45)) + +/datum/map/sierra/map_info(victim) + to_chat(victim, "

    Информация о карте

    ") + to_chat(victim, "Вы находитесь на борту [station_name], исследовательского судна корпорации НаноТрейзен. Основная миссия вашего объекта - проведение исследований на нейтральной территории, как правило, на известной границе космоса с целью нахождения новых залежей форона, космических объектов, артефактов и останков инопланетных цивилизаций.") + to_chat(victim, "Охрана судна укомплектована сотрудниками Службы Безопасности НаноТрайзен и частных предприятий.") + to_chat(victim, "Помимо ЧВК в охране, в остальных отделах также присутствуют подрядчики. Их наняли как выдающихся специалистов в своей области, что превзошли корпоративного кандидата. Как правило, они либо работают на себя (civilian), либо на другую корпорацию (contractor). Полезные ссылки:") + to_chat(victim, "Процедуры НТ, Регуляции НТ, Коды угроз НТ, Список корпораций.") + +/datum/map/sierra/send_welcome() + set waitfor = FALSE + + var/welcome_text = "

    NSV Sierra Показания Сенсоров:
    " + welcome_text += "Отчет сгенерирован [stationdate2text()] в [stationtime2text()]


    " + welcome_text += "Текущая система: [system_name]
    " + welcome_text += "Следующая система для прыжка: [generate_system_name()]
    " + welcome_text += "Дней до Солнечной Системы: [rand(15,45)]
    " + welcome_text += "Дней с последнего визита в порт: [rand(60,180)]
    " + welcome_text += "Результаты сканирования показали следующие потенциальные объекты для исследования:
    " + + var/list/space_things = list() + var/obj/overmap/sierra = map_sectors["1"] + for(var/zlevel in map_sectors) + var/obj/overmap/visitable/O = map_sectors[zlevel] + if(O.name == sierra.name) + continue + if(istype(O, /obj/overmap/visitable/ship/landable)) //Don't show shuttles + continue + if(O.hide_from_reports) + continue + space_things |= O + + var/list/distress_calls + for(var/obj/overmap/visitable/O in space_things) + var/location_desc = " на текущем квадрате." + if(O.loc != sierra.loc) + var/bearing = get_bearing(sierra, O) //fucking triangles how do they work + location_desc = ", по азимуту [bearing]." + welcome_text += "
  • \A [O.name][location_desc]
  • " + + if(LAZYLEN(distress_calls)) + welcome_text += "
    Обнаружены сигналы бедствия:
    [jointext(distress_calls, "
    ")]
    " + else + welcome_text += "
    Сигналов бедствия не обнаружено.
    " + + welcome_text += "
    " + + post_comm_message("NSV Sierra Sensor Readings", welcome_text) + minor_announcement.Announce("Сканирование сектора завершено. Информация передана в базу данных консолей связи.") + sleep(2 SECONDS) + minor_announcement.Announce("Текущая система: [system_name]. Приятной смены на борту [station_name].", new_sound = 'sound/misc/notice2.ogg') diff --git a/maps/sierra/sierra_shuttles.dm b/maps/sierra/sierra_shuttles.dm new file mode 100644 index 0000000000000..8897b9168d98f --- /dev/null +++ b/maps/sierra/sierra_shuttles.dm @@ -0,0 +1,508 @@ +//Some helpers because so much copypasta for pods +/datum/shuttle/autodock/ferry/escape_pod/sierrapod + category = /datum/shuttle/autodock/ferry/escape_pod/sierrapod + sound_takeoff = 'sound/effects/rocket.ogg' + sound_landing = 'sound/effects/rocket_backwards.ogg' + var/number + ceiling_type = /turf/simulated/floor/shuttle_ceiling/sierra + warmup_time = 2 SECONDS + +/obj/shuttle_landmark/escape_pod/start + name = "Docked" + base_turf = /turf/simulated/floor/reinforced + +/obj/shuttle_landmark/escape_pod/transit + name = "In transit" + +/obj/shuttle_landmark/escape_pod/out + name = "Escaped" + +//Pods +#define SIERRA_ESCAPE_POD(NUMBER) \ +/datum/shuttle/autodock/ferry/escape_pod/sierrapod/escape_pod##NUMBER { \ + shuttle_area = /area/shuttle/escape_pod/escape_pod##NUMBER/station; \ + name = "Escape Pod " + #NUMBER; \ + dock_target = "escape_pod_" + #NUMBER; \ + arming_controller = "escape_pod_"+ #NUMBER +"_berth"; \ + waypoint_station = "escape_pod_"+ #NUMBER +"_start"; \ + landmark_transition = "escape_pod_"+ #NUMBER +"_internim"; \ + waypoint_offsite = "escape_pod_"+ #NUMBER +"_out"; \ +} \ +/obj/shuttle_landmark/escape_pod/start/pod##NUMBER { \ + landmark_tag = "escape_pod_"+ #NUMBER +"_start"; \ + docking_controller = "escape_pod_"+ #NUMBER +"_berth"; \ +} \ +/obj/shuttle_landmark/escape_pod/out/pod##NUMBER { \ + landmark_tag = "escape_pod_"+ #NUMBER +"_internim"; \ +} \ +/obj/shuttle_landmark/escape_pod/transit/pod##NUMBER { \ + landmark_tag = "escape_pod_"+ #NUMBER +"_out"; \ +} + +SIERRA_ESCAPE_POD(1) +SIERRA_ESCAPE_POD(2) +SIERRA_ESCAPE_POD(3) +SIERRA_ESCAPE_POD(4) +SIERRA_ESCAPE_POD(5) +SIERRA_ESCAPE_POD(6) +SIERRA_ESCAPE_POD(7) +SIERRA_ESCAPE_POD(8) +SIERRA_ESCAPE_POD(9) +SIERRA_ESCAPE_POD(10) +SIERRA_ESCAPE_POD(11) + +//Petrov + +/datum/shuttle/autodock/ferry/petrov + name = "Petrov" + dock_target = "petrov_shuttle_airlock" + waypoint_station = "nav_petrov_start" + waypoint_offsite = "nav_petrov_out" + logging_home_tag = "nav_petrov_start" + logging_access = access_petrov_helm + ceiling_type = /turf/simulated/floor/shuttle_ceiling/sierra + warmup_time = 7 SECONDS + +/datum/shuttle/autodock/ferry/petrov/New(_name, obj/shuttle_landmark/initial_location) + shuttle_area = subtypesof(/area/shuttle/petrov) + ..() + +/obj/shuttle_landmark/petrov/start + name = "Fourth Deck" + landmark_tag = "nav_petrov_start" + docking_controller = "petrov_shuttle_dock" + +/obj/shuttle_landmark/petrov/out + name = "Space near the vessel" + landmark_tag = "nav_petrov_out" + +//Ninja Shuttle. +/datum/shuttle/autodock/multi/antag/ninja + destination_tags = list( + "nav_ninja_deck1", + "nav_ninja_deck2", + "nav_ninja_deck3", + "nav_ninja_deck4", + "nav_ninja_deck5", + "nav_away_6", + "nav_derelict_5", + "nav_cluster_6", + "nav_ninja_start", + "nav_lost_supply_base_antag", + "nav_marooned_antag", + "nav_smugglers_antag", + "nav_bearcat_antag", + "nav_magshield_antag", + "nav_casino_antag", + "nav_yacht_antag", + "nav_slavers_base_antag", + "nav_mining_antag", + "nav_liberia_antag" + ) + +/obj/shuttle_landmark/ninja/deck1 + name = "West of Fourth Deck" + landmark_tag = "nav_ninja_deck1" + +/obj/shuttle_landmark/ninja/deck2 + name = "East of Third Deck" + landmark_tag = "nav_ninja_deck2" + +/obj/shuttle_landmark/ninja/deck3 + name = "Northeast of Second Deck" + landmark_tag = "nav_ninja_deck3" + +/obj/shuttle_landmark/ninja/deck4 + name = "South of First Deck" + landmark_tag = "nav_ninja_deck4" + +/obj/shuttle_landmark/ninja/deck5 + name = "Southeast of Bridge" + landmark_tag = "nav_ninja_deck5" + +//Merchant + +/obj/shuttle_landmark/merchant/out + name = "Docking Bay" + landmark_tag = "nav_merchant_out" + docking_controller = "merchant_shuttle_station" + +//Admin + +/datum/shuttle/autodock/ferry/administration + name = "Administration" + shuttle_area = /area/shuttle/administration/centcom + dock_target = "admin_shuttle" + waypoint_station = "nav_admin_start" + waypoint_offsite = "nav_admin_out" + ceiling_type = /turf/simulated/floor/shuttle_ceiling + warmup_time = 7 SECONDS + +/obj/shuttle_landmark/admin/start + name = "Centcom" + landmark_tag = "nav_admin_start" + docking_controller = "admin_shuttle" + base_area = /area/centcom + base_turf = /turf/simulated/floor/plating + +/obj/shuttle_landmark/admin/out + name = "Docking Bay" + landmark_tag = "nav_admin_out" + docking_controller = "admin_shuttle_dock" + +//Transport + +/datum/shuttle/autodock/ferry/centcom + name = "Centcom" + location = 1 + shuttle_area = /area/shuttle/transport1/centcom + dock_target = "centcom_shuttle" + waypoint_offsite = "nav_ferry_start" + waypoint_station = "nav_ferry_out" + ceiling_type = /turf/simulated/floor/shuttle_ceiling + warmup_time = 7 SECONDS + +/obj/shuttle_landmark/ferry/start + name = "Centcom" + landmark_tag = "nav_ferry_start" + docking_controller = "centcom_shuttle_bay" + +/obj/shuttle_landmark/ferry/out + name = "Docking Bay" + landmark_tag = "nav_ferry_out" + docking_controller = "centcom_shuttle_dock" + +//Merc + +/obj/shuttle_landmark/merc/deck1 + name = "Northwest of Fourth Deck" + landmark_tag = "nav_merc_deck1" + +/obj/shuttle_landmark/merc/deck2 + name = "South of Third deck" + landmark_tag = "nav_merc_deck2" + +/obj/shuttle_landmark/merc/deck3 + name = "Southeast of the Second deck" + landmark_tag = "nav_merc_deck3" + +/obj/shuttle_landmark/merc/deck4 + name = "Northeast of First Deck" + landmark_tag = "nav_merc_deck4" + +/obj/shuttle_landmark/merc/deck5 + name = "East of Bridge" + landmark_tag = "nav_merc_deck5" + +/obj/shuttle_landmark/merc/dock + name = "Docking Port" + landmark_tag = "nav_merc_dock" + docking_controller = "nuke_shuttle_dock_airlock" + +//Skipjack + +/datum/shuttle/autodock/multi/antag/skipjack + destination_tags = list( + "nav_skipjack_deck1", + "nav_skipjack_deck2", + "nav_skipjack_deck3", + "nav_skipjack_deck4", + "nav_skipjack_deck5", + "nav_away_7", + "nav_derelict_7", + "nav_cluster_7", + "nav_skipjack_dock", + "nav_skipjack_start", + "nav_lost_supply_base_antag", + "nav_marooned_antag", + "nav_smugglers_antag", + "nav_magshield_antag", + "nav_casino_antag", + "nav_yacht_antag", + "nav_slavers_base_antag", + "nav_mining_antag" + ) + +/obj/shuttle_landmark/skipjack/deck1 + name = "Northeast of Fourth Deck" + landmark_tag = "nav_skipjack_deck1" + +/obj/shuttle_landmark/skipjack/deck2 + name = "Southeast of Third deck" + landmark_tag = "nav_skipjack_deck2" + +/obj/shuttle_landmark/skipjack/deck3 + name = "Southwest of Second deck" + landmark_tag = "nav_skipjack_deck3" + +/obj/shuttle_landmark/skipjack/deck4 + name = "Northwest of First Deck" + landmark_tag = "nav_skipjack_deck4" + +/obj/shuttle_landmark/skipjack/deck5 + name = "South of Bridge" + landmark_tag = "nav_skipjack_deck5" + +//NT Rescue Shuttle + +/datum/shuttle/autodock/multi/antag/rescue + destination_tags = list( + "nav_ert_deck1", + "nav_ert_deck2", + "nav_ert_deck3", + "nav_ert_deck4", + "nav_ert_deck5", + "nav_away_4", + "nav_derelict_4", + "nav_cluster_4", + "nav_ert_dock", + "nav_ert_start", + "nav_lost_supply_base_antag", + "nav_marooned_antag", + "nav_smugglers_antag", + "nav_magshield_antag", + "nav_casino_antag", + "nav_yacht_antag", + "nav_slavers_base_antag", + "nav_mining_antag" + ) + + +/obj/shuttle_landmark/ert/merchant + name = "Local Merchant Station" + landmark_tag = "nav_ert_merchant" + +/obj/shuttle_landmark/ert/deck1 + name = "Southwest of Fourth deck" + landmark_tag = "nav_ert_deck1" + +/obj/shuttle_landmark/ert/deck2 + name = "Northwest of Third deck" + landmark_tag = "nav_ert_deck2" + +/obj/shuttle_landmark/ert/deck3 + name = "Northwest of Second deck" + landmark_tag = "nav_ert_deck3" + +/obj/shuttle_landmark/ert/deck4 + name = "Southwest of First Deck" + landmark_tag = "nav_ert_deck4" + +/obj/shuttle_landmark/ert/deck5 + name = "West of Bridge" + landmark_tag = "nav_ert_deck5" + +//SCGMC Assault Pod + +/datum/shuttle/autodock/ferry/specops/scg + name = "Special Operations" + location = 1 + shuttle_area = /area/shuttle/specops/centcom + dock_target = "specops_shuttle_fore" + waypoint_station = "nav_specops_out" + waypoint_offsite = "nav_specops_start" + current_location = "nav_specops_start" + ceiling_type = /turf/simulated/floor/shuttle_ceiling + warmup_time = 7 SECONDS + +/obj/shuttle_landmark/specops/start + name = "Centcom" + landmark_tag = "nav_specops_start" + docking_controller = "specops_shuttle_cent" + +/obj/shuttle_landmark/specops/out + name = "Docking Bay" + landmark_tag = "nav_specops_out" + docking_controller = "specops_dock" + +//Cargo drone + +/datum/shuttle/autodock/ferry/supply/drone + name = "Supply Drone" + location = 1 + shuttle_area = /area/supply/dock + waypoint_offsite = "nav_cargo_start" + waypoint_station = "nav_cargo_station" + ceiling_type = /turf/simulated/floor/shuttle_ceiling + warmup_time = 7 SECONDS + +/obj/shuttle_landmark/supply/centcom + name = "Offsite" + landmark_tag = "nav_cargo_start" + +/obj/shuttle_landmark/supply/station + name = "Hangar" + landmark_tag = "nav_cargo_station" + base_area = /area/quartermaster/hangar + base_turf = /turf/simulated/floor/plating + +/datum/shuttle/autodock/overmap/exploration_shuttle + name = "Charon" + move_time = 9 SECONDS + shuttle_area = list(/area/exploration_shuttle/seats_place, /area/exploration_shuttle/cockpit, /area/exploration_shuttle/medical, /area/exploration_shuttle/power, /area/exploration_shuttle/cargo_l, /area/exploration_shuttle/cargo_r, /area/exploration_shuttle/airlock) + dock_target = "calypso_shuttle" + current_location = "nav_hangar_calypso" + landmark_transition = "nav_transit_calypso" + range = 1 + fuel_consumption = 4 + logging_home_tag = "nav_hangar_calypso" + logging_access = access_expedition_shuttle_helm + ceiling_type = /turf/simulated/floor/shuttle_ceiling/sierra + warmup_time = 7 SECONDS + +/datum/shuttle/autodock/overmap/exploration_shuttle/refresh_fuel_ports_list() // Setting access onto APC and air alarms + ..() + for(var/area/A in shuttle_area) + for(var/obj/machinery/alarm/alarm in A) + if(alarm.req_access) + alarm.req_access = list(list(access_engine, access_field_eng)) // engineering OR field eng + for(var/obj/machinery/power/apc/apc in A) + if(apc.req_access) + apc.req_access = list(list(access_engine, access_field_eng)) // engineering OR field eng + +/obj/shuttle_landmark/sierra/hangar/exploration_shuttle + name = "Charon Hangar" + landmark_tag = "nav_hangar_calypso" + base_area = /area/quartermaster/hangar + base_turf = /turf/simulated/floor/plating + +/obj/shuttle_landmark/sierra/deck1/exploration_shuttle + name = "Space near Fourth Deck" + landmark_tag = "nav_deck1_calypso" + +/obj/shuttle_landmark/sierra/deck2/exploration_shuttle + name = "Space near Third Deck" + landmark_tag = "nav_deck2_calypso" + +/obj/shuttle_landmark/sierra/deck3/exploration_shuttle + name = "Space near Second Deck" + landmark_tag = "nav_deck3_calypso" + +/obj/shuttle_landmark/sierra/deck4/exploration_shuttle + name = "Space near First Deck" + landmark_tag = "nav_deck4_calypso" + +/obj/shuttle_landmark/sierra/deck5/exploration_shuttle + name = "Space near Bridge" + landmark_tag = "nav_bridge_calypso" + +/obj/shuttle_landmark/sierra/transit/exploration_shuttle + name = "In transit" + landmark_tag = "nav_transit_calypso" + +/datum/shuttle/autodock/overmap/guppy + name = "Guppy" + move_time = 3 SECONDS + shuttle_area = /area/guppy_hangar/start + dock_target ="guppy_shuttle" + current_location = "nav_hangar_guppy" + landmark_transition = "nav_transit_guppy" + sound_takeoff = 'sound/effects/rocket.ogg' + sound_landing = 'sound/effects/rocket_backwards.ogg' + fuel_consumption = 2 + logging_home_tag = "nav_hangar_guppy" + logging_access = access_guppy_helm + skill_needed = SKILL_UNSKILLED + ceiling_type = /turf/simulated/floor/shuttle_ceiling/sierra + warmup_time = 5 SECONDS + +/obj/shuttle_landmark/sierra/hangar/guppy + name = "Guppy Hangar" + landmark_tag = "nav_hangar_guppy" + base_area = /area/quartermaster/hangar + base_turf = /turf/simulated/floor/plating + +/obj/shuttle_landmark/sierra/deck1/guppy + name = "Space near Fourth Deck" + landmark_tag = "nav_deck1_guppy" + +/obj/shuttle_landmark/sierra/deck2/guppy + name = "Space near Third Deck" + landmark_tag = "nav_deck2_guppy" + +/obj/shuttle_landmark/sierra/deck3/guppy + name = "Space near Second Deck" + landmark_tag = "nav_deck3_guppy" + +/obj/shuttle_landmark/sierra/deck4/guppy + name = "Space near First Deck" + landmark_tag = "nav_deck4_guppy" + +/obj/shuttle_landmark/sierra/deck5/guppy + name = "Space near Bridge" + landmark_tag = "nav_bridge_guppy" + +/obj/shuttle_landmark/sierra/transit/guppy + name = "In transit" + landmark_tag = "nav_transit_guppy" + +/datum/shuttle/autodock/overmap/crucian + name = "Crucian" + move_time = 4 SECONDS + shuttle_area = /area/crucian_hangar/start + dock_target ="crucian_shuttle" + current_location = "nav_hangar_crucian" + landmark_transition = "nav_transit_crucian" + sound_takeoff = 'sound/effects/rocket.ogg' + sound_landing = 'sound/effects/rocket_backwards.ogg' + fuel_consumption = 3 + logging_home_tag = "nav_hangar_crucian" + logging_access = access_guppy_helm + skill_needed = SKILL_UNSKILLED + ceiling_type = /turf/simulated/floor/shuttle_ceiling/sierra + warmup_time = 6 SECONDS + +/obj/shuttle_landmark/sierra/hangar/crucian + name = "Auxiliary Hangar" + landmark_tag = "nav_hangar_crucian" + base_area = /area/maintenance/seconddeck/hangar + base_turf = /turf/simulated/floor/plating + +/obj/shuttle_landmark/sierra/deck1/crucian + name = "Space near Fourth Deck" + landmark_tag = "nav_deck1_crucian" + +/obj/shuttle_landmark/sierra/deck2/crucian + name = "Space near Third Deck" + landmark_tag = "nav_deck2_crucian" + +/obj/shuttle_landmark/sierra/deck3/crucian + name = "Space near Second Deck" + landmark_tag = "nav_deck3_crucian" + +/obj/shuttle_landmark/sierra/deck4/crucian + name = "Space near First Deck" + landmark_tag = "nav_deck4_crucian" + +/obj/shuttle_landmark/sierra/deck5/crucian + name = "Space near Bridge" + landmark_tag = "nav_bridge_crucian" + +/obj/shuttle_landmark/sierra/transit/crucian + name = "In transit" + landmark_tag = "nav_transit_crucian" + +//Makes the deck management program use hangar access +/datum/nano_module/deck_management + default_access = list(access_hangar, access_cargo, access_heads) + +// away transit + +/obj/shuttle_landmark/sierra/transit/blueriver_shuttle + name = "In transit" + landmark_tag = "nav_transit_blueriver" + +/obj/shuttle_landmark/sierra/deck3/patrol + name = "Third Deck Starboard Dock" + landmark_tag = "nav_deck3_patrol" + docking_controller = "admin_shuttle_dock" + +/obj/shuttle_landmark/sierra/deck3/skrellshuttle + name = "Third Deck Starboard Dock" + landmark_tag = "nav_deck3_skrellshuttle" + docking_controller = "admin_shuttle_dock" + +/obj/shuttle_landmark/sierra/deck1/skrellscout + name = "Fourth Deck Auxillary Dock" + landmark_tag = "nav_deck1_skrellscout" + docking_controller = "rescue_shuttle_dock_airlock" diff --git a/maps/sierra/sierra_snatch.dm b/maps/sierra/sierra_snatch.dm new file mode 100644 index 0000000000000..9fe6ea985b1d6 --- /dev/null +++ b/maps/sierra/sierra_snatch.dm @@ -0,0 +1,15 @@ +// This file used to snatch other maps code. I hate all of you lazy us ~Laxesh + +// TORCH +#include "..\torch\items\clothing\ec_skillbadges.dm" +#include "..\torch\items\clothing\solgov-accessory.dm" +#include "..\torch\items\clothing\solgov-armor.dm" +#include "..\torch\items\clothing\solgov-feet.dm" +#include "..\torch\items\clothing\solgov-hands.dm" +#include "..\torch\items\clothing\solgov-head.dm" +#include "..\torch\items\clothing\solgov-suit.dm" +#include "..\torch\items\clothing\solgov-under.dm" + +#include "..\torch\language\human\euro.dm" +#include "..\torch\language\human\misc\spacer.dm" +#include "..\torch\structures\signs.dm" diff --git a/maps/sierra/sierra_submaps.dm b/maps/sierra/sierra_submaps.dm new file mode 100644 index 0000000000000..5241922259171 --- /dev/null +++ b/maps/sierra/sierra_submaps.dm @@ -0,0 +1,10 @@ +/datum/job/submap/voxship_vox + rank = /datum/mil_rank/alien + branch = /datum/mil_branch/alien + allowed_branches = list(/datum/mil_branch/alien) + allowed_ranks = list(/datum/mil_rank/alien) + +/datum/job/submap + psi_latency_chance = 20 + give_psionic_implant_on_join = FALSE + required_language = null diff --git a/maps/sierra/sierra_turfs.dm b/maps/sierra/sierra_turfs.dm new file mode 100644 index 0000000000000..bcc4cba8108e0 --- /dev/null +++ b/maps/sierra/sierra_turfs.dm @@ -0,0 +1,24 @@ +/turf/simulated/wall + name = "bulkhead" + +/turf/simulated/floor + name = "bare deck" + +/turf/simulated/floor/tiled + name = "deck" + + +/obj/machinery/door/airlock/glass/research + stripe_color = COLOR_NT_RED + +/obj/machinery/door/airlock/research + stripe_color = COLOR_NT_RED + +/obj/machinery/door/airlock/multi_tile/research + stripe_color = COLOR_NT_RED + +/turf/simulated/floor/shuttle_ceiling/sierra + color = COLOR_OFF_WHITE + +/turf/simulated/floor/shuttle_ceiling/sierra/air + initial_gas = list("oxygen" = MOLES_O2STANDARD, "nitrogen" = MOLES_N2STANDARD) diff --git a/maps/sierra/sierra_unit_testing.dm b/maps/sierra/sierra_unit_testing.dm new file mode 100644 index 0000000000000..ff2f4b00f4ec9 --- /dev/null +++ b/maps/sierra/sierra_unit_testing.dm @@ -0,0 +1,117 @@ +/datum/map/sierra + // Unit test exemptions + apc_test_exempt_areas = list( + /area/space = NO_SCRUBBER|NO_VENT|NO_APC, + /area/exoplanet = NO_SCRUBBER|NO_VENT|NO_APC, + /area/engineering/auxpower = NO_SCRUBBER|NO_VENT, + /area/crucian_hangar/start = NO_SCRUBBER|NO_VENT|NO_APC, + /area/holodeck = NO_SCRUBBER|NO_VENT|NO_APC, + /area/maintenance = NO_SCRUBBER|NO_VENT, + /area/maintenance/exterior = NO_SCRUBBER|NO_VENT|NO_APC, + /area/maintenance/compactor = 0, + /area/maintenance/cistern = 0, + /area/turret_protected/ai_cyborg_station = 0, + /area/turret_protected/ai = NO_SCRUBBER|NO_VENT, + /area/turret_protected/ai_maint = NO_SCRUBBER|NO_VENT, + /area/maintenance/fourthdeck/aft = 0, + /area/maintenance/waterstore = 0, + /area/maintenance/abandoned_hydroponics = 0, + /area/maintenance/firstdeck/aftport = 0, + /area/maintenance/incinerator = 0, + /area/maintenance/thirddeck/aftstarboard = 0, + /area/maintenance/thirddeck/port = 0, + /area/maintenance/thirddeck/aftport = 0, + /area/maintenance/thirddeck/foreport = 0, + /area/maintenance/seconddeck/hangar = 0, + /area/maintenance/seconddeck/aftstarboard = 0, + /area/maintenance/substation/seconddeck = 0, + /area/maintenance/substation/bridgedeck = 0, + /area/maintenance/firstdeck/foreport = 0, + /area/maintenance/firstdeck/centralport = 0, + /area/maintenance/firstdeck/forestarboard = 0, + /area/shuttle = NO_SCRUBBER|NO_VENT|NO_APC, + /area/shuttle/petrov = 0, + /area/solar = NO_SCRUBBER|NO_VENT|NO_APC, + /area/space = NO_SCRUBBER|NO_VENT|NO_APC, + /area/storage = NO_SCRUBBER|NO_VENT, + /area/storage/eva = 0, + /area/storage/auxillary/port = 0, + /area/storage/primary = 0, + /area/storage/tech = 0, + /area/supply = NO_SCRUBBER|NO_VENT|NO_APC, + /area/thruster = NO_SCRUBBER, + /area/turbolift = NO_SCRUBBER|NO_VENT|NO_APC, + /area/vacant = NO_SCRUBBER|NO_VENT|NO_APC, + /area/vacant/bar = NO_APC, + /area/vacant/gambling = 0, + /area/vacant/mess = NO_APC, + /area/vacant/utility = 0, + /area/vacant/dormintories = 0, + /area/vacant/cargo = NO_SCRUBBER|NO_VENT, + /area/vacant/infirmary = NO_SCRUBBER|NO_VENT, + /area/vacant/monitoring = NO_SCRUBBER|NO_VENT, + /area/vacant/prototype = 0, + /area/vacant/storage = NO_SCRUBBER|NO_VENT, + /area/rnd/xenobiology/atmos = NO_SCRUBBER|NO_VENT, + /area/rnd/xenobiology/cell_1 = NO_APC, + /area/rnd/xenobiology/cell_2 = NO_APC, + /area/rnd/xenobiology/cell_3 = NO_APC, + /area/rnd/xenobiology/cell_4 = NO_APC + ) + + area_coherency_test_exempt_areas = list( + /area/space, + /area/centcom/control, + /area/maintenance/exterior, + ) + + area_usage_test_exempted_areas = list( + /area/overmap, + /area/shuttle/escape/centcom, + /area/shuttle/escape, + /area/security/prison, + /area/syndicate_elite_squad, + /area/shuttle/syndicate_elite, + /area/shuttle/syndicate_elite/station, + /area/shuttle/syndicate_elite/mothership, + /area/shuttle/escape/centcom, + /area/rnd/xenobiology/xenoflora_storage, + /area/turbolift, + /area/turbolift/start, + /area/turbolift/firstdeck, + /area/turbolift/seconddeck, + /area/turbolift/thirddeck, + /area/turbolift/fourthdeck, + /area/turbolift/bridgedeck, + /area/beach, + /area/template_noop, + /area/bluespace_interlude, + /area/bluespace_interlude/platform, + /area/bluespace_interlude/surroundings, + /area/rnd/xenobiology/cell_1, + /area/rnd/xenobiology/cell_2, + /area/rnd/xenobiology/cell_3, + /area/rnd/xenobiology/cell_4 + ) + +/datum/unit_test/zas_area_test/ai_chamber + name = "ZAS: AI Chamber" + area_path = /area/turret_protected/ai + +/datum/unit_test/zas_area_test/cargo_bay + name = "ZAS: Cargo Bay" + area_path = /area/quartermaster/storage + +/datum/unit_test/zas_area_test/supply_centcom + name = "ZAS: Supply Shuttle (CentCom)" + area_path = /area/supply/dock + +/* +/datum/unit_test/zas_area_test/virology + name = "ZAS: Virology" + area_path = /area/medical/virology +*/ + +/datum/unit_test/zas_area_test/xenobio + name = "ZAS: Xenobiology" + area_path = /area/rnd/xenobiology diff --git a/maps/sierra/sound/ambience/ai1.ogg b/maps/sierra/sound/ambience/ai1.ogg new file mode 100644 index 0000000000000..e5b32dc1a7562 Binary files /dev/null and b/maps/sierra/sound/ambience/ai1.ogg differ diff --git a/maps/sierra/sound/ambience/ai2.ogg b/maps/sierra/sound/ambience/ai2.ogg new file mode 100644 index 0000000000000..691b437f4964f Binary files /dev/null and b/maps/sierra/sound/ambience/ai2.ogg differ diff --git a/maps/sierra/sound/ambience/ai3.ogg b/maps/sierra/sound/ambience/ai3.ogg new file mode 100644 index 0000000000000..b20e79fdde6de Binary files /dev/null and b/maps/sierra/sound/ambience/ai3.ogg differ diff --git a/maps/sierra/sound/ambience/aimalf.ogg b/maps/sierra/sound/ambience/aimalf.ogg new file mode 100644 index 0000000000000..e5b32dc1a7562 Binary files /dev/null and b/maps/sierra/sound/ambience/aimalf.ogg differ diff --git a/maps/sierra/sound/ambience/aiporthum.ogg b/maps/sierra/sound/ambience/aiporthum.ogg new file mode 100644 index 0000000000000..ddea7c5b39d12 Binary files /dev/null and b/maps/sierra/sound/ambience/aiporthum.ogg differ diff --git a/maps/sierra/sound/ambience/aiservers.wav b/maps/sierra/sound/ambience/aiservers.wav new file mode 100644 index 0000000000000..0562dd0b3cc74 Binary files /dev/null and b/maps/sierra/sound/ambience/aiservers.wav differ diff --git a/maps/sierra/sound/ambience/ambxerxes_looped.wav b/maps/sierra/sound/ambience/ambxerxes_looped.wav new file mode 100644 index 0000000000000..ccc5c2f8dbf0e Binary files /dev/null and b/maps/sierra/sound/ambience/ambxerxes_looped.wav differ diff --git a/maps/sierra/sound/ambience/atmospherics1.ogg b/maps/sierra/sound/ambience/atmospherics1.ogg new file mode 100644 index 0000000000000..006de1c9cc66a Binary files /dev/null and b/maps/sierra/sound/ambience/atmospherics1.ogg differ diff --git a/maps/sierra/sound/ambience/bridge.wav b/maps/sierra/sound/ambience/bridge.wav new file mode 100644 index 0000000000000..4dde1c261bcb4 Binary files /dev/null and b/maps/sierra/sound/ambience/bridge.wav differ diff --git a/maps/sierra/sound/ambience/chapel1.ogg b/maps/sierra/sound/ambience/chapel1.ogg new file mode 100644 index 0000000000000..4055a831b577d Binary files /dev/null and b/maps/sierra/sound/ambience/chapel1.ogg differ diff --git a/maps/sierra/sound/ambience/chapel2.ogg b/maps/sierra/sound/ambience/chapel2.ogg new file mode 100644 index 0000000000000..c95f16af0849e Binary files /dev/null and b/maps/sierra/sound/ambience/chapel2.ogg differ diff --git a/maps/sierra/sound/ambience/chapel3.ogg b/maps/sierra/sound/ambience/chapel3.ogg new file mode 100644 index 0000000000000..6297f7df1c49f Binary files /dev/null and b/maps/sierra/sound/ambience/chapel3.ogg differ diff --git a/maps/sierra/sound/ambience/chapel4.ogg b/maps/sierra/sound/ambience/chapel4.ogg new file mode 100644 index 0000000000000..1139fa7797a9f Binary files /dev/null and b/maps/sierra/sound/ambience/chapel4.ogg differ diff --git a/maps/sierra/sound/ambience/engineering1.ogg b/maps/sierra/sound/ambience/engineering1.ogg new file mode 100644 index 0000000000000..c832c677d5e46 Binary files /dev/null and b/maps/sierra/sound/ambience/engineering1.ogg differ diff --git a/maps/sierra/sound/ambience/engineering2.ogg b/maps/sierra/sound/ambience/engineering2.ogg new file mode 100644 index 0000000000000..9651049c25b0c Binary files /dev/null and b/maps/sierra/sound/ambience/engineering2.ogg differ diff --git a/maps/sierra/sound/ambience/engineering3.ogg b/maps/sierra/sound/ambience/engineering3.ogg new file mode 100644 index 0000000000000..63afd437a653a Binary files /dev/null and b/maps/sierra/sound/ambience/engineering3.ogg differ diff --git a/maps/sierra/sound/ambience/hangar1.ogg b/maps/sierra/sound/ambience/hangar1.ogg new file mode 100644 index 0000000000000..6fea9fc0f5bc0 Binary files /dev/null and b/maps/sierra/sound/ambience/hangar1.ogg differ diff --git a/maps/sierra/sound/ambience/hangar2.ogg b/maps/sierra/sound/ambience/hangar2.ogg new file mode 100644 index 0000000000000..1c8a63424c8a1 Binary files /dev/null and b/maps/sierra/sound/ambience/hangar2.ogg differ diff --git a/maps/sierra/sound/ambience/hangar3.ogg b/maps/sierra/sound/ambience/hangar3.ogg new file mode 100644 index 0000000000000..4518a70a943f2 Binary files /dev/null and b/maps/sierra/sound/ambience/hangar3.ogg differ diff --git a/maps/sierra/sound/ambience/hangar4.ogg b/maps/sierra/sound/ambience/hangar4.ogg new file mode 100644 index 0000000000000..a28c914c9edc7 Binary files /dev/null and b/maps/sierra/sound/ambience/hangar4.ogg differ diff --git a/maps/sierra/sound/ambience/hangar5.ogg b/maps/sierra/sound/ambience/hangar5.ogg new file mode 100644 index 0000000000000..cef20f5628b69 Binary files /dev/null and b/maps/sierra/sound/ambience/hangar5.ogg differ diff --git a/maps/sierra/sound/ambience/hangar6.ogg b/maps/sierra/sound/ambience/hangar6.ogg new file mode 100644 index 0000000000000..938cb83f195c8 Binary files /dev/null and b/maps/sierra/sound/ambience/hangar6.ogg differ diff --git a/maps/sierra/sound/ambience/substation1.ogg b/maps/sierra/sound/ambience/substation1.ogg new file mode 100644 index 0000000000000..5aa2dd36c1e1c Binary files /dev/null and b/maps/sierra/sound/ambience/substation1.ogg differ diff --git a/maps/sierra/sound/ambience/substation2.ogg b/maps/sierra/sound/ambience/substation2.ogg new file mode 100644 index 0000000000000..837fbe1b91811 Binary files /dev/null and b/maps/sierra/sound/ambience/substation2.ogg differ diff --git a/maps/sierra/sound/ambience/substation3.ogg b/maps/sierra/sound/ambience/substation3.ogg new file mode 100644 index 0000000000000..02c6899f4d91d Binary files /dev/null and b/maps/sierra/sound/ambience/substation3.ogg differ diff --git a/maps/sierra/sound/ambience/substation4.ogg b/maps/sierra/sound/ambience/substation4.ogg new file mode 100644 index 0000000000000..1220751a18441 Binary files /dev/null and b/maps/sierra/sound/ambience/substation4.ogg differ diff --git a/maps/sierra/sound/ambience/substation5.ogg b/maps/sierra/sound/ambience/substation5.ogg new file mode 100644 index 0000000000000..23f55a302de0b Binary files /dev/null and b/maps/sierra/sound/ambience/substation5.ogg differ diff --git a/maps/sierra/sound/ambience/substation6.ogg b/maps/sierra/sound/ambience/substation6.ogg new file mode 100644 index 0000000000000..ee39656907eb1 Binary files /dev/null and b/maps/sierra/sound/ambience/substation6.ogg differ diff --git a/maps/sierra/sound/ambience/substation7.ogg b/maps/sierra/sound/ambience/substation7.ogg new file mode 100644 index 0000000000000..fd2b7372b67ad Binary files /dev/null and b/maps/sierra/sound/ambience/substation7.ogg differ diff --git a/maps/sierra/sound/ambience/substation8.ogg b/maps/sierra/sound/ambience/substation8.ogg new file mode 100644 index 0000000000000..770ca2c8a31f2 Binary files /dev/null and b/maps/sierra/sound/ambience/substation8.ogg differ diff --git a/maps/sierra/sound/items/ui_pipboy_select.wav b/maps/sierra/sound/items/ui_pipboy_select.wav new file mode 100644 index 0000000000000..2ab793a224e66 Binary files /dev/null and b/maps/sierra/sound/items/ui_pipboy_select.wav differ diff --git a/maps/sierra/sound/music/eminem_lovethewayyoulie.ogg b/maps/sierra/sound/music/eminem_lovethewayyoulie.ogg new file mode 100644 index 0000000000000..b25b6833db856 Binary files /dev/null and b/maps/sierra/sound/music/eminem_lovethewayyoulie.ogg differ diff --git a/maps/sierra/sound/music/lobby/Gneiss-Bluespace.ogg b/maps/sierra/sound/music/lobby/Gneiss-Bluespace.ogg new file mode 100644 index 0000000000000..c0a5b08fe2aeb Binary files /dev/null and b/maps/sierra/sound/music/lobby/Gneiss-Bluespace.ogg differ diff --git a/maps/sierra/sound/music/lobby/Gneiss-Downtown.ogg b/maps/sierra/sound/music/lobby/Gneiss-Downtown.ogg new file mode 100644 index 0000000000000..5b251a8a04194 Binary files /dev/null and b/maps/sierra/sound/music/lobby/Gneiss-Downtown.ogg differ diff --git a/maps/sierra/sound/music/lobby/Gneiss-Exploring.ogg b/maps/sierra/sound/music/lobby/Gneiss-Exploring.ogg new file mode 100644 index 0000000000000..08331dba8d336 Binary files /dev/null and b/maps/sierra/sound/music/lobby/Gneiss-Exploring.ogg differ diff --git a/maps/sierra/sound/music/lobby/Gneiss-Metropolis.ogg b/maps/sierra/sound/music/lobby/Gneiss-Metropolis.ogg new file mode 100644 index 0000000000000..bf8c540a341f4 Binary files /dev/null and b/maps/sierra/sound/music/lobby/Gneiss-Metropolis.ogg differ diff --git a/maps/sierra/sound/music/lobby/Welcome_to_Lunar_Industries.ogg b/maps/sierra/sound/music/lobby/Welcome_to_Lunar_Industries.ogg new file mode 100644 index 0000000000000..0b8236e8df133 Binary files /dev/null and b/maps/sierra/sound/music/lobby/Welcome_to_Lunar_Industries.ogg differ diff --git a/maps/sierra/sound/music/lobby/faunts-das_malefitz.ogg b/maps/sierra/sound/music/lobby/faunts-das_malefitz.ogg new file mode 100644 index 0000000000000..466ec24c6a518 Binary files /dev/null and b/maps/sierra/sound/music/lobby/faunts-das_malefitz.ogg differ diff --git a/maps/sierra/sound/music/lobby/space_asshole.ogg b/maps/sierra/sound/music/lobby/space_asshole.ogg new file mode 100644 index 0000000000000..6bfd9e75e9d6e Binary files /dev/null and b/maps/sierra/sound/music/lobby/space_asshole.ogg differ diff --git a/maps/sierra/sound/music/river_flows_in_you.ogg b/maps/sierra/sound/music/river_flows_in_you.ogg new file mode 100644 index 0000000000000..17aa319d7191f Binary files /dev/null and b/maps/sierra/sound/music/river_flows_in_you.ogg differ diff --git a/maps/sierra/sound/welcome.ogg b/maps/sierra/sound/welcome.ogg new file mode 100644 index 0000000000000..3631d44215090 Binary files /dev/null and b/maps/sierra/sound/welcome.ogg differ diff --git a/maps/sierra/structures/closets.dm b/maps/sierra/structures/closets.dm new file mode 100644 index 0000000000000..54c3a1ae4ce63 --- /dev/null +++ b/maps/sierra/structures/closets.dm @@ -0,0 +1,69 @@ +/* + * Sierra Excavation + */ + +/obj/structure/closet/toolcloset/excavation + name = "excavation equipment closet" + desc = "It's a storage unit for excavation equipment." + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/excavation + +/obj/structure/closet/toolcloset/excavation/WillContain() + return list( + /obj/item/storage/belt/archaeology, + /obj/item/storage/excavation, + /obj/item/device/flashlight/lantern, + /obj/item/device/ano_scanner, + /obj/item/device/depth_scanner, + /obj/item/device/core_sampler, + /obj/item/device/gps, + /obj/item/pinpointer/radio, + /obj/item/clothing/glasses/meson, + /obj/item/clothing/glasses/science, + /obj/item/pickaxe, + /obj/item/pickaxe/xeno/hand, + /obj/item/device/measuring_tape, + /obj/item/storage/bag/fossils, + /obj/item/hand_labeler, + /obj/item/taperoll/research, + /obj/item/shuttle_beacon + ) + +/obj/structure/closet/wardrobe/ptgear + name = "pt gear wardrobe" + closet_appearance = /singleton/closet_appearance/wardrobe/white + +/obj/structure/closet/wardrobe/ptgear/WillContain() + return list( + /obj/item/clothing/under/solgov/pt/expeditionary = 4, + /obj/item/clothing/shoes/white = 2, + /obj/item/clothing/shoes/black = 2) + +/obj/random/sierracloset //Random closets taking into account sierra-specific ones + name = "random closet" + desc = "This is a random closet." + +/obj/random/sierracloset/spawn_choices() + return list(/obj/structure/closet, +// /obj/structure/closet/walllocker/firecloset, + /obj/structure/closet/emcloset, + /obj/structure/closet/jcloset/sierra, + /obj/structure/closet/athletic_mixed, + /obj/structure/closet/toolcloset, + /obj/structure/closet/toolcloset/excavation, + /obj/structure/closet/l3closet/general, + /obj/structure/closet/cabinet, + /obj/structure/closet/crate, + /obj/structure/closet/crate/freezer, + /obj/structure/closet/crate/freezer/rations, + /obj/structure/closet/crate/internals, + /obj/structure/closet/crate/trashcart, + /obj/structure/closet/crate/medical, + /obj/structure/closet/boxinggloves, + /obj/structure/closet/secure_closet/crew, + /obj/structure/closet/secure_closet/crew/research, + /obj/structure/closet/secure_closet/guncabinet, + /obj/structure/largecrate, + /obj/structure/closet/wardrobe/xenos, + /obj/structure/closet/wardrobe/mixed, + /obj/structure/closet/wardrobe/suit, + /obj/structure/closet/wardrobe/orange) diff --git a/maps/sierra/structures/closets/_closets_appearances.dm b/maps/sierra/structures/closets/_closets_appearances.dm new file mode 100644 index 0000000000000..b82158661abf9 --- /dev/null +++ b/maps/sierra/structures/closets/_closets_appearances.dm @@ -0,0 +1,348 @@ +/singleton/closet_appearance/wardrobe + extra_decals = list( + "stripe_horizontal" = COLOR_PALE_BLUE_GRAY, + "stripe_w" = COLOR_WHITE + ) + +/singleton/closet_appearance/sierra/white + color = COLOR_OFF_WHITE + decals = list() + +/singleton/closet_appearance/secure_closet/sierra/evidence + extra_decals = list( + "vertical_stripe_simple" = COLOR_WHITE, + ) + +/singleton/closet_appearance/secure_closet/sierra/patients + color = COLOR_OFF_WHITE + decals = list( + "upper_vent", + "lower_vent" + ) + extra_decals = list( + "stripe_horizontal" = COLOR_BLUE_GRAY, + "stripe_personnel" = COLOR_WHITE + ) + +/singleton/closet_appearance/secure_closet/sierra/medical/chemistry + color = COLOR_OFF_WHITE + decals = list() + extra_decals = list( + "stripes_horizontal" = COLOR_DARK_ORANGE, + "circle" = COLOR_DARK_ORANGE + ) + +/singleton/closet_appearance/secure_closet/sierra/science + color = COLOR_WHITE + decals = list( + "upper_side_vent", + "lower_side_vent" + ) + extra_decals = list( + "stripe_vertical_left_partial" = COLOR_PURPLE, + "stripe_vertical_right_partial" = COLOR_PURPLE, + "sci" = COLOR_PURPLE + ) + +/singleton/closet_appearance/secure_closet/sierra/science/rd + color = COLOR_PURPLE_GRAY + extra_decals = list( + "stripe_vertical_left_partial" = COLOR_GOLD, + "stripe_vertical_right_partial" = COLOR_GOLD, + "sci" = COLOR_GOLD + ) + +/singleton/closet_appearance/secure_closet/sierra/science/xenobot + color = COLOR_GREEN_GRAY + extra_decals = list( + "stripe_vertical_left_partial" = COLOR_PAKISTAN_GREEN, + "stripe_vertical_right_partial" = COLOR_PAKISTAN_GREEN, + "sci" = COLOR_PAKISTAN_GREEN + ) + +/singleton/closet_appearance/secure_closet/sierra/excavation + color = COLOR_WARM_YELLOW + decals = list( + "upper_side_vent", + "lower_side_vent" + ) + extra_decals = list( + "stripe_vertical_left_partial" = COLOR_BEASTY_BROWN, + "stripe_vertical_right_partial" = COLOR_BEASTY_BROWN, + "sci" = COLOR_BEASTY_BROWN + ) + +/singleton/closet_appearance/secure_closet/sierra/cargo/prospector + color = COLOR_WARM_YELLOW + decals = list( + "upper_side_vent", + "lower_side_vent" + ) + extra_decals = list( + "stripe_vertical_mid_partial" = COLOR_BEASTY_BROWN, + "stripe_vertical_left_partial" = COLOR_BEASTY_BROWN, + "mining" = COLOR_BEASTY_BROWN + ) + +/singleton/closet_appearance/secure_closet/sierra/cargo/decktech + extra_decals = list( + "stripe_vertical_left_full" = COLOR_BEASTY_BROWN, + "stripe_vertical_right_full" = COLOR_BEASTY_BROWN, + "cargo_upper" = COLOR_BEASTY_BROWN + ) + +/singleton/closet_appearance/secure_closet/sierra/cargo/quartmaster + extra_decals = list( + "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD, + "stripe_vertical_left_full" = COLOR_BEASTY_BROWN, + "stripe_vertical_right_full" = COLOR_BEASTY_BROWN, + "cargo_upper" = COLOR_CLOSET_GOLD + ) + +/singleton/closet_appearance/secure_closet/sierra/engineering/junior + color = COLOR_YELLOW_GRAY + decals = list( + "lower_side_vent", + "upper_side_vent" + ) + extra_decals = list( + "stripe_vertical_mid_partial" = COLOR_NT_RED, + "eng_narrow" = COLOR_NT_RED + ) + +/singleton/closet_appearance/secure_closet/sierra/engineering + color = COLOR_YELLOW_GRAY + decals = list( + "lower_side_vent", + "upper_side_vent" + ) + extra_decals = list( + "stripe_vertical_mid_partial" = COLOR_NT_RED, + "stripe_vertical_right_partial" = COLOR_NT_RED, + "eng_narrow" = COLOR_NT_RED + ) + +/singleton/closet_appearance/secure_closet/sierra/engineering/senior + color = COLOR_YELLOW_GRAY + decals = list( + "lower_side_vent", + "upper_side_vent" + ) + extra_decals = list( + "stripe_vertical_mid_partial" = COLOR_BEASTY_BROWN, + "stripe_vertical_right_partial" = COLOR_BEASTY_BROWN, + "eng_narrow" = COLOR_BEASTY_BROWN + ) + +/singleton/closet_appearance/secure_closet/sierra/engineering/atmos + extra_decals = list( + "stripe_vertical_mid_partial" = COLOR_COMMAND_BLUE, + "stripe_vertical_right_partial" = COLOR_COMMAND_BLUE, + "atmos" = COLOR_COMMAND_BLUE + ) + +/singleton/closet_appearance/secure_closet/sierra/engineering/infotech + color = COLOR_GUNMETAL + extra_decals = list( + "stripe_vertical_mid_partial" = COLOR_PALE_ORANGE, + "stripe_vertical_right_partial" = COLOR_PALE_ORANGE, + "eng_narrow" = COLOR_PALE_ORANGE + ) + +/singleton/closet_appearance/secure_closet/sierra/engineering/ce + color = COLOR_OFF_WHITE + extra_decals = list( + "stripe_vertical_mid_partial" = COLOR_PALE_ORANGE, + "stripe_vertical_right_partial" = COLOR_PALE_ORANGE, + "eng_narrow" = COLOR_PALE_ORANGE + ) + +/singleton/closet_appearance/secure_closet/sierra/security + color = COLOR_GUNMETAL + decals = list( + "lower_holes" + ) + extra_decals = list( + "stripe_vertical_mid_full" = COLOR_NT_RED, + "security" = COLOR_NT_RED + ) + +/singleton/closet_appearance/secure_closet/sierra/security/forensics + color = COLOR_OFF_WHITE + extra_decals = list( + "stripe_vertical_mid_full" = COLOR_NT_RED, + "forensics" = COLOR_NT_RED + ) + +/singleton/closet_appearance/secure_closet/sierra/security/warden + color = COLOR_WALL_GUNMETAL + extra_decals = list( + "stripe_vertical_left_full" = COLOR_NT_RED, + "stripe_vertical_right_full" = COLOR_NT_RED, + "security" = COLOR_NT_RED + ) + +/singleton/closet_appearance/secure_closet/sierra/security/hos + color = COLOR_WALL_GUNMETAL + decals = list( + "upper_holes", + "lower_holes" + ) + extra_decals = list( + "stripe_vertical_left_full" = COLOR_NT_RED, + "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD, + "stripe_vertical_right_full" = COLOR_NT_RED, + "security" = COLOR_CLOSET_GOLD + ) + +/singleton/closet_appearance/secure_closet/sierra/command + color = COLOR_WALL_GUNMETAL + decals = list( + "lower_holes" + ) + extra_decals = list( + "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD + ) + +/singleton/closet_appearance/secure_closet/sierra/command/adjutant + extra_decals = list( + "stripe_vertical_left_full" = COLOR_CLOSET_GOLD, + "stripe_vertical_right_full" = COLOR_CLOSET_GOLD + ) + +/singleton/closet_appearance/secure_closet/sierra/command/hop + extra_decals = list( + "stripe_vertical_left_full" = COLOR_GOLD, + "stripe_vertical_right_full" = COLOR_GOLD, + "command" = COLOR_GOLD + ) + +/singleton/closet_appearance/secure_closet/sierra/command/captain + decals = list( + "upper_holes", + "lower_holes" + ) + extra_decals = list( + "stripe_vertical_left_full" = COLOR_GOLD, + "stripe_vertical_mid_full" = COLOR_OFF_WHITE, + "stripe_vertical_right_full" = COLOR_GOLD, + "command" = COLOR_OFF_WHITE + ) + +/singleton/closet_appearance/secure_closet/sierra/crew + color = COLOR_GUNMETAL + extra_decals = list( + "stripe_vertical_mid_full" = COLOR_OFF_WHITE + ) + +/singleton/closet_appearance/secure_closet/sierra/corporate + color = COLOR_GUNMETAL + extra_decals = list( + "stripe_vertical_mid_full" = COLOR_OFF_WHITE + ) + +/singleton/closet_appearance/secure_closet/sierra/corporate/iaa + decals = list( + "lower_holes" + ) + extra_decals = list( + "stripe_vertical_left_full" = COLOR_OFF_WHITE, + "stripe_vertical_right_full" = COLOR_OFF_WHITE, + "command" = COLOR_OFF_WHITE + ) + +/singleton/closet_appearance/secure_closet/sierra/exploration + color = COLOR_WALL_GUNMETAL + decals = list( + "lower_holes" + ) + extra_decals = list( + "stripe_vertical_mid_full" = COLOR_PURPLE_GRAY, + "exped" = COLOR_PURPLE_GRAY + ) + +/singleton/closet_appearance/secure_closet/sierra/exploration/med + decals = list( + "lower_side_vent", + "upper_side_vent" + ) + extra_decals = list( + "stripe_vertical_mid_partial" = COLOR_PURPLE_GRAY, + "medcircle" = COLOR_PURPLE_GRAY + ) + +/singleton/closet_appearance/secure_closet/sierra/exploration/eng + decals = list( + "lower_side_vent", + "upper_side_vent" + ) + extra_decals = list( + "stripe_vertical_mid_partial" = COLOR_PURPLE_GRAY, + "eng" = COLOR_PURPLE_GRAY + ) + +/singleton/closet_appearance/secure_closet/sierra/exploration/pilot + extra_decals = list( + "stripe_vertical_left_full" = COLOR_PURPLE_GRAY, + "stripe_vertical_right_full" = COLOR_PURPLE_GRAY, + "exped" = COLOR_PURPLE_GRAY + ) + +/singleton/closet_appearance/secure_closet/sierra/exploration/leader + extra_decals = list( + "stripe_vertical_left_full" = COLOR_PURPLE_GRAY, + "stripe_vertical_mid_full" = COLOR_GOLD, + "stripe_vertical_right_full" = COLOR_PURPLE_GRAY, + "exped" = COLOR_GOLD + ) + +/singleton/closet_appearance/secure_closet/sierra/hydroponics + color = COLOR_GREEN_GRAY + decals = list( + "lower_side_vent", + "upper_side_vent" + ) + extra_decals = list( + "stripe_vertical_right_partial" = COLOR_PAKISTAN_GREEN, + "stripe_vertical_mid_partial" = COLOR_PAKISTAN_GREEN, + "hydro" = COLOR_PAKISTAN_GREEN + ) + +/singleton/closet_appearance/wardrobe/sierra/medical + color = COLOR_OFF_WHITE + extra_decals = list( + "stripe_horizontal" = COLOR_PALE_BLUE_GRAY, + "stripe_w" = COLOR_WHITE + ) + +/singleton/closet_appearance/wardrobe/sierra/research + color = COLOR_OFF_WHITE + extra_decals = list( + "stripe_horizontal" = COLOR_PALE_PURPLE_GRAY, + "stripe_w" = COLOR_WHITE + ) + +/singleton/closet_appearance/wardrobe/sierra/chef + color = COLOR_OFF_WHITE + extra_decals = list( + "stripe_horizontal" = COLOR_BLACK, + "stripe_w" = COLOR_WHITE + ) + +/singleton/closet_appearance/wardrobe/sierra/janitor + extra_decals = list( + "stripe_horizontal" = COLOR_PURPLE, + "stripe_w" = COLOR_WHITE + ) + +/singleton/closet_appearance/cabinet/secure + color = WOOD_COLOR_CHOCOLATE + +/singleton/closet_appearance/crate/present + color = COLOR_RED_GRAY + extra_decals = list( + "crate_bracing" = COLOR_RED_GRAY, + "lid_stripes" = COLOR_GREEN_GRAY, + "crate_stripe_left" = COLOR_GREEN_GRAY, + "crate_stripe_right" = COLOR_GREEN_GRAY + ) diff --git a/maps/sierra/structures/closets/armory.dm b/maps/sierra/structures/closets/armory.dm new file mode 100644 index 0000000000000..45a36482bc5a5 --- /dev/null +++ b/maps/sierra/structures/closets/armory.dm @@ -0,0 +1,71 @@ +/obj/structure/closet/secure_closet/guncabinet/sierra_armory + name = "armory guncabinet" + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/smg + name = "submachine gun guncabinet" + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/smg/WillContain() + return list(/obj/item/gun/projectile/automatic/sec_smg = 2, + /obj/item/ammo_magazine/smg_top/rubber = 4, + /obj/item/ammo_magazine/smg_top = 4) + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/shotgun + name = "shotgun guncabinet" + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/shotgun/WillContain() + return list(/obj/item/gun/projectile/shotgun/pump/combat = 2, + /obj/item/clothing/accessory/storage/bandolier = 2, + /obj/item/storage/box/ammo/beanbags = 2, + /obj/item/storage/box/ammo/practiceshells = 2, + /obj/item/storage/box/ammo/manstoppershells = 2) + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/laser + name = "laser guncabinet" + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/laser/WillContain() + return list(/obj/item/gun/energy/laser/secure = 6) + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/stun + name = "stun guncabinet" + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/stun/WillContain() + return list(/obj/item/gun/energy/stunrevolver/rifle = 2, + /obj/item/gun/energy/taser/carbine = 2, + /obj/item/gun/energy/taser = 4) + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/ion + name = "ion guncabinet" + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/ion/WillContain() + return list(/obj/item/gun/energy/ionrifle = 2, + /obj/item/gun/energy/ionrifle/small/sec = 1) + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/egun + name = "energy guncabinet" + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/egun/WillContain() + return list(/obj/item/gun/energy/gun/secure = 3) + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/launcher + name = "grenade launcher guncabinet" + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/launcher/WillContain() + return list(/obj/item/gun/launcher/grenade = 1, + /obj/item/storage/box/smokes = 1, + /obj/item/storage/box/flashbangs = 2, + /obj/item/storage/box/emps = 1, + /obj/item/storage/box/teargas = 1) + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/militia + name = "militia guncabinet" + +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/militia/WillContain() + return list(/obj/item/gun/energy/gun/small/secure = 4, + /obj/item/clothing/accessory/armband = 4) + +/obj/structure/closet/secure_closet/guncabinet/sierra_emergency + name = "emergency smartgun guncabinet" + req_access = list(access_security) //even adjutant/guard can open + +/obj/structure/closet/secure_closet/guncabinet/sierra_emergency/WillContain() + return list(/obj/item/gun/energy/gun/small/secure = 3) diff --git a/maps/sierra/structures/closets/command.dm b/maps/sierra/structures/closets/command.dm new file mode 100644 index 0000000000000..86a69857448d2 --- /dev/null +++ b/maps/sierra/structures/closets/command.dm @@ -0,0 +1,92 @@ +/* + * Sierra Command + */ +//* + +/obj/structure/closet/secure_closet/captains/sierra + name = "captain's cabinet" + req_access = list(access_captain) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/command/captain + +/obj/structure/closet/secure_closet/captains/sierra/WillContain() + return list( + /obj/item/clothing/suit/armor/pcarrier/medium, + /obj/item/clothing/head/helmet, + /obj/item/clothing/glasses/sunglasses, + /obj/item/clothing/accessory/storage/holster/thigh, + /obj/item/gun/energy/stunrevolver/secure, + /obj/item/device/radio/headset/heads/sierra_captain, + /obj/item/device/radio/headset/heads/sierra_captain/alt, + /obj/item/storage/belt/general, + /obj/item/melee/telebaton, + /obj/item/device/flash, + /obj/item/device/megaphone, + /obj/item/device/taperecorder, + /obj/item/device/tape/random = 3, + /obj/item/clothing/head/caphat/formal, + /obj/item/clothing/head/caphat/cap, + /obj/item/clothing/suit/captunic, + /obj/item/clothing/suit/captunic/capjacket, + /obj/item/clothing/gloves/captain, + /obj/item/clothing/under/rank/captain, + /obj/item/clothing/under/dress/dress_cap, + /obj/item/clothing/under/captainformal, + /obj/item/device/remote_device/captain, + /obj/item/ammo_magazine/speedloader, + /obj/item/storage/box/PDAs, + /obj/item/storage/box/ids, + /obj/item/clothing/head/beret/infinity/captain, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/command, /obj/item/storage/backpack/satchel/com)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag/com, /obj/item/storage/backpack/messenger/com)) + ) +/obj/structure/closet/secure_closet/hop/sierra + name = "head of personnel's locker" + req_access = list(access_hop) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/command/hop + +/obj/structure/closet/secure_closet/hop2 + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/command/hop + +/obj/structure/closet/secure_closet/hop/sierra/WillContain() + return list( + /obj/item/clothing/glasses/sunglasses, + /obj/item/clothing/suit/armor/pcarrier/medium, + /obj/item/clothing/head/helmet, + /obj/item/device/radio/headset/heads/hop, + /obj/item/device/radio/headset/heads/hop/alt, + /obj/item/clothing/accessory/storage/holster/thigh, + /obj/item/gun/energy/gun/secure, + /obj/item/melee/telebaton, + /obj/item/device/taperecorder, + /obj/item/device/tape/random = 3, + /obj/item/device/remote_device/civillian, + /obj/item/device/flash, + /obj/item/device/megaphone, + /obj/item/material/clipboard, + /obj/item/storage/box/PDAs, + /obj/item/storage/box/ids, + /obj/item/storage/belt/holster/general, + /obj/item/clothing/head/beret/infinity/hop + ) + +/obj/structure/closet/secure_closet/adjutant + name = "adjutant's locker" + req_access = list(access_bridge) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/command/adjutant + +/obj/structure/closet/secure_closet/adjutant/WillContain() + return list( + /obj/item/device/radio, + /obj/item/pen, + /obj/item/clothing/suit/armor/pcarrier/light, + /obj/item/storage/belt/general, + /obj/item/clothing/head/helmet, + /obj/item/device/flash, + /obj/item/device/megaphone, + /obj/item/modular_computer/tablet/lease/preset/command, + /obj/item/device/radio/headset/adjutant, + /obj/item/device/radio/headset/adjutant/alt, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack, /obj/item/storage/backpack/satchel/grey)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag, /obj/item/storage/backpack/messenger)), + new /datum/atom_creator/weighted(list(/obj/item/device/flashlight, /obj/item/device/flashlight/flare, /obj/item/device/flashlight/flare/glowstick/random)) + ) diff --git a/maps/sierra/structures/closets/engineering.dm b/maps/sierra/structures/closets/engineering.dm new file mode 100644 index 0000000000000..d1cb54c8cef9e --- /dev/null +++ b/maps/sierra/structures/closets/engineering.dm @@ -0,0 +1,154 @@ +/* + * Sierra Engineering + */ + +/obj/structure/closet/secure_closet/engineering_chief_sierra + name = "chief engineer's locker" + req_access = list(access_ce) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/engineering/ce + +/obj/structure/closet/secure_closet/engineering_chief_sierra/WillContain() + return list( + /obj/item/clothing/accessory/storage/brown_vest, + /obj/item/blueprints, + /obj/item/clothing/head/welding, + /obj/item/clothing/gloves/insulated, + /obj/item/device/radio/headset/heads/ce, + /obj/item/device/radio/headset/heads/ce/alt, + /obj/item/storage/belt/utility/full, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/mask/gas, + /obj/item/device/multitool, + /obj/item/device/flash, + /obj/item/material/twohanded/jack/titanium, + /obj/item/clothing/suit/armor/pcarrier/light, + /obj/item/taperoll/engineering, + /obj/item/device/megaphone, + /obj/item/device/remote_device/chief_engineer, + /obj/item/clothing/glasses/meson, + /obj/item/clothing/glasses/welding/superior, + /obj/item/material/clipboard, + /obj/item/device/flashlight/upgraded, + /obj/item/storage/box/armband/engine, + /obj/item/device/multitool/multimeter, + /obj/item/storage/box/secret_project_disks, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/industrial, /obj/item/storage/backpack/satchel/eng)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag/eng, /obj/item/storage/backpack/messenger/engi)), + /obj/item/device/radio + ) + +/obj/structure/closet/secure_closet/engineering_senior + name = "senior engineer's locker" + req_access = list(access_seneng) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/engineering/senior + +/obj/structure/closet/secure_closet/engineering_senior/WillContain() + return list( + /obj/item/clothing/accessory/storage/brown_vest, + /obj/item/device/radio/headset/headset_eng, + /obj/item/device/radio/headset/headset_eng/alt, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/mask/gas, + /obj/item/storage/belt/utility/full, + /obj/item/clothing/head/beret/engineering, + /obj/item/clothing/glasses/meson, + /obj/item/taperoll/engineering, + /obj/item/taperoll/atmos, + /obj/item/clothing/glasses/welding/superior, + /obj/item/device/flash, + /obj/item/device/flashlight/upgraded, + /obj/item/device/megaphone, + /obj/item/clothing/gloves/insulated, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/industrial, /obj/item/storage/backpack/satchel/eng)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag/eng, /obj/item/storage/backpack/messenger/engi)), + /obj/item/device/radio + ) + +/obj/structure/closet/secure_closet/engineering_sierra + name = "engineer's locker" + req_access = list(access_engine_equip) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/engineering + +/obj/structure/closet/secure_closet/engineering_sierra/WillContain() + return list( + /obj/item/clothing/accessory/storage/brown_vest, + /obj/item/storage/belt/utility/full, + /obj/item/device/radio/headset/headset_eng, + /obj/item/device/radio/headset/headset_eng/alt, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/mask/gas, + /obj/item/clothing/head/beret/engineering, + /obj/item/clothing/glasses/meson, + /obj/item/taperoll/engineering, + /obj/item/device/flashlight/upgraded, + /obj/item/taperoll/atmos, + /obj/item/clothing/gloves/insulated, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/industrial, /obj/item/storage/backpack/satchel/eng)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag/eng, /obj/item/storage/backpack/messenger/engi)), + /obj/item/device/radio + ) + +/obj/structure/closet/secure_closet/engineering_sierra/junior + name = " junior engineer's locker" + req_access = list(access_engine) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/engineering/junior + +/obj/structure/closet/secure_closet/engineering_sierra/junior/WillContain() + return list( + /obj/item/clothing/accessory/storage/brown_vest, + /obj/item/storage/belt/utility/full, + /obj/item/device/radio/headset/headset_eng, + /obj/item/device/radio/headset/headset_eng/alt, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/mask/gas, + /obj/item/clothing/glasses/meson, + /obj/item/taperoll/engineering, + /obj/item/device/flashlight/upgraded, + /obj/item/taperoll/atmos, + /obj/item/clothing/gloves/insulated, + /obj/item/storage/backpack/satchel/eng, + /obj/item/device/radio) + +/obj/structure/closet/secure_closet/atmos_sierra + name = "atmospherics equipment locker" + req_access = list(access_atmospherics) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/engineering/atmos + +/obj/structure/closet/secure_closet/atmos_sierra/WillContain() + return list( + /obj/item/clothing/suit/fire/firefighter, + /obj/item/clothing/head/hardhat/red, + /obj/item/device/flashlight/upgraded, + /obj/item/rpd, + /obj/item/clothing/accessory/storage/brown_vest, + /obj/item/storage/belt/utility/full, + /obj/item/clothing/head/beret/engineering, + /obj/item/extinguisher, + /obj/item/device/radio/headset/headset_eng, + /obj/item/device/radio/headset/headset_eng/alt, + /obj/item/tank/oxygen_emergency_double, + /obj/item/clothing/mask/gas, + /obj/item/taperoll/atmos, + /obj/item/device/scanner/gas + ) + +/obj/structure/closet/secure_closet/infotech_sierra + name = "information technician locker" + req_access = list(access_network_admin) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/engineering/infotech + +/obj/structure/closet/secure_closet/infotech_sierra/WillContain() + return list( + /obj/item/storage/box/PDAs, + /obj/item/modular_computer/laptop/preset/custom_loadout/standard, + /obj/item/modular_computer/tablet/preset/custom_loadout/standard, + /obj/item/clothing/glasses/hud/it, + /obj/item/device/multitool, + /obj/item/clothing/gloves/insulated, + /obj/item/device/flashlight/upgraded, + /obj/item/storage/belt, + /obj/item/clothing/head/beret/engineering, + /obj/item/device/radio/headset/headset_eng, + /obj/item/device/radio/headset/headset_eng/alt, + /obj/item/stack/cable_coil = 2 + ) diff --git a/maps/sierra/structures/closets/exploration.dm b/maps/sierra/structures/closets/exploration.dm new file mode 100644 index 0000000000000..5b8ed350ca06c --- /dev/null +++ b/maps/sierra/structures/closets/exploration.dm @@ -0,0 +1,149 @@ +/* + * Sierra Exploration + */ + +/obj/structure/closet/secure_closet/el + name = "exploration leader's locker" + req_access = list(access_el) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/exploration/leader + +/obj/structure/closet/secure_closet/el/WillContain() + return list( + /obj/item/device/radio, + /obj/item/device/tape/random, + /obj/item/device/gps, + /obj/item/pinpointer/radio, + /obj/item/taperoll/research, + /obj/item/material/hatchet/machete/deluxe, + /obj/item/storage/belt/holster/machete, + /obj/item/shuttle_beacon, + /obj/item/clothing/accessory/storage/webbing_large, + /obj/item/device/taperecorder, + /obj/item/device/scanner/gas, + /obj/item/device/flash, + /obj/item/device/radio/headset/exploration_leader, + /obj/item/device/radio/headset/exploration_leader/alt, + /obj/item/storage/box/encryptionkey/exploration, + /obj/item/device/binoculars, + /obj/item/clothing/under/rank/field, + /obj/item/clothing/under/rank/field/tan, + /obj/item/clothing/under/rank/field/navy, + /obj/item/clothing/under/rank/field/green, + /obj/item/crowbar/prybar, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack, /obj/item/storage/backpack/satchel/grey)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag, /obj/item/storage/backpack/messenger)), + new /datum/atom_creator/weighted(list(/obj/item/device/flashlight/upgraded, /obj/item/device/flashlight/flare, /obj/item/device/flashlight/flare/glowstick/random)) + ) + +/obj/structure/closet/secure_closet/explorer + name = "explorer's locker" + req_access = list(access_explorer) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/exploration + +/obj/structure/closet/secure_closet/explorer/WillContain() + return list( + /obj/item/device/radio, + /obj/item/device/gps, + /obj/item/taperoll/research, + /obj/item/storage/belt/holster/machete, + /obj/item/shuttle_beacon, + /obj/item/clothing/accessory/storage/webbing_large, + /obj/item/device/scanner/gas, + /obj/item/device/radio/headset/exploration, + /obj/item/device/radio/headset/exploration/alt, + /obj/item/device/binoculars, + /obj/item/crowbar/prybar, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack, /obj/item/storage/backpack/satchel/grey)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag, /obj/item/storage/backpack/messenger)), + new /datum/atom_creator/weighted(list(/obj/item/device/flashlight, /obj/item/device/flashlight/flare, /obj/item/device/flashlight/flare/glowstick/random)) + ) + +/obj/structure/closet/secure_closet/explorer/pilot + name = "expeditionary pilot's locker" + req_access = list(access_explorer, list(access_el, access_expedition_shuttle_helm)) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/exploration/pilot + +/obj/structure/closet/secure_closet/explorer/pilot/WillContain() + return list( + /obj/item/device/radio, + /obj/item/device/gps, + /obj/item/storage/belt/utility/full, + /obj/item/shuttle_beacon, + /obj/item/clothing/accessory/storage/holster/machete, + /obj/item/clothing/accessory/storage/webbing_large, + /obj/item/device/scanner/gas, + /obj/item/device/radio/headset/headset_pilot/alt, + /obj/item/device/binoculars, + /obj/item/clothing/gloves/thick, + /obj/item/clothing/suit/storage/toggle/track, + /obj/item/clothing/head/helmet/nt/pilot, + /obj/item/crowbar/prybar, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack, /obj/item/storage/backpack/satchel/grey)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag, /obj/item/storage/backpack/messenger)), + new /datum/atom_creator/weighted(list(/obj/item/device/flashlight, /obj/item/device/flashlight/flare, /obj/item/device/flashlight/flare/glowstick/random)) + ) + +/obj/structure/closet/secure_closet/explorer/medic + name = "field medic's locker" + req_access = list(access_explorer, list(access_el, access_field_med)) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/exploration/med + +/obj/structure/closet/secure_closet/explorer/medic/WillContain() + return list( + /obj/item/device/radio, + /obj/item/device/gps, + /obj/item/storage/belt/medical/emt, + /obj/item/shuttle_beacon, + /obj/item/clothing/accessory/storage/holster/machete, + /obj/item/clothing/accessory/storage/webbing_large, + /obj/item/device/scanner/gas, + /obj/item/device/scanner/health, + /obj/item/storage/firstaid/adv, + /obj/item/device/radio/headset/exploration, + /obj/item/device/radio/headset/exploration/alt, + /obj/item/device/binoculars, + /obj/item/clothing/gloves/thick, + /obj/item/crowbar/prybar, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack, /obj/item/storage/backpack/satchel/grey)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag, /obj/item/storage/backpack/messenger)), + new /datum/atom_creator/weighted(list(/obj/item/device/flashlight, /obj/item/device/flashlight/flare, /obj/item/device/flashlight/flare/glowstick/random)) + ) + +/obj/structure/closet/secure_closet/explorer/engineer + name = "field engineer's locker" + req_access = list(access_explorer, list(access_el, access_field_eng)) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/exploration/eng + +/obj/structure/closet/secure_closet/explorer/engineer/WillContain() + return list( + /obj/item/device/radio, + /obj/item/device/gps, + /obj/item/storage/belt/utility/full, + /obj/item/device/multitool, + /obj/item/shuttle_beacon, + /obj/item/clothing/accessory/storage/holster/machete, + /obj/item/clothing/accessory/storage/webbing_large, + /obj/item/device/scanner/gas, + /obj/item/device/robotanalyzer, + /obj/item/device/flashlight/upgraded, + /obj/item/device/radio/headset/exploration, + /obj/item/device/radio/headset/exploration/alt, + /obj/item/device/binoculars, + /obj/item/clothing/gloves/thick, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack, /obj/item/storage/backpack/satchel/grey)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag, /obj/item/storage/backpack/messenger)), + new /datum/atom_creator/weighted(list(/obj/item/device/flashlight, /obj/item/device/flashlight/flare, /obj/item/device/flashlight/flare/glowstick/random)) + ) + +/obj/structure/closet/wardrobe/exploration + name = "exploration wardrobe" + desc = "It's a storage unit for standard-issue attire." + closet_appearance = /singleton/closet_appearance/wardrobe/pink + +/obj/structure/closet/wardrobe/exploration/WillContain() + return list( + /obj/item/clothing/under/rank/field = 6, + /obj/item/clothing/under/rank/field/tan = 6, + /obj/item/clothing/under/rank/field/navy = 6, + /obj/item/clothing/under/rank/field/green = 6 + ) diff --git a/maps/sierra/structures/closets/medical.dm b/maps/sierra/structures/closets/medical.dm new file mode 100644 index 0000000000000..e8c77a4d8d6ab --- /dev/null +++ b/maps/sierra/structures/closets/medical.dm @@ -0,0 +1,105 @@ +/* + * Sierra Medical + */ +/obj/structure/closet/secure_closet/personal/patient + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/patients + +/obj/structure/closet/secure_closet/CMO_sierra + name = "chief medical officer's locker" + req_access = list(access_cmo) + closet_appearance = /singleton/closet_appearance/secure_closet/cmo + +/obj/structure/closet/secure_closet/CMO_sierra/WillContain() + return list( + /obj/item/clothing/suit/bio_suit/cmo, + /obj/item/clothing/head/bio_hood/cmo, + /obj/item/clothing/suit/storage/toggle/labcoat/cmo, + /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt, + /obj/item/device/radio/headset/heads/cmo, + /obj/item/device/radio/headset/heads/cmo/alt, + /obj/item/device/flash, + /obj/item/device/scanner/health, + /obj/item/clothing/suit/armor/pcarrier/light, + /obj/item/device/megaphone, + /obj/item/reagent_containers/hypospray/vial, + /obj/item/device/flashlight/pen, + /obj/item/storage/belt/medical, + /obj/item/device/remote_device/chief_medical_officer, + /obj/item/device/taperecorder, + /obj/item/device/tape/random = 3, + /obj/item/clothing/glasses/hud/health, + /obj/item/storage/firstaid/adv, + /obj/item/clothing/accessory/stethoscope, + /obj/item/storage/fancy/vials, + ) + +/obj/structure/closet/secure_closet/medical_sierrasenior + name = "surgeon's locker" + req_access = list(access_senmed) + closet_appearance = /singleton/closet_appearance/secure_closet/medical/alt + + +/obj/structure/closet/secure_closet/medical_sierrasenior/WillContain() + return list( + /obj/item/clothing/suit/surgicalapron, + /obj/item/clothing/accessory/storage/white_vest, + /obj/item/device/radio/headset/headset_med, + /obj/item/device/radio/headset/headset_med/alt, + /obj/item/storage/belt/medical, + /obj/item/device/flashlight/pen, + /obj/item/device/scanner/health, + /obj/item/clothing/accessory/stethoscope, + /obj/item/clothing/glasses/hud/health, + /obj/item/storage/firstaid/adv, + ) + +/obj/structure/closet/secure_closet/medical_sierra + name = "doctor's locker" + req_access = list(access_medical_equip) + closet_appearance = /singleton/closet_appearance/secure_closet/medical + +/obj/structure/closet/secure_closet/medical_sierra/WillContain() + return list( + /obj/item/clothing/accessory/storage/white_vest, + /obj/item/device/radio/headset/headset_med, + /obj/item/device/radio/headset/headset_med/alt, + /obj/item/storage/belt/medical, + /obj/item/taperoll/medical, + /obj/item/device/flashlight/pen, + /obj/item/storage/box/autoinjectors, + /obj/item/device/scanner/health, + /obj/item/clothing/accessory/stethoscope, + /obj/item/clothing/glasses/hud/health, + /obj/item/storage/firstaid/adv, + ) + +/obj/structure/closet/wardrobe/medic_sierra + name = "medical wardrobe" + closet_appearance = /singleton/closet_appearance/wardrobe/sierra/medical + +/obj/structure/closet/wardrobe/medic_sierra/WillContain() + return list( + /obj/item/clothing/shoes/white = 2, + /obj/item/clothing/suit/storage/toggle/labcoat = 2, + /obj/item/clothing/under/sterile = 2, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/medic, /obj/item/storage/backpack/satchel/med)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag/med, /obj/item/storage/backpack/messenger/med)) + ) + +/obj/structure/closet/secure_closet/chemical_sierra + name = "chemical closet" + desc = "Store dangerous chemicals in here." + req_access = list(access_chemistry) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/medical/chemistry + +/obj/structure/closet/secure_closet/chemical_sierra/WillContain() + return list( + /obj/item/storage/box/pillbottles = 2, + /obj/item/device/radio/headset/headset_med, + /obj/item/storage/box/freezer, + /obj/item/storage/box/syringes, + /obj/item/storage/box/beakers, + /obj/item/storage/box/beakers/insulated, + /obj/item/reagent_containers/glass/beaker/large, + /obj/item/reagent_containers/glass/beaker/insulated/large + ) diff --git a/maps/sierra/structures/closets/misc.dm b/maps/sierra/structures/closets/misc.dm new file mode 100644 index 0000000000000..94699e32c2cd1 --- /dev/null +++ b/maps/sierra/structures/closets/misc.dm @@ -0,0 +1,62 @@ +/* + * Sierra Misc + */ + +/obj/structure/closet/secure_closet/iaa + name = "\improper Internal Affairs Agent's locker" + req_access = list(access_iaa) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/corporate/iaa + +/obj/structure/closet/secure_closet/iaa/WillContain() + return list( + /obj/item/device/flash, + /obj/item/hand_labeler, + /obj/item/device/camera, + /obj/item/device/camera_film = 2, + /obj/item/material/clipboard, + /obj/item/device/taperecorder, + /obj/item/device/tape/random = 3, + /obj/item/gun/energy/gun/small/secure, + /obj/item/storage/secure/briefcase, + /obj/item/clothing/shoes/laceup, + /obj/item/storage/belt/holster/general, + /obj/item/clothing/under/rank/internalaffairs, + /obj/item/clothing/suit/storage/toggle/suit/black, + /obj/item/clothing/glasses/sunglasses/big, + /obj/item/clothing/suit/armor/pcarrier/light, + /obj/item/device/radio/headset/heads, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack, /obj/item/storage/backpack/satchel)), + new /datum/atom_creator/simple(/obj/item/storage/backpack/messenger, 50), + /obj/item/storage/fakebook + ) + +//equipment closets that everyone on the crew or in research can access, for storing things securely + +/obj/structure/closet/secure_closet/crew + name = "crew equipment locker" + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/crew + +/obj/structure/closet/secure_closet/crew/WillContain() + return list( + /obj/item/device/radio, + /obj/item/crowbar, + /obj/item/device/flashlight, + /obj/item/storage/box + ) + +/obj/structure/closet/secure_closet/crew/research + name = "research equipment locker" + closet_appearance = /singleton/closet_appearance/wardrobe/sierra/research + +/obj/structure/closet/white_sierra + closet_appearance = /singleton/closet_appearance/wardrobe/white + +/obj/structure/closet/secure_closet/white_sierra + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/evidence + +/obj/structure/closet/secure_closet/medical2 + closet_appearance = /singleton/closet_appearance/secure_closet/medical + +/obj/structure/closet/crate/present + name = "present crate" + desc = "Wow, a present!" diff --git a/maps/sierra/structures/closets/research.dm b/maps/sierra/structures/closets/research.dm new file mode 100644 index 0000000000000..687ace24a1ccd --- /dev/null +++ b/maps/sierra/structures/closets/research.dm @@ -0,0 +1,88 @@ +/* + * Sierra Science + */ + +/obj/structure/closet/secure_closet/RD_sierra + name = "research director's locker" + req_access = list(access_rd) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/science/rd + +/obj/structure/closet/secure_closet/RD_sierra/WillContain() + return list( + /obj/item/clothing/suit/bio_suit/scientist, + /obj/item/clothing/head/bio_hood/scientist, + /obj/item/clothing/under/suit_jacket/corp/nanotrasen, + /obj/item/clothing/suit/storage/toggle/labcoat/science/nanotrasen, + /obj/item/clothing/suit/storage/toggle/labcoat/rd/nanotrasen, + /obj/item/clothing/gloves/latex, + /obj/item/clothing/glasses/science, + /obj/item/device/radio/headset/heads/rd, + /obj/item/tank/oxygen_emergency_extended, + /obj/item/clothing/mask/gas, + /obj/item/device/flash, + /obj/item/device/megaphone, + /obj/item/storage/belt/general, + /obj/item/device/remote_device/research_director, + /obj/item/folder, + /obj/item/clothing/suit/armor/pcarrier/light, + /obj/item/device/taperecorder, + /obj/item/device/tape/random = 3, + /obj/item/device/camera, + /obj/item/taperoll/research, + /obj/item/clothing/glasses/welding/superior, + /obj/item/storage/box/secret_project_disks/science, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/toxins, /obj/item/storage/backpack/satchel/tox)), + new /datum/atom_creator/simple(/obj/item/storage/backpack/messenger/tox, 50) + ) + +/obj/structure/closet/secure_closet/xenoarchaeologist_sierra + name = "xenoarchaeologist's locker" + req_access = list(access_xenoarch) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/science/xenobot + +/obj/structure/closet/secure_closet/xenoarchaeologist_sierra/WillContain() + return list( + /obj/item/clothing/suit/storage/toggle/labcoat/science/nanotrasen, + /obj/item/device/radio/headset/headset_sci, + /obj/item/clothing/mask/gas, + /obj/item/material/clipboard, + /obj/item/folder, + /obj/item/device/taperecorder, + /obj/item/device/tape/random = 3, + /obj/item/device/camera, + /obj/item/device/scanner/gas, + /obj/item/storage/belt/general, + /obj/item/taperoll/research, + /obj/item/clothing/gloves/latex, + /obj/item/clothing/glasses/science, + /obj/item/clothing/glasses/meson, + /obj/item/device/radio, + /obj/item/device/flashlight/lantern, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/toxins, /obj/item/storage/backpack/satchel/tox)), + new /datum/atom_creator/simple(/obj/item/storage/backpack/dufflebag, 50) + ) + +/obj/structure/closet/secure_closet/scientist_sierra + name = "researcher's locker" + req_access = list(access_research) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/science + +/obj/structure/closet/secure_closet/scientist_sierra/WillContain() + return list( + /obj/item/clothing/suit/storage/toggle/labcoat/science/nanotrasen, + /obj/item/device/radio/headset/headset_sci, + /obj/item/clothing/mask/gas/half, + /obj/item/tank/oxygen_emergency_extended, + /obj/item/material/clipboard, + /obj/item/folder, + /obj/item/device/taperecorder, + /obj/item/storage/belt/general, + /obj/item/device/tape/random = 3, + /obj/item/device/camera, + /obj/item/device/scanner/gas, + /obj/item/taperoll/research, + /obj/item/clothing/gloves/latex, + /obj/item/clothing/glasses/science, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/toxins, /obj/item/storage/backpack/satchel/tox)), + new /datum/atom_creator/simple(/obj/item/storage/backpack/messenger/tox, 50) + ) diff --git a/maps/sierra/structures/closets/security.dm b/maps/sierra/structures/closets/security.dm new file mode 100644 index 0000000000000..5006f04f7efd2 --- /dev/null +++ b/maps/sierra/structures/closets/security.dm @@ -0,0 +1,215 @@ +/* + * Sierra Security +*/ +/obj/structure/closet/secure_closet/hos/sierra + name = "head of security's cabinet" + req_access = list(access_hos) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/security/hos + +/obj/structure/closet/secure_closet/hos/sierra/WillContain() + return list( + /obj/item/clothing/suit/armor/pcarrier/medium/nt, + /obj/item/clothing/suit/storage/hoscoat, + /obj/item/clothing/suit/armor/hos, + /obj/item/clothing/head/helmet/nt, + /obj/item/clothing/head/HoS/dermal, + /obj/item/device/radio/headset/heads/hos, + /obj/item/device/radio/headset/heads/hos/alt, + /obj/item/clothing/glasses/hud/security/prot/aviators, + /obj/item/taperoll/police, + /obj/item/handcuffs, + /obj/item/storage/belt/holster/security, + /obj/item/device/flash, + /obj/item/device/megaphone, + /obj/item/melee/baton/loaded, + /obj/item/gun/projectile/pistol/sec, + /obj/item/ammo_magazine/pistol/rubber, + /obj/item/ammo_magazine/pistol, + /obj/item/melee/telebaton, + /obj/item/device/taperecorder, + /obj/item/reagent_containers/spray/pepper, + /obj/item/clothing/accessory/storage/black_vest, + /obj/item/device/remote_device/head_of_security, + /obj/item/device/hailer, + /obj/item/device/holowarrant, + /obj/item/clothing/gloves/thick, + /obj/item/device/flashlight/maglight, + /obj/item/crowbar/prybar, + /obj/item/device/radio/off, + /obj/item/clothing/mask/gas/half, + /obj/item/storage/firstaid/security + ) + +/obj/structure/closet/secure_closet/warden/sierra + name = "warden's locker" + req_access = list(access_warden) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/security/warden + +/obj/structure/closet/secure_closet/warden/sierra/WillContain() + return list( + /obj/item/clothing/suit/armor/pcarrier/medium/nt, + /obj/item/clothing/head/helmet/nt, + /obj/item/clothing/head/beret/sec/corporate/warden, + /obj/item/clothing/head/beret/sec/navy/warden, + /obj/item/clothing/under/rank/warden/corp/alt, + /obj/item/clothing/under/rank/warden/navyblue, + /obj/item/clothing/under/rank/warden/navyblue/alt, + /obj/item/device/radio/headset/headset_sec, + /obj/item/device/radio/headset/headset_sec/alt, + /obj/item/clothing/glasses/hud/security/prot/aviators, + /obj/item/taperoll/police, + /obj/item/storage/belt/holster/security, + /obj/item/reagent_containers/spray/pepper, + /obj/item/melee/baton/loaded, + /obj/item/gun/projectile/pistol/sec, + /obj/item/ammo_magazine/pistol/rubber, + /obj/item/ammo_magazine/pistol, + /obj/item/clothing/accessory/storage/black_vest, + /obj/item/gun/energy/taser, + /obj/item/handcuffs, + /obj/item/device/hailer, + /obj/item/device/flash, + /obj/item/device/megaphone, + /obj/item/hand_labeler, + /obj/item/device/holowarrant, + /obj/item/clothing/gloves/thick, + /obj/item/device/flashlight/maglight, + /obj/item/crowbar/prybar, + /obj/item/device/radio/off, + /obj/item/clothing/mask/gas/half, + /obj/item/storage/firstaid/security + ) + +/obj/structure/closet/secure_closet/cabinet/forensics + name = "forensics technician's locker" + req_access = list(access_forensics_lockers) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/security/forensics + + +/obj/structure/closet/secure_closet/cabinet/forensics/WillContain() + return list( + /obj/item/clothing/gloves/forensic, + /obj/item/clothing/head/helmet/nt, + /obj/item/clothing/glasses/hud/security/prot/aviators, + /obj/item/storage/belt/holster/forensic, + /obj/item/storage/belt/security, + /obj/item/device/radio/headset/headset_sec, + /obj/item/device/radio/headset/headset_sec/alt, + /obj/item/clothing/suit/armor/pcarrier/medium/nt, + /obj/item/gun/projectile/pistol/sec, + /obj/item/ammo_magazine/pistol/rubber, + /obj/item/device/flash, + /obj/item/melee/baton/loaded, + /obj/item/reagent_containers/spray/pepper, + /obj/item/taperoll/police, + /obj/item/storage/box/evidence, + /obj/item/storage/box/swabs, + /obj/item/storage/box/latexgloves, + /obj/item/device/taperecorder, + /obj/item/device/tape/random = 3, + /obj/item/device/holowarrant, + /obj/item/device/flashlight/maglight, + /obj/item/crowbar/prybar, + /obj/item/device/radio/off, + /obj/item/clothing/mask/gas/half, + /obj/item/storage/firstaid/security + ) + +/obj/structure/closet/secure_closet/security/sierra + name = "security guard's locker" + req_access = list(access_guard) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/security + +/obj/structure/closet/secure_closet/security/sierra/WillContain() + return list( + /obj/item/clothing/suit/armor/pcarrier/medium/nt, + /obj/item/clothing/head/helmet/nt, + /obj/item/device/radio/headset/headset_sec, + /obj/item/device/radio/headset/headset_sec/alt, + /obj/item/storage/belt/holster/security, + /obj/item/device/flash, + /obj/item/reagent_containers/spray/pepper, + /obj/item/grenade/chem_grenade/teargas, + /obj/item/melee/baton/loaded, + /obj/item/clothing/glasses/hud/security/prot/aviators, + /obj/item/taperoll/police, + /obj/item/device/hailer, + /obj/item/clothing/accessory/storage/black_vest, + /obj/item/gun/projectile/pistol/sec, + /obj/item/ammo_magazine/pistol/rubber, + /obj/item/ammo_magazine/pistol, + /obj/item/gun/energy/taser, + /obj/item/device/megaphone, + /obj/item/clothing/gloves/thick, + /obj/item/device/holowarrant, + /obj/item/device/flashlight/maglight, + /obj/item/crowbar/prybar, + /obj/item/device/radio/off, + /obj/item/clothing/mask/gas/half, + /obj/item/storage/firstaid/security + ) + +/obj/structure/closet/secure_closet/security/sierra/cadet + name = "cadet's locker" + req_access = list(access_security) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/security + +/obj/structure/closet/secure_closet/security/sierra/cadet/WillContain() + return list( + /obj/item/device/flash, + /obj/item/device/radio/off, + /obj/item/device/flashlight/maglight, + /obj/item/device/holowarrant, + /obj/item/device/hailer, + /obj/item/device/radio/headset/headset_sec, + /obj/item/device/radio/headset/headset_sec/alt, + /obj/item/taperoll/police, + /obj/item/storage/belt/holster/security, + /obj/item/reagent_containers/spray/pepper, + /obj/item/crowbar/prybar, + /obj/item/gun/energy/confuseray/secure, + /obj/item/clothing/glasses/hud/security + ) + +/obj/structure/closet/secure_closet/security/sierra/science + name = "research guard locker" + req_access = list(access_security) + closet_appearance = /singleton/closet_appearance/secure_closet/security + +/obj/structure/closet/secure_closet/security/sierra/science/WillContain() + return list( + new/datum/atom_creator/weighted(list(/obj/item/storage/backpack, /obj/item/storage/backpack/satchel)), + new/datum/atom_creator/simple(/obj/item/storage/backpack/dufflebag, 50), + /obj/item/clothing/suit/armor/vest/blueshift, + /obj/item/clothing/head/helmet/nt/blueshift, + /obj/item/device/radio/headset/headset_sec, + /obj/item/storage/belt/holster/security, + /obj/item/device/flash, + /obj/item/reagent_containers/spray/pepper, + /obj/item/grenade/chem_grenade/teargas, + /obj/item/melee/baton/loaded, + /obj/item/clothing/glasses/hud/security/prot/sunglasses, + /obj/item/taperoll/police, + /obj/item/device/hailer, + /obj/item/clothing/accessory/storage/black_vest, + /obj/item/clothing/under/blueshift_uniform, + /obj/item/gun/energy/taser, + /obj/item/device/holowarrant, + ) + +/obj/structure/closet/secure_closet/security/sierra/science/WillContain() + return MERGE_ASSOCS_WITH_NUM_VALUES(..(), list(/obj/item/device/encryptionkey/headset_sci)) + +/obj/structure/closet/secure_closet/brig/WillContain() + return list( + /obj/item/clothing/under/color/orange, + /obj/item/clothing/shoes/orange, + /obj/item/modular_computer/pda, + /obj/item/device/radio/headset + ) + +/obj/structure/closet/wardrobe/orange/New() + ..() + new /obj/item/modular_computer/pda(src) + new /obj/item/modular_computer/pda(src) + new /obj/item/modular_computer/pda(src) diff --git a/maps/sierra/structures/closets/services.dm b/maps/sierra/structures/closets/services.dm new file mode 100644 index 0000000000000..5bebebb899406 --- /dev/null +++ b/maps/sierra/structures/closets/services.dm @@ -0,0 +1,153 @@ +/* + * Sierra Service + */ + + +/obj/structure/closet/chefcloset_sierra + name = "chef's closet" + desc = "It's a storage unit for foodservice equipment." + closet_appearance = /singleton/closet_appearance/wardrobe/sierra/chef + +/obj/structure/closet/chefcloset_sierra/WillContain() + return list( + /obj/item/clothing/head/soft/mime, + /obj/item/device/radio/headset/headset_service, + /obj/item/storage/box/mousetraps = 2, + /obj/item/clothing/under/rank/chef, + /obj/item/clothing/gloves/latex, + /obj/item/reagent_containers/spray/cleaner, + /obj/item/clothing/head/chefhat, + /obj/item/clothing/suit/chef/classic, + /obj/item/clothing/mask/surgical, + /obj/item/clothing/head/beret/infinity + ) + +/obj/structure/closet/secure_closet/hydroponics_sierra //done so that it has no access reqs + name = "hydroponics locker" + req_access = list() + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/hydroponics + +/obj/structure/closet/secure_closet/hydroponics_sierra/WillContain() + return list( + /obj/item/clothing/head/soft/green, + /obj/item/storage/plants, + /obj/item/device/scanner/plant, + /obj/item/material/minihoe, + /obj/item/clothing/gloves/thick/botany, + /obj/item/material/hatchet, + /obj/item/wirecutters/clippers, + /obj/item/reagent_containers/spray/plantbgone, + new /datum/atom_creator/weighted(list(/obj/item/clothing/suit/apron, /obj/item/clothing/suit/apron/overalls)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/hydroponics, /obj/item/storage/backpack/satchel/hyd)), + new /datum/atom_creator/simple(/obj/item/storage/backpack/messenger/hyd, 50) + ) + +/obj/structure/closet/jcloset/sierra + name = "custodial closet" + desc = "It's a storage unit for janitorial equipment." + closet_appearance = /singleton/closet_appearance/wardrobe/sierra/janitor + +/obj/structure/closet/jcloset/sierra/WillContain() + return list( + /obj/item/clothing/head/beret/purple, + /obj/item/clothing/head/soft/purple, + /obj/item/clothing/under/rank/janitor, + /obj/item/clothing/head/soft/darkred, + /obj/item/device/radio/headset/headset_service, + /obj/item/clothing/gloves/thick, + /obj/item/device/flashlight/upgraded, + /obj/item/caution = 4, + /obj/item/device/lightreplacer, + /obj/item/storage/bag/trash, + /obj/item/clothing/shoes/dutyboots, + /obj/item/grenade/chem_grenade/cleaner = 2, + /obj/item/reagent_containers/spray/cleaner, + /obj/item/clothing/shoes/galoshes, + /obj/item/storage/box/detergent, + /obj/item/holosign_creator, + /obj/item/clothing/glasses/hud/janitor, + /obj/item/storage/belt/janitor, + /obj/item/clothing/mask/plunger, + /obj/item/soap, + /obj/item/clothing/head/beret/infinity + ) + +/obj/structure/closet/secure_closet/bar_sierra + name = "bar locker" + desc = "It's a storage unit for bar equipment." + req_access = list(access_bar) + closet_appearance = /singleton/closet_appearance/cabinet/secure + anchored = TRUE + //open_sound = 'sound/machines/wooden_closet_open.ogg' + //close_sound = 'sound/machines/wooden_closet_close.ogg' + + +/obj/structure/closet/secure_closet/bar_sierra/WillContain() + return list( + /obj/item/clothing/head/soft/black, + /obj/item/device/radio/headset/headset_service, + /obj/item/reagent_containers/food/drinks/shaker, + /obj/item/reagent_containers/glass/rag, + /obj/item/glass_jar, + /obj/item/book/manual/barman_recipes, + /obj/item/storage/box/ammo/beanbags, + /obj/item/clothing/under/rank/bartender, + /obj/item/clothing/gloves/thick, + /obj/item/clothing/gloves/white, + /obj/item/storage/box/lights/bulbs/bar, + /obj/item/clothing/shoes/laceup, + /obj/item/storage/pill_bottle/dylovene, + /obj/item/reagent_containers/spray/cleaner, + /obj/item/paper/sierra/bar_permit, + /obj/item/gun/projectile/shotgun/doublebarrel, + /obj/item/clothing/head/beret/infinity + ) + +/obj/structure/closet/secure_closet/chaplain_sierra + name = "chaplain's locker" + closet_appearance = /singleton/closet_appearance/secure_closet/chaplain + req_access = list(access_chapel_office) + +/obj/structure/closet/secure_closet/chaplain_sierra/WillContain() + return list( + /obj/item/clothing/under/rank/chaplain, + /obj/item/clothing/shoes/black, + /obj/item/clothing/suit/chaplain_hoodie, + /obj/item/storage/candle_box = 3, + /obj/item/deck/tarot, + /obj/item/reagent_containers/food/drinks/bottle/holywater, + /obj/item/nullrod, + /obj/item/storage/bible, + /obj/item/storage/belt/general, + /obj/item/material/urn, + /obj/item/device/taperecorder + ) + +/obj/structure/closet/secure_closet/chief_steward_sierra + name = "chief steward's locker" + req_access = list(access_chief_steward) + closet_appearance = /singleton/closet_appearance/cabinet/secure + +/obj/structure/closet/secure_closet/chief_steward_sierra/WillContain() + return list( + /obj/item/storage/belt/general, + /obj/item/clothing/head/chefhat, + /obj/item/clothing/suit/chef/classic, + /obj/item/clothing/suit/chef, + /obj/item/clothing/gloves/latex, + /obj/item/reagent_containers/glass/rag, + /obj/item/clothing/glasses/science, + /obj/item/storage/box/glasses, + /obj/item/storage/plants, + /obj/item/device/scanner/plant, + /obj/item/clothing/accessory/armband/hydro, + /obj/item/reagent_containers/spray/cleaner, + /obj/item/device/megaphone, + /obj/item/device/flashlight/upgraded, + /obj/item/device/taperecorder, + /obj/item/device/tape/random = 3, + /obj/item/device/camera, + /obj/item/device/camera_film = 2, + /obj/item/device/radio/headset/sierra_chief_steward, + /obj/item/device/radio/headset/sierra_chief_steward/alt, + ) diff --git a/maps/sierra/structures/closets/supply.dm b/maps/sierra/structures/closets/supply.dm new file mode 100644 index 0000000000000..d2c59ae30799f --- /dev/null +++ b/maps/sierra/structures/closets/supply.dm @@ -0,0 +1,77 @@ +/* + * Sierra Supply + */ + +/obj/structure/closet/secure_closet/decktech + name = "cargo technician's locker" + req_access = list(access_cargo) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/cargo/decktech + +/obj/structure/closet/secure_closet/decktech/WillContain() + return list( + /obj/item/device/radio/headset/headset_cargo, + /obj/item/device/radio/headset/headset_cargo/alt, + /obj/item/clothing/gloves/thick, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/accessory/storage/webbing_large, + /obj/item/storage/belt/utility/atmostech, + /obj/item/hand_labeler, + /obj/item/material/clipboard, + /obj/item/folder/yellow, + /obj/item/stack/package_wrap/cargo_wrap, + /obj/item/marshalling_wand, + /obj/item/marshalling_wand, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack = 75, /obj/item/storage/backpack/satchel/grey = 25)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/messenger = 75, /obj/item/storage/backpack/dufflebag = 25)) + ) + +/obj/structure/closet/secure_closet/quartermaster_sierra + name = "quartermaster's locker" + req_access = list(access_qm) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/cargo/quartmaster + +/obj/structure/closet/secure_closet/quartermaster_sierra/WillContain() + return list( + /obj/item/device/radio/headset/sierra_quartermaster, + /obj/item/device/radio/headset/sierra_quartermaster/alt, + /obj/item/clothing/gloves/thick, + /obj/item/clothing/glasses/meson, + /obj/item/clothing/glasses/sunglasses, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/accessory/storage/brown_vest, + /obj/item/storage/belt/utility/full, + /obj/item/hand_labeler, + /obj/item/material/clipboard, + /obj/item/folder/yellow, + /obj/item/stack/package_wrap/cargo_wrap, + /obj/item/device/flash, + /obj/item/device/remote_device/quartermaster, + /obj/item/device/megaphone, + /obj/item/clothing/suit/armor/pcarrier/light, + /obj/item/device/binoculars, + /obj/item/device/scanner/price, + ) + +/obj/structure/closet/secure_closet/prospector + name = "prospector's locker" + req_access = list(access_mining) + closet_appearance = /singleton/closet_appearance/secure_closet/sierra/cargo/prospector + +/obj/structure/closet/secure_closet/prospector/WillContain() + return list( + /obj/item/clothing/accessory/storage/webbing, + /obj/item/clothing/gloves/thick, + /obj/item/clothing/shoes/workboots, + /obj/item/device/scanner/gas, + /obj/item/storage/ore, + /obj/item/device/radio/headset/headset_mining, + /obj/item/device/radio/headset/headset_mining/alt, + /obj/item/device/flashlight/lantern, + /obj/item/shovel, + /obj/item/pickaxe, + /obj/item/crowbar, + /obj/item/clothing/glasses/material, + /obj/item/clothing/glasses/meson, + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/industrial, /obj/item/storage/backpack/satchel/eng)), + new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag/eng, /obj/item/storage/backpack/messenger/engi)) + ) diff --git a/maps/sierra/structures/memorial/levitation_sound.ogg b/maps/sierra/structures/memorial/levitation_sound.ogg new file mode 100644 index 0000000000000..c50f52fe46ef5 Binary files /dev/null and b/maps/sierra/structures/memorial/levitation_sound.ogg differ diff --git a/maps/sierra/structures/memorial/sierra_memorial.dmi b/maps/sierra/structures/memorial/sierra_memorial.dmi new file mode 100644 index 0000000000000..10cff4a8c5478 Binary files /dev/null and b/maps/sierra/structures/memorial/sierra_memorial.dmi differ diff --git a/maps/sierra/structures/other.dm b/maps/sierra/structures/other.dm new file mode 100644 index 0000000000000..57e51ab958adc --- /dev/null +++ b/maps/sierra/structures/other.dm @@ -0,0 +1,149 @@ +/obj/structure/bookcase/manuals/security + name = "Law Manuals bookcase" + +/obj/structure/bookcase/manuals/security/New() + ..() + new /obj/item/book/manual/detective(src) + new /obj/item/book/manual/nt_regs(src) + new /obj/item/book/manual/solgov_law(src) + new /obj/item/book/manual/nt_sop(src) + new /obj/item/book/manual/nt_tc(src) + new /obj/item/book/manual/military_law(src) + update_icon() + +// Targets, the things that actually get shot! +/obj/item/target + name = "shooting target" + desc = "A shooting target." + icon = 'maps/sierra/icons/obj/target.dmi' + icon_state = "target_h" + density = FALSE + var/hp = 1800 + var/icon/virtualIcon + var/list/bulletholes = list() + +/obj/item/target/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + ClearOverlays() + bulletholes.Cut() + hp = initial(hp) + USE_FEEDBACK_REPAIR_FINISH(user) + +/obj/item/target/syndicate + icon_state = "target_s" + desc = "A shooting target that looks like a hostile agent." + hp = 2600 // i guess syndie targets are sturdier? + +/obj/item/target/alien + icon_state = "target_q" + desc = "A shooting target with a threatening silhouette." + hp = 2350 // alium onest too kinda + +#define PROJECTILE_TYPE_SCORCH 1 +#define PROJECTILE_TYPE_BULLET 2 +#define TARGET_RANDOM_OFFSET pick(0, 0, 0, 0, 0, -1, 1) + +/obj/item/target/bullet_act(obj/item/projectile/projectile) + var/p_x = projectile.p_x + TARGET_RANDOM_OFFSET + var/p_y = projectile.p_y + TARGET_RANDOM_OFFSET + + var/projectile_type = PROJECTILE_TYPE_SCORCH + if (istype(/obj/item/projectile/bullet, projectile)) + projectile_type = PROJECTILE_TYPE_BULLET + + virtualIcon = new(icon, icon_state) + + if (isnull(virtualIcon.GetPixel(p_x, p_y))) + return PROJECTILE_CONTINUE // The projectile goes through the target! + + hp -= projectile.damage + if (hp <= 0) + visible_message(SPAN_WARNING("\The [src] breaks into tiny pieces and collapses!")) + qdel(src) + return FALSE // The projectile stops + + // Create a temporary object to represent the damage + var/obj/bmark = new + bmark.pixel_x = p_x + bmark.pixel_y = p_y + bmark.icon = 'icons/effects/effects.dmi' + bmark.layer = ABOVE_OBJ_LAYER + + // Set bmark icon_state + if (projectile_type == PROJECTILE_TYPE_SCORCH) + // Energy weapons are hot. they scorch! + + // Offset correction + bmark.pixel_x-- + bmark.pixel_y-- + + if (projectile.damage >= 20 || istype(projectile, /obj/item/projectile/beam/practice)) + bmark.icon_state = "scorch" + bmark.set_dir(pick(NORTH, SOUTH, EAST, WEST)) // Random scorch design + else + bmark.icon_state = "light_scorch" + else + // Bullets are hard. They make dents! + bmark.icon_state = "dent" + + // Create bulletholes + if (projectile.damage >= 25) // Seriously, we commonly won't achive more than 35 holes. Because this things are beyond window. + + // Bullets make holes more commonly + if (projectile_type == PROJECTILE_TYPE_BULLET && prob(projectile.damage + 30)) + new/datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) + + // Lasers make holes less commonly + if (projectile_type == PROJECTILE_TYPE_SCORCH && prob(projectile.damage - 10)) + new/datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) + + // Draw bullet holes + for(var/datum/bullethole/bhole in bulletholes) + virtualIcon.DrawBox(null, bhole.b1x1, bhole.b1y, bhole.b1x2, bhole.b1y) // Horizontal line, left to right + virtualIcon.DrawBox(null, bhole.b2x, bhole.b2y1, bhole.b2x, bhole.b2y2) // Vertical line, top to bottom + + AddOverlays(bmark) // Add the decal + icon = virtualIcon // Apply bulletholes over decals + + return FALSE // The projectile stops + +#undef TARGET_RANDOM_OFFSET +#undef PROJECTILE_TYPE_BULLET +#undef PROJECTILE_TYPE_SCORCH + +#define BULLETHOLE_RANDOM_OFFSET pick(1, 1, 1, 1, 2, 2, 3, 3, 4) + +// Small memory holder entity for transparent bullet holes +/datum/bullethole + // First box + var/b1x1 = 0 + var/b1x2 = 0 + var/b1y = 0 + + // Second box + var/b2x = 0 + var/b2y1 = 0 + var/b2y2 = 0 + +/datum/bullethole/New(obj/item/target/owner, pixel_x = 0, pixel_y = 0) + if (!owner) return + + // Randomize the first box + b1x1 = pixel_x - BULLETHOLE_RANDOM_OFFSET + b1x2 = pixel_x + BULLETHOLE_RANDOM_OFFSET + b1y = pixel_y + if (prob(35)) + b1y += rand(-4, 4) + + // Randomize the second box + b2x = pixel_x + if (prob(35)) + b2x += rand(-4, 4) + b2y1 = pixel_y + BULLETHOLE_RANDOM_OFFSET + b2y2 = pixel_y - BULLETHOLE_RANDOM_OFFSET + + owner.bulletholes += src + +#undef BULLETHOLE_RANDOM_OFFSET diff --git a/maps/sierra/structures/signs.dm b/maps/sierra/structures/signs.dm new file mode 100644 index 0000000000000..ff2f86d431d5a --- /dev/null +++ b/maps/sierra/structures/signs.dm @@ -0,0 +1,85 @@ +/obj/structure/sign/dedicationplaque/sierra + name = "\improper NSV Sierra dedication plaque" + +/obj/structure/sign/dedicationplaque/sierra/Initialize() + . = ..() + desc = "N.S.V. Sierra - Modified Mako Class - Nanotrasen Registry 3525 - Blume Ship Yards, Earth - Fourth Vessel To Bear The Name - Launched [GLOB.using_map.game_year - 12] - Sol Central Government - 'Travels to the abyss always pays off.'" + + +/obj/structure/sign/memorial/sierra + name = "\improper NSV Sierra model" + icon = 'maps/sierra/structures/memorial/sierra_memorial.dmi' + icon_state = "sierra" + + layer = ABOVE_HUMAN_LAYER + + //description holder + var/description + + /// The token for the loop sound + var/levitation_sound + + /// list of sierra port developers + var/developers = "K.G. List, S.H. Eugene, L.D. Nest, J.X. Kand and A.T. Cuddle" + +/obj/structure/sign/memorial/sierra/Initialize() + . = ..() + + levitation_sound = GLOB.sound_player.PlayLoopingSound(src, "\ref[src]", 'maps/sierra/structures/memorial/levitation_sound.ogg', 25, 3) + + set_light(2, 0.8, COLOR_TEAL) + + desc = "You see a holographic sign that says: 'Model of N.S.V. Sierra - Modified Mako Class'" + description = {"
    N.S.V. Sierra - Modified Mako Class
    Nanotrasen Registry 3525 - Blume Ship Yards.

    Earth - Fourth Vessel To Bear The Name
    Launched [GLOB.using_map.game_year - 12] - Sol Central Government
    "Travels to the abyss always pays off"

    Special thanks to the engineers of section '#2179-INF'.

    Adjustment Engineers: [developers] for invaluable contributions to the development of the NSV Sierra.
    Next comes an extremely long list of names and job titles, as well as a photograph of the team of engineers responsible for building this ship.
    "} + + update_icon() + +/obj/structure/sign/memorial/sierra/on_update_icon() + . = ..() + AddOverlays(image(icon, "sierra-overlay")) + +/obj/structure/sign/memorial/sierra/update_emissive_blocker() + . = ..() + . += emissive_appearance(icon, "sierra-overlay") + +/obj/structure/sign/memorial/sierra/examine(mob/user) + . = ..() + . += SPAN_NOTICE("You see a holographic sign: Read Sign") + +/obj/structure/sign/memorial/sierra/CanUseTopic() + return STATUS_INTERACTIVE + +/obj/structure/sign/memorial/sierra/OnTopic(href, href_list) + if(href_list["show_info"]) + to_chat(usr, description) + return TOPIC_HANDLED + . = ..() + + +/obj/structure/sign/poster/annoyed_gas + icon_state = "annoyed_gas" + poster_type = /singleton/poster/annoyed_gas + +/obj/structure/sign/poster/healthy_hugs + icon_state = "healthy_hugs" + poster_type = /singleton/poster/healthy_hugs + +/obj/structure/sign/poster/no_alcohol + icon_state = "no_alcohol" + poster_type = /singleton/poster/no_alcohol + +/obj/structure/sign/poster/pizza_for_captain + icon_state = "pizza_for_captain" + poster_type = /singleton/poster/pizza_for_captain + +/obj/structure/sign/poster/would_you_plant + icon_state = "would_you_plant" + poster_type = /singleton/poster/would_you_plant + +/obj/structure/sign/poster/cabbage_tray + icon_state = "cabbage_tray" + poster_type = /singleton/poster/cabbage_tray + +/obj/structure/sign/poster/unusual_gas + icon_state = "unusual_gas" + poster_type = /singleton/poster/contraband_only/unusual_gas diff --git a/maps/sierra/z1-z5_sierra.dmm b/maps/sierra/z1-z5_sierra.dmm new file mode 100644 index 0000000000000..b2fe74db67d20 --- /dev/null +++ b/maps/sierra/z1-z5_sierra.dmm @@ -0,0 +1,365710 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aag" = ( +/obj/wallframe_spawn/reinforced_phoron/titanium, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell2) +"aap" = ( +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"aaq" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 8 + }, +/obj/machinery/computer/air_control{ + dir = 1; + input_tag = "co2_in"; + name = "Carbon Dioxide Supply Control"; + output_tag = "co2_out"; + sensor_name = "Tank"; + sensor_tag = "co2_sensor" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/corner/black{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"aau" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/xenoflora) +"aaB" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/sleeper{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/maintenance_equipstorage) +"aaG" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/port) +"aaI" = ( +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"aaJ" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod1/station) +"aaR" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/sign/warning/airlock{ + color = "#ff9900"; + name = "\improper WAY TO SPACE"; + pixel_y = 26 + }, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/spline/fancy/black{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/prison) +"aaU" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/light_switch{ + pixel_x = -10; + pixel_y = 28 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs) +"abj" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"abk" = ( +/obj/structure/handrail, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"abq" = ( +/obj/floor_decal/corner/darkblue/full, +/obj/floor_decal/corner/black/half{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"abs" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/holoplant, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"abt" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 8 + }, +/obj/machinery/vending/wallmed2{ + dir = 4; + pixel_x = -23 + }, +/obj/structure/table/standard, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"abu" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"aby" = ( +/obj/landmark/start{ + name = "AI" + }, +/obj/machinery/requests_console{ + department = "AI"; + departmentType = 5; + pixel_x = -32; + pixel_y = -32 + }, +/obj/machinery/newscaster/security_unit{ + pixel_x = 32; + pixel_y = -32 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the AI core maintenance door."; + id_tag = "AICore"; + name = "AI Core Shutter Control"; + pixel_x = 24; + pixel_y = 24 + }, +/obj/machinery/turretid/stun{ + check_synth = 1; + name = "AI Chamber turret control"; + pixel_x = -32; + pixel_y = 32; + control_area = list(/area/turret_protected/ai) + }, +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 1; + pixel_y = -22 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/item/device/radio/intercom/custom{ + pixel_y = 22 + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/greengrid, +/area/turret_protected/ai) +"abB" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"abI" = ( +/obj/floor_decal/corner/purple/three_quarters{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"abK" = ( +/obj/structure/sign/warning/radioactive{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/bombcloset, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"abM" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftstarboard) +"abP" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + target_pressure = 200 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/tele_beacon, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/turret_protected/ai_teleport) +"abW" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/floor_decal/carpet/blue, +/obj/floor_decal/carpet/blue{ + dir = 10 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/item/folder/nt, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"ace" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"acf" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/heads/captain/secret_room/level_one) +"act" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"acw" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"acE" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "nuke_shuttle_dock_airlock_pump" + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"acJ" = ( +/obj/structure/table/standard, +/obj/machinery/cell_charger, +/obj/item/cell/high, +/obj/item/cell/high, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/assembly/robotics) +"acN" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/recharger, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"acO" = ( +/obj/machinery/power/smes/buildable/preset/sierra/shuttle{ + RCon_tag = "Shuttle - Guppy" + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/light/small, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/guppy_hangar/start) +"acP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"acR" = ( +/obj/floor_decal/techfloor/orange{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/greengrid, +/area/engineering/gravitaional_generator) +"acV" = ( +/obj/floor_decal/floordetail/edgedrain{ + dir = 1 + }, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"adh" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"adp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"adw" = ( +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"adx" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/canister) +"adA" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + frequency = 1443; + id = "toxin_in"; + use_power = 1 + }, +/obj/machinery/sparker{ + pixel_x = 21 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/rnd/toxins) +"adB" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/window/boron_reinforced, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"adC" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"adI" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"adK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft) +"adM" = ( +/obj/floor_decal/corner/purple{ + pixel_y = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/janitor) +"adO" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + id_tag = "eng_lockdown"; + name = "Engineering Lockdown" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance{ + name = "Chief Engineer Maintenance"; + secured_wires = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/heads/office/ce) +"adU" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/turret_protected/ai_maint) +"adZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/central_stairwell) +"aec" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"aee" = ( +/obj/random/obstruction, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"aeq" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"aex" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"aeI" = ( +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d1starboard) +"aeO" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/space, +/area/space) +"aeS" = ( +/obj/structure/table/standard, +/obj/item/trash/cigbutt, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"aeU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ + id_tag = "engine_atmos_airlock"; + name = "Engine Room Airlock Controlls"; + pixel_y = 24; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/structure/catwalk, +/obj/structure/hygiene/drain, +/obj/structure/hygiene/shower{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"aeW" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "hop_road_shutters"; + name = "HoP Line's Shutters"; + opacity = 0 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/hop) +"afc" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"afk" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3; + pixel_y = 6 + }, +/obj/item/reagent_containers/food/condiment/small/sugar{ + pixel_y = 2 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"afn" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/laundry) +"afq" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"afz" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"afD" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 8 + }, +/obj/structure/flora/pottedplant/minitree, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/suplocker_room) +"afE" = ( +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/green/bordercorner2, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"afQ" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/table/steel, +/obj/machinery/cell_charger, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/item/sticky_pad/random, +/obj/item/modular_computer/tablet/lease/preset/command, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"afT" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"afU" = ( +/obj/structure/catwalk, +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/airless, +/area/space) +"aga" = ( +/obj/structure/table/marble, +/obj/structure/window/reinforced, +/obj/machinery/microwave{ + pixel_y = 4 + }, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/spline/fancy/black, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/prison) +"age" = ( +/obj/floor_decal/industrial/warning, +/obj/machinery/keycard_auth/sierra{ + pixel_x = -24 + }, +/turf/simulated/floor/selfestructgrid, +/area/security/nuke_storage) +"agA" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"agF" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/geiger, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/walnut, +/area/vacant/gambling) +"agG" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"agI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"agK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"agL" = ( +/obj/structure/closet/crate/present, +/obj/item/stack/tile/carpet/fifty, +/obj/item/stack/tile/carpetblue/fifty, +/obj/item/stack/tile/carpetblue2/fifty, +/obj/item/stack/tile/carpetblue3/fifty, +/obj/item/stack/tile/carpetgreen/fifty, +/obj/item/stack/tile/carpetmagenta/fifty, +/obj/item/stack/tile/carpetorange/fifty, +/obj/item/stack/tile/carpetpurple/fifty, +/obj/item/stack/tile/carpetred/fifty, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/spline/plain/yellow{ + dir = 6 + }, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"agO" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/seconddeck/port) +"agR" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/wood/walnut, +/area/maintenance/firstdeck/foreport) +"ahe" = ( +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/starboard) +"ahf" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"ahn" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"ahx" = ( +/obj/structure/closet/walllocker{ + pixel_y = 28 + }, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"ahy" = ( +/obj/machinery/computer/air_control{ + dir = 1; + frequency = 1441; + input_tag = "fuel_in"; + name = "Fuel Supply Control"; + output_tag = "fuel_out"; + sensor_name = "Fuel Tank"; + sensor_tag = "fuel_sensor" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/fuelbay) +"ahA" = ( +/obj/structure/hygiene/shower{ + dir = 4; + icon_state = "shower"; + pixel_x = -9 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology) +"ahQ" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/bed/chair/pew/left, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"ahU" = ( +/obj/machinery/light/spot, +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/hop/cobed) +"aif" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "firingspace"; + name = "Firing Range Shields" + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"aim" = ( +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/cockpit) +"ait" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"aiu" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"aiw" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/structure/closet/emcloset, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 8; + pixel_x = 14 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"aiA" = ( +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe) +"aiB" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 6 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"aiP" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/open, +/area/medical/staging) +"aiQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"aiS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"ajb" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/white, +/area/medical/ward) +"ajd" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/cell3) +"ajj" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"ajl" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"ajo" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"ajp" = ( +/obj/machinery/air_sensor{ + id_tag = "calypso_out" + }, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + dir = 1; + id_tag = "calypso_shuttle_pump_out_external" + }, +/obj/structure/catwalk, +/turf/simulated/floor/reinforced, +/area/exploration_shuttle/airlock) +"ajs" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"aju" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/security{ + name = "Security Checkpoint"; + req_access = list(list("ACCESS_SECURITY","ACCESS_FORENSICS")); + secured_wires = 1; + autoset_access = 0 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor/grid, +/area/security/sierra/dockcheck) +"ajw" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"ajF" = ( +/obj/structure/table/rack, +/obj/item/stack/material/wood/walnut/twentyfive, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftport) +"ajL" = ( +/obj/machinery/door/airlock/vault/bolted{ + autoset_access = 0; + id_tag = "medsafe"; + name = "Medical Safe Room" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"ajO" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"ajS" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"ajY" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/forestarboard) +"akd" = ( +/obj/structure/cable/green{ + 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/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"akf" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "hangar_atmos_storage"; + name = "Storage Shutters" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar_atmos) +"akj" = ( +/obj/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"akl" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"akm" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "escape_pod_4_pump" + }, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ + dir = 4; + id_tag = "escape_pod_4"; + name = "escape pod four controller"; + pixel_x = -20; + tag_door = "escape_pod_4_hatch"; + frequency = 1380 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/grey/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod4/station) +"akp" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/bed/sofa/l/red, +/obj/machinery/button/alternate/door/bolts{ + dir = 4; + id_tag = "bar_private_room_2"; + name = "Lock"; + pixel_x = -24; + pixel_y = -7 + }, +/turf/simulated/floor/carpet/magenta, +/area/crew_quarters/cafe) +"aks" = ( +/obj/machinery/light, +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"akx" = ( +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/stun, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"akz" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"akC" = ( +/obj/structure/closet/coffin, +/obj/floor_decal/corner/black/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/mortuary) +"akE" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/floor_decal/carpet/green{ + dir = 4 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/teacup{ + pixel_y = 7; + pixel_x = -6 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/teacup{ + pixel_y = 7; + pixel_x = 5 + }, +/obj/item/reagent_containers/food/drinks/teapot, +/turf/simulated/floor/carpet/green, +/area/medical/mentalhealth/therapyroom) +"akR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/actor) +"akZ" = ( +/obj/floor_decal/industrial/traffic{ + dir = 6; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/rnd/office) +"alw" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/medical/office) +"alA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"alE" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/heads/office/cmo/cobed) +"alH" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/crucian_hangar/start) +"alI" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/green, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"alJ" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/firstdeck/center) +"alL" = ( +/obj/machinery/air_sensor/nacelle/fourth/plasma, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d1port) +"alN" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"alS" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/closet/crate/bin, +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = -24; + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/scan) +"alU" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/center) +"alX" = ( +/obj/machinery/disperser/front{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/command/bsa) +"alY" = ( +/obj/machinery/door/airlock/external{ + frequency = 1380; + id_tag = "petrov_shuttle_inner"; + name = "Petrov Interior Access"; + req_access = list("ACCESS_PETROV_HELM"); + autoset_access = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable/green{ + 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/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/petrov/airlock) +"alZ" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/atmos) +"amf" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/window/boron_reinforced{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"amj" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"amo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"ams" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"amt" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/engine_smes) +"amx" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"amy" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe) +"amA" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/steel_grid, +/area/security/range) +"amK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"amQ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + dir = 4; + name = "Adjutants Dorm" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/adjutants/cobed) +"amR" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger/wallcharger{ + dir = 4; + pixel_x = -22 + }, +/obj/item/folder/red, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"amS" = ( +/obj/floor_decal/chapel{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"and" = ( +/obj/structure/bed/chair/rounded/beige{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"anf" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor/orange, +/obj/structure/table/rack, +/obj/random/tech_supply, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"ang" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"ani" = ( +/obj/wallframe_spawn/reinforced_phoron/titanium, +/obj/paint/nt_white, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell2) +"ano" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/computer/shuttle_control/lift/medical, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"anr" = ( +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft_stairwell) +"anu" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"anv" = ( +/obj/structure/flora/pottedplant/orientaltree, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"anD" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs) +"anF" = ( +/turf/simulated/floor/plating, +/area/space) +"anQ" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"anW" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"anX" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"aoe" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "bsa_space"; + name = "Unknown Compartament Hatch" + }, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/command/bsa) +"aoh" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"aoj" = ( +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"aoq" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/table/standard, +/obj/item/material/ashtray/glass, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"aoB" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"aoC" = ( +/obj/floor_decal/corner/black/border, +/turf/simulated/floor/tiled, +/area/hydroponics/third_deck_storage) +"aoE" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/bed/padded, +/obj/item/bedsheet/blue, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/south) +"aoG" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"aoH" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"aoN" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft_stairwell) +"aoX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"apa" = ( +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/disposalpipe/junction, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"apf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/fore) +"api" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 6 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"apl" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/foreport) +"apm" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"apu" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/wood, +/area/command/chief_steward) +"apv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"apA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"apB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"apD" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/guppy_hangar/start) +"apE" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/airlock) +"apQ" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint_stripe/red, +/obj/wallframe_spawn/reinforced/polarized{ + id = "hos_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/hos) +"apU" = ( +/obj/floor_decal/corner/red{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 1; + target_pressure = 80 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"aqb" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/shieldgen, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"aqc" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/machinery/flasher{ + dir = 8; + id_tag = "ai_core"; + pixel_x = 24 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"aql" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"aqr" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/structure/flora/pottedplant/floorleaf, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"aqz" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/port) +"aqA" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "burst_s"; + dir = 1 + }, +/obj/paint/red, +/obj/paint_stripe/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod11/station) +"aqC" = ( +/obj/structure/bookcase/manuals/security, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = 9; + pixel_y = -21 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"aqF" = ( +/obj/machinery/air_sensor/nacelle/first/oxygen, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d3starboard) +"aqH" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"aqI" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/teleporter) +"aqJ" = ( +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d1port) +"aqL" = ( +/obj/structure/janitorialcart, +/obj/item/mop, +/obj/machinery/light/small, +/obj/floor_decal/corner/purple{ + pixel_y = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/janitor) +"aqT" = ( +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"aqW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"arb" = ( +/obj/structure/cable/green, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/turf/simulated/floor/plating, +/area/rnd/development) +"are" = ( +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"arm" = ( +/obj/floor_decal/corner/paleblue, +/obj/machinery/vending/snack, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/ward) +"arq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow, +/obj/machinery/status_display{ + pixel_y = 32; + pixel_x = -32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"arC" = ( +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology) +"arG" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"arM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/atmos) +"arN" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular{ + id_tag = "xenobio2_vent"; + name = "Chamber Vent" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"arO" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"arQ" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"arU" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/hos) +"asc" = ( +/obj/machinery/door/airlock/atmos{ + name = "Safe Room Atmospherics" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/seconddeck) +"asm" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"aso" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"asr" = ( +/obj/machinery/disposal, +/obj/floor_decal/corner/lime/half{ + dir = 4 + }, +/obj/floor_decal/corner/lime{ + dir = 9 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/central_stairwell) +"ast" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/recharge_station, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"asI" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Starboard Hallway" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"atf" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/medical/virology/lab) +"atj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/rnd/entry) +"atl" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"ato" = ( +/obj/floor_decal/borderfloorblack, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/bunk) +"atp" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"atq" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"atr" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner/green/three_quarters{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Hydroponics - Aft"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"att" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Entry Shutters" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"atw" = ( +/obj/machinery/airlock_sensor/airlock_interior{ + id_tag = "engine_airlock"; + master_tag = "engine_airlock_interior_sensor"; + pixel_x = -24; + pixel_y = -24 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"atx" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/open, +/area/space) +"atC" = ( +/obj/structure/closet/firecloset, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "virology_access"; + name = "Virology Lab Access Console"; + req_access = list("ACCESS_VIRO"); + dir = 4; + pixel_x = -24 + }, +/obj/decal/cleanable/cobweb{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology) +"atF" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/power/emitter{ + desc = "A massive, heavy-duty industrial laser. This design is a fixed installation, capable of shooting in only one direction. It has a label on it reading 'SRV Petrov Analysis Lab.'"; + name = "emitter (Petrov)"; + req_lock_access = list("ACCESS_TORCH_PETROV_ANALYSIS") + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/scan) +"atH" = ( +/obj/floor_decal/industrial/warning, +/obj/machinery/camera/network/petrov{ + c_tag = "Petrov - Isolation Cell Three"; + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell3) +"atJ" = ( +/turf/simulated/floor/wood/walnut{ + icon_state = "walnut_broken5" + }, +/area/vacant/bar) +"atK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"atR" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 1; + id_tag = "solar_port_pump" + }, +/obj/machinery/light/small, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"atV" = ( +/obj/structure/table/marble, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/closet/shipping_wall/filled{ + pixel_y = 28 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"atW" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"auk" = ( +/obj/structure/closet/radiation, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"aul" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/psi_monitor, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"aun" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/head) +"aus" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"aut" = ( +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"auv" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"aux" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/binary/pump/high_power{ + target_pressure = 10000 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"auE" = ( +/obj/structure/iv_stand, +/obj/structure/roller_bed, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"auH" = ( +/obj/machinery/atmospherics/unary/vent_pump/tank{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "h2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/hydrogen, +/area/engineering/atmos) +"auN" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"auU" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "hangar_checkpoint_shutters"; + name = "Hangar Deck Checkpoint Shutters"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/security/sierra/dockcheck) +"auV" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/lime/border{ + dir = 6 + }, +/obj/structure/bed/chair/comfy/beige{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"auZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"avg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"avh" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 2 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"avi" = ( +/turf/unsimulated/mask, +/area/hallway/primary/seconddeck/center) +"avj" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"avo" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/engine_smes) +"avt" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "robotics_surgery" + }, +/turf/simulated/floor/plating, +/area/assembly/robotics) +"avJ" = ( +/obj/structure/sign/warning/hot_exhaust{ + dir = 1 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3starboard) +"avL" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"avN" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"avQ" = ( +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"awb" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/structure/bookcase/manuals/security, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"awc" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"awl" = ( +/obj/floor_decal/corner/black/full, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/gym) +"awr" = ( +/obj/structure/table/glass, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"awD" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Fourth Deck - Dock Bay - Main Dock"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"awH" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/item/device/toner{ + pixel_y = 12 + }, +/obj/item/device/toner{ + pixel_y = 12 + }, +/obj/item/device/toner{ + pixel_y = 12 + }, +/obj/floor_decal/corner/yellow/half{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"awJ" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"awP" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/sortjunction/flipped{ + dir = 4; + name = "Chemistry"; + sort_type = "Chemistry" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"awQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "eng2_outer"; + name = "Third Deck Port Nacelle Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled/techfloor/grid, +/area/thruster/d3port) +"awR" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"awT" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/disposalpipe/down{ + dir = 4 + }, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/bridgedeck/aft) +"awW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"awX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/floor_decal/corner/grey{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"axe" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"axm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/space_heater{ + pixel_y = 32 + }, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace/chamber) +"axn" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/tool, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"axq" = ( +/obj/structure/table/standard, +/obj/item/device/scanner/health, +/obj/item/device/geiger, +/obj/floor_decal/corner/black/three_quarters, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/floor_decal/corner/purple/bordercorner2, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/ship) +"axt" = ( +/obj/machinery/suit_cycler/science, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"axy" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"axC" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/thirddeck/fore) +"axL" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"axO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"axP" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"axW" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/foreport) +"axY" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 1 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft) +"axZ" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"ayj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"ayl" = ( +/obj/structure/table/standard, +/obj/floor_decal/carpet/blue2{ + dir = 1 + }, +/obj/floor_decal/carpet/blue2{ + dir = 8 + }, +/obj/floor_decal/carpet/blue2{ + dir = 9 + }, +/obj/item/paper_bin, +/obj/item/pen/multi/cmd/hop, +/obj/item/folder/blue, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/hop) +"ayu" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 1 + }, +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck - Central Hallway Two" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"ayw" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"ayy" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"ayB" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"ayD" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/glass/beaker/cryoxadone, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/machinery/body_scan_display{ + pixel_y = 24 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"ayJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/bridge/hallway) +"ayY" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"azd" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/decal/cleanable/dirt, +/obj/random/trash, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"azi" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"azj" = ( +/obj/structure/table/rack, +/obj/random/junkfood, +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/thirddeck/starboard) +"azk" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"azA" = ( +/obj/machinery/light/small, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/hardstorage) +"azH" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"azQ" = ( +/obj/machinery/optable, +/obj/decal/cleanable/blood, +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"azU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs/upper) +"azX" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"aAf" = ( +/turf/simulated/open, +/area/rnd/xenobiology/water_cell) +"aAi" = ( +/obj/floor_decal/carpet/blue2, +/obj/structure/bed/padded, +/obj/item/bedsheet/hop, +/obj/landmark/start{ + name = "Head of Personnel" + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/hop/cobed) +"aAp" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/half, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"aAt" = ( +/obj/machinery/disposal, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"aAw" = ( +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"aAz" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"aAB" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"aAD" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/center) +"aAE" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cargo_r) +"aAJ" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/closet/radiation, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/prototype/engine) +"aAO" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 6 + }, +/obj/wallframe_spawn/reinforced_phoron/hull, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"aAP" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"aAU" = ( +/obj/structure/hygiene/shower{ + dir = 4; + pixel_x = 5 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 2 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 4 + }, +/obj/structure/curtain/open/shower, +/obj/item/bikehorn/rubberducky, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/obj/structure/hygiene/drain, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/prison) +"aAY" = ( +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"aBc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"aBe" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/space, +/area/space) +"aBk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 1; + display_name = "Port Dock A"; + frequency = 1380; + id_tag = "skipjack_shuttle_dock_airlock"; + pixel_x = 32; + req_access = list("ACCESS_EXTERNAL"); + pixel_y = -29 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"aBp" = ( +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"aBy" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"aBA" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"aBC" = ( +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"aBD" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"aBE" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"aBJ" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/security/range) +"aBK" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/structure/sign/deck/fourth{ + dir = 1; + pixel_y = -32 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"aBL" = ( +/obj/machinery/suit_storage_unit/atmos/alt, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - EVA" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"aBN" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft) +"aBP" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "EngineBlast"; + name = "Engine Monitoring Room Blast Doors" + }, +/turf/simulated/floor/plating, +/area/engineering/engine_monitoring) +"aBR" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"aCb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 6 + }, +/obj/structure/holoplant, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"aCc" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"aCf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23; + pixel_y = 6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/catwalk_plated, +/obj/machinery/camera/network/hangar{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"aCl" = ( +/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/manifold/hidden/scrubbers, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"aCo" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"aCp" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/table/standard, +/obj/floor_decal/corner/grey/diagonal, +/obj/random/clipboard, +/obj/random/clipboard{ + pixel_y = 3; + pixel_x = 3 + }, +/turf/simulated/floor/tiled, +/area/rnd/research) +"aCs" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/open, +/area/maintenance/firstdeck/centralstarboard) +"aCu" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/cell1) +"aCw" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"aCD" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/carpet/orange, +/area/security/range) +"aCE" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/door/blast/regular/open{ + id_tag = "eng_lockdown_emg1"; + name = "Emergency Exit" + }, +/turf/simulated/floor/plating, +/area/engineering/engineering_monitoring) +"aCF" = ( +/obj/shuttle_landmark/skipjack/deck3, +/turf/space, +/area/space) +"aCG" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"aCL" = ( +/obj/structure/table/standard, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/blue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"aCM" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"aCR" = ( +/turf/simulated/wall/r_wall/hull, +/area/medical/virology) +"aCX" = ( +/obj/machinery/flasher{ + pixel_x = 32; + pixel_y = -32 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"aDa" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/center) +"aDg" = ( +/obj/landmark{ + name = "lightsout" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"aDp" = ( +/obj/machinery/computer/modular/preset/civilian{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/machinery/camera/network/fourth_deck{ + dir = 4; + c_tag = "Fourth Deck - Central Stairwell" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/central_stairwell) +"aDt" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"aDv" = ( +/obj/machinery/camera/network/second_deck{ + c_tag = "Chapel - Mass Driver" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"aDA" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/hallway/primary/bridgedeck/central_stairwell) +"aDB" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"aDF" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"aDI" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "nuke_shuttle_dock_airlock_pump" + }, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"aDL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"aDM" = ( +/obj/structure/flora/seaweed, +/obj/fluid_mapped, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/beach/sand, +/area/rnd/xenobiology/level2) +"aDN" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/waterstore) +"aDT" = ( +/obj/structure/bed/chair/armchair/blue{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/captain) +"aDY" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"aEa" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"aEe" = ( +/obj/machinery/shield_diffuser, +/obj/machinery/door/airlock/external/escapepod{ + dir = 4; + id_tag = "escape_pod_3_berth_hatch"; + name = "Escape Pod Three" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/center) +"aEf" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/corner/white{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"aEv" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/storage) +"aEy" = ( +/obj/machinery/door/airlock/maintenance{ + autoset_access = 0; + name = "Security Maintenance"; + req_access = list("ACCESS_SECURITY") + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/security/range) +"aEz" = ( +/obj/machinery/button/blast_door{ + dir = 8; + id_tag = "bsa_door2"; + name = "Obstruction Field Disperser Blast Door"; + pixel_x = 24; + req_access = list("ACCESS_GUN") + }, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/steel_grid, +/area/command/bsa) +"aEI" = ( +/obj/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/pipe/cap/visible/fuel{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/cap/visible/fuel, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"aEL" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/structure/bed/chair/padded/red, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/fore) +"aEM" = ( +/obj/structure/bed/chair/office/purple, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"aFa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/table/standard, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"aFg" = ( +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"aFi" = ( +/obj/machinery/door/airlock/engineering{ + name = "Auxiliary Power Storage"; + req_access = newlist(); + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/auxpower) +"aFq" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"aFs" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/table/standard, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"aFz" = ( +/obj/structure/table/standard, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/item/sticky_pad/random, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/mauve/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"aFE" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"aFM" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"aFO" = ( +/obj/structure/girder, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/curtain/bed, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"aFR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/civilian{ + dir = 4; + name = "Restroom" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/head) +"aFT" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"aFW" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp{ + pixel_x = 5; + pixel_y = -4 + }, +/obj/item/device/camera, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"aGc" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/machinery/button/ignition{ + id_tag = "Incinerator"; + pixel_x = 24; + pixel_y = 6; + dir = 8 + }, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "incinerator_access_control"; + name = "Incinerator Access Console"; + pixel_x = 24; + pixel_y = -6; + tag_exterior_door = "incinerator_airlock_exterior"; + tag_interior_door = "incinerator_airlock_interior"; + dir = 8 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"aGh" = ( +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/closet/l3closet/scientist, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"aGi" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"aGj" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/glass/civilian{ + dir = 4 + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown1_1" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/center) +"aGk" = ( +/obj/floor_decal/corner/purple{ + pixel_y = 1 + }, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/janitor) +"aGs" = ( +/obj/machinery/jukebox/custom_tape/old, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"aGH" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/item/storage/fancy/crayons, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor) +"aGI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"aGJ" = ( +/obj/machinery/disposal, +/obj/floor_decal/corner/yellow/three_quarters{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_x = 22; + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"aGP" = ( +/obj/structure/lattice, +/obj/structure/closet/crate, +/turf/simulated/open, +/area/maintenance/firstdeck/aftstarboard) +"aGQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/fore) +"aGT" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + name = "Lounge" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge/upper) +"aHg" = ( +/obj/structure/rubble, +/obj/decal/cleanable/dirt, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"aHo" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/roller_bed, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"aHE" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"aHK" = ( +/obj/machinery/atmospherics/unary/tank/air, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"aHL" = ( +/obj/machinery/computer/modular/preset/aislot/sysadmin{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"aHM" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/tcommsat/chamber) +"aHV" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/powered/pump, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"aIe" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"aIi" = ( +/obj/machinery/door/airlock/research{ + autoset_access = 0; + frequency = 1379; + id_tag = "xeno_airlock_outer"; + name = "Xenobiology Access"; + req_access = list("ACCESS_RESEARCH") + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"aIl" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/machinery/light_switch{ + pixel_x = -6; + pixel_y = 28 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/turf/simulated/floor/wood/yew, +/area/crew_quarters/heads/office/ce/cobed) +"aIp" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow, +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"aIq" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/foreport) +"aIC" = ( +/obj/floor_decal/spline/plain/black{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"aIH" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"aIL" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"aIM" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"aIO" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"aIS" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/dogbed, +/mob/living/simple_animal/passive/corgi/puppy, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"aIT" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/civilian{ + name = "Toilet"; + id_tag = "old_maintaince_privatedorm_toilet" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/vacant/dormintories) +"aIU" = ( +/turf/simulated/floor/plating, +/area/rnd/misc_lab) +"aIY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/turf/simulated/wall/r_wall/hull, +/area/space) +"aJb" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/seconddeck/forestarboard) +"aJd" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"aJi" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"aJv" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"aJA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"aJD" = ( +/obj/structure/table/steel, +/obj/machinery/button/blast_door{ + id_tag = "concheckwindow"; + name = "Checkpoint Shutter Control"; + pixel_x = 5; + pixel_y = 6 + }, +/obj/machinery/button/blast_door{ + id_tag = "outercheckwindow"; + name = "Outer Checkpoint Shutter Control"; + pixel_x = 5; + pixel_y = -3 + }, +/obj/structure/cable/green, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"aJG" = ( +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"aJI" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"aJJ" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"aJL" = ( +/obj/machinery/space_heater, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 23 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"aKa" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + name = "Cryo Storage" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/sleep/cryo) +"aKe" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"aKh" = ( +/obj/machinery/door/window/westright{ + name = "Xenoflora Environment"; + req_access = newlist(); + dir = 4 + }, +/obj/machinery/door/window/westleft{ + name = "Xenoflora Environment" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/xenobiology/xenoflora) +"aKj" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp/lava/cyan, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology/ward) +"aKm" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "PetrovBiohazard"; + name = "Petrov Biohazard Shutters" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/airlock) +"aKn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"aKq" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"aKt" = ( +/obj/structure/iv_stand, +/obj/machinery/body_scan_display{ + pixel_y = 24 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery) +"aKy" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"aKG" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"aKQ" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 8 + }, +/obj/machinery/papershredder, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"aKX" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"aLa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod1/station) +"aLc" = ( +/obj/structure/bed/chair/office/comfy/purple{ + dir = 1 + }, +/obj/landmark/start{ + name = "Research Director" + }, +/obj/structure/curtain/bed{ + pixel_y = 32 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/heads/office/rd/cobed) +"aLi" = ( +/obj/machinery/cooker/oven, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"aLo" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light_construct{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/maintenance/abandoned_hydroponics) +"aLw" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"aLA" = ( +/obj/structure/table/standard, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_cyborg_upload) +"aLB" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Armory"; + req_access = newlist(); + dir = 4 + }, +/obj/floor_decal/industrial/hatch/grey, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/sierra/armory) +"aLI" = ( +/obj/structure/railing/mapped, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"aLQ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"aLS" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"aLU" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/hallway/primary/firstdeck/central_stairwell) +"aMo" = ( +/turf/simulated/floor/carpet/purple, +/area/chapel/office) +"aMp" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"aMq" = ( +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/orange/corner, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 8 + }, +/obj/structure/sign/thera{ + pixel_y = -32; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"aMC" = ( +/obj/structure/railing/mapped, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"aMG" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"aMI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hos) +"aML" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"aMS" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/wall/r_titanium, +/area/guppy_hangar/start) +"aNn" = ( +/obj/structure/bed/chair/office/comfy/blue, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"aNp" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/head_big) +"aNs" = ( +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"aNt" = ( +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/cargo_l) +"aNv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"aND" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"aNM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/paint/black, +/turf/simulated/wall/ocp_wall, +/area/maintenance/incinerator) +"aNR" = ( +/obj/floor_decal/corner/green/diagonal, +/obj/structure/table/glass, +/obj/machinery/light_construct{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/random/maintenance, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"aNW" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/rnd/xenobiology/xenoflora) +"aOa" = ( +/obj/floor_decal/industrial/hatch/red, +/turf/simulated/floor/reinforced, +/area/command/bsa) +"aOd" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/assembly/robotics) +"aOg" = ( +/obj/machinery/constructable_frame/machine_frame, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"aOj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"aOn" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/blast/regular{ + id_tag = "BSD_windows"; + name = "Bluespace Chamber Lockdown" + }, +/turf/simulated/floor/plating, +/area/engineering/bluespace/chamber) +"aOo" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"aOq" = ( +/turf/simulated/wall/r_wall/hull, +/area/storage/tech/high_risk) +"aOt" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/machinery/power/apc/high{ + name = "north bump"; + pixel_y = -24 + }, +/obj/structure/cable/green, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"aOu" = ( +/obj/structure/catwalk, +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#6a97b0" + }, +/area/quartermaster/hangar/upper) +"aOx" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/lime/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/cigarette, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"aOA" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/catwalk_plated/dark, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/bridge/hallway) +"aOH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/gym) +"aPn" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/spline/fancy/black, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"aPv" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"aPw" = ( +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sleep/bunk) +"aPH" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/door/airlock/engineering{ + name = "First Deck Substation"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/substation/firstdeck) +"aPJ" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/titanium, +/area/shuttle/petrov/eva) +"aPS" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/uniform_vendor{ + icon_state = "robotics"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/firstdeck) +"aPV" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 8 + }, +/obj/machinery/status_light{ + id_tag = "ReacEng3"; + name = "Deck One Starboard status indicator"; + pixel_y = -32 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"aPW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"aPY" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"aQb" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/central_stairwell) +"aQd" = ( +/obj/structure/railing/mapped, +/obj/machinery/space_heater, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"aQi" = ( +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled, +/area/rnd/locker) +"aQn" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"aQp" = ( +/obj/machinery/atmospherics/unary/tank/air, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"aQq" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"aQt" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"aQu" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"aQw" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod4/station) +"aQC" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"aQF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"aQS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/hologram/holopad/longrange, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/door/window/brigdoor/westleft{ + autoset_access = 0; + dir = 2; + req_access = list("ACCESS_EXPEDITION_SHUTTLE_HELM") + }, +/obj/overmap/visitable/ship/landable/exploration_shuttle, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cockpit) +"aRa" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"aRb" = ( +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"aRe" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"aRf" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/action_figure, +/obj/random/action_figure, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"aRn" = ( +/obj/structure/cable/green, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/emergency) +"aRo" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai_upload) +"aRp" = ( +/obj/floor_decal/corner/blue{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"aRr" = ( +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + 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/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/hydroponics) +"aRt" = ( +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/galley/backroom) +"aRv" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf{ + dir = 4 + }, +/obj/machinery/door/window/southright{ + dir = 4; + name = "Research and Development Desk"; + req_access = newlist() + }, +/obj/machinery/door/window/northleft{ + autoset_access = 0; + dir = 8; + name = "Research and Development Desk" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/plating, +/area/rnd/development) +"aRx" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"aRB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/item/material/knife/table/plastic, +/obj/item/material/knife/table/plastic, +/obj/item/material/knife/table/plastic, +/obj/item/material/kitchen/utensil/fork/plastic, +/obj/item/material/kitchen/utensil/fork/plastic, +/obj/item/material/kitchen/utensil/fork/plastic, +/obj/item/material/kitchen/utensil/spoon/plastic, +/obj/item/material/kitchen/utensil/spoon/plastic, +/obj/item/material/kitchen/utensil/spoon/plastic, +/obj/item/material/kitchen/utensil/foon/plastic, +/obj/item/material/kitchen/utensil/foon/plastic, +/obj/item/material/kitchen/utensil/foon/plastic, +/obj/item/material/kitchen/rollingpin, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/closet/walllocker/secure_closet{ + pixel_y = -24; + req_access = list("ACCESS_SECURITY") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"aRD" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/floor_decal/corner/green/border, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"aRE" = ( +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/orange/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"aRF" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"aRH" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"aRR" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/closet/crate, +/obj/random/tank, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"aSf" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"aSg" = ( +/obj/structure/closet/firecloset, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/storage/briefcase/inflatable, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"aSj" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/sortjunction/flipped{ + dir = 4; + name = "Chief Medical Officer"; + sort_type = "Chief Medical Officer" + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"aSu" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"aSx" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"aSG" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/sierra/hallway) +"aSH" = ( +/turf/simulated/wall/prepainted, +/area/assembly/robotics) +"aSV" = ( +/obj/random/trash, +/obj/random/toolbox, +/obj/item/beartrap, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"aSX" = ( +/turf/simulated/wall/r_wall/hull, +/area/vacant/prototype/engine) +"aSY" = ( +/obj/structure/towel/fitness, +/obj/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"aTa" = ( +/obj/machinery/atmospherics/unary/vent_pump/tank{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "co2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/engineering/atmos) +"aTd" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/navbeacon/sierra/TD_fore3, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/blue/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/blue/bordercorner2, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"aTf" = ( +/obj/item/storage/secure/safe{ + pixel_y = 32 + }, +/turf/simulated/floor/wood/yew, +/area/crew_quarters/heads/office/ce/cobed) +"aTh" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/open, +/area/space) +"aTm" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"aTn" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"aTp" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/machinery/light/spot, +/obj/item/device/camera, +/obj/floor_decal/carpet/blue, +/obj/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/floor_decal/carpet/blue{ + dir = 10 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa/high_sec) +"aTq" = ( +/obj/floor_decal/corner/grey{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"aTv" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/adherent_pylon, +/turf/simulated/floor/crystal, +/area/crew_quarters/adherent) +"aTE" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"aTI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_staging_lockdown"; + name = "Infirmary Staging Shutters" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"aTK" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/locker) +"aTL" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/table/rack, +/obj/structure/railing/mapped, +/obj/item/bodybag, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"aTM" = ( +/obj/floor_decal/industrial/warning/cee, +/obj/machinery/airlock_sensor{ + id_tag = "sd_starboard_sensor"; + master_tag = "sd_starboard"; + pixel_x = 24 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "sd_starboard_pump" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"aUd" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/shuttlefuel) +"aUf" = ( +/obj/structure/railing/mapped, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"aUh" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"aUj" = ( +/obj/paint_stripe/turquoise, +/obj/paint/black, +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai_maint) +"aUm" = ( +/obj/structure/table/woodentable_reinforced/mahogany/walnut, +/obj/floor_decal/spline/fancy/black, +/obj/item/flame/candle, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"aUp" = ( +/obj/machinery/button/blast_door{ + id_tag = "ai_upload_blast"; + name = "Cyborg Upload Blast Doors"; + pixel_y = 24; + req_access = list("ACCESS_AI_UPLOAD") + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"aUt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"aUy" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/yellow, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"aUF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hydroponics) +"aUN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"aUP" = ( +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/hallway/primary/fourthdeck/central_stairwell) +"aUU" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/airlock) +"aUX" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/machinery/button/alternate/door/bolts{ + dir = 1; + id_tag = "toilet_eng_1"; + name = "Lock"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head/deck3) +"aVb" = ( +/obj/item/inflatable_duck{ + name = "Chief of Astronavigation" + }, +/obj/item/device/radio/off, +/obj/item/clothing/head/soft/solgov/fleet{ + pixel_x = -8; + pixel_y = 5 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"aVe" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"aVf" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/random_multi/single_item/space_rabbit, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/port) +"aVj" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"aVn" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/sign/warning/fire{ + pixel_y = 32 + }, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1379; + master_tag = "incinerator_access_control"; + name = "Incinerator airlock control"; + pixel_x = -24; + pixel_y = -8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/incinerator) +"aVq" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"aVs" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"aVI" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"aVL" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/port) +"aVO" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/green/bordercorner2{ + icon_state = "bordercolorcorner2"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"aVQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"aVS" = ( +/obj/structure/table/rack, +/obj/item/aiModule/asimov, +/obj/item/aiModule/paladin, +/obj/item/aiModule/robocop, +/obj/item/aiModule/solgov_aggressive, +/obj/item/aiModule/solgov, +/obj/item/aiModule/freeformcore, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window{ + autoset_access = 0; + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Core Modules"; + req_access = list("ACCESS_CAPTAIN") + }, +/obj/floor_decal/industrial/outline/green, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"aVZ" = ( +/obj/machinery/space_heater, +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"aWb" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/nano) +"aWk" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/sleep/cryo/firstdeck) +"aWr" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"aWu" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"aWD" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"aWI" = ( +/obj/structure/stairs/west, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"aWQ" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 8 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1starboard) +"aWS" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "bsa" + }, +/obj/floor_decal/corner/black/full, +/turf/simulated/floor/tiled/dark, +/area/command/bsa) +"aWX" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/tech_loot, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"aXc" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/red/bordercorner2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"aXe" = ( +/obj/floor_decal/corner/paleblue/full, +/obj/structure/flora/pottedplant/minitree, +/obj/machinery/light_switch{ + dir = 4; + on = 1; + pixel_x = -25 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/cmo/cobed) +"aXh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/random/single/color/cable_coil, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"aXj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"aXo" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"aXq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftport) +"aXz" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/abandoned_hydroponics) +"aXB" = ( +/obj/floor_decal/borderfloorwhite{ + icon_state = "borderfloor_white"; + dir = 9 + }, +/obj/floor_decal/corner/lime/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"aXK" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/structure/closet/hydrant{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"aXM" = ( +/obj/structure/table/rack/dark, +/obj/item/stack/medical/splint, +/obj/item/stack/medical/splint, +/obj/item/stack/medical/splint, +/obj/item/stack/medical/splint, +/obj/item/stack/medical/advanced/bruise_pack{ + pixel_x = -7; + pixel_y = -6 + }, +/obj/item/stack/medical/advanced/bruise_pack{ + pixel_x = -7 + }, +/obj/item/stack/medical/advanced/bruise_pack{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/stack/medical/advanced/ointment{ + pixel_x = 7; + pixel_y = -6 + }, +/obj/item/stack/medical/advanced/ointment{ + pixel_x = 7 + }, +/obj/item/stack/medical/advanced/ointment{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/item/storage/firstaid/surgery, +/obj/item/bodybag/rescue/loaded, +/obj/item/bodybag/rescue/loaded, +/obj/item/defibrillator, +/obj/floor_decal/spline/plain/paleblue{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"aXS" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"aXW" = ( +/obj/structure/table/glass, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"aYb" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/sign/deck/second{ + dir = 8; + pixel_x = 32; + pixel_y = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/aft_stairwell) +"aYe" = ( +/obj/shuttle_landmark/skipjack/deck2, +/turf/space, +/area/space) +"aYp" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/galley) +"aYv" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"aYw" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/structure/table/woodentable/maple, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/teacup{ + pixel_y = 7; + pixel_x = -4 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/teacup{ + pixel_x = 5 + }, +/obj/item/reagent_containers/food/condiment/small/packet/sugar{ + pixel_y = 2; + pixel_x = -12 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"aYx" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"aYy" = ( +/obj/structure/bed/chair/padded/purple{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercee{ + dir = 4 + }, +/obj/floor_decal/industrial/traffic/corner{ + detail_color = "#a2819e"; + color = "#a2819e"; + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/assembly/office) +"aYz" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"aYA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/machinery/airlock_sensor/airlock_interior{ + frequency = 1331; + id_tag = "guppy_shuttle_interior_sensor"; + master_tag = "guppy_shuttle"; + name = "interior access button"; + pixel_x = -22; + pixel_y = 32; + req_access = list("ACCESS_GUPPY") + }, +/turf/simulated/floor/tiled, +/area/guppy_hangar/start) +"aYE" = ( +/obj/machinery/portable_atmospherics/canister, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"aYH" = ( +/obj/structure/closet/secure_closet/chemical_sierra, +/obj/item/hand_labeler{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/item/clothing/glasses/science, +/obj/item/reagent_containers/dropper{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/floor_decal/corner/beige/three_quarters, +/obj/floor_decal/corner/yellow/border{ + dir = 10 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"aYJ" = ( +/obj/machinery/computer/rdconsole/core{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/development) +"aYR" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/center) +"aYW" = ( +/obj/machinery/computer/modular/preset/civilian{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/quartermaster/hangar/upper) +"aYX" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"aZj" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/random/junk, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"aZC" = ( +/obj/structure/cable/green{ + 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/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"aZJ" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"aZX" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"bal" = ( +/obj/structure/bed/chair/office/comfy/teal{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/half{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"baB" = ( +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/industrial/danger/corner, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"baE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"baF" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/device/flashlight/lamp/green{ + pixel_x = -6; + pixel_y = 13 + }, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/iaa/cobed) +"baI" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/flora/pottedplant/decorative, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -9; + pixel_y = -21 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"baK" = ( +/obj/structure/bed/chair/office/comfy/red, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"baT" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/corner/black/mono, +/obj/item/storage/box/cola/sodawater, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"baW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/machinery/meter, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"bbd" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 5 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d1starboard) +"bbg" = ( +/obj/machinery/vending/cigarette, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/office) +"bbh" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar) +"bbq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 9 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"bby" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"bbD" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/space_heater, +/obj/machinery/camera/network/mining{ + dir = 1; + c_tag = "Mining - Warehouse" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition/storage) +"bbI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"bbO" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch{ + id_tag = "tox_airlock_interior" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/rnd/toxins) +"bbV" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/cobed) +"bbX" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_east = 1; + tag_north = 8; + tag_south = 2 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"bbZ" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/woodentable/walnut, +/obj/item/towel/random, +/obj/item/towel/random, +/obj/item/towel/random, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"bca" = ( +/obj/structure/bed/chair/wood/maple{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"bcb" = ( +/obj/machinery/button/blast_door{ + id_tag = "AICoreLastResort"; + name = "AI Core Last Resort"; + pixel_x = 5; + pixel_y = -8 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai) +"bce" = ( +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/office) +"bci" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"bck" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/power/apc/buildable, +/obj/item/stock_parts/power/apc/buildable, +/obj/item/stock_parts/power/apc/buildable, +/obj/item/stock_parts/console_screen, +/obj/item/stock_parts/console_screen, +/obj/item/stock_parts/console_screen, +/obj/item/stock_parts/keyboard, +/obj/item/stock_parts/keyboard, +/obj/item/stock_parts/keyboard, +/turf/simulated/floor/tiled/steel_ridged, +/area/tcommsat/storage) +"bcs" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/full, +/obj/structure/cable/green, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/iaa) +"bcu" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"bcv" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"bcy" = ( +/obj/structure/window/basic, +/obj/machinery/door/window{ + autoset_access = 0; + dir = 8 + }, +/obj/structure/curtain/open/privacy, +/obj/structure/window/basic{ + dir = 4 + }, +/obj/item/stool/padded, +/obj/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"bcI" = ( +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"bcJ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/actor/stage) +"bcK" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/cell/high, +/obj/item/device/multitool, +/obj/item/stack/cable_coil, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"bcL" = ( +/turf/simulated/open, +/area/rnd/research) +"bcP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/space_heater, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/hangar_atmos) +"bcV" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/ce/cobed) +"bcY" = ( +/obj/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"bda" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"bdj" = ( +/obj/structure/bed/sofa/m/blue{ + dir = 4 + }, +/obj/floor_decal/carpet/red{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/captain/beach) +"bdv" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 6 + }, +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/docking) +"bdw" = ( +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/vacant/monitoring) +"bdy" = ( +/obj/machinery/mass_driver{ + id_tag = "chapel"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/chapel/main) +"bdz" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"bdA" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod3/station) +"bdI" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/assembly/office) +"bdQ" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"bdT" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/abandoned_hydroponics) +"beb" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"bed" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"bek" = ( +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/random/obstruction, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"bel" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"beq" = ( +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"bes" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"beu" = ( +/obj/structure/hygiene/drain/bath, +/obj/structure/hygiene/shower{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head) +"bev" = ( +/obj/machinery/vending/medical/sierra{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/medical/staging) +"beA" = ( +/obj/structure/bed/chair/office/comfy/brown{ + dir = 1 + }, +/obj/landmark/start{ + name = "Councelor" + }, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"beC" = ( +/obj/machinery/door/airlock/hatch/maintenance{ + autoset_access = 0; + dir = 4; + name = "Third Deck Port Nacelle"; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"beJ" = ( +/obj/structure/table/standard, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/item/reagent_containers/glass/beaker/vial, +/obj/item/clothing/glasses/science, +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"beN" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"beQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/storage/airlock_canisters) +"beV" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"bfp" = ( +/obj/structure/closet/l3closet/scientist, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry2) +"bfq" = ( +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"bfG" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"bfH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"bfI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"bfL" = ( +/obj/structure/cable, +/obj/machinery/power/apc/critical{ + name = "south bump"; + pixel_y = -21 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/maintenance/solar/bridge_port) +"bfR" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"bfS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"bfT" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"bgh" = ( +/obj/structure/table/rack, +/obj/random/tech_supply, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"bgl" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"bgn" = ( +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"bgp" = ( +/obj/structure/window/reinforced/polarized{ + id = "cap_room_window" + }, +/obj/structure/window/reinforced/polarized{ + id = "cap_room_window"; + dir = 4 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/captain, +/obj/floor_decal/carpet/blue, +/obj/floor_decal/carpet/blue{ + dir = 4 + }, +/obj/floor_decal/carpet/blue{ + dir = 6 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/captain) +"bgw" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"bgx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3port) +"bgD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"bgG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/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/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"bgK" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/docking) +"bgP" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"bgZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/sleep/bunk) +"bhb" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"bhg" = ( +/obj/machinery/atmospherics/tvalve{ + dir = 1; + icon_state = "map_tvalve1"; + state = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/xenobiology/atmos) +"bhi" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"bhA" = ( +/obj/structure/table/steel, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"bhB" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/table/woodentable/walnut, +/obj/machinery/chemical_dispenser/bar_soft/full{ + pixel_y = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"bhO" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 4; + icon_state = "shutter0"; + id_tag = "hangar_ts_shutters"; + name = "Hangar Deck Hallway Shutters"; + opacity = 0 + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown3_4" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"bhT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"bia" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"bib" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/corner/green/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"bie" = ( +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/maintenance/bridgedeck/starboard) +"bih" = ( +/obj/machinery/disposal, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/development) +"bii" = ( +/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/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"bij" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/equipment) +"bin" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/captain/beach) +"biw" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/obj/structure/catwalk, +/turf/simulated/open, +/area/space) +"biE" = ( +/obj/structure/closet/emcloset/anchored, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo) +"biG" = ( +/obj/structure/bed/chair/padded/purple{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/entry) +"biJ" = ( +/obj/structure/window/basic{ + dir = 8 + }, +/obj/structure/reagent_dispensers/water_cooler{ + dir = 1 + }, +/obj/machinery/light, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/corner/black/three_quarters, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"biK" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/bordercorner2, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"biR" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"biZ" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"bjd" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/junkfood, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"bje" = ( +/obj/structure/bookcase/manuals/xenoarchaeology, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"bjf" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/item/hand_labeler, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"bjg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"bjo" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"bjq" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/engineering{ + name = "Quick Access Warehouse" + }, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "eng_lockdown"; + name = "Engineering Lockdown" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"bjs" = ( +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/hydroponics) +"bjB" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lightgrey/border, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "portaux_warehouse"; + name = "Warehouse Shutters Control"; + pixel_y = -25; + req_access = list("ACCESS_CARGO") + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lightgrey/bordercorner2, +/obj/machinery/camera/network/fourth_deck{ + dir = 1; + c_tag = "Fourth Deck - Fore Hallway Port" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"bjD" = ( +/obj/floor_decal/corner/black/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"bjG" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d3starboard) +"bjI" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch{ + frequency = 1379; + id_tag = "engine_airlock_outer"; + name = "Engine Airlock Exterior" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_monitoring) +"bjJ" = ( +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"bjR" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d1port) +"bjU" = ( +/obj/machinery/light/spot, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft_stairwell) +"bjY" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/decal/cleanable/cobweb2, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"bka" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"bkg" = ( +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/assembly/chargebay) +"bkh" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/catwalk_plated/dark, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/bridge/hallway) +"bkj" = ( +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/engineering/fuelbay) +"bkz" = ( +/obj/floor_decal/corner/black/full, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"bkN" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/black/border, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/iaa/cobed) +"bkO" = ( +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/dungeon_master_lounge) +"bkQ" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"bkT" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"bkU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"bld" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/tcommsat/storage) +"bli" = ( +/obj/machinery/computer/ship/helm, +/obj/machinery/button/blast_door{ + id_tag = "calypso_shutters"; + name = "Protective Shutters Control"; + pixel_x = 7; + pixel_y = 34 + }, +/obj/machinery/button/blast_door{ + id_tag = "sensor_shutters"; + name = "Protective Sensor Control"; + pixel_x = -6; + pixel_y = 34 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/button/blast_door{ + id_tag = "cockpit_shutters"; + name = "Protective Cockpit Control"; + pixel_x = -6; + pixel_y = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cockpit) +"blw" = ( +/obj/structure/largecrate, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"blA" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/assembly/robotics) +"blD" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/conveyor{ + id = "mining_internal" + }, +/turf/simulated/floor, +/area/quartermaster/hangar) +"blG" = ( +/obj/structure/bed/chair/padded/teal{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/medical/maintenance_equipstorage) +"blM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 6 + }, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/orange/corner, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"bmc" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -21; + pixel_y = -10 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/light, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/heads/office/rd) +"bmi" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/office) +"bmk" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/vacant/monitoring) +"bml" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/tank/oxygen_emergency_double, +/obj/item/tank/oxygen_yellow, +/obj/item/tank/oxygen_yellow, +/obj/item/tank/jetpack, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"bmr" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"bmB" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"bmG" = ( +/obj/structure/bed/chair/padded/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"bmK" = ( +/obj/paint_stripe/red, +/obj/paint/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod1/station) +"bne" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/space, +/area/space) +"bnf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"bni" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"bnr" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "fd_starboard_pump" + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"bnt" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"bny" = ( +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"bnz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"bnI" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"bnQ" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/office) +"boa" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"bon" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/machinery/washing_machine, +/obj/machinery/light_switch{ + pixel_x = -21; + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/breakroom) +"boo" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"bop" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/machinery/vending/coffee{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"boz" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft) +"boE" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/reinforced, +/area/space) +"boM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"boN" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/floor_decal/corner/purple, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/storage2) +"boO" = ( +/obj/structure/inflatable/wall, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"boS" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"boT" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/medical, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"bpD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"bpK" = ( +/obj/structure/table/standard, +/obj/item/towel/random, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/random/soap, +/obj/item/lipstick/random{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/breakroom) +"bpR" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ + id_tag = "engine_airlock"; + name = "Engine Room Airlock Controlls"; + pixel_y = 24; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"bpU" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/highsecurity{ + name = "Obstruction Field Disperser" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/command/bsa) +"bpY" = ( +/obj/structure/table/rack, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/item/stack/material/plasteel/fifty, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"bqj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/lino, +/area/command/chief_steward) +"bqn" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/r_wall, +/area/maintenance/compactor) +"bqo" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/civilian{ + name = "Central Stairwell" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/central_stairwell) +"bqr" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown3_3" + }, +/obj/machinery/door/airlock/glass/civilian{ + dir = 4; + autoset_access = 0 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/center) +"bqs" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/grey/border, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"bqv" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/corner/blue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/computer/account_database{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/heads/office/hop) +"bqA" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"bqD" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/heads/office/hos/cobed) +"bqG" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "firing_range_outer"; + name = "Firing Range Airlock" + }, +/obj/machinery/access_button/airlock_exterior{ + desc = "Security access required."; + dir = 4; + master_tag = "firing_range"; + name = "exterior access button"; + pixel_x = -10; + pixel_y = 24; + req_access = list("ACCESS_EXTERNAL","ACCESS_SECURITY") + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"bqI" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"bqJ" = ( +/obj/structure/table/steel, +/obj/item/device/flashlight/lamp/green, +/obj/decal/cleanable/dirt, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"bqL" = ( +/obj/machinery/radio_beacon, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/guppy_hangar/start) +"bqN" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/obj/machinery/power/apc/super/critical{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/closet/radiation, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"bqO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"bqS" = ( +/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/light/spot{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"bqW" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"bqX" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/corner/green, +/turf/simulated/floor/tiled, +/area/hydroponics) +"brh" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light/spot, +/obj/machinery/portable_atmospherics/canister/hydrogen{ + start_pressure = 14999 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"brq" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"brx" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/folder/blue, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/mauve/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"brA" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"brB" = ( +/obj/floor_decal/corner/darkblue, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"brE" = ( +/obj/random/trash, +/turf/simulated/floor/wood/walnut, +/area/maintenance/firstdeck/aftstarboard) +"brF" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod2/station) +"brG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"brI" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/structure/table/standard, +/obj/item/material/ashtray/bronze, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"brU" = ( +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d3port) +"brW" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"bso" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"bsB" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "toxin_lab_access"; + name = "Toxin Lab Access Console"; + pixel_y = 24; + req_access = list("ACCESS_TOX_STORAGE") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"bsH" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"bsO" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1; + target_pressure = 200 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"bsQ" = ( +/obj/structure/morgue{ + dir = 2 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/closet/walllocker{ + pixel_y = 28 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"bsR" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"bsS" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs) +"bsU" = ( +/obj/machinery/shieldwallgen, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"bsV" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "td_fore_starboard_pump" + }, +/obj/floor_decal/industrial/warning/cee, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"bsZ" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/firstdeck/forestarboard) +"btb" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped, +/obj/random/maintenance, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"btc" = ( +/obj/paint/red, +/obj/paint_stripe/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod5/station) +"btf" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/chargebay) +"btn" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs) +"bts" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Fore Hallway Port"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"btB" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/bed/chair/office/comfy/blue{ + dir = 8 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/hop/cobed) +"btE" = ( +/obj/floor_decal/corner/purple/three_quarters{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"btF" = ( +/obj/structure/closet/cabinet, +/obj/item/book/manual/engineering_singularity_safety, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/ce/cobed) +"btP" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"btR" = ( +/obj/structure/catwalk, +/obj/machinery/shieldwallgen, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"btU" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"btX" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/titanium, +/area/guppy_hangar/start) +"bua" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + name = "Third Deck Port Airlock Access"; + id_tag = "td_port_outer" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"buf" = ( +/obj/structure/window/basic{ + dir = 8 + }, +/obj/machinery/vending/fitness, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/corner/black/three_quarters{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"buq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1380; + id_tag = "specops_dock_inner"; + name = "Docking Port Airlock" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"buC" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"buM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"buN" = ( +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12 + }, +/obj/item/storage/mirror{ + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"buO" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs) +"buQ" = ( +/obj/machinery/power/smes/buildable/preset/sierra/hangar{ + RCon_tag = "Substation - Hangar" + }, +/obj/structure/cable/cyan, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/fourthdeck) +"buV" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"buY" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 8; + pixel_x = 14 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"buZ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/rotating_alarm/supermatter{ + dir = 8; + pixel_x = 14 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"bva" = ( +/obj/floor_decal/corner/yellow/three_quarters{ + dir = 8 + }, +/obj/structure/closet/secure_closet/quartermaster_sierra, +/obj/item/device/eftpos{ + eftpos_name = "Quartermaster EFTPOS scanner" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"bvn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"bvp" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"bvt" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 5 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"bvw" = ( +/obj/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/foreport) +"bvA" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/canister) +"bvC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals_central6, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"bvG" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/device/flashlight/lamp/green, +/obj/floor_decal/carpet/red, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/captain/beach) +"bvK" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 23 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green, +/obj/machinery/power/terminal, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/servers) +"bvN" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/constructable_frame/computerframe, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"bvW" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/machinery/atm{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"bwb" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "solar_starboard_outer"; + name = "Engineering External Access" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar/starboard) +"bwe" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"bwg" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"bwn" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/structure/table/steel, +/obj/machinery/cell_charger, +/obj/item/cell/high, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Materials Storage"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"bwo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/aftport) +"bwp" = ( +/obj/structure/closet/crate, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/spline/plain/black{ + dir = 9; + icon_state = "spline_plain" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"bwr" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/brig) +"bwv" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/thirddeck/fore) +"bwx" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod4/station) +"bwJ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"bwM" = ( +/obj/structure/sign/poster{ + pixel_y = 32 + }, +/turf/simulated/open, +/area/crew_quarters/lounge/upper) +"bwQ" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/blast/regular, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology) +"bwS" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 8 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"bwW" = ( +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"bxa" = ( +/obj/machinery/shield_diffuser, +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_1_berth_hatch"; + name = "Escape Pod One" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/center) +"bxb" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"bxd" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"bxl" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/camera/network/bridge_deck{ + dir = 8; + c_tag = "Bridge Deck - Central Stairwell" + }, +/obj/machinery/atm{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"bxn" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"bxo" = ( +/turf/simulated/wall/prepainted, +/area/vacant/sauna) +"bxp" = ( +/obj/floor_decal/corner/grey/full, +/obj/machinery/media/music_writer{ + pixel_x = -32 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"bxy" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"bxD" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/green, +/obj/machinery/meter, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"bxG" = ( +/obj/structure/table/standard, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/device/scanner/spectrometer/adv, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/medical/staging) +"bxH" = ( +/obj/decal/cleanable/dirt, +/obj/item/ore/iron, +/obj/structure/cable/cyan, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"bxO" = ( +/obj/structure/catwalk, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/exploration_shuttle/power) +"bxP" = ( +/obj/structure/table/rack, +/obj/item/storage/box/lights/mixed, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"bxQ" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/head) +"bxS" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/hangar_atmos) +"bxZ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"byc" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"byf" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"byi" = ( +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + dir = 1; + color = "#8c911d" + }, +/obj/structure/railing/mapped{ + dir = 8; + init_color = "#8c911d"; + color = "#8c911d" + }, +/turf/simulated/floor/plating, +/area/rnd/misc_lab) +"byr" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/monotile, +/area/security/brig) +"byA" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"byK" = ( +/obj/structure/dispenser/oxygen, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"byL" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"byQ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/obj/machinery/vending/wallmed1{ + name = "Emergency NanoMed"; + pixel_x = -24; + dir = 4 + }, +/obj/structure/table/steel, +/obj/item/storage/firstaid/regular, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/item/roller_bed, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"byW" = ( +/turf/simulated/wall/prepainted, +/area/rnd/xenobiology/level1) +"byY" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/janitor) +"bzb" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"bzg" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/vacant/gambling) +"bzi" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint_stripe/red, +/obj/wallframe_spawn/reinforced/polarized{ + id = "hos_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/hos) +"bzm" = ( +/obj/floor_decal/corner/darkblue/full, +/obj/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/red{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"bzt" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"bzw" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"bzA" = ( +/obj/paint/black, +/obj/paint{ + color = "#353a42" + }, +/turf/simulated/wall/ocp_wall, +/area/rnd/toxins) +"bzD" = ( +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"bzE" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 9 + }, +/obj/floor_decal/industrial/danger{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/command/bsa) +"bzF" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"bzH" = ( +/obj/machinery/power/apc/super/critical{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/cable/cyan, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"bzN" = ( +/obj/structure/lattice, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"bzP" = ( +/obj/structure/table/rack, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/floor_decal/industrial/outline/grey, +/obj/item/device/suit_cooling_unit, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"bAm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"bAr" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"bAs" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"bAt" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance{ + name = "Security Maintenance"; + req_access = list("ACCESS_SEC_DOORS"); + autoset_access = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"bAu" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation) +"bAw" = ( +/obj/structure/catwalk, +/obj/structure/handrail{ + dir = 8 + }, +/turf/simulated/open, +/area/space) +"bAx" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 4; + name = "Chief Engineer"; + sort_type = "Chief Engineer" + }, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"bAz" = ( +/obj/floor_decal/industrial/danger{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"bAC" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/foreport) +"bAD" = ( +/obj/structure/catwalk, +/obj/structure/ladder/up, +/turf/simulated/open, +/area/space) +"bAE" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/corner/green/half, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"bAL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/wall/r_wall/prepainted, +/area/vacant/gambling) +"bAO" = ( +/obj/structure/closet/crate/freezer, +/obj/item/bodybag/rescue/loaded, +/obj/item/bodybag/rescue/loaded, +/obj/random/firstaid, +/obj/random/firstaid, +/obj/random/medical, +/obj/random/medical, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"bAX" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/bookcase/manuals/xenoarchaeology, +/obj/floor_decal/carpet/purple, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/obj/floor_decal/carpet/purple{ + dir = 6 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/captain/beach) +"bAZ" = ( +/obj/machinery/atmospherics/binary/pump, +/obj/machinery/camera/network/research{ + c_tag = "Research - Toxins Chamber Control"; + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/rnd/toxins) +"bBa" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/closet/emcloset, +/obj/machinery/camera/network/command{ + c_tag = "Command - Port Bridge Entry"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"bBf" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/spline/plain/black{ + dir = 10; + icon_state = "spline_plain" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"bBp" = ( +/obj/structure/closet/secure_closet/medical_sierrasenior, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"bBr" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"bBv" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"bBL" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/rnd/entry) +"bBQ" = ( +/obj/floor_decal/steeldecal/steel_decals9, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"bBS" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"bBT" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/glass/security{ + name = "Suits Storage" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/suits) +"bBU" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/floor_decal/corner/green/half{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"bCj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"bCk" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/open, +/area/solar/port) +"bCl" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"bCq" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/no_grille, +/turf/simulated/floor/plating, +/area/quartermaster/hangar/upper) +"bCu" = ( +/obj/paint/hull, +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/turf/simulated/wall/ocp_wall, +/area/vacant/prototype/engine) +"bCN" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"bCP" = ( +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers, +/obj/structure/cable{ + d1 = 32; + d2 = 2; + icon_state = "32-2" + }, +/obj/structure/lattice, +/obj/structure/disposalpipe/down{ + dir = 2 + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/open, +/area/maintenance/bridgedeck/port) +"bCU" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/expedition/eva) +"bCV" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/space, +/area/space) +"bDc" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"bDm" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/corner/black/mono, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/hos/cobed) +"bDn" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/waterstore) +"bDp" = ( +/obj/floor_decal/corner/grey{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/computer/air_control{ + input_tag = "CO24p_in"; + name = "Propellent Supply Control"; + output_tag = "CO24p_out"; + sensor_name = "Tank"; + sensor_tag = "ReacEngCO24" + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"bDs" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo) +"bDA" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"bDC" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/structure/curtain/open/bed, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"bDH" = ( +/obj/machinery/stasis_cage, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"bDI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft_stairwell) +"bDK" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"bDU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + id_tag = "xenobioa1"; + name = "Containment Blast Doors"; + pixel_x = -6; + pixel_y = 21; + req_access = list("ACCESS_RESEARCH") + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"bDX" = ( +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"bEf" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/atmos) +"bEl" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/spline/fancy/black/corner, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/spline/fancy/black, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"bEn" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"bEp" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"bEx" = ( +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/armory/lobby) +"bEB" = ( +/obj/random/closet, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftport) +"bEG" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/security{ + name = "Security Checkpoint"; + req_access = list(list("ACCESS_SECURITY","ACCESS_FORENSICS")); + secured_wires = 1; + autoset_access = 0 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/security/sierra/dockcheck) +"bEM" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/turf/simulated/wall/prepainted, +/area/crew_quarters/galley) +"bEP" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"bEV" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_north = 1; + tag_south = 2; + tag_west = 3 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"bEX" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/material/ashtray/bronze, +/obj/random/smokes, +/obj/machinery/camera/network/second_deck{ + c_tag = "Actors - Stage"; + dir = 1 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor/stage) +"bFd" = ( +/obj/decal/cleanable/dirt, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/vacant/sauna) +"bFf" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "petrov_shuttle_pump" + }, +/obj/floor_decal/techfloor, +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/petrov/airlock) +"bFk" = ( +/obj/structure/bed/chair/office/green{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"bFm" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/item/device/flashlight/lamp{ + pixel_y = 14; + pixel_x = -5 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"bFp" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/shoes/dress, +/obj/item/clothing/under/suit_jacket/charcoal, +/obj/item/clothing/under/suit_jacket/charcoal, +/obj/item/clothing/under/suit_jacket/charcoal, +/obj/item/clothing/under/suit_jacket/charcoal, +/obj/item/clothing/gloves/white, +/obj/item/clothing/gloves/white, +/obj/item/clothing/gloves/white, +/obj/item/clothing/gloves/white, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"bFr" = ( +/obj/floor_decal/spline/plain/black{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"bFt" = ( +/obj/floor_decal/chapel{ + dir = 8 + }, +/obj/structure/bed/chair/pew/mahogany, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"bFA" = ( +/obj/machinery/status_display, +/turf/simulated/wall/prepainted, +/area/hallway/primary/fourthdeck/central_stairwell) +"bFE" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"bFP" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"bFR" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"bFT" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"bFX" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/green/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics/third_deck_storage) +"bFZ" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/rd/cobed) +"bGa" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/binary/pump/on{ + dir = 4; + target_pressure = 200 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/solar/bridge_port) +"bGt" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"bGu" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft) +"bGv" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/bed/chair/padded/red{ + dir = 4 + }, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"bGx" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"bGC" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/handrail{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"bGK" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"bGO" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/item/stack/material/steel/ten, +/obj/item/stack/material/steel/ten, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"bGP" = ( +/obj/floor_decal/borderfloor, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"bGR" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d1starboard) +"bGS" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"bGZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"bHa" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/floor_decal/corner/blue/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 6 + }, +/obj/structure/closet/secure_closet/white_sierra{ + name = "secure evidence locker" + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/forensic/lab) +"bHf" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated/dark, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/bridge/hallway) +"bHl" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"bHq" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/maintenance/waterstore) +"bHs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 9 + }, +/turf/simulated/wall/r_wall/hull, +/area/space) +"bHt" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"bHJ" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"bHS" = ( +/obj/structure/bed/sofa/r/blue{ + dir = 8 + }, +/obj/floor_decal/carpet/red, +/obj/floor_decal/carpet/red{ + dir = 4 + }, +/obj/floor_decal/carpet/red{ + dir = 6 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/captain/beach) +"bIg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/grey/border, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod3/station) +"bIo" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"bIy" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/obj/machinery/status_light{ + id_tag = "ReacEng1"; + name = "Deck Four Starboard status indicator"; + pixel_x = -8; + pixel_y = 25 + }, +/obj/machinery/status_light{ + id_tag = "ReacEng3"; + name = "Deck One Starboard status indicator"; + pixel_x = -8; + pixel_y = 34 + }, +/obj/machinery/status_light{ + id_tag = "ReacEng4"; + name = "Deck One Port status indicator"; + pixel_x = 8; + pixel_y = 34 + }, +/obj/machinery/status_light{ + id_tag = "ReacEng2"; + name = "Deck Four Port status indicator"; + pixel_x = 8; + pixel_y = 25 + }, +/turf/simulated/floor/plating, +/area/engineering/fuelbay) +"bIO" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/starboard) +"bIP" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloorblack, +/turf/simulated/floor/tiled/dark, +/area/tcommsat/computer) +"bIS" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"bIT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/random/trash, +/turf/simulated/floor/tiled, +/area/maintenance/abandoned_hydroponics) +"bIW" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"bJb" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"bJf" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/hangar) +"bJj" = ( +/obj/machinery/atmospherics/unary/tank/air, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"bJm" = ( +/obj/floor_decal/corner/darkblue{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/half{ + dir = 4 + }, +/obj/random/vendor{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"bJw" = ( +/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/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"bJA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/external/glass/bolted/cycling{ + frequency = 1380; + id_tag = "skipjack_shuttle_dock_airlock_inner"; + name = "Docking Port Airlock" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"bJB" = ( +/obj/structure/table/standard, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/recharger, +/obj/machinery/camera/network/command{ + c_tag = "Command - Cyborg Upload"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_cyborg_upload) +"bJC" = ( +/obj/floor_decal/techfloor, +/obj/machinery/light, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/machine/jukebox_custom, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"bJI" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"bJJ" = ( +/obj/structure/table/standard, +/obj/item/clothing/shoes/swimmingfins, +/obj/item/clothing/shoes/swimmingfins, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level2) +"bJM" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar/upper) +"bJP" = ( +/obj/machinery/constructable_frame/machine_frame, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"bJT" = ( +/obj/structure/catwalk, +/turf/simulated/open, +/area/rnd/xenobiology/water_cell) +"bKc" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/spline/plain/black{ + dir = 1; + icon_state = "spline_plain" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"bKi" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"bKj" = ( +/obj/machinery/light, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lightgrey/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"bKp" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/forensic/lab) +"bKt" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/railing/mapped, +/obj/item/tank/oxygen_yellow, +/turf/simulated/floor/plating, +/area/vacant/cargo) +"bKy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/access_button/airlock_interior{ + master_tag = "solar_port"; + name = "interior access button"; + pixel_x = 12; + pixel_y = -19; + req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"bKC" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"bKF" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/compactor) +"bKH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/table/standard, +/obj/item/book/manual/hydroponics_pod_people, +/obj/item/material/minihoe, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"bKK" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/item/storage/box/donut, +/obj/machinery/recharger, +/obj/machinery/button/windowtint{ + dir = 4; + id = "forensicswindow"; + pixel_x = -22 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Detectives - Office"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"bKP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/random/soap, +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"bKT" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/blue/border, +/obj/machinery/light, +/obj/machinery/computer/modular/preset/security{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/forensic/lab) +"bKY" = ( +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/closet/walllocker{ + pixel_x = 28 + }, +/obj/item/storage/box/latexgloves, +/obj/item/storage/box/handcuffs, +/obj/item/storage/box/handcuffs, +/obj/item/storage/box/flashbangs, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/armory) +"bLk" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/industrial/danger{ + dir = 6 + }, +/obj/machinery/vending/sol, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"bLn" = ( +/obj/structure/table/standard, +/obj/item/storage/firstaid/regular, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"bLr" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/storage2) +"bLw" = ( +/obj/floor_decal/carpet, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/carpet, +/area/crew_quarters/cafe/upper) +"bLy" = ( +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"bLB" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/empty, +/turf/simulated/floor/reinforced, +/area/turret_protected/ai_teleport) +"bLD" = ( +/obj/machinery/photocopier, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/office) +"bLR" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/folder/blue, +/obj/item/stamp/captain, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"bLS" = ( +/obj/structure/bed/chair/comfy/purple{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sleep/bunk) +"bLT" = ( +/obj/machinery/atmospherics/unary/vent_pump/tank{ + external_pressure_bound = 0; + external_pressure_bound_default = 0; + id_tag = "test_xenoflora_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0 + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/xenoflora) +"bLU" = ( +/obj/item/beach_ball, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"bLZ" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red, +/obj/structure/railing/mapped, +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"bMl" = ( +/obj/structure/closet/secure_closet/security/sierra, +/obj/structure/sign/poster{ + pixel_y = -32 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"bMA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/machinery/navbeacon/sierra/FD_forehallway2, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/fore) +"bMC" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Third Deck Subgrid"; + name_tag = "Third Deck Subgrid" + }, +/obj/machinery/power/apc/critical{ + name = "north bump"; + pixel_y = 21; + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/substation/thirddeck) +"bMD" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/machinery/keycard_auth/sierra{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/folder/blue, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"bMH" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"bMJ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"bMV" = ( +/obj/machinery/power/smes/buildable{ + charge = 5e+006; + input_attempt = 1; + input_level = 250000; + output_attempt = 1; + output_level = 250000 + }, +/obj/structure/cable/cyan, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/turret_protected/ai) +"bMX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"bMY" = ( +/obj/structure/bed/sofa/r/brown{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/actor/stage) +"bNd" = ( +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/heads/captain/secret_room) +"bNj" = ( +/obj/structure/sign/warning/docking_area, +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/docking) +"bNl" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/closet/secure_closet/security/sierra/cadet, +/obj/structure/sign/poster{ + pixel_x = -32 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Equipment"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"bNq" = ( +/obj/machinery/portable_atmospherics/canister/helium, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins/storage) +"bNu" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"bNz" = ( +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/structure/bed/chair/shuttle{ + dir = 1 + }, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/escape_pod/escape_pod7/station) +"bNB" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/paper_bin, +/obj/item/sticky_pad/random, +/obj/item/pen, +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"bNC" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/accessory/toggleable/hawaii/random, +/obj/random/clothing, +/obj/random/gloves, +/obj/random/glasses, +/obj/random/action_figure, +/obj/random/plushie, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/under/harness, +/obj/item/clothing/under/swimsuit/black, +/obj/item/clothing/under/shorts/black, +/obj/item/clothing/under/shorts/jeans/female, +/obj/item/clothing/under/hazard, +/obj/item/clothing/under/frontier, +/obj/item/clothing/under/blazer, +/turf/simulated/floor/wood/walnut, +/area/vacant/cargo) +"bNE" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/navbeacon/sierra/TD_fore91, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 8; + name = "Commissary"; + sort_type = "Commissary" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"bNH" = ( +/obj/structure/barricade, +/obj/machinery/door/airlock{ + name = "Abandoned Room" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/vacant/sauna) +"bNJ" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"bOd" = ( +/obj/structure/table/steel, +/obj/item/clothing/gloves/thick, +/obj/item/clothing/mask/gas/budget, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/compactor) +"bOf" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"bOh" = ( +/obj/structure/table/glass, +/obj/item/storage/box/fingerprints, +/obj/item/storage/box/fingerprints, +/obj/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/floor_decal/corner/blue/border{ + dir = 10 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Detectives - Lab"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/forensic/lab) +"bOr" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/range) +"bOt" = ( +/obj/floor_decal/ntlogo{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/rnd/entry) +"bOx" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/hallway) +"bOy" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/hull, +/area/engineering/atmos/bridge) +"bOD" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/compactor) +"bOL" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"bON" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"bOZ" = ( +/obj/machinery/airlock_sensor/airlock_exterior{ + id_tag = "xenohight_airlock_exterior_sensor"; + master_tag = "xenohight_airlock"; + pixel_x = 1; + pixel_y = -24; + req_access = list("ACCESS_XENOBIO") + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/obj/machinery/camera/network/research{ + c_tag = "Xenobiology - Entry"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/storage2) +"bPa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"bPb" = ( +/obj/structure/table/standard, +/obj/machinery/light/small, +/obj/item/paper/travelvisa{ + desc = "A flimsy piece of laminated cardboard issued by the Sol Central Government. It's look's damaged" + }, +/turf/simulated/floor/tiled/monotile, +/area/vacant/cargo) +"bPd" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"bPm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"bPp" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 2; + name = "Security Checkpoint" + }, +/obj/machinery/door/window/southleft{ + autoset_access = 0; + dir = 1; + name = "Security Checkpoint" + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "hangar_checkpoint_shutters"; + name = "Hangar Deck Checkpoint Shutters"; + opacity = 0 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf/steel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/security/sierra/dockcheck) +"bPt" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d3starboard) +"bPu" = ( +/obj/structure/closet/coffin/wooden, +/obj/floor_decal/corner/black/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/mortuary) +"bPB" = ( +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "iaaright" + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"bPC" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/structure/filingcabinet/chestdrawer, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"bPD" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"bPF" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/galley) +"bPH" = ( +/obj/structure/bookcase, +/obj/item/book/manual/military_law, +/obj/item/book/manual/nt_sop, +/obj/item/book/manual/nt_tc, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"bPX" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/floor_decal/industrial/traffic/corner{ + dir = 4 + }, +/obj/structure/cable/green, +/obj/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"bQa" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 6 + }, +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d1port) +"bQc" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"bQg" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"bQm" = ( +/turf/simulated/floor/reinforced, +/area/space) +"bQn" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/wallframe_spawn/reinforced/polarized{ + id = "cap_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/captain) +"bQo" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/item/storage/box/cups, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"bQq" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/wood, +/area/maintenance/firstdeck/forestarboard) +"bQy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"bQA" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"bQH" = ( +/obj/structure/closet/secure_closet/engineering_senior, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"bQM" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft_stairwell) +"bQU" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/bridgedeck/port) +"bQW" = ( +/obj/structure/table/woodentable/mahogany, +/obj/item/storage/bible/tanakh, +/obj/item/storage/bible/aqdas, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"bQZ" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "xenobotany_access_maintaince"; + name = "Xenobotany Lab Access Console"; + req_access = list("ACCESS_XENOBIO","ACCESS_RESEARCH"); + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/xenobiology/xenoflora) +"bRb" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"bRc" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"bRd" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 4; + display_name = "First Deck Auxillary Dock"; + id_tag = "fd_starboard"; + name = "First Deck Starboard Airlock Controller"; + pixel_x = -20; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "fd_starboard_pump" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"bRg" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"bRh" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"bRk" = ( +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/airless, +/area/solar/starboard) +"bRm" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"bRx" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"bRI" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/mining, +/obj/machinery/door/firedoor, +/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/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition) +"bRN" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"bRQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"bRV" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/thirddeck/starboard) +"bSd" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe) +"bSo" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"bSx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"bSE" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"bSH" = ( +/obj/machinery/biogenerator, +/obj/floor_decal/corner/green/three_quarters{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "xenobotany_access"; + name = "Xenobotany Lab Access Console"; + req_access = list("ACCESS_XENOBIO","ACCESS_RESEARCH"); + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"bSJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"bST" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/machinery/alarm/warm{ + dir = 4; + pixel_x = -24; + req_access = list(); + target_temperature = 398.15; + temperature = 343.15 + }, +/obj/structure/bed/sauna_bench/middle, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sauna) +"bSU" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"bTg" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"bTs" = ( +/obj/floor_decal/industrial/traffic{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"bTH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"bTJ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"bTK" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"bTN" = ( +/obj/structure/window/basic{ + dir = 1 + }, +/obj/structure/hygiene/drain, +/obj/structure/hygiene/shower{ + dir = 4 + }, +/obj/machinery/door/window/eastright, +/obj/structure/curtain/open/shower, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/obj/item/bikehorn/rubberducky, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals10, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/breakroom) +"bTO" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/substation/seconddeck) +"bUb" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"bUc" = ( +/obj/machinery/power/apc/super/critical{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/cyan, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"bUe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"bUh" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"bUE" = ( +/obj/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"bUM" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ + dir = 8; + icon_state = "map" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techmaint, +/area/turret_protected/ai_teleport) +"bUO" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"bUP" = ( +/obj/machinery/shieldgen, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"bUQ" = ( +/obj/floor_decal/corner/darkblue/mono, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"bUR" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "escape_pod_1_pump" + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/grey/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod1/station) +"bUX" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "xenobio4"; + name = "Containment Blast Doors" + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level1) +"bUY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/carpet/green, +/area/crew_quarters/cafe) +"bVg" = ( +/obj/floor_decal/techfloor/corner, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai_upload) +"bVl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/actor) +"bVu" = ( +/obj/floor_decal/corner/black/bordercorner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"bVv" = ( +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/docking) +"bVw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai_cyborg_upload) +"bVA" = ( +/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/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/seconddeck/aft_stairwell) +"bVF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techmaint, +/area/security/sierra/evidence) +"bVO" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"bVP" = ( +/obj/structure/dispenser/oxygen, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/port) +"bVR" = ( +/obj/item/contraband/poster, +/obj/item/contraband/poster, +/obj/item/contraband/poster, +/obj/item/contraband/poster, +/obj/item/device/paicard, +/obj/item/device/paicard, +/obj/random/ironing_board_item, +/obj/item/ironing_iron, +/obj/item/device/toner, +/obj/structure/closet/crate, +/obj/item/storage/box/donkpocket_mixed, +/obj/floor_decal/spline/plain/yellow, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"bWa" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/grey/border, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod4/station) +"bWf" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"bWn" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"bWo" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/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/dark/monotile, +/area/medical/sleeper) +"bWr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/breakroom) +"bWy" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"bWz" = ( +/obj/item/stool/padded/red, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"bWJ" = ( +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"bWL" = ( +/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/structure/bed/chair/padded/red{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"bWQ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light/spot, +/obj/structure/table/standard, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/reagent_containers/spray/plantbgone, +/obj/floor_decal/corner/green/three_quarters, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"bWT" = ( +/turf/simulated/floor/tiled/dark, +/area/bridge) +"bWY" = ( +/obj/floor_decal/corner/darkblue/full, +/obj/floor_decal/corner/black/half{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/item/storage/slide_projector, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"bXa" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"bXc" = ( +/obj/structure/railing/mapped, +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"bXg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"bXn" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/medical/equipstorage) +"bXq" = ( +/obj/machinery/light, +/turf/simulated/floor/carpet, +/area/chapel/main) +"bXs" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/closet/crate/bin, +/turf/simulated/floor/wood/walnut, +/area/vacant/dormintories) +"bXv" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"bXB" = ( +/turf/simulated/floor/plating, +/area/exploration_shuttle/power) +"bXC" = ( +/obj/machinery/light, +/obj/machinery/suit_cycler/medical/alt, +/obj/floor_decal/industrial/outline/green, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"bXI" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/aft) +"bXJ" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 1 + }, +/obj/structure/sign/directions/med{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"bXN" = ( +/obj/paint/hull, +/turf/simulated/wall/ocp_wall, +/area/vacant/prototype/engine) +"bXT" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/seconddeck/aftport) +"bXW" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/table/woodentable/walnut, +/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/crew_quarters/dungeon_master_lounge) +"bXZ" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/plating, +/area/shuttle/petrov/scan) +"bYb" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "firingspace"; + name = "Firing Range Shields" + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"bYl" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/machinery/rotating_alarm/security_alarm{ + pixel_y = 13 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"bYu" = ( +/obj/floor_decal/corner/green/border, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"bYy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"bYC" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"bYQ" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/airless, +/area/space) +"bYU" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/barrier, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"bYX" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"bZf" = ( +/obj/structure/largecrate, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"bZp" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/full{ + id = "rd_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/rd) +"bZF" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/space) +"bZH" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/structure/sign/warning/nosmoking_1{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/canister) +"bZL" = ( +/obj/structure/sign/nanotrasen, +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/docking) +"bZR" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"bZT" = ( +/obj/machinery/button/mass_driver{ + dir = 1; + id_tag = "enginecore"; + name = "Emergency Core Eject"; + pixel_x = 4; + pixel_y = -20 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/window/northleft{ + autoset_access = 0; + name = "emergency core eject"; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for engine core."; + dir = 1; + id_tag = "EngineVent"; + name = "Engine Ventillatory Control"; + pixel_x = -8; + pixel_y = -20; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/machinery/button/alternate/door/bolts{ + desc = "A remote control-switch for the engine core airlock hatch bolts."; + dir = 4; + id_tag = "engine_access_hatch"; + name = "Engine Hatch Bolt Control"; + pixel_x = -22; + pixel_y = -8; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 10 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/button/blast_door{ + desc = "A switch designed to vent all gasses from the engine room into space. Press it if there is a fire in the engine room."; + dir = 4; + id_tag = "engineroomvent"; + name = "Emergency Engine Room Vents"; + pixel_x = -22; + pixel_y = 4; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/machinery/button/blast_door{ + desc = "WARNING! Opening blast doors while reactor is operating, may cause meltdown."; + id_tag = "SupermatterDoor"; + name = "Supermatter Access Blast Doors"; + pixel_y = -8; + req_access = list("ACCESS_ENGINEERING"); + pixel_x = -32; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"bZU" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/structure/window/boron_reinforced{ + dir = 4 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d1port) +"bZW" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/power) +"bZZ" = ( +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/office) +"cac" = ( +/obj/structure/table/woodentable/walnut, +/obj/structure/window/reinforced/polarized{ + id = "cap_room_window"; + dir = 4 + }, +/obj/item/toy/sierramodel, +/obj/floor_decal/carpet/blue{ + dir = 1 + }, +/obj/floor_decal/carpet/blue{ + dir = 4 + }, +/obj/floor_decal/carpet/blue{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/captain) +"cae" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/fore) +"caf" = ( +/turf/simulated/floor/tiled/techmaint, +/area/storage/tech) +"cag" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"cam" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"cas" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/constructable_frame/computerframe, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"cau" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/sign/warning/pods/west{ + pixel_x = 32; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"cav" = ( +/obj/structure/closet/crate/freezer/rations, +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod2/station) +"caC" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "guppy_shield_left"; + name = "Window Shield" + }, +/obj/paint_stripe/yellow, +/turf/simulated/floor/plating, +/area/guppy_hangar/start) +"caJ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"caR" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "toxin_lab_access_outer"; + name = "Toxin Lab Access" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"caZ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"cbd" = ( +/obj/floor_decal/corner/purple/diagonal, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"cbm" = ( +/obj/structure/railing/mapped, +/obj/machinery/shieldgen, +/obj/structure/sign/warning/pods/south{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"cbr" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"cbu" = ( +/obj/structure/bed/chair/shuttle/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/cockpit) +"cbw" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/closet/secure_closet/hydroponics_sierra, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/green/border{ + dir = 9 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics/third_deck_storage) +"cbC" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/substation/firstdeck) +"cbF" = ( +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"cbL" = ( +/obj/structure/bed/chair/padded/purple{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"cbO" = ( +/obj/item/clothing/suit/storage/hooded/wintercoat/engineering, +/obj/item/clothing/suit/storage/hooded/wintercoat/engineering, +/obj/structure/table/rack{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"cbR" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/structure/sign/deck/first{ + pixel_y = 35 + }, +/obj/structure/sign/directions/security{ + pixel_y = 24; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"cbV" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"ccc" = ( +/obj/structure/bed/chair/padded/purple, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"ccj" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"ccq" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"ccI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"ccL" = ( +/obj/shuttle_landmark/admin/out, +/turf/space, +/area/space) +"ccN" = ( +/obj/structure/table/rack{ + pixel_x = 2 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/item/gun/launcher/syringe, +/obj/item/storage/box/syringegun, +/obj/item/storage/box/syringegun, +/obj/item/storage/box/syringes, +/obj/item/storage/box/syringes, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"ccO" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"ccQ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"ccR" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"ccS" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"cde" = ( +/obj/structure/closet/cabinet, +/obj/floor_decal/corner/red/diagonal, +/obj/decal/cleanable/flour, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"cdg" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + target_pressure = 200 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"cdk" = ( +/obj/machinery/vitals_monitor, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/structure/sign/warning/nosmoking_1{ + desc = "A warning sign which reads 'NO SMOKING'. Someone has scratched a variety of crude words in gutter across the entire sign."; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery) +"cdn" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/prison) +"cdt" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated/dark, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/bridge/hallway) +"cdw" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/atmos) +"cdz" = ( +/obj/floor_decal/industrial/traffic{ + dir = 8; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/rnd/office) +"cdG" = ( +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - Port Hallway"; + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"cdH" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/fore) +"cdM" = ( +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/egun, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory) +"cdP" = ( +/obj/floor_decal/corner/red, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"cdQ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"cdU" = ( +/obj/landmark/start, +/obj/structure/bed/chair/rounded/beige{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"cem" = ( +/obj/structure/table/steel, +/obj/item/device/flashlight/lantern, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftport) +"ceo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"cep" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"cex" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/cmo) +"ceA" = ( +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3starboard) +"ceF" = ( +/obj/structure/flora/ausbushes/palebush, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/grass/cut, +/area/hallway/primary/bridgedeck/center) +"ceI" = ( +/obj/floor_decal/corner/darkblue/half{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue{ + dir = 6 + }, +/obj/machinery/vending/sol{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"ceN" = ( +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#ff0000" + }, +/area/quartermaster/hangar/upper) +"ceS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 5 + }, +/obj/floor_decal/corner/purple{ + dir = 5 + }, +/obj/machinery/computer/air_control{ + input_tag = "fuel3p_in"; + name = "Fuel Supply Control"; + output_tag = "fuel3p_out"; + sensor_name = "Tank"; + sensor_tag = "ReacEngPhoron3" + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"ceT" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/research{ + autoset_access = 0; + name = "Petrov Access"; + req_access = list("ACCESS_HANGAR") + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"ceU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"ceZ" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/vacant/infirmary) +"cfi" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/engine_room) +"cfk" = ( +/obj/machinery/computer/rdconsole{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Research Director"; + dir = 1 + }, +/obj/item/storage/secure/safe{ + pixel_y = -24 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/heads/office/rd) +"cfl" = ( +/obj/machinery/light/spot, +/obj/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar) +"cfm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/bed/chair/office/light, +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"cfn" = ( +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"cfp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"cfs" = ( +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "iaaright" + }, +/obj/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/floor_decal/carpet/blue, +/obj/floor_decal/carpet/blue{ + dir = 10 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"cfx" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/exploration/storage) +"cfK" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"cfL" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/green/border, +/obj/structure/sign/directions/engineering{ + dir = 1; + pixel_y = -8; + pixel_x = 32 + }, +/obj/structure/sign/directions/supply{ + dir = 1; + pixel_y = -1; + pixel_x = 32 + }, +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck - Aft Stairwell"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft_stairwell) +"cfM" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/medical/wardhallway) +"cfP" = ( +/obj/machinery/mech_recharger, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/bluegrid, +/area/assembly/chargebay) +"cfQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"cfU" = ( +/obj/machinery/power/fusion_core/mapped{ + initial_id_tag = "aux_fusion_plant" + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"cge" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/multi_tile/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftport) +"cgh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"cgj" = ( +/obj/structure/table/woodentable/maple, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"cgl" = ( +/obj/machinery/light/spot, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"cgp" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"cgu" = ( +/obj/structure/closet/cabinet, +/obj/item/device/synthesized_instrument/trumpet, +/obj/item/clothing/mask/gas/sexyclown, +/obj/item/clothing/mask/gas/sexymime, +/obj/item/clothing/mask/gas/clown_hat, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor) +"cgD" = ( +/obj/structure/bed/chair/padded/teal{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/medical/sleeper) +"cgE" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/assembly/robotics) +"cgH" = ( +/obj/paint{ + color = "#353a42" + }, +/turf/simulated/wall/ocp_wall, +/area/rnd/toxins) +"cgK" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/civilian{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown3_2" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/aft) +"cgR" = ( +/obj/floor_decal/corner/green/half{ + dir = 8 + }, +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"chc" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/thirddeck/fore) +"chf" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/item/paper_bin{ + pixel_y = 11; + pixel_x = 8 + }, +/obj/item/pen, +/obj/item/material/kitchen/utensil/fork{ + pixel_y = 7; + pixel_x = -6 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"chg" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"chi" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/assembly/chargebay) +"cho" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/corner/green/half{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"chs" = ( +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/canister) +"chu" = ( +/obj/structure/holoplant, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"chE" = ( +/obj/floor_decal/corner/darkblue{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/half{ + dir = 1 + }, +/obj/machinery/light, +/obj/structure/bed/chair/padded/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"chU" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/tank/air{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod2/station) +"cii" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/hallway/primary/thirddeck/fore) +"cij" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow, +/obj/machinery/status_display{ + pixel_y = 32; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"cio" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/storage/primary) +"cis" = ( +/obj/fluid_mapped, +/obj/random/soap, +/mob/living/simple_animal/aquatic/fish/judge, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"ciu" = ( +/obj/floor_decal/corner/black/three_quarters{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/purple/bordercorner, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/ship) +"ciz" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ciB" = ( +/obj/machinery/atmospherics/unary/tank/air, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"ciF" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"ciL" = ( +/obj/structure/closet/crate/freezer, +/obj/structure/railing/mapped, +/obj/floor_decal/spline/plain/black{ + dir = 6; + icon_state = "spline_plain" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/decal/cleanable/dirt, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"ciM" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d1starboard) +"cjb" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/airlock) +"cjc" = ( +/obj/structure/table/rack, +/obj/item/modular_computer/pda/wrist, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tank, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/random/tech_supply, +/obj/item/storage/box/lights/led_neon, +/obj/machinery/camera/network/supply{ + c_tag = "Fourth Deck - Supply - Auxillary Warehouse"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"cjk" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/item/device/flashlight/lamp/green{ + pixel_x = -5; + pixel_y = 15 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/NT{ + pixel_y = -6; + pixel_x = 8 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"cjl" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/closet/secure_closet{ + name = "long term chamber locker"; + req_access = list("ACCESS_SECURITY") + }, +/obj/floor_decal/borderfloor/full, +/obj/floor_decal/industrial/hatch/orange, +/obj/machinery/button/blast_door{ + id_tag = "visiting_room_windows_shutters"; + name = "Brig's visiting room shutters"; + req_access = list("ACCESS_SECURITY"); + pixel_y = -6; + pixel_x = 21; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/brig) +"cjn" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"cjp" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/medical/chemistry) +"cjz" = ( +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner, +/obj/floor_decal/spline/fancy/black/corner, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"cjH" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"cjX" = ( +/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/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"cki" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"ckl" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/item/folder/nt, +/obj/item/folder/nt, +/obj/item/folder/red, +/obj/item/folder/yellow, +/obj/item/folder, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/blue/border, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"ckm" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"ckn" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"ckp" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"ckA" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"ckB" = ( +/obj/structure/table/standard, +/obj/machinery/vending/wallmed1{ + name = "Emergency NanoMed"; + pixel_x = -24; + dir = 4 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/device/robotanalyzer, +/obj/floor_decal/corner/grey_alt/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/assembly/robotics) +"ckL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"ckU" = ( +/obj/structure/catwalk, +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ckW" = ( +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/tcommsat/computer) +"cla" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"cld" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/atmospherics/valve/shutoff/supply, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"clg" = ( +/turf/simulated/wall/r_wall/hull, +/area/quartermaster/expedition) +"cll" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"clp" = ( +/obj/floor_decal/corner/lime/bordercorner{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"clw" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"clD" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/rotating_alarm/security_alarm{ + pixel_y = 13 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"clF" = ( +/obj/structure/lattice, +/obj/floor_decal/industrial/traffic{ + dir = 4 + }, +/obj/floor_decal/corner/black/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"clH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/crystal, +/area/crew_quarters/adherent) +"clM" = ( +/obj/structure/closet, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"clR" = ( +/obj/structure/bed/chair/armchair/black{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"clT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor/stage) +"clW" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/substation/bridgedeck) +"clZ" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"cma" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/red/bordercorner2, +/obj/structure/filingcabinet/chestdrawer{ + pixel_y = 2 + }, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/item/folder/red, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/forensic/lab) +"cmb" = ( +/obj/machinery/atmospherics/valve/digital, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"cmh" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"cmk" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/floodlight{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"cmm" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"cmr" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/quartermaster/exploration/eva) +"cmw" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"cmA" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"cmJ" = ( +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/papershredder, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"cmR" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"cnh" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/aft) +"cnj" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/door/window{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head) +"cno" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"cnp" = ( +/obj/floor_decal/corner/black/border, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hydroponics/third_deck_storage) +"cnr" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"cns" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"coc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"con" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"cos" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"cow" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"coB" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"coD" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/holocontrol) +"coE" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"coG" = ( +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/deckofficer) +"coH" = ( +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"coM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"coP" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/equipstorage) +"coY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"cpa" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/item/folder/blue, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"cpb" = ( +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"cpk" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/stock_parts/circuitboard/holodeckcontrol, +/obj/item/stock_parts/circuitboard/mech_recharger, +/obj/item/stock_parts/circuitboard/solar_control, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech) +"cpu" = ( +/turf/simulated/wall/walnut, +/area/crew_quarters/sauna) +"cpv" = ( +/obj/structure/table/standard, +/obj/machinery/microwave{ + pixel_y = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/office) +"cpw" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"cpO" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"cpQ" = ( +/obj/fluid_mapped, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/cistern) +"cpR" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/mineral/processing_unit, +/obj/machinery/conveyor{ + id = "mining_internal" + }, +/turf/simulated/floor, +/area/quartermaster/hangar) +"cpS" = ( +/obj/machinery/button/blast_door{ + id_tag = "borg"; + name = "Cyborg Upload Blast Doors"; + pixel_x = -26; + pixel_y = -6; + req_access = list("ACCESS_AI_UPLOAD") + }, +/obj/machinery/computer/drone_control{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"cpT" = ( +/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/wall/r_wall/hull, +/area/chapel/mortuary) +"cpV" = ( +/obj/floor_decal/industrial/danger{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"cqk" = ( +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"cqt" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck - Fore Hallway - Airlock" + }, +/obj/machinery/navbeacon/sierra/SD_fore4, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"cqv" = ( +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"cqB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"cqC" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/green/half{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"cqD" = ( +/obj/machinery/camera/network/command{ + c_tag = "Command - Chief Steward"; + dir = 8 + }, +/turf/simulated/floor/wood, +/area/command/chief_steward) +"cqT" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/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/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"cqV" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/computer/shuttle_control/lift/rndmaint, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"cqW" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"crm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/corner/darkblue/bordercorner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"cro" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/engineering/atmos) +"crr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"crs" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + dir = 4; + name = "Bridge Access"; + id_tag = "bridge_hallway_doors_starboadr" + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_6" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/hallway) +"crB" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/equipment) +"crD" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/pizzabox/meat{ + pixel_y = 10 + }, +/obj/machinery/light/small, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/cafe/upper) +"crE" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/structure/bed/chair/padded/red, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/fore) +"crG" = ( +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/exploration) +"crJ" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 8 + }, +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"crU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"crZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + target_pressure = 80 + }, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"csp" = ( +/obj/machinery/cryopod/robot{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"csw" = ( +/obj/machinery/washing_machine, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/laundry) +"csC" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Janitor Closet" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/storage) +"csD" = ( +/turf/simulated/open, +/area/assembly/office) +"csP" = ( +/obj/paint_stripe/blue, +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/airlock) +"csX" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"csZ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"ctg" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"cto" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/green/border{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 10 + }, +/obj/structure/sign/botany{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"ctu" = ( +/obj/structure/table/rack, +/obj/item/material/hatchet/machete, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/item/material/hatchet/machete, +/obj/item/material/hatchet/machete, +/obj/item/material/hatchet/machete, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/mauve/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"ctB" = ( +/obj/structure/catwalk, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"ctC" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"ctD" = ( +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"ctF" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + dir = 1; + id_tag = "guppy_shuttle_pump_out_internal" + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"ctI" = ( +/obj/structure/rubble, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"ctJ" = ( +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"ctW" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/obj/floor_decal/corner/black/three_quarters{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/ship) +"ctX" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/obj/floor_decal/snow, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/galley/freezer) +"cua" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"cub" = ( +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/machinery/hologram/holopad{ + pixel_x = 16 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"cuf" = ( +/obj/machinery/floodlight{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"cug" = ( +/obj/machinery/vending/robotics/sierra{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - Robotics Lab"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"cul" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/sign/warning/airlock{ + dir = 8; + pixel_x = 32 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"cur" = ( +/turf/simulated/open, +/area/hallway/primary/thirddeck/aft_stairwell) +"cus" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"cuD" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/rubble, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"cuI" = ( +/obj/machinery/disposal, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa) +"cuP" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition/storage) +"cuW" = ( +/obj/machinery/door/airlock/engineering{ + name = "Aft Starboard Solar Access"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar/starboard) +"cuX" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/machinery/conveyor_switch/oneway{ + id = "packageSort1" + }, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"cuY" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/vacant/dormintories) +"cvh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"cvk" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + dir = 1; + id_tag = "calypso_shuttle_pump" + }, +/obj/structure/handrail{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/exploration_shuttle/airlock) +"cvy" = ( +/obj/machinery/door/window/westright{ + name = "Xenoflora Environment"; + req_access = newlist() + }, +/obj/machinery/door/window/southright{ + dir = 4; + name = "Xenoflora Environment"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/xenoflora) +"cvC" = ( +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/xenoflora) +"cvM" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"cvN" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/firstdeck/centralstarboard) +"cvV" = ( +/obj/structure/bed/chair/padded/purple{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/entry) +"cvX" = ( +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen{ + pixel_x = -1 + }, +/obj/item/folder/red, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation/second) +"cvZ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/center) +"cwe" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/no_grille, +/turf/simulated/floor/plating, +/area/quartermaster/shuttlefuel) +"cwf" = ( +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/secure_closet/explorer, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration) +"cwp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 5 + }, +/turf/simulated/wall/r_wall/hull, +/area/engineering/engine_room) +"cwq" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"cwr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"cwu" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"cwv" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"cwy" = ( +/obj/machinery/seed_extractor, +/obj/floor_decal/corner/green/three_quarters{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"cwA" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"cwE" = ( +/obj/structure/table/standard, +/obj/random/firstaid, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod4/station) +"cwJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/wall/prepainted, +/area/maintenance/fourthdeck/aft) +"cwO" = ( +/obj/structure/closet/secure_closet/medical_sierra, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"cwT" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/porta_turret{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"cwY" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway) +"cxd" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = 6; + pixel_y = -21 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"cxi" = ( +/obj/machinery/radiocarbon_spectrometer, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/ship) +"cxm" = ( +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"cxp" = ( +/obj/structure/shuttle/engine/propulsion, +/obj/structure/shuttle/engine/heater{ + pixel_y = 32 + }, +/turf/simulated/floor/airless, +/area/shuttle/escape_pod/escape_pod2/station) +"cxr" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"cxs" = ( +/obj/structure/disposalpipe/sortjunction/untagged/flipped{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2, +/obj/machinery/light, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"cxt" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/constructable_frame, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"cxv" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"cxy" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"cxA" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/sign/emergonly{ + pixel_y = 32 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"cxF" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"cxG" = ( +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/exploration) +"cxH" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/largecrate, +/obj/random/trash, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"cxL" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/xenobiology/atmos) +"cxM" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/seconddeck) +"cxQ" = ( +/obj/floor_decal/borderfloorblack, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/bunk) +"cxR" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"cxT" = ( +/obj/item/storage/lunchbox/picnic/filled, +/obj/floor_decal/carpet/blue2, +/obj/floor_decal/carpet/blue2{ + dir = 4 + }, +/obj/floor_decal/carpet/blue2{ + dir = 6 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/garden_room) +"cxW" = ( +/obj/structure/table/standard, +/obj/random/tool, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"cxX" = ( +/obj/structure/catwalk, +/obj/structure/closet, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/mre/dessert, +/obj/random/plushie, +/obj/random/junk, +/obj/random/firstaid, +/obj/random/action_figure, +/obj/random/cash, +/obj/random/drinkbottle, +/obj/random/hat, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"cya" = ( +/obj/structure/table/rack, +/obj/item/device/scanner/mining, +/obj/item/device/scanner/mining, +/obj/item/device/scanner/mining, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/machinery/light, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/brown/border{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"cyb" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"cyc" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/blast_door{ + id_tag = "xenobio1"; + name = "Containment Blast Doors"; + pixel_x = -6; + req_access = list("ACCESS_RESEARCH") + }, +/obj/machinery/button/blast_door{ + id_tag = "xenobio1_vent"; + name = "Cell 1 Vent"; + pixel_x = 6; + req_access = list("ACCESS_RESEARCH") + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/item/storage/box/syringes{ + pixel_y = 15 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"cym" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"cyn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/carpet/green, +/turf/simulated/floor/carpet/green, +/area/medical/mentalhealth/therapyroom) +"cyr" = ( +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/floor_decal/corner/black/bordercorner, +/turf/simulated/floor/tiled, +/area/hydroponics/third_deck_storage) +"cyM" = ( +/obj/structure/flora/pottedplant/fern, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 6 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/cafe/upper) +"cyP" = ( +/obj/machinery/power/port_gen/pacman{ + sheets = 25 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"cyU" = ( +/obj/random_multi/single_item/space_rabbit, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"cyV" = ( +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"czb" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/fore) +"czd" = ( +/obj/structure/table/standard, +/obj/machinery/cell_charger, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"czn" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/vacant/mess) +"czD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/green, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/dungeon_master_lounge) +"czE" = ( +/obj/machinery/atmospherics/tvalve{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/medical/virology/atmos) +"czG" = ( +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"czH" = ( +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"czJ" = ( +/obj/structure/closet/l3closet/general, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"czN" = ( +/obj/structure/closet/crate, +/obj/item/stock_parts/circuitboard/smes, +/obj/item/stock_parts/circuitboard/smes, +/obj/item/stock_parts/smes_coil/super_io, +/obj/item/stock_parts/smes_coil/super_io, +/obj/item/stock_parts/smes_coil/super_capacity, +/obj/item/stock_parts/smes_coil/super_capacity, +/obj/item/stock_parts/smes_coil, +/obj/item/stock_parts/smes_coil, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shield/thirddeck) +"czQ" = ( +/obj/structure/hygiene/sink{ + pixel_y = -12 + }, +/obj/floor_decal/corner/beige{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/border, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"czV" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/disposal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/green{ + dir = 6 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"czY" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/glass/science{ + name = "Expedition Prep"; + req_access = newlist() + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/exploration/briefing_room) +"cAa" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner, +/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" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"cAd" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"cAf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/catwalk, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"cAg" = ( +/obj/structure/filingcabinet/filingcabinet, +/obj/floor_decal/corner/yellow/half{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"cAl" = ( +/obj/structure/table/standard, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/surgical, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/xenobiology/level1) +"cAm" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/decal/cleanable/cobweb{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"cAu" = ( +/obj/machinery/computer/modular/preset/medical{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"cAC" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/substation/thirddeck) +"cAJ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/suits) +"cAK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/lime/bordercorner, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"cAO" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"cBf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - Central Hallway" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"cBg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"cBk" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/airlock_sensor{ + frequency = 1331; + id_tag = "rescue_shuttle_dock_airlock_sensor"; + master_tag = "rescue_shuttle_dock_airlock"; + pixel_x = -24; + pixel_y = 6 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/center) +"cBm" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/rotating_alarm/supermatter{ + pixel_y = 14 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"cBq" = ( +/obj/structure/catwalk, +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"cBt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + dir = 4; + frequency = 1380; + id_tag = "nuke_shuttle_dock_airlock_inner"; + name = "Docking Port Airlock" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"cBv" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/airlock/civilian{ + dir = 4; + name = "Security General Cabin"; + req_access = list("ACCESS_SEC_DOORS"); + autoset_access = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"cBw" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/captain/beach) +"cBz" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/techfloor/hole{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"cBD" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/photocopier/faxmachine{ + department = "Captain's reserve fax" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/heads/captain/secret_room) +"cBG" = ( +/obj/structure/table/steel, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"cBH" = ( +/obj/machinery/button/blast_door{ + id_tag = "chapel_shutters_md"; + name = "Last Way Shutter"; + pixel_x = 20; + pixel_y = 6; + req_access = list("ACCESS_CHAPEL_STORAGE"); + dir = 8 + }, +/obj/machinery/button/mass_driver{ + dir = 8; + id_tag = "chapel"; + name = "Last Way"; + pixel_y = -7; + pixel_x = 20 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"cBI" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"cBL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"cBM" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"cBP" = ( +/obj/machinery/photocopier, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/infirmreception) +"cBU" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/open, +/area/space) +"cCj" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins/storage) +"cCk" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/coin, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"cCu" = ( +/obj/machinery/power/apc/high{ + name = "north bump"; + pixel_y = -24 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dormintories) +"cCx" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ + id_tag = "engine_atmos_airlock"; + name = "Engine Room Airlock Controlls"; + pixel_y = 24; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"cCy" = ( +/obj/machinery/power/breakerbox/activated{ + RCon_tag = "Fourth Deck Substation Bypass" + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/fourthdeck) +"cCA" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dormintories) +"cCC" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger{ + pixel_y = 10; + pixel_x = 6 + }, +/obj/machinery/cell_charger{ + pixel_y = 1; + pixel_x = -2 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/guppy_hangar/start) +"cCD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + target_pressure = 80 + }, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"cCF" = ( +/turf/simulated/open, +/area/maintenance/seconddeck/aftport) +"cCT" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/camera/network/command{ + c_tag = "Telecommunications - Server Room"; + network = list("Command","Engineering") + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"cDf" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"cDm" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod3/station) +"cDo" = ( +/obj/structure/holoplant, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"cDr" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"cDv" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"cDy" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/window/reinforced, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"cDA" = ( +/obj/item/device/radio/intercom/department/medbay{ + dir = 1; + pixel_y = -28 + }, +/obj/floor_decal/corner/paleblue/bordercee{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"cDB" = ( +/obj/structure/flora/seaweed/glow, +/obj/fluid_mapped, +/turf/simulated/floor/beach/sand, +/area/rnd/xenobiology/level2) +"cDC" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/substation/bridgedeck) +"cDD" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"cDE" = ( +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"cDJ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/window/eastleft{ + name = "engineering front desk"; + dir = 1 + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "eng_lockdown_emg1"; + name = "Emergency Exit" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf/steel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/engineering_monitoring) +"cDS" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery) +"cDX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"cEa" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/solar/bridge_starboard) +"cEb" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"cEd" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/corner/green/half, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "hydroponics_space"; + name = "Space Shields"; + pixel_y = -21 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"cEt" = ( +/obj/machinery/door/airlock/hatch/maintenance/bolted{ + frequency = 1379; + id_tag = "prototype_exterior"; + name = "Fusion Maintenance" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/prototype/control) +"cEu" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"cEw" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"cEx" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Treatment Center"; + dir = 4; + pixel_y = 20 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"cEy" = ( +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/smes/buildable/preset/sierra/substation_full{ + RCon_tag = "Substation - Atmospherics" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_smes) +"cEB" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"cEL" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"cEN" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/seconddeck/central_stairwell) +"cEW" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/seconddeck/aftport) +"cFe" = ( +/obj/machinery/door/blast/regular/open{ + id_tag = "PetrovShield"; + name = "Petrov Blast Shutters" + }, +/obj/wallframe_spawn/reinforced/polarized{ + id = "rcheckinner_windows" + }, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/plating, +/area/shuttle/petrov/security) +"cFg" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"cFh" = ( +/obj/structure/cable/green{ + 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/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"cFi" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/green/border{ + dir = 10 + }, +/obj/structure/closet/emcloset, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics/third_deck_storage) +"cFl" = ( +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"cFo" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/cafe) +"cFs" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/blue/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"cFx" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/fore) +"cFA" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"cFG" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/cockpit) +"cFI" = ( +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"cFR" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"cFT" = ( +/obj/machinery/door/airlock/hatch{ + frequency = 1379; + id_tag = "engine_airlock_inner"; + name = "Engine Airlock Interior" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"cFV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1port) +"cGc" = ( +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"cGe" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/helium{ + start_pressure = 14999 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"cGg" = ( +/obj/structure/bed/chair/office/purple{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/rnd/development) +"cGi" = ( +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"cGn" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/landmark/start{ + name = "Captain" + }, +/obj/structure/bed/chair/rounded/blue{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/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/dark, +/area/bridge/meeting_room) +"cGp" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/hallway/primary/fourthdeck/central_stairwell) +"cGs" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/engine_smes) +"cGv" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"cGw" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/purple, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"cGE" = ( +/obj/floor_decal/corner/blue{ + dir = 10 + }, +/obj/machinery/computer/air_control{ + dir = 1; + input_tag = "o22p_in"; + name = "Oxygen Supply Control"; + output_tag = "o22p_out"; + sensor_name = "Tank"; + sensor_tag = "ReacEngOxygen2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"cGF" = ( +/obj/structure/table/standard, +/obj/item/storage/box/detergent, +/obj/item/storage/box/detergent, +/obj/item/ironing_iron, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/item/ironing_iron, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/laundry) +"cGH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"cGN" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/obj/machinery/status_display{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "skipjack_shuttle_pump" + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/grey/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod3/station) +"cGV" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"cGY" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"cHg" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_smes) +"cHi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/railing/mapped, +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"cHq" = ( +/obj/structure/table/woodentable/maple, +/obj/item/device/flashlight/lamp/green, +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/obj/floor_decal/carpet/purple{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Chapel - Office" + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/office) +"cHz" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 8 + }, +/obj/machinery/meter, +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"cHE" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"cHJ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 10 + }, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"cHK" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"cHN" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Entry Shutters" + }, +/obj/machinery/door/airlock/multi_tile/glass/medical{ + dir = 8; + id_tag = "MedbayInf"; + name = "Treatment Center" + }, +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"cHP" = ( +/obj/structure/table/woodentable, +/obj/item/airalarm_electronics, +/obj/item/airlock_electronics, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/turf/simulated/floor/wood, +/area/maintenance/firstdeck/forestarboard) +"cHR" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"cHZ" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/floor_decal/steeldecal/steel_decals6, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"cIe" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"cIi" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"cIj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"cIz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/junction, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"cIH" = ( +/obj/machinery/computer/modular/preset/medical{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/infirmreception) +"cIM" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"cIZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/orange, +/area/security/range) +"cJa" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry2) +"cJb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/forestarboard) +"cJc" = ( +/obj/structure/lattice, +/turf/simulated/wall/r_wall/hull, +/area/engineering/atmos) +"cJp" = ( +/obj/machinery/power/smes/buildable{ + RCon_tag = "Solar - Port" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"cJs" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"cJv" = ( +/turf/simulated/wall/prepainted, +/area/storage/auxillary/port) +"cJD" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ + dir = 4; + id_tag = "escape_pod_6"; + name = "escape pod six controller"; + pixel_x = -20; + tag_door = "escape_pod_6_hatch"; + frequency = 1380 + }, +/obj/structure/bed/chair/shuttle{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/escape_pod/escape_pod6/station) +"cJH" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + color = null; + dir = 4 + }, +/obj/floor_decal/corner/blue/border{ + dir = 4 + }, +/obj/machinery/optable, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"cJI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/window/brigdoor/northleft{ + name = "Quartermaster"; + req_access = newlist() + }, +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf{ + dir = 4 + }, +/obj/machinery/door/blast/shutters/open{ + name = "QM Office Shutters"; + id_tag = "qm_office" + }, +/turf/simulated/floor/plating, +/area/quartermaster/deckofficer) +"cJL" = ( +/obj/machinery/door/airlock/maintenance{ + dir = 4; + name = "Research Maintenance Access"; + req_access = newlist() + }, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"cJQ" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"cJV" = ( +/obj/floor_decal/corner/darkblue/full, +/obj/floor_decal/corner/black/three_quarters{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"cJX" = ( +/obj/structure/disposaloutlet, +/obj/machinery/shield_diffuser, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"cKb" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 5 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"cKg" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/assembly/robotics) +"cKo" = ( +/obj/structure/roller_bed, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/camera/network/medbay{ + c_tag = "Critical Wing - EMT Compartment"; + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/maintenance_equipstorage) +"cKr" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"cKt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/wall/prepainted, +/area/maintenance/fourthdeck/aft) +"cKy" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/item/reagent_containers/chem_disp_cartridge/coffee, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup, +/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ + id_tag = "engine_airlock"; + name = "Engine Room Airlock Controlls"; + pixel_x = 7; + pixel_y = 24; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -7; + pixel_y = 30 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"cKE" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/red, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"cKF" = ( +/obj/machinery/computer/ship/sensors, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"cKH" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/folder/blue, +/obj/item/folder/red, +/obj/item/folder, +/obj/item/folder/nt, +/obj/item/folder/yellow, +/obj/item/folder/white, +/obj/item/folder/nt, +/obj/item/folder/nt, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/office) +"cKJ" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition/storage) +"cKK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"cKL" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/lounge) +"cKO" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/closet/firecloset, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"cKS" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"cKU" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralport) +"cKZ" = ( +/obj/shuttle_landmark/escape_pod/start/pod6, +/obj/wallframe_spawn/reinforced/titanium, +/turf/simulated/floor/plating, +/area/shuttle/escape_pod/escape_pod6/station) +"cLf" = ( +/obj/structure/bookcase/manuals/medical, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"cLi" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"cLl" = ( +/obj/floor_decal/steeldecal/steel_decals6, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry2) +"cLp" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/firstdeck/foreport) +"cLq" = ( +/obj/structure/table/standard, +/obj/item/anobattery{ + pixel_x = -6; + pixel_y = 2 + }, +/obj/item/anobattery{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/anobattery{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/anobattery{ + pixel_x = 6; + pixel_y = 6 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"cLv" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 2 + }, +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/aiModule/solgov, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_cyborg_upload) +"cLx" = ( +/obj/structure/table/steel, +/obj/item/stack/material/wood/walnut{ + amount = 2 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftport) +"cLE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"cLG" = ( +/obj/structure/mopbucket, +/obj/item/mop, +/obj/floor_decal/industrial/hatch/yellow, +/obj/item/reagent_containers/glass/bucket, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/utility) +"cLH" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/tele_beacon, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"cLI" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2, +/obj/structure/holoplant, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"cLQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"cLT" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/machinery/papershredder, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"cLV" = ( +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/pen/red{ + pixel_x = 2; + pixel_y = 6 + }, +/obj/item/pen/blue{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/pen/crayon/yellow{ + desc = "A colourful crayon. Please refrain from eating it or putting it in your nose. This one is labeled 'Canary Yellow.'" + }, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/research{ + c_tag = "Research - Office"; + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/office) +"cMb" = ( +/obj/machinery/uniform_vendor, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/sleep/cryo/bridge) +"cMe" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood/corner, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"cMf" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/structure/bed/chair/comfy/beige{ + dir = 4 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/landmark/start, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"cMo" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "sd_starboard_pump" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"cMI" = ( +/obj/floor_decal/corner/darkblue, +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/bridge/storage) +"cMM" = ( +/obj/machinery/air_sensor/nacelle/fourth/co2, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d1port) +"cMN" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"cMY" = ( +/obj/machinery/computer/modular/preset/dock{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/quartermaster/hangar/upper) +"cNc" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/wallframe_spawn/reinforced/polarized/full{ + id = "hop_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/hop) +"cNg" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "EngineBlast"; + name = "Engine Monitoring Room Blast Doors" + }, +/turf/simulated/floor/plating, +/area/engineering/engine_monitoring) +"cNo" = ( +/obj/floor_decal/industrial/traffic{ + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/floor_decal/industrial/traffic{ + dir = 1; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/obj/shuttle_landmark/lift/rndmaint_top, +/turf/simulated/floor/tiled/techfloor, +/area/turbolift/rndmaint_lift) +"cNp" = ( +/obj/machinery/computer/modular/preset/engineering{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"cNv" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"cNA" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/light, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"cNF" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/floor_decal/corner/grey/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"cNK" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"cNO" = ( +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"cNP" = ( +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/floor_decal/techfloor/hole, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/foreport) +"cOd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/access_button/airlock_interior{ + master_tag = "sd_port"; + name = "interior access button"; + pixel_x = 24; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/machinery/door/airlock/external/glass/bolted/cycling{ + id_tag = "sd_port_inner"; + name = "Second Deck Port Airlock" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/foreport) +"cOj" = ( +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/medical) +"cOl" = ( +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + icon_state = "bordercolorcorner2"; + dir = 5 + }, +/obj/floor_decal/corner/paleblue/half{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/infirmary) +"cOm" = ( +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"cOn" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "ai_bridge_pump"; + dir = 1 + }, +/obj/machinery/light/small, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"cOt" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/cockpit) +"cOz" = ( +/obj/machinery/space_heater, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"cOC" = ( +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/airless, +/area/solar/starboard) +"cOG" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/bridgedeck/port) +"cOK" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/industrial/danger, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"cOL" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/r_titanium, +/area/guppy_hangar/start) +"cON" = ( +/obj/structure/closet/secure_closet/engineering_sierra, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"cOR" = ( +/obj/structure/table/standard, +/obj/item/cane{ + pixel_x = 4 + }, +/obj/item/cane{ + pixel_y = 2 + }, +/obj/item/cane{ + pixel_y = 5; + pixel_x = -1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/ward) +"cOX" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/catwalk, +/obj/structure/hygiene/drain, +/obj/structure/hygiene/shower{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"cOY" = ( +/obj/machinery/atmospherics/binary/pump, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/medical/virology/atmos) +"cOZ" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/machinery/rotating_alarm/supermatter{ + pixel_y = 14 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"cPc" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"cPg" = ( +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/item/device/flashlight/lamp/lava/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"cPv" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/tvalve{ + dir = 1; + icon_state = "map_tvalve1"; + state = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/xenobiology/atmos) +"cPA" = ( +/obj/machinery/suspension_gen, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/button/blast_door{ + id_tag = "mine_warehouse"; + name = "Storage Door Control"; + pixel_x = 6; + pixel_y = -24; + req_access = list(list("ACCESS_MINING","ACCESS_XENOARCH","ACCESS_EL")); + dir = 1 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -6; + pixel_y = -24 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"cPC" = ( +/obj/floor_decal/industrial/danger{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/suits) +"cPD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"cPG" = ( +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8; + icon_state = "techfloor_corners" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo) +"cPI" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/landmark/start{ + name = "Detective" + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/forensic/lab) +"cPK" = ( +/obj/structure/closet/l3closet/general, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/vacant/infirmary) +"cPM" = ( +/obj/machinery/psi_meter, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"cPY" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/forensic/lab) +"cQa" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + target_pressure = 200 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"cQb" = ( +/obj/structure/catwalk, +/obj/machinery/nav_light, +/turf/simulated/open, +/area/space) +"cQh" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 10 + }, +/obj/structure/closet/emcloset, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/sign/directions/engineering{ + dir = 8; + pixel_y = 24 + }, +/obj/structure/sign/deck/third{ + pixel_y = 35 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/center) +"cQn" = ( +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"cQo" = ( +/obj/machinery/door/firedoor, +/obj/machinery/navbeacon/sierra/SD_forehallway2, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_2" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/center) +"cQq" = ( +/obj/structure/table/standard, +/obj/random/powercell, +/obj/random/powercell, +/obj/random/powercell, +/obj/random/tech_supply, +/obj/machinery/recharger, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/corner/yellow/mono, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"cQD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"cQL" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"cQP" = ( +/obj/machinery/status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/engine_smes) +"cQR" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"cQT" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 9 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/gas) +"cQV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"cRc" = ( +/obj/structure/bed/chair/armchair/brown{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = 9; + pixel_y = -21 + }, +/obj/floor_decal/carpet/green, +/turf/simulated/floor/carpet/green, +/area/medical/mentalhealth/therapyroom) +"cRd" = ( +/turf/simulated/floor/wood, +/area/maintenance/firstdeck/forestarboard) +"cRe" = ( +/obj/structure/closet/walllocker{ + pixel_y = 28 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/vacant/cargo) +"cRn" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"cRq" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/thirddeck/center) +"cRr" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + name = "Supply to Bridge Air Storage" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"cRB" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"cRD" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/maintenance/seconddeck/aftstarboard) +"cRI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1331; + id_tag = "rescue_shuttle_dock_airlock_inner"; + name = "Docking Port Airlock" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/center) +"cRP" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/flora/ausbushes/genericbush, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/docking) +"cRT" = ( +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/development) +"cRX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"cRY" = ( +/obj/structure/table/rack, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/random/maintenance, +/obj/machinery/door/window/westleft{ + name = "Commissary rack"; + req_access = newlist() + }, +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/random/single/cola, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"cSd" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"cSj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"cSp" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"cSs" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"cSz" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"cSC" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"cSI" = ( +/obj/structure/table/steel, +/obj/item/storage/pill_bottle/tramadol, +/obj/item/storage/firstaid/o2{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/firstaid/fire{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/tank/oxygen_emergency_double, +/obj/item/tank/oxygen_emergency_double, +/obj/random/medical/lite, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/utility) +"cSW" = ( +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"cSZ" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/assembly/chargebay) +"cTe" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/bomb_supply, +/obj/random/bomb_supply, +/obj/random/bomb_supply, +/obj/random/bomb_supply, +/obj/random/bomb_supply, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/junk, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"cTj" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"cTo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 1; + target_pressure = 15000 + }, +/obj/machinery/button/blast_door{ + id_tag = "cChamber2pV"; + name = "Fourth Deck Port Chamber Vent"; + pixel_x = 8; + pixel_y = 24 + }, +/obj/machinery/button/blast_door{ + id_tag = "d2portnacelle"; + name = "Combustion Chamber Blast Door Control"; + pixel_x = -8; + pixel_y = 24 + }, +/obj/machinery/button/ignition{ + id_tag = "engines-2"; + pixel_y = 34 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"cTs" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/helium, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"cTv" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_x = 9; + pixel_y = 21 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"cTy" = ( +/obj/floor_decal/corner/yellow/mono, +/obj/machinery/vending/coffee{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar_stairs) +"cTL" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/hangar_stairs/upper) +"cTP" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"cTR" = ( +/obj/random/maintenance, +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/coin, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"cTV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"cUd" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/vending/snack{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/fore) +"cUe" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/floor_decal/corner/black/full, +/turf/simulated/floor/tiled/dark, +/area/command/bsa) +"cUh" = ( +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"cUn" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"cUz" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"cUD" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 8 + }, +/obj/structure/sign/warning/pods/south{ + dir = 4; + pixel_x = -32 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"cUI" = ( +/obj/structure/table/standard, +/obj/item/paper{ + pixel_y = 5 + }, +/obj/random/toy{ + pixel_y = -2; + pixel_x = -11 + }, +/obj/random/toy{ + pixel_y = 5; + pixel_x = 14 + }, +/obj/structure/sign/poster/nyc/wild_cargo{ + pixel_y = 32 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"cUK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"cUP" = ( +/obj/machinery/shield_diffuser, +/obj/machinery/door/airlock/external/glass/bolted/cycling{ + frequency = 1380; + id_tag = "merchant_shuttle_station_outer"; + name = "Docking Port Airlock" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"cUR" = ( +/obj/machinery/atmospherics/binary/circulator{ + anchored = 1; + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"cUU" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"cUY" = ( +/obj/shuttle_landmark/sierra/deck4/guppy, +/turf/space, +/area/space) +"cVc" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/westleft{ + dir = 2; + name = "Medical Reception" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Entry Shutters" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/infirmreception) +"cVd" = ( +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "nuke_shuttle_dock_airlock_pump" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"cVl" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + controlled = 0; + internal_pressure_bound = 35000; + internal_pressure_bound_default = 35000; + pressure_checks = 2; + pressure_checks_default = 2; + use_power = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/thruster/d3starboard) +"cVp" = ( +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"cVq" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"cVB" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/device/flashlight/lamp/green{ + pixel_x = -6; + pixel_y = 13 + }, +/obj/floor_decal/corner/black/mono, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/hos/cobed) +"cVE" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "d1portnacelle" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"cVF" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/obj/item/storage/mirror{ + pixel_y = 32 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"cVG" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/laundry) +"cVI" = ( +/obj/floor_decal/industrial/traffic{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"cWb" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/titanium, +/area/shuttle/petrov/cockpit) +"cWd" = ( +/obj/machinery/door/blast/regular/escape_pod{ + id_tag = "escape_pod_11" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/maintenance/exterior) +"cWh" = ( +/obj/structure/closet/crate/internals/fuel, +/obj/floor_decal/spline/plain/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"cWn" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/parts, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"cWt" = ( +/obj/structure/bed/chair/office/teal{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"cWv" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"cWz" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/floor_decal/carpet/green{ + dir = 8 + }, +/turf/simulated/floor/carpet/green, +/area/medical/mentalhealth/therapyroom) +"cWK" = ( +/obj/structure/bed/chair/office/green{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"cXg" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall/hull, +/area/turret_protected/ai_maint) +"cXj" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"cXk" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"cXm" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/sauna) +"cXp" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/bed/chair/wood/maple{ + dir = 4 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"cXs" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"cXt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/water_cell) +"cXu" = ( +/obj/structure/table/standard, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/bodybag/rescue/loaded, +/obj/item/bodybag/rescue/loaded, +/obj/item/bodybag/rescue/loaded, +/obj/item/reagent_containers/spray/cleaner, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/medical/staging) +"cXB" = ( +/obj/structure/closet/secure_closet/xenoarchaeologist_sierra, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"cXD" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"cXE" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "td_port" + }, +/obj/structure/catwalk, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "td_port"; + name = "Third Deck Port Airlock Controller"; + req_access = list("ACCESS_EXTERNAL"); + dir = 4; + pixel_x = -20 + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"cXG" = ( +/obj/floor_decal/spline/fancy/black, +/obj/structure/closet/fridge/meat, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/galley/freezer) +"cXI" = ( +/obj/machinery/door/blast/shutters{ + dir = 8; + id_tag = "qm_warehouse"; + name = "Warehouse Shutters" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"cXU" = ( +/obj/floor_decal/spline/fancy/black/corner{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black/corner, +/obj/machinery/door/airlock/civilian{ + name = "Closed" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/firstdeck) +"cXW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 5 + }, +/obj/floor_decal/corner/grey{ + dir = 10 + }, +/obj/machinery/light/small, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"cYb" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/obj/item/rolled_towel/green_stripped, +/obj/item/rolled_towel/blue_stripped, +/obj/item/rolled_towel/red_stripped, +/obj/item/rolled_towel/pink_stripped, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"cYd" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/guppy_hangar/start) +"cYe" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"cYk" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "xenobio4_vent"; + name = "Chamber Vent" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"cYn" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance, +/obj/random/masks, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"cYp" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/random/junk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"cYq" = ( +/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/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/security{ + name = "HOS' waiting room" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"cYC" = ( +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ + dir = 4; + id_tag = "escape_pod_3_berth"; + name = "escape pod three berth controller"; + pixel_x = -20; + pixel_y = 32; + tag_door = "escape_pod_3_berth_hatch"; + frequency = 1380 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"cYE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"cYH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation) +"cYM" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/grey/border, +/obj/floor_decal/corner/grey/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/grey/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"cYN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"cYQ" = ( +/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/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/captain/beach) +"cYT" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"cYV" = ( +/obj/machinery/cryopod/robot{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"cZc" = ( +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"cZj" = ( +/obj/structure/cable/green, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"cZo" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 4; + frequency = 1443; + id = "containment_in"; + use_power = 1 + }, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"cZw" = ( +/obj/shuttle_landmark/ert/deck2, +/turf/space, +/area/space) +"cZz" = ( +/obj/structure/closet/coffin, +/obj/structure/railing/mapped, +/obj/floor_decal/corner/black/mono, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/mortuary) +"cZE" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/structure/sign/directions/engineering{ + dir = 8; + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"cZO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"cZP" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 6 + }, +/obj/machinery/sparker{ + id_tag = "engines-2"; + pixel_x = -24 + }, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d3port) +"cZT" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/floor_decal/corner/green/half{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"cZU" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"cZY" = ( +/obj/machinery/turretid/stun{ + control_area = list(/area/turret_protected/ai_upload); + name = "AI Upload turret control"; + pixel_y = 32 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"daa" = ( +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/maintenance{ + name = "Xenoflora Lab Maintenance"; + req_access = newlist() + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/research) +"dac" = ( +/obj/structure/sign/warning/docking_area{ + dir = 1 + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/fourthdeck/forestarboard) +"dag" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"dal" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"dan" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/charon{ + name = "south bump"; + pixel_y = -24; + req_access = list(list("ACCESS_EXPLORER","ACCESS_ENGINEERING")) + }, +/obj/floor_decal/borderfloor{ + color = null; + dir = 6 + }, +/obj/floor_decal/corner/blue/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + color = null + }, +/obj/floor_decal/corner/paleblue/bordercorner2, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"dao" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"daw" = ( +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#b19664" + }, +/area/quartermaster/hangar/upper) +"daA" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"daC" = ( +/obj/structure/catwalk, +/obj/machinery/constructable_frame/machine_frame, +/obj/item/stock_parts/circuitboard/autolathe, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"daE" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"daJ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"daK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -21 + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"daM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "d4portnacelle" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"daS" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/obj/machinery/lapvend, +/turf/simulated/floor/tiled, +/area/security/brig) +"daT" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/ward) +"daV" = ( +/obj/floor_decal/corner/darkblue, +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/bridge/storage) +"daZ" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/smes/buildable/preset/sierra/substation{ + RCon_tag = "Substation - Second Deck" + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/seconddeck) +"dbc" = ( +/obj/floor_decal/corner/black{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"dbj" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"dbq" = ( +/obj/floor_decal/industrial/danger{ + dir = 9 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/armory) +"dbt" = ( +/obj/structure/table/woodentable/mahogany, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"dbu" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/south) +"dbw" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"dby" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/closet/radiation, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/machinery/oxygen_pump{ + dir = 4; + pixel_x = 27 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"dbB" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"dbD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3starboard) +"dbG" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"dbH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/navbeacon/sierra/TD_starboard, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"dbQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/gas) +"dbV" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/starboard) +"dcb" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"dch" = ( +/obj/item/material/ashtray/glass, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/table, +/turf/simulated/floor/carpet, +/area/vacant/gambling) +"dcr" = ( +/obj/decal/cleanable/dirt, +/obj/floor_decal/borderfloorblack, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"dcy" = ( +/obj/floor_decal/corner/black/border, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dcz" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"dcD" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"dcK" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"dcU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"dcW" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"ddj" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/structure/bed/sofa/m/brown, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"ddl" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/bed/chair/wood/maple{ + dir = 4 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"ddv" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/seconddeck/fore) +"ddw" = ( +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"ddI" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"ddK" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"ddW" = ( +/obj/machinery/telecomms/server/presets/science, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"ddX" = ( +/obj/floor_decal/solarpanel, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/solar{ + id = "auxsolarstarboard"; + name = "Aft Starboard Solar Array" + }, +/turf/simulated/floor/airless, +/area/solar/starboard) +"ddZ" = ( +/obj/random_multi/single_item/space_rabbit, +/obj/structure/catwalk, +/turf/space, +/area/space) +"deh" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/port) +"dej" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/medical/ward) +"deq" = ( +/obj/structure/railing/mapped, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"det" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"dew" = ( +/obj/machinery/door/airlock/hatch{ + name = "Cargo Bay Left "; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"deB" = ( +/obj/structure/rubble, +/obj/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"deD" = ( +/obj/structure/table/rack, +/obj/item/aiModule/oxygen, +/obj/item/aiModule/oneHuman, +/obj/item/aiModule/antimov, +/obj/item/aiModule/teleporterOffline, +/obj/item/aiModule/quarantine, +/obj/item/aiModule/purge, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/red, +/obj/machinery/door/window{ + autoset_access = 0; + dir = 4; + name = "High-Risk Modules"; + req_access = list("ACCESS_CAPTAIN") + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"deG" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/item/storage/mirror{ + pixel_x = -1; + pixel_y = 32 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"deI" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"deM" = ( +/obj/structure/bed/chair/shuttle{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod5/station) +"deO" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 9 + }, +/obj/floor_decal/corner/b_green/bordercorner2{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/storage/firstaid/light{ + pixel_y = -4; + pixel_x = -8 + }, +/obj/item/storage/firstaid/light{ + pixel_y = 4; + pixel_x = -8 + }, +/obj/item/storage/firstaid/light{ + pixel_y = 12; + pixel_x = -8 + }, +/obj/item/storage/firstaid/light{ + pixel_x = 6; + pixel_y = -4 + }, +/obj/item/storage/firstaid/light{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/storage/firstaid/light{ + pixel_x = 6; + pixel_y = 12 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/airlock) +"deT" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"dfd" = ( +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 8 + }, +/obj/machinery/atmospherics/valve/shutoff/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"dfl" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"dfs" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/obj/machinery/meter, +/obj/structure/fireaxecabinet{ + pixel_y = 32 + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"dfu" = ( +/obj/paint_stripe/nt_red, +/obj/paint/nt_white, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod6/station) +"dfG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/random/ironing_board_structure, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/laundry) +"dfI" = ( +/obj/machinery/sparker{ + id_tag = "Xenobio"; + pixel_y = 22 + }, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"dfK" = ( +/turf/simulated/wall/prepainted, +/area/rnd/office) +"dfL" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft_stairwell) +"dfO" = ( +/obj/decal/cleanable/dirt, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"dfP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/substation/fourthdeck) +"dfT" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"dgc" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 4 + }, +/obj/machinery/button/windowtint{ + dir = 1; + id = "cadetwindow"; + pixel_x = 6; + pixel_y = -21 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -6; + pixel_y = -21 + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"dgh" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/turf/simulated/floor/plating, +/area/rnd/development) +"dgj" = ( +/obj/structure/table/steel, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/sticky_pad/random, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"dgk" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"dgr" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"dgx" = ( +/obj/structure/table/standard, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_cyborg_upload) +"dgC" = ( +/obj/structure/railing/mapped, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"dgE" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics/third_deck_storage) +"dgH" = ( +/obj/structure/sign/warning/docking_area, +/turf/simulated/wall/r_wall/hull, +/area/hallway/primary/fourthdeck/center) +"dgK" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 8; + id_tag = "EngineRadiatorViewport"; + name = "Engine Radiator Shutters" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"dgN" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"dgO" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"dgP" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"dgR" = ( +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/tcommsat/computer) +"dgT" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"dhc" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"dhe" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"dhj" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/titanium, +/area/exploration_shuttle/power) +"dhl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"dhC" = ( +/obj/structure/catwalk, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"dhH" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"dhI" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/item/cell/device/standard, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"dhX" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"dii" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/engineering{ + dir = 4; + name = "Engine Control Room"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/engineering/engine_monitoring) +"dij" = ( +/obj/structure/catwalk, +/obj/machinery/barrier, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"din" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/darkblue/border, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"diy" = ( +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/nuke_storage) +"diG" = ( +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/folder/white, +/obj/item/tape_roll, +/obj/floor_decal/corner/grey/diagonal, +/obj/structure/railing/mapped{ + dir = 8; + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/floor_decal/industrial/traffic{ + dir = 8; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled, +/area/assembly/office) +"diI" = ( +/obj/floor_decal/carpet/orange, +/obj/floor_decal/carpet/orange{ + dir = 8 + }, +/obj/floor_decal/carpet/orange{ + dir = 10 + }, +/obj/item/screwdriver, +/turf/simulated/floor/carpet/orange, +/area/crew_quarters/heads/office/ce/cobed) +"diN" = ( +/obj/structure/table/glass, +/obj/machinery/microscope, +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/blue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/forensic/lab) +"diO" = ( +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"diP" = ( +/obj/structure/hygiene/sink{ + pixel_y = -12 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry2) +"diR" = ( +/turf/simulated/open, +/area/hallway/primary/firstdeck/central_stairwell) +"diT" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 8 + }, +/obj/floor_decal/borderfloor/full, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/brig) +"diZ" = ( +/obj/machinery/door/window/brigdoor/southright{ + id = "Cell 3"; + name = "Cell three"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "security_permabrig_third_cell_shutters" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_ridged, +/area/security/sierra/brig) +"djg" = ( +/obj/floor_decal/corner/black/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dji" = ( +/obj/machinery/light/spot, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"djp" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/floor_decal/spline/plain/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"djt" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/computer/modular/preset/civilian{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/firstdeck) +"djw" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"djA" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"djF" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"djH" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"djN" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/structure/bed/chair/padded/blue, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"djQ" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/power) +"djR" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/brig) +"djU" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"dkd" = ( +/obj/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/games{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/docking) +"dkf" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/machinery/photocopier/faxmachine{ + department = "Quartermaster" + }, +/obj/structure/noticeboard{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"dkg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"dkl" = ( +/obj/machinery/air_sensor{ + id_tag = "testchamber_sensor" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/rnd/toxins) +"dkt" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"dkC" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"dkI" = ( +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc/super/critical{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/reinforced, +/area/turret_protected/ai_maint) +"dkJ" = ( +/obj/machinery/button/blast_door{ + dir = 4; + id_tag = "qm_warehouse"; + name = "Warehouse Shutters Control"; + pixel_x = -24; + req_access = list("ACCESS_CARGO") + }, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"dkR" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/forestarboard) +"dkS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"dkV" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/thirddeck/fore) +"dlr" = ( +/obj/structure/hygiene/sink{ + pixel_y = -12 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue, +/obj/floor_decal/corner/red{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"dlH" = ( +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/cockpit) +"dlI" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"dlN" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/item/stool/padded/red, +/turf/simulated/floor/tiled, +/area/vacant/cargo) +"dlO" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/green, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"dlV" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/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" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"dlX" = ( +/obj/machinery/atmospherics/unary/tank/air, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"dma" = ( +/obj/machinery/door/airlock/hatch{ + name = "Telecoms Server Access"; + req_access = newlist(); + secured_wires = 1 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/tcommsat/chamber) +"dmd" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"dme" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"dml" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/door/firedoor, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"dmo" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dmw" = ( +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small, +/obj/machinery/light_switch{ + pixel_x = 10; + pixel_y = -21 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"dmA" = ( +/obj/structure/catwalk, +/obj/floor_decal/corner/red/border, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dmG" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"dmJ" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"dmM" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar) +"dmN" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 8 + }, +/obj/machinery/air_sensor/nacelle/second, +/obj/machinery/atmospherics/unary/outlet_injector{ + injecting = 1; + use_power = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d3port) +"dmO" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/bridgedeck/central_stairwell) +"dmQ" = ( +/obj/item/stool/bar, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"dmW" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"dnf" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"dng" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"dnh" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"dnl" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "firingspace"; + name = "FIRING RANGE SAFETY SHIELD" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/red, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"dnu" = ( +/obj/structure/table/marble, +/obj/machinery/cooker/cereal, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"dnx" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"dnz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/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/structure/catwalk, +/obj/structure/sign/warning/compressed_gas{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"dnB" = ( +/obj/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/green/bordercorner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dnG" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera/network/fourth_deck{ + dir = 1; + c_tag = "Fourth Deck - Aft Hallway" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"dnL" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/aft) +"dnQ" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + dir = 1; + id_tag = "calypso_shuttle_pump_out_internal" + }, +/obj/structure/handrail{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/exploration_shuttle/airlock) +"dnR" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/masks, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"dnU" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/camera/network/engine{ + c_tag = "Engine - Heat Exchangers"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"dnV" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/structure/table/standard, +/obj/machinery/photocopier/faxmachine{ + department = "HOP" + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/blue/border{ + dir = 10 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"dnY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"dob" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/techfloor, +/obj/floor_decal/corner/paleblue{ + dir = 8 + }, +/obj/floor_decal/corner/black, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"dof" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace/chamber) +"doj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level2) +"dol" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/decal/cleanable/flour, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"dou" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters/open{ + id_tag = "chemistry_lockdown"; + name = "Chemistry Shutters" + }, +/turf/simulated/floor/plating, +/area/medical/chemistry) +"doG" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/machinery/suit_storage_unit/standard_unit{ + req_access = newlist() + }, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "bridge_safe_exterior"; + name = "safe room door-control"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"doJ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"doM" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/chapel/main) +"doN" = ( +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"doP" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint_stripe/red, +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/security/sierra/suits) +"doV" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft) +"dpn" = ( +/obj/structure/table/standard, +/obj/item/storage/box/detergent, +/obj/item/storage/box/detergent, +/obj/item/ironing_iron, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"dpp" = ( +/obj/floor_decal/corner/black/full, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"dpq" = ( +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"dps" = ( +/obj/floor_decal/corner/lime/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/vending/snix, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/fore) +"dpu" = ( +/obj/structure/flora/ausbushes/brflowers, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"dpG" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/office) +"dpI" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"dpR" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"dpT" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/ship_map, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"dpV" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod1/station) +"dpX" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/floor_decal/carpet/purple{ + dir = 9 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/captain/beach) +"dpY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating, +/area/quartermaster/hangar_atmos) +"dqa" = ( +/obj/structure/table/standard, +/obj/item/book/manual/nuclear, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"dqe" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"dqh" = ( +/obj/structure/closet{ + closet_appearance = /singleton/closet_appearance/secure_closet/engineering/tools + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/tape_roll, +/obj/random/powercell, +/obj/item/clothing/glasses/welding, +/obj/item/device/flashlight/maglight, +/obj/item/device/flash, +/obj/item/device/geiger, +/obj/item/device/multitool, +/obj/item/storage/box/lights/mixed, +/obj/item/device/synthesized_instrument/guitar, +/obj/random/single/color/cable_coil, +/obj/random/firstaid, +/obj/random/material, +/obj/random/material_rnd_glass, +/obj/random/material_rnd_steel, +/obj/item/clothing/gloves/insulated, +/obj/item/clothing/mask/plunger, +/turf/simulated/floor/tiled/monotile, +/area/vacant/cargo) +"dqi" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + name = "Internal Affairs Agent Dorm"; + secured_wires = 1 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/cobed) +"dqs" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"dqu" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/blue, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/south) +"dqv" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + dir = 1; + name = "Internal Affairs Agent Maintaince"; + secured_wires = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa) +"dqz" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"dqB" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"dqF" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/reagent_containers/glass/bucket, +/turf/simulated/floor/tiled/steel_grid, +/area/bridge/storage) +"dqP" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"dqY" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"dra" = ( +/obj/structure/table/standard, +/obj/machinery/recharger, +/obj/random/maintenance, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/engineering/auxpower) +"drb" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#6a97b0" + }, +/area/quartermaster/hangar/upper) +"drh" = ( +/obj/structure/table/rack, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/clothing/head/welding, +/obj/item/storage/belt/utility, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"dro" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/vehicle/train/cargo/trolley, +/obj/floor_decal/spline/plain/brown{ + dir = 10 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"drr" = ( +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"drx" = ( +/obj/item/stool/padded, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"dry" = ( +/obj/machinery/computer/modular/preset/dock{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/half, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"drA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/machinery/ship_map, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"drH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/emergency) +"drK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"drP" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"dsg" = ( +/obj/structure/closet/bombcloset, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"dsj" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3port) +"dsk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley/backroom) +"dsm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"dsp" = ( +/obj/floor_decal/corner/black/border, +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/green, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dsE" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"dsP" = ( +/turf/simulated/wall/r_wall/hull, +/area/security/sierra/prison) +"dsW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/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/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/corner/purple, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"dsX" = ( +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/sleep/cryo/south) +"dsY" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cargo_l) +"dtd" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/thirddeck/central_stairwell) +"dte" = ( +/obj/floor_decal/corner/green/half{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"dtn" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"dto" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"dtt" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "eng3_outer"; + name = "First Deck Starboard Nacelle Access" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/thruster/d1starboard) +"dtv" = ( +/obj/item/broken_bottle{ + pixel_x = 10 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"dty" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"dtE" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"dtV" = ( +/obj/item/trash/beef{ + pixel_x = -9; + pixel_y = 2 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"dtY" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/reagent_dispensers/watertank, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftstarboard) +"dua" = ( +/obj/structure/bed/sofa/l/brown{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/actor/stage) +"dug" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Engine Output"; + name_tag = "Engine Output" + }, +/obj/machinery/light, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_smes) +"dul" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"dus" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"dut" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"duu" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/medical/virology) +"dux" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 10 + }, +/obj/structure/flora/pottedplant/tall, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"duy" = ( +/obj/structure/table/steel, +/obj/item/book/manual/nt_regs, +/obj/item/folder/nt, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/newscaster{ + pixel_x = 28 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"duz" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/forestarboard) +"duA" = ( +/obj/structure/bed/chair/wood/maple, +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"duB" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft_stairwell) +"duD" = ( +/obj/machinery/door/airlock/civilian{ + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/wood/walnut, +/area/vacant/cargo) +"duE" = ( +/obj/floor_decal/corner/black/mono, +/obj/machinery/door/airlock/command{ + name = "Head Of Security Dorm"; + req_access = newlist(); + secured_wires = 1; + stripe_color = "#9d2300"; + dir = 1 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/hos/cobed) +"duF" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/emcloset, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"duG" = ( +/obj/structure/table/standard, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/item/folder/nt, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"duJ" = ( +/obj/floor_decal/corner/green/three_quarters{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2, +/obj/floor_decal/corner/purple/bordercorner, +/obj/structure/closet/secure_closet/hydroponics_sierra, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "xenobotany_access_maintaince"; + name = "Xenobotany Lab Access Console"; + pixel_y = -24; + req_access = list("ACCESS_XENOBIO","ACCESS_RESEARCH"); + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"duQ" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level2) +"duT" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/structure/bed/chair/pew/left, +/turf/simulated/floor/wood, +/area/crew_quarters/actor/stage) +"dva" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"dvc" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/structure/lattice, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dvd" = ( +/obj/structure/sign/warning/biohazard{ + pixel_y = -24 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 9 + }, +/obj/structure/table/standard, +/obj/machinery/computer/atmoscontrol/laptop{ + monitored_alarm_ids = list("xenobio1_alarm","xenobio2_alarm","xenobio3_alarm","xenobio4_alarm","xenobio5_alarm"); + req_access = list("ACCESS_RESEARCH") + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"dvv" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"dvx" = ( +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"dvy" = ( +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/power) +"dvA" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"dvF" = ( +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs) +"dvG" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"dvK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"dvU" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"dvW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dwg" = ( +/obj/structure/sign/warning/vent_port{ + dir = 1 + }, +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d1port) +"dwh" = ( +/obj/machinery/sparker{ + id_tag = "Isocell3"; + pixel_x = -18 + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell3) +"dwo" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery) +"dwq" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"dwz" = ( +/obj/floor_decal/corner/red, +/obj/machinery/button/blast_door{ + id_tag = "security_permabrig_second_cell_shutters"; + name = "2nd Cell Shutters"; + req_access = list("ACCESS_SECURITY"); + pixel_x = 21; + dir = 8 + }, +/obj/machinery/button/flasher{ + dir = 8; + pixel_x = 22; + pixel_y = -9; + id_tag = "security_second_cell_flash"; + req_access = list("ACCESS_SECURITY") + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"dwC" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft) +"dwD" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"dwG" = ( +/obj/floor_decal/corner/red, +/obj/structure/disposalpipe/segment, +/obj/machinery/button/alternate/door/bolts{ + dir = 4; + id_tag = "bar_private_room_1"; + name = "Unlock"; + pixel_x = -24; + pixel_y = -7; + req_access = list("ACCESS_BAR") + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"dwQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"dwT" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"dwV" = ( +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"dxa" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 4 + }, +/obj/structure/sign/warning/nosmoking_1{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"dxd" = ( +/obj/floor_decal/corner/grey/diagonal, +/obj/structure/flora/pottedplant/orientaltree, +/obj/structure/cable/green, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/rnd/office) +"dxg" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"dxi" = ( +/obj/structure/sign/warning/hot_exhaust{ + dir = 4; + pixel_x = -32 + }, +/obj/structure/catwalk, +/turf/simulated/open, +/area/space) +"dxk" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/machinery/computer/cryopod{ + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod3/station) +"dxl" = ( +/obj/structure/sign/warning/moving_parts{ + dir = 8; + pixel_x = 34 + }, +/obj/machinery/conveyor{ + dir = 2; + id = "charon_cargo_out"; + name = "charon interior conveyor belt" + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"dxo" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/closet/secure_closet{ + name = "long term chamber locker"; + req_access = list("ACCESS_SECURITY") + }, +/obj/floor_decal/borderfloor/full, +/obj/floor_decal/industrial/hatch/orange, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/brig) +"dxq" = ( +/obj/floor_decal/chapel, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"dxB" = ( +/obj/structure/bed/chair/office/purple, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"dxC" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/airlock_canisters) +"dxN" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"dxQ" = ( +/obj/floor_decal/industrial/danger, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"dxS" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ + dir = 4; + icon_state = "map" + }, +/obj/machinery/light, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/turret_protected/ai_teleport) +"dxX" = ( +/obj/floor_decal/techfloor/orange, +/obj/machinery/conveyor{ + dir = 4; + id = "compactor" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/compactor) +"dxZ" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/seconddeck/aftstarboard) +"dyd" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"dyp" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/fore) +"dys" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/suits) +"dyx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"dyz" = ( +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"dyA" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/engine_smes) +"dyC" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"dyD" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood, +/obj/structure/sign/directions/science{ + dir = 4; + pixel_x = 32 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"dyK" = ( +/obj/structure/sign/poster{ + pixel_y = -32 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"dyS" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/photocopier, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"dyT" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 4; + icon_state = "shutter0"; + id_tag = "concheckwindow"; + name = "Operation Checkpoint Shutters"; + opacity = 0 + }, +/obj/wallframe_spawn/reinforced, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/security/opscheck) +"dzc" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal{ + pixel_y = 9; + pixel_x = -2 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal{ + pixel_y = 1; + pixel_x = 3 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"dzd" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/airlock_canisters) +"dze" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/machinery/vending/coffee{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"dzh" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/green/bordercorner, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"dzl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation/second) +"dzn" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/flasher{ + id_tag = "security_perm_chamber_flash"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/prison) +"dzt" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/hop) +"dzv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"dzx" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/catwalk_plated, +/obj/machinery/camera/network/hangar{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"dzD" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 8 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1port) +"dzO" = ( +/obj/machinery/power/smes/buildable{ + RCon_tag = "Substation - Telecommunications"; + charge = 5e+006; + input_attempt = 1; + input_level = 250000; + output_attempt = 1; + output_level = 250000 + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"dzP" = ( +/obj/machinery/recharger/wallcharger{ + dir = 1; + pixel_y = -22 + }, +/obj/structure/table/steel, +/obj/item/device/flashlight/lamp, +/obj/random/snack, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"dzR" = ( +/obj/structure/closet/crate/trashcart, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"dzV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + 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/catwalk_plated, +/turf/simulated/floor/plating, +/area/hydroponics) +"dzY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/button/blast_door{ + id_tag = "petrovcell3"; + name = "Test Chamber Vent"; + pixel_x = -26; + pixel_y = -26 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"dAl" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/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/hallway/primary/seconddeck/center) +"dAn" = ( +/obj/machinery/tele_beacon, +/obj/structure/handrail{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"dAr" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"dAw" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"dAy" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"dAE" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"dAF" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/closet/emcloset, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"dAH" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 8 + }, +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "escape_pod_4_pump" + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/grey/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod4/station) +"dAK" = ( +/obj/floor_decal/corner/darkblue/border, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"dAQ" = ( +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"dAX" = ( +/obj/machinery/door/airlock/glass/security{ + name = "Forensics" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/forensic/lab) +"dAY" = ( +/obj/item/stack/tile/walnut{ + pixel_y = 17; + pixel_x = -20 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/vacant/bar) +"dBb" = ( +/obj/structure/closet/secure_closet/engineering_sierra, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"dBd" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"dBh" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"dBm" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"dBn" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/floor_decal/corner/black/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hydroponics/third_deck_storage) +"dBq" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Security Storage"; + dir = 4 + }, +/obj/structure/cable/green{ + 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/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/utility) +"dBv" = ( +/obj/structure/table/standard, +/obj/item/sticky_pad/random, +/obj/item/tape_roll, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/floor_decal/corner/yellow/mono, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Primary Tool Storage" + }, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"dBw" = ( +/obj/machinery/atmospherics/unary/freezer{ + dir = 1; + icon_state = "freezer" + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"dBG" = ( +/obj/machinery/computer/modular/preset/security, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"dBI" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/armory) +"dBO" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cargo_r) +"dBP" = ( +/obj/machinery/telecomms/receiver/preset_right, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"dBS" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/item/stool/padded/red, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"dBU" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/morgue) +"dBV" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "EngineVent"; + name = "Reactor Vent" + }, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/engineering/engine_room) +"dCa" = ( +/obj/machinery/cooker/grill, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck - Garden - Straboard" + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"dCc" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"dCe" = ( +/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/plating, +/area/maintenance/compactor) +"dCk" = ( +/obj/floor_decal/corner/black/border{ + dir = 5 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dCm" = ( +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"dCn" = ( +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"dCr" = ( +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/tcommsat/computer) +"dCx" = ( +/obj/structure/table/standard, +/obj/item/device/integrated_electronics/debugger{ + pixel_x = -5 + }, +/obj/item/device/integrated_electronics/analyzer{ + pixel_x = 6 + }, +/obj/item/device/integrated_electronics/wirer, +/obj/item/device/integrated_circuit_printer, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/development) +"dCA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"dCG" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/corner/red/full, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/gym) +"dCM" = ( +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/random/trash, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"dCO" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hos) +"dCQ" = ( +/obj/structure/cart{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftstarboard) +"dCW" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"dDa" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dDb" = ( +/obj/random_multi/single_item/space_rabbit, +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/space, +/area/space) +"dDe" = ( +/obj/structure/railing/mapped, +/obj/structure/rubble, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"dDf" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + autoset_access = 0; + name = "Petrov Dock"; + req_access = list(list("ACCESS_PETROV","ACCESS_SEC_DOORS")) + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"dDg" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/item/target/alien, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dDh" = ( +/turf/simulated/wall/prepainted, +/area/vacant/utility) +"dDj" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"dDp" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"dDx" = ( +/obj/machinery/door/airlock/hatch{ + autoset_access = 0; + req_access = list("ACCESS_EXPEDITION_SHUTTLE") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"dDz" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"dDA" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"dDG" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 8; + start_pressure = 450 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"dDN" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/center) +"dDU" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"dDW" = ( +/turf/simulated/wall/prepainted{ + can_open = 1 + }, +/area/maintenance/firstdeck/aftstarboard) +"dEa" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"dEo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"dEs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"dEv" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/fourthdeck/foreport) +"dEy" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"dEB" = ( +/turf/unsimulated/mask, +/area/hallway/primary/firstdeck/center) +"dEI" = ( +/obj/random/obstruction, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"dEQ" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"dET" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"dFc" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/maintenance_equipstorage) +"dFh" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"dFn" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"dFw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + target_pressure = 40 + }, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"dFA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/meter, +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"dFF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"dFK" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod4/station) +"dFQ" = ( +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"dFT" = ( +/obj/structure/catwalk, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dFV" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/red, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"dFZ" = ( +/obj/machinery/floodlight, +/obj/floor_decal/spline/plain/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"dGd" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"dGe" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/table/rack, +/obj/random/junkfood, +/obj/random/hat, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"dGi" = ( +/obj/floor_decal/corner/black/mono, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"dGl" = ( +/obj/floor_decal/techfloor/corner, +/obj/random/trash, +/obj/structure/cart{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"dGx" = ( +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/airless, +/area/solar/starboard) +"dGz" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"dGA" = ( +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/structure/handrail{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dGC" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/structure/window/basic{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"dGG" = ( +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"dGJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/corner/grey/border{ + dir = 9 + }, +/obj/floor_decal/corner/grey/bordercorner, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"dGT" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/obj/floor_decal/corner/orange/diagonal, +/turf/simulated/floor/tiled/steel_grid, +/area/security/prison) +"dGY" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"dHa" = ( +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/computer/modular/preset/civilian/professional{ + dir = 4 + }, +/obj/floor_decal/corner/purple/full, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"dHi" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"dHu" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/light, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/engine_smes) +"dHv" = ( +/obj/floor_decal/industrial/traffic{ + dir = 1; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/office) +"dHB" = ( +/obj/structure/sign/warning/hot_exhaust{ + dir = 1; + pixel_y = -32 + }, +/turf/space, +/area/space) +"dHC" = ( +/obj/structure/cryofeed, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo) +"dHF" = ( +/obj/machinery/door/airlock/command{ + name = "Flight Control Tower"; + req_access = list("ACCESS_HANGAR"); + autoset_access = 0 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/maintenance/seconddeck/starboard) +"dHK" = ( +/turf/simulated/wall/r_wall/hull, +/area/engineering/hardstorage) +"dHN" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/engineering{ + name = "Equipment" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/engineering/locker_room) +"dHW" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/lime/border{ + dir = 6 + }, +/obj/structure/bed/chair/comfy/beige{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"dIb" = ( +/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ + id_tag = "engine_airlock"; + name = "Engine Room Airlock Controlls"; + pixel_y = 24; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/machinery/airlock_sensor{ + id_tag = "engine_airlock_sensor"; + master_tag = "engine_airlock"; + name = "Cycle Airlock"; + pixel_x = 14; + pixel_y = 24 + }, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"dIi" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/structure/flora/pottedplant/tall, +/obj/floor_decal/corner/lightgrey/border{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"dIj" = ( +/obj/machinery/button/blast_door{ + id_tag = "sup_office"; + name = "Desk Shutter Control"; + pixel_y = 22; + req_access = list("ACCESS_CARGO") + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/folder/yellow, +/obj/floor_decal/corner/yellow/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"dIn" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/emergency) +"dIp" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/rnd/entry) +"dIu" = ( +/obj/machinery/tele_beacon, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"dIE" = ( +/obj/machinery/robotics_fabricator, +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/assembly/robotics) +"dIF" = ( +/obj/floor_decal/corner/purple/half{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"dII" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#4c535b" + }, +/area/quartermaster/hangar/upper) +"dIL" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"dIP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/spot, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"dIR" = ( +/obj/machinery/vending/wallmed1{ + name = "Emergency NanoMed"; + pixel_y = 30 + }, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe) +"dIX" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation/second) +"dJd" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/material/ashtray/plastic{ + pixel_y = 5; + pixel_x = 1 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"dJe" = ( +/obj/floor_decal/industrial/traffic, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dJg" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft) +"dJh" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/closet/emcloset/anchored, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"dJo" = ( +/obj/structure/table/glass, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/power/apc/high/critical{ + dir = 4; + pixel_x = 24; + name = "east bump" + }, +/obj/structure/cable/green, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"dJp" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "petrov_shuttle_pump" + }, +/obj/floor_decal/techfloor, +/obj/structure/handrail{ + dir = 1 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/petrov/airlock) +"dJq" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "admin_shuttle_dock_sensor"; + master_tag = "admin_shuttle_dock"; + pixel_x = -24; + pixel_y = -8 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/center) +"dJs" = ( +/obj/structure/bed/chair/padded/blue, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"dJA" = ( +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters/open{ + name = "Prison Lobby Windows Shutters"; + id_tag = "prison_lobby_window"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/security/sierra/brig) +"dJE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1starboard) +"dJF" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/prepainted, +/area/security/sierra/prison) +"dJO" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/hygiene/toilet{ + name = "captain's throne" + }, +/obj/item/soap, +/obj/structure/curtain/open/shower, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/heads/captain/secret_room) +"dJP" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/green{ + pixel_y = 14; + pixel_x = -5 + }, +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/carpet/blue, +/obj/floor_decal/carpet/blue{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/cafe/upper) +"dJQ" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 1; + pixel_y = -13 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"dJY" = ( +/obj/item/extinguisher/mini, +/obj/structure/table, +/turf/simulated/floor/wood/walnut, +/area/vacant/gambling) +"dJZ" = ( +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/orange/corner, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"dKc" = ( +/obj/machinery/computer/modular/preset/library, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"dKd" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"dKh" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/hop) +"dKo" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 6 + }, +/obj/machinery/camera/network/bridge_deck{ + dir = 8; + c_tag = "Bridge Deck - Aft Hallway - Port Rooms" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"dKv" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Entry Shutters" + }, +/obj/machinery/door/airlock/medical{ + name = "Hospital Back Room" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"dKB" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/security/nuke_storage) +"dKE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"dKQ" = ( +/obj/machinery/status_display{ + pixel_y = 32 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hos) +"dLa" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"dLd" = ( +/obj/structure/table/standard, +/obj/random/maintenance, +/turf/simulated/floor/tiled/freezer, +/area/medical/virology/lab) +"dLe" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/atmos/storage) +"dLj" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/morgue{ + dir = 2 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/forestarboard) +"dLk" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/sign/poster{ + pixel_y = 32 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"dLm" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/virology, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/item/taperoll/engineering/applied, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology) +"dLu" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/thirddeck/starboard) +"dLD" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Port Hallway"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"dLE" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + frequency = 1379; + id_tag = "ai_core_airlock"; + name = "AI Core Airlock Console"; + pixel_y = 24; + req_access = list("ACCESS_AI_UPLOAD"); + tag_airpump = "ai_core_pump"; + tag_chamber_sensor = "ai_core_sensor"; + tag_exterior_door = "ai_core_outer"; + tag_interior_door = "ai_core_inner" + }, +/turf/simulated/floor/tiled/techmaint, +/area/turret_protected/ai_teleport) +"dLK" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/synthesized_instrument/synthesizer, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"dLM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/prototype/engine) +"dLU" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "xenobotany_access_maintaince_outer"; + name = "Xenobotany Lab Access" + }, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/xenobiology/xenoflora) +"dMb" = ( +/obj/structure/disposaloutlet{ + dir = 8; + name = "cargo outlet" + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/plating, +/area/exploration_shuttle/airlock) +"dMc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"dMl" = ( +/obj/wallframe_spawn/reinforced_phoron/titanium, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/meter, +/obj/paint/nt_white, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "toxins_petrov_shutters"; + name = "Mixing Chamber Blast Shutters" + }, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/gas) +"dMy" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"dMC" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "hangar_checkpoint_shutters"; + name = "Hangar Deck Checkpoint Shutters"; + opacity = 0 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/security/sierra/dockcheck) +"dME" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"dMG" = ( +/turf/simulated/floor/tiled, +/area/assembly/robotics) +"dMH" = ( +/obj/structure/closet/crate/secure/biohazard{ + req_access = list(list("ACCESS_RESEARCH","ACCESS_EXPLORER")) + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"dMK" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + opacity = 0 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"dMQ" = ( +/obj/machinery/atmospherics/unary/tank{ + color = "#ff0000"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"dMS" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"dMW" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/solar) +"dNa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Solar Control - Third Deck - Port" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"dNb" = ( +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "pathfinder_office" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + id_tag = "exp_leader_window_to_space"; + name = "Exploration Leader Window Blast Door" + }, +/turf/simulated/floor/plating, +/area/command/exploration_leader) +"dNc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"dNg" = ( +/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/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"dNj" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"dNk" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"dNl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "civsafedoor"; + name = "safe room door-control"; + pixel_y = 24 + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"dNp" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"dNr" = ( +/obj/structure/railing/mapped, +/obj/structure/bed/sofa/r/blue, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"dNs" = ( +/obj/catwalk_plated, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"dNz" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/research) +"dND" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"dNN" = ( +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply{ + pixel_y = -8; + pixel_x = -4 + }, +/obj/random/tech_supply{ + pixel_y = 7; + pixel_x = 6 + }, +/obj/random/tool{ + pixel_y = -3; + pixel_x = 4 + }, +/obj/random/tool{ + pixel_x = -2 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"dNR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"dNT" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/food/drinks/glass2/wine, +/obj/item/reagent_containers/food/drinks/glass2/wine, +/obj/item/reagent_containers/food/drinks/bottle/tadmorwine, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/hop/cobed) +"dNX" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"dNY" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters/open{ + name = "Brig's visiting room shutters"; + id_tag = "visiting_room_windows_shutters" + }, +/obj/paint_stripe/red, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/security/prison) +"dOc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/wall/r_wall/hull{ + can_open = 1 + }, +/area/rnd/xenobiology/level1) +"dOd" = ( +/obj/machinery/computer/modular/preset/medical{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"dOh" = ( +/obj/machinery/door/window/brigdoor/westleft{ + id_tag = null; + req_access = newlist(); + dir = 4 + }, +/obj/item/stool/padded, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"dOk" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/item/modular_computer/telescreen/preset/generic{ + pixel_x = -32; + pixel_y = -9 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/nuke_storage) +"dOl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftport) +"dOr" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/visitors) +"dOA" = ( +/obj/machinery/hologram/holopad, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/captain/beach) +"dOB" = ( +/obj/structure/sign/nanotrasen{ + dir = 4 + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/solar) +"dOH" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/selfestructgrid, +/area/security/nuke_storage) +"dOK" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"dOR" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"dOS" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"dOV" = ( +/obj/landmark{ + name = "carpspawn" + }, +/turf/simulated/floor/shuttle_ceiling/sierra, +/area/space) +"dPg" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/bridge) +"dPl" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/tcommsat/storage) +"dPn" = ( +/obj/structure/coatrack{ + pixel_x = 11; + pixel_y = 23 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"dPq" = ( +/obj/structure/rubble, +/obj/decal/cleanable/dirt, +/obj/random/junk, +/obj/random/junk, +/obj/decal/cleanable/filth, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"dPt" = ( +/obj/machinery/vending/cola{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/corner/lime/mono, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/center) +"dPv" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "d2portnacelle" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"dPB" = ( +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/equipment) +"dPE" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/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/structure/disposalpipe/segment, +/obj/machinery/button/alternate/door/bolts{ + dir = 8; + id_tag = "bar_private_room_2"; + name = "Unlock"; + pixel_x = 24; + pixel_y = -7; + req_access = list("ACCESS_BAR") + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"dPO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"dPP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"dQa" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + id = "CO21p_in"; + injecting = 1; + use_power = 1 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d3starboard) +"dQl" = ( +/obj/machinery/door/airlock/civilian{ + name = "Long Term Prison" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/prison) +"dQp" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/regular/open{ + id_tag = "PetrovShield"; + name = "Petrov Blast Shutters" + }, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/plating, +/area/shuttle/petrov/cockpit) +"dQq" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"dQs" = ( +/obj/machinery/beehive, +/obj/floor_decal/corner/green/half, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"dQB" = ( +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/obj/structure/sign/nanotrasen, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/cargo_l) +"dQG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 5 + }, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/old_tile, +/area/crew_quarters/head) +"dQH" = ( +/obj/floor_decal/industrial/hatch/yellow, +/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/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/abandoned_hydroponics) +"dQM" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/xenobiology/entry) +"dQP" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"dQU" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/corner/paleblue{ + dir = 10 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"dQY" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"dRc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"dRi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"dRl" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "hydro<-bar"; + name = "Hydro Shutters" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/bar) +"dRn" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 10 + }, +/obj/machinery/atmospherics/valve/shutoff/supply, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"dRq" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/deckofficer) +"dRs" = ( +/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/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/lime/border{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"dRw" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"dRD" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"dRO" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"dRP" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"dRQ" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dSg" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"dSr" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"dSt" = ( +/obj/machinery/door/airlock/external/bolted{ + dir = 4; + frequency = 1380; + id_tag = "escape_pod_3_hatch"; + name = "Escape Pod Three Hatch" + }, +/obj/machinery/shield_diffuser, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod3/station) +"dSz" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/bed/chair/wood/maple, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"dSC" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"dSQ" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"dSS" = ( +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"dSU" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"dSW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/engineering{ + locked = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"dSX" = ( +/obj/structure/sign/warning/secure_area{ + dir = 8; + pixel_x = 32 + }, +/obj/structure/closet/radiation, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"dSZ" = ( +/obj/structure/shuttle/engine/propulsion, +/obj/structure/shuttle/engine/heater{ + pixel_y = 32 + }, +/turf/simulated/floor/airless, +/area/shuttle/escape_pod/escape_pod1/station) +"dTa" = ( +/obj/machinery/ai_status_display, +/obj/paint_stripe/turquoise, +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai) +"dTq" = ( +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/center) +"dTy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"dTA" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + id_tag = "misclab"; + name = "Test Chamber Blast Doors"; + dir = 4 + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/plating, +/area/rnd/containment) +"dTD" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/fireaxecabinet{ + dir = 4; + pixel_y = 32 + }, +/obj/structure/table/rack, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/storage/box/lights/mixed, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/item/storage/toolbox/mechanical, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"dTL" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"dTW" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/barrier, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"dTZ" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"dUd" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + name = "Air to Portables" + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"dUh" = ( +/obj/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/structure/fireaxecabinet{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"dUn" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/table/steel, +/obj/machinery/photocopier/faxmachine{ + department = "HOS" + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/machinery/newscaster/security_unit{ + pixel_x = -26; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"dUq" = ( +/obj/floor_decal/chapel{ + dir = 1 + }, +/obj/structure/bed/chair/pew/mahogany, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"dUD" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 9 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"dUF" = ( +/obj/machinery/atmospherics/omni/mixer{ + active_power_usage = 7500; + tag_east = 0; + tag_east_con = null; + tag_north = 1; + tag_north_con = 0.5; + tag_south = 2; + tag_south_con = null; + tag_west = 1; + tag_west_con = 0.5; + use_power = 1 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"dUH" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/bed/chair/padded/purple{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"dUK" = ( +/obj/structure/table/woodentable/maple, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/office) +"dUQ" = ( +/obj/decal/cleanable/filth, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"dUV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"dUW" = ( +/obj/machinery/atmospherics/valve/digital{ + name = "TEG bypass valve" + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"dVc" = ( +/obj/structure/table/standard, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/decal/cleanable/cobweb{ + dir = 1 + }, +/obj/random/maintenance, +/turf/simulated/floor/tiled/freezer, +/area/medical/virology/lab) +"dVj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"dVn" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8; + icon_state = "map" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"dVo" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/blue, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"dVr" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"dVs" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"dVD" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"dVG" = ( +/obj/structure/flora/seaweed/mid, +/obj/fluid_mapped, +/turf/simulated/floor/beach/sand, +/area/rnd/xenobiology/level2) +"dVH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/heads/office/rd/cobed) +"dVJ" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4; + name = "Chamber Input" + }, +/obj/machinery/button/blast_door{ + id_tag = "toxins_petrov_exhaust"; + name = "Chamber Vent"; + pixel_y = -24; + pixel_x = 8 + }, +/obj/machinery/button/blast_door{ + id_tag = "toxins_petrov_shutters"; + name = "Chamber Protective Shutters"; + pixel_y = -24; + pixel_x = -5 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"dVL" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"dVN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"dVP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"dVR" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/power/rad_collector, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"dVT" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "solar_port_inner"; + name = "Engineering External Access" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar) +"dWf" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"dWg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Fuel Bay" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/fuelbay) +"dWi" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/structure/table/woodentable_reinforced/ebony, +/obj/machinery/recharger, +/obj/machinery/light/spot, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"dWn" = ( +/obj/structure/catwalk, +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"dWp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"dWr" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/purple, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/bunk) +"dWt" = ( +/obj/structure/flora/pottedplant/decorative, +/obj/floor_decal/corner/lime/half{ + dir = 4 + }, +/obj/floor_decal/corner/lime{ + dir = 9 + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck - Central Stairwell" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/central_stairwell) +"dWy" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"dWA" = ( +/obj/machinery/papershredder, +/obj/machinery/computer/guestpass{ + pixel_y = 30 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"dWB" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/closet/firecloset, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"dWC" = ( +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/maintenance/firstdeck/forestarboard) +"dWF" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"dWJ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"dWM" = ( +/obj/floor_decal/industrial/warning/half, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/exploration/eva) +"dWO" = ( +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"dWS" = ( +/obj/floor_decal/corner/black/mono, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"dXc" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/floor_decal/carpet/blue, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"dXe" = ( +/obj/structure/closet/jcloset/sierra, +/obj/floor_decal/corner/purple{ + pixel_y = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/janitor) +"dXp" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"dXy" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"dXI" = ( +/obj/structure/table/standard, +/obj/machinery/recharger, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/fore) +"dXO" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"dYa" = ( +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/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/dark/monotile, +/area/medical/wardhallway) +"dYd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"dYi" = ( +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"dYk" = ( +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"dYl" = ( +/obj/structure/sign/directions/supply{ + dir = 8; + pixel_y = -24 + }, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Central Stairwell"; + dir = 1 + }, +/turf/simulated/open, +/area/hallway/primary/thirddeck/central_stairwell) +"dYn" = ( +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/reinforced, +/area/solar/bridge_starboard) +"dYr" = ( +/obj/machinery/vending/cigarette{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/lime/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/machinery/light, +/obj/floor_decal/corner/lime/bordercorner2, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"dYs" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"dYx" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG, +/obj/floor_decal/carpet/blue2{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/hop) +"dYA" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"dYG" = ( +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 8; + pixel_x = 22 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"dYL" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"dYS" = ( +/obj/machinery/atmospherics/valve/shutoff/supply, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"dYW" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/equipstorage) +"dYZ" = ( +/obj/structure/bed/chair/office/purple{ + dir = 8 + }, +/obj/floor_decal/corner/purple/three_quarters{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"dZf" = ( +/obj/structure/filingcabinet, +/obj/item/folder/white, +/obj/item/folder/blue, +/obj/item/folder/red, +/obj/item/folder/yellow, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"dZg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"dZm" = ( +/obj/structure/sign/warning/high_voltage{ + dir = 4 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/substation/seconddeck) +"dZu" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"dZA" = ( +/obj/structure/hygiene/faucet, +/turf/simulated/floor/pool, +/area/crew_quarters/sauna) +"dZF" = ( +/obj/structure/table/standard, +/obj/machinery/microwave{ + pixel_y = 4 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"dZK" = ( +/obj/structure/fitness/weightlifter, +/obj/floor_decal/corner/red/full, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/gym) +"dZU" = ( +/obj/structure/table/glass, +/obj/random/maintenance, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/item/defibrillator/loaded, +/turf/simulated/floor/tiled/white, +/area/vacant/infirmary) +"dZW" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/barrier, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"eae" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"eaf" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/generic, +/obj/random/junk, +/obj/item/frame/apc, +/turf/simulated/floor/plating, +/area/vacant/mess) +"eah" = ( +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23 + }, +/obj/item/reagent_containers/food/snacks/semki, +/obj/structure/displaycase{ + icon_state = "labcageb0" + }, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"eai" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/prepainted, +/area/maintenance/substation/fourthdeck) +"eap" = ( +/obj/structure/closet/crate/secure/loot, +/turf/simulated/floor/reinforced, +/area/maintenance/firstdeck/aftport) +"eav" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + color = null; + dir = 5 + }, +/obj/floor_decal/corner/blue/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + color = null; + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/random/blood_packs, +/obj/random/blood_packs, +/obj/item/roller_bed, +/obj/item/roller_bed, +/obj/structure/closet/medical_wall{ + pixel_y = 32 + }, +/obj/item/storage/firstaid/sleekstab, +/obj/item/storage/firstaid/sleekstab, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"eaD" = ( +/obj/machinery/artifact_scanpad, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell1) +"eaN" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/prison) +"eaO" = ( +/obj/structure/hygiene/shower{ + pixel_y = 15 + }, +/obj/floor_decal/industrial/warning, +/obj/decal/cleanable/blood, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"eaT" = ( +/obj/wallframe_spawn/reinforced_phoron/titanium, +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell1) +"ebc" = ( +/obj/floor_decal/carpet/purple, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/obj/floor_decal/carpet/purple{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/main) +"ebf" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 6 + }, +/obj/machinery/sparker{ + id_tag = "engines"; + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + injecting = 1; + use_power = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d3starboard) +"ebh" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/constructable_frame, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"ebl" = ( +/obj/machinery/button/blast_door{ + id_tag = "xenobioa3"; + name = "Containment Blast Doors"; + pixel_x = -6; + pixel_y = 21; + req_access = list("ACCESS_RESEARCH") + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"ebs" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/substation/bridgedeck) +"ebt" = ( +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/thirddeck) +"ebz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"ebF" = ( +/obj/structure/bed/chair/padded/green{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"ebG" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"ebM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/sign/warning/nosmoking_1{ + dir = 1; + pixel_y = -32 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"ece" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"ecg" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id_tag = "hangar_checkpoint_shutters"; + name = "Hangar Deck Checkpoint Shutters"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/security/sierra/dockcheck) +"ecl" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "escape_pod_2_pump" + }, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ + dir = 4; + id_tag = "escape_pod_2"; + name = "escape pod two controller"; + pixel_x = -20; + tag_door = "escape_pod_2_hatch"; + frequency = 1380 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/grey/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod2/station) +"ecA" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint_stripe/red, +/obj/wallframe_spawn/reinforced/polarized{ + id = "bo_windows" + }, +/turf/simulated/floor/plating, +/area/security/sierra/sergeant) +"ecC" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/corner/green/bordercorner, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"ecF" = ( +/obj/machinery/disposal, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"ecJ" = ( +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "security_permabrig_second_cell_shutters" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_ridged, +/area/security/sierra/brig) +"ecL" = ( +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"ecS" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/blue/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"edb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"edc" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"edh" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters/open{ + name = "Brig's visiting room shutters"; + id_tag = "visiting_room_windows_shutters" + }, +/obj/paint_stripe/red, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/security/prison) +"edi" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery/second) +"edj" = ( +/obj/fluid_mapped, +/obj/item/clothing/under/swimsuit/red, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"edr" = ( +/obj/structure/table/standard, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/item/folder/blue, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"edt" = ( +/obj/structure/disposalpipe/junction/yjunction, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"edu" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/bridge/lobby) +"edw" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"edA" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/catwalk_plated/dark, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/bridge/hallway) +"edD" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/storage) +"edI" = ( +/obj/structure/closet/secure_closet/prospector, +/obj/item/shuttle_beacon, +/obj/item/device/radio, +/obj/item/storage/belt/utility/full, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"edK" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"edR" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/gas) +"eea" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"eec" = ( +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Engine Subgrid"; + name_tag = "Engine Subgrid" + }, +/obj/machinery/power/apc/super/critical{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_smes) +"eee" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"eek" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/closet/secure_closet/cabinet/forensics{ + name = "forensics technician's cabinet" + }, +/obj/item/storage/briefcase/crimekit{ + pixel_y = 10 + }, +/obj/machinery/light_switch{ + pixel_y = 28 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/forensic/lab) +"eel" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"eep" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 5 + }, +/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{ + id_tag = "engine_atmos_airlock"; + name = "Engine Room Airlock Controlls"; + pixel_y = -24; + req_access = list("ACCESS_ENGINE_EQUIP"); + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"eeE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"eeI" = ( +/obj/decal/cleanable/dirt, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"eeL" = ( +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/obj/structure/closet/crate/freezer/rations, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod4/station) +"eeW" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"efa" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"efb" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"eff" = ( +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"efi" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/hallway) +"efu" = ( +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/power) +"efw" = ( +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/obj/machinery/computer/air_control{ + input_tag = "o23p_in"; + name = "Oxygen Supply Control"; + output_tag = "o23p_out"; + sensor_name = "Tank"; + sensor_tag = "ReacEngOxygen3" + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"efB" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/sauna) +"efD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 23; + pixel_y = 0 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"efM" = ( +/obj/machinery/door/airlock/highsecurity{ + locked = 1; + name = "AI Core Access" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/turret_protected/ai) +"efQ" = ( +/obj/structure/bed/chair/shuttle, +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/escape_pod/escape_pod11/station) +"efZ" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + dir = 4; + id_tag = "rescue_shuttle_dock_airlock_pump"; + power_rating = 25000 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/center) +"egb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"egd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"egi" = ( +/obj/structure/sign/warning/hot_exhaust{ + dir = 4; + pixel_x = -32 + }, +/turf/space, +/area/space) +"egj" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/seconddeck/center) +"egk" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/compactor) +"egn" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/aft) +"ego" = ( +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"egr" = ( +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp/green, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"egt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/spline/fancy/wood/cee, +/obj/machinery/door/window/westright{ + dir = 2 + }, +/obj/machinery/door/window/westright{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/breakroom) +"egz" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"egI" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_north = 1; + tag_south = 2; + tag_west = 8 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"egJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/closet/emcloset/anchored, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"egL" = ( +/obj/floor_decal/corner/green/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"egT" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"egW" = ( +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/development) +"egZ" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"eha" = ( +/obj/machinery/reagentgrinder, +/turf/simulated/floor/plating, +/area/vacant/infirmary) +"ehe" = ( +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley/backroom) +"ehs" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1; + name = "Air to Portables" + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/atmos/storage) +"eht" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/hallway/infirmary) +"ehw" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"ehB" = ( +/obj/structure/table/steel, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"ehI" = ( +/obj/machinery/telecomms/processor/preset_four, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"ehT" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"ehU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/recharger, +/obj/structure/table/steel_reinforced, +/obj/floor_decal/techfloor, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"ehW" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"eia" = ( +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue) +"eig" = ( +/obj/structure/curtain/medical, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/medical/ward) +"eiD" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 5 + }, +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d3starboard) +"eiO" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 4; + name = "Medical Equipment"; + sort_type = "Medical Equipment" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/aft) +"eiQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"eiT" = ( +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/secure_closet/explorer, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration) +"eiV" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/exploration/eva) +"eiW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Fusion Substation"; + name_tag = "Fusion Substation" + }, +/obj/structure/cable/cyan, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"eja" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "escape_pod_1_pump" + }, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ + dir = 8; + id_tag = "escape_pod_1"; + name = "escape pod one controller"; + pixel_x = 20; + tag_door = "escape_pod_1_hatch"; + frequency = 1380 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/grey/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod1/station) +"ejc" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"ejh" = ( +/obj/structure/table/steel, +/obj/item/book/manual/engineering_construction, +/obj/item/book/manual/atmospipes, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"ejn" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"ejo" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters/open{ + id_tag = "security_permabrig_lobby_shutters" + }, +/obj/paint_stripe/red, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/turf/simulated/floor/plating, +/area/security/sierra/brig) +"ejp" = ( +/obj/structure/bed/sofa/l/black{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"ejr" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/virology/ward) +"ejy" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"ejB" = ( +/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{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"ejL" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"ejO" = ( +/obj/machinery/door/airlock/hatch/maintenance{ + name = "First Deck Port Nacelle"; + req_access = newlist() + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/thruster/d1port) +"ejQ" = ( +/obj/catwalk_plated, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"ejR" = ( +/obj/landmark{ + name = "xeno_spawn"; + pixel_x = -1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"ejS" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"ekc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"eke" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"ekr" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch/maintenance{ + autoset_access = 0; + name = "Third Deck Starboard Nacelle"; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"ekv" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/machinery/camera/network/engineering{ + c_tag = "Atmospherics - Entry"; + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"ekw" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/structure/handrail{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"ekG" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"ekH" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"ekP" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + target_pressure = 200 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"ekS" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 4 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/molten_item, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"ekV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/storage/primary) +"ekY" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/infirmreception) +"ekZ" = ( +/obj/structure/table/standard, +/obj/item/device/integrated_electronics/wirer, +/obj/item/device/integrated_electronics/debugger{ + pixel_x = -5 + }, +/obj/item/device/integrated_electronics/analyzer{ + pixel_x = 6 + }, +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/equipment) +"eln" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/sleep/cryo/south) +"elu" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"elC" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"elF" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "cockpit_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cockpit) +"elJ" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/wood{ + icon_state = "wood_broken0" + }, +/area/maintenance/firstdeck/forestarboard) +"elL" = ( +/obj/machinery/atmospherics/pipe/zpipe/up/cyan{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/railing/mapped, +/turf/simulated/floor/airless, +/area/space) +"elN" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"elP" = ( +/obj/random/junk, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"elS" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/random/soap, +/turf/simulated/floor/tiled, +/area/maintenance/firstdeck/aftstarboard) +"elU" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/material/ashtray/bronze, +/obj/item/storage/mirror{ + pixel_x = 24 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor) +"emb" = ( +/obj/machinery/power/smes/buildable/preset/sierra/substation{ + RCon_tag = "Utility - First Backup" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/light/small, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/engineering/auxpower) +"emi" = ( +/obj/machinery/door/window{ + autoset_access = 0; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"emo" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway) +"emp" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/machinery/power/generator{ + anchored = 1; + dir = 8 + }, +/obj/structure/cable/yellow, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"emx" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/structure/closet/l3closet/scientist/multi, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/equipment) +"emC" = ( +/obj/machinery/camera/network/research{ + c_tag = "Research - Special Containment"; + dir = 4; + network = list("Research","Miscellaneous Reseach") + }, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"emE" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/powered/pump, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"emK" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/closet/hydrant{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"emO" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/brown, +/obj/structure/curtain/open/bed{ + anchored = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/brown/border{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/prison) +"emS" = ( +/obj/structure/disposalpipe/up{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/full, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/fuel{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"emU" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Utility Up"; + req_access = newlist() + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/substation/fourthdeck) +"emY" = ( +/obj/machinery/cryopod, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/brown/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 4 + }, +/obj/machinery/computer/cryopod{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/prison) +"enc" = ( +/obj/structure/cable/green{ + 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/catwalk_plated/dark, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/bridge/hallway) +"enp" = ( +/obj/machinery/smartfridge/drying_rack, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"enq" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d3port) +"enG" = ( +/obj/structure/window/basic{ + dir = 8 + }, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/galley/freezer) +"enM" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"enS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"enW" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"enZ" = ( +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/infirmreception) +"eod" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/spline/fancy/black/corner, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/galley/backroom) +"eoi" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/window/southleft{ + dir = 1; + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/door/window/southleft{ + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/hygiene/drain, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level2) +"eok" = ( +/turf/simulated/wall/r_wall/hull, +/area/hallway/primary/fourthdeck/center) +"eon" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"eou" = ( +/obj/machinery/robotics_fabricator, +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/assembly/robotics) +"eoG" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 8 + }, +/obj/machinery/atmospherics/valve/shutoff/supply, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"eoJ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/security{ + dir = 4; + name = "Evidence Storage" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/evidence) +"eoO" = ( +/obj/structure/catwalk, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"eoQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"eoT" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/hull, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/center) +"eoV" = ( +/obj/floor_decal/industrial/warning/full, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "firing_range_pump" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"eoX" = ( +/obj/machinery/artifact_analyser, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell1) +"epb" = ( +/obj/shuttle_landmark/escape_pod/start/pod4, +/obj/wallframe_spawn/reinforced/titanium, +/turf/simulated/floor/plating, +/area/shuttle/escape_pod/escape_pod4/station) +"epe" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"epf" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "SupermatterDoor"; + name = "Supermatter Access Blast Door" + }, +/turf/simulated/floor/reinforced, +/area/engineering/engine_room) +"epi" = ( +/obj/machinery/atmospherics/binary/passive_gate{ + dir = 4; + target_pressure = 15000; + regulate_mode = 1; + unlocked = 1 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/incinerator) +"epj" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"epk" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/item/mop/broom, +/obj/item/mop/broom{ + pixel_y = 9; + pixel_x = -4 + }, +/obj/item/mop/broom{ + pixel_y = 9; + pixel_x = 7 + }, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sauna) +"epl" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/galley) +"epn" = ( +/obj/structure/bed/sofa/r/brown{ + dir = 4 + }, +/obj/floor_decal/carpet/red{ + dir = 1 + }, +/obj/floor_decal/carpet/red{ + dir = 8 + }, +/obj/floor_decal/carpet/red{ + dir = 9 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"epp" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/papershredder, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"epq" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/obj/floor_decal/corner/black/full, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/command/bsa) +"eps" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"epy" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"epB" = ( +/obj/structure/bed/sofa/l/blue{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23; + pixel_y = 6 + }, +/obj/floor_decal/carpet/red, +/obj/floor_decal/carpet/red{ + dir = 8 + }, +/obj/floor_decal/carpet/red{ + dir = 10 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/captain/beach) +"epF" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"epQ" = ( +/obj/structure/morgue, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"epT" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"eqc" = ( +/obj/floor_decal/corner/grey/diagonal, +/obj/structure/flora/pottedplant/mysterious, +/turf/simulated/floor/tiled, +/area/rnd/office) +"eqd" = ( +/obj/structure/table/steel, +/obj/item/paper_bin, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/item/pen, +/obj/item/hand_labeler, +/obj/machinery/recharger/wallcharger{ + dir = 1; + pixel_y = -22 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"eqg" = ( +/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/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/fore) +"eqm" = ( +/turf/simulated/wall/r_wall/hull{ + can_open = 1 + }, +/area/vacant/cargo) +"eqo" = ( +/obj/decal/cleanable/dirt, +/obj/item/ore/iron, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crucian_hangar/start) +"eqq" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"eqs" = ( +/obj/structure/table/steel, +/obj/item/storage/box/glasses, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut{ + icon_state = "walnut_broken5" + }, +/area/vacant/bar) +"eqt" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/multi_tile/maintenance, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/foreport) +"eqx" = ( +/obj/floor_decal/industrial/danger{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/armory) +"eqA" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack/dark, +/obj/item/storage/firstaid/trauma{ + pixel_x = -7; + pixel_y = 7 + }, +/obj/item/storage/firstaid/fire{ + pixel_x = 7; + pixel_y = 7 + }, +/obj/item/storage/firstaid/trauma{ + pixel_x = -7 + }, +/obj/item/storage/firstaid/fire{ + pixel_x = 7 + }, +/obj/floor_decal/spline/plain/paleblue{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"eqF" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + id = "fuel2p_in"; + use_power = 1 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d3port) +"eqS" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/freezer, +/area/medical/virology/lab) +"eqV" = ( +/obj/floor_decal/corner/red/mono, +/obj/structure/closet/secure_closet{ + name = "Checkpoint Locker"; + req_access = list("ACCESS_SECURITY") + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/recharger/wallcharger{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"eqX" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"eqZ" = ( +/obj/floor_decal/industrial/loading, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/forestarboard) +"era" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"erj" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"erp" = ( +/obj/structure/sign/warning/hot_exhaust{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/open, +/area/space) +"err" = ( +/obj/machinery/power/emitter{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"ert" = ( +/obj/structure/table/standard, +/obj/item/device/taperecorder, +/obj/item/device/tape, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/office) +"erx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 4 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"erA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"erN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"erQ" = ( +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/solar{ + id = "auxsolarstrbbridge"; + name = "Bridge Auxiliary Solar Array" + }, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/reinforced, +/area/solar/bridge_starboard) +"erR" = ( +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck - Cryogenics"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/firstdeck) +"erY" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/random/closet, +/obj/decal/cleanable/dirt, +/obj/machinery/light_construct{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"erZ" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/brown/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 8 + }, +/obj/machinery/computer/modular/preset/supply_public{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"esd" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"esg" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/storage/primary) +"esi" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/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/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"esk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"esl" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "xenobotany_access_maintaince_inner"; + name = "Xenobotany Lab Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/xenobiology/xenoflora) +"esn" = ( +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"eso" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/table/steel, +/obj/machinery/button/blast_door{ + id_tag = "security_sergeant_shutters"; + name = "Desk Shutters"; + req_access = list("ACCESS_WARDEN"); + pixel_y = -4; + pixel_x = 6 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/folder/red, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"esx" = ( +/obj/machinery/power/terminal, +/obj/item/stool, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"esy" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/hangar/upper) +"esB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"esD" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"esF" = ( +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/machinery/shield_diffuser, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/cee, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"etl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"etw" = ( +/obj/machinery/computer/ship/sensors{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"etx" = ( +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_5_hatch"; + name = "Escape Pod Five Hatch" + }, +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod5/station) +"etA" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"etE" = ( +/obj/floor_decal/corner/purple/three_quarters, +/obj/structure/railing/mapped{ + dir = 8; + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/floor_decal/industrial/danger{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"etK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"etL" = ( +/obj/structure/table/rack, +/obj/item/pickaxe{ + pixel_x = 5 + }, +/obj/item/pickaxe{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/shovel{ + pixel_x = -5 + }, +/obj/item/shovel{ + pixel_x = -5 + }, +/obj/item/shovel{ + pixel_x = -5 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/brown/border, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"etS" = ( +/obj/structure/closet/toolcloset/excavation{ + locked = 1; + req_access = list("ACCESS_XENOARCH") + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/brown/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"etT" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/seconddeck/forestarboard) +"etV" = ( +/obj/shuttle_landmark/lift/medical_bottom, +/turf/simulated/floor/plating, +/area/medical/morgue) +"eui" = ( +/obj/floor_decal/industrial/traffic{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"euj" = ( +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"euo" = ( +/obj/machinery/door/airlock{ + door_color = "#78523b"; + name = "Sauna" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sauna) +"eup" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/grey{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"euE" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - Mech Bay"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/chargebay) +"euR" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/power) +"euX" = ( +/obj/structure/railing/mapped, +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/opos, +/obj/item/reagent_containers/ivbag/blood/human/aneg, +/obj/item/reagent_containers/ivbag/blood/human/apos, +/obj/item/reagent_containers/ivbag/blood/human/bneg, +/obj/item/reagent_containers/ivbag/blood/human/bpos, +/obj/item/reagent_containers/ivbag/blood/human/abneg, +/obj/structure/curtain/medical, +/obj/floor_decal/industrial/outline/yellow, +/obj/random/blood_packs, +/obj/random/blood_packs, +/turf/simulated/floor/tiled/white, +/area/medical/maintenance_equipstorage) +"evm" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/materials_storage) +"evo" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/frame/light_switch, +/obj/item/frame/fire_alarm, +/obj/item/frame/air_alarm{ + pixel_y = -16 + }, +/obj/machinery/light, +/turf/simulated/floor/wood/yew, +/area/crew_quarters/heads/office/ce/cobed) +"evv" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/junk, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"evy" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/evidence) +"evz" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"evB" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/firstdeck/aftport) +"evE" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/brig) +"evG" = ( +/obj/random/closet, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"evH" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"evJ" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"evU" = ( +/obj/structure/railing/mapped, +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/hallway/primary/fourthdeck/central_stairwell) +"evY" = ( +/obj/floor_decal/techfloor, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"ewe" = ( +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/exploration) +"ewh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/flasher{ + id_tag = "security_pod_flash"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/prison) +"ewl" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"ewq" = ( +/obj/structure/sign/warning/vent_port, +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d3starboard) +"ewu" = ( +/obj/floor_decal/chapel{ + dir = 4 + }, +/obj/structure/bed/chair/pew/left/mahogany, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"eww" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_north = 1; + tag_south = 2; + tag_east = 8 + }, +/obj/engine_setup/filter, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"ewz" = ( +/turf/simulated/floor/carpet/green, +/area/medical/mentalhealth/therapyroom) +"ewF" = ( +/obj/machinery/light/spot, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"ewO" = ( +/obj/floor_decal/corner/black{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"ewQ" = ( +/obj/machinery/navbeacon/sierra/TD_fore5, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"ewS" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/central_stairwell) +"ewZ" = ( +/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/dark, +/area/medical/morgue) +"exi" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "eng_lockdown"; + name = "Engineering Lockdown" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/locker_room) +"exj" = ( +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"exk" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/hidden/green, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d1port) +"exm" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "concheckwindow2"; + name = "Research Checkpoint Shutters"; + opacity = 0 + }, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/plating, +/area/shuttle/petrov/security) +"exs" = ( +/obj/structure/sign/warning/airlock{ + dir = 1 + }, +/turf/simulated/wall/prepainted, +/area/maintenance/solar) +"exx" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"exA" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"exG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 6 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"exH" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"exI" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#4c535b" + }, +/area/quartermaster/hangar/upper) +"exK" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hydroponics) +"exM" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"exY" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 4; + name = "Engineering Bay"; + sort_type = "Engineering Bay" + }, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"eyb" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/incinerator) +"eyl" = ( +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/obj/structure/closet/crate/freezer/rations, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod1/station) +"eym" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"eyn" = ( +/obj/machinery/light, +/obj/floor_decal/corner/grey/diagonal, +/obj/structure/closet/secure_closet/explorer/pilot, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration) +"eyr" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod1/station) +"eyD" = ( +/obj/machinery/button/windowtint{ + dir = 4; + id = "interrogation_no2_windows"; + pixel_x = -22; + pixel_y = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/machinery/computer/modular/preset/security{ + dir = 4 + }, +/obj/floor_decal/corner/black/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation/second) +"eyF" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "iaaleft" + }, +/obj/floor_decal/carpet/blue{ + dir = 4 + }, +/obj/floor_decal/carpet/blue, +/obj/floor_decal/carpet/blue{ + dir = 6 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"eyO" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, +/obj/machinery/meter, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"eyQ" = ( +/obj/structure/sign/directions/engineering{ + dir = 4; + pixel_y = 31 + }, +/obj/structure/sign/directions/supply{ + dir = 4; + pixel_y = 24 + }, +/turf/simulated/open, +/area/hallway/primary/seconddeck/central_stairwell) +"eyY" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d3port) +"ezl" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"ezv" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"ezw" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/engine_eva) +"ezy" = ( +/obj/structure/table/glass, +/obj/item/towel/random, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/random/soap, +/obj/item/lipstick/random{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/corner/grey/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/old_tile, +/area/crew_quarters/head) +"ezz" = ( +/obj/structure/table/woodentable_reinforced/mahogany/walnut, +/obj/floor_decal/spline/fancy/black, +/obj/item/flame/candle, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"ezA" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/item/stack/material/ocp/fifty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"ezH" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/obj/machinery/meter, +/turf/simulated/floor/tiled/dark/monotile, +/area/rnd/xenobiology/xenoflora) +"ezI" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/structure/closet/crate, +/obj/decal/cleanable/dirt, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"ezK" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/turf/simulated/floor/grass/cut, +/area/rnd/xenobiology/xenoflora) +"ezL" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"ezP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "eng_QAW"; + name = "Quick Access Warehouse" + }, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "eng_lockdown"; + name = "Engineering Lockdown" + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for shutters."; + id_tag = "eng_QAW"; + name = "Shutters Control"; + pixel_x = -24; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"eAa" = ( +/obj/machinery/door/window{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"eAi" = ( +/obj/structure/table/steel, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/security) +"eAj" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"eAk" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/mining/brace{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition/storage) +"eAo" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/obj/structure/flora/pottedplant/decorative, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"eAu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ + dir = 8; + id_tag = "escape_pod_4_berth"; + name = "escape pod four berth controller"; + pixel_x = 20; + pixel_y = -32; + tag_door = "escape_pod_4_berth_hatch"; + frequency = 1380 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"eAz" = ( +/turf/simulated/wall/prepainted, +/area/medical/staging) +"eAG" = ( +/obj/machinery/computer/ship/engines{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/guppy_hangar/start) +"eAH" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"eAI" = ( +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for shutters."; + id_tag = "eva_shutters"; + name = "EVA Shutters"; + pixel_y = 21; + req_access = list("ACCESS_EVA") + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"eAM" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/lockdown{ + id_tag = "lockdown2_6" + }, +/turf/simulated/floor/plating, +/area/bridge/lobby) +"eAP" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"eAS" = ( +/obj/structure/ladder/up, +/obj/floor_decal/corner/yellow/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"eAT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/turf/simulated/wall/ocp_wall, +/area/engineering/engine_room) +"eAU" = ( +/obj/decal/cleanable/dirt, +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/light_construct{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"eBq" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/lime/border{ + dir = 10 + }, +/obj/structure/sign/warning/pods/east{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"eBs" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/fourthdeck/fore) +"eBw" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/machinery/ship_map, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"eBA" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "burst_s" + }, +/obj/paint/red, +/obj/paint_stripe/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod6/station) +"eBC" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/vault/bolted{ + id_tag = "bridge_safe_exterior"; + name = "Bridge Safe Room" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/bridge) +"eBD" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/corner/lime/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/games, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/fore) +"eBL" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry) +"eBY" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/closet/kitchen, +/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/food/condiment/barbecue, +/obj/machinery/camera/network/second_deck{ + c_tag = "Mess Hall - Kitchen - Cooking" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"eCe" = ( +/obj/floor_decal/corner/red/border, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Treatment Center - Observation"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"eCf" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + controlled = 0; + internal_pressure_bound = 35000; + internal_pressure_bound_default = 35000; + pressure_checks = 2; + pressure_checks_default = 2; + use_power = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/thruster/d1starboard) +"eCj" = ( +/obj/machinery/disposal, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"eCo" = ( +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"eCs" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/undies_wardrobe, +/obj/machinery/light, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"eCv" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/machinery/recharger, +/obj/floor_decal/corner/lime/border{ + dir = 9 + }, +/obj/structure/table/standard, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"eCy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"eCH" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/civilian{ + dir = 4 + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_2" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/center) +"eCI" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/structure/bed/chair/padded/blue, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"eCO" = ( +/obj/structure/lattice, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/airless, +/area/space) +"eCP" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/black, +/obj/machinery/camera/network/engine{ + c_tag = "Engine - Port Thruster"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"eCQ" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/centralport) +"eCX" = ( +/obj/structure/table/rack, +/obj/random/tech_supply, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"eCZ" = ( +/obj/structure/railing/mapped{ + dir = 4; + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + color = "#8c911d" + }, +/turf/simulated/floor/plating, +/area/rnd/misc_lab) +"eDb" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/floor_decal/industrial/hatch/grey, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/security{ + name = "Visiting Room" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/brig) +"eDe" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/obj/structure/flora/pottedplant/decorative, +/obj/machinery/camera/network/command{ + c_tag = "Command - Adjutants"; + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/bridge/adjutants) +"eDg" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"eDk" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/blast_door{ + id_tag = "xenobio2"; + name = "Containment Blast Doors"; + pixel_x = -6; + req_access = list("ACCESS_RESEARCH") + }, +/obj/machinery/button/blast_door{ + id_tag = "xenobio2_vent"; + name = "Cell 2 Vent"; + pixel_x = 6; + req_access = list("ACCESS_RESEARCH") + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"eDo" = ( +/obj/item/folder/red{ + pixel_y = 0 + }, +/obj/item/stamp/hos, +/obj/structure/table/woodentable_reinforced/ebony, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"eDq" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"eDt" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1 + }, +/obj/machinery/alarm/monitor/isolation{ + alarm_id = "petrov1"; + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell1) +"eDx" = ( +/obj/machinery/light_switch{ + pixel_x = -10; + pixel_y = 28 + }, +/obj/structure/table/rack, +/obj/floor_decal/spline/plain/yellow{ + dir = 8 + }, +/obj/item/stack/tile/wood{ + amount = 10 + }, +/obj/item/stack/tile/walnut{ + amount = 10 + }, +/obj/item/stack/tile/yew{ + amount = 10 + }, +/obj/item/stack/tile/maple{ + amount = 10 + }, +/obj/item/stack/tile/mahogany{ + amount = 10 + }, +/obj/item/stack/tile/ebony{ + amount = 10 + }, +/obj/item/stack/tile/bamboo{ + amount = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"eDC" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/waterstore) +"eDD" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/airlock/civilian{ + dir = 4; + name = "Crew General Cabin" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"eDJ" = ( +/obj/machinery/reagentgrinder, +/obj/floor_decal/corner/beige{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Chemistry"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"eDL" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/thruster/d3port) +"eDM" = ( +/obj/structure/bed/chair/office/teal{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"eDX" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/rd, +/obj/item/reagent_containers/syringe, +/obj/item/reagent_containers/syringe, +/obj/random/drinkbottle, +/turf/simulated/floor/wood/walnut, +/area/maintenance/firstdeck/foreport) +"eEb" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"eEi" = ( +/obj/structure/table/standard, +/obj/item/storage/box/detergent{ + pixel_y = 4; + pixel_x = 7 + }, +/obj/item/towel/random{ + pixel_y = -4; + pixel_x = -5 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/heads/captain/secret_room/level_one) +"eEw" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/reagent_sublimator, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"eEA" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"eEC" = ( +/obj/floor_decal/corner/darkblue, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"eEO" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/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" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/center) +"eEX" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/bed/chair/office/comfy/red{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"eEZ" = ( +/obj/structure/bed/chair/padded/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"eFd" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"eFf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/decal/cleanable/generic, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"eFg" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced/no_grille, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/xenoflora) +"eFn" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"eFr" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/blue/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"eFv" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/surgery/second) +"eFH" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/corner/green/border, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"eFK" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"eFO" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/thirddeck/aftport) +"eFZ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"eGe" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"eGC" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"eGR" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/foreport) +"eGS" = ( +/obj/structure/sign/warning/engineering_access{ + pixel_y = 32 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"eGU" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"eHb" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/holocontrol) +"eHe" = ( +/obj/structure/table/standard, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/folder/white, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/infirmreception) +"eHm" = ( +/obj/machinery/computer/guestpass{ + pixel_y = 24 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"eHt" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/industrial/danger{ + dir = 9 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/chemical_dispenser/bar_soft/full{ + dir = 1 + }, +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"eHy" = ( +/obj/machinery/door/airlock/glass/command{ + dir = 4; + id_tag = "portbridgedoor"; + name = "Bridge"; + secured_wires = 1 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "bridge_ent"; + name = "Bridge Lockdown" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"eHA" = ( +/obj/floor_decal/carpet/blue2{ + dir = 1 + }, +/obj/floor_decal/carpet/blue2{ + dir = 4 + }, +/obj/floor_decal/carpet/blue2{ + dir = 5 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1; + icon_state = "window" + }, +/obj/structure/filingcabinet/chestdrawer{ + dir = 1 + }, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/hop/cobed) +"eHM" = ( +/turf/simulated/open, +/area/quartermaster/hangar_stairs/upper) +"eHP" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"eIe" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/fourthdeck/aft) +"eIg" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"eIh" = ( +/turf/simulated/wall/r_wall/hull, +/area/command/exploration_leader) +"eIl" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"eIn" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/power/port_gen/pacman{ + sheets = 25 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"eIo" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"eIr" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + opacity = 0 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"eIu" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/turret_protected/ai) +"eIv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftstarboard) +"eIy" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"eID" = ( +/obj/machinery/disposal, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar_stairs) +"eII" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"eIL" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"eIY" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"eJb" = ( +/obj/floor_decal/corner/red/mono, +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 4; + pixel_x = -14 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"eJf" = ( +/obj/floor_decal/carpet/blue2, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/obj/floor_decal/carpet/blue2{ + dir = 8 + }, +/obj/floor_decal/carpet/blue2{ + dir = 10 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/garden_room) +"eJi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/orange, +/area/security/range) +"eJk" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped, +/obj/item/stack/material/wood/yew/twentyfive, +/obj/item/stack/material/wood/walnut/twentyfive, +/obj/item/stack/material/wood/maple/twentyfive, +/obj/item/stack/material/wood/mahogany/ten, +/obj/item/stack/material/wood/fifty, +/obj/item/stack/material/wood/ebony/ten, +/obj/item/stack/material/wood/bamboo/fifty, +/obj/floor_decal/spline/plain/black{ + dir = 10; + icon_state = "spline_plain" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"eJn" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/docking) +"eJo" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"eJr" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"eJs" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/machinery/recharge_station, +/obj/machinery/camera/network/bridge_deck{ + dir = 8; + c_tag = "Bridge Deck - Central Hallway - Starboard" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"eJA" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/b_green/bordercorner2{ + dir = 10 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/airlock) +"eJC" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/seconddeck/aft) +"eJG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cockpit) +"eJL" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -6; + pixel_y = -21 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"eJO" = ( +/obj/floor_decal/corner/red/bordercee{ + dir = 1 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"eJR" = ( +/obj/structure/inflatable, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"eJS" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"eJT" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/office) +"eKa" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"eKb" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"eKd" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/firstdeck/central_stairwell) +"eKi" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"eKr" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "bridge_windows" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/bridge) +"eKv" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"eKw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/office) +"eKz" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"eKL" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/heart{ + pixel_y = 2; + pixel_x = 7 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/punitelli{ + pixel_y = -4; + pixel_x = -4 + }, +/obj/item/reagent_containers/food/drinks/cans/cola_pork{ + pixel_y = 12; + pixel_x = -3 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/sleep/bunk) +"eKN" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/storage/box/lights/mixed, +/obj/item/clothing/gloves/thick/duty, +/obj/machinery/light/small, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/firstdeck/centralport) +"eKO" = ( +/turf/simulated/wall/r_wall/hull, +/area/bridge/storage) +"eKS" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"eKY" = ( +/obj/structure/closet, +/obj/random/maintenance, +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1; + target_pressure = 200 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"eLn" = ( +/obj/floor_decal/corner/green/half{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/reagent_dispensers/watertank, +/obj/item/reagent_containers/glass/bucket, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"eLz" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 4; + pixel_x = -14 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/fore) +"eLC" = ( +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/airless, +/area/solar/starboard) +"eLG" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"eLH" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/space) +"eLV" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/exploration/briefing_room) +"eLZ" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"eMa" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/commissary) +"eMj" = ( +/obj/machinery/botany/extractor, +/obj/floor_decal/corner/green/half, +/obj/floor_decal/corner/purple/border, +/obj/machinery/camera/network/research{ + c_tag = "Research - Xenoflora Lab"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"eMr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/emergency) +"eMt" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 8 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/obj/random/junk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"eMv" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"eMB" = ( +/obj/floor_decal/corner/black/border{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"eMC" = ( +/obj/machinery/disposal, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge/upper) +"eME" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/space) +"eMF" = ( +/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/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"eML" = ( +/obj/landmark{ + name = "carpspawn" + }, +/turf/simulated/open, +/area/space) +"eMM" = ( +/obj/structure/table/standard, +/obj/item/roller_bed, +/obj/item/roller_bed, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"eMP" = ( +/obj/floor_decal/corner/red/full, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/gym) +"eMR" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"eMW" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation/second) +"eMY" = ( +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"eNe" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"eNi" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"eNk" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/chemistry) +"eNl" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/waterstore) +"eNs" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/spline/plain/black{ + dir = 5; + icon_state = "spline_plain" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"eNt" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"eNw" = ( +/obj/floor_decal/corner/black/bordercorner, +/obj/structure/handrail, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"eNz" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/blue/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"eNG" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 8; + id_tag = "hydro<-bar"; + name = "Hydro Shutters" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/bar) +"eNJ" = ( +/obj/structure/table/standard, +/obj/item/storage/box/rxglasses, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/ward) +"eNO" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/storage/box/donut, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/poster{ + pixel_y = -32 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"eNR" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"eNZ" = ( +/obj/floor_decal/corner/darkblue/full, +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/floor_decal/corner/black/border, +/obj/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"eOb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"eOj" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "escape_pod_2_pump" + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/grey/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod2/station) +"eOo" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/dark/monotile, +/area/maintenance/bridgedeck/port) +"eOx" = ( +/obj/structure/table/marble, +/obj/item/material/kitchen/rollingpin, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"eOA" = ( +/obj/shuttle_landmark/merc/deck1, +/turf/space, +/area/space) +"eOE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"ePa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"ePe" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"ePj" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/machinery/rotating_alarm/security_alarm{ + pixel_y = 13 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"ePm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ + dir = 8; + id_tag = "escape_pod_2_berth"; + name = "escape pod two berth controller"; + pixel_x = 20; + pixel_y = -32; + tag_door = "escape_pod_2_berth_hatch"; + frequency = 1380 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"ePs" = ( +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/aneg, +/obj/item/reagent_containers/ivbag/blood/human/apos, +/obj/item/reagent_containers/ivbag/blood/human/bneg, +/obj/item/reagent_containers/ivbag/blood/human/bpos, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/reagent_containers/food/snacks/candy/donor, +/obj/item/reagent_containers/food/snacks/candy/donor, +/obj/item/reagent_containers/food/snacks/candy/donor, +/obj/item/reagent_containers/food/snacks/candy/donor, +/obj/item/reagent_containers/food/snacks/candy/donor, +/obj/item/reagent_containers/food/snacks/candy/donor, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/random/blood_packs, +/obj/random/blood_packs, +/obj/random/blood_packs, +/obj/random/blood_packs, +/turf/simulated/floor/tiled/white, +/area/medical/equipstorage) +"ePv" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/exploration) +"ePE" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"ePH" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ePX" = ( +/obj/machinery/door/blast/regular/escape_pod{ + id_tag = "escape_pod_2" + }, +/turf/simulated/floor/reinforced, +/area/vacant/monitoring) +"eQk" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"eQp" = ( +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"eQv" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "xenobio1"; + name = "Containment Blast Doors" + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level1) +"eQC" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"eQE" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/nuke_storage) +"eQO" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/solar/bridge_starboard) +"eQQ" = ( +/obj/structure/catwalk, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"eQR" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"eQV" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/glass/bucket, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/ship) +"eQY" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"eRd" = ( +/obj/structure/railing/mapped, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"eRj" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/medical/virology/atmos) +"eRn" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"eRo" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/prepainted, +/area/security/sierra/forensic/lab) +"eRu" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"eRz" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"eRD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"eRE" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"eRH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"eRP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"eRU" = ( +/obj/structure/closet/secure_closet/personal, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"eRV" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell3) +"eSe" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/seconddeck/forestarboard) +"eSg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"eSi" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"eSp" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/artifact, +/obj/machinery/anomaly_container, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell1) +"eSq" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"eSs" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/extinguisher/mini, +/obj/item/extinguisher/mini, +/obj/item/extinguisher/mini, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"eSF" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + name = "Robotics Laboratory"; + req_access = newlist() + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/assembly/robotics) +"eSI" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/l3closet/scientist, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"eSJ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "eng_lockdown"; + name = "Engineering Lockdown" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engineering_monitoring) +"eSL" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "toxin_lab_access_inner"; + name = "Toxin Lab Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"eSR" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"eSY" = ( +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d1port) +"eTa" = ( +/obj/structure/table/rack, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"eTg" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"eTu" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"eTv" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1380; + id_tag = "admin_shuttle_dock_inner"; + name = "Docking Port Airlock" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/center) +"eTF" = ( +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"eTK" = ( +/obj/floor_decal/spline/fancy/black/corner, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/bar/cobed) +"eTL" = ( +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"eUc" = ( +/obj/machinery/suit_storage_unit/atmos/alt, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"eUd" = ( +/obj/machinery/door/airlock/external/bolted{ + dir = 4; + frequency = 1380; + id_tag = "escape_pod_4_hatch"; + name = "Escape Pod Four Hatch" + }, +/obj/machinery/shield_diffuser, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod4/station) +"eUo" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/structure/window/boron_reinforced{ + dir = 4 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d3port) +"eUs" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 1 + }, +/obj/floor_decal/corner/beige/diagonal, +/obj/floor_decal/corner/brown/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/vacant/dormintories) +"eUx" = ( +/obj/machinery/cryopod, +/obj/machinery/computer/cryopod{ + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod4/station) +"eUz" = ( +/obj/floor_decal/corner/black/full, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/gym) +"eUH" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"eUL" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"eUR" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"eUW" = ( +/obj/floor_decal/corner/yellow, +/obj/item/wrench, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/ce/cobed) +"eVa" = ( +/obj/machinery/door/airlock/command{ + id_tag = "hosdoor"; + name = "Head Of Security"; + req_access = newlist(); + secured_wires = 1; + stripe_color = "#9d2300"; + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/hos) +"eVd" = ( +/obj/structure/flora/seaweed, +/mob/living/simple_animal/aquatic/fish/grump{ + name = "Titus" + }, +/obj/fluid_mapped, +/turf/simulated/floor/beach/sand, +/area/crew_quarters/cafe/upper) +"eVe" = ( +/obj/machinery/space_heater{ + pixel_y = 32 + }, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace/chamber) +"eVk" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/sleep/cryo/bridge) +"eVv" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/item/storage/firstaid/empty, +/obj/item/storage/firstaid/empty, +/obj/item/storage/firstaid/empty, +/obj/item/device/scanner/health, +/obj/item/device/scanner/health, +/obj/item/device/scanner/health, +/obj/structure/table/rack, +/turf/simulated/floor/tiled/techfloor/grid, +/area/assembly/robotics) +"eVy" = ( +/obj/floor_decal/corner/grey{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"eVF" = ( +/obj/structure/catwalk, +/obj/machinery/camera/network/engine{ + c_tag = "Engine - SMES"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_smes) +"eVG" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/breakroom) +"eVI" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/random/sierracloset, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"eVJ" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "admin_shuttle_dock_pump" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/center) +"eVO" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"eVU" = ( +/obj/machinery/computer/station_alert/security, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"eVW" = ( +/obj/structure/closet/emcloset/anchored, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"eWf" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 4 + }, +/obj/structure/bed/chair/shuttle/green{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/airlock) +"eWg" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"eWh" = ( +/obj/structure/bed/psych, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/carpet/green{ + dir = 1 + }, +/turf/simulated/floor/carpet/green, +/area/medical/mentalhealth/therapyroom) +"eWu" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "auxair_outer"; + name = "Auxiliary Air Storage Exterior Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/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/atmospherics/pipe/simple/hidden/cyan, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos/storage) +"eWC" = ( +/obj/machinery/door/airlock/external{ + autoset_access = 0; + req_access = newlist() + }, +/turf/simulated/floor/plating, +/area/vacant/cargo) +"eWI" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/ship_map, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"eWN" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/table/glass, +/obj/item/paper_bin, +/obj/item/pen/red, +/obj/item/pen/blue, +/obj/item/pen, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"eWT" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"eXb" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"eXe" = ( +/obj/floor_decal/corner/yellow, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"eXn" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/machinery/power/apc/high{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"eXv" = ( +/obj/machinery/door/window/brigdoor/southright{ + autoset_access = 0; + dir = 8; + name = "Test Chamber"; + req_access = list("ACCESS_TOXINS") + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"eXy" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level2) +"eXK" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"eXP" = ( +/obj/structure/table/reinforced, +/obj/item/device/assembly/igniter{ + pixel_y = -2; + pixel_x = -2 + }, +/obj/item/device/assembly/igniter{ + pixel_y = 6; + pixel_x = -3 + }, +/obj/item/device/assembly/igniter{ + pixel_x = 3; + pixel_y = -4 + }, +/obj/item/device/assembly/igniter{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"eXV" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/highsecurity/bolted{ + id_tag = "BSD_airlock"; + name = "Containment Chamber" + }, +/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/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/bluespace/chamber) +"eYc" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"eYf" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"eYh" = ( +/obj/machinery/rotating_alarm/security_alarm{ + dir = 4; + pixel_x = -14 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/flora/ausbushes/ppflowers, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/grass/cut, +/area/hallway/primary/bridgedeck/center) +"eYo" = ( +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"eYs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"eYz" = ( +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate, +/obj/item/device/drone_designator, +/obj/item/device/multitool, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"eYD" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"eYI" = ( +/obj/structure/table/standard, +/obj/machinery/light_construct{ + dir = 8 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -21 + }, +/obj/random/junk, +/turf/simulated/floor/tiled, +/area/maintenance/abandoned_hydroponics) +"eYN" = ( +/obj/structure/railing/mapped, +/obj/machinery/constructable_frame, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"eYQ" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/structure/bed/sofa/r/brown{ + dir = 8 + }, +/obj/floor_decal/carpet/red, +/obj/floor_decal/carpet/red{ + dir = 4 + }, +/obj/floor_decal/carpet/red{ + dir = 6 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"eYR" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/titanium, +/area/shuttle/petrov/ship) +"eYS" = ( +/obj/machinery/flasher{ + id_tag = "security_perm_chamber_flash"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"eYU" = ( +/obj/machinery/atmospherics/binary/circulator{ + anchored = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"eYX" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"eZa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"eZp" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/table/woodentable/ebony, +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"eZr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"eZy" = ( +/obj/machinery/shieldwallgen, +/obj/machinery/door/blast/regular/open{ + id_tag = "misclab"; + name = "Test Chamber Blast Doors"; + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"eZB" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"eZI" = ( +/obj/structure/closet/radiation, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"eZK" = ( +/obj/item/stock_parts/subspace/treatment, +/obj/item/stock_parts/subspace/analyzer, +/obj/item/stock_parts/subspace/amplifier, +/obj/item/stock_parts/subspace/ansible, +/obj/item/stock_parts/subspace/crystal, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/transmitter, +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech/high_risk) +"eZQ" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"eZV" = ( +/obj/floor_decal/corner/red, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"far" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "bar<-cafe"; + name = "Bar Shutters" + }, +/obj/structure/table/steel_reinforced, +/obj/floor_decal/industrial/hatch/grey, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/bar) +"faw" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"fax" = ( +/obj/paint_stripe/turquoise, +/obj/paint/black, +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai_teleport) +"faA" = ( +/turf/simulated/wall/r_wall/hull, +/area/vacant/infirmary) +"faB" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "td_fore_starboard_inner"; + name = "Third Deck Fore Starboard Nacelle Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/access_button/airlock_interior{ + master_tag = "td_fore_starboard"; + name = "interior access button"; + req_access = list("ACCESS_EXTERNAL"); + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/forestarboard) +"faF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/civilian{ + id_tag = "toilet1"; + name = "Stall One" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"faG" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"faN" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"fba" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"fbb" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/ore_box, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition/storage) +"fbk" = ( +/obj/machinery/door/airlock/civilian{ + dir = 4; + id_tag = "cafe_private_room"; + name = "Private Room" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/spline/fancy/wood/cee{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"fbs" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"fby" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"fbB" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"fbC" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"fbD" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftport) +"fbE" = ( +/turf/simulated/wall/prepainted, +/area/bridge/nano) +"fbL" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"fbM" = ( +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/standard, +/obj/item/stack/package_wrap/cargo_wrap, +/obj/item/device/destTagger, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/office) +"fbN" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + frequency = 1441; + id = "rust_injector"; + injecting = 1; + use_power = 1; + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"fbX" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"fbZ" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/orange/corner, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"fca" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"fcb" = ( +/obj/machinery/ai_status_display, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall/hull, +/area/turret_protected/ai_teleport) +"fcd" = ( +/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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"fcf" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/wallframe_spawn/no_grille, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown3_2" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft) +"fcj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/grey/border, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"fcx" = ( +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"fcy" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"fcz" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "sd_starboard_pump" + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"fcC" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/cyan, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"fcI" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/hydroponics) +"fcN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"fcQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"fcT" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/item/device/scanner/spectrometer/adv, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"fda" = ( +/obj/structure/catwalk, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"fds" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"fdy" = ( +/obj/floor_decal/techfloor/orange, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"fdz" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"fdA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"fdB" = ( +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d3starboard) +"fdC" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/shield_diffuser, +/obj/machinery/door/airlock/external{ + frequency = 1379; + id_tag = "solar_bridge_port_outer"; + locked = 1; + name = "Engineering External Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar/bridge_port) +"fdF" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft) +"fdI" = ( +/obj/machinery/space_heater, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/shuttle/petrov/test_room) +"fdQ" = ( +/obj/floor_decal/corner/black/mono, +/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" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"fdR" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/lime/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"fdV" = ( +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"fdX" = ( +/obj/structure/lattice, +/obj/structure/catwalk, +/turf/simulated/open, +/area/space) +"fdZ" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"fea" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/NT{ + pixel_y = 4; + pixel_x = -5 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/NT{ + pixel_y = 6; + pixel_x = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"fef" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"fei" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/closet/crate/trashcart, +/obj/random/firstaid, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"fej" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"fev" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"feA" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"feE" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"feJ" = ( +/obj/structure/closet/crate/radiation, +/obj/item/stack/material/tritium/ten, +/obj/item/stack/material/tritium/ten, +/obj/machinery/camera/network/engine{ + c_tag = "Engine - R-UST - Start-up Generator"; + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"feM" = ( +/obj/machinery/atmospherics/portables_connector, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"feR" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/waterstore) +"ffc" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 5 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"ffd" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"ffh" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"ffj" = ( +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"ffp" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"ffu" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/port) +"ffv" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/machinery/portable_atmospherics/canister/empty/phoron, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"ffw" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/command{ + dir = 4; + name = "Bridge Access"; + req_access = list("ACCESS_SEC_DOORS"); + autoset_access = 0 + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_6" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/lobby) +"ffy" = ( +/obj/floor_decal/corner/green/border{ + dir = 9 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ffB" = ( +/obj/structure/table/marble, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"ffF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"ffN" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/foreport) +"ffU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/eva) +"fga" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/reagent_dispensers/water_cooler, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"fgf" = ( +/obj/structure/holoplant, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"fgo" = ( +/obj/machinery/door/blast/regular/open{ + id_tag = "xenobio2"; + name = "Containment Blast Doors" + }, +/obj/wallframe_spawn/reinforced_phoron/hull, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level1) +"fgD" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/scan) +"fgG" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/hologram/holopad{ + pixel_x = -16 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"fgI" = ( +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"fgP" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 4 + }, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"fgR" = ( +/obj/machinery/power/terminal, +/obj/floor_decal/industrial/warning, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/substation/firstdeck) +"fgX" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ + dir = 4; + id_tag = "escape_pod_8"; + name = "escape pod eight controller"; + pixel_x = -20; + tag_door = "escape_pod_8_hatch"; + frequency = 1380 + }, +/obj/structure/bed/chair/shuttle{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/escape_pod/escape_pod8/station) +"fhh" = ( +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"fhm" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/seconddeck/starboard) +"fhs" = ( +/obj/catwalk_plated/dark, +/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/plating, +/area/crew_quarters/sleep/cryo/firstdeck) +"fht" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"fhu" = ( +/obj/floor_decal/corner/blue/three_quarters{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/obj/structure/table/rack, +/obj/item/rig/command/cmo/equipped, +/obj/item/clothing/mask/gas/half, +/obj/machinery/door/window/northleft{ + name = "CMO's HCM"; + req_access = newlist(); + dir = 2 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"fhw" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/screwdriver, +/obj/item/wrench, +/obj/structure/railing/mapped, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/compactor) +"fhP" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"fhV" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/thirddeck/center) +"fhX" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/item/device/radio/intercom/department/medbay{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"fhY" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"fih" = ( +/obj/machinery/door/window/southright{ + dir = 1; + name = "Test Chamber" + }, +/obj/machinery/door/window/southright{ + name = "Test Chamber" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell3) +"fik" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"fit" = ( +/obj/structure/closet/cabinet, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"fiz" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/center) +"fiA" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 1; + icon_state = "map" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"fiC" = ( +/obj/machinery/door/morgue{ + name = "Confession Booth" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"fiD" = ( +/obj/machinery/suit_cycler/exploration, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/eva) +"fiO" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"fiP" = ( +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 23 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"fiQ" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/lime/border{ + dir = 5 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/bed/sofa/r/brown, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"fiW" = ( +/obj/structure/table/standard, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/item/device/paicard, +/obj/random/tech_supply, +/obj/floor_decal/corner/yellow/mono, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"fiX" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/hallway/primary/fourthdeck/center) +"fjh" = ( +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"fjl" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/aft) +"fjo" = ( +/obj/structure/closet/secure_closet/prospector, +/obj/item/shuttle_beacon, +/obj/item/device/radio, +/obj/item/storage/belt/utility/full, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/brown/border{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"fju" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/vault/bolted{ + autoset_access = 0; + id_tag = "bridgesafe_front"; + name = "Auxillary Safe Room Door" + }, +/obj/item/airlock_brace{ + req_access = list("ACCESS_BRIDGE") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/bridge) +"fjw" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + frequency = 1441; + id = "waste_in"; + use_power = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"fjF" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"fjG" = ( +/obj/floor_decal/corner/green/border, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/sleep/cryo/south) +"fjQ" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Security Maintenance"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/security/sierra/hallway) +"fjT" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/mining{ + autoset_access = 0; + req_access = list("ACCESS_HANGAR") + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar_stairs) +"fjV" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/cafe) +"fkc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall/prepainted{ + can_open = 1 + }, +/area/crew_quarters/heads/captain/secret_room/level_one) +"fkf" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs/upper) +"fki" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "interrogation_no1_windows" + }, +/turf/simulated/floor/plating, +/area/security/sierra/interrogation) +"fkJ" = ( +/obj/item/stool, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"fkN" = ( +/obj/machinery/access_button/airlock_interior{ + master_tag = "prototype_controller"; + pixel_x = 23; + pixel_y = 23 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/prototype/engine) +"fkQ" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"fkR" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/petrov/airlock) +"fkW" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"fkY" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + id_tag = "calypso_shuttle_pump" + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + cycle_to_external_air = 1; + dir = 8; + frequency = 1331; + id_tag = "calypso_shuttle"; + pixel_x = 20; + req_access = list("ACCESS_EXPEDITION_SHUTTLE"); + tag_exterior_sensor = "calypso_shuttle_exterior_sensor" + }, +/obj/floor_decal/industrial/warning/full, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/exploration_shuttle/airlock) +"flf" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dormintories) +"flh" = ( +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/machinery/computer/modular/preset/engineering{ + dir = 4 + }, +/obj/floor_decal/corner/brown/mono, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"flr" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/crew_quarters/gym) +"flu" = ( +/obj/structure/table/rack, +/obj/structure/window/reinforced, +/obj/machinery/door/window/southright{ + dir = 4; + name = "RD's HCM"; + req_access = newlist() + }, +/obj/item/rig/hazmat/equipped, +/obj/item/clothing/mask/gas/half, +/obj/floor_decal/corner/purple/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/heads/office/rd) +"flz" = ( +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"flB" = ( +/obj/machinery/computer/arcade, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"flG" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"flJ" = ( +/obj/structure/closet/crate, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/random/tech_supply, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"flP" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"flQ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/cafe) +"fmm" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"fmo" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"fmq" = ( +/obj/machinery/sleeper, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"fmy" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 6 + }, +/obj/machinery/vending/coffee{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"fmD" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"fmH" = ( +/obj/structure/table/standard, +/obj/machinery/photocopier/faxmachine{ + department = "IAA Office" + }, +/obj/item/documents/nanotrasen/sierra, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/structure/closet/walllocker/secure_closet{ + pixel_y = 32 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"fmK" = ( +/obj/floor_decal/corner/black{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"fmM" = ( +/obj/structure/cable/green{ + 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/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/security{ + dir = 4; + name = "Brig Storage" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/equipment) +"fmP" = ( +/obj/machinery/atmospherics/unary/heat_exchanger{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/outline/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"fmT" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/nuke_cylinder_dispenser{ + pixel_x = 2 + }, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 4; + pixel_x = -14 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/nuke_storage) +"fnb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/quartermaster/office/post) +"fne" = ( +/obj/machinery/ai_status_display, +/turf/simulated/wall/r_wall/hull, +/area/turret_protected/ai_maint) +"fnn" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"fno" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"fns" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/structure/flora/pottedplant/overgrown, +/obj/structure/sign/warning/smoking{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"fnv" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"fny" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/cafe/upper) +"fnN" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/space) +"fnX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"fnZ" = ( +/obj/structure/railing/mapped, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"foc" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/storage/primary) +"fog" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"fok" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/table/woodentable/walnut, +/obj/machinery/microwave, +/obj/machinery/light_construct{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/gambling) +"fol" = ( +/obj/overmap/visitable/ship/landable/crucian, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"foq" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"fov" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/black/mono, +/obj/structure/bed/chair/rounded/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"foH" = ( +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins/storage) +"foM" = ( +/obj/machinery/computer/modular/preset/engineering{ + dir = 4 + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Atmospherics - West"; + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"foS" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/obj/machinery/constructable_frame/machine_frame, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_smes) +"foZ" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/woodentable/walnut, +/obj/item/storage/firstaid/regular, +/obj/floor_decal/spline/fancy/black{ + dir = 5 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"fpc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"fpg" = ( +/obj/structure/sign/warning/docking_area{ + pixel_y = 32 + }, +/obj/structure/catwalk, +/obj/structure/railing/mapped, +/turf/space, +/area/space) +"fpj" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/airlock/civilian{ + dir = 4; + name = "Engineers General Cabin"; + req_access = list("ACCESS_ENGINEERING"); + autoset_access = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sleep/bunk) +"fpo" = ( +/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/hologram/holopad, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + dir = 8; + id_tag = "security_lockdown"; + name = "SECURITY LOCKDOWN"; + pixel_x = 24; + pixel_y = -12; + req_access = list("ACCESS_HEAD_OF_SECURITY") + }, +/obj/machinery/button/blast_door{ + dir = 8; + id_tag = "firingspace"; + name = "Firing Range Shields"; + pixel_x = 24; + req_access = list("ACCESS_SEC_DOORS") + }, +/obj/machinery/button/windowtint{ + id = "hos_windows"; + pixel_x = 24; + pixel_y = 12; + dir = 8 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"fpp" = ( +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/table/marble, +/obj/item/hand_labeler, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"fpq" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/mob/living/simple_animal/hostile/retaliate/parrot/Poly, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"fpv" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/table/steel, +/obj/item/tank/nitrogen, +/obj/item/clothing/mask/breath, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"fpB" = ( +/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" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/suplocker_room) +"fpD" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"fpE" = ( +/obj/shuttle_landmark/sierra/deck5/crucian, +/turf/space, +/area/space) +"fpG" = ( +/obj/machinery/smartfridge/drying_rack{ + dir = 1 + }, +/obj/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled/monotile, +/area/maintenance/abandoned_hydroponics) +"fpI" = ( +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/lime/bordercorner, +/turf/simulated/floor/tiled, +/area/holocontrol) +"fpP" = ( +/obj/random/trash, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"fpU" = ( +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"fpW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/meter, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"fpX" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"fqc" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/titanium, +/area/shuttle/petrov/cell2) +"fqh" = ( +/obj/machinery/door/airlock/multi_tile/medical{ + id_tag = "MedbayER2"; + name = "Critical Wing" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_staging_lockdown"; + name = "Infirmary Staging Shutters" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"fqm" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/closet/emcloset, +/obj/machinery/camera/network/command{ + c_tag = "Command - Starboard Bridge Entry"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"fqq" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/obj/structure/sign/nanotrasen{ + dir = 1 + }, +/turf/simulated/wall/titanium, +/area/guppy_hangar/start) +"fqy" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/engine_smes) +"fqF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"fqJ" = ( +/turf/simulated/wall/prepainted, +/area/chapel/office) +"fqR" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"fqU" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"fqW" = ( +/obj/structure/flora/pottedplant/fern, +/obj/floor_decal/carpet/purple, +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/obj/floor_decal/carpet/purple{ + dir = 10 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/captain/beach) +"frc" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/port) +"frh" = ( +/obj/item/stool/bar, +/obj/decal/cleanable/filth, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"frl" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"fru" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/crystal{ + name = "Adherent Maintenance" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/adherent) +"frD" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"frJ" = ( +/obj/structure/catwalk, +/obj/machinery/power/smes/buildable/preset/sierra/shuttle/charon, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/power/apc/charon{ + dir = 1; + name = "north bump"; + pixel_y = 24; + req_access = list(list("ACCESS_EXPLORER","ACCESS_ENGINEERING")) + }, +/turf/simulated/floor/plating, +/area/exploration_shuttle/power) +"frK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"frN" = ( +/obj/random/trash, +/turf/simulated/floor/tiled, +/area/maintenance/firstdeck/aftstarboard) +"frX" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"fsb" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/storage/box/donut, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/floor_decal/carpet/red{ + dir = 1 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/captain/beach) +"fsc" = ( +/obj/machinery/constructable_frame/computerframe{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"fsu" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"fsz" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/seconddeck) +"fsI" = ( +/obj/machinery/atmospherics/unary/freezer{ + icon_state = "freezer" + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"fsK" = ( +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"fsR" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/vacant/cargo) +"fsX" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/canister) +"ftd" = ( +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/hallway/primary/bridgedeck/central_stairwell) +"ftg" = ( +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/obj/structure/sign/warning/pods/east{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"ftk" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/shuttle_ceiling/sierra, +/area/space) +"ftn" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/research{ + name = "Toxins Storage" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins/storage) +"fto" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"ftw" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/hallway/primary/thirddeck/center) +"ftD" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"ftF" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"ftI" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"ftL" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Escape Pods - Port - Dock"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"ftM" = ( +/obj/structure/disposalpipe/segment, +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/cargo_l) +"ftP" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"ftS" = ( +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "solar_port"; + pixel_x = -5; + pixel_y = 21; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/machinery/airlock_sensor{ + id_tag = "solar_port_sensor"; + master_tag = "solar_port"; + pixel_x = 8; + pixel_y = 27 + }, +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"ftU" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"fua" = ( +/obj/structure/table/glass, +/obj/random/snack, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/floor_decal/corner/darkblue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"fub" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"fuc" = ( +/obj/machinery/shield_diffuser, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"fue" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/bed/sofa/m/red{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"fuf" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/blue/border, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/hop/cobed) +"fuh" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/random/action_figure, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"fui" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/open, +/area/maintenance/firstdeck/centralstarboard) +"ful" = ( +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + dir = 8; + id_tag = "eng2"; + name = "Third Deck Port Nacelle Access"; + pixel_x = 20; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/thruster/d3port) +"fuw" = ( +/obj/decal/cleanable/dirt, +/obj/structure/table/steel_reinforced, +/obj/item/pen, +/obj/item/paper_bin, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/heads/captain/secret_room) +"fux" = ( +/turf/simulated/floor/reinforced, +/area/vacant/monitoring) +"fuA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"fuH" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "escape_pod_5_pump" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"fuL" = ( +/obj/structure/foamedmetal, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"fuP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"fuX" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/vault/bolted{ + autoset_access = 0; + id_tag = "medsafe_fore"; + name = "Emergency Exit" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"fvb" = ( +/obj/structure/closet/crate/secure/weapon, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"fvn" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/fore) +"fvA" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan, +/obj/machinery/meter, +/obj/floor_decal/techfloor, +/obj/structure/closet/radiation, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/power) +"fvE" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/binary/pump/on{ + dir = 4; + target_pressure = 200 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"fvF" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/plating, +/area/shuttle/petrov/test_room) +"fvG" = ( +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"fvJ" = ( +/obj/structure/catwalk, +/obj/structure/handrail, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"fvL" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + dir = 4; + id_tag = "eng1"; + name = "Third Deck Starboard Nacelle Access"; + pixel_x = -20; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/machinery/power/apc/high/critical{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Fourth Deck - Starbound Necelle - Airlock" + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"fvM" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"fvR" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/quartermaster/office/post) +"fvU" = ( +/obj/floor_decal/corner/grey/full, +/obj/structure/sign/poster{ + pixel_x = 32 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/blue, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"fwa" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/sleep/cryo/firstdeck) +"fwg" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/black{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"fwh" = ( +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"fwr" = ( +/obj/structure/catwalk, +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"fwu" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/central_stairwell) +"fww" = ( +/obj/floor_decal/corner/red/bordercorner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"fwy" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"fwE" = ( +/obj/machinery/light, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/structure/closet/hydrant{ + pixel_x = 28 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/red/bordercorner2, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"fwG" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"fwJ" = ( +/obj/floor_decal/corner/red/half{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"fwO" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/random/ironing_board_structure, +/obj/decal/cleanable/dirt, +/obj/item/ironing_iron, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"fwR" = ( +/obj/structure/sign/warning/airlock{ + dir = 8 + }, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/titanium, +/area/shuttle/petrov/airlock) +"fwS" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/prepainted, +/area/vacant/cargo) +"fwW" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/tiled, +/area/maintenance/abandoned_hydroponics) +"fxb" = ( +/obj/structure/mattress, +/obj/item/bedsheet/purple, +/obj/item/clothing/gloves/daft_punk, +/obj/structure/curtain/bed, +/turf/simulated/floor/carpet, +/area/maintenance/seconddeck/foreport) +"fxl" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/infirmary) +"fxm" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"fxn" = ( +/obj/structure/table/rack, +/obj/item/storage/belt/archaeology, +/obj/item/storage/belt/archaeology, +/obj/item/storage/belt/archaeology, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/item/pickaxe{ + pixel_x = 5 + }, +/obj/item/pickaxe{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/stack/flag/red, +/obj/item/stack/flag/red, +/obj/item/stack/flag/red, +/obj/item/device/scanner/xenobio, +/obj/item/device/scanner/xenobio, +/obj/item/device/scanner/xenobio, +/obj/item/storage/excavation, +/obj/item/device/measuring_tape, +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/eva) +"fxq" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"fxt" = ( +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/docking) +"fxV" = ( +/obj/machinery/r_n_d/protolathe, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/development) +"fxZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/structure/table/rack, +/obj/structure/railing/mapped, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"fyb" = ( +/obj/structure/cable/green{ + 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/catwalk_plated, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft) +"fyc" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"fyd" = ( +/obj/machinery/flasher{ + id_tag = "security_perm_chamber_flash"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"fyg" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/crayon, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"fyw" = ( +/obj/structure/catwalk, +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"fyB" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"fyE" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/mauve/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/mauve/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"fyJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"fyN" = ( +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + color = "#8c911d" + }, +/turf/simulated/floor/plating, +/area/rnd/misc_lab) +"fyW" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/catwalk_plated/dark, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/safe_room/bridge) +"fzb" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"fzh" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"fzo" = ( +/obj/structure/table/standard, +/obj/item/storage/box/monkeycubes, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"fzr" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins/storage) +"fzt" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 6 + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc/super/critical{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"fzu" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"fzA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"fzC" = ( +/turf/simulated/floor/wood, +/area/command/chief_steward) +"fzF" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"fzG" = ( +/obj/machinery/atmospherics/binary/pump, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"fzK" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"fAh" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs) +"fAj" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/machinery/fabricator/micro/bartender{ + pixel_x = 4 + }, +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/item/paper/sierra, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe) +"fAm" = ( +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "xenobio4"; + name = "Containment Blast Doors" + }, +/obj/wallframe_spawn/reinforced, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level1) +"fAp" = ( +/obj/structure/bookcase, +/obj/item/book/manual/anomaly_spectroscopy, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"fAq" = ( +/turf/simulated/wall/r_wall/hull, +/area/quartermaster/expedition/storage) +"fAC" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/green{ + pixel_y = 8; + pixel_x = -2 + }, +/obj/item/toy/figure/captain{ + pixel_y = 2; + pixel_x = 6 + }, +/obj/floor_decal/carpet/blue{ + dir = 1 + }, +/obj/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/floor_decal/carpet/blue{ + dir = 9 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/captain) +"fAD" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"fAE" = ( +/obj/structure/closet/secure_closet/atmos_sierra, +/obj/item/rpd, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"fAO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/machinery/door/airlock/research{ + autoset_access = 0; + dir = 4; + frequency = 1379; + id_tag = "xeno_airlock_inner"; + name = "Xenobiology Access"; + req_access = list("ACCESS_RESEARCH") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/xenobiology/storage2) +"fBg" = ( +/obj/structure/sign/warning/hot_exhaust{ + dir = 1 + }, +/turf/simulated/wall/prepainted, +/area/maintenance/firstdeck/aftport) +"fBi" = ( +/obj/random/trash, +/obj/item/reagent_containers/glass/bucket, +/obj/item/device/flashlight/flare/glowstick/random, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"fBj" = ( +/turf/simulated/floor/reinforced/n20, +/area/engineering/atmos) +"fBl" = ( +/obj/structure/table/rack, +/obj/random/plushie, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"fBs" = ( +/obj/structure/roller_bed, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"fBu" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 5 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"fBM" = ( +/obj/structure/bed/chair/padded/blue, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"fBO" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/structure/bed/sofa/l/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"fBT" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"fCf" = ( +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/floor_decal/corner/lime/bordercorner, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Infrimary - Patient Ward"; + dir = 4; + pixel_y = 12 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"fCl" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"fCx" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/cap/visible/fuel{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crucian_hangar/start) +"fCA" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"fCB" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/green, +/obj/structure/curtain/open/bed, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"fCD" = ( +/obj/structure/table/rack, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass{ + amount = 10 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"fCG" = ( +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"fCI" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge/upper) +"fCJ" = ( +/obj/structure/bookcase/manuals/engineering, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"fCM" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"fCW" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"fDd" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"fDo" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"fDr" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"fDt" = ( +/obj/machinery/atmospherics/unary/heat_exchanger{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/outline/orange, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"fDC" = ( +/obj/structure/disposalpipe/up{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/full, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/fuel{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 16; + d2 = 0; + icon_state = "16-0" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"fDE" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cargo_l) +"fDI" = ( +/obj/structure/closet/emcloset, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"fDJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/external{ + autoset_access = 0; + frequency = 1331; + id_tag = "guppy_shuttle_inner"; + name = "Guppy Internal Access"; + req_access = list("ACCESS_GUPPY") + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"fDL" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/civilian{ + name = "Cryo Storage"; + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/sleep/cryo/thirddeck) +"fDQ" = ( +/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/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"fDT" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/thirddeck/forestarboard) +"fEe" = ( +/obj/floor_decal/spline/fancy/wood/corner, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"fEj" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"fEm" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 8; + name = "Head of Personnel"; + sort_type = "Head of Personnel" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/center) +"fEo" = ( +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/corner/darkblue/bordercorner, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"fEw" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/hardstorage) +"fEy" = ( +/obj/floor_decal/corner/red/half{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"fEz" = ( +/obj/structure/disposalpipe/up{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"fEA" = ( +/obj/machinery/uniform_vendor{ + icon_state = "robotics" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/thirddeck) +"fEC" = ( +/obj/shuttle_landmark/ert/deck1, +/turf/space, +/area/space) +"fED" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"fEE" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"fEG" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"fEN" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/thirddeck/forestarboard) +"fEQ" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"fES" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"fEX" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/machinery/fabricator/micro/bartender{ + pixel_x = 5; + pixel_y = 2 + }, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"fEY" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"fFd" = ( +/obj/structure/bookcase/manuals/engineering, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/captain/beach) +"fFf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"fFi" = ( +/obj/machinery/power/breakerbox/activated{ + RCon_tag = "Second Deck Substation Bypass" + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/seconddeck) +"fFn" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/machine/jukebox_custom, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"fFs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"fFx" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/reinforced, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/obj/machinery/recharger, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"fFB" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/substation/firstdeck) +"fFC" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/maintenance{ + name = "Maintenance Storage" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/backstorage) +"fFG" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"fFO" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"fFR" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/janitor) +"fFU" = ( +/obj/machinery/anomaly_container, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"fGa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/landmark{ + name = "xeno_spawn"; + pixel_x = -1 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"fGb" = ( +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"fGn" = ( +/obj/item/ladder_mobile, +/obj/random/junk, +/obj/random/junk, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"fGp" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/corner/green/half{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"fGs" = ( +/obj/item/stool/padded/red, +/obj/random/junk, +/turf/simulated/floor/wood/walnut, +/area/maintenance/firstdeck/aftstarboard) +"fGt" = ( +/obj/structure/ladder, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/firstdeck/aftport) +"fGv" = ( +/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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"fGA" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/machinery/scrap/stacking_machine, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/compactor) +"fGH" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Bluespace Drive"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"fGI" = ( +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + dir = 1; + color = "#8c911d" + }, +/turf/simulated/floor/plating, +/area/rnd/misc_lab) +"fGK" = ( +/obj/structure/bed/chair/padded/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"fGL" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"fHe" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"fHg" = ( +/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" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"fHi" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techmaint, +/area/tcommsat/storage) +"fHq" = ( +/obj/structure/catwalk, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"fHs" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"fHv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner_techfloor_grid{ + dir = 10 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"fHz" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/gas) +"fHI" = ( +/obj/structure/table/standard, +/obj/item/device/integrated_electronics/wirer, +/obj/item/device/integrated_electronics/debugger, +/obj/item/device/integrated_electronics/analyzer, +/obj/item/device/integrated_circuit_printer, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech) +"fHP" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"fHS" = ( +/obj/paint_stripe/red, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters/open{ + name = "Prison Lobby Windows Shutters"; + id_tag = "prison_lobby_window" + }, +/turf/simulated/floor/plating, +/area/security/sierra/brig) +"fHU" = ( +/obj/machinery/computer/modular/preset/security, +/obj/floor_decal/corner/red/half{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"fHV" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/tank/air{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod3/station) +"fIa" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/floor_decal/corner/purple{ + dir = 5 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"fIb" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/camera/network/engine{ + c_tag = "Engine - R-UST - SMES"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"fIc" = ( +/obj/structure/closet/lawcloset, +/obj/structure/window/reinforced, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"fIe" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/structure/ship_munition/disperser_charge/emp, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/command/bsa) +"fIg" = ( +/obj/structure/disposalpipe/segment, +/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/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"fIj" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/development) +"fIk" = ( +/obj/machinery/hologram/holopad, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 9 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"fIn" = ( +/obj/structure/bed/chair/comfy/teal{ + dir = 8 + }, +/obj/floor_decal/borderfloorwhite{ + icon_state = "borderfloor_white"; + dir = 5 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Personnel - Office" + }, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"fIr" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"fIw" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/fourthdeck/foreport) +"fIA" = ( +/obj/paint_stripe/red, +/obj/paint/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod4/station) +"fIB" = ( +/obj/structure/table/woodentable/mahogany, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/item/reagent_containers/food/snacks/grown/poppy, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"fIG" = ( +/obj/machinery/camera/network/research{ + c_tag = "Research - Misc. Test Chamber - Large"; + network = list("Research","Miscellaneous Reseach"); + dir = 1 + }, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"fIJ" = ( +/obj/floor_decal/corner/paleblue{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/closet/hydrant{ + pixel_y = 28 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"fIK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"fIL" = ( +/obj/floor_decal/techfloor, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"fIN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"fIQ" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "solar_bridge_port_pump" + }, +/obj/machinery/light/small, +/obj/machinery/oxygen_pump{ + pixel_y = -32 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "solar_bridge_port_airlock"; + pixel_x = 2; + pixel_y = 24; + req_access = list("ACCESS_EXTERNAL"); + tag_airpump = "solar_bridge_port_pump"; + tag_chamber_sensor = "solar_bridge_port_sensor"; + tag_exterior_door = "solar_bridge_port_outer"; + tag_interior_door = "solar_bridge_port_inner" + }, +/obj/machinery/airlock_sensor{ + id_tag = "solar_bridge_port_sensor"; + pixel_x = -12; + pixel_y = 24 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar/bridge_port) +"fIW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"fIX" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/airlock) +"fIZ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/vending/coffee{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"fJa" = ( +/obj/structure/cable/yellow, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/reinforced, +/area/solar/bridge_port) +"fJi" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/center) +"fJk" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"fJr" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/compactor) +"fJC" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/power/port_gen/pacman{ + sheets = 25 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"fJD" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/holocontrol) +"fJJ" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/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/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"fJK" = ( +/obj/floor_decal/corner/grey/full, +/obj/machinery/photocopier, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"fJM" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"fJR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"fJV" = ( +/obj/machinery/papershredder, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/office) +"fJZ" = ( +/obj/structure/closet/crate, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"fKa" = ( +/obj/machinery/disperser/middle{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/command/bsa) +"fKd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/corner/lime/bordercorner, +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"fKj" = ( +/obj/machinery/constructable_frame/computerframe{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"fKp" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"fKs" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos/cobed) +"fKt" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/aft) +"fKB" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/solar/bridge_port) +"fKC" = ( +/obj/structure/closet/shipping_wall/filled{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Hydroponics - Fore"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"fKI" = ( +/turf/simulated/wall/r_wall/hull, +/area/engineering/atmos) +"fKO" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/item/rig/eva/equipped, +/obj/machinery/door/window/brigdoor/southleft{ + req_access = list("ACCESS_SENENG"); + autoset_access = 0 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"fKT" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/window/brigdoor/northleft, +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/aiModule/robocop, +/obj/item/aiModule/solgov_aggressive, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_cyborg_upload) +"fLa" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley/backroom) +"fLb" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"fLe" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/open, +/area/rnd/xenobiology/water_cell) +"fLf" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/handrail{ + dir = 1 + }, +/turf/space, +/area/space) +"fLm" = ( +/obj/machinery/airlock_sensor{ + frequency = 1331; + id_tag = "calypso_shuttle_sensor"; + master_tag = "calypso_shuttle"; + pixel_x = 25 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/obj/structure/hygiene/shower{ + dir = 8; + pixel_x = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/airlock) +"fLp" = ( +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/paint_stripe/red, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized{ + id = "cadetwindow" + }, +/turf/simulated/floor/plating, +/area/security/range) +"fLx" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"fLB" = ( +/obj/structure/bed/sofa/l/black{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/forensic) +"fLK" = ( +/obj/structure/closet/secure_closet/adjutant, +/obj/item/modular_computer/tablet/lease/preset/command, +/obj/item/device/flash, +/obj/item/device/flashlight, +/obj/item/storage/secure/safe{ + pixel_y = 24 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/item/gun/energy/gun/small/secure, +/obj/floor_decal/corner/darkblue/mono, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/adjutants) +"fLQ" = ( +/obj/machinery/door/window/brigdoor/westleft{ + id_tag = null; + req_access = list("ACCESS_BRIDGE"); + dir = 2; + autoset_access = 0 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"fLW" = ( +/obj/item/stack/tile/floor, +/obj/random/junk, +/obj/random/junk, +/obj/decal/cleanable/filth, +/obj/decal/cleanable/generic, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"fMg" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/captain) +"fMi" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"fMs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + dir = 4; + id_tag = null; + name = "Report desk"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/xenobiology/level1) +"fMt" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/port) +"fMx" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "admin_shuttle_dock_pump" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/center) +"fMy" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/bed/sofa/r/red{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"fMz" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"fMD" = ( +/obj/structure/bed/chair/office/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 10 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"fMG" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"fMI" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled, +/area/vacant/cargo) +"fMJ" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/seconddeck/forestarboard) +"fMK" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/subspace/amplifier, +/obj/item/stock_parts/subspace/amplifier, +/obj/item/stock_parts/subspace/amplifier, +/obj/machinery/camera/network/command{ + c_tag = "Telecommunications - Storage"; + network = list("Command","Engineering") + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/tcommsat/storage) +"fMQ" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/no_grille, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"fMR" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor/stage) +"fMU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"fNa" = ( +/obj/machinery/vending/cola, +/obj/floor_decal/corner/red/half{ + dir = 8 + }, +/obj/floor_decal/corner/red{ + dir = 6 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/sign/directions/security{ + pixel_y = 24; + dir = 8 + }, +/obj/structure/sign/directions/infirmary{ + dir = 4; + pixel_y = 31 + }, +/obj/structure/sign/directions/science{ + pixel_y = 38; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/central_stairwell) +"fNb" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/paint_stripe/red, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized{ + id = "forensicswindow" + }, +/turf/simulated/floor/plating, +/area/security/sierra/forensic) +"fNr" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/no_grille, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/storage/eva) +"fNt" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "nuke_shuttle_dock_airlock_pump" + }, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"fNz" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/catwalk_plated, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft) +"fNB" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"fNC" = ( +/obj/floor_decal/corner/green{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"fND" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"fNJ" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "engine_access_hatch"; + locked = 1; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "SupermatterDoor"; + name = "Supermatter Access Blast Door" + }, +/turf/simulated/floor/reinforced, +/area/engineering/engine_room) +"fNW" = ( +/turf/simulated/wall/r_wall/hull, +/area/medical/virology/atmos) +"fNX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/shield/thirddeck) +"fNY" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"fOg" = ( +/obj/machinery/organ_printer/robot/mapped, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery) +"fOi" = ( +/turf/simulated/wall/prepainted, +/area/security/sierra/prison) +"fOj" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/galley/freezer) +"fOk" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/device/flashlight/lamp/green{ + pixel_x = -5 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/green, +/area/medical/wardhallway) +"fOl" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/no_grille, +/turf/simulated/floor/plating, +/area/quartermaster/hangar_stairs) +"fOr" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/paint_stripe/red, +/obj/wallframe_spawn/reinforced/polarized{ + id = "cadetwindow" + }, +/turf/simulated/floor/plating, +/area/security/range) +"fOt" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/maintenance, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"fOB" = ( +/turf/simulated/floor/tiled, +/area/holocontrol) +"fOF" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/rnd/xenobiology/xenoflora) +"fOG" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"fOL" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"fOO" = ( +/obj/machinery/optable, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery) +"fOP" = ( +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"fOT" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/assembly/chargebay) +"fOU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"fPb" = ( +/obj/machinery/light/spot, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"fPc" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/machinery/button/blast_door{ + dir = 4; + pixel_x = -21; + name = "Space Shields"; + id_tag = "med_dorms_blast_doors" + }, +/obj/item/device/flashlight/lamp{ + pixel_y = 16; + pixel_x = -2 + }, +/obj/item/material/ashtray/plastic{ + pixel_y = 3; + pixel_x = 1 + }, +/obj/item/trash/cigbutt{ + pixel_x = 2 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/corp{ + pixel_y = -1; + pixel_x = -3 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/south) +"fPl" = ( +/obj/structure/ladder/up, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/hangar/upper) +"fPp" = ( +/obj/machinery/camera/network/engineering{ + c_tag = "Tech Storage - Main" + }, +/turf/simulated/floor/tiled/techmaint, +/area/storage/tech) +"fPs" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/seconddeck/xenobio) +"fPC" = ( +/obj/structure/table/standard, +/obj/item/device/geiger, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/item/device/scanner/plant, +/obj/item/device/scanner/health, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"fPE" = ( +/obj/machinery/atmospherics/unary/tank/air, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"fPH" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"fPJ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"fPK" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"fPL" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"fPN" = ( +/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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/thirddeck/center) +"fPT" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"fPZ" = ( +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"fQd" = ( +/obj/machinery/recharger, +/obj/machinery/computer/ship/navigation/telescreen{ + pixel_y = 26 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/b_green/bordercorner2{ + dir = 10 + }, +/obj/structure/table/steel, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/seats_place) +"fQf" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/lounge/upper) +"fQk" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"fQo" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"fQy" = ( +/obj/structure/holoplant, +/obj/structure/railing/mapped, +/obj/structure/flora/ausbushes/fernybush, +/obj/floor_decal/spline/fancy/black{ + dir = 6 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"fQz" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"fQA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"fQF" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/forestarboard) +"fQJ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"fQM" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/blast_door{ + id_tag = "xenobio3"; + name = "Containment Blast Doors"; + pixel_x = -6; + req_access = list("ACCESS_RESEARCH") + }, +/obj/machinery/button/blast_door{ + id_tag = "xenobio3_vent"; + name = "Cell 3 Vent"; + pixel_x = 6; + req_access = list("ACCESS_RESEARCH") + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"fQU" = ( +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"fQV" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"fQW" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/closet/crate/solar, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"fRj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"fRk" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/emergency) +"fRq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"fRz" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"fRG" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/sauna) +"fRI" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 1 + }, +/obj/structure/bed/sofa/r/brown{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"fRK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/obj/item/paper_bin, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"fRO" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Central Hallway" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"fRP" = ( +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d3starboard) +"fRQ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"fRR" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"fRZ" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8; + injecting = 1; + use_power = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/thruster/d1port) +"fSa" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod1/station) +"fSq" = ( +/obj/item/storage/mirror{ + pixel_x = -26; + pixel_y = 1 + }, +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/gym) +"fSs" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/lime/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"fSv" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/green/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/green/bordercorner2, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/vending/hydronutrients{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"fSx" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/open, +/area/hallway/primary/seconddeck/central_stairwell) +"fSA" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"fSV" = ( +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"fTe" = ( +/obj/item/stock_parts/circuitboard/telecomms/processor, +/obj/item/stock_parts/circuitboard/telecomms/receiver, +/obj/item/stock_parts/circuitboard/telecomms/server, +/obj/item/stock_parts/circuitboard/telecomms/bus, +/obj/item/stock_parts/circuitboard/telecomms/broadcaster, +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/stock_parts/circuitboard/ntnet_relay, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech/high_risk) +"fTk" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"fTr" = ( +/obj/machinery/ai_status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/quartermaster/deckofficer) +"fTt" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"fTv" = ( +/obj/floor_decal/corner/yellow/border{ + dir = 10 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"fTw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"fTU" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"fTV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"fTY" = ( +/obj/machinery/door/airlock/glass/atmos{ + name = "Atmospherics"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"fUd" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/seats_place) +"fUf" = ( +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/xenobio) +"fUh" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"fUi" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/shuttle/engine/propulsion{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/eva) +"fUt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"fUv" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"fUJ" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"fUK" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"fUO" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"fUP" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/open{ + id_tag = "eng_lockdown_emg1"; + name = "Emergency Exit" + }, +/obj/machinery/door/airlock/glass/engineering/no_stripe{ + name = "Engineering Bay" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/engineering/engineering_monitoring) +"fUR" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/industrial/traffic, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"fUV" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/security{ + name = "Security Maintenance"; + req_access = newlist() + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/suits) +"fVc" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"fVg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"fVh" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/foreport) +"fVk" = ( +/obj/structure/disposalpipe/up{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/fuel{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"fVm" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/suits) +"fVp" = ( +/obj/machinery/power/port_gen/pacman{ + anchored = 1; + sheets = 10 + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/guppy_hangar/start) +"fVs" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/rnd/xenobiology/xenoflora) +"fVt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/airlock) +"fVA" = ( +/obj/floor_decal/corner/black/border, +/obj/floor_decal/corner/black/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/black/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hydroponics/third_deck_storage) +"fVH" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/structure/closet/emcloset/anchored, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/firstdeck) +"fVM" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"fVO" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/bridge/nano) +"fVR" = ( +/obj/structure/table/rack, +/obj/floor_decal/spline/plain/yellow{ + dir = 10 + }, +/obj/item/beartrap, +/obj/item/beartrap, +/obj/item/device/flashlight/upgraded, +/obj/item/device/flashlight/upgraded, +/obj/item/device/flashlight/upgraded, +/obj/item/stack/package_wrap/cargo_wrap, +/obj/item/stack/package_wrap/cargo_wrap, +/obj/item/tape_roll, +/obj/item/tape_roll, +/obj/item/tape_roll, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"fVS" = ( +/obj/machinery/door/window/westright{ + name = "Xenoflora Environment"; + req_access = newlist() + }, +/obj/machinery/door/window/westleft{ + dir = 4; + name = "Xenoflora Environment" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/rnd/xenobiology/xenoflora) +"fWa" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"fWb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralport) +"fWe" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/item/device/radio/intercom/locked/ai_private{ + pixel_y = 22 + }, +/turf/simulated/floor/reinforced, +/area/turret_protected/ai_maint) +"fWs" = ( +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/foreport) +"fWF" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/toxins) +"fWM" = ( +/obj/structure/hygiene/toilet{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/landmark{ + name = "xeno_spawn"; + pixel_x = -1 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/freezer, +/area/command/bsa) +"fWP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/corner/green{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"fWS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/grey/bordercorner, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"fXg" = ( +/obj/decal/cleanable/dirt, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"fXl" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"fXm" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"fXs" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/floor_decal/corner/grey/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"fXB" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/engine_smes) +"fXF" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/machinery/camera/network/hangar{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"fXJ" = ( +/obj/machinery/suit_storage_unit/security/alt, +/obj/machinery/camera/network/security{ + c_tag = "Security - Suits Storage"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/suits) +"fXP" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"fXQ" = ( +/obj/structure/catwalk, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "sauna_maint"; + name = "Lock"; + dir = 8; + pixel_x = 21 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/sauna) +"fXX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 6 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1starboard) +"fYd" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"fYj" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"fYk" = ( +/obj/structure/table/steel{ + flipped = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/forestarboard) +"fYw" = ( +/obj/machinery/light, +/obj/floor_decal/corner/paleblue/bordercee{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"fYz" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/cobed) +"fYA" = ( +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/hop) +"fYE" = ( +/obj/machinery/telecomms/bus/preset_four, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"fYI" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"fYO" = ( +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"fYS" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/table/rack, +/obj/random/toolbox, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"fYV" = ( +/obj/machinery/button/blast_door{ + id_tag = "teleport3"; + name = "Third Deck Teleporter Access Shutter Control"; + pixel_x = -6; + pixel_y = 29 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"fZb" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"fZi" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"fZl" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"fZn" = ( +/obj/structure/closet/crate/plastic, +/obj/structure/railing/mapped, +/obj/floor_decal/spline/plain/black, +/obj/floor_decal/industrial/outline/yellow, +/obj/decal/cleanable/dirt, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"fZo" = ( +/obj/structure/table/standard, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/random/maintenance, +/turf/simulated/floor/tiled/freezer, +/area/medical/virology/lab) +"fZp" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/virology{ + dir = 8 + }, +/obj/item/taperoll/engineering/applied, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"fZy" = ( +/turf/simulated/wall/prepainted, +/area/medical/backstorage) +"fZD" = ( +/obj/machinery/space_heater, +/obj/decal/cleanable/dirt, +/obj/machinery/light_construct/small{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/vacant/sauna) +"fZE" = ( +/turf/simulated/floor/wood/yew, +/area/crew_quarters/heads/office/ce/cobed) +"fZL" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"fZM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled, +/area/rnd/research) +"fZP" = ( +/obj/machinery/button/blast_door{ + id_tag = "portaux_warehouse"; + name = "Warehouse Shutters Control"; + pixel_y = 24; + req_access = list("ACCESS_CARGO") + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/structure/closet/walllocker{ + pixel_x = 28 + }, +/obj/random/medical, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"fZS" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"gab" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 1 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"gai" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/central_stairwell) +"gal" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"gap" = ( +/obj/machinery/flasher{ + id_tag = "security_perm_chamber_flash"; + name = "Floor mounted flash" + }, +/obj/floor_decal/corner/red/diagonal, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/prison) +"gat" = ( +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"gav" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"gaA" = ( +/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/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"gaF" = ( +/obj/structure/cryofeed{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/thirddeck) +"gaG" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1; + target_pressure = 15000 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the engine thruster blast doors."; + id_tag = "ThrusterVents"; + name = "Thruster Blast Door control"; + req_access = list("ACCESS_ENGINE_EQUIP"); + pixel_x = -24; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"gaH" = ( +/obj/machinery/disposal, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"gaJ" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/button/alternate/door{ + desc = "A remote control-switch for the office door."; + id_tag = "security_entry_airlock_enter"; + name = "Security Entry Airlock"; + pixel_x = 5; + pixel_y = 22; + req_access = list("ACCESS_SECURITY") + }, +/obj/machinery/button/alternate/door{ + desc = "A remote control-switch for the office door."; + id_tag = "security_entry_airlock_exit"; + name = "Security Exit Airlock"; + pixel_x = -5; + pixel_y = 22; + req_access = list("ACCESS_SECURITY") + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/pen, +/obj/machinery/button/blast_door{ + pixel_y = 30; + id_tag = "prison_lobby_window"; + name = "Prison Lobby Windows Shutters" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"gaP" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/security) +"gaQ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"gaU" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"gaW" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/mentalhealth/therapyroom) +"gaY" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/cafe) +"gbc" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"gbg" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"gbk" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"gbu" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"gbC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"gbE" = ( +/obj/structure/morgue{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"gbH" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"gbM" = ( +/obj/structure/bed/chair/office/comfy/blue{ + dir = 1 + }, +/obj/landmark/start{ + name = "Head of Personnel" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"gbT" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"gcb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"gcc" = ( +/obj/structure/table/steel, +/obj/item/material/hatchet, +/obj/floor_decal/borderfloorblack, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"gce" = ( +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 8; + pixel_x = 22 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"gcg" = ( +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 6 + }, +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/power) +"gck" = ( +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/obj/machinery/computer/station_alert/all{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"gcz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"gcF" = ( +/obj/structure/table/rack, +/obj/item/tank/jetpack/carbondioxide, +/obj/item/tank/jetpack/carbondioxide, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/tank/jetpack/carbondioxide, +/obj/item/tank/jetpack/carbondioxide, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"gcH" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/bridge_starboard) +"gcK" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"gcN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"gdc" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + id_tag = 1; + name = "Research Director Dorm"; + req_access = newlist(); + secured_wires = 1; + stripe_color = "#ffffff" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/rd/cobed) +"gdm" = ( +/obj/structure/hygiene/toilet{ + name = "captain's throne"; + color = "ffdd33" + }, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/heads/captain/secret_room/level_one) +"gdD" = ( +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "bridge_outer_windows" + }, +/turf/simulated/floor/plating, +/area/bridge/nano) +"gdH" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"gdN" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"gdZ" = ( +/obj/random/obstruction, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"gec" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/camera/network/engine{ + c_tag = "Engine - Core Interior"; + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/engineering/engine_room) +"gek" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/thirddeck/forestarboard) +"gen" = ( +/obj/structure/closet/crate/freezer, +/obj/item/storage/pill_bottle/antitox, +/obj/item/storage/pill_bottle/paracetamol, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"geq" = ( +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "merchant_shuttle_station_sensor"; + master_tag = "merchant_shuttle_station"; + pixel_x = -24 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "merchant_shuttle_station_pump" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"gew" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/waterstore) +"geF" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"geL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + dir = 8; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftstarboard) +"geT" = ( +/obj/machinery/pager/cargo{ + dir = 8; + name = "Call Cargoworkers button"; + pixel_x = -20; + pixel_y = 16 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/computer/modular/preset/supply_public, +/obj/floor_decal/corner/yellow/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 10 + }, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"geU" = ( +/obj/structure/closet/crate/secure/biohazard/alt, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"gfe" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"gfi" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/evidence) +"gfk" = ( +/obj/machinery/computer/shuttle_control/explore/crucian{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"gfo" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/green{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"gfp" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"gfq" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/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/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black/corner, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"gfz" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/ward) +"gfS" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"gfV" = ( +/obj/structure/sign/directions/med{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/medical/maintenance_equipstorage) +"ggb" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 15; + pixel_x = 3 + }, +/obj/random/tool{ + pixel_x = -5; + pixel_y = -9 + }, +/obj/random/tool{ + pixel_y = -1; + pixel_x = 5 + }, +/obj/random/tech_supply{ + pixel_y = -6; + pixel_x = 10 + }, +/obj/random/maintenance, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/hangar) +"ggf" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"ggj" = ( +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 4; + display_name = "Starboard Dock C"; + frequency = 1380; + id_tag = "admin_shuttle_dock"; + pixel_x = -20; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"ggm" = ( +/obj/structure/table/standard, +/obj/item/storage/box/bodybags, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"ggp" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_pump/tank{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "fuel2p_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d3port) +"ggq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"ggH" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/structure/window/boron_reinforced{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Gravity Generator"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"ggO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"ggZ" = ( +/obj/structure/holoplant, +/obj/floor_decal/corner/yellow/half, +/obj/structure/cable/green, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"gha" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/holocontrol) +"ghb" = ( +/obj/floor_decal/corner/black/border, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ghd" = ( +/obj/floor_decal/corner/beige/diagonal, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"ghg" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"ghk" = ( +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/obj/structure/sign/nanotrasen, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/cargo_r) +"ghn" = ( +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"gho" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/forestarboard) +"ghs" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/shieldwallgen, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"ght" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/obj/machinery/meter, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/gas) +"ghv" = ( +/obj/machinery/shield_diffuser, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "disvent"; + name = "Incinerator Vent" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/maintenance/incinerator) +"ghC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/structure/sign/warning/compressed_gas{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"ghE" = ( +/obj/structure/bed/sofa/r/teal, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"ghJ" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/thirddeck/foreport) +"ghN" = ( +/obj/structure/bed/chair/shuttle, +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/escape_pod/escape_pod10/station) +"ghO" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/shuttlefuel) +"ghT" = ( +/obj/item/device/flashlight/lamp/green, +/obj/structure/table/woodentable_reinforced/walnut, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"ghU" = ( +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "eng1"; + name = "First Reactive Engine Access"; + pixel_y = 21; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/light/small, +/obj/machinery/atmospherics/valve/shutoff/fuel{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/thruster/d3starboard) +"ghY" = ( +/obj/floor_decal/corner/darkblue/border, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"ghZ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"gih" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/artifact_analyser, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/scan) +"gip" = ( +/obj/structure/filingcabinet{ + pixel_x = -10 + }, +/obj/structure/filingcabinet, +/obj/structure/filingcabinet{ + pixel_x = 10 + }, +/obj/item/folder/nt/rd, +/obj/item/folder/nt/rd, +/obj/item/folder/nt/rd, +/obj/item/folder/nt/rd, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/heads/office/rd/cobed) +"gir" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"git" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"gix" = ( +/obj/machinery/atmospherics/portables_connector, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"giC" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall/prepainted, +/area/vacant/cargo) +"giL" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"giO" = ( +/obj/random/obstruction, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"giR" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"giS" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/security/opscheck) +"giT" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/computer/air_control{ + dir = 8; + input_tag = "toxins_petrov_in"; + name = "Toxins Gas Monitor"; + output_tag = "toxins_petrov_out"; + sensor_name = "Toxins Test Chamber"; + sensor_tag = "toxins_petrov_sensor" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/gas) +"giU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"giZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/atmospherics/pipe/cap/visible{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"gjc" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 10 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d1port) +"gjd" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"gjj" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"gjE" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/bluespace) +"gjJ" = ( +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/obj/random/maintenance, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"gjK" = ( +/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" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"gjP" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"gjQ" = ( +/obj/structure/flora/pottedplant/orientaltree, +/turf/simulated/floor/wood, +/area/command/chief_steward) +"gjT" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"gjX" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/assembly/robotics) +"gkg" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/table/glass, +/obj/machinery/photocopier/faxmachine{ + department = "Bridge" + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"gki" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftport) +"gko" = ( +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "cChamber2pV"; + name = "Chamber Vent" + }, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d3port) +"gkq" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/blue{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"gks" = ( +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "d3portnacelle" + }, +/obj/machinery/atmospherics/valve/digital{ + id_tag = "RE3F"; + name = "RE3 digital valve" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"gku" = ( +/obj/structure/iv_stand, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"gky" = ( +/obj/landmark{ + name = "xeno_spawn"; + pixel_x = -1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"gkD" = ( +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftport) +"gkG" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/button/blast_door{ + dir = 4; + pixel_x = -24; + id_tag = "miners_restroom_sierra" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"gkQ" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/galley/freezer) +"gkX" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/structure/bed/chair/office/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"gli" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"gll" = ( +/obj/machinery/vending/wallmed2{ + dir = 4; + pixel_x = -23 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod4/station) +"glv" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1; + name = "Toxin Air Vent"; + id_tag = "toxin_out" + }, +/obj/machinery/sparker{ + pixel_x = -21 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/rnd/toxins) +"glA" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"glU" = ( +/obj/floor_decal/techfloor, +/obj/structure/largecrate, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"glV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/industrial/danger/corner, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"glW" = ( +/obj/floor_decal/techfloor/orange, +/obj/structure/reagent_dispensers/fueltank, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"gml" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/power/port_gen/pacman{ + sheets = 25 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"gmn" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1380; + id_tag = "specops_dock_outer"; + name = "Docking Port Airlock" + }, +/obj/machinery/shield_diffuser, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"gms" = ( +/obj/machinery/disposal, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/disposalpipe/up{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/camera/network/hangar{ + c_tag = "Hangar - Flight Control" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/quartermaster/hangar/upper) +"gmz" = ( +/obj/machinery/barrier, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"gmF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"gmH" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"gmK" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"gmM" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"gmQ" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar_atmos) +"gnd" = ( +/obj/machinery/light/small, +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/lime/border{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"gnr" = ( +/obj/decal/cleanable/generic, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"gns" = ( +/obj/structure/table/standard, +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/random/tool, +/obj/machinery/button/blast_door{ + id_tag = "petrovcell1"; + name = "Test Chamber Vent"; + pixel_x = -26; + pixel_y = -26 + }, +/obj/machinery/button/ignition{ + id_tag = "Isocell1"; + pixel_x = -36; + pixel_y = -25 + }, +/obj/machinery/camera/network/petrov{ + c_tag = "Petrov - Isolation Chambers - Cells"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"gnE" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"gnL" = ( +/obj/structure/table/standard, +/obj/item/disk/tech_disk, +/obj/item/disk/tech_disk, +/obj/item/disk/design_disk, +/obj/item/disk/design_disk, +/obj/item/reagent_containers/dropper{ + pixel_y = -4 + }, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/scanning_module, +/obj/item/device/paicard, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/console_screen, +/obj/item/stock_parts/micro_laser, +/obj/item/stock_parts/scanning_module{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/development) +"gnO" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/iaa/cobed) +"gnR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftstarboard) +"gnW" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/floor_decal/corner/red/bordercee, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"gnX" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"gop" = ( +/obj/decal/cleanable/dirt, +/obj/structure/bed/chair/office/dark, +/obj/item/dice/d100, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/light_construct{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"gor" = ( +/obj/machinery/door/airlock/medical{ + id_tag = "sierra_surgery1"; + name = "Operation room 1"; + dir = 8 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/holosign/surgery{ + dir = 4; + id_tag = "surgery1" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery) +"gos" = ( +/obj/structure/table/steel, +/obj/machinery/recharger, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/eva) +"goA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"goD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/storage/primary) +"goG" = ( +/obj/floor_decal/corner/brown/mono, +/obj/machinery/computer/modular/preset/cardslot/command_eng{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"goM" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod5/station) +"goN" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"goT" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/quartermaster/deckofficer) +"gpb" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"gpd" = ( +/obj/machinery/power/tracker, +/obj/structure/cable/yellow, +/obj/floor_decal/solarpanel, +/turf/simulated/open, +/area/solar/port) +"gpg" = ( +/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/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"gpi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cockpit) +"gpq" = ( +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/command/bsa) +"gpr" = ( +/obj/floor_decal/carpet/orange{ + dir = 1 + }, +/obj/floor_decal/carpet/orange{ + dir = 4 + }, +/obj/floor_decal/carpet/orange{ + dir = 5 + }, +/obj/structure/table/woodentable/ebony, +/obj/item/device/flashlight/lamp/lava/yellow{ + pixel_y = 12; + pixel_x = 7 + }, +/obj/item/crowbar/prybar, +/turf/simulated/floor/carpet/orange, +/area/crew_quarters/heads/office/ce/cobed) +"gpv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"gpw" = ( +/obj/structure/table/steel, +/obj/machinery/button/windowtint{ + id = "sec_equip_windows"; + pixel_x = 7; + pixel_y = 29 + }, +/obj/machinery/light_switch{ + pixel_y = 29; + pixel_x = -7 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/structure/closet/medical_wall/filled{ + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"gpx" = ( +/obj/structure/catwalk, +/obj/structure/handrail, +/turf/space, +/area/space) +"gpy" = ( +/obj/machinery/requests_console{ + department = "Canteen"; + departmentType = 4; + pixel_x = -30 + }, +/obj/structure/table/marble, +/obj/item/reagent_containers/food/condiment/barbecue{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/condiment/ketchup, +/obj/item/reagent_containers/food/condiment/mayo{ + pixel_y = 9; + pixel_x = 6 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"gpA" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/techfloor/orange/corner, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"gpE" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"gpN" = ( +/obj/structure/table/standard, +/obj/item/storage/toolbox/mechanical, +/obj/item/device/multitool{ + pixel_x = 3 + }, +/obj/random/tool, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/assembly/robotics) +"gpR" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"gpS" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"gpU" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "Mail" + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"gpW" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"gqe" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"gql" = ( +/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/structure/catwalk, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"gqm" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"gqw" = ( +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"gqF" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/aft_stairwell) +"gqH" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/safe_room/bridge) +"gqK" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/thirddeck/central_stairwell) +"gqL" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/turret_protected/ai_cyborg_station) +"gqM" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"gqO" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_east = 2; + tag_south = 3; + tag_west = 1 + }, +/obj/machinery/camera/network/petrov{ + c_tag = "Petrov - Isolation Chambers - Atmospherics" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"gqS" = ( +/obj/floor_decal/corner/black{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border, +/obj/structure/bed/chair/padded/teal{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"gqT" = ( +/obj/structure/bed/chair/pew, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"gqV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"gqW" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"grk" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "auxair_inner"; + name = "Auxiliary Air Storage Interior Access" + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/floor_decal/industrial/hatch/yellow, +/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" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos/storage) +"grn" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/structure/table/steel, +/obj/item/storage/box/donut, +/obj/item/device/taperecorder, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"grp" = ( +/obj/machinery/shieldwallgen, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"grs" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/structure/closet/secure_closet/engineering_chief_sierra, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"grt" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/virology, +/obj/machinery/door/blast/shutters{ + id_tag = "vir_isol" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/item/taperoll/engineering/applied, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology/lab) +"grv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/light_construct{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"grD" = ( +/obj/machinery/disposal, +/obj/floor_decal/corner/blue/three_quarters, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 10 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"grE" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/storage) +"grF" = ( +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/smartfridge/secure/virology{ + req_access = null + }, +/obj/decal/cleanable/cobweb2, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology/lab) +"grI" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp/lava/green, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/structure/cable/green, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/ward) +"grL" = ( +/obj/floor_decal/corner/lime/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/cola, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/fore) +"grR" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + id_tag = "null"; + name = "Bridge Wardroom"; + secured_wires = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/captain/beach) +"grY" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"grZ" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/hangar) +"gse" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + id_tag = "cafe"; + name = "Cafe Shutters"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/galley) +"gsf" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"gsg" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"gss" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"gst" = ( +/obj/floor_decal/carpet/blue2, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/garden_room) +"gsv" = ( +/obj/structure/bookcase/manuals/research_and_development, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/obj/floor_decal/carpet/purple{ + dir = 5 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/captain/beach) +"gsw" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck - Central Hallway - Medical" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"gsz" = ( +/obj/structure/closet/crate/secure/phoron, +/obj/item/stack/material/phoron/ten, +/obj/item/stack/material/phoron/ten, +/obj/item/stack/material/phoron/ten, +/obj/floor_decal/spline/plain/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"gsH" = ( +/obj/structure/window/reinforced, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"gsM" = ( +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/brown/bordercorner, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"gsX" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techmaint, +/area/tcommsat/storage) +"gte" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"gtq" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"gtt" = ( +/obj/machinery/button/alternate/door/bolts{ + dir = 4; + id_tag = "engine_electrical_maintenance"; + name = "Door Bolt Control"; + pixel_x = -24; + pixel_y = 7; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8; + icon_state = "map" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/camera/network/engine{ + c_tag = "Engine - TEGs"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"gtv" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 4 + }, +/obj/floor_decal/corner/grey{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"gtz" = ( +/obj/machinery/door/airlock/hatch{ + frequency = 1379; + id_tag = "engine_airlock_outer"; + name = "Engine Airlock Exterior" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"gtG" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/closet/crate/trashcart, +/obj/random/firstaid, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"gtI" = ( +/obj/structure/table/rack, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/window/northright{ + dir = 2; + name = "Leader's suit"; + req_access = newlist() + }, +/obj/item/clothing/mask/gas/half, +/obj/item/rig/exploration/equipped, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/mauve/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"gtO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/navbeacon/sierra/TD_port, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"gtP" = ( +/obj/machinery/seed_storage/garden{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics/third_deck_storage) +"gua" = ( +/obj/structure/railing/mapped, +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"guo" = ( +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"guH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/structure/bed/chair/rounded/blue{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"guN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "td_port"; + name = "interior access button"; + pixel_x = -32; + pixel_y = -24; + req_access = list("ACCESS_EXTERNAL") + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"guV" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"gve" = ( +/obj/machinery/computer/modular/preset/medical{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/corner/blue/mono, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"gvf" = ( +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/storage) +"gvi" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 5 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"gvy" = ( +/obj/machinery/constructable_frame/computerframe{ + dir = 4 + }, +/mob/living/simple_animal/hostile/scarybat, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"gvz" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -21; + pixel_x = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"gvD" = ( +/obj/machinery/sleeper/survival_pod{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"gvE" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall/hull, +/area/chapel/mortuary) +"gvI" = ( +/obj/structure/cryofeed{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/bridge) +"gvL" = ( +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/floor_decal/corner/black/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hydroponics/third_deck_storage) +"gvQ" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/green/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/green/bordercorner2{ + icon_state = "bordercolorcorner2"; + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"gvU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/bed/chair/rounded/beige, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"gwh" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/sign/poster{ + pixel_x = -32 + }, +/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/structure/disposalpipe/segment, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"gwp" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/airlock) +"gwt" = ( +/obj/floor_decal/carpet/orange{ + dir = 1 + }, +/obj/floor_decal/carpet/orange{ + dir = 8 + }, +/obj/floor_decal/carpet/orange{ + dir = 9 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/ce, +/turf/simulated/floor/carpet/orange, +/area/crew_quarters/heads/office/ce/cobed) +"gwF" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"gwG" = ( +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 1; + name = "Kitchen"; + sort_type = "Kitchen" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"gwL" = ( +/obj/structure/handrail, +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/red, +/obj/structure/fuel_port{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"gwZ" = ( +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/item/device/flashlight/lamp/lava/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"gxi" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"gxk" = ( +/obj/structure/stairs/south, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/aft_stairwell) +"gxm" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/foreport) +"gxn" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"gxp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/constructable_frame/machine_frame, +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"gxA" = ( +/obj/structure/bed/chair/office/comfy/blue, +/obj/landmark/start{ + name = "Internal Affairs Agent" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa/high_sec) +"gxK" = ( +/obj/structure/bed/chair/padded/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"gxM" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"gxN" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"gxS" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"gyn" = ( +/obj/structure/closet/fridge, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/random/single/cola, +/obj/random/single/cola, +/obj/random/single/cola, +/obj/random/single/cola, +/obj/random/single/cola, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"gyq" = ( +/turf/simulated/open, +/area/medical/sleeper) +"gyH" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"gyP" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"gyQ" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"gyU" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"gyY" = ( +/turf/simulated/wall/prepainted{ + can_open = 1 + }, +/area/maintenance/thirddeck/aftport) +"gzc" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/titanium, +/area/shuttle/petrov/security) +"gze" = ( +/obj/machinery/vending/hydronutrients{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics/third_deck_storage) +"gzs" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/backstorage) +"gzu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/structure/grille, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "engineroomvent"; + name = "Engine Room Vent" + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"gzA" = ( +/obj/item/clothing/suit/unathi/mantle, +/obj/item/clothing/shoes/jackboots/unathi, +/obj/item/device/flashlight/lantern, +/obj/structure/sign/poster{ + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"gzF" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/aft_stairwell) +"gzO" = ( +/obj/machinery/door/airlock/hatch{ + frequency = 1379; + id_tag = "engine_airlock_inner"; + name = "Engine Airlock Interior" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"gzR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/hatch{ + autoset_access = 0; + name = "Cockpit"; + req_access = list("ACCESS_EXPEDITION_SHUTTLE") + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cockpit) +"gAa" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 1 + }, +/obj/structure/shuttle/engine/heater{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/airless, +/area/shuttle/escape_pod/escape_pod4/station) +"gAi" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"gAr" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/maintenance/abandoned_hydroponics) +"gAu" = ( +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/sleep/cryo/firstdeck) +"gAv" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"gAC" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"gAD" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"gAI" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"gAJ" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/purple/bordercorner, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"gAN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"gBi" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 8 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d1starboard) +"gBk" = ( +/obj/structure/table/glass, +/obj/item/material/ashtray/bronze, +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/darkblue/diagonal, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"gBo" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"gBq" = ( +/obj/item/stack/material/steel, +/obj/item/stack/material/steel, +/obj/item/stack/material/rods, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"gBF" = ( +/obj/structure/railing/mapped, +/obj/structure/cart{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"gBN" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"gBT" = ( +/obj/structure/fitness/punchingbag, +/obj/floor_decal/corner/black/full, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/gym) +"gCb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"gCe" = ( +/obj/structure/bed/chair/padded/red, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation/second) +"gCl" = ( +/obj/landmark{ + name = "carpspawn" + }, +/turf/space, +/area/space) +"gCz" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/lime/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"gCD" = ( +/obj/structure/railing/mapped, +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"gCG" = ( +/obj/decal/cleanable/greenglow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/vacant/mess) +"gCM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/engine_room) +"gCO" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/structure/sign/xenobio_3{ + pixel_y = 32 + }, +/obj/machinery/door/airlock/research{ + id_tag = "xenohight_airlock_outer"; + name = "Xenobiology Internal Airlock"; + frequency = 1379; + locked = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/xenobiology/entry) +"gDd" = ( +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"gDf" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/glass/civilian{ + name = "Bar" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/cafe) +"gDl" = ( +/obj/floor_decal/corner/grey/full, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"gDo" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"gDr" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/blast/regular{ + id_tag = "vir_blast_window" + }, +/turf/simulated/floor/plating, +/area/medical/virology) +"gDw" = ( +/obj/structure/table/rack, +/obj/machinery/power/apc/super/critical{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/item/inflatable_dispenser, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"gDD" = ( +/obj/structure/closet/secure_closet/el, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/mauve/border{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"gDH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"gDL" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"gDT" = ( +/obj/machinery/door/airlock/highsecurity{ + autoset_access = 0; + name = "Secure Tech Storage"; + req_access = list("ACCESS_BRIDGE","ACCESS_TECH_STORAGE") + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/tech/high_risk) +"gDZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"gEb" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/recharger, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"gEd" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor/stage) +"gEf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"gEm" = ( +/obj/structure/bed/chair/office/teal, +/obj/floor_decal/corner/beige{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/border, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/button/blast_door{ + id_tag = "chemistry_lockdown"; + name = "Chemistry Shutters"; + pixel_x = -26; + pixel_y = -24; + req_access = list("ACCESS_MEDICAL") + }, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"gEx" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"gEz" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black/corner, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"gEF" = ( +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ + id_tag = "escape_pod_11_berth"; + name = "escape pod eleven berth controller"; + pixel_x = -32; + pixel_y = -28; + tag_door = "escape_pod_11_berth_hatch"; + frequency = 1380; + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/steeldecal/steel_decals_central4, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"gEO" = ( +/obj/machinery/door/blast/regular/escape_pod{ + id_tag = "escape_pod_7" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/maintenance/exterior) +"gET" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"gEV" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/structure/closet/crate/plastic, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"gFa" = ( +/obj/structure/bed/chair/office/dark, +/obj/floor_decal/techfloor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"gFe" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"gFg" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/starboard) +"gFh" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/hygiene/toilet{ + dir = 1 + }, +/obj/item/taperoll/bog{ + pixel_x = -12; + pixel_y = -10 + }, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head) +"gFi" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"gFj" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"gFl" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"gFs" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs) +"gFv" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 8 + }, +/obj/machinery/status_light{ + id_tag = "ReacEng2"; + name = "Deck Four Port status indicator"; + pixel_y = 32 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"gFM" = ( +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_7_hatch"; + name = "Escape Pod Seven Hatch" + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod7/station) +"gFS" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"gFU" = ( +/obj/structure/lattice, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/space) +"gFW" = ( +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 8 + }, +/obj/machinery/button/blast_door{ + id_tag = "hop_road_shutters"; + name = "Line Shutters Control"; + pixel_x = -6; + pixel_y = 27 + }, +/obj/machinery/button/blast_door{ + id_tag = "hop_shutters"; + name = "Desk Shutters Control"; + pixel_x = 6; + pixel_y = 27 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/blue/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"gGd" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/engine_smes) +"gGi" = ( +/obj/floor_decal/corner/darkblue/half{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue{ + dir = 9 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/random/vendor{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"gGx" = ( +/obj/structure/cable/green{ + 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/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"gGy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"gGH" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/sign/warning/deathsposal{ + pixel_x = 32 + }, +/obj/structure/sign/warning/airlock{ + color = "#ff9900"; + name = "\improper WAY TO SPACE"; + pixel_y = 26 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"gGJ" = ( +/obj/wallframe_spawn/reinforced/polarized, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/curtain/black, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"gGM" = ( +/obj/item/storage/box/lights/mixed, +/obj/random/maintenance, +/obj/structure/table/standard, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/assembly/robotics) +"gGO" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"gGX" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/purple/bordercorner2, +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/lava/orange{ + pixel_x = -6; + pixel_y = 13 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"gGZ" = ( +/obj/machinery/computer/modular/preset/civilian, +/obj/floor_decal/corner/purple/half{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/security) +"gHg" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 8 + }, +/obj/machinery/computer/air_control{ + dir = 1; + input_tag = "n2o_in"; + name = "Nitrous Oxide Supply Control"; + output_tag = "n2o_out"; + sensor_name = "Tank"; + sensor_tag = "n2o_sensor" + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/floor_decal/corner/white{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"gHi" = ( +/obj/shuttle_landmark/ert/deck4, +/turf/space, +/area/space) +"gHj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod1/station) +"gHl" = ( +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 4 + }, +/obj/floor_decal/corner/blue/mono, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"gHp" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/closet/hydrant{ + pixel_x = 28 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"gHq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hydroponics) +"gHs" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"gHu" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/prepainted, +/area/vacant/infirmary) +"gHx" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "bridge_ent"; + name = "Bridge Lockdown" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/glass/command{ + dir = 4; + id_tag = "portbridgedoor"; + name = "Bridge"; + secured_wires = 1 + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "bridge_ent"; + name = "Bridge Lockdown" + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"gHC" = ( +/obj/floor_decal/corner/red, +/obj/structure/table/standard, +/obj/random/maintenance, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"gHE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/security/brig) +"gHI" = ( +/obj/structure/undies_wardrobe, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"gHL" = ( +/obj/decal/cleanable/remains, +/obj/decal/cleanable/blood, +/obj/structure/foamedmetal, +/obj/item/passport/iccg/north_gaia, +/obj/item/handcuffs/cable/tape, +/obj/item/handcuffs, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/foreport) +"gHN" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"gHP" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/firstdeck/aftport) +"gHQ" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"gHX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Fore Hallway Starboard"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"gIe" = ( +/obj/structure/flora/pottedplant/mysterious, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"gIf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"gIl" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/structure/reagent_dispensers/water_cooler{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"gIn" = ( +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/assembly/chargebay) +"gIx" = ( +/obj/machinery/fabricator, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/development) +"gIy" = ( +/obj/structure/table/rack, +/obj/random/coin, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"gIz" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"gIM" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"gIN" = ( +/obj/machinery/disposal, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -21 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/heads/office/ce) +"gIR" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/device/flashlight/lamp/green{ + pixel_x = -6; + pixel_y = 13 + }, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/iaa/cobed) +"gIZ" = ( +/obj/structure/bed/sofa/m/red{ + dir = 10 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/carpet/magenta, +/area/crew_quarters/cafe) +"gJd" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining{ + dir = 4; + id_tag = null; + name = "Warehouse"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/storage) +"gJl" = ( +/obj/machinery/shieldwallgen, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"gJm" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"gJt" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"gJv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/button/blast_door{ + id_tag = "mine_warehouse"; + name = "Storage Door Control"; + pixel_x = 6; + pixel_y = 24; + req_access = list(list("ACCESS_MINING","ACCESS_XENOARCH","ACCESS_EL")) + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"gJw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/sign/warning/high_voltage{ + dir = 1; + pixel_y = -32 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"gJE" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/purple/bordercorner2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"gJG" = ( +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"gJH" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"gJQ" = ( +/obj/floor_decal/techfloor, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"gKr" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/obj/machinery/meter, +/obj/floor_decal/corner/green/three_quarters{ + dir = 4 + }, +/obj/structure/window/reinforced, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"gKy" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/constructable_frame/computerframe, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"gKz" = ( +/obj/structure/railing/mapped{ + dir = 4; + init_color = "#8c911d"; + color = "#8c911d" + }, +/turf/simulated/floor/plating, +/area/rnd/misc_lab) +"gKF" = ( +/turf/simulated/wall/r_wall/hull, +/area/vacant/gambling) +"gKH" = ( +/obj/structure/table/standard, +/obj/item/storage/firstaid/surgery, +/obj/item/stack/medical/advanced/bruise_pack, +/obj/item/reagent_containers/spray/sterilizine, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/corner/grey_alt{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/assembly/robotics) +"gKN" = ( +/obj/item/folder/nt/rd, +/obj/structure/table/glass/boron, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"gKR" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/bed/chair/shuttle, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ + dir = 4; + id_tag = "escape_pod_9"; + name = "escape pod nine controller"; + pixel_x = -20; + tag_door = "escape_pod_9_hatch"; + frequency = 1380 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/escape_pod/escape_pod9/station) +"gKT" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/turf/simulated/floor/plating, +/area/assembly/office) +"gKW" = ( +/obj/floor_decal/spline/fancy/wood/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"gKX" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"gLb" = ( +/obj/structure/closet/emcloset, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"gLc" = ( +/obj/structure/table/rack/dark, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/spline/plain/black{ + dir = 9; + icon_state = "spline_plain" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"gLg" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"gLh" = ( +/obj/structure/table/woodentable/walnut, +/obj/random/single/playing_cards, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/carpet, +/area/crew_quarters/cafe/upper) +"gLp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/prison) +"gLt" = ( +/turf/simulated/wall/r_wall/hull, +/area/security/sierra/hallway/port) +"gLu" = ( +/obj/floor_decal/carpet/blue2{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/floor_decal/carpet/blue2{ + dir = 1 + }, +/obj/floor_decal/carpet/blue2{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/garden_room) +"gLB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"gLI" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/corner/purple, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"gLS" = ( +/obj/machinery/shipsensors, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/reinforced, +/area/guppy_hangar/start) +"gLV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + dir = 4; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftstarboard) +"gLZ" = ( +/obj/structure/disposalpipe/down{ + dir = 8 + }, +/obj/structure/lattice, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/structure/cable{ + d2 = 8; + icon_state = "32-8"; + d1 = 32 + }, +/turf/simulated/open, +/area/maintenance/seconddeck/forestarboard) +"gMa" = ( +/obj/structure/holoplant, +/turf/simulated/floor/tiled/dark, +/area/chapel/office) +"gMt" = ( +/obj/machinery/shieldwallgen, +/obj/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"gMC" = ( +/obj/structure/railing/mapped{ + dir = 8; + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + dir = 1; + color = "#8c911d" + }, +/turf/simulated/floor/plating, +/area/rnd/misc_lab) +"gMI" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/gas) +"gMR" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate, +/obj/machinery/light/small, +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"gMW" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/floor_decal/industrial/traffic/corner, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/corner/black/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"gMZ" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/reinforced, +/area/vacant/monitoring) +"gNl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/maintenance/fourthdeck/aft) +"gNq" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"gNu" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"gNw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"gNA" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"gND" = ( +/obj/floor_decal/spline/plain/brown{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/actor) +"gNL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"gNM" = ( +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"gNP" = ( +/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/carpet, +/area/chapel/main) +"gNW" = ( +/turf/simulated/wall/prepainted, +/area/rnd/misc_lab) +"gOr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light/spot, +/obj/structure/table/standard, +/obj/item/storage/box/monkeycubes{ + pixel_x = 9 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"gOv" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/prison) +"gOx" = ( +/obj/structure/hygiene/shower{ + dir = 4; + pixel_x = -9 + }, +/obj/floor_decal/steeldecal/steel_decals9, +/obj/floor_decal/steeldecal/steel_decals9{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals9{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals9{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry2) +"gOA" = ( +/obj/structure/disposaloutlet, +/obj/machinery/shield_diffuser, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"gOH" = ( +/obj/floor_decal/corner/black/border{ + dir = 10 + }, +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"gOK" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"gOY" = ( +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/vacant/monitoring) +"gPd" = ( +/obj/structure/table/rack, +/obj/item/stack/material/steel/ten, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"gPe" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/abandoned_hydroponics) +"gPg" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/sign/directions/security{ + pixel_y = 24; + dir = 8 + }, +/obj/structure/sign/directions/bridge{ + pixel_y = 31; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"gPh" = ( +/obj/random/closet, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"gPl" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"gPp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"gPw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_r) +"gPA" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 4 + }, +/obj/structure/sign/warning/nosmoking_1{ + desc = "A warning sign which reads 'NO SMOKING'. Someone has scratched a variety of crude words in gutter across the entire sign."; + pixel_y = 32 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"gPD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftport) +"gPE" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"gPH" = ( +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/firstdeck) +"gPJ" = ( +/obj/structure/sign/warning/nosmoking_1{ + pixel_x = 32; + pixel_y = -37 + }, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"gPL" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"gPM" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"gPP" = ( +/obj/structure/sign/warning/docking_area{ + dir = 8 + }, +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/docking) +"gPR" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d1port) +"gPU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/camera/network/petrov{ + c_tag = "Petrov - Isolation Cell One"; + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell1) +"gPV" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/grey/border, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"gPZ" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftstarboard) +"gQd" = ( +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ + dir = 4; + id_tag = "escape_pod_1_berth"; + name = "escape pod one berth controller"; + pixel_x = -20; + pixel_y = 32; + tag_door = "escape_pod_1_berth_hatch"; + frequency = 1380 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"gQl" = ( +/obj/structure/sign/warning/compressed_gas{ + dir = 8; + pixel_x = 32 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/steel, +/obj/item/wrench, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/shuttlefuel) +"gQn" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 5 + }, +/obj/structure/closet/emcloset, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/center) +"gQr" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"gQz" = ( +/obj/machinery/shield_diffuser, +/obj/machinery/door/airlock/external/glass/bolted/cycling{ + frequency = 1380; + id_tag = "skipjack_shuttle_dock_airlock_outer"; + name = "Docking Port Airlock" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"gQA" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"gQB" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"gQF" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/laundry) +"gQG" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/reagent_containers/glass/bucket, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/floor_decal/corner/green/half{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"gQI" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/bed/sofa/r/blue{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"gQN" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"gQV" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins/storage) +"gRa" = ( +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black/corner, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"gRb" = ( +/obj/machinery/computer/teleporter, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/structure/sign/poster{ + pixel_x = -32 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/teleporter) +"gRg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/fore) +"gRi" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/blast/shutters/open{ + name = "Supply Desk Shutters"; + id_tag = "sup_office" + }, +/turf/simulated/floor/plating, +/area/quartermaster/office) +"gRj" = ( +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "sierra_surgery1" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/medical/surgery/second) +"gRn" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"gRr" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/meter, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"gRs" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"gRw" = ( +/obj/floor_decal/techfloor, +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"gRz" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/window/boron_reinforced, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"gRB" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"gRO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/medical/virology) +"gRR" = ( +/turf/simulated/wall/r_wall/hull, +/area/quartermaster/exploration/storage) +"gRU" = ( +/obj/catwalk_plated/dark, +/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" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/center) +"gSc" = ( +/obj/machinery/atmospherics/binary/pump, +/obj/structure/handrail{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"gSd" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/space) +"gSe" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"gSf" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"gSk" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"gSm" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/small, +/obj/machinery/recharger/wallcharger{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"gSp" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/photocopier, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"gSw" = ( +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/port) +"gSx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 1; + frequency = 1380; + id_tag = "centcom_shuttle_dock"; + pixel_x = 32; + pixel_y = -29; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"gSB" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"gSC" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"gSH" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/structure/bed/sauna_bench/middle, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sauna) +"gSJ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"gSO" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/exploration/eva) +"gSQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"gSU" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/brown/border{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/mining{ + dir = 4; + c_tag = "Mining - EVA" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"gSV" = ( +/obj/structure/table/rack, +/obj/random/tech_supply, +/obj/random/firstaid, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/white/monotile, +/area/maintenance/fourthdeck/aft) +"gTc" = ( +/obj/floor_decal/corner/green/diagonal, +/obj/structure/bed/chair/office/light{ + icon_state = "officechair_preview"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"gTl" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/abandoned_hydroponics) +"gTx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"gTA" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/compactor) +"gTB" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"gTL" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_north = 2; + tag_south = 1; + tag_west = 3 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"gTN" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"gTP" = ( +/obj/catwalk_plated, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/camera/network/hangar, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"gTT" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/bed/chair/comfy/purple{ + dir = 8 + }, +/obj/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled, +/area/rnd/office) +"gUf" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"gUj" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/hallway) +"gUl" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/fourthdeck/starboard) +"gUp" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"gUC" = ( +/obj/machinery/atm{ + pixel_y = 32 + }, +/obj/floor_decal/corner/blue/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/heads/office/hop) +"gUF" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 6 + }, +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/power) +"gUM" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/light/small, +/obj/structure/table/rack, +/obj/random/toolbox, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"gUO" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"gUS" = ( +/obj/structure/cable/green, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/smes/buildable/preset/sierra/substation{ + RCon_tag = "Substation - Fourth Deck" + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/fourthdeck) +"gUT" = ( +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hop/cobed) +"gUV" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"gUX" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/table/woodentable/walnut, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"gUY" = ( +/obj/structure/table/marble, +/obj/machinery/microwave{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"gVa" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftport) +"gVb" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/equipstorage) +"gVj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"gVk" = ( +/obj/structure/bed/chair/armchair/brown{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Captain's Office"; + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"gVl" = ( +/obj/structure/closet/secure_closet/scientist_sierra, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/locker) +"gVn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"gVs" = ( +/obj/machinery/power/apc/super/critical{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"gVz" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/table/woodentable/maple, +/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/pill/pod/cream{ + pixel_y = 7; + pixel_x = 8 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"gVE" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/aft_stairwell) +"gVS" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"gVV" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"gVY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"gWa" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"gWh" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"gWi" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"gWj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/ai_status_display{ + pixel_x = -32 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"gWk" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/xenobiology/atmos) +"gWu" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/flora/pottedplant/tall, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera/network/fourth_deck{ + dir = 1; + c_tag = "Fourth Deck - Dock Bay - Visitors" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"gWy" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/techfloor, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"gWA" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/obj/item/storage/mirror{ + pixel_x = -1; + pixel_y = 32 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"gWF" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"gWK" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/no_grille/regular{ + id = "cafewindow" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/crew_quarters/cafe/upper) +"gWL" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + dir = 1; + id_tag = "rescue_shuttle_dock_airlock_pump"; + power_rating = 25000 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/center) +"gWQ" = ( +/obj/structure/window/reinforced, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled, +/area/security/range) +"gWR" = ( +/obj/structure/curtain/medical, +/obj/structure/kitchenspike, +/obj/structure/window/basic, +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/galley/freezer) +"gWU" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/corner/red, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"gWW" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/floor_decal/steeldecal/steel_decals_central6, +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"gXf" = ( +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"gXj" = ( +/obj/structure/cryofeed, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/central_stairwell) +"gXo" = ( +/obj/structure/flora/seaweed/mid, +/mob/living/simple_animal/aquatic/fish{ + name = "Marry" + }, +/obj/fluid_mapped, +/turf/simulated/floor/beach/sand, +/area/crew_quarters/cafe/upper) +"gXp" = ( +/obj/random/closet, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/forestarboard) +"gXv" = ( +/obj/structure/table/rack, +/obj/random/tool, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"gXw" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"gXD" = ( +/obj/structure/fitness/punchingbag, +/obj/floor_decal/corner/red/full, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/gym) +"gXZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/sign/warning/pods/south{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"gYd" = ( +/turf/simulated/wall/r_wall/hull, +/area/rnd/toxins/storage) +"gYk" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"gYr" = ( +/obj/machinery/button/windowtint{ + dir = 8; + id = "ce_windows"; + pixel_x = 24; + pixel_y = 19 + }, +/obj/machinery/button/alternate/door{ + desc = "A remote control-switch for the office door."; + dir = 8; + id_tag = "cedoor"; + name = "Office Door Control"; + pixel_x = 24; + pixel_y = 6; + req_access = list("ACCESS_CHIEF_ENGINEER") + }, +/obj/machinery/button/blast_door{ + dir = 8; + id_tag = "eng_lockdown"; + name = "Emergency Lockdown Control"; + pixel_x = 24; + pixel_y = -7; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"gYt" = ( +/obj/spider/spiderling/mundane/dormant, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"gYu" = ( +/obj/machinery/light/small, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"gYx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"gYC" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"gYE" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/space) +"gYL" = ( +/obj/floor_decal/corner/purple/full, +/obj/structure/flora/pottedplant/mysterious, +/obj/machinery/light_switch{ + dir = 4; + on = 1; + pixel_x = -25 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/rd/cobed) +"gYM" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/red/bordercorner2, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"gYN" = ( +/obj/structure/closet/secure_closet/crew/research, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/item/folder/nt, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/locker) +"gYS" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/trash, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"gYU" = ( +/obj/structure/sign/warning/vent_port, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/incinerator) +"gZb" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"gZf" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/hos, +/obj/landmark/start{ + name = "Head of Security" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/heads/office/hos/cobed) +"gZm" = ( +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"gZs" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft_stairwell) +"gZv" = ( +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"gZz" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/empty, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"gZD" = ( +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/fore) +"gZK" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"gZL" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/crucian_hangar/start) +"gZM" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "o24p_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d1port) +"gZU" = ( +/obj/floor_decal/corner/yellow/half, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"gZX" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/snacks/mint, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"gZZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/fore) +"haa" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/corner/green{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"hae" = ( +/obj/floor_decal/industrial/hatch/green, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"hal" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red{ + dir = 6 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"haq" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"har" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/blue/border, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"has" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"haz" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"haA" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"haH" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"haJ" = ( +/obj/structure/closet/emcloset, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry2) +"haL" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/center) +"haP" = ( +/obj/structure/table/standard, +/obj/item/deck/cards{ + pixel_y = 8; + pixel_x = 4 + }, +/obj/random/drinkbottle, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"haV" = ( +/obj/machinery/keycard_auth/sierra{ + pixel_x = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"haW" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/aft) +"hba" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/rnd/development) +"hbb" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"hbd" = ( +/obj/floor_decal/corner/black/bordercee{ + dir = 4 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hbi" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"hbv" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"hbz" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/structure/bed/chair/pew, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/wood, +/area/crew_quarters/actor/stage) +"hbD" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/machinery/message_server, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"hbG" = ( +/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" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"hbM" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/airlock) +"hbS" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 5 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"hbT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"hcd" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/floor_decal/borderfloor{ + color = null; + dir = 4 + }, +/obj/floor_decal/corner/blue/border{ + dir = 4 + }, +/obj/machinery/vitals_monitor, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"hcf" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/keycard_auth/sierra{ + pixel_x = -24 + }, +/turf/simulated/floor/selfestructgrid, +/area/security/nuke_storage) +"hci" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"hck" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump{ + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "fuel3p_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d1starboard) +"hcr" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/table/woodentable, +/obj/item/paper/workvisa, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"hcz" = ( +/obj/machinery/floodlight{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"hcF" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/structure/bed/chair/padded/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"hcG" = ( +/obj/structure/closet/emcloset/anchored, +/turf/simulated/floor/tiled/techfloor, +/area/bridge) +"hcM" = ( +/turf/simulated/floor/tiled/white, +/area/medical/ward) +"hcP" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"hcQ" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/flora/pottedplant/stoutbush, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 9 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/cafe/upper) +"hcS" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"hcT" = ( +/obj/machinery/conveyor{ + dir = 5; + id = "mining_internal" + }, +/turf/simulated/floor, +/area/quartermaster/hangar) +"hcW" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"hcZ" = ( +/obj/structure/undies_wardrobe, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/item/clothing/under/schoolgirl, +/obj/item/clothing/head/kitty, +/turf/simulated/floor/wood, +/area/maintenance/firstdeck/forestarboard) +"hdb" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"hdc" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/rd/cobed) +"hdi" = ( +/obj/structure/sign/warning/airlock{ + dir = 1; + pixel_y = -32 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 9 + }, +/obj/structure/cable/green, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Fourth Deck - Dock Bay - Port Two"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"hdo" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/equipment) +"hdp" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/button/blast_door{ + id_tag = "firingspace"; + name = "Firing Range Shields"; + req_access = list("ACCESS_SEC_DOORS"); + pixel_y = 24 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"hdq" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/bed/sofa/m/brown{ + dir = 10 + }, +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 5 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/cafe/upper) +"hdr" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/floor_decal/corner/black/half{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"hdI" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/aft) +"hdJ" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/splatter, +/obj/structure/hygiene/toilet{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"hdN" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"hem" = ( +/obj/structure/bed/chair/padded/green{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"hes" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/corner/darkblue/bordercorner, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"heG" = ( +/turf/simulated/wall/prepainted, +/area/security/sierra/brig) +"heJ" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"heL" = ( +/obj/shuttle_landmark/escape_pod/start/pod3, +/obj/wallframe_spawn/reinforced/titanium, +/turf/simulated/floor/plating, +/area/shuttle/escape_pod/escape_pod3/station) +"heP" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/ship) +"heQ" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/item/clothing/mask/gas/aquabreather, +/obj/item/clothing/mask/gas/aquabreather, +/obj/item/clothing/mask/gas/aquabreather, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/waterstore) +"heT" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftstarboard) +"heV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"heX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"hfc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/closet/emcloset, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/research) +"hfl" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/medical/mortus{ + autoset_access = 0; + name = "Mass Driver"; + req_access = list("ACCESS_CHAPEL_STORAGE") + }, +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "chapel_shutters_md"; + name = "Mass Driver Shutters"; + opacity = 0; + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/chapel/main) +"hfm" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"hfu" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/ai_status_display{ + pixel_x = -32; + pixel_y = -32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"hfv" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/maintenance/waterstore) +"hfB" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut{ + icon_state = "walnut_broken5" + }, +/area/vacant/bar) +"hfF" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"hfG" = ( +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/tele_pad, +/turf/simulated/floor/tiled/techfloor/grid, +/area/teleporter) +"hfH" = ( +/obj/structure/table/standard, +/obj/machinery/cell_charger, +/obj/item/stock_parts/capacitor, +/obj/item/stock_parts/capacitor, +/obj/random/powercell, +/obj/random/powercell, +/obj/random/powercell, +/obj/item/folder/nt, +/obj/item/stack/nanopaste, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/rnd/development) +"hfK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"hfO" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hos) +"hfX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/item/stack/material/plastic/ten, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"hgg" = ( +/obj/machinery/door/blast/regular, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/rnd/toxins) +"hgw" = ( +/obj/machinery/ai_status_display, +/turf/simulated/wall/prepainted, +/area/crew_quarters/sleep/bunk) +"hgz" = ( +/obj/machinery/light, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"hgB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"hgH" = ( +/obj/structure/closet/coffin, +/obj/structure/railing/mapped, +/obj/floor_decal/corner/black/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/mortuary) +"hgI" = ( +/obj/structure/table/glass, +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"hgJ" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/synthesized_instrument/guitar, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"hgL" = ( +/obj/floor_decal/corner/black/border{ + dir = 10 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hgM" = ( +/obj/structure/morgue{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/mortuary) +"hgX" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/reagent_dispensers/water_cooler, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"hgZ" = ( +/obj/structure/sign/nanotrasen, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/centralport) +"hha" = ( +/obj/machinery/vending/coffee, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"hhg" = ( +/obj/floor_decal/floordetail/edgedrain{ + dir = 4 + }, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"hhl" = ( +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/obj/floor_decal/corner/orange/diagonal, +/turf/simulated/floor/tiled/steel_grid, +/area/security/prison) +"hhq" = ( +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"hhy" = ( +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -21 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor) +"hhD" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"hhE" = ( +/turf/simulated/floor/carpet, +/area/chapel/main) +"hhG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 6 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"hhI" = ( +/mob/living/carbon/slime, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"hhN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/grey{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"hhO" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/ore_box, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition/storage) +"hhP" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"hhW" = ( +/obj/machinery/computer/modular/preset/aislot/research{ + dir = 4 + }, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"hhZ" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/firedoor, +/obj/structure/cable/cyan, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/airlock) +"hil" = ( +/obj/floor_decal/industrial/danger{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/suits) +"him" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "eng4_outer"; + name = "First Deck Port Nacelle Access" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/thruster/d1port) +"hio" = ( +/obj/structure/table/standard, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/computer/atmoscontrol/laptop{ + monitored_alarm_ids = list("xenobio1_alarm","xenobio2_alarm","xenobio3_alarm","xenobio4_alarm","xenobio5_alarm"); + req_access = list("ACCESS_RESEARCH") + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"hip" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/rubble, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"hiM" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "mining_internal" + }, +/turf/simulated/floor, +/area/quartermaster/hangar) +"hiT" = ( +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/hallway/infirmary) +"hiV" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"hjf" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 1 + }, +/obj/structure/flora/pottedplant/floorleaf, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"hjg" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/turf/simulated/floor/tiled/dark/monotile, +/area/rnd/xenobiology/xenoflora) +"hjn" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/obj/machinery/meter, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"hjo" = ( +/obj/structure/closet/crate, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"hjx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"hjA" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "fusion_observation" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/control) +"hjC" = ( +/obj/floor_decal/corner/black/full, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Head of Security's Desk"; + departmentType = 5; + name = "Head of Security RC"; + pixel_x = 29 + }, +/obj/structure/bed/chair/office/comfy/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos/cobed) +"hjI" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"hjK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"hjL" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"hjP" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"hjS" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"hka" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/power/port_gen/pacman{ + sheets = 25 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"hkb" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/camera/all/command{ + c_tag = "AI Core - Port"; + dir = 1 + }, +/obj/machinery/computer/modular/preset/engineering{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/turret_protected/ai) +"hkf" = ( +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"hkg" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/fourthdeck/port) +"hko" = ( +/obj/machinery/vending/cigarette, +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/central_stairwell) +"hkq" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"hkv" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/port) +"hkw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/civilian{ + name = "Private Room"; + id_tag = "bar_private_room_2"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/cafe) +"hkx" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 5 + }, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Fourth Deck - Dock Bay - Port One" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"hkA" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins/storage) +"hkH" = ( +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"hkL" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"hkN" = ( +/obj/floor_decal/corner/black/three_quarters{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"hkZ" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"hla" = ( +/obj/decal/cleanable/blood, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/foreport) +"hlc" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"hlo" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/blast_door{ + id_tag = "PetrovShield"; + name = "Blast Shutter Control"; + pixel_x = 5; + pixel_y = -3 + }, +/obj/machinery/button/blast_door{ + id_tag = "PetrovBiohazard"; + name = "Biohazard Shutter Control"; + pixel_x = -5; + pixel_y = -3 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/cockpit) +"hlu" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"hlz" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/suplocker_room) +"hlC" = ( +/obj/structure/disposalpipe/segment, +/obj/landmark{ + name = "lightsout" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"hlF" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/corner/green/half, +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "Emergency NanoMed"; + pixel_y = -29 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"hlL" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/corner/grey{ + dir = 9 + }, +/obj/structure/table/standard, +/obj/item/storage/box/cups{ + pixel_y = 11; + pixel_x = 4 + }, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"hlM" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "CO24p_out"; + initialize_directions = 1; + internal_pressure_bound = 1000; + internal_pressure_bound_default = 1000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/window/boron_reinforced{ + dir = 4 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d1port) +"hlO" = ( +/obj/floor_decal/industrial/warning/cee, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"hlT" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/barrier, +/obj/item/storage/toolbox/mechanical, +/obj/item/gun/energy/ionrifle/small, +/obj/item/gun/energy/gun, +/obj/item/clothing/suit/armor/captain, +/obj/item/clothing/gloves/captain, +/obj/item/clothing/head/caphat, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/heads/captain/secret_room) +"hlU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"hlX" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"hmg" = ( +/obj/decal/cleanable/dirt, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"hmD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"hmE" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/table/steel_reinforced, +/obj/item/ladder_mobile, +/obj/item/ladder_mobile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"hmN" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"hmP" = ( +/obj/wallframe_spawn/reinforced/polarized, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/curtain/black, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"hmT" = ( +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"hmZ" = ( +/obj/structure/closet/crate/internals/fuel, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"hnk" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/random/toolbox{ + pixel_y = 14 + }, +/obj/item/folder/yellow{ + pixel_y = -1; + pixel_x = -5 + }, +/obj/item/screwdriver{ + pixel_y = 11; + pixel_x = 6 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sleep/bunk) +"hnq" = ( +/obj/machinery/light, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"hnw" = ( +/obj/structure/bed/chair/comfy/captain{ + dir = 8 + }, +/obj/landmark/start{ + name = "Captain" + }, +/obj/machinery/button/blast_door{ + dir = 2; + id_tag = "bridge_windows"; + name = "Bridge Window Blast Doors"; + pixel_x = 36; + pixel_y = -3 + }, +/obj/machinery/button/blast_door{ + id_tag = "bridge_ent"; + name = "Bridge Entarence Blast Doors"; + pixel_x = 36; + pixel_y = 7 + }, +/obj/floor_decal/corner/darkblue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"hnx" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"hnB" = ( +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/table/standard, +/obj/random/tech_supply{ + pixel_y = 5 + }, +/obj/random/tech_supply{ + pixel_y = -7; + pixel_x = -6 + }, +/obj/random/tech_supply{ + pixel_y = 7; + pixel_x = 7 + }, +/obj/random/tool{ + pixel_y = -4; + pixel_x = 4 + }, +/obj/random/tool{ + pixel_y = 9; + pixel_x = -3 + }, +/obj/random/tank{ + pixel_y = 7; + pixel_x = -1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"hnL" = ( +/obj/shuttle_landmark/skipjack/deck4, +/turf/space, +/area/space) +"hnN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"hnT" = ( +/obj/structure/table/woodentable_reinforced, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_x = -24; + dir = 4; + pixel_y = 6 + }, +/obj/machinery/button/windowtint{ + dir = 4; + id = "сhief_steward_windows"; + pixel_x = -24; + pixel_y = -6; + range = 2 + }, +/obj/item/device/flashlight/lamp{ + pixel_y = 10; + pixel_x = -5 + }, +/turf/simulated/floor/wood, +/area/command/chief_steward) +"hoa" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/substation/fourthdeck) +"hof" = ( +/obj/machinery/door/firedoor, +/obj/machinery/navbeacon/sierra/SD_forehallway1, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_2" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/center) +"hoi" = ( +/obj/structure/table/standard, +/obj/machinery/recharger/wallcharger{ + dir = 4; + pixel_x = -22 + }, +/obj/item/gun/energy/laser/practice, +/obj/structure/window/reinforced, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled, +/area/security/range) +"hos" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d3port) +"hou" = ( +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/sticky_pad/random, +/obj/floor_decal/corner/yellow/half{ + dir = 1 + }, +/obj/item/pen, +/obj/item/storage/box/cups{ + pixel_y = 11; + pixel_x = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/quartermaster/suplocker_room) +"hoJ" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"hoN" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/maintenance, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"hoQ" = ( +/obj/structure/table/standard, +/obj/item/deck/cards, +/obj/item/storage/pill_bottle/dice, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"hpa" = ( +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/item/stool/padded, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/exploration) +"hpb" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"hpc" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/open, +/area/maintenance/bridgedeck/starboard) +"hpd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor/stage) +"hpm" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"hpF" = ( +/obj/item/storage/mirror{ + dir = 8; + pixel_x = -1; + pixel_y = -24 + }, +/obj/structure/hygiene/sink{ + pixel_y = -12 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/breakroom) +"hpL" = ( +/obj/machinery/vending/snack{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lightgrey/border, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"hpO" = ( +/obj/structure/table/standard, +/obj/machinery/recharger/wallcharger{ + dir = 4; + pixel_x = -22 + }, +/obj/item/gun/energy/laser/practice, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/range) +"hpR" = ( +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"hpS" = ( +/obj/structure/flora/pottedplant/minitree{ + pixel_y = 6 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"hpT" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"hpV" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8; + injecting = 1; + use_power = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/thruster/d3starboard) +"hpX" = ( +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/aft_stairwell) +"hqa" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/obj/structure/fuel_port, +/turf/simulated/wall/titanium, +/area/exploration_shuttle/power) +"hql" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/red, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"hqn" = ( +/obj/floor_decal/corner/darkblue, +/obj/structure/janitorialcart, +/obj/item/mop, +/turf/simulated/floor/tiled/steel_grid, +/area/bridge/storage) +"hqt" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/turf/simulated/floor/plating, +/area/assembly/robotics) +"hqv" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_north = 2; + tag_south = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"hqB" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hqH" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"hqO" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/landmark/start{ + name = "Research Director" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/xenobiology/entry) +"hqY" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/corner/darkblue/mono, +/obj/structure/filingcabinet/wallcabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/adjutants) +"hrb" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/seconddeck/forestarboard) +"hrj" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/office) +"hrr" = ( +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/floor_decal/spline/fancy/black, +/obj/machinery/camera/network/command{ + c_tag = "Command - Bridge Port"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"hrz" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/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/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"hrB" = ( +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 1; + pixel_y = -22 + }, +/turf/simulated/floor/reinforced, +/area/turret_protected/ai_maint) +"hrO" = ( +/obj/structure/bed/sofa/l/black, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"hrT" = ( +/obj/machinery/access_button/airlock_interior{ + master_tag = "prototype_controller"; + pixel_x = -23; + pixel_y = 23 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/prototype/engine) +"hrY" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cargo_r) +"hse" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"hsm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techmaint, +/area/security/sierra/evidence) +"hsn" = ( +/obj/machinery/optable{ + name = "Xenobiology Operating Table" + }, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/xenobiology/level1) +"hsq" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/item/taperoll/bog{ + pixel_x = -12; + pixel_y = -10 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/prison) +"hsw" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/seconddeck/emergency) +"hsT" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/mining/brace{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition/storage) +"hsY" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/monotile, +/area/maintenance/abandoned_hydroponics) +"hsZ" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"htc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/tool{ + pixel_y = -6; + pixel_x = -5 + }, +/obj/random/tool{ + pixel_y = 4; + pixel_x = 4 + }, +/obj/random/tank{ + pixel_y = -1; + pixel_x = 8 + }, +/obj/random/tech_supply{ + pixel_y = 11; + pixel_x = -10 + }, +/obj/random/maintenance, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/hangar) +"htd" = ( +/obj/random/closet, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"htf" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor, +/area/solar/bridge_port) +"htl" = ( +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/forestarboard) +"htn" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + id_tag = "guppy_shuttle_pump_out_external" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"htx" = ( +/obj/floor_decal/corner/red/half{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"htB" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"htI" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"htJ" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/decal/cleanable/greenglow, +/turf/simulated/floor/wood/walnut, +/area/vacant/dormintories) +"htU" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/table/woodentable/maple, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup, +/obj/item/reagent_containers/food/condiment/small/packet/coffee{ + pixel_y = 5; + pixel_x = 7 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"htV" = ( +/obj/floor_decal/carpet/orange{ + dir = 4 + }, +/obj/structure/dogbed, +/mob/living/simple_animal/passive/opossum/poppy, +/turf/simulated/floor/carpet/orange, +/area/crew_quarters/heads/office/ce/cobed) +"htW" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/aft) +"htX" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"hui" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 6 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hux" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"huG" = ( +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"huK" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp{ + pixel_y = 10 + }, +/obj/item/device/camera, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation/second) +"huO" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/stock_parts/circuitboard/atmos_alert, +/obj/item/stock_parts/circuitboard/powermonitor, +/obj/item/stock_parts/circuitboard/stationalert, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech) +"huY" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/blue, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/light_construct{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"hva" = ( +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/sleep/cryo/south) +"hvd" = ( +/obj/floor_decal/techfloor, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai_upload) +"hvh" = ( +/obj/structure/table/standard, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light_construct/small, +/obj/random/maintenance, +/turf/simulated/floor/tiled/freezer, +/area/medical/virology/lab) +"hvk" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"hvn" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/center) +"hvo" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/seconddeck/aftport) +"hvp" = ( +/obj/machinery/door/airlock/atmos, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"hvt" = ( +/obj/structure/curtain/medical, +/obj/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/floor_decal/corner/lime/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"hvF" = ( +/obj/random/closet, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"hvO" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/foreport) +"hvR" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "escape_pod_5_pump" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"hvT" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/machinery/computer/upload/ai, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"hvU" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 4 + }, +/obj/machinery/meter, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"hvZ" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/light_switch{ + pixel_x = 8; + pixel_y = 24 + }, +/obj/machinery/button/holosign{ + id_tag = "sierra_surgery2"; + pixel_y = 24 + }, +/obj/machinery/button/windowtint{ + id = "sierra_surgery2"; + pixel_x = -8; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery/second) +"hwe" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"hwk" = ( +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"hwm" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4; + name = "Maintenance Storage" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/backstorage) +"hwv" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/toxins/storage) +"hww" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/obj/structure/closet/hydrant{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"hwE" = ( +/obj/structure/grille, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hwI" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/flasher{ + id_tag = "ai_core"; + pixel_y = 24 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"hwN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"hwP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"hwS" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"hwU" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 10 + }, +/obj/structure/bed/chair/padded/yellow{ + dir = 1; + icon_state = "chair_preview" + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"hwV" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/tcommsat/computer) +"hwW" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"hwX" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/grille, +/turf/simulated/floor/airless, +/area/space) +"hwZ" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/assembly/chargebay) +"hxb" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"hxm" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"hxu" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/light_switch{ + pixel_x = -10; + pixel_y = -21 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/equipment) +"hxy" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 23 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/mauve/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/mauve/bordercorner2, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"hxD" = ( +/obj/machinery/door/window/brigdoor/eastright{ + id_tag = "iaaleft"; + req_access = newlist() + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"hxU" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"hxY" = ( +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/obj/structure/table/woodentable_reinforced/ebony, +/obj/floor_decal/carpet/blue{ + dir = 1 + }, +/obj/item/paper_bin, +/obj/item/pen/multi, +/obj/item/sticky_pad/random{ + pixel_x = -6; + pixel_y = 9 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"hya" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"hyc" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/black/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"hyf" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"hyg" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/green/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics/third_deck_storage) +"hyj" = ( +/obj/floor_decal/corner/black/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/black/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hydroponics/third_deck_storage) +"hyk" = ( +/obj/structure/catwalk, +/obj/structure/handrail, +/turf/simulated/floor/shuttle_ceiling/sierra, +/area/space) +"hyo" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"hys" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"hyu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red, +/obj/paint_stripe/turquoise, +/obj/paint/black, +/obj/paint/black, +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai_teleport) +"hyz" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck - Central Hallway - Aft"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"hyA" = ( +/obj/structure/table/rack, +/obj/item/storage/firstaid/regular{ + pixel_y = 10 + }, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/regular{ + pixel_y = -10 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/medical/equipstorage) +"hyC" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/obj/machinery/vending/snix{ + dir = 8 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"hyD" = ( +/obj/structure/bed/padded, +/obj/machinery/light_switch{ + pixel_y = 24 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/item/bedsheet/brown, +/turf/simulated/floor/carpet, +/area/vacant/dormintories) +"hyH" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/item/modular_computer/telescreen/preset/medical{ + pixel_x = -32 + }, +/obj/structure/handrail{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"hyL" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"hyP" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/bed/chair/armchair/black, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"hyS" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/door/airlock/civilian{ + dir = 4; + name = "Research General Cabin"; + req_access = list("ACCESS_RESEARCH"); + autoset_access = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"hyW" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/suit_storage_unit/security/sapper, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/suits) +"hzb" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"hzh" = ( +/obj/machinery/power/tracker, +/obj/floor_decal/solarpanel, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/airless, +/area/solar/starboard) +"hzl" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/structure/bed/sofa/l/brown{ + dir = 4 + }, +/obj/floor_decal/carpet/red, +/obj/floor_decal/carpet/red{ + dir = 8 + }, +/obj/floor_decal/carpet/red{ + dir = 10 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"hzn" = ( +/obj/structure/sign/thera{ + pixel_y = 32 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"hzv" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "solar_bridge_pump" + }, +/obj/machinery/light/small, +/obj/machinery/oxygen_pump{ + pixel_y = -32 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "solar_bridge_airlock"; + pixel_x = 2; + pixel_y = 24; + req_access = list("ACCESS_EXTERNAL"); + tag_airpump = "solar_bridge_pump"; + tag_chamber_sensor = "solar_bridge_sensor"; + tag_exterior_door = "solar_bridge_outer"; + tag_interior_door = "solar_bridge_inner" + }, +/obj/machinery/airlock_sensor{ + id_tag = "solar_bridge_sensor"; + pixel_x = -12; + pixel_y = 24 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar/bridge_starboard) +"hzN" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/cyan, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"hzR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"hzW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"hAc" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"hAe" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/photocopier, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"hAt" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"hAu" = ( +/obj/floor_decal/industrial/traffic{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hAz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"hAA" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/blue/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/blue/bordercorner2, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Fourth Deck - Dock Bay - Hallway Two"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"hAB" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"hAD" = ( +/obj/structure/ladder/up, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hAE" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/virology{ + locked = 1; + id_tag = "virology_access_inner" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/item/taperoll/engineering/applied, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/blast/regular, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology) +"hAJ" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/ai_status_display{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"hAO" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"hAP" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"hAV" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/assembly/robotics) +"hAZ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/artifact_scanpad, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/scan) +"hBd" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + name = "Internal Affairs Agent Dorm"; + secured_wires = 1 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/cobed) +"hBn" = ( +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/floor_decal/techfloor/hole{ + dir = 1 + }, +/obj/machinery/flasher{ + id_tag = "security_pod_flash"; + name = "Floor mounted flash" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod5/station) +"hBo" = ( +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"hBq" = ( +/obj/machinery/door/airlock/hatch{ + frequency = 1379; + id_tag = "engine_airlock_outer"; + name = "Engine Airlock Exterior" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"hBr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"hBs" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"hBu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"hBv" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"hBx" = ( +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"hBL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"hBO" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/medical/virology) +"hBS" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"hBY" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"hBZ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"hCb" = ( +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/monotile, +/area/assembly/office) +"hCt" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/floor/plating, +/area/rnd/toxins) +"hCv" = ( +/obj/structure/bed/chair/padded/red{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"hCw" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"hCF" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"hCG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3starboard) +"hCS" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"hCT" = ( +/obj/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hCU" = ( +/obj/structure/table/woodentable/mahogany, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"hCY" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id_tag = "hangar_checkpoint_shutters"; + name = "Hangar Deck Checkpoint Shutters"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/security/sierra/dockcheck) +"hDf" = ( +/obj/floor_decal/corner/darkblue/full, +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"hDl" = ( +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"hDn" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + id_tag = "misclab"; + name = "Test Chamber Blast Doors"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/rnd/containment) +"hDo" = ( +/obj/structure/hygiene/shower{ + dir = 1 + }, +/obj/structure/hygiene/drain/bath, +/obj/machinery/door/window{ + dir = 1 + }, +/obj/structure/window/basic{ + dir = 4 + }, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/obj/random/soap, +/obj/item/towel/fleece, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"hDr" = ( +/obj/machinery/atmospherics/valve/shutoff/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"hDt" = ( +/obj/floor_decal/industrial/outline/orange, +/obj/structure/ship_munition/disperser_charge/mining, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/command/bsa) +"hDE" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/nuke_storage) +"hDN" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/substation/thirddeck) +"hDS" = ( +/obj/decal/cleanable/dirt, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"hDW" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/ward) +"hEe" = ( +/obj/random/junk, +/obj/decal/cleanable/generic, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"hEf" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"hEt" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/structure/bed/chair/armchair/black{ + dir = 4 + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Internal Affairs Communications Relay"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"hEw" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/shipsensors, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/bridge) +"hED" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -24; + dir = 1 + }, +/obj/structure/table/standard, +/obj/machinery/recharger, +/obj/floor_decal/corner/lime/mono, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/center) +"hEE" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"hEH" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/cafe/upper) +"hEI" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"hEJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/eva) +"hEQ" = ( +/obj/structure/railing/mapped, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"hFb" = ( +/obj/structure/sign/warning/hot_exhaust{ + dir = 1 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1starboard) +"hFc" = ( +/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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"hFe" = ( +/obj/machinery/light/spot{ + dir = 4 + }, +/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" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"hFo" = ( +/obj/structure/table/rack/dark, +/obj/item/storage/box/latexgloves, +/obj/item/storage/box/nitrilegloves, +/obj/item/storage/box/bloodpacks, +/obj/item/storage/box/beakers, +/obj/item/storage/box/masks, +/obj/item/storage/box/syringes, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/freezer{ + pixel_y = 13 + }, +/obj/item/storage/med_pouch/burn, +/obj/item/storage/med_pouch/burn, +/obj/item/storage/med_pouch/oxyloss, +/obj/item/storage/med_pouch/oxyloss, +/obj/item/storage/med_pouch/toxin, +/obj/item/storage/med_pouch/toxin, +/obj/item/storage/med_pouch/trauma, +/obj/item/storage/med_pouch/trauma, +/obj/item/roller_bed, +/obj/item/roller_bed, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/auto_cpr, +/obj/floor_decal/spline/plain/paleblue{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"hFu" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"hFB" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"hFC" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/floor_decal/spline/plain/brown{ + dir = 8 + }, +/obj/machinery/vending/costumes{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/actor) +"hFK" = ( +/obj/structure/largecrate, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"hFN" = ( +/obj/structure/catwalk, +/obj/random/hat, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"hFS" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"hFU" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"hFV" = ( +/obj/structure/railing/mapped, +/obj/machinery/power/port_gen/pacman{ + sheets = 25 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"hFW" = ( +/obj/floor_decal/spline/plain/black, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hGd" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"hGe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/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/white, +/area/security/sierra/prison) +"hGf" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"hGh" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"hGj" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"hGr" = ( +/obj/structure/sign/directions/supply{ + dir = 4; + pixel_y = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/sign/deck/fourth{ + pixel_y = 35 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"hGt" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8; + icon_state = "map" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"hGy" = ( +/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" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"hGC" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/floor_decal/corner/green/border{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/sauna) +"hGD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"hGK" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#4c535b" + }, +/area/quartermaster/hangar/upper) +"hGM" = ( +/obj/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hGN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"hGR" = ( +/obj/structure/cable/green{ + 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/door/blast/regular{ + dir = 4; + id_tag = "bsa_door2"; + name = "Obstruction Field Disperser Blast Door" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/command/bsa) +"hGU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Fore Hallway"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"hHa" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/constructable_frame/machine_frame, +/obj/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"hHd" = ( +/obj/structure/sign/warning/moving_parts{ + dir = 4; + pixel_x = -32 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"hHm" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/lino, +/area/command/chief_steward) +"hHp" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/coffee{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/docking) +"hHv" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/research{ + id_tag = "researchdoor_interior"; + name = "Research Division Access"; + req_access = newlist() + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"hHA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"hHC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Escape Pods - Starboard"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"hHF" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"hHI" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"hHQ" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"hHX" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"hHY" = ( +/obj/structure/table/glass, +/obj/item/device/scanner/spectrometer, +/obj/item/device/scanner/reagent, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/blue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/forensic/lab) +"hId" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"hIf" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"hIn" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/engine_setup/coolant_canister, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"hIo" = ( +/obj/machinery/camera/all/command{ + c_tag = "AI Core - Aft Starboard"; + dir = 4 + }, +/obj/item/device/radio/intercom/locked/ai_private{ + pixel_y = 22 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"hIq" = ( +/obj/random/trash, +/turf/simulated/floor/plating, +/area/shuttle/petrov/test_room) +"hIr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"hIs" = ( +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "teleport3"; + name = "Third Deck Teleporter Access Shutters" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/teleporter) +"hIu" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/corner/black{ + dir = 10 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"hIE" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/obj/structure/sign/nanotrasen{ + dir = 8 + }, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod4/station) +"hIP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"hIT" = ( +/obj/structure/window/reinforced, +/obj/structure/filingcabinet{ + pixel_x = -10 + }, +/obj/structure/filingcabinet, +/obj/structure/filingcabinet{ + pixel_x = 10 + }, +/obj/item/folder/yellow, +/obj/item/folder/yellow, +/obj/item/folder/yellow, +/obj/item/folder/yellow, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder, +/obj/item/folder, +/obj/item/folder/nt, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"hIX" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"hJd" = ( +/obj/structure/flora/pottedplant/orientaltree, +/obj/floor_decal/corner/blue{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/camera/network/command{ + c_tag = "Command - Chief Medical Officer"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"hJi" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/quartermaster/suplocker_room) +"hJk" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"hJw" = ( +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/seconddeck/aftport) +"hJE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"hJM" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/selfestructgrid, +/area/security/nuke_storage) +"hJR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"hJT" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"hJV" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"hKb" = ( +/obj/structure/railing/mapped, +/obj/machinery/bodyscanner{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"hKd" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"hKe" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"hKg" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"hKj" = ( +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"hKk" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"hKl" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"hKq" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/floor_decal/corner/purple, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry) +"hKx" = ( +/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{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"hKA" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + id = "o24p_in"; + use_power = 1 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d1port) +"hKH" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"hKK" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown3_3" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/glass/civilian{ + dir = 4; + autoset_access = 0 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/center) +"hKN" = ( +/obj/structure/bed/chair/comfy/teal{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"hKO" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"hKY" = ( +/turf/simulated/wall/prepainted, +/area/bridge/adjutants/cobed) +"hLe" = ( +/obj/floor_decal/techfloor/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"hLf" = ( +/obj/structure/door_assembly, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"hLq" = ( +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"hLv" = ( +/obj/floor_decal/spline/plain/black, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hLw" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"hLx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"hLG" = ( +/obj/structure/table/glass, +/obj/item/folder, +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"hLJ" = ( +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hLM" = ( +/obj/structure/table/standard, +/obj/item/towel/random, +/obj/item/towel/random, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level2) +"hLO" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/eva) +"hLX" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"hMg" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + name = "Robotics Backroom"; + req_access = newlist() + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/assembly/robotics) +"hMi" = ( +/obj/random/closet, +/obj/random/maintenance, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"hMp" = ( +/obj/machinery/constructable_frame, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"hMA" = ( +/obj/machinery/computer/modular/preset{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"hMC" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/catwalk, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Shield Subgrid"; + name_tag = "Shield Bypass" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/shield/thirddeck) +"hMO" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/nano) +"hMV" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"hMX" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"hNf" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"hNk" = ( +/obj/structure/sign/warning/airlock{ + pixel_y = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 1 + }, +/obj/machinery/camera/network/fourth_deck{ + dir = 4; + c_tag = "Fourth Deck - Dock Bay - Starboard Two" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"hNm" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins/storage) +"hNn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/utility) +"hNp" = ( +/obj/structure/bed/chair/comfy/teal, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"hNs" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"hNC" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "d3portnacelle" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"hNE" = ( +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/airlock) +"hNN" = ( +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"hNZ" = ( +/obj/structure/railing/mapped, +/obj/structure/closet/firecloset, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"hOi" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + req_access = newlist(); + name = "Main Warehouse" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"hOp" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"hOq" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/hallway/primary/fourthdeck/central_stairwell) +"hOu" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d1starboard) +"hOv" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/incinerator) +"hOz" = ( +/obj/structure/sign/poster{ + pixel_x = -32 + }, +/obj/structure/table, +/obj/item/stack/material/wood/walnut{ + amount = 4 + }, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"hOF" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft_stairwell) +"hOL" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/ship_map, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"hOR" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1380; + master_tag = "petrov_shuttle_airlock"; + pixel_x = -24; + pixel_y = 22 + }, +/obj/floor_decal/corner/purple, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"hOU" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/structure/table/rack, +/obj/item/wrench, +/obj/item/clothing/mask/breath, +/obj/item/tank/oxygen_emergency_extended, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"hOX" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"hPc" = ( +/obj/machinery/suit_storage_unit/medical/alt, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"hPf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1starboard) +"hPn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 5 + }, +/obj/floor_decal/corner/grey{ + dir = 10 + }, +/obj/machinery/light/small, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"hPx" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod5/station) +"hPy" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/structure/bed/chair/padded/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"hPF" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/machinery/photocopier, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"hPN" = ( +/obj/machinery/power/smes/buildable/preset/sierra/substation_full{ + RCon_tag = "Substation - Bridge Engine" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/substation/bridgedeck) +"hPP" = ( +/obj/structure/bed/chair/office/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley/backroom) +"hPR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"hPX" = ( +/obj/structure/catwalk, +/turf/simulated/open, +/area/maintenance/seconddeck/forestarboard) +"hQf" = ( +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"hQn" = ( +/turf/simulated/wall/prepainted, +/area/medical/maintenance_equipstorage) +"hQr" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"hQt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"hQy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"hQA" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"hQO" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/spray/cleaner{ + pixel_y = 5; + pixel_x = 4 + }, +/obj/item/reagent_containers/spray/sterilizine, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"hQX" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/tcommsat/chamber) +"hQZ" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/alarm/monitor/isolation{ + alarm_id = "petrov3"; + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell3) +"hRc" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"hRh" = ( +/obj/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/structure/closet/emcloset/anchored, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/central_stairwell) +"hRp" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/substation/bridgedeck) +"hRu" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/hallway/primary/seconddeck/center) +"hRz" = ( +/obj/structure/catwalk, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/exploration_shuttle/power) +"hRQ" = ( +/obj/floor_decal/corner/yellow/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hRS" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/forestarboard) +"hRT" = ( +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"hRW" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "hangar_checkpoint_shutters"; + name = "Hangar Deck Checkpoint Shutters"; + opacity = 0 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/security/sierra/dockcheck) +"hRZ" = ( +/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/machinery/pager/security{ + name = "Call Guards button"; + pixel_x = -12; + pixel_y = 22 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/fore) +"hSc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/hologram/holopad{ + pixel_y = 16; + pixel_x = -16 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"hSf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/engineering/engine_monitoring) +"hSn" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "xenobotany_access_maintaince"; + name = "Xenobotany Lab Access Console"; + pixel_y = 24; + req_access = list("ACCESS_XENOBIO","ACCESS_RESEARCH") + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"hSq" = ( +/obj/machinery/door/airlock/vault/bolted{ + autoset_access = 0; + id_tag = "medsafe_aft"; + name = "Emergency Exit" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"hSu" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/reinforced, +/area/turret_protected/ai_maint) +"hSw" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"hSx" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/storage/mirror{ + pixel_x = 26; + pixel_y = 1 + }, +/turf/simulated/floor/tiled, +/area/assembly/office) +"hSE" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/flora/pottedplant/thinbush{ + pixel_y = 10 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"hSU" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated/white, +/turf/simulated/floor/plating, +/area/vacant/infirmary) +"hTf" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/machinery/meter, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"hTi" = ( +/obj/floor_decal/techfloor/orange, +/obj/structure/bed/chair/padded/blue{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"hTm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"hTt" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin{ + pixel_y = -4 + }, +/obj/item/pen{ + pixel_y = -4 + }, +/obj/floor_decal/corner/red/half{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/button/alternate/door{ + pixel_y = 10; + id_tag = "bridge_hallway_doors_starboadr"; + name = "Bridge Hallway Doors Starboard" + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"hTu" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/circuitboard/bluespacerelay, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech/high_risk) +"hTA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/thirddeck/fore) +"hTK" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"hTN" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"hTO" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/machinery/button/blast_door{ + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Public Hallway Lockdown"; + pixel_x = -4; + req_access = list("ACCESS_MEDICAL"); + pixel_y = 4 + }, +/obj/machinery/button/blast_door{ + id_tag = "infimary_storage_lockdown"; + name = "Infirmary Storage Lockdown"; + pixel_x = 6; + pixel_y = 4; + req_access = list("ACCESS_MEDICAL") + }, +/obj/machinery/button/blast_door{ + id_tag = "infimary_window_lockdown"; + name = "Infirmary Staging lockdown"; + pixel_x = -4; + pixel_y = -6; + req_access = list("ACCESS_MEDICAL") + }, +/obj/machinery/button/blast_door{ + id_tag = "infimary_staging_lockdown"; + name = "Infirmary Critical Wing Lockdown"; + pixel_x = 6; + pixel_y = -6; + req_access = list("ACCESS_MEDICAL") + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"hTP" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"hTS" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"hTZ" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/techmaint, +/area/storage/tech/high_risk) +"hUq" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/item/toy/figure/md, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"hUv" = ( +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hUB" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/machinery/computer/ship/engines, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"hUE" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/bed/chair/padded/red{ + dir = 4 + }, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"hUG" = ( +/obj/structure/bed/sofa/l/teal{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/office) +"hUN" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"hUQ" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"hUX" = ( +/obj/machinery/door/airlock/civilian{ + id_tag = "toilet_eng_1"; + name = "Toilet"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head/deck3) +"hUZ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/forestarboard) +"hVf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/light, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftstarboard) +"hVg" = ( +/obj/machinery/computer/modular/preset/medical, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/medical/maintenance_equipstorage) +"hVh" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2, +/obj/machinery/vending/coffee{ + dir = 8 + }, +/obj/machinery/button/blast_door{ + id_tag = "qm_warehouse2"; + name = "Warehouse Door Control"; + pixel_y = -27; + req_access = list("ACCESS_CARGO"); + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"hVi" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"hVo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"hVv" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/hop) +"hVy" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "cockpit_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cockpit) +"hVE" = ( +/obj/floor_decal/corner/red{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 1; + target_pressure = 40 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"hVF" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"hVK" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hVS" = ( +/obj/structure/filingcabinet/chestdrawer{ + dir = 1 + }, +/obj/item/folder/nt, +/obj/item/folder/nt, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/assembly/office) +"hVT" = ( +/obj/floor_decal/corner/green/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"hWb" = ( +/obj/floor_decal/chapel{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"hWe" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + id_tag = "cedoor"; + name = "Chief Engineer"; + req_access = newlist(); + secured_wires = 1; + stripe_color = "#ffbf00" + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/heads/office/ce) +"hWh" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/canister) +"hWm" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"hWt" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hWB" = ( +/turf/unsimulated/mask, +/area/hallway/primary/fourthdeck/center) +"hWR" = ( +/obj/machinery/suit_storage_unit/mining, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/brown/border, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"hWW" = ( +/obj/structure/catwalk, +/turf/simulated/open, +/area/rnd/xenobiology/level1) +"hWZ" = ( +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"hXe" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown3_1" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft) +"hXj" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/engineering/atmos) +"hXn" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/assembly/robotics) +"hXo" = ( +/obj/machinery/door/airlock/command{ + id_tag = "captaindoor"; + name = "Captain"; + secured_wires = 1 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/captain) +"hXp" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/random/masks, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"hXt" = ( +/obj/machinery/air_sensor/nacelle/second/co2, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d3port) +"hXy" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/spot, +/obj/structure/sign/warning/airlock{ + pixel_y = 32 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"hXB" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"hXE" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"hXG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"hXP" = ( +/obj/machinery/atmospherics/unary/vent_pump/engine{ + dir = 8; + external_pressure_bound = 100; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "cooling_out"; + initialize_directions = 1; + pump_direction = 0; + use_power = 1 + }, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/engineering/engine_room) +"hXT" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/shuttlefuel) +"hXU" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/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/tiled/monotile, +/area/rnd/office) +"hXZ" = ( +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/plating, +/area/engineering/fuelbay) +"hYf" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"hYi" = ( +/obj/shuttle_landmark/lift/rndmaint_bottom, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"hYl" = ( +/obj/decal/cleanable/dirt, +/obj/structure/table/woodentable, +/obj/item/tape_roll{ + pixel_y = 6; + pixel_x = 5 + }, +/obj/item/reagent_containers/chem_disp_cartridge/coffee{ + pixel_y = 3; + pixel_x = -7 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/beaglemug{ + pixel_y = -5; + pixel_x = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"hYm" = ( +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"hYy" = ( +/obj/structure/bed/padded, +/turf/simulated/floor/tiled/white, +/area/vacant/infirmary) +"hYz" = ( +/obj/machinery/seed_storage/random, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"hYB" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"hYN" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"hYX" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d1port) +"hZc" = ( +/obj/structure/closet/walllocker{ + pixel_y = 28 + }, +/obj/item/storage/candle_box/scented, +/obj/structure/bed/sofa/l/lime, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/cafe/upper) +"hZf" = ( +/obj/floor_decal/corner/black/mono, +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"hZn" = ( +/turf/simulated/wall/prepainted, +/area/vacant/cargo) +"hZo" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"hZp" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/firstdeck/aft) +"hZy" = ( +/obj/machinery/vending/cigarette, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"hZF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"hZG" = ( +/obj/machinery/door/blast/regular, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/maintenance/seconddeck/hangar) +"hZK" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/purple/bordercorner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"hZL" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"hZN" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"hZQ" = ( +/obj/structure/bookcase/manuals, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"hZR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"iah" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"ian" = ( +/obj/structure/table/rack, +/obj/item/device/radio, +/obj/item/device/flashlight, +/obj/item/crowbar/red, +/obj/item/device/megaphone, +/obj/floor_decal/industrial/outline/grey, +/obj/item/device/binoculars, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"ias" = ( +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3port) +"iau" = ( +/obj/structure/largecrate, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"iaM" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"iaQ" = ( +/obj/machinery/vending/sovietsoda{ + dir = 1 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"iaT" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/glass/civilian{ + dir = 8; + name = "Hallway" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/center) +"iaX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 10 + }, +/turf/simulated/wall/r_wall/hull, +/area/engineering/engine_room) +"ibi" = ( +/obj/landmark{ + name = "xeno_spawn"; + pixel_x = -1 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/vacant/mess) +"ibt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/heads/office/cmo/cobed) +"ibv" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"ibw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"iby" = ( +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"ibC" = ( +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"ibE" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"ibF" = ( +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins/storage) +"ibG" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/corner/red/bordercee, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ibJ" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"ibQ" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "outercheckwindow"; + name = "Outer Checkpoint Shutters"; + opacity = 0 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/security/opscheck) +"ibS" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"ibU" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "burst_s" + }, +/obj/paint/red, +/obj/paint_stripe/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod7/station) +"ibW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d3port) +"ich" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/b_green/bordercorner2{ + dir = 5 + }, +/obj/structure/bed/chair/shuttle/green{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/airlock) +"ick" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"icv" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/fourthdeck/starboard) +"icw" = ( +/obj/machinery/smartfridge/foods, +/obj/machinery/door/blast/shutters{ + id_tag = "cafe"; + name = "Cafe Shutters"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"icG" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"icI" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"icR" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"icT" = ( +/obj/structure/closet/walllocker{ + pixel_y = -28 + }, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/suit/bio_suit/anomaly, +/obj/item/clothing/mask/breath, +/obj/item/clothing/head/bio_hood/anomaly, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/corner/purple/half{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"icW" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/empty, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"idc" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"idj" = ( +/obj/floor_decal/chapel{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"idk" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/industrial/danger{ + dir = 5 + }, +/obj/machinery/vending/cigarette{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"idp" = ( +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/firstdeck) +"idq" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"idr" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins/storage) +"idu" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins/storage) +"idw" = ( +/obj/structure/flora/pottedplant/flower, +/obj/floor_decal/carpet/green{ + dir = 8 + }, +/obj/floor_decal/carpet/green{ + dir = 1 + }, +/obj/floor_decal/carpet/green{ + dir = 9 + }, +/turf/simulated/floor/carpet/green, +/area/medical/mentalhealth/therapyroom) +"idA" = ( +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/space) +"idB" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"idD" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/medical{ + name = "Auxiliary Medical Storage" + }, +/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/dark/monotile, +/area/medical/equipstorage) +"idG" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/cafe) +"idH" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"idI" = ( +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 4 + }, +/obj/floor_decal/corner/black/full, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/command/bsa) +"idK" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"idQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Fore Hallway Aft"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"idY" = ( +/obj/structure/table/rack/wooden, +/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"iej" = ( +/obj/machinery/atmospherics/unary/tank/air, +/obj/floor_decal/industrial/outline/orange, +/obj/machinery/rotating_alarm/security_alarm{ + pixel_y = 13 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"iel" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/camera/network/command{ + c_tag = "Telecommunications - Control Room"; + network = list("Command","Engineering") + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"iep" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"ier" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/photocopier, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"ies" = ( +/obj/structure/closet/emcloset, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"ieu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"iew" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/external/glass/bolted/cycling{ + frequency = 1380; + id_tag = "merchant_shuttle_station_inner"; + name = "Docking Port Airlock" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"ieD" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"ieG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/maintenance/firstdeck/forestarboard) +"ieJ" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"ieR" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3port) +"ifd" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/prepainted, +/area/security/sierra/forensic) +"ife" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/machinery/light/spot, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/corner/grey/three_quarters, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"ifh" = ( +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + 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" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"ifq" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"ift" = ( +/obj/machinery/optable, +/turf/simulated/floor/tiled/white, +/area/vacant/infirmary) +"ifv" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ + dir = 4; + id_tag = "escape_pod_7"; + name = "escape pod seven controller"; + pixel_x = -20; + tag_door = "escape_pod_7_hatch"; + frequency = 1380 + }, +/obj/structure/bed/chair/shuttle{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/escape_pod/escape_pod7/station) +"ify" = ( +/obj/floor_decal/corner/red, +/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" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"ifz" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/safe_room/seconddeck) +"ifH" = ( +/obj/machinery/power/terminal, +/obj/structure/table/steel, +/obj/machinery/cell_charger, +/obj/item/cell/high{ + pixel_x = 1 + }, +/obj/item/cell/high{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/cell/high{ + pixel_x = -8; + pixel_y = 10 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"ifL" = ( +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/light/led/small{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/vending/wallbartender{ + pixel_y = 30 + }, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_y = 6 + }, +/obj/machinery/reagentgrinder/juicer{ + pixel_y = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"ifM" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/prepainted, +/area/security/range) +"igs" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/door/window/northleft{ + dir = 8; + name = "Security Sergeant's Desk"; + req_access = newlist(); + id_tag = "bo_windows" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/paint_stripe/red, +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "security_sergeant_shutters"; + name = "Warden Desk" + }, +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf/steel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/security/sierra/sergeant) +"igx" = ( +/obj/machinery/status_display, +/turf/simulated/wall/prepainted, +/area/crew_quarters/visitors) +"igy" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"igz" = ( +/obj/floor_decal/techfloor, +/obj/structure/table/standard, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/corp, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"igB" = ( +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/forestarboard) +"igE" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"igF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/wood, +/area/maintenance/firstdeck/forestarboard) +"igH" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"igN" = ( +/obj/structure/bed/chair/rounded/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"igT" = ( +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/plating, +/area/hydroponics) +"igU" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"igY" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/bed/sofa/r/brown, +/obj/floor_decal/carpet/red{ + dir = 1 + }, +/obj/floor_decal/carpet/red{ + dir = 4 + }, +/obj/floor_decal/carpet/red{ + dir = 5 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Mess Hall - Canteen - Lounge"; + dir = 8 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"ihc" = ( +/obj/random/junk, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"ihd" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/cryopod, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/central_stairwell) +"ihh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"ihl" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/structure/window/boron_reinforced, +/obj/structure/window/boron_reinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"ihs" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"ihx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 5 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/engine_room) +"ihy" = ( +/obj/item/device/camera, +/obj/item/device/camera_film, +/obj/item/bikehorn, +/obj/item/storage/candle_box, +/obj/item/device/toner, +/obj/item/device/taperecorder, +/obj/structure/closet/crate, +/obj/item/laserframe, +/obj/machinery/light, +/obj/floor_decal/spline/plain/purple{ + dir = 1 + }, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"ihA" = ( +/obj/floor_decal/industrial/danger{ + dir = 5 + }, +/obj/floor_decal/industrial/danger, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"ihM" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"ihT" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/atmos/bridge) +"ihU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"ihX" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"iia" = ( +/obj/structure/bed/chair/comfy/teal{ + dir = 4 + }, +/obj/floor_decal/borderfloorwhite{ + icon_state = "borderfloor_white"; + dir = 9 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"iib" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"iid" = ( +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/random_multi/single_item/space_rabbit, +/turf/simulated/floor/airless, +/area/solar/starboard) +"iif" = ( +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/airless, +/area/solar/starboard) +"iij" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"iim" = ( +/obj/structure/closet/walllocker{ + pixel_y = 28 + }, +/obj/item/stack/material/plasteel/ten, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/rods/fifty, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"iir" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/shutters/open{ + dir = 2; + id_tag = "infimary_locker_room_lockdown"; + name = "Infirmary Locker Room Shutters" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"iiu" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + id_tag = "observation_shielding"; + name = "Observation Shield" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/dungeon_master_lounge) +"iix" = ( +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"iiG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"iiS" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/ce/cobed) +"iiX" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/green{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"iiZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/lime/bordercorner, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"ijh" = ( +/obj/structure/table/rack, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/item/device/radio/off, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"ijj" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"ijo" = ( +/obj/structure/cart{ + dir = 4 + }, +/obj/structure/sign/warning/nosmoking_burned{ + pixel_x = -26 + }, +/obj/floor_decal/spline/plain/yellow{ + dir = 4 + }, +/obj/decal/cleanable/cobweb, +/obj/decal/cleanable/ash, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"ijv" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/green/border{ + dir = 10 + }, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft_stairwell) +"ijx" = ( +/obj/machinery/optable, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery/second) +"ijE" = ( +/obj/structure/table/steel_reinforced, +/obj/item/reagent_containers/chem_disp_cartridge/tea, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal{ + desc = "A metal tea cup. You're sure it is for tea, do not try to put coffe in."; + name = "metal tea cup"; + pixel_x = 10; + pixel_y = 6 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"ijM" = ( +/obj/machinery/shield_diffuser, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ijN" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/structure/table/standard, +/obj/machinery/reagent_temperature, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/scan) +"ijO" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck - Fore Hallway - Actors" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"ijP" = ( +/obj/floor_decal/industrial/traffic{ + dir = 4; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/rnd/office) +"ika" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar_atmos) +"ikb" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"ike" = ( +/obj/machinery/door/airlock/highsecurity{ + locked = 1; + name = "AI Core Access" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/turret_protected/ai) +"ikg" = ( +/obj/machinery/smartfridge/secure/medbay{ + req_access = list(list("ACCESS_CHEMISTRY","ACCESS_MEDICAL_EQUIP")) + }, +/obj/structure/wall_frame/standard, +/turf/simulated/floor/plating, +/area/medical/chemistry) +"iko" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ + id_tag = "escape_pod_6_berth"; + name = "escape pod six berth controller"; + pixel_x = -32; + pixel_y = 21; + tag_door = "escape_pod_6_berth_hatch"; + frequency = 1380 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"ikr" = ( +/obj/machinery/door/airlock/glass/mining{ + id_tag = null; + name = "Shuttle Fuel Bay Interior"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/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/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/shuttlefuel) +"ikx" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Fourth Deck - Dock Bay - Hallway One" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"ikB" = ( +/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/structure/disposalpipe/segment, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"ikC" = ( +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/assembly/office) +"ikH" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/bed/chair/shuttle, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ + dir = 4; + id_tag = "escape_pod_10"; + name = "escape pod ten controller"; + pixel_x = -20; + tag_door = "escape_pod_10_hatch"; + frequency = 1380 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/escape_pod/escape_pod10/station) +"ikK" = ( +/obj/floor_decal/industrial/hatch/yellow, +/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/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"ikN" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/structure/sign/warning/vacuum{ + pixel_y = 32 + }, +/turf/simulated/floor/reinforced, +/area/maintenance/incinerator) +"ile" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/barrier, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"ilr" = ( +/obj/structure/table/woodentable/mahogany, +/obj/item/storage/candle_box, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"ils" = ( +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/computer/modular/preset/civilian, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"ilt" = ( +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"ily" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/navbeacon/sierra/TD_starboard, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"ilz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/eva) +"ilB" = ( +/obj/machinery/door/blast/regular{ + id_tag = "petrovcell3"; + name = "Test Chamber Blast Doors" + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell3) +"ilO" = ( +/obj/machinery/power/port_gen/pacman{ + sheets = 25 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"ilR" = ( +/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" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"ilV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"imi" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"imm" = ( +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"imn" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/structure/bed/chair/padded/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"imr" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"ims" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/actor) +"imx" = ( +/obj/catwalk_plated/dark, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/bridge/nano) +"imA" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + id_tag = "calypso_shuttle_pump_out_internal" + }, +/obj/floor_decal/industrial/warning/full, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/exploration_shuttle/airlock) +"imE" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"imH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"imJ" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/wood, +/area/maintenance/firstdeck/forestarboard) +"imM" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"imR" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/wallframe_spawn/reinforced/hull, +/turf/simulated/floor/plating, +/area/bridge) +"imY" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/hallway/primary/firstdeck/aft_stairwell) +"ina" = ( +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"inb" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/filth, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"inh" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated/dark, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/safe_room/bridge) +"inl" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"inI" = ( +/obj/structure/closet/crate/trashcart, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"inO" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "escape_pod_2_pump" + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/grey/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod2/station) +"inQ" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/hardstorage) +"inS" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"inU" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/obj/machinery/status_display{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "escape_pod_1_pump" + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/grey/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod1/station) +"ioc" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ioi" = ( +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d1starboard) +"iok" = ( +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/blue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"ioI" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"ioU" = ( +/obj/machinery/papershredder, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"ipa" = ( +/obj/structure/bed/sofa/r/black, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Lounge - Library" + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"ipg" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/machinery/atm{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"ipj" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"ipo" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"ipp" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"ipu" = ( +/obj/machinery/camera/network/research{ + c_tag = "Research - Misc. Test Chamber"; + network = list("Research","Miscellaneous Reseach") + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"ipR" = ( +/obj/paint_stripe/yellow, +/obj/paint/dark_gunmetal, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5; + icon_state = "intact" + }, +/turf/simulated/wall/r_titanium, +/area/guppy_hangar/start) +"ipU" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"ipX" = ( +/obj/machinery/atmospherics/unary/heater{ + dir = 4 + }, +/obj/floor_decal/corner/green/half{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"ipZ" = ( +/obj/machinery/door/airlock/glass/command{ + autoset_access = 0; + dir = 4; + name = "Primary Docking Port Control"; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"iqa" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"iqb" = ( +/obj/structure/undies_wardrobe, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sleep/bunk) +"iqc" = ( +/obj/machinery/door/airlock/research{ + name = "Equipment Storage" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/equipment) +"iqg" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/bed/sauna_bench/middle/north, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sauna) +"iqj" = ( +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/obj/floor_decal/carpet/purple{ + dir = 5 + }, +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/lava/purple{ + pixel_y = 5; + pixel_x = -8 + }, +/obj/item/storage/secure/safe{ + pixel_x = 32 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/office/rd/cobed) +"iql" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/central_stairwell) +"iqx" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/access_button/airlock_exterior{ + pixel_y = -24; + master_tag = "solar_bridge_port_airlock"; + pixel_x = -26 + }, +/turf/simulated/floor, +/area/solar/bridge_port) +"iqy" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"iqA" = ( +/obj/structure/table/rack/dark, +/obj/item/stack/material/ocp/ten, +/obj/item/stack/material/ocp/ten, +/obj/item/stack/material/plasteel/fifty, +/obj/structure/railing/mapped, +/obj/floor_decal/spline/plain/black, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"iqH" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"iqL" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"iqM" = ( +/obj/structure/table/rack, +/obj/item/device/flashlight, +/obj/item/device/radio, +/obj/item/crowbar, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"iqR" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/virology/lab) +"irc" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"irx" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/bed/padded, +/obj/item/bedsheet/orange, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/bunk) +"irA" = ( +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"irD" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"irE" = ( +/obj/structure/table/glass, +/obj/machinery/keycard_auth/sierra, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"irG" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/bluespace/chamber) +"irS" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "eng4_inner"; + name = "First Deck Port Nacelle Access" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/thruster/d1port) +"irV" = ( +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/glass, +/obj/structure/fireaxecabinet{ + dir = 4; + pixel_y = 30 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"irZ" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lightgrey/border, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"isi" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"isq" = ( +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/corner, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"isu" = ( +/turf/simulated/wall/prepainted, +/area/assembly/office) +"isv" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "mining_internal"; + name = "mining conveyor" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar) +"isx" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"isA" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/phoron, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"isH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"isJ" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"isN" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/exploration/eva) +"isX" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"isY" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/bed/sofa/m/brown, +/obj/floor_decal/carpet{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/cafe/upper) +"isZ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "observation_shielding"; + name = "Observation Shield" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/dungeon_master_lounge) +"iti" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/handrail{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"itj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"itm" = ( +/obj/floor_decal/ntlogo, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"itA" = ( +/obj/item/stack/tile/floor{ + pixel_y = -12; + pixel_x = -7 + }, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"itC" = ( +/obj/structure/bed/chair/office/green, +/turf/simulated/floor/plating, +/area/medical/virology/lab) +"itG" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/titanium, +/area/shuttle/petrov/test_room) +"itJ" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"itQ" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "xenobioaqua"; + name = "Containment Blast Doors" + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/water_cell) +"iud" = ( +/obj/floor_decal/corner/research/mono, +/obj/machinery/computer/robotics{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"iue" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/lime/border, +/obj/structure/curtain/medical, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"iui" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/machinery/camera/network/hangar, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"iul" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"ius" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/catwalk_plated/white, +/turf/simulated/floor/plating, +/area/vacant/infirmary) +"iuu" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/navbeacon/sierra/FD_afthallway1, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"iuv" = ( +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"iuB" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation/second) +"iuE" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/sergeant) +"iuK" = ( +/obj/structure/bed/chair/office/purple{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"iuS" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/prepainted, +/area/security/sierra/equipment) +"iuW" = ( +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "cChamber4pV"; + name = "Chamber Vent" + }, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d1port) +"iuZ" = ( +/obj/machinery/power/apc/high{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/green, +/obj/structure/curtain/open/bed, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"ivb" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"ivd" = ( +/obj/machinery/door/blast/regular{ + id_tag = "d4portnacelle" + }, +/obj/machinery/atmospherics/valve/digital{ + id_tag = "RE4F"; + name = "RE4 digital valve" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"ivl" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/foreport) +"ivu" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/sign/warning/radioactive{ + dir = 4; + pixel_x = -32 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for engine core."; + dir = 4; + id_tag = "gravgen-antirad-shielding"; + name = "Gravitational Generator Radiation Shielding Control"; + pixel_x = -21; + pixel_y = 10 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/machinery/power/apc/high{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"ivv" = ( +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + id_tag = "guppy_shuttle_pump_out_external" + }, +/obj/machinery/airlock_sensor/airlock_exterior{ + frequency = 1331; + id_tag = "guppy_shuttle_exterior_sensor"; + master_tag = "guppy_shuttle"; + pixel_x = 25; + pixel_y = -24 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"ivw" = ( +/obj/structure/closet/secure_closet/chemical, +/turf/simulated/floor/tiled/white, +/area/vacant/infirmary) +"ivz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"ivB" = ( +/turf/simulated/wall/prepainted, +/area/rnd/storage) +"ivC" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/landmark{ + name = "JoinLateCyborg" + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"ivD" = ( +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"ivJ" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "briefing_windows" + }, +/turf/simulated/floor/plating, +/area/bridge/marine_room) +"ivL" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway/aft) +"ivM" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_eva) +"ivP" = ( +/obj/machinery/photocopier, +/obj/floor_decal/corner/yellow/half{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"ivT" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/photocopier/faxmachine{ + department = "Warden" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"ivW" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"iwf" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/b_green/border, +/obj/machinery/cell_charger, +/obj/structure/table/steel, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/seats_place) +"iwh" = ( +/obj/machinery/reagentgrinder, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/equipment) +"iwi" = ( +/obj/machinery/power/smes/buildable/preset/patrol/engine_gyrotron, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"iwk" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"iwz" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"iwE" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/firstdeck) +"iwY" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/orange, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/bunk) +"iwZ" = ( +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/machinery/computer/cryopod{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/bridge) +"ixb" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/structure/table/standard, +/obj/random/tool, +/obj/item/storage/toolbox/mechanical, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"ixc" = ( +/obj/paint_stripe/nt_red, +/obj/paint/nt_white, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod11/station) +"ixd" = ( +/obj/floor_decal/industrial/outline/red, +/obj/structure/ship_munition/disperser_charge/fire, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/command/bsa) +"ixk" = ( +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/sign/directions/supply{ + dir = 4; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/hallway/primary/fourthdeck/central_stairwell) +"ixu" = ( +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen{ + pixel_x = -1 + }, +/obj/item/folder/red, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/corner/black/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation) +"ixA" = ( +/obj/floor_decal/corner/green/border{ + dir = 10 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ixH" = ( +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ixK" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/closet/firecloset, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/security/brig) +"ixM" = ( +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/red/bordercorner, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"ixQ" = ( +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"ixU" = ( +/obj/wallframe_spawn/reinforced/polarized/full{ + id = "bridge_windows" + }, +/obj/structure/cable/green, +/turf/simulated/floor/plating, +/area/bridge) +"iyb" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + id_tag = "xenobio1"; + name = "Containment Blast Doors" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level1) +"iyd" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 4; + target_pressure = 200 + }, +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/bridge_starboard) +"iyi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/obj/machinery/power/terminal, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Substation - Second Deck" + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/seconddeck) +"iyk" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/blue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"iyn" = ( +/obj/machinery/light_switch{ + pixel_x = 21; + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/stool/wood, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/breakroom) +"iyp" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/cooker/fryer, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"iyv" = ( +/obj/floor_decal/corner/darkblue/half, +/obj/floor_decal/corner/darkblue{ + dir = 5 + }, +/obj/structure/holoplant, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"iyx" = ( +/obj/structure/ladder, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/seconddeck/foreport) +"iyA" = ( +/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/door/airlock/research{ + dir = 4; + name = "RND - Servers"; + secured_wires = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/servers) +"iyB" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/compactor) +"iyC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"iyF" = ( +/obj/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/generic{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/docking) +"iyG" = ( +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"iyO" = ( +/obj/machinery/disposal, +/obj/item/mop, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"iyZ" = ( +/obj/machinery/papershredder, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/mauve/border{ + dir = 8 + }, +/obj/machinery/camera/network/expedition{ + c_tag = "Expedition - Leader"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"izf" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/computer/ship/navigation{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"izh" = ( +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"izi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"izj" = ( +/obj/machinery/vending/cola{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/fore) +"izk" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "Mail" + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"izl" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"izp" = ( +/obj/machinery/honey_extractor, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/machinery/light/spot, +/obj/structure/cable/green, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics/third_deck_storage) +"izs" = ( +/obj/machinery/computer/air_control{ + dir = 1; + frequency = 1441; + input_tag = "waste_in"; + name = "Waste Tank Control"; + output_tag = "waste_out"; + sensor_name = "Waste Tank"; + sensor_tag = "waste_sensor" + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"izt" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/turf/simulated/floor/wood/yew, +/area/crew_quarters/heads/office/ce/cobed) +"izv" = ( +/obj/structure/rubble/war, +/obj/structure/rubble/war, +/obj/fluid_mapped, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"izz" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/obj/structure/sign/directions/security{ + pixel_y = -24; + pixel_x = 32 + }, +/obj/structure/sign/directions/infirmary{ + pixel_y = -31; + pixel_x = 32 + }, +/obj/structure/sign/directions/science{ + pixel_y = -38; + pixel_x = 32 + }, +/obj/machinery/camera/network/second_deck{ + dir = 8; + c_tag = "Second Deck - Aft Stairwell" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft_stairwell) +"izE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/corner/grey/border, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"izW" = ( +/obj/structure/bed/sofa/l/red{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"iAj" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/aft) +"iAm" = ( +/obj/structure/catwalk, +/obj/structure/sign/warning/hot_exhaust{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/open, +/area/space) +"iAq" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/seconddeck/starboard) +"iAt" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor, +/area/solar/bridge_starboard) +"iAD" = ( +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_staging_lockdown"; + name = "Infirmary Staging Shutters" + }, +/obj/wallframe_spawn/reinforced/polarized/full{ + id = "infimary_staging" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/medical/sleeper) +"iAP" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/obj/structure/closet/medical_wall/filled{ + pixel_x = 32 + }, +/obj/random/firstaid, +/obj/random/medical, +/obj/random/medical, +/obj/random/medical, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"iAQ" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/infirmreception) +"iAT" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/open, +/area/maintenance/seconddeck/aftstarboard) +"iAW" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/structure/bed/chair/padded/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"iBa" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/green/bordercorner, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"iBd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 6 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3starboard) +"iBl" = ( +/obj/floor_decal/corner/yellow/three_quarters{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/item/storage/firstaid/regular{ + pixel_y = 7 + }, +/obj/item/storage/toolbox/mechanical, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"iBt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"iBu" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs) +"iBA" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"iBB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/valve/shutoff/supply, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"iBH" = ( +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"iBI" = ( +/obj/floor_decal/industrial/warning, +/obj/machinery/camera/network/command{ + c_tag = "Command - Vault"; + dir = 8 + }, +/turf/simulated/floor/selfestructgrid, +/area/security/nuke_storage) +"iBJ" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/hangar_atmos) +"iBN" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"iBO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/selfestructgrid, +/area/security/nuke_storage) +"iBT" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"iBZ" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/table/woodentable/maple, +/obj/item/reagent_containers/food/condiment/small/packet/sugar{ + pixel_y = 3; + pixel_x = 8 + }, +/obj/item/reagent_containers/food/condiment/small/packet/sugar{ + pixel_x = 8; + pixel_y = -1 + }, +/obj/item/reagent_containers/food/condiment/small/packet/sugar{ + pixel_y = -5; + pixel_x = 8 + }, +/obj/item/reagent_containers/food/drinks/pitcher{ + pixel_y = 5; + pixel_x = -3 + }, +/obj/machinery/reagent_temperature{ + pixel_x = -3 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"iCa" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"iCf" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"iCg" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/vacant/cargo) +"iCj" = ( +/obj/shuttle_landmark/ninja/deck1, +/turf/space, +/area/space) +"iCD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"iCF" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/rnd/development) +"iCK" = ( +/obj/floor_decal/steeldecal/steel_decals_central7, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"iCS" = ( +/obj/decal/cleanable/dirt, +/obj/structure/synthesized_instrument/synthesizer/piano, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"iDb" = ( +/obj/machinery/computer/modular/preset/medical{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"iDf" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 8 + }, +/obj/structure/sign/botany{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"iDj" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"iDl" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/waterstore) +"iDo" = ( +/obj/machinery/atmospherics/valve/shutoff/fuel{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/engineering/fuelbay) +"iDp" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"iDr" = ( +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/obj/structure/table/standard, +/obj/item/stamp/denied{ + pixel_x = 4; + pixel_y = -2 + }, +/obj/item/stamp/cargo{ + name = "supply rubber stamp" + }, +/obj/floor_decal/corner/yellow/half{ + dir = 1 + }, +/obj/item/device/eftpos{ + pixel_y = 11; + pixel_x = -7 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"iDB" = ( +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"iDE" = ( +/obj/structure/window/basic, +/obj/machinery/door/window{ + autoset_access = 0; + dir = 4 + }, +/obj/structure/curtain/open/privacy, +/obj/item/stool/padded, +/obj/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"iDK" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light, +/obj/floor_decal/corner/grey/border{ + dir = 5 + }, +/obj/machinery/vending/lavatory{ + dir = 1 + }, +/turf/simulated/floor/tiled/old_tile, +/area/crew_quarters/head) +"iDP" = ( +/obj/structure/largecrate, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"iDU" = ( +/obj/structure/mattress, +/turf/simulated/floor/tiled, +/area/maintenance/firstdeck/aftstarboard) +"iEb" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/ship_munition/disperser_charge/explosive, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/command/bsa) +"iEl" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/mauve/border, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"iEm" = ( +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"iEq" = ( +/obj/floor_decal/industrial/outline/red, +/obj/structure/ship_munition/disperser_charge/fire, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/command/bsa) +"iEt" = ( +/obj/floor_decal/corner/grey{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/computer/air_control{ + input_tag = "CO22p_in"; + name = "Propellent Supply Control"; + output_tag = "CO22p_out"; + sensor_name = "Tank"; + sensor_tag = "ReacEngCO22" + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"iEv" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/multi_tile/maintenance, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/starboard) +"iEy" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"iEB" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"iEJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"iEL" = ( +/obj/item/device/radio/intercom/locked/ai_private{ + pixel_y = 22 + }, +/turf/simulated/floor/reinforced, +/area/turret_protected/ai_maint) +"iEY" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/gas) +"iFe" = ( +/obj/structure/table/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/darkblue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"iFo" = ( +/obj/floor_decal/techfloor/orange{ + dir = 10 + }, +/obj/machinery/sleeper/survival_pod{ + dir = 1 + }, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 1; + pixel_y = -13 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"iFx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"iFD" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/machinery/vending/soda{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"iFF" = ( +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/lime/bordercorner, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"iFH" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"iFP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/crystal, +/area/crew_quarters/adherent) +"iGb" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance, +/obj/random/gloves, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"iGf" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"iGg" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/green/border{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"iGi" = ( +/obj/machinery/pointdefense_control{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"iGl" = ( +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"iGm" = ( +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"iGp" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"iGv" = ( +/obj/structure/closet/crate/critter, +/obj/item/device/scanner/health, +/obj/item/device/scanner/gas, +/obj/item/device/scanner/mining, +/obj/item/autopsy_scanner, +/obj/item/device/scanner/plant, +/obj/item/device/scanner/price, +/obj/item/device/scanner/xenobio, +/obj/item/device/t_scanner, +/obj/item/device/gps, +/obj/item/device/gps, +/obj/floor_decal/spline/plain/purple{ + dir = 9 + }, +/obj/machinery/camera/network/supply{ + c_tag = "Supply Office - Warehouse - Shutters"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"iGy" = ( +/obj/machinery/door/airlock/research{ + dir = 4; + name = "RND - Servers"; + secured_wires = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/servers) +"iGA" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"iGE" = ( +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"iGS" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/center) +"iGV" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"iGY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"iGZ" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"iHc" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"iHg" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"iHh" = ( +/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 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"iHn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 5 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/incinerator) +"iHt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"iHw" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"iHy" = ( +/obj/structure/curtain/open/shower, +/obj/machinery/door/window{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head) +"iHA" = ( +/obj/structure/hygiene/shower{ + pixel_y = 15 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/xenoflora) +"iHF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"iHT" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/light, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"iHU" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/paint_stripe/red, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced/polarized{ + id = "forensicswindow" + }, +/turf/simulated/floor/plating, +/area/security/sierra/forensic) +"iHX" = ( +/obj/structure/bed/chair/shuttle{ + dir = 1 + }, +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/escape_pod/escape_pod6/station) +"iIc" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/quartermaster/hangar/upper) +"iIe" = ( +/obj/floor_decal/corner/black/border{ + dir = 9 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"iIk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"iIm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/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/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"iIp" = ( +/obj/item/stack/tile/floor{ + pixel_y = 4; + pixel_x = 3 + }, +/obj/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"iIr" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"iIz" = ( +/obj/machinery/door/window/westright{ + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/door/window/eastleft{ + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "xenobio1"; + name = "Containment Blast Doors" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"iIA" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/red, +/obj/structure/curtain/open/bed, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/landmark/start{ + name = "Internal Affairs Agent" + }, +/obj/item/storage/secure/safe{ + pixel_y = 32 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/iaa/cobed) +"iIC" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"iIE" = ( +/obj/structure/railing/mapped, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"iIF" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"iIJ" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"iIK" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"iJh" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"iJi" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "mining_internal" + }, +/turf/simulated/floor, +/area/quartermaster/hangar) +"iJp" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"iJr" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"iJE" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/papershredder, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"iJH" = ( +/obj/decal/cleanable/dirt, +/obj/floor_decal/spline/fancy/wood/corner, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"iJK" = ( +/obj/machinery/atmospherics/valve/shutoff/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"iJL" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/green/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics/third_deck_storage) +"iJM" = ( +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"iJQ" = ( +/obj/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/splatter, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/foreport) +"iJU" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"iKb" = ( +/obj/structure/flora/seaweed/glow, +/obj/fluid_mapped, +/mob/living/simple_animal/aquatic/fish, +/turf/simulated/floor/beach/sand, +/area/rnd/xenobiology/level2) +"iKf" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/stock_parts/circuitboard/robotics, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech/high_risk) +"iKi" = ( +/obj/structure/catwalk, +/obj/structure/sign/warning/moving_parts{ + dir = 8; + pixel_x = 34 + }, +/obj/structure/railing/mapped, +/obj/machinery/conveyor_switch/oneway{ + id = "charon_cargo_in"; + name = "charon external conveyor switch"; + pixel_x = 10; + pixel_y = 15 + }, +/turf/simulated/floor/reinforced, +/area/exploration_shuttle/airlock) +"iKj" = ( +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"iKp" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"iKs" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"iKt" = ( +/obj/structure/bed/chair/comfy/teal{ + dir = 4 + }, +/obj/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"iKu" = ( +/obj/machinery/door/window/brigdoor/westleft{ + id_tag = "iaaright"; + req_access = newlist() + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"iKw" = ( +/obj/floor_decal/industrial/warning/full, +/obj/machinery/airlock_sensor/airlock_exterior{ + frequency = 1331; + id_tag = "calypso_shuttle_exterior_sensor"; + master_tag = "calypso_shuttle"; + pixel_x = -2; + pixel_y = 27; + req_access = list("ACCESS_EXPEDITION_SHUTTLE") + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + id_tag = "calypso_shuttle_pump_out_external" + }, +/obj/structure/catwalk, +/turf/simulated/floor/reinforced, +/area/exploration_shuttle/airlock) +"iKy" = ( +/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/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"iKC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"iKK" = ( +/obj/structure/cable/green{ + 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/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/ladder/up, +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/disposalpipe/up{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"iKQ" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/fabricator, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Hard Storage" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"iKU" = ( +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "d2portnacelle" + }, +/obj/machinery/atmospherics/valve/digital{ + id_tag = "RE2F"; + name = "RE2F digital valve" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"iLc" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"iLd" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/closet/crate/secure/biohazard, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"iLh" = ( +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/obj/random/junkfood, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"iLG" = ( +/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/dark, +/area/bridge/hallway) +"iLJ" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"iLM" = ( +/obj/structure/dispenser/oxygen, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/suits) +"iLO" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/lightgrey/bordercorner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"iLZ" = ( +/obj/machinery/air_sensor/nacelle/third/plasma, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d1starboard) +"iMa" = ( +/turf/simulated/wall/prepainted{ + can_open = 1 + }, +/area/maintenance/firstdeck/foreport) +"iMf" = ( +/obj/structure/railing/mapped, +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"iMg" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/thirddeck/aftport) +"iMh" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "ai_starboard_inner"; + name = "Engineering External Access" + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftport) +"iMi" = ( +/obj/floor_decal/industrial/traffic, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"iMo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/button/ignition{ + id_tag = "Isocell3"; + pixel_x = -6; + pixel_y = -25 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"iMs" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"iMu" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/vending/cigarette, +/obj/machinery/rotating_alarm/security_alarm{ + pixel_y = 13 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"iMx" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"iMy" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"iMB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"iMF" = ( +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/glass, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"iMM" = ( +/obj/machinery/door/airlock/security{ + autoset_access = 0; + name = "Escape Pod Cell"; + req_access = list("ACCESS_BRIG") + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod5/station) +"iMO" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"iMS" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"iMW" = ( +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge/upper) +"iMY" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/machinery/status_display{ + pixel_x = 32; + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"iNb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/machinery/light_switch{ + pixel_x = 24; + dir = 8; + pixel_y = -5 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"iNd" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance{ + name = "EVA Maintenance"; + req_access = newlist() + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"iNg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/selfestructgrid, +/area/security/nuke_storage) +"iNj" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"iNm" = ( +/obj/random/obstruction, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"iNo" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"iNp" = ( +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/obj/item/paper/sierra/engineering_SMairlock, +/obj/machinery/access_button/airlock_exterior{ + master_tag = "engine_airlock"; + name = "Cycle to Engineering"; + pixel_x = -24; + pixel_y = 24 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"iNv" = ( +/obj/structure/table/standard, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/powercell, +/obj/machinery/cell_charger, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/spline/plain/purple{ + dir = 5 + }, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"iNw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/hologram/holopad, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/nuke_storage) +"iNG" = ( +/obj/shuttle_landmark/supply/station, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"iNH" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"iNN" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/industrial/danger/corner, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft_stairwell) +"iNW" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d1port) +"iOb" = ( +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/reinforced, +/area/solar/bridge_port) +"iOc" = ( +/obj/structure/table/steel, +/obj/structure/sign/warning/nosmoking_1{ + dir = 8; + pixel_x = 32 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/cell_charger, +/obj/item/cell/high, +/obj/random/powercell, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/shuttlefuel) +"iOj" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/structure/sign/warning/vacuum{ + dir = 8 + }, +/turf/simulated/wall/r_wall/hull, +/area/engineering/engine_room) +"iOl" = ( +/obj/structure/closet/crate/secure/biohazard{ + req_access = list(list("ACCESS_RESEARCH","ACCESS_EXPLORER")) + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"iOt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/center) +"iOu" = ( +/obj/machinery/atmospherics/unary/tank{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"iOw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"iOx" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"iOy" = ( +/obj/structure/table/standard, +/obj/item/book/manual/ripley_build_and_repair, +/obj/item/book/manual/robotics_cyborgs, +/obj/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled, +/area/assembly/office) +"iOE" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"iOH" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/down, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/maintenance/firstdeck/centralstarboard) +"iOJ" = ( +/obj/item/bodybag, +/obj/structure/table/standard, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/item/storage/box/autoinjectors, +/turf/simulated/floor/tiled/white, +/area/vacant/infirmary) +"iOP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/central_stairwell) +"iPd" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"iPj" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"iPk" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/module/power_control, +/obj/item/module/power_control, +/obj/item/module/power_control, +/obj/item/airlock_electronics, +/obj/item/airlock_electronics, +/obj/item/airlock_electronics, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech) +"iPl" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/auxpower) +"iPp" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1port) +"iPs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"iPw" = ( +/obj/machinery/newscaster/security_unit{ + pixel_x = 26; + pixel_y = 2 + }, +/obj/structure/flora/pottedplant/stoutbush, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"iPB" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/space) +"iPQ" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/office) +"iPW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "shower2"; + name = "Lock"; + pixel_y = 21 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"iPZ" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "iaaleft" + }, +/obj/structure/filingcabinet{ + pixel_x = 5 + }, +/obj/structure/filingcabinet{ + pixel_x = -6 + }, +/obj/machinery/button/alternate/door{ + desc = "A remote control-switch for the office door."; + id_tag = "iaadoorleft"; + name = "Office Door Control"; + pixel_y = 24; + req_access = list("ACCESS_IAA"); + pixel_x = -5 + }, +/obj/machinery/button/windowtint{ + id = "iaaleft"; + pixel_x = 5; + pixel_y = 24 + }, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/floor_decal/carpet/blue{ + dir = 4 + }, +/obj/floor_decal/carpet/blue{ + dir = 1 + }, +/obj/floor_decal/carpet/blue{ + dir = 5 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"iQc" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "sd_port_pump" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"iQd" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lightgrey/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lightgrey/bordercorner2, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"iQe" = ( +/obj/floor_decal/techfloor/orange, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"iQh" = ( +/obj/machinery/photocopier/faxmachine{ + department = "Research Director's Office" + }, +/obj/item/book/manual/nt_regs, +/obj/structure/table/glass/boron, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"iQl" = ( +/obj/floor_decal/industrial/danger/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/armory) +"iQn" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/space) +"iQp" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/security{ + name = "Break Room" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/range) +"iQy" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/oxygen_pump{ + pixel_y = -32 + }, +/obj/structure/closet/hydrant{ + pixel_x = 28 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"iQz" = ( +/obj/structure/filingcabinet/chestdrawer{ + dir = 1 + }, +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"iQB" = ( +/turf/simulated/wall/r_wall/hull, +/area/turret_protected/ai_upload) +"iQF" = ( +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"iQG" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/infirmreception) +"iQH" = ( +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"iQR" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/iv_stand, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/staging) +"iQS" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/glass/civilian{ + name = "Bartenders'"; + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/spline/fancy/black, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/grey, +/obj/structure/curtain/open/shower/security{ + name = "bar curtain" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/bar) +"iQX" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"iQY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/closet/l3closet/scientist, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/xenobio) +"iRb" = ( +/obj/floor_decal/corner/black/full, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"iRg" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/hallway/primary/seconddeck/fore) +"iRm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 6 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"iRr" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/heads/captain/secret_room/level_one) +"iRu" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"iRv" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/prepainted, +/area/security/sierra/sergeant) +"iRA" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"iRB" = ( +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cargo_r) +"iRD" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/floor_decal/corner/green/border, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"iRF" = ( +/obj/floor_decal/corner/darkblue/full, +/obj/floor_decal/corner/black/three_quarters, +/obj/structure/table/steel_reinforced, +/obj/item/device/taperecorder, +/obj/item/device/tape, +/obj/item/device/tape, +/obj/item/device/tape, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"iRI" = ( +/obj/machinery/power/breakerbox{ + RCon_tag = "Shield Substation Bypass" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/shield/thirddeck) +"iRR" = ( +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/curtain/bed{ + pixel_y = 32 + }, +/obj/item/reagent_containers/food/drinks/bottle/premiumvodka{ + pixel_y = 4; + pixel_x = -6 + }, +/obj/item/reagent_containers/food/drinks/glass2/shot{ + pixel_y = 9; + pixel_x = 7 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/heads/office/rd/cobed) +"iSd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"iSe" = ( +/obj/floor_decal/corner/blue{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"iSn" = ( +/obj/machinery/crusher_base{ + icon_state = "middle" + }, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"iSy" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"iSK" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"iSR" = ( +/obj/structure/railing/mapped{ + dir = 8; + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/floor_decal/corner/purple/half{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"iSW" = ( +/obj/structure/lattice, +/obj/structure/handrail{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/open, +/area/space) +"iSY" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"iSZ" = ( +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/photocopier, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"iTa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/bed/sofa/r/red{ + dir = 8 + }, +/obj/machinery/light, +/turf/simulated/floor/carpet/magenta, +/area/crew_quarters/cafe) +"iTh" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/thruster/d1port) +"iTl" = ( +/obj/structure/closet/secure_closet/CMO_sierra, +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"iTp" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor/hole{ + dir = 8 + }, +/obj/machinery/shieldgen, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"iTq" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"iTv" = ( +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"iTy" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"iTz" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/red/bordercorner2, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"iTD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/machinery/navbeacon/sierra/TD_fore9, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"iTH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/office) +"iTM" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/mining{ + dir = 8; + id_tag = null; + name = "Hangar Bay"; + req_access = newlist() + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown3_1" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/aft) +"iTQ" = ( +/obj/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled, +/area/assembly/office) +"iTR" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/quartermaster/exploration/briefing_room) +"iTX" = ( +/obj/structure/bed/chair/padded/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"iTZ" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"iUf" = ( +/obj/structure/closet/secure_closet/medical1, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/medbay{ + c_tag = "Equipment - First Aid"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/equipstorage) +"iUm" = ( +/obj/machinery/light/small, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -21 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/hardstorage) +"iUA" = ( +/obj/structure/table/rack, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/towel/random{ + pixel_y = -4; + pixel_x = -5 + }, +/obj/item/towel/random{ + pixel_y = -4; + pixel_x = -5 + }, +/obj/item/towel/random{ + pixel_y = -4; + pixel_x = -5 + }, +/obj/item/towel/random{ + pixel_y = -4; + pixel_x = -5 + }, +/obj/item/towel/random{ + pixel_y = -4; + pixel_x = -5 + }, +/obj/floor_decal/corner/green/border{ + dir = 9 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/sauna) +"iUC" = ( +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/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/techfloor, +/area/security/sierra/armory/lobby) +"iUN" = ( +/obj/floor_decal/corner/green/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"iUO" = ( +/obj/machinery/status_display{ + pixel_y = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/structure/filingcabinet, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/structure/sign/poster{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"iVd" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"iVe" = ( +/obj/machinery/chem_master, +/obj/floor_decal/corner/beige/three_quarters{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"iVf" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"iVg" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced/polarized/full{ + id = "mental_health_windows" + }, +/turf/simulated/floor/plating, +/area/medical/mentalhealth) +"iVs" = ( +/obj/machinery/door/airlock/engineering{ + name = "SMES Maintenance"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Master Grid"; + name_tag = "Master" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/blast/regular/open{ + dir = 8; + id_tag = "eng_lockdown_emg3"; + name = "Emergency Exit" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_smes) +"iVt" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"iVA" = ( +/obj/floor_decal/corner/black/three_quarters{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"iVJ" = ( +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"iVK" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"iVN" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/fourthdeck/central_stairwell) +"iVQ" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8; + in_use = 0 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"iVR" = ( +/obj/structure/stairs/east, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"iVV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"iVZ" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/wallframe_spawn/reinforced/polarized/full{ + id = "rd_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/rd) +"iWe" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod1/station) +"iWf" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/r_wall/prepainted, +/area/quartermaster/expedition/storage) +"iWp" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"iWs" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"iWt" = ( +/obj/structure/table/woodentable/mahogany, +/obj/item/storage/bible/bible, +/obj/item/storage/bible/bible, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"iWB" = ( +/obj/machinery/body_scanconsole{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/maintenance_equipstorage) +"iWD" = ( +/obj/machinery/space_heater, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"iWF" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"iWG" = ( +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_5_hatch"; + name = "Escape Pod Five Hatch" + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod5/station) +"iWK" = ( +/obj/machinery/computer/modular/preset/civilian, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"iWM" = ( +/obj/structure/holoplant, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/lime/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 6 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck - Fore Hallway - Mantenance"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"iWV" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/bridgedeck/aft) +"iWX" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 5 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"iXp" = ( +/obj/structure/bed/chair/padded/blue, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"iXz" = ( +/obj/structure/flora/seaweed, +/obj/fluid_mapped, +/mob/living/simple_animal/aquatic/fish/grump, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/beach/sand, +/area/rnd/xenobiology/level2) +"iXA" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"iXM" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/captain/beach) +"iXS" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/oxygen_pump{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "xenobotany_access"; + name = "Xenobotany Lab Access Console"; + req_access = list("ACCESS_XENOBIO","ACCESS_RESEARCH"); + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"iYa" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/valve/shutoff/supply, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"iYp" = ( +/turf/simulated/wall/r_wall/hull, +/area/bridge) +"iYx" = ( +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"iYy" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"iYD" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"iYE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/cistern) +"iYI" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/engineering/engine_eva) +"iYR" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/wood{ + icon_state = "wood_broken5" + }, +/area/vacant/sauna) +"iYT" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"iYZ" = ( +/obj/machinery/computer/fusion/fuel_control{ + dir = 4; + initial_id_tag = "aux_fusion_plant"; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"iZc" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"iZg" = ( +/obj/structure/catwalk, +/obj/structure/ladder/up, +/turf/simulated/floor/airless, +/area/space) +"iZs" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"iZu" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/structure/closet/secure_closet/warden/sierra, +/obj/item/device/scanner/price, +/obj/item/device/eftpos{ + eftpos_name = "Warden's EFTPOS scanner" + }, +/obj/item/device/radio/off, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"iZx" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/grey/border, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"iZP" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/engineering/engine_eva) +"iZZ" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atm{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"jac" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/equipment) +"jal" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/paint_stripe/red, +/obj/wallframe_spawn/reinforced/polarized{ + id = "hos_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/hos) +"jan" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"jaq" = ( +/obj/machinery/papershredder, +/obj/floor_decal/corner/black/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"jar" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"jav" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"jay" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/south) +"jaJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"jaO" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/atmos/bridge) +"jaU" = ( +/obj/structure/girder/displaced, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"jaZ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"jbe" = ( +/obj/machinery/door/airlock/glass/civilian{ + name = "Primary Tool Storage" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"jbr" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"jbw" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "d2portnacelle" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"jbH" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell1) +"jbJ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"jbK" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/floodlight{ + dir = 8 + }, +/obj/structure/sign/emergonly{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"jbN" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/carpet, +/area/crew_quarters/cafe/upper) +"jbO" = ( +/obj/catwalk_plated/dark, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/bridge/nano) +"jbQ" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"jce" = ( +/obj/floor_decal/industrial/danger, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"jcg" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/heads/captain/secret_room/level_one) +"jcn" = ( +/obj/machinery/photocopier, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Captain's Desk"; + departmentType = 5; + name = "Captain RC"; + pixel_y = 30 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"jcy" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/steel, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"jcz" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/random/maintenance, +/obj/random/trash, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"jcA" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"jcE" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/random/vendor, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"jcJ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"jcL" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/bed/chair/pew, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/actor/stage) +"jcM" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/bridgedeck/starboard) +"jcU" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/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/door/firedoor, +/obj/machinery/door/airlock/research{ + id_tag = "xenohight_airlock_inner"; + name = "Xenobiology External Airlock"; + frequency = 1379; + locked = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/xenobiology/entry) +"jdc" = ( +/obj/structure/closet/fridge, +/obj/structure/window/basic{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/galley/freezer) +"jdd" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/lime/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/coffee, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"jdg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace/chamber) +"jdm" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/medical/virology/lab) +"jdy" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"jdC" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/flora/pottedplant/decorative, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"jdD" = ( +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"jdW" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/railing/mapped, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"jdX" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"jdY" = ( +/obj/machinery/door/airlock/multi_tile/research{ + dir = 8; + frequency = 1379; + id_tag = "xenolow_airlock_inner"; + locked = 1; + name = "Xenobiology Internal Airlock" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/xenobiology/entry2) +"jee" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/hallway/primary/fourthdeck/central_stairwell) +"jej" = ( +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"jes" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"jev" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"jey" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/mechanical, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/equipment) +"jeH" = ( +/obj/structure/bed/sofa/l/black{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/bridge/adjutants) +"jeK" = ( +/obj/structure/morgue{ + dir = 2 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/closet/walllocker{ + pixel_y = 28 + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Medbay - Morgue - Cadavers" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"jeV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"jeX" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"jfc" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/medical{ + name = "Patient Ward" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"jfg" = ( +/obj/item/stool, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/solar/bridge_port) +"jfh" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/hos) +"jfi" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"jfm" = ( +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"jfo" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/tape/research, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"jfq" = ( +/obj/structure/table/standard, +/obj/item/paper{ + pixel_y = 5; + pixel_x = 4 + }, +/obj/item/folder{ + pixel_y = -6; + pixel_x = -5 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"jfu" = ( +/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" + }, +/obj/structure/disposalpipe/junction, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"jfv" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/captain/secret_room/level_one) +"jfy" = ( +/obj/structure/closet/l3closet/security, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/clothing/suit/bio_suit/security, +/obj/item/clothing/head/bio_hood/security, +/obj/item/clothing/mask/gas/half, +/obj/item/tank/oxygen_emergency_extended, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/suits) +"jfA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod4/station) +"jfF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry2) +"jfH" = ( +/obj/structure/hygiene/shower{ + dir = 8; + pixel_x = 9 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"jfR" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/vacant/cargo) +"jfS" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor, +/obj/machinery/flasher{ + dir = 1; + id_tag = "ai_core"; + pixel_y = -24 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"jfY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/black/border{ + dir = 9 + }, +/obj/structure/filingcabinet/wallcabinet{ + pixel_y = 0; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation) +"jga" = ( +/obj/structure/closet/emcloset/anchored, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/sleep/cryo/bridge) +"jgb" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"jgL" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"jgM" = ( +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"jgT" = ( +/turf/simulated/wall/r_wall/hull, +/area/engineering/atmos/bridge) +"jhb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/command/bsa) +"jhc" = ( +/obj/shuttle_landmark/merc/deck4, +/turf/space, +/area/space) +"jhd" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/foreport) +"jhh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"jhl" = ( +/obj/machinery/radio_beacon, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"jhm" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/no_grille/regular{ + id = "сhief_steward_windows" + }, +/turf/simulated/floor/plating, +/area/command/chief_steward) +"jhq" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"jhr" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"jhy" = ( +/obj/structure/sign/warning/nosmoking_1{ + dir = 8; + pixel_x = 32 + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/empty, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"jhB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"jhF" = ( +/obj/machinery/papershredder, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/obj/floor_decal/carpet/blue{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"jhJ" = ( +/obj/structure/filingcabinet{ + pixel_x = -10 + }, +/obj/structure/filingcabinet, +/obj/structure/filingcabinet{ + pixel_x = 10 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"jhN" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/deckofficer) +"jhQ" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/structure/table/steel_reinforced, +/obj/item/storage/firstaid/radiation{ + pixel_y = 9 + }, +/obj/item/storage/firstaid/trauma{ + pixel_y = 2 + }, +/obj/item/storage/firstaid/adv{ + pixel_y = -6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"jhS" = ( +/obj/structure/table/standard, +/obj/item/storage/box/monkeycubes{ + pixel_y = 10 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"jhY" = ( +/obj/structure/table/steel_reinforced, +/obj/item/storage/secure/briefcase/nukedisk, +/obj/prefab/hand_teleporter, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"jic" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"jid" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/floor_decal/corner/grey{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"jil" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"jit" = ( +/obj/floor_decal/corner/black/full, +/obj/structure/undies_wardrobe, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/cobed) +"jiv" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"jiA" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"jiD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"jiE" = ( +/obj/item/ladder_mobile, +/turf/simulated/floor/tiled/white, +/area/maintenance/firstdeck/aftstarboard) +"jiI" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"jiQ" = ( +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/table/standard{ + name = "plastic table frame" + }, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "bridgesafe_back"; + name = "Emergency Exit door-control"; + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"jiT" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/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/dark/monotile, +/area/chapel/mortuary) +"jiU" = ( +/obj/structure/table/standard, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/item/paper_bin, +/obj/item/pen/multi, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"jiV" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/space, +/area/space) +"jja" = ( +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/captain/beach) +"jjh" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 10 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"jjj" = ( +/turf/simulated/floor/greengrid{ + map_airless = 1 + }, +/area/engineering/engine_room) +"jjn" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals_central6, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"jjo" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 6 + }, +/obj/machinery/sparker{ + id_tag = "engines"; + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + injecting = 1; + use_power = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d1starboard) +"jjp" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1379; + master_tag = "solar_bridge_airlock"; + name = "interior access button"; + pixel_x = 24; + pixel_y = 24; + req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") + }, +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/bridge_starboard) +"jjB" = ( +/obj/machinery/door/airlock/research{ + name = "Toxins Lab" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"jjF" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/carpet, +/area/chapel/main) +"jjH" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/smes/buildable/preset/sierra/substation_full{ + RCon_tag = "Substation - Bluespace Engine" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"jjJ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"jjV" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/tele_beacon, +/obj/floor_decal/corner/purple/border, +/obj/machinery/button/alternate/door{ + desc = "A remote control-switch for the cargo doors."; + dir = 1; + id_tag = "researchdoor_interior"; + name = "Research Door Control"; + pixel_x = 6; + pixel_y = -24; + req_access = list("ACCESS_RESEARCH") + }, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "Biohazard"; + name = "Biohazard Shutter Control"; + pixel_x = -6; + pixel_y = -24; + req_access = list("ACCESS_RESEARCH") + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"jkc" = ( +/obj/structure/bed/chair/office/brown{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/suplocker_room) +"jkg" = ( +/obj/structure/table/woodentable, +/obj/item/book/manual/detective, +/obj/item/device/camera, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"jkq" = ( +/obj/machinery/door/airlock/hatch/maintenance{ + name = "First Deck Starboard Nacelle"; + req_access = newlist() + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/thruster/d1starboard) +"jkr" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/mopbucket, +/obj/item/mop, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"jky" = ( +/obj/structure/closet/radiation, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"jkC" = ( +/obj/machinery/door/blast/regular{ + id_tag = "sensor_shutters" + }, +/turf/simulated/floor/reinforced, +/area/exploration_shuttle/seats_place) +"jkH" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/cell_charger, +/obj/item/cell/high, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"jkL" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Entry Shutters" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/hallway/infirmary) +"jkN" = ( +/obj/structure/table/woodentable_reinforced/mahogany/walnut, +/obj/floor_decal/spline/fancy/black, +/obj/item/spirit_board, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"jkR" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"jkS" = ( +/obj/structure/handrail, +/turf/simulated/floor/reinforced, +/area/space) +"jkU" = ( +/obj/structure/bed/chair/comfy/brown, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"jll" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"jlp" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/brown/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/brown/bordercorner2, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/prison) +"jlt" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft) +"jlK" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/obj/machinery/meter, +/obj/machinery/button/blast_door{ + id_tag = "disvent"; + name = "Incinerator Vent Control"; + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"jlU" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/bed/sofa/l/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"jmb" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"jmc" = ( +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "specops_dock_sensor"; + master_tag = "specops_dock"; + pixel_x = -24 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "specops_dock_pump" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"jme" = ( +/obj/structure/bed/chair/pew/mahogany{ + dir = 1; + icon_state = "chair_pewchapel_middle_over" + }, +/obj/decal/cleanable/dirt, +/obj/item/towel/random, +/obj/structure/bed/chair/pew/left/mahogany, +/turf/simulated/floor/wood/walnut, +/area/vacant/sauna) +"jmm" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/machine/jukebox_custom, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"jms" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery) +"jmt" = ( +/obj/machinery/computer/modular/preset/supply_public, +/obj/floor_decal/corner/purple/half{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/security) +"jmu" = ( +/obj/structure/bed/chair/office/comfy/teal, +/obj/floor_decal/corner/blue/diagonal, +/obj/landmark/start{ + name = "Chief Medical Officer" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"jmx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_x = 28 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"jmz" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftstarboard) +"jmE" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/medical{ + dir = 4; + id_tag = "mental_health_door"; + name = "Mental Health" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/mentalhealth) +"jmI" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/heads/office/ce) +"jmN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"jmP" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee, +/obj/machinery/airlock_sensor{ + id_tag = "fd_starboard_sensor"; + master_tag = "fd_starboard"; + pixel_x = 24 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "fd_starboard_pump" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"jmW" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"jny" = ( +/obj/item/storage/secure/safe{ + pixel_x = 32 + }, +/obj/floor_decal/corner/yellow/mono, +/obj/structure/table/rack, +/obj/item/rig/ce/equipped, +/obj/item/clothing/mask/gas/half, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/window/eastright{ + name = "suit storage"; + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/heads/office/ce) +"jnD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sauna) +"jnG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 9 + }, +/obj/machinery/computer/air_control{ + dir = 1; + name = "Nacelle Chamber Monitoring"; + sensor_name = "Chamber"; + sensor_tag = "ReacEng1" + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"jnJ" = ( +/obj/floor_decal/techfloor/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"jnK" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/item/flora/pottedplantsmall/leaf{ + pixel_x = 6 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/cafe/upper) +"jnT" = ( +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/center) +"jnY" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/barrier, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"joa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"jol" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"joo" = ( +/obj/random/closet, +/obj/random/coin, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"jor" = ( +/obj/structure/bed/sofa/r/brown{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/cafe/upper) +"jou" = ( +/obj/structure/hygiene/toilet{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/vacant/dormintories) +"joA" = ( +/obj/structure/table/rack, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"joT" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/floor_decal/spline/fancy/wood/corner, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"jpb" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/bridgedeck/port) +"jpo" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Energy Storage - First Deck" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/auxpower) +"jpD" = ( +/obj/structure/bed/chair/padded/green, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"jpF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 10 + }, +/turf/simulated/wall/r_wall/hull, +/area/space) +"jpS" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/power/terminal, +/obj/floor_decal/industrial/warning, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/auxpower) +"jpT" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"jqb" = ( +/obj/structure/bookcase, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/item/book/manual/anomaly_testing, +/obj/item/book/manual/excavation, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"jqf" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/starboard) +"jqk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"jqv" = ( +/obj/structure/table/rack, +/obj/random/firstaid, +/obj/random/firstaid, +/obj/random/firstaid, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"jqG" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"jqI" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"jqP" = ( +/obj/machinery/button/blast_door{ + id_tag = "cafe"; + name = "Cafe Shutters"; + pixel_x = 26; + req_access = list("ACCESS_KITCHEN") + }, +/obj/floor_decal/corner/grey/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/grey/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/corner/grey/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"jqX" = ( +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/vending/cola{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"jrj" = ( +/obj/structure/lattice, +/turf/simulated/open, +/area/vacant/gambling) +"jrw" = ( +/obj/machinery/door/airlock/external{ + autoset_access = 0; + frequency = 1331; + id_tag = "calypso_shuttle_inner"; + name = "Charon External Access"; + req_access = list(list("ACCESS_EXPEDITION_SHUTTLE")) + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/airlock) +"jrx" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"jry" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/bar/cobed) +"jrz" = ( +/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" + }, +/obj/floor_decal/corner/red, +/obj/machinery/door_timer/cell_2{ + pixel_y = 0; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"jrD" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/structure/hygiene/sink{ + pixel_y = -12 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery) +"jrF" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/floodlight{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"jrK" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + id_tag = "guppy_shuttle_pump" + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"jrL" = ( +/obj/structure/sign/warning/nosmoking_1{ + dir = 8; + pixel_x = 32 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/light, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"jrQ" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + target_pressure = 200 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"jrX" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"jsb" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/floor_decal/corner/grey/full, +/obj/item/device/flashlight/lamp/green{ + pixel_x = 8; + pixel_y = 10 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"jse" = ( +/obj/structure/catwalk, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"jsg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"jsk" = ( +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"jsl" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"jsn" = ( +/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" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"jsq" = ( +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/sleep/cryo/firstdeck) +"jsr" = ( +/obj/structure/bed/chair/rounded/blue{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/landmark/start{ + name = "Internal Affairs Agent" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"jss" = ( +/obj/structure/catwalk, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"jsz" = ( +/obj/structure/bed/chair/office/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloorblack, +/turf/simulated/floor/tiled/dark, +/area/tcommsat/computer) +"jsD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/item/reagent_containers/dropper, +/obj/item/stack/material/steel, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"jsG" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"jsH" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"jsP" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + id_tag = "cedoor"; + name = "Chief Engineer Dorm"; + req_access = newlist(); + secured_wires = 1; + stripe_color = "#ffbf00" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/ce/cobed) +"jsR" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"jsU" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/atm{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"jsV" = ( +/obj/structure/mattress, +/obj/random/drinkbottle, +/obj/random/snack, +/obj/random/snack, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/foreport) +"jsW" = ( +/obj/floor_decal/corner/purple/bordercorner, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/exploration) +"jsY" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/gym) +"jtf" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/navbeacon/sierra/SD_fore2, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"jtg" = ( +/obj/fluid_mapped, +/obj/item/clothing/under/shorts/grey, +/obj/random/trash, +/obj/random/maintenance, +/obj/random/maintenance/clean, +/obj/item/soap, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"jtu" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/wood/bamboo{ + name = "stairs" + }, +/area/crew_quarters/garden_room) +"jtx" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor/hole/right{ + dir = 4 + }, +/obj/machinery/shieldgen, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"jtD" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Sensors Maintenance"; + req_access = newlist() + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + id_tag = "bridge_ent"; + name = "Bridge Lockdown" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/bridge) +"jtL" = ( +/obj/floor_decal/corner/black/border{ + dir = 6 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"jtY" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Substation - Bridge Deck"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/substation/bridgedeck) +"juk" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/navbeacon/sierra/SD_afthallway2, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"jul" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/critical{ + name = "south bump"; + pixel_y = -21 + }, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"jun" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"juu" = ( +/obj/structure/bed/chair/padded/blue{ + dir = 4 + }, +/obj/floor_decal/corner/blue/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"juH" = ( +/obj/machinery/hologram/holopad/longrange, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/cockpit) +"juR" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/hallway) +"juZ" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/glass/civilian{ + name = "Cryogenic Storage" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/bunk) +"jvi" = ( +/obj/machinery/hologram/holopad{ + pixel_x = -16 + }, +/obj/floor_decal/corner/red, +/obj/machinery/button/blast_door{ + id_tag = "security_permabrig_fitst_cell_shutters"; + name = "1st Cell Shutters"; + req_access = list("ACCESS_SECURITY"); + pixel_x = 21; + dir = 8 + }, +/obj/machinery/button/flasher{ + dir = 8; + pixel_x = 22; + pixel_y = -9; + id_tag = "security_first_cell_flash"; + req_access = list("ACCESS_SECURITY") + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"jvu" = ( +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/armory) +"jvv" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/fourthdeck/foreport) +"jvA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/carpet/magenta, +/area/crew_quarters/cafe) +"jvK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/computer/air_control/supermatter_core{ + dir = 8; + input_tag = "cooling_in"; + name = "Engine Cooling Control"; + output_tag = "cooling_out"; + pressure_setting = 100; + sensor_name = "Engine Core"; + sensor_tag = "engine_sensor" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"jvL" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation) +"jvP" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"jwe" = ( +/obj/machinery/shield_diffuser, +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "fd_starboard_outer"; + name = "First Deck Port Airlock" + }, +/obj/machinery/access_button/airlock_exterior{ + dir = 1; + master_tag = "fd_starboard"; + name = "exterior access button"; + pixel_x = 24; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"jwh" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"jwl" = ( +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation) +"jwp" = ( +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/supply{ + dir = 8 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "32-8"; + d1 = 32 + }, +/obj/structure/lattice, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/open, +/area/engineering/atmos/bridge) +"jws" = ( +/obj/machinery/power/smes/buildable/preset/sierra/shuttle{ + RCon_tag = "Shuttle - Petrov" + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"jwx" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/body_scanconsole{ + dir = 1 + }, +/obj/machinery/button/alternate/door{ + id_tag = "MedbayInf"; + dir = 8; + pixel_y = 24; + pixel_x = 23 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/staging) +"jwM" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/vault/bolted{ + autoset_access = 0; + id_tag = "bridgesafe_back"; + name = "Emergency Exit" + }, +/obj/item/airlock_brace{ + req_access = list("ACCESS_BRIDGE") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/bridge) +"jwN" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance{ + name = "Incinerator" + }, +/obj/structure/cable/green{ + 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/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/incinerator) +"jwX" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"jwZ" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dormintories) +"jxi" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/black/half{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/ship) +"jxj" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs/upper) +"jxp" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 8 + }, +/obj/machinery/status_light{ + id_tag = "ReacEng4"; + name = "Deck One Port status indicator"; + pixel_y = 32 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"jxv" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"jxw" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"jxz" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/exploration_shuttle/airlock) +"jxH" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/heads/office/rd/cobed) +"jxI" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/spot, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"jxR" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"jxW" = ( +/obj/machinery/vending/hydronutrients{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"jxX" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/equipment) +"jxY" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"jyb" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/medical{ + name = "Critical Wing" + }, +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_staging_lockdown"; + name = "Infirmary Staging Shutters" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"jyh" = ( +/obj/random/obstruction, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/vacant/dungeon) +"jyp" = ( +/obj/fluid_mapped, +/obj/random/trash, +/obj/random/soap, +/mob/living/simple_animal/aquatic/fish, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"jyr" = ( +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/sign/poster{ + pixel_y = -32 + }, +/obj/machinery/photocopier, +/obj/floor_decal/corner/black/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"jyD" = ( +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"jyG" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/obj/structure/table/steel, +/obj/item/storage/box/donut, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Bridge"; + departmentType = 5; + name = "Bridge RC"; + pixel_x = 28 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"jyO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck - Aft Hallway Starboard"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"jyU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"jyV" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/office) +"jyW" = ( +/obj/structure/table/steel, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/item/clothing/gloves/insulated, +/obj/item/device/multitool{ + pixel_x = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_smes) +"jyX" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"jze" = ( +/obj/structure/disposalpipe/junction/mirrored{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals6, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"jzf" = ( +/obj/floor_decal/chapel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"jzm" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/quartermaster/expedition/storage) +"jzv" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/ocp_wall, +/area/shuttle/petrov/gas) +"jzA" = ( +/obj/machinery/atmospherics/binary/pump, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"jzJ" = ( +/obj/structure/bed, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell2) +"jzL" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"jzN" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/structure/bed/chair/armchair/beige{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"jzR" = ( +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"jAd" = ( +/turf/simulated/floor/airless, +/area/space) +"jAm" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"jAr" = ( +/obj/structure/closet/emcloset, +/obj/structure/sign/warning/nosmoking_1{ + dir = 4; + icon_state = "nosmoking"; + pixel_x = -32 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"jAx" = ( +/obj/floor_decal/chapel{ + dir = 8 + }, +/obj/structure/bed/chair/pew/mahogany, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"jAF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/orange, +/area/security/range) +"jAH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"jAJ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 10 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/techfloor/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"jAU" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/civilian{ + autoset_access = 0; + name = "Comissary" + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"jAV" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/actor) +"jAW" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/machinery/computer/cryopod{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod1/station) +"jAY" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"jBb" = ( +/turf/unsimulated/mask, +/area/hallway/primary/thirddeck/center) +"jBc" = ( +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/folder/nt, +/obj/item/pen, +/obj/structure/railing/mapped{ + dir = 4; + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/structure/filingcabinet/wallcabinet{ + pixel_y = 30 + }, +/obj/floor_decal/corner/purple/three_quarters{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"jBi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/structure/bed/chair/rounded/blue{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"jBp" = ( +/obj/floor_decal/industrial/traffic{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"jBt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"jBz" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/substation/fourthdeck) +"jBE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"jBO" = ( +/obj/structure/sign/warning/high_voltage{ + dir = 8 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/substation/seconddeck) +"jBQ" = ( +/obj/machinery/bluespacerelay, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"jBS" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"jBT" = ( +/obj/floor_decal/spline/fancy/black, +/obj/floor_decal/corner/red/border, +/obj/machinery/light/led/small, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"jBX" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 10 + }, +/obj/machinery/meter, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"jBY" = ( +/obj/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"jCd" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 10 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"jCo" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/thirddeck/fore) +"jCp" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"jCr" = ( +/obj/machinery/atmospherics/unary/vent_pump/tank{ + dir = 8; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "toxins_petrov_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0 + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/gas) +"jCA" = ( +/obj/machinery/door/airlock/glass{ + autoclose = 0; + frequency = 1379; + heat_proof = 1; + id_tag = "incinerator_airlock_interior"; + locked = 1; + name = "Mixing Room Interior Airlock" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"jCI" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"jCQ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"jCW" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"jCZ" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"jDc" = ( +/obj/floor_decal/corner/grey/full, +/obj/machinery/papershredder, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"jDf" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"jDi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/storage) +"jDj" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/cistern) +"jDk" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"jDq" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"jDr" = ( +/obj/structure/table/standard, +/obj/item/storage/box/checkers/chess, +/obj/item/storage/box/checkers, +/obj/item/storage/box/checkers/chess/red, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"jDs" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/floor_decal/corner/black/border{ + dir = 4 + }, +/obj/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hydroponics/third_deck_storage) +"jDv" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"jDJ" = ( +/obj/machinery/artifact_scanpad, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"jDK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"jDO" = ( +/obj/machinery/door/airlock/research{ + name = "Cockpit" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/cockpit) +"jDS" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"jDW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"jEc" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"jEd" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/space) +"jEh" = ( +/obj/floor_decal/corner_techfloor_grid, +/obj/machinery/atmospherics/pipe/manifold/visible/green{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"jEl" = ( +/obj/structure/table/standard, +/obj/machinery/cell_charger{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"jEo" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + name = "Air to Supply" + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"jEq" = ( +/obj/structure/lattice, +/turf/simulated/wall/r_wall/prepainted, +/area/bridge) +"jEt" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/largecrate, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"jED" = ( +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/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/dark/monotile, +/area/medical/wardhallway) +"jEE" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"jEI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 6 + }, +/turf/simulated/wall/r_wall/hull, +/area/engineering/engine_room) +"jEJ" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"jEL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"jET" = ( +/turf/simulated/wall/r_wall/hull, +/area/security/sierra/brig) +"jFo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/turf/simulated/floor/plating, +/area/engineering/engine_monitoring) +"jFp" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"jFr" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"jFv" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/hallway/primary/fourthdeck/central_stairwell) +"jFy" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"jFF" = ( +/obj/structure/railing/mapped, +/obj/machinery/constructable_frame, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"jFG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"jFH" = ( +/obj/machinery/door/airlock/civilian{ + autoset_access = 0; + name = "Long Term Toilet"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/prison) +"jFK" = ( +/obj/structure/bed/chair/padded/red{ + dir = 4 + }, +/obj/floor_decal/corner/red/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"jFL" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"jGi" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/item/folder/nt, +/obj/item/folder/nt, +/obj/item/folder/red, +/obj/item/folder/yellow, +/obj/item/folder, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/blue/border, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"jGr" = ( +/obj/floor_decal/techfloor/orange, +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"jGz" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"jGA" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Fusion Generator"; + name_tag = "Fusion Generator" + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"jGD" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "lounge_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/garden_room) +"jGP" = ( +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"jGQ" = ( +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"jGV" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"jGW" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"jGY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"jGZ" = ( +/obj/decal/cleanable/dirt, +/obj/structure/table/woodentable, +/obj/item/dice/d10, +/obj/item/dice/d4, +/obj/item/dice/d8, +/turf/simulated/floor/tiled/dark, +/area/vacant/dungeon) +"jHd" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"jHe" = ( +/obj/machinery/computer/fusion/core_control{ + dir = 4; + initial_id_tag = "aux_fusion_plant"; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"jHh" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/decal/graffiti_bam{ + desc = "Something scribbled on the wall. It reads: 'HoS xyecoc' " + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hos) +"jHi" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"jHq" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/light_construct{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"jHu" = ( +/obj/machinery/ntnet_relay, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"jHB" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "cockpit_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cockpit) +"jHC" = ( +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/cart{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"jHG" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/green/border{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"jHH" = ( +/obj/floor_decal/corner/grey{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"jHS" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/storage) +"jHX" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/grey/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"jHY" = ( +/obj/structure/ladder, +/obj/structure/cable{ + d1 = 32; + d2 = 2; + icon_state = "32-2" + }, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/firstdeck/centralstarboard) +"jIa" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 4 + }, +/obj/structure/shuttle/engine/heater{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/plating, +/area/shuttle/escape_pod/escape_pod5/station) +"jIl" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"jIs" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"jIv" = ( +/obj/item/reagent_containers/glass/bucket, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/random/soap, +/obj/item/storage/box/lights/led_neon, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/firstdeck/centralport) +"jIA" = ( +/obj/structure/closet/crate, +/obj/random/firstaid, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"jIF" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"jIH" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/machinery/ship_map, +/turf/simulated/floor/tiled, +/area/security/brig) +"jIQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"jIR" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/obj/machinery/navbeacon/sierra/SD_fore3, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"jJa" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"jJh" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"jJm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"jJw" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"jJA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"jJY" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"jKa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/mining{ + id_tag = null; + name = "Port Auxiliary Storage"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/item/airlock_brace{ + req_access = list("ACCESS_QUARTERMASTER") + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"jKd" = ( +/obj/structure/table/standard{ + name = "plastic table frame" + }, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"jKg" = ( +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/generic, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"jKh" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"jKs" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"jKE" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/waterstore) +"jKH" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/shoes/dressheels, +/obj/item/clothing/shoes/dressheels, +/obj/item/clothing/shoes/dressheels, +/obj/item/clothing/shoes/dressheels, +/obj/item/clothing/under/dress, +/obj/item/clothing/under/dress, +/obj/item/clothing/under/dress, +/obj/item/clothing/under/dress, +/obj/item/clothing/gloves/color/evening, +/obj/item/clothing/gloves/color/evening, +/obj/item/clothing/gloves/color/evening, +/obj/item/clothing/gloves/color/evening, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"jKJ" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted{ + can_open = 1 + }, +/area/maintenance/firstdeck/foreport) +"jKL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"jKQ" = ( +/obj/structure/table/marble, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/item/book/manual/chef_recipes{ + pixel_y = -1; + pixel_x = 6 + }, +/obj/item/sticky_pad/random{ + pixel_x = -8; + pixel_y = 11 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"jKU" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/device/flashlight/lamp/green, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/wood/yew, +/area/crew_quarters/cafe) +"jKV" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"jLc" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"jLf" = ( +/obj/machinery/computer/modular/preset/dock{ + dir = 4 + }, +/obj/floor_decal/corner/blue/mono, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"jLm" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"jLr" = ( +/obj/structure/bed/chair/padded/green{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"jLt" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/fuelbay) +"jLA" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"jLB" = ( +/obj/wallframe_spawn/reinforced/polarized{ + id = "rbtk_office" + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/turf/simulated/floor/plating, +/area/assembly/office) +"jLI" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"jLK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"jLN" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/bunk) +"jLV" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"jMh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8; + autoset_access = 0 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/seconddeck/center) +"jMp" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/command{ + name = "Internal Affairs Agent"; + secured_wires = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"jME" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/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/hallway/primary/seconddeck/aft) +"jMM" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"jMS" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"jMY" = ( +/obj/structure/sign/warning/hot_exhaust, +/turf/simulated/wall/r_wall/hull, +/area/vacant/cargo) +"jMZ" = ( +/obj/machinery/papershredder, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"jNk" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/medical{ + name = "Critical Wing" + }, +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_staging_lockdown"; + name = "Infirmary Staging Shutters" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"jNm" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/machinery/conveyor{ + dir = 8; + id = "packageSort1" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/quartermaster/office/post) +"jNq" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"jNv" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/tank{ + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "fuel1p_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d3starboard) +"jNE" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/yellow/half, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/item/stack/material/glass/ten, +/obj/item/stack/material/aluminium/ten, +/obj/item/stack/material/plastic/ten, +/obj/item/stack/material/steel/ten, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"jNK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/civilian{ + name = "Kitchen Cold Storage" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/galley/freezer) +"jOa" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 5 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"jOh" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"jOi" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"jOq" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"jOC" = ( +/obj/structure/bed/chair/pew/left, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/actor/stage) +"jOL" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"jON" = ( +/obj/machinery/light/led/small, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"jOT" = ( +/obj/machinery/door/airlock/external/bolted{ + frequency = 1380; + id_tag = "escape_pod_2_hatch"; + name = "Escape Pod Two Hatch" + }, +/obj/machinery/shield_diffuser, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod2/station) +"jOU" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals_central6, +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"jOZ" = ( +/obj/structure/table/standard, +/obj/item/paper_bin{ + pixel_x = 6 + }, +/obj/item/device/flashlight/lamp/green{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/deckofficer) +"jPb" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/turf/simulated/floor/plating, +/area/crew_quarters/cafe/upper) +"jPd" = ( +/obj/structure/flora/pottedplant/crystal, +/turf/simulated/floor/tiled, +/area/rnd/locker) +"jPe" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/blue, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"jPh" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"jPi" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/hallway/primary/seconddeck/aft_stairwell) +"jPk" = ( +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/storage) +"jPr" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/scan) +"jPs" = ( +/obj/structure/bed/chair/office/comfy/black{ + dir = 8 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/iaa/cobed) +"jPx" = ( +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/industrial/traffic/corner{ + dir = 8; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/turf/simulated/floor/tiled/monotile, +/area/assembly/office) +"jPB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/item/toy/figure/ninja{ + desc = "A \"Space Life\" brand Exploration Team action figure."; + name = "Exploration Team Hero action figure"; + pixel_x = -6 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/table/steel, +/obj/item/storage/firstaid/light{ + pixel_x = 6; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cockpit) +"jPN" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"jPS" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin{ + pixel_y = 10 + }, +/obj/item/pen{ + pixel_y = 10 + }, +/obj/floor_decal/corner/red/half{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/button/alternate/door{ + pixel_y = -6; + id_tag = "bridge_hallway_doors_port"; + name = "Bridge Hallway Doors Port" + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"jPZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"jQa" = ( +/obj/structure/table/steel, +/obj/item/soap, +/obj/item/soap, +/obj/item/soap, +/obj/item/reagent_containers/spray/cleaner, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/utility) +"jQd" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/solar) +"jQk" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/assembly/robotics) +"jQo" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/floor_decal/corner/blue/three_quarters{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"jQx" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft) +"jQy" = ( +/obj/machinery/power/port_gen/pacman{ + sheets = 25 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"jQz" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"jQG" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod1/station) +"jQS" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 5 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d3starboard) +"jQU" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance/solgov, +/obj/random/maintenance/solgov, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"jQX" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"jQY" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/blue/border{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"jRa" = ( +/obj/floor_decal/corner/grey/diagonal, +/obj/machinery/computer/modular/preset/civilian/professional{ + dir = 4 + }, +/obj/item/wrench{ + name = "spanner 10"; + color = "#a2819e" + }, +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + dir = 1; + color = "#8c911d" + }, +/obj/floor_decal/industrial/traffic{ + dir = 1; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/button/windowtint{ + pixel_y = -21; + dir = 1; + id_tag = "rbtk_office"; + pixel_x = 2 + }, +/obj/machinery/button/alternate/door{ + id_tag = "rbtk_door"; + pixel_y = -22; + dir = 1; + pixel_x = -8 + }, +/turf/simulated/floor/tiled, +/area/assembly/office) +"jRh" = ( +/obj/machinery/crusher_base{ + icon_state = "leftcap" + }, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"jRt" = ( +/obj/structure/table/woodentable/maple, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/office) +"jRw" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/item/device/scanner/reagent, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"jRJ" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"jRK" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/green/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/green/bordercorner2{ + icon_state = "bordercolorcorner2"; + dir = 9 + }, +/obj/decal/cleanable/cobweb{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"jRN" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"jSg" = ( +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"jSh" = ( +/obj/structure/table/rack, +/obj/item/stack/material/tritium{ + amount = 50 + }, +/obj/item/stack/material/deuterium/fifty, +/obj/item/stack/material/deuterium/fifty, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"jSi" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/conveyor_switch/oneway{ + id = "compactor" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"jSj" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"jSl" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/obj/structure/closet/emcloset, +/obj/machinery/camera/network/bridge_deck{ + dir = 8; + c_tag = "Bridge Deck - Cryogenics" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"jSm" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cargo_l) +"jSn" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"jSB" = ( +/obj/structure/bed/chair/wood/walnut, +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/floor_decal/carpet/purple{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/main) +"jSD" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 9 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"jSE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"jSF" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"jSI" = ( +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/thirddeck) +"jSM" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"jSR" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"jSW" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d1port) +"jSZ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"jTc" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/mining{ + dir = 8; + id_tag = null; + name = "Hangar Bay"; + req_access = newlist() + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar/upper) +"jTg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/galley/freezer) +"jTn" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/lino, +/area/command/chief_steward) +"jTo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"jTr" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/closet/hydrant{ + pixel_y = 28 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"jTw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"jTy" = ( +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/thirddeck) +"jTC" = ( +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border, +/obj/structure/curtain/medical, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"jTE" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/civilian{ + name = "Gym" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/gym) +"jTJ" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"jTL" = ( +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/port) +"jTN" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/medical/virology/lab) +"jTO" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/button/alternate/door/bolts{ + dir = 1; + id_tag = "bsa_safe_room"; + name = "Lock"; + pixel_x = -6; + pixel_y = -21 + }, +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/obj/item/storage/mirror{ + dir = 4; + pixel_y = 30 + }, +/turf/simulated/floor/tiled/freezer, +/area/command/bsa) +"jUc" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/item/storage/box/glasses, +/obj/machinery/camera/network/expedition{ + c_tag = "Expedition - Briefing Room"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"jUf" = ( +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo) +"jUl" = ( +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/militia, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"jUp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"jUt" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "bsa" + }, +/obj/machinery/disperser/back{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/command/bsa) +"jUv" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"jUA" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/railing/mapped{ + dir = 8; + init_color = "#8c911d"; + color = "#8c911d" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"jUG" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"jUL" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/civilian{ + id_tag = "shower1"; + name = "First Private Shower" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/head_big) +"jUZ" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"jVc" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen{ + pixel_x = -1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hos) +"jVe" = ( +/obj/floor_decal/corner/green/border{ + dir = 6 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"jVf" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"jVh" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"jVl" = ( +/obj/floor_decal/corner/black/border{ + dir = 4 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"jVn" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/yellow, +/obj/structure/bed/chair/shuttle/blue, +/turf/simulated/floor/tiled, +/area/guppy_hangar/start) +"jVo" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"jVp" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"jVv" = ( +/obj/structure/table/standard, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/machinery/power/apc/high{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/item/device/geiger, +/obj/item/device/scanner/health, +/obj/item/device/scanner/gas, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"jVy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"jVC" = ( +/obj/structure/table/rack, +/obj/item/shield/riot, +/obj/item/shield/riot, +/obj/item/shield/riot, +/obj/item/shield/riot/metal, +/obj/item/shield/riot/metal, +/obj/item/shield/riot/metal, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/recharger/wallcharger{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"jVE" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/requests_console{ + department = "Security"; + departmentType = 1; + name = "Security RC"; + pixel_x = -32 + }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"jVH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"jVJ" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"jVO" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"jVP" = ( +/obj/decal/cleanable/dirt, +/obj/structure/bed/chair/pew/mahogany, +/turf/simulated/floor/wood/walnut, +/area/vacant/sauna) +"jVS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"jVT" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/firstdeck/aftport) +"jVV" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"jVZ" = ( +/obj/floor_decal/spline/plain/black, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"jWb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"jWe" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/tank/air, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"jWg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"jWo" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"jWq" = ( +/obj/floor_decal/carpet/purple, +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/obj/floor_decal/carpet/purple{ + dir = 10 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/office/rd/cobed) +"jWr" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"jWt" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/hydroponics) +"jWw" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"jWA" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/solar/bridge_starboard) +"jWE" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/hangar) +"jWL" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/firstdeck/aftstarboard) +"jWM" = ( +/obj/machinery/conveyor{ + id = "packageSort1"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/quartermaster/office/post) +"jWO" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/computer/modular/preset/civilian{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/turret_protected/ai) +"jWW" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/docking) +"jXb" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/hologram/holopad{ + pixel_y = 16; + pixel_x = 16 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/floor_decal/corner/purple/bordercorner, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"jXi" = ( +/obj/structure/sign/nanotrasen, +/turf/simulated/wall/r_wall/hull, +/area/hallway/primary/fourthdeck/center) +"jXl" = ( +/obj/structure/morgue{ + dir = 2 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"jXo" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"jXs" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"jXA" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/camera/network/petrov{ + c_tag = "Petrov - Isolation Cell Two"; + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell2) +"jXC" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"jXE" = ( +/obj/floor_decal/corner/blue/diagonal, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"jXF" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/maintenance, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar/upper) +"jXK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"jXN" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"jYc" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/cistern) +"jYh" = ( +/obj/structure/table/woodentable_reinforced, +/obj/structure/flora/pottedplant/stoutbush{ + pixel_y = 10 + }, +/turf/simulated/floor/wood, +/area/command/chief_steward) +"jYi" = ( +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"jYm" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"jYs" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch{ + id_tag = "engine_access_hatch"; + locked = 1; + req_access = newlist() + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "SupermatterDoor"; + name = "Supermatter Access Blast Door" + }, +/turf/simulated/floor/reinforced, +/area/engineering/engine_room) +"jYu" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"jYx" = ( +/obj/structure/sign/warning/engineering_access{ + dir = 4; + pixel_x = -32 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"jYB" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"jYC" = ( +/obj/shuttle_landmark/sierra/deck4/exploration_shuttle, +/turf/space, +/area/space) +"jYJ" = ( +/obj/machinery/light/spot, +/obj/floor_decal/corner/red/mono, +/obj/machinery/status_display{ + pixel_y = -32 + }, +/obj/machinery/computer/station_alert/security{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"jYP" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/assembly/robotics) +"jYQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"jYU" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/obj/shuttle_landmark/escape_pod/start/pod5, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod5/station) +"jYV" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Entry Shutters" + }, +/obj/machinery/door/airlock/medical{ + name = "Medical Smoke Room" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/office) +"jZa" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"jZk" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"jZl" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"jZq" = ( +/obj/structure/sign/warning/high_voltage{ + dir = 8; + pixel_x = 32 + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "nuke_shuttle_dock_airlock_pump" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"jZr" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/bridge) +"jZI" = ( +/obj/structure/sign/warning/radioactive{ + dir = 4; + pixel_x = -32 + }, +/obj/structure/catwalk, +/turf/simulated/floor/shuttle_ceiling/sierra, +/area/space) +"jZO" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/xenobiology/atmos) +"jZR" = ( +/obj/structure/noticeboard{ + dir = 4; + pixel_x = -32 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/machinery/computer/modular/preset/engineering{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"jZW" = ( +/obj/machinery/camera/all/command{ + c_tag = "AI Core - Auxiliary Access"; + dir = 1 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/item/device/radio/intercom/locked/ai_private{ + pixel_y = 22 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/hologram/holopad, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/turret_protected/ai_maint) +"jZY" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"jZZ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"kad" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"kae" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "eva_shutters"; + name = "EVA Shutters" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"kaf" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/structure/table/standard, +/obj/item/device/integrated_circuit_printer, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"kap" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cargo_l) +"kaz" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"kaB" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/floodlight, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"kaG" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"kaH" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/actor) +"kaL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"kaP" = ( +/obj/machinery/door/firedoor, +/obj/machinery/meter, +/obj/wallframe_spawn/reinforced_phoron/hull, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/black, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"kaS" = ( +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12 + }, +/turf/simulated/floor/tiled/white, +/area/medical/sleeper) +"kaU" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"kaX" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"kbd" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular{ + id_tag = "xenobio3_vent"; + name = "Chamber Vent" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"kbe" = ( +/obj/structure/bed/chair/rounded/blue{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"kbm" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/structure/flora/ausbushes/leafybush, +/turf/simulated/floor/grass/cut, +/area/hallway/primary/bridgedeck/center) +"kbn" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"kbq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"kbt" = ( +/obj/structure/bed/chair/comfy/teal, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"kby" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"kbB" = ( +/obj/paint_stripe/nt_red, +/obj/paint/nt_white, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod9/station) +"kbM" = ( +/obj/structure/disposalpipe/down{ + dir = 2 + }, +/obj/structure/lattice, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/supply{ + dir = 4 + }, +/turf/simulated/open, +/area/maintenance/firstdeck/aftport) +"kbR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/power/apc/high/critical{ + dir = 8; + name = "south bump"; + pixel_x = -25 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"kbW" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + dir = 4; + id_tag = "eng2_inner"; + name = "Third Deck Port Nacelle Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/thruster/d3port) +"kcf" = ( +/obj/floor_decal/corner/blue{ + dir = 10 + }, +/obj/machinery/computer/air_control{ + dir = 1; + input_tag = "o24p_in"; + name = "Oxygen Supply Control"; + output_tag = "o24p_out"; + sensor_name = "Tank"; + sensor_tag = "ReacEngOxygen4" + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"kch" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/commissary) +"kcj" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"kcn" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"kcp" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"kcx" = ( +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/item/clothing/head/festive, +/obj/item/clothing/head/festive, +/obj/item/clothing/head/festive, +/obj/item/clothing/head/festive, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor) +"kcA" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"kcF" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/maintenance, +/obj/random/firstaid, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"kcK" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftport) +"kcR" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/boombox{ + pixel_y = 5 + }, +/obj/item/reagent_containers/food/drinks/bottle/small/lager{ + pixel_y = -3; + pixel_x = -4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/sleep/cryo/south) +"kcS" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"kda" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"kdd" = ( +/turf/simulated/wall/prepainted, +/area/storage/eva) +"kdg" = ( +/obj/machinery/atmospherics/valve/open, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/engineering/atmos/storage) +"kdh" = ( +/obj/structure/bookcase/manuals/research_and_development, +/obj/item/book/manual/psionics, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"kdk" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/lime/border{ + dir = 9 + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"kdm" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/aft) +"kdq" = ( +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"kdr" = ( +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/papershredder, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"kdv" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/cable{ + d1 = 16; + d2 = 0; + icon_state = "16-0" + }, +/obj/structure/cable, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/forestarboard) +"kdy" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"kdA" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/rnd/development) +"kdF" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/field_generator, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"kdO" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"kdQ" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"kdR" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"kdS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"keb" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"kei" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/breakroom) +"kej" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/flora/ausbushes/reedbush, +/turf/simulated/floor/grass/cut, +/area/hallway/primary/bridgedeck/center) +"kek" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Unused Chamber"; + autoset_access = 0; + req_access = list("ACCESS_SEC_DOORS") + }, +/obj/structure/barricade, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"kem" = ( +/obj/machinery/door/airlock/engineering{ + name = "Aft Starboard Solar Access"; + req_access = newlist() + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar/starboard) +"kes" = ( +/obj/machinery/floodlight{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/airlock) +"ket" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cargo_r) +"keA" = ( +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/structure/table/standard{ + name = "plastic table frame" + }, +/obj/structure/closet/medical_wall/filled{ + pixel_x = 32 + }, +/obj/random/firstaid, +/obj/random/firstaid, +/obj/random/medical, +/obj/random/drinkbottle, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 1; + pixel_y = -13 + }, +/obj/item/bodybag/rescue, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"keJ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"keN" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/office) +"keP" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/table/rack, +/turf/simulated/floor/tiled/techfloor/grid, +/area/assembly/robotics) +"keQ" = ( +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the engine thruster blast doors."; + dir = 1; + id_tag = "ThrusterVents"; + name = "Thruster Blast Door control"; + pixel_y = -21; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/omni/filter{ + tag_east = 2; + tag_north = 1; + tag_west = 6 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/outline/grey, +/obj/floor_decal/techfloor/orange/corner, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"keS" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/structure/bed/chair/rounded/blue{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"keU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"kfc" = ( +/obj/machinery/vending/dinnerware{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/bar/cobed) +"kfm" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"kfs" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cargo_r) +"kfu" = ( +/obj/random/obstruction, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"kfA" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/vacant/prototype/control) +"kfH" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"kfW" = ( +/obj/structure/railing/mapped, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"kga" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/green, +/obj/machinery/power/apc/high/critical{ + dir = 4; + pixel_x = 24; + name = "east bump" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/bluespace/chamber) +"kgb" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5; + pixel_y = 16 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"kgc" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"kgj" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/displaycase{ + req_access = list("ACCESS_CAPTAIN") + }, +/obj/item/gun/projectile/revolver/medium/captain, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"kgk" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"kgs" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"kgu" = ( +/obj/structure/railing/mapped, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"kgy" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"kgB" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"kgE" = ( +/obj/structure/closet/crate/freezer, +/turf/simulated/floor/tiled, +/area/maintenance/firstdeck/aftstarboard) +"kgG" = ( +/obj/machinery/light/spot, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"kgI" = ( +/obj/structure/table/reinforced, +/obj/machinery/reagent_temperature, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/floor_decal/corner/beige{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"kgN" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 5 + }, +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d1starboard) +"kgX" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"kha" = ( +/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/door/airlock/glass/civilian{ + name = "Holodeck" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/holocontrol) +"khc" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/power) +"khd" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/largecrate, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"khm" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/structure/bed/sofa/l/brown{ + dir = 8 + }, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Bar - Chief Steward"; + dir = 8 + }, +/turf/simulated/floor/wood/yew, +/area/crew_quarters/cafe) +"khu" = ( +/obj/machinery/button/crematorium{ + pixel_x = 24; + pixel_y = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"khA" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"khC" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 10 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/machinery/computer/air_control{ + name = "Nacelle Chamber Monitoring"; + sensor_name = "Chamber"; + sensor_tag = "ReacEng4" + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"khG" = ( +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"khO" = ( +/turf/simulated/wall/prepainted, +/area/turret_protected/ai_cyborg_station) +"khP" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/porta_turret{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/turret_protected/ai_maint) +"khQ" = ( +/obj/structure/table/glass, +/obj/floor_decal/corner/darkblue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"kib" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/decal/cleanable/vomit, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"kid" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/turf/simulated/floor/plating, +/area/maintenance/cistern) +"kim" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"kin" = ( +/obj/floor_decal/corner/green/three_quarters, +/obj/machinery/vending/hydronutrients{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/corner/purple/bordercorner2, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"kiw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "xenolow_airlock"; + name = "Xenobiology Access Console"; + req_access = list("ACCESS_XENOBIO"); + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"kiD" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"kiH" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"kiK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"kiS" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"kiU" = ( +/mob/living/simple_animal/hostile/scarybat, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"kiZ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"kjc" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"kjg" = ( +/obj/structure/bed, +/obj/item/bedsheet/yellow, +/turf/simulated/floor/wood/walnut, +/area/maintenance/firstdeck/aftstarboard) +"kjo" = ( +/obj/structure/closet/secure_closet/iaa, +/obj/item/modular_computer/tablet/lease/preset/command, +/obj/item/storage/secure/safe{ + pixel_y = 28 + }, +/obj/item/folder/envelope/blanks, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"kjp" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"kjw" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/research{ + dir = 4; + name = "Miscellaneous Laboratory"; + req_access = newlist() + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"kjC" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 1; + id_tag = "petrov_shuttle_dock_pump" + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"kjL" = ( +/obj/structure/catwalk, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"kjX" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/handrail, +/turf/simulated/floor/airless, +/area/space) +"kka" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/bridgedeck/port) +"kkg" = ( +/obj/structure/railing/mapped, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"kkq" = ( +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/seconddeck/center) +"kkr" = ( +/obj/structure/lattice, +/turf/simulated/open, +/area/space) +"kks" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"kkx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/table/standard, +/obj/item/book/manual/nt_sop, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft_stairwell) +"kkC" = ( +/obj/structure/lattice, +/turf/simulated/wall/r_wall/hull, +/area/bridge) +"kkG" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"kkI" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/foreport) +"kkJ" = ( +/obj/machinery/door/blast/regular/escape_pod{ + id_tag = "escape_pod_1" + }, +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/forestarboard) +"kkL" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters{ + id_tag = "vir_isol" + }, +/turf/simulated/floor/plating, +/area/medical/virology/lab) +"kkN" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"kkO" = ( +/obj/decal/cleanable/blood, +/obj/structure/foamedmetal, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/foreport) +"klp" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/closet/cabinet, +/obj/random/drinkbottle, +/obj/random/mre/dessert, +/obj/random/single/lighter, +/turf/simulated/floor/wood/walnut, +/area/vacant/gambling) +"klq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"klu" = ( +/obj/machinery/portable_atmospherics/powered/pump, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"kly" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"klB" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"klJ" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/turbolift/medical_lift) +"klK" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"klM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"klO" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"klQ" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftstarboard) +"klZ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/industrial/danger/corner, +/obj/floor_decal/corner/yellow/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"kmc" = ( +/obj/machinery/atmospherics/pipe/cap/visible{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"kmn" = ( +/obj/structure/stairs/north, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/thirddeck/aft_stairwell) +"kmy" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"kmE" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"kmH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"kmI" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"kmK" = ( +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"kmO" = ( +/obj/floor_decal/industrial/hatch/red, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"kmV" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"kmZ" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"knb" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"knd" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/maintenance_equipstorage) +"kno" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/disposalpipe/up{ + dir = 8 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers, +/obj/machinery/atmospherics/pipe/zpipe/up/supply, +/obj/structure/cable/green{ + d1 = 16; + d2 = 0; + icon_state = "16-0" + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar/upper) +"knr" = ( +/obj/structure/bookcase/manuals/medical, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/captain/beach) +"knv" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/utility) +"knz" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"knC" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/camera{ + pixel_y = 9; + pixel_x = 5 + }, +/obj/item/device/camera_film{ + pixel_y = -3; + pixel_x = -6 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/sleep/bunk) +"knD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/hallway/primary/fourthdeck/central_stairwell) +"knI" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"knP" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"knQ" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/vacant/cargo) +"knS" = ( +/obj/machinery/door/airlock/command{ + name = "Internal Affairs Agent"; + secured_wires = 1 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa) +"knX" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/structure/bed/chair/padded/blue, +/obj/machinery/rotating_alarm/security_alarm{ + pixel_y = 13 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"koe" = ( +/obj/machinery/shieldgen, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"kog" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "prototype_access_hatch"; + locked = 1 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"koh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"kok" = ( +/obj/structure/railing/mapped, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"koo" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"kot" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/carpet, +/area/chapel/main) +"kov" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"koy" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"koE" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/structure/filingcabinet{ + pixel_x = -10 + }, +/obj/structure/filingcabinet, +/obj/structure/filingcabinet{ + pixel_x = 10 + }, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"koH" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/monotile, +/area/maintenance/abandoned_hydroponics) +"koI" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/green/bordercorner, +/obj/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"koW" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"koZ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id_tag = "hangar_hallway_shutters"; + name = "Hangar Deck Hallway Shutters"; + opacity = 0 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown3_4" + }, +/obj/machinery/door/airlock/civilian{ + name = "Visitors"; + id_tag = "hangar_hallway_doors" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/fore) +"kpb" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/green/border, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"kph" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/recharger, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cockpit) +"kpk" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/toolcloset/excavation, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/equipment) +"kpt" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"kpz" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"kpM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/xenobio) +"kpO" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"kpP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"kpR" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/rotating_alarm/security_alarm{ + pixel_y = 13 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"kpV" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"kqh" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/exploration/eva) +"kqn" = ( +/obj/machinery/door/window/southright{ + dir = 1; + name = "Test Chamber" + }, +/obj/machinery/door/window/southright{ + name = "Test Chamber" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell1) +"kqq" = ( +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation) +"kqt" = ( +/obj/floor_decal/carpet/blue2{ + dir = 4 + }, +/obj/floor_decal/carpet/blue2, +/obj/floor_decal/carpet/blue2{ + dir = 6 + }, +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/lava/cyan{ + pixel_y = 9; + pixel_x = 4 + }, +/obj/item/storage/secure/safe{ + pixel_x = 32 + }, +/turf/simulated/floor/carpet/blue3, +/area/crew_quarters/heads/office/cmo/cobed) +"kqy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"kqA" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/structure/sign/xenoflora{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/chargebay) +"kqE" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"kqQ" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"kqT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"kqY" = ( +/obj/machinery/atmospherics/binary/passive_gate{ + dir = 4; + target_pressure = 15000; + regulate_mode = 1; + unlocked = 1 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/atmos) +"kre" = ( +/obj/structure/sign/poster{ + pixel_x = -32 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"krm" = ( +/obj/floor_decal/corner/black{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"krn" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"kro" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1starboard) +"krs" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"kru" = ( +/obj/machinery/r_n_d/circuit_imprinter, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/closet/shipping_wall/filled{ + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/development) +"krA" = ( +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"krI" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"krK" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, +/obj/structure/fireaxecabinet{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/seconddeck) +"krN" = ( +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"krT" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "sd_port_outer"; + name = "Second Deck Port Airlock" + }, +/obj/machinery/access_button/airlock_exterior{ + master_tag = "sd_port"; + name = "exterior access button"; + pixel_x = 24; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/machinery/shield_diffuser, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/foreport) +"krZ" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai_upload) +"ksk" = ( +/obj/machinery/camera/network/second_deck{ + c_tag = "Chapel - Entry"; + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/chapel/main) +"kso" = ( +/obj/structure/bed/chair/comfy/teal{ + dir = 8 + }, +/obj/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"ksp" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/bridgedeck/starboard) +"ksr" = ( +/obj/machinery/vending/tool/adherent{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/crystal, +/area/crew_quarters/adherent) +"ksu" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/reinforced, +/area/turret_protected/ai_maint) +"ksv" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "pathfinder_office" + }, +/turf/simulated/floor/plating, +/area/command/exploration_leader) +"ksw" = ( +/obj/machinery/door/airlock/research{ + name = "Storage and Power" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/ship) +"ksC" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/medical/mortus{ + name = "Morgue"; + req_access = newlist() + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "infirmaryquar"; + name = "Infirmary Emergency Quarantine Shutters"; + opacity = 0 + }, +/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/dark/monotile, +/area/medical/morgue) +"ksE" = ( +/obj/machinery/vending/snack{ + icon_state = "snack" + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"ksI" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/rnd/entry) +"ksM" = ( +/obj/machinery/computer/ship/helm{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/guppy_hangar/start) +"kte" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/structure/sign/deck/second{ + dir = 4; + pixel_x = -32; + pixel_y = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/aft_stairwell) +"ktg" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"ktq" = ( +/obj/floor_decal/techfloor, +/obj/structure/closet/crate/plastic, +/obj/decal/cleanable/dirt, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"ktr" = ( +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"ktt" = ( +/obj/floor_decal/corner/purple{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 9 + }, +/obj/machinery/light/small, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"ktu" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"kty" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/navbeacon/sierra/FD_afthallway2, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"ktE" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/floor_decal/carpet/blue2{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/garden_room) +"ktQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/machinery/navbeacon/sierra/TD_fore2, +/obj/floor_decal/corner/lightgrey/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lightgrey/bordercorner2, +/obj/structure/holoplant, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"ktT" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/portables_connector, +/turf/simulated/floor/plating, +/area/maintenance/solar/bridge_port) +"kut" = ( +/obj/machinery/atmospherics/pipe/zpipe/up/cyan{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/airless, +/area/space) +"kuu" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/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" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"kuy" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/obj/structure/sign/warning/pods/south{ + dir = 1; + pixel_y = -32 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals_central6, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"kuI" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/lime/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 5 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"kuJ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/thirddeck/fore) +"kuK" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + 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{ + dir = 4 + }, +/obj/machinery/door/airlock/command{ + dir = 4; + name = "Bridge Access"; + id_tag = "bridge_hallway_doors_port" + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_6" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/hallway) +"kuQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "petrov_shuttle_dock_inner"; + name = "Docking Port Airlock"; + autoset_access = 0; + req_access = list(list("ACCESS_PETROV","ACCESS_SEC_DOORS")) + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"kuV" = ( +/obj/floor_decal/corner/brown/mono, +/obj/machinery/computer/modular/preset/supply_public{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"kuY" = ( +/obj/machinery/atmospherics/tvalve/digital{ + dir = 1; + id_tag = "fuelmode" + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"kvc" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/computer/modular/preset/security{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"kvk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/navbeacon/sierra/TD_port, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"kvm" = ( +/obj/structure/closet/crate/plastic, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"kvu" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"kvv" = ( +/obj/machinery/computer/ship/sensors, +/obj/item/modular_computer/telescreen/preset/generic{ + pixel_y = 22 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cockpit) +"kvz" = ( +/obj/machinery/light/led/small{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/jukebox/custom_tape/old, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"kvF" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/green/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/green/bordercorner2, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/obj/machinery/button/blast_door{ + dir = 1; + pixel_y = -24; + id_tag = "vir_isol"; + name = "Virology isolator" + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"kvH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"kvL" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10 + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Atmospherics - North"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"kvN" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/docking) +"kvW" = ( +/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/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"kwa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"kwc" = ( +/obj/machinery/photocopier/faxmachine{ + department = "Exploration Leader" + }, +/obj/structure/table/reinforced, +/obj/machinery/light, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/mauve/border{ + dir = 10 + }, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"kwf" = ( +/obj/structure/table/steel, +/obj/item/board, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"kwm" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"kwt" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell1) +"kwG" = ( +/obj/structure/flora/ausbushes/brflowers, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/grass/cut, +/area/hallway/primary/bridgedeck/center) +"kwI" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/xenobiology/atmos) +"kwZ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"kxg" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"kxh" = ( +/obj/structure/table/steel, +/obj/item/storage/box/bodybags, +/obj/machinery/light, +/obj/item/clothing/mask/gas, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/utility) +"kxi" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/ladder/up, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"kxv" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"kxy" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/exploration_shuttle/power) +"kxB" = ( +/obj/machinery/computer/modular/preset/civilian/professional, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/office) +"kxC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/table/woodentable_reinforced/mahogany, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/item/material/ashtray/bronze{ + pixel_y = 11; + pixel_x = -6 + }, +/obj/item/paper/sierra, +/turf/simulated/floor/carpet/magenta, +/area/crew_quarters/cafe) +"kxG" = ( +/obj/structure/filingcabinet/wallcabinet{ + pixel_x = 28 + }, +/obj/item/folder/nt, +/obj/item/folder/nt, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"kxH" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 10 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"kxI" = ( +/obj/machinery/computer/modular/preset/civilian{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo) +"kxQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"kxZ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/aft_stairwell) +"kya" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sleep/bunk) +"kyc" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/storage/tech) +"kye" = ( +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"kyf" = ( +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"kyg" = ( +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"kyh" = ( +/obj/structure/closet/crate, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"kyj" = ( +/obj/structure/sign/directions/bridge{ + pixel_y = -13; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/seconddeck/aft_stairwell) +"kyp" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/civilian{ + autoset_access = 0; + name = "Comissary" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"kyt" = ( +/obj/structure/bed/chair/office/comfy/purple{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/landmark/start{ + name = "Research Director" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"kyw" = ( +/obj/catwalk_plated, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"kyx" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"kyz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/tele_beacon, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft_stairwell) +"kyB" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/mob/living/bot/cleanbot{ + name = "Crewman"; + will_patrol = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"kyC" = ( +/obj/structure/table/steel, +/obj/item/device/flashlight/lamp/green, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"kyH" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/secure_closet/engineering_electrical, +/obj/item/device/multitool/multimeter, +/obj/item/device/multitool/multimeter, +/obj/item/device/multitool/multimeter, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"kyI" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled, +/area/vacant/cargo) +"kyL" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"kyT" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"kzg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"kzm" = ( +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"kzn" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"kzo" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/bridgedeck/port) +"kzx" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"kzF" = ( +/obj/shuttle_landmark/sierra/deck3/exploration_shuttle, +/turf/space, +/area/space) +"kzH" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/closet/medical_wall/filled{ + pixel_y = 24 + }, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"kzJ" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/exploration/eva) +"kzL" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/bunk) +"kzO" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#4c535b" + }, +/area/quartermaster/hangar/upper) +"kzR" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"kzS" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/command/bsa) +"kzX" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"kzZ" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"kAa" = ( +/obj/floor_decal/corner/grey/diagonal, +/obj/structure/table/steel_reinforced, +/obj/item/storage/box/donkpocket_mixed{ + pixel_y = 5 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration) +"kAg" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/hidden/green, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d3port) +"kAi" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"kAo" = ( +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/hand_labeler{ + pixel_x = -2; + pixel_y = -3 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"kAq" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"kAy" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/bed/chair/comfy/blue, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"kAE" = ( +/obj/structure/closet/l3closet/janitor, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/floor_decal/corner/purple{ + pixel_y = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/janitor) +"kAJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"kAK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated/dark, +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/plating, +/area/bridge/hallway) +"kAL" = ( +/obj/floor_decal/corner/purple/half{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"kAQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"kAZ" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/window/brigdoor/northright{ + autoset_access = 0; + dir = 4; + name = "Test Chamber"; + req_access = list("ACCESS_TOXINS") + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "misclab"; + name = "Test Chamber Blast Doors"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"kBc" = ( +/turf/simulated/wall/r_wall/hull, +/area/vacant/bar) +"kBe" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/corner/white{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"kBk" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"kBm" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"kBr" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Shield Subgrid"; + name_tag = "Shield Subgrid" + }, +/obj/structure/cable/cyan, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Shield Generator"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/shield/thirddeck) +"kBs" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"kBt" = ( +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/structure/sign/emergonly{ + dir = 8; + pixel_x = 32 + }, +/obj/structure/bed/chair/padded/teal{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/medical/maintenance_equipstorage) +"kBu" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/forestarboard) +"kBw" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"kBD" = ( +/obj/structure/sign/warning/fire{ + dir = 8; + icon_state = "fire"; + pixel_x = 32 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/table/rack, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"kBS" = ( +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/quartermaster/hangar_stairs) +"kBW" = ( +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "armory_lethal" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/grey, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/sierra/armory) +"kBZ" = ( +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Bridge Starboard" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"kCh" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"kCj" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"kCm" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/hangar_atmos) +"kCy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"kCz" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/stock_parts/circuitboard/rdserver, +/obj/item/stock_parts/circuitboard/protolathe, +/obj/item/stock_parts/circuitboard/destructive_analyzer, +/obj/item/stock_parts/circuitboard/rdconsole, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech) +"kCD" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular{ + id_tag = "vir_blast_window" + }, +/turf/simulated/floor/plating, +/area/medical/virology/lab) +"kCE" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"kCI" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"kCN" = ( +/obj/structure/bed/sofa/r/black{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"kCS" = ( +/obj/machinery/navbeacon/sierra/SD_fore6, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"kCT" = ( +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/sauna) +"kCZ" = ( +/obj/structure/bed/chair/padded/green, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"kDb" = ( +/obj/structure/table/woodentable, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/stock_parts/circuitboard/autolathe, +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/obj/machinery/light/small, +/turf/simulated/floor/wood, +/area/maintenance/firstdeck/forestarboard) +"kDh" = ( +/obj/structure/filingcabinet, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/floor_decal/industrial/outline/blue, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"kDj" = ( +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/red, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"kDn" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/terminal{ + dir = 1; + icon_state = "term" + }, +/turf/simulated/floor/tiled/dark, +/area/turret_protected/ai) +"kDz" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"kDC" = ( +/obj/structure/sign/warning/vent_port{ + dir = 4; + pixel_x = -32 + }, +/obj/structure/catwalk, +/turf/simulated/floor/shuttle_ceiling/sierra, +/area/space) +"kDM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/sleeper{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod1/station) +"kDO" = ( +/obj/structure/table/woodentable, +/obj/machinery/chemical_dispenser/bar_coffee/full{ + pixel_y = 12 + }, +/obj/item/storage/box/cups{ + pixel_y = 4; + pixel_x = -11 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/sleep/cryo/south) +"kDQ" = ( +/obj/machinery/media/music_writer{ + pixel_y = 28 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge/upper) +"kDS" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 6 + }, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/sparker{ + id_tag = "engines-4"; + pixel_x = -24 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d1port) +"kEe" = ( +/obj/structure/bed/chair/shuttle{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod5/station) +"kEk" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 6 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"kEx" = ( +/obj/floor_decal/corner/purple/three_quarters, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/railing/mapped{ + dir = 8; + init_color = "#8c911d"; + color = "#8c911d" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"kEB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/thirddeck/fore) +"kEC" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftstarboard) +"kEE" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/machinery/atmospherics/portables_connector, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"kEJ" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"kFn" = ( +/obj/structure/bed/chair/padded/green{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/turf/simulated/floor/tiled, +/area/holocontrol) +"kFs" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/item/storage/box/mousetraps, +/obj/machinery/camera/network/second_deck{ + c_tag = "Janitor"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/janitor) +"kFB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"kFC" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/corner/paleblue{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"kFE" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"kFJ" = ( +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"kFL" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"kFQ" = ( +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 4 + }, +/obj/engine_setup/pump_max, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"kFT" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/titanium, +/area/shuttle/petrov/airlock) +"kFV" = ( +/obj/structure/railing/mapped, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/item/tank/oxygen, +/turf/simulated/floor/plating, +/area/vacant/cargo) +"kFW" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/structure/closet/hydrant{ + pixel_y = 28 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"kGk" = ( +/obj/machinery/atmospherics/unary/tank/air, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"kGl" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"kGw" = ( +/obj/machinery/optable, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"kGy" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "xenobio4_vent"; + name = "Chamber Vent" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"kGC" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/power/rad_collector, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"kGD" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"kGG" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"kGH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"kGL" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals_central6, +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"kGM" = ( +/obj/structure/table/rack/dark, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/spline/plain/black{ + dir = 5; + icon_state = "spline_plain" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"kGN" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/bridge/adjutants) +"kGT" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"kGU" = ( +/obj/structure/catwalk, +/obj/random/junk, +/obj/item/roller_bed{ + pixel_y = 16 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"kHd" = ( +/obj/machinery/computer/message_monitor{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"kHe" = ( +/obj/floor_decal/industrial/warning/half, +/obj/machinery/computer/air_control{ + input_tag = "toxin_in"; + name = "Test Chamber Gas Monitor"; + output_tag = "toxin_out"; + sensor_name = "Toxin Chamber"; + sensor_tag = "toxinchamber_sensor" + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"kHk" = ( +/obj/machinery/computer/HolodeckControl{ + dir = 8; + linkedholodeck_area = /area/holodeck/alphadeck; + programs_list_id = "SierraMainPrograms" + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/lime/border{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/holocontrol) +"kHm" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"kHr" = ( +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"kHz" = ( +/obj/floor_decal/corner/black/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"kHF" = ( +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"kHK" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralport) +"kHQ" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"kHT" = ( +/obj/machinery/door/airlock/science{ + name = "Exploration Leader"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/command/exploration_leader) +"kHX" = ( +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"kHY" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/vacant/sauna) +"kHZ" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_east = 2; + tag_south = 5; + tag_west = 1 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/green, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"kIk" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/waterstore) +"kIl" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/blue/border, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"kIm" = ( +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"kIn" = ( +/obj/machinery/shield_diffuser, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"kIp" = ( +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/crew_quarters/visitors) +"kIq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/incinerator) +"kIx" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + name = "Bridge Air Storage to Bridge Supply" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"kIy" = ( +/obj/machinery/suit_storage_unit/engineering/alt, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"kIz" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"kIR" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"kIT" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"kJa" = ( +/turf/simulated/wall/prepainted, +/area/engineering/engineering_monitoring) +"kJg" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance{ + name = "Cistern"; + req_access = newlist() + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/waterstore) +"kJw" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"kJA" = ( +/obj/floor_decal/industrial/traffic{ + dir = 10; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/rnd/office) +"kJC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"kJI" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/fore) +"kJJ" = ( +/obj/structure/table/steel, +/obj/item/storage/belt/utility/full, +/obj/item/flame/lighter/zippo, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/red/bordercorner2, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"kJO" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/item/stool/padded, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"kJP" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/stock_parts/circuitboard/borgupload, +/obj/item/stock_parts/circuitboard/aiupload, +/obj/machinery/camera/network/engineering{ + c_tag = "Tech Storage - Secure" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech/high_risk) +"kJV" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/alarm/monitor/isolation/xenobio{ + alarm_id = "xenobio1_alarm"; + dir = 8; + name = "Xenobiology First Xenopen"; + pixel_x = 23 + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"kJW" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange, +/obj/machinery/conveyor{ + dir = 4; + id = "compactor" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/compactor) +"kJX" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "td_port" + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"kJY" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/structure/bed/chair/pew, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/breakroom) +"kKl" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"kKs" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/lime/bordercorner, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"kKt" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/tcommsat/chamber) +"kKv" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/obj/structure/sign/directions/medical{ + pixel_y = -21 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"kKz" = ( +/obj/structure/cryofeed, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo) +"kKC" = ( +/obj/floor_decal/corner/blue/diagonal, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"kKF" = ( +/obj/machinery/atmospherics/valve/shutoff/supply, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"kKI" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/machinery/disposal, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"kKL" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8; + injecting = 1; + use_power = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/thruster/d3port) +"kKP" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"kKR" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/thirddeck/aftport) +"kKT" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"kKU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/silver{ + autoset_access = 0; + name = "Resource Storage"; + req_access = list("ACCESS_CENT_GENERAL"); + secured_wires = 1 + }, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"kLd" = ( +/obj/structure/bed/chair/comfy/purple{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"kLe" = ( +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/firstdeck) +"kLl" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/floor_decal/carpet/purple, +/obj/floor_decal/carpet/purple{ + dir = 10 + }, +/obj/floor_decal/carpet/purple{ + dir = 9 + }, +/obj/item/storage/photo_album{ + pixel_y = -1 + }, +/obj/item/device/camera{ + pixel_y = 9 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/captain/beach) +"kLn" = ( +/obj/machinery/jukebox/custom_tape/old, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/bridge/adjutants) +"kLp" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"kLx" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/floor_decal/techfloor/hole/right{ + dir = 1 + }, +/obj/machinery/shieldgen, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"kLB" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/random/firstaid, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/storage/tech) +"kLD" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Aft Stairwell"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"kLF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"kLM" = ( +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/gym) +"kLQ" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 1 + }, +/obj/structure/bed/chair/shuttle/green, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/seats_place) +"kLS" = ( +/obj/floor_decal/corner/red{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 1; + target_pressure = 3500 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"kLV" = ( +/obj/machinery/suit_storage_unit/explorer, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/eva) +"kLY" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"kMb" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"kMd" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/gas) +"kMf" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/random/cash, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/cockpit) +"kMn" = ( +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 10 + }, +/obj/machinery/camera/network/engine{ + c_tag = "Engine - Control"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"kMu" = ( +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/standard, +/obj/item/device/camera, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/office) +"kMA" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "armory" + }, +/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/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/sierra/armory/lobby) +"kMJ" = ( +/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/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/center) +"kMK" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/bed/chair/wood/walnut{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor) +"kMO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/grey/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/grey/bordercorner, +/obj/floor_decal/corner/grey/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"kMP" = ( +/obj/machinery/atmospherics/unary/heat_exchanger{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/outline/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"kMT" = ( +/obj/machinery/power/solar_control{ + id = "auxsolarstarboard"; + name = "Starboard Solar Control" + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"kMW" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 10 + }, +/obj/structure/lattice, +/turf/space, +/area/space) +"kMY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"kNi" = ( +/obj/structure/disposalpipe/tagger/partial{ + dir = 8; + name = "Sorting Office"; + sort_tag = "Sorting Office" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/mining{ + id_tag = null; + name = "Delivery Office"; + req_access = newlist() + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office/post) +"kNr" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"kNv" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"kNw" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/machinery/airlock_sensor{ + frequency = 1379; + id_tag = "ai_core_sensor"; + pixel_x = 24; + pixel_y = 0 + }, +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/turret_protected/ai_teleport) +"kNJ" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/light, +/obj/machinery/atmospherics/unary/tank/air{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/grey/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"kNL" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"kNR" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "lounge_windows" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/garden_room) +"kNS" = ( +/obj/machinery/computer/ship/sensors{ + dir = 1 + }, +/obj/machinery/power/apc/hyper{ + dir = 8; + name = "east bump"; + pixel_x = -24; + req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_GUPPY")) + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/button/blast_door{ + active = "guppy_shield_left"; + dir = 1; + id_tag = "guppy_shield_left"; + name = "Left Window Shield Control"; + pixel_x = -6; + pixel_y = -20; + req_access = list("ACCESS_GUPPY") + }, +/obj/machinery/button/blast_door{ + airflow_od = -6; + dir = 1; + id_tag = "guppy_shield"; + name = "Window Shield Control"; + pixel_x = 6; + pixel_y = -20; + req_access = list("ACCESS_GUPPY") + }, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "guppy_hatch"; + name = "Rear Hatch Control"; + pixel_y = -32; + req_access = list("ACCESS_GUPPY") + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/guppy_hangar/start) +"kNU" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"kNV" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor, +/area/solar/bridge_port) +"kNX" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"kOi" = ( +/obj/floor_decal/industrial/traffic{ + dir = 5; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/office) +"kOo" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"kOt" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/bed/chair/padded/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"kOu" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"kOy" = ( +/obj/machinery/computer/cryopod{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/thirddeck) +"kOz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"kOA" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"kOF" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/item/stool/padded, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"kOJ" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/green/border{ + dir = 5 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Fourth Deck - Dock Bay - Commissary"; + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"kPc" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"kPk" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/hull, +/area/security/sierra/prison) +"kPn" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/ocp_wall, +/area/shuttle/petrov/gas) +"kPq" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/power) +"kPx" = ( +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"kPB" = ( +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"kPK" = ( +/obj/structure/lattice, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/corner/red/border, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"kPL" = ( +/obj/structure/bed/sofa/r/brown{ + dir = 1 + }, +/obj/machinery/light, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/actor/stage) +"kPV" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"kPX" = ( +/obj/floor_decal/corner/paleblue, +/obj/decal/cleanable/dirt, +/obj/item/camera_assembly, +/turf/simulated/floor/tiled/white, +/area/medical/virology/ward) +"kQa" = ( +/obj/machinery/door/airlock/glass/command{ + name = "Flight Control Tower" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/quartermaster/hangar/upper) +"kQd" = ( +/obj/structure/rubble, +/obj/decal/cleanable/dirt, +/obj/random/junk, +/obj/decal/cleanable/filth, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"kQg" = ( +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"kQl" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"kQq" = ( +/obj/structure/disposalpipe/up{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 16; + d2 = 0; + icon_state = "16-0" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"kQx" = ( +/obj/structure/closet/secure_closet/security/sierra/cadet, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"kQA" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"kQE" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/command{ + name = "E.V.A."; + req_access = newlist(); + secured_wires = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"kQF" = ( +/obj/structure/table/standard, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"kQH" = ( +/obj/structure/curtain/bed, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"kQK" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/machinery/power/apc/high{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"kQN" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/computer/modular/preset/civilian, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"kQP" = ( +/obj/machinery/status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/fourthdeck/foreport) +"kQU" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/exploration/eva) +"kQW" = ( +/obj/item/stack/material/steel, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"kQX" = ( +/obj/floor_decal/corner/darkblue/full, +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/floor_decal/corner/black/bordercorner{ + dir = 1 + }, +/obj/machinery/button/windowtint{ + pixel_y = 22; + id = "briefing_windows"; + range = 12 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"kRb" = ( +/obj/structure/table/steel, +/obj/random/snack, +/obj/item/reagent_containers/food/drinks/teapot{ + pixel_x = 4; + pixel_y = 16 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal{ + desc = "A metal tea cup. You're sure it is for tea, do not try to put coffe in."; + name = "metal tea cup"; + pixel_x = 10; + pixel_y = 6 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/tcommsat/computer) +"kRl" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"kRm" = ( +/obj/floor_decal/borderfloor, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft_stairwell) +"kRJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/table/woodentable_reinforced/mahogany, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/item/device/flashlight/lamp/lava/purple{ + pixel_y = 14; + pixel_x = -4 + }, +/obj/item/paper/sierra, +/turf/simulated/floor/carpet/green, +/area/crew_quarters/cafe) +"kRK" = ( +/obj/machinery/constructable_frame/machine_frame, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"kRL" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"kRS" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/table/steel, +/obj/item/folder/yellow, +/obj/item/paper/sierra/bsd, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"kRW" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/paint_stripe/red, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/wallframe_spawn/reinforced/polarized{ + id = "sec_equip_windows" + }, +/turf/simulated/floor/plating, +/area/security/sierra/equipment) +"kSk" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/camera/network/command{ + c_tag = "Command - Conference Room"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"kSr" = ( +/obj/structure/table/rack, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/random/maintenance, +/obj/machinery/door/window/westleft{ + name = "Commissary rack"; + req_access = newlist() + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/random/single/cola, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"kSs" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters/open{ + id_tag = "security_permabrig_lobby_shutters" + }, +/obj/paint_stripe/red, +/obj/structure/cable/green, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/turf/simulated/floor/plating, +/area/security/sierra/brig) +"kSu" = ( +/obj/structure/bed/chair/pew/left, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"kSw" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/drinkbottle, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/single/playing_cards, +/obj/machinery/button/blast_door{ + id_tag = "comissary_shutters"; + name = "Counter Shutters"; + pixel_y = 24; + req_access = list(list("ACCESS_HEADS","ACCESS_COMMISSARY")) + }, +/obj/machinery/requests_console{ + department = "Commissary"; + departmentType = 6; + name = "Commissary Requests Console"; + pixel_x = -32; + req_access = list(list("ACCESS_HEADS","ACCESS_COMMISSARY")) + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"kSG" = ( +/obj/floor_decal/corner/black/full, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"kSS" = ( +/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 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"kSW" = ( +/obj/structure/railing/mapped, +/obj/structure/closet/crate/trashcart, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"kTb" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/thirddeck/center) +"kTd" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"kTe" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/staging) +"kTh" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/hallway/primary/firstdeck/center) +"kTi" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/compactor) +"kTn" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/gas) +"kTu" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/rnd/xenobiology/xenoflora) +"kTD" = ( +/obj/machinery/ai_status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/hallway/primary/fourthdeck/center) +"kTG" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"kTQ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/aft) +"kTS" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/closet/hydrant{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"kTV" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"kTW" = ( +/obj/structure/table/rack, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -21 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"kUj" = ( +/obj/structure/table/marble, +/obj/item/material/kitchen/rollingpin, +/obj/floor_decal/corner/red/diagonal, +/obj/machinery/light_construct, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"kUs" = ( +/obj/machinery/power/emitter/gyrotron/anchored{ + dir = 8; + initial_id_tag = "aux_fusion_plant" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced, +/area/vacant/prototype/engine) +"kUy" = ( +/turf/simulated/floor/tiled/techmaint, +/area/storage/tech/high_risk) +"kUD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green, +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"kUF" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation/second) +"kUV" = ( +/obj/floor_decal/chapel, +/obj/structure/bed/chair/pew/left/mahogany, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"kUW" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"kVd" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/servers) +"kVf" = ( +/obj/structure/flora/pottedplant/minitree, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"kVg" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/bed/chair/armchair/purple{ + dir = 8 + }, +/obj/structure/sign/poster{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"kVi" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"kVD" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/substation/bridgedeck) +"kVG" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"kVJ" = ( +/obj/engine_setup/smes, +/obj/machinery/power/smes/buildable/preset/sierra/engine_main{ + RCon_tag = "Engine - Main" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_smes) +"kVY" = ( +/obj/machinery/door/airlock/research{ + name = "Suit Storage" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/eva) +"kVZ" = ( +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai_upload) +"kWb" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/medical/maintenance_equipstorage) +"kWd" = ( +/obj/machinery/suit_storage_unit/medical, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"kWm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/water_cell) +"kWo" = ( +/obj/machinery/flasher{ + id_tag = "security_first_cell_flash"; + name = "Floor mounted flash" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"kWq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"kWA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"kWB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"kWC" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"kWG" = ( +/obj/structure/railing/mapped{ + dir = 8; + init_color = "#8c911d"; + color = "#8c911d" + }, +/turf/simulated/floor/plating, +/area/rnd/misc_lab) +"kWI" = ( +/obj/machinery/power/shield_generator, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable/cyan, +/obj/machinery/light/small, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/shield/thirddeck) +"kWT" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"kXa" = ( +/obj/item/target, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"kXd" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/button/blast_door{ + id_tag = "firingspace"; + name = "Firing Range Shields"; + req_access = list("ACCESS_SEC_DOORS"); + pixel_y = 24 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"kXu" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"kXz" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"kXA" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/engineering{ + name = "Equipment" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/engineering/locker_room) +"kXI" = ( +/obj/structure/table/rack, +/obj/random/tech_supply, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"kXK" = ( +/obj/machinery/computer/modular/preset/engineering{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"kXN" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/gravitaional_generator) +"kXO" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"kXS" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"kXW" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"kYd" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"kYf" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/galley/backroom) +"kYg" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"kYh" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"kYo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"kYs" = ( +/obj/machinery/vending/coffee{ + dir = 1 + }, +/obj/floor_decal/corner/lime/mono, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/center) +"kYu" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"kYw" = ( +/obj/structure/cable/green{ + 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 = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Second Deck Subgrid"; + name_tag = "Second Deck Subgrid" + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/seconddeck) +"kYz" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"kYE" = ( +/obj/structure/table/standard, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"kYH" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"kYN" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/camera/network/hangar, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar) +"kYW" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"kZg" = ( +/obj/structure/bed/sofa/m/black{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/bridge/adjutants) +"kZq" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/obj/machinery/requests_console{ + department = "Engineering"; + name = "Engineering RC"; + pixel_x = 32 + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Lobby"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"kZr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/breakroom) +"kZw" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "solar_starboard_pump" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"kZC" = ( +/obj/machinery/atmospherics/valve/digital{ + name = "Emergency Cooling Bypass valve"; + dir = 1 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/red, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"kZG" = ( +/obj/structure/bed/chair/office/comfy/teal, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"kZI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"kZK" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"lac" = ( +/obj/paint_stripe/yellow, +/obj/paint/dark_gunmetal, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/r_titanium, +/area/guppy_hangar/start) +"lad" = ( +/obj/structure/table/standard, +/obj/item/clothing/mask/gas/aquabreather, +/obj/item/clothing/mask/gas/aquabreather, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level2) +"lau" = ( +/obj/structure/bed/chair/padded/blue, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"laz" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/yellow/half{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/suplocker_room) +"laG" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"laP" = ( +/obj/machinery/shield_diffuser, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_8_berth_hatch"; + name = "Escape Pod Eeigh" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"laV" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"lbg" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"lby" = ( +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"lbF" = ( +/obj/floor_decal/techfloor, +/obj/machinery/light/small, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/table/standard, +/obj/machinery/cell_charger, +/obj/item/cell/high{ + pixel_x = 1 + }, +/obj/item/cell/high{ + pixel_x = -8; + pixel_y = 10 + }, +/obj/item/cell/high{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/floor_decal/techfloor/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/servers) +"lbK" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "xenobioaqua"; + name = "Containment Blast Doors" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/water_cell) +"lbL" = ( +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/folder/red{ + pixel_y = 11; + pixel_x = 7 + }, +/obj/structure/sign/poster/nyc/know_the_enemy{ + pixel_y = -32 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"lbY" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"lbZ" = ( +/obj/machinery/power/apc/hyper{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/radiation, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"lci" = ( +/obj/structure/cryofeed{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/sleep/cryo/firstdeck) +"lcl" = ( +/obj/item/folder/red, +/turf/simulated/wall/r_wall/hull, +/area/command/bsa) +"lcn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft_stairwell) +"lcv" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"lcB" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"lcF" = ( +/obj/structure/disposalpipe/down{ + dir = 1 + }, +/obj/structure/lattice, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/fuel{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 32; + icon_state = "32-1" + }, +/turf/simulated/open, +/area/maintenance/thirddeck/aftport) +"lda" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/port) +"ldg" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "d1portnacelle" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"ldn" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/decal/cleanable/dirt, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/multi_tile/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftport) +"lds" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"ldz" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"ldC" = ( +/obj/structure/table/steel, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/sleep/bunk) +"ldI" = ( +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_r) +"ldP" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "hangar_atmos_storage"; + name = "Storage Shutters" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar_atmos) +"ldQ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/bed/chair/comfy/red{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"ldT" = ( +/obj/floor_decal/borderfloorblack, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/bunk) +"ldV" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"ldY" = ( +/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/structure/bed/chair/padded/red{ + dir = 4 + }, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"lea" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"leb" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4; + name = "Exterior Vent" + }, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/titanium, +/area/shuttle/petrov/gas) +"lek" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"lel" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"lem" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"lex" = ( +/obj/machinery/libraryscanner, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"lez" = ( +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 8 + }, +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"leB" = ( +/obj/structure/hygiene/toilet{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/item/material/kitchen/utensil/fork/plastic{ + pixel_x = 10; + name = "prisoners fork" + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/prison) +"leD" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/computer/arcade/orion_trail, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/decal/cleanable/cobweb, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"leE" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft_stairwell) +"leG" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/firstdeck/aft) +"leL" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/item/storage/mirror{ + pixel_x = 24; + pixel_y = 1 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head/deck3) +"leM" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"leO" = ( +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_8_hatch"; + name = "Escape Pod Eight Hatch" + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod8/station) +"leU" = ( +/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/dark, +/area/chapel/main) +"leW" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/largecrate, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"lfg" = ( +/obj/machinery/nuclearbomb/station{ + name = "ship self-destruct terminal" + }, +/turf/simulated/floor/selfestructgrid, +/area/security/nuke_storage) +"lfh" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/door/firedoor, +/obj/item/material/bell, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "bar<-cafe"; + name = "Bar Shutters" + }, +/obj/floor_decal/industrial/hatch/grey, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/bar) +"lfm" = ( +/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/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"lfs" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"lfB" = ( +/obj/machinery/computer/modular/preset/dock{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/half, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"lfD" = ( +/obj/shuttle_landmark/specops/out, +/turf/space, +/area/space) +"lfF" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/status_display{ + pixel_y = 32; + pixel_x = -32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/center) +"lfG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 4 + }, +/obj/structure/sign/warning/nosmoking_1{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"lfH" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"lfN" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"lfO" = ( +/obj/structure/table/steel, +/obj/machinery/light_switch{ + pixel_x = 24; + dir = 8 + }, +/obj/item/book/manual/engineering_hacking, +/obj/item/book/manual/engineering_guide, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"lfP" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/green/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/green/bordercorner2{ + icon_state = "bordercolorcorner2"; + dir = 9 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"lfV" = ( +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12 + }, +/obj/machinery/requests_console{ + department = "Hydroponics"; + departmentType = 4; + pixel_x = -28 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"lfW" = ( +/obj/machinery/light, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/red/bordercorner2, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"lgm" = ( +/obj/structure/table/rack, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/maintenance, +/obj/random/medical, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"lgo" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/office) +"lgy" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"lgz" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + dir = 1; + id_tag = "toxin_lab_access"; + name = "Toxin Lab Access Console"; + pixel_y = -20; + req_access = list("ACCESS_TOX_STORAGE") + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"lgB" = ( +/obj/structure/fuel_port{ + pixel_y = 32 + }, +/obj/structure/girder/displaced, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"lgE" = ( +/obj/structure/window/reinforced, +/obj/structure/table/standard, +/obj/item/device/integrated_circuit_printer, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/equipment) +"lgH" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"lgN" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"lgS" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"lgW" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8; + frequency = 1443; + id = "air_in"; + use_power = 1 + }, +/obj/machinery/sparker{ + id_tag = "Incinerator"; + pixel_y = -20 + }, +/turf/simulated/floor/reinforced, +/area/maintenance/incinerator) +"lgZ" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod1/station) +"lhc" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"lhg" = ( +/obj/floor_decal/corner/green/bordercee, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"lhv" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/assembly/chargebay) +"lhF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"lhU" = ( +/obj/decal/cleanable/greenglow, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/crucian_hangar/start) +"lhY" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"lif" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"lih" = ( +/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/floor_decal/industrial/warning/corner, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"lim" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"lis" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ + dir = 4; + internal_pressure_bound = 35000; + internal_pressure_bound_default = 35000 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d1starboard) +"liy" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/table/rack, +/obj/item/stack/material/steel{ + amount = 30 + }, +/obj/item/stack/material/steel{ + amount = 30 + }, +/obj/item/stack/material/steel/fifty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"liA" = ( +/obj/structure/hygiene/sink/kitchen{ + dir = 4; + pixel_x = -20 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"liJ" = ( +/turf/simulated/wall/r_wall/hull, +/area/chapel/main) +"liK" = ( +/obj/floor_decal/corner/yellow/three_quarters, +/obj/structure/filingcabinet{ + pixel_x = -10 + }, +/obj/structure/filingcabinet, +/obj/structure/filingcabinet{ + pixel_x = 10 + }, +/obj/item/folder/yellow{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/item/folder/yellow{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/item/folder/yellow{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/item/folder/yellow{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/machinery/button/blast_door{ + id_tag = "qm_office"; + name = "QM Shutter Control"; + pixel_x = 2; + pixel_y = -24; + req_access = list("ACCESS_CARGO"); + dir = 1 + }, +/obj/machinery/button/alternate/door{ + desc = "A remote control-switch for the office door."; + dir = 1; + id_tag = "qmdoor-supply"; + name = "supply door control"; + pixel_x = -9; + req_access = list("ACCESS_QUARTERMASTER"); + pixel_y = -24 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"liM" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/ward) +"liR" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"liW" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"liY" = ( +/obj/structure/table/glass, +/obj/machinery/keycard_auth/sierra, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"ljf" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ + id_tag = "escape_pod_8_berth"; + name = "escape pod eight berth controller"; + pixel_x = -32; + pixel_y = 21; + tag_door = "escape_pod_8_berth_hatch"; + frequency = 1380 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"ljg" = ( +/obj/machinery/cryopod/robot{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/chargebay) +"ljm" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 8 + }, +/obj/structure/bed/sofa/m/brown{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"ljn" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"ljA" = ( +/obj/structure/bed/sofa/l/teal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"ljC" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"ljL" = ( +/obj/machinery/computer/cryopod{ + pixel_y = 24 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/firstdeck) +"ljR" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d3starboard) +"ljT" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/compactor) +"ljV" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"lkg" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/rnd/xenobiology/xenoflora) +"lkl" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/center) +"lko" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/foreport) +"lkt" = ( +/obj/floor_decal/corner/green/half, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"lkA" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "nuke_shuttle_dock_airlock"; + name = "interior access button"; + pixel_x = -32; + pixel_y = -24; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"lkB" = ( +/obj/machinery/power/apc/high{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"lkC" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"lkG" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/structure/handrail{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"lkM" = ( +/obj/machinery/fusion_fuel_injector/mapped{ + initial_id_tag = "aux_fusion_plant"; + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/vacant/prototype/engine) +"lkP" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/titanium, +/area/shuttle/petrov/scan) +"lkQ" = ( +/obj/paint_stripe/red, +/obj/paint/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod3/station) +"lla" = ( +/obj/machinery/light, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/security/brig) +"llb" = ( +/obj/structure/table/standard, +/obj/machinery/reagentgrinder/juicer, +/obj/floor_decal/corner/green/half{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"lld" = ( +/obj/structure/closet/emcloset, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"llm" = ( +/obj/machinery/button/alternate/door/bolts{ + dir = 8; + id_tag = "cafe_private_room"; + name = "Unlock"; + pixel_x = 24; + pixel_y = 7; + req_access = list("ACCESS_BAR") + }, +/obj/structure/bed/chair/rounded/brown{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/floor_decal/carpet/blue{ + dir = 4 + }, +/obj/floor_decal/carpet/blue, +/obj/floor_decal/carpet/blue{ + dir = 1 + }, +/obj/floor_decal/carpet/blue{ + dir = 6 + }, +/obj/floor_decal/carpet/blue{ + dir = 5 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/cafe/upper) +"lln" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"llq" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"llr" = ( +/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/structure/catwalk, +/obj/structure/sign/warning/high_voltage{ + dir = 8; + pixel_x = 32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"lls" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"llw" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"llx" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"llM" = ( +/obj/floor_decal/techfloor, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo) +"llO" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/firstdeck/centralport) +"llP" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/handrail, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"llT" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/structure/bed/chair/comfy/beige{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"llX" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"lmb" = ( +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/laser, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory) +"lmg" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"lmj" = ( +/obj/machinery/stasis_cage, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"lmE" = ( +/obj/machinery/status_light{ + alert_temperature = 340; + id_tag = "BSDrive"; + name = "Bluespace Drive status indicator"; + pixel_x = 24 + }, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace/chamber) +"lmM" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"lmQ" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/power) +"lmT" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"lnc" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/structure/bed/sofa/l/brown{ + dir = 4 + }, +/turf/simulated/floor/wood/yew, +/area/crew_quarters/cafe) +"lnd" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 1 + }, +/obj/structure/shuttle/engine/heater{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/airless, +/area/shuttle/escape_pod/escape_pod3/station) +"lnj" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"lnp" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"lnu" = ( +/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/structure/catwalk, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"lny" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d3starboard) +"lnC" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"lnE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge/upper) +"lnL" = ( +/obj/floor_decal/corner/purple/full, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/rd/cobed) +"lnN" = ( +/obj/machinery/door/airlock/vault/bolted{ + name = "AI Core Backup Access" + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "AICore"; + name = "AI Core Security Shutters" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/turret_protected/ai) +"lnO" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/brown, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/bunk) +"lnR" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/assembly/robotics) +"lob" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/grey/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"lod" = ( +/obj/structure/bed/sofa/r/black{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/sleep/cryo/south) +"loi" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"lok" = ( +/obj/structure/cable/green{ + 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/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"lou" = ( +/obj/machinery/photocopier, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/mauve/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"loz" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"loC" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/empty, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"loO" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/tcommsat/computer) +"loY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/window{ + autoset_access = 0; + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"lpg" = ( +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/office) +"lpk" = ( +/turf/simulated/floor/reinforced, +/area/maintenance/incinerator) +"lpB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"lpG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + target_pressure = 15000 + }, +/obj/machinery/button/ignition{ + dir = 1; + id_tag = "engines-3"; + pixel_y = -34 + }, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "cChamber3pV"; + name = "First Deck Starboard Chamber Vent"; + pixel_x = 8; + pixel_y = -24 + }, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "d3portnacelle"; + name = "Combustion Chamber Blast Door Control"; + pixel_x = -8; + pixel_y = -24 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"lpI" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"lpQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"lpT" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"lpY" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"lpZ" = ( +/obj/floor_decal/corner/grey/diagonal, +/obj/structure/closet/secure_closet/explorer/medic, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration) +"lqa" = ( +/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/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftport) +"lqj" = ( +/obj/machinery/computer/guestpass{ + pixel_y = 29 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"lqu" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Cryogenics"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/thirddeck) +"lqA" = ( +/obj/fluid_mapped, +/turf/simulated/floor/reinforced, +/area/maintenance/waterstore) +"lqB" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"lqC" = ( +/obj/structure/bed, +/obj/item/clothing/mask/muzzle, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"lqE" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id_tag = "hangar_hallway_shutters"; + name = "Hangar Deck Hallway Shutters"; + opacity = 0 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown3_4" + }, +/obj/machinery/door/airlock/civilian{ + name = "Visitors"; + id_tag = "hangar_hallway_doors" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/fore) +"lqH" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"lqI" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/heads/office/iaa) +"lqX" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/structure/window/boron_reinforced{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"lra" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"lrf" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"lrl" = ( +/obj/machinery/light/spot, +/obj/floor_decal/corner/grey/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"lrn" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"lru" = ( +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/light/led/small{ + dir = 1 + }, +/obj/structure/shotgun_rack{ + pixel_y = 29 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/chemical_dispenser/bar_alc/full{ + pixel_y = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"lrw" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "fd_starboard_pump" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"lrC" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -9; + pixel_y = -21 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"lrH" = ( +/obj/floor_decal/corner/green, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/sauna) +"lrL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs/upper) +"lrR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/thirddeck) +"lrU" = ( +/obj/floor_decal/industrial/warning/full, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "firing_range_pump" + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 8; + id_tag = "firing_range"; + pixel_x = 20; + pixel_y = 4; + req_access = list(list("ACCESS_SECURITY","ACCESS_EXTERNAL")) + }, +/obj/machinery/airlock_sensor{ + id_tag = "firing_range_sensor"; + master_tag = "firing_range"; + pixel_x = 24; + pixel_y = -8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"lrV" = ( +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"lrY" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/computer/shuttle_control/lift/rndmaint, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"lsb" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/cmo/cobed) +"lsd" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"lsj" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 10 + }, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "xenohight_airlock"; + name = "Xenobiology Access Console"; + pixel_y = 22; + req_access = list("ACCESS_XENOBIO") + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry) +"lsk" = ( +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"lsC" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/seconddeck) +"lsE" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/critical{ + name = "north bump"; + pixel_y = 21; + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/auxpower) +"lsL" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/tele_pad, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_teleport) +"lsM" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft_stairwell) +"lsV" = ( +/obj/decal/cleanable/dirt, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/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/plating, +/area/maintenance/compactor) +"ltl" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"ltp" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"ltr" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/vacant/prototype/engine) +"lts" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"ltu" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/vending/coffee, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"lty" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/random/closet, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"ltH" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"ltN" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/machinery/camera/network/bridge_deck{ + dir = 1; + c_tag = "Bridge Deck - Aft Hallway - Turbolift" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"ltO" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"ltP" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"ltU" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/hygiene/sink{ + pixel_y = -12 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/laundry) +"lub" = ( +/obj/structure/bed/chair/padded/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"luc" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"lun" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"luo" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"lur" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1380; + id_tag = "centcom_shuttle_dock_outer"; + name = "Docking Port Airlock" + }, +/obj/machinery/shield_diffuser, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"luJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black/corner, +/obj/floor_decal/snow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/galley/freezer) +"luL" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/solar/bridge_port) +"luO" = ( +/obj/structure/bed/chair/wood/maple{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/office) +"luT" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"luU" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"luY" = ( +/obj/machinery/power/apc/charon{ + name = "south bump"; + pixel_y = -24; + req_access = list(list("ACCESS_EXPLORER","ACCESS_ENGINEERING")) + }, +/obj/structure/cable/cyan, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/b_green/bordercorner2{ + dir = 6 + }, +/obj/structure/bed/chair/shuttle/green{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/seats_place) +"lva" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/airlock) +"lvf" = ( +/obj/structure/catwalk, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/tele_beacon, +/turf/simulated/floor/plating, +/area/exploration_shuttle/power) +"lvi" = ( +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"lvm" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/exploration/eva) +"lvn" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/sign/warning/lethal_turrets{ + pixel_y = 32 + }, +/obj/structure/table/rack, +/obj/item/clothing/suit/space, +/obj/item/clothing/mask/breath, +/obj/item/clothing/head/helmet/space/fishbowl, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/tiled/dark/monotile, +/area/turret_protected/ai_teleport) +"lvs" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/medical/virology/atmos) +"lvu" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/structure/closet/secure_closet/infotech_sierra, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"lvv" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/power) +"lvy" = ( +/obj/structure/bed/chair/rounded/blue{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"lvz" = ( +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"lvB" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d3starboard) +"lvD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"lvI" = ( +/obj/structure/bed/sofa/r/beige, +/obj/floor_decal/spline/fancy/black{ + dir = 5 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/cafe) +"lvN" = ( +/obj/structure/table/standard, +/obj/item/auto_cpr, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/ward) +"lwd" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/computer/cryopod/robot{ + pixel_x = 31 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/chargebay) +"lwg" = ( +/obj/machinery/button/blast_door{ + id_tag = "eng_lockdown_emg1"; + name = "Main Enterence Control"; + pixel_y = 28; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/obj/structure/reagent_dispensers/water_cooler, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"lwj" = ( +/obj/paint_stripe/yellow, +/obj/paint/dark_gunmetal, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/turf/simulated/wall/r_titanium, +/area/guppy_hangar/start) +"lwm" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/item/stock_parts/circuitboard/batteryrack, +/obj/item/stock_parts/circuitboard/batteryrack, +/obj/item/stock_parts/circuitboard/smes, +/obj/item/stock_parts/smes_coil, +/obj/item/stock_parts/smes_coil, +/obj/item/stock_parts/smes_coil/super_capacity, +/obj/item/stock_parts/smes_coil/super_capacity, +/obj/item/stock_parts/smes_coil/super_io, +/obj/item/stock_parts/smes_coil/super_io, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech) +"lwn" = ( +/obj/machinery/atmospherics/unary/heater, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"lwp" = ( +/obj/structure/table/steel, +/obj/item/storage/bible, +/obj/item/circular_saw, +/obj/item/scalpel/basic, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"lwt" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"lwu" = ( +/obj/structure/closet/crate, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/device/lightreplacer, +/obj/item/storage/box/lights/mixed, +/obj/item/storage/box/glowsticks, +/obj/item/tape_roll, +/obj/item/stock_parts/smes_coil/weak, +/obj/item/storage/box/lights/led_neon, +/obj/floor_decal/spline/plain/purple{ + dir = 1 + }, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"lwD" = ( +/obj/floor_decal/techfloor/corner, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"lwJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"lwK" = ( +/obj/structure/sign/warning/airlock{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/recharge_station, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"lwU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"lwY" = ( +/obj/shuttle_landmark/escape_pod/start/pod10, +/obj/wallframe_spawn/reinforced/titanium, +/turf/simulated/floor/plating, +/area/shuttle/escape_pod/escape_pod10/station) +"lxb" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"lxd" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/security{ + name = "Forensics" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/forensic) +"lxg" = ( +/obj/structure/bed/chair/office/teal{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"lxi" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/zpipe/down/cyan, +/turf/simulated/open, +/area/space) +"lxj" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/infirmreception) +"lxl" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_2" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/fore) +"lxq" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "prototype_exhaust" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"lxz" = ( +/obj/machinery/chem_master, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/vacant/infirmary) +"lxJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/vacant/gambling) +"lxK" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"lxQ" = ( +/obj/machinery/computer/station_alert/security, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"lxY" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "xenobio1_vent"; + name = "Chamber Vent" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"lxZ" = ( +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/random/tech_supply{ + pixel_y = -6 + }, +/obj/random/tech_supply{ + pixel_x = -6; + pixel_y = 7 + }, +/obj/random/tech_supply{ + pixel_y = -6; + pixel_x = 8 + }, +/obj/random/tool{ + pixel_y = 5; + pixel_x = 10 + }, +/obj/random/tool{ + pixel_y = -2; + pixel_x = -3 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"lyk" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/structure/bed/sofa/r/brown{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_x = 28 + }, +/turf/simulated/floor/wood/yew, +/area/crew_quarters/cafe) +"lyr" = ( +/obj/machinery/telecomms/server/presets/supply, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"lyu" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/infirmreception) +"lyw" = ( +/obj/machinery/shield_diffuser, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_9_berth_hatch"; + name = "Escape Pod Nine" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralport) +"lyE" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"lyK" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/structure/bed/chair/padded/blue, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"lyO" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced, +/obj/item/storage/medical_lolli_jar{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Entry Shutters" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/infirmreception) +"lyR" = ( +/obj/machinery/camera/all/command{ + c_tag = "AI Core - Fore Starboard Access"; + dir = 8 + }, +/obj/item/device/radio/intercom/locked/ai_private{ + pixel_y = 22 + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"lyS" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/hidden/green, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d1starboard) +"lyU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"lyY" = ( +/obj/structure/table/steel_reinforced, +/obj/item/hand_labeler, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 5 + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Captain's Quarters"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"lzi" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level2) +"lzj" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"lzk" = ( +/obj/machinery/door/window/brigdoor/westleft{ + dir = 1 + }, +/obj/machinery/door/window/brigdoor/westright{ + dir = 2; + autoset_access = 0 + }, +/obj/machinery/door/blast/shutters/open{ + id_tag = "security_permabrig_lobby_shutters" + }, +/obj/paint_stripe/red, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf/steel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/security/sierra/brig) +"lzz" = ( +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"lzC" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"lzD" = ( +/obj/machinery/hologram/holopad{ + pixel_x = 16; + pixel_y = -16 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe) +"lzG" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"lzH" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/civilian{ + dir = 4; + name = "Canister Storage" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/airlock_canisters) +"lzL" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/structure/bed/sofa/r/brown{ + dir = 4 + }, +/turf/simulated/floor/wood/yew, +/area/crew_quarters/cafe) +"lzO" = ( +/obj/structure/closet/secure_closet/crew/research, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/white/monotile, +/area/maintenance/fourthdeck/aft) +"lzS" = ( +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"lzW" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/item/stool/padded/red, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/janitor) +"lAe" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins/storage) +"lAk" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Port Hallway Entry"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"lAs" = ( +/obj/structure/table/steel, +/obj/item/reagent_containers/spray/pepper, +/obj/item/reagent_containers/spray/pepper, +/obj/item/device/radio/electropack, +/obj/item/device/assembly/signaler, +/obj/item/screwdriver, +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/corner/red/bordercorner, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"lAv" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/techfloor/orange, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/table/rack, +/obj/random/tech_supply, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"lAy" = ( +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "library_space_lower"; + name = "Space Shields"; + pixel_x = -24; + pixel_y = -21 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/bed/chair/rounded/beige{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"lAE" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/thirddeck/port) +"lAM" = ( +/obj/random/drinkbottle, +/obj/structure/closet/medical_wall/filled{ + pixel_y = -24 + }, +/obj/floor_decal/corner/black/full, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/command/bsa) +"lAS" = ( +/obj/machinery/atmospherics/unary/tank/air, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/engineering{ + c_tag = "Atmospherics - East" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"lAT" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/purple/bordercorner2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck - Aft Hallway"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"lAU" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/port) +"lAZ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/substation/thirddeck) +"lBc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"lBp" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe) +"lBq" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/forestarboard) +"lBs" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"lBy" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 8; + icon_state = "map" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"lBz" = ( +/obj/structure/closet/jcloset/sierra, +/obj/floor_decal/corner/purple{ + pixel_y = 1 + }, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/janitor) +"lBJ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"lBS" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/bed/sofa/m/brown{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"lBW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"lCb" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"lCc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"lCk" = ( +/obj/machinery/door/window/brigdoor/southright{ + id = "Cell 1"; + name = "Cell one"; + 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 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "security_permabrig_fitst_cell_shutters" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_ridged, +/area/security/sierra/brig) +"lCm" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"lCn" = ( +/obj/floor_decal/corner/darkblue/mono, +/obj/machinery/vending/cola{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"lCC" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"lCH" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"lCJ" = ( +/obj/floor_decal/industrial/warning, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"lCK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"lCN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"lCR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 1; + target_pressure = 15000 + }, +/obj/machinery/button/ignition{ + id_tag = "engines-4"; + pixel_y = 34 + }, +/obj/machinery/button/blast_door{ + id_tag = "d4portnacelle"; + name = "Combustion Chamber Blast Door Control"; + pixel_x = -8; + pixel_y = 24 + }, +/obj/machinery/button/blast_door{ + id_tag = "cChamber4pV"; + name = "First Deck Port Chamber Vent"; + pixel_x = 8; + pixel_y = 24 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"lCS" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/bed/chair/padded/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"lCT" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#6a97b0" + }, +/area/quartermaster/hangar/upper) +"lCV" = ( +/obj/random/junk, +/turf/simulated/floor/wood/walnut, +/area/maintenance/firstdeck/aftstarboard) +"lCZ" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/space) +"lDe" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge/upper) +"lDl" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + frequency = 1441; + id = "n2o_in"; + pixel_y = 1; + use_power = 1 + }, +/turf/simulated/floor/reinforced/n20, +/area/engineering/atmos) +"lDK" = ( +/obj/structure/closet/secure_closet/medical_sierrasenior, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"lDM" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/structure/cable/green, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/chargebay) +"lDQ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/table/rack, +/obj/item/stack/material/plasteel{ + amount = 20 + }, +/obj/item/stack/material/plasteel{ + amount = 20 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"lDR" = ( +/obj/machinery/ai_status_display, +/obj/paint/black, +/obj/paint_stripe/turquoise, +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai_teleport) +"lDS" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 9 + }, +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"lDU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/machinery/button/blast_door{ + id_tag = "petrovcell2"; + name = "Test Chamber Vent"; + pixel_x = -26; + pixel_y = -26 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"lDW" = ( +/obj/floor_decal/corner/purple{ + pixel_y = 1 + }, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/cart{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/janitor) +"lDX" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"lDZ" = ( +/obj/machinery/door/airlock/research{ + name = "Isolation Chambers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"lEe" = ( +/obj/floor_decal/corner/purple/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/heads/office/rd) +"lEq" = ( +/obj/structure/bed/chair/comfy/teal{ + dir = 8 + }, +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"lEz" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/foreport) +"lEA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/structure/sign/poster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"lEK" = ( +/obj/structure/morgue{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/closet/walllocker{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"lEP" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/airlock) +"lEQ" = ( +/obj/random/obstruction, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"lEY" = ( +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"lEZ" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"lFa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"lFe" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/item/trash/sosjerky, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"lFg" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"lFi" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"lFj" = ( +/obj/floor_decal/industrial/traffic{ + detail_color = "#a2819e"; + color = "#a2819e" + }, +/turf/simulated/floor/tiled/white, +/area/rnd/office) +"lFk" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"lFn" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"lFA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"lFH" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/wallframe_spawn/reinforced/no_grille, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/xenoflora) +"lFI" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/gambling) +"lFN" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#b19664" + }, +/area/quartermaster/hangar/upper) +"lFT" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/lime/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/cola{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"lFW" = ( +/obj/structure/table/rack/wooden, +/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"lFZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"lGb" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/central_stairwell) +"lGd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"lGh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"lGm" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"lGq" = ( +/obj/catwalk_plated/white, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/vacant/infirmary) +"lGr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + target_pressure = 3500 + }, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"lGA" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + dir = 8; + name = "Cryo Storage" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/sleep/cryo/firstdeck) +"lGG" = ( +/obj/floor_decal/corner/black/three_quarters, +/obj/floor_decal/corner/paleblue/bordercorner2{ + icon_state = "bordercolorcorner2"; + dir = 9 + }, +/obj/floor_decal/corner/paleblue/bordercorner2, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/machinery/vending/coffee{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"lGJ" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals_central6, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"lGO" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/security{ + name = "Security Checkpoint"; + secured_wires = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/opscheck) +"lGQ" = ( +/obj/machinery/floodlight{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"lGY" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"lGZ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"lHf" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/tcommsat/computer) +"lHj" = ( +/obj/machinery/door/window/southleft{ + dir = 1; + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/door/window/southleft{ + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + id_tag = "xenobioa3"; + name = "Containment Blast Doors" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level2) +"lHq" = ( +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"lHs" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"lHt" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"lHM" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"lHU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"lHV" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/green/border{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"lIc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"lIf" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/red, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/bunk) +"lIk" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/spray/sterilizine, +/obj/item/reagent_containers/spray/luminol, +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/blue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/forensic/lab) +"lIv" = ( +/obj/machinery/computer/rdconsole/robotics{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"lIy" = ( +/obj/structure/table/steel, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"lIQ" = ( +/obj/machinery/shipsensors, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/reinforced, +/area/exploration_shuttle/seats_place) +"lIY" = ( +/obj/item/bedsheet/green, +/obj/structure/bed/padded, +/turf/simulated/floor/wood/walnut, +/area/vacant/cargo) +"lJb" = ( +/obj/structure/filingcabinet/wallcabinet{ + pixel_y = 0; + pixel_x = 30 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/black/border{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation/second) +"lJi" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"lJm" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/space, +/area/space) +"lJo" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"lJp" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "escape_pod_4_pump" + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/grey/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod4/station) +"lJq" = ( +/obj/machinery/atmospherics/unary/tank{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"lJv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/closet/emcloset, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 5 + }, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"lJx" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/space) +"lJD" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"lJF" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"lJJ" = ( +/obj/machinery/hologram/holopad/longrange, +/obj/overmap/visitable/ship/sierra, +/obj/floor_decal/corner/blue/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"lJL" = ( +/obj/machinery/mech_recharger, +/mob/living/exosuit/premade/light/exploration, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/eva) +"lJN" = ( +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_staging_lockdown"; + name = "Infirmary Staging Shutters" + }, +/obj/wallframe_spawn/reinforced/polarized/full{ + id = "infimary_staging" + }, +/turf/simulated/floor/plating, +/area/medical/maintenance_equipstorage) +"lJY" = ( +/obj/machinery/floodlight{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/foreport) +"lKi" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/machinery/rotating_alarm/security_alarm{ + pixel_y = 13 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"lKo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/corner_techfloor_grid{ + dir = 6 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"lKq" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/open, +/area/space) +"lKv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"lKy" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"lKz" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"lKC" = ( +/obj/structure/table/gamblingtable, +/obj/item/deck/cards, +/turf/simulated/floor/carpet, +/area/vacant/gambling) +"lKH" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftstarboard) +"lKL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"lKQ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/space) +"lKS" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/obj/machinery/atm{ + pixel_y = -28 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"lKZ" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/flame/lighter/zippo, +/obj/item/clothing/mask/smokable/cigarette/cigar/havana, +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/floor_decal/carpet/purple, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/obj/floor_decal/carpet/purple{ + dir = 6 + }, +/obj/floor_decal/carpet/purple{ + dir = 5 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/captain/beach) +"lLc" = ( +/obj/structure/table/marble, +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "comissary_shutters"; + name = "Commissary Shutters" + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"lLf" = ( +/obj/structure/bed/chair/pew, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"lLh" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lightgrey/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"lLr" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"lLu" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"lLv" = ( +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border, +/obj/item/device/flashlight/lamp/lava/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"lLE" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/captain/secret_room/level_one) +"lLH" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/tool, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"lLL" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + id = "CO23p_in"; + injecting = 1; + use_power = 1 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d1starboard) +"lLW" = ( +/obj/structure/bed/chair/office/brown{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"lLY" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"lLZ" = ( +/obj/floor_decal/industrial/warning, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"lMi" = ( +/obj/structure/bed/chair/office/comfy/blue{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/hop/cobed) +"lMl" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/machinery/meter, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"lMu" = ( +/obj/machinery/door/airlock/civilian{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/dungeon_master_lounge) +"lMB" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/closet/emcloset, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"lME" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/mob/living/simple_animal/passive/mouse, +/turf/simulated/floor/wood{ + icon_state = "wood_broken3" + }, +/area/vacant/sauna) +"lMF" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d3port) +"lMG" = ( +/obj/machinery/computer/modular/preset/engineering{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"lMP" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck - Aft Hallway Heads" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"lMQ" = ( +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 8; + pixel_x = 22 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"lMR" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/infirmreception) +"lMW" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory) +"lMX" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/structure/sign/warning/internals_required{ + dir = 4; + pixel_x = -32 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"lMY" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/valve/shutoff/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"lNb" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/folder/nt, +/obj/item/folder/nt, +/obj/item/folder/nt, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"lNg" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/bluespace/chamber) +"lNk" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/disposal, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"lNl" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"lNm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"lNn" = ( +/obj/structure/sign/nanotrasen{ + dir = 4 + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/aftport) +"lNv" = ( +/obj/floor_decal/industrial/traffic{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"lNI" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/floor_decal/corner/green/border{ + dir = 6 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/sauna) +"lNM" = ( +/obj/landmark{ + name = "carpspawn" + }, +/obj/structure/catwalk, +/turf/simulated/open, +/area/space) +"lNS" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"lNU" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/crystal, +/area/crew_quarters/adherent) +"lNX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"lNZ" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"lOa" = ( +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 5 + }, +/obj/structure/closet/secure_closet/hop2, +/obj/item/book/manual/nt_sop, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hop/cobed) +"lOd" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"lOi" = ( +/obj/structure/table/woodentable, +/obj/item/trash/sosjerky, +/obj/decal/cleanable/dirt, +/obj/random/trash, +/turf/simulated/floor/wood/walnut, +/area/vacant/sauna) +"lOn" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/mining/brace{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition/storage) +"lOo" = ( +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/papershredder, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"lOp" = ( +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black/corner, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/bar/cobed) +"lOr" = ( +/obj/structure/bed/chair/padded/black{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"lOA" = ( +/obj/machinery/atmospherics/unary/freezer{ + icon_state = "freezer" + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"lOI" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/head_big) +"lOO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2, +/turf/simulated/floor/tiled, +/area/storage/primary) +"lOT" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"lOU" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"lPa" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"lPd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/firstdeck) +"lPf" = ( +/obj/landmark{ + name = "carpspawn" + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/open, +/area/space) +"lPg" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/thirddeck/starboard) +"lPl" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/center) +"lPo" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"lPp" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/closet/secure_closet/cabinet/forensics{ + name = "forensics technician's cabinet" + }, +/obj/item/storage/briefcase/crimekit{ + pixel_y = 10 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/forensic/lab) +"lPz" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 5 + }, +/obj/machinery/light_switch{ + pixel_x = 24; + dir = 8; + pixel_y = -5 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"lPF" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/hydroponics) +"lPG" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Central Hallway" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"lPI" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"lPV" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"lQb" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/fourthdeck/aft) +"lQj" = ( +/obj/structure/table/standard, +/obj/item/folder/nt, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"lQt" = ( +/obj/structure/table/standard, +/obj/item/roller_bed, +/obj/item/roller_bed, +/obj/item/roller_bed, +/obj/item/roller_bed, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/ward) +"lQv" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck - Central Hallway - Starboard"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"lQE" = ( +/obj/machinery/button/blast_door{ + id_tag = "heads_meeting"; + name = "Conference Room Shutters Control"; + pixel_y = 28; + pixel_x = 1 + }, +/obj/machinery/button/windowtint{ + id = "meeting_windows"; + pixel_x = 9; + pixel_y = 28 + }, +/obj/machinery/light_switch{ + pixel_x = -8; + pixel_y = 28 + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"lQF" = ( +/obj/floor_decal/techfloor, +/obj/machinery/camera/network/engine{ + c_tag = "Engine - Aft Port"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"lQM" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"lQP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"lQX" = ( +/obj/structure/mopbucket, +/obj/item/mop, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/eva) +"lQY" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"lRm" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"lRq" = ( +/turf/simulated/wall/prepainted, +/area/hydroponics/third_deck_storage) +"lRx" = ( +/obj/structure/closet/crate, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/smokes, +/obj/random/tank, +/obj/random/tool, +/obj/random/tool, +/obj/random/tech_supply, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/window/basic{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/maintenance/firstdeck/aftstarboard) +"lRN" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/interrogation/second) +"lRZ" = ( +/turf/simulated/wall/r_wall/hull, +/area/command/bsa) +"lSb" = ( +/obj/machinery/access_button/airlock_interior{ + master_tag = "ai_starboard"; + name = "interior access button"; + pixel_y = 28; + req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"lSc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"lSi" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/yellow/three_quarters, +/obj/item/device/megaphone, +/obj/item/device/destTagger{ + pixel_x = 4; + pixel_y = 3 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"lSl" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + opacity = 0 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"lSq" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/grey{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"lSt" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"lSx" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/xenobiology/xenoflora) +"lSK" = ( +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"lSZ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"lTj" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"lTx" = ( +/obj/machinery/suit_storage_unit/medical/alt, +/obj/structure/window/basic{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"lTE" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/space) +"lTI" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"lTP" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins/storage) +"lTT" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/hologram/holopad{ + pixel_y = 16; + pixel_x = 16 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"lTY" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"lTZ" = ( +/turf/simulated/wall/prepainted, +/area/chapel/mortuary) +"lUa" = ( +/obj/machinery/door/window{ + autoset_access = 0; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"lUd" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/item/tableflag, +/obj/vehicle/train/cargo/trolley, +/obj/floor_decal/spline/plain/brown, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"lUe" = ( +/obj/structure/bed/sofa/m/brown{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/actor/stage) +"lUi" = ( +/obj/structure/cable/green{ + 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/door/window/brigdoor/westleft{ + id_tag = "iaaright"; + req_access = newlist(); + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/forensic/lab) +"lUl" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/simulated/open, +/area/space) +"lUy" = ( +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"lUz" = ( +/obj/structure/table/rack, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/freezer, +/obj/item/storage/box/masks, +/obj/item/storage/box/masks, +/obj/item/storage/box/syringes, +/obj/item/storage/box/syringes, +/obj/item/storage/box/latexgloves, +/obj/item/storage/box/nitrilegloves, +/obj/item/storage/box/beakers, +/obj/machinery/light, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"lUI" = ( +/obj/floor_decal/corner/purple{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"lUK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"lUW" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"lVe" = ( +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"lVm" = ( +/obj/floor_decal/corner/green/half, +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"lVr" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 9 + }, +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"lVC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/mime, +/turf/simulated/floor/wood/walnut, +/area/vacant/gambling) +"lVJ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"lVP" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/red/border, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"lVR" = ( +/obj/structure/closet/secure_closet/prospector, +/obj/item/shuttle_beacon, +/obj/item/device/radio, +/obj/item/storage/belt/utility/full, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"lVT" = ( +/obj/floor_decal/carpet/blue2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/hop/cobed) +"lWc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/red/bordercorner2, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"lWe" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/conveyor{ + dir = 1; + id = "charon_cargo_in"; + name = "charon external conveyor belt" + }, +/turf/simulated/floor/reinforced, +/area/exploration_shuttle/airlock) +"lWg" = ( +/obj/structure/bed/chair/comfy/purple{ + dir = 8 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/sleep/bunk) +"lWr" = ( +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_soft/full{ + dir = 8 + }, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"lWs" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod3/station) +"lWt" = ( +/turf/simulated/wall/r_wall/hull, +/area/turret_protected/ai_teleport) +"lWu" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"lWC" = ( +/obj/floor_decal/corner/green/half{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 6 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"lWD" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"lWE" = ( +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/fore) +"lWI" = ( +/obj/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"lWK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"lWO" = ( +/obj/structure/table/standard, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/item/reagent_containers/glass/beaker/sulphuric, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/reagent_dispensers/acid{ + density = 0; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/development) +"lWR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"lXc" = ( +/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" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"lXk" = ( +/obj/machinery/access_button/airlock_exterior{ + master_tag = "prototype_controller"; + pixel_x = 23; + pixel_y = 23 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/prototype/engine) +"lXp" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"lXx" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "hangar_checkpoint_shutters"; + name = "Hangar Deck Checkpoint Shutters"; + opacity = 0 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green, +/turf/simulated/floor/plating, +/area/security/sierra/dockcheck) +"lXy" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/foreport) +"lXN" = ( +/turf/simulated/wall/prepainted, +/area/storage/airlock_canisters) +"lXQ" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"lXY" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for shutters."; + id_tag = "hangar_ts_shutters"; + name = "Secondary Hallway Shutters"; + pixel_x = 5; + pixel_y = 1; + req_access = list("ACCESS_SECURITY") + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for shutters."; + id_tag = "hangar_hallway_shutters"; + name = "Hallway Checkpoint Shutters"; + pixel_x = -5; + pixel_y = -3; + req_access = list("ACCESS_SECURITY") + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for shutters."; + id_tag = "hangar_checkpoint_shutters"; + name = "Checkpoint Window Shutters"; + pixel_x = -5; + pixel_y = 7; + req_access = list("ACCESS_SECURITY") + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"lYg" = ( +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/suits) +"lYk" = ( +/obj/floor_decal/borderfloor, +/obj/machinery/light, +/obj/floor_decal/corner/black/border, +/obj/floor_decal/corner/black/border, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation/second) +"lYm" = ( +/obj/structure/bed/chair/wheelchair, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"lYo" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"lYw" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"lYx" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"lYy" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/bluespace/chamber) +"lYA" = ( +/obj/structure/reagent_dispensers/coolanttank, +/turf/simulated/floor/plating, +/area/shuttle/petrov/test_room) +"lYK" = ( +/obj/machinery/door/window/southleft{ + dir = 1; + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/door/window/southleft{ + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "xenobio2"; + name = "Containment Blast Doors" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/blue, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"lYM" = ( +/obj/machinery/suit_storage_unit/security/alt, +/obj/structure/railing/mapped, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/suits) +"lYP" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck - Central Hallway - Fore"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"lZa" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/green, +/obj/floor_decal/corner/red/bordercee{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"lZe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod3/station) +"lZj" = ( +/turf/simulated/open, +/area/hallway/primary/bridgedeck/central_stairwell) +"lZm" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "skipjack_shuttle_pump" + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/grey/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod3/station) +"lZF" = ( +/obj/decal/cleanable/dirt, +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"lZJ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/engineering{ + name = "Fusion Testing Facility"; + secured_wires = 1 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/vacant/prototype/control) +"lZQ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/civilian{ + locked = 1 + }, +/obj/item/taperoll/engineering/applied, +/obj/decal/cleanable/blood/tracks/footprints, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/foreport) +"lZU" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/prepainted, +/area/security/sierra/interrogation/second) +"lZV" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 5 + }, +/obj/item/paper/sierra/engineering_SMairlock, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"lZZ" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/fourthdeck/aft) +"mac" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"mae" = ( +/obj/floor_decal/corner/black/border{ + dir = 4 + }, +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"mah" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/maintenance, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/lounge) +"mal" = ( +/obj/structure/closet/crate/plastic, +/obj/machinery/camera/network/hangar{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"maw" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/deckofficer) +"maz" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"maC" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/power) +"maQ" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"maW" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"maZ" = ( +/obj/structure/table/woodentable, +/obj/item/storage/secure/briefcase, +/obj/item/device/taperecorder, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"mba" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Gravitational Generator Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"mbd" = ( +/turf/simulated/wall/prepainted, +/area/hallway/infirmary) +"mbf" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "bar<-cafe"; + name = "Bar Shutters" + }, +/obj/floor_decal/industrial/hatch/grey, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/bar) +"mbg" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Entry Shutters" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white/monotile, +/area/hallway/infirmary) +"mbh" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular/open{ + id_tag = "xenobioa1"; + name = "Containment Blast Doors" + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level2) +"mbk" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance{ + name = "Tech Storage" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/tech) +"mbl" = ( +/obj/machinery/atmospherics/unary/engine, +/obj/structure/sign/warning/hot_exhaust{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/plating, +/area/guppy_hangar/start) +"mbq" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"mbu" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"mby" = ( +/obj/item/modular_computer/telescreen/preset/generic{ + pixel_y = 26 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"mbH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"mbT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"mbV" = ( +/obj/floor_decal/carpet/blue, +/obj/structure/flora/pottedplant/decorative, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa/high_sec) +"mcp" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 8 + }, +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "escape_pod_1_pump" + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/grey/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod1/station) +"mcq" = ( +/obj/floor_decal/corner/green/half{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"mcr" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"mcw" = ( +/obj/machinery/door/airlock/engineering{ + name = "Aft Port Solar Access"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar) +"mcz" = ( +/obj/machinery/access_button/airlock_interior{ + master_tag = "fd_starboard"; + name = "interior access button"; + pixel_x = -24; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/machinery/door/airlock/external/glass/bolted/cycling{ + id_tag = "fd_starboard_inner"; + name = "First Deck Port Airlock" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"mcA" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"mcD" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"mcI" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/industrial/danger, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"mcN" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/camera/network/command{ + c_tag = "Command - EVA"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"mcO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"mcP" = ( +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"mcU" = ( +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/table/rack, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/obj/random/tool, +/obj/random/tool, +/obj/random/tool, +/obj/random/tool, +/obj/random/tool, +/obj/random/tool, +/obj/random/tool, +/obj/random/tool, +/obj/random/tool, +/obj/random/tank, +/obj/random/tank, +/obj/random/tank, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"mde" = ( +/obj/machinery/computer/air_control{ + dir = 8; + name = "Atmospheric Sensors"; + sensor_name = "Charon Out"; + sensor_tag = "calypso_out" + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/paleblue/bordercorner2, +/obj/structure/window/reinforced/polarized, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cockpit) +"mdn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"mdp" = ( +/obj/structure/table/reinforced, +/obj/machinery/fabricator/micro/bartender{ + pixel_x = 9; + pixel_y = 7 + }, +/obj/item/storage/box/beakers, +/obj/floor_decal/corner/beige/three_quarters{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"mdr" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"mdA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"mdB" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"mdD" = ( +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"mdE" = ( +/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/light/spot{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"mdM" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"mdZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"meb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"med" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/servers) +"meg" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"men" = ( +/obj/machinery/constructable_frame/machine_frame, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/maintenance/abandoned_hydroponics) +"mep" = ( +/obj/floor_decal/corner/grey{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"mes" = ( +/obj/structure/table/steel, +/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/spidercube, +/obj/item/reagent_containers/food/snacks/monkeycube/spidercube, +/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/spidercube, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/item/reagent_containers/glass/beaker/vial{ + name = "vial (mutational toxin)" + }, +/obj/item/reagent_containers/glass/beaker/vial, +/obj/item/scalpel/basic{ + pixel_y = 12 + }, +/obj/spider/stickyweb, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level1) +"meu" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Conference Room Maintenance" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/bridge/meeting_room) +"mez" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"meC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"meE" = ( +/obj/structure/bed/sofa/r/teal{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"meG" = ( +/obj/structure/filingcabinet, +/obj/item/folder, +/obj/item/folder, +/turf/simulated/floor/tiled/dark, +/area/chapel/office) +"meH" = ( +/turf/simulated/floor/reinforced{ + name = "Holodeck Projector Floor" + }, +/area/holodeck/alphadeck) +"meJ" = ( +/turf/simulated/wall/r_wall/hull, +/area/teleporter) +"meN" = ( +/obj/floor_decal/corner/black/mono, +/obj/machinery/door/airlock/glass/civilian{ + dir = 4; + name = "Commissary Counter" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"meO" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/structure/table/woodentable/walnut, +/obj/machinery/light/spot, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"meS" = ( +/obj/structure/hygiene/sink/kitchen{ + pixel_y = 24 + }, +/obj/floor_decal/corner/grey/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"meU" = ( +/obj/decal/cleanable/dirt, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"meX" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"meY" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 8 + }, +/obj/machinery/status_light{ + id_tag = "ReacEng1"; + name = "Deck Four Starboard status indicator"; + pixel_y = -32 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"meZ" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/computer/modular/preset/medical, +/turf/simulated/floor/tiled/dark, +/area/turret_protected/ai) +"mfl" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"mfq" = ( +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/firstdeck) +"mfr" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"mfs" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"mft" = ( +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/sauna) +"mfv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"mfx" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 8; + sort_type = "Research Equipment"; + name = "Research Equipment" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"mfA" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/lounge/upper) +"mfF" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/docking) +"mfI" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod1/station) +"mfJ" = ( +/obj/structure/cart{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"mfK" = ( +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Atmospherics Subgrid"; + name_tag = "Atmospherics Subgrid" + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/steel, +/obj/machinery/button/blast_door{ + dir = 4; + id_tag = "eng_lockdown_emg3"; + name = "Emergency Exit Control"; + pixel_x = -24; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/structure/catwalk, +/obj/structure/cable/cyan, +/turf/simulated/floor/plating, +/area/engineering/engine_smes) +"mfL" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"mfM" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"mfP" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"mfZ" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"mgc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"mge" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai_upload) +"mgg" = ( +/obj/machinery/portable_atmospherics/canister/empty, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/hangar_atmos) +"mgx" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/head/deck3) +"mgy" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"mgz" = ( +/obj/structure/closet/secure_closet/personal, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"mgE" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"mgK" = ( +/obj/structure/largecrate, +/obj/random/drinkbottle, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"mgL" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"mgN" = ( +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"mgW" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/storage, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"mgX" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"mhc" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"mhi" = ( +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/gym) +"mhn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/navbeacon/sierra/TD_port, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"mho" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/prepainted, +/area/security/sierra/evidence) +"mhx" = ( +/obj/machinery/suit_storage_unit/science, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/brown/border{ + dir = 5 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"mhF" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/command/bsa) +"mhK" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/hangar_atmos) +"mhL" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/flasher{ + id_tag = "security_perm_chamber_flash"; + name = "Floor mounted flash" + }, +/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/steel_grid, +/area/security/prison) +"mhN" = ( +/obj/machinery/constructable_frame/machine_frame, +/turf/simulated/floor/wood/yew, +/area/crew_quarters/heads/office/ce/cobed) +"mhO" = ( +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation/second) +"mhS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"mhV" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"mib" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/reagent_containers/food/drinks/cans/speer, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"mih" = ( +/obj/structure/hygiene/shower, +/obj/structure/window/basic{ + dir = 8 + }, +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/gym) +"mik" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow, +/obj/machinery/meter, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"mip" = ( +/obj/machinery/door/window, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/galley/freezer) +"mit" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"miw" = ( +/obj/structure/table/steel, +/obj/machinery/cell_charger, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"miC" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 8 + }, +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "escape_pod_2_pump" + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/grey/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod2/station) +"miI" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"miL" = ( +/obj/floor_decal/corner/darkblue/mono, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"miM" = ( +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"miS" = ( +/obj/machinery/computer/modular/preset/engineering{ + dir = 4 + }, +/obj/machinery/status_light{ + alert_temperature = 340; + id_tag = "BSDrive"; + name = "Bluespace Drive status indicator"; + pixel_x = -24 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"miW" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/obj/structure/sign/poster/nyc/zeng_hu_pharmaceuticals{ + pixel_x = -32 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"miY" = ( +/obj/floor_decal/corner/paleblue, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/ward) +"mjf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"mjk" = ( +/obj/structure/closet/crate/secure/biohazard, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/eva) +"mjB" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/corner/purple/bordercorner, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"mjE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"mjK" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"mjM" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/empty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/canister) +"mjY" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"mjZ" = ( +/obj/machinery/door/airlock/command{ + id_tag = "cmodoor"; + name = "Chief Medical Officer"; + secured_wires = 1; + stripe_color = "#00e1ff"; + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/heads/office/cmo) +"mkc" = ( +/obj/structure/curtain/open/shower, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"mkh" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"mkj" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + id_tag = "xenobio3"; + name = "Containment Blast Doors" + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level1) +"mkq" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/substation/bridgedeck) +"mkt" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/ship_map, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"mku" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"mkE" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/shieldwallgen, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"mkQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"mkS" = ( +/turf/simulated/floor/tiled/white, +/area/vacant/infirmary) +"mli" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/structure/handrail, +/turf/simulated/floor/airless, +/area/space) +"mlr" = ( +/obj/floor_decal/carpet/blue2, +/obj/floor_decal/carpet/blue2{ + dir = 4 + }, +/obj/floor_decal/carpet/blue2{ + dir = 6 + }, +/obj/structure/table/standard, +/obj/item/modular_computer/tablet/lease/preset/command, +/obj/item/storage/secure/safe{ + pixel_x = 32 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/hop/cobed) +"mls" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"mlu" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/light/small, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"mlH" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/random/storage, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"mlT" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"mmh" = ( +/obj/structure/sign/warning/fire{ + dir = 1; + pixel_y = -40 + }, +/obj/machinery/light/spot, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"mmm" = ( +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"mmo" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/solar/starboard) +"mmt" = ( +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/steel_grid, +/area/security/range) +"mmx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"mmy" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/green/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/green/bordercorner2{ + icon_state = "bordercolorcorner2"; + dir = 9 + }, +/obj/machinery/recharge_station, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "virology_access"; + name = "Virology Lab Access Console"; + req_access = list("ACCESS_VIRO"); + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"mmH" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/lime/border{ + dir = 5 + }, +/obj/structure/bed/chair/comfy/beige{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"mmJ" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"mmK" = ( +/obj/floor_decal/corner/black{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border, +/obj/structure/cable/green, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"mmQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"mmR" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/thruster/d1starboard) +"mmZ" = ( +/obj/structure/table/woodentable/ebony, +/obj/machinery/light{ + dir = 4 + }, +/obj/item/device/synthesized_instrument/violin, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"mnb" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/forestarboard) +"mnk" = ( +/obj/floor_decal/spline/fancy/wood/corner, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"mnp" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_north = 2; + tag_south = 1; + tag_west = 8 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"mnv" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/hologram/holopad{ + pixel_x = 16 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/exploration/eva) +"mnx" = ( +/obj/structure/lattice, +/obj/floor_decal/industrial/traffic{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"mnz" = ( +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo" + }, +/obj/floor_decal/corner/green/three_quarters{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"mnH" = ( +/obj/floor_decal/spline/fancy/wood/corner, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"mnN" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + locked = 1; + dir = 4 + }, +/obj/item/taperoll/engineering/applied, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"mnO" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/machinery/portable_atmospherics/reagent_sublimator/sauna, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/item/device/flashlight/lamp/lava/orange{ + pixel_y = 15; + pixel_x = -3 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sauna) +"mnP" = ( +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation/second) +"mnV" = ( +/obj/catwalk_plated/dark, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/center) +"mnW" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"moe" = ( +/obj/structure/sign/warning/airlock{ + dir = 8 + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/solar/bridge_starboard) +"moh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"mop" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/lino, +/area/command/chief_steward) +"moz" = ( +/obj/floor_decal/corner/purple{ + dir = 10 + }, +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"moM" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/rotating_alarm/security_alarm{ + pixel_y = 13 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"moO" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/armory) +"moY" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/door/window{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head) +"mpe" = ( +/turf/simulated/wall/r_wall/hull, +/area/engineering/atmos/storage) +"mpg" = ( +/obj/floor_decal/corner/black/three_quarters{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + icon_state = "bordercolorcorner2"; + dir = 9 + }, +/obj/floor_decal/corner/paleblue/bordercorner2, +/obj/floor_decal/corner/paleblue/bordercorner, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"mpq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"mpw" = ( +/obj/structure/table/rack, +/obj/item/screwdriver, +/obj/item/crowbar, +/obj/item/device/binoculars, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/recharger/wallcharger{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"mpx" = ( +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "hangar_atmos_storage"; + name = "Storage Shutters" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar_atmos) +"mpB" = ( +/obj/machinery/door/firedoor, +/obj/structure/plasticflaps, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_cyborg_station) +"mpE" = ( +/obj/machinery/vitals_monitor, +/turf/simulated/floor/plating, +/area/vacant/infirmary) +"mpK" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/cobed) +"mpS" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "iaaleft" + }, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"mpT" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/spline/plain/brown{ + dir = 8 + }, +/obj/structure/displaycase, +/obj/item/gun/projectile/revolver/capgun, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/actor) +"mpU" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 8 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"mpV" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"mpY" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"mqc" = ( +/obj/floor_decal/corner/red, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"mqd" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/tcommsat/computer) +"mqe" = ( +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"mqj" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/center) +"mqs" = ( +/obj/machinery/washing_machine, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/prison) +"mqx" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/cryopod{ + dir = 2 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"mqO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"mqP" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + frequency = 1441; + id = "h2_in"; + pixel_y = 1; + use_power = 1 + }, +/turf/simulated/floor/reinforced/hydrogen, +/area/engineering/atmos) +"mrg" = ( +/obj/structure/curtain/open/bed, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/seconddeck) +"mrh" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/photocopier/faxmachine{ + department = "Captain" + }, +/obj/item/paper/sierra/captain_fax, +/obj/machinery/recharger/wallcharger{ + pixel_y = 24 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"mri" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/quartermaster/expedition) +"mrA" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + id_tag = "null"; + name = "Captain's office"; + secured_wires = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/captain) +"mrD" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"mrS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"mrY" = ( +/obj/floor_decal/corner/black/border{ + dir = 9 + }, +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"msd" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"mse" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown1_1" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"msg" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology) +"msi" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/aft_stairwell) +"msj" = ( +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"msl" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/security{ + name = "Guards' Equipment" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/equipment) +"msn" = ( +/obj/machinery/r_n_d/destructive_analyzer, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/development) +"msq" = ( +/obj/decal/cleanable/dirt, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/utility) +"msv" = ( +/obj/structure/catwalk, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"msw" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 9 + }, +/obj/structure/bed/chair/padded/yellow{ + dir = 1; + icon_state = "chair_preview" + }, +/obj/structure/cable/green, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"msz" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/crusher_base{ + icon_state = "rightcap" + }, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"msE" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/storage/eva) +"msF" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular{ + id_tag = "vir_blast_window" + }, +/turf/simulated/floor/plating, +/area/medical/virology) +"msI" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/self_destruct, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/nuke_storage) +"msN" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/firedoor, +/obj/paint_stripe/blue, +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cargo_l) +"msZ" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 8 + }, +/obj/machinery/air_sensor/nacelle/fourth, +/obj/machinery/atmospherics/unary/outlet_injector{ + injecting = 1; + use_power = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d1port) +"mtj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod2/station) +"mtt" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"mtC" = ( +/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/structure/catwalk, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"mtI" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs/upper) +"mtJ" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters/open{ + name = "Brig's visiting room shutters"; + id_tag = "visiting_room_windows_shutters" + }, +/obj/paint_stripe/red, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/security/prison) +"mtP" = ( +/obj/structure/closet/crate, +/obj/decal/cleanable/dirt, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"mtQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/medical/virology) +"mtR" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"mtW" = ( +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head) +"muc" = ( +/obj/structure/closet/secure_closet/security/sierra, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/light/spot, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"mue" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar_atmos) +"mui" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"mum" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"muo" = ( +/obj/item/shovel, +/obj/item/shovel, +/obj/item/pickaxe/xeno/hand, +/obj/item/pickaxe/xeno/hand, +/obj/item/device/scanner/mining, +/obj/item/device/scanner/mining, +/obj/item/storage/belt/utility/full, +/obj/structure/table/rack, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/eva) +"muq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/b_green/border, +/obj/machinery/conveyor_switch/oneway{ + id = "charon_cargo_out"; + name = "charon interior conveyor switch"; + pixel_x = 10; + pixel_y = 15 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"muw" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/assembly/robotics) +"muB" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"muF" = ( +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"muI" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"muW" = ( +/obj/structure/table/woodentable/maple, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/floor_decal/carpet/purple{ + dir = 9 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/office) +"muX" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/exploration_shuttle/power) +"mvi" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "escape_pod_4_pump" + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/grey/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod4/station) +"mvn" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"mvo" = ( +/obj/structure/bed/chair/shuttle{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "escape_pod_5_pump" + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"mvq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"mvy" = ( +/obj/structure/foamedmetal, +/turf/simulated/floor/plating, +/area/thruster/d1starboard) +"mvA" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/corner/purple, +/obj/machinery/camera/network/petrov{ + c_tag = "Petrov - Hallway" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"mvC" = ( +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/bridge/storage) +"mvD" = ( +/obj/floor_decal/corner/darkblue, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"mvM" = ( +/obj/machinery/alarm/monitor/isolation/xenobio{ + alarm_id = "xenobio2_alarm"; + dir = 8; + name = "Xenobiology Second Xenopen"; + pixel_x = 23 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"mvW" = ( +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"mwe" = ( +/obj/floor_decal/corner/darkblue/half{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue{ + dir = 6 + }, +/obj/machinery/disposal, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/sign/directions/bridge{ + pixel_y = 24; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"mwf" = ( +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/green{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"mwi" = ( +/obj/structure/closet/crate, +/obj/item/storage/toolbox/mechanical, +/obj/random/powercell, +/obj/random/powercell, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 8; + pixel_x = 14 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"mwj" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/firstdeck/centralport) +"mwo" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"mwx" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/seconddeck) +"mwC" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/computer/modular/preset/cardslot/command, +/obj/machinery/camera/all/command{ + c_tag = "AI Core - Starboard" + }, +/turf/simulated/floor/tiled/dark, +/area/turret_protected/ai) +"mwD" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/xenoflora) +"mwF" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"mwJ" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/decal/cleanable/cobweb2{ + dir = 4 + }, +/obj/machinery/shieldwallgen, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"mwN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"mwQ" = ( +/obj/machinery/door/airlock/glass/civilian{ + autoset_access = 0; + name = "Recreation Area" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/visitors) +"mwS" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/chem_master, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/scan) +"mxc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/gym) +"mxf" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/closet/secure_closet{ + name = "Secure Morgue Locker"; + req_access = list("ACCESS_MEDICAL") + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Medbay - Morgue - Autopsy" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"mxg" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"mxj" = ( +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"mxo" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/engineering/fuelbay) +"mxv" = ( +/obj/floor_decal/industrial/traffic{ + dir = 10; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/structure/bed/chair/office/purple, +/turf/simulated/floor/tiled/white, +/area/rnd/office) +"mxA" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + name = "Third Deck Port Airlock Access"; + id_tag = "td_port_inner" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"mxC" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d3starboard) +"mxD" = ( +/obj/machinery/photocopier, +/obj/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/floor_decal/carpet/blue{ + dir = 1 + }, +/obj/floor_decal/carpet/blue{ + dir = 9 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/item/storage/secure/safe{ + pixel_y = 28 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"mxG" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/material/ashtray/glass, +/obj/item/storage/fancy/smokable/killthroat, +/obj/floor_decal/techfloor/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftstarboard) +"mxK" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/armor/laserproof{ + pixel_y = 0 + }, +/obj/item/clothing/suit/armor/laserproof{ + pixel_y = 0 + }, +/obj/item/clothing/suit/armor/laserproof{ + pixel_y = 0 + }, +/obj/item/clothing/head/helmet/ablative, +/obj/item/clothing/head/helmet/ablative, +/obj/item/clothing/head/helmet/ablative, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/recharger/wallcharger{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"mxO" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "xenobotany_access"; + name = "Xenobotany Lab Access Console"; + req_access = list("ACCESS_XENOBIO","ACCESS_RESEARCH"); + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/chargebay) +"mxP" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"mxS" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/command{ + name = "Bridge Access" + }, +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/nano) +"myc" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"myd" = ( +/turf/simulated/wall/r_wall/hull, +/area/vacant/dormintories) +"myg" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/bridge) +"myh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"myn" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/tcommsat/computer) +"myr" = ( +/obj/machinery/telecomms/bus/preset_one, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"myu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/machinery/button/blast_door{ + dir = 8; + id_tag = "hangar_atmos_storage"; + name = "Storage Door Control"; + pixel_x = 24; + req_access = list(list("ACCESS_HANGAR","ACCESS_ENGINE_EQUIP")) + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"myB" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"myC" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"myD" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/decal/cleanable/cobweb, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"myN" = ( +/obj/structure/table/woodentable, +/obj/item/storage/secure/briefcase, +/obj/item/handcuffs, +/obj/item/grenade/smokebomb, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/maintenance/firstdeck/forestarboard) +"myS" = ( +/obj/structure/lattice, +/obj/floor_decal/industrial/traffic{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"myX" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/obj/item/book/manual/nt_sop, +/obj/decal/cleanable/blood, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"mzc" = ( +/obj/structure/bed/sofa/l/brown{ + dir = 1 + }, +/obj/machinery/light, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/actor/stage) +"mze" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"mzk" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/fuelbay) +"mzp" = ( +/obj/structure/catwalk, +/turf/simulated/wall/r_wall/hull, +/area/space) +"mzt" = ( +/obj/structure/holoplant, +/obj/machinery/camera/network/medbay{ + c_tag = "Infrimary - Hospital"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"mzu" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"mzv" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_3" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/center) +"mzC" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/papershredder, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"mzF" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/junction/mirrored{ + dir = 8 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"mzN" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/material/ashtray/bronze, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/wood/yew, +/area/crew_quarters/cafe) +"mzU" = ( +/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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"mzV" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"mzZ" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"mAf" = ( +/obj/structure/table/rack, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/random/tool, +/obj/random/tool, +/obj/random/tool, +/obj/item/flame/lighter/random, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/suplocker_room) +"mAw" = ( +/obj/structure/closet/crate/freezer, +/obj/random/mre, +/obj/random/mre, +/obj/random/mre, +/obj/random/drinkbottle, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/food/drinks/cans/sodawater, +/obj/item/reagent_containers/food/drinks/cans/tonic, +/obj/item/reagent_containers/food/drinks/cans/tonic, +/obj/item/reagent_containers/food/drinks/cans/iced_tea, +/obj/item/reagent_containers/food/drinks/milk, +/obj/item/reagent_containers/food/drinks/small_milk_choc, +/obj/item/reagent_containers/food/drinks/soymilk, +/turf/simulated/floor/tiled/monotile, +/area/vacant/cargo) +"mAx" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley/backroom) +"mAz" = ( +/obj/machinery/photocopier, +/obj/floor_decal/carpet/blue{ + dir = 4 + }, +/obj/floor_decal/carpet/blue{ + dir = 1 + }, +/obj/floor_decal/carpet/blue{ + dir = 5 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/item/storage/secure/safe{ + pixel_y = 28 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"mAA" = ( +/obj/structure/flora/pottedplant/large, +/obj/structure/sign/poster{ + pixel_y = 32 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"mAC" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"mAI" = ( +/obj/machinery/biogenerator, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"mAN" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/assembly/robotics) +"mAP" = ( +/turf/simulated/open, +/area/maintenance/firstdeck/centralstarboard) +"mAV" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"mAW" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/maintenance/firstdeck/centralstarboard) +"mBb" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/heads/office/cmo) +"mBc" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"mBf" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Entry Shutters" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white/monotile, +/area/hallway/infirmary) +"mBg" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/recharger, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/obj/structure/table/reinforced, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/lime/border{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/holocontrol) +"mBj" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/item/storage/mirror{ + pixel_x = 24; + pixel_y = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head/deck3) +"mBm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/solar/bridge_starboard) +"mBp" = ( +/obj/structure/table/standard, +/obj/random/clipboard, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/office) +"mBr" = ( +/obj/structure/table/rack, +/obj/random/toolbox, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftstarboard) +"mBz" = ( +/turf/simulated/wall/prepainted, +/area/rnd/development) +"mBA" = ( +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/lino, +/area/command/chief_steward) +"mBF" = ( +/obj/machinery/door/airlock/multi_tile/command{ + name = "Conference Room" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"mBG" = ( +/obj/structure/table/woodentable/maple, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/item/storage/box/donut, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"mBH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/aft) +"mCa" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"mCo" = ( +/obj/structure/table/steel, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar_atmos) +"mCr" = ( +/obj/structure/table/marble, +/obj/item/book/manual/chef_recipes, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Mess Hall - Kitchen - Distribution"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"mCs" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/aft) +"mCt" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"mCD" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"mCP" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/table/woodentable/walnut, +/obj/machinery/recharger, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"mCS" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/airlock) +"mCU" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"mDb" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/camera/network/engine{ + c_tag = "Engine - R-UST - TOKAMAK Interior"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"mDe" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "charon_cargo_in"; + name = "charon external conveyor belt" + }, +/turf/simulated/floor/reinforced, +/area/exploration_shuttle/airlock) +"mDg" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"mDi" = ( +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "cChamber3pV"; + name = "Chamber Vent" + }, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d1starboard) +"mDk" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"mDl" = ( +/obj/structure/table/rack, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/machinery/recharger/wallcharger{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/item/tank/jetpack/carbondioxide, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/suits) +"mDw" = ( +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/crew_quarters/sleep/cryo/south) +"mDx" = ( +/obj/machinery/air_sensor/nacelle/first/plasma, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d3starboard) +"mDy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"mDz" = ( +/obj/paint_stripe/turquoise, +/obj/paint/black, +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai) +"mDD" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"mDE" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Telecoms Storage"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + id_tag = "telecoms_s" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techmaint, +/area/tcommsat/storage) +"mDF" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/lime/border{ + dir = 9 + }, +/obj/structure/bed/sofa/l/brown, +/obj/machinery/vending/wallmed2{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"mDG" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - Toxins"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"mDL" = ( +/obj/machinery/shieldgen, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"mDN" = ( +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/floor_decal/corner/black/bordercorner, +/obj/floor_decal/corner/black/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hydroponics/third_deck_storage) +"mDS" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"mDV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"mDY" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sauna) +"mEd" = ( +/obj/random/ironing_board_structure, +/obj/item/ironing_iron, +/turf/simulated/floor/wood/walnut, +/area/vacant/dormintories) +"mEe" = ( +/obj/machinery/vending/engivend{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"mEj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"mEk" = ( +/obj/catwalk_plated, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"mEl" = ( +/obj/structure/cable/green, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Third Deck Subgrid"; + name_tag = "Third Deck Subgrid" + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/power/apc/critical{ + name = "south bump"; + pixel_y = -21 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/substation/fourthdeck) +"mEr" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"mEt" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/rotating_alarm/supermatter{ + dir = 8; + pixel_x = 14 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"mEz" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 4; + icon_state = "shutter0"; + opacity = 0 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_6" + }, +/turf/simulated/floor/plating, +/area/bridge/lobby) +"mEE" = ( +/obj/structure/bed/chair/office/comfy/red{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"mEP" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"mEX" = ( +/obj/structure/bed/chair/padded/green, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"mFj" = ( +/obj/machinery/door/window/southleft{ + name = "HoP's Desk"; + req_access = newlist(); + id_tag = "hop_windows" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "hop_shutters"; + name = "HoP Desk's Shutters"; + opacity = 0 + }, +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/hop) +"mFl" = ( +/obj/structure/railing/mapped, +/obj/decal/cleanable/cobweb2, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"mFo" = ( +/obj/floor_decal/chapel{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"mFq" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/security{ + dir = 4; + name = "Interrogation" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/interrogation/second) +"mFv" = ( +/obj/machinery/papershredder, +/obj/machinery/newscaster{ + pixel_x = 28 + }, +/obj/floor_decal/carpet/blue{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"mFw" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/shuttle_ceiling/sierra, +/area/space) +"mFy" = ( +/obj/structure/bed/chair/comfy/blue, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"mFG" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/closet/jcloset, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"mFL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"mFO" = ( +/obj/structure/table/woodentable/mahogany, +/obj/item/material/ashtray/plastic{ + pixel_y = 3; + pixel_x = 5 + }, +/obj/floor_decal/carpet/red{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"mFR" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/corner/brown/mono, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar_stairs/upper) +"mGd" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"mGe" = ( +/obj/structure/ladder, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/catwalk_plated/dark, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"mGr" = ( +/obj/paint_stripe/turquoise, +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai) +"mGx" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/obj/structure/sign/nanotrasen{ + dir = 4 + }, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod1/station) +"mGG" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/cell2) +"mGI" = ( +/obj/structure/ladder, +/obj/structure/cable{ + d2 = 8; + icon_state = "32-8"; + d1 = 32 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/supply{ + dir = 8 + }, +/obj/machinery/light/small, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/firstdeck/centralstarboard) +"mGJ" = ( +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#6a97b0" + }, +/area/quartermaster/hangar/upper) +"mGL" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/floor_decal/techfloor/orange/corner, +/obj/structure/window/boron_reinforced{ + dir = 8 + }, +/obj/structure/window/boron_reinforced{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"mGP" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"mGV" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"mGY" = ( +/obj/machinery/computer/modular/preset/civilian{ + dir = 8 + }, +/obj/machinery/light_switch{ + pixel_x = -10; + pixel_y = -21 + }, +/obj/machinery/button/windowtint{ + id = "rcheckinner_windows"; + pixel_x = 10; + pixel_y = -21 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"mHe" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"mHf" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/radiation, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"mHg" = ( +/obj/structure/table/standard, +/obj/item/towel/random, +/obj/item/towel/random{ + pixel_y = -4; + pixel_x = -5 + }, +/obj/item/towel/random, +/obj/item/towel/random{ + pixel_y = -4; + pixel_x = -5 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/gym) +"mHp" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"mHu" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"mHL" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/civilian{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/garden_room) +"mHS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"mHT" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/virology) +"mIg" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/structure/flora/pottedplant/large{ + pixel_y = 9 + }, +/obj/item/trash/chips{ + pixel_y = 3; + pixel_x = -12 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"mIq" = ( +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"mIs" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"mIF" = ( +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/camera/network/security{ + c_tag = "Security - Sergeant" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/sierra/sergeant) +"mIL" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"mIO" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"mIT" = ( +/obj/machinery/r_n_d/server/robotics, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/alarm/server{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/rnd/servers) +"mIX" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod2/station) +"mJi" = ( +/obj/turbolift_map_holder/sierra, +/turf/unsimulated/mask, +/area/hallway/primary/fourthdeck/center) +"mJj" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"mJq" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 4; + name = "Mental Health"; + sort_type = "Mental Health" + }, +/obj/machinery/tele_beacon, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"mJt" = ( +/obj/machinery/telecomms/server/presets/command, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"mJv" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/hallway/primary/firstdeck/central_stairwell) +"mJw" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/brown, +/obj/structure/curtain/open/bed{ + anchored = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/brown/border{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/prison) +"mJy" = ( +/obj/structure/filingcabinet{ + pixel_x = -6 + }, +/obj/structure/filingcabinet{ + pixel_x = 5 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"mJE" = ( +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 9 + }, +/obj/machinery/power/apc/super/critical{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/turret_protected/ai_teleport) +"mJM" = ( +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"mJQ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/paint_stripe/red, +/turf/simulated/wall/prepainted, +/area/security/sierra/equipment) +"mJU" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"mJV" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall/prepainted, +/area/chapel/mortuary) +"mJW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"mJZ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"mKb" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"mKd" = ( +/obj/structure/table/standard, +/obj/random/donkpocket_box, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/corner/beige/diagonal, +/obj/floor_decal/corner/brown/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/vacant/dormintories) +"mKh" = ( +/obj/floor_decal/spline/fancy/black, +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"mKo" = ( +/obj/structure/sign/poster{ + pixel_y = 32 + }, +/obj/machinery/newscaster{ + pixel_x = 28 + }, +/obj/item/stack/material/wood/walnut{ + amount = 2 + }, +/turf/simulated/floor/carpet, +/area/vacant/gambling) +"mKp" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/hygiene/sink{ + pixel_y = -12 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/breakroom) +"mKA" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"mKG" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"mKH" = ( +/turf/simulated/floor/plating, +/area/vacant/gambling) +"mKZ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"mLa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/breakroom) +"mLb" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"mLn" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"mLr" = ( +/obj/machinery/shield_diffuser, +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "sd_starboard_outer"; + name = "Second Deck Port Airlock" + }, +/obj/machinery/access_button/airlock_exterior{ + dir = 1; + master_tag = "sd_starboard"; + name = "exterior access button"; + pixel_x = 24; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"mLz" = ( +/obj/floor_decal/corner/black/mono, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"mLQ" = ( +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf{ + dir = 8 + }, +/obj/machinery/door/window/northleft{ + name = "Chemisty Desk" + }, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/blast/shutters/open{ + id_tag = "chemistry_lockdown"; + name = "Chemistry Shutters" + }, +/turf/simulated/floor/plating, +/area/medical/chemistry) +"mLR" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/center) +"mMg" = ( +/obj/structure/table/steel_reinforced, +/obj/item/folder/yellow, +/obj/item/folder/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"mMm" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/chemistry) +"mMs" = ( +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"mMx" = ( +/obj/structure/stairs/west, +/obj/structure/sign/directions/security{ + pixel_y = 24; + dir = 8 + }, +/obj/structure/sign/directions/infirmary{ + pixel_y = 31; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/central_stairwell) +"mMA" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"mMI" = ( +/obj/structure/closet/emcloset, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck - Fore Hallway"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"mMJ" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"mMK" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/floor_decal/corner/purple{ + dir = 5 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"mMN" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/clothing/mask/gas/mime, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor) +"mMR" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/stasis_cage, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/water_cell) +"mMT" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"mMW" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/light_switch{ + pixel_x = -24; + pixel_y = 12 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/vending/phoronresearch{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"mNf" = ( +/obj/floor_decal/corner/purple{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 6 + }, +/obj/machinery/computer/air_control{ + dir = 1; + input_tag = "fuel2p_in"; + name = "Fuel Supply Control"; + output_tag = "fuel2p_out"; + sensor_name = "Tank"; + sensor_tag = "ReacEngPhoron2" + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"mNg" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"mNi" = ( +/obj/structure/table/standard, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/floor_decal/corner/yellow/mono, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"mNr" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"mNs" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/rnd/xenobiology/xenoflora) +"mNv" = ( +/obj/item/grenade/chem_grenade/cleaner, +/obj/structure/table/steel, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"mNz" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"mND" = ( +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"mNF" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"mNG" = ( +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 1 + }, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"mNJ" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/xenoflora) +"mNS" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint_stripe/red, +/obj/wallframe_spawn/reinforced/polarized{ + id = "bo_windows" + }, +/turf/simulated/floor/plating, +/area/security/sierra/sergeant) +"mNV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"mOa" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"mOc" = ( +/obj/machinery/flasher{ + id_tag = "security_second_cell_flash"; + name = "Floor mounted flash" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"mOf" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/galley/backroom) +"mOl" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/machinery/recharger/wallcharger{ + dir = 4; + pixel_x = -22 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/machinery/photocopier, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"mOq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"mOt" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/south) +"mOx" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"mOK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"mOR" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"mOZ" = ( +/obj/machinery/floodlight, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"mPm" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"mPp" = ( +/obj/machinery/atmospherics/binary/pump, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"mPs" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"mPt" = ( +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"mPu" = ( +/obj/structure/bed/sofa/l/beige{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 6 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/cafe) +"mPv" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/structure/bed/sofa/m/brown{ + dir = 8 + }, +/obj/machinery/camera/network/fourth_deck{ + dir = 8; + c_tag = "Fourth Deck - Dock Bay - Starboard One" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"mPx" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/office/post) +"mPA" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"mPD" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"mPI" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals6, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"mPS" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 1; + pixel_y = -13 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"mPX" = ( +/obj/structure/bed/sofa/l/blue{ + dir = 8 + }, +/obj/floor_decal/carpet/red{ + dir = 4 + }, +/obj/floor_decal/carpet/red{ + dir = 1 + }, +/obj/floor_decal/carpet/red{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/captain/beach) +"mPZ" = ( +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"mQf" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/machinery/power/smes/buildable{ + RCon_tag = "Solar - Bridge Port" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/bridge_port) +"mQg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/grey/three_quarters, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"mQl" = ( +/obj/machinery/requests_console{ + department = "Research"; + departmentType = 3; + name = "Research RC"; + pixel_y = 30 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"mQn" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/handrail{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"mQt" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"mQI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/machinery/navbeacon/sierra/TD_fore7_starboard, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"mQJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d3starboard) +"mQK" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"mQL" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"mQV" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"mRe" = ( +/obj/structure/stairs/west, +/obj/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"mRk" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"mRo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/industrial/outline/grey, +/obj/floor_decal/steeldecal/steel_decals_central6, +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/hangar_atmos) +"mRr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"mRs" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"mRt" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"mRL" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftstarboard) +"mRM" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border, +/obj/structure/curtain/medical, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"mRP" = ( +/obj/structure/table/steel, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/fore) +"mRQ" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"mRS" = ( +/obj/structure/table/standard, +/obj/item/wheelchair_kit, +/obj/item/wheelchair_kit{ + pixel_y = 9 + }, +/obj/item/wheelchair_kit{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/ward) +"mRU" = ( +/turf/simulated/floor/tiled/techfloor, +/area/hallway/primary/fourthdeck/central_stairwell) +"mSf" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"mSi" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"mSl" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"mSv" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"mSx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"mSy" = ( +/obj/structure/catwalk, +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"mSA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"mSM" = ( +/obj/machinery/door/window/brigdoor/westleft{ + id_tag = "cap_room_window"; + req_access = list("ACCESS_CAPTAIN"); + dir = 2; + autoset_access = 0 + }, +/obj/floor_decal/carpet/blue, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/captain) +"mSU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + target_pressure = 15000 + }, +/obj/machinery/button/ignition{ + dir = 1; + id_tag = "engines-1"; + pixel_y = -34 + }, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "d1portnacelle"; + name = "Combustion Chamber Blast Door Control"; + pixel_x = -8; + pixel_y = -24 + }, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "cChamber1pV"; + name = "Third Deck Starboard Chamber Vent"; + pixel_x = 8; + pixel_y = -24 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"mSW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"mSX" = ( +/obj/structure/table/standard, +/obj/item/material/clipboard{ + pixel_y = -3; + pixel_x = -3 + }, +/obj/item/stamp/qm{ + pixel_y = 10; + pixel_x = 7 + }, +/obj/item/folder/yellow{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/item/pen{ + pixel_y = 7 + }, +/obj/item/pen/red{ + pixel_x = -2; + pixel_y = 9 + }, +/obj/item/sticky_pad/random{ + pixel_x = 9; + pixel_y = -4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/deckofficer) +"mSZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"mTi" = ( +/obj/floor_decal/industrial/danger{ + dir = 6 + }, +/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" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"mTl" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"mTB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"mTF" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"mTI" = ( +/turf/simulated/floor/greengrid, +/area/engineering/gravitaional_generator) +"mTY" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"mUc" = ( +/obj/structure/table/woodentable, +/obj/item/storage/fancy/smokable/killthroat, +/obj/item/storage/fancy/smokable/luckystars, +/obj/item/flame/lighter/zippo, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/maintenance/firstdeck/forestarboard) +"mUf" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/storage/toolbox/mechanical, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"mUi" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/machinery/camera/network/command{ + c_tag = "Command - AI Upload" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/computer/modular/preset/aislot/sysadmin, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"mUk" = ( +/turf/simulated/open, +/area/hallway/primary/seconddeck/aft_stairwell) +"mUm" = ( +/obj/decal/cleanable/dirt, +/obj/structure/table/woodentable, +/obj/item/dice/d20, +/obj/item/dice, +/obj/item/dice/d12, +/obj/machinery/light_construct{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/vacant/dungeon) +"mUp" = ( +/obj/structure/table/standard, +/obj/item/device/taperecorder, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation/second) +"mUq" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"mUJ" = ( +/obj/fluid_mapped, +/obj/item/clothing/under/shorts/blue, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"mUL" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/laundry) +"mUM" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 9 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"mUO" = ( +/obj/floor_decal/corner/black/full, +/obj/structure/closet/cabinet, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/corner/red, +/obj/item/book/manual/nt_tc, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos/cobed) +"mUQ" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 9 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d1starboard) +"mVa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/status_display{ + pixel_x = -32 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"mVb" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/random/obstruction, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"mVd" = ( +/obj/floor_decal/spline/plain/black{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"mVh" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"mVr" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"mVw" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"mVC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/navbeacon/sierra/TD_afthallway1, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"mVF" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"mWa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"mWc" = ( +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/galley/freezer) +"mWg" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/obj/floor_decal/corner/grey{ + dir = 5 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Mess Hall - Kitchen - Stewards" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"mWv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/bed/sofa/m/beige{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"mWw" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"mWA" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/handrail{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/cockpit) +"mXa" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 6 + }, +/obj/structure/bed/sofa/r/brown{ + dir = 8 + }, +/obj/landmark/start, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/cafe) +"mXd" = ( +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"mXf" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/item/folder/nt, +/obj/item/folder/white{ + pixel_y = 6; + pixel_x = 3 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"mXk" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/simulated/open, +/area/space) +"mXm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"mXn" = ( +/obj/machinery/constructable_frame/machine_frame, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"mXx" = ( +/obj/structure/adherent_bath, +/turf/simulated/floor/crystal, +/area/crew_quarters/adherent) +"mXP" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"mXR" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/tool, +/obj/random/tool{ + pixel_y = -6; + pixel_x = 7 + }, +/obj/random/tank{ + pixel_y = -3; + pixel_x = -7 + }, +/obj/random/tech_supply{ + pixel_y = 11; + pixel_x = 8 + }, +/obj/random/maintenance, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/machinery/light_construct{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/hangar) +"mXT" = ( +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"mYa" = ( +/obj/structure/table/steel, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/noticeboard{ + dir = 4; + pixel_x = -32 + }, +/obj/item/paper/sierra/engineering_comms, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"mYo" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/disposal, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/light, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"mYq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/research{ + dir = 8; + frequency = null; + id_tag = null; + name = "Xenobiology Atmospherics" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/xenobiology/atmos) +"mYt" = ( +/obj/machinery/r_n_d/destructive_analyzer, +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"mYA" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"mYD" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"mYF" = ( +/obj/floor_decal/corner/black/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"mYI" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 1 + }, +/obj/floor_decal/corner/red/half{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"mYK" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/hull, +/area/chapel/main) +"mYL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"mYM" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/bridge_port) +"mYP" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/status_display{ + pixel_y = -32 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/aft) +"mYR" = ( +/obj/structure/closet/secure_closet/medical_sierra, +/obj/item/device/radio/intercom/department/medbay{ + dir = 8; + pixel_x = 20 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"mYT" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"mYW" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"mYX" = ( +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"mZa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"mZk" = ( +/obj/structure/table/glass, +/obj/floor_decal/corner/yellow/mono, +/obj/machinery/recharger, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"mZn" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal, +/obj/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/floor_decal/corner/blue/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/forensic/lab) +"mZt" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/firstdeck/aftstarboard) +"mZx" = ( +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sleep/bunk) +"mZA" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"mZD" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc/critical{ + name = "west bump"; + dir = 8; + pixel_x = -21 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/substation/bridgedeck) +"mZE" = ( +/obj/random/trash, +/obj/item/roller_bed{ + pixel_y = 16 + }, +/obj/random/medical, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"mZF" = ( +/obj/machinery/smartfridge{ + opacity = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/galley/backroom) +"mZV" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/modular_computer/tablet/lease/preset/command, +/obj/machinery/button/windowtint{ + id = "cap_room_window"; + pixel_y = 24 + }, +/obj/floor_decal/carpet/blue{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/captain) +"mZX" = ( +/obj/structure/fitness/punchingbag, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"mZY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"nab" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"nae" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftport) +"nah" = ( +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"nai" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"nam" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/chemical_dispenser, +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"nan" = ( +/obj/structure/catwalk, +/obj/machinery/airlock_sensor{ + id_tag = "ai_starboard_sensor"; + master_tag = "solar_starboard"; + pixel_x = 10; + pixel_y = 27 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "ai_starboard"; + pixel_x = -5; + pixel_y = 21; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/machinery/atmospherics/unary/vent_pump{ + id_tag = "ai_starboard_pump" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"nap" = ( +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/access_button/airlock_exterior{ + master_tag = "solar_starboard"; + name = "exterior access button"; + pixel_x = -12; + pixel_y = -19; + req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") + }, +/turf/simulated/floor/airless, +/area/solar/starboard) +"nar" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/engineering{ + dir = 8; + name = "Third Deck Substation" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/substation/thirddeck) +"naC" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch{ + secured_wires = 1; + name = "Bridge Wardroom Maintenance" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/captain/beach) +"naG" = ( +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"naJ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftport) +"naT" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/turf/simulated/floor/tiled/steel_ridged, +/area/tcommsat/storage) +"nba" = ( +/obj/structure/railing/mapped, +/obj/machinery/barrier, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"nbf" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"nbg" = ( +/obj/structure/bookcase/manuals/engineering, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"nbi" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/open, +/area/space) +"nbj" = ( +/obj/machinery/photocopier, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"nbr" = ( +/obj/floor_decal/corner/red/mono, +/obj/structure/table/glass, +/obj/machinery/recharger, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"nbB" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell2) +"nbD" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"nbG" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/turf/simulated/floor/plating, +/area/rnd/development) +"nbJ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"nbP" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"nbT" = ( +/obj/structure/table/standard, +/obj/item/storage/box/lights/led_neon, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/janitor) +"nbW" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/red, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"nch" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 6 + }, +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"ncm" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/shuttle_landmark/petrov/start, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"ncx" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/cafe) +"ncz" = ( +/obj/random/closet, +/obj/structure/railing/mapped, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"ncG" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/exploration) +"ncM" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"ncQ" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 1 + }, +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck - Central Hallway" + }, +/obj/machinery/navbeacon/sierra/FD_forecentralhallway2, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"ncR" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/compactor) +"ncS" = ( +/obj/structure/table/glass, +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/darkblue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"ndf" = ( +/obj/structure/railing/mapped, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"ndi" = ( +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/floor_decal/corner/black/mono, +/obj/item/folder, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"ndj" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Entry Shutters" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/infirmreception) +"ndq" = ( +/obj/machinery/power/emitter{ + anchored = 1; + dir = 4; + id_tag = "EngineEmitter"; + state = 2 + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"ndt" = ( +/obj/machinery/constructable_frame/computerframe{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"ndv" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance{ + name = "Security Maintenance"; + req_access = newlist(); + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"ndx" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"ndy" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/computer/air_control{ + dir = 8; + input_tag = "o2_in"; + name = "Oxygen Supply Control"; + output_tag = "o2_out"; + sensor_name = "Tank"; + sensor_tag = "o2_sensor" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"ndG" = ( +/obj/structure/bed/chair/shuttle, +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/escape_pod/escape_pod9/station) +"ndK" = ( +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/seats_place) +"ndR" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/gas) +"neg" = ( +/obj/shuttle_landmark/ert/deck5, +/turf/space, +/area/space) +"nei" = ( +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"nel" = ( +/obj/structure/hygiene/shower{ + pixel_y = 15 + }, +/obj/machinery/door/window, +/obj/structure/window/basic{ + dir = 4 + }, +/obj/structure/hygiene/drain/bath, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/obj/random/soap, +/obj/item/towel/fleece, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"neo" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/hull, +/turf/simulated/floor/plating, +/area/crew_quarters/sauna) +"neA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"neC" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4; + icon_state = "map_connector" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"neE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/machinery/sleeper, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod4/station) +"neK" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"neL" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"neP" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "civsafedoorport"; + name = "safe room door-control"; + dir = 4; + pixel_x = -21 + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/seconddeck) +"neR" = ( +/obj/floor_decal/techfloor/orange{ + dir = 10 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"nfe" = ( +/obj/structure/curtain/black, +/obj/structure/wall_frame, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/vacant/cargo) +"nfl" = ( +/obj/structure/cable/green{ + 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 = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/sleep/cryo/bridge) +"nfn" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/ocp_wall, +/area/shuttle/petrov/gas) +"nfo" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"nfq" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"nfr" = ( +/obj/structure/closet/secure_closet/adjutant, +/obj/item/modular_computer/tablet/lease/preset/command, +/obj/item/device/flash, +/obj/item/device/flashlight, +/obj/item/storage/secure/safe{ + pixel_y = 24 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/item/gun/energy/gun/small/secure, +/obj/floor_decal/corner/darkblue/mono, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/adjutants) +"nfJ" = ( +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/development) +"nfK" = ( +/obj/machinery/light, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/b_green/border, +/obj/structure/bed/chair/shuttle/green{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/seats_place) +"nfL" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"nfV" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"nga" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/substation/thirddeck) +"ngg" = ( +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ngh" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"ngm" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/access_button/airlock_exterior{ + pixel_y = 24; + master_tag = "solar_bridge_airlock"; + pixel_x = -26 + }, +/turf/simulated/floor, +/area/solar/bridge_starboard) +"ngE" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/sign/directions/science{ + pixel_y = 24; + dir = 4 + }, +/obj/structure/sign/directions/infirmary{ + dir = 4; + pixel_y = 31 + }, +/obj/machinery/navbeacon/sierra/FD_forecentralhallway2, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"ngG" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"ngK" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/seconddeck/foreport) +"ngL" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/structure/bed/sofa/m/brown, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"ngO" = ( +/obj/floor_decal/corner/lime/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"ngU" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"ngV" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft) +"nhh" = ( +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"nhq" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"nht" = ( +/obj/machinery/light, +/obj/machinery/telecomms/hub/preset, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"nhv" = ( +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1port) +"nhx" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"nhE" = ( +/obj/structure/hygiene/shower{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/decal/cleanable/cobweb{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/obj/item/camera_assembly, +/turf/simulated/floor/tiled/freezer, +/area/vacant/sauna) +"nhI" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"nhU" = ( +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/medical) +"nhX" = ( +/obj/machinery/door/airlock/civilian{ + name = "Theatre"; + autoset_access = 0 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/actor/stage) +"nib" = ( +/obj/structure/bed/chair/office/purple, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/development) +"nic" = ( +/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/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/navbeacon/sierra/TD_centralhallway3, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"nig" = ( +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/glass, +/obj/floor_decal/spline/fancy/black{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"nim" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"nit" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"niv" = ( +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/docking) +"niz" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_north = 2; + tag_south = 1; + tag_west = 8 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"niA" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"niF" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "packageSort1" + }, +/turf/simulated/floor/plating, +/area/quartermaster/office/post) +"niH" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"niN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 9 + }, +/turf/simulated/wall/r_wall/hull, +/area/engineering/engine_room) +"niO" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"niY" = ( +/obj/structure/iv_stand, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/maintenance_equipstorage) +"njb" = ( +/obj/machinery/space_heater, +/obj/item/screwdriver, +/turf/simulated/floor/plating, +/area/crew_quarters/sauna) +"njl" = ( +/obj/structure/bed/chair/armchair/beige{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"njz" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/corner/black/mono, +/obj/item/folder, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"njA" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/research{ + dir = 4; + name = "Locker Room"; + req_access = newlist() + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"njE" = ( +/obj/structure/table/steel, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"njG" = ( +/obj/machinery/door/window/brigdoor/westleft{ + id_tag = "cap_room_window"; + req_access = list("ACCESS_CAPTAIN"); + dir = 4; + autoset_access = 0 + }, +/obj/floor_decal/carpet/blue{ + dir = 4 + }, +/obj/structure/cable/green{ + 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 = 5 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/captain) +"njH" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"njJ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"njQ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"njV" = ( +/obj/structure/table/standard, +/obj/random/firstaid, +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod3/station) +"njY" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/no_grille, +/turf/simulated/floor/plating, +/area/quartermaster/expedition/eva) +"nkf" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"nkh" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/gas) +"nkj" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/central_stairwell) +"nkr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 4 + }, +/obj/structure/sign/warning/pods/south{ + dir = 8; + pixel_x = 32 + }, +/obj/floor_decal/borderfloorblack/corner, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"nkv" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"nkB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"nkC" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"nkG" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"nkL" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/hologram/holopad, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/machinery/navbeacon/sierra/TD_centralhallway2, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"nkO" = ( +/obj/random/obstruction, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"nkP" = ( +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"nkV" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"nkW" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/storage/primary) +"nlc" = ( +/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/floor_decal/steeldecal/steel_decals6{ + dir = 5 + }, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 8; + sort_type = "Research Experimental"; + name = "Research Experimental" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"nlk" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/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" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"nlm" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, +/obj/catwalk_plated, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"nlo" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/steel_grid, +/area/command/bsa) +"nlq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/red, +/obj/machinery/button/blast_door{ + id_tag = "security_permabrig_third_cell_shutters"; + name = "3d Cell Shutters"; + req_access = list("ACCESS_SECURITY"); + pixel_x = 21; + dir = 8 + }, +/obj/machinery/button/flasher{ + dir = 8; + pixel_x = 22; + pixel_y = -9; + id_tag = "security_third_cell_flash"; + req_access = list("ACCESS_SECURITY") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"nlt" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"nlv" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/holoplant, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"nlx" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/paleblue, +/obj/structure/flora/pottedplant/smallcactus{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/machinery/light_construct{ + dir = 8 + }, +/obj/random/maintenance, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"nlA" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"nlC" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"nlI" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 4 + }, +/turf/simulated/wall/titanium, +/area/guppy_hangar/start) +"nlJ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/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" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/thirddeck) +"nlQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"nlS" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"nlW" = ( +/obj/machinery/sleeper/survival_pod{ + dir = 4 + }, +/obj/structure/sign/emergonly{ + dir = 4; + pixel_x = -32 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/sign/directions/med{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"nlX" = ( +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/smg, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory) +"nmb" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"nmf" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/seconddeck) +"nmj" = ( +/turf/simulated/floor/reinforced/nitrogen, +/area/engineering/atmos) +"nmr" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"nms" = ( +/obj/machinery/alarm/monitor/isolation/xenobio{ + alarm_id = "xenobio5_alarm"; + name = "Xenobiology Aqua Xenopen"; + pixel_y = 29 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/stasis_cage, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/water_cell) +"nmu" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"nmN" = ( +/obj/structure/ladder, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/lattice, +/turf/simulated/open, +/area/space) +"nmP" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"nmS" = ( +/obj/machinery/atmospherics/unary/vent_pump/tank{ + dir = 8; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "o2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/engineering/atmos) +"nmT" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/grey{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"nmW" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/bed/chair/padded/purple{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"nnf" = ( +/obj/floor_decal/spline/fancy/black, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"nnA" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar/bridge_starboard) +"nnH" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/solar{ + id = "auxsolarsbridge"; + name = "Bridge Auxiliary Solar Array" + }, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/reinforced, +/area/solar/bridge_port) +"nnI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/conveyor{ + dir = 8; + id = "bsa" + }, +/obj/structure/plasticflaps/airtight, +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "bsa_space"; + name = "Unknown Compartament Shell Loader"; + opacity = 0 + }, +/turf/simulated/floor/reinforced, +/area/command/bsa) +"nnJ" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"nnP" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"nnQ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/aft) +"nnR" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"nnY" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/reinforced, +/area/turret_protected/ai_teleport) +"noa" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/plushie, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"noj" = ( +/obj/structure/sign/warning/airlock{ + dir = 8 + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/solar/bridge_port) +"non" = ( +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Central Hallway"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"nop" = ( +/obj/shuttle_landmark/ninja/deck2, +/turf/space, +/area/space) +"nor" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"nos" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"not" = ( +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/foreport) +"noF" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/bridgedeck/port) +"noH" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/cooker/grill, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/prison) +"noM" = ( +/turf/simulated/wall/prepainted, +/area/medical/office) +"noS" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/sign/warning/nosmoking_1{ + dir = 4; + pixel_x = -32 + }, +/obj/machinery/camera/network/petrov{ + c_tag = "Petrov - Toxins"; + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"noV" = ( +/obj/machinery/camera/network/petrov{ + c_tag = "Petrov - Airlock"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"noY" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftstarboard) +"npb" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/glass/civilian{ + autoset_access = 0; + name = "Recreation Area" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/visitors) +"npf" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"npl" = ( +/obj/floor_decal/corner/yellow/half, +/obj/structure/reagent_dispensers/water_cooler{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/suplocker_room) +"npu" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 9 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8; + icon_state = "techfloor_corners" + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"npy" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"npA" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/item/device/assembly/igniter, +/obj/item/device/assembly/igniter, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"npC" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/assembly/robotics) +"npE" = ( +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hop/cobed) +"npI" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/xenobiology/water_cell) +"npK" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/green, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/ward) +"npL" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "misclab"; + name = "Test Chamber Blast Doors"; + pixel_x = 4; + req_access = list("ACCESS_RESEARCH") + }, +/obj/machinery/button/ignition{ + id_tag = "Xenobio"; + pixel_x = -6 + }, +/obj/item/wrench, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"npU" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"npY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 9 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"nqm" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/obj/structure/table/woodentable/walnut, +/obj/item/material/ashtray/bronze, +/turf/simulated/floor/wood/walnut, +/area/bridge/adjutants) +"nqp" = ( +/obj/machinery/suit_cycler/mining, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/brown/border, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"nqq" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 8; + id_tag = "EngineRadiatorViewport"; + name = "Engine Radiator Shutters" + }, +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"nqx" = ( +/obj/floor_decal/corner/yellow/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/suplocker_room) +"nqy" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + dir = 4; + name = "Steward's Room" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley/backroom) +"nqB" = ( +/obj/item/stool/padded, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/maintenance_equipstorage) +"nqC" = ( +/obj/item/modular_computer/tablet/lease/preset/command, +/obj/item/sticky_pad/random, +/obj/structure/table/glass/boron, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/purple/bordercorner2, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"nqE" = ( +/obj/structure/sign/warning/radioactive{ + dir = 1; + pixel_y = -32 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/thirddeck/fore) +"nqH" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/obj/structure/window/boron_reinforced{ + dir = 1 + }, +/obj/structure/window/boron_reinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"nqK" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + controlled = 0; + dir = 1; + internal_pressure_bound = 35000; + internal_pressure_bound_default = 35000; + pressure_checks = 2; + pressure_checks_default = 2; + use_power = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/thruster/d1port) +"nqM" = ( +/obj/floor_decal/corner/darkblue/half{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue{ + dir = 10 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"nqO" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"nqW" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/table/steel, +/obj/random/technology_scanner, +/obj/item/contraband/poster, +/obj/item/contraband/poster, +/obj/item/contraband/poster, +/obj/item/contraband/poster, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"nrb" = ( +/obj/floor_decal/corner/green/diagonal, +/obj/structure/table/glass, +/obj/machinery/microwave{ + pixel_x = -3; + pixel_y = 6 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"nrg" = ( +/obj/structure/lattice, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"nrk" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/crew_quarters/laundry) +"nrm" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/green{ + dir = 4; + icon_state = "map" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"nrt" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"nrA" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"nrC" = ( +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 4; + display_name = "Port Dock C"; + frequency = 1331; + id_tag = "rescue_shuttle_dock_airlock"; + pixel_x = -20; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"nrG" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"nrI" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/heads/captain/secret_room) +"nrJ" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/carpet/purple, +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/obj/floor_decal/carpet/purple{ + dir = 5 + }, +/obj/floor_decal/carpet/purple{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/main) +"nrK" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"nrN" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/green, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"nrO" = ( +/obj/structure/closet/secure_closet{ + name = "Secure Evidence Locker"; + req_access = list("ACCESS_SECURITY") + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techmaint, +/area/security/sierra/evidence) +"nrW" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/hangar/upper) +"nsa" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "fd_starboard_pump" + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"nsb" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "solar_starboard_pump" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"nsd" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/bluegrid, +/area/rnd/servers) +"nsf" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sleep/bunk) +"nsl" = ( +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"nsm" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/random/vendor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"nsv" = ( +/turf/simulated/wall/prepainted, +/area/engineering/locker_room) +"nsA" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Cell One"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"nsB" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"nsD" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"nsI" = ( +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window/westleft{ + dir = 2; + name = "Medical Reception"; + req_access = list("ACCESS_SENMED"); + autoset_access = 0 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"nsS" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"nsT" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/wardhallway) +"nsU" = ( +/obj/structure/table/rack, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"ntg" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/computer/modular/preset/civilian, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"ntv" = ( +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/artbru, +/obj/item/reagent_containers/food/drinks/cans/artbru, +/obj/item/reagent_containers/food/drinks/cans/speer, +/obj/item/reagent_containers/food/drinks/cans/speer, +/obj/item/reagent_containers/food/drinks/cans/speer, +/obj/item/storage/box/glasses/square, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sauna) +"ntz" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"ntA" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/xenobiology/atmos) +"ntB" = ( +/obj/structure/table/steel, +/obj/machinery/recharger, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/vacant/monitoring) +"ntL" = ( +/obj/wallframe_spawn/reinforced, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint_stripe/red, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/security/sierra/brig) +"ntW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"ntX" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"ntZ" = ( +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"nuc" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/center) +"nuj" = ( +/obj/machinery/computer/ship/helm, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"nul" = ( +/obj/floor_decal/corner/red, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + name = "Chief Steward"; + sort_type = "Chief Steward" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"nun" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/light/spot, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/red/bordercorner2, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"nuC" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"nuD" = ( +/obj/structure/closet/secure_closet/atmos_sierra, +/obj/item/rpd, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"nuE" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"nuJ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"nuQ" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/floor_decal/corner/black/half{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"nvi" = ( +/obj/floor_decal/industrial/traffic/corner, +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"nvk" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"nvl" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 4; + icon_state = "map_vent_in"; + initialize_directions = 1; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1; + id_tag = "containment_out"; + external_pressure_bound = 0; + external_pressure_bound_default = 0 + }, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"nvp" = ( +/obj/floor_decal/industrial/warning/cee, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 4; + display_name = "Second Deck Auxillary Dock"; + id_tag = "sd_starboard"; + name = "Second Deck Starboard Airlock Controller"; + pixel_x = -20; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "sd_starboard_pump" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"nvx" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = -24; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"nvy" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/shieldwallgen, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"nvC" = ( +/obj/floor_decal/corner/black/bordercorner, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"nvI" = ( +/obj/shuttle_landmark/ninja/deck4, +/turf/space, +/area/space) +"nvP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/constructable_frame/machine_frame, +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"nvR" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"nvT" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/hangar/upper) +"nvV" = ( +/obj/machinery/sparker{ + id_tag = "Isocell2"; + pixel_x = -18 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell2) +"nvX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"nvZ" = ( +/obj/machinery/door/airlock/engineering{ + name = "Shield Generator"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/shield/thirddeck) +"nwe" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"nwj" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftport) +"nwk" = ( +/obj/floor_decal/corner/grey/diagonal, +/obj/structure/table/steel_reinforced, +/obj/machinery/microwave{ + pixel_y = 5 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration) +"nwl" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"nwm" = ( +/obj/machinery/computer/telecomms/server{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"nwn" = ( +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/foreport) +"nwt" = ( +/obj/structure/table/woodentable/walnut, +/obj/random/action_figure, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"nwu" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/meter, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"nww" = ( +/obj/machinery/space_heater, +/turf/simulated/wall/prepainted, +/area/maintenance/firstdeck/forestarboard) +"nwB" = ( +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"nwE" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"nwG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1starboard) +"nwH" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"nwJ" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"nwQ" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/armory/lobby) +"nwR" = ( +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"nwZ" = ( +/turf/simulated/floor/wood/walnut, +/area/maintenance/firstdeck/aftstarboard) +"nxq" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/largecrate, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"nxs" = ( +/obj/floor_decal/corner/red, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"nxu" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"nxx" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/vending/cigarette{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/firstdeck) +"nxy" = ( +/obj/structure/table/woodentable/maple, +/obj/item/paper_bin, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/item/device/radio/intercom/locked/confessional{ + dir = 4; + pixel_x = -24 + }, +/obj/item/pen, +/obj/floor_decal/carpet/purple, +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/floor_decal/carpet/purple{ + dir = 9 + }, +/obj/floor_decal/carpet/purple{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/main) +"nxF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"nxI" = ( +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/maintenance/firstdeck/foreport) +"nxJ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"nxM" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/thirddeck/port) +"nxN" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/item/modular_computer/telescreen/preset/generic{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/nuke_storage) +"nxP" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"nxU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 8 + }, +/obj/structure/sign/warning/pods/south{ + dir = 4; + pixel_x = -32 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"nxX" = ( +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/item/hand_labeler, +/obj/item/stack/package_wrap/gift_wrap, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"nys" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"nyu" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "packageSort1" + }, +/obj/structure/plasticflaps/airtight, +/turf/simulated/floor/plating, +/area/quartermaster/office/post) +"nyw" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/machinery/constructable_frame/machine_frame, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"nyA" = ( +/obj/machinery/washing_machine, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/corner/grey/bordercorner{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/blue, +/obj/machinery/washing_machine{ + pixel_y = 19 + }, +/turf/simulated/floor/tiled/old_tile, +/area/crew_quarters/head) +"nyL" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"nyP" = ( +/obj/floor_decal/corner/paleblue/full, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/cmo/cobed) +"nyQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace/chamber) +"nyY" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"nyZ" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"nza" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"nzu" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/navbeacon/sierra/TD_fore1, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"nzv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"nzF" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/bridgedeck/starboard) +"nzL" = ( +/obj/machinery/portable_atmospherics/canister/empty, +/obj/machinery/light_construct{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"nzU" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"nzV" = ( +/obj/structure/cable/green{ + 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/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"nzW" = ( +/turf/simulated/wall/r_wall/hull, +/area/rnd/toxins) +"nzX" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/green/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/green/bordercorner2, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 6 + }, +/obj/decal/cleanable/dirt, +/obj/item/camera_assembly, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"nAg" = ( +/obj/machinery/computer/ship/navigation{ + dir = 4; + icon_state = "computer" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/quartermaster/hangar/upper) +"nAk" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -24; + pixel_x = 8 + }, +/obj/machinery/button/alternate/door/bolts{ + dir = 1; + pixel_y = -24; + pixel_x = -2; + id_tag = "old_maintaince_privatedorm"; + name = "Lock" + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dormintories) +"nAC" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"nAD" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/structure/bed/chair/padded/green, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/lino, +/area/command/chief_steward) +"nAF" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"nAL" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d3starboard) +"nAO" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/closet/secure_closet/scientist_sierra, +/obj/item/storage/box/monkeycubes, +/obj/item/storage/box/monkeycubes/farwacubes, +/obj/item/storage/box/monkeycubes/neaeracubes, +/obj/item/storage/box/monkeycubes/stokcubes, +/obj/item/storage/box/syringes, +/obj/item/storage/box/beakers, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"nBj" = ( +/obj/structure/table/woodentable, +/obj/machinery/microwave{ + pixel_y = 12 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/sleep/cryo/south) +"nBp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"nBy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"nBH" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/orange/corner, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"nBI" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"nBS" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"nBW" = ( +/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/door/blast/regular{ + dir = 4; + id_tag = "selfdestruct"; + name = "Delta Code Access Blast Door" + }, +/obj/machinery/button/blast_door{ + id_tag = "selfdestruct"; + name = "Self Destruct Access Blast Door Control"; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/nuke_storage) +"nCh" = ( +/obj/floor_decal/corner/black{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/item/device/radio/phone/medbay, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"nCk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"nCl" = ( +/obj/structure/table/standard, +/obj/item/storage/box/beakers/insulated, +/obj/item/reagent_containers/glass/beaker/large, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"nCo" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"nCx" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/command/bsa) +"nCA" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3starboard) +"nCE" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"nCI" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/thirddeck/foreport) +"nCK" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 8 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3port) +"nCN" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"nCP" = ( +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "security_permabrig_fitst_cell_shutters" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_ridged, +/area/security/sierra/brig) +"nDi" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"nDj" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"nDl" = ( +/obj/structure/table/rack, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "telecoms_s"; + name = "Telecoms Blast Door"; + pixel_y = -22 + }, +/obj/item/stock_parts/circuitboard/ntnet_relay, +/obj/item/stock_parts/circuitboard/telecomms/broadcaster, +/obj/item/stock_parts/circuitboard/telecomms/bus, +/obj/item/stock_parts/circuitboard/telecomms/bus, +/obj/item/stock_parts/circuitboard/telecomms/server, +/obj/item/stock_parts/circuitboard/telecomms/server, +/obj/item/stock_parts/circuitboard/telecomms/receiver, +/obj/item/stock_parts/circuitboard/telecomms/processor, +/obj/item/stock_parts/circuitboard/telecomms/processor, +/turf/simulated/floor/tiled/steel_ridged, +/area/tcommsat/storage) +"nDt" = ( +/obj/machinery/button/alternate/door/bolts{ + id_tag = "medsafe_aft"; + name = "safe room door-control"; + pixel_y = 32 + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"nDA" = ( +/obj/item/ladder_mobile, +/obj/item/stack/cable_coil, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"nDB" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "ai_starboard_outer"; + name = "Engineering External Access" + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftport) +"nDC" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/airless, +/area/space) +"nDE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/reagentgrinder, +/obj/item/stack/material/phoron, +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"nDN" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "CO23p_out"; + initialize_directions = 1; + internal_pressure_bound = 1000; + internal_pressure_bound_default = 1000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/structure/window/boron_reinforced{ + dir = 4 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d1starboard) +"nDP" = ( +/obj/structure/table/standard, +/obj/item/rolled_towel/fitness, +/obj/item/rolled_towel/fitness, +/obj/item/rolled_towel/fitness, +/obj/item/wrench, +/obj/item/stack/medical/bruise_pack, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/corner/black/three_quarters{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"nEo" = ( +/obj/structure/largecrate, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"nEt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"nEu" = ( +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"nEx" = ( +/obj/random/closet, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"nEy" = ( +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"nEz" = ( +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/black/border, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation) +"nEZ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"nFc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"nFj" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/bar/cobed) +"nFk" = ( +/obj/floor_decal/corner/black/mono, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"nFl" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/catwalk, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/waterstore) +"nFm" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/port) +"nFp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals6, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"nFK" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/space_heater/stationary/on{ + pixel_y = 30; + set_temperature = 348.15 + }, +/obj/structure/bed/sauna_bench/middle/north, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sauna) +"nFM" = ( +/obj/structure/bookcase/manuals/security, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/captain/beach) +"nGc" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/table/rack, +/obj/item/stack/material/glass{ + amount = 30 + }, +/obj/item/stack/material/glass{ + amount = 30 + }, +/obj/item/stack/material/glass/fifty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"nGe" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/titanium, +/area/shuttle/petrov/gas) +"nGi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"nGl" = ( +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/corner/darkblue/bordercorner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"nGm" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/airlock_canisters) +"nGo" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/thirddeck/center) +"nGt" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/monotile, +/area/maintenance/abandoned_hydroponics) +"nGx" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/equipment) +"nGI" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head/deck3) +"nGO" = ( +/obj/machinery/light/spot, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics/third_deck_storage) +"nGT" = ( +/obj/structure/table/standard, +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/item/reagent_containers/food/snacks/candy/donor{ + pixel_y = 5 + }, +/obj/item/reagent_containers/food/snacks/candy/donor, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"nGU" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/power/tracker, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced, +/area/solar/bridge_starboard) +"nHd" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/random/maintenance, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"nHg" = ( +/obj/structure/closet/crate/freezer/rations, +/obj/item/storage/firstaid/stab, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/item/storage/mirror{ + dir = 8; + pixel_x = -1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/power/apc/super/critical{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/heads/captain/secret_room) +"nHi" = ( +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"nHx" = ( +/obj/machinery/cryopod, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod3/station) +"nHz" = ( +/obj/machinery/atmospherics/binary/pump, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"nHD" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/secure_closet/engineering_sierra/junior, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"nHF" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/backstorage) +"nHI" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/hardstorage) +"nHJ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"nHR" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + id = "CO24p_in"; + injecting = 1; + use_power = 1 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d1port) +"nHX" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"nHZ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"nIa" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"nIc" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor, +/area/solar/bridge_starboard) +"nIf" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/NT{ + pixel_y = -4 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/NT{ + pixel_y = 4; + pixel_x = -5 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/NT{ + pixel_y = 6; + pixel_x = 8 + }, +/obj/machinery/light, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"nIk" = ( +/obj/machinery/tele_beacon, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/storage/primary) +"nIo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"nIu" = ( +/obj/machinery/reagentgrinder, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"nIx" = ( +/obj/machinery/door/airlock/glass/security{ + id_tag = "detdoor"; + name = "Lont Term Checkpoint"; + 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/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/brig) +"nIB" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/forestarboard) +"nIK" = ( +/obj/machinery/door/airlock/maintenance{ + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftport) +"nIN" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/floodlight{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"nIS" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/photocopier, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 4; + pixel_x = -14 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"nJe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/random/ironing_board_structure, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/laundry) +"nJl" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/seconddeck/aft) +"nJm" = ( +/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/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"nJn" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance/bolted{ + autoset_access = 0; + id_tag = "sauna_maint"; + name = "Sauna Maintenance" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sauna) +"nJr" = ( +/obj/machinery/light_switch{ + pixel_x = 24; + dir = 8 + }, +/obj/structure/hygiene/sink{ + pixel_y = -12 + }, +/obj/floor_decal/corner/grey/border, +/obj/floor_decal/corner/grey/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/grey/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/corner/grey/bordercorner, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"nJJ" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"nJX" = ( +/obj/floor_decal/corner/purple/three_quarters{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"nKb" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"nKd" = ( +/obj/machinery/power/smes/buildable{ + charge = 5e+006; + input_attempt = 1; + output_attempt = 1 + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"nKk" = ( +/obj/structure/table/standard, +/obj/item/crowbar, +/obj/item/flame/lighter/random, +/obj/item/melee/baton/loaded, +/obj/item/screwdriver{ + pixel_y = 15 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"nKn" = ( +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/corner/orange/diagonal, +/turf/simulated/floor/tiled/steel_grid, +/area/security/prison) +"nKo" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"nKq" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 9 + }, +/obj/machinery/computer/air_control{ + dir = 1; + name = "Nacelle Chamber Monitoring"; + sensor_name = "Chamber"; + sensor_tag = "ReacEng3" + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"nKz" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch{ + id_tag = "tox_airlock_exterior"; + locked = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/rnd/toxins) +"nKB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"nKD" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lightgrey/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"nKE" = ( +/obj/structure/lattice, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"nKQ" = ( +/obj/machinery/portable_atmospherics/canister/empty, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/cyan, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/hangar_atmos) +"nKU" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + dir = 4; + id_tag = "eng3"; + name = "First Deck Starboard Access"; + pixel_x = -21 + }, +/obj/machinery/power/apc/high/critical{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"nLi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/navbeacon/sierra/TD_fore8, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/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/crew_quarters/docking) +"nLj" = ( +/turf/simulated/wall/r_wall/hull, +/area/storage/airlock_canisters) +"nLn" = ( +/obj/machinery/suit_cycler/security, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/suits) +"nLq" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"nLH" = ( +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/chargebay) +"nLL" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"nLM" = ( +/obj/item/stack/material/plasteel{ + amount = 20 + }, +/obj/item/stack/material/glass{ + amount = 20 + }, +/obj/item/stack/material/glass{ + amount = 20 + }, +/obj/item/stack/material/aluminium/ten, +/obj/item/stack/material/plastic{ + amount = 20 + }, +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/monotile, +/area/assembly/robotics) +"nLX" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/aft) +"nMa" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + dir = 4; + frequency = 1380; + id_tag = "nuke_shuttle_dock_airlock_outer"; + name = "Docking Port Airlock" + }, +/obj/machinery/shield_diffuser, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "nuke_shuttle_dock_airlock"; + name = "exterior access button"; + pixel_y = 24; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/shuttle_landmark/reaper/dock, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"nMh" = ( +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"nMj" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/thirddeck/fore) +"nMk" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"nMC" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor, +/area/solar/bridge_starboard) +"nMI" = ( +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"nMP" = ( +/obj/machinery/button/holosign{ + id_tag = "chapel"; + pixel_x = 28 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/office) +"nMQ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"nMX" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/disposalpipe/up{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"nNh" = ( +/obj/structure/closet/secure_closet/captains/sierra, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"nNi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/green/border, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"nNj" = ( +/obj/structure/curtain/medical, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"nNl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"nNm" = ( +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"nNq" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"nNr" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"nNt" = ( +/obj/structure/table/marble, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/obj/item/storage/candle_box/scented, +/obj/item/storage/candle_box/scented, +/obj/item/storage/candle_box, +/obj/item/storage/candle_box, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"nNF" = ( +/turf/simulated/wall/r_wall/hull, +/area/vacant/monitoring) +"nNL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"nNS" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/obj/structure/sign/nanotrasen{ + dir = 4 + }, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod3/station) +"nNX" = ( +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"nOh" = ( +/obj/structure/table/standard, +/obj/item/stamp/hop, +/obj/item/sticky_pad/random, +/obj/floor_decal/carpet/blue2{ + dir = 1 + }, +/obj/floor_decal/carpet/blue2{ + dir = 4 + }, +/obj/floor_decal/carpet/blue2{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/hop) +"nOi" = ( +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"nOs" = ( +/obj/decal/cleanable/dirt, +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/trash/semki, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"nOt" = ( +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"nOy" = ( +/obj/structure/bed/sofa/l/black{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/sleep/cryo/south) +"nOz" = ( +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/structure/table/steel, +/obj/item/device/synthesized_instrument/guitar, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"nOC" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"nOL" = ( +/obj/structure/closet/secure_closet/medical2, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"nOM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"nOP" = ( +/obj/machinery/door/blast/regular/escape_pod{ + id_tag = "escape_pod_8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/maintenance/exterior) +"nOQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"nOV" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/rd) +"nOW" = ( +/obj/structure/catwalk, +/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" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"nOZ" = ( +/obj/structure/wall_frame, +/obj/structure/grille, +/obj/structure/curtain/black, +/turf/simulated/floor/plating, +/area/vacant/cargo) +"nPb" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins/storage) +"nPf" = ( +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"nPg" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "heads_meeting"; + name = "Meeting Room Window Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "meeting_windows" + }, +/turf/simulated/floor/plating, +/area/bridge/meeting_room) +"nPi" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/tech_supply, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"nPt" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/floor_decal/corner/purple/mono, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"nPx" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen/multi/cmd/captain, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/obj/item/storage/secure/safe/captain_sierra{ + pixel_y = 28 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"nPA" = ( +/obj/structure/closet/crate, +/obj/random/powercell, +/obj/random/powercell, +/obj/random/powercell, +/obj/decal/cleanable/cobweb2{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"nPC" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"nPN" = ( +/obj/floor_decal/borderfloor, +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/obj/floor_decal/corner/black/border, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation/second) +"nPW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/shuttlefuel) +"nPX" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/table/woodentable/walnut, +/obj/item/material/ashtray/glass, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"nQb" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/command{ + dir = 1; + id_tag = "pmdoor"; + name = "Head of Personnel"; + secured_wires = 1; + stripe_color = "#b7f27d" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/hop) +"nQi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/closet/emcloset, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"nQr" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/suits) +"nQs" = ( +/obj/structure/cable/green{ + 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 = 5 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor/stage) +"nQz" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"nQL" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"nRf" = ( +/obj/structure/table/standard, +/obj/machinery/microwave{ + pixel_y = 4 + }, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/office) +"nRk" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"nRm" = ( +/obj/floor_decal/borderfloor, +/obj/machinery/light, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"nRw" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"nRy" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/tcommsat/chamber) +"nRD" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/industrial/danger{ + dir = 6 + }, +/obj/structure/table/steel_reinforced, +/obj/item/storage/secure/briefcase, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"nRO" = ( +/obj/machinery/telecomms/processor/preset_one, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"nRV" = ( +/obj/machinery/bookbinder, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"nSa" = ( +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"nSr" = ( +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/unary/vent_pump{ + controlled = 0; + dir = 4; + external_pressure_bound = 105; + icon_state = "map_vent_in"; + pump_direction = 0; + use_power = 1 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"nSy" = ( +/obj/structure/dogbed, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/mob/living/simple_animal/hostile/commanded/rex, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/heads/office/hos/cobed) +"nSz" = ( +/obj/paint/black, +/turf/simulated/wall/ocp_wall, +/area/maintenance/incinerator) +"nSA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/bed/chair/padded/purple{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/entry) +"nSB" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"nSC" = ( +/obj/machinery/shipsensors, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"nSH" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/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" + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/prison) +"nSV" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 4; + name = "Warden"; + sort_type = "Warden" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"nSY" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"nTa" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/bridge) +"nTl" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/center) +"nTr" = ( +/obj/floor_decal/corner/black/border{ + dir = 9 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"nTu" = ( +/obj/structure/noticeboard{ + dir = 4; + pixel_x = -32 + }, +/obj/structure/table/steel_reinforced, +/obj/item/storage/slide_projector, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/corner/black/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"nTz" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/space) +"nTC" = ( +/obj/wallframe_spawn/reinforced_phoron/titanium, +/obj/machinery/door/firedoor, +/obj/paint/nt_white, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "toxins_petrov_shutters"; + name = "Mixing Chamber Blast Shutters" + }, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/gas) +"nTD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/breakroom) +"nTE" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"nTN" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"nTO" = ( +/obj/floor_decal/corner/purple/half, +/obj/machinery/light/spot, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"nTR" = ( +/obj/structure/bed/chair/padded/black{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"nUh" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"nUm" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/tiled/monotile, +/area/maintenance/abandoned_hydroponics) +"nUp" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 5 + }, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/sparker{ + id_tag = "engines"; + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + injecting = 1; + use_power = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d1port) +"nUq" = ( +/obj/structure/table/rack, +/obj/item/bodybag/rescue/loaded, +/obj/item/bodybag/rescue/loaded, +/obj/item/bodybag/rescue/loaded, +/obj/item/bodybag/rescue/loaded, +/obj/item/bodybag/rescue/loaded, +/obj/structure/window/basic{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"nUv" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"nUw" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/structure/sign/deck/first{ + dir = 1; + pixel_y = -32 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"nUA" = ( +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"nUE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue) +"nUI" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/corner/black{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"nUJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Cell Two"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"nUL" = ( +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/firstdeck/centralport) +"nUO" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/prepainted, +/area/chapel/mortuary) +"nVa" = ( +/obj/machinery/vending/cola{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"nVe" = ( +/obj/wallframe_spawn/reinforced/polarized/full{ + id = "bridge_windows" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/bridge) +"nVh" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"nVj" = ( +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/hallway/primary/fourthdeck/central_stairwell) +"nVr" = ( +/obj/machinery/atmospherics/omni/mixer{ + active_power_usage = 7500; + tag_east_con = null; + tag_north_con = 0.21; + tag_south = 1; + tag_south_con = 0.79; + tag_west = 2; + tag_north = 1 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"nVu" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Telecommunications"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/tcommsat/computer) +"nVz" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/head) +"nVB" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"nVG" = ( +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/obj/structure/closet/crate/freezer/rations, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod3/station) +"nVP" = ( +/obj/structure/barricade, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"nVW" = ( +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/table/standard, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/obj/item/anodevice{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/anodevice, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/scan) +"nVY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"nWa" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/iaa) +"nWj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"nWl" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/yellow/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/suplocker_room) +"nWt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod4/station) +"nWU" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"nXa" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 4; + target_pressure = 15000 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"nXn" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"nXq" = ( +/obj/structure/ladder/up, +/obj/structure/catwalk, +/turf/simulated/open, +/area/space) +"nXt" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/water_cell) +"nXu" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/sign/xenoflora{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"nXw" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/maintenance/firstdeck/forestarboard) +"nXy" = ( +/obj/structure/dispenser, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"nXG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/seconddeck/fore) +"nXH" = ( +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"nYa" = ( +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"nYh" = ( +/obj/structure/sign/warning/hot_exhaust, +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d3starboard) +"nYj" = ( +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"nYn" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/medical/virology/lab) +"nYD" = ( +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1starboard) +"nYL" = ( +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/obj/machinery/washing_machine, +/turf/simulated/floor/wood/walnut, +/area/vacant/dormintories) +"nYM" = ( +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/obj/machinery/computer/power_monitor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"nYO" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"nYR" = ( +/obj/shuttle_landmark/merc/dock, +/turf/space, +/area/space) +"nYS" = ( +/obj/floor_decal/corner/green/bordercorner, +/obj/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"nZa" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"nZb" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"nZd" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"nZf" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/airlock_electronics/brace, +/obj/item/airlock_electronics/brace, +/obj/item/airlock_electronics/brace, +/obj/item/airlock_brace, +/obj/item/airlock_brace, +/obj/item/airlock_brace, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/item/material/twohanded/jack, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech) +"nZi" = ( +/obj/structure/largecrate, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"nZk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/starboard) +"nZw" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/machinery/computer/cryopod{ + pixel_x = -32 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod8/station) +"nZA" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/no_grille, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/storage/eva) +"nZF" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/seconddeck/port) +"nZH" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/gas) +"nZI" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"nZL" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"nZT" = ( +/obj/structure/sign/nanotrasen{ + dir = 1 + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/seconddeck/forestarboard) +"nZW" = ( +/obj/structure/closet/secure_closet/counselor{ + icon_state = "med" + }, +/obj/item/book/manual/psionics, +/obj/item/stack/wax{ + amount = 50 + }, +/obj/item/toy/figure/psychologist, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/item/storage/candle_box, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"oae" = ( +/obj/machinery/cryopod, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo) +"oaf" = ( +/obj/floor_decal/spline/fancy/wood/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"oah" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 4 + }, +/obj/structure/table/steel, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"oaj" = ( +/obj/structure/table/rack/dark, +/obj/item/stack/tile/carpetred/ten, +/obj/item/stack/tile/carpetpurple/ten, +/obj/item/stack/tile/carpetorange/ten, +/obj/item/stack/tile/carpetgreen/ten, +/obj/item/stack/tile/carpetblue2/ten, +/obj/item/stack/tile/carpetblue/ten, +/obj/item/stack/tile/carpet/ten, +/obj/floor_decal/spline/plain/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"oam" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"oao" = ( +/obj/structure/closet/emcloset, +/obj/random/crayon, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"oaw" = ( +/obj/structure/closet/secure_closet/crew/research, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/item/folder/nt, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/locker) +"oax" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"oaA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"oaF" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"oaH" = ( +/obj/structure/sign/emergonly{ + dir = 8; + pixel_x = 32 + }, +/obj/structure/bed/chair/padded/teal{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/sign/directions/med{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/medical/sleeper) +"oaI" = ( +/obj/machinery/space_heater, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"oaO" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/green/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/green/bordercorner2, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"oaQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"oaX" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"oaY" = ( +/turf/simulated/floor/tiled/dark, +/area/tcommsat/computer) +"obe" = ( +/obj/machinery/status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/medical/surgery/second) +"obf" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/maintenance, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"obk" = ( +/obj/floor_decal/corner/black{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"obm" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/bed/chair, +/obj/spider/stickyweb, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level1) +"obq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"obB" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/vending/coffee, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"obE" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/quartermaster/hangar/upper) +"obG" = ( +/obj/landmark{ + name = "Observer-Start" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/center) +"obI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"obN" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"obP" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"obS" = ( +/obj/structure/railing/mapped, +/turf/space, +/area/space) +"obT" = ( +/obj/floor_decal/corner/darkblue, +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/bridge/storage) +"obZ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"oca" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/test_room) +"oct" = ( +/obj/floor_decal/corner/black, +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/structure/sign/warning/nosmoking_2{ + pixel_x = 32; + pixel_y = -32 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"ocu" = ( +/obj/machinery/door/airlock/highsecurity{ + dir = 4; + name = "Gravitational Generator" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "gravgen-antirad-shielding"; + name = "Gravitational Generator Shielding" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"ocv" = ( +/obj/structure/inflatable/door, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"ocw" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/carpet/green{ + dir = 1 + }, +/turf/simulated/floor/carpet/green, +/area/medical/mentalhealth/therapyroom) +"ocE" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/bed/padded, +/obj/item/bedsheet/brown, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/bunk) +"ocG" = ( +/obj/structure/roller_bed, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"ocH" = ( +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"ocQ" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cargo_l) +"ocW" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/random/closet, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"ocY" = ( +/obj/structure/bed/sofa/l/black, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"odj" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"odm" = ( +/obj/structure/catwalk, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"odp" = ( +/obj/structure/table/standard, +/obj/machinery/cell_charger, +/obj/random/powercell, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/engineering/auxpower) +"odq" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 8 + }, +/obj/machinery/atmospherics/valve/shutoff/supply, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"odv" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"odw" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 5 + }, +/obj/machinery/power/apc/critical{ + name = "west bump"; + dir = 8; + pixel_x = -21 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"odA" = ( +/obj/structure/closet, +/obj/item/reagent_containers/food/snacks/liquidfood, +/obj/item/reagent_containers/food/snacks/liquidfood, +/obj/item/reagent_containers/food/snacks/liquidfood, +/obj/item/reagent_containers/food/snacks/liquidfood, +/obj/item/reagent_containers/food/snacks/liquidfood, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/utility) +"odC" = ( +/obj/structure/table/steel, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/device/megaphone, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"odF" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/machinery/rotating_alarm/security_alarm{ + pixel_y = 13 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"odG" = ( +/obj/structure/closet/coffin/wooden, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/corner/black/mono, +/obj/machinery/camera/network/second_deck{ + c_tag = "Chapel - Mortuary"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/mortuary) +"odH" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/door/airlock/command{ + id_tag = "rddoor"; + name = "Research Director"; + req_access = newlist(); + secured_wires = 1; + stripe_color = "#ffffff" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/heads/office/rd) +"odI" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/green, +/turf/simulated/floor/carpet/green, +/area/medical/wardhallway) +"odS" = ( +/turf/simulated/wall/prepainted, +/area/medical/infirmreception) +"oea" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/light, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"oed" = ( +/obj/floor_decal/corner/yellow/three_quarters{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/item/material/clipboard, +/obj/item/folder/yellow, +/obj/item/storage/fancy/smokable/dromedaryco{ + pixel_y = 6; + pixel_x = -4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/quartermaster/suplocker_room) +"oeg" = ( +/obj/machinery/organ_printer/robot/mapped, +/obj/structure/sign/warning/nosmoking_1{ + dir = 4; + pixel_x = -32 + }, +/obj/floor_decal/corner/grey_alt/three_quarters, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/assembly/robotics) +"oej" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/button/alternate/door{ + pixel_y = 9; + pixel_x = -27; + id_tag = "hangar_hallway_doors"; + name = "Starboard Airlocks Control" + }, +/obj/machinery/button/alternate/door{ + pixel_y = -7; + pixel_x = -27; + id_tag = "hangar_ts_doors"; + name = "Port Airlocks Control" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"oen" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/science{ + name = "Explorer Prep" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/exploration) +"oeo" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/photocopier, +/turf/simulated/floor/lino, +/area/command/chief_steward) +"oet" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"oex" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/sauna) +"oeG" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"oeI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/corner/lime/bordercorner, +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"oeM" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/maintenance, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/bar/cobed) +"oeQ" = ( +/obj/machinery/telecomms/server/presets/medical, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"oeU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/turf/simulated/wall/r_wall/hull, +/area/engineering/atmos) +"oeV" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"oeZ" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/iaa/high_sec) +"ofb" = ( +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/railing/mapped, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"ofg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"ofk" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/adherent) +"ofy" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8; + icon_state = "map" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"ofG" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"ofH" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "sd_starboard_pump" + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"ofJ" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"ofK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 4; + icon_state = "shutter0"; + id_tag = "hangar_ts_shutters"; + name = "Hangar Deck Hallway Shutters"; + opacity = 0 + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown3_4" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + name = "Visitors"; + id_tag = "hangar_ts_doors" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/fore) +"ofL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/plating, +/area/maintenance/substation/seconddeck) +"ofN" = ( +/obj/shuttle_landmark/sierra/deck1/exploration_shuttle, +/turf/space, +/area/space) +"ofO" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"ofP" = ( +/obj/structure/stairs/west, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs) +"ofQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"ofR" = ( +/obj/machinery/hologram/holopad/longrange, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/deckofficer) +"ofW" = ( +/turf/simulated/floor/tiled/white, +/area/medical/maintenance_equipstorage) +"ofY" = ( +/obj/machinery/air_sensor/nacelle/first/co2, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d3starboard) +"ogq" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "petrov_shuttle_dock_pump" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"ogA" = ( +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"ogC" = ( +/turf/simulated/wall/prepainted, +/area/vacant/mess) +"ogG" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"ogH" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"ogN" = ( +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/foreport) +"ogT" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/maintenance, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar/upper) +"ogW" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/prepainted, +/area/security/sierra/hallway) +"ohb" = ( +/obj/machinery/shield_diffuser, +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_2_berth_hatch"; + name = "Escape Pod Two" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/center) +"ohj" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"ohs" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/maintenance/firstdeck/forestarboard) +"ohu" = ( +/obj/machinery/constructable_frame/computerframe, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"ohw" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"ohy" = ( +/obj/machinery/chem_master, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"ohz" = ( +/obj/structure/bed/chair/office/red{ + dir = 8 + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"ohE" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/heads/office/rd) +"ohM" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"ohN" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"ohW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"oie" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/random/maintenance, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"oif" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod2/station) +"oig" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/deliveryChute, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/quartermaster/office/post) +"oii" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/quartermaster/hangar/upper) +"oil" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sleep/bunk) +"oin" = ( +/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/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"oiu" = ( +/obj/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/item/material/twohanded/jack, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack/dark, +/obj/item/ladder_mobile, +/obj/item/clothing/glasses/welding, +/obj/item/weldingtool, +/obj/item/welder_tank, +/obj/item/stack/tile/floor{ + amount = 5 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"oiz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Solar Control - Third Deck - Starboard"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"oiC" = ( +/obj/structure/table/rack, +/obj/item/aiModule/reset, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window/southright{ + dir = 8; + name = "AI Maintenance" + }, +/obj/item/aiModule/nanotrasen, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"oiO" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"oiW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"oja" = ( +/turf/simulated/floor/reinforced/hydrogen, +/area/engineering/atmos) +"ojh" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "td_port" + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"ojk" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/visitors) +"ojo" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/bridge) +"oju" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + 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/techfloor, +/area/security/sierra/dockcheck) +"ojv" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"ojy" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/barricade, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "virology_access"; + name = "Virology Lab Access Console"; + req_access = list("ACCESS_VIRO"); + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/maintenance/seconddeck/starboard) +"ojM" = ( +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/rd, +/obj/landmark/start{ + name = "Research Director" + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/office/rd/cobed) +"ojN" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id_tag = "hangar_hallway_shutters"; + name = "Hangar Deck Hallway Shutters"; + opacity = 0 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown3_4" + }, +/obj/wallframe_spawn/reinforced, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"ojR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftstarboard) +"ojZ" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/corner/black/mono, +/obj/item/storage/box/glasses/square, +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"okd" = ( +/obj/structure/window/basic{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/structure/curtain/open/privacy, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"okf" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"okg" = ( +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"okh" = ( +/obj/structure/lattice, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"oki" = ( +/obj/machinery/camera/all/command{ + c_tag = "AI Core - Aft Port"; + dir = 4 + }, +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 1; + pixel_y = -22 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"okj" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/aft) +"okl" = ( +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/foreport) +"okm" = ( +/obj/floor_decal/ntlogo{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"okp" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"okr" = ( +/obj/random/trash, +/obj/structure/window/basic, +/obj/structure/closet/toolcloset, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"oku" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery) +"okx" = ( +/obj/shuttle_landmark/escape_pod/start/pod11, +/obj/wallframe_spawn/reinforced/titanium, +/turf/simulated/floor/plating, +/area/shuttle/escape_pod/escape_pod11/station) +"okA" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"okD" = ( +/obj/machinery/door/airlock/engineering{ + name = "Bluespace Drive"; + req_access = newlist(); + secured_wires = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/bluespace) +"okE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 8; + display_name = "Aft Dock (Nanotrasen)"; + id_tag = "petrov_shuttle_dock"; + pixel_x = 20; + pixel_y = 32; + req_access = list("ACCESS_PETROV"); + tag_exterior_door = "petrov_shuttle_dock_outer"; + tag_interior_door = "petrov_shuttle_dock_inner"; + tag_exterior_sensor = "petrov_shuttle_dock_sensor"; + tag_airpump = "petrov_shuttle_dock_pump" + }, +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/white, +/area/maintenance/fourthdeck/aft) +"okF" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"okK" = ( +/obj/decal/cleanable/dirt, +/obj/structure/table/woodentable, +/obj/item/folder/yellow{ + pixel_y = -4; + pixel_x = 9 + }, +/obj/item/folder/blue{ + pixel_y = 5; + pixel_x = 3 + }, +/obj/item/pen, +/obj/item/reagent_containers/food/drinks/cans/coffeecola{ + pixel_y = -4; + pixel_x = -8 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"okN" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"okX" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/maintenance, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/starboard) +"okY" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/center) +"okZ" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/recharger/wallcharger{ + pixel_y = 24 + }, +/obj/machinery/photocopier, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"olf" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/reinforced, +/area/space) +"olg" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"olu" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"olw" = ( +/obj/structure/sign/warning/airlock{ + pixel_y = 32 + }, +/obj/structure/railing/mapped, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"oly" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/sign/warning/radioactive{ + dir = 8; + pixel_x = 32 + }, +/obj/machinery/space_heater, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"olO" = ( +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/eva) +"olX" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"oma" = ( +/obj/structure/sign/warning/secure_area{ + dir = 1; + pixel_y = -32 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/thirddeck/fore) +"omc" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/hygiene/shower{ + dir = 4; + pixel_x = -9 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"omf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"omi" = ( +/obj/fluid_mapped, +/obj/item/clothing/under/swimsuit/green, +/obj/item/bananapeel, +/obj/random/junk, +/mob/living/simple_animal/aquatic/fish/grump, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"omr" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"omy" = ( +/turf/simulated/wall/prepainted, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"omE" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/spline/fancy/black, +/obj/structure/flora/ausbushes/grassybush, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"omF" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/door_timer/cell_3{ + pixel_y = 0; + pixel_x = 32 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"omG" = ( +/obj/floor_decal/corner/darkblue/border, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Briefing Room"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"omT" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/seconddeck/aftstarboard) +"omW" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"omZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"ona" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"onp" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_north = 1; + tag_south = 2; + tag_west = 3 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"ont" = ( +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"onv" = ( +/obj/machinery/power/smes/buildable/preset/sierra/substation{ + RCon_tag = "Substation - First Deck" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/firstdeck) +"onC" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"onG" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"onI" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/fore) +"onJ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/medical/mortus{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/office) +"onN" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 4 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"onW" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/research{ + dir = 4; + name = "Storage"; + req_access = newlist() + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/storage) +"onX" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/foreport) +"onY" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"oob" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/closet, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"ooq" = ( +/obj/floor_decal/corner/darkblue/bordercorner, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"oor" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/aft) +"oou" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"oow" = ( +/obj/machinery/sleeper/survival_pod{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/medical/maintenance_equipstorage) +"ooC" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/industrial/danger, +/obj/machinery/vending/snack, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"ooE" = ( +/obj/machinery/door/window/westright{ + name = "Containment Pen"; + req_access = newlist(); + dir = 1 + }, +/obj/machinery/door/window/eastleft{ + name = "Containment Pen"; + req_access = newlist(); + dir = 2 + }, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "xenobio4"; + name = "Containment Blast Doors" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"ooG" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"ooK" = ( +/obj/structure/table/standard, +/obj/item/storage/bible, +/obj/floor_decal/corner/black/full, +/obj/machinery/camera/network/security{ + c_tag = "Security - OFD"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/command/bsa) +"ooV" = ( +/obj/floor_decal/corner/grey/full, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"ooZ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"opb" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/hardstorage) +"opd" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/item/stock_parts/circuitboard/arcade/battle, +/obj/item/stock_parts/circuitboard/arcade/orion_trail, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech) +"ope" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/hydrogen, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/canister) +"opm" = ( +/obj/machinery/atmospherics/valve/shutoff/supply, +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"opr" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/power) +"opv" = ( +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/command/bsa) +"opD" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#4c535b" + }, +/area/quartermaster/hangar/upper) +"opE" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/medical{ + name = "Patient Ward" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"opF" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"opM" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/compactor) +"opR" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"opX" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/sleep/cryo/firstdeck) +"oqb" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"oqd" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "burst_s" + }, +/obj/paint/red, +/obj/paint_stripe/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod8/station) +"oqf" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/black/border, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/iaa/cobed) +"oqk" = ( +/obj/machinery/computer/ship/navigation{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/mauve/border{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"oqp" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"oqq" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"oqr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/forensic/lab) +"oqs" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular{ + id_tag = "xenobio3_vent"; + name = "Chamber Vent" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"oqu" = ( +/obj/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/machinery/floodlight{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"oqv" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"oqx" = ( +/obj/structure/hygiene/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/structure/window/basic{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/gym) +"oqy" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"oqA" = ( +/obj/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"oqC" = ( +/obj/machinery/lapvend{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"oqK" = ( +/obj/structure/closet/emcloset, +/obj/item/tank/air, +/obj/item/wrench, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/substation/bridgedeck) +"oqU" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft) +"ora" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 1" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"ore" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"orf" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_east = 4; + tag_north = 3; + tag_south = 2; + tag_west = 1 + }, +/obj/floor_decal/industrial/outline/green, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"oro" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/engineering/atmos) +"oru" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/medical/staging) +"orC" = ( +/obj/structure/table/woodentable/mahogany, +/obj/floor_decal/carpet/red{ + dir = 8 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"orR" = ( +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"orY" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"osm" = ( +/obj/floor_decal/techfloor/orange, +/obj/machinery/rotating_alarm/supermatter{ + pixel_y = -14; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"osy" = ( +/obj/machinery/atmospherics/tvalve/mirrored/digital{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/gas) +"osJ" = ( +/obj/shuttle_landmark/merchant/out, +/turf/space, +/area/space) +"osL" = ( +/obj/machinery/door/window/westright, +/obj/machinery/door/window/eastright, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/sauna) +"osP" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/hallway/primary/thirddeck/central_stairwell) +"ote" = ( +/obj/landmark/start{ + name = "Captain" + }, +/obj/structure/bed/sofa/r/blue{ + dir = 4 + }, +/obj/structure/sign/poster{ + pixel_y = 32 + }, +/obj/floor_decal/carpet/red{ + dir = 1 + }, +/obj/floor_decal/carpet/red{ + dir = 8 + }, +/obj/floor_decal/carpet/red{ + dir = 9 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/captain/beach) +"oti" = ( +/obj/machinery/tele_beacon, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"otj" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"otk" = ( +/obj/structure/closet/l3closet/virology, +/obj/floor_decal/industrial/outline/yellow, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology) +"otl" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"oto" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery/second) +"otx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"otE" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"otI" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/assembly/chargebay) +"otJ" = ( +/obj/structure/closet/crate/medical, +/obj/item/bodybag/rescue, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"otN" = ( +/obj/machinery/floodlight{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/airlock_sensor/airlock_interior{ + frequency = 1331; + id_tag = "calypso_shuttle_interior_sensor"; + master_tag = "calypso_shuttle"; + pixel_x = -25; + req_access = list("ACCESS_EXPEDITION_SHUTTLE") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/airlock) +"otO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod4/station) +"otS" = ( +/obj/structure/bed/chair/padded/green{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 6 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"otU" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"ouc" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + dir = 8; + autoset_access = 0; + name = "Central Stairwell" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/central_stairwell) +"oue" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"ouf" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"oum" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/flasher{ + dir = 4; + id_tag = "ai_core"; + pixel_x = -24 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"ouo" = ( +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/bridge/storage) +"ouq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/warning/smoking{ + pixel_y = 32 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"out" = ( +/obj/structure/flora/ausbushes/genericbush, +/obj/structure/railing/mapped, +/turf/simulated/floor/grass/cut, +/area/hallway/primary/bridgedeck/center) +"ouu" = ( +/obj/structure/table/standard, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/obj/structure/sign/poster{ + pixel_y = 32 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sleep/bunk) +"ouw" = ( +/turf/simulated/wall/r_wall/hull, +/area/medical/mentalhealth/therapyroom) +"ouB" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"ouD" = ( +/obj/floor_decal/corner/black/half{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/ship) +"ouJ" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/machinery/disposal, +/obj/floor_decal/corner/green/border{ + dir = 9 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft_stairwell) +"ouU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"ouV" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"ouZ" = ( +/obj/machinery/cell_charger, +/obj/item/cell/standard, +/obj/random/powercell, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/table/steel_reinforced, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"ove" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"ovl" = ( +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"ovq" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"ovu" = ( +/obj/structure/table/woodentable/maple, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"ovz" = ( +/obj/item/paper/sticky{ + name = "I am door"; + pixel_y = -25 + }, +/turf/simulated/floor/plating, +/area/vacant/cargo) +"ovB" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"ovG" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"ovI" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"ovQ" = ( +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"ovT" = ( +/obj/machinery/computer/modular/preset/aislot/sysadmin{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"ovV" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + locked = 1 + }, +/obj/item/taperoll/engineering/applied, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/vacant/dungeon) +"owd" = ( +/obj/machinery/computer/ship/disperser{ + dir = 4 + }, +/obj/floor_decal/corner/black/full, +/turf/simulated/floor/tiled/dark, +/area/command/bsa) +"owj" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/air_sensor{ + id_tag = "BSDrive" + }, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace/chamber) +"owl" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/no_grille, +/turf/simulated/floor/plating, +/area/storage/eva) +"ows" = ( +/obj/structure/bed/chair/rounded/blue, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"owx" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"owy" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/structure/closet/firecloset, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Fore Hallway - OFD" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"owB" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/device/radio/intercom/department/medbay{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery) +"owI" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/greengrid, +/area/engineering/gravitaional_generator) +"owN" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"owS" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/titanium, +/area/shuttle/petrov/equipment) +"owU" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"owY" = ( +/obj/structure/catwalk, +/obj/structure/table/standard, +/obj/random/toolbox, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"oxa" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"oxc" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"oxh" = ( +/obj/structure/table/rack, +/obj/item/rig/medical/equipped, +/obj/item/clothing/mask/gas/half, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/window/northright{ + dir = 4; + name = "RIG"; + req_access = newlist() + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"oxi" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"oxn" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/starboard) +"oxu" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"oxy" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"oxC" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/glass/command{ + name = "Central Stairwell" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/bridgedeck/central_stairwell) +"oxE" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"oxG" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/surgery) +"oxV" = ( +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/structure/table/rack, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/screwdriver, +/obj/item/crowbar, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"oxW" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 4; + icon_state = "shutter0"; + id_tag = "hangar_ts_shutters"; + name = "Hangar Deck Hallway Shutters"; + opacity = 0 + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown3_4" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + name = "Visitors"; + id_tag = "hangar_ts_doors" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/fore) +"oyb" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/black/border{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation/second) +"oyg" = ( +/obj/structure/ladder/up, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"oyl" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/lounge/upper) +"oym" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"oyp" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftport) +"oys" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level2) +"oyB" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"oyH" = ( +/obj/structure/table/woodentable/walnut, +/obj/structure/flora/pottedplant/shoot{ + pixel_y = 18; + pixel_x = -7 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/random/toy, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"oyN" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"oyP" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"oyR" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"ozf" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "eng1_inner"; + name = "Third Deck Starboard Nacelle Access" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/thruster/d3starboard) +"ozh" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"ozj" = ( +/obj/structure/table/woodentable_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/command/chief_steward) +"ozl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"ozr" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/westright{ + dir = 2; + name = "Medical Reception" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Entry Shutters" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/infirmreception) +"ozv" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/storage) +"ozA" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftstarboard) +"ozF" = ( +/obj/structure/largecrate, +/obj/random/maintenance, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"ozH" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "sd_port_pump" + }, +/obj/machinery/airlock_sensor{ + id_tag = "sd_port_sensor"; + master_tag = "sd_port"; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"ozR" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/bed/chair/padded/blue, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"oAb" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/bunk) +"oAc" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"oAe" = ( +/obj/structure/bed/chair/comfy/brown, +/obj/floor_decal/carpet/green{ + dir = 4 + }, +/obj/floor_decal/carpet/green{ + dir = 1 + }, +/obj/floor_decal/carpet/green{ + dir = 5 + }, +/turf/simulated/floor/carpet/green, +/area/medical/mentalhealth/therapyroom) +"oAi" = ( +/obj/machinery/computer/operating{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/xenobiology/level1) +"oAj" = ( +/obj/structure/closet/l3closet/security, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/item/clothing/suit/bio_suit/security, +/obj/item/clothing/head/bio_hood/security, +/obj/item/clothing/mask/gas/half, +/obj/item/tank/oxygen_emergency_extended, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/suits) +"oAk" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + id_tag = "null"; + name = "Captain's office"; + secured_wires = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/captain) +"oAm" = ( +/obj/machinery/atmospherics/valve, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"oAy" = ( +/obj/floor_decal/corner/green/border{ + dir = 5 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"oAB" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"oAD" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"oAH" = ( +/turf/simulated/wall/prepainted, +/area/command/exploration_leader) +"oAM" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"oAZ" = ( +/obj/random/obstruction, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"oBg" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"oBh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"oBk" = ( +/obj/wallframe_spawn/reinforced/polarized/no_grille/regular{ + id = "private_cafe_windows" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/crew_quarters/cafe/upper) +"oBo" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/industrial/danger{ + dir = 9 + }, +/obj/structure/table/steel, +/obj/machinery/chemical_dispenser/bar_coffee/full{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"oBC" = ( +/obj/structure/lattice, +/obj/floor_decal/industrial/traffic{ + dir = 4 + }, +/obj/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"oBK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/navbeacon/sierra/TD_fore4, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"oBR" = ( +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/corner/green/three_quarters{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/hydroponics) +"oBS" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"oBW" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/open, +/area/hallway/primary/thirddeck/central_stairwell) +"oCa" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"oCi" = ( +/obj/shuttle_landmark/skipjack/deck5, +/turf/space, +/area/space) +"oCm" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"oCq" = ( +/obj/structure/bed/sofa/m/beige{ + dir = 10 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"oCu" = ( +/obj/machinery/door/blast/regular/escape_pod{ + id_tag = "escape_pod_6" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/maintenance/exterior) +"oCv" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "bridge_windows" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/bridge) +"oCy" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/recharger, +/obj/machinery/camera/network/security{ + c_tag = "Security - Armory Lobby"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"oCI" = ( +/obj/structure/bed/chair/office/comfy/red{ + dir = 8 + }, +/obj/landmark/start{ + name = "Head of Security" + }, +/obj/machinery/button/alternate/door{ + desc = "A remote control-switch for the office door."; + dir = 4; + id_tag = "hosdoor"; + name = "Office Door Control"; + pixel_x = -24; + pixel_y = 21; + req_access = list("ACCESS_HEAD_OF_SECURITY") + }, +/obj/machinery/keycard_auth/sierra{ + pixel_x = -25; + pixel_y = -23 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"oCK" = ( +/obj/structure/adherent_bath, +/obj/structure/sign/warning/fire{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/crystal, +/area/crew_quarters/adherent) +"oCT" = ( +/obj/machinery/door/airlock/civilian{ + name = "Showers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/gym) +"oCW" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"oCZ" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"oDb" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"oDc" = ( +/obj/floor_decal/corner/grey/full, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/device/flashlight/lamp/lava/blue{ + pixel_y = -2; + pixel_x = 7 + }, +/obj/structure/sign/poster{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"oDh" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"oDs" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/floor_decal/spline/plain/yellow{ + dir = 8 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 15 + }, +/obj/item/storage/toolbox/electrical{ + pixel_x = -1; + pixel_y = 6 + }, +/obj/item/shovel, +/obj/item/shovel, +/obj/item/storage/box/mousetraps, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"oDz" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"oDE" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"oDI" = ( +/obj/floor_decal/corner/red, +/obj/structure/bed/chair/padded/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"oDJ" = ( +/obj/machinery/disposal, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/brown/border{ + dir = 6 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"oDO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"oDP" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/danger{ + dir = 9 + }, +/obj/machinery/camera/network/hangar{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar) +"oDQ" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"oDU" = ( +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"oDV" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/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" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"oDY" = ( +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + dir = 4; + id_tag = "eng2"; + name = "Third Deck Port Nacelle Access"; + pixel_x = -21; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/structure/cable/green, +/obj/machinery/power/apc/high/critical{ + pixel_y = -24; + name = "south bump" + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Fourth Deck - Port Necelle - Airlock"; + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"oEg" = ( +/obj/random/trash, +/turf/simulated/floor/tiled, +/area/maintenance/abandoned_hydroponics) +"oEl" = ( +/obj/floor_decal/techfloor/orange, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"oEm" = ( +/obj/structure/table/woodentable/maple, +/obj/item/storage/box/cups, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"oEn" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"oEp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"oEA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/south) +"oED" = ( +/obj/structure/bed/sofa/r/beige{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/cafe) +"oEH" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/paint_stripe/red, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/security/sierra/forensic/lab) +"oEN" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "packageSort1" + }, +/obj/structure/sign/warning/moving_parts{ + pixel_y = -32 + }, +/turf/simulated/floor/plating, +/area/quartermaster/office/post) +"oEO" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/device/flashlight/lamp/lava/red{ + pixel_y = 11; + pixel_x = 3 + }, +/obj/item/storage/secure/safe{ + pixel_x = 32 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/heads/office/hos/cobed) +"oEU" = ( +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hos) +"oEW" = ( +/obj/random/junk, +/turf/simulated/floor/tiled, +/area/maintenance/abandoned_hydroponics) +"oFa" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/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/structure/disposalpipe/segment, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"oFb" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Surgery - Operation Theatre One"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery) +"oFf" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/medical/virology/ward) +"oFg" = ( +/obj/decal/cleanable/blood, +/obj/floor_decal/industrial/outline/red, +/obj/structure/bed/chair/comfy{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"oFq" = ( +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/railing/mapped, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/tcommsat/computer) +"oFs" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"oFB" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/industrial/danger{ + dir = 10 + }, +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/camera/network/command{ + c_tag = "Command - Bridge Entrance"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"oFI" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/port) +"oFK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"oFS" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"oFU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/foreport) +"oGe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"oGg" = ( +/obj/floor_decal/corner/blue{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"oGh" = ( +/obj/structure/catwalk, +/obj/structure/handrail{ + dir = 8 + }, +/turf/space, +/area/space) +"oGi" = ( +/obj/structure/table/marble, +/obj/item/material/chopping_board, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"oGo" = ( +/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/structure/catwalk, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"oGs" = ( +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 4; + name = "Internal Affairs Agent"; + sort_type = "Internal Affairs Agent" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"oGx" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"oGC" = ( +/obj/machinery/disposal, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled, +/area/rnd/office) +"oGD" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"oGG" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/powered/pump, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"oGL" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/sign/warning/nosmoking_1{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/waterstore) +"oGN" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"oGP" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/floodlight{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"oGS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"oGV" = ( +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/filingcabinet{ + pixel_x = -10 + }, +/obj/structure/filingcabinet, +/obj/structure/filingcabinet{ + pixel_x = 10 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"oGX" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"oGZ" = ( +/obj/structure/fitness/punchingbag, +/obj/structure/sign/poster/nyc/wanted{ + pixel_y = 32 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"oHh" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_x = 21; + dir = 8 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/heads/office/hos/cobed) +"oHt" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"oHu" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"oHC" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/decal/cleanable/dirt, +/obj/item/reagent_containers/glass/bucket, +/turf/simulated/floor/tiled/freezer, +/area/vacant/sauna) +"oHF" = ( +/obj/machinery/door/airlock/civilian{ + name = "Cafe" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"oHN" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head/deck3) +"oHQ" = ( +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"oHV" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"oHY" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"oIf" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/structure/closet/emcloset, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/seconddeck) +"oIh" = ( +/obj/machinery/organ_printer/flesh/mapped, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery/second) +"oIi" = ( +/obj/structure/stairs/east, +/obj/structure/sign/directions/bridge{ + pixel_y = -24; + dir = 4 + }, +/obj/structure/sign/directions/science{ + dir = 4; + pixel_y = -31 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/central_stairwell) +"oIo" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"oIv" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/turret_protected/ai_cyborg_station) +"oIB" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"oIE" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 4 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"oIG" = ( +/obj/structure/railing/mapped, +/obj/structure/bed/sofa/l/blue, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"oIZ" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"oJb" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "observation_shielding"; + name = "Observation Shield" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/dungeon_master_lounge) +"oJd" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/bed/chair/office/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/port) +"oJi" = ( +/obj/structure/bed/chair/padded/blue{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"oJp" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow, +/obj/machinery/computer/air_control{ + dir = 8; + input_tag = "n2_in"; + name = "Nitrogen Supply Control"; + output_tag = "n2_out"; + sensor_name = "Tank"; + sensor_tag = "n2_sensor" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"oJs" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/containment) +"oJt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"oJw" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/full{ + id = "rd_windows" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/rd) +"oJx" = ( +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/corner/darkblue/bordercorner, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"oJA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + 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/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"oJH" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/machinery/power/smes/buildable/preset/sierra/hangar{ + RCon_tag = "Substation - Shield" + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/shield/thirddeck) +"oJN" = ( +/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/structure/disposalpipe/segment, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"oJT" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"oKq" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "SupermatterPort"; + name = "Reactor Blast Door" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, +/area/engineering/engine_room) +"oKt" = ( +/obj/machinery/telecomms/server/presets/engineering, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"oKz" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"oKA" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/obj/structure/ladder/up, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/bar/cobed) +"oKB" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger, +/obj/structure/sign/poster/nyc/wanted{ + pixel_x = 32 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Aft Hallway"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"oKG" = ( +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 1; + id_tag = "ai_core_pump" + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techmaint, +/area/turret_protected/ai_teleport) +"oKJ" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"oKN" = ( +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 23 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/corner/grey/three_quarters{ + dir = 4 + }, +/obj/structure/flora/pottedplant/minitree, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"oKR" = ( +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"oKT" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/folder/nt, +/obj/item/folder/red{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/item/folder/blue{ + pixel_y = 5; + pixel_x = 5 + }, +/obj/floor_decal/carpet/blue, +/obj/item/stamp/internalaffairs{ + pixel_y = -2 + }, +/obj/item/stamp/denied{ + pixel_y = 4; + pixel_x = -5 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa/high_sec) +"oLd" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/hallway/primary/bridgedeck/central_stairwell) +"oLh" = ( +/obj/structure/table/steel, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/sign/poster{ + pixel_x = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 5 + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Chief Engineer"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"oLi" = ( +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"oLl" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/ocp_wall, +/area/shuttle/petrov/gas) +"oLo" = ( +/obj/shuttle_landmark/escape_pod/start/pod2, +/obj/wallframe_spawn/reinforced/titanium, +/turf/simulated/floor/plating, +/area/shuttle/escape_pod/escape_pod2/station) +"oLp" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"oLr" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"oLA" = ( +/obj/item/stool/padded/red, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/aftstarboard) +"oLF" = ( +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"oLN" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"oLY" = ( +/obj/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled, +/area/maintenance/abandoned_hydroponics) +"oMa" = ( +/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" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/gym) +"oMg" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/bed/chair/armchair/purple, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"oMi" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"oMx" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/device/camera, +/obj/item/device/camera_film, +/obj/item/device/camera_film{ + pixel_y = 6; + pixel_x = 7 + }, +/obj/floor_decal/carpet/blue, +/obj/floor_decal/carpet/blue, +/obj/floor_decal/carpet/blue{ + dir = 4 + }, +/obj/floor_decal/carpet/blue{ + dir = 6 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa/high_sec) +"oMG" = ( +/obj/machinery/vending/tool{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"oMI" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/bed/sofa/l/brown{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"oMJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/machinery/sleeper, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod3/station) +"oMM" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/canister) +"oMW" = ( +/turf/simulated/wall/r_wall/hull, +/area/quartermaster/hangar_stairs) +"oMX" = ( +/obj/machinery/computer/modular/preset/dock{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/half{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"oMY" = ( +/obj/floor_decal/carpet/blue2{ + dir = 8 + }, +/obj/floor_decal/carpet/blue2, +/obj/floor_decal/carpet/blue2{ + dir = 10 + }, +/obj/structure/dogbed, +/mob/living/simple_animal/passive/corgi/Ian, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/hop/cobed) +"oNi" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/techfloor/hole{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/servers) +"oNj" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/structure/closet/cabinet, +/obj/item/book/manual/solgov_law, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/iaa/cobed) +"oNm" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"oNn" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"oNp" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8; + frequency = 1441; + id = "o2_in"; + use_power = 1 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/engineering/atmos) +"oNF" = ( +/obj/structure/holoplant, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sauna) +"oNN" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/solar/bridge_port) +"oNQ" = ( +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/structure/railing/mapped, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/tcommsat/computer) +"oNZ" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/suits) +"oOc" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"oOh" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor, +/area/solar/bridge_port) +"oOi" = ( +/obj/floor_decal/corner/red, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"oOk" = ( +/obj/structure/bookcase/manuals/security, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"oOm" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"oOn" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/storage/primary) +"oOr" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"oOu" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 8 + }, +/obj/machinery/photocopier, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"oOB" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/power/smes/buildable/preset/sierra/substation{ + RCon_tag = "Utility - Second Backup" + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/engineering/auxpower) +"oOH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"oOJ" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/space) +"oOK" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/wall/r_wall/hull, +/area/turret_protected/ai_teleport) +"oOL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"oOO" = ( +/obj/structure/table/rack, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/item/rig/command/hos/equipped, +/obj/item/clothing/mask/gas/half, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/window/brigdoor/westleft{ + id_tag = "iaaright"; + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"oOR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"oOW" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"oOX" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"oOZ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"oPi" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/space_heater{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/bluespace/chamber) +"oPr" = ( +/obj/structure/table/steel, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/deck/cards, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"oPv" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/center) +"oPB" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 3" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"oPF" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"oPJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway) +"oPP" = ( +/obj/structure/bed/chair/shuttle{ + dir = 1 + }, +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/escape_pod/escape_pod8/station) +"oPZ" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"oQb" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"oQc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod1/station) +"oQg" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"oQh" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/obj/machinery/camera/network/fourth_deck{ + dir = 1; + c_tag = "Fourth Deck - Central Hallway" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"oQi" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos/bridge) +"oQn" = ( +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"oQw" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"oQx" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"oQB" = ( +/obj/floor_decal/corner/red, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/bed/chair/office/green{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"oQE" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/medical/mortus{ + name = "Morgue"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"oQH" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake{ + pixel_y = 6; + pixel_x = 8 + }, +/obj/item/handcuffs, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"oQJ" = ( +/obj/floor_decal/techfloor/orange, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"oQN" = ( +/obj/paint_stripe/red, +/obj/machinery/door/firedoor, +/obj/structure/cable/green, +/obj/wallframe_spawn/reinforced/polarized{ + id = "forensicswindow" + }, +/turf/simulated/floor/plating, +/area/security/sierra/forensic) +"oQQ" = ( +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/maintenance/firstdeck/centralstarboard) +"oRb" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/floor_decal/corner/grey/full, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/NT, +/obj/item/reagent_containers/food/drinks/teapot{ + pixel_x = 4; + pixel_y = 16 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"oRl" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"oRs" = ( +/obj/machinery/fusion_fuel_injector/mapped{ + initial_id_tag = "aux_fusion_plant" + }, +/turf/simulated/floor/reinforced, +/area/vacant/prototype/engine) +"oRu" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/structure/sign/directions/security{ + pixel_y = -24; + dir = 1 + }, +/obj/structure/sign/directions/infirmary{ + pixel_y = -31; + dir = 1 + }, +/obj/structure/sign/directions/science{ + pixel_y = -38; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"oRw" = ( +/obj/structure/hygiene/toilet{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/decal/cleanable/blood, +/obj/decal/cleanable/blood/drip, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"oRE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"oRP" = ( +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"oRR" = ( +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"oRX" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8; + req_access = newlist() + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_eva) +"oSc" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 6 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"oSi" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"oSk" = ( +/obj/structure/girder, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"oSw" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"oSE" = ( +/obj/floor_decal/corner/black{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"oSI" = ( +/obj/structure/closet, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"oSP" = ( +/obj/paint_stripe/nt_red, +/obj/paint/nt_white, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod8/station) +"oSU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 5 + }, +/obj/floor_decal/corner/purple{ + dir = 5 + }, +/obj/machinery/computer/air_control{ + input_tag = "fuel1p_in"; + name = "Fuel Supply Control"; + output_tag = "fuel1p_out"; + sensor_name = "Tank"; + sensor_tag = "ReacEngPlasma1" + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"oSZ" = ( +/obj/floor_decal/corner/green/border{ + dir = 5 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"oTb" = ( +/obj/structure/flora/pottedplant/smalltree, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"oTc" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"oTm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"oTo" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"oTr" = ( +/obj/structure/bed/chair/office/comfy/blue{ + dir = 1 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23; + pixel_y = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"oTt" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/thirddeck/foreport) +"oTB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/glass/security{ + id_tag = "security_entry_airlock_enter"; + dir = 8; + name = "Security Entry" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway/aft) +"oTC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"oTF" = ( +/obj/structure/bed/sofa/l/brown, +/obj/floor_decal/carpet/red{ + dir = 1 + }, +/obj/floor_decal/carpet/red{ + dir = 8 + }, +/obj/floor_decal/carpet/red{ + dir = 9 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"oTG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sauna) +"oTI" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"oTM" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"oTP" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/black/border, +/obj/structure/closet/cabinet, +/obj/item/book/manual/nt_sop, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23; + pixel_y = 5 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/iaa/cobed) +"oTR" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/computer/air_control{ + input_tag = "containment_in"; + name = "Containment Chamber Gas Monitor"; + output_tag = "containment_out"; + sensor_name = "Containment Chamber"; + sensor_tag = "containment_sensor" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"oTT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 23 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/laundry) +"oUc" = ( +/obj/structure/sign/warning/airlock{ + dir = 8 + }, +/turf/simulated/wall/prepainted, +/area/maintenance/solar/bridge_starboard) +"oUi" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/structure/sign/directions/supply{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/aft_stairwell) +"oUl" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "fusion_observation" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/control) +"oUm" = ( +/obj/machinery/disposal, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"oUp" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/techfloor/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/servers) +"oUq" = ( +/obj/structure/bed/chair/padded/purple{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"oUx" = ( +/obj/structure/table/woodentable, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/item/paper{ + pixel_y = 3; + pixel_x = 6 + }, +/obj/item/paper{ + pixel_y = -5; + pixel_x = 5 + }, +/obj/item/paper{ + pixel_x = -2 + }, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"oUH" = ( +/obj/machinery/atmospherics/valve{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"oUI" = ( +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"oUL" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + 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 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"oUS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"oUW" = ( +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"oVg" = ( +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"oVB" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"oVE" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/exploration) +"oVJ" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/window/boron_reinforced{ + dir = 4 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d3starboard) +"oVL" = ( +/obj/machinery/vending/dinnerware{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"oVN" = ( +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue) +"oVS" = ( +/obj/machinery/organ_printer/robot/mapped, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery/second) +"oVV" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"oVY" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/equipment) +"oWd" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/pump, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"oWe" = ( +/obj/machinery/light/spot, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/corner/lime/mono, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/center) +"oWj" = ( +/obj/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/random/masks, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"oWk" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"oWo" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/center) +"oWv" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/firstdeck/forestarboard) +"oWy" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/structure/bed/sauna_bench/middle/north, +/obj/item/device/flashlight/lamp/lava/orange{ + pixel_y = 3; + pixel_x = 9 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sauna) +"oWC" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/reagent_dispensers/watertank, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/starboard) +"oWO" = ( +/obj/structure/table/glass, +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"oWS" = ( +/obj/machinery/suit_storage_unit/explorer, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/eva) +"oWT" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"oWW" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"oXn" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/flora/pottedplant/stoutbush, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"oXp" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/navbeacon/sierra/SD_fore5, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"oXz" = ( +/obj/structure/sign/poster{ + pixel_y = 32 + }, +/obj/floor_decal/spline/plain/brown{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/actor) +"oXA" = ( +/obj/structure/bed/chair/office/comfy/blue{ + dir = 1 + }, +/obj/floor_decal/carpet/blue2, +/obj/machinery/keycard_auth/sierra{ + pixel_x = 3; + pixel_y = -22 + }, +/obj/machinery/button/alternate/door{ + desc = "A remote control-switch for the office door."; + dir = 1; + id_tag = "pmdoor"; + name = "Office Door Control"; + pixel_x = -9; + pixel_y = -22; + req_access = list("ACCESS_HEAD_OF_PERSONNEL") + }, +/obj/machinery/button/windowtint{ + dir = 1; + id = "hop_windows"; + pixel_x = 12; + pixel_y = -21 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/hop) +"oXI" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/porta_turret{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"oXJ" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"oXK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"oXL" = ( +/obj/structure/lattice, +/obj/structure/rubble, +/obj/random/junk, +/obj/random/junk, +/turf/simulated/open, +/area/maintenance/thirddeck/aftport) +"oXQ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/obj/structure/flora/pottedplant/decorative, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"oXS" = ( +/obj/floor_decal/corner/darkblue, +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/bridge/storage) +"oXV" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/table/woodentable/walnut, +/obj/machinery/microwave, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"oYa" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_2" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/fore) +"oYe" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"oYf" = ( +/obj/item/storage/secure/safe{ + pixel_x = 24 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dormintories) +"oYh" = ( +/obj/structure/closet/radiation, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"oYi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"oYr" = ( +/obj/random/closet, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"oYB" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/atmos) +"oYP" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/command/exploration_leader) +"oYZ" = ( +/obj/floor_decal/steeldecal/steel_decals9, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"oZb" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"oZc" = ( +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"oZg" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"oZh" = ( +/obj/structure/table/reinforced, +/obj/machinery/body_scan_display{ + pixel_y = 24 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/storage/box/freezer, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery) +"oZi" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"oZl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"oZs" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/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/tiled/dark/monotile, +/area/medical/staging) +"oZu" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/table/standard, +/obj/item/scalpel/basic, +/obj/item/retractor, +/turf/simulated/floor/tiled/white/monotile, +/area/vacant/gambling) +"oZz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/camera/network/engine{ + c_tag = "Engine - R-UST - Entry"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/prototype/engine) +"oZK" = ( +/obj/structure/sign/warning/radioactive{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"oZL" = ( +/obj/structure/hygiene/shower, +/obj/structure/curtain/open/shower, +/obj/structure/window/basic{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/gym) +"oZN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "petrov_shuttle_dock_outer"; + name = "Docking Port Airlock"; + autoset_access = 0; + req_access = list(list("ACCESS_PETROV","ACCESS_SEC_DOORS")) + }, +/obj/machinery/shield_diffuser, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"oZT" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"oZV" = ( +/obj/floor_decal/corner/red, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"oZY" = ( +/obj/machinery/telecomms/bus/preset_three, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"paa" = ( +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/obj/machinery/fabricator{ + fab_status_flags = 1 + }, +/obj/item/stack/material/steel/fifty{ + pixel_x = -5 + }, +/obj/item/stack/material/glass/fifty{ + pixel_x = 7 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/item/stack/material/plastic/ten, +/obj/item/stack/material/plastic/ten, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"pad" = ( +/obj/structure/sign/warning/deathsposal, +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/cargo_l) +"pag" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/vacant/utility) +"pah" = ( +/obj/machinery/light, +/obj/floor_decal/techfloor, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"pal" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ + dir = 4 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"pam" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway/aft) +"paF" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/bed/sofa/l/brown{ + dir = 1 + }, +/obj/floor_decal/carpet/red{ + dir = 4 + }, +/obj/floor_decal/carpet/red, +/obj/floor_decal/carpet/red{ + dir = 6 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"paK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/chapel/office) +"paZ" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the engine thruster blast doors."; + id_tag = "ThrusterVents"; + name = "Thruster Blast Door control"; + req_access = list("ACCESS_ENGINE_EQUIP"); + pixel_x = -24; + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"pbf" = ( +/obj/floor_decal/corner/purple/half, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"pbh" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/green/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"pbl" = ( +/obj/structure/curtain/medical, +/obj/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/floor_decal/corner/lime/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"pbp" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"pbu" = ( +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"pbx" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "escape_pod_3_pump" + }, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ + dir = 8; + id_tag = "escape_pod_3"; + name = "escape pod three controller"; + pixel_x = 20; + tag_door = "escape_pod_3_hatch"; + frequency = 1380 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/grey/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod3/station) +"pbz" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"pbE" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"pbH" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"pbP" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"pbU" = ( +/obj/floor_decal/corner/green, +/obj/floor_decal/corner/purple/bordercorner, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"pbW" = ( +/obj/structure/table/woodentable/mahogany, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"pbY" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 9 + }, +/obj/structure/lattice, +/turf/space, +/area/space) +"pcb" = ( +/obj/structure/bookcase, +/obj/item/book/manual/engineering_guide, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"pcc" = ( +/obj/structure/catwalk, +/obj/random/trash, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"pch" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"pck" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/reagent_dispensers/watertank, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"pco" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/eva) +"pcp" = ( +/obj/machinery/vending/medical/sierra{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/medical/maintenance_equipstorage) +"pcB" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/center) +"pcC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"pcG" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"pcH" = ( +/obj/machinery/cooker/grill, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"pcP" = ( +/obj/structure/closet/secure_closet/crew/research, +/obj/floor_decal/industrial/outline/yellow, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/item/folder/nt, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/equipment) +"pcQ" = ( +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp{ + pixel_y = 10 + }, +/obj/item/device/camera, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation) +"pdd" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod3/station) +"pdl" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"pdt" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/condiment/barbecue{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/condiment/enzyme{ + pixel_y = 8 + }, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/prison) +"pdu" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"pdw" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"pdD" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/tcommsat/chamber) +"pdE" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/random/junk, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"pdF" = ( +/obj/machinery/papershredder, +/obj/floor_decal/corner/yellow/half{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"pdI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation) +"pdJ" = ( +/obj/machinery/status_display, +/turf/simulated/wall/prepainted, +/area/crew_quarters/sleep/bunk) +"pdK" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/shuttle_landmark/sierra/hangar/exploration_shuttle, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cockpit) +"pdL" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/no_grille, +/turf/simulated/floor/plating, +/area/quartermaster/expedition) +"pdX" = ( +/obj/structure/table/standard, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/random/powercell, +/obj/random/powercell, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"pdZ" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"ped" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "hangar_hallway_shutters"; + name = "Hangar Deck Hallway Shutters"; + opacity = 0 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/foreport) +"pej" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + name = "Quartermaster's Office"; + sort_type = "Quartermaster's Office" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft) +"pel" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"pen" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"peo" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"pep" = ( +/obj/structure/closet/crate/secure/weapon, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"pev" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"pex" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"peD" = ( +/obj/machinery/suit_storage_unit/mining, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/brown/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"peF" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/computer/ship/navigation{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"peH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"peK" = ( +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"peL" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"peP" = ( +/obj/structure/table/reinforced, +/obj/item/device/radio/electropack, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"peQ" = ( +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"peU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"peY" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"pfc" = ( +/obj/floor_decal/solarpanel, +/obj/machinery/power/solar{ + id = "auxsolarsport"; + name = "Aft Port Solar Array" + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/solar/port) +"pfe" = ( +/obj/structure/fitness/punchingbag, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/red/bordercorner2, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"pfh" = ( +/obj/structure/sign/warning/compressed_gas, +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d3port) +"pfn" = ( +/obj/machinery/vending/parts/public{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"pfo" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/toolbox, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"pfq" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/structure/table/standard, +/obj/item/device/integrated_electronics/debugger{ + pixel_x = -5 + }, +/obj/item/device/integrated_electronics/wirer, +/obj/item/device/integrated_electronics/analyzer{ + pixel_x = 6 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"pfr" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "do_windows" + }, +/obj/machinery/door/blast/shutters/open{ + name = "QM Office Shutters"; + id_tag = "qm_office" + }, +/turf/simulated/floor/plating, +/area/quartermaster/deckofficer) +"pfw" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "xenobio_desk"; + name = "Space Shutters"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level1) +"pfy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"pfE" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/structure/table/steel, +/obj/item/storage/toolbox/emergency, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/closet/hydrant{ + pixel_x = -28 + }, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"pfR" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/storage) +"pfT" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/structure/bed/chair/pew/left, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/wood, +/area/crew_quarters/actor/stage) +"pfV" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"pfZ" = ( +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"pgb" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/cistern) +"pge" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"pgg" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"pgn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/half{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"pgt" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"pgv" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "Skynet_launch"; + name = "Mech Bay"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/assembly/chargebay) +"pgw" = ( +/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" + }, +/obj/machinery/door/airlock/medical{ + dir = 1; + name = "Therapy Room" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/mentalhealth/therapyroom) +"pgC" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"pgI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Aft Port Solar Access"; + req_access = newlist() + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar) +"pgK" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Gravity Generator - SMES"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"pgN" = ( +/obj/machinery/air_sensor{ + id_tag = "xenobot_sensor"; + machine_name = "Xenoflora Enviroment" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/xenoflora) +"pgO" = ( +/obj/machinery/space_heater, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"pgQ" = ( +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 10 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/cafe/upper) +"pgS" = ( +/obj/structure/bed/chair/padded/blue, +/obj/structure/sign/dedicationplaque/sierra{ + pixel_y = 29 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"pgU" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/window/brigdoor/northleft{ + name = "Security Checkpoint" + }, +/obj/machinery/door/window/southleft{ + autoset_access = 0; + name = "Security Checkpoint" + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "hangar_checkpoint_shutters"; + name = "Hangar Deck Checkpoint Shutters"; + opacity = 0 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf/steel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/security/sierra/dockcheck) +"pgW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood/corner, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/breakroom) +"pgY" = ( +/obj/structure/closet/secure_closet/chaplain_sierra, +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/office) +"pha" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/thirddeck/fore) +"phb" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"phc" = ( +/obj/floor_decal/corner/black/full, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"phi" = ( +/obj/decal/cleanable/dirt, +/obj/structure/bed/chair/comfy/brown{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/vacant/mess) +"phs" = ( +/obj/structure/closet/secure_closet/chief_steward_sierra, +/obj/item/storage/slide_projector, +/turf/simulated/floor/wood, +/area/command/chief_steward) +"phx" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/curtain{ + color = "#aa0000" + }, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"phE" = ( +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"phJ" = ( +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"phN" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cargo_l) +"phR" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/vacant/sauna) +"phV" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/suplocker_room) +"phW" = ( +/obj/structure/closet/emcloset/anchored, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/corner/green/three_quarters{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/hydroponics) +"pih" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"pij" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"pik" = ( +/obj/floor_decal/corner/green/half{ + dir = 8 + }, +/obj/machinery/seed_storage/xenobotany{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"pin" = ( +/obj/decal/cleanable/spiderling_remains, +/obj/item/clothing/mask/gas/half, +/obj/item/tank/oxygen_emergency_extended, +/obj/item/extinguisher/mini, +/obj/spider/stickyweb, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level1) +"pip" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/seats_place) +"piy" = ( +/obj/machinery/mineral/unloading_machine, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/plasticflaps, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"piA" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/bed/chair/padded/red, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"piK" = ( +/obj/floor_decal/corner/grey/diagonal, +/obj/structure/bed/chair/padded/purple, +/obj/floor_decal/industrial/traffic{ + dir = 8; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/structure/railing/mapped{ + dir = 8; + init_color = "#8c911d"; + color = "#8c911d" + }, +/turf/simulated/floor/tiled, +/area/assembly/office) +"piM" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"pjb" = ( +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"pje" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"pjf" = ( +/obj/structure/bed/chair/armchair/black{ + dir = 8 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"pjg" = ( +/obj/machinery/atmospherics/tvalve/mirrored/digital{ + name = "phoron bypass valve" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"pji" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/button/blast_door{ + dir = 4; + id_tag = "observation_shielding"; + pixel_x = -24; + pixel_y = 24 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"pjj" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"pjk" = ( +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"pjt" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/green, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"pjy" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/hull, +/area/turret_protected/ai_teleport) +"pjA" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"pjE" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"pjF" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"pjG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"pjL" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"pjN" = ( +/obj/machinery/button/blast_door{ + dir = 8; + id_tag = "qm_warehouse"; + name = "Warehouse Shutters Control"; + pixel_x = 24; + req_access = list("ACCESS_CARGO") + }, +/obj/machinery/mech_recharger, +/mob/living/exosuit/premade/powerloader/old, +/obj/floor_decal/spline/plain/red{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"pjW" = ( +/turf/simulated/open, +/area/hallway/primary/firstdeck/aft_stairwell) +"pjX" = ( +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "PetrovBiohazard"; + name = "Petrov Biohazard Shutters" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/airlock) +"pkb" = ( +/turf/simulated/wall/prepainted, +/area/vacant/gambling) +"pke" = ( +/obj/machinery/vending/medical, +/turf/simulated/floor/tiled/white, +/area/vacant/infirmary) +"pkh" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"pkj" = ( +/obj/floor_decal/techfloor, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_x = -8; + pixel_y = -23 + }, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "medsafe"; + name = "safe room door-control"; + pixel_y = -23 + }, +/obj/floor_decal/techfloor/orange/corner, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"pkl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/ai_status_display{ + pixel_y = -32 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway/aft) +"pkq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/meter, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"pku" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/green, +/obj/structure/curtain/open/bed, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"pkw" = ( +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/forestarboard) +"pky" = ( +/obj/structure/bed/chair/padded/green{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"pkC" = ( +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "iaaright" + }, +/obj/structure/filingcabinet{ + pixel_x = -6 + }, +/obj/structure/filingcabinet{ + pixel_x = 5 + }, +/obj/machinery/button/alternate/door{ + desc = "A remote control-switch for the office door."; + id_tag = "iaadoorright"; + name = "Office Door Control"; + pixel_x = 5; + pixel_y = 24; + req_access = list("ACCESS_IAA") + }, +/obj/machinery/button/windowtint{ + id = "iaaright"; + pixel_x = -5; + pixel_y = 24 + }, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/floor_decal/carpet/blue{ + dir = 1 + }, +/obj/floor_decal/carpet/blue{ + dir = 9 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"pkM" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "burst_s"; + dir = 1 + }, +/obj/paint/red, +/obj/paint_stripe/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod10/station) +"pkZ" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 5 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"plb" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"plk" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/inactive{ + dir = 1; + pixel_y = 24 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/gambling) +"plt" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_pump/tank{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "o22p_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d3port) +"plu" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/port) +"plv" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/space, +/area/space) +"plz" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/fore) +"plB" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "bridge_outer_windows" + }, +/turf/simulated/floor/plating, +/area/bridge/nano) +"plE" = ( +/obj/machinery/computer/modular/preset/engineering{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for engine core."; + dir = 4; + id_tag = "BSD_windows"; + name = "Bluespace Driver Chamber Windows Control"; + pixel_x = -23; + pixel_y = 8 + }, +/obj/machinery/button/alternate/door/bolts{ + desc = "A remote control-switch for the engine core airlock hatch bolts."; + dir = 4; + id_tag = "BSD_airlock"; + name = "Containment Hatch Bolt Control"; + pixel_x = -23; + pixel_y = -5; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"plF" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"plN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/chapel/main) +"plR" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"plT" = ( +/obj/structure/table/standard, +/obj/item/storage/box/checkers/chess, +/obj/item/storage/box/checkers/chess/red, +/obj/item/board, +/turf/simulated/floor/tiled/white, +/area/medical/virology/ward) +"plU" = ( +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"pma" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 10 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/garden_room) +"pmj" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cargo_l) +"pmk" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/ce/cobed) +"pmm" = ( +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_6_hatch"; + name = "Escape Pod Seven Hatch" + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod6/station) +"pmn" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"pmo" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/engine_setup/pump_max, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"pmp" = ( +/obj/machinery/light, +/obj/floor_decal/techfloor, +/obj/structure/closet/crate/freezer/rations, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"pmF" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/button/flasher{ + id_tag = "security_pod_flash"; + name = "Chamber Flasher"; + pixel_x = 28; + pixel_y = 10; + dir = 8; + req_access = list("ACCESS_SECURITY") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"pmJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"pmK" = ( +/obj/wallframe_spawn/reinforced, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"pmO" = ( +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"pmR" = ( +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/blue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"pmT" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"pmV" = ( +/obj/structure/table/standard, +/obj/random/clipboard, +/obj/item/storage/briefcase, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/office) +"pmW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/green{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"pmX" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "escape_pod_5_pump" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/grey/border, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"pno" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"pnp" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/floor_decal/corner/green/half{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"pnv" = ( +/obj/structure/closet/walllocker/secure_closet/explo_gun{ + pixel_y = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/mauve/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"pnw" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"pnx" = ( +/obj/structure/table/standard, +/obj/item/defibrillator/loaded, +/obj/item/auto_cpr, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/sign/warning/nosmoking_1{ + dir = 4; + icon_state = "nosmoking"; + pixel_x = -32 + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Critical Wing - Reanimation"; + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"pnD" = ( +/obj/floor_decal/industrial/hatch/red, +/obj/structure/iv_stand, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery/second) +"pnE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"pnF" = ( +/obj/decal/cleanable/dirt, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"pnG" = ( +/obj/structure/table/rack, +/obj/item/device/scanner/xenobio, +/obj/item/device/scanner/xenobio, +/obj/item/storage/plants, +/obj/item/storage/plants, +/obj/item/device/scanner/plant, +/obj/item/device/scanner/plant, +/obj/item/device/geiger, +/obj/item/device/geiger, +/obj/item/material/hatchet, +/obj/item/material/hatchet, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/eva) +"pnI" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/science{ + name = "Exploration Equipment"; + req_access = newlist() + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/exploration/eva) +"pnK" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"pnM" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"pnT" = ( +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d3starboard) +"pnU" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"pob" = ( +/obj/structure/table/standard, +/obj/item/paper{ + pixel_x = 4 + }, +/obj/item/pen{ + pixel_y = 10; + pixel_x = -2 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"pom" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"pop" = ( +/turf/simulated/wall/r_wall/hull, +/area/hydroponics) +"pou" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"pow" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"poB" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/closet/crate/plastic, +/obj/item/paper/sierrau, +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"poV" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"poX" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/corner/red/bordercee{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ppb" = ( +/turf/simulated/wall/r_wall/hull, +/area/vacant/cargo) +"pph" = ( +/obj/machinery/door/firedoor, +/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/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"ppn" = ( +/obj/floor_decal/techfloor, +/obj/structure/bed/chair/comfy/purple{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"pps" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"ppx" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"ppC" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"ppE" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/xenobiology/level2) +"ppM" = ( +/obj/structure/table/steel, +/obj/item/device/scanner/xenobio, +/obj/item/device/scanner/xenobio, +/obj/item/device/scanner/xenobio, +/obj/item/device/scanner/xenobio, +/obj/item/device/scanner/xenobio, +/obj/item/device/scanner/xenobio, +/obj/item/device/scanner/gas, +/obj/item/device/scanner/gas, +/obj/item/device/scanner/gas, +/obj/item/device/scanner/gas, +/obj/item/device/scanner/gas, +/obj/item/device/scanner/gas, +/obj/item/storage/excavation, +/obj/item/device/measuring_tape, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"ppV" = ( +/obj/machinery/button/windowtint{ + id = "do_windows"; + pixel_x = -21; + pixel_y = -24; + dir = 1 + }, +/obj/floor_decal/corner/yellow/half, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"pqb" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"pqy" = ( +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"pqD" = ( +/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/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/port) +"pqE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"pqF" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/crew_quarters/gym) +"pqG" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/suits) +"pqK" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/computer/modular/preset/aislot/research{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/button/alternate/door{ + desc = "A remote control-switch for the cargo doors."; + dir = 1; + id_tag = "researchdoor_interior"; + name = "Research Door Control"; + pixel_x = 6; + pixel_y = -24; + req_access = list("ACCESS_RESEARCH") + }, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "Biohazard"; + name = "Biohazard Shutter Control"; + pixel_x = -6; + pixel_y = -24; + req_access = list("ACCESS_RESEARCH") + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/development) +"pqM" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/garden_room) +"pqN" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/red, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"pqP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"pqQ" = ( +/turf/simulated/wall/prepainted, +/area/engineering/atmos/storage) +"pqS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"pqT" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"pqU" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"prk" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/civilian, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/docking) +"prl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"prr" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"prF" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod3/station) +"prJ" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway/aft) +"prK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"prO" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"prP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"prT" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"prX" = ( +/obj/structure/catwalk, +/obj/machinery/light/spot, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"prY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"psd" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/button/alternate/door{ + id_tag = "MedbayER2"; + dir = 4; + pixel_y = -8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"psh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/fore) +"psk" = ( +/obj/wallframe_spawn/reinforced/polarized/full{ + id = "cmo_windows" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Entry Shutters" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/cmo) +"psl" = ( +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"psn" = ( +/obj/machinery/disposal, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"psp" = ( +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 8; + display_name = "Fore Dock"; + frequency = 1380; + id_tag = "nuke_shuttle_dock_airlock"; + pixel_x = 20; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/docking) +"pss" = ( +/obj/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"pst" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"psy" = ( +/obj/machinery/computer/fusion/gyrotron{ + dir = 4; + initial_id_tag = "aux_fusion_plant"; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"psA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"psD" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 8 + }, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ + id_tag = "escape_pod_5"; + name = "escape pod five controller"; + pixel_x = -32; + pixel_y = 21; + req_access = list("ACCESS_SECURITY"); + tag_door = "escape_pod_5_hatch" + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/grey/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"psH" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"psN" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/storage/airlock_canisters) +"psO" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/purple/bordercorner2, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"psR" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Auxiliary Power Storage"; + name_tag = "Auxiliary Power Storage" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/terminal, +/obj/floor_decal/industrial/warning, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/auxpower) +"psS" = ( +/obj/structure/cable{ + d1 = 16; + d2 = 0; + icon_state = "16-0" + }, +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/supply{ + dir = 4 + }, +/obj/structure/ladder/up, +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/emergency) +"psW" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"psZ" = ( +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/solar{ + id = "auxsolarsbridge"; + name = "Bridge Auxiliary Solar Array" + }, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/reinforced, +/area/solar/bridge_port) +"ptb" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"ptq" = ( +/obj/structure/table/woodentable, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/cobweb, +/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/random/trash, +/turf/simulated/floor/wood/walnut, +/area/vacant/sauna) +"ptr" = ( +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + dir = 1; + id_tag = "eng4"; + name = "First Deck Port Nacelle Access"; + pixel_y = -20; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/thruster/d1port) +"ptt" = ( +/obj/structure/table/woodentable_reinforced, +/obj/item/newspaper, +/obj/item/material/ashtray, +/turf/simulated/floor/wood, +/area/command/chief_steward) +"ptu" = ( +/obj/structure/wall_frame, +/obj/structure/grille, +/obj/structure/curtain/black, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"ptB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"ptC" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins/storage) +"ptD" = ( +/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/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/firstdeck/center) +"ptM" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"ptT" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 6 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"puf" = ( +/obj/structure/closet/secure_closet{ + name = "Secure Evidence Locker"; + req_access = list("ACCESS_SECURITY") + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techmaint, +/area/security/sierra/evidence) +"pui" = ( +/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/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"pun" = ( +/obj/floor_decal/carpet/orange{ + dir = 8 + }, +/turf/simulated/floor/carpet/orange, +/area/crew_quarters/heads/office/ce/cobed) +"puo" = ( +/obj/floor_decal/corner/green/border{ + dir = 6 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"pup" = ( +/obj/floor_decal/techfloor/orange{ + dir = 10 + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"put" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/tank/air{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/power) +"puC" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"puD" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"puE" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/flora/ausbushes/sunnybush, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"puK" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"puL" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/green/border, +/obj/structure/closet/hydrant{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft_stairwell) +"puM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/medical/virology/lab) +"puV" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/closet/secure_closet{ + name = "long term chamber locker"; + req_access = list("ACCESS_SECURITY") + }, +/obj/floor_decal/borderfloor/full, +/obj/floor_decal/industrial/hatch/orange, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/brig) +"pva" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/computer/modular/preset/dock, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"pvb" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"pve" = ( +/obj/machinery/door/window/brigdoor/westleft{ + req_access = newlist(); + dir = 2 + }, +/obj/floor_decal/corner/darkblue/border, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"pvi" = ( +/obj/item/stool/padded/red, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"pvl" = ( +/obj/structure/largecrate, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"pvs" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1port) +"pvC" = ( +/obj/structure/closet/secure_closet/hydroponics_sierra, +/obj/machinery/light/spot, +/obj/floor_decal/corner/green/half, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"pvD" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"pvH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/thirddeck/fore) +"pvO" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"pvP" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"pvV" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"pwh" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 2 + }, +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/aiModule/reset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_cyborg_upload) +"pwm" = ( +/obj/item/implanter, +/obj/item/scalpel/basic, +/obj/item/reagent_containers/syringe/drugs, +/obj/item/paper/sticky{ + name = "I not wall, i am door."; + pixel_y = 0; + pixel_x = -25 + }, +/turf/simulated/floor/wood/walnut, +/area/maintenance/firstdeck/foreport) +"pwt" = ( +/obj/machinery/vending/cigarette{ + icon_state = "cigs" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"pwv" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8; + injecting = 1; + use_power = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/thruster/d1starboard) +"pwz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/cistern) +"pwH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"pwN" = ( +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "d1portnacelle" + }, +/obj/machinery/atmospherics/valve/digital{ + id_tag = "RE1F"; + name = "RE1 digital valve" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"pxc" = ( +/turf/simulated/wall/r_wall/hull, +/area/chapel/mortuary) +"pxj" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft) +"pxk" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/navbeacon/sierra/FD_forecentralhallway1, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"pxm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"pxq" = ( +/obj/structure/curtain{ + color = "#aa0000" + }, +/obj/floor_decal/spline/fancy/black{ + dir = 6 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"pxs" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"pxz" = ( +/obj/floor_decal/corner/grey/border, +/obj/structure/table/glass, +/obj/random/soap, +/obj/item/haircomb/random, +/obj/item/haircomb/brush, +/turf/simulated/floor/tiled/old_tile, +/area/crew_quarters/head) +"pxD" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"pxI" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "ai_bridge_pump"; + dir = 1 + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"pxP" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"pxR" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/port) +"pxV" = ( +/obj/machinery/status_display, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/nuke_storage) +"pxY" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/photocopier, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"pyf" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"pyn" = ( +/turf/simulated/wall/r_wall/hull, +/area/quartermaster/expedition/eva) +"pyq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"pyr" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"pyu" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"pyv" = ( +/obj/structure/table/woodentable/maple, +/obj/item/paper_bin, +/obj/machinery/light/small, +/obj/item/device/radio/intercom/locked/confessional{ + dir = 4; + pixel_x = -24 + }, +/obj/item/pen, +/obj/floor_decal/carpet/purple, +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/obj/floor_decal/carpet/purple{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/main) +"pyz" = ( +/obj/floor_decal/corner/paleblue, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology/ward) +"pyJ" = ( +/obj/structure/bed/chair/armchair/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"pze" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Atmospherics - Auxiliary Air Storage"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/engineering/atmos/storage) +"pzl" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + name = "Medic's General Cabin"; + req_access = list("ACCESS_MEDICAL"); + autoset_access = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"pzp" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/corner/black/border, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hydroponics/third_deck_storage) +"pzr" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 1; + target_pressure = 15000 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"pzw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/table/rack, +/obj/item/stack/material/glass/boron{ + amount = 30 + }, +/obj/item/stack/material/glass/boron_reinforced{ + amount = 20 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"pzC" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"pzD" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 10 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"pzM" = ( +/obj/structure/lattice, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"pzW" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + frequency = 1441; + id = "co2_in"; + pixel_y = 1; + use_power = 1 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/engineering/atmos) +"pzZ" = ( +/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/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"pAe" = ( +/obj/floor_decal/corner/black/bordercorner, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"pAj" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"pAr" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/flora/ausbushes/grassybush, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/machinery/button/blast_door{ + dir = 8; + id_tag = "lounge_windows"; + name = "Lounge Window Blast Doors"; + pixel_x = 25 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"pAw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"pAB" = ( +/obj/wallframe_spawn/reinforced_phoron/titanium, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell3) +"pAJ" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"pAL" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/window/boron_reinforced{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"pAP" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/closet/crate/secure/biohazard, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/equipment) +"pAT" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/centralstarboard) +"pAW" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/thirddeck/starboard) +"pAX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/bed/chair/padded/red, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/fore) +"pBk" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"pBm" = ( +/obj/landmark{ + name = "lightsout" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id_tag = "AICoreLastResort"; + name = "Last Resort"; + opacity = 0 + }, +/obj/machinery/flasher{ + pixel_x = 24; + pixel_y = 38 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/turret_protected/ai) +"pBC" = ( +/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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/corner/grey{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"pBE" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"pBJ" = ( +/obj/machinery/button/blast_door{ + dir = 8; + id_tag = "firingspace"; + name = "Firing Range Shields"; + pixel_x = 20; + req_access = list("ACCESS_SEC_DOORS") + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled, +/area/security/range) +"pBL" = ( +/obj/structure/table/rack, +/obj/item/roller_bed{ + pixel_y = -4 + }, +/obj/item/roller_bed, +/obj/item/roller_bed{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"pBQ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "eng_lockdown"; + name = "Engineering Lockdown" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/locker_room) +"pBU" = ( +/obj/structure/table/rack/dark, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/structure/railing/mapped, +/obj/floor_decal/spline/plain/black{ + dir = 6; + icon_state = "spline_plain" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"pBY" = ( +/obj/structure/reagent_dispensers/water_cooler{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 5 + }, +/obj/machinery/camera/network/security{ + c_tag = "Longterm - Living"; + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"pCc" = ( +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai_upload) +"pCd" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"pCe" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"pCm" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_north = 2; + tag_south = 1; + tag_west = 3 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"pCq" = ( +/obj/floor_decal/industrial/warning/full, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "auxair"; + name = "Auxiliary Air Storage Exterior Access Console"; + req_access = list("ACCESS_ENGINEERING"); + dir = 8; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/engineering/atmos/storage) +"pCG" = ( +/obj/machinery/light, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/closet/firecloset, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/entry) +"pCO" = ( +/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" + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"pCR" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"pCV" = ( +/obj/machinery/oxygen_pump{ + dir = 8; + pixel_x = -27 + }, +/obj/structure/hygiene/drain, +/obj/structure/hygiene/shower{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"pDa" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"pDj" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"pDv" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"pDy" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"pDz" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/self_destruct, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/nuke_storage) +"pDI" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/button/alternate/door/bolts{ + dir = 8; + id_tag = "toilet2"; + name = "Lock"; + pixel_x = 24 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head) +"pDK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"pDM" = ( +/obj/paint_stripe/red, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters/open{ + name = "Prison Lobby Windows Shutters"; + id_tag = "prison_lobby_window" + }, +/turf/simulated/floor/plating, +/area/security/sierra/brig) +"pDN" = ( +/obj/structure/closet/wardrobe/medic_sierra, +/obj/item/device/synthesized_instrument/violin, +/obj/item/clothing/head/nursehat, +/obj/item/clothing/head/nursehat, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"pDQ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"pEh" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/bed/chair/padded/red, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"pEp" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/center) +"pEv" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/lino, +/area/command/chief_steward) +"pEw" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/obj/machinery/pager/medical{ + name = "Call Medics button"; + pixel_y = 27 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"pEW" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"pEX" = ( +/obj/paint_stripe/red, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/interrogation/second) +"pFd" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/storage/tech) +"pFg" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"pFs" = ( +/obj/machinery/flasher{ + id_tag = "security_third_cell_flash"; + name = "Floor mounted flash" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"pFu" = ( +/obj/structure/closet/l3closet/scientist, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/xenoflora) +"pFv" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"pFy" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"pFz" = ( +/obj/structure/grille, +/turf/simulated/open, +/area/space) +"pFH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"pFP" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/orange/corner, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"pGe" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"pGj" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"pGn" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d1starboard) +"pGs" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/fourthdeck/port) +"pGu" = ( +/obj/floor_decal/corner/purple{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"pGw" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"pGD" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/machinery/computer/modular/preset/security{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"pGE" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"pGF" = ( +/obj/machinery/door/window/westleft{ + dir = 1; + name = "Medical Reception" + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/infirmreception) +"pGI" = ( +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"pGJ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/solar/bridge_starboard) +"pGT" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"pHc" = ( +/obj/floor_decal/corner/green/three_quarters{ + dir = 8 + }, +/obj/structure/closet/secure_closet/hydroponics_sierra, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"pHh" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"pHq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1port) +"pHs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"pHt" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/tcommsat/computer) +"pHA" = ( +/obj/structure/closet/secure_closet/crew/research, +/obj/floor_decal/industrial/outline/yellow, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/item/folder/nt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/equipment) +"pHG" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 6 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"pHK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"pHL" = ( +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/captain, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/heads/captain/secret_room) +"pHN" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/structure/bedsheetbin, +/obj/item/storage/box/detergent, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/breakroom) +"pHO" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/honey_extractor, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"pHQ" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"pIb" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"pId" = ( +/obj/machinery/door/airlock/research{ + name = "Robotics Laboratory"; + req_access = newlist() + }, +/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" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/assembly/office) +"pIl" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"pIy" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"pIA" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"pIG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"pIK" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2, +/obj/structure/holoplant, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"pIL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod3/station) +"pIT" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/closet/emcloset, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"pIW" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + color = null; + dir = 4 + }, +/obj/floor_decal/corner/blue/border{ + dir = 4 + }, +/obj/machinery/vending/medical/sierra{ + dir = 8; + req_access = list("ACCESS_EXPEDITION_SHUTTLE") + }, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"pIX" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/bed/padded, +/obj/item/bedsheet/red, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/bunk) +"pIY" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"pJe" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/gas) +"pJm" = ( +/obj/structure/flora/seaweed/large, +/obj/fluid_mapped, +/turf/simulated/floor/beach/sand, +/area/rnd/xenobiology/level2) +"pJp" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/handrail{ + dir = 8 + }, +/turf/space, +/area/space) +"pJv" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"pJy" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"pJF" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/command{ + name = "Briefing Room"; + autoset_access = 0 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"pJG" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/structure/table/woodentable/mahogany, +/obj/structure/flora/pottedplant/shoot{ + pixel_y = 10 + }, +/obj/floor_decal/carpet/red, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"pJO" = ( +/turf/simulated/wall/r_wall/hull, +/area/storage/tech) +"pJV" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"pJZ" = ( +/obj/structure/railing/mapped, +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"pKa" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/fuelbay) +"pKb" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/hallway/primary/thirddeck/central_stairwell) +"pKd" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"pKn" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/south) +"pKq" = ( +/obj/structure/sign/warning/docking_area{ + dir = 1; + pixel_y = -32 + }, +/turf/space, +/area/space) +"pKv" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"pKx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/alarm/nobreach{ + dir = 4; + pixel_x = -23 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"pKy" = ( +/obj/machinery/vending/coffee{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/fore) +"pKC" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"pKJ" = ( +/obj/structure/table/standard, +/obj/item/device/radio{ + pixel_y = 9; + pixel_x = 6 + }, +/obj/item/flora/pottedplantsmall/leaf, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/sign/poster/unusual_gas{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/rnd/office) +"pKK" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/civilian{ + name = "Water Stores" + }, +/obj/item/taperoll/engineering/applied, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/cistern) +"pKO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/item/stack/material/steel, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"pKV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"pLd" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/computer/ship/engines{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"pLe" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/largecrate, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"pLg" = ( +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/constructable_frame/machine_frame, +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology/lab) +"pLk" = ( +/obj/machinery/floodlight{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"pLl" = ( +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"pLq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"pLr" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/bed/chair/wood/maple{ + dir = 1 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"pLs" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/blast/regular{ + id_tag = "BSD_windows"; + name = "Bluespace Chamber Lockdown" + }, +/turf/simulated/floor/plating, +/area/engineering/bluespace/chamber) +"pLt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/sleep/cryo/south) +"pLy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"pLF" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/bed/sofa/r/brown{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"pLH" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/medical{ + name = "Medical Storage" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"pLK" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"pLR" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/gas) +"pLV" = ( +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/structure/flora/pottedplant/flower{ + pixel_y = 13 + }, +/obj/structure/sign/directions/engineering{ + pixel_x = -32; + pixel_y = -1; + dir = 8 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"pMh" = ( +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/crew_quarters/cafe/upper) +"pMp" = ( +/obj/wallframe_spawn, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"pMx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 5 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3port) +"pMI" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "td_fore_starboard_pump" + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/machinery/airlock_sensor{ + id_tag = "td_fore_starboard_sensor"; + master_tag = "td_fore_starboard"; + pixel_x = -24 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"pMN" = ( +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/corner/darkblue/bordercorner, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"pMV" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/structure/closet/medical_wall/filled{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/holocontrol) +"pMW" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/black/border{ + dir = 6 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Interrogation One"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation) +"pNe" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"pNm" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/forensic) +"pNp" = ( +/obj/machinery/disposal/small{ + dir = 4 + }, +/obj/floor_decal/corner/beige/three_quarters{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"pNx" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/hallway/primary/fourthdeck/fore) +"pNC" = ( +/obj/structure/hygiene/sink/kitchen{ + pixel_y = 22 + }, +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/sleep/cryo/south) +"pNE" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"pNJ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/space_heater, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"pNR" = ( +/obj/paint_stripe/red, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters/open{ + name = "Prison Lobby Windows Shutters"; + id_tag = "prison_lobby_window"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/security/sierra/brig) +"pNV" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge/upper) +"pNZ" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/icecream_vat, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/galley/freezer) +"pOm" = ( +/obj/machinery/door/airlock/glass/medical{ + name = "Chemistry"; + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/chemistry) +"pOn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 9 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"pOA" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"pOB" = ( +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"pOD" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"pOE" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"pOJ" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"pOK" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/waterstore) +"pOS" = ( +/obj/floor_decal/carpet/blue{ + dir = 1 + }, +/obj/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/floor_decal/carpet/blue{ + dir = 9 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa/high_sec) +"pPd" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"pPl" = ( +/obj/machinery/vending/wallmed2{ + dir = 4; + pixel_x = -23 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod2/station) +"pPq" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/starboard) +"pPr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"pPu" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"pPw" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/structure/dispenser, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"pPx" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan, +/obj/machinery/meter, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"pPK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"pPL" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"pQa" = ( +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/curtain/bed{ + pixel_y = -32 + }, +/obj/item/reagent_containers/food/drinks/bottle/vodka{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/reagent_containers/food/drinks/glass2/shot{ + pixel_x = 8; + pixel_y = -3 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/heads/office/cmo/cobed) +"pQe" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/waterstore) +"pQh" = ( +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"pQo" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/random/closet, +/obj/structure/sign/warning/pods/east{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"pQr" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/self_destruct, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/nuke_storage) +"pQs" = ( +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d3port) +"pQt" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d1starboard) +"pQv" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"pQz" = ( +/obj/structure/closet/crate/freezer/rations, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"pQG" = ( +/obj/structure/curtain{ + color = "#aa0000" + }, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"pQI" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"pQN" = ( +/obj/floor_decal/corner/purple/half, +/obj/floor_decal/industrial/danger, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"pQX" = ( +/obj/structure/crematorium{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/mortuary) +"pQY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green, +/obj/machinery/power/apc/super/critical{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/engineering/atmos/storage) +"pQZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"pRa" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"pRb" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"pRd" = ( +/obj/shuttle_landmark/sierra/deck2/crucian, +/turf/space, +/area/space) +"pRh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/prison) +"pRi" = ( +/turf/simulated/wall/prepainted, +/area/hydroponics) +"pRv" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"pRA" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/zpipe/down/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/rnd/xenobiology/level1) +"pRK" = ( +/obj/machinery/pipedispenser/disposal, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"pRM" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"pRZ" = ( +/obj/machinery/vending/coffee{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"pSa" = ( +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"pSd" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"pSk" = ( +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/corner/darkblue/bordercorner, +/obj/floor_decal/spline/fancy/black/corner, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"pSm" = ( +/obj/structure/bed/sofa/m/brown{ + dir = 1 + }, +/obj/floor_decal/carpet/red, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"pSn" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - Xenobiology Fore" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"pSq" = ( +/obj/machinery/door/airlock/hatch/maintenance/bolted{ + frequency = 1379; + id_tag = "prototype_interior"; + name = "Fusion Maintenance" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/prototype/engine) +"pSt" = ( +/obj/machinery/shieldwallgen, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftstarboard) +"pSy" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/catwalk_plated, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"pSA" = ( +/obj/structure/catwalk, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"pSF" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/bed/chair/padded/yellow, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"pSH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow, +/obj/structure/closet/hydrant{ + pixel_y = 28 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"pSP" = ( +/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/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/medical/virology) +"pST" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide{ + start_pressure = 0 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"pTa" = ( +/turf/simulated/wall/prepainted, +/area/command/chief_steward) +"pTb" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"pTo" = ( +/turf/simulated/floor/shuttle_ceiling/sierra, +/area/space) +"pTs" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 6 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d1port) +"pTy" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/fourthdeck/center) +"pTA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"pTH" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/waterstore) +"pTK" = ( +/obj/item/handcuffs/cable/red, +/obj/item/handcuffs/cable/tape, +/obj/decal/cleanable/blood/drip, +/obj/random/medical/lite, +/obj/random/medical, +/obj/item/reagent_containers/spray/sterilizine, +/obj/machinery/light/small, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/maintenance/firstdeck/foreport) +"pTM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"pTN" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"pTS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"pUb" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"pUh" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/corner/black/border{ + dir = 4 + }, +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/hydroponics/third_deck_storage) +"pUi" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Teleport Maintenance"; + req_access = newlist() + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/teleporter) +"pUn" = ( +/obj/structure/table/standard, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/obj/item/clothing/mask/surgical, +/obj/item/clothing/gloves/latex, +/obj/floor_decal/corner/grey_alt{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/assembly/robotics) +"pUq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"pUw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/vacant/monitoring) +"pUG" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/office) +"pUM" = ( +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"pUW" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/equipstorage) +"pUY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"pVv" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/multi_tile/maintenance, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"pVx" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/seconddeck/aftport) +"pVA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"pVD" = ( +/obj/structure/railing/mapped, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"pVE" = ( +/obj/structure/table/rack, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/shoes/magboots, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/camera/network/command{ + c_tag = "Command - EVA - Storage"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"pVF" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"pVH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/white, +/area/medical/ward) +"pVK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"pVO" = ( +/obj/structure/table/rack, +/obj/item/clothing/accessory/storage/bandolier/safari, +/obj/item/gun/launcher/net, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"pVU" = ( +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "iaaright" + }, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 8 + }, +/obj/structure/holoplant, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"pWb" = ( +/obj/structure/coatrack, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/lino, +/area/command/chief_steward) +"pWc" = ( +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"pWe" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"pWh" = ( +/obj/structure/closet/secure_closet/personal/empty, +/obj/floor_decal/corner/green/border{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/sauna) +"pWi" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/foreport) +"pWl" = ( +/obj/machinery/telecomms/processor/preset_three, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"pWm" = ( +/obj/wallframe_spawn/reinforced, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/paint_stripe/red, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/security/sierra/brig) +"pWo" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 6 + }, +/obj/floor_decal/industrial/warning/corner, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"pWz" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/chapel/mortuary) +"pWK" = ( +/obj/structure/disposalpipe/sortjunction/untagged/flipped{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"pWP" = ( +/obj/machinery/light/small, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"pWR" = ( +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"pXe" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/catwalk, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Substation - Third Deck"; + dir = 1 + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/thirddeck) +"pXh" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/plating, +/area/shuttle/petrov/equipment) +"pXj" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"pXl" = ( +/obj/structure/sign/warning/lethal_turrets, +/turf/simulated/wall/r_wall/hull, +/area/turret_protected/ai_maint) +"pXx" = ( +/obj/structure/closet/emcloset/anchored, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/thirddeck) +"pXF" = ( +/obj/paint_stripe/red, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters/open{ + name = "Prison Lobby Windows Shutters"; + id_tag = "prison_lobby_window" + }, +/turf/simulated/floor/plating, +/area/security/sierra/brig) +"pXI" = ( +/obj/fluid_mapped, +/obj/item/bananapeel, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"pXM" = ( +/obj/structure/bed/sofa/m/lime{ + dir = 10 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/cafe/upper) +"pXP" = ( +/obj/structure/closet/secure_closet/hydroponics_sierra, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/monotile, +/area/maintenance/abandoned_hydroponics) +"pXR" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/head_big) +"pYa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/light/spot, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"pYd" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_smes) +"pYe" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"pYj" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/corner/black/mono, +/obj/machinery/newscaster{ + pixel_x = 28 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"pYq" = ( +/obj/floor_decal/industrial/danger/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"pYr" = ( +/obj/machinery/portable_atmospherics/canister/boron, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins/storage) +"pYx" = ( +/obj/machinery/cryopod, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/central_stairwell) +"pYB" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"pYI" = ( +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/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/dark/monotile, +/area/medical/wardhallway) +"pYK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"pYM" = ( +/obj/shuttle_landmark/escape_pod/start/pod7, +/obj/wallframe_spawn/reinforced/titanium, +/turf/simulated/floor/plating, +/area/shuttle/escape_pod/escape_pod7/station) +"pYP" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"pYT" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"pZi" = ( +/obj/floor_decal/corner/grey/diagonal, +/obj/structure/bed/chair/comfy/purple, +/turf/simulated/floor/tiled, +/area/rnd/locker) +"pZq" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/table/steel, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/device/taperecorder, +/obj/item/device/destTagger, +/obj/item/stack/package_wrap/cargo_wrap, +/obj/machinery/recharger/wallcharger{ + dir = 1; + pixel_y = -22 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"pZt" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/plating, +/area/shuttle/petrov/test_room) +"pZv" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"pZw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/civilian{ + name = "Visitors" + }, +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + id_tag = "hangar_hallway_shutters"; + name = "Hangar Deck Hallway Shutters"; + opacity = 0 + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 2; + id_tag = "lockdown3_4" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/fore) +"pZz" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"pZF" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"pZG" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/rotating_alarm/supermatter{ + dir = 8; + pixel_x = 14 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"pZH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/structure/closet/hydrant{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"pZL" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"pZM" = ( +/obj/floor_decal/corner/darkblue/full, +/obj/floor_decal/corner/black/three_quarters{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"pZP" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/firstdeck/fore) +"pZT" = ( +/obj/floor_decal/corner/red{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 1; + target_pressure = 3500 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"pZV" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"qae" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/cable/green{ + 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/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs/upper) +"qah" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"qaj" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 5 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/garden_room) +"qak" = ( +/obj/paint/black, +/turf/simulated/wall/ocp_wall, +/area/maintenance/substation/thirddeck) +"qan" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/hallway/primary/thirddeck/central_stairwell) +"qap" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/crew_quarters/sauna) +"qar" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/red/bordercorner2, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"qau" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/closet/crate, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"qax" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"qay" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/rnd/toxins) +"qaC" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/foreport) +"qaM" = ( +/obj/structure/catwalk, +/obj/structure/handrail{ + dir = 4 + }, +/turf/simulated/open, +/area/space) +"qaU" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/gas) +"qaX" = ( +/obj/machinery/shield_diffuser, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_5_berth_hatch"; + name = "Escape Pod Five" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/security/sierra/hallway/port) +"qbg" = ( +/obj/structure/towel/fitness, +/obj/floor_decal/corner/black/half{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"qbk" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated/dark, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/bridge/hallway) +"qbl" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/disposaloutlet{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"qbt" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/table/woodentable/walnut, +/obj/item/reagent_containers/food/drinks/teapot{ + pixel_y = 0 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/NT, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/corp, +/obj/item/material/ashtray/glass, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"qby" = ( +/obj/structure/bed/chair/office/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/corner/purple/diagonal, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"qbA" = ( +/obj/floor_decal/ntlogo{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"qbE" = ( +/obj/floor_decal/techfloor/corner, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"qbF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"qbG" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway/port) +"qbH" = ( +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"qbO" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/cable/green, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins/storage) +"qbZ" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/subspace/treatment, +/obj/item/stock_parts/subspace/treatment, +/obj/item/stock_parts/subspace/treatment, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/tcommsat/storage) +"qch" = ( +/obj/structure/table/standard, +/obj/item/storage/box/donkpocket_mixed{ + pixel_y = 12; + pixel_x = 5 + }, +/obj/item/storage/box/cups{ + pixel_x = -5 + }, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/office) +"qci" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"qck" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"qcm" = ( +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "auxair"; + name = "Auxiliary Air Storage Exterior Access Console"; + req_access = list("ACCESS_ENGINEERING"); + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 6 + }, +/obj/machinery/meter, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"qcw" = ( +/obj/structure/bed/chair/office/comfy/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/deckofficer) +"qcH" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"qcJ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"qcN" = ( +/obj/structure/closet/secure_closet/adjutant, +/obj/item/modular_computer/tablet/lease/preset/command, +/obj/item/device/flash, +/obj/item/device/flashlight, +/obj/item/storage/secure/safe{ + pixel_y = 24 + }, +/obj/item/gun/energy/gun/small/secure, +/obj/floor_decal/corner/darkblue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/adjutants) +"qcO" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck - Central Hallway - Turbolift"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"qcQ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/forestarboard) +"qcZ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_eva) +"qda" = ( +/obj/machinery/atmospherics/valve/shutoff/supply, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"qdc" = ( +/obj/machinery/power/smes/buildable/preset/sierra/substation_full{ + RCon_tag = "Substation - Fusion Generator" + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/control) +"qdg" = ( +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -21; + pixel_y = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"qdi" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "xenobio_surg"; + name = "Space Shutters"; + opacity = 0 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level1) +"qdn" = ( +/obj/structure/table/steel, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 5 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"qds" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"qdz" = ( +/obj/machinery/botany/editor, +/obj/floor_decal/corner/green/half, +/obj/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"qdK" = ( +/obj/structure/bed/chair/comfy/brown, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"qdS" = ( +/obj/structure/stairs/south, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/seconddeck/aft_stairwell) +"qee" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/airlock) +"qeg" = ( +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/structure/railing/mapped{ + dir = 8; + init_color = "#8c911d"; + color = "#8c911d" + }, +/turf/simulated/floor/plating, +/area/rnd/misc_lab) +"qei" = ( +/obj/structure/railing/mapped, +/obj/structure/closet/wardrobe/orange, +/obj/item/clothing/head/soft/orange, +/obj/item/clothing/head/soft/orange, +/obj/floor_decal/borderfloor/full, +/obj/floor_decal/industrial/hatch/orange, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/brig) +"qek" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/item/stool/padded, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"qeq" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/prepainted, +/area/maintenance/fourthdeck/aft) +"qez" = ( +/obj/structure/cable/cyan{ + 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/floor_decal/corner/purple, +/obj/machinery/camera/network/petrov{ + c_tag = "Petrov - Hallway - Aft" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"qeB" = ( +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"qeH" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"qeK" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"qeU" = ( +/obj/floor_decal/corner/purple/half{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"qeZ" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"qfc" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/guppy_hangar/start) +"qff" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"qfh" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"qfi" = ( +/obj/floor_decal/solarpanel, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/solar{ + id = "auxsolarstarboard"; + name = "Aft Starboard Solar Array" + }, +/turf/simulated/floor/airless, +/area/solar/starboard) +"qfk" = ( +/obj/structure/closet/l3closet/general, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"qfs" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/rnd/servers) +"qfu" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"qfv" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"qfB" = ( +/obj/machinery/vending/generic{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"qfC" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"qfE" = ( +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"qfG" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/no_grille/regular{ + id = "cafewindow" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/cafe/upper) +"qfI" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/blue/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"qfJ" = ( +/obj/structure/flora/pottedplant/fern, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"qfK" = ( +/obj/machinery/disposal, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_x = 10; + pixel_y = -21 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"qfM" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/turret_protected/ai) +"qfV" = ( +/obj/structure/table/standard, +/obj/item/device/assembly/mousetrap/armed, +/obj/item/reagent_containers/food/snacks/cheesewedge/aged, +/obj/item/toy/plushie/mouse, +/obj/item/paper/sierrau/joke, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"qfW" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + id_tag = "null"; + name = "Captain's office"; + secured_wires = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/captain) +"qfX" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 1 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"qfZ" = ( +/obj/structure/closet/l3closet/scientist, +/obj/structure/catwalk, +/obj/machinery/light, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/xenoflora) +"qga" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"qgf" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/table/gamblingtable, +/obj/item/reagent_containers/food/drinks/pitcher{ + pixel_y = 12; + pixel_x = 6 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/punitelli{ + pixel_y = 7; + pixel_x = -6 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/pawn, +/obj/machinery/light, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"qgg" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/floor_decal/corner/beige/diagonal, +/obj/floor_decal/corner/brown/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/vacant/dormintories) +"qgl" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/armory) +"qgo" = ( +/turf/simulated/wall/prepainted, +/area/security/opscheck) +"qgs" = ( +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"qgy" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 5 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"qgA" = ( +/obj/shuttle_landmark/sierra/deck4/crucian, +/turf/space, +/area/space) +"qgC" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"qgH" = ( +/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/structure/catwalk, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"qgW" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white/monotile, +/area/hallway/infirmary) +"qhg" = ( +/obj/machinery/hologram/holopad/longrange, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"qhl" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"qhs" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"qhu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/structure/sign/warning/compressed_gas{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"qhw" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"qhC" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"qhF" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"qhU" = ( +/obj/structure/table/rack, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 4; + pixel_x = -14 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Bridge Checkpoint"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"qic" = ( +/obj/floor_decal/corner/red, +/obj/machinery/vending/snack{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"qie" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/table/steel, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/NT{ + pixel_y = 7; + pixel_x = 5 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/NT{ + pixel_y = -3; + pixel_x = 3 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"qih" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"qij" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"qik" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"qin" = ( +/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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/evidence) +"qit" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_2" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/aft) +"qiu" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/structure/bed/chair/office/comfy/brown{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"qix" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular{ + id_tag = "med_dorms_blast_doors"; + name = "Space Shutters" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/sleep/cryo/south) +"qiF" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"qiK" = ( +/obj/structure/sign/directions/bridge{ + pixel_y = 24; + dir = 8 + }, +/obj/structure/sign/directions/science{ + dir = 8; + pixel_y = 31 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/central_stairwell) +"qiM" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"qiT" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"qiW" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley/backroom) +"qja" = ( +/obj/structure/closet/secure_closet/personal, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sleep/bunk) +"qjc" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/development) +"qji" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"qjj" = ( +/obj/paint_stripe/nt_red, +/obj/paint/nt_white, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod10/station) +"qjp" = ( +/turf/simulated/wall/prepainted, +/area/bridge/adjutants) +"qju" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/security{ + name = "Interrogation" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/interrogation) +"qjv" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"qjy" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/captain/beach) +"qjC" = ( +/obj/decal/cleanable/dirt, +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"qjD" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"qjM" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"qjP" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"qjQ" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"qjU" = ( +/obj/floor_decal/techfloor, +/obj/machinery/flasher{ + dir = 1; + id_tag = "ai_core"; + pixel_y = -24 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"qjW" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_east = 2; + tag_north = 1; + tag_south = 8; + tag_west = 7 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/green, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"qjX" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/blue/border{ + dir = 8 + }, +/obj/machinery/light_switch{ + pixel_x = -21; + dir = 4 + }, +/obj/structure/closet/secure_closet/hop/sierra, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"qjZ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 5 + }, +/obj/wallframe_spawn/reinforced_phoron/hull, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"qkq" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 5 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"qkx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"qkA" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/turbolift/medical_lift) +"qkP" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"qkU" = ( +/obj/paint/dark_gunmetal, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/paint_stripe/yellow, +/turf/simulated/wall/r_titanium, +/area/guppy_hangar/start) +"qli" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley/backroom) +"qlk" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/blue/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/blue/bordercorner2{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"qlr" = ( +/obj/machinery/vending/generic{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"qlu" = ( +/obj/wallframe_spawn/reinforced/polarized/full{ + id = "cmo_windows" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/cmo) +"qlx" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/standard, +/obj/item/organ/internal/posibrain, +/obj/item/device/robotanalyzer, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/assembly/robotics) +"qlD" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"qlG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/prison) +"qms" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/fore) +"qmw" = ( +/obj/structure/cable/green, +/obj/machinery/power/apc/bsa{ + name = "south bump"; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/corner/black/full, +/turf/simulated/floor/tiled/dark, +/area/command/bsa) +"qmA" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"qmB" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"qmG" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"qmH" = ( +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/structure/closet/emcloset/anchored, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/corner/green/three_quarters, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/hydroponics) +"qmR" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/power/terminal, +/obj/structure/cable, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"qmS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/valve/shutoff/supply, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"qnf" = ( +/turf/simulated/floor/reinforced, +/area/turret_protected/ai_maint) +"qnl" = ( +/obj/machinery/door/window/southleft{ + dir = 1; + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/door/window/southleft{ + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "xenobio3"; + name = "Containment Blast Doors" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/blue, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"qnp" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"qnx" = ( +/obj/machinery/mass_driver{ + dir = 4; + id_tag = "enginecore" + }, +/obj/machinery/power/supermatter, +/obj/engine_setup/core, +/turf/simulated/floor/greengrid{ + map_airless = 1 + }, +/area/engineering/engine_room) +"qnA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/structure/bed/chair/armchair/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"qnF" = ( +/obj/machinery/sleeper, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/staging) +"qnJ" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"qnS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/machinery/light/spot, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"qob" = ( +/obj/floor_decal/corner/black/mono, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"qod" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"qoh" = ( +/obj/machinery/door/airlock/civilian{ + locked = 1 + }, +/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" + }, +/obj/item/taperoll/engineering/applied, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/vacant/mess) +"qop" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"qoq" = ( +/obj/floor_decal/techfloor, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"qoE" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/status_display{ + pixel_x = -32 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"qoF" = ( +/obj/decal/cleanable/dirt, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"qoL" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/fourthdeck/aft) +"qoP" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/aft) +"qoR" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange, +/obj/structure/window/boron_reinforced{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"qoW" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/hardstorage) +"qoZ" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"qpe" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + id = "o21p_in"; + use_power = 1 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d3starboard) +"qpl" = ( +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_5_berth_hatch"; + name = "Escape Pod Five" + }, +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/foreport) +"qpn" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"qpp" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/dockcheck) +"qpr" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/grass/cut, +/area/rnd/xenobiology/xenoflora) +"qpw" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"qpy" = ( +/obj/machinery/papershredder, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/blue/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"qpE" = ( +/obj/structure/table/steel, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/random/toolbox, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar_atmos) +"qpM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"qpN" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"qpQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"qpY" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"qqa" = ( +/obj/decal/cleanable/dirt, +/obj/item/trash/semki, +/obj/structure/cable/green, +/obj/item/stack/cable_coil/green, +/obj/item/frame/apc, +/turf/simulated/floor/tiled/freezer, +/area/vacant/sauna) +"qqh" = ( +/obj/item/scrap_lump, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"qqj" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"qqk" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"qqC" = ( +/obj/structure/table/rack, +/obj/item/rig/command/captain/equipped, +/obj/item/clothing/mask/gas/half, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"qqF" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/carpet, +/area/crucian_hangar/start) +"qqH" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"qqN" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/infirmreception) +"qrk" = ( +/obj/machinery/hologram/holopad/longrange, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"qrn" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"qrp" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_r) +"qrt" = ( +/obj/structure/bed/chair/office/comfy/teal, +/obj/landmark/start{ + name = "Chief Medical Officer" + }, +/obj/structure/curtain/bed{ + pixel_y = -32 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/heads/office/cmo/cobed) +"qrw" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/camera/network/command{ + c_tag = "AI Upload - Access" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"qrB" = ( +/obj/structure/closet/fridge, +/obj/item/reagent_containers/food/drinks/bottle/small/beer, +/obj/item/reagent_containers/food/drinks/bottle/small/beer, +/obj/item/reagent_containers/food/drinks/bottle/small/beer/fake, +/obj/item/reagent_containers/food/drinks/bottle/small/beer, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/sleep/cryo/south) +"qrJ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"qrU" = ( +/obj/structure/table/steel, +/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"qrY" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "observation_shielding"; + name = "Observation Shield" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/dungeon_master_lounge) +"qse" = ( +/obj/machinery/light/led/small{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/chemical_dispenser/bar_soft/full{ + pixel_y = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"qsg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"qsi" = ( +/obj/floor_decal/corner/paleblue, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology/ward) +"qsk" = ( +/obj/structure/railing/mapped, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"qsl" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"qsm" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/structure/table/standard, +/obj/random/toolbox, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"qsn" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/obj/structure/cable/green, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"qsw" = ( +/obj/structure/disposaloutlet, +/obj/machinery/shield_diffuser, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"qsA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 8 + }, +/obj/machinery/smartfridge/secure/extract, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "xenobio_surg"; + name = "Containment Blast Doors"; + pixel_y = -21; + req_access = list("ACCESS_RESEARCH") + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/xenobiology/level1) +"qsC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"qsD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"qsE" = ( +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"qsI" = ( +/obj/structure/railing/mapped, +/obj/structure/reagent_dispensers/watertank, +/obj/floor_decal/spline/plain/yellow{ + dir = 4 + }, +/obj/floor_decal/industrial/warning, +/obj/machinery/camera/network/supply{ + c_tag = "Supply Office - Warehouse"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"qsO" = ( +/obj/structure/railing/mapped, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"qsX" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck - Garden - Port"; + dir = 1 + }, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"qtq" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"qtr" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/item/soap/pink_soap, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head) +"qtw" = ( +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/maintenance/seconddeck/aftstarboard) +"qtF" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/blue/bordercorner{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"qtJ" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/gas) +"qtL" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/vacant/mess) +"qtN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar_atmos) +"qtP" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/wood{ + icon_state = "wood_broken4" + }, +/area/maintenance/firstdeck/forestarboard) +"qtU" = ( +/obj/machinery/button/blast_door{ + dir = 8; + pixel_x = 24; + name = "Armory Lethal blast door-control"; + id_tag = "armory_lethal"; + req_access = list("ACCESS_ARMORY") + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/armory) +"qtY" = ( +/obj/structure/sign/warning/pods/south{ + pixel_y = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"qub" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"que" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled, +/area/rnd/locker) +"quf" = ( +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"qui" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/regular/open{ + id_tag = "PetrovShield"; + name = "Petrov Blast Shutters" + }, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/plating, +/area/shuttle/petrov/equipment) +"qus" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/walnut, +/area/vacant/gambling) +"quv" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/tcommsat/computer) +"quz" = ( +/obj/structure/bed/chair/padded/brown{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/deckofficer) +"quD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor/orange, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"quP" = ( +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"quV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"qvc" = ( +/obj/structure/table/woodentable, +/obj/item/material/clipboard{ + pixel_y = 3; + pixel_x = 5 + }, +/obj/item/material/clipboard{ + pixel_y = -3; + pixel_x = -2 + }, +/obj/item/reagent_containers/food/drinks/cans/coffeecola{ + pixel_y = 12; + pixel_x = -7 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"qvi" = ( +/obj/floor_decal/corner/purple/border, +/obj/item/stool/padded, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/exploration) +"qvm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"qvr" = ( +/obj/paint/red, +/turf/simulated/wall/r_titanium, +/area/crucian_hangar/start) +"qvx" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"qvA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"qvF" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/structure/sign/warning/airlock{ + dir = 4; + pixel_x = -32 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"qvI" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel{ + amount = 20 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"qvJ" = ( +/obj/floor_decal/spline/fancy/black, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/towel/ilove, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"qvO" = ( +/obj/structure/bed/sofa/m/lime, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/cafe/upper) +"qvW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"qvX" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"qvY" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4; + icon_state = "map_connector" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"qwe" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/airlock_canisters) +"qwk" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"qwu" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"qwz" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/obj/structure/bed/chair/padded/green{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"qwA" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"qwC" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"qwJ" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"qwK" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + id = "fuel1p_in"; + use_power = 1 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d3starboard) +"qwN" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d1port) +"qwO" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/space) +"qwS" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + dir = 4 + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"qwT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/glass/security{ + id_tag = "security_entry_airlock_exit"; + dir = 8; + name = "Security Exit" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway/aft) +"qxe" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"qxi" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"qxv" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"qxz" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/staging) +"qxD" = ( +/obj/machinery/vending/snack{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/lime/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"qxP" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"qxU" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"qxX" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/closet/secure_closet/personal, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"qyi" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"qyv" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/expedition/storage) +"qyD" = ( +/obj/machinery/door/airlock/glass/civilian{ + name = "Primary Tool Storage" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"qyK" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/foreport) +"qyL" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/bridgedeck/aft) +"qyP" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/lava/orange{ + pixel_x = -6; + pixel_y = 13 + }, +/obj/item/book/manual/evaguide{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"qyQ" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"qyT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"qyW" = ( +/obj/floor_decal/corner/grey/full, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"qzf" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/fourthdeck/aft_stairwell) +"qzh" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"qzj" = ( +/obj/machinery/jukebox/custom_tape, +/obj/structure/table/woodentable/maple, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"qzl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"qzs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"qzu" = ( +/obj/shuttle_landmark/ert/deck3, +/turf/space, +/area/space) +"qzw" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"qzL" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "bridge_windows" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/bridge) +"qzM" = ( +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d1starboard) +"qzP" = ( +/obj/machinery/vending/parts/research{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"qzQ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/status_display{ + pixel_y = 32; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/center) +"qzT" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/lipstick/purple, +/obj/item/lipstick/jade, +/obj/item/lipstick/black, +/obj/item/lipstick, +/obj/item/storage/mirror{ + pixel_x = 24 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor) +"qAf" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"qAh" = ( +/obj/structure/bed/sofa/m/black{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"qAn" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"qAu" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/iaa/cobed) +"qAw" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/office) +"qAW" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"qAX" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/dungeon_master_lounge) +"qAY" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"qBa" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"qBc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"qBe" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"qBf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"qBg" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"qBk" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"qBr" = ( +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"qBx" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"qBD" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/table/woodentable/walnut, +/obj/structure/hygiene/sink{ + pixel_y = -12 + }, +/obj/item/reagent_containers/glass/bucket/wood{ + pixel_y = 5 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sauna) +"qBH" = ( +/obj/engine_setup/smes, +/obj/machinery/power/smes/buildable/preset/sierra/substation_full{ + RCon_tag = "Substation - Engine" + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_smes) +"qBN" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"qBO" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/table/standard, +/obj/item/storage/box/monkeycubes{ + pixel_x = 2 + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - Xenobiology Aft" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"qBP" = ( +/obj/structure/bed/chair/shuttle{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"qBR" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/industrial/loading{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"qBV" = ( +/obj/machinery/power/smes/buildable/preset/sierra/substation{ + RCon_tag = "Substation - Third Deck" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/thirddeck) +"qBW" = ( +/obj/structure/closet/secure_closet/injection, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"qBY" = ( +/obj/structure/closet/fridge/meat, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"qCr" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"qCt" = ( +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide{ + start_pressure = 0 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/power) +"qCv" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/blue/border{ + dir = 8 + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Head of Personnel"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"qCA" = ( +/obj/decal/cleanable/dirt, +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/item/trash/raisins, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"qCU" = ( +/obj/machinery/atmospherics/binary/pump/on{ + name = "gas supply pump"; + target_pressure = 200 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/xenobiology/atmos) +"qCV" = ( +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/corner/purple/bordercorner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"qDa" = ( +/obj/machinery/power/solar_control{ + dir = 1; + id = "auxsolarport"; + name = "Port Solar Control" + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"qDd" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"qDh" = ( +/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" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"qDi" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/tcommsat/computer) +"qDl" = ( +/obj/structure/table/standard, +/obj/item/device/taperecorder, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation) +"qDo" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/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" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"qDr" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"qDx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/sign/warning/airlock{ + dir = 8; + pixel_x = 32 + }, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"qDB" = ( +/obj/structure/closet/secure_closet/decktech, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/suplocker_room) +"qDD" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"qDE" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"qDI" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/foreport) +"qDN" = ( +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ + dir = 4; + id_tag = "escape_pod_5_berth"; + name = "escape pod five berth controller"; + pixel_x = -20; + tag_door = "escape_pod_5_berth_hatch" + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"qDO" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Teleporter"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/teleporter) +"qDS" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/mortus{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/office) +"qDT" = ( +/turf/simulated/wall/prepainted, +/area/vacant/storage) +"qEa" = ( +/obj/structure/filingcabinet{ + pixel_x = -10 + }, +/obj/structure/filingcabinet, +/obj/structure/filingcabinet{ + pixel_x = 10 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"qEj" = ( +/obj/shuttle_landmark/petrov/out, +/turf/space, +/area/space) +"qEm" = ( +/obj/machinery/door/airlock/glass/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hydroponics/third_deck_storage) +"qEo" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/window/brigdoor/northleft, +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/aiModule/purge, +/obj/item/aiModule/quarantine, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_cyborg_upload) +"qEp" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/techfloor, +/obj/floor_decal/corner/black{ + dir = 8 + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Atmospherics - South"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"qEw" = ( +/obj/structure/table/standard, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"qEQ" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"qFc" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/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/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"qFq" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"qFr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/galley/freezer) +"qFy" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/heads/office/hop) +"qFD" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"qFF" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d3port) +"qFH" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/structure/bed/chair/padded/blue, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "medsafe_fore"; + name = "safe room door-control"; + pixel_x = -25 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"qFV" = ( +/obj/floor_decal/industrial/hatch/grey, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/civilian{ + name = "Bartenders'" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/bar/cobed) +"qFZ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + dir = 8; + name = "Central Stairwell" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/central_stairwell) +"qGg" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "library_space_lower"; + name = "Space Shutters"; + opacity = 0 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/lounge/upper) +"qGs" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"qGw" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"qGA" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"qGC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"qGO" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"qGQ" = ( +/obj/machinery/hologram/holopad/longrange, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/guppy_hangar/start) +"qGT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/carpet, +/area/chapel/main) +"qGV" = ( +/obj/structure/bed/chair/pew/left/mahogany{ + dir = 1; + icon_state = "chair_pewchapel_left_over" + }, +/obj/decal/cleanable/dirt, +/obj/structure/bed/chair/pew/mahogany, +/turf/simulated/floor/wood/walnut, +/area/vacant/sauna) +"qGW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"qGX" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod2/station) +"qHf" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"qHq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"qHz" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/foreport) +"qHE" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ + dir = 4; + internal_pressure_bound = 35000; + internal_pressure_bound_default = 35000 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d3port) +"qHR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/firstdeck/centralport) +"qHV" = ( +/obj/structure/bed/chair/office/comfy/red{ + dir = 4 + }, +/obj/landmark/start{ + name = "Detective" + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"qHZ" = ( +/obj/structure/flora/pottedplant/tropical, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -6; + pixel_y = -21 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/heads/captain/secret_room/level_one) +"qIa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"qId" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/floor_decal/techfloor/orange{ + dir = 10 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"qIe" = ( +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"qIk" = ( +/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/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"qIp" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"qIs" = ( +/obj/floor_decal/corner/research/mono, +/obj/machinery/computer/rdservercontrol{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"qIw" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"qIB" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/port) +"qIK" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + id_tag = "guppy_shuttle_pump" + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/machinery/tele_beacon, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + cycle_to_external_air = 1; + dir = 1; + frequency = 1331; + id_tag = "guppy_shuttle"; + pixel_x = 32; + pixel_y = -20; + req_access = list("ACCESS_GUPPY") + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"qIQ" = ( +/obj/structure/closet/secure_closet/security/sierra, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/requests_console{ + department = "Security"; + departmentType = 1; + name = "Security RC"; + pixel_x = -32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"qIT" = ( +/obj/machinery/button/blast_door{ + dir = 4; + id_tag = "bsa_space"; + name = "Obstruction Field Disperser Space Shield"; + pixel_x = -24; + req_access = list("ACCESS_GUN") + }, +/obj/structure/sign/warning/vacuum{ + dir = 4; + pixel_x = -45 + }, +/obj/machinery/conveyor_switch{ + id = "bsa"; + name = "Obstruction Field Disperser shell loader" + }, +/obj/floor_decal/corner/black/full, +/turf/simulated/floor/tiled/dark, +/area/command/bsa) +"qIZ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "firingspace"; + name = "FIRING RANGE SAFETY SHIELD" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/hatch/red, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"qJj" = ( +/obj/structure/bed/chair/wheelchair, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"qJo" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/structure/hygiene/sink{ + pixel_y = -12 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery) +"qJr" = ( +/obj/machinery/door/firedoor, +/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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/civilian{ + dir = 4; + name = "Steward's Room" + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/galley/backroom) +"qJJ" = ( +/obj/item/modular_computer/telescreen/preset/trashcompactor{ + pixel_x = -32 + }, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"qJK" = ( +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"qJO" = ( +/obj/structure/mopbucket, +/obj/item/mop, +/obj/item/reagent_containers/glass/bucket, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"qJP" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner/green/border, +/obj/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"qJR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"qKa" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"qKb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"qKd" = ( +/obj/structure/closet/crate/trashcart, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"qKf" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/flasher{ + id_tag = "ai_core"; + pixel_y = 24 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"qKk" = ( +/obj/structure/bed/chair/padded/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"qKs" = ( +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/obj/floor_decal/carpet/purple{ + dir = 9 + }, +/obj/structure/curtain/bed{ + pixel_y = 32 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/office/rd/cobed) +"qKw" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"qKx" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"qKz" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped, +/turf/space, +/area/space) +"qKJ" = ( +/obj/structure/closet/l3closet/scientist, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"qKK" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/shuttle_landmark/sierra/hangar/guppy, +/turf/simulated/floor/tiled, +/area/guppy_hangar/start) +"qKL" = ( +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/machinery/door/airlock/research{ + name = "Robotics Laboratory"; + req_access = newlist(); + id_tag = "rbtk_door" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/assembly/office) +"qKU" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/thirddeck/center) +"qLd" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"qLg" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/structure/closet/crate/freezer, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/random/maintenance, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"qLh" = ( +/obj/machinery/door/window/southright{ + dir = 1; + name = "Test Chamber" + }, +/obj/machinery/door/window/southright{ + name = "Test Chamber" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell2) +"qLi" = ( +/obj/machinery/door/airlock/external{ + frequency = 1379; + id_tag = "ai_core_outer"; + locked = 1; + name = "AI Core Internal Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/access_button{ + command = "cycle_exterior"; + frequency = 1379; + master_tag = "ai_core_airlock"; + name = "exterior access button"; + pixel_x = 24; + pixel_y = 0; + req_access = list("ACCESS_AI_UPLOAD") + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/turret_protected/ai) +"qLn" = ( +/obj/shuttle_landmark/skipjack/dock, +/turf/space, +/area/space) +"qLt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 8 + }, +/obj/structure/holoplant, +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck - Observatory"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"qLx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 6 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"qLA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/equipment) +"qLC" = ( +/obj/structure/curtain/bed, +/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/structure/disposalpipe/segment, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"qLF" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8; + name = "Heat Exchanger Output" + }, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/ocp_wall, +/area/shuttle/petrov/gas) +"qLI" = ( +/obj/structure/foamedmetal, +/turf/simulated/floor/plating, +/area/crew_quarters/gym) +"qLJ" = ( +/obj/floor_decal/corner/darkblue/full, +/obj/floor_decal/corner/black/three_quarters{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"qLK" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"qLW" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"qMa" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralport) +"qMb" = ( +/obj/machinery/recharger/wallcharger{ + dir = 4; + pixel_x = -23; + pixel_y = -3 + }, +/obj/structure/closet/secure_closet{ + name = "Security Equipment Locker"; + req_access = list("ACCESS_SECURITY") + }, +/obj/item/storage/mre/menu7, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/storage/box/donut, +/obj/item/reagent_containers/food/drinks/bottle/small/beer/fake, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"qMl" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/green/bordercorner2{ + icon_state = "bordercolorcorner2"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/obj/item/camera_assembly, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"qMm" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/meter, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"qMA" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/bed/chair/rounded/beige{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"qME" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"qMH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/storage/primary) +"qMJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/spline/fancy/black/corner, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"qMT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/office) +"qMW" = ( +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"qMX" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/space) +"qNb" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"qNe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"qNi" = ( +/obj/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold4w/visible/green, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"qNl" = ( +/obj/floor_decal/spline/fancy/black/corner{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/bar/cobed) +"qNm" = ( +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/janitor) +"qNr" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"qNt" = ( +/obj/wallframe_spawn, +/obj/structure/barricade, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"qNw" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"qNx" = ( +/obj/machinery/power/smes/buildable/preset/sierra/engine_main{ + RCon_tag = "Prototype - Distribution" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/control) +"qNA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod2/station) +"qNK" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"qNQ" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/industrial/danger/corner, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"qNV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 + }, +/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" + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"qNW" = ( +/turf/simulated/floor/carpet/orange, +/area/security/range) +"qNZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"qOa" = ( +/obj/machinery/stasis_cage, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"qOc" = ( +/obj/item/paper/sticky{ + name = "I not wall, i am door."; + pixel_y = 0; + pixel_x = 25 + }, +/turf/simulated/floor/wood/walnut, +/area/maintenance/firstdeck/foreport) +"qOk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/medical/virology/atmos) +"qOn" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/fourthdeck/forestarboard) +"qOv" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/sleep/bunk) +"qOy" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"qOz" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"qOC" = ( +/obj/machinery/vending/boozeomat{ + req_access = list("ACCESS_BAR") + }, +/obj/machinery/light/led/small{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 5 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"qOG" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/machinery/smartfridge/secure/medbay{ + req_access = list() + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"qOH" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/machinery/disposal, +/obj/floor_decal/corner/black/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"qOK" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 9 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d3starboard) +"qOS" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "escape_pod_5_pump" + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod5/station) +"qOU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"qPa" = ( +/obj/structure/closet/secure_closet{ + name = "Secure Evidence Locker"; + req_access = list("ACCESS_SECURITY") + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techmaint, +/area/security/sierra/evidence) +"qPe" = ( +/obj/structure/table/steel, +/obj/random/powercell, +/obj/item/frame/fire_alarm, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"qPp" = ( +/obj/structure/bookcase/manuals/security, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 6 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -9; + pixel_y = -21 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"qPv" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"qPx" = ( +/turf/simulated/floor/tiled, +/area/security/brig) +"qPz" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"qPA" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"qPH" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"qPL" = ( +/obj/machinery/fusion_fuel_compressor, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"qPR" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"qPS" = ( +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"qQa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/vacant/monitoring) +"qQu" = ( +/obj/structure/closet/crate/secure/biohazard/alt, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/petrov{ + c_tag = "Petrov - Equipment Room"; + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/equipment) +"qQx" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"qQz" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/obj/machinery/nav_light, +/obj/structure/handrail{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"qQA" = ( +/obj/wallframe_spawn/reinforced_phoron/titanium, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell3) +"qQC" = ( +/obj/floor_decal/borderfloorblack, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/bunk) +"qQF" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/shutters/open{ + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Entry Shutters" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/medical{ + name = "Hospital Back Room" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"qQG" = ( +/obj/machinery/shield_diffuser, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"qQI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"qQL" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"qQM" = ( +/obj/structure/table/steel, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/reagent_containers/food/snacks/slice/xenomeatbread/filled{ + pixel_x = 17 + }, +/obj/item/folder/nt{ + pixel_y = 7; + pixel_x = -10 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/sleep/bunk) +"qQO" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_pump/tank{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "CO21p_out"; + initialize_directions = 1; + internal_pressure_bound = 1000; + internal_pressure_bound_default = 1000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/structure/window/boron_reinforced{ + dir = 4 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d3starboard) +"qQR" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8; + frequency = 1441; + id = "waste_in"; + use_power = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"qQX" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"qQY" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"qRd" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"qRo" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"qRq" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/obj/machinery/camera/network/hangar{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"qRr" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"qRx" = ( +/obj/structure/closet/emcloset/anchored, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo) +"qRF" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/storage/box/glasses{ + pixel_y = 7 + }, +/obj/item/storage/box/glass_extras/sticks, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"qRL" = ( +/obj/random/obstruction, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"qRN" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"qRO" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"qRS" = ( +/obj/floor_decal/corner/darkblue/full, +/obj/floor_decal/corner/red/full, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"qRU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"qRV" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 10 + }, +/obj/machinery/computer/modular/preset/engineering{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"qRX" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"qRZ" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 10 + }, +/obj/structure/bed/sofa/l/brown{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"qSl" = ( +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 8 + }, +/obj/machinery/button/windowtint{ + dir = 8; + id = "pathfinder_office"; + pixel_x = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/mauve/border{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + dir = 8; + pixel_x = 24; + pixel_y = 10; + id_tag = "exp_leader_window_to_space" + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"qSm" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/port) +"qSp" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/dark/monotile, +/area/maintenance/seconddeck/aftport) +"qSv" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"qSx" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/misc_lab) +"qSy" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/storage/box/lights/mixed, +/obj/item/clothing/gloves/thick/duty, +/obj/machinery/light/small, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/foreport) +"qSD" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"qSQ" = ( +/obj/structure/bed/sofa/r/black{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/bridge/adjutants) +"qSS" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"qSX" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"qSZ" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"qTe" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"qTi" = ( +/obj/structure/table/standard, +/obj/machinery/microwave{ + pixel_y = 4 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/sign/poster{ + pixel_y = 32 + }, +/obj/floor_decal/corner/beige/diagonal, +/obj/floor_decal/corner/brown/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/vacant/dormintories) +"qTm" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"qTB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/carpet/green, +/area/medical/mentalhealth/therapyroom) +"qTL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/rotating_alarm/supermatter{ + pixel_y = -14; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"qTM" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d3port) +"qUe" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"qUp" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"qUq" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"qUr" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"qUA" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/port) +"qUN" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/virology{ + locked = 1; + id_tag = "virology_access_outer" + }, +/obj/item/taperoll/engineering/applied, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/blast/regular, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology) +"qUR" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"qUW" = ( +/obj/machinery/computer/cryopod{ + pixel_y = -24 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/hallway/primary/fourthdeck/central_stairwell) +"qVa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Bridge Solar Access" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/maintenance/solar/bridge_port) +"qVc" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"qVf" = ( +/obj/structure/disposalpipe/segment, +/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/floor_decal/ntlogo{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/entry) +"qVi" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/civilian{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown3_2" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/aft) +"qVk" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftport) +"qVo" = ( +/obj/shuttle_landmark/merc/deck3, +/turf/space, +/area/space) +"qVv" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"qVw" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"qVC" = ( +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"qVF" = ( +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23; + pixel_y = 12 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/machinery/light/led/small, +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/obj/structure/closet/shipping_wall/filled{ + pixel_x = -32 + }, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Bar - Counter"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"qVG" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/device/flashlight/lamp{ + pixel_y = 13; + pixel_x = -3 + }, +/obj/item/book/manual/nt_regs, +/obj/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa/high_sec) +"qVH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Escape Pods - Port"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"qVI" = ( +/turf/simulated/wall/prepainted, +/area/chapel/main) +"qVP" = ( +/obj/structure/table/standard, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/floor_decal/corner/grey{ + dir = 5 + }, +/obj/item/flame/lighter/random, +/obj/item/storage/fancy/smokable/dromedaryco{ + pixel_y = 6; + pixel_x = -4 + }, +/obj/item/deck/cards{ + pixel_y = 9; + pixel_x = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"qVU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"qVV" = ( +/turf/simulated/open, +/area/crew_quarters/lounge/upper) +"qVX" = ( +/obj/structure/table/marble, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/item/reagent_containers/food/condiment/enzyme{ + pixel_y = 8 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"qWf" = ( +/obj/structure/sign/nanotrasen{ + dir = 1 + }, +/turf/simulated/wall/r_wall/hull, +/area/hallway/primary/fourthdeck/center) +"qWi" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"qWk" = ( +/obj/structure/sign/directions/security{ + pixel_y = -24; + dir = 4 + }, +/obj/structure/sign/directions/infirmary{ + pixel_y = -31; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/central_stairwell) +"qWn" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "solar_port_outer"; + name = "Engineering External Access" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar) +"qWo" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"qWx" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "vir_blast_window" + }, +/turf/simulated/floor/plating, +/area/medical/virology/lab) +"qWy" = ( +/obj/structure/table/standard, +/obj/item/hand_labeler, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/office) +"qWz" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/dark/monotile, +/area/maintenance/bridgedeck/port) +"qWD" = ( +/obj/structure/table/rack, +/obj/item/storage/box/trackimp, +/obj/item/storage/toolbox/mechanical, +/obj/item/clothing/head/welding, +/obj/machinery/button/blast_door{ + dir = 4; + pixel_x = -24; + id_tag = "armory_lethal"; + name = "Armory Lethal blast door-control"; + req_access = list("ACCESS_ARMORY") + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"qWF" = ( +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hydroponics/third_deck_storage) +"qWK" = ( +/obj/machinery/washing_machine, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"qWS" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"qWV" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 4; + name = "Captain"; + sort_type = "Captain" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"qXj" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"qXo" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"qXp" = ( +/obj/machinery/disposal, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood/corner, +/obj/structure/sign/directions/security{ + pixel_x = 32; + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"qXy" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + id_tag = null; + name = "Head of Personnel's Quarter"; + secured_wires = 1; + stripe_color = "#b7f27d" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/hop/cobed) +"qXB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head/deck3) +"qXM" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/structure/bed/chair/office/green{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology/ward) +"qXP" = ( +/obj/machinery/door/airlock/hatch{ + autoset_access = 0; + dir = 4; + name = "Cockpit"; + req_access = list("ACCESS_EXPEDITION_SHUTTLE") + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cockpit) +"qXQ" = ( +/turf/simulated/open, +/area/maintenance/thirddeck/aftstarboard) +"qXR" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/self_destruct, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/nuke_storage) +"qYj" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/seconddeck) +"qYn" = ( +/obj/structure/lattice, +/obj/structure/disposaloutlet, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/space) +"qYq" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"qYt" = ( +/obj/machinery/door/blast/regular/escape_pod{ + id_tag = "escape_pod_4" + }, +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/port) +"qYz" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + target_pressure = 200 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"qYD" = ( +/obj/structure/table/standard, +/obj/random/firstaid, +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod1/station) +"qYE" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"qYI" = ( +/obj/structure/cable/yellow, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/reinforced, +/area/solar/bridge_starboard) +"qYL" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/one{ + pixel_x = 7; + pixel_y = 10 + }, +/obj/item/reagent_containers/food/drinks/pitcher{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/machinery/camera/network/supply{ + c_tag = "Supply Office - Office Room"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"qYN" = ( +/obj/machinery/door/window/brigdoor/northleft{ + dir = 2; + name = "thruster vent access"; + req_access = newlist() + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "ThrusterVents"; + name = "Thruster Blast Door" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"qYS" = ( +/obj/structure/curtain/medical, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"qYU" = ( +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 4; + icon_state = "shutter0"; + id_tag = "concheckwindow"; + name = "Operation Checkpoint Shutters"; + opacity = 0 + }, +/obj/wallframe_spawn/reinforced, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/security/opscheck) +"qYV" = ( +/obj/machinery/access_button/airlock_interior{ + master_tag = "sd_starboard"; + name = "interior access button"; + pixel_x = -24; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/machinery/door/airlock/external/glass/bolted/cycling{ + id_tag = "sd_starboard_inner"; + name = "Second Deck Port Airlock" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"qYZ" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"qZb" = ( +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 1; + pixel_y = -22 + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/techfloor, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"qZf" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"qZg" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"qZj" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/civilian{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown1_2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/center) +"qZk" = ( +/obj/floor_decal/corner/red, +/obj/structure/table/steel, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"qZm" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/laundry) +"qZn" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/firedoor, +/obj/paint_stripe/red, +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"qZo" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"qZq" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"qZt" = ( +/obj/structure/lattice, +/obj/random/junk, +/obj/random/trash, +/turf/simulated/open, +/area/maintenance/seconddeck/aftport) +"qZE" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 5 + }, +/obj/machinery/sparker{ + id_tag = "engines"; + pixel_x = -24 + }, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + injecting = 1; + use_power = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d3port) +"qZF" = ( +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/machinery/computer/modular/preset/security{ + dir = 4 + }, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"qZJ" = ( +/obj/structure/table/woodentable/mahogany, +/obj/item/storage/bible/kojiki, +/obj/item/storage/bible/quran, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"qZL" = ( +/obj/floor_decal/corner/black/half, +/obj/floor_decal/corner/red/bordercorner2, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Gym"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"qZR" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/civilian{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown1_2" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/center) +"rac" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Fourth Deck Substation"; + req_access = newlist(); + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/substation/fourthdeck) +"ral" = ( +/obj/floor_decal/corner/grey{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"rap" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/hologram/holopad, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"rau" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"rav" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"raP" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/engineering/engine_room) +"raU" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "eng2"; + name = "Third Deck Port Nacelle Access"; + pixel_y = 21; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/machinery/atmospherics/valve/shutoff/fuel{ + dir = 8 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/thruster/d3port) +"raX" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/space) +"rbf" = ( +/obj/random/trash, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"rbg" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"rbh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo) +"rbm" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"rbn" = ( +/obj/floor_decal/corner/darkblue/half, +/obj/floor_decal/corner/darkblue{ + dir = 5 + }, +/obj/structure/table/standard, +/obj/item/material/ashtray/bronze, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 1; + pixel_y = -13 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"rbs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"rbt" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"rbu" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/obj/structure/sign/nanotrasen{ + dir = 8 + }, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod2/station) +"rbz" = ( +/obj/machinery/door/window/brigdoor/southright{ + autoset_access = 0; + dir = 8; + name = "Test Chamber"; + req_access = list("ACCESS_TOXINS") + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"rbD" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftstarboard) +"rbE" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/stack/material/plasteel/ten, +/obj/item/stack/material/plasteel/ten, +/obj/item/stack/material/plasteel/ten, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"rbF" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#4c535b" + }, +/area/quartermaster/hangar/upper) +"rbM" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/reagent_dispensers/water_cooler{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"rbR" = ( +/obj/structure/table/standard, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/box/evidence, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/ship) +"rbU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"rbV" = ( +/obj/structure/catwalk, +/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/reagent_containers/glass/bucket, +/turf/simulated/open, +/area/rnd/xenobiology/water_cell) +"rcc" = ( +/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/floor_decal/corner/green/border, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"rcj" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/machinery/meter, +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/engineering/atmos/storage) +"rcp" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/seconddeck) +"rcx" = ( +/obj/machinery/door/airlock/research{ + dir = 4; + name = "Canister Storage"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + 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/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/canister) +"rcD" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft) +"rcN" = ( +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"rcO" = ( +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/aft_stairwell) +"rcS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/storage/tech) +"rcV" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"rcW" = ( +/obj/machinery/vending/generic{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 4; + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"rdf" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/black/border{ + dir = 5 + }, +/obj/machinery/button/windowtint{ + dir = 8; + id = "interrogation_no1_windows"; + pixel_x = 22; + pixel_y = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation) +"rdj" = ( +/obj/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/foreport) +"rdn" = ( +/obj/floor_decal/corner/purple/full, +/obj/structure/closet/cabinet, +/obj/item/book/manual/research_and_development, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/rd/cobed) +"rdv" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"rdw" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/machinery/computer/cryopod{ + pixel_x = -32 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod6/station) +"rdH" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/random/obstruction, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/foreport) +"rdI" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"rdK" = ( +/obj/machinery/atmospherics/valve/digital{ + dir = 4; + name = "emergency cooling valve" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"rdM" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"rdN" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 5 + }, +/obj/structure/closet/emcloset/anchored, +/obj/machinery/camera/network/bridge_deck{ + dir = 8; + c_tag = "Bridge Deck - Aft Hallway" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"rdO" = ( +/obj/shuttle_landmark/sierra/deck3/crucian, +/turf/space, +/area/space) +"rdU" = ( +/obj/structure/table/steel_reinforced, +/obj/item/storage/toolbox/mechanical, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"rdY" = ( +/obj/floor_decal/solarpanel, +/obj/machinery/power/solar{ + id = "auxsolarsport"; + name = "Aft Port Solar Array" + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/solar/port) +"red" = ( +/obj/structure/closet/crate/bin, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftport) +"rem" = ( +/turf/simulated/wall/prepainted, +/area/holocontrol) +"rep" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad/longrange, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"res" = ( +/obj/structure/table/steel, +/obj/item/device/flashlight/lamp, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"rev" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"reI" = ( +/obj/machinery/body_scan_display{ + pixel_y = -32 + }, +/obj/machinery/computer/operating{ + dir = 8 + }, +/obj/floor_decal/corner/grey_alt/three_quarters{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/assembly/robotics) +"reM" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"reN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/glass/security{ + dir = 8; + name = "Security Airlock" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway) +"reP" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/decal/cleanable/blood/oil, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"reQ" = ( +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/commissary) +"reS" = ( +/obj/machinery/atmospherics/binary/pump/on{ + name = "Air to Supply" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"reW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/table/standard, +/obj/item/device/destTagger{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/stack/package_wrap/cargo_wrap, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"rfa" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"rfi" = ( +/obj/paint_stripe/nt_red, +/obj/paint/nt_white, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod7/station) +"rfn" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"rfp" = ( +/obj/structure/table/steel, +/obj/machinery/photocopier/faxmachine{ + department = "CE" + }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Chief Engineer's Desk"; + departmentType = 5; + name = "Chief Engineer RC"; + pixel_y = 30 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"rfs" = ( +/obj/structure/bed/chair/padded/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"rfE" = ( +/obj/structure/sign/poster{ + pixel_x = 32 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"rfI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"rfN" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"rfT" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"rfU" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "PetrovShield"; + name = "Petrov Blast Shutters" + }, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/plating, +/area/shuttle/petrov/cockpit) +"rfX" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"rfZ" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"rgg" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"rgx" = ( +/obj/shuttle_landmark/escape_pod/start/pod8, +/obj/wallframe_spawn/reinforced/titanium, +/turf/simulated/floor/plating, +/area/shuttle/escape_pod/escape_pod8/station) +"rgy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"rgK" = ( +/obj/machinery/washing_machine, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/heads/captain/secret_room/level_one) +"rgN" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"rgQ" = ( +/obj/floor_decal/corner/green/diagonal, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/sign/warning/deathsposal{ + pixel_x = 32; + pixel_y = 0 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"rgS" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"rhb" = ( +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"rhc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"rhi" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/surgery, +/obj/machinery/body_scan_display{ + pixel_y = -28 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery/second) +"rhk" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/firedoor, +/obj/paint_stripe/red, +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"rhl" = ( +/obj/machinery/door/airlock/hatch{ + dir = 4; + name = "Seating"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"rho" = ( +/obj/structure/largecrate, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"rhs" = ( +/obj/machinery/suit_storage_unit/science, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/eva) +"rhx" = ( +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"rhy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"rhB" = ( +/obj/paint_stripe/yellow, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/guppy_hangar/start) +"rhC" = ( +/obj/machinery/computer/modular/preset/civilian, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/sleep/cryo/bridge) +"rhD" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft) +"rhF" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/red, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos/cobed) +"rhH" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/selfestructgrid, +/area/security/nuke_storage) +"rhJ" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"rhN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"rhQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + autoset_access = 0; + dir = 4; + frequency = 1331; + id_tag = "guppy_shuttle_outer"; + name = "Guppy External Access"; + req_access = list("ACCESS_GUPPY") + }, +/obj/machinery/door/blast/regular{ + id_tag = "guppy_hatch"; + name = "Rear Hatch" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"rhT" = ( +/obj/structure/cart{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"rhV" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + id = "fuel4p_in"; + use_power = 1 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d1port) +"rhZ" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"ria" = ( +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf/steel{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 8; + name = "Security Checkpoint" + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 4; + icon_state = "shutter0"; + opacity = 0 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_6" + }, +/turf/simulated/floor/plating, +/area/bridge/lobby) +"rig" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"rip" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/reinforced, +/area/space) +"riq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/fore) +"rit" = ( +/obj/fluid_mapped, +/mob/living/simple_animal/aquatic/fish, +/turf/simulated/floor/beach/sand, +/area/rnd/xenobiology/level2) +"riB" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"riP" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/head/deck3) +"riQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/corner/green/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"rjb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"rjg" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/aft) +"rjh" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"rjw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"rjy" = ( +/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/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/ward) +"rjz" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Telecoms Storage"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/storage) +"rjA" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 6 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d3port) +"rjF" = ( +/obj/floor_decal/solarpanel, +/obj/machinery/power/solar{ + id = "auxsolarsport"; + name = "Aft Port Solar Array" + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/airless, +/area/solar/port) +"rjG" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/seconddeck/center) +"rjN" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"rjS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"rkb" = ( +/obj/structure/table/standard, +/obj/machinery/photocopier/faxmachine{ + department = "CMO" + }, +/obj/floor_decal/corner/blue{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"rkh" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1379; + master_tag = "solar_bridge_port_airlock"; + name = "interior access button"; + pixel_x = 24; + pixel_y = 24; + req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/solar/bridge_port) +"rkp" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/quartermaster/storage) +"rku" = ( +/obj/structure/bed/chair/wood/walnut, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"rky" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"rkB" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"rkR" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/blast_door{ + id_tag = "PetrovShield"; + name = "Blast Shutter Control"; + pixel_x = 5; + pixel_y = -3 + }, +/obj/item/device/radio, +/obj/machinery/camera/network/petrov{ + c_tag = "Petrov - Cockpit"; + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/cockpit) +"rkT" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"rkW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"rkX" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/obj/structure/shuttle/engine/heater{ + pixel_y = 32 + }, +/turf/simulated/floor/plating, +/area/exploration_shuttle/power) +"rkZ" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/plating, +/area/engineering/engine_monitoring) +"rle" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/full, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/ce) +"rlt" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"rly" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/reagent_dispensers/watertank, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"rlH" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"rlI" = ( +/obj/structure/holoplant, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/office) +"rlJ" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cargo_l) +"rlQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/holocontrol) +"rlU" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/space) +"rlW" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"rmf" = ( +/obj/structure/closet/crate/trashcart, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"rmo" = ( +/obj/structure/bed/chair/office/brown{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"rmB" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"rmQ" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/machinery/power/apc/high{ + dir = 8; + name = "west bump"; + pixel_x = -25 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"rmS" = ( +/obj/floor_decal/spline/plain/black{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"rmW" = ( +/obj/machinery/shield_diffuser, +/obj/machinery/door/airlock/external/escapepod{ + dir = 4; + id_tag = "escape_pod_4_berth_hatch"; + name = "Escape Pod Four" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/center) +"rnx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/structure/grille, +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "engineroomvent"; + name = "Engine Room Vent" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"rnD" = ( +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"rnI" = ( +/obj/floor_decal/industrial/warning/half, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/assembly/chargebay) +"rnL" = ( +/obj/machinery/drone_fabricator/sierra, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"rnO" = ( +/obj/machinery/button/blast_door{ + id_tag = "qm_warehouse2"; + name = "Warehouse Door Control"; + pixel_y = 27; + req_access = list("ACCESS_CARGO") + }, +/obj/vehicle/train/cargo/engine, +/obj/floor_decal/spline/plain/brown{ + dir = 6 + }, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"rnP" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/xenobiology/atmos) +"rnQ" = ( +/obj/structure/bed/chair/padded/red, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/fore) +"rnX" = ( +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 8 + }, +/obj/floor_decal/carpet/blue2{ + dir = 4 + }, +/obj/floor_decal/carpet/blue2, +/obj/floor_decal/carpet/blue2{ + dir = 6 + }, +/obj/machinery/computer/guestpass{ + dir = 1; + pixel_y = -23 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/hop) +"rob" = ( +/obj/structure/largecrate, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"rom" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/structure/cable/green{ + 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/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"roq" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"rot" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 8 + }, +/obj/machinery/atmospherics/valve/shutoff/supply, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"row" = ( +/obj/random/obstruction, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"rox" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "firingspace"; + name = "Firing Range Shields" + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"roC" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/air_sensor{ + id_tag = "rust_sensor" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"roN" = ( +/obj/structure/hygiene/shower{ + dir = 8; + pixel_x = 9 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"roS" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/power/port_gen/pacman{ + sheets = 25 + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"rpl" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/glass/maintenance{ + dir = 8 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar/upper) +"rpv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + id_tag = "xenobioa2"; + name = "Containment Blast Doors"; + pixel_x = -6; + pixel_y = 21; + req_access = list("ACCESS_RESEARCH") + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"rpx" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"rpA" = ( +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell1) +"rpD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"rpE" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/open, +/area/space) +"rpI" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"rpP" = ( +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/firstdeck/forestarboard) +"rpR" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/reagentgrinder, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/stack/material/phoron, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/scan) +"rpY" = ( +/obj/structure/flora/ausbushes/grassybush, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/grass/cut, +/area/hallway/primary/bridgedeck/center) +"rqd" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/stock_parts/circuitboard/helm, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech/high_risk) +"rqg" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/blast/regular{ + id_tag = "vir_blast_window" + }, +/turf/simulated/floor/plating, +/area/medical/virology/lab) +"rql" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + name = "Third Deck Fore Starboard Nacelle Access"; + id_tag = "td_fore_starboard_outer" + }, +/obj/machinery/access_button/airlock_exterior{ + dir = 1; + master_tag = "td_fore_starboard"; + name = "exterior access button"; + pixel_x = 24; + req_access = list("ACCESS_EXTERNAL") + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/forestarboard) +"rqp" = ( +/obj/structure/sign/deck/third{ + dir = 8; + pixel_x = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/obj/structure/sign/directions/supply{ + dir = 8; + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"rqr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/beige/diagonal, +/obj/floor_decal/corner/brown/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/vacant/dormintories) +"rqs" = ( +/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" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/security{ + id_tag = "wardoor"; + name = "Warden" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/sierra/sergeant) +"rqt" = ( +/obj/floor_decal/corner/grey{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"rqD" = ( +/obj/machinery/door/airlock/hatch{ + name = "Cargo Bay Right"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_r) +"rqK" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"rqW" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/thirddeck/aftport) +"rqX" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/prison) +"rrc" = ( +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"rri" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"rrl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/forensic/lab) +"rrs" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"rru" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"rrx" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/micro_laser/high, +/obj/item/stock_parts/micro_laser/high, +/obj/item/stock_parts/micro_laser/high, +/obj/item/stock_parts/micro_laser/high, +/obj/item/stock_parts/capacitor, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/manipulator, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/tcommsat/storage) +"rrR" = ( +/obj/structure/table/steel, +/obj/item/paper_bin{ + pixel_x = 6; + pixel_y = 7 + }, +/obj/item/device/flashlight/lamp/green{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/random/clipboard{ + pixel_y = -2; + pixel_x = 3 + }, +/obj/item/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/pen/red{ + pixel_x = 2; + pixel_y = 6 + }, +/obj/item/device/binoculars, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/hangar/upper) +"rrX" = ( +/obj/structure/undies_wardrobe, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"rrY" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3starboard) +"rrZ" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/surgery, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery) +"rsb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"rsf" = ( +/obj/floor_decal/corner/green/diagonal, +/obj/structure/table/glass, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/obj/item/camera_assembly, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"rsi" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"rso" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"rsp" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "firingspace"; + name = "Firing Range Shields" + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/cable/green, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint_stripe/red, +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/security/range) +"rsq" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped, +/obj/structure/handrail, +/turf/space, +/area/space) +"rst" = ( +/obj/structure/dispenser/oxygen, +/obj/floor_decal/industrial/outline/grey, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"rsv" = ( +/obj/structure/closet{ + anchored = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"rsE" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"rsF" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"rsG" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/corner/brown/mono, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar_stairs/upper) +"rsS" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"rta" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"rtg" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/galley/backroom) +"rtl" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/purple/bordercorner2, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"rto" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"rtD" = ( +/obj/machinery/computer/air_control{ + input_tag = "test_xenoflora_in"; + name = "Test Chamber Gas Monitor"; + output_tag = "test_xenoflora_out"; + sensor_name = "Xenoflora Environment"; + sensor_tag = "xenobot_sensor" + }, +/obj/floor_decal/corner/green/three_quarters{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"rtE" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + name = "Robotics Laboratory"; + sort_type = "Robotics Laboratory" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft) +"rtR" = ( +/obj/machinery/computer/rdservercontrol{ + dir = 1 + }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Research Director"; + departmentType = 3; + name = "Research Director RC"; + pixel_x = 32 + }, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/heads/office/rd) +"rtT" = ( +/turf/simulated/open, +/area/space) +"rtU" = ( +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/infirmreception) +"rtV" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/black/border{ + dir = 10 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Interrogation Two"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation/second) +"rtY" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/port) +"rub" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + target_pressure = 40 + }, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"rui" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"ruj" = ( +/obj/structure/bed/sofa/r/brown{ + dir = 1 + }, +/obj/floor_decal/carpet/red, +/obj/floor_decal/carpet/red{ + dir = 8 + }, +/obj/floor_decal/carpet/red{ + dir = 10 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"ruk" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/civilian{ + id_tag = "old_maintaince_privatedorm"; + name = "Old Dorms"; + locked = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/vacant/dormintories) +"rut" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/machinery/ship_map, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"ruy" = ( +/obj/floor_decal/spline/fancy/wood/corner, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/random/ironing_board_structure, +/obj/item/ironing_iron, +/obj/machinery/light/spot, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"ruz" = ( +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/storage/box/lights/led_neon, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/bridge/storage) +"ruB" = ( +/obj/shuttle_landmark/merc/deck2, +/turf/space, +/area/space) +"ruE" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southleft{ + autoset_access = 0; + dir = 4; + name = "Supply Desk" + }, +/obj/machinery/door/window/brigdoor/southright{ + dir = 8; + name = "Supply Desk"; + req_access = newlist() + }, +/obj/machinery/door/blast/shutters/open{ + name = "Supply Desk Shutters"; + id_tag = "sup_office"; + dir = 4 + }, +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf{ + dir = 4 + }, +/obj/item/material/bell{ + pixel_y = 1; + pixel_x = 6 + }, +/turf/simulated/floor/plating, +/area/quartermaster/office) +"ruI" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"ruK" = ( +/obj/machinery/cryopod{ + dir = 2 + }, +/obj/machinery/computer/cryopod{ + pixel_x = -32 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod9/station) +"ruP" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 5 + }, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "ThrusterVents"; + name = "Thruster Blast Door" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"rvc" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"rvf" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"rvh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/civilian{ + name = "Kitchen"; + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + 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/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"rvk" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation) +"rvp" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Substation - Fourth Deck"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/fourthdeck) +"rvq" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 4 + }, +/obj/structure/sign/warning/nosmoking_1{ + desc = "A warning sign which reads 'NO SMOKING'. Someone has scratched a variety of crude words in gutter across the entire sign."; + pixel_y = 32 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"rvv" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"rvx" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"rvy" = ( +/obj/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"rvB" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"rvD" = ( +/obj/floor_decal/corner/lightgrey/mono, +/obj/structure/bed/chair/office/green{ + dir = 4 + }, +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/green/bordercee, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"rvT" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/test_room) +"rwb" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"rwc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"rwo" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"rwx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/decal/cleanable/generic, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"rwA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"rwJ" = ( +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "qm_warehouse2"; + name = "Warehouse Shutters" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/storage) +"rwM" = ( +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/egun, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory) +"rwU" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/hallway/primary/seconddeck/central_stairwell) +"rwV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"rxa" = ( +/obj/structure/table/rack, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"rxd" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "hangar_checkpoint_shutters"; + name = "Hangar Deck Checkpoint Shutters"; + opacity = 0 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/security/sierra/dockcheck) +"rxq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"rxw" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated/dark, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/bridge/hallway) +"rxI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + id_tag = "iaadoorleft"; + name = "Internal Affairs Agent"; + secured_wires = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa) +"rxK" = ( +/obj/floor_decal/corner/black/three_quarters{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/ship) +"rxO" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"rxR" = ( +/obj/machinery/suit_storage_unit/mining, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/brown/border, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"rxU" = ( +/obj/structure/bed/chair/padded/purple{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"rxZ" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/blue{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"rye" = ( +/obj/floor_decal/corner/paleblue, +/obj/structure/bed/chair/office/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/ward) +"ryg" = ( +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ryk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"ryn" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"ryq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"ryz" = ( +/obj/machinery/vending/coffee, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"ryC" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"ryI" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"ryJ" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"ryR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"ryY" = ( +/obj/structure/closet/l3closet/general/multi, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/spline/plain/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"ryZ" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/exploration_shuttle/power) +"rzd" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/green, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/bunk) +"rzi" = ( +/obj/floor_decal/corner/green/border{ + dir = 6 + }, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/green/bordercorner2{ + icon_state = "bordercolorcorner2"; + dir = 9 + }, +/obj/floor_decal/corner/green/bordercorner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/sleep/cryo/south) +"rzl" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d1port) +"rzq" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 5 + }, +/obj/structure/table/steel_reinforced, +/obj/item/storage/firstaid/radiation{ + pixel_y = 7 + }, +/obj/item/storage/firstaid/fire{ + pixel_y = -2 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"rzH" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"rzI" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 4 + }, +/obj/structure/lattice, +/turf/space, +/area/space) +"rzP" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/airless, +/area/space) +"rzT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"rAd" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 10 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d3port) +"rAf" = ( +/obj/floor_decal/industrial/loading{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"rAg" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_2" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"rAi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"rAj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"rAl" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 1; + id_tag = "petrov_shuttle_dock_pump" + }, +/obj/machinery/airlock_sensor{ + id_tag = "petrov_shuttle_dock_sensor"; + master_tag = "petrov_shuttle_dock"; + pixel_x = -24 + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"rAm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"rAu" = ( +/obj/structure/table/steel, +/obj/machinery/button/blast_door{ + id_tag = "PetrovShield"; + name = "Blast Shutter Control"; + pixel_x = 5; + pixel_y = -3 + }, +/obj/machinery/button/alternate/door{ + desc = "A remote control-switch for airlocks."; + id_tag = "PetrovAccess"; + name = "Petrov Interior Door Control"; + pixel_x = -5; + pixel_y = 6 + }, +/obj/machinery/button/blast_door{ + id_tag = "PetrovBiohazard"; + name = "Biohazard Shutter Control"; + pixel_x = -5; + pixel_y = -3 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/button/blast_door{ + id_tag = "concheckwindow2"; + name = "Office Shutter Control"; + pixel_x = 5; + pixel_y = 6 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/security) +"rAC" = ( +/obj/machinery/door/window/westright{ + dir = 1; + name = "Medical Reception" + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/infirmreception) +"rAI" = ( +/obj/item/device/radio/intercom/locked/ai_private{ + pixel_y = 22 + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"rAK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"rAR" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"rAU" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/shutters/open{ + dir = 2; + id_tag = "infimary_window_lockdown"; + name = "Infirmary Window Shutters" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/medical{ + name = "Hospital" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"rAX" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"rAZ" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/critical{ + name = "north bump"; + pixel_y = 21; + dir = 1 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/maintenance/solar/bridge_starboard) +"rBf" = ( +/obj/structure/table/rack, +/obj/item/tape_roll, +/obj/item/stack/material/cardboard/fifty, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/item/shuttle_beacon, +/obj/item/shuttle_beacon, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/spline/plain/yellow{ + dir = 9 + }, +/obj/random/maintenance/clean, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"rBp" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"rBx" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/field_generator, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"rBy" = ( +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/thirddeck/aftport) +"rBA" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery) +"rBD" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar_atmos) +"rBL" = ( +/obj/machinery/light/spot, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled, +/area/security/brig) +"rBO" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"rBS" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"rBT" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/cell_charger, +/obj/item/cell/high, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"rBU" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/civilian{ + dir = 4; + name = "Restroom" + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/head_big) +"rBV" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/center) +"rBY" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/clothing/head/helmet/ballistic, +/obj/item/clothing/head/helmet/ballistic, +/obj/item/clothing/head/helmet/ballistic, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"rBZ" = ( +/obj/machinery/recharge_station, +/obj/structure/sign/poster{ + pixel_y = 32 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"rCc" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"rCd" = ( +/obj/machinery/atmospherics/unary/tank{ + color = "#ff0000"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"rCs" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/tcommsat/computer) +"rCy" = ( +/obj/item/stool/bar, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"rCB" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"rCE" = ( +/obj/machinery/door/window/brigdoor/eastright{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/structure/closet/walllocker{ + pixel_x = 28 + }, +/obj/item/hand_labeler, +/turf/simulated/floor/tiled/techmaint, +/area/security/sierra/evidence) +"rCI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"rCL" = ( +/obj/machinery/vending/cola{ + dir = 1 + }, +/obj/machinery/light, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lightgrey/border, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"rCN" = ( +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/compactor) +"rCX" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/small, +/obj/item/stack/material/steel/fifty, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"rCZ" = ( +/obj/machinery/power/port_gen/pacman{ + sheets = 25 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"rDf" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/window/boron_reinforced{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"rDh" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"rDj" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"rDm" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"rDr" = ( +/turf/simulated/floor/reinforced, +/area/exploration_shuttle/medical) +"rDs" = ( +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d1starboard) +"rDu" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/bed/chair/pew, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/actor/stage) +"rDD" = ( +/obj/floor_decal/corner/black/border{ + dir = 5 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"rDH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"rDP" = ( +/obj/floor_decal/industrial/traffic{ + dir = 1; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/turf/simulated/floor/tiled/white, +/area/rnd/office) +"rDR" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"rEc" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/table/standard, +/obj/item/cell/high, +/obj/item/cell/high, +/obj/machinery/cell_charger, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"rEd" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"rEh" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"rEn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"rEv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 8 + }, +/obj/machinery/fabricator, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"rEy" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"rEG" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/paint_stripe/red, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced/polarized{ + id = "forensicswindow" + }, +/turf/simulated/floor/plating, +/area/security/sierra/forensic) +"rEQ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/glass/command, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/aft) +"rFc" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d1starboard) +"rFj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"rFm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"rFq" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/xenobiology/storage2) +"rFv" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/ai_status_display{ + pixel_x = 32; + pixel_y = -32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"rFB" = ( +/obj/structure/bed/chair/comfy/brown, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"rFG" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/ship_map, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"rFL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"rFM" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "td_fore_starboard_pump" + }, +/obj/floor_decal/industrial/warning/full, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"rFP" = ( +/obj/machinery/conveyor{ + id = "mining_internal" + }, +/obj/machinery/mineral/stacking_machine{ + input_turf = 1; + output_turf = 2 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor, +/area/quartermaster/hangar) +"rFS" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/device/flashlight/lamp/lava/orange{ + pixel_y = 13; + pixel_x = 9 + }, +/obj/machinery/space_heater/stationary/on{ + set_temperature = 348.15; + pixel_x = -30 + }, +/obj/structure/bed/sauna_bench/middle, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sauna) +"rFV" = ( +/obj/machinery/vending/cigarette{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar_stairs) +"rFX" = ( +/obj/machinery/door/firedoor, +/obj/decal/cleanable/dirt, +/obj/structure/cable/green{ + 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/door/airlock/engineering{ + dir = 4; + name = "Second Deck Substation" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/substation/seconddeck) +"rGb" = ( +/obj/floor_decal/corner/black/bordercorner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"rGn" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"rGu" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"rGI" = ( +/obj/machinery/door/airlock/multi_tile/research{ + frequency = 1379; + id_tag = "xenolow_airlock_outer"; + locked = 1; + name = "Xenobiology External Airlock" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/rnd/xenobiology/entry2) +"rGK" = ( +/obj/machinery/uniform_vendor{ + dir = 4; + icon_state = "robotics" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/computer/cryopod{ + pixel_x = -32 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo) +"rGL" = ( +/obj/machinery/cryopod{ + dir = 2 + }, +/obj/machinery/computer/cryopod{ + pixel_x = -32 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod10/station) +"rGS" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/subspace/ansible, +/obj/item/stock_parts/subspace/ansible, +/obj/item/stock_parts/subspace/ansible, +/turf/simulated/floor/tiled/steel_ridged, +/area/tcommsat/storage) +"rGX" = ( +/obj/floor_decal/carpet/blue2{ + dir = 8 + }, +/obj/floor_decal/carpet/blue2{ + dir = 1 + }, +/obj/floor_decal/carpet/blue2{ + dir = 9 + }, +/turf/simulated/floor/carpet/blue3, +/area/crew_quarters/heads/office/cmo/cobed) +"rHt" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"rHA" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"rHE" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "infimary_hall_lockdown"; + name = "Infirmary Entry Shutters" + }, +/turf/simulated/floor/plating, +/area/medical/staging) +"rHM" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/seconddeck/foreport) +"rHO" = ( +/obj/structure/sign/warning/radioactive{ + dir = 1; + pixel_y = -32 + }, +/obj/structure/catwalk, +/turf/simulated/open, +/area/space) +"rHY" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/rubble, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"rIb" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/hallway/primary/bridgedeck/central_stairwell) +"rIc" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/turf/simulated/floor/tiled, +/area/rnd/entry) +"rIo" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/obj/structure/table/standard, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"rIt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"rIu" = ( +/obj/structure/table/steel, +/obj/item/paper_bin{ + pixel_y = 5 + }, +/obj/item/pen/blue{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/folder/red, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/box/lights/mixed, +/obj/item/storage/box/lights/mixed, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/utility) +"rIw" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/portable_atmospherics/powered/pump, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"rIx" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/green{ + pixel_x = -5; + pixel_y = 15 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"rID" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"rIH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 10 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/hologram/holopad, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark, +/area/turret_protected/ai_teleport) +"rIM" = ( +/obj/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/green/border{ + dir = 10 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"rIQ" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_9_hatch"; + name = "Escape Pod Nine Hatch" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod9/station) +"rIX" = ( +/obj/floor_decal/corner/purple/three_quarters{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8; + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/floor_decal/industrial/danger{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"rIZ" = ( +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"rJe" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/heads/office/rd/cobed) +"rJn" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 8 + }, +/obj/machinery/vending/coffee{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"rJu" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/sign/warning/nosmoking_1{ + desc = "A warning sign which reads 'NO SMOKING'. Someone has scratched a variety of crude words in gutter across the entire sign."; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"rJx" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/multi_tile/maintenance, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/forestarboard) +"rJC" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"rJD" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"rJL" = ( +/obj/machinery/atmospherics/valve/shutoff, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/engineering/atmos/storage) +"rJW" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"rJX" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"rKi" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/greengrid, +/area/engineering/gravitaional_generator) +"rKp" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8; + frequency = 1441; + id = "n2_in"; + use_power = 1 + }, +/turf/simulated/floor/reinforced/nitrogen, +/area/engineering/atmos) +"rKu" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"rKv" = ( +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/machinery/door/window/westleft{ + name = "Medical Reception" + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"rKy" = ( +/obj/structure/closet/secure_closet/iaa, +/obj/item/modular_computer/tablet/lease/preset/command, +/obj/item/storage/secure/safe{ + pixel_y = 28 + }, +/obj/item/folder/envelope/blanks, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"rKD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Fuel Bay"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/fuelbay) +"rKH" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"rKP" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/sortjunction{ + name = "Expedition Prep"; + sort_type = "Expedition Prep" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"rKU" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/closet/secure_closet/personal/empty, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/vacant/dormintories) +"rKZ" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"rLa" = ( +/obj/structure/table/glass, +/obj/item/material/ashtray/glass, +/obj/item/storage/fancy/smokable/trident{ + pixel_y = -2; + pixel_x = -5 + }, +/obj/item/flame/lighter/zippo{ + pixel_y = 8; + pixel_x = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"rLb" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"rLj" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/chapel/main) +"rLn" = ( +/obj/floor_decal/industrial/loading{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"rLs" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "fusion_observation" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/vacant/prototype/control) +"rLt" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"rLu" = ( +/obj/structure/table/woodentable, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/pawn{ + pixel_y = -1; + pixel_x = 11 + }, +/obj/item/device/flashlight/lamp{ + pixel_x = -3; + pixel_y = 9 + }, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"rLy" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"rLB" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + target_pressure = 200 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"rLC" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/newspaper{ + pixel_y = 10; + pixel_x = -5 + }, +/obj/item/material/ashtray/plastic{ + pixel_y = -2; + pixel_x = 4 + }, +/obj/item/trash/cigbutt{ + pixel_y = 1; + pixel_x = -5 + }, +/obj/item/trash/cigbutt{ + pixel_y = 8; + pixel_x = 2 + }, +/obj/item/trash/cigbutt{ + pixel_y = -5; + pixel_x = 2 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/sleep/cryo/south) +"rLE" = ( +/obj/floor_decal/corner/purple/half{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"rLG" = ( +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"rLI" = ( +/obj/floor_decal/industrial/traffic, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"rLL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/b_green/bordercorner2{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/power/apc/charon{ + dir = 4; + name = "west bump"; + pixel_x = 24; + req_access = list(list("ACCESS_EXPLORER","ACCESS_ENGINEERING")) + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"rLP" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/decal/cleanable/flour, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"rLR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"rLY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"rLZ" = ( +/obj/structure/inflatable/door, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"rMc" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"rMh" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/blue{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"rMj" = ( +/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" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"rMn" = ( +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"rMo" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/seconddeck/aftport) +"rMr" = ( +/obj/structure/closet/crate, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"rMx" = ( +/obj/structure/ladder, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/firstdeck/aftport) +"rMB" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/woodentable/maple, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/teacup{ + pixel_y = 7 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/teacup{ + pixel_x = 4 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"rMF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/solar/bridge_port) +"rMW" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"rMY" = ( +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4; + locked = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/barricade, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"rMZ" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod2/station) +"rNb" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/stock_parts/circuitboard/autolathe, +/obj/item/stock_parts/circuitboard/unary_atmos/cooler, +/obj/item/stock_parts/circuitboard/unary_atmos/heater, +/obj/item/stock_parts/circuitboard/oxyregenerator, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech) +"rNl" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"rNm" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/engineering/locker_room) +"rNn" = ( +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"rNq" = ( +/obj/shuttle_landmark/sierra/deck3/guppy, +/turf/space, +/area/space) +"rNw" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"rNx" = ( +/turf/unsimulated/mask, +/area/hallway/primary/bridgedeck/center) +"rNy" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/camera/all/command{ + c_tag = "AI Core - Aft"; + dir = 4 + }, +/obj/machinery/flasher{ + dir = 4; + id_tag = "ai_core"; + pixel_x = -24 + }, +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/dark, +/area/turret_protected/ai) +"rNE" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/firstaid, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"rNG" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/window/southleft{ + dir = 1; + name = "Containment Pen"; + req_access = newlist() + }, +/obj/floor_decal/corner_steel_grid{ + dir = 5 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level2) +"rNH" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"rNK" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/blue/border, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/hop/cobed) +"rNN" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"rNR" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/mining, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition/eva) +"rNS" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/blue/border, +/obj/structure/closet/white_sierra, +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/item/storage/box/syringes, +/obj/item/storage/box/evidence, +/turf/simulated/floor/tiled/white, +/area/security/sierra/forensic/lab) +"rNU" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/mask/muzzle, +/obj/item/clothing/mask/muzzle, +/obj/structure/window/basic{ + dir = 1 + }, +/obj/structure/window/basic{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"rNX" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"rOc" = ( +/obj/machinery/status_display, +/turf/simulated/wall/prepainted, +/area/crew_quarters/commissary) +"rOi" = ( +/obj/decal/cleanable/dirt, +/obj/structure/cable/green, +/obj/machinery/power/apc/critical{ + name = "east bump"; + dir = 4; + pixel_x = 21 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/substation/seconddeck) +"rOv" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/machinery/shieldwallgen, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"rOx" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/machinery/status_display{ + pixel_x = -32 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"rOG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 10 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"rOI" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"rOW" = ( +/obj/structure/railing/mapped, +/obj/structure/bed/sofa/m/blue, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"rOZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/green/border{ + dir = 9 + }, +/obj/machinery/light_construct{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"rPc" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"rPm" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/solar/bridge_starboard) +"rPn" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"rPq" = ( +/obj/machinery/door/airlock/glass/atmos{ + name = "Atmospherics"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"rPt" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/heads/office/hos/cobed) +"rPu" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"rPv" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/bar) +"rPy" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/storage) +"rPD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"rPG" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/forensic) +"rPJ" = ( +/turf/simulated/open, +/area/hydroponics) +"rPN" = ( +/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{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4; + autoset_access = 0 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/xenobio) +"rPO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"rPQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/item/stool/padded/red, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"rPS" = ( +/obj/random/maintenance, +/obj/decal/cleanable/cobweb2, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"rQc" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"rQf" = ( +/obj/floor_decal/corner/black/mono, +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"rQg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"rQm" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/fourthdeck/port) +"rQo" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d3starboard) +"rQw" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"rQA" = ( +/obj/floor_decal/corner/grey/diagonal, +/obj/decal/cleanable/blood/oil, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/wardrobe/robotics_black, +/obj/item/clothing/under/rank/roboticist/skirt, +/obj/item/clothing/under/rank/roboticist/skirt, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/assembly/office) +"rQI" = ( +/obj/machinery/shield_diffuser, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_6_berth_hatch"; + name = "Escape Pod Six" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"rQO" = ( +/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/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"rQV" = ( +/obj/decal/cleanable/dirt, +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/table/steel, +/obj/item/reagent_containers/syringe/drugs, +/obj/item/reagent_containers/syringe/drugs, +/obj/item/reagent_containers/syringe/drugs, +/obj/item/clothing/suit/straight_jacket, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"rRa" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/vacant/sauna) +"rRf" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/corner/yellow/half{ + dir = 8 + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/sign/directions/engineering{ + dir = 1; + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/central_stairwell) +"rRl" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"rRm" = ( +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"rRq" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/papershredder, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"rRw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/civilian{ + id_tag = "сhief_steward"; + name = "Chief Steward"; + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/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" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/command/chief_steward) +"rRF" = ( +/obj/structure/stairs/east, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/central_stairwell) +"rRI" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"rRK" = ( +/obj/machinery/cooker/oven, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/prison) +"rRL" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"rRP" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/button/blast_door{ + id_tag = "security_sergeant_blastdoor"; + name = "Warden's Blastdoor"; + req_access = list("ACCESS_WARDEN"); + pixel_y = 24; + pixel_x = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"rRV" = ( +/obj/machinery/fusion_fuel_injector/mapped{ + dir = 1; + initial_id_tag = "aux_fusion_plant" + }, +/turf/simulated/floor/reinforced, +/area/vacant/prototype/engine) +"rRW" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining{ + id_tag = null; + name = "Port Auxiliary Storage"; + req_access = newlist() + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"rSg" = ( +/obj/wallframe_spawn/reinforced/polarized/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/crew_quarters/actor/stage) +"rSj" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/engine_smes) +"rSl" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/storage) +"rSm" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d1starboard) +"rSn" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"rSp" = ( +/obj/machinery/door/window/southleft{ + dir = 1; + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/door/window/southleft{ + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + id_tag = "xenobioa2"; + name = "Containment Blast Doors" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level2) +"rSx" = ( +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/corner, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"rSz" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/reagent_dispensers/water_cooler{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"rSA" = ( +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/engineering/atmos) +"rSI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"rSO" = ( +/turf/simulated/wall/r_wall/hull, +/area/medical/mentalhealth) +"rSU" = ( +/obj/structure/catwalk, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/structure/iv_stand, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"rSW" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/central_stairwell) +"rTa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"rTs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo) +"rTz" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Fourth Deck Substation"; + req_access = newlist(); + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/substation/fourthdeck) +"rTD" = ( +/obj/floor_decal/floordetail/edgedrain{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"rTE" = ( +/obj/machinery/shield_diffuser, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/door/airlock/external{ + autoset_access = 0; + frequency = 1331; + id_tag = "calypso_shuttle_outer"; + name = "Charon External Access"; + req_access = list(list("ACCESS_EXPEDITION_SHUTTLE")) + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/airlock) +"rTO" = ( +/obj/floor_decal/corner/red/bordercorner, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"rUf" = ( +/obj/machinery/door/airlock/mining{ + dir = 4; + id_tag = null; + name = "Supply Office"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"rUl" = ( +/obj/structure/sign/science_1{ + dir = 1; + pixel_y = -32 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"rUn" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"rUp" = ( +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"rUv" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/medical{ + name = "Medical Restroom" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/office) +"rUB" = ( +/obj/structure/lattice, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d3starboard) +"rUE" = ( +/obj/machinery/atmospherics/unary/tank/oxygen{ + dir = 2; + volume = 3200 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"rUI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"rUK" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"rUW" = ( +/obj/item/frame/apc, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/item/stack/tile/walnut{ + pixel_y = 19 + }, +/turf/simulated/floor/plating, +/area/vacant/bar) +"rVa" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"rVe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"rVf" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 5 + }, +/obj/machinery/sparker{ + id_tag = "engines-1"; + pixel_x = -24 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d3starboard) +"rVB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/glass/security{ + name = "Brig Wing" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway/port) +"rVJ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/grey/border, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"rVK" = ( +/obj/floor_decal/corner/red, +/obj/structure/table/steel, +/obj/item/reagent_containers/food/drinks/bottle/small/beer, +/obj/item/reagent_containers/food/drinks/bottle/small/beer{ + pixel_y = 3; + pixel_x = -6 + }, +/obj/item/reagent_containers/food/drinks/bottle/small/beer{ + pixel_y = 6; + pixel_x = 5 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"rVM" = ( +/obj/decal/cleanable/flour, +/turf/simulated/floor/plating, +/area/vacant/mess) +"rVO" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/glass/civilian{ + dir = 8; + name = "Engineer Bay Lobby" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/center) +"rVS" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos/cobed) +"rVT" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"rVY" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/expedition) +"rWe" = ( +/obj/machinery/door/airlock/maintenance{ + req_access = newlist() + }, +/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" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftport) +"rWg" = ( +/turf/simulated/open, +/area/maintenance/seconddeck/aftstarboard) +"rWi" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/table/rack, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"rWn" = ( +/obj/machinery/power/port_gen/pacman/mrs{ + anchored = 1 + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"rWp" = ( +/obj/floor_decal/corner/grey{ + dir = 9 + }, +/obj/structure/reagent_dispensers/water_cooler{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"rWt" = ( +/obj/structure/hygiene/drain/bath, +/turf/simulated/floor/pool, +/area/crew_quarters/sauna) +"rWw" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/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/door/airlock/glass/civilian{ + name = "Central Stairwell" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/central_stairwell) +"rWy" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/bed/padded, +/obj/item/bedsheet/green, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/bunk) +"rWz" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/seconddeck/port) +"rWD" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/firstdeck/foreport) +"rWJ" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"rWL" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"rWN" = ( +/obj/wallframe_spawn/reinforced/polarized/no_grille/regular, +/obj/structure/curtain{ + color = "#990099"; + name = "church curtain" + }, +/turf/simulated/floor/plating, +/area/chapel/main) +"rWO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"rWR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/bridgedeck/aft) +"rWV" = ( +/obj/machinery/power/generator{ + anchored = 1; + dir = 8 + }, +/obj/structure/cable/yellow, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"rWX" = ( +/obj/floor_decal/spline/fancy/black/corner, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"rWZ" = ( +/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/catwalk_plated, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"rXd" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"rXf" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar) +"rXh" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/device/scanner/gas, +/obj/item/device/scanner/gas, +/obj/item/device/scanner/plant, +/obj/item/device/scanner/health, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech) +"rXn" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"rXr" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"rXt" = ( +/obj/floor_decal/corner/green/bordercee, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"rXu" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"rXw" = ( +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled/monotile, +/area/assembly/office) +"rXK" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"rXM" = ( +/obj/floor_decal/corner/brown/mono, +/obj/machinery/computer/modular/preset/dock{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"rXW" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"rYg" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"rYz" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"rYC" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/obj/machinery/meter, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"rYJ" = ( +/obj/machinery/light, +/obj/machinery/computer/guestpass{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/flora/pottedplant/unusual, +/obj/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled, +/area/rnd/research) +"rYT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/cafe/upper) +"rYW" = ( +/obj/structure/closet/crate/freezer, +/obj/random/medical, +/obj/random/medical, +/obj/random/medical, +/obj/random/firstaid, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"rYX" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"rYZ" = ( +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"rZc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"rZd" = ( +/obj/structure/sign/warning/high_voltage{ + dir = 8 + }, +/turf/simulated/wall/prepainted, +/area/maintenance/solar/bridge_starboard) +"rZl" = ( +/obj/machinery/portable_atmospherics/canister/helium{ + start_pressure = 14999 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"rZr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"rZt" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/machinery/light, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"rZv" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"rZL" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/open, +/area/space) +"rZM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"rZQ" = ( +/obj/structure/girder, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"rZR" = ( +/obj/structure/table/woodentable, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/item/folder/red{ + pixel_y = 7; + pixel_x = -4 + }, +/obj/item/folder/red{ + pixel_x = 4 + }, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"rZU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sauna) +"rZZ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/starboard) +"sad" = ( +/obj/structure/cable/green{ + 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/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/canister) +"sae" = ( +/obj/structure/closet/emcloset/anchored, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/yellow/bordercorner, +/obj/machinery/camera/network/fourth_deck{ + dir = 8; + c_tag = "Fourth Deck - Aft Stairwell" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"sah" = ( +/obj/random/obstruction, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"sak" = ( +/obj/random_multi/single_item/space_rabbit, +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"sar" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"sas" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/floor_decal/corner/purple, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/storage2) +"sat" = ( +/obj/structure/table/rack, +/obj/item/storage/firstaid/adv{ + pixel_y = 10 + }, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/adv{ + pixel_y = -10 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/medical/equipstorage) +"saA" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/power/port_gen/pacman{ + sheets = 25 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"saI" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/button/alternate/door{ + id_tag = "MedbayER"; + pixel_y = 27; + pixel_x = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"saJ" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/pizzabox/margherita, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"saO" = ( +/obj/random/obstruction, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"saT" = ( +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/greengrid, +/area/engineering/gravitaional_generator) +"saX" = ( +/obj/structure/bed/sofa/m/brown, +/obj/floor_decal/carpet/red{ + dir = 1 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"sbe" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"sbo" = ( +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/lime/border{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lime/bordercorner2, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"sbp" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"sbq" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/corner/green/half, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"sbr" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/thirddeck/aftstarboard) +"sbs" = ( +/obj/floor_decal/industrial/traffic/corner{ + dir = 8; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/turf/simulated/floor/tiled/white, +/area/rnd/office) +"sbx" = ( +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/landmark{ + name = "JoinLateCryo" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/bridge) +"sbF" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/camera/network/hangar{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"sbG" = ( +/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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/thirddeck/center) +"sbJ" = ( +/obj/structure/bed/chair/rounded/yellow{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/yellow/bordercorner, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"sbL" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"sbP" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"sbT" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light/small, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/landmark{ + name = "JoinLateCyborg" + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"sbV" = ( +/obj/machinery/atmospherics/valve{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"sbX" = ( +/obj/structure/sign/warning/compressed_gas, +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d1port) +"sbY" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 8; + sort_type = "Research Director"; + name = "Research Director" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"scf" = ( +/obj/floor_decal/industrial/traffic{ + dir = 6; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/structure/bed/chair/office/purple, +/turf/simulated/floor/tiled/white, +/area/rnd/office) +"scj" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"sck" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "xenobioaqua"; + name = "Containment Blast Doors" + }, +/obj/machinery/door/window/southright, +/obj/machinery/door/window/southleft{ + dir = 1; + name = "Containment Pen"; + req_access = newlist() + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/water_cell) +"scs" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"scx" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 1 + }, +/obj/machinery/radio_beacon, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/seats_place) +"scz" = ( +/obj/structure/railing/mapped, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"scB" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"scE" = ( +/obj/machinery/stasis_cage, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"scO" = ( +/obj/floor_decal/techfloor, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/table/standard, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"scS" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"scU" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"scY" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"sdb" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/artifact, +/obj/machinery/anomaly_container, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell2) +"sdd" = ( +/obj/structure/table/steel, +/obj/item/storage/box/glasses/rocks, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"sdg" = ( +/obj/structure/table/woodentable_reinforced/mahogany/walnut, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"sdo" = ( +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "armory" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/sierra/armory/lobby) +"sdr" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"sdt" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"sdx" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/grey/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/grey/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/grey/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"sdy" = ( +/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/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Head of Security's Desk"; + departmentType = 5; + name = "Head of Security RC"; + pixel_x = 29 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"sdz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"sdE" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"sdG" = ( +/obj/machinery/space_heater/stationary/on{ + pixel_y = 30 + }, +/obj/structure/table/woodentable, +/obj/item/reagent_containers/glass/bucket/wood{ + pixel_y = 5 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/item/device/radio/intercom/department/security{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/breakroom) +"sdI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"sdS" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"sef" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/open, +/area/hallway/primary/firstdeck/central_stairwell) +"ses" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/armor/pcarrier/medium, +/obj/item/clothing/suit/armor/pcarrier/medium, +/obj/item/clothing/suit/armor/pcarrier/medium, +/obj/item/clothing/head/helmet, +/obj/item/clothing/head/helmet, +/obj/item/clothing/head/helmet, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/recharger/wallcharger{ + dir = 8; + pixel_x = 22 + }, +/obj/item/clothing/accessory/arm_guards, +/obj/item/clothing/accessory/arm_guards, +/obj/item/clothing/accessory/arm_guards, +/obj/item/clothing/accessory/leg_guards, +/obj/item/clothing/accessory/leg_guards, +/obj/item/clothing/accessory/leg_guards, +/obj/item/clothing/accessory/armband, +/obj/item/clothing/accessory/armband, +/obj/item/clothing/accessory/armband, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"seu" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"sew" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/machinery/camera/network/hangar, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"sez" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"seA" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"seC" = ( +/obj/structure/closet/l3closet/virology, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light_construct{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology) +"seF" = ( +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"seK" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"seP" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/canister) +"seZ" = ( +/obj/floor_decal/industrial/warning, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"sfh" = ( +/obj/machinery/space_heater, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/xenobio) +"sfr" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/landmark{ + name = "JoinLateCyborg" + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"sfu" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"sfH" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/staging) +"sfM" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/table/steel_reinforced, +/obj/machinery/cell_charger, +/obj/item/cell/high, +/obj/item/cell/high, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"sfO" = ( +/obj/machinery/door/window/northright{ + name = "Armory Desk"; + req_access = newlist() + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "armory_shutters"; + name = "Armory Desk" + }, +/obj/paint_stripe/red, +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf/steel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/security/sierra/armory) +"sfU" = ( +/obj/machinery/flasher{ + pixel_x = -32; + pixel_y = -32 + }, +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 1; + pixel_y = -22 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"sfW" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/storage/firstaid/surgery, +/turf/simulated/floor/plating, +/area/vacant/infirmary) +"sfZ" = ( +/obj/machinery/suit_storage_unit/security/alt, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/suits) +"sgf" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"sgn" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/hull, +/area/chapel/mortuary) +"sgo" = ( +/obj/structure/catwalk, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"sgt" = ( +/obj/machinery/suit_storage_unit/explorer, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/eva) +"sgv" = ( +/obj/structure/table/steel, +/obj/item/paper_bin, +/obj/item/folder/red, +/obj/item/pen, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Security"; + departmentType = 5; + pixel_y = -32 + }, +/obj/item/device/taperecorder, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 8; + pixel_x = 14 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"sgw" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"sgz" = ( +/obj/floor_decal/techfloor/orange, +/obj/machinery/conveyor{ + dir = 4; + id = "compactor" + }, +/obj/machinery/pile_ripper{ + active_power_usage = 300 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/compactor) +"sgD" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"sgF" = ( +/obj/structure/closet/walllocker{ + pixel_y = -28 + }, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/suit/bio_suit/anomaly, +/obj/item/clothing/mask/breath, +/obj/item/clothing/head/bio_hood/anomaly, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"sgG" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"sgL" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/starboard) +"sgN" = ( +/obj/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/cola{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/docking) +"sgV" = ( +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet, +/area/vacant/dormintories) +"sgZ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/gym) +"sha" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/item/storage/secure/safe{ + pixel_x = 32 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Head of Security"; + dir = 8 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"shf" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"shn" = ( +/obj/floor_decal/techfloor/orange, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/gravity_generator/main/station, +/turf/simulated/floor/greengrid, +/area/engineering/gravitaional_generator) +"sht" = ( +/obj/structure/flora/pottedplant/thinbush, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lightgrey/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lightgrey/bordercorner2, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"shv" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/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" + }, +/obj/machinery/door/airlock/medical/mortus{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/mortuary) +"shy" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/space, +/area/space) +"shE" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"shF" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"shG" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"shL" = ( +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"shP" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/center) +"shR" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/open, +/area/space) +"shU" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/carpet, +/area/crucian_hangar/start) +"shV" = ( +/obj/structure/cable/green{ + 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/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"shX" = ( +/obj/structure/sign/directions/engineering{ + pixel_x = -32; + pixel_y = -1 + }, +/obj/structure/sign/directions/supply{ + pixel_y = -8; + pixel_x = -32 + }, +/turf/simulated/open, +/area/hallway/primary/seconddeck/aft_stairwell) +"shZ" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + name = "Xenobotany Lab Access"; + id_tag = "xenobotany_access_inner" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/xenobiology/xenoflora) +"sij" = ( +/obj/machinery/computer/ship/engines{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"siw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/bluespace/chamber) +"siy" = ( +/obj/machinery/door/airlock/research{ + name = "Analysis Lab" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/scan) +"siB" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"siD" = ( +/obj/structure/railing/mapped, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"siF" = ( +/obj/machinery/button/toggle/valve/nacelle/third{ + pixel_x = -6; + pixel_y = 25 + }, +/obj/machinery/button/toggle/valve/nacelle/first{ + pixel_x = -6; + pixel_y = 34 + }, +/obj/machinery/button/toggle/valve/nacelle/fourth{ + pixel_x = 6; + pixel_y = 25 + }, +/obj/machinery/button/toggle/valve/nacelle/second{ + pixel_x = 6; + pixel_y = 34 + }, +/obj/structure/bed/chair/padded/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/fuelbay) +"siT" = ( +/obj/machinery/space_heater, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"siU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/green/bordercorner, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"siV" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"sjc" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/b_green/bordercorner, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"sjf" = ( +/obj/structure/table/standard, +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/machinery/computer/atmoscontrol/laptop{ + monitored_alarm_ids = list("petrov1","petrov2","petrov3"); + req_access = list("ACCESS_PETROV_HELM") + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"sju" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/civilian{ + name = "Restroom" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/head/deck3) +"sjy" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 1; + pixel_y = -22 + }, +/turf/simulated/floor/reinforced, +/area/turret_protected/ai_maint) +"sjA" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod5/station) +"sjM" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/engineering/fuelbay) +"sjN" = ( +/obj/random/junk, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"sjQ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/starboard) +"sjU" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d1port) +"sjZ" = ( +/obj/structure/sign/kiddieplaque{ + pixel_x = 32; + pixel_y = 0 + }, +/obj/machinery/tele_projector{ + dir = 6 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_teleport) +"skb" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/scan) +"ske" = ( +/obj/machinery/navbeacon/sierra/SD_fore1, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = -24; + dir = 1 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/lime/bordercorner, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"skh" = ( +/obj/floor_decal/corner/green/diagonal, +/obj/structure/table/glass, +/obj/item/modular_computer/laptop/preset/records{ + icon_state = "laptop-open"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/decal/cleanable/cobweb{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"skl" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"skm" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/infirmreception) +"skp" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"skv" = ( +/obj/machinery/door/airlock/engineering{ + name = "Auxiliary Power Storage"; + req_access = newlist(); + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/auxpower) +"sky" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"skA" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/bed/sauna_bench/middle/north, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sauna) +"skE" = ( +/obj/floor_decal/corner/yellow/half, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/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" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/suplocker_room) +"skJ" = ( +/obj/machinery/smartfridge/drying_rack{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/green/border{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics/third_deck_storage) +"skO" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/door/airlock/highsecurity{ + name = "AI Upload" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/airlock_brace{ + req_access = list("ACCESS_AI_UPLOAD") + }, +/obj/machinery/door/blast/regular{ + id_tag = "ai_upload_blast"; + name = "AI Upload" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"skP" = ( +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 4; + target_pressure = 15000 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"skT" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"skW" = ( +/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/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/center) +"slf" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/floor_decal/corner/red, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"sll" = ( +/obj/structure/hygiene/toilet{ + pixel_y = 5 + }, +/turf/simulated/floor/tiled/freezer, +/area/vacant/cargo) +"slm" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/locker) +"sln" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/ce) +"slo" = ( +/obj/machinery/portable_atmospherics/canister/empty/oxygen, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"slu" = ( +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"slD" = ( +/obj/floor_decal/corner/black/full, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/command/bsa) +"slE" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/danger{ + dir = 5 + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar) +"slF" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/titanium, +/area/shuttle/petrov/cell1) +"slH" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"slL" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/xenobio) +"slS" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d3port) +"slW" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/window/brigdoor/northleft{ + name = "Security Checkpoint" + }, +/obj/machinery/door/window/southleft{ + autoset_access = 0; + name = "Security Checkpoint" + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "hangar_checkpoint_shutters"; + name = "Hangar Deck Checkpoint Shutters"; + opacity = 0 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf/steel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/security/sierra/dockcheck) +"smh" = ( +/obj/fluid_mapped, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"smr" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"smt" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/starboard) +"smx" = ( +/obj/machinery/computer/modular/preset/security, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"smH" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"smL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/sortjunction/flipped{ + sort_type = "Drone Station"; + name = "Drone Station" + }, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"smZ" = ( +/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" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/aft_stairwell) +"sna" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/seconddeck) +"snt" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/sleep/cryo/bridge) +"snB" = ( +/obj/structure/table/standard, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"snH" = ( +/obj/structure/bed/sofa/r/beige{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"snI" = ( +/obj/structure/coatrack{ + pixel_x = -6; + pixel_y = 22 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood/corner, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"snP" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/prepainted, +/area/hallway/primary/firstdeck/fore) +"snS" = ( +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/foreport) +"sob" = ( +/obj/machinery/vending/games{ + icon_state = "games" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"sof" = ( +/obj/floor_decal/carpet/orange, +/obj/floor_decal/carpet/orange{ + dir = 4 + }, +/obj/floor_decal/carpet/orange{ + dir = 6 + }, +/obj/structure/reagent_dispensers/beerkeg, +/obj/item/reagent_containers/food/drinks/glass2/mug, +/turf/simulated/floor/carpet/orange, +/area/crew_quarters/heads/office/ce/cobed) +"sor" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/assembly/robotics) +"sou" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/structure/bed/chair/rounded/blue{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"soD" = ( +/obj/floor_decal/corner/darkblue/full, +/obj/floor_decal/corner/darkblue/full, +/obj/floor_decal/corner/black/bordercorner{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/floor_decal/corner/red/bordercorner2, +/obj/floor_decal/corner/red, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"soE" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 8 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3starboard) +"soJ" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"soM" = ( +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"soN" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "fd_starboard_pump" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"soQ" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"soR" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"soS" = ( +/obj/structure/catwalk, +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/open, +/area/space) +"soV" = ( +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"soZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_sergeant_blastdoor"; + name = "Warden's Blastdoor" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/security{ + name = "Security Maintenance" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/sergeant) +"spe" = ( +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"spg" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/engine_setup/coolant_canister, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"spi" = ( +/obj/structure/table/woodentable, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/item/paper_bin, +/obj/item/pen{ + pixel_x = -1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"spk" = ( +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "centcom_shuttle_dock_sensor"; + pixel_x = -24 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "centcom_shuttle_dock_pump" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"spm" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"sps" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"spC" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals_central6, +/obj/machinery/navbeacon/sierra/SD_afthallway1, +/mob/living/bot/cleanbot{ + name = "Balto"; + will_patrol = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"spO" = ( +/obj/structure/bed/chair/padded/green{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black, +/obj/machinery/media/music_writer{ + pixel_y = -27 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"spV" = ( +/obj/floor_decal/industrial/loading, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "hop_road_shutters"; + name = "HoP Line's Shutters"; + opacity = 0 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/hop) +"spW" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics/third_deck_storage) +"sqb" = ( +/obj/floor_decal/corner/paleblue/full, +/obj/structure/closet/cabinet, +/obj/item/book/manual/medical_diagnostics_manual, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/cmo/cobed) +"sqc" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"sqg" = ( +/obj/structure/foamedmetal, +/turf/simulated/floor/plating, +/area/crew_quarters/visitors) +"sqj" = ( +/obj/machinery/door/airlock/external/bolted{ + frequency = 1380; + id_tag = "escape_pod_1_hatch"; + name = "Escape Pod One Hatch" + }, +/obj/machinery/shield_diffuser, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod1/station) +"sqm" = ( +/obj/structure/stairs/north, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"sqq" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"sqv" = ( +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"sqy" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "firing_range_outer"; + name = "Firing Range Airlock" + }, +/obj/machinery/access_button/airlock_exterior{ + desc = "Security access required."; + dir = 1; + master_tag = "firing_range"; + name = "exterior access button"; + pixel_x = -24; + pixel_y = 10; + req_access = list("ACCESS_EXTERNAL","ACCESS_SECURITY") + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"sqA" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/table/woodentable/ebony, +/obj/item/stack/medical/splint{ + pixel_y = 12; + pixel_x = -4 + }, +/obj/item/stack/medical/bruise_pack{ + pixel_y = -7; + pixel_x = -4 + }, +/obj/item/folder/white{ + pixel_x = 6 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"sqD" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/floor/plating, +/area/vacant/infirmary) +"sqF" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"sqQ" = ( +/obj/structure/table/standard, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/item/stack/package_wrap/cargo_wrap, +/obj/item/hand_labeler, +/obj/item/device/destTagger, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/floor_decal/corner/yellow/mono, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"sqV" = ( +/turf/simulated/wall/prepainted, +/area/vacant/bar) +"sra" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/actor) +"srf" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"srn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"srp" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"srr" = ( +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"sru" = ( +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"srx" = ( +/obj/machinery/seed_storage/garden{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/green/border{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"srL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/sleeper{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod2/station) +"srV" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"srX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"srY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/civilian{ + name = "Private Room"; + id_tag = "bar_private_room_1"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/cafe) +"ssk" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/carpet/green, +/obj/floor_decal/carpet/green{ + dir = 4 + }, +/obj/floor_decal/carpet/green{ + dir = 6 + }, +/turf/simulated/floor/carpet/green, +/area/medical/mentalhealth/therapyroom) +"ssm" = ( +/obj/structure/table/standard, +/obj/item/hand_labeler, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/locker) +"ssq" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"sst" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/blue/border, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"ssv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"ssx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"ssI" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/industrial/danger, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"ssJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"ssS" = ( +/obj/structure/table/woodentable/mahogany, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/reagent_containers/food/snacks/grown/harebell, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"ssT" = ( +/obj/machinery/navbeacon/sierra/FD_aftcentralhallway1, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck - Aft Hallway Chemistry"; + dir = 1 + }, +/mob/living/bot/cleanbot{ + name = "Monro"; + will_patrol = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"sta" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"std" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"stn" = ( +/obj/machinery/sparker{ + id_tag = "Isocell1"; + pixel_x = -18 + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell1) +"sto" = ( +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"stp" = ( +/obj/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"sts" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"stv" = ( +/obj/item/target/syndicate, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"stw" = ( +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/garden_room) +"stz" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/bunk) +"stB" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/no_grille, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/storage/eva) +"stC" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"stI" = ( +/obj/floor_decal/corner/purple/bordercorner, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/floor_decal/industrial/traffic{ + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/assembly/office) +"stL" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/safe_room/firstdeck) +"stN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"stR" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"sul" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"sup" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"sur" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft_stairwell) +"sut" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/security{ + dir = 4; + name = "Guards' Bathroom" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/breakroom) +"suy" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/aft) +"suB" = ( +/obj/floor_decal/borderfloor{ + color = null; + dir = 8 + }, +/obj/floor_decal/corner/blue/border{ + dir = 8 + }, +/obj/machinery/sleeper/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"suH" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/table/woodentable_reinforced/mahogany, +/obj/item/device/flashlight/lamp/lava/cyan{ + pixel_y = -5; + pixel_x = 4 + }, +/turf/simulated/floor/carpet/magenta, +/area/crew_quarters/cafe) +"suJ" = ( +/obj/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/black/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"suL" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/abandoned_hydroponics) +"suO" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/port) +"suP" = ( +/obj/structure/table/woodentable/maple, +/obj/item/device/flashlight/lantern, +/obj/machinery/light, +/obj/floor_decal/carpet/purple, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/obj/floor_decal/carpet/purple{ + dir = 6 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/office) +"suY" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/grey, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security{ + name = "Interrogation" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/sierra/interrogation) +"suZ" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"sva" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"svc" = ( +/obj/machinery/shieldwallgen, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"sve" = ( +/obj/structure/table/woodentable/maple, +/obj/item/material/ashtray/glass, +/obj/item/storage/fancy/smokable/luckystars{ + pixel_y = 5; + pixel_x = -2 + }, +/obj/item/storage/fancy/matches/matchbox, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"svl" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"svv" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"svy" = ( +/obj/shuttle_landmark/sierra/deck1/crucian, +/turf/space, +/area/space) +"svE" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"svN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 9 + }, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"svX" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"swe" = ( +/obj/structure/dispenser/oxygen, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/eva) +"swf" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/table/marble, +/obj/machinery/microwave{ + pixel_y = 4 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"swn" = ( +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 8; + name = "Forensic Office"; + sort_type = "Forensic Office" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"swy" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"swA" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/virology, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/item/taperoll/engineering/applied, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology/lab) +"swB" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/port) +"swD" = ( +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"swH" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "AI Outer Ring Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/turret_protected/ai_maint) +"swN" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"swV" = ( +/obj/machinery/door/blast/shutters/open{ + name = "Supply Desk Shutters"; + id_tag = "sup_office"; + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/quartermaster/office) +"sxb" = ( +/obj/machinery/hologram/holopad/longrange, +/obj/floor_decal/corner/darkblue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"sxf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/power/apc/charon{ + dir = 8; + name = "west bump"; + pixel_x = -25; + req_access = list(list("ACCESS_EXPLORER","ACCESS_ENGINEERING")) + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_r) +"sxg" = ( +/obj/structure/bed/sofa/l/beige, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Bar - Main Hall"; + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/cafe) +"sxq" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"sxv" = ( +/obj/floor_decal/corner/black{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"sxz" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/reagent_containers/glass/bucket, +/obj/floor_decal/corner/purple{ + pixel_y = 1 + }, +/obj/machinery/light_switch{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/janitor) +"sxB" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/airlock) +"sxF" = ( +/obj/structure/disposalpipe/segment, +/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/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/rnd/entry) +"sxH" = ( +/obj/machinery/camera/network/engine{ + c_tag = "Engine - R-UST - Control"; + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"sxI" = ( +/obj/structure/table/standard, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the prototype exhaust."; + id_tag = "prototype_exhaust"; + name = "Chamber Exhaust"; + pixel_x = -5; + pixel_y = 8 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the observation shutters."; + id_tag = "fusion_observation"; + name = "Chamber Observation"; + pixel_x = 5; + pixel_y = 8 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the engine containment doors."; + id_tag = "prototype_chamber_blast"; + name = "Chamber Containment"; + pixel_y = -3 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"sxJ" = ( +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d3port) +"sxK" = ( +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"sxM" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/cobed) +"sxS" = ( +/obj/structure/closet/l3closet/scientist, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"sxT" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell2) +"sxU" = ( +/obj/structure/bed/padded, +/obj/floor_decal/corner/grey/full, +/obj/item/bedsheet/blue, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"sxV" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/flora/ausbushes/sunnybush, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/docking) +"sxZ" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"syd" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry2) +"syi" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/structure/railing/mapped, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft_stairwell) +"syj" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/civilian{ + name = "Janitor Closet" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/janitor) +"syq" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/command/bsa) +"syr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/handrail, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"syu" = ( +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/monotile, +/area/assembly/office) +"syv" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/decal/cleanable/dirt, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"syx" = ( +/obj/machinery/vitals_monitor, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery/second) +"syB" = ( +/obj/structure/flora/pottedplant/flower, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"syI" = ( +/obj/machinery/beehive, +/obj/floor_decal/corner/green/half{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"syJ" = ( +/obj/structure/sign/warning/secure_area, +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/hallway) +"syK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"syO" = ( +/obj/structure/table/rack, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/brown/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"syP" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/space, +/area/space) +"syQ" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/rods/fifty, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"syU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"szf" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Fore Hallway"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"szj" = ( +/obj/structure/table/standard, +/obj/item/storage/box/botanydisk, +/obj/floor_decal/corner/green/half{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"szk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai_cyborg_upload) +"szp" = ( +/obj/machinery/vending/coffee, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/office) +"szq" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/largecrate, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"szs" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"szv" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + name = "Cryo Storage" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/sleep/cryo) +"szw" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/eva) +"szH" = ( +/obj/floor_decal/borderfloorblack, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/bunk) +"szJ" = ( +/obj/structure/bed/chair/comfy/purple{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"szK" = ( +/obj/structure/sign/warning/airlock{ + dir = 1; + pixel_y = -32 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lightgrey/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"szN" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/structure/sign/warning/fire{ + dir = 1; + pixel_y = -40 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/access_button{ + command = "cycle_exterior"; + frequency = 1379; + master_tag = "incinerator_access_control"; + name = "Incinerator airlock control"; + pixel_x = 24; + pixel_y = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/incinerator) +"szP" = ( +/obj/floor_decal/corner/yellow/three_quarters, +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/camera/network/supply{ + c_tag = "Supply Office - Supply locker room"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/suplocker_room) +"szW" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/random/hostile/xenobio, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level2) +"szX" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"szZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/tank{ + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "CO22p_out"; + initialize_directions = 1; + internal_pressure_bound = 1000; + internal_pressure_bound_default = 1000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/window/boron_reinforced{ + dir = 4 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d3port) +"sAc" = ( +/obj/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/random/storage, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"sAf" = ( +/obj/structure/bed/sofa/r/black{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"sAs" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/substation/bridgedeck) +"sAu" = ( +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d3port) +"sAy" = ( +/obj/machinery/smartfridge{ + opacity = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/floor_decal/corner/green/three_quarters{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"sAA" = ( +/obj/floor_decal/industrial/hatch/red, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/mortuary) +"sAG" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/aftport) +"sAK" = ( +/obj/fluid_mapped, +/obj/item/clothing/mask/snorkel, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"sAM" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation/second) +"sAP" = ( +/obj/structure/flora/pottedplant/minitree, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"sAS" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"sAX" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/vacant/cargo) +"sBe" = ( +/obj/structure/catwalk, +/obj/structure/sign/warning/fall{ + pixel_y = 32 + }, +/turf/simulated/open, +/area/rnd/xenobiology/level1) +"sBz" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/constructable_frame/machine_frame, +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology/lab) +"sBA" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"sBG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"sBO" = ( +/obj/structure/closet/radiation, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"sBQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"sBR" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"sBY" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + name = "Actor's Room" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/actor) +"sBZ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft) +"sCf" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"sCh" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"sCl" = ( +/turf/simulated/floor/reinforced/oxygen, +/area/engineering/atmos) +"sCm" = ( +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"sCv" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "d3portnacelle" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"sCx" = ( +/obj/machinery/camera/all/command{ + c_tag = "AI Core - Fore Port Access"; + dir = 8 + }, +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 1; + pixel_y = -22 + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"sCB" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"sCP" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/medical, +/obj/structure/closet/medical_wall{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/white, +/area/vacant/infirmary) +"sCT" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + name = "Lounge" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/lounge) +"sCV" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/vending/cigarette, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"sDd" = ( +/obj/structure/mopbucket, +/obj/item/mop, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 6 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/firstdeck/centralport) +"sDf" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"sDj" = ( +/obj/structure/bed/chair/wood/maple{ + dir = 4 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/office) +"sDk" = ( +/obj/machinery/door/window/brigdoor/westright{ + dir = 2; + id_tag = "prison_lobby_window" + }, +/obj/machinery/door/window/brigdoor/westleft{ + dir = 1; + autoset_access = 0 + }, +/obj/paint_stripe/red, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/blast/shutters/open{ + name = "Prison Lobby Windows Shutters"; + id_tag = "prison_lobby_window" + }, +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf/steel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/security/sierra/brig) +"sDn" = ( +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/corner/purple/bordercorner, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"sDo" = ( +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_y = 28 + }, +/obj/landmark/start{ + name = "Research Director" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"sDs" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"sDx" = ( +/obj/structure/railing/mapped{ + dir = 4; + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + dir = 1; + color = "#8c911d" + }, +/turf/simulated/floor/plating, +/area/rnd/misc_lab) +"sDz" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"sDE" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cargo_r) +"sDG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"sDH" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/mining{ + name = "Cargo Prep" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/suplocker_room) +"sDI" = ( +/obj/machinery/atmospherics/unary/vent_pump/tank{ + dir = 8; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "n2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/nitrogen, +/area/engineering/atmos) +"sDJ" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"sDM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"sDP" = ( +/obj/structure/table/woodentable/mahogany, +/obj/item/flora/pottedplantsmall/leaf{ + pixel_y = 5 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"sDT" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/blue/diagonal, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/item/device/flashlight/lamp/green{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/paper/sierra/medical_blood, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/glass{ + pixel_y = 7; + pixel_x = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"sEd" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/solar{ + id = "auxsolarstrbbridge"; + name = "Bridge Auxiliary Solar Array" + }, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/reinforced, +/area/solar/bridge_starboard) +"sEe" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Escape Pods - Starboard - Dock"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"sEf" = ( +/obj/structure/hygiene/toilet{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head/deck3) +"sEj" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"sEl" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 1; + icon_state = "map" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/fuelbay) +"sEn" = ( +/turf/simulated/wall/prepainted, +/area/medical/mentalhealth/therapyroom) +"sEr" = ( +/obj/floor_decal/corner/purple/half{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"sEs" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway/aft) +"sEt" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/engineering{ + name = "First Deck Substation"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/substation/firstdeck) +"sEy" = ( +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"sED" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"sEG" = ( +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cargo_l) +"sEP" = ( +/obj/item/material/knife/kitchen/cleaver, +/obj/structure/foamedmetal, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/foreport) +"sEU" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"sFb" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"sFc" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"sFe" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/external/glass/bolted/cycling{ + id_tag = "firing_range_inner"; + name = "Firing Range Airlock" + }, +/obj/machinery/access_button/airlock_interior{ + master_tag = "firing_range"; + name = "interior access button"; + pixel_x = -24; + pixel_y = -10; + req_access = list(list("ACCESS_SECURITY","ACCESS_EXTERNAL")) + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"sFf" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/structure/table/marble, +/obj/item/book/manual/chef_recipes, +/turf/simulated/floor/tiled/white, +/area/security/sierra/prison) +"sFg" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell3) +"sFm" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"sFs" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"sFu" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"sFz" = ( +/obj/floor_decal/industrial/danger{ + dir = 5 + }, +/obj/structure/closet/walllocker{ + pixel_x = 28 + }, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/obj/item/storage/backpack/dufflebag, +/obj/item/storage/backpack/dufflebag, +/obj/item/storage/backpack/dufflebag, +/obj/item/storage/backpack/dufflebag, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/armory) +"sFR" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"sFS" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"sFU" = ( +/obj/floor_decal/corner/lime/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"sFX" = ( +/obj/structure/largecrate, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"sGb" = ( +/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/white, +/area/medical/ward) +"sGe" = ( +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/artbru, +/obj/item/reagent_containers/food/drinks/cans/artbru, +/obj/item/reagent_containers/food/drinks/cans/speer, +/obj/item/reagent_containers/food/drinks/cans/speer, +/obj/item/reagent_containers/food/drinks/cans/speer, +/obj/item/storage/box/glasses/square, +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/obj/floor_decal/carpet/blue2{ + dir = 8 + }, +/obj/floor_decal/carpet/blue2{ + dir = 1 + }, +/obj/floor_decal/carpet/blue2{ + dir = 9 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/garden_room) +"sGg" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"sGv" = ( +/obj/structure/stairs/west, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/central_stairwell) +"sGB" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/blast_door{ + id_tag = "xenobio4"; + name = "Containment Blast Doors"; + pixel_x = -4; + req_access = list("ACCESS_RESEARCH") + }, +/obj/machinery/button/blast_door{ + id_tag = "xenobio4_vent"; + name = "Cell 4 Vent"; + pixel_x = 8; + req_access = list("ACCESS_RESEARCH") + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"sGC" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/table/woodentable_reinforced/mahogany, +/obj/item/material/ashtray/bronze{ + pixel_y = -6; + pixel_x = 6 + }, +/turf/simulated/floor/carpet/green, +/area/crew_quarters/cafe) +"sGF" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"sGG" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/airlock) +"sGM" = ( +/obj/random/trash, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"sGP" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"sGW" = ( +/obj/structure/table/standard, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/item/towel/random, +/obj/item/towel/random, +/obj/item/towel/random, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/storage/box/detergent, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/prison) +"sGZ" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/development) +"sHd" = ( +/obj/machinery/status_display/supply_display, +/turf/simulated/wall/prepainted, +/area/hallway/primary/fourthdeck/aft_stairwell) +"sHi" = ( +/obj/structure/cable/green{ + 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/landmark{ + name = "lightsout" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/aft) +"sHm" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/forestarboard) +"sHp" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"sHs" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/aft_stairwell) +"sHv" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"sHw" = ( +/obj/machinery/door/window/brigdoor/eastleft{ + dir = 2; + name = "Petrov Security Desk" + }, +/obj/machinery/door/window/brigdoor/westright{ + dir = 1; + name = "Petrov Security Desk" + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "concheckwindow2"; + name = "Research Checkpoint Shutters"; + opacity = 0 + }, +/obj/paint/nt_white, +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf/steel{ + dir = 4 + }, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/plating, +/area/shuttle/petrov/security) +"sHD" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"sHE" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/command{ + name = "Bridge Access" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/nano) +"sHG" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/tech_supply, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"sHU" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"sIf" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"sIg" = ( +/obj/structure/closet{ + name = "Prisoner's Locker" + }, +/obj/item/clothing/head/soft/orange, +/obj/item/clothing/head/soft/orange, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/prison) +"sIh" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level2) +"sIi" = ( +/obj/floor_decal/corner/green/half{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"sIl" = ( +/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/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"sIm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa/high_sec) +"sIo" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/alarm/monitor/isolation/xenobio{ + alarm_id = "xenobio3_alarm"; + dir = 8; + name = "Xenobiology Third Xenopen"; + pixel_x = 23 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"sIq" = ( +/obj/structure/table/glass, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"sIr" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"sIs" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/green/border{ + dir = 5 + }, +/obj/machinery/button/blast_door{ + id_tag = "vir_blast_window"; + name = "Virology windows"; + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"sIt" = ( +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/bridge/storage) +"sIv" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Xenoflora Lab Maintenance"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/misc_lab) +"sIA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue) +"sIB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"sID" = ( +/obj/structure/bed/sofa/m/teal{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"sIK" = ( +/obj/machinery/camera/all/command{ + c_tag = "AI Core - Entry"; + dir = 1 + }, +/obj/machinery/turretid/stun{ + check_synth = 1; + name = "AI Entry Chamber turret control"; + pixel_x = 0; + pixel_y = -32; + control_area = list(/area/turret_protected/ai_teleport) + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/turret_protected/ai_teleport) +"sIL" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"sIN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/random/snack, +/turf/simulated/floor/wood/walnut, +/area/vacant/gambling) +"sIR" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"sIS" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck - Fore Hallway"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"sIV" = ( +/obj/decal/cleanable/blood/oil, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"sIW" = ( +/obj/structure/bed/chair/comfy/purple{ + dir = 4 + }, +/obj/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled, +/area/rnd/office) +"sJb" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border, +/obj/floor_decal/corner/grey/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/grey/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"sJv" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"sJC" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"sJE" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + id_tag = "xenobio1"; + name = "Containment Blast Doors" + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level1) +"sJI" = ( +/obj/structure/railing/mapped, +/obj/machinery/cryopod, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/central_stairwell) +"sJJ" = ( +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/industrial/danger/corner, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"sJQ" = ( +/obj/machinery/door/window/brigdoor/northleft{ + name = "thruster vent access"; + req_access = newlist() + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/machinery/door/blast/regular{ + id_tag = "ThrusterVents"; + name = "Thruster Blast Door" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"sJU" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"sJY" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/security) +"sKa" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"sKf" = ( +/obj/structure/table/standard, +/obj/item/device/camera, +/obj/item/hand_labeler{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/item/pen{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"sKi" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"sKn" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"sKr" = ( +/obj/structure/catwalk, +/turf/space, +/area/space) +"sKu" = ( +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 4 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"sKx" = ( +/turf/simulated/wall/ocp_wall, +/area/engineering/engine_room) +"sKy" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/guppy_hangar/start) +"sKC" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/corner/green/three_quarters{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"sKD" = ( +/obj/structure/table/rack, +/obj/item/device/radio{ + pixel_y = 9; + pixel_x = 6 + }, +/obj/item/device/radio{ + pixel_y = 2; + pixel_x = 1 + }, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/turf/simulated/floor/tiled, +/area/rnd/locker) +"sKE" = ( +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"sKH" = ( +/obj/machinery/door/airlock/medical{ + id_tag = "sierra_surgery2"; + name = "Operating Room 2"; + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/holosign/surgery{ + dir = 4; + id_tag = "sierra_surgery2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery/second) +"sKJ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"sKM" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"sKN" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/grey/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"sKQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"sKT" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"sKW" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/light/small, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/substation/seconddeck) +"sKX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/sleep/cryo/south) +"sLe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/structure/closet/l3closet/scientist, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/power) +"sLg" = ( +/turf/simulated/wall/prepainted, +/area/vacant/dormintories) +"sLh" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/exploration) +"sLl" = ( +/obj/floor_decal/corner/lime/border{ + dir = 6 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 1 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"sLq" = ( +/obj/structure/table/standard, +/obj/random/snack, +/obj/random/snack, +/obj/random/smokes, +/obj/random/clipboard, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/floor_decal/corner/beige/diagonal, +/obj/floor_decal/corner/brown/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/vacant/dormintories) +"sLu" = ( +/obj/structure/closet/emcloset, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"sLE" = ( +/obj/structure/table/standard, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/pizzabox/vegetable{ + pixel_y = 12 + }, +/obj/structure/sign/warning/smoking{ + dir = 8; + pixel_x = 33 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/office) +"sLI" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/bridgedeck/port) +"sLL" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techmaint, +/area/tcommsat/storage) +"sLM" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"sLT" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "ai_starboard_inner"; + name = "Engineering External Access" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftport) +"sLV" = ( +/obj/structure/bed/chair/office/comfy/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/heads/captain/secret_room) +"sMd" = ( +/obj/machinery/door/airlock/civilian{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/garden_room) +"sMe" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall/hull, +/area/command/bsa) +"sMf" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/navbeacon/sierra/FD_forehallway_starboard, +/turf/simulated/floor/tiled, +/area/security/brig) +"sMj" = ( +/obj/floor_decal/corner/black/full, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/undies_wardrobe, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos/cobed) +"sMp" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump{ + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "o23p_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d1starboard) +"sMw" = ( +/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" + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"sMx" = ( +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "eng3"; + name = "First Deck Starboard Access"; + pixel_y = 21 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/thruster/d1starboard) +"sMy" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 10 + }, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"sMH" = ( +/obj/floor_decal/corner/purple/border, +/obj/item/stool/padded, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/exploration) +"sMQ" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/sleep/cryo/thirddeck) +"sMR" = ( +/obj/structure/table/rack, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"sMW" = ( +/obj/structure/table/glass, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"sMY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 4 + }, +/obj/structure/sign/warning/pods/south{ + dir = 8; + pixel_x = 32 + }, +/obj/floor_decal/borderfloorblack/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/danger/corner, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"sNa" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"sNg" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"sNi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/foreport) +"sNt" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/atmos) +"sNB" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/structure/table/standard{ + name = "plastic table frame" + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/random_multi/single_item/boombox, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"sNE" = ( +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"sNM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/medical/virology/lab) +"sNN" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"sNP" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"sNS" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"sNT" = ( +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/vending/generic, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"sNV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"sNW" = ( +/obj/item/storage/toolbox/mechanical, +/obj/structure/table/steel, +/obj/item/device/radio/announcer/subspace, +/obj/machinery/power/apc/hyper{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"sNZ" = ( +/obj/paint_stripe/nt_red, +/obj/paint/nt_white, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod1/station) +"sOd" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"sOi" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/crew_quarters/commissary) +"sOk" = ( +/obj/structure/reagent_dispensers/water_cooler{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/sleep/cryo/south) +"sOJ" = ( +/obj/structure/table/glass, +/obj/machinery/dnaforensics, +/obj/machinery/recharger/wallcharger{ + dir = 4; + pixel_x = -22 + }, +/obj/floor_decal/borderfloorwhite{ + dir = 9 + }, +/obj/floor_decal/corner/blue/border{ + dir = 9 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/forensic/lab) +"sON" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/reinforced, +/area/turret_protected/ai_maint) +"sOO" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"sPa" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/blue{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border, +/obj/item/paper_bin, +/obj/item/stamp/cmo, +/obj/item/sticky_pad/random, +/obj/item/pen, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"sPn" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"sPo" = ( +/obj/decal/cleanable/cobweb, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/button/blast_door{ + id_tag = "cChamber1pV"; + name = "Third Deck Starboard Chamber Vent"; + pixel_x = -6; + pixel_y = 25 + }, +/obj/machinery/button/blast_door{ + id_tag = "cChamber3pV"; + name = "First Deck Starboard Chamber Vent"; + pixel_x = -6; + pixel_y = 34 + }, +/obj/machinery/button/blast_door{ + id_tag = "cChamber4pV"; + name = "First Deck Port Chamber Vent"; + pixel_x = 6; + pixel_y = 25 + }, +/obj/machinery/button/blast_door{ + id_tag = "cChamber2pV"; + name = "Third Deck Port Chamber Vent"; + pixel_x = 6; + pixel_y = 34 + }, +/obj/machinery/button/ignition{ + id_tag = "engines"; + pixel_x = 16; + pixel_y = 29 + }, +/obj/machinery/computer/ship/engines{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/fuelbay) +"sPq" = ( +/obj/machinery/optable, +/obj/floor_decal/corner/grey_alt{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/red, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/white, +/area/assembly/robotics) +"sPt" = ( +/turf/simulated/wall/prepainted, +/area/bridge/meeting_room) +"sPu" = ( +/obj/machinery/navbeacon/sierra/FD_aftcentralhallway2, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/sign/chemistry{ + pixel_y = 24 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"sPw" = ( +/obj/structure/table/steel, +/obj/machinery/cell_charger, +/obj/item/cell/high, +/obj/random/powercell, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/expedition{ + c_tag = "Expedition - Storage"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"sPB" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/rnd/xenobiology/xenoflora) +"sPD" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/hygiene/sink{ + pixel_y = -12 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"sPE" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"sPH" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "petrov_shuttle_dock_pump" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"sPL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"sPM" = ( +/obj/structure/bed/sofa/m/blue{ + dir = 8 + }, +/obj/floor_decal/carpet/red{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/captain/beach) +"sPO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"sPR" = ( +/obj/machinery/button/blast_door{ + dir = 8; + id_tag = "hydro<-bar"; + name = "Hydroponics Shutters"; + pixel_x = 24; + pixel_y = 6; + req_access = list("ACCESS_BAR") + }, +/obj/machinery/button/blast_door{ + dir = 8; + id_tag = "bar<-cafe"; + name = "Bar Shutters"; + pixel_x = 24; + pixel_y = -6; + req_access = list("ACCESS_BAR") + }, +/obj/machinery/light/led/small, +/obj/structure/table/steel_reinforced, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 6 + }, +/obj/machinery/reagent_temperature, +/obj/item/storage/bar_fruit_jar{ + pixel_x = 4; + pixel_y = 12 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"sPT" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"sPX" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"sQk" = ( +/obj/paint_stripe/red, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/wallframe_spawn/reinforced/polarized{ + id = "cadetwindow" + }, +/turf/simulated/floor/plating, +/area/security/range) +"sQs" = ( +/turf/simulated/floor/plating, +/area/shuttle/petrov/test_room) +"sQu" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/gym) +"sQx" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"sQz" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "ai_starboard_pump" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"sQG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 10 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/machinery/computer/air_control{ + name = "Nacelle Chamber Monitoring"; + sensor_name = "Chamber"; + sensor_tag = "ReacEng2" + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"sQJ" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"sQQ" = ( +/obj/floor_decal/industrial/warning, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"sQS" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"sQV" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/item/stock_parts/manipulator, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"sQY" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/rotating_alarm/supermatter{ + pixel_y = -14; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"sQZ" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"sRc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"sRj" = ( +/obj/structure/window/basic{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/structure/curtain/open/privacy, +/obj/structure/window/basic{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"sRo" = ( +/obj/machinery/door/airlock/vault/bolted{ + id_tag = "civsafedoor"; + name = "Second Deck Safe Room" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"sRu" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"sRw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan, +/obj/floor_decal/techfloor/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"sRy" = ( +/obj/machinery/button/windowtint{ + pixel_y = -24; + dir = 1; + id = "cafewindow"; + pixel_x = 6 + }, +/obj/structure/bed/chair/rounded/brown{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/floor_decal/carpet/blue, +/obj/floor_decal/carpet/blue{ + dir = 1 + }, +/obj/floor_decal/carpet/blue{ + dir = 10 + }, +/obj/floor_decal/carpet/blue{ + dir = 9 + }, +/obj/machinery/light_switch{ + pixel_x = -6; + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/cafe/upper) +"sRC" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"sRF" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/catwalk_plated/dark, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/safe_room/bridge) +"sRG" = ( +/obj/structure/table/standard, +/obj/machinery/reagent_temperature, +/turf/simulated/floor/tiled/white, +/area/vacant/gambling) +"sRN" = ( +/obj/decal/cleanable/dirt, +/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/plating, +/area/maintenance/compactor) +"sRS" = ( +/obj/machinery/tele_projector{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/teleporter) +"sSb" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/gas) +"sSd" = ( +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/light/led/small{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/machinery/chemical_dispenser/bar_coffee/full{ + pixel_y = 8 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"sSe" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"sSp" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/virology, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/item/taperoll/engineering/applied, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology) +"sSq" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"sSy" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"sSz" = ( +/obj/item/reagent_containers/spray/sterilizine, +/turf/simulated/floor/tiled/white, +/area/vacant/infirmary) +"sSB" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"sSC" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 8; + name = "Head Of Security"; + sort_type = "Head Of Security" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"sSD" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation) +"sSF" = ( +/obj/machinery/light/spot, +/obj/floor_decal/spline/fancy/black{ + dir = 6 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"sSL" = ( +/obj/structure/closet/emcloset, +/obj/random/coin, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"sSN" = ( +/obj/structure/girder, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"sSO" = ( +/obj/structure/coatrack, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"sSX" = ( +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/lounge/upper) +"sTh" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"sTi" = ( +/obj/machinery/door/firedoor, +/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/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"sTq" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/bed/chair/wood/maple, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"sTr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/grey/diagonal, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"sTs" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"sTx" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"sTF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"sTL" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/vending/cigarette{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"sTO" = ( +/obj/structure/cable/green, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"sTU" = ( +/turf/simulated/wall/prepainted, +/area/medical/mentalhealth) +"sTZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"sUb" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"sUj" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/light_construct{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"sUt" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4; + name = "Heat Exchanger Input" + }, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/titanium, +/area/shuttle/petrov/gas) +"sUA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/industrial/danger{ + dir = 5 + }, +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/folder/nt, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"sUC" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/light/small, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"sUI" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/tcommsat/storage) +"sUO" = ( +/obj/structure/closet/crate/secure/biohazard, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/eva) +"sUP" = ( +/obj/floor_decal/corner/black/three_quarters{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"sUQ" = ( +/obj/structure/towel/pink_stripped, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"sUW" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"sVc" = ( +/obj/machinery/hologram/holopad/longrange, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/exploration/briefing_room) +"sVd" = ( +/obj/floor_decal/corner/black{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"sVe" = ( +/obj/machinery/optable, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"sVf" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"sVh" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/machinery/button/windowtint{ + dir = 1; + id = "bo_windows"; + pixel_x = -6; + pixel_y = -21 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -21; + pixel_x = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"sVl" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"sVq" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/foreport) +"sVs" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"sVt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"sVA" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"sVB" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/aft_stairwell) +"sVH" = ( +/obj/structure/table/marble, +/obj/machinery/reagentgrinder/juicer, +/obj/item/reagent_containers/glass/beaker/large, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"sVI" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod2/station) +"sVK" = ( +/obj/floor_decal/corner/black/half{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"sVN" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/sign/warning/hot_exhaust{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"sVS" = ( +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"sWc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"sWf" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"sWj" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/rotating_alarm/supermatter{ + dir = 8; + pixel_x = 14 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"sWn" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/suit_cycler/pilot, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/power) +"sWv" = ( +/obj/floor_decal/chapel{ + dir = 1 + }, +/obj/structure/bed/chair/pew/mahogany, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"sWy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/cafe/upper) +"sWH" = ( +/obj/machinery/recharger/wallcharger{ + dir = 8; + pixel_x = 22 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"sWJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/alarm/warm{ + dir = 4; + pixel_x = -24; + req_access = list(); + target_temperature = 398.15; + temperature = 343.15 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/breakroom) +"sWY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light_switch{ + pixel_x = -6; + pixel_y = 28 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"sWZ" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"sXd" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/open, +/area/space) +"sXg" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"sXh" = ( +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d1port) +"sXu" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"sXy" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/item/device/scanner/gas, +/obj/item/device/t_scanner, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"sXB" = ( +/obj/floor_decal/corner/green/three_quarters, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"sXC" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe) +"sXD" = ( +/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/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"sXI" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/aft) +"sXS" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"sXZ" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod4/station) +"sYe" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"sYg" = ( +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/stamp/rd/nt, +/obj/structure/table/glass/boron, +/obj/item/toy/desk/newtoncradle{ + pixel_x = 4; + pixel_y = -34 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"sYq" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"sYx" = ( +/obj/floor_decal/corner/darkblue/mono, +/obj/machinery/vending/snack, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"sYz" = ( +/obj/machinery/cryopod, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo) +"sYD" = ( +/obj/structure/table/standard, +/obj/item/storage/firstaid/adv{ + pixel_y = 3 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"sYL" = ( +/obj/landmark/test/safe_turf, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"sYN" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"sYU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/bed/sofa/l/black{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/carpet/green, +/area/crew_quarters/cafe) +"sYX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"sZd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/seats_place) +"sZi" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"sZm" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/yellow/bordercorner, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"sZq" = ( +/obj/machinery/vending/snack, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/sign/warning/smoking{ + dir = 8; + pixel_x = 33 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/office) +"sZs" = ( +/obj/machinery/photocopier, +/obj/structure/filingcabinet/wallcabinet{ + pixel_y = 30 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"sZx" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/external/bolted/cycling{ + name = "Xenobotany Lab Access"; + id_tag = "xenobotany_access_outer" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/xenobiology/xenoflora) +"sZz" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"sZF" = ( +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"sZT" = ( +/obj/floor_decal/corner/green/bordercorner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"sZU" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/turf/simulated/open, +/area/medical/staging) +"sZZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "td_port" + }, +/obj/floor_decal/industrial/warning/cee, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"taa" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/fourthdeck/forestarboard) +"tac" = ( +/obj/machinery/air_sensor{ + id_tag = "engine_sensor" + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/engineering/engine_room) +"tah" = ( +/obj/machinery/camera/all/command{ + c_tag = "AI Core - Fore"; + dir = 8 + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/flasher{ + dir = 4; + id_tag = "ai_core"; + pixel_x = -24 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"taj" = ( +/obj/structure/sign/directions/med{ + pixel_y = 30 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"tam" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"tao" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftport) +"taq" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/closet/crate/secure/biohazard, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level2) +"taA" = ( +/obj/structure/displaycase{ + desc = "A display case for prized possessions. It taunts you to kick it. Her card reader is damaged, you can also notice some transparent formations on the glass."; + req_access = list("ACCESS_CENT_GENERAL") + }, +/obj/item/gun/energy/laser{ + desc = "A Hephaestus Industries G40E carbine, designed to kill with concentrated energy blasts. He seems to lack some details."; + origin_tech = list("combat"=2,"magnets"=1); + projectile_type = /obj/item/projectile/beam/practice + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"taB" = ( +/obj/structure/rubble/war, +/obj/structure/rubble/war, +/obj/structure/rubble/war, +/obj/fluid_mapped, +/mob/living/simple_animal/aquatic/fish, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"taC" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"taE" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"taX" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"tbc" = ( +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"tbn" = ( +/obj/structure/sign/nanotrasen{ + dir = 1 + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/centralstarboard) +"tbv" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"tbD" = ( +/obj/structure/table/standard, +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 8 + }, +/obj/item/folder/nt, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"tbI" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ + dir = 4; + internal_pressure_bound = 35000; + internal_pressure_bound_default = 35000 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d3starboard) +"tbO" = ( +/obj/decal/cleanable/dirt, +/obj/structure/bed/chair/office/dark, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"tbT" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/floor_decal/corner/lime/border{ + dir = 5 + }, +/obj/structure/table/woodentable/walnut, +/obj/structure/flora/pottedplant/drooping{ + pixel_y = 13; + pixel_x = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"tbY" = ( +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "engineroomvent"; + name = "Engine Room Vent" + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"tcb" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"tch" = ( +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/airlock_sensor{ + id_tag = "solar_starboard_sensor"; + master_tag = "solar_starboard"; + pixel_x = 10; + pixel_y = 27 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "solar_starboard"; + pixel_x = -5; + pixel_y = 21; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"tcn" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"tco" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/office) +"tcu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"tcy" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"tcB" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/structure/mopbucket, +/obj/item/mop, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"tcE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"tcJ" = ( +/obj/floor_decal/spline/fancy/black, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"tcS" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/table/woodentable/walnut, +/obj/item/storage/box/donut, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"tcU" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"tdh" = ( +/obj/floor_decal/industrial/traffic/corner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tdi" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"tdl" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/closet/crate/secure{ + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/item/stock_parts/power/apc/buildable, +/obj/item/stock_parts/power/apc/buildable, +/obj/item/stock_parts/power/battery/buildable, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"tdn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Bridge Solar Access" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/maintenance/solar/bridge_starboard) +"tdq" = ( +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"tdu" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"tdx" = ( +/obj/item/material/ashtray/glass{ + pixel_y = -2 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/black{ + pixel_y = 7 + }, +/obj/structure/table/woodentable_reinforced/ebony, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"tdI" = ( +/obj/structure/bookcase/manuals/medical, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"tdN" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai_cyborg_upload) +"tdV" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"tdY" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"tee" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/structure/window/boron_reinforced, +/obj/structure/window/boron_reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"tep" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/paint_stripe/red, +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/security/sierra/suits) +"tez" = ( +/obj/machinery/door/airlock/mining{ + id_tag = "qmdoor-hallway"; + name = "Quartermaster"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/deckofficer) +"teA" = ( +/obj/structure/cable/green{ + 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/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/machinery/camera/network/hangar{ + c_tag = "Hangar - Xenobiology Entrance"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs/upper) +"teQ" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"tfa" = ( +/obj/structure/closet/secure_closet/xenoarchaeologist_sierra, +/obj/structure/window/reinforced, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/locker) +"tfe" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/medical{ + dir = 8; + door_color = "#4c535b"; + name = "Morgue" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"tfi" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"tfk" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"tfl" = ( +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"tfs" = ( +/obj/machinery/newscaster/security_unit{ + pixel_x = -32 + }, +/obj/structure/closet/secure_closet/security/sierra/science, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/security{ + c_tag = "Security - RND Checkpoint"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"tfy" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/lime/border{ + dir = 5 + }, +/obj/structure/bed/chair/comfy/beige, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"tfE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/seconddeck) +"tfG" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"tfO" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/item/device/radio/intercom/locked/ai_private{ + pixel_y = 22 + }, +/obj/machinery/computer/teleporter{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_teleport) +"tfP" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"tfU" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"tfZ" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"tge" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"tgq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"tgt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"tgJ" = ( +/obj/machinery/door/airlock/hatch{ + dir = 4; + name = "Seating"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_r) +"tgK" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway/aft) +"tgM" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"tgQ" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"thi" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated/dark, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/bridge/hallway) +"thl" = ( +/obj/decal/cleanable/dirt, +/obj/random/junk, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"thx" = ( +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/green/bordercorner, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/navbeacon/sierra/FD_forecentralhallway1, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"thy" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"thC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"thP" = ( +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"thR" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/wall/r_wall, +/area/space) +"thT" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"thW" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/xenobiology/level1) +"tih" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/plating, +/area/engineering/atmos/storage) +"tin" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 10 + }, +/obj/structure/table/standard, +/obj/item/material/ashtray/plastic, +/obj/random/snack, +/obj/random/smokes, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"tix" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"tiA" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/turf/simulated/floor/plating, +/area/rnd/development) +"tiB" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"tiD" = ( +/obj/structure/table/woodentable, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/stack/package_wrap/cargo_wrap, +/turf/simulated/floor/tiled/dark, +/area/vacant/dungeon) +"tiE" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"tiK" = ( +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/monotile, +/area/assembly/office) +"tiZ" = ( +/obj/structure/railing/mapped, +/obj/structure/cart{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"tjb" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"tjd" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/medical/mortus{ + name = "Observation" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"tji" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"tjj" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"tjn" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/water_cell) +"tjw" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/foreport) +"tjC" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"tjQ" = ( +/obj/structure/closet/secure_closet/decktech, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/suplocker_room) +"tjZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"tkb" = ( +/obj/structure/roller_bed, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/maintenance_equipstorage) +"tkg" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "borg"; + name = "Cyborg Upload" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_cyborg_upload) +"tkp" = ( +/turf/simulated/wall/r_wall/hull, +/area/turret_protected/ai_maint) +"tkt" = ( +/obj/structure/table/rack, +/obj/item/defibrillator/compact/loaded, +/obj/item/defibrillator/compact/loaded, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/structure/window/basic{ + dir = 8 + }, +/obj/structure/window/basic{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"tkw" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"tkF" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"tkL" = ( +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23; + pixel_y = 12 + }, +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/open, +/area/rnd/xenobiology/water_cell) +"tkO" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/aft) +"tkT" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tkX" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"tkY" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"tli" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hydroponics) +"tlm" = ( +/obj/machinery/power/smes/buildable{ + RCon_tag = "Solar - Bridge Starboard" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"tlu" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/prepainted, +/area/security/sierra/interrogation) +"tlv" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/industrial/danger{ + dir = 10 + }, +/obj/machinery/computer/modular/preset/cardslot/command, +/obj/machinery/button/windowtint{ + pixel_x = -5; + pixel_y = 24; + id = "bridge_outer_windows" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/nano) +"tlw" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow, +/obj/machinery/meter, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"tlx" = ( +/obj/structure/closet/secure_closet/engineering_sierra, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"tlz" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 1 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft) +"tlB" = ( +/obj/structure/table/rack, +/obj/item/storage/belt/archaeology, +/obj/item/storage/belt/archaeology, +/obj/item/storage/belt/archaeology, +/obj/item/storage/ore, +/obj/item/storage/ore, +/obj/item/storage/ore, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/brown/border{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/mining{ + dir = 4; + c_tag = "Mining - Equipment" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"tlF" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"tlM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"tlW" = ( +/obj/floor_decal/industrial/warning, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry2) +"tma" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d3port) +"tmr" = ( +/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/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"tms" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/machinery/light_switch{ + pixel_x = 21; + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/assembly/robotics) +"tmy" = ( +/obj/structure/bed/chair/rounded/blue{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"tmA" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/tcommsat/computer) +"tmL" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"tmM" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/starboard) +"tmY" = ( +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/corner/black/mono, +/obj/structure/table/standard, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"tng" = ( +/obj/structure/handrail{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tni" = ( +/obj/wallframe_spawn/reinforced/polarized{ + id = "rcheckinner_windows" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "PetrovShield"; + name = "Petrov Blast Shutters" + }, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/plating, +/area/shuttle/petrov/security) +"tnk" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/medical/morgue) +"tnl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/holocontrol) +"tnm" = ( +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tnn" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"tnr" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/folder/red, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "armory_shutters"; + name = "Desk Shutters"; + pixel_y = -20; + req_access = list("ACCESS_ARMORY") + }, +/obj/structure/cable/green, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory) +"tnx" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"tny" = ( +/obj/machinery/computer/prisoner{ + dir = 4 + }, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"tnB" = ( +/obj/structure/table/standard, +/obj/item/device/scanner/health, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/storage/firstaid/radiation, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"tnF" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/exploration/eva) +"tnL" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"tnR" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/sign/warning/airlock{ + dir = 1; + pixel_y = -32 + }, +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"tnS" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"tnX" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"tnY" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"tnZ" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/cargo) +"tod" = ( +/obj/structure/bookcase/manuals/research_and_development, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"tof" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"tok" = ( +/obj/machinery/computer/ship/engines, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"ton" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Internal Affairs Office"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"top" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"tot" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular{ + id_tag = "auxbar"; + name = "Blast Shutters" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/vacant/bar) +"tow" = ( +/obj/floor_decal/corner/black/border{ + dir = 10 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"toA" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hos) +"toC" = ( +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/obj/machinery/camera/network/research{ + c_tag = "Xenobiology - Lower - Containment Fore"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"toD" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery) +"toF" = ( +/obj/structure/catwalk, +/turf/simulated/floor/shuttle_ceiling/sierra, +/area/space) +"toK" = ( +/obj/structure/table/woodentable/mahogany, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"toO" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod4/station) +"toT" = ( +/obj/machinery/hologram/holopad, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/monotile, +/area/holocontrol) +"toV" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/aft) +"tpb" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"tpf" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"tpi" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/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/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"tpp" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/bed/sofa/r/blue{ + dir = 8 + }, +/obj/machinery/camera/network/bridge_deck{ + dir = 8; + c_tag = "Bridge Deck - Aft Hallway - Starboard Rooms" + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"tpH" = ( +/turf/simulated/wall/prepainted, +/area/medical/wardhallway) +"tpJ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"tpK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/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/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"tpL" = ( +/turf/simulated/floor/wood/bamboo{ + name = "stairs" + }, +/area/crew_quarters/garden_room) +"tqd" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/industrial/warning, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"tqe" = ( +/obj/machinery/status_display{ + pixel_x = -32; + pixel_y = -32 + }, +/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" + }, +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"tqf" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/central_stairwell) +"tqj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"tqr" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/tcommsat/chamber) +"tqv" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8; + frequency = 1441; + id = "fuel_in"; + pixel_y = 1; + use_power = 1 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/engineering/fuelbay) +"tqw" = ( +/obj/structure/table/standard, +/obj/item/device/geiger, +/obj/item/device/scanner/health, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"tqx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = -24; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"tqy" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/open, +/area/maintenance/seconddeck/aftstarboard) +"tqE" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"tqL" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"tqM" = ( +/obj/machinery/papershredder, +/obj/structure/filingcabinet/wallcabinet{ + pixel_y = 30 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"tqV" = ( +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/obj/structure/sign/nanotrasen{ + dir = 4 + }, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/cargo_r) +"tqW" = ( +/obj/machinery/computer/ship/helm{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"trg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"tri" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck - Fore Hallway - Fore"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"trx" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"trz" = ( +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sauna) +"trA" = ( +/obj/machinery/door/firedoor, +/obj/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/engineering{ + dir = 4; + name = "Second Deck Substation" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/substation/seconddeck) +"trC" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"trM" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 6 + }, +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/forestarboard) +"trR" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"trS" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/research{ + name = "Control Room" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/security) +"tse" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/hop/cobed) +"tsj" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"tsm" = ( +/obj/floor_decal/carpet/blue2{ + dir = 4 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/hop, +/obj/landmark/start{ + name = "Chief Medical Officer" + }, +/turf/simulated/floor/carpet/blue3, +/area/crew_quarters/heads/office/cmo/cobed) +"tsn" = ( +/obj/structure/window/basic{ + dir = 1 + }, +/obj/structure/window/basic, +/obj/structure/hygiene/drain, +/obj/structure/hygiene/shower{ + dir = 4 + }, +/obj/machinery/door/window/eastright, +/obj/structure/curtain/open/shower, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals10, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/breakroom) +"tsv" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/hallway) +"tsG" = ( +/obj/machinery/atmospherics/binary/pump/on{ + name = "Scrubber to Waste" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"tsN" = ( +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"tta" = ( +/obj/item/paper_bin, +/obj/item/pen{ + pixel_x = -1 + }, +/obj/item/pen/red{ + pixel_x = 5 + }, +/obj/structure/table/woodentable_reinforced/ebony, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"ttc" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/virology/atmos) +"ttd" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"tto" = ( +/obj/decal/cleanable/dirt, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"ttq" = ( +/obj/structure/table/rack, +/obj/item/device/flashlight/flare/glowstick/random, +/obj/random/single/color/cable_coil, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"ttA" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"ttD" = ( +/obj/machinery/power/smes/buildable/preset/sierra/substation_full{ + RCon_tag = "Substation - Gravitational Generator" + }, +/obj/structure/cable/green, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"ttF" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar) +"ttL" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/thirddeck/aftstarboard) +"tud" = ( +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 8 + }, +/obj/machinery/atmospherics/valve/shutoff/supply, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/rnd/entry) +"tun" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"tuB" = ( +/obj/machinery/suit_storage_unit/standard_unit{ + req_access = newlist() + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/sign/warning/nosmoking_1{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"tuE" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"tuF" = ( +/turf/simulated/floor/plating, +/area/vacant/sauna) +"tuG" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/center) +"tuN" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/foundation, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"tuR" = ( +/obj/machinery/power/breakerbox/activated{ + RCon_tag = "Third Deck Substation Bypass" + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/substation/thirddeck) +"tuX" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/bridgedeck/aft) +"tvj" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"tvk" = ( +/obj/structure/shuttle/engine/heater{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/exploration_shuttle/power) +"tvm" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/heads/office/cmo/cobed) +"tvr" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/rotating_alarm/supermatter{ + pixel_y = 14 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"tvu" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/spray/sterilizine, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery) +"tvE" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/zpipe/down/cyan{ + dir = 1 + }, +/turf/simulated/open, +/area/space) +"tvF" = ( +/turf/simulated/open, +/area/hallway/primary/seconddeck/central_stairwell) +"tvG" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/omni/filter{ + tag_north = 2; + tag_south = 1; + tag_west = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"tvK" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/rnd/xenobiology/entry2) +"tvN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"tvZ" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"twd" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/heads/captain/beach) +"twj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar_atmos) +"twk" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/computer/modular/preset/aislot/research{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/turret_protected/ai) +"twl" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"twq" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"twv" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"twx" = ( +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"twz" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs) +"twA" = ( +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"twE" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "nuke_shuttle_dock_airlock_pump" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"twH" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/tech_supply, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"twJ" = ( +/obj/structure/window/basic{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/structure/bedsheetbin, +/obj/structure/window/basic{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"twN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"twO" = ( +/obj/structure/bed/sofa/l/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/sleep/cryo/south) +"twT" = ( +/obj/structure/closet/wardrobe/exploration, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration) +"twU" = ( +/obj/machinery/button/alternate/door{ + desc = "A remote control-switch for the office door."; + dir = 6; + id_tag = "captaindoor"; + name = "Office Door Control"; + pixel_x = 6; + pixel_y = 24; + req_access = list("ACCESS_CAPTAIN") + }, +/obj/machinery/button/windowtint{ + pixel_y = 24; + pixel_x = -3; + id = "cap_windows" + }, +/obj/machinery/computer/modular/preset/cardslot/command, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"twV" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/floor_decal/spline/fancy/black, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 1; + pixel_y = -13 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"twY" = ( +/obj/structure/closet/l3closet/general, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"twZ" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head/deck3) +"txb" = ( +/obj/random/vendor{ + dir = 4 + }, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/fore) +"txc" = ( +/obj/floor_decal/spline/fancy/black/corner{ + dir = 4 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"txi" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_3" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/center) +"txq" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"txt" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + id_tag = "security_permabrig_fitst_cell_shutters"; + name = "1st Cell Shutters"; + req_access = list("ACCESS_SECURITY"); + pixel_y = 18; + pixel_x = -21; + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/button/blast_door{ + id_tag = "security_permabrig_lobby_shutters"; + name = "Desk Shutters"; + req_access = list("ACCESS_SECURITY"); + pixel_y = -2; + pixel_x = -28; + dir = 4 + }, +/obj/machinery/button/blast_door{ + id_tag = "security_permabrig_second_cell_shutters"; + name = "2nd Cell Shutters"; + req_access = list("ACCESS_SECURITY"); + pixel_y = 6; + pixel_x = -21; + dir = 4 + }, +/obj/machinery/button/blast_door{ + id_tag = "security_permabrig_third_cell_shutters"; + name = "3d Cell Shutters"; + req_access = list("ACCESS_SECURITY"); + pixel_y = -6; + pixel_x = -21; + dir = 4 + }, +/obj/machinery/button/flasher{ + id_tag = "security_perm_chamber_flash"; + name = "Chamber Flasher"; + pixel_x = -28; + pixel_y = 10; + dir = 4; + req_access = list("ACCESS_SECURITY") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"txv" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/obj/item/storage/mirror{ + pixel_y = 32 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"txx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"txC" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"txH" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped, +/obj/item/reagent_containers/food/snacks/old/pizza, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"tyd" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell1) +"tyl" = ( +/obj/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/orange/corner, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftstarboard) +"tym" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/structure/reagent_dispensers/water_cooler{ + dir = 8 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"tyD" = ( +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"tyI" = ( +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/supply{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level2) +"tyJ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"tyL" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod5/station) +"tyX" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"tze" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/hallway/primary/bridgedeck/center) +"tzi" = ( +/obj/machinery/computer/ship/engines{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 9 + }, +/obj/structure/window/reinforced/polarized, +/obj/machinery/power/apc/charon{ + dir = 8; + name = "west bump"; + pixel_x = -25; + req_access = list(list("ACCESS_EXPLORER","ACCESS_ENGINEERING")) + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cockpit) +"tzt" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod4/station) +"tzF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/darkblue/diagonal, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"tzJ" = ( +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"tzK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_2" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/fore) +"tzL" = ( +/obj/machinery/door/window/brigdoor/westleft{ + id_tag = "iaaright"; + req_access = newlist() + }, +/obj/floor_decal/carpet/blue{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"tzM" = ( +/obj/structure/closet/emcloset, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"tzT" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tzU" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"tzW" = ( +/obj/structure/table/standard, +/obj/item/defibrillator/loaded, +/obj/item/auto_cpr, +/obj/item/storage/box/freezer{ + pixel_x = 5; + pixel_y = 9 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/maintenance_equipstorage) +"tAb" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"tAe" = ( +/obj/floor_decal/corner/darkblue/half{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue{ + dir = 6 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled, +/area/hallway/primary/bridgedeck/central_stairwell) +"tAp" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/corner, +/obj/machinery/access_button/airlock_interior{ + master_tag = "engine_airlock"; + name = "Cycle to Core"; + pixel_x = 24; + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"tAr" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"tAz" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/storage) +"tAA" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"tAK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"tAO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 1 + }, +/obj/machinery/camera/network/hangar{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"tAU" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/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" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"tAW" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/green/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"tBd" = ( +/obj/structure/bed/chair/padded/red, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation) +"tBl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/sleep/cryo/south) +"tBq" = ( +/obj/structure/closet/emcloset, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/sign/warning/airlock{ + dir = 8; + pixel_x = 32 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/maintenance/fourthdeck/aft) +"tBs" = ( +/obj/machinery/shield_diffuser, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tBx" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/black{ + dir = 1 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"tBy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"tBz" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"tBD" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/machinery/tele_beacon, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"tBF" = ( +/obj/machinery/light, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/papershredder, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"tBK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/equipment) +"tBP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"tBS" = ( +/obj/floor_decal/corner/black/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"tBT" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"tBW" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"tCa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"tCc" = ( +/obj/machinery/atmospherics/unary/heater, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"tCf" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/paint_stripe/red, +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "security_sergeant_shutters"; + name = "Warden Desk" + }, +/obj/wallframe_spawn/reinforced/polarized{ + id = "bo_windows" + }, +/turf/simulated/floor/plating, +/area/security/sierra/sergeant) +"tCs" = ( +/obj/structure/undies_wardrobe, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"tCx" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"tCB" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"tCD" = ( +/obj/structure/sign/warning/fire, +/obj/paint/black, +/turf/simulated/wall/ocp_wall, +/area/maintenance/incinerator) +"tCE" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"tCJ" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"tCL" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"tCO" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"tCR" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"tCS" = ( +/obj/floor_decal/carpet/blue2{ + dir = 8 + }, +/obj/floor_decal/carpet/blue2, +/obj/floor_decal/carpet/blue2{ + dir = 10 + }, +/obj/structure/curtain/bed{ + pixel_y = -32 + }, +/turf/simulated/floor/carpet/blue3, +/area/crew_quarters/heads/office/cmo/cobed) +"tDf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"tDh" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/floor_decal/corner/grey{ + dir = 10 + }, +/obj/machinery/computer/air_control{ + dir = 1; + input_tag = "CO21p_in"; + name = "Propellent Supply Control"; + output_tag = "CO21p_out"; + sensor_name = "Tank"; + sensor_tag = "ReacEngCO21" + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"tDj" = ( +/obj/floor_decal/techfloor, +/obj/machinery/light/small, +/obj/structure/table/standard, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 8 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 5 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"tDm" = ( +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ + id_tag = "escape_pod_10_berth"; + name = "escape pod ten berth controller"; + pixel_x = -32; + pixel_y = -28; + tag_door = "escape_pod_10_berth_hatch"; + frequency = 1380; + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/steeldecal/steel_decals_central4, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"tDo" = ( +/obj/structure/cable/green, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/carpet, +/area/chapel/main) +"tDr" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/frame/intercom, +/obj/item/stack/cable_coil/blue, +/turf/simulated/floor/wood/yew, +/area/crew_quarters/heads/office/ce/cobed) +"tDs" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/closet/emcloset, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"tDu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"tDw" = ( +/obj/floor_decal/corner/black{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"tDx" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/aft) +"tDD" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/shutters/open{ + dir = 2; + id_tag = "infimary_window_lockdown"; + name = "Infirmary Window Shutters" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/medical{ + name = "Hospital" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"tDG" = ( +/obj/structure/table/woodentable/mahogany, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"tDI" = ( +/obj/structure/table/steel, +/obj/item/stack/flag/green, +/obj/item/stack/flag/green, +/obj/item/stack/flag/green, +/obj/item/stack/flag/yellow, +/obj/item/stack/flag/yellow, +/obj/item/stack/flag/yellow, +/obj/item/stack/flag/red, +/obj/item/stack/flag/red, +/obj/item/stack/flag/red, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"tDJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"tDL" = ( +/obj/floor_decal/corner/darkblue, +/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/dark, +/area/bridge/hallway) +"tDU" = ( +/obj/wallframe_spawn/reinforced, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/paint_stripe/red, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"tDW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"tEi" = ( +/obj/machinery/status_display{ + pixel_y = 32 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"tEq" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration) +"tEs" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable{ + d1 = 16; + d2 = 0; + icon_state = "16-0" + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/fuel, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"tEF" = ( +/obj/machinery/light_construct{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"tEG" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/storage/primary) +"tEK" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"tET" = ( +/obj/structure/table/rack/dark, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/spline/plain/black{ + dir = 1; + icon_state = "spline_plain" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"tEV" = ( +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins/storage) +"tEX" = ( +/turf/simulated/wall/prepainted, +/area/engineering/engine_monitoring) +"tEY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"tFf" = ( +/obj/machinery/atmospherics/unary/vent_pump/tank{ + dir = 8; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "fuel_out"; + initialize_directions = 1; + internal_pressure_bound = 8000; + internal_pressure_bound_default = 8000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/machinery/air_sensor{ + id_tag = "fuel_sensor" + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/engineering/fuelbay) +"tFi" = ( +/obj/structure/bed/chair/office/teal{ + dir = 4 + }, +/obj/floor_decal/corner/beige/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"tFu" = ( +/turf/simulated/wall/prepainted, +/area/storage/primary) +"tFA" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod3/station) +"tFC" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/computer/cryopod/robot{ + pixel_x = -32 + }, +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"tFG" = ( +/obj/item/stool/bar/padded, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/cafe) +"tFO" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"tGd" = ( +/obj/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tGg" = ( +/obj/floor_decal/corner/green/border{ + dir = 10 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tGm" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"tGr" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/rnd/xenobiology/level1) +"tGv" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"tGC" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"tGH" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/research{ + dir = 4; + name = "Miscellaneous Research"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/containment) +"tGK" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"tGL" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/command/bsa) +"tGQ" = ( +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"tGS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/turf/simulated/wall/r_wall/hull, +/area/engineering/engine_room) +"tHa" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/maintenance_equipstorage) +"tHc" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/structure/bed/chair/padded/blue, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"tHv" = ( +/obj/structure/holoplant, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"tHC" = ( +/obj/floor_decal/corner/paleblue, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/junction, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"tHE" = ( +/obj/structure/inflatable/wall, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"tHF" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tHG" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"tHP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"tHT" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/guppy_hangar/start) +"tHW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"tHZ" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry2) +"tIa" = ( +/obj/floor_decal/corner/red{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 1; + target_pressure = 80 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"tIc" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"tId" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/camera/network/engine{ + c_tag = "Engine - Aft Starboard" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"tIg" = ( +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"tIm" = ( +/obj/floor_decal/corner/purple{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 6 + }, +/obj/machinery/computer/air_control{ + dir = 1; + input_tag = "fuel4p_in"; + name = "Fuel Supply Control"; + output_tag = "fuel4p_out"; + sensor_name = "Tank"; + sensor_tag = "ReacEngPhoron4" + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"tIn" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"tIp" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/industrial/danger/corner, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"tIt" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"tIu" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/bar/cobed) +"tIz" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"tIK" = ( +/obj/floor_decal/industrial/traffic{ + dir = 9; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/office) +"tIN" = ( +/obj/structure/table/standard, +/obj/item/storage/toolbox/mechanical, +/obj/item/stack/nanopaste, +/obj/item/stack/nanopaste, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/floor_decal/corner/grey_alt/three_quarters{ + dir = 1 + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - Robotics Lab - Surgery"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/assembly/robotics) +"tIV" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/bed/chair/shuttle, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ + dir = 4; + id_tag = "escape_pod_11"; + name = "escape pod eleven controller"; + pixel_x = -20; + tag_door = "escape_pod_11_hatch"; + frequency = 1380 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/escape_pod/escape_pod11/station) +"tIX" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar) +"tJj" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/light/spot, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"tJs" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/item/storage/box/cups, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"tJv" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"tJx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/bed/sofa/r/black, +/obj/machinery/button/alternate/door/bolts{ + dir = 8; + id_tag = "bar_private_room_1"; + name = "Lock"; + pixel_x = 24; + pixel_y = -7 + }, +/turf/simulated/floor/carpet/green, +/area/crew_quarters/cafe) +"tJz" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"tJC" = ( +/obj/structure/table/marble, +/obj/machinery/door/blast/shutters{ + id_tag = "cafe"; + name = "Cafe Shutters"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"tJJ" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + id = "fuel3p_in"; + use_power = 1 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d1starboard) +"tJM" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - Toxins Storage"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins/storage) +"tJY" = ( +/obj/structure/hygiene/shower{ + dir = 8; + pixel_x = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/rnd/xenobiology/entry) +"tKa" = ( +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"tKr" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/hardstorage) +"tKy" = ( +/obj/structure/closet, +/obj/item/melee/classic_baton, +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/wood{ + icon_state = "wood_broken2" + }, +/area/maintenance/firstdeck/forestarboard) +"tKC" = ( +/obj/floor_decal/corner/purple/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/random/vendor{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/aft) +"tKH" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/rnd/xenobiology/xenoflora) +"tKO" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"tKP" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/storage) +"tKQ" = ( +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace/chamber) +"tKT" = ( +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"tKX" = ( +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/alarm/monitor/isolation{ + alarm_id = "petrov2"; + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell2) +"tLc" = ( +/obj/structure/largecrate, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"tLm" = ( +/obj/structure/catwalk, +/obj/structure/handrail{ + dir = 4 + }, +/turf/simulated/floor/shuttle_ceiling/sierra, +/area/space) +"tLp" = ( +/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/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"tLz" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"tLA" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/empty, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/power) +"tLH" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/grey/border{ + dir = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/bridge/adjutants) +"tLU" = ( +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tLY" = ( +/obj/structure/table/standard, +/obj/item/aicard, +/obj/item/aiModule/reset, +/obj/structure/sign/warning/detailed{ + dir = 4; + pixel_x = -32 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech) +"tMa" = ( +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d3starboard) +"tMb" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/sleeper) +"tMe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"tMh" = ( +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell2) +"tMl" = ( +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"tMr" = ( +/obj/machinery/atmospherics/unary/heat_exchanger{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"tMz" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"tMB" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"tMD" = ( +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/structure/table/marble, +/obj/machinery/reagentgrinder/juicer{ + pixel_y = 8 + }, +/obj/structure/window/reinforced, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/spline/fancy/black{ + dir = 6 + }, +/obj/item/reagent_containers/glass/beaker/insulated, +/turf/simulated/floor/tiled/white, +/area/security/sierra/prison) +"tMH" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/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/dark/monotile, +/area/bridge/hallway) +"tML" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/computer/arcade, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"tMU" = ( +/obj/item/storage/mirror{ + pixel_x = -26; + pixel_y = 1 + }, +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12 + }, +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 8 + }, +/obj/machinery/atmospherics/valve/shutoff/supply, +/turf/simulated/floor/tiled, +/area/rnd/research) +"tMV" = ( +/obj/structure/closet/secure_closet/crew/research, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/white/monotile, +/area/maintenance/fourthdeck/aft) +"tNf" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"tNg" = ( +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "toxins_petrov_exhaust"; + name = "Toxins Exhaust Blast Doors" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/gas) +"tNj" = ( +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#c0c0c0" + }, +/area/quartermaster/hangar/upper) +"tNn" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"tNo" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/hardstorage) +"tNv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"tNA" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"tNI" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"tNN" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/obj/item/storage/mirror{ + pixel_y = 32 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/corner/grey/border, +/turf/simulated/floor/tiled/old_tile, +/area/crew_quarters/head) +"tOd" = ( +/obj/machinery/shield_diffuser, +/obj/machinery/door/blast/regular{ + id_tag = "chapel_shutters_md"; + name = "Mass Driver Shutters"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/chapel/main) +"tOi" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/airlock) +"tOk" = ( +/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/floor_decal/corner_techfloor_grid{ + dir = 6 + }, +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"tOl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft_stairwell) +"tOr" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"tOt" = ( +/obj/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tOw" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"tOx" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southright{ + name = "Robotics Laboratory Desk"; + req_access = newlist() + }, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/structure/wall_frame/standard, +/obj/structure/table/wallf{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/assembly/robotics) +"tOC" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"tOD" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"tOK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/status_display{ + pixel_x = 32; + pixel_y = 32 + }, +/obj/machinery/navbeacon/sierra/TD_fore7, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"tON" = ( +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/airless, +/area/solar/starboard) +"tOO" = ( +/obj/floor_decal/industrial/traffic{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tOU" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/holocontrol) +"tPf" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/washing_machine, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"tPh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"tPq" = ( +/obj/structure/closet/secure_closet{ + name = "Secure Evidence Locker"; + req_access = list("ACCESS_SECURITY") + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techmaint, +/area/security/sierra/evidence) +"tPr" = ( +/obj/structure/inflatable/door, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"tPs" = ( +/obj/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"tPx" = ( +/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/navbeacon/sierra/SD_centralhallway2, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"tPA" = ( +/obj/floor_decal/corner/black/full, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/cobed) +"tPH" = ( +/obj/machinery/floodlight{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"tPJ" = ( +/obj/floor_decal/industrial/outline/orange, +/obj/machinery/rotating_alarm/security_alarm{ + pixel_y = 13 + }, +/turf/simulated/floor/plating{ + burnt = 1; + name = "burnt plating" + }, +/area/crew_quarters/safe_room/bridge) +"tPK" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"tPO" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/random/mre, +/obj/structure/table/woodentable/walnut, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"tPS" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftstarboard) +"tQf" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "sd_port_pump" + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 8; + id_tag = "sd_port"; + name = "Second Deck Port Airlock Controller"; + pixel_x = 20; + req_access = list("ACCESS_EXTERNAL") + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"tQj" = ( +/obj/machinery/vending/hydronutrients, +/obj/machinery/light_construct{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/abandoned_hydroponics) +"tQm" = ( +/obj/machinery/light_switch{ + dir = 4; + on = 1; + pixel_x = -23 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/standard, +/obj/item/storage/box/monkeycubes{ + pixel_y = 10 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"tQu" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/aft) +"tQA" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/thirddeck/foreport) +"tQD" = ( +/obj/machinery/door/airlock/engineering{ + name = "Auxiliary Power Storage"; + req_access = newlist() + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/auxpower) +"tQG" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "sd_starboard_pump" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"tQH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/firstdeck) +"tQO" = ( +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo) +"tQZ" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"tRf" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1331; + id_tag = "rescue_shuttle_dock_airlock_outer"; + name = "Docking Port Airlock" + }, +/obj/machinery/shield_diffuser, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/center) +"tRg" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/thirddeck/center) +"tRq" = ( +/obj/structure/bed/sofa/l/teal{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"tRr" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"tRB" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/power/smes/buildable/preset/sierra/substation_full{ + RCon_tag = "Substation - Teleporter" + }, +/obj/structure/cable/cyan, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"tRD" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/space, +/area/space) +"tRF" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d1starboard) +"tRG" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/thirddeck/aft_stairwell) +"tRI" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Surgery - Operation Theatre Two" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery/second) +"tRN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/civilian{ + name = "Hydroponics Bay" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"tRS" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"tRV" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Bluespace Drive - Chamber"; + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace/chamber) +"tSd" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"tSs" = ( +/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/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"tSD" = ( +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tSK" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/window/reinforced, +/obj/machinery/computer/modular/preset/dock{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"tSM" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"tSN" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"tSQ" = ( +/obj/structure/closet/crate/hydroponics/prespawned, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"tST" = ( +/obj/machinery/light/spot, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"tSV" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"tSW" = ( +/obj/machinery/light_switch{ + pixel_y = 29 + }, +/obj/structure/bed/chair/padded/blue, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"tTa" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"tTc" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"tTe" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/civilian{ + name = "Central Stairwell" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/central_stairwell) +"tTh" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/folder, +/obj/item/folder, +/obj/item/folder, +/obj/item/folder, +/turf/simulated/floor/lino, +/area/command/chief_steward) +"tTp" = ( +/obj/machinery/status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/dockcheck) +"tTs" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"tTw" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod4/station) +"tTy" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/storage/box/donut, +/obj/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/captain) +"tTD" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"tTF" = ( +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/green/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics/third_deck_storage) +"tTM" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"tTS" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"tTU" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"tTX" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"tUc" = ( +/obj/structure/table/rack, +/obj/random/accessory, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"tUi" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Fourth Deck - Port Necelle"; + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"tUj" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 2; + id_tag = "ai_core_pump" + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/turret_protected/ai_teleport) +"tUm" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 1; + id_tag = "solar_port_pump" + }, +/obj/machinery/light/small, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"tUx" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/grey/border, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"tUB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"tUC" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level2) +"tUE" = ( +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"tUF" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "engine_electrical_maintenance"; + locked = 1; + name = "SMES Access"; + req_access = newlist() + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_smes) +"tUH" = ( +/obj/structure/catwalk, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + dir = 1; + id_tag = "auxair"; + name = "Auxiliary Air Storage Exterior Access Console"; + pixel_y = -20; + req_access = list("ACCESS_ENGINEERING") + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"tUJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"tUS" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 4 + }, +/obj/machinery/camera/network/supply{ + c_tag = "Supply Office - Quartermaster"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"tVb" = ( +/obj/floor_decal/corner/red, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"tVg" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"tVj" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/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/steel_grid, +/area/security/sierra/forensic) +"tVm" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"tVp" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"tVr" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"tVt" = ( +/obj/floor_decal/spline/plain/black{ + dir = 1 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tVx" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"tVD" = ( +/obj/machinery/computer/shuttle_control/explore/exploration_shuttle, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cockpit) +"tVL" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/eva) +"tVN" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"tVV" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/bed/chair/office/comfy/brown{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"tWg" = ( +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + dir = 1; + id_tag = "prototype_controller"; + name = "Fusion Maintenance Access Controller"; + pixel_y = -21; + req_access = list("ACCESS_ENGINE_EQUIP"); + tag_exterior_door = "prototype_exterior"; + tag_interior_door = "prototype_interior" + }, +/obj/machinery/computer/air_control{ + input_tag = "rust_injector"; + name = "R-UST Gas Injection Controls"; + sensor_name = "Fusion Chamber"; + sensor_tag = "rust_sensor"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"tWh" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ + id_tag = "escape_pod_7_berth"; + name = "escape pod seven berth controller"; + pixel_x = -32; + pixel_y = 21; + tag_door = "escape_pod_7_berth_hatch"; + frequency = 1380 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralstarboard) +"tWj" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"tWs" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/carpet, +/area/vacant/dormintories) +"tWx" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/heads/captain/secret_room/level_one) +"tWK" = ( +/obj/structure/cryofeed, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo) +"tWT" = ( +/obj/machinery/door/airlock/research{ + dir = 4; + name = "Robotics Laboratory"; + req_access = newlist() + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/assembly/robotics) +"tWV" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + autoset_access = 0; + dir = 4; + frequency = 1331; + id_tag = "guppy_shuttle_outer"; + name = "Guppy External Access"; + req_access = list("ACCESS_GUPPY") + }, +/obj/machinery/door/blast/regular{ + id_tag = "guppy_hatch"; + name = "Rear Hatch" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/button/blast_door{ + id_tag = "guppy_hatch"; + name = "Rear Hatch Control"; + req_access = list("ACCESS_GUPPY"); + pixel_x = 25; + pixel_y = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"tWW" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"tXc" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/lapvend, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/equipment) +"tXe" = ( +/obj/structure/catwalk, +/turf/simulated/open, +/area/space) +"tXg" = ( +/obj/floor_decal/corner/grey/border{ + dir = 10 + }, +/obj/structure/table/glass, +/obj/item/towel/random, +/obj/item/storage/box/detergent, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/old_tile, +/area/crew_quarters/head) +"tXi" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/green, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"tXm" = ( +/obj/machinery/atmospherics/unary/heat_exchanger{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"tXp" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"tXG" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"tXL" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/machinery/light/spot, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"tXM" = ( +/obj/structure/iv_stand, +/obj/structure/roller_bed, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"tXS" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell3) +"tXW" = ( +/obj/floor_decal/corner/grey/full, +/obj/structure/reagent_dispensers/water_cooler{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"tXY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"tXZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/holocontrol) +"tYr" = ( +/obj/structure/filingcabinet/filingcabinet, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/utility) +"tYE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 10 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/engine_room) +"tYF" = ( +/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" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"tYJ" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/stamp/internalaffairs, +/obj/item/folder/nt, +/obj/item/folder/blue{ + pixel_y = 5; + pixel_x = 5 + }, +/obj/item/folder/red{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/item/stamp/internalaffairs{ + pixel_y = 2; + pixel_x = -4 + }, +/obj/item/stamp/denied, +/obj/floor_decal/carpet/blue, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa/high_sec) +"tYV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/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/plating, +/area/quartermaster/hangar) +"tYX" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/closet/shipping_wall/filled{ + pixel_y = -24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"tZc" = ( +/obj/paint_stripe/red, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/door/blast/shutters/open{ + name = "Brig's visiting room shutters"; + id_tag = "visiting_room_windows_shutters" + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/turf/simulated/floor/plating, +/area/security/prison) +"tZj" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway) +"tZs" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner_techfloor_grid{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/hardstorage) +"tZt" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hydroponics) +"tZw" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"tZC" = ( +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"tZE" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/tank{ + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "o21p_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d3starboard) +"tZF" = ( +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/port) +"tZJ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/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/door/airlock/medical/mortus{ + dir = 4; + name = "Chapel" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"tZT" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Infrimary - Staging"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/ward) +"tZZ" = ( +/obj/machinery/shieldwallgen, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"uao" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/industrial/danger/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"uat" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"uau" = ( +/obj/structure/closet/secure_closet/virology, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"uav" = ( +/obj/structure/table/rack, +/obj/item/clothing/mask/breath/emergency, +/obj/item/clothing/mask/breath/emergency, +/obj/item/clothing/mask/breath/emergency, +/obj/item/clothing/mask/breath/emergency, +/obj/item/clothing/mask/breath/emergency, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"uaD" = ( +/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/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/port) +"uaK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"uaL" = ( +/obj/random/obstruction, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"uaM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"uaO" = ( +/obj/floor_decal/corner/red, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"uaP" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/random/junk, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"uaQ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"uaS" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"uaW" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ubj" = ( +/obj/paint_stripe/red, +/obj/item/paper_bin, +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/hos) +"ubk" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood{ + icon_state = "wood_broken4" + }, +/area/maintenance/firstdeck/forestarboard) +"ubm" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"ubp" = ( +/turf/simulated/wall/r_wall/hull, +/area/space) +"ubr" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"ubB" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"ubG" = ( +/obj/item/stack/material/wood/walnut{ + amount = 2 + }, +/turf/simulated/floor/carpet, +/area/vacant/gambling) +"ubH" = ( +/obj/machinery/door/window/brigdoor/northleft{ + dir = 4; + req_access = list("ACCESS_TOXINS"); + name = "Test Chamber"; + autoset_access = 0 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/blast/regular/open{ + id_tag = "misclab"; + name = "Test Chamber Blast Doors"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"ubP" = ( +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 23 + }, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/airlock_canisters) +"ucf" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/photocopier, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"uci" = ( +/obj/structure/table/marble, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/reagent_temperature, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"uco" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftport) +"ucp" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/food/drinks/teapot{ + pixel_x = 4; + pixel_y = 16 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"ucs" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/foreport) +"ucu" = ( +/obj/structure/closet/crate/radiation, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"ucx" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"ucy" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"ucE" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_north = 1; + tag_south = 2; + tag_west = 8 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"ucQ" = ( +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ucR" = ( +/obj/random/trash, +/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/plating, +/area/maintenance/compactor) +"ucT" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/medical/ward) +"ucV" = ( +/obj/floor_decal/industrial/traffic{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ucW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Fourth Deck - Starbound Necelle" + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"ucY" = ( +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"uda" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"udc" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"udn" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe) +"udr" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"udy" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"udF" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/wallframe_spawn/reinforced/polarized/full{ + id = "hop_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/hop) +"udI" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"udJ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/storage/tech) +"udP" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/prison) +"udR" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"uea" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the engine radiator viewport shutters."; + dir = 8; + id_tag = "EngineRadiatorViewport"; + name = "Engine Radiator Viewport Shutters"; + pixel_x = 25; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"ueh" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"uek" = ( +/obj/machinery/portable_atmospherics/canister/empty, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/decal/cleanable/cobweb2, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"uel" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/fourthdeck/center) +"uem" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"ueq" = ( +/obj/structure/table/glass, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/white, +/area/medical/ward) +"uet" = ( +/obj/machinery/light, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/turretid/stun{ + pixel_y = -32; + control_area = list(/area/turret_protected/ai_maint); + name = "Maintenance turret control panel" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/turret_protected/ai_maint) +"uew" = ( +/obj/floor_decal/spline/fancy/wood/corner, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"ueK" = ( +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "petrov_shuttle_sensor"; + pixel_x = -24; + pixel_y = 12 + }, +/obj/machinery/oxygen_pump{ + pixel_y = 32 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "petrov_shuttle_pump" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/petrov/airlock) +"ueY" = ( +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/foreport) +"ufa" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"ufg" = ( +/obj/machinery/atmospherics/valve{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"ufm" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"ufo" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/assembly/office) +"ufy" = ( +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/obj/structure/sign/nanotrasen{ + dir = 8 + }, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/cargo_l) +"ugb" = ( +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + dir = 4; + id_tag = "eng4"; + name = "First Deck Port Nacelle Access"; + pixel_x = -20; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/structure/cable/green, +/obj/machinery/power/apc/high/critical{ + pixel_y = -24; + name = "south bump" + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"ugd" = ( +/obj/machinery/door/blast/regular/escape_pod{ + id_tag = "escape_pod_10" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/maintenance/exterior) +"ugw" = ( +/obj/machinery/door/airlock/research{ + dir = 4; + name = "Robotics Laboratory"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/machinery/holosign/surgery{ + dir = 1; + id_tag = "robosurg" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/assembly/robotics) +"ugG" = ( +/obj/machinery/cryopod, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod5/station) +"ugK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/meter, +/obj/paint/black, +/turf/simulated/wall/ocp_wall, +/area/maintenance/incinerator) +"ugM" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"ugQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"ugW" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"uhk" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d3port) +"uhv" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/tank/air{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod4/station) +"uhC" = ( +/obj/floor_decal/corner/red{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 1; + target_pressure = 40 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"uhD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"uhE" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"uhJ" = ( +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/xenobiology/storage2) +"uhR" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"uhW" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"uhY" = ( +/obj/structure/window/basic{ + dir = 1 + }, +/obj/random/ironing_board_structure, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"uib" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"uim" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/machinery/camera/network/security{ + c_tag = "Longterm - Hydroponics"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"uiv" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/sign/poster{ + pixel_x = -32 + }, +/obj/structure/closet/bombclosetsecurity, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/suits) +"uiA" = ( +/obj/machinery/conveyor{ + id = "packageSort1"; + dir = 1 + }, +/obj/structure/plasticflaps/airtight, +/turf/simulated/floor/plating, +/area/quartermaster/office/post) +"uiB" = ( +/obj/machinery/hologram/holopad{ + pixel_x = 16; + pixel_y = 16 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"uiC" = ( +/obj/structure/railing/mapped, +/obj/machinery/camera/network/research{ + c_tag = "Xenobio - aqua chamber" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/water_cell) +"uiE" = ( +/obj/item/storage/box/cups, +/obj/floor_decal/spline/fancy/black, +/obj/structure/table/standard, +/obj/machinery/light/spot, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/prison) +"uiJ" = ( +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"uiQ" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 6 + }, +/obj/machinery/computer/modular/preset/cardslot/command_eng{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"ujc" = ( +/obj/structure/catwalk, +/obj/structure/ladder/up, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ujk" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lightgrey/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/lightgrey/bordercorner2, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"ujt" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/console_screen, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/micro_laser, +/obj/item/stock_parts/micro_laser/high, +/obj/item/stock_parts/capacitor, +/obj/item/stock_parts/capacitor, +/obj/item/stock_parts/capacitor, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/manipulator, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech) +"uju" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 1 + }, +/obj/structure/bed/chair/office/brown{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/suplocker_room) +"ujv" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"ujx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1port) +"ujy" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"ujE" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/bed/chair/padded/yellow{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"ujN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"ujZ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/item/stool/padded, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"uke" = ( +/obj/structure/disposalpipe/up{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"ukj" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/hidden/green, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d3starboard) +"ukl" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + id = "o22p_in"; + use_power = 1 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d3port) +"ukn" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"ukq" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"ukv" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"ukw" = ( +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"ukA" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 5 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"ukG" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/paleblue, +/obj/item/flora/pottedplantsmall/leaf{ + pixel_x = -5; + pixel_y = 2 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"ukQ" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/rnd/xenobiology/xenoflora) +"ukT" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe) +"ukV" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/bluespace) +"ukZ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/item/camera_assembly, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"ulg" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/black{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"uli" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/bluespace/chamber) +"ult" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"ulv" = ( +/obj/floor_decal/corner/purple{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"ulw" = ( +/obj/machinery/shield_diffuser, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_11_berth_hatch"; + name = "Escape Pod Eleven" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralport) +"uly" = ( +/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{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"ulA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/machinery/light/spot, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"ulB" = ( +/obj/machinery/air_sensor/nacelle/third/oxygen, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d1starboard) +"ulC" = ( +/obj/structure/closet/emcloset, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/maintenance/firstdeck/foreport) +"ulE" = ( +/obj/structure/noticeboard{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"ulM" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftport) +"ulQ" = ( +/obj/machinery/suit_storage_unit/science, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"ulS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"ulT" = ( +/obj/machinery/seed_extractor, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/light_switch{ + pixel_x = -6; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"ulW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/forensic) +"ulX" = ( +/obj/floor_decal/corner/red, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"uma" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/maintenance{ + autoset_access = 0; + name = "Dormitory Maintenance"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/south) +"umm" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"umo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"ums" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"umw" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"umI" = ( +/obj/random/vendor{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/lime/border{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"umT" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/center) +"umU" = ( +/obj/machinery/flasher{ + pixel_x = 32; + pixel_y = 32 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"una" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"une" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/civilian{ + dir = 8; + name = "Holodeck" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/holocontrol) +"ung" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"uni" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/down, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "32-2"; + d1 = 32 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/supply{ + color = "#0000ff"; + dir = 2 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ + color = "#ff0000"; + dir = 2 + }, +/turf/simulated/open, +/area/maintenance/seconddeck/starboard) +"unm" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/foreport) +"unn" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/firstdeck/foreport) +"unp" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"uns" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"unu" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"unx" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"unF" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"unH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/substation/bridgedeck) +"unN" = ( +/obj/structure/grille, +/obj/floor_decal/corner/yellow/border{ + dir = 5 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"unU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"unX" = ( +/turf/simulated/floor/tiled, +/area/maintenance/firstdeck/aftstarboard) +"uod" = ( +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"uoi" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"uoA" = ( +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#4c535b" + }, +/area/quartermaster/hangar/upper) +"uoB" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/security) +"uoD" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cargo_r) +"uoG" = ( +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "iaaleft" + }, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 6 + }, +/obj/structure/holoplant, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"uoH" = ( +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d1port) +"uoI" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"uoJ" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"uoK" = ( +/obj/wallframe_spawn/reinforced, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/rnd/servers) +"uoL" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"uoM" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"uoZ" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"uph" = ( +/obj/machinery/door/blast/regular/escape_pod{ + dir = 8; + id_tag = "escape_pod_5" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/maintenance/firstdeck/foreport) +"upm" = ( +/obj/structure/railing/mapped, +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"upq" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"upr" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"ups" = ( +/obj/structure/closet/emcloset, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"upE" = ( +/obj/item/stool/bar/padded, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/obj/floor_decal/corner/red{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/cafe) +"upK" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 8 + }, +/obj/machinery/air_sensor/nacelle/first, +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + injecting = 1; + use_power = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d3starboard) +"upM" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"upN" = ( +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/obj/random/drinkbottle, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"upO" = ( +/obj/machinery/computer/shuttle_control{ + dir = 4; + shuttle_tag = "Petrov"; + req_access = list("ACCESS_PETROV_HELM") + }, +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/cockpit) +"upT" = ( +/obj/structure/towel/black{ + pixel_y = -12 + }, +/obj/structure/hygiene/toilet, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"upY" = ( +/obj/structure/table/standard, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/maintenance/abandoned_hydroponics) +"uqa" = ( +/obj/machinery/portable_atmospherics/canister/chlorine, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins/storage) +"uqd" = ( +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"uqg" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/floor_decal/corner/red/bordercee{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"uql" = ( +/obj/floor_decal/corner/purple, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"uqm" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"uqr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1380; + id_tag = "centcom_shuttle_dock_inner"; + name = "Docking Port Airlock" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/docking) +"uqy" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"uqC" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/corner/black/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"uqE" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/locker) +"uqJ" = ( +/obj/structure/table/steel, +/obj/item/storage/box/condimentbottles, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"uqL" = ( +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 16; + d2 = 0; + icon_state = "16-0" + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/disposalpipe/up{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"uqZ" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/artifact_harvester, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/scan) +"ura" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow, +/obj/machinery/power/tracker, +/turf/simulated/floor/reinforced, +/area/solar/bridge_port) +"urd" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"urq" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins/storage) +"urs" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"urv" = ( +/obj/structure/closet/crate/freezer, +/obj/item/device/mmi, +/obj/item/device/mmi, +/obj/item/device/mmi, +/obj/item/storage/box/freezer, +/obj/floor_decal/corner/grey_alt{ + dir = 10 + }, +/obj/machinery/button/holosign{ + dir = 1; + id_tag = "robosurg"; + pixel_x = -6; + pixel_y = -21 + }, +/obj/machinery/button/windowtint{ + dir = 1; + id = "robotics_surgery"; + pixel_x = 6; + pixel_y = -21 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/assembly/robotics) +"urw" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + id_tag = "cedoor"; + name = "Chief Engineer"; + req_access = newlist(); + secured_wires = 1; + stripe_color = "#ffbf00" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/heads/office/ce) +"urz" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/multi_tile/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftstarboard) +"urE" = ( +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/fore) +"urH" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"urK" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance{ + name = "Security Maintenance"; + req_access = list("ACCESS_SEC_DOORS"); + autoset_access = 0; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"urR" = ( +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/obj/machinery/camera/network/research{ + c_tag = "Xenobiology - Lower - Containment Aft"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"usb" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"usc" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"usl" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/computer/shuttle_control/lift/medical, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"usp" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list(list("ACCESS_ATMOS","ACCESS_ENGINE_EQUIP","ACCESS_GUPPY")) + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/guppy_hangar/start) +"usr" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + dir = 4; + name = "Adjutants Room" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/adjutants) +"usv" = ( +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/cable/green, +/obj/paint_stripe/red, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized{ + id = "cadetwindow" + }, +/turf/simulated/floor/plating, +/area/security/range) +"usx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"usD" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 6 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"usG" = ( +/obj/machinery/suit_cycler/medical/alt, +/obj/structure/window/basic{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"usI" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"usQ" = ( +/obj/machinery/jukebox/custom_tape/old, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"usS" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"usU" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/forensic) +"utb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/glass/research{ + dir = 8; + id_tag = "PetrovAccess"; + name = "Petrov Access" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/airlock) +"utn" = ( +/turf/simulated/wall/r_wall/hull, +/area/medical/virology/lab) +"utv" = ( +/obj/structure/railing/mapped, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"utC" = ( +/obj/machinery/power/smes/batteryrack, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"utD" = ( +/obj/floor_decal/corner/black/three_quarters{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/bordercorner, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"utF" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft) +"utP" = ( +/obj/floor_decal/industrial/traffic/corner{ + dir = 4 + }, +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"utW" = ( +/obj/machinery/vending/cigarette{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/lime/border{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/holocontrol) +"utX" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + dir = 4; + id_tag = "toxin_lab_access"; + name = "Toxin Lab Access Console"; + req_access = list("ACCESS_TOX_STORAGE"); + pixel_x = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"uuA" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"uuL" = ( +/obj/machinery/door/firedoor, +/obj/random/obstruction, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/vacant/infirmary) +"uuS" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/accessory, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"uuV" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"uvj" = ( +/obj/machinery/radiocarbon_spectrometer, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/ship) +"uvl" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/disposal/deliveryChute, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/reinforced, +/area/exploration_shuttle/airlock) +"uvE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"uvJ" = ( +/obj/floor_decal/industrial/hatch/red, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery) +"uvK" = ( +/obj/structure/catwalk, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"uvV" = ( +/obj/machinery/organ_printer/flesh/mapped, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery) +"uvY" = ( +/obj/item/stool, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/solar/bridge_starboard) +"uwd" = ( +/obj/structure/foamedmetal, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/foreport) +"uwf" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/science{ + name = "Exploration Storage" + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"uwh" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"uwk" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"uwl" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + dir = 1; + id_tag = "calypso_shuttle_pump" + }, +/obj/structure/handrail{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/exploration_shuttle/airlock) +"uwr" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/folder/envelope/captain, +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"uwx" = ( +/obj/structure/table/standard, +/obj/item/storage/box/cups, +/obj/machinery/light_switch{ + pixel_x = -10; + pixel_y = 28 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/floor_decal/corner/black/half{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"uwA" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + name = "Expedition Leader's Office"; + sort_type = "Expedition Leader's Office" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"uwC" = ( +/obj/machinery/telecomms/processor/preset_two, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"uwG" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"uwI" = ( +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/closet/walllocker{ + pixel_x = 28 + }, +/obj/item/reagent_containers/food/snacks/proteinbar, +/obj/item/reagent_containers/food/snacks/proteinbar, +/obj/item/reagent_containers/food/snacks/proteinbar, +/obj/item/reagent_containers/food/snacks/proteinbar, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/regular, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/armory) +"uwR" = ( +/obj/floor_decal/ntlogo{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"uwY" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"uxa" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"uxd" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"uxe" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/storage) +"uxg" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"uxi" = ( +/obj/structure/girder, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/crew_quarters/sauna) +"uxj" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/random/maintenance, +/obj/machinery/light_construct{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"uxl" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"uxm" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Armory"; + req_access = newlist(); + dir = 4 + }, +/obj/floor_decal/industrial/hatch/grey, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/sierra/sergeant) +"uxr" = ( +/obj/random/obstruction, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"uxv" = ( +/obj/machinery/chemical_dispenser/full, +/obj/floor_decal/corner/beige{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"uxx" = ( +/obj/floor_decal/corner/lime/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/fore) +"uxy" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/holocontrol) +"uxB" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"uxN" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/floor_decal/corner/green/half{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"uxP" = ( +/obj/machinery/sleeper/survival_pod{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/machinery/pager/medical{ + name = "Call Medics button"; + pixel_y = 24 + }, +/obj/structure/sign/emergonly{ + dir = 4; + pixel_x = -32 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/medical/maintenance_equipstorage) +"uxQ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/foreport) +"uyd" = ( +/obj/structure/lattice, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/cable{ + d1 = 32; + icon_state = "32-1" + }, +/obj/machinery/atmospherics/pipe/zpipe/down/fuel, +/turf/simulated/open, +/area/maintenance/firstdeck/aftstarboard) +"uyf" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"uyB" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"uyI" = ( +/obj/structure/table/standard, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/item/storage/box/cups, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - Devlab"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/development) +"uyK" = ( +/obj/structure/lattice, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/space) +"uyP" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/hull, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"uyQ" = ( +/obj/structure/sign/warning/high_voltage, +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/iaa) +"uzc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + target_pressure = 3500 + }, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"uzk" = ( +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"uzm" = ( +/obj/machinery/floodlight{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"uzq" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"uzw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"uzC" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/machinery/meter, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"uzD" = ( +/obj/machinery/washing_machine, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/laundry) +"uzI" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular/open{ + id_tag = "xenobioa3"; + name = "Containment Blast Doors" + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level2) +"uzL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"uzM" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"uzR" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/brown/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 9 + }, +/obj/structure/bed/chair/padded/brown{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"uzU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftstarboard) +"uzY" = ( +/obj/structure/table/steel, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftport) +"uAb" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/obj/structure/sign/nanotrasen{ + dir = 1 + }, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/power) +"uAd" = ( +/obj/decal/cleanable/dirt, +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/obj/machinery/light_construct, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"uAg" = ( +/obj/machinery/door/airlock/glass/command{ + name = "E.V.A."; + req_access = newlist(); + secured_wires = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"uAj" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "briefing_windows" + }, +/turf/simulated/floor/plating, +/area/bridge/marine_room) +"uAo" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + dir = 4; + name = "Bridge Access"; + id_tag = "bridge_hallway_doors_port" + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_6" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/hallway) +"uAp" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"uAv" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/fourthdeck) +"uAB" = ( +/obj/structure/bed/chair/pew, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood, +/area/crew_quarters/actor/stage) +"uAC" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"uAJ" = ( +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"uAN" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"uAU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1starboard) +"uAY" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/fore) +"uAZ" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/green{ + pixel_x = -5; + pixel_y = 15 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"uBb" = ( +/obj/structure/closet/hydrant{ + pixel_y = -28 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"uBf" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 4 + }, +/obj/machinery/light/small, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory) +"uBi" = ( +/obj/machinery/vending/coffee{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge/upper) +"uBj" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"uBB" = ( +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"uBD" = ( +/obj/machinery/door/airlock/civilian{ + id_tag = "toilet_eng_2"; + name = "Toilet"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head/deck3) +"uBE" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/bridgedeck/aft) +"uBI" = ( +/obj/structure/iv_stand, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/maintenance_equipstorage) +"uBS" = ( +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/machinery/vending/security, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"uBX" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"uBY" = ( +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/thirddeck/center) +"uCg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/external{ + autoset_access = 0; + frequency = 1331; + id_tag = "guppy_shuttle_inner"; + name = "Guppy Internal Access"; + req_access = list("ACCESS_GUPPY") + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"uCk" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"uCl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + name = "Actor's Room" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/actor) +"uCq" = ( +/obj/machinery/atmospherics/omni/mixer{ + tag_east = 2; + tag_north = 1; + tag_north_con = 0.33; + tag_south = 1; + tag_south_con = 0.33; + tag_west = 1; + tag_west_con = 0.34 + }, +/obj/machinery/button/ignition{ + id_tag = "toxlab_petrov"; + pixel_y = -23; + pixel_x = 6 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"uCr" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"uCw" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell3) +"uCy" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/lockdown{ + id_tag = "lockdown2_6" + }, +/obj/machinery/door/airlock/command{ + name = "Bridge Checkpoint"; + autoset_access = 0; + req_access = list("ACCESS_SEC_DOORS") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/lobby) +"uCB" = ( +/turf/simulated/wall/prepainted, +/area/vacant/infirmary) +"uCK" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/blast/regular{ + id_tag = "BSD_windows"; + name = "Bluespace Chamber Lockdown" + }, +/turf/simulated/floor/plating, +/area/engineering/bluespace/chamber) +"uCN" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"uCO" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/purple/bordercorner, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"uCT" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/chapel/main) +"uCW" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/engineering/engine_room) +"uDc" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/chemical_dispenser/bar_coffee/full{ + pixel_y = 3; + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"uDo" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"uDp" = ( +/obj/structure/closet/crate, +/obj/item/storage/belt/utility, +/obj/item/stack/cable_coil, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"uDG" = ( +/obj/machinery/door/window/southleft{ + dir = 1; + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/door/window/southleft{ + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "xenobio1"; + name = "Containment Blast Doors" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/blue, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"uDK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"uDL" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"uDN" = ( +/obj/structure/largecrate, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"uDO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"uDW" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/storage/tech/high_risk) +"uDZ" = ( +/obj/structure/flora/pottedplant/thinbush, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lightgrey/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"uEb" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/phoron/fifty, +/obj/item/stack/material/phoron/fifty, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"uEh" = ( +/obj/machinery/atmospherics/valve{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/rnd/xenobiology/xenoflora) +"uEk" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/bed/chair/padded/red{ + dir = 8 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"uEl" = ( +/obj/machinery/bodyscanner, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/sign/warning/nosmoking_1{ + dir = 8; + pixel_x = 32; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/staging) +"uEn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"uEp" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/starboard) +"uET" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/maintenance/bridgedeck/starboard) +"uFc" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + 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/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"uFe" = ( +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"uFk" = ( +/obj/floor_decal/carpet/purple, +/turf/simulated/floor/carpet/purple, +/area/chapel/office) +"uFw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"uFL" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level1) +"uFR" = ( +/obj/machinery/conveyor{ + dir = 9; + id = "mining_internal" + }, +/turf/simulated/floor, +/area/quartermaster/hangar) +"uFT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/sleep/bunk) +"uGe" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/mortus{ + dir = 4; + name = "Chapel" + }, +/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" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/mortuary) +"uGf" = ( +/obj/floor_decal/corner/black/border{ + dir = 6 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"uGm" = ( +/obj/floor_decal/corner/black/mono, +/obj/structure/bed/chair/rounded/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"uGq" = ( +/obj/structure/towel/black{ + pixel_y = 18 + }, +/obj/structure/hygiene/toilet{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"uGu" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/tcommsat/storage) +"uGv" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"uGw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"uGz" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_r) +"uGA" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/hallway) +"uGD" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/mining{ + id_tag = null; + name = "Delivery Office"; + req_access = newlist() + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office/post) +"uGF" = ( +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/greengrid, +/area/engineering/gravitaional_generator) +"uGI" = ( +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor/stage) +"uGJ" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/barrier, +/obj/machinery/power/smes/buildable/preset/sierra/substation_full{ + RCon_tag = "Substation - Fusion Generator" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"uGK" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"uGM" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"uGN" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"uGS" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"uGT" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"uGY" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/valve/shutoff/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"uHd" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/fore) +"uHi" = ( +/obj/item/reagent_containers/glass/bucket, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/cistern) +"uHj" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/button/alternate/door/bolts{ + dir = 4; + id_tag = "toilet1"; + name = "Lock"; + pixel_x = -24 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head) +"uHw" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/random/junk, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"uHB" = ( +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/obj/random/cash, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"uHE" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"uHG" = ( +/obj/floor_decal/corner/red, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Bar - Entry"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"uHH" = ( +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory) +"uHL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"uHQ" = ( +/obj/structure/closet/crate, +/obj/random/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"uHU" = ( +/obj/machinery/air_sensor/nacelle/third/co2, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d1starboard) +"uHX" = ( +/obj/structure/table/steel, +/turf/simulated/floor/wood/walnut{ + icon_state = "walnut_broken5" + }, +/area/vacant/bar) +"uHZ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"uIc" = ( +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + dir = 1; + color = "#8c911d" + }, +/obj/structure/railing/mapped{ + dir = 4; + init_color = "#8c911d"; + color = "#8c911d" + }, +/turf/simulated/floor/plating, +/area/rnd/misc_lab) +"uIe" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"uIk" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/table/steel, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"uIl" = ( +/obj/structure/sign/poster{ + pixel_y = -32 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"uIp" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"uIr" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 4; + frequency = 1380; + id_tag = "petrov_shuttle_airlock"; + pixel_x = -24; + req_access = list("ACCESS_PETROV_HELM"); + tag_airpump = "petrov_shuttle_pump"; + tag_chamber_sensor = "petrov_shuttle_sensor"; + tag_exterior_door = "petrov_shuttle_outer"; + tag_interior_door = "petrov_shuttle_inner" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"uIu" = ( +/obj/structure/bed/sofa/r/teal{ + dir = 4 + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Personnel - Recreation"; + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/office) +"uIv" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/structure/sign/deck/bridge{ + pixel_y = 35 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"uIA" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Cell Three"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"uIC" = ( +/obj/machinery/cryopod, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo) +"uIE" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"uIF" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular{ + dir = 4; + name = "Emergency Exit"; + id_tag = "guppy_emergency_exit" + }, +/obj/machinery/button/blast_door{ + id_tag = "guppy_emergency_exit"; + name = "Emergency Exit Control"; + req_access = list("ACCESS_GUPPY"); + pixel_y = -24; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"uIG" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"uIL" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/actor/stage) +"uIO" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/bed/padded, +/obj/item/bedsheet/blue, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/south) +"uIP" = ( +/obj/machinery/button/blast_door{ + dir = 4; + id_tag = "bsa_door2"; + name = "Obstruction Field Disperser Blast Door"; + pixel_x = -24; + req_access = list("ACCESS_GUN") + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"uIX" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai_upload) +"uIY" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/space, +/area/space) +"uJe" = ( +/obj/machinery/door/airlock/civilian{ + name = "Sauna" + }, +/obj/floor_decal/industrial/hatch/yellow, +/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" + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/sauna) +"uJh" = ( +/obj/machinery/door/window/brigdoor/westleft, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"uJj" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/red/bordercorner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"uJl" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"uJo" = ( +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"uJr" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"uJt" = ( +/obj/machinery/atmospherics/unary/heater, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"uJu" = ( +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/obj/machinery/computer/air_control{ + input_tag = "o21p_in"; + name = "Oxygen Supply Control"; + output_tag = "o21p_out"; + sensor_name = "Tank"; + sensor_tag = "ReacEngOxygen1" + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"uJv" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 5 + }, +/obj/machinery/sparker{ + id_tag = "engines-3"; + pixel_x = -24 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d1starboard) +"uJz" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "abahyd_blast"; + name = "Space Shutters"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/maintenance/abandoned_hydroponics) +"uJF" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"uJG" = ( +/obj/floor_decal/corner/black/half, +/obj/floor_decal/corner/red/bordercorner2, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/corner/red/bordercorner, +/obj/structure/closet/walllocker{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"uJR" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/office) +"uJV" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"uJY" = ( +/obj/floor_decal/corner/grey/full, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/device/flashlight/lamp/green{ + pixel_x = -5; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"uKe" = ( +/obj/machinery/door/blast/regular{ + id_tag = "petrovcell2"; + name = "Test Chamber Blast Doors" + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell2) +"uKk" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"uKo" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"uKq" = ( +/obj/machinery/atmospherics/valve/shutoff/supply, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"uKr" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/camera/network/command{ + c_tag = "Command - Starboard Hallway Entry" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"uKy" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/maintenance{ + dir = 8; + autoset_access = 0 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/starboard) +"uKz" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"uKA" = ( +/obj/item/ore/iron, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"uKL" = ( +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/obj/structure/sign/nanotrasen{ + dir = 4 + }, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/power) +"uKY" = ( +/obj/machinery/chemical_dispenser/full, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/scan) +"uLa" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"uLi" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/item/storage/mirror{ + pixel_x = 29 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/heads/captain/secret_room/level_one) +"uLm" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cargo_l) +"uLo" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/space) +"uLp" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/brown/bordercorner2{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"uLu" = ( +/obj/floor_decal/spline/fancy/wood/corner, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"uLv" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hydroponics/third_deck_storage) +"uLH" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/item/taperoll/engineering/applied, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"uLI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/lime/bordercorner, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"uLR" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/lino, +/area/command/chief_steward) +"uLY" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/floor_decal/corner/red, +/obj/machinery/camera/network/hangar{ + c_tag = "Hangar - Ground Crew Room"; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"uMe" = ( +/obj/floor_decal/corner/red/border, +/obj/machinery/light/led/small, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"uMi" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/test_room) +"uMn" = ( +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/launcher, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"uMs" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"uMt" = ( +/obj/structure/sign/warning/hot_exhaust{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"uMu" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/largecrate, +/obj/random/tool, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"uMF" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/obj/catwalk_plated, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/aft) +"uMG" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + name = "Sorting Office"; + sort_type = "Sorting Office" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"uMK" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"uMU" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"uNk" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/device/flashlight/lamp{ + pixel_y = 19; + pixel_x = 3 + }, +/obj/item/book/manual/nt_sop, +/obj/floor_decal/carpet/blue{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa/high_sec) +"uNn" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"uNq" = ( +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "qm_warehouse2"; + name = "Warehouse Shutters" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/storage) +"uNw" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"uNx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/security/sierra/evidence) +"uND" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/structure/bookcase/manuals/xenoarchaeology, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"uNF" = ( +/obj/machinery/recharger/wallcharger{ + dir = 1; + pixel_y = -22 + }, +/obj/structure/table/steel, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"uNG" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery/second) +"uNI" = ( +/obj/machinery/door/airlock/security{ + name = "Security Checkpoint"; + req_access = list(list("ACCESS_SECURITY","ACCESS_FORENSICS")); + secured_wires = 1; + autoset_access = 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/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/security/sierra/dockcheck) +"uNO" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"uNU" = ( +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "ai_bridge_airlock"; + pixel_x = 2; + pixel_y = 24; + req_access = list("ACCESS_EXTERNAL"); + tag_airpump = "ai_bridge_pump"; + tag_chamber_sensor = "ai_bridge_sensor"; + tag_exterior_door = "ai_bridge_outer"; + tag_interior_door = "ai_bridge_inner" + }, +/obj/machinery/airlock_sensor{ + id_tag = "ai_bridge_sensor"; + pixel_x = -12; + pixel_y = 24 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "ai_bridge_pump" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"uOc" = ( +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/sierra/hallway) +"uOd" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/corner/darkblue/mono, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/microwave, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/adjutants) +"uOe" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/computer/modular/preset/security, +/turf/simulated/floor/tiled/dark, +/area/turret_protected/ai) +"uOm" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"uOv" = ( +/obj/paint_stripe/red, +/obj/paint/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod2/station) +"uOw" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"uOQ" = ( +/obj/structure/cable/green, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue) +"uOR" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"uOS" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"uOV" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"uOX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"uPb" = ( +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - RD Enter" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"uPc" = ( +/obj/structure/closet/secure_closet/engineering_sierra, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"uPf" = ( +/obj/shuttle_landmark/escape_pod/start/pod1, +/obj/wallframe_spawn/reinforced/titanium, +/turf/simulated/floor/plating, +/area/shuttle/escape_pod/escape_pod1/station) +"uPh" = ( +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/command/bsa) +"uPj" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"uPl" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/machinery/meter, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"uPn" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/hydrogen, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/shuttlefuel) +"uPo" = ( +/obj/random/closet, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"uPp" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/garden_room) +"uPB" = ( +/obj/decal/cleanable/dirt, +/obj/structure/table/woodentable, +/obj/item/deck/cards, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/green{ + pixel_y = 11 + }, +/obj/item/reagent_containers/food/drinks/cans/coffeecola{ + pixel_y = 11; + pixel_x = 10 + }, +/obj/item/trash/chips{ + pixel_y = 8; + pixel_x = -11 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"uPD" = ( +/obj/item/taperoll/engineering/applied, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"uPM" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"uPQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"uPV" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/hydroponics/third_deck_storage) +"uPX" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atm{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"uPY" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"uQe" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + id = "o23p_in"; + use_power = 1 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d1starboard) +"uQl" = ( +/obj/structure/undies_wardrobe, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Actors - Dressing room"; + dir = 8 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor) +"uQp" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"uQt" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/central_stairwell) +"uQx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation) +"uQE" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/civilian{ + locked = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/taperoll/engineering/applied, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/vacant/bar) +"uQF" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai) +"uQI" = ( +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/medical/locker) +"uQO" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/hangar_stairs) +"uQR" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/assembly/robotics) +"uQX" = ( +/obj/landmark{ + name = "lightsout" + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/storage/primary) +"uRf" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"uRg" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"uRj" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/airlock) +"uRn" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"uRo" = ( +/obj/structure/bookcase/manuals/xenoarchaeology, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"uRw" = ( +/obj/structure/sign/warning/docking_area{ + dir = 1 + }, +/turf/simulated/wall/r_wall/hull, +/area/hallway/primary/fourthdeck/center) +"uRz" = ( +/obj/random/obstruction, +/obj/structure/largecrate, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"uRI" = ( +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"uRL" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/vacant/storage) +"uRR" = ( +/obj/machinery/telecomms/server/presets/security, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"uRY" = ( +/obj/floor_decal/corner/black/border, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hydroponics/third_deck_storage) +"uSa" = ( +/obj/structure/rubble/war, +/obj/structure/rubble/war, +/obj/structure/rubble/war, +/obj/structure/rubble/war, +/obj/structure/rubble/war, +/obj/fluid_mapped, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"uSb" = ( +/obj/item/storage/mirror{ + pixel_x = -1; + pixel_y = 32 + }, +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/obj/floor_decal/industrial/warning, +/obj/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/splatter, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"uSj" = ( +/obj/machinery/oxygen_pump{ + pixel_x = -32 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/xenobiology/xenoflora) +"uSn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/maintenance{ + dir = 4; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/vacant/gambling) +"uSt" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"uSA" = ( +/obj/machinery/conveyor{ + id = "mining_internal" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor, +/area/quartermaster/hangar) +"uSB" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"uSJ" = ( +/obj/floor_decal/stairs{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/wood/bamboo{ + name = "stairs" + }, +/area/crew_quarters/garden_room) +"uSS" = ( +/obj/machinery/door/blast/regular{ + id_tag = "petrovcell1"; + name = "Test Chamber Blast Doors" + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell1) +"uSV" = ( +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 9 + }, +/obj/machinery/navbeacon/sierra/SD_centralhallway1, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"uTd" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/green/border{ + dir = 6 + }, +/obj/structure/stairs/south, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics/third_deck_storage) +"uTf" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"uTg" = ( +/obj/structure/sign/nanotrasen{ + dir = 4 + }, +/turf/simulated/wall/r_wall/hull, +/area/vacant/infirmary) +"uTl" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"uTw" = ( +/obj/structure/closet/l3closet/scientist, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/camera/network/research{ + c_tag = "Xenobiology - Lower - Airlock"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry2) +"uTy" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "interrogation_no2_windows" + }, +/turf/simulated/floor/plating, +/area/security/sierra/interrogation/second) +"uTz" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"uTA" = ( +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/actor/stage) +"uTE" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "bridge_windows" + }, +/obj/structure/cable/green, +/turf/simulated/floor/plating, +/area/bridge) +"uTP" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"uTR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"uTY" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"uUc" = ( +/obj/structure/bed/chair/comfy/teal{ + dir = 4 + }, +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"uUh" = ( +/obj/floor_decal/corner/green/diagonal, +/obj/structure/table/glass, +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/obj/machinery/recharger, +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"uUl" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/computer/modular/preset/aislot/research{ + dir = 4 + }, +/obj/machinery/camera/network/research{ + c_tag = "Xenobiology - Desk"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"uUH" = ( +/obj/machinery/constructable_frame, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"uUK" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/light/small, +/obj/machinery/light_switch{ + pixel_x = 10; + pixel_y = -21 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"uUN" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/camera/network/petrov{ + c_tag = "Petrov - Anomaly Lab" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"uVa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"uVb" = ( +/obj/structure/table/marble, +/obj/machinery/microwave, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"uVi" = ( +/obj/machinery/cryopod{ + dir = 2 + }, +/obj/machinery/computer/cryopod{ + pixel_x = -32 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod11/station) +"uVs" = ( +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/glass, +/obj/item/storage/secure/briefcase, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"uVt" = ( +/obj/machinery/button/blast_door{ + dir = 4; + id_tag = "hangar_atmos_storage"; + name = "Storage Door Control"; + pixel_x = -24; + req_access = list(list("ACCESS_HANGAR","ACCESS_ENGINE_EQUIP")) + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar_atmos) +"uVw" = ( +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/suits) +"uVD" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/infirmreception) +"uVF" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 8 + }, +/obj/machinery/air_sensor/nacelle/third, +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + injecting = 1; + use_power = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d1starboard) +"uVJ" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"uVV" = ( +/obj/structure/table/standard, +/obj/random/firstaid, +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod2/station) +"uWa" = ( +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/green/bordercorner, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod5/station) +"uWf" = ( +/obj/floor_decal/corner/green/half{ + dir = 1 + }, +/obj/machinery/smartfridge/drying_rack, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"uWh" = ( +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"uWi" = ( +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"uWj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/gym) +"uWs" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "firingspace"; + name = "Firing Range Shields" + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint_stripe/red, +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/security/range) +"uWu" = ( +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/head) +"uWA" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/spline/fancy/wood, +/obj/structure/flora/pottedplant, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"uWB" = ( +/obj/floor_decal/corner/green/bordercee{ + dir = 1 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"uWD" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"uWK" = ( +/obj/landmark{ + name = "carpspawn" + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/space) +"uWM" = ( +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"uWO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/firedoor, +/obj/paint_stripe/red, +/obj/wallframe_spawn/reinforced/polarized{ + id = "hos_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/hos) +"uWS" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/bridgedeck/center) +"uXb" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/item/stool/wood, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/breakroom) +"uXj" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"uXm" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/solar_control{ + id = "auxsolarbridge"; + name = "Bridge Solar Control"; + track = 1 + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Solar Control - Bridge Deck - Port"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/solar/bridge_port) +"uXp" = ( +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"uXq" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/flora/pottedplant/tall, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"uXH" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"uXO" = ( +/obj/machinery/door/firedoor, +/obj/structure/sign/warning/high_voltage{ + dir = 1; + pixel_y = -32 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/center) +"uXP" = ( +/obj/structure/table/rack, +/obj/item/storage/belt/utility/full, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/glasses/welding, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - Robotics Fabricators" + }, +/turf/simulated/floor/tiled/monotile, +/area/assembly/robotics) +"uXR" = ( +/obj/structure/sign/warning/high_voltage{ + dir = 8 + }, +/turf/simulated/wall/prepainted, +/area/maintenance/solar/bridge_port) +"uXX" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8; + icon_state = "techfloor_corners" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"uXY" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/hallway/primary/seconddeck/fore) +"uYf" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"uYl" = ( +/obj/machinery/door/firedoor, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 5 + }, +/obj/wallframe_spawn/reinforced_phoron/hull, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"uYq" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance{ + req_access = newlist() + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"uYs" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/eva) +"uYt" = ( +/obj/floor_decal/techfloor/orange{ + dir = 10 + }, +/obj/structure/reagent_dispensers/watertank, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"uYw" = ( +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"uYA" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/heads/captain/secret_room/level_one) +"uYB" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/fore) +"uYI" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"uYL" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/aft_stairwell) +"uYM" = ( +/obj/machinery/atmospherics/binary/pump, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/test_room) +"uYP" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/thirddeck/aft_stairwell) +"uYT" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/equipment) +"uYU" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/power/smes/batteryrack, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/servers) +"uYX" = ( +/obj/structure/table/steel, +/obj/item/paper/monitorkey, +/obj/item/stamp/ce, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"uYY" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"uZh" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level2) +"uZq" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/green/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"uZt" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"uZu" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"uZx" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"uZz" = ( +/obj/machinery/ai_status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/hallway/primary/firstdeck/center) +"uZC" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"uZH" = ( +/obj/structure/table/standard, +/obj/item/scalpel/basic, +/obj/item/circular_saw, +/obj/machinery/vending/wallmed2{ + pixel_x = 24; + pixel_y = 1; + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"uZJ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 4 + }, +/obj/floor_decal/corner/grey{ + dir = 10 + }, +/obj/machinery/computer/air_control{ + dir = 1; + input_tag = "CO23p_in"; + name = "Propellent Supply Control"; + output_tag = "CO23p_out"; + sensor_name = "Tank"; + sensor_tag = "ReacEngCO23" + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"uZL" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"uZT" = ( +/obj/paint_stripe/blue, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/cargo_r) +"uZU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lightgrey/border, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"uZW" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "firingspace"; + name = "Firing Range Shields" + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/paint_stripe/red, +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/security/range) +"vaa" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"vab" = ( +/obj/floor_decal/carpet, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet, +/area/crew_quarters/cafe/upper) +"vah" = ( +/obj/structure/closet/crate/radiation_gear, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"vas" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"vau" = ( +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"vaw" = ( +/obj/structure/catwalk, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar/upper) +"vaA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"vaD" = ( +/obj/structure/stairs/north, +/turf/simulated/floor/tiled/techfloor/grid, +/area/assembly/robotics) +"vaF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"vaH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/civilian{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/dungeon_master_lounge) +"vaI" = ( +/obj/structure/table/steel_reinforced, +/obj/item/storage/box/armband/engine, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"vaJ" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 8; + sort_type = "Research and Development"; + name = "Research and Development" + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"vaO" = ( +/turf/simulated/wall/prepainted, +/area/rnd/locker) +"vaQ" = ( +/obj/floor_decal/corner/darkblue, +/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/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"vaT" = ( +/obj/machinery/atmospherics/binary/pump/on{ + name = "Scrubber to Waste"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/medical/virology/atmos) +"vbe" = ( +/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{ + dir = 4 + }, +/obj/machinery/space_heater, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"vbg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + frequency = 1380; + id_tag = "specops_dock"; + pixel_x = 32; + pixel_y = 21; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"vbh" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/rnd/entry) +"vbi" = ( +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "sierra_surgery2" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/medical/surgery/second) +"vbj" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/suits) +"vbl" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"vbm" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/item/gun/energy/laser/practice, +/obj/item/gun/energy/laser/practice, +/obj/structure/closet/crate, +/obj/random/junk, +/obj/random/junk, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/foreport) +"vbs" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"vbG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"vbQ" = ( +/obj/structure/table/standard, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Teleporter"; + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"vbR" = ( +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"vbU" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"vbV" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/scan) +"vcd" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/iaa/cobed) +"vcg" = ( +/obj/structure/closet/crate, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"vcl" = ( +/obj/structure/sign/warning/hot_exhaust, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1port) +"vcm" = ( +/obj/structure/closet/emcloset, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/holocontrol) +"vcn" = ( +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"vco" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/flora/pottedplant/smalltree, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"vcq" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "Skynet_launch"; + name = "Mech Bay"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/assembly/chargebay) +"vcv" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"vcz" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"vcA" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/aft) +"vcB" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/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/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"vcH" = ( +/obj/structure/railing/mapped, +/obj/machinery/body_scanconsole{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"vcI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/corner, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"vcJ" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/seats_place) +"vcO" = ( +/obj/machinery/door/airlock/command{ + dir = 1; + id_tag = "pmdoor"; + name = "Head of Personnel Maintaince"; + secured_wires = 1; + stripe_color = "#b7f27d" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/heads/office/hop) +"vcQ" = ( +/obj/floor_decal/corner/grey/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"vcS" = ( +/obj/structure/bed/sofa/m/black{ + dir = 6 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/carpet/green, +/area/crew_quarters/cafe) +"vcT" = ( +/obj/floor_decal/corner/darkblue/full, +/obj/floor_decal/corner/black/half{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/item/folder/blue, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"vcZ" = ( +/obj/machinery/uniform_vendor{ + dir = 4; + icon_state = "robotics" + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/central_stairwell) +"vdd" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"vdh" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/bluespace/chamber) +"vdj" = ( +/obj/machinery/door/window/brigdoor/westleft{ + req_access = newlist(); + id_tag = "iaaright"; + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"vdr" = ( +/obj/floor_decal/corner/grey/diagonal, +/obj/structure/closet/secure_closet/explorer/engineer, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration) +"vdu" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/forestarboard) +"vdv" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/full, +/obj/structure/table/steel, +/obj/item/storage/toolbox/electrical, +/obj/item/clothing/gloves/insulated, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/shield/thirddeck) +"vdx" = ( +/obj/floor_decal/spline/fancy/black/corner{ + dir = 8 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"vdz" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/interrogation) +"vdA" = ( +/obj/structure/stairs/east, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/xenobiology/storage2) +"vdC" = ( +/obj/item/device/radio/intercom/locked/ai_private{ + pixel_y = 22 + }, +/obj/machinery/flasher{ + pixel_x = -32; + pixel_y = 32 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"vdE" = ( +/obj/machinery/air_sensor/nacelle/fourth/oxygen, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d1port) +"vdI" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/corner/darkblue/mono, +/obj/structure/filingcabinet/wallcabinet{ + pixel_y = 30 + }, +/obj/structure/table/steel_reinforced, +/obj/item/device/taperecorder, +/obj/item/device/toner, +/obj/item/device/toner, +/obj/item/device/toner, +/obj/item/device/toner, +/obj/item/device/toner, +/obj/item/device/tape, +/obj/item/device/tape, +/obj/item/device/tape, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/adjutants) +"vdJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"vdL" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"vdS" = ( +/obj/item/stool, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"vdU" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"vdV" = ( +/obj/machinery/air_sensor{ + id_tag = "containment_sensor" + }, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"vdW" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"vdZ" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/machinery/light/small, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sauna) +"vec" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"veg" = ( +/obj/structure/table/rack, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/random/maintenance, +/obj/random/single/playing_cards, +/obj/machinery/door/window/westleft{ + name = "Commissary rack"; + req_access = newlist() + }, +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"vek" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"vem" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"ves" = ( +/obj/structure/table/steel, +/obj/structure/bedsheetbin, +/obj/structure/sign/poster/nyc/space_escort{ + pixel_y = 32 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/sleep/bunk) +"vez" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"veC" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/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" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"veV" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"veY" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway/aft) +"vfb" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/storage/primary) +"vfj" = ( +/obj/machinery/pipedispenser, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8; + icon_state = "techfloor_corners" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"vfn" = ( +/obj/structure/table/rack, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/window/northright{ + name = "Excavation suit storage"; + req_access = newlist() + }, +/obj/item/rig/industrial/equipped, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition/storage) +"vfs" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"vfy" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lightgrey/border, +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"vfC" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"vfD" = ( +/obj/item/modular_computer/telescreen/preset/engineering{ + pixel_y = 26 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/secure_closet/engineering_sierra/junior, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"vfI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/power/port_gen/pacman{ + sheets = 5 + }, +/obj/structure/cable/yellow, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/power) +"vfK" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"vfQ" = ( +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/corner/orange/diagonal, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/sign/warning/high_voltage{ + pixel_y = 32; + pixel_x = 32; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/prison) +"vfY" = ( +/obj/structure/closet/wardrobe/virology_white, +/obj/floor_decal/industrial/outline/yellow, +/obj/decal/cleanable/dirt, +/obj/machinery/camera/network/medbay{ + c_tag = "Virology - Decontamination"; + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology) +"vgc" = ( +/obj/item/reagent_containers/glass/bucket, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/random/soap, +/obj/item/storage/box/lights/led_neon, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/foreport) +"vgk" = ( +/obj/structure/sign/warning/airlock{ + pixel_y = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"vgl" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/meter, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/toxins) +"vgm" = ( +/obj/structure/rubble, +/obj/decal/cleanable/dirt, +/obj/random/junk, +/obj/random/junk, +/obj/decal/cleanable/filth, +/obj/decal/cleanable/greenglow, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"vgw" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/red/diagonal, +/obj/decal/cleanable/cobweb{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"vgx" = ( +/obj/machinery/radiocarbon_spectrometer, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/ship) +"vgF" = ( +/obj/floor_decal/corner/mauve/mono, +/obj/machinery/computer/ship/navigation{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"vgH" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/starboard) +"vgO" = ( +/obj/wallframe_spawn/reinforced/titanium, +/turf/simulated/floor/plating, +/area/shuttle/escape_pod/escape_pod5/station) +"vgU" = ( +/obj/machinery/door/airlock/hatch{ + autoset_access = 0; + dir = 4; + name = "Cockpit"; + req_access = list("ACCESS_EXPEDITION_SHUTTLE") + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cockpit) +"vgV" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/virology, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/item/taperoll/engineering/applied, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology/ward) +"vgW" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/floor_decal/techfloor/corner, +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/device/radio/intercom/locked/ai_private{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"vha" = ( +/obj/floor_decal/corner/red, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"vhj" = ( +/obj/structure/catwalk, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"vho" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"vhv" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"vhy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"vhE" = ( +/obj/machinery/atmospherics/valve/shutoff/supply, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"vhF" = ( +/obj/item/storage/toolbox/mechanical, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftport) +"vhH" = ( +/obj/machinery/door/blast/regular/escape_pod{ + id_tag = "escape_pod_3" + }, +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/foreport) +"vhK" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/aft) +"vhP" = ( +/obj/machinery/seed_storage/garden, +/obj/machinery/button/blast_door{ + id_tag = "abahyd_blast"; + name = "Hydro Blast Door"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/maintenance/abandoned_hydroponics) +"vhV" = ( +/obj/random/obstruction, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"vhZ" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"via" = ( +/obj/structure/filingcabinet/chestdrawer{ + dir = 1 + }, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/heads/office/cmo/cobed) +"vif" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"vig" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 8 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod2/station) +"vii" = ( +/obj/structure/sign/warning/high_voltage{ + dir = 1 + }, +/turf/simulated/wall/prepainted, +/area/maintenance/solar) +"vik" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod2/station) +"vio" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"vir" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/deliveryChute{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"vit" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/machinery/disposal/small{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/sign/warning/airlock{ + color = "#ff9900"; + name = "\improper WAY TO SPACE"; + dir = 4; + pixel_x = -32 + }, +/obj/floor_decal/corner/black/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation) +"viv" = ( +/obj/shuttle_landmark/sierra/deck2/guppy, +/turf/space, +/area/space) +"viz" = ( +/obj/structure/bed/chair/armchair/blue, +/obj/landmark/start{ + name = "Internal Affairs Agent" + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"viI" = ( +/obj/structure/sign/warning/vent_port{ + pixel_y = 32 + }, +/obj/floor_decal/corner/green/bordercorner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"viJ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"viL" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/thirddeck) +"viM" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/window/westleft{ + name = "Commissary rack"; + req_access = newlist(); + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/floor_decal/corner/black/full, +/obj/floor_decal/industrial/outline/yellow, +/obj/random/single/lighter, +/turf/simulated/floor/tiled, +/area/crew_quarters/commissary) +"viS" = ( +/obj/item/trash/liquidfood, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"viU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"vja" = ( +/turf/simulated/wall/r_wall/hull{ + can_open = 1 + }, +/area/maintenance/firstdeck/foreport) +"vjl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"vjn" = ( +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/ion, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"vjs" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/nt_white, +/obj/machinery/door/firedoor, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"vjt" = ( +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"vjE" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/item/device/binoculars, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/punitelli{ + pixel_y = 11 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"vjF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/airlock) +"vjJ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"vjK" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod1/station) +"vjM" = ( +/obj/structure/largecrate, +/obj/random/junkfood, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"vjP" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"vjQ" = ( +/obj/machinery/space_heater, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"vke" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/center) +"vkf" = ( +/obj/structure/table/standard, +/obj/item/device/scanner/reagent, +/obj/item/device/scanner/spectrometer/adv, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/equipment) +"vku" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/paper/sierra, +/obj/structure/cable/green, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"vky" = ( +/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 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/carpet, +/area/chapel/main) +"vkB" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/docking) +"vkD" = ( +/obj/machinery/door/airlock/mining{ + id_tag = null; + name = "Supply Office"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/office) +"vkF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"vkI" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/civilian{ + name = "Toilet"; + secured_wires = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/captain) +"vkK" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/seconddeck/emergency) +"vkL" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/prepainted, +/area/security/sierra/breakroom) +"vkR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"vkV" = ( +/obj/floor_decal/corner/black{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border, +/obj/structure/bed/chair/padded/teal{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"vkW" = ( +/obj/machinery/hologram/holopad/longrange, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/random_multi/single_item/space_rabbit, +/obj/structure/handrail{ + dir = 1; + pixel_y = -6 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/seats_place) +"vlb" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular/open{ + id_tag = "xenobioa2"; + name = "Containment Blast Doors" + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level2) +"vlh" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/structure/closet/crate, +/obj/decal/cleanable/cobweb{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"vln" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/lime/border{ + dir = 5 + }, +/obj/structure/sign/warning/pods/east{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"vlq" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"vls" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/standard, +/obj/machinery/recharger, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/office) +"vlt" = ( +/obj/structure/table/standard, +/obj/item/defibrillator/loaded, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/ward) +"vlw" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 10 + }, +/obj/floor_decal/industrial/danger{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/command/bsa) +"vlx" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/sign/poster{ + pixel_y = 32 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"vlH" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/mortus{ + dir = 4; + name = "Chapel" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/mortuary) +"vlK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/docking) +"vlL" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"vlO" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/catwalk_plated/dark, +/obj/structure/disposalpipe/junction/mirrored{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/bridge/hallway) +"vlT" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/petrov/airlock) +"vlW" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/open, +/area/space) +"vmb" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"vmf" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"vmp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/machinery/light, +/obj/machinery/button/ignition{ + id_tag = "Isocell2"; + pixel_x = -6; + pixel_y = -25 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"vmq" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"vmx" = ( +/obj/structure/rubble/war, +/obj/structure/rubble/war, +/obj/structure/rubble/war, +/obj/structure/rubble/war, +/obj/fluid_mapped, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"vmy" = ( +/obj/floor_decal/borderfloorblack, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/darkblue/border, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"vmB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/aft_stairwell) +"vmE" = ( +/obj/floor_decal/plaque, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/main) +"vmL" = ( +/obj/floor_decal/corner/yellow/half, +/obj/structure/disposalpipe/segment, +/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" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"vmN" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"vmR" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftstarboard) +"vna" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/mining, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition) +"vnc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"vnl" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/closet/firecloset, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"vnm" = ( +/obj/structure/mattress/dirty, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"vnn" = ( +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"vno" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"vnr" = ( +/obj/machinery/door/window/westleft{ + name = "Autopsy"; + dir = 4 + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"vnt" = ( +/obj/machinery/computer/modular/preset/library{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"vnD" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"vnK" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"vnL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/obj/structure/table/steel{ + flipped = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"vnV" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"vnW" = ( +/obj/machinery/sleeper/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/vacant/infirmary) +"voa" = ( +/obj/machinery/vending/security{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/obj/machinery/camera/network/security{ + c_tag = "Longterm - Checkpoint"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/brig) +"vog" = ( +/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/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/port) +"voh" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"voi" = ( +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/corner/lightgrey/mono, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/docking) +"vok" = ( +/obj/item/taperoll/engineering/applied, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"voo" = ( +/obj/structure/table/glass, +/obj/item/device/toner, +/obj/item/device/toner, +/obj/item/device/toner, +/obj/item/device/toner, +/obj/item/device/toner, +/obj/item/device/taperecorder, +/obj/item/device/taperecorder, +/obj/item/device/tape, +/obj/item/pen/multi, +/obj/item/pen/multi, +/obj/item/paper_bin, +/obj/item/device/tape, +/obj/item/device/tape, +/obj/structure/window/reinforced, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"vox" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"voy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"voA" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/subspace/crystal, +/obj/item/stock_parts/subspace/crystal, +/obj/item/stock_parts/subspace/crystal, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/tcommsat/storage) +"voC" = ( +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "do_windows" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters/open{ + name = "QM Office Shutters"; + id_tag = "qm_office" + }, +/turf/simulated/floor/plating, +/area/quartermaster/deckofficer) +"voL" = ( +/obj/floor_decal/corner/red/border, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"voO" = ( +/obj/machinery/power/apc/charon{ + dir = 1; + name = "north bump"; + pixel_y = 24; + req_access = list(list("ACCESS_EXPLORER","ACCESS_ENGINEERING")) + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/b_green/bordercorner2{ + dir = 4 + }, +/obj/structure/bed/chair/shuttle/green{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/airlock) +"voP" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/reagent_containers/glass/bucket, +/obj/decal/cleanable/cobweb2, +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"voQ" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/towel/fleece, +/obj/item/towel/fleece, +/obj/item/towel/fleece, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"voS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/machinery/navbeacon/sierra/TD_centralhallway1, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"voT" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"vpe" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/table/rack, +/obj/item/rig/command/hop/equipped, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/blue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"vpm" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"vpp" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"vpr" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"vpJ" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/obj/floor_decal/carpet/purple{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/main) +"vpQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"vqc" = ( +/obj/floor_decal/industrial/traffic/corner{ + detail_color = "#a2819e"; + color = "#a2819e" + }, +/turf/simulated/floor/tiled/white, +/area/rnd/office) +"vqf" = ( +/obj/machinery/seed_extractor, +/turf/simulated/floor/tiled/monotile, +/area/maintenance/abandoned_hydroponics) +"vqg" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/machinery/papershredder, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"vqq" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"vqL" = ( +/obj/structure/table/standard, +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/obj/item/paper_bin, +/obj/item/pen{ + pixel_y = 4 + }, +/obj/item/pen/red, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"vqO" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"vqR" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 4; + name = "CO2 Supply"; + target_pressure = 10000 + }, +/obj/structure/closet/hydrant{ + pixel_y = -28 + }, +/obj/machinery/camera/network/hangar{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"vrd" = ( +/obj/structure/bed/chair/shuttle{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"vre" = ( +/obj/paint_stripe/red, +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/hallway/aft) +"vrg" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + dir = 1; + id_tag = "guppy_shuttle_pump_out_internal" + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/machinery/airlock_sensor{ + frequency = 1331; + id_tag = "guppy_shuttle_sensor"; + master_tag = "guppy_shuttle"; + pixel_y = 26; + pixel_x = 25 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/guppy_hangar/start) +"vri" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/computer/modular/preset/cardslot/command, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"vru" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 6 + }, +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d3port) +"vrx" = ( +/obj/machinery/power/port_gen/pacman{ + sheets = 25 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"vry" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/navbeacon/sierra/TD_fore6, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"vrD" = ( +/obj/machinery/status_display, +/obj/paint_stripe/turquoise, +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai) +"vrE" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/conveyor{ + dir = 2; + id = "charon_cargo_out"; + name = "charon interior conveyor belt" + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_l) +"vrF" = ( +/obj/machinery/door/airlock/research{ + name = "Spectrometry Lab" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/ship) +"vrG" = ( +/obj/structure/bed/chair/office/comfy/blue, +/obj/landmark/start{ + name = "Internal Affairs Agent" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa/high_sec) +"vrS" = ( +/obj/structure/bed, +/obj/item/bedsheet/brown, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/aftstarboard) +"vrX" = ( +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"vsd" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"vsh" = ( +/obj/item/storage/mirror{ + pixel_x = -26; + pixel_y = 1 + }, +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/gym) +"vsn" = ( +/obj/structure/table/steel_reinforced, +/obj/item/wrench, +/obj/item/storage/mre/random, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal, +/obj/floor_decal/corner/black/full, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/command/bsa) +"vso" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/holoplant, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"vsz" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 8 + }, +/obj/structure/bookcase/manuals/security, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"vsB" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/glass/civilian{ + dir = 4 + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown1_1" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/center) +"vsE" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"vsF" = ( +/obj/structure/ladder/up, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"vsI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"vsJ" = ( +/obj/structure/bed/chair/padded/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"vsL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"vsN" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 6 + }, +/obj/structure/table/standard, +/obj/item/storage/box/cups, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"vsO" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 5 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"vsX" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_2" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/aft) +"vtl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/hologram/holopad{ + pixel_y = 16; + pixel_x = 16 + }, +/obj/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"vtp" = ( +/obj/machinery/door/airlock/command{ + id_tag = "iaadoorright"; + name = "Internal Affairs Agent"; + secured_wires = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa) +"vtr" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/hallway) +"vts" = ( +/obj/structure/lattice, +/obj/random/trash, +/turf/simulated/open, +/area/maintenance/seconddeck/aftport) +"vtD" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/obj/machinery/meter, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"vtH" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"vtT" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/closet/secure_closet/personal, +/obj/machinery/light, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"vtZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"vuc" = ( +/obj/structure/lattice, +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d1starboard) +"vud" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "td_port" + }, +/obj/floor_decal/industrial/warning/cee, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"vuf" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/book/manual/anomaly_testing, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"vut" = ( +/obj/structure/table/rack, +/obj/item/storage/firstaid/radiation{ + pixel_y = 10 + }, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/stab{ + pixel_y = -10 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/medical/equipstorage) +"vuu" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/grey, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "bar<-cafe"; + name = "Bar Shutters" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/bar) +"vuA" = ( +/obj/floor_decal/corner/paleblue/bordercorner, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"vuC" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell3) +"vuI" = ( +/obj/floor_decal/industrial/hatch/red, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"vuL" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_2" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/fore) +"vuW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"vuZ" = ( +/obj/structure/sign/warning/fire{ + dir = 1; + pixel_y = -40 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"vvb" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ + dir = 4; + internal_pressure_bound = 35000; + internal_pressure_bound_default = 35000 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d1port) +"vvj" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/maintenance{ + id_tag = "crusher"; + name = "Compactor Zone" + }, +/obj/item/taperoll/engineering/applied, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"vvp" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/civilian{ + dir = 4; + name = "Restroom" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/sleep/cryo/bridge) +"vvs" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralport) +"vvw" = ( +/obj/floor_decal/solarpanel, +/obj/machinery/power/solar{ + id = "auxsolarsport"; + name = "Aft Port Solar Array" + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/airless, +/area/solar/port) +"vvz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"vvB" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"vvM" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/obj/structure/closet/secure_closet/bar_sierra, +/obj/item/flame/lighter/zippo/brass, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/item/storage/candle_box, +/obj/item/storage/candle_box, +/obj/item/storage/box/lights/led_neon, +/obj/item/storage/box/lights/led_neon, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/item/material/clipboard, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/bar/cobed) +"vvO" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/empty, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"vvR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"vvV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"vvX" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/structure/fitness/weightlifter, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"vwa" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/port) +"vwi" = ( +/obj/fluid_mapped, +/mob/living/simple_animal/aquatic/fish/grump, +/obj/structure/flora/seaweed/mid, +/turf/simulated/floor/beach/sand, +/area/rnd/xenobiology/level2) +"vwm" = ( +/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/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/random/ironing_board_structure, +/obj/item/ironing_iron, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"vwn" = ( +/obj/structure/table/standard, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"vwv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/item/bedsheet/brown, +/obj/item/beartrap{ + anchored = 1; + deployed = 1; + icon_state = "beartrap1" + }, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"vwy" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/seconddeck/aftstarboard) +"vwE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"vwH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/corner/grey/border, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"vwI" = ( +/obj/structure/flora/pottedplant/orientaltree, +/obj/floor_decal/corner/blue/three_quarters{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"vwP" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/port) +"vxa" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"vxc" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"vxd" = ( +/obj/structure/sign/nanotrasen{ + dir = 1 + }, +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/docking) +"vxf" = ( +/obj/structure/bed/sofa/r/black{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/sleep/cryo/south) +"vxn" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "eng3_inner"; + name = "First Deck Starboard Nacelle Access" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/thruster/d1starboard) +"vxq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/rnd/xenobiology/entry2) +"vxI" = ( +/obj/machinery/power/solar_control{ + id = "auxsolarstrbbridge"; + name = "Bridge Solar Control"; + track = 1 + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Solar Control - Bridge Deck - Starboard" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/solar/bridge_starboard) +"vxN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, +/obj/floor_decal/corner/yellow/half{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"vxP" = ( +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"vxW" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + req_access = newlist() + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftport) +"vxY" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + frequency = 1379; + id_tag = "solar_bridge_port_inner"; + locked = 1; + name = "Engineering External Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar/bridge_port) +"vxZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + controlled = 0; + dir = 1; + internal_pressure_bound = 35000; + internal_pressure_bound_default = 35000; + pressure_checks = 2; + pressure_checks_default = 2; + use_power = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/thruster/d3port) +"vya" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"vyb" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized/full, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/ce) +"vyd" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/center) +"vyf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/eva) +"vyh" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"vyo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/corner/black/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/meeting_room) +"vyr" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/subspace/analyzer, +/obj/item/stock_parts/subspace/analyzer, +/obj/item/stock_parts/subspace/analyzer, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/tcommsat/storage) +"vyy" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/machinery/button/alternate/door/bolts{ + dir = 1; + id_tag = "toilet_eng_2"; + name = "Lock"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head/deck3) +"vyz" = ( +/obj/machinery/door/airlock/vault/bolted{ + name = "AI Core External Access" + }, +/obj/item/airlock_brace{ + req_access = list("ACCESS_BRIDGE") + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/turret_protected/ai_maint) +"vyF" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"vyI" = ( +/obj/structure/closet{ + anchored = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"vyK" = ( +/obj/structure/catwalk, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"vyS" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/wallframe_spawn/reinforced/polarized/full, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/ce) +"vzp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"vzx" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"vzz" = ( +/obj/decal/cleanable/dirt, +/obj/structure/closet/cabinet, +/obj/machinery/light_construct/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/vacant/sauna) +"vzD" = ( +/obj/floor_decal/corner/purple{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"vzJ" = ( +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#4c535b" + }, +/area/quartermaster/hangar/upper) +"vzO" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"vzX" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/airless, +/area/space) +"vAf" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/meter, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"vAk" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/holocontrol) +"vAp" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black/corner, +/obj/floor_decal/spline/fancy/black/corner{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black{ + 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" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"vAH" = ( +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"vAJ" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 1; + target_pressure = 15000 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"vAL" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"vAM" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 5 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"vAP" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"vAU" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"vAV" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"vBb" = ( +/obj/machinery/washing_machine, +/obj/structure/window/basic{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"vBe" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"vBi" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"vBj" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/coatrack, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"vBm" = ( +/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" + }, +/obj/structure/disposalpipe/segment, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"vBp" = ( +/obj/structure/sign/poster, +/turf/simulated/wall/prepainted, +/area/vacant/utility) +"vBw" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/purple/bordercorner2, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"vBB" = ( +/obj/machinery/keycard_auth/sierra{ + pixel_x = -24 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -24; + pixel_y = -8 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"vBC" = ( +/obj/machinery/recharge_station, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"vBH" = ( +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"vBM" = ( +/obj/machinery/door/blast/regular/escape_pod{ + id_tag = "escape_pod_9" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/maintenance/exterior) +"vBP" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/window/boron_reinforced{ + dir = 4 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d1starboard) +"vBY" = ( +/obj/structure/cable, +/obj/machinery/power/smes/buildable{ + RCon_tag = "Solar - Bridge Starboard" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/bridge_starboard) +"vCd" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/exploration/eva) +"vCq" = ( +/obj/machinery/seed_extractor, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"vCu" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/storage) +"vCB" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"vCC" = ( +/obj/structure/flora/ausbushes/palebush, +/obj/floor_decal/spline/fancy/black{ + dir = 8 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"vCG" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/green/bordercorner2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light_construct{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"vCI" = ( +/obj/machinery/vending/wallmed2{ + dir = 8; + pixel_x = 23 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod3/station) +"vCK" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/door/blast/regular{ + id_tag = "d4portnacelle" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"vCR" = ( +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/yellow/bordercorner, +/turf/simulated/floor/tiled, +/area/storage/primary) +"vCS" = ( +/obj/structure/lattice, +/turf/space, +/area/space) +"vCV" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/civilian{ + autoset_access = 0; + name = "Long Term Bathroom" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/prison) +"vDa" = ( +/obj/machinery/suit_cycler/engineering, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"vDg" = ( +/obj/structure/table/standard, +/obj/item/folder/nt, +/obj/machinery/button/blast_door{ + id_tag = "xenobio_desk"; + name = "Containment Blast Doors"; + req_access = list("ACCESS_RESEARCH"); + dir = 8; + pixel_x = 21 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"vDj" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/regular/open{ + id_tag = "PetrovShield"; + name = "Petrov Blast Shutters" + }, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/plating, +/area/shuttle/petrov/eva) +"vDm" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"vDr" = ( +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"vDv" = ( +/obj/wallframe_spawn/reinforced_phoron/hull, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"vDB" = ( +/obj/structure/grille/broken, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"vDC" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "eng_QAW"; + name = "Quick Access Warehouse" + }, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "eng_lockdown"; + name = "Engineering Lockdown" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"vDK" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/monotile, +/area/rnd/office) +"vDN" = ( +/obj/structure/catwalk, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "td_port"; + name = "exterior access button"; + pixel_y = 24; + req_access = list("ACCESS_EXTERNAL"); + pixel_x = -32 + }, +/turf/simulated/open, +/area/space) +"vDO" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"vDS" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"vDT" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"vDV" = ( +/obj/structure/table/rack, +/obj/item/storage/mre/random, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"vDW" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "mine_warehouse"; + name = "Storage Shutters" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"vDY" = ( +/obj/decal/cleanable/dirt, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/utility) +"vEe" = ( +/turf/simulated/floor/pool, +/area/crew_quarters/sauna) +"vEf" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/foreport) +"vEg" = ( +/obj/structure/closet/chefcloset_sierra, +/obj/floor_decal/corner/grey{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"vEq" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/quartermaster/hangar_stairs) +"vEv" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/main) +"vED" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/sleeper) +"vEO" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 4; + id_tag = "td_fore_starboard_pump" + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 4; + display_name = "Second Deck Auxillary Dock"; + id_tag = "td_fore_starboard"; + name = "Third Deck Fore Starboard Airlock Controller"; + pixel_x = -20; + req_access = list("ACCESS_EXTERNAL") + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"vEU" = ( +/obj/machinery/door/window/eastleft, +/obj/decal/cleanable/dirt, +/obj/structure/barricade, +/turf/simulated/floor/plating, +/area/vacant/sauna) +"vEW" = ( +/obj/paint/hull, +/turf/simulated/wall/ocp_wall, +/area/rnd/toxins) +"vEX" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/structure/sign/directions/science{ + pixel_y = 24; + dir = 4 + }, +/obj/structure/sign/directions/infirmary{ + dir = 4; + pixel_y = 31 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"vFf" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 6 + }, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/sticky_pad/random, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/table/steel, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_r) +"vFk" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/item/tape_roll, +/obj/item/storage/toolbox/mechanical, +/obj/item/module/power_control, +/obj/item/stack/material/steel/ten, +/obj/item/stack/material/steel/ten, +/obj/item/sealgen_case, +/obj/item/inflatable_dispenser, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/power) +"vFq" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/thirddeck/fore) +"vFr" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/incinerator) +"vFt" = ( +/obj/machinery/atmospherics/unary/tank/hydrogen, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"vFu" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"vFw" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/random/closet, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"vFA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"vFB" = ( +/obj/structure/mopbucket, +/obj/item/mop, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/foreport) +"vFE" = ( +/obj/machinery/sleeper, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"vFH" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + id_tag = "cmodoor"; + name = "Chief Medical Officer Dorm"; + secured_wires = 1; + stripe_color = "#00e1ff"; + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/cmo/cobed) +"vFJ" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/starboard) +"vFO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"vFR" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"vGb" = ( +/obj/structure/table/standard, +/obj/structure/bedsheetbin, +/obj/structure/sign/poster{ + pixel_y = -32 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dormintories) +"vGc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 5 + }, +/turf/simulated/wall/r_wall/hull, +/area/thruster/d1port) +"vGk" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/engineering{ + name = "Quick Access Warehouse"; + dir = 4 + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "eng_lockdown"; + name = "Engineering Lockdown" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"vGl" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"vGm" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"vGn" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"vGv" = ( +/obj/structure/sign/directions/bridge{ + pixel_y = 24; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/central_stairwell) +"vGI" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"vGR" = ( +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ + id_tag = "escape_pod_9_berth"; + name = "escape pod nine berth controller"; + pixel_x = -32; + pixel_y = -28; + tag_door = "escape_pod_9_berth_hatch"; + frequency = 1380; + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/steeldecal/steel_decals_central4, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"vGU" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"vGX" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/cryo/thirddeck) +"vGY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"vHa" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/research{ + name = "Development Laboratory"; + req_access = newlist() + }, +/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/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/rnd/development) +"vHc" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "xenobio_surg"; + name = "Space Shutters"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level1) +"vHe" = ( +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = -32 + }, +/obj/decal/cleanable/dirt, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/structure/filingcabinet/chestdrawer, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/item/folder/red, +/turf/simulated/floor/lino, +/area/maintenance/firstdeck/forestarboard) +"vHg" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8; + frequency = 1441; + id = "test_xenoflora_in"; + use_power = 1 + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/xenoflora) +"vHm" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/recharge_station, +/obj/floor_decal/techfloor/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"vHM" = ( +/obj/floor_decal/corner/purple/half{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"vHP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/civilian{ + id_tag = "toilet2"; + name = "Stall Two" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"vHY" = ( +/obj/machinery/door/firedoor, +/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" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/fore) +"vId" = ( +/obj/random/vendor, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/lime/border{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"vIj" = ( +/obj/structure/table/marble, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/machinery/reagent_temperature, +/obj/item/reagent_containers/food/drinks/milk{ + pixel_x = -1 + }, +/obj/item/reagent_containers/food/drinks/soymilk{ + pixel_x = 6 + }, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/prison) +"vIq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"vIw" = ( +/turf/simulated/open, +/area/hallway/primary/thirddeck/central_stairwell) +"vIG" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"vIL" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/mining, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition/storage) +"vIP" = ( +/obj/floor_decal/corner/blue{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"vIX" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod4/station) +"vJb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"vJj" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "hangar_checkpoint_shutters"; + name = "Hangar Deck Checkpoint Shutters"; + opacity = 0 + }, +/obj/structure/cable/green, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/security/sierra/dockcheck) +"vJu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"vJA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 6 + }, +/obj/machinery/light, +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/folder/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"vJC" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/aft) +"vJD" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/industrial/warning/cee, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"vJE" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal{ + pixel_y = 11; + pixel_x = 7 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal{ + pixel_y = 2; + pixel_x = -2 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal{ + pixel_y = -3; + pixel_x = 6 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"vJQ" = ( +/obj/floor_decal/ntlogo{ + dir = 8 + }, +/obj/landmark/start{ + name = "Research Director" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/rnd/entry) +"vJS" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"vJV" = ( +/obj/machinery/door/airlock/maintenance, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/shutters/open{ + dir = 2; + id_tag = "infimary_locker_room_lockdown"; + name = "Infirmary Locker Room Shutters" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/locker) +"vKa" = ( +/obj/floor_decal/corner/purple{ + pixel_y = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/janitor) +"vKg" = ( +/obj/machinery/r_n_d/server/core, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/camera/network/research{ + c_tag = "Research - Servers" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/rnd/servers) +"vKD" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"vKI" = ( +/obj/machinery/door/airlock/glass{ + autoclose = 0; + frequency = 1379; + heat_proof = 1; + id_tag = "incinerator_airlock_exterior"; + locked = 1; + name = "Mixing Room Exterior Airlock" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"vKK" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Cadets"; + dir = 8 + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"vKU" = ( +/obj/machinery/atmospherics/unary/heat_exchanger{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"vKY" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/wallframe_spawn/reinforced/polarized{ + id = "cap_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/captain) +"vLh" = ( +/obj/machinery/status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/hallway/primary/fourthdeck/center) +"vLj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"vLr" = ( +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/machinery/camera/network/bridge_deck{ + dir = 8; + c_tag = "Bridge Deck - Central Hallway - Port" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/bridge) +"vLt" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"vLv" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/red/bordercorner, +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"vLG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/turf/simulated/wall/ocp_wall{ + heat_capacity = 412500 + }, +/area/thruster/d1port) +"vLM" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/purple, +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"vLT" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/table/rack, +/obj/item/stack/material/plastic/fifty{ + amount = 30 + }, +/obj/item/stack/material/aluminium{ + amount = 30 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"vMe" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/command{ + name = "Head Of Security"; + req_access = newlist(); + secured_wires = 1; + stripe_color = "#9d2300"; + dir = 1 + }, +/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/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/hos) +"vMg" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"vMl" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/grass/cut, +/area/hallway/primary/bridgedeck/center) +"vMm" = ( +/obj/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"vMx" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d3port) +"vMB" = ( +/obj/floor_decal/corner/red/half{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/industrial/danger/corner, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"vME" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"vMR" = ( +/obj/item/reagent_containers/food/snacks/egg/lizard{ + color = "black" + }, +/obj/structure/table/rack, +/obj/item/bedsheet, +/obj/item/reagent_containers/food/snacks/egg/lizard, +/obj/item/reagent_containers/food/snacks/egg/lizard{ + color = "black" + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"vMS" = ( +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/structure/hygiene/shower, +/obj/structure/closet/walllocker{ + pixel_x = 28 + }, +/obj/random/soap, +/obj/item/towel/random, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/item/towel/random, +/obj/item/flame/lighter/zippo/random, +/obj/item/haircomb/random, +/obj/item/lipstick/random, +/obj/random/soap, +/turf/simulated/floor/tiled/freezer, +/area/vacant/cargo) +"vMX" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"vMY" = ( +/obj/floor_decal/spline/plain/brown{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/item/hand_labeler, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/actor) +"vNe" = ( +/obj/structure/closet/secure_closet/RD_sierra, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/keycard_auth/sierra{ + pixel_x = 3; + pixel_y = 21 + }, +/obj/machinery/button/windowtint{ + id = "rd_windows"; + pixel_x = 12; + pixel_y = 21; + range = 11 + }, +/obj/machinery/button/alternate/door{ + desc = "A remote control-switch for the office door."; + id_tag = "rddoor"; + name = "Office Door Control"; + pixel_x = -10; + pixel_y = 21; + req_access = list("ACCESS_RESEARCH_DIRECTOR") + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"vNl" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/storage2) +"vNm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"vNq" = ( +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"vNt" = ( +/obj/decal/cleanable/cobweb2{ + dir = 4 + }, +/obj/random/vendor, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"vNv" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/blue, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"vNw" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/red/bordercorner2, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/table/steel, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/stamp/ward, +/obj/item/device/eftpos{ + eftpos_name = "Warden's EFTPOS scanner" + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"vNz" = ( +/obj/item/device/radio/intercom/department/medbay{ + dir = 4; + pixel_x = -22 + }, +/obj/floor_decal/borderfloor{ + color = null; + dir = 8 + }, +/obj/floor_decal/corner/blue/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + color = null; + dir = 10 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 10 + }, +/obj/machinery/sleeper/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"vNC" = ( +/obj/structure/table/standard, +/obj/item/deck/cards, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/maintenance/firstdeck/aftstarboard) +"vNF" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/space, +/area/space) +"vNH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/table/woodentable/walnut, +/obj/item/storage/box/donkpocket_dessert, +/turf/simulated/floor/wood/walnut, +/area/vacant/gambling) +"vNM" = ( +/obj/machinery/chemical_dispenser/full, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"vNO" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"vOs" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + 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/door/airlock/civilian{ + name = "Actor's Room" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/actor) +"vOy" = ( +/obj/structure/railing/mapped, +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"vOC" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 10 + }, +/obj/machinery/photocopier, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"vOF" = ( +/obj/machinery/air_sensor/nacelle/second/oxygen, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d3port) +"vON" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"vOQ" = ( +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"vPd" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "fuel4p_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d1port) +"vPj" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/engine_smes) +"vPu" = ( +/turf/simulated/open, +/area/maintenance/firstdeck/aftstarboard) +"vPw" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/security{ + name = "Forensics" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/forensic/lab) +"vPH" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/reinforced, +/area/maintenance/fourthdeck/foreport) +"vPI" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"vPL" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/yellow/three_quarters, +/obj/item/storage/belt/utility{ + pixel_y = 11; + pixel_x = 2 + }, +/obj/item/storage/belt/utility{ + pixel_y = 6; + pixel_x = 3 + }, +/obj/item/storage/belt/utility, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"vPO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"vQb" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_11_hatch"; + name = "Escape Pod Eleven Hatch" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod11/station) +"vQd" = ( +/obj/structure/table/steel_reinforced, +/obj/item/folder/nt, +/obj/item/folder/nt{ + pixel_y = 4; + pixel_x = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"vQj" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "hydroponics_space"; + name = "Space Shutters"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/hydroponics) +"vQl" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"vQo" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + frequency = 1379; + id_tag = "solar_bridge_inner"; + locked = 1; + name = "Engineering External Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar/bridge_starboard) +"vQu" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/machinery/light, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"vQv" = ( +/obj/floor_decal/borderfloorblack, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/bunk) +"vQJ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/multi_tile/maintenance, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/foreport) +"vQO" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/drone_pad{ + desc = "A small pad for transport drones to deposit their payloads at. Requires network reestablishment after Bluespace jump via multitool" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"vQU" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/utility) +"vQW" = ( +/obj/floor_decal/corner/red/half{ + dir = 4 + }, +/obj/floor_decal/corner/red{ + dir = 9 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/central_stairwell) +"vRa" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/nano) +"vRd" = ( +/obj/floor_decal/corner/black{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/bed/chair/comfy/teal, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"vRg" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/table/standard, +/obj/floor_decal/corner/grey/diagonal, +/obj/item/storage/toolbox/mechanical, +/turf/simulated/floor/tiled, +/area/rnd/research) +"vRh" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/floor_decal/techfloor/orange{ + dir = 10 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"vRl" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/shield/thirddeck) +"vRo" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"vRw" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/green, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"vRA" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"vRU" = ( +/obj/machinery/status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/waterstore) +"vRY" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"vSg" = ( +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/rnd/entry) +"vSl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green, +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"vSn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/decal/cleanable/greenglow, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/fuelbay) +"vSo" = ( +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"vSp" = ( +/obj/structure/table/standard, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/item/storage/toolbox/electrical, +/obj/random/tech_supply, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/corner/yellow/mono, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"vSw" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - Containment Control"; + dir = 8; + network = list("Research","Miscellaneous Reseach") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/containment) +"vSE" = ( +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"vSF" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_2" + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/center) +"vSJ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"vSO" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"vSQ" = ( +/obj/structure/catwalk, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/exploration_shuttle/power) +"vSR" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"vSZ" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"vTd" = ( +/obj/machinery/computer/ship/navigation{ + dir = 4; + icon_state = "computer" + }, +/obj/floor_decal/corner/black/full, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/command/bsa) +"vTf" = ( +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/obj/structure/table/marble, +/obj/machinery/fabricator/micro/bartender{ + pixel_x = 4 + }, +/obj/item/stack/material/glass/ten{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/item/stack/material/aluminium/ten{ + pixel_y = -4 + }, +/obj/item/stack/material/plastic/ten{ + pixel_x = -4; + pixel_y = -4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"vTg" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/equipment) +"vTj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"vTn" = ( +/obj/machinery/shield_diffuser, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_10_berth_hatch"; + name = "Escape Pod Ten" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralport) +"vTp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod5/station) +"vTq" = ( +/obj/machinery/mech_recharger, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot, +/turf/simulated/floor/bluegrid, +/area/assembly/chargebay) +"vTs" = ( +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"vTy" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/glass/civilian{ + dir = 8; + name = "Hallway" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/aft_stairwell) +"vTB" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/cable/green{ + 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/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/structure/sign/xenobio_1{ + dir = 8; + pixel_y = -32 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/hangar_stairs/upper) +"vTC" = ( +/obj/structure/table/standard, +/obj/random/single/playing_cards, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"vTJ" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/reagent_dispensers/watertank, +/obj/structure/cable/green, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/cistern) +"vTQ" = ( +/obj/structure/railing/mapped, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"vTY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"vTZ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"vUf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/sleep/bunk) +"vUh" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 1; + icon_state = "map" + }, +/turf/simulated/floor/plating, +/area/engineering/fuelbay) +"vUn" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/valve/shutoff/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals_central6{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/xenobio) +"vUq" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/substation/bridgedeck) +"vUs" = ( +/obj/floor_decal/techfloor/orange, +/obj/machinery/conveyor{ + dir = 4; + id = "compactor" + }, +/obj/machinery/recycler, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/compactor) +"vUu" = ( +/obj/random/maintenance, +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"vUv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/filingcabinet/wallcabinet{ + pixel_y = -30 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/machinery/light/small, +/obj/machinery/camera/network/security{ + c_tag = "Security - Evidences"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/security/sierra/evidence) +"vUB" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"vUL" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"vUO" = ( +/obj/floor_decal/spline/fancy/wood/corner, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"vUQ" = ( +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"vUU" = ( +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/mahogany, +/area/security/range) +"vUZ" = ( +/obj/structure/table/marble, +/obj/machinery/reagentgrinder/juicer{ + pixel_y = 8 + }, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_y = 6 + }, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_y = 6 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"vVb" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"vVc" = ( +/obj/structure/railing/mapped, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"vVg" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/firstdeck/centralport) +"vVo" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/open, +/area/rnd/xenobiology/level1) +"vVu" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/sierra/hallway) +"vVv" = ( +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/wallframe_spawn/reinforced/polarized/full{ + id = "hop_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/hop) +"vVx" = ( +/obj/machinery/sleeper/survival_pod{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/closet/medical_wall{ + pixel_x = -32 + }, +/obj/item/storage/firstaid/regular, +/obj/item/storage/med_pouch/oxyloss, +/obj/item/storage/med_pouch/oxyloss, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/steel_ridged, +/area/guppy_hangar/start) +"vVM" = ( +/obj/structure/closet/crate/trashcart, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"vVN" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/structure/closet/secure_closet/hos/sierra, +/obj/item/device/binoculars, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/hos) +"vVR" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/airlock_canisters) +"vVY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"vWk" = ( +/obj/floor_decal/spline/fancy/wood/corner, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"vWm" = ( +/obj/structure/cable/green, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"vWn" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/recharge_station, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Syntetics Compartment"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"vWo" = ( +/obj/machinery/atmospherics/pipe/zpipe/up/supply, +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers, +/obj/structure/cable{ + d1 = 16; + d2 = 0; + icon_state = "16-0" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/reinforced, +/area/maintenance/firstdeck/forestarboard) +"vWr" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/computer/upload/robot{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_cyborg_upload) +"vWt" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/black/border, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation) +"vWu" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + id = "CO22p_in"; + injecting = 1; + use_power = 1 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/thruster/d3port) +"vWv" = ( +/obj/floor_decal/industrial/hatch/red, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"vWx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the engine charging port."; + id_tag = "SupermatterPort"; + name = "Reactor Blast Doors"; + pixel_x = -6; + pixel_y = 7; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the engine control room blast doors."; + id_tag = "EngineBlast"; + name = "Engine Monitoring Room Blast Doors"; + pixel_y = -3; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/machinery/button/toggle/alternate{ + id_tag = "EngineEmitter"; + name = "Emitter Control"; + pixel_x = 6; + pixel_y = 7 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"vWC" = ( +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/glass, +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/obj/item/book/manual/nt_tc, +/obj/item/paper/sierra/teleport, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/spline/fancy/black{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"vWF" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/green/bordercorner2{ + icon_state = "bordercolorcorner2"; + 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/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"vWG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"vWI" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"vWK" = ( +/obj/machinery/bluespacedrive, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace/chamber) +"vWL" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/bunk) +"vWR" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"vWT" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/meter, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"vWW" = ( +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12 + }, +/obj/item/storage/mirror{ + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"vWX" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/item/device/camera_film, +/obj/item/device/camera, +/obj/item/storage/photo_album, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/airlock) +"vWZ" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "eva_shutters"; + name = "EVA Shutters" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"vXb" = ( +/obj/structure/filingcabinet/chestdrawer{ + dir = 1 + }, +/obj/item/folder/nt, +/obj/item/folder/nt, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - Robotics Office" + }, +/turf/simulated/floor/tiled, +/area/assembly/office) +"vXi" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/machinery/meter, +/turf/simulated/floor/reinforced, +/area/thruster/d3starboard) +"vXk" = ( +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/mortuary) +"vXm" = ( +/obj/machinery/door/airlock/medical{ + id_tag = "sierra_surgery1"; + name = "Operation room 1"; + dir = 8 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/holosign/surgery{ + dir = 8; + id_tag = "surgery1" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery) +"vXn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"vXp" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/scan) +"vXC" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "miners_restroom_sierra" + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar_stairs) +"vXE" = ( +/obj/structure/bed/chair/office/teal{ + dir = 8 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"vXJ" = ( +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"vXO" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/solar) +"vXP" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace/chamber) +"vXR" = ( +/obj/machinery/door/airlock/highsecurity{ + id_tag = "capt_safe_room"; + locked = 1 + }, +/obj/machinery/door/firedoor, +/obj/item/airlock_brace{ + req_access = list("ACCESS_CAPTAIN") + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/substation/bridgedeck) +"vXT" = ( +/obj/structure/table/marble, +/obj/machinery/cooker/candy, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"vXU" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"vXV" = ( +/obj/structure/cable/green, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/table/rack, +/obj/item/extinguisher, +/obj/item/extinguisher, +/obj/item/extinguisher, +/obj/item/extinguisher, +/obj/machinery/light_switch{ + dir = 4; + on = 1; + pixel_x = -25 + }, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/storage2) +"vYc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/security/sierra/hallway/aft) +"vYu" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/wall/r_wall/hull, +/area/security/sierra/prison) +"vYz" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "eng1_outer"; + name = "Third Deck Starboard Nacelle Access" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/thruster/d3starboard) +"vYG" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants/cobed) +"vYP" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"vYV" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"vYX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/light/spot, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"vYY" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 9 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"vZb" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped, +/turf/space, +/area/space) +"vZh" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/hallway) +"vZx" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/table/standard, +/obj/structure/bedsheetbin, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/laundry) +"vZz" = ( +/obj/item/stock_parts/circuitboard/shield_diffuser, +/obj/item/stock_parts/circuitboard/shield_diffuser, +/obj/item/stock_parts/circuitboard/shield_diffuser, +/obj/item/stock_parts/circuitboard/shield_generator, +/obj/item/stock_parts/circuitboard/shield_generator, +/obj/item/stock_parts/circuitboard/shield_generator, +/obj/item/stock_parts/circuitboard/shield_generator, +/obj/item/stock_parts/circuitboard/shield_generator, +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech/high_risk) +"vZB" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/item/storage/mirror{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/prison) +"vZF" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/exploration/eva) +"vZK" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/table/glass, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"vZL" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 5 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"vZO" = ( +/obj/structure/table/reinforced, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -20 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/holocontrol) +"vZQ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/security/sierra/hallway/aft) +"vZS" = ( +/obj/decal/cleanable/cobweb2{ + dir = 8 + }, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"vZT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/storage) +"vZW" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/mob/living/simple_animal/passive/cat/fluff{ + name = "Cookie"; + speak_emote = list("purrs","meows","moans") + }, +/obj/structure/dogbed, +/obj/floor_decal/spline/fancy/black, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 6 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/garden_room) +"vZY" = ( +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/rnd/xenobiology/level1) +"wag" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"waq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"was" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation/second) +"waF" = ( +/obj/structure/closet/secure_closet/security/sierra, +/obj/machinery/ai_status_display{ + pixel_y = -32 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"waJ" = ( +/obj/floor_decal/borderfloor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/yellow/bordercorner2, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"waK" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 4; + pixel_x = -14 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"waO" = ( +/obj/structure/bed/chair/rounded/beige{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"waR" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/bed/chair/pew/left, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/security/sierra/breakroom) +"waS" = ( +/obj/machinery/newscaster{ + pixel_x = 28 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge/upper) +"waX" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/blue, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"wbc" = ( +/obj/floor_decal/industrial/traffic/corner, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"wbk" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 10 + }, +/obj/structure/holoplant, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"wbm" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/office) +"wbr" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"wbt" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"wbv" = ( +/obj/shuttle_landmark/ferry/out, +/turf/space, +/area/space) +"wbZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"wca" = ( +/obj/shuttle_landmark/ninja/deck3, +/turf/space, +/area/space) +"wcb" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/incinerator) +"wcm" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/maintenance/abandoned_hydroponics) +"wcs" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"wcF" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"wcM" = ( +/obj/machinery/gibber, +/obj/structure/curtain/medical, +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/galley/freezer) +"wcN" = ( +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - AI Subgrid"; + name_tag = "AI Subgrid" + }, +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/dark, +/area/turret_protected/ai) +"wcU" = ( +/obj/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/substation/seconddeck) +"wdh" = ( +/obj/machinery/vending/tool{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/storage/primary) +"wdj" = ( +/obj/structure/bed/chair/padded/purple{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"wdk" = ( +/obj/floor_decal/industrial/traffic{ + dir = 1 + }, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"wdp" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/chemical_dispenser/bar_soft/full{ + dir = 1 + }, +/obj/structure/sign/poster{ + pixel_y = -32 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"wds" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/reagent_sublimator/sauna, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/sierra/breakroom) +"wdE" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"wdG" = ( +/obj/floor_decal/carpet/blue{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa/high_sec) +"wdI" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"wdK" = ( +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/suplocker_room) +"wdL" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"wdN" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump{ + dir = 8; + name = "Chamber Output" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/gas) +"wdP" = ( +/obj/structure/largecrate, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"wdT" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"wdV" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/airlock_canisters) +"web" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"wed" = ( +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + display_name = "Starboard Dock A"; + frequency = 1380; + id_tag = "merchant_shuttle_station"; + pixel_x = 32; + req_access = list("ACCESS_EXTERNAL"); + pixel_y = 21 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"wej" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck - Central Hallway"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"wek" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"wel" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/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" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/suits) +"wep" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/lime/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 9 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"wew" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"weB" = ( +/turf/simulated/wall/r_wall, +/area/crew_quarters/sleep/cryo/south) +"weC" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/camera/network/research{ + c_tag = "Research - Xenoflora Hydroponics"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/rnd/xenobiology/xenoflora) +"weD" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"weF" = ( +/obj/floor_decal/floordetail/edgedrain{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"weJ" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"weM" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/thirddeck/port) +"weN" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"weT" = ( +/obj/machinery/photocopier, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/blue/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"weX" = ( +/obj/structure/table/rack, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"weY" = ( +/obj/structure/largecrate, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"wfa" = ( +/obj/machinery/oxygen_pump{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "petrov_shuttle_pump" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/petrov/airlock) +"wfc" = ( +/obj/structure/disposalpipe/down{ + dir = 1 + }, +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/thirddeck/starboard) +"wff" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "lounge_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/garden_room) +"wfo" = ( +/obj/floor_decal/carpet/blue2{ + dir = 4 + }, +/obj/floor_decal/carpet/blue2{ + dir = 1 + }, +/obj/floor_decal/carpet/blue2{ + dir = 5 + }, +/obj/structure/dogbed, +/mob/living/simple_animal/passive/cat/fluff/Runtime, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue3, +/area/crew_quarters/heads/office/cmo/cobed) +"wfu" = ( +/obj/shuttle_landmark/sierra/deck1/guppy, +/turf/space, +/area/space) +"wfw" = ( +/obj/floor_decal/techfloor/orange, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"wfJ" = ( +/obj/structure/table/standard, +/obj/item/storage/firstaid/surgery, +/obj/item/autopsy_scanner, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue/autopsy) +"wfV" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"wfW" = ( +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/development) +"wgk" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/docking) +"wgm" = ( +/obj/fluid_mapped, +/turf/simulated/floor/beach/sand, +/area/rnd/xenobiology/level2) +"wgn" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/bed/chair/padded/red{ + dir = 4; + desc = "You sit in this, either by will or force. This is probably the most uncomfortable chair in the whole world. You literally die sitting on it." + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/office/hos) +"wgr" = ( +/obj/floor_decal/spline/fancy/wood/corner, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/machinery/computer/modular/preset/civilian{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"wgs" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/blue/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"wgD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/hangar/upper) +"wgH" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"wgN" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"wgO" = ( +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/structure/cable/green, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/paint_stripe/red, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/polarized{ + id = "cadetwindow" + }, +/turf/simulated/floor/plating, +/area/security/range) +"wgP" = ( +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/handrail{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"wgQ" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/table/rack, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/storage/toolbox/mechanical, +/obj/item/device/multitool, +/obj/item/aicard, +/obj/structure/window/reinforced, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/adjutants) +"wgR" = ( +/obj/machinery/button/alternate/door/bolts{ + dir = 4; + id_tag = "cafe_private_room"; + name = "Lock"; + pixel_x = -24; + pixel_y = 7 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/button/windowtint{ + dir = 4; + id = "private_cafe_windows"; + pixel_x = -24; + pixel_y = -6; + range = 3 + }, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/paper/sierra, +/obj/item/device/flashlight/lamp/green{ + pixel_y = 14; + pixel_x = -5 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/cafe/upper) +"wgY" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/seconddeck/starboard) +"whd" = ( +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/engineering/engine_smes) +"whe" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"whj" = ( +/obj/item/stack/tile/walnut{ + pixel_y = -5; + pixel_x = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/vacant/bar) +"whl" = ( +/obj/structure/hygiene/sink/kitchen{ + pixel_y = 24 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/galley/freezer) +"whn" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"whv" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"whx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/media/music_writer{ + pixel_y = 60 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"whD" = ( +/obj/structure/bed/chair/padded/blue, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/heads/office/hop) +"whF" = ( +/obj/structure/undies_wardrobe, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/captain) +"whL" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/medical) +"whO" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"whQ" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"whR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/navbeacon/sierra/FD_forehallway1, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/fore) +"whX" = ( +/turf/simulated/wall/prepainted, +/area/medical/ward) +"wib" = ( +/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/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"wid" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/port) +"wig" = ( +/turf/simulated/floor/tiled, +/area/maintenance/abandoned_hydroponics) +"wik" = ( +/obj/structure/table/rack, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/random/maintenance, +/obj/machinery/door/window/westleft{ + name = "Commissary rack"; + req_access = newlist(); + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/random/maintenance, +/obj/floor_decal/corner/black/full, +/obj/floor_decal/industrial/outline/yellow, +/obj/random/single/lighter, +/turf/simulated/floor/tiled, +/area/crew_quarters/commissary) +"win" = ( +/obj/machinery/atmospherics/binary/pump, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/blue{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"wiz" = ( +/obj/structure/table/standard{ + name = "plastic table frame" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/random/maintenance/solgov, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"wiB" = ( +/obj/structure/table/rack, +/obj/item/stack/flag/blue, +/obj/item/stack/flag/blue, +/obj/item/stack/flag/green, +/obj/item/stack/flag/green, +/obj/item/stack/flag/red, +/obj/item/stack/flag/red, +/obj/item/stack/flag/teal, +/obj/item/stack/flag/teal, +/obj/item/stack/flag/yellow, +/obj/item/stack/flag/yellow, +/obj/item/storage/box/glowsticks, +/obj/item/shuttle_beacon, +/obj/item/shuttle_beacon, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/eva) +"wiF" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 9 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/heart, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/garden_room) +"wiH" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"wiJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"wiO" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/airless, +/area/solar/port) +"wiU" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"wjg" = ( +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"wji" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"wjj" = ( +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "sierra_surgery1" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/medical/surgery) +"wjk" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"wjl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/forensic) +"wjm" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"wjq" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/center) +"wjs" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"wjt" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/exploration/briefing_room) +"wjv" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"wjB" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/hop) +"wjK" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/bridge/meeting_room) +"wjN" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"wjO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"wka" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa) +"wke" = ( +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"wkl" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/machinery/papershredder, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"wkt" = ( +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"wkA" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/infirmreception) +"wkC" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft) +"wkE" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"wkM" = ( +/obj/floor_decal/corner/red, +/obj/machinery/door_timer/cell_1{ + pixel_x = 32 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"wkN" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"wle" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/sleep/cryo) +"wlh" = ( +/obj/structure/catwalk, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"wlm" = ( +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"wlw" = ( +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/firstdeck) +"wly" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"wlE" = ( +/obj/machinery/papershredder, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/sign/warning/nosmoking_1{ + dir = 4; + icon_state = "nosmoking"; + pixel_x = -32 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/infirmreception) +"wlJ" = ( +/obj/landmark/test/space_turf, +/turf/space, +/area/space) +"wlQ" = ( +/obj/machinery/suit_storage_unit/science, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/eva) +"wlR" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/random/plushie, +/turf/simulated/floor/plating, +/area/quartermaster/hangar/upper) +"wlV" = ( +/turf/simulated/floor/tiled, +/area/quartermaster/hangar) +"wlW" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/emergency) +"wlZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"wma" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 6 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/atmos) +"wme" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"wmh" = ( +/obj/machinery/power/breakerbox/activated{ + RCon_tag = "First Deck Substation Bypass" + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/firstdeck) +"wmm" = ( +/obj/random/obstruction, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"wmn" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/hangar_atmos) +"wmo" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/exploration_shuttle/power) +"wmq" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/flora/pottedplant/smalltree, +/obj/structure/sign/poster{ + pixel_y = 32 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/cryo/south) +"wms" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/shield/thirddeck) +"wmv" = ( +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/wood/walnut, +/area/chapel/main) +"wmy" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/thirddeck/port) +"wmB" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/machinery/button/alternate/door/bolts{ + dir = 8; + pixel_x = 24; + id_tag = "old_maintaince_privatedorm_toilet"; + name = "Lock" + }, +/turf/simulated/floor/tiled/freezer, +/area/vacant/dormintories) +"wmY" = ( +/obj/floor_decal/corner/grey/three_quarters{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/item/reagent_containers/glass/rag{ + pixel_y = -1; + pixel_x = 3 + }, +/obj/item/reagent_containers/glass/rag{ + pixel_y = 8; + pixel_x = -3 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -6; + pixel_y = 16 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 4; + pixel_y = 17 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"wng" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar_atmos) +"wnh" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"wns" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/light/small, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"wnz" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"wnK" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 6 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"wnO" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"wnT" = ( +/obj/machinery/door/airlock/external{ + frequency = 1380; + id_tag = "petrov_shuttle_outer"; + name = "Petrov Exterior Access"; + req_access = list("ACCESS_PETROV_HELM"); + autoset_access = 0 + }, +/obj/structure/cable/green{ + 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/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/petrov/airlock) +"wnX" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"wnY" = ( +/obj/structure/bed/sofa/l/brown{ + dir = 8 + }, +/obj/floor_decal/carpet/red{ + dir = 1 + }, +/obj/floor_decal/carpet/red{ + dir = 4 + }, +/obj/floor_decal/carpet/red{ + dir = 5 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"wod" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/floor_decal/corner/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/turbolift/medical_lift) +"woo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"wop" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/aftport) +"wot" = ( +/turf/simulated/wall/prepainted, +/area/vacant/dungeon) +"woz" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"woC" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut{ + icon_state = "walnut_broken5" + }, +/area/vacant/bar) +"woD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner_techfloor_grid{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"woE" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"woN" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/closet/radiation, +/obj/floor_decal/spline/plain/yellow{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"woR" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"woS" = ( +/obj/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/greengrid, +/area/engineering/gravitaional_generator) +"wpa" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"wph" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"wpi" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/pen/blue{ + pixel_y = 3; + pixel_x = -2 + }, +/obj/item/pen/red{ + pixel_y = -2; + pixel_x = 6 + }, +/obj/floor_decal/carpet/blue{ + dir = 1 + }, +/obj/floor_decal/carpet/blue{ + dir = 4 + }, +/obj/floor_decal/carpet/blue{ + dir = 5 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa/high_sec) +"wpk" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/sign/science_1{ + dir = 1; + pixel_y = -32 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/purple/bordercorner2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"wpo" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 4 + }, +/obj/item/folder/nt, +/obj/structure/table/steel, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_r) +"wpI" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "xenobioaqua"; + name = "Containment Blast Doors" + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/water_cell) +"wpL" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/bridgedeck/port) +"wpT" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 6 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/bar/cobed) +"wpU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/button/alternate/door/bolts{ + dir = 1; + id_tag = "shower1"; + name = "Lock"; + pixel_y = -21 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head_big) +"wpV" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition/storage) +"wpX" = ( +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe) +"wpZ" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/b_green/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/b_green/bordercorner2, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/bed/chair/shuttle/green{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_r) +"wqe" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"wqk" = ( +/obj/structure/fitness/weightlifter, +/obj/floor_decal/corner/black/full, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/gym) +"wqm" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/vacant/cargo) +"wqq" = ( +/obj/structure/table/standard, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/firstdeck) +"wqu" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"wqy" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"wqA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/aft) +"wqC" = ( +/obj/item/device/flashlight/lamp/floodlamp/green, +/obj/item/device/flashlight/lamp/floodlamp/green, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/computer/guestpass{ + pixel_y = 30 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/b_green/bordercorner2{ + dir = 5 + }, +/obj/structure/table/steel, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/seats_place) +"wqN" = ( +/obj/structure/bed/sofa/m/black{ + dir = 10 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"wrf" = ( +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "nuke_shuttle_dock_airlock_sensor"; + master_tag = "nuke_shuttle_dock_airlock"; + pixel_y = 24 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "nuke_shuttle_dock_airlock_pump" + }, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"wru" = ( +/obj/random/obstruction, +/obj/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"wrv" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/gas) +"wrC" = ( +/obj/floor_decal/corner/red, +/obj/structure/table/steel, +/obj/item/storage/box/donkpocket_mixed, +/obj/item/storage/box/donkpocket_mixed, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"wrD" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"wrG" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/storage) +"wrR" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/office/hos/cobed) +"wsk" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d3starboard) +"wst" = ( +/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" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/mortuary) +"wsu" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/office) +"wsy" = ( +/obj/decal/cleanable/dirt, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/decal/cleanable/greenglow, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"wsz" = ( +/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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"wsF" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/bridgedeck/starboard) +"wsH" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/cafe) +"wsQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/fore) +"wsR" = ( +/obj/machinery/door/airlock/glass/civilian{ + autoset_access = 0; + name = "Long Term Dorms" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/sierra/prison) +"wsS" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"wsW" = ( +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/structure/bed/sofa/l/teal, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"wtc" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"wtg" = ( +/obj/structure/window/reinforced/polarized{ + id = "cap_room_window" + }, +/obj/structure/dogbed, +/mob/living/simple_animal/friendly/fox/renault, +/obj/floor_decal/carpet/blue, +/obj/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/floor_decal/carpet/blue{ + dir = 10 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/captain) +"wtn" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/obj/floor_decal/corner/grey/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"wtu" = ( +/obj/fluid_mapped, +/obj/machinery/atmospherics/unary/outlet_injector{ + desc = "Passively injects water into its surroundings. Has a valve attached to it that can control flow rate."; + dir = 1; + name = "water injector" + }, +/turf/simulated/floor/reinforced, +/area/maintenance/waterstore) +"wtw" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"wty" = ( +/obj/structure/table/standard, +/obj/item/storage/firstaid/surgery{ + pixel_y = 6 + }, +/obj/item/reagent_containers/spray/sterilizine, +/obj/machinery/vending/wallmed1{ + name = "Emergency NanoMed"; + pixel_y = 30 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"wtA" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/blue/diagonal, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/item/modular_computer/tablet/lease/preset/command, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"wtD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/firstdeck/centralport) +"wtH" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/crew_quarters/adherent) +"wtJ" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/starboard) +"wtM" = ( +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"wtP" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"wtU" = ( +/obj/structure/table/rack, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/item/inflatable_dispenser, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"wua" = ( +/obj/structure/sign/warning/docking_area{ + dir = 1; + pixel_y = -32 + }, +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/space, +/area/space) +"wue" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"wug" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"wuh" = ( +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/heads/office/captain) +"wui" = ( +/obj/structure/table, +/obj/item/stack/material/steel, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"wuk" = ( +/obj/structure/table/woodentable_reinforced, +/obj/machinery/photocopier/faxmachine{ + department = "Chief Steward" + }, +/obj/machinery/light, +/turf/simulated/floor/wood, +/area/command/chief_steward) +"wun" = ( +/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 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/center) +"wuE" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/structure/undies_wardrobe, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/ce/cobed) +"wuG" = ( +/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" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"wuH" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"wuI" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/NT{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/heads/captain/beach) +"wuO" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 1 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"wuP" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"wuR" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"wuT" = ( +/obj/floor_decal/corner/purple/half{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/cable/green{ + 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 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"wve" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen{ + start_pressure = 14999 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"wvg" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/space) +"wvk" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/structure/closet/emcloset, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"wvp" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 8 + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/obj/machinery/vending/coffee{ + dir = 1; + icon_state = "coffee" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/central_stairwell) +"wvv" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/suit/bio_suit/anomaly, +/obj/item/clothing/mask/breath, +/obj/item/clothing/head/bio_hood/anomaly, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"wvA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"wvG" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"wvM" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/item/stool/padded/red, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"wvO" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/red/diagonal, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/prison) +"wvT" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/structure/coatrack, +/obj/machinery/light_switch{ + pixel_y = 28 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/forensic) +"wvZ" = ( +/obj/machinery/camera/network/hangar, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"wwf" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/aftstarboard) +"wwj" = ( +/obj/structure/stairs/north, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/ward) +"wwm" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/vault/bolted{ + id_tag = "civsafedoorport"; + name = "Third Deck Safe Room" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"wwo" = ( +/obj/structure/table/marble, +/obj/structure/window/reinforced, +/obj/item/storage/fancy/egg_box, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/spline/fancy/black, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/security/sierra/prison) +"wwr" = ( +/obj/structure/bed, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell2) +"wws" = ( +/obj/structure/table/standard, +/obj/item/device/taperecorder/empty, +/turf/simulated/floor/tiled/white/monotile, +/area/vacant/gambling) +"www" = ( +/obj/shuttle_landmark/merc/deck5, +/turf/space, +/area/space) +"wwG" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"wwH" = ( +/turf/simulated/floor/tiled, +/area/vacant/cargo) +"wwN" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"wwR" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"wwT" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/white, +/area/medical/ward) +"wwV" = ( +/obj/structure/stairs/west, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"wxd" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/glass/engineering{ + req_access = newlist(); + dir = 8; + name = "Engineering EVA Storage" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/engineering/engine_eva) +"wxi" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/bed/chair/padded/blue, +/obj/structure/closet/medical_wall/filled{ + pixel_y = 32 + }, +/obj/random/firstaid, +/obj/random/firstaid, +/obj/random/medical, +/obj/item/reagent_containers/food/snacks/proteinbar, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"wxx" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/b_green/bordercorner2{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/bed/chair/shuttle/green{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/seats_place) +"wxL" = ( +/obj/structure/catwalk, +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#4c535b" + }, +/area/quartermaster/hangar/upper) +"wxQ" = ( +/obj/machinery/cryopod, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod1/station) +"wxY" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"wyb" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 6 + }, +/obj/floor_decal/snow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/closet/fridge/meat, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/galley/freezer) +"wyg" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/port) +"wyn" = ( +/obj/structure/bed/padded, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/item/bedsheet/green, +/obj/machinery/light_construct, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/ward) +"wyp" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/bed/chair/office/purple, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"wyt" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/structure/bed/chair/rounded/blue{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"wyx" = ( +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"wyy" = ( +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"wyB" = ( +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"wyE" = ( +/obj/structure/table/woodentable/maple, +/obj/machinery/recharger, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/medical/wardhallway) +"wyH" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/cistern) +"wyO" = ( +/obj/structure/table/standard, +/obj/item/storage/firstaid/sleekstab{ + pixel_y = 10 + }, +/obj/item/storage/firstaid/stab, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/ward) +"wyV" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"wyZ" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/black{ + dir = 8 + }, +/obj/machinery/camera/network/engine{ + c_tag = "Engine - Starboard Thruster"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"wzi" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 8 + }, +/obj/structure/bed/chair/office/brown{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/suplocker_room) +"wzk" = ( +/obj/structure/table/rack, +/obj/item/stack/material/wood/walnut{ + amount = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftport) +"wzp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"wzq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"wzw" = ( +/obj/structure/closet/secure_closet/medical_sierra, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Equipment - Locker Room" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"wzy" = ( +/turf/simulated/open, +/area/crew_quarters/cafe/upper) +"wzD" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/spline/plain/brown{ + dir = 8 + }, +/obj/structure/holoplant, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/actor) +"wzG" = ( +/obj/structure/closet/crate/plastic, +/obj/decal/cleanable/cobweb2, +/obj/item/bodybag, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/turf/simulated/floor/plating, +/area/vacant/infirmary) +"wzH" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"wzQ" = ( +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"wzU" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"wAh" = ( +/obj/structure/flora/pottedplant/smalltree, +/obj/floor_decal/corner/black/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/hos/cobed) +"wAw" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"wAE" = ( +/obj/structure/catwalk, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"wAR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/blue, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/water_cell) +"wAS" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"wAU" = ( +/obj/floor_decal/corner/green/three_quarters{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/obj/machinery/meter, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/corner/purple/bordercorner, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"wAZ" = ( +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/staging) +"wBb" = ( +/turf/simulated/wall/r_wall/hull, +/area/quartermaster/exploration/eva) +"wBg" = ( +/obj/machinery/telecomms/server/presets/service, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"wBl" = ( +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/power/apc/super/critical{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"wBq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"wBr" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "Skynet_launch"; + name = "Mech Bay"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/assembly/chargebay) +"wBP" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/cistern) +"wBR" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"wBV" = ( +/obj/structure/bed/chair/padded/red{ + icon_state = "chair_preview" + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/hangar/upper) +"wBZ" = ( +/obj/machinery/suit_storage_unit/explorer, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/camera/network/expedition{ + c_tag = "Expedition - EVA"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/eva) +"wCd" = ( +/obj/machinery/atmospherics/binary/pump, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"wCk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"wCl" = ( +/obj/machinery/air_sensor/nacelle/second/plasma, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d3port) +"wCt" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/random/closet, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"wCv" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/structure/table/woodentable_reinforced/ebony, +/obj/machinery/fabricator/micro/bartender{ + pixel_x = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"wCA" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"wCL" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/bunk) +"wDa" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"wDi" = ( +/obj/structure/table/steel_reinforced, +/obj/item/book/manual/atmospipes, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"wDm" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod3/station) +"wDo" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"wDC" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"wDG" = ( +/obj/machinery/telecomms/server/presets/common, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"wDJ" = ( +/obj/structure/closet/fridge, +/obj/floor_decal/spline/fancy/black{ + dir = 5 + }, +/obj/floor_decal/snow, +/obj/machinery/camera/network/second_deck{ + c_tag = "Mess Hall - Kitchen - Freezer" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/galley/freezer) +"wDQ" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet{ + dir = 8; + name = "cargo outlet" + }, +/obj/structure/sign/warning/mail_delivery{ + pixel_y = 24 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/railing/mapped, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/quartermaster/office/post) +"wDS" = ( +/obj/structure/table/rack, +/obj/structure/window/basic{ + dir = 8 + }, +/obj/item/storage/box/rxglasses, +/obj/item/storage/box/rxglasses, +/obj/item/cane, +/obj/item/cane, +/obj/item/wheelchair_kit, +/obj/item/wheelchair_kit, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"wEb" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"wEf" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/dispenser, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/hardstorage) +"wEl" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 10 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/hardstorage) +"wEn" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"wEu" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"wEw" = ( +/obj/floor_decal/stairs{ + dir = 4 + }, +/turf/simulated/floor/wood/bamboo{ + name = "stairs" + }, +/area/crew_quarters/garden_room) +"wEy" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/tcommsat/computer) +"wEU" = ( +/obj/machinery/door/airlock/vault/bolted{ + id_tag = "selfddoor"; + name = "Delta Code Chamber Access" + }, +/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/button/alternate/door/bolts{ + id_tag = "selfddoor"; + name = "Delta Code Airlock Bolt Control"; + pixel_y = -32; + req_access = list("ACCESS_VAULT") + }, +/obj/item/airlock_brace{ + req_access = list("ACCESS_VAULT") + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/nuke_storage) +"wFa" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d1port) +"wFh" = ( +/turf/simulated/wall/r_wall/hull{ + can_open = 1 + }, +/area/command/bsa) +"wFo" = ( +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge/upper) +"wFx" = ( +/obj/machinery/vending/wallmed2{ + dir = 8; + pixel_x = 23 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/tiled/monotile, +/area/shuttle/escape_pod/escape_pod1/station) +"wFy" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/engine_monitoring) +"wFB" = ( +/obj/structure/sign/xenobio_3{ + pixel_y = -32 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"wFO" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/hop) +"wFQ" = ( +/obj/floor_decal/carpet/blue2{ + dir = 8 + }, +/obj/floor_decal/carpet/blue2{ + dir = 1 + }, +/obj/floor_decal/carpet/blue2{ + dir = 9 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1; + icon_state = "window" + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/hop/cobed) +"wFV" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/seconddeck/hangar) +"wGf" = ( +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"wGh" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/captain/beach) +"wGK" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"wGZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/bed/chair/padded/purple{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/entry) +"wHf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/recharger, +/obj/structure/table/steel_reinforced, +/obj/machinery/light, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"wHk" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/aft_stairwell) +"wHn" = ( +/obj/machinery/cryopod, +/obj/machinery/computer/cryopod{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod2/station) +"wHp" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/bridgedeck/aft) +"wHD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/sign/warning/high_voltage{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"wHL" = ( +/obj/floor_decal/industrial/hatch/grey, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/security{ + name = "Interrogation" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/sierra/interrogation/second) +"wHP" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/wallframe_spawn/no_grille, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown1_2" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"wHU" = ( +/obj/machinery/door/blast/shutters{ + id_tag = "portaux_warehouse"; + name = "Warehouse Shutters" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"wIm" = ( +/obj/machinery/cryopod{ + dir = 2 + }, +/obj/machinery/computer/cryopod{ + pixel_y = 24 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"wIq" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"wIr" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 9 + }, +/obj/structure/bed/chair/pew, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"wIy" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/breakroom) +"wIz" = ( +/obj/machinery/computer/modular/preset/aislot/research{ + dir = 1 + }, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/office) +"wIU" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"wIW" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 8 + }, +/obj/machinery/computer/air_control{ + dir = 1; + input_tag = "h2_in"; + name = "Hydrogen Supply Control"; + output_tag = "h2_out"; + sensor_name = "Tank"; + sensor_tag = "tox_sensor" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/corner/paleblue{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"wIY" = ( +/obj/machinery/light, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"wJj" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"wJl" = ( +/obj/structure/reagent_dispensers/coolanttank, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/ship) +"wJp" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"wJr" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/lime/border{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"wJw" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/heads/captain/secret_room/level_one) +"wJA" = ( +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"wJE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"wJH" = ( +/obj/floor_decal/borderfloor, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"wJK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"wJN" = ( +/turf/space, +/area/space) +"wJP" = ( +/turf/simulated/wall/prepainted, +/area/bridge/marine_room) +"wKb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"wKq" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/item/storage/mirror{ + pixel_x = 24; + pixel_y = 1 + }, +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/vacant/cargo) +"wKs" = ( +/obj/decal/cleanable/dirt, +/obj/structure/bed/chair/pew/left/mahogany, +/turf/simulated/floor/wood/walnut, +/area/vacant/sauna) +"wKC" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/aft) +"wKF" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/monotile, +/area/maintenance/abandoned_hydroponics) +"wKI" = ( +/obj/structure/closet/crate, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/foreport) +"wKK" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/table/steel_reinforced, +/obj/item/book/manual/supermatter_engine, +/obj/item/device/geiger, +/obj/item/device/binoculars, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"wKO" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/machinery/camera/network/command{ + c_tag = "Command - Port Hallway"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"wLd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"wLg" = ( +/obj/structure/table/steel, +/obj/item/modular_computer/tablet/lease/preset/command, +/turf/simulated/floor/tiled, +/area/crew_quarters/heads/office/ce) +"wLl" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/ship_map, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"wLu" = ( +/obj/machinery/atmospherics/binary/pump/on, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"wLw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"wLC" = ( +/obj/structure/sign/warning/nosmoking_1{ + pixel_x = 32; + pixel_y = -37 + }, +/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{ + dir = 4 + }, +/obj/machinery/hologram/holopad{ + pixel_y = 16; + pixel_x = 16 + }, +/obj/floor_decal/corner/purple/bordercorner, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"wLT" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/canister) +"wLX" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/roller_bed, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/staging) +"wMi" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"wMn" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_10_hatch"; + name = "Escape Pod Ten Hatch" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod10/station) +"wMx" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8; + frequency = 1441; + id = "toxins_petrov_in" + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 5 + }, +/obj/machinery/sparker{ + id_tag = "toxlab_petrov"; + pixel_w = 1; + pixel_z = -23 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/gas) +"wMB" = ( +/obj/floor_decal/industrial/warning/full, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "eng4"; + name = "First Deck Port Nacelle Access"; + pixel_y = 21; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small, +/obj/machinery/atmospherics/valve/shutoff/fuel{ + dir = 8 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/thruster/d1port) +"wMF" = ( +/turf/simulated/wall/prepainted, +/area/security/nuke_storage) +"wMG" = ( +/obj/random/junk, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/storage) +"wMJ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/access_button/airlock_exterior{ + dir = 4; + master_tag = "ai_starboard"; + name = "exterior access button"; + pixel_y = 28; + req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"wMQ" = ( +/turf/simulated/wall/prepainted, +/area/maintenance/seconddeck/hangar) +"wMT" = ( +/obj/structure/railing/mapped, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"wMV" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/item/stool/padded, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"wMZ" = ( +/obj/structure/closet/coffin/wooden, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/seconddeck/aftport) +"wNm" = ( +/obj/shuttle_landmark/sierra/deck5/exploration_shuttle, +/turf/space, +/area/space) +"wNp" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/lockdown{ + id_tag = "lockdown2_6" + }, +/obj/machinery/door/airlock/command{ + name = "Bridge Checkpoint"; + autoset_access = 0; + req_access = list("ACCESS_SEC_DOORS") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/lobby) +"wNq" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"wNr" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/cyan, +/obj/machinery/light, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/cockpit) +"wNs" = ( +/obj/floor_decal/corner/green/half, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"wNu" = ( +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"wNF" = ( +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"wNH" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"wNJ" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/medical/morgue/autopsy) +"wNK" = ( +/obj/machinery/seed_storage/garden{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/hydroponics) +"wNN" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/structure/sign/warning/pods/south{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"wNO" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"wNV" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"wNX" = ( +/obj/structure/bed/chair/padded/yellow, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"wOa" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/r_titanium, +/area/exploration_shuttle/power) +"wOd" = ( +/obj/machinery/computer/modular/preset/civilian, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/thirddeck) +"wOe" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - First Deck Subgrid"; + name_tag = "First Deck Subgrid" + }, +/obj/machinery/power/apc/critical{ + name = "south bump"; + pixel_y = -21 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/green, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/substation/firstdeck) +"wOg" = ( +/obj/structure/filingcabinet{ + pixel_x = -10 + }, +/obj/structure/filingcabinet, +/obj/structure/filingcabinet{ + pixel_x = 10 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"wOo" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"wOq" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"wOs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"wOv" = ( +/obj/shuttle_landmark/sierra/deck2/exploration_shuttle, +/turf/space, +/area/space) +"wOw" = ( +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "security_permabrig_third_cell_shutters" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_ridged, +/area/security/sierra/brig) +"wOz" = ( +/obj/structure/cable/green, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/paint_stripe/red, +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "security_sergeant_shutters"; + name = "Warden Desk" + }, +/obj/wallframe_spawn/reinforced/polarized{ + id = "bo_windows" + }, +/turf/simulated/floor/plating, +/area/security/sierra/sergeant) +"wOA" = ( +/obj/structure/iv_stand, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"wOI" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"wOU" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"wPb" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/command{ + dir = 4; + name = "Bridge Access"; + id_tag = "bridge_hallway_doors_starboadr" + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_6" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/hallway) +"wPe" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod2/station) +"wPo" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/foreport) +"wPp" = ( +/obj/machinery/light, +/obj/structure/closet/emcloset, +/obj/machinery/pager/science{ + dir = 1; + name = "Call Scienciests button"; + pixel_y = -22 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/entry) +"wPq" = ( +/obj/structure/largecrate, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"wPr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/hologram/holopad, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/turret_protected/ai_teleport) +"wPt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/storage/eva) +"wPB" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"wPH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"wPK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/blue{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + frequency = 1379; + id_tag = "ai_core_inner"; + locked = 1; + name = "AI Internal Access" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1379; + master_tag = "ai_core_airlock"; + name = "interior access button"; + pixel_x = 7; + pixel_y = -24; + req_access = list("ACCESS_AI_UPLOAD") + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/turret_protected/ai_teleport) +"wPL" = ( +/obj/structure/sign/emergonly{ + dir = 4; + pixel_x = -32 + }, +/obj/floor_decal/industrial/hatch/red, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/staging) +"wPQ" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/hole, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"wPR" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/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/white, +/area/medical/ward) +"wPU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner_techfloor_grid{ + dir = 5 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"wPV" = ( +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/steel_grid, +/area/command/bsa) +"wQa" = ( +/obj/machinery/button/blast_door{ + id_tag = "auxbar"; + name = "Blast Shutter Control"; + pixel_x = 26 + }, +/turf/simulated/floor/wood/walnut{ + icon_state = "walnut_broken5" + }, +/area/vacant/bar) +"wQf" = ( +/obj/structure/closet/coffin/wooden, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/corner/black/mono, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/chapel/mortuary) +"wQg" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/exploration_shuttle/power) +"wQh" = ( +/obj/floor_decal/techfloor, +/obj/machinery/light/spot, +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 8 + }, +/obj/engine_setup/pump_max, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_room) +"wQk" = ( +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue) +"wQs" = ( +/obj/structure/catwalk, +/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" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"wQC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/xenobio) +"wQE" = ( +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_titanium, +/area/shuttle/petrov/equipment) +"wQM" = ( +/obj/machinery/light, +/obj/structure/table/rack/dark, +/obj/item/storage/firstaid/adv{ + pixel_y = 8 + }, +/obj/item/storage/firstaid/stab{ + pixel_y = 2 + }, +/obj/item/storage/firstaid/adv{ + pixel_y = -3 + }, +/obj/item/device/robotanalyzer, +/obj/item/stack/nanopaste{ + pixel_x = 1 + }, +/obj/item/stack/nanopaste{ + pixel_x = -6 + }, +/obj/floor_decal/spline/plain/paleblue{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/storage) +"wRc" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"wRe" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/space) +"wRf" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/meeting_room) +"wRk" = ( +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/industrial/danger/corner, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"wRm" = ( +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 4 + }, +/obj/floor_decal/corner/mauve/mono, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"wRs" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/reinforced, +/area/thruster/d3port) +"wRA" = ( +/obj/floor_decal/corner/yellow/half{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"wRB" = ( +/obj/floor_decal/corner/green/half{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"wRD" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"wRH" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "Mail" + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_x = 22; + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/supply{ + c_tag = "Supply Office - Post Office"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"wRX" = ( +/obj/item/stool, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"wSa" = ( +/obj/machinery/porta_turret{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/machinery/flasher{ + dir = 8; + id_tag = "ai_core"; + pixel_x = 24 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"wSb" = ( +/obj/structure/table/standard, +/obj/item/bodybag/rescue/loaded, +/obj/item/bodybag/rescue/loaded, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/ward) +"wSm" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"wSp" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/open, +/area/quartermaster/hangar/upper) +"wSG" = ( +/obj/floor_decal/corner/yellow, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/flora/pottedplant/tropical, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/ce/cobed) +"wSK" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"wSZ" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/secure_closet/engineering_welding, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"wTa" = ( +/obj/structure/table/standard, +/obj/machinery/button/alternate/door{ + desc = "A remote control-switch for the office door."; + id_tag = "mental_health_door"; + name = "Office Door Control"; + pixel_x = -4; + pixel_y = 7; + req_access = list("ACCESS_PSYCHIATRIST") + }, +/obj/machinery/button/windowtint{ + id = "mental_health_windows"; + pixel_x = 4; + pixel_y = 7; + range = 11 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"wTr" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/auxillary/port) +"wTv" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/device/synthesized_instrument/guitar, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"wTA" = ( +/obj/floor_decal/corner/black{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Medbay Hall"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"wTF" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/center) +"wTG" = ( +/obj/structure/sign/nanotrasen{ + dir = 8 + }, +/turf/simulated/wall/r_wall/hull, +/area/storage/airlock_canisters) +"wTI" = ( +/turf/simulated/floor/plating, +/area/vacant/infirmary) +"wUa" = ( +/obj/structure/catwalk, +/obj/machinery/light/spot, +/turf/simulated/floor/shuttle_ceiling/sierra/air{ + color = "#4c535b" + }, +/area/quartermaster/hangar/upper) +"wUi" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/locker_room) +"wUn" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"wUo" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/spline/fancy/black, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/security/sierra/prison) +"wUp" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/assembly/robotics) +"wUq" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"wUr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"wUu" = ( +/obj/structure/cable/green, +/obj/machinery/power/apc/high{ + dir = 8; + name = "west bump"; + pixel_x = -25 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"wUC" = ( +/obj/structure/table/rack, +/obj/random/trash, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"wUD" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/purple/bordercorner2, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"wUM" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 4 + }, +/obj/structure/holoplant, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/aft_stairwell) +"wUS" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/recharge_station, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"wUT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/disposal/small{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/port) +"wUV" = ( +/obj/structure/handrail{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_x = -10; + pixel_y = -21 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"wVd" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"wVe" = ( +/obj/structure/table/standard, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light, +/obj/random/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_cyborg_upload) +"wVf" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"wVj" = ( +/obj/floor_decal/corner/red/border, +/obj/machinery/light/led/small, +/obj/machinery/hologram/holopad{ + pixel_x = 16 + }, +/obj/floor_decal/spline/fancy/black, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/bar) +"wVv" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Mess Hall - Canteen - Distribution"; + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"wVw" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Substation - First Deck" + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/firstdeck) +"wVA" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"wVD" = ( +/obj/machinery/atmospherics/unary/freezer, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"wVI" = ( +/obj/structure/table/rack, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"wVJ" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"wVO" = ( +/obj/machinery/suit_storage_unit/engineering/alt, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_eva) +"wVT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/medical/virology/atmos) +"wWb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet, +/area/chapel/main) +"wWd" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/shuttlefuel) +"wWk" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/ntlogo, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/rnd/entry) +"wWm" = ( +/obj/structure/window/reinforced, +/obj/structure/closet/l3closet/scientist, +/obj/floor_decal/corner/grey/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/rnd/locker) +"wWo" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/storage, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"wWp" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/structure/sign/directions/janitor{ + dir = 1; + pixel_x = -32; + pixel_y = -10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"wWr" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/green/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/green/bordercorner2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"wWt" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/catwalk, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"wWz" = ( +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"wWF" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/stock_parts/circuitboard/message_monitor, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/storage/tech) +"wWI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small, +/obj/machinery/power/apc/critical{ + name = "north bump"; + pixel_y = 21; + dir = 1 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"wWV" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/firstdeck/aftstarboard) +"wWY" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/vending/games, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"wXb" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/catwalk_plated/dark, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/hallway/primary/bridgedeck/aft) +"wXc" = ( +/obj/structure/table/rack, +/obj/structure/window/basic{ + dir = 8 + }, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/adv, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/locker) +"wXk" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/bed/padded, +/obj/item/bedsheet/purple, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/bunk) +"wXr" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "lounge_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/garden_room) +"wXw" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/wallframe_spawn/reinforced/polarized/full, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/iaa) +"wXB" = ( +/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/structure/catwalk, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"wXK" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"wXZ" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"wYj" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/machinery/button/blast_door{ + pixel_y = 24; + id_tag = "armory"; + name = "Armory blast door-control"; + req_access = list("ACCESS_ARMORY") + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"wYl" = ( +/obj/structure/ladder, +/obj/catwalk_plated/dark, +/turf/simulated/open, +/area/crew_quarters/galley) +"wYp" = ( +/obj/floor_decal/corner/red, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"wYr" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Teleport Maintenance"; + req_access = newlist() + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/teleporter) +"wYz" = ( +/obj/floor_decal/corner/green/three_quarters{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/obj/structure/closet/secure_closet/hydroponics_sierra, +/obj/machinery/camera/network/research{ + c_tag = "Research - Xenoflora Atmospherics" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"wYF" = ( +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "xenolow_airlock"; + name = "Xenobiology Access Console"; + pixel_x = 24; + req_access = list("ACCESS_XENOBIO") + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/rnd/xenobiology/entry2) +"wYI" = ( +/obj/structure/closet/emcloset, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"wYJ" = ( +/obj/machinery/door/window/brigdoor/eastright{ + id_tag = "iaaleft"; + req_access = newlist() + }, +/obj/floor_decal/carpet/blue{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"wYN" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"wYV" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/mauve/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"wYZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/sergeant) +"wZg" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"wZo" = ( +/obj/machinery/atmospherics/unary/vent_pump/tank{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "n2o_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/reinforced/n20, +/area/engineering/atmos) +"wZr" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/b_green/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/b_green/bordercorner2{ + dir = 6 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/bed/chair/shuttle/green, +/turf/simulated/floor/tiled, +/area/exploration_shuttle/cargo_r) +"wZw" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"wZz" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/corner/black/three_quarters{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/structure/closet/walllocker{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"wZC" = ( +/obj/floor_decal/corner/black{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"wZI" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/hygiene/toilet, +/obj/item/taperoll/bog{ + pixel_x = -12; + pixel_y = -10 + }, +/obj/landmark/start, +/obj/machinery/newscaster{ + pixel_x = 28 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head) +"wZR" = ( +/obj/floor_decal/corner/green/border, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"xaa" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "ai_starboard_outer"; + name = "Engineering External Access" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/aftport) +"xab" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"xae" = ( +/obj/structure/table/steel, +/obj/item/clothing/suit/chef/classic, +/obj/item/material/knife/combat, +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"xaj" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/nt_white, +/obj/machinery/door/firedoor, +/obj/paint_stripe/nt_red, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/shuttle/petrov/ship) +"xam" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"xar" = ( +/obj/structure/morgue, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"xaC" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/quartermaster/exploration/storage) +"xaE" = ( +/obj/shuttle_landmark/skipjack/deck1, +/turf/space, +/area/space) +"xaG" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"xaJ" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"xaK" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown2_6" + }, +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/bridge/hallway) +"xaM" = ( +/obj/machinery/atmospherics/unary/freezer{ + dir = 4 + }, +/obj/floor_decal/corner/green/half{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"xaP" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/entry) +"xaV" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"xbm" = ( +/obj/floor_decal/carpet/purple, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/obj/floor_decal/carpet/purple{ + dir = 6 + }, +/obj/structure/dogbed, +/mob/living/simple_animal/hostile/retaliate/beast/diyaab{ + dir = 8; + faction = "boo"; + name = "Boo"; + response_disarm = "bops"; + response_harm = "kicks"; + response_help = "pets" + }, +/obj/machinery/light, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/office/rd/cobed) +"xbp" = ( +/obj/floor_decal/borderfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"xbx" = ( +/obj/structure/undies_wardrobe, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"xbA" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + id_tag = "xenobio3"; + name = "Containment Blast Doors" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/level1) +"xbC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"xbE" = ( +/obj/structure/lattice, +/obj/floor_decal/industrial/traffic{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"xbG" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/table/rack, +/obj/item/stack/material/steel{ + amount = 25 + }, +/obj/item/stack/material/steel{ + amount = 25 + }, +/obj/item/stack/material/steel{ + amount = 25 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + color = "#8c911d" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/assembly/robotics) +"xbJ" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/assembly/robotics) +"xbL" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"xbO" = ( +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"xbY" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"xbZ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"xcb" = ( +/obj/structure/closet/crate/secure/loot, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"xce" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/sign/warning/deathsposal{ + pixel_x = -32 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/xenobiology/level1) +"xch" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"xck" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red{ + dir = 6 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"xcm" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"xcq" = ( +/obj/structure/railing/mapped, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"xct" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/regular/open{ + id_tag = "PetrovShield"; + name = "Petrov Blast Shutters" + }, +/obj/paint/nt_white, +/obj/paint_stripe/nt_red, +/turf/simulated/floor/plating, +/area/shuttle/petrov/scan) +"xcu" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 4 + }, +/obj/structure/lattice, +/turf/space, +/area/space) +"xcw" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "ai_bridge_pump" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"xcx" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"xcB" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"xcF" = ( +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"xcJ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/barrier, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"xcU" = ( +/obj/floor_decal/corner/lime/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/coffee, +/obj/machinery/rotating_alarm/security_alarm{ + pixel_y = 13 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/fore) +"xcX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"xcZ" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"xdi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace/chamber) +"xdk" = ( +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -21 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment, +/obj/structure/mopbucket, +/obj/item/mop, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/storage) +"xdv" = ( +/obj/structure/sign/warning/hot_exhaust, +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/firstdeck/aftstarboard) +"xdx" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/prepainted, +/area/hydroponics) +"xdB" = ( +/obj/machinery/door/airlock/research{ + name = "Custodial Closet" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/eva) +"xdC" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/machinery/papershredder, +/obj/machinery/light, +/obj/machinery/recharger/wallcharger{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"xdE" = ( +/obj/shuttle_landmark/sierra/hangar/crucian, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"xdF" = ( +/obj/floor_decal/corner/green/border{ + dir = 9 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"xdN" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/hangar_stairs) +"xei" = ( +/turf/simulated/wall/r_wall/hull, +/area/vacant/storage) +"xek" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"xep" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/holocontrol) +"xet" = ( +/obj/structure/hygiene/shower{ + dir = 1 + }, +/obj/structure/hygiene/drain/bath, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head) +"xeA" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/vacant/monitoring) +"xeN" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 8 + }, +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "escape_pod_3_pump" + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/grey/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod3/station) +"xeO" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"xeQ" = ( +/obj/machinery/computer/telecomms/monitor{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/computer) +"xeX" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"xeY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/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" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"xfd" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"xfi" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/security/sierra/prison) +"xft" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft_stairwell) +"xfu" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/hardstorage) +"xfw" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/shuttle/petrov/cell2) +"xfz" = ( +/obj/structure/sign/warning/hot_exhaust{ + dir = 4 + }, +/obj/paint/red, +/obj/paint_stripe/white, +/turf/simulated/wall/ocp_wall, +/area/shuttle/petrov/gas) +"xfC" = ( +/obj/structure/table/steel_reinforced, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/obj/floor_decal/corner/darkblue/mono, +/obj/structure/filingcabinet/wallcabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/adjutants) +"xfY" = ( +/obj/machinery/r_n_d/circuit_imprinter, +/obj/item/reagent_containers/glass/beaker/sulphuric, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/railing/mapped{ + init_color = "#8c911d"; + dir = 1; + color = "#8c911d" + }, +/obj/structure/reagent_dispensers/acid{ + density = 0; + pixel_x = -32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"xgj" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"xgk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"xgp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod3/station) +"xgt" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"xgA" = ( +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_soft/full{ + pixel_y = 8; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) +"xgB" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"xgD" = ( +/obj/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/greengrid, +/area/engineering/gravitaional_generator) +"xgE" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/heads/office/rd/cobed) +"xgH" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Petrov Checkpoint"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"xgP" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/grey/diagonal, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"xgS" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/decal/cleanable/dirt, +/obj/item/reagent_containers/food/drinks/cans/cherrycola, +/obj/item/reagent_containers/food/drinks/cans/coffeecola{ + pixel_y = 12; + pixel_x = -7 + }, +/obj/item/reagent_containers/food/drinks/cans/coffeecola{ + pixel_y = 11; + pixel_x = 10 + }, +/obj/item/reagent_containers/food/drinks/cans/coffeecola{ + pixel_y = -4; + pixel_x = -8 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/dungeon) +"xgT" = ( +/obj/structure/bed/sofa/r/brown{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/cafe) +"xgX" = ( +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"xgZ" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green, +/obj/wallframe_spawn/reinforced/polarized{ + id = "cap_windows" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/heads/office/captain) +"xhd" = ( +/obj/item/stool/bar/padded, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/cafe) +"xhp" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"xhr" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"xhu" = ( +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"xhz" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"xhA" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/item/device/flashlight/lamp/green, +/obj/floor_decal/carpet/green, +/obj/floor_decal/carpet/green{ + dir = 8 + }, +/obj/floor_decal/carpet/green{ + dir = 10 + }, +/turf/simulated/floor/carpet/green, +/area/medical/mentalhealth/therapyroom) +"xhN" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/forestarboard) +"xhU" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated/dark, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/bridge/hallway) +"xhX" = ( +/obj/structure/handrail{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"xia" = ( +/obj/structure/cable/green, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced/polarized/full{ + id = "mental_health_windows" + }, +/turf/simulated/floor/plating, +/area/medical/mentalhealth) +"xic" = ( +/obj/shuttle_landmark/escape_pod/start/pod9, +/obj/wallframe_spawn/reinforced/titanium, +/turf/simulated/floor/plating, +/area/shuttle/escape_pod/escape_pod9/station) +"xig" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"xik" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/corner/green{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"xim" = ( +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"xin" = ( +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"xip" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/landmark{ + name = "lightsout" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/center) +"xiA" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/machinery/air_sensor{ + id_tag = "toxins_petrov_sensor" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/shuttle/petrov/gas) +"xiD" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"xiE" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"xiJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/ladder/up, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"xiS" = ( +/obj/structure/table/rack, +/obj/item/clothing/accessory/storage/bandolier/safari, +/obj/item/gun/launcher/net, +/obj/item/clothing/accessory/storage/bandolier/safari, +/obj/item/gun/launcher/net, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/exploration/storage) +"xiV" = ( +/obj/floor_decal/industrial/traffic{ + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/floor_decal/industrial/traffic{ + dir = 1; + detail_color = "#a2819e"; + color = "#a2819e" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner, +/turf/simulated/floor/tiled/techfloor, +/area/turbolift/rndmaint_lift) +"xiW" = ( +/obj/structure/table/glass, +/obj/machinery/chemical_dispenser/bar_coffee/full{ + pixel_y = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/heads/office/iaa/high_sec) +"xiY" = ( +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/railing/mapped, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/power/terminal, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"xjd" = ( +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/turf/simulated/floor/carpet/purple, +/area/crew_quarters/heads/office/rd/cobed) +"xje" = ( +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"xjf" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/beige{ + dir = 5 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"xjk" = ( +/obj/floor_decal/corner/green/half{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"xjo" = ( +/obj/floor_decal/corner/grey/full, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"xjq" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 6 + }, +/obj/floor_decal/techfloor/orange/corner, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"xjr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/sign/warning/pods/west{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"xjt" = ( +/obj/machinery/vending/snack, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"xjw" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/floor_decal/corner/green/bordercorner, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"xjE" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/structure/table/standard{ + name = "plastic table frame" + }, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 4; + pixel_x = -14 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"xjQ" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/tech_loot, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"xjT" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/bridgedeck/starboard) +"xjV" = ( +/turf/simulated/wall/prepainted, +/area/hallway/primary/seconddeck/aft_stairwell) +"xjZ" = ( +/turf/simulated/wall/r_wall/hull, +/area/maintenance/solar/starboard) +"xkk" = ( +/obj/machinery/door/airlock/external{ + frequency = 1379; + id_tag = "ai_bridge_inner"; + locked = 1; + name = "Engineering External Access" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/access_button/airlock_interior{ + pixel_y = 24; + master_tag = "ai_bridge_airlock" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/bridgedeck/aft) +"xkl" = ( +/obj/structure/sign/warning/airlock{ + dir = 8 + }, +/turf/simulated/wall/prepainted, +/area/maintenance/solar/bridge_port) +"xkv" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"xkD" = ( +/obj/machinery/constructable_frame/computerframe{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"xkE" = ( +/obj/structure/table/reinforced, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Holodeck - Center" + }, +/obj/structure/sign/poster{ + pixel_y = 32 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/holocontrol) +"xkF" = ( +/obj/structure/table/standard, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/floor_decal/corner/green/half{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"xkH" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/center) +"xkR" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"xkX" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"xkZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"xlb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/solar) +"xlf" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "hydroponics_space"; + name = "Space Shutters"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/hydroponics) +"xli" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"xlq" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/maintenance/fourthdeck/forestarboard) +"xls" = ( +/obj/structure/ladder, +/obj/structure/lattice, +/turf/simulated/open, +/area/maintenance/firstdeck/centralport) +"xlz" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"xlB" = ( +/obj/structure/closet/emcloset, +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/aftstarboard) +"xlH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/maintenance, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar_stairs/upper) +"xlN" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/morgue) +"xlV" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/railing/mapped, +/turf/simulated/floor/grass/cut, +/area/hallway/primary/bridgedeck/center) +"xmj" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/rnd/xenobiology/xenoflora) +"xml" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/blue, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/water_cell) +"xmm" = ( +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 8 + }, +/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/dark/monotile, +/area/medical/wardhallway) +"xmq" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/bed/sofa/l/brown{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/black, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/cafe) +"xmF" = ( +/obj/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/structure/closet/firecloset, +/obj/item/storage/briefcase/inflatable, +/obj/random/maintenance, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "bridgesafe_front"; + name = "safe room door-control"; + pixel_x = -24; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"xmH" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/lightgrey/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"xmK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"xmN" = ( +/obj/structure/closet/emcloset, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/space) +"xmU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/gas) +"xnd" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/industrial/hatch/yellow, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/sign/warning/high_voltage{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/hop) +"xnf" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/item/book/manual/engineering_singularity_safety, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"xng" = ( +/obj/structure/lattice, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/space) +"xnh" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/machinery/computer/cryopod{ + pixel_x = -32 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod7/station) +"xnl" = ( +/obj/structure/bed/chair/shuttle/blue, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/guppy_hangar/start) +"xno" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"xnr" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"xnB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 1; + name = "Security Checkpoint"; + sort_type = "Security Checkpoint" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"xnJ" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/bed/chair/office/comfy/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"xnL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 8; + name = "Security Equipment"; + sort_type = "Security Equipment" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/corner/red/bordercorner, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"xnM" = ( +/obj/floor_decal/corner/darkblue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"xoa" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/aft) +"xoc" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/hallway/primary/seconddeck/central_stairwell) +"xof" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/shield_diffuser, +/obj/machinery/door/airlock/external{ + frequency = 1379; + id_tag = "solar_bridge_outer"; + locked = 1; + name = "Engineering External Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar/bridge_starboard) +"xog" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/constructable_frame, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/foreport) +"xoo" = ( +/obj/structure/stairs/east, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level2) +"xor" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cargo_r) +"xov" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "solar_starboard_inner"; + name = "Engineering External Access" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar/starboard) +"xoy" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/black{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"xoB" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "sd_port_pump" + }, +/obj/structure/catwalk, +/obj/machinery/camera/network/engine{ + c_tag = "Engine - Access"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"xoP" = ( +/obj/item/bikehorn/rubberducky, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head) +"xoT" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/center) +"xoZ" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/firstdeck/center) +"xpg" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "bridge_windows" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/bridge) +"xpq" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"xpx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"xpy" = ( +/obj/structure/sign/warning/docking_area{ + dir = 1 + }, +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/docking) +"xpJ" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/cart{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"xpM" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/sign/warning/biohazard{ + pixel_y = -32 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"xpO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"xpP" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 6 + }, +/obj/machinery/door/blast/regular{ + id_tag = "ThrusterVents"; + name = "Thruster Blast Door" + }, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/engineering/engine_room) +"xpQ" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 10 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"xpT" = ( +/obj/floor_decal/techfloor, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"xpU" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"xpV" = ( +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/obj/floor_decal/industrial/danger/corner, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft_stairwell) +"xpX" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters{ + density = 0; + icon_state = "shutter0"; + id_tag = "hangar_hallway_shutters"; + name = "Hangar Deck Hallway Shutters"; + opacity = 0 + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 2; + id_tag = "lockdown3_4" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/fore) +"xqa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"xqd" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"xqh" = ( +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/firstdeck/center) +"xql" = ( +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/xenobiology/atmos) +"xqA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"xqJ" = ( +/turf/simulated/wall/prepainted, +/area/vacant/monitoring) +"xrb" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/prison) +"xrm" = ( +/obj/structure/dogbed, +/mob/living/simple_animal/friendly/koala/samorey, +/obj/floor_decal/carpet/purple, +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/obj/floor_decal/carpet/purple{ + dir = 10 + }, +/turf/simulated/floor/carpet/purple, +/area/chapel/office) +"xrn" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/machinery/disposal/small{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/sign/warning/airlock{ + color = "#ff9900"; + name = "\improper WAY TO SPACE"; + dir = 8; + pixel_x = 32 + }, +/obj/floor_decal/corner/black/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/interrogation/second) +"xru" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + target_pressure = 200 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"xrv" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/bed/chair/padded/blue, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/seconddeck) +"xrw" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"xrC" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/green/border, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"xrJ" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"xrL" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/structure/table/steel, +/obj/item/soap/red_soap, +/obj/item/material/twohanded/baseballbat, +/turf/simulated/floor/tiled/dark, +/area/maintenance/firstdeck/forestarboard) +"xrV" = ( +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"xrW" = ( +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"xrZ" = ( +/obj/machinery/photocopier, +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/cmo) +"xsa" = ( +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"xsf" = ( +/obj/structure/catwalk, +/obj/structure/handrail, +/turf/simulated/open, +/area/space) +"xsg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 10 + }, +/obj/structure/closet/l3closet/scientist, +/obj/structure/sign/xenobio_3{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/xenobio) +"xsi" = ( +/obj/structure/table/standard, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/random/single/color/cable_coil, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"xsl" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"xsr" = ( +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/command/chief_steward) +"xsu" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"xsz" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "Biohazard"; + name = "Biohazard Shutter" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + dir = 4; + name = "Miscellaneous Research"; + req_access = newlist() + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/containment) +"xsB" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"xsC" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"xsF" = ( +/obj/machinery/door/airlock/security{ + name = "Security Checkpoint"; + req_access = list(list("ACCESS_SECURITY","ACCESS_FORENSICS")); + secured_wires = 1; + autoset_access = 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/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"xsN" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/machinery/power/smes/buildable/preset/sierra/substation_full{ + RCon_tag = "Ship Energy Brig" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/maintenance/firstdeck/foreport) +"xsQ" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"xsS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/structure/closet/emcloset, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engine_monitoring) +"xsT" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue{ + dir = 4 + }, +/obj/shuttle_landmark/lift/medical_top, +/turf/simulated/floor/tiled/dark, +/area/turbolift/medical_lift) +"xsW" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/turf/simulated/floor/tiled/techfloor, +/area/vacant/monitoring) +"xtu" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/bridge) +"xtD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"xtM" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/obj/floor_decal/corner/grey_alt{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/assembly/robotics) +"xtN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"xtS" = ( +/obj/structure/closet/secure_closet/atmos_sierra, +/obj/item/rpd, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"xtU" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"xtW" = ( +/obj/floor_decal/industrial/traffic, +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"xtX" = ( +/obj/machinery/door/airlock/medical{ + id_tag = "sierra_surgery2"; + name = "Operating Room 2"; + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/holosign/surgery{ + dir = 8; + id_tag = "sierra_surgery2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery/second) +"xuf" = ( +/obj/structure/hygiene/shower{ + dir = 1 + }, +/obj/structure/hygiene/drain/bath, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head) +"xuk" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/maintenance_equipstorage) +"xuw" = ( +/obj/machinery/sleeper{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/sign/warning/nosmoking_1{ + dir = 4; + icon_state = "nosmoking"; + pixel_x = -32 + }, +/obj/machinery/camera/network/medbay{ + c_tag = "Critical Wing - Entry"; + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/sleeper) +"xuz" = ( +/obj/structure/table/standard, +/obj/item/device/scanner/spectrometer/adv, +/obj/item/storage/box/syringes, +/obj/item/storage/box/beakers, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/dropper, +/turf/simulated/floor/tiled/dark/monotile, +/area/shuttle/petrov/scan) +"xuD" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai_upload) +"xuN" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 4; + name = "security console" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/techfloor, +/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/techfloor, +/area/security/sierra/dockcheck) +"xuO" = ( +/turf/simulated/wall/prepainted, +/area/quartermaster/shuttlefuel) +"xuU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"xvl" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"xvr" = ( +/obj/structure/hygiene/shower{ + dir = 4; + pixel_x = 5 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 2 + }, +/obj/structure/curtain/open/shower, +/obj/item/soap, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/obj/structure/hygiene/drain, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/prison) +"xvB" = ( +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/machinery/reagentgrinder/juicer, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/corner/green/three_quarters{ + dir = 8 + }, +/obj/item/reagent_containers/glass/beaker{ + pixel_x = 5 + }, +/obj/item/reagent_containers/glass/beaker{ + pixel_x = -2; + pixel_y = 7 + }, +/obj/item/reagent_containers/dropper, +/turf/simulated/floor/tiled, +/area/hydroponics) +"xvF" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/random/maintenance, +/turf/simulated/floor/tiled, +/area/maintenance/seconddeck/aftstarboard) +"xvO" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"xvP" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/quartermaster/hangar/upper) +"xvS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"xvT" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) +"xvV" = ( +/obj/machinery/telecomms/server/presets/common, +/obj/machinery/light_switch{ + pixel_y = 24 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"xwc" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/canister) +"xwd" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/flora/pottedplant/decorative, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"xwl" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/ladder/up, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue) +"xwp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/crystal, +/area/crew_quarters/adherent) +"xws" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"xwu" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"xwC" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"xwJ" = ( +/obj/structure/foamedmetal, +/turf/simulated/floor/plating, +/area/crew_quarters/commissary) +"xwP" = ( +/obj/structure/bed/chair/office/light, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/scan) +"xwR" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralstarboard) +"xwV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"xwW" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/storage/firstaid/regular{ + pixel_y = 8 + }, +/obj/item/storage/firstaid/regular{ + pixel_y = -2; + pixel_x = 9 + }, +/obj/machinery/body_scan_display{ + pixel_y = 24 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"xwY" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) +"xxb" = ( +/obj/structure/bed/sofa/r/black{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/forensic) +"xxf" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"xxk" = ( +/obj/floor_decal/techfloor/orange, +/obj/structure/bed/chair/padded/blue{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"xxl" = ( +/obj/machinery/reagentgrinder, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/research{ + c_tag = "Xenobiology - Surgery"; + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/xenobiology/level1) +"xxo" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/table/standard, +/obj/item/device/scanner/xenobio, +/obj/item/device/scanner/xenobio, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/rnd/xenobiology/level1) +"xxp" = ( +/obj/machinery/computer/modular/preset/medical{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/mentalhealth) +"xxv" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Engineering EVA Storage"; + req_access = newlist() + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/engine_eva) +"xxB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"xxZ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/atmos{ + dir = 8; + name = "Bridge Atmospherics Supply" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos/bridge) +"xya" = ( +/obj/machinery/atmospherics/binary/pump, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"xye" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"xyh" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft_stairwell) +"xyk" = ( +/obj/structure/roller_bed, +/obj/structure/iv_stand, +/obj/floor_decal/borderfloor{ + color = null; + dir = 9 + }, +/obj/floor_decal/corner/blue/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + color = null; + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/exploration_shuttle/medical) +"xyo" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/bordercorner2{ + dir = 1 + }, +/obj/structure/bookcase/manuals/engineering, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"xyq" = ( +/obj/structure/wall_frame/standard, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 4; + icon_state = "shutter0"; + id_tag = "concheckwindow"; + name = "Operation Checkpoint Shutters"; + opacity = 0 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/door/window/southleft{ + dir = 4; + name = "Security Checkpoint"; + autoset_access = 0 + }, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 8; + name = "Security Checkpoint" + }, +/obj/machinery/door/firedoor, +/obj/structure/table/wallf{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/opscheck) +"xyt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"xyI" = ( +/obj/machinery/suit_storage_unit/pilot, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/eva) +"xyL" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "burst_s"; + dir = 1 + }, +/obj/paint/red, +/obj/paint_stripe/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_pod/escape_pod9/station) +"xyO" = ( +/obj/decal/cleanable/dirt, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"xyV" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Adherent Maintenance" + }, +/turf/simulated/floor/crystal, +/area/crew_quarters/adherent) +"xzd" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"xzh" = ( +/obj/machinery/computer/modular/preset/engineering{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/camera/network/engineering{ + c_tag = "Atmospherics - Bridge Deck"; + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/bridge) +"xzj" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/solar/bridge_port) +"xzu" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/power/port_gen/pacman{ + sheets = 25 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"xzw" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/airless, +/area/space) +"xzD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/access_button/airlock_interior{ + master_tag = "solar_starboard"; + name = "interior access button"; + pixel_x = 12; + pixel_y = 27; + req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/solar/starboard) +"xzF" = ( +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/interrogation) +"xzJ" = ( +/obj/structure/disposalpipe/down{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/lattice, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/maintenance/thirddeck/starboard) +"xzL" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "guppy_shield"; + name = "Window Shield" + }, +/obj/paint_stripe/yellow, +/turf/simulated/floor/plating, +/area/guppy_hangar/start) +"xzN" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/thruster/d3starboard) +"xzT" = ( +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/infirmary) +"xzY" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/backstorage) +"xAd" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe/upper) +"xAj" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"xAk" = ( +/obj/floor_decal/corner/grey/full, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"xAm" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 5 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/lightgrey/bordercorner2{ + dir = 4 + }, +/obj/structure/holoplant, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"xAq" = ( +/obj/structure/bed/sofa/l/beige, +/turf/simulated/floor/carpet, +/area/crew_quarters/lounge) +"xAw" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"xAE" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/bridge/storage) +"xAG" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"xAH" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/structure/filingcabinet/chestdrawer{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/camera/network/research{ + c_tag = "Research - Misc. Chemistry"; + dir = 8; + network = list("Research","Miscellaneous Reseach") + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"xAM" = ( +/obj/machinery/suspension_gen, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/equipment) +"xBb" = ( +/obj/structure/table/standard, +/obj/item/board, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/sierra/prison) +"xBh" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the engine radiator viewport shutters."; + dir = 8; + id_tag = "EngineRadiatorViewport"; + name = "Engine Radiator Viewport Shutters"; + pixel_x = 25; + req_access = list("ACCESS_ENGINE_EQUIP") + }, +/obj/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 9 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"xBi" = ( +/obj/floor_decal/corner/yellow/border{ + dir = 9 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"xBk" = ( +/obj/structure/table/rack, +/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/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/item/clothing/head/helmet/space/emergency, +/obj/item/clothing/head/helmet/space/emergency, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/safe_room/firstdeck) +"xBo" = ( +/obj/floor_decal/carpet/blue2{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue3, +/area/crew_quarters/heads/office/cmo/cobed) +"xBy" = ( +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"xBF" = ( +/obj/structure/closet/crate/bin, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Laundry room"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/laundry) +"xBH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/bed/chair/office/purple, +/obj/floor_decal/corner/purple/diagonal, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/level1) +"xBR" = ( +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"xBY" = ( +/obj/structure/sign/warning/biohazard{ + pixel_y = -24 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/rnd/xenobiology/atmos) +"xBZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"xCa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"xCc" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/corner/purple/half{ + dir = 8 + }, +/obj/item/stool/padded, +/turf/simulated/floor/tiled/dark, +/area/shuttle/petrov/security) +"xCd" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fore) +"xCg" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"xCn" = ( +/obj/landmark/map_data{ + height = 5 + }, +/turf/space, +/area/space) +"xCs" = ( +/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/crew_quarters/dungeon_master_lounge) +"xCz" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"xCA" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/engineering/atmos) +"xCB" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"xCC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/turf/simulated/wall/r_wall/hull, +/area/medical/virology/atmos) +"xCG" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/turret_protected/ai_cyborg_station) +"xCJ" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 5 + }, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/old_tile, +/area/crew_quarters/head) +"xCQ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow/border, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"xCW" = ( +/obj/structure/disposalpipe/down{ + dir = 8 + }, +/obj/structure/lattice, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/fuel{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ + dir = 1 + }, +/turf/simulated/open, +/area/maintenance/seconddeck/aftport) +"xCY" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/cable/green, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/nuke_storage) +"xDi" = ( +/obj/paint/black, +/obj/paint_stripe/turquoise, +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai_teleport) +"xDk" = ( +/obj/structure/railing/mapped, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"xDs" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cargo_l) +"xDA" = ( +/obj/structure/sign/deck/first{ + dir = 8; + pixel_x = 32; + pixel_y = -32 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/open, +/area/hallway/primary/firstdeck/aft_stairwell) +"xDC" = ( +/obj/machinery/vending/hotfood{ + dir = 1 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/obj/machinery/light_construct, +/turf/simulated/floor/tiled/dark, +/area/vacant/mess) +"xDJ" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"xDK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"xDT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"xDU" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"xDX" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"xEc" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"xEd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"xEe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"xEi" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"xEk" = ( +/obj/structure/table/standard, +/obj/machinery/reagent_temperature, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"xEn" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"xEA" = ( +/obj/structure/closet/emcloset, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) +"xEB" = ( +/obj/floor_decal/corner/grey{ + dir = 5 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1port) +"xEE" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"xEG" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/sleep/cryo/south) +"xEI" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"xEJ" = ( +/obj/structure/bed/chair/pew/left, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/actor/stage) +"xEM" = ( +/obj/structure/sign/directions/supply{ + dir = 8; + pixel_y = -31 + }, +/obj/structure/sign/directions/engineering{ + dir = 8; + pixel_y = -24 + }, +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck - Central Stairwell"; + dir = 1 + }, +/turf/simulated/open, +/area/hallway/primary/firstdeck/central_stairwell) +"xEQ" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/storage2) +"xES" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/equipment) +"xFc" = ( +/turf/simulated/floor/plating, +/area/medical/morgue) +"xFd" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/fourthdeck/aft) +"xFn" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/materials_storage) +"xFo" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"xFp" = ( +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/medical/morgue/autopsy) +"xFy" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/machinery/button/blast_door{ + pixel_y = -24; + dir = 1; + id_tag = "armory"; + name = "Armory blast door-control"; + req_access = list("ACCESS_ARMORY") + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/small, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"xFG" = ( +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/thirddeck) +"xFK" = ( +/obj/machinery/door/window/southleft{ + dir = 1; + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/door/window/southleft{ + name = "Containment Pen"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + id_tag = "xenobioa1"; + name = "Containment Blast Doors" + }, +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/level2) +"xFL" = ( +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/fore) +"xFQ" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/button/blast_door{ + dir = 4; + id_tag = "Skynet_launch"; + name = "Charging Bay Door Control"; + pixel_x = -24; + req_access = list("ACCESS_ROBOTICS") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/chargebay) +"xFT" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/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/structure/holoplant, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/fore) +"xGg" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"xGi" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/crew_quarters/sleep/bunk) +"xGr" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/corner/black/border{ + dir = 4 + }, +/obj/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/hydroponics/third_deck_storage) +"xGv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 6 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 5 + }, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/old_tile, +/area/crew_quarters/head) +"xGD" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/corner/purple, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/level1) +"xGM" = ( +/obj/floor_decal/corner/yellow/three_quarters{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"xGT" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/food/condiment/barbecue{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"xGX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external{ + frequency = 1379; + id_tag = "ai_bridge_outer"; + locked = 1; + name = "Engineering External Access" + }, +/obj/machinery/access_button/airlock_exterior{ + pixel_y = -24; + master_tag = "ai_bridge_airlock" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/bridgedeck/aft) +"xGZ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/starboard) +"xHc" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/centralport) +"xHi" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"xHt" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/quartermaster/hangar/upper) +"xHE" = ( +/obj/structure/closet/chefcloset_sierra, +/obj/floor_decal/corner/grey/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/galley/backroom) +"xHI" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/beige{ + dir = 10 + }, +/obj/floor_decal/corner/yellow/border, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"xHK" = ( +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/foreport) +"xHM" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/infirmreception) +"xHR" = ( +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/space) +"xHT" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"xHY" = ( +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/captain) +"xIb" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"xIg" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/foreport) +"xIj" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftport) +"xIk" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1380; + id_tag = "admin_shuttle_dock_outer"; + name = "Docking Port Airlock" + }, +/obj/machinery/shield_diffuser, +/obj/shuttle_landmark/sierra/deck3/skrellshuttle, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/fourthdeck/center) +"xIl" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"xIp" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/machinery/hologram/holopad/longrange, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/shuttle/escape_pod/escape_pod5/station) +"xIs" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/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" + }, +/obj/machinery/door/airlock/glass/civilian{ + name = "Laundry" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/laundry) +"xIC" = ( +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/aft_stairwell) +"xIG" = ( +/obj/structure/bed/chair/padded/blue, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"xII" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/reinforced/hydrogen/fuel, +/area/thruster/d3port) +"xIJ" = ( +/obj/structure/curtain/medical, +/turf/simulated/floor/tiled/white, +/area/medical/ward) +"xIM" = ( +/obj/item/stool/bar, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"xIQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/prison) +"xIV" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/engineering{ + name = "Drone Bay"; + secured_wires = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/turret_protected/ai_cyborg_station) +"xIW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 23 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/teleporter) +"xIY" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 8; + frequency = 1438; + id = "cooling_in"; + name = "Coolant Injector"; + pixel_y = 1; + power_rating = 30000; + use_power = 1; + volume_rate = 700 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/engineering/engine_room) +"xIZ" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology) +"xJc" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/gas) +"xJd" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "library_space_lower"; + name = "Space Shutters"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/lounge/upper) +"xJg" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/blue/border, +/obj/machinery/light_switch{ + pixel_x = 21; + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/hop/cobed) +"xJl" = ( +/obj/structure/railing/mapped, +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"xJo" = ( +/turf/simulated/wall/r_wall/hull, +/area/crew_quarters/visitors) +"xJH" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/medical{ + id_tag = "MedbayER"; + name = "Critical Wing"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"xJO" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"xJP" = ( +/obj/paint/red, +/obj/paint_stripe/white, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/turf/simulated/wall/r_titanium, +/area/guppy_hangar/start) +"xJT" = ( +/obj/structure/bed/chair/comfy/teal{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/medical/infirmreception) +"xJU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/fourthdeck/aft) +"xKg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/grey/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"xKj" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/thirddeck/center) +"xKr" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/forestarboard) +"xKw" = ( +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/random/tech_supply{ + pixel_y = 5; + pixel_x = -6 + }, +/obj/random/tech_supply{ + pixel_y = -8; + pixel_x = -9 + }, +/obj/random/tech_supply{ + pixel_y = 6; + pixel_x = 5 + }, +/obj/random/tech_supply{ + pixel_y = -8; + pixel_x = 7 + }, +/obj/random/tool{ + pixel_y = 2; + pixel_x = 4 + }, +/obj/random/tool{ + pixel_y = -2; + pixel_x = -5 + }, +/obj/random/tank{ + pixel_y = -1; + pixel_x = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"xKB" = ( +/obj/structure/table/rack, +/obj/item/aiModule/freeform, +/obj/item/aiModule/protectStation, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/door/window/northright{ + dir = 4; + name = "Utility Modules" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"xKP" = ( +/obj/machinery/door/blast/regular/open{ + density = 0; + id_tag = "calypso_shutters"; + name = "Protective Shutters"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/paint/black, +/obj/paint_stripe/blue, +/turf/simulated/floor/plating, +/area/exploration_shuttle/cargo_r) +"xKS" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/equipment) +"xKT" = ( +/obj/structure/closet/crate, +/obj/item/clothing/mask/muzzle/tape, +/obj/item/clothing/mask/plunger, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"xLe" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"xLl" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/quartermaster/exploration/storage) +"xLq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/hallway/primary/firstdeck/center) +"xLy" = ( +/obj/structure/sign/warning/pods/south{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"xLz" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/suit_storage_unit/medical, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/eva) +"xLL" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/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{ + dir = 4 + }, +/obj/machinery/door/airlock/research{ + dir = 4; + name = "Research Office"; + req_access = newlist() + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/office) +"xLN" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/xenobio) +"xLO" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"xLQ" = ( +/obj/floor_decal/corner/red/half{ + dir = 8 + }, +/obj/floor_decal/corner/red{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/central_stairwell) +"xLU" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/bridgedeck/port) +"xLV" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"xMc" = ( +/obj/floor_decal/corner/black/mono, +/obj/floor_decal/corner/green/border{ + dir = 9 + }, +/obj/floor_decal/corner/green/bordercorner, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/commissary) +"xMk" = ( +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/airless, +/area/solar/starboard) +"xMl" = ( +/obj/floor_decal/techfloor/orange{ + dir = 9 + }, +/obj/structure/bed/chair/padded/blue, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/bridge) +"xMn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/green{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/thruster/d1starboard) +"xMp" = ( +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"xMu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/wardhallway) +"xMx" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/red/border, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"xMy" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 5 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"xMA" = ( +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/rnd/toxins) +"xMC" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/steel, +/obj/item/paper/sierra/compactor, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/compactor) +"xMK" = ( +/obj/structure/undies_wardrobe, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"xMO" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"xMX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/bridgedeck/aft) +"xNb" = ( +/obj/machinery/door/airlock/civilian{ + name = "Toilets"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/freezer, +/area/vacant/cargo) +"xNe" = ( +/obj/structure/sign/warning/radioactive, +/turf/simulated/wall/r_wall/hull, +/area/space) +"xNg" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = 8; + pixel_y = -24 + }, +/obj/machinery/button/holosign{ + dir = 1; + id_tag = "surgery1"; + pixel_y = -24 + }, +/obj/machinery/button/windowtint{ + dir = 1; + id = "sierra_surgery1"; + pixel_x = -8; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/surgery) +"xNk" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) +"xNv" = ( +/obj/floor_decal/corner/red{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/bridge/lobby) +"xNy" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/starboard) +"xNz" = ( +/obj/shuttle_landmark/sierra/deck5/guppy, +/turf/space, +/area/space) +"xND" = ( +/obj/machinery/shield_diffuser, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_7_berth_hatch"; + name = "Escape Pod Seven" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/firstdeck/centralstarboard) +"xNH" = ( +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/hallway/primary/bridgedeck/center) +"xNI" = ( +/obj/structure/reagent_dispensers/water_cooler{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"xNM" = ( +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/docking) +"xNQ" = ( +/turf/simulated/wall/r_wall/hull, +/area/rnd/xenobiology/level1) +"xOd" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/machinery/power/smes/buildable/preset/sierra/substation_full{ + RCon_tag = "Substation - AI Upload" + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/window/southright{ + name = "AI Maintenance" + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/turret_protected/ai_upload) +"xOe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"xOf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/port) +"xOg" = ( +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/sleep/cryo/firstdeck) +"xOp" = ( +/obj/structure/window/reinforced, +/obj/structure/filingcabinet{ + pixel_x = -10 + }, +/obj/structure/filingcabinet, +/obj/structure/filingcabinet{ + pixel_x = 10 + }, +/obj/item/folder/red{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/item/folder/red{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/item/folder/red{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/item/folder/red{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/item/folder/blue{ + pixel_y = 5; + pixel_x = 5 + }, +/obj/item/folder/blue{ + pixel_y = 5; + pixel_x = 5 + }, +/obj/item/folder/blue{ + pixel_y = 5; + pixel_x = 5 + }, +/obj/item/folder, +/obj/item/folder, +/obj/item/folder/nt, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"xOs" = ( +/obj/wallframe_spawn/reinforced/polarized, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/curtain/black, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"xOH" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"xOK" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/exploration_shuttle/cockpit) +"xOM" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/command/exploration_leader) +"xOR" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"xOY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/orange/corner, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"xPa" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"xPb" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/yellow/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) +"xPe" = ( +/obj/structure/table/standard, +/obj/item/folder/yellow, +/obj/machinery/requests_console{ + department = "Cargo Bay"; + departmentType = 8; + pixel_y = -27 + }, +/obj/floor_decal/corner/yellow/half, +/turf/simulated/floor/tiled, +/area/quartermaster/office) +"xPm" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "td_port" + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"xPo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/equipment) +"xPp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"xPs" = ( +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) +"xPv" = ( +/obj/floor_decal/industrial/traffic{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"xPy" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/assembly/chargebay) +"xPF" = ( +/obj/structure/table/rack, +/obj/item/storage/firstaid/fire{ + pixel_y = 10 + }, +/obj/item/storage/firstaid/trauma, +/obj/item/storage/firstaid/o2{ + pixel_y = -10 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/medical/equipstorage) +"xPG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/heads/office/rd) +"xPH" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"xPM" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "sierra_main_pd" + }, +/obj/structure/cable/green, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"xPO" = ( +/obj/fluid_mapped, +/obj/item/clothing/under/swimsuit/blue, +/obj/item/beach_ball, +/obj/item/bananapeel, +/obj/random/junk, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"xPU" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/civilian{ + id_tag = "shower2"; + name = "Second Private Shower" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/crew_quarters/head_big) +"xQg" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition/storage) +"xQm" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/green{ + 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/door/airlock/civilian{ + dir = 8; + name = "Cryo Storage" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/sleep/cryo/bridge) +"xQy" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/freezer, +/area/security/sierra/breakroom) +"xQE" = ( +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/table/standard, +/obj/structure/closet/medical_wall/filled{ + pixel_y = 24 + }, +/obj/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled, +/area/rnd/research) +"xQF" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/quartermaster/exploration/briefing_room) +"xQL" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"xQT" = ( +/obj/machinery/light_switch{ + pixel_x = -6; + pixel_y = 28 + }, +/obj/machinery/airlock_sensor/airlock_interior{ + id_tag = "xenohight_airlock_sensor_inner"; + master_tag = "xenohight_airlock"; + pixel_x = 5; + pixel_y = 29; + req_access = list("ACCESS_XENOBIO") + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/open, +/area/rnd/xenobiology/level1) +"xQZ" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"xRa" = ( +/turf/simulated/wall/prepainted, +/area/crew_quarters/heads/captain) +"xRc" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/sleep/cryo/bridge) +"xRf" = ( +/obj/machinery/door/window{ + autoset_access = 0; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/misc_lab) +"xRA" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/decal/cleanable/cobweb{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"xRB" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/junction/yjunction, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"xRM" = ( +/obj/structure/railing/mapped, +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/turf/simulated/floor/tiled/white, +/area/medical/maintenance_equipstorage) +"xRO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"xRU" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow/border{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/item/storage/box/glasses, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/engineering/engineering_monitoring) +"xSc" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/corner, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespace) +"xSl" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/aftstarboard) +"xSm" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/solar/bridge_port) +"xSo" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/bordercorner2{ + dir = 9 + }, +/obj/structure/flora/pottedplant/orientaltree, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"xSp" = ( +/obj/structure/synthesized_instrument/synthesizer/piano, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/floor_decal/spline/fancy/black{ + dir = 1 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"xSr" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/item/storage/box/donut, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge/upper) +"xSt" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/office/post) +"xSy" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"xSA" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/armory) +"xSF" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"xSK" = ( +/obj/structure/bed/chair/armchair/brown, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"xSL" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 1 + }, +/obj/structure/sign/poster{ + pixel_x = 32 + }, +/turf/simulated/floor/carpet, +/area/vacant/gambling) +"xSX" = ( +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"xTc" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/floor_decal/corner/purple, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora) +"xTj" = ( +/turf/simulated/floor/tiled/white, +/area/medical/staging) +"xTl" = ( +/obj/structure/cable/green{ + 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/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft) +"xTq" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/orange, +/obj/structure/window/boron_reinforced{ + dir = 1 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/gravitaional_generator) +"xTs" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/mining/drill, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/expedition/storage) +"xTt" = ( +/obj/item/stool/padded, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley/backroom) +"xTv" = ( +/obj/structure/hygiene/shower{ + dir = 4; + pixel_x = -2 + }, +/obj/structure/curtain/open/shower{ + opacity = 1 + }, +/obj/item/bikehorn/rubberducky, +/obj/item/soap, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/heads/captain/secret_room/level_one) +"xTC" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/floor_decal/carpet/blue{ + dir = 4 + }, +/obj/floor_decal/carpet/blue, +/obj/floor_decal/carpet/blue{ + dir = 6 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/item/folder/nt, +/turf/simulated/floor/carpet/blue, +/area/crew_quarters/heads/office/iaa) +"xTD" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/turret_protected/ai_cyborg_station) +"xTI" = ( +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"xTK" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"xTP" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"xTZ" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/assembly/robotics) +"xUd" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/largecrate, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"xUe" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/shuttle/escape_pod/escape_pod2/station) +"xUf" = ( +/obj/machinery/vending/weeb{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/visitors) +"xUo" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id_tag = "hangar_checkpoint_shutters"; + name = "Hangar Deck Checkpoint Shutters"; + opacity = 0 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/security/sierra/dockcheck) +"xUw" = ( +/turf/simulated/wall/prepainted, +/area/janitor) +"xUC" = ( +/obj/structure/sign/warning/fire{ + dir = 4; + pixel_x = -32; + pixel_y = 0 + }, +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/incinerator) +"xUF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/research{ + dir = 4; + name = "Miscellaneous Laboratory"; + req_access = newlist() + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/rnd/misc_lab) +"xUQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 6 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange/corner, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/fourthdeck/aft) +"xUT" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/seconddeck/forestarboard) +"xVc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"xVe" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "mining_internal" + }, +/obj/structure/plasticflaps, +/obj/machinery/door/firedoor, +/turf/simulated/floor, +/area/quartermaster/hangar) +"xVg" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"xVp" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/maintenance/compactor) +"xVJ" = ( +/obj/structure/sign/warning/fire, +/turf/simulated/wall/r_wall/hull, +/area/maintenance/thirddeck/aftport) +"xVO" = ( +/obj/floor_decal/corner/black{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/bed/chair/comfy/teal{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"xVQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/techmaint, +/area/storage/tech) +"xVR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/random/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"xVS" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/closet/crate/hydroponics/beekeeping, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/green{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"xVT" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/head_big) +"xWd" = ( +/obj/machinery/bodyscanner{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/maintenance_equipstorage) +"xWl" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"xWr" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_y = 29 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe) +"xWt" = ( +/obj/structure/closet/jcloset/sierra, +/turf/simulated/floor/tiled/steel_grid, +/area/bridge/storage) +"xWu" = ( +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "eng1"; + name = "Third Deck Starboard Nacelle Access"; + pixel_y = 21; + req_access = list("ACCESS_ENGINEERING") + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/thruster/d3starboard) +"xWx" = ( +/obj/structure/bed/chair/comfy/green{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/command/chief_steward) +"xWy" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"xWz" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/obj/floor_decal/corner/green/border, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft_stairwell) +"xWS" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/exploration) +"xWT" = ( +/obj/paint/black, +/turf/simulated/wall/ocp_wall, +/area/maintenance/thirddeck/aftport) +"xWW" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"xWY" = ( +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_x = -6; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge/marine_room) +"xWZ" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white/monotile, +/area/shuttle/petrov/cockpit) +"xXd" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/hologram/holopad, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/center) +"xXf" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/random_multi/single_item/space_rabbit, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/solar/port) +"xXl" = ( +/obj/machinery/computer/mining, +/obj/structure/wall_frame/standard, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"xXt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) +"xXy" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/status_display{ + pixel_y = -32 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/purple/bordercorner2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/center) +"xXG" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/virology, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/item/taperoll/engineering/applied, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/virology/lab) +"xXH" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"xXO" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/cafe) +"xXQ" = ( +/obj/machinery/door/airlock/civilian{ + autoset_access = 0; + id_tag = "bsa_safe_room"; + name = "Toilet" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/command/bsa) +"xXX" = ( +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "cChamber1pV"; + name = "Chamber Vent" + }, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/thruster/d3starboard) +"xYc" = ( +/obj/structure/largecrate, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"xYd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/blue, +/obj/paint_stripe/turquoise, +/obj/paint/black, +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai_teleport) +"xYm" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hydroponics) +"xYo" = ( +/obj/floor_decal/corner/black{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border, +/obj/structure/bed/chair/padded/teal{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"xYw" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/rnd/containment) +"xYz" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/light_switch{ + pixel_x = 10; + pixel_y = 28 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Dock Checkpoint" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/dockcheck) +"xYF" = ( +/obj/structure/table/steel, +/obj/machinery/chemical_dispenser/bar_alc/full, +/turf/simulated/floor/wood/walnut, +/area/vacant/bar) +"xYH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "eng3"; + name = "First Deck Starboard Access"; + pixel_y = 21 + }, +/obj/machinery/atmospherics/valve/shutoff/fuel{ + dir = 8 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/thruster/d1starboard) +"xYO" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/quartermaster/exploration/eva) +"xYT" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Fourth Deck - Fore Hallway Starboard" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/fourthdeck/fore) +"xYV" = ( +/obj/machinery/light_switch{ + pixel_x = -24; + pixel_y = 12 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/suit_cycler/science, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/eva) +"xYW" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway) +"xYX" = ( +/obj/random_multi/single_item/punitelly, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/wood, +/area/maintenance/firstdeck/forestarboard) +"xZb" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/table/standard, +/obj/item/storage/toolbox/electrical, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"xZc" = ( +/obj/structure/bed/chair/padded/yellow{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"xZd" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"xZk" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory/lobby) +"xZt" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/maintenance{ + autoset_access = 0 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar/upper) +"xZu" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/storage/airlock_canisters) +"xZv" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"xZx" = ( +/obj/machinery/door/airlock/external/escapepod{ + id_tag = "escape_pod_5_berth_hatch"; + name = "Escape Pod Five" + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/security/sierra/prison) +"xZC" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/access_button/airlock_exterior{ + dir = 1; + master_tag = "solar_port"; + name = "exterior access button"; + pixel_x = -12; + pixel_y = 27; + req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") + }, +/turf/simulated/floor/airless, +/area/solar/port) +"xZE" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"xZG" = ( +/obj/floor_decal/carpet/blue2{ + dir = 8 + }, +/obj/floor_decal/carpet/blue2, +/obj/floor_decal/carpet/blue2{ + dir = 10 + }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Head of Personnel's Desk"; + departmentType = 5; + name = "Head of Personnel RC"; + pixel_y = -32 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/heads/office/hop) +"xZN" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/crew_quarters/heads/captain) +"xZO" = ( +/obj/machinery/telecomms/bus/preset_two, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"xZS" = ( +/obj/structure/bed/chair/office/comfy/black{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/iaa/cobed) +"xZU" = ( +/obj/floor_decal/corner/purple{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/airlock) +"xZV" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/thruster/d1starboard) +"xZW" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/aftstarboard) +"xZX" = ( +/obj/decal/cleanable/dirt, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/vacant/mess) +"yad" = ( +/obj/floor_decal/corner/green/bordercee{ + dir = 4 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"yag" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/equipment) +"yah" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/door/blast/regular/lockdown{ + dir = 4; + id_tag = "lockdown3_3" + }, +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/hallway/primary/fourthdeck/center) +"yas" = ( +/obj/floor_decal/corner/grey/border, +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 18 + }, +/obj/item/storage/mirror{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/old_tile, +/area/crew_quarters/head) +"yav" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"yaz" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/black, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"yaA" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/expedition) +"yaV" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/assembly/robotics) +"yba" = ( +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/airless, +/area/solar/starboard) +"ybb" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/captain) +"ybd" = ( +/obj/decal/cleanable/dirt, +/obj/item/material/shard/shrapnel/titanium, +/turf/simulated/floor/plating, +/area/crucian_hangar/start) +"ybf" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/catwalk_plated, +/obj/machinery/camera/network/hangar{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"ybl" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/darkblue/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/darkblue/bordercorner2, +/turf/simulated/floor/tiled/dark, +/area/bridge/hallway) +"ybq" = ( +/obj/structure/closet/lawcloset, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/heads/office/iaa/high_sec) +"ybs" = ( +/obj/random/obstruction, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/port) +"ybu" = ( +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "pathfinder_office" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/command/exploration_leader) +"ybz" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos) +"ybD" = ( +/obj/structure/table/standard, +/obj/item/book/manual/rust_engine, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/vacant/prototype/control) +"ybM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"ybQ" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/freezer, +/obj/item/reagent_containers/spray/sterilizine, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/device/radio/intercom/department/medbay{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/surgery/second) +"ybR" = ( +/obj/machinery/papershredder, +/turf/simulated/floor/lino, +/area/command/chief_steward) +"ybU" = ( +/obj/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/escape_pod/escape_pod5/station) +"ybV" = ( +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/rnd/locker) +"ybW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/forestarboard) +"ybX" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/largecrate, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftport) +"ycb" = ( +/obj/structure/stairs/east, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"ych" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/landmark{ + name = "JoinLateCryo" + }, +/obj/floor_decal/techfloor/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/hallway/primary/fourthdeck/central_stairwell) +"ycn" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/grey/border, +/obj/floor_decal/corner/grey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/crew_quarters/galley) +"ycr" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/dungeon_master_lounge) +"ycs" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 4 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 1 + }, +/obj/structure/sign/deck/second{ + pixel_y = 35 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"ycv" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/hallway/primary/seconddeck/center) +"ycx" = ( +/obj/shuttle_landmark/ert/dock, +/obj/shuttle_landmark/sierra/deck1/skrellscout, +/turf/space, +/area/space) +"ycK" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/decal/cleanable/cobweb{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"ycO" = ( +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/machinery/nav_light, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ycV" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/blue{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/button/blast_door{ + id_tag = "xenobioaqua"; + name = "Aqua Containment Blast Doors"; + pixel_x = 6; + pixel_y = 29; + req_access = list("ACCESS_RESEARCH") + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/level1) +"ycX" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/random/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"ycY" = ( +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/tcommsat/computer) +"ydd" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/structure/holoplant, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/cafe) +"ydf" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/lime/bordercorner2{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/center) +"ydg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"ydi" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/bluegrid, +/area/turret_protected/ai) +"ydn" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/central_stairwell) +"ydo" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/centralport) +"ydu" = ( +/obj/floor_decal/corner/paleblue, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/hallway/infirmary) +"ydK" = ( +/obj/floor_decal/corner/lime/half{ + dir = 8 + }, +/obj/floor_decal/corner/lime{ + dir = 6 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/central_stairwell) +"ydR" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border, +/turf/simulated/floor/tiled/monotile, +/area/rnd/research) +"ydV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/southright{ + id = "Cell 2"; + name = "Cell two"; + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "security_permabrig_second_cell_shutters" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "security_lockdown"; + name = "Security Department Lockdown" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_ridged, +/area/security/sierra/brig) +"ydX" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/bed/chair/wood/maple{ + dir = 1 + }, +/turf/simulated/floor/wood/bamboo, +/area/crew_quarters/garden_room) +"ydZ" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "ship_sensor"; + name = "Ship Sensor Blastdoor" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/bridge) +"yeg" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"yeh" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/table/woodentable/mahogany, +/obj/floor_decal/carpet/red{ + dir = 4 + }, +/obj/item/material/ashtray/plastic{ + pixel_y = 3; + pixel_x = 5 + }, +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/carpet/red, +/area/crew_quarters/cafe/upper) +"yei" = ( +/obj/structure/railing/mapped, +/obj/structure/bed/chair/padded/yellow{ + dir = 1; + icon_state = "chair_preview" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"yel" = ( +/obj/machinery/computer/shuttle_control/explore/guppy{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/overmap/visitable/ship/landable/guppy, +/turf/simulated/floor/tiled/steel_ridged, +/area/guppy_hangar/start) +"yen" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/thirddeck/aftstarboard) +"yeq" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/blue, +/obj/structure/curtain/open/bed, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 24 + }, +/obj/landmark/start{ + name = "Internal Affairs Agent" + }, +/obj/item/storage/secure/safe{ + pixel_y = -24 + }, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/office/iaa/cobed) +"yev" = ( +/obj/structure/closet/secure_closet/guncabinet/sierra_armory/shotgun, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/camera/network/security{ + c_tag = "Security - Armory" + }, +/turf/simulated/floor/tiled/techfloor, +/area/security/sierra/armory) +"yew" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"yez" = ( +/obj/structure/table/standard, +/obj/item/storage/box/autoinjectors, +/obj/item/storage/box/beakers, +/turf/simulated/floor/plating, +/area/vacant/gambling) +"yeA" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/machinery/recharger, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/firstdeck/aft_stairwell) +"yeL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/maintenance/thirddeck/port) +"yeM" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/techfloor/orange{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"yeN" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/heads/captain/beach) +"yeP" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/exploration_shuttle/power) +"yeS" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/hangar) +"yeT" = ( +/obj/structure/cable/cyan{ + 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" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/quartermaster/hangar) +"yeX" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) +"yfa" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/crew_quarters/sleep/bunk) +"yfb" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/maintenance_equipstorage) +"yfc" = ( +/obj/machinery/computer/arcade, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"yfd" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/spline/fancy/black, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"yfi" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/floor_decal/steeldecal/steel_decals4, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/aft) +"yfk" = ( +/obj/structure/sign/warning/biohazard{ + pixel_x = 32 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/barricade, +/turf/simulated/floor/tiled/white, +/area/maintenance/seconddeck/starboard) +"yfl" = ( +/obj/structure/bed/sofa/r/lime{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/carpet/blue2, +/area/crew_quarters/cafe/upper) +"yfs" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"yfw" = ( +/obj/structure/stairs/west, +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/lounge) +"yfx" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 5 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/helium, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/engineering/atmos) +"yfy" = ( +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "skipjack_shuttle_dock_airlock_sensor"; + master_tag = "skipjack_shuttle_dock_airlock"; + pixel_x = -24 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "skipjack_shuttle_dock_airlock_pump" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/docking) +"yfF" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/substation/firstdeck) +"yfH" = ( +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/assembly/chargebay) +"yfO" = ( +/obj/structure/railing/mapped, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/maintenance/bridgedeck/aft) +"yfS" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/tcommsat/chamber) +"ygl" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_east = 2; + tag_north = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"ygp" = ( +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark/monotile, +/area/medical/sleeper) +"ygt" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"ygz" = ( +/obj/structure/sign/bluecross_2, +/turf/simulated/wall/prepainted, +/area/vacant/infirmary) +"ygC" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/bridgedeck/center) +"ygD" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8; + target_pressure = 200 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/storage/airlock_canisters) +"ygM" = ( +/obj/structure/bed/chair/padded/blue{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/floor_decal/techfloor/orange/corner{ + dir = 4 + }, +/obj/structure/sign/warning/pods/south{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/crew_quarters/safe_room/firstdeck) +"ygP" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/engineering/atmos/storage) +"ygQ" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftport) +"ygS" = ( +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/coin, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/starboard) +"ygU" = ( +/obj/floor_decal/corner/black/half, +/obj/floor_decal/corner/red/border, +/obj/structure/closet/walllocker{ + pixel_y = -28 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/gym) +"ygV" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/window/westleft{ + name = "Commissary rack"; + req_access = newlist(); + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/floor_decal/corner/black/full, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/obj/random/single/lighter, +/turf/simulated/floor/tiled, +/area/crew_quarters/commissary) +"yha" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/computer/modular/preset/security, +/turf/simulated/floor/tiled/dark, +/area/security/sierra/forensic) +"yhd" = ( +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/random_multi/single_item/space_rabbit, +/turf/simulated/floor/airless, +/area/solar/starboard) +"yhh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/aft) +"yhr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"yhv" = ( +/obj/machinery/atmospherics/valve/digital{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/engineering/atmos) +"yhD" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hallway/primary/firstdeck/center) +"yhF" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/medical/backstorage) +"yhP" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/bed/sofa/l/brown, +/obj/floor_decal/carpet{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/cafe/upper) +"yhR" = ( +/obj/structure/table/steel, +/turf/simulated/floor/plating, +/area/maintenance/compactor) +"yhW" = ( +/obj/structure/table/rack, +/obj/random/plushie, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/starboard) +"yhZ" = ( +/obj/machinery/door/airlock/external{ + frequency = 1379; + id_tag = "ai_core_outer"; + locked = 1; + name = "AI Core Internal Access" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/access_button{ + command = "cycle_exterior"; + frequency = 1379; + master_tag = "ai_core_airlock"; + name = "exterior access button"; + pixel_x = 24; + pixel_y = 10; + req_access = list("ACCESS_AI_UPLOAD") + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/turret_protected/ai) +"yia" = ( +/obj/floor_decal/corner/lime/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/soda, +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/fore) +"yib" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/rnd/toxins) +"yic" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/grass/cut, +/area/crew_quarters/garden_room) +"yid" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/test_room) +"yih" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) +"yiq" = ( +/obj/machinery/telecomms/broadcaster/preset_right, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/camera/network/command{ + c_tag = "Telecommunications - Server Room - East"; + network = list("Command","Engineering"); + dir = 1 + }, +/turf/simulated/floor/bluegrid, +/area/tcommsat/chamber) +"yiE" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hydroponics) +"yiL" = ( +/obj/floor_decal/corner/grey/full, +/obj/structure/bed/chair/office/comfy/blue{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/adjutants) +"yiN" = ( +/obj/structure/curtain{ + color = "#aa0000" + }, +/obj/floor_decal/spline/fancy/black{ + dir = 10 + }, +/turf/simulated/floor/wood/maple, +/area/crew_quarters/actor/stage) +"yiR" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 4; + icon_state = "map" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"yiT" = ( +/obj/structure/iv_stand, +/turf/simulated/floor/plating, +/area/vacant/infirmary) +"yiV" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/crew_quarters/docking) +"yiX" = ( +/obj/structure/sign/warning/vent_port{ + dir = 4; + pixel_x = -32 + }, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"yiZ" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/space) +"yjb" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped, +/turf/simulated/open, +/area/rnd/xenobiology/level1) +"yjh" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"yjA" = ( +/obj/structure/catwalk, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/random/trash, +/obj/machinery/light_construct, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/hangar) +"yjK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/port) +"yjR" = ( +/obj/floor_decal/spline/fancy/black{ + dir = 5 + }, +/obj/structure/bed/sofa/l/brown{ + dir = 8 + }, +/turf/simulated/floor/wood/mahogany, +/area/crew_quarters/cafe) +"yjU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/structure/bed/chair/office/green{ + dir = 1 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/white, +/area/medical/virology/lab) +"yka" = ( +/obj/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"yke" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/red/border, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2, +/obj/floor_decal/corner/red/bordercorner2, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/security/sierra/hallway/aft) +"yko" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/clothing/mask/breath, +/obj/item/tank/oxygen, +/obj/machinery/camera/network/medbay{ + c_tag = "Virology - Atmospherics Storage"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/medical/virology/atmos) +"ykB" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + dir = 8; + id_tag = "sd_port_pump" + }, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"ykD" = ( +/obj/floor_decal/corner/black/full, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/obj/structure/bed/chair/padded/blue{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -29 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge/marine_room) +"ykE" = ( +/obj/shuttle_landmark/ninja/deck5, +/turf/space, +/area/space) +"ykI" = ( +/obj/fluid_mapped, +/mob/living/simple_animal/aquatic/fish/judge, +/turf/simulated/floor/beach/sand, +/area/rnd/xenobiology/level2) +"ykQ" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall/hull, +/area/turret_protected/ai_maint) +"ylh" = ( +/obj/floor_decal/corner/yellow/three_quarters{ + dir = 4 + }, +/obj/structure/flora/pottedplant/floorleaf, +/obj/machinery/light_switch{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/deckofficer) +"ylq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/floor_decal/corner/green/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/old_cargo, +/area/crew_quarters/head) +"ylw" = ( +/obj/structure/catwalk, +/obj/structure/rubble, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/forestarboard) +"ylx" = ( +/obj/structure/closet/emcloset, +/obj/item/clothing/head/kitty/fake, +/obj/item/clothing/head/philosopher_wig{ + color = "orange" + }, +/obj/item/mirror, +/obj/item/lipstick, +/obj/item/lipstick/random, +/obj/item/lipstick/random, +/obj/item/clothing/under/schoolgirl, +/obj/random/cash, +/obj/item/storage/toolbox/mechanical, +/obj/random/cash, +/obj/item/modular_computer/tablet/lease/preset/command, +/turf/simulated/floor/wood/walnut, +/area/maintenance/firstdeck/foreport) +"yly" = ( +/turf/simulated/wall/prepainted, +/area/rnd/research) +"ylA" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/seconddeck/foreport) +"ylF" = ( +/turf/simulated/floor/wood/walnut, +/area/crew_quarters/actor) +"ylP" = ( +/obj/machinery/computer/modular/preset/dock{ + dir = 4 + }, +/obj/floor_decal/corner/mauve/mono, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/bridge) +"ylS" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/bridge) +"ylZ" = ( +/obj/wallframe_spawn/reinforced/polarized, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/chapel/main) +"ymg" = ( +/turf/simulated/floor/reinforced, +/area/rnd/xenobiology/water_cell) + +(1,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(2,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wlJ +wJN +"} +(3,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(4,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(5,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(6,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(7,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(8,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(9,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(10,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(11,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(12,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(13,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(14,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(15,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(16,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(17,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(18,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(19,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(20,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(21,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(22,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(23,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(24,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(25,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(26,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(27,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(28,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(29,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(30,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(31,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +iCj +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(32,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(33,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(34,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(35,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(36,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +fEC +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(37,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +nYR +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(38,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(39,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +eOA +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(40,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(41,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(42,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(43,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +vNF +tRD +sKr +nLj +nLj +nLj +wTG +niv +nMa +niv +gPP +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(44,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +vNF +oGh +xJo +nLj +nLj +nLj +nLj +nLj +cVd +pHh +twE +niv +vCS +vCS +niv +niv +reQ +sKr +tRD +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(45,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +vNF +sKr +xJo +xJo +nLj +xZu +vVR +qwe +nLj +fNt +hHI +aDI +niv +haq +haq +niv +niv +reQ +reQ +oGh +lJm +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(46,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +vNF +sKr +xJo +xJo +xJo +nLj +nGm +dzd +ygD +nLj +wrf +tBD +aDI +tvj +ibJ +szs +tDs +niv +reQ +reQ +reQ +sKr +lJm +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(47,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +vNF +sKr +xJo +xJo +xJo +sqg +nLj +nGm +dzd +beQ +nLj +fNt +hHI +aDI +aiu +xNM +kBw +jWW +byK +reQ +reQ +reQ +reQ +sKr +uIY +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(48,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +vNF +oGh +xJo +xJo +xJo +sqg +sqg +nLj +wdV +ubP +dxC +nLj +acE +hHI +jZq +stR +psp +bdv +kvN +awD +eMa +eMa +eMa +reQ +reQ +sKr +lJm +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(49,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +sKr +xJo +xJo +dOr +ojk +ojk +ojk +lXN +lXN +lXN +lzH +psN +wgk +cBt +wgk +wgk +vkB +ipZ +vkB +kch +eMa +kSw +fFx +eMa +reQ +reQ +sKr +lJm +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(50,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +xJo +xJo +dOr +eCv +rIo +lpT +wJr +igx +kdk +tCR +oGN +ryC +qvF +lkA +qtF +jQY +eFr +evz +qlk +sOi +kQN +rvD +rIM +mYo +eMa +reQ +reQ +sKr +lJm +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(51,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +xJo +xJo +dOr +dOr +iWK +hFS +avg +aFa +ojk +vsE +vry +jTo +baE +gIf +eJn +gIf +vIG +hQt +ewQ +sst +kch +lLc +lLc +meN +eMa +eMa +eMa +reQ +reQ +rsq +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +qLn +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(52,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +xJo +dOr +mDF +uZt +gdH +tsN +fyJ +rSz +ojk +ikx +rVe +ixM +wew +wew +hKg +wew +wew +vqq +rVe +qfI +sOi +qBR +qBR +aRD +tmY +xMc +viM +eMa +reQ +sKr +lJm +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(53,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +xJo +xJo +dOr +ddj +kWC +tsN +tsN +coc +gWu +ojk +prK +rVe +tIz +tTp +ecg +qpp +ecg +tTp +axy +mmQ +tpJ +kyp +ecC +xjw +dzh +iBa +koI +ygV +eMa +reQ +reQ +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(54,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +xJo +xJo +dOr +ngL +aFs +kmH +ihU +rpD +wNH +npb +nyL +fQo +ttA +rxd +hfF +lXY +kyT +lXx +jKV +xbC +hAA +kch +cRY +kSr +veg +iRD +kOJ +wik +eMa +reQ +reQ +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(55,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +xJo +xJo +dOr +fiQ +wzU +ezl +dvG +xUf +dYr +ojk +iMY +nys +rCB +bPp +pkZ +oej +fMD +slW +ece +xbC +kIl +rOc +kch +kch +kch +jAU +kch +kch +eMa +xwJ +reQ +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(56,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +xJo +xJo +dOr +ojk +ojk +kIp +mwQ +kIp +kIp +ojk +okA +aDL +gYM +auU +hSw +cFg +crJ +auU +oQb +vpQ +qfI +fMQ +fRI +ljm +qRZ +hAc +abt +dux +niv +niv +niv +sKr +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(57,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +vxd +niv +niv +hNk +hVi +szX +fdA +hAc +oSi +dIi +fMQ +usc +otx +ttA +qpp +okZ +cFg +oxV +qpp +jKV +ams +dVr +prk +phb +pGE +fOU +pGE +pGE +iLO +hdi +niv +niv +bZL +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(58,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +osJ +cUP +geq +iew +wed +mQI +wkt +hwP +wKb +uOX +uZU +fMQ +tOK +nLi +gSJ +uNI +xMy +vDS +rWL +xsF +akz +oBK +aTd +fMQ +cwr +hQt +baE +hfm +hfm +qyT +aBk +bJA +yfy +gQz +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(59,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +xpy +niv +niv +rRL +pqS +eQp +eQp +eQp +bAm +rCL +pNx +lqE +ojN +koZ +tTp +bel +dqB +ehU +qpp +oxW +bhO +ofK +eBs +iCa +rbm +rbm +rbm +fpX +joa +ujk +niv +niv +bNj +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(60,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +uyP +fxt +wag +okm +itm +cRP +bgK +bAm +irZ +pNx +kGG +pjG +lfW +qpp +xYz +mRs +wHf +qpp +kdO +hBL +iQd +eBs +iyF +dkd +sgN +hHp +wag +mTB +irZ +voi +haq +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(61,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +uyP +bVv +wag +qbA +uwR +mfF +sxV +bAm +hpL +pNx +adh +fES +obP +aju +gvi +wRc +oTC +bEG +sQJ +lCN +nKD +cJv +cJv +cJv +cJv +cJv +yiV +lGd +irZ +bVv +haq +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(62,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +vxd +niv +niv +vgk +pqS +eQp +gRs +eQp +bAm +uDZ +xpX +tTa +uGw +aXc +dMC +xlz +oju +xuN +vJj +rBO +lCN +lLh +cJv +jIA +flJ +cjc +cJv +nwl +vlK +szK +niv +niv +bZL +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(63,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +lfD +gmn +jmc +buq +vbg +tGv +rhc +gYx +mgc +xyt +xli +pZw +eRu +bRN +uOR +hRW +nBI +era +gFa +pgU +sQJ +fzu +iWp +rRW +fqF +ona +bUe +jKa +xEe +jzL +gSx +uqr +spk +lur +wbv +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(64,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +xpy +niv +niv +rRL +eQp +eQp +eNt +eQp +eQp +sht +xpX +bDA +wsQ +aBK +qpp +kRl +ioU +uNF +qpp +iGp +apf +qpY +wHU +eKS +wTr +jVO +cJv +lsd +lwJ +ujk +niv +niv +bNj +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(65,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +uyP +bVv +wag +eQp +eQp +eQp +eQp +eQp +irZ +pNx +xYT +vGY +mjK +qpp +xUo +qpp +hCY +qpp +qUR +mrS +qpY +wHU +bSU +oqp +myB +cJv +ttd +voy +irZ +bVv +haq +sKr +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(66,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +bne +tRD +tRD +tRD +tRD +pJp +tRD +ddZ +uyP +bVv +ukA +oMI +mPv +lBS +pLF +rKZ +fmy +pNx +eUL +lWR +uOR +lWE +txb +gZD +dXI +txb +qUR +mrS +bjB +cJv +fZP +tCE +nSB +cJv +hkx +pAj +mwF +bVv +haq +sKr +tRD +pJp +tRD +dDb +tRD +lJm +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(67,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +bne +sKr +taa +taa +taa +taa +taa +taa +taa +taa +xlq +xlq +xlq +xlq +xlq +xlq +xlq +xlq +xlq +vzx +tqj +eIL +xCa +pGw +hse +mTl +hse +uTz +enS +vfy +cJv +cJv +cJv +nfo +cJv +dEv +dEv +kQP +dEv +fIw +fIw +fIw +fIw +fIw +fIw +fIw +sKr +lJm +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(68,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +fLf +taa +taa +taa +nAF +nAF +kks +bhT +xXt +xqd +hUZ +uJr +uJr +uJr +uem +crU +azi +xbL +sHm +iFH +eRP +xnB +lGh +gAv +fvn +wly +fby +fby +jLV +hpm +ped +ckA +bQc +bOf +uSB +llw +xwC +xEd +qaC +fev +xHK +dDU +dDU +dDU +fIw +fIw +fIw +sKr +lJm +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(69,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +taa +taa +evG +kks +kKF +cKK +afz +cCk +ajY +qOn +psl +psl +otJ +dGe +uke +bxP +gdZ +xlq +xAm +iTD +ipg +wtc +bNE +eAH +nzu +eRn +wtc +rdI +ktQ +jvv +dDU +eSg +kyh +bAC +aIq +apl +apl +jvv +uHQ +xiJ +dYS +dZg +dZg +fev +fIw +fIw +fIw +rsq +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(70,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +dac +taa +taa +fQF +xlq +xlq +xlq +xlq +xlq +xlq +xlq +xlq +xlq +xlq +fiX +fiX +fiX +fiX +fiX +fiX +fiX +fiX +hKK +yah +bqr +bFA +iVN +ouc +iVN +iVN +iVN +iVN +jee +dEv +dEv +dEv +dEv +dEv +dEv +dEv +dEv +dEv +dEv +uxQ +fIw +fIw +fIw +fpg +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(71,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +sKr +kkJ +gho +htl +hQy +fSa +fSa +fSa +fSa +fSa +fSa +fSa +fSa +bmK +bmK +fiX +fiX +hWB +hWB +hWB +hWB +mJi +fiX +hGr +gWW +oVB +iVN +hko +mRU +hRh +aDp +vcZ +iVN +jee +lkQ +lkQ +tFA +tFA +tFA +tFA +tFA +tFA +tFA +tFA +cFA +ueY +vPH +vhH +sKr +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(72,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +sKr +kkJ +pkw +pkw +hQy +fSa +jAW +bUR +eyr +inU +mfI +eyl +iWe +bmK +dSZ +fiX +fiX +hWB +hWB +hWB +hWB +hWB +pmO +jJh +pcB +cPc +qFZ +jFv +knD +cGp +hOq +qUW +iVN +jee +lnd +lkQ +fHV +nVG +prF +cGN +bdA +lZm +dxk +tFA +cFA +ogN +ogN +vhH +sKr +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(73,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +sKr +kkJ +pkw +pkw +hQy +uPf +dpV +jQG +oQc +aaJ +aLa +gHj +kDM +bmK +dSZ +fiX +fiX +hWB +hWB +hWB +hWB +hWB +pmO +oGx +oWo +oQh +iVN +ixk +evU +nVj +ych +aUP +iVN +jee +lnd +lkQ +oMJ +lZe +pIL +cDm +xgp +bIg +wDm +heL +cFA +ogN +ogN +vhH +sKr +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(74,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +sKr +kkJ +pkw +pkw +hQy +sNZ +wxQ +mcp +lgZ +eja +vjK +qYD +wFx +bmK +dSZ +fiX +fiX +hWB +hWB +hWB +hWB +hWB +pmO +jJh +oPv +iOE +iVN +pYx +sJI +rRF +ihd +pYx +iVN +jee +lnd +lkQ +vCI +njV +pdd +pbx +lWs +xeN +nHx +tFA +cFA +ogN +ogN +vhH +sKr +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(75,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +sKr +kkJ +pkw +igB +qnJ +fSa +fSa +fSa +fSa +fSa +sqj +mGx +fSa +bmK +bmK +fiX +fiX +hWB +hWB +hWB +hWB +hWB +fiX +vyd +aFT +nRm +iVN +gXj +gXj +iVN +gXj +gXj +iVN +jee +lkQ +lkQ +tFA +nNS +dSt +tFA +tFA +tFA +tFA +tFA +cFA +fWs +ogN +vhH +sKr +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(76,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +qWf +eok +eok +eok +eok +shP +fiX +fiX +fiX +fiX +fiX +bxa +fiX +fiX +fiX +fiX +kTD +fiX +fiX +fiX +fiX +fiX +fiX +fiX +wTF +iGS +uXO +pTy +pTy +pTy +pTy +pTy +pTy +pTy +kTD +fiX +fiX +fiX +fiX +aEe +fiX +fiX +fiX +fiX +fiX +shP +eok +eok +eok +eok +jXi +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(77,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +eoT +dJq +fMx +eoT +ggj +uiJ +odq +sEe +qSX +qSX +pps +gQd +cUD +qSX +qSX +wcF +qSX +qSX +dMS +awJ +oWk +rmQ +gqe +eBq +tWW +xip +ivW +fSs +xoT +qSX +oWk +uel +dMS +qSX +qSX +wcF +qSX +qSX +feE +cYC +nxU +qSX +qSX +ftL +dRn +nMh +nrC +eoT +efZ +cBk +eoT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(78,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +ccL +xIk +eVJ +cvZ +eTv +cul +aGI +wUr +dbH +ily +dVN +sMY +ePm +fKd +hZR +pQZ +kWq +pQZ +hHC +pQZ +ohj +nnP +lIc +mDy +dRs +nic +nkL +voS +vln +vNm +pQZ +aRe +tUJ +pQZ +qVH +pQZ +kWq +pQZ +hZR +nkr +eAu +oeI +dVN +mhn +gtO +kvk +aGI +qDx +cRI +pEp +gWL +tRf +ycx +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(79,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +uRw +eok +eok +eok +eok +lkl +fiX +fiX +fiX +fiX +fiX +ohb +fiX +fiX +fiX +fiX +fTr +goT +goT +goT +goT +goT +goT +maw +cgK +fcf +qVi +pTy +pTy +pTy +pTy +pTy +pTy +pTy +vLh +fiX +fiX +fiX +fiX +rmW +fiX +fiX +fiX +fiX +fiX +shP +eok +eok +eok +eok +dgH +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(80,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +sKr +ePX +fux +bdw +qQa +rMZ +rMZ +rMZ +rMZ +rMZ +jOT +rbu +rMZ +uOv +uOv +goT +goT +bva +aKQ +oOu +dkf +liK +maw +aCG +jOU +lKz +mPx +reW +nxX +oig +uiA +jWM +mPx +fvR +fIA +fIA +sXZ +hIE +eUd +sXZ +sXZ +sXZ +sXZ +sXZ +wyg +tZF +gSw +qYt +sKr +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(81,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +sKr +ePX +fux +fux +qQa +rMZ +qGX +eOj +mIX +ecl +brF +uVV +pPl +uOv +cxp +goT +goT +qfX +coG +coG +qcw +ppV +cJI +gDZ +jQx +rTa +uGD +xSt +nvk +kgc +cuX +niF +mPx +fvR +gAa +fIA +gll +cwE +tTw +akm +toO +lJp +bwx +sXZ +wyg +gSw +gSw +qYt +sKr +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(82,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +sKr +ePX +fux +fux +qQa +oLo +wPe +xUe +oif +sVI +qNA +mtj +srL +uOv +cxp +goT +goT +hjf +ofR +jOZ +mSX +lfB +pfr +kJC +jlt +vQu +mPx +izk +pij +fnb +nSr +oEN +mPx +fvR +gAa +fIA +neE +otO +nWt +tzt +jfA +bWa +vIX +epb +wyg +gSw +gSw +qYt +sKr +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(83,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +sKr +ePX +fux +fux +qQa +rMZ +wHn +miC +vik +inO +vig +cav +chU +uOv +cxp +goT +goT +oEn +jhN +dRq +quz +vmL +tez +pCO +pej +cBg +mPx +gpU +nMQ +pWK +wlZ +nyu +mPx +fvR +gAa +fIA +uhv +eeL +dFK +mvi +aQw +dAH +eUx +sXZ +wyg +gSw +gSw +qYt +sKr +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(84,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +sKr +ePX +gMZ +gOY +qQa +rMZ +rMZ +rMZ +rMZ +rMZ +rMZ +rMZ +rMZ +uOv +uOv +goT +goT +xGM +tUS +wpa +lLu +ylh +voC +mXd +fpD +dnG +mPx +wDQ +wRH +uMG +tqd +jNm +mPx +fvR +fIA +fIA +sXZ +sXZ +sXZ +sXZ +sXZ +sXZ +sXZ +sXZ +wyg +jTL +plu +qYt +sKr +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(85,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wua +nNF +nNF +nNF +bmk +xeA +xeA +xeA +xeA +xeA +icv +icv +icv +icv +icv +goT +goT +maw +maw +maw +maw +maw +maw +qoP +nnQ +xFd +mPx +mPx +mPx +kNi +mPx +tKP +tKP +rkp +rkp +rkp +rkp +rkp +rkp +rkp +rkp +rQm +rQm +rQm +pxR +pGs +pGs +pGs +fpg +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(86,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +nNF +nNF +miw +npY +cFR +cFR +hMA +ndt +xqJ +syU +lSc +rLY +sBA +dyC +dyC +dyC +bIO +jol +tcn +jol +dnL +jhr +dOK +qrn +cxs +keN +iBl +wRA +pgn +vPL +tKP +ijo +cWh +gsz +qsI +gEV +kTd +wkE +vlh +tKP +pQI +oYr +iGY +gxS +pGs +pGs +pGs +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(87,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +nNF +nNF +qPe +rxq +fsK +fsK +fsK +lea +xqJ +usb +nkC +vFJ +oWC +tmM +tmM +tmM +gUl +mMA +mMA +mMA +eIe +okj +lHM +fyb +oZi +vkD +tSM +msj +qvm +gZU +gJd +qNe +bGt +wrG +pss +qau +gbg +mtP +pmp +tKP +tCB +pJV +siV +rYZ +pGs +pGs +sKr +syP +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(88,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +nNF +nNF +ntB +lKo +xsW +ilV +jVy +rFm +pUw +qmS +iKK +sLh +sLh +sLh +sLh +sLh +phV +phV +phV +phV +phV +phV +drA +vJC +waJ +gRi +awH +gwF +jOi +ggZ +tKP +eDx +oDs +fVR +lCJ +lpY +viS +kvm +ktq +tKP +vbl +wyg +tMz +tMz +pGs +pGs +rsq +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(89,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +sKr +nNF +xeA +xqJ +rMY +xqJ +xqJ +xqJ +xqJ +xru +vbe +sLh +eiT +cwf +eiT +nwk +phV +oed +wzi +afD +szP +phV +eXn +aBN +cBg +gRi +ivP +pen +tgt +jNE +tKP +tKP +tKP +djp +lyE +ezI +hxb +muI +tdl +tKP +hkg +qIB +hkg +hkg +pGs +pGs +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(90,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +xei +uRL +aRf +npu +ocW +eSi +kRK +gUl +nor +bJw +sLh +ePv +ncG +xWS +kAa +phV +hou +jkc +fpB +skE +sDH +oJN +fNz +liR +gRi +pdF +pen +qrk +rEv +qYL +lSi +tKP +dFZ +hOp +cym +ePe +uoi +eqA +tKP +ivz +gxS +rxa +pGs +pGs +sKr +syP +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(91,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +fLf +xei +uRL +cTe +fVc +wMG +hwk +gRw +gUl +cAf +byf +tEq +crG +oVE +sMH +lpZ +phV +uju +wdK +hlz +npl +hJi +rXW +bGu +liR +gRi +cAg +pen +aDg +myC +kZG +xPe +tKP +oaj +gQr +gLc +eJk +oFS +wQM +tKP +uFw +siV +lgm +pGs +pGs +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(92,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +xei +uRL +jQU +niA +hwk +hwk +nPf +gUl +jss +skl +sLh +twT +cxG +qvi +eyn +phV +nWl +laz +laz +nqx +phV +kTG +tSN +bGP +keN +iDr +rQw +ouf +pIG +msj +dry +tKP +bVR +mdM +tET +iqA +rAj +aXM +tKP +qVw +vDr +mOR +pGs +pGs +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(93,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +xei +uRL +qDT +uaP +cYn +iGb +nyw +gUl +mMA +ygS +sLh +ewe +jsW +hpa +vdr +phV +qDB +qDB +tjQ +mAf +phV +qoP +bXI +xFd +keN +dIj +bal +oMX +vxN +hjI +aGJ +tKP +agL +mdM +kGM +pBU +ouV +hFo +tKP +nim +vDr +wid +pGs +pGs +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(94,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +xei +xei +uRL +uRL +qDT +qDT +qDT +gUl +gUl +gUl +sLh +sLh +oen +sLh +sLh +phV +phV +phV +phV +phV +phV +kly +nlC +gqM +keN +keN +ruE +swV +rUf +swV +keN +tKP +dro +gpW +dNX +dNX +ouV +iGv +tKP +spm +nFm +pGs +pGs +pGs +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(95,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +eIh +eIh +eIh +oYP +gDD +wYV +lou +iyZ +kwc +oAH +jkH +pzD +avj +bxd +hAe +epp +jUc +hgX +unp +gvz +eLV +umw +dJg +gxN +qzf +geT +ctg +iEm +mJW +wIU +hwU +tKP +lUd +tSd +bwp +bBf +rAj +ihy +tKP +spm +mfJ +pGs +pGs +sKr +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(96,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +sKr +eIh +eIh +oYP +ctu +xOM +rRm +neA +iEl +oAH +pva +oUq +rKP +lBc +sVc +kAJ +lCK +jsn +jfu +sgf +czY +qDo +sBZ +wkC +bQM +dgP +oti +bny +kpP +cDr +msw +tKP +rnO +urs +bKc +fZn +oFS +lwu +tKP +spm +frc +pGs +pGs +gpx +sKr +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(97,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +sKr +sKr +sKr +wRe +dNb +gtI +vmN +edr +rep +fyE +ksv +qIw +wjt +uwA +rxU +rxU +rxU +qOU +bdQ +bdQ +gGX +xQF +cla +utF +seu +msi +aoB +wHk +vnc +cDX +bny +fPK +uNq +dqP +dtV +eNs +ciL +rAj +iNv +tKP +spm +oJd +pGs +pGs +sKr +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(98,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +sKr +eIh +eIh +oYP +pnv +kAy +snB +wdj +pBk +kHT +ooG +sRC +ccc +qWo +hgJ +vQd +gxK +mgN +mgN +oMg +iTR +sCh +adK +mVC +gVE +tIp +hIP +iHF +pxm +cDr +dxg +rwJ +htI +tHG +iHg +fZl +meU +gQB +grE +fkW +hAP +pGs +pGs +pGs +sKr +uIY +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(99,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +fLf +eIh +eIh +eIh +oYP +oqk +qSl +aFz +brx +hxy +ybu +jhQ +izf +gPL +dUH +nmW +dUH +gPL +gPL +kVg +uND +eLV +lJv +kyB +lMB +qzf +rqp +sHs +gxk +sae +wUM +hVh +tKP +pjN +mpY +dNX +rBf +ryY +woN +tKP +wyg +sIR +pGs +pGs +pGs +pGs +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(100,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +vNF +sKr +eIh +oYP +oYP +oYP +oAH +oAH +oAH +ybu +oAH +oAH +eLV +eLV +iTR +iTR +eLV +iTR +iTR +eLV +eLV +eLV +eLV +hXe +iTM +hXe +qzf +qzf +sHd +qzf +qzf +qzf +sHd +tKP +tKP +cXI +cXI +tKP +tKP +tKP +tKP +vwP +hkg +rQm +rQm +rQm +pGs +sKr +uIY +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(101,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +vNF +sKr +wBb +wBb +xYO +gTP +rdv +kFJ +rdv +rdv +rdv +rdv +ybf +rdv +pCR +rdv +rdv +fHs +rdv +rdv +ybf +rdv +rdv +kFJ +rdv +xtN +lFZ +aCf +wUu +pgO +eYz +vQO +fMz +guo +guo +dkJ +aUh +aUh +qRq +bRc +guo +olg +uPQ +ucu +rMr +mal +vEq +oMW +oMW +sKr +uIY +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(102,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +vNF +sKr +wBb +wBb +wBb +xYO +rru +sJJ +hcz +hcz +hcz +lWu +fPZ +lWu +lWu +lWu +lWu +lWu +lWu +lWu +lWu +lWu +lWu +lWu +lWu +lWu +pEW +rot +reM +mEk +qQL +qQL +qQL +kmV +sJJ +lWu +lWu +lWu +lWu +lWu +lWu +lWu +lWu +hIr +vfC +opm +pep +vEq +oMW +oMW +oMW +sKr +uIY +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(103,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wfu +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +vNF +tRD +tRD +tRD +sKr +wBb +wBb +wBb +wBb +xYO +rru +kBm +aNt +ufy +aNt +msN +fDE +kap +aNt +dQB +uvl +lWe +mDe +iKi +dMb +hNE +iKw +jxz +ajp +uAb +bXB +goN +mzU +sJJ +lWu +lWu +iMx +iNj +kBm +mdD +mdD +mdD +mdD +mdD +mdD +mdD +mdD +mdD +goN +guo +lFk +vEq +oMW +oMW +oMW +oMW +sKr +bCV +tRD +pJp +uIY +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(104,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +vNF +sKr +wBb +wBb +wBb +wBb +wBb +wBb +wBb +wBb +gSO +soQ +nvR +aNt +pmj +xDs +sEG +rlJ +rLn +rZt +ftM +hbM +hNE +lEP +hNE +fVt +hNE +cjb +rTE +hhZ +djQ +dhj +goN +mzU +ofg +bbh +tIX +xxB +iNj +kBm +mdD +mdD +mdD +mdD +mdD +mdD +mdD +mdD +mdD +goN +guo +lFk +uQO +cTy +rFV +oMW +oMW +kBS +kBS +oMW +oMW +sKr +uIY +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(105,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +wBb +wBb +xYO +xYO +xYO +xYO +xYO +gSO +gSO +gSO +gYC +kBm +ocQ +dsY +ipp +hBu +gTx +cYN +qKb +aNt +deO +vWX +eJA +kes +otN +tOi +imA +sxB +dnQ +gUF +rkX +goN +vkF +qga +bbh +tIX +tam +npy +kBm +mdD +mdD +mdD +mdD +mdD +mdD +mdD +mdD +mdD +goN +guo +lFk +fOl +fAh +btn +eID +oMW +vXC +vXC +oMW +oMW +oMW +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(106,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +wBb +xYO +xyI +oWS +sgt +szw +lJL +gos +pnG +gSO +pbE +kBm +uLm +sEG +nei +sjc +qBN +rLL +cmA +dew +fIX +gwp +mCS +aUU +uRj +jrw +apE +qee +uwl +lmQ +rkX +goN +mzU +yeS +bbh +tIX +wqu +fzK +kBm +mdD +mdD +mdD +mdD +iNG +mdD +mdD +mdD +mdD +goN +olX +mbT +fOl +ofP +anD +cXj +gkG +xdN +xdN +jqX +oMW +oMW +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(107,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +wBb +xYO +lvm +isN +tnF +isN +mnv +isN +isN +pnI +pHs +kBm +phN +rAf +nei +muq +aNt +aNt +rhl +aNt +csP +voO +eWf +ich +vjF +tOi +fkY +fLm +cvk +wOa +dhj +goN +mzU +aPW +bbh +tIX +rgy +fzK +kBm +mdD +mdD +mdD +mdD +mdD +mdD +mdD +mdD +mdD +goN +guo +pYa +uQO +dvF +anD +hOX +edK +iAW +bjJ +qic +oMW +oMW +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(108,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +wBb +xYO +kQU +eiV +vCd +kqh +vZF +kzJ +kzJ +cmr +pHs +kBm +pad +dxl +vrE +vir +ndK +fQd +sZd +wxx +dlH +hVy +dlH +dlH +vgU +dlH +dvy +dvy +dvy +lvv +rkX +goN +mzU +cno +aUh +aUh +kim +fzK +kBm +mdD +mdD +mdD +mdD +mdD +mdD +mdD +mdD +mdD +goN +guo +amK +fOl +buO +gFs +sIL +hPy +nOz +vha +rVK +oMW +oMW +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(109,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +fLf +wBb +xYO +kLV +oWS +wBZ +fiD +dWM +wiB +muo +gSO +vJu +kBm +aNt +aNt +aNt +jSm +ndK +kLQ +pip +nfK +dlH +bli +kph +tzi +xOK +dlH +opr +wmo +put +lmQ +rkX +goN +mzU +guo +oDP +grZ +guo +fzK +cno +aUh +aUh +aUh +aUh +aUh +aUh +aUh +aUh +aUh +kim +guo +kCI +fjT +bsS +iBu +kVG +slf +oDI +vha +wrC +oMW +oMW +vZb +wJN +wJN +wJN +wJN +wJN +ofN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(110,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +gRR +xaC +cfx +cfx +cfx +cfx +uwf +cfx +cfx +cfx +iui +kBm +mdD +mdD +jkC +lIQ +vcJ +scx +vkW +iwf +elF +tVD +pdK +aQS +eJG +gzR +kxy +wQg +fvA +lmQ +tvk +goN +xqa +sYL +cfl +grZ +ilt +yeT +rwc +rwc +rwc +ybM +ybM +ybM +ybM +ybM +ybM +ybM +ybM +ybM +tAO +uQO +aaU +twz +uLY +nxs +vha +vha +qZk +oMW +oMW +rsq +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(111,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +gRR +xaC +fFU +fFU +ozv +sPw +jPk +joA +cPA +cfx +gJv +kBm +uZT +uZT +uZT +ket +ndK +kLQ +pip +nfK +dlH +kvv +jPB +mde +gpi +dlH +frJ +vSQ +sLe +lmQ +rkX +goN +mzU +guo +slE +grZ +wvZ +wRk +lWu +lWu +lWu +lWu +lWu +lWu +lWu +lWu +lWu +lWu +lWu +iMx +rWZ +rVY +rVY +rVY +rVY +rVY +rVY +rVY +mri +clg +clg +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(112,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +gRR +xaC +fFU +fFU +gvf +gvf +jPk +gvf +gvf +vDW +pHs +kBm +uZT +iRB +iRB +iRB +ndK +wqC +fUd +luY +dlH +jHB +dlH +dlH +qXP +dlH +tLA +hRz +vfI +lvv +rkX +goN +mzU +sJJ +lWu +lWu +iMx +uMs +fqq +xJP +qkU +qkU +ipR +rhB +rhB +caC +rhB +rhB +gLS +goN +eiQ +pdL +fjo +edI +lVR +tDI +ppM +tlB +mri +clg +clg +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(113,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +gRR +xaC +xaC +iOl +gvf +uzM +jPk +gvf +gvf +vDW +pHs +kBm +dBO +iRB +iRB +xor +uZT +uZT +tgJ +uZT +nhU +xyk +suB +vNz +ick +nhU +vFk +muX +gcg +maC +dhj +goN +mzU +frX +bbh +dmM +mQt +uMs +mbl +nlI +gwL +pST +lwj +cYd +vVx +fVp +acO +lac +rhB +goN +vYX +rVY +cTv +bxy +mfv +oLr +tzJ +etL +mri +clg +sKr +syP +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(114,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +gRR +gRR +xaC +dMH +vZT +vZT +rPy +scE +bDH +cfx +vJu +kBm +xKP +iRB +iRB +iRB +ldI +sxf +qrp +rqD +jhB +cDD +xaJ +fub +jSE +dDx +ryZ +lvf +efu +lmQ +rkX +goN +mzU +anX +bbh +dmM +hvk +uMs +htn +rhQ +ctF +jrK +fDJ +aYA +apD +qGQ +jVn +kNS +rhB +mVF +aMG +bRI +hrz +qod +yaA +sSy +gsM +cya +mri +clg +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(115,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +shy +sKr +gRR +xaC +xaC +xiS +pVO +xLl +lmj +qOa +cfx +dyx +uOm +sDE +kfs +kfs +kfs +uGz +gPw +wpZ +uZT +eav +cJH +hcd +pIW +dan +nhU +bZW +bxO +qCt +euR +rkX +goN +irD +fCM +bbh +dmM +hvk +mpV +ivv +tWV +vrg +qIK +uCg +tHT +qKK +qfc +xnl +ksM +xzL +goN +meb +pdL +etS +cXB +fQU +uLp +oDJ +rVY +mri +clg +qKz +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(116,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +gRR +gRR +xaC +cfx +cfx +qwS +cfx +cfx +cfx +jqk +kBm +uZT +hrY +iRB +iRB +wZr +wpo +vFf +uZT +nhU +nhU +nhU +whL +cOj +nhU +sWn +yeP +khc +djQ +hqa +goN +tCa +axe +bbh +dmM +hvk +kBm +sKy +cOL +llP +gMR +rhB +usp +bqL +yel +cCC +eAG +rhB +goN +tqx +rVY +rVY +pdL +vna +pdL +rVY +mri +clg +clg +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(117,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +shy +sKr +qoL +qoL +sqm +sru +svN +jYQ +uYt +lQb +jqk +kBm +uZT +tqV +uZT +uZT +aAE +uoD +uZT +ghk +rDr +rDr +rDr +rDr +rDr +nhU +dvy +kPq +uKL +djQ +bXB +goN +mzU +cno +aUh +aUh +ltl +kBm +btX +cOL +uIF +aMS +rhB +rhB +rhB +rhB +rhB +caC +rhB +goN +meb +njY +gSU +gpS +bzt +syO +bCU +pyn +pyn +sKr +syP +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(118,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +oWj +fRj +mqO +jjn +glW +lQb +sew +sDJ +nIN +nIN +nIN +vAP +vAP +vAP +vAP +vAP +vAP +vAP +vAP +vAP +vAP +vAP +vAP +sSq +qjD +aUh +aUh +kim +mzU +guo +guo +guo +qvW +cno +aUh +aUh +aUh +aUh +aUh +aUh +aUh +aUh +omZ +eoG +uDO +kim +meb +njY +axt +ssv +git +nqp +bCU +pyn +pyn +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(119,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +fLf +qoL +qoL +sAc +xUQ +fSA +xjq +tun +jgb +vWG +vsI +xmK +dFF +myu +dFF +dRi +rdv +fXF +ayY +uZC +rdv +rdv +alN +xLO +sbF +ibS +qQX +ejQ +whQ +tYV +vBm +mVh +fHg +hFe +fHg +qRU +fHg +hFe +fHg +fHg +oDV +aLw +jZa +dzx +jZa +pSy +bqS +bfI +uqm +ebM +bCU +ulQ +vBH +gcN +hWR +bCU +pyn +pyn +rsq +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(120,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +lQb +gaQ +lQb +xsu +lQb +lQb +lQb +uKz +lQb +kCm +kCm +mpx +ldP +akf +kCm +kCm +kIk +kIk +hfv +kJg +kIk +bDn +bDn +vRU +bDn +xmN +lKQ +xmN +grZ +piy +grZ +kYN +ttF +ttF +grZ +xVe +seP +seP +rcx +seP +seP +seP +sTi +lQb +nai +rXf +vqR +bCU +wlQ +cdQ +prY +rxR +bCU +pyn +pyn +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(121,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +uPo +kKl +cZU +sFs +pRb +lQb +aBR +eAj +elu +kCm +uVt +twj +mue +rBD +wmn +mhK +kIk +eDC +feR +pTH +heQ +bDn +lqA +lqA +bDn +lQb +ceT +lQb +grZ +iJi +iul +wlV +isv +wlV +iul +hiM +seP +mjM +sad +ope +wLT +seP +aUN +lQb +cwe +ikr +wWd +bCU +mhx +jLm +fYO +peD +bCU +pyn +pyn +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(122,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +ajS +kKl +xrV +sFs +pRb +lQb +aBR +eAj +qfV +kCm +ika +gmQ +mRo +wng +bxS +iBJ +kIk +nFl +aDN +eNl +jKE +bHq +wtu +lqA +bDn +nQi +sbP +sLu +grZ +iJi +iul +xXl +iul +xXl +iul +hiM +seP +xwc +bvA +oMM +oMM +seP +aUN +lQb +uPn +ghO +hXT +bCU +bCU +njY +rNR +njY +bCU +pyn +pyn +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(123,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +qLW +kKl +xrV +sFs +lQb +lQb +ofO +eAj +taA +kCm +qpE +mCo +bcP +dpY +nKQ +mgg +kIk +pQe +oGL +gew +pOK +bDn +lqA +lqA +bDn +dFA +uGY +cZj +grZ +uFR +blD +cpR +blD +rFP +uSA +hcT +seP +chs +fsX +bZH +adx +seP +iKC +lQb +xuO +aUd +nPW +vIL +qGA +jes +qDD +erZ +qyv +fAq +fAq +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(124,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +mxj +kvH +pOn +jav +lQb +rhx +sFm +eAj +xcF +kCm +kCm +kCm +kCm +qtN +kCm +kCm +kIk +kIk +kIk +kIk +iDl +bDn +bDn +bDn +bDn +kbn +lMY +ubr +grZ +grZ +grZ +grZ +grZ +grZ +grZ +grZ +seP +seP +hWh +seP +seP +seP +fiA +fDC +xuO +gQl +iOc +qyv +oah +lEY +tGQ +uzR +qyv +fAq +fAq +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(125,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +xzu +pFP +bYy +vvz +sts +hKH +hKH +adC +hKH +tiE +wbt +nNq +pui +pRa +wOs +bWn +dRw +llr +bUh +bGx +itj +dKE +yhh +dKE +qVU +lyU +lPI +rZM +cPD +gPp +gPp +bnf +gPp +dPP +gPp +gPp +gPp +xJU +cfp +ceU +klM +iEJ +gEf +gWh +xuO +xuO +xuO +qyv +gxn +vQl +rfN +wpV +qyv +fAq +fAq +vZb +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(126,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +rBx +oet +cqW +gmz +lQb +oao +sFm +sFm +cBq +lQb +lQb +cwJ +qeq +gVn +jBz +jBz +jBz +jBz +rTz +jBz +hIf +lQb +lQb +lQb +lQb +cKt +dDf +lQb +uCB +uCB +uCB +uCB +uuL +ygz +uCB +uCB +uCB +lQb +lQb +llx +lQb +lQb +lBJ +bgh +lQb +qyv +eAk +gXf +gXf +gXf +maQ +vfn +qyv +fAq +fAq +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(127,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +iTy +oet +aqH +gmz +lQb +lQb +uYq +lZZ +lZZ +lZZ +jmb +uCk +epj +wHD +eai +buQ +cCy +gUS +mEl +jBz +fca +wIq +wIq +lQb +lQb +lzO +gNl +tMV +uCB +pke +mkS +dZU +mkS +vnW +eha +cPK +uCB +kGk +hnN +mwN +tgQ +lQb +sVN +aWX +lQb +qyv +xTs +gXf +lOn +cKJ +maQ +bbD +qyv +fAq +fAq +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(128,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +lQb +uPD +lQb +lQb +lQb +hYz +qsE +xzN +xWu +ekr +sbe +bDc +jGz +bes +emU +hoa +dfP +uAv +rvp +jBz +elC +ovq +peU +lQb +lQb +gSV +okE +tBq +gHu +lxz +hSU +lGq +ius +wTI +mkS +wTI +uCB +aHK +uGT +qjM +nIa +lZZ +beC +lZZ +lZZ +jzm +hsT +gXf +xTs +cKJ +whe +xQg +iWf +fAq +fAq +rsq +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(129,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +fLf +qoL +qoL +omi +jtg +vok +qsE +qsE +qsE +qsE +xzN +vYz +lZZ +elu +cdg +jmb +fCl +jBz +jBz +jBz +jBz +rac +jBz +fca +hoN +obf +lQb +lZZ +lZZ +kuQ +lZZ +ceZ +ivw +mkS +mkS +sfW +sSz +wTI +ift +uCB +qsE +eZr +peU +eQY +slS +ful +awQ +eDL +jzm +fbb +gXf +hsT +cuP +gXf +iCg +giC +jfR +ppb +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(130,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +sAK +cis +lQb +clM +ttq +gIy +vDV +xzN +ghU +lZZ +ciB +tof +fxZ +bed +obI +eZa +eZa +lEQ +hfK +exM +xam +sru +sru +htd +lZZ +ogq +mXm +rAl +ceZ +wzG +hYy +sCP +iOJ +sqD +yiT +mpE +uCB +rhx +dwD +bRg +lZZ +slS +slS +slS +raU +jzm +hhO +gXf +fbb +jzm +jzm +iCg +fsR +ovz +eqm +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(131,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +mUJ +pXI +xzN +xzN +xzN +xzN +xzN +xzN +ozf +xzN +xzN +xzN +xzN +xzN +qoL +qoL +qoL +qoL +qoL +qoL +qoL +qoL +qoL +qoL +qoL +sPH +lgH +kjC +faA +faA +faA +faA +faA +faA +faA +faA +faA +qoL +qoL +slS +slS +slS +slS +slS +kbW +slS +slS +slS +slS +slS +bNC +hZn +fwS +eWC +ppb +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(132,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +jyp +edj +xzN +xzN +xzN +xzN +xzN +fvL +cUz +lfs +xzN +xzN +xzN +rUB +qoL +qoL +qoL +qoL +qoL +qoL +qoL +qoL +qoL +qoL +qoL +qoL +oZN +qoL +faA +uTg +faA +faA +faA +faA +faA +faA +faA +qoL +qoL +slS +slS +slS +slS +wRs +dvv +oDY +slS +slS +slS +slS +tnZ +duD +wqm +kyI +ppb +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(133,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +xPO +smh +xzN +xzN +wsk +qpe +ukj +vSl +lNm +aTq +bjG +dQa +mxC +xzN +ubp +ubp +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +lva +lva +wnT +lva +lva +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +qoL +qoL +slS +qFF +vWu +lMF +jHH +fIK +oGg +kAg +ukl +qTM +slS +lIY +hZn +cRe +dlN +ppb +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(134,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +qoL +izv +xzN +xzN +fRP +aqF +rHt +hBx +bGZ +hPn +mgy +ofY +pnT +xzN +ubp +wJN +wJN +wJN +wJN +sJY +sJY +sJY +sJY +wJN +lva +ueK +fkR +bFf +lva +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +qoL +slS +pQs +hXt +eEb +mep +dvK +vIP +giR +vOF +brU +slS +nfe +hZn +fMI +bPb +ppb +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(135,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +plv +qoL +qoL +qoL +taB +xzN +xzN +nAL +tZE +qOK +uJu +vGn +tDh +bjG +qQO +oVJ +xzN +ubp +wJN +wJN +wJN +sJY +sJY +sJY +sJY +sJY +wJN +lva +wfa +vlT +dJp +lva +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +qoL +slS +eUo +szZ +lMF +iEt +fdz +cGE +rAd +plt +tma +slS +kFV +mAw +wwH +ppb +ppb +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(136,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +shy +xHR +qoL +qoL +vmx +xzN +xzN +xzN +xzN +xzN +gPA +gSQ +ghC +tMa +tMa +tMa +tMa +wJN +wJN +wJN +wJN +sJY +sJY +xCc +icT +sJY +gaP +lva +fwR +alY +lva +lva +cOt +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +sAu +sAu +sAu +pfh +dul +tGC +lfG +slS +slS +slS +slS +bKt +dqh +sAX +ppb +sKr +syP +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(137,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +obS +xHR +qoL +qoL +uSa +xzN +xzN +bPt +jNv +jQS +pGu +lpQ +rub +pwN +ebf +rVf +nYh +wJN +wJN +wJN +wJN +uoB +cFe +oPr +sgF +sJY +tni +lva +uIr +lok +noV +omc +cOt +rfU +rfU +cOt +wJN +wJN +wJN +wJN +wJN +dHB +sAu +cZP +qZE +iKU +uhC +oQw +ktt +rjA +ggp +vMx +slS +nOZ +hZn +xNb +ppb +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(138,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +obS +afU +qoL +qoL +qoL +xzN +xzN +fdB +mDx +sMy +mMK +eNi +crZ +pwN +upK +lny +xXX +wJN +wJN +wJN +wJN +uoB +cFe +drx +hHF +rAu +eAi +exm +syr +ncm +nOM +xhX +dQp +hlo +upO +cOt +cOt +wJN +wJN +wJN +wJN +wJN +gko +enq +dmN +iKU +apU +sbp +ulv +dUD +wCl +sxJ +slS +sll +knQ +wKq +ppb +vZb +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(139,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +obS +xHR +qoL +qoL +qoL +xzN +xzN +ljR +qwK +ukj +oSU +bJI +lGr +ldg +tbI +lvB +ewq +wJN +wJN +wJN +sJY +sJY +sJY +iqM +wzp +dyz +baK +sHw +spe +mVr +pTN +iti +dQp +kMf +cbu +cFG +dQp +wJN +wJN +wJN +wJN +pKq +sAu +hos +qHE +jbw +kLS +kwZ +mNf +kAg +eqF +xII +slS +vMS +ppb +ppb +ppb +rsq +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(140,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +obS +iZg +xHR +xHR +qoL +ceA +xzN +xzN +xzN +xzN +ucW +feM +mSU +eiD +cVE +rQo +tMa +wJN +wJN +wJN +uoB +cFe +jmt +mEE +wzp +luU +mGY +gzc +sGG +utb +kFT +kFT +cWb +aim +juH +rkR +dQp +wJN +wJN +wJN +wJN +wJN +sAu +eyY +dPv +vru +cTo +hCF +tUi +slS +slS +slS +slS +ppb +ppb +sKr +aeO +syP +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(141,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +jiV +aBe +xHR +xHR +avJ +iBd +mQJ +mSW +vXi +niz +vXi +gTL +mPs +jnG +rrY +ceA +wJN +wJN +wJN +uoB +cFe +gGZ +duy +odC +aWD +xgH +trS +hOR +wjO +jDO +xWZ +jDO +mWA +wNr +cWb +cOt +wJN +wJN +wJN +wJN +wJN +ias +dsj +sQG +tcb +onp +uPl +ucE +uPl +mVw +ibW +pMx +jMY +sKr +syP +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +svy +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(142,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +aBe +xHR +cVl +dbD +hCG +svE +tnx +svE +fpW +svE +tnx +meY +nCA +ceA +wJN +wJN +wJN +fgD +fgD +lkP +lkP +lkP +lkP +lkP +lkP +bgl +dAn +cWb +cWb +cWb +cWb +cWb +cWb +cOt +heP +heP +heP +wJN +wJN +ias +ieR +gFv +nQL +bMH +qMm +bMH +nQL +bMH +uhk +bgx +vxZ +syP +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(143,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +aBe +xHR +hpV +ceA +soE +soE +soE +ceA +soE +soE +soE +ceA +wJN +wJN +wJN +fgD +fgD +atF +hAZ +gih +nVW +uqZ +jDJ +lkP +aKm +pjX +eYR +jws +sVs +dCn +eSI +eYR +eYR +eYR +eYR +eYR +heP +wJN +wJN +ias +nCK +nCK +nCK +ias +nCK +nCK +nCK +ias +kKL +syP +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(144,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +jiV +jiV +egi +wJN +wJN +wJN +egi +wJN +wJN +wJN +egi +wJN +wJN +wJN +fgD +fgD +oJT +vFu +vFu +oZg +vFu +wUV +lkP +mvA +iHT +eYR +mSv +mWa +rEn +dnh +eYR +wJl +eQV +rbR +eYR +heP +wJN +wJN +egi +wJN +wJN +wJN +egi +wJN +wJN +wJN +egi +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(145,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +skb +xct +cLq +fcy +aQF +mSZ +ouU +ouU +siy +aBD +pUq +xaj +wvv +gPM +mcr +abK +eYR +ctW +jxi +axq +eYR +heP +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(146,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +skb +xct +czd +xab +cUh +ijN +vXp +alS +lkP +bxn +mYA +ksw +jcJ +cLH +aQn +jsg +vrF +rxK +ouD +ciu +eYR +heP +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(147,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +skb +xct +lQj +xwP +aFg +jPr +vbV +xuz +bXZ +uPM +xZU +vjs +mHf +lbZ +nLL +oZK +eYR +cxi +uvj +vgx +eYR +heP +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(148,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +xaE +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +fgD +fgD +uUN +tqw +nKk +rpR +uKY +mwS +bXZ +ogG +hzN +eYR +eYR +eYR +eYR +eYR +eYR +eYR +eYR +eYR +eYR +heP +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(149,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +fgD +lkP +lkP +bXZ +bXZ +bXZ +lkP +lkP +lkP +cYT +mvq +fvF +lkG +tbD +sjf +gns +eaT +gPU +eDt +stn +tyd +uSS +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(150,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wQE +wQE +tXc +vTg +jey +xAM +qQu +iwh +pXh +pqT +mFL +fvF +uYM +lrf +rxZ +aRH +kqn +kwt +jbH +eSp +tyd +uSS +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(151,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +nGx +qui +dPB +dPB +dPB +bij +dPB +vkf +pXh +suZ +mvq +pZt +fPC +xEE +pTM +rMh +eaT +eoX +eaD +rpA +tyd +uSS +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(152,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +nGx +qui +dPB +lgE +pcP +tBK +dPB +hxu +owS +qez +sQZ +itG +cxW +woz +iqa +vmp +slF +slF +slF +slF +slF +aCu +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(153,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wQE +wQE +xPo +ekZ +pHA +jac +uYT +yag +iqc +agA +mZa +lDZ +nEt +nBS +jxw +lDU +ani +jXA +nbB +nvV +sxT +uKe +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(154,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +pco +aPJ +kVY +aPJ +aPJ +xKS +qLA +dPB +owS +vLM +iIK +itG +ulT +jIF +fXP +yid +qLh +xfw +tMh +sdb +sxT +uKe +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(155,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +pco +pco +olO +xYV +aPJ +emx +kpk +pAP +owS +eeE +jrL +itG +fzo +tnB +nHX +prl +aag +jzJ +tKX +wwr +sxT +uKe +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(156,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +uYs +vDj +ffU +rhs +aPJ +nGe +nGe +nGe +nGe +jjB +nGe +nGe +nGe +uJt +iDj +iMo +fqc +fqc +fqc +fqc +fqc +mGG +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(157,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +uYs +vDj +vyf +fxn +aPJ +loC +kuY +pPw +mMW +nZH +noS +xch +nGe +lOA +vmf +dzY +lhF +qQA +eRV +dwh +atH +ilB +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(158,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +uYs +vDj +ilz +tVL +aPJ +dFV +ght +wrv +kTn +gMI +fHz +uCq +nGe +niO +wjs +giZ +trg +fih +uCw +sFg +tXS +ilB +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(159,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +pco +pco +ilz +swe +aPJ +gZz +osy +iEY +wrv +qaU +xmU +dVJ +nGe +gqO +xya +vmf +lMl +pAB +hQZ +vuC +tXS +ilB +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(160,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +pco +aPJ +xdB +aPJ +aPJ +xJc +wrv +dbQ +qtJ +wdN +giT +nsS +nGe +roq +ekw +gSc +cBI +ajd +ajd +ajd +ajd +ajd +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(161,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +hLO +hLO +hEJ +sUO +aPJ +nGe +ixb +oWd +qLF +dMl +nTC +dMl +oLl +itG +itG +rvT +uda +rvT +lYA +fdI +uMi +uMi +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(162,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +hLO +lQX +mjk +aPJ +nGe +sUt +leb +jzv +jCr +xiA +wMx +oLl +rvT +rvT +rvT +sQs +sQs +hIq +sQs +uMi +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(163,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +hLO +hLO +hLO +hLO +ndR +nkh +edR +nfn +pJe +sSb +cQT +kPn +uMi +uMi +uMi +uMi +uMi +uMi +uMi +uMi +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(164,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +hLO +fUi +fUi +fUi +ndR +pLR +kMd +xfz +tNg +tNg +tNg +xfz +uMi +oca +oca +uMi +oca +oca +oca +uMi +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(165,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(166,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(167,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(168,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(169,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(170,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(171,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(172,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(173,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(174,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(175,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(176,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(177,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(178,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(179,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(180,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(181,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(182,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(183,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(184,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(185,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(186,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(187,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(188,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(189,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(190,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(191,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(192,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(193,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(194,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(195,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(196,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(197,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(198,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(199,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(200,1,1) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} + +(1,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(2,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(3,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(4,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(5,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(6,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(7,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(8,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(9,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(10,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(11,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(12,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(13,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(14,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(15,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(16,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(17,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(18,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(19,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(20,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aSX +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aSX +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wOv +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(21,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +aSX +aSX +aSX +aSX +aSX +aSX +kdQ +fuc +lLZ +aSX +aSX +aSX +aSX +aSX +aSX +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(22,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +aSX +aSX +aSX +aSX +aSX +aSX +lQM +dDa +pJv +aSX +aSX +aSX +aSX +aSX +aSX +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(23,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +soS +aSX +ltr +ltr +ltr +bXN +bXN +lxq +lxq +lxq +bXN +bXN +ltr +ltr +ltr +aSX +xsf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(24,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +tXe +aSX +ltr +hWZ +aMp +bXN +dRD +vWR +lCH +dET +pFg +bXN +aMp +qwA +ltr +aSX +tXe +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(25,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +tXe +tXe +aSX +ltr +krI +oRs +vDv +fUJ +sGF +lCH +krn +qQY +vDv +rRV +mDb +ltr +aSX +tXe +tXe +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(26,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +nXq +tXe +tXe +aSX +ltr +krI +oRs +vDv +oRl +cNO +cfU +qvX +cow +vDv +rRV +ahf +ltr +aSX +tXe +tXe +nXq +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(27,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +tXe +tXe +aSX +ltr +esD +ogH +bXN +wNV +xvT +gAD +iYT +qqj +bXN +ogH +nxu +ltr +aSX +tXe +tXe +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(28,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +tXe +aSX +ltr +rZl +lrV +bXN +roC +ddK +fEQ +qqj +fbN +bXN +lrV +wve +ltr +aSX +tXe +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(29,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +aSX +ltr +cGe +qwA +bXN +kog +vDv +vDv +vDv +bCu +bXN +hWZ +brh +ltr +aSX +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(30,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +aSX +ltr +qPL +ahf +uoM +lVe +lkM +kUs +lkM +jrX +nwH +krI +feJ +ltr +aSX +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(31,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rlU +soS +aSX +ltr +jSh +ahf +jDW +awc +ogH +obN +ogH +nxu +dYi +jfm +rWn +ltr +aSX +xsf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(32,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +aSX +ltr +iyG +jGA +iGf +rdM +kiH +nzU +kiH +kiH +gUf +iIJ +vdL +ltr +aSX +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(33,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +fDT +aSX +ltr +iwi +xhr +fIb +vCB +mfM +dGd +qNZ +eiW +gVs +dLM +fkN +ltr +aSX +aSX +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(34,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +fDT +fEN +fEN +fEN +fEN +kfA +hjA +rLs +rLs +oUl +rLs +kfA +ltr +pSq +ltr +aSX +aSX +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(35,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rlU +tXe +fDT +fDT +fEN +pMI +vEO +bsV +kfA +guV +iYZ +jHe +psy +eZI +kfA +aAJ +hrT +ltr +aSX +aSX +aSX +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(36,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +tXe +tXe +qwO +anF +rql +hRS +trM +kBu +kfA +ybD +sxI +rfs +iBB +dEs +cEt +lXk +oZz +ltr +aSX +aSX +aSX +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(37,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +rpE +rpE +rlU +tXe +soS +fDT +fDT +fDT +fEN +rFM +cJb +rFM +kfA +qNx +nrt +beb +xGg +tWg +kfA +jfH +roN +ltr +fvb +aSX +aSX +aSX +rtT +rtT +rtT +rtT +rpE +rpE +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(38,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rlU +tXe +bAw +tXe +tXe +tXe +bAD +fDT +fDT +fDT +fEN +fEN +faB +fEN +kfA +xZb +ihh +bvn +wNX +lMG +kfA +ltr +ltr +ltr +ltr +ltr +aSX +aSX +rtT +rtT +rtT +idA +tXe +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(39,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +pJO +pJO +pJO +pJO +pJO +pJO +pJO +pJO +pFd +olw +liW +jZl +kfA +qdc +sxH +bfS +bUc +kXK +kfA +eaO +iJQ +hla +oRw +dLe +mpe +mpe +mpe +mpe +mpe +mpe +mpe +bAD +tXe +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(40,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +tXe +pJO +pJO +pFd +pFd +pFd +pFd +pFd +pFd +pFd +pFd +dgC +liW +jZl +kfA +kfA +kfA +lZJ +kfA +kfA +kfA +uSb +rdj +bvw +hdJ +dLe +dLe +dLe +dLe +dLe +dLe +dLe +mpe +mpe +bAw +tXe +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(41,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pJO +pJO +pFd +rNb +kCz +cpk +fHI +tLY +rXh +ujt +pFd +utv +cQa +jZl +hwe +fPL +dGz +esk +ghs +fPL +nCI +nCI +lZQ +nCI +nCI +dLe +aQp +oQg +ygP +gal +gal +dLe +dLe +mpe +mpe +tXe +tXe +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(42,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pJO +pJO +pJO +pFd +fPp +caf +xVQ +udJ +rcS +caf +caf +pFd +siD +sNV +oDE +vLj +jZk +jZk +xhz +jZk +jZk +vQJ +kPV +fPT +pkh +aBC +dLe +aQp +vjP +vjP +vjP +vjP +oQg +dLe +dLe +mpe +mpe +tXe +tXe +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(43,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pJO +pJO +pFd +pFd +pFd +huO +lwm +wWF +kyc +nZf +opd +iPk +pFd +hWm +lGm +sky +tMB +pZL +pZL +pZv +pZL +pZL +lEz +jAm +nZa +uoI +hMp +dLe +aQp +jxY +pdZ +gbk +gbk +gbk +dLe +dLe +dLe +mpe +mpe +tXe +tXe +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(44,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pJO +pJO +pJO +pFd +kLB +pFd +pFd +pFd +pFd +mbk +pFd +pFd +pFd +pFd +gek +vdu +mnb +ezw +ezw +qcZ +oRX +ezw +ezw +ghJ +dmW +bzb +rgS +ohu +dLe +aQp +jxY +ygP +gal +gal +gal +gal +gal +dLe +dLe +mpe +mpe +tXe +tXe +atx +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(45,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aOq +aOq +aOq +aOq +uDW +kHm +dVs +dVs +dVs +dVs +ujv +jYx +dVs +dVs +dVs +rJx +hBZ +tTS +ezw +fKO +ovI +hya +vDa +ezw +noa +dmW +bzb +sQx +hka +dLe +aQp +jYB +tTD +tTD +bjo +iib +atq +pPx +vAL +dLe +dLe +mpe +mpe +tXe +tXe +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(46,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +aOq +aOq +uDW +uDW +uDW +uDW +esk +lGm +jaZ +jaZ +jaZ +vMX +jaZ +fLx +jaZ +jaZ +lBq +boS +esk +ezw +eUc +gNA +iTq +iPj +ezw +rID +dmW +bzb +sta +tUH +dLe +dLe +dLe +qcm +rJL +ehs +kdg +bGS +peL +lXQ +tih +dLe +dLe +mpe +mpe +xsf +tXe +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(47,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aOq +aOq +uDW +vZz +fTe +eZK +uDW +eGS +fDd +nsv +nsv +nsv +nsv +nsv +nsv +nsv +nsv +nsv +fDd +esk +ezw +aBL +gNA +iYI +gNA +xxv +sta +dmW +uTR +bgG +dnz +eWu +pCq +grk +qNV +pQY +pze +rcj +wfV +fUO +bAs +dLe +dLe +dLe +mpe +mpe +mpe +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(48,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aOq +aOq +uDW +rqd +kUy +hTZ +gDT +bdz +rvx +nsv +bQH +uPc +dBb +tlx +cON +wSZ +kyH +nsv +fDd +esk +ezw +wVO +gNA +wVf +gDw +ezw +aML +dmW +oDO +ghJ +ghJ +dLe +dLe +dLe +dLe +dLe +dLe +dLe +dLe +dLe +dLe +dLe +dLe +pqQ +dLe +dLe +mpe +bAD +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(49,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aOq +aOq +aOq +uDW +kJP +hTu +iKf +uDW +xwY +kKP +exi +fhP +ffp +nfq +mZA +dal +wUi +edc +pBQ +wEb +esk +ezw +kIy +tcE +nIo +kTW +ezw +vTQ +ccQ +tXY +eqt +pwH +pwH +pwH +pwH +pwH +gxm +pwH +pwH +cgh +pwH +pwH +pwH +pwH +pwH +ckL +nCI +tQA +tQA +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(50,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aOq +uDW +uDW +uDW +uDW +uDW +uDW +uDW +esk +wAw +nsv +vfD +cKS +sHD +rNm +jsR +rLt +oMG +nsv +fDd +esk +ezw +ivM +iZP +wxd +ivM +ezw +wDC +dmW +oBh +unm +tTX +tTX +tTX +tTX +tTX +qyK +oDh +tTX +tTX +tTX +tTX +tTX +tTX +wwG +aLQ +nCI +tQA +tQA +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(51,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +dHK +tKr +hmE +sfM +fQW +isA +wEf +tKr +esk +iKs +nsv +nHD +cKS +lfO +ejh +qdn +rLt +mEe +nsv +pha +dkV +bwv +kVf +lzz +lzz +kVf +bwv +bwv +kuJ +chc +ghJ +jan +jan +rHY +aTm +mez +nCI +nCI +agG +agG +agG +agG +tML +ghJ +jhd +ffN +nCI +nCI +tQA +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(52,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +dHK +tKr +dyS +qoW +tNo +tNo +xfu +tKr +esk +gek +nsv +nsv +kXA +nsv +nsv +nsv +dHN +nsv +nsv +fOG +kSS +cdH +klB +eXe +eXe +eXe +wbZ +cdH +fFO +kqy +ghJ +aBC +naG +uHw +rbf +weX +aHM +aHM +aHM +aHM +aHM +aHM +aHM +aHM +xiD +aLQ +xog +nCI +tQA +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(53,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +dHK +tKr +mzC +opb +liy +lDQ +iUm +tKr +sQV +kJa +xyo +jVh +jmW +rBT +jZR +jjh +sSB +qRV +aCE +gHs +xcB +riq +caJ +cii +cii +cii +kYz +riq +xbZ +xDK +loO +loO +loO +loO +loO +loO +aHM +cCT +vnK +hGj +vSO +ang +jHu +aHM +xiD +aLQ +csX +nCI +tQA +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(54,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +dHK +tKr +iKQ +opb +nGc +pzw +tZs +hOi +hTP +eSJ +eeW +lNS +ckm +ktg +ktg +nQz +hmD +gkX +cDJ +eHP +rFv +cdH +gHp +nlt +pRM +szf +wvA +cdH +cij +pnE +loO +oNQ +kHd +nwm +mYa +mJy +kKt +mJt +uRR +oZY +pWl +lmT +hbD +aHM +xiD +aLQ +fFn +nCI +tQA +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(55,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +dHK +tKr +jKg +opb +vLT +ezA +wEl +tKr +esk +kJa +lwg +jmW +iTX +eEZ +eEZ +lub +jmW +lVr +aCE +eHP +xgt +kXN +kXN +kXN +kXN +kXN +kXN +kXN +fFO +pnE +loO +oFq +qDi +rCs +quv +ovT +hQX +oeQ +ddW +myr +nRO +ofb +nht +aHM +xiD +aLQ +uMu +nCI +tQA +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +ruB +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(56,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +dHK +tKr +cWn +inQ +fEw +nHI +azA +tKr +esk +kJa +xRU +jmW +mMg +dmG +dLK +vaI +dnf +abj +fUP +exY +akl +kXN +mGL +pAL +rDf +amf +tee +kXN +pPL +iIm +nVu +dgR +wEy +myn +jsz +xeQ +pdD +nRk +vnK +dme +vSO +xiY +utC +aHM +xiD +aLQ +lqB +nCI +tQA +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(57,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +dHK +tKr +oLp +err +hmZ +uEb +rCZ +tKr +esk +kJa +hUB +jmW +qKk +qKk +qKk +qKk +sSB +aIM +aCE +eHP +cpO +kXN +xTq +woS +rKi +acR +gRz +kXN +pyq +pnE +loO +dCr +kRb +oaY +bIP +aHL +tqr +oKt +wDG +fYE +ehI +fdV +aHM +aHM +xiD +aLQ +nPi +nCI +tQA +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(58,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +iQB +aRo +aRo +aRo +aRo +aRo +aRo +aRo +qcQ +kJa +rzq +vvB +eYf +kZq +uAN +unF +mPZ +ecF +kJa +tvr +uYY +kXN +qoR +owI +mTI +shn +adB +kXN +nZd +qTL +loO +ckW +tmA +lHf +mqd +res +nRy +lyr +wBg +xZO +uwC +yfS +aHM +lNZ +xiD +aLQ +rgS +nCI +tQA +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(59,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +iQB +aRo +vgW +xKB +cwT +deD +bhb +aRo +esk +gek +gek +gek +sln +sln +sln +vyb +urw +sln +sln +plz +qms +kXN +xTq +xgD +saT +uGF +gRz +kXN +woR +bts +loO +iel +oVV +ycY +pHt +hwV +dma +llX +voT +llX +llX +qUe +aHM +uHB +xiD +aLQ +wWo +nCI +tQA +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(60,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +iQB +aRo +hvT +bVg +xuD +uIX +wPQ +aRo +cZY +jZl +cNv +bgP +sln +lDS +wkl +vOC +qGw +gIN +sln +eHP +sDz +kXN +nqH +lqX +oDU +ggH +ihl +kXN +wkN +pnE +loO +lvu +sNW +cbO +ifH +dzO +aHM +xvV +mYT +dBP +jBQ +yiq +aHM +xjQ +xiD +aLQ +uAp +nCI +tQA +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(61,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +lUl +lUl +lUl +lUl +lUl +lUl +lUl +lUl +pFz +pFz +pFz +iQB +aRo +xOd +hvd +ntX +mge +kmI +skO +fMG +jZl +jZl +jZl +sln +ouB +uPj +dkC +sHU +jsG +hWe +bAx +gHX +kXN +kXN +kXN +ocu +kXN +kXN +kXN +qms +gZZ +evm +evm +evm +evm +evm +evm +dPl +dPl +rjz +dPl +dPl +dPl +nCI +ghJ +jhd +ffN +ghJ +nCI +tQA +mXk +mXk +mXk +mXk +mXk +mXk +mXk +mXk +mXk +mXk +mXk +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(62,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +xBi +iQB +aRo +mUi +pCc +krZ +kVZ +fcC +aRo +aUp +rAR +rAR +rAR +adO +ssx +dMc +sxK +fGK +cLI +rle +eHP +xgt +oma +kXN +ivu +rap +lMX +ttD +kXN +woR +fcN +evm +uhE +cRB +bwn +jcy +evm +rGS +voA +uGu +sUI +bck +dPl +fEE +tTX +hGD +aLQ +pjL +nCI +tQA +fTv +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +mXk +rtT +rtT +rtT +rtT +eML +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(63,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +rtT +qfi +qfi +qfi +qfi +qfi +qfi +qfi +qfi +qfi +vsF +iQB +aRo +sdS +oiC +oXI +aVS +gFS +aRo +qrw +jZl +faw +qVv +sln +grs +jmI +uYX +wLg +dgj +vyS +buC +aPY +hTA +mba +cBz +rbU +bmr +jcA +kXN +fFO +prP +bjq +cIe +epT +pzr +kDj +evm +naT +sLL +bld +fHi +gsX +mDE +oHu +web +stN +npf +dbj +nCI +tQA +eAS +pfc +vvw +vvw +vvw +vvw +vvw +vvw +vvw +vvw +kkr +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(64,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +cZw +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +dbV +jqf +jqf +jqf +jqf +jqf +jqf +jqf +jqf +iif +iQB +aRo +aRo +aRo +aRo +aRo +aRo +aRo +qcQ +fEN +fEN +fEN +sln +rfp +drP +sxK +sbJ +uiQ +sln +hkq +xgt +nqE +kXN +auk +pgK +dsE +roS +kXN +pyq +pnE +evm +foq +gJm +qzw +rbE +evm +fMK +vyr +rrx +qbZ +nDl +dPl +xiD +kjc +vXO +vXO +vXO +vXO +dMW +hkv +lda +lda +lda +lda +lda +lda +wiO +lda +rtY +rtT +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(65,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +rtT +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ddX +xMk +xjZ +kMT +esx +tlm +mmo +fJC +twH +pvb +dNg +pvb +mMJ +igE +sln +oLh +haV +gYr +hGh +jny +sln +fsu +uYY +bwv +kXN +kXN +kXN +kXN +kXN +kXN +nZd +eOb +ezP +gSf +ssJ +fbC +syQ +evm +dPl +dPl +dPl +dPl +dPl +dPl +xiD +kjc +vii +cJp +vdS +qDa +dMW +aVL +rdY +rjF +rjF +rjF +rjF +rjF +rjF +rjF +rjF +kkr +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(66,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +yba +xjZ +qjP +bsO +fVg +cuW +bHt +bHt +bHt +iHh +pvb +dnR +dcD +sln +sln +sln +sln +sln +sln +sln +pSH +xgt +bwv +kJI +mRP +pKy +izj +cUd +bwv +fFO +ezL +vDC +azk +uoL +xFn +dgr +evm +aLA +vWr +bJB +tdN +cyP +lxb +xiD +coB +mcw +aJA +wLu +xlb +dMW +aVL +hRQ +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(67,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +rtT +qfi +qfi +qfi +qfi +qfi +qfi +qfi +qfi +qfi +yba +xjZ +xzD +trx +oiz +mmo +pvb +pvb +pvb +cYe +pvb +pvb +pvb +pvb +pvb +fiO +ipj +ipj +ipj +jCo +xNk +hfu +cdH +gjd +lzz +lzz +lzz +mdZ +cdH +arq +shG +evm +xpJ +aJL +bNu +rCX +evm +dgx +bVw +wVe +tdN +vON +pOD +xiD +kjc +exs +dNa +bgD +bKy +dMW +aVL +vvw +vvw +vvw +vvw +vvw +vvw +vvw +vvw +vvw +kkr +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(68,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +dbV +jqf +jqf +jqf +jqf +jqf +jqf +jqf +jqf +bRk +xjZ +xov +xjZ +tcu +mmo +ejn +pvb +eUR +aBy +wiU +gsf +wiU +kMY +kMY +hEE +vVY +cnr +cnr +nMj +onC +ayj +cae +cIz +pvH +kEB +axC +nbJ +cae +smL +pZH +evm +evm +evm +vGk +evm +evm +cLv +szk +qEo +tdN +qHz +sta +xiD +kjc +jQd +fTw +dMW +dVT +dMW +fMt +lda +lda +lda +lda +lda +lda +lda +lda +rtY +rtT +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(69,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +rtT +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ddX +yba +xjZ +kZw +sKa +rJX +mmo +pfo +pvb +oTo +pAW +dLu +qpN +pvb +pvb +pvb +kQq +xzJ +ego +dWB +bwv +jDf +pZG +czb +dtE +mkQ +dQY +cqT +idQ +czb +sWj +dSU +vFq +bxb +psW +uKk +gUM +tdN +pwh +szk +fKT +tdN +oTt +sta +xiD +kjc +jQd +rWO +gbT +tUm +dMW +aVL +rjF +rjF +rjF +rjF +rjF +rjF +rjF +rjF +rjF +kkr +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(70,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +yba +xjZ +tch +xjZ +wWI +mmo +pvb +eUR +dCc +pAW +pPq +cSd +sMQ +sMQ +viL +sMQ +sMQ +ftw +ftw +ftw +ftw +ftw +ftw +ftw +cRq +aYR +rVO +dtd +dtd +dtd +dtd +dtd +gPE +uyf +qNr +weM +tdN +tdN +tkg +tdN +tdN +ghJ +ghJ +xiD +kjc +jQd +jul +dMW +ftS +dMW +aVL +hRQ +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(71,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +rtT +qfi +qfi +qfi +qfi +qfi +qfi +qfi +qfi +qfi +yhd +xjZ +nsb +sKa +fyB +kem +lgS +tjb +pAW +pAW +pAW +sjQ +sMQ +fEA +xFG +vGX +gaF +ftw +jBb +jBb +jBb +jBb +jBb +ftw +cQh +lfF +okY +dtd +vIw +vIw +vIw +dtd +uAC +uyf +qNr +khO +rnL +cpS +ktr +tFC +vWn +wUS +khO +kcp +wOI +pgI +kzg +sAS +atR +dMW +xXf +vvw +vvw +vvw +vvw +vvw +vvw +vvw +vvw +vvw +kkr +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(72,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +dbV +jqf +jqf +jqf +jqf +jqf +jqf +jqf +jqf +eLC +xjZ +bwb +xjZ +azH +mmo +pvb +nmu +smt +fog +eQQ +tPh +sMQ +kOy +xFG +vGX +gaF +ftw +jBb +jBb +jBb +jBb +jBb +uBY +mqj +nuc +skW +osP +oBW +vIw +vIw +dtd +hEQ +uyf +qNr +khO +dSg +cJs +aKy +ufm +fEG +jXs +mpB +jOq +aec +jQd +cXk +dMW +qWn +dOB +fMt +lda +lda +lda +lda +lda +lda +lda +lda +rtY +rtT +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(73,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +rtT +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ddX +dGx +tON +nap +lPg +bRV +pAW +pAW +pAW +pAW +dcb +faG +sVA +nlJ +lrR +jTy +vGX +gaF +ftw +jBb +jBb +jBb +jBb +jBb +uBY +umT +xXd +skW +osP +mMx +pKb +vIw +dtd +jcE +tNA +qmB +xIV +wnh +hlC +xCG +oIv +gqL +oTI +khO +xiD +kjc +sqV +kBc +kBc +xZC +oFI +qSm +rjF +rjF +rjF +rjF +rjF +rjF +rjF +rjF +rjF +kkr +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(74,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +yba +ahe +lPg +lPg +bRV +eUR +lgS +iEv +lgS +dnY +vvV +aBc +sMQ +wOd +jSI +vGX +gaF +ftw +jBb +jBb +jBb +jBb +jBb +uBY +dDN +nuc +kMJ +osP +qiK +qan +dYl +dtd +gPE +gPE +qNr +khO +upM +qVc +hYf +sfr +ivC +sbT +khO +jhd +onX +sqV +kBc +kBc +kBc +kBc +aVL +hRQ +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(75,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +rtT +qfi +qfi +qfi +qfi +qfi +qfi +qfi +qfi +qfi +yba +lPg +lPg +lPg +bRV +oTo +rPc +vgH +jEc +dME +jkr +mFG +sMQ +pXx +ebt +lqu +gaF +ftw +jBb +jBb +jBb +jBb +jBb +ftw +gQn +qzQ +wun +bqo +iOP +adZ +rSW +gqK +eKi +eKi +bYC +khO +xTD +xTD +nKd +cYV +csp +csp +khO +qNr +mOq +sqV +kBc +kBc +kBc +kBc +aVL +vvw +vvw +vvw +vvw +vvw +vvw +vvw +vvw +vvw +kkr +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(76,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +dbV +jqf +jqf +jqf +jqf +jqf +jqf +jqf +jqf +bRk +lPg +bRV +bRV +bRV +oxn +rZZ +nFj +nFj +nFj +nFj +nFj +sMQ +sMQ +fDL +sMQ +sMQ +ftw +ftw +ftw +ftw +ftw +ftw +ftw +cRq +aYR +iaT +dtd +rRf +fwu +wvp +dtd +gPE +gPE +mtR +khO +khO +khO +khO +khO +khO +khO +khO +qNr +mOq +sqV +iCS +bqJ +uHX +tot +deh +lda +lda +lda +lda +lda +lda +lda +lda +rtY +rtT +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(77,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +lUl +lUl +rtT +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ddX +yba +lPg +bRV +yfc +uuS +oTo +qpN +nFj +vvM +kfc +oKA +nFj +xWr +oZV +pYP +sxg +wsH +oED +abs +xgT +xmq +idG +sGC +kRJ +idG +afq +fGv +cRq +mgx +mgx +mgx +mgx +mgx +vFR +cTj +weM +cxt +cxt +cas +uGJ +btP +uHZ +fOt +vLt +mOq +sqV +rCy +fmD +bhA +tot +aVL +rjF +rjF +rjF +rjF +rjF +rjF +rjF +rjF +rjF +kkr +mXk +pFz +pFz +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(78,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +kkr +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +yba +lPg +bRV +mgK +vOy +oTo +okp +oeM +qNl +tIu +lOp +qFV +kiS +eZV +atW +lvI +cFo +mPu +xgk +gaY +ncx +idG +vcS +sYU +idG +rFG +wsz +wbk +mgx +sEf +mgx +sEf +mgx +gPE +mtR +gPE +gPE +gPE +lwD +gPE +cxy +uZu +lmg +xZv +dZu +sqV +atJ +whj +eqs +tot +aVL +hRQ +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +kkr +pFz +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(79,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +hzh +xNy +xNy +xNy +xNy +xNy +xNy +xNy +xNy +xNy +xNy +cOC +lPg +bRV +aAw +upN +oTo +qpN +nFj +jry +eTK +wpT +nFj +dIR +edt +uQp +viJ +bTH +eMF +eJS +yjR +mXa +idG +tJx +bUY +idG +uPX +fhV +xCQ +mgx +aUX +mgx +vyy +mgx +gPE +cGH +eKi +eKi +eKi +eKi +eKi +dqz +qbE +sqV +sqV +sqV +sqV +tEF +dmQ +ehB +kBc +qUA +oFI +oFI +oFI +oFI +oFI +oFI +oFI +oFI +oFI +bCk +gpd +kkr +pFz +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(80,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +kkr +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +xMk +lPg +bRV +ebh +fxm +oTo +xsQ +rPv +rPv +iQS +rPv +rPv +fAj +mdn +bSd +udn +udn +amy +uaO +xBy +chu +idG +idG +srY +idG +tVx +fPN +keb +mgx +hUX +mgx +uBD +mgx +gPE +mtR +ptM +wtM +wtM +gDo +gPE +mtR +nyY +sqV +dtv +rUW +gnr +atJ +xIM +cBG +tot +aVL +hRQ +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +kkr +pFz +rtT +rtT +rtT +rtT +rtT +gCl +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(81,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +lUl +lUl +rtT +qfi +qfi +qfi +qfi +qfi +qfi +qfi +qfi +qfi +yba +lPg +bRV +yhW +kSW +oTo +qpN +rPv +qse +aSf +qVF +vuu +xhd +mdn +sXC +lzD +wpX +aiA +oOi +nMI +tVb +uHG +dwG +ntW +gDf +kBk +iKy +iJU +sju +oHN +qXB +nGI +riP +sTh +xfd +pSF +haP +egr +yei +gPE +dpR +mIO +uQE +hfB +woC +sVt +dAY +dUQ +sdd +tot +aVL +vvw +vvw +vvw +vvw +vvw +vvw +vvw +vvw +vvw +kkr +mXk +pFz +pFz +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(82,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +dbV +jqf +jqf +jqf +jqf +jqf +jqf +jqf +jqf +cOC +lPg +bRV +tUc +iIE +oTo +qpN +rPv +lru +dkS +jON +lfh +tFG +mdn +sXC +wpX +wpX +aiA +ulX +vcB +vcB +vcB +dPE +jbr +fjV +anu +fcd +lJF +mgx +leL +twZ +mBj +mgx +gPE +gPE +obB +ujE +xZc +jAY +gPE +mtR +nyY +sqV +kyC +xYF +qrU +wQa +frh +uHX +tot +deh +lda +lda +lda +lda +lda +lda +lda +lda +rtY +rtT +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(83,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +rtT +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ddX +yba +lPg +bRV +iRA +fxm +oTo +cSd +rPv +sSd +nkB +wVj +mbf +tFG +mdn +lBp +ukT +ukT +xXO +sDf +idc +chu +idG +idG +hkw +idG +nnR +sbG +ngG +mgx +mgx +mgx +mgx +mgx +weM +weM +weM +weM +weM +weM +gPE +mtR +nyY +weM +weM +weM +weM +weM +weM +wmy +lAE +aVL +rjF +rjF +rjF +rjF +rjF +rjF +rjF +rjF +rjF +kkr +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(84,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +yba +lPg +bRV +mgK +fxm +oTo +qpN +rPv +kvz +whx +uMe +mbf +tFG +cdP +udr +ace +ace +nul +vDm +lzL +lnc +idG +akp +jvA +idG +fRO +sbG +xPb +hcF +tin +nZA +aWr +gxi +flG +kdd +lls +rly +gcF +kdd +gPE +jjJ +rrs +pVv +xZv +xZv +xZv +jSM +iGV +wmy +lAE +aVL +hRQ +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(85,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +rtT +qfi +qfi +qfi +qfi +qfi +qfi +qfi +qfi +qfi +yba +lPg +bRV +eff +fxm +oTo +qpN +rPv +ifL +rAi +jBT +mbf +tFG +wYp +tdV +xBy +sCV +ify +det +jKU +mzN +idG +gIZ +iTa +idG +ljV +qKU +wVd +xKj +imn +stB +aWr +lKy +vya +kdd +iim +goA +goA +iNd +jIl +xbY +uHZ +kNv +tyX +uHZ +uHZ +sgG +mfs +wmy +lAE +aVL +vvw +vvw +vvw +vvw +vvw +vvw +vvw +vvw +vvw +kkr +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(86,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +dbV +jqf +jqf +jqf +jqf +jqf +jqf +jqf +jqf +cOC +lPg +bRV +azj +xOH +oTo +qpN +rPv +qOC +shL +sPR +far +upE +hhq +tdV +ycb +wWY +tYF +ydd +khm +lyk +idG +suH +kxC +idG +eYX +rJD +hRc +nGo +keb +fNr +bcu +lTj +mcN +kdd +ahx +tDJ +drh +kdd +weM +cKL +cKL +cKL +qhF +aQt +fei +nyY +mtR +wmy +lAE +deh +lda +lda +lda +lda +lda +lda +lda +lda +rtY +rtT +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(87,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +rtT +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ddX +yba +lPg +bRV +pAW +pAW +oxn +uKy +rPv +dRl +eNG +rPv +rPv +idG +idG +flQ +pTa +pTa +rRw +jhm +pTa +pTa +pTa +idG +idG +idG +fBu +hyC +urd +nJJ +gBN +kae +bLy +fRQ +bzP +owl +vwE +bPa +pVE +kdd +xcb +cKL +yfw +cKL +nWU +cSs +xJl +nyY +mtR +wmy +lAE +aVL +rjF +rjF +rjF +rjF +rjF +rjF +rjF +rjF +rjF +kkr +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(88,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +xMk +lPg +bRV +pTS +swN +icG +nyZ +kqE +kqE +kqE +kqE +ejc +wfc +rAX +vGl +pTa +mop +pEv +uLR +hnT +xsr +jYh +wms +wms +wms +wms +wms +maz +nJJ +gBN +vWZ +bLy +pev +oGS +uAg +smH +wPt +wtU +kdd +cKL +cKL +bDX +cKL +cKL +weM +weM +isi +cTj +wmy +lAE +aVL +hRQ +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(89,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +gCl +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +rtT +qfi +qfi +qfi +qfi +qfi +qfi +qfi +qfi +qfi +yba +lPg +bRV +pUY +pvb +pvb +txq +jEc +jEc +jEc +jEc +jEc +jEc +jEc +iMO +pTa +ybR +bqj +nAD +ozj +xWx +ptt +wms +vdv +kBr +kWI +wms +lGZ +kTb +biK +kdd +eAI +hGf +ijh +kdd +koe +uGM +xLz +kdd +lex +uAZ +oTm +xNI +cKL +iDB +tiZ +nyY +mtR +wmy +lAE +aVL +vvw +vvw +vvw +vvw +vvw +vvw +vvw +vvw +vvw +kkr +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(90,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +dbV +jqf +jqf +jqf +jqf +jqf +jqf +jqf +jqf +iid +lPg +bRV +nZk +lRq +uPV +qEm +uPV +uPV +uPV +lRq +pvb +pvb +pvb +vGl +pTa +oeo +jTn +mBA +apu +fzC +wuk +wms +czN +fNX +vRl +nvZ +dWJ +tRg +mku +kQE +iaM +wzH +hXp +msE +oAM +bLy +kWd +kdd +dKc +rmo +nKB +nIf +cKL +pfZ +jAY +nyY +mtR +wmy +lAE +aVf +lda +lda +lda +lda +lda +lda +lda +lda +rtY +rtT +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(91,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +rtT +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ddX +ngg +lPg +bRV +pUY +lRq +tTF +uRY +hyg +dgE +nGO +lRq +scj +weJ +pvb +vGl +pTa +tTh +hHm +pWb +gjQ +cqD +phs +wms +oJH +hMC +iRI +wms +fyc +sZm +pIK +kdd +lnj +rst +ouZ +kdd +pzC +bLy +bXC +kdd +nRV +rpx +gGy +wdp +cKL +fZi +jAY +nyY +mtR +wmy +lAE +uYw +rjF +rjF +rjF +rjF +rjF +rjF +rjF +rjF +rjF +kkr +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(92,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lUl +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +cbF +lPg +bRV +nNL +lRq +cyr +hyj +gvL +mDN +dBn +lRq +bZf +iLh +pvb +vGl +pTa +pTa +pTa +pTa +pTa +pTa +pTa +wms +wms +wms +wms +wms +kxZ +vTy +uYP +uYP +uYP +cKL +cKL +cKL +cKL +cKL +cKL +cKL +mAA +bDX +kCy +uDc +cKL +mgW +hCS +nyY +mtR +wmy +lAE +uYw +hRQ +rtT +kkr +rtT +kkr +rtT +kkr +rtT +kkr +rtT +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(93,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +mXk +lUl +lUl +mXk +mXk +mXk +mXk +mXk +mXk +mXk +mXk +unN +lPg +bRV +pUY +uLv +aoC +cbw +cFi +uRY +bFX +uPV +vjM +pWc +pvb +vGl +ogC +leD +phi +eaf +xZX +iaQ +tFu +fiW +qlr +wdh +pfn +oOn +kwm +qDr +rcO +xIC +hpX +cKL +fCJ +ugW +ixQ +kre +lLW +cKL +ksE +bDX +kCy +pDy +cKL +nxM +gPE +nyY +mtR +wmy +lAE +hwE +hwE +mXk +mXk +mXk +mXk +mXk +mXk +mXk +mXk +mXk +mXk +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(94,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +wRe +uYw +egk +egk +egk +egk +egk +egk +egk +egk +egk +bRV +pUY +lRq +aoC +iJL +uTd +pzp +spW +uPV +ovl +qJK +pvb +vGl +qtL +ekS +onN +czn +dAr +xDC +tFu +cQq +tEG +esg +nkW +qyD +uKo +klZ +exx +exx +fDo +cKL +tod +ixQ +tdI +ssq +vnt +cKL +pwt +bDX +kCy +aEa +cKL +vhj +gPE +nyY +mtR +wmy +lAE +lAE +lAE +lAE +lAE +lAE +lAE +lAE +lAE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +pRd +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(95,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +ckU +egk +egk +egk +egk +egk +opM +opM +opM +opM +opM +bRV +nZk +lRq +jDs +pUh +xGr +fVA +spW +uPV +jqI +gBF +pvb +vGl +qtL +uqJ +wui +kwf +inb +usQ +tFu +mNi +vfb +vCR +lOO +oOn +nwe +fnZ +kmn +tRG +oRu +cKL +hZQ +ixQ +bje +oOk +tdI +cKL +sob +bDX +kCy +eNO +cKL +cKL +weM +rNH +mzV +wmy +wmy +wmy +wmy +wmy +wmy +wmy +lAE +lAE +lAE +lAE +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(96,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +eoO +egk +opM +opM +opM +opM +opM +sRu +sHv +sHv +pmK +tuE +pxD +lRq +gtP +gze +skJ +cnp +izp +lRq +bjd +pfo +pvb +vGl +qtL +eMt +mpU +qdK +rEy +gyn +tFu +ils +nIk +uQX +iSY +tFu +cZE +srf +qAf +qAf +vWI +cKL +dLk +bDX +bDX +bDX +bDX +oue +nKB +bDX +kCy +iiX +acN +cKL +vwa +nyY +mtR +gPE +weM +aaG +ffu +swB +swB +wmy +lAE +lAE +lAE +lAE +tXe +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(97,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lKq +yiZ +bKF +gTA +bOd +xMC +ncR +ncR +rCN +bqn +bqn +fJr +oTo +pvb +lRq +lRq +lRq +lRq +qWF +lRq +lRq +pvb +pvb +pvb +vGl +ogC +fyg +ibi +cYp +rVM +uVb +tFu +dBv +vfb +foc +cio +oOn +xyh +ukq +rwo +rwo +nTE +sCT +sFS +mgE +tJv +tJv +tJv +haA +wyV +tJv +fTt +aIe +bda +mah +eKi +aVI +bwg +vyK +weM +upq +lQP +hwS +tpf +wmy +ojh +cXE +vud +lAE +tXe +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(98,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +aTh +eoO +egk +ljT +mvn +xvl +jRh +nPC +euj +euj +bqn +fJr +oTo +nMk +okX +unx +unx +unx +gyP +unx +okX +jEc +jEc +jEc +mUq +qoh +gCG +wCA +dol +kib +kUj +tFu +vSp +goD +ekV +qMH +jbe +agK +glV +dmJ +dmJ +kLD +cKL +ocY +rIx +sAf +cLf +ixQ +svl +ixQ +kdh +xAq +cjk +vuf +cKL +gPE +ruI +fba +cSj +kCh +fds +tkw +jrQ +guN +mxA +kMb +kMb +yjK +bua +vDN +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(99,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +eoO +egk +ljT +fhw +xbp +iSn +nPC +azd +euj +bqn +fJr +oTo +ldz +sgL +xCz +xCz +xCz +iGA +xCz +sgL +xCz +xCz +xCz +njJ +ogC +cde +rLP +lWr +sVH +vgw +tFu +sqQ +oqC +hZN +giL +oOn +kwm +wMT +cur +cur +oUi +cKL +ipa +tfU +ejp +uRo +jkU +qyP +tRr +nbg +oCq +mWv +snH +cKL +emE +geF +qNr +mOq +weM +dYd +yeL +rsb +kmE +wmy +kJX +xPm +sZZ +lAE +tXe +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(100,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +egk +egk +egk +ljT +kTi +wJH +msz +nPC +euj +euj +bqn +fJr +kad +ohN +nvT +nvT +bJM +bJM +bJM +nvT +nvT +bJM +xHt +rpl +bJM +nvT +nvT +bJM +bJM +bJM +nvT +nvT +nvT +bJM +bJM +nvT +nvT +jTc +nvT +bJM +bJM +bJM +nvT +bJM +bJM +bJM +nvT +bJM +bJM +bJM +nvT +bJM +wlR +bJM +nvT +nvT +nvT +qNr +mOq +weM +suO +lAU +aqz +bVP +wmy +lAE +lAE +lAE +lAE +xsf +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(101,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +soS +egk +opM +opM +ljT +fJr +uLH +ncR +ncR +vvj +bqn +bqn +fJr +oTo +ohN +nvT +fHq +fHq +fHq +fHq +fda +fHq +fHq +fHq +fHq +fHq +fda +fHq +fHq +fHq +fHq +fHq +fda +fHq +fHq +fHq +fHq +obE +obE +vaw +fHq +fHq +fHq +fda +fHq +fHq +fHq +fda +fHq +fHq +fHq +fda +fHq +fHq +fHq +fHq +fHq +nvT +qNr +mOq +weM +weM +weM +weM +weM +weM +weM +weM +wmy +lAE +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(102,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +idA +tXe +egk +opM +kJW +svv +qJJ +ajw +hLq +qwu +cRn +hHd +hLq +fJr +oTo +ohN +iIc +fHq +vif +sLM +sLM +sLM +sLM +sLM +sLM +hcW +fHq +vif +sLM +sLM +sLM +sLM +sLM +sLM +sLM +sLM +sLM +sLM +gbH +fHq +vif +sLM +sLM +sLM +sLM +sLM +sLM +sLM +sLM +sLM +sLM +sLM +sLM +sLM +sLM +hcW +fHq +fHq +jXF +qNr +tdu +pVv +inl +inl +inl +inl +inl +oMi +nxq +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(103,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +egk +opM +dxX +dgT +sRN +ejR +ucR +dCe +fmo +xpO +lsV +bOD +vXU +mdr +iIc +fHq +whO +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +drb +aOu +lCT +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +ceN +cqk +lvz +fHq +whO +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +lvz +fHq +fHq +nvT +vVb +wEu +kNv +iBN +iBN +iBN +iBN +vTZ +dfl +scB +kKR +eFO +tXe +gSd +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(104,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +egk +opM +sgz +jSi +hLq +yhR +yhR +fcx +qKd +rmf +njE +fJr +oTo +vdW +iIc +fHq +whO +mGJ +uoA +uoA +uoA +uoA +uoA +dII +wxL +kzO +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +ceN +ceN +lvz +fHq +whO +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +lvz +fHq +prX +nvT +cTL +xlH +rqW +sHG +pOJ +lgN +jmm +cmh +dfl +nxq +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(105,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +egk +opM +vUs +myc +wke +opM +opM +opM +opM +opM +opM +opM +oxn +gFg +nvT +pSA +whO +mGJ +uoA +uoA +uoA +uoA +uoA +uoA +wxL +kzO +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +ceN +tNj +lvz +fHq +whO +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +lvz +fHq +fHq +bCq +fkf +teA +rqW +eCX +exj +fBl +tOD +cmh +dfl +iRu +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(106,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +egk +opM +dxX +xCB +hLq +gjE +uIk +plE +miS +jjH +fGH +gjE +ryk +mYW +iIc +fHq +whO +mGJ +uoA +uoA +uoA +exI +exI +hGK +wxL +rbF +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +ceN +tNj +lvz +fHq +whO +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +lvz +fHq +hFN +bCq +eHM +qae +tvK +tvK +tvK +tvK +tOD +cmh +dfl +pst +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(107,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +egk +opM +fGA +xVp +vcz +gjE +kRS +lCS +qzs +iOw +woD +okD +taC +mkh +iIc +fHq +whO +mGJ +uoA +uoA +dII +wxL +wxL +wxL +wxL +wxL +kzO +uoA +uoA +uoA +uoA +uoA +uoA +uoA +ceN +ceN +lvz +fHq +whO +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +lvz +fHq +fHq +nvT +eHM +vTB +tvK +gOx +diP +tvK +tvK +cmh +dfl +bDK +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(108,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +egk +opM +evv +uns +wke +ukV +dVL +waq +kxQ +xSc +nlv +gjE +ryk +mGd +iIc +fHq +whO +mGJ +uoA +uoA +dII +wUa +nvT +nvT +kQa +bJM +bJM +nvT +vzJ +uoA +uoA +uoA +uoA +uoA +ceN +tNj +lvz +fHq +whO +cqk +tyD +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +lvz +fHq +fHq +bCq +jxj +mtI +rGI +syd +jfF +uTw +tvK +cmh +dfl +scB +kKR +eFO +xsf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(109,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +soS +egk +opM +fJr +iyB +fJr +gjE +gjE +oly +tOk +dSX +gjE +gjE +ryk +mGd +nvT +fHq +whO +mGJ +mGJ +mGJ +dII +wxL +nvT +gms +wgD +aYW +nAg +iIc +uoA +uoA +uoA +uoA +uoA +uoA +ceN +tNj +lvz +fHq +whO +cqk +nvT +cqk +pKd +pKd +pKd +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +lvz +fHq +fHq +xZt +lrL +azU +wYF +tHZ +tlW +bfp +tvK +rwb +dfl +iRu +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(110,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +sbr +ttL +mfZ +yeX +rfa +vdh +vdh +vdh +eXV +vdh +vdh +vdh +mDS +mGd +jXF +fHq +whO +cqk +cqk +mGJ +dII +wxL +iIc +fPl +esy +wBV +rrR +iIc +uoA +uoA +uoA +uoA +uoA +uoA +ceN +tNj +lvz +fHq +whO +cqk +fHq +fHq +fHq +cqk +fHq +cxX +nvT +cqk +cqk +cqk +cqk +cqk +cqk +lvz +fHq +prX +xvP +mFR +rsG +tvK +cLl +cJa +haJ +tvK +cmh +dfl +iRu +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(111,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +sbr +ttL +uJV +aKq +tPS +vdh +vdh +vXP +siw +jdg +vdh +vdh +ryk +mGd +nvT +fHq +whO +mGJ +mGJ +mGJ +dII +wxL +nvT +kno +nrW +cMY +oii +iIc +uoA +uoA +uoA +uoA +uoA +uoA +ceN +tNj +lvz +fHq +whO +cqk +nvT +cqk +sLM +sLM +sLM +cqk +cqk +cqk +cqk +cqk +cqk +cqk +cqk +lvz +fHq +fHq +ppE +ppE +ppE +tvK +vxq +jdY +tvK +tvK +cmh +dfl +uib +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(112,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +sbr +ttL +kkg +xgj +uzU +vdh +axm +xdi +irG +nyQ +jdg +pLs +ryk +mGd +iIc +fHq +whO +mGJ +uoA +uoA +dII +wUa +nvT +nvT +kQa +bJM +bJM +nvT +vzJ +uoA +uoA +uoA +uoA +uoA +ceN +tNj +lvz +fHq +whO +cqk +tdq +cqk +cqk +ceN +ceN +daw +daw +daw +daw +daw +daw +daw +daw +lFN +fHq +fHq +ppE +taq +eXy +kiw +gLI +daK +ppE +cxr +cmh +dfl +uxg +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(113,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +sbr +ttL +xcq +rfa +rfa +vdh +oPi +uli +vWK +lYy +lNg +aOn +bia +sNS +iIc +fHq +whO +mGJ +uoA +uoA +dII +wxL +wxL +wxL +wxL +wxL +kzO +uoA +uoA +uoA +uoA +uoA +uoA +uoA +ceN +ceN +lvz +fHq +whO +cqk +cqk +cqk +cqk +ceN +ceN +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +lFN +fHq +fHq +ppE +tyI +pOB +brq +jWo +fBT +ppE +cxr +cmh +dfl +fvM +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(114,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +sbr +ttL +mfZ +rfa +rfa +vdh +eVe +dof +irG +tKQ +lmE +uCK +ryk +mGd +iIc +fHq +whO +mGJ +uoA +uoA +uoA +opD +opD +opD +opD +opD +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +ceN +tNj +lvz +fHq +whO +cqk +cqk +cqk +cqk +tNj +ceN +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +lFN +fHq +fHq +ppE +duQ +xoo +eSs +dcU +aJd +ppE +cxr +cmh +dfl +iRu +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(115,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +sbr +ttL +mfZ +rfa +rfa +vdh +vdh +tRV +kga +owj +vdh +vdh +jmz +ozA +nvT +pSA +whO +mGJ +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +ceN +tNj +lvz +fHq +whO +cqk +cqk +cqk +cqk +tNj +ceN +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +lFN +fHq +fHq +ppE +ppE +ppE +ppE +izi +toC +ppE +aSu +cmh +dfl +uxg +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(116,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +sbr +ttL +ttL +rfa +rfa +vdh +vdh +vdh +vdh +vdh +vdh +vdh +jqG +mOa +iIc +fHq +whO +mGJ +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +ceN +ceN +lvz +fHq +whO +cqk +cqk +cqk +cqk +tNj +ceN +uoA +uoA +uoA +uoA +uoA +uoA +uoA +uoA +lFN +fHq +prX +ppE +lzi +tUC +mbh +kYo +kHF +ppE +xOR +xsl +jhh +uxg +kKR +eFO +xsf +gSd +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(117,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +soS +sbr +sbr +ttL +rfa +rfa +vmR +hLe +sPX +jnJ +qXQ +qXQ +vHm +xcX +pDj +iIc +fHq +whO +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +mGJ +ceN +cqk +lvz +fHq +whO +cqk +cqk +cqk +cqk +ceN +ceN +daw +daw +daw +daw +daw +daw +daw +daw +lFN +fHq +fHq +ppE +uZh +doj +xFK +iwk +hgz +ppE +qRN +bWf +gxM +uib +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(118,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +idA +tXe +sbr +sbr +ttL +rfa +rfa +kEC +xLV +wjg +vYV +qME +qME +mbu +cag +anf +iIc +fHq +wSp +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +tlF +fHq +jVp +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +pKd +eIY +fHq +fHq +ppE +ppE +ppE +ppE +bDU +kHF +ppE +qRN +sgw +aoH +kKR +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(119,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +sbr +sbr +ttL +ttL +ttL +ttL +lLH +qpn +gsg +fzA +yen +yen +kIR +lAv +nvT +fHq +fHq +msv +fHq +fHq +fHq +fHq +fHq +fHq +fHq +msv +fHq +fHq +fHq +fHq +fHq +fHq +msv +fHq +fHq +fHq +obE +obE +obE +fHq +fHq +fHq +fHq +msv +fHq +fHq +fHq +fHq +msv +fHq +fHq +fHq +msv +fHq +fHq +fHq +ppE +lzi +tUC +vlb +kYo +kHF +ppE +qRN +sgw +kKR +kKR +eFO +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(120,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +sbr +sbr +sbr +sbr +ttL +wYN +fRz +hjx +qsg +cTV +blM +pVF +bby +aZC +nvT +nvT +bJM +nvT +ogT +nvT +bJM +bJM +bJM +bJM +nvT +nvT +nvT +bJM +bJM +bJM +bJM +nvT +nvT +nvT +bJM +bJM +nvT +ogT +nvT +bJM +bJM +bJM +nvT +nvT +nvT +bJM +bJM +nvT +nvT +nvT +bJM +bJM +nvT +fHq +fHq +fHq +ppE +uZh +doj +rSp +iwk +hgz +ppE +ulM +gki +kKR +eFO +eFO +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(121,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +sbr +sbr +sbr +ttL +mNF +bBr +xOY +ptT +qEQ +bLZ +wjg +kXu +gZK +urz +vGI +vGI +vGI +pIA +vGI +vGI +vGI +vGI +vGI +vGI +urz +vGI +vGI +vGI +vGI +vGI +vGI +abM +uOV +uOV +oCW +uOV +uOV +cge +uOV +eon +atp +uOV +naJ +uOV +ovB +uOV +atp +cge +uOV +isx +qOy +nvT +bJM +ogT +bJM +ppE +ppE +ppE +ppE +rpv +kHF +ppE +qRN +sgw +kKR +kKR +eFO +mzp +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(122,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +tXe +sbr +sbr +sbr +ttL +dyd +sRw +vrX +fqU +pKv +vJD +iVR +jAJ +gWi +wwf +jYu +jYu +jYu +mfP +aTn +aTn +aTn +aTn +aTn +aTn +noY +aTn +sNN +aTn +buZ +aTn +aTn +noY +mHe +mEt +fIN +mHe +mHe +oyp +mHe +kGH +mHe +mEt +oyp +mHe +xDT +vsL +hGN +uco +egb +khA +vTs +aoH +aoH +aoH +vem +ppE +szW +tUC +uzI +kYo +kHF +ppE +qRN +sgw +iLJ +kKR +eFO +tXe +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(123,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +fKI +alZ +alZ +alZ +alZ +fTY +alZ +oYB +oYB +oYB +alZ +oYB +oYB +alZ +oYB +oYB +alZ +rPq +alZ +alZ +alZ +alZ +alZ +alZ +vPj +vPj +iVs +vPj +cfi +gtz +cfi +wFy +tEX +tEX +dii +tEX +tEX +wFy +wyH +pKK +wyH +wyH +jLt +jLt +dWg +jLt +jLt +jLt +tgq +khA +vTs +aoH +aoH +aoH +vem +ppE +uZh +doj +lHj +qHq +hgz +ppE +qRN +sgw +uib +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(124,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +fKI +alZ +woE +xvO +aiB +vKD +ekv +tsG +kNL +dMQ +bml +xtS +fAE +foM +ijE +pRK +vfj +skP +fzt +byL +gHg +cro +wZo +fBj +dyA +mfK +cGs +dHu +cfi +iNp +pCV +wFy +bqN +kMn +fej +vBB +bZT +wFy +jYc +iYE +pgb +vTJ +jLt +sPo +sEl +rKD +ahy +jLt +ydg +hVo +lBy +lcF +ppE +ppE +ppE +ppE +ppE +ppE +ppE +ebl +urR +ppE +qRN +sgw +fvM +kKR +eFO +xsf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(125,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +soS +cJc +alZ +pIl +mCa +rri +gEx +rIZ +rIZ +gab +aqW +kNL +ujy +rsS +pih +pih +pih +keU +dND +vBi +exG +aEf +xCA +lDl +fBj +gGd +cEy +rSj +eVF +cfi +dIb +wWt +bjI +piM +jFo +oRE +hSf +xsS +wFy +wBP +pwz +uHi +jDj +jLt +siF +vSn +mzk +pKa +jLt +nvy +sgw +sDG +iMg +ppE +aDM +iKb +wgm +iKb +rNG +eoi +oSw +iBT +ppE +qah +khA +iRu +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(126,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +fKI +alZ +imr +pPd +dUd +jEo +rIZ +rIZ +pIb +lJq +pNe +rIZ +vfK +wUn +wUn +hKO +gab +oYi +iIr +wNq +kBe +sNt +sNt +sNt +avo +jyW +fXB +cHg +cfi +sEj +xoB +wFy +cKy +vsJ +vWx +vsJ +wKK +wFy +kid +kid +kid +kid +jLt +bIy +iDo +vUh +mxo +jLt +rXK +pbp +xtU +fVk +ppE +wgm +wgm +pJm +dVG +sIh +bJJ +oys +hLM +ppE +vSJ +khA +iRu +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(127,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +fKI +alZ +iJh +jEE +rkW +tLz +mxP +ftD +iMS +fUh +fUh +cmb +fUh +iMS +fUh +fUh +lSZ +pYe +tlw +nkv +wIW +cro +auH +oja +vPj +qBH +amt +pYd +dml +tAp +dby +rkZ +lZV +cNp +jvK +cNp +vJA +wFy +cpQ +cpQ +cpQ +cpQ +jLt +hXZ +sjM +sjM +hXZ +jLt +fYS +sgw +aoH +tao +ppE +wgm +rit +wgm +ykI +sIh +lad +oys +ppE +ppE +vSJ +khA +iRu +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(128,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +fKI +alZ +dgO +jun +rIZ +rri +srV +qcH +pIb +iOu +pNe +rIZ +yhv +kov +kov +gUp +jFL +ybz +xeX +qjW +kFC +hXj +mqP +oja +vPj +foS +fqy +eec +cfi +cFT +cfi +wFy +aBP +aBP +cNg +aBP +aBP +wFy +cpQ +cpQ +cpQ +cpQ +jLt +bkj +tFf +tqv +bkj +jLt +rXK +sUb +oyR +oea +ppE +iXz +vwi +cDB +pJm +ppE +ppE +ppE +ppE +wXK +qRN +sgw +uib +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(129,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +fKI +alZ +wlm +mJM +rIZ +rri +tjj +qcH +rRl +rIZ +oAB +wVD +fUh +mxP +xig +scY +jFL +jFG +aiQ +hzW +dQU +oro +oja +oja +vPj +kVJ +whd +dug +cfi +bpR +atw +bzH +eTg +bwe +wji +gfS +gfS +cfi +cpQ +cpQ +cpQ +cpQ +jLt +bkj +bkj +bkj +bkj +jLt +rlt +bUb +rSn +rIw +ppE +ppE +ppE +ppE +ppE +ppE +bHJ +bHJ +wXK +dDA +sTs +sgw +bDK +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(130,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +fKI +alZ +yfx +cTs +rIZ +rri +eEw +tNn +rIZ +rIZ +rIZ +tCc +iMS +mPp +xFo +scY +jFL +jFG +aiQ +hzW +dob +alZ +alZ +alZ +vPj +vPj +cQP +tUF +cfi +usS +kpt +lmM +ucy +pXj +whv +gfS +rfZ +cfi +cfi +cfi +cfi +cfi +jLt +bkj +bkj +bkj +bkj +jLt +cuD +sgw +aoH +eSq +mlH +laV +rqW +aoH +ctB +aoH +aoH +aoH +aoH +qRN +kYh +vyF +pst +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(131,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +fKI +alZ +alZ +alZ +upr +kvL +ffd +mum +vAJ +qkq +oxi +rjN +oAB +sPn +aqW +pKV +lxK +jFG +llq +nkv +aaq +cro +aTa +rSA +alZ +vxa +tnX +hhG +gtt +yih +ofy +hGt +pGj +dVn +vAM +bUO +pmo +spg +kGC +dVR +dVR +cfi +jLt +bkj +bkj +bkj +bkj +jLt +rWi +oqv +uOV +uOV +atp +atp +ldn +slH +iSK +atp +uOV +uOV +uOV +mNr +vyF +kKR +kKR +kKR +eFO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(132,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +soS +fKI +fKI +fKI +alZ +alZ +alZ +aCo +nLq +kaU +eQk +alZ +hUQ +oSc +orf +tDW +buM +tbv +ohW +aiQ +kHZ +nUI +xCA +pzW +rSA +alZ +uGN +gFl +tTU +xEI +nEy +kFQ +xEI +nEy +kFQ +nlA +vBe +pmo +hIn +kGC +dVR +dVR +cfi +jLt +bkj +bkj +bkj +bkj +jLt +kBD +twl +mHe +mHe +mHe +mHe +oyp +xsl +rDH +mHe +mHe +mHe +mHe +sTs +kKR +kKR +eFO +eFO +eFO +xsf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +viv +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(133,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +tXe +fKI +fKI +fKI +alZ +oLN +dKd +kNU +gnE +cDy +fEj +oAc +oAc +rIZ +sZz +fIW +gmK +jeV +yaz +hIu +oro +rSA +rSA +alZ +mfr +gFl +qsl +bRm +cUR +kiZ +bRm +cUR +kiZ +voh +mPA +vxa +abB +abB +abB +abB +dnU +jLt +bkj +bkj +bkj +bkj +wcb +hOv +jwN +hOv +hOv +hOv +hOv +nga +cAC +nar +nga +rqW +gyY +rqW +kKR +kKR +eFO +eFO +tXe +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(134,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +iQn +tXe +tXe +fKI +fKI +alZ +oLN +hhD +kNU +wuO +avh +igH +neK +neK +qji +gDL +hTN +xAw +aiQ +lwU +qEp +alZ +alZ +alZ +alZ +iVJ +gFl +uTY +coE +rWV +coE +coE +emp +nEy +voh +mPA +nhq +teQ +teQ +teQ +teQ +sQY +jLt +jLt +jLt +jLt +jLt +wcb +jAr +jiI +xUC +fLb +rNX +neC +nga +bMC +hDN +nga +vgm +thl +dPq +eFO +eFO +eFO +tXe +tXe +gSd +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(135,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +iQn +tXe +fKI +fKI +alZ +alZ +alZ +fPE +dKd +cDy +fEj +oAc +oAc +wnK +qSD +wph +wph +mik +lwU +izs +cfi +aeU +cOX +cfi +cBm +fEY +wZg +meg +eYU +gGO +meg +eYU +gGO +nYO +nBH +bBv +bBv +bBv +eRE +fXm +buV +eww +sdt +sdt +ihx +cfi +wcb +vFt +lOT +xMp +ayw +xMp +iVQ +nga +qBV +pXe +nga +oXL +xyO +eFO +eFO +eFO +eFO +tXe +gYE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(136,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +fKI +fKI +fKI +alZ +lAS +dKd +cDy +fEj +oAc +jCd +wVJ +xnr +tDW +ivb +xPH +gQA +auZ +hBq +psH +gAi +gzO +ofQ +hjL +wSm +dRP +xuU +nrm +nZb +xuU +nrm +nrN +bxD +tXm +vKU +tMr +lXp +xEI +jfi +hkZ +nEy +ffv +gCM +cfi +wcb +rUE +dUF +nZL +jlK +sbV +aGc +nga +tuR +lAZ +nga +rBy +fLW +eFO +eFO +tXe +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(137,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +iQn +tXe +tXe +tXe +fKI +alZ +jWe +dKd +cDy +kIm +egz +api +vyh +nVr +prr +xpq +aIp +jBX +eep +cfi +sBO +sBO +cfi +cCx +djF +dAE +eee +gRn +gRn +elN +gRn +dJZ +vNq +uOS +kMP +fmP +fDt +lXp +xEI +kYg +xEI +nEy +wQh +gCM +cfi +wcb +wcb +wcb +nSz +aNM +jCA +aNM +qak +nga +nga +nga +itA +thl +eFO +tXe +tXe +gSd +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(138,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +iQn +soS +fKI +alZ +alZ +uJl +cDy +pSd +ndy +wJj +win +hal +xck +jyU +oJp +alZ +hvp +cfi +cfi +cfi +cfi +vDT +wZg +vxa +abB +abB +abB +abB +tnX +iQe +ndq +wgH +gfo +jll +pjt +kZC +kiZ +jwh +gIz +pjg +keQ +tYE +ihx +cfi +cfi +wcb +nSz +aVn +vFr +szN +xWT +hEe +wsy +gyY +ihc +eFO +eFO +xsf +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(139,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +fKI +fKI +alZ +alZ +alZ +cdw +arM +bEf +alZ +cdw +cdw +arM +bEf +wma +ulg +wyZ +gaG +qYN +paZ +vYY +wZg +nhq +teQ +teQ +teQ +teQ +fEY +oEl +qeK +rhZ +are +nEy +rdK +bUO +bbX +esd +xEI +tlM +xoy +sJQ +eCP +fwg +mGP +iHn +nSz +ugK +vKI +ugK +xWT +iIp +aHg +rqW +eFO +eFO +eFO +tXe +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(140,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +eLH +fKI +fKI +fKI +fKI +sCl +oNp +nmS +fKI +nmj +nmj +rKp +sDI +kqY +dBd +tBx +dus +ruP +wRD +pWo +gqV +rYz +uea +vGU +iXA +aRE +uOw +mNG +dUW +qNi +wBR +oou +rXu +jEh +xBh +oHt +xQL +cKb +seZ +xpP +nOC +nXa +dBd +epi +nSz +ikN +lpk +lgW +xWT +dPq +kQd +eFO +eFO +eFO +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(141,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +tXe +fKI +fKI +fKI +sCl +sCl +sCl +fKI +nmj +nmj +nmj +nmj +oeU +aAO +kaP +qjZ +iaX +tGS +iOj +tbY +gzu +cwp +rbg +rfI +osm +sKx +jYs +oKq +fNJ +sKx +cOZ +rfI +nwB +jEI +rnx +gzu +iOj +tGS +niN +aAO +kaP +uYl +kIq +nSz +ghv +tCD +ghv +xWT +deB +eFO +eFO +eFO +tXe +tXe +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(142,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +iQn +bAD +tXe +tXe +fKI +fKI +fKI +fKI +fKI +fKI +fKI +fKI +fKI +fKI +oeU +gLg +gLg +gLg +ubp +ubp +elL +jAd +jAd +aIY +tId +lek +rhb +epf +hXP +tac +xIY +epf +lXp +lek +lQF +aIY +jAd +jAd +kut +ubp +ubp +gLg +gLg +gLg +kIq +eyb +uYw +uYw +uYw +eFO +eFO +eFO +eFO +tXe +tXe +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(143,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +iQn +tXe +tXe +fKI +fKI +fKI +fKI +fKI +fKI +fKI +fKI +fKI +oeU +uYw +kkr +kkr +ubp +ubp +ubp +jAd +jAd +aIY +rbg +bRh +rhb +epf +raP +qnx +uCW +epf +lXp +bRh +nwB +aIY +jAd +jAd +ubp +ubp +ubp +kkr +kkr +uYw +qQR +gYU +fuc +fuc +fuc +xVJ +eFO +eFO +tXe +tXe +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(144,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +iQn +tXe +qaM +tXe +tXe +tXe +tXe +tXe +tXe +tXe +qaM +qQR +uYw +rtT +rtT +ubp +ubp +ubp +jAd +jAd +aIY +vxc +fGL +vbR +epf +raP +jjj +gec +epf +quP +fGL +pcG +aIY +jAd +jAd +ubp +ubp +ubp +rtT +rtT +rtT +tXe +tXe +rtT +rtT +rtT +tXe +qaM +tXe +tXe +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(145,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lPf +rZL +rZL +rZL +rZL +rZL +rZL +rZL +rZL +rZL +rZL +rtT +rtT +rtT +tXe +ubp +ubp +jAd +jAd +jpF +nqq +nqq +nqq +eAT +eAT +dBV +eAT +eAT +dgK +dgK +dgK +bHs +jAd +jAd +ubp +ubp +toF +rtT +rtT +rtT +rZL +rZL +rtT +rtT +rtT +rZL +rZL +rZL +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(146,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +rHO +ubp +ubp +jAd +jAd +ubp +uYw +uYw +uYw +uYw +jdW +mcP +okf +uYw +uYw +uYw +uYw +ubp +jAd +jAd +ubp +xNe +toF +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(147,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +ubp +ubp +jAd +jAd +ubp +uYw +cyU +uYw +uYw +jdW +mcP +okf +uYw +uYw +uYw +cyU +ubp +jAd +jAd +ubp +ubp +toF +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +qEj +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(148,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +idA +soS +ubp +ubp +jAd +jAd +ubp +uYw +uYw +uYw +uYw +jdW +mcP +okf +uYw +uYw +uYw +uYw +ubp +jAd +jAd +ubp +ubp +hyk +gSd +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(149,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +ubp +ubp +jAd +jAd +ubp +uYw +uYw +uYw +uYw +jdW +mcP +okf +uYw +uYw +uYw +uYw +ubp +jAd +jAd +ubp +ubp +toF +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(150,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +ubp +ubp +jAd +jAd +ubp +ubp +ubp +ubp +ubp +uaW +mcP +kjp +ubp +ubp +ubp +ubp +ubp +jAd +jAd +ubp +ubp +toF +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(151,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +toF +ubp +hwX +hwX +ubp +ubp +ubp +ubp +ubp +ubp +mcP +ubp +ubp +ubp +ubp +ubp +ubp +hwX +hwX +ubp +toF +toF +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(152,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +iQn +toF +kDC +toF +toF +kDC +toF +tLm +toF +jZI +yiX +mcP +yiX +jZI +toF +tLm +toF +kDC +toF +toF +kDC +toF +mFw +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(153,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +ftk +ftk +ftk +ftk +ftk +ftk +ftk +ftk +ftk +vjt +mcP +vjt +ftk +ftk +ftk +ftk +ftk +ftk +ftk +ftk +ftk +pTo +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(154,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +vSZ +mcP +pDa +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(155,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +vSZ +mcP +pDa +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(156,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +uTf +qQG +tkT +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(157,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(158,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +dOV +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(159,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(160,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(161,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +aYe +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(162,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(163,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(164,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +pTo +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(165,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(166,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(167,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(168,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(169,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(170,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(171,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(172,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(173,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(174,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(175,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(176,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(177,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(178,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +nop +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(179,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(180,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(181,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(182,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(183,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(184,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(185,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(186,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(187,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(188,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(189,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(190,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(191,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(192,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(193,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(194,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(195,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(196,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(197,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(198,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(199,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(200,1,2) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} + +(1,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(2,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(3,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(4,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(5,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(6,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(7,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(8,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(9,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(10,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(11,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(12,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(13,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(14,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(15,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(16,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +kkr +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(17,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +kkr +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +aCF +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(18,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +kkr +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(19,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +kkr +rtT +kkr +rtT +kkr +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(20,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +stw +stw +rtT +rtT +kkr +stw +mnx +myS +mnx +stw +kkr +rtT +rtT +stw +stw +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(21,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +stw +stw +stw +bTs +eui +bTs +stw +jGD +jGD +jGD +stw +bTs +eui +bTs +stw +stw +stw +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(22,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rpE +rtT +stw +stw +stw +jGD +jGD +jGD +stw +duA +sve +bca +stw +jGD +jGD +jGD +stw +stw +stw +rtT +rpE +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(23,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +ibG +uLo +gFU +stw +stw +sGe +eJf +jKs +qGO +sXu +iKj +iKj +iKj +sXu +vCC +qGO +qGO +hpS +stw +stw +xng +uLo +lZa +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(24,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +iij +fUR +wff +ktE +gst +rWX +cmm +cvM +dpu +siB +rGn +cmm +cmm +iQF +bLU +dGG +wXr +hAu +sZi +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(25,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +fdX +jCZ +iMi +kNR +gLu +cxT +dGG +wEw +fga +aKX +dSz +rMB +ydX +uSJ +wqy +iKj +qvJ +kNR +ucV +kPK +fdX +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(26,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +eLH +xxf +dJe +wff +pHQ +iKj +boo +tpL +iBZ +vUO +sTq +aYw +pLr +jtu +rBS +sUQ +tcJ +wXr +lNv +ciz +eLH +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(27,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +rzP +stw +stw +xGT +oaX +yfd +pQv +uBX +aJG +pqM +uRf +mnH +cwA +wue +yic +tJj +stw +stw +eCO +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(28,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +ibG +bYQ +stw +stw +dCa +uVa +vdx +tfi +cXp +uDL +stC +jKh +ddl +wIr +txc +iKj +qsX +stw +stw +kjX +lZa +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(29,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +dFT +dJe +wff +dZF +tvN +nlQ +mKh +htU +pWe +ccI +mnk +gVz +ahQ +iKj +iKj +dGG +wff +lNv +vOQ +cQb +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(30,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +okh +xtW +wff +sUW +lLf +saJ +gqT +rsF +cMe +oXJ +lFn +cYb +txc +iKj +wiF +pma +wff +tOO +bzN +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(31,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +fdX +fdX +rLI +wff +wqy +kSu +mib +kSu +omE +sGg +puE +tnY +bbZ +iKj +iKj +qaj +vZW +wff +wdk +fdX +fdX +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +kzF +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(32,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +stw +stw +vZL +cmm +cmm +cmm +fQy +sGg +pAr +aYv +foZ +cmm +cmm +cmm +sSF +stw +stw +pjb +eJO +gSd +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(33,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +stw +stw +uPp +uPp +uPp +uPp +uPp +sMd +uPp +mHL +uPp +uPp +uPp +uPp +uPp +stw +stw +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(34,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +fMJ +fMJ +ofk +mXx +aTv +oCK +ofk +cqt +coY +jIR +flr +gBT +dCG +eUz +gXD +mhi +mhi +tXe +tXe +gSd +rtT +rtT +rtT +rpE +rpE +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(35,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +tXe +fMJ +fMJ +fMJ +ofk +xwp +iFP +clH +fru +jSZ +gyH +csZ +flr +eMP +uWj +kLM +awl +mhi +mhi +mhi +tXe +atx +rtT +rtT +idA +tXe +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(36,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rlU +tXe +tXe +fMJ +fMJ +fMJ +ofk +xyV +ksr +lNU +wtH +ubm +aXS +skp +flr +wqk +uWj +kLM +dZK +jsY +mhi +mhi +tXe +tXe +gSd +rtT +idA +tXe +bAD +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(37,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +poX +rpE +rlU +tXe +tXe +fMJ +fMJ +fMJ +mUL +mUL +mUL +mUL +mUL +mUL +nUA +rVT +kEJ +flr +eMP +uWj +kLM +awl +jsY +mhi +mhi +mhi +tXe +atx +rpE +rlU +tXe +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(38,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +bAD +lTE +qMX +bAw +tXe +eLH +fMJ +fMJ +cOm +mUL +uzD +csw +cGF +vZx +nrk +xCd +twq +hbi +flr +wqk +uWj +kLM +dZK +jsY +qLI +mhi +mhi +tXe +tXe +tXe +bAw +tXe +tXe +wvg +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(39,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +fMJ +etT +eSe +eSe +eSe +eSe +eSe +dGY +gQF +cVG +qZm +afn +ltU +mUL +lxl +tzK +lxl +jsY +buf +hKd +tjZ +biJ +jsY +jsY +mhi +mhi +mft +uxi +uxi +mft +mft +eLH +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(40,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +fMJ +fMJ +fMJ +fMJ +fMJ +lJi +jUG +mUL +xBF +nJe +dfG +oTT +xIs +ldV +qZq +oIB +flr +hdr +pom +aSY +qZL +jsY +fSq +vsh +mhi +mft +neo +neo +mft +mft +mft +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(41,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +fMJ +pbu +kYW +cOm +muB +aJb +hGd +jUG +mUL +mUL +mUL +mUL +mUL +mUL +qds +fbB +shF +jTE +wdI +xgP +sTr +hGy +oCT +oMa +aOH +mHg +cpu +pWh +lNI +cpu +cpu +mft +mft +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(42,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +fMJ +ctI +pbu +dDe +uSt +gKy +aJb +hGd +jUG +bxo +ptq +fZD +lOi +bxo +uxx +uxd +mhc +nfV +pqF +sVK +aus +aSY +uJG +jsY +mih +sQu +oMa +uJe +lrH +oex +iUA +cpu +mft +mft +mft +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(43,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +fMJ +bCl +puK +lra +gtG +esn +uSt +aJb +idK +jUG +bxo +jVP +lME +qGV +bxo +eBD +kbq +dNk +cgl +jsY +uwx +aus +lWI +ygU +jsY +oZL +mxc +oqx +cpu +efB +fRG +hGC +cpu +cpu +mft +mft +mft +mft +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(44,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +fMJ +sOO +uSt +uSt +esn +esn +esn +uSt +wcs +uSt +jUG +bxo +wKs +iYR +jme +bxo +xcU +rUK +onI +tri +jsY +nDP +nuQ +qbg +wZz +jsY +oZL +sgZ +oqx +cpu +cpu +osL +cpu +cpu +cpu +cpu +mft +mft +mft +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(45,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +fMJ +sOO +dEI +uSt +wot +wot +wot +wot +wot +wot +cwv +jUG +bxo +bxo +vEU +bxo +bxo +yia +jOL +tnS +nRw +ngK +ngK +ngK +ngK +ngK +ngK +ngK +ngK +ngK +cpu +ntv +rZU +bST +rFS +iqg +cpu +cpu +mft +mft +mft +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(46,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +fMJ +gSe +uSt +uSt +bJP +wot +xgS +qCA +eAU +lFe +wot +lJi +jUG +bxo +tuF +rRa +kHY +bxo +dps +bci +icR +sCm +pWi +jkR +jkR +jkR +jkR +jkR +jkR +sDs +omy +cpu +epk +jnD +dZA +vEe +vEe +qBD +cpu +mft +mft +mft +mft +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(47,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +fMJ +tcB +uSt +esn +wnO +wot +wot +gop +okK +qvc +qjC +wot +lJi +jIs +bNH +phR +bFd +qqa +bxo +grL +jOL +vpm +qsn +ngK +gZb +gZb +jCp +uXj +pxP +jkR +oHY +ngK +cpu +skA +oTG +vEe +rWt +vEe +vdZ +cpu +mft +mft +mft +mft +rHM +rpE +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(48,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +uSt +esn +uSt +hip +cGi +wot +jyh +tbO +hYl +uPB +uAd +wot +lJi +uSt +bxo +vzz +oHC +nhE +bxo +ddv +hlu +kyx +nvx +rem +rem +rem +rem +rem +wdE +jkR +oHY +ngK +cpu +nFK +mDY +vEe +vEe +vEe +mnO +cpu +kCT +kCT +njb +mft +rHM +eLH +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(49,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rNq +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +fMJ +khG +uSt +uSt +qCr +pbu +ovV +jyh +hDS +nOs +lZF +hmg +wot +aJb +wcs +bxo +bxo +bxo +bxo +bxo +ddv +vuL +oYa +vuL +rem +mBg +vcm +utW +rem +wdE +jkR +oHY +ngK +cpu +gSH +oWy +oNF +trz +trz +trz +euo +qap +fXQ +qap +mft +rHM +rHM +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(50,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +fuL +vxP +uSt +uSt +aJb +aJb +wot +wot +tiD +mUm +jyh +jGZ +wot +pJZ +uSt +gml +ddv +fdR +vBC +qxD +xFL +qlD +kyx +oIB +tOU +eHb +fOB +coD +rem +ngK +ivl +ngK +ngK +cpu +cpu +cpu +cpu +cpu +cpu +cpu +cpu +cXm +cXm +nJn +mft +rHM +rHM +xsf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(51,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +fMJ +aJb +aJb +wcs +aJb +xMO +dhI +aJb +aJb +aJb +mnN +aJb +aJb +qzh +esn +uSt +uXY +knb +rDR +enM +cFx +oXp +pHK +jtf +kha +rlQ +toT +vAk +xep +svX +luT +oob +ngK +ngK +ngK +ngK +ngK +ngK +ngK +ngK +ngK +ngK +lYm +uod +dzP +rHM +rHM +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(52,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +gua +uSt +odm +uSt +xsa +pbu +xsa +uSt +sFc +qId +esn +esn +wcs +uSt +esn +uSt +iRg +sCm +sCm +sCm +uAY +sCf +dbw +ewF +rem +uxy +fOB +kFn +rem +udc +wAS +fTU +gmM +lYx +jkR +jkR +oHY +uZL +ums +ngK +fxb +jkR +jkR +jkR +nqW +rHM +rHM +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(53,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +gCD +uSt +uSt +uSt +kcA +odv +wJK +tCx +wru +aVZ +esn +esn +aJb +afc +niH +afc +ddv +kuI +sCm +iWM +xFL +qlD +kyx +wep +rem +pMV +fpI +kHk +rem +tXZ +tnl +fJD +lJY +aRx +lTY +jkR +jkR +jkR +jkR +ngK +ngK +aSV +jkR +gPh +uXj +rHM +rHM +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(54,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +aJb +wcs +aJb +bTO +trA +jBO +bTO +fht +uSt +uSt +uSt +uvK +uIL +uIL +uIL +uIL +uIL +uIL +nhX +uIL +uIL +vuL +oYa +vuL +fJD +gha +une +tOU +fJD +xkE +vZO +fJD +fJD +fJD +fJD +fJD +wEn +jkR +tjw +ngK +dFn +jkR +jkR +tKa +uzm +rHM +rHM +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(55,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +nDi +uSt +qCr +bTO +ofL +wcU +bTO +fht +uDN +sFR +pup +phJ +uIL +eZp +jFr +yiN +fMR +uGI +uGI +kPL +uIL +ijO +kyx +dyK +fJD +meH +meH +meH +meH +meH +meH +meH +meH +meH +meH +fJD +xYc +jkR +vbm +ngK +dFn +jkR +jkR +grp +iBH +rHM +rHM +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(56,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +bUP +esn +qCr +bTO +tfE +fFi +bTO +fht +gMt +bek +ocH +uSt +uIL +xSp +vnn +pQG +hbz +uAB +clT +lUe +rSg +jOL +rCI +kEJ +fJD +meH +meH +meH +meH +meH +meH +meH +meH +meH +meH +fJD +ngK +hvO +ngK +ngK +iDP +jkR +jkR +inI +nNX +rHM +rHM +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(57,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +iGE +esn +wns +bTO +iyi +daZ +bTO +sSe +uSt +uSt +uSt +uSt +uIL +haz +vnn +pQG +duT +jOC +hpd +dua +rSg +rUK +woo +qYq +fJD +meH +meH +meH +meH +meH +meH +meH +meH +meH +meH +fJD +dWn +jkR +rdH +ngK +pFy +jkR +jkR +inI +iBH +rHM +rHM +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(58,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +fMJ +fMJ +bsU +uSt +qCr +bTO +rcp +sKW +bTO +fht +tPs +sFR +vRh +uSt +bcJ +sKu +vnn +pQG +fMR +uGI +hpd +bEX +uIL +cJQ +rCI +cgl +fJD +meH +meH +meH +meH +meH +meH +meH +meH +meH +meH +fJD +hHQ +jkR +wKI +ngK +ngK +hvO +ngK +ngK +ngK +rHM +rHM +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(59,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +jQy +uSt +qCr +bTO +kYw +rOi +bTO +fht +uhR +dCM +rzH +uSt +uIL +dvA +bpD +phx +jcL +rDu +gEd +bMY +rSg +jOL +rCI +kEJ +fJD +meH +meH +meH +meH +meH +meH +meH +meH +meH +meH +fJD +pFy +jkR +jkR +jkR +jkR +jkR +bFE +xYc +xYc +rHM +rHM +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(60,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fMJ +fMJ +aJb +wcs +aJb +bTO +rFX +dZm +bTO +poV +aJb +aJb +aJb +xUT +uIL +wTv +vnn +pQG +pfT +xEJ +nQs +lUe +rSg +xCd +pdu +hbi +fJD +meH +meH +meH +meH +meH +meH +meH +meH +meH +meH +fJD +lzj +jkR +jkR +jkR +oQx +lPo +oRP +xYc +vZS +rHM +rHM +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(61,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +rpE +fMJ +fMJ +fgI +uSt +esn +ukw +uFc +lGQ +aJb +nkf +hMi +kxg +peY +uSt +uIL +mmZ +gRa +pxq +fMR +uGI +uTA +mzc +uIL +vuL +oYa +vuL +fJD +meH +meH +meH +meH +meH +meH +meH +meH +meH +meH +fJD +jkR +jkR +jkR +vcn +ngK +ngK +ngK +ngK +ngK +rHM +rHM +xsf +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(62,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +fMJ +fMJ +fgI +uSt +uSt +esn +rvc +rig +xUT +cWv +hPX +hPX +kzZ +uSt +uIL +ims +sBY +ims +ims +ims +vOs +ims +ims +efa +pdu +bGK +fJD +meH +meH +meH +meH +meH +meH +meH +meH +meH +meH +fJD +axW +snS +vcv +jkR +ngK +oKR +wwR +gXv +uWM +rHM +rHM +tXe +tXe +uWK +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(63,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +eLH +fMJ +fMJ +aJb +wcs +aJb +dAy +mOZ +vMg +aJb +mZE +cvh +qmA +iHw +esn +wOq +ims +oXz +vMY +hFC +wzD +gND +mpT +ims +eBw +kiK +eZQ +fJD +meH +meH +meH +meH +meH +meH +meH +meH +meH +meH +fJD +qDI +snS +okl +jkR +xIg +gHN +uod +uod +lqH +rHM +rHM +eLH +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(64,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +soS +fMJ +fMJ +nba +esn +aJb +aJb +aJb +meX +aJb +aJb +ghg +fht +uSt +esn +esn +jAV +ylF +ylF +sra +akR +kaH +bVl +uCl +ldV +eTu +sIS +fJD +meH +meH +meH +meH +meH +meH +meH +meH +meH +meH +fJD +ngK +ngK +ngK +ivl +ngK +ngK +ngK +rHM +rHM +rHM +rHM +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(65,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +tXe +fMJ +fMJ +ctI +uSt +slo +aJb +pOA +qBe +lJo +aJb +aJb +sKM +aJb +aJb +aJb +ims +cgu +uQl +kcx +kMK +kMK +hhy +ims +odF +kiK +peQ +fJD +fJD +fJD +fJD +fJD +fJD +fJD +fJD +fJD +fJD +fJD +fJD +jHd +jHd +sJC +jkR +sDs +iBH +rHM +rHM +rHM +rHM +sgo +tXe +gYE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(66,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +tXe +fMJ +fMJ +fMJ +fMJ +fMJ +aJb +aJb +xzd +uSt +aJb +mNv +fht +uSt +otU +sYN +ims +ims +ims +aGH +qzT +elU +mMN +ims +jgM +woo +hnq +ifz +xrv +pdX +pSa +wYI +ifz +vRw +dlO +ifz +qYj +nmf +ifz +izh +uod +uod +uod +uod +tnR +rHM +ozH +iQc +rHM +dmA +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(67,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +tXe +nZT +tQG +ofH +nvp +fMJ +gIM +jPN +mHS +wdT +wdT +bMJ +fht +uSt +oDQ +pbu +sps +ghn +ims +ims +ims +ims +ims +ims +kFW +kiK +aMq +ifz +tSW +vTC +phE +uJo +ifz +fbX +dXO +ifz +krK +oIf +ifz +xYc +xYc +btb +iVV +aiS +mSx +cOd +kkI +sVq +krT +sgo +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(68,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +tXe +mLr +cEu +wMi +wMi +qYV +nos +bka +uLa +ybW +rZc +dsm +qJR +apv +vcI +aDF +xXH +acP +acP +vaA +bCj +bCj +bCj +nXG +xvS +tsj +quD +sRo +wBq +jaJ +jgL +bXa +ifz +ifz +mrg +ifz +asc +ifz +ifz +ifz +ngK +iyx +psA +axn +jCp +rHM +ykB +tQf +rHM +dmA +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(69,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +lNM +fMJ +cMo +fcz +aTM +fMJ +ekP +esn +fpc +aJb +byc +pPK +cld +hBr +aJb +gLZ +jLI +oaI +eIo +aJb +ejy +qxe +ejy +ddv +kCS +vbG +ske +ifz +dNl +rFj +iAP +loz +sna +mwx +lsC +sna +cxM +fsz +neP +wwm +ylA +uod +psA +rHM +rHM +rHM +rHM +rHM +rHM +ujc +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(70,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +tXe +fMJ +fMJ +fMJ +fMJ +fMJ +xKr +pbu +fpc +aJb +hrb +sOd +xSy +nhx +bEp +mcA +dOR +hRu +hRu +hRu +hRu +hRu +hRu +hRu +eCH +rAg +eCH +ifz +ifz +ifz +ifz +ifz +ifz +ifz +ifz +ifz +ifz +ifz +ifz +ifz +sNi +aiS +ult +lXy +lXy +rHM +rHM +rHM +rHM +rHM +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(71,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +tXe +mWc +fOj +gkQ +gkQ +gkQ +kAQ +cHi +dTL +aJb +bPF +bPF +bPF +bPF +bPF +epl +bPF +hRu +avi +avi +avi +avi +avi +hRu +ycs +xeY +prT +cEN +dWt +ydK +asr +wle +qRx +rGK +kxI +biE +wle +nBj +qrB +eln +rLB +jkR +kdS +jBE +xPp +rHM +vgc +qSy +rHM +rHM +xsf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(72,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +soS +mWc +fOj +wcM +gWR +gkQ +gkQ +gkQ +fpc +oDQ +bPF +atV +jKQ +gUY +swf +vwH +gpy +hRu +avi +avi +avi +avi +avi +kkq +xHT +dut +nlk +rWw +nkj +ydn +iql +szv +rbh +rTs +bDs +llM +wle +kDO +tBl +eln +uma +ngK +miI +sJC +jkR +vEf +nwn +vFB +rHM +rHM +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(73,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +bAD +mWc +fOj +whl +mip +jTg +pNZ +gkQ +dUV +czH +bPF +iyp +dGJ +cqB +cqB +cYM +qVX +hRu +avi +avi +avi +avi +avi +kkq +awR +aXo +mAV +ewS +eyQ +rwU +qWk +wle +tQO +jUf +jUf +cPG +aKa +sKX +pLt +sOk +fjG +ngK +ngK +ngK +ngK +ngK +ngK +ngK +rHM +rHM +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(74,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +mWc +fOj +jdc +enG +qFr +cXG +gkQ +eCy +fEz +bPF +pcH +nxF +dnu +oGi +rVJ +uci +hRu +avi +avi +avi +avi +avi +kkq +hyf +aYz +ccj +ewS +tvF +xoc +oIi +wle +uIC +oae +oae +sYz +wle +pNC +dsX +dsX +rzi +eln +xwW +miW +sqA +dqu +aoE +eln +hva +mDw +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(75,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +tXe +mWc +fOj +wDJ +ctX +luJ +wyb +gkQ +mpq +kdv +bPF +eBY +izE +ffB +ffB +iZx +aYp +hRu +avi +avi +avi +avi +avi +hRu +bTK +fND +npU +ewS +tvF +tvF +fSx +wle +kKz +dHC +dHC +tWK +wle +oUm +cos +cos +vWk +eln +gjT +xEG +rui +oEA +dbu +fPc +qix +mDw +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(76,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +mWc +fOj +gkQ +gkQ +jNK +gkQ +gkQ +eod +kYf +bPF +meS +kMO +cqB +cqB +sJb +oVL +hRu +hRu +hRu +hRu +hRu +hRu +hRu +cQo +vSF +hof +cEN +tvF +tvF +tvF +wle +wle +wle +wle +wle +wle +eln +sMR +dPn +oOc +pzl +oZl +oZl +stp +jay +mOt +pKn +qix +mDw +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(77,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +aRt +mOf +wtn +rqt +hhN +rWp +hlL +mQg +kYf +wYl +sqv +xek +eOx +afk +ycn +vUZ +vTf +gZX +mCr +fpp +nNt +xgA +bPF +kQK +hKx +qcO +qOv +qOv +qOv +qOv +qOv +qOv +irx +stz +cxQ +irx +eln +wmq +oeG +kKv +eln +dJd +xbx +qxX +dqu +uIO +eln +hva +mDw +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(78,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +aRt +mOf +qVP +hPP +mAx +fLa +dsk +lSq +nqy +qnp +cNF +fXs +ahn +ahn +sdx +xKg +xKg +xKg +xKg +jEL +twN +lrl +bEM +jDk +aYz +cGV +qOv +rWy +stz +cxQ +ocE +qOv +iwY +xGi +qQC +iwY +eln +xjt +lOU +pLq +eln +eln +eln +eln +eln +eln +eln +hva +hva +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(79,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +aRt +mOf +mWg +ehe +qiW +ehe +qli +pBC +kYf +bPF +vXT +aLi +gUY +gUY +vcQ +beq +aut +dNj +aut +jqP +gmF +nJr +bPF +xZE +aYz +ccj +qOv +rzd +kzL +vQv +lnO +qOv +hnk +oil +kya +nsf +eln +ryz +lOU +aQq +qPv +qsD +vxf +twO +dzc +pcb +weB +hva +hva +xsf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(80,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +soS +aRt +mOf +wmY +eVy +eup +xTt +qli +awX +ife +bPF +bPF +gse +gse +gse +gse +bPF +icw +tJC +tJC +bPF +rvh +bPF +bPF +clp +pFH +gav +qOv +chf +dSQ +wCL +qgf +qOv +ouu +bLS +uFT +mZx +eln +rBZ +lOU +pLq +hRT +soM +kcR +rLC +mIg +bPH +weB +hva +hva +tXe +gSd +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(81,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +aRt +mOf +mOf +mOf +xHE +vEg +nmT +jid +oKN +kYf +wzy +wzy +wzy +wzy +pMh +xAd +hlX +hlX +hlX +wVv +lNX +wCv +fny +jsU +sPT +ccj +qOv +cUI +crr +tKT +pjf +qOv +aPw +iqb +uFT +qja +eln +vco +oOm +pLq +mKG +rfE +nOy +lod +vJE +weB +weB +hva +thR +uLo +lZa +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(82,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +xye +uLo +rtg +aRt +aRt +mOf +kYf +kYf +mZF +qJr +kYf +kYf +wzy +wzy +wzy +wzy +pMh +qRF +gZv +gZv +usx +hSc +uMU +vku +fny +kpR +qUq +ccj +hgw +jfq +crr +eRU +tCs +qOv +qOv +qOv +fpj +qOv +eln +mCP +pnF +pLq +eln +eln +eln +eln +eln +eln +hva +hva +xMx +gYE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(83,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +idA +tXe +qUr +jXo +pop +xvB +lfV +fKC +ltH +pex +qmH +jWt +wzy +wzy +wzy +wzy +pMh +hcQ +hEH +pgQ +vvR +rZr +epn +hzl +qfG +tnn +mEr +eae +qOv +qOv +eDD +qOv +qOv +qOv +liA +pLV +jOh +xhp +kQH +oCm +faN +gKW +mfA +eMC +cQL +qMA +oXn +sSX +fQf +klO +mCt +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(84,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rdO +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +hLJ +kAq +xlf +pUM +tZt +gHq +tli +aUF +tSQ +jWt +wzy +wzy +wzy +wzy +pMh +yhP +gLh +vab +oWW +xwV +mFO +pJG +qfG +tnn +obG +kGL +qOv +eTa +snI +tGm +gwh +oOX +djU +oFa +efb +rfX +qLC +tIn +oKz +vUB +aGT +lDe +oNn +bOL +lAy +qGg +mXP +eoO +fRR +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(85,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +hLJ +kAq +xlf +syI +exK +wNK +vCq +igT +dQs +jWt +wzy +wzy +wzy +pMh +pMh +isY +jbN +bLw +ebz +rZr +wnY +eYQ +qfG +tnn +kWT +uXH +juZ +fJJ +sNa +tKT +tKT +vUf +bgZ +tKT +rsi +ruy +eln +kGT +mTF +mfA +mfA +fCI +gvU +ghT +cdU +xJd +eoO +qAW +vOQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(86,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +hLJ +kAq +xlf +fGp +exK +ucx +ucx +igT +hlF +pRi +wzy +wzy +wzy +pMh +pMh +hdq +jor +cyM +vvR +rZr +gZv +dWi +fny +peo +aYz +aJI +qOv +aIS +xsC +fAp +hrO +knC +eKL +tKT +rsi +jyD +kQH +pdl +uIl +mfA +kDQ +iMW +oOH +owN +waO +xJd +eoO +kGl +vOQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(87,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +hLJ +kAq +xlf +fGp +exK +ucx +ucx +igT +cEd +pRi +hsw +hsw +hsw +hsw +pAJ +qXo +gZv +gZv +vvR +rZr +gZv +vnD +qfG +wiH +aXo +gav +qOv +qXp +yfa +jqb +wqN +qAh +kCN +joT +ekH +dyD +kQH +pdl +tto +mfA +bwM +xSr +dWp +and +wFo +xJd +eoO +eoO +clZ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(88,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +huG +kAq +pop +gQG +exK +mMs +mMs +dzV +pvC +pRi +psS +fRk +vkK +hsw +ntz +cxF +gZv +gZv +dVj +gwG +qci +uLu +oHF +pZF +qLd +ccj +pdJ +qOv +cBv +qOv +qOv +qOv +qOv +qOv +hyS +qOv +eln +wgr +bYX +mfA +qVV +pNV +lnE +waS +uBi +sSX +sSX +fvJ +clZ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(89,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +hLJ +kAq +xlf +fGp +exK +ucx +ucx +aRr +bAE +pRi +eMr +dIn +aRn +hsw +eHm +eQR +gZv +gZv +oqy +thy +eMR +uWA +gWK +qeZ +cMN +ccj +qOv +xMK +bkU +taX +lbL +qOv +qQM +ldC +crr +mgz +nVz +nVz +aFR +mfA +mfA +mfA +mfA +mfA +mfA +oyl +sSX +ePH +vOQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(90,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +hLJ +kAq +xlf +fGp +exK +ucx +ucx +igT +sbq +pRi +wlW +drH +hsw +hsw +jPb +vUL +oTF +orC +ruj +gZv +vvR +sRy +fny +tnn +sPT +dji +qOv +oGZ +bkU +mFy +oQH +qOv +ves +lWg +crr +gIe +nVz +tNN +rIt +vwm +riQ +xGv +moY +qtr +xuf +bxQ +uWu +uYw +vOQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(91,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +rpE +rpE +poX +rpE +rpE +rpE +rpE +poX +tXe +hLJ +kAq +xlf +syI +exK +jxW +mAI +igT +dQs +pRi +yiE +xdx +fny +gXo +jPb +vUL +saX +sDP +pSm +rAm +ebz +dJP +fny +wLl +aYz +lYP +qOv +hyP +tOC +bTg +vtT +qOv +tPf +tGK +ryJ +eCs +nVz +pxz +iYx +oNm +rcc +xCJ +iHy +mtW +beu +bxQ +uWu +uYw +vOQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(92,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +tXe +tXe +tXe +iPB +tXe +tXe +tXe +tXe +iPB +tXe +hLJ +dRQ +vQj +pHO +sYe +xYm +glA +uNw +xik +dSr +rUI +bWQ +fny +eVd +jPb +qfC +igY +yeh +paF +uXq +uew +llm +fny +tTs +tpK +ccj +qOv +lIf +jLN +szH +lIf +qOv +dWr +vWL +ldT +dWr +nVz +yas +egL +yka +nNi +dQG +cnj +xoP +xet +bxQ +uWu +uYw +vOQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(93,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +axP +oxE +lJx +oxE +oxE +oxE +oxE +lJx +oxE +qQz +nkV +pop +enp +bqX +xVS +czV +haa +lPF +wLw +bRx +bKH +xUw +xUw +xUw +xUw +xUw +xUw +xUw +oBk +fbk +fny +fny +lqj +xTK +hww +qOv +pIX +oAb +ato +pIX +qOv +wXk +oAb +ato +wXk +nVz +nyA +tXg +iYx +xrC +iDK +nVz +nVz +nVz +bxQ +uWu +uYw +voL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(94,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +wqe +qIp +utn +utn +dDa +dDa +utn +dDa +dDa +utn +utn +utn +pop +oBR +bib +rPJ +rPJ +atr +mwf +fWP +pmW +phW +xUw +qNm +nbT +byY +kFs +lDW +xUw +hZc +sWy +wgR +fny +txi +mzv +txi +qOv +qOv +qOv +qOv +qOv +qOv +qOv +qOv +qOv +nVz +nVz +nVz +nVz +iYx +siU +ylq +vHP +pDI +gFh +bxQ +uWu +nzW +nzW +nzW +nzW +nzW +nzW +nzW +nzW +nzW +nzW +nzW +nzW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(95,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +xxf +utn +utn +utn +qWx +qWx +utn +qWx +qWx +utn +utn +utn +utn +dBU +dBU +dBU +dBU +dBU +dBU +fcI +tRN +bjs +xUw +fFR +lzW +aGk +adM +aqL +xUw +qvO +rYT +crD +fny +mDD +xPa +lsk +hOF +kRm +shX +mUk +kte +xjV +xDJ +cns +xDJ +nVz +wZI +uHj +faF +xtD +qJP +ezy +nVz +nVz +nVz +bxQ +uWu +nzW +nzW +nzW +nzW +nzW +vEW +vEW +vEW +vEW +vEW +vEW +nzW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(96,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +mKZ +utn +utn +nlx +bFk +oie +utn +jHG +jRK +kkL +gHC +oQB +dBm +dBU +epQ +epQ +epQ +xar +tnk +cto +qIk +iDf +xUw +lBz +dXe +kAE +vKa +sxz +xUw +pXM +yfl +jnK +fny +tmL +aDt +sxq +gqF +xft +dfL +lsM +sur +xjV +jMS +ddw +jMS +nVz +nVz +nVz +nVz +nVz +aun +nVz +nVz +fDr +nZF +fWF +yew +dDz +qxv +nnJ +oUH +gRr +hCt +qay +hCt +glv +xMA +hgg +ijM +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(97,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +ibG +eME +utn +utn +vNv +jQz +eGe +swA +jJw +nmP +grt +qwC +jHq +ycK +dBU +rLy +oyB +nDj +nlS +dBU +dEy +tUB +bKj +xUw +xUw +xUw +xUw +syj +xUw +xUw +oBk +oBk +oBk +fny +otj +tuG +rMj +smZ +bDI +lcn +vmB +tOl +bVA +mtC +mtC +mtC +oGo +mtC +mtC +vog +gql +mtC +oGo +mtC +xOf +gVV +fWF +aFq +uxB +cam +kHe +dOS +nCE +bbO +xMA +nKz +dkl +xMA +hgg +ijM +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(98,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +tXe +hLJ +utn +utn +utn +atf +atf +utn +qMl +kvF +ejr +ejr +ejr +ejr +dBU +nsU +sIA +nUE +ewZ +ksC +dAl +nlm +xmH +xpQ +lPl +bSx +mNg +laG +wWp +eII +fPJ +xws +ydf +vke +sTZ +gDH +lhc +gqF +xpV +aoN +leE +bjU +xjV +qRO +hEf +qRO +qRO +evJ +qRO +rWz +kfu +tMl +vau +dwq +bii +cVq +fWF +lwn +yib +hBS +vvO +ufg +vgl +hCt +bAZ +hCt +adA +xMA +hgg +ijM +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(99,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +hLJ +uaW +kCD +ukG +cWK +oie +utn +vCG +gvQ +oFf +arm +kPX +npK +dBU +bsQ +dWO +xlN +lEK +dBU +aVO +ycv +cAK +ieu +xkH +iRm +ptb +sWf +xOe +wej +xVc +pZV +eRD +eEO +tPx +nKb +uSV +hOF +izz +kyj +qdS +aYb +jPi +lSx +lSx +lSx +lSx +lSx +lSx +lSx +lSx +lSx +lSx +agO +pqD +agO +fWF +fsI +kBs +vsd +dOS +dOS +uGK +cgH +bzA +cgH +cgH +cgH +vEW +nzW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(100,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +iJM +tLU +uaW +kCD +huY +xAG +eEA +swA +gFe +veC +vgV +miY +pyz +grI +dBU +bsQ +dWO +xlN +lEK +dBU +eIl +wzq +lQv +dFc +dFc +dFc +dFc +dFc +dFc +dFc +dFc +dFc +hQn +hQn +vsX +qit +vsX +lSx +lSx +lSx +lSx +lSx +lSx +sKC +cgR +sXB +sPB +weC +aNW +aNW +aNW +lkg +lSx +hha +hFc +njl +fWF +aFq +ofG +jBS +nXy +tHW +klu +hwv +fzr +foH +urq +urq +gYd +gYd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(101,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +jDS +utn +utn +utn +utn +atf +atf +utn +vWF +oaO +oFf +rye +qsi +wyn +dBU +jeK +dWO +xlN +lEK +dBU +eIl +tUB +aJI +dFc +euX +aWI +mRe +aaB +xWd +cKo +uBI +dFc +uxP +oow +rkT +bwJ +rtl +lSx +rtD +cqC +dte +xaM +ipX +tTM +jzA +lkt +ezH +fVs +fVs +fVs +fVs +kTu +aau +doN +bii +aeS +fWF +vbs +oGG +jdX +cDv +bXg +mDG +hwv +lTP +tEV +idu +ibF +gYd +gYd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(102,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +pZz +esF +rqg +sBz +rOZ +rOI +sIq +dMy +prO +kpb +oFf +plT +qXM +aKj +dBU +bsQ +dWO +xlN +lEK +dBU +wbr +kYd +rvf +dFc +xRM +cmR +bcY +tHa +iWB +oDb +gfp +jyb +oOr +oOr +rkB +boz +vWm +lSx +cho +aVe +oAm +yiR +hql +oAm +tNf +wNs +hjg +xmj +xmj +xmj +xmj +tKH +aau +doN +hFc +jzN +fWF +fWF +fWF +fWF +bsB +lvD +ffh +ftn +lAe +nPb +nPb +qbO +gYd +gYd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(103,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +pzM +sup +kCD +pLg +yjU +itC +aXW +sNM +jTN +lfP +ejr +ejr +ejr +ejr +dBU +xwl +wQk +oVN +sKf +dBU +whn +tUB +kXS +jNk +ktu +rGu +xuk +tCJ +vfs +ina +knd +lJN +gfV +ofW +owU +rhD +mSf +lSx +cZT +lnC +aVe +ygl +hql +hqv +aCc +lVm +uEh +uEh +uEh +uEh +uEh +uEh +aau +aso +mzF +kRL +caR +utX +sQQ +eSL +jDv +qhs +hbv +hwv +ptC +gQV +gQV +tJM +gYd +gYd +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(104,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nrg +uaW +kCD +pLg +cXs +nYn +jdm +dSS +cxR +qhl +xXG +eqS +puM +hvh +dBU +xFc +etV +eia +uOQ +dBU +eIl +uLI +sbo +dFc +hVg +nqB +kWb +dIL +fUv +aYx +ktu +jNk +ktu +ktu +rkT +dwC +gSB +lSx +bBU +qwJ +lLY +uxa +fHe +uxa +xcx +wAU +mNs +fOF +fOF +ukQ +fOF +fOF +lSx +rJC +hFc +lgz +fWF +duF +iQy +fWF +kEE +tvG +hlO +hwv +idr +hNm +hkA +ibF +gYd +gYd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(105,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nrg +uaW +kCD +grF +sIs +uau +qLg +ffc +nJm +nzX +iqR +dLd +fZo +dVc +dBU +xFc +xFc +ano +kDh +dBU +iOx +amo +egj +dFc +dFc +dFc +pcp +vXJ +tzW +tkb +niY +dFc +kBt +blG +rkT +pxj +bvW +lSx +wYz +uxN +pnp +eLn +gKr +fVS +aKh +sAy +wRB +pik +kin +lSx +lSx +lSx +lSx +nXu +hFc +cwq +fWF +fWF +fWF +fWF +fWF +fWF +fWF +hwv +cCj +pYr +bNq +uqa +gYd +gYd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(106,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +hLJ +aCR +aCR +mHT +mHT +mHT +mHT +hBO +sSp +hBO +mHT +mHT +mHT +mHT +dBU +dBU +dBU +dBU +dBU +dBU +rjG +jMh +fhm +lNl +hxm +dFc +dFc +yfb +dFc +dFc +dFc +dFc +hQn +hQn +uVJ +pxj +ifq +lSx +mwD +cvy +eFg +pHc +mcq +sIi +xjk +kmy +rbt +fwy +rto +esl +bQZ +uSj +dLU +hKl +lih +cqV +kwI +cfK +pch +qyQ +lCC +qkP +gJQ +kwI +thW +thW +thW +thW +xNQ +xNQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(107,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +hLJ +uaW +msF +rsf +aNR +skh +hBO +lHV +pSP +gjj +mmy +mHT +ahA +arC +atC +mHT +wgY +sto +tEK +pqb +gyU +mit +dRO +xGZ +bWJ +tBW +sJv +dNp +dNp +tBW +dNp +dNp +dNp +nJl +tfk +rcD +emK +lSx +ezK +vHg +eFg +uWf +uql +xTc +pnK +kTV +gpb +pbU +duJ +lSx +mNJ +qfZ +lSx +hSn +uaD +hYi +kwI +hkL +bhg +qCU +gWk +rnP +xBY +kwI +thW +lNb +uUl +qEw +pfw +vOQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(108,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +fdX +aCR +aCR +uUh +gTc +hVT +dLm +xIZ +duu +gRO +dDp +hAE +aeq +cEb +dvU +qUN +ojy +cGc +fKp +fKp +cgp +eFn +fhm +txH +rXd +szq +kcF +fjF +kfW +qPS +tfZ +nrG +dhH +eJC +gsw +cEL +mDk +lSx +ezK +bLT +lFH +bSH +hQf +lWC +fNC +xBZ +bQy +eMj +lSx +lSx +iHA +pFu +lSx +anv +uaD +ddw +kwI +icW +cxL +xql +cPv +jZO +tDj +kwI +thW +dYL +xBH +kYE +pfw +vOQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(109,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +gnW +nTz +rMc +gDr +nrb +iUN +rgQ +hBO +pbh +mtQ +qeH +gFj +bwQ +qfh +qxU +aQC +msg +yfk +krA +epy +fRq +gJt +fJR +fhm +fhm +dHF +fhm +fhm +wgY +whX +whX +whX +whX +whX +whX +egn +qit +vsX +lSx +qpr +pgN +lSx +lSx +shZ +lSx +xkF +iuK +aEM +qdz +lSx +lSx +lSx +lSx +lSx +gjJ +oin +isX +kwI +jhy +kxH +fiP +aAP +sKE +dvd +kwI +thW +nAO +sBG +vDg +pfw +vOQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(110,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +xxf +fNW +fNW +ttc +ttc +ttc +ttc +ttc +gpR +fZp +qOk +ttc +vfY +seC +otk +mHT +wgY +dwV +ryn +mkE +iDp +jEt +fhm +iAq +jXK +oBS +eVW +wgY +boT +xIJ +rNn +xIJ +boT +whX +pyf +cEL +rtl +lSx +ezK +cvC +lSx +iXS +sqq +lSx +mnz +llb +szj +cwy +lSx +qzl +hAz +uEn +aXq +vuW +hUN +dGl +kwI +kwI +kwI +kwI +ntA +mYq +kwI +kwI +thW +byW +fMs +xNQ +xNQ +xNQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(111,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +wvG +iIF +fNW +fNW +qvY +dlX +aAz +yjh +mLn +hjn +xRA +ttc +ttc +ttc +ttc +wgY +gpA +pPu +gbu +rOv +uWh +wPq +fhm +uni +lwt +mcI +lIy +wgY +cPg +eig +nHi +eig +gwZ +whX +wgN +fdF +bQg +lSx +ezK +cvC +lSx +qHf +sxS +lSx +lSx +lSx +lSx +lSx +lSx +cIj +vhE +bSo +pVx +nEo +sXD +aIL +thW +jVv +jRw +tQm +cmw +fOL +xce +xxo +xxl +cAl +lCc +qsA +xNQ +cJX +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(112,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +fdX +mKZ +fNW +fNW +hYN +cOY +hvU +reS +lvs +vaT +qih +dfT +mTY +xkR +ttc +wgY +fhm +uEp +aBp +fhm +fhm +fhm +wgY +wgY +wgY +wgY +wgY +wgY +mRM +whX +iTv +whX +jTC +whX +jTr +fdF +bQg +lSx +lSx +lSx +lSx +sZx +lSx +lSx +rMo +fGn +rMo +bEB +qxP +ung +wuH +ozF +pVx +pje +sXD +nuC +thW +hio +sGP +qyi +pfy +cki +gCb +nVY +bMX +tXG +iGl +hsn +qdi +kcj +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(113,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +fdX +fjw +xCC +xCC +czE +mJU +eRj +cHz +rEd +hLX +wVT +oTc +amx +ore +ttc +dTZ +aAB +bVO +xSl +uRz +tvZ +whX +mRS +cOR +eNJ +tZT +rlW +qQF +ngO +cqv +sFU +fCf +sLl +whX +imM +gli +oGX +wBr +xFQ +euE +mxO +cSZ +kqA +cfP +lhv +cCF +rMo +rMo +qxP +ung +oGP +blw +pVx +qhw +sfu +krs +thW +pRA +vZY +jGW +uat +koh +haH +jCQ +mOx +hNf +uZH +oAi +vHc +vOQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(114,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +wqe +qIp +fNW +fNW +uek +nzL +rCd +rCd +rCd +yko +nBy +grv +cjH +cAm +ttc +nEx +vJS +aVj +eWT +fHP +tvZ +whX +wwT +dej +ajb +kkG +wyO +whX +jTC +whX +ueq +gqw +gfz +ucT +wgN +oqU +boM +pgv +otI +xPy +chi +bkg +nLH +cfP +lhv +qZt +qZt +tHE +qxP +ung +wlh +pVx +fPs +fPs +rPN +fPs +thW +yjb +vZY +ltO +xGD +kLF +fPb +xNQ +eQv +iIz +xNQ +xNQ +xNQ +xNQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(115,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +xxf +fNW +fNW +fNW +ttc +ttc +ttc +ttc +ttc +ttc +ttc +ttc +ttc +ttc +ttc +mHp +etK +ehT +mSi +wAE +whX +whX +wwj +daT +mRQ +qoZ +lvN +whX +boT +xIJ +liM +ont +hDW +ucT +wgN +fdF +tUE +vcq +yfH +fOT +hwZ +gIn +nLH +vTq +lhv +elP +vts +tPr +qxP +hjK +gNw +sSL +fPs +iQY +wQC +slL +thW +pSn +iqH +mRt +oqq +nit +aAt +sJE +lim +aRb +qbl +lxY +ijM +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(116,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +gnW +nDC +gTl +gTl +gTl +tQj +wcm +fpG +pXP +eYI +gPe +iVd +gNq +siT +omT +cus +pNJ +jsl +luo +thC +pzZ +rjy +sGb +wPR +wPR +pVH +rpI +vlt +whX +lLv +xIJ +hcM +ont +hDW +ucT +sIf +cEL +aDB +wBr +lwd +ljg +btf +rnI +lDM +cfP +lhv +hJw +elP +boO +qxP +qxP +umo +qxP +fPs +kpM +fUf +sfh +thW +tGr +hWW +rav +gkq +wCd +mmJ +uDG +rso +hhI +mEP +lxY +ijM +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(117,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +fdX +gTl +gTl +gTl +vhP +wcm +aXz +suL +bIT +dQH +dlV +kuu +cAa +ikK +nOW +qFc +nOW +kGD +bXv +gSk +whX +wSb +lQt +whX +whX +dKv +whX +whX +whX +whX +ucT +opE +ucT +whX +egn +qit +vsX +xbJ +xbJ +hqt +hqt +tWT +xbJ +xbJ +xbJ +xbJ +qZt +rMo +kcK +gVa +dTy +hQr +fPs +xsg +vUn +xLN +thW +sBe +hWW +rav +bQA +jxR +cyc +iyb +kJV +sKn +aRb +lxY +ijM +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(118,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +mIq +fvG +fpU +uJz +fwW +oEg +men +nGt +upY +gPe +vdU +nrK +ezv +omT +tEs +cep +ulS +oBg +tpH +tpH +tpH +tpH +tpH +tpH +bLn +cpb +sID +ljA +wsW +ovu +meE +cpb +nsT +tpH +gBo +cEL +aDB +cgE +dHa +vaD +xTZ +cKg +xfY +duG +cug +xbJ +xbJ +xbJ +xbJ +xbJ +pVx +fbD +rFq +rFq +fAO +rFq +thW +fFG +qeB +hJV +bbq +nit +vuZ +xNQ +xNQ +xNQ +xNQ +xNQ +xNQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(119,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +iQn +fdX +hLJ +uJz +gAr +wig +vqf +hsY +gAr +gPe +pLk +pLk +pLk +omT +hvF +hjo +sZF +wwN +tpH +odI +fOk +tpH +gss +tpH +sYD +cpb +ghE +cgj +ghE +mBG +tRq +iby +jsk +rAU +qVC +ngV +tUE +tOx +dYZ +iSR +kEx +hXn +yaV +dxB +lIv +avt +ckB +pUn +oeg +xbJ +qxP +uYI +rFq +bLr +sas +vXV +thW +vVo +hWW +rav +oqq +nit +aAt +fgo +lim +lim +qbl +arN +ijM +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(120,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +fdX +hLJ +uJz +aLo +oLY +wig +oEW +aLo +gPe +omT +omT +omT +omT +omT +omT +omT +hgB +tpH +aXB +kOA +hvt +xje +cfM +hNN +ffj +drr +hDl +cub +gZm +drr +miM +sAP +cfM +gBo +fdF +hyz +xbJ +jBc +rLE +abI +hXn +pGe +aZJ +rcW +aSH +xtM +sor +urv +xbJ +qxP +uYI +rFq +uhJ +boN +xEQ +thW +sBe +hWW +rav +gkq +nHz +waX +lYK +mIs +rPO +mEP +arN +ijM +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(121,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aAY +gTl +gTl +gPe +koH +wKF +nUm +bdT +gPe +qtw +rWg +tqy +wwV +lKH +mBr +omT +rwA +tpH +qiu +mjE +iue +xMu +jfc +tIg +xin +jED +dYa +jED +rrc +jED +xmm +pYI +tDD +jME +rtE +dqe +eSF +tms +mAN +jQk +gjX +npC +blA +lnR +ugw +muw +uQR +sPq +xbJ +aQd +uYI +rFq +vdA +vNl +bOZ +thW +fFG +qeB +fgP +bQA +vzp +eDk +fgo +mvM +uFL +aRb +arN +ijM +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(122,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hUv +dxZ +dxZ +omT +omT +omT +omT +vwy +omT +cRD +rWg +iAT +vJS +rbD +dCQ +omT +rwA +tpH +tbT +tVV +pbl +ovQ +cfM +mzt +vXE +erj +oEm +qzj +wyE +pRZ +nVa +tHv +tpH +ePE +axY +wUD +xbJ +xbJ +jUA +rIX +kAL +wuT +kAL +etE +avt +tIN +gKH +reI +xbJ +aUf +heX +dQM +dQM +gCO +dQM +dQM +sBe +hWW +hzb +bbq +vzp +mmh +xNQ +xNQ +xNQ +xNQ +xNQ +xNQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(123,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +xgX +dxZ +dxZ +jcz +sQS +erY +hHa +vFw +omT +bUE +sjN +qTe +jSD +qTe +neR +omT +rwA +tpH +tpH +tpH +tpH +tpH +fqJ +fqJ +fqJ +fqJ +fqJ +fqJ +qVI +qVI +qVI +qVI +qVI +eWI +doV +rRI +tKC +xbJ +gGM +qeU +xBR +jGP +xBR +nTO +xbJ +xbJ +xbJ +xbJ +xbJ +pVx +fbD +dQM +dQM +hKq +eBL +dQM +xQT +hWW +rav +oqq +vzp +aAt +mkj +lim +aRb +qbl +kbd +ijM +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(124,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fdX +dxZ +dxZ +xvF +sQS +qPR +iNH +jZY +kgy +wPU +aXj +aXj +aXj +uzw +fHv +hIX +xZW +jLK +nCk +hwN +lBs +wUC +fqJ +muW +dUK +pgY +xrm +fqJ +jSB +pyv +qVI +nxy +qVI +juk +tlz +spC +tKC +xbJ +acJ +qeU +qub +pIy +wiJ +pQN +aOd +xbJ +wUp +keP +xbJ +qxP +uYI +bPd +dQM +lsj +xaP +jcU +dsW +plF +iZc +gkq +fzG +mmJ +qnl +rso +hhI +mEP +kbd +ijM +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(125,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +fdX +dxZ +dxZ +jcz +kPB +kqQ +pck +cxH +omT +dzR +wNu +wNu +wNu +txx +lld +omT +kdF +wCt +jsl +mDV +dqY +uWD +fqJ +kxB +sDj +aMo +uFk +qDS +vpJ +ebc +rWN +nrJ +qVI +gHQ +dQP +xPs +eJC +xbJ +gpN +qeU +xBR +hjP +xBR +pbf +dMG +hMg +xTZ +xTZ +jYP +qxP +ajO +emS +dQM +hqO +tJY +dQM +qFD +xkZ +jSn +cGw +xEn +fQM +xbA +sIo +udR +hTK +oqs +kIn +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(126,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aAY +dxZ +dxZ +xvF +sQS +wDo +fwO +cxH +omT +oqu +pjk +jHC +wRX +bjg +xlB +omT +nkP +iMf +jsl +mDV +kzR +gYS +fqJ +cHq +jRt +bZZ +suP +fqJ +qVI +fiC +qVI +fiC +qVI +ylZ +tZJ +ylZ +uCT +uCT +uCT +btE +vHM +sEr +dIF +nJX +qlx +xbJ +eVv +hAV +xbJ +qxP +jbQ +xCW +dQM +dQM +dQM +dQM +itQ +npI +ycV +viU +isH +sPD +xNQ +xNQ +xNQ +xNQ +xNQ +ciz +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(127,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +dxZ +dxZ +xvF +sGM +sQS +sQS +kPB +omT +pSt +pSt +omT +wMQ +bJf +wMQ +omT +omT +kok +jsl +qxi +kpz +kpz +dpG +paK +luO +jyV +meG +fqJ +qVI +cUK +nnf +qGT +ksk +hhE +vky +kot +kot +tDo +uCT +uXP +eou +xbG +dIE +nLM +xbJ +xbJ +xbJ +xbJ +xbJ +rNE +uYI +cEW +npI +nXt +bJT +tkL +rbV +wpI +oIE +vox +xEi +gOr +dOc +obm +mes +xNQ +xNQ +oOJ +uLo +lZa +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(128,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +xgX +dxZ +dxZ +dxZ +xvF +uxj +xvF +xvF +omT +wMQ +wMQ +wMQ +scU +ifh +qBr +aFO +aee +gYt +ivD +ukv +rPS +bjY +fqJ +rlI +nMP +hrj +gMa +fqJ +lFW +rPD +wmv +hhE +dUq +jAx +qDh +dUq +jAx +bXq +uCT +xbJ +xbJ +xbJ +xbJ +xbJ +xbJ +eLZ +eLZ +mwo +pVx +pFv +mQK +rMo +npI +uiC +aAf +aAf +fLe +sck +pal +jOa +vRo +jhS +xNQ +pin +xNQ +xNQ +xNQ +xNQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(129,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +iSW +dxZ +dxZ +dxZ +dxZ +dxZ +dxZ +dxZ +dxZ +wFV +wFV +wMQ +wMQ +bJf +wMQ +wMQ +wMQ +wMQ +wMQ +wMQ +wMQ +wMQ +fqJ +fqJ +fqJ +onJ +fqJ +fqJ +oHQ +fUt +aUm +hhE +ewu +kUV +qDh +ewu +kUV +hhE +iWt +pVx +lby +vVM +lby +lby +lpI +qxP +qxP +qxP +nae +qxP +uYI +rMo +mMR +xml +kWm +kWm +wAR +lbK +chg +erx +vtZ +xNQ +xNQ +xNQ +xNQ +xNQ +xNQ +xNQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(130,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +fdX +hLJ +dxZ +dxZ +dxZ +dxZ +dxZ +dxZ +dxZ +wFV +btR +fXg +cIi +wyy +oxy +oxy +sUj +xWW +xWW +ibC +xWW +aux +diO +lTZ +ggm +dEQ +jRN +lTZ +gLB +uCr +jkN +gNP +leU +leU +vEv +una +una +wWb +bQW +pVx +lby +qxP +qxP +qxP +qxP +qxP +dgk +fQV +pVx +qxP +uYI +rMo +nms +cXt +ymg +ymg +tjn +npI +qBO +mNV +jBY +xNQ +xNQ +xNQ +xNQ +xNQ +xNQ +xNQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(131,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +ycO +peK +bzD +bzD +bzD +bzD +ixH +bzD +bzD +hZG +tVr +uao +seK +kXO +nab +oGD +tOw +mRk +mRk +tqL +wek +xno +yav +lTZ +kOu +rDh +qSS +shv +rNw +qAn +ezz +jjF +sWv +bFt +has +dUq +jAx +hhE +qZJ +pVx +xIj +qxP +beV +pTb +lpI +qxP +qKa +jYi +pVx +pVx +uSn +bzg +bzg +bzg +bzg +bzg +bzg +thW +iLd +qck +qFq +bUX +qbl +lim +kGy +ijM +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +qzu +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(132,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +sTx +iLc +sTx +sTx +sTx +sTx +sTx +sTx +sTx +hZG +tVr +ejS +jaU +gZL +rZQ +hkH +rZQ +gZL +gZL +wGf +qvr +rZQ +kUW +lTZ +jKH +caZ +pnM +lTZ +idY +oHQ +wmv +hhE +ewu +kUV +nFc +ewu +kUV +bXq +qVI +pVx +mwo +qxP +hNs +qff +vtH +qxP +pkb +pkb +pkb +pkb +oFK +eah +hOz +dJY +bzg +bzg +bzg +thW +iLd +rOG +jPe +ooE +dVo +jJm +kGy +ijM +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(133,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +kkr +rmS +rmS +rmS +rmS +rmS +rmS +rmS +hZG +pcc +uIp +gZL +mXn +bxH +hkH +hyL +gZL +lgB +hkH +eqo +qvr +reP +lTZ +bFp +rUp +wst +lTZ +qVI +ilr +wmv +hhE +hhE +hhE +plN +hhE +hhE +hhE +hTS +qxP +qxP +qxP +qxP +qxP +qxP +qxP +pkb +qfJ +fok +vNH +lFI +qus +qus +agF +bAL +iSd +dty +thW +gGH +qXj +sGB +fAm +eDg +pcC +cYk +tBs +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(134,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +kkr +kkr +kkr +mVd +mVd +mVd +mVd +mVd +mVd +hZG +tVr +uIp +hkH +tok +hkH +alH +kmc +sIV +hId +jKL +aEI +rqK +kUW +lTZ +lTZ +lTZ +uGe +lTZ +lTZ +lTZ +lTZ +cDo +imE +clR +sdg +clR +imE +cDo +qVI +fQV +inS +qxP +dgk +fQV +hpb +qxP +pkb +plk +uyB +uyB +sIN +lxJ +lVC +bzg +bzg +vwv +bzg +thW +thW +thW +thW +xNQ +xNQ +xNQ +xNQ +qsw +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(135,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rmS +rmS +rmS +rmS +rmS +rmS +hZG +tVr +tAb +hkH +nuj +shU +hId +lhU +xdE +fol +fCx +jaU +qvr +yjA +lTZ +akC +hgH +wst +odG +bPu +bPu +lTZ +qVI +tjd +rLj +qVI +rLj +tjd +qVI +qVI +qVI +pVx +qSp +pVx +pVx +pVx +oSk +pkb +rku +lKC +ubG +klp +rrX +bzg +bzg +nDE +flP +bzg +oZu +wws +gKF +gKF +xNQ +xNQ +uYw +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(136,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +kkr +kkr +mVd +mVd +mVd +mVd +mVd +hZG +rMn +ejS +hId +cKF +qqF +gfk +dCm +gZL +hkH +hId +qvr +rZQ +kUW +lTZ +akC +cZz +unU +wQf +bPu +bPu +lTZ +syB +qIe +pyJ +vmE +pyJ +qIe +qIe +ssS +qVI +red +gkD +wMZ +pVx +uUH +rnD +pkb +mKo +dch +xSL +bzg +bzg +bzg +sRG +kQF +pKO +kKU +cua +azQ +gKF +gKF +vOQ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(137,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +kkr +kkr +bzD +lHq +bzD +bzD +hZG +pcc +ejS +gZL +gZL +gZL +uKA +hkH +gZL +ybd +hkH +nSC +rZQ +xcm +lTZ +uxl +ajs +jiT +aKn +vJb +vJb +vlH +jGY +hWb +mFo +jGY +amS +mFo +jGY +toK +qVI +cem +gkD +gkD +pVx +xbO +rnD +pkb +pkb +pkb +pkb +bzg +nam +nvP +hfX +jsD +asm +gKF +poB +gKF +gKF +abk +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(138,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +ryg +sTx +sTx +hZG +tVr +qBx +ryI +egT +kby +xLe +sBR +kgB +kCj +ycX +kCj +kCj +tQZ +lTZ +vXk +vXk +vXk +qZo +sAA +khu +lTZ +aDv +idj +dxq +aBE +jzf +dxq +qIe +fIB +qVI +uzY +qVk +ajF +pVx +uUH +rnD +kiU +kiU +gvy +xkD +bzg +yez +kQW +sEy +bKP +mKH +gKF +gKF +gKF +uYw +uYw +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(139,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +hAD +fpU +wFV +wFV +gJl +yeg +yeg +yeg +wyB +cDE +eIg +rgg +qBr +dhC +hkf +hkf +hkf +lTZ +hgM +hgM +hgM +nUO +pQX +lTZ +lTZ +ajj +qIe +bmG +bmG +apB +bmG +nTR +qVI +qVI +cLx +vhF +wzk +pVx +ucp +rnD +rnD +kiU +kiU +kiU +bzg +beJ +cfm +aXh +gxp +jrj +gKF +gKF +uYw +fww +fvG +xTI +gSd +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(140,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +xgX +fpU +wFV +wFV +wFV +wFV +wFV +jWE +ggb +mXR +htc +wFV +wFV +wFV +wFV +wFV +pWz +pWz +pWz +pWz +mJV +pWz +pWz +lTZ +imm +cBH +bmG +bmG +apB +bmG +bmG +qVI +qVI +bXT +bXT +bXT +bXT +bXT +bXT +bXT +bXT +bXT +bXT +gKF +aOg +mYt +fKj +gKF +gKF +gKF +gKF +fww +ucQ +gYE +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(141,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +tXe +xgX +fpU +wFV +wFV +wFV +wFV +wFV +wFV +wFV +wFV +wFV +wFV +wFV +wFV +wFV +pxc +pxc +pxc +pxc +gvE +cpT +sgn +mYK +hfl +mYK +lOr +kOt +lnp +kOt +lOr +mYK +mYK +hvo +bXT +bXT +bXT +bXT +bXT +bXT +bXT +bXT +bXT +gKF +gKF +gKF +gKF +gKF +gKF +gKF +fww +ucQ +gYE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(142,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +iQn +eLH +tXe +tXe +xgX +fpU +tng +uYw +wFV +wFV +wFV +wFV +wFV +wFV +ubp +tng +uYw +uYw +uYw +hui +tvE +uYw +tng +kAq +pxc +liJ +bdy +liJ +hCU +pbW +dbt +tDG +hCU +liJ +liJ +kAq +tng +nKE +lxi +qgy +uYw +uYw +uYw +tng +bXT +gKF +gKF +gKF +gKF +gKF +uYw +fww +ucQ +gYE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(143,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +iQn +tXe +tXe +mIq +fvG +fvG +fvG +uqd +fpU +uYw +uYw +uYw +qMW +uYw +uYw +uYw +nKE +dvc +nKE +nKE +nKE +kAq +uYw +liJ +tOd +liJ +doM +doM +doM +doM +doM +liJ +uYw +kAq +nKE +nKE +nKE +tzT +nKE +uYw +uYw +uYw +uYw +uYw +uYw +uYw +rTO +wgP +fvG +xTI +uyK +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(144,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +rZL +rZL +rZL +rZL +rZL +iQn +hLJ +hui +bcv +bcv +bcv +bcv +bcv +bcv +bcv +dmo +uYw +uYw +uYw +kAq +uYw +jVZ +lHt +tVt +jev +uYw +uYw +uYw +uYw +uYw +uYw +kAq +uYw +uYw +uYw +dvW +bcv +bcv +bcv +bcv +bcv +bcv +bcv +qgy +vOQ +gYE +rZL +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(145,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +idA +hLJ +xcu +xcu +xcu +xcu +xcu +xcu +xcu +xcu +dYA +nxJ +nxJ +nxJ +nkV +uYw +jVZ +lHt +tVt +jev +uYw +uYw +uYw +uYw +uYw +uYw +pCe +nxJ +nxJ +nxJ +gWF +xcu +xcu +xcu +xcu +xcu +xcu +xcu +xcu +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(146,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +kAq +uYw +uYw +uYw +uYw +uYw +jVZ +lHt +tVt +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +kAq +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(147,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wca +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +kAq +uYw +uYw +uYw +uYw +uYw +jVZ +lHt +tVt +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +kAq +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(148,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +kAq +uYw +uYw +uYw +uYw +uYw +jVZ +lHt +tVt +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +kAq +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(149,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +kAq +uYw +uYw +uYw +uYw +uYw +hLv +lHt +bFr +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +kAq +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(150,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +kAq +uYw +uYw +uYw +uYw +uYw +jVZ +lHt +tVt +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +kAq +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(151,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +uJj +fvG +fvG +fvG +fvG +fvG +hFW +lHt +aIC +xwu +uqd +fvG +fvG +fvG +fvG +fvG +fvG +fvG +fvG +fvG +uuA +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(152,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +ciz +vlW +rZL +rZL +rZL +rZL +rtT +rtT +rtT +rZL +rZL +rZL +rZL +rZL +rZL +rZL +rZL +rZL +rZL +iQn +xxf +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(153,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +huG +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +lVP +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +rvv +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +voL +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(154,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +ciz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +xxf +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(155,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +ciz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +xxf +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(156,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +ciz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +xxf +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(157,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +ciz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +xxf +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(158,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +ciz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +idA +xxf +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(159,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +ciz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +xxf +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(160,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +ciz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +xxf +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(161,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hLJ +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +ciz +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +xxf +rzI +rzI +rzI +rzI +rzI +rzI +rzI +rzI +vOQ +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(162,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +huG +kMW +pbY +kMW +pbY +kMW +pbY +kMW +pbY +ciz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +xxf +kMW +pbY +kMW +pbY +kMW +pbY +kMW +pbY +voL +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(163,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +kdR +hWt +hWt +hWt +hWt +hWt +hWt +hWt +cGY +frl +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +wvG +vLv +hWt +hWt +hWt +hWt +hWt +hWt +hWt +tXi +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +qVo +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(164,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +rZL +rZL +rtT +rZL +rZL +rZL +uqg +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +uqg +rZL +rZL +rZL +rtT +rZL +rZL +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(165,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(166,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(167,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(168,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(169,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(170,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(171,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(172,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(173,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(174,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(175,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(176,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(177,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(178,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(179,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(180,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(181,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(182,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(183,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(184,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(185,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(186,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(187,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(188,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(189,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(190,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(191,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(192,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(193,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(194,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(195,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(196,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(197,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(198,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(199,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(200,1,3) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} + +(1,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(2,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(3,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(4,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(5,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(6,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(7,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(8,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(9,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(10,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(11,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(12,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(13,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(14,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(15,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(16,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(17,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(18,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(19,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +yad +rtT +lko +kkr +lko +lko +lko +kkr +lko +rtT +yad +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(20,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +ffy +tSD +lRZ +lko +lko +lko +lko +lko +lko +lko +lko +lko +lko +tSD +ixA +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(21,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +xdF +lHt +hCT +lRZ +lRZ +lko +lko +lko +lko +lko +lko +lko +lko +lko +lko +lko +tOt +tGg +rtT +rtT +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(22,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +hnL +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +rpE +lRZ +lRZ +aoe +lRZ +lRZ +lRZ +lko +uwd +uwd +uwd +uwd +uwd +uwd +uwd +lko +lko +lko +lko +vja +lko +lko +raX +xPM +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(23,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fbs +uLo +fnN +lRZ +lRZ +alX +lRZ +lRZ +lRZ +uwd +uwd +uwd +uwd +kkO +sEP +uwd +uwd +uwd +lko +lko +agR +pwm +eDX +lko +iPB +tXe +lCZ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(24,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rlU +tXe +soS +sMe +lRZ +lRZ +fKa +lRZ +fWM +wFh +uwd +uwd +uwd +uwd +sEP +gHL +uwd +uwd +uwd +uwd +vja +ylx +pTK +qOc +lko +ucs +xsf +tXe +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(25,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +lRZ +sMe +lRZ +lRZ +jUt +lRZ +jTO +syq +rWD +rWD +rWD +rWD +rWD +rWD +rWD +rWD +rWD +rWD +unn +unn +unn +jKJ +unn +ucs +lko +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(26,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +lRZ +lRZ +sMe +lRZ +lRZ +nnI +lRZ +xXQ +syq +wMF +dKB +dKB +dKB +dKB +dKB +dKB +dKB +dKB +dKB +unn +iGi +iWD +mDL +unn +cLp +lko +lko +tXe +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(27,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rlU +tXe +tXe +lRZ +lRZ +idI +owd +vTd +aWS +qIT +slD +syq +diy +diy +diy +diy +diy +diy +diy +diy +diy +dKB +unn +dTD +vdj +qmR +xsN +cLp +unn +lko +tXe +tXe +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +gHi +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(28,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +lRZ +lRZ +lRZ +vsn +epq +bzE +nCx +vlw +lAM +syq +diy +qXR +hcf +nxN +fmT +dOk +age +msI +diy +dKB +unn +jVH +pxs +mjf +dTW +ile +unn +lko +lko +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(29,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +lRZ +lRZ +lRZ +hDt +hDt +aOa +jhb +mhF +nlo +qmw +syq +pxV +pDz +rhH +iBO +lfg +iNg +dOH +pDz +pxV +dKB +unn +qNb +efD +cYE +xcJ +bYU +unn +rWD +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(30,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +lRZ +lRZ +lRZ +iEb +iEb +aOa +gpq +tGL +wPV +cUe +syq +diy +qXR +hJM +hDE +iNw +xCY +iBI +pQr +diy +dKB +crB +iuS +mJQ +fmM +iuS +iuS +crB +rWD +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(31,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +idA +tXe +lRZ +lRZ +lRZ +fIe +fIe +aOa +uPh +opv +aEz +ooK +syq +diy +diy +diy +diy +nBW +diy +diy +diy +diy +dKB +crB +bNl +dBS +ejB +pvi +qIQ +crB +jxX +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(32,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +lRZ +lRZ +lRZ +iEq +ixd +aOa +syq +bpU +syq +syq +syq +dKB +dKB +eQE +eQE +wEU +eQE +eQE +dKB +dKB +dKB +crB +kQx +wvM +uly +bWz +waF +crB +jxX +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(33,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +lcl +lRZ +lRZ +syq +syq +syq +kzS +hGR +kzS +kzS +kzS +bOx +bOx +bOx +vVu +aSG +uOc +bOx +bOx +bOx +syJ +crB +uBS +qQx +iQX +bWz +bMl +crB +jxX +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(34,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +fdX +nIB +nIB +bsZ +bsZ +bOx +fXl +nzV +uIP +kbR +sdI +gWj +oPJ +bPm +dPO +hXE +kOz +hGU +pKx +qoE +nBp +msl +dEo +oZT +vez +rPQ +muc +crB +jxX +lko +fdX +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(35,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +fbs +xzw +vzX +dkR +dkR +lif +fQz +fjQ +ciF +gNL +lXc +dNR +xYW +xYW +cwY +hdb +nWj +xnL +cAd +iep +uCN +uCN +fwE +kRW +lNk +sar +kYu +xES +pZq +oVY +hdo +fVh +mli +xPM +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(36,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +fdX +nIB +nIB +hdp +dij +bOx +owy +fgf +puD +frD +uCN +idH +tZj +eXb +jze +pDK +ogW +ogW +ogW +vkL +vkL +iuS +gpw +ukn +onG +jZZ +eqd +crB +jxX +lko +fdX +eLH +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(37,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rlU +fdX +nIB +nIB +qIZ +bOr +bOr +ifM +ifM +ifM +fLp +wgO +usv +ifM +ogW +emo +reN +ogW +dKQ +jVc +vkL +wds +vkL +vkL +vkL +vkL +sut +vkL +kei +kei +lko +kkr +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(38,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +eLH +biw +nIB +nIB +hXy +bOr +hpO +hoi +bhB +fMy +fue +izW +dgc +ifM +wvk +iPs +qar +qZn +toA +oEU +vkL +kJY +sWJ +mKp +vkL +bon +eVG +bTN +tsn +kei +lko +qYn +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(39,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +uYw +stv +qPH +rox +sqc +uZW +mmt +gWQ +qbt +qNW +aCD +qNW +ohz +fOr +qPA +erN +sSC +cYq +jHh +hfO +vkL +waR +bWr +pgW +egt +nTD +xQy +kZr +hpF +kei +lko +oFU +lko +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(40,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +rpE +qMW +uYw +uYw +kXa +aif +aAp +rsp +mmt +gWQ +tcS +eJi +cIZ +jAF +tLp +iQp +rmB +arG +lWc +rhk +dCO +aMI +vkL +sdG +iyn +uXb +vkL +wIy +pHN +mLa +bpK +kei +lko +oFU +lko +lko +lko +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(41,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +aTh +tXe +tXe +vDB +dDg +uYw +pJv +bYb +oOW +uWs +amA +gWQ +oXV +qNW +aCD +qNW +mZX +sQk +obq +vZQ +qnS +arU +eVa +uWO +arU +arU +arU +arU +arU +arU +arU +mFq +lZU +lRN +lRN +pEX +lRN +lRN +lko +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(42,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +tXe +tXe +tXe +vDB +nIB +nIB +bqG +nIB +nIB +uJF +aEy +aBJ +pBJ +vKK +vUU +sWH +plb +cNA +ifM +moM +dFh +wLd +arU +jJY +vBj +dUn +afQ +mOl +vqg +ast +dnx +jfh +was +dIX +uTy +eyD +huK +rtV +lRN +lko +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(43,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +nIB +rtT +rtT +nIB +tXe +tXe +qMW +uYw +uYw +sqy +ceo +htX +sFe +lrn +vNO +bOr +bOr +bOr +bOr +bOr +bOr +bOr +bOr +ifM +lPG +dFh +pAw +jal +puC +tDu +eKz +wgn +eKz +agI +hbG +lfm +vMe +sAM +mnP +uTy +gCe +mUp +nPN +lRN +lko +uYw +uYw +uYw +uYw +uYw +uYw +uYw +lko +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(44,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +nIB +nIB +rtT +rtT +nIB +xsf +uYw +vDB +hwE +hwE +nIB +eoV +lrU +nIB +dnl +oNZ +oNZ +uiv +oAj +jfy +mDl +nLn +dys +tep +pel +opR +dFh +pAw +bzi +otl +pLy +eDo +mPm +tdx +kvW +srr +bPC +arU +kUF +mhO +uTy +dzl +cvX +lYk +lRN +lko +uph +uph +uph +uph +uph +uph +uph +lko +lko +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(45,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +nIB +nIB +nIB +kkr +uYw +nIB +kkr +vDB +hwE +aVb +uYw +nIB +nIB +nIB +nIB +kXd +fUV +cPC +vbj +pqG +pqG +fVm +nQr +wel +bBT +ltp +aVs +nHZ +pAw +apQ +otl +pLy +fCW +oCI +tta +rFL +uIE +vVN +arU +eMW +iuB +wHL +lJb +oyb +xrn +lRN +lko +nxI +nxI +nxI +nxI +nxI +nxI +nxI +lko +lko +lko +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(46,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nIB +nIB +nIB +nIB +nIB +nIB +nIB +nIB +nIB +sak +pJv +nIB +nIB +nIB +ndf +pgg +lYg +hil +uVw +uVw +uVw +uVw +uVw +uVw +cAJ +nTN +lOd +cIM +pPr +arU +aul +iNb +sdy +fpo +mdE +sha +pHG +oOO +arU +eoJ +mho +mho +mho +mho +mho +gfi +lko +nxI +sjA +vgO +jYU +vgO +sjA +nxI +lko +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(47,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +tXe +nIB +bsZ +bsZ +bsZ +bsZ +bsZ +bsZ +bsZ +nIB +nIB +nIB +nIB +nIB +oWv +ieD +pgg +oNZ +hyW +sfZ +sfZ +sfZ +fXJ +lYM +iLM +doP +qRo +daJ +cUn +fRK +ubj +ubj +ubj +arU +arU +arU +arU +arU +arU +arU +qin +nrO +qPa +qPa +puf +tPq +gfi +lko +sjA +sjA +vpp +rky +iDb +sjA +sjA +lko +lko +lko +xsf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(48,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +jYC +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nIB +bsZ +lAs +qoF +cuf +qBW +xae +bsZ +bsZ +bsZ +bsZ +bsZ +bsZ +oWv +wOU +qYz +qgl +qgl +qgl +qgl +qgl +qgl +qgl +qgl +qgl +qgl +ivL +pam +pkl +rPG +awb +bKK +pxY +xdC +eRo +sOJ +lIk +bOh +eRo +evy +rCE +uNx +hsm +bVF +vUv +gfi +lko +sjA +eVU +psD +rEh +sKN +uav +sjA +lko +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(49,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +soS +nIB +bsZ +lwp +dYs +biR +myX +xrL +gGJ +rLu +fsc +hcr +icI +vHe +oWv +udI +dRc +qgl +qgl +yev +nlX +cdM +rwM +lmb +lMW +uBf +qgl +hiV +cAO +iTz +rEG +yha +qHV +oRR +aFE +oEH +diN +cPI +bKT +eRo +eoJ +mho +mho +mho +mho +mho +gfi +lko +sjA +wIm +fuH +xIp +pmX +eJr +sjA +lko +lko +fdX +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(50,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nIB +bsZ +gcc +fQA +oFg +dcr +grn +xOs +oUx +dWC +nXw +xYX +iJE +oWv +oKJ +sTF +qgl +qgl +dbq +moO +moO +xSA +dBI +eqx +uHH +sfO +eMv +nEZ +pAw +iHU +aFW +aoq +kAo +aFE +oEH +hHY +bKp +rNS +eRo +sSD +uQx +suY +jfY +rvk +vit +vdz +lko +sjA +mqx +gYk +fWS +jHX +aks +sjA +lko +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(51,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nIB +bsZ +kJJ +mQV +vmq +ukZ +fpv +hmP +spi +ieG +igF +cRd +ier +oWv +oKJ +fkQ +qgl +qgl +sFz +bKY +uwI +jvu +iQl +qtU +tnr +qgl +bYl +dFh +eel +ifd +jsH +xnJ +kKT +aex +eRo +mZn +lUi +bHa +eRo +jvL +kqq +fki +bAu +pcQ +vWt +vdz +lko +sjA +vFE +hvR +tUx +mvo +vrd +sjA +lko +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +qgA +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(52,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nIB +bsZ +voP +olu +syv +vek +rQV +oWv +rZR +dfO +qBf +iJH +fpP +oWv +oKJ +fkQ +qgl +qgl +qgl +qgl +qgl +kBW +aLB +qgl +qgl +qgl +srX +adI +swn +lxd +usU +tVj +wjl +ulW +dAX +rrl +oqr +cPY +vPw +cYH +xzF +fki +tBd +qDl +nEz +vdz +lko +sjA +sVe +bAr +fcj +qBP +qBP +sjA +lko +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(53,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nIB +bsZ +oWv +oWv +oWv +kek +oWv +oWv +pMp +dAw +eeI +hCw +pMp +oWv +oWv +urK +nwQ +uMn +gEb +oCy +paa +oVg +jce +qWD +xFy +nwQ +wYj +hMX +yke +ifd +wvT +fLB +xxb +pNm +eRo +eek +lPp +cma +eRo +pdI +jwl +fki +rdf +ixu +pMW +vdz +lko +sjA +wty +jqv +bqs +pQz +pQz +sjA +lko +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(54,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nIB +bsZ +lqC +jeX +qNt +aUt +hZo +fYk +hZo +hZo +tHP +duz +flz +oWv +mwJ +fkQ +nwQ +vjn +cpV +vqO +qKx +cSW +uiB +xZk +bAz +sdo +qOz +dFh +gAN +ifd +ifd +fNb +oQN +rPG +eRo +eRo +eRo +eRo +eRo +qju +tlu +tlu +tlu +tlu +tlu +vdz +lko +sjA +kNr +onY +lob +mUf +kNJ +sjA +lko +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(55,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nIB +bsZ +mui +hPR +hLf +mdB +etl +vnL +etl +etl +ove +ggO +ggO +bAt +ggO +bxZ +nwQ +akx +tbc +nwR +oUI +nhh +pYq +iUC +mTi +kMA +esi +qiF +tqe +rVB +eYD +bEP +qWi +qsC +wUT +pGT +ldY +bWL +mVa +bIS +dLD +bGv +hUE +dWf +hZL +qDN +qaX +iWG +uWa +uBj +rKu +pmF +gPV +sjA +lko +lko +fdX +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(56,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nIB +bsZ +bsZ +oWv +oWv +rPn +oWv +oWv +oWv +oWv +nVP +oWv +oWv +oWv +hZo +qkx +nwQ +jUl +ihA +jVC +mxK +rBY +dxQ +ses +gSm +nwQ +riB +cAO +uaM +qbG +gWU +sRc +mqc +jvi +nbW +oJt +wkM +dwz +nbW +fgG +jrz +nlq +pqN +lUK +omF +lwK +gLt +sjA +vgO +vgO +vgO +sjA +iMM +sjA +lko +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(57,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nIB +nIB +bsZ +dLj +eqZ +hZo +oWv +myN +tKy +hcZ +ubk +nXw +cHP +oWv +koo +qkx +nwQ +bEx +iuE +iuE +iuE +iuE +uxm +iuE +iuE +iuE +tgK +prJ +sEs +djR +djR +nIx +djR +djR +pWm +lCk +djR +djR +pWm +ydV +djR +djR +ntL +diZ +djR +djR +jET +sjA +tyL +goM +qOS +vTp +hPx +sjA +lko +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(58,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nIB +nIB +bsZ +gXp +duz +hZo +oWv +jkg +qtP +imJ +bQq +kDb +oWv +oWv +hZo +qkx +pmT +qsm +iuE +mIF +iZu +ivT +nVB +amR +sVh +iRv +kdy +std +nun +djR +jVE +lFa +dxo +djR +alI +nNl +ora +djR +aUy +fFf +sFu +djR +cKE +nNl +oPB +djR +jET +sjA +ugG +ugG +hBn +kEe +deM +sjA +lko +lko +lko +xsf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(59,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +soS +nIB +nIB +bsZ +bsZ +krN +hZo +oWv +mUc +ohs +elJ +hZy +maZ +oWv +oKJ +hZo +qkx +jEJ +eTL +iuE +rRP +uHE +qGC +tTc +wYZ +dLa +rqs +vkR +nSV +brG +pDM +pEh +nNl +puV +djR +gWA +kWo +nsA +bwr +gWA +mOc +nUJ +djR +deG +pFs +uIA +djR +jET +btc +btc +btc +etx +btc +btc +btc +lko +lko +lko +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(60,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +nIB +nIB +bsZ +wVI +duz +oWv +oWv +bsZ +bsZ +bsZ +bsZ +bsZ +kYH +heV +wjm +tMe +iIk +soZ +iJK +syK +oxc +lxQ +kgX +vNw +ecA +tPK +lLr +cLE +fHS +piA +ffF +heG +djR +djR +djR +nCP +evE +djR +djR +ecJ +djR +djR +djR +wOw +djR +jET +btc +jIa +jIa +ybU +jIa +jIa +btc +lko +lko +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(61,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +tXe +nIB +nIB +bsZ +flB +hZo +jse +ylw +bsZ +vWo +nuJ +nuJ +dSW +nuJ +nUv +uGv +tcy +ftU +iuE +iUO +ucf +jMZ +eso +eEX +pGD +mNS +oKB +mPI +fuP +djR +lhY +ngh +voa +txt +kSs +uwY +qgs +jpD +jDr +hem +qgs +vsz +ntg +ebF +qgs +udP +kPk +kPk +kPk +lko +qpl +lko +lko +lko +lko +lko +tXe +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(62,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +nIB +bsZ +bsZ +bsZ +bsZ +bsZ +bsZ +bsZ +bsZ +bsZ +pag +dDh +dBq +dDh +dDh +ndv +iuE +iuE +iuE +iuE +tCf +igs +wOz +iuE +vre +veY +qwT +djR +gaJ +swy +pYK +uEk +lzk +qgs +fyd +kCZ +xBb +pky +qgs +qgs +qgs +fyd +afE +dJF +emO +mJw +kPk +lko +cNP +ulC +iMa +jsV +lko +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(63,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +cBU +tXe +nIB +nIB +nIB +nIB +oWv +vMR +ocv +rpP +plU +vnm +dDh +rIu +vDY +jQa +vBp +eRz +nUh +tge +oWv +rOx +jUv +tpb +sez +rBL +vre +nHJ +bvC +sDk +hCv +auN +jTw +kFB +ejo +xcZ +bRQ +mEX +hoQ +jLr +sIB +pfe +deI +sIB +rAK +wsR +ewh +qlG +xZx +eGR +not +lko +lko +lko +lko +tXe +vlW +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(64,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +tXe +nIB +nIB +oWv +nww +bfG +qBY +gzA +qqh +dDh +cSI +knv +vQU +dDh +eRz +hZo +iau +oWv +ltu +qPx +qPx +qPx +xsB +tDU +nFp +yhr +pXF +diT +cjl +qei +aRB +djR +rau +oUL +fJk +fJk +fJk +fJk +vvX +cbr +qgs +fSv +dJF +emY +jlp +kPk +lko +lko +lko +lko +tXe +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(65,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +cBU +tXe +myd +cuY +sLg +sLg +sLg +sLg +oWv +oWv +dDh +tYr +hNn +kxh +dDh +eRz +hZo +rho +oWv +iMu +qPx +byr +qPx +nUw +vre +vYc +oTB +djR +pNR +djR +dJA +eDb +djR +noH +nSH +vIj +sxZ +omW +qwz +dJF +iGg +uim +srx +dJF +dJF +dJF +kPk +lko +lko +lko +tXe +tXe +vlW +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(66,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +soS +myd +cuY +jou +sLg +bXs +sLg +xiE +krN +dDh +odA +msq +cLG +vBp +pge +aKG +hZo +oWv +daS +mmx +qPx +cBM +qAY +snP +hRZ +psh +eLz +aEL +tZc +dGT +xIQ +udP +sFf +gap +wwo +aGs +eYS +uiE +dJF +dJF +dJF +dJF +dJF +hsq +leB +lko +lko +tng +bYu +tXe +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(67,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +myd +cuY +wmB +aIT +jwZ +ruk +kfH +hKk +dDh +dDh +dDh +dDh +dDh +eKa +hLw +xVg +xhN +qQI +sMf +gHE +cRX +lWK +vHY +bMA +uHd +whR +pAX +edh +hhl +gLp +udP +rRK +gOv +aga +oCZ +kPx +spO +dJF +aAU +sGW +xvr +dJF +jFH +dsP +lko +uYw +uYw +wZR +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(68,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +myd +cuY +sLg +sLg +nAk +sLg +weN +kZK +kZK +kZK +kZK +kZK +kZK +fzb +oOL +gyQ +oWv +jIH +wxY +oXK +oXK +kLY +uYB +urE +eqg +dyp +rnQ +mtJ +nKn +mhL +dQl +hGe +wvO +wUo +oCa +qZf +aPn +vCV +cdn +dzn +rqX +xrb +eaN +vYu +wPo +uYw +uYw +wZR +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(69,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +myd +cuY +qTi +mKd +flf +sLg +heJ +fzF +qRd +igy +eKa +mOK +mOK +iWs +eRz +mzu +oWv +ltP +ixK +pIT +mMI +lla +pZP +aGQ +xFT +gRg +crE +dNY +vfQ +pRh +udP +aaR +pdt +tMD +pBY +ogA +otS +dJF +vZB +vZB +sIg +mqs +dsP +lko +oFU +eQC +eQC +wZR +nmN +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(70,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +myd +cuY +qgg +rqr +cCu +sLg +sLg +cvN +cvN +cvN +iEy +cvN +cvN +cvN +ngU +cvN +kTh +kTh +kTh +kTh +kTh +kTh +uZz +qZR +wHP +qZj +eKd +eKd +eKd +eKd +fOi +xfi +xfi +xfi +xfi +xfi +xfi +xfi +xfi +xfi +xfi +xfi +dsP +eCQ +gOA +pZz +pZz +pZz +pZz +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(71,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +tXe +myd +cuY +sLq +eUs +cCA +vGb +sLg +oQQ +thT +kOo +plR +pdw +cvN +bsR +lYo +irA +kTh +dEB +dEB +dEB +dEB +dEB +kTh +cbR +jUp +kgG +eKd +diR +diR +diR +aWk +lci +lci +lci +lci +lci +aWk +jIv +eKN +mwj +brW +tPH +eCQ +eCQ +uYw +ePH +ePH +uYw +eFH +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(72,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +myd +cuY +rKU +tWs +htJ +mEd +sLg +mAP +aCs +kOo +fhY +eJo +cvN +pgC +lYo +kOo +kTh +dEB +dEB +dEB +dEB +dEB +xqh +oHV +fmm +aoX +uQt +sef +diR +diR +aWk +fwa +fwa +opX +opX +opX +aWk +wtD +nUL +mwj +brW +xls +eCQ +eCQ +oyg +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(73,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +eLH +myd +cuY +hyD +sgV +oYf +nYL +sLg +mAP +fui +mXT +plR +sFX +cvN +weY +lYo +fJZ +kTh +dEB +dEB +dEB +dEB +dEB +xqh +gTB +lFA +aIH +uQt +sGv +mJv +diR +aWk +wlw +kLe +gPH +mfq +idp +cXU +qHR +nUL +kHK +brW +brW +eCQ +eCQ +eCQ +uYw +uYw +uYw +wZR +gSd +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(74,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +tXe +myd +cuY +cuY +cuY +cuY +sLg +sLg +mAW +iOH +kaz +gbc +sFX +cvN +tnL +lYo +shf +kTh +dEB +dEB +dEB +dEB +dEB +xqh +xSF +oUS +dhl +uQt +vGv +aLU +xEM +aWk +ljL +gAu +fhs +jsq +lPd +aWk +sDd +llO +mwj +brW +pGI +eCQ +eCQ +eCQ +eCQ +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(75,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +shR +soS +pAT +pAT +pAT +pAT +pAT +hFK +mgX +kxi +jHY +jFp +sFb +cvN +cvN +cvN +ngU +cvN +kTh +dEB +dEB +dEB +dEB +dEB +kTh +hKe +mAC +bqO +tTe +lGb +aQb +gai +lGA +iwE +tQH +xOg +xOg +erR +aWk +mwj +mwj +mwj +brW +fwr +kHr +eCQ +eCQ +eCQ +eCQ +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(76,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +tXe +tbn +soN +nsa +bRd +pAT +gOK +gOK +gOK +gOK +gFi +gbc +cvN +rcV +ewl +lYo +ilO +kTh +kTh +kTh +kTh +kTh +kTh +kTh +vEX +ryR +dIP +eKd +fNa +vQW +xLQ +aWk +fVH +aPS +djt +nxx +fVH +aWk +bZR +mwj +hBs +brW +rKH +kHr +svc +tZZ +eCQ +eCQ +abk +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(77,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +tXe +jwe +giU +qqH +qqH +mcz +lHU +lHU +wPB +baW +avL +coM +lfN +aoG +aoG +vPI +jPZ +ilR +wuG +drK +axO +axO +wuG +ptD +ikB +frK +kuy +eKd +eKd +eKd +eKd +aWk +aWk +aWk +aWk +aWk +aWk +aWk +exA +fWb +aVQ +brW +brW +brW +brW +nVh +eCQ +eCQ +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(78,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +tXe +pAT +lrw +bnr +jmP +pAT +dng +dng +lQY +wjv +wNN +mfL +cvN +xwR +xwR +cbm +tix +cvN +qNQ +ibw +cTR +vUu +vUu +alJ +qtY +tji +eOE +yhD +fED +fED +fED +fED +fED +fED +fED +fWb +fED +fED +xHc +mwj +uqL +brW +brW +brW +brW +cSz +eCQ +eCQ +uYw +wZR +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(79,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +tXe +pAT +pAT +pAT +pAT +pAT +pAT +pAT +cvN +cvN +cvN +hjS +cvN +cvN +cvN +cvN +pph +stL +stL +fuX +stL +stL +stL +stL +fJi +iOt +aDa +alJ +ppx +leW +mls +kDz +mls +vhZ +bHl +mwj +pQo +brW +cau +mwj +knI +brW +daC +owY +uDo +btU +eCQ +eCQ +uYw +bYu +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(80,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +pAT +pAT +pAT +pAT +pAT +pAT +pAT +cvN +fyw +gVS +hJE +cBL +cjX +aNv +xjr +dVP +stL +qFH +etA +djN +xjE +fhX +stL +nKo +mDg +lKS +alJ +oJs +oJs +oJs +oJs +oJs +oJs +oJs +oJs +mwj +qMa +mwj +mwj +mwj +mwj +mwj +eCQ +eCQ +eCQ +eCQ +eCQ +eCQ +eCQ +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(81,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +oCu +dfu +dfu +dfu +dfu +eBA +pAT +fCG +gOK +lYo +lun +azX +sgD +eke +stL +stL +stL +wxi +vPO +iXp +jKd +fIL +stL +mMT +kyw +nmb +kYs +oJs +uXp +uXp +emC +uXp +uXp +peP +oJs +jyX +brW +gcK +mwj +mGV +iTp +tAA +eCQ +aqA +ixc +ixc +ixc +ixc +cWd +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(82,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +oCu +cKZ +rdw +iHX +cJD +pmm +rQI +iko +lvi +jVV +hZF +gVY +jYm +baB +stL +ygM +vnV +sNB +pqE +xIG +wiz +pkj +stL +ncQ +kyw +pxk +dPt +oJs +pjA +uXp +dIu +vdV +uXp +eXP +oJs +bgn +brW +brW +cKU +hbS +mPt +gEF +ulw +vQb +tIV +efQ +uVi +okx +cWd +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(83,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +oCu +dfu +dfu +dfu +dfu +eBA +pAT +ojv +bBQ +lYo +vdJ +vcg +ekG +oZb +hSq +kkN +nNm +sqF +eVO +mhV +eps +wfw +ajL +sdE +dNs +nmb +oWe +oJs +aYE +uXp +nvl +cZo +uXp +bcK +oJs +vAV +brW +ehw +mwj +lGY +iCK +nhI +eCQ +aqA +ixc +ixc +ixc +ixc +cWd +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(84,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +tbn +pAT +pAT +pAT +pAT +pAT +pAT +aqb +lvi +vaF +erA +iPl +skv +iPl +stL +nDt +tfl +seA +knP +irc +vjJ +rhJ +stL +hzn +kyw +nmb +hED +oJs +oJs +dfI +xYw +dWy +fYI +oJs +oJs +pWR +brW +uRg +mwj +fno +hux +gYu +eCQ +eCQ +eCQ +eCQ +eCQ +eCQ +hgZ +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(85,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +gEO +rfi +rfi +rfi +rfi +ibU +pAT +avQ +lvi +iCD +pkq +iPl +lsE +odp +stL +stL +stL +stL +stL +stL +bDC +stL +stL +nsB +rjb +daE +alJ +oJs +oJs +oJs +eXv +rbz +oJs +oJs +oJs +oAD +brW +fYd +mwj +kaB +hyo +cEw +eCQ +pkM +qjj +qjj +qjj +qjj +ugd +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(86,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +gEO +pYM +xnh +bNz +ifv +gFM +xND +tWh +lvi +vAf +moh +iPl +jpo +dra +stL +iuZ +fCB +pku +fCB +doJ +yeM +dEa +stL +fiz +iOt +xoZ +oJs +oJs +eZy +hDn +ubH +kAZ +dTA +eZy +oJs +uDo +brW +fYd +mwj +ydo +hux +tDm +vTn +wMn +ikH +ghN +rGL +lwY +ugd +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(87,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +gEO +rfi +rfi +rfi +rfi +ibU +pAT +ojv +lvi +qvA +dwQ +tQD +jpS +emb +stL +unu +djA +qWS +oam +pjF +rSx +kAi +stL +lkB +pTA +pRv +oJs +oTR +kOF +npL +udy +vGm +bni +tYX +oJs +btU +brW +jNq +mwj +pvD +cZO +nwE +eCQ +pkM +qjj +qjj +qjj +qjj +ugd +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(88,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +tbn +pAT +pAT +pAT +pAT +pAT +pAT +kLx +lvi +imH +mGI +iPl +psR +oOB +stL +dfs +sKT +iKp +sKT +iKp +mjY +aSg +stL +dpT +oJA +fVM +xsz +uTl +bIW +qBg +kiD +kiD +omr +sTO +oJs +fUK +brW +uRg +mwj +iqL +myh +gYu +eCQ +eCQ +eCQ +eCQ +eCQ +eCQ +hgZ +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(89,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +nOP +oSP +oSP +oSP +oSP +oqd +pAT +oYZ +lvi +iBt +lpB +iPl +aFi +iPl +stL +dDG +egJ +xBk +pbz +pBL +mwi +tuB +stL +kgs +bEn +xXy +oJs +jfo +aHV +eqX +vSw +uwh +uaK +qKJ +oJs +kzn +brW +nMX +mwj +rDj +ftP +fNB +eCQ +xyL +kbB +kbB +kbB +kbB +vBM +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(90,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +nOP +rgx +nZw +oPP +fgX +leO +laP +ljf +lvi +lYo +sPO +cbC +wVw +wqq +aTK +aTK +aTK +aTK +aTK +aTK +aTK +aTK +aTK +wsS +mCU +evH +oJs +oJs +oJs +oJs +oJs +oJs +tGH +oJs +oJs +vVg +eZB +qpQ +vvs +vsO +fMU +vGR +lyw +rIQ +gKR +ndG +ruK +xic +vBM +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(91,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +nOP +oSP +oSP +oSP +oSP +oqd +pAT +dJh +gOK +lYo +iiG +sEt +fFB +wOe +aTK +okd +iDE +lDK +bBp +lTx +hPc +oxh +aTK +kgs +xLq +hbb +slm +gVl +bPD +gYN +oaw +tfa +nEu +aQi +wXZ +vVg +fMi +oiW +mwj +uqy +jtx +xDU +eCQ +xyL +kbB +kbB +kbB +kbB +vBM +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(92,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +pAT +pAT +pAT +pAT +pAT +pAT +pAT +cvN +ies +oEp +gJw +cbC +fgR +onv +aTK +pDN +ait +ckp +kcS +ikb +ikb +fYw +aTK +kgs +qik +wOo +slm +gVl +gAJ +mYX +iGm +dvx +ybV +sDn +apa +cJL +ftI +ftg +mwj +mwj +eCQ +eCQ +eCQ +eCQ +eCQ +eCQ +eCQ +eCQ +eCQ +tXe +gSd +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(93,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +rpE +rtT +rtT +rtT +rtT +idA +soS +pAT +pAT +pAT +kOo +rCc +rCc +rCc +cvN +cvN +tSs +cvN +cbC +yfF +wmh +aTK +sRj +bcy +aDY +lgy +rNU +dGC +usG +aTK +ayu +qIa +bFT +slm +gVl +jXN +hcP +ssm +wWm +sKD +xhu +jPd +slm +enW +tBP +hBv +hBv +rWe +kaL +kaL +wQs +jiv +wop +wop +tXe +tXe +tXe +atx +rpE +rpE +rpE +rpE +rpE +rpE +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(94,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +xdF +ixA +lCZ +aTh +yad +lCZ +aTh +xdF +tSD +pAT +pAT +bsH +rzT +rbs +jAH +amj +gXZ +jSj +kOo +cbC +aPH +cbC +aTK +wzw +rUn +aDY +lgy +tkt +wDS +wXc +aTK +fiz +aAD +xoZ +slm +gVl +clw +pZi +que +vaO +vaO +njA +vaO +slm +bnQ +bnQ +bnQ +bnQ +jVT +xLy +ecL +ecL +ihX +wop +wop +tSD +fOP +tSD +tSD +tSD +tSD +fOP +tSD +tSD +tSD +ixA +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(95,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +ffy +hCT +tOt +tSD +tSD +vMm +tSD +tSD +hCT +uYw +pAT +pAT +oPF +con +hDr +pqP +cvN +kjL +uIG +gOK +gOK +gbc +gOK +vJV +ikb +lSt +tIc +aPv +ieJ +ieJ +cDA +aTK +iwz +qIa +wWr +imY +imY +imY +imY +imY +bnQ +sIW +lgo +dxd +ert +fJV +bLD +cKH +bnQ +pvl +ecL +sCB +sCB +ihX +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +dnB +uWB +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(96,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +pAT +pAT +irA +ujN +rJW +xkX +cvN +gRB +qLK +jrF +jbK +mNz +mSy +aTK +aJJ +uqE +cwO +mYR +nUq +ccN +lUz +aTK +gPg +sWc +uZq +sVB +ouJ +kkx +yeA +ijv +bnQ +pKJ +hXU +qMT +tIK +cdz +kJA +pmV +bnQ +vNt +gky +fuh +fGt +ihX +wop +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(97,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +pAT +pAT +cOz +ujN +wNJ +wNJ +wNJ +wNJ +wNJ +tMb +tMb +vED +tMb +aTK +uQI +pLH +aTK +aTK +aTK +aTK +aTK +aTK +wsS +uDK +sMw +gzF +duB +kyz +anr +puL +bnQ +gTT +eJT +bce +rDP +vqc +scf +wIz +bnQ +gHP +gHP +gHP +gHP +ihX +wop +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(98,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +oAy +hGM +uYw +uYw +uYw +uYw +uYw +uYw +uYw +nKE +pAT +aNs +pgC +ujN +wNJ +jXl +tdi +gbE +wNJ +tXM +kaS +rjh +pnx +fBs +gku +jhq +eMM +bXn +iUf +vut +ePs +coP +ngE +gGx +thx +uYL +iNN +gZs +gZs +xWz +bnQ +qch +tco +vDK +dHv +lFj +qWy +cLV +bnQ +vKg +nsd +mIT +gHP +ihX +wop +wop +wop +abk +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wZR +lCZ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(99,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +coH +uYw +uYw +uYw +uYw +uYw +uYw +uYw +vSo +pAT +saO +jwX +ujN +wNJ +hQO +weF +dlr +wNJ +pgt +wCk +czG +wuP +weD +bqW +xim +bWo +idD +gVb +pUW +dYW +coP +cHZ +awW +tAW +sVB +syi +xDA +pjW +cfL +bnQ +nRf +pUG +lpg +rDP +sbs +mxv +wIz +bnQ +qfs +iyA +uoK +gHP +ihX +wop +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +tOt +tGg +gSd +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(100,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +aTh +coH +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +pAT +qbF +xqA +qpM +wNJ +wfJ +acV +kGw +wNJ +ayD +hzR +vuA +pvO +nYj +vuA +mSl +eMM +bXn +hyA +sat +xPF +coP +aGj +mse +vsB +qgo +qgo +qgo +qgo +qgo +bnQ +uJR +iTH +eKw +kOi +ijP +akZ +mBp +bnQ +oUp +med +lbF +gHP +ihX +wop +eap +wop +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(101,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rXt +lSK +hCT +uYw +uYw +uYw +uYw +uYw +uYw +pAT +pAT +pAT +ujN +ups +pCd +wNJ +smx +rTD +hhg +wNJ +ayD +hzR +oqA +vcH +gyq +gyq +gUO +jEl +coP +coP +coP +coP +coP +pEw +xTl +vBw +qgo +tfs +kJO +qMb +qfK +bnQ +oGC +wsu +eqc +vls +kMu +fbM +cKH +bnQ +oNi +bvK +uYU +gHP +vxW +wop +wop +wop +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(102,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +wWV +wWV +gLV +wNJ +wNJ +wNJ +mxf +vnr +aHo +wNJ +pgt +rQg +oqA +hKb +gyq +gyq +gUO +jVo +psd +xuw +iAD +nlW +gvD +fnv +xoa +wib +lGO +jIQ +aWu +lPV +rev +bnQ +dfK +xLL +dfK +dfK +dfK +dfK +dfK +bnQ +iGy +kVd +kVd +gHP +ouq +rXn +wop +wop +wop +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(103,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +wWV +qtq +nvX +wNJ +mGe +hYm +xFp +ugQ +uUK +wNJ +auE +hzR +kmK +lTI +kgk +kgk +uFe +lDX +cwu +gdN +fqh +gdN +gdN +qda +eiO +lAT +qgo +oQn +wjk +bSE +aJD +dNz +hfc +aCl +rYJ +yly +xQE +vRg +aCp +iZs +tVm +tMU +fZM +dNz +jmN +lln +sTL +nsm +wop +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(104,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +ufa +ufa +nvX +wNJ +klJ +xsT +xrW +uvE +vME +oQE +sYX +ekc +aLS +hmT +ygp +pLl +nsl +axZ +uBB +pJy +aTI +nuE +nuE +ozl +uMF +aZX +ibQ +ian +dBG +ldQ +sgv +dNz +mQl +cHR +lCb +aYX +cfQ +aJv +bKi +gTN +uNn +hdN +mjB +daa +kPc +iWF +ecL +fwh +qoq +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(105,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +xEA +ncz +nvX +wNJ +wod +qkA +uRI +tBy +vyI +wNJ +hhP +fmq +ctJ +qNK +kmO +kxv +kVi +vuI +qNK +aCM +iAD +oaH +cgD +fnv +suy +uBb +giS +dyT +qYU +xyq +giS +dNz +mby +wLC +rcN +dVD +wJA +ddI +bmB +jWw +cdG +wJA +xpM +dNz +rMx +peH +ecL +kLd +glU +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(106,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rXt +akj +uYw +uYw +uYw +uYw +uYw +vSo +wWV +wWV +jWL +jWL +geL +wNJ +usl +epF +nSa +lts +rsv +wNJ +oxG +oxG +wjj +vXm +oxG +nNj +qYS +eFv +xtX +gRj +eFv +eFv +obe +sYq +xeO +rUl +dIp +wGZ +cvV +vSg +pCG +dNz +tEi +sIl +gNW +gNW +gNW +gNW +kjw +gNW +gNW +gNW +gNW +qSx +lrY +bso +szJ +igz +glU +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +sZT +puo +gSd +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(107,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +sXd +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +czJ +dmd +nvX +wNJ +wNJ +wNJ +tjC +tfe +wNJ +wNJ +owB +fOg +uvV +oFb +oxG +pYT +aCw +eFv +tRI +oIh +oVS +ybQ +eFv +bNJ +wUq +nlc +sxF +vbh +qVf +wWk +ksI +hHv +fIg +jjV +gNW +okg +wNF +wNF +ncM +qdg +wNF +djH +cZc +qSx +cNo +jJA +ecL +ppn +bJC +wop +wop +abk +uYw +uYw +uYw +uYw +uYw +wZR +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +nvI +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(108,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +lhg +akj +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +ufa +ufa +nvX +lYw +fZy +nsI +gUV +mcO +dBw +gzs +oZh +jms +rBA +jrD +oxG +apm +fef +eFv +oto +uNG +edi +rhi +eFv +ucY +xTl +mfx +bBL +atj +vJQ +bOt +tud +swD +xZd +gaA +gNW +vUQ +gMC +kWG +fZL +byi +kWG +qeg +tST +qSx +xiV +jJA +ecL +fwh +cmk +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(109,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +sXd +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +qJj +dmd +nvX +sUC +fZy +nOL +gUV +mcO +xzY +gzs +cdk +fOO +uvJ +xNg +oxG +saI +knz +eFv +hvZ +pnD +ijx +syx +eFv +top +vcA +wpk +dIp +nSA +biG +rIc +wPp +dNz +sDo +gaA +gNW +bcI +uIc +gKz +fZL +aIU +aIU +fyN +kcn +qSx +tkY +rhy +eFZ +fwh +rYW +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +wZR +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(110,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rXt +akj +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +wWV +dmd +nvX +lYw +fZy +oYh +gUV +lel +iMy +gzs +aKt +cDS +toD +qJo +oxG +nbP +xJH +eFv +sKH +vbi +vbi +vbi +eFv +fIJ +vcA +aZX +fIj +tiA +dgh +aRv +arb +fIj +vlx +hnx +gNW +uoZ +jPh +uGS +iNo +aIU +aIU +fyN +gPJ +qSx +fns +jmN +eVI +lty +wop +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +dnB +uWB +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(111,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +coH +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +jWL +mRL +jWL +fZy +qfk +ovG +soV +geU +gzs +oku +rrZ +tvu +dwo +oxG +cxA +eFd +wPL +ebG +fhh +opF +eCe +sfH +nSY +vcA +aZX +fIj +gnL +dCx +cGg +pqK +mBz +cBf +ibv +gNW +ipu +byi +qeg +gbC +aIU +aIU +fyN +fIG +qSx +jVT +nwj +jVT +wop +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wZR +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(112,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +nHd +kda +kqT +fZy +twY +jVf +eCo +dmw +gzs +wjj +wjj +wjj +gor +oxG +rJu +twx +kmZ +gSC +eDM +lxg +cWt +sfH +veV +sXI +hlc +nbG +hfH +egW +cRT +wfW +vHa +gET +izl +gNW +bcI +fGI +aIU +gbC +aIU +aIU +fyN +seF +qSx +bXc +jmN +ihM +nPA +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(113,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +myD +imi +iqy +iir +yhF +bvt +fCA +aGi +fFC +aND +aND +aND +ctD +cEx +kyf +lTT +bev +eNk +eNk +eNk +eNk +eNk +xQZ +rBp +vaJ +kdA +hba +nfJ +qjc +bih +iCF +sDM +cFh +gNW +vUQ +fGI +aIU +gbC +aIU +aIU +fyN +tST +qSx +xDk +jmN +rYX +rYX +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wZR +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(114,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +coH +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +rSU +gXw +vjl +fZy +wOA +vAU +kEk +pLK +nHF +gat +bON +bON +bON +bON +nOt +itJ +cQn +ikg +pNp +eDJ +aYH +eNk +mCs +wqA +vhK +fIj +gIx +sGZ +uyI +mBz +mBz +mYD +jxI +gNW +bcI +uIc +eCZ +gbC +sDx +aIU +eCZ +seF +qSx +dtn +jmN +xrw +tVg +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +sZT +orR +uWB +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(115,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +xdF +hCT +uYw +uYw +uYw +uYw +uYw +uYw +vSo +wWV +wWV +bAO +aTL +kZI +fZy +qJO +rhT +sVf +anW +fZy +rKv +aiP +sZU +qnF +kTe +hAB +wAZ +kXW +pOm +jUZ +ghd +gEm +mLQ +pno +awP +psO +fIj +fxV +nib +aYJ +mBz +kzH +xRO +jXb +xUF +pfV +rgN +rXr +vzO +tzU +jMM +hZK +kQA +sIv +rYX +jmN +mPD +cHK +wop +wop +abk +uYw +uYw +uYw +uYw +uYw +wZR +vlW +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(116,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +kGU +imi +vjl +fZy +fZy +fZy +hwm +fZy +fZy +odS +odS +odS +iQR +xTj +hAB +eYc +bxG +cjp +kgI +mMm +czQ +eNk +sPu +vcA +ssT +fIj +kru +lWO +msn +mBz +gJH +njH +lKv +gNW +sNT +oLF +dNN +hnB +lxZ +xKw +dpq +nPt +qSx +gHP +gPD +jVT +jVT +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(117,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +oSZ +tnm +hGM +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +heT +dtY +vTj +atK +odS +iAQ +iQG +wlE +cBP +kbt +cIH +odS +wLX +oru +jXC +oZs +cXu +cjp +xjf +tFi +xHI +dou +nSY +vcA +iZZ +fIj +mBz +mBz +mBz +mBz +yly +fxq +sIl +gNW +nCl +xRf +fcT +fEX +bGO +vso +emi +pfq +qSx +xpU +jmN +qjQ +ygQ +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +wZR +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(118,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +cBU +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +wWV +djw +uyd +pmJ +odS +skm +rtU +uVD +wkA +xHM +eHe +odS +uEl +jwx +hAB +rom +qxz +eNk +mdp +uxv +iVe +eNk +ccO +vcA +fQk +bdI +stI +csD +csD +jRa +isu +eKv +sIl +gNW +xEk +qby +cbd +ofJ +lUa +qCV +wyp +kaf +qSx +xaG +jmN +sXg +sXg +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +nYS +uWB +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(119,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +wWV +jWL +jWL +ojR +odS +iia +uUc +iKt +qqN +hNp +cIH +odS +eAz +rHE +att +cHN +rHE +eNk +eNk +eNk +eNk +eNk +sbL +htW +xIl +jLB +jPx +piK +diG +aYy +gKT +sDM +sIl +gNW +ohy +vNM +nIu +qOG +jiU +xAH +gNW +gNW +qSx +pVD +jmN +mmm +rHA +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +wZR +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(120,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +wWV +tyl +gPZ +eIv +odS +nGT +hUq +vqL +lyu +hTO +cAu +ndj +fxl +sUP +tiB +bfT +sVd +vRd +nCh +xVO +lGG +eht +bXJ +vcA +mcD +jLB +rXw +iTQ +iOy +ufo +isu +ajl +shV +gNW +gNW +gNW +gNW +gNW +gNW +gNW +gNW +bcL +dNz +lfH +jmN +iix +joo +wop +wop +uYw +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(121,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +xdF +hCT +uYw +uYw +uYw +uYw +uYw +wWV +wWV +wWV +wWV +vPu +klQ +hVf +odS +fIn +lEq +kso +lMR +pGF +xJT +cVc +hiT +krm +qgW +tHC +tdY +tdY +tdY +vYP +wtP +mbg +iIC +akd +sdr +qKL +syu +tiK +hCb +ikC +pId +hTm +oax +ntZ +ntZ +eMY +ntZ +wFB +dNz +ljn +aGh +bcL +dNz +lUW +jmN +ocG +wyx +wop +wop +wop +uYw +uYw +uYw +uYw +uYw +wZR +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(122,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +wWV +wWV +wWV +vPu +mxG +gnR +odS +uVD +uVD +uVD +enZ +rAC +hKN +ozr +hiT +ewO +oaQ +ydu +hwW +qmG +hoJ +iMs +iVt +mBf +cll +aSj +gJE +bdI +vXb +hVS +hSx +rQA +isu +nqO +uCO +hJT +hJT +hJT +uIe +fFs +aIi +tAK +mEj +aqT +dNz +gHP +dOl +jVT +jVT +wop +wop +wop +uYw +uYw +uYw +uYw +uYw +dnB +uWB +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(123,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +vSo +wWV +aGP +jWL +jWL +jWL +jWL +ojR +odS +odS +odS +ekY +lxj +wNO +dOd +lyO +xzT +wZC +oct +wTA +sxv +tDw +oSE +hBo +mpg +eht +taj +cxv +aOt +nOV +nOV +nOV +nOV +nOV +nOV +thP +uwG +ivB +ivB +ivB +onW +ivB +ivB +jHS +dNz +dNz +dNz +rYX +jmN +gBq +wzQ +wzQ +lUy +wop +uYw +uYw +uYw +uYw +uYw +wZR +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(124,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +okr +ptu +fBi +dDW +gAI +eYs +mhS +lYw +noM +alw +rUv +noM +noM +noM +hkN +obk +gqS +cex +qlu +qlu +qlu +mjZ +cex +cex +bNJ +sHi +ftF +nOV +flu +hPF +rRq +bmc +nOV +uPb +ydR +ivB +qzP +mcU +vCu +xdk +iyO +jHS +evB +qBc +lnu +lnu +vho +jVT +jVT +sSN +jVT +wop +abk +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(125,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +rLZ +jWL +mkc +jWL +gAI +ufa +jiD +gQN +noM +szp +iPQ +uIu +hUG +noM +dbc +pUb +vkV +cex +jQo +cyV +eYo +smr +grD +cex +hFu +vcA +aZX +nOV +lEe +xPG +ohE +qpw +odH +jSR +hys +ivB +uxe +pfR +jDi +obZ +pWP +jHS +kbM +gcb +rYX +kfm +wnz +jVT +rta +tZC +xnf +wop +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(126,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +frN +jiE +lCV +jWL +jWL +xEA +eYs +mhS +noM +bbg +qAw +wbm +wbm +jYV +jVJ +fdZ +xYo +cex +hSE +jXE +mBb +juu +hJd +cex +hOL +rjg +aZX +nOV +kIz +cbL +pjj +nqC +bZp +uWi +vtl +ivB +cLi +nah +aEv +dHi +qvI +jHS +hQA +tEY +tLc +mac +jiA +jVT +gPd +tZC +sCB +wop +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(127,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +lRx +nwZ +kgE +mZt +mZt +mZt +xdv +rwx +noM +sZq +bmi +cpv +sLE +noM +fmK +xEc +vkV +cex +cmJ +jXE +sDT +wtA +sPa +psk +iFx +fjl +hlc +iVZ +sYg +gKN +aKe +iQh +nOV +fTV +jWb +ivB +edD +rSl +tAz +uzq +kTS +jHS +nGi +rYX +fBg +jVT +jVT +jVT +lUy +tZC +rYX +wop +uYw +uYw +uYw +uYw +uYw +wZR +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(128,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +coH +uYw +uYw +uYw +uYw +uYw +uYw +wWV +iDU +brE +vrS +pGn +sMx +mmR +jkq +eFf +noM +noM +noM +noM +noM +noM +iVA +eRH +mmK +cex +iTl +jXE +kKC +jmu +rkb +psk +mJj +toV +sbY +oJw +vri +kyt +hxU +cfk +nOV +jLA +mXf +ivB +dsg +qfB +rEc +fCD +bpY +jHS +bnz +kIT +ejO +iTh +ptr +jSW +jVT +jVT +eJR +wop +uYw +uYw +uYw +uYw +uYw +tOt +ixA +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(129,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +oAy +hGM +uYw +uYw +uYw +uYw +uYw +wWV +fGs +unX +kjg +pGn +dtt +pGn +pGn +mYL +rQO +tmr +qgH +oeV +fGa +jWL +cOl +eTF +utD +cex +fhu +fjh +xrZ +lez +vwI +cex +lMP +bFR +lGJ +nOV +vNe +kxG +arQ +rtR +nOV +dNz +dNz +jHS +jHS +jHS +jHS +jHS +jHS +jHS +nGi +oIZ +jSW +jSW +him +jSW +dqa +fkJ +wzQ +wop +uYw +uYw +uYw +uYw +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +eML +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(130,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +oSZ +tnm +tnm +cxm +tnm +tnm +wWV +vNC +oLA +elS +pGn +xYH +pGn +pGn +mZt +mZt +mZt +wVA +sKi +lKL +jWL +mbd +jkL +mbd +cex +cex +cex +cex +cex +cex +cex +iAj +tDx +mYP +nOV +nOV +nOV +nOV +nOV +nOV +qqk +lzG +ybX +epe +epe +lzG +aFM +eDq +jVT +nGi +lzC +jSW +jSW +wMB +jSW +xsi +npA +wzQ +wop +uYw +uYw +uYw +sZT +tnm +tnm +puo +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(131,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +rZL +rZL +cBU +tXe +tXe +nYD +nYD +nYD +pGn +pGn +vxn +pGn +pGn +mvy +mvy +pGn +mZt +aSx +lKL +hZp +kHX +oGe +vRA +axL +jyO +dfd +ipo +iYy +haW +wnX +vas +mJq +vSR +qwk +kKs +leG +dWF +oyP +wZw +vhv +kFL +lVJ +dWF +ePa +fDQ +fDQ +wXB +lqa +nzv +lzC +jSW +jSW +irS +jSW +jSW +nhv +nhv +nhv +uYw +uYw +uYw +wZR +vlW +rZL +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(132,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +soS +nYD +nYD +nYD +nYD +pGn +nKU +qSv +xDX +pGn +pGn +pGn +vuc +mZt +dlI +lBW +leG +mlT +uwk +jdy +ccq +eGU +sEU +ooZ +kgb +mCs +tNv +quV +kzx +bbI +iiZ +gnd +hZp +nZi +aOj +iYa +wtw +rYX +vDO +jVT +nIK +jVT +jVT +gHP +jSW +jSW +jSW +jSW +qTm +mHu +ugb +jSW +nhv +nhv +nhv +nhv +uYw +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(133,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nYD +nYD +tRF +uQe +lyS +kUD +xMn +gtv +rSm +lLL +rFc +pGn +gaW +sEn +sEn +sEn +sEn +jmE +iVg +iVg +xia +sTU +sTU +hZp +hZp +aOx +dCA +aCb +oYe +gCz +hZp +hZp +aBA +rYX +jVT +lSb +rYX +jVT +jVT +hLx +rYX +qhC +gHP +jSW +gPR +nHR +sjU +ral +wJE +aRp +exk +hKA +bjR +nhv +nhv +abk +uYw +wZR +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(134,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nYD +nYD +rDs +ulB +pNE +qbH +esB +cXW +lPa +uHU +aeI +pGn +gaW +idw +cWz +xhA +sEn +sWY +cPM +wTa +xxp +mCD +koE +bkO +qAX +qAX +lMu +qAX +vaH +qAX +qAX +bkO +jvP +rYX +wop +sLT +iMh +bwo +eKY +meC +rYX +qhC +gHP +jSW +aqJ +cMM +qjv +xEB +alA +iSe +dxN +vdE +uoH +nhv +nhv +sZT +tnm +puo +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(135,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nYD +nYD +xZV +sMp +mUQ +efw +hHX +uZJ +rSm +nDN +vBP +pGn +gaW +eWh +ewz +cRc +sEn +srn +rFB +tuN +beA +mvW +gSp +bkO +bkO +jdd +pji +qLt +sED +lFT +bkO +bkO +xpU +rYX +wop +sQz +qPz +sAG +xVR +rYX +rYX +lUy +gHP +jSW +bZU +hlM +sjU +bDp +rwV +kcf +gjc +gZM +iNW +nhv +nhv +jVe +rZL +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(136,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +nYD +nYD +pGn +pGn +pGn +rvq +idq +qhu +ioi +ioi +ioi +ioi +gaW +ocw +qTB +cyn +pgw +gqm +hHA +vhy +rPu +mvW +tBF +bkO +vId +sNP +kty +vlL +iuu +owx +umI +bkO +mFl +rYX +wop +nan +mgL +wop +fAD +rob +rYX +oSI +gHP +eSY +eSY +eSY +sbX +tDf +mfl +dxa +jSW +jSW +jSW +nhv +nhv +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(137,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +tXe +nYD +nYD +pQt +hck +bbd +vzD +act +dFw +gks +jjo +uJv +ioi +gaW +oAe +akE +ssk +sEn +eAP +mLb +dcz +jmx +anQ +nZW +bkO +cMf +fGb +fGb +hlU +xCs +iBA +llT +bkO +wop +wop +wop +sQz +bkQ +wop +wop +wop +wop +wop +gHP +eSY +kDS +nUp +ivd +hVE +cTP +lUI +pTs +vPd +hYX +nhv +nhv +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(138,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +idA +tXe +tXe +nYD +nYD +qzM +iLZ +cHJ +fIa +fbL +cCD +gks +uVF +gBi +ioi +ouw +ouw +ouw +ouw +ouw +rSO +rSO +rSO +rSO +rSO +rSO +bkO +tPO +koW +lRm +czD +bqI +fGb +meO +bkO +wop +wop +wop +xaa +nDB +wop +wop +wop +wop +wop +wop +eSY +qwN +msZ +ivd +tIa +rxO +moz +mUM +alL +sXh +nhv +nhv +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(139,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +eLH +nYD +nYD +ciM +tJJ +lyS +ceS +kvu +uzc +sCv +lis +bGR +mDi +uYw +ouw +ouw +ouw +ouw +rSO +rSO +rSO +rSO +rSO +rSO +bkO +mmH +ycr +vbU +vbU +wDa +iFF +dHW +bkO +wop +wop +wop +wMJ +uYw +lNn +wop +wop +wop +uMt +uYw +iuW +rzl +vvb +vCK +pZT +hXG +tIm +exk +rhV +wFa +nhv +nhv +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(140,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +soS +nYD +nYD +nYD +pGn +pGn +rjw +gix +lpG +kgN +hNC +hOu +ioi +uYw +uMt +tng +oyg +uYw +uYw +uYw +uYw +uYw +bGC +nxJ +iiu +isZ +tfy +gUX +nPX +bXW +auV +isZ +iiu +nxJ +mQn +nxJ +nkV +uYw +uYw +tng +oyg +uYw +uYw +uYw +dwg +vLG +daM +bQa +lCR +tCL +lkC +jSW +jSW +nhv +nhv +nhv +xsf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(141,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +tXe +hFb +fXX +hPf +vdd +uzC +mnp +uzC +pCm +wGK +nKq +uAU +nYD +viI +tnm +tnm +tnm +tnm +tnm +tnm +tnm +tnm +tHF +hGM +uYw +qrY +qrY +oJb +oJb +oJb +oJb +oJb +uYw +sZT +tHF +tnm +tnm +tnm +tnm +tnm +tnm +tnm +tnm +hGM +nhv +iPp +khC +lJD +bEV +hTf +egI +hTf +hVF +pHq +vGc +vcl +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(142,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +tXe +eCf +dJE +kro +sIr +sHp +sIr +vWT +sIr +sHp +aPV +nwG +nYD +jVe +rtT +rZL +rZL +rZL +rZL +rZL +rZL +rZL +rtT +oAy +hGM +uYw +uYw +uYw +uYw +uYw +uYw +uYw +sZT +puo +rtT +rZL +rZL +rZL +rZL +rZL +rZL +rZL +rtT +oSZ +nhv +cFV +jxp +lEZ +bhi +nwu +bhi +lEZ +bhi +pvs +ujx +nqK +tXe +gSd +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(143,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +tXe +pwv +nYD +aWQ +aWQ +aWQ +nYD +aWQ +aWQ +aWQ +nYD +qaM +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +oSZ +tnm +tnm +tnm +tnm +tnm +tnm +tnm +jVe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +tXe +nhv +dzD +dzD +dzD +nhv +dzD +dzD +dzD +nhv +fRZ +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(144,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +tXe +dxi +rtT +rtT +rtT +erp +rtT +rtT +rtT +dxi +tXe +gYE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +tXe +iAm +rtT +rtT +rtT +erp +rtT +rtT +rtT +iAm +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(145,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(146,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(147,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(148,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(149,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(150,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(151,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(152,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(153,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +jhc +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(154,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(155,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(156,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(157,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(158,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(159,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(160,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +cUY +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(161,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(162,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(163,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(164,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(165,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(166,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(167,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(168,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(169,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(170,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(171,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(172,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(173,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(174,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(175,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(176,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(177,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(178,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(179,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(180,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(181,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(182,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(183,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(184,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(185,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(186,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(187,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(188,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(189,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(190,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(191,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(192,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(193,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(194,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(195,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(196,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(197,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(198,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(199,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(200,1,4) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} + +(1,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +xCn +"} +(2,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(3,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(4,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(5,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(6,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(7,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(8,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(9,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(10,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(11,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(12,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(13,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(14,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(15,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +fpE +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(16,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(17,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +xNz +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(18,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +rpE +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(19,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +rlU +hbd +jEd +nTr +cFl +tow +bZF +hbd +lCZ +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(20,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rlU +nTr +cFl +bjD +nvi +clF +xbE +oBC +utP +suJ +cFl +tow +lCZ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(21,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +rpE +rpE +rpE +nTr +gMW +cVI +xPv +iYp +qzL +eKr +uTE +iYp +jBp +cVI +bPX +tow +rpE +rpE +rpE +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(22,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +iIe +cFl +cFl +cFl +mYF +iYp +qzL +xpg +iYp +etw +tqW +sij +iYp +oCv +uTE +iYp +tGd +cFl +cFl +cFl +hgL +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(23,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +aaI +uYw +uYw +uYw +uYw +iYp +nYM +gck +flh +ugM +edw +tSV +qZF +tny +jYJ +iYp +uYw +uYw +uYw +uYw +kHz +lCZ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(24,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +nTr +mYF +dYA +wbc +cVI +xPv +iYp +mZk +xIb +mdA +cjz +vAp +dhc +lbY +hAt +nbr +iYp +jBp +cVI +tdh +gWF +tGd +tow +lCZ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(25,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +nTr +mYF +uYw +leM +iYp +qzL +xpg +iYp +ePj +pvP +pSk +deT +aoj +scS +sNg +vmy +twV +iYp +oCv +uTE +iYp +leM +uYw +tGd +tow +lCZ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(26,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +iIe +mYF +uYw +uYw +iYp +iYp +jhJ +jLf +gHl +gve +pvP +bEl +aoj +lJJ +aoj +klK +tcU +hhW +iud +qIs +wOg +iYp +iYp +uYw +uYw +tGd +hgL +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(27,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +aaI +uYw +vSo +iYp +iYp +iYp +awr +pyr +xaV +gmH +mbH +dpI +oXQ +aoj +eAo +qZg +bqA +oTM +lFg +ibE +sMW +kkC +iYp +uYw +uYw +uYw +kHz +lCZ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(28,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +nTr +mYF +uYw +uYw +iYp +iYp +iYp +kBZ +gKX +cpw +irE +wjN +crm +kvc +tqE +tSK +gtq +oJx +liY +ctC +fto +hrr +iYp +iYp +ydZ +iYp +abk +tGd +tow +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(29,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +nTr +mYF +uYw +uYw +iYp +iYp +iYp +iYp +qEa +vgF +wRm +ylP +hYB +gpg +xnM +hnw +xnM +kJw +hJk +kuV +goG +rXM +oGV +iYp +iYp +hEw +iYp +iYp +uYw +tGd +tow +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(30,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +iYp +iYp +iYp +iYp +iYp +iMF +fQJ +ylS +keJ +soJ +uaQ +pLd +vjE +peF +ygt +jpT +xTP +iJp +fuA +uVs +iYp +iYp +imR +iYp +iYp +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(31,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +vSo +eKO +eKO +xAE +xAE +xAE +xtu +irV +qBk +nAC +nAC +wjN +gjK +bWT +bWT +bWT +lbg +oJx +nAC +nAC +ndx +gEz +jtD +jZr +nTa +iYp +iYp +iYp +abk +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(32,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +eKO +xAE +xAE +cMI +xWt +xtu +nig +nbj +kdr +miL +bKC +gfq +vZK +gkg +eWN +qMJ +nCN +bUQ +jhl +dJo +vWC +xtu +hcG +myg +iYp +iYp +iYp +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(33,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +rDD +eKO +eKO +xAE +hqn +oXS +ruz +xAE +xtu +xtu +xtu +xtu +nVe +eHy +ixU +xtu +nVe +gHx +ixU +xtu +xtu +xtu +jEq +jEq +hcG +dPg +iYp +iYp +iYp +iYp +uGf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(34,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eKO +eKO +xAE +daV +obT +mvC +xAE +pfE +fqm +fNY +fVO +ooC +tyJ +sUA +ipU +nRD +kXz +fIZ +fVO +tFO +bBa +byQ +aqI +aqI +pUi +aqI +aqI +aqI +meJ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(35,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eKO +eKO +xAE +dqF +ouo +sIt +csC +jGV +sVl +pYB +gdD +bLk +uRn +mND +gnX +mND +uRn +idk +gdD +gqW +dzv +xWl +aqI +gRb +uXX +nsD +tRB +aqI +meJ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(36,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wuh +wuh +fMg +fMg +fMg +fMg +fMg +fMg +ghZ +thi +tXp +sHE +aOo +uRn +mND +aWb +mND +uRn +dva +sHE +dCW +ayJ +xgB +aqI +sRS +qax +gVj +aRR +aqI +meJ +meJ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(37,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wuh +wuh +fMg +fMg +kgj +xSK +nwt +gVk +fMg +pVA +xhU +gpE +hMO +cEB +nrA +jbO +imx +jbO +eKb +atl +hMO +lHs +edA +ccS +hIs +hfG +qax +wWz +vbQ +aqI +meJ +meJ +meJ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(38,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wuh +wuh +fMg +kKI +jSF +jSF +bnt +twA +vKY +cbV +thi +ybl +fbE +tlv +dao +mND +vRa +mND +jBt +eHt +fbE +arO +enc +qfv +aqI +fYV +uuV +gVj +kXI +aqI +meJ +meJ +meJ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(39,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wuh +wuh +fMg +iQz +ejL +bLR +pow +oPZ +bQn +cbV +iah +isJ +plB +bFm +cpa +oFB +pQh +oBo +qie +jyG +plB +cbV +njQ +srp +qDO +xIW +fnX +qLx +scO +aqI +meJ +meJ +meJ +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(40,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wuh +wuh +wuh +fMg +dWA +qhg +bMD +gNM +cxd +fMg +dBh +gUj +dQq +fbE +fbE +plB +fbE +mxS +fbE +plB +fbE +fbE +tHc +gUj +cKr +aqI +aqI +aqI +wYr +aqI +aqI +meJ +meJ +meJ +meJ +tow +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(41,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wuh +wuh +wuh +fMg +twU +ows +oym +aIO +cQD +hXo +aoh +qWV +dJQ +wJP +bjf +cLT +nIS +iGZ +waK +tJs +gIl +wJP +knX +iah +iHc +kka +dqs +hBY +dXp +jky +vrx +bQU +bQU +bQU +bQU +kHz +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(42,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +bNd +bNd +bNd +bNd +fMg +jcn +xHY +bNB +muF +wIY +fMg +sPE +thi +qiM +wJP +xWY +pqy +pqy +bSJ +pqy +ulE +rLG +wJP +eCI +thi +aXK +kka +egZ +nkO +dXp +jic +adw +nDA +bQU +bQU +bQU +bQU +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(43,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +hbd +atx +aTh +hbd +lCZ +rpE +rtT +bNd +bNd +bNd +pHL +cBD +fMg +mrh +iPw +uwr +sJU +ybb +xgZ +cbV +thi +isJ +ivJ +bwW +wJP +kQX +hDf +eNZ +wJP +dAK +ivJ +cbV +bHf +daA +jpb +cGv +cGv +wJp +eXK +hXB +adw +pob +bQU +bQU +bQU +bQU +rtT +rpE +rpE +rpE +rpE +rlU +hbd +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(44,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +mrY +bjD +cFl +cFl +suJ +cFl +dGA +cFl +bNd +bNd +hlT +sLV +fuw +fMg +fMg +fMg +fMg +oAk +fMg +fMg +mSA +rxw +jQX +ivJ +tRS +qLJ +soD +qRS +bzm +iRF +ghY +ivJ +dXy +rxw +hsZ +kka +pDv +aTE +qGs +vIq +vIq +vIq +ptB +cKO +bQU +bQU +bQU +cFl +dGA +cFl +cFl +cFl +cFl +suJ +gOH +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(45,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wNm +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +iIe +bVu +uYw +uYw +vUq +vUq +vUq +vUq +vUq +bNd +bNd +dJO +nrI +nHg +xZN +fAC +tTy +wtg +fZb +whF +xZN +rut +iah +xgB +wJP +nza +cJV +vcT +abq +bWY +pZM +omG +wJP +rut +iah +wKO +kka +adw +kzm +khd +pDv +jFy +qRr +mKA +dZW +bQU +bQU +bQU +bQU +bQU +bQU +bQU +bQU +uYw +uYw +rvy +hgL +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(46,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +kAq +uYw +vUq +vUq +hRp +hRp +hRp +hRp +lLE +lLE +lLE +fkc +lLE +xZN +mZV +aDT +mSM +aRa +nNh +xZN +vZh +tsv +vZh +wJP +vSE +qDE +qDE +eSR +qDE +qDE +quf +wJP +vZh +tsv +vZh +sPt +sPt +sPt +sPt +sPt +sPt +sPt +mKA +iNm +bQU +bQU +bQU +bQU +bQU +bQU +bQU +bQU +bQU +uYw +kAq +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(47,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aaI +kAq +vSo +vUq +hRp +hRp +cDC +oqK +mZD +lLE +gdm +uYA +xTv +iRr +xRa +cac +njG +bgp +ueh +mtt +xZN +asI +iah +ybl +wJP +xrJ +trR +cfn +trR +cfn +trR +rVa +wJP +dwT +iah +oxa +sPt +qOH +uqC +nTu +jaq +jyr +sPt +qGs +vIq +noF +vIq +uHL +mnW +iQH +mnW +mnW +bQU +bQU +abk +kAq +kHz +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(48,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +kAq +uYw +vUq +hRp +hPN +clW +mkq +sAs +jfv +wJw +tWx +acf +jcg +vkI +qKw +tCO +tJz +cSp +qSZ +qfW +rZv +bkh +isJ +ivJ +phc +iRb +gJG +phc +dAQ +dpp +phc +ivJ +dXy +kAK +mzZ +mBF +hyc +nFk +dWS +tBS +tBS +sPt +sPt +gqH +gqH +gqH +fju +gqH +gqH +gqH +qWz +bQU +bQU +uYw +pAe +jtL +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(49,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +kAq +uYw +vUq +hRp +kVD +unH +ebs +jtY +lLE +rgK +eEi +uLi +qHZ +xRa +dZf +igN +fSV +qgC +eJL +xZN +uYf +rxw +jQX +ivJ +phc +phc +jzR +phc +kdq +phc +phc +ivJ +cbV +aOA +tAU +tpi +fdQ +eGC +pVK +qij +qij +ulA +sPt +gqH +iej +xmF +fvE +hyH +iFo +gqH +mnW +bQU +bQU +uYw +ghb +nbi +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(50,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +kAq +uYw +vUq +hRp +hRp +vXR +hRp +hRp +lLE +lLE +lLE +lLE +lLE +xZN +nPx +jhY +lyY +uaS +qqC +xZN +cbV +thi +isJ +ivJ +phc +bkz +iuv +phc +slu +kSG +phc +ivJ +cbV +thi +ybl +sPt +lQE +jdD +guH +wyt +wyt +lcv +acw +gqH +xMl +fbZ +bnI +mIL +jGr +gqH +mnW +bQU +bQU +uYw +rvy +tow +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(51,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +kAq +uYw +nzF +xjT +mVb +fzh +okN +usI +cDf +cDf +cDf +usI +abu +xZN +xZN +xZN +xZN +mrA +xZN +xZN +grY +iah +mPS +wJP +koy +jCI +uzk +jCI +uzk +jCI +ykD +wJP +lKi +iah +rNl +nPg +tfG +bvp +tzF +oWO +ncS +sou +bvp +gqH +ozR +bIo +sRF +gpv +oQJ +gqH +mnW +bQU +bQU +uYw +kAq +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(52,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +uAJ +kAq +uYw +nzF +xjT +fnn +aql +byA +sva +ryq +ryq +ryq +vTY +eym +twd +ote +bdj +epB +wGh +kLl +twd +dcK +uGA +srp +pJF +egd +dkg +vpr +egd +vpr +wPH +egd +pJF +scs +vtr +rNl +nPg +tfG +bvp +din +sxb +hLG +cGn +bWy +eBC +ayy +hKj +inh +aRF +xxk +gqH +oLi +bQU +bQU +uYw +kAq +dcy +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(53,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +kAq +uYw +jgT +ihT +ihT +ihT +oQi +xxZ +ihT +ihT +kpO +qrJ +eym +twd +fsb +wuI +bvG +dOA +lKZ +twd +cbV +iah +dDj +wJP +xwd +rbM +bQo +buY +aHE +bop +baI +wJP +tkF +iah +rNl +nPg +tfG +bvp +iFe +hgI +gBk +sou +kSk +gqH +doG +bIo +fyW +gpv +fdy +gqH +mnW +bQU +bQU +uYw +kAq +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(54,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +kAq +uYw +jgT +ihT +bJj +odw +rYC +rMW +sXy +ihT +fnn +qrJ +eym +twd +mPX +sPM +bHS +wGh +qjy +twd +dBh +thi +oxu +wJP +wJP +uAj +uAj +wJP +uAj +uAj +wJP +wJP +cHE +thi +iHc +sPt +hqH +wRf +jBi +keS +keS +hes +cyb +gqH +oiu +eFK +wme +oJi +hTi +gqH +mnW +bQU +bQU +uYw +pAe +jtL +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(55,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +kAq +uYw +jgT +ihT +bJj +iJr +kIx +dto +wDi +ihT +fnn +qrJ +tNI +naC +cBw +bin +yeN +iXM +cYQ +grR +aoh +vlO +iLG +tMH +tDL +eEC +tDL +vaQ +mvD +brB +vXn +efi +vXn +qbk +pbP +sPt +hZf +hqH +iHt +nZI +nZI +tXL +sPt +gqH +tPJ +dUh +tIt +jiQ +keA +gqH +mnW +bQU +bQU +uYw +ghb +nbi +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(56,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +kAq +uYw +jgT +ihT +bJj +eyO +tBT +rMW +rdU +ihT +kgu +qrJ +qiT +twd +dpX +jja +jja +jja +fqW +twd +uKr +cdt +nXn +juR +xSX +kQg +non +lzS +nYa +vAH +nYa +juR +vec +cdt +jQX +sPt +ojZ +uGm +vyo +fov +baT +qob +sPt +gqH +gqH +gqH +jwM +gqH +gqH +gqH +qWz +bQU +bQU +uYw +rvy +tow +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(57,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +kAq +vSo +jgT +ihT +ihT +bwS +cRr +rMW +xzh +ihT +qsO +qrJ +vhV +twd +gsv +fFd +knr +nFM +bAX +twd +bFP +adp +qfv +edu +edu +edu +edu +ffw +edu +edu +edu +edu +avN +pqU +lAk +sPt +ndi +rQf +pYj +dGi +njz +mLz +meu +oOZ +cVp +mnW +jVS +mnW +mnW +mnW +mnW +bQU +bQU +abk +kAq +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(58,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +sVS +eLG +nxJ +bOy +bOy +jaO +jaO +vtD +rMW +hOU +ihT +xjT +jcM +nWa +nWa +nWa +nWa +nWa +nWa +nWa +nWa +wPb +xaK +crs +edu +eJb +iSZ +lOo +fTk +eqV +mpw +qhU +edu +uAo +xaK +kuK +wjK +wjK +wjK +wjK +wjK +wjK +wjK +wjK +afT +kLp +iMB +rSI +trC +adw +nmr +bQU +bQU +bQU +uYw +jJa +dsp +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(59,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +rDD +djg +uYw +uYw +jgT +jgT +ihT +cQV +kWB +ggq +ihT +gLb +qrJ +nWa +mxD +jhF +abW +ton +wka +aqC +nWa +jil +omf +nbD +eAM +fEy +fwJ +lCm +jej +xNv +fwJ +vMB +eAM +iVf +kwa +tfP +hVv +bqv +ecS +qjX +vpe +qCv +dnV +hVv +dAF +hci +pjE +pjE +cLQ +luc +eIn +sLI +sLI +nxJ +nxJ +nvC +uGf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +oCi +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(60,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +aaI +uYw +uYw +jgT +jgT +ihT +ihT +nuD +uzL +ihT +uaL +sKJ +nWa +hxY +viz +dXc +dFQ +ozh +auv +rxI +iPd +haL +cOK +uCy +hpT +hJR +hbT +ckn +dNc +xpx +ssI +wNp +ioI +hvn +fPH +hVv +gUC +cFs +wgs +ijj +sKQ +jCW +vcO +mnW +iYD +vnl +adw +adw +nXH +bQU +bQU +bQU +uYw +uYw +kHz +gYE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(61,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +dCk +djg +uYw +uYw +jgT +jgT +ihT +ihT +jwp +ihT +uaL +qrJ +nWa +iPZ +wYJ +eyF +mpS +hxD +uoG +wXw +lyK +wjq +hFB +eAM +fHU +jFK +hTt +htx +jPS +jFK +mYI +eAM +dag +wjq +gte +hVv +hVv +hVv +iok +whD +ayl +xZG +hVv +vjQ +iYD +pmn +wdP +kzm +bQU +bQU +bQU +uYw +uYw +rGb +jtL +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(62,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +aaI +uYw +uYw +uYw +jgT +jgT +ihT +ihT +ihT +scz +qrJ +dqv +bfq +sNE +sNE +aap +jSg +cuI +nWa +pgS +rBV +cUU +edu +mEz +ria +mEz +edu +mEz +ria +mEz +edu +txC +fEm +cjn +spV +dzt +nQb +vaa +fBM +dYx +oXA +hVv +cOG +eOo +bQU +bQU +bQU +bQU +bQU +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(63,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +rDD +eMB +djg +uYw +uYw +nzF +nzF +nzF +nzF +deq +qrJ +nWa +pkC +tzL +cfs +bPB +iKu +pVU +bcs +lau +ccR +lds +eIr +aZj +pdE +kej +eYh +kbm +otE +ggf +eIr +tAr +bfH +qUp +wFO +fYA +vVv +iyk +dJs +nOh +rnX +hVv +jxv +rfT +shE +bQU +bQU +bQU +uYw +uYw +rGb +eMB +uGf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(64,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +cBU +aaI +uYw +uYw +uYw +nzF +nzF +nzF +hFV +qrJ +nWa +hxY +viz +dXc +nOi +iyC +uPY +vtp +oWT +oGs +gPl +lSl +gPl +rlH +pOE +tBz +pOE +brA +gPl +lSl +gPl +mbq +nwJ +dKh +fYA +udF +eNz +jCW +jCW +ckl +hVv +pKC +cQR +bQU +bQU +bQU +uYw +uYw +rGb +jtL +vlW +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(65,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +wtJ +qrJ +nWa +mAz +mFv +xTC +bkT +sBQ +qPp +nWa +tVN +xRB +fEo +dMK +dhe +eNR +tgM +xNH +klq +pMN +ygC +dMK +jLc +mZY +bzw +wjB +fYA +cNc +aCL +jCW +jCW +jGi +hVv +rfT +kNX +bQU +bQU +uYw +rGb +eMB +jtL +vlW +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(66,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aaI +uYw +uYw +uYw +vSo +nzF +nzF +jnY +qrJ +nWa +lqI +lqI +lqI +lqI +knS +lqI +uyQ +pbH +rBV +nwJ +uWS +sYx +cNK +hEI +bfH +nGl +wSK +lCn +uWS +pbH +gRU +hFU +aeW +fYA +mFj +gbM +vmb +fwG +har +hVv +hMV +ybs +bQU +bQU +eNw +jtL +vlW +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(67,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +uaL +sKJ +oeZ +rKy +jTJ +fIc +kWA +qfE +eCj +oeZ +ohM +wjq +pnU +jnT +ceF +jsr +pbH +alU +fJM +tmy +kwG +jnT +qRX +dTq +rLb +qFy +xnd +hVv +gFW +pmR +weT +qpy +hVv +rfT +kFE +bQU +bQU +kHz +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(68,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +uAJ +uYw +uYw +uYw +uYw +nzF +nzF +oUW +qrJ +oeZ +sSO +ooq +pve +uhD +iEB +nNr +jMp +kHQ +mLR +nwJ +jnT +out +fua +pbH +alU +fJM +khQ +vMl +jnT +pbH +mnV +qBa +pXR +pXR +aNp +aNp +aNp +aNp +aNp +cOG +rfT +shE +bQU +bQU +dcy +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(69,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +fnn +tZw +oeZ +kjo +dOh +ybq +mxg +rLR +lrC +oeZ +iFD +aiw +eJs +jnT +xlV +lvy +bzF +bfH +soR +kbe +rpY +jnT +jSl +aiw +dze +pXR +nel +buN +pXR +vWW +hDo +pXR +xKT +rfT +shE +bQU +bQU +jtL +tXe +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(70,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +uoJ +qrJ +oeZ +sZs +vWv +xOp +sul +qnA +hEt +tze +tze +tze +tze +tze +tze +tze +beN +aVq +kaX +dmO +dmO +dmO +dmO +dmO +dmO +pXR +upT +wpU +pXR +iPW +uGq +pXR +aMC +rfT +jic +bQU +bQU +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(71,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +wtJ +qrJ +oeZ +fmH +kCE +voo +pOS +qVG +aTp +tze +rNx +rNx +rNx +rNx +rNx +tze +uIv +bfH +bgw +dmO +mwe +gGi +ceI +bJm +tAe +pXR +pXR +jUL +pXR +xPU +pXR +pXR +qvx +rfT +jic +bQU +bQU +tXe +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(72,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +hpc +qrJ +oeZ +tqM +hae +hIT +wdG +vrG +oKT +tze +rNx +rNx +rNx +rNx +rNx +gDd +eea +nTl +iCf +oxC +kQl +ohw +ppC +bTJ +ppC +rBU +boa +ubB +nfL +wuR +vlq +lOI +hcS +kaG +kFE +bQU +bQU +eLH +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(73,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +uAJ +uYw +uYw +uYw +uYw +nzF +nzF +bie +qrJ +oeZ +fea +uJh +ayB +wdG +sIm +mbV +tze +rNx +rNx +rNx +rNx +rNx +gDd +htB +wjq +hFB +tqf +lZj +aDA +rIb +mRr +iyv +pXR +xVT +oaf +oTb +dgN +psn +pXR +fDI +rQc +jic +bQU +bQU +tow +tXe +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(74,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +uET +sKJ +oeZ +xiW +qfE +qfE +wdG +gxA +tYJ +tze +rNx +rNx +rNx +rNx +rNx +gDd +eea +alU +mQL +tqf +lZj +oLd +ftd +mRr +chE +pXR +txv +cSC +twJ +loY +vBb +pXR +nkO +rQc +pmn +bQU +bQU +tGd +tow +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(75,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +wsF +qrJ +oeZ +rLa +lPz +qfE +wpi +uNk +oMx +tze +rNx +rNx +rNx +rNx +rNx +tze +lFi +bfH +bzw +tqf +lZj +lZj +ftd +rjS +rbn +pXR +voQ +fEe +eAa +oaA +qWK +pXR +vVc +rQc +pLe +bQU +bQU +uYw +tGd +tow +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(76,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +vSo +nzF +nzF +nzF +ksp +vcd +vcd +vcd +dqi +vcd +vcd +vcd +tze +tze +tze +tze +tze +tze +tze +beN +aVq +beN +dmO +lZj +lZj +ftd +bxl +nqM +pXR +cVF +aJi +uhY +vwn +dpn +pXR +vah +rQc +shE +bQU +bQU +abk +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(77,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +hNZ +qrJ +vcd +gIR +oTP +sxM +jit +oNj +baF +vcd +wAh +mUO +sMj +rPt +nSy +wrR +fZS +jDK +ltN +tse +tse +tse +ahU +tse +tse +tse +snt +vvp +snt +snt +snt +snt +kka +wpL +bQU +bQU +bQU +uYw +uYw +kHz +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(78,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +uAJ +uYw +uYw +uYw +uYw +nzF +nzF +jRJ +sKJ +vcd +jPs +bkN +fYz +mpK +gnO +xZS +vcd +cVB +rhF +rVS +bqD +gZf +wrR +clD +kTQ +hAJ +tse +lMi +rNK +lOa +wFQ +oMY +tse +cMb +xRc +iwZ +ojo +gvI +snt +bCP +sPL +kFE +bQU +bQU +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(79,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +oIG +qrJ +vcd +iIA +oqf +tPA +bbV +qAu +yeq +vcd +bDm +hjC +fKs +oHh +oEO +wrR +mkt +fKt +iTZ +tse +dNT +fuf +npE +lVT +aAi +tse +rhC +eVk +sbx +ojo +gvI +snt +kzo +iYD +jic +bQU +bQU +uYw +uYw +kHz +atx +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(80,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +rOW +qrJ +vcd +vcd +vcd +vcd +hBd +vcd +vcd +vcd +wrR +wrR +duE +wrR +wrR +wrR +vFA +jDK +rfn +tse +btB +xJg +gUT +eHA +mlr +tse +jga +nfl +vLr +ojo +gvI +snt +lcB +iYD +jic +bQU +bQU +uYw +uYw +tGd +cFl +tow +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(81,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +dNr +qrJ +kyg +fWa +tuX +mze +jDq +wdL +dbB +jrx +apA +qNw +jDq +rJn +xSo +nLX +hAO +hdI +dhX +tse +tse +tse +qXy +tse +tse +tse +snt +xQm +snt +snt +snt +snt +cOG +iYD +shE +bQU +bQU +uYw +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(82,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aaI +uYw +uYw +uYw +uYw +nzF +nzF +kye +pvV +rNN +rNN +cnh +aQu +wXb +oor +vRY +kdm +vRY +oor +wKC +vRY +fqR +rEQ +xJO +pDQ +gjP +nLX +gaH +qNw +qop +jWr +gQI +jlU +qNw +jbJ +pmk +wSG +eUW +btF +pmk +iYD +uDp +bQU +bQU +uYw +uYw +uYw +uYw +kHz +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(83,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +uAJ +uYw +uYw +uYw +uYw +nzF +nzF +dYk +qrJ +qYZ +tzM +tuX +aqr +yfi +usD +fBO +tpp +brI +xHi +xAj +eWg +nkG +nLX +gNu +tQu +eoQ +rEQ +bJb +odj +gAC +nOQ +vRY +nxP +vRY +pou +jsP +bcV +iiS +wuE +pmk +iYD +feA +bQU +bQU +uYw +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(84,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +uaL +qrJ +hKY +hKY +hKY +hKY +amQ +hKY +hKY +qjp +qjp +qjp +usr +qjp +qjp +qjp +mJZ +mBH +urH +nLX +lWD +jar +dKo +jdC +iWX +xAj +vsN +tym +pmk +aIl +izt +izt +pmk +iYD +tOr +bQU +bQU +uYw +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(85,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +jRJ +qrJ +hKY +aNn +oyH +oTr +uZx +fit +gHI +qjp +vdI +bxp +ooV +fJK +jDc +qjp +rdN +jDK +nch +lsb +lsb +vFH +lsb +hdc +hdc +gdc +hdc +hdc +pmk +aTf +fZE +mhN +pmk +iYD +ybs +bQU +bQU +uYw +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(86,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +vSo +nzF +nzF +fnn +sKJ +hKY +lEA +iSy +iSy +msd +qcJ +vYG +qjp +xfC +yiL +fpq +tLH +eDe +qjp +tuX +tkO +tuX +lsb +aXe +nyP +sqb +jxH +rdn +lnL +gYL +hdc +gwt +pun +diI +evo +pmk +ihs +xCg +bQU +bQU +abk +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(87,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +nzF +nzF +eYN +qrJ +hKY +sxU +uJY +sxU +oDc +fvU +jsb +qjp +hqY +xAk +gDl +kGN +qSQ +qjp +aLI +tkX +umm +lsb +alE +tvm +pQa +bFZ +iRR +rJe +xgE +hdc +gpr +htV +sof +tDr +pmk +iYD +kFE +bQU +bQU +uYw +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(88,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +uAJ +uYw +uYw +uYw +uYw +nzF +nzF +nzF +jcM +hKY +hKY +hKY +hKY +hKY +hKY +hKY +qjp +uOd +oRb +xjo +nqm +kZg +qjp +eRd +tkX +gen +lsb +via +ibt +qrt +bFZ +aLc +dVH +gip +hdc +pmk +pmk +pmk +pmk +pmk +xLU +bQU +bQU +bQU +uYw +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(89,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +iWV +iWV +aLI +twv +hmN +mrD +pIY +xWy +xWy +eqq +qjp +fLK +ujZ +gsH +gDl +kGN +jeH +qjp +ajo +tkX +kyL +lsb +rGX +xBo +tCS +bFZ +qKs +xjd +jWq +hdc +nCo +mBc +awT +bvN +sah +fYj +row +iWV +iWV +uYw +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(90,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +iWV +iWV +eRd +taE +mKb +qDd +qDd +qDd +qGW +exH +qjp +qcN +qek +fLQ +qyW +kGN +kLn +qjp +oFs +tkX +kyL +lsb +wfo +tsm +kqt +jxH +iqj +ojM +xbm +hdc +yfO +oiO +nbf +eNe +kpV +rhN +saA +iWV +iWV +uYw +uYw +uYw +uYw +kHz +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(91,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +jWA +jWA +jWA +oUc +tdn +rZd +rPm +wrD +twv +mlu +qjp +nfr +wMV +wgQ +tXW +qjp +qjp +qjp +bBS +dbG +mlu +lsb +lsb +lsb +lsb +hdc +hdc +hdc +hdc +hdc +qsk +oIo +oNN +xkl +qVa +uXR +fKB +fKB +fKB +uYw +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(92,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +uYw +jWA +jWA +rAZ +mBm +vBY +rPm +oFs +twv +row +qjp +qjp +qjp +qjp +qjp +qjp +hpR +mqe +upm +rDm +iVK +xWy +xWy +wHp +pIY +ljC +gaU +gaU +xUd +qRL +gfe +oIo +oNN +mQf +rMF +bfL +fKB +fKB +uYw +uYw +uYw +rGb +eMB +uGf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(93,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +rDD +djg +uYw +uYw +uYw +uYw +jWA +jWA +uvY +iyd +cEa +rPm +jFF +twv +oAZ +dSC +gaU +gaU +tVp +xWy +wHp +pIY +gaU +uxr +fIr +igU +igU +igU +xMX +igU +igU +igU +igU +igU +igU +igU +vio +oNN +mYM +bGa +jfg +fKB +fKB +uYw +uYw +uYw +kHz +vlW +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(94,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +aaI +uYw +uYw +uYw +uYw +jWA +jWA +vxI +jjp +gcH +rPm +wmm +taE +qDd +qDd +qDd +qDd +qDd +qDd +rWR +qDd +qDd +qDd +bRb +uKq +vFO +jWg +iWV +gir +idB +bfR +bfR +okF +bfR +biZ +biZ +oNN +ktT +rkh +uXm +fKB +fKB +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(95,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +jWA +jWA +jWA +vQo +moe +jWA +iWV +iWV +iWV +iWV +iWV +iWV +iWV +iWV +iWV +giO +bfR +sXS +rvB +lem +rsE +edb +iWV +iWV +iWV +iWV +iWV +iWV +iWV +iWV +iWV +fKB +fKB +vxY +noj +fKB +fKB +bQm +uYw +uYw +kHz +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(96,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +vSo +jWA +jWA +hzv +jWA +jWA +iWV +iWV +iWV +iWV +iWV +iWV +iWV +iWV +iWV +iWV +skT +fcQ +oaF +gcz +sWZ +iWV +iWV +iWV +iWV +iWV +iWV +iWV +iWV +iWV +iWV +fKB +fKB +fIQ +fKB +fKB +jkS +bQm +uYw +uYw +tGd +tow +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(97,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +uAJ +uYw +uYw +uYw +uYw +uYw +uYw +jWA +nnA +jWA +uYw +uYw +uYw +tng +uYw +uYw +uYw +uYw +iWV +iWV +iWV +iWV +iWV +xkk +iWV +iWV +iWV +iWV +iWV +uYw +uYw +uYw +uYw +tng +uYw +uYw +uYw +fKB +xSm +fKB +bQm +uYw +uYw +uYw +uYw +uYw +dcy +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(98,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +eQC +eQC +eQC +eQC +eQC +jWA +xof +jWA +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +iWV +iWV +iWV +uNU +uBE +cOn +iWV +iWV +iWV +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +fKB +fdC +fKB +eQC +eQC +eQC +eQC +eQC +uYw +kHz +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(99,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +ehW +nGU +eQO +pGJ +pGJ +pGJ +nMC +ngm +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +iWV +iWV +xcw +qyL +pxI +iWV +iWV +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iqx +kNV +xzj +xzj +xzj +luL +ura +jev +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(100,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rpE +aTh +aaI +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +tng +iWV +iWV +xGX +iWV +iWV +tng +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +olf +psZ +oOh +nnH +jev +kHz +atx +rpE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(101,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +nTr +cFl +mYF +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +eUH +ioc +yfs +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +tGd +cFl +tow +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +neg +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(102,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +iIe +mYF +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +oZc +ioc +jGQ +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +tGd +hgL +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(103,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +eUH +ioc +yfs +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(104,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aaI +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +eUH +ioc +yfs +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(105,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +eUH +ioc +yfs +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(106,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +uAJ +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +eUH +ioc +yfs +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +dcy +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(107,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +eUH +ioc +yfs +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(108,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +eUH +ioc +yfs +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(109,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +eUH +ioc +yfs +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(110,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +rDD +djg +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +eUH +ioc +yfs +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +rGb +uGf +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(111,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +aaI +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +eUH +ioc +yfs +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +kHz +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(112,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +eUH +ioc +yfs +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(113,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +oZc +ioc +jGQ +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(114,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +eUH +ioc +yfs +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(115,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +uYw +tkp +tkp +tkp +tkp +tkp +tkp +pXl +vyz +fne +tkp +tkp +tkp +tkp +tkp +tkp +uYw +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(116,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +uAJ +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +uYw +tkp +tkp +tkp +tkp +tkp +tkp +tkp +tkp +uet +tkp +tkp +tkp +tkp +tkp +tkp +tkp +tkp +uYw +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +dcy +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(117,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +uYw +tkp +tkp +tkp +qnf +qnf +qnf +qnf +swH +khP +adU +khP +swH +qnf +qnf +qnf +qnf +tkp +tkp +tkp +uYw +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(118,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +tkp +tkp +tkp +fWe +qnf +aUj +aUj +aUj +aUj +aUj +jZW +aUj +aUj +aUj +aUj +aUj +qnf +sjy +tkp +tkp +tkp +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(119,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +idA +aaI +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +tkp +tkp +tkp +qnf +qnf +aUj +mDz +mDz +mDz +mDz +mDz +lnN +mDz +mDz +mDz +mDz +mDz +aUj +qnf +qnf +tkp +tkp +tkp +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(120,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +aaI +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +tkp +tkp +hSu +qnf +aUj +mDz +mDz +uhW +uNO +oum +cXD +fIk +cXD +oum +uNO +qYE +mDz +mDz +aUj +qnf +hSu +tkp +tkp +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +kHz +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(121,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +iIe +mYF +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +tkp +tkp +qnf +aUj +mDz +mDz +hIo +cFI +ydi +ydi +ydi +loi +lMQ +vno +vno +sdz +oki +mDz +mDz +aUj +qnf +tkp +tkp +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +tGd +hgL +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(122,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +tkp +tkp +qnf +aUj +mDz +uhW +bCN +qjU +mGr +mGr +mGr +vrD +mGr +mGr +mGr +qKf +oqb +qYE +mDz +aUj +qnf +tkp +tkp +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(123,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aaI +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +tkp +tkp +qnf +aUj +mDz +tKO +isq +wug +mGr +eIu +wcN +rNy +bMV +kDn +mGr +pyu +mWw +pah +mDz +aUj +qnf +tkp +tkp +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +kHz +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(124,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +tkp +tkp +qnf +aUj +mDz +qKf +xpT +dTa +mGr +vdC +wBl +uTP +pnw +sfU +mGr +dTa +dkt +qjU +mDz +aUj +qnf +tkp +tkp +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(125,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +tkp +tkp +qnf +aUj +mDz +eIy +xpT +mGr +uOe +maW +uQF +pBm +uQF +pBE +twk +mGr +dkt +oyN +mDz +aUj +qnf +tkp +tkp +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(126,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +uAJ +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +fne +tkp +iEL +aUj +mDz +rAI +qjU +mGr +mwC +xkv +bcb +qfM +uQF +orY +hkb +mGr +hwI +qZb +mDz +aUj +hrB +tkp +fne +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +dcy +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(127,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +tkp +tkp +qnf +aUj +mDz +rWJ +evY +mGr +meZ +umU +uQF +aby +uQF +aCX +jWO +mGr +qfu +gWy +mDz +aUj +qnf +tkp +tkp +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(128,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +tkp +tkp +ksu +aUj +mDz +qKf +xpT +dTa +mGr +maW +uQF +uQF +uQF +pBE +mGr +dTa +dkt +qjU +mDz +aUj +sON +tkp +tkp +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(129,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +tkp +tkp +qnf +aUj +mDz +tKO +kzX +gWa +efM +gce +jHi +tah +ydi +dYG +ike +oDz +oOR +pah +mDz +aUj +qnf +tkp +tkp +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(130,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +tkp +tkp +qnf +aUj +mDz +pyu +dcW +jfS +mGr +mGr +mGr +vrD +mGr +mGr +mGr +qKf +isq +wug +mDz +aUj +qnf +tkp +tkp +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(131,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aTh +uAJ +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +tkp +tkp +qnf +aUj +mDz +mDz +lyR +uMK +rYg +yhZ +tUj +bUM +oKG +qLi +neL +cFI +sCx +mDz +mDz +aUj +qnf +tkp +tkp +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +dcy +atx +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(132,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +nTr +mYF +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +tkp +tkp +hSu +qnf +aUj +mDz +mDz +wSa +fik +fax +dLE +wPr +kNw +fax +tWj +aqc +mDz +mDz +aUj +qnf +hSu +tkp +tkp +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +tGd +tow +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(133,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +tkp +tkp +tkp +qnf +qnf +aUj +mDz +mDz +fax +fax +lDR +wPK +xDi +fax +fax +mDz +mDz +aUj +qnf +qnf +tkp +tkp +tkp +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(134,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +aaI +uYw +uYw +uYw +uYw +ehW +erQ +nIc +sEd +boE +dYn +nIc +qYI +jev +uYw +uYw +uYw +tkp +tkp +tkp +iEL +qnf +aUj +aUj +fax +fax +lvn +abP +sIK +fax +fax +aUj +aUj +qnf +hrB +tkp +tkp +tkp +uYw +uYw +uYw +ehW +iOb +oOh +fJa +rip +psZ +oOh +nnH +jev +uYw +uYw +uYw +uYw +kHz +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(135,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +ehW +erQ +iAt +sEd +boE +dYn +iAt +qYI +jev +uYw +uYw +uYw +uYw +tkp +tkp +tkp +qnf +qnf +dkI +bLB +hyu +mJE +rIH +dxS +xYd +nnY +qnf +qnf +qnf +tkp +tkp +tkp +uYw +uYw +uYw +uYw +ehW +iOb +htf +fJa +hqB +psZ +htf +nnH +jev +uYw +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(136,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +uYw +ePH +ePH +ePH +uYw +ePH +ePH +ePH +uYw +uYw +uYw +uYw +uYw +uYw +tkp +tkp +tkp +tkp +cXg +lWt +lWt +tfO +sjZ +lsL +lWt +lWt +tkp +tkp +tkp +tkp +tkp +uYw +uYw +uYw +uYw +uYw +uYw +ePH +ePH +ePH +uYw +ePH +ePH +ePH +uYw +uYw +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(137,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +uAJ +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +tkp +tkp +tkp +ykQ +pjy +pjy +pjy +oOK +lWt +lWt +lWt +tkp +tkp +tkp +tkp +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +dcy +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(138,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +rGb +eMB +djg +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +lWt +lWt +fcb +lWt +lWt +uYw +uYw +uYw +uYw +rGb +eMB +eMB +djg +uYw +uYw +rGb +eMB +djg +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(139,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +kHz +tXe +rDD +eMB +eMB +eMB +eMB +eMB +eMB +eMB +eMB +eMB +djg +uYw +uYw +uYw +hVK +uYw +uYw +uYw +rGb +eMB +eMB +jtL +tXe +tXe +dCk +eMB +eMB +uGf +tXe +aaI +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(140,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +aaI +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +kHz +tXe +tXe +tXe +eLH +tXe +tXe +tXe +tXe +tXe +tXe +tXe +rDD +djg +uYw +uYw +hVK +uYw +uYw +rGb +uGf +tXe +tXe +tXe +tXe +tXe +tXe +tXe +eLH +tXe +tXe +aaI +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +kHz +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(141,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +idA +dCk +djg +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +kHz +tXe +tXe +tXe +tXe +tXe +tXe +tXe +tXe +tXe +tXe +tXe +tXe +dCk +eMB +eMB +mae +eMB +eMB +jtL +tXe +tXe +tXe +tXe +tXe +tXe +tXe +tXe +tXe +tXe +tXe +aaI +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +rGb +jtL +gSd +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(142,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +rDD +djg +uYw +uYw +uYw +uYw +uYw +uYw +uYw +rGb +uGf +gYE +rZL +rtT +rZL +rZL +rZL +rZL +rZL +rZL +rtT +rZL +rZL +rZL +rZL +rZL +rtT +rZL +rZL +rZL +rZL +rZL +rtT +rZL +rZL +rZL +rZL +rZL +rZL +rZL +iQn +rDD +djg +uYw +uYw +uYw +uYw +uYw +uYw +uYw +uYw +rGb +uGf +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(143,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +cBU +dCk +eMB +eMB +eMB +jVl +eMB +eMB +eMB +jtL +gYE +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +iQn +dCk +eMB +eMB +eMB +eMB +jVl +eMB +eMB +eMB +jtL +vlW +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(144,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +rtT +rZL +rZL +rZL +rZL +rZL +rZL +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rZL +rZL +rZL +rZL +rZL +rZL +rZL +rZL +rtT +rZL +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(145,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(146,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(147,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(148,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(149,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +eML +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(150,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(151,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(152,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(153,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(154,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(155,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +ykE +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(156,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(157,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(158,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(159,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(160,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +www +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(161,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(162,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(163,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(164,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(165,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(166,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(167,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(168,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +rtT +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(169,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(170,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(171,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(172,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(173,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(174,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(175,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(176,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(177,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(178,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(179,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(180,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(181,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(182,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(183,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(184,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(185,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(186,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(187,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(188,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(189,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(190,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(191,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(192,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(193,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(194,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(195,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(196,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(197,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(198,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(199,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} +(200,1,5) = {" +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +wJN +"} diff --git a/maps/sierra/z6_admin.dmm b/maps/sierra/z6_admin.dmm new file mode 100644 index 0000000000000..dc1f3511ef216 --- /dev/null +++ b/maps/sierra/z6_admin.dmm @@ -0,0 +1,60494 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aab" = ( +/turf/space, +/area/space) +"aag" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/centcom) +"aam" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aan" = ( +/turf/unsimulated/floor/plating, +/area/centcom) +"aas" = ( +/obj/paint/hull, +/turf/simulated/wall/r_titanium, +/area/shuttle/administration/centcom) +"aaw" = ( +/obj/structure/curtain{ + color = "#68ccab" + }, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_temple) +"aax" = ( +/obj/structure/curtain, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_temple) +"aay" = ( +/obj/structure/curtain{ + color = "#cd6889" + }, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_temple) +"aaz" = ( +/obj/structure/table/rack/holorack, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_temple) +"aaA" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aaC" = ( +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/corner/red/bordercorner, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aaD" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aaE" = ( +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/item/reagent_containers/food/drinks/bottle/cola, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"aaF" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 8; + icon_state = "wooden_chair_wings" + }, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"aaG" = ( +/obj/machinery/mech_recharger, +/mob/living/exosuit/premade/light, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aaH" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aaI" = ( +/obj/structure/holostool, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_temple) +"aaK" = ( +/obj/structure/table/holotable, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_boxingcourt) +"aaS" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/glasses/tacgoggles, +/obj/item/gun/energy/stunrevolver, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aaT" = ( +/obj/item/mech_equipment/clamp, +/obj/item/mech_equipment/clamp, +/obj/structure/table/steel_reinforced, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aaU" = ( +/obj/machinery/vending/tool, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aaW" = ( +/obj/item/mech_equipment/sleeper, +/obj/item/mech_equipment/sleeper, +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aaX" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aaY" = ( +/obj/machinery/mech_recharger, +/mob/living/exosuit/premade/heavy, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aaZ" = ( +/obj/machinery/mech_recharger, +/mob/living/exosuit/premade/powerloader, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abg" = ( +/obj/machinery/camera/network/ert{ + c_tag = "Assault Armor North" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abh" = ( +/obj/item/device/radio/intercom/specops{ + pixel_y = 22 + }, +/obj/machinery/mech_recharger, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abi" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abj" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/item/gun/projectile/heavysniper, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abk" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/item/gun/energy/sniperrifle, +/obj/item/gun/energy/sniperrifle, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abl" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/item/gun/launcher/rocket, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abn" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/item/gun/launcher/grenade, +/obj/item/gun/launcher/grenade, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abu" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/item/gun/energy/gun/nuclear, +/obj/item/gun/energy/gun/nuclear, +/obj/item/gun/energy/gun/nuclear, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abv" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/item/gun/energy/xray, +/obj/item/gun/energy/xray, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abw" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abx" = ( +/obj/machinery/vending/boozeomat{ + density = 0; + pixel_x = -32 + }, +/obj/structure/table/reinforced, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled, +/area/shuttle/administration/centcom) +"aby" = ( +/obj/structure/table/reinforced, +/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled, +/area/shuttle/administration/centcom) +"abz" = ( +/obj/structure/table/reinforced, +/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled, +/area/shuttle/administration/centcom) +"abE" = ( +/obj/structure/flora/pottedplant{ + icon_state = "plant-22" + }, +/obj/floor_decal/corner/black/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"abF" = ( +/obj/floor_decal/corner/black{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"abG" = ( +/obj/item/device/radio/intercom/entertainment{ + pixel_y = 28 + }, +/obj/floor_decal/corner/black{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"abH" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abI" = ( +/obj/item/mech_equipment/catapult, +/obj/structure/table/steel_reinforced, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abJ" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abK" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled, +/area/shuttle/administration/centcom) +"abL" = ( +/obj/structure/table/steel, +/obj/item/storage/box/cups, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"abM" = ( +/obj/floor_decal/corner/black{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"abN" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/corner/green/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"abO" = ( +/obj/structure/table/reinforced, +/obj/item/modular_computer/laptop/preset/records, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"abP" = ( +/obj/machinery/mech_recharger, +/mob/living/exosuit/premade/powerloader, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"abZ" = ( +/obj/item/mech_equipment/mounted_system/extinguisher, +/obj/item/mech_equipment/mounted_system/rcd, +/obj/item/pickaxe/diamonddrill, +/obj/structure/table/steel_reinforced, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aca" = ( +/obj/machinery/mech_recharger, +/mob/living/exosuit/premade/heavy, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"acd" = ( +/obj/machinery/mech_recharger, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"acg" = ( +/obj/machinery/mech_recharger, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"ach" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"acj" = ( +/obj/floor_decal/techfloor, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"ack" = ( +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/industrial/warning, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"acw" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"acx" = ( +/obj/paint/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/administration/centcom) +"acy" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled, +/area/shuttle/administration/centcom) +"acz" = ( +/obj/structure/table/marble, +/obj/item/modular_computer/telescreen/preset/generic{ + pixel_x = 32 + }, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled, +/area/shuttle/administration/centcom) +"acB" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/reagent_dispensers/water_cooler, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"acC" = ( +/obj/structure/flora/pottedplant/large, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"acD" = ( +/obj/structure/table/reinforced, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"acE" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/machinery/button/alternate/door{ + id_tag = "adm_of"; + name = "Open"; + pixel_x = 26; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"acF" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 1 + }, +/obj/structure/shuttle/engine/heater{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/airless, +/area/shuttle/specops/centcom) +"acG" = ( +/obj/item/mech_equipment/drill, +/obj/item/mech_equipment/clamp, +/obj/structure/table/steel_reinforced, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"acH" = ( +/obj/machinery/door/blast/regular{ + id_tag = "ASSAULT"; + name = "Assault Weapon Storage" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"acL" = ( +/obj/machinery/vending/cigarette{ + prices = list() + }, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled, +/area/shuttle/administration/centcom) +"acS" = ( +/obj/machinery/door/airlock/centcom{ + id_tag = "adm_of"; + name = "General Access"; + req_access = newlist() + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"acT" = ( +/obj/machinery/mech_recharger, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"acV" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/techfloor, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"acW" = ( +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"acX" = ( +/obj/item/mech_equipment/light, +/obj/item/mech_equipment/light, +/obj/item/mech_equipment/light, +/obj/item/mech_equipment/light, +/obj/structure/table/steel_reinforced, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"adm" = ( +/obj/structure/table/reinforced, +/obj/item/robot_parts/robot_component/armour/exosuit/combat, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"adB" = ( +/obj/structure/table/reinforced, +/obj/item/mech_equipment/mounted_system/taser, +/obj/item/mech_equipment/mounted_system/taser/ion, +/obj/floor_decal/techfloor, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"adC" = ( +/obj/item/aiModule/nanotrasen, +/obj/item/aiModule/reset, +/obj/item/aiModule/freeformcore, +/obj/item/aiModule/protectStation, +/obj/item/aiModule/quarantine, +/obj/item/aiModule/paladin, +/obj/item/aiModule/robocop, +/obj/item/aiModule/safeguard, +/obj/structure/table/rack, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"adD" = ( +/obj/machinery/door/blast/regular{ + id_tag = "ert_synth_equipment"; + name = "Synthetics Modification Equipment"; + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"adE" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"adF" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/sign/warning/secure_area/armory{ + pixel_y = 32 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"adG" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"adH" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/storage/belt/holster/security/tactical, +/obj/item/storage/belt/holster/security/tactical, +/obj/item/storage/belt/holster/security/tactical, +/obj/item/storage/belt/holster/security/tactical, +/obj/item/melee/baton/loaded, +/obj/item/melee/baton/loaded, +/obj/item/melee/baton/loaded, +/obj/item/melee/baton/loaded, +/obj/item/melee/baton/loaded, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"adI" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/clothing/head/helmet/swat, +/obj/item/clothing/head/helmet/swat, +/obj/item/clothing/head/helmet/swat, +/obj/item/clothing/head/helmet/swat, +/obj/item/clothing/suit/storage/vest/merc{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/clothing/suit/storage/vest/merc{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/clothing/suit/storage/vest/merc{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/clothing/suit/storage/vest/merc{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"adJ" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/storage/box/teargas, +/obj/item/storage/box/teargas, +/obj/item/storage/box/teargas, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"adY" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/machinery/pipedispenser, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aea" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aeb" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/rack/dark, +/obj/item/stock_parts/circuitboard/smes, +/obj/item/stock_parts/circuitboard/smes, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aec" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/rack/dark, +/obj/item/stock_parts/circuitboard/solar_control, +/obj/item/stock_parts/circuitboard/solar_control, +/obj/item/stock_parts/circuitboard/solar_control, +/obj/item/stock_parts/circuitboard/solar_control, +/obj/item/stock_parts/circuitboard/solar_control, +/obj/item/stock_parts/circuitboard/solar_control, +/obj/item/stock_parts/circuitboard/solar_control, +/obj/item/stock_parts/circuitboard/solar_control, +/obj/item/stock_parts/circuitboard/solar_control, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aed" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/rack/dark, +/obj/item/cell/hyper, +/obj/item/cell/hyper, +/obj/item/cell/hyper, +/obj/item/cell/hyper, +/obj/item/cell/hyper, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"ael" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/rack/dark, +/obj/item/clothing/shoes/galoshes, +/obj/item/clothing/shoes/galoshes, +/obj/item/clothing/shoes/galoshes, +/obj/item/clothing/shoes/galoshes, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aem" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/item/device/megaphone, +/obj/item/device/megaphone, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aeE" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 8; + icon_state = "propulsion_r" + }, +/obj/structure/shuttle/engine/heater{ + dir = 8; + pixel_x = 32 + }, +/turf/unsimulated/floor/plating, +/area/shuttle/administration/centcom) +"aeF" = ( +/obj/machinery/vending/snack{ + name = "hacked Getmore Chocolate Corp"; + prices = list() + }, +/obj/floor_decal/corner/red/diagonal, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/shuttle/administration/centcom) +"aeX" = ( +/obj/machinery/light/small/readylight{ + dir = 1; + icon_state = "bulb1" + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/machinery/computer/prisoner{ + dir = 4; + name = "Implant Management" + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/specops/centcom) +"afa" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/handrail, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/specops/centcom) +"afb" = ( +/obj/machinery/computer/shuttle_control/specops{ + dir = 8 + }, +/obj/machinery/light/small/readylight{ + dir = 1; + icon_state = "bulb1" + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/specops/centcom) +"afc" = ( +/obj/machinery/door/airlock/centcom{ + name = "Special Operations Command"; + req_access = newlist() + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"afy" = ( +/obj/machinery/door/blast/regular{ + id_tag = "ASSAULTMech"; + name = "Assault Armor Storage" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"afz" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/circuitboard/borgupload, +/obj/item/stock_parts/circuitboard/aiupload{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"afA" = ( +/obj/machinery/door/blast/regular{ + id_tag = "ert_synth_equipment"; + name = "Synthetics Modification Equipment"; + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"afD" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"afE" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"afI" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 4; + icon_state = "wooden_chair_wings" + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"afQ" = ( +/obj/item/modular_computer/telescreen/preset/generic{ + pixel_y = 32 + }, +/obj/floor_decal/corner/black{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"afR" = ( +/obj/floor_decal/corner/black/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"afZ" = ( +/obj/structure/closet/secure_closet/hos, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"agb" = ( +/obj/machinery/vending/cigarette, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"agc" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"agf" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"agg" = ( +/obj/machinery/vending/coffee{ + prices = list() + }, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled, +/area/shuttle/administration/centcom) +"agh" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled, +/area/shuttle/administration/centcom) +"agk" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 8; + icon_state = "propulsion_l" + }, +/obj/structure/shuttle/engine/heater{ + dir = 8; + pixel_x = 32 + }, +/turf/unsimulated/floor/plating, +/area/shuttle/administration/centcom) +"ago" = ( +/obj/item/stool, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled, +/area/shuttle/administration/centcom) +"agp" = ( +/obj/item/stool, +/obj/item/device/radio/intercom/entertainment{ + dir = 8; + pixel_x = 22 + }, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled, +/area/shuttle/administration/centcom) +"agu" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave, +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled, +/area/shuttle/administration/centcom) +"agw" = ( +/obj/floor_decal/corner/brown{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"agE" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, +/turf/simulated/floor/plating, +/area/shuttle/administration/centcom) +"agO" = ( +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled, +/area/shuttle/administration/centcom) +"agP" = ( +/obj/item/device/radio/intercom/specops{ + dir = 8; + pixel_x = 22 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/bed/chair/shuttle/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/specops/centcom) +"agQ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"agR" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/item/device/radio/intercom/specops{ + pixel_y = 22 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"agT" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"ahe" = ( +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"ahf" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/structure/reagent_dispensers/water_cooler, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"ahg" = ( +/obj/floor_decal/corner/black/diagonal, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"ahh" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/recharger/wallcharger{ + pixel_y = 25 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"ahi" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"ahj" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"ahk" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"ahl" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/item/stock_parts/circuitboard/smes, +/obj/item/stock_parts/circuitboard/smes, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"ahK" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 8 + }, +/obj/floor_decal/corner/brown{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"ahL" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"ahN" = ( +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"ahO" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"ahQ" = ( +/obj/machinery/door/airlock/centcom{ + name = "General Access"; + req_access = newlist() + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"ahR" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"ahS" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 5 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"ahT" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"ahU" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"ahX" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/structure/bed/chair/shuttle/red{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/specops/centcom) +"ahZ" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/vending/wallmed1{ + dir = 8; + pixel_x = 23 + }, +/obj/structure/bed/chair/shuttle/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/specops/centcom) +"aib" = ( +/obj/machinery/embedded_controller/radio/simple_docking_controller{ + dir = 4; + frequency = 1380; + id_tag = "specops_shuttle_cent"; + pixel_x = -25; + req_access = list("ACCESS_CENT_GENERAL"); + tag_door = "specops_shuttle_cent_berth_hatch" + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"ais" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"ait" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Special Operations Command"; + req_access = newlist() + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/sign/warning/engineering_access{ + dir = 8; + pixel_x = 7; + pixel_y = 32 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aiu" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aiw" = ( +/obj/machinery/light/small/readylight{ + dir = 8; + icon_state = "bulb1" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/structure/bed/chair/shuttle/red{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/specops/centcom) +"aiy" = ( +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aiO" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/structure/reagent_dispensers/beerkeg, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"aiY" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/item/storage/briefcase/inflatable{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/inflatable{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/inflatable{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/inflatable{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aiZ" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"aja" = ( +/obj/machinery/body_scanconsole{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"ajb" = ( +/obj/machinery/bodyscanner{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"ajc" = ( +/obj/structure/closet/secure_closet/medical_wall{ + pixel_x = 32; + pixel_y = 5; + req_access = list("ACCESS_SYNDICATE") + }, +/obj/structure/iv_stand, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/opos, +/obj/item/reagent_containers/ivbag/blood/human/opos, +/obj/floor_decal/corner/pink/diagonal, +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"ajg" = ( +/obj/machinery/door/airlock/centcom{ + name = "General Access"; + req_access = newlist() + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"ajh" = ( +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"aji" = ( +/obj/machinery/status_display, +/obj/paint/hull, +/turf/simulated/wall/r_titanium, +/area/shuttle/administration/centcom) +"ajj" = ( +/obj/structure/closet/secure_closet/medical1{ + req_access = list("ACCESS_CENT_GENERAL") + }, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/item/defibrillator/loaded, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"ajk" = ( +/obj/machinery/computer/shuttle_control{ + dir = 8; + req_access = list("ACCESS_CENT_GENERAL"); + shuttle_tag = "Administration" + }, +/obj/floor_decal/corner/brown{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"ajm" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/specops/centcom) +"ajp" = ( +/obj/floor_decal/techfloor/corner, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/specops/centcom) +"ajq" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"ajs" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"ajI" = ( +/obj/machinery/door/airlock/external{ + frequency = 1380; + id_tag = "specops_shuttle_fore_hatch"; + locked = 1; + name = "Forward Docking Hatch"; + req_access = newlist() + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/specops/centcom) +"ajJ" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"ajK" = ( +/obj/machinery/door/airlock/external{ + frequency = 1380; + id_tag = "specops_shuttle_cent_berth_hatch"; + locked = 1; + name = "Port Docking Hatch"; + req_access = newlist() + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"ajM" = ( +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/specops/centcom) +"akc" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"akd" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"ake" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"akf" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Special Operations Command"; + req_access = newlist() + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"akg" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/gun/projectile/automatic/bullpup_rifle, +/obj/item/gun/projectile/automatic/bullpup_rifle, +/obj/item/ammo_magazine/mil_rifle, +/obj/item/ammo_magazine/mil_rifle, +/obj/item/ammo_magazine/mil_rifle, +/obj/item/ammo_magazine/mil_rifle, +/obj/item/ammo_magazine/mil_rifle, +/obj/item/ammo_magazine/mil_rifle, +/obj/item/ammo_magazine/mil_rifle, +/obj/item/ammo_magazine/mil_rifle, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aki" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/gun/projectile/automatic/sec_smg, +/obj/item/gun/projectile/automatic/sec_smg, +/obj/item/gun/projectile/automatic/sec_smg, +/obj/item/gun/projectile/automatic/sec_smg, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"akj" = ( +/obj/machinery/door/airlock/centcom{ + name = "General Access"; + req_access = newlist() + }, +/turf/simulated/floor/tiled/freezer, +/area/shuttle/administration/centcom) +"akD" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd, +/obj/item/rcd, +/obj/item/rcd, +/obj/item/rcd, +/obj/item/device/multitool, +/obj/item/device/multitool, +/obj/item/device/flash, +/obj/item/device/flash, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"akE" = ( +/obj/machinery/door/airlock/external, +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "crescent_vip_shuttle"; + name = "VIP Shuttle" + }, +/turf/unsimulated/floor/plating, +/area/centcom) +"akG" = ( +/obj/floor_decal/corner/pink/diagonal, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"akH" = ( +/obj/machinery/door/airlock/centcom{ + name = "General Access"; + req_access = newlist() + }, +/turf/simulated/floor/plating, +/area/shuttle/administration/centcom) +"akI" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/flora/pottedplant/large, +/turf/simulated/floor/tiled/freezer, +/area/shuttle/administration/centcom) +"akK" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/specops/centcom) +"akQ" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"alm" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Special Operations Command"; + req_access = newlist() + }, +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "SPECOPShuttle"; + name = "Spec Ops Shuttle" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"aln" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"alo" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"alr" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"alt" = ( +/obj/floor_decal/techfloor, +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/plastique, +/obj/item/plastique, +/obj/item/plastique, +/obj/item/plastique, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"alu" = ( +/obj/shuttle_landmark/specops/start, +/obj/machinery/door/airlock/external{ + frequency = 1380; + id_tag = "specops_shuttle_fore_hatch"; + locked = 1; + name = "Forward Docking Hatch"; + req_access = newlist() + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/specops/centcom) +"alx" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"alU" = ( +/obj/floor_decal/techfloor, +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/gun/energy/ionrifle, +/obj/item/gun/energy/ionrifle, +/obj/item/gun/energy/ionrifle, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"alW" = ( +/obj/floor_decal/techfloor, +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/gun/energy/gun, +/obj/item/gun/energy/gun, +/obj/item/gun/energy/gun, +/obj/item/gun/energy/gun, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"alX" = ( +/obj/floor_decal/techfloor, +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"alY" = ( +/obj/floor_decal/techfloor, +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/gun/energy/taser, +/obj/item/gun/energy/taser, +/obj/item/gun/energy/taser, +/obj/item/gun/energy/taser, +/obj/item/gun/energy/taser, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"alZ" = ( +/obj/machinery/door/airlock/external{ + frequency = 1380; + id_tag = "admin_shuttle_hatch"; + locked = 1; + name = "Shuttle Hatch"; + req_access = newlist() + }, +/turf/simulated/floor/plating, +/area/shuttle/administration/centcom) +"ama" = ( +/obj/floor_decal/techfloor, +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/ammo_magazine/smg_top/rubber, +/obj/item/ammo_magazine/smg_top/rubber, +/obj/item/ammo_magazine/smg_top/rubber, +/obj/item/ammo_magazine/smg_top/rubber, +/obj/item/ammo_magazine/smg_top/rubber, +/obj/item/ammo_magazine/smg_top/rubber, +/obj/item/ammo_magazine/smg_top/rubber, +/obj/item/ammo_magazine/smg_top/rubber, +/obj/item/ammo_magazine/smg_top/rubber, +/obj/item/ammo_magazine/smg_top/rubber, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"amb" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"amc" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"amd" = ( +/obj/floor_decal/borderfloorblack, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"ame" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"amg" = ( +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"amF" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"amG" = ( +/obj/floor_decal/techfloor, +/obj/machinery/pipedispenser/disposal, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"amU" = ( +/obj/floor_decal/techfloor, +/obj/machinery/vending/tool{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"amV" = ( +/obj/structure/table/reinforced, +/obj/item/stack/medical/advanced/bruise_pack, +/obj/item/reagent_containers/syringe/antiviral, +/obj/item/reagent_containers/syringe/antiviral, +/obj/floor_decal/corner/pink/diagonal, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"and" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"ane" = ( +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"anm" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"any" = ( +/obj/floor_decal/techfloor, +/obj/machinery/vending/engivend{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"anz" = ( +/obj/floor_decal/techfloor, +/obj/machinery/vending/engineering{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"anA" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/table/steel_reinforced, +/obj/item/clothing/gloves/insulated, +/obj/item/clothing/gloves/insulated, +/obj/item/clothing/gloves/insulated, +/obj/item/clothing/gloves/insulated, +/obj/item/storage/belt/utility/full, +/obj/item/storage/belt/utility/full, +/obj/item/storage/belt/utility/full, +/obj/item/storage/belt/utility/full, +/obj/item/taperoll/engineering, +/obj/item/clothing/glasses/welding/superior, +/obj/item/clothing/glasses/welding/superior, +/obj/item/clothing/glasses/welding/superior, +/obj/item/clothing/glasses/welding/superior, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"anB" = ( +/turf/unsimulated/wall{ + desc = "That looks like it doesn't open easily."; + icon = 'icons/obj/doors/rapid_pdoor.dmi'; + icon_state = "pdoor1"; + name = "Shuttle Bay Blast Door" + }, +/area/centcom) +"anH" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/red/border, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"anQ" = ( +/obj/machinery/door/unpowered/shuttle, +/turf/simulated/floor, +/area/acting/stage) +"anX" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/machinery/sleeper{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"anY" = ( +/obj/machinery/door/airlock/external, +/obj/machinery/door/blast/regular{ + id_tag = "crescent_vip_shuttle"; + name = "VIP Shuttle" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"aoc" = ( +/obj/item/towel, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/freezer, +/area/shuttle/administration/centcom) +"aod" = ( +/obj/machinery/door/blast/regular{ + id_tag = "SPECIALOPS"; + name = "Spec Ops Hangar" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/specops) +"aop" = ( +/obj/structure/sign/bluecross_2, +/turf/unsimulated/wall, +/area/tdome/testing) +"aox" = ( +/obj/structure/hygiene/toilet{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/freezer, +/area/shuttle/administration/centcom) +"aoy" = ( +/obj/structure/handrail{ + dir = 4 + }, +/obj/machinery/mech_recharger, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/specops/centcom) +"aoB" = ( +/turf/simulated/wall/voxshuttle, +/area/acting/stage) +"aoO" = ( +/obj/machinery/recharger/wallcharger{ + dir = 8; + pixel_x = 22 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/bed/chair/shuttle/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/specops/centcom) +"aoP" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aoQ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aoR" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"aoS" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"aoT" = ( +/obj/machinery/vending/medical, +/obj/paint/hull, +/turf/simulated/wall/r_titanium, +/area/shuttle/administration/centcom) +"aoU" = ( +/obj/structure/curtain/medical, +/obj/floor_decal/corner/pink/diagonal, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"aoV" = ( +/obj/machinery/door/airlock/centcom{ + name = "General Access"; + req_access = newlist() + }, +/obj/floor_decal/corner/black/diagonal, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"aoY" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"aoZ" = ( +/obj/machinery/telecomms/hub/preset_cent, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"ape" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/holding) +"apf" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/shuttle/specops/centcom) +"apr" = ( +/obj/wallframe_spawn/reinforced/hull, +/turf/unsimulated/floor/plating, +/area/centcom/specops) +"aps" = ( +/obj/machinery/telecomms/broadcaster/preset_cent, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"apu" = ( +/turf/simulated/floor/tiled/freezer, +/area/shuttle/administration/centcom) +"apx" = ( +/obj/item/storage/mirror{ + pixel_x = 32; + pixel_y = 1 + }, +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/freezer, +/area/shuttle/administration/centcom) +"apy" = ( +/obj/machinery/embedded_controller/radio/simple_docking_controller{ + frequency = 1380; + id_tag = "specops_shuttle_fore"; + name = "forward docking hatch controller"; + pixel_y = -25; + tag_door = "specops_shuttle_fore_hatch" + }, +/obj/structure/handrail{ + dir = 4 + }, +/obj/machinery/light/small/readylight, +/obj/machinery/mech_recharger, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/specops/centcom) +"apz" = ( +/obj/machinery/light/small/readylight, +/obj/machinery/recharger/wallcharger{ + dir = 8; + pixel_x = 22 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor/hole{ + dir = 4 + }, +/obj/structure/bed/chair/shuttle/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/shuttle/specops/centcom) +"apL" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"apM" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/red/border, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"apQ" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"apY" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"aqb" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"aqf" = ( +/obj/machinery/fabricator{ + desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; + fab_status_flags = 1; + name = "unlocked autolathe" + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"aqr" = ( +/obj/machinery/r_n_d/server/centcom, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"aqs" = ( +/obj/machinery/vending/security, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"aqt" = ( +/obj/wallframe_spawn/reinforced/hull, +/turf/unsimulated/floor/plating, +/area/centcom/control) +"aqv" = ( +/obj/machinery/door/airlock/centcom{ + name = "Bridge"; + req_access = newlist() + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/control) +"aqI" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/microwave{ + pixel_y = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"aqU" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"aqY" = ( +/obj/structure/table/reinforced, +/obj/item/storage/belt/medical, +/obj/item/storage/belt/medical, +/obj/item/storage/belt/medical, +/obj/item/reagent_containers/glass/bottle/inaprovaline, +/obj/item/reagent_containers/glass/bottle/inaprovaline, +/obj/item/reagent_containers/glass/bottle/inaprovaline, +/obj/item/reagent_containers/hypospray, +/obj/item/reagent_containers/hypospray, +/obj/item/reagent_containers/hypospray, +/obj/item/storage/box/syringes, +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/borderfloorwhite{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"aqZ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/machinery/computer/modular/preset/dock, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"arb" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/computer/modular/preset/supply_public, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"arj" = ( +/obj/structure/table/reinforced, +/obj/item/storage/belt/medical, +/obj/item/storage/belt/medical, +/obj/item/storage/belt/medical, +/obj/item/reagent_containers/glass/bottle/inaprovaline, +/obj/item/reagent_containers/glass/bottle/inaprovaline, +/obj/item/reagent_containers/glass/bottle/inaprovaline, +/obj/item/reagent_containers/hypospray, +/obj/item/reagent_containers/hypospray, +/obj/item/reagent_containers/hypospray, +/obj/item/storage/box/syringes, +/obj/item/reagent_containers/glass/beaker/large, +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"aro" = ( +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"arz" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/autoinjectors, +/obj/item/storage/box/beakers, +/obj/item/storage/box/latexgloves, +/obj/item/storage/box/pillbottles, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/defibrillator/compact/combat/loaded, +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"arC" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"arD" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"arR" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"asc" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"asw" = ( +/obj/machinery/vitals_monitor, +/obj/floor_decal/floordetail/edgedrain{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"asx" = ( +/obj/machinery/optable, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/red, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"asC" = ( +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"asF" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/spray/sterilizine, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -6 + }, +/obj/floor_decal/corner/pink/diagonal, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"asH" = ( +/obj/floor_decal/corner/black/diagonal, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"asI" = ( +/turf/unsimulated/wall, +/area/space) +"asK" = ( +/obj/structure/table/steel, +/obj/item/device/radio/intercom/entertainment{ + dir = 8; + pixel_x = 22 + }, +/obj/floor_decal/corner/black/diagonal, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"asM" = ( +/obj/floor_decal/borderfloorblack, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"asN" = ( +/obj/floor_decal/borderfloorblack, +/obj/machinery/computer/power_monitor{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"asO" = ( +/obj/floor_decal/borderfloorblack, +/obj/machinery/computer/station_alert/all{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"asP" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/red, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"asT" = ( +/obj/structure/flora/pottedplant/bamboo, +/obj/floor_decal/corner/black/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/control) +"asU" = ( +/obj/floor_decal/corner/black/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/control) +"asX" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/control) +"asY" = ( +/obj/structure/hygiene/shower{ + dir = 8; + pixel_x = -7 + }, +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/freezer, +/area/shuttle/administration/centcom) +"asZ" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"ata" = ( +/obj/structure/bed/chair/comfy/blue, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"atb" = ( +/obj/floor_decal/industrial/outline/blue, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "monotile_light" + }, +/area/centcom/specops) +"atc" = ( +/obj/machinery/optable, +/obj/floor_decal/corner/pink/diagonal, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"atd" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"ate" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/surgery, +/obj/item/clothing/mask/surgical, +/obj/item/clothing/gloves/latex, +/obj/floor_decal/corner/pink/diagonal, +/turf/simulated/floor/tiled/white, +/area/shuttle/administration/centcom) +"atg" = ( +/obj/item/stool/padded, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"ath" = ( +/obj/machinery/embedded_controller/radio/simple_docking_controller{ + frequency = 1380; + id_tag = "admin_shuttle"; + pixel_x = -25; + req_access = list("ACCESS_CENT_GENERAL"); + tag_door = "admin_shuttle_hatch" + }, +/turf/simulated/floor/plating, +/area/shuttle/administration/centcom) +"ati" = ( +/obj/machinery/door/airlock/civilian, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/holding) +"atj" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/shuttle/administration/centcom) +"atk" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 4 + }, +/obj/floor_decal/corner/black/diagonal, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"atl" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"atn" = ( +/obj/structure/table/steel, +/obj/item/modular_computer/telescreen/preset/generic{ + pixel_x = 32 + }, +/obj/floor_decal/corner/black/diagonal, +/turf/simulated/floor/tiled/dark, +/area/shuttle/administration/centcom) +"atp" = ( +/obj/structure/table/steel_reinforced, +/obj/item/rig/military/equipped, +/obj/item/rig/military/equipped, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"atq" = ( +/obj/structure/table/rack, +/obj/item/tank/oxygen_emergency_double, +/obj/item/tank/oxygen_emergency_double, +/obj/item/tank/oxygen_emergency_double, +/obj/item/tank/oxygen_emergency_double, +/obj/item/tank/oxygen_emergency_double, +/obj/item/tank/oxygen_emergency_double, +/obj/item/tank/oxygen_emergency_double, +/obj/item/tank/oxygen_emergency_double, +/obj/floor_decal/corner/red/diagonal, +/obj/item/device/radio/intercom/specops{ + pixel_y = 22 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"atr" = ( +/obj/item/modular_computer/pda/ert, +/obj/item/modular_computer/pda/ert, +/obj/item/modular_computer/pda/ert, +/obj/item/modular_computer/pda/ert, +/obj/item/modular_computer/pda/ert, +/obj/item/modular_computer/pda/ert, +/obj/item/modular_computer/pda/ert, +/obj/structure/table/steel_reinforced, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/centcom/specops) +"ats" = ( +/obj/structure/closet/crate, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"att" = ( +/obj/structure/closet/crate, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/shoes/magboots, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"atu" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"atv" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 8; + icon_state = "wooden_chair_wings" + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"atw" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"atx" = ( +/obj/structure/curtain/open/shower, +/obj/structure/hygiene/shower, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/centcom/holding) +"atB" = ( +/obj/floor_decal/ntlogo{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"atC" = ( +/obj/floor_decal/ntlogo{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"atE" = ( +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/centcom/holding) +"atN" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 10 + }, +/obj/machinery/chem_master, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"atO" = ( +/obj/machinery/chemical_dispenser/ert, +/obj/item/reagent_containers/glass/beaker/large, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"atP" = ( +/obj/structure/table/reinforced, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"atY" = ( +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-j2" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"atZ" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "monotile_light" + }, +/area/centcom/specops) +"aua" = ( +/obj/machinery/door/airlock/external{ + frequency = 1380; + id_tag = "admin_shuttle_hatch"; + locked = 1; + name = "Shuttle Hatch"; + req_access = newlist() + }, +/obj/shuttle_landmark/admin/start, +/turf/simulated/floor/plating, +/area/shuttle/administration/centcom) +"aub" = ( +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"auc" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/hydrogen, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"aud" = ( +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"aue" = ( +/obj/floor_decal/ntlogo, +/obj/structure/disposalpipe/junction, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"auf" = ( +/obj/floor_decal/ntlogo{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"aug" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Medical Special Operations"; + req_access = newlist() + }, +/obj/structure/sign/redcross{ + pixel_y = -32 + }, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"auh" = ( +/obj/structure/table/standard, +/obj/item/material/hatchet, +/obj/item/material/minihoe, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"aui" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"auj" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"auk" = ( +/obj/decal/cleanable/filth, +/obj/machinery/bodyscanner{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"aul" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/beige/border{ + dir = 1 + }, +/obj/structure/sign/warning/nosmoking_1{ + desc = "A warning sign which reads 'NO SMOKING'. Someone has scratched a variety of crude words in gutter across the entire sign."; + pixel_y = 32 + }, +/obj/machinery/vending/medical/sierra, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"aum" = ( +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 9 + }, +/obj/machinery/organ_printer/robot/mapped, +/obj/floor_decal/floordetail/edgedrain, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"auo" = ( +/obj/floor_decal/industrial/hatch, +/turf/unsimulated/floor/reinforced, +/area/centcom) +"auq" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"aus" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/reinforced, +/area/centcom) +"aut" = ( +/obj/structure/closet/secure_closet/chemical_sierra, +/obj/item/stack/material/phoron{ + amount = 5 + }, +/obj/item/clothing/glasses/science, +/obj/item/device/scanner/spectrometer/adv, +/obj/item/hand_labeler{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/floor_decal/borderfloorwhite{ + dir = 9 + }, +/obj/floor_decal/corner/beige/border{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"auu" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/beige/border{ + dir = 1 + }, +/obj/machinery/reagentgrinder, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"auv" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/beige/border{ + dir = 1 + }, +/obj/machinery/chemical_dispenser/full, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"aux" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Special Operations Command"; + req_access = newlist() + }, +/obj/structure/sign/warning/secure_area/armory{ + dir = 4; + pixel_y = 32 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"auy" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/landmark{ + name = "Commando" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"auz" = ( +/obj/structure/table/steel_reinforced, +/obj/item/storage/box/donut, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"auA" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/paicard, +/obj/item/device/paicard, +/obj/item/device/paicard, +/obj/item/device/paicard, +/obj/item/device/paicard, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"auB" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/landmark{ + name = "Commando" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"auC" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"auD" = ( +/obj/structure/disposalpipe/segment, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"auE" = ( +/obj/machinery/body_scanconsole{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"auF" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"auG" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"auJ" = ( +/obj/machinery/body_scanconsole{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/red, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"auO" = ( +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "cc_surgery_operative" + }, +/turf/unsimulated/floor/plating, +/area/centcom/specops) +"auP" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/structure/closet/secure_closet{ + name = "long term chamber locker"; + req_access = list("ACCESS_SECURITY") + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/holding) +"auQ" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"auR" = ( +/obj/structure/table/reinforced, +/obj/item/device/flashlight/lamp{ + pixel_y = 15 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"auW" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/latexgloves{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/floor_decal/carpet{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"auX" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"auY" = ( +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"avb" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"avc" = ( +/obj/structure/table/reinforced, +/obj/item/device/flashlight/maglight, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/item/reagent_containers/food/condiment/small/oliveoil{ + name = "vaseline"; + pixel_y = 17 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"avf" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"avg" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"avh" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 8 + }, +/obj/structure/flora/pottedplant/largebush, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"avj" = ( +/obj/machinery/embedded_controller/radio/simple_docking_controller{ + dir = 1; + frequency = 1380; + id_tag = "admin_shuttle_bay"; + name = "shuttle bay controller"; + pixel_y = -29; + tag_door = "admin_shuttle_hatch" + }, +/turf/unsimulated/floor/reinforced, +/area/centcom) +"avp" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"avq" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"avr" = ( +/obj/machinery/door/airlock/centcom{ + name = "Long Term Prison" + }, +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/holding) +"avs" = ( +/obj/floor_decal/industrial/warning, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"avu" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/machinery/door/airlock/centcom{ + name = "Interrogation" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"avw" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"avx" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"avy" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"avz" = ( +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"avD" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/megaphone, +/obj/item/device/megaphone, +/obj/item/device/megaphone, +/obj/item/device/megaphone, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"avE" = ( +/obj/structure/table/steel_reinforced, +/obj/item/storage/box/donut, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"avF" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/specops) +"avG" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"avK" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"avM" = ( +/turf/simulated/wall/walnut, +/area/holodeck/source_cafe) +"avN" = ( +/obj/structure/table/rack, +/obj/item/rig_module/mounted/energy/taser, +/obj/item/rig_module/mounted/energy/taser, +/obj/item/rig_module/mounted/energy/taser, +/obj/item/rig_module/maneuvering_jets, +/obj/item/rig_module/maneuvering_jets, +/obj/item/rig_module/grenade_launcher, +/obj/item/rig_module/device/drill, +/obj/item/rig_module/device/drill, +/obj/item/rig_module/device/healthscanner, +/obj/item/rig_module/device/healthscanner, +/obj/item/rig_module/device/rcd, +/obj/item/rig_module/device/rcd, +/obj/item/rig_module/chem_dispenser/injector, +/obj/item/rig_module/chem_dispenser/injector, +/obj/item/rig_module/chem_dispenser/combat, +/obj/item/rig_module/chem_dispenser/combat, +/obj/item/rig_module/mounted/energy/egun, +/obj/item/rig_module/mounted/energy/egun, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/centcom/specops) +"awf" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/red/border, +/mob/living/bot/secbot/beepsky, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"awg" = ( +/obj/structure/table/rack, +/obj/item/clothing/head/beret/centcom/officer, +/obj/item/clothing/head/beret/centcom/officer, +/obj/item/clothing/head/beret/centcom/officer, +/obj/item/clothing/head/beret/centcom/officer, +/obj/item/clothing/head/beret/centcom/officer, +/obj/item/clothing/head/beret/centcom/officer, +/obj/item/clothing/mask/balaclava, +/obj/item/clothing/mask/balaclava, +/obj/item/clothing/mask/balaclava, +/obj/item/clothing/mask/balaclava, +/obj/item/clothing/mask/balaclava, +/obj/item/clothing/mask/balaclava, +/obj/item/clothing/accessory/storage/holster/waist, +/obj/item/clothing/accessory/storage/holster/waist, +/obj/item/clothing/accessory/storage/holster/waist, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/centcom/specops) +"awj" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"awu" = ( +/turf/unsimulated/wall, +/area/tdome/tdomeobserve) +"awv" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"aww" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"awF" = ( +/obj/structure/table/standard, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"awG" = ( +/obj/structure/table/standard, +/obj/machinery/microwave, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"awI" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/food/drinks/glass2/square, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"awJ" = ( +/obj/structure/table/standard, +/obj/item/device/binoculars, +/obj/item/device/binoculars, +/obj/item/device/binoculars, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"awK" = ( +/obj/machinery/vending/coffee, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"awL" = ( +/obj/machinery/vending/snack, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"awM" = ( +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"awN" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/structure/reagent_dispensers/beerkeg, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"awO" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"awP" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"awQ" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"awR" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"awS" = ( +/obj/machinery/computer/arcade, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"awT" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/red/diagonal, +/obj/item/reagent_containers/food/drinks/bottle/small/beer, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"axb" = ( +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"axf" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/item/stack/material/cloth, +/obj/item/stack/material/cloth, +/obj/item/stack/material/cloth, +/obj/item/stack/material/cloth, +/obj/item/stack/material/cloth, +/obj/item/stack/material/cloth, +/obj/item/stack/material/cloth, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"axm" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"axn" = ( +/obj/structure/table/glass, +/obj/item/material/knife, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"axo" = ( +/obj/structure/table/glass, +/obj/item/material/kitchen/rollingpin, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"axp" = ( +/obj/structure/table/glass, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"axq" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"axr" = ( +/obj/structure/bed/chair, +/obj/landmark{ + name = "tdomeobserve" + }, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"axs" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/food/drinks/cans/dr_gibb, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"axt" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/bodybags, +/obj/item/storage/firstaid/o2, +/obj/item/storage/firstaid/regular, +/obj/item/device/flash, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health, +/obj/item/device/flash, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/regular, +/obj/item/storage/pill_bottle/antitox, +/obj/item/storage/pill_bottle/kelotane, +/obj/item/storage/pill_bottle/kelotane, +/obj/item/storage/pill_bottle/antitox, +/obj/item/storage/pill_bottle/kelotane, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/fire, +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"axu" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/gold/ten, +/obj/item/stack/material/gold/ten, +/obj/item/stack/material/gold/ten, +/obj/item/stack/material/gold/ten, +/obj/item/stack/material/gold/ten, +/obj/item/stack/material/gold/ten, +/obj/item/stack/material/gold/ten, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"axw" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/aluminium/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"axB" = ( +/obj/structure/closet/crate/freezer, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"axC" = ( +/obj/item/device/binoculars, +/obj/structure/table/standard, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"axD" = ( +/obj/item/modular_computer/telescreen, +/obj/structure/table/standard, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"axE" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"axI" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/plastic/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"axJ" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/titanium/fifty, +/obj/item/stack/material/titanium/fifty, +/obj/item/stack/material/titanium/fifty, +/obj/item/stack/material/titanium/fifty, +/obj/item/stack/material/titanium/fifty, +/obj/item/stack/material/titanium/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"axQ" = ( +/obj/structure/table/reinforced, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"axR" = ( +/obj/structure/closet/crate/bin, +/obj/floor_decal/corner/red/diagonal, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/tdome/tdomeobserve) +"axS" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/bodybags, +/obj/item/storage/firstaid/o2, +/obj/item/storage/firstaid/regular, +/obj/item/device/flash, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health, +/obj/item/device/flash, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/regular, +/obj/item/storage/pill_bottle/antitox, +/obj/item/storage/pill_bottle/kelotane, +/obj/item/storage/pill_bottle/kelotane, +/obj/item/storage/pill_bottle/antitox, +/obj/item/storage/pill_bottle/kelotane, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/fire, +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"axT" = ( +/obj/wallframe_spawn/reinforced/hull, +/turf/unsimulated/floor/plating, +/area/centcom/holding) +"axU" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/roller_bed, +/obj/item/roller_bed, +/obj/item/roller_bed, +/obj/item/defibrillator/loaded, +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"axV" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"axW" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped, +/obj/item/stack/material/wood/maple/twentyfive, +/obj/item/stack/material/wood/maple/twentyfive, +/obj/item/stack/material/wood/maple/twentyfive, +/obj/item/stack/material/wood/maple/twentyfive, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"axX" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped, +/obj/item/stack/material/wood/walnut/twentyfive, +/obj/item/stack/material/wood/walnut/twentyfive, +/obj/item/stack/material/wood/walnut/twentyfive, +/obj/item/stack/material/wood/walnut/twentyfive, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"ayc" = ( +/obj/structure/closet/fridge, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"ayd" = ( +/obj/structure/closet/kitchen{ + req_access = null + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"aye" = ( +/obj/item/modular_computer/pda, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"ayf" = ( +/obj/machinery/vending/boozeomat, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"ayg" = ( +/obj/machinery/vending/dinnerware, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"ayh" = ( +/obj/structure/iv_stand, +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"ayi" = ( +/obj/floor_decal/techfloor/corner, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"ayl" = ( +/turf/unsimulated/wall, +/area/tdome) +"aym" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/turf/unsimulated/wall{ + dir = 8; + icon_state = "fakewindows"; + name = "window"; + opacity = 0 + }, +/area/tdome) +"ayn" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/turf/unsimulated/wall{ + dir = 4; + icon_state = "fakewindows2"; + name = "window"; + opacity = 0 + }, +/area/tdome) +"ayo" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/turf/unsimulated/wall{ + dir = 4; + icon_state = "fakewindows"; + name = "window"; + opacity = 0 + }, +/area/tdome) +"ayp" = ( +/obj/structure/closet/crate/medical, +/obj/item/circular_saw, +/obj/item/surgicaldrill, +/obj/item/bonegel{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/bonesetter, +/obj/item/scalpel/basic, +/obj/item/retractor{ + pixel_y = 6 + }, +/obj/item/hemostat{ + pixel_y = 4 + }, +/obj/item/cautery{ + pixel_y = 4 + }, +/obj/item/FixOVein{ + pixel_x = -6; + pixel_y = 1 + }, +/obj/item/stack/nanopaste, +/obj/item/tank/anesthetic, +/obj/item/clothing/mask/breath/medical, +/obj/item/clothing/mask/surgical, +/obj/item/clothing/mask/surgical, +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"ayy" = ( +/obj/item/device/flash, +/obj/item/device/flash, +/obj/item/gun/energy/stunrevolver, +/obj/item/gun/energy/stunrevolver, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/obj/structure/table/rack, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"ayK" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"ayQ" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/decal/cleanable/filth, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"ayR" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"ayS" = ( +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"ayU" = ( +/turf/unsimulated/wall, +/area/tdome/tdome2) +"ayV" = ( +/turf/unsimulated/wall, +/area/tdome/tdome1) +"aza" = ( +/obj/gibspawner/robot, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azb" = ( +/obj/item/material/twohanded/baseballbat/metal, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azc" = ( +/obj/item/melee/telebaton, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azd" = ( +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "beachcorner" + }, +/area/holodeck/source_beach) +"aze" = ( +/turf/simulated/floor/holofloor/beach/sand{ + dir = 1; + icon_state = "beachcorner" + }, +/area/holodeck/source_beach) +"azf" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/creed) +"azj" = ( +/obj/item/pickaxe, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azl" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"azm" = ( +/obj/floor_decal/industrial/outline/blue, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/tdome2) +"azp" = ( +/obj/landmark{ + name = "tdome1" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/tdome2) +"azr" = ( +/turf/unsimulated/wall{ + dir = 9; + icon_state = "fakewindows"; + name = "window"; + opacity = 0 + }, +/area/tdome) +"azs" = ( +/turf/unsimulated/wall{ + dir = 4; + icon_state = "fakewindows2"; + name = "window"; + opacity = 0 + }, +/area/tdome) +"azt" = ( +/turf/unsimulated/wall{ + dir = 5; + icon_state = "fakewindows"; + name = "window"; + opacity = 0 + }, +/area/tdome) +"azu" = ( +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azv" = ( +/turf/unsimulated/wall{ + dir = 8; + icon_state = "fakewindows"; + name = "window"; + opacity = 0 + }, +/area/tdome) +"azw" = ( +/turf/unsimulated/wall{ + dir = 4; + icon_state = "fakewindows"; + name = "window"; + opacity = 0 + }, +/area/tdome) +"azy" = ( +/obj/landmark{ + name = "tdome1" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/tdome1) +"azz" = ( +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"azB" = ( +/obj/floor_decal/industrial/outline/red, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/tdome1) +"azF" = ( +/obj/landmark{ + name = "tdome1" + }, +/obj/machinery/recharger, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/tdome2) +"azG" = ( +/turf/unsimulated/wall{ + icon_state = "fakewindows"; + name = "window"; + opacity = 0 + }, +/area/tdome) +"azH" = ( +/obj/structure/table/rack, +/obj/item/storage/pill_bottle/bicaridine, +/obj/item/storage/pill_bottle/bicaridine, +/obj/item/storage/pill_bottle/bicaridine, +/obj/item/storage/pill_bottle/bicaridine, +/obj/item/storage/pill_bottle/bicaridine, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azI" = ( +/obj/structure/table/rack, +/obj/item/storage/pill_bottle/inaprovaline, +/obj/item/storage/pill_bottle/inaprovaline, +/obj/item/storage/pill_bottle/inaprovaline, +/obj/item/storage/pill_bottle/inaprovaline, +/obj/item/storage/pill_bottle/inaprovaline, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azJ" = ( +/obj/structure/table/rack, +/obj/item/storage/pill_bottle/dylovene, +/obj/item/storage/pill_bottle/dylovene, +/obj/item/storage/pill_bottle/dylovene, +/obj/item/storage/pill_bottle/dylovene, +/obj/item/storage/pill_bottle/dylovene, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azK" = ( +/turf/unsimulated/wall{ + dir = 3; + icon_state = "fakewindows2"; + name = "window"; + opacity = 0 + }, +/area/tdome) +"azL" = ( +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azM" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "Thundernewblue"; + name = "Security Doors" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azN" = ( +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azO" = ( +/turf/unsimulated/wall{ + dir = 1; + icon_state = "fakewindows"; + name = "window"; + opacity = 0 + }, +/area/tdome) +"azP" = ( +/obj/structure/table/glass, +/obj/item/stack/medical/splint, +/obj/item/reagent_containers/pill/tramadol, +/obj/item/reagent_containers/pill/tramadol, +/obj/item/stack/medical/advanced/bruise_pack, +/obj/item/stack/medical/advanced/bruise_pack, +/obj/item/stack/medical/advanced/bruise_pack, +/obj/item/reagent_containers/hypospray/autoinjector, +/obj/item/reagent_containers/hypospray/autoinjector, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azQ" = ( +/obj/item/storage/toolbox/mechanical, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azR" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azS" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/pill/tramadol, +/obj/item/reagent_containers/pill/tramadol, +/obj/item/stack/medical/advanced/ointment, +/obj/item/stack/medical/advanced/ointment, +/obj/item/stack/medical/advanced/ointment, +/obj/item/reagent_containers/hypospray/autoinjector, +/obj/item/reagent_containers/hypospray/autoinjector, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azT" = ( +/obj/item/material/knife/ritual, +/obj/gibspawner/human, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azU" = ( +/obj/floor_decal/corner/red{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azV" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "Thundernewred"; + name = "Security Doors" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"azY" = ( +/obj/landmark{ + name = "tdome1" + }, +/obj/machinery/recharger, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/tdome1) +"aAc" = ( +/obj/machinery/door/airlock/glass, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"aAd" = ( +/obj/structure/table/glass, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"aAe" = ( +/obj/gibspawner/human, +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"aAj" = ( +/obj/item/circular_saw, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"aAk" = ( +/obj/gibspawner/human, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"aAl" = ( +/obj/item/material/sword, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"aAq" = ( +/obj/structure/table/rack, +/obj/item/storage/pill_bottle/dexalin_plus, +/obj/item/storage/pill_bottle/dexalin_plus, +/obj/item/storage/pill_bottle/dexalin_plus, +/obj/item/storage/pill_bottle/dexalin_plus, +/obj/item/storage/pill_bottle/dexalin_plus, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"aAr" = ( +/obj/structure/table/rack, +/obj/item/storage/pill_bottle/kelotane, +/obj/item/storage/pill_bottle/kelotane, +/obj/item/storage/pill_bottle/kelotane, +/obj/item/storage/pill_bottle/kelotane, +/obj/item/storage/pill_bottle/kelotane, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"aAs" = ( +/obj/structure/table/rack, +/obj/item/storage/pill_bottle/tramadol, +/obj/item/storage/pill_bottle/tramadol, +/obj/item/storage/pill_bottle/tramadol, +/obj/item/storage/pill_bottle/tramadol, +/obj/item/storage/pill_bottle/tramadol, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"aAt" = ( +/obj/machinery/sleeper{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"aAD" = ( +/obj/structure/sign/double/iccgflag/right{ + pixel_y = 32 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"aAM" = ( +/obj/item/material/knife/ritual, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"aBu" = ( +/turf/unsimulated/wall, +/area/tdome/tdomeadmin) +"aBv" = ( +/obj/structure/closet/crate/bin, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/tdome/tdomeadmin) +"aBw" = ( +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/tdome/tdomeadmin) +"aBx" = ( +/obj/machinery/jukebox/custom_tape/old, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/tdome/tdomeadmin) +"aBy" = ( +/obj/structure/table/woodentable/walnut, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/tdome/tdomeadmin) +"aBz" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/binoculars, +/obj/item/reagent_containers/food/drinks/glass2, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/tdome/tdomeadmin) +"aBA" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/reagent_containers/food/drinks/glass2, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/tdome/tdomeadmin) +"aBB" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/binoculars, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/tdome/tdomeadmin) +"aBD" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 1 + }, +/obj/landmark{ + name = "tdomeadmin" + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/tdome/tdomeadmin) +"aBE" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/tdome/tdomeadmin) +"aBF" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/modular_computer/telescreen/preset, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/tdome/tdomeadmin) +"aBG" = ( +/obj/item/stool/bar/padded, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/tdome/tdomeadmin) +"aBJ" = ( +/obj/machinery/vending/boozeomat, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/tdome/tdomeadmin) +"aBK" = ( +/obj/structure/closet/cabinet, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/tdome/tdomeadmin) +"aCo" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"aCH" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "green"; + name = "carpet" + }, +/area/centcom/living) +"aDn" = ( +/obj/machinery/door/airlock/centcom{ + name = "General Access"; + req_access = newlist() + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/tdomeobserve) +"aDS" = ( +/obj/landmark{ + name = "ActorSpawn" + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aEi" = ( +/obj/machinery/acting/wardrobe, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aEj" = ( +/obj/structure/table/rack, +/obj/item/storage/box/lights/mixed, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aEk" = ( +/obj/structure/table/rack, +/obj/item/stack/tile/floor{ + amount = 50 + }, +/obj/item/stack/tile/floor{ + amount = 50 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aEC" = ( +/obj/structure/table/rack, +/obj/item/stack/tile/floor_freezer{ + amount = 50 + }, +/obj/item/stack/tile/floor_freezer{ + amount = 50 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aED" = ( +/obj/structure/table/rack, +/obj/item/stack/tile/carpet{ + amount = 50 + }, +/obj/item/stack/tile/carpet{ + amount = 50 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aEE" = ( +/obj/structure/table/rack, +/obj/item/stack/tile/grass{ + amount = 50 + }, +/obj/item/stack/tile/grass{ + amount = 50 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aEF" = ( +/obj/structure/table/rack, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 5; + pixel_y = 5 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aEG" = ( +/obj/structure/table/rack, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aEN" = ( +/obj/structure/table/rack, +/obj/item/stack/material/wood{ + amount = 50 + }, +/obj/item/stack/material/wood{ + amount = 50 + }, +/obj/item/stack/material/wood{ + amount = 50 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aEO" = ( +/obj/structure/table/rack, +/obj/item/stack/material/sandstone{ + amount = 50 + }, +/obj/item/stack/material/sandstone{ + amount = 50 + }, +/obj/item/stack/material/sandstone{ + amount = 50 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aEP" = ( +/obj/structure/table/rack, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aEQ" = ( +/obj/structure/table/rack, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFb" = ( +/obj/structure/table/rack, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/obj/item/stack/material/marble{ + amount = 50 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFc" = ( +/obj/structure/table/rack, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFd" = ( +/obj/structure/table/rack, +/obj/item/stack/material/silver{ + amount = 50 + }, +/obj/item/stack/material/silver{ + amount = 50 + }, +/obj/item/stack/material/silver{ + amount = 50 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFn" = ( +/obj/machinery/gibber{ + anchored = 0 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFo" = ( +/obj/machinery/papershredder, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFt" = ( +/obj/machinery/recharger, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFu" = ( +/obj/machinery/reagentgrinder, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFE" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped, +/obj/item/stack/tile/carpetorange/fifty, +/obj/item/stack/tile/carpetorange/fifty, +/obj/item/stack/tile/carpetorange/fifty, +/obj/item/stack/tile/carpetorange/fifty, +/obj/item/stack/tile/carpetorange/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"aFH" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFI" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFJ" = ( +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFK" = ( +/obj/item/paper{ + info = "\[center]\[b]READ INSTRUCTIONS CAREFULLY\[/b]\[/center]\[br]\[br]Hello! Welcome and congratulations on being hired for Nanotrasen's new Television initiative. You are now tasked with the creation and production of Nanotrasen brand television that is to be broadcasted to all of our stations!\[br]\[br] We've outfitted these facilities with all the materials and objects you will need.\[br]On the port side you'll find various venders and machines, namely the Wardrobe Dispenser, which will dispense holoclothing and items for you to use, and a Quickee brand plastic surgery machine (which I would remind you you are contractually obligated to \[b]not\[/b] report to the authorities.) which can change your appearance into anything you want, even other races. Stern and aft you'll find all the materials we could muster up on short notice. Use it to decorate the stage to your liking. Starboard you'll find gases, microwaves, hydroponic trays and the like. Go silly! This is already paid for (as are you) so do what you want and entertain!"; + name = "Actor's Guild Instruction Pamphlet" + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFO" = ( +/obj/item/modular_computer/telescreen/preset/generic{ + pixel_y = 32 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"aFR" = ( +/obj/machinery/vending/tool, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFS" = ( +/obj/machinery/biogenerator, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFV" = ( +/obj/machinery/vending/hydroseeds, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aFW" = ( +/obj/machinery/microwave, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGi" = ( +/obj/machinery/vending/hydronutrients, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGj" = ( +/obj/machinery/vending/medical, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGk" = ( +/obj/machinery/vending/security, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGl" = ( +/obj/machinery/vending/robotics, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGm" = ( +/obj/item/paper_bin, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGq" = ( +/obj/machinery/vending/engivend, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGr" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGA" = ( +/obj/machinery/vending/dinnerware, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGB" = ( +/obj/machinery/vending/cola{ + name = "hacked Robust Softdrinks"; + prices = list() + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGD" = ( +/obj/machinery/chemical_dispenser/bar_alc/full, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGE" = ( +/obj/machinery/vending/containers, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGG" = ( +/obj/overlay/palmtree_r, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_temple) +"aGH" = ( +/obj/machinery/chemical_dispenser/full, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGI" = ( +/obj/machinery/pipedispenser, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGJ" = ( +/obj/machinery/chemical_dispenser/bar_soft/full, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGK" = ( +/obj/floor_decal/stoneborder/corner{ + dir = 1 + }, +/turf/simulated/floor/holofloor/tiled/stone, +/area/holodeck/source_temple) +"aGN" = ( +/obj/machinery/door/unpowered/simple/sandstone, +/turf/simulated/floor/holofloor/tiled/stone, +/area/holodeck/source_temple) +"aGP" = ( +/obj/machinery/acting/changer, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGQ" = ( +/obj/machinery/vending/props, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGU" = ( +/obj/machinery/newscaster{ + pixel_y = -27 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGV" = ( +/obj/structure/table/rack, +/obj/item/stack/tile/floor{ + amount = 50 + }, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGW" = ( +/obj/machinery/portable_atmospherics/canister/phoron, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGX" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGY" = ( +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aGZ" = ( +/obj/floor_decal/stoneborder/corner{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled/stone, +/area/holodeck/source_temple) +"aHb" = ( +/obj/machinery/bookbinder, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aHc" = ( +/obj/machinery/libraryscanner, +/turf/unsimulated/floor/plating, +/area/acting/backstage) +"aHd" = ( +/obj/structure/bed/chair/wood{ + holographic = 1 + }, +/turf/simulated/floor/holofloor/tiled/stone, +/area/holodeck/source_temple) +"aHn" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"aHv" = ( +/obj/structure/table/holo_woodentable, +/turf/simulated/floor/holofloor/tiled/stone, +/area/holodeck/source_temple) +"aHz" = ( +/obj/structure/bed/chair/wood{ + dir = 1; + holographic = 1 + }, +/turf/simulated/floor/holofloor/tiled/stone, +/area/holodeck/source_temple) +"aHL" = ( +/obj/machinery/hologram/holopad/longrange, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"aHY" = ( +/obj/structure/table/woodentable_reinforced/ebony/walnut, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"aKp" = ( +/turf/simulated/floor/tiled, +/area/acting/stage) +"aKq" = ( +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/acting/stage) +"aKr" = ( +/obj/floor_decal/floordetail/edgedrain{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"aKP" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/bed/chair/comfy/blue{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"aLw" = ( +/obj/machinery/camera/network/thunder{ + anchored = 0; + c_tag = "Television"; + name = "Movable Camera" + }, +/turf/simulated/floor/tiled, +/area/acting/stage) +"aMa" = ( +/obj/machinery/light/spot, +/turf/simulated/floor/tiled, +/area/acting/stage) +"aOv" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"aPo" = ( +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/holding) +"aQf" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/structure/holostool, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_meetinghall) +"aQj" = ( +/obj/decal/cleanable/filth, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"aQl" = ( +/obj/structure/window/reinforced/crescent, +/turf/unsimulated/wall, +/area/space) +"aQu" = ( +/obj/structure/table/holotable, +/obj/item/toy/ringbell{ + holographic = 1 + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_boxingcourt) +"aQw" = ( +/obj/structure/window/reinforced/crescent{ + dir = 4 + }, +/turf/unsimulated/wall, +/area/space) +"aQx" = ( +/obj/floor_decal/industrial/outline, +/obj/floor_decal/spline/plain/grey{ + dir = 9 + }, +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aQy" = ( +/obj/floor_decal/industrial/outline, +/obj/floor_decal/spline/plain/grey{ + dir = 1 + }, +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aQz" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/floor_decal/spline/plain/grey{ + dir = 1 + }, +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aQA" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/floor_decal/spline/plain/grey{ + dir = 5 + }, +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aQB" = ( +/obj/structure/window/reinforced/crescent{ + dir = 8 + }, +/turf/unsimulated/wall, +/area/space) +"aQC" = ( +/obj/floor_decal/techfloor, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"aQR" = ( +/obj/floor_decal/industrial/outline, +/obj/floor_decal/spline/plain/grey{ + dir = 8 + }, +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aQS" = ( +/obj/floor_decal/industrial/outline, +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aQT" = ( +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aQU" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/floor_decal/spline/plain/grey{ + dir = 4 + }, +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aRy" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"aRG" = ( +/obj/floor_decal/spline/plain/grey{ + dir = 8 + }, +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aRH" = ( +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aRI" = ( +/obj/floor_decal/spline/plain/grey{ + dir = 4 + }, +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aRS" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/living) +"aRT" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"aRV" = ( +/turf/unsimulated/floor/reinforced, +/area/centcom) +"aRY" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/chemical_dispenser/bar_coffee/full{ + pixel_y = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"aSi" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/structure/holostool, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_meetinghall) +"aSq" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/atm{ + pixel_y = 32 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"aSt" = ( +/obj/floor_decal/spline/plain/grey{ + dir = 9 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aSu" = ( +/obj/floor_decal/spline/plain/grey{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aSv" = ( +/obj/floor_decal/spline/plain/grey{ + dir = 5 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aSE" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/holofloor/lino, +/area/holodeck/source_meetinghall) +"aSG" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/holofloor/lino, +/area/holodeck/source_meetinghall) +"aSH" = ( +/obj/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/holofloor/tiled, +/area/space) +"aSI" = ( +/turf/unsimulated/floor/techfloor, +/area/centcom) +"aSK" = ( +/obj/structure/window/reinforced/holowindow, +/obj/structure/window/reinforced/holowindow{ + dir = 8 + }, +/obj/structure/window/reinforced/holowindow{ + dir = 1 + }, +/obj/structure/grille, +/obj/structure/window/reinforced/holowindow{ + dir = 4 + }, +/turf/simulated/floor/holofloor/reinforced, +/area/holodeck/source_military) +"aSL" = ( +/obj/structure/flora/ausbushes/leafybush, +/obj/structure/window/reinforced/holowindow{ + dir = 1 + }, +/obj/structure/window/reinforced/holowindow, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_military) +"aSM" = ( +/obj/structure/flora/ausbushes/sunnybush, +/obj/structure/window/reinforced/holowindow{ + dir = 1 + }, +/obj/structure/window/reinforced/holowindow, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_military) +"aSN" = ( +/obj/structure/window/reinforced/holowindow, +/obj/structure/window/reinforced/holowindow{ + dir = 8 + }, +/obj/structure/window/reinforced/holowindow{ + dir = 1 + }, +/obj/structure/sign/double/solgovflag/right{ + dir = 1 + }, +/obj/structure/grille, +/turf/simulated/floor/holofloor/reinforced, +/area/holodeck/source_military) +"aSO" = ( +/obj/structure/window/reinforced/holowindow, +/obj/structure/window/reinforced/holowindow{ + dir = 1 + }, +/obj/structure/window/reinforced/holowindow{ + dir = 4 + }, +/obj/structure/sign/double/solgovflag/left{ + dir = 1 + }, +/obj/structure/grille, +/turf/simulated/floor/holofloor/reinforced, +/area/holodeck/source_military) +"aSP" = ( +/obj/structure/flora/ausbushes/pointybush, +/obj/structure/window/reinforced/holowindow{ + dir = 1 + }, +/obj/structure/window/reinforced/holowindow, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_military) +"aSQ" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/window/reinforced/holowindow{ + dir = 1 + }, +/obj/structure/window/reinforced/holowindow, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_military) +"aSR" = ( +/obj/floor_decal/spline/plain/grey{ + dir = 4 + }, +/obj/structure/table/holotable, +/obj/item/toy/bosunwhistle, +/turf/simulated/floor/exoplanet/concrete, +/area/holodeck/source_military) +"aSX" = ( +/turf/simulated/floor/holofloor/tiled, +/area/space) +"aSZ" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/holofloor/lino, +/area/holodeck/source_meetinghall) +"aTa" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/holofloor/lino, +/area/holodeck/source_meetinghall) +"aTB" = ( +/obj/floor_decal/spline/plain/grey{ + dir = 8 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_military) +"aTC" = ( +/obj/structure/bed/chair{ + dir = 1; + holographic = 1 + }, +/obj/floor_decal/spline/plain/black{ + dir = 8 + }, +/obj/floor_decal/corner/black{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_military) +"aTD" = ( +/obj/structure/bed/chair{ + dir = 1; + holographic = 1 + }, +/obj/floor_decal/corner/black{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_military) +"aTE" = ( +/obj/structure/bed/chair{ + dir = 1; + holographic = 1 + }, +/obj/floor_decal/corner/black{ + dir = 1 + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_military) +"aTF" = ( +/obj/structure/bed/chair{ + dir = 1; + holographic = 1 + }, +/obj/floor_decal/spline/plain/black{ + dir = 4 + }, +/obj/floor_decal/corner/black{ + dir = 1 + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_military) +"aTG" = ( +/obj/floor_decal/spline/plain/grey{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_military) +"aTK" = ( +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"aUp" = ( +/obj/structure/table/steel_reinforced, +/obj/item/stamp/boss, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"aUq" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_plaza) +"aUt" = ( +/obj/structure/bed/chair{ + dir = 1; + holographic = 1 + }, +/obj/floor_decal/spline/plain/black{ + dir = 10 + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_military) +"aUu" = ( +/obj/structure/bed/chair{ + dir = 1; + holographic = 1 + }, +/obj/floor_decal/spline/plain/black, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_military) +"aUv" = ( +/obj/structure/bed/chair{ + dir = 1; + holographic = 1 + }, +/obj/floor_decal/spline/plain/black{ + dir = 6 + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_military) +"aUx" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/flora/ausbushes/ywflowers, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_plaza) +"aUM" = ( +/obj/structure/flora/pottedplant/stoutbush, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"aUQ" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/flora/ausbushes/ywflowers, +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_plaza) +"aUU" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"aUV" = ( +/obj/structure/bed/chair/wood{ + holographic = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"aUW" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"aVn" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"aVp" = ( +/obj/floor_decal/spline/plain/grey{ + dir = 10 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_military) +"aVq" = ( +/obj/floor_decal/spline/plain/grey, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_military) +"aVr" = ( +/obj/floor_decal/spline/plain/grey{ + dir = 6 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_military) +"aVD" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_plaza) +"aVP" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"aWd" = ( +/obj/structure/window/reinforced/crescent, +/obj/structure/window/reinforced/crescent{ + dir = 1 + }, +/turf/unsimulated/wall, +/area/space) +"aWe" = ( +/obj/structure/window/reinforced/crescent{ + dir = 1 + }, +/turf/unsimulated/wall, +/area/space) +"aWL" = ( +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_volleyball) +"aWM" = ( +/obj/floor_decal/beach/corner, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_volleyball) +"aWN" = ( +/obj/floor_decal/beach{ + dir = 1 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_volleyball) +"aWO" = ( +/obj/floor_decal/beach/corner{ + dir = 8 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_volleyball) +"aWP" = ( +/obj/structure/window/reinforced/crescent{ + dir = 4 + }, +/obj/structure/window/reinforced/crescent{ + dir = 8 + }, +/turf/unsimulated/wall, +/area/space) +"aWQ" = ( +/turf/simulated/floor/holofloor/desert, +/area/holodeck/source_desert) +"aWR" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/holofloor/desert, +/area/holodeck/source_desert) +"aWS" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_picnicarea) +"aWT" = ( +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_picnicarea) +"aWU" = ( +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_picnicarea) +"aWV" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_picnicarea) +"aWW" = ( +/obj/structure/table/rack/holorack, +/obj/landmark/costume/chameleon, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_theatre) +"aWX" = ( +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_courtroom) +"aWY" = ( +/obj/structure/window/reinforced/holowindow{ + dir = 4 + }, +/obj/structure/flora/pottedplant{ + icon_state = "plant-10" + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_courtroom) +"aWZ" = ( +/obj/structure/table/holo_woodentable, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_courtroom) +"aXa" = ( +/turf/simulated/floor/holofloor/reinforced, +/area/holodeck/source_wildlife) +"aXb" = ( +/turf/simulated/floor/holofloor/reinforced, +/area/holodeck/source_plating) +"aXc" = ( +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_emptycourt) +"aXd" = ( +/obj/structure/holostool, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_emptycourt) +"aXe" = ( +/obj/structure/holostool, +/obj/structure/window/reinforced/holowindow{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_emptycourt) +"aXf" = ( +/obj/floor_decal/corner/red/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_emptycourt) +"aXg" = ( +/obj/floor_decal/corner/red{ + dir = 5 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_emptycourt) +"aXh" = ( +/obj/floor_decal/corner/red/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_emptycourt) +"aXu" = ( +/obj/floor_decal/beach{ + dir = 8 + }, +/obj/structure/holostool, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_volleyball) +"aXv" = ( +/obj/floor_decal/spline/plain{ + dir = 9 + }, +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "desert2" + }, +/area/holodeck/source_volleyball) +"aXw" = ( +/obj/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_volleyball) +"aXx" = ( +/obj/floor_decal/spline/plain{ + dir = 5 + }, +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "desert4" + }, +/area/holodeck/source_volleyball) +"aXy" = ( +/obj/floor_decal/beach{ + dir = 4 + }, +/obj/structure/holostool, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_volleyball) +"aXz" = ( +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/holofloor/desert, +/area/holodeck/source_desert) +"aXA" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_picnicarea) +"aXB" = ( +/obj/structure/flora/ausbushes/sunnybush, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_picnicarea) +"aXC" = ( +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_theatre) +"aXD" = ( +/obj/machinery/door/window/holowindoor{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_courtroom) +"aXE" = ( +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_courtroom) +"aXF" = ( +/obj/landmark{ + name = "Holocarp Spawn" + }, +/turf/simulated/floor/holofloor/reinforced, +/area/holodeck/source_wildlife) +"aXG" = ( +/obj/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_emptycourt) +"aXH" = ( +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_emptycourt) +"aXI" = ( +/obj/floor_decal/corner/red{ + dir = 6 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_emptycourt) +"aXW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"aYe" = ( +/obj/structure/holostool, +/obj/floor_decal/beach{ + dir = 8 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_volleyball) +"aYf" = ( +/obj/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_volleyball) +"aYg" = ( +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_volleyball) +"aYh" = ( +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "desert3" + }, +/area/holodeck/source_volleyball) +"aYi" = ( +/obj/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_volleyball) +"aYj" = ( +/obj/structure/holostool, +/obj/floor_decal/beach{ + dir = 4 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_volleyball) +"aYk" = ( +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_picnicarea) +"aYl" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/holofloor/desert, +/area/holodeck/source_picnicarea) +"aYm" = ( +/obj/structure/window/reinforced/holowindow{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_courtroom) +"aYn" = ( +/obj/structure/bed/chair/holochair, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_courtroom) +"aYo" = ( +/obj/structure/window/reinforced/holowindow{ + dir = 1 + }, +/obj/structure/window/reinforced/holowindow{ + dir = 8 + }, +/obj/structure/table/holo_woodentable, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_courtroom) +"aYp" = ( +/obj/structure/window/reinforced/holowindow{ + dir = 1 + }, +/obj/structure/table/holo_woodentable, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_courtroom) +"aYq" = ( +/obj/machinery/door/window/holowindoor{ + dir = 1; + name = "Jury Box" + }, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 9 + }, +/obj/floor_decal/carpet{ + dir = 5 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"aYr" = ( +/obj/machinery/door/window/holowindoor{ + dir = 4; + name = "Red Team" + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_emptycourt) +"aYQ" = ( +/obj/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "desert2" + }, +/area/holodeck/source_volleyball) +"aYR" = ( +/obj/structure/flora/ausbushes/palebush, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_picnicarea) +"aYS" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_theatre) +"aYT" = ( +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_theatre) +"aYU" = ( +/obj/structure/window/reinforced/holowindow, +/obj/machinery/door/window/holowindoor{ + dir = 1; + name = "Court Reporter's Box" + }, +/obj/structure/bed/chair/holochair, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_courtroom) +"aYV" = ( +/obj/structure/table/holo_woodentable, +/obj/structure/window/reinforced/holowindow, +/obj/structure/window/reinforced/holowindow{ + dir = 8 + }, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_courtroom) +"aYW" = ( +/obj/structure/table/holo_woodentable, +/obj/structure/window/reinforced/holowindow, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_courtroom) +"aYX" = ( +/obj/structure/table/holo_woodentable, +/obj/structure/window/reinforced/holowindow, +/obj/structure/window/reinforced/holowindow{ + dir = 4 + }, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_courtroom) +"aYY" = ( +/obj/structure/window/reinforced/holowindow, +/obj/machinery/door/window/holowindoor{ + base_state = "right"; + dir = 1; + icon_state = "right"; + name = "Witness Box" + }, +/obj/structure/bed/chair/holochair, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_courtroom) +"aYZ" = ( +/obj/structure/window/reinforced/holowindow{ + dir = 8 + }, +/obj/structure/table/holo_woodentable, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_courtroom) +"aZa" = ( +/obj/structure/bed/chair/holochair{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 9 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"aZb" = ( +/obj/structure/bed/chair/holochair{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet/corners{ + dir = 9 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"aZw" = ( +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "desert1" + }, +/area/holodeck/source_volleyball) +"aZx" = ( +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_theatre) +"aZy" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 9 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_theatre) +"aZz" = ( +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/structure/holostool, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_theatre) +"aZA" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 5 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_theatre) +"aZB" = ( +/obj/structure/window/reinforced/holowindow{ + dir = 1 + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_theatre) +"aZC" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 9 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"aZD" = ( +/obj/floor_decal/carpet{ + dir = 1 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"aZE" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 5 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"aZF" = ( +/obj/structure/bed/chair/holochair{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 8 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"aZG" = ( +/obj/structure/bed/chair/holochair{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 4 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"aZX" = ( +/obj/floor_decal/beach{ + dir = 8 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_volleyball) +"aZY" = ( +/obj/floor_decal/spline/plain{ + dir = 8 + }, +/obj/structure/holonet/end, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_volleyball) +"aZZ" = ( +/obj/structure/holonet, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_volleyball) +"baa" = ( +/obj/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/holonet/end{ + dir = 8 + }, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_volleyball) +"bab" = ( +/obj/floor_decal/beach{ + dir = 4 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_volleyball) +"bac" = ( +/obj/structure/flora/ausbushes/leafybush, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_picnicarea) +"bad" = ( +/obj/structure/holostool, +/obj/floor_decal/carpet{ + dir = 8 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_theatre) +"bae" = ( +/obj/structure/holostool, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_theatre) +"baf" = ( +/obj/structure/holostool, +/obj/floor_decal/carpet{ + dir = 4 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_theatre) +"bag" = ( +/obj/structure/table/holo_woodentable, +/obj/floor_decal/carpet{ + dir = 8 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"bah" = ( +/obj/structure/table/holo_woodentable, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"bai" = ( +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"baj" = ( +/obj/structure/table/holo_woodentable, +/obj/floor_decal/carpet{ + dir = 4 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"bak" = ( +/obj/floor_decal/corner/green{ + dir = 9 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_emptycourt) +"bal" = ( +/obj/floor_decal/corner/green{ + dir = 6 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_emptycourt) +"baC" = ( +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "desert2" + }, +/area/holodeck/source_volleyball) +"baD" = ( +/obj/structure/flora/ausbushes/genericbush, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_picnicarea) +"baE" = ( +/obj/structure/flora/ausbushes/reedbush, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_picnicarea) +"baF" = ( +/obj/structure/bed/chair/holochair{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 8 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"baG" = ( +/obj/structure/bed/chair/holochair{ + dir = 1 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"baH" = ( +/obj/structure/bed/chair/holochair{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 4 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"bbf" = ( +/obj/item/beach_ball/holovolleyball, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_volleyball) +"bbg" = ( +/obj/machinery/door/window/holowindoor{ + base_state = "right"; + dir = 4; + icon_state = "right" + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_courtroom) +"bbh" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"bbi" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"bbj" = ( +/obj/machinery/door/window/holowindoor{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "Green Team" + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_emptycourt) +"bbD" = ( +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "desert4" + }, +/area/holodeck/source_volleyball) +"bbE" = ( +/obj/structure/holostool, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 10 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_theatre) +"bbF" = ( +/obj/structure/holostool, +/obj/floor_decal/carpet, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_theatre) +"bbG" = ( +/obj/structure/holostool, +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 6 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_theatre) +"bbH" = ( +/turf/simulated/floor/holofloor/tiled/dark, +/area/space) +"bbI" = ( +/obj/structure/bed/chair/holochair{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 10 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"bbJ" = ( +/obj/structure/bed/chair/holochair{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 6 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"bbZ" = ( +/obj/floor_decal/spline/plain{ + dir = 10 + }, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_volleyball) +"bca" = ( +/obj/floor_decal/spline/plain, +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "desert1" + }, +/area/holodeck/source_volleyball) +"bcb" = ( +/obj/floor_decal/spline/plain, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_volleyball) +"bcc" = ( +/obj/floor_decal/spline/plain{ + dir = 6 + }, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_volleyball) +"bcd" = ( +/obj/structure/flora/pottedplant{ + icon_state = "plant-06" + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_theatre) +"bce" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/holofloor/lino, +/area/holodeck/source_meetinghall) +"bcf" = ( +/obj/structure/bed/chair/holochair{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 10 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"bcg" = ( +/obj/structure/bed/chair/holochair{ + dir = 1 + }, +/obj/floor_decal/carpet, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"bch" = ( +/obj/structure/bed/chair/holochair{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 6 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_courtroom) +"bci" = ( +/obj/floor_decal/corner/green/three_quarters, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_emptycourt) +"bcj" = ( +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_emptycourt) +"bck" = ( +/obj/floor_decal/corner/green/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_emptycourt) +"bct" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"bcF" = ( +/obj/structure/window/reinforced/crescent{ + dir = 1 + }, +/obj/structure/window/reinforced/crescent, +/turf/unsimulated/wall, +/area/space) +"bcS" = ( +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_cafe) +"bcT" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/floor_decal/spline/plain/grey{ + dir = 8 + }, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_cafe) +"bcU" = ( +/obj/structure/window/holowindow/full, +/turf/simulated/floor/holofloor, +/area/holodeck/source_cafe) +"bcV" = ( +/obj/structure/bed/chair/wood/walnut{ + holographic = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"bcW" = ( +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_cafe) +"bcX" = ( +/obj/structure/table/holo_woodentable, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_cafe) +"bcY" = ( +/turf/simulated/floor/holofloor/space, +/area/holodeck/source_space) +"bcZ" = ( +/turf/simulated/floor/holofloor/snow, +/area/holodeck/source_snowfield) +"bda" = ( +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_meetinghall) +"bdb" = ( +/obj/structure/flora/pottedplant{ + icon_state = "plant-06" + }, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_meetinghall) +"bdc" = ( +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_basketball) +"bdd" = ( +/obj/structure/holostool, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bde" = ( +/obj/structure/holostool, +/obj/structure/window/reinforced/holowindow{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bdf" = ( +/obj/floor_decal/corner/red/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bdg" = ( +/obj/floor_decal/corner/red{ + dir = 5 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bdh" = ( +/obj/structure/holohoop, +/obj/floor_decal/corner/red{ + dir = 5 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bdi" = ( +/obj/floor_decal/corner/red/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bdj" = ( +/turf/simulated/floor/holofloor/beach/water, +/area/holodeck/source_beach) +"bdk" = ( +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_thunderdomecourt) +"bdl" = ( +/obj/structure/holostool, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bdm" = ( +/obj/structure/holostool, +/obj/structure/window/reinforced/holowindow{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bdn" = ( +/obj/structure/table/holotable, +/obj/machinery/readybutton, +/obj/floor_decal/corner/red/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bdo" = ( +/obj/structure/table/holotable, +/obj/item/clothing/head/helmet/thunderdome, +/obj/item/clothing/suit/armor/tdome/red, +/obj/item/clothing/under/color/red, +/obj/item/holo/esword/red, +/obj/floor_decal/corner/red{ + dir = 5 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bdp" = ( +/obj/structure/table/holotable, +/obj/floor_decal/corner/red/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bdq" = ( +/obj/structure/table/holotable, +/obj/item/clothing/gloves/boxing/hologlove, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_boxingcourt) +"bdr" = ( +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_boxingcourt) +"bds" = ( +/obj/structure/holostool, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_boxingcourt) +"bdE" = ( +/obj/structure/flora/ausbushes/brflowers, +/obj/floor_decal/spline/plain/grey{ + dir = 8 + }, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_cafe) +"bdF" = ( +/obj/structure/table/holo_woodentable, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/item/flame/candle{ + holographic = 1 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"bdH" = ( +/obj/landmark{ + name = "Holocarp Spawn Random" + }, +/turf/simulated/floor/holofloor/space, +/area/holodeck/source_space) +"bdI" = ( +/obj/structure/flora/grass/both, +/turf/simulated/floor/holofloor/snow, +/area/holodeck/source_snowfield) +"bdJ" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/holofloor/lino, +/area/holodeck/source_meetinghall) +"bdK" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 9 + }, +/obj/structure/holostool, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_meetinghall) +"bdL" = ( +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/structure/holostool, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_meetinghall) +"bdM" = ( +/obj/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bdN" = ( +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bdO" = ( +/obj/floor_decal/corner/red{ + dir = 6 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bdP" = ( +/turf/simulated/floor/holofloor/beach/sand{ + dir = 9; + icon_state = "beach" + }, +/area/holodeck/source_beach) +"bdQ" = ( +/turf/simulated/floor/holofloor/beach/sand{ + dir = 1; + icon_state = "beach" + }, +/area/holodeck/source_beach) +"bdR" = ( +/turf/simulated/floor/holofloor/beach/sand{ + dir = 5; + icon_state = "beach" + }, +/area/holodeck/source_beach) +"bdS" = ( +/obj/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bdT" = ( +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bdU" = ( +/obj/floor_decal/corner/red{ + dir = 6 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bdV" = ( +/obj/structure/table/holo_woodentable, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"bdW" = ( +/obj/structure/table/holotable, +/obj/item/device/megaphone, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_boxingcourt) +"beo" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 1; + holographic = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"bep" = ( +/obj/structure/table/holo_woodentable, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup{ + holographic = 1 + }, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_cafe) +"beq" = ( +/obj/structure/table/holo_woodentable, +/obj/item/tray{ + holographic = 1 + }, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_cafe) +"ber" = ( +/obj/structure/table/holo_woodentable, +/obj/item/reagent_containers/food/drinks/teapot{ + holographic = 1 + }, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_cafe) +"bes" = ( +/obj/structure/flora/tree/pine, +/turf/simulated/floor/holofloor/snow, +/area/holodeck/source_snowfield) +"bet" = ( +/obj/structure/bed/chair/wood{ + dir = 8; + holographic = 1 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"beu" = ( +/obj/machinery/door/window/holowindoor{ + dir = 4; + name = "Red Team" + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_basketball) +"bev" = ( +/turf/simulated/floor/holofloor/beach/sand{ + dir = 8; + icon_state = "beach" + }, +/area/holodeck/source_beach) +"bew" = ( +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "desert2" + }, +/area/holodeck/source_beach) +"bex" = ( +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_beach) +"bey" = ( +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "desert3" + }, +/area/holodeck/source_beach) +"bez" = ( +/turf/simulated/floor/holofloor/beach/sand{ + dir = 4; + icon_state = "beach" + }, +/area/holodeck/source_beach) +"beA" = ( +/obj/machinery/door/window/holowindoor{ + dir = 4; + name = "Red Team" + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_thunderdomecourt) +"beB" = ( +/obj/machinery/door/window/holowindoor{ + base_state = "right"; + icon_state = "right"; + name = "Red Corner" + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_boxingcourt) +"beC" = ( +/obj/structure/window/reinforced/holowindow, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_boxingcourt) +"beG" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/bed/chair/comfy/blue{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"beL" = ( +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"beS" = ( +/obj/structure/flora/ausbushes/genericbush, +/obj/floor_decal/spline/plain/grey{ + dir = 10 + }, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_cafe) +"beU" = ( +/obj/structure/flora/pottedplant{ + icon_state = "plant-22" + }, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_cafe) +"beV" = ( +/obj/structure/flora/tree/dead, +/turf/simulated/floor/holofloor/snow, +/area/holodeck/source_snowfield) +"beW" = ( +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/holofloor/lino, +/area/holodeck/source_meetinghall) +"beX" = ( +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_meetinghall) +"beY" = ( +/turf/simulated/floor/holofloor/beach/sand{ + dir = 10; + icon_state = "beach" + }, +/area/holodeck/source_beach) +"beZ" = ( +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "beach" + }, +/area/holodeck/source_beach) +"bfa" = ( +/turf/simulated/floor/holofloor/beach/sand{ + dir = 6; + icon_state = "beach" + }, +/area/holodeck/source_beach) +"bfb" = ( +/obj/structure/window/reinforced/holowindow{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_boxingcourt) +"bfc" = ( +/obj/floor_decal/corner/red/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_boxingcourt) +"bfd" = ( +/obj/floor_decal/corner/red{ + dir = 5 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_boxingcourt) +"bfe" = ( +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_boxingcourt) +"bff" = ( +/obj/structure/window/reinforced/holowindow{ + dir = 8 + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_boxingcourt) +"bfn" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"bfs" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"bfC" = ( +/obj/machinery/door/unpowered/simple/wood, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_cafe) +"bfD" = ( +/obj/structure/bed/chair/wood/walnut{ + holographic = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"bfE" = ( +/obj/structure/bed/chair/wood/walnut{ + holographic = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"bfF" = ( +/obj/structure/bed/chair/wood/walnut{ + holographic = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"bfG" = ( +/obj/structure/flora/grass/green, +/turf/simulated/floor/holofloor/snow, +/area/holodeck/source_snowfield) +"bfL" = ( +/obj/floor_decal/corner/red/three_quarters, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bfM" = ( +/obj/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bfN" = ( +/obj/item/beach_ball/holoball, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bfO" = ( +/obj/floor_decal/corner/red/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bfP" = ( +/obj/structure/window/reinforced/holowindow/disappearing, +/obj/floor_decal/corner/red/three_quarters, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bfQ" = ( +/obj/structure/window/reinforced/holowindow/disappearing, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bfR" = ( +/obj/structure/window/reinforced/holowindow/disappearing, +/obj/floor_decal/corner/red/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bfS" = ( +/obj/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_boxingcourt) +"bfT" = ( +/obj/floor_decal/corner/blue/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_boxingcourt) +"bfU" = ( +/obj/floor_decal/corner/blue/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_boxingcourt) +"bfV" = ( +/obj/floor_decal/corner/green{ + dir = 6 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_boxingcourt) +"bgr" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/table/holo_woodentable, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"bgs" = ( +/obj/structure/table/holo_woodentable, +/obj/item/flame/candle{ + holographic = 1 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"bgt" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/table/holo_woodentable, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"bgu" = ( +/obj/floor_decal/stairs, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_meetinghall) +"bgv" = ( +/obj/structure/holostool, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_meetinghall) +"bgw" = ( +/obj/floor_decal/carpet, +/obj/structure/holostool, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_meetinghall) +"bgx" = ( +/obj/floor_decal/corner/green/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bgy" = ( +/obj/floor_decal/corner/green{ + dir = 5 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bgz" = ( +/obj/floor_decal/corner/green/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bgC" = ( +/obj/structure/window/reinforced/holowindow/disappearing{ + dir = 1 + }, +/obj/floor_decal/corner/green/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bgD" = ( +/obj/structure/window/reinforced/holowindow/disappearing{ + dir = 1 + }, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bgE" = ( +/obj/structure/window/reinforced/holowindow/disappearing{ + dir = 1 + }, +/obj/floor_decal/corner/green/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bgF" = ( +/obj/floor_decal/corner/blue/three_quarters, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_boxingcourt) +"bgG" = ( +/obj/floor_decal/corner/blue/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_boxingcourt) +"bgS" = ( +/obj/structure/flora/ausbushes/genericbush, +/obj/floor_decal/spline/plain/grey{ + dir = 9 + }, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_cafe) +"bgT" = ( +/obj/floor_decal/corner/green{ + dir = 9 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bgU" = ( +/obj/floor_decal/corner/green{ + dir = 6 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bgV" = ( +/obj/item/beach_ball, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_beach) +"bgW" = ( +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "desert4" + }, +/area/holodeck/source_beach) +"bgX" = ( +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "desert_dug" + }, +/area/holodeck/source_beach) +"bgY" = ( +/obj/item/clothing/glasses/sunglasses, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_beach) +"bgZ" = ( +/obj/floor_decal/corner/green{ + dir = 9 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bha" = ( +/obj/floor_decal/corner/green{ + dir = 6 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bhb" = ( +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_boxingcourt) +"bhc" = ( +/obj/floor_decal/corner/green/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_boxingcourt) +"bhp" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"bhq" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/floor_decal/spline/plain/grey{ + dir = 8 + }, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_cafe) +"bhr" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 1; + holographic = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"bhs" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 1; + holographic = 1 + }, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"bht" = ( +/obj/structure/flora/grass/brown, +/turf/simulated/floor/holofloor/snow, +/area/holodeck/source_snowfield) +"bhu" = ( +/obj/structure/table/holo_woodentable, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_meetinghall) +"bhv" = ( +/obj/machinery/door/window/holowindoor{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "Green Team" + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_basketball) +"bhw" = ( +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bhx" = ( +/obj/overlay/palmtree_r, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_beach) +"bhz" = ( +/obj/overlay/palmtree_l, +/obj/overlay/coconut, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_beach) +"bhA" = ( +/obj/machinery/door/window/holowindoor{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "Green Team" + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_thunderdomecourt) +"bhB" = ( +/obj/structure/window/reinforced/holowindow{ + dir = 1 + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_boxingcourt) +"bhC" = ( +/obj/machinery/door/window/holowindoor{ + dir = 1; + name = "Green Corner" + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_boxingcourt) +"bhQ" = ( +/obj/structure/holostool, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 10 + }, +/obj/floor_decal/carpet{ + dir = 9 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_meetinghall) +"bhR" = ( +/obj/structure/holostool, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 1 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_meetinghall) +"bhS" = ( +/obj/floor_decal/carpet, +/obj/structure/holostool, +/obj/floor_decal/carpet{ + dir = 1 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_meetinghall) +"bhT" = ( +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "desert1" + }, +/area/holodeck/source_beach) +"bhU" = ( +/obj/item/inflatable_duck, +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_beach) +"bic" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 1; + holographic = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"bid" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 4; + holographic = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"bie" = ( +/obj/structure/table/holo_woodentable, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/item/flame/candle{ + holographic = 1 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"bif" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 8; + holographic = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_cafe) +"big" = ( +/obj/floor_decal/corner/green/three_quarters, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bih" = ( +/obj/structure/holohoop{ + dir = 1 + }, +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bii" = ( +/obj/floor_decal/corner/green/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_basketball) +"bij" = ( +/obj/structure/table/holotable, +/obj/floor_decal/corner/green/three_quarters, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bik" = ( +/obj/structure/table/holotable, +/obj/item/clothing/head/helmet/thunderdome, +/obj/item/clothing/suit/armor/tdome/green, +/obj/item/clothing/under/color/green, +/obj/item/holo/esword/green, +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bil" = ( +/obj/structure/table/holotable, +/obj/machinery/readybutton, +/obj/floor_decal/corner/green/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/holofloor/tiled, +/area/holodeck/source_thunderdomecourt) +"bim" = ( +/obj/structure/table/holotable, +/obj/item/clothing/gloves/boxing/hologlove{ + icon_state = "boxinggreen"; + item_state = "boxinggreen" + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_boxingcourt) +"biz" = ( +/obj/structure/bed/chair/wood{ + dir = 8; + holographic = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"biA" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"biM" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/holding) +"bjC" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"bjN" = ( +/obj/structure/iv_stand, +/obj/floor_decal/floordetail/edgedrain{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"bjQ" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/flora/ausbushes/ywflowers, +/obj/structure/flora/ausbushes/ppflowers, +/obj/structure/flora/ausbushes/brflowers, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_plaza) +"bjR" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/flora/ausbushes/ywflowers, +/obj/structure/flora/ausbushes/ppflowers, +/obj/structure/flora/ausbushes/brflowers, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_plaza) +"bjS" = ( +/obj/machinery/vending/coffee{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"bkO" = ( +/obj/machinery/door/airlock/centcom, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"bkX" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"bkY" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/flora/ausbushes/ywflowers, +/obj/structure/flora/ausbushes/ppflowers, +/obj/structure/flora/ausbushes/brflowers, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_plaza) +"bkZ" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/flora/ausbushes/ywflowers, +/obj/structure/flora/ausbushes/ppflowers, +/obj/structure/flora/ausbushes/brflowers, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/holofloor/grass, +/area/holodeck/source_plaza) +"bla" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"blb" = ( +/obj/structure/bed/chair/wood{ + dir = 1; + holographic = 1 + }, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"blc" = ( +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"blf" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"blg" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/simulated/floor/holofloor/concrete, +/area/holodeck/source_plaza) +"blh" = ( +/turf/simulated/floor/holofloor/beach/sand, +/area/holodeck/source_temple) +"bli" = ( +/turf/simulated/wall/sandstone, +/area/holodeck/source_temple) +"blu" = ( +/turf/simulated/floor/holofloor/tiled/stone, +/area/holodeck/source_temple) +"blv" = ( +/obj/structure/holostool, +/turf/simulated/floor/holofloor/tiled/stone, +/area/holodeck/source_temple) +"blx" = ( +/obj/floor_decal/stoneborder/corner, +/turf/simulated/floor/holofloor/beach/water, +/area/holodeck/source_temple) +"bly" = ( +/obj/floor_decal/stoneborder, +/turf/simulated/floor/holofloor/beach/water, +/area/holodeck/source_temple) +"blz" = ( +/turf/simulated/floor/holofloor/beach/sand{ + icon_state = "desert2" + }, +/area/holodeck/source_temple) +"blB" = ( +/obj/floor_decal/stoneborder{ + dir = 4 + }, +/turf/simulated/floor/holofloor/beach/water, +/area/holodeck/source_temple) +"blC" = ( +/turf/simulated/floor/holofloor/beach/water, +/area/holodeck/source_temple) +"blK" = ( +/obj/floor_decal/stoneborder/corner{ + dir = 8 + }, +/turf/simulated/floor/holofloor/beach/water, +/area/holodeck/source_temple) +"blL" = ( +/obj/floor_decal/stoneborder{ + dir = 1 + }, +/turf/simulated/floor/holofloor/beach/water, +/area/holodeck/source_temple) +"bmy" = ( +/obj/machinery/telecomms/bus/preset_cent, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"bmz" = ( +/obj/floor_decal/corner/b_green/diagonal, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"bmI" = ( +/obj/machinery/computer/guestpass{ + pixel_y = 32 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"bne" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/techfloor, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"bpK" = ( +/obj/machinery/smartfridge/chemistry, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"bqo" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"brG" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/item/reagent_containers/glass/beaker/cryoxadone, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"btu" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"btP" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"buu" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"bvf" = ( +/obj/wallframe_spawn/reinforced, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"bwJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/southleft{ + dir = 8; + req_access = newlist() + }, +/obj/machinery/door/window/southleft{ + dir = 4; + req_access = newlist() + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"bxn" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/showcase{ + desc = "A self-contained autopilot that controls supply drones."; + name = "Supply Drone Virtual Intelligence"; + icon = 'icons/obj/machines/telecomms.dmi'; + icon_state = "comm_server" + }, +/turf/simulated/floor/tiled/techmaint, +/area/supply/dock) +"bxq" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/table/woodentable_reinforced/walnut, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"bxU" = ( +/obj/machinery/door/airlock/civilian, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"bBV" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"bCB" = ( +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/scgf) +"bDa" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"bEj" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/beige/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/beige/bordercorner2{ + dir = 1 + }, +/obj/structure/reagent_dispensers/water_cooler, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"bEo" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/carpet{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"bFk" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/mob/living/simple_animal/passive/cat/fluff{ + name = "Kaz"; + speak_emote = list("purrs","meows","moans") + }, +/obj/structure/dogbed, +/obj/floor_decal/spline/fancy/black, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 6 + }, +/turf/simulated/floor/carpet/red, +/area/centcom) +"bFM" = ( +/obj/machinery/acting/changer/mirror{ + pixel_x = 32 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"bGM" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"bIe" = ( +/obj/floor_decal/borderfloor, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"bIw" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/obj/structure/iv_stand, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"bJa" = ( +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"bMH" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 4 + }, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"bNd" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"bNp" = ( +/turf/unsimulated/floor{ + icon_state = "bcircuit" + }, +/area/centcom) +"bND" = ( +/obj/decal/cleanable/blood/splatter, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"bOP" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "red"; + name = "carpet" + }, +/area/centcom/living) +"bPm" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"bUz" = ( +/obj/decal/cleanable/blood/splatter, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"bVi" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/chemical_dispenser/bar_alc/full{ + pixel_y = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"bZN" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Special Operations Command"; + req_access = newlist() + }, +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "SPECOPShuttle"; + name = "Spec Ops Shuttle" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"cax" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/item/reagent_containers/food/snacks/beetsoup, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "green"; + name = "carpet" + }, +/area/centcom/living) +"ccS" = ( +/obj/machinery/computer/modular/preset/full/ert{ + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"cdB" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/window/reinforced/holowindow{ + dir = 1 + }, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_meetinghall) +"ceK" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/paleblue{ + dir = 10 + }, +/obj/item/stack/material/steel/fifty, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"cgR" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 1; + icon_state = "propulsion_r" + }, +/obj/paint/red, +/obj/paint_stripe/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/transport1/centcom) +"che" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 6 + }, +/obj/structure/holostool, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_meetinghall) +"cjY" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"ckU" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/vending/cola{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"clK" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"cmC" = ( +/obj/item/stool/padded, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"cmR" = ( +/obj/structure/window/reinforced/crescent, +/turf/unsimulated/beach/sand{ + icon_state = "desert1" + }, +/area/centcom/living) +"coI" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -28 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"crG" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/obj/item/reagent_containers/food/snacks/candy, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"ctI" = ( +/obj/machinery/smartfridge{ + opacity = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"cuS" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/radio/phone, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"cvz" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "green"; + name = "carpet" + }, +/area/centcom/living) +"cws" = ( +/obj/machinery/r_n_d/server/robotics, +/turf/unsimulated/floor{ + icon_state = "bcircuit" + }, +/area/centcom) +"czc" = ( +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "Thundernewred"; + name = "Security Doors" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/tdome1) +"cAN" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"cAX" = ( +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"cDt" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"cDF" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"cEM" = ( +/obj/floor_decal/spline/fancy/wood, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"cEO" = ( +/obj/structure/flora/ausbushes/reedbush, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"cGp" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 5 + }, +/obj/structure/holostool, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_meetinghall) +"cHb" = ( +/obj/structure/flora/pottedplant/floorleaf, +/obj/floor_decal/corner/black/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/control) +"cIH" = ( +/obj/machinery/door/airlock/civilian{ + id_tag = "bar_room"; + name = "Private Room" + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"cIM" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 10 + }, +/obj/structure/flora/pottedplant/floorleaf, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"cJk" = ( +/obj/machinery/vending/hydronutrients{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"cLW" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Bridge"; + req_access = newlist() + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/control) +"cOe" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/snacks/cookie, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"cQL" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"cRm" = ( +/obj/wallframe_spawn/no_grille, +/turf/unsimulated/floor/plating, +/area/centcom) +"cRB" = ( +/obj/floor_decal/scglogo{ + icon_state = "top-right" + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"cRC" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 8 + }, +/obj/machinery/vending/snack{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"cRG" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/floor_decal/spline/fancy/wood/corner, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"cSw" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"cSB" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"cSZ" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"cTk" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"cTA" = ( +/obj/machinery/computer/modular/preset/full/ert, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"cUd" = ( +/obj/floor_decal/techfloor, +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"cUi" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"cUs" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/obj/structure/table/reinforced, +/obj/item/reagent_containers/food/snacks/salo, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"cUV" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"cUW" = ( +/obj/machinery/chem_master, +/obj/floor_decal/corner/beige{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"cVw" = ( +/obj/machinery/light, +/turf/simulated/floor, +/area/tdome/testing/engineering/unpowered) +"cVR" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"cVU" = ( +/obj/structure/flora/pottedplant/drooping, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"cWD" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/item/card/id/captains_spare, +/obj/item/reagent_containers/food/drinks/flask/detflask{ + name = "\improper Unknown hero's flask" + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"cXK" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Surgery"; + id_tag = "cc_surgery" + }, +/obj/machinery/holosign/surgery{ + dir = 4; + id_tag = "cc_surgery" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"cXY" = ( +/obj/structure/table/steel_reinforced, +/obj/item/documents/scg/red, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"cYt" = ( +/obj/floor_decal/borderfloorblack, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"cYG" = ( +/turf/unsimulated/wall{ + dir = 3; + icon_state = "fakewindows2"; + name = "window"; + opacity = 0 + }, +/area/tdome/testing) +"cZZ" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"dal" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"dbf" = ( +/obj/floor_decal/iccglogo/top_right, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"dcm" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"dcp" = ( +/obj/machinery/door/blast/regular{ + id_tag = "SPECIALOPS"; + name = "Spec Ops Hangar" + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/specops) +"deW" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"dfj" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/purple/border, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"dfw" = ( +/obj/structure/sign/directions/bridge{ + dir = 1; + pixel_y = -28 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"dgV" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/purple/bordercorner2, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"dhn" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/lattice, +/turf/space, +/area/space) +"djE" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/obj/floor_decal/industrial/warning, +/turf/unsimulated/floor/reinforced, +/area/space) +"dmH" = ( +/obj/machinery/organ_printer/robot/mapped, +/obj/floor_decal/corner/paleblue{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"dnQ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/computer/robotics, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"dqx" = ( +/obj/floor_decal/borderfloorwhite/corner{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"dqW" = ( +/obj/structure/closet/fridge/meat, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"dsr" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 4; + icon_state = "wooden_chair_wings" + }, +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"dsV" = ( +/obj/item/stool/padded, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"dum" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"dvt" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"dxf" = ( +/obj/structure/disposalpipe/junction, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"dxI" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"dAo" = ( +/obj/floor_decal/borderfloorblack, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"dBI" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/scgf) +"dCm" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"dDy" = ( +/obj/decal/cleanable/filth, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"dDR" = ( +/obj/floor_decal/carpet{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"dFG" = ( +/obj/machinery/optable, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/red, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"dHt" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"dHw" = ( +/obj/machinery/computer/modular/preset/full/ert{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"dJT" = ( +/obj/structure/closet/crate/internals, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/shuttle/transport1/centcom) +"dKc" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"dLU" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/fabricator, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"dNG" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/industrial/warning, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"dON" = ( +/obj/structure/table/standard, +/obj/machinery/reagent_temperature, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"dQD" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"dRL" = ( +/obj/machinery/recharger/wallcharger{ + pixel_y = -25; + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"dSc" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/closet/secure_closet{ + name = "long term chamber locker"; + req_access = list("ACCESS_SECURITY") + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/holding) +"dSq" = ( +/obj/decal/remains, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"dUb" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"dUE" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"dVq" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/bed/chair/office/comfy/blue{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"dZt" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/space) +"dZI" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/machinery/vending/coffee, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"dZV" = ( +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/obj/floor_decal/carpet/purple{ + dir = 5 + }, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"eaO" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"eaU" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"ebw" = ( +/obj/machinery/door/blast/regular/open{ + id_tag = "CentComPort"; + name = "Security Doors" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"edQ" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"eeK" = ( +/obj/structure/disposalpipe/junction, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"efo" = ( +/obj/structure/flora/pottedplant/stoutbush, +/obj/floor_decal/corner/black/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/control) +"egr" = ( +/obj/structure/closet/emcloset, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/iccgn) +"egT" = ( +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/obj/floor_decal/carpet/purple, +/obj/floor_decal/carpet/purple{ + dir = 10 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"egW" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "red"; + name = "carpet" + }, +/area/centcom/living) +"ehz" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/table/standard, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"ein" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"ekk" = ( +/obj/floor_decal/borderfloorwhite/corner{ + dir = 4 + }, +/obj/floor_decal/corner/beige/bordercorner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"ekl" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"elY" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor, +/area/tdome/testing/engineering/unpowered) +"emk" = ( +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"emo" = ( +/obj/machinery/smartfridge/foods, +/turf/unsimulated/floor/plating, +/area/centcom/living) +"emD" = ( +/obj/structure/table/steel_reinforced, +/obj/item/modular_computer/pda/captain, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"emF" = ( +/obj/wallframe_spawn/reinforced/hull, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"emN" = ( +/turf/unsimulated/floor/plating, +/area/space) +"enI" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"enU" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/obj/structure/lattice, +/turf/space, +/area/space) +"eoO" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"erb" = ( +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"esG" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "red"; + name = "carpet" + }, +/area/centcom/living) +"esK" = ( +/obj/structure/table/woodentable/walnut, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"ete" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/vending/cigarette, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"etn" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/structure/flora/pottedplant/large, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"eua" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/surgery, +/obj/item/stack/medical/advanced/bruise_pack, +/obj/floor_decal/floordetail/edgedrain{ + dir = 1 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 7; + pixel_y = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"ewi" = ( +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"ewt" = ( +/obj/floor_decal/scglogo{ + icon_state = "top-left" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"eyp" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "CentComCargo"; + name = "Cargo Shuttle Door" + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"ezf" = ( +/mob/living/simple_animal/crow/cyber, +/mob/living/simple_animal/crow/cyber{ + name = "Sal"; + desc = "Is he Sal, Sel, Lirxem? I can't remember" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"ezA" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"eAl" = ( +/obj/floor_decal/plaque{ + desc = "NAS Nova built in 2309 year" + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"eAq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"eBe" = ( +/turf/space, +/area/tdome/testing/engineering) +"eBo" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "green"; + name = "carpet" + }, +/area/centcom/living) +"eBJ" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"eCn" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/obj/structure/bed/chair/office/comfy/blue{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"eCv" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"eDn" = ( +/obj/machinery/door/airlock/civilian{ + dir = 8; + name = "Bathroom" + }, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"eEc" = ( +/turf/unsimulated/wall{ + dir = 1; + icon_state = "fakewindows"; + name = "window"; + opacity = 0 + }, +/area/tdome/testing) +"eEC" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/papershredder, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"eER" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"eIG" = ( +/obj/machinery/disposal/deliveryChute, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"eIY" = ( +/obj/structure/closet/hydrant, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"eKE" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/freezer{ + icon_state = "freezer" + }, +/obj/floor_decal/industrial/outline/orange, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"eLp" = ( +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"eMj" = ( +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"ePe" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"ePQ" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"eQD" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/snacks/baguette, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"eSk" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"eWc" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "green"; + name = "carpet" + }, +/area/centcom/living) +"eWw" = ( +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/scgf) +"eWD" = ( +/obj/machinery/door/airlock/centcom{ + name = "AI"; + req_access = newlist() + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"eXu" = ( +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"eYq" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"fak" = ( +/obj/structure/sign/memorial/sierra{ + pixel_x = -32; + pixel_y = -32 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"faY" = ( +/obj/structure/sign/double/iccgflag/left{ + pixel_y = 32 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/centcom/iccgn) +"fbO" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/vending/cola, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"fcg" = ( +/obj/floor_decal/iccglogo/corner{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"fcz" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"fcC" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"fcS" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/structure/table/rack, +/obj/item/stack/material/uranium/ten, +/obj/item/stack/material/uranium/ten, +/obj/item/stack/material/uranium/ten, +/obj/item/stack/material/uranium/ten, +/obj/item/stack/material/uranium/ten, +/obj/item/stack/material/uranium/ten, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"fdF" = ( +/obj/structure/hygiene/urinal, +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/holding) +"fef" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"fem" = ( +/obj/machinery/cooker/grill, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"feH" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"ffG" = ( +/obj/wallframe_spawn/reinforced, +/turf/unsimulated/floor/plating, +/area/centcom/living) +"ffQ" = ( +/obj/item/storage/toolbox/mechanical, +/obj/item/stack/cable_coil/green, +/obj/item/stack/cable_coil/green, +/obj/item/stack/nanopaste, +/obj/item/stack/nanopaste, +/obj/floor_decal/corner/paleblue{ + dir = 10 + }, +/obj/structure/table/glass, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"fij" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"fjD" = ( +/obj/machinery/door/airlock/centcom{ + dir = 1; + name = "Chemistry" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"fjZ" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"fkI" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"flO" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"foz" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 4; + icon_state = "wooden_chair_wings" + }, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"fqd" = ( +/obj/structure/railing/mapped, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"fsr" = ( +/turf/simulated/wall/r_wall/hull, +/area/centcom/iccgn) +"ftf" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"fuz" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Security" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/holding) +"fvx" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/floor_decal/floordetail/edgedrain{ + dir = 6 + }, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"fvL" = ( +/obj/machinery/door/airlock/centcom, +/turf/unsimulated/floor{ + dir = 5; + icon_state = "vault" + }, +/area/tdome/testing) +"fzm" = ( +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"fzy" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped, +/obj/item/stack/material/platinum/ten, +/obj/item/stack/material/platinum/ten, +/obj/item/stack/material/platinum/ten, +/obj/item/stack/material/platinum/ten, +/obj/item/stack/material/platinum/ten, +/obj/item/stack/material/platinum/ten, +/obj/item/stack/material/platinum/ten, +/obj/item/stack/material/platinum/ten, +/obj/item/stack/material/platinum/ten, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"fzE" = ( +/obj/structure/table/reinforced, +/obj/item/device/flash, +/obj/floor_decal/carpet{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"fBx" = ( +/obj/machinery/camera/network/thunder{ + c_tag = "Thunderdome Red Team"; + invisibility = 101 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"fBR" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/external{ + frequency = 1380; + id_tag = "centcom_shuttle_hatch"; + locked = 1; + name = "Shuttle Hatch"; + req_access = newlist() + }, +/obj/shuttle_landmark/ferry/start, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/transport1/centcom) +"fCn" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/tile/carpetblue2/fifty, +/obj/item/stack/tile/carpetblue2/fifty, +/obj/item/stack/tile/carpetblue2/fifty, +/obj/item/stack/tile/carpetblue2/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"fDk" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/obj/item/spacecash/bundle/c1000, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"fGb" = ( +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo" + }, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"fGY" = ( +/obj/floor_decal/carpet, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"fHU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"fIV" = ( +/obj/floor_decal/borderfloorwhite, +/obj/machinery/robotics_fabricator, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"fJX" = ( +/obj/structure/sign/double/solgovflag/right{ + pixel_y = 32 + }, +/obj/structure/filingcabinet/chestdrawer, +/obj/item/folder/blue, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"fLN" = ( +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"fOj" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"fRh" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"fRi" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"fRO" = ( +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"fSd" = ( +/obj/floor_decal/scglogo{ + icon_state = "bottom-center" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"fSQ" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 1 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"fTc" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"fTE" = ( +/obj/structure/disposaloutlet, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/lattice, +/turf/unsimulated/floor/reinforced, +/area/space) +"fUQ" = ( +/obj/machinery/honey_extractor, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"fVk" = ( +/obj/machinery/computer/rdconsole/core{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"fXa" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"fXT" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"fYh" = ( +/obj/machinery/r_n_d/server/core, +/turf/unsimulated/floor{ + icon_state = "bcircuit" + }, +/area/centcom) +"fZd" = ( +/obj/item/device/radio/intercom/specops{ + pixel_y = 22 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 5 + }, +/obj/structure/flora/pottedplant/minitree, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"fZw" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/stairs{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"fZD" = ( +/obj/machinery/light, +/turf/simulated/floor, +/area/tdome/testing/engineering) +"gab" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"gcM" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"geB" = ( +/obj/random/trash, +/obj/floor_decal/techfloor, +/obj/machinery/conveyor{ + dir = 8; + id = "cc_sort" + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"gfN" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/snacks/plainsteak, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"giT" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"gmy" = ( +/obj/structure/flora/ausbushes/brflowers, +/obj/structure/fountain{ + desc = "Fountain in honor of unknown hero"; + name = "Belov Fountain" + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"gnM" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"gph" = ( +/obj/structure/bed/chair/comfy/black, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"gpQ" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/turf/unsimulated/floor/reinforced, +/area/centcom) +"gqd" = ( +/obj/floor_decal/techfloor, +/obj/structure/table/steel_reinforced, +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/shell, +/obj/item/ammo_casing/shell, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"gqB" = ( +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/testing) +"gsX" = ( +/obj/decal/cleanable/blood/oil, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"gtg" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/photocopier, +/obj/decal/cleanable/filth, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"gtE" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/surgery, +/obj/item/stack/medical/advanced/bruise_pack, +/obj/floor_decal/floordetail/edgedrain{ + dir = 1 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 7; + pixel_y = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"gub" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/snacks/dionaroast, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"gvY" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/lattice, +/turf/space, +/area/centcom/holding) +"gwF" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"gxc" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/floor_decal/corner/beige/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/beige/bordercorner2{ + dir = 8 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/beige/bordercorner2{ + dir = 9 + }, +/obj/structure/table/reinforced, +/obj/machinery/fabricator/micro, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"gzh" = ( +/obj/machinery/telecomms/server/presets/centcom, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"gzk" = ( +/obj/item/storage/firstaid/surgery, +/obj/floor_decal/corner/paleblue{ + dir = 10 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/spray/sterilizine, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"gzA" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/food/condiment/enzyme{ + pixel_y = 8 + }, +/obj/item/reagent_containers/food/condiment/enzyme{ + pixel_y = 8 + }, +/obj/item/reagent_containers/food/condiment/enzyme{ + pixel_y = 8 + }, +/obj/item/reagent_containers/food/condiment/barbecue{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/condiment/barbecue{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/condiment/barbecue{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/condiment/barbecue{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"gzT" = ( +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"gAe" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "red"; + name = "carpet" + }, +/area/centcom/living) +"gAG" = ( +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"gAZ" = ( +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"gCV" = ( +/obj/structure/table/steel_reinforced, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/diona{ + name = "HOS diona nymph coffee cup" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"gEd" = ( +/obj/floor_decal/scglogo{ + icon_state = "center-right" + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"gIh" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"gIu" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 4 + }, +/obj/machinery/bodyscanner, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"gJm" = ( +/obj/machinery/mech_recharger, +/mob/living/exosuit/premade/powerloader, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"gKj" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"gMN" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"gNi" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/red, +/obj/landmark/corpse/clown, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"gQp" = ( +/obj/floor_decal/scglogo{ + icon_state = "bottom-right" + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"gRv" = ( +/obj/machinery/chemical_dispenser/full, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"gRP" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"gSs" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "green"; + name = "carpet" + }, +/area/centcom/living) +"gSX" = ( +/obj/machinery/button/blast_door{ + id_tag = "Thundernewred"; + pixel_x = -32 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"gUN" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/turf/space, +/area/space) +"gVc" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/decal/cleanable/filth, +/obj/structure/flora/pottedplant/minitree, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"gWd" = ( +/obj/machinery/door/airlock/terran, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"gWe" = ( +/obj/machinery/door/window/southleft{ + dir = 8; + req_access = newlist() + }, +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "cc_med_lockdown"; + name = "Infirmary Entry Shutters" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"gYv" = ( +/obj/floor_decal/borderfloor, +/obj/structure/bed/chair/office/comfy/blue{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"gZA" = ( +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor{ + dir = 5; + icon_state = "vault" + }, +/area/tdome/testing) +"gZH" = ( +/obj/structure/flora/pottedplant{ + icon_state = "plant-06" + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/holofloor/lino, +/area/holodeck/source_meetinghall) +"hbe" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"hde" = ( +/obj/floor_decal/borderfloor, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"hdH" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"hei" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/red/border{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"hfx" = ( +/obj/floor_decal/floordetail/edgedrain, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"hjD" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"hlg" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"hlz" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/storage/vest/merc{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/clothing/suit/storage/vest/merc, +/obj/item/clothing/head/helmet/swat, +/obj/item/clothing/head/helmet/swat, +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"hlC" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Cargo"; + req_access = newlist() + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"hlP" = ( +/obj/floor_decal/techfloor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"hnh" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"hoJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/southleft{ + dir = 8; + req_access = newlist() + }, +/obj/machinery/door/window/southleft{ + dir = 4; + req_access = newlist() + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"hqe" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"hss" = ( +/obj/floor_decal/techfloor, +/obj/structure/closet/crate, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"hsP" = ( +/obj/machinery/door/airlock/sol{ + name = "Bridge" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"hsV" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 8; + icon_state = "wooden_chair_wings" + }, +/turf/unsimulated/beach/sand{ + icon_state = "desert1" + }, +/area/centcom/living) +"hsX" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/photocopier/faxmachine/centcom{ + department = "Central Command"; + desc = "Fax machine, called in honor of the legendary bureaucrat. It has small keyboard so you can write answers right there!"; + name = "fox machine" + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"hvm" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"hvR" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"hxb" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"hya" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"hAV" = ( +/obj/machinery/status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/creed) +"hDS" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"hEt" = ( +/obj/floor_decal/industrial/warning/cee, +/turf/simulated/floor/tiled/white, +/area/shuttle/transport1/centcom) +"hFa" = ( +/obj/structure/sign/directions/bridge{ + pixel_y = 28 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"hFm" = ( +/obj/floor_decal/scglogo{ + icon_state = "top-center" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"hFp" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/wood/ebony/twentyfive, +/obj/item/stack/material/wood/ebony/twentyfive, +/obj/item/stack/material/wood/ebony/twentyfive, +/obj/item/stack/material/wood/ebony/twentyfive, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"hGr" = ( +/mob/living/bot/secbot/beepsky, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"hGY" = ( +/obj/machinery/vending/dinnerware{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"hIW" = ( +/obj/floor_decal/floordetail/edgedrain{ + dir = 4 + }, +/obj/machinery/body_scanconsole, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"hKd" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"hKi" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/paint/black, +/turf/unsimulated/floor/plating, +/area/centcom/specops) +"hNt" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"hNF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"hNM" = ( +/obj/structure/table/standard, +/obj/machinery/microwave{ + pixel_y = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"hNQ" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"hNW" = ( +/obj/structure/table/marble, +/obj/machinery/microwave{ + pixel_y = 4 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"hOx" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"hOO" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/grey, +/obj/item/gun/energy/laser/practice, +/obj/item/gun/energy/laser/practice, +/obj/item/gun/energy/laser/practice, +/obj/item/gun/energy/laser/practice, +/obj/item/gun/energy/laser/practice, +/obj/item/gun/energy/laser/practice, +/obj/item/gun/energy/laser/practice, +/obj/item/gun/energy/laser/practice, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"hPl" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/computer/modular/preset/full/ert{ + dir = 4 + }, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"hPC" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"hPR" = ( +/obj/floor_decal/iccglogo/bottom_left, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"hSw" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"hSy" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"hTb" = ( +/obj/machinery/camera/network/thunder{ + c_tag = "Thunderdome Arena Right"; + invisibility = 101 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"hTD" = ( +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 9 + }, +/obj/machinery/organ_printer/robot/mapped, +/obj/floor_decal/floordetail/edgedrain, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"hTO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"hUs" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"hUZ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"hVo" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 1 + }, +/obj/structure/bed/chair/office/comfy/blue{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"hVs" = ( +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "supply_shuttle"; + name = "Supply Drone Shutters" + }, +/turf/simulated/floor/tiled/techmaint, +/area/supply/dock) +"hXb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"hXg" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom) +"hYF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"iac" = ( +/obj/floor_decal/borderfloor, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"iat" = ( +/obj/structure/sign/double/iccgflag/left{ + pixel_y = 32 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"ibR" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"ict" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"idf" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"ieG" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/warning, +/obj/machinery/button/blast_door{ + dir = 8; + id_tag = "crescent_checkpoint_access"; + name = "Centcom Arivals"; + pixel_y = 3; + req_access = list("ACCESS_CARGO"); + pixel_x = 23 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"ifD" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "red"; + name = "carpet" + }, +/area/centcom/living) +"ifG" = ( +/obj/structure/table/marble, +/obj/machinery/microwave{ + pixel_y = 4 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"ihj" = ( +/obj/machinery/organ_printer/flesh/mapped, +/obj/floor_decal/floordetail/edgedrain{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"ikd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"ilw" = ( +/obj/machinery/disposal, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 5 + }, +/obj/structure/disposalpipe/trunk, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"ilP" = ( +/obj/structure/disposalpipe/segment, +/obj/wallframe_spawn/reinforced/hull, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"inR" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/structure/flora/pottedplant/minitree, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"inZ" = ( +/obj/decal/cleanable/blood/splatter, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"iuE" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"iwf" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"ixL" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"iyb" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 4; + icon_state = "wooden_chair_wings" + }, +/turf/unsimulated/beach/sand{ + icon_state = "desert1" + }, +/area/centcom/living) +"izX" = ( +/obj/machinery/vending/sol, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"iAN" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/industrial/warning, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"iCL" = ( +/obj/machinery/camera/network/thunder{ + c_tag = "Thunderdome Arena Left"; + invisibility = 101 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"iEt" = ( +/obj/floor_decal/industrial/warning, +/turf/unsimulated/floor/reinforced, +/area/space) +"iFq" = ( +/obj/floor_decal/iccglogo/top_left, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"iFF" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/shuttle/transport1/centcom) +"iIw" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/floor_decal/spline/fancy/wood, +/obj/item/reagent_containers/food/drinks/bottle/small/ale, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"iJE" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/machinery/conveyor{ + dir = 8; + id = "cc_sort" + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"iKE" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"iLF" = ( +/obj/machinery/vending/hotfood, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"iNl" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/item/stack/material/platinum/ten, +/obj/item/stack/material/platinum/ten, +/obj/item/stack/material/platinum/ten, +/obj/item/stack/material/platinum/ten, +/obj/item/stack/material/platinum/ten, +/obj/item/stack/material/platinum/ten, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"iPd" = ( +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 10 + }, +/obj/item/reagent_containers/food/drinks/flask/barflask, +/obj/item/reagent_containers/food/drinks/flask/barflask, +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"iQd" = ( +/obj/structure/bed/chair/comfy/blue, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"iQN" = ( +/obj/structure/table/glass, +/obj/machinery/reagent_temperature{ + density = 0 + }, +/obj/floor_decal/corner/beige{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"iRC" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/structure/table/rack, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/aluminium/fifty, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"iRL" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"iSd" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"iUB" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/tile/carpetmagenta/fifty, +/obj/item/stack/tile/carpetmagenta/fifty, +/obj/item/stack/tile/carpetmagenta/fifty, +/obj/item/stack/tile/carpetmagenta/fifty, +/obj/item/stack/tile/carpetmagenta/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"iUN" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped, +/obj/item/stack/material/diamond/ten, +/obj/item/stack/material/diamond/ten, +/obj/item/stack/material/diamond/ten, +/obj/item/stack/material/diamond/ten, +/obj/item/stack/material/diamond/ten, +/obj/item/stack/material/diamond/ten, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"iVe" = ( +/turf/unsimulated/beach/sand{ + dir = 1; + icon_state = "beach" + }, +/area/centcom/living) +"iVS" = ( +/turf/simulated/floor/plating, +/area/tdome/testing/engineering/unpowered) +"iWD" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"iYu" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom) +"iZO" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/scgf) +"jaZ" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/floor_decal/spline/fancy/wood, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"jba" = ( +/obj/wallframe_spawn/reinforced/hull, +/turf/unsimulated/floor/plating, +/area/centcom/scgf) +"jbF" = ( +/obj/machinery/computer/operating, +/obj/machinery/vending/wallmed1{ + pixel_y = 32 + }, +/obj/floor_decal/corner/paleblue{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"jbW" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/turf/unsimulated/floor/reinforced, +/area/space) +"jdR" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/red/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/red/bordercorner2, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"jeB" = ( +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"jeI" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"jeR" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "green"; + name = "carpet" + }, +/area/centcom/living) +"jhz" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/decal/cleanable/filth, +/mob/living/bot/cleanbot{ + name = "Roomba"; + will_patrol = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"jhH" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"jin" = ( +/obj/decal/cleanable/filth, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"jjl" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/vending/mredispenser{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"jjy" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"jmg" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"jmv" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/structure/closet/secure_closet{ + name = "long term chamber locker"; + req_access = list("ACCESS_SECURITY") + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/holding) +"jmN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"jmW" = ( +/obj/machinery/vending/weeb, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"jnO" = ( +/obj/machinery/vending/cigarette, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"joE" = ( +/obj/machinery/vending/snack, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"jqK" = ( +/obj/floor_decal/borderfloorwhite, +/obj/machinery/vending/robotics/sierra{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"jre" = ( +/obj/structure/closet/crate/hydroponics/beekeeping, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"jrB" = ( +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/scgf) +"jrL" = ( +/obj/structure/flora/pottedplant/large, +/obj/floor_decal/corner/black/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/control) +"jsd" = ( +/obj/random/trash, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"jtB" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/beige/border{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"juL" = ( +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "CO's Desk"; + departmentType = 5; + name = "CO Request Console"; + pixel_x = -30; + pixel_y = 32 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"jvc" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/iccgn) +"jwc" = ( +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"jwg" = ( +/obj/wallframe_spawn/reinforced/hull, +/turf/unsimulated/floor/plating, +/area/centcom/iccgn) +"jwB" = ( +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"jxN" = ( +/obj/floor_decal/carpet, +/obj/item/reagent_containers/food/drinks/bottle/brandy, +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"jyA" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 22 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"jzh" = ( +/turf/unsimulated/beach/sand{ + dir = 9; + icon_state = "beach" + }, +/area/centcom/living) +"jAN" = ( +/obj/machinery/computer/modular/preset/full/ert, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"jCk" = ( +/obj/structure/closet/secure_closet/bar_sierra{ + anchored = 1 + }, +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"jCF" = ( +/obj/structure/table/glass, +/obj/item/device/scanner/spectrometer/adv, +/obj/floor_decal/corner/beige{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"jCG" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"jDp" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/mask/smokable/cigarette/cigar{ + name = "Nova's Fortune" + }, +/obj/item/clothing/mask/smokable/cigarette/cigar{ + name = "Nova's Fortune" + }, +/obj/item/clothing/mask/smokable/cigarette/cigar{ + name = "Nova's Fortune" + }, +/obj/item/clothing/mask/smokable/cigarette/cigar{ + name = "Nova's Fortune" + }, +/obj/item/clothing/mask/smokable/cigarette/cigar{ + name = "Nova's Fortune" + }, +/obj/item/clothing/mask/smokable/cigarette/cigar{ + name = "Nova's Fortune" + }, +/obj/item/clothing/mask/smokable/cigarette/cigar{ + name = "Nova's Fortune" + }, +/obj/item/clothing/mask/smokable/cigarette/cigar{ + name = "Nova's Fortune" + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"jDt" = ( +/obj/wallframe_spawn/reinforced, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"jDZ" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 1 + }, +/obj/machinery/button/blast_door{ + id_tag = "CentComAsteroid"; + name = "CentCom Asteroid"; + pixel_x = -30; + pixel_y = 6; + req_access = list("ACCESS_CENT_CREED") + }, +/obj/machinery/button/blast_door{ + id_tag = "SPECIALOPS"; + name = "Spec Ops Hangar Access"; + pixel_x = 28; + pixel_y = -2; + req_access = list("ACCESS_CENT_GENERAL") + }, +/obj/machinery/button/blast_door{ + id_tag = "SPECOPSOFFICER"; + name = "Spec Ops Officer Access"; + pixel_x = 38; + pixel_y = 6; + req_access = list("ACCESS_CENT_CREED") + }, +/obj/machinery/button/blast_door{ + id_tag = "crescent_thunderdome"; + name = "Thunderdome Access"; + pixel_x = 28; + pixel_y = 6; + req_access = list("ACCESS_CENT_GENERAL") + }, +/obj/machinery/button/blast_door{ + id_tag = "crescent_vip_shuttle"; + name = "VIP Shuttle Access"; + pixel_x = 38; + pixel_y = -2; + req_access = list("ACCESS_CENT_GENERAL") + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"jFg" = ( +/obj/shuttle_landmark/supply/centcom, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techmaint, +/area/supply/dock) +"jFD" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "green"; + name = "carpet" + }, +/area/centcom/living) +"jFO" = ( +/obj/machinery/vitals_monitor, +/obj/floor_decal/floordetail/edgedrain{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"jIz" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"jIH" = ( +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"jJh" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"jJm" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 4 + }, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"jLf" = ( +/obj/floor_decal/techfloor, +/obj/structure/reagent_dispensers/fueltank, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"jLn" = ( +/obj/floor_decal/borderfloorwhite, +/obj/machinery/r_n_d/circuit_imprinter, +/obj/item/reagent_containers/glass/beaker/sulphuric, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"jLW" = ( +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"jMH" = ( +/obj/machinery/jukebox/custom_tape/old, +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"jPk" = ( +/obj/machinery/vending/cola{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"jPX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "red"; + name = "carpet" + }, +/area/centcom/living) +"jRM" = ( +/obj/floor_decal/corner/paleblue{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/testing) +"jRQ" = ( +/obj/floor_decal/carpet, +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"jSE" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/sign/iccg{ + pixel_y = -32 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"jTb" = ( +/obj/landmark{ + name = "tdome1" + }, +/obj/machinery/button/blast_door{ + id_tag = "Thundernewblue"; + pixel_x = 32 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/tdome2) +"jVy" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/holding) +"jWw" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"jWR" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/door/blast/shutters/open{ + dir = 4; + id_tag = "cc_med_lockdown"; + name = "Infirmary Entry Shutters" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"jWV" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/tile/carpetgreen/fifty, +/obj/item/stack/tile/carpetgreen/fifty, +/obj/item/stack/tile/carpetgreen/fifty, +/obj/item/stack/tile/carpetgreen/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"jYz" = ( +/obj/machinery/optable, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"jYR" = ( +/turf/unsimulated/wall{ + desc = "A secure airlock. Doesn't look like you can get through easily."; + icon = 'icons/obj/doors/centcom/door.dmi'; + icon_state = "closed"; + name = "Facility Access" + }, +/area/centcom/scgf) +"kad" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"kbG" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/red, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"kiC" = ( +/obj/wallframe_spawn/reinforced, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"kju" = ( +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"kjR" = ( +/obj/structure/sign/warning/airlock, +/turf/simulated/wall/r_wall/prepainted, +/area/centcom) +"kpp" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"kqg" = ( +/obj/machinery/gibber, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"kqh" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/wallframe_spawn/reinforced/hull, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"kqA" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/atm{ + pixel_y = 32 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"krd" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"krq" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"ksY" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/floor_decal/corner/beige/border{ + dir = 5 + }, +/obj/machinery/chem_master, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"ksZ" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 8 + }, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"ktm" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"ktV" = ( +/obj/machinery/newscaster{ + pixel_x = -28 + }, +/obj/item/storage/toolbox/mechanical, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"kuW" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control switch for port-side blast doors."; + dir = 8; + id_tag = "CentComCargoEntrance"; + name = "Cargo Doors"; + pixel_x = 26; + req_access = list("ACCESS_CENT_GENERAL") + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"kvI" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/table/rack/dark, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"kyV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"kAc" = ( +/obj/floor_decal/corner/paleblue{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/testing) +"kAI" = ( +/obj/machinery/hologram/holopad/longrange, +/obj/structure/disposalpipe/junction/yjunction, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"kAO" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "red"; + name = "carpet" + }, +/area/centcom/living) +"kCj" = ( +/obj/structure/flora/ausbushes/grassybush, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"kCq" = ( +/obj/floor_decal/industrial/warning, +/obj/machinery/photocopier, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"kFk" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/holofloor/lino, +/area/holodeck/source_meetinghall) +"kFF" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/item/stack/tile/carpetblue/fifty, +/obj/item/stack/tile/carpetblue/fifty, +/obj/item/stack/tile/carpetblue/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"kGv" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 10 + }, +/obj/structure/holostool, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_meetinghall) +"kHi" = ( +/obj/structure/closet/medical_wall{ + pixel_y = 32 + }, +/obj/structure/iv_stand, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/floor_decal/corner/paleblue{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"kHz" = ( +/obj/structure/table/steel_reinforced, +/obj/item/folder/blue, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"kHP" = ( +/obj/floor_decal/techfloor, +/obj/structure/table/steel_reinforced, +/obj/item/ammo_casing/rocket, +/obj/item/ammo_casing/rocket, +/obj/item/ammo_casing/rocket, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"kIv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced/hull, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"kIF" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/bed/chair/office/comfy/blue{ + dir = 8 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"kIZ" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "red"; + name = "carpet" + }, +/area/centcom/living) +"kJq" = ( +/obj/machinery/door/blast/regular/open{ + id_tag = "CentComPort"; + name = "Security Doors" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"kJx" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"kKc" = ( +/obj/floor_decal/corner/blue/three_quarters, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"kKD" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/techfloor, +/obj/structure/closet/crate, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"kKT" = ( +/obj/floor_decal/ntlogo{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"kLy" = ( +/obj/structure/railing/mapped, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon_state = "bcircuit" + }, +/area/centcom) +"kLN" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/warning, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"kLU" = ( +/obj/machinery/computer/modular/preset/medical{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"kMa" = ( +/obj/structure/closet/crate/trashcart, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"kMk" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 8; + icon_state = "wooden_chair_wings" + }, +/turf/unsimulated/beach/sand{ + icon_state = "desert_dug" + }, +/area/centcom/living) +"kMw" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/item/stack/material/wood/bamboo/fifty, +/obj/item/stack/material/wood/bamboo/fifty, +/obj/item/stack/material/wood/bamboo/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"kMz" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 10 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"kMF" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloorwhite/corner2, +/obj/floor_decal/corner/purple/bordercorner2, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"kNx" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/medical, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"kOJ" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"kOU" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"kOZ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/photocopier, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"kQb" = ( +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/shuttle/transport1/centcom) +"kQv" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/structure/table/rack, +/obj/item/rig/military/equipped, +/obj/item/rig/military/equipped, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"kQT" = ( +/obj/random/trash, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"kQW" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"kSb" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/beige/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/beige/bordercorner2{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"kTh" = ( +/obj/structure/sign/double/iccgflag/right{ + pixel_y = -32; + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"kTF" = ( +/obj/machinery/door/airlock/multi_tile{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"kVe" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/vending/snack{ + name = "hacked Getmore Chocolate Corp"; + prices = list() + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"kWF" = ( +/turf/unsimulated/wall, +/area/tdome/testing/engineering) +"kWX" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"kYC" = ( +/obj/overlay/palmtree_r, +/turf/unsimulated/beach/sand{ + icon_state = "desert1" + }, +/area/centcom/living) +"kYG" = ( +/turf/unsimulated/wall{ + dir = 8; + icon_state = "fakewindows"; + name = "window"; + opacity = 0 + }, +/area/tdome/testing) +"laJ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"laU" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/floor_decal/corner/beige/border{ + dir = 6 + }, +/obj/structure/bed/chair/office/comfy/blue{ + dir = 1 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"lbM" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"lbT" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"lbU" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"lbW" = ( +/obj/machinery/status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/holding) +"lcd" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"lcr" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_theatre) +"lcM" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"ldv" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"leI" = ( +/obj/floor_decal/iccglogo/corner, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"lgz" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"lhv" = ( +/turf/unsimulated/beach/sand{ + icon_state = "desert1" + }, +/area/centcom/living) +"lip" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/item/reagent_containers/food/snacks/monkeysdelight, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"liW" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/supply/dock) +"lkV" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"lna" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "green"; + name = "carpet" + }, +/area/centcom/living) +"lnC" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"lol" = ( +/obj/structure/flora/pottedplant/largebush, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"lqr" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/machinery/computer/rdservercontrol, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"lrA" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"lsi" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"lss" = ( +/obj/machinery/door/airlock/civilian{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"ltH" = ( +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"luu" = ( +/obj/floor_decal/corner/paleblue{ + dir = 5 + }, +/obj/item/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/reagent_containers/food/snacks/meat/syntiflesh, +/obj/structure/table/standard, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"lvg" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/recharger/wallcharger{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/shuttle/transport1/centcom) +"lvr" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"lyi" = ( +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"lyL" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/paint/black, +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "SPECOPSOFFICER"; + name = "Spec Ops Officer Office" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/creed) +"lzd" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/item/stack/material/diamond/ten, +/obj/item/stack/material/diamond/ten, +/obj/item/stack/material/diamond/ten, +/obj/item/stack/material/diamond/ten, +/obj/item/stack/material/diamond/ten, +/obj/item/stack/material/diamond/ten, +/obj/item/stack/material/diamond/ten, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"lBm" = ( +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"lCd" = ( +/turf/unsimulated/wall, +/area/tdome/testing) +"lDh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"lDz" = ( +/obj/wallframe_spawn/reinforced/hull, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"lEb" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"lGT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"lIe" = ( +/obj/wallframe_spawn/reinforced/hull, +/turf/simulated/floor/plating, +/area/centcom/control) +"lIj" = ( +/obj/structure/railing/mapped, +/turf/unsimulated/floor{ + icon_state = "bcircuit" + }, +/area/centcom) +"lII" = ( +/obj/floor_decal/floordetail/edgedrain{ + dir = 4 + }, +/obj/machinery/body_scanconsole, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"lJU" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 4 + }, +/obj/machinery/bodyscanner, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"lKc" = ( +/obj/structure/reagent_dispensers/water_cooler{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"lKh" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"lKG" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 9 + }, +/obj/structure/holostool, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_theatre) +"lLo" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/red, +/obj/landmark/corpse/pirate, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"lNt" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"lND" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"lNJ" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/phoron/fifty, +/obj/item/stack/material/phoron/fifty, +/obj/item/stack/material/phoron/fifty, +/obj/item/stack/material/phoron/fifty, +/obj/item/stack/material/phoron/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"lPZ" = ( +/obj/floor_decal/spline/fancy/wood, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"lQe" = ( +/obj/machinery/vending/boozeomat, +/obj/floor_decal/carpet{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"lRl" = ( +/obj/structure/window/reinforced/holowindow{ + dir = 1 + }, +/obj/structure/window/reinforced/holowindow{ + dir = 8 + }, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_theatre) +"lUz" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/structure/filingcabinet/chestdrawer, +/obj/item/folder/nt, +/obj/item/folder/nt, +/obj/item/folder/nt, +/obj/item/folder/nt, +/obj/item/folder/nt, +/obj/item/folder/nt, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"lVi" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "red"; + name = "carpet" + }, +/area/centcom/living) +"lWO" = ( +/obj/decal/cleanable/filth, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"lXF" = ( +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Bridge"; + departmentType = 5; + name = "Bridge RC"; + pixel_x = 30; + pixel_y = 0 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"lXR" = ( +/obj/structure/sign/double/solgovflag/left{ + dir = 1; + pixel_x = 0; + pixel_y = -32 + }, +/obj/machinery/photocopier, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"lZc" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"mcl" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"mcM" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"mfE" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"mhW" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/warning, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"miv" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"miT" = ( +/obj/machinery/vending/cola, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"mjX" = ( +/obj/floor_decal/carpet, +/obj/structure/disposalpipe/segment, +/obj/machinery/vending/coffee{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"mma" = ( +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"mmS" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"mpU" = ( +/turf/unsimulated/wall, +/area/tdome/testing/engineering/unpowered) +"mty" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"mAT" = ( +/obj/paint/hull, +/turf/simulated/wall/r_titanium, +/area/shuttle/transport1/centcom) +"mCp" = ( +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"mEZ" = ( +/obj/structure/railing/mapped, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/scgf) +"mFT" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/obj/structure/table/reinforced, +/obj/item/roller_bed, +/obj/item/roller_bed, +/obj/item/roller_bed, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"mIS" = ( +/obj/structure/disposalpipe/segment, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"mKH" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/floor_decal/floordetail/edgedrain{ + dir = 6 + }, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"mLk" = ( +/obj/structure/flora/pottedplant/largebush, +/obj/floor_decal/corner/black/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/control) +"mLB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/holding) +"mNc" = ( +/obj/machinery/telecomms/receiver/preset_cent, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"mOH" = ( +/obj/random/trash, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/conveyor{ + id = "cc_sort"; + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"mQl" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/structure/filingcabinet/chestdrawer, +/obj/item/folder/nt/rd, +/obj/item/folder/nt/rd, +/obj/item/folder/nt/rd, +/obj/item/folder/nt/rd, +/obj/item/folder/nt/rd, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"mQw" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/structure/closet/crate, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"mQx" = ( +/obj/floor_decal/iccglogo, +/obj/machinery/hologram/holopad/longrange, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"mQF" = ( +/obj/machinery/hologram/holopad/longrange, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"mQR" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/structure/sign/warning/nosmoking_1{ + desc = "A warning sign which reads 'NO SMOKING'. Someone has scratched a variety of crude words in gutter across the entire sign."; + pixel_y = 32 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"mRa" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"mRg" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/table/standard, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"mRV" = ( +/obj/machinery/door/blast/regular{ + id_tag = "crescent_checkpoint_access"; + name = "Crescent Checkpoint" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"mSy" = ( +/obj/structure/table/marble, +/obj/machinery/cooker/candy, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"mWI" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/turf/unsimulated/floor/plating, +/area/space) +"mXE" = ( +/obj/machinery/computer/shuttle_control{ + dir = 1; + req_access = list("ACCESS_CENT_GENERAL"); + shuttle_tag = "Centcom" + }, +/obj/floor_decal/industrial/warning/cee, +/turf/simulated/floor/tiled/white, +/area/shuttle/transport1/centcom) +"mYg" = ( +/obj/structure/curtain/open/privacy, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"mYi" = ( +/turf/unsimulated/beach/sand{ + icon_state = "seashallow" + }, +/area/centcom/living) +"mZc" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/red/border{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"mZg" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"ncF" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"ncY" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"nev" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/tile/carpetred/fifty, +/obj/item/stack/tile/carpetred/fifty, +/obj/item/stack/tile/carpetred/fifty, +/obj/item/stack/tile/carpetred/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"ngh" = ( +/obj/machinery/door/airlock/centcom{ + name = "Checkpoint"; + req_access = newlist() + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"ngr" = ( +/obj/floor_decal/carpet/purple{ + dir = 4 + }, +/obj/floor_decal/carpet/purple, +/obj/floor_decal/carpet/purple{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"njl" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"njt" = ( +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"nkg" = ( +/obj/structure/closet, +/obj/item/clothing/shoes/white, +/obj/item/tank/anesthetic, +/obj/item/tank/anesthetic, +/obj/item/tank/anesthetic, +/obj/item/clothing/mask/breath/anesthetic, +/obj/item/clothing/mask/surgical, +/obj/item/clothing/gloves/latex/nitrile, +/obj/item/clothing/head/surgery/blue, +/obj/item/clothing/suit/surgicalapron, +/obj/item/clothing/under/rank/medical/scrubs/blue, +/obj/floor_decal/corner/paleblue{ + dir = 5 + }, +/obj/item/defibrillator/compact/loaded, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"nli" = ( +/obj/machinery/telecomms/allinone{ + intercept = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"nlw" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/conveyor{ + id = "cc_sort"; + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"nnd" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/snacks/mint, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"npu" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/snacks/chips, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"nrd" = ( +/obj/structure/flora/ausbushes/genericbush, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"nrf" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/beige/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/beige/bordercorner2{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"nuK" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -28; + req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) + }, +/obj/floor_decal/corner/blue/three_quarters, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"nuY" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/specops) +"nwD" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/snacks/bloodsoup, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "green"; + name = "carpet" + }, +/area/centcom/living) +"nxb" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 4 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 4 + }, +/obj/structure/sign/warning/nosmoking_1{ + dir = 8; + pixel_x = 32 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"nxB" = ( +/obj/machinery/body_scanconsole, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"nxZ" = ( +/obj/floor_decal/carpet, +/obj/machinery/button/blast_door{ + id_tag = "SPECOPSOFFICER"; + name = "Spec Ops Officer Access"; + pixel_y = -29; + req_access = list("ACCESS_CENT_CREED") + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"nyY" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"nzq" = ( +/obj/structure/table/rack, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/wood/fifty, +/obj/item/stack/material/rods/fifty, +/obj/item/stack/cable_coil/yellow, +/obj/item/stack/cable_coil/yellow, +/obj/item/stack/cable_coil/yellow, +/turf/simulated/floor, +/area/tdome/testing/engineering) +"nzP" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 5 + }, +/obj/structure/holostool, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_theatre) +"nAl" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"nDh" = ( +/obj/structure/flora/ausbushes/stalkybush, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"nDt" = ( +/obj/decal/cleanable/filth, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"nDQ" = ( +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "Emergency NanoMed"; + pixel_y = -29 + }, +/obj/structure/table/steel_reinforced, +/obj/item/book/manual/military_law, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"nHU" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/machinery/door/blast/regular{ + id_tag = "ASSAULTMech"; + name = "Assault Armor Storage" + }, +/turf/unsimulated/floor/plating, +/area/centcom/specops) +"nIw" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor, +/area/tdome/testing/engineering) +"nJo" = ( +/turf/unsimulated/beach/sand{ + dir = 8; + icon_state = "beachcorner" + }, +/area/centcom/living) +"nKw" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"nOX" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"nQH" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/decal/cleanable/filth, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"nUd" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 8; + icon_state = "wooden_chair_wings" + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"nUk" = ( +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"nUw" = ( +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"nVE" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/red/border, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"nXV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/holding) +"nYN" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 22 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/item/reagent_containers/glass/bucket, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/decal/cleanable/blood/splatter, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"nYO" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"oaM" = ( +/obj/machinery/door/airlock/centcom{ + name = "Telecomms"; + req_access = newlist() + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"obe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"obh" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Chemistry" + }, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/floor_decal/corner/white/diagonal, +/turf/unsimulated/floor{ + dir = 2; + icon_state = "freezerfloor" + }, +/area/centcom/living) +"obA" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"ocS" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/NT, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"ocW" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/techfloor, +/obj/item/storage/box/donut, +/obj/item/storage/box/donut, +/obj/item/storage/box/donut, +/obj/item/storage/box/donut, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"oeL" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "red"; + name = "carpet" + }, +/area/centcom/living) +"oeQ" = ( +/obj/structure/sign/fifthfleet{ + pixel_y = 32 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"ofj" = ( +/obj/machinery/status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/scgf) +"oii" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"okY" = ( +/obj/machinery/cooker/oven, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"ola" = ( +/obj/structure/flora/pottedplant/bamboo, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"onT" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/holding) +"ooI" = ( +/obj/machinery/firealarm{ + dir = 2; + pixel_y = 24 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"ooK" = ( +/obj/machinery/door/airlock/glass/science, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"opy" = ( +/obj/machinery/button/windowtint{ + id = "cc_surgery_operative"; + pixel_x = -25; + pixel_y = 6; + dir = 4 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 8 + }, +/obj/machinery/button/holosign{ + id_tag = "cc_surgery_operative"; + pixel_x = -24; + pixel_y = -3 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"opB" = ( +/turf/simulated/wall/walnut, +/area/centcom/living) +"opF" = ( +/obj/floor_decal/industrial/warning, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"oqQ" = ( +/obj/item/modular_computer/telescreen/preset/generic{ + pixel_x = 32 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"ovw" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"owp" = ( +/obj/floor_decal/corner/paleblue/three_quarters{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/testing) +"oyp" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"oyQ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"ozr" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/beige/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/beige/bordercorner2{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"oAv" = ( +/obj/structure/table/steel_reinforced, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"oCf" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 8 + }, +/obj/structure/bed/chair/office/comfy/blue{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"oCN" = ( +/obj/machinery/computer/ship/navigation/telescreen{ + pixel_x = 32 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"oDb" = ( +/obj/structure/table/rack, +/obj/item/stack/material/titanium/fifty, +/obj/item/stack/material/plasteel/fifty, +/obj/item/stack/material/ocp/fifty, +/turf/simulated/floor, +/area/tdome/testing/engineering) +"oDG" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"oES" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"oFG" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/vending/wallmed1{ + dir = 8; + pixel_x = 23 + }, +/turf/simulated/floor/tiled, +/area/shuttle/transport1/centcom) +"oGh" = ( +/turf/unsimulated/wall{ + desc = "A secure airlock. Doesn't look like you can get through easily."; + icon = 'icons/obj/doors/centcom/door.dmi'; + icon_state = "closed"; + name = "Bridge"; + dir = 4 + }, +/area/centcom/iccgn) +"oGs" = ( +/obj/structure/bed/chair/comfy/blue, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"oKl" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/techfloor, +/obj/item/gun/projectile/automatic/bullpup_rifle, +/obj/item/gun/projectile/automatic/bullpup_rifle, +/obj/item/gun/projectile/automatic/bullpup_rifle, +/obj/item/gun/projectile/automatic/bullpup_rifle, +/obj/item/gun/projectile/automatic/bullpup_rifle, +/obj/item/gun/projectile/automatic/bullpup_rifle, +/obj/item/ammo_magazine/mil_rifle, +/obj/item/ammo_magazine/mil_rifle, +/obj/item/ammo_magazine/mil_rifle, +/obj/item/ammo_magazine/mil_rifle, +/obj/item/ammo_magazine/mil_rifle, +/obj/item/ammo_magazine/mil_rifle, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"oKs" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "red"; + name = "carpet" + }, +/area/centcom/living) +"oKC" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/structure/table/steel_reinforced, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot, +/obj/floor_decal/borderfloorblack, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"oLE" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/paint/black, +/obj/machinery/door/blast/regular{ + id_tag = "SPECOPSOFFICER"; + name = "Spec Ops Officer Office" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/creed) +"oLL" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"oMz" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/table/woodentable_reinforced/walnut, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "green"; + name = "carpet" + }, +/area/centcom/living) +"oMO" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"oNo" = ( +/obj/machinery/computer/robotics{ + dir = 4 + }, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"oPK" = ( +/turf/simulated/floor, +/area/tdome/testing/engineering/unpowered) +"oQo" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 5 + }, +/obj/structure/reagent_dispensers/water_cooler, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"oRm" = ( +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"oTp" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/bed/chair/shuttle, +/obj/machinery/embedded_controller/radio/simple_docking_controller{ + frequency = 1380; + id_tag = "centcom_shuttle"; + pixel_x = -24; + pixel_y = -24; + tag_door = "centcom_shuttle_hatch" + }, +/turf/simulated/floor/tiled, +/area/shuttle/transport1/centcom) +"oUk" = ( +/obj/machinery/computer/station_alert/all{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"oVL" = ( +/obj/machinery/door/window/southright{ + dir = 8; + name = "Research and Development Desk"; + req_access = newlist() + }, +/obj/machinery/door/window/northleft{ + autoset_access = 0; + dir = 4; + name = "Research and Development Desk" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"oVS" = ( +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/industrial/warning, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"oWh" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"oWO" = ( +/obj/machinery/mech_recharger, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"oXr" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"oYI" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"oZh" = ( +/obj/machinery/cooker/fryer, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"oZu" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 5 + }, +/turf/simulated/floor/carpet/red, +/area/centcom) +"oZy" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"pde" = ( +/obj/decal/cleanable/blood/splatter, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "monotile_light" + }, +/area/centcom/living) +"pdt" = ( +/obj/structure/flora/ausbushes/fernybush, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"pdz" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"pee" = ( +/obj/item/stool/padded, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"peE" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/machinery/computer/modular/preset/civilian{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"peR" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"peS" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -22 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"pfe" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/lattice, +/turf/space, +/area/space) +"pgX" = ( +/obj/machinery/door/airlock/external{ + frequency = 1380; + glass = 1380; + id_tag = "centcom_shuttle_bay_door"; + locked = 1; + name = "Transport Airlock" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"piO" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"pjD" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"pjZ" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 1 + }, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"pkW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"plf" = ( +/obj/machinery/door/airlock/centcom{ + dir = 1; + name = "Surgery" + }, +/obj/machinery/holosign/surgery{ + dir = 1; + id_tag = "cc_surgery_operative" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"pnx" = ( +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techmaint, +/area/supply/dock) +"pqw" = ( +/obj/floor_decal/borderfloorblack, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"prM" = ( +/obj/structure/closet, +/obj/item/storage/box/syringes, +/obj/item/storage/box/beakers, +/obj/item/storage/box/beakers/insulated, +/obj/item/device/scanner/spectrometer/adv, +/obj/item/clothing/shoes/white, +/obj/item/clothing/under/sterile, +/obj/item/storage/backpack/messenger/chem, +/obj/item/clothing/suit/storage/toggle/labcoat/chemist, +/obj/item/clothing/glasses/science, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/gas, +/obj/floor_decal/corner/beige{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"ptl" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/machinery/computer/modular/preset/engineering{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"pty" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"ptK" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/structure/sign/warning/nosmoking_1{ + dir = 1; + pixel_y = -14; + pixel_x = 24 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"pxq" = ( +/obj/machinery/door/airlock/centcom{ + name = "Long Term Wardrobe" + }, +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/holding) +"pzY" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/item/stack/material/gold/ten, +/obj/item/stack/material/gold/ten, +/obj/item/stack/material/gold/ten, +/obj/item/stack/material/gold/ten, +/obj/item/stack/material/gold/ten, +/obj/item/stack/material/gold/ten, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"pBe" = ( +/obj/machinery/acting/changer, +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/centcom/iccgn) +"pCq" = ( +/obj/floor_decal/corner/black/mono, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/control) +"pCP" = ( +/obj/floor_decal/corner/paleblue/three_quarters{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/testing) +"pDA" = ( +/obj/structure/sign/double/solgovflag/right{ + dir = 1; + pixel_x = 0; + pixel_y = -32 + }, +/obj/machinery/papershredder, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"pEp" = ( +/obj/structure/bed/chair/comfy/captain{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"pGu" = ( +/turf/unsimulated/floor{ + dir = 5; + icon_state = "vault" + }, +/area/tdome/testing) +"pID" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"pKc" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"pKw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"pKT" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/beige/border{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/machinery/reagent_temperature, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"pKX" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 6 + }, +/obj/item/reagent_containers/food/snacks/bunbun, +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"pMl" = ( +/obj/machinery/door/blast/regular/open{ + id_tag = "CentComPort"; + name = "Security Doors" + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"pPZ" = ( +/obj/wallframe_spawn/reinforced/hull, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"pQd" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"pQs" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 4 + }, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"pUo" = ( +/obj/item/storage/box/large/iccgn_ranks, +/obj/structure/table/steel_reinforced, +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/centcom/iccgn) +"pUK" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 8 + }, +/obj/structure/bed/chair/office/comfy/blue{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"pUP" = ( +/obj/floor_decal/techfloor, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"pVh" = ( +/obj/machinery/door/airlock/centcom{ + dir = 1; + name = "Surgery"; + id_tag = "cc_surgery" + }, +/obj/machinery/holosign/surgery{ + dir = 1; + id_tag = "cc_surgery" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"pVG" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/structure/closet/secure_closet{ + name = "long term chamber locker"; + req_access = list("ACCESS_SECURITY") + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/holding) +"pVH" = ( +/obj/floor_decal/floordetail/edgedrain{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"pWe" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/turf/space, +/area/centcom/specops) +"pWW" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"pZZ" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped, +/obj/item/stack/tile/carpetpurple/fifty, +/obj/item/stack/tile/carpetpurple/fifty, +/obj/item/stack/tile/carpetpurple/fifty, +/obj/item/stack/tile/carpetpurple/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"qal" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techmaint, +/area/supply/dock) +"qbc" = ( +/obj/machinery/disposal{ + id_tag = "Kitchen" + }, +/obj/structure/disposalpipe/trunk, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"qbW" = ( +/obj/decal/cleanable/filth, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 5 + }, +/obj/structure/flora/pottedplant/minitree, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"qcc" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 22 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"qdf" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"qdW" = ( +/obj/floor_decal/borderfloorwhite, +/obj/structure/reagent_dispensers/fueltank, +/obj/floor_decal/corner/purple/border, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"qep" = ( +/obj/wallframe_spawn/reinforced/hull, +/turf/unsimulated/floor/plating, +/area/centcom) +"qeu" = ( +/obj/structure/closet/emcloset, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"qeH" = ( +/obj/machinery/door/blast/regular{ + id_tag = "crescent_checkpoint_access"; + name = "Crescent Checkpoint" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"qgJ" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"qhA" = ( +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "cc_surgery" + }, +/turf/unsimulated/floor/plating, +/area/centcom/living) +"qhG" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"qhY" = ( +/obj/structure/table/glass, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/obj/machinery/camera/network/thunder{ + c_tag = "Thunderdome Red Team Supply Room"; + invisibility = 101 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"qiE" = ( +/obj/structure/table/reinforced, +/obj/item/flora/pottedplantsmall/leaf, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom) +"qiX" = ( +/obj/machinery/computer/shuttle_control{ + dir = 4; + req_access = list("ACCESS_CENT_GENERAL"); + shuttle_tag = "Centcom" + }, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom) +"qjY" = ( +/obj/machinery/vending/wallmed1{ + name = "Emergency NanoMed"; + pixel_y = 29 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"qla" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/vending/hotfood, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"qlv" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/warning, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"qlw" = ( +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -21 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"qpj" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Interrogation" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"qqb" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/structure/table/standard, +/obj/item/stock_parts/scanning_module{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/micro_laser, +/obj/item/stock_parts/console_screen, +/obj/item/device/paicard, +/obj/item/disk/design_disk, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"qrZ" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/structure/table/steel_reinforced, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/obj/floor_decal/borderfloorblack, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"qtE" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "green"; + name = "carpet" + }, +/area/centcom/living) +"qtG" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/medical, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"qvb" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/item/stack/tile/carpetblue3/fifty, +/obj/item/stack/tile/carpetblue3/fifty, +/obj/item/stack/tile/carpetblue3/fifty, +/obj/item/stack/tile/carpetblue3/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"qws" = ( +/obj/structure/table/marble, +/obj/item/material/kitchen/rollingpin, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"qww" = ( +/obj/machinery/sleeper, +/obj/structure/sign/warning/nosmoking_1{ + desc = "A warning sign which reads 'NO SMOKING'. Someone has scratched a variety of crude words in gutter across the entire sign."; + pixel_y = 32 + }, +/obj/floor_decal/corner/paleblue{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"qxA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"qyh" = ( +/obj/structure/kitchenspike, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"qBc" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"qCH" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"qEa" = ( +/obj/structure/bed/chair/office/comfy/blue{ + dir = 8 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control switch for port-side blast doors."; + id_tag = "cc_med_lockdown"; + name = "Checkpoint Lockdown"; + pixel_y = 25; + req_access = list("ACCESS_CENT_GENERAL") + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"qEl" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"qEw" = ( +/obj/floor_decal/carpet, +/mob/living/carbon/alien/diona{ + name = "HOS diona nymph" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"qGa" = ( +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"qGc" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"qGh" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/paint/black, +/obj/machinery/door/blast/regular{ + id_tag = "SPECOPSOFFICER"; + name = "Spec Ops Officer Office" + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/creed) +"qGm" = ( +/obj/item/beach_ball, +/obj/item/clothing/glasses/sunglasses{ + pixel_x = -2; + pixel_y = -3 + }, +/turf/unsimulated/beach/sand{ + icon_state = "desert1" + }, +/area/centcom/living) +"qHY" = ( +/obj/floor_decal/carpet, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"qIn" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/punitelli, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"qIO" = ( +/obj/floor_decal/spline/fancy/wood, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"qKC" = ( +/obj/floor_decal/ntlogo, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"qNa" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"qNE" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"qOB" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/floor_decal/corner/beige/border{ + dir = 5 + }, +/obj/structure/table/standard, +/obj/item/defibrillator/loaded, +/obj/item/defibrillator/loaded, +/obj/item/defibrillator/loaded, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"qOW" = ( +/obj/floor_decal/borderfloorblack, +/obj/machinery/computer/prisoner{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"qRg" = ( +/obj/machinery/seed_storage/garden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"qUB" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/drinks/bottle/absinthe, +/obj/item/reagent_containers/food/drinks/cans/cola_diet, +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/floor_decal/carpet/purple{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"qUM" = ( +/obj/floor_decal/iccglogo/center_left, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"qVl" = ( +/obj/machinery/computer/modular/preset/supply_public{ + dir = 1 + }, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"qWc" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/purple/bordercorner2, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"qYE" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"qZl" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"qZB" = ( +/obj/structure/table/steel_reinforced, +/obj/item/reagent_containers/food/drinks/golden_cup, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"rav" = ( +/obj/structure/bed/chair/wood/wings/walnut, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"raW" = ( +/obj/floor_decal/scglogo{ + icon_state = "center-left" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"rbD" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/machinery/r_n_d/circuit_imprinter, +/obj/item/reagent_containers/glass/beaker/sulphuric, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"rcI" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 1; + icon_state = "propulsion_l" + }, +/obj/paint/red, +/obj/paint_stripe/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/transport1/centcom) +"rdA" = ( +/obj/floor_decal/industrial/warning, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"rfc" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/floor_decal/corner/black/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/control) +"rfh" = ( +/obj/floor_decal/borderfloorblack, +/obj/machinery/computer/station_alert/security{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"rfn" = ( +/obj/structure/closet/crate/hydroponics/beekeeping, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"rfx" = ( +/obj/machinery/beehive, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"rgh" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/drinks/bottle/cola, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"rgu" = ( +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/structure/disposalpipe/junction, +/obj/structure/reagent_dispensers/water_cooler, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"rgH" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"rhc" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"rjN" = ( +/obj/structure/sign/double/solgovflag/left{ + pixel_y = 32 + }, +/obj/structure/filingcabinet/chestdrawer, +/obj/item/folder/blue, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"rjQ" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"rly" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/beige/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/beige/bordercorner2{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"rlP" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + dir = 8; + id_tag = "CentComCargo"; + name = "Supply Drone Shutter Control"; + pixel_x = 27; + req_access = list("ACCESS_CARGO") + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"rlX" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"rne" = ( +/obj/floor_decal/scglogo, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"rno" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder, +/obj/item/stack/material/phoron{ + amount = 50 + }, +/obj/floor_decal/corner/beige{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"rnr" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"rpH" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"rqg" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 9 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/heart, +/turf/simulated/floor/carpet/red, +/area/centcom) +"rqJ" = ( +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"rru" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/sleeper{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"rsz" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/machinery/r_n_d/protolathe, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"rte" = ( +/obj/structure/sign/fifthfleet{ + pixel_y = -32 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"rtF" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/chemical_dispenser/bar_soft/full{ + pixel_y = 8 + }, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"rut" = ( +/obj/floor_decal/stairs, +/turf/simulated/floor/holofloor/tiled/dark, +/area/holodeck/source_theatre) +"rva" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"rwD" = ( +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet{ + dir = 6 + }, +/obj/structure/holostool, +/obj/structure/holostool, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 5 + }, +/turf/simulated/floor/holofloor/carpet, +/area/holodeck/source_meetinghall) +"rwG" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"rxp" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"rxD" = ( +/obj/floor_decal/carpet/purple{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"rze" = ( +/obj/floor_decal/borderfloor/corner, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"rzp" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"rzU" = ( +/turf/unsimulated/beach/sand{ + dir = 5; + icon_state = "beach" + }, +/area/centcom/living) +"rAh" = ( +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"rDg" = ( +/obj/machinery/door/airlock/glass/science, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"rEC" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"rEI" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"rFH" = ( +/obj/structure/iv_stand, +/obj/floor_decal/floordetail/edgedrain{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"rGe" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"rJD" = ( +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"rME" = ( +/turf/simulated/wall/prepainted, +/area/centcom/living) +"rMF" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/snacks/bigbiteburger, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"rNb" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"rNC" = ( +/obj/floor_decal/industrial/warning, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"rPc" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"rQw" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/structure/flora/pottedplant/bamboo, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"rSf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"rSJ" = ( +/obj/structure/table/steel_reinforced, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/NT, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"rUd" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"rUL" = ( +/obj/structure/table/steel_reinforced, +/obj/item/rig/military/equipped, +/obj/item/rig/military/equipped, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"rVo" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/window/reinforced/holowindow{ + dir = 1 + }, +/obj/structure/window/reinforced/holowindow{ + dir = 8 + }, +/turf/simulated/floor/holofloor/wood, +/area/holodeck/source_meetinghall) +"rWr" = ( +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"rWJ" = ( +/obj/floor_decal/borderfloor/corner, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"rWK" = ( +/obj/machinery/door/blast/regular{ + id_tag = "SPECIALOPS"; + name = "Spec Ops Hangar" + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/specops) +"rXe" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/landmark{ + name = "Commando" + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"rXK" = ( +/obj/overlay/palmtree_r, +/obj/overlay/coconut, +/turf/unsimulated/beach/sand{ + icon_state = "desert1" + }, +/area/centcom/living) +"sat" = ( +/obj/machinery/icecream_vat, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"saV" = ( +/turf/unsimulated/wall{ + icon_state = "fakewindows"; + name = "window"; + opacity = 0 + }, +/area/tdome/testing) +"sbI" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/obj/structure/bed/chair/office/comfy/blue{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"sgj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/civilian, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"sgo" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/turf/space, +/area/centcom/living) +"sgM" = ( +/obj/paint/red, +/obj/paint_stripe/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/transport1/centcom) +"sif" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/sign/iccg{ + pixel_y = 32 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"sih" = ( +/obj/machinery/bodyscanner, +/obj/floor_decal/corner/paleblue{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"siv" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"siy" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"siA" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"siD" = ( +/obj/machinery/door/airlock/medical{ + autoset_access = 0; + name = "Operating Theatre"; + req_access = list("ACCESS_SURGERY") + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"skb" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 9 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"skJ" = ( +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/centcom/iccgn) +"slq" = ( +/obj/landmark{ + name = "tdomeadmin" + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/tdome/tdomeadmin) +"smg" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"snj" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"snS" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"soj" = ( +/obj/structure/table/standard, +/obj/item/device/integrated_circuit_printer, +/obj/item/device/integrated_electronics/analyzer{ + pixel_x = 6 + }, +/obj/item/device/integrated_electronics/wirer, +/obj/item/device/integrated_electronics/debugger{ + pixel_x = -5 + }, +/obj/item/stack/nanopaste, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"spg" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/reagent_dispensers/water_cooler, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"sso" = ( +/obj/structure/flora/pottedplant/stoutbush, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"ssu" = ( +/obj/paint/brown, +/turf/simulated/wall/titanium, +/area/supply/dock) +"ssC" = ( +/turf/simulated/floor, +/area/tdome/testing/engineering) +"svl" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"sww" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"sxw" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"sxU" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/item/rig/military/equipped, +/obj/item/rig/military/equipped, +/obj/item/rig/military/equipped, +/obj/item/rig/military/equipped, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"syW" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/floor_decal/carpet{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"szb" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/snacks/sliceable/variable/pizza, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "red"; + name = "carpet" + }, +/area/centcom/living) +"sCi" = ( +/obj/structure/table/rack, +/turf/unsimulated/floor{ + dir = 5; + icon_state = "vault" + }, +/area/tdome/testing) +"sCK" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"sFh" = ( +/obj/wallframe_spawn/reinforced/hull, +/turf/unsimulated/floor/plating, +/area/centcom/living) +"sFj" = ( +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"sFC" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/turf/space, +/area/centcom/holding) +"sHf" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 1 + }, +/obj/paint/red, +/obj/paint_stripe/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/transport1/centcom) +"sHq" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/cryo_cell, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"sHC" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/vending/cola{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"sIT" = ( +/obj/decal/cleanable/filth, +/obj/structure/janitorialcart, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/item/mop, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"sIW" = ( +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/obj/structure/reagent_dispensers/water_cooler, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"sJx" = ( +/obj/floor_decal/iccglogo/top_center, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"sKj" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom) +"sKn" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/beige/border{ + dir = 4 + }, +/obj/structure/table/standard, +/obj/item/storage/box/freezer{ + pixel_x = 5; + pixel_y = 9 + }, +/obj/item/storage/box/freezer{ + pixel_x = 5; + pixel_y = 9 + }, +/obj/item/storage/box/freezer{ + pixel_x = 5; + pixel_y = 9 + }, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"sKx" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/structure/disposaloutlet{ + dir = 1; + name = "cargo outlet" + }, +/obj/structure/disposalpipe/trunk, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"sMW" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"sNR" = ( +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"sOt" = ( +/obj/machinery/computer/station_alert/security{ + dir = 4 + }, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"sQa" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/machinery/door/blast/regular{ + id_tag = "CentComPort"; + name = "Security Doors" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"sQM" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper/monitorkey, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"sRw" = ( +/obj/floor_decal/ntlogo{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"sSt" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/floor_decal/corner/beige/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/machinery/reagent_temperature, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"sSC" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"sUU" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/machinery/robotics_fabricator, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"sVJ" = ( +/obj/machinery/status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/centcom) +"sVV" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"sVW" = ( +/obj/floor_decal/iccglogo/bottom_right, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"sYT" = ( +/obj/floor_decal/corner/black/mono, +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/control) +"sZC" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"tat" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "green"; + name = "carpet" + }, +/area/centcom/living) +"tbG" = ( +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/carpet{ + dir = 10 + }, +/obj/structure/table/reinforced, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"tbT" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/obj/machinery/r_n_d/destructive_analyzer, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"tce" = ( +/turf/unsimulated/wall{ + dir = 4; + icon_state = "fakewindows"; + name = "window"; + opacity = 0 + }, +/area/tdome/testing) +"tcG" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/structure/flora/pottedplant/floorleaf, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"tdl" = ( +/obj/paint/red, +/turf/simulated/wall/r_titanium, +/area/shuttle/specops/centcom) +"thW" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"tik" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/glass/science, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"tiZ" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/red, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"tkq" = ( +/obj/structure/railing/mapped, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"tkE" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"tlJ" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Bridge"; + req_access = newlist() + }, +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "SPECOPSOFFICER"; + name = "Spec Ops Officer Office" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/creed) +"tmd" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 1 + }, +/obj/structure/flora/pottedplant/minitree, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"tmt" = ( +/obj/structure/flora/pottedplant{ + icon_state = "plant-06" + }, +/turf/simulated/floor/holofloor/tiled, +/area/space) +"tnR" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 8; + icon_state = "wooden_chair_wings" + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"tpg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"tpU" = ( +/obj/machinery/seed_extractor, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"trz" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/turf/unsimulated/beach/sand{ + icon_state = "desert1" + }, +/area/centcom/living) +"trO" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/floor_decal/corner/beige/border{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"tsm" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"tsZ" = ( +/obj/structure/flora/ausbushes/pointybush, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"tuY" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/machinery/computer/modular/preset/security{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"tve" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"tvm" = ( +/obj/floor_decal/iccglogo/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"tvx" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/button/blast_door{ + id_tag = "SPECOPShuttle"; + name = "Spec Ops Shuttle"; + pixel_x = -6; + pixel_y = -34; + req_access = list("ACCESS_CENT_CREED") + }, +/obj/machinery/button/blast_door{ + id_tag = "ASSAULT"; + name = "Heavy Armory"; + pixel_x = -6; + pixel_y = -24; + req_access = list("ACCESS_CENT_GENERAL") + }, +/obj/machinery/button/blast_door{ + id_tag = "ert_synth_equipment"; + name = "Synthetic Access"; + pixel_x = 6; + pixel_y = -34; + req_access = list("ACCESS_CENT_GENERAL") + }, +/obj/machinery/button/blast_door{ + id_tag = "ASSAULTMech"; + name = "Assault Armor Access"; + pixel_x = 6; + pixel_y = -24; + req_access = list("ACCESS_CENT_GENERAL") + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"tvT" = ( +/obj/structure/closet/fridge/meat, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"twZ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/purple/border{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"txz" = ( +/obj/structure/table/glass, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/obj/machinery/camera/network/thunder{ + c_tag = "Thunderdome Blue Team Supply Room"; + invisibility = 101 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"tzL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"tBi" = ( +/obj/machinery/recharger/wallcharger{ + pixel_y = -25; + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/item/book/manual/solgov_law, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"tBL" = ( +/obj/floor_decal/corner/black/mono, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/control) +"tCR" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/holding) +"tDB" = ( +/obj/structure/table/marble, +/obj/machinery/cooker/cereal, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"tEz" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"tEN" = ( +/obj/structure/table/rack, +/obj/item/storage/toolbox/mechanical, +/turf/simulated/floor, +/area/tdome/testing/engineering) +"tGl" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"tIg" = ( +/obj/machinery/computer/modular/preset/full/ert{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"tIL" = ( +/obj/machinery/camera/network/thunder{ + c_tag = "Thunderdome Arena Middle"; + invisibility = 101 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"tKv" = ( +/obj/machinery/status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/control) +"tKI" = ( +/obj/machinery/bodyscanner{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/red, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"tMt" = ( +/obj/structure/bed/chair/office/comfy/blue, +/obj/machinery/button/blast_door{ + desc = "A remote control switch for port-side blast doors."; + dir = 4; + id_tag = "CentComCargoEntrance"; + name = "Cargo Doors"; + pixel_x = -35; + pixel_y = 7; + req_access = list("ACCESS_CENT_GENERAL") + }, +/obj/machinery/button/blast_door{ + desc = "A remote control switch for port-side blast doors."; + dir = 4; + id_tag = "CentComPort"; + name = "Security Doors"; + pixel_x = -28; + pixel_y = -2; + req_access = list("ACCESS_CENT_GENERAL") + }, +/obj/machinery/button/blast_door{ + dir = 4; + id_tag = "crescent_checkpoint_access"; + name = "Centcom Arivals"; + pixel_x = -28; + pixel_y = 7; + req_access = list("ACCESS_CARGO") + }, +/obj/machinery/button/blast_door{ + desc = "A remote control switch for port-side blast doors."; + dir = 1; + id_tag = "CC_Checkpoint"; + name = "Checkpoint Lockdown"; + pixel_x = 26; + pixel_y = -26; + req_access = list("ACCESS_CENT_GENERAL") + }, +/obj/floor_decal/carpet, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom) +"tNu" = ( +/obj/machinery/computer/modular/preset/engineering{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/centcom/scgf) +"tNM" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"tRb" = ( +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"tRE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"tRM" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"tSA" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 4; + icon_state = "wooden_chair_wings" + }, +/turf/unsimulated/beach/sand{ + icon_state = "desert_dug" + }, +/area/centcom/living) +"tSG" = ( +/obj/item/stool/padded, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"tSO" = ( +/obj/structure/table/marble, +/obj/machinery/reagent_temperature, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"tTl" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/wood/yew/twentyfive, +/obj/item/stack/material/wood/yew/twentyfive, +/obj/item/stack/material/wood/yew/twentyfive, +/obj/item/stack/material/wood/yew/twentyfive, +/obj/item/stack/material/wood/yew/twentyfive, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"tTw" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/machinery/computer/modular/preset/security{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"tTy" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/unsimulated/floor/reinforced, +/area/space) +"tTD" = ( +/obj/structure/decoy{ + name = "A.N.G.E.L." + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"tVp" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"tVv" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/creed) +"tWs" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"tWx" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/purple/border, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"tXm" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"tXz" = ( +/obj/floor_decal/carpet{ + dir = 1 + }, +/obj/machinery/psi_meter, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"uaP" = ( +/obj/floor_decal/corner/paleblue/three_quarters, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/testing) +"ubY" = ( +/obj/floor_decal/beach, +/obj/structure/bed/chair/office/comfy/blue, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"ucL" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/shuttle/transport1/centcom) +"ucS" = ( +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"udd" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"ueR" = ( +/obj/structure/table/standard, +/obj/item/material/kitchen/rollingpin, +/obj/item/material/knife/table/plastic, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/food/condiment/enzyme{ + pixel_y = 8 + }, +/obj/item/reagent_containers/food/condiment/barbecue{ + pixel_x = -3; + pixel_y = 9 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"ugw" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"ukl" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "monotile_light" + }, +/area/centcom/living) +"ukT" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) +"ulD" = ( +/obj/structure/coatrack, +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/creed) +"ulU" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/floor_decal/corner/purple/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner2{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/item/stack/material/titanium/fifty, +/obj/item/stack/material/titanium/fifty, +/obj/item/stack/material/titanium/fifty, +/obj/item/stack/material/titanium/fifty, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"umC" = ( +/obj/structure/iv_stand, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"unf" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/photocopier/faxmachine/centcom{ + department = "ICCGN PC Konigsberg Command Relay" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"unM" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"upe" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"upn" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/turf/space, +/area/centcom) +"urj" = ( +/obj/floor_decal/industrial/warning/cee{ + dir = 1; + icon_state = "warningcee" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/transport1/centcom) +"uro" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/item/storage/secure/briefcase, +/obj/item/storage/secure/briefcase, +/obj/item/storage/secure/briefcase, +/obj/item/storage/secure/briefcase, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"urL" = ( +/obj/machinery/organ_printer/flesh/mapped, +/obj/floor_decal/corner/paleblue{ + dir = 5 + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"utU" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"uuu" = ( +/obj/structure/lattice, +/turf/space, +/area/space) +"uuU" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/structure/table/standard, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"uvl" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/photocopier/faxmachine/centcom{ + department = "SFV Stinger Command Departament" + }, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"uvt" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"uxw" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"uya" = ( +/obj/machinery/computer/rdservercontrol{ + badmin = 1; + dir = 8; + name = "Master R&D Server Controller" + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/purple/border{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"uyE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"uBf" = ( +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"uCf" = ( +/obj/machinery/smartfridge/secure/medbay{ + req_access = list(list("ACCESS_CHEMISTRY","ACCESS_MEDICAL_EQUIP")); + dir = 1 + }, +/turf/unsimulated/floor/plating, +/area/centcom/living) +"uCh" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/purple/border{ + dir = 10 + }, +/obj/structure/flora/pottedplant/largebush, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"uCq" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/structure/sign/warning/smoking{ + pixel_x = 0; + pixel_y = 26 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"uDi" = ( +/obj/structure/closet/chefcloset_sierra, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"uEx" = ( +/obj/machinery/telecomms/processor/preset_cent, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"uFw" = ( +/obj/structure/closet/secure_closet/hos, +/obj/floor_decal/carpet{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"uFx" = ( +/obj/wallframe_spawn/reinforced/hull, +/obj/paint/black, +/obj/machinery/door/blast/regular/open{ + dir = 8; + id_tag = "CC_Checkpoint"; + name = "Checkpoint" + }, +/turf/unsimulated/floor/plating, +/area/centcom) +"uGe" = ( +/obj/machinery/computer/modular/preset/engineering{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"uGn" = ( +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"uJf" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"uJW" = ( +/obj/floor_decal/ntlogo{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"uLC" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"uMj" = ( +/obj/item/inflatable_duck{ + name = "NovA gosling" + }, +/turf/unsimulated/beach/sand{ + icon_state = "seashallow" + }, +/area/centcom/living) +"uMG" = ( +/obj/floor_decal/scglogo{ + icon_state = "bottom-left" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"uMJ" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"uNn" = ( +/obj/machinery/door/airlock/civilian{ + dir = 4; + name = "Bartenders'" + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"uQp" = ( +/obj/machinery/power/debug_items/infinite_generator, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor, +/area/tdome/testing/engineering/unpowered) +"uQt" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"uRL" = ( +/obj/structure/table/steel_reinforced, +/obj/item/documents/scg/blue, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"uSd" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/floor_decal/spline/fancy/wood/cee{ + dir = 1 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"uTc" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/item/reagent_containers/food/drinks/flask/barflask, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"uUg" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"uVP" = ( +/obj/structure/railing/mapped, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"uYy" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"uZd" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/item/stack/material/silver/ten, +/obj/item/stack/material/silver/ten, +/obj/item/stack/material/silver/ten, +/obj/item/stack/material/silver/ten, +/obj/item/stack/material/silver/ten, +/obj/item/stack/material/silver/ten, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"vbx" = ( +/obj/machinery/status_display, +/turf/simulated/wall/prepainted, +/area/centcom/living) +"vci" = ( +/obj/floor_decal/borderfloorwhite/corner{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"vga" = ( +/obj/machinery/door/airlock/centcom{ + name = "Bridge"; + req_access = newlist() + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/control) +"viM" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8 + }, +/obj/floor_decal/techfloor, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"viY" = ( +/turf/simulated/floor/tiled/white, +/area/shuttle/transport1/centcom) +"vjm" = ( +/obj/floor_decal/floordetail/edgedrain, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/specops) +"vjw" = ( +/obj/floor_decal/iccglogo/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"vlh" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/recharger/wallcharger{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/shuttle/transport1/centcom) +"vlM" = ( +/obj/structure/closet/kitchen, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"vlZ" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/wood/mahogany/twentyfive, +/obj/item/stack/material/wood/mahogany/twentyfive, +/obj/item/stack/material/wood/mahogany/twentyfive, +/obj/item/stack/material/wood/mahogany/twentyfive, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"vmU" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Cargo"; + req_access = newlist() + }, +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "CentComCargoEntrance"; + name = "Cargo" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/holding) +"voi" = ( +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"vqg" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/purple/border{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom) +"vra" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/red, +/obj/floor_decal/borderfloorblack, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"vsu" = ( +/obj/structure/table/steel_reinforced, +/obj/item/screwdriver, +/obj/item/crowbar, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"vtM" = ( +/obj/machinery/conveyor{ + dir = 6; + id = "cc_sort" + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"vuW" = ( +/obj/structure/sign/double/iccgflag/left{ + dir = 1; + pixel_y = -32 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"vxa" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/obj/structure/sign/warning/smoking{ + pixel_x = 0; + pixel_y = -26 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"vyh" = ( +/obj/machinery/conveyor{ + id = "cc_sort"; + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"vyH" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"vBf" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/beige/border, +/obj/floor_decal/borderfloorwhite/corner2, +/obj/floor_decal/corner/beige/bordercorner2, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"vBh" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/bed/chair/office/comfy/blue{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"vBi" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Medbay" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"vCi" = ( +/obj/structure/bed/chair/comfy/blue, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"vCr" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/red/border{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"vCD" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"vDk" = ( +/obj/machinery/button/blast_door{ + id_tag = "Thundernewblue"; + pixel_x = 32 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"vDZ" = ( +/obj/floor_decal/corner/paleblue/three_quarters{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/testing) +"vEj" = ( +/obj/structure/coatrack, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"vEG" = ( +/obj/random/trash, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"vEN" = ( +/turf/unsimulated/beach/sand{ + dir = 4; + icon_state = "beachcorner" + }, +/area/centcom/living) +"vFI" = ( +/obj/structure/table/woodentable/walnut, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"vGh" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/table/steel_reinforced, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"vHn" = ( +/obj/machinery/organ_printer/flesh/mapped, +/obj/floor_decal/floordetail/edgedrain{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"vHr" = ( +/obj/machinery/door/airlock/civilian{ + dir = 8 + }, +/turf/unsimulated/floor/plating, +/area/centcom/holding) +"vHQ" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/purple/bordercorner{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom) +"vIV" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"vJl" = ( +/obj/decal/cleanable/filth, +/obj/machinery/conveyor_switch/oneway{ + id = "cc_sort" + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"vKh" = ( +/obj/machinery/embedded_controller/radio/simple_docking_controller{ + frequency = 1380; + id_tag = "centcom_shuttle_bay"; + name = "shuttle bay controller"; + pixel_y = 25; + tag_door = "centcom_shuttle_bay_door" + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"vLf" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/obj/structure/table/reinforced, +/obj/item/bodybag/rescue/loaded, +/obj/item/bodybag/rescue/loaded, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"vNh" = ( +/obj/structure/closet/fridge, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"vOS" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/paleblue/border, +/obj/structure/table/reinforced, +/obj/item/reagent_containers/food/snacks/sliceable/applecake, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"vWA" = ( +/obj/floor_decal/beach, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"vYo" = ( +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "dark" + }, +/area/centcom) +"vYJ" = ( +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"waM" = ( +/obj/structure/flora/pottedplant/drooping, +/obj/floor_decal/corner/black/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/control) +"wce" = ( +/turf/unsimulated/beach/sand{ + icon_state = "desert_dug" + }, +/area/centcom/living) +"wcP" = ( +/obj/item/paper_bin, +/obj/structure/table/reinforced, +/obj/item/pen, +/obj/machinery/door/window/southleft{ + dir = 1; + req_access = newlist() + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "CC_Checkpoint"; + name = "Checkpoint" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"weL" = ( +/obj/landmark{ + name = "tdome1" + }, +/obj/machinery/button/blast_door{ + id_tag = "Thundernewred"; + pixel_x = -32 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/tdome1) +"whK" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/machinery/vending/coffee, +/turf/unsimulated/floor{ + icon_state = "lino"; + name = "linoleum" + }, +/area/centcom/holding) +"wiC" = ( +/obj/decal/cleanable/filth, +/obj/random/trash, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/conveyor{ + id = "cc_sort"; + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"wlw" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8; + name = "Medbay" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"wlC" = ( +/obj/structure/railing/mapped, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"wlR" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"wsj" = ( +/obj/machinery/door/airlock/centcom, +/turf/simulated/floor, +/area/tdome/testing/engineering) +"wug" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"wul" = ( +/obj/machinery/door/airlock/centcom, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"wvt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"wwa" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/obj/structure/lattice, +/turf/space, +/area/centcom/holding) +"wwK" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"wwR" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "wood" + }, +/area/centcom) +"wyL" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "merchant north bump"; + pixel_y = 24; + req_access = list("ACCESS_MERCHANT") + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor, +/area/tdome/testing/engineering/unpowered) +"wzS" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/closet/secure_closet{ + name = "long term chamber locker"; + req_access = list("ACCESS_SECURITY") + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/holding) +"wCN" = ( +/obj/floor_decal/carpet{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"wDx" = ( +/obj/machinery/door/window/southright{ + name = "Research and Development Desk"; + req_access = newlist() + }, +/obj/machinery/door/window/southright{ + dir = 1; + name = "Research and Development Desk"; + req_access = newlist() + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"wDD" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/borderfloorwhite/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 10 + }, +/obj/machinery/vending/coffee{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"wDZ" = ( +/obj/floor_decal/carpet{ + dir = 4 + }, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"wFv" = ( +/obj/structure/bed/chair/comfy/black, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"wFR" = ( +/obj/floor_decal/borderfloorwhite, +/obj/floor_decal/corner/purple/border, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"wFX" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/floor_decal/industrial/outline/grey, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"wGp" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "red"; + name = "carpet" + }, +/area/centcom/living) +"wHG" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, +/turf/simulated/floor/plating, +/area/shuttle/transport1/centcom) +"wIs" = ( +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"wIL" = ( +/obj/structure/hygiene/toilet, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/centcom/holding) +"wIX" = ( +/turf/unsimulated/floor/reinforced, +/area/space) +"wKa" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/structure/flora/pottedplant/minitree, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"wKi" = ( +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "Thundernewblue"; + name = "Security Doors" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome/tdome2) +"wKv" = ( +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/obj/floor_decal/stairs{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"wLj" = ( +/obj/machinery/button/windowtint{ + id = "cc_surgery"; + pixel_x = -25; + pixel_y = 6; + dir = 4 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 8 + }, +/obj/machinery/button/holosign{ + id_tag = "cc_surgery"; + pixel_x = -24; + pixel_y = -3 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"wMc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/glass/science{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"wMZ" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 8; + icon_state = "wooden_chair_wings" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"wNZ" = ( +/obj/machinery/door/blast/regular{ + id_tag = "CentComPort"; + name = "Security Doors" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"wOC" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"wOL" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"wPU" = ( +/obj/structure/lattice, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/space, +/area/space) +"wQh" = ( +/turf/unsimulated/floor{ + icon_state = "bcircuit" + }, +/area/tdome/testing) +"wQv" = ( +/obj/machinery/alarm{ + pixel_y = 24 + }, +/obj/floor_decal/corner/blue/three_quarters{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"wRp" = ( +/obj/structure/bed/padded, +/obj/structure/sign/double/iccgflag/right{ + pixel_y = 32 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/centcom/iccgn) +"wSb" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/vending/cola{ + name = "hacked Robust Softdrinks"; + prices = list() + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"wTo" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"wTp" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/landmark{ + name = "Commando" + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"wUH" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/snacks/beetsoup, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "green"; + name = "carpet" + }, +/area/centcom/living) +"wWl" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"wWI" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/holding) +"wWL" = ( +/obj/machinery/door/blast/regular{ + id_tag = "crescent_checkpoint_access"; + name = "Crescent Checkpoint" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"wWS" = ( +/obj/machinery/door/airlock/centcom{ + name = "Special Operations Command"; + req_access = newlist() + }, +/obj/machinery/door/blast/regular{ + id_tag = "SPECOPSOFFICER"; + name = "Spec Ops Officer Office" + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/creed) +"wWW" = ( +/obj/floor_decal/carpet{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/black, +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ + dir = 10 + }, +/turf/simulated/floor/carpet/red, +/area/centcom) +"wXQ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"wYJ" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/railing/mapped, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"wYN" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"wZd" = ( +/obj/floor_decal/corner/black/diagonal{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"xar" = ( +/obj/machinery/biogenerator, +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"xcg" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/holding) +"xcP" = ( +/obj/structure/flora/ausbushes/pointybush, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"xcX" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"xdQ" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"xfF" = ( +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"xfH" = ( +/obj/floor_decal/iccglogo/bottom_center, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) +"xjs" = ( +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "supply_shuttle"; + name = "Supply Drone Shutters" + }, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "supply_shuttle"; + name = "Supply Drone Shutter Control"; + pixel_y = -20; + req_access = list("ACCESS_CARGO") + }, +/turf/simulated/floor/tiled/techmaint, +/area/supply/dock) +"xkm" = ( +/obj/decal/cleanable/blood/splatter, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/holding) +"xkH" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 1 + }, +/obj/structure/shuttle/engine/heater{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/plating, +/area/supply/dock) +"xnR" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/phoron, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"xoz" = ( +/obj/machinery/door/airlock/centcom{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"xrt" = ( +/obj/floor_decal/stairs{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/iccgn) +"xsp" = ( +/obj/floor_decal/corner/black/mono, +/obj/structure/sign/poster{ + pixel_y = 30 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/control) +"xuz" = ( +/obj/floor_decal/carpet/purple, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"xuT" = ( +/obj/forcefield{ + desc = "You can't get in. Heh."; + invisibility = 101; + name = "Blocker" + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/unsimulated/floor/reinforced, +/area/space) +"xys" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/machinery/door/blast/regular{ + id_tag = "CentComPort"; + name = "Security Doors" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom) +"xAW" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 9 + }, +/obj/floor_decal/corner/purple/border{ + dir = 9 + }, +/obj/structure/table/rack, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/plastic/fifty, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"xFw" = ( +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "supply_shuttle"; + name = "Supply Drone Shutters" + }, +/obj/machinery/button/blast_door{ + id_tag = "supply_shuttle"; + name = "Supply Drone Shutter Control"; + pixel_y = 26; + req_access = list("ACCESS_CARGO") + }, +/turf/simulated/floor/tiled/techmaint, +/area/supply/dock) +"xGW" = ( +/obj/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/floor_decal/corner/purple/border{ + dir = 6 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom) +"xJd" = ( +/obj/wallframe_spawn/reinforced, +/turf/unsimulated/floor/plating, +/area/centcom/holding) +"xLQ" = ( +/obj/floor_decal/borderfloor, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "steel" + }, +/area/centcom/living) +"xMp" = ( +/obj/machinery/status_display, +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/specops) +"xOo" = ( +/obj/floor_decal/techfloor, +/obj/machinery/conveyor{ + dir = 8; + id = "cc_sort" + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"xPh" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/centcom/scgf) +"xQu" = ( +/obj/floor_decal/spline/fancy/wood, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/holding) +"xRi" = ( +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "monotile_light" + }, +/area/centcom/living) +"xRY" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"xVf" = ( +/obj/paint/brown, +/turf/simulated/wall/r_titanium, +/area/supply/dock) +"xWN" = ( +/obj/structure/closet/crate/freezer/rations, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/shuttle/transport1/centcom) +"xXK" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/drinks/bottle/jagermeister, +/obj/floor_decal/carpet/purple{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "purple"; + name = "carpet" + }, +/area/centcom/living) +"xYn" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/specops) +"yaC" = ( +/obj/structure/table/glass, +/obj/item/storage/box/syringes, +/obj/item/reagent_containers/dropper, +/obj/structure/sign/warning/nosmoking_1{ + dir = 1; + pixel_y = -32 + }, +/obj/floor_decal/corner/beige{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon_state = "white" + }, +/area/tdome/testing) +"yaF" = ( +/obj/decal/cleanable/filth, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"ybr" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/unsimulated/floor/grass{ + icon = 'icons/turf/flooring/grass.dmi' + }, +/area/centcom) +"ybt" = ( +/obj/floor_decal/corner/black/mono, +/obj/structure/disposalpipe/segment, +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/control) +"yco" = ( +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/obj/machinery/camera/network/thunder{ + c_tag = "Thunderdome Blue Team"; + invisibility = 101 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/tdome) +"ycJ" = ( +/obj/decal/cleanable/filth, +/turf/unsimulated/floor/techfloor, +/area/centcom/control) +"ydQ" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/structure/table/woodentable_reinforced/walnut, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/carpet.dmi'; + icon_state = "brown"; + name = "carpet" + }, +/area/centcom/living) +"yec" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/decal/cleanable/filth, +/obj/machinery/portable_atmospherics/canister/hydrogen, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"yel" = ( +/obj/machinery/computer/modular/preset/dock, +/obj/floor_decal/corner/blue/mono, +/turf/unsimulated/floor/techfloor{ + icon_state = "monotiledark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"yfV" = ( +/obj/floor_decal/corner/blue/three_quarters{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "dark"; + icon = 'icons/turf/flooring/tiles.dmi' + }, +/area/centcom/scgf) +"yga" = ( +/obj/structure/closet, +/obj/item/clothing/under/iccgn/utility, +/obj/item/clothing/under/iccgn/service_command, +/obj/item/clothing/under/iccgn/service, +/obj/item/clothing/under/iccgn/pt, +/obj/item/clothing/suit/iccgn/utility, +/obj/item/clothing/suit/iccgn/service_officer, +/obj/item/clothing/suit/iccgn/service_enlisted, +/obj/item/clothing/suit/iccgn/service_command, +/obj/item/clothing/suit/iccgn/dress_officer, +/obj/item/clothing/suit/iccgn/dress_enlisted, +/obj/item/clothing/suit/iccgn/dress_command, +/obj/item/clothing/shoes/iccgn/utility, +/obj/item/clothing/shoes/iccgn/service, +/obj/item/clothing/head/iccgn/service_command, +/obj/item/clothing/head/iccgn/service, +/obj/item/clothing/head/iccgn/beret, +/obj/item/clothing/gloves/iccgn/duty, +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/centcom/iccgn) +"ygb" = ( +/obj/machinery/vending/cola, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + icon = 'icons/turf/flooring/wood.dmi'; + color = "#78523b" + }, +/area/centcom/living) +"ygq" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/uranium/ten, +/obj/item/stack/material/uranium/ten, +/obj/item/stack/material/uranium/ten, +/obj/item/stack/material/uranium/ten, +/obj/item/stack/material/uranium/ten, +/obj/item/stack/material/uranium/ten, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"yia" = ( +/obj/structure/bed/chair/office/comfy/blue{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon = 'icons/turf/flooring/tiles.dmi'; + icon_state = "white" + }, +/area/centcom/living) +"yiF" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/phoron, +/turf/unsimulated/floor/techfloor, +/area/centcom/holding) +"ylw" = ( +/obj/structure/closet/fridge, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/white/diagonal{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "steel" + }, +/area/centcom/living) +"ymg" = ( +/obj/floor_decal/iccglogo/center_right, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/centcom/iccgn) + +(1,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awu +awu +awu +awu +awu +awu +awu +aab +aab +aab +azr +azK +azK +azK +ayl +ayl +ayl +ayl +ayl +ayl +ayU +ayU +ayU +ayU +ayU +ayU +ayU +ayU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aQw +aQw +aQw +aQw +aQw +aQw +aQw +aQw +aQw +aQw +asI +aQw +aQw +aQw +aQw +aQw +aQw +aQw +aQw +aQw +aQw +asI +aQw +aQw +aQw +aQw +aQw +aQw +aQw +aQw +aQw +aQw +asI +"} +(2,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awF +axb +axm +axB +axb +aye +awu +aab +aab +aab +azs +azJ +azI +azH +ayl +azu +azu +azu +azu +azu +wKi +azp +azp +azp +azp +azp +azm +ayU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +aQx +aQR +aQR +aRG +aRG +aRG +aRG +aTB +aTB +aVp +bcF +aWL +aWL +aWL +aWL +aWL +aWL +aWL +aWL +aWL +aWL +aWd +bcS +bcS +bcS +bcS +bcS +bcS +bcS +bcS +bcS +bcS +aWe +"} +(3,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awF +axb +axb +axb +axb +ayc +awu +aab +aab +aab +azs +aAd +azu +azu +aAc +azu +azu +azu +azu +azu +wKi +azp +azF +azp +azF +azp +azm +ayU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +aQy +aQS +aQS +aRH +aRH +aSt +aSK +aTB +aTB +aVp +bcF +aWM +aXu +aYe +aYe +aYe +aZX +aXu +aXu +aXu +aXu +aWd +bcT +bdE +bcT +beS +bcS +bcS +bgS +bhq +bcT +bcT +aWe +"} +(4,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awG +axb +axn +axp +axb +ayd +awu +aab +aab +aab +azs +txz +azu +azu +aAc +azu +azu +azu +azu +azu +wKi +azp +azp +azp +azp +azp +azm +ayU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +aQy +aQS +aQS +aRH +aRH +aSu +aSL +aTC +aUt +aVq +bcF +aWN +aXv +aYf +aYf +aYf +aZY +aYf +aYf +aYf +bbZ +aWd +bcU +bcU +bcU +avM +bfC +bfC +avM +bcU +bcU +bcU +aWe +"} +(5,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awG +axb +axo +axp +axb +ayf +awu +aab +aab +aab +azs +aAs +aAr +aAq +ayl +azu +azu +azu +azu +azu +wKi +azp +azF +azp +azF +azp +azm +ayU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +aQy +aQS +aQS +aRH +aRH +aSu +aSM +aTD +aUu +aVq +bcF +aWN +aXw +aYg +aYg +aZw +aZZ +baC +aYg +bbD +bca +aWd +bcV +bdF +beo +beU +bcW +bcW +beU +bfF +bdF +bic +aWe +"} +(6,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awF +axb +axq +axq +axb +ayg +awu +aab +aab +aab +ayl +ayl +ayl +ayl +ayl +yco +azL +azL +azL +vDk +wKi +jTb +azp +azp +azp +azp +azm +ayU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +aQy +aQS +aQS +aRH +aRH +aSu +aSN +aTD +aUu +aVq +bcF +aWN +aXw +aYh +aYg +aYg +aZZ +aYg +aYg +aYg +bcb +aWd +bcW +bcW +bcW +bcW +bcW +bcW +bcW +bcW +bcW +bcW +aWe +"} +(7,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awu +aDn +awu +awu +axQ +awu +ayl +ayl +ayl +ayl +ayl +azu +azu +azu +ayl +azM +azM +azM +azM +ayl +ayl +ayl +ayl +ayl +ayl +ayl +ayl +ayl +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +aQy +aQS +aQS +aRH +aRH +aSu +aSO +aTE +aUu +aVq +bcF +aWN +aXw +aYg +aYg +aYg +aZZ +aYg +aYg +aYg +bcb +aWd +bcW +bcX +bcX +bcW +bcW +bcW +bcW +bcW +bcW +bid +aWe +"} +(8,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awI +awM +awM +awM +awM +awM +aym +azu +azu +azu +azu +azu +azu +azu +ayl +azN +aAe +azN +azN +ayl +azu +azu +azu +azu +azu +azu +azu +ayl +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +aQy +aQS +aQS +aRH +aRH +aSu +aSP +aTE +aUu +aVq +bcF +aWN +aXw +aYg +aYg +aYg +aZZ +aYg +bbf +aYh +bcb +aWd +bcW +bcW +bep +bcW +bfD +bgr +bgr +bhr +bcW +bie +aWe +"} +(9,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awJ +awM +awM +awM +awM +awM +ayn +azu +azu +azu +ayl +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayl +azu +azu +azu +ayl +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +aQz +aQT +aQT +aRH +aRH +aSu +aSQ +aTF +aUv +aVq +bcF +aWN +aXx +aYi +aYQ +aYi +baa +aYi +aYi +aYi +bcc +aWd +bcW +bcW +beq +bcW +bfE +bgs +bgs +bhs +bcW +bie +aWe +"} +(10,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awJ +awM +axr +awM +axr +awM +ayn +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayl +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +aQz +aQT +aQT +aRH +aRH +aSv +aSK +aTG +aTG +aVr +bcF +aWO +aXy +aYj +aYj +aYj +bab +aYj +aYj +aYj +aXy +aWd +bcW +bcW +bep +bcW +bfF +bgt +bgt +beo +bcW +bif +aWe +"} +(11,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awJ +awM +axr +axC +axr +awM +ayn +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayl +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +aQA +aQU +aQU +aRI +aRI +aRI +aSR +aTG +aTG +aVr +bcF +aWL +aWL +aWL +aWL +aWL +aWL +aWL +aWL +aWL +aWL +aWd +bcX +bcX +ber +bcW +bcW +bcW +bcW +bcW +bcW +bcW +aWe +"} +(12,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awK +awM +axr +axD +axr +awM +ayn +azu +azu +azu +ayl +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayl +azu +azu +azu +ayl +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aQB +aQB +aQB +aQB +aQB +aQB +aQB +aQB +aQB +aQB +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +"} +(13,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awL +awM +axr +axC +axr +awM +ayn +azu +azu +azu +azu +azu +aza +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWR +aWd +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +aWe +"} +(14,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awM +awM +axr +awM +axr +awM +ayn +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azc +azu +azu +azu +azu +azu +azu +ayn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWQ +aWQ +aXz +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWd +bcY +bcY +bcY +bdH +bcY +bcY +bcY +bcY +bdH +bcY +aWe +"} +(15,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awN +awM +awM +awM +axr +awM +ayn +azu +azu +azu +ayl +azu +azu +azu +azu +azu +azu +iCL +azu +aAk +azu +azu +azu +ayl +azu +azu +azu +ayn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWQ +aWQ +aWQ +aWQ +aWR +aWQ +aWQ +aXz +aWQ +aWQ +aWd +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +aWe +"} +(16,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awM +awM +awM +awM +axr +awM +ayn +azu +azu +azu +azu +azu +azu +azu +azu +azu +azb +aAj +azu +azu +aAM +azu +azu +azu +azu +azu +azu +ayn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWR +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWd +bcY +bdH +bcY +bcY +bcY +bcY +bdH +bcY +bcY +bcY +aWe +"} +(17,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awO +awM +awM +awM +axr +awM +ayn +azu +azu +azu +azu +azu +azu +azj +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayn +aBu +aBu +aBu +aBu +aBu +aBu +aBu +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aXz +aWd +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +aWe +"} +(18,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awI +awO +awM +awM +axr +awM +ayn +azu +azu +azu +ayl +azu +azu +azu +azu +azu +azu +aAk +azu +azu +azu +azu +azu +ayl +azu +azu +azu +ayn +aBw +aBw +aBw +aBv +aBK +aBJ +aBu +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWQ +aWQ +aWQ +aWR +aWQ +aWQ +aXz +aWQ +aWQ +aWQ +aWd +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +aWe +"} +(19,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awP +awO +awM +awM +axr +awM +ayn +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayn +aBw +aBF +aBw +aBw +aBw +aBw +aBu +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWQ +aWQ +aWQ +aWQ +aWR +aWQ +aWQ +aWQ +aWQ +aWQ +aWd +bcY +bcY +bcY +bdH +bcY +bcY +bcY +bcY +bdH +bcY +aWe +"} +(20,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awI +awO +awM +awM +axr +awM +ayn +azu +azu +azu +azu +azu +azu +azu +ayl +azO +azu +azu +azG +ayl +azu +azu +azu +azu +azu +azu +azu +ayn +aBw +aBy +aBy +aBy +aBy +aBy +aBu +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWd +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +aWe +"} +(21,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awO +awM +awM +awM +axr +awM +ayn +azu +azu +azu +ayl +azu +azu +azu +azv +azP +azu +azu +azS +azv +azu +azu +azu +ayl +azu +azu +azu +ayn +aBw +aBw +aBG +aBG +aBG +aBG +aBu +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWQ +aXz +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWd +bcY +bdH +bcY +bcY +bcY +bcY +bdH +bcY +bcY +bcY +aWe +"} +(22,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awM +awM +awM +awM +axr +awM +ayn +azu +azu +azu +azu +azu +azu +azu +azs +azQ +azu +azu +aAt +azs +azu +azu +azu +azu +azu +azu +azu +ayn +aBw +aBw +aBw +aBw +aBw +aBw +aBu +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWQ +aWQ +aWQ +aWQ +aWQ +aWQ +aWR +aWQ +aWQ +aXz +aWd +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +bcY +aWe +"} +(23,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awM +awM +awM +awM +axr +awM +ayn +azu +azu +azu +azu +azu +azu +azu +azs +azR +azu +tIL +azQ +azs +azu +azu +azu +azu +azu +azu +azu +ayn +aBz +aBD +aBw +aBw +aBw +aBx +aBu +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +"} +(24,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awO +awM +awM +awM +axr +awM +ayn +azu +azu +azu +ayl +azu +azu +azu +azw +azS +azu +aAl +azP +azw +azu +aza +azu +ayl +azu +azu +azu +ayn +aBy +aBD +aBw +aBw +aBw +aBw +aBu +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWS +aWT +aYk +aYR +aWU +aWU +aWT +aWS +aYl +aYl +aWd +bcZ +bcZ +bcZ +bcZ +bcZ +bcZ +bcZ +bht +bcZ +bcZ +aWe +"} +(25,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awQ +awO +awM +awM +axr +awM +ayn +azu +azu +azu +azu +azu +aza +azu +ayl +azO +azu +azu +azG +ayl +azu +azu +azu +azu +azu +azu +azu +ayn +aBA +aBD +aBw +slq +aBB +slq +aBu +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWT +aWT +aYk +aWT +aWS +aWT +aWV +aWU +aYk +aYl +aWd +bcZ +bdI +bcZ +bcZ +bcZ +bcZ +bcZ +bcZ +bfG +bcZ +aWe +"} +(26,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awR +awO +awM +awM +axr +awM +ayn +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayn +aBB +aBD +aBw +slq +aBy +slq +aBu +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWU +aXA +aXA +aWS +aWT +aWT +aWU +aWS +aWS +aYl +aWd +bcZ +bcZ +bcZ +beV +bcZ +bcZ +bcZ +bcZ +bcZ +bcZ +aWe +"} +(27,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awI +awO +awM +awM +axr +awM +ayn +azu +azu +azu +ayl +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayl +azu +azu +azu +ayn +aBB +aBD +aBE +slq +aBB +slq +aBu +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWV +aXA +aWT +aYk +aWU +aWU +baD +aYl +aYl +aWT +aWd +bcZ +bcZ +bcZ +bcZ +bfG +bcZ +bcZ +bcZ +beV +bcZ +aWe +"} +(28,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awO +awM +awM +awM +axr +awM +ayn +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +aAj +azu +azj +azu +azu +aAk +azu +azu +azu +azu +ayn +aBu +aBu +aBu +aBu +aBu +aBu +aBu +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWU +aWT +aWU +aWV +aYl +aYl +aYl +aWU +aWS +aWU +aWd +bcZ +bcZ +bcZ +bes +bcZ +bcZ +bdI +bcZ +bcZ +bht +aWe +"} +(29,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awM +awM +awM +awM +axr +awM +ayn +azu +azu +azu +azu +azu +azb +aza +azu +azT +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWT +aWS +aWS +aYl +aWU +aWS +aWS +aWU +aWT +aWU +aWd +bcZ +bcZ +bcZ +bcZ +bcZ +bcZ +bcZ +bht +bcZ +bcZ +aWe +"} +(30,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awS +awM +axr +awM +axr +awM +ayn +azu +azu +azu +ayl +azu +azu +azu +azu +azu +azu +hTb +azu +azu +azu +azu +azu +ayl +azu +azu +azu +ayn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWS +aWT +aYl +aYl +aWU +aWV +baE +aWT +aWU +aWS +aWd +bcZ +bdI +bcZ +bcZ +bcZ +bcZ +beV +bcZ +bfG +bcZ +aWe +"} +(31,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awS +awM +axr +axC +axr +awM +ayn +azu +azu +azu +azu +azu +azc +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWU +aXB +aYl +aYl +aWT +aWU +aWS +aWU +aWS +aWU +aWd +bcZ +bcZ +bcZ +bcZ +bcZ +bcZ +bcZ +bcZ +bcZ +bcZ +aWe +"} +(32,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awK +awM +axr +axD +axr +awM +ayn +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWV +aWU +aWS +aWT +aYl +aYl +aWU +aWT +aYk +aYk +aWd +bcZ +bcZ +bes +bcZ +bfG +bcZ +bcZ +bcZ +beV +bcZ +aWe +"} +(33,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awL +awM +axr +axC +axr +awM +ayn +azu +azu +azu +ayl +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayl +azu +azu +azu +ayl +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWU +aWT +aWU +aWV +aWU +bac +aWU +aYk +aYk +aYk +aWd +bcZ +bcZ +bcZ +bcZ +bcZ +bcZ +bdI +bcZ +bcZ +bht +aWe +"} +(34,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awR +awM +axr +awM +axr +awM +ayn +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayl +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +"} +(35,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awQ +awM +awM +awM +awM +awM +ayn +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayl +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bbH +bbH +aSH +aSX +aSX +aSX +aSX +aSX +tmt +aab +asI +aZy +lcr +lcr +lcr +lcr +lcr +aYT +rut +aXC +aWW +aWd +beX +beX +beX +beX +beX +beX +beX +bgu +bda +bdb +aWe +"} +(36,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awQ +awM +awM +awM +awM +awM +ayn +azu +azu +azu +ayl +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +azu +ayl +azu +azu +azu +ayl +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bbH +bbH +aSH +aSX +aSX +aSX +aSX +aSX +aSX +aab +asI +aZA +aYS +aYS +aYS +aYS +aYS +aYT +rut +aXC +aWW +aWd +beX +beX +beX +beX +beX +beX +beX +bgu +bda +bda +aWe +"} +(37,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awT +awT +axs +axE +axR +axR +ayo +azu +azu +azu +azu +azu +azu +azu +ayl +azU +azU +azU +azU +ayl +azu +azu +azu +azu +azu +azu +azu +ayl +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bbH +bbH +aSH +aab +aab +aab +aab +aab +aab +aab +asI +aZx +aZx +aZx +aZx +aZx +aZx +aZx +lRl +aXC +aWW +aWd +aTa +bdJ +aSZ +aSZ +aSZ +aSZ +bce +rVo +bda +bda +aWe +"} +(38,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +awu +awu +awu +awu +awu +awu +awu +ayl +ayl +ayl +ayl +ayl +azu +azu +azu +ayl +azV +azV +azV +azV +ayl +ayl +ayl +ayl +ayl +ayl +ayl +ayl +ayl +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bbH +bbH +aSH +aab +aab +aab +aab +aab +aab +aab +asI +aZx +aZx +lKG +bad +bad +bbE +aZx +aXC +aXC +aWW +aWd +aSE +bdK +aSi +aSi +aSi +kGv +beW +bhu +bhQ +bda +aWe +"} +(39,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +ayl +ayl +ayl +ayl +ayl +fBx +azu +azu +azu +gSX +czc +weL +azy +azy +azy +azy +azB +ayV +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bbH +bbH +aSH +aab +aab +aab +aab +aab +aab +aab +asI +aZx +aZx +aZz +bae +bae +bbF +aZx +aXC +aXC +aWW +aWd +aSE +bdL +bgv +bgv +bgv +bgw +beW +bhu +bhR +bda +aWe +"} +(40,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +azs +aAs +aAr +aAq +ayl +azu +azu +azu +azu +azu +czc +azy +azY +azy +azY +azy +azB +ayV +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bbH +bbH +aSH +aab +aab +aab +aab +aab +aab +aab +asI +aZx +aZx +aZz +bae +bae +bbF +aZx +aXC +aXC +aWW +aWd +aSE +bdL +bgv +bgv +bgv +bgw +beW +bhu +bhR +bda +aWe +"} +(41,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +azs +aAd +azu +azu +aAc +azu +azu +azu +azu +azu +czc +azy +azy +azy +azy +azy +azB +ayV +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bbH +bbH +aSH +aab +aab +aab +aab +aab +aab +aab +asI +aZx +aZx +aZz +bae +bae +bbF +aZx +aXC +aXC +aWW +aWd +aSE +bdL +bgv +bgv +bgv +bgw +beW +bhu +bhR +bda +aWe +"} +(42,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +azs +qhY +azu +azu +aAc +azu +azu +azu +azu +azu +czc +azy +azY +azy +azY +azy +azB +ayV +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bbH +bbH +aSH +aab +aab +aab +aab +aab +aab +aab +asI +aZx +aZx +aZz +bae +bae +bbF +aZx +aXC +aXC +aWW +aWd +aSE +bdL +bgv +bgv +bgv +bgw +beW +bhu +bhS +bda +aWe +"} +(43,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +azs +azJ +azI +azH +azs +azu +azu +azu +azu +azu +czc +azy +azy +azy +azy +azy +azB +ayV +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bbH +bbH +aSH +aSX +aSX +aSX +aSX +aSX +aSX +aab +asI +aZx +aZx +nzP +baf +baf +bbG +aZx +aXC +aXC +aWW +aWd +aSE +cGp +aQf +aQf +aQf +che +beW +bhu +rwD +bda +aWe +"} +(44,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +azt +azK +azK +azK +ayl +ayl +ayl +ayl +ayl +ayl +ayV +ayV +ayV +ayV +ayV +ayV +ayV +ayV +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +bbH +bbH +aab +aab +aab +aab +aab +aab +aab +aab +asI +bcd +aZx +aZx +aZx +aZx +aZx +aZx +aZB +aXC +aWW +aWd +gZH +aSG +aSG +aSG +aSG +aSG +kFk +cdB +bda +bdb +aWe +"} +(45,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +"} +(46,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWX +aWX +aWX +aWX +aWX +aWX +aWX +aWX +aWX +aWX +bcF +bdc +bdc +bdc +bdc +bdc +bdc +bdc +bdc +bdc +bdc +aWe +"} +(47,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWY +aXD +aYm +aYm +aYm +aYm +aYm +bbg +aYm +aWY +bcF +bdd +bdd +bdc +bdd +bdd +bdd +bdd +bdc +bdd +bdd +aWe +"} +(48,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWZ +aXE +aXE +aYU +aZC +bag +baF +bbh +baF +bcf +bcF +bde +bde +beu +bde +bde +bde +bde +bhv +bde +bde +aWe +"} +(49,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWZ +aXE +aWZ +aYV +aZD +bah +baG +bai +baG +bcg +bcF +bdf +bdM +bdM +bdM +bfL +bgx +bgT +bgT +bgT +big +aWe +"} +(50,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWZ +aXE +aYn +aYW +aZD +bai +bai +bai +baG +bcg +bcF +bdg +bdN +bdN +bdN +bfM +bgy +bdN +bdN +bdN +bhw +aWe +"} +(51,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWZ +aXE +aWZ +aYX +aZD +bah +baG +bai +baG +bcg +bcF +bdf +bdM +bdg +bdN +bfM +bgy +bdN +bhw +bgT +big +aWe +"} +(52,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWZ +aXE +aXE +aYY +aZE +baj +baH +bbi +baH +bch +bcF +bdh +bdN +bdg +bdN +bfN +bgy +bdN +bhw +bdN +bih +aWe +"} +(53,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWZ +aXE +aYo +aYZ +aYZ +aYZ +aYZ +aYZ +aYZ +aYZ +bcF +bdi +bdO +bdg +bdN +bfM +bgy +bdN +bhw +bgU +bii +aWe +"} +(54,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +gUN +gUN +gUN +gUN +gUN +gUN +gUN +gUN +gUN +gUN +gUN +gUN +gUN +gUN +gUN +gUN +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWZ +aXE +aYp +aZa +aZF +aZF +aZF +aZF +bbI +aWZ +bcF +bdg +bdN +bdN +bdN +bfM +bgy +bdN +bdN +bdN +bhw +aWe +"} +(55,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +gUN +aag +aag +aag +aag +aag +aag +bvf +bvf +aag +aag +aag +aag +aag +aag +aag +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWZ +aXE +aYq +aZb +aZG +aZG +aZG +aZG +bbJ +aWZ +bcF +bdi +bdO +bdO +bdO +bfO +bgz +bgU +bgU +bgU +bii +aWe +"} +(56,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +gUN +aag +cws +kLy +gKj +aag +tmd +hNt +hNt +uCh +aag +xAW +dHt +pzY +iRC +aag +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +"} +(57,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +gUN +aag +bNp +bNp +cSB +ooK +arD +sNR +sNR +tWx +jDt +lbM +hnh +hnh +wFR +aag +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +bcF +bex +bex +bhz +azd +bfa +bdj +bdj +bdj +bdj +bdj +aWe +"} +(58,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +upn +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +gpQ +aag +fYh +lIj +gKj +aag +pQs +vHQ +sNR +arD +rDg +hnh +kJx +hnh +dfj +aag +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aXa +aXF +aXa +aXa +aXa +aXa +aXa +aXa +aXF +aXa +bcF +bex +bex +bex +beZ +bdj +bdj +bdj +bdj +bdj +bdj +aWe +"} +(59,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +anB +anB +anB +anB +anB +anB +anB +anB +anB +anB +anB +anB +anB +anB +anB +anB +anB +anB +anB +anB +anB +aag +aag +aag +aag +aag +aag +jWw +sNR +dgV +jDt +ulU +iNl +lzd +fcS +aag +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +bcF +bew +bex +bex +beZ +bdj +bdj +bdP +bev +beY +bdj +aWe +"} +(60,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aag +rbD +nAl +tbT +nKw +aag +jWw +sNR +tWx +aag +aag +aag +aag +aag +aag +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aXa +aXa +aXa +aXF +aXa +aXa +aXF +aXa +aXa +aXa +bcF +bgV +bex +bhT +beZ +bdj +bdj +bdQ +bew +beZ +bdj +aWe +"} +(61,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aus +aRV +aan +aan +aan +acx +agk +aeE +acx +aan +acx +agk +aeE +acx +aan +aan +aan +aRV +aRV +aRV +aag +rsz +kJx +fVk +dfj +jDt +jWw +uYy +nUw +tik +oWh +nAl +nAl +lgz +aag +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +bcF +bgW +bex +bex +beZ +bdj +bdj +bdQ +bex +beZ +bdj +aWe +"} +(62,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aan +aan +aas +aas +aas +aas +aas +aas +aas +aas +aas +aas +aas +aan +aan +aus +aRV +aRV +aag +dLU +hnh +soj +dfj +jDt +jWw +qxA +dgV +jDt +peE +hnh +hnh +jqK +jDt +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +bcF +bex +bex +bgX +beZ +bdj +bdj +bdQ +bey +beZ +bdj +aWe +"} +(63,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aan +aas +aas +aas +acL +aeF +agg +aas +aiZ +ajJ +anX +aas +aas +aas +aan +aRV +aRV +aus +aag +gtg +hnh +kJx +ftf +aag +oyQ +dDy +hlg +wDx +hDS +hnh +wwK +jLn +jDt +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aDS +aDS +aFR +aFV +aGi +aGj +aGl +aGq +aGA +aGB +aFJ +aGE +aGI +aGP +aGQ +asI +aXa +aXa +aXa +aXF +aXa +aXa +aXF +aXa +aXa +aXa +bcF +bgY +bex +bhU +beZ +bdj +bdj +bdR +bez +bfa +bdj +aWe +"} +(64,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aas +aas +agO +agO +agO +agO +agO +aas +ais +ajJ +ajJ +aoT +aas +aas +aas +aRV +aRV +aRV +aag +mQl +hnh +hnh +tpg +tik +nUw +jIH +hlg +jDt +qgJ +hnh +hnh +qdW +jDt +gUN +aab +aab +aab +uuu +wPU +uuu +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aDS +aFK +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aGU +asI +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +bcF +bex +bey +bex +beZ +bdj +bdj +bdj +bdj +bdj +bdj +aWe +"} +(65,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aas +abx +agO +acy +ago +agO +agh +aas +aja +ajJ +ajJ +aoU +asF +amV +aas +aRV +aRV +aRV +aag +tGl +hnh +kJx +kMF +aag +jJm +dDy +hlg +aag +sUU +wwK +ucS +fIV +jDt +gUN +gUN +gUN +gUN +enU +pfe +enU +gUN +gUN +gUN +gUN +gUN +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aEi +aFJ +aoB +aoB +aoB +aoB +aoB +anQ +aoB +aoB +aoB +aoB +aoB +aFJ +aEj +asI +aXa +aXF +aXa +aXa +aXa +aXa +aXa +aXa +aXF +aXa +bcF +bex +bhx +bhz +beZ +bdj +bdj +bdj +bdj +bdj +bdj +aWe +"} +(66,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aas +aby +agO +acy +ago +agO +agh +aas +ajb +ajJ +ajJ +aoU +akG +atc +aas +aRV +aRV +aRV +aag +qqb +kWX +rnr +xGW +aag +ilw +jIH +cVR +aag +oES +rnr +rnr +pty +ape +ape +pPZ +pPZ +pPZ +pPZ +kIv +pPZ +pPZ +pPZ +pPZ +ape +ape +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aEj +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aGV +asI +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +aXa +bcF +bex +bex +bex +aze +bev +bev +beY +bdj +bdj +bdj +aWe +"} +(67,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aus +aas +abz +abK +acz +agp +agO +agu +aas +ajj +ajJ +ajJ +aoU +ajc +ate +aas +aRV +aRV +aRV +aag +kiC +kiC +oVL +kiC +aag +aag +wMc +aag +aag +aag +aag +aag +aag +ape +auh +hPC +hPC +hPC +hPC +qhG +hPC +hPC +hPC +hPC +siv +ape +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aEk +aFJ +aoB +aKq +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aMa +aoB +aFJ +aEC +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +"} +(68,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aas +aas +aas +aas +aas +ahQ +aas +aas +aas +ajg +aas +aas +aas +aas +aas +aRV +aus +aus +aag +aVP +sZC +fTc +fTc +fTc +fTc +wvt +fTc +fTc +fTc +sZC +fTc +rNb +ape +vNh +uBf +oZy +uBf +bUz +kyV +uBf +uBf +uBf +oZy +pqw +ape +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aEC +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aED +aQl +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +bcF +bdk +bdk +bdk +bdk +bdk +bdk +bdk +bdk +bdk +bdk +aWe +"} +(69,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aas +abE +abL +acB +ajh +ajh +ajh +ahO +ajh +ajh +ajh +ahO +akH +ath +alZ +auo +aRV +aRV +anY +tEz +tEz +tEz +tEz +fOj +tEz +qZl +nDt +avz +avz +avz +jin +iac +ape +tvT +uBf +uBf +oZy +uBf +tzL +uBf +uBf +uBf +uBf +pqw +ape +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aED +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aEk +aQl +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +bcF +bdl +bdl +bdk +bdl +bdl +bdl +bdl +bdk +bdl +bdl +aWe +"} +(70,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aas +abF +ajh +ajh +ajh +ajh +ajh +ajh +ajh +ajh +ajh +ajh +akH +atj +aua +auo +aRV +aRV +anY +tEz +tEz +fOj +tEz +tEz +tEz +fOj +tEz +tEz +fOj +tEz +wvt +iac +ape +atd +dON +ueR +hNM +xar +qRg +cJk +rfx +rfx +rfx +pqw +ape +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aEk +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aEE +aQl +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +bcF +bdm +bdm +beA +bdm +bdm +bdm +bdm +bhA +bdm +bdm +aWe +"} +(71,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aas +afQ +ajh +ajh +ajh +aji +aas +ahQ +aas +aji +aas +aoV +aas +aas +aas +aRV +aRV +avj +aag +buu +tEz +tEz +nyY +nyY +nyY +nyY +nyY +nyY +nyY +qNa +wvt +iac +ape +tpU +oZy +uBf +uBf +uBf +tzL +uBf +oZy +uBf +uBf +pqw +ape +gUN +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aEE +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aEF +aQl +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +bcF +bdn +bdS +bdS +bdS +bfP +bgC +bgZ +bgZ +bgZ +bij +aWe +"} +(72,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aas +abG +ajh +ajh +ajh +aas +ahO +ahR +ahO +aas +ahg +ahg +asH +atk +aas +aRV +aRV +aRV +aag +aag +lrA +viM +aag +aag +aag +aag +aag +aag +aag +rjQ +lWO +iac +ape +qbc +kOJ +qGa +kOJ +kOJ +nYN +xdQ +fUQ +rfn +rfn +jre +ape +sFC +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aEF +aFJ +aoB +aKq +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aMa +aoB +aFJ +aEG +aQl +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +bcF +bdo +bdT +bdT +bdT +bfQ +bgD +bdT +bdT +bdT +bik +aWe +"} +(73,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aas +afR +abM +acC +ajh +aas +agw +ahK +ajk +aas +ahg +ahg +asK +atn +aas +aRV +aus +aRV +aag +qBc +eLp +njt +sxU +aag +dKc +fDk +lsi +uro +aag +pID +voi +iac +ape +ape +axT +vHr +axT +ape +ape +ctI +axT +axT +axT +ape +ape +sFC +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aEG +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aEN +aQl +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +bcF +bdo +bdT +bdT +bdT +bfQ +bgD +bdT +bdT +bdT +bik +aWe +"} +(74,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aus +aRV +aas +aas +aas +aas +acS +aas +agE +agE +agE +aas +aas +akj +aas +aas +aas +aRV +aRV +aRV +aag +cAN +aSI +aSI +oKl +aag +vqg +aSI +uUg +mmS +aag +kVe +wvt +iac +ape +kad +sVV +uBf +sVV +hUZ +ape +hya +mRg +mRg +mRg +jeI +ape +sFC +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aEN +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aEO +aQl +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +bcF +bdo +bdT +bdT +bdT +bfQ +bgD +bdT +bdT +bdT +bik +aWe +"} +(75,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aan +aas +agc +agc +ajh +aas +aan +aan +aan +aas +aoc +apu +asY +aas +aas +aRV +aRV +aRV +aag +cAN +aSI +aSI +bne +aag +vqg +tTD +aSI +aSI +eWD +tEz +pKw +iac +ape +atd +uBf +bUz +uBf +oZy +ati +atw +tSG +tSG +tSG +cEM +ape +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +sFC +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aEO +aFJ +anQ +aKp +aKp +aKp +aKp +aLw +aKp +aKp +aKp +aKp +anQ +aFJ +aEP +aQl +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +bcF +bdo +bdT +bdT +bdT +bfQ +bgD +bdT +bdT +bdT +bik +aWe +"} +(76,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aan +aas +abN +acD +ahU +aas +aan +aan +aan +aas +aas +akj +aas +aas +aan +aRV +aRV +aRV +aag +aKP +uUg +aSI +ocW +aag +vqg +aSI +aSI +qWc +aag +lol +hNF +iac +ape +rEI +xdQ +oZy +xdQ +svl +lbW +atw +idf +aud +aud +sKx +xcg +ape +ape +ape +ape +ape +ape +ape +ape +ape +ape +axT +axT +ape +axT +axT +ape +axT +axT +ape +axT +ape +ape +sFC +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aEP +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aEQ +aQl +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +bcF +bdo +bdT +bdT +bdT +bfQ +bgD +bdT +bdT +bdT +bik +aWe +"} +(77,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aus +aan +aas +abO +acE +ajh +aas +aan +aan +aan +aas +aox +apx +akI +aas +aan +aRV +aRV +aRV +aag +jDp +beG +ePQ +kvI +aag +ncF +qZB +lvr +fij +aag +rjQ +wvt +iac +ape +ape +ape +lss +ape +ape +ape +atw +aud +aud +idf +cEM +mLB +auP +wzS +wzS +jmv +ape +ugw +avy +hei +ape +dUE +ayR +ayR +ayR +ayR +ayR +ayR +ayR +ayR +ayR +ayR +xcX +ape +sFC +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aEQ +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aFb +aQl +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +aXb +bcF +bdp +bdU +bdU +bdU +bfR +bgE +bha +bha +bha +bil +aWe +"} +(78,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aan +aas +aas +aas +aas +aas +aan +aan +aan +aas +aas +aas +aas +aas +aan +aus +aRV +aRV +aag +aag +aag +aag +aag +aag +aag +cRm +cRm +aag +sVJ +rjQ +pKw +iac +ape +dSq +sVV +uBf +sVV +bND +ape +atl +lcM +lcM +gRP +cEM +mLB +jVy +aPo +aPo +xQu +pxq +awj +asc +nVE +ape +hqe +axV +axV +cUi +axV +ayi +axV +axV +cUi +jwc +ayS +gJm +axT +sFC +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aFb +aFJ +aoB +aKq +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aMa +aoB +aFJ +aFc +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +"} +(79,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aRV +aus +aRV +aag +bmy +mNc +twZ +twZ +twZ +twZ +twZ +twZ +miv +aag +thW +wvt +iac +ape +atd +uBf +uBf +oZy +pqw +ape +eDn +ape +ape +atw +cEM +mLB +pVG +dSc +biM +onT +ape +wYN +awj +nVE +ape +hKd +kMw +hFp +vlZ +axW +hKd +lNJ +gIh +hOO +gab +ayS +aQC +axT +sFC +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aFc +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aFd +aQl +aXc +aXc +aXc +aXc +aXc +aXc +aXc +aXc +aXc +aXc +bcF +bdr +bdr +bdr +bdr +bdr +bdr +bdr +bdr +bdr +bdq +aWe +"} +(80,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +upn +aag +aag +aag +aag +aag +aag +aag +aag +aag +aag +aag +aag +aag +akE +akE +aag +aag +aag +aag +aag +aag +aag +aag +uEx +aSI +uUg +aSI +aSI +aSI +aSI +aSI +aSI +oaM +tEz +wvt +iac +ape +tiZ +oZy +asP +uBf +vra +fdF +atE +atE +ape +qla +cEM +mLB +ape +ape +ape +ape +ape +avK +awj +nVE +ape +hKd +kFF +fCn +tTl +axX +hKd +kQW +gIh +oDG +gab +ayS +gJm +ape +sFC +aab +aab +aab +uuu +dhn +uuu +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aFd +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aGW +aQl +aXd +aXd +aXc +aXd +aXd +aXd +aXd +aXc +aXd +aXd +bcF +bdr +bdr +bdr +bds +bds +bds +bds +bdr +bdr +bdq +aWe +"} +(81,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aam +ame +ame +ame +ame +ame +ame +ame +ame +ame +ame +aiu +ane +ane +aoP +ame +ame +ame +ame +ame +avp +avF +gzh +aSI +aSI +aSI +apY +aSI +uUg +apY +qWc +aag +rjQ +wvt +iac +ape +atd +uBf +uBf +uBf +pqw +ape +atx +atE +ape +fbO +aud +avr +tWs +avy +avy +avy +avy +cSZ +awj +nVE +ape +hUs +ayR +ayR +ayR +ayR +kju +ayR +ayR +ayR +ayS +ayS +aQC +ape +sFC +sFC +sFC +sFC +wwa +gvY +wwa +sFC +sFC +sFC +sFC +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aFn +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aGX +aQl +aXe +aXe +aYr +aXe +aXe +aXe +aXe +bbj +aXe +aXe +bcF +bdr +bdr +bdr +bfb +bfb +bfb +bfb +bdr +bdr +bdr +aWe +"} +(82,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +bjC +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +anH +avF +nli +aoY +aps +aoZ +uya +aqr +mZg +cDF +fRh +aag +jhH +wvt +bIe +ape +lLo +xkm +kbG +xdQ +gNi +ape +wIL +atE +ape +whK +ePe +ape +auQ +avb +avb +nQH +avb +lkV +asc +nVE +ape +gab +axV +axV +axV +axV +ayi +axV +axV +axV +clK +ayS +oWO +ape +nXV +tCR +tCR +tCR +ilP +kqh +emF +ape +ape +ape +sFC +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aFo +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aGY +aQl +aXf +aXG +aXG +aXG +aXG +bak +bak +bak +bak +bci +bcF +bdr +bdr +beB +bfc +bfS +bfS +bfe +bhB +bds +bdr +aWe +"} +(83,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +bjC +ane +aaC +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +alx +auq +ane +anH +avF +aag +aag +aag +aag +aag +aag +aag +aag +aag +aag +rjQ +wvt +iac +ape +ape +ape +ape +ape +ape +ape +ape +ape +ape +ape +ape +ape +ape +ape +ape +ape +ape +avK +awj +nVE +ape +hKd +qvb +jWV +iUB +aFE +hKd +kQW +gIh +oDG +gab +ayS +kKD +ape +eIG +nlw +mOH +nlw +nlw +wiC +nlw +vyh +vtM +ape +sFC +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aFt +aFJ +aoB +aKq +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aMa +aoB +aFJ +aHb +aQl +aXg +aXH +aXH +aXH +aXH +aXH +aXH +aXH +aXH +bcj +bcF +bdr +bds +beC +bfd +bfT +bgF +bhb +bhB +bds +aaK +aWe +"} +(84,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +bjC +ane +anH +avF +apr +apr +avF +avF +avF +avF +avF +avF +avF +avF +avF +avF +avF +avF +bjC +ane +anH +avF +pQd +fTc +fTc +fTc +fTc +fTc +fTc +sZC +fTc +fTc +iSd +wvt +fRi +fTc +fTc +fTc +fTc +sZC +fTc +fTc +fTc +sZC +rNb +ape +syW +auF +fzE +auW +avc +tbG +ape +avK +awj +awf +ape +hKd +upe +axu +nev +pZZ +hKd +kQW +gIh +oDG +gab +ayS +hss +ape +kMa +lbU +jmg +jmg +vJl +ayS +lbU +fjZ +geB +ape +sFC +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aFu +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aFJ +aQl +aXg +aXH +aXH +aXH +aXH +aXH +aXH +aXH +aXH +bcj +bcF +bdr +bds +beC +bfd +bfU +bgG +bhb +bhB +bds +aaK +aWe +"} +(85,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +bjC +ane +anH +avF +aab +aab +tdl +tdl +apf +apf +apf +apf +apf +apf +apf +apf +aab +apr +bjC +ane +anH +avF +jhH +rWJ +cSw +nyY +nyY +nyY +nyY +nyY +nyY +nyY +kpp +wvt +rWJ +nyY +nyY +nyY +nyY +nyY +nyY +nyY +cSw +qNa +iac +ape +bEo +auG +avf +avf +wWI +qHY +xJd +avK +awj +nVE +ape +hUs +ayR +ayR +ayR +ayR +kju +ayR +ayR +ayR +ayS +ayS +hss +ape +sIT +ayS +kQT +fcz +ayS +fcz +ayS +wlC +xOo +ape +sFC +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aFH +aFJ +aoB +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aKp +aoB +aFJ +aHc +aQl +aXg +aXH +aXH +aXH +aXH +aXH +aXH +aXH +aXH +bcj +bcF +bdr +bds +beC +bfe +bfV +bfV +bhc +bhC +bdr +bdr +aWe +"} +(86,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +bjC +aaC +avq +apr +aab +aab +acF +tdl +aeX +ahX +ahX +aiw +ahX +aoy +apy +apf +apf +avF +aaA +auq +anH +avF +rjQ +iac +aag +aag +qep +aag +qep +qep +aag +aag +rjQ +wvt +bIe +aag +aag +qep +qep +aag +qep +aag +aag +jhH +bIe +ape +uFw +avf +auX +hvm +avf +qHY +xJd +rQw +awj +nVE +ape +hqe +axV +axV +axV +axV +ayi +axV +axV +axV +jwc +ayS +hss +ape +jsd +qcc +yaF +vEG +bBV +vEG +yaF +qdf +iJE +ape +sFC +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aFI +aFJ +aoB +aoB +aoB +aoB +aoB +anQ +aoB +aoB +aoB +aoB +aoB +aFJ +aFH +aQl +aXg +aXH +aXH +aXH +aXH +aXH +aXH +aXH +aXH +bcj +bcF +bdr +bdr +bdr +bff +bff +bff +bff +bdr +bdr +bdr +aWe +"} +(87,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +bjC +anH +avF +avF +aab +aab +acF +tdl +afa +ajM +ajM +ajM +ajM +ajM +ajM +akK +alu +avF +avF +bjC +anH +avF +rjQ +bIe +aag +aab +aab +aab +aab +aab +aab +qep +rjQ +wvt +iac +qep +aab +aab +aab +aab +aab +aab +aag +rjQ +iac +ape +tXz +avf +auR +qIn +avf +qHY +avu +awj +awj +nVE +ape +hKd +axf +axw +axI +fzy +hKd +ygq +gIh +oDG +gab +ayS +mQw +ape +ape +ape +ape +ape +hlC +ape +ape +ape +mLB +ape +sFC +lCd +lCd +lCd +lCd +lCd +lCd +lCd +lCd +lCd +lCd +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFJ +aFI +aQl +aXg +aXH +aXH +aXH +aXH +aXH +aXH +aXH +aXH +bcj +bcF +bds +aQu +bdr +bds +bds +bds +bds +bdr +bdr +bim +aWe +"} +(88,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +bjC +aaD +avp +apr +aab +aab +acF +tdl +afb +agP +ahZ +ajm +ajp +aoO +apz +apf +apf +avF +aam +amF +anH +avF +rjQ +iac +qep +aab +aab +aab +aab +aab +aab +qep +buu +wvt +rUd +qep +aab +aab +aab +aab +aab +aab +qep +rjQ +iac +ape +wCN +avf +cmC +pee +avf +qHY +xJd +etn +asc +nVE +ape +hKd +uZd +dUb +axJ +iUN +hKd +kQW +gIh +oDG +gab +ayS +kju +yec +auc +ict +ict +ayR +tRb +mty +mty +yiF +xnR +ape +sFC +lCd +lCd +gZA +gZA +gZA +gZA +gZA +gZA +lCd +lCd +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aFJ +aFJ +aFS +aFW +aFW +aGk +aGm +aGr +aGr +aGr +aGD +aGH +aGJ +aFJ +aEi +aQl +aXh +aXI +aXI +aXI +aXI +bal +bal +bal +bal +bck +bcF +bdr +bdW +bdr +bdr +bdr +bdr +bdr +bdr +bdr +bim +aWe +"} +(89,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +bjC +ane +anH +avF +aab +aab +tdl +tdl +apf +apf +apf +ajI +ajI +apf +apf +apf +aab +apr +bjC +ane +anH +avF +nOX +bIe +aag +aab +aab +asX +asX +lIe +asX +asX +asX +cLW +asX +asX +asX +aqt +asX +asX +aab +aab +aag +rjQ +iac +ape +oQo +avg +avg +avg +avg +wDZ +lbW +avK +awj +nVE +ape +hUs +ekl +ayR +ayR +ayR +rAh +ayR +ayR +ayR +mma +ayS +ayS +ayS +ayS +ayS +ayS +ayS +ayS +ayS +ayS +ayS +hlP +ape +sFC +lCd +sCi +pGu +pGu +pGu +pGu +pGu +pGu +sCi +lCd +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +aWP +asI +"} +(90,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +bjC +ane +anH +avF +apr +apr +avF +avF +avF +avF +avF +ajK +ajK +avF +avF +avF +avF +avF +bjC +ane +anH +avF +jhH +iac +aag +aab +aab +asX +xsp +asU +asU +asU +waM +pCq +rfc +asU +asU +asU +asU +asX +aab +aab +aag +jhH +bIe +ape +ape +xJd +xJd +qpj +xJd +ape +ape +avK +awj +nVE +ape +gab +fcz +ayS +ayS +ayS +ayS +ayS +ayS +ayS +ayS +hXb +gzT +gzT +gzT +gzT +gzT +gzT +gzT +gzT +gzT +gzT +pUP +ape +sFC +lCd +sCi +pGu +pGu +pGu +pGu +pGu +pGu +sCi +lCd +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +beL +blc +aUx +aUQ +aUq +aUQ +aUx +aUx +aUq +aUx +aWd +blh +blh +blh +blh +blz +blh +blh +blz +blh +blh +aWe +"} +(91,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +bjC +ane +aaD +ame +ame +ame +ame +nuY +nuY +ame +aib +ane +ane +aoP +ame +ame +ame +ame +amF +ane +anH +avF +rjQ +iac +qep +aab +aab +aqt +asU +aqZ +ovw +lKh +wXQ +mcl +wXQ +wXQ +unM +tTw +asU +aqt +aab +aab +qep +rjQ +iac +ape +oyp +avy +cIM +awj +avh +avy +avy +cSZ +asc +nVE +ape +peR +lEb +wFX +wFX +wFX +wFX +wFX +wFX +ixL +kuW +oXr +axV +axV +jwc +ayS +ayS +ayS +ayS +ayS +ayS +ayS +aQC +ape +sFC +lCd +sCi +pGu +pGu +wQh +wQh +pGu +pGu +sCi +lCd +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +beL +blc +aUq +aUU +bct +biA +biA +bct +bla +aUq +aWd +aGG +aGK +aGZ +aGG +bli +bli +bli +bli +bli +bli +aWe +"} +(92,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +bjC +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +ane +anH +avF +rjQ +iac +qep +aab +aab +aqt +asU +sww +jDZ +asC +ycJ +jmN +asC +asC +vCi +qOW +asU +aqt +aab +aab +qep +rjQ +iac +ape +eBJ +wZd +wZd +wZd +wZd +wZd +ktm +awj +awj +nVE +ape +ape +ape +ape +ape +ape +ape +ape +ape +ape +ape +vmU +ape +ape +peR +dVq +rlP +ayS +ayS +ayS +cUi +axV +ncY +ape +sFC +lCd +sCi +pGu +pGu +pGu +pGu +pGu +pGu +sCi +lCd +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +beL +blc +aUx +aUV +bdV +beL +beL +bdV +blb +aUx +aWd +bli +aGN +aGN +bli +bli +aHd +aHv +aHz +bli +aaz +aWe +"} +(93,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aaA +alx +alx +alx +bNd +bNd +bNd +bNd +bNd +bNd +bNd +akc +akQ +aoQ +alx +alx +alx +alx +alx +alx +avq +avF +nOX +iac +aag +aab +aab +asX +asU +arb +aro +asC +asC +jmN +ycJ +asC +cQL +rfh +asU +asX +aab +aab +aag +jhz +iac +ape +vCr +avb +avb +avb +avb +sSC +btu +deW +avb +mZc +ape +vYo +qNE +qNE +qNE +dNG +xys +sCK +qlv +ebw +sCK +rva +rNb +ape +axT +ape +ape +eyp +eyp +eyp +ape +ape +axT +ape +sFC +lCd +sCi +pGu +pGu +pGu +pGu +pGu +pGu +sCi +lCd +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +beL +blc +aUx +aUW +bet +beL +beL +beL +blc +aUq +aWd +blu +blu +blu +blu +blu +blu +blu +blu +aaw +aaI +aWe +"} +(94,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +avF +avF +avF +avF +avF +avF +avF +avF +avF +avF +avF +avF +alm +avF +avF +avF +avF +avF +avF +avF +avF +avF +rjQ +iac +aag +qep +qep +asX +asU +lUz +asC +asC +asC +jmN +asC +asC +asC +asM +asU +asX +qep +qep +aag +rjQ +iac +ape +ape +ape +ape +ape +ape +ape +fuz +ape +ape +ape +ape +pWW +pdt +pKc +wYJ +flO +wNZ +tXm +hSw +kJq +tXm +xfF +iac +aag +aab +xVf +xVf +xFw +hVs +xjs +xVf +xVf +aab +aag +upn +lCd +lCd +eEc +cYG +cYG +cYG +saV +fvL +lCd +kWF +kWF +kWF +kWF +kWF +kWF +kWF +kWF +kWF +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +beL +and +biA +blg +beL +bjQ +bkY +beL +blc +aUx +aWd +blv +blu +blu +blv +blu +blv +blu +blu +bli +bli +aWe +"} +(95,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +pWe +pWe +pWe +apr +afI +ahL +ahL +ahL +ahL +aQj +ahL +ahL +akd +aln +aoR +ahL +ahL +ahL +ahL +ahL +ahL +rdA +dcp +arR +cjY +fTc +fTc +gVc +tKv +efo +sww +asC +asC +sQM +rSJ +aro +asC +asC +asM +jrL +tKv +aUM +fTc +fTc +iSd +fRi +fTc +fTc +fTc +sZC +fTc +fTc +fTc +wvt +fTc +fTc +mhW +wWL +tsm +gwF +oRm +ybr +oVS +sQa +jjy +kLN +pMl +rEC +wvt +iac +aag +ssu +xVf +liW +pnx +pnx +pnx +qal +xVf +xVf +aag +upn +lCd +owp +jRM +jRM +jRM +jRM +jRM +jRM +uaP +kWF +eBe +oDb +nzq +tEN +ssC +ssC +ssC +kWF +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +bkX +bkX +bkX +ayK +beL +bjR +bkZ +beL +blc +aUx +aWd +blx +blB +blB +blB +blB +blB +blK +blu +bli +aaz +aWe +"} +(96,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +apr +aaE +amg +amg +lDh +bJa +bJa +bJa +bJa +bJa +xYn +amg +amg +amg +amg +amg +amg +amg +avs +aod +arR +tEz +tEz +tEz +tEz +aqv +asU +sww +asC +asC +aro +kAI +eAl +sFj +sFj +dAo +ybt +vga +avz +avz +auD +avz +avz +avz +auD +avz +avz +avz +atY +avz +eeK +avz +avz +hSw +mRV +dxf +lyi +gmy +ezA +cYt +aag +uFx +uFx +aag +pID +fRO +iac +aag +xkH +xVf +pnx +pnx +pnx +pnx +pnx +xVf +xVf +aag +upn +lCd +gqB +gqB +gqB +gqB +gqB +gqB +gqB +gqB +kWF +ssC +ssC +ssC +ssC +ssC +ssC +ssC +kWF +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +aVD +aUx +aUx +aUW +bhp +beL +beL +beL +blc +aUq +aWd +bly +blC +blC +blC +blC +blC +blL +blu +aax +aaI +aWe +"} +(97,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +apr +aaF +aoS +aoS +rgH +aoS +aoS +aoS +aoS +qbW +ajq +alr +ckU +aoS +aoS +aoS +aoS +aoS +rNC +rWK +arR +rze +nyY +cSw +wKa +asX +rfc +sww +asC +ycJ +oAv +gCV +aro +asC +asC +asM +asT +asX +sso +cSw +nyY +qNa +rWJ +nyY +nyY +nyY +nyY +ptK +pKw +nyY +nyY +nyY +nyY +ieG +qeH +bqo +nrd +oRm +cEO +cYt +aag +qiX +iYu +sVJ +rjQ +wvt +bIe +aag +xkH +xVf +pnx +pnx +jFg +pnx +pnx +bxn +xVf +aag +upn +lCd +gqB +gqB +wQh +gqB +gqB +wQh +gqB +gqB +kWF +ssC +ssC +ssC +ssC +ssC +ssC +ssC +kWF +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +aUx +aUq +aVD +aUV +bdV +beL +beL +bdV +blb +aUx +aWd +bly +blC +blC +blC +blC +blC +blL +blu +bli +bli +aWe +"} +(98,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +avF +avF +avF +avF +avF +avF +avF +avF +avF +bZN +avF +avF +avF +avF +avF +avF +avF +avF +avF +rjQ +iac +aag +qep +qep +asX +sYT +kOZ +asC +asC +asC +rJD +sFj +sFj +sFj +amd +asU +asX +qep +qep +aag +rjQ +iac +rME +rME +rME +rME +rME +vBi +rME +rME +gWe +jWR +rME +rME +njl +anm +oii +xcP +gKj +ngh +sKj +tMt +wcP +rjQ +wvt +iac +aag +ssu +xVf +liW +pnx +pnx +pnx +qal +xVf +xVf +aag +upn +lCd +gqB +gqB +gqB +gqB +gqB +gqB +gqB +gqB +kWF +nIw +ssC +ssC +ssC +ssC +ssC +fZD +kWF +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +aUx +aUx +aUq +aVn +biz +bkX +bkX +biz +blf +aUQ +aWd +bly +blC +blC +blC +blC +blC +blL +blu +bli +aaz +aWe +"} +(99,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aaG +abH +abP +abH +acT +avF +agQ +ahL +akd +xRY +aoR +apL +avF +rUL +alo +alo +alo +avw +avF +rjQ +iac +aag +aab +aab +asX +xsp +lqr +oAv +asC +asC +jmN +asC +asC +emD +asN +asU +asX +aab +aab +aag +rjQ +iac +rME +iuE +dQD +brG +kMz +aTK +pUK +rME +qEa +kIF +kLU +rME +krq +dcm +dcm +dcm +lnC +aag +hXg +qiE +aag +rjQ +wvt +iac +aag +aab +xVf +xVf +xFw +hVs +xjs +xVf +xVf +aab +aag +upn +lCd +gqB +gqB +gqB +gqB +gqB +gqB +gqB +gqB +kWF +ssC +ssC +ssC +ssC +ssC +ssC +ssC +kWF +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aQl +aUQ +aVD +aUx +aUx +aUQ +aUq +aUx +aUx +aUQ +aUx +aWd +bly +blC +blC +blC +blC +blC +blL +blu +aay +aaI +aWe +"} +(100,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aaH +ane +ane +ane +acj +avF +agR +amg +amg +rSf +amg +apM +hKi +atp +aub +aub +aub +avx +avF +rjQ +iac +qep +aab +aab +aqt +asU +dnQ +gcM +ycJ +asC +jmN +asC +ycJ +vCi +asO +asU +aqt +aab +aab +qep +rjQ +bIe +rME +sHq +lGT +auJ +dal +obe +sbI +rME +mQR +hxb +vEj +rME +aag +aag +aag +aag +aag +aag +aag +aag +aag +kqA +pKw +iac +aag +qep +aag +aag +aag +aag +aag +aag +aag +aag +aag +upn +lCd +gqB +gqB +gqB +gqB +gqB +gqB +gqB +gqB +kWF +ssC +ssC +ssC +ssC +ssC +ssC +ssC +kWF +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +asI +aQB +aQB +aQB +aQB +aQB +aQB +aQB +aQB +aQB +aQB +asI +aQB +aQB +aQB +aQB +aQB +aQB +aQB +aQB +aQB +aQB +asI +"} +(101,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aaS +ane +ane +ane +acV +avF +agT +ahN +ahN +rSf +amg +apM +hKi +atp +aub +aub +aub +avD +avF +rjQ +iac +qep +aab +aab +aqt +asU +eCv +hsX +qYE +qYE +eYq +qYE +qYE +cWD +ptl +asU +aqt +aab +aab +qep +rjQ +iac +rME +eKE +uyE +tKI +dal +fHU +sbI +rME +rME +wlw +rME +rME +aVP +sZC +fTc +fTc +fTc +fTc +fTc +sZC +fTc +iSd +wvt +fRi +fTc +fTc +fTc +fTc +fTc +fTc +fTc +fTc +aOv +aag +upn +upn +lCd +gqB +gqB +gqB +gqB +gqB +gqB +gqB +gqB +kWF +ssC +ssC +ssC +ssC +ssC +ssC +ssC +kWF +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(102,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aaT +ane +ane +ane +acW +afc +ahe +ahN +ahN +rSf +amg +apM +hKi +atp +aub +aub +aub +avE +avF +rjQ +iac +aag +aab +aab +asX +asU +asU +asU +asU +cHb +tBL +mLk +asU +asU +asU +asU +asX +aab +aab +aag +rjQ +iac +rME +uLC +hTO +dal +dal +obe +dqx +jjl +wDD +dal +oCf +rME +rjQ +tEz +tEz +tEz +fOj +tEz +tEz +tEz +tEz +tEz +qZl +avz +avz +avz +avz +avz +avz +avz +avz +pdz +iac +aag +upn +aab +lCd +gqB +gqB +gqB +gqB +gqB +gqB +gqB +gqB +kWF +kWF +kWF +kWF +kWF +kWF +kWF +wsj +kWF +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(103,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aaU +ane +ane +ane +acj +xMp +lbT +ahN +ahN +rSf +ahN +apM +xMp +atp +aub +aub +aub +avG +avF +rjQ +iac +aag +aab +aab +asX +asX +aqt +asX +asX +asX +cLW +asX +asX +asX +aqt +asX +asX +aab +aab +aag +rjQ +iac +rME +trO +ozr +dal +nrf +jtB +ekk +fzm +fzm +hjD +vOS +rME +rjQ +tEz +rWJ +nyY +nyY +nyY +nyY +nyY +nyY +cSw +nyY +nyY +nyY +nyY +nyY +nyY +nyY +nyY +qNa +wvt +iac +aag +upn +aab +lCd +gqB +gqB +gqB +gqB +gqB +gqB +gqB +gqB +mpU +uQp +oPK +oPK +oPK +oPK +oPK +oPK +mpU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(104,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aaH +ane +ane +ane +acj +avF +ahh +ahN +ahN +rSf +ahN +apM +avF +atq +aub +aub +aub +avN +avF +jhH +iac +qep +aab +aab +aab +aab +aab +aab +qep +aVP +wvt +rNb +qep +aab +aab +aab +aab +aab +aab +qep +nOX +iac +rME +ffG +uCf +obh +ffG +aRS +aul +dal +dal +obe +eCn +rME +rjQ +tEz +iac +aag +aag +qep +qep +aag +qep +qep +aag +qep +qep +aag +qep +qep +aag +aag +nOX +wvt +iac +aag +upn +aab +lCd +gqB +gqB +gqB +gqB +gqB +gqB +gqB +gqB +mpU +wyL +oPK +oPK +oPK +oPK +oPK +oPK +mpU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(105,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aaW +abI +abZ +acG +acX +avF +ahh +ahN +ahN +rSf +amg +apM +hKi +atr +aub +aub +aub +awg +avF +rjQ +iac +aag +aab +aab +aab +aab +aab +aab +qep +rjQ +wvt +iac +qep +aab +aab +aab +aab +aab +aab +qep +rjQ +iac +rME +aut +rly +dal +gxc +ffG +bEj +dal +ezf +obe +rru +rME +rjQ +fOj +iac +qep +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aag +jhH +wvt +iac +aag +upn +aab +lCd +gqB +gqB +gqB +gqB +gqB +gqB +gqB +gqB +mpU +oPK +oPK +oPK +oPK +oPK +oPK +oPK +mpU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(106,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +avF +avF +avF +avF +avF +avF +ahh +ahN +ahN +rSf +amg +apM +hKi +ats +aub +aub +aub +oKC +avF +rjQ +iac +aag +aag +qep +aag +qep +qep +aag +aag +rjQ +pKw +iac +aag +aag +qep +qep +aag +qep +aag +aag +jhH +bIe +rME +auu +eaO +dal +dal +fjD +dal +eaO +dal +obe +rru +rME +rjQ +tEz +iac +aag +cgR +sgM +wHG +mAT +wHG +wHG +mAT +wHG +mAT +mAT +aab +aab +aab +qep +rjQ +wvt +iac +aag +upn +aab +lCd +gqB +gqB +gqB +gqB +gqB +gqB +gqB +gqB +mpU +elY +oPK +oPK +oPK +oPK +oPK +cVw +mpU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(107,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aaX +abH +abH +abH +adm +avF +ahi +amg +amg +rSf +amg +apM +hKi +att +aub +aub +aub +qrZ +avF +rjQ +fRi +fTc +fTc +fTc +fTc +fTc +fTc +fTc +fTc +iSd +wvt +cjY +fTc +fTc +sZC +fTc +sZC +fTc +fTc +fTc +iSd +iac +rME +auv +yia +dal +vBf +ffG +kSb +dal +eaO +obe +rru +rME +rjQ +tEz +iac +kjR +sHf +sgM +lvg +iFF +iFF +iFF +iFF +iFF +xWN +mAT +mAT +aab +aab +qep +rjQ +wvt +bIe +aag +upn +aab +lCd +gqB +gqB +wQh +gqB +gqB +wQh +gqB +gqB +mpU +oPK +iVS +oPK +oPK +oPK +oPK +oPK +mpU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(108,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aaY +ane +aca +ane +adB +nHU +ahi +amg +amg +rSf +amg +apM +avF +atu +jIz +aub +rwG +ukT +avF +buu +nyY +nyY +nyY +uJf +uJf +bDa +uJf +nyY +nyY +qNa +wvt +rWJ +nyY +cSw +nyY +nyY +nyY +nyY +fOj +nyY +nyY +rUd +rME +ksY +sSt +pKT +laU +ffG +qOB +sKn +vci +obe +mFT +rME +vKh +fOj +tEz +pgX +fBR +kQb +urj +viY +viY +viY +viY +hEt +oTp +mXE +wHG +aab +aab +qep +rjQ +pKw +iac +aag +upn +aab +lCd +gqB +gqB +gqB +gqB +gqB +gqB +gqB +gqB +mpU +oPK +oPK +oPK +oPK +oPK +oPK +oPK +mpU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(109,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aaH +ane +ane +ane +acj +nHU +agT +amg +amg +hGr +amg +apM +avF +avF +avF +aux +avF +avF +avF +avF +avF +avF +azf +lyL +lyL +tlJ +lyL +azf +azf +btP +aXW +hde +rME +rME +rME +rME +rME +rME +mfE +rME +rME +rME +rME +rME +rME +rME +bwJ +rME +rME +rME +jyA +obe +vLf +rME +rjQ +tEz +iac +kjR +sHf +sgM +vlh +oFG +ucL +ucL +oFG +ucL +dJT +mAT +mAT +aab +aab +qep +rjQ +wvt +iac +aag +upn +aab +lCd +vDZ +kAc +kAc +kAc +gqB +kAc +kAc +pCP +mpU +oPK +oPK +oPK +oPK +oPK +oPK +oPK +mpU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(110,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aaZ +ane +acd +ane +ack +afy +ahj +amg +amg +rSf +amg +apQ +ahL +ahL +akd +amg +aoR +ahL +ahL +ahL +ahL +apL +azf +skb +tcG +rlX +inR +fLN +azf +btP +aXW +hde +rME +rtF +peS +aiO +iPd +atg +awv +uxw +rME +jFD +tat +qtE +rME +jFO +pVH +wLj +vHn +qhA +vBh +obe +cUs +rME +rjQ +tEz +bIe +aag +rcI +sgM +wHG +mAT +wHG +wHG +mAT +wHG +mAT +mAT +aab +aab +aab +qep +rjQ +wvt +iac +aag +upn +aab +lCd +lCd +eEc +saV +aop +wul +lCd +eEc +saV +mpU +mpU +mpU +mpU +mpU +mpU +mpU +mpU +mpU +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(111,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +abg +gsX +ane +ane +acj +avF +ahf +amg +amg +rSf +amg +amg +amg +amg +amg +amg +amg +amg +amg +amg +amg +apM +azf +afZ +rlX +rlX +rlX +fGY +hAV +cVU +aXW +hde +rME +bVi +aRT +aRT +jxN +dsV +azz +azz +cIH +jeR +wUH +nwD +rME +dFG +ukl +xRi +hTD +qhA +hVo +obe +gnM +rME +rjQ +tEz +iac +qep +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aag +rjQ +pKw +iac +aag +upn +aab +lCd +jbF +jYz +gzk +kYG +bmz +kYG +cUW +gRv +iQN +lCd +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(112,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +abh +abJ +acg +abJ +acw +avF +ahk +azl +ake +ldv +vCD +aqb +bJa +bJa +xYn +auy +auy +rXe +auy +auy +amg +apM +oLE +gAZ +rlX +mQF +rlX +nxZ +azf +btP +aXW +xLQ +rME +aRY +aRT +fkI +jRQ +dsV +azz +qIO +vbx +eWc +aCH +cvz +rME +eua +pde +xRi +hfx +pVh +dal +obe +gnM +rME +nOX +tEz +iac +aag +aag +qep +qep +aag +qep +qep +aag +qep +qep +aag +qep +qep +aag +aag +jhH +wvt +bIe +aag +upn +aab +lCd +kHi +jwB +ffQ +tce +bmz +tce +rno +uQt +iQN +lCd +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(113,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +avF +avF +avF +avF +avF +avF +avF +avF +akf +avF +avF +agR +amg +atB +aue +auz +utU +aww +aUp +dxI +bJa +hdH +qGh +rgu +nUk +nUk +nUk +mjX +tVv +eoO +emk +hde +rME +lQe +aRT +aRT +jRQ +dsV +hxb +qIO +rME +rME +rME +rME +rME +bjN +lII +lJU +mKH +vbx +nxb +obe +tVp +rME +rjQ +tEz +fRi +fTc +fTc +fTc +sZC +fTc +fTc +fTc +fTc +sZC +fTc +fTc +fTc +sZC +fTc +fTc +iSd +wvt +iac +aag +upn +aab +lCd +qww +jwB +jwB +siD +bmz +siD +jwB +jwB +yaC +lCd +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(114,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aaX +abH +ach +avF +adC +afz +xMp +abH +aiy +ach +avF +aqf +amg +atC +auf +auA +auY +auY +auY +vsu +amg +avs +wWS +rlX +rlX +rzp +rlX +fGY +azf +btP +aXW +hde +rME +jCk +bGM +bGM +pKX +dsV +azz +qIO +rME +oeL +gAe +kAO +rME +rME +cXK +rME +rME +rME +rME +mYg +rME +rME +rjQ +tEz +fOj +tEz +tEz +tEz +tEz +tEz +fOj +vyH +avz +avz +avz +avz +avz +avz +avz +auD +avz +aHn +iac +aag +upn +aab +lCd +nkg +nxB +sih +lCd +bmz +lCd +prM +bpK +jCF +lCd +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(115,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +abi +ane +kHP +avF +adD +afA +avF +ane +ane +jLf +avF +aqs +amg +rSf +amg +wTp +auB +auB +auB +auB +amg +jdR +oLE +dDR +ocS +tvx +esK +qEw +azf +eER +aXW +hde +rME +rME +uNn +rME +vbx +snj +azz +azz +cIH +lVi +esG +szb +rME +iuE +dQD +dQD +dQD +dQD +kMz +mcM +cRC +rME +buu +nyY +nyY +nyY +nyY +nyY +nyY +cSw +qNa +wvt +fOj +tEz +rWJ +cSw +nyY +nyY +nyY +nyY +cSw +nyY +rUd +aag +upn +aab +lCd +urL +jwB +dmH +lCd +lCd +lCd +lCd +lCd +lCd +lCd +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(116,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +abj +ane +gqd +avF +adE +afD +ane +ane +akg +alt +xMp +aqI +amg +rSf +amg +amg +amg +amg +amg +amg +amg +apM +azf +dDR +esK +ein +rlX +fGY +azf +ola +aXW +xLQ +rME +mRa +azz +awv +awv +hYF +azz +qIO +rME +oKs +bOP +egW +rME +dvt +dal +dal +inZ +dal +dal +dal +sHC +aRS +aag +aag +aag +aag +aag +qep +qep +qep +aag +sgj +qep +bxU +aag +qep +qep +qep +aag +aag +aag +aag +aag +aag +upn +aab +lCd +luu +jwB +ceK +lCd +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(117,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +abk +ane +cUd +avF +aaH +ane +ane +ane +ane +alU +avF +aqU +aoS +ahS +amg +alr +aoS +aoS +aoS +aoS +aoS +laJ +azf +fZd +rWr +piO +tuY +ulD +azf +wSb +aXW +hde +rME +aSq +azz +hxb +azz +tRE +azz +qIO +rME +rME +rME +rME +rME +tkE +umC +dal +umC +dal +umC +dal +bIw +aRS +tEz +tEz +tEz +tEz +aag +joE +oRm +kCj +oRm +ikd +cTk +fef +oRm +gwF +oRm +oRm +oRm +oRm +aag +upn +upn +upn +upn +aab +lCd +lCd +lCd +lCd +lCd +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(118,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +abl +ane +acj +avF +adF +ane +ane +ane +ane +alW +avF +avF +avF +avF +aug +avF +avF +avF +avF +avF +avF +avF +azf +azf +azf +azf +azf +azf +azf +eaU +emk +hde +rME +ete +azz +oeL +kIZ +jPX +hxb +eSk +wug +fXa +rMF +ydQ +rME +kNx +ehz +qtG +ehz +qtG +ehz +qtG +uuU +aRS +tEz +tEz +tEz +tEz +aag +miT +oRm +oRm +gwF +eAq +jeB +lPZ +oRm +oRm +cEO +rqg +wWW +oRm +qep +upn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(119,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +abn +ane +ack +acH +adG +ane +ane +ane +ane +alX +avF +aqY +asZ +atN +aui +auC +asZ +axt +avF +mYi +mYi +mYi +mYi +iVe +kYC +lhv +iyb +tSA +cmR +vWA +aXW +hde +rME +ygb +azz +oKs +wGp +ifD +azz +azz +atv +tnR +tnR +nUd +rME +rME +rME +rME +rME +rME +aRS +ffG +ffG +aRS +aag +aag +aag +tEz +aag +agb +oRm +cEO +cRG +dum +qGc +hNQ +uMJ +oRm +oRm +oZu +bFk +oRm +qep +upn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(120,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +abu +ane +acj +avF +adH +ane +ane +ane +ane +alY +avF +arj +ata +atO +aui +aui +aui +axS +avF +mYi +mYi +mYi +mYi +iVe +lhv +lhv +trz +trz +cmR +vWA +wIs +vYJ +bkO +mIS +ewi +ewi +ewi +gAG +ewi +ewi +mIS +ewi +ewi +iwf +fcC +fcC +fcC +nYO +rPc +dsr +aRS +sgo +sgo +sgo +upn +upn +aag +tEz +aag +jmW +oRm +oRm +bfn +cUV +edQ +udd +bPm +oRm +qEl +oRm +oRm +gwF +aag +upn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(121,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +abv +ane +acj +avF +adI +ane +ane +ane +aki +ama +avF +arz +aui +atP +aui +aui +aui +axU +avF +mYi +mYi +mYi +mYi +iVe +lhv +rXK +kMk +hsV +cmR +vWA +pkW +hde +vbx +spg +azz +azz +azz +azz +azz +azz +azz +azz +azz +azz +hxb +azz +azz +tRE +wOC +iIw +ffG +sgo +aab +aab +aab +upn +aag +aag +aag +uSd +obA +obA +gMN +rhc +fak +tkq +sMW +nDh +oRm +gwF +foz +aag +aag +upn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(122,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +abw +abJ +acw +avF +adJ +abJ +abJ +ahT +abJ +amb +avF +arC +aui +aui +aui +aui +aui +ayh +avF +mYi +mYi +mYi +mYi +iVe +lhv +lhv +lhv +lhv +cmR +vWA +aXW +xLQ +rME +iLF +hxb +hbe +oYI +feH +azz +azz +azz +jFD +cax +eBo +azz +azz +hxb +tRE +wOC +jaZ +ffG +sgo +sgo +aab +aab +upn +upn +aag +crG +oRm +qEl +gwF +sMW +siA +hSy +uvt +bPm +oRm +gwF +qEl +npu +aag +upn +upn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(123,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +avF +avF +avF +avF +avF +avF +avF +ait +avF +avF +avF +arC +aui +aui +auk +auE +aui +ayp +avF +mYi +mYi +mYi +mYi +iVe +lhv +lhv +lhv +kYC +cmR +vWA +aXW +hde +rME +dZI +pjD +hOx +bxq +wlR +pjD +auj +pjD +lna +oMz +gSs +pjD +pjD +azz +tRE +ayQ +wMZ +aRS +aRS +sgo +aab +aab +aab +upn +qep +ksZ +oRm +tsZ +kCj +vIV +wwR +wwR +wwR +tRM +oRm +tsZ +oRm +ksZ +qep +upn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(124,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +pWe +pWe +pWe +pWe +avF +adY +abH +abH +aiy +abH +amc +avF +avF +hoJ +avF +avF +xMp +aui +ayy +avF +mYi +mYi +mYi +mYi +rzU +nJo +qGm +lhv +lhv +lhv +vWA +aXW +hde +rME +rME +rME +rME +rME +rME +emo +xoz +rME +rME +rME +opB +opB +opB +azz +kTF +opB +opB +opB +aRS +sgo +aab +aab +aab +upn +qep +foz +oRm +gwF +gwF +oRm +oRm +oMO +oRm +oRm +gwF +oRm +gwF +foz +qep +upn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(125,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aea +afE +ane +ane +ane +amG +avF +asw +aKr +opy +ihj +auO +aui +aCo +avF +mYi +mYi +mYi +mYi +mYi +iVe +lhv +lhv +lhv +lhv +vWA +aXW +hde +rME +mSy +nnd +tDB +lip +vlM +rGe +rGe +rGe +sat +rME +opB +qUB +rxD +tNM +ajs +cAX +egT +opB +aRS +sgo +aab +aab +aab +upn +qep +wTo +oMO +oRm +oRm +oRm +oRm +oRm +oRm +oRm +oRm +oRm +oRm +gub +qep +upn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(126,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aeb +ane +ane +ane +ane +amU +avF +asx +atb +atZ +aum +auO +aui +aCo +avF +mYi +mYi +mYi +mYi +mYi +iVe +kYC +lhv +lhv +cmR +vWA +aXW +xLQ +rME +fem +rGe +rGe +rGe +rGe +rGe +rGe +rGe +sat +rME +opB +xXK +tNM +kKT +qKC +tNM +xuz +opB +aRS +sgo +aab +aab +aab +upn +sVJ +ksZ +oRm +rav +wTo +fSQ +rav +eQD +pjZ +rav +wTo +pjZ +oRm +ksZ +aag +upn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(127,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aec +ane +ane +ane +ane +acj +avF +gtE +atZ +atZ +vjm +plf +aui +hlz +avF +mYi +mYi +uMj +mYi +mYi +rzU +nJo +lhv +lhv +cmR +vWA +aXW +hde +rME +oZh +rGe +rGe +rGe +rGe +rGe +rGe +rGe +rGe +rME +opB +jMH +tNM +sRw +uJW +tNM +xuz +opB +aRS +sgo +aab +aab +aab +upn +aag +aag +qep +qep +aag +aag +qep +qep +qep +aag +aag +qep +qep +aag +aag +upn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(128,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aed +ane +ane +ane +ane +any +avF +rFH +hIW +gIu +fvx +avF +fXT +kQv +aRS +mYi +mYi +mYi +mYi +mYi +mYi +iVe +lhv +lhv +cmR +vWA +aXW +hde +rME +okY +rGe +rGe +rGe +rGe +rGe +rGe +rGe +uTc +rME +opB +sIW +tNM +tNM +tNM +tNM +tNM +tNM +sFh +sgo +aab +aab +aab +upn +upn +upn +upn +upn +upn +upn +upn +upn +upn +upn +upn +upn +upn +upn +upn +upn +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(129,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +ael +ane +ane +ane +ane +anz +avF +avF +avF +avF +avF +avF +dZt +aRS +aRS +mYi +mYi +mYi +mYi +mYi +mYi +iVe +lhv +kYC +cmR +vWA +smg +vYJ +bkO +cZZ +wWl +gzA +qws +lND +lND +qyh +wWl +hNW +rME +opB +mCp +tNM +kOU +kOU +tNM +tNM +aHY +sFh +sgo +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(130,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +aem +agf +ane +ane +ane +acj +avF +pWe +gUN +gUN +gUN +gUN +gUN +sgo +sFh +mYi +mYi +mYi +mYi +mYi +jzh +vEN +lhv +lhv +cmR +vWA +aRy +hde +rME +dCm +rGe +enI +enI +enI +enI +kqg +rGe +ifG +rME +opB +mCp +tNM +rgh +cOe +tNM +tNM +tNM +sFh +sgo +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(131,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +abw +abJ +ahl +aiY +akD +anA +avF +pWe +aab +aab +aab +aab +aab +sgo +sFh +mYi +mYi +mYi +mYi +mYi +iVe +lhv +lhv +lhv +cmR +vWA +aRy +hde +rME +ylw +rGe +rGe +rGe +rGe +rGe +rGe +rGe +tSO +rME +opB +mCp +tNM +kOU +kOU +tNM +xuz +opB +aRS +sgo +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(132,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +avF +avF +avF +avF +avF +avF +avF +avF +pWe +aab +aab +aab +aab +aab +sgo +sFh +mYi +mYi +mYi +mYi +mYi +iVe +wce +iyb +iyb +cmR +vWA +rxp +hde +rME +dqW +rGe +rGe +rGe +rGe +rGe +rGe +rGe +tSO +rME +opB +mCp +tNM +gfN +giT +tNM +xuz +opB +aRS +sgo +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(133,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +pWe +pWe +pWe +pWe +pWe +pWe +pWe +pWe +pWe +pWe +aab +aab +aab +aab +aab +sgo +aRS +mYi +mYi +mYi +mYi +mYi +iVe +kYC +trz +trz +cmR +ubY +vFI +gYv +rME +dqW +rGe +fGb +qCH +hGY +hGY +uDi +rGe +dCm +rME +opB +dZV +tNM +kOU +kOU +tNM +ngr +opB +aRS +sgo +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(134,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +sgo +aRS +aRS +sFh +sFh +sFh +sFh +aRS +aRS +aRS +aRS +aRS +lDz +lDz +lDz +aRS +aRS +aRS +aRS +aRS +aRS +aRS +aRS +aRS +aRS +aRS +opB +opB +tNM +tNM +tNM +tNM +opB +opB +aRS +sgo +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(135,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +aRS +aRS +aRS +sFh +sFh +sFh +sFh +aRS +aRS +aRS +sgo +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(136,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +sgo +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(137,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(138,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(139,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(140,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(141,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(142,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(143,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(144,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(145,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(146,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(147,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(148,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(149,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(150,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(151,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(152,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(153,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +iEt +emN +tTy +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +iEt +emN +tTy +wIX +wIX +aab +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(154,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +iEt +emN +tTy +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +iEt +emN +tTy +wIX +wIX +aab +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(155,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +iEt +emN +tTy +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +iEt +emN +tTy +wIX +wIX +aab +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(156,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +iEt +emN +tTy +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +iEt +emN +tTy +wIX +wIX +aab +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(157,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +iEt +emN +tTy +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +iEt +emN +tTy +wIX +wIX +aab +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(158,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +iEt +emN +tTy +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +iEt +emN +tTy +wIX +wIX +aab +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(159,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +iEt +emN +tTy +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +iEt +emN +tTy +wIX +wIX +aab +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(160,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +iEt +emN +tTy +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +iEt +emN +tTy +wIX +wIX +aab +wIX +wIX +wIX +wIX +wIX +wIX +jbW +jbW +jbW +jbW +jbW +jbW +wIX +jbW +jbW +jbW +jbW +jbW +jbW +wIX +wIX +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(161,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +iEt +emN +tTy +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +iEt +emN +tTy +wIX +wIX +aab +wIX +wIX +wIX +wIX +wIX +jbW +jbW +fsr +jbW +jbW +fsr +jbW +jbW +jbW +fsr +jbW +jbW +fsr +jbW +jbW +wIX +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(162,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +iEt +emN +tTy +wIX +wIX +wIX +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +wIX +wIX +wIX +iEt +emN +tTy +wIX +wIX +aab +wIX +wIX +wIX +wIX +jbW +jbW +fsr +fsr +jwg +jwg +fsr +jwg +jwg +jwg +fsr +jwg +jwg +fsr +fsr +jbW +jbW +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(163,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +iEt +emN +xuT +jbW +jbW +jbW +jbW +xPh +jba +jba +jba +jba +jba +xPh +jbW +jbW +jbW +jbW +djE +emN +tTy +wIX +wIX +aab +wIX +wIX +wIX +wIX +jbW +fsr +fsr +fsr +tIg +eMj +eMj +tIg +tIg +tIg +eMj +eMj +tIg +fsr +fsr +fsr +jbW +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(164,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +jbW +jbW +djE +mWI +xuT +xPh +xPh +jba +jba +xPh +yfV +uGn +uGn +uGn +kKc +xPh +jba +jba +xPh +xPh +djE +mWI +xuT +jbW +jbW +aab +wIX +wIX +wIX +wIX +jbW +fsr +fsr +sif +tve +rqJ +rqJ +rqJ +tve +rqJ +rqJ +rqJ +tve +jSE +fsr +fsr +jbW +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(165,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +jbW +xPh +xPh +xPh +xPh +xPh +xPh +wQv +uGn +uGn +uGn +ewt +raW +uMG +uGn +uGn +uGn +nuK +xPh +xPh +xPh +xPh +xPh +xPh +jbW +aab +wIX +wIX +wIX +wIX +jbW +jbW +jwg +tIg +rqJ +rqJ +lcd +lcd +lcd +lcd +lcd +rqJ +rqJ +tIg +jwg +jbW +jbW +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(166,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +jbW +xPh +izX +qlw +ktV +jPk +xPh +hFa +uGn +uGn +uGn +hFm +rne +fSd +uGn +uGn +uGn +dfw +xPh +jnO +eXu +qlw +bjS +xPh +jbW +aab +wIX +wIX +wIX +wIX +wIX +jbW +jwg +wOL +rqJ +uVP +jJh +cDt +tvm +cDt +sxw +ltH +rqJ +gph +jwg +jbW +wIX +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(167,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +jbW +jYR +uGn +bFM +iKE +uGn +hsP +uGn +uGn +iWD +iWD +cRB +gEd +gQp +iWD +iWD +uGn +uGn +hsP +uGn +iKE +uGn +uGn +jYR +jbW +aab +wIX +wIX +wIX +wIX +jbW +jbW +jwg +dHw +rqJ +uVP +lNt +iFq +qUM +hPR +opF +ltH +rqJ +dHw +jwg +jbW +jbW +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(168,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +jbW +xPh +xPh +xPh +xPh +xPh +xPh +uGn +fqd +oNo +cXY +bMH +oLL +sOt +bfs +oNo +ibR +uGn +xPh +xPh +xPh +xPh +xPh +xPh +jbW +aab +wIX +wIX +wIX +wIX +jbW +fsr +fsr +sif +rqJ +uVP +leI +sJx +mQx +xfH +vjw +ltH +rqJ +jSE +fsr +fsr +jbW +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(169,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +jbW +jbW +jbW +jbW +jbW +xPh +qeu +uGn +fqd +lZc +jLW +siy +jLW +siy +jLW +lZc +ibR +uGn +uGn +qeu +xPh +xPh +xPh +xPh +jbW +aab +wIX +wIX +wIX +wIX +jbW +jbW +jwg +tIg +rqJ +uVP +lNt +dbf +ymg +sVW +opF +ltH +rqJ +tIg +jwg +jbW +jbW +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(170,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +jbW +xPh +xPh +xPh +xPh +eIY +uGn +fqd +xPh +jLW +jLW +jLW +jLW +jLW +xPh +ibR +uGn +uGn +eIY +xPh +xPh +jbW +jbW +jbW +aab +wIX +wIX +wIX +wIX +wIX +jbW +jwg +wOL +rqJ +uVP +eEC +erb +fcg +erb +kCq +ltH +rqJ +gph +jwg +jbW +wIX +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(171,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +jbW +xPh +xPh +qjY +uGn +uGn +uGn +fqd +eWw +bCB +jLW +jLW +jLW +bCB +eWw +ibR +uGn +tBi +xPh +xPh +xPh +jbW +wIX +wIX +aab +wIX +wIX +wIX +wIX +jbW +jbW +jwg +dHw +rqJ +uVP +cTA +erb +erb +erb +ccS +ltH +rqJ +dHw +jwg +jbW +jbW +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(172,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +jbW +xPh +xPh +bmI +oGs +oUk +uGn +fqd +mEZ +uRL +cuS +jLW +cuS +kHz +dBI +ibR +uGn +nDQ +xPh +xPh +jbW +jbW +wIX +wIX +aab +wIX +wIX +wIX +wIX +jbW +fsr +fsr +fsr +xrt +fZw +unf +hvR +erb +wFv +iAN +wKv +xrt +fsr +fsr +fsr +jbW +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(173,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +jbW +xPh +xPh +aFO +oGs +uGe +uGn +fqd +mEZ +yel +iRL +jLW +iQd +qVl +dBI +ibR +uGn +dRL +xPh +xPh +jbW +wIX +wIX +wIX +aab +wIX +wIX +wIX +wIX +jbW +fsr +fsr +fsr +rqJ +uVP +jCG +erb +erb +erb +iAN +ltH +rqJ +fsr +fsr +fsr +jbW +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(174,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +jbW +xPh +ofj +lXF +oGs +tNu +uGn +uGn +jrB +xPh +hPl +vGh +hPl +xPh +jrB +uGn +uGn +xPh +xPh +xPh +jbW +wIX +wIX +wIX +aab +wIX +wIX +wIX +wIX +jbW +jbW +fsr +fsr +iat +cDt +krd +erb +erb +erb +snS +cDt +kTh +fsr +fsr +jbW +jbW +wIX +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(175,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +jbW +xPh +xPh +xPh +xPh +xPh +ooI +uGn +uGn +xPh +juL +pEp +coI +xPh +uGn +uGn +rpH +xPh +xPh +jbW +jbW +wIX +wIX +wIX +aab +wIX +wIX +wIX +jbW +jbW +jbW +fsr +fsr +aAD +erb +erb +erb +lKc +erb +erb +erb +vuW +fsr +fsr +jbW +jbW +jbW +wIX +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(176,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +jbW +xPh +xPh +xPh +xPh +xPh +uCq +uGn +uGn +jAN +iRL +jLW +jLW +lBm +uGn +uGn +vxa +iZO +iZO +fTE +jbW +wIX +wIX +wIX +aab +wIX +wIX +jbW +jbW +fsr +fsr +fsr +fsr +fsr +fsr +fsr +gWd +fsr +gWd +fsr +fsr +fsr +fsr +fsr +fsr +fsr +jbW +jbW +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(177,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +jbW +jbW +jbW +jbW +xPh +xPh +xPh +rjN +uGn +uvl +oLL +jLW +lBm +lBm +uGn +pDA +xPh +xPh +xPh +jbW +jbW +wIX +wIX +wIX +aab +wIX +wIX +jbW +fsr +fsr +fsr +fsr +pBe +skJ +fsr +egr +jvc +jvc +jvc +egr +fsr +rqJ +rqJ +fsr +fsr +fsr +fsr +jbW +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(178,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +wIX +wIX +jbW +xPh +xPh +xPh +fJX +uGn +jLW +uGn +uGn +uGn +jLW +uGn +lXR +xPh +xPh +xPh +jbW +wIX +wIX +wIX +wIX +aab +wIX +wIX +jbW +fsr +fsr +fsr +skJ +skJ +skJ +fsr +egr +jvc +jvc +jvc +egr +fsr +rqJ +rqJ +rqJ +fsr +fsr +fsr +jbW +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(179,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +wIX +wIX +wIX +jbW +xPh +xPh +xPh +oeQ +uGn +uGn +aHL +uGn +uGn +rte +xPh +xPh +xPh +jbW +jbW +wIX +wIX +wIX +wIX +aab +wIX +wIX +jbW +fsr +fsr +yga +skJ +skJ +skJ +gWd +jvc +jvc +jvc +jvc +jvc +gWd +rqJ +rqJ +rqJ +rqJ +fsr +fsr +jbW +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(180,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +wIX +wIX +wIX +jbW +xPh +xPh +xPh +xPh +uGn +oqQ +oCN +oqQ +uGn +xPh +xPh +xPh +xPh +jbW +wIX +wIX +wIX +wIX +wIX +aab +wIX +wIX +jbW +fsr +fsr +faY +skJ +skJ +skJ +fsr +jvc +jvc +jvc +jvc +jvc +fsr +rqJ +rqJ +rqJ +rqJ +fsr +fsr +jbW +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(181,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +wIX +wIX +wIX +wIX +jbW +xPh +xPh +xPh +ofj +xPh +xPh +xPh +ofj +xPh +xPh +xPh +jbW +jbW +wIX +wIX +wIX +wIX +wIX +aab +wIX +wIX +jbW +fsr +fsr +wRp +skJ +skJ +pUo +fsr +jvc +jvc +jvc +jvc +jvc +fsr +rqJ +rqJ +rqJ +rqJ +fsr +fsr +jbW +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(182,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +wIX +wIX +wIX +wIX +wIX +jbW +jbW +xPh +xPh +xPh +xPh +xPh +xPh +xPh +jbW +jbW +jbW +wIX +wIX +wIX +wIX +wIX +wIX +aab +wIX +wIX +jbW +fsr +fsr +fsr +fsr +fsr +fsr +fsr +fsr +oGh +fsr +oGh +fsr +fsr +fsr +fsr +fsr +fsr +fsr +fsr +jbW +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(183,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +jbW +jbW +jbW +jbW +jbW +jbW +jbW +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +wIX +aab +wIX +wIX +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +jbW +wIX +wIX +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(184,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(185,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(186,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(187,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(188,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(189,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(190,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(191,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(192,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(193,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(194,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(195,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(196,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(197,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(198,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(199,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} +(200,1,1) = {" +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +aab +"} diff --git a/maps/sierra/z7_transit.dmm b/maps/sierra/z7_transit.dmm new file mode 100644 index 0000000000000..952c4ddb5f82f --- /dev/null +++ b/maps/sierra/z7_transit.dmm @@ -0,0 +1,40730 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/step_trigger/teleporter/random{ + affect_ghosts = 0; + name = "escapeshuttle_leave"; + teleport_x = 25; + teleport_x_offset = 245; + teleport_y = 25; + teleport_y_offset = 245; + teleport_z = 9; + teleport_z_offset = 0 + }, +/turf/space{ + icon_state = "black" + }, +/area/space) +"ab" = ( +/obj/step_trigger/teleporter/random{ + affect_ghosts = 0; + name = "escapeshuttle_leave"; + teleport_x = 25; + teleport_x_offset = 245; + teleport_y = 25; + teleport_y_offset = 245; + teleport_z = 9; + teleport_z_offset = 0 + }, +/obj/step_trigger/teleporter/random{ + affect_ghosts = 0; + name = "escapeshuttle_leave"; + teleport_x = 25; + teleport_x_offset = 245; + teleport_y = 25; + teleport_y_offset = 245; + teleport_z = 9; + teleport_z_offset = 0 + }, +/turf/space{ + icon_state = "black" + }, +/area/space) +"ac" = ( +/turf/space{ + icon_state = "black" + }, +/area/space) +"af" = ( +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 8; + icon_state = "wb"; + name = "thrower_left"; + tiles = 12 + }, +/turf/space/transit/north, +/area/space) +"ag" = ( +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 2; + icon_state = "sb"; + name = "thrower_down"; + tiles = 12 + }, +/turf/space/transit/north, +/area/space) +"ah" = ( +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 4; + icon_state = "eb"; + name = "thrower_right"; + tiles = 12 + }, +/turf/space/transit/north, +/area/space) +"ai" = ( +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 2; + icon_state = "sb"; + name = "thrower_down"; + tiles = 12 + }, +/turf/space/transit/east, +/area/space) +"aj" = ( +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 1; + icon_state = "nb"; + name = "thrower_up"; + tiles = 12 + }, +/turf/space/transit/north, +/area/space) +"ak" = ( +/obj/shuttle_landmark/escape_pod/transit/pod1, +/turf/space/transit/north, +/area/space) +"al" = ( +/obj/shuttle_landmark/escape_pod/transit/pod2, +/turf/space/transit/north, +/area/space) +"am" = ( +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 2; + icon_state = "sb"; + name = "thrower_down"; + nostop = 0; + stopper = 1; + tiles = 12 + }, +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 2; + icon_state = "sb"; + name = "thrower_down"; + nostop = 0; + stopper = 1; + tiles = 12 + }, +/turf/space/transit/north, +/area/space) +"an" = ( +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 4; + icon_state = "eb"; + name = "thrower_right"; + tiles = 12 + }, +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 4; + icon_state = "eb"; + name = "thrower_right"; + tiles = 12 + }, +/turf/space/transit/north, +/area/space) +"ao" = ( +/obj/shuttle_landmark/escape_pod/transit/pod6, +/turf/space/transit/north, +/area/space) +"ap" = ( +/obj/shuttle_landmark/escape_pod/transit/pod7, +/turf/space/transit/north, +/area/space) +"aq" = ( +/obj/shuttle_landmark/escape_pod/transit/pod8, +/turf/space/transit/north, +/area/space) +"ar" = ( +/obj/shuttle_landmark/sierra/transit/exploration_shuttle, +/turf/space/transit/north, +/area/space) +"as" = ( +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 2; + icon_state = "sb"; + name = "thrower_down"; + tiles = 12 + }, +/turf/space, +/area/space) +"at" = ( +/turf/space/transit/east, +/area/space) +"au" = ( +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 2; + icon_state = "sb"; + name = "thrower_down"; + nostop = 0; + stopper = 1; + tiles = 12 + }, +/turf/space/transit/north, +/area/space) +"av" = ( +/obj/shuttle_landmark/sierra/transit/blueriver_shuttle, +/turf/space/transit/north, +/area/space) +"ax" = ( +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 4; + icon_state = "eb"; + name = "thrower_right"; + tiles = 12 + }, +/turf/space, +/area/space) +"ay" = ( +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 8; + icon_state = "wb"; + name = "thrower_left"; + tiles = 12 + }, +/turf/space, +/area/space) +"az" = ( +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 8; + icon_state = "wb"; + name = "thrower_left"; + tiles = 12 + }, +/turf/space/transit/east, +/area/space) +"aA" = ( +/obj/step_trigger/thrower{ + direction = 1; + icon_state = "nb"; + name = "thrower_up"; + nostop = 0; + tiles = 12 + }, +/turf/space/transit/north, +/area/space) +"aB" = ( +/obj/step_trigger/teleporter/random{ + affect_ghosts = 0; + name = "escapeshuttle_leave"; + teleport_x = 25; + teleport_x_offset = 245; + teleport_y = 25; + teleport_y_offset = 245; + teleport_z = 9; + teleport_z_offset = 0 + }, +/turf/space/transit/north, +/area/space) +"aC" = ( +/obj/shuttle_landmark/ninja/internim, +/turf/space/transit/north, +/area/space) +"aF" = ( +/turf/space/transit/north, +/area/space) +"aH" = ( +/obj/shuttle_landmark/escape_pod/transit/pod3, +/turf/space/transit/north, +/area/space) +"aI" = ( +/obj/shuttle_landmark/escape_pod/transit/pod4, +/turf/space/transit/north, +/area/space) +"aJ" = ( +/obj/step_trigger/thrower{ + direction = 1; + icon_state = "nb"; + name = "thrower_up"; + nostop = 0; + tiles = 12 + }, +/turf/space/transit/east, +/area/space) +"aK" = ( +/obj/step_trigger/thrower{ + affect_ghosts = 0; + direction = 2; + icon_state = "sb"; + name = "thrower_down"; + nostop = 0; + stopper = 1; + tiles = 12 + }, +/turf/space/transit/east, +/area/space) +"aN" = ( +/obj/shuttle_landmark/skipjack/internim, +/turf/space/transit/north, +/area/space) +"aO" = ( +/obj/shuttle_landmark/sierra/transit/guppy, +/turf/space/transit/north, +/area/space) +"aP" = ( +/obj/shuttle_landmark/escape_pod/transit/pod5, +/turf/space/transit/east, +/area/space) +"aR" = ( +/obj/shuttle_landmark/escape_pod/out/pod1, +/turf/space, +/area/space) +"aT" = ( +/obj/shuttle_landmark/escape_pod/out/pod2, +/turf/space, +/area/space) +"aX" = ( +/obj/shuttle_landmark/escape_pod/out/pod5, +/turf/space, +/area/space) +"ba" = ( +/turf/space, +/area/space) +"bb" = ( +/obj/shuttle_landmark/escape_pod/out/pod3, +/turf/space, +/area/space) +"bc" = ( +/obj/shuttle_landmark/escape_pod/out/pod4, +/turf/space, +/area/space) +"er" = ( +/obj/shuttle_landmark/ert/internim, +/turf/space, +/area/space) +"Cm" = ( +/obj/step_trigger/teleporter/random{ + affect_ghosts = 0; + name = "escapeshuttle_leave"; + teleport_x = 25; + teleport_x_offset = 245; + teleport_y = 25; + teleport_y_offset = 245; + teleport_z = 9; + teleport_z_offset = 0 + }, +/turf/space, +/area/space) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ba +aa +aa +aa +aa +ba +ba +aa +aa +aa +aa +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(2,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +au +au +au +au +au +au +au +au +au +au +au +au +aa +ac +aa +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aa +ba +aa +at +at +at +ba +ba +at +at +at +at +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(3,1,1) = {" +aa +aF +aF +aF +aF +au +au +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aa +ac +aa +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aA +aA +aF +aF +aF +aF +aa +ba +aa +at +at +at +ba +ba +at +at +at +at +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(4,1,1) = {" +aa +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aa +ac +aa +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aa +ba +aa +at +at +at +ba +ba +at +at +at +at +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(5,1,1) = {" +aa +aF +aF +aF +aF +af +ak +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aa +ac +aa +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aH +af +aF +aF +aF +aF +aa +ba +aa +at +at +at +ba +ba +at +at +at +at +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(6,1,1) = {" +aa +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aa +ac +aa +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aa +ba +aa +at +az +aJ +ai +ax +aJ +aK +az +at +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(7,1,1) = {" +aa +aF +aF +aF +aF +au +au +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aa +ac +aa +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aA +aA +aF +aF +aF +aF +aa +ba +aa +at +az +at +ba +aP +ba +at +az +at +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(8,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +au +au +au +au +au +au +au +au +au +au +au +au +aa +ac +aa +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +aJ +at +ba +ba +at +at +aK +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(9,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +at +at +ba +ba +at +at +at +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(10,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +au +au +au +au +au +au +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aA +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +at +at +ba +ba +at +at +at +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(11,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +au +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aA +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +at +at +ba +ba +at +at +at +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(12,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +af +ao +aF +aF +aF +au +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aA +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +at +at +ba +ba +at +at +at +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(13,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +au +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aA +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +at +at +ba +ba +at +at +at +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(14,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +au +au +au +au +au +au +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aA +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +at +at +ba +ba +at +at +at +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(15,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +au +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aA +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +at +at +ba +ba +at +at +at +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(16,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +af +ap +aF +aF +aF +au +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aA +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +at +at +ba +ba +at +at +at +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(17,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +au +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aA +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +at +at +ba +ba +at +at +at +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(18,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +au +au +au +au +au +au +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aA +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +at +at +ba +ba +at +at +at +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(19,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +au +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aA +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +ba +ba +ba +ba +ba +ba +ba +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(20,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +af +aq +aF +aF +aF +au +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aA +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +ba +ba +ba +ba +ba +ba +ba +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(21,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +au +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aA +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +ba +ba +ba +ba +ba +ba +ba +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(22,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +au +au +au +au +au +au +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aA +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +ba +ba +ba +ba +ba +ba +ba +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(23,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ac +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +aa +az +az +az +az +ay +az +az +az +az +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(24,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +au +au +au +au +au +au +au +au +au +au +au +au +aa +ac +aa +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aa +ba +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(25,1,1) = {" +aa +aF +aF +aF +aF +au +au +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aa +ac +aa +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aA +aA +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(26,1,1) = {" +aa +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aa +ac +aa +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(27,1,1) = {" +aa +aF +aF +aF +aF +af +al +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aa +ac +aa +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aI +af +aF +aF +aF +aF +aa +ba +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aR +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(28,1,1) = {" +aa +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aa +ac +aa +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(29,1,1) = {" +aa +aF +aF +aF +aF +au +au +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aa +ac +aa +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aA +aA +aF +aF +aF +aF +aa +ba +aa +aF +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(30,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +au +au +au +au +au +au +au +au +au +au +au +au +aa +ac +aa +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aa +ba +aa +aF +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(31,1,1) = {" +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ab +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ba +aa +aF +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(32,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aa +aF +aA +aF +aF +aF +aF +aF +aO +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(33,1,1) = {" +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 +aB +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aa +aF +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(34,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aa +aF +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(35,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aa +aF +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(36,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(37,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +au +au +au +au +au +au +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(38,1,1) = {" +aa +aF +aF +aF +am +au +au +au +au +au +au +au +au +au +au +au +au +af +aF +aF +aF +aF +aF +au +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(39,1,1) = {" +aa +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(40,1,1) = {" +aa +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(41,1,1) = {" +aa +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(42,1,1) = {" +aa +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(43,1,1) = {" +aa +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aF +aF +aF +aF +aF +aA +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(44,1,1) = {" +aa +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aF +aF +aF +aF +aA +aA +aF +aF +aF +aF +aA +aA +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(45,1,1) = {" +aa +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ar +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aF +aF +aF +aF +aA +aF +aF +aF +aF +aF +aF +aA +aA +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(46,1,1) = {" +aa +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +ba +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aF +aA +aA +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(47,1,1) = {" +aa +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aA +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(48,1,1) = {" +aa +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aF +aF +aA +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(49,1,1) = {" +aa +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +ba +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aF +aF +aF +aF +aA +aF +aF +aF +aC +aF +aF +aF +aF +aA +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(50,1,1) = {" +aa +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aF +aF +aA +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aT +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(51,1,1) = {" +aa +aF +aF +aF +au +au +au +au +au +au +au +au +au +au +au +au +au +ah +aF +aF +aF +aF +aF +au +au +ba +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aA +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aA +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(52,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +au +au +au +au +au +au +aF +ba +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aF +aA +aA +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(53,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aF +aF +aF +aF +aA +aF +aF +aF +aF +aF +aF +aA +aA +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(54,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aF +aF +aF +aF +aA +aA +aF +aF +aF +aF +aA +aA +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(55,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aF +aF +aF +aF +aF +aA +aA +aA +aA +aA +aA +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(56,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(57,1,1) = {" +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 +ba +ba +ba +ba +ba +ba +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(58,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +bb +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(59,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(60,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(61,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(62,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(63,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(64,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(65,1,1) = {" +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 +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(66,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +bc +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(67,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(68,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(69,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ag +ag +ag +ag +au +au +au +au +au +au +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(70,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ag +ag +ag +ag +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(71,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(72,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(73,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ag +ag +ag +ag +ag +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(74,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +ag +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(75,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +au +au +au +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(76,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(77,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(78,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(79,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(80,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aX +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(81,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +au +au +au +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(82,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +ag +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(83,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ag +ag +ag +ag +ag +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(84,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(85,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(86,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ag +ag +ag +ag +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +au +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(87,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ag +ag +ag +ag +au +au +au +au +au +au +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(88,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(89,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(90,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(91,1,1) = {" +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 +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(92,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(93,1,1) = {" +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 +Cm +Cm +Cm +ba +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 +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(94,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(95,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(96,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(97,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(98,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(99,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(100,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(101,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(102,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(103,1,1) = {" +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(104,1,1) = {" +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +as +as +as +as +as +as +as +as +as +as +as +as +as +as +as +as +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ag +ag +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(105,1,1) = {" +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +ay +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aj +aj +aj +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(106,1,1) = {" +aa +ba +ba +ba +ba +ba +ba +ba +as +as +ay +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aj +aj +aj +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(107,1,1) = {" +aa +ba +ba +ba +ba +ba +as +as +ay +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aj +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(108,1,1) = {" +aa +ba +as +as +as +as +ay +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +as +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(109,1,1) = {" +aa +ba +ay +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(110,1,1) = {" +aa +ba +ay +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(111,1,1) = {" +aa +ba +ay +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aN +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(112,1,1) = {" +aa +ba +ax +er +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(113,1,1) = {" +aa +ba +ax +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(114,1,1) = {" +aa +ba +ax +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(115,1,1) = {" +aa +ba +as +as +as +as +ax +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +as +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aj +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(116,1,1) = {" +aa +ba +ba +ba +ba +ba +as +as +ax +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aj +aj +aj +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(117,1,1) = {" +aa +ba +ba +ba +ba +ba +ba +ba +as +as +ax +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aj +aj +aj +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(118,1,1) = {" +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +ax +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ag +ag +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(119,1,1) = {" +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +as +as +as +as +as +as +as +as +as +as +as +as +as +as +as +as +as +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(120,1,1) = {" +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(121,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(122,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(123,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(124,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(125,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(126,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(127,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(128,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(129,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ba +ba +ba +aa +ba +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(130,1,1) = {" +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 +Cm +Cm +Cm +ba +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 +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(131,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(132,1,1) = {" +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 +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(133,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(134,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ag +ag +ag +ag +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(135,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +af +aF +aF +aF +aF +aF +ag +ag +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(136,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ag +ag +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(137,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(138,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +ag +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(139,1,1) = {" +aa +aF +aF +aF +aF +aF +ag +ag +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(140,1,1) = {" +aa +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(141,1,1) = {" +aa +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(142,1,1) = {" +aa +aF +aF +aF +aF +aF +af +aF +aF +aF +aF +aF +aF +aF +aF +aF +av +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(143,1,1) = {" +aa +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(144,1,1) = {" +aa +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(145,1,1) = {" +aa +aF +aF +aF +aF +aF +ag +ag +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(146,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +ag +an +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(147,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(148,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ag +ag +ah +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(149,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ah +aF +aF +aF +aF +aF +ag +ag +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(150,1,1) = {" +aa +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +aF +ag +ag +ag +ag +ag +ag +ag +aF +aF +aF +aF +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(151,1,1) = {" +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +aa +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(152,1,1) = {" +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 +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(153,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(154,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(155,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(156,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(157,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(158,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(159,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(160,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(161,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(162,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(163,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(164,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(165,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(166,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(167,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(168,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(169,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(170,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(171,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(172,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(173,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(174,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(175,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(176,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(177,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(178,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(179,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(180,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(181,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(182,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(183,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(184,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(185,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(186,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(187,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(188,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(189,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(190,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(191,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(192,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(193,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(194,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(195,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(196,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(197,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(198,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(199,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} +(200,1,1) = {" +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +ba +"} diff --git a/maps/torch/datums/department_exploration.dm b/maps/torch/datums/department_exploration.dm index a2b7c89bd8cd8..951b078f2a6e0 100644 --- a/maps/torch/datums/department_exploration.dm +++ b/maps/torch/datums/department_exploration.dm @@ -20,7 +20,7 @@ /datum/goal/department/plant_samples/New() var/total_seeds = 0 var/area/map = locate(/area/overmap) - for(var/obj/effect/overmap/visitable/sector/exoplanet/P in map) + for(var/obj/overmap/visitable/sector/exoplanet/P in map) total_seeds += length(P.seeds) if(total_seeds) seeds = max(1, round(0.5 * total_seeds)) @@ -44,7 +44,7 @@ /datum/goal/department/fauna_samples/New() var/list/total_species = list() var/area/map = locate(/area/overmap) - for(var/obj/effect/overmap/visitable/sector/exoplanet/P in map) + for(var/obj/overmap/visitable/sector/exoplanet/P in map) for(var/mob/living/simple_animal/A in P.animals) total_species |= A.type species = rand(length(total_species)) diff --git a/maps/torch/datums/game_modes/torch_meteor.dm b/maps/torch/datums/game_modes/torch_meteor.dm index 01ab4a5f99186..88b42a53b3bb4 100644 --- a/maps/torch/datums/game_modes/torch_meteor.dm +++ b/maps/torch/datums/game_modes/torch_meteor.dm @@ -16,7 +16,7 @@ GLOB.using_map.shuttle_called_message = "Attention all hands: Emergency Bluespace Drive spool up initiated. It will be ready for jump in %ETA%." GLOB.using_map.shuttle_docked_message = "Attention all hands: Bluespace Drive spooled up. Emergency bluespace jump in %ETD%." - GLOB.using_map.shuttle_leaving_dock = "Attention all hands: Emergency bluespace jump initiated, emerging in %ETA%." + GLOB.using_map.shuttle_leaving_message = "Attention all hands: Emergency bluespace jump initiated, emerging in %ETA%." /datum/game_mode/meteor/on_meteor_warn() ..() @@ -25,15 +25,15 @@ /datum/game_mode/meteor/declare_completion() var/eng_status = 0 - for(var/obj/machinery/atmospherics/unary/engine/E in SSmachines.machinery) + for(var/obj/machinery/atmospherics/unary/engine/E as anything in SSmachines.get_machinery_of_type(/obj/machinery/atmospherics/unary/engine)) if((get_z(E) in GLOB.using_map.station_levels) && !MACHINE_IS_BROKEN(E)) eng_status++ var/nav_status = FALSE - for(var/obj/machinery/computer/ship/helm/H in SSmachines.machinery) + for(var/obj/machinery/computer/ship/helm/H as anything in SSmachines.get_machinery_of_type(/obj/machinery/computer/ship/helm)) if((get_z(H) in GLOB.using_map.station_levels) && !MACHINE_IS_BROKEN(H)) nav_status = TRUE var/bsd_status = FALSE - var/area/A = locate(/area/engineering/bluespace) in world + var/area/A = locate(/area/engineering/bluespace) in GLOB.areas if(A && A.powered(EQUIP)) //There's no actual machines to check bsd_status = TRUE diff --git a/maps/torch/datums/reports/security.dm b/maps/torch/datums/reports/security.dm index 77b1e05819bc9..4dd206397d24a 100644 --- a/maps/torch/datums/reports/security.dm +++ b/maps/torch/datums/reports/security.dm @@ -15,19 +15,19 @@ /datum/computer_file/report/recipient/sec/incident/generate_fields() ..() add_field(/datum/report_field/text_label/header, "SEV Torch Security Department") - add_field(/datum/report_field/text_label/instruction, "To be filled out by Officer on duty responding to the Incident. Report must be signed and submitted before the end of the shift!") - add_field(/datum/report_field/people/from_manifest, "Reporting Officer") + add_field(/datum/report_field/text_label/instruction, "To be filled out by Security Personnel on duty responding to the Incident. Report must be signed and submitted before the end of the shift!") + add_field(/datum/report_field/people/from_manifest, "Reporting Security Personnel") add_field(/datum/report_field/simple_text, "Offense/Incident Type") add_field(/datum/report_field/date, "Date") add_field(/datum/report_field/time, "Time of incident") - add_field(/datum/report_field/people/list_from_manifest, "Assisting Officer(s)") + add_field(/datum/report_field/people/list_from_manifest, "Assisting Security Personnel") add_field(/datum/report_field/simple_text, "Location") add_field(/datum/report_field/text_label/instruction, "(V-Victim, S-Suspect, W-Witness, M-Missing, A-Arrested, RP-Reporting Person, D-Deceased)") add_field(/datum/report_field/pencode_text, "Personnel involved in Incident") add_field(/datum/report_field/text_label/instruction, "(D-Damaged, E-Evidence, L-Lost, R-Recovered, S-Stolen)") add_field(/datum/report_field/pencode_text, "Description of Items/Property") add_field(/datum/report_field/pencode_text, "Narrative") - add_field(/datum/report_field/signature, "Reporting Officer's signature") + add_field(/datum/report_field/signature, "Reporting Security Personnel's signature") set_access(access_edit = access_security) /datum/computer_file/report/recipient/sec/investigation @@ -86,7 +86,7 @@ add_field(/datum/report_field/text_label/instruction, "(D-Damaged, E-Evidence, L-Lost, R-Recovered, S-Stolen)") add_field(/datum/report_field/pencode_text, "Description of Items/Property") add_field(/datum/report_field/pencode_text, "Narrative") - add_field(/datum/report_field/text_label/instruction, "By submitting this form, I understand this is considered a formal police report. I understand that all information written above is truthful and accurate. I understand that intentionally filing a fraudulent police report is a criminal offense that will be prosecuted to the fullest extent of the law. As this is a binding legal document, I understand that by filing this form that any intentionally false information may warrant disciplinary action against myself. This statement was given on my own volition to assist with documenting the above summarized incident.") + add_field(/datum/report_field/text_label/instruction, "By submitting this form, I understand this is considered a formal security report. I understand that all information written above is truthful and accurate. I understand that intentionally filing a fraudulent security report is a criminal offense that will be prosecuted to the fullest extent of the law. As this is a binding legal document, I understand that by filing this form that any intentionally false information may warrant disciplinary action against myself. This statement was given on my own volition to assist with documenting the above summarized incident.") add_field(/datum/report_field/signature, "Signature") set_access(access_edit = access_security) @@ -98,9 +98,9 @@ /datum/computer_file/report/recipient/sec/arrest/generate_fields() ..() add_field(/datum/report_field/text_label/header, "SEV Torch Security Department") - add_field(/datum/report_field/text_label/instruction, "To be filled out by Arresting Officer or Brig Chief. Report must be signed and submitted before the end of the shift!") - add_field(/datum/report_field/people/from_manifest, "Booking Officer") - add_field(/datum/report_field/people/list_from_manifest, "Arresting Officer(s)") + add_field(/datum/report_field/text_label/instruction, "To be filled out by Arresting Security Personnel or Brig Chief. Report must be signed and submitted before the end of the shift!") + add_field(/datum/report_field/people/from_manifest, "Booking Security Personnel") + add_field(/datum/report_field/people/list_from_manifest, "Arresting Security Personnel") add_field(/datum/report_field/date, "Date") add_field(/datum/report_field/time, "Time of incident") add_field(/datum/report_field/people/from_manifest, "Arrrested Individual") @@ -118,8 +118,8 @@ add_field(/datum/report_field/simple_text, "Suit Sensors locked to MAX?") add_field(/datum/report_field/simple_text, "If needed, provided timely medical aid?") add_field(/datum/report_field/simple_text, "IF YES, what injuries are pre-existing?") - add_field(/datum/report_field/text_label/instruction, "This document MUST be submitted to, and reviwed by, the Chief of Security or Brig Chief.") - add_field(/datum/report_field/signature, "Reporting Officer's signature") + add_field(/datum/report_field/text_label/instruction, "This document MUST be submitted to, and reviewed by, the Chief of Security or Brig Chief.") + add_field(/datum/report_field/signature, "Reporting Security Personnel's signature") set_access(access_edit = access_security) /datum/computer_file/report/recipient/sec/restraining diff --git a/maps/torch/datums/supplypacks/security.dm b/maps/torch/datums/supplypacks/security.dm index 4b06c821f4f72..beea8d8f2e0fa 100644 --- a/maps/torch/datums/supplypacks/security.dm +++ b/maps/torch/datums/supplypacks/security.dm @@ -58,10 +58,10 @@ /singleton/hierarchy/supply_pack/security/pistol name = "Weapons - Ballistic sidearms" contains = list( - /obj/item/gun/projectile/pistol/m22f = 2, - /obj/item/gun/projectile/pistol/m19 = 2, - /obj/item/ammo_magazine/pistol/double = 2, - /obj/item/ammo_magazine/pistol = 2 + /obj/item/gun/projectile/pistol/m22f/empty = 2, + /obj/item/gun/projectile/pistol/m19/empty = 2, + /obj/item/storage/box/ammo/doublestack, + /obj/item/storage/box/ammo/pistol ) cost = 50 containertype = /obj/structure/closet/crate/secure/weapon @@ -107,12 +107,12 @@ /singleton/hierarchy/supply_pack/security/pdw name = "Weapons - Ballistic PDWs" - contains = list(/obj/item/gun/projectile/automatic/sec_smg = 2) + contains = list(/obj/item/gun/projectile/automatic/sec_smg/empty = 2) cost = 40 containertype = /obj/structure/closet/crate/secure/weapon containername = "\improper Ballistic PDW crate" access = access_emergency_armory - security_level = SUPPLY_SECURITY_HIGH + security_level = SUPPLY_SECURITY_ELEVATED /singleton/hierarchy/supply_pack/security/bullpup name = "Weapons - Heavy ballistic rifles" @@ -134,16 +134,22 @@ /singleton/hierarchy/supply_pack/security/pistolammo name = "Ammunition - pistol magazines" - contains = list(/obj/item/ammo_magazine/pistol/double = 4) + contains = list( + /obj/item/storage/box/ammo/pistol = 3, + /obj/item/storage/box/ammo/doublestack = 3 + ) cost = 30 containertype = /obj/structure/closet/crate/secure/weapon containername = "pistol ammunition crate" - access = access_security + access = access_hos security_level = SUPPLY_SECURITY_ELEVATED /singleton/hierarchy/supply_pack/security/pistolammorubber name = "Ammunition - pistol rubber" - contains = list(/obj/item/ammo_magazine/pistol/double/rubber = 4) + contains = list( + /obj/item/storage/box/ammo/pistol/rubber = 4, + /obj/item/storage/box/ammo/doublestack/rubber = 2 + ) cost = 20 containertype = /obj/structure/closet/crate/secure/weapon containername = "pistol rubber ammunition crate" diff --git a/maps/torch/datums/traders.dm b/maps/torch/datums/traders.dm index 03da351268155..22c89d1c6156d 100644 --- a/maps/torch/datums/traders.dm +++ b/maps/torch/datums/traders.dm @@ -12,7 +12,7 @@ /obj/item/gun/projectile/shotgun/pump = TRADER_SUBTYPES_ONLY, /obj/item/ammo_magazine = TRADER_SUBTYPES_ONLY, /obj/item/ammo_magazine/pistol/empty = TRADER_BLACKLIST, - /obj/item/ammo_magazine/mil_rifle/empty = TRADER_BLACKLIST, + /obj/item/ammo_magazine/mil_rifle/heavy/empty = TRADER_BLACKLIST, /obj/item/ammo_magazine/gyrojet/empty = TRADER_BLACKLIST, /obj/item/ammo_magazine/pistol/small/empty = TRADER_BLACKLIST, /obj/item/ammo_magazine/pistol/empty = TRADER_BLACKLIST, diff --git a/maps/torch/datums/uniforms.dm b/maps/torch/datums/uniforms.dm index 8a8a8ec2cb95b..d464d6cee8a30 100644 --- a/maps/torch/datums/uniforms.dm +++ b/maps/torch/datums/uniforms.dm @@ -17,6 +17,7 @@ var/service_skirt = null var/service_over = null var/service_shoes = null + var/service_heels = null var/service_hat = null var/service_gloves = null var/service_extra = null @@ -25,6 +26,7 @@ var/dress_skirt = null var/dress_over = null var/dress_shoes = null + var/dress_heels = null var/dress_hat = null var/dress_gloves = null var/dress_extra = null @@ -65,18 +67,26 @@ utility_under = /obj/item/clothing/under/solgov/utility/fleet utility_shoes = /obj/item/clothing/shoes/dutyboots utility_hat = /obj/item/clothing/head/solgov/utility/fleet - utility_extra = list(/obj/item/clothing/head/beret/solgov/fleet, /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet,/obj/item/clothing/head/soft/solgov/fleet) + utility_extra = list( + /obj/item/clothing/head/beret/solgov/fleet, + /obj/item/clothing/head/ushanka/solgov/fleet, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, + /obj/item/clothing/head/soft/solgov/fleet + ) service_under = /obj/item/clothing/under/solgov/service/fleet service_skirt = /obj/item/clothing/under/solgov/service/fleet/skirt - service_over = null + service_over = /obj/item/clothing/suit/storage/solgov/service/fleet service_shoes = /obj/item/clothing/shoes/dress + service_heels = /obj/item/clothing/shoes/dressheels service_hat = /obj/item/clothing/head/solgov/dress/fleet/garrison + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater) dress_under = /obj/item/clothing/under/solgov/service/fleet dress_skirt = /obj/item/clothing/under/solgov/service/fleet/skirt dress_over = /obj/item/clothing/suit/dress/solgov/fleet/sailor dress_shoes = /obj/item/clothing/shoes/dress + dress_heels = /obj/item/clothing/shoes/dressheels dress_hat = /obj/item/clothing/head/solgov/dress/fleet/garrison dress_gloves = /obj/item/clothing/gloves/white diff --git a/maps/torch/datums/uniforms_expedition.dm b/maps/torch/datums/uniforms_expedition.dm index 51f3bbd4284c3..1e8b8a05fb2f4 100644 --- a/maps/torch/datums/uniforms_expedition.dm +++ b/maps/torch/datums/uniforms_expedition.dm @@ -5,10 +5,10 @@ utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/command utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/cmd) + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/shoes/jackboots/unathi, + /obj/item/clothing/gloves/thick/duty/solgov/cmd) service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/command service_hat = /obj/item/clothing/head/solgov/service/expedition/command @@ -53,10 +53,10 @@ utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/engineering utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/engineering, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/eng) + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/shoes/jackboots/unathi, + /obj/item/clothing/gloves/thick/duty/solgov/eng) service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/engineering @@ -82,11 +82,11 @@ utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/engineering utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/beret/solgov/expedition/engineering, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/eng) + /obj/item/clothing/head/beret/solgov/expedition/engineering, + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/shoes/jackboots/unathi, + /obj/item/clothing/gloves/thick/duty/solgov/eng) service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/engineering service_hat = /obj/item/clothing/head/solgov/service/expedition/command @@ -106,9 +106,9 @@ utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/security utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/security, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/gloves/thick/duty/solgov/sec) + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/gloves/thick/duty/solgov/sec) service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/security @@ -133,11 +133,11 @@ utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/security utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/beret/solgov/expedition/security, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/sec) + /obj/item/clothing/head/beret/solgov/expedition/security, + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/shoes/jackboots/unathi, + /obj/item/clothing/gloves/thick/duty/solgov/sec) service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/security service_hat = /obj/item/clothing/head/solgov/service/expedition/command @@ -157,9 +157,9 @@ utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/medical utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/medical, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/gloves/thick/duty/solgov/med) + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/gloves/thick/duty/solgov/med) service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/medical @@ -184,11 +184,11 @@ utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/medical utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/beret/solgov/expedition/medical, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/med) + /obj/item/clothing/head/beret/solgov/expedition/medical, + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/shoes/jackboots/unathi, + /obj/item/clothing/gloves/thick/duty/solgov/med) service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/medical service_hat = /obj/item/clothing/head/solgov/service/expedition/command @@ -207,9 +207,9 @@ departments = SUP utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/supply, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/gloves/thick/duty/solgov/sup) + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/gloves/thick/duty/solgov/sup) utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/supply service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/supply @@ -235,11 +235,11 @@ utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/supply utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/beret/solgov/expedition/supply, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/sup) + /obj/item/clothing/head/beret/solgov/expedition/supply, + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/shoes/jackboots/unathi, + /obj/item/clothing/gloves/thick/duty/solgov/sup) service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/service service_hat = /obj/item/clothing/head/solgov/service/expedition/command @@ -254,9 +254,9 @@ departments = SRV utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/service, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/gloves/thick/duty/solgov/svc) + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/gloves/thick/duty/solgov/svc) utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/service service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/service @@ -282,11 +282,11 @@ utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/service utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/beret/solgov/expedition/service, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/svc) + /obj/item/clothing/head/beret/solgov/expedition/service, + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/shoes/jackboots/unathi, + /obj/item/clothing/gloves/thick/duty/solgov/svc) service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/service service_hat = /obj/item/clothing/head/solgov/service/expedition/command @@ -301,9 +301,9 @@ departments = EXP utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/exploration, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/gloves/thick/duty/solgov/exp) + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/gloves/thick/duty/solgov/exp) utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/exploration service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/exploration @@ -329,11 +329,11 @@ utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/exploration utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/beret/solgov/expedition/exploration, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/exp) + /obj/item/clothing/head/beret/solgov/expedition/exploration, + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/shoes/jackboots/unathi, + /obj/item/clothing/gloves/thick/duty/solgov/exp) service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/exploration service_hat = /obj/item/clothing/head/solgov/service/expedition/command @@ -349,10 +349,10 @@ utility_under= /obj/item/clothing/under/solgov/utility/expeditionary/command utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/shoes/jackboots/unathi, - /obj/item/clothing/gloves/thick/duty/solgov/cmd) + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/shoes/jackboots/unathi, + /obj/item/clothing/gloves/thick/duty/solgov/cmd) service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/command @@ -391,9 +391,9 @@ utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/research utility_extra = list(/obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/suit/storage/toggle/labcoat/science/ec, - /obj/item/clothing/gloves/thick/duty/solgov/sci) + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/suit/storage/toggle/labcoat/science/ec, + /obj/item/clothing/gloves/thick/duty/solgov/sci) service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/research @@ -418,10 +418,10 @@ utility_under = /obj/item/clothing/under/solgov/utility/expeditionary/officer/research utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/suit/storage/toggle/labcoat/science/ec, - /obj/item/clothing/gloves/thick/duty/solgov/sci) + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/suit/storage/toggle/labcoat/science/ec, + /obj/item/clothing/gloves/thick/duty/solgov/sci) service_over = /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/research service_hat = /obj/item/clothing/head/solgov/service/expedition/command @@ -436,8 +436,8 @@ departments = SCI|COM utility_extra = list(/obj/item/clothing/head/beret/solgov/expedition/command, - /obj/item/clothing/head/ushanka/solgov, - /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, - /obj/item/clothing/suit/storage/toggle/labcoat/science/ec, - /obj/item/clothing/suit/storage/toggle/labcoat/rd/ec, - /obj/item/clothing/gloves/thick/duty/solgov/sci) + /obj/item/clothing/head/ushanka/solgov, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov, + /obj/item/clothing/suit/storage/toggle/labcoat/science/ec, + /obj/item/clothing/suit/storage/toggle/labcoat/rd/ec, + /obj/item/clothing/gloves/thick/duty/solgov/sci) diff --git a/maps/torch/datums/uniforms_fleet.dm b/maps/torch/datums/uniforms_fleet.dm index 647e242e2fffd..29f598a9ee909 100644 --- a/maps/torch/datums/uniforms_fleet.dm +++ b/maps/torch/datums/uniforms_fleet.dm @@ -9,11 +9,12 @@ /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) service_hat = /obj/item/clothing/head/solgov/dress/fleet/command service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/officer) dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command @@ -27,6 +28,8 @@ min_rank = 15 service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/command + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/command) + dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/command /singleton/hierarchy/mil_uniform/fleet/com/flagofficer @@ -34,6 +37,8 @@ min_rank = 17 service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/flag + service_extra = /obj/item/clothing/suit/solgov/fleet_sweater/flag + dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/flag /singleton/hierarchy/mil_uniform/fleet/eng @@ -47,7 +52,7 @@ /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) /singleton/hierarchy/mil_uniform/fleet/eng/noncom @@ -58,6 +63,8 @@ service_over = /obj/item/clothing/suit/storage/solgov/service/fleet dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet + dress_hat = /obj/item/clothing/head/solgov/dress/fleet + dress_extra = list(/obj/item/clothing/head/beret/solgov/fleet/dress) /singleton/hierarchy/mil_uniform/fleet/eng/snco name = "Fleet engineering SNCO" @@ -67,7 +74,6 @@ service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/snco dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/snco - dress_hat = /obj/item/clothing/head/solgov/dress/fleet dress_extra = list( /obj/item/material/sword/replica/officersword/pettyofficer, /obj/item/clothing/head/beret/solgov/fleet/dress @@ -84,11 +90,12 @@ /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) service_hat = /obj/item/clothing/head/solgov/dress/fleet/command service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/officer) dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command @@ -106,6 +113,8 @@ min_rank = 15 service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/command + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/command) + dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/command /singleton/hierarchy/mil_uniform/fleet/eng/officer/com/flagofficer @@ -113,6 +122,8 @@ min_rank = 17 service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/flag + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/flag) + dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/flag /singleton/hierarchy/mil_uniform/fleet/sec @@ -126,7 +137,7 @@ /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) @@ -138,9 +149,8 @@ service_over = /obj/item/clothing/suit/storage/solgov/service/fleet dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet - dress_extra = list( - /obj/item/clothing/head/beret/solgov/fleet/dress - ) + dress_hat = /obj/item/clothing/head/solgov/dress/fleet + dress_extra = list(/obj/item/clothing/head/beret/solgov/fleet/dress) /singleton/hierarchy/mil_uniform/fleet/sec/snco @@ -151,7 +161,6 @@ service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/snco dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/snco - dress_hat = /obj/item/clothing/head/solgov/dress/fleet dress_extra = list( /obj/item/material/sword/replica/officersword/pettyofficer, /obj/item/clothing/head/beret/solgov/fleet/dress @@ -168,15 +177,19 @@ /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) service_hat = /obj/item/clothing/head/solgov/dress/fleet/command service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/officer) dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) + dress_extra = list( + /obj/item/material/sword/replica/officersword, + /obj/item/clothing/head/beret/solgov/fleet/dress/command + ) /singleton/hierarchy/mil_uniform/fleet/sec/officer/com //Can only be officers name = "Fleet security command" @@ -187,6 +200,8 @@ min_rank = 15 service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/command + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/command) + dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/command /singleton/hierarchy/mil_uniform/fleet/sec/officer/com/flagofficer @@ -194,6 +209,8 @@ min_rank = 17 service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/flag + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/flag) + dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/flag /singleton/hierarchy/mil_uniform/fleet/med @@ -207,7 +224,7 @@ /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) /singleton/hierarchy/mil_uniform/fleet/med/noncom @@ -218,7 +235,8 @@ service_over = /obj/item/clothing/suit/storage/solgov/service/fleet dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet - dress_extra = /obj/item/clothing/head/beret/solgov/fleet/dress + dress_hat = /obj/item/clothing/head/solgov/dress/fleet + dress_extra = list(/obj/item/clothing/head/beret/solgov/fleet/dress) /singleton/hierarchy/mil_uniform/fleet/med/snco name = "Fleet medical SNCO" @@ -228,8 +246,10 @@ service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/snco dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/snco - dress_hat = /obj/item/clothing/head/solgov/dress/fleet - dress_extra = list(/obj/item/material/sword/replica/officersword/pettyofficer, /obj/item/clothing/head/beret/solgov/fleet/dress) + dress_extra = list( + /obj/item/material/sword/replica/officersword/pettyofficer, + /obj/item/clothing/head/beret/solgov/fleet/dress + ) /singleton/hierarchy/mil_uniform/fleet/med/officer name = "Fleet medical CO" @@ -242,15 +262,19 @@ /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) service_hat = /obj/item/clothing/head/solgov/dress/fleet/command service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/officer) dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) + dress_extra = list( + /obj/item/material/sword/replica/officersword, + /obj/item/clothing/head/beret/solgov/fleet/dress/command + ) /singleton/hierarchy/mil_uniform/fleet/med/officer/com //Can only be officers name = "Fleet medical command" @@ -261,6 +285,8 @@ min_rank = 15 service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/command + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/command) + dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/command /singleton/hierarchy/mil_uniform/fleet/med/officer/com/flagofficer @@ -268,6 +294,8 @@ min_rank = 17 service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/flag + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/flag) + dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/flag /singleton/hierarchy/mil_uniform/fleet/sup @@ -281,7 +309,7 @@ /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) /singleton/hierarchy/mil_uniform/fleet/sup/noncom @@ -292,7 +320,8 @@ service_over = /obj/item/clothing/suit/storage/solgov/service/fleet dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet - dress_extra = /obj/item/clothing/head/beret/solgov/fleet/dress + dress_hat = /obj/item/clothing/head/solgov/dress/fleet + dress_extra = list(/obj/item/clothing/head/beret/solgov/fleet/dress) /singleton/hierarchy/mil_uniform/fleet/sup/snco name = "Fleet supply SNCO" @@ -302,8 +331,10 @@ service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/snco dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/snco - dress_hat = /obj/item/clothing/head/solgov/dress/fleet - dress_extra = list(/obj/item/material/sword/replica/officersword/pettyofficer, /obj/item/clothing/head/beret/solgov/fleet/dress) + dress_extra = list( + /obj/item/material/sword/replica/officersword/pettyofficer, + /obj/item/clothing/head/beret/solgov/fleet/dress + ) /singleton/hierarchy/mil_uniform/fleet/sup/officer name = "Fleet supply CO" @@ -316,15 +347,19 @@ /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) service_hat = /obj/item/clothing/head/solgov/dress/fleet/command service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/officer) dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) + dress_extra = list( + /obj/item/material/sword/replica/officersword, + /obj/item/clothing/head/beret/solgov/fleet/dress/command + ) /singleton/hierarchy/mil_uniform/fleet/sup/seniorofficer name = "Fleet supply senior command" @@ -332,10 +367,14 @@ service_hat = /obj/item/clothing/head/solgov/dress/fleet/command service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/command + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/command) dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/command dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) + dress_extra = list( + /obj/item/material/sword/replica/officersword, + /obj/item/clothing/head/beret/solgov/fleet/dress/command + ) /singleton/hierarchy/mil_uniform/fleet/sup/flagofficer name = "Fleet spply flag command" @@ -343,10 +382,14 @@ service_hat = /obj/item/clothing/head/solgov/dress/fleet/command service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/flag + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/flag) dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/flag dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) + dress_extra = list( + /obj/item/material/sword/replica/officersword, + /obj/item/clothing/head/beret/solgov/fleet/dress/command + ) /singleton/hierarchy/mil_uniform/fleet/srv name = "Fleet service" @@ -359,7 +402,7 @@ /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) /singleton/hierarchy/mil_uniform/fleet/srv/noncom @@ -370,7 +413,8 @@ service_over = /obj/item/clothing/suit/storage/solgov/service/fleet dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet - dress_extra = /obj/item/clothing/head/beret/solgov/fleet/dress + dress_hat = /obj/item/clothing/head/solgov/dress/fleet + dress_extra = list(/obj/item/clothing/head/beret/solgov/fleet/dress) /singleton/hierarchy/mil_uniform/fleet/srv/snco @@ -381,8 +425,10 @@ service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/snco dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/snco - dress_hat = /obj/item/clothing/head/solgov/dress/fleet - dress_extra = list(/obj/item/material/sword/replica/officersword/pettyofficer, /obj/item/clothing/head/beret/solgov/fleet/dress) + dress_extra = list( + /obj/item/material/sword/replica/officersword/pettyofficer, + /obj/item/clothing/head/beret/solgov/fleet/dress + ) /singleton/hierarchy/mil_uniform/fleet/srv/officer name = "Fleet service CO" @@ -395,15 +441,19 @@ /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) service_hat = /obj/item/clothing/head/solgov/dress/fleet/command service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/officer) dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) + dress_extra = list( + /obj/item/material/sword/replica/officersword, + /obj/item/clothing/head/beret/solgov/fleet/dress/command + ) /singleton/hierarchy/mil_uniform/fleet/exp name = "Fleet exploration" @@ -416,7 +466,7 @@ /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) /singleton/hierarchy/mil_uniform/fleet/exp/noncom @@ -427,7 +477,8 @@ service_over = /obj/item/clothing/suit/storage/solgov/service/fleet dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet - dress_extra = /obj/item/clothing/head/beret/solgov/fleet/dress + dress_hat = /obj/item/clothing/head/solgov/dress/fleet + dress_extra = list(/obj/item/clothing/head/beret/solgov/fleet/dress) /singleton/hierarchy/mil_uniform/fleet/exp/snco @@ -438,8 +489,10 @@ service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/snco dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/snco - dress_hat = /obj/item/clothing/head/solgov/dress/fleet - dress_extra = list(/obj/item/material/sword/replica/officersword/pettyofficer, /obj/item/clothing/head/beret/solgov/fleet/dress) + dress_extra = list( + /obj/item/material/sword/replica/officersword/pettyofficer, + /obj/item/clothing/head/beret/solgov/fleet/dress + ) /singleton/hierarchy/mil_uniform/fleet/exp/officer name = "Fleet exploration CO" @@ -452,15 +505,19 @@ /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) service_hat = /obj/item/clothing/head/solgov/dress/fleet/command service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/officer) dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) + dress_extra = list( + /obj/item/material/sword/replica/officersword, + /obj/item/clothing/head/beret/solgov/fleet/dress/command + ) /singleton/hierarchy/mil_uniform/fleet/spt name = "Fleet command support" @@ -469,11 +526,11 @@ utility_under = /obj/item/clothing/under/solgov/utility/fleet/command utility_extra = list( /obj/item/clothing/under/solgov/utility/fleet/combat/command, - /obj/item/clothing/head/beret/solgov/fleet/command, + /obj/item/clothing/head/beret/solgov/fleet, /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) /singleton/hierarchy/mil_uniform/fleet/spt/noncom @@ -484,7 +541,8 @@ service_over = /obj/item/clothing/suit/storage/solgov/service/fleet dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet - dress_extra = /obj/item/clothing/head/beret/solgov/fleet/dress + dress_hat = /obj/item/clothing/head/solgov/dress/fleet + dress_extra = list(/obj/item/clothing/head/beret/solgov/fleet/dress) /singleton/hierarchy/mil_uniform/fleet/spt/snco @@ -495,8 +553,10 @@ service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/snco dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/snco - dress_hat = /obj/item/clothing/head/solgov/dress/fleet - dress_extra = list(/obj/item/material/sword/replica/officersword/pettyofficer, /obj/item/clothing/head/beret/solgov/fleet/dress) + dress_extra = list( + /obj/item/material/sword/replica/officersword/pettyofficer, + /obj/item/clothing/head/beret/solgov/fleet/dress + ) /singleton/hierarchy/mil_uniform/fleet/spt/officer name = "Fleet command support CO" @@ -509,15 +569,19 @@ /obj/item/clothing/head/ushanka/solgov/fleet, /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet, /obj/item/clothing/head/soft/solgov/fleet, - /obj/item/clothing/gloves/thick + /obj/item/clothing/gloves/thick/duty/solgov/fleet ) service_hat = /obj/item/clothing/head/solgov/dress/fleet/command service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/officer + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/officer) dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/officer dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) + dress_extra = list( + /obj/item/material/sword/replica/officersword, + /obj/item/clothing/head/beret/solgov/fleet/dress/command + ) /singleton/hierarchy/mil_uniform/fleet/spt/seniorofficer name = "Fleet senior command support" @@ -525,11 +589,14 @@ service_hat = /obj/item/clothing/head/solgov/dress/fleet/command service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/command - + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/command) dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/command dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) + dress_extra = list( + /obj/item/material/sword/replica/officersword, + /obj/item/clothing/head/beret/solgov/fleet/dress/command + ) /singleton/hierarchy/mil_uniform/fleet/spt/flagofficer name = "Fleet flag command support" @@ -537,7 +604,11 @@ service_hat = /obj/item/clothing/head/solgov/dress/fleet/command service_over = /obj/item/clothing/suit/storage/solgov/service/fleet/flag + service_extra = list(/obj/item/clothing/suit/solgov/fleet_sweater/flag) dress_over = /obj/item/clothing/suit/storage/solgov/dress/fleet/flag dress_hat = /obj/item/clothing/head/solgov/dress/fleet/command - dress_extra = list(/obj/item/material/sword/replica/officersword, /obj/item/clothing/head/beret/solgov/fleet/dress/command) + dress_extra = list( + /obj/item/material/sword/replica/officersword, + /obj/item/clothing/head/beret/solgov/fleet/dress/command + ) diff --git a/maps/torch/icons/mob/onmob_accessories_solgov.dmi b/maps/torch/icons/mob/onmob_accessories_solgov.dmi index 7e448d5a1bebb..68ff35a6c6b1a 100644 Binary files a/maps/torch/icons/mob/onmob_accessories_solgov.dmi and b/maps/torch/icons/mob/onmob_accessories_solgov.dmi differ diff --git a/maps/torch/icons/mob/onmob_hands_solgov.dmi b/maps/torch/icons/mob/onmob_hands_solgov.dmi index 9f4a5ceba2c28..70a9369419fba 100644 Binary files a/maps/torch/icons/mob/onmob_hands_solgov.dmi and b/maps/torch/icons/mob/onmob_hands_solgov.dmi differ diff --git a/maps/torch/icons/mob/onmob_head_solgov.dmi b/maps/torch/icons/mob/onmob_head_solgov.dmi index 8413400fb408c..0aef6f3145480 100644 Binary files a/maps/torch/icons/mob/onmob_head_solgov.dmi and b/maps/torch/icons/mob/onmob_head_solgov.dmi differ diff --git a/maps/torch/icons/mob/onmob_suit_solgov.dmi b/maps/torch/icons/mob/onmob_suit_solgov.dmi index 86c3f9e59e451..1eb012aefffef 100644 Binary files a/maps/torch/icons/mob/onmob_suit_solgov.dmi and b/maps/torch/icons/mob/onmob_suit_solgov.dmi differ diff --git a/maps/torch/icons/mob/onmob_under_solgov.dmi b/maps/torch/icons/mob/onmob_under_solgov.dmi index af7d2a2969c7e..7642bf30687be 100644 Binary files a/maps/torch/icons/mob/onmob_under_solgov.dmi and b/maps/torch/icons/mob/onmob_under_solgov.dmi differ diff --git a/maps/torch/icons/mob/unathi/onmob_accessories_solgov_unathi.dmi b/maps/torch/icons/mob/unathi/onmob_accessories_solgov_unathi.dmi new file mode 100644 index 0000000000000..b4b55b8c17c53 Binary files /dev/null and b/maps/torch/icons/mob/unathi/onmob_accessories_solgov_unathi.dmi differ diff --git a/maps/torch/icons/mob/unathi/onmob_hands_solgov_unathi.dmi b/maps/torch/icons/mob/unathi/onmob_hands_solgov_unathi.dmi new file mode 100644 index 0000000000000..5df5a13892751 Binary files /dev/null and b/maps/torch/icons/mob/unathi/onmob_hands_solgov_unathi.dmi differ diff --git a/maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi b/maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi index 238e87b69d3b4..8c8740360d269 100644 Binary files a/maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi and b/maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi differ diff --git a/maps/torch/icons/mob/unathi/onmob_head_spacesuits_solgov_unathi.dmi b/maps/torch/icons/mob/unathi/onmob_head_spacesuits_solgov_unathi.dmi new file mode 100644 index 0000000000000..238e87b69d3b4 Binary files /dev/null and b/maps/torch/icons/mob/unathi/onmob_head_spacesuits_solgov_unathi.dmi differ diff --git a/maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi b/maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi index b46e490c6e55b..cd8d4c97c9b19 100644 Binary files a/maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi and b/maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi differ diff --git a/maps/torch/icons/mob/unathi/onmob_suit_spacesuits_solgov_unathi.dmi b/maps/torch/icons/mob/unathi/onmob_suit_spacesuits_solgov_unathi.dmi new file mode 100644 index 0000000000000..b46e490c6e55b Binary files /dev/null and b/maps/torch/icons/mob/unathi/onmob_suit_spacesuits_solgov_unathi.dmi differ diff --git a/maps/torch/icons/mob/unathi/onmob_under_solgov_unathi.dmi b/maps/torch/icons/mob/unathi/onmob_under_solgov_unathi.dmi new file mode 100644 index 0000000000000..00a48fcf15b58 Binary files /dev/null and b/maps/torch/icons/mob/unathi/onmob_under_solgov_unathi.dmi differ diff --git a/maps/torch/icons/obj/coins.dmi b/maps/torch/icons/obj/coins.dmi index 6529bfe796c45..082202db13a30 100644 Binary files a/maps/torch/icons/obj/coins.dmi and b/maps/torch/icons/obj/coins.dmi differ diff --git a/maps/torch/icons/obj/obj_accessories_solgov.dmi b/maps/torch/icons/obj/obj_accessories_solgov.dmi index 61ff025da811c..4fd2842405612 100644 Binary files a/maps/torch/icons/obj/obj_accessories_solgov.dmi and b/maps/torch/icons/obj/obj_accessories_solgov.dmi differ diff --git a/maps/torch/icons/obj/obj_hands_solgov.dmi b/maps/torch/icons/obj/obj_hands_solgov.dmi index 8b889035b6eaf..52f114f3b242c 100644 Binary files a/maps/torch/icons/obj/obj_hands_solgov.dmi and b/maps/torch/icons/obj/obj_hands_solgov.dmi differ diff --git a/maps/torch/icons/obj/obj_head_solgov.dmi b/maps/torch/icons/obj/obj_head_solgov.dmi index 3116ecbec9ab5..11ae77d105099 100644 Binary files a/maps/torch/icons/obj/obj_head_solgov.dmi and b/maps/torch/icons/obj/obj_head_solgov.dmi differ diff --git a/maps/torch/icons/obj/obj_suit_solgov.dmi b/maps/torch/icons/obj/obj_suit_solgov.dmi index 49eb47cddbd3c..482f3e90c03bc 100644 Binary files a/maps/torch/icons/obj/obj_suit_solgov.dmi and b/maps/torch/icons/obj/obj_suit_solgov.dmi differ diff --git a/maps/torch/items/cards_ids.dm b/maps/torch/items/cards_ids.dm index 8d5e401622924..13761fcb2ab0e 100644 --- a/maps/torch/items/cards_ids.dm +++ b/maps/torch/items/cards_ids.dm @@ -176,7 +176,7 @@ /obj/item/card/id/torch/crew/research/scientist job_access_type = /datum/job/scientist -//NanoTrasen and Passengers +//Nanotrasen and Passengers /obj/item/card/id/torch/passenger desc = "A card issued to passengers aboard the SEV Torch." diff --git a/maps/torch/items/clothing/solgov-accessory.dm b/maps/torch/items/clothing/solgov-accessory.dm index 60895e83e2607..e9a281f8467d5 100644 --- a/maps/torch/items/clothing/solgov-accessory.dm +++ b/maps/torch/items/clothing/solgov-accessory.dm @@ -3,6 +3,9 @@ icon = 'maps/torch/icons/obj/obj_accessories_solgov.dmi' accessory_icons = list(slot_w_uniform_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi', slot_wear_suit_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi') w_class = ITEM_SIZE_TINY + sprite_sheets = list( + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_accessories_solgov_unathi.dmi' + ) /***** medals @@ -87,9 +90,6 @@ patches icon_state = "torchpatch" on_rolled_down = ACCESSORY_ROLLED_NONE slot = ACCESSORY_SLOT_INSIGNIA - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_accessories_sol_unathi.dmi' - ) /obj/item/clothing/accessory/solgov/ec_patch name = "\improper Observatory patch" @@ -121,7 +121,7 @@ patches /obj/item/clothing/accessory/solgov/fleet_patch/second name = "\improper Second Fleet patch" - desc = "A well-worn shoulder patch carrying insignia of Second Fleet, the Home Guard, tasked with defense of Sol territories." + desc = "A well-worn shoulder patch carrying insignia of Second Fleet, the Home Defense Group, tasked with defense of Sol territories." icon_state = "fleetpatch2" /obj/item/clothing/accessory/solgov/fleet_patch/third @@ -147,6 +147,9 @@ scarves desc = "An SCG blue silk scarf, meant to be worn with Expeditionary Corps uniforms." icon = 'icons/obj/clothing/obj_accessories.dmi' accessory_icons = list(slot_w_uniform_str = 'icons/mob/onmob/onmob_accessories.dmi', slot_wear_suit_str = 'icons/mob/onmob/onmob_accessories.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_accessories_unathi.dmi' + ) icon_state = "whitescarf" on_rolled_down = ACCESSORY_ROLLED_NONE color = "#68a0ce" @@ -381,9 +384,6 @@ armbands name = "master solgov armband" icon = 'maps/torch/icons/obj/obj_accessories_solgov.dmi' accessory_icons = list(slot_w_uniform_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi', slot_wear_suit_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi') - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_accessories_sol_unathi.dmi' - ) /obj/item/clothing/accessory/armband/solgov/mp name = "military police brassard" @@ -417,6 +417,11 @@ armour attachments desc = "An emblem depicting the crest of the SCG Expeditionary Corps." icon_state = "ecflag" +/obj/item/clothing/accessory/armor_tag/solgov/fleet + name = "\improper Fleet crest" + desc = "An emblem depicting the crest of the SCG Fleet." + icon_state = "fleetflag" + /obj/item/clothing/accessory/armor_tag/solgov/sec name = "\improper POLICE tag" desc = "An armor tag with the word POLICE printed in silver lettering on it." @@ -441,6 +446,11 @@ armour attachments name = "\improper POLICE tag" desc = "An armor tag with the words POLICE printed in gold lettering on it." +/obj/item/clothing/accessory/armor_tag/solgov/lead + name = "\improper LEAD tag" + desc = "An armor tag denoting the leader of a fireteam." + icon_state = "leadtag" + /obj/item/clothing/accessory/helmet_cover/blue/sol name = "peacekeeper helmet cover" desc = "A fabric cover for armored helmets. This one is in SCG peacekeeper colors." @@ -456,9 +466,6 @@ department tags on_rolled_sleeves = "dept_exped_sleeves" slot = ACCESSORY_SLOT_DEPT accessory_flags = EMPTY_BITFIELD - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_accessories_sol_unathi.dmi' - ) /obj/item/clothing/accessory/solgov/department/command name = "command insignia" @@ -473,9 +480,6 @@ department tags desc = "Insignia denoting assignment to the command department. These fit Fleet uniforms." on_rolled_sleeves = "dept_fleet_sleeves" -/obj/item/clothing/accessory/solgov/department/command/army - icon_state = "dept_army" - desc = "Insignia denoting assignment to the command department. These fit Army uniforms." /obj/item/clothing/accessory/solgov/department/engineering name = "engineering insignia" @@ -490,9 +494,6 @@ department tags desc = "Insignia denoting assignment to the engineering department. These fit Fleet uniforms." on_rolled_sleeves = "dept_fleet_sleeves" -/obj/item/clothing/accessory/solgov/department/engineering/army - icon_state = "dept_army" - desc = "Insignia denoting assignment to the engineering department. These fit Army uniforms." /obj/item/clothing/accessory/solgov/department/security name = "security insignia" @@ -507,9 +508,6 @@ department tags desc = "Insignia denoting assignment to the security department. These fit Fleet uniforms." on_rolled_sleeves = "dept_fleet_sleeves" -/obj/item/clothing/accessory/solgov/department/security/army - icon_state = "dept_army" - desc = "Insignia denoting assignment to the security department. These fit Army uniforms." /obj/item/clothing/accessory/solgov/department/medical name = "medical insignia" @@ -525,9 +523,6 @@ department tags desc = "Insignia denoting assignment to the medical department. These fit Fleet uniforms." on_rolled_sleeves = "dept_fleet_sleeves" -/obj/item/clothing/accessory/solgov/department/medical/army - icon_state = "dept_army" - desc = "Insignia denoting assignment to the medical department. These fit Army uniforms." /obj/item/clothing/accessory/solgov/department/supply name = "supply insignia" @@ -542,9 +537,6 @@ department tags desc = "Insignia denoting assignment to the supply department. These fit Fleet uniforms." on_rolled_sleeves = "dept_fleet_sleeves" -/obj/item/clothing/accessory/solgov/department/supply/army - icon_state = "dept_army" - desc = "Insignia denoting assignment to the supply department. These fit Army uniforms." /obj/item/clothing/accessory/solgov/department/service name = "service insignia" @@ -559,9 +551,6 @@ department tags desc = "Insignia denoting assignment to the service department. These fit Fleet uniforms." on_rolled_sleeves = "dept_fleet_sleeves" -/obj/item/clothing/accessory/solgov/department/service/army - icon_state = "dept_army" - desc = "Insignia denoting assignment to the service department. These fit Army uniforms." /obj/item/clothing/accessory/solgov/department/exploration name = "exploration insignia" @@ -576,9 +565,6 @@ department tags desc = "Insignia denoting assignment to the exploration department. These fit Fleet uniforms." on_rolled_sleeves = "dept_fleet_sleeves" -/obj/item/clothing/accessory/solgov/department/exploration/army - icon_state = "dept_army" - desc = "Insignia denoting assignment to the exploration department. These fit Army uniforms." /obj/item/clothing/accessory/solgov/department/research name = "research insignia" @@ -600,9 +586,6 @@ ranks - ec slot = ACCESSORY_SLOT_RANK gender = PLURAL accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_accessories_sol_unathi.dmi' - ) /obj/item/clothing/accessory/solgov/rank/ec name = "explorer ranks" @@ -791,106 +774,3 @@ ranks - fleet name = "ranks (O-10 fleet admiral)" desc = "Insignia denoting the rank of Fleet Admiral." icon_state = "fleetrank_o10" - -/************** -ranks - marines -**************/ -/obj/item/clothing/accessory/solgov/rank/army - name = "army ranks" - desc = "Insignia denoting marine rank of some kind. These appear blank." - icon_state = "armyrank_enlisted" - -/obj/item/clothing/accessory/solgov/rank/army/enlisted - name = "ranks (E-1 private)" - desc = "Insignia denoting the rank of Private." - icon_state = "armyrank_enlisted" - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e2 - name = "ranks (E-2 private second class)" - desc = "Insignia denoting the rank of Private Second Class." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e3 - name = "ranks (E-3 private first class)" - desc = "Insignia denoting the rank of Private First Class." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e4 - name = "ranks (E-4 corporal)" - desc = "Insignia denoting the rank of Corporal." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e5 - name = "ranks (E-5 sergeant)" - desc = "Insignia denoting the rank of Sergeant." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e6 - name = "ranks (E-6 staff sergeant)" - desc = "Insignia denoting the rank of Staff Sergeant." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e7 - name = "ranks (E-7 sergeant first class)" - desc = "Insignia denoting the rank of Sergeant First Class." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e8 - name = "ranks (E-8 master sergeant)" - desc = "Insignia denoting the rank of Master Sergeant." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e8_alt - name = "ranks (E-8 first sergeant)" - desc = "Insignia denoting the rank of First Sergeant." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e9 - name = "ranks (E-9 sergeant major)" - desc = "Insignia denoting the rank of Sergeant Major." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e9_alt1 - name = "ranks (E-9 command sergeant major)" - desc = "Insignia denoting the rank of Command Sergeant Major." - -/obj/item/clothing/accessory/solgov/rank/army/enlisted/e9_alt2 - name = "ranks (E-9 sergeant major of the Army)" - desc = "Insignia denoting the rank of Sergeant Major of the Army." - -/obj/item/clothing/accessory/solgov/rank/army/officer - name = "ranks (O-1 second lieutenant)" - desc = "Insignia denoting the rank of Second Lieutenant." - icon_state = "armyrank_officer" - -/obj/item/clothing/accessory/solgov/rank/army/officer/o2 - name = "ranks (O-2 first lieutenant)" - desc = "Insignia denoting the rank of First Lieutenant." - -/obj/item/clothing/accessory/solgov/rank/army/officer/o3 - name = "ranks (O-3 captain)" - desc = "Insignia denoting the rank of Captain." - -/obj/item/clothing/accessory/solgov/rank/army/officer/o4 - name = "ranks (O-4 major)" - desc = "Insignia denoting the rank of Major." - -/obj/item/clothing/accessory/solgov/rank/army/officer/o5 - name = "ranks (O-5 lieutenant colonel)" - desc = "Insignia denoting the rank of Lieutenant Colonel." - -/obj/item/clothing/accessory/solgov/rank/army/officer/o6 - name = "ranks (O-6 colonel)" - desc = "Insignia denoting the rank of Colonel." - -/obj/item/clothing/accessory/solgov/rank/army/flag - name = "ranks (O-7 brigadier general)" - desc = "Insignia denoting the rank of Brigadier General." - icon_state = "armyrank_command" - -/obj/item/clothing/accessory/solgov/rank/army/flag/o8 - name = "ranks (O-8 major general)" - desc = "Insignia denoting the rank of Major General." - -/obj/item/clothing/accessory/solgov/rank/army/flag/o9 - name = "ranks (O-9 lieutenant general)" - desc = "Insignia denoting the rank of lieutenant general." - -/obj/item/clothing/accessory/solgov/rank/army/flag/o10 - name = "ranks (O-10 general)" - desc = "Insignia denoting the rank of General." - -/obj/item/clothing/accessory/solgov/rank/army/flag/o10_alt - name = "ranks (O-10 field marshal)" - desc = "Insignia denoting the rank of Field Marshal." diff --git a/maps/torch/items/clothing/solgov-armor.dm b/maps/torch/items/clothing/solgov-armor.dm index 85990e7c9da56..f6e4ec26ca030 100644 --- a/maps/torch/items/clothing/solgov-armor.dm +++ b/maps/torch/items/clothing/solgov-armor.dm @@ -4,6 +4,9 @@ icon_state = "solvest" icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi' + ) /obj/item/clothing/suit/storage/vest/solgov name = "\improper Sol Central Government heavy armored vest" @@ -11,6 +14,9 @@ icon_state = "solwebvest" icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi' + ) /obj/item/clothing/suit/storage/vest/solgov/security name = "master at arms heavy armored vest" diff --git a/maps/torch/items/clothing/solgov-feet.dm b/maps/torch/items/clothing/solgov-feet.dm index e6606bce5e413..2099e5b135774 100644 --- a/maps/torch/items/clothing/solgov-feet.dm +++ b/maps/torch/items/clothing/solgov-feet.dm @@ -1,4 +1,11 @@ /obj/item/clothing/shoes/dress/white name = "white dress shoes" desc = "Brilliantly white low quarters, not a spot on them." - icon_state = "whitedress" \ No newline at end of file + icon_state = "whitedress" + +/obj/item/clothing/shoes/dressheels + name = "dress pumps" + desc = "A pair of tasteful and conservative black leather pumps." + icon_state = "dressheels" + can_add_hidden_item = FALSE + can_add_cuffs = FALSE \ No newline at end of file diff --git a/maps/torch/items/clothing/solgov-hands.dm b/maps/torch/items/clothing/solgov-hands.dm index 21c132645630a..585b4dac3b2f3 100644 --- a/maps/torch/items/clothing/solgov-hands.dm +++ b/maps/torch/items/clothing/solgov-hands.dm @@ -1,8 +1,12 @@ /obj/item/clothing/gloves/thick/duty/solgov name = "solgov duty gloves parent object" desc = "You should never see this." + icon_state = null item_icons = list(slot_gloves_str = 'maps/torch/icons/mob/onmob_hands_solgov.dmi') icon = 'maps/torch/icons/obj/obj_hands_solgov.dmi' + sprite_sheets = list( + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_hands_solgov_unathi.dmi' + ) /obj/item/clothing/gloves/thick/duty/solgov/eng name = "engineering duty gloves" @@ -51,3 +55,9 @@ desc = "These black duty gloves are made from durable synthetic materials, and have a lovely brown accent color." icon_state = "duty_gloves_sup" item_state = "duty_gloves_sup" + +/obj/item/clothing/gloves/thick/duty/solgov/fleet + name = "fleet duty gloves" + desc = "These black duty gloves are made from durable synthetic materials. Standard issue to all ranks in the SCG Fleet." + icon_state = "fleet_gloves" + item_state = "fleet_gloves" diff --git a/maps/torch/items/clothing/solgov-head.dm b/maps/torch/items/clothing/solgov-head.dm index 19e313bd7144d..03fce50793112 100644 --- a/maps/torch/items/clothing/solgov-head.dm +++ b/maps/torch/items/clothing/solgov-head.dm @@ -3,6 +3,9 @@ icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') siemens_coefficient = 0.9 + sprite_sheets = list( + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi' + ) //Utility /obj/item/clothing/head/soft/solgov @@ -11,6 +14,9 @@ icon_state = "solsoft" icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi' + ) /obj/item/clothing/head/soft/solgov/veteranhat name = "veteran hat" @@ -21,9 +27,6 @@ name = "\improper Expeditionary Corps cap" desc = "It's a black ballcap bearing the Expeditonary Corps crest." icon_state = "expeditionsoft" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_unathi.dmi' - ) /obj/item/clothing/head/soft/solgov/expedition/co name = "\improper Expeditionary Corps captain's cap" @@ -50,20 +53,6 @@ desc = "A navy blue utility cover bearing the crest of the SCG Fleet." icon_state = "navyutility" -/obj/item/clothing/head/solgov/utility/army - name = "army utility cover" - desc = "A green utility cover bearing the crest of the SCG Army." - icon_state = "greenutility" - -/obj/item/clothing/head/solgov/utility/army/tan - name = "tan utility cover" - desc = "A tan utility cover bearing the crest of the SCG Army." - icon_state = "tanutility" - -/obj/item/clothing/head/solgov/utility/army/urban - name = "urban utility cover" - desc = "A grey utility cover bearing the crest of the SCG Army." - icon_state = "greyutility" //Service @@ -80,9 +69,6 @@ name = "expeditionary peaked cap" desc = "A peaked black uniform cap belonging to the SCG Expeditionary Corps." icon_state = "ecdresscap" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_unathi.dmi' - ) /obj/item/clothing/head/solgov/service/expedition/command name = "expeditionary officer's peaked cap" @@ -99,30 +85,6 @@ desc = "A peaked grey uniform cap belonging to the SCG Expeditionary Corps. This one is trimmed in gold and blue." icon_state = "greydresscap_senior" -/obj/item/clothing/head/solgov/service/army - name = "army wheel cover" - desc = "A green service uniform cover with an SCG Army crest." - icon_state = "greenwheelcap" - -/obj/item/clothing/head/solgov/service/army/command - name = "army officer's wheel cover" - desc = "A green service uniform cover with an SCG Army crest and gold stripe." - icon_state = "greenwheelcap_com" - -/obj/item/clothing/head/solgov/service/army/garrison - name = "army garrison cap" - desc = "A green garrison cap belonging to the SCG Army." - icon_state = "greengarrisoncap" - -/obj/item/clothing/head/solgov/service/army/garrison/command - name = "army officer's garrison cap" - desc = "A green garrison cap belonging to the SCG Army. This one has a gold pin." - icon_state = "greengarrisoncap_com" - -/obj/item/clothing/head/solgov/service/army/campaign - name = "campaign cover" - desc = "A green campaign cover with an SCG Army crest. Only found on the heads of Drill Sergeants." - icon_state = "greendrill" //Dress @@ -150,15 +112,6 @@ desc = "A white dress uniform cover. This one has a gold stripe and an SCG Fleet crest." icon_state = "whitepeakcap_com" -/obj/item/clothing/head/solgov/dress/army - name = "army dress wheel cover" - desc = "A white dress uniform cover with an SCG Army crest." - icon_state = "whitewheelcap" - -/obj/item/clothing/head/solgov/dress/army/command - name = "army officer's dress wheel cover" - desc = "A white dress uniform cover with an SCG Army crest and gold stripe." - icon_state = "whitewheelcap_com" //Berets @@ -168,6 +121,22 @@ icon_state = "beret_lightblue" icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi' + ) + +/obj/item/clothing/head/beret/solgov/equipped(mob/user, slot) + ..() + switch(slot) + if(slot_belt) + sprite_sheets = list() + if(slot_head) + sprite_sheets = list( + SPECIES_VOX = 'icons/mob/species/vox/onmob_head_vox.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi', + SPECIES_NABBER = 'icons/mob/species/nabber/onmob_head_gas.dmi' + ) + return /obj/item/clothing/head/beret/solgov/homeguard name = "home guard beret" @@ -209,11 +178,6 @@ desc = "A grey beret with a silver insignia, denoting service in the SCGDF Strategic Command. For intelligence personnel who are more inclined towards style than safety." icon_state = "beret_graysilver" -/obj/item/clothing/head/beret/solgov/diplomatic - name = "diplomatic security beret" - desc = "A tan beret denoting service in the SCG Army Diplomatic Security Group. For security personnel who are more inclined towards style than safety." - icon_state = "beret_tan" - /obj/item/clothing/head/beret/solgov/borderguard name = "border security beret" desc = "A green beret with a silver emblem, denoting service in the Bureau of Border Security. For border guards who are more inclined towards style than safety." @@ -223,9 +187,6 @@ name = "expeditionary beret" desc = "A black beret belonging to the SCG Expeditionary Corps. For personnel that are more inclined towards style than safety." icon_state = "beret_black" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_unathi.dmi' - ) /obj/item/clothing/head/beret/solgov/expedition/security name = "expeditionary security beret" @@ -329,7 +290,7 @@ /obj/item/clothing/head/beret/solgov/fleet/branch/second name = "second fleet beret" - desc = "An SCG Fleet beret carrying the insignia of the Second Fleet, the Home Guard, tasked with defense of Sol territories. For personnel that are more inclined towards style than safety." + desc = "An SCG Fleet beret carrying the insignia of the Second Fleet, the Home Defense Group, tasked with defense of Sol territories. For personnel that are more inclined towards style than safety." icon_state = "beret_navy_second" /obj/item/clothing/head/beret/solgov/fleet/branch/third @@ -356,6 +317,9 @@ item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') icon_state = "ecushankadown" icon_state_up = "ecushankaup" + sprite_sheets = list( + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi' + ) /obj/item/clothing/head/ushanka/solgov/fleet name = "fleet fur hat" @@ -363,22 +327,13 @@ icon_state = "flushankadown" icon_state_up = "flushankaup" -/obj/item/clothing/head/ushanka/solgov/army - name = "army fur hat" - desc = "An SCG Army synthfur-lined hat for operating in cold environments." - icon_state = "barushankadown" - icon_state_up = "barushankaup" - -/obj/item/clothing/head/ushanka/solgov/army/green - name = "green army fur hat" - desc = "An SCG Army synthfur-lined hat for operating in cold environments." - icon_state = "arushankadown" - icon_state_up = "mcushankaup" - //helmets and other such trash /obj/item/clothing/head/helmet/solgov accessories = list(/obj/item/clothing/accessory/helmet_cover/blue/sol) + sprite_sheets = list( + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi' + ) /obj/item/clothing/head/helmet/solgov/security name = "security helmet" @@ -387,9 +342,6 @@ icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') accessories = null - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_head_helmet_unathi.dmi' - ) /obj/item/clothing/head/helmet/solgov/command name = "command helmet" @@ -408,13 +360,13 @@ /obj/item/clothing/head/helmet/solgov/pilot/fleet name = "fleet pilot's helmet" desc = "A pilot's helmet for operating the cockpit in style. This one is worn by members of the SCG Fleet." - icon_state = "pilotfleet" icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' + icon_state = "pilotfleet" item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') accessories = null /obj/item/clothing/head/helmet/space/void/exploration - camera = /obj/machinery/camera/network/exploration + camera = /obj/machinery/camera/network/helmet //SolGov Hardsuits @@ -423,7 +375,7 @@ icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_spacesuits_solgov_unathi.dmi', SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi', ) sprite_sheets_obj = list( @@ -436,7 +388,7 @@ icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_spacesuits_solgov_unathi.dmi', SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi', ) sprite_sheets_obj = list( @@ -449,7 +401,7 @@ icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_spacesuits_solgov_unathi.dmi', SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi', ) sprite_sheets_obj = list( @@ -462,7 +414,7 @@ icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_spacesuits_solgov_unathi.dmi', SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi', ) sprite_sheets_obj = list( @@ -479,7 +431,7 @@ icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_spacesuits_solgov_unathi.dmi', SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi', ) sprite_sheets_obj = list( @@ -495,7 +447,7 @@ icon_state = "rig0_explorer" item_state = "explorer_helm" sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_solgov_unathi.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_head_spacesuits_solgov_unathi.dmi', SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi', ) sprite_sheets_obj = list( diff --git a/maps/torch/items/clothing/solgov-suit.dm b/maps/torch/items/clothing/solgov-suit.dm index 23db4b1a7275c..92d97b3a237c8 100644 --- a/maps/torch/items/clothing/solgov-suit.dm +++ b/maps/torch/items/clothing/solgov-suit.dm @@ -1,7 +1,22 @@ +/obj/item/clothing/suit/solgov + abstract_type = /obj/item/clothing/suit/solgov + name = "master solgov suit" + icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' + item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi' + ) + + /obj/item/clothing/suit/storage/solgov - name = "master solgov jacket" + abstract_type = /obj/item/clothing/suit/storage/solgov + name = "master solgov suit with pockets" icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi' + ) + //Service @@ -41,58 +56,69 @@ desc = "A uniform service jacket belonging to the SCG Expeditionary Corps." icon_state = "ecservice_crew" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_suit_unathi.dmi' - ) - /obj/item/clothing/suit/storage/solgov/service/expeditionary/command icon_state = "ecservice_officer" item_state = "ecservice_officer" /obj/item/clothing/suit/storage/solgov/service/expeditionary/medical accessories = list(/obj/item/clothing/accessory/solgov/department/medical/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/medical accessories = list(/obj/item/clothing/accessory/solgov/department/medical/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/expeditionary/engineering accessories = list(/obj/item/clothing/accessory/solgov/department/engineering/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/engineering accessories = list(/obj/item/clothing/accessory/solgov/department/engineering/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/expeditionary/supply accessories = list(/obj/item/clothing/accessory/solgov/department/supply/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/supply accessories = list(/obj/item/clothing/accessory/solgov/department/supply/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/expeditionary/security accessories = list(/obj/item/clothing/accessory/solgov/department/security/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/security accessories = list(/obj/item/clothing/accessory/solgov/department/security/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/expeditionary/service accessories = list(/obj/item/clothing/accessory/solgov/department/service/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/service accessories = list(/obj/item/clothing/accessory/solgov/department/service/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/expeditionary/exploration accessories = list(/obj/item/clothing/accessory/solgov/department/exploration/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/exploration accessories = list(/obj/item/clothing/accessory/solgov/department/exploration/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/expeditionary/research accessories = list(/obj/item/clothing/accessory/solgov/department/research/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/research accessories = list(/obj/item/clothing/accessory/solgov/department/research/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/expeditionary/command/command accessories = list(/obj/item/clothing/accessory/solgov/department/command/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/storage/solgov/service/fleet name = "fleet service jacket" @@ -124,83 +150,46 @@ icon_state = "blueservice_flag" item_state = "blueservice_flag" -/obj/item/clothing/suit/storage/solgov/service/army - name = "army coat" - desc = "An SCG Army service coat. Green and undecorated." - icon_state = "greenservice" - item_state = "greenservice" - -/obj/item/clothing/suit/storage/solgov/service/army/medical - name = "army medical jacket" - desc = "An SCG Army service coat. This one has blue markings." - icon_state = "greenservice_med" - item_state = "greenservice_med" - -/obj/item/clothing/suit/storage/solgov/service/army/medical/command - name = "army medical command jacket" - desc = "An SCG Army service coat. This one has blue and gold markings." - icon_state = "greenservice_medcom" - item_state = "greenservice_medcom" - -/obj/item/clothing/suit/storage/solgov/service/army/engineering - name = "army engineering jacket" - desc = "An SCG Army service coat. This one has orange markings." - icon_state = "greenservice_eng" - item_state = "greenservice_eng" - -/obj/item/clothing/suit/storage/solgov/service/army/engineering/command - name = "army engineering command jacket" - desc = "An SCG Army service coat. This one has orange and gold markings." - icon_state = "greenservice_engcom" - item_state = "greenservice_engcom" - -/obj/item/clothing/suit/storage/solgov/service/army/supply - name = "army supply jacket" - desc = "An SCG Army service coat. This one has brown markings." - icon_state = "greenservice_sup" - item_state = "greenservice_sup" - -/obj/item/clothing/suit/storage/solgov/service/army/security - name = "army security jacket" - desc = "An SCG Army service coat. This one has red markings." - icon_state = "greenservice_sec" - item_state = "greenservice_sec" - -/obj/item/clothing/suit/storage/solgov/service/army/security/command - name = "army security command jacket" - desc = "An SCG Army service coat. This one has red and gold markings." - icon_state = "greenservice_seccom" - item_state = "greenservice_seccom" - -/obj/item/clothing/suit/storage/solgov/service/army/service - name = "army service jacket" - desc = "An SCG Army service coat. This one has green markings." - icon_state = "greenservice_srv" - item_state = "greenservice_srv" - -/obj/item/clothing/suit/storage/solgov/service/army/service/command - name = "army service command jacket" - desc = "An SCG Army service coat. This one has green and gold markings." - icon_state = "greenservice_srvcom" - item_state = "greenservice_srvcom" - -/obj/item/clothing/suit/storage/solgov/service/army/exploration - name = "army exploration jacket" - desc = "An SCG Army service coat. This one has purple markings." - icon_state = "greenservice_exp" - item_state = "greenservice_exp" - -/obj/item/clothing/suit/storage/solgov/service/army/exploration/command - name = "army exploration command jacket" - desc = "An SCG Army service coat. This one has purple and gold markings." - icon_state = "greenservice_expcom" - item_state = "greenservice_expcom" - -/obj/item/clothing/suit/storage/solgov/service/army/command - name = "army command jacket" - desc = "An SCG Marine Corps service coat. This one has gold markings." - icon_state = "greenservice_com" - item_state = "greenservice_com" +//Fleet Service Sweater + +/obj/item/clothing/suit/solgov/fleet_sweater + name = "fleet service sweater" + desc = "A navy blue SCG Fleet service sweater." + icon_state = "fleet_sweater" + item_state = "fleet_sweater" + body_parts_covered = UPPER_TORSO|ARMS + allowed = null + valid_accessory_slots = list( + ACCESSORY_SLOT_ARMBAND, + ACCESSORY_SLOT_MEDAL, + ACCESSORY_SLOT_INSIGNIA, + ACCESSORY_SLOT_RANK, + ACCESSORY_SLOT_DEPT, + ACCESSORY_SLOT_DECOR + ) + restricted_accessory_slots = list( + ACCESSORY_SLOT_ARMBAND, + ACCESSORY_SLOT_RANK, + ACCESSORY_SLOT_DEPT + ) + +/obj/item/clothing/suit/solgov/fleet_sweater/officer + name = "fleet officer's service sweater" + desc = "A navy blue SCG Fleet service sweater with silver accents." + icon_state = "fleet_sweater_off" + item_state = "fleet_sweater_off" + +/obj/item/clothing/suit/solgov/fleet_sweater/command + name = "fleet senior officer's service sweater" + desc = "A navy blue SCG Fleet service sweater with gold accents." + icon_state = "fleet_sweater_comm" + item_state = "fleet_sweater_comm" + +/obj/item/clothing/suit/solgov/fleet_sweater/flag + name = "fleet flag officer's service sweater" + desc = "A navy blue SCG Fleet serivce sweater with red accents." + icon_state = "fleet_sweater_flag" + item_state = "fleet_sweater_flag" //Dress - murder me with a gun why are these 3 different types @@ -219,9 +208,6 @@ desc = "A silver and black dress peacoat belonging to the SCG Expeditionary Corps. Fashionable, for the 25th century at least." icon_state = "ecdress_xpl" item_state = "ecdress_xpl" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_suit_unathi.dmi' - ) /obj/item/clothing/suit/storage/solgov/dress/expedition/senior name = "expeditionary senior's dress coat" @@ -311,17 +297,6 @@ icon_state = "sailordress" item_state = "sailordress" -/obj/item/clothing/suit/dress/solgov/army - name = "army dress jacket" - desc = "A tailored black SCG Army dress jacket with red trim. So sexy it hurts." - icon_state = "blackdress" - item_state = "blackdress" - -/obj/item/clothing/suit/dress/solgov/army/command - name = "army officer's dress jacket" - desc = "A tailored black SCG Army dress jacket with gold trim. Smells like ceremony." - icon_state = "blackdress_com" - item_state = "blackdress_com" //Misc @@ -332,10 +307,6 @@ item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA,ACCESSORY_SLOT_RANK) -/obj/item/clothing/suit/storage/hooded/wintercoat/solgov/army - name = "army winter coat" - icon_state = "coatar" - valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA,ACCESSORY_SLOT_RANK) /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet name = "fleet winter coat" @@ -507,7 +478,7 @@ icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_spacesuits_solgov_unathi.dmi', SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi', ) sprite_sheets_obj = list( @@ -518,12 +489,13 @@ /obj/item/clothing/suit/space/void/engineering/alt/sol/prepared helmet = /obj/item/clothing/head/helmet/space/void/engineering/alt/sol boots = /obj/item/clothing/shoes/magboots + item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/space/void/atmos/alt/sol icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_spacesuits_solgov_unathi.dmi', SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi', ) sprite_sheets_obj = list( @@ -534,12 +506,13 @@ /obj/item/clothing/suit/space/void/atmos/alt/sol/prepared helmet = /obj/item/clothing/head/helmet/space/void/atmos/alt/sol boots = /obj/item/clothing/shoes/magboots + item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/space/void/pilot/sol icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_spacesuits_solgov_unathi.dmi', SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi', ) sprite_sheets_obj = list( @@ -550,12 +523,13 @@ /obj/item/clothing/suit/space/void/pilot/sol/prepared helmet = /obj/item/clothing/head/helmet/space/void/pilot/sol boots = /obj/item/clothing/shoes/magboots + item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/space/void/medical/alt/sol icon = 'maps/torch/icons/obj/obj_suit_solgov.dmi' item_icons = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi') sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_spacesuits_solgov_unathi.dmi', SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi', ) sprite_sheets_obj = list( @@ -566,6 +540,7 @@ /obj/item/clothing/suit/space/void/medical/alt/sol/prepared helmet = /obj/item/clothing/head/helmet/space/void/medical/alt/sol boots = /obj/item/clothing/shoes/magboots + item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/space/void/command name = "command voidsuit" @@ -575,7 +550,7 @@ icon_state = "rig_command" item_state = "rig_command" sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_spacesuits_solgov_unathi.dmi', SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi', ) sprite_sheets_obj = list( @@ -591,6 +566,7 @@ /obj/item/clothing/suit/space/void/command/prepared helmet = /obj/item/clothing/head/helmet/space/void/command boots = /obj/item/clothing/shoes/magboots + item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/suit/space/void/exploration name = "exploration voidsuit" @@ -600,7 +576,7 @@ icon_state = "rig_explorer" item_state = "rig_explorer" sprite_sheets = list( - SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_solgov_unathi.dmi', + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_suit_spacesuits_solgov_unathi.dmi', SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi', ) sprite_sheets_obj = list( @@ -621,3 +597,4 @@ /obj/item/clothing/suit/space/void/exploration/prepared helmet = /obj/item/clothing/head/helmet/space/void/exploration boots = /obj/item/clothing/shoes/magboots + item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_INVALID_FOR_CHAMELEON diff --git a/maps/torch/items/clothing/solgov-under.dm b/maps/torch/items/clothing/solgov-under.dm index 3b6f5c24e2d19..c90c759d8b051 100644 --- a/maps/torch/items/clothing/solgov-under.dm +++ b/maps/torch/items/clothing/solgov-under.dm @@ -3,6 +3,9 @@ desc = "You shouldn't be seeing this." icon = 'maps/torch/icons/obj/obj_under_solgov.dmi' item_icons = list(slot_w_uniform_str = 'maps/torch/icons/mob/onmob_under_solgov.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_under_solgov_unathi.dmi' + ) siemens_coefficient = 0.8 gender_icons = 1 @@ -19,9 +22,6 @@ desc = "A baggy shirt bearing the seal of the SCG Expeditionary Corps and some dorky looking blue shorts." icon_state = "expeditionpt" worn_state = "expeditionpt" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_under_unathi.dmi' - ) /obj/item/clothing/under/solgov/pt/fleet name = "fleet pt uniform" @@ -29,12 +29,6 @@ icon_state = "fleetpt" worn_state = "fleetpt" -/obj/item/clothing/under/solgov/pt/army - name = "army pt uniform" - desc = "Does NOT leave much to the imagination." - icon_state = "armypt" - worn_state = "armypt" - //Utility @@ -44,9 +38,6 @@ icon_state = "blackutility" item_state = "bl_suit" worn_state = "blackutility" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_under_unathi.dmi' - ) armor = list( melee = ARMOR_MELEE_MINOR, energy = ARMOR_ENERGY_MINOR @@ -57,33 +48,38 @@ desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has silver trim." icon_state = "blackutility_crew" worn_state = "blackutility_crew" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_under_unathi.dmi' - ) /obj/item/clothing/under/solgov/utility/expeditionary/command accessories = list(/obj/item/clothing/accessory/solgov/department/command) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/engineering accessories = list(/obj/item/clothing/accessory/solgov/department/engineering) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/security accessories = list(/obj/item/clothing/accessory/solgov/department/security) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/medical accessories = list(/obj/item/clothing/accessory/solgov/department/medical) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/supply accessories = list(/obj/item/clothing/accessory/solgov/department/supply) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/service accessories = list(/obj/item/clothing/accessory/solgov/department/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/exploration accessories = list(/obj/item/clothing/accessory/solgov/department/exploration) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/research accessories = list(/obj/item/clothing/accessory/solgov/department/research) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/officer name = "expeditionary officer's uniform" @@ -93,27 +89,35 @@ /obj/item/clothing/under/solgov/utility/expeditionary/officer/command accessories = list(/obj/item/clothing/accessory/solgov/department/command) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/officer/engineering accessories = list(/obj/item/clothing/accessory/solgov/department/engineering) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/officer/security accessories = list(/obj/item/clothing/accessory/solgov/department/security) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/officer/medical accessories = list(/obj/item/clothing/accessory/solgov/department/medical) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/officer/supply accessories = list(/obj/item/clothing/accessory/solgov/department/supply) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/officer/service accessories = list(/obj/item/clothing/accessory/solgov/department/service) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/officer/exploration accessories = list(/obj/item/clothing/accessory/solgov/department/exploration) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/officer/research accessories = list(/obj/item/clothing/accessory/solgov/department/research) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet name = "fleet coveralls" @@ -124,55 +128,68 @@ /obj/item/clothing/under/solgov/utility/fleet/command accessories = list(/obj/item/clothing/accessory/solgov/department/command/fleet) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/command/pilot accessories = list(/obj/item/clothing/accessory/solgov/specialty/pilot) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/engineering accessories = list(/obj/item/clothing/accessory/solgov/department/engineering/fleet) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/security accessories = list(/obj/item/clothing/accessory/solgov/department/security/fleet) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/medical accessories = list(/obj/item/clothing/accessory/solgov/department/medical/fleet) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/supply accessories = list(/obj/item/clothing/accessory/solgov/department/supply/fleet) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/service accessories = list(/obj/item/clothing/accessory/solgov/department/service/fleet) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/exploration accessories = list(/obj/item/clothing/accessory/solgov/department/exploration/fleet) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/polopants - name = "fleet polo and pants" + name = "fleet polo" desc = "An alternative utility uniform of the SCG Fleet, specially designed for engineering staff. The pants sports some yellow reflective stripes, and have knee pads." icon_state = "navypolopants" worn_state = "navypolopants" /obj/item/clothing/under/solgov/utility/fleet/polopants/command + name = "fleet command polo" desc = "An alternative utility uniform of the SCG Fleet. The pants have knee pads." icon_state = "navypolopantsnostripe" worn_state = "navypolopantscom" /obj/item/clothing/under/solgov/utility/fleet/polopants/security + name = "fleet security polo" desc = "An alternative utility uniform of the SCG Fleet. The pants have knee pads." icon_state = "navypolopantsnostripe" worn_state = "navypolopantssec" /obj/item/clothing/under/solgov/utility/fleet/polopants/medical + name = "fleet medical polo" desc = "An alternative utility uniform of the SCG Fleet, specially designed for medics and doctors. The pants have knee pads." icon_state = "navypolopantsnostripe" worn_state = "navypolopantsmed" /obj/item/clothing/under/solgov/utility/fleet/polopants/supply + name = "fleet supply polo" desc = "An alternative utility uniform of the SCG Fleet. The pants have knee pads." icon_state = "navypolopantsnostripe" worn_state = "navypolopantssup" /obj/item/clothing/under/solgov/utility/fleet/polopants/service + name = "fleet service polo" desc = "An alternative utility uniform of the SCG Fleet. The pants have knee pads." icon_state = "navypolopantsnostripe" worn_state = "navypolopantssrv" @@ -185,69 +202,32 @@ /obj/item/clothing/under/solgov/utility/fleet/combat/security accessories = list(/obj/item/clothing/accessory/solgov/department/security/fleet) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/combat/medical - accessories = list(/obj/item/clothing/accessory/solgov/department/medical/fleet, /obj/item/clothing/accessory/armband/medblue) + accessories = list(/obj/item/clothing/accessory/solgov/department/medical/fleet) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/combat/command accessories = list(/obj/item/clothing/accessory/solgov/department/command/fleet) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/combat/exploration accessories = list(/obj/item/clothing/accessory/solgov/department/exploration/fleet) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/combat/engineering accessories = list(/obj/item/clothing/accessory/solgov/department/engineering/fleet) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/combat/service accessories = list(/obj/item/clothing/accessory/solgov/department/service/fleet) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/fleet/combat/supply accessories = list(/obj/item/clothing/accessory/solgov/department/supply/fleet) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON -/obj/item/clothing/under/solgov/utility/army - name = "army fatigues" - desc = "The utility uniform of the SCG Army, made from durable material." - icon_state = "greenutility" - item_state = "jensensuit" - worn_state = "greenutility" - -/obj/item/clothing/under/solgov/utility/army/command - accessories = list(/obj/item/clothing/accessory/solgov/department/command/army) - -/obj/item/clothing/under/solgov/utility/army/engineering - accessories = list(/obj/item/clothing/accessory/solgov/department/engineering/army) - -/obj/item/clothing/under/solgov/utility/army/security - accessories = list(/obj/item/clothing/accessory/solgov/department/security/army) - -/obj/item/clothing/under/solgov/utility/army/medical - accessories = list(/obj/item/clothing/accessory/solgov/department/medical/army) - -/obj/item/clothing/under/solgov/utility/army/medical/banded - accessories = list(/obj/item/clothing/accessory/solgov/department/medical/army, /obj/item/clothing/accessory/armband/medblue) - -/obj/item/clothing/under/solgov/utility/army/supply - accessories = list(/obj/item/clothing/accessory/solgov/department/supply/army) - -/obj/item/clothing/under/solgov/utility/army/service - accessories = list(/obj/item/clothing/accessory/solgov/department/service/army) - -/obj/item/clothing/under/solgov/utility/army/exploration - accessories = list(/obj/item/clothing/accessory/solgov/department/exploration/army) - -/obj/item/clothing/under/solgov/utility/army/urban - name = "urban fatigues" - desc = "An urban version of the SCG Army utility uniform, made from durable material." - icon_state = "greyutility" - item_state = "gy_suit" - worn_state = "greyutility" - -/obj/item/clothing/under/solgov/utility/army/tan - name = "tan fatigues" - desc = "A tan version of the SCG Army utility uniform, made from durable material." - icon_state = "tanutility" - item_state = "johnny" - worn_state = "tanutility" //Service @@ -272,33 +252,6 @@ icon_state = "whiteservicefem" worn_state = "whiteservicefem" -/obj/item/clothing/under/solgov/service/army - name = "army service uniform" - desc = "The service uniform of the SCG Army. Slimming." - icon_state = "greenservice" - item_state = "johnny" - worn_state = "greenservice" - accessories = list(/obj/item/clothing/accessory/brown) - -/obj/item/clothing/under/solgov/service/army/skirt - name = "army service skirt" - desc = "The service uniform skirt of the SCG Army. Slimming." - icon_state = "greenservicefem" - worn_state = "greenservicefem" - -/obj/item/clothing/under/solgov/service/army/command - name = "marine officer's service uniform" - desc = "The service uniform of the SCG Army. Slimming and stylish." - icon_state = "greenservice_com" - item_state = "johnny" - worn_state = "greenservice_com" - accessories = list(/obj/item/clothing/accessory/brown) - -/obj/item/clothing/under/solgov/service/army/command/skirt - name = "marine officer's service skirt" - desc = "The service uniform skirt of the SCG Army. Slimming and stylish." - icon_state = "greenservicefem_com" - worn_state = "greenservicefem_com" //Dress /obj/item/clothing/under/solgov/mildress @@ -308,29 +261,6 @@ worn_state = "greydress" siemens_coefficient = 0.9 -/obj/item/clothing/under/solgov/mildress/army - name = "army dress uniform" - desc = "The dress uniform of the SCG Army, class given form." - icon_state = "blackdress" - worn_state = "blackdress" - -/obj/item/clothing/under/solgov/mildress/army/skirt - name = "army dress skirt" - desc = "A feminine version of the SCG Army dress uniform, class given form." - icon_state = "blackdressfem" - worn_state = "blackdressfem" - -/obj/item/clothing/under/solgov/mildress/army/command - name = "army officer's dress uniform" - desc = "The dress uniform of the SCG Army, even classier in gold." - icon_state = "blackdress" - worn_state = "blackdress_com" - -/obj/item/clothing/under/solgov/mildress/army/command/skirt - name = "army officer's dress skirt" - desc = "A feminine version of the SCG Army dress uniform, even classier in gold." - icon_state = "blackdressfem" - worn_state = "blackdressfem_com" //dress @@ -339,23 +269,27 @@ desc = "The dress uniform of the SCG Expeditionary Corps in silver trim." icon_state = "greydress" worn_state = "greydress" - sprite_sheets = list( - SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_under_unathi.dmi' - ) /obj/item/clothing/under/solgov/dress/expeditionary/engineering + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/security + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/medical + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/supply + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/service + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/exploration + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/research + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/skirt name = "expeditionary dress skirt" @@ -364,18 +298,25 @@ worn_state = "greydressfem" /obj/item/clothing/under/solgov/dress/expeditionary/skirt/engineering + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/skirt/security + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/skirt/medical + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/skirt/supply + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/skirt/service + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/skirt/exploration + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/skirt/research + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/command name = "expeditionary officer's dress uniform" @@ -384,18 +325,25 @@ worn_state = "greydress_com" /obj/item/clothing/under/solgov/dress/expeditionary/command/engineering + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/command/security + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/command/medical + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/command/supply + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/command/service + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/command/exploration + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/command/research + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt name = "expeditionary officer's dress skirt" @@ -404,24 +352,32 @@ worn_state = "greydressfem_com" /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/engineering + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/security + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/medical + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/supply + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/service + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/exploration + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/dress/expeditionary/command/skirt/research + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON //misc garbage /obj/item/clothing/under/rank/internalaffairs/plain/solgov desc = "A plain shirt and pair of pressed black pants." name = "formal outfit" accessories = list(/obj/item/clothing/accessory/blue_clip) + item_flags = ITEM_FLAG_WASHER_ALLOWED | ITEM_FLAG_INVALID_FOR_CHAMELEON /obj/item/clothing/under/solgov/utility/expeditionary/monkey name = "adjusted expeditionary uniform" diff --git a/maps/torch/items/coins.dm b/maps/torch/items/coins.dm index 17937273d1625..543c4444ca5ca 100644 --- a/maps/torch/items/coins.dm +++ b/maps/torch/items/coins.dm @@ -15,17 +15,6 @@ "} -/obj/item/material/coin/challenge/sol/army - default_material = MATERIAL_BRONZE - name = "army challenge coin" - icon_state = "army" - desc = {"\ - A challenge coin distributed by the SCG Army. On the \ - front is the insignia of the Army, and on the back is the \ - emblem of the SCG inscribed with various dates.\ - "} - - /obj/item/material/coin/challenge/sol/armsmen default_material = MATERIAL_BRONZE name = "armsmen challenge coin" @@ -95,7 +84,7 @@ /obj/item/material/coin/challenge/misc/pcrc default_material = MATERIAL_GOLD - name = "pcrc challenge coin" + name = "\improper PCRC challenge coin" icon_state = "pcrc" desc = {"\ A challenge coin issued by Proxima Centauri Risk Control \ @@ -108,7 +97,7 @@ /obj/item/material/coin/challenge/misc/saare default_material = MATERIAL_SILVER - name = "saare challenge coin" + name = "\improper SAARE challenge coin" icon_state = "saare" desc = {"\ A challenge coin issued by SAARE to its operatives. \ diff --git a/maps/torch/items/explo_shotgun.dm b/maps/torch/items/explo_shotgun.dm index 34cb4c95e309e..bf743535d5425 100644 --- a/maps/torch/items/explo_shotgun.dm +++ b/maps/torch/items/explo_shotgun.dm @@ -38,26 +38,45 @@ return TRUE return ..() -/obj/item/gun/projectile/shotgun/pump/exploration/attackby(obj/item/I, mob/user) - if(!reinforced && istype(I, /obj/item/pipe) && user.unEquip(I, src)) - reinforced = I - to_chat(user, SPAN_WARNING("You reinforce \the [src] with \the [reinforced].")) - playsound(src, 'sound/effects/tape.ogg',25) +/obj/item/gun/projectile/shotgun/pump/exploration/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!reinforced) + USE_FEEDBACK_FAILURE("[src] has no reinforcement to remove.") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + reinforced.dropInto(loc) + explosion_chance = initial(explosion_chance) + bulk = initial(bulk) + update_icon() + user.visible_message( + SPAN_NOTICE("[user] removes [reinforced] from [src] with [tool]."), + SPAN_NOTICE("You remove [reinforced] from [src] with [tool].") + ) + +/obj/item/gun/projectile/shotgun/pump/exploration/use_tool(obj/item/tool, mob/user, list/click_params) + // Pipe - Reinforce gun + if (istype(tool, /obj/item/pipe)) + if (reinforced) + USE_FEEDBACK_FAILURE("[src] is already reinforced with [reinforced].") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + reinforced = tool explosion_chance = 10 - bulk = bulk + 4 - update_icon() - return 1 - if(reinforced && isWirecutter(I)) - to_chat(user, SPAN_WARNING("You remove \the [reinforced] that was reinforcing \the [src].")) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 25, 1) - reinforced.dropInto(loc) - reinforced = null - explosion_chance = initial(explosion_chance) - bulk = initial(bulk) + bulk += 4 update_icon() - return 1 + playsound(src, 'sound/effects/tape.ogg', 50, TRUE) + user.visible_message( + SPAN_NOTICE("[user] reinforces [src] with [tool]."), + SPAN_NOTICE("You reinforce [src] with [tool].") + ) + return TRUE + return ..() + /obj/item/gun/projectile/shotgun/pump/exploration/special_check() if(chambered && chambered.BB && prob(explosion_chance)) var/damage = chambered.BB.get_structure_damage() diff --git a/maps/torch/items/headsets.dm b/maps/torch/items/headsets.dm index 6c28c88be73b5..21463b5b8a13a 100644 --- a/maps/torch/items/headsets.dm +++ b/maps/torch/items/headsets.dm @@ -6,8 +6,7 @@ ks1type = /obj/item/device/encryptionkey/science /obj/item/device/radio/headset/science/alt - name = "research headset" - desc = "A headset for researchers." + name = "research bowman headset" icon_state = "sci_headset_alt" item_state = "sci_headset_alt" diff --git a/maps/torch/items/items.dm b/maps/torch/items/items.dm index 647861984c7d3..8d81c8d5a6ccf 100644 --- a/maps/torch/items/items.dm +++ b/maps/torch/items/items.dm @@ -23,7 +23,7 @@ Random item spawning /obj/random/maintenance/solgov name = "random maintenance item" desc = "This is a random maintenance item." - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/parcels.dmi' icon_state = "gift1" /obj/random/maintenance/solgov/spawn_choices() @@ -34,8 +34,8 @@ Random item spawning /obj/random/maintenance/solgov/clean name = "random maintenance item" desc = "This is a random maintenance item." - icon = 'icons/obj/items.dmi' - icon_state = "gift2" + icon = 'icons/obj/parcels.dmi' + icon_state = "gift3" /obj/random/maintenance/solgov/clean/spawn_choices() return list(/obj/random/solgov = 3, @@ -76,7 +76,7 @@ Torch specific items /obj/item/storage/backpack/messenger/explorer name = "explorer messenger bag" desc = "A rugged backpack worn over one shoulder." - icon_state = "courierbagexp" + icon_state = "courierbagsci" /*********** Unique items @@ -116,7 +116,7 @@ Weapons /obj/item/gun/energy/stunrevolver/secure/nanotrasen name = "corporate stun revolver" - desc = "This A&M X6 is fitted with an NT1019 chip which allows remote authorization of weapon functionality. It has a NanoTrasen logo on the grip." + desc = "This A&M X6 is fitted with an NT1019 chip which allows remote authorization of weapon functionality. It has a Nanotrasen logo on the grip." req_access = list(list(access_brig, access_heads, access_rd, access_sec_guard)) /obj/item/gun/projectile/pistol/holdout/liaison @@ -125,8 +125,8 @@ Weapons /obj/item/ammo_magazine/pistol/small/oneway initial_ammo = 1 -/obj/effect/paint/hull +/obj/paint/hull color = COLOR_SOL -/obj/effect/paint/expeditionary +/obj/paint/expeditionary color = "#68099e" diff --git a/maps/torch/items/machinery.dm b/maps/torch/items/machinery.dm index b2786654b3a59..521607568c050 100644 --- a/maps/torch/items/machinery.dm +++ b/maps/torch/items/machinery.dm @@ -41,15 +41,8 @@ autolinkers = list("exploration") // Suit cyclers and storage -/obj/machinery/suit_cycler/exploration - name = "Exploration suit cycler" - model_text = "Exploration" - req_access = list(access_explorer) - available_modifications = list(/singleton/item_modifier/space_suit/explorer) - species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) - /obj/machinery/suit_storage_unit/explorer - name = "Exploration Voidsuit Storage Unit" + name = "exploration voidsuit storage unit" suit = /obj/item/clothing/suit/space/void/exploration helmet = /obj/item/clothing/head/helmet/space/void/exploration boots = /obj/item/clothing/shoes/magboots @@ -59,7 +52,7 @@ islocked = 1 /obj/machinery/suit_storage_unit/pilot - name = "Pilot Voidsuit Storage Unit" + name = "pilot voidsuit storage unit" suit = /obj/item/clothing/suit/space/void/pilot helmet = /obj/item/clothing/head/helmet/space/void/pilot boots = /obj/item/clothing/shoes/magboots @@ -69,7 +62,7 @@ islocked = 1 /obj/machinery/suit_storage_unit/command - name = "Command Voidsuit Storage Unit" + name = "command voidsuit storage unit" suit = /obj/item/clothing/suit/space/void/command helmet = /obj/item/clothing/head/helmet/space/void/command boots = /obj/item/clothing/shoes/magboots @@ -78,6 +71,50 @@ req_access = list(access_bridge, access_keycard_auth) islocked = 1 +/obj/machinery/suit_cycler/torch + name = "suit cycler unit" + req_access = list(access_bridge) + available_modifications = list( + /singleton/item_modifier/space_suit/sol/atmos, + /singleton/item_modifier/space_suit/sol/command, + /singleton/item_modifier/space_suit/sol/engineering, + /singleton/item_modifier/space_suit/sol/explorer, + /singleton/item_modifier/space_suit/sol/hazard, + /singleton/item_modifier/space_suit/sol/medical, + /singleton/item_modifier/space_suit/mining, + /singleton/item_modifier/space_suit/sol/pilot, + /singleton/item_modifier/space_suit/science, + /singleton/item_modifier/space_suit/security/alt + ) + species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) + +/obj/machinery/suit_cycler/exploration + name = "exploration suit cycler" + model_text = "Exploration" + req_access = list(access_explorer) + available_modifications = list(/singleton/item_modifier/space_suit/sol/explorer) + species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI) + +/obj/machinery/suit_cycler/command + name = "command suit cycler" + model_text = "Command" + req_access = list(access_bridge) + available_modifications = list(/singleton/item_modifier/space_suit/sol/command) + species = list(SPECIES_HUMAN,SPECIES_SKRELL) + +/obj/machinery/suit_cycler/engineering/alt + available_modifications = list( + /singleton/item_modifier/space_suit/sol/engineering, + /singleton/item_modifier/space_suit/sol/atmos, + /singleton/item_modifier/space_suit/sol/hazard + ) + +/obj/machinery/suit_cycler/medical/alt + available_modifications = list(/singleton/item_modifier/space_suit/sol/medical) + +/obj/machinery/suit_cycler/pilot/alt + available_modifications = list(/singleton/item_modifier/space_suit/sol/pilot) + // Vending machines & dispensers /obj/machinery/vending/security products = list( diff --git a/maps/torch/items/manuals.dm b/maps/torch/items/manuals.dm index bb19e8bbd304c..4577714bcc76a 100644 --- a/maps/torch/items/manuals.dm +++ b/maps/torch/items/manuals.dm @@ -13,7 +13,7 @@ - + @@ -36,7 +36,7 @@ - + @@ -58,7 +58,7 @@ - + @@ -74,9 +74,8 @@ ..() return INITIALIZE_HINT_LATELOAD -/obj/item/folder/envelope/captain/LateInitialize() - ..() - var/obj/effect/overmap/visitable/torch = map_sectors["[z]"] +/obj/item/folder/envelope/captain/LateInitialize(mapload) + var/obj/overmap/visitable/torch = map_sectors["[z]"] var/memo = {"
    [SPAN_COLOR("red", "SECRET - CODE WORDS: TORCH")]

    SOL CENTRAL GOVERNMENT EXPEDITIONARY COMMAND

    @@ -142,3 +141,18 @@ Regards, John.
    This paper has been stamped with the stamp of Office of the General Secretary of SCG. "} + +/obj/item/paper/newrust + name = "note - RUST Wiring Updates (Mandatory Reading)" + info = {" +
    +

    RUST Wiring Updates

    +
    +

    +

    Boys at the Observatory decided to upgrade the wiring of our fusion engine room. To adapt, we will need to adjust our normal procedures.

    +
      +
    • You do NOT need to bypass the SMES in this antechamber. It is no longer irrelevant, it is the only thing separating RUST output from the main power grid.
    • +
    • If you are running a standard setup, you SHOULD NOT run the gyrotron after the Hydrogen to Helium reaction starts. This was always a bad idea, as it isn't necessary and the gyrotron will eat 1.25 MW of power at the highest settings, but now it is on a subgrid that will struggle if that much power is being drained constantly.
    • +
    +

    Chief Petty Officer Meng Jiao

    +"} diff --git a/maps/torch/items/memos.dm b/maps/torch/items/memos.dm index e7e7e0e6dbc5c..4274af0a5985f 100644 --- a/maps/torch/items/memos.dm +++ b/maps/torch/items/memos.dm @@ -159,9 +159,7 @@ /obj/item/paper/memo/examine(mob/user, distance) . = ..() if (distance < 2) - to_chat(user, SPAN_NOTICE(info)) - - + . += SPAN_NOTICE(info) // generic memos @@ -169,6 +167,13 @@ name = "offical guides" info = {"Some "internal use only" reports on inter-departmental communications, reminding personnel that unless the document specifies it is from and issued by EXO or Expeditionary Command, it is not offical policy and should not be referenced as a definitive reasoning for any action."} +/obj/item/paper/memo/generic/sexplorer + name = "\improper EC rank abbreviations" + info = {"Some "internal use only" reports on proper and improper ways of abbreviating explorer ranks and roles, including emphasis that "sexplorer" is NOT an authorized way, shorthand or otherwise, to refer to senior explorers."} + +/obj/item/paper/memo/generic/sublt + name = "fleet rank abbreviations" + info = {"Some "internal use only" reports on proper and improper ways of abbreviating fleet ranks and roles, including emphasis that "sub" is NOT an authorized way, shorthand or otherwise, to refer to sub lieutenant."} // scgr memos @@ -257,7 +262,7 @@ info = {"An "internal use only" memo sent from the Commanding Officer to the heads of staff reminding them that bridge officers are qualified in communications and bridge operations and do not, in fact, double as naval infantry. They should not be deployed like such during minor security incidents, citing numerous reports of broken legs and feet being shot due to mishandling of weapons."} /obj/item/paper/memo/command/comm - name = "Zurich Common reminder" + name = "\improper Zurich Common reminder" info = {"A memo that has seen better days. It's been crumpled up, dried in coffee and put back up by some vandals. From what's left, it reads: "Speaking good Zurich Common is a must to be an excellent head of staff. Please exercise moderation with accents.""} /obj/item/paper/memo/command/punishments @@ -281,11 +286,11 @@ info = {"An "internal use only" memorandum sent from Expeditionary Command, detailing the last known locations and naval capacity of several rogue Fifth Fleet vessels, including the SFV Nathan Hale. The data available in the report is uncomfortably sparse."} /obj/item/paper/memo/command/outpostreport1 - name = "E-14b outpost report" + name = "\improper E-14b outpost report" info = {"An "internal use only" memo detailing the status of the research outpost in the E-14b system. It states that construction is still underway, and suggests efforts would benefit from better communication between EC and Terran engineering personnel."} /obj/item/paper/memo/command/outpostreport2 - name = "E-14b outpost report" + name = "\improper E-14b outpost report" info = {"An "internal use only" memo detailing the status of the research outpost in the E-14b system. It states that construction has been delayed due to a migration of native ambulatory fungus at the site, and requests that the EC begin looking into low-impact mushroom removal methods."} /obj/item/paper/memo/command/evasiveflight @@ -595,7 +600,7 @@ info = {"An "internal use only", hand-written note from a brig chief warning personnel not to overuse their hand flashes in order to prevent the bulb from burning out. They further note that a burnt-out flash is useless. A third party has written on this note that burnt-out flashes should instead be brought to robotics. They even underlined it and added exclamation marks for emphasis, wow."} /obj/item/paper/memo/security/lolly - name = "STOP STEALING CANDY FROM MED" + name = "\improper STOP STEALING CANDY FROM MED" info = {"Why the fuck do I have to write this to you all when the records say you're all SUPPOSEDLY legal adults? The lollipop jar in medical is for PATIENTS, not MASTERS AT ARMS. Those lollipops contain COLD MEDICINE INSTEAD OF SUGAR. STOP STEALING THEM!!! If you want candy so goddamn much GO TO A VENDING MACHINE. If I see one of you stealing candy from medical, you're being demoted to sanitation tech of maintenance for the rest of your miserable tour here. Clean up and be more professional next shift!"} /obj/item/paper/memo/security/chaplain diff --git a/maps/torch/items/rigs.dm b/maps/torch/items/rigs.dm index 47952b27d6e4f..ece9eecee7cb5 100644 --- a/maps/torch/items/rigs.dm +++ b/maps/torch/items/rigs.dm @@ -34,7 +34,7 @@ light_overlay = "helmet_light_dual" icon = 'maps/torch/icons/obj/obj_head_solgov.dmi' item_icons = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi') - camera = /obj/machinery/camera/network/command + camera = /obj/machinery/camera/network/helmet species_restricted = list(SPECIES_HUMAN,SPECIES_IPC) //no available icons for aliens /obj/item/clothing/suit/space/rig/command @@ -297,9 +297,8 @@ /obj/item/device/core_sampler, /obj/item/device/gps, /obj/item/pinpointer/radio, - /obj/item/pickaxe/xeno, - /obj/item/storage/bag/fossils, - /obj/item/rig_module/grenade_launcher/light + /obj/item/pickaxe, + /obj/item/storage/bag/fossils ) /obj/item/clothing/shoes/magboots/rig/command/science @@ -308,6 +307,7 @@ /obj/item/rig/command/science/equipped initial_modules = list( + /obj/item/rig_module/ai_container, /obj/item/rig_module/maneuvering_jets, /obj/item/rig_module/device/flash, /obj/item/rig_module/device/anomaly_scanner, @@ -348,7 +348,7 @@ siemens_coefficient = 0 /obj/item/clothing/head/helmet/space/rig/command/exploration - camera = /obj/machinery/camera/network/exploration + camera = /obj/machinery/camera/network/helmet icon_state = "command_exp_rig" light_overlay = "helmet_light_wide" brightness_on = 0.8 @@ -380,8 +380,8 @@ ) /* - Overrides for standard mapset rig items +Overrides for standard mapset rig items */ /obj/item/clothing/head/helmet/space/rig/industrial - camera = /obj/machinery/camera/network/supply + camera = /obj/machinery/camera/network/helmet diff --git a/maps/torch/items/selection.dm b/maps/torch/items/selection.dm new file mode 100644 index 0000000000000..a1cc8446e849f --- /dev/null +++ b/maps/torch/items/selection.dm @@ -0,0 +1,8 @@ +/obj/item/selection/pilot_helmet + name = "pilot's helmet case" + desc = "A solid case containing the Shuttle Pilot's flight helmet." + selection_options = list( + "Standard Pilot's Helmet" = /obj/item/clothing/head/helmet/solgov/pilot, + "Corporate Pilot's Helmet" = /obj/item/clothing/head/helmet/nt/pilot, + "Fleet Pilot's Helmet" = /obj/item/clothing/head/helmet/solgov/pilot/fleet + ) diff --git a/maps/torch/items/solbanner.dm b/maps/torch/items/solbanner.dm index dc45a4d2e54d8..b9c36c26bb4d7 100644 --- a/maps/torch/items/solbanner.dm +++ b/maps/torch/items/solbanner.dm @@ -21,7 +21,7 @@ /obj/structure/solbanner/exo/examine(mob/user) . = ..() if(plantedby) - to_chat(user, SPAN_NOTICE("[plantedby]")) + . += SPAN_NOTICE(plantedby) /obj/item/solbanner name = "\improper SCG banner capsule" @@ -45,7 +45,7 @@ if(user.unEquip(src)) forceMove(T) if(GLOB.using_map.use_overmap) - var/obj/effect/overmap/visitable/sector/exoplanet/P = map_sectors["[z]"] + var/obj/overmap/visitable/sector/exoplanet/P = map_sectors["[z]"] if(istype(P)) GLOB.stat_flags_planted += 1 qdel(src) diff --git a/maps/torch/items/stamps.dm b/maps/torch/items/stamps.dm index 199ac9296dffa..5529b0c6ef695 100644 --- a/maps/torch/items/stamps.dm +++ b/maps/torch/items/stamps.dm @@ -23,7 +23,7 @@ icon_state = "stamp-solgov" /obj/item/stamp/nt - name = "\improper corporate rubber stamp" + name = "corporate rubber stamp" icon_state = "stamp-corp" /obj/item/stamp/deckoff diff --git a/maps/torch/items/uniform_vendor.dm b/maps/torch/items/uniform_vendor.dm index 4350d09df6388..bed0bd5c1b995 100644 --- a/maps/torch/items/uniform_vendor.dm +++ b/maps/torch/items/uniform_vendor.dm @@ -1,7 +1,7 @@ /obj/machinery/uniform_vendor name = "uniform vendor" desc= "A uniform vendor for utility, service, and dress uniforms." - icon = 'icons/obj/vending.dmi' + icon = 'icons/obj/machines/vending.dmi' icon_state = "uniform" layer = BELOW_OBJ_LAYER anchored = TRUE @@ -178,6 +178,7 @@ user_outfit.service_skirt, user_outfit.service_over, user_outfit.service_shoes, + user_outfit.service_heels, user_outfit.service_hat, user_outfit.service_gloves ) @@ -189,6 +190,7 @@ user_outfit.dress_skirt, user_outfit.dress_over, user_outfit.dress_shoes, + user_outfit.dress_heels, user_outfit.dress_hat, user_outfit.dress_gloves ) diff --git a/maps/torch/items/wallets.dm b/maps/torch/items/wallets.dm index 6638e70ec32f7..b96db1ba37f41 100644 --- a/maps/torch/items/wallets.dm +++ b/maps/torch/items/wallets.dm @@ -1,6 +1,6 @@ /obj/item/storage/wallet/Initialize() . = ..() - can_hold |= list( + contents_allowed |= list( /obj/item/clothing/accessory/solgov, /obj/item/clothing/accessory/ribbon ) diff --git a/maps/torch/items/weapons.dm b/maps/torch/items/weapons.dm index 3e345cc14e3d6..6e16df028a1dd 100644 --- a/maps/torch/items/weapons.dm +++ b/maps/torch/items/weapons.dm @@ -11,15 +11,24 @@ fire_delay = 7 ammo_indicator = TRUE +/obj/item/gun/projectile/pistol/m22f/empty + starts_loaded = FALSE /obj/item/gun/projectile/pistol/m19 name = "military pistol" desc = "A Hephaestus Industries M19. A light pistol issued as an SCGDF service weapon." magazine_type = /obj/item/ammo_magazine/pistol allowed_magazines = /obj/item/ammo_magazine/pistol + banned_magazines = list( + /obj/item/ammo_magazine/pistol/double, + /obj/item/ammo_magazine/pistol/small + ) icon = 'maps/torch/icons/obj/weapons.dmi' icon_state = "m19" item_state = "secgundark" safety_icon = "m19-safety" origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3) fire_delay = 5 + +/obj/item/gun/projectile/pistol/m19/empty + starts_loaded = FALSE diff --git a/maps/torch/job/command_jobs.dm b/maps/torch/job/command_jobs.dm index 74b9b06e81b35..68affe495b686 100644 --- a/maps/torch/job/command_jobs.dm +++ b/maps/torch/job/command_jobs.dm @@ -13,17 +13,17 @@ /datum/mil_rank/ec/o6 ) min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_SCIENCE = SKILL_ADEPT, - SKILL_PILOT = SKILL_ADEPT) + SKILL_SCIENCE = SKILL_TRAINED, + SKILL_PILOT = SKILL_TRAINED) max_skill = list( SKILL_PILOT = SKILL_MAX, SKILL_SCIENCE = SKILL_MAX) skill_points = 30 software_on_spawn = list(/datum/computer_file/program/comm, - /datum/computer_file/program/card_mod, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/reports) + /datum/computer_file/program/card_mod, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/reports) /datum/job/captain/get_description_blurb() return "You are the Commanding Officer. You are the top dog. You are an experienced professional officer in control of an entire ship, and ultimately responsible for all that happens onboard. Your job is to make sure [GLOB.using_map.full_name] fulfils its space exploration mission. Delegate to your Executive Officer, your department heads, and your Senior Enlisted Advisor to effectively manage the ship, and listen to and trust their expertise." @@ -52,7 +52,7 @@ /datum/mil_rank/fleet/o4, /datum/mil_rank/fleet/o5 ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_ADEPT, + min_skill = list( SKILL_BUREAUCRACY = SKILL_TRAINED, SKILL_COMPUTER = SKILL_BASIC, SKILL_PILOT = SKILL_BASIC) @@ -77,9 +77,9 @@ ) software_on_spawn = list(/datum/computer_file/program/comm, - /datum/computer_file/program/card_mod, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/reports) + /datum/computer_file/program/card_mod, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/reports) /datum/job/hop/get_description_blurb() return "You are the Executive Officer. You are an experienced senior officer, second in command of the ship, and are responsible for the smooth operation of the ship under your Commanding Officer. In their absence, you are expected to take their place. Your primary duty is directly managing department heads and all those outside a department heading. You are also responsible for the contractors and passengers aboard the ship. Consider the Senior Enlisted Advisor and Bridge Officers tools at your disposal." @@ -99,13 +99,13 @@ /datum/mil_rank/ec/o3 ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_ADEPT, + min_skill = list( SKILL_BUREAUCRACY = SKILL_TRAINED, SKILL_COMPUTER = SKILL_BASIC, - SKILL_FINANCE = SKILL_ADEPT, + SKILL_FINANCE = SKILL_TRAINED, SKILL_BOTANY = SKILL_BASIC, SKILL_ANATOMY = SKILL_BASIC, SKILL_DEVICES = SKILL_BASIC, - SKILL_SCIENCE = SKILL_ADEPT) + SKILL_SCIENCE = SKILL_TRAINED) max_skill = list( SKILL_ANATOMY = SKILL_MAX, SKILL_DEVICES = SKILL_MAX, @@ -124,9 +124,9 @@ ) software_on_spawn = list(/datum/computer_file/program/comm, - /datum/computer_file/program/aidiag, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/reports) + /datum/computer_file/program/aidiag, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/reports) /datum/job/rd/get_description_blurb() return "You are the Chief Science Officer. You are responsible for the research department. You handle the science aspects of the project and liase with the corporate interests of the Expeditionary Corps Organisation. Make sure science gets done, do some yourself, and get your scientists on away missions to find things to benefit the project. Advise the CO on science matters." @@ -149,10 +149,10 @@ /datum/mil_rank/ec/o3 ) min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT, + SKILL_MEDICAL = SKILL_EXPERIENCED, + SKILL_ANATOMY = SKILL_EXPERIENCED, SKILL_CHEMISTRY = SKILL_BASIC, - SKILL_DEVICES = SKILL_ADEPT) + SKILL_DEVICES = SKILL_TRAINED) max_skill = list( SKILL_MEDICAL = SKILL_MAX, SKILL_ANATOMY = SKILL_MAX, @@ -169,9 +169,9 @@ ) software_on_spawn = list(/datum/computer_file/program/comm, - /datum/computer_file/program/suit_sensors, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/reports) + /datum/computer_file/program/suit_sensors, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/reports) /datum/job/cmo/get_description_blurb() return "You are the Chief Medical Officer. You manage the medical department. You ensure all members of medical are skilled, tasked and handling their duties. Ensure your doctors are staffing your infirmary and your corpsman/paramedics are ready for response. Act as a second surgeon or backup pharmacist in the absence of either. You are expected to know medical very well, along with general regulations." @@ -193,19 +193,22 @@ /datum/mil_rank/fleet/o2, /datum/mil_rank/fleet/o3 ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_COMPUTER = SKILL_ADEPT, - SKILL_EVA = SKILL_ADEPT, - SKILL_CONSTRUCTION = SKILL_ADEPT, - SKILL_ELECTRICAL = SKILL_ADEPT, - SKILL_ATMOS = SKILL_ADEPT, - SKILL_ENGINES = SKILL_EXPERT) + skill_points = 36 + min_skill = list( // 31 points + SKILL_BUREAUCRACY = SKILL_BASIC, // 1 point + SKILL_COMPUTER = SKILL_TRAINED, // 2 points + SKILL_EVA = SKILL_TRAINED, // 2 points + SKILL_CONSTRUCTION = SKILL_TRAINED, // 2 points + SKILL_ELECTRICAL = SKILL_TRAINED, // 4 points + SKILL_ATMOS = SKILL_TRAINED, // 4 points + SKILL_ENGINES = SKILL_EXPERIENCED // 16 points + ) max_skill = list( SKILL_CONSTRUCTION = SKILL_MAX, SKILL_ELECTRICAL = SKILL_MAX, SKILL_ATMOS = SKILL_MAX, - SKILL_ENGINES = SKILL_MAX) - skill_points = 30 + SKILL_ENGINES = SKILL_MAX, + SKILL_DEVICES = SKILL_EXPERIENCED) access = list( access_engine, access_engine_equip, access_maint_tunnels, access_external_airlocks, access_emergency_storage, @@ -217,15 +220,15 @@ ) software_on_spawn = list(/datum/computer_file/program/comm, - /datum/computer_file/program/ntnetmonitor, - /datum/computer_file/program/power_monitor, - /datum/computer_file/program/supermatter_monitor, - /datum/computer_file/program/alarm_monitor, - /datum/computer_file/program/atmos_control, - /datum/computer_file/program/rcon_console, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/shields_monitor, - /datum/computer_file/program/reports) + /datum/computer_file/program/ntnetmonitor, + /datum/computer_file/program/power_monitor, + /datum/computer_file/program/supermatter_monitor, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/atmos_control, + /datum/computer_file/program/rcon_console, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/shields_monitor, + /datum/computer_file/program/reports) /datum/job/chief_engineer/get_description_blurb() return "You are the Chief Engineer. You manage the Engineering Department. You are responsible for the Senior engineer, who is your right hand and (should be) an experienced, skilled engineer. Delegate to and listen to them. Manage your engineers, ensure vessel power stays on, breaches are patched and problems are fixed. Advise the CO on engineering matters. You are also responsible for the maintenance and control of any vessel synthetics. You are an experienced engineer with a wealth of theoretical knowledge. You should also know vessel regulations to a reasonable degree." @@ -247,10 +250,10 @@ /datum/mil_rank/fleet/o2, /datum/mil_rank/fleet/o3 ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_ADEPT, + min_skill = list( SKILL_BUREAUCRACY = SKILL_TRAINED, SKILL_EVA = SKILL_BASIC, SKILL_COMBAT = SKILL_BASIC, - SKILL_WEAPONS = SKILL_ADEPT, + SKILL_WEAPONS = SKILL_TRAINED, SKILL_FORENSICS = SKILL_BASIC) max_skill = list( SKILL_COMBAT = SKILL_MAX, @@ -268,9 +271,9 @@ ) software_on_spawn = list(/datum/computer_file/program/comm, - /datum/computer_file/program/digitalwarrant, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/reports) + /datum/computer_file/program/digitalwarrant, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/reports) /datum/job/hos/get_description_blurb() return "You are the Chief of Security. You manage ship security. The Masters at Arms and the Military Police, as well as the Brig Chief and the Forensic Technician. You keep the vessel safe. You handle both internal and external security matters. You are the law. You are subordinate to the CO and the XO. You are expected to know the SCMJ and Sol law and Alert Procedure to a very high degree along with general regulations." @@ -288,7 +291,7 @@ outfit_type = /singleton/hierarchy/outfit/job/torch/crew/representative allowed_branches = list(/datum/mil_branch/solgov) allowed_ranks = list(/datum/mil_rank/sol/gov) - min_skill = list( SKILL_BUREAUCRACY = SKILL_EXPERT, + min_skill = list( SKILL_BUREAUCRACY = SKILL_EXPERIENCED, SKILL_FINANCE = SKILL_BASIC) skill_points = 20 minimum_character_age = list(SPECIES_HUMAN = 27) @@ -329,9 +332,9 @@ SKILL_COMBAT = SKILL_BASIC, SKILL_WEAPONS = SKILL_BASIC) - max_skill = list( SKILL_PILOT = SKILL_ADEPT, - SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT, + max_skill = list( SKILL_PILOT = SKILL_TRAINED, + SKILL_COMBAT = SKILL_EXPERIENCED, + SKILL_WEAPONS = SKILL_EXPERIENCED, SKILL_CONSTRUCTION = SKILL_MAX, SKILL_ELECTRICAL = SKILL_MAX, SKILL_ENGINES = SKILL_MAX, @@ -348,7 +351,7 @@ ) software_on_spawn = list(/datum/computer_file/program/camera_monitor, - /datum/computer_file/program/reports) + /datum/computer_file/program/reports) /datum/job/sea/get_description_blurb() return "You are the Senior Enlisted Advisor. You are the highest enlisted person on the ship. You are directly subordinate to the CO. You advise them on enlisted concerns and provide expertise and advice to officers. You are responsible for ensuring discipline and good conduct among enlisted, as well as notifying officers of any issues and \"advising\" them on mistakes they make. You also handle various duties on behalf of the CO and XO. You are an experienced enlisted person, very likely equal only in experience to the CO and XO. You know the regulations better than anyone." @@ -375,7 +378,7 @@ /datum/mil_rank/fleet/o1 ) min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_PILOT = SKILL_ADEPT) + SKILL_PILOT = SKILL_TRAINED) max_skill = list( SKILL_PILOT = SKILL_MAX) skill_points = 20 @@ -390,14 +393,14 @@ ) software_on_spawn = list(/datum/computer_file/program/comm, - /datum/computer_file/program/suit_sensors, - /datum/computer_file/program/power_monitor, - /datum/computer_file/program/supermatter_monitor, - /datum/computer_file/program/alarm_monitor, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/shields_monitor, - /datum/computer_file/program/reports, - /datum/computer_file/program/deck_management) + /datum/computer_file/program/suit_sensors, + /datum/computer_file/program/power_monitor, + /datum/computer_file/program/supermatter_monitor, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/shields_monitor, + /datum/computer_file/program/reports, + /datum/computer_file/program/deck_management) /datum/job/bridgeofficer/get_description_blurb() return "You are a Bridge Officer. You are a very junior officer. You do not give orders of your own. You are subordinate to all of command. You handle matters on the bridge and report directly to the CO and XO. You take the Torch's helm and pilot the Aquila if needed. You monitor bridge computer programs and communications and report relevant information to command." diff --git a/maps/torch/job/corporate_jobs.dm b/maps/torch/job/corporate_jobs.dm index b8c84622ce811..3f17926d9ea09 100644 --- a/maps/torch/job/corporate_jobs.dm +++ b/maps/torch/job/corporate_jobs.dm @@ -18,7 +18,7 @@ outfit_type = /singleton/hierarchy/outfit/job/torch/passenger/workplace_liaison allowed_branches = list(/datum/mil_branch/civilian) allowed_ranks = list(/datum/mil_rank/civ/contractor) - min_skill = list( SKILL_BUREAUCRACY = SKILL_EXPERT, + min_skill = list( SKILL_BUREAUCRACY = SKILL_EXPERIENCED, SKILL_FINANCE = SKILL_BASIC) skill_points = 20 diff --git a/maps/torch/job/engineering_jobs.dm b/maps/torch/job/engineering_jobs.dm index 71846d85ede17..563f26898136b 100644 --- a/maps/torch/job/engineering_jobs.dm +++ b/maps/torch/job/engineering_jobs.dm @@ -21,18 +21,20 @@ /datum/mil_rank/fleet/e7, /datum/mil_rank/fleet/e8, ) - min_skill = list( SKILL_COMPUTER = SKILL_BASIC, - SKILL_EVA = SKILL_ADEPT, - SKILL_CONSTRUCTION = SKILL_ADEPT, - SKILL_ELECTRICAL = SKILL_ADEPT, - SKILL_ATMOS = SKILL_BASIC, - SKILL_ENGINES = SKILL_ADEPT) + skill_points = 26 + min_skill = list( // 22 points + SKILL_COMPUTER = SKILL_TRAINED, // 2 points + SKILL_EVA = SKILL_TRAINED, // 2 points + SKILL_CONSTRUCTION = SKILL_TRAINED, // 2 points + SKILL_ELECTRICAL = SKILL_TRAINED, // 4 points + SKILL_ATMOS = SKILL_TRAINED, // 4 points + SKILL_ENGINES = SKILL_TRAINED // 8 points + ) max_skill = list( SKILL_CONSTRUCTION = SKILL_MAX, - SKILL_ELECTRICAL = SKILL_MAX, - SKILL_ATMOS = SKILL_MAX, - SKILL_ENGINES = SKILL_MAX) - skill_points = 24 + SKILL_ELECTRICAL = SKILL_MAX, + SKILL_ATMOS = SKILL_MAX, + SKILL_ENGINES = SKILL_MAX) access = list( access_engine, access_engine_equip, access_maint_tunnels, access_external_airlocks, access_emergency_storage, @@ -41,12 +43,12 @@ ) software_on_spawn = list(/datum/computer_file/program/power_monitor, - /datum/computer_file/program/supermatter_monitor, - /datum/computer_file/program/alarm_monitor, - /datum/computer_file/program/atmos_control, - /datum/computer_file/program/rcon_console, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/shields_monitor) + /datum/computer_file/program/supermatter_monitor, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/atmos_control, + /datum/computer_file/program/rcon_console, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/shields_monitor) /datum/job/senior_engineer/get_description_blurb() return "You are the Senior Engineer. You are a veteran SNCO. You are subordinate to the Chief Engineer though you may have many years more experience than them and your subordinates are the rest of engineering. You should be an expert in practically every engineering area and familiar and possess leadership skills. Coordinate the team and ensure the smooth running of the department along with the Chief Engineer." @@ -82,7 +84,7 @@ ) min_skill = list( SKILL_COMPUTER = SKILL_BASIC, SKILL_EVA = SKILL_BASIC, - SKILL_CONSTRUCTION = SKILL_ADEPT, + SKILL_CONSTRUCTION = SKILL_TRAINED, SKILL_ELECTRICAL = SKILL_BASIC, SKILL_ATMOS = SKILL_BASIC, SKILL_ENGINES = SKILL_BASIC) @@ -100,12 +102,12 @@ ) software_on_spawn = list(/datum/computer_file/program/power_monitor, - /datum/computer_file/program/supermatter_monitor, - /datum/computer_file/program/alarm_monitor, - /datum/computer_file/program/atmos_control, - /datum/computer_file/program/rcon_console, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/shields_monitor) + /datum/computer_file/program/supermatter_monitor, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/atmos_control, + /datum/computer_file/program/rcon_console, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/shields_monitor) /datum/job/engineer/get_description_blurb() return "You are an Engineer. You operate under one of many titles and may be highly specialised in a specific area of engineering. You probably have at least a general familiarity with most other areas though this is not expected. You are subordinate to the Senior Engineer and the Chief Engineer and are expected to follow them." @@ -135,12 +137,12 @@ no_skill_buffs = TRUE min_skill = list( SKILL_COMPUTER = SKILL_BASIC, - SKILL_HAULING = SKILL_ADEPT, - SKILL_EVA = SKILL_ADEPT, - SKILL_CONSTRUCTION = SKILL_ADEPT, - SKILL_ELECTRICAL = SKILL_ADEPT, - SKILL_ATMOS = SKILL_ADEPT, - SKILL_ENGINES = SKILL_ADEPT) + SKILL_HAULING = SKILL_TRAINED, + SKILL_EVA = SKILL_TRAINED, + SKILL_CONSTRUCTION = SKILL_TRAINED, + SKILL_ELECTRICAL = SKILL_TRAINED, + SKILL_ATMOS = SKILL_TRAINED, + SKILL_ENGINES = SKILL_TRAINED) max_skill = list( SKILL_CONSTRUCTION = SKILL_MAX, SKILL_ELECTRICAL = SKILL_MAX, @@ -154,12 +156,12 @@ ) software_on_spawn = list(/datum/computer_file/program/power_monitor, - /datum/computer_file/program/supermatter_monitor, - /datum/computer_file/program/alarm_monitor, - /datum/computer_file/program/atmos_control, - /datum/computer_file/program/rcon_console, - /datum/computer_file/program/camera_monitor, - /datum/computer_file/program/shields_monitor) + /datum/computer_file/program/supermatter_monitor, + /datum/computer_file/program/alarm_monitor, + /datum/computer_file/program/atmos_control, + /datum/computer_file/program/rcon_console, + /datum/computer_file/program/camera_monitor, + /datum/computer_file/program/shields_monitor) /datum/job/engineer_trainee/get_description_blurb() return "You are an Engineer Trainee. You are learning how to operate the various onboard engineering systems from senior engineering staff. You are subordinate to all of the other engineers aboard. The role is only for players new to the engineering system and department." @@ -189,21 +191,21 @@ /datum/mil_rank/ec/e5, /datum/mil_rank/civ/contractor ) - min_skill = list( SKILL_COMPUTER = SKILL_ADEPT, - SKILL_DEVICES = SKILL_ADEPT, - SKILL_EVA = SKILL_ADEPT, - SKILL_ANATOMY = SKILL_ADEPT, + min_skill = list( SKILL_COMPUTER = SKILL_TRAINED, + SKILL_DEVICES = SKILL_EXPERIENCED, + SKILL_EVA = SKILL_TRAINED, + SKILL_ANATOMY = SKILL_TRAINED, SKILL_CONSTRUCTION = SKILL_BASIC, SKILL_ELECTRICAL = SKILL_BASIC, SKILL_MECH = HAS_PERK) max_skill = list( SKILL_CONSTRUCTION = SKILL_MAX, SKILL_ELECTRICAL = SKILL_MAX, - SKILL_ATMOS = SKILL_EXPERT, - SKILL_ENGINES = SKILL_EXPERT, + SKILL_ATMOS = SKILL_EXPERIENCED, + SKILL_ENGINES = SKILL_EXPERIENCED, SKILL_DEVICES = SKILL_MAX, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT) + SKILL_MEDICAL = SKILL_EXPERIENCED, + SKILL_ANATOMY = SKILL_EXPERIENCED) skill_points = 20 access = list( diff --git a/maps/torch/job/exploration_jobs.dm b/maps/torch/job/exploration_jobs.dm index fe0ffbe1fabf0..63f4856365a5d 100644 --- a/maps/torch/job/exploration_jobs.dm +++ b/maps/torch/job/exploration_jobs.dm @@ -16,14 +16,14 @@ /datum/mil_rank/ec/o1 ) min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_EVA = SKILL_ADEPT, - SKILL_SCIENCE = SKILL_ADEPT, + SKILL_EVA = SKILL_TRAINED, + SKILL_SCIENCE = SKILL_TRAINED, SKILL_PILOT = SKILL_BASIC) max_skill = list( SKILL_PILOT = SKILL_MAX, SKILL_SCIENCE = SKILL_MAX, - SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT) + SKILL_COMBAT = SKILL_EXPERIENCED, + SKILL_WEAPONS = SKILL_EXPERIENCED) skill_points = 22 access = list( @@ -35,7 +35,7 @@ ) software_on_spawn = list(/datum/computer_file/program/deck_management, - /datum/computer_file/program/reports) + /datum/computer_file/program/reports) /datum/job/pathfinder/get_description_blurb() return "You are the Pathfinder. Your duty is to organize and lead the expeditions to away sites, carrying out the EC's Primary Mission. You command Explorers. You make sure that expedition has the supplies and personnel it needs. You can pilot Charon if nobody else provides a pilot. Once on the away mission, your duty is to ensure that anything of scientific interest is brought back to the ship and passed to the relevant research lab." @@ -72,7 +72,7 @@ access_radio_exp, access_radio_sci, access_radio_sup, access_maint_tunnels, access_emergency_storage ) min_skill = list( SKILL_EVA = SKILL_BASIC, - SKILL_PILOT = SKILL_ADEPT) + SKILL_PILOT = SKILL_TRAINED) max_skill = list( SKILL_PILOT = SKILL_MAX, SKILL_SCIENCE = SKILL_MAX) @@ -83,7 +83,7 @@ department_flag = EXP total_positions = 5 spawn_positions = 5 - supervisors = "the Commanding Officer, Executive Officer, and Pathfinder" + supervisors = "the Pathfinder" selection_color = "#68099e" minimum_character_age = list(SPECIES_HUMAN = 18) ideal_character_age = 20 @@ -98,8 +98,8 @@ max_skill = list( SKILL_PILOT = SKILL_MAX, SKILL_SCIENCE = SKILL_MAX, - SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT) + SKILL_COMBAT = SKILL_EXPERIENCED, + SKILL_WEAPONS = SKILL_EXPERIENCED) access = list( access_explorer, access_maint_tunnels, access_eva, access_emergency_storage, diff --git a/maps/torch/job/medical_jobs.dm b/maps/torch/job/medical_jobs.dm index 0cea8bf651646..d2ab39cf70f98 100644 --- a/maps/torch/job/medical_jobs.dm +++ b/maps/torch/job/medical_jobs.dm @@ -25,10 +25,10 @@ /datum/mil_rank/civ/contractor ) min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT, + SKILL_MEDICAL = SKILL_EXPERIENCED, + SKILL_ANATOMY = SKILL_EXPERIENCED, SKILL_CHEMISTRY = SKILL_BASIC, - SKILL_DEVICES = SKILL_ADEPT) + SKILL_DEVICES = SKILL_TRAINED) max_skill = list( SKILL_MEDICAL = SKILL_MAX, SKILL_ANATOMY = SKILL_MAX, @@ -42,7 +42,7 @@ ) software_on_spawn = list(/datum/computer_file/program/suit_sensors, - /datum/computer_file/program/camera_monitor) + /datum/computer_file/program/camera_monitor) /datum/job/junior_doctor title = "Medical Resident" @@ -68,10 +68,10 @@ /datum/mil_rank/civ/contractor ) min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_MEDICAL = SKILL_EXPERT, - SKILL_ANATOMY = SKILL_EXPERT, + SKILL_MEDICAL = SKILL_EXPERIENCED, + SKILL_ANATOMY = SKILL_EXPERIENCED, SKILL_CHEMISTRY = SKILL_BASIC, - SKILL_DEVICES = SKILL_ADEPT) + SKILL_DEVICES = SKILL_TRAINED) max_skill = list( SKILL_MEDICAL = SKILL_MAX, SKILL_ANATOMY = SKILL_MAX, @@ -85,7 +85,7 @@ ) software_on_spawn = list(/datum/computer_file/program/suit_sensors, - /datum/computer_file/program/camera_monitor) + /datum/computer_file/program/camera_monitor) /datum/job/doctor title = "Medical Technician" @@ -129,7 +129,7 @@ ) software_on_spawn = list(/datum/computer_file/program/suit_sensors, - /datum/computer_file/program/camera_monitor) + /datum/computer_file/program/camera_monitor) skill_points = 22 /datum/job/medical_trainee @@ -158,9 +158,9 @@ skill_points = 4 no_skill_buffs = TRUE - min_skill = list( SKILL_EVA = SKILL_ADEPT, - SKILL_HAULING = SKILL_ADEPT, - SKILL_MEDICAL = SKILL_EXPERT, + min_skill = list( SKILL_EVA = SKILL_TRAINED, + SKILL_HAULING = SKILL_TRAINED, + SKILL_MEDICAL = SKILL_EXPERIENCED, SKILL_ANATOMY = SKILL_BASIC) max_skill = list( SKILL_MEDICAL = SKILL_MAX, @@ -175,7 +175,7 @@ ) software_on_spawn = list(/datum/computer_file/program/suit_sensors, - /datum/computer_file/program/camera_monitor) + /datum/computer_file/program/camera_monitor) /datum/job/medical_trainee/get_description_blurb() return "You are a Trainee Medical Technician. You are learning how to treat and recover wounded crew from the more experienced medical personnel aboard. You are subordinate to the rest of the medical team. The role is only for players new to the medical system and department." @@ -186,7 +186,7 @@ department_flag = MED total_positions = 1 spawn_positions = 1 - supervisors = "medical personnel, the Corporate Liaison, and the Chief Medical Officer" + supervisors = "medical personnel, and the Chief Medical Officer" selection_color = "#013d3b" economic_power = 4 minimum_character_age = list(SPECIES_HUMAN = 25) @@ -199,7 +199,7 @@ allowed_branches = list(/datum/mil_branch/civilian) allowed_ranks = list(/datum/mil_rank/civ/contractor) min_skill = list( SKILL_MEDICAL = SKILL_BASIC, - SKILL_CHEMISTRY = SKILL_ADEPT) + SKILL_CHEMISTRY = SKILL_TRAINED) max_skill = list( SKILL_MEDICAL = SKILL_BASIC, SKILL_ANATOMY = SKILL_BASIC, @@ -209,7 +209,7 @@ access = list( access_medical, access_maint_tunnels, access_emergency_storage, access_medical_equip, access_solgov_crew, access_chemistry, - access_virology, access_morgue, access_crematorium, access_radio_med + access_virology, access_morgue, access_crematorium, access_radio_med ) /datum/job/chemist/get_description_blurb() @@ -228,9 +228,7 @@ alt_titles = list( "Psychiatrist", "Psychologist", - "Psionic Counselor", "Mentalist" - ) allowed_branches = list( @@ -242,11 +240,12 @@ /datum/mil_rank/fleet/o1, /datum/mil_rank/ec/o1) min_skill = list( - SKILL_BUREAUCRACY = SKILL_BASIC, - SKILL_MEDICAL = SKILL_BASIC + SKILL_BUREAUCRACY = SKILL_TRAINED, + SKILL_MEDICAL = SKILL_BASIC ) max_skill = list( - SKILL_MEDICAL = SKILL_MAX + SKILL_MEDICAL = SKILL_TRAINED, + SKILL_ANATOMY = SKILL_TRAINED ) access = list( access_medical, access_psychiatrist, @@ -260,9 +259,7 @@ give_psionic_implant_on_join = FALSE /datum/job/psychiatrist/equip(mob/living/carbon/human/H) - if(H.mind?.role_alt_title == "Psionic Counselor") - psi_faculties = list("[PSI_REDACTION]" = PSI_RANK_OPERANT) - if(H.mind?.role_alt_title == "Mentalist") + if (H.mind?.role_alt_title == "Mentalist") psi_faculties = list("[PSI_COERCION]" = PSI_RANK_OPERANT) return ..() diff --git a/maps/torch/job/misc_jobs.dm b/maps/torch/job/misc_jobs.dm index 0ce733a60de81..4cef89f23441a 100644 --- a/maps/torch/job/misc_jobs.dm +++ b/maps/torch/job/misc_jobs.dm @@ -25,8 +25,8 @@ Civilian /datum/job/assistant title = "Passenger" - total_positions = 12 - spawn_positions = 12 + total_positions = -1 + spawn_positions = -1 supervisors = "the Executive Officer" economic_power = 6 announced = FALSE @@ -73,7 +73,7 @@ Civilian latejoin_at_spawnpoints = 1 access = list(access_merchant) announced = FALSE - min_skill = list( SKILL_FINANCE = SKILL_ADEPT, + min_skill = list( SKILL_FINANCE = SKILL_TRAINED, SKILL_PILOT = SKILL_BASIC) max_skill = list( SKILL_PILOT = SKILL_MAX) diff --git a/maps/torch/job/outfits/corporate_outfits.dm b/maps/torch/job/outfits/corporate_outfits.dm index 8a965423be8df..8e0d5c0be1ee9 100644 --- a/maps/torch/job/outfits/corporate_outfits.dm +++ b/maps/torch/job/outfits/corporate_outfits.dm @@ -18,7 +18,7 @@ /singleton/hierarchy/outfit/job/torch/passenger/research/scientist/New() ..() - BACKPACK_OVERRIDE_RESEARCH + BACKPACK_OVERRIDE_RESEARCH_CORP /singleton/hierarchy/outfit/job/torch/passenger/research/assist name = OUTFIT_JOB_NAME("Research Assistant - Torch") diff --git a/maps/torch/job/outfits/misc_outfits.dm b/maps/torch/job/outfits/misc_outfits.dm index 73c72ec6c31b1..2281fa38314c9 100644 --- a/maps/torch/job/outfits/misc_outfits.dm +++ b/maps/torch/job/outfits/misc_outfits.dm @@ -30,24 +30,44 @@ /singleton/hierarchy/outfit/job/torch/ert name = OUTFIT_JOB_NAME("ERT - Torch") uniform = /obj/item/clothing/under/solgov/utility/fleet/combat - suit = /obj/item/clothing/suit/armor/pcarrier/light/sol - head = /obj/item/clothing/head/helmet + head = /obj/item/clothing/head/beret/solgov/fleet gloves = /obj/item/clothing/gloves/thick id_types = list(/obj/item/card/id/centcom/ERT) pda_type = /obj/item/modular_computer/pda/ert l_ear = /obj/item/device/radio/headset/ert shoes = /obj/item/clothing/shoes/dutyboots - mask = /obj/item/clothing/mask/gas/half /singleton/hierarchy/outfit/job/torch/ert/leader name = OUTFIT_JOB_NAME("ERT Leader - Torch") uniform = /obj/item/clothing/under/solgov/utility/fleet/combat/command - suit = /obj/item/clothing/suit/armor/pcarrier/medium/sol - head = /obj/item/clothing/head/helmet/ballistic - mask = /obj/item/clothing/mask/gas/half + head = /obj/item/clothing/head/beret/solgov/fleet/command /singleton/hierarchy/outfit/job/torch/ert/suit name = OUTFIT_JOB_NAME("ERT Heavy - Torch") - uniform = /obj/item/clothing/under/solgov/utility/fleet/combat/command + back = /obj/item/rig/ert/fleet + flags = OUTFIT_RESET_EQUIPMENT | OUTFIT_ADJUSTMENT_SKIP_BACKPACK + head = null + gloves = null + +/singleton/hierarchy/outfit/job/torch/ert/hostile + name = OUTFIT_JOB_NAME("Fleet - Hostile") + uniform = /obj/item/clothing/under/solgov/utility/fleet/combat + suit = /obj/item/clothing/suit/armor/pcarrier/light/sol + head = /obj/item/clothing/head/helmet mask = /obj/item/clothing/mask/gas/half - back = /obj/item/rig/ert + glasses = /obj/item/clothing/glasses/tacgoggles + flags = OUTFIT_RESET_EQUIPMENT | OUTFIT_ADJUSTMENT_ALL_SKIPS + l_ear = null + +/singleton/hierarchy/outfit/job/torch/ert/hostile/leader + name = OUTFIT_JOB_NAME("Fleet Leader - Hostile") + uniform = /obj/item/clothing/under/solgov/utility/fleet/combat + suit = /obj/item/clothing/suit/armor/bulletproof/armsman + head = /obj/item/clothing/head/helmet/armsman + +/singleton/hierarchy/outfit/job/torch/ert/hostile/suit + name = OUTFIT_JOB_NAME("Fleet Heavy - Hostile") + back = /obj/item/rig/ert/fleet + gloves = null + suit = null + head = null diff --git a/maps/torch/job/outfits/research_outfits.dm b/maps/torch/job/outfits/research_outfits.dm index 39d41631a3276..11b0e201cae91 100644 --- a/maps/torch/job/outfits/research_outfits.dm +++ b/maps/torch/job/outfits/research_outfits.dm @@ -6,6 +6,10 @@ pda_type = /obj/item/modular_computer/pda/science l_ear = /obj/item/device/radio/headset/science +/singleton/hierarchy/outfit/job/torch/crew/research/New() + ..() + BACKPACK_OVERRIDE_RESEARCH + /singleton/hierarchy/outfit/job/torch/crew/research/cso name = OUTFIT_JOB_NAME("Chief Science Officer - Expeditionary Corps") uniform = /obj/item/clothing/under/solgov/utility/expeditionary/officer/research diff --git a/maps/torch/job/outfits/unused_outfits.dm b/maps/torch/job/outfits/unused_outfits.dm deleted file mode 100644 index 8ad1a554e6cc0..0000000000000 --- a/maps/torch/job/outfits/unused_outfits.dm +++ /dev/null @@ -1,51 +0,0 @@ -//army outfits -/singleton/hierarchy/outfit/job/torch/army - name = OUTFIT_JOB_NAME("SCGA Soldier - Torch") - uniform = /obj/item/clothing/under/solgov/utility/army - head = /obj/item/clothing/head/solgov/utility/army - back = /obj/item/storage/backpack/rucksack/green - shoes = /obj/item/clothing/shoes/jungleboots - -/singleton/hierarchy/outfit/job/torch/armyservice - name = OUTFIT_JOB_NAME("SCGA Service - Torch") - uniform = /obj/item/clothing/under/solgov/service/army - head = /obj/item/clothing/head/solgov/service/army - suit = /obj/item/clothing/suit/storage/solgov/service/army - back = null - shoes = /obj/item/clothing/shoes/dress - -/singleton/hierarchy/outfit/job/torch/armyservice/skirt - name = OUTFIT_JOB_NAME("SCGA Service - Skirt") - uniform = /obj/item/clothing/under/solgov/service/army/skirt - -/singleton/hierarchy/outfit/job/torch/armyservice/officer - name = OUTFIT_JOB_NAME("SCGA Service - Officer") - uniform = /obj/item/clothing/under/solgov/service/army/command - head = /obj/item/clothing/head/solgov/service/army/command - suit = /obj/item/clothing/suit/storage/solgov/service/army/command - -/singleton/hierarchy/outfit/job/torch/armyservice/officer/skirt - name = OUTFIT_JOB_NAME("SCGA Service - Officer Skirt") - uniform = /obj/item/clothing/under/solgov/service/army/command/skirt - -/singleton/hierarchy/outfit/job/torch/armydress - name = OUTFIT_JOB_NAME("SCGA Dress - Torch") - uniform = /obj/item/clothing/under/solgov/mildress/army - head = /obj/item/clothing/head/solgov/dress/army - suit = /obj/item/clothing/suit/dress/solgov/army - back = null - shoes = /obj/item/clothing/shoes/dress - -/singleton/hierarchy/outfit/job/torch/armydress/skirt - name = OUTFIT_JOB_NAME("SCGA Dress - Skirt") - uniform = /obj/item/clothing/under/solgov/mildress/army/skirt - -/singleton/hierarchy/outfit/job/torch/armydress/officer - name = OUTFIT_JOB_NAME("SCGA Dress - Officer") - uniform = /obj/item/clothing/under/solgov/mildress/army/command - head = /obj/item/clothing/head/solgov/dress/army/command - suit = /obj/item/clothing/suit/dress/solgov/army/command - -/singleton/hierarchy/outfit/job/torch/armydress/officer/skirt - name = OUTFIT_JOB_NAME("SCGA Dress - Officer Skirt") - uniform = /obj/item/clothing/under/solgov/mildress/army/command/skirt diff --git a/maps/torch/job/research_jobs.dm b/maps/torch/job/research_jobs.dm index 7f2e8244adb58..c6d82bf1a6e68 100644 --- a/maps/torch/job/research_jobs.dm +++ b/maps/torch/job/research_jobs.dm @@ -34,8 +34,8 @@ SKILL_FINANCE = SKILL_BASIC, SKILL_BOTANY = SKILL_BASIC, SKILL_ANATOMY = SKILL_BASIC, - SKILL_DEVICES = SKILL_ADEPT, - SKILL_SCIENCE = SKILL_ADEPT) + SKILL_DEVICES = SKILL_TRAINED, + SKILL_SCIENCE = SKILL_TRAINED) max_skill = list( SKILL_ANATOMY = SKILL_MAX, SKILL_DEVICES = SKILL_MAX, @@ -62,7 +62,7 @@ min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, SKILL_COMPUTER = SKILL_BASIC, SKILL_DEVICES = SKILL_BASIC, - SKILL_SCIENCE = SKILL_ADEPT) + SKILL_SCIENCE = SKILL_TRAINED) max_skill = list( SKILL_ANATOMY = SKILL_MAX, SKILL_DEVICES = SKILL_MAX, @@ -102,8 +102,7 @@ minimum_character_age = list(SPECIES_HUMAN = 18) ideal_character_age = 30 alt_titles = list( - "Custodian" = /singleton/hierarchy/outfit/job/torch/passenger/research/assist/janitor, - "Testing Assistant" = /singleton/hierarchy/outfit/job/torch/passenger/research/assist/testsubject, + "Testing Assistant", "Intern", "Clerk", "Field Assistant") diff --git a/maps/torch/job/security_jobs.dm b/maps/torch/job/security_jobs.dm index babefab10597a..c0b68841ec539 100644 --- a/maps/torch/job/security_jobs.dm +++ b/maps/torch/job/security_jobs.dm @@ -18,10 +18,10 @@ /datum/mil_rank/fleet/e7, /datum/mil_rank/fleet/e8, ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_ADEPT, + min_skill = list( SKILL_BUREAUCRACY = SKILL_TRAINED, SKILL_EVA = SKILL_BASIC, SKILL_COMBAT = SKILL_BASIC, - SKILL_WEAPONS = SKILL_ADEPT, + SKILL_WEAPONS = SKILL_TRAINED, SKILL_FORENSICS = SKILL_BASIC) max_skill = list( SKILL_COMBAT = SKILL_MAX, @@ -37,7 +37,7 @@ ) software_on_spawn = list(/datum/computer_file/program/digitalwarrant, - /datum/computer_file/program/camera_monitor) + /datum/computer_file/program/camera_monitor) /datum/job/detective title = "Forensic Technician" @@ -73,10 +73,10 @@ SKILL_EVA = SKILL_BASIC, SKILL_COMBAT = SKILL_BASIC, SKILL_WEAPONS = SKILL_BASIC, - SKILL_FORENSICS = SKILL_ADEPT) + SKILL_FORENSICS = SKILL_TRAINED) - max_skill = list( SKILL_COMBAT = SKILL_EXPERT, - SKILL_WEAPONS = SKILL_EXPERT, + max_skill = list( SKILL_COMBAT = SKILL_EXPERIENCED, + SKILL_WEAPONS = SKILL_EXPERIENCED, SKILL_FORENSICS = SKILL_MAX) skill_points = 20 @@ -88,7 +88,7 @@ ) software_on_spawn = list(/datum/computer_file/program/digitalwarrant, - /datum/computer_file/program/camera_monitor) + /datum/computer_file/program/camera_monitor) /datum/job/officer title = "Master at Arms" @@ -114,12 +114,12 @@ min_skill = list( SKILL_BUREAUCRACY = SKILL_BASIC, SKILL_EVA = SKILL_BASIC, SKILL_COMBAT = SKILL_BASIC, - SKILL_WEAPONS = SKILL_ADEPT, + SKILL_WEAPONS = SKILL_TRAINED, SKILL_FORENSICS = SKILL_BASIC) max_skill = list( SKILL_COMBAT = SKILL_MAX, SKILL_WEAPONS = SKILL_MAX, - SKILL_FORENSICS = SKILL_EXPERT) + SKILL_FORENSICS = SKILL_EXPERIENCED) access = list( access_security, access_brig, access_maint_tunnels, @@ -129,4 +129,4 @@ ) software_on_spawn = list(/datum/computer_file/program/digitalwarrant, - /datum/computer_file/program/camera_monitor) + /datum/computer_file/program/camera_monitor) diff --git a/maps/torch/job/service_jobs.dm b/maps/torch/job/service_jobs.dm index 3add8c077334f..f73cda3d2c155 100644 --- a/maps/torch/job/service_jobs.dm +++ b/maps/torch/job/service_jobs.dm @@ -20,8 +20,8 @@ /datum/mil_rank/fleet/e6 ) min_skill = list( - SKILL_BUREAUCRACY = SKILL_ADEPT, - SKILL_COOKING = SKILL_ADEPT, + SKILL_BUREAUCRACY = SKILL_TRAINED, + SKILL_COOKING = SKILL_TRAINED, SKILL_BOTANY = SKILL_BASIC, SKILL_CHEMISTRY = SKILL_BASIC ) @@ -36,7 +36,8 @@ access_janitor, access_commissary, access_hydroponics, - access_kitchen + access_kitchen, + access_o_mess ) /datum/job/chaplain @@ -78,6 +79,7 @@ minimum_character_age = list(SPECIES_HUMAN = 20) ideal_character_age = 20 alt_titles = list( + "Custodian", "Janitor") outfit_type = /singleton/hierarchy/outfit/job/torch/crew/service/janitor allowed_branches = list( @@ -132,14 +134,15 @@ min_skill = list( SKILL_BOTANY = SKILL_BASIC, SKILL_CHEMISTRY = SKILL_BASIC, - SKILL_COOKING = SKILL_ADEPT + SKILL_COOKING = SKILL_TRAINED ) access = list( access_commissary, access_hydroponics, access_kitchen, access_radio_serv, - access_solgov_crew + access_solgov_crew, + access_o_mess ) diff --git a/maps/torch/job/supply_jobs.dm b/maps/torch/job/supply_jobs.dm index d4549db0d2662..f9f5debb8e951 100644 --- a/maps/torch/job/supply_jobs.dm +++ b/maps/torch/job/supply_jobs.dm @@ -20,7 +20,7 @@ /datum/mil_rank/fleet/e7, /datum/mil_rank/fleet/e8 ) - min_skill = list( SKILL_BUREAUCRACY = SKILL_ADEPT, + min_skill = list( SKILL_BUREAUCRACY = SKILL_TRAINED, SKILL_FINANCE = SKILL_BASIC, SKILL_HAULING = SKILL_BASIC, SKILL_EVA = SKILL_BASIC, @@ -38,8 +38,8 @@ ) software_on_spawn = list(/datum/computer_file/program/supply, - /datum/computer_file/program/deck_management, - /datum/computer_file/program/reports) + /datum/computer_file/program/deck_management, + /datum/computer_file/program/reports) /datum/job/cargo_tech title = "Deck Technician" @@ -47,7 +47,7 @@ department_flag = SUP total_positions = 3 spawn_positions = 3 - supervisors = "the Deck Chief and Executive Officer" + supervisors = "the Deck Chief" minimum_character_age = list(SPECIES_HUMAN = 18) ideal_character_age = 24 outfit_type = /singleton/hierarchy/outfit/job/torch/crew/supply/tech @@ -77,8 +77,8 @@ ) software_on_spawn = list(/datum/computer_file/program/supply, - /datum/computer_file/program/deck_management, - /datum/computer_file/program/reports) + /datum/computer_file/program/deck_management, + /datum/computer_file/program/reports) /datum/job/mining title = "Prospector" @@ -86,7 +86,7 @@ department_flag = SUP total_positions = 2 spawn_positions = 2 - supervisors = "the Deck Chief, the Corporate Liaison and the Executive Officer" + supervisors = "the Deck Chief" economic_power = 7 minimum_character_age = list(SPECIES_HUMAN = 18) ideal_character_age = 25 @@ -94,7 +94,7 @@ "Drill Technician", "Shaft Miner", "Salvage Technician") - min_skill = list( SKILL_HAULING = SKILL_ADEPT, + min_skill = list( SKILL_HAULING = SKILL_TRAINED, SKILL_EVA = SKILL_BASIC) max_skill = list( SKILL_PILOT = SKILL_MAX) diff --git a/maps/torch/job/torch_access.dm b/maps/torch/job/torch_access.dm index 2bd37b8bfa1b3..14e09e5b2c20a 100644 --- a/maps/torch/job/torch_access.dm +++ b/maps/torch/job/torch_access.dm @@ -129,12 +129,21 @@ var/global/const/access_chief_steward = "ACCESS_TORCH_CHIEF_STEWARD" desc = "Chief Steward" region = ACCESS_REGION_COMMAND +var/global/const/access_o_mess = "ACCESS_TORCH_O_MESS" +/datum/access/o_mess + id = access_o_mess + desc = "Officer's Mess" + region = ACCESS_REGION_SERVICE + /datum/access/psychiatrist desc = "Mental Health" /datum/access/hos desc = "Chief of Security" +/datum/access/armory + desc = "Brig Chief" + /datum/access/hop desc = "Executive Officer" diff --git a/maps/torch/job/torch_jobs.dm b/maps/torch/job/torch_jobs.dm index 9688d6b42d404..a0c85c099430c 100644 --- a/maps/torch/job/torch_jobs.dm +++ b/maps/torch/job/torch_jobs.dm @@ -4,7 +4,7 @@ /datum/job/engineer, /datum/job/roboticist, /datum/job/chemist, /datum/job/scientist_assistant, /datum/job/scientist, /datum/job/nt_pilot, /datum/job/mining), /datum/species/nabber = list(/datum/job/ai, /datum/job/cyborg, /datum/job/janitor, /datum/job/scientist_assistant, /datum/job/chemist, - /datum/job/roboticist, /datum/job/cargo_tech, /datum/job/chef, /datum/job/engineer, /datum/job/doctor), + /datum/job/roboticist, /datum/job/cargo_tech, /datum/job/chef, /datum/job/engineer, /datum/job/doctor), /datum/species/vox = list(/datum/job/ai, /datum/job/cyborg), /datum/species/human/mule = list(/datum/job/ai, /datum/job/cyborg, /datum/job/merchant) ) diff --git a/maps/torch/loadout/_defines.dm b/maps/torch/loadout/_defines.dm index 4e46da835fdc0..79cb95561d7fc 100644 --- a/maps/torch/loadout/_defines.dm +++ b/maps/torch/loadout/_defines.dm @@ -1,7 +1,7 @@ //The following is a list of defs to be used for the Torch loadout. //For jobs that allow for decorative or ceremonial clothing -#define FORMAL_ROLES list(/datum/job/liaison, /datum/job/rd, /datum/job/senior_scientist, /datum/job/scientist, /datum/job/scientist_assistant, /datum/job/psychiatrist, /datum/job/representative, /datum/job/assistant, /datum/job/merchant, /datum/job/detective, /datum/job/chaplain, /datum/job/submap/bearcat_captain, /datum/job/submap/bearcat_crewman, /datum/job/submap/colonist, /datum/job/submap/pod, /datum/job/chef, /datum/job/submap/scavver_pilot, /datum/job/submap/scavver_doctor, /datum/job/submap/scavver_engineer) +#define FORMAL_ROLES list(/datum/job/liaison, /datum/job/rd, /datum/job/senior_scientist, /datum/job/scientist, /datum/job/scientist_assistant, /datum/job/psychiatrist, /datum/job/representative, /datum/job/assistant, /datum/job/merchant, /datum/job/detective, /datum/job/chaplain, /datum/job/submap/bearcat_captain, /datum/job/submap/bearcat_crewman, /datum/job/submap/colonist, /datum/job/submap/pod, /datum/job/nt_pilot, /datum/job/chef, /datum/job/submap/scavver_pilot, /datum/job/submap/scavver_doctor, /datum/job/submap/scavver_engineer) //For civilian jobs that may have a uniform, but not a strict one #define SEMIFORMAL_ROLES list(/datum/job/assistant, /datum/job/cargo_tech, /datum/job/mining, /datum/job/scientist_assistant, /datum/job/psychiatrist, /datum/job/merchant, /datum/job/nt_pilot, /datum/job/scientist, /datum/job/senior_scientist, /datum/job/detective, /datum/job/chaplain, /datum/job/engineer, /datum/job/roboticist, /datum/job/submap/bearcat_captain, /datum/job/submap/bearcat_crewman, /datum/job/submap/colonist, /datum/job/submap/pod, /datum/job/chef, /datum/job/submap/scavver_pilot, /datum/job/submap/scavver_doctor, /datum/job/submap/scavver_engineer, /datum/job/senior_doctor, /datum/job/junior_doctor, /datum/job/doctor) diff --git a/maps/torch/loadout/loadout_accessories.dm b/maps/torch/loadout/loadout_accessories.dm index 755ecf8dd17cd..2c50c8000cf30 100644 --- a/maps/torch/loadout/loadout_accessories.dm +++ b/maps/torch/loadout/loadout_accessories.dm @@ -69,7 +69,7 @@ /datum/gear/accessory/tags display_name = "dog tags" path = /obj/item/clothing/accessory/badge/solgov/tags - custom_setup_proc = /obj/item/clothing/accessory/badge/solgov/tags/proc/loadout_setup + custom_setup_proc = TYPE_PROC_REF(/obj/item/clothing/accessory/badge/solgov/tags, loadout_setup) /datum/gear/accessory/ec_scarf display_name = "Expeditionary Corps scarf" @@ -99,8 +99,8 @@ display_name = "pilot's qualification pin" path = /obj/item/clothing/accessory/solgov/specialty/pilot flags = GEAR_HAS_NO_CUSTOMIZATION - allowed_skills = list( - SKILL_PILOT = SKILL_ADEPT + required_skills = list( + SKILL_PILOT = SKILL_TRAINED ) allowed_branches = list( /datum/mil_branch/fleet, @@ -196,9 +196,6 @@ /datum/job/pathfinder, /datum/job/explorer) -/datum/gear/tactical/armor_deco - allowed_roles = ARMORED_ROLES - /datum/gear/tactical/press_tag display_name = "Press tag" path = /obj/item/clothing/accessory/armor_tag/press @@ -267,7 +264,7 @@ allowed_roles = list(/datum/job/psychiatrist) /********************* - tactical accessories +tactical accessories *********************/ /datum/gear/tactical/ubac display_name = "black UBAC shirt" diff --git a/maps/torch/loadout/loadout_ec_skillbadges.dm b/maps/torch/loadout/loadout_ec_skillbadges.dm index a7905ef49acb3..ea35408896515 100644 --- a/maps/torch/loadout/loadout_ec_skillbadges.dm +++ b/maps/torch/loadout/loadout_ec_skillbadges.dm @@ -1,7 +1,7 @@ /datum/gear/skill - sort_category = "Skill Badges" - category = /datum/gear/skill + category = GEAR_CATEGORY_SKILL_BADGES + abstract_type = /datum/gear/skill slot = slot_tie allowed_branches = list( /datum/mil_branch/expeditionary_corps @@ -11,8 +11,8 @@ /datum/gear/skill/botany display_name = "Field Xenobotany Specialist badge" path = /obj/item/clothing/accessory/solgov/skillbadge/botany - allowed_skills = list( - SKILL_BOTANY = SKILL_ADEPT + required_skills = list( + SKILL_BOTANY = SKILL_TRAINED ) /datum/gear/skill/botany/stripe @@ -22,8 +22,8 @@ /datum/gear/skill/netgun display_name = "Xenofauna Acquisition Specialist badge" path = /obj/item/clothing/accessory/solgov/skillbadge/netgun - allowed_skills = list( - SKILL_WEAPONS = SKILL_ADEPT + required_skills = list( + SKILL_WEAPONS = SKILL_TRAINED ) /datum/gear/skill/netgun/stripe @@ -33,8 +33,8 @@ /datum/gear/skill/eva display_name = "Void Mobility Specialist badge" path = /obj/item/clothing/accessory/solgov/skillbadge/eva - allowed_skills = list( - SKILL_EVA = SKILL_ADEPT + required_skills = list( + SKILL_EVA = SKILL_TRAINED ) /datum/gear/skill/eva/stripe @@ -44,7 +44,7 @@ /datum/gear/skill/medical display_name = "Advanced First Aid Specialist badge" path = /obj/item/clothing/accessory/solgov/skillbadge/medical - allowed_skills = list( + required_skills = list( SKILL_MEDICAL = SKILL_BASIC ) @@ -55,15 +55,15 @@ /datum/gear/skill/mech display_name = "Exosuit Specialist badge" path = /obj/item/clothing/accessory/solgov/skillbadge/mech - allowed_skills = list( + required_skills = list( SKILL_MECH = HAS_PERK ) /datum/gear/skill/electric display_name = "Electrical Specialist badge" path = /obj/item/clothing/accessory/solgov/skillbadge/electric - allowed_skills = list( - SKILL_ELECTRICAL = SKILL_ADEPT + required_skills = list( + SKILL_ELECTRICAL = SKILL_TRAINED ) /datum/gear/skill/electric/stripe @@ -73,6 +73,6 @@ /datum/gear/skill/science display_name = "Research Specialist badge" path = /obj/item/clothing/accessory/solgov/skillbadge/science - allowed_skills = list( - SKILL_SCIENCE = SKILL_ADEPT + required_skills = list( + SKILL_SCIENCE = SKILL_TRAINED ) diff --git a/maps/torch/loadout/loadout_head.dm b/maps/torch/loadout/loadout_head.dm index d8dcfb6320e27..affcff4285e8b 100644 --- a/maps/torch/loadout/loadout_head.dm +++ b/maps/torch/loadout/loadout_head.dm @@ -1,7 +1,7 @@ /datum/gear/head/solberet display_name = "SolGov beret selection" description = "A beret denoting service in an organization within SolGov." - path = /obj/item/clothing/head/beret/solgov + path = /obj/item/clothing/head/beret allowed_branches = SOLGOV_BRANCHES flags = GEAR_HAS_NO_CUSTOMIZATION @@ -14,7 +14,6 @@ berets["customs and trade beret"] = /obj/item/clothing/head/beret/solgov/customs berets["government research beret"] = /obj/item/clothing/head/beret/solgov/research berets["health service beret"] = /obj/item/clothing/head/beret/solgov/health - berets["diplomatic security beret"] = /obj/item/clothing/head/beret/solgov/diplomatic berets["border security beret"] = /obj/item/clothing/head/beret/solgov/borderguard gear_tweaks += new/datum/gear_tweak/path(berets) @@ -33,7 +32,6 @@ /datum/gear/head/fleetcover display_name = "fleet utilty cover" path = /obj/item/clothing/head/solgov/utility/fleet - cost = 0 allowed_branches = list( /datum/mil_branch/fleet ) @@ -42,7 +40,6 @@ /datum/gear/head/fleetcap display_name = "fleet cap" path = /obj/item/clothing/head/soft/solgov/fleet - cost = 0 allowed_branches = list( /datum/mil_branch/fleet ) @@ -51,7 +48,6 @@ /datum/gear/head/echat display_name = "EC cap" path = /obj/item/clothing/head/soft/solgov/expedition - cost = 0 allowed_branches = list( /datum/mil_branch/expeditionary_corps ) @@ -67,9 +63,6 @@ display_name = "sterile mask" path = /obj/item/clothing/mask/surgical -/datum/gear/head/bandana - allowed_branches = CIVILIAN_BRANCHES - /datum/gear/head/beanie allowed_branches = CIVILIAN_BRANCHES @@ -138,3 +131,52 @@ /datum/gear/head/deckcrew allowed_roles = SUPPLY_ROLES + + +/datum/gear/tactical/armor_tag_flag + display_name = "Armor Tag Selection - Flags" + path = /obj/item/clothing/accessory/armor_tag + flags = GEAR_HAS_NO_CUSTOMIZATION + + +/datum/gear/tactical/armor_tag_flag/New() + ..() + var/list/options = list() + options["SCG flag"] = /obj/item/clothing/accessory/armor_tag/solgov + options["EC flag"] = /obj/item/clothing/accessory/armor_tag/solgov/ec + options["Fleet flag"] = /obj/item/clothing/accessory/armor_tag/solgov/fleet + gear_tweaks += new /datum/gear_tweak/path (options) + + +/datum/gear/tactical/armor_tag_blood + display_name = "Armor Tag Selection - Blood Type" + path = /obj/item/clothing/accessory/armor_tag + flags = GEAR_HAS_NO_CUSTOMIZATION + + +/datum/gear/tactical/armor_tag_blood/New() + ..() + var/list/options = list() + options["O+ blood patch"] = /obj/item/clothing/accessory/armor_tag/opos + options["O- blood patch"] = /obj/item/clothing/accessory/armor_tag/oneg + options["A+ blood patch"] = /obj/item/clothing/accessory/armor_tag/apos + options["A- blood patch"] = /obj/item/clothing/accessory/armor_tag/aneg + options["AB+ blood patch"] = /obj/item/clothing/accessory/armor_tag/abpos + options["AB- blood patch"] = /obj/item/clothing/accessory/armor_tag/abneg + options["B+ blood patch"] = /obj/item/clothing/accessory/armor_tag/bpos + options["B- blood patch"] = /obj/item/clothing/accessory/armor_tag/bneg + gear_tweaks += new /datum/gear_tweak/path (options) + + +/datum/gear/tactical/armor_tag_corporate + display_name = "Armor Tag Selection - Corporate Insignia" + path = /obj/item/clothing/accessory/armor_tag + flags = GEAR_HAS_NO_CUSTOMIZATION + + +/datum/gear/tactical/armor_tag_corporate/New() + ..() + var/list/options = list() + options["SAARE tag"] = /obj/item/clothing/accessory/armor_tag/saare + options["PCRC tag"] = /obj/item/clothing/accessory/armor_tag/pcrc + gear_tweaks += new /datum/gear_tweak/path (options) diff --git a/maps/torch/loadout/loadout_misc.dm b/maps/torch/loadout/loadout_misc.dm index 126a2aa4d9948..fc65c9537ba9a 100644 --- a/maps/torch/loadout/loadout_misc.dm +++ b/maps/torch/loadout/loadout_misc.dm @@ -1,15 +1,13 @@ /datum/gear/trinket/scg_challenge_coin display_name = "sol challenge coin selection" description = "A selection of challenge coins for identification, collection or simply bragging rights" - path = /obj/item/material/coin/challenge/sol - cost = 1 - + path = /obj/item/material/coin/challenge /datum/gear/trinket/scg_challenge_coin/New() ..() var/list/options = list() options["fleet"] = /obj/item/material/coin/challenge/sol/fleet - options["army"] = /obj/item/material/coin/challenge/sol/army + options["army"] = /obj/item/material/coin/challenge/scga/army options["armsmen"] = /obj/item/material/coin/challenge/sol/armsmen options["gaia conflict"] = /obj/item/material/coin/challenge/sol/gaia options["observatory"] = /obj/item/material/coin/challenge/sol/observatory @@ -22,8 +20,6 @@ display_name = "misc challenge coin selection" description = "A selection of challenge coins for identification, collection or simply bragging rights" path = /obj/item/material/coin/challenge/misc - cost = 1 - /datum/gear/trinket/misc_challenge_coin/New() ..() @@ -37,3 +33,7 @@ /datum/mil_branch/civilian, /datum/mil_branch/iccgn ) + +/datum/gear/document/union_card/allowed_branches = list( + /datum/mil_branch/civilian +) diff --git a/maps/torch/loadout/loadout_suit.dm b/maps/torch/loadout/loadout_suit.dm index 45058790a27e5..97e503820c394 100644 --- a/maps/torch/loadout/loadout_suit.dm +++ b/maps/torch/loadout/loadout_suit.dm @@ -20,7 +20,6 @@ allowed_branches = CIVILIAN_BRANCHES /datum/gear/suit/poncho - allowed_roles = CASUAL_ROLES allowed_branches = CIVILIAN_BRANCHES /datum/gear/suit/security_poncho @@ -171,7 +170,6 @@ /datum/gear/tactical/pcarrier display_name = "black plate carrier" path = /obj/item/clothing/suit/armor/pcarrier - cost = 1 slot = slot_wear_suit allowed_roles = ARMORED_ROLES @@ -202,3 +200,9 @@ /datum/mil_branch/solgov ) flags = GEAR_HAS_NO_CUSTOMIZATION + +/datum/gear/suit/chest_rig/New() + allowed_roles = TECHNICAL_ROLES + SECURITY_ROLES + list( + /datum/job/doctor + ) + ..() diff --git a/maps/torch/loadout/loadout_xeno.dm b/maps/torch/loadout/loadout_xeno.dm index 0174f7096bc96..2cd6fa2017195 100644 --- a/maps/torch/loadout/loadout_xeno.dm +++ b/maps/torch/loadout/loadout_xeno.dm @@ -1,18 +1,9 @@ /datum/gear/suit/lab_xyn_machine allowed_branches = CIVILIAN_BRANCHES -/datum/gear/gloves/dress/modified - display_name = "modified gloves, dress" - path = /obj/item/clothing/gloves/color/white/modified - sort_category = "Xenowear" - whitelisted = list( - SPECIES_UNATHI - ) - /datum/gear/gloves/duty/modified display_name = "modified gloves, duty" path = /obj/item/clothing/gloves/thick/duty/modified - sort_category = "Xenowear" whitelisted = list( SPECIES_UNATHI ) @@ -27,6 +18,12 @@ /datum/gear/uniform/harness allowed_branches = null +/datum/gear/shoes/clogs_toeless + allowed_branches = CIVILIAN_BRANCHES + +/datum/gear/shoes/flipflobsters_toeless + allowed_branches = CIVILIAN_BRANCHES + // Patches /datum/gear/accessory/cultex_patch display_name = "Cultural Exchange patch" @@ -39,5 +36,4 @@ SPECIES_YEOSA, SPECIES_IPC ) - sort_category = "Xenowear" flags = GEAR_HAS_NO_CUSTOMIZATION diff --git a/maps/torch/machinery/keycard authentication.dm b/maps/torch/machinery/keycard authentication.dm index 6f3b64961417a..32463b8eea897 100644 --- a/maps/torch/machinery/keycard authentication.dm +++ b/maps/torch/machinery/keycard authentication.dm @@ -56,7 +56,7 @@ trigger_armed_response_team(1) if("Grant Nuclear Authorization Code") - var/obj/machinery/nuclearbomb/nuke = locate(/obj/machinery/nuclearbomb/station) in world + var/obj/machinery/nuclearbomb/nuke = locate(/obj/machinery/nuclearbomb/station) in SSmachines.get_machinery_of_type(/obj/machinery/nuclearbomb/station) if(nuke) to_chat(usr, "The nuclear authorization code is [nuke.r_code]") else diff --git a/maps/torch/robot/module_flying_surveyor.dm b/maps/torch/robot/module_flying_surveyor.dm index 9aaeea28e8cae..c7542ab387b8d 100644 --- a/maps/torch/robot/module_flying_surveyor.dm +++ b/maps/torch/robot/module_flying_surveyor.dm @@ -5,7 +5,7 @@ "Science" = TRUE, "Exploration" = TRUE ) - networks = list(NETWORK_EXPEDITION) + networks = list(NETWORK_RESEARCH) sprites = list( "Drone" = "drone-science", "Eyebot" = "eyebot-science" @@ -16,15 +16,16 @@ /obj/item/stack/flag/red ) skills = list( - SKILL_ELECTRICAL = SKILL_PROF, - SKILL_ATMOS = SKILL_PROF, - SKILL_PILOT = SKILL_EXPERT, - SKILL_BOTANY = SKILL_PROF, - SKILL_EVA = SKILL_PROF, + SKILL_ELECTRICAL = SKILL_MASTER, + SKILL_ATMOS = SKILL_MASTER, + SKILL_PILOT = SKILL_EXPERIENCED, + SKILL_BOTANY = SKILL_MASTER, + SKILL_EVA = SKILL_MASTER, SKILL_MECH = HAS_PERK, ) equipment = list( + /obj/item/device/flash, /obj/item/material/hatchet/machete/unbreakable, /obj/item/inducer/borg, /obj/item/device/scanner/gas, @@ -45,7 +46,22 @@ /obj/item/robot_harvester ) - emag = /obj/item/melee/energy/machete + emag_gear = list( + /obj/item/melee/baton/robot/electrified_arm, + /obj/item/gun/energy/gun + ) + access = list( + access_emergency_storage, + access_eva, + access_expedition_shuttle, + access_explorer, + access_guppy, + access_hangar, + access_petrov, + access_research, + access_radio_exp, + access_radio_sci + ) /obj/item/robot_module/flying/surveyor/finalize_synths() . = ..() diff --git a/maps/torch/structures/closets.dm b/maps/torch/structures/closets.dm index db0c86b777a93..4a16267e7ffcd 100644 --- a/maps/torch/structures/closets.dm +++ b/maps/torch/structures/closets.dm @@ -25,7 +25,7 @@ /obj/item/storage/bag/fossils, /obj/item/hand_labeler, /obj/item/taperoll/research, - /obj/item/device/spaceflare + /obj/item/shuttle_beacon ) /obj/structure/closet/wardrobe/ptgear @@ -69,3 +69,61 @@ /obj/structure/closet/secure_closet/brig/WillContain() return null + +///Ninja equipment loadouts. Placed here because it relies on Torch evil. +/obj/structure/closet/crate/ninja/sol + name = "sol equipment crate" + desc = "A tactical equipment crate." + +/obj/structure/closet/crate/ninja/sol/WillContain() + return list( + /obj/item/rig/light/ninja/sol, + /obj/item/gun/projectile/pistol/m22f, + /obj/item/ammo_magazine/pistol/double = 2, + /obj/item/clothing/under/scga/utility/urban, + /obj/item/clothing/shoes/swat, + /obj/item/clothing/accessory/scga_rank/e6 + ) + +/obj/structure/closet/crate/ninja/gcc + name = "gcc equipment crate" + desc = "A heavy equipment crate." + +/obj/structure/closet/crate/ninja/gcc/WillContain() + return list( + /obj/item/rig/light/ninja/gcc, + /obj/item/gun/projectile/pistol/optimus, + /obj/item/ammo_magazine/pistol/double = 2, + /obj/item/ammo_magazine/box/minigun = 2, + /obj/item/clothing/under/iccgn/utility, + /obj/item/clothing/shoes/iccgn/utility, + /obj/item/clothing/accessory/iccgn_rank/or6 + ) + +/obj/structure/closet/crate/ninja/corpo + name = "corporate equipment crate" + desc = "A patented equipment crate." + +/obj/structure/closet/crate/ninja/corpo/WillContain() + return list( + /obj/item/rig/light/ninja/corpo, + /obj/item/gun/energy/gun, + /obj/item/inducer, + /obj/item/clothing/under/rank/security/corp, + /obj/item/clothing/shoes/swat, + /obj/item/clothing/accessory/badge/holo + ) + +/obj/structure/closet/crate/ninja/merc + name = "mercenary equipment crate" + desc = "A traitorous equipment crate." + +/obj/structure/closet/crate/ninja/merc/WillContain() + return list( + /obj/item/rig/merc/ninja, + /obj/item/gun/projectile/revolver/medium, + /obj/item/ammo_magazine/speedloader = 2, + /obj/item/clothing/under/syndicate/combat, + /obj/item/clothing/shoes/swat, + /obj/item/clothing/mask/gas/syndicate + ) diff --git a/maps/torch/structures/closets/engineering.dm b/maps/torch/structures/closets/engineering.dm index 4bcc3f068c9c1..c0d9b542627df 100644 --- a/maps/torch/structures/closets/engineering.dm +++ b/maps/torch/structures/closets/engineering.dm @@ -44,8 +44,8 @@ /obj/item/clothing/gloves/insulated, /obj/item/device/radio/headset/heads/ce, /obj/item/device/radio/headset/heads/ce/alt, - /obj/item/storage/belt/utility/full, - /obj/item/clothing/suit/storage/hazardvest, + /obj/item/storage/belt/utility/engi_command, + /obj/item/clothing/suit/storage/engineering_chest_rig, /obj/item/clothing/mask/gas, /obj/item/device/multitool, /obj/item/device/flash, @@ -76,7 +76,7 @@ /obj/item/storage/belt/utility/full, /obj/item/device/radio/headset/headset_eng, /obj/item/device/radio/headset/headset_eng/alt, - /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/suit/storage/engineering_chest_rig, /obj/item/clothing/mask/gas, /obj/item/clothing/glasses/meson, /obj/item/taperoll/engineering, @@ -96,7 +96,7 @@ /obj/item/clothing/accessory/storage/brown_vest, /obj/item/device/radio/headset/headset_eng, /obj/item/device/radio/headset/headset_eng/alt, - /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/suit/storage/engineering_chest_rig, /obj/item/clothing/mask/gas, /obj/item/storage/belt/utility/full, /obj/item/clothing/glasses/meson, diff --git a/maps/torch/structures/closets/exploration.dm b/maps/torch/structures/closets/exploration.dm index ab95a7da98e00..d258cef66a6b9 100644 --- a/maps/torch/structures/closets/exploration.dm +++ b/maps/torch/structures/closets/exploration.dm @@ -39,7 +39,7 @@ /obj/item/taperoll/research, /obj/item/material/hatchet/machete/deluxe, /obj/item/storage/belt/holster/machete, - /obj/item/device/spaceflare, + /obj/item/shuttle_beacon, /obj/item/clothing/accessory/storage/webbing_large, /obj/item/device/taperecorder, /obj/item/device/scanner/gas, @@ -66,7 +66,7 @@ /obj/item/device/gps, /obj/item/taperoll/research, /obj/item/storage/belt/holster/machete, - /obj/item/device/spaceflare, + /obj/item/shuttle_beacon, /obj/item/clothing/accessory/storage/webbing_large, /obj/item/device/scanner/gas, /obj/item/device/radio/headset/exploration, @@ -90,7 +90,7 @@ /obj/item/device/radio, /obj/item/device/gps, /obj/item/storage/belt/utility/full, - /obj/item/device/spaceflare, + /obj/item/shuttle_beacon, /obj/item/clothing/accessory/storage/webbing_large, /obj/item/device/scanner/gas, /obj/item/device/radio/headset/headset_pilot, @@ -98,9 +98,7 @@ /obj/item/device/binoculars, /obj/item/clothing/gloves/thick, /obj/item/clothing/suit/storage/hazardvest/blue, - /obj/item/clothing/head/helmet/solgov/pilot, - /obj/item/clothing/head/helmet/solgov/pilot/fleet, - /obj/item/clothing/head/helmet/nt/pilot, + /obj/item/selection/pilot_helmet, /obj/item/storage/firstaid/light, /obj/item/material/knife/folding/swiss/explorer, /obj/item/storage/backpack/dufflebag, diff --git a/maps/torch/structures/closets/medical.dm b/maps/torch/structures/closets/medical.dm index 6a5d643897381..240414f044489 100644 --- a/maps/torch/structures/closets/medical.dm +++ b/maps/torch/structures/closets/medical.dm @@ -102,7 +102,7 @@ /obj/item/clothing/glasses/hud/health, /obj/item/storage/firstaid/adv, /obj/item/clothing/suit/storage/medical_chest_rig, - /obj/item/clothing/head/hardhat/EMS, + /obj/item/clothing/head/hardhat/light/medic, /obj/item/material/knife/folding/swiss/medic, /obj/item/storage/backpack/dufflebag/med ) diff --git a/maps/torch/structures/closets/misc.dm b/maps/torch/structures/closets/misc.dm index 2a009fc233b54..9bfe9db1137ff 100644 --- a/maps/torch/structures/closets/misc.dm +++ b/maps/torch/structures/closets/misc.dm @@ -25,7 +25,7 @@ ) /obj/structure/closet/secure_closet/liaison - name = "\improper corporate liaison's locker" + name = "corporate liaison's locker" req_access = list(access_liaison) closet_appearance = /singleton/closet_appearance/secure_closet/torch/corporate/liaison @@ -95,33 +95,20 @@ /obj/structure/closet/secure_closet/guncabinet/sidearm/WillContain() return list( - /obj/item/clothing/accessory/storage/holster/thigh = 2, - /obj/item/gun/energy/gun/secure = 3, - ) - -/obj/structure/closet/secure_closet/guncabinet/sidearm/small - name = "personal sidearm cabinet" - -/obj/structure/closet/secure_closet/guncabinet/sidearm/small/WillContain() - return list(/obj/item/gun/energy/gun/small/secure = 4) - -/obj/structure/closet/secure_closet/guncabinet/sidearm/combined - name = "combined sidearm cabinet" - -/obj/structure/closet/secure_closet/guncabinet/sidearm/combined/WillContain() - return list( - /obj/item/storage/belt/holster/general = 3, - /obj/item/gun/energy/gun/secure = 3, - /obj/item/gun/energy/gun/small/secure = 1, + /obj/item/clothing/accessory/storage/holster/thigh = 3, + /obj/item/gun/projectile/pistol/m19/empty = 3, + /obj/item/storage/box/ammo/pistol = 2 ) /obj/structure/closet/secure_closet/guncabinet/PPE - name = "Bridge PPE cabinet" + name = "bridge PPE cabinet" req_access = list(list(access_armory,access_emergency_armory,access_hos,access_hop,access_ce,access_cmo,access_rd,access_senadv)) /obj/structure/closet/secure_closet/guncabinet/PPE/WillContain() return list( - /obj/item/gun/energy/gun/small/secure = 3, + /obj/item/gun/projectile/pistol/m19/empty = 3, + /obj/item/storage/box/ammo/pistol = 2, /obj/item/clothing/suit/armor/pcarrier/medium/command = 3, - /obj/item/clothing/head/helmet/solgov/command = 3 + /obj/item/clothing/head/helmet/solgov/command = 3, + /obj/item/clothing/accessory/storage/holster/thigh = 3 ) diff --git a/maps/torch/structures/closets/research.dm b/maps/torch/structures/closets/research.dm index 6044a84a72749..64e59a769e74a 100644 --- a/maps/torch/structures/closets/research.dm +++ b/maps/torch/structures/closets/research.dm @@ -9,15 +9,11 @@ ) /singleton/closet_appearance/secure_closet/torch/science/cso - color = COLOR_BOTTLE_GREEN - decals = list( - "lower_holes" - ) extra_decals = list( - "stripe_vertical_mid_full" = COLOR_GOLD, - "stripe_vertical_left_full" = COLOR_PURPLE, - "stripe_vertical_right_full" = COLOR_PURPLE, - "research" = COLOR_GOLD + "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD, + "stripe_vertical_left_full" = COLOR_PURPLE_GRAY, + "stripe_vertical_right_full" = COLOR_PURPLE_GRAY, + "research" = COLOR_CLOSET_GOLD ) /obj/structure/closet/secure_closet/RD_torch @@ -37,16 +33,12 @@ /obj/item/device/flash, /obj/item/gun/energy/confuseray, /obj/item/device/megaphone, - /obj/item/device/taperecorder, /obj/item/device/tape/random = 3, - /obj/item/device/camera, - /obj/item/material/clipboard/steel, - /obj/item/taperoll/research, /obj/item/clothing/glasses/welding/superior, /obj/item/clothing/suit/armor/pcarrier/medium/command, /obj/item/clothing/head/helmet/solgov/command, /obj/item/storage/box/secret_project_disks/science, - /obj/item/storage/belt/general, + /obj/item/storage/belt/general/full, /obj/item/device/holowarrant, /obj/item/storage/backpack/dufflebag ) @@ -91,83 +83,10 @@ /obj/item/device/radio/headset/science, /obj/item/device/radio/headset/science/alt, /obj/item/clothing/mask/gas/half, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/material/clipboard, - /obj/item/folder, - /obj/item/device/taperecorder, - /obj/item/device/tape/random = 3, - /obj/item/device/camera, /obj/item/device/scanner/gas, - /obj/item/taperoll/research, /obj/item/clothing/gloves/latex, /obj/item/clothing/glasses/science, - /obj/item/storage/belt/general, - /obj/item/storage/backpack/dufflebag - ) - -/obj/structure/closet/secure_closet/guard - name = "security guard's locker" - req_access = list(access_sec_guard) - closet_appearance = /singleton/closet_appearance/secure_closet/torch/science - -/obj/structure/closet/secure_closet/guard/WillContain() - return list( - /obj/item/clothing/under/rank/guard, - /obj/item/clothing/suit/armor/pcarrier/medium/nt, - /obj/item/clothing/head/helmet/nt/guard, - /obj/item/clothing/head/soft/sec/corp/guard, - /obj/item/clothing/head/beret/guard, - /obj/item/clothing/accessory/armband/whitered, - /obj/item/device/radio/headset/science, - /obj/item/device/radio/headset/science/alt, - /obj/item/clothing/mask/gas/half, - /obj/item/material/clipboard, - /obj/item/folder, - /obj/item/device/taperecorder, - /obj/item/device/tape/random = 3, - /obj/item/storage/belt/holster/security, - /obj/item/device/flash, - /obj/item/reagent_containers/spray/pepper, - /obj/item/melee/baton/loaded, - /obj/item/handcuffs = 2, - /obj/item/device/flashlight/maglight, - /obj/item/clothing/glasses/sunglasses, - /obj/item/clothing/glasses/tacgoggles, - /obj/item/clothing/mask/balaclava, - /obj/item/taperoll/research, - /obj/item/device/hailer, - /obj/item/clothing/accessory/storage/black_vest, - /obj/item/clothing/accessory/badge/holo/NT, - /obj/item/device/megaphone, - /obj/item/gun/energy/stunrevolver/secure/nanotrasen, - /obj/item/clothing/shoes/jackboots, - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/security/exo, /obj/item/storage/backpack/satchel/sec/exo)), - new /datum/atom_creator/weighted(list(/obj/item/storage/backpack/dufflebag/sec, /obj/item/storage/backpack/messenger/sec/exo)) - ) - -/obj/structure/closet/secure_closet/ec_scientist - name = "scientist locker" - req_access = list(access_research_storage) - closet_appearance = /singleton/closet_appearance/secure_closet/torch/science - -/obj/structure/closet/secure_closet/ec_scientist/WillContain() - return list( - /obj/item/clothing/suit/storage/toggle/labcoat/science/ec, - /obj/item/device/radio/headset/science, - /obj/item/device/radio/headset/science/alt, - /obj/item/clothing/mask/gas/half, - /obj/item/tank/oxygen_emergency_extended, - /obj/item/material/clipboard, - /obj/item/folder, - /obj/item/device/taperecorder, - /obj/item/device/tape/random = 3, - /obj/item/device/camera, - /obj/item/device/scanner/gas, - /obj/item/taperoll/research, - /obj/item/clothing/gloves/latex, - /obj/item/clothing/glasses/science, - /obj/item/storage/belt/general, - /obj/item/device/scanner/xenobio, - /obj/item/device/scanner/plant, - /obj/item/storage/backpack/dufflebag + /obj/item/storage/belt/general/full, + /obj/item/storage/backpack/dufflebag, + /obj/item/storage/backpack/messenger/sci ) diff --git a/maps/torch/structures/closets/security.dm b/maps/torch/structures/closets/security.dm index 248f0d989c93c..a34006b799760 100644 --- a/maps/torch/structures/closets/security.dm +++ b/maps/torch/structures/closets/security.dm @@ -52,7 +52,8 @@ /obj/item/storage/belt/security, /obj/item/material/knife/folding/swiss/sec, /obj/item/storage/backpack/dufflebag/sec, - /obj/item/gun/energy/gun/small/secure + /obj/item/gun/projectile/pistol/m19/empty, + /obj/item/ammo_magazine/pistol/rubber = 3 ) @@ -73,7 +74,6 @@ /obj/item/storage/belt/holster/security/full, /obj/item/storage/belt/security, /obj/item/device/megaphone, - /obj/item/gun/energy/gun/secure/preauthorized, /obj/item/melee/telebaton, /obj/item/clothing/accessory/storage/black_vest, /obj/item/device/hailer, @@ -84,7 +84,9 @@ /obj/item/device/taperecorder, /obj/item/material/knife/folding/swiss/officer, /obj/item/device/personal_shield, - /obj/item/storage/backpack/dufflebag/sec + /obj/item/storage/backpack/dufflebag/sec, + /obj/item/gun/projectile/pistol/m19/empty, + /obj/item/ammo_magazine/pistol/rubber = 3 ) /obj/structure/closet/secure_closet/brigchief @@ -102,7 +104,6 @@ /obj/item/taperoll/police, /obj/item/storage/belt/holster/security/full, /obj/item/storage/belt/security, - /obj/item/gun/energy/gun/secure/preauthorized, /obj/item/clothing/accessory/storage/black_vest, /obj/item/handcuffs, /obj/item/device/hailer, @@ -111,7 +112,9 @@ /obj/item/clothing/gloves/thick, /obj/item/device/flashlight/maglight, /obj/item/material/knife/folding/swiss/sec, - /obj/item/storage/backpack/dufflebag/sec + /obj/item/storage/backpack/dufflebag/sec, + /obj/item/gun/projectile/pistol/m19/empty, + /obj/item/ammo_magazine/pistol/rubber = 3 ) /obj/structure/closet/secure_closet/forensics @@ -126,7 +129,6 @@ /obj/item/device/radio/headset/headset_sec/alt, /obj/item/clothing/head/helmet/solgov/security, /obj/item/clothing/suit/armor/pcarrier/medium/security, - /obj/item/gun/energy/gun/small/secure, /obj/item/device/flash, /obj/item/reagent_containers/spray/pepper, /obj/item/taperoll/police, @@ -142,7 +144,9 @@ /obj/item/storage/belt/security, /obj/item/clothing/gloves/thick, /obj/item/material/knife/folding/swiss/sec, - /obj/item/storage/backpack/dufflebag/sec + /obj/item/storage/backpack/dufflebag/sec, + /obj/item/gun/projectile/pistol/m19/empty, + /obj/item/ammo_magazine/pistol/rubber = 2 ) /obj/structure/closet/bombclosetsecurity/WillContain() diff --git a/maps/torch/structures/closets/services.dm b/maps/torch/structures/closets/services.dm index 4892f2fab590b..788485dd35dbf 100644 --- a/maps/torch/structures/closets/services.dm +++ b/maps/torch/structures/closets/services.dm @@ -1,7 +1,11 @@ /* * Torch Service */ -/singleton/closet_appearance/secure_closet/torch/hydroponics +/singleton/closet_appearance/closet/torch/hydroponics + color = COLOR_GRAY20 + decals = list( + "lower_side_vent" + ) extra_decals = list( "stripe_vertical_right_partial" = COLOR_GREEN_GRAY, "stripe_vertical_mid_partial" = COLOR_GREEN_GRAY, @@ -26,12 +30,12 @@ /obj/item/clothing/gloves/latex ) -/obj/structure/closet/secure_closet/hydroponics_torch //done so that it has no access reqs - name = "hydroponics locker" - req_access = list() - closet_appearance = /singleton/closet_appearance/secure_closet/torch/hydroponics +/obj/structure/closet/hydroponics_torch + name = "hydroponics closet" + desc = "It's a storage unit for gardening tools." + closet_appearance = /singleton/closet_appearance/closet/torch/hydroponics -/obj/structure/closet/secure_closet/hydroponics_torch/WillContain() +/obj/structure/closet/hydroponics_torch/WillContain() return list( /obj/item/clothing/head/soft/green, /obj/item/storage/plants, @@ -63,7 +67,8 @@ /obj/item/soap, /obj/item/reagent_containers/glass/rag, /obj/item/storage/belt/janitor, - /obj/item/clothing/glasses/hud/janitor + /obj/item/clothing/glasses/hud/janitor, + /obj/item/grenade/chem_grenade/cleaner = 2 ) /obj/structure/closet/secure_closet/bar_torch diff --git a/maps/torch/structures/closets/supply.dm b/maps/torch/structures/closets/supply.dm index f3be001b29695..379308653f8ca 100644 --- a/maps/torch/structures/closets/supply.dm +++ b/maps/torch/structures/closets/supply.dm @@ -38,7 +38,7 @@ /obj/item/hand_labeler, /obj/item/material/clipboard, /obj/item/folder/yellow, - /obj/item/stack/package_wrap/twenty_five, + /obj/item/stack/package_wrap/cargo_wrap, /obj/item/marshalling_wand, /obj/item/marshalling_wand, /obj/item/storage/belt/general, @@ -66,7 +66,7 @@ /obj/item/hand_labeler, /obj/item/material/clipboard, /obj/item/folder/yellow, - /obj/item/stack/package_wrap/twenty_five, + /obj/item/stack/package_wrap/cargo_wrap, /obj/item/device/flash, /obj/item/device/megaphone, /obj/item/device/holowarrant, diff --git a/maps/torch/structures/memorabilia.dm b/maps/torch/structures/memorabilia.dm index 0097a38201e9b..1fef3cbe8347b 100644 --- a/maps/torch/structures/memorabilia.dm +++ b/maps/torch/structures/memorabilia.dm @@ -21,7 +21,7 @@ /obj/structure/decorative/ed209/examine(mob/user) . = ..() if(anchored) - to_chat(user, "Magnetic chains hold it in place. Somebody isn't taking any risks with this one.") + . += SPAN_NOTICE("Magnetic chains hold it in place. Somebody isn't taking any risks with this one.") /obj/structure/decorative/ed209/on_update_icon() . = ..() @@ -29,22 +29,22 @@ pixel_z = 8 else pixel_z = 0 -/obj/structure/decorative/ed209/attackby(obj/item/O, mob/user) - . = ..() - if(isScrewdriver(O) && user.skill_check(SKILL_DEVICES, SKILL_BASIC)) - if(!salvaged) - var/delay = 2 SECONDS * user.skill_delay_mult(SKILL_DEVICES) - user.visible_message(SPAN_NOTICE("\The [user] starts rummaging through \the [src]."), SPAN_NOTICE("You start looking for useful components in \the [src].")) - if(do_after(user, delay, src, DO_PUBLIC_UNIQUE) && !salvaged) - playsound(user.loc, 'sound/items/Crowbar.ogg', 40, 1) - user.visible_message(SPAN_NOTICE("\The [user] detaches some components from \the [src]."), SPAN_NOTICE("You detach some useful components from \the [src].")) - var/obj/item/part = pickweight(loot) - part = new part(loc) - part.forceMove(get_turf(user)) - user.put_in_hands(part) - salvaged = prob(25) //Sometimes more, sometimes less - else - to_chat(user, SPAN_NOTICE("It doesn't seem like there's anything of use left on this thing.")) +/obj/structure/decorative/ed209/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!user.skill_check(SKILL_DEVICES, SKILL_BASIC)) + balloon_alert(user, "не хватает навыков!") + return + if(salvaged) + balloon_alert(user, "нет полезных компонентов!") + return + balloon_alert(user, "снятие компонентов") + if(!tool.use_as_tool(src, user, 2 SECONDS, volume = 50, skill_path = SKILL_DEVICES, do_flags = DO_REPAIR_CONSTRUCT) || salvaged) + return + balloon_alert_to_viewers("компоненты сняты") + var/obj/item/part = pickweight(loot) + part = new part(get_turf(user)) + user.put_in_hands(part) + salvaged = prob(25) //Sometimes more, sometimes less /obj/structure/decorative/md_slug name = "charred mass driver slug" @@ -63,5 +63,5 @@ . = ..() if(.) var/turf/T = get_turf(src) - if(!isspace(T) && !istype(T, /turf/simulated/floor/carpet)) + if(!isspaceturf(T) && !istype(T, /turf/simulated/floor/carpet)) playsound(T, pick(move_sounds), 75, 1) diff --git a/maps/torch/structures/posters.dm b/maps/torch/structures/posters.dm new file mode 100644 index 0000000000000..412b94e085826 --- /dev/null +++ b/maps/torch/structures/posters.dm @@ -0,0 +1,28 @@ +/obj/structure/sign/poster/torch + random_poster_base_type = /singleton/poster/torch + +/singleton/poster/torch + icon_state="poster_ripped" + name = "Torch Poster" + desc = "You probably shouldn't be seeing this." + abstract_type = /singleton/poster/torch + +/singleton/poster/torch/event1 + icon_state="bsposter_event1" + name = "Justice for Joe" + desc = "A hand-written poster demanding the release of one SCPO Joseph Tornakov from Fleet Intelligence custody. It's somewhat faded." + +/singleton/poster/torch/event2 + icon_state="bsposter_event2" + name = "Captain for Senate" + desc = "A poster loudly advertising the SEV Torch's captain's upcoming bid for SCG Senate. The fine print lightly suggests that failing to vote in their favor will result in an NJP." + +/singleton/poster/torch/event3 + icon_state="bsposter_event3" + name = "Visit E-14b Outpost" + desc = "This poster invites personnel to visit the the E-14b research outpost, built through joint Terran and Expeditionary Corps efforts. According to the poster, it's still under construction." + +/singleton/poster/torch/event4 + icon_state="bsposter_event4" + name = "Scientific Cooperation" + desc = "This poster depicts a Sol Expeditionary Corps captain shaking hands with a Terran Pioneer Corps officer. It appears to espouse greater scientific cooperation between the two organisations." diff --git a/maps/torch/structures/signs.dm b/maps/torch/structures/signs.dm index f831ccb4115cc..12bc86e4b482c 100644 --- a/maps/torch/structures/signs.dm +++ b/maps/torch/structures/signs.dm @@ -6,52 +6,8 @@ . = ..() desc = "S.E.V. Torch - Mako Class - Sol Expeditionary Corps Registry 95519 - Shiva Fleet Yards, Mars - First Vessel To Bear The Name - Launched [GLOB.using_map.game_year - 5] - Sol Central Government - 'Never was anything great achieved without danger.'" -/obj/structure/sign/ecplaque - name = "\improper Expeditionary Directives" - desc = "A plaque with Expeditionary Corps logo etched in it." - icon = 'maps/torch/icons/obj/solgov-decals.dmi' - icon_state = "ecplaque" - var/directives = {"
    - 1. Exploring the unknown is your Primary Mission
    - - You are to look for land and resources that can be used by Humanity to advance and prosper. Explore. Document. Explain. Knowledge is the most valuable resource.
    - - 2. Every member of the Expeditionary Corps is an explorer
    - - Some are Explorers by rank or position, but everyone has to be one when duty calls. You should always expect being assigned to an expedition if needed. You have already volunteered when you signed up.
    - - 3. Danger is a part of the mission - avoid, not run away
    - - Keep your crew alive and hull intact, but remember - you are not here to sightsee. Dangers are obstacles to be cleared, not the roadblocks. Weigh risks carefully and keep your Primary Mission in mind. -

    "} -/obj/structure/sign/ecplaque/examine(mob/user) - . = ..() - to_chat(user, "The founding principles of EC are written there: Expeditionary Directives") - -/obj/structure/sign/ecplaque/CanUseTopic() - return STATUS_INTERACTIVE - -/obj/structure/sign/ecplaque/OnTopic(href, href_list) - if(href_list["show_info"]) - to_chat(usr, directives) - return TOPIC_HANDLED - -/obj/structure/sign/ecplaque/attackby(obj/I, mob/user) - if(istype(I, /obj/item/grab)) - var/obj/item/grab/G = I - if(!ishuman(G.affecting)) - return - G.affecting.apply_damage(5, DAMAGE_BRUTE, BP_HEAD, used_weapon="Metal Plaque") - visible_message(SPAN_WARNING("[G.assailant] smashes [G.assailant] into \the [src] face-first!")) - playsound(get_turf(src), 'sound/weapons/tablehit1.ogg', 50) - to_chat(G.affecting, SPAN_DANGER("[directives]")) - admin_attack_log(user, G.affecting, "educated victim on \the [src].", "Was educated on \the [src].", "used \a [src] to educate") - G.force_drop() - else - ..() - -/obj/effect/floor_decal/scglogo +/obj/floor_decal/scglogo alpha = 230 icon = 'maps/torch/icons/obj/solgov_floor.dmi' icon_state = "center" @@ -63,7 +19,7 @@ icon_state = "solgovseal" /obj/structure/sign/double/solgovflag - name = "Sol Central Government Flag" + name = "\improper Sol Central Government Flag" desc = "The flag of the Sol Central Government, a symbol of many things to many people." icon = 'maps/torch/icons/obj/solgov-decals.dmi' @@ -74,7 +30,7 @@ icon_state = "solgovflag-right" /obj/structure/sign/memorial - name = "\improper memorial rock" + name = "memorial rock" desc = "A large stone slab, engraved with the names of uniformed personnel who gave their lives for scientific progress. Not a list you'd want to make. Add the dog tags of the fallen to the monument to memorialize them." icon = 'maps/torch/icons/obj/solgov-64x.dmi' icon_state = "memorial" @@ -84,16 +40,38 @@ pixel_y = -16 unacidable = TRUE var/list/fallen = list() + var/list/accepted_branches = list( + "Expeditionary Corps", + "Fleet" + ) + + +/obj/structure/sign/memorial/use_tool(obj/item/tool, mob/user, list/click_params) + // Dog Tags - Add dog tag + if (istype(tool, /obj/item/clothing/accessory/badge/solgov/tags)) + var/obj/item/clothing/accessory/badge/solgov/tags/dog_tags = tool + if (!(dog_tags.owner_branch in accepted_branches)) + USE_FEEDBACK_FAILURE("\The [src] only accepts dog tags from the [english_list(accepted_branches, and_text = " or ")] branches.") + return TRUE + if (!user.unEquip(tool, src)) + FEEDBACK_UNEQUIP_FAILURE(user, tool) + return TRUE + fallen += "[dog_tags.owner_rank] [dog_tags.owner_name] | [dog_tags.owner_branch]" + user.visible_message( + SPAN_NOTICE("\The [user] adds \a [tool] to \the [src]."), + SPAN_NOTICE("You add \the [dog_tags.owner_name]'s [tool.name] to \the [src].") + ) + qdel(dog_tags) + return TRUE + + return ..() -/obj/structure/sign/memorial/attackby(obj/D, mob/user) - if(istype(D, /obj/item/clothing/accessory/badge/solgov/tags)) - var/obj/item/clothing/accessory/badge/solgov/tags/T = D - if(T.owner_branch in list("Expeditionary Corps", "Fleet")) - to_chat(user, SPAN_WARNING("You add \the [T.owner_name]'s \the [T] to \the [src].")) - fallen += "[T.owner_rank] [T.owner_name] | [T.owner_branch]" - qdel(T) /obj/structure/sign/memorial/examine(mob/user, distance) . = ..() - if (distance <= 2 && length(fallen)) - to_chat(user, "The fallen: [jointext(fallen, "
    ")]") + if(distance <= 2 && length(fallen)) + . += SPAN_NOTICE("The fallen: [jointext(fallen, "
    ")]") + +// Disallow trader to sell unique memorial +/datum/trader/trading_beacon/manufacturing/New() + possible_trading_items[/obj/structure/sign/memorial] = TRADER_BLACKLIST_ALL diff --git a/maps/torch/torch.dm b/maps/torch/torch.dm index 7f6153405f278..31c972410aefd 100644 --- a/maps/torch/torch.dm +++ b/maps/torch/torch.dm @@ -1,8 +1,14 @@ #if !defined(using_map_DATUM) - #include "../../packs/faction_iccgn/_pack.dm" + #include "../../packs/deepmaint/_pack.dm" #include "../../packs/event_2022jul30/_pack.dm" + #include "../../packs/factions/commonwealth/_pack.dm" + #include "../../packs/factions/fa/_pack.dm" + #include "../../packs/factions/iccgn/_pack.dm" + #include "../../packs/factions/scga/_pack.dm" + #include "../../packs/factions/scgec/_pack.dm" + #include "torch_announcements.dm" #include "torch_antagonism.dm" #include "torch_areas.dm" @@ -23,6 +29,7 @@ #include "torch_submaps.dm" #include "torch_turfs.dm" #include "torch_unit_testing.dm" + #include "torch_simplemobs.dm" #include "datums/uniforms.dm" #include "datums/uniforms_expedition.dm" @@ -58,6 +65,7 @@ #include "items/cards_ids.dm" #include "items/coins.dm" #include "items/encryption_keys.dm" + #include "items/selection.dm" #include "items/headsets.dm" #include "items/items.dm" #include "items/machinery.dm" @@ -108,7 +116,6 @@ #include "job/outfits/security_outfits.dm" #include "job/outfits/service_outfits.dm" #include "job/outfits/supply_outfits.dm" - #include "job/outfits/unused_outfits.dm" #include "language/human/euro.dm" #include "language/human/misc/spacer.dm" @@ -121,7 +128,6 @@ #include "robot/module_flying_surveyor.dm" - #include "structures/signs.dm" #include "structures/closets.dm" #include "structures/closets/closet_appearances.dm" #include "structures/closets/command.dm" @@ -134,6 +140,8 @@ #include "structures/closets/supply.dm" #include "structures/closets/exploration.dm" #include "structures/memorabilia.dm" + #include "structures/posters.dm" + #include "structures/signs.dm" #include "loadout/_defines.dm" #include "loadout/loadout_accessories.dm" @@ -177,12 +185,16 @@ #include "../away/miningstation/miningstation.dm" #include "../away/mininghome/mininghome.dm" #include "../away/scavver/scavver_gantry.dm" + #include "../away/abandoned_hotel/abandoned_hotel.dm" #include "../event/iccgn_ship/icgnv_hound.dm" #include "../event/sfv_arbiter/sfv_arbiter.dm" #include "../event/placeholders/placeholders.dm" #include "../event/empty/empty.dm" + #include "../bluespace_interlude/bluespace_interlude.dm" + #include "../bluespace_interlude/bluespace_interlude.dmm" + #define using_map_DATUM /datum/map/torch diff --git a/maps/torch/torch1_deck5.dmm b/maps/torch/torch1_deck5.dmm index 271697df0d7d0..7d070398aa235 100644 --- a/maps/torch/torch1_deck5.dmm +++ b/maps/torch/torch1_deck5.dmm @@ -3,7 +3,7 @@ /turf/space, /area/space) "ab" = ( -/obj/effect/landmark, +/obj/landmark, /turf/space, /area/space) "ac" = ( @@ -13,7 +13,7 @@ /area/command/pilot) "ad" = ( /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/extinguisher_cabinet{ pixel_x = 32 }, @@ -30,7 +30,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/toxins) "af" = ( @@ -38,16 +38,16 @@ dir = 4; name = "Exterior Vent" }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/toxins) "ag" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/exploration_shuttle/cockpit) "ah" = ( /obj/machinery/computer/modular/preset/supply_public, -/obj/effect/floor_decal/corner/purple/half{ +/obj/floor_decal/corner/purple/half{ dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, @@ -73,7 +73,7 @@ dir = 8; name = "Heat Exchanger Output" }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/ocp_wall, /area/shuttle/petrov/toxins) "al" = ( @@ -87,16 +87,17 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "am" = ( -/obj/machinery/suit_storage_unit/mining, -/obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/light, +/obj/machinery/suit_cycler/mining, +/obj/floor_decal/corner/brown/half, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/expedition/eva) "an" = ( /turf/simulated/wall/r_wall/hull, /area/maintenance/fifthdeck/fore) "ap" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/binary/pump{ @@ -114,7 +115,9 @@ /obj/machinery/light/spot{ dir = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/toxins) "ar" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -158,7 +161,7 @@ /area/maintenance/fifthdeck/aftstarboard) "au" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /turf/simulated/floor/tiled, @@ -209,10 +212,12 @@ /obj/machinery/air_sensor{ id_tag = "toxins_sensor" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/toxins) "aA" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ density = 0; icon_state = "pdoor0"; @@ -220,11 +225,11 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/floor/plating, /area/exploration_shuttle/cockpit) "aB" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ density = 0; icon_state = "pdoor0"; @@ -232,7 +237,7 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/floor/plating, /area/exploration_shuttle/crew) "aC" = ( @@ -301,10 +306,14 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "aI" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 10 }, /obj/machinery/light, +/obj/machinery/camera/network/fifth_deck{ + c_tag = "Fifth Deck Hallway - Lift"; + dir = 1 + }, /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/fore) "aJ" = ( @@ -346,7 +355,7 @@ /turf/simulated/floor/plating, /area/vacant/infirmary) "aN" = ( -/obj/effect/floor_decal/corner/brown/half, +/obj/floor_decal/corner/brown/half, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -377,11 +386,11 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "aP" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/exploration_shuttle/crew) "aQ" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, @@ -414,20 +423,20 @@ /area/maintenance/fifthdeck/aftstarboard) "aU" = ( /obj/machinery/artifact_scanpad, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/newscaster{ pixel_y = 32 }, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/analysis) "aV" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, +/obj/wallframe_spawn/reinforced_phoron/titanium, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, /obj/machinery/meter, -/obj/effect/paint/silver, +/obj/paint/silver, /obj/machinery/door/blast/regular{ density = 0; dir = 4; @@ -436,17 +445,17 @@ name = "Mixing Chamber Blast Shutters"; opacity = 0 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/shuttle/petrov/toxins) "aW" = ( /turf/simulated/wall/prepainted, /area/maintenance/fifthdeck/aftstarboard) "aX" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/quartermaster/hangar) "aY" = ( -/obj/effect/paint/red, +/obj/paint/red, /turf/simulated/wall/titanium, /area/guppy_hangar/start) "aZ" = ( @@ -455,29 +464,29 @@ /turf/simulated/floor/plating, /area/guppy_hangar/start) "ba" = ( -/obj/effect/paint/red, +/obj/paint/red, /obj/structure/sign/warning/hot_exhaust{ dir = 1 }, /turf/simulated/wall/titanium, /area/guppy_hangar/start) "bb" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/analysis) "bc" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/eva) "bd" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/space_heater, /turf/simulated/floor/tiled/dark, /area/quartermaster/expedition/atmos) "be" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, +/obj/wallframe_spawn/reinforced_phoron/titanium, /obj/machinery/door/firedoor, -/obj/effect/paint/silver, +/obj/paint/silver, /obj/machinery/door/blast/regular{ density = 0; dir = 4; @@ -486,20 +495,20 @@ name = "Mixing Chamber Blast Shutters"; opacity = 0 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/shuttle/petrov/toxins) "bf" = ( /obj/machinery/computer/shuttle_control/explore/exploration_shuttle, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/cockpit) "bg" = ( -/obj/effect/paint/hull, -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/exploration_shuttle/cockpit) "bh" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/structure/bed/chair/shuttle/blue, @@ -509,7 +518,7 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "bj" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/structure/bed/chair/shuttle/blue, @@ -520,7 +529,7 @@ /area/exploration_shuttle/crew) "bk" = ( /obj/structure/bed/chair/shuttle/blue, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -546,7 +555,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/toxins) "bm" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/structure/bed/chair/shuttle/blue, @@ -579,7 +588,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/toxins) "bo" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ density = 0; dir = 4; @@ -588,7 +597,7 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/floor/plating, /area/exploration_shuttle/cockpit) "bp" = ( @@ -600,7 +609,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "bq" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/mining/brace{ dir = 4 }, @@ -638,7 +647,9 @@ pixel_w = 1; pixel_z = -23 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/toxins) "bt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -647,7 +658,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/hidden{ @@ -661,7 +672,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/fifthdeck/aftstarboard) "bu" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/maint) "bv" = ( @@ -784,13 +795,10 @@ name = "Atmospheric Sensors"; sensor_tag = "charon_out" }, -/obj/machinery/camera/network/exploration_shuttle{ - c_tag = "Charon - Crew Compartment" - }, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/crew) "bF" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ density = 0; dir = 4; @@ -799,8 +807,8 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/paint/hull, -/obj/effect/paint/hull, +/obj/paint/hull, +/obj/paint/hull, /turf/simulated/floor/plating, /area/exploration_shuttle/crew) "bG" = ( @@ -811,7 +819,7 @@ start_pressure = 7498 }, /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/guppy_hangar/start) "bH" = ( @@ -831,7 +839,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 9 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -847,7 +855,7 @@ /obj/machinery/power/terminal{ dir = 1 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 5 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -865,7 +873,7 @@ /turf/simulated/floor/tiled/techfloor, /area/guppy_hangar/start) "bL" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/cyan{ @@ -900,11 +908,11 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "bP" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/control) "bQ" = ( @@ -960,13 +968,16 @@ /area/maintenance/fifthdeck/fore) "bV" = ( /obj/machinery/hologram/holopad/longrange, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/power/apc/shuttle/charon, /obj/structure/cable/cyan, /obj/machinery/camera/network/exploration_shuttle{ c_tag = "Charon - Cockpit"; dir = 1 }, +/obj/structure/handrail{ + dir = 1 + }, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/cockpit) "bW" = ( @@ -981,7 +992,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled/monotile, @@ -996,7 +1007,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled/monotile, @@ -1045,7 +1056,7 @@ /turf/simulated/wall/prepainted, /area/quartermaster/expedition/storage) "cf" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -1073,7 +1084,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1087,7 +1098,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1096,14 +1107,14 @@ /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/handrail{ dir = 8 }, /turf/simulated/floor/tiled/techfloor, /area/guppy_hangar/start) "cj" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/guppy_hangar/start) "cl" = ( @@ -1131,7 +1142,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/exploration_shuttle/crew) "cq" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ density = 0; dir = 4; @@ -1140,7 +1151,7 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/floor/plating, /area/exploration_shuttle/medical) "cr" = ( @@ -1172,6 +1183,10 @@ /obj/machinery/light{ dir = 1 }, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_TORCH_CREW") + }, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/medical) "cv" = ( @@ -1187,20 +1202,17 @@ /obj/random/medical, /obj/structure/table/steel_reinforced, /obj/item/bodybag/cryobag, -/obj/machinery/camera/network/exploration_shuttle{ - c_tag = "Charon - Medical Compartment" - }, /obj/machinery/firealarm{ pixel_y = 24 }, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/medical) "cw" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/exploration_shuttle/medical) "cy" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "cA" = ( @@ -1208,13 +1220,13 @@ dir = 8; id_tag = "guppy_shuttle_pump_out_internal" }, -/obj/effect/overmap/visitable/ship/landable/guppy, +/obj/overmap/visitable/ship/landable/guppy, /obj/structure/cable/cyan{ d1 = 1; d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1229,7 +1241,7 @@ /turf/simulated/wall/prepainted, /area/maintenance/fifthdeck/fore) "cD" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/machinery/power/apc/shuttle/charon{ @@ -1249,7 +1261,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/structure/cable/cyan{ @@ -1266,7 +1278,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1276,8 +1288,8 @@ dir = 8; id_tag = "guppy_shuttle_pump_out_internal" }, -/obj/effect/shuttle_landmark/torch/hangar/guppy, -/obj/effect/floor_decal/techfloor{ +/obj/shuttle_landmark/torch/hangar/guppy, +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1286,14 +1298,14 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/guppy_hangar/start) "cI" = ( /obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/cargo) "cJ" = ( @@ -1301,6 +1313,9 @@ dir = 1 }, /obj/structure/table/steel, +/obj/item/device/drone_designator{ + network = "torch_transport" + }, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/cargo) "cK" = ( @@ -1324,7 +1339,7 @@ /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/cargo) "cM" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/conveyor{ @@ -1333,7 +1348,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/cargo) "cN" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ density = 0; dir = 4; @@ -1342,7 +1357,7 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/floor/plating, /area/exploration_shuttle/cargo) "cO" = ( @@ -1357,23 +1372,12 @@ /area/exploration_shuttle/medical) "cR" = ( /obj/structure/bed/padded, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = 21 - }, /turf/simulated/floor/tiled, /area/exploration_shuttle/medical) "cS" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/structure/handrail{ - dir = 4 - }, /turf/simulated/floor/tiled, /area/exploration_shuttle/cargo) "cT" = ( @@ -1390,15 +1394,15 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/guppy_hangar/start) "cU" = ( /obj/machinery/tele_beacon, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1407,7 +1411,7 @@ /obj/random/tech_supply, /obj/random/tech_supply, /obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/crate/secure/shuttle{ dir = 8; req_access = list("ACCESS_TORCH_GUP") @@ -1421,19 +1425,25 @@ id_tag = "guppy_shuttle"; pixel_x = 24 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, +/obj/item/device/drone_designator{ + network = "torch_transport" + }, /turf/simulated/floor/tiled/techfloor, /area/guppy_hangar/start) "cW" = ( /obj/machinery/suit_storage_unit/science, -/obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/alarm{ dir = 4; pixel_x = -22 }, +/obj/floor_decal/corner/research/half{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/expedition/eva) "cY" = ( @@ -1479,23 +1489,23 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled, /area/exploration_shuttle/cargo) "dd" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/exploration_shuttle/cargo) "de" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/cargo) "df" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/loading{ +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/loading{ dir = 4 }, /turf/simulated/floor/tiled/monotile, @@ -1504,19 +1514,17 @@ /obj/structure/table/rack, /obj/item/storage/belt/utility/full, /obj/item/storage/box/glowsticks, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/medical) "dh" = ( -/obj/machinery/hologram/holopad/longrange, -/obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/turf/simulated/floor/tiled/monotile, +/turf/simulated/floor/tiled, /area/exploration_shuttle/medical) "di" = ( /obj/structure/cable/cyan{ @@ -1530,7 +1538,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled, @@ -1565,7 +1573,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled, @@ -1588,13 +1596,13 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled, /area/exploration_shuttle/cargo) "dm" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 9 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1616,32 +1624,32 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, /area/guppy_hangar/start) "dp" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/guppy_hangar/start) "du" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "dv" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/cargo) "dw" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 5 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1651,9 +1659,9 @@ /obj/item/device/radio, /obj/item/device/radio, /obj/item/device/radio, -/obj/item/device/spaceflare, -/obj/item/device/spaceflare, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/item/shuttle_beacon, +/obj/item/shuttle_beacon, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/medical) "dy" = ( @@ -1668,9 +1676,17 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/tiled, +/obj/machinery/hologram/holopad/longrange, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/handrail{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/medical) "dA" = ( +/obj/structure/handrail{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/exploration_shuttle/cargo) "dB" = ( @@ -1681,16 +1697,16 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled, /area/exploration_shuttle/cargo) "dD" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/cargo) "dE" = ( @@ -1699,14 +1715,14 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 10 }, /turf/simulated/floor/tiled/techfloor/grid, /area/guppy_hangar/start) "dF" = ( /obj/structure/bed/chair/shuttle/blue, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 6 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1736,14 +1752,14 @@ /turf/simulated/floor/tiled/techfloor, /area/guppy_hangar/start) "dJ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/cargo) "dK" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/cargo) "dL" = ( @@ -1753,7 +1769,7 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1796,7 +1812,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/hallway/primary/fifthdeck/aft) "dT" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -1809,7 +1825,7 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/floor/plating, /area/exploration_shuttle/cargo) "dU" = ( @@ -1829,16 +1845,15 @@ "dW" = ( /obj/structure/cable/cyan, /obj/structure/table/steel_reinforced, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24; - req_access = list("ACCESS_TORCH_CREW") - }, /obj/machinery/power/apc/shuttle/charon{ name = "south bump"; pixel_y = -28 }, /obj/item/storage/firstaid/radiation, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 21 + }, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/medical) "dY" = ( @@ -1846,8 +1861,12 @@ dir = 4; level = 2 }, -/obj/effect/shuttle_landmark/torch/hangar/exploration_shuttle, -/obj/effect/overmap/visitable/ship/landable/exploration_shuttle, +/obj/shuttle_landmark/torch/hangar/exploration_shuttle, +/obj/overmap/visitable/ship/landable/exploration_shuttle, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/cargo) "dZ" = ( @@ -1862,13 +1881,13 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/cargo) "ea" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 10 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -1877,12 +1896,12 @@ /obj/structure/handrail{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/cargo) "eb" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light/spot, /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/cargo) @@ -1899,23 +1918,19 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "ed" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/firecloset, -/obj/machinery/camera/network/exploration_shuttle{ - c_tag = "Charon - Cargo Compartment"; - dir = 1 - }, /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/cargo) "ee" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "ef" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, /obj/machinery/door/blast/regular{ id_tag = "guppy_window"; name = "blast shield" @@ -1923,20 +1938,20 @@ /turf/simulated/floor/plating, /area/guppy_hangar/start) "eg" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 6 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/floodlight, /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/cargo) "eh" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/exploration_shuttle/cargo) "ei" = ( /obj/structure/disposalpipe/segment, -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/exploration_shuttle/cargo) "ek" = ( @@ -1944,7 +1959,7 @@ pixel_y = 32 }, /obj/structure/handrail, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -1971,7 +1986,7 @@ dir = 1 }, /obj/structure/disposaloutlet, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/cargo) "eo" = ( @@ -1989,7 +2004,7 @@ /obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ id_tag = "charon_shuttle_pump_out_external" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -2013,8 +2028,8 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, /turf/simulated/floor/plating, /area/exploration_shuttle/airlock) "et" = ( @@ -2025,7 +2040,7 @@ /obj/machinery/oxygen_pump{ pixel_y = 32 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -2034,7 +2049,7 @@ /turf/simulated/wall/prepainted, /area/quartermaster/exploration) "ev" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/light/spot{ dir = 8 }, @@ -2060,7 +2075,7 @@ /obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ id_tag = "charon_shuttle_pump" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -2075,14 +2090,14 @@ pixel_y = 24 }, /obj/structure/handrail, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/airlock) "ez" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, /turf/simulated/floor/plating, /area/exploration_shuttle/airlock) "eA" = ( @@ -2093,7 +2108,7 @@ dir = 1; id_tag = "petrov_shuttle_dock_pump" }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/machinery/light/small, /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/fifthdeck/aft) @@ -2115,7 +2130,7 @@ /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/airlock) "eE" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/exploration_shuttle/airlock) "eF" = ( @@ -2140,7 +2155,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/power) "eH" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/tiled/monotile, @@ -2151,7 +2166,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -2162,7 +2177,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/power) "eM" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -2182,7 +2197,7 @@ /obj/machinery/power/smes/buildable/preset/torch/shuttle{ RCon_tag = "Shuttle - Charon" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/cyan{ d2 = 8; icon_state = "0-8" @@ -2190,20 +2205,20 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/power) "eS" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) "eT" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "eU" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -2211,7 +2226,7 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "eV" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/floodlight, @@ -2225,7 +2240,7 @@ /turf/simulated/floor/lino, /area/shuttle/petrov/rd) "eX" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ density = 0; dir = 4; @@ -2234,11 +2249,11 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/floor/plating, /area/exploration_shuttle/power) "eY" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/power) "eZ" = ( @@ -2248,7 +2263,7 @@ /obj/machinery/air_sensor{ id_tag = "charon_out" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -2300,7 +2315,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "fj" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d2 = 2; icon_state = "0-2" @@ -2336,7 +2351,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, /obj/machinery/access_button/airlock_interior{ @@ -2383,7 +2398,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/power) "fq" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/cable/cyan{ @@ -2401,7 +2416,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -2412,7 +2427,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/power) "fu" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/structure/cable/cyan{ d1 = 4; d2 = 8; @@ -2426,7 +2441,7 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/floor/plating, /area/exploration_shuttle/power) "fx" = ( @@ -2435,11 +2450,11 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/power) "fy" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/structure/cable/cyan{ @@ -2453,7 +2468,7 @@ /turf/simulated/wall/walnut, /area/vacant/bar) "fB" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -2486,7 +2501,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/isolation) "fF" = ( -/obj/effect/paint/red, +/obj/paint/red, /turf/simulated/wall/titanium, /area/shuttle/petrov/isolation) "fG" = ( @@ -2511,7 +2526,7 @@ pixel_x = 25; pixel_y = -25 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -2528,7 +2543,7 @@ /obj/machinery/oxygen_pump{ pixel_y = -32 }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/machinery/firealarm{ dir = 1; pixel_y = -26 @@ -2548,7 +2563,7 @@ dir = 1; id_tag = "charon_shuttle_pump" }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/airlock) "fL" = ( @@ -2559,7 +2574,7 @@ /obj/structure/handrail{ dir = 1 }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/item/device/radio/intercom/hailing{ dir = 1; pixel_y = -28 @@ -2606,19 +2621,15 @@ /area/exploration_shuttle/power) "fP" = ( /obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/power) "fQ" = ( /obj/machinery/power/port_gen/pacman{ anchored = 1 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow, -/obj/machinery/camera/network/exploration_shuttle{ - c_tag = "Charon - Power Compartment"; - dir = 1 - }, /obj/item/stack/material/phoron/ten, /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/power) @@ -2626,21 +2637,21 @@ /obj/structure/handrail{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/airlock) "fS" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "fT" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -2648,17 +2659,17 @@ /area/quartermaster/hangar) "fU" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/aft) "fW" = ( -/obj/effect/floor_decal/corner/mauve/half{ +/obj/floor_decal/corner/mauve/half{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/computer/modular/preset/dock{ dir = 8; icon_state = "console" @@ -2677,7 +2688,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/quartermaster/hangar) "fZ" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/exploration_shuttle/atmos) "gb" = ( @@ -2690,18 +2701,18 @@ /turf/simulated/floor/tiled, /area/exploration_shuttle/airlock) "gc" = ( -/obj/effect/shuttle_landmark/supply/station, +/obj/shuttle_landmark/supply/station, /turf/simulated/floor/plating, /area/quartermaster/hangar) "gd" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled/dark, /area/quartermaster/expedition/storage) "ge" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/scientist_torch, /obj/machinery/light{ dir = 1 @@ -2724,11 +2735,11 @@ /turf/simulated/floor/tiled, /area/exploration_shuttle/airlock) "gi" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/exploration_shuttle/fuel) "gj" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/monotile, /area/exploration_shuttle/fuel) "gk" = ( @@ -2742,7 +2753,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/alarm{ @@ -2758,7 +2769,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -2798,7 +2809,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/exploration_shuttle/atmos) "gp" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/mining/drill, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/expedition/storage) @@ -2813,7 +2824,7 @@ /obj/machinery/power/smes/buildable/preset/torch/shuttle{ RCon_tag = "Shuttle - Guppy" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/green{ d2 = 8; icon_state = "0-8" @@ -2846,7 +2857,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/rnd) "gv" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 4 }, /turf/simulated/floor/tiled, @@ -2873,7 +2884,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /turf/simulated/floor/tiled/monotile, @@ -2894,7 +2905,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/corner/orange{ +/obj/floor_decal/corner/orange{ dir = 6 }, /turf/simulated/floor/tiled/monotile, @@ -2985,7 +2996,7 @@ /turf/simulated/wall/prepainted, /area/maintenance/fifthdeck/aftport) "gK" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/hallway/primary/fifthdeck/fore) @@ -3008,19 +3019,27 @@ /turf/simulated/wall/prepainted, /area/quartermaster/shuttlefuel) "gP" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/floodlight, -/obj/machinery/camera/network/supply{ - c_tag = "Supply Office - Warehouse Aft"; - dir = 1 +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/tiled/dark/monotile, -/area/quartermaster/storage) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera/network/research{ + c_tag = "Petrov - Hallway Fore" + }, +/turf/simulated/floor/tiled/white, +/area/shuttle/petrov/hallwaya) "gT" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/floodlight, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftstarboard) @@ -3037,13 +3056,13 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "gY" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /obj/structure/sign/solgov, /turf/simulated/wall/titanium, /area/exploration_shuttle/cockpit) "gZ" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, -/obj/effect/paint/silver, +/obj/wallframe_spawn/reinforced_phoron/titanium, +/obj/paint/silver, /obj/structure/cable/cyan{ d1 = 1; d2 = 2; @@ -3053,8 +3072,8 @@ /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell2) "ha" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, -/obj/effect/paint/silver, +/obj/wallframe_spawn/reinforced_phoron/titanium, +/obj/paint/silver, /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell2) "hb" = ( @@ -3067,18 +3086,14 @@ /area/maintenance/fifthdeck/aftstarboard) "hc" = ( /obj/machinery/portable_atmospherics/canister/sleeping_agent, -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - pixel_x = -32 - }, -/obj/machinery/light/small{ - dir = 1 +/obj/floor_decal/industrial/outline/grey, +/obj/structure/sign/warning/nosmoking_2{ + pixel_y = 30 }, -/obj/effect/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/rnd/canister) "hd" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -3108,7 +3123,7 @@ /obj/machinery/atmospherics/binary/pump{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/machinery/alarm{ @@ -3118,16 +3133,15 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/fuel) "hf" = ( -/obj/structure/sign/warning/nosmoking_1{ - dir = 8; - pixel_x = 32 - }, /obj/structure/cable/cyan{ d1 = 1; d2 = 8; icon_state = "1-8" }, /obj/structure/catwalk, +/obj/structure/sign/warning/toxic_material{ + pixel_x = 32 + }, /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "hg" = ( @@ -3145,12 +3159,12 @@ /area/rnd/canister) "hh" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/fore) "hi" = ( /obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftstarboard) "hj" = ( @@ -3163,26 +3177,26 @@ /turf/simulated/wall/prepainted, /area/hallway/primary/fifthdeck/aft) "hk" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/mining/brace{ dir = 8 }, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/expedition/storage) "hl" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/quartermaster/exploration) "hm" = ( /obj/structure/closet/secure_closet/pilot, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/sign/ecplaque{ pixel_y = 30 }, /turf/simulated/floor/tiled/dark/monotile, /area/command/pilot) "hn" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/suspension_gen, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/expedition/storage) @@ -3207,11 +3221,11 @@ /obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/exploration_shuttle/fuel) "ht" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/crate, /obj/random_multi/single_item/boombox, /turf/simulated/floor/tiled/dark/monotile, @@ -3221,14 +3235,14 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/fore) "hv" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 1 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/fore) "hw" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 5 }, /turf/simulated/floor/tiled, @@ -3237,9 +3251,9 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/effect/floor_decal/corner/mauve/mono, +/obj/floor_decal/corner/mauve/mono, /obj/structure/closet/secure_closet/explorer, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/material/hatchet/machete, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) @@ -3275,7 +3289,7 @@ /area/quartermaster/storage) "hF" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/aft) "hG" = ( @@ -3289,7 +3303,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark, /area/quartermaster/storage) "hL" = ( @@ -3322,8 +3336,8 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "hO" = ( -/obj/effect/floor_decal/corner/mauve/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/mauve/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/explorer, /obj/item/material/hatchet/machete, /obj/machinery/light{ @@ -3332,10 +3346,6 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) "hP" = ( -/obj/structure/sign/warning/nosmoking_1{ - dir = 4; - pixel_x = -32 - }, /obj/structure/cable/cyan{ d1 = 1; d2 = 4; @@ -3345,10 +3355,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/sign/warning/toxic_material{ + pixel_x = -32 + }, /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "hR" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/storage) @@ -3372,7 +3385,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/fifthdeck/fore) "hT" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -3381,7 +3394,7 @@ "hV" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/techfloor, /area/exploration_shuttle/atmos) "hW" = ( @@ -3392,13 +3405,13 @@ /turf/simulated/floor/tiled/techfloor, /area/exploration_shuttle/atmos) "hY" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "hZ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -3424,13 +3437,13 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/fifthdeck/aftstarboard) "if" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled, /area/quartermaster/storage) "ih" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/cyan{ d1 = 4; d2 = 8; @@ -3439,20 +3452,20 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "ii" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 4 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/fore) "il" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/rotating_alarm/security_alarm{ dir = 8 }, /turf/simulated/floor/plating, /area/quartermaster/hangar) "im" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -3492,7 +3505,9 @@ /turf/simulated/floor/plating, /area/guppy_hangar/start) "ir" = ( -/obj/machinery/camera/network/hangar, +/obj/machinery/camera/network/fifth_deck{ + c_tag = "Hangar - Midships Starboard" + }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "iu" = ( @@ -3509,7 +3524,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/command/pilot) "iw" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/mining/brace{ dir = 4 }, @@ -3519,7 +3534,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/expedition/storage) "ix" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/anomaly_container, /obj/item/device/radio/intercom{ dir = 4; @@ -3528,7 +3543,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/expedition/storage) "iy" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/command/pilot) "iz" = ( @@ -3580,7 +3595,7 @@ /turf/simulated/floor/lino, /area/command/pilot) "iD" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/table/steel, /obj/machinery/cell_charger, /obj/random/powercell, @@ -3607,11 +3622,11 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/fore) "iF" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/storage) "iG" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/storage) @@ -3643,7 +3658,7 @@ pixel_x = -3; pixel_y = -3 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/storage) "iI" = ( @@ -3669,7 +3684,7 @@ /obj/item/device/flashlight, /obj/item/device/flashlight, /obj/item/device/flashlight, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/storage) "iK" = ( @@ -3701,7 +3716,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -3724,7 +3739,7 @@ pixel_y = 7 }, /obj/item/folder/blue, -/obj/effect/floor_decal/corner/mauve/mono, +/obj/floor_decal/corner/mauve/mono, /obj/structure/sign/ecplaque{ pixel_y = 30 }, @@ -3735,24 +3750,20 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/camera/network/exploration{ - c_tag = "Exploration Equipment"; - dir = 8 - }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) "iP" = ( /obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) "iQ" = ( /obj/machinery/suit_cycler/exploration, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) "iR" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light/small{ dir = 1 }, @@ -3781,13 +3792,13 @@ /turf/simulated/floor/tiled/steel_ridged, /area/quartermaster/exploration) "iU" = ( -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/catwalk_plated, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/plating, /area/quartermaster/hangar) "iV" = ( -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning{ +/obj/catwalk_plated, +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/plating, @@ -3805,7 +3816,7 @@ /obj/random/torchcloset, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/quartermaster/hangar) "iY" = ( @@ -3833,12 +3844,9 @@ /turf/simulated/floor/tiled/dark, /area/quartermaster/storage) "ja" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/machinery/camera/network/supply{ - c_tag = "Supply Office - Warehouse Fore" - }, /obj/machinery/computer/guestpass{ pixel_y = 32 }, @@ -3850,7 +3858,7 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/storage) "jd" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/machinery/button/blast_door{ @@ -3877,7 +3885,7 @@ dir = 10 }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/monotile, /area/quartermaster/storage) "jf" = ( @@ -3900,19 +3908,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/storage) "ji" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/storage) "jj" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/dispenser, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/storage) @@ -3920,9 +3928,9 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/fore) "jl" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/floodlight, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled/dark/monotile, @@ -3947,7 +3955,7 @@ pixel_y = 4 }, /obj/item/stack/nanopaste, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/storage) "jn" = ( @@ -3981,13 +3989,13 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/fore) "jp" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light/small, /obj/structure/closet/crate/freezer/rations, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/storage) "jq" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/floodlight, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/expedition/storage) @@ -4018,19 +4026,19 @@ /turf/simulated/floor/tiled/steel_ridged, /area/quartermaster/expedition/storage) "jt" = ( -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning{ +/obj/catwalk_plated, +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/plating, /area/quartermaster/hangar) "ju" = ( /obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/quartermaster/hangar) "jv" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/handrail{ dir = 4 }, @@ -4070,22 +4078,26 @@ /turf/simulated/floor/tiled/steel_ridged, /area/command/pilot) "jz" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/stasis_cage, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/stasis_cage, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/expedition/storage) "jA" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/ore_box, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/expedition/storage) "jB" = ( -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/catwalk_plated, +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, +/obj/machinery/camera/network/fifth_deck{ + c_tag = "Hangar - Fore Starboard"; + dir = 4 + }, /turf/simulated/floor/plating, /area/quartermaster/hangar) "jC" = ( @@ -4096,23 +4108,19 @@ /turf/simulated/floor/tiled/steel_ridged, /area/quartermaster/expedition/eva) "jD" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/suit_storage_unit/pilot/sol, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) "jE" = ( /obj/machinery/suit_storage_unit/explorer, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/firealarm{ pixel_y = 24 }, /obj/machinery/light{ dir = 1 }, -/obj/machinery/camera/network/exploration{ - c_tag = "Exploration EVA"; - dir = 4 - }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) "jF" = ( @@ -4123,7 +4131,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 10 }, /obj/structure/disposalpipe/segment{ @@ -4134,10 +4142,8 @@ /area/quartermaster/exploration) "jG" = ( /obj/structure/table/steel, -/obj/machinery/chemical_dispenser/bar_soft/full, -/obj/machinery/camera/network/exploration{ - c_tag = "Pilot's Lounge"; - dir = 4 +/obj/machinery/chemical_dispenser/bar_soft/full{ + dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, /area/command/pilot) @@ -4171,7 +4177,7 @@ /turf/simulated/floor/tiled/dark, /area/quartermaster/expedition/storage) "jK" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -4183,10 +4189,10 @@ /turf/simulated/floor/tiled/dark, /area/quartermaster/expedition/storage) "jL" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -4216,13 +4222,13 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/fifthdeck/fore) "jO" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/fore) "jP" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 1 }, /obj/machinery/embedded_controller/radio/airlock/docking_port{ @@ -4237,7 +4243,7 @@ tag_exterior_door = "petrov_shuttle_dock_outer"; tag_interior_door = "petrov_shuttle_dock_inner" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/emcloset, /obj/structure/cable/green{ d1 = 1; @@ -4250,7 +4256,7 @@ /area/hallway/primary/fifthdeck/aft) "jQ" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -4262,7 +4268,7 @@ /area/command/pilot) "jR" = ( /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/quartermaster/shuttlefuel) "jS" = ( @@ -4281,7 +4287,7 @@ dir = 4; pixel_x = -32 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/monotile, /area/quartermaster/shuttlefuel) "jU" = ( @@ -4300,7 +4306,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/quartermaster/shuttlefuel) "jV" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/green{ @@ -4311,7 +4317,7 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/shuttlefuel) "jW" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/cable/green{ d2 = 4; icon_state = "0-4" @@ -4346,14 +4352,14 @@ pixel_x = -10; pixel_y = 8 }, -/obj/item/device/spaceflare{ +/obj/item/shuttle_beacon{ pixel_x = 5; pixel_y = -3 }, -/obj/item/device/spaceflare{ +/obj/item/shuttle_beacon{ pixel_y = -2 }, -/obj/item/device/spaceflare{ +/obj/item/shuttle_beacon{ pixel_x = -5; pixel_y = -1 }, @@ -4368,11 +4374,11 @@ /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/quartermaster/hangar) "jY" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -4383,7 +4389,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/quartermaster/shuttlefuel) "jZ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/mineral/stacking_machine{ input_turf = 2; output_turf = 1 @@ -4396,14 +4402,14 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "kd" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/light/spot{ dir = 1 }, /turf/simulated/floor/plating, /area/quartermaster/hangar) "ke" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/handrail{ dir = 8 @@ -4427,7 +4433,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/exploration) "kh" = ( -/obj/effect/floor_decal/corner/mauve/mono, +/obj/floor_decal/corner/mauve/mono, /obj/machinery/power/apc{ dir = 8; name = "west bump"; @@ -4438,7 +4444,7 @@ icon_state = "0-4" }, /obj/structure/closet/secure_closet/explorer, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/material/hatchet/machete, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) @@ -4449,9 +4455,9 @@ /turf/simulated/floor/tiled, /area/quartermaster/exploration) "kj" = ( -/obj/effect/floor_decal/corner/mauve/mono, +/obj/floor_decal/corner/mauve/mono, /obj/structure/closet/secure_closet/explorer, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/material/hatchet/machete, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) @@ -4474,7 +4480,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -4498,40 +4504,40 @@ /obj/item/clothing/glasses/science, /obj/item/device/geiger, /obj/item/device/geiger, -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 5 }, /turf/simulated/floor/tiled, /area/quartermaster/exploration) "ko" = ( /obj/machinery/suit_storage_unit/explorer, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) "kp" = ( /obj/machinery/computer/ship/navigation{ dir = 8 }, -/obj/effect/floor_decal/corner/mauve/half{ +/obj/floor_decal/corner/mauve/half{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) "kq" = ( /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/quartermaster/exploration) "kr" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/storage/box/greenglowsticks, /obj/item/storage/box/greenglowsticks, /obj/item/clothing/mask/gas/half, /obj/item/clothing/mask/gas/half, /obj/item/clothing/mask/gas/half, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/item/device/radio/intercom{ pixel_y = 23 }, @@ -4550,30 +4556,30 @@ /turf/simulated/floor/tiled/steel_ridged, /area/quartermaster/exploration) "ku" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, /obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 5; icon_state = "warning" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /mob/living/exosuit/premade/light/exploration, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) "kv" = ( -/obj/machinery/suit_cycler/pilot, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/sign/ecplaque{ pixel_y = -30 }, +/obj/machinery/suit_cycler/pilot/alt, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) "kw" = ( @@ -4583,7 +4589,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/exploration) "kx" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/button/alternate/door{ desc = "A remote control-switch for airlocks."; id_tag = "hangarexit"; @@ -4607,9 +4613,15 @@ /obj/item/device/scanner/mining, /obj/item/device/scanner/mining, /obj/item/device/scanner/mining, -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 10 }, +/obj/item/device/drone_designator{ + network = "torch_transport" + }, +/obj/item/device/drone_designator{ + network = "torch_transport" + }, /turf/simulated/floor/tiled, /area/quartermaster/exploration) "kz" = ( @@ -4625,7 +4637,7 @@ /obj/item/device/scanner/plant, /obj/item/device/scanner/plant, /obj/item/device/scanner/plant, -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 10 }, /obj/machinery/alarm{ @@ -4635,7 +4647,7 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) "kA" = ( -/obj/effect/floor_decal/corner/mauve/half{ +/obj/floor_decal/corner/mauve/half{ dir = 4 }, /obj/structure/table/steel, @@ -4686,7 +4698,7 @@ /area/quartermaster/exploration) "kF" = ( /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -4705,7 +4717,7 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) "kI" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -4743,14 +4755,14 @@ dir = 8 }, /obj/machinery/disposal, -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 10 }, /turf/simulated/floor/tiled, /area/quartermaster/exploration) "kM" = ( /obj/machinery/suit_storage_unit/explorer, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/alarm{ dir = 4; pixel_x = -32 @@ -4759,7 +4771,7 @@ /area/quartermaster/exploration) "kP" = ( /obj/machinery/suit_storage_unit/explorer, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) @@ -4779,7 +4791,7 @@ }, /obj/item/rig/exploration/equipped, /obj/item/clothing/mask/gas/half, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) @@ -4792,21 +4804,21 @@ /turf/simulated/wall/prepainted, /area/quartermaster/exploration) "kT" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/light/spot{ dir = 4 }, /turf/simulated/floor/plating, /area/quartermaster/hangar) "kU" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/light/spot{ dir = 8 }, /turf/simulated/floor/plating, /area/quartermaster/hangar) "kV" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/light/spot{ dir = 4 }, @@ -4818,19 +4830,19 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "kW" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "kX" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/light/spot, /turf/simulated/floor/plating, /area/quartermaster/hangar) "kY" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -4840,16 +4852,16 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/quartermaster/shuttlefuel) "kZ" = ( -/obj/effect/shuttle_landmark/lift/cargo_bottom, +/obj/shuttle_landmark/lift/cargo_bottom, /turf/simulated/floor/plating, /area/quartermaster/storage) "la" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor/grid, /area/quartermaster/shuttlefuel) "lb" = ( @@ -4860,8 +4872,8 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/quartermaster/shuttlefuel) "lc" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/expedition/storage) "ld" = ( @@ -4871,7 +4883,7 @@ name = "east bump"; pixel_x = 24 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -4891,12 +4903,12 @@ /turf/simulated/floor/tiled/techfloor, /area/exploration_shuttle/fuel) "lf" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/closet/crate/plastic, /turf/simulated/floor/plating, /area/quartermaster/hangar) "lg" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/light/spot, /obj/structure/closet/crate, /obj/random_multi/single_item/boombox, @@ -4906,7 +4918,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 9 }, /obj/structure/closet/emcloset, @@ -4939,7 +4951,6 @@ /turf/simulated/floor/tiled/steel_ridged, /area/quartermaster/hangar) "lm" = ( -/obj/effect/floor_decal/industrial/outline/blue, /obj/structure/cable/cyan{ d1 = 4; d2 = 8; @@ -4949,6 +4960,7 @@ dir = 4 }, /obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/industrial/outline, /turf/simulated/floor/tiled/dark, /area/quartermaster/expedition/atmos) "ln" = ( @@ -4974,16 +4986,16 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, /turf/simulated/floor/tiled/steel_ridged, /area/quartermaster/storage) "lq" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/ore_box, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/dark/monotile, @@ -4995,17 +5007,19 @@ }, /obj/structure/window/reinforced, /obj/machinery/door/window/northright{ - name = "suit storage" + autoset_access = 0; + name = "suit storage"; + req_access = list("ACCESS_MINING") }, /obj/item/rig/industrial/equipped, /obj/structure/window/reinforced{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/brown{ dir = 6 }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 9 }, /turf/simulated/floor/tiled/dark, @@ -5018,10 +5032,10 @@ /turf/simulated/floor/tiled/dark/monotile, /area/command/pilot) "lu" = ( -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 6 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad, /obj/item/device/radio/intercom{ dir = 8; @@ -5031,7 +5045,7 @@ /area/hallway/primary/fifthdeck/aft) "lv" = ( /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/quartermaster/hangar) "lw" = ( @@ -5041,26 +5055,22 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/quartermaster/hangar) "lx" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/anomaly_container, /obj/machinery/light/small, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/expedition/storage) "ly" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/structure/ladder/up, /obj/machinery/light/small, -/obj/machinery/camera/network/hangar{ - c_tag = "Expedition Storage"; - dir = 1 - }, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/expedition/storage) "lz" = ( @@ -5071,14 +5081,14 @@ dir = 4; icon_state = "bulb1" }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/dark, /area/quartermaster/expedition/atmos) "lA" = ( /obj/machinery/light/small{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /obj/machinery/atmospherics/portables_connector{ dir = 4 }, @@ -5104,7 +5114,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "lD" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/cable/cyan{ @@ -5118,7 +5128,7 @@ /turf/simulated/floor/tiled/dark, /area/quartermaster/expedition/atmos) "lE" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/cable/cyan{ d1 = 1; d2 = 2; @@ -5141,7 +5151,7 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "lH" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/plating, /area/quartermaster/hangar) "lK" = ( @@ -5156,7 +5166,7 @@ input_turf = 4; output_turf = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/plating, /area/quartermaster/hangar) "lM" = ( @@ -5172,19 +5182,19 @@ input_turf = 1; output_turf = 2 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "lQ" = ( -/obj/effect/floor_decal/industrial/loading{ +/obj/floor_decal/industrial/loading{ dir = 1 }, /obj/structure/closet/crate, /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "lR" = ( -/obj/effect/floor_decal/industrial/loading, +/obj/floor_decal/industrial/loading, /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "lS" = ( @@ -5201,10 +5211,6 @@ pixel_y = -24; req_access = list() }, -/obj/machinery/camera/network/pod{ - c_tag = "General Utility Pod - Crew Compartment"; - dir = 4 - }, /obj/structure/cable/green{ d2 = 4; icon_state = "0-4" @@ -5226,7 +5232,7 @@ id = "mining_internal"; name = "mining conveyor" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/light/spot, /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) @@ -5261,7 +5267,7 @@ /turf/simulated/floor/tiled/techfloor, /area/exploration_shuttle/fuel) "mc" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -5442,7 +5448,7 @@ /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ id_tag = "petrov_shuttle_dock_pump" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/airlock_sensor{ @@ -5456,7 +5462,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/fifthdeck/aft) "mw" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/cyan{ d1 = 1; d2 = 2; @@ -5484,7 +5490,7 @@ /turf/simulated/floor/tiled/techfloor, /area/exploration_shuttle/atmos) "mB" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/cyan{ d1 = 1; @@ -5495,7 +5501,7 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "mC" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/cyan{ @@ -5511,13 +5517,13 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/tiled/dark, /area/quartermaster/storage) "mE" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/cyan{ @@ -5534,17 +5540,13 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "mF" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/quartermaster/hangar) "mG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/machinery/camera/network/exploration_shuttle{ - c_tag = "Charon - Atmospherics Compartment"; - dir = 8 - }, /obj/structure/handrail{ dir = 8 }, @@ -5632,13 +5634,17 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/fifthdeck/fore) "mN" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 6 }, /obj/machinery/alarm{ dir = 8; pixel_x = 24 }, +/obj/machinery/camera/network/fifth_deck{ + c_tag = "Fifth Deck Hallway - Stairs"; + dir = 8 + }, /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/fore) "mP" = ( @@ -5732,7 +5738,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/fore) @@ -5831,7 +5837,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "nl" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -5896,7 +5902,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftport) "np" = ( -/obj/effect/paint/red, +/obj/paint/red, /turf/simulated/wall/titanium, /area/exploration_shuttle/atmos) "nq" = ( @@ -6026,10 +6032,10 @@ /area/maintenance/fifthdeck/fore) "nA" = ( /obj/machinery/suit_storage_unit/science, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/expedition{ - c_tag = "Expedition - EVA Prep" +/obj/floor_decal/corner/research/half{ + dir = 1 }, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/expedition/eva) "nB" = ( @@ -6142,7 +6148,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftport) "nM" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -6152,7 +6158,7 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "nN" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -6164,7 +6170,7 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "nO" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -6179,7 +6185,7 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "nP" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, @@ -6194,7 +6200,7 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "nQ" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/cable/green{ @@ -6208,7 +6214,7 @@ /turf/simulated/floor/tiled/dark, /area/quartermaster/expedition/atmos) "nR" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, @@ -6235,7 +6241,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/exploration_shuttle/airlock) "nU" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, @@ -6250,7 +6256,7 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "nV" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, @@ -6574,7 +6580,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/storage) "ou" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/mech_recharger, /mob/living/exosuit/premade/powerloader/old, /turf/simulated/floor/tiled/dark/monotile, @@ -6583,7 +6589,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled, @@ -6594,7 +6600,7 @@ dir = 4; icon_state = "pipe-c" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -6604,11 +6610,11 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/storage) "oy" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled, @@ -6623,7 +6629,7 @@ /obj/item/storage/toolbox/electrical, /obj/item/storage/toolbox/emergency, /obj/item/storage/toolbox/emergency, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/storage) "oD" = ( @@ -6667,8 +6673,8 @@ /turf/simulated/floor/tiled/steel_ridged, /area/quartermaster/hangar) "oG" = ( -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/catwalk_plated, +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -6683,8 +6689,10 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "oI" = ( -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/hangar, +/obj/catwalk_plated, +/obj/machinery/camera/network/fifth_deck{ + c_tag = "Hangar - Aft Starboard" + }, /turf/simulated/floor/plating, /area/quartermaster/hangar) "oJ" = ( @@ -6692,10 +6700,7 @@ /turf/unsimulated/mask, /area/hallway/primary/fifthdeck/fore) "oL" = ( -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/hangar{ - dir = 8 - }, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -6708,36 +6713,31 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "oM" = ( -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/hangar{ +/obj/catwalk_plated, +/obj/machinery/camera/network/fifth_deck{ + c_tag = "Hangar - Fore Port"; dir = 4 }, /turf/simulated/floor/plating, /area/quartermaster/hangar) "oN" = ( -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/hangar{ +/obj/catwalk_plated, +/obj/machinery/camera/network/fifth_deck{ + c_tag = "Hangar - Aft Port"; dir = 8 }, /turf/simulated/floor/plating, /area/quartermaster/hangar) -"oO" = ( -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/hangar{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/quartermaster/hangar) "oQ" = ( /obj/structure/sign/deck/fifth{ dir = 8; pixel_x = 40 }, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 6 }, /obj/machinery/vending/cola{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/fifthdeck/aft) @@ -6746,7 +6746,7 @@ dir = 4; pixel_x = 21 }, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 6 }, /obj/machinery/vending/snack{ @@ -6762,20 +6762,20 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 6 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/fifthdeck/aft) "oU" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/fore) "oW" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 8 }, /obj/structure/sign/deck/fifth{ @@ -6786,13 +6786,9 @@ /area/hallway/primary/fifthdeck/fore) "oX" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/mauve/half, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/mauve/half, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light, -/obj/machinery/camera/network/fifth_deck{ - c_tag = "Fifth Deck Hallway - Lift"; - dir = 1 - }, /obj/machinery/alarm{ dir = 1; pixel_y = -22 @@ -6800,23 +6796,23 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/fore) "oY" = ( -/obj/effect/floor_decal/corner/mauve, +/obj/floor_decal/corner/mauve, /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/fore) "oZ" = ( -/obj/effect/floor_decal/corner/mauve/half{ +/obj/floor_decal/corner/mauve/half{ dir = 4 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/fore) "pa" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 6 }, /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/fore) "pb" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/button/alternate/door{ desc = "A remote control-switch for airlocks."; id_tag = "hangarexit2"; @@ -6852,7 +6848,7 @@ dir = 4; pixel_x = -32 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -6879,7 +6875,7 @@ /turf/simulated/floor/tiled/techmaint, /area/maintenance/fifthdeck/fore) "pk" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 4 }, /obj/structure/cable/green{ @@ -6922,7 +6918,7 @@ /area/maintenance/fifthdeck/fore) "po" = ( /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /turf/simulated/floor/tiled, @@ -6969,7 +6965,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "pt" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -6979,20 +6975,20 @@ /area/maintenance/fifthdeck/aftport) "pu" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftport) "pv" = ( /obj/structure/table/rack, /obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftport) "pw" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ id_tag = "petrov_shuttle_dock_pump" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/item/device/radio/intercom{ @@ -7021,13 +7017,13 @@ /area/maintenance/fifthdeck/fore) "pz" = ( /obj/structure/disposalpipe/up, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftport) "pA" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 6 }, @@ -7056,13 +7052,13 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftport) "pF" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/quartermaster/hangar) "pG" = ( /obj/machinery/atmospherics/pipe/zpipe/up/supply, /obj/machinery/atmospherics/pipe/zpipe/up/scrubbers, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -7078,7 +7074,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "pH" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -7090,7 +7086,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "pI" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -7139,7 +7135,7 @@ /obj/structure/hygiene/sink/kitchen{ pixel_x = 32 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/decal/cleanable/cobweb2, /turf/simulated/floor/plating, /area/vacant/infirmary) "pN" = ( @@ -7186,10 +7182,16 @@ /obj/item/clothing/glasses/meson{ pixel_y = -4 }, +/obj/item/device/drone_designator{ + network = "torch_transport" + }, +/obj/item/device/drone_designator{ + network = "torch_transport" + }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/expedition) "pQ" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/random/torchcloset, /obj/random/maintenance, /obj/random/maintenance, @@ -7197,7 +7199,7 @@ /area/maintenance/fifthdeck/fore) "pR" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/item/device/radio/intercom{ dir = 4; pixel_x = -21 @@ -7261,7 +7263,7 @@ /turf/simulated/floor/tiled/white, /area/vacant/infirmary) "pX" = ( -/obj/effect/paint/red, +/obj/paint/red, /turf/simulated/wall/titanium, /area/exploration_shuttle/fuel) "pY" = ( @@ -7292,7 +7294,7 @@ start_pressure = 6000 }, /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/techfloor, /area/guppy_hangar/start) "qc" = ( @@ -7310,14 +7312,14 @@ /area/quartermaster/expedition/eva) "qe" = ( /obj/structure/closet/toolcloset/excavation, -/obj/effect/floor_decal/corner/brown/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/expedition) "qf" = ( /obj/structure/closet/secure_closet/secure_closet/xenoarchaeologist_torch, -/obj/effect/floor_decal/corner/brown/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/expedition) "qg" = ( @@ -7325,7 +7327,7 @@ /obj/item/shovel{ pixel_x = -5 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -7338,8 +7340,8 @@ /area/quartermaster/expedition) "qh" = ( /obj/structure/closet/secure_closet/prospector, -/obj/effect/floor_decal/corner/brown/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/brown/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light{ dir = 4 }, @@ -7347,7 +7349,7 @@ /area/quartermaster/expedition) "qi" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -7368,10 +7370,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ dir = 8 }, -/obj/machinery/camera/network/exploration_shuttle{ - c_tag = "Charon - Fuel Compartment"; - dir = 4 - }, /obj/structure/handrail{ dir = 4 }, @@ -7379,22 +7377,26 @@ /turf/simulated/floor/tiled/techfloor, /area/exploration_shuttle/fuel) "ql" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/quartermaster/expedition) "qm" = ( -/obj/machinery/suit_cycler/science, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/tank/jetpack/carbondioxide, +/obj/item/tank/jetpack/carbondioxide, +/obj/item/tank/jetpack/carbondioxide, /turf/simulated/floor/tiled/monotile, /area/quartermaster/expedition/eva) "qn" = ( /obj/machinery/suit_storage_unit/mining, -/obj/effect/floor_decal/industrial/outline/yellow, /obj/item/device/radio/intercom{ dir = 4; pixel_x = -21 }, +/obj/floor_decal/corner/brown/half, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/expedition/eva) "qo" = ( @@ -7403,8 +7405,11 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/expedition/eva) "qp" = ( -/obj/machinery/suit_cycler/mining, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, /turf/simulated/floor/tiled/monotile, /area/quartermaster/expedition/eva) "qq" = ( @@ -7459,13 +7464,13 @@ pixel_y = 23; req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 4 }, /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/aft) "qy" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/structure/disposalpipe/segment, @@ -7477,7 +7482,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/aft) "qz" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 1 }, /obj/machinery/alarm{ @@ -7490,14 +7495,14 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/aft) "qA" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/aft) "qB" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/structure/cable/green{ @@ -7524,8 +7529,8 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/fifthdeck/aft) "qD" = ( -/obj/effect/floor_decal/corner/brown/half, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/brown/half, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light, /obj/structure/cable/cyan{ d1 = 4; @@ -7536,7 +7541,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/aft) "qE" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /obj/structure/cable/cyan{ @@ -7547,7 +7552,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/aft) "qF" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /obj/machinery/light, @@ -7559,7 +7564,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/aft) "qH" = ( -/obj/effect/floor_decal/corner/brown/half, +/obj/floor_decal/corner/brown/half, /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -7567,7 +7572,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/aft) "qI" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 2; d2 = 8; @@ -7583,16 +7588,16 @@ /turf/simulated/floor/plating, /area/hallway/primary/fifthdeck/fore) "qJ" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/firecloset, /obj/machinery/rotating_alarm/security_alarm, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/fore) "qK" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -7628,7 +7633,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "qN" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -7648,7 +7653,7 @@ name = "west bump"; pixel_x = -24 }, -/obj/effect/floor_decal/corner/mauve/half, +/obj/floor_decal/corner/mauve/half, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/fore) @@ -7663,7 +7668,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -7682,7 +7687,7 @@ /turf/simulated/floor/tiled/dark, /area/quartermaster/expedition/atmos) "qR" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 6 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -7712,7 +7717,7 @@ /area/maintenance/fifthdeck/fore) "qT" = ( /obj/structure/cable, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -7781,7 +7786,7 @@ name = "west bump"; pixel_x = -24 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -7835,11 +7840,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/camera/network/engineering{ - c_tag = "Substation - Fifth Deck"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -8114,7 +8115,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "rF" = ( @@ -8186,11 +8187,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/fore) "rM" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -8199,14 +8200,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/obj/machinery/camera/network/fifth_deck{ - c_tag = "Fifth Deck Hallway - Stairwell"; - dir = 4 - }, /turf/simulated/floor/plating, /area/hallway/primary/fifthdeck/fore) "rN" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -8241,7 +8238,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/fore) "rQ" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, @@ -8251,7 +8248,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/fifthdeck/fore) "rR" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -8268,14 +8265,14 @@ /turf/simulated/floor/plating, /area/hallway/primary/fifthdeck/fore) "rS" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/plating, /area/hallway/primary/fifthdeck/fore) "rT" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, @@ -8382,7 +8379,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftport) "se" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/fore) @@ -8439,7 +8436,7 @@ /area/maintenance/fifthdeck/aftport) "sk" = ( /obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftport) "sl" = ( @@ -8456,7 +8453,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 6 }, /obj/machinery/light{ @@ -8472,21 +8469,17 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/fore) "sn" = ( -/obj/effect/floor_decal/corner/mauve/mono, +/obj/floor_decal/corner/mauve/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/fore) "so" = ( -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /obj/structure/closet/hydrant{ pixel_y = 32 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/fore) "sp" = ( -/obj/machinery/camera/network/expedition{ - c_tag = "Expedition - Prep"; - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, @@ -8512,7 +8505,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark, /area/quartermaster/storage) "su" = ( @@ -8529,16 +8522,16 @@ /area/maintenance/fifthdeck/fore) "sw" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftstarboard) "sx" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftstarboard) "sz" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftstarboard) "sA" = ( @@ -8548,7 +8541,7 @@ icon_state = "4-8" }, /obj/structure/table/steel, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftstarboard) "sB" = ( @@ -8584,7 +8577,7 @@ /turf/simulated/floor/tiled/techfloor, /area/exploration_shuttle/fuel) "sI" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, @@ -8618,7 +8611,7 @@ dir = 1; start_pressure = 4559.63 }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/light{ dir = 8 }, @@ -8669,34 +8662,29 @@ }, /turf/simulated/floor/plating, /area/vacant/infirmary) -"sW" = ( -/obj/structure/sign/warning/biohazard, -/turf/simulated/wall/prepainted, -/area/rnd/canister) "sX" = ( /obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/techfloor, /area/rnd/canister) "sY" = ( /obj/machinery/portable_atmospherics/canister/hydrogen, /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/firealarm{ pixel_y = 24 }, /turf/simulated/floor/tiled/techfloor, /area/rnd/canister) "sZ" = ( -/obj/machinery/portable_atmospherics/canister/empty, -/obj/structure/sign/warning/nosmoking_1{ - dir = 8; - pixel_x = 32 - }, -/obj/machinery/light/small{ - dir = 1 +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/chlorine, +/obj/structure/sign/warning/toxic_material{ + pixel_y = 30 }, -/obj/effect/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/rnd/canister) "tb" = ( @@ -8705,26 +8693,27 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "tc" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/rnd/canister) "td" = ( /obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/rnd/canister) "te" = ( /obj/machinery/portable_atmospherics/canister/phoron, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/sign/warning/compressed_gas{ dir = 8; pixel_x = 32 }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/techfloor, /area/rnd/canister) "tf" = ( @@ -8735,7 +8724,9 @@ }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ - name = "Canister Storage" + autoset_access = 0; + name = "Canister Storage"; + req_access = list("ACCESS_TOX_STORAGE") }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -8794,7 +8785,9 @@ "tj" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ - name = "Canister Storage" + autoset_access = 0; + name = "Canister Storage"; + req_access = list("ACCESS_TOX_STORAGE") }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -8823,7 +8816,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/maintenance/substation/fifthdeck) "tn" = ( @@ -8832,7 +8825,8 @@ dir = 4; pixel_x = -23 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light/small, /turf/simulated/floor/tiled/techfloor, /area/rnd/canister) "to" = ( @@ -8928,7 +8922,7 @@ dir = 1; start_pressure = 4559.63 }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/techfloor, /area/exploration_shuttle/atmos) "tx" = ( @@ -9016,7 +9010,7 @@ dir = 1; id_tag = "petrov_shuttle_dock_pump" }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/fifthdeck/aft) "tJ" = ( @@ -9031,17 +9025,14 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/hallwaya) "tO" = ( -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/hangar{ - dir = 4 - }, +/obj/catwalk_plated, /obj/machinery/rotating_alarm/security_alarm{ dir = 4 }, /turf/simulated/floor/plating, /area/quartermaster/hangar) "tQ" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /obj/structure/cable/cyan{ @@ -9063,17 +9054,19 @@ dir = 8 }, /obj/machinery/chem_master, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/warning{ dir = 9 }, /turf/simulated/floor/tiled/dark/monotile, /area/shuttle/petrov/analysis) "tT" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/control) "tU" = ( /obj/structure/railing/mapped, @@ -9088,11 +9081,11 @@ /area/maintenance/fifthdeck/aftport) "tV" = ( /obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline, +/obj/floor_decal/industrial/outline, /turf/simulated/floor/tiled/dark, /area/quartermaster/expedition/atmos) "tW" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/bed/chair/office/dark{ dir = 8 }, @@ -9242,7 +9235,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftport) "um" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -9276,7 +9269,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fifthdeck/aft) "uo" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, @@ -9317,7 +9310,7 @@ /area/hallway/primary/fifthdeck/aft) "uq" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ @@ -9388,7 +9381,7 @@ /obj/random/maintenance, /obj/random/maintenance, /obj/random/maintenance, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techmaint, /area/maintenance/fifthdeck/fore) "uy" = ( @@ -9599,7 +9592,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "uV" = ( @@ -9651,7 +9644,7 @@ /turf/simulated/wall/prepainted, /area/maintenance/fifthdeck/fore) "vc" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, @@ -9659,7 +9652,7 @@ /area/shuttle/petrov/rnd) "ve" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/machinery/light/small{ @@ -9683,7 +9676,7 @@ "vj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "vm" = ( @@ -9736,13 +9729,17 @@ /obj/structure/handrail{ dir = 4 }, +/obj/machinery/camera/network/research{ + c_tag = "Petrov - Anomalies Fore"; + dir = 4 + }, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/isolation) "vr" = ( /obj/machinery/alarm{ pixel_y = 24 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/binary/pump/on{ dir = 4; target_pressure = 200 @@ -9754,17 +9751,19 @@ /obj/machinery/atmospherics/portables_connector{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor, /area/exploration_shuttle/atmos) "vt" = ( /obj/structure/shuttle/engine/heater{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/isolation) "vA" = ( /obj/structure/cable/cyan{ @@ -9866,7 +9865,7 @@ /area/maintenance/fifthdeck/aftport) "vS" = ( /obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftport) "vT" = ( @@ -9886,7 +9885,7 @@ /area/maintenance/fifthdeck/aftport) "vY" = ( /obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftport) "vZ" = ( @@ -9913,13 +9912,13 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftport) "wf" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/bed/chair/office/comfy/blue, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftport) "wg" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -9942,7 +9941,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftport) "wk" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "wl" = ( @@ -9973,18 +9972,18 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/phoron) "wr" = ( -/obj/machinery/portable_atmospherics/canister/empty, -/obj/effect/floor_decal/industrial/outline/red, /obj/machinery/firealarm{ pixel_y = 24 }, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/tiled/dark, /area/quartermaster/expedition/atmos) "ws" = ( /turf/simulated/wall/r_wall/hull, /area/maintenance/fifthdeck/aftport) "wt" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/cable/cyan{ @@ -9995,7 +9994,7 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "wu" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad/longrange, /obj/machinery/newscaster{ pixel_y = -32 @@ -10071,7 +10070,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "wD" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -10100,7 +10099,7 @@ dir = 1; start_pressure = 1013.25 }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/exploration_shuttle/fuel) "wL" = ( @@ -10112,7 +10111,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -10132,7 +10131,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/hallwaya) "wM" = ( -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /obj/machinery/atmospherics/unary/tank/carbon_dioxide{ dir = 1; start_pressure = 1013.25 @@ -10145,7 +10144,9 @@ id_tag = "toxin_exhaust"; name = "Toxins Exhaust Blast Doors" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/toxins) "wW" = ( /obj/structure/disposalpipe/segment{ @@ -10220,7 +10221,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fifthdeck/aft) "xh" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -10228,7 +10229,7 @@ name = "Petrov Blast Shutters"; opacity = 0 }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/cockpit) "xl" = ( @@ -10236,7 +10237,7 @@ dir = 4; pixel_x = -32 }, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 9 }, /turf/simulated/floor/tiled/steel_grid, @@ -10247,7 +10248,7 @@ /turf/simulated/floor/tiled/techfloor, /area/exploration_shuttle/fuel) "xn" = ( -/obj/effect/floor_decal/industrial/outline{ +/obj/floor_decal/industrial/outline{ color = "#55007f"; name = "purple outline" }, @@ -10277,7 +10278,7 @@ /area/shuttle/petrov/analysis) "xs" = ( /obj/structure/closet/secure_closet/crew/research, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/random/maintenance/clean, /obj/random/maintenance/clean, /obj/random/maintenance/clean, @@ -10328,7 +10329,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exploration_shuttle/airlock) "xA" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/table/rack, /obj/item/clothing/shoes/magboots, /obj/item/clothing/suit/bio_suit/anomaly, @@ -10337,7 +10338,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/hallwaya) "xB" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/r_n_d/protolathe, /obj/structure/window/reinforced{ dir = 1 @@ -10396,9 +10397,9 @@ /turf/simulated/floor/tiled/dark/monotile, /area/shuttle/petrov/control) "xO" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, +/obj/wallframe_spawn/reinforced_phoron/titanium, /obj/machinery/atmospherics/pipe/simple/visible/universal, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell1) "xP" = ( @@ -10506,7 +10507,9 @@ /area/maintenance/fifthdeck/aftstarboard) "yf" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/toxins) "yi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -10551,7 +10554,7 @@ dir = 4; id_tag = "charon_cargo_pump_out_external" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/handrail{ dir = 8 }, @@ -10573,11 +10576,11 @@ /obj/structure/sign/warning/hot_exhaust{ dir = 4 }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/ocp_wall, /area/shuttle/petrov/toxins) "yp" = ( -/obj/effect/paint/red, +/obj/paint/red, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, @@ -10614,13 +10617,13 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/shuttle/petrov/maint) "yu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ @@ -10726,7 +10729,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "yC" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/fabricator, /turf/simulated/floor/tiled/dark/monotile, /area/shuttle/petrov/rnd) @@ -10752,7 +10755,7 @@ dir = 8; id_tag = "charon_cargo_pump_out_external" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/handrail{ dir = 4 }, @@ -10802,8 +10805,8 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "yR" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/equipment) "yU" = ( @@ -10819,7 +10822,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/isolation) "yW" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -10845,7 +10848,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/isolation) "zf" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/light/spot{ dir = 8 }, @@ -10887,8 +10890,8 @@ /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell1) "zl" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/rnd) "zm" = ( @@ -10910,7 +10913,7 @@ /area/shuttle/petrov/isolation) "zn" = ( /obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/random/tech_supply, /obj/random/tech_supply, /obj/structure/largecrate, @@ -10947,7 +10950,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/phoron) "zv" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/button/blast_door{ id_tag = "hanger_atmos_storage"; name = "Atmospheric Storage Door Control"; @@ -10981,9 +10984,6 @@ /obj/item/device/radio/intercom{ pixel_y = 23 }, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Cockpit" - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, @@ -11012,7 +11012,7 @@ }, /area/vacant/bar) "zO" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/r_n_d/destructive_analyzer, /turf/simulated/floor/tiled/dark/monotile, /area/shuttle/petrov/rnd) @@ -11075,7 +11075,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/eva) "Ag" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -11110,7 +11110,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/equipment) "Al" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/hallwaya) "An" = ( @@ -11135,6 +11135,10 @@ /obj/structure/handrail{ dir = 1 }, +/obj/machinery/camera/network/research{ + c_tag = "Petrov - Entryway"; + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/shuttle/petrov/hallwaya) "Ap" = ( @@ -11198,7 +11202,7 @@ /turf/simulated/floor/plating, /area/shuttle/petrov/maint) "AK" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/artifact_analyser, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/analysis) @@ -11226,12 +11230,6 @@ }, /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell3) -"AS" = ( -/obj/structure/table/glass, -/obj/item/modular_computer/tablet/lease/preset/command, -/obj/item/book/manual/nt_regs, -/turf/simulated/floor/lino, -/area/shuttle/petrov/rd) "AT" = ( /obj/structure/table/steel, /obj/machinery/chemical_dispenser/bar_soft/full, @@ -11243,9 +11241,9 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "AW" = ( -/obj/effect/paint/hull, -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, /obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced/titanium, /turf/simulated/floor/plating, /area/exploration_shuttle/medical) "AY" = ( @@ -11277,7 +11275,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "Ba" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/computer/rdconsole/petrov{ dir = 4 }, @@ -11320,7 +11318,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftport) "Bm" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -11398,7 +11396,7 @@ /turf/simulated/wall/r_wall/hull, /area/rnd/canister) "BD" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/structure/cable/cyan{ d1 = 1; d2 = 8; @@ -11468,7 +11466,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/petrov/control) "BO" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/table/standard, /obj/item/stack/material/plastic/ten, /turf/simulated/floor/tiled/dark/monotile, @@ -11489,22 +11487,24 @@ /obj/structure/shuttle/engine/heater{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/custodial) "BY" = ( /obj/machinery/atmospherics/portables_connector, /obj/machinery/portable_atmospherics/canister/empty, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/toxins) "Ch" = ( /obj/structure/window/reinforced{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/reagentgrinder, @@ -11608,7 +11608,7 @@ /area/maintenance/fifthdeck/aftstarboard) "CC" = ( /obj/structure/closet/secure_closet/crew/research, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/random/maintenance/clean, /obj/random/maintenance/clean, /obj/random/maintenance/clean, @@ -11661,7 +11661,7 @@ /turf/simulated/floor/reinforced, /area/shuttle/petrov/phoron) "CJ" = ( -/obj/structure/bed/chair/office/comfy/red{ +/obj/structure/bed/chair/office/comfy/purple{ dir = 1 }, /turf/simulated/floor/lino, @@ -11675,7 +11675,7 @@ /turf/simulated/floor/tiled/dark, /area/quartermaster/storage) "CR" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -11696,12 +11696,14 @@ /turf/simulated/floor/tiled/dark, /area/quartermaster/expedition/atmos) "CS" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/custodial) "CT" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/rd) "CV" = ( /obj/structure/table/standard, @@ -11754,14 +11756,10 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/camera/network/hangar{ - c_tag = "Fuel Bay"; - dir = 4 - }, /turf/simulated/floor/tiled/techfloor/grid, /area/quartermaster/shuttlefuel) "Dc" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /obj/machinery/button/blast_door{ id_tag = "guppy_hatch"; name = "Rear Hatch Control"; @@ -11804,9 +11802,9 @@ /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell2) "Di" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, +/obj/wallframe_spawn/reinforced_phoron/titanium, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell3) "Dl" = ( @@ -11830,11 +11828,14 @@ }, /area/vacant/bar) "Dn" = ( -/obj/machinery/suit_storage_unit/science, -/obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/light{ dir = 1 }, +/obj/machinery/suit_cycler/science, +/obj/floor_decal/corner/research/half{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/expedition/eva) "Do" = ( @@ -11887,7 +11888,6 @@ /area/shuttle/petrov/phoron) "Du" = ( /obj/structure/table/glass, -/obj/item/device/paicard, /turf/simulated/floor/lino, /area/shuttle/petrov/rd) "Dv" = ( @@ -11915,7 +11915,7 @@ /obj/machinery/door/window/southright{ name = "Test Chamber" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/cyan{ @@ -11935,10 +11935,6 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/hallwaya) "DE" = ( -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - EVA"; - dir = 4 - }, /obj/machinery/light_switch{ pixel_x = -24; pixel_y = 12 @@ -11980,7 +11976,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/isolation) "DK" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /obj/machinery/button/blast_door{ id_tag = "PetrovBiohazard"; name = "Biohazard Shutter Control"; @@ -11996,10 +11992,6 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Anomaly Aft"; - dir = 8 - }, /obj/item/device/radio/intercom{ dir = 8; pixel_x = 20 @@ -12025,7 +12017,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/isolation) "DQ" = ( -/obj/effect/paint/red, +/obj/paint/red, /turf/simulated/wall/titanium, /area/shuttle/petrov/custodial) "DT" = ( @@ -12044,10 +12036,12 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "DX" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/equipment) "DY" = ( /obj/structure/railing/mapped{ @@ -12074,9 +12068,9 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftstarboard) "Ec" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/isolation) "Ed" = ( @@ -12114,8 +12108,8 @@ /area/shuttle/petrov/toxins) "Eg" = ( /obj/structure/closet/secure_closet/prospector, -/obj/effect/floor_decal/corner/brown/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/brown/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/expedition) "Ek" = ( @@ -12178,7 +12172,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "Et" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/cyan{ d1 = 1; @@ -12194,10 +12188,6 @@ pixel_x = -24; pixel_y = 12 }, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Toxins"; - dir = 4 - }, /obj/structure/cable/cyan{ d1 = 1; d2 = 2; @@ -12240,7 +12230,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/expedition) "EC" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -12270,10 +12260,6 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftport) "EJ" = ( -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Desublimation"; - dir = 4 - }, /obj/machinery/power/apc{ dir = 8; name = "west bump"; @@ -12286,12 +12272,8 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/phoron) "EK" = ( -/obj/machinery/portable_atmospherics/canister/empty, -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/camera/network/hangar{ - c_tag = "Atmospheric Storage"; - dir = 8 - }, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/tiled/dark, /area/quartermaster/expedition/atmos) "EL" = ( @@ -12304,7 +12286,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "EN" = ( -/obj/effect/shuttle_landmark/merc/hanger{ +/obj/shuttle_landmark/merc/hanger{ name = "5th Deck, Aft Starboard" }, /turf/space, @@ -12339,12 +12321,12 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/equipment) "Fe" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /obj/structure/sign/solgov, /turf/simulated/wall/titanium, /area/exploration_shuttle/crew) "Ff" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/binary/pump{ dir = 1 }, @@ -12384,7 +12366,7 @@ dir = 2; icon_state = "pipe-c" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 6; icon_state = "warning" }, @@ -12395,8 +12377,8 @@ dir = 1 }, /obj/machinery/chemical_dispenser/full, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, @@ -12410,7 +12392,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/fore) "Fx" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/cockpit) "Fy" = ( @@ -12443,16 +12425,12 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftstarboard) "FS" = ( -/obj/effect/shuttle_landmark/skipjack/hanger{ +/obj/shuttle_landmark/skipjack/hanger{ name = "5th Deck, Starboard" }, /turf/space, /area/space) "FU" = ( -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Hallway Aft"; - dir = 1 - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1; level = 2 @@ -12495,7 +12473,7 @@ /obj/machinery/door/window/southright{ name = "Test Chamber" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/cyan{ d1 = 1; @@ -12588,7 +12566,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "Gw" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 4; @@ -12597,8 +12575,8 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "Gx" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, -/obj/effect/paint/silver, +/obj/wallframe_spawn/reinforced_phoron/titanium, +/obj/paint/silver, /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell3) "Gy" = ( @@ -12649,7 +12627,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/equipment) "GL" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -12657,11 +12635,11 @@ name = "Petrov Blast Shutters"; opacity = 0 }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/rnd) "GM" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell3) "GO" = ( @@ -12738,12 +12716,12 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/hallwaya) "GX" = ( -/obj/structure/bed/chair/padded/red, /obj/structure/cable/cyan{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/structure/bed/chair/padded/purple, /turf/simulated/floor/lino, /area/shuttle/petrov/rd) "Ha" = ( @@ -12779,7 +12757,7 @@ dir = 4; pixel_x = 26 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/light{ dir = 4 }, @@ -12789,7 +12767,7 @@ /turf/simulated/floor/lino, /area/shuttle/petrov/rd) "Hc" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/power/emitter{ desc = "A massive, heavy-duty industrial laser. This design is a fixed installation, capable of shooting in only one direction. It has a label on it reading 'SRV Petrov Analysis Lab.'"; name = "emitter (Petrov)"; @@ -12831,15 +12809,15 @@ /obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup{ start_pressure = 4769 }, -/obj/effect/floor_decal/industrial/outline/orange, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, /turf/simulated/floor/tiled/dark, /area/quartermaster/expedition/atmos) "Ho" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -12868,6 +12846,10 @@ dir = 1; pixel_y = -24 }, +/obj/machinery/camera/network/research{ + c_tag = "Petrov - Hallway Aft"; + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/shuttle/petrov/hallwaya) "Hv" = ( @@ -12896,7 +12878,7 @@ pixel_x = 2; pixel_y = 3 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/rnd) "Hy" = ( @@ -12944,7 +12926,7 @@ pixel_x = -24 }, /obj/item/stool/padded, -/obj/effect/floor_decal/corner/purple/half{ +/obj/floor_decal/corner/purple/half{ dir = 8 }, /turf/simulated/floor/tiled/dark/monotile, @@ -12972,7 +12954,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "HM" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftstarboard) @@ -13022,7 +13004,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftport) "HU" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/cable/cyan{ d1 = 4; d2 = 8; @@ -13039,7 +13021,7 @@ /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell2) "HX" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -13049,7 +13031,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/toxins) "HY" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -13144,7 +13126,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "It" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/cell1) "Iu" = ( @@ -13165,9 +13147,6 @@ /area/shuttle/petrov/equipment) "IB" = ( /obj/machinery/disposal, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Fabrication" - }, /obj/machinery/light_switch{ pixel_x = -6; pixel_y = 24 @@ -13176,7 +13155,7 @@ dir = 8; pixel_x = -24 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -13184,7 +13163,7 @@ /area/shuttle/petrov/rnd) "IC" = ( /obj/machinery/suspension_gen, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/equipment) "IF" = ( @@ -13227,7 +13206,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "IO" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/light/spot{ dir = 4 }, @@ -13250,7 +13229,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/phoron) "IS" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /obj/structure/sign/solgov, /turf/simulated/wall/titanium, /area/exploration_shuttle/fuel) @@ -13270,7 +13249,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftport) "IW" = ( -/obj/effect/shuttle_landmark/ert/hanger{ +/obj/shuttle_landmark/ert/hanger{ name = "5th Deck, Aft Port" }, /turf/space, @@ -13283,7 +13262,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/phoron) "Jc" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/fore) @@ -13293,12 +13272,12 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "Jh" = ( /obj/structure/sign/warning/deathsposal, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/maint) "Ji" = ( @@ -13314,21 +13293,23 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/toxins) "Jk" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/reinforced, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/cockpit) "Jl" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/ocp_wall, /area/shuttle/petrov/cell1) "Jn" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/closet/hydrant{ pixel_x = -32 }, @@ -13385,7 +13366,7 @@ /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ id_tag = "petrov_shuttle_pump" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/light/small{ @@ -13506,9 +13487,9 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/equipment) "JP" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/isolation) "JS" = ( @@ -13522,7 +13503,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -13535,7 +13516,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/hallwaya) "JX" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -13568,12 +13549,18 @@ name = "Petrov Blast Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "rd_windows" }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/rd) +"Kf" = ( +/obj/machinery/drone_pad{ + initial_id_tag = "torch_transport" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/quartermaster/hangar) "Kh" = ( /obj/structure/table/standard, /obj/item/folder/nt, @@ -13584,11 +13571,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/rnd) "Ki" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Hallway Fore"; - dir = 1 - }, +/obj/floor_decal/industrial/warning/fulltile, /obj/machinery/alarm{ dir = 1; pixel_y = -22 @@ -13617,9 +13600,6 @@ /turf/simulated/floor/tiled/dark/monotile, /area/shuttle/petrov/custodial) "Ko" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 4 - }, /obj/machinery/firealarm{ pixel_y = 24 }, @@ -13627,11 +13607,12 @@ dir = 4; pixel_x = -21 }, +/obj/machinery/recharge_station, /turf/simulated/floor/tiled/techfloor, /area/guppy_hangar/start) "Kr" = ( /obj/structure/closet/secure_closet/scientist_torch, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light{ dir = 4 }, @@ -13641,7 +13622,9 @@ /obj/structure/shuttle/engine/propulsion{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/custodial) "Ku" = ( /obj/structure/cable/cyan{ @@ -13661,7 +13644,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/eva) "KA" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ @@ -13767,7 +13750,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftstarboard) "KY" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, @@ -13794,7 +13777,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "Ld" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -13841,8 +13824,8 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/hallwaya) "Li" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/silver, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/shuttle/petrov/phoron) @@ -13911,7 +13894,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "Lt" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/rnd) "Lu" = ( @@ -13934,7 +13917,7 @@ /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell3) "LA" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/rd) "LB" = ( @@ -13959,7 +13942,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/petrov/control) "LE" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -13984,7 +13967,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/ocp_wall, /area/shuttle/petrov/toxins) "LI" = ( @@ -14009,10 +13992,12 @@ /obj/structure/shuttle/engine/propulsion{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/isolation) "LN" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/equipment) "LP" = ( @@ -14045,13 +14030,15 @@ /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 9 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/toxins) "LW" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "rd_windows" }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/rd) "LX" = ( @@ -14086,7 +14073,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftport) "Mg" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/scientist_torch, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/hallwaya) @@ -14152,10 +14139,12 @@ /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell1) "Mr" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/reinforced, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/control) "Mt" = ( /obj/structure/handrail{ @@ -14206,12 +14195,8 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "Mz" = ( -/obj/structure/stasis_cage, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Equipment"; - dir = 4 - }, +/obj/machinery/stasis_cage, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/equipment) "MB" = ( @@ -14223,11 +14208,11 @@ name = "Petrov Biohazard Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/hallwaya) "MC" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -14247,7 +14232,7 @@ /area/maintenance/fifthdeck/aftstarboard) "MD" = ( /obj/machinery/hologram/holopad/longrange, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/shuttle/petrov/cockpit) "ME" = ( @@ -14265,7 +14250,7 @@ id_tag = "petrov_shuttle_outer"; name = "Petrov Exterior Access" }, -/obj/effect/shuttle_landmark/petrov/start, +/obj/shuttle_landmark/petrov/start, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/petrov/hallwaya) "MN" = ( @@ -14328,12 +14313,12 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/equipment) "Na" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/canister/empty/oxygen, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fifthdeck/aftstarboard) "Nb" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular{ density = 0; dir = 4; @@ -14342,7 +14327,7 @@ name = "Petrov Blast Shutters"; opacity = 0 }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/cockpit) "Ne" = ( @@ -14354,9 +14339,9 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/analysis) "Ng" = ( -/obj/effect/wallframe_spawn/reinforced_phoron/titanium, +/obj/wallframe_spawn/reinforced_phoron/titanium, /obj/machinery/door/firedoor, -/obj/effect/paint/silver, +/obj/paint/silver, /obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/reinforced, /area/shuttle/petrov/phoron) @@ -14396,7 +14381,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/shuttle/petrov/control) "Np" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftport) "Nq" = ( @@ -14406,7 +14391,7 @@ /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell1) "Nr" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /obj/structure/sign/solgov, /turf/simulated/wall/titanium, /area/exploration_shuttle/atmos) @@ -14482,10 +14467,10 @@ name = "Petrov Blast Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "rcheckinner_windows" }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/control) "NF" = ( @@ -14523,7 +14508,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/vacant/bar) "NO" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "rcheckinner_windows" }, /obj/machinery/door/blast/regular{ @@ -14534,7 +14519,7 @@ name = "Petrov Blast Shutters"; opacity = 0 }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/control) "NP" = ( @@ -14546,7 +14531,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/equipment) "NS" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -14554,7 +14539,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/rnd) "NW" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/toxins) "NX" = ( @@ -14563,6 +14548,9 @@ tag_south = 3; tag_west = 1 }, +/obj/machinery/camera/network/research{ + c_tag = "Petrov - Anomalies Aft" + }, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/isolation) "NY" = ( @@ -14582,7 +14570,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/toxins) "Od" = ( @@ -14633,7 +14621,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/hallwaya) "Oh" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/disposaloutlet{ @@ -14642,14 +14630,16 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/toxins) "Oi" = ( /obj/machinery/atmospherics/binary/pump, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/isolation) "Ol" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -14731,7 +14721,7 @@ "OM" = ( /obj/machinery/atmospherics/portables_connector, /obj/machinery/portable_atmospherics/canister/empty, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/newscaster{ pixel_y = 32 }, @@ -14753,7 +14743,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/cockpit) "OO" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/r_n_d/circuit_imprinter, /obj/item/reagent_containers/glass/beaker/sulphuric, /obj/structure/window/reinforced{ @@ -14797,7 +14787,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/quartermaster/exploration) "OY" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -14822,10 +14812,12 @@ /turf/simulated/floor/tiled, /area/quartermaster/exploration) "Pe" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/analysis) "Pm" = ( /obj/structure/cable/cyan{ @@ -14873,17 +14865,13 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Anomaly Fore"; - dir = 4 - }, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/isolation) "Pt" = ( /obj/structure/sign/warning/airlock{ dir = 8 }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/hallwaya) "Pv" = ( @@ -14896,7 +14884,7 @@ dir = 1; pixel_y = -4 }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/hallway/primary/fifthdeck/aft) "Px" = ( @@ -14922,18 +14910,20 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/shuttle/petrov/maint) "PE" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/toxins) "PK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -14990,7 +14980,7 @@ /area/vacant/bar) "Qe" = ( /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /obj/machinery/alarm{ pixel_y = 23; req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) @@ -15014,7 +15004,7 @@ /area/maintenance/fifthdeck/aftstarboard) "Qi" = ( /obj/machinery/atmospherics/pipe/simple/visible, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/ocp_wall, /area/shuttle/petrov/toxins) "Qj" = ( @@ -15036,7 +15026,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/isolation) "Qm" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/cell2) "Qn" = ( @@ -15064,10 +15054,6 @@ pixel_x = -5; pixel_y = -3 }, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Security"; - dir = 4 - }, /obj/machinery/light{ dir = 8 }, @@ -15097,7 +15083,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/hallwaya) "Qr" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -15105,7 +15091,7 @@ name = "Petrov Blast Shutters"; opacity = 0 }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/equipment) "Qz" = ( @@ -15126,7 +15112,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/hallwaya) "QA" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/tiled/dark, @@ -15198,7 +15184,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/equipment) "QL" = ( -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/blast/regular{ id_tag = "auxbar"; name = "Blast Shutters" @@ -15336,7 +15322,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/hallwaya) "Rj" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/largecrate, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, @@ -15344,8 +15330,10 @@ /turf/simulated/floor/tiled/techmaint, /area/maintenance/fifthdeck/fore) "Rn" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/rnd) "Rp" = ( /obj/machinery/atmospherics/pipe/simple/visible{ @@ -15379,7 +15367,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/isolation) "Rt" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/ocp_wall, /area/shuttle/petrov/toxins) "Rv" = ( @@ -15410,7 +15398,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "Rz" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/cable/cyan{ @@ -15454,12 +15442,12 @@ /obj/machinery/door/window/southright{ name = "Test Chamber" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell2) "RN" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/artifact_scanpad, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/analysis) @@ -15467,11 +15455,11 @@ /turf/simulated/wall/r_wall/hull, /area/vacant/infirmary) "RX" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell2) "RZ" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/table/standard, @@ -15491,10 +15479,6 @@ pixel_x = 6; pixel_y = 6 }, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Analysis"; - dir = 4 - }, /obj/structure/cable/cyan{ d2 = 4; icon_state = "0-4" @@ -15514,7 +15498,7 @@ /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell2) "Sc" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -15551,7 +15535,7 @@ /area/shuttle/petrov/isolation) "So" = ( /obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/atmospherics/portables_connector, /turf/simulated/floor/tiled/techfloor, /area/shuttle/petrov/maint) @@ -15559,7 +15543,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/structure/sign/warning/nosmoking_1{ dir = 4; pixel_x = -32 @@ -15567,7 +15551,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/toxins) "Sr" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/structure/cable/cyan{ @@ -15604,7 +15588,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "Sy" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -15615,7 +15599,7 @@ /area/quartermaster/expedition/atmos) "Sz" = ( /obj/structure/closet/secure_closet/scientist_torch, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/equipment) "SB" = ( @@ -15629,7 +15613,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "SE" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -15757,7 +15741,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "SW" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/cyan{ d1 = 1; d2 = 4; @@ -15766,7 +15750,7 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "Tc" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/binary/pump, /obj/machinery/light{ dir = 4 @@ -15802,7 +15786,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "Tp" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -15810,7 +15794,7 @@ name = "Petrov Blast Shutters"; opacity = 0 }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/eva) "Tr" = ( @@ -15879,8 +15863,8 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "Tx" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/analysis) "TA" = ( @@ -15938,7 +15922,7 @@ icon_state = "0-4" }, /obj/structure/table/steel, -/obj/effect/floor_decal/corner/purple/half{ +/obj/floor_decal/corner/purple/half{ dir = 8 }, /obj/item/deck/cards, @@ -15955,10 +15939,10 @@ /area/shuttle/petrov/analysis) "TL" = ( /obj/machinery/camera/network/fifth_deck{ - c_tag = "Fifth Deck Hallway - Ladders"; + c_tag = "Fifth Deck - Ladders"; dir = 1 }, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 9 }, /obj/machinery/rotating_alarm/security_alarm{ @@ -15984,7 +15968,7 @@ /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell3) "TP" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -16015,7 +15999,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/hallwaya) "TS" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -16032,7 +16016,7 @@ /area/shuttle/petrov/hallwaya) "TZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/structure/handrail{ @@ -16090,7 +16074,9 @@ pump_direction = 0 }, /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/toxins) "Ur" = ( /obj/machinery/vending/generic, @@ -16118,11 +16104,11 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/isolation) "Uw" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/cell3) "Uy" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -16179,7 +16165,7 @@ /obj/item/stack/material/glass/reinforced{ amount = 30 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/storage) "UM" = ( @@ -16204,14 +16190,14 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/light{ dir = 8 }, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/toxins) "UT" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/structure/cable/cyan{ d1 = 4; d2 = 8; @@ -16250,7 +16236,7 @@ /obj/machinery/oxygen_pump{ pixel_y = 32 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ @@ -16331,7 +16317,7 @@ dir = 4; pixel_x = -24 }, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 9 }, /obj/structure/stairs/north, @@ -16351,7 +16337,7 @@ name = "Petrov Biohazard Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/structure/cable/cyan{ d1 = 4; d2 = 8; @@ -16409,7 +16395,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/item/device/radio/intercom{ @@ -16425,10 +16411,6 @@ /obj/structure/noticeboard{ pixel_y = 32 }, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Chief Science Officer"; - dir = 4 - }, /obj/machinery/light{ dir = 8 }, @@ -16438,6 +16420,10 @@ /obj/structure/closet/hydrant{ pixel_x = -32 }, +/obj/machinery/camera/network/fifth_deck{ + c_tag = "Hangar - Midships Port"; + dir = 1 + }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) "VO" = ( @@ -16458,10 +16444,12 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/eva) "VP" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/isolation) "VT" = ( /turf/simulated/floor/lino, @@ -16477,7 +16465,7 @@ /area/shuttle/petrov/eva) "VV" = ( /obj/structure/closet/secure_closet/scientist_torch, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/newscaster{ pixel_y = 32 }, @@ -16509,7 +16497,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "VZ" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/disposalpipe/up{ dir = 4 }, @@ -16519,7 +16507,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftport) "Wb" = ( -/obj/effect/shuttle_landmark/ninja/hanger{ +/obj/shuttle_landmark/ninja/hanger{ name = "5th Deck, Fore" }, /turf/space, @@ -16539,7 +16527,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "Wl" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/isolation) "Wn" = ( @@ -16635,12 +16623,13 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "WG" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/phoron) "WH" = ( /obj/machinery/suit_storage_unit/mining, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/brown/half, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/expedition/eva) "WO" = ( @@ -16662,7 +16651,7 @@ /area/quartermaster/expedition) "Xa" = ( /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/maint) "Xb" = ( @@ -16717,7 +16706,7 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/fore) "Xi" = ( -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "Xk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -16828,7 +16817,7 @@ /turf/simulated/wall/prepainted, /area/hallway/primary/fifthdeck/aft) "XG" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/ocp_wall, /area/shuttle/petrov/phoron) "XH" = ( @@ -16862,7 +16851,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/structure/handrail{ @@ -16961,11 +16950,11 @@ /obj/item/stack/material/plasteel{ amount = 20 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/storage) "Yk" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/titanium, /area/shuttle/petrov/phoron) "Ym" = ( @@ -16981,7 +16970,7 @@ pixel_x = -10; pixel_y = -21 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -17010,10 +16999,12 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/toxins) "Yr" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/shuttle/petrov/eva) "Ys" = ( /obj/machinery/door/airlock/research{ @@ -17037,7 +17028,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/toxins) "Yu" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -17078,7 +17069,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/hallwaya) "YE" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -17175,11 +17166,7 @@ /obj/structure/hygiene/shower{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/petrov{ - c_tag = "Petrov - Entry"; - dir = 4 - }, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/embedded_controller/radio/airlock/docking_port{ dir = 4; @@ -17235,7 +17222,7 @@ dir = 1; id_tag = "petrov_shuttle_pump" }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/structure/handrail{ dir = 1 }, @@ -17256,7 +17243,7 @@ /area/quartermaster/expedition/eva) "Ze" = ( /obj/machinery/computer/modular/preset/civilian, -/obj/effect/floor_decal/corner/purple/half{ +/obj/floor_decal/corner/purple/half{ dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, @@ -17278,7 +17265,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "Zn" = ( @@ -17293,13 +17280,13 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, /area/guppy_hangar/start) "Zo" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -17322,7 +17309,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/fifthdeck/aft) "Zp" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/computer/air_control{ @@ -17360,7 +17347,7 @@ dir = 1; id_tag = "petrov_shuttle_pump" }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/structure/handrail{ dir = 1 }, @@ -17372,7 +17359,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/equipment) "Zy" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell1) "ZA" = ( @@ -17408,14 +17395,14 @@ /turf/simulated/floor/plating, /area/maintenance/fifthdeck/aftstarboard) "ZF" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/monotile, /area/quartermaster/exploration) "ZG" = ( /turf/simulated/wall/r_wall/hull, /area/maintenance/fifthdeck/aftstarboard) "ZJ" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -17423,7 +17410,7 @@ name = "Petrov Blast Shutters"; opacity = 0 }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/petrov/analysis) "ZL" = ( @@ -17476,8 +17463,8 @@ dir = 8 }, /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -32947,12 +32934,12 @@ ev aX aX aX -oM -kU aX +kU aX aX aX +oM lQ lM jZ @@ -34139,7 +34126,7 @@ EK tV lz lY -ir +UH ih ee aA @@ -34350,9 +34337,9 @@ by bg ag cw -cw -dj AW +dj +cw cw cw ez @@ -34366,7 +34353,7 @@ np np yp fS -oO +aX gO gO gO @@ -36589,7 +36576,7 @@ Ho Ho Ho hT -oO +aX aJ CX sk @@ -37195,7 +37182,7 @@ bi bi bi fS -aX +Kf aJ mU wj @@ -37397,7 +37384,7 @@ bi bi bi fS -aX +Kf aJ mU vO @@ -39621,7 +39608,7 @@ hR iG mD jl -gP +jl Em uh pt @@ -41004,7 +40991,7 @@ aa ZG ZG GQ -sW +ZA hc tg tn @@ -41812,7 +41799,7 @@ aa ZG ZG GQ -sW +ZA sZ ti te @@ -42843,7 +42830,7 @@ MN LW eW GX -AS +Du PR wu LA @@ -44453,7 +44440,7 @@ RZ xr bb bb -BM +gP Wn Yk Yk diff --git a/maps/torch/torch2_deck4.dmm b/maps/torch/torch2_deck4.dmm index 86f2fbf6cdcaf..c220b002dcc47 100644 --- a/maps/torch/torch2_deck4.dmm +++ b/maps/torch/torch2_deck4.dmm @@ -4,25 +4,25 @@ /area/space) "ab" = ( /obj/structure/table/standard, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled, /area/crew_quarters/diplomatic_office) "ac" = ( -/obj/effect/shuttle_landmark/skipjack/deck5{ +/obj/shuttle_landmark/skipjack/deck5{ name = "4th Deck, Aft Starboard" }, /turf/space, /area/space) "ad" = ( -/obj/effect/shuttle_landmark/torch/deck5/guppy{ +/obj/shuttle_landmark/torch/deck5/guppy{ name = "4th Deck, Starboard" }, /turf/space, /area/space) "ae" = ( -/obj/effect/shuttle_landmark/merc/deck5{ +/obj/shuttle_landmark/merc/deck5{ name = "4th Deck, Fore Starboard" }, /turf/space, @@ -31,7 +31,7 @@ /turf/simulated/wall/prepainted, /area/crew_quarters/galley) "ag" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/simulated/floor/tiled/dark, @@ -40,7 +40,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/maintenance/fourthdeck/aft) "ai" = ( -/obj/effect/shuttle_landmark/scavver_gantry/torch/three, +/obj/shuttle_landmark/scavver_gantry/torch/three, /turf/space, /area/space) "aj" = ( @@ -63,7 +63,11 @@ /turf/simulated/floor/tiled/monotile, /area/maintenance/fourthdeck/forestarboard) "ao" = ( -/turf/simulated/floor/tiled/dark/monotile, +/obj/structure/ladder/up, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/lino, /area/crew_quarters/galley) "ap" = ( /obj/machinery/door/firedoor, @@ -71,7 +75,10 @@ name = "Galley"; req_access = newlist() }, -/turf/simulated/floor/tiled/dark/monotile, +/obj/floor_decal/spline/fancy/wood/cee{ + dir = 4 + }, +/turf/simulated/floor/lino, /area/command/captainmess) "aq" = ( /turf/simulated/wall/r_wall/hull, @@ -80,8 +87,13 @@ /turf/simulated/wall/r_titanium, /area/shuttle/escape_pod6/station) "at" = ( -/obj/structure/stairs/south, -/turf/simulated/floor/tiled/dark/monotile, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/structure/table/woodentable/walnut, +/obj/item/storage/fancy/smokable/cigar, +/obj/item/storage/fancy/matches/matchbox, +/turf/simulated/floor/lino, /area/crew_quarters/galley) "au" = ( /obj/machinery/door/firedoor, @@ -98,8 +110,10 @@ /turf/simulated/floor/tiled, /area/quartermaster/deckchief) "av" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/fourthdeck/port) "aw" = ( /turf/simulated/wall/r_titanium, @@ -164,11 +178,11 @@ "aD" = ( /obj/machinery/atmospherics/pipe/zpipe/up/supply, /obj/machinery/atmospherics/pipe/zpipe/up/scrubbers, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) "aF" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 6; icon_state = "warning" }, @@ -176,7 +190,7 @@ /area/maintenance/fourthdeck/starboard) "aG" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/starboard) "aH" = ( @@ -184,19 +198,19 @@ /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/starboard) "aI" = ( /obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light/small{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/starboard) "aJ" = ( -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) "aK" = ( @@ -248,7 +262,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -289,12 +303,12 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) "bi" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod6, -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/shuttle_landmark/escape_pod/start/pod6, +/obj/wallframe_spawn/reinforced/titanium, /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod6/station) "bk" = ( -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 8 }, /obj/structure/cable/green{ @@ -349,7 +363,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/fourthdeck/aft) "bn" = ( -/obj/effect/shuttle_landmark/torch/deck5/aquila{ +/obj/shuttle_landmark/torch/deck5/aquila{ name = "4th Deck, Aft" }, /turf/space, @@ -358,14 +372,11 @@ /turf/simulated/wall/prepainted, /area/quartermaster/hangar/catwalks_starboard) "bt" = ( -/obj/machinery/door/airlock/civilian{ - name = "Emergency Storage" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 }, -/turf/simulated/floor/tiled/techfloor/grid, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "bu" = ( /obj/structure/railing/mapped, @@ -387,7 +398,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "bx" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/machinery/newscaster{ @@ -441,7 +452,7 @@ /turf/simulated/floor/tiled/dark, /area/tcommsat/chamber) "bE" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/aft) "bF" = ( @@ -474,6 +485,24 @@ }, /turf/simulated/floor/lino, /area/tcommsat/computer) +"bH" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) "bI" = ( /obj/structure/catwalk, /obj/structure/cable/green{ @@ -497,12 +526,12 @@ /turf/simulated/floor/tiled/dark, /area/hallway/primary/fourthdeck/aft) "bK" = ( -/obj/effect/shuttle_landmark/icgnv_hound/dock, -/obj/effect/shuttle_landmark/sfv_arbiter/dock, +/obj/shuttle_landmark/icgnv_hound/dock, +/obj/shuttle_landmark/sfv_arbiter/dock, /turf/space, /area/space) "bM" = ( -/obj/effect/shuttle_landmark/merchant/out, +/obj/shuttle_landmark/merchant/out, /turf/space, /area/space) "bN" = ( @@ -519,36 +548,44 @@ /turf/simulated/floor/tiled/monotile, /area/maintenance/fourthdeck/forestarboard) "bT" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "bU" = ( /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod7/station) "bV" = ( -/obj/structure/catwalk, /obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 + dir = 4 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" + dir = 4 }, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "bX" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/fourthdeck/starboard) "bY" = ( /obj/structure/catwalk, @@ -603,14 +640,14 @@ /turf/simulated/open, /area/maintenance/fourthdeck/starboard) "ce" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/structure/railing/mapped{ dir = 4; icon_state = "railing0-1" }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 8 }, /turf/simulated/floor/tiled/steel_grid, @@ -630,7 +667,7 @@ /turf/simulated/floor/tiled/dark, /area/tcommsat/chamber) "cj" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /obj/machinery/rotating_alarm/security_alarm{ @@ -646,24 +683,17 @@ /turf/simulated/floor/lino, /area/tcommsat/computer) "cn" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + name = "Emergency Storage" }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/fourthdeck/forestarboard) "co" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/fourthdeck/aft) @@ -682,7 +712,7 @@ /turf/simulated/floor/crystal, /area/crew_quarters/adherent) "ct" = ( -/obj/effect/floor_decal/corner/brown, +/obj/floor_decal/corner/brown, /obj/machinery/light, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/center) @@ -776,11 +806,11 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/walnut, /area/command/captainmess) "cF" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -847,7 +877,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/tcommsat/chamber) "cU" = ( @@ -882,7 +912,7 @@ /area/tcommsat/computer) "cY" = ( /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -917,7 +947,7 @@ /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ id_tag = "merchant_shuttle_station_pump" }, -/obj/effect/floor_decal/industrial/warning/full, +/obj/floor_decal/industrial/warning/full, /obj/machinery/airlock_sensor{ frequency = 1380; id_tag = "merchant_shuttle_station_sensor"; @@ -970,7 +1000,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/structure/disposalpipe/segment, @@ -986,7 +1016,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/starboard) "dt" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/cable/green{ @@ -1030,7 +1060,7 @@ icon_state = "0-2" }, /obj/structure/cable/cyan, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/tcommsat/chamber) "dA" = ( @@ -1063,6 +1093,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head/deck4) "dI" = ( @@ -1124,16 +1155,16 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/walnut, /area/command/captainmess) "dS" = ( /turf/simulated/floor/carpet/blue2, /area/command/captainmess) "dT" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/machinery/light{ @@ -1151,7 +1182,7 @@ /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 }, @@ -1163,7 +1194,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/starboard) "dZ" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -1218,7 +1249,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/starboard) "ei" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "bottom-right" }, /turf/simulated/floor/tiled, @@ -1232,10 +1263,10 @@ dir = 8; icon_state = "tube1" }, -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "el" = ( @@ -1349,16 +1380,12 @@ /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod7/station) "eA" = ( -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Mess Hall - Officer's Mess"; - dir = 4 - }, /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/walnut, /area/command/captainmess) "eB" = ( /obj/structure/bed/chair/wood/wings/mahogany{ @@ -1396,7 +1423,7 @@ dir = 2; icon_state = "pipe-c" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/plating, @@ -1465,14 +1492,10 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Starboard Escape Pods"; - dir = 4 - }, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -1486,7 +1509,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/dark/monotile, /area/hallway/primary/fourthdeck/aft) @@ -1498,6 +1521,17 @@ /obj/item/book/manual/nt_regs, /turf/simulated/floor/wood, /area/crew_quarters/lounge) +"fb" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/table/woodentable/walnut, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/flora/pottedplantsmall/leaf, +/turf/simulated/floor/lino, +/area/crew_quarters/galley) "fc" = ( /obj/structure/hygiene/sink{ pixel_z = -14 @@ -1508,10 +1542,10 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head/deck4) "fd" = ( -/turf/simulated/wall/mahogany, +/turf/simulated/wall/walnut, /area/command/captainmess) "fh" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/up, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/techfloor, @@ -1526,13 +1560,13 @@ name = "plastic table frame" }, /obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Fore Starboard Docking Access"; + c_tag = "Fourth Deck - Fore Starboard Airlock"; dir = 4 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 1 }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 8 }, /obj/item/device/radio/intercom{ @@ -1547,7 +1581,7 @@ dir = 4; pixel_x = 24 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "fl" = ( @@ -1560,7 +1594,7 @@ pixel_y = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /turf/simulated/floor/tiled, @@ -1580,7 +1614,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/fourthdeck/forestarboard) "fr" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -1590,7 +1624,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/escape_pod6/station) "fs" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -1598,7 +1632,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/escape_pod6/station) "ft" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -1634,7 +1668,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "fw" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -1648,7 +1682,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/escape_pod7/station) "fx" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -1656,7 +1690,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/escape_pod7/station) "fy" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -1717,7 +1751,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/tcommsat/computer) "fK" = ( -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/structure/disposalpipe/segment, /obj/structure/closet/hydrant{ @@ -1729,7 +1763,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head/deck4) "fP" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -1765,13 +1799,13 @@ /obj/random/tech_supply, /obj/random/tech_supply, /obj/random/tool, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/techfloor/grid, /area/storage/auxillary/starboard) "fZ" = ( /obj/structure/closet/crate, /obj/random/toy, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/techfloor/grid, /area/storage/auxillary/starboard) "ga" = ( @@ -1783,10 +1817,10 @@ pixel_x = -25 }, /obj/structure/flora/pottedplant/large, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 1 }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 8 }, /turf/simulated/floor/tiled/steel_grid, @@ -1796,26 +1830,26 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/rotating_alarm/security_alarm{ dir = 8 }, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "gc" = ( -/obj/effect/floor_decal/corner/mauve/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/mauve/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/pathfinder, /turf/simulated/floor/tiled/monotile, /area/command/pathfinder) "gd" = ( -/obj/effect/floor_decal/corner/mauve/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/mauve/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/computer/ship/navigation, /turf/simulated/floor/tiled/monotile, /area/command/pathfinder) "gf" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/suit_cycler/engineering/alt, /turf/simulated/floor/tiled/dark/monotile, /area/eva) @@ -1826,7 +1860,7 @@ "gh" = ( /obj/structure/closet/crate/medical, /obj/random/medical, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light/small{ dir = 4; icon_state = "bulb1" @@ -1894,7 +1928,7 @@ /obj/machinery/alarm{ pixel_y = 24 }, -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -1906,7 +1940,7 @@ pixel_x = -24 }, /obj/structure/cable/green, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/walnut, /area/command/captainmess) "gs" = ( /obj/structure/table/woodentable/walnut, @@ -1963,14 +1997,14 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/dark/monotile, /area/hallway/primary/fourthdeck/aft) "gM" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/aft) @@ -1982,7 +2016,7 @@ /turf/simulated/open, /area/quartermaster/hangar/catwalks_port) "gW" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "center-right" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -2014,25 +2048,25 @@ /area/maintenance/fourthdeck/port) "gY" = ( /obj/structure/closet/l3closet/general, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/storage/auxillary/starboard) "gZ" = ( /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 9 }, /turf/simulated/floor/tiled/steel_grid, /area/storage/auxillary/starboard) "ha" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/light/small{ dir = 4; icon_state = "bulb1" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/button/blast_door{ @@ -2044,13 +2078,13 @@ /turf/simulated/floor/tiled/steel_grid, /area/storage/auxillary/starboard) "hb" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 1 }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -2066,11 +2100,11 @@ "hc" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "hd" = ( -/obj/effect/floor_decal/corner/mauve/mono, +/obj/floor_decal/corner/mauve/mono, /obj/machinery/power/apc{ dir = 8; name = "west bump"; @@ -2083,7 +2117,7 @@ /turf/simulated/floor/tiled/monotile, /area/command/pathfinder) "he" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 5 }, /obj/structure/cable/green{ @@ -2094,7 +2128,7 @@ /turf/simulated/floor/tiled, /area/command/pathfinder) "hf" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 5 }, /obj/machinery/newscaster{ @@ -2122,7 +2156,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /turf/simulated/floor/tiled, @@ -2133,7 +2167,7 @@ /area/quartermaster/hangar/catwalks_starboard) "hi" = ( /obj/structure/disposalpipe/up, -/obj/effect/floor_decal/industrial/warning/full, +/obj/floor_decal/industrial/warning/full, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "hj" = ( @@ -2199,10 +2233,10 @@ /turf/simulated/floor/carpet/blue2, /area/command/captainmess) "hp" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 10 }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ +/obj/floor_decal/spline/fancy/wood/corner{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2214,10 +2248,10 @@ /turf/simulated/floor/lino, /area/command/captainmess) "hq" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, -/obj/effect/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -2264,7 +2298,7 @@ name = "Hangar Deck Hallway Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "hw" = ( @@ -2304,7 +2338,7 @@ /turf/simulated/open, /area/maintenance/fourthdeck/starboard) "hE" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/storage/primary) "hO" = ( @@ -2333,7 +2367,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -2345,20 +2379,20 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/storage/auxillary/starboard) "hR" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, /turf/simulated/floor/tiled/steel_grid, /area/storage/auxillary/starboard) "hS" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/blast/shutters{ dir = 4; id_tag = "starboardaux_warehouse"; @@ -2367,13 +2401,13 @@ /turf/simulated/floor/tiled/steel_grid, /area/storage/auxillary/starboard) "hT" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 1 }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -2381,11 +2415,11 @@ /area/hallway/primary/fourthdeck/fore) "hU" = ( /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "hV" = ( -/obj/effect/floor_decal/corner/mauve/half{ +/obj/floor_decal/corner/mauve/half{ dir = 8 }, /obj/machinery/photocopier, @@ -2439,7 +2473,7 @@ name = "east bump"; pixel_x = 24 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/disposalpipe/junction{ dir = 1; icon_state = "pipe-j2" @@ -2462,7 +2496,7 @@ /turf/simulated/floor/tiled/techmaint, /area/maintenance/fourthdeck/forestarboard) "ie" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -2479,7 +2513,7 @@ /area/shuttle/escape_pod7/station) "ii" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 8 }, /turf/simulated/floor/tiled/monotile, @@ -2488,13 +2522,13 @@ /obj/machinery/light{ dir = 8 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/walnut, /area/command/captainmess) "in" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, -/obj/effect/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood, /obj/machinery/alarm{ dir = 8; pixel_x = 25 @@ -2502,7 +2536,7 @@ /turf/simulated/floor/lino, /area/command/captainmess) "io" = ( -/obj/effect/floor_decal/corner/brown/three_quarters{ +/obj/floor_decal/corner/brown/three_quarters{ dir = 8 }, /obj/machinery/light_switch{ @@ -2516,7 +2550,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) "iy" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/cable{ @@ -2586,7 +2620,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) "iQ" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, /turf/simulated/floor/tiled, @@ -2595,7 +2629,7 @@ /turf/simulated/wall/walnut, /area/crew_quarters/lounge) "iT" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/structure/sign/warning/pods/east{ @@ -2626,7 +2660,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -2641,7 +2675,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/steel_grid, @@ -2659,7 +2693,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/fourthdeck/fore) "jf" = ( -/obj/effect/floor_decal/corner/mauve/half{ +/obj/floor_decal/corner/mauve/half{ dir = 8 }, /obj/machinery/papershredder, @@ -2669,7 +2703,7 @@ /turf/simulated/floor/tiled/monotile, /area/command/pathfinder) "jg" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad/longrange, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -2681,7 +2715,7 @@ dir = 2; icon_state = "pipe-c" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -2691,7 +2725,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 4 }, /turf/simulated/floor/tiled, @@ -2713,7 +2747,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "jj" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/up, /obj/structure/disposalpipe/segment{ dir = 8; @@ -2723,7 +2757,7 @@ /area/maintenance/fourthdeck/forestarboard) "jn" = ( /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ +/obj/wallframe_spawn/reinforced/polarized/no_grille{ id = "offmess_windows" }, /turf/simulated/floor/plating, @@ -2781,7 +2815,7 @@ pixel_x = 26; pixel_y = 28 }, -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -2796,7 +2830,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) @@ -2805,7 +2839,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "jW" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -2821,7 +2855,7 @@ /area/hallway/primary/fourthdeck/aft) "jX" = ( /obj/machinery/door/blast/regular/escape_pod, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/maintenance/fourthdeck/port) "jY" = ( /obj/machinery/door/firedoor, @@ -2835,7 +2869,7 @@ dir = 1; id_tag = "eva_airlock_pump" }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/machinery/airlock_sensor{ frequency = 1380; id_tag = "eva_airlock_sensor"; @@ -2852,10 +2886,6 @@ /area/quartermaster/hangar/catwalks_starboard) "kc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/camera/network/command{ - c_tag = "EVA - Suit Cyclers"; - dir = 8 - }, /obj/item/device/radio/intercom{ dir = 8; pixel_x = 21 @@ -2863,7 +2893,7 @@ /turf/simulated/floor/tiled/dark, /area/eva) "kg" = ( -/obj/effect/floor_decal/corner/mauve/mono, +/obj/floor_decal/corner/mauve/mono, /obj/machinery/button/windowtint{ id = "pathfinder_office"; pixel_x = -24; @@ -2880,21 +2910,17 @@ /turf/simulated/floor/tiled/monotile, /area/command/pathfinder) "kh" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 10 }, /obj/machinery/firealarm{ dir = 1; pixel_y = -24 }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Pathfinder's Office"; - dir = 1 - }, /turf/simulated/floor/tiled, /area/command/pathfinder) "ki" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 10 }, /obj/structure/cable/green{ @@ -2959,7 +2985,7 @@ /area/tcommsat/computer) "ku" = ( /obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/fourthdeck/aft) "kw" = ( @@ -3054,7 +3080,7 @@ /obj/machinery/oxygen_pump{ pixel_y = 32 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -3086,7 +3112,7 @@ dir = 8; name = "cargo outlet" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/window/reinforced{ dir = 4 }, @@ -3095,7 +3121,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/sorting) "kT" = ( -/obj/effect/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/green{ d1 = 2; @@ -3115,13 +3141,17 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "kX" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Fourth Deck - Ladders"; + dir = 8 + }, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/fourthdeck/aft) "kZ" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack{ dir = 8 }, @@ -3151,7 +3181,7 @@ /obj/machinery/door/airlock/mining{ name = "Starboard Auxiliary Storage" }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 1 }, /turf/simulated/floor/tiled/steel_ridged, @@ -3175,8 +3205,8 @@ /obj/item/stack/material/glass{ amount = 50 }, -/obj/machinery/camera/network/command{ - c_tag = "EVA - Center"; +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Fourth Deck - EVA"; dir = 4 }, /obj/machinery/firealarm{ @@ -3220,10 +3250,10 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 4 }, /obj/structure/disposalpipe/sortjunction/flipped{ @@ -3268,7 +3298,7 @@ /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod9/station) "lt" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /obj/structure/cable{ @@ -3295,7 +3325,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head/deck4) "lw" = ( -/obj/effect/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal, /obj/machinery/washing_machine, /turf/simulated/floor/tiled/white, /area/crew_quarters/laundry) @@ -3322,10 +3352,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/machinery/alarm/server{ - req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")); - pixel_x = 22; - dir = 8 +/obj/machinery/alarm/cold{ + dir = 8; + pixel_x = 25 }, /turf/simulated/floor/tiled/dark, /area/tcommsat/chamber) @@ -3348,28 +3377,32 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/aft) "lH" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/aft) "lJ" = ( -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 8 }, /obj/machinery/rotating_alarm/security_alarm{ dir = 4 }, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Fourth Deck - Aft Port Airlock"; + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/hallway/primary/fourthdeck/aft) "lK" = ( @@ -3396,7 +3429,7 @@ /obj/machinery/rotating_alarm/security_alarm{ dir = 1 }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /turf/simulated/floor/tiled, @@ -3411,7 +3444,7 @@ /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ id_tag = "eva_airlock_pump" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -3427,10 +3460,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 1 }, /turf/simulated/floor/tiled, @@ -3439,7 +3472,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled/dark, @@ -3451,7 +3484,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled/dark, @@ -3460,11 +3493,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/machinery/camera/network/command{ - c_tag = "EVA - Storage"; - dir = 8 - }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/item/device/radio/intercom{ @@ -3483,8 +3512,8 @@ dir = 4 }, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "mf" = ( @@ -3496,7 +3525,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -3507,7 +3536,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/closet/hydrant{ @@ -3521,7 +3550,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -3544,10 +3573,10 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 4 }, /turf/simulated/floor/tiled, @@ -3568,10 +3597,10 @@ /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 4 }, /turf/simulated/floor/tiled, @@ -3583,10 +3612,10 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 4 }, /turf/simulated/floor/tiled, @@ -3600,10 +3629,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 4 }, /turf/simulated/floor/tiled, @@ -3617,12 +3646,12 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/fourthdeck/fore) "mo" = ( /obj/machinery/hologram/holopad/longrange, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -3634,7 +3663,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/structure/sign/double/solgovflag/left{ pixel_y = 32 }, @@ -3647,10 +3676,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Stairwell"; - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, @@ -3678,13 +3703,16 @@ }, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Fourth Deck Hallway - Stairs" + }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "my" = ( /obj/structure/table/standard, -/obj/effect/floor_decal/corner/mauve/half{ +/obj/floor_decal/corner/mauve/half{ dir = 4 }, /obj/item/paper_bin{ @@ -3702,7 +3730,7 @@ /obj/machinery/newscaster/security_unit{ pixel_y = -32 }, -/obj/effect/floor_decal/corner/brown/half, +/obj/floor_decal/corner/brown/half, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -3720,7 +3748,7 @@ /turf/simulated/floor/shuttle_ceiling/torch/air, /area/quartermaster/hangar/catwalks_port) "mD" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /obj/structure/disposalpipe/segment, @@ -3752,7 +3780,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/waterstore) "mK" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ +/obj/wallframe_spawn/reinforced/polarized/no_grille{ id = "diplomatic_office" }, /turf/simulated/floor/plating, @@ -3764,7 +3792,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/foreport) "mM" = ( -/obj/effect/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal, /obj/machinery/light{ dir = 8 }, @@ -3787,7 +3815,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) "mQ" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 8 }, /obj/machinery/rotating_alarm/security_alarm{ @@ -3796,7 +3824,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/hallway/primary/fourthdeck/aft) "mR" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 5 }, /obj/machinery/atmospherics/pipe/manifold/hidden{ @@ -3845,7 +3873,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "ng" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/eva) "ni" = ( @@ -3863,7 +3891,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/machinery/light{ @@ -3875,7 +3903,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -3888,11 +3916,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "nn" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ +/obj/wallframe_spawn/reinforced/polarized/no_grille{ id = "pathfinder_office" }, /turf/simulated/floor/plating, @@ -3903,8 +3931,8 @@ pixel_y = -24 }, /obj/structure/cable/green, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/white{ dir = 8 }, /turf/simulated/floor/tiled, @@ -3914,7 +3942,7 @@ dir = 1; pixel_y = -22 }, -/obj/effect/floor_decal/corner/red/half, +/obj/floor_decal/corner/red/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "nq" = ( @@ -3922,8 +3950,8 @@ dir = 1; pixel_y = -24 }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/white{ dir = 8 }, /turf/simulated/floor/tiled, @@ -3937,8 +3965,8 @@ c_tag = "Fourth Deck Hallway - Fore Starboard"; dir = 1 }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/white{ dir = 8 }, /turf/simulated/floor/tiled, @@ -3949,12 +3977,12 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "nt" = ( -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/white{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -3979,7 +4007,7 @@ name = "Hangar Deck Hallway Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "nv" = ( @@ -4003,7 +4031,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "nA" = ( @@ -4012,8 +4040,8 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/white, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/white, +/obj/floor_decal/corner/red{ dir = 4 }, /obj/structure/sign/deck/fourth{ @@ -4023,12 +4051,12 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/fore) "nD" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod7, -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/shuttle_landmark/escape_pod/start/pod7, +/obj/wallframe_spawn/reinforced/titanium, /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod7/station) "nG" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "top-left" }, /turf/simulated/floor/tiled, @@ -4060,7 +4088,7 @@ /area/hallway/primary/fourthdeck/aft) "nT" = ( /obj/random/ironing_board_structure, -/obj/effect/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal, /obj/item/device/radio/intercom{ dir = 4; pixel_x = -22 @@ -4069,10 +4097,11 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/laundry) "nU" = ( -/obj/effect/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/tiled/white, /area/crew_quarters/laundry) "nZ" = ( @@ -4091,7 +4120,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/tcommsat/chamber) "oc" = ( @@ -4117,7 +4146,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /turf/simulated/floor/tiled, @@ -4137,13 +4166,13 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/port) "on" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 8 }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -4181,7 +4210,7 @@ /turf/simulated/floor/tiled/monotile, /area/eva) "ow" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -4203,7 +4232,7 @@ "oy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/fore) "oz" = ( @@ -4214,7 +4243,7 @@ /turf/simulated/wall/prepainted, /area/teleporter/fourthdeck) "oB" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/storage/primary) "oC" = ( @@ -4232,7 +4261,7 @@ /area/tcommsat/chamber) "oE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -4254,7 +4283,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "oI" = ( @@ -4263,8 +4292,8 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/white, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/white, +/obj/floor_decal/corner/red{ dir = 4 }, /turf/simulated/floor/tiled, @@ -4281,9 +4310,9 @@ /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod9/station) "oO" = ( -/obj/effect/floor_decal/corner/mauve/mono, +/obj/floor_decal/corner/mauve/mono, /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -4297,7 +4326,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) "oV" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 4 }, /turf/simulated/floor/tiled, @@ -4322,7 +4351,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/turbolift/cargo_lift) "pf" = ( -/obj/effect/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal, /obj/machinery/power/apc{ dir = 8; name = "west bump"; @@ -4337,7 +4366,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/laundry) "pg" = ( -/obj/effect/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -4346,7 +4375,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/laundry) "pi" = ( -/obj/effect/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal, /obj/machinery/light_switch{ pixel_x = 22 }, @@ -4363,8 +4392,13 @@ /obj/random/soap, /turf/simulated/floor/tiled/white, /area/crew_quarters/laundry) +"pj" = ( +/obj/structure/table/standard, +/obj/random_multi/single_item/punitelli, +/turf/simulated/floor/tiled, +/area/crew_quarters/diplomatic_office) "pl" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/suit_storage_unit/standard_unit, /turf/simulated/floor/tiled/dark/monotile, /area/eva) @@ -4380,8 +4414,10 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head/deck4) "pp" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/fourthdeck/aft) "pr" = ( /obj/structure/table/rack, @@ -4390,14 +4426,14 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head/deck4) "pu" = ( -/obj/effect/floor_decal/corner/green/three_quarters, +/obj/floor_decal/corner/green/three_quarters, /obj/machinery/light{ dir = 8 }, /turf/simulated/floor/tiled/dark, /area/hallway/primary/fourthdeck/aft) "px" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -4414,7 +4450,7 @@ /area/command/captainmess) "pz" = ( /obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Hangar Bridge"; + c_tag = "Fourth Deck Hallway - Midships"; dir = 1 }, /turf/simulated/floor/tiled, @@ -4428,7 +4464,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "pG" = ( -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular{ density = 0; @@ -4448,7 +4484,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 8 }, /turf/simulated/floor/tiled, @@ -4456,7 +4492,7 @@ "pK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled, @@ -4467,15 +4503,15 @@ id_tag = "teleport4"; name = "Fourth Deck Teleporter Access Shutters" }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, /area/teleporter/fourthdeck) "pM" = ( /obj/machinery/tele_pad, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/teleporter/fourthdeck) "pN" = ( @@ -4486,10 +4522,10 @@ pixel_x = -6; pixel_y = 24 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -4505,9 +4541,6 @@ "pP" = ( /obj/structure/closet/crate, /obj/random/tank, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Teleporter" - }, /turf/simulated/floor/tiled/dark/monotile, /area/teleporter/fourthdeck) "pQ" = ( @@ -4560,7 +4593,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 4 }, /obj/machinery/light{ @@ -4580,7 +4613,7 @@ /turf/simulated/wall/prepainted, /area/hallway/primary/fourthdeck/center) "qa" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -4608,7 +4641,7 @@ /turf/simulated/wall/prepainted, /area/command/pathfinder) "qf" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/machinery/computer/guestpass{ @@ -4623,14 +4656,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/fourthdeck/fore) "ql" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /obj/structure/cable{ @@ -4657,7 +4690,7 @@ /turf/simulated/floor/lino, /area/tcommsat/computer) "qr" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/crew_quarters/laundry) @@ -4694,7 +4727,7 @@ /turf/simulated/floor/bluegrid, /area/tcommsat/chamber) "qz" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "bottom-left" }, /turf/simulated/floor/tiled, @@ -4711,7 +4744,7 @@ dir = 1; id_tag = "eva_airlock_pump" }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/techfloor/grid, /area/eva) "qM" = ( @@ -4726,7 +4759,7 @@ locked = 1; name = "EVA External Access" }, -/obj/effect/shuttle_landmark/scavver_gantry/torch/two, +/obj/shuttle_landmark/scavver_gantry/torch/two, /turf/simulated/floor/tiled/techfloor/grid, /area/eva) "qR" = ( @@ -4747,7 +4780,7 @@ /obj/machinery/newscaster{ pixel_x = 32 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -4758,10 +4791,10 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/teleporter/fourthdeck) "qX" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -4800,7 +4833,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/storage/primary) "rc" = ( @@ -4818,33 +4851,33 @@ dir = 4; pixel_x = -21 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "rg" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 4 }, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/center) "rh" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/center) "ri" = ( /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/center) "rj" = ( -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 4 }, /turf/simulated/floor/tiled, @@ -4853,7 +4886,7 @@ /turf/simulated/wall/prepainted, /area/crew_quarters/head/deck4) "rl" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -4867,7 +4900,7 @@ /turf/simulated/open, /area/quartermaster/hangar/catwalks_port) "rn" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack, /obj/random/tech_supply, /obj/random/tech_supply, @@ -4876,7 +4909,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/port) "ro" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/center) @@ -4927,14 +4960,14 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/port) "ru" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/aft) "rz" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/aft) "rF" = ( @@ -4963,12 +4996,12 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) "rG" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/port) "rH" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -4986,7 +5019,7 @@ name = "Powernet Sensor - Fourth Deck Subgrid"; name_tag = "Fourth Deck Subgrid" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -5004,14 +5037,14 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/center) "sd" = ( /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /obj/structure/disposalpipe/segment, /obj/structure/closet/hydrant{ pixel_x = 32 @@ -5037,7 +5070,7 @@ /area/quartermaster/sorting) "sj" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -5063,7 +5096,7 @@ dir = 1 }, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/eva) "sm" = ( @@ -5110,7 +5143,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -5135,7 +5168,7 @@ c_tag = "Fourth Deck Hallway - Primary Docking Port"; dir = 8 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, @@ -5153,7 +5186,7 @@ "ss" = ( /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark, /area/teleporter/fourthdeck) "st" = ( @@ -5174,7 +5207,7 @@ /obj/random/tech_supply, /obj/random/tech_supply, /obj/random/tech_supply, -/obj/item/stack/package_wrap/twenty_five, +/obj/item/stack/package_wrap/cargo_wrap, /obj/item/hand_labeler, /obj/item/device/destTagger, /turf/simulated/floor/tiled, @@ -5182,16 +5215,17 @@ "sv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/landmark{ +/obj/landmark{ name = "lightsout" }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/catwalk_plated, +/obj/floor_decal/industrial/outline/yellow, +/obj/catwalk_plated, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/plating, /area/storage/primary) "sw" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk, /turf/simulated/floor/tiled/monotile, /area/storage/primary) @@ -5208,7 +5242,7 @@ /obj/random/tech_supply, /obj/random/tech_supply, /obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/storage/primary) "sz" = ( @@ -5219,7 +5253,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/sortjunction{ dir = 1; name = "Pathfinder's Office"; @@ -5279,7 +5313,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 2; d2 = 8; @@ -5305,7 +5339,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/center) "sG" = ( @@ -5348,7 +5382,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/center) "sI" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, @@ -5364,7 +5398,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/center) "sJ" = ( -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "sK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -5393,11 +5427,11 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/center) "sR" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -5411,7 +5445,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/aft) "sS" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "top-right" }, /turf/simulated/floor/tiled, @@ -5429,7 +5463,7 @@ /turf/simulated/floor/tiled/techmaint, /area/quartermaster/hangar/catwalks_port) "tc" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -5509,7 +5543,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) @@ -5523,7 +5557,7 @@ /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/aft) @@ -5607,7 +5641,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -5632,13 +5666,13 @@ /turf/simulated/floor/lino, /area/tcommsat/computer) "tz" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/quartermaster/sorting) "tA" = ( -/obj/effect/floor_decal/corner/brown/half, +/obj/floor_decal/corner/brown/half, /turf/simulated/floor/tiled/monotile, /area/quartermaster/storage/upper) "tC" = ( @@ -5656,7 +5690,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "tG" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 9; icon_state = "warning" }, @@ -5682,7 +5716,7 @@ pixel_x = -22 }, /obj/machinery/suit_cycler/science, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/eva) "tK" = ( @@ -5701,7 +5735,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) "tO" = ( @@ -5759,7 +5793,7 @@ dir = 8; pixel_x = 21 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "tV" = ( @@ -5768,23 +5802,23 @@ pixel_x = -24; pixel_y = 6 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, /turf/simulated/floor/tiled/dark, /area/teleporter/fourthdeck) "tW" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 1 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/tiled/dark, @@ -5798,7 +5832,6 @@ /turf/simulated/floor/tiled/dark/monotile, /area/teleporter/fourthdeck) "tY" = ( -/obj/structure/table/standard, /obj/random/tech_supply, /obj/random/tech_supply, /obj/random/tech_supply, @@ -5807,10 +5840,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Tool Storage"; - dir = 4 - }, +/obj/structure/table/standard, /turf/simulated/floor/tiled, /area/storage/primary) "tZ" = ( @@ -5818,7 +5848,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/storage/primary) "ua" = ( @@ -5838,14 +5868,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/storage/primary) "ud" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/structure/disposalpipe/sortjunction/flipped{ dir = 1; name = "Primary Tool Storage"; @@ -5859,7 +5889,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/fourthdeck/fore) "uf" = ( @@ -5883,7 +5913,7 @@ dir = 1; pixel_y = -24 }, -/obj/effect/floor_decal/corner/red, +/obj/floor_decal/corner/red, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/center) "uh" = ( @@ -5894,7 +5924,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled, @@ -5911,23 +5941,23 @@ c_tag = "Fourth Deck Hallway - Lift"; dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 8 }, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/center) "uj" = ( -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 8 }, /turf/simulated/floor/tiled/dark, /area/hallway/primary/fourthdeck/aft) "uk" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/alarm{ pixel_y = 24 }, @@ -5937,7 +5967,7 @@ /turf/simulated/open, /area/quartermaster/storage/upper) "um" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -5952,8 +5982,8 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/white{ dir = 8 }, /obj/machinery/rotating_alarm/security_alarm{ @@ -5968,7 +5998,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/office) "up" = ( -/obj/effect/floor_decal/corner/brown/half, +/obj/floor_decal/corner/brown/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/center) "uq" = ( @@ -5977,7 +6007,7 @@ id_tag = "sup_office"; name = "Supply Desk Shutters" }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/quartermaster/office) @@ -6027,11 +6057,11 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/lounge) "uy" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/effect/floor_decal/spline/fancy/wood/corner{ +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood/corner{ dir = 1 }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ +/obj/floor_decal/spline/fancy/wood/corner{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -6064,7 +6094,7 @@ dir = 1; pixel_y = -24 }, -/obj/effect/floor_decal/corner/brown, +/obj/floor_decal/corner/brown, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/aft) "uI" = ( @@ -6079,14 +6109,14 @@ pixel_x = 10; pixel_y = 32 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/storage/upper) "uK" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/structure/cable{ @@ -6150,11 +6180,7 @@ /obj/machinery/power/breakerbox/activated{ RCon_tag = "Fourth Deck Substation Bypass" }, -/obj/machinery/camera/network/engineering{ - c_tag = "Substation - Fourth Deck"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -6180,7 +6206,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "uZ" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack{ dir = 8 }, @@ -6203,7 +6229,7 @@ /area/quartermaster/hangar/catwalks_starboard) "vb" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -6221,10 +6247,10 @@ dir = 4; icon_state = "railing0-1" }, -/turf/simulated/open, +/turf/simulated/floor/plating, /area/maintenance/fourthdeck/foreport) "vi" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/button/blast_door{ id_tag = "qm_warehouse2"; name = "Warehouse Door Control"; @@ -6239,7 +6265,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/aft) "vj" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 1 }, /obj/structure/sign/warning/server_room{ @@ -6266,7 +6292,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /turf/simulated/floor/tiled, @@ -6378,7 +6404,7 @@ /area/storage/primary) "vv" = ( /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/storage/primary) "vw" = ( @@ -6401,12 +6427,12 @@ /area/storage/primary) "vy" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/storage/primary) "vz" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/storage/primary) "vA" = ( @@ -6421,7 +6447,7 @@ name = "Hangar Deck Hallway Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) @@ -6439,7 +6465,7 @@ name = "Hangar Deck Hallway Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "vC" = ( @@ -6472,7 +6498,7 @@ /area/quartermaster/hangar/catwalks_starboard) "vJ" = ( /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/center) "vK" = ( @@ -6530,7 +6556,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/tcommsat/chamber) "wc" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/door/blast/regular/escape_pod, /turf/simulated/floor/reinforced, /area/maintenance/fourthdeck/aft) @@ -6589,7 +6615,7 @@ /area/hallway/primary/fourthdeck/center) "wp" = ( /obj/machinery/door/blast/regular/escape_pod, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/maintenance/fourthdeck/aft) "wq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -6598,7 +6624,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/closet/hydrant{ pixel_y = 32 }, @@ -6621,7 +6647,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/light{ @@ -6658,7 +6684,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/paleblue/half{ +/obj/floor_decal/corner/paleblue/half{ dir = 8 }, /turf/simulated/floor/tiled/monotile, @@ -6696,7 +6722,7 @@ dir = 8; icon_state = "tube1" }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/structure/disposalpipe/sortjunction{ dir = 1; name = "Security Checkpoint - Deck 4"; @@ -6710,11 +6736,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Primary Tool Storage"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -6739,7 +6761,7 @@ pixel_x = -3; pixel_y = -3 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/machinery/light_switch{ pixel_x = 10; pixel_y = 32 @@ -6760,13 +6782,13 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, /area/security/hangcheck) "wK" = ( -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 1 }, /obj/machinery/requests_console{ @@ -6796,7 +6818,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/machinery/computer/modular/preset/security{ dir = 8; icon_state = "console" @@ -6817,7 +6839,7 @@ /turf/simulated/floor/shuttle_ceiling/torch/air, /area/quartermaster/hangar/catwalks_port) "wT" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -6825,14 +6847,16 @@ /area/maintenance/fourthdeck/port) "wW" = ( /obj/machinery/door/blast/regular/escape_pod, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/maintenance/fourthdeck/starboard) "wX" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/fourthdeck/aft) "xb" = ( /obj/machinery/atmospherics/pipe/manifold/hidden{ @@ -6861,14 +6885,14 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) "xn" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /turf/simulated/floor/tiled, /area/quartermaster/deckchief) "xo" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/fourthdeck/aft) "xr" = ( @@ -6877,7 +6901,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -6922,7 +6946,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "xw" = ( -/obj/effect/floor_decal/scglogo, +/obj/floor_decal/scglogo, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, @@ -6955,7 +6979,7 @@ /area/maintenance/fourthdeck/aft) "xB" = ( /obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/center) "xE" = ( @@ -6967,6 +6991,16 @@ }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head/deck4) +"xF" = ( +/obj/floor_decal/corner/green{ + dir = 9 + }, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Fourth Deck Hallway - Aft Starboard"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/aft) "xJ" = ( /obj/structure/cable/green{ d1 = 4; @@ -7003,7 +7037,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/port) "xN" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/structure/cable{ @@ -7014,7 +7048,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/aft) "xO" = ( -/obj/effect/shuttle_landmark/vox_raider/dock, +/obj/shuttle_landmark/vox_raider/dock, /turf/space, /area/space) "xP" = ( @@ -7036,7 +7070,7 @@ dir = 4; pixel_x = -23 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /turf/simulated/floor/tiled, @@ -7048,7 +7082,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "xT" = ( @@ -7061,7 +7095,7 @@ /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "xU" = ( @@ -7074,7 +7108,7 @@ /obj/item/device/radio/intercom{ pixel_y = 23 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "xV" = ( @@ -7099,7 +7133,7 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "xX" = ( @@ -7115,7 +7149,7 @@ /obj/machinery/camera/network/fourth_deck{ c_tag = "Fourth Deck Hallway - Fore Port" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "xY" = ( @@ -7128,7 +7162,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 6 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "xZ" = ( @@ -7162,7 +7196,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "yc" = ( @@ -7172,7 +7206,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /turf/simulated/floor/plating, @@ -7191,13 +7225,13 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/fore) "ye" = ( -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 8 }, /obj/structure/bed/chair/padded/red{ @@ -7216,7 +7250,7 @@ icon_state = "1-2" }, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark, /area/security/hangcheck) "yg" = ( @@ -7230,7 +7264,7 @@ /turf/simulated/floor/tiled/dark, /area/security/hangcheck) "yi" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /obj/structure/table/steel, @@ -7238,7 +7272,7 @@ /turf/simulated/floor/tiled/dark, /area/security/hangcheck) "yj" = ( -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /obj/structure/railing/mapped{ dir = 4; icon_state = "railing0-1" @@ -7276,18 +7310,18 @@ /turf/simulated/floor/tiled/techmaint, /area/quartermaster/hangar/catwalks_port) "yr" = ( -/obj/effect/shuttle_landmark/merc/dock, +/obj/shuttle_landmark/merc/dock, /turf/space, /area/space) "yu" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/structure/railing/mapped{ dir = 4; icon_state = "railing0-1" }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 1 }, /turf/simulated/floor/tiled/steel_grid, @@ -7296,27 +7330,29 @@ /turf/simulated/floor/tiled, /area/quartermaster/office) "yB" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/floor_decal/spline/fancy/wood{ + dir = 10 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 +/obj/structure/table/woodentable/walnut, +/obj/item/storage/box/silverware{ + pixel_x = -3; + pixel_y = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) +/obj/item/storage/box/silverware{ + pixel_x = -3; + pixel_y = 3 + }, +/turf/simulated/floor/lino, +/area/crew_quarters/galley) "yC" = ( /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/aft) "yD" = ( -/obj/effect/landmark/test/safe_turf, +/obj/landmark/test/safe_turf, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/aft) "yF" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /obj/structure/sign/deck/fourth{ @@ -7386,7 +7422,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "za" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /turf/simulated/floor/tiled, @@ -7409,7 +7445,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /turf/simulated/floor/tiled/dark, @@ -7436,8 +7472,8 @@ dir = 4 }, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "zn" = ( @@ -7449,7 +7485,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -7487,8 +7523,8 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/white{ dir = 8 }, /turf/simulated/floor/tiled, @@ -7503,7 +7539,7 @@ dir = 1 }, /obj/machinery/light, -/obj/effect/floor_decal/corner/red/half, +/obj/floor_decal/corner/red/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "zs" = ( @@ -7516,8 +7552,8 @@ dir = 1; pixel_y = -28 }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/white{ dir = 8 }, /turf/simulated/floor/tiled, @@ -7531,8 +7567,8 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/white{ dir = 8 }, /turf/simulated/floor/tiled, @@ -7546,8 +7582,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/white{ dir = 8 }, /turf/simulated/floor/tiled, @@ -7564,7 +7600,7 @@ icon_state = "1-4" }, /obj/machinery/light, -/obj/effect/floor_decal/corner/red/half, +/obj/floor_decal/corner/red/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "zx" = ( @@ -7577,7 +7613,7 @@ icon_state = "4-8" }, /obj/machinery/light, -/obj/effect/floor_decal/corner/red/half, +/obj/floor_decal/corner/red/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "zz" = ( @@ -7593,8 +7629,8 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/white{ dir = 8 }, /obj/structure/disposalpipe/segment, @@ -7611,8 +7647,8 @@ dir = 1 }, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "zC" = ( @@ -7631,14 +7667,14 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled, /area/crew_quarters/diplomatic_office) "zE" = ( -/obj/effect/floor_decal/corner/mauve/half{ +/obj/floor_decal/corner/mauve/half{ dir = 4 }, /obj/structure/filingcabinet/chestdrawer, @@ -7654,11 +7690,11 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/dark, /area/security/hangcheck) "zM" = ( @@ -7682,10 +7718,22 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "zS" = ( -/turf/simulated/open, -/area/maintenance/fourthdeck/foreport) +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/fourthdeck/forestarboard) "zZ" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /obj/structure/stairs/south, @@ -7707,7 +7755,7 @@ dir = 8; icon_state = "railing0-1" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/aft) "Ad" = ( @@ -7720,15 +7768,11 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Port"; - dir = 4 - }, /obj/item/device/radio/intercom{ dir = 4; pixel_x = -21 }, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 8 }, /obj/structure/disposalpipe/segment{ @@ -7772,7 +7816,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "Al" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/steel, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, @@ -7783,7 +7827,7 @@ /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ id_tag = "eva_airlock_pump" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/embedded_controller/radio/airlock/airlock_controller{ @@ -7799,12 +7843,12 @@ /area/eva) "An" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/center) "Ap" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 4 }, /turf/simulated/floor/tiled/monotile, @@ -7840,8 +7884,8 @@ pixel_x = 6; pixel_y = -5 }, -/obj/effect/floor_decal/corner/brown/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/brown/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/recharger/wallcharger{ dir = 4; pixel_x = -23; @@ -7850,10 +7894,10 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/office) "AB" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 1 }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 8 }, /obj/machinery/rotating_alarm/security_alarm{ @@ -7886,18 +7930,18 @@ /obj/random/single/cola, /obj/random/single/cola, /obj/random/single/cola, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/forestarboard) "AE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /turf/simulated/floor/tiled/dark, /area/eva) "AF" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/suit_storage_unit/security/alt, /turf/simulated/floor/tiled/dark/monotile, /area/eva) @@ -7916,7 +7960,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 8 }, /turf/simulated/floor/tiled/steel_ridged, @@ -7956,22 +8000,18 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "AN" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/machinery/camera/network/security{ - c_tag = "Checkpoint - Deck Four"; - dir = 1 - }, +/obj/floor_decal/corner/red/mono, /obj/structure/disposalpipe/trunk{ dir = 1 }, /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/security/hangcheck) "AO" = ( /obj/machinery/photocopier, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/grey, /obj/item/device/radio/intercom/department/security{ dir = 8; pixel_x = 21 @@ -8011,15 +8051,15 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head/deck4) "Bf" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1" }, -/obj/effect/floor_decal/corner/brown, -/obj/effect/shuttle_landmark/lift/cargo_top, +/obj/floor_decal/corner/brown, +/obj/shuttle_landmark/lift/cargo_top, /turf/simulated/floor/tiled/steel_grid, /area/turbolift/cargo_lift) "Bm" = ( @@ -8028,8 +8068,8 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/white{ dir = 8 }, /obj/machinery/alarm{ @@ -8059,7 +8099,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "By" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/door/blast/regular/escape_pod, /turf/simulated/floor/reinforced, /area/maintenance/fourthdeck/port) @@ -8073,7 +8113,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 1 }, /turf/simulated/floor/tiled, @@ -8083,11 +8123,11 @@ /area/maintenance/fourthdeck/foreport) "BF" = ( /obj/structure/cable/cyan, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/tcommsat/chamber) "BH" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/crate, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, @@ -8129,7 +8169,7 @@ /obj/item/device/radio/intercom{ pixel_y = 23 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -8142,13 +8182,13 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/storage/auxillary/port) "BQ" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/button/blast_door{ id_tag = "portaux_warehouse"; name = "Warehouse Door Control"; @@ -8175,16 +8215,16 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, -/obj/effect/floor_decal/corner/red/diagonal{ +/obj/floor_decal/corner/red/diagonal{ dir = 8 }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -8251,14 +8291,14 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/foreport) "Ca" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/up, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/foreport) "Cc" = ( /obj/structure/closet/crate, /obj/random/firstaid, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/fourthdeck/aft) "Cg" = ( @@ -8273,7 +8313,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 8 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/dark, @@ -8295,7 +8335,7 @@ id_tag = "sup_office"; name = "Supply Office Shutters" }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/quartermaster/office) @@ -8344,7 +8384,7 @@ /turf/simulated/floor/shuttle_ceiling/torch/air, /area/quartermaster/hangar/catwalks_port) "CH" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/structure/bed/chair/comfy/brown, @@ -8372,7 +8412,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -8388,20 +8428,20 @@ icon_state = "1-2" }, /obj/random_multi/single_item/boombox, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/storage/auxillary/port) "CR" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, /turf/simulated/floor/tiled/steel_grid, /area/storage/auxillary/port) "CS" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/blast/shutters{ dir = 4; id_tag = "portaux_warehouse"; @@ -8416,7 +8456,7 @@ dir = 8; pixel_x = 21 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "CU" = ( @@ -8521,9 +8561,9 @@ /turf/simulated/floor/tiled/steel_ridged, /area/quartermaster/office) "Dr" = ( -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /obj/machinery/photocopier, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/office) "Ds" = ( @@ -8534,7 +8574,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/aft) "Dw" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /obj/machinery/oxygen_pump{ @@ -8543,7 +8583,7 @@ /turf/simulated/floor/tiled/dark, /area/hallway/primary/fourthdeck/aft) "Dx" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light{ dir = 8 }, @@ -8564,6 +8604,19 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) +"DK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/warning/docking_area{ + name = "\improper ESCAPE POD LAUNCH PATHWAY"; + pixel_x = 32 + }, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Fourth Deck - Aft Starboard Airlock"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/fourthdeck/aft) "DL" = ( /obj/structure/table/rack, /obj/random/tech_supply, @@ -8586,7 +8639,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -8598,7 +8651,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/steel_grid, @@ -8610,7 +8663,7 @@ dir = 4; icon_state = "tube1" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "DP" = ( @@ -8704,13 +8757,13 @@ /turf/simulated/floor/tiled/steel_ridged, /area/crew_quarters/laundry) "Em" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 8 }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/office) "En" = ( -/obj/effect/floor_decal/corner/green/mono, +/obj/floor_decal/corner/green/mono, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, @@ -8738,13 +8791,13 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/fore) "Eq" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 6 }, /obj/machinery/light/spot{ @@ -8758,7 +8811,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled, @@ -8782,7 +8835,7 @@ /obj/structure/table/rack, /obj/random/tech_supply, /obj/random/tech_supply, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -8791,30 +8844,30 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 10 }, /turf/simulated/floor/tiled/steel_grid, /area/storage/auxillary/port) "EG" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/light/small{ dir = 4; icon_state = "bulb1" }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/steel_grid, /area/storage/auxillary/port) "EH" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 8 }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -8823,7 +8876,7 @@ "EI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "EJ" = ( @@ -8885,16 +8938,6 @@ }, /turf/simulated/floor/carpet, /area/crew_quarters/lounge) -"EW" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Lounge Aft"; - name = "security camera" - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) "EY" = ( /obj/item/paper_bin, /obj/structure/table/woodentable, @@ -8912,13 +8955,13 @@ /turf/simulated/floor/carpet, /area/crew_quarters/lounge) "Fb" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "lightsout" }, /turf/simulated/floor/tiled, /area/quartermaster/office) "Fd" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 4 }, /obj/machinery/requests_console{ @@ -8934,14 +8977,14 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/storage/upper) "Fe" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -8951,7 +8994,7 @@ /area/eva) "Fi" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -8993,10 +9036,10 @@ /obj/machinery/light{ dir = 8 }, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -9006,7 +9049,7 @@ /obj/structure/table/rack, /obj/random/tech_supply, /obj/random/tech_supply, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -9014,7 +9057,7 @@ "Fm" = ( /obj/structure/closet/crate/freezer, /obj/random/medical, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -9031,10 +9074,10 @@ /obj/random/maintenance/solgov/clean, /obj/random/maintenance/solgov/clean, /obj/random/maintenance/solgov/clean, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 8 }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, /turf/simulated/floor/tiled/steel_grid, @@ -9044,7 +9087,7 @@ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/rotating_alarm/security_alarm{ dir = 8 }, @@ -9154,7 +9197,7 @@ /turf/simulated/floor/carpet, /area/crew_quarters/lounge) "FI" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/machinery/vending/snack{ @@ -9163,18 +9206,18 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/lounge) "FK" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/quartermaster/sorting) "FL" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 8 }, /obj/machinery/papershredder, /turf/simulated/floor/tiled/monotile, /area/quartermaster/office) "FM" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -9214,8 +9257,12 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/fourth_deck{ + c_tag = "Fourth Deck Hallway - Aft Port"; + dir = 8 + }, /turf/simulated/floor/tiled/dark/monotile, /area/hallway/primary/fourthdeck/aft) "FV" = ( @@ -9251,13 +9298,13 @@ name = "plastic table frame" }, /obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Fore Port Docking Access"; + c_tag = "Fourth Deck - Fore Port Airlock"; dir = 4 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 8 }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, /turf/simulated/floor/tiled/steel_grid, @@ -9299,19 +9346,19 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/foreport) "Gh" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/light/small{ dir = 8 }, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/escape_pod8/station) "Gi" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/escape_pod8/station) "Gj" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/table/standard{ name = "plastic table frame" }, @@ -9333,7 +9380,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/foreport) "Gm" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/table/standard{ name = "plastic table frame" }, @@ -9344,12 +9391,12 @@ /turf/simulated/floor/tiled/white/monotile, /area/shuttle/escape_pod9/station) "Gn" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/escape_pod9/station) "Go" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/light/small{ dir = 4 }, @@ -9368,7 +9415,7 @@ /turf/simulated/floor/carpet, /area/crew_quarters/lounge) "Gq" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/machinery/light/small, @@ -9387,7 +9434,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/machinery/vending/cigarette{ @@ -9396,11 +9443,11 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/lounge) "Gt" = ( -/obj/effect/shuttle_landmark/scavver_gantry/torch, +/obj/shuttle_landmark/scavver_gantry/torch, /turf/space, /area/space) "Gu" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -9473,7 +9520,7 @@ /turf/simulated/floor/plating, /area/vacant/monitoring) "GG" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/canister/air/airlock, /obj/machinery/atmospherics/portables_connector{ dir = 4 @@ -9541,7 +9588,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) "GW" = ( @@ -9552,7 +9599,7 @@ /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod8/station) "GY" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/item/storage/box/cups, @@ -9585,14 +9632,14 @@ /obj/machinery/light{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/dark/monotile, /area/hallway/primary/fourthdeck/aft) "Hh" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "bottom-center" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -9607,7 +9654,7 @@ icon_state = "16-0" }, /obj/structure/cable, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 9; icon_state = "warning" }, @@ -9625,7 +9672,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -9673,7 +9720,7 @@ /turf/simulated/floor/plating, /area/crew_quarters/lounge) "Hw" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 4 }, /obj/machinery/light{ @@ -9697,7 +9744,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/lounge) "HE" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/center) @@ -9723,30 +9770,19 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) "HL" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1" }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 4 }, /obj/machinery/computer/shuttle_control/lift/cargo, /turf/simulated/floor/tiled/steel_grid, /area/turbolift/cargo_lift) -"HP" = ( -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Adherent Maintenance"; - dir = 8 - }, -/obj/structure/sign/warning/caution{ - dir = 8; - pixel_x = 32 - }, -/turf/simulated/floor/crystal, -/area/crew_quarters/adherent) "HQ" = ( /obj/structure/catwalk, /obj/structure/cable/green{ @@ -9763,7 +9799,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "HR" = ( -/obj/effect/floor_decal/industrial/warning/full, +/obj/floor_decal/industrial/warning/full, /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ dir = 1; id_tag = "skipjack_shuttle_dock_pump" @@ -9933,7 +9969,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "Iq" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -10021,7 +10057,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/dark, @@ -10036,7 +10072,7 @@ /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod8/station) "IB" = ( -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, @@ -10059,10 +10095,10 @@ /turf/simulated/floor/tiled, /area/quartermaster/office) "II" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/firecloset, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/center) @@ -10097,7 +10133,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/canister/air/airlock, /obj/machinery/light{ dir = 4 @@ -10105,7 +10141,7 @@ /turf/simulated/floor/tiled/dark, /area/eva) "IT" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/port) "IX" = ( @@ -10115,12 +10151,12 @@ /obj/machinery/disposal/deliveryChute{ dir = 4 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/plating, /area/quartermaster/sorting) "IY" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/structure/disposalpipe/trunk{ @@ -10149,7 +10185,7 @@ /turf/simulated/floor/tiled/monotile, /area/eva) "Ji" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -10196,11 +10232,11 @@ dir = 1; id_tag = "eva_airlock_pump" }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/techfloor/grid, /area/eva) "Jo" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /turf/simulated/floor/carpet, @@ -10221,10 +10257,10 @@ /obj/machinery/light{ dir = 8 }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 8 }, /obj/structure/sign/warning/docking_area{ @@ -10237,7 +10273,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 8 }, /obj/machinery/light{ @@ -10255,7 +10291,7 @@ dir = 4; pixel_x = -22 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/suit_storage_unit/standard_unit, /turf/simulated/floor/tiled/dark/monotile, /area/eva) @@ -10320,7 +10356,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/fourthdeck/aft) "JP" = ( -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 8 }, /obj/structure/cable/green{ @@ -10403,13 +10439,13 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "JU" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod8, -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/shuttle_landmark/escape_pod/start/pod8, +/obj/wallframe_spawn/reinforced/titanium, /turf/simulated/floor/plating, /area/shuttle/escape_pod8/station) "JX" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod9, -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/shuttle_landmark/escape_pod/start/pod9, +/obj/wallframe_spawn/reinforced/titanium, /turf/simulated/floor/plating, /area/shuttle/escape_pod9/station) "JY" = ( @@ -10420,11 +10456,11 @@ /area/crew_quarters/diplomatic_office) "Kb" = ( /obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/port) "Kc" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/largecrate, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, @@ -10479,7 +10515,7 @@ /obj/machinery/rotating_alarm/security_alarm{ dir = 8 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /obj/structure/closet/emcloset, @@ -10490,7 +10526,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/fourthdeck/aft) "Kk" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/suit_cycler/medical/alt, /turf/simulated/floor/tiled/dark/monotile, /area/eva) @@ -10499,22 +10535,22 @@ /turf/simulated/wall/r_wall/hull, /area/maintenance/fourthdeck/port) "Kn" = ( -/obj/effect/shuttle_landmark/skipjack/dock, +/obj/shuttle_landmark/skipjack/dock, /turf/space, /area/space) "Ko" = ( -/obj/effect/shuttle_landmark/ert/dock, -/obj/effect/shuttle_landmark/skrellscout/dock, +/obj/shuttle_landmark/ert/dock, +/obj/shuttle_landmark/skrellscout/dock, /turf/space, /area/space) "Kp" = ( -/obj/effect/shuttle_landmark/ert/deck5{ +/obj/shuttle_landmark/ert/deck5{ name = "4th Deck, Fore Port" }, /turf/space, /area/space) "Kq" = ( -/obj/effect/landmark/test/space_turf, +/obj/landmark/test/space_turf, /turf/space, /area/space) "Kt" = ( @@ -10576,7 +10612,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/structure/disposalpipe/segment, @@ -10589,8 +10625,8 @@ /area/hallway/primary/fourthdeck/aft) "KD" = ( /obj/machinery/fabricator, -/obj/effect/floor_decal/corner/brown/half, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/brown/half, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -10613,11 +10649,11 @@ /turf/simulated/floor/tiled/steel_ridged, /area/quartermaster/sorting) "KF" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/quartermaster/expedition/storage) "KG" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /obj/structure/disposalpipe/segment, @@ -10641,7 +10677,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/security/hangcheck) "KI" = ( @@ -10653,7 +10689,7 @@ /area/tcommsat/chamber) "KN" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techmaint, /area/maintenance/fourthdeck/forestarboard) "KO" = ( @@ -10674,8 +10710,8 @@ name = "Sorting Office"; sort_type = "Sorting Office" }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -10694,7 +10730,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 4 }, /turf/simulated/floor/tiled, @@ -10703,10 +10739,10 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, @@ -10720,7 +10756,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/walnut, /area/command/captainmess) "KY" = ( /obj/structure/cable/green{ @@ -10757,8 +10793,8 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/white{ dir = 8 }, /turf/simulated/floor/tiled, @@ -10814,7 +10850,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) "Lk" = ( @@ -10849,13 +10885,13 @@ /turf/simulated/floor/tiled, /area/quartermaster/office) "Lq" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 8 }, /obj/structure/table/standard{ name = "plastic table frame" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/folder/red{ pixel_x = -3 }, @@ -10895,7 +10931,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/waterstore) "Lx" = ( -/obj/effect/floor_decal/corner/brown/half, +/obj/floor_decal/corner/brown/half, /obj/machinery/photocopier, /obj/machinery/power/apc{ name = "south bump"; @@ -10920,7 +10956,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/storage/upper) "LC" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack, /obj/random/tech_supply, /obj/random/tech_supply, @@ -10944,7 +10980,7 @@ /area/maintenance/fourthdeck/port) "LI" = ( /obj/machinery/light, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /turf/simulated/floor/tiled, @@ -10979,7 +11015,7 @@ /turf/simulated/floor/bluegrid, /area/maintenance/fourthdeck/starboard) "LN" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/sorting) @@ -10996,11 +11032,11 @@ /area/maintenance/fourthdeck/foreport) "LQ" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 1 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/walnut, /area/command/captainmess) "LS" = ( /obj/structure/catwalk, @@ -11024,7 +11060,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/suit_storage_unit/standard_unit, /turf/simulated/floor/tiled/dark/monotile, /area/eva) @@ -11038,10 +11074,10 @@ /obj/machinery/light{ dir = 8 }, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -11064,13 +11100,13 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, /area/crew_quarters/diplomatic_office) "Ma" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -11084,7 +11120,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/lounge) "Mb" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/standard{ name = "plastic table frame" }, @@ -11114,7 +11150,7 @@ /turf/simulated/open, /area/quartermaster/expedition/storage) "Mi" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -11124,7 +11160,7 @@ /turf/simulated/floor/tiled/dark, /area/eva) "Mk" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -11152,7 +11188,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/lounge) "Mo" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/crew_quarters/adherent) @@ -11170,7 +11206,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/diplomatic_office) "Ms" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /obj/machinery/airlock_sensor{ @@ -11193,7 +11229,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "Mu" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/machinery/libraryscanner, @@ -11207,10 +11243,14 @@ /obj/machinery/atmospherics/valve/shutoff/supply{ dir = 4 }, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "Mw" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -11232,10 +11272,10 @@ /obj/machinery/light{ dir = 8 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 1 }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 8 }, /obj/structure/sign/warning/docking_area{ @@ -11245,7 +11285,7 @@ /turf/simulated/floor/tiled/dark, /area/hallway/primary/fourthdeck/aft) "My" = ( -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /obj/machinery/alarm{ dir = 8; pixel_x = 21 @@ -11264,7 +11304,7 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/office) "MB" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/fourthdeck/aft) "MC" = ( @@ -11297,14 +11337,14 @@ /turf/simulated/floor/tiled/techmaint, /area/quartermaster/hangar/catwalks_starboard) "MG" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, /area/crew_quarters/diplomatic_office) "MH" = ( /obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/cable{ d1 = 2; d2 = 4; @@ -11313,7 +11353,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/starboard) "MI" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -11372,7 +11412,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/fourthdeck/center) "MS" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/suit_storage_unit/engineering/alt/sol, /turf/simulated/floor/tiled/dark/monotile, /area/eva) @@ -11406,7 +11446,7 @@ /turf/simulated/floor/carpet/blue2, /area/command/captainmess) "MY" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /turf/simulated/floor/wood/walnut, @@ -11450,15 +11490,15 @@ icon_state = "1-2" }, /obj/machinery/button/windowtint{ - pixel_x = 24; id = "diplomatic_office"; + pixel_x = 24; pixel_y = 6 }, /obj/machinery/light_switch{ pixel_x = 24; pixel_y = -6 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /turf/simulated/floor/tiled, @@ -11504,11 +11544,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) "Nl" = ( -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, @@ -11543,7 +11583,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -11576,7 +11616,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/storage/upper) "Nq" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -11636,7 +11676,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "Nv" = ( @@ -11669,7 +11709,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "Nz" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/suit_storage_unit/atmos/alt/sol, /turf/simulated/floor/tiled/dark/monotile, /area/eva) @@ -11679,10 +11719,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 4 }, /obj/machinery/atm{ @@ -11729,7 +11769,7 @@ /turf/simulated/open, /area/quartermaster/hangar/catwalks_port) "NM" = ( -/obj/effect/fluid_mapped, +/obj/fluid_mapped, /turf/simulated/floor/reinforced, /area/maintenance/waterstore) "NN" = ( @@ -11742,7 +11782,7 @@ opacity = 0 }, /obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/security/hangcheck) @@ -11750,14 +11790,14 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/center) "NQ" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /obj/random/junk, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) "NR" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -11829,7 +11869,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 1 }, /turf/simulated/floor/tiled, @@ -11853,12 +11893,15 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/port) "Oc" = ( -/obj/machinery/barrier, -/turf/simulated/floor/tiled/monotile, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/closet/firecloset, +/turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "Od" = ( /obj/machinery/suit_cycler/mining, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/eva) "Oe" = ( @@ -11870,7 +11913,7 @@ dir = 4; icon_state = "railing0-1" }, -/turf/simulated/open, +/turf/simulated/floor/plating, /area/maintenance/fourthdeck/foreport) "Oh" = ( /obj/structure/table/standard, @@ -11881,7 +11924,7 @@ /obj/item/reagent_containers/food/drinks/glass2/coffeecup/SCG{ pixel_x = 4 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -11903,7 +11946,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/security/hangcheck) @@ -11918,7 +11961,7 @@ pixel_y = -24 }, /obj/machinery/light, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/walnut, /area/command/captainmess) "Om" = ( /obj/structure/cable/cyan{ @@ -11936,7 +11979,7 @@ dir = 8; icon_state = "pipe-c" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, @@ -11961,7 +12004,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "Ou" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -12001,7 +12044,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/aft) "OC" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/suit_storage_unit/medical/alt/sol, /turf/simulated/floor/tiled/dark/monotile, /area/eva) @@ -12031,7 +12074,7 @@ dir = 1; icon_state = "console" }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/dark/monotile, /area/security/hangcheck) "OK" = ( @@ -12077,18 +12120,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, /area/crew_quarters/diplomatic_office) -"OS" = ( -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" - }, -/turf/simulated/open, -/area/maintenance/fourthdeck/foreport) "OT" = ( /obj/machinery/status_display, /turf/simulated/wall/r_wall/prepainted, @@ -12102,7 +12138,7 @@ dir = 4; pixel_y = -4 }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/storage/primary) "OV" = ( @@ -12136,14 +12172,14 @@ id_tag = "do_office"; name = "DO Office Shutters" }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/quartermaster/deckchief) "Pc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/corner/green/mono, +/obj/floor_decal/corner/green/mono, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -12199,8 +12235,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -12240,7 +12276,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/foreport) "Pm" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10; icon_state = "warning" }, @@ -12265,11 +12301,9 @@ /turf/simulated/floor/shuttle_ceiling/torch/air, /area/quartermaster/hangar/catwalks_starboard) "Po" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "Pp" = ( @@ -12288,7 +12322,7 @@ dir = 4; pixel_x = -22 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled/dark, @@ -12320,7 +12354,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "Px" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 9 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ @@ -12335,7 +12369,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -12370,7 +12404,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/foreport) "PG" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/sign/warning/mail_delivery{ pixel_y = 32 }, @@ -12384,10 +12418,6 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/camera/network/supply{ - c_tag = "Supply Office - Sorting"; - dir = 4 - }, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/sorting) "PH" = ( @@ -12395,7 +12425,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/foreport) "PI" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/structure/cable/green{ @@ -12429,7 +12459,7 @@ /turf/simulated/floor/plating, /area/crew_quarters/lounge) "PQ" = ( -/obj/effect/floor_decal/corner/brown/half, +/obj/floor_decal/corner/brown/half, /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ d1 = 2; @@ -12455,7 +12485,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/foreport) "PS" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /obj/machinery/light{ @@ -12489,7 +12519,7 @@ id_tag = "sup_office"; name = "Supply Desk Shutters" }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/quartermaster/office) "PY" = ( @@ -12536,14 +12566,14 @@ /turf/simulated/wall/r_wall/hull, /area/hallway/primary/fourthdeck/aft) "Qe" = ( -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /obj/structure/closet/secure_closet/decktech, /obj/item/material/coin/silver{ pixel_x = -3; pixel_y = 3 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -12574,24 +12604,26 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "Qn" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "Qo" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /turf/simulated/floor/tiled, /area/crew_quarters/diplomatic_office) "Qp" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/cable/green{ @@ -12616,7 +12648,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) "Qq" = ( -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 1 }, /obj/structure/bed/chair/padded/red{ @@ -12632,7 +12664,7 @@ /turf/simulated/open, /area/quartermaster/expedition/storage) "Qs" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/cable{ d1 = 2; d2 = 8; @@ -12642,7 +12674,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) "Qt" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/machinery/recharger, @@ -12671,7 +12703,7 @@ d2 = 4; icon_state = "2-4" }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/walnut, /area/command/captainmess) "QB" = ( /obj/machinery/access_button{ @@ -12686,13 +12718,13 @@ /turf/space, /area/space) "QC" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/center) "QD" = ( -/obj/effect/floor_decal/corner/brown/half, +/obj/floor_decal/corner/brown/half, /obj/structure/filingcabinet, /obj/structure/cable/green{ d1 = 4; @@ -12766,7 +12798,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 6 }, /turf/simulated/floor/plating, @@ -12892,18 +12924,14 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "Ro" = ( -/obj/effect/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal, /obj/machinery/newscaster{ pixel_x = 32 }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Laundry Room"; - dir = 8 - }, /obj/structure/closet/crate/secure/biohazard, /turf/simulated/floor/tiled/white, /area/crew_quarters/laundry) @@ -12929,7 +12957,7 @@ /turf/simulated/floor/wood, /area/command/captainmess) "Rr" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -12952,10 +12980,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 4 }, -/obj/effect/floor_decal/corner/white, +/obj/floor_decal/corner/white, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -12967,13 +12995,9 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/fore) "Rv" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, -/obj/machinery/camera/network/command{ - c_tag = "EVA - Suit Storage"; - dir = 1 - }, /obj/item/device/radio/intercom{ dir = 1; pixel_y = -28 @@ -12997,7 +13021,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 8 }, /obj/machinery/light, @@ -13012,7 +13036,7 @@ dir = 1; pixel_y = -4 }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/storage/primary) "RA" = ( @@ -13025,7 +13049,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/rotating_alarm/security_alarm{ dir = 1 }, @@ -13036,17 +13060,17 @@ dir = 1; pixel_y = -24 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/walnut, /area/command/captainmess) "RD" = ( /obj/machinery/alarm{ dir = 1; pixel_y = -22 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad, /obj/item/device/radio/intercom{ dir = 4; @@ -13087,14 +13111,14 @@ dir = 4 }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/port) "RK" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/machinery/light{ @@ -13108,7 +13132,7 @@ /turf/simulated/floor/lino, /area/command/captainmess) "RM" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 6 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -13134,18 +13158,18 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/white{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/fourthdeck/fore) "RP" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "RQ" = ( @@ -13156,7 +13180,7 @@ dir = 4; id_tag = "admin_shuttle_dock_pump" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /turf/simulated/floor/plating, @@ -13195,6 +13219,7 @@ "RV" = ( /obj/structure/table/woodentable, /obj/machinery/chemical_dispenser/bar_coffee/full{ + dir = 8; pixel_y = 3 }, /obj/machinery/light/small{ @@ -13203,7 +13228,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/lounge) "RW" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -13234,7 +13259,7 @@ /turf/simulated/wall/prepainted, /area/crew_quarters/lounge) "Se" = ( -/obj/effect/floor_decal/corner/paleblue/half{ +/obj/floor_decal/corner/paleblue/half{ dir = 8 }, /obj/structure/cable/green{ @@ -13245,7 +13270,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "Sf" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/computer/modular/preset/civilian{ dir = 8; icon_state = "console" @@ -13267,14 +13292,10 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/waterstore) "Sh" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 4 }, /obj/structure/table/standard, -/obj/machinery/camera/network/supply{ - c_tag = "Supply Office - Deck Officer"; - dir = 8 - }, /obj/machinery/light{ dir = 4 }, @@ -13293,7 +13314,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/fourthdeck/fore) "Sj" = ( @@ -13387,7 +13408,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "Sv" = ( -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/fore) "Sx" = ( @@ -13398,7 +13419,7 @@ /turf/simulated/open, /area/quartermaster/storage/upper) "Sy" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 4 }, /obj/structure/table/standard, @@ -13409,7 +13430,7 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/deckchief) "Sz" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -13445,7 +13466,7 @@ /obj/machinery/atmospherics/valve/shutoff/supply{ dir = 4 }, -/obj/effect/floor_decal/industrial/shutoff{ +/obj/floor_decal/industrial/shutoff{ dir = 4 }, /turf/simulated/floor/tiled/monotile, @@ -13461,7 +13482,7 @@ name = "east bump"; pixel_x = 24 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /turf/simulated/floor/tiled, @@ -13485,7 +13506,7 @@ icon_state = "0-8" }, /obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/security/hangcheck) "SE" = ( @@ -13504,7 +13525,7 @@ /turf/simulated/floor/plating, /area/maintenance/waterstore) "SF" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; @@ -13515,7 +13536,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/fourthdeck/aft) "SG" = ( -/obj/effect/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal, /turf/simulated/floor/tiled/white, /area/crew_quarters/laundry) "SH" = ( @@ -13559,7 +13580,7 @@ /turf/simulated/wall/prepainted, /area/maintenance/substation/fourthdeck) "SK" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 9 }, /obj/structure/table/rack{ @@ -13581,8 +13602,8 @@ /turf/simulated/floor/tiled, /area/quartermaster/deckchief) "SL" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -13605,7 +13626,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/aft) "SP" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -13615,10 +13636,11 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/lounge) "SR" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, /obj/machinery/alarm{ pixel_y = 24 }, +/obj/structure/table/rack, +/obj/random/donkpocket_box, /turf/simulated/floor/tiled/monotile, /area/maintenance/fourthdeck/forestarboard) "SS" = ( @@ -13657,7 +13679,7 @@ pixel_x = 6; pixel_y = 24 }, -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /obj/item/device/radio/intercom/department/security{ dir = 8; pixel_x = 21 @@ -13670,7 +13692,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 4 }, /obj/structure/sign/double/solgovflag/right{ @@ -13682,7 +13704,7 @@ /obj/structure/closet, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techmaint, /area/maintenance/fourthdeck/forestarboard) "SW" = ( @@ -13736,7 +13758,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/landmark{ +/obj/landmark{ name = "lightsout" }, /obj/structure/disposalpipe/segment{ @@ -13746,7 +13768,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/aft) "Tb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 6 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ @@ -13798,7 +13820,7 @@ /turf/simulated/wall/prepainted, /area/quartermaster/sorting) "Ti" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techmaint, /area/maintenance/fourthdeck/forestarboard) "Tj" = ( @@ -13822,7 +13844,7 @@ /turf/simulated/floor/tiled/techmaint, /area/quartermaster/hangar/catwalks_starboard) "To" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "Tp" = ( @@ -13833,7 +13855,7 @@ /turf/simulated/floor/shuttle_ceiling/torch/air, /area/quartermaster/hangar/catwalks_starboard) "Tr" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 8 }, /obj/machinery/requests_console{ @@ -13845,7 +13867,7 @@ /area/quartermaster/office) "Ts" = ( /obj/structure/bed/chair/office/comfy/purple, -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 5 }, /obj/structure/cable/green{ @@ -13863,7 +13885,7 @@ /area/command/pathfinder) "Tt" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/random/single/lighter, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/foreport) @@ -13894,7 +13916,7 @@ /turf/simulated/wall/prepainted, /area/storage/primary) "Tx" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/machinery/firealarm{ @@ -13909,7 +13931,7 @@ /obj/item/device/radio/intercom{ pixel_y = 23 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/walnut, /area/command/captainmess) "TA" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -13930,8 +13952,8 @@ dir = 4; pixel_x = -25 }, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/grey, /obj/random_multi/single_item/boombox, /obj/item/device/binoculars, /turf/simulated/floor/tiled/dark/monotile, @@ -13955,13 +13977,13 @@ /obj/machinery/newscaster/security_unit{ pixel_y = -32 }, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/papershredder, /turf/simulated/floor/tiled/dark/monotile, /area/security/hangcheck) "TH" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/machinery/power/apc{ @@ -14014,10 +14036,10 @@ /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) "TO" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 9 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/deckofficer, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, @@ -14041,7 +14063,7 @@ /turf/simulated/open, /area/quartermaster/expedition/storage) "TT" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ +/obj/wallframe_spawn/reinforced/polarized/no_grille{ id = "pathfinder_office" }, /obj/machinery/door/firedoor, @@ -14063,7 +14085,7 @@ name = "Docking Port Airlock" }, /obj/machinery/shield_diffuser, -/obj/effect/shuttle_landmark/skrellscoutshuttle/altdock, +/obj/shuttle_landmark/skrellscoutshuttle/altdock, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) "TY" = ( @@ -14083,17 +14105,17 @@ pixel_y = -24; tag_door = "escape_pod_8_berth_hatch" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, /turf/simulated/floor/tiled/dark, /area/hallway/primary/fourthdeck/aft) "Uh" = ( -/obj/effect/floor_decal/corner/brown/half, +/obj/floor_decal/corner/brown/half, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -14135,17 +14157,17 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head/deck4) "Un" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, -/obj/effect/floor_decal/spline/fancy/wood/corner, +/obj/floor_decal/spline/fancy/wood/corner, /turf/simulated/floor/lino, /area/command/captainmess) "Uo" = ( -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/walnut, /area/command/captainmess) "Up" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled, @@ -14156,7 +14178,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/red/half, +/obj/floor_decal/corner/red/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/center) "Ur" = ( @@ -14178,7 +14200,7 @@ /turf/simulated/wall/r_wall/hull, /area/crew_quarters/lounge) "Uv" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, @@ -14225,7 +14247,7 @@ /obj/item/device/radio/intercom{ pixel_y = 23 }, -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -14245,7 +14267,7 @@ /turf/simulated/floor/tiled/monotile, /area/maintenance/fourthdeck/forestarboard) "UC" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light/small{ dir = 1 }, @@ -14291,10 +14313,6 @@ pixel_y = 7 }, /obj/item/pen, -/obj/machinery/camera/network/supply{ - c_tag = "Supply Office - Desk"; - dir = 8 - }, /turf/simulated/floor/tiled, /area/quartermaster/office) "UJ" = ( @@ -14327,7 +14345,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/quartermaster/sorting) "UM" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -14388,17 +14406,17 @@ pixel_y = 24; tag_door = "escape_pod_6_berth_hatch" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, /turf/simulated/floor/tiled/dark, /area/hallway/primary/fourthdeck/aft) "UT" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ @@ -14418,7 +14436,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) "UX" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "center-left" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -14435,7 +14453,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/center) "UY" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -14464,18 +14482,18 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) "Va" = ( -/obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 + dir = 4 }, +/obj/structure/closet/emcloset, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "Vb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -14511,7 +14529,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 8 }, /turf/simulated/floor/tiled, @@ -14533,7 +14551,7 @@ /turf/simulated/floor/tiled/dark, /area/tcommsat/chamber) "Vm" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/machinery/computer/modular/preset/dock{ @@ -14550,7 +14568,7 @@ /turf/simulated/open, /area/quartermaster/storage/upper) "Vp" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 9 }, /obj/machinery/alarm{ @@ -14575,19 +14593,19 @@ dir = 1 }, /obj/structure/disposaloutlet, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/sorting) "Vw" = ( -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 1 }, /obj/structure/filingcabinet/filingcabinet, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/office) "Vx" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 4 }, @@ -14603,7 +14621,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/tcommsat/chamber) "VA" = ( @@ -14635,7 +14653,7 @@ /obj/structure/table/standard{ name = "plastic table frame" }, -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 1 }, /obj/item/folder/yellow, @@ -14657,10 +14675,14 @@ /obj/machinery/atmospherics/valve/shutoff/scrubbers{ dir = 4 }, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "VF" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -14679,7 +14701,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/aft) "VG" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /turf/simulated/floor/tiled/dark/monotile, /area/eva) @@ -14687,14 +14709,10 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/camera/network/command{ - c_tag = "EVA - Miscellaneous Suit Storage"; - dir = 8 - }, /turf/simulated/floor/tiled/dark, /area/eva) "VJ" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 8; @@ -14714,17 +14732,13 @@ /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/center) "VL" = ( -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Ladders"; - dir = 1 - }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/aft) "VO" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/emcloset, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/center) @@ -14765,7 +14779,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -14773,7 +14787,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/fore) "VU" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 10 }, /turf/simulated/floor/tiled, @@ -14843,7 +14857,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /obj/machinery/oxygen_pump{ pixel_x = 32 }, @@ -14851,7 +14865,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) "Wm" = ( -/obj/effect/floor_decal/corner/green/mono, +/obj/floor_decal/corner/green/mono, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/aft) @@ -14882,7 +14896,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/foreport) "Wu" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 9 }, /turf/simulated/floor/tiled/dark, @@ -14973,11 +14987,11 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/port) "WB" = ( -/obj/effect/shuttle_landmark/admin/out, +/obj/shuttle_landmark/admin/out, /turf/space, /area/space) "WC" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 5 }, /obj/structure/disposalpipe/segment, @@ -14991,7 +15005,9 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/center) "WD" = ( -/obj/structure/synthesized_instrument/synthesizer/minimoog, +/obj/structure/synthesized_instrument/synthesizer/minimoog{ + dir = 4 + }, /obj/item/device/radio/intercom/entertainment{ dir = 4; pixel_x = -22 @@ -15083,17 +15099,17 @@ /area/maintenance/fourthdeck/aft) "WQ" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/corner/brown, +/obj/floor_decal/corner/brown, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/center) "WR" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/center) "WS" = ( -/obj/effect/floor_decal/corner/brown/half, +/obj/floor_decal/corner/brown/half, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -15122,11 +15138,11 @@ /turf/simulated/floor/tiled/steel_ridged, /area/quartermaster/deckchief) "WX" = ( -/obj/effect/floor_decal/corner/green/mono, +/obj/floor_decal/corner/green/mono, /turf/simulated/floor/tiled/dark/monotile, /area/hallway/primary/fourthdeck/aft) "WY" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/port) @@ -15135,7 +15151,7 @@ /area/hallway/primary/fourthdeck/fore) "Xc" = ( /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) @@ -15203,7 +15219,7 @@ dir = 1; pixel_y = -4 }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/storage/primary) "Xl" = ( @@ -15234,31 +15250,30 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "Xm" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 + dir = 4 }, -/turf/simulated/floor/plating, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/forestarboard) "Xn" = ( /turf/simulated/wall/prepainted, /area/hallway/primary/fourthdeck/aft) "Xo" = ( -/obj/effect/floor_decal/corner/mauve{ +/obj/floor_decal/corner/mauve{ dir = 1 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/fourthdeck/center) "Xr" = ( -/obj/effect/floor_decal/corner/brown/half, +/obj/floor_decal/corner/brown/half, /obj/item/device/radio/intercom{ dir = 4; pixel_x = -21 @@ -15266,28 +15281,34 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/storage/upper) "Xs" = ( -/obj/effect/catwalk_plated, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) -"Xt" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Lounge Fore"; - name = "security camera" - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/lounge) "Xv" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck Hallway - Aft"; + c_tag = "Fourth Deck Hallway - Aft Center"; dir = 1 }, /obj/structure/cable{ @@ -15316,13 +15337,13 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 1 }, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/fore) "XA" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 6 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -15374,7 +15395,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head/deck4) "XF" = ( -/obj/effect/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, @@ -15391,26 +15412,17 @@ pixel_x = -21; req_access = list("ACCESS_TORCH_CREW") }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 4 }, /turf/simulated/floor/tiled, /area/crew_quarters/diplomatic_office) "XI" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/forestarboard) "XL" = ( /obj/structure/disposalpipe/junction{ @@ -15421,16 +15433,16 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/port) "XM" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /turf/simulated/floor/lino, /area/command/captainmess) "XN" = ( -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /obj/machinery/papershredder, /obj/machinery/alarm{ dir = 8; @@ -15442,8 +15454,8 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/deckchief) "XP" = ( -/obj/effect/floor_decal/corner/brown/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/brown/mono, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/disposal, /obj/machinery/firealarm{ dir = 1; @@ -15464,7 +15476,7 @@ opacity = 0 }, /obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/security/hangcheck) "XT" = ( @@ -15485,7 +15497,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad, /obj/structure/cable/green{ d1 = 2; @@ -15496,14 +15508,16 @@ /area/hallway/primary/fourthdeck/center) "XW" = ( /obj/structure/table/woodentable, -/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/chemical_dispenser/bar_soft/full{ + dir = 8 + }, /obj/item/modular_computer/telescreen/preset/generic{ pixel_x = 32 }, /turf/simulated/floor/wood/walnut, /area/crew_quarters/lounge) "XX" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -15514,7 +15528,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled, @@ -15523,8 +15537,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -15555,12 +15569,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) "Yb" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/suit_cycler/security/alt, /turf/simulated/floor/tiled/dark/monotile, /area/eva) @@ -15570,14 +15584,14 @@ /area/maintenance/fourthdeck/aft) "Yd" = ( /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/crew_quarters/lounge) "Ye" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/storage/primary) "Yf" = ( @@ -15585,14 +15599,17 @@ /area/quartermaster/storage/upper) "Yj" = ( /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) "Yk" = ( -/turf/simulated/floor/tiled/monotile, -/area/maintenance/fourthdeck/forestarboard) +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/lino, +/area/crew_quarters/galley) "Yl" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light/small{ dir = 1 }, @@ -15602,7 +15619,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/simulated/floor/tiled/steel_grid, @@ -15619,11 +15636,11 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/center) "Yr" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/steel, /obj/random/junk, /obj/random/junk, @@ -15638,8 +15655,8 @@ pixel_y = 3 }, /obj/item/stack/material/steel, -/obj/effect/floor_decal/corner/brown/half, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/brown/half, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/quartermaster/office) "Yt" = ( @@ -15687,14 +15704,14 @@ name = "south bump"; pixel_y = -24 }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/center) "Yz" = ( /obj/structure/disposalpipe/sortjunction/untagged/flipped, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -15715,12 +15732,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/light, -/obj/machinery/camera/network/fourth_deck{ - c_tag = "Fourth Deck - Ladders"; - dir = 1 - }, /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/aft) "YC" = ( @@ -15745,10 +15758,10 @@ /obj/structure/reagent_dispensers/water_cooler{ dir = 8 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 1 }, /turf/simulated/floor/tiled, @@ -15775,16 +15788,21 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/port) "YG" = ( -/obj/effect/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal, /obj/machinery/firealarm{ dir = 4; pixel_x = 21 }, +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11; + pixel_y = 1 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/laundry) "YH" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/light/small{ @@ -15819,7 +15837,7 @@ /turf/simulated/wall/r_wall/hull, /area/hallway/primary/fourthdeck/fore) "YL" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "top-center" }, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -15830,24 +15848,23 @@ /turf/simulated/floor/tiled/dark, /area/tcommsat/chamber) "YQ" = ( -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" - }, -/obj/structure/railing/mapped{ - dir = 1; - icon_state = "railing0-1" +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "YR" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 1 }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 8 }, /turf/simulated/floor/tiled/dark, @@ -15883,11 +15900,11 @@ /area/maintenance/fourthdeck/starboard) "YX" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techmaint, /area/maintenance/fourthdeck/forestarboard) "YY" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/fourthdeck/starboard) "YZ" = ( @@ -15897,12 +15914,12 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/lounge) "Za" = ( -/obj/structure/table/rack, -/obj/random/donkpocket_box, +/obj/catwalk_plated, /obj/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/tiled, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "Zb" = ( /obj/structure/cable/green{ @@ -15931,7 +15948,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /turf/simulated/floor/plating, /area/hallway/primary/fourthdeck/aft) "Zd" = ( @@ -15948,7 +15965,7 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/foreport) "Zg" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/random/trash, /obj/structure/cable{ d1 = 4; @@ -15958,8 +15975,8 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) "Zj" = ( -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/white{ dir = 8 }, /turf/simulated/floor/tiled, @@ -15978,7 +15995,7 @@ dir = 2; icon_state = "pipe-c" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -15997,16 +16014,16 @@ pixel_x = 4; pixel_y = 3 }, -/obj/item/stack/package_wrap/twenty_five, +/obj/item/stack/package_wrap/cargo_wrap, /obj/item/hand_labeler, -/obj/item/wrapping_paper, +/obj/item/stack/package_wrap/gift_wrap, /obj/machinery/light/spot{ dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, /area/quartermaster/sorting) "Zm" = ( -/obj/effect/floor_decal/corner/brown/half, +/obj/floor_decal/corner/brown/half, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/cable/green{ d1 = 4; @@ -16060,12 +16077,12 @@ /obj/machinery/atmospherics/portables_connector{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/tiled/dark, /area/eva) "Zt" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack{ dir = 8 }, @@ -16075,7 +16092,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/eva) "Zu" = ( -/obj/effect/floor_decal/industrial/warning/full, +/obj/floor_decal/industrial/warning/full, /obj/machinery/conveyor_switch/oneway{ id = "packageSort1" }, @@ -16088,8 +16105,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -16126,7 +16143,7 @@ /turf/simulated/floor/lino, /area/tcommsat/computer) "Zy" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/maintenance/waterstore) "Zz" = ( @@ -16134,7 +16151,7 @@ dir = 8; icon_state = "console" }, -/obj/effect/floor_decal/corner/mauve/mono, +/obj/floor_decal/corner/mauve/mono, /obj/item/device/radio/intercom{ pixel_y = 23 }, @@ -16161,7 +16178,7 @@ /turf/simulated/open, /area/quartermaster/storage/upper) "ZC" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass/civilian, /turf/simulated/floor/tiled/steel_ridged, @@ -16173,11 +16190,11 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/aft) "ZG" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 6 }, -/obj/structure/closet/firecloset, +/obj/machinery/barrier, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/forestarboard) "ZI" = ( @@ -16229,7 +16246,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/fourthdeck/starboard) @@ -16248,7 +16265,7 @@ dir = 1; pixel_y = -24 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -16258,13 +16275,13 @@ /obj/machinery/oxygen_pump{ pixel_x = -32 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/simulated/floor/tiled/dark, /area/hallway/primary/fourthdeck/aft) "ZQ" = ( -/obj/effect/floor_decal/corner/brown/half, +/obj/floor_decal/corner/brown/half, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/green{ d1 = 2; @@ -16280,10 +16297,10 @@ /turf/simulated/floor/tiled/monotile, /area/quartermaster/deckchief) "ZR" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -16296,7 +16313,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/fourthdeck/aft) "ZU" = ( -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -16312,36 +16329,36 @@ /turf/simulated/floor/plating, /area/maintenance/fourthdeck/foreport) "ZX" = ( -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" +/obj/floor_decal/spline/fancy/wood{ + dir = 9 }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/table/woodentable/walnut, +/obj/item/reagent_containers/food/drinks/bottle/premiumwine{ + pixel_x = -6; + pixel_y = 15 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 +/obj/item/reagent_containers/food/drinks/bottle/tadmorwine{ + pixel_x = 3; + pixel_y = 15 }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" +/obj/item/reagent_containers/food/drinks/bottle/champagne{ + pixel_x = -6; + pixel_y = 6 }, -/turf/simulated/floor/plating, -/area/maintenance/fourthdeck/forestarboard) +/obj/item/reagent_containers/food/drinks/bottle/prosecco{ + pixel_x = 3; + pixel_y = 6 + }, +/turf/simulated/floor/lino, +/area/crew_quarters/galley) "ZZ" = ( /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/white{ dir = 8 }, /obj/item/device/radio/intercom{ @@ -29164,7 +29181,7 @@ tv tv LZ PY -PY +pj PY Ct Oh @@ -31408,9 +31425,9 @@ OX sf TJ PE -OS -zS -zS +Or +DQ +DQ DT DT JB @@ -32389,10 +32406,10 @@ aa ak ak SR -Xs -RP +LW RP -Yk +Za +UB er uY Qj @@ -32590,13 +32607,13 @@ aa aa ak ak -UB -LW -bT -Za -Oc er -uY +cn +er +er +er +er +bV Mv VD QX @@ -32792,16 +32809,16 @@ aa aa ak ak -er +Oc bt -er -er -er -er -uY +bH +bT +bT +bT +Xs YQ Qn -QX +zS bo bo fl @@ -32997,11 +33014,11 @@ ak Va Po bV -bI -bI -cn -ZX -yB +af +af +af +af +af XI Xm bo @@ -33198,11 +33215,11 @@ ak ak Rs Mt -uY -af -af -af +bV af +ZX +fb +yB af UC Xh @@ -33225,7 +33242,7 @@ EC mB js Sd -Xt +ET PK Zq Mu @@ -33402,7 +33419,7 @@ Os ep uY af -ao +Yk ao at af @@ -34841,7 +34858,7 @@ CG Wf js Sd -EW +ET PK Pe Qt @@ -40480,7 +40497,7 @@ LU ag ag ZP -ag +xF ag mQ ag @@ -40671,7 +40688,7 @@ UT QM aK UR -bJ +DK sd Xc Xc @@ -41496,7 +41513,7 @@ mS OB QW qC -HP +uO iM uO IC diff --git a/maps/torch/torch3_deck3.dmm b/maps/torch/torch3_deck3.dmm index 27f617f726b44..c22adaccfa3fa 100644 --- a/maps/torch/torch3_deck3.dmm +++ b/maps/torch/torch3_deck3.dmm @@ -13,7 +13,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/catwalk, @@ -83,14 +83,14 @@ /turf/simulated/floor/tiled, /area/vacant/brig) "aq" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, /turf/simulated/floor/tiled, /area/vacant/brig) "ar" = ( -/obj/effect/decal/cleanable/vomit, +/obj/decal/cleanable/vomit, /turf/simulated/floor/tiled, /area/vacant/brig) "as" = ( @@ -109,7 +109,7 @@ /turf/simulated/floor/plating, /area/vacant/brig) "av" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/vacant/brig) "aw" = ( @@ -117,14 +117,14 @@ /turf/simulated/floor/plating, /area/vacant/brig) "ax" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 1 }, /obj/machinery/constructable_frame/computerframe, /turf/simulated/floor/tiled, /area/vacant/brig) "ay" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 1 }, /obj/structure/table/steel_reinforced, @@ -165,24 +165,24 @@ /turf/simulated/floor/plating, /area/vacant/brig) "aG" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 9 }, /obj/structure/closet/secure_closet/brig, /turf/simulated/floor/tiled, /area/vacant/brig) "aH" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 5 }, /obj/machinery/portable_atmospherics/canister/sleeping_agent, /turf/simulated/floor/tiled, /area/vacant/brig) "aI" = ( -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "aJ" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /turf/simulated/floor/tiled, @@ -228,10 +228,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /turf/simulated/floor/tiled, /area/hydroponics) "aQ" = ( @@ -242,10 +242,7 @@ /obj/structure/sign/deck/third{ pixel_y = 32 }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Head" - }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -301,10 +298,7 @@ /turf/space, /area/space) "bc" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Ladders" - }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 4 }, /turf/simulated/floor/tiled, @@ -313,7 +307,7 @@ /turf/simulated/wall/r_wall/hull, /area/thruster/d3starboard) "be" = ( -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular{ density = 0; @@ -325,7 +319,7 @@ /turf/simulated/floor/plating, /area/hydroponics) "bf" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 9 }, /turf/simulated/floor/tiled/steel_grid, @@ -357,13 +351,13 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "bn" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/random/obstruction, /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "bp" = ( /obj/random/torchcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/forestarboard) "bq" = ( @@ -411,14 +405,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/gym) "bx" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Hydroponics - Storage" - }, /obj/machinery/biogenerator, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -428,7 +420,7 @@ dir = 4; pixel_x = -23 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, /turf/simulated/floor/tiled, @@ -449,8 +441,8 @@ c_tag = "Engineering - Hard Storage"; dir = 4 }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/engineering/hardstorage) "bA" = ( @@ -474,7 +466,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "bC" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/machinery/smartfridge/drying_rack, @@ -489,8 +481,8 @@ dir = 4 }, /obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/hydroponics) "bE" = ( @@ -659,7 +651,7 @@ sensor_name = "Oxygen Supply Tank"; sensor_tag = "d3so2_sensor" }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/alarm{ pixel_y = 24 }, @@ -673,16 +665,12 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood/corner, +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, -/obj/machinery/light_switch{ - pixel_x = -24; - pixel_y = 24 - }, -/obj/effect/floor_decal/spline/fancy/wood/corner, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "bR" = ( /obj/machinery/door/firedoor, /obj/structure/cable/green{ @@ -714,13 +702,6 @@ department = "Torch - Chief Steward's Office" }, /obj/item/device/megaphone, -/obj/effect/floor_decal/carpet/green{ - dir = 4 - }, -/obj/effect/floor_decal/carpet/green, -/obj/effect/floor_decal/carpet/green{ - dir = 6 - }, /turf/simulated/floor/carpet/green, /area/crew_quarters/chief_steward) "bY" = ( @@ -729,7 +710,7 @@ "bZ" = ( /obj/random_multi/single_item/runtime, /turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "ca" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -774,7 +755,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /turf/simulated/floor/tiled, /area/hydroponics) "cd" = ( @@ -792,13 +773,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, /area/hydroponics) "ce" = ( -/obj/item/screwdriver, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -818,7 +798,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -844,13 +824,13 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, /turf/simulated/floor/tiled, /area/hydroponics) "cg" = ( -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /turf/simulated/floor/tiled, @@ -868,8 +848,8 @@ pixel_y = 6 }, /obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/hydroponics) "cj" = ( @@ -941,7 +921,6 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "cs" = ( -/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -951,21 +930,25 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, /obj/machinery/door/airlock/civilian{ name = "Galley" }, -/turf/simulated/floor/tiled/steel_ridged, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "ct" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ autoset_access = 0; name = "Officer's Mess"; - req_access = newlist() - }, -/obj/effect/floor_decal/corner/blue/diagonal{ - dir = 4 + req_access = list("ACCESS_TORCH_O_MESS","ACCESS_TORCH_CREW") }, -/obj/machinery/door/firedoor, /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "cu" = ( @@ -979,14 +962,14 @@ /turf/simulated/wall/r_wall/hull, /area/maintenance/thirddeck/aftstarboard) "cw" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "cz" = ( /obj/machinery/photocopier, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 8 }, /turf/simulated/floor/tiled/monotile, @@ -1032,7 +1015,7 @@ /area/maintenance/thirddeck/forestarboard) "cH" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/forestarboard) "cI" = ( @@ -1089,18 +1072,16 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "cL" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/table/marble, -/obj/machinery/reagent_temperature/cooler{ - pixel_y = 4 - }, +/obj/random_multi/single_item/runtime, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "cM" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk, /obj/machinery/disposal, /turf/simulated/floor/tiled/dark, @@ -1154,7 +1135,7 @@ dir = 8; icon_state = "tube1" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/simulated/floor/tiled, @@ -1165,7 +1146,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -1174,7 +1155,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/center) "cT" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/disposalpipe/segment, @@ -1182,27 +1163,21 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "cU" = ( -/obj/structure/table/standard, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, /obj/item/sticky_pad/random, +/obj/structure/table/marble, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "cV" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/center) "cW" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1243,7 +1218,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /turf/simulated/floor/tiled, @@ -1328,7 +1303,7 @@ icon_state = "2-8" }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -1358,21 +1333,21 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "dh" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/vending/sovietsoda, /turf/simulated/floor/tiled/dark, /area/vacant/mess) "di" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/computer/arcade/orion_trail, /turf/simulated/floor/tiled/dark, /area/vacant/mess) "dj" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -1387,7 +1362,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/structure/closet/chefcloset, +/obj/structure/closet/chefcloset_torch, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/galleybackroom) "dl" = ( @@ -1402,7 +1377,7 @@ /area/maintenance/thirddeck/aftstarboard) "do" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/port) "dp" = ( @@ -1439,12 +1414,12 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/hardstorage) "du" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/machinery/light_switch{ pixel_x = 24; - pixel_y = 28 + pixel_y = 26 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) @@ -1485,28 +1460,23 @@ /turf/simulated/floor/plating, /area/command/disperser) "dA" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/machinery/light{ dir = 1 }, /obj/machinery/cooker/fryer, -/obj/machinery/button/blast_door{ - id_tag = "kitchen"; - name = "Kitchen Shutters"; - pixel_y = 24 - }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "dB" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "dC" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -1536,7 +1506,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/security/habcheck) "dF" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/cable/green{ @@ -1550,7 +1520,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "dG" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/structure/table/marble, @@ -1572,10 +1542,10 @@ icon_state = "1-4" }, /obj/machinery/vending/hydronutrients/generic, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /turf/simulated/floor/tiled, /area/hydroponics) "dI" = ( @@ -1614,7 +1584,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hydroponics) "dL" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 4 }, /obj/machinery/light{ @@ -1624,7 +1594,7 @@ /area/hallway/primary/thirddeck/fore) "dM" = ( /obj/machinery/suit_storage_unit/atmos/alt/sol, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/hardstorage) "dN" = ( @@ -1635,11 +1605,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Hydroponics - Aft"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled, /area/hydroponics) "dO" = ( @@ -1648,7 +1614,7 @@ /area/maintenance/thirddeck/starboard) "dP" = ( /obj/machinery/light, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/machinery/power/apc{ @@ -1668,7 +1634,7 @@ icon_state = "1-2" }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -1677,7 +1643,7 @@ pixel_x = 25; req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -1700,36 +1666,36 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "dU" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, -/obj/effect/decal/cleanable/cobweb, +/obj/decal/cleanable/cobweb, /obj/structure/table/steel, /obj/item/storage/box/condimentbottles, /turf/simulated/floor/tiled/dark, /area/vacant/mess) "dV" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/bed/chair/comfy/brown{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, /area/vacant/mess) "dW" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/random_multi/single_item/poppy, /turf/simulated/floor/plating, /area/vacant/mess) "dX" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/item/frame/apc, /turf/simulated/floor/plating, /area/vacant/mess) "dY" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -1772,7 +1738,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/power/sensor{ @@ -1809,10 +1775,10 @@ /turf/simulated/floor/plating, /area/maintenance/substation/thirddeck) "ee" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/visible/fuel{ @@ -1851,18 +1817,14 @@ /area/crew_quarters/gym) "er" = ( /obj/machinery/atmospherics/unary/tank/air, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos/aux) "es" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/structure/table/marble, -/obj/machinery/microwave{ - pixel_x = -1; - pixel_y = 6 - }, +/obj/machinery/vending/dinnerware, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "et" = ( @@ -1885,7 +1847,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/gym) "ex" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -1900,7 +1862,7 @@ id_tag = "kitchen"; name = "Kitchen Shutters" }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/crew_quarters/galley) "ez" = ( @@ -1962,7 +1924,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "eG" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/item/device/radio/intercom/entertainment{ @@ -1988,7 +1950,7 @@ dir = 4; pixel_x = -22 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -2008,14 +1970,14 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/substation/thirddeck) "eL" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, /obj/machinery/power/apc{ @@ -2039,7 +2001,7 @@ /obj/machinery/door/airlock/engineering{ name = "Utility Up" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -2085,12 +2047,12 @@ pixel_x = -21 }, /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 4 }, /turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "eR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -2145,12 +2107,12 @@ /area/crew_quarters/chief_steward) "fc" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/forestarboard) "fd" = ( /obj/machinery/atmospherics/pipe/manifold/visible/cyan, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -2158,7 +2120,7 @@ /turf/simulated/floor/plating, /area/engineering/atmos/aux) "fe" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/random/tech_supply, /obj/random/tech_supply, /obj/structure/table/rack{ @@ -2264,28 +2226,24 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head) "fp" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "fq" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/structure/table/marble, -/obj/machinery/microwave{ - pixel_x = -1; - pixel_y = 6 - }, /obj/item/device/radio/intercom{ pixel_y = 23 }, +/obj/machinery/cooker/grill, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "fr" = ( /obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -2295,7 +2253,7 @@ /turf/simulated/floor/tiled/dark, /area/engineering/hardstorage) "fs" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -2309,16 +2267,16 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "ft" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, /obj/structure/closet/secure_closet/bar_torch, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, /turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "fu" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ @@ -2335,13 +2293,17 @@ /turf/simulated/floor/tiled/steel_ridged, /area/crew_quarters/gym) "fv" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/machinery/cooker/grill, /obj/machinery/firealarm{ pixel_y = 24 }, +/obj/structure/table/marble, +/obj/machinery/microwave{ + pixel_x = -1; + pixel_y = 6 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "fw" = ( @@ -2364,8 +2326,11 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "fy" = ( -/obj/structure/closet/secure_closet/freezer/meat, +/obj/structure/closet/fridge/meat, /obj/item/reagent_containers/food/condiment/barbecue, +/obj/structure/window/basic{ + dir = 1 + }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/galleybackroom) "fz" = ( @@ -2373,7 +2338,7 @@ /turf/simulated/wall/prepainted, /area/crew_quarters/head) "fA" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled/dark, @@ -2403,7 +2368,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -2545,15 +2510,15 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "fO" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/table/marble, /turf/simulated/floor/tiled/dark, /area/vacant/mess) "fP" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/decal/cleanable/dirt, +/obj/floor_decal/corner/red/diagonal, +/obj/decal/cleanable/dirt, /obj/random/junk, /turf/simulated/floor/tiled/dark, /area/vacant/mess) @@ -2563,7 +2528,7 @@ /turf/simulated/floor/plating, /area/vacant/mess) "fR" = ( -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /obj/structure/closet/cabinet, /turf/simulated/floor/tiled/dark, /area/vacant/mess) @@ -2586,7 +2551,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/sleep/cryo) "fT" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/tele_pad, /turf/simulated/floor/tiled/techfloor/grid, /area/teleporter/thirddeck) @@ -2639,7 +2604,7 @@ d2 = 0; icon_state = "16-0" }, -/obj/effect/floor_decal/industrial/warning/full, +/obj/floor_decal/industrial/warning/full, /obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ dir = 1 }, @@ -2666,12 +2631,12 @@ /turf/simulated/floor/plating, /area/thruster/d3starboard) "fZ" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/up, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftstarboard) "ge" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2690,13 +2655,6 @@ }, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/service_break_room) -"gi" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Sanitation Supplies"; - dir = 1 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/janitor/storage) "gk" = ( /obj/machinery/light/small{ dir = 8 @@ -2711,7 +2669,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos/aux) @@ -2719,7 +2677,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos/aux) @@ -2734,7 +2692,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -2751,7 +2709,7 @@ /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/forestarboard) "gq" = ( @@ -2811,27 +2769,24 @@ dir = 1; pixel_y = -22 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "gv" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" }, -/obj/machinery/light{ - dir = 8 - }, /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "gw" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/structure/table/marble, @@ -2859,13 +2814,13 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "gz" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/disposalpipe/junction, @@ -2906,7 +2861,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -2914,7 +2869,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "gE" = ( -/obj/effect/shuttle_landmark/ninja/deck4{ +/obj/shuttle_landmark/ninja/deck4{ name = "3rd Deck, Aft" }, /turf/space, @@ -2930,34 +2885,34 @@ dir = 8 }, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "gG" = ( -/obj/effect/decal/cleanable/flour, +/obj/decal/cleanable/flour, /turf/simulated/floor/plating, /area/vacant/mess) "gH" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, /turf/simulated/floor/plating, /area/vacant/mess) "gI" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/effect/decal/cleanable/flour, +/obj/floor_decal/corner/red/diagonal, +/obj/decal/cleanable/flour, /turf/simulated/floor/tiled/dark, /area/vacant/mess) "gJ" = ( -/obj/structure/closet/secure_closet/freezer/fridge, +/obj/structure/closet/fridge, /obj/random/single/cola, /obj/random/single/cola, /obj/random/single/cola, /obj/random/single/cola, /obj/random/single/cola, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/corner/red/diagonal, +/obj/decal/cleanable/dirt, +/obj/floor_decal/corner/red/diagonal, /turf/simulated/floor/tiled/dark, /area/vacant/mess) "gK" = ( @@ -2990,7 +2945,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head) "gM" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/crew_quarters/gym) "gO" = ( @@ -2999,7 +2954,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head) "gP" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/item/modular_computer/telescreen/preset/engineering{ @@ -3017,7 +2972,7 @@ icon_state = "railing0-1" }, /obj/random/trash, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "gR" = ( @@ -3026,11 +2981,11 @@ }, /obj/item/device/suit_cooling_unit, /obj/item/device/suit_cooling_unit, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, @@ -3054,7 +3009,7 @@ /obj/structure/table/rack, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "gU" = ( @@ -3065,7 +3020,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/monotile, @@ -3089,7 +3044,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/cable/green{ @@ -3100,13 +3055,13 @@ /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "gX" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder, /obj/structure/catwalk, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftstarboard) "gZ" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/machinery/computer/modular/preset/civilian{ dir = 1; icon_state = "console" @@ -3120,7 +3075,7 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/service_break_room) "hd" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/item/stack/cable_coil/single, /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) @@ -3129,7 +3084,7 @@ dir = 4 }, /obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -3166,10 +3121,6 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head) "hk" = ( -/obj/machinery/camera/network/engineering{ - c_tag = "Substation - Third Deck"; - dir = 1 - }, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/substation/thirddeck) @@ -3181,8 +3132,11 @@ /area/crew_quarters/gym) "hm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/closet/secure_closet/freezer/meat, +/obj/structure/closet/fridge/meat, /obj/item/reagent_containers/food/condiment/enzyme, +/obj/structure/window/basic{ + dir = 1 + }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/galleybackroom) "hn" = ( @@ -3205,16 +3159,13 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/galleybackroom) "ho" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/structure/table/marble, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/glass/rag{ - pixel_y = 8 - }, -/obj/machinery/light{ - dir = 8 +/obj/machinery/microwave{ + pixel_x = -1; + pixel_y = 6 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) @@ -3242,65 +3193,52 @@ /turf/simulated/floor/tiled/dark, /area/chapel/office) "hr" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/structure/table/marble, -/obj/item/material/chopping_board, -/obj/item/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 2; - pixel_y = 16 - }, -/obj/item/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -5; - pixel_y = 15 - }, -/obj/item/material/kitchen/rollingpin{ - pixel_x = 3 - }, -/obj/item/reagent_containers/food/condiment/enzyme{ - pixel_x = -11; - pixel_y = 20 - }, /obj/machinery/alarm{ dir = 4; pixel_x = -22 }, +/obj/item/book/manual/chef_recipes{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/sticky_pad/random{ + pixel_x = -8; + pixel_y = 11 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "hs" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/item/material/kitchen/rollingpin{ + pixel_x = 3 }, +/obj/structure/table/marble, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "ht" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "hu" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/disposalpipe/segment, @@ -3311,8 +3249,9 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/table/reinforced, /obj/machinery/jukebox{ - pixel_y = 4 + pixel_y = 21 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) @@ -3325,7 +3264,7 @@ /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "hw" = ( @@ -3341,7 +3280,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /turf/simulated/floor/tiled/white, @@ -3364,7 +3303,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "hy" = ( @@ -3379,7 +3318,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -3391,7 +3330,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -3410,18 +3349,18 @@ }, /area/holodeck/alphadeck) "hB" = ( -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /obj/structure/table/marble, /obj/machinery/chemical_dispenser/bar_soft/full, /turf/simulated/floor/tiled/dark, /area/vacant/mess) "hC" = ( -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /obj/structure/table/marble, /turf/simulated/floor/tiled/dark, /area/vacant/mess) "hD" = ( -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /obj/structure/table/marble, /obj/machinery/reagentgrinder/juicer, /obj/item/reagent_containers/glass/beaker/large, @@ -3453,15 +3392,15 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "hH" = ( -/obj/effect/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -3504,8 +3443,8 @@ /turf/simulated/wall/walnut, /area/crew_quarters/head/sauna) "hM" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/airless, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor, /area/command/disperser) "hN" = ( /obj/random/junk, @@ -3515,7 +3454,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/cable/green{ @@ -3532,9 +3471,17 @@ /obj/structure/window/reinforced/polarized/full, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/head/sauna) +"hQ" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck Hallway - Fore"; + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/fore) "hT" = ( /obj/structure/stairs/west, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, /obj/structure/railing/mapped, @@ -3553,7 +3500,7 @@ /area/hallway/primary/thirddeck/fore) "hY" = ( /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/regular{ density = 0; dir = 4; @@ -3566,7 +3513,7 @@ /area/crew_quarters/service_break_room) "ib" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/forestarboard) "ic" = ( @@ -3601,7 +3548,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, @@ -3615,7 +3562,7 @@ /obj/structure/disposalpipe/up{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/full, +/obj/floor_decal/industrial/warning/full, /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1" @@ -3636,15 +3583,11 @@ /turf/simulated/floor/tiled/monotile, /area/crew_quarters/gym) "ih" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Mess Hall - Cold Room"; - dir = 1 - }, /obj/structure/closet/crate/freezer, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/galleybackroom) "ii" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -3653,6 +3596,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "ij" = ( @@ -3670,7 +3616,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/galleybackroom) "ik" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -3683,7 +3629,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "il" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -3695,10 +3641,13 @@ d2 = 8; icon_state = "2-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "im" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/structure/cable/green{ @@ -3712,6 +3661,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "in" = ( @@ -3725,7 +3678,7 @@ icon_state = "4-8" }, /obj/machinery/light, -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -3741,34 +3694,40 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) "ir" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 + dir = 4 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "is" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/machinery/light/spot{ - dir = 4 +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) @@ -3784,25 +3743,25 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/crew_quarters/mess) "iv" = ( /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "iw" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/light, /obj/structure/ship_munition/disperser_charge/mining, /turf/simulated/floor/tiled/dark, /area/command/disperser) "ix" = ( /obj/machinery/light, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/command/disperser) "iy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -3819,7 +3778,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/head/sauna) "iz" = ( -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/blast/regular/open{ dir = 4; icon_state = "pdoor0"; @@ -3835,7 +3794,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/fuel{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -3926,7 +3885,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, @@ -3937,7 +3896,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/fore) "iL" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, /turf/simulated/floor/tiled, @@ -3953,9 +3912,6 @@ pixel_x = 2; pixel_y = 6 }, -/obj/effect/floor_decal/carpet/green{ - dir = 4 - }, /turf/simulated/floor/carpet/green, /area/crew_quarters/chief_steward) "iO" = ( @@ -4006,7 +3962,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/catwalk, @@ -4047,31 +4003,33 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/galleybackroom) "iX" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 1 }, /obj/machinery/power/apc{ dir = 8; name = "west bump"; pixel_x = -24 }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "iY" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/light{ - dir = 4 +/obj/machinery/button/blast_door{ + id_tag = "bar"; + name = "Bar Shutters"; + pixel_x = 32 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) @@ -4099,7 +4057,7 @@ icon_state = "railing0-1" }, /obj/random/trash, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "jb" = ( @@ -4114,31 +4072,28 @@ /turf/simulated/floor/tiled, /area/crew_quarters/gym) "jc" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "jd" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "je" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "jf" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Mess Hall - Center" - }, /obj/machinery/power/apc{ dir = 1; name = "north bump"; @@ -4180,11 +4135,11 @@ /turf/simulated/floor/tiled/steel_ridged, /area/crew_quarters/safe_room/thirddeck) "ji" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/aft) "jj" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/vending/coffee{ @@ -4214,17 +4169,13 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/head/sauna) "jm" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck - Ladders"; - dir = 1 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "jn" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -4240,7 +4191,7 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 8 }, /turf/simulated/floor/tiled/monotile, @@ -4261,14 +4212,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/hardstorage) "jr" = ( /obj/machinery/floodlight, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "js" = ( @@ -4322,8 +4273,8 @@ /area/maintenance/thirddeck/aftstarboard) "jC" = ( /obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/cobweb, /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "jD" = ( @@ -4337,12 +4288,12 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/effect/floor_decal/corner/yellow, +/obj/floor_decal/corner/yellow, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "jG" = ( /obj/structure/ore_box, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/forestarboard) "jH" = ( @@ -4370,7 +4321,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, @@ -4386,7 +4337,7 @@ pixel_x = 24 }, /obj/structure/closet/secure_closet/atmos_torch, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos/aux) "jL" = ( @@ -4395,7 +4346,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -4405,7 +4356,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "jM" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/catwalk, @@ -4444,7 +4395,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/safe_room/thirddeck) "jQ" = ( -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /turf/simulated/open, /area/security/habcheck) "jR" = ( @@ -4472,8 +4423,8 @@ pixel_x = 28 }, /obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/hydroponics) "jU" = ( @@ -4490,7 +4441,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "jV" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/disposalpipe/segment{ @@ -4510,7 +4461,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "jW" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -4530,10 +4481,10 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "jX" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, -/obj/effect/landmark{ +/obj/landmark{ name = "lightsout" }, /obj/structure/disposalpipe/segment{ @@ -4553,10 +4504,13 @@ /obj/machinery/status_display{ pixel_y = 32 }, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "jY" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/disposalpipe/segment, @@ -4571,7 +4525,7 @@ /turf/simulated/wall/r_wall/hull, /area/maintenance/thirddeck/aftport) "ka" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/table/standard, @@ -4592,7 +4546,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /turf/simulated/floor/tiled/white, @@ -4660,7 +4614,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/blue{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/light/small{ @@ -4673,7 +4627,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/blue{ dir = 6 }, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d3starboard) @@ -4683,7 +4637,7 @@ /area/crew_quarters/head/sauna) "ko" = ( /obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/port) "kp" = ( @@ -4693,7 +4647,7 @@ "kq" = ( /obj/structure/table/rack, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/port) "kr" = ( @@ -4737,9 +4691,6 @@ /obj/structure/bed/chair/comfy/green{ dir = 4 }, -/obj/effect/floor_decal/carpet/green{ - dir = 8 - }, /turf/simulated/floor/carpet/green, /area/crew_quarters/chief_steward) "kx" = ( @@ -4748,11 +4699,11 @@ /area/janitor/storage) "kB" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "kC" = ( @@ -4820,7 +4771,7 @@ /area/engineering/atmos/aux) "kH" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos/aux) "kI" = ( @@ -4842,8 +4793,12 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "kL" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/bar) +/obj/structure/table/marble, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/lino, +/area/crew_quarters/galley) "kM" = ( /obj/machinery/power/apc{ name = "south bump"; @@ -4860,29 +4815,26 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/head/sauna) "kN" = ( -/obj/machinery/light/spot{ - dir = 1 - }, -/obj/effect/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "kO" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ +/obj/floor_decal/spline/fancy/wood/corner{ dir = 8 }, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "kP" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/thirddeck) "kQ" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -4939,7 +4891,7 @@ pixel_y = -4 }, /turf/simulated/wall/prepainted, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "kU" = ( /obj/machinery/atmospherics/portables_connector{ dir = 8 @@ -4968,7 +4920,7 @@ }, /obj/structure/railing/mapped, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/bed/chair/wheelchair, /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) @@ -4989,21 +4941,21 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/binary/pump/on{ dir = 1; target_pressure = 15000 }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) "lb" = ( /obj/random/trash, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "lc" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -5012,7 +4964,7 @@ /turf/simulated/open, /area/crew_quarters/mess) "le" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /obj/structure/noticeboard{ @@ -5024,12 +4976,12 @@ /obj/random/junk, /obj/random/trash, /obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "lg" = ( /obj/structure/closet/crate/internals/fuel, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/firealarm{ pixel_y = 24 }, @@ -5046,7 +4998,7 @@ /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "li" = ( @@ -5077,10 +5029,10 @@ /area/maintenance/thirddeck/aftstarboard) "lk" = ( /obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -5115,7 +5067,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "lt" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/updown, /obj/structure/catwalk, /turf/simulated/floor/tiled/techfloor, @@ -5132,7 +5084,7 @@ dir = 8; pixel_x = 21 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 5 }, /obj/structure/cable/green{ @@ -5150,34 +5102,39 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "lx" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/structure/hygiene/sink/kitchen{ - pixel_y = 21 +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/structure/table/marble, +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "bar"; + name = "Bar Shutters" }, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "ly" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "lz" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/table/standard, @@ -5192,10 +5149,11 @@ /obj/structure/table/standard, /obj/item/material/hatchet, /obj/item/material/minihoe, +/obj/item/screwdriver, /turf/simulated/floor/tiled, /area/hydroponics) "lB" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/bed/chair, @@ -5205,15 +5163,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/thirddeck) "lE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/structure/cable/green{ @@ -5225,10 +5184,10 @@ /area/crew_quarters/safe_room/thirddeck) "lF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 8 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 8 }, /turf/simulated/floor/tiled/techfloor, @@ -5238,7 +5197,7 @@ dir = 9 }, /obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) @@ -5247,7 +5206,7 @@ /turf/simulated/floor/reinforced/hydrogen, /area/thruster/d3starboard) "lJ" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -5274,7 +5233,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/cee{ +/obj/floor_decal/industrial/warning/cee{ dir = 4 }, /turf/simulated/floor/plating, @@ -5290,7 +5249,7 @@ dir = 1; pixel_y = -24 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 10 }, /turf/simulated/floor/tiled/techfloor, @@ -5321,21 +5280,21 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/crew_quarters/cryolocker) "lT" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/emcloset, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftstarboard) "lU" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftstarboard) "lV" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /obj/structure/flora/pottedplant/orientaltree, @@ -5343,14 +5302,14 @@ /area/crew_quarters/observation) "lW" = ( /obj/machinery/vending/hydronutrients/generic, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/observation) "lX" = ( /obj/machinery/seed_storage/garden, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, @@ -5359,7 +5318,7 @@ /obj/structure/table/standard, /obj/item/material/minihoe, /obj/item/material/hatchet, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /obj/machinery/light/spot{ @@ -5370,14 +5329,14 @@ "lZ" = ( /obj/structure/reagent_dispensers/watertank, /obj/item/reagent_containers/glass/bucket, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/observation) "ma" = ( /obj/structure/closet/crate/hydroponics/beekeeping, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, @@ -5395,7 +5354,7 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/service_break_room) "mc" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -5429,7 +5388,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "mf" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -5451,7 +5410,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "mg" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -5474,7 +5433,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "mh" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -5529,21 +5488,16 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/thirddeck/fore) "ml" = ( -/obj/structure/table/standard, -/obj/machinery/button/blast_door{ - id_tag = "bar"; - name = "Bar Shutters"; - pixel_x = -24 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Mess Hall - Bar"; - dir = 4 +/obj/structure/table/marble, +/obj/machinery/light_switch{ + pixel_x = -24; + pixel_y = null }, /turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "mm" = ( /obj/structure/cable/green{ d1 = 1; @@ -5554,26 +5508,26 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "mn" = ( -/obj/structure/table/standard, /obj/machinery/chemical_dispenser/bar_alc/full, +/obj/structure/table/marble, /turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "mo" = ( -/obj/structure/table/standard, /obj/machinery/chemical_dispenser/bar_soft/full, +/obj/structure/table/marble, /turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "mp" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/table/standard, @@ -5581,7 +5535,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "mq" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/table/standard{ @@ -5595,7 +5549,7 @@ d2 = 4; icon_state = "1-4" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "mw" = ( /obj/machinery/computer/arcade, @@ -5618,10 +5572,6 @@ /obj/machinery/alarm{ pixel_y = 24 }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Holodeck Control"; - dir = 8 - }, /turf/simulated/floor/tiled/monotile, /area/holocontrol) "mB" = ( @@ -5630,13 +5580,13 @@ pixel_x = -12; pixel_y = 12 }, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 6 }, /turf/simulated/floor/tiled/dark, /area/chapel/memorial) "mE" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 8 }, /turf/simulated/floor/tiled, @@ -5658,7 +5608,7 @@ /turf/simulated/floor/tiled/monotile, /area/crew_quarters/gym) "mI" = ( -/obj/effect/floor_decal/spline/plain/red, +/obj/floor_decal/spline/plain/red, /obj/structure/window/reinforced, /obj/machinery/light{ dir = 4 @@ -5666,7 +5616,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/gym) "mK" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftstarboard) "mL" = ( @@ -5686,7 +5636,7 @@ /turf/simulated/floor/grass, /area/crew_quarters/observation) "mS" = ( -/obj/effect/floor_decal/spline/plain/red, +/obj/floor_decal/spline/plain/red, /obj/structure/window/reinforced, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -5704,14 +5654,14 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "mU" = ( /obj/machinery/light{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow, +/obj/floor_decal/corner/yellow, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "mV" = ( @@ -5759,13 +5709,13 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "na" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/green/mono, +/obj/floor_decal/corner/green/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/fore) "nb" = ( @@ -5781,36 +5731,31 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "nd" = ( -/obj/structure/table/standard, /obj/machinery/chemical_dispenser/bar_coffee/full{ pixel_y = 3 }, +/obj/structure/table/marble, /turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "nf" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "nh" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -5827,7 +5772,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "ni" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -5839,7 +5784,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "nj" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -5849,7 +5794,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "nk" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/bed/chair{ @@ -5875,17 +5820,17 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "nn" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/holocontrol) "no" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/tiled/dark, /area/engineering/hardstorage) "np" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/structure/flora/pottedplant/stoutbush, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/observation) @@ -5904,7 +5849,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/commissary) "nt" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/computer/HolodeckControl{ dir = 8; linkedholodeck_area = /area/holodeck/alphadeck; @@ -5933,7 +5878,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/observation) "ny" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder, /obj/structure/catwalk, /turf/simulated/floor/tiled/techfloor, @@ -5964,11 +5909,11 @@ dir = 4; id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/reinforced/oxygen, /area/thruster/d3port) "nG" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftstarboard) @@ -5980,7 +5925,7 @@ departmentType = 5; pixel_y = -32 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /obj/machinery/rotating_alarm/security_alarm{ @@ -6014,10 +5959,6 @@ dir = 4; pixel_x = -21 }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Fore Starboard"; - dir = 4 - }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "nQ" = ( @@ -6038,7 +5979,7 @@ icon_state = "2-4" }, /obj/structure/disposalpipe/junction/mirrored, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "nR" = ( @@ -6056,7 +5997,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, /turf/simulated/floor/tiled, @@ -6169,7 +6110,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, /obj/item/device/radio/intercom{ @@ -6183,22 +6124,22 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "ob" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 8 }, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/fore) "oc" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -6212,14 +6153,14 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "oe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /obj/structure/sign/deck/third{ @@ -6235,10 +6176,10 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -6247,15 +6188,15 @@ icon_state = "pipe-c" }, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "oh" = ( -/obj/structure/table/standard, /obj/structure/reagent_dispensers/beerkeg, +/obj/structure/table/marble, /turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "oi" = ( /turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "ok" = ( /obj/machinery/power/apc{ dir = 8; @@ -6275,7 +6216,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled, @@ -6286,16 +6227,16 @@ /area/holocontrol) "on" = ( /obj/structure/dispenser/oxygen, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/engineering/hardstorage) "oo" = ( /obj/machinery/suit_cycler/engineering/alt, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/engineering/hardstorage) "op" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -6334,7 +6275,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "ot" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/power/port_gen/pacman{ sheets = 25 }, @@ -6342,7 +6283,7 @@ /turf/simulated/floor/tiled/techfloor, /area/hallway/primary/thirddeck/fore) "ov" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/machinery/light, @@ -6359,13 +6300,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "oy" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /obj/machinery/light{ @@ -6374,22 +6315,22 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "oz" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, /obj/structure/sign/warning/moving_parts{ pixel_y = 32 }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/command/disperser) "oA" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftstarboard) "oB" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d3starboard) @@ -6408,11 +6349,11 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/structure/closet/secure_closet/hydroponics_torch, -/obj/effect/floor_decal/corner/green{ +/obj/structure/closet/hydroponics_torch, +/obj/floor_decal/corner/green{ dir = 5 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/hydroponics) "oJ" = ( @@ -6460,7 +6401,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "oO" = ( @@ -6486,10 +6427,10 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -6505,19 +6446,19 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "oW" = ( /obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Stairwell"; + c_tag = "Third Deck Hallway - Stairs"; dir = 8 }, /obj/item/device/radio/intercom{ dir = 8; pixel_x = 21 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /turf/simulated/floor/tiled, @@ -6526,7 +6467,7 @@ /obj/structure/bed/chair/wood{ dir = 1 }, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /obj/item/device/radio/intercom{ dir = 1; pixel_y = -28 @@ -6546,20 +6487,20 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ +/obj/floor_decal/spline/fancy/wood/corner{ dir = 1 }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, /obj/machinery/light/spot, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "oZ" = ( /obj/structure/cable/green{ d1 = 4; @@ -6572,14 +6513,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/floor_decal/spline/fancy/wood, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "pa" = ( /obj/structure/cable/green{ d1 = 4; @@ -6595,11 +6537,12 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, +/obj/floor_decal/spline/fancy/wood, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "pb" = ( /obj/structure/cable/green{ d1 = 4; @@ -6615,11 +6558,12 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ +/obj/floor_decal/spline/fancy/wood/corner{ dir = 4 }, +/obj/floor_decal/spline/fancy/wood, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "pc" = ( /obj/structure/window/reinforced{ dir = 1 @@ -6641,10 +6585,13 @@ /obj/machinery/door/window/brigdoor/eastleft{ name = "Bar" }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "pd" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/cable/green{ @@ -6666,7 +6613,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "pe" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/cable/green{ @@ -6690,16 +6637,20 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "pf" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/rotating_alarm/security_alarm{ dir = 1 }, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Mess Hall"; + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "pg" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/light/spot, @@ -6710,13 +6661,9 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "pi" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Mess Hall - Port"; - dir = 1 - }, /obj/machinery/computer/arcade, /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) @@ -6743,7 +6690,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled, @@ -6754,7 +6701,7 @@ /area/hallway/primary/thirddeck/fore) "pm" = ( /obj/machinery/light/small, -/obj/effect/floor_decal/corner/yellow/half, +/obj/floor_decal/corner/yellow/half, /turf/simulated/floor/tiled/dark, /area/engineering/hardstorage) "pn" = ( @@ -6766,7 +6713,7 @@ name = "Habitation Deck Hallway Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/machinery/alarm{ dir = 1; pixel_y = -22 @@ -6809,7 +6756,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 2; d2 = 8; @@ -6830,7 +6777,7 @@ /turf/simulated/floor/plating, /area/thruster/d3port) "pu" = ( -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /obj/machinery/newscaster{ pixel_y = 32 }, @@ -6875,7 +6822,7 @@ dir = 2; icon_state = "pipe-c" }, -/obj/effect/decal/cleanable/cobweb2, +/obj/decal/cleanable/cobweb2, /obj/structure/cable/green{ d1 = 2; d2 = 8; @@ -6907,7 +6854,7 @@ /turf/simulated/floor/tiled/monotile, /area/crew_quarters/gym) "pG" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /turf/simulated/floor/tiled/monotile, /area/crew_quarters/commissary) "pH" = ( @@ -6925,13 +6872,13 @@ /turf/simulated/wall/r_wall/hull, /area/thruster/d3port) "pJ" = ( -/obj/effect/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/wood/walnut, /area/crew_quarters/recreation) "pL" = ( /obj/machinery/vending/games, -/obj/effect/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood, /obj/machinery/light{ dir = 1 }, @@ -6942,7 +6889,7 @@ dir = 8; pixel_x = 24 }, -/obj/effect/floor_decal/corner/paleblue, +/obj/floor_decal/corner/paleblue, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "pO" = ( @@ -6950,11 +6897,11 @@ /area/hallway/primary/thirddeck/fore) "pP" = ( /obj/machinery/light, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 4 }, /turf/simulated/floor/tiled/monotile, @@ -6996,15 +6943,15 @@ id_tag = "bar"; name = "Bar Shutters" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "pW" = ( /obj/structure/sign/double/barsign, /turf/simulated/wall/prepainted, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "pX" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/door/firedoor, @@ -7023,11 +6970,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/crew_quarters/mess) "pZ" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/door/firedoor, @@ -7037,7 +6984,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "qb" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/crew_quarters/mess) "qc" = ( @@ -7087,7 +7034,7 @@ "ql" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) @@ -7095,24 +7042,27 @@ /obj/machinery/light{ dir = 8 }, -/obj/structure/closet/secure_closet/freezer/fridge, +/obj/structure/closet/fridge, +/obj/structure/window/basic{ + dir = 1 + }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/galleybackroom) "qo" = ( -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/crew_quarters/service_break_room) "qp" = ( /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "qq" = ( -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /obj/machinery/light{ dir = 1; icon_state = "tube1" @@ -7124,7 +7074,7 @@ /obj/structure/bed/chair/wood{ dir = 4 }, -/obj/effect/floor_decal/corner/lime/three_quarters{ +/obj/floor_decal/corner/lime/three_quarters{ dir = 8 }, /obj/machinery/alarm{ @@ -7138,7 +7088,7 @@ "qs" = ( /obj/structure/table/woodentable, /obj/item/reagent_containers/food/drinks/glass2/coffeecup, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ @@ -7147,7 +7097,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "qt" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ +/obj/floor_decal/corner/lime/three_quarters{ dir = 1 }, /obj/machinery/vending/cola{ @@ -7182,7 +7132,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "qx" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular{ density = 0; @@ -7203,7 +7153,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/commissary) "qB" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/item/frame/light, /obj/item/light/tube/warm, /turf/simulated/floor/plating, @@ -7223,7 +7173,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/observation) "qG" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, /turf/simulated/floor/wood/walnut, @@ -7243,7 +7193,7 @@ dir = 4 }, /obj/machinery/light, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 8 }, /turf/simulated/floor/tiled, @@ -7266,28 +7216,28 @@ icon_state = "1-2" }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, /turf/simulated/floor/plating, /area/maintenance/thirddeck/port) "qP" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/center) "qQ" = ( /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "qS" = ( /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -7297,10 +7247,7 @@ /turf/simulated/floor/grass, /area/crew_quarters/observation) "qU" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Cryogenic Storage" - }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, /obj/machinery/light{ @@ -7312,7 +7259,7 @@ /obj/machinery/atm{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -7322,10 +7269,10 @@ dir = 4; id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) "qY" = ( @@ -7350,7 +7297,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/thirddeck/aft) "ra" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /obj/machinery/door/airlock/glass/civilian, @@ -7358,7 +7305,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/thirddeck/center) "rb" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -7367,7 +7314,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "rc" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -7375,7 +7322,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "re" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "rf" = ( @@ -7386,7 +7333,7 @@ /obj/machinery/atm{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, /turf/simulated/floor/tiled, @@ -7398,13 +7345,13 @@ /obj/item/device/radio/intercom{ pixel_y = 23 }, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/center) "rk" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /turf/simulated/floor/tiled, @@ -7413,33 +7360,29 @@ /obj/machinery/alarm{ pixel_y = 24 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 1 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "rm" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/structure/table/marble, -/obj/item/sticky_pad/random{ - pixel_x = -9; - pixel_y = 11 - }, /obj/structure/noticeboard{ dir = 4; pixel_x = -31 }, -/obj/item/book/manual/chef_recipes{ - pixel_x = 5; - pixel_y = 3 +/obj/machinery/microwave{ + pixel_x = -1; + pixel_y = 6 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "rp" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/center) "rr" = ( @@ -7452,7 +7395,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, /turf/simulated/floor/tiled, @@ -7464,13 +7407,13 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/aft) "ru" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/machinery/atm{ @@ -7480,10 +7423,7 @@ /area/hallway/primary/thirddeck/aft) "rv" = ( /obj/machinery/hologram/holopad, -/obj/machinery/camera/network/third_deck{ - c_tag = "Holodeck - Center" - }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/alarm{ dir = 4; pixel_x = -23 @@ -7491,7 +7431,7 @@ /turf/simulated/floor/tiled/dark, /area/holocontrol) "rw" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/machinery/light{ @@ -7503,7 +7443,7 @@ /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 5 }, /turf/simulated/floor/tiled, @@ -7526,7 +7466,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/starboard) "rA" = ( -/obj/structure/window/phoronreinforced{ +/obj/structure/window/boron_reinforced{ dir = 8 }, /obj/structure/closet/crate, @@ -7536,14 +7476,14 @@ /obj/item/stack/material/phoron{ amount = 50 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/hardstorage) "rB" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ +/obj/floor_decal/corner/lime/three_quarters{ dir = 1 }, /turf/simulated/floor/tiled, @@ -7555,7 +7495,7 @@ /obj/structure/table/rack{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/inflatable_dispenser, /obj/item/inflatable_dispenser, /obj/item/inflatable_dispenser, @@ -7597,7 +7537,7 @@ /area/command/disperser) "rH" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/item/reagent_containers/glass/bucket, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/starboard) @@ -7627,7 +7567,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /turf/simulated/floor/tiled/white, @@ -7663,7 +7603,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/teleporter/thirddeck) "rR" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /turf/simulated/floor/tiled, @@ -7682,7 +7622,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/tele_beacon, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) @@ -7733,14 +7673,14 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "sc" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /obj/structure/bed/chair, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/fore) "se" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /obj/machinery/power/apc{ @@ -7765,7 +7705,7 @@ icon_state = "1-4" }, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, @@ -7816,7 +7756,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/center) "si" = ( @@ -7840,7 +7780,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/center) "sk" = ( @@ -7856,7 +7796,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/center) "sl" = ( @@ -7882,7 +7822,7 @@ name = "Habitation Deck Hallway Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/center) "sn" = ( @@ -7898,7 +7838,7 @@ dir = 8; icon_state = "pipe-c" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -7927,7 +7867,7 @@ icon_state = "pipe-c" }, /obj/machinery/hologram/holopad, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/center) "sp" = ( @@ -7947,7 +7887,7 @@ name = "Cryogenic Storage"; sort_type = "Cryogenic Storage" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/center) "su" = ( @@ -8004,7 +7944,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/center) "sx" = ( @@ -8020,7 +7960,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/center) "sy" = ( @@ -8041,11 +7981,25 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/center) "sz" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) +"sA" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/table/marble, +/obj/machinery/microwave{ + pixel_x = -1; + pixel_y = 6 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) "sB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -8061,7 +8015,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/center) "sC" = ( @@ -8076,14 +8030,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/aft) "sE" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -8116,11 +8070,11 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/aft) "sG" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -8154,6 +8108,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/lino, /area/crew_quarters/office) "sI" = ( @@ -8181,7 +8136,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/aft) "sL" = ( @@ -8190,7 +8145,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, /turf/simulated/floor/wood/walnut, @@ -8217,7 +8172,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "sP" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -8229,7 +8184,7 @@ /turf/simulated/floor/tiled/dark, /area/engineering/hardstorage) "sQ" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/port) @@ -8268,7 +8223,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "sX" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 6 }, /obj/structure/cable/green{ @@ -8291,7 +8246,7 @@ "tb" = ( /obj/random/obstruction, /obj/random/trash, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "td" = ( @@ -8322,7 +8277,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -8342,7 +8297,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, /turf/simulated/floor/tiled, @@ -8378,12 +8333,12 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "tm" = ( -/obj/random/loot, -/obj/random/loot, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, /obj/random/trash, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) @@ -8398,7 +8353,7 @@ /area/hallway/primary/thirddeck/fore) "ts" = ( /obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Fore Central"; + c_tag = "Third Deck Hallway - Fore Center"; dir = 4 }, /turf/simulated/floor/tiled, @@ -8416,7 +8371,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/starboard) "tv" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled, @@ -8425,7 +8380,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled, @@ -8439,13 +8394,13 @@ dir = 1; pixel_y = -24 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "ty" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -8469,7 +8424,7 @@ /area/hallway/primary/thirddeck/aft) "tC" = ( /obj/machinery/light, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -8478,7 +8433,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/item/device/radio/intercom{ @@ -8492,27 +8447,27 @@ dir = 1; pixel_y = -24 }, -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/center) "tF" = ( /obj/machinery/alarm{ pixel_y = 24 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "tG" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/structure/bed/chair, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/thirddeck) "tH" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/machinery/rotating_alarm/security_alarm{ dir = 1 }, @@ -8525,7 +8480,7 @@ /obj/machinery/computer/guestpass{ pixel_y = -32 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -8534,7 +8489,7 @@ /obj/machinery/atm{ pixel_y = -32 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -8545,14 +8500,11 @@ /area/thruster/d3port) "tL" = ( /obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Center"; - dir = 1 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 + c_tag = "Third Deck Hallway - Fore Starboard"; + dir = 8 }, /turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/center) +/area/hallway/primary/thirddeck/fore) "tN" = ( /obj/structure/bed/chair/pew/left/mahogany, /obj/machinery/light{ @@ -8562,7 +8514,7 @@ /turf/simulated/floor/tiled/dark, /area/chapel/main) "tP" = ( -/obj/effect/floor_decal/corner/red/half, +/obj/floor_decal/corner/red/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/center) "tR" = ( @@ -8580,12 +8532,16 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/structure/extinguisher_cabinet{ pixel_y = -32 }, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck Hallway - Midships Aft"; + dir = 1 + }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "tT" = ( @@ -8613,13 +8569,13 @@ /area/maintenance/thirddeck/foreport) "tW" = ( /obj/machinery/light, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "tX" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/item/taperoll/engineering, /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) @@ -8639,7 +8595,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/port) "ua" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/machinery/alarm{ @@ -8664,7 +8620,7 @@ /turf/simulated/floor/tiled/monotile, /area/crew_quarters/gym) "ue" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -8690,7 +8646,7 @@ /area/maintenance/thirddeck/port) "uh" = ( /obj/machinery/suit_storage_unit/engineering/alt/sol, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/hardstorage) "ui" = ( @@ -8714,7 +8670,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/janitor/storage) "uk" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 10 }, /obj/machinery/rotating_alarm/security_alarm{ @@ -8723,7 +8679,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "ul" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 10 }, /obj/machinery/firealarm{ @@ -8733,7 +8689,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "um" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/fuel, @@ -8743,18 +8699,18 @@ /turf/simulated/wall/r_wall/prepainted, /area/thruster/d3starboard) "uo" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ +/obj/floor_decal/corner/lime/three_quarters{ dir = 4 }, /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 8 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "up" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/shutters{ density = 0; dir = 4; @@ -8793,7 +8749,7 @@ /area/crew_quarters/commissary) "uu" = ( /obj/random/trash, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/structure/sign/ecplaque{ pixel_x = 32 }, @@ -8810,7 +8766,7 @@ /turf/simulated/floor/grass, /area/crew_quarters/observation) "ux" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 4 }, /turf/simulated/floor/tiled, @@ -8823,18 +8779,18 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "uA" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/command/disperser) "uB" = ( /obj/machinery/computer/arcade, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/machinery/light, @@ -8845,13 +8801,13 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /turf/simulated/floor/wood/walnut, /area/crew_quarters/recreation) "uE" = ( -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -8860,7 +8816,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/commissary) "uG" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -8884,7 +8840,7 @@ "uI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ d1 = 1; @@ -8929,16 +8885,16 @@ /turf/simulated/floor/tiled/steel_ridged, /area/security/habcheck) "uO" = ( -/obj/effect/shuttle_landmark/torch/deck4/exploration_shuttle{ +/obj/shuttle_landmark/torch/deck4/exploration_shuttle{ name = "3rd Deck, Fore Port" }, /turf/space, /area/space) "uP" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /turf/simulated/floor/tiled/white, @@ -8962,7 +8918,7 @@ dir = 4; icon_state = "pipe-c" }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/crew_quarters/sleep/cryo) "uS" = ( @@ -8995,6 +8951,14 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/crew_quarters/commissary) +"vb" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/carpet/green, +/area/crew_quarters/chief_steward) "vc" = ( /obj/machinery/light/small{ dir = 1 @@ -9039,7 +9003,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/command/disperser) "vg" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/crew_quarters/office) "vh" = ( @@ -9086,7 +9050,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/port) "vl" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled/techfloor, /area/hallway/primary/thirddeck/fore) @@ -9129,8 +9093,11 @@ name = "Bar Shutters" }, /obj/item/material/ashtray/glass, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "vt" = ( /turf/simulated/wall/r_wall/hull, /area/crew_quarters/observation) @@ -9138,13 +9105,13 @@ /obj/structure/bed/chair/wood{ dir = 4 }, -/obj/effect/floor_decal/corner/lime/three_quarters, +/obj/floor_decal/corner/lime/three_quarters, /obj/item/device/radio/intercom/entertainment{ dir = 1; pixel_y = -28 }, /obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Observation Bubble"; + c_tag = "Third Deck Hallway - Observation"; dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ @@ -9163,7 +9130,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/observation) "vz" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, @@ -9203,10 +9170,10 @@ pixel_x = 21 }, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/railing/mapped, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/center) @@ -9259,10 +9226,10 @@ /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) "vS" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -9278,10 +9245,10 @@ /turf/simulated/floor/tiled/techmaint, /area/crew_quarters/sleep/cryo) "vV" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -9318,7 +9285,7 @@ /turf/simulated/floor/tiled, /area/hydroponics) "wa" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/structure/cable/green{ @@ -9342,7 +9309,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "wf" = ( @@ -9424,7 +9391,7 @@ pixel_y = 24 }, /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -9443,7 +9410,7 @@ pixel_y = 24 }, /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -9459,20 +9426,18 @@ /turf/simulated/floor/tiled/dark, /area/chapel/main) "ww" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/structure/table/marble, -/obj/machinery/reagentgrinder/juicer{ - pixel_y = 11 - }, +/obj/item/material/chopping_board, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "wy" = ( /obj/structure/bed/chair/armchair/brown{ dir = 1 }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ +/obj/floor_decal/spline/fancy/wood/corner{ dir = 4 }, /turf/simulated/floor/wood/walnut, @@ -9495,7 +9460,7 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -9519,7 +9484,7 @@ "wH" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/flora/pottedplant/stoutbush, -/obj/effect/floor_decal/corner/purple/half{ +/obj/floor_decal/corner/purple/half{ dir = 4 }, /turf/simulated/floor/tiled/dark/monotile, @@ -9533,7 +9498,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "wJ" = ( @@ -9545,7 +9510,7 @@ "wK" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/structure/flora/pottedplant/stoutbush, -/obj/effect/floor_decal/corner/purple/half{ +/obj/floor_decal/corner/purple/half{ dir = 8 }, /turf/simulated/floor/tiled/dark/monotile, @@ -9558,7 +9523,7 @@ /area/hallway/primary/thirddeck/fore) "wM" = ( /obj/structure/bed/chair/comfy/black, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, /turf/simulated/floor/wood/walnut, @@ -9573,16 +9538,13 @@ /obj/machinery/atm{ pixel_y = 32 }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Teleporter" - }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "wP" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 25 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 4 }, /turf/simulated/floor/tiled/monotile, @@ -9594,7 +9556,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "wR" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/fore) "wS" = ( @@ -9616,7 +9578,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/crew_quarters/observation) "wT" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 4 }, /turf/simulated/floor/tiled, @@ -9632,7 +9594,7 @@ dir = 1; pixel_y = -32 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -9648,20 +9610,17 @@ dir = 8; pixel_x = 21 }, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/tiled/dark, /area/crew_quarters/sleep/bunk) "wY" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Cryogenic Storage - Fore Starboard"; - dir = 4 - }, /obj/machinery/vending/cola{ dir = 4 }, /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) "xb" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -9680,11 +9639,11 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "xg" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/emcloset, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/port) @@ -9696,7 +9655,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "xi" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular{ density = 0; @@ -9714,7 +9673,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/aft) "xk" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/port) @@ -9737,11 +9696,7 @@ icon_state = "4-8" }, /obj/machinery/seed_storage/garden, -/obj/machinery/camera/network/third_deck{ - c_tag = "Hydroponics - Fore"; - dir = 1 - }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -9772,14 +9727,14 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/forestarboard) "xs" = ( -/obj/effect/floor_decal/chapel{ +/obj/floor_decal/chapel{ dir = 1 }, /obj/structure/bed/chair/pew/mahogany, /turf/simulated/floor/tiled/dark, /area/chapel/main) "xt" = ( -/obj/effect/floor_decal/chapel{ +/obj/floor_decal/chapel{ dir = 4 }, /obj/structure/bed/chair/pew/left/mahogany, @@ -9788,14 +9743,14 @@ "xu" = ( /obj/structure/table/standard, /obj/item/hand_labeler, -/obj/item/stack/package_wrap/twenty_five, +/obj/item/stack/package_wrap/cargo_wrap, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, /turf/simulated/floor/lino, /area/crew_quarters/office) "xv" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -9804,7 +9759,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/hardstorage) "xx" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ +/obj/wallframe_spawn/reinforced/polarized/no_grille{ id = "chapoff_windows" }, /turf/simulated/floor/plating, @@ -9818,7 +9773,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -9826,14 +9781,14 @@ /turf/simulated/floor/tiled/dark, /area/engineering/hardstorage) "xC" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /obj/machinery/rotating_alarm/security_alarm, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/center) "xE" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 4 }, /turf/simulated/floor/tiled, @@ -9842,10 +9797,10 @@ /turf/simulated/floor/tiled/steel_grid, /area/crew_quarters/commissary) "xH" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "xI" = ( @@ -9875,7 +9830,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "xK" = ( @@ -9929,7 +9884,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/simulated/floor/tiled, @@ -9947,7 +9902,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "xR" = ( @@ -9956,7 +9911,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -9990,7 +9945,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -10006,7 +9961,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "xU" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/shutters{ density = 0; dir = 4; @@ -10026,19 +9981,11 @@ }, /turf/simulated/floor/plating, /area/security/habcheck) -"xV" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Saferoom" - }, -/obj/structure/bed/chair, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/safe_room/thirddeck) "xW" = ( /obj/machinery/door/window/brigdoor{ - color = "PURPLE"; dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -10051,8 +9998,8 @@ dir = 1; pixel_y = -25 }, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/emcloset, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) @@ -10079,7 +10026,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) "ya" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/cable/green{ @@ -10095,13 +10042,13 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "yc" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/structure/cable/green{ @@ -10130,7 +10077,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "ye" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -10139,7 +10086,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "yf" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -10148,7 +10095,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "yg" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -10161,14 +10108,14 @@ dir = 8; pixel_x = 25 }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ +/obj/floor_decal/spline/fancy/wood/corner{ dir = 8 }, /turf/simulated/floor/wood/walnut, /area/crew_quarters/recreation) "yk" = ( /obj/machinery/camera/network/third_deck{ - c_tag = "Cryogenic Storage - Aft Starboard"; + c_tag = "Third Deck Cryogenics - Aft"; dir = 8 }, /obj/structure/table/standard, @@ -10181,7 +10128,7 @@ /area/crew_quarters/sleep/cryo) "yp" = ( /obj/structure/ladder, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/railing/mapped{ dir = 4; icon_state = "railing0-1" @@ -10214,14 +10161,14 @@ /turf/simulated/floor/pool, /area/crew_quarters/observation) "yv" = ( -/obj/effect/floor_decal/chapel{ +/obj/floor_decal/chapel{ dir = 8 }, /obj/structure/bed/chair/pew/mahogany, /turf/simulated/floor/tiled/dark, /area/chapel/main) "yw" = ( -/obj/effect/floor_decal/chapel, +/obj/floor_decal/chapel, /obj/structure/bed/chair/pew/left/mahogany, /turf/simulated/floor/tiled/dark, /area/chapel/main) @@ -10237,7 +10184,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "yz" = ( -/obj/effect/floor_decal/spline/fancy/black{ +/obj/floor_decal/spline/fancy/black{ dir = 5 }, /turf/simulated/floor/wood/maple, @@ -10254,21 +10201,12 @@ /obj/item/pen, /turf/simulated/floor/carpet/purple, /area/chapel/office) -"yD" = ( -/obj/machinery/suit_storage_unit/engineering/alt/sol, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - EVA"; - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/hardstorage) "yE" = ( /obj/structure/table/rack, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "yG" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/structure/table/standard, /obj/item/storage/box/glasses/pint, /obj/item/reagent_containers/food/drinks/glass2/carafe, @@ -10278,7 +10216,7 @@ /turf/simulated/wall/prepainted, /area/crew_quarters/observation) "yI" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/structure/table/standard, /obj/item/storage/box/cups, /turf/simulated/floor/tiled/dark/monotile, @@ -10301,7 +10239,7 @@ id_tag = "teleport3"; name = "Third Deck Teleporter Access Shutters" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/teleporter/thirddeck) "yP" = ( @@ -10345,21 +10283,21 @@ /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) "yT" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "yU" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "yV" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -10383,13 +10321,13 @@ }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/landmark{ +/obj/landmark{ name = "Observer-Start" }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "yX" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -10404,7 +10342,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "yY" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -10419,7 +10357,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "yZ" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/structure/cable/green{ @@ -10468,8 +10406,8 @@ icon_state = "4-8" }, /obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/hydroponics) "zh" = ( @@ -10495,13 +10433,13 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "zn" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/machinery/firealarm{ @@ -10514,7 +10452,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -10553,7 +10491,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/structure/cable/green, @@ -10563,14 +10501,14 @@ /turf/simulated/wall/r_wall/prepainted, /area/thruster/d3port) "zz" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/structure/reagent_dispensers/water_cooler{ dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/observation) "zB" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/structure/flora/pottedplant/stoutbush, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1; @@ -10599,7 +10537,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/device/radio/intercom{ pixel_y = 23 }, @@ -10652,13 +10590,20 @@ /turf/simulated/floor/tiled/dark, /area/teleporter/thirddeck) "zM" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) +"zQ" = ( +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) "zR" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/updown, /obj/structure/catwalk, /turf/simulated/floor/tiled/techfloor, @@ -10696,7 +10641,7 @@ dir = 8; pixel_x = 21 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) "zW" = ( @@ -10716,7 +10661,7 @@ /obj/machinery/door/airlock/glass/civilian{ name = "Auxiliary Tool Storage" }, -/obj/effect/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner, /turf/simulated/floor/tiled/steel_ridged, /area/storage/tools) "Ac" = ( @@ -10737,7 +10682,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "Ag" = ( @@ -10760,7 +10705,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/thruster/d3starboard) "Ap" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/simulated/floor/tiled, @@ -10770,7 +10715,7 @@ dir = 4; pixel_x = 24 }, -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/bed/chair{ @@ -10791,17 +10736,17 @@ id_tag = "kitchen"; name = "Kitchen Shutters" }, -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/item/material/bell/glass, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "At" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -10809,10 +10754,10 @@ /area/teleporter/thirddeck) "Au" = ( /obj/machinery/tele_beacon, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -10823,7 +10768,7 @@ /turf/simulated/floor/tiled/dark, /area/teleporter/thirddeck) "AA" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/bed/chair{ @@ -10849,7 +10794,7 @@ /obj/machinery/light/spot{ dir = 1 }, -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/vending/cigarette, @@ -10868,7 +10813,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = 32 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) "AG" = ( @@ -10881,7 +10826,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head) "AH" = ( -/obj/effect/floor_decal/spline/plain/red, +/obj/floor_decal/spline/plain/red, /obj/structure/window/reinforced, /obj/machinery/light{ dir = 8 @@ -10901,7 +10846,7 @@ /obj/machinery/air_sensor{ id_tag = "cChamber3s" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/thruster/d3starboard) "AK" = ( /obj/structure/table/rack{ @@ -10911,23 +10856,20 @@ /obj/random/tech_supply, /obj/random/tech_supply, /obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/firealarm{ pixel_y = 24 }, /turf/simulated/floor/tiled/monotile, /area/storage/tools) "AL" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/vending/generic, /turf/simulated/floor/tiled/monotile, /area/storage/tools) "AM" = ( /obj/structure/closet/toolcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck - Auxillary Storage" - }, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/alarm{ pixel_y = 24 }, @@ -10948,13 +10890,13 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 5 }, /turf/simulated/floor/tiled/dark, /area/chapel/memorial) "AR" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -10980,24 +10922,24 @@ "AT" = ( /obj/structure/reagent_dispensers/watertank, /obj/item/reagent_containers/glass/bucket, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/industrial/outline/grey, +/obj/floor_decal/corner/green{ dir = 5 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/hydroponics) "AV" = ( -/obj/effect/floor_decal/spline/fancy/black{ +/obj/floor_decal/spline/fancy/black{ dir = 9 }, /turf/simulated/floor/wood/maple, /area/chapel/main) "AW" = ( -/obj/effect/floor_decal/spline/fancy/black{ +/obj/floor_decal/spline/fancy/black{ dir = 1 }, /turf/simulated/floor/wood/maple, @@ -11011,12 +10953,12 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftport) "Bb" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/tvalve/mirrored/digital{ dir = 4; id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) "Bc" = ( @@ -11036,7 +10978,7 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/service_break_room) "Bg" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -11059,7 +11001,7 @@ /area/teleporter/thirddeck) "Bk" = ( /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/device/radio/intercom{ dir = 8; pixel_x = 22; @@ -11166,7 +11108,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) "Bw" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/uniform_vendor{ dir = 8 }, @@ -11184,7 +11126,7 @@ /area/crew_quarters/head) "Bz" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/storage/tools) "BA" = ( @@ -11195,7 +11137,7 @@ /turf/simulated/floor/tiled, /area/storage/tools) "BD" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /obj/machinery/firealarm{ @@ -11205,7 +11147,7 @@ /turf/simulated/floor/tiled/monotile, /area/crew_quarters/commissary) "BF" = ( -/obj/effect/floor_decal/spline/fancy/black, +/obj/floor_decal/spline/fancy/black, /obj/item/device/radio/intercom/entertainment{ dir = 1; pixel_y = -28 @@ -11213,7 +11155,7 @@ /turf/simulated/floor/wood/maple, /area/chapel/main) "BG" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, /turf/simulated/floor/tiled, @@ -11228,7 +11170,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head) "BJ" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, /turf/simulated/floor/tiled, @@ -11265,7 +11207,7 @@ /turf/simulated/floor/wood/maple, /area/chapel/main) "BO" = ( -/obj/effect/floor_decal/spline/fancy/black{ +/obj/floor_decal/spline/fancy/black{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -11326,13 +11268,6 @@ dir = 1; icon_state = "console" }, -/obj/effect/floor_decal/carpet/green{ - dir = 8 - }, -/obj/effect/floor_decal/carpet/green, -/obj/effect/floor_decal/carpet/green{ - dir = 10 - }, /obj/machinery/alarm{ dir = 1; pixel_y = -25 @@ -11349,14 +11284,14 @@ name = "combustion chamber blast door control"; pixel_y = -24 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "BZ" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel, @@ -11369,10 +11304,6 @@ /area/hallway/primary/thirddeck/fore) "Cc" = ( /obj/structure/table/standard, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck - Teleporter"; - dir = 1 - }, /turf/simulated/floor/tiled/dark, /area/teleporter/thirddeck) "Cf" = ( @@ -11390,10 +11321,10 @@ /area/teleporter/thirddeck) "Ch" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "Cj" = ( @@ -11406,7 +11337,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) "Ck" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/port) @@ -11429,7 +11360,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/sleep/bunk) "Cp" = ( @@ -11437,7 +11368,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/sleep/bunk) "Cq" = ( @@ -11473,7 +11404,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) "Cs" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -11487,7 +11418,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -11498,7 +11429,7 @@ dir = 8; pixel_x = 22 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) "Cv" = ( @@ -11555,14 +11486,18 @@ /turf/simulated/floor/tiled/monotile, /area/storage/tools) "CB" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/machinery/light, +/obj/structure/table/marble, +/obj/item/reagent_containers/food/condiment/enzyme{ + pixel_x = 6; + pixel_y = 10 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "CD" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 8 }, /turf/simulated/floor/tiled/monotile, @@ -11589,7 +11524,7 @@ /turf/simulated/floor/tiled/monotile, /area/maintenance/thirddeck/starboard) "CI" = ( -/obj/effect/floor_decal/spline/fancy/black{ +/obj/floor_decal/spline/fancy/black{ dir = 10 }, /obj/structure/banner{ @@ -11599,20 +11534,16 @@ /area/chapel/main) "CJ" = ( /obj/machinery/light, -/obj/effect/floor_decal/spline/fancy/black, +/obj/floor_decal/spline/fancy/black, /turf/simulated/floor/wood/maple, /area/chapel/main) "CK" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/bikehorn/rubberducky, /obj/structure/bed/chair/office/light, /turf/simulated/floor/tiled/techfloor, /area/hallway/primary/thirddeck/fore) "CL" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Chapel"; - dir = 4 - }, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -11651,11 +11582,11 @@ name = "Kitchen Shutters" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/crew_quarters/galley) "CP" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/structure/largecrate, /turf/simulated/floor/tiled, /area/maintenance/thirddeck/starboard) @@ -11671,7 +11602,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "CT" = ( /obj/random/trash, @@ -11706,7 +11637,7 @@ /area/maintenance/thirddeck/aftport) "CX" = ( /obj/structure/curtain/open/bed, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor, @@ -11718,7 +11649,7 @@ /area/crew_quarters/safe_room/thirddeck) "CZ" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -11728,7 +11659,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) "Da" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -11744,7 +11675,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "Db" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/disposalpipe/segment{ @@ -11753,7 +11684,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "Dc" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/structure/disposalpipe/segment{ @@ -11775,13 +11706,13 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/effect/landmark{ +/obj/landmark{ name = "lightsout" }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "De" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -11790,7 +11721,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "Df" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -11799,7 +11730,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "Dg" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -11815,11 +11746,11 @@ dir = 4 }, /obj/structure/closet/secure_closet/personal, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) "Di" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular{ density = 0; @@ -11882,7 +11813,7 @@ /obj/structure/extinguisher_cabinet{ pixel_y = -32 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -11944,7 +11875,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/fore) "Dz" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/starboard) @@ -11960,7 +11891,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 5 }, /turf/simulated/floor/tiled/dark, @@ -11987,7 +11918,7 @@ /area/maintenance/thirddeck/port) "DE" = ( /obj/structure/bed/chair/armchair/brown, -/obj/effect/floor_decal/spline/fancy/wood/corner, +/obj/floor_decal/spline/fancy/wood/corner, /turf/simulated/floor/wood/walnut, /area/crew_quarters/recreation) "DF" = ( @@ -12006,7 +11937,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /turf/simulated/floor/plating, /area/command/disperser) "DK" = ( @@ -12021,7 +11952,7 @@ /obj/structure/closet/medical_wall/filled{ pixel_x = 32 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/structure/cable/green{ @@ -12032,7 +11963,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/thirddeck) "DL" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/port) @@ -12052,10 +11983,14 @@ department = "Cryogenic Storage"; pixel_x = -32 }, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck Cryogenics - Fore"; + dir = 4 + }, /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) "DO" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -12068,7 +12003,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "DP" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -12083,7 +12018,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "DQ" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -12118,7 +12053,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "DS" = ( @@ -12145,17 +12080,18 @@ d2 = 2; icon_state = "1-2" }, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/tiled/dark, /area/crew_quarters/service_break_room) "DU" = ( -/obj/machinery/camera/network/command{ - c_tag = "Fire Control - Storage"; +/obj/machinery/camera/network/bridge{ + c_tag = "Fire Control - Munitions"; dir = 4 }, /turf/simulated/floor/tiled/dark, /area/command/disperser) "DV" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 8 }, /obj/structure/bed/chair/comfy/lime, @@ -12163,8 +12099,8 @@ /turf/simulated/floor/tiled, /area/vacant/cabin) "DW" = ( -/obj/effect/floor_decal/corner/lime, -/obj/effect/decal/cleanable/cobweb2, +/obj/floor_decal/corner/lime, +/obj/decal/cleanable/cobweb2, /turf/simulated/floor/tiled, /area/vacant/cabin) "DX" = ( @@ -12172,7 +12108,7 @@ dir = 4; id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/reinforced/oxygen, /area/thruster/d3starboard) "DZ" = ( @@ -12240,7 +12176,7 @@ dir = 4 }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 10 }, @@ -12259,12 +12195,12 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/visible/fuel, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftport) "Eg" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/random/trash, /obj/structure/table/marble, /obj/item/material/kitchen/rollingpin, @@ -12306,7 +12242,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/chapel/office) "Ek" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 4 }, /obj/structure/railing/mapped, @@ -12316,7 +12252,7 @@ /turf/simulated/floor/tiled/dark, /area/command/disperser) "El" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/tiled/techfloor, /area/hallway/primary/thirddeck/fore) @@ -12327,7 +12263,7 @@ /obj/structure/sign/directions/evac{ pixel_y = 3 }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/center) "Ep" = ( @@ -12337,7 +12273,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor, @@ -12347,7 +12283,7 @@ dir = 8; icon_state = "railing0-1" }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "Er" = ( @@ -12362,20 +12298,12 @@ dir = 9 }, /obj/structure/filingcabinet, -/obj/machinery/camera/network/third_deck{ - c_tag = "Chief Steward's Office"; - dir = 1 - }, -/obj/effect/floor_decal/spline/plain/green{ +/obj/floor_decal/spline/plain/green{ dir = 4 }, /turf/simulated/floor/wood/maple, /area/crew_quarters/chief_steward) "Et" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Cryogenic Storage - Fore Port"; - dir = 4 - }, /obj/machinery/vending/coffee{ dir = 4 }, @@ -12383,7 +12311,7 @@ /area/crew_quarters/sleep/cryo) "Ew" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/random_multi/single_item/boombox, /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) @@ -12427,7 +12355,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/port) "EC" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 8 }, /turf/simulated/floor/tiled, @@ -12439,7 +12367,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftport) "EF" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/railing/mapped{ @@ -12454,7 +12382,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "EG" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -12510,15 +12438,6 @@ name = "Chief Steward Office Door Control"; pixel_y = 35 }, -/obj/effect/floor_decal/carpet/green{ - dir = 1 - }, -/obj/effect/floor_decal/carpet/green{ - dir = 8 - }, -/obj/effect/floor_decal/carpet/green{ - dir = 9 - }, /turf/simulated/floor/carpet/green, /area/crew_quarters/chief_steward) "EL" = ( @@ -12539,7 +12458,7 @@ dir = 4 }, /obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/safe_room/thirddeck) "EO" = ( @@ -12565,10 +12484,10 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, @@ -12615,13 +12534,13 @@ /turf/simulated/floor/tiled/techmaint, /area/crew_quarters/sleep/cryo) "EX" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/structure/sign/double/solgovflag/right{ pixel_y = -32 }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -12658,7 +12577,7 @@ /area/crew_quarters/sleep/cryo) "Fe" = ( /obj/structure/ladder/updown, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/light/small{ dir = 8 }, @@ -12679,7 +12598,7 @@ /turf/simulated/floor/plating, /area/vacant/cabin) "Fh" = ( -/obj/effect/floor_decal/corner/lime, +/obj/floor_decal/corner/lime, /obj/random/trash, /turf/simulated/floor/tiled, /area/vacant/cabin) @@ -12713,7 +12632,7 @@ /area/chapel/main) "Fm" = ( /obj/machinery/power/port_gen/pacman, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftport) "Fn" = ( @@ -12723,11 +12642,11 @@ /area/crew_quarters/observation) "Fo" = ( /obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftport) "Fp" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -12769,7 +12688,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/alarm{ dir = 1; pixel_y = -22 @@ -12777,18 +12696,26 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/safe_room/thirddeck) "Fw" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/structure/table/marble, +/obj/machinery/reagentgrinder/juicer{ + pixel_y = 11 + }, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_y = 6 + }, /obj/item/reagent_containers/glass/beaker/large{ pixel_y = 6 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "Fx" = ( -/obj/effect/wallframe_spawn/no_grille, -/turf/simulated/floor/plating, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/lino, /area/crew_quarters/galley) "Fy" = ( /obj/structure/table/rack, @@ -12804,10 +12731,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 5 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -12828,7 +12755,9 @@ pressure_checks_default = 2; use_power = 1 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/thruster/d3port) "FB" = ( /obj/machinery/camera/network/third_deck{ @@ -12859,13 +12788,13 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo) "FE" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/dark, /area/command/disperser) "FG" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -12877,9 +12806,12 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 +/obj/machinery/button/blast_door{ + id_tag = "kitchen"; + name = "Kitchen Shutters"; + pixel_y = -24 }, +/obj/machinery/light, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "FH" = ( @@ -12890,7 +12822,7 @@ /area/maintenance/thirddeck/starboard) "FI" = ( /obj/structure/bookcase, -/obj/effect/decal/cleanable/cobweb, +/obj/decal/cleanable/cobweb, /turf/simulated/floor/tiled/dark, /area/vacant/cabin) "FJ" = ( @@ -12902,7 +12834,7 @@ /turf/simulated/floor/tiled/dark, /area/vacant/cabin) "FL" = ( -/obj/effect/floor_decal/corner/lime, +/obj/floor_decal/corner/lime, /turf/simulated/floor/tiled, /area/vacant/cabin) "FM" = ( @@ -12916,7 +12848,7 @@ /area/vacant/cabin) "FO" = ( /obj/machinery/power/rad_collector, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftport) "FQ" = ( @@ -12924,13 +12856,13 @@ /turf/simulated/floor/grass, /area/crew_quarters/observation) "FR" = ( -/obj/structure/window/phoronreinforced{ +/obj/structure/window/boron_reinforced{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/power/emitter, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -12946,8 +12878,8 @@ pixel_x = 6; pixel_y = -24 }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/engineering/hardstorage) "FU" = ( @@ -12965,7 +12897,7 @@ name = "north bump"; pixel_y = 24 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/crew, /obj/random/maintenance/solgov/clean, /obj/random/maintenance/solgov/clean, @@ -12977,7 +12909,7 @@ dir = 4; pixel_x = 24 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/random/maintenance/clean, /obj/random/maintenance/clean, /obj/random/maintenance/clean, @@ -12985,7 +12917,7 @@ /turf/simulated/floor/tiled/monotile, /area/crew_quarters/cryolocker) "FY" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/machinery/cooker/oven, @@ -13019,7 +12951,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/port) "Gf" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/random/junk, /obj/random/junk, /turf/simulated/floor/tiled/techfloor, @@ -13054,7 +12986,7 @@ /turf/simulated/floor/tiled/dark, /area/vacant/cabin) "Go" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, @@ -13066,29 +12998,29 @@ /area/vacant/cabin) "Gq" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftport) "Gr" = ( /obj/structure/disposalpipe/up{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/cee{ +/obj/floor_decal/industrial/warning/cee{ dir = 8 }, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftport) "Gs" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "Gt" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /obj/structure/closet/hydrant{ @@ -13167,7 +13099,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/crew_quarters/cryolocker) "Gz" = ( @@ -13186,7 +13118,7 @@ icon_state = "4-8" }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/plating, @@ -13208,7 +13140,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/crew_quarters/cryolocker) "GB" = ( @@ -13230,7 +13162,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/crew_quarters/cryolocker) "GC" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -13267,7 +13199,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/galleybackroom) "GF" = ( -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -13324,24 +13256,24 @@ /area/vacant/cabin) "GQ" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/item/reagent_containers/glass/bucket, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftport) "GT" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/foreport) "GU" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/decal/cleanable/cobweb2, /obj/machinery/portable_atmospherics/canister/empty/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/foreport) "GV" = ( /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /obj/machinery/door/blast/shutters{ id_tag = "cs_shutter"; name = "Chief Steward Office Shutters" @@ -13350,7 +13282,7 @@ /area/crew_quarters/chief_steward) "GW" = ( /obj/structure/filingcabinet/chestdrawer, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/foreport) "GY" = ( @@ -13372,7 +13304,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "Hc" = ( @@ -13387,7 +13319,7 @@ dir = 1; icon_state = "railing0-1" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/maintenance/thirddeck/port) "Hf" = ( @@ -13428,7 +13360,7 @@ /area/vacant/cabin) "Hl" = ( /obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/foreport) "Hm" = ( @@ -13459,21 +13391,21 @@ /area/maintenance/thirddeck/port) "Ho" = ( /obj/structure/closet/secure_closet/personal, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 10 }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/crew_quarters/cryolocker) "Hp" = ( /obj/structure/closet/secure_closet/personal, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 10 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/crew_quarters/cryolocker) "Hr" = ( @@ -13502,7 +13434,7 @@ /turf/simulated/floor/tiled, /area/storage/tools) "Hv" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/item/device/radio/intercom/entertainment{ @@ -13580,13 +13512,22 @@ /obj/random/maintenance/solgov, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/port) +"HF" = ( +/obj/floor_decal/corner/green{ + dir = 5 + }, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck Hallway - Midships Fore" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/center) "HG" = ( /obj/structure/largecrate, /obj/random/maintenance/solgov, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/port) "HH" = ( -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -13626,12 +13567,9 @@ /turf/simulated/floor/tiled/steel_ridged, /area/command/disperser) "HL" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 9 }, -/obj/machinery/camera/network/command{ - c_tag = "Fire Control - Access" - }, /turf/simulated/floor/plating, /area/command/disperser) "HM" = ( @@ -13650,7 +13588,7 @@ /turf/simulated/floor/plating, /area/command/disperser) "HO" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 5 }, /obj/structure/cable/green{ @@ -13665,14 +13603,14 @@ /turf/simulated/floor/plating, /area/command/disperser) "HP" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /obj/machinery/light/small, /turf/simulated/floor/plating, /area/command/disperser) "HQ" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/structure/railing/mapped, @@ -13682,7 +13620,7 @@ /turf/simulated/floor/tiled/dark, /area/command/disperser) "HR" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 6 }, /obj/machinery/light/small, @@ -13702,10 +13640,10 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/turf/simulated/floor/tiled/airless, +/turf/simulated/floor/tiled, /area/command/disperser) "HU" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/disposal/deliveryChute{ dir = 4 }, @@ -13716,23 +13654,23 @@ /area/command/disperser) "HV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /turf/simulated/floor/plating, /area/command/disperser) "HW" = ( /turf/simulated/wall/prepainted, /area/command/disperser) "HX" = ( -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /obj/structure/ship_munition/disperser_charge/emp, /turf/simulated/floor/tiled/dark, /area/command/disperser) "HZ" = ( -/obj/effect/floor_decal/industrial/loading, -/turf/simulated/floor/tiled/airless, +/obj/floor_decal/industrial/loading, +/turf/simulated/floor/tiled, /area/command/disperser) "Ia" = ( -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/blast/regular/open{ dir = 4; icon_state = "pdoor0"; @@ -13742,7 +13680,7 @@ /turf/simulated/floor/plating, /area/command/disperser) "Ib" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -13760,13 +13698,13 @@ dir = 1; icon_state = "tube1" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/command/disperser) "Id" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/command/disperser) "Ie" = ( /obj/structure/table/steel, @@ -13783,21 +13721,25 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/machinery/camera/network/bridge{ + c_tag = "Fire Control - Operations"; + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/command/disperser) "Ih" = ( -/obj/effect/floor_decal/industrial/hatch/orange, +/obj/floor_decal/industrial/hatch/orange, /obj/structure/ship_munition/disperser_charge/fire, /turf/simulated/floor/tiled/dark, /area/command/disperser) "Ii" = ( /obj/random/trash, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/cobweb, /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "Ik" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/structure/cable/green{ @@ -13821,37 +13763,33 @@ id_tag = "bsa-core"; name = "OFD Blast Door" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/command/disperser) "In" = ( /obj/machinery/disperser/front{ dir = 8 }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/command/disperser) "Io" = ( /obj/machinery/disperser/middle{ dir = 8 }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/command/disperser) "Ip" = ( /obj/machinery/disperser/back{ dir = 8 }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/command/disperser) "Iq" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "Ir" = ( -/obj/machinery/camera/network/command{ - c_tag = "Fire Control - Controls"; - dir = 4 - }, /obj/machinery/computer/ship/disperser{ dir = 4 }, @@ -13861,7 +13799,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /turf/simulated/floor/plating, /area/command/disperser) "It" = ( @@ -13890,7 +13828,7 @@ /turf/simulated/floor/tiled/dark, /area/chapel/memorial) "Iw" = ( -/obj/effect/floor_decal/industrial/hatch/red, +/obj/floor_decal/industrial/hatch/red, /obj/structure/ship_munition/disperser_charge/explosive, /turf/simulated/floor/tiled/dark, /area/command/disperser) @@ -13931,44 +13869,62 @@ /turf/simulated/floor/plating, /area/command/disperser) "IC" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/techfloor, /area/hallway/primary/thirddeck/fore) "ID" = ( -/obj/random_multi/single_item/punitelly, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/tiled, -/area/vacant/brig) +/area/crew_quarters/gym) "IE" = ( -/obj/random_multi/single_item/punitelly, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/starboard) +/obj/random_multi/single_item/punitelli, +/turf/simulated/floor/carpet, +/area/crew_quarters/recreation) "IF" = ( /obj/structure/sign/poster/torch, /turf/simulated/wall/prepainted, /area/crew_quarters/recreation) "IH" = ( -/obj/structure/table/steel, -/obj/random_multi/single_item/punitelly, -/turf/simulated/floor/tiled/dark, -/area/vacant/cabin) +/obj/random_multi/single_item/punitelli, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head) "II" = ( -/obj/random_multi/single_item/punitelly, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/tiled/dark, -/area/vacant/cabin) +/area/chapel/main) "IJ" = ( -/obj/random_multi/single_item/punitelly, -/obj/structure/railing/mapped{ - dir = 4; - icon_state = "railing0-1" +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/random_multi/single_item/punitelli, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/sleep/cryo) "IK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /turf/simulated/floor/plating, /area/command/disperser) "IL" = ( @@ -14042,7 +13998,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/floor_decal/spline/fancy/wood/corner{ +/obj/floor_decal/spline/fancy/wood/corner{ dir = 1 }, /turf/simulated/floor/wood/walnut, @@ -14072,7 +14028,7 @@ /turf/simulated/wall/r_wall/hull, /area/thruster/d3starboard) "IV" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 9 }, /obj/machinery/rotating_alarm/security_alarm{ @@ -14102,7 +14058,7 @@ /area/maintenance/thirddeck/aftstarboard) "IX" = ( /obj/item/stool/padded, -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/machinery/button/blast_door{ id_tag = "d3fore_shutters"; name = "Garden Shutter Control"; @@ -14120,7 +14076,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/industrial/shutoff{ +/obj/floor_decal/industrial/shutoff{ dir = 4 }, /obj/machinery/atmospherics/valve/shutoff/supply{ @@ -14143,7 +14099,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -14165,7 +14121,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, @@ -14186,14 +14142,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/center) "Jc" = ( -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "Je" = ( @@ -14208,7 +14164,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "Jg" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, /obj/structure/flora/pottedplant/dead, @@ -14218,17 +14174,17 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "Ji" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/center) "Jk" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, @@ -14239,14 +14195,14 @@ dir = 4; id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "Jo" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ @@ -14256,7 +14212,7 @@ /area/thruster/d3starboard) "Jp" = ( /obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -14371,14 +14327,14 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftstarboard) "Jx" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/binary/passive_gate/on{ dir = 4; max_pressure_setting = 30000; target_pressure = 30000; use_power = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light/small, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) @@ -14386,7 +14342,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -14491,7 +14447,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "JH" = ( -/obj/effect/floor_decal/spline/plain/red, +/obj/floor_decal/spline/plain/red, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, @@ -14515,7 +14471,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/thirddeck/aft) "JK" = ( -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, @@ -14537,7 +14493,7 @@ /turf/simulated/open, /area/maintenance/thirddeck/port) "JM" = ( -/obj/effect/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood, /obj/machinery/power/apc{ dir = 1; name = "north bump"; @@ -14564,7 +14520,7 @@ /turf/simulated/floor/tiled/monotile, /area/crew_quarters/chief_steward) "JO" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, @@ -14588,7 +14544,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/aft) "JP" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -14622,7 +14578,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/blue{ dir = 6 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/light/small{ dir = 8 }, @@ -14694,14 +14650,14 @@ /obj/structure/bed/chair/padded/red{ dir = 1 }, -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 8 }, /turf/simulated/floor/tiled/dark/monotile, /area/security/habcheck) "Kd" = ( /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ +/obj/wallframe_spawn/reinforced/polarized/no_grille{ id = "chief_steward_office" }, /turf/simulated/floor/plating, @@ -14722,7 +14678,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 6 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -14731,7 +14687,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/fuel{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -14780,12 +14736,12 @@ icon_state = "4-8" }, /obj/machinery/light, -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /obj/machinery/seed_extractor, /turf/simulated/floor/tiled/monotile, /area/hydroponics) "Ko" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -14800,7 +14756,7 @@ name = "north bump"; pixel_y = 24 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -14837,7 +14793,7 @@ /turf/simulated/floor/plating, /area/thruster/d3port) "Kt" = ( -/obj/effect/floor_decal/corner/lime, +/obj/floor_decal/corner/lime, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -14870,7 +14826,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -14882,7 +14838,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/cable/green{ d1 = 1; d2 = 8; @@ -14892,18 +14848,18 @@ /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) "Ky" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/item/stool/padded, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "Kz" = ( /obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -14917,7 +14873,7 @@ sensor_name = "Oxygen Supply Tank"; sensor_tag = "d3po2_sensor" }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/alarm{ dir = 1; pixel_y = -25 @@ -14932,16 +14888,16 @@ initial_id_tag = "torch_primary_pd" }, /obj/structure/cable/green, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "KC" = ( /turf/simulated/open, /area/maintenance/thirddeck/starboard) "KE" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/visible/fuel{ @@ -14954,7 +14910,7 @@ dir = 4 }, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -14966,10 +14922,10 @@ target_pressure = 30000; use_power = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light/small{ dir = 1 }, @@ -14979,12 +14935,12 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "KI" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/starboard) "KJ" = ( @@ -14998,8 +14954,8 @@ tag_west = 1; tag_west_con = 0.4 }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/warning/full, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/techfloor/grid, /area/thruster/d3starboard) "KK" = ( @@ -15007,24 +14963,24 @@ dir = 8; target_pressure = 15000 }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor/grid, /area/thruster/d3starboard) "KL" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "KM" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "KN" = ( /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 6 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/meter, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) @@ -15032,7 +14988,7 @@ /turf/simulated/wall/ocp_wall, /area/thruster/d3starboard) "KQ" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /obj/structure/disposalpipe/segment{ @@ -15054,7 +15010,7 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "KS" = ( /obj/structure/table/steel, @@ -15075,12 +15031,12 @@ /obj/machinery/newscaster/security_unit{ pixel_y = -32 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/machinery/light, /turf/simulated/floor/tiled/dark/monotile, /area/security/habcheck) "KT" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/light/small{ @@ -15097,8 +15053,8 @@ internal_pressure_bound = 35000; internal_pressure_bound_default = 35000 }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/reinforced, /area/thruster/d3starboard) "KW" = ( /obj/structure/railing/mapped{ @@ -15106,7 +15062,7 @@ icon_state = "railing0-1" }, /obj/random/trash, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/structure/cable/green{ @@ -15117,7 +15073,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/port) "KZ" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/structure/closet/athletic_mixed, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/observation) @@ -15125,16 +15081,16 @@ /turf/simulated/wall/ocp_wall, /area/thruster/d3port) "Lb" = ( +/obj/wallframe_spawn/no_grille, /obj/machinery/door/blast/shutters{ dir = 4; id_tag = "kitchen"; name = "Kitchen Shutters" }, -/obj/effect/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/crew_quarters/galley) "Lc" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/light/small{ @@ -15151,12 +15107,12 @@ internal_pressure_bound = 35000; internal_pressure_bound_default = 35000 }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/reinforced, /area/thruster/d3port) "Lh" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo) "Li" = ( @@ -15164,10 +15120,10 @@ id_tag = "cChamber3pV"; name = "Chamber Vent" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/thruster/d3port) "Lj" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "lightsout" }, /turf/simulated/floor/tiled, @@ -15184,13 +15140,13 @@ "Ll" = ( /obj/machinery/atmospherics/pipe/simple/visible/fuel, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) "Lm" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -15199,13 +15155,13 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) "Lp" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -15215,7 +15171,7 @@ /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) "Lq" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -15249,8 +15205,8 @@ tag_west = 1; tag_west_con = 0.4 }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/warning/full, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/techfloor/grid, /area/thruster/d3port) "Lt" = ( @@ -15258,11 +15214,11 @@ dir = 8; target_pressure = 15000 }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor/grid, /area/thruster/d3port) "Lu" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, @@ -15270,13 +15226,13 @@ /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) "Lw" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -15289,7 +15245,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/aft) "Lx" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/disposalpipe/segment{ @@ -15306,7 +15262,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "Lz" = ( @@ -15344,13 +15300,8 @@ }, /turf/simulated/floor/tiled/steel_ridged, /area/crew_quarters/service_break_room) -"LB" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/thirddeck/foreport) "LC" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, /obj/structure/extinguisher_cabinet{ @@ -15385,11 +15336,11 @@ sensor_name = "Hydrogen Supply Tank"; sensor_tag = "d3sh_sensor" }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "LF" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/structure/disposalpipe/segment, @@ -15432,7 +15383,7 @@ /turf/simulated/floor/tiled/dark, /area/chapel/office) "LK" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/computer/modular/preset/civilian{ dir = 8; icon_state = "console" @@ -15455,13 +15406,13 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head) "LM" = ( -/obj/effect/floor_decal/spline/fancy/black{ +/obj/floor_decal/spline/fancy/black{ dir = 4 }, /turf/simulated/floor/wood/maple, /area/chapel/main) "LN" = ( -/obj/effect/shuttle_landmark/skipjack/deck4{ +/obj/shuttle_landmark/skipjack/deck4{ name = "3rd Deck, Aft Port" }, /turf/space, @@ -15476,8 +15427,8 @@ internal_pressure_bound = 35000; internal_pressure_bound_default = 35000 }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/reinforced, /area/thruster/d3port) "LP" = ( /obj/structure/cable/green{ @@ -15490,7 +15441,7 @@ d2 = 4; icon_state = "2-4" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "LQ" = ( /obj/item/flame/candle{ @@ -15545,7 +15496,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "LV" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -15584,7 +15535,7 @@ /area/maintenance/thirddeck/foreport) "LZ" = ( /obj/machinery/vending/cigarette, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -15600,7 +15551,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "Mb" = ( -/obj/effect/shuttle_landmark/ert/deck4{ +/obj/shuttle_landmark/ert/deck4{ name = "3rd Deck, Starboard" }, /turf/space, @@ -15627,13 +15578,10 @@ pixel_x = 9; pixel_y = -1 }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Service Break Room" - }, /turf/simulated/floor/tiled/dark, /area/crew_quarters/service_break_room) "Md" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/tiled/techfloor, /area/hallway/primary/thirddeck/fore) @@ -15649,30 +15597,30 @@ /turf/simulated/floor/tiled/steel_grid, /area/janitor/storage) "Mg" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/valve/digital{ id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) "Mh" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/item/device/radio/intercom{ dir = 1; pixel_y = -28 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/hardstorage) "Mi" = ( -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "Mj" = ( @@ -15712,13 +15660,13 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled/monotile, /area/hydroponics) "Mp" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -15731,11 +15679,11 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "Ms" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/vending/hotfood, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, /area/vacant/mess) "Mt" = ( @@ -15744,7 +15692,9 @@ injecting = 1; use_power = 1 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/thruster/d3starboard) "Mu" = ( /obj/structure/catwalk, @@ -15761,7 +15711,7 @@ /area/hydroponics) "My" = ( /obj/machinery/jukebox/old, -/obj/effect/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood, /obj/item/device/radio/intercom{ pixel_y = 23 }, @@ -15769,14 +15719,14 @@ /area/crew_quarters/recreation) "Mz" = ( /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "MB" = ( /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, @@ -15791,7 +15741,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "MC" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/structure/table/marble, @@ -15885,10 +15835,7 @@ /area/storage/tools) "MP" = ( /obj/structure/table/woodentable, -/obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/camera/network/third_deck{ - c_tag = "Recreation Room" - }, +/obj/floor_decal/spline/fancy/wood, /turf/simulated/floor/wood/walnut, /area/crew_quarters/recreation) "MR" = ( @@ -15901,13 +15848,13 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "MU" = ( -/obj/effect/floor_decal/corner/yellow/half, +/obj/floor_decal/corner/yellow/half, /turf/simulated/floor/tiled/dark, /area/engineering/hardstorage) "MW" = ( @@ -15916,10 +15863,10 @@ target_pressure = 2000; use_power = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) "MX" = ( @@ -15961,13 +15908,13 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "Nb" = ( -/obj/effect/shuttle_landmark/merc/deck4{ +/obj/shuttle_landmark/merc/deck4{ name = "3rd Deck, Port" }, /turf/space, /area/space) "Nc" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/railing/mapped{ @@ -16008,7 +15955,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/crew_quarters/commissary) "Nj" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/port) @@ -16029,7 +15976,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/center) @@ -16037,7 +15984,7 @@ /obj/structure/bed/chair/armchair/green{ dir = 8 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 4 }, /obj/machinery/light_switch{ @@ -16053,14 +16000,14 @@ /obj/structure/closet/crate/trashcart, /obj/random/junk, /obj/random/junk, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftport) "Ns" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 4 }, /obj/item/device/radio/intercom/department/security{ @@ -16075,17 +16022,17 @@ "Nu" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d3port) "Nw" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/crew_quarters/mess) "Nx" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/crew_quarters/commissary) "Ny" = ( @@ -16118,7 +16065,7 @@ /turf/simulated/floor/carpet/purple, /area/chapel/main) "NA" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/machinery/light{ dir = 1 }, @@ -16128,7 +16075,7 @@ /turf/simulated/wall/r_wall/hull, /area/crew_quarters/commissary) "NE" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 4 }, /turf/simulated/floor/tiled, @@ -16206,16 +16153,16 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "NM" = ( /obj/machinery/jukebox/old, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/vacant/mess) "NN" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 4 }, /obj/structure/disposalpipe/segment{ @@ -16224,8 +16171,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "NO" = ( -/obj/random_multi/single_item/punitelly, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/vacant/mess) "NQ" = ( @@ -16237,7 +16183,9 @@ pressure_checks_default = 2; use_power = 1 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/thruster/d3starboard) "NR" = ( /obj/machinery/light/small{ @@ -16262,10 +16210,10 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/hydroponics) "NV" = ( @@ -16284,10 +16232,10 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "NW" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/random/junk, /turf/simulated/floor/tiled/dark, /area/vacant/mess) @@ -16309,11 +16257,11 @@ use_power = 1; volume_rate = 4000 }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/reinforced, /area/thruster/d3port) "Ob" = ( -/obj/effect/shuttle_landmark/torch/deck4/aquila{ +/obj/shuttle_landmark/torch/deck4/aquila{ name = "3rd Deck, Fore" }, /turf/space, @@ -16325,14 +16273,27 @@ /turf/simulated/floor/tiled, /area/crew_quarters/commissary) "Od" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, /obj/structure/table/marble, -/obj/machinery/cooker/candy{ - pixel_y = 13 +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -6; + pixel_y = 10 }, -/turf/simulated/floor/tiled/white, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 2; + pixel_y = 10 + }, +/obj/item/reagent_containers/glass/rag{ + pixel_x = -3; + pixel_y = 4 + }, +/obj/item/reagent_containers/glass/rag{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/galley) "Oe" = ( /obj/structure/closet/secure_closet/personal, @@ -16343,11 +16304,11 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/gym) "Of" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /obj/structure/bed/chair, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 8 }, /turf/simulated/floor/tiled/monotile, @@ -16368,30 +16329,31 @@ dir = 1 }, /obj/machinery/honey_extractor, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, /area/hydroponics) "Oj" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/steel, /obj/random/maintenance/solgov, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/port) "Ol" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/table/standard, /obj/random_multi/single_item/runtime, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "Om" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -16420,7 +16382,7 @@ /turf/simulated/floor/tiled, /area/hydroponics) "Oq" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -16479,7 +16441,7 @@ /turf/simulated/floor/tiled/dark, /area/vacant/cabin) "Oy" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -16495,7 +16457,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "OB" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/bookcase, @@ -16510,10 +16472,10 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "OC" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -16525,7 +16487,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "OE" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/starboard) @@ -16544,13 +16506,13 @@ /turf/simulated/floor/carpet/purple, /area/chapel/office) "OH" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/valve/digital{ id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "OI" = ( @@ -16561,7 +16523,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/center) "OJ" = ( @@ -16601,7 +16563,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/white, @@ -16620,12 +16582,12 @@ dir = 4; target_pressure = 15000 }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) "OT" = ( /obj/machinery/portable_atmospherics/canister/phoron, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/alarm{ dir = 8; pixel_x = 25 @@ -16636,7 +16598,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/hardstorage) "OU" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, /obj/structure/extinguisher_cabinet{ @@ -16653,19 +16615,15 @@ dir = 1; pixel_y = -4 }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/center) "OX" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, /obj/machinery/vending/boozeomat, /turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "OY" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/machinery/door/airlock/glass/civilian, @@ -16705,7 +16663,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/janitor/storage) "Pd" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/disposalpipe/segment{ @@ -16726,11 +16684,11 @@ /turf/simulated/open, /area/maintenance/thirddeck/port) "Pl" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/command/disperser) "Pn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -16747,7 +16705,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/machinery/beehive, @@ -16764,7 +16722,7 @@ /turf/simulated/floor/tiled/dark, /area/command/disperser) "Pq" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, @@ -16775,19 +16733,29 @@ dir = 4; pixel_x = -23 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 9 }, /obj/structure/stairs/north, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/center) "Ps" = ( -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/structure/bed/chair{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/thirddeck) +"Pu" = ( +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Ladders"; + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/center) "Pv" = ( /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/fore) @@ -16832,14 +16800,14 @@ /area/storage/tools) "PB" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/foreport) "PC" = ( /obj/structure/lattice, /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d3starboard) @@ -16852,7 +16820,7 @@ /turf/simulated/floor/wood/maple, /area/crew_quarters/chief_steward) "PE" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 9 }, /obj/structure/bed/chair, @@ -16862,7 +16830,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/thirddeck) "PF" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/table/steel, @@ -16884,15 +16852,13 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "PH" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/structure/flora/pottedplant/minitree, /obj/machinery/light/spot, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/observation) "PI" = ( -/obj/structure/closet/secure_closet/freezer/kitchen{ - req_access = newlist() - }, +/obj/structure/closet/kitchen, /obj/item/reagent_containers/food/snacks/mint, /obj/item/stack/material/plastic/ten, /turf/simulated/floor/tiled/freezer, @@ -16917,14 +16883,14 @@ internal_pressure_bound = 35000; internal_pressure_bound_default = 35000 }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/reinforced, /area/thruster/d3starboard) "PN" = ( /obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/effect/floor_decal/industrial/hatch/orange, +/obj/floor_decal/industrial/hatch/orange, /obj/machinery/light/small{ dir = 8 }, @@ -16935,7 +16901,7 @@ /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "PO" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -16959,24 +16925,24 @@ /obj/structure/table/rack{ dir = 8 }, -/obj/item/stack/material/glass/phoronrglass{ +/obj/item/stack/material/glass/boron_reinforced{ amount = 20 }, -/obj/item/stack/material/glass/phoronrglass{ +/obj/item/stack/material/glass/boron_reinforced{ amount = 20 }, /obj/item/stack/material/titanium/ten, /obj/item/stack/material/titanium/ten, /obj/item/stack/material/titanium/ten, /obj/item/stack/material/titanium/ten, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/tiled/dark/monotile, /area/engineering/hardstorage) "PT" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ +/obj/floor_decal/corner/lime/three_quarters{ dir = 4 }, /obj/machinery/vending/coffee{ @@ -17008,7 +16974,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/thruster/d3starboard) "PX" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -17017,7 +16983,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/fuel{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/thruster/d3starboard) "Qd" = ( /obj/structure/table/rack, @@ -17025,12 +16991,16 @@ /turf/simulated/floor/tiled/steel_grid, /area/crew_quarters/commissary) "Qe" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/structure/table/marble, +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, -/obj/structure/table/marble, -/obj/random_multi/single_item/runtime, -/turf/simulated/floor/tiled/white, +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "bar"; + name = "Bar Shutters" + }, +/turf/simulated/floor/lino, /area/crew_quarters/galley) "Qf" = ( /obj/structure/hygiene/faucet, @@ -17055,7 +17025,7 @@ name = "combustion chamber blast door control"; pixel_y = 24 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ @@ -17094,7 +17064,7 @@ icon_state = "4-8" }, /obj/structure/table/standard, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/structure/hygiene/sink/kitchen{ @@ -17106,7 +17076,7 @@ /turf/simulated/wall/r_wall/hull, /area/command/disperser) "Qr" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel, @@ -17124,7 +17094,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/fore) "Qu" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/machinery/smartfridge/foods, @@ -17137,7 +17107,7 @@ /area/crew_quarters/galley) "Qv" = ( /obj/machinery/computer/modular/preset/security, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 5 }, /obj/structure/cable/green{ @@ -17154,7 +17124,7 @@ /area/security/habcheck) "Qx" = ( /obj/machinery/computer/modular/preset/security, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -17185,14 +17155,15 @@ dir = 1; pixel_y = -22 }, -/obj/random_multi/single_item/punitelly, +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/thirddeck) "QC" = ( /turf/simulated/floor/tiled/monotile, /area/vacant/brig) "QD" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/machinery/ship_map, @@ -17204,7 +17175,7 @@ dir = 4 }, /obj/item/device/binoculars, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 5 }, /obj/structure/cable/green{ @@ -17232,13 +17203,13 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/hardstorage) "QL" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ship_munition/disperser_charge/mining, /turf/simulated/floor/tiled/dark, /area/command/disperser) @@ -17251,13 +17222,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "QQ" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/crew_quarters/observation) "QR" = ( @@ -17296,7 +17267,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "QV" = ( -/obj/effect/floor_decal/spline/plain/red, +/obj/floor_decal/spline/plain/red, /obj/structure/window/reinforced, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -17316,7 +17287,7 @@ /area/thruster/d3starboard) "QY" = ( /obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/plating, @@ -17325,7 +17296,7 @@ /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/blue, /obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d3port) @@ -17337,7 +17308,7 @@ dir = 4 }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftport) "Rc" = ( @@ -17367,10 +17338,7 @@ /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/camera/network/third_deck{ - dir = 4 - }, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled, /area/crew_quarters/gym) "Rh" = ( @@ -17388,21 +17356,14 @@ /turf/simulated/wall/ocp_wall, /area/thruster/d3port) "Rk" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) -"Rl" = ( -/obj/effect/floor_decal/industrial/hatch, -/obj/structure/closet/crate{ - name = "hermes crate" - }, -/turf/simulated/floor/tiled/dark, -/area/command/disperser) "Rm" = ( /obj/structure/cable/green{ d1 = 4; @@ -17437,7 +17398,7 @@ icon_state = "4-8" }, /obj/machinery/light, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/structure/table/standard, @@ -17451,7 +17412,7 @@ /turf/simulated/floor/tiled, /area/hydroponics) "Ro" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ @@ -17462,7 +17423,7 @@ /turf/simulated/floor/tiled/monotile, /area/crew_quarters/commissary) "Rq" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/structure/table/marble, @@ -17497,7 +17458,7 @@ dir = 1 }, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel, @@ -17523,7 +17484,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "RC" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/structure/disposalpipe/segment{ @@ -17532,6 +17493,19 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) +"RD" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/structure/table/marble, +/obj/item/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/galley) "RE" = ( /obj/machinery/alarm{ pixel_y = 16 @@ -17571,12 +17545,12 @@ dir = 4; id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "RN" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/disposalpipe/segment{ @@ -17614,7 +17588,7 @@ pixel_x = 12; pixel_y = 12 }, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 9 }, /turf/simulated/floor/tiled/dark, @@ -17624,7 +17598,7 @@ dir = 10 }, /obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d3port) @@ -17644,7 +17618,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "RW" = ( @@ -17660,10 +17634,10 @@ /obj/machinery/atmospherics/pipe/manifold/visible/fuel{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/thruster/d3port) "Sc" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -17702,7 +17676,7 @@ id_tag = "cChamber3sV"; name = "Chamber Vent" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/thruster/d3starboard) "Sh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -17726,7 +17700,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/device/radio/intercom{ dir = 4; pixel_x = -21 @@ -17745,7 +17719,7 @@ name = "east bump"; pixel_x = 24 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/structure/cable/green{ d1 = 1; d2 = 8; @@ -17777,14 +17751,14 @@ icon_state = "1-8" }, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/machinery/firealarm{ dir = 1; pixel_y = -26 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/hydroponics) "So" = ( @@ -17808,7 +17782,7 @@ d2 = 4; icon_state = "2-4" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "Sq" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -17836,7 +17810,7 @@ /turf/simulated/open, /area/maintenance/thirddeck/aftstarboard) "Su" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular{ density = 0; @@ -17849,7 +17823,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/aft) "Sv" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -17882,7 +17856,7 @@ /turf/simulated/floor/reinforced/hydrogen, /area/thruster/d3port) "Sz" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, /obj/random/vendor, @@ -17911,7 +17885,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftport) "SE" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) @@ -17975,10 +17949,10 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/alarm{ dir = 4; pixel_x = -23 @@ -17996,13 +17970,13 @@ d2 = 8; icon_state = "0-8" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "SP" = ( -/obj/structure/table/standard, /obj/machinery/fabricator/micro/bartender, +/obj/structure/table/marble, /turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "SS" = ( /obj/structure/disposalpipe/sortjunction/flipped{ dir = 1; @@ -18021,7 +17995,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /turf/simulated/floor/tiled/white, @@ -18036,7 +18010,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/crew_quarters/commissary) "SW" = ( -/obj/effect/floor_decal/spline/fancy/black{ +/obj/floor_decal/spline/fancy/black{ dir = 6 }, /obj/structure/banner{ @@ -18045,24 +18019,18 @@ /turf/simulated/floor/wood/maple, /area/chapel/main) "SX" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/carpet/green{ - dir = 1 - }, -/obj/effect/floor_decal/carpet/green{ - dir = 4 +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" }, -/obj/effect/floor_decal/carpet/green{ - dir = 5 +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" }, -/turf/simulated/floor/carpet/green, -/area/crew_quarters/chief_steward) +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/forestarboard) "SY" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/computer/modular/preset/engineering{ dir = 4; icon_state = "console" @@ -18074,7 +18042,7 @@ dir = 2; icon_state = "pipe-c" }, -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /turf/simulated/floor/tiled/white, @@ -18086,8 +18054,8 @@ icon_state = "4-8" }, /obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/hydroponics) "Te" = ( @@ -18102,7 +18070,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/floor_decal/spline/plain/green{ +/obj/floor_decal/spline/plain/green{ dir = 4 }, /turf/simulated/floor/wood/maple, @@ -18114,20 +18082,14 @@ /turf/simulated/floor/tiled/steel_grid, /area/crew_quarters/commissary) "Tg" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" +/obj/structure/table/marble, +/obj/machinery/reagent_temperature{ + pixel_y = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/floor_decal/spline/fancy/wood{ + dir = 1 }, -/turf/simulated/floor/tiled/white, +/turf/simulated/floor/lino, /area/crew_quarters/galley) "Th" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -18146,10 +18108,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftport) "Tm" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/machinery/chem_master/condimaster{ @@ -18158,7 +18117,7 @@ /turf/simulated/floor/tiled, /area/hydroponics) "Tn" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 5 }, /turf/simulated/floor/tiled, @@ -18173,13 +18132,13 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "Tq" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 1 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "Tr" = ( -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /turf/simulated/floor/tiled/dark, /area/vacant/mess) "Ts" = ( @@ -18198,7 +18157,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head) "Tu" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular{ density = 0; @@ -18235,11 +18194,11 @@ icon_state = "1-2" }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/plating, /area/maintenance/thirddeck/port) "Tx" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/cable/green{ @@ -18283,7 +18242,7 @@ /area/thruster/d3starboard) "TH" = ( /obj/structure/table/marble, -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/machinery/fabricator/micro{ @@ -18310,10 +18269,6 @@ d2 = 8; icon_state = "1-8" }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Computer Lab"; - dir = 1 - }, /turf/simulated/floor/lino, /area/crew_quarters/office) "TN" = ( @@ -18341,26 +18296,26 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/thirddeck/center) "TQ" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/largecrate, /obj/random/maintenance/clean, /obj/random/maintenance/clean, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/port) "TR" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ +/obj/wallframe_spawn/reinforced/polarized/no_grille{ id = "chapel_windows" }, /turf/simulated/floor/plating, /area/chapel/main) "TS" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled/dark, /area/security/habcheck) "TV" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -18368,19 +18323,19 @@ /turf/simulated/floor/tiled/monotile, /area/storage/tools) "TW" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/structure/hygiene/sink/kitchen{ dir = 4; - pixel_x = -30 + pixel_x = -23 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "TX" = ( /obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/hydroponics) "TY" = ( @@ -18388,10 +18343,6 @@ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/camera/network/third_deck{ - c_tag = "Chapel - Chaplain's Office"; - dir = 4 - }, /turf/simulated/floor/tiled/dark, /area/chapel/office) "TZ" = ( @@ -18419,7 +18370,7 @@ /obj/structure/bed/chair/comfy/black{ dir = 1 }, -/obj/effect/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood, /turf/simulated/floor/wood/walnut, /area/crew_quarters/recreation) "Ud" = ( @@ -18433,18 +18384,21 @@ injecting = 1; use_power = 1 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/thruster/d3port) "Ug" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/machinery/vending/dinnerware{ - dir = 8 - }, /obj/machinery/light{ dir = 1 }, +/obj/structure/table/marble, +/obj/machinery/cooker/candy{ + pixel_y = 13 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "Uh" = ( @@ -18455,11 +18409,12 @@ dir = 4 }, /obj/random/date_based/christmas/tree/fountain, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/wood/walnut, /area/crew_quarters/observation) "Ui" = ( /obj/machinery/meter/turf, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/command/disperser) "Um" = ( /obj/machinery/light{ @@ -18473,7 +18428,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -18497,7 +18452,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "Up" = ( @@ -18531,7 +18486,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/structure/disposalpipe/junction{ dir = 4 }, @@ -18555,7 +18510,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -18581,11 +18536,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Chapel - Memorial Room"; - dir = 1 - }, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 5 }, /turf/simulated/floor/tiled/dark, @@ -18609,7 +18560,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/forestarboard) "UA" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -18650,7 +18601,7 @@ /area/vacant/brig) "UE" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light/small{ dir = 1 }, @@ -18670,10 +18621,7 @@ dir = 1; icon_state = "console" }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/machinery/light, @@ -18695,7 +18643,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/recreation) "UK" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/disposalpipe/segment{ @@ -18721,7 +18669,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/mess) "UL" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 6 }, /obj/machinery/button/alternate/door/bolts{ @@ -18733,7 +18681,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/thirddeck) "UM" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /obj/machinery/button/blast_door{ @@ -18746,7 +18694,7 @@ /area/crew_quarters/observation) "UN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated/dark, +/obj/catwalk_plated/dark, /turf/simulated/floor/plating, /area/command/disperser) "UO" = ( @@ -18770,7 +18718,7 @@ pixel_y = -28 }, /obj/machinery/light, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -18785,19 +18733,19 @@ internal_pressure_bound = 35000; internal_pressure_bound_default = 35000 }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/reinforced, /area/thruster/d3starboard) "UU" = ( /obj/machinery/atmospherics/portables_connector{ dir = 8 }, /obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/plating, /area/command/disperser) "UV" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, /turf/simulated/floor/tiled, @@ -18814,7 +18762,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/crew_quarters/cryolocker) "UY" = ( @@ -18846,7 +18794,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "Vc" = ( @@ -18859,7 +18807,7 @@ /turf/simulated/floor/tiled, /area/crew_quarters/gym) "Vd" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -18883,7 +18831,7 @@ /obj/machinery/atmospherics/pipe/zpipe/up/cyan{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/plating, @@ -18895,10 +18843,12 @@ id_tag = "bar"; name = "Bar Shutters" }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "Vi" = ( -/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/green{ @@ -18906,10 +18856,10 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/glass/civilian{ - name = "Galley" +/obj/floor_decal/spline/fancy/wood{ + dir = 9 }, -/turf/simulated/floor/tiled/white, +/turf/simulated/floor/lino, /area/crew_quarters/galley) "Vl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -18923,7 +18873,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /turf/simulated/floor/tiled, @@ -18937,7 +18887,7 @@ /turf/simulated/floor/tiled, /area/hydroponics) "Vn" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 1 }, /obj/machinery/button/blast_door{ @@ -18951,7 +18901,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "Vo" = ( -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/structure/sign/solgov, /obj/machinery/door/blast/regular/open{ dir = 4; @@ -19044,7 +18994,7 @@ /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /turf/simulated/floor/tiled, @@ -19060,14 +19010,14 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "VE" = ( -/obj/effect/floor_decal/corner/green/mono, +/obj/floor_decal/corner/green/mono, /obj/structure/extinguisher_cabinet{ pixel_y = -32 }, /obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/disposal, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/center) @@ -19104,9 +19054,9 @@ /area/hallway/primary/thirddeck/fore) "VI" = ( /obj/structure/ladder, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/catwalk_plated/dark, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/hatch/yellow, +/obj/catwalk_plated/dark, /obj/machinery/light, /obj/machinery/alarm{ dir = 8; @@ -19127,7 +19077,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "VL" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 10 }, /obj/machinery/newscaster{ @@ -19173,7 +19123,7 @@ pixel_x = 5; pixel_y = 28 }, -/obj/effect/floor_decal/corner/grey/border{ +/obj/floor_decal/corner/grey/border{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -19206,7 +19156,7 @@ name = "Hydroponics"; sort_type = "Hydroponics" }, -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /turf/simulated/floor/tiled/white, @@ -19249,17 +19199,17 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/center) "VX" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/random/maintenance/solgov, /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "VY" = ( /obj/structure/stairs/west, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, /turf/simulated/floor/tiled/dark/monotile, @@ -19321,14 +19271,14 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "Wo" = ( /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel, @@ -19358,7 +19308,7 @@ /turf/simulated/open, /area/maintenance/thirddeck/aftport) "Ws" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d3port) @@ -19374,11 +19324,11 @@ sensor_name = "Hydrogen Supply Tank"; sensor_tag = "d3ph_sensor" }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) "Wx" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/structure/closet/hydrant{ @@ -19393,16 +19343,16 @@ /obj/machinery/air_sensor{ id_tag = "cChamber3p" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/thruster/d3port) "Wz" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /turf/simulated/floor/wood/walnut, /area/crew_quarters/recreation) "WA" = ( -/obj/effect/floor_decal/spline/fancy/black{ +/obj/floor_decal/spline/fancy/black{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -19425,7 +19375,7 @@ /turf/simulated/floor/reinforced/hydrogen, /area/thruster/d3starboard) "WD" = ( -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/machinery/door/blast/shutters{ density = 0; dir = 4; @@ -19437,7 +19387,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/fore) "WE" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/machinery/alarm{ @@ -19446,12 +19396,12 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "WF" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "WG" = ( -/obj/effect/floor_decal/corner/grey{ +/obj/floor_decal/corner/grey{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -19461,7 +19411,7 @@ /turf/simulated/floor/tiled/dark, /area/command/disperser) "WH" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -19559,7 +19509,7 @@ /area/janitor/storage) "WY" = ( /obj/structure/bed/chair/wood, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /obj/item/device/radio/intercom{ pixel_y = 23 }, @@ -19627,14 +19577,14 @@ /obj/machinery/atmospherics/binary/pump/on{ target_pressure = 15000 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "Xg" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -19666,7 +19616,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "Xj" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/floodlight, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/port) @@ -19693,17 +19643,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "Xn" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/center) "Xo" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -19726,10 +19676,10 @@ d2 = 2; icon_state = "0-2" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "Xs" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/table/standard{ @@ -19744,7 +19694,7 @@ /area/crew_quarters/mess) "Xt" = ( /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel, @@ -19755,7 +19705,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "Xv" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -19773,7 +19723,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/aft) "Xy" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/access_button{ command = "cycle_exterior"; frequency = 1379; @@ -19781,16 +19731,16 @@ pixel_x = -20; pixel_y = -20 }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/command/disperser) "Xz" = ( /obj/structure/closet/crate/solar, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark/monotile, /area/engineering/hardstorage) "XA" = ( @@ -19807,7 +19757,7 @@ /turf/simulated/floor/tiled/dark, /area/chapel/memorial) "XC" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -19816,7 +19766,7 @@ /obj/machinery/power/port_gen/pacman{ sheets = 25 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/hardstorage) "XD" = ( @@ -19829,7 +19779,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /turf/simulated/floor/tiled/dark, @@ -19850,24 +19800,20 @@ /turf/simulated/floor/lino, /area/crew_quarters/office) "XH" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/simulated/floor/tiled/dark, /area/teleporter/thirddeck) "XJ" = ( -/obj/machinery/camera/network/security{ - c_tag = "Checkpoint - Deck Three"; - dir = 1 - }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/recharger/wallcharger{ dir = 1; pixel_y = -22 @@ -19889,7 +19835,7 @@ /turf/simulated/floor/tiled/dark, /area/command/disperser) "XO" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/bed/chair{ @@ -19909,7 +19855,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/junction{ dir = 4 }, @@ -19920,7 +19866,7 @@ /area/crew_quarters/cryolocker) "XS" = ( /obj/random/torchcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "XT" = ( @@ -19948,7 +19894,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/machinery/door/blast/shutters{ density = 0; dir = 4; @@ -19988,7 +19934,7 @@ /turf/simulated/floor/tiled/dark, /area/chapel/main) "XZ" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/structure/catwalk, @@ -20009,29 +19955,29 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/floor_decal/spline/plain/green{ +/obj/floor_decal/spline/plain/green{ dir = 4 }, /turf/simulated/floor/wood/maple, /area/crew_quarters/chief_steward) "Yd" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 4 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "Ye" = ( /obj/machinery/light/small, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel, @@ -20064,13 +20010,13 @@ /turf/simulated/floor/tiled/steel_grid, /area/janitor/storage) "Yl" = ( -/obj/structure/table/standard, /obj/machinery/reagentgrinder/juicer{ pixel_y = 8 }, /obj/item/reagent_containers/glass/beaker/large, +/obj/structure/table/marble, /turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "Ym" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/green{ @@ -20098,17 +20044,21 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/structure/closet/crate/hydroponics/beekeeping, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/camera/network/third_deck{ + c_tag = "Third Deck - Hydroponics"; + dir = 1 + }, /turf/simulated/floor/tiled, /area/hydroponics) "Yp" = ( /obj/random/junk, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb{ +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/cobweb{ dir = 8 }, /turf/simulated/floor/plating, @@ -20126,29 +20076,21 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) -"Yu" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck Hallway - Commissary" - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/fore) "Yv" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/dark, /area/engineering/hardstorage) "Yx" = ( -/obj/structure/table/standard, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/glass/rag, +/obj/structure/table/marble, /turf/simulated/floor/tiled/dark, -/area/crew_quarters/bar) +/area/crew_quarters/galley) "YA" = ( /obj/structure/lattice, /turf/simulated/floor/reinforced/hydrogen, @@ -20164,7 +20106,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/janitor/storage) "YD" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/structure/cable/green{ @@ -20201,11 +20143,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 6 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/maintenance/thirddeck/port) "YJ" = ( -/obj/effect/floor_decal/corner/red, +/obj/floor_decal/corner/red, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/fore) "YK" = ( @@ -20216,7 +20158,7 @@ /turf/simulated/floor/tiled/monotile, /area/command/disperser) "YN" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "YO" = ( @@ -20236,11 +20178,11 @@ name = "Habitation Deck Hallway Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/center) "YQ" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, /obj/machinery/light{ @@ -20254,11 +20196,11 @@ d2 = 8; icon_state = "1-8" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "YS" = ( /obj/structure/table/woodentable, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ @@ -20271,14 +20213,14 @@ target_pressure = 2000; use_power = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "YU" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /turf/simulated/floor/tiled, @@ -20288,7 +20230,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftstarboard) "YW" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/center) "YX" = ( @@ -20305,7 +20247,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -20340,7 +20282,7 @@ dir = 4; target_pressure = 15000 }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/thruster/d3starboard) "Zd" = ( @@ -20348,7 +20290,7 @@ dir = 5 }, /obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d3port) @@ -20364,11 +20306,11 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/fore) "Zg" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/random/torchcloset, /turf/simulated/floor/tiled/techfloor, /area/maintenance/thirddeck/aftstarboard) @@ -20405,11 +20347,11 @@ /area/maintenance/thirddeck/port) "Zm" = ( /obj/random/trash, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/thirddeck/starboard) "Zn" = ( -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/machinery/vending/fitness{ dir = 1 }, @@ -20426,7 +20368,7 @@ /turf/simulated/wall/prepainted, /area/hallway/primary/thirddeck/fore) "Zp" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/machinery/power/apc{ @@ -20438,7 +20380,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/thirddeck) "Zq" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, /obj/machinery/jukebox/old, @@ -20453,10 +20395,7 @@ dir = 1; icon_state = "console" }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /turf/simulated/floor/wood/walnut, @@ -20481,7 +20420,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/thirddeck/aft) "Zx" = ( @@ -20510,14 +20449,15 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/port) "ZA" = ( -/obj/structure/railing/mapped{ - dir = 8; - icon_state = "railing0-1" +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 }, -/turf/simulated/open, +/obj/structure/ladder, +/obj/catwalk_plated/white, +/turf/simulated/floor/tiled/white, /area/crew_quarters/galley) "ZB" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ +/obj/floor_decal/corner/grey/diagonal{ dir = 4 }, /obj/structure/cable/green{ @@ -20558,7 +20498,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /turf/simulated/floor/tiled/dark, @@ -20573,11 +20513,11 @@ /obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, -/obj/effect/floor_decal/industrial/hatch/orange, +/obj/floor_decal/industrial/hatch/orange, /obj/machinery/light/small{ dir = 8 }, @@ -20587,10 +20527,10 @@ /turf/simulated/floor/tiled/techfloor, /area/thruster/d3port) "ZH" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -20600,8 +20540,8 @@ internal_pressure_bound = 35000; internal_pressure_bound_default = 35000 }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/reinforced, /area/thruster/d3port) "ZJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -20614,7 +20554,7 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "ZK" = ( -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/alarm{ @@ -20631,7 +20571,7 @@ /obj/machinery/newscaster{ pixel_x = 32 }, -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/machinery/light/spot{ @@ -20666,8 +20606,8 @@ use_power = 1; volume_rate = 4000 }, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/reinforced, /area/thruster/d3starboard) "ZV" = ( /obj/structure/railing/mapped, @@ -29893,7 +29833,7 @@ yu rN PH GV -SX +vb iN bT Kd @@ -30482,7 +30422,7 @@ gB gB gB gB -Yu +VU sN yH ma @@ -31285,7 +31225,7 @@ mS pF zj pH -jb +ID Wb jb ur @@ -31319,7 +31259,7 @@ bR Mf uj kC -gi +el eU eU aa @@ -31493,7 +31433,7 @@ UP sI gB Ch -VU +tL WB Sd mU @@ -32713,7 +32653,7 @@ CF CF My qu -qu +IE qu uC IF @@ -33527,7 +33467,7 @@ CF eH wR xR -wR +hQ Bm jR lK @@ -33731,7 +33671,7 @@ qL xT xh Bm -xV +jR NY tG DI @@ -34515,7 +34455,7 @@ aO aO aO cK -bu +SX cG fi cG @@ -34717,8 +34657,8 @@ aO aO aO cK +zQ bu -cG fj gp qh @@ -34740,7 +34680,7 @@ xU dE up Vx -LB +Yb Wq Qz Bm @@ -34919,7 +34859,7 @@ aO aO aO cK -bu +cG dy dy dy @@ -35121,7 +35061,7 @@ aO aO aO cK -bu +bs dy AX Ry @@ -36134,11 +36074,11 @@ ev MC hr rm +sA TW -ho im iX -ev +Od OX SP ml @@ -36347,7 +36287,7 @@ mm nc og oY -kL +ev QD sj wV @@ -36538,12 +36478,12 @@ ev fq uP dG -fp +Rq ww ii -fp -ev -lx +gw +Tg +kN mn Yx nd @@ -36739,12 +36679,12 @@ cc cN fp fp -Od -Qe +fp +fp Fw ii CB -ev +kL kN mo oi @@ -36944,7 +36884,7 @@ fp fp fp fp -Tg +ii iY Fx kO @@ -37142,20 +37082,20 @@ Mx th ev Ug -Rq +FY es fp -gw +RD FG ev -ev -Vg -Vg +lx +Qe +Qe vr Vg Vg pc -kL +ev xE IZ Jc @@ -37547,7 +37487,7 @@ cf cR dH ey -FY +ho fp hs ir @@ -37569,7 +37509,7 @@ vW yd yW vW -vW +IJ vW vW Dd @@ -37750,7 +37690,7 @@ wn xn ey ZA -ZA +fp ht is TH @@ -37952,9 +37892,9 @@ wn Kn ev Lb -CO +Lb cs -ev +Lb ev jX lz @@ -38974,7 +38914,7 @@ nk jc OB fB -Xn +HF sj dC uU @@ -39178,7 +39118,7 @@ fB fB tF sj -tL +dC uU uU uU @@ -39788,7 +39728,7 @@ cV uU fo YK -YK +IH gK TZ hL @@ -41574,18 +41514,18 @@ ae aq ao We -ID +ae ag az ag ag aE -IE +aY aY PP cl dd -IE +aY cl da dD @@ -41809,7 +41749,7 @@ OW IV Pr bf -bf +Pu bg AI BA @@ -42223,7 +42163,7 @@ Ov JV ub ED -II +Fj FN ub ko @@ -42840,11 +42780,11 @@ aI aa Qq Qq -Rl Pp Pp Pp -Rl +Pp +Pp Qq Qq aa @@ -43010,7 +42950,7 @@ xv XC ds uh -yD +uh dM dM eI @@ -44040,7 +43980,7 @@ Do DZ ub Fk -IH +FN Gm GO ub @@ -44649,7 +44589,7 @@ ED ub ub ub -IJ +Tk Tk jZ jZ @@ -44839,7 +44779,7 @@ vn Eh Mj uq -Mj +II XY WA ZW diff --git a/maps/torch/torch4_deck2.dmm b/maps/torch/torch4_deck2.dmm index 212b3df4301d4..096e1edf59274 100644 --- a/maps/torch/torch4_deck2.dmm +++ b/maps/torch/torch4_deck2.dmm @@ -49,7 +49,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, /turf/simulated/floor/tiled, @@ -69,7 +69,7 @@ d2 = 2; icon_state = "0-2" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/auxstarboard) "ai" = ( /obj/structure/cable/yellow{ @@ -77,7 +77,7 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/auxstarboard) "aj" = ( /obj/structure/cable/yellow{ @@ -88,8 +88,8 @@ id = "auxsolarstarboard"; name = "Starboard Auxiliary Solar Array" }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, +/obj/floor_decal/solarpanel, +/turf/simulated/floor, /area/solar/auxstarboard) "ak" = ( /obj/structure/cable/yellow{ @@ -102,7 +102,7 @@ d2 = 4; icon_state = "1-4" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/auxstarboard) "al" = ( /obj/structure/cable/yellow{ @@ -120,7 +120,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/auxstarboard) "am" = ( /obj/structure/cable/yellow{ @@ -128,7 +128,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/auxstarboard) "an" = ( /obj/structure/cable/yellow{ @@ -146,7 +146,7 @@ d2 = 4; icon_state = "2-4" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/auxstarboard) "ao" = ( /obj/structure/cable/yellow{ @@ -164,7 +164,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/auxstarboard) "ap" = ( /obj/structure/cable/yellow{ @@ -177,7 +177,7 @@ d2 = 8; icon_state = "1-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/auxstarboard) "aq" = ( /obj/structure/cable/yellow, @@ -185,8 +185,8 @@ id = "auxsolarstarboard"; name = "Starboard Auxiliary Solar Array" }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, +/obj/floor_decal/solarpanel, +/turf/simulated/floor, /area/solar/auxstarboard) "ar" = ( /obj/machinery/power/solar{ @@ -194,8 +194,8 @@ name = "Starboard Auxiliary Solar Array" }, /obj/structure/cable/yellow, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, +/obj/floor_decal/solarpanel, +/turf/simulated/floor, /area/solar/auxstarboard) "as" = ( /obj/structure/crematorium, @@ -222,7 +222,7 @@ pixel_x = -24; pixel_y = -9 }, -/obj/effect/floor_decal/industrial/hatch/red, +/obj/floor_decal/industrial/hatch/red, /obj/machinery/button/mass_driver{ desc = "A switch used to remotely eject the engine core into space. The vent must be opened to eject the core, otherwise it will explode while still in the ship, causing monumental damage. Only press if core is about to explode."; id_tag = "enginecore"; @@ -248,7 +248,7 @@ dir = 8 }, /obj/item/storage/box/lights/mixed, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/storage/box/lights/mixed, /obj/item/device/lightreplacer, /obj/item/clothing/gloves/thick, @@ -256,7 +256,7 @@ /turf/simulated/floor/tiled, /area/engineering/engineering_bay) "av" = ( -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/space) "aw" = ( /obj/machinery/conveyor_switch/oneway{ @@ -264,7 +264,7 @@ id = "garbage"; name = "disposal conveyor" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/railing/mapped{ dir = 4; icon_state = "railing0-1" @@ -281,12 +281,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/maintenance/seconddeck/aftstarboard) "ay" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/alarm{ @@ -313,7 +308,7 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/auxstarboard) "aB" = ( /obj/machinery/conveyor{ @@ -385,7 +380,7 @@ /obj/structure/disposaloutlet{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -393,7 +388,7 @@ /area/maintenance/disposal) "aJ" = ( /obj/machinery/vending/generic, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/power/apc{ dir = 8; name = "west bump"; @@ -438,10 +433,10 @@ /obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ id_tag = "solar_starboard_pump" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -456,34 +451,34 @@ /obj/item/stock_parts/circuitboard/shield_generator, /obj/item/stock_parts/circuitboard/shield_generator, /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "aN" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stock_parts/circuitboard/helm, /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "aO" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/camera/network/engine{ - c_tag = "Tech Storage - Secure" - }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/machinery/firealarm{ pixel_y = 21 }, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Secure Tech Storage" + }, /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "aP" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stock_parts/circuitboard/borgupload, /obj/item/stock_parts/circuitboard/aiupload, /turf/simulated/floor/tiled/techfloor/grid, @@ -491,7 +486,7 @@ "aQ" = ( /obj/structure/table/rack, /obj/item/caution, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftstarboard) "aR" = ( @@ -508,13 +503,12 @@ /turf/simulated/floor/tiled/dark, /area/medical/morgue) "aT" = ( +/obj/floor_decal/industrial/outline/grey, /obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Morgue" - }, -/obj/machinery/light{ - dir = 1 + c_tag = "Medical - Morgue"; + dir = 4 }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/monotile, /area/medical/morgue) "aU" = ( /obj/structure/morgue{ @@ -524,7 +518,7 @@ /area/medical/morgue) "aV" = ( /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /turf/simulated/floor/plating, @@ -546,7 +540,7 @@ /area/maintenance/seconddeck/aftstarboard) "aY" = ( /obj/structure/closet/crate, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftstarboard) "aZ" = ( @@ -563,7 +557,7 @@ "ba" = ( /obj/structure/closet/crate/trashcart, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftstarboard) "bb" = ( @@ -573,7 +567,7 @@ "bc" = ( /obj/structure/closet/crate, /obj/random/technology_scanner, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/forestarboard) "bd" = ( @@ -588,17 +582,19 @@ /turf/simulated/wall/prepainted, /area/maintenance/seconddeck/central) "bg" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/blast/regular{ dir = 4; id_tag = "prototype_exhaust" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "bh" = ( /obj/structure/table/rack, /obj/random/junk, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/central) "bi" = ( @@ -609,12 +605,12 @@ /obj/random/tech_supply, /obj/random/tech_supply, /obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/central) "bj" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/central) "bk" = ( @@ -634,22 +630,15 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/auxsolarstarboard) "bl" = ( +/obj/machinery/light_switch{ + pixel_x = 6; + pixel_y = 24 + }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Prototype SMES" - }, -/obj/machinery/light_switch{ - pixel_x = 6; - pixel_y = 24 - }, /turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "bm" = ( @@ -672,27 +661,18 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) -"bp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1; - icon_state = "warning" - }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9 - }, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) "bq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/synth/borg_upload) "br" = ( /obj/machinery/alarm{ dir = 4; pixel_x = -23 }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -701,11 +681,11 @@ /obj/machinery/door/airlock/highsecurity{ autoset_access = 0; name = "Secure Tech Storage"; - req_access = list("ACCESS_BRIDGE","ACCESS_TECH_STORAGE") + req_access = list("ACCESS_TORCH_SENIOR_ENG","ACCESS_TECH_STORAGE") }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/door/firedoor, @@ -730,7 +710,7 @@ pixel_x = 24 }, /obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftstarboard) "bw" = ( @@ -742,7 +722,7 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/central) "by" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -750,7 +730,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/medical/morgue) "bz" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/up, /obj/item/device/radio/intercom/department/medbay{ dir = 1; @@ -824,8 +804,8 @@ /area/maintenance/seconddeck/forestarboard) "bG" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/decal/cleanable/cobweb, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/forestarboard) "bH" = ( @@ -836,7 +816,7 @@ /area/maintenance/seconddeck/forestarboard) "bJ" = ( /obj/machinery/barrier, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/central) "bK" = ( @@ -848,7 +828,7 @@ pixel_x = 24 }, /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/central) "bM" = ( @@ -860,17 +840,17 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/sign/warning/airlock{ pixel_y = 32 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/plating, /area/maintenance/auxsolarstarboard) "bN" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/hidden{ @@ -903,10 +883,10 @@ /obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/firealarm{ dir = 4; pixel_x = 26 @@ -914,14 +894,14 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/auxsolarstarboard) "bP" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/maintenance/disposal) "bQ" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/machinery/light/small{ @@ -950,10 +930,10 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "bS" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -963,7 +943,7 @@ dir = 2; icon_state = "pipe-c" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -979,7 +959,7 @@ /area/maintenance/seconddeck/central) "bU" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stock_parts/circuitboard/robotics, /obj/machinery/light/small{ dir = 4 @@ -1067,11 +1047,11 @@ pixel_x = -3; pixel_y = 5 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/alarm{ pixel_y = 24 }, @@ -1079,7 +1059,7 @@ /area/assembly/robotics) "bZ" = ( /obj/structure/closet/crate/plastic, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/device/scanner/health, /obj/item/storage/firstaid/empty, /obj/item/device/assembly/prox_sensor{ @@ -1106,7 +1086,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/assembly/robotics) "ca" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light{ dir = 4 }, @@ -1133,30 +1113,31 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "ce" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "cf" = ( /obj/machinery/oxygen_pump{ pixel_x = 32 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/seconddeck/forestarboard) "cg" = ( -/obj/structure/cable/cyan{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) +/turf/simulated/floor/plating, +/area/synth/borg_upload) "ch" = ( /obj/structure/cable{ d1 = 2; @@ -1219,7 +1200,7 @@ /obj/random/medical, /obj/random/medical, /obj/random/medical, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/central) "cl" = ( @@ -1277,7 +1258,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/disposal) "cr" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stack/material/glass{ amount = 20; pixel_x = -3; @@ -1327,22 +1308,28 @@ /area/assembly/robotics) "cs" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/item/stock_parts/circuitboard/arcade/battle, /obj/item/stock_parts/circuitboard/arcade/orion_trail, /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "ct" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -28 + }, +/obj/structure/table/standard, +/obj/random/maintenance/solgov, +/obj/random/maintenance/solgov, +/obj/random/maintenance/solgov, +/obj/machinery/recharger, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green, +/turf/simulated/floor/tiled/techfloor, +/area/synth/borg_upload) "cu" = ( /obj/machinery/door/window/brigdoor/northleft{ name = "Weapons locker" @@ -1355,7 +1342,7 @@ /turf/simulated/floor/plating, /area/vacant/armory) "cv" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -1370,7 +1357,7 @@ /area/storage/tech) "cx" = ( /obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/assembly/robotics) "cy" = ( @@ -1392,7 +1379,7 @@ /area/assembly/robotics) "cA" = ( /obj/machinery/robotics_fabricator, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/assembly/robotics) "cB" = ( @@ -1402,14 +1389,14 @@ /turf/simulated/wall/prepainted, /area/medical/morgue) "cD" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftstarboard) "cE" = ( /obj/structure/closet/toolcloset, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftstarboard) "cF" = ( @@ -1445,10 +1432,10 @@ pixel_x = 25; pixel_y = 12 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1504,13 +1491,13 @@ /area/maintenance/seconddeck/forestarboard) "cO" = ( /obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/central) "cP" = ( /obj/structure/table/rack, /obj/random/technology_scanner, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/central) "cQ" = ( @@ -1525,7 +1512,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/seconddeck/central) "cS" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1555,10 +1542,6 @@ name = "west bump"; pixel_x = -24 }, -/obj/machinery/camera/network/engineering{ - c_tag = "Solar Control - Starboard"; - dir = 1 - }, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/auxsolarstarboard) @@ -1597,7 +1580,7 @@ /area/maintenance/seconddeck/central) "cZ" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stack/material/plasteel{ amount = 10 }, @@ -1622,7 +1605,7 @@ /turf/simulated/floor/plating, /area/maintenance/disposal) "db" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -1644,7 +1627,7 @@ /area/storage/tech) "de" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/material/twohanded/jack, /obj/item/clothing/gloves/insulated, /obj/item/storage/toolbox/electrical{ @@ -1657,14 +1640,11 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/camera/network/engine{ - c_tag = "Tech Storage - Main" - }, /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "df" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stock_parts/computer/tesla_link, /obj/item/stock_parts/computer/processor_unit, /obj/item/stock_parts/computer/nano_printer, @@ -1681,10 +1661,10 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "dg" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -1693,7 +1673,7 @@ /area/storage/tech) "dh" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stock_parts/circuitboard/autolathe, /obj/item/stock_parts/circuitboard/unary_atmos/cooler, /obj/item/stock_parts/circuitboard/unary_atmos/heater, @@ -1709,7 +1689,7 @@ /area/storage/tech) "di" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stock_parts/circuitboard/rdserver, /obj/machinery/newscaster{ pixel_y = 32 @@ -1717,14 +1697,14 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "dj" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "dk" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -1746,14 +1726,23 @@ /area/assembly/robotics) "dn" = ( /obj/structure/roller_bed, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/rotating_alarm/security_alarm{ dir = 8 }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/elevator) "do" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/decal/cleanable/cobweb2, /obj/structure/table/rack, /obj/random/maintenance/solgov, /turf/simulated/floor/tiled/techfloor, @@ -1789,12 +1778,12 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/seconddeck/forestarboard) "dv" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/up, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/forestarboard) "dw" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, @@ -1826,10 +1815,10 @@ /turf/simulated/wall/prepainted, /area/maintenance/seconddeck/aftstarboard) "dB" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1838,7 +1827,7 @@ /turf/simulated/floor/tiled/techfloor, /area/storage/tech) "dC" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1847,10 +1836,10 @@ /turf/simulated/floor/tiled/techfloor, /area/storage/tech) "dD" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -1883,7 +1872,7 @@ /area/maintenance/seconddeck/aftstarboard) "dH" = ( /obj/structure/closet/crate/med_crate/oxyloss, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light/small{ dir = 8 }, @@ -1934,7 +1923,7 @@ /turf/simulated/open, /area/maintenance/seconddeck/forestarboard) "dQ" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden, @@ -2075,7 +2064,7 @@ dir = 2; icon_state = "pipe-c" }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/seconddeck/central) @@ -2091,7 +2080,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/seconddeck/central) @@ -2111,7 +2100,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/plating, @@ -2156,7 +2145,9 @@ d2 = 4; icon_state = "0-4" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "ei" = ( /obj/structure/reagent_dispensers/fueltank, @@ -2172,7 +2163,7 @@ /turf/simulated/floor/tiled/techfloor, /area/storage/medical) "ek" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -2190,7 +2181,7 @@ /area/storage/tech) "el" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/airlock_electronics/brace, /obj/item/airlock_electronics/brace, /obj/item/airlock_electronics/brace, @@ -2201,7 +2192,7 @@ /area/storage/tech) "em" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/airlock_electronics, /obj/item/airlock_electronics, /obj/item/airlock_electronics, @@ -2211,7 +2202,7 @@ /area/storage/tech) "en" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/module/power_control, /obj/item/module/power_control, /obj/item/module/power_control, @@ -2220,7 +2211,7 @@ /area/storage/tech) "eo" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stock_parts/circuitboard/atmos_alert, /obj/item/stock_parts/circuitboard/powermonitor, /obj/item/stock_parts/circuitboard/stationalert, @@ -2268,14 +2259,16 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/seconddeck/forestarboard) "et" = ( -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, /obj/machinery/power/emitter/gyrotron/anchored{ dir = 8; initial_id_tag = "aux_fusion_plant" }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green, /turf/simulated/floor/reinforced, /area/vacant/prototype/engine) "eu" = ( @@ -2295,7 +2288,7 @@ /area/maintenance/seconddeck/aftstarboard) "ev" = ( /obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftstarboard) "ew" = ( @@ -2306,7 +2299,7 @@ /obj/machinery/power/port_gen/pacman/mrs{ anchored = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/vacant/prototype/engine) "ex" = ( /obj/random/torchcloset, @@ -2331,7 +2324,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/forestarboard) @@ -2391,7 +2384,7 @@ /obj/item/device/radio/intercom{ pixel_y = 23 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/substation/seconddeck) @@ -2417,7 +2410,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/maintenance/seconddeck/central) "eJ" = ( @@ -2427,7 +2420,7 @@ icon_state = "2-8" }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/railing/mapped{ @@ -2450,20 +2443,17 @@ /turf/simulated/open, /area/maintenance/seconddeck/central) "eL" = ( -/obj/machinery/camera/network/engineering{ - c_tag = "Substation - Second Deck" - }, /obj/machinery/power/terminal, /obj/structure/cable{ d2 = 4; icon_state = "0-4" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/substation/seconddeck) "eM" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/machinery/firealarm{ @@ -2500,7 +2490,7 @@ /obj/machinery/alarm{ pixel_y = 24 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/substation/seconddeck) @@ -2540,10 +2530,10 @@ /obj/item/device/integrated_electronics/wirer, /obj/item/device/integrated_electronics/debugger, /obj/structure/table/steel, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light{ dir = 8 }, @@ -2580,11 +2570,7 @@ /area/assembly/robotics) "eV" = ( /obj/machinery/fabricator, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/engineering{ - c_tag = "Robotics - Lower"; - dir = 8 - }, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light{ dir = 4 }, @@ -2593,14 +2579,14 @@ "eW" = ( /obj/structure/disposalpipe/segment, /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stack/material/aluminium/fifty, /obj/item/stack/material/aluminium/fifty, /obj/item/stack/material/ocp/fifty, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "eX" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/plating, @@ -2614,7 +2600,7 @@ icon_state = "1-2" }, /obj/structure/grille, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/plating, @@ -2629,7 +2615,7 @@ /obj/random/powercell, /obj/random/powercell, /obj/item/cell/high, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/simulated/floor/tiled/steel_grid, @@ -2639,7 +2625,7 @@ /obj/machinery/cell_charger, /obj/random/powercell, /obj/random/powercell, -/obj/effect/floor_decal/corner/yellow/half, +/obj/floor_decal/corner/yellow/half, /obj/random/powercell, /turf/simulated/floor/tiled/monotile, /area/engineering/storage) @@ -2662,7 +2648,7 @@ /turf/simulated/floor/plating, /area/vacant/chapel) "fg" = ( -/obj/effect/decal/cleanable/generic, +/obj/decal/cleanable/generic, /turf/simulated/floor/wood/walnut, /area/vacant/chapel) "fh" = ( @@ -2671,7 +2657,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/engineering/atmos) "fi" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "fk" = ( @@ -2701,7 +2687,7 @@ /obj/machinery/atmospherics/pipe/zpipe/up/supply{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/full, +/obj/floor_decal/industrial/warning/full, /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "fn" = ( @@ -2712,7 +2698,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/engineering/storage) "fs" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/firecloset, /turf/simulated/floor/tiled, /area/engineering/engineering_bay) @@ -2723,7 +2709,7 @@ icon_state = "1-4" }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/plating, @@ -2749,8 +2735,7 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "fw" = ( -/obj/effect/floor_decal/corner/yellow/diagonal, -/obj/random_multi/single_item/punitelly, +/obj/floor_decal/corner/yellow/diagonal, /turf/simulated/floor/tiled/freezer, /area/maintenance/seconddeck/forestarboard) "fx" = ( @@ -2803,12 +2788,12 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftstarboard) "fB" = ( -/obj/effect/floor_decal/corner/yellow/diagonal, +/obj/floor_decal/corner/yellow/diagonal, /obj/machinery/alarm{ dir = 1; pixel_y = -22 }, -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, @@ -2816,7 +2801,7 @@ /area/maintenance/seconddeck/forestarboard) "fC" = ( /obj/machinery/vending/lavatory, -/obj/effect/floor_decal/corner/yellow/diagonal, +/obj/floor_decal/corner/yellow/diagonal, /turf/simulated/floor/tiled/freezer, /area/maintenance/seconddeck/forestarboard) "fD" = ( @@ -2833,7 +2818,7 @@ /area/assembly/robotics) "fG" = ( /obj/machinery/robotics_fabricator, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/extinguisher_cabinet{ pixel_y = -32 }, @@ -2870,7 +2855,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -2890,13 +2875,13 @@ /area/assembly/robotics) "fL" = ( /obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftstarboard) "fM" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/effect/decal/cleanable/cobweb2, +/obj/floor_decal/industrial/outline/grey, +/obj/decal/cleanable/cobweb2, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftstarboard) "fN" = ( @@ -2927,7 +2912,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -2942,7 +2927,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/alarm{ pixel_y = 24 }, @@ -2955,7 +2940,7 @@ /area/hallway/primary/seconddeck) "fS" = ( /obj/machinery/floodlight, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/foreport) "fT" = ( @@ -2971,13 +2956,10 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/machinery/camera/network/second_deck{ - c_tag = "Second Deck Hallway - Central West" - }, /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 4 }, /obj/structure/cable/green{ @@ -2988,7 +2970,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck) "fW" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -3031,7 +3013,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /obj/structure/cable/green{ @@ -3053,7 +3035,7 @@ name = "north bump"; pixel_y = 24 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /obj/structure/cable/green{ @@ -3077,7 +3059,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/cable/green{ @@ -3097,7 +3079,7 @@ dir = 2; icon_state = "pipe-c" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/railing/mapped{ @@ -3136,13 +3118,13 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck) "gn" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck) "go" = ( -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/atmospherics/unary/tank/hydrogen, /turf/simulated/floor/plating, /area/maintenance/incinerator) @@ -3152,7 +3134,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, @@ -3161,12 +3143,23 @@ /turf/simulated/wall/prepainted, /area/maintenance/substation/seconddeck) "gr" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/highsecurity{ + name = "Bluespace Drive" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespacebay) "gs" = ( /obj/structure/cable{ d1 = 4; @@ -3256,16 +3249,18 @@ /obj/random/torchcloset, /obj/random/maintenance/solgov, /obj/random/junk, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftstarboard) "gz" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/blast/regular{ id_tag = "engineroomvent"; name = "Engine room vent" }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/engineering/engine_room) "gA" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ @@ -3282,7 +3277,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/cable/cyan{ @@ -3309,14 +3304,13 @@ name = "west bump"; pixel_x = -24 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/substation/seconddeck) "gD" = ( -/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck) "gE" = ( @@ -3352,7 +3346,7 @@ /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod11/station) "gI" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/light/small{ @@ -3444,10 +3438,8 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "gV" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/space) +/turf/simulated/wall/prepainted, +/area/engineering/bluespacebay) "gW" = ( /obj/structure/cable/cyan{ d1 = 4; @@ -3463,13 +3455,13 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "gX" = ( -/obj/effect/shuttle_landmark/merc/deck3{ +/obj/shuttle_landmark/merc/deck3{ name = "2nd Deck, Aft" }, /turf/space, /area/space) "gY" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/extinguisher_cabinet{ pixel_x = 32 }, @@ -3481,14 +3473,8 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/seconddeck/foreport) "ha" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/blast/regular/open{ - id_tag = "bsdwindow"; - name = "Drive Containment" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/engineering/bluespace) +/turf/simulated/wall/r_wall/prepainted, +/area/engineering/bluespacebay) "hb" = ( /obj/structure/cable{ d1 = 1; @@ -3589,7 +3575,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_smes) "hl" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/cable/cyan{ @@ -3612,7 +3598,7 @@ /obj/machinery/power/terminal{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -3620,8 +3606,8 @@ /area/engineering/engine_smes) "ho" = ( /obj/machinery/fabricator, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -3635,7 +3621,7 @@ /area/engineering/engine_smes) "hq" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftstarboard) "hr" = ( @@ -3651,11 +3637,23 @@ }, /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod10/station) +"hy" = ( +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/obj/catwalk_plated, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace) "hz" = ( /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod11/station) "hA" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -3743,7 +3741,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fore) "hQ" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/rotating_alarm/supermatter{ dir = 8 }, @@ -3773,7 +3771,7 @@ /obj/structure/table/rack{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/device/flashlight/lantern, /obj/item/device/radio/off{ pixel_x = 6; @@ -3797,7 +3795,7 @@ /area/engineering/engineering_bay) "hX" = ( /obj/structure/closet/secure_closet/engineering_electrical, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/steel_grid, /area/engineering/engineering_bay) "ia" = ( @@ -3809,7 +3807,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "ib" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 5 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -3828,7 +3826,7 @@ name = "west bump"; pixel_x = -24 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -3849,7 +3847,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/seconddeck/fore) "ie" = ( @@ -3927,7 +3925,7 @@ /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod11/station) "ir" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/light/small, @@ -3954,7 +3952,7 @@ /area/maintenance/seconddeck/forestarboard) "iu" = ( /obj/structure/barricade, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/vacant/chapel) "iv" = ( @@ -3965,15 +3963,14 @@ /turf/simulated/floor/tiled/steel_ridged, /area/vacant/chapel) "ix" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" }, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) +/obj/structure/railing/mapped, +/obj/catwalk_plated, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace) "iy" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/binary/pump/on{ @@ -4019,7 +4016,7 @@ /area/maintenance/seconddeck/central) "iE" = ( /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -4043,7 +4040,7 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftstarboard) "iG" = ( -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /turf/simulated/floor/tiled, @@ -4067,7 +4064,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 4 }, /obj/machinery/light/small{ @@ -4089,7 +4086,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -4102,19 +4099,14 @@ /area/engineering/foyer) "iP" = ( /obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/engineering{ - name = "Drone Bay" +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/blast/regular/open{ + icon_state = "pdoor0"; + id_tag = "bsdwindow"; + name = "Drive Containment" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/engineering/drone_fabrication) +/turf/simulated/floor/tiled, +/area/engineering/bluespace) "iQ" = ( /obj/structure/catwalk, /obj/structure/cable/green{ @@ -4125,48 +4117,39 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftstarboard) "iR" = ( -/obj/effect/decal/cleanable/cobweb, +/obj/decal/cleanable/cobweb, /obj/machinery/space_heater, /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "iS" = ( -/obj/structure/table/standard, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/random/maintenance/solgov, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" +/obj/machinery/light{ + dir = 1 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespacebay) "iT" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 +/obj/machinery/computer/modular/preset/engineering{ + dir = 8; + icon_state = "console" }, -/obj/machinery/door/window/brigdoor/northleft{ - dir = 2 +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespacebay) +"iW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/structure/table/rack{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/item/aiModule/reset, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) -"iW" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/turf/simulated/floor/bluegrid, -/area/synth/borg_upload) +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespacebay) "iX" = ( /obj/machinery/status_display, /turf/simulated/wall/r_wall/prepainted, @@ -4288,14 +4271,14 @@ /area/maintenance/seconddeck/forestarboard) "jo" = ( /obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/forestarboard) "jp" = ( /turf/unsimulated/mask, /area/hallway/primary/seconddeck/elevator) "jq" = ( -/obj/effect/shuttle_landmark/lift/robotics_bottom, +/obj/shuttle_landmark/lift/robotics_bottom, /turf/simulated/floor/plating, /area/assembly/robotics) "ju" = ( @@ -4305,13 +4288,23 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/cable/cyan{ - d1 = 4; +/obj/machinery/power/terminal, +/obj/machinery/access_button/airlock_interior{ + master_tag = "bsd_controller"; + pixel_x = 23; + pixel_y = 23 + }, +/obj/structure/cable{ d2 = 8; - icon_state = "4-8" + icon_state = "0-8" }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespacebay) "jv" = ( /obj/structure/lattice, /obj/structure/disposaloutlet{ @@ -4325,14 +4318,10 @@ "jw" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/sign/warning/mail_delivery{ pixel_y = 32 }, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Equipment"; - dir = 4 - }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "jx" = ( @@ -4359,53 +4348,51 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "jB" = ( -/obj/structure/table/standard, /obj/machinery/alarm{ dir = 1; pixel_y = -22 }, -/obj/machinery/camera/network/engineering{ - c_tag = "Cyborg Upload"; - dir = 4 - }, -/obj/machinery/recharger, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) -"jC" = ( /obj/structure/table/standard, -/obj/random/maintenance/solgov, +/obj/item/storage/toolbox/electrical, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespacebay) +"jC" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) -"jD" = ( -/obj/structure/window/reinforced{ +/obj/structure/bed/chair/padded/yellow{ dir = 8 }, -/obj/structure/window/reinforced, -/obj/machinery/door/window/brigdoor/northleft, -/obj/structure/table/rack{ - dir = 8 +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -28 }, -/obj/item/aiModule/purge, -/obj/item/aiModule/quarantine, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespacebay) +"jD" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespacebay) "jE" = ( -/obj/structure/window/reinforced{ - dir = 4 +/obj/structure/cable/cyan, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/power/smes/buildable/preset/torch/hangar{ + RCon_tag = "Substation - BSD"; + name = "Drive Containment" }, -/obj/structure/window/reinforced, -/obj/machinery/door/window/brigdoor/northleft, -/obj/structure/table/rack{ - dir = 8 +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" }, -/obj/item/aiModule/robocop, -/obj/item/aiModule/solgov_aggressive, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespacebay) "jH" = ( /obj/machinery/door/airlock/hatch{ icon_state = "closed"; @@ -4449,19 +4436,19 @@ /area/engineering/engine_room) "jK" = ( /obj/machinery/atmospherics/binary/pump/high_power, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/engine_setup/pump_max, +/obj/floor_decal/industrial/warning/corner, +/obj/engine_setup/pump_max, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "jL" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "jM" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -4469,7 +4456,7 @@ /area/engineering/engine_room) "jN" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -4531,7 +4518,7 @@ /area/teleporter/seconddeck) "jY" = ( /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 9 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -4559,14 +4546,11 @@ name = "north bump"; pixel_y = 24 }, -/obj/machinery/camera/network/engineering{ - c_tag = "Waste Tank" - }, /obj/machinery/atmospherics/portables_connector, /turf/simulated/floor/tiled/techfloor, /area/engineering/wastetank) "kc" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -4616,8 +4600,8 @@ name = "Equipment Storage"; pixel_y = 24 }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/monotile, /area/engineering/storage) @@ -4664,9 +4648,9 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/corner_techfloor_grid, -/obj/effect/floor_decal/techfloor/corner, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -4703,10 +4687,6 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/central) "kr" = ( -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Entrance"; - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/machinery/airlock_sensor{ command = "cycle_exterior"; @@ -4729,7 +4709,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -4748,7 +4728,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -4758,7 +4738,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -4771,8 +4751,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/warning, /obj/structure/cable/green{ d1 = 1; d2 = 8; @@ -4781,9 +4761,10 @@ /turf/simulated/floor/tiled/dark, /area/teleporter/seconddeck) "ky" = ( -/obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, -/area/torchexterior) +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/vacant/prototype/engine) "kz" = ( /obj/structure/cable/green{ d1 = 1; @@ -4800,7 +4781,7 @@ /turf/simulated/floor/tiled/dark, /area/engineering/storage) "kA" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -4825,8 +4806,8 @@ /obj/machinery/light{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/monotile, /area/engineering/storage) @@ -4848,13 +4829,19 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/teleporter/seconddeck) "kH" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/engineering_torch, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) +"kJ" = ( +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Engine Room Starboard" + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/engine_room) "kK" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/clothing/glasses/welding, /obj/item/clothing/glasses/welding, /obj/item/clothing/glasses/welding, @@ -4866,7 +4853,7 @@ /area/engineering/engineering_bay) "kL" = ( /obj/structure/largecrate, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/foreport) "kM" = ( @@ -4928,7 +4915,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/engineering/engine_monitoring) "kR" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, @@ -4962,7 +4949,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/seconddeck/aftstarboard) "kU" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -4989,10 +4976,10 @@ /area/space) "kW" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/steel_grid, /area/engineering/engine_monitoring) "kY" = ( @@ -5004,7 +4991,7 @@ /obj/structure/closet/radiation, /obj/item/clothing/glasses/meson, /obj/item/clothing/glasses/meson, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -5016,11 +5003,11 @@ dir = 4; pixel_x = 5 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 9; icon_state = "warning" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -5029,10 +5016,10 @@ /area/engineering/engine_room) "lb" = ( /obj/structure/closet/radiation, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 5 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "le" = ( @@ -5050,7 +5037,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -5079,7 +5066,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -5097,20 +5084,22 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "lj" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "lk" = ( -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/torchexterior) "ll" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 32 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, /turf/simulated/floor/tiled/steel_grid, @@ -5136,20 +5125,16 @@ /turf/simulated/wall/prepainted, /area/hallway/primary/seconddeck/center) "lp" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, /obj/structure/cable/green{ d2 = 2; icon_state = "0-2" }, -/obj/machinery/camera/network/second_deck{ - c_tag = "Second Deck - Stairwell"; - dir = 4 - }, /obj/machinery/power/apc{ dir = 1; name = "north bump"; @@ -5177,19 +5162,17 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) "lu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/turf/simulated/floor/bluegrid, -/area/synth/borg_upload) +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespacebay) "lx" = ( /obj/structure/cable/green{ d1 = 1; @@ -5215,7 +5198,7 @@ name = "Engineering RC"; pixel_x = -32 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -5284,12 +5267,12 @@ /area/maintenance/seconddeck/forestarboard) "lG" = ( /obj/machinery/shieldgen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/foreport) "lJ" = ( /obj/item/stool/padded, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "lK" = ( @@ -5308,7 +5291,7 @@ pixel_x = -22; pixel_y = -22 }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, /turf/simulated/floor/tiled, @@ -5346,14 +5329,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /obj/machinery/light/small, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Access"; - dir = 1 - }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "lR" = ( @@ -5362,7 +5341,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 6 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -5380,7 +5359,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 6 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -5399,7 +5378,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -5409,7 +5388,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 10 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -5426,17 +5405,17 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "ma" = ( -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/port) "mb" = ( /turf/simulated/wall/r_wall/prepainted, /area/vacant/prototype/engine) "mc" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "md" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/light{ dir = 1 }, @@ -5451,17 +5430,19 @@ initial_id_tag = "aux_fusion_plant"; req_access = list("ACCESS_ENGINE_EQUIP") }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, /area/vacant/prototype/control) "mg" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "mh" = ( /obj/structure/cable/yellow{ @@ -5469,11 +5450,13 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "mi" = ( /obj/structure/cable/green{ @@ -5486,14 +5469,14 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/center) "mj" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/cable/green{ @@ -5515,7 +5498,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "mp" = ( @@ -5523,7 +5506,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "mq" = ( @@ -5535,7 +5518,7 @@ /turf/simulated/floor/tiled/monotile, /area/engineering/storage) "mr" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -5545,21 +5528,21 @@ /area/hallway/primary/seconddeck) "mt" = ( /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "mw" = ( /obj/structure/table/rack{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/device/paint_sprayer, /obj/item/device/paint_sprayer, /obj/item/reagent_containers/spray/cleaner, /turf/simulated/floor/tiled, /area/engineering/engineering_bay) "mx" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -5571,7 +5554,7 @@ /turf/simulated/open, /area/engineering/engineering_bay) "mB" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -5584,7 +5567,7 @@ /obj/structure/fireaxecabinet{ pixel_y = -32 }, -/obj/effect/floor_decal/corner/yellow/half, +/obj/floor_decal/corner/yellow/half, /turf/simulated/floor/tiled/monotile, /area/engineering/storage) "mD" = ( @@ -5593,7 +5576,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/steel_grid, /area/engineering/engine_monitoring) "mE" = ( @@ -5619,7 +5602,7 @@ dir = 4; pixel_x = -32 }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, /turf/simulated/floor/tiled, @@ -5640,7 +5623,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -5653,7 +5636,7 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "mM" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/visible/green{ @@ -5662,7 +5645,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "mN" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -5673,11 +5656,11 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "mP" = ( @@ -5685,12 +5668,8 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - TEGs"; - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -5699,15 +5678,15 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "mR" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stack/material/rods{ amount = 50 }, @@ -5751,17 +5730,17 @@ name = "Engineering Desk Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, /turf/simulated/floor/plating, /area/engineering/engineering_bay) "mX" = ( -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -5798,7 +5777,7 @@ /obj/machinery/disposal/deliveryChute{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -5808,10 +5787,10 @@ /turf/simulated/wall/prepainted, /area/maintenance/seconddeck/foreport) "nd" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 8 }, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 5 }, /obj/machinery/vending/wallmed1{ @@ -5835,10 +5814,14 @@ /turf/simulated/floor/tiled/dark, /area/assembly/robotics) "nk" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck Hallway - Fore"; + dir = 1 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fore) "nm" = ( @@ -5875,9 +5858,9 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) "no" = ( -/obj/machinery/bluespacedrive, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/synth/borg_upload) "np" = ( /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 6 @@ -5906,8 +5889,8 @@ /area/assembly/robotics) "nr" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light{ dir = 1 }, @@ -5940,7 +5923,7 @@ dir = 4; pixel_x = -22 }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, /turf/simulated/floor/tiled, @@ -5949,7 +5932,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -32 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 10 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -5959,7 +5942,7 @@ pixel_y = -32 }, /obj/item/storage/med_pouch/radiation, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 6 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -5967,10 +5950,10 @@ "nB" = ( /obj/structure/table/standard, /obj/random/tank, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -5984,7 +5967,7 @@ name = "Engine Monitoring Room Blast Doors"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/engineering/engine_monitoring) @@ -6000,7 +5983,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -6029,13 +6012,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, /obj/machinery/rotating_alarm/supermatter{ dir = 8 }, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Engine Room Center"; + dir = 8 + }, /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "nJ" = ( @@ -6051,19 +6038,20 @@ /turf/simulated/wall/r_wall/hull, /area/engineering/engine_room) "nN" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/catwalk, /obj/item/device/radio/intercom{ dir = 1; pixel_y = -28 }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 +/obj/machinery/power/smes/buildable/preset/torch/substation{ + RCon_tag = "Substation - Shield Generator" + }, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" }, /turf/simulated/floor/plating, /area/engineering/shieldbay) @@ -6091,7 +6079,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) @@ -6128,7 +6116,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/seconddeck/aftport) "ob" = ( -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /turf/simulated/floor/tiled/steel_grid, @@ -6152,7 +6140,7 @@ /area/engineering/engine_room) "oh" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/foreport) "oi" = ( @@ -6160,7 +6148,7 @@ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/portable_atmospherics/canister/hydrogen, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) @@ -6169,8 +6157,7 @@ dir = 4; icon_state = "tube1" }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/cap/visible/fuel, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "ol" = ( @@ -6208,8 +6195,8 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "or" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /obj/machinery/light{ @@ -6218,7 +6205,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/engineering/engineering_bay) "ot" = ( -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, /obj/structure/closet/hydrant{ @@ -6232,7 +6219,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/engineering/engine_monitoring) @@ -6250,11 +6237,13 @@ /turf/simulated/floor/tiled/steel_grid, /area/engineering/engine_monitoring) "ox" = ( -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/engineering/engine_room) "oy" = ( /obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/railing/mapped{ dir = 1; icon_state = "railing0-1" @@ -6268,14 +6257,14 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "oA" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/pipe/simple/visible/black, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) @@ -6283,7 +6272,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "oC" = ( @@ -6291,7 +6280,7 @@ dir = 8 }, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 6 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -6304,14 +6293,14 @@ /area/engineering/atmos) "oE" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light/small, /turf/simulated/floor/tiled/monotile, /area/engineering/foyer) "oF" = ( /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -6341,7 +6330,7 @@ /turf/space, /area/space) "oN" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -6358,7 +6347,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "oO" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -6401,8 +6390,16 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) +"pa" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/blast/regular{ + id_tag = "SupermatterPort"; + name = "Reactor Blast Door" + }, +/turf/simulated/floor/reinforced, +/area/engineering/engine_room) "pb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -6416,12 +6413,21 @@ }, /turf/space, /area/space) +"pg" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) "pi" = ( /turf/simulated/floor/plating, /area/maintenance/seconddeck/foreport) "pk" = ( -/obj/machinery/power/terminal, -/obj/structure/cable, /obj/machinery/alarm{ dir = 8; pixel_x = 24 @@ -6432,6 +6438,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled/techfloor, /area/engineering/shieldbay) "pl" = ( @@ -6483,10 +6494,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/second_deck{ - c_tag = "Second Deck Hallway - Central East" - }, +/obj/catwalk_plated, /obj/machinery/light{ dir = 1 }, @@ -6510,7 +6518,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /obj/structure/cable{ @@ -6530,7 +6538,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -6554,7 +6562,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -6591,13 +6599,13 @@ name = "Engineering Desk Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/engineering/engineering_bay) "pE" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/aiModule/reset, /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) @@ -6614,8 +6622,8 @@ /obj/structure/sign/warning/caution{ pixel_y = 28 }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/engineering/foyer) "pH" = ( @@ -6644,7 +6652,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 1 }, /obj/structure/cable/green{ @@ -6661,7 +6669,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /obj/structure/cable/green{ @@ -6678,7 +6686,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -6691,7 +6699,7 @@ /turf/simulated/floor/tiled/techfloor, /area/vacant/cargo) "pO" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/valve/shutoff/supply{ @@ -6703,7 +6711,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/engineering/engineering_bay) "pR" = ( @@ -6712,7 +6720,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, @@ -6785,7 +6793,7 @@ name = "Engine Monitoring Room Blast Doors"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -6808,7 +6816,7 @@ dir = 4 }, /obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/portable_atmospherics/canister/hydrogen, /obj/structure/cable/cyan{ d1 = 4; @@ -6827,7 +6835,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/light{ dir = 1; icon_state = "tube1" @@ -6838,7 +6846,7 @@ /turf/simulated/floor/plating, /area/engineering/foyer) "pZ" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/power/emitter{ anchored = 1; dir = 4; @@ -6858,7 +6866,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "qa" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -6869,7 +6877,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "qb" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/valve/digital{ name = "TEG bypass valve" }, @@ -6880,8 +6888,8 @@ id_tag = "SupermatterPort"; name = "Reactor Blast Door" }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/reinforced/airless, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, /area/engineering/engine_room) "qe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -6893,7 +6901,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/alarm{ pixel_y = 24 }, @@ -6917,15 +6925,17 @@ d2 = 8; icon_state = "2-8" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "qi" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/vacant/prototype/control) "qj" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -6962,12 +6972,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/seconddeck/fore) "qo" = ( /obj/machinery/power/shield_generator, -/obj/structure/cable{ +/obj/structure/cable/cyan{ d2 = 2; icon_state = "0-2" }, @@ -6983,20 +6993,24 @@ /turf/simulated/floor/tiled/dark, /area/assembly/robotics) "qu" = ( -/obj/effect/shuttle_landmark/torch/deck3/aquila{ +/obj/shuttle_landmark/torch/deck3/aquila{ name = "2nd Deck, Aft Port" }, /turf/space, /area/space) "qv" = ( -/turf/simulated/wall/prepainted, -/area/engineering/drone_fabrication) +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) "qw" = ( /turf/simulated/wall/r_wall/hull, /area/vacant/prototype/engine) "qy" = ( -/obj/machinery/power/smes/buildable/preset/torch/substation_full, -/obj/structure/cable, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plating, /area/engineering/shieldbay) "qA" = ( @@ -7015,7 +7029,7 @@ /area/engineering/storage) "qB" = ( /obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/engineering/atmos/storage) "qC" = ( @@ -7031,7 +7045,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /obj/structure/cable/green{ @@ -7045,7 +7059,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/corner/yellow/half, +/obj/floor_decal/corner/yellow/half, /turf/simulated/floor/tiled, /area/engineering/foyer) "qF" = ( @@ -7064,7 +7078,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/closet/hydrant{ pixel_y = 32 }, @@ -7093,7 +7107,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -7164,7 +7178,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -7221,7 +7235,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/engineering/engineering_bay) "qQ" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -7235,7 +7249,7 @@ /area/engineering/engineering_bay) "qR" = ( /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, @@ -7252,7 +7266,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/engineering/engineering_bay) "qU" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/rotating_alarm/supermatter{ @@ -7269,7 +7283,7 @@ icon_state = "pipe-c" }, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, @@ -7287,7 +7301,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -7297,15 +7311,15 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/effect/engine_setup/coolant_canister, +/obj/floor_decal/industrial/outline/blue, +/obj/engine_setup/coolant_canister, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "qZ" = ( /obj/machinery/atmospherics/binary/pump{ dir = 4 }, -/obj/effect/engine_setup/pump_max, +/obj/engine_setup/pump_max, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "rb" = ( @@ -7320,7 +7334,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -7344,7 +7358,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/black, @@ -7354,7 +7368,7 @@ /obj/machinery/atmospherics/pipe/manifold4w/visible/green, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -7363,7 +7377,7 @@ "re" = ( /obj/machinery/atmospherics/pipe/manifold/visible/green, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 5 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -7377,29 +7391,24 @@ id_tag = "EngineAccess"; name = "Engine Access Hatch" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/engine_room) "ri" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "rj" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -7410,8 +7419,8 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/corner/yellow/half, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/corner/yellow/half, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/engineering/foyer) "rm" = ( @@ -7420,12 +7429,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/sign/deck/second{ - dir = 1; - pixel_y = -32 - }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -7434,6 +7438,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/floor_decal/corner/yellow, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/elevator) "rn" = ( @@ -7456,7 +7462,7 @@ /area/maintenance/seconddeck/aftport) "rq" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stack/material/steel{ amount = 50 }, @@ -7497,12 +7503,14 @@ /area/hallway/primary/seconddeck/center) "rt" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/maintenance, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/seconddeck/foreport) "ru" = ( @@ -7517,10 +7525,12 @@ /area/maintenance/seconddeck/foreport) "rv" = ( /obj/machinery/door/airlock/hatch, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/engineering/engine_room) "rw" = ( -/obj/effect/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "ry" = ( @@ -7581,17 +7591,34 @@ /turf/simulated/floor/tiled/steel_grid, /area/engineering/engineering_bay) "rA" = ( -/obj/machinery/drone_fabricator/torch, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"rB" = ( -/obj/structure/cable/cyan{ +/obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) +"rB" = ( +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/structure/railing/mapped, +/obj/catwalk_plated, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace) "rC" = ( /obj/structure/railing/mapped{ dir = 1; @@ -7600,43 +7627,31 @@ /turf/simulated/open, /area/maintenance/seconddeck/aftstarboard) "rD" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" +/obj/floor_decal/industrial/warning{ + dir = 8 }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"rE" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/engineering/bluespace) +"rE" = ( +/obj/structure/railing/mapped, +/obj/catwalk_plated, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace) "rF" = ( -/obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/obj/catwalk_plated, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace) "rM" = ( /obj/machinery/atmospherics/pipe/simple/visible/red, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "rO" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck) "rP" = ( @@ -7658,7 +7673,7 @@ /area/engineering/foyer) "rS" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/engineering/foyer) "rU" = ( @@ -7673,7 +7688,7 @@ dir = 1; pixel_y = -32 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/seconddeck) "rW" = ( @@ -7690,13 +7705,13 @@ /turf/simulated/floor/tiled/steel_grid, /area/engineering/engineering_bay) "rZ" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "lightsout" }, /turf/simulated/floor/tiled, /area/engineering/foyer) "sc" = ( -/obj/effect/floor_decal/corner/yellow/half, +/obj/floor_decal/corner/yellow/half, /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 @@ -7708,7 +7723,7 @@ name = "south bump"; pixel_y = -24 }, -/obj/effect/floor_decal/corner/yellow/half, +/obj/floor_decal/corner/yellow/half, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -7717,7 +7732,7 @@ /area/engineering/foyer) "se" = ( /obj/random/obstruction, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/plating, /area/vacant/chapel) "sf" = ( @@ -7738,7 +7753,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/engineering/engineering_bay) "si" = ( -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 8 }, /obj/machinery/light{ @@ -7762,8 +7777,8 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/effect/engine_setup/coolant_canister, +/obj/floor_decal/industrial/outline/blue, +/obj/engine_setup/coolant_canister, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "sm" = ( @@ -7774,14 +7789,14 @@ /obj/machinery/atmospherics/binary/pump{ dir = 4 }, -/obj/effect/engine_setup/pump_max, +/obj/engine_setup/pump_max, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "so" = ( /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -7801,7 +7816,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 10 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -7827,7 +7842,7 @@ /area/maintenance/seconddeck/aftstarboard) "su" = ( /obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/assembly/robotics) "sv" = ( @@ -7866,32 +7881,39 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/substation/seconddeck) "sC" = ( -/obj/machinery/computer/drone_control, -/obj/structure/sign/warning/secure_area{ - dir = 4; - pixel_x = -32 - }, /obj/machinery/light/small{ dir = 1 }, +/obj/structure/sign/warning/secure_area{ + dir = 8; + pixel_x = 32 + }, +/obj/structure/closet/emcloset, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/area/engineering/bluespacebay) "sE" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/landmark{ - name = "lightsout" +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 }, -/obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/engineering/drone_fabrication) +/turf/simulated/floor/tiled/dark, +/area/engineering/bluespace) "sF" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/obj/catwalk_plated, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace) "sG" = ( /obj/machinery/door/blast/regular{ id_tag = "RubbishOuter"; @@ -7918,12 +7940,12 @@ /area/engineering/storage) "sK" = ( /obj/structure/closet/toolcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/seconddeck/foreport) "sN" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -7944,7 +7966,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -7967,7 +7989,7 @@ /turf/simulated/wall/prepainted, /area/engineering/engineering_bay) "sW" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -8016,19 +8038,16 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "td" = ( -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Heat Exchangers" - }, /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -8037,7 +8056,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -8050,13 +8069,13 @@ dir = 4; icon_state = "tube1" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "tg" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/steel_grid, @@ -8087,32 +8106,42 @@ /turf/simulated/floor/tiled/techfloor, /area/hallway/primary/seconddeck/fore) "tk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 +/obj/floor_decal/industrial/warning{ + dir = 10 }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/turf/simulated/floor/tiled/dark, +/area/engineering/bluespace) "tl" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/catwalk, /obj/structure/cable/cyan{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/plating, -/area/engineering/drone_fabrication) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/bluespacedrive, +/turf/simulated/floor/tiled/dark, +/area/engineering/bluespace) "tm" = ( -/obj/structure/table/standard, -/obj/random/maintenance/solgov, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/engineering/bluespace) "to" = ( /obj/structure/window/reinforced, /obj/machinery/portable_atmospherics/canister/carbon_dioxide, @@ -8123,8 +8152,8 @@ /obj/machinery/light/spot{ dir = 4 }, -/obj/effect/floor_decal/corner/orange, -/obj/effect/floor_decal/corner/black{ +/obj/floor_decal/corner/orange, +/obj/floor_decal/corner/black{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -8136,43 +8165,55 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/door/airlock/highsecurity{ - name = "Bluespace Drive" +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Cyborg Upload Chamber"; + secured_wires = 1 }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/cable/cyan{ +/obj/machinery/door/blast/regular/open{ + dir = 4; + icon_state = "pdoor0"; + id_tag = "borg"; + name = "Cyborg Upload" + }, +/obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/firedoor, /turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/bluespace) +/area/synth/borg_upload) "ts" = ( /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plating, /area/engineering/engineering_bay) "tt" = ( -/obj/structure/cable/cyan{ - 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/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/techfloor, /area/engineering/shieldbay) "tv" = ( /obj/machinery/status_display{ pixel_x = -32 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 9 }, /obj/machinery/light{ @@ -8199,20 +8240,20 @@ dir = 1; pixel_y = -28 }, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Control"; - dir = 1 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Supermatter Monitoring"; + dir = 1 + }, /turf/simulated/floor/tiled/steel_grid, /area/engineering/engine_monitoring) "tA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/yellow/half, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/corner/yellow/half, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 6 }, @@ -8237,10 +8278,18 @@ /turf/simulated/floor/tiled/monotile, /area/engineering/engine_monitoring) "tD" = ( -/obj/machinery/computer/upload/robot, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/table/standard, +/obj/random/maintenance/solgov, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Drive Monitoring"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespacebay) "tE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black, /turf/simulated/floor/tiled/techfloor, @@ -8260,8 +8309,10 @@ /area/maintenance/disposal) "tH" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) +/obj/machinery/computer/drone_control, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/synth/borg_upload) "tJ" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4; @@ -8274,7 +8325,7 @@ /area/engineering/atmos) "tL" = ( /obj/structure/closet/secure_closet/atmos_torch, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -8287,13 +8338,16 @@ icon_state = "4-8" }, /obj/item/rpd, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Atmospherics" + }, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "tM" = ( /obj/structure/window/reinforced{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/suit_storage_unit/atmos/alt/sol, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -8309,7 +8363,7 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "tN" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -8318,7 +8372,7 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "tO" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/meter, @@ -8332,9 +8386,6 @@ target_pressure = 2500; use_power = 1 }, -/obj/machinery/camera/network/engineering{ - c_tag = "Atmospherics - North" - }, /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, @@ -8372,7 +8423,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -8383,14 +8434,14 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "ub" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/light/small{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/foreport) "uc" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ dir = 1; frequency = 1380; @@ -8403,29 +8454,31 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/foreport) "ud" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "ue" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "ug" = ( -/obj/machinery/cryopod/robot{ - dir = 4 +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/computer/cryopod/robot{ - pixel_x = -32 +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/obj/catwalk_plated, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace) "uh" = ( /obj/machinery/door/firedoor, /obj/structure/cable/green{ @@ -8448,21 +8501,21 @@ icon_state = "railing0-1" }, /obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftstarboard) "un" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 9 }, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 4 }, /obj/structure/hygiene/sink{ @@ -8495,7 +8548,7 @@ /area/engineering/foyer) "us" = ( /obj/structure/closet/secure_closet/atmos_torch, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -8517,7 +8570,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plating, /area/engineering/atmos) @@ -8547,7 +8600,7 @@ /area/engineering/atmos) "uz" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/device/radio/intercom{ dir = 8; pixel_x = 21 @@ -8559,7 +8612,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "uA" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -8570,7 +8623,7 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/meter, /turf/simulated/floor/plating, /area/engineering/atmos) @@ -8612,7 +8665,7 @@ "uH" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/manifold4w/visible/green, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -8633,7 +8686,7 @@ "uK" = ( /obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -8673,12 +8726,20 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/foreport) "uS" = ( -/obj/machinery/cryopod/robot{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/seconddeck/foreport) "uT" = ( /obj/machinery/door/blast/regular/open{ begins_closed = 1; @@ -8686,19 +8747,29 @@ id_tag = "WasteGate"; name = "Waste Gate" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/engineering/wastetank) +"uV" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/engineering/bluespace) "uY" = ( -/obj/effect/floor_decal/corner/yellow/half, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/corner/yellow/half, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/engineering/foyer) "uZ" = ( /obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, -/area/space) +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/torchexterior) "vc" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -8713,7 +8784,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plating, /area/engineering/atmos) @@ -8763,11 +8834,6 @@ /turf/simulated/floor/tiled/monotile, /area/vacant/prototype/control) "vj" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/power/sensor{ name = "R-UST Power Generation - Powernet Sensor"; @@ -8777,14 +8843,14 @@ d2 = 8; icon_state = "0-8" }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "vk" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/machinery/door/airlock/engineering{ name = "Fusion Testing Facility"; secured_wires = 1 @@ -8792,6 +8858,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled/steel_ridged, /area/vacant/prototype/control) "vl" = ( @@ -8804,7 +8875,7 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) "vm" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -8828,17 +8899,31 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/effect/floor_decal/corner/black{ +/obj/floor_decal/corner/black{ dir = 6 }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) +"vo" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + icon_state = "pdoor0"; + id_tag = "bsdwindow"; + name = "Drive Containment" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/tiled, +/area/engineering/bluespace) "vp" = ( /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Engine Room Port"; + dir = 4 + }, /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "vq" = ( @@ -8851,7 +8936,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/green{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -8859,7 +8944,7 @@ /area/engineering/engine_room) "vs" = ( /obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -8879,50 +8964,41 @@ /turf/simulated/floor/tiled/steel_ridged, /area/shuttle/escape_pod10/station) "vy" = ( -/obj/machinery/door/blast/regular{ - dir = 8; - id_tag = "bsd"; - name = "Drive Containment" +/obj/floor_decal/industrial/warning{ + dir = 9 }, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Robot Upload"; + dir = 8 + }, +/turf/simulated/floor/greengrid, +/area/synth/borg_upload) "vz" = ( /obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/foreport) "vA" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) -"vB" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/disposalpipe/trunk{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/turf/simulated/floor/greengrid, +/area/synth/borg_upload) +"vB" = ( +/turf/simulated/wall/prepainted, +/area/engineering/bluespace) "vC" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 +/obj/floor_decal/industrial/warning{ + dir = 10 }, -/obj/machinery/light/small, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 +/obj/machinery/computer/cryopod/robot{ + pixel_y = 26 }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/turf/simulated/floor/greengrid, +/area/synth/borg_upload) "vD" = ( /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/meter, /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ dir = 1 @@ -8930,16 +9006,13 @@ /turf/simulated/floor/plating, /area/engineering/atmos) "vF" = ( -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 +/obj/machinery/recharge_station, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/warning{ + dir = 4 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/bluespace) +/turf/simulated/floor/tiled/techfloor, +/area/synth/borg_upload) "vH" = ( /obj/structure/cable/green{ d1 = 2; @@ -8955,7 +9028,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/structure/cable/green{ @@ -8966,7 +9039,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "vN" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -9007,12 +9080,12 @@ /area/engineering/atmos) "vV" = ( /obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/pipedispenser/disposal, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/engineering/atmos) "vX" = ( @@ -9032,7 +9105,7 @@ /obj/machinery/atmospherics/binary/pump{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "wd" = ( @@ -9042,7 +9115,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) @@ -9066,7 +9139,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -9100,7 +9173,7 @@ /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod10/station) "wm" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/structure/table/standard{ @@ -9137,11 +9210,33 @@ /area/shuttle/escape_pod10/station) "wq" = ( /obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/foreport) +"ws" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/floor_decal/corner/yellow{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck) "wu" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/canister/helium{ start_pressure = 14999 }, @@ -9168,11 +9263,11 @@ /area/maintenance/seconddeck/forestarboard) "wz" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/engineering/atmos/storage) "wA" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/reagent_dispensers/fueltank, /obj/structure/sign/warning/nosmoking_1{ dir = 4; @@ -9180,17 +9275,8 @@ }, /turf/simulated/floor/tiled, /area/engineering/engineering_bay) -"wB" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/engineering/shieldbay) "wC" = ( -/obj/structure/cable{ +/obj/structure/cable/cyan{ d1 = 1; d2 = 2; icon_state = "1-2" @@ -9233,10 +9319,10 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftstarboard) "wK" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 9 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -9270,7 +9356,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -9279,7 +9365,7 @@ /area/engineering/atmos) "wP" = ( /obj/structure/dispenser, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "wQ" = ( @@ -9297,7 +9383,7 @@ /turf/simulated/floor/wood/walnut, /area/vacant/chapel) "wS" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/portables_connector{ @@ -9311,10 +9397,10 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -9338,14 +9424,14 @@ dir = 4 }, /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "wY" = ( /obj/machinery/atmospherics/pipe/manifold/visible/black{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -9354,7 +9440,7 @@ /obj/machinery/atmospherics/binary/pump{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -9363,7 +9449,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -9376,7 +9462,7 @@ name = "Engine Radiator Viewport Shutters"; pixel_x = 25 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -9386,7 +9472,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "xe" = ( @@ -9399,7 +9485,7 @@ /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod11/station) "xf" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -9415,7 +9501,7 @@ /area/shuttle/escape_pod10/station) "xh" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/foreport) "xi" = ( @@ -9429,7 +9515,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck) "xl" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -9471,7 +9557,16 @@ /obj/item/stock_parts/smes_coil/super_capacity, /obj/item/stock_parts/smes_coil, /obj/item/stock_parts/smes_coil, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, /turf/simulated/floor/plating, /area/engineering/shieldbay) "xv" = ( @@ -9481,13 +9576,13 @@ /turf/simulated/floor/tiled, /area/engineering/engineering_bay) "xw" = ( -/obj/effect/wingrille_spawn/reinforced_phoron/full, +/obj/wingrille_spawn/reinforced_phoron/full, /obj/machinery/door/blast/regular/open{ dir = 4; icon_state = "pdoor0"; id_tag = "prototype_chamber_blast" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/vacant/prototype/engine) "xy" = ( /obj/machinery/light, @@ -9531,7 +9626,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/reagent_containers/ivbag/nanoblood, /obj/item/reagent_containers/ivbag/nanoblood, /obj/item/reagent_containers/ivbag/blood/human/oneg, @@ -9550,7 +9645,7 @@ dir = 6 }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -9563,7 +9658,7 @@ /area/engineering/atmos) "xO" = ( /obj/machinery/vending/engineering, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/device/radio/intercom{ pixel_y = 23 }, @@ -9578,10 +9673,10 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "xQ" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, -/obj/effect/floor_decal/floordetail/edgedrain, +/obj/floor_decal/floordetail/edgedrain, /obj/machinery/organ_printer/robot/mapped, /turf/simulated/floor/tiled/white, /area/assembly/robotics/surgery) @@ -9622,7 +9717,7 @@ /turf/simulated/floor/tiled/monotile, /area/shuttle/escape_pod10/station) "xY" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/light/small, @@ -9636,7 +9731,7 @@ /area/shuttle/escape_pod10/station) "ya" = ( /obj/random/torchcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/foreport) "yf" = ( @@ -9687,7 +9782,7 @@ /area/storage/tech) "yl" = ( /obj/machinery/portable_atmospherics/canister/sleeping_agent, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/railing/mapped{ dir = 1; icon_state = "railing0-1" @@ -9695,8 +9790,12 @@ /turf/simulated/floor/plating, /area/engineering/atmos/storage) "yo" = ( -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) +/obj/machinery/cryopod/robot{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/synth/borg_upload) "yp" = ( /obj/machinery/door/airlock/maintenance{ name = "Medical Storage Maintenance" @@ -9714,29 +9813,23 @@ "yq" = ( /obj/structure/table/rack, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/foreport) "yr" = ( -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Shield Bay"; - dir = 1 - }, -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, /obj/machinery/light/small, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plating, /area/engineering/shieldbay) "yt" = ( @@ -9750,7 +9843,7 @@ /obj/structure/table/steel, /obj/random/tank, /obj/machinery/light, -/obj/effect/floor_decal/corner/yellow/half, +/obj/floor_decal/corner/yellow/half, /turf/simulated/floor/tiled/monotile, /area/engineering/storage) "yx" = ( @@ -9786,7 +9879,7 @@ /obj/machinery/light/spot{ dir = 8 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -9802,51 +9895,51 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "yF" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "yG" = ( /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 1 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "yI" = ( /obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftstarboard) "yJ" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 9 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "yK" = ( /obj/machinery/portable_atmospherics/powered/scrubber, /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "yM" = ( @@ -9896,7 +9989,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/monotile, @@ -9905,12 +9998,12 @@ /obj/machinery/atmospherics/unary/tank/oxygen{ volume = 3200 }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/plating, /area/maintenance/incinerator) "yV" = ( /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/plating, /area/maintenance/incinerator) "yW" = ( @@ -9924,7 +10017,7 @@ /area/maintenance/incinerator) "yX" = ( /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/plating, /area/maintenance/incinerator) "yY" = ( @@ -9948,12 +10041,14 @@ id_tag = "engineroomvent"; name = "Engine room vent" }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor{ + map_airless = 1 + }, /area/engineering/engine_room) "zb" = ( /obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/railing/mapped{ dir = 1; icon_state = "railing0-1" @@ -9961,7 +10056,7 @@ /turf/simulated/floor/plating, /area/engineering/atmos/storage) "zc" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -9975,7 +10070,7 @@ /obj/item/stock_parts/subspace/filter, /obj/item/stock_parts/subspace/transmitter, /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light/small{ dir = 8 }, @@ -9986,7 +10081,7 @@ dir = 8; pixel_x = 24 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/canister/air, /obj/structure/railing/mapped{ dir = 1; @@ -10007,7 +10102,7 @@ /obj/item/stock_parts/circuitboard/telecomms/bus, /obj/item/stock_parts/circuitboard/telecomms/broadcaster, /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "zi" = ( @@ -10033,7 +10128,7 @@ sensor_tag = "o2_sensor" }, /obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -10041,20 +10136,20 @@ "zr" = ( /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "zs" = ( /obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -10074,7 +10169,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "zw" = ( @@ -10219,10 +10314,10 @@ /area/maintenance/seconddeck/foreport) "zN" = ( /obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -10261,8 +10356,8 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark, /area/teleporter/seconddeck) "Aa" = ( @@ -10281,8 +10376,8 @@ dir = 4; pixel_x = -21 }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled/monotile, /area/engineering/storage) @@ -10290,14 +10385,14 @@ /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "Ad" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/binary/pump/on{ @@ -10307,7 +10402,7 @@ /area/engineering/storage) "Af" = ( /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -10318,17 +10413,17 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "Aj" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/canister/hydrogen{ start_pressure = 14999 }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Al" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -10340,18 +10435,12 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/corner/yellow{ + dir = 10 }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/elevator) "An" = ( @@ -10389,7 +10478,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/effect/floor_decal/corner/orange{ +/obj/floor_decal/corner/orange{ dir = 6 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -10412,7 +10501,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftport) "At" = ( @@ -10428,13 +10517,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/cable/cyan{ +/obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/bluegrid, -/area/synth/borg_upload) +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespacebay) "Aw" = ( /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/plating, @@ -10464,12 +10553,12 @@ pixel_y = -24 }, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/manifold4w/visible, /turf/simulated/floor/plating, /area/maintenance/incinerator) "Az" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/valve{ dir = 4 }, @@ -10483,7 +10572,7 @@ pixel_x = 8; pixel_y = -24 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 4 }, @@ -10640,12 +10729,12 @@ }, /obj/structure/table/steel, /obj/item/stack/material/wood/fifty, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, /obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Bay" + c_tag = "Engineering - Lobby" }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) @@ -10655,7 +10744,7 @@ dir = 4; pixel_x = -22 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -10665,12 +10754,12 @@ "AU" = ( /obj/structure/closet/crate, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftstarboard) "Bb" = ( /obj/structure/closet/crate/med_crate/trauma, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light/small{ dir = 1 }, @@ -10732,7 +10821,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/vacant/cargo) "Bq" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/machinery/rotating_alarm/security_alarm{ @@ -10744,10 +10833,6 @@ /turf/simulated/floor/tiled/techfloor, /area/storage/cargo) "Bu" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -10759,13 +10844,17 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" +/obj/floor_decal/industrial/warning{ + dir = 1 }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/obj/floor_decal/industrial/warning, +/obj/machinery/access_button/airlock_exterior{ + master_tag = "bsd_controller"; + pixel_x = -23; + pixel_y = 23 + }, +/turf/simulated/floor/tiled/dark, +/area/engineering/bluespace) "Bw" = ( /obj/structure/catwalk, /obj/structure/disposalpipe/segment{ @@ -10835,7 +10924,7 @@ dir = 8; icon_state = "pipe-c" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -10854,7 +10943,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -10874,7 +10963,7 @@ /area/maintenance/seconddeck/aftport) "BJ" = ( /obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftport) "BK" = ( @@ -10894,7 +10983,7 @@ dir = 8 }, /obj/machinery/atmospherics/binary/pump, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -10915,13 +11004,13 @@ /obj/machinery/atmospherics/binary/pump{ dir = 1 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/incinerator) "BM" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/up, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/foreport) @@ -10929,12 +11018,12 @@ /obj/structure/disposalpipe/up{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/full, +/obj/floor_decal/industrial/warning/full, /turf/simulated/floor/plating, /area/maintenance/seconddeck/foreport) "BO" = ( /obj/item/stool, -/obj/effect/decal/cleanable/cobweb, +/obj/decal/cleanable/cobweb, /obj/machinery/firealarm{ pixel_y = 21 }, @@ -11110,11 +11199,10 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) "Ck" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10 +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 }, -/turf/simulated/floor/reinforced/airless, /area/engineering/engine_room) "Cl" = ( /obj/structure/table/rack, @@ -11128,7 +11216,7 @@ /obj/item/stock_parts/capacitor, /obj/item/stock_parts/manipulator, /obj/item/stock_parts/manipulator, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "Cm" = ( @@ -11173,7 +11261,7 @@ /area/vacant/cargo) "Cs" = ( /obj/structure/barricade, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/vacant/cargo) "Ct" = ( @@ -11205,7 +11293,7 @@ /obj/random/torchcloset, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/vacant/cargo) "Cx" = ( @@ -11218,9 +11306,6 @@ name = "west bump"; pixel_x = -24 }, -/obj/machinery/camera/network/engineering{ - c_tag = "Solar Control - Port" - }, /turf/simulated/floor/plating, /area/maintenance/auxsolarport) "Cy" = ( @@ -11308,7 +11393,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/yellow/half, +/obj/floor_decal/corner/yellow/half, /turf/simulated/floor/tiled/monotile, /area/engineering/storage) "CH" = ( @@ -11339,12 +11424,10 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/cap/visible/fuel{ +/obj/floor_decal/industrial/warning{ dir = 1 }, +/obj, /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "CN" = ( @@ -11371,10 +11454,14 @@ id_tag = "Incinerator"; pixel_x = -20 }, -/turf/simulated/floor/reinforced, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/incinerator) "CQ" = ( -/turf/simulated/floor/reinforced, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/incinerator) "CR" = ( /obj/machinery/atmospherics/unary/vent_pump{ @@ -11393,7 +11480,9 @@ /obj/structure/sign/warning/vacuum{ pixel_x = 32 }, -/turf/simulated/floor/reinforced, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/incinerator) "CS" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, @@ -11495,7 +11584,7 @@ /area/storage/cargo) "De" = ( /obj/structure/closet/secure_closet/decktech, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/storage/cargo) "Df" = ( @@ -11513,7 +11602,7 @@ /obj/item/storage/box/beakers, /obj/item/storage/box/bodybags, /obj/item/storage/box/masks, -/obj/item/storage/box/gloves{ +/obj/item/storage/box/latexgloves{ pixel_x = 4; pixel_y = 4 }, @@ -11533,9 +11622,9 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/wastetank) "Dm" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/up, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -11561,10 +11650,10 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/effect/floor_decal/corner/orange{ +/obj/floor_decal/corner/orange{ dir = 6 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "Dp" = ( @@ -11582,7 +11671,7 @@ d2 = 0; icon_state = "16-0" }, -/obj/effect/floor_decal/industrial/warning/full, +/obj/floor_decal/industrial/warning/full, /obj/structure/railing/mapped{ dir = 1; icon_state = "railing0-1" @@ -11599,7 +11688,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/power/solar_control{ dir = 1; id = "auxsolarport"; @@ -11618,7 +11707,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/access_button{ command = "cycle_interior"; frequency = 1379; @@ -11635,11 +11724,11 @@ /area/maintenance/auxsolarport) "Dv" = ( /obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/machinery/firealarm{ @@ -11650,12 +11739,12 @@ /area/maintenance/auxsolarport) "Dw" = ( /obj/structure/dispenser/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/storage/cargo) "Dx" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/storage/cargo) "Dy" = ( @@ -11666,7 +11755,7 @@ /turf/simulated/floor/tiled/techfloor, /area/storage/research) "Dz" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/up, /turf/simulated/floor/tiled/techfloor, /area/storage/research) @@ -11693,17 +11782,19 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/wastetank) "DE" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/valve/digital{ name = "Emergency Cooling Bypass valve" }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "DF" = ( -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/engineering/wastetank) "DG" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/unary/freezer{ dir = 1; icon_state = "freezer" @@ -11718,7 +11809,7 @@ /obj/structure/table/rack, /obj/random/junk, /obj/random/maintenance/solgov, -/obj/item/storage/box/matches, +/obj/item/storage/fancy/matches/matchbox, /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "DI" = ( @@ -11743,10 +11834,10 @@ dir = 4; target_pressure = 15000 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "DM" = ( @@ -11764,11 +11855,11 @@ /area/engineering/shieldbay) "DN" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftport) "DO" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -11776,7 +11867,7 @@ /area/maintenance/seconddeck/aftport) "DP" = ( /obj/item/caution/cone, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -11811,12 +11902,12 @@ /area/storage/cargo) "DV" = ( /obj/structure/closet/secure_closet/crew/research, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/storage/research) "DW" = ( /obj/structure/closet/secure_closet/scientist_torch, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/storage/research) "DX" = ( @@ -11825,7 +11916,7 @@ /area/storage/research) "DY" = ( /obj/structure/closet/secure_closet/secure_closet/xenoarchaeologist_torch, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/storage/research) "DZ" = ( @@ -11861,14 +11952,14 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) "Ed" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "Ee" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftport) "Ef" = ( @@ -11906,10 +11997,10 @@ /obj/machinery/oxygen_pump{ pixel_x = -32 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -11919,7 +12010,7 @@ /area/storage/research) "Ei" = ( /obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/storage/research) "Ej" = ( @@ -11927,12 +12018,12 @@ icon_state = "pdoor0"; id_tag = "prototype_chamber_blast" }, -/obj/effect/wingrille_spawn/reinforced_phoron/full, -/turf/simulated/floor/reinforced/airless, +/obj/wingrille_spawn/reinforced_phoron/full, +/turf/simulated/floor/reinforced, /area/vacant/prototype/engine) "Ek" = ( /obj/machinery/atmospherics/pipe/simple/visible/black, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/engineering/wastetank) @@ -11942,11 +12033,11 @@ id_tag = "SupermatterPort"; name = "Reactor Blast Door" }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/turf/simulated/floor/reinforced/airless, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor/reinforced, /area/engineering/engine_room) "Eo" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) @@ -11986,7 +12077,9 @@ dir = 4 }, /obj/machinery/meter, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/engineering/wastetank) "Eu" = ( /obj/machinery/atmospherics/unary/vent_pump/tank{ @@ -12002,7 +12095,9 @@ pressure_checks_default = 2; pump_direction = 0 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/engineering/wastetank) "Ev" = ( /obj/structure/cable/green{ @@ -12039,7 +12134,7 @@ pixel_y = 24; req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/port) "EA" = ( /obj/structure/cable/yellow{ @@ -12050,8 +12145,8 @@ id = "auxsolarsport"; name = "Port Auxiliary Solar Array" }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, +/obj/floor_decal/solarpanel, +/turf/simulated/floor, /area/solar/port) "EB" = ( /obj/structure/cable/yellow{ @@ -12059,7 +12154,7 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/port) "EC" = ( /obj/structure/cable/yellow{ @@ -12072,7 +12167,7 @@ d2 = 4; icon_state = "1-4" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/port) "ED" = ( /obj/structure/cable/yellow{ @@ -12090,7 +12185,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/port) "EE" = ( /obj/structure/cable/yellow{ @@ -12098,7 +12193,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/port) "EF" = ( /obj/structure/cable/yellow{ @@ -12116,7 +12211,7 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/port) "EG" = ( /obj/structure/cable/yellow{ @@ -12134,7 +12229,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/port) "EH" = ( /obj/structure/cable/yellow{ @@ -12147,7 +12242,7 @@ d2 = 8; icon_state = "1-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/port) "EI" = ( /obj/structure/cable/yellow, @@ -12155,8 +12250,8 @@ id = "auxsolarsport"; name = "Port Auxiliary Solar Array" }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, +/obj/floor_decal/solarpanel, +/turf/simulated/floor, /area/solar/port) "EK" = ( /obj/structure/cable/yellow{ @@ -12174,18 +12269,18 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/port) "EL" = ( /obj/machinery/power/tracker, /obj/structure/cable/yellow, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/port) "EO" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 9 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad, /obj/structure/railing/mapped{ dir = 1; @@ -12193,10 +12288,6 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/engineering/foyer) -"EQ" = ( -/obj/random_multi/single_item/punitelly, -/turf/simulated/floor/plating, -/area/vacant/chapel) "ES" = ( /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 4 @@ -12207,7 +12298,7 @@ /obj/machinery/atmospherics/unary/tank/air{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "EU" = ( @@ -12301,11 +12392,7 @@ /obj/machinery/atmospherics/binary/pump{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/engineering{ - c_tag = "Atmospherics - West"; - dir = 1 - }, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/sign/warning/secure_area{ dir = 1; pixel_y = -32 @@ -12319,17 +12406,21 @@ /obj/machinery/air_sensor{ id_tag = "waste_sensor" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/engineering/wastetank) "Fg" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "Fh" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -12340,13 +12431,14 @@ /area/vacant/prototype/engine) "Fi" = ( /obj/structure/cable{ + d1 = 2; d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/smes/buildable{ - RCon_tag = "Prototype - Distribution" + icon_state = "2-8" }, -/turf/simulated/floor/plating, +/obj/structure/table/standard, +/obj/item/storage/toolbox/electrical, +/obj/item/paper/newrust, +/turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "Fj" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -12358,7 +12450,7 @@ /turf/simulated/floor/tiled/dark, /area/medical/morgue) "Fk" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -12377,25 +12469,17 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8; - icon_state = "warningcorner" - }, -/obj/machinery/light, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/floor_decal/corner/yellow, +/obj/floor_decal/corner/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/floor_decal/corner/yellow{ + dir = 8 + }, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/elevator) "Fn" = ( @@ -12415,7 +12499,7 @@ /obj/machinery/door/airlock/engineering{ name = "Fuel Bay" }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -12439,7 +12523,7 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/fuelbay) "Fr" = ( -/obj/effect/decal/cleanable/cobweb, +/obj/decal/cleanable/cobweb, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -12447,14 +12531,10 @@ /obj/machinery/alarm{ pixel_y = 24 }, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Fuel Bay"; - dir = 4 - }, /turf/simulated/floor/tiled/techfloor, /area/engineering/fuelbay) "Fs" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/engineering/fuelbay) @@ -12496,7 +12576,7 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/fuelbay) "Fy" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, @@ -12508,7 +12588,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/plating, @@ -12517,7 +12597,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -12528,7 +12608,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -12555,13 +12635,13 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/plating, /area/engineering/fuelbay) "FH" = ( -/obj/effect/decal/cleanable/vomit, +/obj/decal/cleanable/vomit, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -12570,10 +12650,10 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) "FI" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -12592,20 +12672,20 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/disposal) "FL" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, /turf/simulated/floor/tiled, /area/engineering/engineering_bay) "FS" = ( -/obj/effect/shuttle_landmark/skipjack/deck3{ +/obj/shuttle_landmark/skipjack/deck3{ name = "2nd Deck, Fore Port" }, /turf/space, /area/space) "FT" = ( -/obj/effect/shuttle_landmark/torch/deck3/exploration_shuttle{ +/obj/shuttle_landmark/torch/deck3/exploration_shuttle{ name = "2nd Deck, Port" }, /turf/space, @@ -12623,7 +12703,7 @@ /turf/simulated/wall/r_wall/hull, /area/space) "Gb" = ( -/obj/effect/shuttle_landmark/torch/deck3/guppy{ +/obj/shuttle_landmark/torch/deck3/guppy{ name = "2nd Deck, Fore" }, /turf/space, @@ -12645,27 +12725,29 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "Gg" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "Gh" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/obj/structure/cable{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Gi" = ( @@ -12689,15 +12771,15 @@ /turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "Gj" = ( -/obj/structure/cable/green{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, /turf/simulated/floor/tiled/techfloor, /area/vacant/prototype/engine) "Gl" = ( @@ -12712,14 +12794,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -12728,6 +12803,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/light, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/elevator) "Gn" = ( @@ -12753,12 +12841,15 @@ /obj/machinery/light/spot{ dir = 4 }, -/obj/effect/floor_decal/corner/white, -/obj/effect/floor_decal/corner/orange{ +/obj/floor_decal/corner/white, +/obj/floor_decal/corner/orange{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) +"Gr" = ( +/turf/simulated/floor/reinforced, +/area/torchexterior) "Gs" = ( /obj/structure/cable{ d1 = 2; @@ -12775,7 +12866,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/seconddeck/fore) "Gw" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/light{ @@ -12794,7 +12885,7 @@ name = "Engineering Desk Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/engineering/engineering_bay) "GC" = ( @@ -12819,14 +12910,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "GG" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -12838,7 +12929,7 @@ id = "garbage2"; name = "disposal conveyor" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/railing/mapped{ dir = 4; icon_state = "railing0-1" @@ -12864,7 +12955,7 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "GR" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 }, @@ -12912,7 +13003,7 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) "Hb" = ( -/obj/effect/shuttle_landmark/petrov/out, +/obj/shuttle_landmark/petrov/out, /turf/space, /area/space) "Hc" = ( @@ -12932,23 +13023,28 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /obj/structure/bed/chair/padded/yellow{ dir = 4 }, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - RUST Monitoring" + }, /turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "Hg" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "Hh" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -12971,7 +13067,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -12990,11 +13086,6 @@ /turf/simulated/wall/r_wall/prepainted, /area/engineering/engineering_bay) "Hl" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -13011,6 +13102,11 @@ pixel_x = -23; pixel_y = 23 }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled/techfloor, /area/vacant/prototype/control) "Hn" = ( @@ -13020,7 +13116,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, @@ -13043,35 +13139,28 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 6 }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "Hp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/floor_decal/industrial/warning{ + dir = 5 }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/turf/simulated/floor/tiled/dark, +/area/engineering/bluespace) "Hq" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/cyan{ - d1 = 1; + d1 = 4; d2 = 8; - icon_state = "1-8" + icon_state = "4-8" }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/turf/simulated/floor/tiled/dark, +/area/engineering/bluespace) "Hs" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/atmospherics/pipe/simple/visible/yellow, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, @@ -13090,12 +13179,12 @@ /area/engineering/engineering_bay) "Hw" = ( /obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/pipedispenser, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/engineering/atmos) "Hy" = ( @@ -13151,7 +13240,7 @@ /turf/simulated/floor/plating, /area/maintenance/disposal) "HF" = ( -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 8 }, /obj/structure/cable{ @@ -13165,7 +13254,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, /obj/machinery/light/small{ @@ -13182,9 +13271,6 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) "HP" = ( -/obj/machinery/door/airlock/engineering{ - name = "Shield Bay Maintenance" - }, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -13193,6 +13279,9 @@ /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/engineering{ + name = "Drone Bay" + }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/shieldbay) "HQ" = ( @@ -13225,7 +13314,7 @@ /turf/simulated/open, /area/maintenance/seconddeck/aftport) "Ib" = ( -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) @@ -13236,7 +13325,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "Id" = ( -/obj/effect/engine_setup/smes, +/obj/engine_setup/smes, /obj/machinery/power/smes/buildable/preset/torch/substation_full{ RCon_tag = "Substation - Engine" }, @@ -13244,9 +13333,6 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - SMES" - }, /turf/simulated/floor/plating, /area/engineering/engine_smes) "Ie" = ( @@ -13275,37 +13361,33 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "Ih" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Ij" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ d1 = 1; d2 = 4; icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "Ik" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/engineering_torch, /obj/machinery/light, /turf/simulated/floor/tiled/techfloor/grid, @@ -13320,17 +13402,13 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "Im" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/cable/green{ @@ -13352,7 +13430,7 @@ /area/hallway/primary/seconddeck) "In" = ( /obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftport) "Io" = ( @@ -13363,22 +13441,18 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/door/blast/regular/open{ - dir = 8; - id_tag = "borg"; - name = "Cyborg Upload" - }, /obj/structure/cable/cyan{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/engineering{ - name = "Cyborg Upload Chamber"; - secured_wires = 1 +/obj/machinery/door/airlock/hatch/maintenance/bolted{ + frequency = 1379; + id_tag = "bsd_interior"; + name = "Drive Containment Chamber" }, /turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) +/area/engineering/bluespacebay) "Ip" = ( /obj/machinery/alarm{ dir = 8; @@ -13416,7 +13490,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "Iz" = ( @@ -13428,7 +13502,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -13466,10 +13540,10 @@ /area/maintenance/seconddeck/aftstarboard) "II" = ( /obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -13482,7 +13556,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /turf/simulated/floor/tiled/steel_grid, @@ -13509,26 +13583,18 @@ /turf/simulated/floor/tiled/steel_ridged, /area/assembly/robotics/surgery) "IM" = ( -/obj/machinery/power/smes/buildable{ - charge = 5e+006; - input_attempt = 1; - output_attempt = 1 - }, -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Bluespace Drive"; + dir = 4 }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/obj/catwalk_plated, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace) "IN" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/up, /turf/simulated/floor/plating, /area/maintenance/seconddeck/central) -"IR" = ( -/obj/structure/grille, -/turf/simulated/floor/airless, -/area/space) "IU" = ( /obj/structure/cable/green{ d1 = 4; @@ -13544,7 +13610,9 @@ /obj/machinery/air_sensor{ id_tag = "rust_sensor" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "IW" = ( /obj/machinery/light_switch{ @@ -13559,13 +13627,13 @@ /turf/simulated/floor/tiled, /area/engineering/engineering_bay) "IX" = ( -/obj/effect/decal/cleanable/filth, +/obj/decal/cleanable/filth, /obj/structure/cable/green{ d1 = 2; d2 = 8; icon_state = "2-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -13579,24 +13647,21 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, /turf/simulated/floor/plating, /area/engineering/atmos/storage) "Jc" = ( -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/cyan{ +/obj/structure/catwalk, +/obj/structure/cable, +/obj/structure/cable{ d1 = 1; - d2 = 8; - icon_state = "1-8" + d2 = 4; + icon_state = "1-4" }, -/obj/structure/catwalk, +/obj/machinery/power/terminal, /turf/simulated/floor/plating, /area/engineering/shieldbay) "Jd" = ( @@ -13606,26 +13671,30 @@ icon_state = "2-4" }, /obj/machinery/constructable_frame/machine_frame, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/plating, /area/engineering/engine_smes) "Jf" = ( -/obj/machinery/power/smes/buildable/preset/torch/hangar{ - RCon_tag = "Substation - Shields" - }, -/obj/structure/cable/cyan{ - d2 = 8; - icon_state = "0-8" - }, /obj/machinery/firealarm{ dir = 1; pixel_y = -24 }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/button/blast_door{ + id_tag = "borg"; + name = "Cyborg Upload Blast Doors"; + pixel_x = 25; + req_access = list("ACCESS_AI_UPLOAD") + }, /turf/simulated/floor/tiled/techfloor, /area/engineering/shieldbay) "Jg" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -13636,7 +13705,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "Ji" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, @@ -13656,16 +13725,16 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/seconddeck/fore) "Jj" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -13684,6 +13753,26 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) +"Jm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/camera/network/second_deck{ + c_tag = "Second Deck Hallway - Midships" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck) "Jn" = ( /obj/structure/cable{ d1 = 1; @@ -13698,14 +13787,14 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 6 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "Jp" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, /obj/machinery/light{ @@ -13749,26 +13838,28 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/yellow, +/obj/floor_decal/corner/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -28 +/obj/floor_decal/industrial/warning/corner, +/obj/structure/sign/deck/second{ + dir = 1; + pixel_y = -40 }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" +/obj/machinery/light, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -35 }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/elevator) "Jv" = ( /obj/structure/closet/secure_closet/engineering_senior, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "JA" = ( @@ -13796,27 +13887,31 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftstarboard) "JE" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 }, -/turf/simulated/floor/plating, -/area/engineering/drone_fabrication) +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/engineering/bluespace) "JF" = ( /turf/simulated/wall/r_wall/hull, /area/engineering/fuelbay) "JG" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/central) "JH" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, /obj/structure/closet/secure_closet/crew, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fore) "JJ" = ( @@ -13827,7 +13922,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/disposal) "JL" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/crew/research, /obj/machinery/light/small{ dir = 8 @@ -13849,7 +13944,7 @@ "JQ" = ( /obj/structure/table/steel, /obj/machinery/recharger, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -13875,27 +13970,22 @@ /turf/simulated/wall/ocp_wall, /area/engineering/fuelbay) "Ka" = ( -/obj/machinery/door/blast/regular{ - dir = 8; - id_tag = "bsd"; - name = "Drive Containment" - }, -/obj/effect/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/cable/cyan{ +/obj/structure/catwalk, +/obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/bluespace) +/turf/simulated/floor/plating, +/area/synth/borg_upload) "Kb" = ( -/obj/effect/shuttle_landmark/ert/deck3{ +/obj/shuttle_landmark/ert/deck3{ name = "2nd Deck, Fore Starboard" }, /turf/space, @@ -13907,7 +13997,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/engineering/atmos) "Kd" = ( -/obj/effect/engine_setup/smes, +/obj/engine_setup/smes, /obj/machinery/power/smes/buildable/preset/torch/engine_main{ RCon_tag = "Engine - Main" }, @@ -13917,15 +14007,12 @@ }, /turf/simulated/floor/plating, /area/engineering/engine_smes) -"Kf" = ( -/turf/simulated/floor/reinforced/airless, -/area/vacant/prototype/engine) "Kg" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/cable{ +/obj/floor_decal/industrial/warning, +/obj/structure/cable/green{ d1 = 1; - d2 = 4; - icon_state = "1-4" + d2 = 2; + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) @@ -13934,14 +14021,19 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) "Kj" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Kk" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/machinery/light_switch{ @@ -13953,7 +14045,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "Kl" = ( @@ -13967,8 +14059,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/catwalk_plated, +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/cable/green{ @@ -13993,11 +14085,7 @@ "Ko" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black, /obj/machinery/portable_atmospherics/canister/sleeping_agent, -/obj/machinery/camera/network/engineering{ - c_tag = "Atmospherics - South"; - dir = 8 - }, -/obj/effect/floor_decal/corner/white{ +/obj/floor_decal/corner/white{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -14022,7 +14110,7 @@ /area/maintenance/seconddeck/forestarboard) "Kx" = ( /obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/atmospherics/pipe/simple/hidden/red{ dir = 5 }, @@ -14032,38 +14120,32 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) "KA" = ( -/obj/machinery/button/blast_door{ - id_tag = "bsdwindow"; - name = "Window Containment Doors"; - pixel_x = -6; - pixel_y = 26 - }, -/obj/machinery/button/blast_door{ - id_tag = "bsd"; - name = "Bluespace Drive Containment"; - pixel_x = 6; - pixel_y = 26 - }, -/obj/machinery/computer/modular/preset/engineering{ - dir = 4 - }, /obj/structure/sign/warning/secure_area{ dir = 4; pixel_x = -32 }, +/obj/machinery/computer/modular/preset/engineering{ + dir = 4; + icon_state = "console" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled/techfloor, /area/engineering/shieldbay) "KE" = ( /obj/structure/table/rack, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftport) "KI" = ( /obj/machinery/atmospherics/portables_connector, /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "KJ" = ( @@ -14127,35 +14209,26 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fore) "Lb" = ( -/obj/effect/shuttle_landmark/ninja/deck3{ +/obj/shuttle_landmark/ninja/deck3{ name = "2nd Deck, Aft Starboard" }, /turf/space, /area/space) "Lc" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Ld" = ( /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, /obj/machinery/atmospherics/pipe/simple/visible/cyan, /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) -"Le" = ( -/obj/machinery/door/blast/regular{ - id_tag = "SupermatterPort"; - name = "Reactor Blast Door" - }, -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/reinforced/airless, -/area/engineering/engine_room) "Lf" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -14184,7 +14257,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/seconddeck/fore) "Li" = ( @@ -14193,7 +14266,7 @@ "Lj" = ( /obj/structure/cable/yellow, /obj/machinery/power/terminal, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -14212,7 +14285,7 @@ }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/cable{ @@ -14237,11 +14310,11 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "Ls" = ( -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "Lt" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/forestarboard) "Lu" = ( @@ -14252,17 +14325,17 @@ /area/engineering/storage) "Lz" = ( /obj/machinery/vending/engivend, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/newscaster{ pixel_y = 32 }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "LD" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 10 }, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 1 }, /obj/machinery/optable, @@ -14288,7 +14361,7 @@ /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/engineering/foyer) "LM" = ( @@ -14306,7 +14379,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/engineering/atmos) "LN" = ( @@ -14325,14 +14398,11 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "LO" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 +/obj/floor_decal/industrial/warning{ + dir = 6 }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/turf/simulated/floor/tiled/dark, +/area/engineering/bluespace) "LX" = ( /obj/machinery/atmospherics/unary/outlet_injector{ dir = 4; @@ -14345,7 +14415,7 @@ /area/engineering/atmos) "LZ" = ( /obj/machinery/vending/tool, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/requests_console{ announcementConsole = 1; department = "Engineering"; @@ -14370,7 +14440,7 @@ dir = 9 }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -14380,7 +14450,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/black, @@ -14388,7 +14458,7 @@ /area/engineering/engine_room) "Me" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/device/scanner/gas, /obj/item/device/scanner/gas, /obj/item/device/scanner/plant, @@ -14415,14 +14485,16 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "Mg" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Mh" = ( /obj/machinery/shield_diffuser, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "Mi" = ( /obj/machinery/button/blast_door{ @@ -14445,13 +14517,13 @@ pixel_x = 11; pixel_y = 29 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "Mj" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -14487,7 +14559,7 @@ /turf/simulated/floor/tiled/techfloor, /area/storage/research) "Ml" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/table/rack, @@ -14519,7 +14591,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/engineering/foyer) "Mn" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/up, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftport) @@ -14538,14 +14610,14 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fore) "Mx" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/universal{ @@ -14586,7 +14658,7 @@ /area/maintenance/seconddeck/aftport) "MJ" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/airlock_electronics, /obj/item/airlock_electronics, /obj/item/airlock_electronics, @@ -14600,7 +14672,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "MK" = ( -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "MP" = ( @@ -14611,15 +14683,19 @@ /obj/machinery/door/blast/regular/escape_pod{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/seconddeck/foreport) "MS" = ( /obj/random/junk, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/engineering/engine_room) "MW" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stock_parts/circuitboard/holodeckcontrol, /obj/item/stock_parts/circuitboard/mech_recharger, /obj/item/stock_parts/circuitboard/solar_control, @@ -14632,7 +14708,9 @@ injecting = 1; use_power = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "Nd" = ( /obj/machinery/power/terminal{ @@ -14646,14 +14724,14 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, /turf/simulated/floor/plating, /area/engineering/engine_smes) "Ne" = ( -/obj/effect/engine_setup/pump_max, +/obj/engine_setup/pump_max, /obj/machinery/atmospherics/binary/pump/high_power/on{ dir = 8 }, @@ -14679,44 +14757,31 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "Ng" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Nh" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 6 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "Ni" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Nj" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -14728,9 +14793,14 @@ pixel_x = 23; pixel_y = 23 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/tiled/techfloor, /area/vacant/prototype/engine) "Nk" = ( @@ -14745,13 +14815,15 @@ /turf/simulated/wall/prepainted, /area/hallway/primary/seconddeck/center) "Nl" = ( -/obj/structure/table/standard, -/obj/item/storage/toolbox/electrical, /obj/machinery/alarm{ dir = 8; pixel_x = 25; req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) }, +/obj/structure/cable, +/obj/machinery/power/smes/buildable/preset/torch/engine_empty{ + RCon_tag = "R-UST - Main" + }, /turf/simulated/floor/tiled/monotile, /area/vacant/prototype/control) "Nm" = ( @@ -14777,25 +14849,20 @@ /turf/simulated/wall/r_wall/prepainted, /area/engineering/atmos) "Nq" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/cyan{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/engineering/bluespace) "NA" = ( /obj/structure/catwalk, /obj/structure/cable/green{ @@ -14821,7 +14888,9 @@ id = "waste_in"; use_power = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/engineering/wastetank) "ND" = ( /obj/structure/sign/warning/airlock{ @@ -14865,8 +14934,8 @@ /area/maintenance/seconddeck/aftport) "NJ" = ( /obj/structure/closet/crate, -/obj/effect/decal/cleanable/cobweb2, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/decal/cleanable/cobweb2, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/foreport) "NK" = ( @@ -14877,12 +14946,12 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/engineering/engineering_bay) "NN" = ( /obj/structure/closet/crate/med_crate/toxin, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/storage/medical) "NQ" = ( @@ -14912,34 +14981,37 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/forestarboard) "NX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass/engineering{ name = "Shield Bay" }, -/obj/structure/cable/cyan{ +/obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/shieldbay) "NY" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/structure/cable/cyan{ +/obj/structure/catwalk, +/obj/landmark{ + name = "lightsout" + }, +/obj/structure/cable/green{ d1 = 2; d2 = 4; icon_state = "2-4" }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/bluespace) +/turf/simulated/floor/plating, +/area/synth/borg_upload) "NZ" = ( /obj/structure/table/steel, /obj/item/stack/cable_coil{ @@ -14965,7 +15037,7 @@ /area/maintenance/seconddeck/aftstarboard) "Ob" = ( /obj/structure/closet/crate/med_crate/burn, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/item/device/radio/intercom{ dir = 4; pixel_x = -21 @@ -14977,10 +15049,10 @@ /obj/machinery/atmospherics/binary/pump{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -14988,7 +15060,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "Od" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -15032,11 +15104,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - name = "Drone Fabrication"; - sort_type = "Drone Fabrication" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -15045,49 +15112,42 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/catwalk, /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "Og" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod11, -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/shuttle_landmark/escape_pod/start/pod11, +/obj/wallframe_spawn/reinforced/titanium, /turf/simulated/floor/plating, /area/shuttle/escape_pod11/station) "Oh" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "Oi" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, /obj/machinery/light/small{ dir = 4 }, -/obj/structure/table/standard, -/obj/item/book/manual/rust_engine, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled/monotile, /area/vacant/prototype/control) "Oj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/door/airlock/hatch/maintenance/bolted{ frequency = 1379; id_tag = "prototype_interior"; @@ -15100,10 +15160,15 @@ dir = 4 }, /obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled/techfloor/grid, /area/vacant/prototype/control) "Ok" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/blast/regular{ dir = 4; id_tag = "fusion_observation" @@ -15119,10 +15184,6 @@ /area/engineering/storage) "Om" = ( /obj/item/stool, -/obj/machinery/camera/network/second_deck{ - c_tag = "Second Deck Hallway - Elevator Landing"; - dir = 4 - }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/elevator) "On" = ( @@ -15158,7 +15219,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/seconddeck/fore) "Ot" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/engineering_torch, /obj/structure/noticeboard{ pixel_y = 32 @@ -15173,13 +15234,13 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "Ow" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/atmospherics/portables_connector, /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/plating, /area/engineering/atmos/storage) "Oy" = ( -/obj/effect/floor_decal/corner/yellow/half, +/obj/floor_decal/corner/yellow/half, /turf/simulated/floor/tiled, /area/engineering/foyer) "OB" = ( @@ -15187,7 +15248,7 @@ /turf/simulated/wall/r_wall/hull, /area/space) "OC" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -15196,7 +15257,7 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "OE" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/reagent_dispensers/watertank, /obj/machinery/firealarm{ dir = 8; @@ -15208,11 +15269,17 @@ /obj/machinery/light{ dir = 8 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/bluespace) +/obj/machinery/computer/upload/robot{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/synth/borg_upload) "OG" = ( /obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/engineering/wastetank) "OI" = ( /obj/machinery/computer/modular/preset/engineering{ @@ -15237,10 +15304,6 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/seconddeck/aftport) "OL" = ( -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Bluespace Drive"; - dir = 4 - }, /obj/machinery/alarm{ pixel_y = 23; req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) @@ -15249,8 +15312,24 @@ dir = 4; pixel_x = -32 }, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) +/obj/structure/table/rack{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 4; + name = "engineering front desk" + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/item/aiModule/solgov, +/obj/item/aiModule/reset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/synth/borg_upload) "OM" = ( /turf/simulated/wall/r_wall/hull, /area/maintenance/incinerator) @@ -15260,18 +15339,18 @@ /area/shuttle/escape_pod10/station) "OR" = ( /obj/machinery/camera/network/second_deck{ - c_tag = "Second Deck Hallway - Engineering"; + c_tag = "Second Deck Hallway - Aft"; dir = 1 }, -/obj/effect/floor_decal/corner/yellow/half, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/corner/yellow/half, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/rotating_alarm/security_alarm{ dir = 1 }, /turf/simulated/floor/tiled, /area/engineering/foyer) "OS" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/seconddeck/aftport) "OU" = ( @@ -15290,14 +15369,14 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/valve/shutoff/fuel, /turf/simulated/floor/plating, /area/engineering/fuelbay) "OY" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -15305,7 +15384,7 @@ /turf/simulated/floor/tiled/techfloor, /area/hallway/primary/seconddeck/fore) "Pa" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "Pb" = ( @@ -15318,7 +15397,7 @@ /obj/machinery/power/terminal{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -15333,7 +15412,7 @@ /turf/simulated/floor/plating, /area/engineering/engine_smes) "Pe" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/plating, @@ -15358,11 +15437,6 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "Pg" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/computer/fusion/gyrotron{ dir = 4; initial_id_tag = "aux_fusion_plant"; @@ -15371,13 +15445,15 @@ /turf/simulated/floor/tiled/monotile, /area/vacant/prototype/control) "Ph" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "Pi" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -15387,7 +15463,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/canister/hydrogen, /obj/structure/cable/cyan{ d1 = 4; @@ -15403,7 +15479,7 @@ name = "Engine Radiator Shutters" }, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /turf/simulated/floor/plating, /area/engineering/engine_room) "Pl" = ( @@ -15417,7 +15493,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -15475,10 +15551,10 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/central) "Pu" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 8 }, /obj/structure/cable/green{ @@ -15503,8 +15579,8 @@ /area/engineering/foyer) "PA" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/firealarm{ dir = 4; pixel_x = 26 @@ -15519,7 +15595,7 @@ /area/maintenance/disposal) "PF" = ( /obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck) "PH" = ( @@ -15533,50 +15609,53 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) "PI" = ( -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, /obj/machinery/power/apc{ dir = 8; name = "west bump"; pixel_x = -24 }, +/obj/structure/table/standard, +/obj/random/maintenance/solgov, +/obj/random/maintenance/solgov, +/obj/structure/cable/green, /turf/simulated/floor/tiled/techfloor, /area/engineering/shieldbay) "PL" = ( /obj/structure/table/steel, /obj/item/device/destTagger, -/obj/item/stack/package_wrap/twenty_five, +/obj/item/stack/package_wrap/cargo_wrap, /obj/item/device/radio/intercom{ dir = 8; pixel_x = 21 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 6 }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) -"PO" = ( +"PM" = ( +/obj/structure/closet/emcloset, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/random_multi/single_item/punitelly, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/seconddeck/forestarboard) +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck) "PP" = ( /obj/machinery/door/blast/regular/escape_pod{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/seconddeck/forestarboard) "PS" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 6 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 1 }, /obj/structure/closet/crate/freezer, @@ -15603,24 +15682,14 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "PX" = ( -/obj/structure/cable/cyan{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 }, -/obj/structure/cable/cyan{ +/obj/structure/cable{ d1 = 2; d2 = 4; icon_state = "2-4" }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, /turf/simulated/floor/tiled/techfloor, /area/engineering/shieldbay) "PY" = ( @@ -15628,7 +15697,7 @@ /turf/simulated/floor/plating, /area/engineering/engine_room) "Qa" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/binary/pump, @@ -15636,7 +15705,7 @@ /area/engineering/atmos) "Qb" = ( /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 @@ -15644,7 +15713,7 @@ /turf/simulated/floor/plating, /area/engineering/atmos) "Qd" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -15659,10 +15728,14 @@ /turf/simulated/wall/r_wall/prepainted, /area/vacant/prototype/control) "Qf" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/obj/structure/cable/yellow, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Qg" = ( @@ -15670,38 +15743,31 @@ dir = 1; pixel_y = -28 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "Qh" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "Qi" = ( /obj/machinery/light, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Prototype Chamber Two"; - dir = 1 +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Qj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/door/airlock/hatch/maintenance/bolted{ frequency = 1379; id_tag = "prototype_exterior"; @@ -15714,6 +15780,11 @@ dir = 4 }, /obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled/techfloor/grid, /area/vacant/prototype/control) "Qn" = ( @@ -15722,7 +15793,7 @@ tag_south = 8; tag_west = 1 }, -/obj/effect/engine_setup/filter, +/obj/engine_setup/filter, /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "Qo" = ( @@ -15749,8 +15820,8 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled/monotile, /area/engineering/storage) @@ -15797,16 +15868,16 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/engineering/storage) "QA" = ( /obj/machinery/vending/robotics{ dir = 4; - products = list(/obj/item/reagent_containers/food/drinks/bottle/oiljug=5,/obj/item/stack/cable_coil=6,/obj/item/device/flash/synthetic=4,/obj/item/cell/standard=4,/obj/item/device/scanner/health=2,/obj/item/scalpel=1,/obj/item/circular_saw=1,/obj/item/tank/anesthetic=2,/obj/item/clothing/mask/breath/medical=5,/obj/item/screwdriver=2,/obj/item/crowbar=2) + products = list(/obj/item/reagent_containers/food/drinks/bottle/oiljug=5,/obj/item/stack/cable_coil=6,/obj/item/device/flash/synthetic=4,/obj/item/cell/standard=4,/obj/item/device/scanner/health=2,/obj/item/scalpel/basic=1,/obj/item/circular_saw=1,/obj/item/tank/anesthetic=2,/obj/item/clothing/mask/breath/medical=5,/obj/item/screwdriver=2,/obj/item/crowbar=2) }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/requests_console{ department = "Robotics"; departmentType = 2; @@ -15827,14 +15898,13 @@ /turf/simulated/open, /area/maintenance/seconddeck/aftport) "QC" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 }, -/turf/simulated/floor/plating, -/area/engineering/drone_fabrication) +/turf/simulated/floor/tiled/dark, +/area/engineering/bluespace) "QD" = ( /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/plating, @@ -15844,12 +15914,14 @@ dir = 1 }, /obj/random/junk, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/engineering/engine_room) "QI" = ( /obj/structure/closet/toolcloset, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/engineering/storage) "QJ" = ( @@ -15868,7 +15940,7 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftstarboard) "QK" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "QM" = ( @@ -15881,11 +15953,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/seconddeck/fore) "QN" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/engineering/wastetank) @@ -15897,10 +15969,6 @@ }, /turf/simulated/floor/tiled/dark, /area/assembly/robotics) -"QR" = ( -/obj/random_multi/single_item/punitelly, -/turf/simulated/floor/plating, -/area/maintenance/seconddeck/forestarboard) "QT" = ( /obj/structure/sign/warning/vent_port{ dir = 1 @@ -15920,7 +15988,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/engineering/engine_monitoring) "QV" = ( -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /obj/structure/bed/chair/padded/yellow{ @@ -15960,25 +16028,20 @@ use_power = 1; volume_rate = 700 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 1 +/turf/simulated/floor/reinforced{ + map_airless = 1 }, -/turf/simulated/floor/reinforced/airless, /area/engineering/engine_room) "Re" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 8 }, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Robotics Surgical Theater"; - dir = 4 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/white, /area/assembly/robotics/surgery) @@ -15991,11 +16054,11 @@ /turf/simulated/floor/tiled/monotile, /area/vacant/prototype/control) "Rg" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -16008,50 +16071,33 @@ d2 = 4; icon_state = "1-4" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "Ri" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Rj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/vacant/prototype/control) -"Rk" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, -/obj/machinery/door/blast/regular{ - dir = 4; - id_tag = "fusion_observation" - }, -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "Rl" = ( /obj/machinery/atmospherics/pipe/simple/visible/green{ @@ -16065,7 +16111,7 @@ sensor_name = "Nitrogen Supply Tank"; sensor_tag = "n2_sensor" }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -16085,18 +16131,7 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "Rn" = ( -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Shield Subgrid"; - name_tag = "Shield Subgrid" - }, -/obj/structure/cable/cyan{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4; - icon_state = "warning" - }, +/obj/machinery/power/breakerbox, /turf/simulated/floor/plating, /area/engineering/shieldbay) "Ro" = ( @@ -16151,20 +16186,34 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/techfloor, /area/engineering/shieldbay) +"Rw" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck) "Rx" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "RE" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftstarboard) "RF" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/bluespace) +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/synth/borg_upload) "RG" = ( /obj/structure/closet/secure_closet/engineering_welding, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/device/radio/intercom{ pixel_y = 23 }, @@ -16181,7 +16230,7 @@ /turf/simulated/floor/tiled/dark, /area/assembly/robotics) "RI" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -16196,41 +16245,54 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/seconddeck/fore) "RL" = ( -/obj/structure/window/reinforced{ - dir = 1 +/obj/structure/bed/chair/padded/yellow{ + dir = 4 }, -/obj/machinery/door/window/brigdoor/northleft{ - dir = 2 +/obj/machinery/button/blast_door{ + id_tag = "bsd_access"; + name = "Drive Lockdown"; + pixel_x = 6; + pixel_y = 26; + req_access = list("ACCESS_AI_UPLOAD") }, -/obj/structure/table/rack{ - dir = 8 +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the observation shutters."; + id_tag = "bsdwindow"; + name = "Chamber Observation"; + pixel_x = -7; + pixel_y = 26 }, -/obj/item/aiModule/solgov, -/obj/structure/window/reinforced{ - dir = 8 +/turf/simulated/floor/tiled/techfloor, +/area/engineering/bluespacebay) +"RM" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/synth/borg_upload) +/turf/simulated/floor/plating, +/area/engineering/shieldbay) "RO" = ( /obj/structure/table/rack, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/forestarboard) "RP" = ( @@ -16244,18 +16306,14 @@ dir = 1 }, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Monitoring Room"; - dir = 8 - }, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/steel_grid, /area/engineering/engineering_bay) "RT" = ( /turf/simulated/wall/r_wall/hull, /area/vacant/cargo) "RV" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/engineering_torch, /obj/machinery/light{ dir = 1 @@ -16281,8 +16339,8 @@ /turf/simulated/floor/tiled/techfloor, /area/storage/medical) "RY" = ( -/obj/effect/floor_decal/corner/yellow, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/corner/yellow, +/obj/floor_decal/floordetail/edgedrain{ dir = 9 }, /obj/machinery/computer/operating{ @@ -16302,7 +16360,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "Sc" = ( @@ -16332,28 +16390,20 @@ /obj/structure/closet/crate/radiation, /obj/item/stack/material/tritium/ten, /obj/item/stack/material/tritium/ten, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Prototype Chamber One" - }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/vacant/prototype/engine) "Sh" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/portable_atmospherics/canister/hydrogen, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "Si" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/item/device/radio/intercom{ dir = 1; pixel_y = -28 @@ -16361,27 +16411,25 @@ /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Sj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "Sk" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Core Interior"; +/obj/floor_decal/industrial/warning, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Engine Core"; dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/engineering/engine_room) "Sl" = ( /obj/machinery/cryopod{ @@ -16397,18 +16445,14 @@ /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 5 }, -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Port Area"; - dir = 4 - }, /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "So" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -16423,8 +16467,25 @@ dir = 4; pixel_x = -32 }, -/turf/simulated/floor/bluegrid, -/area/engineering/bluespace) +/obj/structure/table/rack{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 4; + name = "engineering front desk" + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/aiModule/purge, +/obj/item/aiModule/quarantine, +/obj/item/aiModule/solgov_aggressive, +/turf/simulated/floor/tiled/techfloor/grid, +/area/synth/borg_upload) "Sr" = ( /obj/structure/window/reinforced{ dir = 1 @@ -16448,7 +16509,7 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) "Sv" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/hidden/red{ @@ -16457,7 +16518,7 @@ /turf/simulated/floor/tiled/dark, /area/engineering/storage) "Sx" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -16465,7 +16526,7 @@ /turf/simulated/floor/tiled/techfloor, /area/hallway/primary/seconddeck/fore) "SB" = ( -/obj/effect/shuttle_landmark/lift/medical_bottom, +/obj/shuttle_landmark/lift/medical_bottom, /turf/simulated/floor/plating, /area/medical/morgue) "SC" = ( @@ -16476,7 +16537,7 @@ /obj/item/stack/material/plasteel{ amount = 10 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 6 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -16493,9 +16554,9 @@ dir = 4; pixel_x = -21 }, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/shutoff, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/shutoff, /obj/machinery/atmospherics/valve/shutoff/scrubbers, /turf/simulated/floor/tiled/monotile, /area/engineering/engineering_bay) @@ -16505,8 +16566,8 @@ name = "Equipment Storage"; pixel_y = -24 }, -/obj/effect/floor_decal/corner/yellow/half, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/corner/yellow/half, +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ @@ -16538,17 +16599,12 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "SQ" = ( -/obj/effect/floor_decal/corner/yellow/diagonal, +/obj/floor_decal/corner/yellow/diagonal, /obj/random/junk, /obj/structure/hygiene/toilet, /turf/simulated/floor/tiled/freezer, /area/maintenance/seconddeck/forestarboard) "SR" = ( -/obj/structure/cable/cyan{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, @@ -16569,9 +16625,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -16622,21 +16675,22 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/foreport) "Th" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/cable/yellow{ + d1 = 4; d2 = 8; - icon_state = "0-8" + icon_state = "4-8" }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Tj" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -16649,13 +16703,13 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/wingrille_spawn/reinforced_phoron/full, +/obj/wingrille_spawn/reinforced_phoron/full, /obj/machinery/door/blast/regular/open{ dir = 4; icon_state = "pdoor0"; id_tag = "prototype_chamber_blast" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/vacant/prototype/engine) "Tl" = ( /obj/machinery/atmospherics/pipe/manifold/visible/yellow, @@ -16663,7 +16717,7 @@ dir = 1; pixel_y = -28 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -16678,33 +16732,26 @@ /obj/machinery/air_sensor/engine{ id_tag = "engine_sensor" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/engineering/engine_room) "Tp" = ( /obj/structure/sign/warning/vacuum, /turf/simulated/wall/r_wall/prepainted, /area/engineering/engine_room) -"Tq" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/engineering_torch, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Locker Room" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/engineering/engineering_bay) "Ts" = ( /obj/structure/sign/warning/secure_area{ dir = 1; pixel_y = -32 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -16714,13 +16761,13 @@ /area/hallway/primary/seconddeck) "Tu" = ( /obj/machinery/space_heater, -/obj/effect/floor_decal/corner/yellow/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/engineering/foyer) "Tv" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /obj/structure/cable/green{ @@ -16750,7 +16797,7 @@ /turf/simulated/floor/tiled, /area/engineering/foyer) "TA" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -16765,14 +16812,14 @@ /area/hallway/primary/seconddeck) "TD" = ( /obj/machinery/computer/rdconsole/robotics, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/reagent_dispensers/acid{ pixel_x = 32 }, /turf/simulated/floor/tiled/dark/monotile, /area/assembly/robotics) "TG" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -16783,7 +16830,9 @@ /area/engineering/shieldbay) "TK" = ( /obj/structure/grille, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/engineering/engine_room) "TL" = ( /obj/structure/railing/mapped{ @@ -16798,7 +16847,7 @@ /area/maintenance/seconddeck/forestarboard) "TV" = ( /obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor, /area/storage/cargo) "TW" = ( @@ -16828,7 +16877,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/seconddeck/central) "Ua" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/engineering/shieldbay) "Uc" = ( @@ -16877,40 +16926,43 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "Ug" = ( -/obj/machinery/camera/network/engine{ - c_tag = "Engine - Prototype Chamber 01" - }, /obj/machinery/computer/modular/preset/engineering{ dir = 8; icon_state = "console" }, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, /area/vacant/prototype/control) "Uh" = ( -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/plating, -/area/vacant/prototype/engine) -"Uj" = ( /obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/power/smes/buildable/preset/torch/engine_main{ - RCon_tag = "Prototype - Main" +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, +/turf/simulated/floor/plating, +/area/vacant/prototype/engine) +"Uj" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/smes/buildable/preset/torch/substation_full/rust{ + RCon_tag = "Substation - RUST" + }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Ul" = ( @@ -16952,9 +17004,10 @@ id_tag = "enginecore" }, /obj/machinery/power/supermatter, -/obj/effect/engine_setup/core, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/simulated/floor/greengrid/airless, +/obj/engine_setup/core, +/turf/simulated/floor/greengrid{ + map_airless = 1 + }, /area/engineering/engine_room) "Up" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -16964,7 +17017,7 @@ /area/shuttle/escape_pod11/station) "Uz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -17023,11 +17076,11 @@ /turf/simulated/wall/r_wall/prepainted, /area/engineering/atmos) "UY" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/aftstarboard) "Va" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 }, @@ -17050,7 +17103,7 @@ tag_south = 2; tag_west = 3 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "Ve" = ( @@ -17068,11 +17121,11 @@ name = "north bump"; pixel_y = 24 }, -/obj/structure/cable{ +/obj/structure/cable/green{ d2 = 2; icon_state = "0-2" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/vacant/prototype/engine) "Vf" = ( /obj/machinery/computer/air_control{ @@ -17103,14 +17156,23 @@ /turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "Vi" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/machinery/camera/network/engineering{ + c_tag = "Engineering - Fusion Chamber"; + dir = 8 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Vj" = ( @@ -17132,7 +17194,7 @@ name = "Engine Radiator Shutters" }, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /turf/simulated/floor/plating, /area/engineering/engine_room) "Vm" = ( @@ -17140,7 +17202,7 @@ dir = 8; icon_state = "railing0-1" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/random/trash, @@ -17153,29 +17215,32 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "Vo" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/simulated/floor/greengrid/airless, +/turf/simulated/floor/greengrid{ + map_airless = 1 + }, /area/engineering/engine_room) "Vq" = ( /turf/simulated/wall/r_wall/hull, /area/engineering/wastetank) "Vr" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/seconddeck/foreport) "Vu" = ( /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/seconddeck/aftport) "VB" = ( -/obj/effect/floor_decal/techfloor/corner, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/corner_techfloor_grid, +/obj/floor_decal/corner_techfloor_grid, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -17197,7 +17262,7 @@ /turf/simulated/floor/tiled/monotile, /area/engineering/engineering_bay) "VE" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ +/obj/wallframe_spawn/reinforced/polarized/no_grille{ id = "robotics_surg" }, /turf/simulated/floor/plating, @@ -17229,12 +17294,14 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fore) "VP" = ( /obj/structure/closet/radiation, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -17257,19 +17324,21 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fore) "VT" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/seconddeck/forestarboard) "VX" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/central) "Wa" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/crate/freezer/rations, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/central) @@ -17294,11 +17363,11 @@ /turf/simulated/floor/plating, /area/engineering/engine_smes) "We" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor/corner{ dir = 4 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -17320,7 +17389,9 @@ /area/hallway/primary/seconddeck/fore) "Wg" = ( /obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "Wh" = ( /obj/structure/cable{ @@ -17334,16 +17405,16 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/seconddeck/fore) "Wi" = ( -/obj/effect/floor_decal/corner/yellow/diagonal, +/obj/floor_decal/corner/yellow/diagonal, /obj/machinery/door/airlock/civilian{ name = "Shower" }, @@ -17365,25 +17436,27 @@ /turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "Wk" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 +/obj/machinery/alarm{ + dir = 1; + pixel_y = -22 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/obj/catwalk_plated, +/turf/simulated/floor/bluegrid, +/area/engineering/bluespace) "Wl" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod10, -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/shuttle_landmark/escape_pod/start/pod10, +/obj/wallframe_spawn/reinforced/titanium, /turf/simulated/floor/plating, /area/shuttle/escape_pod10/station) "Wm" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, @@ -17395,7 +17468,7 @@ tag_north = 1; tag_west = 2 }, -/obj/effect/engine_setup/filter, +/obj/engine_setup/filter, /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) "Wo" = ( @@ -17405,7 +17478,9 @@ name = "Reactor Vent" }, /obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/engineering/engine_room) "Wp" = ( /turf/simulated/wall/r_wall/hull, @@ -17416,14 +17491,14 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "Wr" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -17453,8 +17528,14 @@ }, /turf/simulated/floor/tiled/monotile, /area/engineering/engineering_bay) +"Ww" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/greengrid, +/area/synth/borg_upload) "Wx" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -17486,15 +17567,15 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftport) "Wz" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) "WA" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/warning, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -17556,10 +17637,10 @@ /turf/simulated/wall/r_wall/prepainted, /area/engineering/atmos) "WH" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 9 }, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 4 }, /obj/machinery/light{ @@ -17582,7 +17663,7 @@ /area/engineering/atmos) "WJ" = ( /obj/machinery/light/spot, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/unary/heater{ dir = 1 }, @@ -17604,10 +17685,10 @@ /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftstarboard) "WM" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 10 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 4 }, /obj/structure/closet/crate/secure/biohazard/alt{ @@ -17629,31 +17710,41 @@ /turf/simulated/floor/tiled/white, /area/assembly/robotics/surgery) "WN" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/button/blast_door{ - id_tag = "borg"; - name = "Cyborg Upload Blast Doors"; - pixel_x = -6; - pixel_y = -26; - req_access = list("ACCESS_AI_UPLOAD") - }, /obj/structure/cable/cyan{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/obj/catwalk_plated, +/obj/machinery/access_button/airlock_interior{ + master_tag = "bsd_controller"; + pixel_x = -23; + pixel_y = 23 + }, +/obj/machinery/access_button/airlock_exterior{ + master_tag = "bsd_controller"; + pixel_x = 23; + pixel_y = 23 + }, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + dir = 1; + id_tag = "bsd_controller"; + name = "Drive Containment Access Controller"; + pixel_y = -21; + req_access = list("ACCESS_ENGINE_EQUIP"); + tag_exterior_door = "bsd_exterior"; + tag_interior_door = "bsd_interior" + }, +/turf/simulated/floor/plating, +/area/engineering/bluespacebay) "WP" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/cable/cyan{ d1 = 1; d2 = 2; @@ -17689,7 +17780,7 @@ /turf/simulated/floor/tiled/techfloor, /area/vacant/cargo) "WU" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -17735,33 +17826,32 @@ /obj/machinery/light{ dir = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/vacant/prototype/engine) "Xf" = ( /obj/machinery/shield_diffuser, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "Xg" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "Xh" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plating, /area/vacant/prototype/engine) @@ -17770,6 +17860,10 @@ dir = 1; pixel_y = -24 }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/yellow, /turf/simulated/floor/tiled/steel_grid, /area/vacant/prototype/control) "Xk" = ( @@ -17778,17 +17872,19 @@ name = "Incinerator Vent" }, /obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/incinerator) "Xl" = ( /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "Xm" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/machinery/light/small{ dir = 4 }, @@ -17810,7 +17906,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/engine_room) "Xp" = ( /obj/machinery/atmospherics/pipe/simple/visible/green{ @@ -17823,16 +17919,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "Xr" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/medical/morgue) "Xt" = ( @@ -17840,16 +17936,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "Xv" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/table/rack{ dir = 8 }, @@ -17874,7 +17970,7 @@ /area/maintenance/seconddeck/forestarboard) "Xz" = ( /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -17885,9 +17981,13 @@ /area/hallway/primary/seconddeck/fore) "XB" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/forestarboard) +"XE" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/greengrid, +/area/synth/borg_upload) "XI" = ( /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -17897,7 +17997,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/plating, @@ -17913,17 +18013,17 @@ /area/maintenance/seconddeck/forestarboard) "XO" = ( /obj/machinery/r_n_d/circuit_imprinter, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/assembly/robotics) "XP" = ( /turf/simulated/wall/prepainted, /area/assembly/robotics) +"XT" = ( +/obj/machinery/shield_diffuser, +/turf/simulated/floor/reinforced, +/area/torchexterior) "XU" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -17935,15 +18035,27 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance/bolted{ + frequency = 1379; + id_tag = "bsd_exterior"; + name = "Drive Containment Chamber" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + icon_state = "pdoor0"; + id_tag = "bsd_access"; + name = "Drive Containment" + }, +/turf/simulated/floor/tiled/dark, +/area/engineering/bluespacebay) "XV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -17955,7 +18067,7 @@ /turf/simulated/wall/prepainted, /area/maintenance/seconddeck/forestarboard) "Yc" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -17976,21 +18088,23 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/seconddeck/forestarboard) "Yf" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 5 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/vacant/prototype/engine) "Yg" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stack/material/glass/reinforced{ amount = 50 }, @@ -18018,16 +18132,6 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engineering_bay) "Yh" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/vacant/prototype/engine) @@ -18042,16 +18146,16 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/effect/floor_decal/corner/black{ +/obj/floor_decal/corner/black{ dir = 6 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "Yo" = ( /obj/item/clothing/gloves/insulated, /obj/item/storage/toolbox/electrical, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/table/steel, /obj/machinery/firealarm{ pixel_y = 21 @@ -18060,7 +18164,7 @@ /area/engineering/shieldbay) "Yp" = ( /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -18078,13 +18182,13 @@ /area/engineering/atmos) "Yu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 8 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -18107,7 +18211,7 @@ dir = 8; icon_state = "railing0-1" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/tiled, /area/engineering/foyer) "YG" = ( @@ -18120,6 +18224,15 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) +"YH" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/engineering/shieldbay) "YI" = ( /obj/structure/sign/warning/high_voltage, /turf/simulated/wall/prepainted, @@ -18157,7 +18270,7 @@ /turf/simulated/floor/tiled/techfloor, /area/engineering/atmos) "YV" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/yellow, @@ -18170,7 +18283,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/atmos) "Zb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -18193,7 +18306,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -18203,10 +18316,10 @@ /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 9 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -18234,7 +18347,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) @@ -18259,11 +18372,10 @@ pump_direction = 0; use_power = 1 }, -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6 +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/reinforced{ + map_airless = 1 }, -/turf/simulated/floor/reinforced/airless, /area/engineering/engine_room) "Zi" = ( /obj/structure/cable/yellow{ @@ -18279,30 +18391,15 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/plating, /area/vacant/prototype/engine) "Zj" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/camera/network/second_deck{ - c_tag = "Second Deck - Drone Fabrication" - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, +/obj/machinery/drone_fabricator/torch, /turf/simulated/floor/tiled/techfloor, -/area/engineering/drone_fabrication) +/area/synth/borg_upload) "Zk" = ( /obj/structure/lattice, /obj/structure/sign/solgov{ @@ -18311,14 +18408,13 @@ /turf/space, /area/space) "Zl" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/maintenance, /obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/seconddeck/forestarboard) "Zm" = ( @@ -18340,14 +18436,13 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_room) "Zo" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 +/turf/simulated/floor/reinforced{ + map_airless = 1 }, -/turf/simulated/floor/reinforced/airless, /area/engineering/engine_room) "Zp" = ( /obj/item/ammo_magazine/pistol/small/empty, @@ -18364,7 +18459,7 @@ /turf/simulated/wall/r_wall/hull, /area/engineering/engine_room) "Zt" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fore) "Zu" = ( @@ -18392,7 +18487,7 @@ /area/maintenance/seconddeck/foreport) "ZF" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/stock_parts/circuitboard/message_monitor, /turf/simulated/floor/tiled/techfloor/grid, /area/storage/tech) @@ -18438,6 +18533,12 @@ }, /turf/simulated/floor/plating, /area/maintenance/seconddeck/aftstarboard) +"ZM" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/greengrid, +/area/synth/borg_upload) "ZS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -18445,8 +18546,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/catwalk_plated, +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/structure/cable/green{ @@ -18465,13 +18566,15 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/foreport) "ZX" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/tiled/techfloor, /area/maintenance/seconddeck/central) "ZZ" = ( /obj/machinery/light/small, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/engineering/engine_room) (1,1,1) = {" @@ -27054,11 +27157,11 @@ qw mc ue Se -Kf +ky mg mg mg -Kf +ky Se ue dj @@ -27256,11 +27359,11 @@ qw Lc ad Ej -Kf +ky Fg Xg Oh -Kf +ky Ej eH qj @@ -27458,11 +27561,11 @@ qw md ad Ej -Kf +ky Gg eh Ph -Kf +ky Ej eH rj @@ -27660,11 +27763,11 @@ qw Lc ad Ej -Kf +ky Hg mh Qh -Kf +ky Ej eH qj @@ -27863,7 +27966,7 @@ ud Pe Se IV -Kf +ky qh Rh Na @@ -29277,7 +29380,7 @@ kA Qe Ok Ok -Rk +Ok Qe Qe Oj @@ -30683,7 +30786,7 @@ JX fd bd bd -QR +bd bd GY Gs @@ -30695,8 +30798,8 @@ Ji RK VM rt -sv -sv +pg +rA sv sv uN @@ -30897,9 +31000,9 @@ xS Lh Zt gZ -ZV kP -ZV +uS +kP ZV dX aK @@ -31098,11 +31201,11 @@ Nk kD VR nk -Lp -Lp -Lp -Lp -Lp +ha +ha +gr +ha +ha dX aK bH @@ -31300,11 +31403,11 @@ mX nP qm XA -Lp +ha tD iW jB -Lp +ha dX aK Zp @@ -31488,7 +31591,7 @@ JX JX dO dq -EQ +dq dq dr dq @@ -31502,11 +31605,11 @@ mY kD id XA -Lp +ha iS lu jC -Lp +ha dX aK cb @@ -31704,11 +31807,11 @@ mZ kD qm XA -Lp +ha RL Au jD -Lp +ha dX aK cl @@ -31906,11 +32009,11 @@ kD kD AI XA -Lp +ha iT ju jE -Lp +ha dX aK aK @@ -32108,11 +32211,11 @@ JL pJ QM XA -Lp -Lp +ha +ha Io -Lp -Lp +ha +ha uQ sv uN @@ -32310,10 +32413,10 @@ UN XA hO KZ -qv +gV sC WN -qv +gV oh vz kL @@ -32490,8 +32593,8 @@ aa aa aa aa -Ls -Ls +Gr +Gr Ib cd cI @@ -32511,14 +32614,14 @@ OV OV nQ yO -qv -qv -rA +jV +jV +jV XU -qv -qv -qv -qv +jV +jV +vB +nc dX yg yV @@ -32530,7 +32633,7 @@ Cn CP Xk lk -ky +uZ aa aa aa @@ -32713,13 +32816,13 @@ jp na Om Jt -qv +jV IM rB Bu ug -uS -uS +rF +jV qv dX yg @@ -32732,7 +32835,7 @@ Co CQ EV lk -ky +uZ aa aa aa @@ -32893,9 +32996,9 @@ aa aa aa wb -uZ -lk -lk +XT +Gr +Gr bF cf cJ @@ -32915,13 +33018,13 @@ jp Ss Qt rm -qv -Zj -tk +vo +rE +uV Nq tk Wk -vA +jV qv dX yg @@ -32934,7 +33037,7 @@ Cn CR Xk lk -ky +uZ aa aa aa @@ -33123,7 +33226,7 @@ sE tl QC JE -vB +jV qv dX yg @@ -33319,13 +33422,13 @@ jp Ss IA Fm -qv +iP rE Hp Hq LO sF -vC +jV qv dX yg @@ -33521,13 +33624,13 @@ jp OV dn Gm -qv -rF +jV rF +ix tm -tm -rF +hy rF +jV qv xp yh @@ -33723,17 +33826,17 @@ OV OV nT SZ -qv -qv -qv -qv -qv -qv -qv -qv +jV +jV +jV +jV +jV +jV +vB nc yi yi +qv zL AD nc @@ -33906,7 +34009,7 @@ JX JX JX bc -PO +vH ch cL cN @@ -33916,13 +34019,13 @@ fm bI gT Of -ix -ix -ix -ix -ix -ix -ix +XJ +XJ +XJ +XJ +XJ +XJ +XJ Zl Im mr @@ -34734,12 +34837,12 @@ fC bI fV xj -gV -jV -jV -jV -jV -jV +rO +Lp +Lp +Lp +Lp +Lp Ow Kx yl @@ -34935,14 +35038,14 @@ XP XP XP pL -gr -jV -jV +rW +Lp +Lp OL OF Sp -jV -jV +Lp +Lp Yp Xz Xz @@ -35138,13 +35241,13 @@ ee XP ge gD -ha -yo -yo -RF -yo +Lp +Zj +XE +no +vA yo -jV +Lp Iz Jb Jb @@ -35340,13 +35443,13 @@ fF XP gg gD -ha -RF +Lp RF +ZM no -RF +Ww vF -jV +Lp wz oy ze @@ -35542,13 +35645,13 @@ fG XP ge gD -ha +Lp tH bq NY cg ct -jV +Lp wz oy zO @@ -35742,15 +35845,15 @@ qt QQ fK XP -ge -gn -jV -jV -vy +Jm +gD +Lp +Lp +vC Ka vy -jV -jV +Lp +Lp TJ TJ TJ @@ -35947,11 +36050,11 @@ KQ Tv xj PF -jV -jV +Lp +Lp tq -jV -jV +Lp +Lp qo wC qy @@ -36146,16 +36249,16 @@ VE IL VE ZG -pL -rW -rO -TJ +ws +Rw +PM +RM KA tt PI Ua uA -Rn +uA yr TJ Ky @@ -36356,7 +36459,7 @@ Zm SR PX NX -wB +YH Jc nN TJ @@ -36560,7 +36663,7 @@ Jf TJ Yo xu -TJ +Rn TJ Ky VK @@ -36763,7 +36866,7 @@ TJ TJ TJ TJ -Ky +TJ Ky VK Bm @@ -37756,7 +37859,7 @@ aY dA iF iN -Tq +kH RI lz MK @@ -40773,7 +40876,7 @@ GW GW GW as -Xr +aT zi Zu MW @@ -42186,7 +42289,7 @@ aa GW GW GW -aT +aH oK SB cB @@ -44217,7 +44320,7 @@ ax do gy dp -if +kJ jc jM kv @@ -44632,7 +44735,7 @@ qc Zh To Rd -Le +qc CM jL uI @@ -44830,7 +44933,7 @@ kw lj lY So -qc +pa Ck Uo Zo @@ -45032,10 +45135,10 @@ jO jO lZ ok -Le +qc Sk Vo -bp +Zo qc tf tY @@ -45438,7 +45541,7 @@ YL Ls aa aa -lk +Gr aa aa Ls @@ -45640,7 +45743,7 @@ ik Ls ag ag -lk +Gr ag ag Ls @@ -45842,7 +45945,7 @@ ik aa aa aa -ky +XT aa aa aa @@ -46044,7 +46147,7 @@ ik aa aa aa -lk +Gr aa aa aa @@ -46246,7 +46349,7 @@ ik ag ag oH -lk +Gr oH ag ag @@ -46448,7 +46551,7 @@ ik aa aa aa -ky +XT aa aa aa @@ -46650,7 +46753,7 @@ ik aa aa aa -lk +Gr aa aa aa @@ -46852,7 +46955,7 @@ ik aa aa aa -lk +Gr aa aa aa @@ -47054,7 +47157,7 @@ ik aa aa aa -ky +XT aa aa aa @@ -47256,7 +47359,7 @@ jj ag ag aa -lk +Gr aa ag ag @@ -47268,7 +47371,7 @@ il jj fT ox -IR +TK aa aa aa @@ -47458,7 +47561,7 @@ fT fT ag aa -lk +Gr aa ag fT @@ -47660,7 +47763,7 @@ fT gE ag aa -ky +XT aa ag FW @@ -47862,7 +47965,7 @@ fT fT ag aa -lk +Gr aa ag fT @@ -48064,7 +48167,7 @@ af af ag ag -lk +Gr ag ag af @@ -48266,7 +48369,7 @@ ag af af oH -ky +XT oH af af diff --git a/maps/torch/torch5_deck1.dmm b/maps/torch/torch5_deck1.dmm index 452c4e8d16872..cb9808a7ec037 100644 --- a/maps/torch/torch5_deck1.dmm +++ b/maps/torch/torch5_deck1.dmm @@ -3,37 +3,37 @@ /turf/space, /area/space) "aab" = ( -/obj/effect/shuttle_landmark/merc/deck2{ +/obj/shuttle_landmark/merc/deck2{ name = "1st Deck, Aft Starboard" }, /turf/space, /area/space) "aac" = ( -/obj/effect/shuttle_landmark/torch/deck2/exploration_shuttle{ +/obj/shuttle_landmark/torch/deck2/exploration_shuttle{ name = "1st Deck, Fore Starboard" }, /turf/space, /area/space) "aad" = ( -/obj/effect/shuttle_landmark/torch/deck2/guppy{ +/obj/shuttle_landmark/torch/deck2/guppy{ name = "1st Deck, Aft" }, /turf/space, /area/space) "aae" = ( /obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralstarboard) "aaf" = ( /obj/machinery/atmospherics/unary/tank/hydrogen, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aag" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aah" = ( /obj/machinery/alarm{ @@ -41,7 +41,7 @@ pixel_y = -25 }, /obj/machinery/light, -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/center) "aai" = ( @@ -53,7 +53,7 @@ dir = 1; pixel_y = -24 }, -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/center) "aaj" = ( @@ -74,7 +74,7 @@ /obj/machinery/light/spot{ dir = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aal" = ( /obj/structure/cable/green{ @@ -85,7 +85,7 @@ /turf/simulated/floor/tiled/dark, /area/security/bo) "aam" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/button/blast_door{ @@ -94,35 +94,35 @@ pixel_y = 32; req_access = list("ACCESS_CONSTRUCTION") }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aan" = ( /obj/machinery/atmospherics/unary/tank/hydrogen{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aao" = ( /obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aap" = ( /obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, /obj/machinery/meter, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aaq" = ( /obj/machinery/atmospherics/valve{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aar" = ( -/obj/effect/shuttle_landmark/skipjack/deck2{ +/obj/shuttle_landmark/skipjack/deck2{ name = "1st Deck, Fore" }, /turf/space, @@ -131,39 +131,39 @@ /obj/machinery/atmospherics/pipe/manifold/visible/fuel{ dir = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aat" = ( /obj/machinery/atmospherics/valve{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aau" = ( /obj/machinery/atmospherics/unary/tank/hydrogen{ dir = 8 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aav" = ( /obj/machinery/atmospherics/unary/tank/hydrogen{ dir = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aaw" = ( /obj/machinery/atmospherics/pipe/simple/visible/fuel, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aax" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aay" = ( /obj/structure/sign/warning/compressed_gas{ @@ -178,14 +178,14 @@ /obj/machinery/light/spot{ dir = 8 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aaA" = ( /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, /obj/machinery/meter, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aaB" = ( /obj/structure/disposalpipe/trunk{ @@ -201,32 +201,32 @@ /obj/machinery/atmospherics/valve{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aaD" = ( /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aaE" = ( /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aaF" = ( /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aaG" = ( /obj/machinery/atmospherics/pipe/manifold/visible/fuel{ @@ -235,7 +235,7 @@ /obj/machinery/light/spot{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aaH" = ( /obj/structure/sign/warning/compressed_gas{ @@ -248,16 +248,16 @@ /obj/machinery/atmospherics/unary/tank/hydrogen{ dir = 1 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aaJ" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 6 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aaK" = ( /obj/machinery/access_button{ @@ -273,7 +273,7 @@ dir = 4 }, /obj/machinery/atmospherics/binary/pump/high_power, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aaL" = ( /obj/machinery/alarm{ @@ -286,11 +286,11 @@ /obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aaN" = ( /obj/machinery/shield_diffuser, @@ -298,7 +298,7 @@ id_tag = "auxfuelvent"; name = "Auxiliary Fuel Storage Vent" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/engineering/fuelbay/aux) "aaO" = ( /obj/machinery/door/airlock/external{ @@ -514,7 +514,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "abf" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/pager/robotics{ @@ -547,10 +547,10 @@ /turf/simulated/floor/reinforced, /area/rnd/xenobiology/cell_4) "abi" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /obj/structure/hygiene/sink{ @@ -558,8 +558,7 @@ pixel_x = 11 }, /obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Autopsy"; - dir = 8 + c_tag = "Medical - Autopsy" }, /turf/simulated/floor/tiled/dark/monotile, /area/medical/morgue/autopsy) @@ -572,8 +571,6 @@ /turf/simulated/wall/prepainted, /area/medical/counselor) "abl" = ( -/obj/machinery/chemical_dispenser/full, -/obj/effect/floor_decal/corner/beige/mono, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -581,30 +578,17 @@ /obj/structure/sign/warning/nosmoking_1{ pixel_y = 24 }, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/chemistry) -"abm" = ( -/obj/structure/table/standard, -/obj/item/stack/material/phoron{ - amount = 6 - }, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/glass/beaker/insulated/large, -/obj/item/reagent_containers/glass/beaker/large, -/obj/effect/floor_decal/corner/beige/mono, -/obj/machinery/light{ - dir = 1 - }, +/obj/floor_decal/corner/beige/mono, +/obj/machinery/chemical_dispenser/full, /turf/simulated/floor/tiled/white/monotile, /area/medical/chemistry) "abn" = ( -/obj/effect/floor_decal/corner/beige/mono, /obj/structure/closet/secure_closet/medical_wall{ name = "Pill Cabinet"; pixel_y = 32 }, +/obj/floor_decal/corner/beige/mono, /obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, /turf/simulated/floor/tiled/white/monotile, /area/medical/chemistry) "abo" = ( @@ -625,58 +609,68 @@ /turf/simulated/floor/tiled/dark, /area/medical/morgue/autopsy) "abr" = ( +/obj/floor_decal/corner/beige/mono, /obj/machinery/chem_master, -/obj/effect/floor_decal/corner/beige/mono, /turf/simulated/floor/tiled/white/monotile, /area/medical/chemistry) "abs" = ( -/obj/effect/floor_decal/corner/beige{ +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/corner/beige{ dir = 5 }, -/obj/effect/floor_decal/corner/beige{ +/obj/floor_decal/corner/beige{ dir = 10 }, -/obj/structure/bed/chair/comfy/blue{ - dir = 8 +/obj/structure/table/standard, +/obj/item/reagent_containers/glass/beaker/insulated/large, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/dropper, +/obj/item/stack/material/phoron{ + amount = 6 }, /turf/simulated/floor/tiled/white, /area/medical/chemistry) "abt" = ( -/obj/effect/floor_decal/corner/beige/mono, /obj/structure/table/standard, -/obj/machinery/reagent_temperature/cooler, +/obj/floor_decal/corner/beige/mono, +/obj/machinery/reagent_temperature, /turf/simulated/floor/tiled/white/monotile, /area/medical/chemistry) "abu" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/beige/mono, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, /obj/machinery/power/apc{ dir = 1; name = "north bump"; pixel_y = 24 }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/reagent_temperature, +/obj/structure/table/standard, +/obj/floor_decal/corner/beige/mono, /turf/simulated/floor/tiled/white/monotile, /area/medical/chemistry) "abv" = ( -/obj/machinery/light{ - dir = 1 +/obj/floor_decal/corner/beige{ + dir = 10 + }, +/obj/floor_decal/corner/beige{ + dir = 10 }, -/obj/effect/floor_decal/corner/beige{ +/obj/floor_decal/corner/beige{ dir = 5 }, -/obj/effect/floor_decal/corner/beige{ - dir = 10 +/obj/machinery/light{ + dir = 1 }, /turf/simulated/floor/tiled/white, /area/medical/chemistry) "abw" = ( -/obj/effect/floor_decal/floordetail/edgedrain, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/floordetail/edgedrain, +/obj/floor_decal/corner/red{ dir = 5 }, /obj/item/device/radio/intercom/department/medbay{ @@ -697,7 +691,7 @@ /obj/item/folder/white, /obj/item/folder/white, /obj/item/folder/white, -/obj/effect/decal/cleanable/cobweb{ +/obj/decal/cleanable/cobweb{ dir = 4 }, /turf/simulated/floor/plating, @@ -733,9 +727,6 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head/deck1) "abA" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -747,12 +738,12 @@ d2 = 8; icon_state = "4-8" }, +/obj/floor_decal/corner/beige{ + dir = 5 + }, /turf/simulated/floor/tiled/white, /area/medical/chemistry) "abB" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -764,12 +755,12 @@ d2 = 8; icon_state = "4-8" }, +/obj/floor_decal/corner/beige{ + dir = 5 + }, /turf/simulated/floor/tiled/white, /area/medical/chemistry) "abC" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -781,15 +772,15 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/tiled/white, -/area/medical/chemistry) -"abD" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 +/obj/floor_decal/corner/beige{ + dir = 5 }, -/obj/effect/floor_decal/corner/beige{ +/obj/floor_decal/corner/beige{ dir = 5 }, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) +"abD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -798,6 +789,12 @@ d2 = 8; icon_state = "1-8" }, +/obj/floor_decal/corner/beige{ + dir = 6 + }, +/obj/floor_decal/corner/beige{ + dir = 9 + }, /turf/simulated/floor/tiled/white, /area/medical/chemistry) "abE" = ( @@ -805,26 +802,23 @@ /area/maintenance/firstdeck/forestarboard) "abF" = ( /obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/firstdeck/forestarboard) "abG" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/turf/simulated/floor/tiled/white, +/obj/floor_decal/corner/beige/mono, +/turf/simulated/floor/tiled/white/monotile, /area/medical/chemistry) "abH" = ( +/obj/machinery/door/firedoor, /obj/machinery/smartfridge/secure/medbay{ dir = 1; req_access = list(list("ACCESS_CHEMISTRY","ACCESS_MEDICAL_EQUIP")) }, -/obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/medical/chemistry) "abI" = ( @@ -834,14 +828,10 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/machinery/camera/network/first_deck{ - c_tag = "Command Hallway - Aft"; - dir = 4 - }, -/obj/effect/landmark{ +/obj/landmark{ name = "lightsout" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) @@ -863,16 +853,16 @@ /turf/simulated/floor/tiled/dark, /area/rnd/development) "abK" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/obj/structure/table/standard, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, /obj/machinery/light_switch{ pixel_y = -22 }, +/obj/structure/table/standard, +/obj/floor_decal/corner/beige{ + dir = 10 + }, /turf/simulated/floor/tiled/white, /area/medical/chemistry) "abL" = ( @@ -896,18 +886,25 @@ pixel_y = -24; req_access = list("ACCESS_MAINT") }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/firstdeck/forestarboard) "abP" = ( /turf/simulated/wall/r_wall/hull, /area/maintenance/firstdeck/centralstarboard) "abQ" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/corner/beige/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk, -/turf/simulated/floor/tiled/white/monotile, +/obj/machinery/disposal, +/obj/floor_decal/corner/beige{ + dir = 10 + }, +/obj/floor_decal/corner/beige{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, /area/medical/chemistry) "abR" = ( /obj/machinery/power/apc{ @@ -935,23 +932,23 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head/deck1) "abT" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, /obj/structure/table/standard, +/obj/floor_decal/corner/beige{ + dir = 10 + }, /turf/simulated/floor/tiled/white, /area/medical/chemistry) "abU" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 +/obj/floor_decal/corner/beige{ + dir = 6 }, -/obj/effect/floor_decal/corner/beige{ - dir = 5 +/obj/structure/bed/chair/padded/blue, +/obj/floor_decal/corner/beige{ + dir = 9 }, -/obj/structure/bed/chair/padded, /turf/simulated/floor/tiled/white, /area/medical/chemistry) "abV" = ( @@ -962,7 +959,7 @@ sensor_name = "Hydrogen Supply Tank"; sensor_tag = "d1sh_sensor" }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "abW" = ( @@ -973,7 +970,7 @@ sensor_name = "Oxygen Supply Tank"; sensor_tag = "d1so2_sensor" }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/alarm{ pixel_y = 24 }, @@ -981,11 +978,7 @@ /area/thruster/d1starboard) "abX" = ( /obj/machinery/r_n_d/destructive_analyzer, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/camera/network/research{ - c_tag = "Research - Development Laboratory"; - dir = 8 - }, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -1003,10 +996,10 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/safe_room/firstdeck) "abZ" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/visible/fuel{ @@ -1033,31 +1026,27 @@ name = "Engineering External Access" }, /obj/machinery/shield_diffuser, -/turf/simulated/floor/tiled/techfloor/grid, +/turf/simulated/floor/reinforced, /area/maintenance/firstdeck/forestarboard) "acd" = ( -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "ace" = ( -/obj/structure/closet/secure_closet/chemical, -/obj/item/storage/box/pillbottles, -/obj/item/device/radio/headset/headset_med, -/obj/item/book/manual/chemistry_recipes, -/obj/item/clothing/glasses/science, -/obj/effect/floor_decal/corner/beige/mono, +/obj/floor_decal/corner/beige/mono, /obj/machinery/button/blast_door{ id_tag = "chemcounter"; name = "Chemistry Counter Lockdown Control"; pixel_x = -6; pixel_y = -24 }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Chemistry"; - dir = 8 - }, /obj/structure/extinguisher_cabinet{ pixel_x = 32 }, +/obj/structure/closet/secure_closet/chemical, +/obj/item/storage/box/pillbottles, +/obj/item/book/manual/chemistry_recipes, +/obj/item/device/radio/headset/headset_med, +/obj/item/clothing/glasses/science, /turf/simulated/floor/tiled/white/monotile, /area/medical/chemistry) "acf" = ( @@ -1132,7 +1121,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/cable/green{ @@ -1146,7 +1135,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/cable/green{ @@ -1164,7 +1153,7 @@ dir = 4 }, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -1183,10 +1172,10 @@ target_pressure = 30000; use_power = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light/small{ dir = 1 }, @@ -1194,10 +1183,10 @@ /area/thruster/d1starboard) "acq" = ( /obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -1206,13 +1195,13 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/firstdeck/forestarboard) "acs" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1226,7 +1215,7 @@ name = "combustion chamber blast door control"; pixel_y = -24 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, @@ -1241,7 +1230,7 @@ use_power = 1; volume_rate = 4000 }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/reinforced, /area/thruster/d1starboard) "acw" = ( @@ -1255,11 +1244,11 @@ use_power = 1; volume_rate = 4000 }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/reinforced, /area/thruster/d1port) "acy" = ( -/obj/effect/floor_decal/corner/pink{ +/obj/floor_decal/corner/pink{ dir = 5 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -1281,7 +1270,7 @@ "acB" = ( /obj/machinery/door/firedoor, /obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/window/brigdoor/eastleft{ name = "Emergency Armory Desk" }, @@ -1294,7 +1283,7 @@ /area/command/armoury/access) "acC" = ( /obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/sign/warning/compressed_gas{ pixel_y = 32 }, @@ -1304,7 +1293,7 @@ /turf/simulated/wall/prepainted, /area/maintenance/firstdeck/centralstarboard) "acE" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/full{ +/obj/wallframe_spawn/reinforced/polarized/full{ id = "roboticlab_window" }, /obj/machinery/door/blast/shutters{ @@ -1345,7 +1334,7 @@ pixel_y = -6; req_access = list(list("ACCESS_MEDICAL","ACCESS_ROBOTICS")) }, -/obj/effect/floor_decal/corner/yellow/mono, +/obj/floor_decal/corner/yellow/mono, /turf/simulated/floor/tiled/white/monotile, /area/assembly/robotics/laboratory) "acG" = ( @@ -1396,12 +1385,12 @@ /obj/random/firstaid, /obj/random/medical, /obj/random/medical, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/decal/cleanable/dirt, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "acK" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/washing_machine, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) @@ -1411,17 +1400,17 @@ "acM" = ( /obj/structure/closet/secure_closet/personal/patient, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "acN" = ( /obj/structure/closet/secure_closet/crew, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "acO" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, /obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -1430,33 +1419,34 @@ name = "Chemistry Counter Shutters"; opacity = 0 }, -/turf/simulated/floor/plating, +/obj/wallframe_spawn/reinforced/no_grille, +/turf/simulated/floor/tiled/white/monotile, /area/medical/chemistry) "acP" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "acQ" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "acR" = ( /obj/structure/table/rack, /obj/item/bodybag, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "acS" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/decal/cleanable/dirt, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "acT" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "acU" = ( @@ -1464,7 +1454,7 @@ dir = 4; icon_state = "pipe-c" }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/machinery/door/firedoor, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -1473,6 +1463,7 @@ name = "Chemistry Counter Shutters"; opacity = 0 }, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/medical/chemistry) "acV" = ( @@ -1495,7 +1486,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "acY" = ( @@ -1506,7 +1497,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/structure/cable/green, @@ -1517,7 +1508,7 @@ dir = 4; target_pressure = 15000 }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "ada" = ( @@ -1531,8 +1522,8 @@ tag_west = 1; tag_west_con = 0.4 }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/warning/full, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/techfloor/grid, /area/thruster/d1starboard) "adb" = ( @@ -1540,7 +1531,7 @@ dir = 8; target_pressure = 15000 }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor/grid, /area/thruster/d1starboard) "adc" = ( @@ -1552,7 +1543,7 @@ /area/thruster/d1starboard) "ade" = ( /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel, @@ -1566,7 +1557,7 @@ /obj/machinery/oxygen_pump{ pixel_x = -32 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1591,7 +1582,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -1603,6 +1594,11 @@ name = "Chemistry Desk" }, /obj/machinery/door/firedoor, +/obj/item/material/bell, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -1611,17 +1607,12 @@ name = "Chemistry Counter Shutters"; opacity = 0 }, -/obj/item/material/bell, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /turf/simulated/floor/tiled/white/monotile, /area/medical/chemistry) "adj" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk, /obj/machinery/firealarm{ pixel_y = 24 @@ -1645,7 +1636,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head/deck1) "adl" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/bed/chair/padded/blue, @@ -1661,7 +1652,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "adm" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ +/obj/floor_decal/corner/paleblue/three_quarters{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -1674,7 +1665,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "adn" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/computer/guestpass{ pixel_y = 32 @@ -1717,7 +1708,7 @@ /turf/simulated/floor/plating, /area/thruster/d1starboard) "ads" = ( -/obj/effect/floor_decal/corner/paleblue, +/obj/floor_decal/corner/paleblue, /turf/simulated/floor/tiled/white, /area/medical/sleeper) "adt" = ( @@ -1732,7 +1723,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 5 }, @@ -1740,7 +1731,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftstarboard) "adu" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -1786,7 +1777,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 @@ -1797,7 +1788,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /obj/machinery/rotating_alarm/security_alarm{ dir = 1 }, @@ -1828,13 +1819,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/decal/cleanable/cobweb2, /obj/structure/cable/green{ d1 = 2; d2 = 8; icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -1851,7 +1842,7 @@ /turf/space, /area/space) "adB" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ +/obj/floor_decal/corner/paleblue/three_quarters{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -1877,7 +1868,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/effect/floor_decal/industrial/hatch/orange, +/obj/floor_decal/industrial/hatch/orange, /obj/machinery/light/small{ dir = 8 }, @@ -1890,22 +1881,22 @@ "adE" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/visible/fuel, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "adF" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "adG" = ( /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 6 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "adH" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters, +/obj/floor_decal/corner/paleblue/three_quarters, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/structure/cable/green{ @@ -1924,7 +1915,7 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "adI" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ @@ -1934,7 +1925,7 @@ /area/thruster/d1starboard) "adJ" = ( /obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -1943,7 +1934,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/crew_quarters/safe_room/firstdeck) "adL" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -1967,11 +1958,11 @@ /area/maintenance/firstdeck/forestarboard) "adN" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/forestarboard) "adO" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/button/alternate/door{ @@ -2008,7 +1999,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/forestarboard) "adQ" = ( -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /obj/machinery/door/firedoor, /obj/structure/sign/directions/infm{ pixel_y = 32 @@ -2041,7 +2032,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/decal/cleanable/cobweb2, /obj/structure/railing/mapped, /turf/simulated/floor/plating, /area/maintenance/firstdeck/forestarboard) @@ -2064,7 +2055,7 @@ /turf/simulated/wall/prepainted, /area/maintenance/firstdeck/forestarboard) "adV" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/up, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/forestarboard) @@ -2073,7 +2064,7 @@ dir = 6 }, /obj/structure/dispenser/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/forestarboard) "adX" = ( @@ -2082,7 +2073,7 @@ }, /obj/structure/closet, /obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/forestarboard) "adY" = ( @@ -2090,7 +2081,7 @@ dir = 4 }, /obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/forestarboard) "adZ" = ( @@ -2098,7 +2089,7 @@ dir = 8 }, /obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/forestarboard) "aea" = ( @@ -2107,11 +2098,11 @@ /area/maintenance/firstdeck/centralstarboard) "aeb" = ( /obj/machinery/space_heater, -/obj/effect/decal/cleanable/cobweb2, +/obj/decal/cleanable/cobweb2, /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "aec" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/structure/cable/green{ @@ -2124,7 +2115,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "aed" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/structure/disposalpipe/segment{ @@ -2157,24 +2148,24 @@ "aef" = ( /obj/structure/table/rack, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralstarboard) "aeg" = ( /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "aeh" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/dispenser{ oxygentanks = 0 }, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralstarboard) "aei" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/item/reagent_containers/ivbag/nanoblood, @@ -2199,7 +2190,7 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "aej" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/structure/disposalpipe/sortjunction/flipped{ @@ -2235,10 +2226,10 @@ /area/medical/medicalhallway) "aek" = ( /obj/machinery/optable, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 1 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/oxygen_pump{ @@ -2251,7 +2242,7 @@ /turf/simulated/floor/tiled/white, /area/medical/surgery) "ael" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/structure/disposalpipe/segment, @@ -2259,7 +2250,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "aem" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/structure/disposalpipe/junction{ @@ -2283,7 +2274,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "aen" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/structure/disposalpipe/segment{ @@ -2306,10 +2297,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, +/obj/machinery/camera/network/medbay{ + c_tag = "Medical - Lobby" + }, /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "aeo" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/light/spot{ @@ -2338,7 +2332,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "aep" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/structure/disposalpipe/segment{ @@ -2368,7 +2362,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/tiled/dark/monotile, @@ -2388,14 +2382,14 @@ "aes" = ( /obj/structure/closet/emcloset, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "aet" = ( /turf/simulated/wall/ocp_wall, /area/thruster/d1starboard) "aeu" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -2425,7 +2419,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "aev" = ( -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, @@ -2435,7 +2429,7 @@ /turf/simulated/floor/tiled/freezer, /area/security/brig) "aew" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ +/obj/floor_decal/corner/paleblue/three_quarters{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -2456,8 +2450,8 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "aex" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/computer/modular/preset/security{ dir = 8; icon_state = "console" @@ -2471,7 +2465,7 @@ /turf/simulated/floor/tiled/monotile, /area/security/locker) "aey" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/light/small{ @@ -2511,7 +2505,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/security/nuke_storage) "aeA" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ @@ -2521,10 +2515,10 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/safe_room/firstdeck) "aeB" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2621,7 +2615,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/catwalk, @@ -2657,7 +2651,7 @@ pixel_y = 24; req_access = list("ACCESS_MAINT") }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/catwalk, @@ -2681,7 +2675,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/structure/catwalk, @@ -2884,7 +2878,7 @@ /turf/simulated/floor/tiled/white, /area/medical/foyer) "afa" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ +/obj/floor_decal/corner/paleblue/three_quarters{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -2906,7 +2900,7 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "afb" = ( -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/multi_tile/glass/medical{ dir = 4; @@ -2924,7 +2918,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/sleeper) "afc" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -2937,20 +2931,20 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "afd" = ( -/obj/effect/floor_decal/spline/plain/blue{ +/obj/floor_decal/spline/plain/blue{ dir = 9 }, /obj/structure/roller_bed, /turf/simulated/floor/tiled/white, /area/medical/sleeper) "afe" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "aff" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ +/obj/floor_decal/corner/paleblue/three_quarters{ dir = 1 }, /obj/structure/disposalpipe/segment, @@ -2962,7 +2956,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "afg" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ +/obj/floor_decal/corner/paleblue/three_quarters{ dir = 8 }, /obj/structure/disposalpipe/sortjunction/flipped{ @@ -2975,7 +2969,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "afh" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/disposalpipe/segment{ @@ -2984,29 +2978,25 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "afi" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/hologram/holopad, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Lobby"; - dir = 1 - }, /obj/machinery/rotating_alarm/security_alarm{ dir = 1 }, /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "afj" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/brig, /turf/simulated/floor/tiled/monotile, /area/security/wing) "afk" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/disposalpipe/segment{ @@ -3022,7 +3012,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "afl" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ +/obj/floor_decal/corner/paleblue/three_quarters{ dir = 1 }, /obj/structure/disposalpipe/segment{ @@ -3031,7 +3021,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "afm" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/structure/bed/chair/padded/blue{ dir = 8 }, @@ -3042,7 +3032,7 @@ /area/medical/medicalhallway) "afn" = ( /obj/structure/closet/l3closet/general, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/railing/mapped{ dir = 4; icon_state = "railing0-1" @@ -3053,7 +3043,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/medical/foyer/storeroom) "afo" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -3068,7 +3058,7 @@ /turf/simulated/floor/plating, /area/medical/foyer) "afp" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/structure/disposalpipe/segment{ @@ -3113,7 +3103,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, @@ -3132,7 +3122,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 10 }, @@ -3140,13 +3130,13 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftstarboard) "afu" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled/white, /area/medical/foyer) "afv" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/power/apc{ @@ -3165,11 +3155,11 @@ internal_pressure_bound = 35000; internal_pressure_bound_default = 35000 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/reinforced, /area/thruster/d1starboard) "afx" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -3182,11 +3172,11 @@ /turf/simulated/floor/tiled/white, /area/medical/foyer) "afy" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/structure/closet/crate/secure/biohazard/alt, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/alarm{ dir = 1; pixel_y = -22 @@ -3194,7 +3184,7 @@ /turf/simulated/floor/tiled/white, /area/medical/foyer) "afz" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/valve/digital{ @@ -3210,7 +3200,7 @@ /area/thruster/d1starboard) "afB" = ( /obj/structure/roller_bed, -/obj/effect/floor_decal/spline/plain/blue{ +/obj/floor_decal/spline/plain/blue{ dir = 5 }, /obj/machinery/firealarm{ @@ -3220,7 +3210,7 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "afC" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ @@ -3234,10 +3224,10 @@ }, /obj/machinery/light/spot, /obj/structure/table/standard, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -3260,7 +3250,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/firstdeck) "afH" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/structure/table/reinforced, /obj/machinery/cell_charger, /obj/item/modular_computer/telescreen/preset/medical{ @@ -3285,10 +3275,10 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/firstdeck/fore) "afK" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/structure/table/standard, @@ -3308,17 +3298,17 @@ /area/maintenance/firstdeck/forestarboard) "afM" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/forestarboard) "afN" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/forestarboard) "afO" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/forestarboard) "afP" = ( @@ -3450,7 +3440,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "afX" = ( -/obj/effect/floor_decal/industrial/shutoff, +/obj/floor_decal/industrial/shutoff, /obj/machinery/atmospherics/valve/shutoff/fuel{ dir = 4 }, @@ -3460,11 +3450,11 @@ /obj/machinery/vending/medical/torch{ dir = 1 }, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /turf/simulated/floor/tiled/white/monotile, /area/medical/sleeper) "afZ" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /obj/machinery/door/blast/shutters{ density = 0; dir = 4; @@ -3477,7 +3467,7 @@ /area/medical/sleeper) "aga" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /obj/machinery/door/airlock/multi_tile/glass/medical{ id_tag = "ETC_stage"; name = "Treatment Center" @@ -3486,7 +3476,7 @@ /area/medical/sleeper) "agb" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ @@ -3497,7 +3487,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/sleeper) "agc" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /turf/simulated/floor/tiled/white, @@ -3509,7 +3499,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "agf" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/structure/disposalpipe/segment, @@ -3528,7 +3518,7 @@ dir = 8; start_pressure = 450 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/button/alternate/door/bolts{ id_tag = "medsafe_aft"; name = "safe room door-control"; @@ -3540,7 +3530,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/safe_room/medical) "agh" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/structure/disposalpipe/segment, @@ -3549,7 +3539,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "agi" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -3562,12 +3552,12 @@ /turf/simulated/floor/tiled/white, /area/medical/staging) "agj" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/structure/roller_bed, /turf/simulated/floor/tiled/white/monotile, /area/medical/staging) "agl" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ +/obj/wallframe_spawn/reinforced/polarized/no_grille{ id = "counselor_office" }, /turf/simulated/floor/plating, @@ -3580,7 +3570,7 @@ /turf/simulated/floor/tiled/dark, /area/medical/foyer/storeroom) "ago" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -3617,7 +3607,7 @@ pixel_y = 24 }, /obj/item/autopsy_scanner, -/obj/item/scalpel, +/obj/item/scalpel/basic, /obj/machinery/light/small{ dir = 4 }, @@ -3625,12 +3615,12 @@ /area/medical/morgue/autopsy) "agr" = ( /obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/catwalk_plated, +/obj/floor_decal/industrial/hatch/yellow, +/obj/catwalk_plated, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "ags" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -3658,7 +3648,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 5 }, @@ -3677,7 +3667,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/decal/cleanable/generic, +/obj/decal/cleanable/generic, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, @@ -3712,14 +3702,14 @@ internal_pressure_bound = 35000; internal_pressure_bound_default = 35000 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/reinforced, /area/thruster/d1starboard) "agx" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -3730,10 +3720,10 @@ target_pressure = 2000; use_power = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "agz" = ( @@ -3747,7 +3737,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/firstdeck) "agB" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/pipe/manifold/hidden, @@ -3759,7 +3749,7 @@ /area/maintenance/firstdeck/forestarboard) "agD" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/fore) "agE" = ( @@ -3774,7 +3764,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/effect/floor_decal/corner/blue/half{ +/obj/floor_decal/corner/blue/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -3789,17 +3779,17 @@ /turf/simulated/floor/tiled/dark/monotile, /area/command/conference) "agH" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/structure/bed/chair/padded/blue, /turf/simulated/floor/tiled/white, /area/medical/staging) "agI" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /turf/simulated/floor/tiled/white, @@ -3824,7 +3814,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/forestarboard) "agK" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/button/alternate/door{ @@ -3832,11 +3822,7 @@ name = "Infirmary Staging Exit"; pixel_y = -23 }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Staging"; - dir = 1 - }, -/obj/effect/floor_decal/sign/tr, +/obj/floor_decal/sign/tr, /obj/machinery/light/spot, /turf/simulated/floor/tiled/white, /area/medical/staging) @@ -3889,14 +3875,14 @@ /obj/machinery/atmospherics/valve/shutoff/supply{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/valve/shutoff/scrubbers{ dir = 4 }, /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "agR" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -3909,7 +3895,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralstarboard) "agS" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -3924,13 +3910,13 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralstarboard) "agT" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralstarboard) "agU" = ( -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass/medical{ autoset_access = 0; @@ -3941,14 +3927,14 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/staging) "agV" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralstarboard) "agW" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -3979,14 +3965,14 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/firstdeck/centralstarboard) "agY" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled/white, /area/medical/staging) "agZ" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /obj/machinery/door/airlock/multi_tile/glass/medical{ id_tag = "inf_stage"; name = "Infirmary Staging" @@ -4003,7 +3989,7 @@ /area/medical/staging) "aha" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -4016,12 +4002,12 @@ /area/medical/staging) "ahb" = ( /obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "ahc" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -4036,7 +4022,7 @@ /turf/simulated/wall/prepainted, /area/medical/counselor/therapy) "ahe" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ +/obj/wallframe_spawn/reinforced/polarized/no_grille{ id = "counselor_therapy" }, /turf/simulated/floor/plating, @@ -4045,7 +4031,7 @@ /obj/structure/bookcase, /obj/item/book/manual/medical_diagnostics_manual, /obj/item/book/manual/military_law, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/machinery/light_switch{ pixel_x = 6; pixel_y = 24 @@ -4059,12 +4045,12 @@ /area/medical/counselor) "ahg" = ( /obj/machinery/computer/modular/preset/medical, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /turf/simulated/floor/tiled/white/monotile, /area/medical/counselor) "ahh" = ( /obj/structure/table/standard, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/random_multi/single_item/runtime, /obj/item/paper_bin{ pixel_x = -3; @@ -4074,7 +4060,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/counselor) "ahi" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -4083,7 +4069,7 @@ /turf/simulated/floor/tiled/white, /area/medical/counselor) "ahj" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/machinery/power/apc{ @@ -4131,7 +4117,7 @@ /area/medical/counselor/therapy) "ahm" = ( /obj/item/stool/bar/padded, -/obj/effect/floor_decal/spline/plain/beige{ +/obj/floor_decal/spline/plain/beige{ dir = 4 }, /turf/simulated/floor/wood/walnut, @@ -4154,16 +4140,12 @@ /turf/simulated/floor/carpet, /area/medical/counselor/therapy) "ahq" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Counselor's Office"; - dir = 4 - }, /obj/machinery/light{ dir = 8 }, @@ -4173,17 +4155,17 @@ /obj/structure/bed/chair/comfy{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled/white, /area/medical/counselor) "ahs" = ( /obj/structure/table/standard, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/item/reagent_containers/food/drinks/glass2/coffeecup/foundation, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -4194,7 +4176,7 @@ /obj/structure/bed/chair/padded/blue{ dir = 8 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -4203,7 +4185,7 @@ /turf/simulated/floor/tiled/white, /area/medical/counselor) "ahu" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -4221,10 +4203,6 @@ /turf/simulated/floor/tiled/white, /area/medical/counselor) "ahv" = ( -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Counselor's Therapy Room"; - dir = 4 - }, /obj/machinery/light{ dir = 8 }, @@ -4241,7 +4219,7 @@ /turf/simulated/floor/wood/walnut, /area/medical/counselor/therapy) "ahx" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/decal/cleanable/cobweb2, /obj/structure/railing/mapped{ dir = 8; icon_state = "railing0-1" @@ -4254,11 +4232,11 @@ internal_pressure_bound = 35000; internal_pressure_bound_default = 35000 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/reinforced, /area/thruster/d1starboard) "ahz" = ( -/obj/effect/floor_decal/spline/plain/beige{ +/obj/floor_decal/spline/plain/beige{ dir = 4 }, /turf/simulated/floor/wood/walnut, @@ -4266,7 +4244,7 @@ "ahA" = ( /obj/machinery/light/small, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel, @@ -4276,7 +4254,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -4298,14 +4276,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/firstdeck) -"ahG" = ( -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck - Safe Room"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/crew_quarters/safe_room/firstdeck) "ahH" = ( /obj/structure/bed/chair/armchair/brown, /turf/simulated/floor/carpet, @@ -4325,7 +4295,7 @@ dir = 8; pixel_x = 21 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) "ahJ" = ( @@ -4337,13 +4307,13 @@ /turf/simulated/floor/carpet, /area/medical/counselor/therapy) "ahK" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 8 }, /turf/simulated/floor/tiled/dark, /area/command/conference) "ahL" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/crate, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) @@ -4444,7 +4414,7 @@ name_tag = "First Deck Subgrid" }, /obj/structure/cable/green, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/substation/firstdeck) @@ -4458,9 +4428,6 @@ name = "north bump"; pixel_y = 24 }, -/obj/machinery/camera/network/engineering{ - c_tag = "Substation - First Deck" - }, /obj/machinery/light/small{ dir = 4 }, @@ -4468,7 +4435,7 @@ dir = 4; pixel_x = 24 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -4504,7 +4471,7 @@ /obj/item/folder/white, /obj/item/folder/white, /obj/item/folder/white, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/machinery/button/alternate/door{ id_tag = "counselor"; name = "Counselor's Hallway Door"; @@ -4582,10 +4549,10 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "ahZ" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -4610,14 +4577,14 @@ /area/maintenance/firstdeck/centralstarboard) "aib" = ( /obj/machinery/psi_meter, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, /turf/simulated/floor/tiled/white/monotile, /area/medical/counselor) "aic" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -4626,7 +4593,7 @@ /turf/simulated/floor/tiled/white, /area/medical/counselor) "aid" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -4689,14 +4656,14 @@ /area/medical/counselor/therapy) "aii" = ( /obj/structure/closet/secure_closet/counselor, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /turf/simulated/floor/tiled/white/monotile, /area/medical/counselor) "aij" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/alarm{ @@ -4706,10 +4673,10 @@ /turf/simulated/floor/tiled/white, /area/medical/counselor) "aik" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/extinguisher_cabinet{ @@ -4718,7 +4685,7 @@ /turf/simulated/floor/tiled/white, /area/medical/counselor) "ail" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -4727,7 +4694,7 @@ /turf/simulated/floor/tiled/white, /area/medical/counselor) "aim" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/machinery/firealarm{ @@ -4756,7 +4723,7 @@ /area/medical/counselor/therapy) "aip" = ( /obj/structure/flora/pottedplant/smalltree, -/obj/effect/floor_decal/spline/plain/beige{ +/obj/floor_decal/spline/plain/beige{ dir = 4 }, /turf/simulated/floor/wood/walnut, @@ -4797,7 +4764,7 @@ /turf/simulated/wall/ocp_wall, /area/thruster/d1starboard) "aiK" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 10 }, /obj/structure/bed/chair{ @@ -4809,7 +4776,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/firstdeck) "aiL" = ( -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/structure/table/standard, /obj/machinery/recharger, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ @@ -4818,7 +4785,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/firstdeck) "aiM" = ( -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/structure/table/standard, /obj/item/modular_computer/laptop/preset/custom_loadout/cheap, /obj/machinery/atmospherics/pipe/manifold/hidden/cyan, @@ -4828,7 +4795,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/firstdeck) "aiN" = ( -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/structure/table/standard, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -4842,7 +4809,7 @@ /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ @@ -4861,7 +4828,7 @@ pixel_y = 24 }, /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -4874,7 +4841,7 @@ /obj/machinery/alarm{ pixel_y = 24 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -4889,14 +4856,14 @@ name = "north bump"; pixel_y = 24 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/firstdeck) "aiS" = ( -/obj/structure/closet/secure_closet/guncabinet/sidearm/small, -/obj/effect/floor_decal/techfloor{ +/obj/structure/closet/secure_closet/guncabinet/sidearm, +/obj/floor_decal/techfloor{ dir = 5 }, /turf/simulated/floor/tiled/techfloor, @@ -4910,7 +4877,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) "aiX" = ( @@ -4930,20 +4897,20 @@ /area/maintenance/firstdeck/forestarboard) "aiZ" = ( /obj/machinery/power/port_gen/pacman, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/forestarboard) "ajb" = ( /obj/random/junk, /obj/random/junk, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/forestarboard) "ajc" = ( /obj/structure/closet/crate/trashcart, /obj/random/material, /obj/random/junk, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/forestarboard) "ajd" = ( @@ -4979,7 +4946,7 @@ dir = 8; pixel_x = 24 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -5003,7 +4970,7 @@ /area/engineering/auxpower) "ajv" = ( /obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light{ dir = 4 }, @@ -5064,7 +5031,9 @@ injecting = 1; use_power = 1 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/thruster/d1starboard) "ajO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -5079,8 +5048,8 @@ /obj/machinery/door/airlock/civilian{ name = "Living Area" }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/door/firedoor, @@ -5096,7 +5065,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 9 }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/structure/table/standard, /obj/random/soap, /obj/machinery/light_switch{ @@ -5109,7 +5078,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/structure/bed/chair{ dir = 8 }, @@ -5131,7 +5100,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/machinery/rotating_alarm/security_alarm{ dir = 1 }, @@ -5155,7 +5124,7 @@ pixel_x = 32; pixel_y = 32 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 6 }, /turf/simulated/floor/tiled/techfloor, @@ -5191,7 +5160,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled, @@ -5217,11 +5186,11 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) "ajW" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/cable/green{ @@ -5230,11 +5199,15 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/item/device/radio/intercom/entertainment{ + dir = 4; + pixel_x = -22 + }, /turf/simulated/floor/tiled/dark, /area/command/conference) "ajX" = ( /obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 8; icon_state = "bottom-left" }, @@ -5242,7 +5215,7 @@ /area/command/conference) "ajZ" = ( /obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 8; icon_state = "top-left" }, @@ -5261,7 +5234,7 @@ /obj/machinery/power/breakerbox/activated{ RCon_tag = "First Deck Substation Bypass" }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/plating, /area/maintenance/substation/firstdeck) "akf" = ( @@ -5280,7 +5253,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /obj/structure/catwalk, @@ -5296,7 +5269,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -5340,7 +5313,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -5408,7 +5381,7 @@ /turf/simulated/floor/plating, /area/engineering/auxpower) "akp" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/universal{ @@ -5423,9 +5396,6 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/camera/network/medbay{ - c_tag = "Medical Safe Room" - }, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/medical) "akK" = ( @@ -5479,16 +5449,12 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/canister/air, /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/safe_room/firstdeck) "akV" = ( -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Fore Hallway - Starboard Maintenence"; - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /obj/machinery/rotating_alarm/security_alarm{ @@ -5505,27 +5471,27 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) "akX" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 8; icon_state = "2,1" }, -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 8; icon_state = "center-right" }, /turf/simulated/floor/tiled/dark, /area/command/conference) "akY" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 8; icon_state = "1,0" }, /obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 8; icon_state = "bottom-center" }, @@ -5574,7 +5540,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/railing/mapped, @@ -5585,7 +5551,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "alk" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/railing/mapped, @@ -5610,7 +5576,7 @@ /turf/simulated/floor/plating, /area/engineering/auxpower) "alm" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -5625,7 +5591,7 @@ /obj/machinery/power/terminal{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -5634,7 +5600,7 @@ /area/engineering/auxpower) "alo" = ( /obj/structure/closet/l3closet/general, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/sign/warning/nosmoking_1{ pixel_y = 24 }, @@ -5657,13 +5623,13 @@ dir = 4 }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "alD" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -5683,12 +5649,12 @@ /obj/structure/table/rack, /obj/item/screwdriver, /obj/item/storage/box/masks, -/obj/item/storage/box/gloves, -/obj/item/storage/box/gloves, +/obj/item/storage/box/latexgloves, +/obj/item/storage/box/nitrilegloves, /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light_switch{ pixel_y = 24 }, @@ -5710,7 +5676,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/canister/air, /obj/machinery/alarm{ dir = 4; @@ -5720,12 +5686,12 @@ /area/crew_quarters/safe_room/firstdeck) "alT" = ( /obj/machinery/photocopier, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/security/detectives_office) "alV" = ( /obj/structure/closet/secure_closet/forensics, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/security/detectives_office) "alW" = ( @@ -5743,21 +5709,21 @@ /obj/structure/closet{ name = "Evidence Closet" }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light/small{ dir = 4 }, /turf/simulated/floor/tiled/dark, /area/security/evidence) "amg" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 8; icon_state = "bottom-right" }, /turf/simulated/floor/tiled/dark, /area/command/conference) "amh" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 8; icon_state = "top-right" }, @@ -5770,11 +5736,11 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/head/deck1) "amn" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "amp" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -5790,7 +5756,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -5880,13 +5846,13 @@ /obj/machinery/atmospherics/unary/tank/air{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "amP" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/requests_console{ announcementConsole = 1; department = "Medbay"; @@ -5969,7 +5935,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/plating, @@ -6012,10 +5978,10 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "anH" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/button/alternate/door{ @@ -6046,7 +6012,7 @@ /turf/simulated/floor/tiled/white, /area/medical/staging) "anL" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -6066,7 +6032,7 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "aoa" = ( -/obj/effect/floor_decal/corner/blue/three_quarters, +/obj/floor_decal/corner/blue/three_quarters, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -6124,8 +6090,8 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "aop" = ( -/obj/effect/floor_decal/corner/yellow, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/corner/yellow, +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/computer/shuttle_control/lift/robotics, @@ -6133,14 +6099,14 @@ /area/turbolift/robotics_lift) "aor" = ( /obj/structure/ladder, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/tiled/monotile, /area/assembly/robotics/office) "ape" = ( @@ -6148,11 +6114,7 @@ name = "Secure Evidence Locker"; req_access = list("ACCESS_SECURITY") }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Evidence Storage"; - dir = 8 - }, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark, /area/security/evidence) "apf" = ( @@ -6167,7 +6129,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) "aph" = ( @@ -6215,7 +6177,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, /turf/simulated/floor/tiled/white, @@ -6228,15 +6190,15 @@ /obj/random/medical, /obj/random/medical/lite, /obj/random/medical/lite, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white/monotile, /area/medical/equipstorage) "apR" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -6255,7 +6217,7 @@ "apZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -6268,7 +6230,7 @@ /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -6276,7 +6238,7 @@ "aqb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/structure/cable/green{ @@ -6289,20 +6251,20 @@ /area/hallway/primary/firstdeck/fore) "aqc" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "aqd" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "aqg" = ( /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -6314,7 +6276,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -6324,7 +6286,7 @@ /obj/item/device/radio/intercom{ pixel_y = 23 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -6337,7 +6299,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 1 }, /turf/simulated/floor/tiled, @@ -6346,14 +6308,14 @@ /turf/unsimulated/mask, /area/hallway/primary/firstdeck/center) "aqp" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 4 }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/steel_grid, /area/turbolift/robotics_lift) "aqL" = ( -/obj/effect/floor_decal/corner/paleblue, +/obj/floor_decal/corner/paleblue, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -6364,7 +6326,7 @@ /turf/simulated/wall/prepainted, /area/medical/medicalhallway) "aqP" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ +/obj/floor_decal/corner/paleblue/three_quarters{ dir = 4 }, /obj/structure/table/standard, @@ -6374,7 +6336,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "aqQ" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /obj/machinery/door/blast/shutters{ density = 0; dir = 4; @@ -6387,8 +6349,8 @@ /area/medical/foyer) "aqR" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -6396,7 +6358,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/foyer) "aqS" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/structure/flora/pottedplant/orientaltree, /obj/machinery/firealarm{ dir = 1; @@ -6467,7 +6429,7 @@ dir = 1; icon_state = "pipe-c" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 4; @@ -6516,7 +6478,7 @@ dir = 1; pixel_y = -28 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -6538,7 +6500,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) "ary" = ( @@ -6561,7 +6523,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled, @@ -6571,10 +6533,10 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "arT" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/effect/floor_decal/sign/ex, +/obj/floor_decal/sign/ex, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ @@ -6585,7 +6547,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "ase" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/alarm{ pixel_y = 24 @@ -6613,7 +6575,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftstarboard) "asq" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 4 }, /obj/structure/disposalpipe/segment{ @@ -6631,12 +6593,12 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) "asv" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -6667,7 +6629,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/hallway/primary/firstdeck/fore) "asA" = ( -/mob/living/simple_animal/hostile/retaliate/snake/cob, +/mob/living/simple_animal/passive/snake/cob, /turf/simulated/floor/tiled/dark, /area/security/bo) "asB" = ( @@ -6686,7 +6648,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/blue/half{ +/obj/floor_decal/corner/blue/half{ dir = 4 }, /turf/simulated/floor/tiled/monotile, @@ -6726,7 +6688,7 @@ pixel_x = -30; pixel_y = 24 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -6735,7 +6697,7 @@ /turf/simulated/floor/tiled/white, /area/medical/exam_room) "atb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -6761,7 +6723,7 @@ /obj/item/folder/white, /obj/item/folder/white, /obj/item/folder/white, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /turf/simulated/floor/tiled/white/monotile, /area/medical/medpaperworkoffice) "atg" = ( @@ -6769,13 +6731,13 @@ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled/white, /area/medical/medpaperworkoffice) "atm" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -6831,23 +6793,23 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /turf/simulated/floor/tiled, /area/security/wing) "atw" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/dark, /area/teleporter/firstdeck) "atA" = ( /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/recharge_station, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) @@ -6871,7 +6833,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "atE" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled, @@ -6886,7 +6848,7 @@ dir = 4; pixel_x = 24 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled, @@ -6928,10 +6890,10 @@ pixel_y = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 10 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -6950,22 +6912,22 @@ /obj/structure/bed/chair/comfy/blue{ dir = 8 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled/white, /area/medical/exam_room) "auc" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/structure/table/standard, /obj/item/paper_bin, /turf/simulated/floor/tiled/white/monotile, /area/medical/exam_room) "aug" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -6990,7 +6952,7 @@ /turf/simulated/wall/prepainted, /area/hallway/primary/firstdeck/aft) "auv" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -7045,10 +7007,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck - Stairs"; - dir = 4 - }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "auF" = ( @@ -7063,7 +7021,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -7083,11 +7041,11 @@ dir = 4 }, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/fore) "auH" = ( @@ -7102,7 +7060,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -7120,14 +7078,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue/half{ +/obj/floor_decal/corner/paleblue/half{ dir = 4 }, /turf/simulated/floor/tiled/monotile, @@ -7148,7 +7106,7 @@ dir = 1; icon_state = "pipe-j2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) "auL" = ( @@ -7173,7 +7131,7 @@ /area/hallway/primary/firstdeck/center) "auO" = ( /obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/power/apc{ dir = 8; name = "west bump"; @@ -7186,7 +7144,7 @@ /turf/simulated/floor/tiled/monotile, /area/assembly/chargebay) "auP" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -7206,10 +7164,10 @@ /obj/machinery/light{ dir = 8 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 10 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /obj/structure/bed/chair/padded/yellow{ @@ -7222,20 +7180,16 @@ /turf/simulated/floor/reinforced, /area/rnd/misc_lab) "avl" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/structure/closet/secure_closet/personal/patient, /turf/simulated/floor/tiled/white, /area/medical/exam_room) "avo" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Examination Room"; - dir = 1 - }, /obj/item/device/radio/intercom/department/medbay{ dir = 1; pixel_y = -28 @@ -7244,7 +7198,7 @@ /area/medical/exam_room) "avq" = ( /obj/item/stool/padded, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/machinery/light/small, /obj/random_multi/single_item/runtime, /obj/random_multi/single_item/skelestand, @@ -7252,10 +7206,10 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/exam_room) "avs" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/sign/warning/nosmoking_1{ @@ -7269,10 +7223,10 @@ /turf/simulated/floor/tiled/white, /area/medical/medpaperworkoffice) "avu" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/computer/modular/preset/medical{ @@ -7297,16 +7251,12 @@ pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Hallway - Emergency Armory Entrance"; - dir = 4 - }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/aft) "avy" = ( -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/blue/mono, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, /obj/machinery/light{ @@ -7315,14 +7265,14 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/aft) "avI" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /obj/machinery/light, /turf/simulated/floor/tiled, /area/security/wing) "avO" = ( -/obj/effect/floor_decal/corner/pink/mono, +/obj/floor_decal/corner/pink/mono, /obj/machinery/body_scanconsole{ dir = 1 }, @@ -7338,17 +7288,17 @@ pixel_x = -21 }, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "avT" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/disposal, /obj/structure/sign/deck/first{ dir = 1; @@ -7371,11 +7321,11 @@ /turf/simulated/open, /area/hallway/primary/firstdeck/fore) "avV" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, -/obj/effect/floor_decal/corner/paleblue/half{ +/obj/floor_decal/corner/paleblue/half{ dir = 4 }, /turf/simulated/floor/tiled/monotile, @@ -7397,7 +7347,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/effect/floor_decal/corner/blue/half{ +/obj/floor_decal/corner/blue/half{ dir = 4 }, /obj/machinery/alarm{ @@ -7440,13 +7390,13 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/green/mono, +/obj/floor_decal/corner/green/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/center) "awd" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/center) "awG" = ( @@ -7457,18 +7407,18 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 5 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/aft) "awH" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /obj/structure/disposalpipe/segment, @@ -7478,16 +7428,19 @@ /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/aft) "awI" = ( -/obj/effect/floor_decal/industrial/loading{ +/obj/floor_decal/industrial/loading{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 4 }, +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck Hallway - Emergency Armory" + }, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/firstdeck/aft) "awJ" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/aft) "awL" = ( @@ -7520,7 +7473,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/command/armoury/access) "awM" = ( -/obj/effect/floor_decal/corner/paleblue/half{ +/obj/floor_decal/corner/paleblue/half{ dir = 1 }, /obj/machinery/atm{ @@ -7547,7 +7500,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "processwindow" }, /turf/simulated/floor/plating, @@ -7558,7 +7511,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 4 }, /turf/simulated/floor/tiled, @@ -7570,7 +7523,7 @@ /area/hallway/primary/firstdeck/center) "axc" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -7584,13 +7537,13 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "axe" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /obj/machinery/ship_map, @@ -7598,7 +7551,7 @@ /area/hallway/primary/firstdeck/center) "axh" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/paleblue/half{ +/obj/floor_decal/corner/paleblue/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -7607,7 +7560,7 @@ /obj/machinery/alarm{ pixel_y = 24 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /turf/simulated/floor/tiled, @@ -7622,7 +7575,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/firstdeck/centralstarboard) "axu" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "bo_windows" }, /obj/structure/cable/green{ @@ -7637,7 +7590,7 @@ /turf/simulated/floor/plating, /area/security/bo) "axw" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/disposalpipe/segment, @@ -7647,13 +7600,13 @@ /obj/structure/sign/directions/med{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "axB" = ( -/obj/effect/floor_decal/corner/paleblue/half{ +/obj/floor_decal/corner/paleblue/half{ dir = 1 }, /obj/machinery/newscaster{ @@ -7671,7 +7624,7 @@ name = "north bump"; pixel_y = 24 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -7684,7 +7637,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/firstdeck/aft) "axK" = ( @@ -7700,7 +7653,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/tiled, @@ -7745,7 +7698,7 @@ /obj/item/stock_parts/smes_coil/super_io, /obj/item/stock_parts/circuitboard/batteryrack, /obj/item/stock_parts/circuitboard/batteryrack, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/engineering/hardstorage/aux) "axY" = ( @@ -7765,7 +7718,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) "axZ" = ( @@ -7777,7 +7730,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -7789,7 +7742,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/shutoff{ +/obj/floor_decal/industrial/shutoff{ dir = 4 }, /obj/machinery/atmospherics/valve/shutoff/supply{ @@ -7809,7 +7762,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -7825,7 +7778,7 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/center) "aye" = ( @@ -7840,7 +7793,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/center) "ayf" = ( @@ -7865,7 +7818,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/center) "ayg" = ( @@ -7883,7 +7836,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/center) "ayh" = ( @@ -7938,7 +7891,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/center) "aym" = ( @@ -7956,7 +7909,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/center) "ayp" = ( @@ -7993,7 +7946,7 @@ name = "Xenobotany"; sort_type = "Xenobotany" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/center) "ayy" = ( @@ -8011,7 +7964,7 @@ name = "Research Development"; sort_type = "Research and Development" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/center) "ayz" = ( @@ -8026,7 +7979,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -8034,7 +7987,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/aft) "ayA" = ( -/obj/effect/floor_decal/techfloor/orange{ +/obj/floor_decal/techfloor/orange{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -8055,7 +8008,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/aft) "ayC" = ( @@ -8078,7 +8031,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/aft) "ayF" = ( @@ -8104,7 +8057,7 @@ name = "Operation Checkpoint Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/aft) "ayG" = ( @@ -8122,7 +8075,7 @@ dir = 2; icon_state = "pipe-c" }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, @@ -8135,17 +8088,17 @@ /obj/structure/disposalpipe/segment, /obj/machinery/tele_beacon, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/aft) "ayJ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/fuel, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/firstdeck/aft) "ayK" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/wallframe_spawn/reinforced, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/blast/regular/open{ dir = 4; id_tag = "armory_lock"; @@ -8180,7 +8133,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/tiled, @@ -8193,12 +8146,12 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/green/mono, +/obj/floor_decal/corner/green/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/center) "azm" = ( /obj/machinery/light, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -8207,7 +8160,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -8223,7 +8176,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -8233,7 +8186,7 @@ /obj/structure/extinguisher_cabinet{ pixel_y = -32 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -8247,7 +8200,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/green/mono, +/obj/floor_decal/corner/green/mono, /obj/structure/sign/warning/pods/west{ dir = 4; pixel_x = -40 @@ -8258,7 +8211,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -8275,7 +8228,7 @@ dir = 2; icon_state = "pipe-j2" }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/firstdeck/aft) "azS" = ( @@ -8290,7 +8243,7 @@ dir = 1; pixel_y = -28 }, -/obj/effect/floor_decal/corner/paleblue/half, +/obj/floor_decal/corner/paleblue/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/aft) "azU" = ( @@ -8307,7 +8260,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/command/armoury/access) "azV" = ( -/obj/effect/shuttle_landmark/ert/deck2{ +/obj/shuttle_landmark/ert/deck2{ name = "1st Deck, Fore Port" }, /turf/space, @@ -8326,7 +8279,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/tiled, @@ -8336,7 +8289,7 @@ dir = 8; icon_state = "console" }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /turf/simulated/floor/tiled, @@ -8350,7 +8303,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/effect/floor_decal/corner/blue/half{ +/obj/floor_decal/corner/blue/half{ dir = 4 }, /turf/simulated/floor/tiled/monotile, @@ -8366,7 +8319,7 @@ /turf/simulated/wall/prepainted, /area/crew_quarters/sleep/cryo/aux) "aAt" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/crew_quarters/sleep/cryo/aux) "aAu" = ( @@ -8409,7 +8362,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/rnd/development) "aAK" = ( @@ -8423,7 +8376,7 @@ dir = 4; pixel_x = -21 }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -8447,7 +8400,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/aft) "aAV" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 8 }, /obj/structure/cable/green{ @@ -8467,7 +8420,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/aft) "aAW" = ( -/obj/effect/floor_decal/industrial/loading{ +/obj/floor_decal/industrial/loading{ dir = 8 }, /obj/structure/cable/green{ @@ -8490,7 +8443,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/firstdeck/aft) "aAX" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/machinery/door/airlock/command{ name = "Emergency Armory Access"; secured_wires = 1 @@ -8510,7 +8463,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/command/armoury/access) "aAY" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/structure/cable/green{ d1 = 1; d2 = 8; @@ -8525,14 +8478,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/camera/network/command{ - c_tag = "Bridge - Emergency Armory - Access"; - dir = 1 - }, /turf/simulated/floor/tiled/steel_grid, /area/command/armoury/access) "aAZ" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -8546,7 +8495,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/command/armoury/access) "aBa" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/machinery/door/airlock/highsecurity{ name = "Emergency Armory" }, @@ -8591,7 +8540,7 @@ }, /obj/item/pen, /obj/item/folder/red, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /obj/structure/cable/green{ @@ -8641,7 +8590,7 @@ /obj/machinery/atm{ pixel_y = 32 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aBA" = ( @@ -8656,7 +8605,7 @@ /obj/machinery/light/spot{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aBB" = ( @@ -8668,7 +8617,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aBC" = ( @@ -8680,7 +8629,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/tiled/white, @@ -8711,7 +8660,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aBF" = ( @@ -8724,7 +8673,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aBG" = ( @@ -8740,7 +8689,7 @@ /obj/machinery/light/spot{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aBH" = ( @@ -8754,7 +8703,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/tiled/white, @@ -8764,7 +8713,7 @@ dir = 8 }, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo/aux) "aBJ" = ( @@ -8788,7 +8737,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralport) "aBO" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/emcloset, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralport) @@ -8800,7 +8749,7 @@ /area/rnd/development) "aCp" = ( /obj/machinery/tele_pad, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/teleporter/firstdeck) "aCq" = ( @@ -8813,24 +8762,24 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/aft) "aCr" = ( -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/aft) "aCu" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/security_torch, /turf/simulated/floor/tiled/monotile, /area/security/locker) "aCv" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/security/locker) "aCx" = ( @@ -8894,7 +8843,7 @@ pixel_x = 3; pixel_y = 6 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/engineering/hardstorage/aux) "aCM" = ( @@ -8930,11 +8879,11 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -8951,10 +8900,10 @@ /area/crew_quarters/sleep/cryo/aux) "aCT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -8965,11 +8914,11 @@ /area/crew_quarters/sleep/cryo/aux) "aCV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -8978,10 +8927,10 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -9051,7 +9000,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/security/bo) "aDG" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "bo_windows" }, /obj/structure/cable/green{ @@ -9070,7 +9019,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) @@ -9087,7 +9036,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/blue/half{ +/obj/floor_decal/corner/blue/half{ dir = 4 }, /obj/machinery/light{ @@ -9113,7 +9062,7 @@ "aDW" = ( /obj/structure/table/rack, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "aDX" = ( @@ -9164,6 +9113,19 @@ /obj/structure/railing/mapped, /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralport) +"aEw" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/red{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/security/armoury) "aEC" = ( /obj/structure/cable/green{ d1 = 1; @@ -9180,12 +9142,12 @@ "aED" = ( /obj/structure/largecrate, /obj/random/maintenance/solgov, -/obj/effect/decal/cleanable/cobweb2, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/decal/cleanable/cobweb2, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftport) "aEG" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack, /obj/item/clothing/shoes/dutyboots, /obj/item/clothing/accessory/storage/holster/thigh, @@ -9203,7 +9165,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/security/wing) "aEK" = ( @@ -9244,11 +9206,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) "aEU" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -9272,7 +9234,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -9296,7 +9258,7 @@ dir = 8; icon_state = "pipe-c" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, @@ -9312,7 +9274,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled, @@ -9344,7 +9306,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/rnd/development) "aFd" = ( @@ -9369,7 +9331,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -32 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/random/maintenance/clean, /obj/random/maintenance/clean, /obj/random/maintenance/clean, @@ -9384,10 +9346,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -9430,7 +9392,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralport) "aFo" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/firecloset, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralport) @@ -9449,11 +9411,11 @@ /area/maintenance/firstdeck/aftport) "aFM" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftport) "aFQ" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "bo_windows" }, /obj/structure/cable/green, @@ -9498,21 +9460,21 @@ /turf/simulated/floor/tiled/dark, /area/security/bo) "aFU" = ( -/obj/effect/floor_decal/corner/red/three_quarters, +/obj/floor_decal/corner/red/three_quarters, /obj/machinery/pager/security{ pixel_y = -23 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "aFV" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "aFX" = ( /obj/machinery/light, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled, @@ -9522,7 +9484,7 @@ dir = 1; pixel_y = -28 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled, @@ -9531,7 +9493,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled, @@ -9540,7 +9502,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /obj/structure/extinguisher_cabinet{ @@ -9549,10 +9511,10 @@ /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "aGi" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 4 }, /turf/simulated/floor/tiled, @@ -9587,7 +9549,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) "aGr" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/crew, /obj/random/maintenance/solgov/clean, /obj/random/maintenance/solgov/clean, @@ -9595,7 +9557,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo/aux) "aGs" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -9605,24 +9567,24 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aGt" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aGu" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/personal, /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo/aux) @@ -9637,21 +9599,21 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralport) "aGx" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/item/stool/padded, /turf/simulated/floor/tiled/white, /area/medical/staging) "aGE" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/rnd/development) "aGL" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/light{ dir = 4 }, @@ -9685,7 +9647,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/security/brig) "aGX" = ( -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /obj/structure/hygiene/urinal{ pixel_y = 32 }, @@ -9730,26 +9692,26 @@ icon_state = "0-8" }, /obj/structure/roller_bed, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "aHc" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/crew, /obj/random/maintenance/solgov/clean, /obj/random/maintenance/solgov/clean, /obj/random/maintenance/solgov/clean, /obj/machinery/camera/network/first_deck{ - c_tag = "Auxiliary Cryogenic Storage - Port"; + c_tag = "First Deck Cryogenics - Fore"; dir = 4 }, /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo/aux) "aHd" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -9764,10 +9726,10 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aHf" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/personal, /obj/machinery/camera/network/first_deck{ - c_tag = "Auxiliary Cryogenic Storage - Starboard"; + c_tag = "First Deck Cryogenics - Aft"; dir = 8 }, /turf/simulated/floor/tiled/white/monotile, @@ -9825,7 +9787,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/command/armoury) "aHX" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 4; @@ -10004,7 +9966,7 @@ /turf/simulated/floor/tiled/monotile, /area/security/brig) "aIm" = ( -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /obj/structure/hygiene/shower{ dir = 8 }, @@ -10012,7 +9974,7 @@ /turf/simulated/floor/tiled/freezer, /area/security/brig) "aIn" = ( -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /obj/machinery/firealarm{ dir = 4; pixel_x = 26 @@ -10031,10 +9993,10 @@ /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo/aux) "aIt" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/green{ d1 = 1; @@ -10044,35 +10006,35 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aIu" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aIv" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aIx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aIy" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -10083,7 +10045,7 @@ /obj/machinery/light/spot{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/uniform_vendor{ dir = 8 }, @@ -10162,16 +10124,20 @@ /area/maintenance/firstdeck/aftport) "aJl" = ( /obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "aJm" = ( /obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/camera/network/bridge{ + c_tag = "Emergency Armory - Supplies"; + dir = 8 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "aJn" = ( -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 8 }, /obj/structure/cable/green{ @@ -10179,7 +10145,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/landmark{ +/obj/landmark{ name = "lightsout" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -10191,12 +10157,11 @@ /turf/simulated/floor/tiled/monotile, /area/security/wing) "aJo" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/secure_closet/brigchief, /obj/item/device/radio, -/obj/item/crowbar, /obj/item/clothing/mask/gas/half, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -10207,6 +10172,7 @@ pixel_y = -28 }, /obj/structure/cable/green, +/obj/item/crowbar/prybar, /turf/simulated/floor/tiled/dark/monotile, /area/security/bo) "aJp" = ( @@ -10214,7 +10180,7 @@ /obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/alarm{ dir = 1; pixel_y = -24 @@ -10223,7 +10189,7 @@ /area/security/bo) "aJq" = ( /obj/machinery/photocopier, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/security/bo) "aJr" = ( @@ -10278,7 +10244,7 @@ id_tag = "permflash"; name = "Floor mounted flash" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -10318,7 +10284,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/security/brig) "aJE" = ( -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /obj/structure/hygiene/shower{ dir = 8 }, @@ -10335,7 +10301,7 @@ /obj/structure/table/rack, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "aJK" = ( @@ -10374,10 +10340,10 @@ /turf/simulated/floor/tiled/white/monotile, /area/crew_quarters/sleep/cryo/aux) "aJO" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -10389,11 +10355,11 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aJQ" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -10405,34 +10371,34 @@ /turf/simulated/wall/prepainted, /area/maintenance/firstdeck/centralport) "aKv" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/item/storage/box/ammo/pistol, +/obj/item/storage/box/ammo/pistol, +/obj/item/storage/box/ammo/pistol, +/obj/item/storage/box/ammo/pistol, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/security/armoury) "aKw" = ( /obj/structure/table/rack{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/item/device/flashlight/flare, /obj/item/device/flashlight/flare, /obj/item/device/flashlight/flare, -/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" - }, /turf/simulated/floor/tiled/dark/monotile, /area/security/storage) "aKy" = ( -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Equipment Storage"; - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 4; +/obj/item/device/radio/intercom/department/security{ + dir = 8; pixel_x = 21 }, +/obj/structure/table/steel, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/security/storage) "aKA" = ( @@ -10455,7 +10421,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/security/wing) "aKE" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "bo_windows" }, /obj/structure/cable/green{ @@ -10465,7 +10431,7 @@ /turf/simulated/floor/plating, /area/security/bo) "aKG" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/closet/hydrant{ @@ -10506,7 +10472,7 @@ /obj/structure/closet/crate, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "aKT" = ( @@ -10541,21 +10507,21 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aKW" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -10563,10 +10529,10 @@ "aKX" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -10585,7 +10551,7 @@ /area/maintenance/firstdeck/centralport) "aLj" = ( /obj/structure/grille, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "aLo" = ( /turf/simulated/floor/tiled/white, @@ -10594,61 +10560,22 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftport) "aLv" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/flasher/portable, /turf/simulated/floor/tiled/dark/monotile, /area/security/storage) "aLw" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/table/rack, -/obj/item/clothing/accessory/arm_guards/navy, -/obj/item/clothing/accessory/arm_guards/navy, -/obj/item/clothing/accessory/leg_guards/navy, -/obj/item/clothing/accessory/leg_guards/navy, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) -"aLx" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/light, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/structure/table/rack, -/obj/item/clothing/accessory/arm_guards, -/obj/item/clothing/accessory/arm_guards, -/obj/item/clothing/accessory/leg_guards, -/obj/item/clothing/accessory/leg_guards, /turf/simulated/floor/tiled/dark/monotile, /area/security/storage) -"aLy" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/security/storage) "aLz" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/device/radio/intercom/department/security{ - dir = 8; - pixel_x = 21 - }, -/obj/structure/table/rack{ - dir = 4 - }, -/obj/item/storage/box/smokes, -/obj/item/storage/box/smokes, /turf/simulated/floor/tiled/dark/monotile, /area/security/storage) "aLA" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/machinery/light{ @@ -10680,10 +10607,13 @@ d2 = 8; icon_state = "0-8" }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Temporary Confinement" + }, /turf/simulated/floor/tiled/monotile, /area/security/wing) "aLE" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -10721,7 +10651,7 @@ /turf/simulated/floor/tiled/monotile, /area/security/wing) "aLH" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 2; d2 = 8; @@ -10734,7 +10664,7 @@ /area/security/brig) "aLL" = ( /obj/machinery/camera/network/security{ - c_tag = "Brig - Center"; + c_tag = "Security - Extended Confinement"; dir = 8 }, /turf/simulated/floor/tiled/monotile, @@ -10749,7 +10679,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -10806,7 +10736,7 @@ /obj/machinery/atmospherics/unary/tank/air{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 9; icon_state = "warning" }, @@ -10822,11 +10752,11 @@ /area/crew_quarters/sleep/cryo/aux) "aLV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -10837,17 +10767,17 @@ icon_state = "pipe-c" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "aLX" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -10862,11 +10792,11 @@ /obj/structure/closet, /obj/random/action_figure, /obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftport) "aMB" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/crate/medical, /obj/item/storage/firstaid/fire{ pixel_x = -4; @@ -10890,11 +10820,19 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "aMC" = ( -/obj/machinery/light, +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/storage/box/ammo/pistol/rubber, +/obj/item/storage/box/ammo/pistol/rubber, +/obj/item/storage/box/ammo/pistol/rubber, +/obj/item/storage/box/ammo/pistol/rubber, /turf/simulated/floor/tiled/dark, -/area/security/storage) +/area/security/secure_storage) "aMD" = ( -/obj/effect/floor_decal/corner/red/three_quarters, +/obj/floor_decal/corner/red/three_quarters, /obj/item/device/radio/intercom/department/security{ dir = 4; pixel_x = -21 @@ -10902,7 +10840,7 @@ /turf/simulated/floor/tiled, /area/security/wing) "aME" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -10919,14 +10857,10 @@ name = "Cell One"; pixel_y = -32 }, -/obj/effect/floor_decal/corner/red/half, +/obj/floor_decal/corner/red/half, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/camera/network/security{ - c_tag = "Security Hallway - Cells"; - dir = 1 - }, /obj/machinery/rotating_alarm/security_alarm{ dir = 1 }, @@ -10937,7 +10871,7 @@ name = "Cell Two"; pixel_y = -32 }, -/obj/effect/floor_decal/corner/red/half, +/obj/floor_decal/corner/red/half, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, @@ -10970,7 +10904,7 @@ id_tag = "permentryflash"; name = "Floor mounted flash" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/cable/green{ d1 = 1; d2 = 8; @@ -11015,7 +10949,7 @@ /turf/simulated/floor/tiled, /area/security/brig) "aMP" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -11033,9 +10967,9 @@ }, /obj/random/tech_supply, /obj/item/flame/lighter/zippo/random, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/random/smokes, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -11046,7 +10980,7 @@ /area/security/brig) "aMS" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "aMT" = ( @@ -11054,12 +10988,12 @@ /area/security/storage) "aMV" = ( /obj/structure/disposalpipe/up, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/railing/mapped, /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) "aMW" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -11091,7 +11025,7 @@ /obj/machinery/atmospherics/unary/tank/air{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /turf/simulated/floor/plating, @@ -11108,10 +11042,10 @@ /area/crew_quarters/sleep/cryo/aux) "aNc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -11156,7 +11090,7 @@ /turf/simulated/wall/r_wall/hull, /area/maintenance/firstdeck/aftport) "aNE" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/crate/freezer/rations, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) @@ -11171,7 +11105,7 @@ /turf/simulated/wall/prepainted, /area/security/wing) "aNL" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/brig, /obj/machinery/alarm{ dir = 8; @@ -11186,15 +11120,15 @@ pixel_x = -21 }, /obj/machinery/camera/network/security{ - c_tag = "Brig - Bunk Room"; + c_tag = "Security - Extended Bunks"; dir = 4 }, /obj/structure/bedsheetbin, /turf/simulated/floor/tiled, /area/security/brig) "aNQ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/flasher{ @@ -11223,7 +11157,7 @@ /obj/structure/closet/crate, /obj/random/maintenance/solgov, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "aNW" = ( @@ -11242,13 +11176,13 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) "aNY" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/grille/broken, /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) "aNZ" = ( /obj/structure/grille, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) @@ -11265,11 +11199,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -11296,10 +11230,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /turf/simulated/floor/tiled/white, @@ -11368,44 +11302,59 @@ injecting = 1; use_power = 1 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/thruster/d1port) "aOE" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/gun/secure, -/obj/item/gun/energy/gun/secure, -/obj/structure/window/reinforced{ - dir = 1 +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22 }, -/obj/structure/window/reinforced{ - dir = 8 +/obj/floor_decal/techfloor{ + dir = 1 }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "aOF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/machinery/alarm{ - pixel_y = 24 +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" }, /turf/simulated/floor/tiled/dark, -/area/security/armoury) +/area/security/secure_storage) "aOG" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/recharger/wallcharger{ - dir = 8; - pixel_x = 23; - pixel_y = -3 - }, /obj/structure/table/rack, -/obj/item/clothing/head/helmet/riot, -/obj/item/clothing/suit/armor/riot, -/obj/item/clothing/suit/armor/riot, -/obj/item/clothing/head/helmet/riot, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) +/obj/item/clothing/accessory/arm_guards/ablative, +/obj/item/clothing/accessory/arm_guards/ablative, +/obj/item/clothing/accessory/leg_guards/ablative, +/obj/item/clothing/accessory/leg_guards/ablative, +/obj/item/clothing/suit/armor/laserproof, +/obj/item/clothing/suit/armor/laserproof, +/obj/item/clothing/head/helmet/ablative, +/obj/item/clothing/head/helmet/ablative, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "aOI" = ( /obj/structure/hygiene/sink{ dir = 8; @@ -11421,7 +11370,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled, @@ -11441,17 +11390,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/random/torchcloset, /obj/random/coin, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "aOM" = ( /obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/catwalk, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "aON" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/railing/mapped{ @@ -11464,17 +11413,17 @@ /obj/structure/disposalpipe/down{ dir = 1 }, -/obj/effect/decal/cleanable/cobweb2, +/obj/decal/cleanable/cobweb2, /obj/structure/lattice, /turf/simulated/open, /area/maintenance/firstdeck/foreport) "aOP" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/cleanable/cobweb, +/obj/decal/cleanable/cobweb, /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralport) "aPb" = ( -/obj/effect/floor_decal/corner/yellow/mono, +/obj/floor_decal/corner/yellow/mono, /obj/machinery/computer/modular{ dir = 8 }, @@ -11503,13 +11452,19 @@ /turf/simulated/wall/ocp_wall, /area/thruster/d1port) "aPu" = ( -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) +/obj/structure/table/rack, +/obj/item/shield/riot, +/obj/item/shield/riot, +/obj/item/shield/riot, +/obj/item/shield/riot, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "aPv" = ( /obj/structure/hygiene/toilet{ dir = 4 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /obj/machinery/flasher{ @@ -11603,7 +11558,7 @@ /area/maintenance/firstdeck/foreport) "aPH" = ( /obj/random/junk, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, @@ -11615,7 +11570,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) "aPI" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/railing/mapped, @@ -11648,7 +11603,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ dir = 1; frequency = 1380; @@ -11673,7 +11628,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/item/device/radio/intercom{ @@ -11712,7 +11667,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralport) @@ -11728,7 +11683,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ dir = 1; frequency = 1380; @@ -11753,7 +11708,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/structure/catwalk, @@ -11771,7 +11726,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ dir = 1; frequency = 1380; @@ -11807,12 +11762,12 @@ /area/maintenance/firstdeck/centralport) "aPT" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralport) "aPU" = ( /obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/catwalk, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralport) @@ -11821,7 +11776,7 @@ internal_pressure_bound = 35000; internal_pressure_bound_default = 35000 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/reinforced, /area/thruster/d1port) "aQm" = ( @@ -11829,7 +11784,7 @@ dir = 1 }, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel, @@ -11839,7 +11794,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 6 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -11850,38 +11805,31 @@ }, /turf/simulated/floor/plating, /area/thruster/d1port) -"aQp" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/clothing/accessory/leg_guards/ballistic, -/obj/item/clothing/accessory/leg_guards/ballistic, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) "aQq" = ( /obj/machinery/shieldwallgen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "aQr" = ( /obj/machinery/barrier, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "aQs" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/power/port_gen/pacman{ anchored = 1 }, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "aQt" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "aQu" = ( /obj/machinery/floodlight, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "aQx" = ( @@ -11930,7 +11878,7 @@ "aQA" = ( /obj/structure/closet, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "aQC" = ( @@ -11945,7 +11893,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) @@ -11961,7 +11909,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) @@ -11977,7 +11925,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -12043,7 +11991,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralport) "aRb" = ( -/obj/effect/floor_decal/corner/yellow/mono, +/obj/floor_decal/corner/yellow/mono, /obj/structure/closet/wardrobe/robotics_black, /obj/item/clothing/under/rank/roboticist/skirt, /obj/item/clothing/under/rank/roboticist/skirt, @@ -12066,7 +12014,7 @@ "aRd" = ( /obj/structure/ladder, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftport) "aRe" = ( @@ -12098,7 +12046,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -12118,7 +12066,7 @@ internal_pressure_bound = 35000; internal_pressure_bound_default = 35000 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/reinforced, /area/thruster/d1port) "aRh" = ( @@ -12133,25 +12081,25 @@ target_pressure = 2000; use_power = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "aRk" = ( /obj/machinery/atmospherics/pipe/manifold/visible/fuel{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "aRm" = ( /obj/machinery/barrier, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/camera/network/command{ +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/camera/network/bridge{ c_tag = "Bridge - Emergency Armory - Port"; dir = 1 }, @@ -12188,7 +12136,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -12215,7 +12163,7 @@ pixel_y = -24; req_access = list("ACCESS_MAINT") }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -12254,7 +12202,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -12515,16 +12463,17 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralport) "aRX" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, +/obj/machinery/atmospherics/valve, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "aSb" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 10 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -12564,21 +12513,21 @@ internal_pressure_bound = 35000; internal_pressure_bound_default = 35000 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/reinforced, /area/thruster/d1port) "aSk" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/atmospherics/valve/digital{ id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "aSl" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel, @@ -12589,7 +12538,7 @@ dir = 5 }, /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "aSn" = ( @@ -12610,7 +12559,7 @@ dir = 9 }, /obj/structure/largecrate, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "aSq" = ( @@ -12625,7 +12574,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) "aSs" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/ladder/up, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) @@ -12648,7 +12597,7 @@ dir = 4 }, /obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "aSw" = ( @@ -12656,8 +12605,8 @@ dir = 8 }, /obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "aSx" = ( @@ -12712,7 +12661,7 @@ /turf/simulated/wall/prepainted, /area/rnd/xenobiology/xenoflora) "aSS" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/light/small{ @@ -12731,7 +12680,7 @@ /obj/machinery/oxygen_pump{ pixel_x = -32 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -12846,7 +12795,7 @@ dir = 4 }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ @@ -12877,7 +12826,7 @@ icon_state = "4-8" }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ @@ -12895,11 +12844,11 @@ /obj/machinery/atmospherics/portables_connector{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" }, -/obj/effect/floor_decal/industrial/hatch/orange, +/obj/floor_decal/industrial/hatch/orange, /obj/machinery/light/small{ dir = 8 }, @@ -12911,13 +12860,13 @@ "aTk" = ( /obj/machinery/atmospherics/pipe/simple/visible/fuel, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "aTl" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -12926,7 +12875,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -12937,7 +12886,7 @@ name = "combustion chamber blast door control"; pixel_y = 24 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ @@ -12946,7 +12895,7 @@ /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "aTo" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -12959,13 +12908,13 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/firstdeck/foreport) "aTq" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -12985,7 +12934,7 @@ tag_exterior_door = "xeno_airlock_exterior"; tag_interior_door = "xeno_airlock_interior" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -13000,7 +12949,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/rnd/xenobiology/entry) "aTC" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -13024,13 +12973,13 @@ /obj/random/medical, /obj/random/medical, /obj/random/firstaid, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftport) "aTF" = ( /obj/random/torchcloset, /obj/item/storage/box/lights/mixed, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftport) "aTH" = ( @@ -13057,17 +13006,17 @@ /area/maintenance/firstdeck/aftport) "aTL" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftport) "aTM" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftport) "aTN" = ( /obj/random/torchcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftport) "aTO" = ( @@ -13075,12 +13024,12 @@ /obj/random/powercell, /obj/random/powercell, /obj/random/powercell, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftport) "aTP" = ( /obj/item/stool, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftport) "aTQ" = ( @@ -13095,7 +13044,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/thruster/d1port) "aTR" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -13109,7 +13058,7 @@ name = "north bump"; pixel_y = 24 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -13127,7 +13076,7 @@ dir = 4; target_pressure = 15000 }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "aTU" = ( @@ -13141,8 +13090,8 @@ tag_west = 1; tag_west_con = 0.4 }, -/obj/effect/floor_decal/industrial/warning/full, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/warning/full, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/techfloor/grid, /area/thruster/d1port) "aTV" = ( @@ -13150,7 +13099,7 @@ dir = 8; target_pressure = 15000 }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor/grid, /area/thruster/d1port) "aTW" = ( @@ -13162,7 +13111,7 @@ /area/thruster/d1port) "aTY" = ( /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel, @@ -13183,7 +13132,7 @@ name = "Engineering External Access" }, /obj/machinery/shield_diffuser, -/turf/simulated/floor/plating, +/turf/simulated/floor/reinforced, /area/maintenance/firstdeck/foreport) "aUb" = ( /obj/machinery/door/firedoor, @@ -13278,7 +13227,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -13290,7 +13239,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/cable/green{ d1 = 1; d2 = 8; @@ -13300,7 +13249,7 @@ /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "aUk" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, @@ -13308,23 +13257,23 @@ /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "aUm" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/binary/passive_gate/on{ dir = 4; max_pressure_setting = 30000; target_pressure = 30000; use_power = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light/small, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "aUn" = ( /obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -13339,17 +13288,19 @@ pixel_y = 24; req_access = list("ACCESS_MAINT") }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/firstdeck/foreport) "aUp" = ( /turf/simulated/wall/r_wall/hull, /area/rnd/xenobiology/entry) "aUq" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 9 }, /obj/structure/hygiene/sink{ @@ -13391,7 +13342,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/entry) "aUt" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 5 }, /obj/structure/closet/emcloset, @@ -13415,7 +13366,7 @@ sensor_name = "Hydrogen Supply Tank"; sensor_tag = "d1ph_sensor" }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "aUv" = ( @@ -13427,7 +13378,7 @@ sensor_name = "Oxygen Supply Tank"; sensor_tag = "d1po2_sensor" }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/alarm{ dir = 1; pixel_y = -24 @@ -13435,10 +13386,10 @@ /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "aUy" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/visible/fuel{ @@ -13448,10 +13399,12 @@ /area/thruster/d1port) "aUz" = ( /obj/machinery/shield_diffuser, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/maintenance/firstdeck/foreport) "aUA" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /obj/machinery/embedded_controller/radio/airlock/access_controller{ @@ -13492,17 +13445,13 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/entry) "aUD" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 6 }, /obj/structure/closet/l3closet/scientist, /obj/structure/sign/warning/internals_required{ pixel_x = 32 }, -/obj/machinery/camera/network/research{ - c_tag = "Xenobiology - Entry"; - dir = 1 - }, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/entry) "aUE" = ( @@ -13637,7 +13586,7 @@ icon_state = "pipe-c" }, /obj/machinery/camera/network/research{ - c_tag = "Xenobiology - Fore" + c_tag = "Research - Xenobiology Fore" }, /obj/machinery/button/blast_door{ id_tag = "xenobio1"; @@ -13659,7 +13608,7 @@ "aVb" = ( /obj/structure/table/standard, /obj/item/circular_saw, -/obj/item/scalpel{ +/obj/item/scalpel/basic{ pixel_y = 12 }, /obj/machinery/button/blast_door{ @@ -13673,7 +13622,7 @@ icon_state = "pipe-c" }, /obj/machinery/camera/network/research{ - c_tag = "Xenobiology - Aft" + c_tag = "Research - Xenobiology Aft" }, /obj/machinery/button/blast_door{ id_tag = "xenobio4_vent"; @@ -13705,7 +13654,7 @@ /turf/simulated/floor/reinforced, /area/rnd/xenobiology/cell_1) "aVg" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -13752,7 +13701,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology) "aVp" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -13788,7 +13737,7 @@ name = "Containment Blast Doors"; opacity = 0 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -13827,7 +13776,7 @@ /obj/machinery/door/window/eastleft{ name = "Containment Pen" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -13865,7 +13814,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -13891,7 +13840,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -13919,7 +13868,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -13971,7 +13920,7 @@ name = "Containment Blast Doors"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -13989,7 +13938,7 @@ name = "Containment Blast Doors"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -14029,7 +13978,7 @@ opacity = 0 }, /obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/rnd/xenobiology/cell_2) "aWa" = ( @@ -14041,7 +13990,7 @@ name = "Containment Blast Doors"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/rnd/xenobiology/cell_3) "aWb" = ( @@ -14054,17 +14003,27 @@ /turf/simulated/floor/reinforced, /area/rnd/xenobiology/cell_3) "aWn" = ( -/obj/effect/shuttle_landmark/ninja/deck2{ +/obj/shuttle_landmark/ninja/deck2{ name = "1st Deck, Aft Port" }, /turf/space, /area/space) "aWo" = ( -/obj/effect/shuttle_landmark/torch/deck2/aquila{ +/obj/shuttle_landmark/torch/deck2/aquila{ name = "1st Deck, Port" }, /turf/space, /area/space) +"aWQ" = ( +/obj/structure/closet/secure_closet/guncabinet/sidearm, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -28 + }, +/obj/structure/cable/green, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/security/armoury) "aXb" = ( /obj/structure/sign/solgov{ pixel_y = -32 @@ -14073,6 +14032,7 @@ /area/space) "aXh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/firstdeck) "aYj" = ( @@ -14091,7 +14051,7 @@ /obj/structure/disposalpipe/junction{ dir = 8 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) "bbb" = ( @@ -14109,7 +14069,7 @@ /turf/simulated/floor/reinforced, /area/thruster/d1starboard) "bdo" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "processwindow" }, /obj/structure/cable/green{ @@ -14147,11 +14107,11 @@ /turf/simulated/floor/reinforced, /area/thruster/d1starboard) "bhy" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/iv_stand, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light{ dir = 1 }, @@ -14164,7 +14124,7 @@ /obj/structure/hygiene/toilet{ dir = 1 }, -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /obj/machinery/light/small{ dir = 4; icon_state = "bulb1" @@ -14175,15 +14135,11 @@ /turf/simulated/floor/tiled/freezer, /area/security/brig) "bii" = ( -/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/floor_decal/techfloor{ + dir = 10 }, /turf/simulated/floor/tiled/dark, -/area/security/storage) +/area/security/armoury) "biu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -14194,7 +14150,7 @@ icon_state = "1-2" }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, @@ -14227,7 +14183,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -14239,23 +14195,23 @@ /obj/item/storage/box/mousetraps, /obj/item/storage/box/lights/mixed, /obj/item/hand_labeler, -/obj/item/stack/package_wrap/twenty_five, +/obj/item/stack/package_wrap/cargo_wrap, /obj/item/reagent_containers/spray/cleaner{ pixel_x = -5 }, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/sign/warning/nosmoking_1{ pixel_y = 24 }, /turf/simulated/floor/tiled/white/monotile, /area/medical/equipstorage) "bmb" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/rnd/xenobiology/xenoflora) "bmB" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 8 }, /turf/simulated/floor/tiled, @@ -14271,7 +14227,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) "bob" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -14292,7 +14248,7 @@ /turf/simulated/floor/plating, /area/security/wing) "bpb" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -14319,7 +14275,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "interviewwindow" }, /turf/simulated/floor/plating, @@ -14352,7 +14308,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -14366,7 +14322,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/teleporter/firstdeck) "brj" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ d1 = 1; @@ -14379,8 +14335,16 @@ }, /turf/simulated/floor/plating, /area/security/wing) +"brN" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/barrier, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/storage) "bta" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 1 }, /obj/machinery/camera/network/research{ @@ -14399,6 +14363,15 @@ "btE" = ( /turf/simulated/floor/tiled/dark, /area/security/questioning) +"buX" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 21 + }, +/obj/machinery/mech_recharger, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark, +/area/security/armoury) "bvI" = ( /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 @@ -14412,7 +14385,7 @@ /turf/simulated/floor/plating, /area/thruster/d1port) "bvY" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -14422,7 +14395,7 @@ /turf/simulated/floor/tiled, /area/assembly/chargebay) "bxz" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled/dark, @@ -14431,7 +14404,7 @@ /obj/machinery/cryopod/robot{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/alarm{ pixel_y = 24 }, @@ -14467,7 +14440,7 @@ /turf/space, /area/space) "bBm" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/machinery/light{ dir = 1 }, @@ -14475,15 +14448,15 @@ /area/hallway/primary/firstdeck/aft) "bBt" = ( /obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "bBv" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/techfloor, +/obj/floor_decal/corner_techfloor_grid{ dir = 4 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -14506,7 +14479,7 @@ /obj/item/device/flash, /obj/item/device/flash, /obj/item/device/flash, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury/tactical) "bDb" = ( @@ -14533,7 +14506,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -14567,7 +14540,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -14580,8 +14553,21 @@ }, /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftstarboard) +"bGh" = ( +/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" + }, +/obj/floor_decal/corner/red{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "bGZ" = ( -/obj/effect/floor_decal/sign/or1, +/obj/floor_decal/sign/or1, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -14596,9 +14582,9 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "bHb" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod12, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/reinforced/airless, +/obj/shuttle_landmark/escape_pod/start/pod12, +/obj/wallframe_spawn/reinforced/titanium, +/turf/simulated/floor/reinforced, /area/shuttle/escape_pod12/station) "bHp" = ( /obj/structure/disposalpipe/segment{ @@ -14615,7 +14601,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 8; @@ -14624,9 +14610,9 @@ /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/center) "bIb" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod13, -/obj/effect/wallframe_spawn/reinforced/titanium, -/turf/simulated/floor/reinforced/airless, +/obj/shuttle_landmark/escape_pod/start/pod13, +/obj/wallframe_spawn/reinforced/titanium, +/turf/simulated/floor/reinforced, /area/shuttle/escape_pod13/station) "bLb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -14664,7 +14650,7 @@ /obj/item/pen/crayon, /obj/item/pen, /obj/item/sticky_pad/random, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/structure/table/glass, /turf/simulated/floor/tiled/white/monotile, /area/medical/medpaperworkoffice) @@ -14672,10 +14658,10 @@ /turf/simulated/wall/prepainted, /area/engineering/hardstorage/aux) "bMB" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 6 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -14693,7 +14679,7 @@ /turf/simulated/floor/plating, /area/shuttle/escape_pod12/station) "bNL" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 1 }, /turf/simulated/floor/tiled, @@ -14712,7 +14698,7 @@ /area/shuttle/escape_pod13/station) "bOZ" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 9 }, /turf/simulated/floor/tiled/steel_grid, @@ -14720,7 +14706,7 @@ "bPR" = ( /obj/structure/table/rack, /obj/random/maintenance/solgov, -/obj/effect/decal/cleanable/cobweb2, +/obj/decal/cleanable/cobweb2, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralport) "bQb" = ( @@ -14760,7 +14746,7 @@ /turf/simulated/floor/plating, /area/shuttle/escape_pod13/station) "bSz" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -14779,7 +14765,7 @@ /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /obj/machinery/photocopier/faxmachine{ department = "Torch - Research Paperwork Office" }, @@ -14836,10 +14822,10 @@ icon_state = "4-8" }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, @@ -14891,7 +14877,7 @@ /area/security/detectives_office) "bWA" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/light{ @@ -14963,7 +14949,7 @@ /turf/simulated/floor/plating, /area/shuttle/escape_pod16/station) "cap" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralstarboard) @@ -14974,7 +14960,7 @@ /turf/simulated/floor/plating, /area/shuttle/escape_pod17/station) "cbj" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/machinery/computer/modular/preset/medical, /obj/machinery/alarm{ pixel_y = 24 @@ -14986,18 +14972,18 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/exam_room) "ccb" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod15, -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/shuttle_landmark/escape_pod/start/pod15, +/obj/wallframe_spawn/reinforced/titanium, /turf/simulated/floor/plating, /area/shuttle/escape_pod15/station) "cdb" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod16, -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/shuttle_landmark/escape_pod/start/pod16, +/obj/wallframe_spawn/reinforced/titanium, /turf/simulated/floor/plating, /area/shuttle/escape_pod16/station) "ceb" = ( -/obj/effect/shuttle_landmark/escape_pod/start/pod17, -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/shuttle_landmark/escape_pod/start/pod17, +/obj/wallframe_spawn/reinforced/titanium, /turf/simulated/floor/plating, /area/shuttle/escape_pod17/station) "cfn" = ( @@ -15018,21 +15004,21 @@ /turf/simulated/floor/tiled/dark, /area/security/evidence) "cgu" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "lightsout" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/light, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/aft) "chb" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "chO" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/rotating_alarm/security_alarm{ @@ -15056,7 +15042,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "cix" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/machinery/vending/wallmed1{ @@ -15097,7 +15083,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftstarboard) "cmY" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -15114,12 +15100,12 @@ /turf/simulated/floor/tiled/white, /area/medical/equipstorage) "cob" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/random_multi/single_item/skelestand/maint, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "cor" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /obj/item/stool/padded, @@ -15127,7 +15113,7 @@ /turf/simulated/floor/tiled, /area/security/locker) "cqb" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/structure/table/rack, /obj/random/firstaid, /obj/item/storage/box/bodybags, @@ -15138,17 +15124,11 @@ /obj/item/bedsheet/blue, /turf/simulated/floor/carpet/orange, /area/crew_quarters/safe_room/firstdeck) -"csy" = ( -/obj/structure/sign/warning/secure_area{ - dir = 1 - }, -/turf/simulated/wall/prepainted, -/area/security/armoury) "ctb" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 8 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/structure/hygiene/sink{ @@ -15166,7 +15146,7 @@ /turf/simulated/floor/tiled/white, /area/medical/surgery2) "cub" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 9 }, /obj/structure/bed/chair/padded/blue, @@ -15187,7 +15167,7 @@ /turf/simulated/wall/prepainted, /area/security/brig) "cvb" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/structure/bed/chair/padded/blue, @@ -15198,7 +15178,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/medical) "cwb" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/structure/bed/chair/padded/blue, @@ -15250,10 +15230,10 @@ /turf/simulated/floor/tiled/dark/monotile, /area/security/bo) "cxb" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 8 }, /obj/machinery/computer/shuttle_control/lift/medical, @@ -15274,7 +15254,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/security/storage) "cyb" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/random_multi/single_item/boombox, @@ -15287,7 +15267,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/medical) "czb" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 5 }, /obj/machinery/atmospherics/binary/pump/on{ @@ -15300,7 +15280,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/medical) "czN" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralport) @@ -15316,7 +15296,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/safe_room/medical) "cAh" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -15324,17 +15304,17 @@ "cAO" = ( /obj/structure/table/standard, /obj/random/clipboard, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /obj/item/pen/crayon/yellow{ desc = "A colourful crayon. Please refrain from eating it or putting it in your nose. This one is labeled 'Canary Yellow.'" }, /obj/item/hand_labeler, -/obj/item/stack/package_wrap/twenty_five, +/obj/item/stack/package_wrap/cargo_wrap, /obj/item/device/destTagger, /turf/simulated/floor/tiled/white/monotile, /area/rnd/office) "cBU" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/structure/closet/medical_wall{ @@ -15351,12 +15331,12 @@ /area/maintenance/firstdeck/centralstarboard) "cCb" = ( /obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/catwalk_plated, +/obj/floor_decal/industrial/hatch/yellow, +/obj/catwalk_plated, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralstarboard) "cDb" = ( -/obj/effect/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ @@ -15369,10 +15349,6 @@ "cDO" = ( /obj/structure/table/steel, /obj/item/storage/box/evidence, -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Processing"; - dir = 4 - }, /obj/item/device/radio/intercom/department/security{ dir = 4; pixel_x = -21 @@ -15390,7 +15366,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ level = 2 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/item/screwdriver, @@ -15406,7 +15382,7 @@ set_temperature = 80; use_power = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/medical/foyer/storeroom) "cFb" = ( @@ -15414,10 +15390,10 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/medical) "cFq" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCryo" }, /obj/machinery/rotating_alarm/security_alarm{ @@ -15426,13 +15402,13 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/sleep/cryo/aux) "cGd" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/dark, /area/medical/foyer/storeroom) "cGB" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 8 }, /turf/simulated/floor/tiled, @@ -15447,6 +15423,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/medical) "cHj" = ( @@ -15459,10 +15436,10 @@ /turf/simulated/floor/reinforced/hydrogen, /area/thruster/d1starboard) "cIb" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/corner/yellow, +/obj/floor_decal/corner/yellow, /turf/simulated/floor/tiled/steel_grid, /area/turbolift/medical_lift) "cKO" = ( @@ -15485,7 +15462,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "cMb" = ( -/obj/effect/floor_decal/techfloor/orange{ +/obj/floor_decal/techfloor/orange{ dir = 8 }, /turf/simulated/floor/tiled/techfloor, @@ -15512,10 +15489,10 @@ /area/security/detectives_office) "cOb" = ( /obj/machinery/vitals_monitor, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 9 }, -/obj/effect/floor_decal/corner/paleblue, +/obj/floor_decal/corner/paleblue, /obj/machinery/alarm{ dir = 4; pixel_x = -21 @@ -15568,7 +15545,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/firstdeck/aftstarboard) "cSj" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/structure/bed/chair/padded/blue, @@ -15577,10 +15554,10 @@ "cTb" = ( /obj/structure/table/standard, /obj/item/storage/firstaid/surgery, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 1 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/light{ @@ -15605,23 +15582,19 @@ /area/rnd/development) "cVb" = ( /obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/catwalk_plated, +/obj/floor_decal/industrial/hatch/yellow, +/obj/catwalk_plated, /turf/simulated/floor/tiled/dark/monotile, /area/medical/foyer/storeroom) "cWb" = ( /obj/structure/closet/wardrobe/medic_torch, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/alarm{ pixel_y = 24 }, /turf/simulated/floor/tiled/dark/monotile, /area/medical/foyer/storeroom) "cWR" = ( -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Interview Room 1"; - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -15634,7 +15607,7 @@ /area/security/questioning) "cXb" = ( /obj/structure/closet/l3closet/general, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/medical/foyer/storeroom) "cXj" = ( @@ -15642,7 +15615,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/regular{ density = 0; dir = 4; @@ -15663,11 +15636,13 @@ pressure_checks_default = 2; use_power = 1 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/thruster/d1port) "cYB" = ( /obj/structure/dispenser, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -15688,19 +15663,19 @@ /area/medical/washroom) "cZd" = ( /obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "cZi" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/barrier, /turf/simulated/floor/tiled/dark/monotile, /area/security/storage) "cZS" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -15722,8 +15697,8 @@ /area/medical/morgue/autopsy) "daB" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/hatch/yellow, /obj/item/device/radio/intercom/department/security{ dir = 4; pixel_x = -21 @@ -15740,26 +15715,18 @@ /obj/structure/table/rack{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, +/obj/item/airlock_brace, +/obj/item/airlock_brace, +/obj/item/airlock_brace, /obj/item/material/twohanded/jack, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, /turf/simulated/floor/tiled/dark/monotile, /area/security/storage) "dcb" = ( /obj/machinery/suit_storage_unit/standard_unit{ req_access = newlist() }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/sign/warning/nosmoking_1{ dir = 8; pixel_x = 32 @@ -15772,7 +15739,7 @@ /turf/simulated/wall/r_wall/hull, /area/thruster/d1port) "deb" = ( -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/structure/bed/chair/padded/blue{ dir = 1 }, @@ -15781,7 +15748,7 @@ /area/crew_quarters/safe_room/medical) "deo" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/clothing/mask/gas/half, /obj/item/clothing/mask/gas/half, /obj/item/clothing/mask/gas/half, @@ -15794,7 +15761,7 @@ /turf/simulated/floor/tiled/monotile, /area/security/locker) "dfb" = ( -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/structure/bed/chair/padded/blue{ dir = 1 }, @@ -15810,7 +15777,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/medical) "dfZ" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -15827,11 +15794,11 @@ /turf/simulated/floor/tiled/white, /area/rnd/office) "dgb" = ( -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/medical) "dhb" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 6 }, /obj/machinery/firealarm{ @@ -15842,7 +15809,7 @@ /area/crew_quarters/safe_room/medical) "dib" = ( /obj/structure/closet/firecloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/storage/briefcase/inflatable, /obj/machinery/light, /turf/simulated/floor/tiled/techfloor/grid, @@ -15853,10 +15820,10 @@ /area/thruster/d1port) "dkb" = ( /obj/machinery/optable, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 1 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/oxygen_pump{ @@ -15869,7 +15836,7 @@ /turf/simulated/floor/tiled/white, /area/medical/surgery2) "dkG" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/secure_closet{ name = "Secure Evidence Locker"; req_access = list("ACCESS_SECURITY") @@ -15896,11 +15863,11 @@ /obj/structure/disposalpipe/junction{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/center) "dkV" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /obj/machinery/light/small, @@ -15915,7 +15882,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/recharger, @@ -15924,7 +15891,7 @@ /turf/simulated/floor/plating, /area/engineering/auxpower) "dlf" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /obj/machinery/computer/guestpass{ @@ -15937,7 +15904,7 @@ dir = 8; pixel_x = -24 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /obj/structure/flora/pottedplant/minitree, @@ -15972,7 +15939,7 @@ /turf/simulated/floor/tiled/freezer, /area/medical/washroom) "dqU" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, @@ -15988,7 +15955,7 @@ "dsd" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d1port) @@ -16012,7 +15979,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/medical/morgue/autopsy) "dtx" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/machinery/rotating_alarm/security_alarm{ @@ -16036,13 +16003,13 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /turf/simulated/floor/tiled/white, /area/rnd/research) "dzG" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -16067,21 +16034,21 @@ /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "dEb" = ( -/obj/random/torchcloset, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "dFb" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 9 }, -/obj/effect/floor_decal/corner/paleblue, +/obj/floor_decal/corner/paleblue, /turf/simulated/floor/tiled/dark/monotile, /area/medical/morgue/autopsy) "dFH" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/steel_grid, @@ -16097,6 +16064,16 @@ }, /turf/simulated/floor/tiled/dark, /area/medical/foyer/storeroom) +"dIw" = ( +/obj/structure/sign/warning/secure_area/armory{ + dir = 1; + pixel_y = -32 + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "dIA" = ( /obj/structure/railing/mapped{ dir = 4; @@ -16124,12 +16101,12 @@ /turf/simulated/floor/tiled/dark, /area/medical/morgue/autopsy) "dJp" = ( -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/firstdeck/aft) "dJv" = ( -/obj/effect/floor_decal/techfloor/corner, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/power/apc{ @@ -16174,10 +16151,10 @@ /obj/random/medical/lite, /obj/random/medical/lite, /obj/random/medical/lite, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/item/defibrillator/loaded, @@ -16202,16 +16179,19 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "dMe" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/sign/directions/med{ pixel_y = 32 }, +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck Hallway - Midships Aft" + }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "dNb" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/machinery/alarm{ dir = 8; pixel_x = 24 @@ -16219,8 +16199,20 @@ /obj/machinery/atmospherics/unary/cryo_cell, /turf/simulated/floor/tiled/white/monotile, /area/medical/sleeper) +"dPr" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/security/armoury) "dPA" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -16228,18 +16220,13 @@ }, /turf/simulated/floor/tiled, /area/security/wing) -"dQb" = ( -/obj/random_multi/single_item/skelestand, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/firstdeck/aftstarboard) "dRb" = ( /obj/structure/table/rack, /obj/item/storage/box/bodybags{ pixel_x = 1; pixel_y = 2 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -16249,7 +16236,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/medical/foyer/storeroom) "dRf" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/closet/hydrant{ @@ -16258,17 +16245,21 @@ /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "dRs" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/alarm{ pixel_y = 24 }, /obj/structure/disposalpipe/trunk, /turf/simulated/floor/tiled, /area/assembly/robotics/office) +"dRC" = ( +/obj/random/torchcloset, +/turf/simulated/floor/plating, +/area/maintenance/firstdeck/aftstarboard) "dSb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -16279,7 +16270,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/firealarm{ @@ -16289,10 +16280,10 @@ /turf/simulated/floor/tiled/white, /area/medical/medpaperworkoffice) "dTb" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 8 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /turf/simulated/floor/tiled/dark/monotile, @@ -16311,7 +16302,7 @@ /turf/simulated/wall/r_wall/hull, /area/thruster/d1starboard) "dVp" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, @@ -16321,14 +16312,14 @@ /turf/simulated/wall/r_wall/hull, /area/command/armoury/tactical) "dWb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/white, /area/medical/sleeper) "dXM" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/machinery/light/spot{ @@ -16344,7 +16335,7 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "dYb" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ +/obj/floor_decal/corner/paleblue/three_quarters{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -16360,20 +16351,20 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "dZb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled/white, /area/medical/sleeper) "dZx" = ( /obj/structure/table/steel, -/obj/item/stack/package_wrap/twenty_five, +/obj/item/stack/package_wrap/cargo_wrap, /obj/item/hand_labeler, /obj/item/device/destTagger{ pixel_y = 13 }, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/recharger/wallcharger{ dir = 4; pixel_x = -23; @@ -16382,10 +16373,10 @@ /turf/simulated/floor/tiled/monotile, /area/security/locker) "eab" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -16403,7 +16394,7 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "eaF" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -16418,7 +16409,7 @@ /turf/simulated/floor/tiled/white, /area/medical/equipstorage) "eaS" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/self_destruct, /obj/machinery/firealarm{ dir = 8; @@ -16427,16 +16418,15 @@ /turf/simulated/floor/tiled/dark/monotile, /area/security/nuke_storage) "ebb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 9 }, -/obj/item/device/radio/intercom/department/medbay{ - dir = 8; - pixel_x = 24 +/obj/structure/closet/hydrant{ + pixel_x = 32 }, /turf/simulated/floor/tiled/white, /area/medical/sleeper) @@ -16472,7 +16462,7 @@ dir = 1 }, /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/engineering/hardstorage/aux) "edM" = ( @@ -16481,7 +16471,7 @@ dir = 4 }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/plating, @@ -16505,8 +16495,8 @@ /obj/item/pen, /obj/item/device/taperecorder, /obj/item/reagent_containers/spray/cleaner, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/recharger/wallcharger{ dir = 4; pixel_x = -23; @@ -16537,18 +16527,17 @@ /turf/simulated/floor/tiled/freezer, /area/medical/washroom) "elT" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/power/port_gen/pacman{ - anchored = 1 - }, -/obj/machinery/light{ - dir = 1 +/obj/floor_decal/industrial/outline/grey, +/obj/structure/closet/crate/medical, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/fire{ + pixel_x = -4; + pixel_y = -4 }, -/obj/item/stack/material/phoron/ten, /turf/simulated/floor/tiled/dark/monotile, /area/security/storage) "emb" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/standard, /obj/machinery/light{ dir = 8 @@ -16561,7 +16550,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/medical/foyer/storeroom) "emQ" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/random/snack, @@ -16600,7 +16589,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -16621,16 +16610,18 @@ /turf/simulated/floor/tiled/dark, /area/medical/morgue/autopsy) "equ" = ( -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck - Ladders"; - dir = 1 - }, -/obj/effect/floor_decal/corner/research/half, +/obj/floor_decal/corner/research/half, /obj/machinery/light, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/center) +"eqZ" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/security/armoury) "erb" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/medical/morgue/autopsy) "etb" = ( @@ -16646,16 +16637,13 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "etI" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/stunrevolver/rifle, -/obj/item/gun/energy/stunrevolver/rifle, -/obj/structure/window/reinforced{ - dir = 8 +/obj/floor_decal/techfloor{ + dir = 6 }, -/turf/simulated/floor/tiled/dark/monotile, +/turf/simulated/floor/tiled/dark, /area/security/armoury) "evb" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/standard, /obj/machinery/power/apc{ dir = 8; @@ -16672,7 +16660,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/medical/foyer/storeroom) "ewb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -16689,8 +16677,8 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "ewc" = ( -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light{ dir = 1 }, @@ -16698,7 +16686,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/center) "exb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/structure/cable/green{ @@ -16725,10 +16713,10 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "eyY" = ( @@ -16756,11 +16744,11 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/engineering/hardstorage/aux) "eEE" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralport) @@ -16786,7 +16774,7 @@ /obj/structure/sign/monkey_painting{ pixel_x = -32 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -16803,9 +16791,21 @@ /obj/machinery/bodyscanner{ dir = 1 }, -/obj/effect/floor_decal/corner/pink/mono, +/obj/floor_decal/corner/pink/mono, /turf/simulated/floor/tiled/white/monotile, /area/medical/sleeper) +"eHp" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "eIb" = ( /obj/structure/curtain/open/shower, /obj/structure/hygiene/shower{ @@ -16831,13 +16831,13 @@ /turf/simulated/floor/tiled/dark, /area/medical/foyer/storeroom) "eJy" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d1starboard) "eKb" = ( /obj/structure/closet/crate/plastic, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light_switch{ pixel_x = -4; pixel_y = -23 @@ -16849,7 +16849,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/secure_closet{ name = "Secure Morgue Locker"; req_access = list("ACCESS_MEDICAL") @@ -16886,11 +16886,24 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /turf/simulated/floor/tiled/white/monotile, /area/medical/surgery) +"ePu" = ( +/obj/structure/table/rack, +/obj/item/clothing/accessory/leg_guards/ballistic, +/obj/item/clothing/accessory/leg_guards/ballistic, +/obj/item/clothing/accessory/arm_guards/ballistic, +/obj/item/clothing/accessory/arm_guards/ballistic, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/clothing/head/helmet/ballistic, +/obj/item/clothing/head/helmet/ballistic, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "eQK" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 9 }, /obj/machinery/firealarm{ @@ -16909,7 +16922,7 @@ name = "Robotics Laboratory"; req_access = list(list("ACCESS_MEDICAL","ACCESS_ROBOTICS")) }, -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -16960,9 +16973,10 @@ /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "eUW" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 8 }, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/tiled/dark, /area/command/conference) "eVQ" = ( @@ -16980,11 +16994,11 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/surgery) "eXk" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/iv_stand, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/recharger/wallcharger{ pixel_y = 24 }, @@ -17011,7 +17025,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/security/brig) "fdQ" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/space_heater, /obj/structure/railing/mapped{ dir = 1; @@ -17035,13 +17049,13 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/foyer/storeroom) "fll" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/flasher/portable, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "flB" = ( /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /turf/simulated/floor/tiled, @@ -17051,11 +17065,11 @@ dir = 4 }, /obj/machinery/portable_atmospherics/canister/oxygen/prechilled, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/medical/foyer/storeroom) "fnu" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, /turf/simulated/floor/tiled, @@ -17066,11 +17080,11 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftport) "foK" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/assembly/robotics/office) "foP" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -17098,7 +17112,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/light{ @@ -17135,7 +17149,7 @@ /turf/simulated/floor/reinforced/oxygen, /area/thruster/d1starboard) "fvb" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/machinery/sleeper{ dir = 4 }, @@ -17178,10 +17192,10 @@ "fCb" = ( /obj/structure/table/standard, /obj/item/storage/firstaid/surgery, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 1 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/light{ @@ -17189,14 +17203,8 @@ }, /turf/simulated/floor/tiled/white, /area/medical/surgery) -"fDm" = ( -/obj/structure/sign/science_1{ - dir = 1 - }, -/turf/simulated/wall/prepainted, -/area/rnd/entry) "fDJ" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -17213,7 +17221,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "fEb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /turf/simulated/floor/tiled/white, @@ -17228,14 +17236,14 @@ /turf/simulated/floor/tiled, /area/security/brig) "fIn" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/techfloor, +/obj/floor_decal/corner_techfloor_grid{ dir = 5 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 1 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -17261,13 +17269,13 @@ /obj/machinery/light{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "fLg" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack{ dir = 4 }, @@ -17295,7 +17303,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "fMr" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -17307,25 +17315,19 @@ /turf/simulated/floor/plating, /area/medical/staging) "fMI" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/random/assembly, /obj/structure/table/steel, /obj/random/material, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralstarboard) "fOb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/structure/flora/pottedplant/flower, /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) -"fOp" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) "fOr" = ( /obj/structure/table/steel, /obj/random/maintenance/solgov/clean, @@ -17353,7 +17355,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/equipstorage) "fQf" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -17370,7 +17372,7 @@ "fRN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) @@ -17378,7 +17380,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/blue{ dir = 6 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/light/small{ dir = 8 }, @@ -17394,11 +17396,11 @@ /turf/simulated/floor/tiled/monotile, /area/security/detectives_office) "fVb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/iv_stand, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/noticeboard{ pixel_y = 32 }, @@ -17414,7 +17416,7 @@ /turf/simulated/floor/tiled/monotile, /area/teleporter/firstdeck) "fVC" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ d1 = 1; @@ -17426,7 +17428,7 @@ /turf/simulated/floor/plating, /area/security/wing) "fWb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/structure/disposalpipe/segment, @@ -17482,8 +17484,8 @@ /turf/simulated/floor/tiled/dark, /area/command/conference) "fZn" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -17496,7 +17498,7 @@ anchored = 1; sheets = 25 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/engineering/hardstorage/aux) "gbb" = ( @@ -17515,21 +17517,20 @@ "gcY" = ( /obj/structure/table/standard, /obj/structure/window/reinforced, -/obj/machinery/reagent_temperature/cooler, /turf/simulated/floor/tiled/dark, /area/rnd/misc_lab) "geb" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/engineering/hardstorage/aux) "ggA" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/machinery/newscaster{ pixel_y = -32 }, @@ -17540,10 +17541,10 @@ /area/hallway/primary/firstdeck/center) "ghb" = ( /obj/structure/iv_stand, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 8 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -17564,7 +17565,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/corner/green/half, +/obj/floor_decal/corner/green/half, /obj/item/device/radio/intercom{ dir = 1; pixel_y = -28 @@ -17583,7 +17584,7 @@ /area/medical/surgery) "gig" = ( /obj/machinery/photocopier, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -17594,7 +17595,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/rnd/office) "gij" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/structure/disposalpipe/segment{ @@ -17606,29 +17607,29 @@ "gjb" = ( /obj/structure/table/standard, /obj/item/storage/firstaid/adv, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /turf/simulated/floor/tiled/white, /area/medical/surgery) "gkb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille/regular{ +/obj/wallframe_spawn/reinforced/polarized/no_grille/regular{ id = "or1" }, /turf/simulated/floor/plating, /area/medical/surgery) "glb" = ( -/obj/effect/floor_decal/spline/plain/blue{ +/obj/floor_decal/spline/plain/blue{ dir = 6 }, /turf/simulated/floor/tiled/white, /area/medical/sleeper) "gnt" = ( /obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 8; icon_state = "top-center" }, @@ -17639,7 +17640,7 @@ /area/security/detectives_office) "goa" = ( /obj/machinery/vending/security, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/alarm{ dir = 4; pixel_x = -22 @@ -17662,7 +17663,7 @@ /obj/structure/table/steel, /obj/item/device/taperecorder, /obj/item/device/camera, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /obj/machinery/light{ @@ -17678,8 +17679,8 @@ }, /obj/item/storage/firstaid/toxin, /obj/random/medical/lite, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light, /obj/item/storage/firstaid/radiation, /turf/simulated/floor/tiled/white/monotile, @@ -17698,7 +17699,7 @@ /turf/simulated/wall/r_wall/hull, /area/rnd/xenobiology/cell_4) "gxi" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, /area/security/processing) @@ -17716,7 +17717,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -17745,7 +17746,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/hardstorage/aux) "gyV" = ( -/obj/effect/wallframe_spawn/no_grille, +/obj/wallframe_spawn/no_grille, /turf/simulated/floor/plating, /area/medical/sleeper) "gyY" = ( @@ -17753,7 +17754,7 @@ /area/crew_quarters/safe_room/firstdeck) "gzb" = ( /obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/machinery/door/blast/shutters{ density = 0; dir = 4; @@ -17779,7 +17780,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -17792,13 +17793,13 @@ dir = 4; icon_state = "pipe-c" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "gDb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/structure/bed/chair/padded/blue{ @@ -17807,17 +17808,17 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "gDm" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/tele_beacon, /turf/simulated/floor/tiled/dark, /area/teleporter/firstdeck) "gEb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille/regular{ +/obj/wallframe_spawn/reinforced/polarized/no_grille/regular{ id = "exam_windows" }, /obj/machinery/door/blast/shutters{ @@ -17850,7 +17851,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "gFb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -17873,7 +17874,7 @@ dir = 4; icon_state = "bulb1" }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/engineering/hardstorage/aux) "gML" = ( @@ -17890,11 +17891,11 @@ dir = 8; pixel_x = -24 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/engineering/hardstorage/aux) "gQn" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, @@ -17914,7 +17915,7 @@ /turf/simulated/floor/tiled, /area/assembly/robotics/office) "gRb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/item/stool/padded, @@ -17923,8 +17924,12 @@ }, /turf/simulated/floor/tiled/white, /area/medical/exam_room) +"gSl" = ( +/obj/random_multi/single_item/punitelli, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/head/deck1) "gVR" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/machinery/power/apc{ @@ -17943,7 +17948,7 @@ /turf/simulated/floor/tiled/dark, /area/command/conference) "gWb" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -17956,7 +17961,7 @@ /area/medical/medicalhallway) "gWY" = ( /obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -17964,7 +17969,7 @@ /turf/simulated/floor/tiled/monotile, /area/assembly/chargebay) "gXb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/full{ +/obj/wallframe_spawn/reinforced/polarized/full{ id = "exam_windows" }, /obj/machinery/door/blast/shutters{ @@ -17992,7 +17997,7 @@ /turf/simulated/floor/tiled/dark, /area/medical/foyer/storeroom) "gZT" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 8; icon_state = "center-left" }, @@ -18005,7 +18010,7 @@ /turf/simulated/wall/prepainted, /area/rnd/development) "haV" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -18030,10 +18035,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/security/storage) "hcb" = ( -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Hallway - Ladders" - }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/light{ @@ -18042,7 +18044,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "hdb" = ( -/obj/effect/floor_decal/corner/paleblue/half{ +/obj/floor_decal/corner/paleblue/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -18059,7 +18061,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -18071,7 +18073,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -18098,11 +18100,11 @@ /obj/structure/disposalpipe/junction{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/center) "hgt" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -18116,10 +18118,10 @@ /area/medical/locker) "hgP" = ( /obj/machinery/vitals_monitor, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 9 }, -/obj/effect/floor_decal/corner/paleblue, +/obj/floor_decal/corner/paleblue, /obj/machinery/alarm{ dir = 4; pixel_x = -21 @@ -18145,7 +18147,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, @@ -18167,7 +18169,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -18175,20 +18177,20 @@ /area/hallway/primary/firstdeck/aft) "hjk" = ( /obj/structure/closet/secure_closet/brig, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/security/brig) "hku" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /turf/simulated/floor/tiled/white, /area/medical/surgery2) "hlb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -18207,11 +18209,11 @@ dir = 4; id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/reinforced/oxygen, /area/thruster/d1port) "hnL" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -18247,7 +18249,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/aft) "hqb" = ( @@ -18259,7 +18261,7 @@ name = "Ladderwell Checkpoint Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/rnd/entry) @@ -18268,7 +18270,7 @@ /turf/simulated/wall/ocp_wall, /area/thruster/d1starboard) "hrb" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -18285,7 +18287,7 @@ /turf/simulated/floor/plating, /area/security/opscheck) "hrk" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack, /obj/item/clothing/shoes/dutyboots, /obj/item/clothing/accessory/storage/holster/thigh, @@ -18296,7 +18298,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury/tactical) "hrE" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack{ dir = 4 }, @@ -18320,11 +18322,11 @@ name = "Ladderwell Checkpoint Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/rnd/entry) "htq" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -18334,16 +18336,21 @@ /area/security/wing) "htK" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced{ - dir = 1 +/obj/floor_decal/industrial/outline/grey, +/obj/item/storage/box/ammo/light_bullpup, +/obj/item/storage/box/ammo/light_bullpup, +/obj/item/gun/projectile/automatic/bullpup_rifle/light{ + starts_loaded = 0 }, -/obj/structure/window/reinforced{ - dir = 8 +/obj/item/gun/projectile/automatic/bullpup_rifle/light{ + starts_loaded = 0 + }, +/obj/item/gun/projectile/automatic/bullpup_rifle/light{ + starts_loaded = 0 + }, +/obj/item/gun/projectile/automatic/bullpup_rifle/light{ + starts_loaded = 0 }, -/obj/item/gun/energy/stunrevolver/rifle, -/obj/item/gun/energy/taser/carbine, -/obj/item/gun/energy/taser/carbine, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury/tactical) "hub" = ( @@ -18355,7 +18362,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -18368,15 +18375,22 @@ /turf/simulated/floor/tiled/monotile, /area/rnd/entry) "huf" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 +/obj/structure/table/rack{ + dir = 4 }, -/turf/simulated/floor/tiled/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/storage/box/handcuffs, +/obj/item/storage/box/handcuffs, +/obj/item/storage/box/smokes, +/obj/item/storage/box/smokes, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, /area/security/storage) "hvb" = ( /obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -18419,7 +18433,7 @@ /turf/simulated/wall/prepainted, /area/rnd/development) "hwx" = ( -/obj/effect/floor_decal/corner/paleblue/three_quarters{ +/obj/floor_decal/corner/paleblue/three_quarters{ dir = 1 }, /turf/simulated/floor/tiled/white, @@ -18442,7 +18456,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/rnd/development) "hyj" = ( @@ -18455,7 +18469,7 @@ /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -18483,19 +18497,11 @@ /turf/simulated/floor/plating, /area/engineering/hardstorage/aux) "hzl" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Security Armory" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/sign/warning/secure_area{ + dir = 1 }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) +/turf/simulated/wall/prepainted, +/area/security/secure_storage) "hzT" = ( /obj/item/device/radio/intercom/department/medbay{ dir = 1; @@ -18513,7 +18519,7 @@ /turf/simulated/floor/tiled/dark, /area/security/opscheck) "hBb" = ( -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 9 }, /turf/simulated/floor/tiled/steel_grid, @@ -18527,7 +18533,7 @@ /obj/item/device/flashlight, /obj/item/crowbar, /obj/item/device/megaphone, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/item/device/binoculars, /obj/structure/cable/green{ d1 = 1; @@ -18553,7 +18559,7 @@ name = "Operation Checkpoint Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/cable/green{ d2 = 2; icon_state = "0-2" @@ -18574,7 +18580,7 @@ /turf/simulated/floor/tiled/dark, /area/security/bo) "hDV" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 10 }, /obj/structure/table/standard{ @@ -18588,7 +18594,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/medical) "hEU" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/structure/disposalpipe/segment, @@ -18608,23 +18614,12 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, /turf/simulated/floor/tiled, /area/rnd/entry) -"hFu" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/gun/energy/laser/secure, -/obj/item/gun/energy/laser/secure, -/obj/item/gun/energy/laser/secure, -/turf/simulated/floor/tiled/techfloor/grid, -/area/command/armoury/tactical) "hGb" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -18666,7 +18661,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/rnd/development) "hJq" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 1 }, /obj/structure/sign/double/solgovflag/right{ @@ -18676,7 +18671,7 @@ /area/command/conference) "hKb" = ( /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -18686,12 +18681,12 @@ /turf/simulated/floor/tiled/white, /area/rnd/development) "hLf" = ( -/obj/machinery/light{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/machinery/rotating_alarm/security_alarm, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "hLD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -18700,13 +18695,9 @@ /area/hallway/primary/firstdeck/fore) "hOb" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/gun/energy/ionrifle, /obj/item/gun/energy/ionrifle, -/obj/item/gun/energy/ionrifle/small, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury/tactical) "hOZ" = ( @@ -18743,7 +18734,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled/techfloor, /area/engineering/hardstorage/aux) @@ -18756,7 +18747,7 @@ name = "Operation Checkpoint Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -18772,12 +18763,18 @@ /obj/structure/table/rack{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/storage/box/handcuffs{ - pixel_x = 3; - pixel_y = 3 +/obj/floor_decal/industrial/outline/grey, +/obj/item/clothing/accessory/leg_guards, +/obj/item/clothing/accessory/leg_guards, +/obj/item/clothing/accessory/arm_guards, +/obj/item/clothing/accessory/arm_guards, +/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" }, -/obj/item/storage/box/handcuffs, /turf/simulated/floor/tiled/dark/monotile, /area/security/storage) "hUE" = ( @@ -18785,23 +18782,23 @@ dir = 4; id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "hUM" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "hVb" = ( -/obj/effect/floor_decal/torchltdlogo{ +/obj/floor_decal/torchltdlogo{ icon_state = "topleft" }, /turf/simulated/floor/tiled, @@ -18816,10 +18813,16 @@ name = "east bump"; pixel_x = 24 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled/techfloor, /area/engineering/hardstorage/aux) +"hWR" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/security/armoury) "hYM" = ( /obj/structure/cable/green{ d1 = 4; @@ -18836,7 +18839,7 @@ dir = 4 }, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/center) "hZb" = ( @@ -18852,11 +18855,11 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/rnd/development) "ibb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -18865,7 +18868,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/development) "iej" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d1port) @@ -18934,16 +18937,16 @@ /area/rnd/xenobiology/cell_3) "ikZ" = ( /obj/machinery/atmospherics/valve/shutoff/supply, -/obj/effect/floor_decal/industrial/shutoff, +/obj/floor_decal/industrial/shutoff, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralstarboard) "ila" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/tvalve/mirrored/digital{ dir = 4; id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "ilb" = ( @@ -18973,7 +18976,7 @@ /turf/simulated/floor/tiled/dark, /area/security/opscheck) "ilh" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/machinery/firealarm{ @@ -18985,7 +18988,7 @@ /turf/simulated/floor/tiled/dark, /area/security/questioning) "imb" = ( -/obj/effect/floor_decal/torchltdlogo, +/obj/floor_decal/torchltdlogo, /turf/simulated/floor/tiled, /area/rnd/entry) "imF" = ( @@ -18993,7 +18996,7 @@ /turf/simulated/wall/r_wall/hull, /area/maintenance/firstdeck/aftport) "imK" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ +/obj/wallframe_spawn/reinforced/polarized/no_grille{ id = "conference_window" }, /turf/simulated/floor/plating, @@ -19002,7 +19005,7 @@ /obj/structure/noticeboard{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/machinery/recharger, /obj/structure/table/glass, /obj/random/smokes, @@ -19041,7 +19044,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/rnd/development) "isb" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/disposalpipe/segment, @@ -19060,7 +19063,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/development) "isR" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/machinery/alarm{ @@ -19076,7 +19079,7 @@ /turf/simulated/floor/tiled/dark, /area/command/conference) "itb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 5; icon_state = "warning" }, @@ -19132,7 +19135,7 @@ /turf/simulated/wall/prepainted, /area/rnd/misc_lab) "ivT" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -19154,7 +19157,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralport) "ixf" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/structure/cable/green{ @@ -19178,15 +19181,12 @@ /area/crew_quarters/safe_room/firstdeck) "iyb" = ( /obj/structure/table/steel, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /obj/machinery/recharger/wallcharger{ pixel_y = 24 }, -/obj/machinery/camera/network/engineering{ - c_tag = "Engineering - Robotics Office" - }, /obj/item/book/manual/ripley_build_and_repair, /obj/item/book/manual/robotics_cyborgs, /turf/simulated/floor/tiled, @@ -19194,17 +19194,13 @@ "izd" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "iAS" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, +/obj/floor_decal/industrial/outline/grey, /obj/item/shield/riot/metal, /obj/item/shield/riot/metal, /obj/item/shield/riot/metal, @@ -19225,7 +19221,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) "iBb" = ( @@ -19253,7 +19249,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) "iDb" = ( @@ -19272,7 +19268,7 @@ /turf/simulated/floor/tiled/dark, /area/security/questioning) "iEb" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/dark, @@ -19286,8 +19282,8 @@ /turf/simulated/floor/tiled/white, /area/security/detectives_office) "iGb" = ( -/obj/effect/floor_decal/floordetail/edgedrain, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/floordetail/edgedrain, +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/closet/crate/secure/biohazard/alt, @@ -19303,11 +19299,11 @@ opacity = 0 }, /obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/rnd/development) "iHX" = ( -/obj/effect/floor_decal/sign/or2, +/obj/floor_decal/sign/or2, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -19322,7 +19318,7 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "iKb" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/disposalpipe/segment, @@ -19336,27 +19332,31 @@ /turf/simulated/floor/tiled/white, /area/rnd/development) "iLb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/white, /area/rnd/development) "iLA" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) +/obj/item/device/radio/intercom/department/security{ + pixel_y = 23 + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "iLB" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "iMW" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/cable/green{ @@ -19377,7 +19377,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralport) "iOh" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/random_multi/single_item/piano, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralport) @@ -19389,7 +19389,7 @@ name = "Biohazard Shutter"; opacity = 0 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -19401,16 +19401,6 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/white/monotile, /area/rnd/entry) -"iPj" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/camera/network/first_deck{ - c_tag = "Briefing Room"; - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/command/conference) "iPV" = ( /obj/structure/cable/green{ d1 = 2; @@ -19440,7 +19430,7 @@ name = "Ladderwell Checkpoint Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/rnd/entry) "iRb" = ( @@ -19471,7 +19461,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -19502,9 +19492,13 @@ /turf/simulated/floor/tiled, /area/security/wing) "iUb" = ( -/obj/effect/floor_decal/corner/research/half, +/obj/floor_decal/corner/research/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/center) +"iUs" = ( +/obj/random_multi/single_item/punitelli, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/sleep/cryo/aux) "iVb" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ @@ -19512,9 +19506,9 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/valve/shutoff/supply, -/obj/effect/floor_decal/industrial/shutoff, +/obj/floor_decal/industrial/shutoff, /obj/machinery/atmospherics/valve/shutoff/scrubbers, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) @@ -19529,7 +19523,7 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /turf/simulated/floor/tiled, @@ -19539,7 +19533,7 @@ dir = 8; icon_state = "pipe-c" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /turf/simulated/floor/tiled, @@ -19549,12 +19543,8 @@ dir = 1; pixel_y = -22 }, -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Hallway - Aft"; - dir = 1 - }, /obj/machinery/light, -/obj/effect/floor_decal/corner/research/half, +/obj/floor_decal/corner/research/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/center) "jbk" = ( @@ -19593,21 +19583,21 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/surgery) "jcg" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/security/locker) "jcu" = ( -/obj/effect/floor_decal/spline/plain/blue{ +/obj/floor_decal/spline/plain/blue{ dir = 5 }, /obj/machinery/light/spot{ dir = 8 }, /obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Treatment Centre"; + c_tag = "Medical - Treament Center"; dir = 4 }, /turf/simulated/floor/tiled/white, @@ -19670,38 +19660,33 @@ /turf/simulated/floor/tiled, /area/security/detectives_office) "jft" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/rotating_alarm/security_alarm{ - dir = 8 +/obj/floor_decal/techfloor{ + dir = 9 }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) +/obj/structure/closet/walllocker{ + pixel_y = 20 + }, +/obj/item/storage/box/trackimp, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "jhb" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass/civilian, /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/firstdeck/aft) "jhf" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/recharger/wallcharger{ - dir = 8; - pixel_x = 23; - pixel_y = -3 - }, /obj/structure/table/rack, -/obj/item/clothing/head/helmet/ballistic, -/obj/item/clothing/suit/armor/bulletproof{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/clothing/suit/armor/bulletproof{ - pixel_x = -2; - pixel_y = -2 +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/head/helmet/riot, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 21 }, -/obj/item/clothing/head/helmet/ballistic, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) +/turf/simulated/floor/tiled/techfloor, +/area/security/secure_storage) "jhq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -19727,10 +19712,10 @@ /area/thruster/d1starboard) "jiq" = ( /obj/structure/iv_stand, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 8 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -19748,7 +19733,7 @@ /turf/simulated/floor/tiled/white, /area/medical/surgery2) "jjb" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -19801,11 +19786,11 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/paleblue/half, +/obj/floor_decal/corner/paleblue/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/aft) "jnd" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/crate/internals, /obj/item/clothing/mask/gas{ pixel_x = 3; @@ -19841,19 +19826,23 @@ dir = 1; pixel_y = -22 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck Hallway - Aft"; + dir = 1 + }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/aft) "jpt" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled, /area/security/wing) "jqb" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -19881,11 +19870,11 @@ name = "Operation Checkpoint Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/aft) "jqD" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "forensicswindow" }, /obj/structure/cable/green, @@ -19923,7 +19912,7 @@ "jsk" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass/civilian, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, /turf/simulated/floor/tiled/steel_ridged, @@ -20000,9 +19989,12 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/surgery) "jxG" = ( -/obj/effect/floor_decal/corner/paleblue/half{ +/obj/floor_decal/corner/paleblue/half{ dir = 4 }, +/obj/machinery/camera/network/first_deck{ + c_tag = "First Deck Hallway - Stairs" + }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/fore) "jyb" = ( @@ -20039,7 +20031,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/floor_decal/corner/research, +/obj/floor_decal/corner/research, /turf/simulated/floor/tiled/white, /area/rnd/research) "jAb" = ( @@ -20048,16 +20040,16 @@ /turf/simulated/floor/tiled/dark/monotile, /area/rnd/misc_lab) "jAl" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /turf/simulated/floor/tiled/dark, /area/command/armoury) "jAr" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled, @@ -20080,7 +20072,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/aft) "jBk" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/machinery/power/apc{ @@ -20095,7 +20087,7 @@ /turf/simulated/floor/tiled/dark, /area/security/questioning) "jBW" = ( -/obj/effect/floor_decal/corner/red, +/obj/floor_decal/corner/red, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -20114,7 +20106,7 @@ /turf/simulated/wall/prepainted, /area/medical/morgue/autopsy) "jCU" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/button/blast_door{ @@ -20151,28 +20143,28 @@ /obj/machinery/atmospherics/pipe/manifold/visible/fuel{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "jGb" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/structure/closet/secure_closet/hydroponics_torch, +/obj/structure/closet/hydroponics_torch, /turf/simulated/floor/tiled/white, /area/rnd/locker) "jHb" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/l3closet/scientist/multi, /turf/simulated/floor/tiled/white, /area/rnd/locker) @@ -20189,7 +20181,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/center) "jIb" = ( @@ -20197,10 +20189,10 @@ dir = 4; pixel_y = 8 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/bombcloset, /turf/simulated/floor/tiled/white, /area/rnd/locker) @@ -20227,7 +20219,7 @@ name = "Science Requests Console"; pixel_x = -30 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /obj/machinery/firealarm{ @@ -20248,7 +20240,7 @@ /area/rnd/research) "jMb" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -20265,7 +20257,7 @@ /area/thruster/d1port) "jNb" = ( /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /obj/machinery/firealarm{ @@ -20301,13 +20293,13 @@ /obj/item/modular_computer/telescreen/preset/generic{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /turf/simulated/floor/tiled/white, /area/rnd/research) "jPY" = ( -/obj/effect/floor_decal/corner/blue, +/obj/floor_decal/corner/blue, /obj/machinery/power/apc{ dir = 8; name = "west bump"; @@ -20317,42 +20309,42 @@ /turf/simulated/floor/tiled/dark, /area/command/armoury) "jQb" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 1 }, /turf/simulated/floor/tiled/white, /area/rnd/research) "jQY" = ( -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/firealarm{ dir = 1; pixel_y = -24 }, -/obj/machinery/camera/network/command{ - c_tag = "Emergency Armory - Tactical"; - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/camera/network/bridge{ + c_tag = "Emergency Armory - Tactical"; + dir = 1 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury/tactical) "jRb" = ( /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 4 }, /turf/simulated/floor/tiled/white, /area/rnd/research) "jSb" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /obj/machinery/alarm{ @@ -20361,7 +20353,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/research) "jTb" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 4 }, /turf/simulated/floor/tiled/white, @@ -20377,7 +20369,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -20387,7 +20379,7 @@ /turf/simulated/wall/prepainted, /area/security/bo) "jWb" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -20416,7 +20408,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -20433,7 +20425,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/surgery2) "jYZ" = ( -/obj/effect/floor_decal/corner/paleblue/half{ +/obj/floor_decal/corner/paleblue/half{ dir = 1 }, /obj/structure/extinguisher_cabinet{ @@ -20442,7 +20434,7 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/aft) "jZb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ +/obj/wallframe_spawn/reinforced/polarized/no_grille{ id = "misc_lab" }, /turf/simulated/floor/plating, @@ -20454,7 +20446,7 @@ "kaS" = ( /obj/structure/closet/crate/freezer, /obj/random/medical, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/random/medical, /obj/random/medical, /turf/simulated/floor/tiled/techfloor, @@ -20473,13 +20465,13 @@ /turf/simulated/floor/tiled/white/monotile, /area/rnd/misc_lab) "kcb" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, -/obj/effect/floor_decal/sign/or1, +/obj/floor_decal/sign/or1, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -20503,10 +20495,10 @@ dir = 4; pixel_x = 21 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 10 }, /obj/structure/bed/chair/padded/yellow{ @@ -20516,8 +20508,8 @@ /area/assembly/robotics/laboratory) "kdd" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/center) @@ -20527,12 +20519,7 @@ dir = 4; pixel_x = -21 }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Robotics Laboratory"; - dir = 4; - network = list("Medical, Engineering") - }, -/obj/effect/floor_decal/corner/yellow/mono, +/obj/floor_decal/corner/yellow/mono, /turf/simulated/floor/tiled/white/monotile, /area/assembly/robotics/laboratory) "kfb" = ( @@ -20553,7 +20540,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/thruster/d1starboard) "kgi" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -20582,7 +20569,7 @@ name = "Robotics RC"; pixel_y = 30 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /turf/simulated/floor/tiled, @@ -20590,8 +20577,8 @@ "kiR" = ( /obj/structure/table/steel, /obj/machinery/recharger, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/recharger/wallcharger{ dir = 4; pixel_x = -23; @@ -20613,7 +20600,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -20630,7 +20617,7 @@ /turf/simulated/floor/plating, /area/rnd/xenobiology/cell_2) "kkN" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -20649,7 +20636,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -20670,7 +20657,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/command/armoury) "knb" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 10 }, /turf/simulated/floor/tiled, @@ -20684,20 +20671,20 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "kny" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "koX" = ( /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -20708,7 +20695,7 @@ /turf/simulated/floor/tiled/dark, /area/rnd/misc_lab) "kqb" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/cable/green{ @@ -20723,14 +20710,14 @@ /turf/simulated/floor/tiled/dark, /area/command/conference) "krc" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/machinery/keycard_auth/torch{ pixel_x = -24 }, /obj/machinery/camera/network/security{ - c_tag = "Security Hallway - Center"; + c_tag = "Security Hallway - Port"; dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -20758,10 +20745,10 @@ /turf/simulated/floor/tiled/dark/monotile, /area/security/storage) "ksK" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/machinery/door/airlock/highsecurity{ @@ -20778,7 +20765,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury/tactical) "kvb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille/regular{ +/obj/wallframe_spawn/reinforced/polarized/no_grille/regular{ id = "roboticlab_window" }, /turf/simulated/floor/plating, @@ -20825,8 +20812,8 @@ /turf/simulated/floor/tiled/steel_ridged, /area/assembly/robotics/laboratory) "kyt" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -20835,7 +20822,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "kzy" = ( -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -20851,7 +20838,7 @@ /turf/simulated/wall/prepainted, /area/medical/surgery) "kCl" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/light{ @@ -20860,14 +20847,21 @@ /turf/simulated/floor/tiled/dark, /area/command/conference) "kCN" = ( -/obj/structure/sign/warning/secure_area/armory{ - dir = 1; - pixel_y = -32 +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/tiled/dark, -/area/security/storage) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/highsecurity{ + name = "Security Storage" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/security/secure_storage) "kDb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ icon_state = "warning" }, /obj/structure/bed/chair{ @@ -20898,7 +20892,7 @@ pixel_x = -5; pixel_y = -24 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/button/alternate/door{ @@ -20921,7 +20915,7 @@ /turf/simulated/floor/tiled/white, /area/security/brig) "kGX" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/firealarm{ @@ -20931,7 +20925,7 @@ /area/hallway/primary/firstdeck/aft) "kHb" = ( /obj/structure/bed/padded, -/obj/effect/floor_decal/corner/pink/mono, +/obj/floor_decal/corner/pink/mono, /obj/machinery/alarm{ dir = 4; pixel_x = -23 @@ -20943,7 +20937,7 @@ /area/medical/staging) "kIb" = ( /obj/structure/closet/secure_closet/personal/patient, -/obj/effect/floor_decal/corner/pink/mono, +/obj/floor_decal/corner/pink/mono, /obj/machinery/body_scan_display{ pixel_y = 24 }, @@ -20953,7 +20947,7 @@ "kJb" = ( /obj/structure/bed/padded, /obj/item/bedsheet/medical, -/obj/effect/floor_decal/corner/pink/mono, +/obj/floor_decal/corner/pink/mono, /obj/machinery/power/apc{ dir = 1; name = "north bump"; @@ -20966,7 +20960,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/staging) "kKb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille/regular{ +/obj/wallframe_spawn/reinforced/polarized/no_grille/regular{ id = "postop_window" }, /turf/simulated/floor/plating, @@ -20975,7 +20969,7 @@ /obj/machinery/bodyscanner{ dir = 1 }, -/obj/effect/floor_decal/corner/pink/mono, +/obj/floor_decal/corner/pink/mono, /obj/machinery/light{ dir = 1 }, @@ -20987,7 +20981,7 @@ /area/maintenance/firstdeck/centralstarboard) "kNb" = ( /obj/item/stool/padded, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 8 }, /turf/simulated/floor/tiled/white, @@ -21019,7 +21013,7 @@ /turf/simulated/floor/tiled/white, /area/assembly/robotics/laboratory) "kPp" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible/fuel, @@ -21032,10 +21026,10 @@ /turf/simulated/wall/r_wall/hull, /area/thruster/d1port) "kQb" = ( -/obj/effect/floor_decal/corner/pink{ +/obj/floor_decal/corner/pink{ dir = 5 }, -/obj/effect/floor_decal/sign/pop, +/obj/floor_decal/sign/pop, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -21050,7 +21044,7 @@ /turf/simulated/floor/tiled/white, /area/medical/staging) "kRb" = ( -/obj/effect/floor_decal/corner/pink{ +/obj/floor_decal/corner/pink{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -21073,7 +21067,7 @@ /area/medical/staging) "kSb" = ( /obj/structure/curtain/open/privacy, -/obj/effect/floor_decal/corner/pink{ +/obj/floor_decal/corner/pink{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -21103,16 +21097,13 @@ /area/maintenance/substation/firstdeck) "kSs" = ( /obj/structure/table/rack, -/obj/item/gun/energy/gun/secure, -/obj/item/gun/energy/gun/secure, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) +/obj/item/gun/energy/ionrifle/small, +/obj/item/gun/energy/ionrifle/small, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "kTb" = ( -/obj/effect/floor_decal/corner/pink/mono, +/obj/floor_decal/corner/pink/mono, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, @@ -21133,8 +21124,8 @@ /obj/structure/table/rack, /obj/item/defibrillator/compact/loaded, /obj/item/auto_cpr, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/item/device/radio/intercom/department/medbay{ dir = 8; pixel_x = 24 @@ -21150,7 +21141,7 @@ name = "Mech Bay"; opacity = 0 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ @@ -21162,7 +21153,7 @@ /turf/simulated/floor/tiled/monotile, /area/assembly/chargebay) "kUt" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet{ name = "Evidence Closet" }, @@ -21173,11 +21164,11 @@ /obj/item/storage/backpack/weldpack, /obj/item/reagent_containers/spray/sterilizine, /obj/item/storage/toolbox/mechanical, -/obj/effect/floor_decal/corner/yellow/mono, +/obj/floor_decal/corner/yellow/mono, /turf/simulated/floor/tiled/white/monotile, /area/assembly/robotics/laboratory) "kVi" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/item/device/radio/intercom/department/security{ @@ -21187,7 +21178,7 @@ /turf/simulated/floor/tiled/dark, /area/security/questioning) "kWb" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -21196,19 +21187,19 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 10 }, /turf/simulated/floor/tiled/white, /area/assembly/robotics/laboratory) "kYM" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 4 }, -/obj/effect/shuttle_landmark/lift/medical_top, +/obj/shuttle_landmark/lift/medical_top, /turf/simulated/floor/tiled/steel_grid, /area/turbolift/medical_lift) "kZb" = ( @@ -21243,27 +21234,22 @@ /area/medical/staging) "lcq" = ( /obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/assembly/chargebay) "lcI" = ( -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Armory"; - dir = 8 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack, -/obj/item/clothing/head/helmet/ablative, -/obj/item/clothing/suit/armor/laserproof{ - pixel_x = -2; - pixel_y = -2 +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/item/clothing/suit/armor/laserproof{ - pixel_x = -2; - pixel_y = -2 +/obj/floor_decal/corner/red{ + dir = 9 }, -/obj/item/clothing/head/helmet/ablative, -/turf/simulated/floor/tiled/dark/monotile, +/turf/simulated/floor/tiled/dark, /area/security/armoury) "lcL" = ( /obj/machinery/door/window/brigdoor/westleft{ @@ -21297,7 +21283,7 @@ name = "Robotics Laboratory" }, /obj/machinery/door/firedoor, -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -21318,7 +21304,7 @@ /area/medical/staging) "lfb" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/yellow/half{ +/obj/floor_decal/corner/yellow/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -21330,7 +21316,7 @@ /area/maintenance/firstdeck/centralport) "lgb" = ( /obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Hallway - Auxiliary Cryogenic Storage" + c_tag = "First Deck Hallway - Midships Fore" }, /obj/structure/cable/green{ d2 = 2; @@ -21341,7 +21327,7 @@ name = "north bump"; pixel_y = 24 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /turf/simulated/floor/tiled, @@ -21353,7 +21339,7 @@ /turf/simulated/floor/tiled/white, /area/security/detectives_office) "lhb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/sign/emergonly{ @@ -21367,10 +21353,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/landmark{ +/obj/landmark{ name = "lightsout" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -21386,8 +21372,8 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -21399,18 +21385,15 @@ dir = 8; pixel_x = 21 }, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 6 }, /obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/research{ - c_tag = "Research - Entry" - }, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/steel_grid, /area/rnd/entry) "lkp" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/item/device/radio/intercom{ dir = 8; pixel_x = 22 @@ -21422,7 +21405,7 @@ /area/hallway/primary/firstdeck/aft) "llb" = ( /obj/machinery/fabricator, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ d1 = 1; @@ -21432,7 +21415,7 @@ /turf/simulated/floor/tiled/dark, /area/rnd/development) "llM" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -21446,12 +21429,12 @@ /area/security/wing) "lmb" = ( /obj/machinery/r_n_d/protolathe, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/dark, /area/rnd/development) "lnb" = ( /obj/machinery/r_n_d/circuit_imprinter, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/reagent_dispensers/acid{ density = 0; pixel_x = 32 @@ -21506,28 +21489,28 @@ /turf/simulated/floor/tiled/dark, /area/rnd/development) "lsb" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralport) "lst" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 6 }, -/obj/effect/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, /turf/simulated/floor/tiled/dark, /area/command/armoury) "lsT" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 1 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/aft) "ltb" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/computer/rdconsole/core{ dir = 1 }, @@ -21554,7 +21537,7 @@ /obj/random/tank, /obj/random/tank, /obj/random/tank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/fireaxecabinet{ pixel_x = -32 }, @@ -21619,7 +21602,7 @@ /obj/structure/bed/chair/comfy/lime{ dir = 8 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -21631,10 +21614,10 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "lyb" = ( @@ -21664,7 +21647,7 @@ pixel_y = -20 }, /obj/machinery/camera/network/research{ - c_tag = "Research - Lockers"; + c_tag = "Research - Lobby"; dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -21681,7 +21664,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -21696,13 +21679,15 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/structure/table/standard, +/obj/item/storage/box/bloodpacks, +/obj/item/storage/box/glucose, /turf/simulated/floor/tiled/white, /area/medical/sleeper) "lAC" = ( @@ -21714,7 +21699,7 @@ /obj/random/medical, /obj/random/medical, /obj/random/medical, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -21736,7 +21721,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -21759,27 +21744,27 @@ /turf/simulated/floor/tiled/dark, /area/security/evidence) "lEb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled/white, /area/medical/equipstorage) "lGw" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 9 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 8 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 1 }, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "lHO" = ( @@ -21802,7 +21787,7 @@ dir = 10 }, /obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d1port) @@ -21832,7 +21817,7 @@ /area/engineering/hardstorage/aux) "lMD" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -21840,12 +21825,12 @@ "lNb" = ( /obj/structure/closet/crate/solar, /obj/machinery/light/small, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/engineering/hardstorage/aux) "lOb" = ( /obj/structure/closet/crate/solar, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/engineering/hardstorage/aux) "lRa" = ( @@ -21865,7 +21850,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/security/evidence) "lVZ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/bombclosetsecurity, /turf/simulated/floor/tiled/monotile, /area/security/locker) @@ -21883,7 +21868,7 @@ icon_state = "1-2" }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/plating, @@ -21897,11 +21882,15 @@ "mav" = ( /turf/simulated/wall/prepainted, /area/rnd/office) +"maU" = ( +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/dark, +/area/security/armoury) "mbb" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 4 }, /obj/machinery/organ_printer/robot/mapped, @@ -21921,7 +21910,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralport) "mcA" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -21932,7 +21921,7 @@ /turf/simulated/floor/tiled, /area/assembly/chargebay) "mdv" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "processwindow" }, /obj/machinery/door/blast/regular{ @@ -21954,7 +21943,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/blue{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/light/small{ @@ -21981,13 +21970,13 @@ /turf/simulated/floor/tiled/dark, /area/security/evidence) "mfg" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/security/storage) "mgb" = ( /obj/structure/table/steel, /obj/item/material/ashtray/bronze, -/obj/item/storage/fancy/smokable/professionals, +/obj/random/smokes, /turf/simulated/floor/tiled, /area/security/detectives_office) "mhb" = ( @@ -21998,7 +21987,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -22010,7 +21999,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -22046,7 +22035,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -22056,7 +22045,7 @@ /area/hallway/primary/firstdeck/fore) "mjt" = ( /obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftport) "mkb" = ( @@ -22067,13 +22056,13 @@ dir = 4 }, /obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Fore Hallway - Starboard"; + c_tag = "First Deck Hallway - Fore Starboard"; dir = 1 }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -22088,7 +22077,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/light{ @@ -22112,7 +22101,7 @@ /area/teleporter/firstdeck) "mlX" = ( /obj/machinery/computer/modular/preset/civilian, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /obj/item/device/radio/intercom{ dir = 4; pixel_x = -21 @@ -22120,10 +22109,10 @@ /turf/simulated/floor/tiled/white/monotile, /area/rnd/office) "mmb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -22140,7 +22129,7 @@ /area/medical/medpaperworkoffice) "mmP" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /obj/structure/noticeboard{ @@ -22149,20 +22138,20 @@ /turf/simulated/floor/tiled/white, /area/rnd/research) "mpq" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "mpy" = ( /turf/simulated/wall/r_wall/hull, /area/maintenance/firstdeck/aftstarboard) "mrr" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/machinery/light{ @@ -22172,8 +22161,8 @@ /area/command/armoury/tactical) "mrW" = ( /obj/structure/closet/secure_closet/medical_torchsenior, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/alarm{ pixel_y = 24 }, @@ -22188,12 +22177,12 @@ name = "Mech Bay"; opacity = 0 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/monotile, /area/assembly/chargebay) "mtk" = ( /obj/item/crowbar/prybar, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/crate, /obj/random/maintenance/solgov, /turf/simulated/floor/tiled/techfloor, @@ -22229,7 +22218,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/cable/green{ @@ -22268,10 +22257,10 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "mww" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 1 }, /turf/simulated/floor/tiled/steel_grid, @@ -22280,17 +22269,13 @@ /obj/structure/hygiene/toilet{ dir = 4 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /obj/machinery/flasher{ id_tag = "Cell 2"; pixel_x = -24 }, -/obj/machinery/camera/network/security{ - c_tag = "Brig - Cell Two"; - dir = 4 - }, /obj/machinery/alarm{ dir = 1; pixel_y = -22 @@ -22298,14 +22283,14 @@ /turf/simulated/floor/tiled, /area/security/wing) "mwA" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 6 }, -/obj/effect/floor_decal/techfloor/corner, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /obj/structure/cable/green{ @@ -22322,7 +22307,7 @@ /turf/simulated/floor/tiled/dark, /area/command/armoury) "mwJ" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -22340,13 +22325,13 @@ /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/firstdeck/aft) "mwV" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 6 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 1 }, -/obj/effect/floor_decal/sign/or2, +/obj/floor_decal/sign/or2, /obj/machinery/button/holosign{ id_tag = "or2"; pixel_x = 6; @@ -22368,14 +22353,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Operating Theatre 2"; - dir = 1 - }, /turf/simulated/floor/tiled/white, /area/medical/surgery2) "mzb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/structure/disposalpipe/segment, @@ -22400,25 +22381,6 @@ /obj/item/storage/box/swabs, /turf/simulated/floor/tiled/white, /area/security/detectives_office) -"mCi" = ( -/obj/structure/bed/padded, -/obj/item/bedsheet/orange, -/obj/effect/floor_decal/corner/red{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/camera/network/security{ - c_tag = "Brig - Cell One"; - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/turf/simulated/floor/tiled, -/area/security/wing) "mCk" = ( /obj/structure/table/steel, /obj/item/book/manual/sol_sop, @@ -22426,7 +22388,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 5 }, /turf/simulated/floor/tiled, @@ -22466,14 +22428,14 @@ /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "mGb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, /obj/machinery/keycard_auth/torch{ pixel_x = -28 }, -/turf/simulated/floor/blackgrid, +/turf/simulated/floor/selfestructgrid, /area/security/nuke_storage) "mGj" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ @@ -22482,11 +22444,11 @@ /turf/simulated/wall/r_wall/hull, /area/thruster/d1starboard) "mHb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, -/turf/simulated/floor/blackgrid, +/turf/simulated/floor/selfestructgrid, /area/security/nuke_storage) "mHr" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ @@ -22509,8 +22471,8 @@ /turf/simulated/floor/tiled, /area/security/wing) "mJJ" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor/corner{ dir = 4 }, /obj/structure/cable/green{ @@ -22526,10 +22488,7 @@ /area/command/armoury) "mJY" = ( /obj/structure/closet/wardrobe/chemistry_white, -/obj/effect/floor_decal/corner/beige/mono, -/obj/item/device/radio/intercom{ - pixel_y = 23 - }, +/obj/floor_decal/corner/beige/mono, /turf/simulated/floor/tiled/white/monotile, /area/medical/chemistry) "mKb" = ( @@ -22542,18 +22501,11 @@ pixel_x = 6; pixel_y = -24 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled, /area/security/detectives_office) -"mKq" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/table/rack, -/obj/item/clothing/accessory/arm_guards/ballistic, -/obj/item/clothing/accessory/arm_guards/ballistic, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) "mKw" = ( /obj/structure/railing/mapped{ dir = 8; @@ -22576,9 +22528,9 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/machinery/camera/network/first_deck{ - c_tag = "Command Hallway - Fore"; + c_tag = "First Deck Hallway - Fore"; dir = 8 }, /obj/structure/disposalpipe/segment, @@ -22589,11 +22541,11 @@ /area/hallway/primary/firstdeck/fore) "mLu" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "mMb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 5; icon_state = "warning" }, @@ -22607,7 +22559,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/security/nuke_storage) "mMX" = ( -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "mNb" = ( @@ -22615,10 +22567,11 @@ dir = 4 }, /obj/random_multi/single_item/poppy, -/turf/simulated/floor/blackgrid, +/obj/random_multi/single_item/punitelli, +/turf/simulated/floor/selfestructgrid, /area/security/nuke_storage) "mOb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 9 }, /obj/item/modular_computer/telescreen/preset/generic{ @@ -22630,7 +22583,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/security/nuke_storage) "mRb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/cable/green{ @@ -22664,7 +22617,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -22676,7 +22629,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/cable/green{ @@ -22695,10 +22648,10 @@ /obj/machinery/nuclearbomb/station{ name = "ship self-destruct terminal" }, -/turf/simulated/floor/blackgrid, +/turf/simulated/floor/selfestructgrid, /area/security/nuke_storage) "mVW" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "forensicswindow" }, /obj/structure/cable/green{ @@ -22708,11 +22661,11 @@ /turf/simulated/floor/plating, /area/security/detectives_office) "mWb" = ( -/obj/machinery/camera/network/command{ - c_tag = "Vault - Interior"; +/obj/machinery/camera/network/bridge{ + c_tag = "Self Destruct"; dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/nuke_cylinder_dispenser{ @@ -22733,7 +22686,7 @@ icon_state = "0-2" }, /obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "processwindow" }, /turf/simulated/floor/plating, @@ -22755,14 +22708,14 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/firstdeck/fore) "ndb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 6; icon_state = "warning" }, @@ -22781,10 +22734,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/blackgrid, +/turf/simulated/floor/selfestructgrid, /area/security/nuke_storage) "nfb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /obj/item/modular_computer/telescreen/preset/generic{ @@ -22798,10 +22751,6 @@ /area/security/nuke_storage) "ngb" = ( /obj/structure/table/rack, -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck - Teleporter"; - dir = 4 - }, /obj/random/tech_supply, /turf/simulated/floor/tiled/dark/monotile, /area/teleporter/firstdeck) @@ -22813,7 +22762,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/tiled, @@ -22844,10 +22793,10 @@ /obj/machinery/vending/wallmed1{ pixel_y = 32 }, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 8 }, /obj/item/reagent_containers/dropper/peridaxon, @@ -22857,14 +22806,14 @@ /turf/simulated/wall/prepainted, /area/command/conference) "njm" = ( -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 8 }, -/obj/effect/floor_decal/techfloor/corner, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner{ dir = 4 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 1 }, /obj/structure/cable/green{ @@ -22925,7 +22874,7 @@ id = "Cell 1"; name = "Cell Locker" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -22977,21 +22926,21 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "processwindow" }, /turf/simulated/floor/plating, /area/security/processing) "nnb" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/keycard_auth/torch{ pixel_x = -28 }, -/turf/simulated/floor/blackgrid, +/turf/simulated/floor/selfestructgrid, /area/security/nuke_storage) "nob" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/blackgrid, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/selfestructgrid, /area/security/nuke_storage) "npb" = ( /obj/structure/table/standard, @@ -23012,14 +22961,18 @@ /obj/machinery/light{ dir = 4 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, +/obj/machinery/camera/network/security{ + c_tag = "Security Hallway - Starboard"; + dir = 8 + }, /turf/simulated/floor/tiled, /area/security/wing) "nqb" = ( /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/dark/monotile, /area/teleporter/firstdeck) @@ -23047,7 +23000,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled/monotile, @@ -23066,10 +23019,10 @@ /turf/simulated/floor/tiled/dark/monotile, /area/teleporter/firstdeck) "nvb" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -23093,16 +23046,16 @@ /turf/simulated/floor/tiled/dark/monotile, /area/command/armoury) "nxK" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 1 }, -/obj/effect/floor_decal/techfloor, -/obj/effect/shuttle_landmark/lift/robotics_top, +/obj/floor_decal/techfloor, +/obj/shuttle_landmark/lift/robotics_top, /turf/simulated/floor/tiled/steel_grid, /area/turbolift/robotics_lift) "nyb" = ( -/obj/effect/catwalk_plated, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/catwalk_plated, +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -23117,14 +23070,14 @@ /obj/machinery/atmospherics/binary/pump/on{ target_pressure = 15000 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "nAb" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/structure/cable/green{ @@ -23136,10 +23089,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/machinery/camera/network/security{ - c_tag = "Checkpoint - Deck One"; - dir = 4 - }, /obj/machinery/newscaster/security_unit{ pixel_x = -32 }, @@ -23152,7 +23101,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralport) "nBb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille/regular{ +/obj/wallframe_spawn/reinforced/polarized/no_grille/regular{ id = "exam_windows" }, /obj/machinery/door/blast/shutters{ @@ -23169,7 +23118,7 @@ /turf/simulated/wall/prepainted, /area/medical/exam_room) "nDd" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -23199,11 +23148,11 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /turf/simulated/floor/tiled/white/monotile, /area/medical/surgery2) "nDB" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ d1 = 1; @@ -23233,10 +23182,6 @@ /obj/machinery/photocopier/faxmachine{ department = "Torch - Brig Chief" }, -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Brig Chief"; - dir = 4 - }, /obj/machinery/newscaster/security_unit{ pixel_x = -32 }, @@ -23248,13 +23193,13 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "nIb" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/machinery/alarm{ @@ -23284,13 +23229,13 @@ autoset_name = 0; beacon_name = "Research - Lobby" }, -/obj/effect/floor_decal/torchltdlogo{ +/obj/floor_decal/torchltdlogo{ icon_state = "topright" }, /turf/simulated/floor/tiled, /area/rnd/entry) "nJo" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/cable/green{ d2 = 4; icon_state = "0-4" @@ -23303,14 +23248,14 @@ icon_state = "railing0-1" }, /obj/structure/ladder, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/tiled, /area/rnd/entry) "nLb" = ( /turf/simulated/open, /area/rnd/entry) "nLo" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/item/storage/pill_bottle/tramadol, @@ -23333,7 +23278,7 @@ /turf/simulated/floor/tiled, /area/security/detectives_office) "nPb" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/machinery/recharger/wallcharger{ @@ -23362,7 +23307,7 @@ icon_state = "1-2" }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -23396,7 +23341,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/torchltdlogo{ +/obj/floor_decal/torchltdlogo{ icon_state = "bottomright" }, /turf/simulated/floor/tiled, @@ -23406,7 +23351,7 @@ dir = 1 }, /obj/structure/closet/firecloset, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 9 }, /obj/machinery/light{ @@ -23431,17 +23376,17 @@ dir = 4 }, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/center) "nVe" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "JoinLateCyborg" }, -/obj/effect/landmark/start{ +/obj/landmark/start{ name = "Cyborg" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -23461,7 +23406,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -23476,17 +23421,17 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /obj/machinery/light, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "nWP" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 1 }, /obj/machinery/light, @@ -23509,7 +23454,7 @@ /turf/simulated/wall/r_wall/hull, /area/rnd/xenobiology/cell_2) "nXk" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/random/assembly, /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) @@ -23521,7 +23466,7 @@ dir = 4 }, /obj/machinery/camera/network/first_deck{ - c_tag = "First Deck Fore Hallway - Port" + c_tag = "First Deck Hallway - Fore Port" }, /obj/structure/cable/green{ d1 = 4; @@ -23555,15 +23500,15 @@ dir = 9 }, /obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "nZZ" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 1 }, /obj/structure/cable/green{ @@ -23596,7 +23541,7 @@ /turf/simulated/wall/ocp_wall, /area/thruster/d1port) "oby" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/cable/green{ d2 = 8; icon_state = "0-8" @@ -23613,7 +23558,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -23646,10 +23591,10 @@ /obj/item/folder/yellow, /obj/item/folder/white, /obj/item/folder/yellow, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/machinery/light{ @@ -23662,7 +23607,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 6 }, /obj/machinery/light{ @@ -23686,14 +23631,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 8 }, /turf/simulated/floor/tiled/white, /area/rnd/research) "ofb" = ( /obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/machinery/door/blast/shutters{ density = 0; dir = 4; @@ -23717,13 +23662,13 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "ohy" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -23733,7 +23678,7 @@ /obj/item/pen/red, /obj/item/pen, /obj/item/device/camera, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /obj/structure/sign/ecplaque{ pixel_x = 1; pixel_y = 32 @@ -23742,18 +23687,14 @@ /area/rnd/office) "ojb" = ( /obj/structure/table/standard, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /obj/random_multi/single_item/memo_research, /turf/simulated/floor/tiled/white/monotile, /area/rnd/office) "okp" = ( -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/security_torch, -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Locker Room"; - dir = 8 - }, /obj/machinery/firealarm{ dir = 4; pixel_x = 26 @@ -23774,17 +23715,17 @@ icon_state = "4-8" }, /obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled/white, /area/medical/exam_room) "onM" = ( -/obj/effect/floor_decal/corner/blue, +/obj/floor_decal/corner/blue, /turf/simulated/floor/tiled/dark, /area/command/armoury) "oox" = ( -/obj/effect/floor_decal/corner/research, +/obj/floor_decal/corner/research, /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -23792,7 +23733,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "ooN" = ( -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/dark, /area/command/armoury) "opg" = ( @@ -23800,10 +23741,10 @@ dir = 4; id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "oqp" = ( @@ -23823,11 +23764,11 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "orb" = ( -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "osb" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/self_destruct, /turf/simulated/floor/tiled/dark/monotile, /area/security/nuke_storage) @@ -23844,7 +23785,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/self_destruct, /turf/simulated/floor/tiled/dark/monotile, /area/security/nuke_storage) @@ -23869,7 +23810,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) "ovb" = ( -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass/medical{ autoset_access = 0; @@ -23889,8 +23830,8 @@ /area/medical/staging) "ovZ" = ( /obj/structure/closet/secure_closet/medical_torchsenior, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/sign/warning/nosmoking_1{ pixel_y = 24 }, @@ -23900,10 +23841,10 @@ /turf/simulated/floor/tiled/white, /area/medical/medicalhallway) "oxa" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 4 }, /obj/machinery/firealarm{ @@ -23913,7 +23854,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/medical/morgue/autopsy) "oxb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /obj/structure/disposalpipe/segment, @@ -23921,7 +23862,7 @@ /area/medical/medicalhallway) "oyb" = ( /obj/machinery/light, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/self_destruct, /turf/simulated/floor/tiled/dark/monotile, /area/security/nuke_storage) @@ -23942,7 +23883,7 @@ name = "Containment Blast Doors"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -23968,8 +23909,17 @@ }, /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) +"ozG" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/item/storage/box/ammo/smg/rubber, +/obj/item/storage/box/ammo/smg/rubber, +/obj/item/storage/box/ammo/smg/rubber, +/obj/item/storage/box/ammo/smg/rubber, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "oAp" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /turf/simulated/floor/tiled, @@ -23987,8 +23937,15 @@ }, /turf/simulated/floor/tiled, /area/security/brig) +"oBI" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/turf/simulated/floor/tiled/techfloor/grid, +/area/command/armoury/tactical) "oBZ" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 9 }, /obj/structure/closet/hydrant{ @@ -23997,10 +23954,10 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/safe_room/firstdeck) "oCf" = ( -/obj/effect/floor_decal/corner/pink{ +/obj/floor_decal/corner/pink{ dir = 9 }, -/obj/effect/floor_decal/sign/d, +/obj/floor_decal/sign/d, /turf/simulated/floor/tiled/white, /area/medical/staging) "oDg" = ( @@ -24020,7 +23977,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -24043,25 +24000,15 @@ /turf/simulated/floor/tiled, /area/security/wing) "oIq" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/emcloset, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "oJb" = ( /turf/simulated/wall/prepainted, /area/assembly/robotics/laboratory) -"oLz" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4; - level = 2 - }, -/obj/item/device/radio/intercom/department/security{ - pixel_y = 23 - }, -/turf/simulated/floor/tiled/dark, -/area/security/armoury) "oLK" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/item/device/radio/intercom/department/medbay{ @@ -24091,10 +24038,10 @@ /turf/simulated/floor/tiled/steel_grid, /area/security/wing) "oMi" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 8 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/structure/hygiene/sink{ @@ -24112,7 +24059,7 @@ /turf/simulated/floor/tiled/white, /area/medical/surgery) "oMq" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 10 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -24122,10 +24069,10 @@ /area/assembly/robotics/office) "oOb" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/light{ dir = 8 }, @@ -24143,8 +24090,8 @@ /turf/simulated/floor/tiled/dark, /area/security/opscheck) "oOt" = ( -/obj/effect/floor_decal/floordetail/edgedrain, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/floordetail/edgedrain, +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -24162,7 +24109,7 @@ /turf/simulated/floor/tiled/white, /area/medical/surgery2) "oPb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/table/standard, @@ -24191,7 +24138,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/research, +/obj/floor_decal/corner/research, /obj/machinery/rotating_alarm/security_alarm{ dir = 1 }, @@ -24216,7 +24163,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/locker) "oSb" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 4; @@ -24240,7 +24187,7 @@ /turf/simulated/floor/plating, /area/security/wing) "oSD" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/structure/disposalpipe/segment{ @@ -24260,7 +24207,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -24275,13 +24222,13 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /turf/simulated/floor/tiled/white, /area/rnd/research) "oVb" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/cable/green{ d2 = 2; icon_state = "0-2" @@ -24298,7 +24245,7 @@ pixel_x = 6; pixel_y = -24 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/security/brig) "oWF" = ( @@ -24308,10 +24255,10 @@ /obj/structure/closet{ name = "Prisoner's Locker" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/random/drinkbottle, /obj/item/clothing/suit/apron/overalls, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -24325,7 +24272,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -24337,28 +24284,29 @@ /turf/simulated/floor/tiled/white, /area/rnd/research) "oXv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/item/gun/projectile/automatic/sec_smg/empty, +/obj/item/gun/projectile/automatic/sec_smg/empty, +/obj/item/gun/projectile/automatic/sec_smg/empty, +/obj/item/gun/projectile/automatic/sec_smg/empty, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) +"oXx" = ( /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/red{ + dir = 10 + }, /turf/simulated/floor/tiled/dark, -/area/security/armoury) -"oXx" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/clothing/accessory/arm_guards/ablative, -/obj/item/clothing/accessory/arm_guards/ablative, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) +/area/security/secure_storage) "oZb" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -24385,16 +24333,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /obj/structure/closet/medical_wall/filled{ pixel_y = -32 }, -/obj/machinery/camera/network/research{ - c_tag = "Research - Hallway"; - dir = 1 - }, /turf/simulated/floor/tiled/white, /area/rnd/research) "pdb" = ( @@ -24409,13 +24353,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 8 }, /turf/simulated/floor/tiled/white, /area/rnd/research) "pdO" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ @@ -24481,7 +24425,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/misc_lab) "pib" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -24504,7 +24448,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/security/detectives_office) "pjV" = ( -/obj/effect/floor_decal/corner/pink{ +/obj/floor_decal/corner/pink{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -24532,13 +24476,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 6 }, /turf/simulated/floor/tiled/white, /area/rnd/research) "pmz" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/light{ @@ -24552,17 +24496,17 @@ pixel_x = 24 }, /obj/machinery/chem_master, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/rnd/misc_lab) "poS" = ( /turf/simulated/wall/r_wall/prepainted, /area/crew_quarters/safe_room/medical) "pqb" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/power/apc{ name = "south bump"; pixel_y = -28 @@ -24574,23 +24518,23 @@ /turf/simulated/floor/tiled/white, /area/rnd/locker) "prb" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /obj/machinery/alarm{ dir = 1; pixel_y = -22 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/scientist_torch, /turf/simulated/floor/tiled/white, /area/rnd/locker) "psb" = ( /obj/structure/closet/secure_closet/secure_closet/xenoarchaeologist_torch, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light/small{ dir = 4; pixel_y = 8 @@ -24602,30 +24546,27 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -32 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/rnd/research) "pub" = ( /obj/machinery/lapvend, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/rnd/research) "pud" = ( -/obj/machinery/mech_recharger, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 21 - }, -/turf/simulated/floor/tiled/dark/monotile, +/obj/structure/table/steel, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, /area/security/armoury) "puw" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/fuel, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/firstdeck/aft) @@ -24684,15 +24625,14 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftport) "pxv" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet/crate/medical, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/fire{ - pixel_x = -4; - pixel_y = -4 - }, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/storage) +/obj/structure/table/rack, +/obj/item/storage/box/ammo/smg/rubber, +/obj/item/storage/box/ammo/smg/rubber, +/obj/item/storage/box/ammo/smg/rubber, +/obj/item/storage/box/ammo/smg/rubber, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/security/armoury) "pyb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -24742,7 +24682,7 @@ /turf/simulated/floor/tiled, /area/security/detectives_office) "pzZ" = ( -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /obj/structure/disposalpipe/segment, /obj/machinery/door/blast/shutters{ density = 0; @@ -24772,7 +24712,7 @@ /area/thruster/d1port) "pBb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille{ +/obj/wallframe_spawn/reinforced/polarized/no_grille{ id = "misc_lab" }, /turf/simulated/floor/plating, @@ -24804,7 +24744,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/misc_lab) "pDb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -24819,7 +24759,7 @@ /turf/simulated/floor/tiled/dark, /area/rnd/misc_lab) "pEr" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -24860,7 +24800,7 @@ icon_state = "0-8" }, /obj/machinery/chemical_dispenser/full, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/rnd/misc_lab) "pHb" = ( @@ -24872,7 +24812,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 6 }, /turf/simulated/floor/tiled/white, @@ -24896,7 +24836,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 9 }, /turf/simulated/floor/tiled/white, @@ -24904,10 +24844,10 @@ "pIk" = ( /obj/structure/table/standard, /obj/item/storage/firstaid/adv, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 9 }, /turf/simulated/floor/tiled/white, @@ -24919,7 +24859,7 @@ /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/blue, /obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d1port) @@ -24943,12 +24883,12 @@ /area/rnd/xenobiology/xenoflora) "pKb" = ( /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/white, /area/rnd/misc_lab) "pLb" = ( /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/light_switch{ pixel_x = -10; pixel_y = 28 @@ -24960,27 +24900,19 @@ /area/rnd/xenobiology/xenoflora) "pMb" = ( /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/item/device/radio/intercom{ pixel_y = 23 }, /turf/simulated/floor/tiled/white/monotile, /area/rnd/xenobiology/xenoflora) -"pNb" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/camera/network/research{ - c_tag = "Research - Miscellaneous Laboratory" - }, -/turf/simulated/floor/tiled/white, -/area/rnd/misc_lab) "pOb" = ( /obj/machinery/seed_extractor, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "pOL" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -25008,7 +24940,7 @@ /area/rnd/misc_lab) "pQb" = ( /obj/machinery/botany/editor, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "pQO" = ( @@ -25020,20 +24952,20 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/tiled/monotile, /area/security/wing) "pRb" = ( /obj/machinery/botany/extractor, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "pRm" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/visible/blue, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d1starboard) @@ -25050,11 +24982,11 @@ /area/rnd/misc_lab) "pUb" = ( /obj/structure/closet/toolcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftport) "pUr" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /obj/machinery/alarm{ @@ -25069,7 +25001,7 @@ /area/security/processing) "pVv" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk, /obj/machinery/light{ dir = 1; @@ -25088,8 +25020,8 @@ }, /obj/item/storage/firstaid/fire, /obj/random/medical/lite, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -25112,7 +25044,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/forestarboard) "pYb" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "pZb" = ( @@ -25126,15 +25058,15 @@ /obj/machinery/light{ dir = 4 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 6 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/white, /area/rnd/research) "pZj" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ dir = 1 }, /obj/structure/cable/green{ @@ -25189,7 +25121,7 @@ /turf/simulated/floor/reinforced, /area/rnd/xenobiology/xenoflora) "qbH" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack{ dir = 4 }, @@ -25202,7 +25134,7 @@ /obj/item/stack/material/glass/reinforced{ amount = 30 }, -/obj/item/stack/material/glass/phoronrglass{ +/obj/item/stack/material/glass/boron_reinforced{ amount = 5 }, /obj/structure/window/reinforced{ @@ -25227,6 +25159,11 @@ }, /turf/simulated/floor/reinforced, /area/rnd/xenobiology/xenoflora) +"qcl" = ( +/obj/random_multi/single_item/skelestand, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftstarboard) "qdb" = ( /turf/simulated/floor/reinforced, /area/rnd/xenobiology/xenoflora) @@ -25249,16 +25186,16 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 9 }, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "qfa" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -25296,11 +25233,11 @@ /area/command/conference) "qhb" = ( /obj/machinery/atmospherics/binary/pump, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/white/monotile, /area/rnd/xenobiology/xenoflora) "qib" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/structure/hygiene/sink{ dir = 4; pixel_x = 11; @@ -25309,13 +25246,13 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "qig" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/dark/monotile, /area/security/bo) "qiL" = ( -/obj/effect/floor_decal/corner/blue/half{ +/obj/floor_decal/corner/blue/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -25329,8 +25266,8 @@ /turf/simulated/floor/tiled/white, /area/rnd/misc_lab) "qju" = ( -/obj/effect/floor_decal/floordetail/edgedrain, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/floordetail/edgedrain, +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/light, @@ -25384,14 +25321,14 @@ /turf/simulated/floor/tiled/white, /area/rnd/misc_lab) "qnz" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/no_grille/regular{ +/obj/wallframe_spawn/reinforced/polarized/no_grille/regular{ id = "or2" }, /turf/simulated/floor/plating, /area/medical/surgery2) "qnA" = ( -/obj/effect/floor_decal/floordetail/edgedrain, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/floordetail/edgedrain, +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/light, @@ -25405,19 +25342,19 @@ /turf/simulated/floor/tiled/white, /area/medical/surgery) "qqb" = ( -/obj/effect/wallframe_spawn/reinforced/polarized/full{ +/obj/wallframe_spawn/reinforced/polarized/full{ id = "sci_office" }, /turf/simulated/floor/plating, /area/rnd/office) "qrb" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 8 }, /turf/simulated/floor/tiled/white, /area/rnd/research) "qrq" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/hologram/holopad, @@ -25427,14 +25364,14 @@ /obj/structure/table/standard, /obj/item/paper_bin, /obj/item/pen/blue, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /obj/machinery/light{ dir = 1 }, /turf/simulated/floor/tiled/white/monotile, /area/rnd/office) "qtb" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/reinforced, /area/rnd/xenobiology/xenoflora) "qtQ" = ( @@ -25451,14 +25388,14 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) "qwk" = ( -/obj/effect/floor_decal/corner/blue/half{ +/obj/floor_decal/corner/blue/half{ dir = 8 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/fore) "qxb" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "qxQ" = ( @@ -25466,7 +25403,7 @@ id_tag = "permflash"; name = "Floor mounted flash" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -25503,7 +25440,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 6 }, /obj/structure/disposalpipe/segment, @@ -25514,16 +25451,23 @@ /turf/simulated/floor/tiled/white, /area/rnd/research) "qyX" = ( -/obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/clothing/accessory/leg_guards/ablative, -/obj/item/clothing/accessory/leg_guards/ablative, -/turf/simulated/floor/tiled/dark/monotile, +/obj/machinery/door/airlock/highsecurity{ + name = "Security Armory" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_ridged, /area/security/armoury) "qzb" = ( /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/reinforced, /area/rnd/xenobiology/xenoflora) "qAb" = ( @@ -25566,7 +25510,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) "qDb" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/vending/generic{ dir = 8 }, @@ -25576,12 +25520,8 @@ /obj/structure/bed/chair{ dir = 4 }, -/obj/machinery/camera/network/first_deck{ - c_tag = "First Deck - Safe Room Entrance"; - dir = 4 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/techfloor, +/obj/floor_decal/corner_techfloor_grid{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ @@ -25596,7 +25536,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/firstdeck) "qDM" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold4w/visible/fuel, @@ -25632,7 +25572,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 9 }, /turf/simulated/floor/tiled/white, @@ -25657,16 +25597,16 @@ dir = 4; pixel_x = -22 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 9 }, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "qGx" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/structure/cable/green{ @@ -25685,7 +25625,7 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "qGE" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -25723,14 +25663,14 @@ /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/meter, /turf/simulated/floor/tiled/white/monotile, /area/rnd/xenobiology/xenoflora) "qKx" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -25751,13 +25691,7 @@ /area/hallway/primary/firstdeck/fore) "qKQ" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, +/obj/floor_decal/industrial/outline/grey, /obj/item/storage/box/teargas{ pixel_x = 3; pixel_y = 2 @@ -25773,11 +25707,11 @@ name = "isolation tray" }, /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/freezer, /area/rnd/xenobiology/xenoflora) "qLr" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/structure/table/standard, /obj/item/reagent_containers/food/snacks/lunacake/mooncake, /obj/machinery/alarm{ @@ -25792,7 +25726,7 @@ name = "isolation tray" }, /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/light/spot{ dir = 4 }, @@ -25826,7 +25760,7 @@ /obj/structure/bed/chair/comfy/lime{ dir = 1 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -25835,12 +25769,12 @@ /obj/machinery/atmospherics/valve{ dir = 8 }, -/obj/effect/floor_decal/corner/research/half, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/corner/research/half, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/white/monotile, /area/rnd/misc_lab) "qRE" = ( -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /obj/structure/hygiene/sink{ dir = 8; pixel_x = -12; @@ -25862,8 +25796,8 @@ /obj/machinery/atmospherics/binary/pump{ dir = 1 }, -/obj/effect/floor_decal/corner/research/half, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/corner/research/half, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/white/monotile, /area/rnd/misc_lab) "qSx" = ( @@ -25871,8 +25805,8 @@ /obj/item/clothing/suit/storage/toggle/labcoat, /obj/item/storage/box/evidence, /obj/item/storage/box/syringes, -/obj/item/storage/box/gloves, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/item/storage/box/latexgloves, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/window/reinforced{ dir = 8 }, @@ -25882,11 +25816,11 @@ /obj/structure/closet{ name = "Evidence Closet" }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark, /area/security/evidence) "qTX" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/crate, /obj/item/stack/material/phoron{ amount = 25 @@ -25914,7 +25848,7 @@ dir = 1 }, /obj/machinery/meter, -/obj/effect/floor_decal/corner/research/half, +/obj/floor_decal/corner/research/half, /turf/simulated/floor/tiled/white/monotile, /area/rnd/misc_lab) "qUl" = ( @@ -25928,7 +25862,7 @@ /area/security/detectives_office) "qVb" = ( /obj/random/junk, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "qWb" = ( @@ -25937,7 +25871,7 @@ /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, -/obj/effect/floor_decal/corner/research/half, +/obj/floor_decal/corner/research/half, /obj/machinery/light/spot{ dir = 4 }, @@ -25947,15 +25881,18 @@ /turf/simulated/wall/prepainted, /area/security/detectives_office) "qWF" = ( -/obj/structure/table/rack, -/obj/item/shield/riot, -/obj/item/shield/riot, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" }, -/turf/simulated/floor/tiled/dark/monotile, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, /area/security/armoury) "qYb" = ( /obj/structure/cable/green{ @@ -25966,7 +25903,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 6 }, /obj/structure/disposalpipe/segment, @@ -25984,7 +25921,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/research) "qYy" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -25996,12 +25933,8 @@ /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 8 }, -/obj/machinery/camera/network/research{ - c_tag = "Research - Xenobotany Environment"; - dir = 4 - }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -26022,8 +25955,8 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -26033,7 +25966,7 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -26044,22 +25977,36 @@ tag_north = 2; tag_south = 1 }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, /turf/simulated/floor/tiled/white/monotile, /area/rnd/xenobiology/xenoflora) -"rcb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ +"rby" = ( +/obj/structure/table/rack, +/obj/item/gun/projectile/shotgun/pump/empty, +/obj/item/gun/projectile/shotgun/pump/empty, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/rotating_alarm/security_alarm{ + dir = 8 + }, +/obj/machinery/light{ dir = 4 }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/warning{ +/obj/machinery/mech_recharger, +/turf/simulated/floor/tiled/dark, +/area/security/armoury) +"rcb" = ( +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 1 + }, /turf/simulated/floor/tiled/white/monotile, /area/rnd/xenobiology/xenoflora) "rcx" = ( @@ -26069,14 +26016,11 @@ /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 4 }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor/plating, /area/rnd/xenobiology/xenoflora) "reb" = ( /obj/machinery/biogenerator, -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -26087,7 +26031,10 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 9 }, /turf/simulated/floor/tiled/white, @@ -26103,12 +26050,12 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "rhb" = ( /obj/machinery/atmospherics/pipe/simple/visible, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/white/monotile, @@ -26125,7 +26072,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "bo_windows" }, /obj/machinery/door/blast/regular{ @@ -26167,7 +26114,7 @@ "rkb" = ( /obj/machinery/atmospherics/valve, /obj/machinery/camera/network/research{ - c_tag = "Research - Xenobotany Laboratory"; + c_tag = "Research - Xenobotany"; dir = 8 }, /turf/simulated/floor/tiled/freezer, @@ -26177,31 +26124,31 @@ dir = 1; icon_state = "freezer" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white/monotile, /area/rnd/misc_lab) "rmb" = ( /obj/machinery/atmospherics/unary/heater{ dir = 1 }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white/monotile, /area/rnd/misc_lab) "rnb" = ( /obj/machinery/portable_atmospherics/canister, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white/monotile, /area/rnd/misc_lab) "rnp" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/table/rack, /obj/item/device/radio, /obj/item/device/radio, @@ -26218,23 +26165,23 @@ /obj/structure/reagent_dispensers/peppertank{ pixel_x = -30 }, -/obj/effect/floor_decal/corner/red/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/red/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/security/locker) "rob" = ( /obj/structure/extinguisher_cabinet{ pixel_y = -32 }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /turf/simulated/floor/tiled/white/monotile, /area/rnd/misc_lab) "rpb" = ( /obj/structure/table/standard, /obj/item/storage/toolbox/mechanical, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /turf/simulated/floor/tiled/white/monotile, /area/rnd/misc_lab) "rpn" = ( @@ -26246,10 +26193,10 @@ /obj/machinery/vending/wallmed1{ pixel_y = 32 }, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 8 }, /obj/item/reagent_containers/dropper/peridaxon, @@ -26262,7 +26209,7 @@ /turf/simulated/floor/tiled/monotile, /area/security/detectives_office) "rrI" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -26277,7 +26224,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/office) "rsb" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, @@ -26289,11 +26236,11 @@ "rsl" = ( /obj/structure/disposalpipe/segment, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/security/detectives_office) "rsu" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 8 }, /obj/machinery/door/firedoor, @@ -26314,7 +26261,7 @@ /obj/structure/closet/hydrant{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /turf/simulated/floor/tiled, @@ -26328,8 +26275,8 @@ /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 8 }, -/obj/effect/floor_decal/corner/research/half, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/corner/research/half, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/white/monotile, /area/rnd/misc_lab) "rub" = ( @@ -26353,8 +26300,8 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/obj/effect/floor_decal/corner/research/half, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/corner/research/half, +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -26375,12 +26322,12 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/firstdeck/aft) "ruS" = ( -/obj/effect/floor_decal/corner/green/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/green/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/emcloset, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/center) @@ -26388,18 +26335,18 @@ /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 4 }, -/obj/effect/floor_decal/corner/research/half, +/obj/floor_decal/corner/research/half, /turf/simulated/floor/tiled/white/monotile, /area/rnd/misc_lab) "rvY" = ( -/obj/effect/floor_decal/corner/research, +/obj/floor_decal/corner/research, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "rwb" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/white/monotile, @@ -26416,7 +26363,7 @@ /area/rnd/misc_lab) "rxK" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light/small{ dir = 1 }, @@ -26426,10 +26373,10 @@ /turf/simulated/floor/reinforced, /area/rnd/misc_lab) "ryt" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/item/device/radio/intercom{ @@ -26445,7 +26392,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 6 }, /obj/structure/disposalpipe/segment, @@ -26477,7 +26424,7 @@ /obj/machinery/atmospherics/binary/pump{ dir = 1 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /obj/machinery/firealarm{ @@ -26490,7 +26437,7 @@ /obj/machinery/atmospherics/binary/pump{ dir = 1 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -26504,13 +26451,15 @@ pressure_checks_default = 2; use_power = 1 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/thruster/d1starboard) "rDb" = ( /obj/machinery/atmospherics/portables_connector{ dir = 1 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -26534,7 +26483,6 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/foreport) "rEb" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red, /obj/machinery/honey_extractor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -26544,7 +26492,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 9 }, /turf/simulated/floor/tiled/white, @@ -26568,13 +26516,12 @@ /area/thruster/d1starboard) "rEK" = ( /obj/structure/table/rack, -/obj/item/gun/energy/ionrifle, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/monotile, +/obj/item/storage/box/ammo/smg, +/obj/item/storage/box/ammo/smg, +/obj/item/storage/box/ammo/smg, +/obj/item/storage/box/ammo/smg, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, /area/security/armoury) "rFb" = ( /obj/machinery/atmospherics/pipe/simple/visible/blue{ @@ -26583,10 +26530,10 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "rFK" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "rGb" = ( @@ -26596,7 +26543,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "rGw" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -26623,7 +26570,7 @@ "rHb" = ( /obj/machinery/atmospherics/pipe/manifold4w/visible, /obj/structure/table/standard, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/white/monotile, @@ -26631,7 +26578,7 @@ "rIb" = ( /obj/machinery/portable_atmospherics/hydroponics, /obj/machinery/atmospherics/pipe/manifold/visible, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/freezer, /area/rnd/xenobiology/xenoflora) "rJb" = ( @@ -26639,11 +26586,11 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/freezer, /area/rnd/xenobiology/xenoflora) "rKb" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/door/blast/regular{ density = 0; @@ -26656,7 +26603,7 @@ /turf/simulated/floor/reinforced, /area/rnd/misc_lab) "rKo" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -26670,20 +26617,18 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralport) "rKP" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/sign/warning/secure_area/armory{ + dir = 1; + pixel_y = -32 }, -/obj/structure/table/steel, -/obj/machinery/cell_charger, -/obj/item/screwdriver, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, -/area/security/armoury) +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "rLb" = ( /obj/machinery/atmospherics/pipe/simple/visible, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -26704,7 +26649,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 6 }, /obj/structure/disposalpipe/segment, @@ -26733,14 +26678,14 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "rOE" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/tiled, /area/security/wing) "rPb" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/item/device/radio/intercom{ dir = 4; pixel_x = -21 @@ -26758,14 +26703,14 @@ pixel_y = 16 }, /obj/item/roller_bed, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/structure/table/reinforced, /turf/simulated/floor/tiled/white/monotile, /area/medical/staging) "rQb" = ( /obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/catwalk_plated/white, +/obj/floor_decal/industrial/hatch/yellow, +/obj/catwalk_plated/white, /turf/simulated/floor/tiled/white, /area/rnd/research) "rRb" = ( @@ -26773,7 +26718,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "rSb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "rTb" = ( @@ -26787,10 +26732,9 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "rUb" = ( @@ -26837,7 +26781,7 @@ dir = 8 }, /obj/structure/table/standard, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/white/monotile, @@ -26847,7 +26791,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/freezer, /area/rnd/xenobiology/xenoflora) "rXJ" = ( @@ -26869,7 +26813,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/freezer, /area/rnd/xenobiology/xenoflora) "rYd" = ( @@ -26877,7 +26821,7 @@ /area/thruster/d1port) "rYN" = ( /obj/machinery/papershredder, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /obj/machinery/light, /turf/simulated/floor/tiled/white/monotile, /area/rnd/office) @@ -26907,8 +26851,8 @@ /turf/simulated/wall/prepainted, /area/hallway/primary/firstdeck/fore) "sab" = ( -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/vending/hydronutrients{ dir = 1; vendor_flags = 3 @@ -26918,7 +26862,7 @@ "sag" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/alarm{ @@ -26928,7 +26872,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "saS" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/l3closet/security, /turf/simulated/floor/tiled/monotile, /area/security/locker) @@ -26942,7 +26886,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 6 }, /obj/structure/cable/green{ @@ -26985,7 +26929,7 @@ /obj/structure/closet/crate/freezer, /obj/random/medical, /obj/random/medical, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/random/medical, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) @@ -27084,17 +27028,17 @@ /area/rnd/xenobiology/entry) "shb" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftport) "shq" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "shQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -27115,10 +27059,10 @@ /turf/simulated/wall/r_wall/hull, /area/security/locker) "siI" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/structure/table/standard, @@ -27152,15 +27096,15 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "slb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -27170,7 +27114,8 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/visible{ +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/tiled/white, @@ -27212,7 +27157,6 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/forestarboard) "snb" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, @@ -27228,9 +27172,12 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 9 }, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "sne" = ( @@ -27250,7 +27197,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/center) "snG" = ( @@ -27280,14 +27227,14 @@ /obj/machinery/air_sensor{ id_tag = "testchamber_sensor" }, -/obj/effect/landmark{ +/obj/landmark{ name = "bluespacerift" }, /turf/simulated/floor/reinforced, /area/rnd/misc_lab) "srb" = ( /obj/machinery/camera/network/research{ - c_tag = "Research - Miscellaneous Test Chamber"; + c_tag = "Research - Misc. Test Chamber"; dir = 8; network = list("Research","Miscellaneous Reseach") }, @@ -27305,7 +27252,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /obj/machinery/newscaster{ @@ -27321,16 +27268,16 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 4 }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 4 }, /turf/simulated/floor/tiled/white, /area/rnd/research) "ssg" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/disposalpipe/segment, @@ -27343,8 +27290,8 @@ /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "stb" = ( -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/extinguisher_cabinet{ pixel_x = -32 }, @@ -27354,13 +27301,16 @@ /turf/simulated/floor/tiled/white/monotile, /area/rnd/xenobiology/xenoflora) "sub" = ( -/obj/structure/closet/secure_closet/hydroponics_torch, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/hydroponics_torch, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, /turf/simulated/floor/tiled/white/monotile, /area/rnd/xenobiology/xenoflora) "suM" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -27376,15 +27326,15 @@ dir = 1 }, /obj/machinery/disposal, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/white/monotile, /area/rnd/xenobiology/xenoflora) "svH" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -27405,10 +27355,10 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftstarboard) "swz" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 4 }, /obj/machinery/alarm{ @@ -27425,8 +27375,8 @@ /obj/machinery/atmospherics/unary/heater{ dir = 1 }, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "sxG" = ( @@ -27468,8 +27418,8 @@ icon_state = "freezer" }, /obj/machinery/light, -/obj/effect/floor_decal/corner/research/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/rnd/xenobiology/xenoflora) "syI" = ( @@ -27494,8 +27444,8 @@ "szb" = ( /obj/structure/reagent_dispensers/watertank, /obj/item/reagent_containers/glass/bucket, -/obj/effect/floor_decal/corner/research/half, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/corner/research/half, +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/white/monotile, @@ -27508,7 +27458,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 1 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/freezer, /area/rnd/xenobiology/xenoflora) "sBb" = ( @@ -27519,21 +27469,16 @@ /obj/machinery/atmospherics/portables_connector{ dir = 1 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/light/spot, /turf/simulated/floor/tiled/freezer, /area/rnd/xenobiology/xenoflora) "sBg" = ( /obj/structure/table/rack, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/gun/launcher/grenade, -/obj/item/storage/box/teargas, -/obj/item/storage/box/flashbangs, -/turf/simulated/floor/tiled/dark/monotile, +/obj/item/storage/box/ammo/beanbags, +/obj/item/storage/box/ammo/beanbags, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, /area/security/armoury) "sCb" = ( /obj/machinery/airlock_sensor{ @@ -27554,7 +27499,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -27572,14 +27517,14 @@ dir = 4; id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/reinforced/oxygen, /area/thruster/d1starboard) "sCM" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/tiled, @@ -27620,8 +27565,8 @@ /area/medical/staging) "sHb" = ( /obj/structure/closet/secure_closet/medical_torchsenior, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/power/apc{ dir = 8; name = "west bump"; @@ -27637,8 +27582,11 @@ /turf/simulated/floor/tiled/white/monotile, /area/medical/locker) "sHN" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/security/armoury) +/obj/machinery/rotating_alarm/security_alarm{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/security/storage) "sJr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -27658,7 +27606,7 @@ /area/maintenance/firstdeck/aftport) "sLb" = ( /obj/machinery/atmospherics/unary/cryo_cell, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /turf/simulated/floor/tiled/white/monotile, /area/medical/sleeper) "sLx" = ( @@ -27669,7 +27617,7 @@ /turf/simulated/floor/reinforced, /area/rnd/xenobiology/cell_3) "sMf" = ( -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1; level = 2 @@ -27696,7 +27644,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/locker) "sNn" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /obj/machinery/light{ @@ -27796,7 +27744,7 @@ /area/rnd/xenobiology) "sSb" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -27853,7 +27801,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology) "sVL" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 10 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -27873,11 +27821,11 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology) "sWP" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/structure/bed/chair/wheelchair, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/shipping_wall/filled{ pixel_y = 32 }, @@ -27911,7 +27859,7 @@ dir = 8 }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 8 }, /turf/simulated/floor/tiled, @@ -27924,7 +27872,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/red{ dir = 1 }, -/obj/effect/landmark{ +/obj/landmark{ name = "xeno_spawn"; pixel_x = -1 }, @@ -27972,7 +27920,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology) "tcb" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "lightsout" }, /obj/machinery/atmospherics/pipe/manifold/visible/blue{ @@ -27985,7 +27933,7 @@ /area/rnd/xenobiology) "tcA" = ( /obj/machinery/sleeper, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -28038,7 +27986,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology) "tgg" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 6 }, /obj/item/modular_computer/telescreen/preset/medical{ @@ -28079,13 +28027,14 @@ /turf/simulated/open, /area/maintenance/firstdeck/aftport) "tgT" = ( -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/corner/red{ + dir = 6 }, -/obj/structure/cable/green, /turf/simulated/floor/tiled/dark, -/area/security/armoury) +/area/security/secure_storage) "thb" = ( /obj/machinery/atmospherics/binary/pump, /obj/structure/cable/green{ @@ -28140,14 +28089,14 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology) "tiz" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/aft) "tiQ" = ( /turf/simulated/wall/prepainted, -/area/security/armoury) +/area/security/secure_storage) "tkb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -28200,7 +28149,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/rnd/xenobiology/cell_3) "tmc" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -28239,7 +28188,7 @@ /turf/simulated/wall/r_wall/hull, /area/rnd/xenobiology/cell_4) "tpb" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/window/southleft{ name = "Containment Pen" }, @@ -28259,7 +28208,7 @@ /turf/simulated/floor/reinforced, /area/rnd/xenobiology/cell_2) "tqb" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/window/southright{ name = "Containment Pen" }, @@ -28292,7 +28241,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/blue{ dir = 6 }, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d1starboard) @@ -28334,7 +28283,7 @@ /turf/simulated/floor/reinforced, /area/rnd/xenobiology/cell_2) "tvV" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralport) @@ -28385,14 +28334,14 @@ "tzg" = ( /obj/random/torchcloset, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/centralport) "tzv" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/cyan, @@ -28412,17 +28361,17 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/fuel, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftport) "tCw" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 4 }, /obj/machinery/firealarm{ @@ -28439,10 +28388,10 @@ /turf/simulated/floor/tiled/white, /area/medical/surgery2) "tCO" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/item/auto_cpr, @@ -28455,10 +28404,10 @@ pixel_x = 7; pixel_y = 1 }, -/obj/structure/sign/noidle{ - pixel_y = 32 - }, /obj/structure/table/standard, +/obj/machinery/body_scan_display{ + pixel_y = 24 + }, /turf/simulated/floor/tiled/white, /area/medical/sleeper) "tEs" = ( @@ -28473,7 +28422,7 @@ /obj/item/folder/white, /obj/item/folder/nt, /obj/item/folder/nt, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /obj/machinery/light_switch{ pixel_x = 22; pixel_y = 6 @@ -28510,7 +28459,7 @@ /turf/simulated/floor/reinforced/hydrogen, /area/thruster/d1port) "tJM" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 8; @@ -28537,14 +28486,14 @@ /area/security/detectives_office) "tKE" = ( /obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/foreport) "tLL" = ( /obj/item/storage/briefcase, /obj/structure/table/rack, /obj/item/device/paicard, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /obj/machinery/alarm{ dir = 1; pixel_y = -22 @@ -28596,7 +28545,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/maintenance/firstdeck/aftstarboard) "tVE" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/cable/green{ @@ -28634,7 +28583,7 @@ /turf/simulated/floor/tiled, /area/security/wing) "tWZ" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/alarm{ @@ -28646,37 +28595,38 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/atmospherics/binary/pump/on{ dir = 1; target_pressure = 15000 }, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1port) "tZR" = ( /obj/structure/table/rack{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/item/airlock_brace, -/obj/item/airlock_brace, -/obj/item/airlock_brace, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/floor_decal/industrial/outline/grey, +/obj/item/clothing/accessory/arm_guards/navy, +/obj/item/clothing/accessory/arm_guards/navy, +/obj/item/clothing/accessory/leg_guards/navy, +/obj/item/clothing/accessory/leg_guards/navy, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" }, /obj/structure/cable/green{ d1 = 1; d2 = 4; icon_state = "1-4" }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, /turf/simulated/floor/tiled/dark/monotile, /area/security/storage) @@ -28684,7 +28634,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "udY" = ( @@ -28720,7 +28670,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -28742,37 +28692,42 @@ }, /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftport) +"uie" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/item/storage/box/ammo/stunshells, +/obj/item/storage/box/ammo/stunshells, +/obj/machinery/camera/network/security{ + c_tag = "Security - Brig Secure Armory" + }, +/turf/simulated/floor/tiled/dark, +/area/security/armoury) "uiY" = ( /turf/simulated/wall/prepainted, /area/medical/equipstorage) "ujx" = ( -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/flasher/portable, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/security/storage) "umz" = ( -/obj/structure/table/rack, -/obj/item/gun/energy/ionrifle, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 }, -/turf/simulated/floor/tiled/dark/monotile, +/turf/simulated/floor/tiled/dark, /area/security/armoury) "umI" = ( /obj/item/device/radio/intercom{ pixel_y = 23 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) "umT" = ( -/obj/effect/floor_decal/spline/plain/blue{ +/obj/floor_decal/spline/plain/blue{ dir = 4 }, /obj/structure/roller_bed, @@ -28795,11 +28750,18 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftstarboard) "ure" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/center) +"usN" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/security/storage) "usV" = ( /obj/structure/railing/mapped{ dir = 8; @@ -28811,16 +28773,16 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftstarboard) "uuS" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled/white, /area/medical/exam_room) "uvj" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -28843,21 +28805,21 @@ /turf/simulated/floor/tiled/dark, /area/command/conference) "uCe" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "uCA" = ( /obj/machinery/papershredder, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/security/detectives_office) "uDu" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "interviewwindow" }, /obj/structure/cable/green{ @@ -28914,7 +28876,7 @@ /turf/simulated/open, /area/maintenance/firstdeck/aftport) "uJd" = ( -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 8 }, /turf/simulated/floor/tiled, @@ -28976,7 +28938,7 @@ /turf/simulated/floor/tiled, /area/security/wing) "uLQ" = ( -/obj/effect/floor_decal/corner/blue, +/obj/floor_decal/corner/blue, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -29001,7 +28963,7 @@ /area/command/armoury) "uMP" = ( /obj/structure/closet/bombclosetsecurity, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/recharger/wallcharger{ dir = 1; pixel_y = -22 @@ -29010,9 +28972,26 @@ /area/command/armoury/tactical) "uPc" = ( /obj/machinery/light, -/obj/effect/floor_decal/corner/red/half, +/obj/floor_decal/corner/red/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/firstdeck/fore) +"uPo" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/security/storage) "uRO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -29035,39 +29014,22 @@ id_tag = "permflash"; name = "Floor mounted flash" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/security/brig) "uUK" = ( -/obj/structure/table/rack{ - dir = 8 - }, -/obj/item/device/scanner/spectrometer, -/obj/item/storage/box/freezer, -/obj/item/storage/box/beakers/insulated, -/obj/item/reagent_containers/dropper, -/obj/item/storage/box/beakers, -/obj/item/hand_labeler, -/obj/item/stack/package_wrap/twenty_five, -/obj/item/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; - name = "Chemistry Cleaner" - }, -/obj/effect/floor_decal/corner/beige/mono, -/obj/item/device/radio/intercom/department/medbay{ - dir = 8; - pixel_x = 24 - }, -/obj/item/storage/box/autoinjectors, -/turf/simulated/floor/tiled/white/monotile, -/area/medical/chemistry) +/obj/structure/table/rack, +/obj/random/firstaid, +/obj/item/storage/box/bodybags, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/firstdeck/aftstarboard) "uVf" = ( /obj/machinery/atmospherics/valve/digital{ dir = 4; id_tag = "fuelmode" }, -/obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "uVg" = ( @@ -29094,7 +29056,7 @@ /obj/structure/closet/firecloset, /obj/item/storage/briefcase/inflatable, /obj/item/wrench, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/maintenance/firstdeck/centralstarboard) "uWu" = ( @@ -29110,7 +29072,7 @@ id_tag = "teleport1"; name = "First Deck Teleporter Access Shutters" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/teleporter/firstdeck) "uXJ" = ( @@ -29147,7 +29109,7 @@ /turf/simulated/floor/tiled/white, /area/security/detectives_office) "uZi" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 8 }, /turf/simulated/floor/tiled, @@ -29166,27 +29128,27 @@ pixel_y = -32 }, /obj/machinery/light, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/tiled, /area/security/detectives_office) "vci" = ( -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/techfloor, /area/thruster/d1starboard) "vcy" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/powered/scrubber, /obj/machinery/light, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "veT" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/machinery/recharger/wallcharger{ @@ -29211,7 +29173,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology) "vhs" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad, /obj/structure/noticeboard{ pixel_y = 32 @@ -29220,49 +29182,49 @@ /area/command/conference) "vii" = ( /obj/structure/closet/secure_closet/medical_torch, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white/monotile, /area/medical/locker) "vjY" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/gun/energy/gun/secure, -/obj/item/gun/energy/gun/secure, -/obj/item/gun/energy/gun/secure, +/obj/floor_decal/industrial/outline/grey, +/obj/item/storage/box/ammo/doublestack, +/obj/item/storage/box/ammo/doublestack, +/obj/item/gun/projectile/pistol/m22f/empty, +/obj/item/gun/projectile/pistol/m22f/empty, +/obj/item/gun/projectile/pistol/m22f/empty, +/obj/item/gun/projectile/pistol/m22f/empty, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury/tactical) "vkW" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 10 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 8 }, -/obj/effect/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "vlw" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "vnz" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light, /obj/machinery/flasher/portable, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "vnC" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/machinery/power/apc{ dir = 1; name = "north bump"; @@ -29320,7 +29282,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenobiology) "vzp" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/sortjunction/flipped{ dir = 1; name = "Brig Storage"; @@ -29375,22 +29337,19 @@ /turf/simulated/floor/tiled/white, /area/security/detectives_office) "vEa" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled/white, /area/medical/equipstorage) "vFa" = ( -/obj/structure/table/rack, -/obj/item/shield/riot, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 }, -/obj/item/shield/riot, -/turf/simulated/floor/tiled/dark/monotile, +/obj/floor_decal/corner/red{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, /area/security/armoury) "vFj" = ( /obj/structure/table/glass, @@ -29415,13 +29374,13 @@ /area/thruster/d1port) "vHB" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/aft) "vIn" = ( -/obj/effect/floor_decal/industrial/hatch/blue, +/obj/floor_decal/industrial/hatch/blue, /obj/structure/disposalpipe/segment, /obj/machinery/door/blast/shutters{ density = 0; @@ -29442,23 +29401,42 @@ /area/medical/medicalhallway) "vIP" = ( /obj/structure/filingcabinet/chestdrawer, -/obj/machinery/camera/network/security{ - c_tag = "Security Wing - Investigations"; - dir = 4 - }, /turf/simulated/floor/tiled, /area/security/detectives_office) "vJO" = ( /obj/structure/bed/chair/padded/red, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 5 }, /turf/simulated/floor/tiled, /area/security/wing) +"vKA" = ( +/obj/item/device/radio/intercom/department/medbay{ + dir = 8; + pixel_x = 24 + }, +/obj/floor_decal/corner/beige/mono, +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/device/scanner/spectrometer, +/obj/item/storage/box/freezer, +/obj/item/storage/box/beakers/insulated, +/obj/item/reagent_containers/dropper, +/obj/item/storage/box/beakers, +/obj/item/hand_labeler, +/obj/item/stack/package_wrap/cargo_wrap, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner" + }, +/obj/item/storage/box/autoinjectors, +/turf/simulated/floor/tiled/white/monotile, +/area/medical/chemistry) "vMm" = ( /obj/structure/closet/crate, /obj/random/tank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/forestarboard) "vMw" = ( @@ -29467,8 +29445,19 @@ "vMH" = ( /turf/simulated/wall/r_wall/prepainted, /area/security/locker) +"vPW" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/security/armoury) "vTH" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "forensicswindow" }, /obj/structure/cable/green{ @@ -29482,7 +29471,7 @@ /turf/simulated/floor/plating, /area/security/detectives_office) "vTY" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "processwindow" }, /obj/machinery/door/blast/regular{ @@ -29516,7 +29505,7 @@ /obj/item/grenade/chem_grenade/metalfoam, /obj/item/storage/briefcase/inflatable, /obj/item/storage/briefcase/inflatable, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/item/storage/box/lights/tubes, /obj/item/storage/box/lights/bulbs, /obj/item/device/flashlight/flare/glowstick/random, @@ -29534,14 +29523,10 @@ /turf/simulated/floor/reinforced/hydrogen, /area/thruster/d1starboard) "vZI" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Equipment Storage"; - dir = 4 - }, /obj/structure/closet/hydrant{ pixel_x = -32 }, @@ -29553,7 +29538,7 @@ /turf/simulated/floor/tiled/white, /area/medical/equipstorage) "vZK" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/light{ @@ -29564,17 +29549,31 @@ }, /turf/simulated/floor/tiled/white, /area/medical/locker) +"wbE" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/corner/red{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "wcQ" = ( /obj/machinery/pager/security{ pixel_x = -25 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 1 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "whd" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/bed/chair/padded/blue, @@ -29585,7 +29584,7 @@ id = "Cell 2"; name = "Cell Locker" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -29603,7 +29602,7 @@ /obj/structure/table/rack{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/item/storage/toolbox/mechanical, /obj/item/storage/toolbox/mechanical, /obj/structure/window/reinforced{ @@ -29619,7 +29618,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "wkS" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -29656,15 +29655,15 @@ /obj/item/storage/box/rxglasses, /obj/item/clothing/accessory/stethoscope, /obj/item/device/flashlight/pen, -/obj/effect/floor_decal/corner/paleblue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light{ dir = 1 }, /turf/simulated/floor/tiled/white/monotile, /area/medical/equipstorage) "wmK" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -29688,7 +29687,7 @@ /turf/simulated/floor/plating, /area/security/wing) "wol" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/rotating_alarm/security_alarm, @@ -29711,7 +29710,7 @@ pixel_y = 8 }, /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -29754,13 +29753,13 @@ /turf/simulated/floor/tiled, /area/security/wing) "wzN" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "wAK" = ( -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/unpowered/simple/plastic/open, /turf/simulated/floor/tiled/freezer, @@ -29775,7 +29774,7 @@ "wEb" = ( /obj/structure/bed/padded, /obj/item/bedsheet/orange, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -29794,12 +29793,12 @@ /turf/simulated/wall/r_wall/prepainted, /area/thruster/d1port) "wGe" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "wHE" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack, /obj/random/firstaid, /obj/item/storage/box/lights/mixed, @@ -29835,7 +29834,7 @@ /turf/simulated/floor/tiled/dark, /area/command/armoury/access) "wUg" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -29850,7 +29849,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/teleporter/firstdeck) "wWr" = ( -/obj/effect/floor_decal/corner/green/half{ +/obj/floor_decal/corner/green/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -29876,14 +29875,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/rotating_alarm/security_alarm{ dir = 8 }, /turf/simulated/floor/plating, /area/security/wing) "wXN" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -29951,11 +29950,11 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/center) "xoo" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -29974,14 +29973,11 @@ /turf/simulated/floor/plating, /area/security/brig) "xqk" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/suit_cycler, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/machinery/camera/network/command{ - c_tag = "Emergency Armory - Starboard" - }, +/obj/machinery/suit_cycler/torch, /turf/simulated/floor/tiled/techfloor/grid, /area/command/armoury) "xtq" = ( @@ -29998,10 +29994,10 @@ /turf/simulated/floor/tiled/dark, /area/medical/foyer/storeroom) "xvt" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 6 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 1 }, /obj/machinery/button/windowtint{ @@ -30014,10 +30010,6 @@ pixel_x = 6; pixel_y = -24 }, -/obj/machinery/camera/network/medbay{ - c_tag = "Infirmary - Operating Theatre 1"; - dir = 1 - }, /turf/simulated/floor/tiled/white, /area/medical/surgery) "xxl" = ( @@ -30031,7 +30023,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftport) "xxY" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -30047,26 +30039,18 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/office) -"xzj" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/camera/network/command{ - c_tag = "Emergency Armory - Port"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/command/armoury) "xzK" = ( /obj/structure/bed/chair/padded/red, /obj/machinery/camera/network/security{ - c_tag = "Security Wing - Lobby" + c_tag = "Security - Lobby" }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 5 }, /turf/simulated/floor/tiled, /area/security/wing) "xzN" = ( -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /obj/item/flame/candle/scented/incense{ desc = "An incense cone. It produces fragrant smoke when burned. This one is branded 'IQ-incense, for the smart and sensual.' " }, @@ -30086,7 +30070,7 @@ /turf/simulated/floor/plating, /area/maintenance/firstdeck/aftstarboard) "xCf" = ( -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -30103,7 +30087,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/office) "xCn" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -30131,13 +30115,28 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/fore) "xEq" = ( /obj/structure/sign/warning/pods/south, /turf/simulated/wall/r_wall/hull, /area/maintenance/firstdeck/centralstarboard) +"xFx" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -28 + }, +/obj/structure/cable/green, +/obj/structure/table/rack, +/obj/item/gun/launcher/grenade, +/obj/item/storage/box/teargas, +/obj/item/storage/box/teargas, +/obj/item/storage/box/flashbangs, +/obj/item/storage/box/flashbangs, +/turf/simulated/floor/tiled/dark, +/area/security/secure_storage) "xFL" = ( /turf/simulated/floor/tiled/steel_grid, /area/turbolift/robotics_lift) @@ -30147,27 +30146,27 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/blue, +/obj/floor_decal/corner/blue, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "xKq" = ( /obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "xKz" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass/civilian, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/firstdeck/center) "xKY" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/corner/yellow, +/obj/floor_decal/corner/yellow, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/assembly/robotics/office) @@ -30203,23 +30202,14 @@ /turf/simulated/wall/prepainted, /area/security/processing) "xRu" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/table/steel, -/obj/item/storage/box/trackimp, -/obj/item/storage/box/chemimp, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark/monotile, +/turf/simulated/wall/r_wall/prepainted, /area/security/armoury) "xSd" = ( /obj/machinery/atmospherics/pipe/simple/visible/blue{ dir = 5 }, /obj/machinery/meter, -/obj/effect/wallframe_spawn/reinforced_phoron, +/obj/wallframe_spawn/reinforced_phoron, /obj/machinery/door/firedoor, /turf/simulated/floor/reinforced, /area/thruster/d1port) @@ -30227,7 +30217,7 @@ /obj/structure/sign/emergonly{ pixel_y = 26 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -30248,18 +30238,18 @@ /obj/machinery/sleeper{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue/mono, +/obj/floor_decal/corner/paleblue/mono, /turf/simulated/floor/tiled/white/monotile, /area/medical/sleeper) "xTT" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/closet/emcloset, /obj/random/maintenance/solgov, /turf/simulated/floor/tiled/techfloor, /area/maintenance/firstdeck/aftstarboard) "xVt" = ( /obj/machinery/computer/modular/preset/civilian, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /turf/simulated/floor/tiled/white/monotile, /area/rnd/office) "xYM" = ( @@ -30283,11 +30273,11 @@ /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/fore) "ycp" = ( -/obj/effect/floor_decal/corner/research/half, +/obj/floor_decal/corner/research/half, /turf/simulated/floor/tiled/white/monotile, /area/rnd/misc_lab) "ycz" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -30300,6 +30290,16 @@ }, /turf/simulated/floor/tiled, /area/security/detectives_office) +"yfd" = ( +/obj/floor_decal/corner/beige{ + dir = 10 + }, +/obj/floor_decal/corner/beige{ + dir = 5 + }, +/obj/structure/bed/chair/comfy/blue, +/turf/simulated/floor/tiled/white, +/area/medical/chemistry) "yfH" = ( /obj/structure/fireaxecabinet{ pixel_y = -32 @@ -30308,10 +30308,10 @@ dir = 8; pixel_x = 24 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -30326,14 +30326,14 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plating, /area/hallway/primary/firstdeck/aft) "yii" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -37331,7 +37331,7 @@ tAS tAS tAS tAS -aaa +tAS aaa aaa aaa @@ -37534,7 +37534,7 @@ tAS tAS tAS tAS -aaa +tAS aaa aaa aaa @@ -37737,7 +37737,7 @@ tAS tAS tAS tAS -aaa +tAS aaa aaa aaa @@ -37928,15 +37928,16 @@ sik nli nli cZi -cZi +brN aLv -pxv tiQ +oXv aOE kSs -etI +xRu sBg -tAS +vPW +rEK tAS tAS aaa @@ -37958,7 +37959,6 @@ aaa aaa aaa aaa -aaa azV aaa aaa @@ -38131,14 +38131,15 @@ nli elT cZi cZi -aLv -iLA +ujx tiQ +ozG hLf aPu -aPu -aPu +xRu +uie umz +pxv tAS tAS aaa @@ -38221,7 +38222,6 @@ aaa aaa aaa aaa -aaa "} (40,1,1) = {" aaa @@ -38331,16 +38331,17 @@ vMH vMH xCS wvZ -huf -enM enM enM -csy -oLz -mKq -aQp +sHN +tiQ +aMC +eHp +xFx +xRu aKv -rEK +dPr +aWQ tAS tAS aaa @@ -38423,7 +38424,6 @@ aaa aaa aaa aaa -aaa "} (41,1,1) = {" aaa @@ -38536,13 +38536,14 @@ gGO daN aKw aLw -bii hzl -oXv +jft +wbE rKP xRu -tgT -tiQ +hWR +lcI +bii tAS tAS aaa @@ -38625,7 +38626,6 @@ aaa aaa aaa aaa -aaa "} (42,1,1) = {" aaa @@ -38737,14 +38737,15 @@ aMT kss tZR hUc -aLx +uPo kCN -tiQ +bGh aOF oXx qyX -aKv +aEw qWF +maU tAS tAS aaa @@ -38827,7 +38828,6 @@ aaa aaa aaa aaa -aaa "} (43,1,1) = {" aaa @@ -38936,17 +38936,18 @@ cor cor suM aMT -ujx +aLz uRO enM -aLy -aMC -tiQ -fOp -aPu -aPu -aPu +usN +hzl +iLA +tgT +dIw +xRu +eqZ vFa +etI tAS tAS aaa @@ -39029,7 +39030,6 @@ aaa aaa aaa aaa -aaa "} (44,1,1) = {" aaa @@ -39141,14 +39141,15 @@ aMT lRa cxk aKy -aLz -jft +huf tiQ +ePu aOG jhf -lcI +xRu pud -tAS +rby +buX tAS tAS aaa @@ -39231,7 +39232,6 @@ aaa aaa aaa aaa -aaa "} (45,1,1) = {" aaa @@ -39344,16 +39344,16 @@ mfg hbP aMT aMT -aMT -tiQ -tiQ -tiQ -sHN -sHN +aNH +aNH +aNH +aNH +aNH +aIr +tAS tAS tAS tAS -aaa aaa aaa aaa @@ -39518,7 +39518,7 @@ adK tWZ gvC ahE -ahG +ahE kzy adK qWE @@ -39555,7 +39555,7 @@ vrM tAS tAS tAS -aaa +tAS aaa aaa aaa @@ -39953,7 +39953,7 @@ bob jpt oby nkh -mCi +wEb aNH uKa tKE @@ -42955,7 +42955,7 @@ njj alZ kCl chO -iPj +iEb iEb kCl dzG @@ -44992,7 +44992,7 @@ adx aAm aaL abR -riD +gSl riD ado ltt @@ -47622,7 +47622,7 @@ aDY aDY aDY aHe -aDY +iUs aJP aDY aDY @@ -51841,8 +51841,8 @@ laQ uXe kaS acf -abm abs +yfd abB abQ acO @@ -52243,7 +52243,7 @@ adw sde uXe uXe -sde +dRC acf acf abu @@ -52261,7 +52261,7 @@ pzZ axw iTC rvY -fDm +aBP lkb nLb nLb @@ -52446,7 +52446,7 @@ uXe uXe uXe uXe -cqb +uUK acf abv abG @@ -52648,10 +52648,10 @@ sde sde sde dEb -dQb +qcl acf mJY -uUK +vKA acf acf aeo @@ -54896,7 +54896,7 @@ abk jZb pfb aHi -pNb +pKb qmb qOb qSb @@ -57909,8 +57909,8 @@ acd dVw dVw htK -hFu vjY +oBI hOb aBc aHT @@ -57920,7 +57920,7 @@ aHT aBa aHT uZO -xzj +ooN aQr aRm eRU diff --git a/maps/torch/torch6_bridge.dmm b/maps/torch/torch6_bridge.dmm index 4494a68c914b8..8a247c55644a5 100644 --- a/maps/torch/torch6_bridge.dmm +++ b/maps/torch/torch6_bridge.dmm @@ -3,7 +3,7 @@ /turf/space, /area/space) "ab" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "meeting_windows" }, /obj/structure/cable/green, @@ -24,7 +24,7 @@ /turf/simulated/floor/tiled/white, /area/aquila/medical) "ad" = ( -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "ae" = ( /obj/structure/lattice, @@ -45,8 +45,8 @@ id = "auxsolarsbridge"; name = "Bridge Auxiliary Solar Array" }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/reinforced, /area/solar/bridge) "ai" = ( /obj/item/device/radio/intercom{ @@ -80,7 +80,7 @@ /area/maintenance/bridge/forestarboard) "am" = ( /obj/random/closet, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/forestarboard) "an" = ( @@ -108,37 +108,37 @@ /area/maintenance/bridge/forestarboard) "aq" = ( /obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/catwalk, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/forestarboard) "ar" = ( /obj/structure/dispenser/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/forestarboard) "as" = ( /obj/structure/closet, /obj/random/tech_supply, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/forestarboard) "at" = ( /obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/forestarboard) "au" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow{ d1 = 2; d2 = 4; icon_state = "2-4" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/bridge) "av" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -154,10 +154,10 @@ d2 = 8; icon_state = "1-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/bridge) "aw" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow{ d1 = 2; d2 = 8; @@ -168,7 +168,7 @@ d2 = 8; icon_state = "1-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/bridge) "ax" = ( /obj/structure/cable/green{ @@ -185,7 +185,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -218,7 +218,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -251,14 +251,14 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/research{ +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/corporate{ id_tag = "liaisondoor2"; name = "Corporate Liaison"; secured_wires = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/cl) "aD" = ( @@ -315,13 +315,13 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/aftstarboard) "aH" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/bridge) "aI" = ( /obj/structure/cable/yellow, @@ -329,8 +329,8 @@ id = "auxsolarsbridge"; name = "Bridge Auxiliary Solar Array" }, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/reinforced, /area/solar/bridge) "aJ" = ( /obj/structure/cable/green{ @@ -356,7 +356,7 @@ /obj/structure/table/rack, /obj/random/tech_supply, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/railing/mapped{ dir = 1; icon_state = "railing0-1" @@ -380,7 +380,7 @@ icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, @@ -400,17 +400,17 @@ /area/maintenance/bridge/forestarboard) "aQ" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/aftstarboard) "aR" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/aftstarboard) "aS" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/aftstarboard) "aT" = ( @@ -433,7 +433,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/bridge/aft) "aV" = ( @@ -471,7 +471,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/bridge/aft) "aX" = ( @@ -482,13 +482,13 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/aft) "aY" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/uniform_vendor, /obj/machinery/recharger/wallcharger{ pixel_y = 24 @@ -509,8 +509,8 @@ /area/crew_quarters/heads/office/xo) "bb" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/blue/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/fore) "bc" = ( @@ -532,12 +532,12 @@ /area/crew_quarters/heads/office/xo) "be" = ( /obj/machinery/computer/modular/preset/cardslot/command, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/heads/office/xo) "bf" = ( /obj/structure/closet/secure_closet/bridgeofficer, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/button/blast_door{ id_tag = "bridge sensors"; name = "Bridge Sensor Shroud Control"; @@ -602,20 +602,20 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /turf/simulated/floor/tiled, /area/crew_quarters/heads/office/rd) "bk" = ( -/obj/effect/floor_decal/corner/white/full, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/white/full, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/suit_storage_unit/command, /turf/simulated/floor/tiled/dark, /area/aux_eva) "bm" = ( /obj/random/closet, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/aftstarboard) "bo" = ( @@ -639,7 +639,7 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/valve/shutoff/supply, -/obj/effect/floor_decal/industrial/shutoff, +/obj/floor_decal/industrial/shutoff, /obj/machinery/atmospherics/valve/shutoff/scrubbers, /obj/machinery/rotating_alarm/security_alarm{ dir = 8 @@ -664,7 +664,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/research{ +/obj/machinery/door/airlock/corporate{ id_tag = "liaisondoor3"; name = "Corporate Liaison"; secured_wires = 1 @@ -683,7 +683,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, @@ -696,7 +696,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/hallway/primary/bridge/fore) @@ -727,7 +727,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -754,7 +754,7 @@ /turf/simulated/wall/r_wall/hull, /area/maintenance/substation/bridge) "bE" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -765,7 +765,7 @@ d2 = 4; icon_state = "2-4" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/bridge) "bF" = ( /obj/structure/cable/green{ @@ -777,7 +777,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -803,7 +803,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/plating, /area/maintenance/bridge/forestarboard) "bJ" = ( @@ -823,7 +823,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) @@ -839,11 +839,6 @@ /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "bL" = ( -/obj/machinery/door/airlock/research{ - id_tag = "liaisondoor"; - name = "Corporate Liaison"; - secured_wires = 1 - }, /obj/machinery/door/firedoor, /obj/structure/cable/green{ d1 = 4; @@ -852,6 +847,11 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/corporate{ + id_tag = "liaisondoor"; + name = "Corporate Liaison"; + secured_wires = 1 + }, /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/cl) "bM" = ( @@ -860,14 +860,14 @@ /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 8 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/hallway/starboard) "bN" = ( -/obj/effect/floor_decal/spline/plain/beige{ +/obj/floor_decal/spline/plain/beige{ dir = 4 }, /turf/simulated/floor/carpet, @@ -876,7 +876,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/xo) "bP" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "meeting_windows" }, /obj/structure/cable/green{ @@ -894,7 +894,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "xo_windows" }, /obj/machinery/door/blast/shutters{ @@ -915,22 +915,22 @@ name = "plastic table frame" }, /obj/item/storage/box/cups, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/hallway/starboard) "bS" = ( -/obj/machinery/camera/network/command{ - c_tag = "Bridge - Entry Starboard" - }, /obj/machinery/light{ dir = 1 }, /obj/structure/reagent_dispensers/water_cooler, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, +/obj/machinery/camera/network/bridge{ + c_tag = "Command Hallway - Fore Starboard" + }, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/hallway/starboard) "bT" = ( @@ -942,13 +942,13 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "bV" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "cl_windows" }, /obj/structure/cable/green, @@ -971,13 +971,13 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "meeting_windows" }, /turf/simulated/floor/plating, /area/bridge/meeting_room) "bY" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled/dark, @@ -995,7 +995,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -1007,14 +1007,14 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled/dark, /area/bridge/hallway/starboard) "cb" = ( /obj/machinery/power/port_gen/pacman, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/aftstarboard) "cc" = ( @@ -1023,7 +1023,7 @@ /area/maintenance/bridge/aftstarboard) "cd" = ( /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/aftstarboard) "ce" = ( @@ -1046,14 +1046,11 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/camera/network/engineering{ - c_tag = "Substation - Bridge" - }, /obj/machinery/power/sensor{ name = "Powernet Sensor - Bridge Subgrid"; name_tag = "Bridge Subgrid" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/plating, @@ -1081,11 +1078,11 @@ /turf/simulated/floor/plating, /area/maintenance/substation/bridge) "ci" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/dark, /area/bridge/hallway/starboard) @@ -1095,10 +1092,10 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad/longrange, /turf/simulated/floor/tiled, /area/crew_quarters/heads/office/rd) @@ -1119,7 +1116,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/effect/floor_decal/corner/blue, +/obj/floor_decal/corner/blue, /obj/structure/cable/green{ d1 = 2; d2 = 4; @@ -1137,7 +1134,7 @@ name = "south bump"; pixel_y = -24 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/structure/cable/green, @@ -1165,7 +1162,7 @@ /turf/simulated/floor/carpet, /area/crew_quarters/heads/office/xo) "cq" = ( -/obj/effect/floor_decal/spline/plain/beige{ +/obj/floor_decal/spline/plain/beige{ dir = 4 }, /obj/structure/bed/chair/comfy/blue{ @@ -1177,13 +1174,13 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/machinery/atmospherics/valve/shutoff/supply{ dir = 4 }, -/obj/effect/floor_decal/industrial/shutoff{ +/obj/floor_decal/industrial/shutoff{ dir = 4 }, /obj/machinery/atmospherics/valve/shutoff/scrubbers{ @@ -1221,7 +1218,7 @@ dir = 8; icon_state = "tube1" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/structure/disposalpipe/segment{ @@ -1260,7 +1257,7 @@ icon_state = "4-8" }, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -1273,7 +1270,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/cable/green{ @@ -1293,7 +1290,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/hallway/starboard) "cy" = ( -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/keycard_auth/torch{ pixel_y = 38 }, @@ -1317,7 +1314,7 @@ /area/bridge) "cz" = ( /obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/structure/noticeboard{ pixel_y = 30 }, @@ -1340,7 +1337,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/blue/three_quarters, +/obj/floor_decal/corner/blue/three_quarters, /turf/simulated/floor/tiled/dark, /area/bridge/hallway/starboard) "cB" = ( @@ -1353,7 +1350,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled/dark, @@ -1371,7 +1368,7 @@ pixel_x = 2; pixel_y = -34 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled/dark, @@ -1386,7 +1383,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 8 }, /turf/simulated/floor/tiled/dark, @@ -1412,7 +1409,7 @@ dir = 4; icon_state = "tube1" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled/dark, @@ -1424,9 +1421,9 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/camera/network/bridge{ - c_tag = "Command Hallway - Center Fore Port"; + c_tag = "Command Hallway - Center Port"; dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -1451,7 +1448,7 @@ name = "Chief of Security"; sort_type = "Chief of Security" }, -/obj/effect/floor_decal/corner/blue, +/obj/floor_decal/corner/blue, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "cH" = ( @@ -1515,7 +1512,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -1531,7 +1528,7 @@ /obj/machinery/power/terminal{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/cable{ @@ -1552,7 +1549,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -1580,31 +1577,31 @@ /turf/simulated/open, /area/maintenance/substation/bridge) "cO" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow{ d1 = 1; d2 = 4; icon_state = "1-4" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/bridge) "cP" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/bridge) "cQ" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow{ d1 = 2; d2 = 8; icon_state = "2-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/bridge) "cR" = ( /obj/structure/catwalk, @@ -1632,7 +1629,7 @@ d2 = 8; icon_state = "2-8" }, -/turf/simulated/floor/tiled/white, +/turf/simulated/floor/tiled/monotile, /area/crew_quarters/heads/office/rd) "cT" = ( /obj/structure/table/standard{ @@ -1656,7 +1653,7 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 8 }, /turf/simulated/floor/tiled/dark, @@ -1666,7 +1663,7 @@ dir = 1; icon_state = "console" }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/power/apc/super/critical{ name = "south bump"; pixel_y = -24 @@ -1678,17 +1675,14 @@ /obj/item/device/radio/intercom{ pixel_y = 23 }, -/obj/machinery/camera/network/command{ - c_tag = "Bridge - Conference Room Starboard" - }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled/dark, /area/bridge/meeting_room) "cX" = ( /obj/structure/table/woodentable/walnut, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/item/book/manual/solgov_law, @@ -1697,7 +1691,7 @@ "cY" = ( /obj/structure/table/woodentable/walnut, /obj/item/book/manual/sol_sop, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled/dark/monotile, @@ -1711,7 +1705,7 @@ /obj/item/pen, /obj/item/hand_labeler, /obj/item/sticky_pad/random, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 1 }, /obj/structure/sign/warning/smoking{ @@ -1727,7 +1721,7 @@ /obj/item/device/radio/intercom{ pixel_y = 23 }, -/obj/effect/floor_decal/corner/yellow/mono, +/obj/floor_decal/corner/yellow/mono, /obj/structure/flora/pottedplant/smallcactus{ desc = "This is a small cactus. Its needles are sharp. It seems neglected, as if no one loves it." }, @@ -1737,7 +1731,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/dark, @@ -1753,7 +1747,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled/dark, @@ -1784,7 +1778,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1793,14 +1787,13 @@ /turf/simulated/floor/tiled/dark, /area/bridge/meeting_room) "df" = ( -/obj/machinery/camera/network/engineering{ - c_tag = "Command Hallway - Center Fore Staboard"; - dir = 4; - network = list("Bridge") - }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, +/obj/machinery/camera/network/bridge{ + c_tag = "Command Hallway - Center Starboard"; + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "dg" = ( @@ -1815,7 +1808,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/meeting_room) "dh" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/table/glass, @@ -1847,7 +1840,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/bridge) "di" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack{ dir = 8 }, @@ -1864,8 +1857,8 @@ name = "CMO's suit storage"; req_access = list("ACCESS_CHIEF_MEDICAL_OFFICER") }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/effect/floor_decal/corner/paleblue/diagonal{ +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal{ dir = 4 }, /obj/item/tank/oxygen_emergency_double, @@ -1873,7 +1866,7 @@ /turf/simulated/floor/tiled/dark, /area/aux_eva) "dj" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled/dark, @@ -1909,7 +1902,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "ce_windows" }, /turf/simulated/floor/plating, @@ -1924,7 +1917,7 @@ name = "east bump"; pixel_x = 24 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled/dark, @@ -1992,7 +1985,7 @@ pixel_x = 24 }, /obj/machinery/light/small, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2046,11 +2039,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/cobed) "dH" = ( -/obj/machinery/camera/network/bridge{ - c_tag = "Bridge - Stairs"; - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/light{ @@ -2075,7 +2064,7 @@ /turf/simulated/floor/carpet, /area/crew_quarters/heads/office/xo) "dJ" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -2095,7 +2084,7 @@ /area/bridge/meeting_room) "dL" = ( /obj/structure/closet/secure_closet/engineering_chief_torch, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/crew_quarters/heads/office/ce) "dM" = ( @@ -2104,18 +2093,13 @@ pixel_y = -24 }, /obj/structure/cable/green, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, /turf/simulated/floor/tiled, /area/crew_quarters/heads/office/ce) "dN" = ( -/obj/machinery/camera/network/command{ - c_tag = "Chief Engineer - Office"; - dir = 1; - network = list("Command","Engineering") - }, /obj/machinery/button/alternate/door{ desc = "A remote control-switch for the office door."; id_tag = "cedoor"; @@ -2123,7 +2107,7 @@ pixel_y = -27; req_access = list("ACCESS_CHIEF_ENGINEER") }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/light, /obj/machinery/papershredder, /turf/simulated/floor/tiled, @@ -2135,7 +2119,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/red/half, +/obj/floor_decal/corner/red/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/fore) "dP" = ( @@ -2143,10 +2127,11 @@ /obj/random_multi/single_item/memo_scgr, /obj/random_multi/single_item/memo_command, /obj/random_multi/single_item/memo_corporate, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/carpet/blue2, /area/bridge/meeting_room) "dQ" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/noticeboard{ @@ -2161,13 +2146,13 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/floor_decal/spline/plain/beige{ +/obj/floor_decal/spline/plain/beige{ dir = 1 }, /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/office/xo) "dS" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/machinery/requests_console{ @@ -2181,7 +2166,7 @@ /area/bridge/meeting_room) "dT" = ( /obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/cable/green{ @@ -2196,7 +2181,7 @@ /area/bridge) "dU" = ( /obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/button/blast_door{ id_tag = "bridge blast"; name = "Bridge Window Lockdown Control"; @@ -2213,14 +2198,13 @@ /area/maintenance/auxsolarbridge) "dW" = ( /obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, -/obj/machinery/camera/network/command{ +/obj/machinery/camera/network/bridge{ c_tag = "Bridge"; dir = 1 }, -/obj/item/folder/envelope/declassified1, /turf/simulated/floor/tiled/dark/monotile, /area/bridge) "dY" = ( @@ -2232,27 +2216,27 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/aftstarboard) "eb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "ec" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/aquila/cockpit) "ed" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/dark, /area/bridge/hallway/port) "ee" = ( /obj/structure/closet/secure_closet/bridgeofficer, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -2270,17 +2254,17 @@ sort_type = "Bridge Conference Room" }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled/dark, /area/bridge/hallway/port) "eg" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "ek" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2289,7 +2273,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -2323,9 +2307,6 @@ /obj/machinery/alarm{ pixel_y = 24 }, -/obj/machinery/camera/network/command{ - c_tag = "Executive Officer - Office" - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -2380,14 +2361,14 @@ dir = 8; pixel_x = 24 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled/dark, /area/bridge/meeting_room) "et" = ( /obj/structure/table/steel_reinforced, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/door/firedoor, /obj/item/material/bell, /obj/machinery/door/window/brigdoor/eastright{ @@ -2409,7 +2390,7 @@ /obj/structure/table/standard{ name = "plastic table frame" }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/machinery/keycard_auth/torch{ pixel_x = 26 }, @@ -2425,7 +2406,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/heads/office/cos) "ev" = ( -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/keycard_auth/torch{ pixel_y = -38 }, @@ -2440,7 +2421,7 @@ /area/bridge) "ew" = ( /obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/dark/monotile, /area/bridge) "ex" = ( @@ -2459,7 +2440,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 8 }, /turf/simulated/floor/tiled/dark, @@ -2490,7 +2471,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled/dark, @@ -2509,7 +2490,7 @@ pixel_x = 2; pixel_y = 24 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled/dark, @@ -2524,7 +2505,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /turf/simulated/floor/tiled/dark, @@ -2544,7 +2525,7 @@ dir = 4; icon_state = "tube1" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled/dark, @@ -2554,17 +2535,17 @@ dir = 8; pixel_x = -24 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/structure/closet/secure_closet{ name = "Security Equipment Locker"; req_access = list("ACCESS_SECURITY") }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/security/bridgecheck) "eG" = ( /obj/machinery/light, -/obj/effect/floor_decal/corner/blue/three_quarters, +/obj/floor_decal/corner/blue/three_quarters, /turf/simulated/floor/tiled/dark, /area/bridge/meeting_room) "eH" = ( @@ -2586,21 +2567,17 @@ dir = 1; pixel_y = -28 }, -/obj/machinery/camera/network/command{ - c_tag = "Bridge - Conference Room Port"; - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled/dark, /area/bridge/meeting_room) "eL" = ( /obj/machinery/photocopier, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/meeting_room) "eM" = ( @@ -2613,7 +2590,7 @@ icon_state = "0-2" }, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /turf/simulated/floor/plating, /area/bridge/storage) "eN" = ( @@ -2624,10 +2601,10 @@ /area/bridge/storage) "eO" = ( /obj/machinery/papershredder, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/meeting_room) "eP" = ( @@ -2635,7 +2612,7 @@ /area/bridge) "eQ" = ( /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -2655,10 +2632,10 @@ dir = 1 }, /obj/machinery/disposal, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 4 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/sign/ecplaque{ pixel_x = 29 }, @@ -2669,7 +2646,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "xo_windows" }, /obj/machinery/door/blast/shutters{ @@ -2685,7 +2662,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/photocopier, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/heads/office/xo) @@ -2703,7 +2680,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 8 }, /turf/simulated/floor/tiled, @@ -2727,7 +2704,7 @@ /obj/structure/bed/chair/padded/blue{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/dark, @@ -2778,7 +2755,7 @@ icon_state = "4-8" }, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -2791,7 +2768,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/cable/green{ @@ -2840,7 +2817,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/aftstarboard) @@ -2879,19 +2856,18 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/aftstarboard) "fj" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/reinforced, /area/space) "fk" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 6; icon_state = "warning" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "fl" = ( /obj/structure/table/glass, -/obj/random/clipboard, /obj/random_multi/single_item/memo_research, /obj/random_multi/single_item/memo_exploration, /turf/simulated/floor/tiled, @@ -2925,18 +2901,18 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/industrial/outline/grey, +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/dark, /area/bridge/hallway/port) "fp" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "fu" = ( /obj/structure/sign/warning/high_voltage{ @@ -2945,7 +2921,7 @@ /turf/simulated/wall/r_wall/hull, /area/maintenance/bridge/forestarboard) "fv" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/structure/cable/green{ @@ -2985,7 +2961,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/hallway/port) "fz" = ( -/obj/effect/floor_decal/spline/plain/beige{ +/obj/floor_decal/spline/plain/beige{ dir = 4 }, /obj/machinery/disposal, @@ -3020,7 +2996,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 4 }, /obj/structure/cable/green{ @@ -3031,7 +3007,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/hallway/port) "fD" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/hallway/primary/bridge/fore) "fE" = ( @@ -3046,7 +3022,7 @@ name = "north bump"; pixel_y = 24 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/structure/cable/green{ @@ -3067,7 +3043,7 @@ /obj/structure/flora/pottedplant/smelly{ desc = "This is some kind of tropical plant. It reeks of rotten eggs. This one has a hand-painted Nametag on the rim. It reads 'Steve'" }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/machinery/alarm{ dir = 8; pixel_x = 24 @@ -3081,7 +3057,7 @@ /obj/machinery/computer/guestpass{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/structure/cable/green{ @@ -3092,7 +3068,7 @@ /obj/machinery/atmospherics/valve/shutoff/supply{ dir = 4 }, -/obj/effect/floor_decal/industrial/shutoff{ +/obj/floor_decal/industrial/shutoff{ dir = 4 }, /obj/machinery/atmospherics/valve/shutoff/scrubbers{ @@ -3108,7 +3084,7 @@ name = "CE's suit storage"; req_access = list("ACCESS_CHIEF_ENGINEER") }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/window/reinforced{ dir = 4 }, @@ -3116,7 +3092,7 @@ dir = 1 }, /obj/item/tank/oxygen_emergency_double, -/obj/effect/floor_decal/corner/yellow/full, +/obj/floor_decal/corner/yellow/full, /obj/item/rig/ce/equipped, /turf/simulated/floor/tiled/monotile, /area/aux_eva) @@ -3133,14 +3109,10 @@ /area/aquila/cockpit) "fK" = ( /obj/machinery/hologram/holopad/longrange, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark, /area/aquila/cockpit) "fL" = ( -/obj/machinery/camera/network/aquila{ - c_tag = "Aquila - Cockpit"; - dir = 8 - }, /obj/machinery/computer/modular/preset/cardslot/command, /obj/item/device/radio/intercom/hailing{ dir = 8; @@ -3164,11 +3136,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/blue/three_quarters, +/obj/floor_decal/corner/blue/three_quarters, /turf/simulated/floor/tiled/dark, /area/bridge/hallway/port) "fN" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -3193,7 +3165,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/structure/catwalk, @@ -3206,7 +3178,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled/dark, @@ -3224,14 +3196,14 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled/dark, /area/bridge/hallway/port) "fR" = ( /obj/machinery/light, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled/dark, @@ -3242,32 +3214,32 @@ pixel_y = -28; req_access = list(list("ACCESS_ENGINE_EQUIP","ACCESS_ATMOS")) }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled/dark, /area/bridge/hallway/port) "fT" = ( -/obj/machinery/camera/network/command{ - c_tag = "Bridge - Entry Port"; - dir = 1 - }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/machinery/rotating_alarm/security_alarm{ dir = 1 }, +/obj/machinery/camera/network/bridge{ + c_tag = "Command Hallway - Fore Port"; + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/bridge/hallway/port) "fU" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled/dark, /area/bridge/hallway/port) "fV" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/structure/table/woodentable/walnut, @@ -3284,20 +3256,20 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "cmo_windows" }, /turf/simulated/floor/plating, /area/crew_quarters/heads/office/cmo) "fX" = ( -/obj/effect/paint/red, +/obj/paint/red, /obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ dir = 1 }, /turf/simulated/wall/titanium, /area/aquila/storage) "fY" = ( -/obj/effect/floor_decal/corner/red/half, +/obj/floor_decal/corner/red/half, /obj/machinery/vending/coffee{ dir = 4 }, @@ -3316,7 +3288,7 @@ /obj/structure/extinguisher_cabinet{ pixel_y = -28 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -3337,7 +3309,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/b_green{ +/obj/floor_decal/corner/b_green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -3349,13 +3321,13 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "gg" = ( -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/power/apc{ name = "south bump"; pixel_y = -24 @@ -3399,14 +3371,14 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, -/obj/effect/floor_decal/corner/research, +/obj/floor_decal/corner/research, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "gl" = ( -/obj/effect/shuttle_landmark/torch/deck1/exploration_shuttle{ +/obj/shuttle_landmark/torch/deck1/exploration_shuttle{ name = "B-Deck, Fore Port" }, /turf/space, @@ -3423,14 +3395,14 @@ pixel_x = -24; req_access = list("ACCESS_MAINT") }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "go" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/alarm{ dir = 4; pixel_x = -22 @@ -3448,6 +3420,10 @@ /obj/structure/bed/chair/shuttle/blue{ dir = 1 }, +/obj/machinery/camera/network/aquila{ + c_tag = "Aquila - Cockpit"; + dir = 1 + }, /turf/simulated/floor/tiled/dark/monotile, /area/aquila/cockpit) "gq" = ( @@ -3457,7 +3433,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/structure/cable/cyan{ @@ -3522,7 +3498,7 @@ /turf/simulated/floor/carpet/blue2, /area/crew_quarters/heads/office/sgr) "gw" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/aquila/storage) "gz" = ( @@ -3535,7 +3511,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plating, /area/hallway/primary/bridge/fore) @@ -3570,7 +3546,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -3592,7 +3568,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -3637,8 +3613,8 @@ /turf/simulated/wall/r_wall/hull, /area/hallway/primary/bridge/aft) "gY" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/reinforced/airless, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced, /area/space) "gZ" = ( /obj/machinery/porta_turret{ @@ -3646,14 +3622,12 @@ enabled = 0; lethal = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/airless, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor{ + map_airless = 1 + }, /area/aquila/cockpit) "ha" = ( -/obj/machinery/camera/network/aquila{ - c_tag = "Aquila - Infirmary"; - dir = 8 - }, /obj/machinery/sleeper{ dir = 8 }, @@ -3674,16 +3648,18 @@ /turf/simulated/floor/tiled/steel_ridged, /area/aquila/cockpit) "hc" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/porta_turret{ dir = 8; enabled = 0; lethal = 1 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/aquila/cockpit) "hi" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack{ dir = 8 }, @@ -3719,7 +3695,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 8 }, /turf/simulated/floor/tiled, @@ -3757,7 +3733,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "ce_windows" }, /turf/simulated/floor/plating, @@ -3769,7 +3745,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "hF" = ( @@ -3786,17 +3762,9 @@ name = "Bridge Deck Hallway Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/fore) -"hH" = ( -/obj/machinery/camera/network/command{ - c_tag = "Bridge Exterior"; - dir = 8 - }, -/obj/structure/lattice, -/turf/space, -/area/space) "hI" = ( /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 1 @@ -3814,15 +3782,12 @@ dir = 8; id_tag = "bridge_eva_pump" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/bridge/aft) "hL" = ( -/obj/machinery/camera/network/aquila{ - c_tag = "Aquila - Crew Compartment" - }, /obj/structure/bed/chair/shuttle/blue{ dir = 4 }, @@ -3842,7 +3807,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/dark/monotile, @@ -3854,7 +3819,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/structure/cable/cyan{ @@ -3893,7 +3858,7 @@ /area/aquila/crew) "hU" = ( /obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/sign/double/solgovflag/left{ @@ -3944,7 +3909,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "meeting_windows" }, /turf/simulated/floor/plating, @@ -3962,7 +3927,7 @@ /obj/item/folder/nt, /obj/item/folder/yellow, /obj/item/folder/white, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/button/windowtint{ id = "ce_windows"; pixel_x = -24; @@ -3999,7 +3964,7 @@ /area/crew_quarters/heads/office/ce) "ij" = ( /obj/structure/bed/chair/padded/yellow, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, /turf/simulated/floor/tiled, @@ -4035,7 +4000,7 @@ /turf/simulated/floor/carpet/green, /area/crew_quarters/heads/office/cl) "il" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/monotile, @@ -4064,7 +4029,7 @@ dir = 8; pixel_x = 24 }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "ip" = ( @@ -4083,7 +4048,7 @@ dir = 4; id_tag = "bridge_eva_pump" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -4101,7 +4066,7 @@ dir = 8; id_tag = "bridge_eva_pump" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -4123,7 +4088,7 @@ name = "north bump"; pixel_y = 24 }, -/obj/effect/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner, /turf/simulated/floor/tiled/dark, /area/aquila/suits) "iv" = ( @@ -4162,8 +4127,8 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, /turf/simulated/floor/plating, /area/aquila/air) "iA" = ( @@ -4171,10 +4136,10 @@ /turf/simulated/floor/plating, /area/aquila/air) "iB" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, -/obj/effect/floor_decal/spline/plain/beige{ +/obj/floor_decal/spline/plain/beige{ dir = 1 }, /turf/simulated/floor/tiled/dark, @@ -4188,7 +4153,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "bridge_starboard" }, /turf/simulated/floor/plating, @@ -4198,7 +4163,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "bridge_starboard" }, /turf/simulated/floor/plating, @@ -4209,9 +4174,9 @@ pixel_x = -23; pixel_y = -3 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -4219,21 +4184,21 @@ /area/crew_quarters/heads/office/ce) "iR" = ( /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/crew_quarters/heads/office/ce) "iS" = ( /obj/structure/table/standard{ name = "plastic table frame" }, -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, /obj/random_multi/single_item/memo_engineering, /turf/simulated/floor/tiled, /area/crew_quarters/heads/office/ce) "iU" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -4263,7 +4228,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -4310,7 +4275,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled, @@ -4323,7 +4288,7 @@ dir = 4; id_tag = "bridge_eva_pump" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -4362,7 +4327,7 @@ icon_state = "1-4" }, /obj/machinery/light/small, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -4377,7 +4342,7 @@ /turf/simulated/floor/tiled/techfloor, /area/aquila/crew) "jw" = ( -/obj/effect/floor_decal/corner/blue, +/obj/floor_decal/corner/blue, /turf/simulated/floor/tiled/dark, /area/bridge) "jx" = ( @@ -4386,7 +4351,7 @@ /area/maintenance/bridge/aftstarboard) "jz" = ( /obj/machinery/computer/modular/preset/cardslot/command, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 1 }, /obj/machinery/button/alternate/door{ @@ -4428,7 +4393,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/hallway/port) @@ -4443,8 +4408,8 @@ icon_state = "0-8" }, /obj/machinery/papershredder, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "jF" = ( @@ -4459,16 +4424,16 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 8 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 1 }, /turf/simulated/floor/tiled/dark, /area/aquila/crew) "jH" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/machinery/light{ @@ -4478,7 +4443,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/meeting_room) "jM" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, /obj/structure/bed/chair/comfy/yellow{ @@ -4503,13 +4468,13 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "meeting_windows" }, /turf/simulated/floor/plating, /area/bridge/meeting_room) "jR" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/monotile, @@ -4531,12 +4496,16 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/machinery/rotating_alarm/security_alarm{ dir = 8 }, +/obj/machinery/camera/network/bridge{ + c_tag = "Command Hallway - Stairs"; + dir = 8 + }, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "jU" = ( @@ -4597,9 +4566,6 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/bridge/aft) "ke" = ( -/obj/structure/bed/chair/shuttle/blue{ - dir = 4 - }, /obj/structure/bed/chair/shuttle/blue{ dir = 4 }, @@ -4616,7 +4582,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/dark/monotile, @@ -4628,7 +4594,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 10 }, /obj/structure/cable/cyan{ @@ -4674,16 +4640,16 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/office/sea) "kw" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/dark, /area/bridge) "kx" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/disposalpipe/segment, @@ -4700,7 +4666,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "xo_windows" }, /obj/machinery/door/blast/shutters{ @@ -4712,7 +4678,7 @@ /area/crew_quarters/heads/office/xo) "kE" = ( /obj/structure/lattice, -/obj/machinery/light/navigation/delay2, +/obj/machinery/nav_light/starboard, /turf/space, /area/space) "kH" = ( @@ -4724,10 +4690,12 @@ pressure_checks_default = 2; use_power = 1 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/aquila/air) "kI" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 6 }, /obj/structure/table/standard{ @@ -4745,7 +4713,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 4 }, /turf/simulated/floor/tiled, @@ -4756,14 +4724,14 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/bridge/fore) "kM" = ( -/obj/effect/floor_decal/corner/blue/half{ +/obj/floor_decal/corner/blue/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/aft) "kN" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -4777,7 +4745,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -4786,7 +4754,7 @@ /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/blue/half{ +/obj/floor_decal/corner/blue/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, @@ -4795,7 +4763,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -4811,18 +4779,18 @@ pixel_y = 24; req_access = list("ACCESS_MAINT") }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/aft) "kS" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/aft) "kT" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/cable/green{ d2 = 2; icon_state = "0-2" @@ -4833,16 +4801,16 @@ /obj/machinery/alarm{ pixel_y = 24 }, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 1 }, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/aft) "kV" = ( /obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "xo_windows" }, /obj/machinery/door/blast/shutters{ @@ -4866,12 +4834,12 @@ pixel_x = -23; pixel_y = 25 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/machinery/newscaster/security_unit{ pixel_x = -32 }, /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -4882,20 +4850,20 @@ /area/security/bridgecheck) "lm" = ( /obj/machinery/hologram/holopad/longrange, -/obj/effect/landmark{ +/obj/landmark{ name = "lightsout" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark, /area/bridge) "lo" = ( -/obj/effect/floor_decal/scglogo, +/obj/floor_decal/scglogo, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -4905,7 +4873,7 @@ /area/bridge) "lq" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -4913,7 +4881,7 @@ /area/crew_quarters/heads/office/cos) "lt" = ( /obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/structure/cable/green{ @@ -4931,7 +4899,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge) "lu" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/structure/table/woodentable/walnut, @@ -4939,13 +4907,13 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/cobed) "lx" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "ly" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -4966,12 +4934,8 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/effect/catwalk_plated, -/obj/machinery/camera/network/bridge{ - c_tag = "Command Hallway - Center Aft"; - dir = 4 - }, -/obj/effect/landmark{ +/obj/catwalk_plated, +/obj/landmark{ name = "lightsout" }, /obj/structure/disposalpipe/segment{ @@ -5021,7 +4985,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5041,7 +5005,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/industrial/shutoff{ +/obj/floor_decal/industrial/shutoff{ dir = 4 }, /obj/machinery/atmospherics/valve/shutoff/supply{ @@ -5062,14 +5026,14 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plating, /area/hallway/primary/bridge/aft) "lL" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -5099,7 +5063,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/blue/half{ +/obj/floor_decal/corner/blue/half{ dir = 4 }, /turf/simulated/floor/tiled/monotile, @@ -5145,10 +5109,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/item/device/radio/intercom/hailing{ dir = 1; pixel_y = -28 @@ -5156,7 +5120,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/bridge/aft) "lS" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 4; icon_state = "bottom-right" }, @@ -5192,7 +5156,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -5229,7 +5193,7 @@ "mc" = ( /obj/structure/cable/green, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/blast/regular/open{ dir = 4; id_tag = "bridge blast"; @@ -5258,7 +5222,7 @@ /turf/simulated/floor/carpet/blue2, /area/crew_quarters/heads/office/sgr) "mx" = ( -/obj/effect/paint/red, +/obj/paint/red, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 5 }, @@ -5268,7 +5232,7 @@ /obj/structure/table/standard{ name = "plastic table frame" }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/item/stamp/sea, /obj/machinery/button/alternate/door{ desc = "A remote control-switch for the office door."; @@ -5294,7 +5258,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -5328,7 +5292,7 @@ pixel_x = -23; pixel_y = -3 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/heads/office/cos) "mH" = ( @@ -5342,20 +5306,16 @@ icon_state = "0-2" }, /obj/machinery/photocopier, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/heads/office/cos) "mI" = ( /obj/structure/closet/secure_closet/cos, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/item/book/manual/sol_sop, /obj/machinery/light{ dir = 1 }, -/obj/machinery/camera/network/command{ - c_tag = "Chief of Security - Office"; - network = list("Command","Security") - }, /obj/machinery/button/alternate/door{ desc = "A remote control-switch for the office door."; id_tag = "cosdoor"; @@ -5369,7 +5329,7 @@ /obj/structure/table/standard{ name = "plastic table frame" }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/machinery/newscaster/security_unit{ pixel_y = 32 }, @@ -5387,7 +5347,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -5410,7 +5370,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/blue, +/obj/floor_decal/corner/blue, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) @@ -5420,7 +5380,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled/monotile, @@ -5437,26 +5397,26 @@ dir = 1; pixel_y = -28 }, -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/aft) "mW" = ( -/obj/machinery/camera/network/bridge{ - c_tag = "Bridge Hallway - Lift"; - dir = 1 - }, /obj/machinery/power/apc{ name = "south bump"; pixel_y = -28 }, /obj/structure/cable/green, -/obj/effect/floor_decal/corner/blue/half, +/obj/floor_decal/corner/blue/half, +/obj/machinery/camera/network/bridge{ + c_tag = "Bridge Hallway - Aft"; + dir = 1 + }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/aft) "mX" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -5470,7 +5430,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -5479,7 +5439,7 @@ /obj/structure/extinguisher_cabinet{ pixel_y = -32 }, -/obj/effect/floor_decal/corner/blue/half, +/obj/floor_decal/corner/blue/half, /obj/machinery/rotating_alarm/security_alarm{ dir = 1 }, @@ -5490,13 +5450,9 @@ dir = 1; pixel_y = -24 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, -/obj/machinery/camera/network/bridge{ - c_tag = "Bridge Hallway - Aft"; - dir = 1 - }, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/aft) "nb" = ( @@ -5511,7 +5467,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5522,12 +5478,12 @@ dir = 1 }, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/blue/mono, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/aft) "nd" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/cable/green, /turf/simulated/floor/plating, /area/hallway/primary/bridge/aft) @@ -5536,10 +5492,10 @@ dir = 1; pixel_y = -28 }, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/crew, /obj/random/maintenance/solgov/clean, /obj/random/maintenance/solgov/clean, @@ -5551,7 +5507,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/bridge/aft) "nf" = ( -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/alarm{ pixel_y = 24 }, @@ -5562,7 +5518,7 @@ /obj/structure/handrail{ dir = 1 }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/item/device/radio/intercom/hailing{ dir = 1; pixel_y = -28 @@ -5587,7 +5543,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, @@ -5608,7 +5564,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/overmap/visitable/ship/landable/aquila, +/obj/overmap/visitable/ship/landable/aquila, /turf/simulated/floor/tiled/dark, /area/aquila/airlock) "nn" = ( @@ -5631,7 +5587,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/firealarm{ @@ -5641,12 +5597,8 @@ /turf/simulated/floor/tiled/dark/monotile, /area/aquila/air) "nq" = ( -/obj/machinery/camera/network/aquila{ - c_tag = "Aquila - Seating"; - dir = 1 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/table/rack, @@ -5654,11 +5606,11 @@ /turf/simulated/floor/tiled/dark/monotile, /area/aquila/air) "nr" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10; icon_state = "warning" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "ns" = ( /obj/structure/table/woodentable_reinforced/walnut, @@ -5666,16 +5618,12 @@ dir = 8; pixel_x = 24 }, -/obj/machinery/camera/network/command{ - c_tag = "Corporate Liaison - Office"; - dir = 8 - }, /obj/item/storage/box/donut, /turf/simulated/floor/carpet/green, /area/crew_quarters/heads/office/cl) "nu" = ( /obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/item/device/binoculars, @@ -5688,11 +5636,11 @@ /turf/simulated/floor/carpet/green, /area/crew_quarters/heads/office/cl/backroom) "nE" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "nG" = ( /obj/structure/filingcabinet/chestdrawer{ @@ -5704,15 +5652,15 @@ /obj/item/folder/nt, /obj/item/folder/yellow, /obj/item/folder/white, -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/noticeboard{ pixel_y = -30 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "nH" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -5736,7 +5684,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/bridge/disciplinary_board_room/deliberation) "nJ" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 4 }, /obj/machinery/button/alternate/door{ @@ -5780,7 +5728,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange, /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/safe_room/bridge) "nM" = ( @@ -5806,7 +5754,7 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/office/cos) "nV" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /obj/structure/bed/chair/comfy/red, @@ -5833,16 +5781,16 @@ pixel_x = 26; pixel_y = 37 }, -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 4 }, /turf/simulated/floor/tiled/dark/monotile, /area/security/bridgecheck) "oa" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow, /obj/machinery/power/tracker, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "ob" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -5860,7 +5808,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/cable/green{ @@ -5877,7 +5825,7 @@ icon_state = "0-4" }, /obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "cmo_windows" }, /turf/simulated/floor/plating, @@ -5891,7 +5839,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "cmo_windows" }, /turf/simulated/floor/plating, @@ -5901,7 +5849,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "cmo_windows" }, /turf/simulated/floor/plating, @@ -5923,7 +5871,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/maintenance/bridge/aftport) "ol" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/cable/green{ d2 = 8; icon_state = "0-8" @@ -5939,7 +5887,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "bridge_port" }, /turf/simulated/floor/plating, @@ -5949,13 +5897,13 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "bridge_port" }, /turf/simulated/floor/plating, /area/bridge) "oz" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -5963,13 +5911,6 @@ }, /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/office/xo) -"oA" = ( -/obj/structure/lattice, -/obj/machinery/camera/network/command{ - c_tag = "Bridge Exterior - Starboard" - }, -/turf/space, -/area/space) "oB" = ( /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/foreport) @@ -5984,7 +5925,7 @@ /area/crew_quarters/heads/office/cl/backroom) "oF" = ( /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/office/cos) "oI" = ( @@ -5992,7 +5933,7 @@ pixel_x = 23; pixel_y = -23 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/machinery/papershredder, @@ -6016,7 +5957,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "meeting_windows" }, /obj/structure/cable/green{ @@ -6026,7 +5967,7 @@ /turf/simulated/floor/plating, /area/bridge/meeting_room) "oK" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/shutters{ density = 0; dir = 4; @@ -6042,7 +5983,7 @@ /turf/simulated/floor/plating, /area/security/bridgecheck) "oO" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -6061,7 +6002,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "oP" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -6073,7 +6014,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "oR" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/flora/pottedplant/overgrown, /obj/structure/cable/green{ d1 = 2; @@ -6084,10 +6025,6 @@ dir = 8; pixel_x = 20 }, -/obj/machinery/camera/network/command{ - c_tag = "Chief Medical Officer - Office"; - network = list("Command","Medical") - }, /obj/machinery/light{ dir = 1 }, @@ -6095,7 +6032,7 @@ /area/crew_quarters/heads/office/cmo) "oS" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/aftport) "oT" = ( @@ -6125,7 +6062,7 @@ /obj/machinery/alarm{ pixel_y = 24 }, -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 8 }, /turf/simulated/floor/tiled/dark/monotile, @@ -6141,7 +6078,7 @@ /turf/simulated/floor/tiled/dark, /area/aux_eva) "oY" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ density = 0; dir = 4; @@ -6150,7 +6087,7 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/paint/hull, +/obj/paint/hull, /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, @@ -6158,7 +6095,7 @@ /area/aquila/air) "oZ" = ( /obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/dark/monotile, /area/aquila/power) "pa" = ( @@ -6222,7 +6159,7 @@ /area/aquila/airlock) "pe" = ( /obj/structure/lattice, -/obj/machinery/light/navigation/delay5, +/obj/machinery/nav_light, /turf/space, /area/space) "pf" = ( @@ -6243,7 +6180,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled/dark/monotile, @@ -6331,7 +6268,7 @@ /obj/item/folder/nt, /obj/item/folder/yellow, /obj/item/folder/white, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light_switch{ pixel_x = -24; pixel_y = 6 @@ -6370,7 +6307,7 @@ /obj/structure/bed/chair/padded/red{ dir = 1 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /turf/simulated/floor/tiled/dark/monotile, @@ -6383,7 +6320,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/security/bridgecheck) "pF" = ( -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 4 }, /obj/machinery/computer/modular/preset/cardslot/command_sec{ @@ -6398,26 +6335,26 @@ /area/security/bridgecheck) "pI" = ( /obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "cmo_windows" }, /turf/simulated/floor/plating, /area/crew_quarters/heads/office/cmo) "pJ" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "pL" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "pM" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/cable/green{ d1 = 1; d2 = 4; @@ -6426,14 +6363,14 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "pQ" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/dark, /area/aux_eva) "pR" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack{ dir = 8 }, @@ -6443,7 +6380,7 @@ /area/aux_eva) "pS" = ( /obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/dark/monotile, /area/aquila/power) "pT" = ( @@ -6534,7 +6471,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/aquila/storage) "qf" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "top-right" }, /obj/structure/cable/green{ @@ -6562,7 +6499,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/structure/cable/green{ @@ -6573,7 +6510,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "qh" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "bottom-right" }, /obj/structure/cable/green{ @@ -6592,7 +6529,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge) "qi" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack{ dir = 8 }, @@ -6656,7 +6593,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "cos_windows" }, /turf/simulated/floor/plating, @@ -6666,7 +6603,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "cos_windows" }, /turf/simulated/floor/plating, @@ -6680,7 +6617,7 @@ "qt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "qu" = ( @@ -6691,8 +6628,8 @@ name = "Chief Medical Officer RC"; pixel_x = 32 }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -6700,7 +6637,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "qv" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/table/glass, /obj/item/paper_bin, /obj/item/pen, @@ -6710,7 +6647,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "qw" = ( -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 8 }, /obj/structure/disposalpipe/segment{ @@ -6720,7 +6657,7 @@ /turf/simulated/floor/tiled/dark, /area/security/bridgecheck) "qx" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/table/glass, /obj/item/reagent_containers/food/snacks/cookie, /obj/item/reagent_containers/food/snacks/cookie, @@ -6736,18 +6673,11 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) -"qA" = ( -/obj/machinery/camera/network/command{ - c_tag = "Bridge Exterior - Port"; - dir = 1 - }, -/turf/space, -/area/space) "qB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -6758,7 +6688,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/sgr) "qD" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/radio_beacon, @@ -6770,19 +6700,19 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/plating, /area/aquila/power) "qF" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /obj/structure/cable/cyan{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/plating, @@ -6797,11 +6727,16 @@ /obj/machinery/recharger, /turf/simulated/floor/tiled/dark/monotile, /area/aquila/storage) +"qN" = ( +/obj/structure/lattice, +/obj/machinery/nav_light/port, +/turf/space, +/area/space) "qO" = ( /turf/simulated/wall/r_wall/prepainted, /area/bridge/storage) "qP" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -6813,9 +6748,6 @@ pixel_y = 24 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/camera/network/command{ - c_tag = "CO - Office Port" - }, /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/office/co) "qR" = ( @@ -6851,7 +6783,7 @@ dir = 1; pixel_y = -24 }, -/obj/effect/floor_decal/corner/orange/half{ +/obj/floor_decal/corner/orange/half{ dir = 8 }, /turf/simulated/floor/tiled/dark/monotile, @@ -6881,8 +6813,8 @@ name = "Port Bridge Blast Doors"; opacity = 0 }, -/obj/effect/floor_decal/corner/blue/three_quarters, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/blue/three_quarters, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -6901,7 +6833,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/bridge/fore) "rb" = ( @@ -6911,7 +6843,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -6953,7 +6885,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "re" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 5 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -6973,7 +6905,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 1 }, /turf/simulated/floor/tiled, @@ -6985,7 +6917,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/bridge/fore) "rk" = ( @@ -6995,7 +6927,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, @@ -7030,7 +6962,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "rn" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/machinery/computer/modular/preset/cardslot/command{ dir = 4; icon_state = "console" @@ -7042,7 +6974,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "rp" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "rr" = ( @@ -7092,7 +7024,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 10 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -7128,7 +7060,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/storage) "rA" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 4; icon_state = "bottom-left" }, @@ -7153,7 +7085,7 @@ /obj/structure/bed/chair/comfy/blue{ dir = 8 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/structure/cable/green{ @@ -7244,7 +7176,7 @@ "rT" = ( /obj/structure/closet/toolcloset, /obj/random/action_figure, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/random/powercell, /turf/simulated/floor/plating, /area/maintenance/bridge/foreport) @@ -7263,7 +7195,7 @@ /turf/simulated/floor/plating, /area/aquila/power) "rV" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 8 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -7280,7 +7212,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/structure/cable/green{ @@ -7300,7 +7232,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/blue, +/obj/floor_decal/corner/blue, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "sa" = ( @@ -7316,7 +7248,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -7331,7 +7263,7 @@ dir = 1; pixel_y = -28 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -7345,7 +7277,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -7363,7 +7295,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -7392,8 +7324,10 @@ /turf/simulated/floor/carpet, /area/crew_quarters/heads/office/xo) "sm" = ( -/obj/machinery/shipsensors, -/turf/simulated/floor/reinforced/airless, +/obj/machinery/shipsensors/upgraded, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/bridge/storage) "so" = ( /obj/structure/table/standard, @@ -7418,7 +7352,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark/monotile, /area/aquila/storage) "sx" = ( @@ -7436,7 +7370,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "sea_windows" }, /turf/simulated/floor/plating, @@ -7479,7 +7413,7 @@ icon_state = "0-2" }, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/blast/regular/open{ dir = 4; id_tag = "bridge blast"; @@ -7497,7 +7431,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "sgr_windows" }, /turf/simulated/floor/plating, @@ -7511,7 +7445,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "sgr_windows" }, /turf/simulated/floor/plating, @@ -7533,7 +7467,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "rd_windows" }, /obj/structure/disposalpipe/segment, @@ -7561,14 +7495,14 @@ dir = 4 }, /obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup, -/obj/effect/floor_decal/industrial/outline/orange, +/obj/floor_decal/industrial/outline/orange, /turf/simulated/floor/tiled/techfloor, /area/aquila/power) "sW" = ( /obj/machinery/atmospherics/pipe/manifold/visible/fuel{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/plating, @@ -7663,7 +7597,7 @@ /turf/simulated/floor/tiled/monotile, /area/crew_quarters/heads/office/rd) "tl" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /obj/machinery/power/apc/shuttle/aquila{ @@ -7681,7 +7615,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/aquila/air) "tm" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/flora/pottedplant/unusual, @@ -7692,7 +7626,7 @@ dir = 4; pixel_x = -37 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -7713,7 +7647,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "sgr_windows" }, /turf/simulated/floor/plating, @@ -7774,11 +7708,11 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/sgr) "tC" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -7807,13 +7741,13 @@ /obj/random/tech_supply, /obj/random/tech_supply, /obj/random/tech_supply, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, /area/aquila/power) "tJ" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -7825,7 +7759,7 @@ /obj/random/toolbox, /obj/random/powercell, /obj/random/powercell, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled/techfloor, @@ -7835,26 +7769,26 @@ dir = 8; pixel_x = -24 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 10 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light, /obj/structure/closet/crate/freezer/rations, /turf/simulated/floor/tiled/techfloor, /area/aquila/storage) "tN" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/techfloor, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/crew, /turf/simulated/floor/tiled/techfloor, /area/aquila/storage) "tO" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 6 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/secure_closet/guncabinet/sidearm/small, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/secure_closet/guncabinet/sidearm, /turf/simulated/floor/tiled/techfloor, /area/aquila/storage) "tR" = ( @@ -7874,8 +7808,8 @@ /area/crew_quarters/heads/office/co) "tW" = ( /obj/machinery/disposal, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/blue/mono, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -7886,7 +7820,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/heads/office/sea) "tX" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/structure/disposalpipe/segment{ @@ -7895,7 +7829,7 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/office/sea) "tZ" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/machinery/light{ @@ -7918,7 +7852,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor, @@ -7930,29 +7864,25 @@ /obj/machinery/newscaster{ pixel_x = 32 }, -/obj/machinery/camera/network/bridge{ - c_tag = "Bridge - Safe Room"; - dir = 8 - }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/bridge) "uf" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/item/device/radio/intercom{ dir = 8; pixel_x = 21 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/plating, /area/aquila/power) "ug" = ( /obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "sgr_windows" }, /obj/structure/disposalpipe/segment{ @@ -8038,7 +7968,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/sgr) "uo" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/structure/bed/chair/padded/red{ @@ -8047,14 +7977,14 @@ /turf/simulated/floor/tiled/dark, /area/bridge/disciplinary_board_room) "up" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 4; icon_state = "top-right" }, /turf/simulated/floor/tiled/dark, /area/bridge/disciplinary_board_room) "uq" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 4; icon_state = "center-right" }, @@ -8124,17 +8054,19 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/aftport) "uv" = ( -/obj/effect/floor_decal/industrial/warning/cee{ +/obj/floor_decal/industrial/warning/cee{ dir = 1; icon_state = "warningcee" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "uw" = ( /obj/machinery/atmospherics/unary/engine{ dir = 1 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/aquila/medical) "uy" = ( /turf/simulated/wall/walnut, @@ -8195,7 +8127,7 @@ dir = 8; pixel_x = 24 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -8209,7 +8141,7 @@ /obj/machinery/atm{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /obj/structure/disposalpipe/segment{ @@ -8230,13 +8162,6 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) -"uM" = ( -/obj/machinery/camera/network/command{ - c_tag = "Sol Government Representative - Office"; - dir = 4 - }, -/turf/simulated/floor/carpet/blue2, -/area/crew_quarters/heads/office/sgr) "uN" = ( /obj/structure/table/woodentable_reinforced/walnut, /obj/item/paper_bin{ @@ -8267,7 +8192,7 @@ /obj/structure/table/steel_reinforced, /obj/item/reagent_containers/food/drinks/glass2/carafe, /obj/item/reagent_containers/food/drinks/glass2/square, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 8 }, /obj/structure/sign/warning/nosmoking_1{ @@ -8280,7 +8205,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/disciplinary_board_room) "uT" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -8293,7 +8218,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/disciplinary_board_room) "uU" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 4; icon_state = "top-center" }, @@ -8309,7 +8234,7 @@ /turf/simulated/wall/prepainted, /area/hallway/primary/bridge/fore) "uW" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -8325,25 +8250,25 @@ /turf/simulated/wall/prepainted, /area/maintenance/auxsolarbridge) "uZ" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "vb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1; icon_state = "warningcorner" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "vd" = ( /obj/machinery/power/shield_generator, @@ -8351,17 +8276,17 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/plating, /area/shield/bridge) "vf" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "top-center" }, /turf/simulated/floor/tiled/dark, /area/bridge) "vg" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /obj/structure/cable/green{ @@ -8372,7 +8297,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge) "vj" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/power/apc{ @@ -8387,10 +8312,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/machinery/camera/network/command{ - c_tag = "Senior Enlisted Advisor - Office"; - dir = 4 - }, /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/office/sea) "vk" = ( @@ -8422,8 +8343,8 @@ /obj/item/folder/nt, /obj/item/folder/yellow, /obj/item/folder/white, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/blue/mono, +/obj/floor_decal/industrial/outline/yellow, /obj/item/material/clipboard, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/heads/office/sea) @@ -8431,7 +8352,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -8447,15 +8368,15 @@ dir = 8; pixel_x = 20 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 6 }, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/bridge) "vs" = ( /obj/machinery/space_heater, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/tiled/techfloor, @@ -8481,12 +8402,12 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "vy" = ( /obj/structure/table/woodentable_reinforced/walnut/maple, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/structure/noticeboard{ pixel_x = 32 }, @@ -8546,28 +8467,28 @@ /area/maintenance/auxsolarbridge) "vJ" = ( /obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/portables_connector, /turf/simulated/floor/plating, /area/maintenance/auxsolarbridge) "vK" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "vL" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "vO" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/corner/blue/three_quarters, +/obj/floor_decal/corner/blue/three_quarters, /obj/machinery/alarm{ dir = 4; pixel_x = -23 @@ -8575,7 +8496,7 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/office/sea) "vP" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled/dark, @@ -8586,7 +8507,7 @@ icon_state = "console" }, /obj/item/modular_computer/tablet/lease/preset/command, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 4 }, /obj/item/device/radio/intercom{ @@ -8648,11 +8569,11 @@ /obj/structure/bed/chair/padded/beige{ dir = 4 }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/disciplinary_board_room/deliberation) "wc" = ( -/obj/effect/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal, /obj/structure/cable/green{ d1 = 2; d2 = 4; @@ -8667,7 +8588,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/disciplinary_board_room/deliberation) "wd" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /obj/structure/cable/green{ @@ -8687,7 +8608,7 @@ pixel_y = 7 }, /obj/item/pen, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/structure/cable/green{ @@ -8710,7 +8631,7 @@ /obj/item/tableflag{ pixel_x = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/structure/cable/green{ @@ -8729,7 +8650,7 @@ /area/bridge/disciplinary_board_room) "wh" = ( /obj/item/book/manual/military_law, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/item/reagent_containers/food/drinks/glass2/square, @@ -8796,7 +8717,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/structure/catwalk, @@ -8923,7 +8844,7 @@ pixel_y = 24; req_access = list("ACCESS_ENGINE_EQUIP","ACCESS_EXTERNAL") }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -8934,21 +8855,21 @@ d2 = 8; icon_state = "2-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/bridge) "wu" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow{ d1 = 1; d2 = 8; icon_state = "1-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/bridge) "ww" = ( /obj/structure/closet/secure_closet/sea, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/corner/blue/mono, +/obj/floor_decal/industrial/outline/grey, /obj/structure/noticeboard{ pixel_x = -32 }, @@ -8961,7 +8882,7 @@ /obj/structure/table/standard{ name = "plastic table frame" }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/item/toy/bosunwhistle, /obj/item/sticky_pad/random, /obj/machinery/newscaster/security_unit{ @@ -8986,16 +8907,16 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/safe_room/bridge) "wB" = ( -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/fore) "wC" = ( /obj/structure/table/standard{ name = "plastic table frame" }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /obj/item/stamp/cos, @@ -9018,7 +8939,7 @@ /obj/structure/bed/chair/padded/beige{ dir = 4 }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/item/device/radio/intercom{ dir = 4; pixel_x = -21 @@ -9027,7 +8948,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/bridge/disciplinary_board_room/deliberation) "wI" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /obj/machinery/power/apc{ @@ -9038,10 +8959,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/camera/network/command{ - c_tag = "Disciplinary Board Room - Deliberations"; - dir = 1 - }, /turf/simulated/floor/tiled/dark, /area/bridge/disciplinary_board_room/deliberation) "wJ" = ( @@ -9058,7 +8975,7 @@ /obj/structure/bed/chair/comfy/blue{ dir = 1 }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/disciplinary_board_room) "wM" = ( @@ -9067,7 +8984,7 @@ icon_state = "0-2" }, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/blast/regular/open{ dir = 4; id_tag = "bridge blast"; @@ -9079,9 +8996,9 @@ /obj/structure/bed/chair/comfy/blue{ dir = 1 }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/machinery/camera/network/command{ - c_tag = "Disciplinary Board Room"; +/obj/floor_decal/corner/blue/mono, +/obj/machinery/camera/network/bridge{ + c_tag = "Bridge - Disciplinary Board"; dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, @@ -9107,7 +9024,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/structure/catwalk, @@ -9161,7 +9078,7 @@ "xb" = ( /obj/structure/closet/crate, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/foreport) "xc" = ( @@ -9193,7 +9110,7 @@ /obj/machinery/oxygen_pump{ pixel_x = -32 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -9322,7 +9239,7 @@ /obj/random/closet, /obj/random/maintenance/solgov/clean, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /obj/structure/catwalk, @@ -9333,7 +9250,7 @@ anchored = 1; sheets = 25 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow, /turf/simulated/floor/tiled/techfloor, /area/aquila/power) @@ -9360,12 +9277,12 @@ "xs" = ( /obj/structure/closet, /obj/random/maintenance/solgov, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/foreport) "xt" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/aftport) "xv" = ( @@ -9449,17 +9366,17 @@ /area/maintenance/bridge/aftport) "xE" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/foreport) "xF" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/foreport) "xJ" = ( /obj/structure/ladder, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/catwalk, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/foreport) @@ -9482,7 +9399,7 @@ /turf/simulated/open, /area/maintenance/bridge/forestarboard) "xP" = ( -/obj/effect/landmark/map_data{ +/obj/landmark/map_data{ height = 6 }, /turf/space, @@ -9497,7 +9414,7 @@ tag_exterior_sensor = "aquila_shuttle_sensor_external" }, /obj/structure/handrail, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ @@ -9507,7 +9424,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/aquila/airlock) "xR" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow{ d1 = 1; d2 = 4; @@ -9518,7 +9435,7 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/bridge) "xU" = ( /obj/structure/cable/green{ @@ -9526,7 +9443,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/b_green{ +/obj/floor_decal/corner/b_green{ dir = 1 }, /turf/simulated/floor/tiled, @@ -9538,7 +9455,7 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 4 }, /turf/simulated/floor/tiled, @@ -9552,7 +9469,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -9567,7 +9484,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/bridge/fore) "xY" = ( @@ -9577,7 +9494,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/bridge/fore) "xZ" = ( @@ -9587,7 +9504,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/bridge/fore) "yb" = ( @@ -9597,7 +9514,7 @@ icon_state = "4-8" }, /obj/machinery/light, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -9608,7 +9525,7 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/forestarboard) "yd" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "meeting_windows" }, /obj/structure/cable/green{ @@ -9618,7 +9535,7 @@ /turf/simulated/floor/plating, /area/bridge/meeting_room) "yf" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "bridge_starboard" }, /obj/structure/cable/green, @@ -9633,19 +9550,19 @@ /turf/simulated/wall/prepainted, /area/crew_quarters/heads/office/xo) "yh" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "bottom-center" }, /turf/simulated/floor/tiled/dark, /area/bridge) "yi" = ( -/obj/effect/floor_decal/corner/red/full, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/red/full, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/suit_storage_unit/security/alt, /turf/simulated/floor/tiled/dark, /area/aux_eva) "yk" = ( -/obj/effect/paint/red, +/obj/paint/red, /turf/simulated/wall/titanium, /area/aquila/medical) "yl" = ( @@ -9657,7 +9574,7 @@ /obj/structure/table/standard{ name = "plastic table frame" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/item/reagent_containers/food/drinks/cans/waterbottle, @@ -9668,7 +9585,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/heads/office/sea) "yw" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/table/glass, /obj/item/sticky_pad/random, /obj/item/storage/box/cups, @@ -9702,13 +9619,13 @@ /turf/simulated/open, /area/maintenance/bridge/aftport) "yA" = ( -/obj/effect/shuttle_landmark/skipjack/deck1{ +/obj/shuttle_landmark/skipjack/deck1{ name = "B-Deck, Port" }, /turf/space, /area/space) "yB" = ( -/obj/effect/shuttle_landmark/torch/deck1/guppy{ +/obj/shuttle_landmark/torch/deck1/guppy{ name = "B-Deck, Aft Starboard" }, /turf/space, @@ -9728,7 +9645,7 @@ /obj/machinery/suit_storage_unit/standard_unit{ req_access = newlist() }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/safe_room/bridge) "yM" = ( @@ -9771,7 +9688,7 @@ /area/crew_quarters/heads/office/cl) "yV" = ( /obj/random/closet, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/random/maintenance/solgov/clean, /obj/random/maintenance/solgov/clean, /turf/simulated/floor/tiled/techfloor, @@ -9785,7 +9702,7 @@ /turf/simulated/floor/carpet, /area/crew_quarters/heads/office/xo) "zb" = ( -/obj/effect/shuttle_landmark/merc/deck1{ +/obj/shuttle_landmark/merc/deck1{ name = "B-Deck, Aft" }, /turf/space, @@ -9819,7 +9736,7 @@ /area/bridge) "zh" = ( /obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "bridge_port" }, /turf/simulated/floor/plating, @@ -9831,7 +9748,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/extinguisher_cabinet{ pixel_y = -32 }, @@ -9850,10 +9767,10 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/forestarboard) "zw" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 9 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/aquila/storage) "zx" = ( @@ -9871,8 +9788,8 @@ /turf/simulated/floor/plating, /area/space) "zz" = ( -/obj/effect/floor_decal/corner/white/full, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/white/full, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/suit_storage_unit/command, /obj/machinery/light{ dir = 4; @@ -9890,7 +9807,7 @@ /obj/item/storage/box/lights/mixed, /obj/random/coin, /obj/random/firstaid, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/sign/warning/nosmoking_1{ pixel_x = 2; pixel_y = 24 @@ -9906,7 +9823,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/corner/blue, +/obj/floor_decal/corner/blue, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "zM" = ( @@ -9935,7 +9852,7 @@ /turf/simulated/floor/plating, /area/security/bridgecheck) "zN" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 8 }, /obj/structure/cable/green{ @@ -9967,13 +9884,13 @@ /turf/simulated/open, /area/maintenance/bridge/aftport) "zT" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/office/xo) "zV" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -10002,11 +9919,11 @@ name = "Bridge Deck Hallway Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/fore) "Ab" = ( -/obj/effect/shuttle_landmark/ninja/deck1{ +/obj/shuttle_landmark/ninja/deck1{ name = "B-Deck, Aft Port" }, /turf/space, @@ -10029,11 +9946,11 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/dark/monotile, /area/aquila/storage) "Af" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/structure/cable/green{ @@ -10044,8 +9961,8 @@ /turf/simulated/floor/tiled/dark, /area/bridge) "Ag" = ( -/obj/effect/paint/hull, -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ density = 0; dir = 4; @@ -10063,7 +9980,7 @@ /turf/simulated/floor/carpet/blue2, /area/bridge/meeting_room) "Ai" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -10081,7 +9998,7 @@ /obj/machinery/computer/ship/navigation{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 8 }, /turf/simulated/floor/tiled/dark, @@ -10095,9 +10012,6 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/co) "Ao" = ( -/obj/structure/bed/chair/padded/green{ - dir = 1 - }, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -10105,10 +10019,13 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/bed/chair/padded/purple{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/crew_quarters/heads/office/rd) "Ap" = ( -/obj/effect/floor_decal/corner/blue, +/obj/floor_decal/corner/blue, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -10124,7 +10041,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/structure/cable/green{ @@ -10156,13 +10073,13 @@ dir = 8; pixel_x = 24 }, -/obj/effect/floor_decal/corner/red/half, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/red/half, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/fore) "AA" = ( -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 4 }, /obj/structure/table/standard{ @@ -10184,7 +10101,7 @@ icon_state = "0-4" }, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/blast/regular/open{ dir = 4; id_tag = "bridge blast"; @@ -10207,11 +10124,11 @@ /turf/simulated/floor/tiled/dark/monotile, /area/aquila/airlock) "AE" = ( -/obj/structure/bed/chair/comfy/green, +/obj/structure/bed/chair/comfy/purple, /turf/simulated/floor/tiled, /area/crew_quarters/heads/office/rd) "AH" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "bridge_starboard" }, /obj/structure/cable/green{ @@ -10226,7 +10143,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/blast/shutters{ density = 0; dir = 2; @@ -10252,7 +10169,7 @@ name = "Port Bridge Blast Doors"; opacity = 0 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/airlock/multi_tile/glass/command{ autoset_access = 0; dir = 8; @@ -10263,7 +10180,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/bridge/hallway/port) "AN" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled/dark/monotile, @@ -10272,7 +10189,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled, @@ -10288,7 +10205,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/bridge/fore) "AZ" = ( @@ -10299,7 +10216,7 @@ name = "Chief Engineer RC"; pixel_x = 32 }, -/obj/effect/floor_decal/corner/yellow/mono, +/obj/floor_decal/corner/yellow/mono, /obj/item/modular_computer/tablet/lease/preset/command, /obj/machinery/computer/modular/preset/cardslot/command_eng{ dir = 8 @@ -10322,7 +10239,7 @@ /area/aquila/medical) "Bd" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/maintenance/bridge/forestarboard) "Bf" = ( @@ -10337,7 +10254,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/brown/half{ +/obj/floor_decal/corner/brown/half{ dir = 4 }, /obj/item/device/radio/intercom{ @@ -10347,8 +10264,8 @@ /turf/simulated/floor/tiled/dark/monotile, /area/aquila/airlock) "Bp" = ( -/obj/effect/floor_decal/corner/red/full, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/red/full, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/suit_storage_unit/security/alt, /obj/machinery/light{ dir = 8; @@ -10373,16 +10290,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/camera/network/bridge{ - c_tag = "Command Hallway - Center Starboard"; + c_tag = "Command Hallway - Aft Starboard"; dir = 1 }, /turf/simulated/floor/plating, /area/hallway/primary/bridge/fore) "BE" = ( /obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/button/blast_door{ id_tag = "bridge blast"; name = "Bridge Window Lockdown Control"; @@ -10424,7 +10341,7 @@ icon_state = "0-2" }, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/blast/regular/open{ dir = 4; id_tag = "cap_window"; @@ -10437,7 +10354,7 @@ dir = 4; start_pressure = 5000 }, -/obj/effect/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techfloor, /area/aquila/power) "BR" = ( @@ -10462,7 +10379,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/structure/catwalk, @@ -10478,11 +10395,11 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) @@ -10493,13 +10410,13 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "Cb" = ( -/obj/effect/shuttle_landmark/torch/deck1/aquila{ +/obj/shuttle_landmark/torch/deck1/aquila{ name = "B-Deck, Fore Starboard" }, /turf/space, @@ -10530,7 +10447,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/cl) "Ce" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -10547,7 +10464,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -10566,7 +10483,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/cable/cyan{ d1 = 2; d2 = 8; @@ -10578,7 +10495,7 @@ /obj/structure/bed/chair/comfy/captain{ dir = 8 }, -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "center-left" }, /obj/structure/cable/green{ @@ -10599,16 +10516,16 @@ /turf/simulated/floor/tiled/dark, /area/bridge) "Ci" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal{ +/obj/floor_decal/corner/paleblue/diagonal{ dir = 4 }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/suit_storage_unit/medical/alt/sol, /turf/simulated/floor/tiled/dark, /area/aux_eva) "Ck" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/structure/bed/chair/comfy/blue{ @@ -10650,7 +10567,7 @@ /turf/simulated/open, /area/maintenance/bridge/aftport) "Cr" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ +/obj/floor_decal/spline/fancy/wood/corner{ dir = 4 }, /turf/simulated/floor/wood/walnut, @@ -10662,7 +10579,7 @@ /obj/machinery/newscaster{ pixel_y = -32 }, -/obj/effect/floor_decal/corner/yellow/mono, +/obj/floor_decal/corner/yellow/mono, /obj/machinery/photocopier, /turf/simulated/floor/tiled/monotile, /area/crew_quarters/heads/office/ce) @@ -10675,7 +10592,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "cmo_windows" }, /obj/structure/cable/green, @@ -10691,7 +10608,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/cobed) "CD" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ density = 0; dir = 4; @@ -10700,12 +10617,12 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/floor/plating, /area/aquila/airlock) "CE" = ( /obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -10739,7 +10656,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8; icon_state = "warningcorner" }, @@ -10757,7 +10674,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/structure/disposalpipe/junction, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/aft) @@ -10783,7 +10700,7 @@ name = "Bridge Interior Hallway Shutters"; opacity = 0 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/hallway/port) @@ -10814,7 +10731,7 @@ /turf/simulated/floor/carpet/green, /area/crew_quarters/heads/office/cl/backroom) "Dq" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack{ dir = 8 }, @@ -10825,8 +10742,8 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/item/tank/oxygen_emergency_double, @@ -10846,7 +10763,7 @@ /area/hallway/primary/bridge/fore) "Dt" = ( /obj/structure/dispenser/oxygen, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/rotating_alarm/security_alarm{ dir = 1 }, @@ -10857,13 +10774,12 @@ pixel_x = 32 }, /obj/structure/table/rack, -/obj/item/aicard, /obj/item/pinpointer, /obj/item/storage/toolbox/mechanical, /obj/item/device/multitool, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/item/device/destTagger, -/obj/item/stack/package_wrap/twenty_five, +/obj/item/stack/package_wrap/cargo_wrap, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/storage) "Dw" = ( @@ -10874,7 +10790,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "co_windows" }, /turf/simulated/floor/plating, @@ -10882,11 +10798,11 @@ "DE" = ( /obj/structure/cable/green, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /turf/simulated/floor/plating, /area/bridge/storage) "DH" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -10909,7 +10825,7 @@ /area/crew_quarters/heads/cobed) "DV" = ( /obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/structure/sign/double/solgovflag/right{ @@ -10947,9 +10863,6 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/sgr) "Eb" = ( -/obj/machinery/camera/network/engineering{ - c_tag = "Shield Generator - Bridge Deck" - }, /obj/machinery/alarm{ dir = 4; pixel_x = -22 @@ -10958,10 +10871,10 @@ /turf/simulated/floor/plating, /area/shield/bridge) "Ec" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 6 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "El" = ( /obj/structure/cable/green{ @@ -10981,14 +10894,14 @@ icon_state = "2-8" }, /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/aft) "En" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/dark, @@ -10999,7 +10912,7 @@ name = "west bump"; pixel_x = -24 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/structure/cable/green{ d2 = 4; icon_state = "0-4" @@ -11018,7 +10931,7 @@ "Es" = ( /obj/structure/cable/green, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/blast/regular/open{ dir = 4; id_tag = "bridge blast"; @@ -11034,22 +10947,22 @@ "Ey" = ( /obj/machinery/light, /obj/machinery/disposal, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/blue/mono, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 4 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/aft) "Ez" = ( -/obj/effect/paint/red, +/obj/paint/red, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 6 }, /turf/simulated/wall/titanium, /area/aquila/power) "EJ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /turf/simulated/floor/wood/walnut, @@ -11059,18 +10972,18 @@ /turf/simulated/wall/prepainted, /area/crew_quarters/heads/office/xo) "EN" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/sign/goldenplaque/medical{ pixel_y = -32 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "EP" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/closet/secure_closet/CMO_torch, /obj/item/storage/belt/medical, /obj/item/book/manual/sol_sop, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/firealarm{ dir = 4; pixel_x = 21 @@ -11078,7 +10991,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "EV" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -11101,7 +11014,7 @@ dir = 4 }, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -11120,7 +11033,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/bridge/fore) "Fc" = ( @@ -11146,11 +11059,13 @@ pixel_x = 23; pixel_y = 6 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/aquila/airlock) "Ff" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/item/device/radio, /obj/item/crowbar/prybar, /obj/item/device/binoculars, @@ -11168,7 +11083,7 @@ /turf/simulated/floor/carpet/blue, /area/crew_quarters/heads/office/co) "Fi" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/tiled/dark/monotile, /area/aux_eva) @@ -11197,7 +11112,7 @@ /turf/simulated/floor/carpet/blue, /area/crew_quarters/heads/office/co) "Fn" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 4; icon_state = "bottom-center" }, @@ -11217,7 +11132,7 @@ dir = 4; icon_state = "console" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /turf/simulated/floor/tiled/dark, @@ -11226,14 +11141,14 @@ /turf/simulated/open, /area/maintenance/bridge/foreport) "FA" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark/monotile, /area/aquila/storage) "FE" = ( /obj/machinery/computer/modular/preset/engineering{ dir = 1 }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/dark/monotile, /area/bridge) "FG" = ( @@ -11250,7 +11165,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/xo) "FK" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/aquila/airlock) "FL" = ( @@ -11267,15 +11182,15 @@ dir = 4 }, /obj/machinery/camera/network/bridge{ - c_tag = "Command Hallway - Center Port" + c_tag = "Command Hallway - Aft Port" }, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 4 }, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "FX" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/structure/bed/chair/padded/blue, @@ -11285,7 +11200,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/disciplinary_board_room) "Ga" = ( -/obj/effect/floor_decal/corner/yellow{ +/obj/floor_decal/corner/yellow{ dir = 10 }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, @@ -11307,7 +11222,7 @@ "Gb" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 5 }, /obj/structure/cable/green{ @@ -11318,7 +11233,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "Gc" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, @@ -11366,7 +11281,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/hallway/primary/bridge/fore) @@ -11396,7 +11311,7 @@ /obj/structure/extinguisher_cabinet{ pixel_y = 28 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -11406,7 +11321,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "cl_windows" }, /turf/simulated/floor/plating, @@ -11460,7 +11375,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -11472,7 +11387,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/bridge/fore) "GG" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/dark/monotile, @@ -11507,7 +11422,7 @@ dir = 4; icon_state = "console" }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/dark/monotile, /area/bridge) "GW" = ( @@ -11560,7 +11475,7 @@ icon_state = "0-2" }, /obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "cl_windows" }, /turf/simulated/floor/plating, @@ -11575,7 +11490,8 @@ /obj/item/folder/nt, /obj/item/folder/yellow, /obj/item/folder/white, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/paper/dclassreport1, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/storage) "Hg" = ( @@ -11653,7 +11569,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "xo_windows" }, /obj/machinery/door/blast/shutters{ @@ -11682,7 +11598,7 @@ name = "Starboard Bridge Blast Doors"; opacity = 0 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/airlock/multi_tile/glass/command{ autoset_access = 0; dir = 8; @@ -11704,7 +11620,7 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/heads/cobed) "Hv" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "meeting_windows" }, /obj/structure/cable/green, @@ -11755,7 +11671,7 @@ icon_state = "0-2" }, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/blast/regular/open{ dir = 4; id_tag = "bridge blast"; @@ -11781,7 +11697,7 @@ /turf/simulated/wall/r_wall/hull, /area/bridge) "HF" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/structure/cable/green{ @@ -11800,7 +11716,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/door/airlock/research{ +/obj/machinery/door/airlock/corporate{ id_tag = "liaisondoor3"; name = "Corporate Liaison"; secured_wires = 1 @@ -11808,7 +11724,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/cl) "HH" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "top-left" }, /obj/structure/cable/green{ @@ -11840,7 +11756,7 @@ /turf/simulated/floor/carpet/blue2, /area/crew_quarters/heads/office/sgr) "HK" = ( -/obj/effect/overmap/visitable/ship/torch, +/obj/overmap/visitable/ship/torch, /turf/simulated/floor/tiled/dark, /area/bridge) "HP" = ( @@ -11848,7 +11764,7 @@ dir = 1; icon_state = "console" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/structure/cable/green{ @@ -11859,7 +11775,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/bridge) "HS" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 4 }, /obj/structure/cable/green{ @@ -11933,8 +11849,8 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, /turf/simulated/floor/plating, /area/aquila/cockpit) "Id" = ( @@ -11949,7 +11865,7 @@ /turf/simulated/wall/r_wall/hull, /area/bridge) "If" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 8 }, /obj/structure/cable/green{ @@ -11998,7 +11914,7 @@ pixel_x = -25; pixel_y = -1 }, -/obj/effect/floor_decal/techfloor/orange{ +/obj/floor_decal/techfloor/orange{ dir = 9 }, /obj/machinery/light_switch{ @@ -12008,7 +11924,7 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/bridge) "In" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 10 }, /obj/structure/cable/green{ @@ -12024,7 +11940,7 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/office/co) "Io" = ( -/obj/effect/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood, /obj/machinery/requests_console{ announcementConsole = 1; department = "Captain's Desk"; @@ -12053,7 +11969,7 @@ /obj/item/book/manual/solgov_law, /obj/item/book/manual/sol_sop, /obj/item/book/manual/military_law, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/heads/office/sea) "Is" = ( @@ -12091,12 +12007,9 @@ /turf/simulated/floor/carpet/green, /area/crew_quarters/heads/office/cl) "Iz" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, -/obj/machinery/camera/network/command{ - c_tag = "CO - Quarters" - }, /obj/machinery/recharger/wallcharger{ pixel_y = 24 }, @@ -12137,7 +12050,7 @@ /obj/machinery/photocopier/faxmachine{ department = "Torch - Senior Enlisted Advisor" }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/requests_console{ announcementConsole = 1; department = "Senior Enlisted Advisor's Desk"; @@ -12152,11 +12065,11 @@ dir = 8; start_pressure = 450 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/safe_room/bridge) "IG" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -12181,7 +12094,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/cobed) "IJ" = ( -/obj/effect/paint/red, +/obj/paint/red, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 9 }, @@ -12201,7 +12114,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/bridge/fore) "IL" = ( -/obj/effect/paint/red, +/obj/paint/red, /obj/machinery/atmospherics/pipe/manifold4w/hidden/fuel, /turf/simulated/wall/titanium, /area/aquila/power) @@ -12222,20 +12135,26 @@ pixel_y = 28; req_access = list("ACCESS_RESEARCH_DIRECTOR") }, -/obj/effect/floor_decal/corner/research/half{ +/obj/floor_decal/corner/research/half{ dir = 1 }, +/obj/machinery/button/windowtint{ + id = "rd_windows"; + pixel_x = 28; + pixel_y = 18; + range = 11 + }, /turf/simulated/floor/tiled/monotile, /area/crew_quarters/heads/office/rd) "IW" = ( -/obj/effect/floor_decal/corner/yellow/full, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/yellow/full, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/suit_storage_unit/atmos/alt/sol, /turf/simulated/floor/tiled/dark, /area/aux_eva) "IY" = ( /obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/cable/green{ @@ -12285,20 +12204,20 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/foreport) "Jj" = ( -/obj/structure/bed/chair/padded/green{ +/obj/structure/bed/chair/padded/purple{ dir = 1 }, /turf/simulated/floor/tiled, /area/crew_quarters/heads/office/rd) "Jo" = ( -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/disciplinary_board_room) "Jp" = ( /obj/machinery/atmospherics/unary/tank/air{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/plating, /area/maintenance/bridge/forestarboard) "Jt" = ( @@ -12313,7 +12232,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -12349,13 +12268,13 @@ /turf/simulated/open, /area/maintenance/bridge/foreport) "JT" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/random_multi/single_item/piano, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/forestarboard) "JV" = ( /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline, +/obj/floor_decal/industrial/outline, /obj/machinery/portable_atmospherics/canister/air/airlock{ start_pressure = 1900 }, @@ -12363,7 +12282,7 @@ /area/aquila/air) "Ka" = ( /obj/structure/cable/green, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "cl_windows" }, /turf/simulated/floor/plating, @@ -12379,7 +12298,7 @@ pixel_y = 32 }, /obj/structure/handrail, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/hidden{ @@ -12398,7 +12317,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/storage) "Kf" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/table/glass, /obj/random_multi/single_item/memo_medical, /turf/simulated/floor/tiled/white, @@ -12411,16 +12330,11 @@ /obj/machinery/keycard_auth/torch{ pixel_x = 26 }, -/obj/item/storage/box/matches, +/obj/item/storage/fancy/matches/matchbox, /obj/random/smokes, /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/co) "Kj" = ( -/obj/machinery/camera/network/command{ - c_tag = "Chief Science Officer - Office"; - dir = 8; - network = list("Command","Research") - }, /obj/machinery/papershredder, /turf/simulated/floor/tiled/monotile, /area/crew_quarters/heads/office/rd) @@ -12473,7 +12387,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/storage) "Kt" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "bottom-left" }, /obj/structure/cable/green{ @@ -12489,7 +12403,7 @@ pixel_x = 24 }, /obj/machinery/disposal, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -12540,7 +12454,7 @@ icon_state = "0-4" }, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/blast/regular/open{ dir = 4; id_tag = "bridge blast"; @@ -12566,7 +12480,7 @@ /turf/simulated/floor/tiled/white/monotile, /area/aquila/medical) "KP" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/table/glass, /obj/machinery/photocopier/faxmachine{ department = "Torch - Chief Medical Officer" @@ -12579,7 +12493,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "KX" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/dark, @@ -12598,7 +12512,7 @@ /turf/simulated/wall/r_wall/prepainted, /area/hallway/primary/bridge/fore) "Lb" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -12637,11 +12551,11 @@ /obj/structure/handrail{ dir = 1 }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/techfloor/grid, /area/aquila/airlock) "Lh" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -12654,7 +12568,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 5 }, /obj/machinery/tele_beacon, @@ -12678,7 +12592,7 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/aftstarboard) "Ll" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -12700,16 +12614,15 @@ dir = 4 }, /obj/structure/catwalk, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/simulated/floor/plating, /area/maintenance/bridge/foreport) "Lv" = ( /obj/structure/table/glass, -/obj/item/book/manual/nt_regs, /obj/item/stamp/rd, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 5 }, /turf/simulated/floor/tiled, @@ -12743,7 +12656,7 @@ pixel_y = -33; req_access = list("ACCESS_BRIDGE") }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/structure/cable/green{ @@ -12782,7 +12695,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/storage) "LQ" = ( -/obj/effect/paint/red, +/obj/paint/red, /obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ dir = 1 }, @@ -12826,7 +12739,7 @@ /turf/simulated/open, /area/maintenance/bridge/foreport) "Mb" = ( -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 4 }, /obj/machinery/firealarm{ @@ -12845,7 +12758,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/co) "Mh" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 4; icon_state = "top-left" }, @@ -12881,7 +12794,7 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/aftstarboard) "Mn" = ( -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/machinery/requests_console{ announcementConsole = 1; department = "Chief of Security's Desk"; @@ -12908,7 +12821,7 @@ "Mr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/hallway/primary/bridge/fore) "Mw" = ( @@ -12923,10 +12836,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/dark, /area/aquila/crew) "Mz" = ( @@ -12940,7 +12853,7 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/aftstarboard) "MK" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/aquila/air) "MU" = ( @@ -12948,7 +12861,7 @@ pixel_y = 32 }, /obj/structure/handrail, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -12969,14 +12882,14 @@ /obj/structure/bed/chair/comfy/captain{ dir = 1 }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/disciplinary_board_room) "Nc" = ( /obj/structure/handrail{ dir = 1 }, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -12993,7 +12906,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "cl_windows" }, /turf/simulated/floor/plating, @@ -13071,8 +12984,8 @@ }, /obj/machinery/atmospherics/valve/shutoff/scrubbers, /obj/machinery/atmospherics/valve/shutoff/supply, -/obj/effect/floor_decal/industrial/shutoff, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/industrial/shutoff, +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled, @@ -13155,20 +13068,20 @@ /turf/simulated/floor/tiled/dark, /area/security/bridgecheck) "NH" = ( -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/structure/bed/chair/comfy/beige{ dir = 4 }, /turf/simulated/floor/tiled/dark/monotile, /area/crew_quarters/heads/office/xo) "NL" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/structure/closet/secure_closet/guncabinet/sidearm/combined, +/obj/structure/closet/secure_closet/guncabinet/sidearm, /obj/structure/sign/warning/nosmoking_1{ dir = 4; pixel_x = -37 @@ -13192,7 +13105,7 @@ /turf/simulated/floor/carpet/blue, /area/crew_quarters/heads/office/co) "NW" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -13217,7 +13130,7 @@ pixel_x = 32; pixel_y = -32 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced, /area/space) "Od" = ( /obj/machinery/power/apc{ @@ -13229,10 +13142,10 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, -/obj/effect/floor_decal/spline/plain/beige{ +/obj/floor_decal/spline/plain/beige{ dir = 1 }, /turf/simulated/floor/tiled/dark, @@ -13275,7 +13188,7 @@ name = "Bridge Deck Hallway Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/fore) @@ -13294,7 +13207,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/structure/cable/green{ @@ -13340,20 +13253,20 @@ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 8 }, /turf/simulated/floor/tiled/dark, /area/security/bridgecheck) "Oq" = ( -/obj/effect/paint/red, +/obj/paint/red, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 4 }, /turf/simulated/wall/titanium, /area/aquila/medical) "Os" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled, @@ -13392,7 +13305,7 @@ /turf/simulated/floor/carpet/green, /area/crew_quarters/heads/office/cl) "OD" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/dark, @@ -13406,7 +13319,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "cl_windows" }, /turf/simulated/floor/plating, @@ -13415,13 +13328,13 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/aftport) "OM" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/co) "OO" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/bed/chair/comfy/teal{ dir = 1 }, @@ -13443,8 +13356,10 @@ /area/maintenance/bridge/forestarboard) "OX" = ( /obj/machinery/shipsensors, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/airless, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor{ + map_airless = 1 + }, /area/aquila/air) "Pb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -13453,7 +13368,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/cable/cyan{ @@ -13472,16 +13387,10 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/smes/buildable{ - RCon_tag = "Solar - Bridge"; - capacity = 1e+007; - dir = 4 - }, /obj/item/device/radio/intercom{ pixel_y = 23 }, -/obj/machinery/camera/network/engineering{ - c_tag = "Solar Control - Bridge"; +/obj/machinery/power/smes/buildable/preset/torch/bridge_solar{ dir = 4 }, /turf/simulated/floor/plating, @@ -13491,7 +13400,7 @@ dir = 4; pixel_x = -21 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, /turf/simulated/floor/tiled/monotile, @@ -13515,7 +13424,7 @@ /obj/random/firstaid, /obj/random/medical, /obj/random/drinkbottle, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 10 }, /turf/simulated/floor/tiled/techfloor, @@ -13535,10 +13444,6 @@ /area/hallway/primary/bridge/fore) "Pl" = ( /obj/structure/closet/secure_closet/liaison, -/obj/machinery/camera/network/command{ - c_tag = "Corporate Liaison - Backroom"; - dir = 8 - }, /turf/simulated/floor/carpet/green, /area/crew_quarters/heads/office/cl/backroom) "Pn" = ( @@ -13564,21 +13469,17 @@ dir = 1; pixel_y = -24 }, -/obj/machinery/camera/network/command{ - c_tag = "CO - Office Starboard"; - dir = 1 - }, /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/co) "PA" = ( -/obj/effect/paint/red, +/obj/paint/red, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 4 }, /turf/simulated/wall/titanium, /area/aquila/storage) "PB" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /obj/structure/sign/thera{ @@ -13595,10 +13496,10 @@ /turf/simulated/floor/plating, /area/aquila/air) "PP" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/aquila/storage) "PU" = ( @@ -13621,7 +13522,7 @@ d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/corner/orange/half{ +/obj/floor_decal/corner/orange/half{ dir = 4 }, /obj/machinery/light_switch{ @@ -13644,7 +13545,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/effect/shuttle_landmark/torch/hangar/aquila, +/obj/shuttle_landmark/torch/hangar/aquila, /obj/structure/cable/cyan{ d1 = 1; d2 = 2; @@ -13698,8 +13599,8 @@ pixel_y = 6; req_access = list("ACCESS_HEAD_OF_PERSONNEL") }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/spline/plain/beige{ +/obj/floor_decal/corner/blue/mono, +/obj/floor_decal/spline/plain/beige{ dir = 1 }, /turf/simulated/floor/tiled/dark/monotile, @@ -13716,7 +13617,7 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/b_green{ +/obj/floor_decal/corner/b_green{ dir = 4 }, /obj/structure/cable/green{ @@ -13727,11 +13628,11 @@ /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "Qf" = ( -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/safe_room/bridge) "Qg" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 4 }, /obj/structure/bed/chair, @@ -13742,10 +13643,11 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/random_multi/single_item/punitelli, /turf/simulated/floor/tiled/dark, /area/bridge/disciplinary_board_room) "Qh" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack{ dir = 8 }, @@ -13802,7 +13704,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -13812,7 +13714,7 @@ /area/bridge/meeting_room) "Qw" = ( /obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/structure/cable/green{ @@ -13841,7 +13743,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/aquila/airlock) "QE" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -13850,7 +13752,7 @@ /turf/simulated/floor/tiled/dark, /area/aux_eva) "QF" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/aquila/suits) "QK" = ( @@ -13866,7 +13768,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/hallway/primary/bridge/fore) "QL" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -13916,7 +13818,7 @@ /obj/machinery/computer/ship/engines{ dir = 4 }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/dark/monotile, /area/bridge) "QX" = ( @@ -13952,7 +13854,7 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/forestarboard) "Ra" = ( -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/computer/modular/preset/security, /turf/simulated/floor/tiled/dark/monotile, /area/bridge) @@ -13979,7 +13881,7 @@ /obj/item/device/radio/intercom{ pixel_y = 23 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -13997,7 +13899,7 @@ /turf/simulated/floor/carpet/blue2, /area/crew_quarters/heads/office/sgr) "Rg" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -14012,13 +13914,13 @@ pixel_x = -32; pixel_y = 32 }, -/turf/simulated/floor/airless, +/turf/simulated/floor, /area/solar/bridge) "Rh" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -14054,12 +13956,6 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/aftstarboard) "Rj" = ( -/obj/machinery/button/windowtint{ - id = "rd_windows"; - pixel_x = 6; - pixel_y = -24; - range = 11 - }, /obj/machinery/light_switch{ pixel_x = -6; pixel_y = -24 @@ -14092,7 +13988,7 @@ dir = 4; req_access = list(list("ACCESS_TORCH_HELM")) }, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -14119,7 +14015,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/bridge/storage) "Rz" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -14136,12 +14032,12 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "RD" = ( -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/alarm{ dir = 8; pixel_x = 24 @@ -14149,7 +14045,7 @@ /obj/structure/reagent_dispensers/water_cooler{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/disciplinary_board_room) "RE" = ( @@ -14165,13 +14061,13 @@ dir = 8; pixel_x = 20 }, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 4 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/fore) "RH" = ( -/obj/effect/paint/red, +/obj/paint/red, /turf/simulated/wall/titanium, /area/aquila/storage) "RK" = ( @@ -14200,7 +14096,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "sea_windows" }, /turf/simulated/floor/plating, @@ -14208,7 +14104,7 @@ "RU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/machinery/light{ dir = 8; icon_state = "tube1" @@ -14223,7 +14119,7 @@ }, /obj/structure/cable/green, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/blast/regular/open{ dir = 4; id_tag = "cap_window"; @@ -14289,7 +14185,7 @@ /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/bridge/aft) "Sh" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -14302,7 +14198,7 @@ dir = 8; pixel_x = 24 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -14310,7 +14206,7 @@ /turf/simulated/floor/tiled/monotile, /area/crew_quarters/heads/office/rd) "Sn" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/machinery/newscaster/security_unit{ @@ -14323,11 +14219,11 @@ /area/bridge/meeting_room) "So" = ( /obj/machinery/atmospherics/unary/tank/air, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/plating, /area/aquila/air) "SA" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /obj/machinery/door/blast/regular/open{ density = 0; dir = 4; @@ -14336,7 +14232,7 @@ name = "Protective Shutters"; opacity = 0 }, -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/floor/plating, /area/aquila/cockpit) "SB" = ( @@ -14345,7 +14241,7 @@ /obj/item/device/tape/random, /obj/item/device/tape/random, /obj/item/device/taperecorder, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/disciplinary_board_room) "SE" = ( @@ -14355,7 +14251,7 @@ icon_state = "0-4" }, /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced/hull, +/obj/wallframe_spawn/reinforced/hull, /obj/machinery/door/blast/regular/open{ dir = 4; id_tag = "bridge blast"; @@ -14377,7 +14273,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/cobed) "SJ" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/structure/cable/green{ @@ -14401,7 +14297,7 @@ /turf/simulated/floor/carpet/blue2, /area/crew_quarters/heads/office/sgr) "SN" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled, @@ -14410,7 +14306,9 @@ /obj/machinery/atmospherics/unary/engine{ dir = 1 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/aquila/storage) "SU" = ( /obj/structure/cable/green{ @@ -14418,7 +14316,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -14449,16 +14347,16 @@ /obj/structure/noticeboard{ pixel_x = -32 }, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 8 }, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "Tb" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 5 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/aquila/storage) "Tc" = ( @@ -14490,8 +14388,8 @@ pixel_x = -12; pixel_y = 24 }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled/techfloor/grid, @@ -14501,7 +14399,7 @@ /area/bridge/meeting_room) "Tf" = ( /obj/structure/table/woodentable_reinforced/walnut/maple, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/alarm{ dir = 4; pixel_x = -23 @@ -14535,7 +14433,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/hallway/primary/bridge/aft) "Th" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, @@ -14550,19 +14448,16 @@ dir = 4; icon_state = "tube1" }, -/obj/machinery/camera/network/command{ - c_tag = "EVA - Command" - }, /turf/simulated/floor/tiled/dark/monotile, /area/aux_eva) "Ti" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/industrial/outline/grey, +/obj/floor_decal/corner/research/mono, /obj/structure/closet/secure_closet/RD_torch, /turf/simulated/floor/tiled/monotile, /area/crew_quarters/heads/office/rd) "Tj" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/structure/table/rack, @@ -14577,7 +14472,7 @@ /obj/structure/bed/chair/padded/blue{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /obj/machinery/rotating_alarm/security_alarm{ @@ -14614,16 +14509,18 @@ name = "Bridge Deck Hallway Shutters"; opacity = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/fore) "TA" = ( /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/techfloor, /area/maintenance/bridge/forestarboard) "TB" = ( -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/bridge/storage) "TI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -14634,7 +14531,7 @@ /area/bridge/storage) "TJ" = ( /obj/structure/bed/chair/padded/blue, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 1 }, /obj/structure/sign/double/solgovflag/right{ @@ -14643,7 +14540,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/disciplinary_board_room) "TK" = ( -/obj/effect/floor_decal/corner/blue/three_quarters, +/obj/floor_decal/corner/blue/three_quarters, /obj/structure/cable/green{ d1 = 1; d2 = 4; @@ -14681,7 +14578,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/bridge/storage) "TQ" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -14696,7 +14593,7 @@ /turf/simulated/floor/tiled/dark, /area/aux_eva) "TT" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /obj/item/modular_computer/telescreen/preset/medical{ @@ -14712,7 +14609,7 @@ /area/bridge/disciplinary_board_room) "Uf" = ( /obj/structure/bed/chair/padded/beige, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/light/small{ dir = 1 @@ -14753,8 +14650,8 @@ name = "CO's suit storage"; req_access = list("ACCESS_CAPTAIN") }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/effect/floor_decal/corner/blue/diagonal{ +/obj/floor_decal/corner/blue/diagonal, +/obj/floor_decal/corner/blue/diagonal{ dir = 4 }, /obj/item/tank/oxygen_emergency_double, @@ -14766,11 +14663,11 @@ pixel_y = 30 }, /obj/machinery/photocopier, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /turf/simulated/floor/tiled/monotile, /area/crew_quarters/heads/office/rd) "Uk" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular/open{ density = 0; @@ -14797,14 +14694,14 @@ /area/crew_quarters/heads/office/cl) "Uu" = ( /obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/dark/monotile, /area/security/bridgecheck) "Ux" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled/dark/monotile, @@ -14829,7 +14726,7 @@ "UC" = ( /obj/structure/closet/firecloset, /obj/item/storage/briefcase/inflatable, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/maintenance/bridge/forestarboard) "UE" = ( @@ -14856,19 +14753,19 @@ dir = 8; pixel_x = 20 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/fore) "UU" = ( -/obj/effect/shuttle_landmark/ert/deck1{ +/obj/shuttle_landmark/ert/deck1{ name = "B-Deck, Fore" }, /turf/space, /area/space) "UW" = ( -/obj/effect/paint/red, +/obj/paint/red, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 10 }, @@ -14891,7 +14788,7 @@ /turf/simulated/floor/wood/walnut, /area/crew_quarters/heads/office/xo) "Vf" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ dir = 4; icon_state = "center-left" }, @@ -14923,7 +14820,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/aquila/airlock) "Vh" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/random_multi/single_item/runtime, /obj/structure/disposalpipe/segment{ dir = 4 @@ -14948,7 +14845,7 @@ pixel_y = 30 }, /obj/item/folder/nt, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /turf/simulated/floor/tiled/monotile, /area/crew_quarters/heads/office/rd) "Vj" = ( @@ -14958,7 +14855,7 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/research{ +/obj/floor_decal/corner/research{ dir = 4 }, /obj/structure/disposalpipe/segment{ @@ -14968,7 +14865,7 @@ /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "Vl" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -14988,7 +14885,7 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "meeting_windows" }, /turf/simulated/floor/plating, @@ -14997,10 +14894,12 @@ /obj/machinery/atmospherics/unary/engine{ dir = 1 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/aquila/power) "Vw" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /obj/structure/cable/green{ @@ -15062,11 +14961,11 @@ /turf/simulated/floor/carpet, /area/crew_quarters/heads/office/xo) "VL" = ( -/obj/effect/floor_decal/corner/red/half, +/obj/floor_decal/corner/red/half, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/bridge/fore) "VN" = ( -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "bridge_port" }, /obj/structure/cable/green{ @@ -15080,7 +14979,7 @@ /turf/simulated/floor/plating, /area/bridge) "VP" = ( -/obj/effect/floor_decal/corner/paleblue{ +/obj/floor_decal/corner/paleblue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -15097,7 +14996,7 @@ pixel_x = 25; pixel_y = -1 }, -/obj/effect/floor_decal/techfloor/orange{ +/obj/floor_decal/techfloor/orange{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -15109,7 +15008,7 @@ /obj/structure/bed/chair/padded/red{ dir = 4 }, -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -15128,7 +15027,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark/monotile, /area/aquila/storage) "We" = ( @@ -15142,14 +15041,14 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/dark, /area/bridge/meeting_room) "Wg" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -15158,7 +15057,7 @@ "Wh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 8 }, /obj/structure/cable/green{ @@ -15176,7 +15075,7 @@ /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/effect/floor_decal/corner/research/mono, +/obj/floor_decal/corner/research/mono, /turf/simulated/floor/tiled/monotile, /area/crew_quarters/heads/office/rd) "Wj" = ( @@ -15184,11 +15083,7 @@ dir = 4; pixel_x = -23 }, -/obj/machinery/camera/network/security{ - c_tag = "Checkpoint - Bridge"; - dir = 4 - }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/dark/monotile, /area/security/bridgecheck) "Wr" = ( @@ -15198,7 +15093,7 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/forestarboard) "Ws" = ( -/obj/effect/paint/red, +/obj/paint/red, /turf/simulated/wall/titanium, /area/aquila/power) "Wt" = ( @@ -15208,26 +15103,22 @@ /obj/structure/handrail{ dir = 8 }, -/obj/machinery/camera/network/aquila{ - c_tag = "Aquila - Docking Port"; - dir = 8 - }, /turf/simulated/floor/tiled/dark/monotile, /area/aquila/airlock) "Wv" = ( /obj/structure/closet/secure_closet/bridgeofficer, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/storage) "Ww" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/aquila/power) "WK" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled, @@ -15241,7 +15132,7 @@ /area/crew_quarters/heads/office/xo) "WW" = ( /obj/structure/table/glass, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -15272,7 +15163,7 @@ "Xa" = ( /obj/structure/closet/firecloset, /obj/item/storage/briefcase/inflatable, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/power/apc/high{ dir = 8; name = "west bump"; @@ -15296,7 +15187,7 @@ /turf/simulated/floor/carpet/blue2, /area/bridge/meeting_room) "Xh" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/table/rack{ dir = 8 }, @@ -15313,7 +15204,7 @@ name = "CoS' suit storage"; req_access = list("ACCESS_HEAD_OF_SECURITY") }, -/obj/effect/floor_decal/corner/red/full, +/obj/floor_decal/corner/red/full, /obj/item/tank/oxygen_emergency_double, /obj/item/rig/command/security/equipped, /turf/simulated/floor/tiled/dark, @@ -15335,12 +15226,12 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /turf/simulated/floor/tiled, /area/hallway/primary/bridge/fore) "Xp" = ( /obj/structure/sign/solgov, -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/aquila/airlock) "Xq" = ( @@ -15362,7 +15253,7 @@ /turf/simulated/open, /area/maintenance/bridge/foreport) "Xx" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/machinery/door/airlock/medical{ id_tag = "cmodoor"; name = "Chief Medical Officer"; @@ -15383,7 +15274,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "Xz" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/structure/closet/secure_closet/guncabinet/PPE, /turf/simulated/floor/tiled/dark/monotile, /area/bridge/storage) @@ -15392,7 +15283,7 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/forestarboard) "XC" = ( -/obj/effect/floor_decal/corner/blue, +/obj/floor_decal/corner/blue, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -15406,7 +15297,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10; icon_state = "warning" }, @@ -15422,7 +15313,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /turf/simulated/floor/tiled/monotile, @@ -15439,14 +15330,16 @@ id_tag = "bridge sensors"; name = "Sensor Shroud" }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, /area/bridge/storage) "XR" = ( /obj/structure/cable/green{ d2 = 2; icon_state = "0-2" }, -/obj/effect/wallframe_spawn/reinforced/polarized{ +/obj/wallframe_spawn/reinforced/polarized{ id = "co_windows" }, /turf/simulated/floor/plating, @@ -15474,7 +15367,7 @@ /turf/simulated/floor/plating, /area/maintenance/bridge/foreport) "Yb" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/titanium, /area/aquila/medical) "Yd" = ( @@ -15517,15 +15410,15 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/hologram/holopad/longrange, /turf/simulated/floor/tiled/dark, /area/bridge/meeting_room) "Yf" = ( -/obj/effect/floor_decal/corner/blue/three_quarters, +/obj/floor_decal/corner/blue/three_quarters, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -15545,7 +15438,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge/disciplinary_board_room) "Yh" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -15569,7 +15462,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning/fulltile, +/obj/floor_decal/industrial/warning/fulltile, /obj/machinery/atm{ pixel_x = 32 }, @@ -15581,7 +15474,7 @@ /area/maintenance/bridge/forestarboard) "Yz" = ( /obj/structure/flora/pottedplant/orientaltree, -/obj/effect/floor_decal/spline/fancy/wood/corner{ +/obj/floor_decal/spline/fancy/wood/corner{ dir = 1 }, /obj/machinery/alarm{ @@ -15624,13 +15517,13 @@ /area/maintenance/bridge/forestarboard) "YJ" = ( /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/red/half{ +/obj/floor_decal/corner/red/half{ dir = 8 }, /turf/simulated/floor/tiled/dark, /area/security/bridgecheck) "YK" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/structure/disposalpipe/segment, @@ -15665,7 +15558,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -15675,7 +15568,7 @@ /turf/simulated/floor/plating, /area/hallway/primary/bridge/aft) "YW" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -15709,9 +15602,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, +/obj/machinery/camera/network/aquila{ + c_tag = "Aquila - Crew Compartment" + }, /turf/simulated/floor/tiled/dark/monotile, /area/aquila/crew) "Zb" = ( @@ -15731,13 +15627,13 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /turf/simulated/floor/tiled/dark, /area/bridge/meeting_room) "Zg" = ( -/obj/effect/floor_decal/scglogo{ +/obj/floor_decal/scglogo{ icon_state = "center-right" }, /obj/structure/cable/green{ @@ -15753,7 +15649,7 @@ /turf/simulated/floor/tiled/dark, /area/bridge) "Zh" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/machinery/suit_cycler/command, /turf/simulated/floor/tiled/dark, /area/aux_eva) @@ -15767,13 +15663,13 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/floor_decal/corner/research/half{ +/obj/floor_decal/corner/research/half{ dir = 1 }, /turf/simulated/floor/tiled/monotile, /area/crew_quarters/heads/office/rd) "Zj" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, @@ -15787,7 +15683,7 @@ /turf/simulated/floor/carpet, /area/crew_quarters/heads/office/xo) "Zt" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /obj/structure/noticeboard{ @@ -15802,14 +15698,14 @@ /obj/machinery/keycard_auth/torch{ pixel_x = 26 }, -/obj/effect/floor_decal/corner/yellow/mono, +/obj/floor_decal/corner/yellow/mono, /obj/machinery/photocopier/faxmachine{ department = "Torch - Chief Engineer" }, /turf/simulated/floor/tiled/monotile, /area/crew_quarters/heads/office/ce) "Zy" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/alarm{ @@ -15828,7 +15724,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/aquila/airlock) "ZB" = ( -/obj/effect/paint/red, +/obj/paint/red, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 4 }, @@ -15847,8 +15743,8 @@ pixel_x = 24 }, /obj/machinery/photocopier, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) "ZJ" = ( @@ -15866,7 +15762,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -15886,7 +15782,7 @@ /area/crew_quarters/heads/office/sea) "ZT" = ( /obj/structure/dogbed, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/random/plushie, @@ -15894,7 +15790,7 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/office/xo) "ZX" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/floor_decal/corner/paleblue/diagonal, /obj/structure/bed/chair/padded/teal, /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/office/cmo) @@ -22655,7 +22551,6 @@ aa aa aa aa -pe aa aa aa @@ -22671,7 +22566,8 @@ aa aa aa aa -pe +aa +aa aa aa aa @@ -22857,24 +22753,24 @@ af af af aa -ae +aa aa aa zx aa aa -kE aa aa aa -kE +aa +aa aa aa zx aa aa -ae -qA +aa +aa tg tg tg @@ -23059,23 +22955,23 @@ af af af af -oA +aa aa aa vA aa aa -hH aa aa aa -ae +aa +aa aa aa vA aa aa -ae +aa tg tg tg @@ -23246,8 +23142,8 @@ aa aa aa aa -aa -aa +kE +ae af af af @@ -23291,8 +23187,8 @@ uy tg tg tg -aa -aa +ae +qN aa aa aa @@ -27522,7 +27418,7 @@ rY sH tt uh -uM +vY Rf vX wD @@ -45287,7 +45183,7 @@ aa aa aa aa -aa +ae aa aa aa @@ -45489,7 +45385,7 @@ aa aa aa aa -aa +pe aa aa aa diff --git a/maps/torch/torch_announcements.dm b/maps/torch/torch_announcements.dm index b8fb6bbe4c716..3d9a8e329670a 100644 --- a/maps/torch/torch_announcements.dm +++ b/maps/torch/torch_announcements.dm @@ -1,40 +1,40 @@ /datum/map/torch emergency_shuttle_docked_message = "Attention all hands: the escape pods are now unlocked. You have %ETD% to board the escape pods." - emergency_shuttle_leaving_dock = "Attention all hands: the escape pods have been launched, arriving at rendezvous point in %ETA%." + emergency_shuttle_leaving_message = "Attention all hands: the escape pods have been launched, arriving at rendezvous point in %ETA%." emergency_shuttle_called_message = "Attention all hands: emergency evacuation procedures are now in effect. Escape pods will unlock in %ETA%" - emergency_shuttle_called_sound = sound('sound/AI/torch/abandonship.ogg', volume = 45) + emergency_shuttle_called_sound = sound(ANNOUNCER_ABANDONSHIP, volume = 45) emergency_shuttle_recall_message = "Attention all hands: emergency evacuation sequence aborted. Return to normal operating conditions." - command_report_sound = sound('sound/AI/torch/commandreport.ogg', volume = 45) + command_report_sound = sound(ANNOUNCER_COMMANDREPORT, volume = 45) grid_check_message = "Abnormal activity detected in the %STATION_NAME%'s power network. As a precaution, the %STATION_NAME%'s power must be shut down for an indefinite duration." - grid_check_sound = sound('sound/AI/torch/poweroff.ogg', volume = 45) + grid_check_sound = sound(ANNOUNCER_POWEROFF, volume = 45) grid_restored_message = "Ship power to the %STATION_NAME% will be restored at this time" - grid_restored_sound = sound('sound/AI/torch/poweron.ogg', volume = 45) + grid_restored_sound = sound(ANNOUNCER_POWERON, volume = 45) - meteor_detected_sound = sound('sound/AI/torch/meteors.ogg', volume = 45) + meteor_detected_sound = sound(ANNOUNCER_METEORS, volume = 45) radiation_detected_message = "High levels of radiation detected in proximity of the %STATION_NAME%. Please evacuate into one of the shielded maintenance tunnels." - radiation_detected_sound = sound('sound/AI/torch/radiation.ogg', volume = 45) + radiation_detected_sound = sound(ANNOUNCER_RADIATION, volume = 45) - space_time_anomaly_sound = sound('sound/AI/torch/spanomalies.ogg', volume = 45) + space_time_anomaly_sound = sound(ANNOUNCER_SPANOMALIES, volume = 45) unknown_biological_entities_message = "Unknown biological entities have been detected near the %STATION_NAME%, please stand-by." unidentified_lifesigns_message = "Unidentified lifesigns detected. Please lock down all exterior access points." - unidentified_lifesigns_sound = sound('sound/AI/torch/aliens.ogg', volume = 45) + unidentified_lifesigns_sound = sound(ANNOUNCER_ALIENS, volume = 45) - lifesign_spawn_sound = sound('sound/AI/torch/aliens.ogg', volume = 45) + lifesign_spawn_sound = sound(ANNOUNCER_ALIENS, volume = 45) - electrical_storm_moderate_sound = sound('sound/AI/torch/electricalstormmoderate.ogg', volume = 45) - electrical_storm_major_sound = sound('sound/AI/torch/electricalstormmajor.ogg', volume = 45) + electrical_storm_moderate_sound = sound(ANNOUNCER_ELECTRICALSTORM_MOD, volume = 45) + electrical_storm_major_sound = sound(ANNOUNCER_ELECTRICALSTORM_MAJ, volume = 45) /datum/map/torch/level_x_biohazard_sound(bio_level) switch(bio_level) if(7) - return sound('sound/AI/torch/outbreak7.ogg', volume = 45) + return sound(ANNOUNCER_OUTBREAK7, volume = 45) else - return sound('sound/AI/torch/outbreak5.ogg', volume = 45) + return sound(ANNOUNCER_OUTBREAK5, volume = 45) diff --git a/maps/torch/torch_antagonism.dm b/maps/torch/torch_antagonism.dm index 35b07c6730005..4f1f67b333933 100644 --- a/maps/torch/torch_antagonism.dm +++ b/maps/torch/torch_antagonism.dm @@ -1,27 +1,27 @@ //Makes sure we don't get any merchant antags as a balance concern. Can also be used for future Torch specific antag restrictions. /datum/antagonist/changeling blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/merchant, /datum/job/captain, /datum/job/hop, /datum/job/submap) - protected_jobs = list(/datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor) + restricted_jobs = list(/datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor) /datum/antagonist/godcultist blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/chaplain, /datum/job/merchant, /datum/job/captain, /datum/job/hop, /datum/job/hos, /datum/job/submap) - protected_jobs = list(/datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor) + restricted_jobs = list(/datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor) /datum/antagonist/cultist blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/chaplain, /datum/job/psychiatrist, /datum/job/merchant, /datum/job/captain, /datum/job/hop, /datum/job/hos, /datum/job/submap) - protected_jobs = list(/datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor) + restricted_jobs = list(/datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor) /datum/antagonist/loyalists blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/submap, /datum/job/merchant) - protected_jobs = list(/datum/job/officer, /datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor) + restricted_jobs = list(/datum/job/officer, /datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor) /datum/antagonist/revolutionary blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/submap, /datum/job/merchant) - restricted_jobs = list(/datum/job/captain, /datum/job/hop) - protected_jobs = list(/datum/job/officer, /datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor) + restricted_jobs = list(/datum/job/captain, /datum/job/hop, /datum/job/officer, /datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor) /datum/antagonist/traitor blacklisted_jobs = list(/datum/job/merchant, /datum/job/captain, /datum/job/hop, /datum/job/ai, /datum/job/submap, /datum/job/hos, /datum/job/medical_trainee, /datum/job/engineer_trainee, /datum/job/junior_doctor) + restricted_jobs = list(/datum/job/lawyer, /datum/job/cyborg) /datum/antagonist/ert var/sic //Second-In-Command diff --git a/maps/torch/torch_areas.dm b/maps/torch/torch_areas.dm index 2a22e785718d5..f8a49f540b54f 100644 --- a/maps/torch/torch_areas.dm +++ b/maps/torch/torch_areas.dm @@ -1,8 +1,12 @@ /datum/map/torch - base_floor_type = /turf/simulated/floor/reinforced/airless + base_floor_type = /turf/simulated/floor/reinforced base_floor_area = /area/torchexterior + saferoom_area_types = list( + /area/crew_quarters/safe_room + ) + post_round_safe_areas = list ( /area/centcom, /area/shuttle/escape/centcom, @@ -386,7 +390,7 @@ /area/aquila name = "\improper SEV Aquila" icon_state = "shuttlered" - base_turf = /turf/simulated/floor/reinforced/airless + base_turf = /turf/simulated/floor/reinforced requires_power = 1 dynamic_lighting = 1 area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_HIDE_FROM_HOLOMAP @@ -595,13 +599,13 @@ name = "lift (third deck)" lift_floor_label = "Deck 3" lift_floor_name = "Habitation Deck" - lift_announce_str = "Arriving at Habitation Deck: Telecommunications. Mess Hall. Officer's Mess. Lounge. Observation. Hydroponics. Cryogenic Storage. Holodeck. Gym." + lift_announce_str = "Arriving at Habitation Deck: Mess Hall. Officer's Mess. Lounge. Observation. Hydroponics. Cryogenic Storage. Holodeck. Gym." /area/turbolift/torch_first name = "lift (fourth deck)" lift_floor_label = "Deck 4" lift_floor_name = "Supply Deck" - lift_announce_str = "Arriving at Supply Deck: EVA. Docking Ports. Pathfinder's Office. Cargo Storage. Supply Office. Laundry. Sanitation." + lift_announce_str = "Arriving at Supply Deck: Telecommunications. EVA. Docking Ports. Pathfinder's Office. Cargo Storage. Supply Office. Laundry. Sanitation." /area/turbolift/torch_ground name = "lift (fifth deck)" @@ -623,6 +627,7 @@ name = "Officer's Mess" icon_state = "bar" sound_env = MEDIUM_SOFTFLOOR + req_access = list(access_o_mess, access_solgov_crew) lighting_tone = AREA_LIGHTING_WARM /area/command/pathfinder @@ -735,6 +740,14 @@ name = "Bluespace Drive Containment" icon_state = "engineering" color = COLOR_BLUE_LIGHT + sound_env = LARGE_ENCLOSED + req_access = list(list(access_engine_equip, access_heads), access_engine, access_maint_tunnels) + +/area/engineering/bluespacebay + name = "Bluespace Drive Containment Control Room" + icon_state = "engineering" + color = COLOR_LUMINOL + sound_env = SMALL_ENCLOSED req_access = list(list(access_engine_equip, access_heads), access_engine, access_maint_tunnels) /area/engineering/atmos/aux @@ -957,13 +970,6 @@ /area/crew_quarters holomap_color = HOLOMAP_AREACOLOR_CREW -/area/crew_quarters/bar - name = "\improper Bar" - icon_state = "bar" - sound_env = LARGE_SOFTFLOOR - req_access = list(access_kitchen) - lighting_tone = AREA_LIGHTING_WARM - /area/crew_quarters/cryolocker name = "\improper Cryogenic Storage Wardrobe" icon_state = "locker" @@ -1092,10 +1098,15 @@ icon_state = "security" req_access = list(access_brig) +/area/security/secure_storage + name = "\improper Security - Secure Storage" + icon_state = "security" + req_access = list(access_armory) + /area/security/armoury name = "\improper Security - Armory" icon_state = "Warden" - req_access = list(access_armory) + req_access = list(access_hos) /area/security/detectives_office name = "\improper Security - Investigations Office" @@ -1352,6 +1363,7 @@ has_gravity = FALSE turf_initializer = /singleton/turf_initializer/maintenance/space req_access = list(access_external_airlocks, access_maint_tunnels) + turfs_airless = TRUE // CentCom @@ -1398,6 +1410,7 @@ has_gravity = FALSE base_turf = /turf/space req_access = list(access_engine_equip) + turfs_airless = TRUE /area/solar/auxstarboard name = "\improper Fore Starboard Solar Array" @@ -1534,12 +1547,6 @@ sound_env = LARGE_ENCLOSED req_access = list(access_engine, access_engine_equip) -/area/engineering/drone_fabrication - name = "\improper Engineering Drone Fabrication" - icon_state = "drone_fab" - sound_env = SMALL_ENCLOSED - req_access = list(access_robotics) - /area/engineering/engine_monitoring name = "\improper Engine Monitoring Room" icon_state = "engine_monitoring" @@ -1586,7 +1593,7 @@ /area/assembly/robotics/laboratory name = "\improper Robotics Laboratory" - req_access = list(list(access_medical,access_robotics)) + req_access = list(list(access_medical,access_robotics, access_synth)) /area/assembly/robotics/office name = "\improper Robotics Office" diff --git a/maps/torch/torch_define.dm b/maps/torch/torch_define.dm index 8eae69a3f4547..bfc89d9f86c04 100644 --- a/maps/torch/torch_define.dm +++ b/maps/torch/torch_define.dm @@ -32,7 +32,7 @@ "SFP Territory Support", "SFP Special Investigations", "SFP Fugitive Recovery", - "Sol Fleet Mars Commmand", + "Sol Fleet Mars Command", "Bureau of Diplomatic Affairs", "Emergency Management Bureau", "Secure Routing Service" @@ -40,7 +40,7 @@ //These should probably be moved into the evac controller... shuttle_docked_message = "Attention all hands: Jump preparation complete. The bluespace drive is now spooling up, secure all stations for departure. Time to jump: approximately %ETD%." - shuttle_leaving_dock = "Attention all hands: Jump initiated, exiting bluespace in %ETA%." + shuttle_leaving_message = "Attention all hands: Jump initiated, exiting bluespace in %ETA%." shuttle_called_message = "Attention all hands: Jump sequence initiated. Transit procedures are now in effect. Jump in %ETA%." shuttle_recall_message = "Attention all hands: Jump sequence aborted, return to normal operating conditions." @@ -56,3 +56,5 @@ id_hud_icons = 'maps/torch/icons/assignment_hud.dmi' welcome_sound = null + + use_bluespace_interlude = TRUE diff --git a/maps/torch/torch_elevator.dm b/maps/torch/torch_elevator.dm index cfc8598f8b9b5..9c3b8fb58b2f8 100644 --- a/maps/torch/torch_elevator.dm +++ b/maps/torch/torch_elevator.dm @@ -44,7 +44,7 @@ /datum/shuttle/autodock/ferry/cargo_lift name = "Primary Cargo Lift" shuttle_area = /area/turbolift/cargo_lift - warmup_time = 3 + warmup_time = 3 SECONDS waypoint_station = "nav_cargo_lift_top" waypoint_offsite = "nav_cargo_lift_bottom" sound_takeoff = 'sound/effects/lift_heavy_start.ogg' @@ -55,7 +55,7 @@ /datum/shuttle/autodock/ferry/robotics_lift name = "Robotics Lift" shuttle_area = /area/turbolift/robotics_lift - warmup_time = 3 + warmup_time = 3 SECONDS waypoint_station = "nav_robotics_lift_top" waypoint_offsite = "nav_robotics_lift_bottom" sound_takeoff = 'sound/effects/lift_heavy_start.ogg' @@ -66,7 +66,7 @@ /datum/shuttle/autodock/ferry/medical_lift name = "Medical Lift" shuttle_area = /area/turbolift/medical_lift - warmup_time = 3 + warmup_time = 3 SECONDS waypoint_station = "nav_medical_lift_top" waypoint_offsite = "nav_medical_lift_bottom" sound_takeoff = 'sound/effects/lift_heavy_start.ogg' @@ -74,41 +74,41 @@ ceiling_type = null knockdown = 0 -/obj/effect/shuttle_landmark/lift/cargo_top +/obj/shuttle_landmark/lift/cargo_top name = "Top Deck" landmark_tag = "nav_cargo_lift_top" base_area = /area/quartermaster/storage/upper base_turf = /turf/simulated/open -/obj/effect/shuttle_landmark/lift/cargo_bottom +/obj/shuttle_landmark/lift/cargo_bottom name = "Lower Deck" landmark_tag = "nav_cargo_lift_bottom" flags = SLANDMARK_FLAG_AUTOSET base_area = /area/quartermaster/storage base_turf = /turf/simulated/floor/plating -/obj/effect/shuttle_landmark/lift/robotics_top +/obj/shuttle_landmark/lift/robotics_top name = "Top Deck" landmark_tag = "nav_robotics_lift_top" base_area = /area/assembly/robotics base_turf = /turf/simulated/open -/obj/effect/shuttle_landmark/lift/robotics_bottom +/obj/shuttle_landmark/lift/robotics_bottom name = "Lower Deck" landmark_tag = "nav_robotics_lift_bottom" flags = SLANDMARK_FLAG_AUTOSET base_area = /area/assembly/robotics base_turf = /turf/simulated/floor/plating -/obj/effect/shuttle_landmark/lift/medical_top +/obj/shuttle_landmark/lift/medical_top name = "Top Deck" landmark_tag = "nav_medical_lift_top" base_area = /area/medical/foyer/storeroom base_turf = /turf/simulated/open -/obj/effect/shuttle_landmark/lift/medical_bottom +/obj/shuttle_landmark/lift/medical_bottom name = "Lower Deck" landmark_tag = "nav_medical_lift_bottom" flags = SLANDMARK_FLAG_AUTOSET base_area = /area/medical/morgue - base_turf = /turf/simulated/floor/plating \ No newline at end of file + base_turf = /turf/simulated/floor/plating diff --git a/maps/torch/torch_events.dm b/maps/torch/torch_events.dm index 8a4a9f449c0ab..6f1de849e1be8 100644 --- a/maps/torch/torch_events.dm +++ b/maps/torch/torch_events.dm @@ -15,7 +15,7 @@ areaNotType = list(/area/rnd/xenobiology/xenoflora, /area/rnd/xenobiology/xenoflora_storage) /datum/event/prison_break/station - eventDept = "Local" + eventDept = "Vessel" areaName = list("Brig","Supply Warehouse","Xenobiology","Engineering Hard Storage") areaType = list(/area/security/prison, /area/security/brig, /area/quartermaster/storage, /area/rnd/xenobiology, /area/engineering/hardstorage) areaNotType = list(/area/rnd/xenobiology/xenoflora, /area/rnd/xenobiology/xenoflora_storage, /area/quartermaster/storage/upper) @@ -34,14 +34,14 @@ /datum/event/prison_break/armory eventDept = "Security" areaName = list("Emergency Armory") - areaType = list(/area/command/armoury) - areaNotType = list(/area/command/armoury/tactical) + areaType = list(/area/command/armoury, /area/command/armoury/tactical) + /datum/event_container/moderate/torch available_events = list( new/datum/event_meta(EVENT_LEVEL_MODERATE, "Xenobiology Breach", /datum/event/prison_break/xenobiology, 0, list(ASSIGNMENT_SCIENCE = 100)), new/datum/event_meta(EVENT_LEVEL_MODERATE, "Warehouse Breach", /datum/event/prison_break/warehouse, 0, list(ASSIGNMENT_SUPPLY = 100)), - new/datum/event_meta(EVENT_LEVEL_MODERATE, "Hard Storage Breach", /datum/event/prison_break/hardstorage, 0, list(ASSIGNMENT_ENGINEER = 100)), + new/datum/event_meta(EVENT_LEVEL_MODERATE, "Hard Storage Breach", /datum/event/prison_break/hardstorage, 0, list(ASSIGNMENT_ENGINEER = 100)), new/datum/event_meta(EVENT_LEVEL_MODERATE, "Armory Breach", /datum/event/prison_break/armory, 0, list(ASSIGNMENT_SECURITY = 100)) ) diff --git a/maps/torch/torch_holodecks.dm b/maps/torch/torch_holodecks.dm index 23ec9bef4485b..d2e5346aaf035 100644 --- a/maps/torch/torch_holodecks.dm +++ b/maps/torch/torch_holodecks.dm @@ -10,23 +10,23 @@ "desert" = new/datum/holodeck_program(/area/holodeck/source_desert, list( 'sound/effects/wind/wind_2_1.ogg', - 'sound/effects/wind/wind_2_2.ogg', - 'sound/effects/wind/wind_3_1.ogg', - 'sound/effects/wind/wind_4_1.ogg', - 'sound/effects/wind/wind_4_2.ogg', - 'sound/effects/wind/wind_5_1.ogg' - ) - ), + 'sound/effects/wind/wind_2_2.ogg', + 'sound/effects/wind/wind_3_1.ogg', + 'sound/effects/wind/wind_4_1.ogg', + 'sound/effects/wind/wind_4_2.ogg', + 'sound/effects/wind/wind_5_1.ogg' + ) + ), "snowfield" = new/datum/holodeck_program(/area/holodeck/source_snowfield, list( 'sound/effects/wind/wind_2_1.ogg', - 'sound/effects/wind/wind_2_2.ogg', - 'sound/effects/wind/wind_3_1.ogg', - 'sound/effects/wind/wind_4_1.ogg', - 'sound/effects/wind/wind_4_2.ogg', - 'sound/effects/wind/wind_5_1.ogg' - ) - ), + 'sound/effects/wind/wind_2_2.ogg', + 'sound/effects/wind/wind_3_1.ogg', + 'sound/effects/wind/wind_4_1.ogg', + 'sound/effects/wind/wind_4_2.ogg', + 'sound/effects/wind/wind_5_1.ogg' + ) + ), "space" = new/datum/holodeck_program(/area/holodeck/source_space, list( 'sound/ambience/ambispace.ogg', @@ -76,4 +76,4 @@ "Wildlife Simulation" = "wildlifecarp" ) - ) \ No newline at end of file + ) diff --git a/maps/torch/torch_npcs.dm b/maps/torch/torch_npcs.dm index 57c416d9957f3..cb9859ca42563 100644 --- a/maps/torch/torch_npcs.dm +++ b/maps/torch/torch_npcs.dm @@ -1,20 +1,26 @@ -/obj/random_multi/single_item/punitelly +/obj/random_multi/single_item/punitelli name = "Multi Point - Warrant Officer Punitelli" id = "Punitelli" item_path = /mob/living/carbon/human/monkey/punitelli -/mob/living/carbon/human/monkey/punitelli/New() - ..() +/mob/living/carbon/human/monkey/punitelli name = "Warrant Officer Punitelli" - real_name = name gender = MALE - var/obj/item/clothing/C - C = new /obj/item/clothing/under/solgov/utility/expeditionary/monkey(src) - equip_to_appropriate_slot(C) + faction = MOB_FACTION_CREW + + +/mob/living/carbon/human/monkey/punitelli/Initialize(mapload) + . = ..() + real_name = name + return INITIALIZE_HINT_LATELOAD + + +/mob/living/carbon/human/monkey/punitelli/LateInitialize(mapload) + equip_to_appropriate_slot(new /obj/item/clothing/under/solgov/utility/expeditionary/monkey, skip_timer = TRUE) put_in_hands(new /obj/item/reagent_containers/food/drinks/glass2/coffeecup/punitelli) - equip_to_appropriate_slot(new /obj/item/clothing/mask/smokable/cigarette/jerichos) + equip_to_appropriate_slot(new /obj/item/clothing/mask/smokable/cigarette/jerichos, skip_timer = TRUE) if(prob(50)) - equip_to_appropriate_slot(new /obj/item/clothing/shoes/sandal) + equip_to_appropriate_slot(new /obj/item/clothing/shoes/sandal, skip_timer = TRUE) /obj/random_multi/single_item/runtime name = "Multi Point - Runtime" diff --git a/maps/torch/torch_overmap.dm b/maps/torch/torch_overmap.dm index 675bc24a5d04f..9f25ecc3f70e0 100644 --- a/maps/torch/torch_overmap.dm +++ b/maps/torch/torch_overmap.dm @@ -1,10 +1,15 @@ -/obj/effect/overmap/visitable/ship/torch +/obj/overmap/visitable/ship/torch name = "SEV Torch" desc = "A frankensteined HNS Mako-class corvette, broadcasting SCGEC codes and the designation \"SEV Torch, HSC-4-13-X\"." fore_dir = WEST vessel_mass = 100000 burn_delay = 2 SECONDS - base = TRUE + sector_flags = OVERMAP_SECTOR_KNOWN|OVERMAP_SECTOR_IN_SPACE|OVERMAP_SECTOR_BASE + known_ships = list( + /obj/overmap/visitable/ship/landable/exploration_shuttle, + /obj/overmap/visitable/ship/landable/aquila, + /obj/overmap/visitable/ship/landable/guppy + ) initial_restricted_waypoints = list( "Charon" = list("nav_hangar_charon"), //can't have random shuttles popping inside the ship @@ -76,7 +81,7 @@ "nav_ert_hanger", ) -/obj/effect/overmap/visitable/ship/landable/exploration_shuttle +/obj/overmap/visitable/ship/landable/exploration_shuttle name = "Charon" desc = "An SSE-U11 long range shuttle, broadcasting SCGEC codes and the callsign \"Torch-2 Charon\"." shuttle = "Charon" @@ -86,8 +91,13 @@ fore_dir = NORTH skill_needed = SKILL_BASIC vessel_size = SHIP_SIZE_SMALL + known_ships = list( + /obj/overmap/visitable/ship/torch, + /obj/overmap/visitable/ship/landable/aquila, + /obj/overmap/visitable/ship/landable/guppy + ) -/obj/effect/overmap/visitable/ship/landable/aquila +/obj/overmap/visitable/ship/landable/aquila name = "Aquila" desc = "A PM-24 modular transport, broadcasting SCGEC codes and the callsign \"Torch-1 Aquila\"." shuttle = "Aquila" @@ -96,8 +106,13 @@ burn_delay = 0.5 SECONDS //spammable, but expensive fore_dir = NORTH vessel_size = SHIP_SIZE_SMALL + known_ships = list( + /obj/overmap/visitable/ship/torch, + /obj/overmap/visitable/ship/landable/exploration_shuttle, + /obj/overmap/visitable/ship/landable/guppy + ) -/obj/effect/overmap/visitable/ship/landable/guppy +/obj/overmap/visitable/ship/landable/guppy name = "Guppy" desc = "An SSE-U3 utility pod, broadcasting SCGEC codes and the callsign \"Torch-3 Guppy\"." shuttle = "Guppy" @@ -107,6 +122,11 @@ fore_dir = SOUTH skill_needed = SKILL_BASIC vessel_size = SHIP_SIZE_TINY + known_ships = list( + /obj/overmap/visitable/ship/torch, + /obj/overmap/visitable/ship/landable/exploration_shuttle, + /obj/overmap/visitable/ship/landable/aquila + ) /obj/machinery/computer/shuttle_control/explore/aquila name = "aquila control console" diff --git a/maps/torch/torch_presets.dm b/maps/torch/torch_presets.dm index 8bcecb532741e..3fb59da9267c7 100644 --- a/maps/torch/torch_presets.dm +++ b/maps/torch/torch_presets.dm @@ -1,17 +1,11 @@ var/global/const/NETWORK_AQUILA = "Aquila" var/global/const/NETWORK_BRIDGE = "Bridge" var/global/const/NETWORK_CHARON = "Charon" -var/global/const/NETWORK_EXPEDITION = "Expedition" var/global/const/NETWORK_FIRST_DECK = "First Deck" var/global/const/NETWORK_FOURTH_DECK = "Fourth Deck" -var/global/const/NETWORK_POD = "General Utility Pod" var/global/const/NETWORK_SECOND_DECK = "Second Deck" -var/global/const/NETWORK_SUPPLY = "Supply" -var/global/const/NETWORK_HANGAR = "Hangar" -var/global/const/NETWORK_EXPLO = "Exploration" var/global/const/NETWORK_THIRD_DECK = "Third Deck" var/global/const/NETWORK_FIFTH_DECK = "Fifth Deck" -var/global/const/NETWORK_PETROV = "Petrov" /datum/map/torch/get_network_access(network) switch(network) @@ -21,41 +15,26 @@ var/global/const/NETWORK_PETROV = "Petrov" return access_heads if(NETWORK_CHARON) return access_expedition_shuttle - if(NETWORK_POD) - return access_guppy - if(NETWORK_SUPPLY) - return access_mailsorting - if(NETWORK_HANGAR) - return access_hangar - if(NETWORK_EXPLO) - return access_explorer - if(NETWORK_PETROV) - return access_petrov + if(NETWORK_HELMETS) + return access_solgov_crew return get_shared_network_access(network) || ..() /datum/map/torch // Networks that will show up as options in the camera monitor program station_networks = list( + NETWORK_BRIDGE, NETWORK_FIRST_DECK, NETWORK_SECOND_DECK, NETWORK_THIRD_DECK, NETWORK_FOURTH_DECK, NETWORK_FIFTH_DECK, - NETWORK_BRIDGE, - NETWORK_COMMAND, NETWORK_ENGINEERING, - NETWORK_ENGINE, NETWORK_MEDICAL, NETWORK_RESEARCH, NETWORK_SECURITY, - NETWORK_SUPPLY, - NETWORK_EXPEDITION, - NETWORK_EXPLO, - NETWORK_HANGAR, NETWORK_AQUILA, NETWORK_CHARON, - NETWORK_POD, - NETWORK_PETROV, + NETWORK_HELMETS, NETWORK_ALARM_ATMOS, NETWORK_ALARM_CAMERA, NETWORK_ALARM_FIRE, @@ -78,9 +57,6 @@ var/global/const/NETWORK_PETROV = "Petrov" /obj/machinery/camera/network/exploration_shuttle network = list(NETWORK_CHARON) -/obj/machinery/camera/network/expedition - network = list(NETWORK_EXPEDITION) - /obj/machinery/camera/network/first_deck network = list(NETWORK_FIRST_DECK) @@ -90,46 +66,25 @@ var/global/const/NETWORK_PETROV = "Petrov" /obj/machinery/camera/network/fifth_deck network = list(NETWORK_FIFTH_DECK) -/obj/machinery/camera/network/pod - network = list(NETWORK_POD) - /obj/machinery/camera/network/second_deck network = list(NETWORK_SECOND_DECK) -/obj/machinery/camera/network/supply - network = list(NETWORK_SUPPLY) - -/obj/machinery/camera/network/hangar - network = list(NETWORK_HANGAR) - -/obj/machinery/camera/network/exploration - network = list(NETWORK_EXPLO) - /obj/machinery/camera/network/third_deck network = list(NETWORK_THIRD_DECK) -/obj/machinery/camera/network/command - network = list(NETWORK_COMMAND) - /obj/machinery/camera/network/crescent network = list(NETWORK_CRESCENT) -/obj/machinery/camera/network/engine - network = list(NETWORK_ENGINE) - /obj/machinery/camera/network/engineering_outpost network = list(NETWORK_ENGINEERING_OUTPOST) -/obj/machinery/camera/network/petrov - network = list(NETWORK_PETROV) - // Motion /obj/machinery/camera/motion/engineering_outpost network = list(NETWORK_ENGINEERING_OUTPOST) // All Upgrades /obj/machinery/camera/all/command - network = list(NETWORK_COMMAND) + network = list(NETWORK_BRIDGE) // @@ -151,7 +106,10 @@ var/global/const/NETWORK_PETROV = "Petrov" _output_on = TRUE _fully_charged = TRUE -// Main Engine output SMES +/obj/machinery/power/smes/buildable/preset/torch/substation_full/rust + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil/super_io = 2) + +// Supermatter output SMES /obj/machinery/power/smes/buildable/preset/torch/engine_main uncreated_component_parts = list( /obj/item/stock_parts/smes_coil/super_io = 2, @@ -162,6 +120,16 @@ var/global/const/NETWORK_PETROV = "Petrov" _output_on = TRUE _fully_charged = TRUE +//RUST Output SMES +/obj/machinery/power/smes/buildable/preset/torch/engine_empty + uncreated_component_parts = list( + /obj/item/stock_parts/smes_coil/super_io = 2, + /obj/item/stock_parts/smes_coil/super_capacity = 2) + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + // Shuttle SMES /obj/machinery/power/smes/buildable/preset/torch/shuttle uncreated_component_parts = list( @@ -183,6 +151,18 @@ var/global/const/NETWORK_PETROV = "Petrov" _output_on = TRUE _fully_charged = TRUE +// Bridge Solars SMES. For those low pop rounds. +/obj/machinery/power/smes/buildable/preset/torch/bridge_solar + uncreated_component_parts = list( + /obj/item/stock_parts/smes_coil = 1 + ) + RCon_tag = "Solar - Bridge" + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE + var/global/const/NETWORK_COMMAND = "Command" var/global/const/NETWORK_ENGINE = "Engine" var/global/const/NETWORK_ENGINEERING_OUTPOST = "Engineering Outpost" diff --git a/maps/torch/torch_procs.dm b/maps/torch/torch_procs.dm index d75fa6bf83730..c7931c456006e 100644 --- a/maps/torch/torch_procs.dm +++ b/maps/torch/torch_procs.dm @@ -1,19 +1,3 @@ -/datum/map/bolt_saferooms() - for(var/atype in typesof(/area/crew_quarters/safe_room)) - var/area/A = locate(atype) - if(istype(A)) - for(var/obj/machinery/door/airlock/vault/bolted/V in A.contents) - if(!V.locked) - V.lock() - -/datum/map/unbolt_saferooms() - for(var/atype in typesof(/area/crew_quarters/safe_room)) - var/area/A = locate(atype) - if(istype(A)) - for(var/obj/machinery/door/airlock/vault/bolted/V in A.contents) - if(V.locked) - V.unlock() - /datum/map/make_maint_all_access(radstorm = 0) maint_all_access = TRUE if(radstorm) @@ -56,6 +40,15 @@ else to_chat(Player, SPAN_COLOR("red", "You did not survive the events on [station_name()]...")) + +/datum/map/torch/ship_jump() + for(var/obj/overmap/visitable/ship/torch/torch) + new /obj/ftl (get_turf(torch)) + qdel(torch) + animate(torch, time = 0.5 SECONDS) + animate(alpha = 0, time = 0.5 SECONDS) + + /datum/map/torch/roundend_summary(list/data) var/desc var/survivors = data["surviving_total"] @@ -73,3 +66,16 @@ desc += "There were no survivors, [offship_players] off-ship players, ([ghosts] ghosts)." return desc + +/datum/map/torch/do_interlude_teleport(atom/movable/target, atom/destination, duration = 30 SECONDS, precision, type) + var/turf/T = pick_area_turf(/area/bluespace_interlude/platform, list(GLOBAL_PROC_REF(not_turf_contains_dense_objects), GLOBAL_PROC_REF(IsTurfAtmosSafe))) + + if (!T && destination) + do_teleport(target, destination) + return + + if (isliving(target)) + to_chat(target, FONT_LARGE(SPAN_WARNING("Your vision goes blurry and nausea strikes your stomach. Where are you...?"))) + do_teleport(target, T, precision, type) + if (destination) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(do_teleport), target, destination), duration) diff --git a/maps/torch/torch_ranks.dm b/maps/torch/torch_ranks.dm index cb74f2c836265..d91760ff0e5fa 100644 --- a/maps/torch/torch_ranks.dm +++ b/maps/torch/torch_ranks.dm @@ -11,10 +11,10 @@ /datum/mil_branch/fleet, /datum/mil_branch/civilian, /datum/mil_branch/solgov, - /datum/mil_branch/army, /datum/mil_branch/alien, /datum/mil_branch/skrell_fleet, - /datum/mil_branch/iccgn + /datum/mil_branch/iccgn, + /datum/mil_branch/scga ) spawn_branch_types = list( @@ -25,7 +25,7 @@ /datum/mil_branch/alien, /datum/mil_branch/skrell_fleet, /datum/mil_branch/iccgn, - /datum/mil_branch/army + /datum/mil_branch/scga ) species_to_branch_blacklist = list( @@ -194,41 +194,6 @@ SKILL_WEAPONS = SKILL_BASIC, SKILL_EVA = SKILL_BASIC) -/datum/mil_branch/army - name = "Army" - name_short = "SCGA" - email_domain = "army.mil" - - rank_types = list( - /datum/mil_rank/army/e1, - /datum/mil_rank/army/e2, - /datum/mil_rank/army/e3, - /datum/mil_rank/army/e4, - /datum/mil_rank/army/e5, - /datum/mil_rank/army/e6, - /datum/mil_rank/army/e7, - /datum/mil_rank/army/e8, - /datum/mil_rank/army/e8_alt, - /datum/mil_rank/army/e9, - /datum/mil_rank/army/e9_alt1, - /datum/mil_rank/army/e9_alt2, - /datum/mil_rank/army/o1, - /datum/mil_rank/army/o2, - /datum/mil_rank/army/o3, - /datum/mil_rank/army/o4, - /datum/mil_rank/army/o5, - /datum/mil_rank/army/o6, - /datum/mil_rank/army/o7, - /datum/mil_rank/army/o8, - /datum/mil_rank/army/o9, - /datum/mil_rank/army/o10, - /datum/mil_rank/army/o10_alt - ) - - assistant_job = /datum/job/crew - min_skill = list( SKILL_HAULING = SKILL_ADEPT, - SKILL_WEAPONS = SKILL_BASIC, - SKILL_COMBAT = SKILL_BASIC) /datum/mil_branch/civilian name = "Civilian" @@ -272,6 +237,24 @@ if(sort_order <= 10) return "E[sort_order]" return "O[sort_order - 10]" + +// Within the scope of the Torch, this is the only necessary differentiation. +/datum/mil_rank/rank_category() + . = ..() + if(!sort_order) + return null + if(sort_order <= 10) + return GET_SINGLETON(/singleton/rank_category/enlisted) + else + return GET_SINGLETON(/singleton/rank_category/commissioned) + +/singleton/rank_category/enlisted + name = "Enlisted" + +/singleton/rank_category/commissioned + name = "Commissioned" + add_accesses = list(access_o_mess) + /* * Fleet * ===== @@ -480,147 +463,6 @@ accessory = list(/obj/item/clothing/accessory/solgov/rank/ec/officer/o8) sort_order = 18 -/* - * Army - * ==== - */ -/datum/mil_rank/army/e1 - name = "Private" - name_short = "PVT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted) - sort_order = 1 - -/datum/mil_rank/army/e2 - name = "Private Second Class" - name_short = "PV2" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e2) - sort_order = 2 - -/datum/mil_rank/army/e3 - name = "Private First Class" - name_short = "PV1" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e3) - sort_order = 3 - -/datum/mil_rank/army/e4 - name = "Corporal" - name_short = "CPL" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e4) - sort_order = 4 - -/datum/mil_rank/army/e5 - name = "Sergeant" - name_short = "SGT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e5) - sort_order = 5 - -/datum/mil_rank/army/e6 - name = "Staff Sergeant" - name_short = "SSG" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e6) - sort_order = 6 - -/datum/mil_rank/army/e7 - name = "Sergeant First Class" - name_short = "SFC" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e7) - sort_order = 7 - -/datum/mil_rank/army/e8 - name = "Master Sergeant" - name_short = "MSG" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e8) - sort_order = 8 - -/datum/mil_rank/army/e8_alt - name = "First Sergeant" - name_short = "1SG" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e8_alt) - sort_order = 8 - -/datum/mil_rank/army/e9 - name = "Sergeant Major" - name_short = "SGM" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e9) - sort_order = 9 - -/datum/mil_rank/army/e9_alt1 - name = "Command Sergeant Major" - name_short = "CSM" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e9_alt1) - sort_order = 9 - -/datum/mil_rank/army/e9_alt2 - name = "Sergeant Major of the Army" - name_short = "SMA" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/enlisted/e9_alt2) - sort_order = 9 - -/datum/mil_rank/army/o1 - name = "Second Lieutenant" - name_short = "2LT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/officer) - sort_order = 11 - -/datum/mil_rank/army/o2 - name = "First Lieutenant" - name_short = "1LT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/officer/o2) - sort_order = 12 - -/datum/mil_rank/army/o3 - name = "Captain" - name_short = "CPT" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/officer/o3) - sort_order = 13 - -/datum/mil_rank/army/o4 - name = "Major" - name_short = "MAJ" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/officer/o4) - sort_order = 14 - -/datum/mil_rank/army/o5 - name = "Lieutenant Colonel" - name_short = "LTC" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/officer/o5) - sort_order = 15 - -/datum/mil_rank/army/o6 - name = "Colonel" - name_short = "COL" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/officer/o6) - sort_order = 16 - -/datum/mil_rank/army/o7 - name = "Brigadier General" - name_short = "BG" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/flag) - sort_order = 17 - -/datum/mil_rank/army/o8 - name = "Major General" - name_short = "MG" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/flag/o8) - sort_order = 18 - -/datum/mil_rank/army/o9 - name = "Lieutenant General" - name_short = "LTG" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/flag/o9) - sort_order = 19 - -/datum/mil_rank/army/o10 - name = "General" - name_short = "GEN" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/flag/o10) - sort_order = 20 - -/datum/mil_rank/army/o10_alt - name = "General of the Army" - name_short = "GA" - accessory = list(/obj/item/clothing/accessory/solgov/rank/army/flag/o10_alt) - sort_order = 20 /* * Civilians diff --git a/maps/torch/torch_security_state.dm b/maps/torch/torch_security_state.dm index 997a09050ba39..3d8ede4fd2279 100644 --- a/maps/torch/torch_security_state.dm +++ b/maps/torch/torch_security_state.dm @@ -29,9 +29,8 @@ icon = 'icons/misc/security_state.dmi' alarm_level = "off" - light_max_bright = 0.25 - light_inner_range = 0.1 - light_outer_range = 1 + light_range = 2 + light_power = 1 light_color_alarm = COLOR_GREEN light_color_status_display = COLOR_GREEN @@ -49,9 +48,8 @@ name = "code violet" alarm_level = "on" - light_max_bright = 0.5 - light_inner_range = 1 - light_outer_range = 2 + light_range = 2 + light_power = 1 light_color_alarm = COLOR_VIOLET light_color_status_display = COLOR_VIOLET @@ -68,9 +66,8 @@ name = "code orange" alarm_level = "on" - light_max_bright = 0.5 - light_inner_range = 1 - light_outer_range = 2 + light_range = 2 + light_power = 1 light_color_alarm = COLOR_ORANGE light_color_status_display = COLOR_ORANGE overlay_alarm = "alarm_orange" @@ -88,9 +85,8 @@ icon = 'icons/misc/security_state.dmi' alarm_level = "on" - light_max_bright = 0.5 - light_inner_range = 1 - light_outer_range = 2 + light_range = 2 + light_power = 1 light_color_alarm = COLOR_BLUE light_color_status_display = COLOR_BLUE overlay_alarm = "alarm_blue" @@ -107,9 +103,8 @@ icon = 'icons/misc/security_state.dmi' alarm_level = "on" - light_max_bright = 0.75 - light_inner_range = 1 - light_outer_range = 3 + light_range = 4 + light_power = 2 light_color_alarm = COLOR_RED light_color_status_display = COLOR_RED overlay_alarm = "alarm_red" @@ -135,9 +130,8 @@ icon = 'icons/misc/security_state.dmi' alarm_level = "on" - light_max_bright = 0.75 - light_inner_range = 0.1 - light_outer_range = 3 + light_range = 4 + light_power = 2 light_color_alarm = COLOR_RED light_color_status_display = COLOR_NAVY_BLUE diff --git a/maps/torch/torch_setup.dm b/maps/torch/torch_setup.dm index 81695dc1f010a..bef8f7f07cf91 100644 --- a/maps/torch/torch_setup.dm +++ b/maps/torch/torch_setup.dm @@ -1,7 +1,7 @@ /datum/map/torch/setup_map() ..() system_name = generate_system_name() - minor_announcement = new(new_sound = sound('sound/AI/torch/commandreport.ogg', volume = 45)) + minor_announcement = new(new_sound = sound(ANNOUNCER_COMMANDREPORT, volume = 45)) /datum/map/torch/get_map_info() . = list() @@ -11,7 +11,7 @@ return jointext(., "
    ") /datum/map/torch/send_welcome() - var/obj/effect/overmap/visitable/ship/torch = SSshuttle.ship_by_type(/obj/effect/overmap/visitable/ship/torch) + var/obj/overmap/visitable/ship/torch = SSshuttle.ship_by_type(/obj/overmap/visitable/ship/torch) var/welcome_text = "

    [FONT_LARGE("SEV Torch Sensor Readings:")]
    " welcome_text += "Report generated on [stationdate2text()] at [stationtime2text()]


    " @@ -26,21 +26,19 @@ welcome_text += "Scan results show the following points of interest:
    " for(var/zlevel in map_sectors) - var/obj/effect/overmap/visitable/O = map_sectors[zlevel] + var/obj/overmap/visitable/O = map_sectors[zlevel] if(O.name == torch.name) continue - if(istype(O, /obj/effect/overmap/visitable/ship/landable)) //Don't show shuttles + if(istype(O, /obj/overmap/visitable/ship/landable)) //Don't show shuttles continue if (O.hide_from_reports) continue space_things |= O - for(var/obj/effect/overmap/visitable/O in space_things) + for(var/obj/overmap/visitable/O in space_things) var/location_desc = " at present co-ordinates." if(O.loc != torch.loc) - var/bearing = round(90 - Atan2(O.x - torch.x, O.y - torch.y),5) //fucking triangles how do they work - if(bearing < 0) - bearing += 360 + var/bearing = get_bearing(torch, O) location_desc = ", bearing [bearing]." welcome_text += "
  • \A [O.name][location_desc]
  • " diff --git a/maps/torch/torch_shuttles.dm b/maps/torch/torch_shuttles.dm index e3d9a258e9f4f..8fe9f8209263f 100644 --- a/maps/torch/torch_shuttles.dm +++ b/maps/torch/torch_shuttles.dm @@ -3,16 +3,16 @@ category = /datum/shuttle/autodock/ferry/escape_pod/torchpod sound_takeoff = 'sound/effects/rocket.ogg' sound_landing = 'sound/effects/rocket_backwards.ogg' - warmup_time = 10 + warmup_time = 10 SECONDS -/obj/effect/shuttle_landmark/escape_pod/start +/obj/shuttle_landmark/escape_pod/start name = "Docked" - base_turf = /turf/simulated/floor/reinforced/airless + base_turf = /turf/simulated/floor/reinforced -/obj/effect/shuttle_landmark/escape_pod/transit +/obj/shuttle_landmark/escape_pod/transit name = "In transit" -/obj/effect/shuttle_landmark/escape_pod/out +/obj/shuttle_landmark/escape_pod/out name = "Escaped" //Pods @@ -26,14 +26,14 @@ landmark_transition = "escape_pod_"+ #NUMBER +"_internim"; \ waypoint_offsite = "escape_pod_"+ #NUMBER +"_out"; \ } \ -/obj/effect/shuttle_landmark/escape_pod/start/pod##NUMBER { \ +/obj/shuttle_landmark/escape_pod/start/pod##NUMBER { \ landmark_tag = "escape_pod_"+ #NUMBER +"_start"; \ docking_controller = "escape_pod_"+ #NUMBER +"_berth"; \ } \ -/obj/effect/shuttle_landmark/escape_pod/out/pod##NUMBER { \ +/obj/shuttle_landmark/escape_pod/out/pod##NUMBER { \ landmark_tag = "escape_pod_"+ #NUMBER +"_internim"; \ } \ -/obj/effect/shuttle_landmark/escape_pod/transit/pod##NUMBER { \ +/obj/shuttle_landmark/escape_pod/transit/pod##NUMBER { \ landmark_tag = "escape_pod_"+ #NUMBER +"_out"; \ } @@ -53,7 +53,7 @@ TORCH_ESCAPE_POD(17) /datum/shuttle/autodock/ferry/petrov name = "Petrov" - warmup_time = 10 + warmup_time = 10 SECONDS dock_target = "petrov_shuttle_airlock" waypoint_station = "nav_petrov_start" waypoint_offsite = "nav_petrov_out" @@ -61,16 +61,16 @@ TORCH_ESCAPE_POD(17) logging_access = access_petrov_helm ceiling_type = /turf/simulated/floor/shuttle_ceiling -/datum/shuttle/autodock/ferry/petrov/New(_name, obj/effect/shuttle_landmark/initial_location) +/datum/shuttle/autodock/ferry/petrov/New(_name, obj/shuttle_landmark/initial_location) shuttle_area = subtypesof(/area/shuttle/petrov) ..() -/obj/effect/shuttle_landmark/petrov/start +/obj/shuttle_landmark/petrov/start name = "First Deck" landmark_tag = "nav_petrov_start" docking_controller = "petrov_shuttle_dock_airlock" -/obj/effect/shuttle_landmark/petrov/out +/obj/shuttle_landmark/petrov/out name = "Space near the ship" landmark_tag = "nav_petrov_out" @@ -96,27 +96,27 @@ TORCH_ESCAPE_POD(17) "nav_slavers_base_antag" ) -/obj/effect/shuttle_landmark/ninja/hanger +/obj/shuttle_landmark/ninja/hanger name = "West of Hanger Deck" landmark_tag = "nav_ninja_hanger" -/obj/effect/shuttle_landmark/ninja/deck1 +/obj/shuttle_landmark/ninja/deck1 name = "South of First Deck" landmark_tag = "nav_ninja_deck1" -/obj/effect/shuttle_landmark/ninja/deck2 +/obj/shuttle_landmark/ninja/deck2 name = "Northeast of Second Deck" landmark_tag = "nav_ninja_deck2" -/obj/effect/shuttle_landmark/ninja/deck3 +/obj/shuttle_landmark/ninja/deck3 name = "East of Third Deck" landmark_tag = "nav_ninja_deck3" -/obj/effect/shuttle_landmark/ninja/deck4 +/obj/shuttle_landmark/ninja/deck4 name = "West of Fourth Deck" landmark_tag = "nav_ninja_deck4" -/obj/effect/shuttle_landmark/ninja/deck5 +/obj/shuttle_landmark/ninja/deck5 name = "Southeast of Bridge" landmark_tag = "nav_ninja_deck5" @@ -124,18 +124,18 @@ TORCH_ESCAPE_POD(17) /datum/shuttle/autodock/ferry/merchant name = "Merchant" - warmup_time = 10 + warmup_time = 10 SECONDS shuttle_area = /area/shuttle/merchant/home waypoint_station = "nav_merchant_start" waypoint_offsite = "nav_merchant_out" dock_target = "merchant_ship_dock" -/obj/effect/shuttle_landmark/merchant/start +/obj/shuttle_landmark/merchant/start name = "Merchant Base" landmark_tag = "nav_merchant_start" docking_controller = "merchant_station_dock" -/obj/effect/shuttle_landmark/merchant/out +/obj/shuttle_landmark/merchant/out name = "Docking Bay" landmark_tag = "nav_merchant_out" docking_controller = "merchant_shuttle_station_dock" @@ -144,20 +144,20 @@ TORCH_ESCAPE_POD(17) /datum/shuttle/autodock/ferry/administration name = "Administration" - warmup_time = 10 //want some warmup time so people can cancel. + warmup_time = 10 //want some warmup time so people can cancel. SECONDS shuttle_area = /area/shuttle/administration/centcom dock_target = "admin_shuttle" waypoint_station = "nav_admin_start" waypoint_offsite = "nav_admin_out" -/obj/effect/shuttle_landmark/admin/start +/obj/shuttle_landmark/admin/start name = "Centcom" landmark_tag = "nav_admin_start" docking_controller = "admin_shuttle" base_area = /area/centcom base_turf = /turf/simulated/floor/plating -/obj/effect/shuttle_landmark/admin/out +/obj/shuttle_landmark/admin/out name = "Docking Bay" landmark_tag = "nav_admin_out" docking_controller = "admin_shuttle_dock_airlock" @@ -167,47 +167,47 @@ TORCH_ESCAPE_POD(17) /datum/shuttle/autodock/ferry/centcom name = "Centcom" location = 1 - warmup_time = 10 + warmup_time = 10 SECONDS shuttle_area = /area/shuttle/transport1/centcom dock_target = "centcom_shuttle" waypoint_offsite = "nav_ferry_start" waypoint_station = "nav_ferry_out" -/obj/effect/shuttle_landmark/ferry/start +/obj/shuttle_landmark/ferry/start name = "Centcom" landmark_tag = "nav_ferry_start" docking_controller = "centcom_shuttle_bay" -/obj/effect/shuttle_landmark/ferry/out +/obj/shuttle_landmark/ferry/out name = "Docking Bay" landmark_tag = "nav_ferry_out" docking_controller = "centcom_shuttle_dock_airlock" -/obj/effect/shuttle_landmark/merc/hanger +/obj/shuttle_landmark/merc/hanger name = "Northeast of Hanger Deck" landmark_tag = "nav_merc_hanger" -/obj/effect/shuttle_landmark/merc/deck1 +/obj/shuttle_landmark/merc/deck1 name = "Northeast of First Deck" landmark_tag = "nav_merc_deck1" -/obj/effect/shuttle_landmark/merc/deck2 +/obj/shuttle_landmark/merc/deck2 name = "Southeast of the Second deck" landmark_tag = "nav_merc_deck2" -/obj/effect/shuttle_landmark/merc/deck3 +/obj/shuttle_landmark/merc/deck3 name = "South of Third deck" landmark_tag = "nav_merc_deck3" -/obj/effect/shuttle_landmark/merc/deck4 +/obj/shuttle_landmark/merc/deck4 name = "Northwest of Fourth Deck" landmark_tag = "nav_merc_deck4" -/obj/effect/shuttle_landmark/merc/deck5 +/obj/shuttle_landmark/merc/deck5 name = "East of Bridge" landmark_tag = "nav_merc_deck5" -/obj/effect/shuttle_landmark/vox_raider/dock +/obj/shuttle_landmark/vox_raider/dock name = "4th Deck, Aft Starboard Airlock" landmark_tag = "nav_vox_raider_dock" @@ -234,27 +234,27 @@ TORCH_ESCAPE_POD(17) "nav_slavers_base_antag", ) -/obj/effect/shuttle_landmark/skipjack/hanger +/obj/shuttle_landmark/skipjack/hanger name = "North of Hanger Deck" landmark_tag = "nav_skipjack_hanger" -/obj/effect/shuttle_landmark/skipjack/deck1 +/obj/shuttle_landmark/skipjack/deck1 name = "Northwest of First Deck" landmark_tag = "nav_skipjack_deck1" -/obj/effect/shuttle_landmark/skipjack/deck2 +/obj/shuttle_landmark/skipjack/deck2 name = "Southwest of the Second deck" landmark_tag = "nav_skipjack_deck2" -/obj/effect/shuttle_landmark/skipjack/deck3 +/obj/shuttle_landmark/skipjack/deck3 name = "Southeast of Third deck" landmark_tag = "nav_skipjack_deck3" -/obj/effect/shuttle_landmark/skipjack/deck4 +/obj/shuttle_landmark/skipjack/deck4 name = "Northwest of Fourth Deck" landmark_tag = "nav_skipjack_deck4" -/obj/effect/shuttle_landmark/skipjack/deck5 +/obj/shuttle_landmark/skipjack/deck5 name = "South of Bridge" landmark_tag = "nav_skipjack_deck5" @@ -282,27 +282,27 @@ TORCH_ESCAPE_POD(17) "nav_slavers_base_antag", ) -/obj/effect/shuttle_landmark/ert/hanger +/obj/shuttle_landmark/ert/hanger name = "Southeast of Hanger deck" landmark_tag = "nav_ert_hanger" -/obj/effect/shuttle_landmark/ert/deck1 +/obj/shuttle_landmark/ert/deck1 name = "Southwest of Fourth deck" landmark_tag = "nav_ert_deck1" -/obj/effect/shuttle_landmark/ert/deck2 +/obj/shuttle_landmark/ert/deck2 name = "Northwest of Third deck" landmark_tag = "nav_ert_deck2" -/obj/effect/shuttle_landmark/ert/deck3 +/obj/shuttle_landmark/ert/deck3 name = "Northwest of Second deck" landmark_tag = "nav_ert_deck3" -/obj/effect/shuttle_landmark/ert/deck4 +/obj/shuttle_landmark/ert/deck4 name = "Southwest of First Deck" landmark_tag = "nav_ert_deck4" -/obj/effect/shuttle_landmark/ert/deck5 +/obj/shuttle_landmark/ert/deck5 name = "West of Bridge" landmark_tag = "nav_ert_deck5" @@ -310,18 +310,18 @@ TORCH_ESCAPE_POD(17) /datum/shuttle/autodock/ferry/specops/ert name = "Special Operations" - warmup_time = 10 + warmup_time = 10 SECONDS shuttle_area = /area/shuttle/specops/centcom dock_target = "specops_shuttle_fore" waypoint_station = "nav_specops_start" waypoint_offsite = "nav_specops_out" -/obj/effect/shuttle_landmark/specops/start +/obj/shuttle_landmark/specops/start name = "Centcom" landmark_tag = "nav_specops_start" docking_controller = "specops_shuttle_port" -/obj/effect/shuttle_landmark/specops/out +/obj/shuttle_landmark/specops/out name = "Docking Bay" landmark_tag = "nav_specops_out" docking_controller = "specops_dock_airlock" @@ -331,16 +331,16 @@ TORCH_ESCAPE_POD(17) /datum/shuttle/autodock/ferry/supply/drone name = "Supply Drone" location = 1 - warmup_time = 10 + warmup_time = 10 SECONDS shuttle_area = /area/supply/dock waypoint_offsite = "nav_cargo_start" waypoint_station = "nav_cargo_station" -/obj/effect/shuttle_landmark/supply/centcom +/obj/shuttle_landmark/supply/centcom name = "Offsite" landmark_tag = "nav_cargo_start" -/obj/effect/shuttle_landmark/supply/station +/obj/shuttle_landmark/supply/station name = "Hangar" landmark_tag = "nav_cargo_station" base_area = /area/quartermaster/hangar @@ -348,7 +348,7 @@ TORCH_ESCAPE_POD(17) /datum/shuttle/autodock/overmap/exploration_shuttle name = "Charon" - move_time = 60 + move_time = 6 SECONDS shuttle_area = list(/area/exploration_shuttle/cockpit, /area/exploration_shuttle/atmos, /area/exploration_shuttle/power, /area/exploration_shuttle/crew, /area/exploration_shuttle/cargo, /area/exploration_shuttle/airlock, /area/exploration_shuttle/medical, /area/exploration_shuttle/fuel) dock_target = "charon_shuttle" current_location = "nav_hangar_charon" @@ -359,40 +359,40 @@ TORCH_ESCAPE_POD(17) logging_access = access_expedition_shuttle_helm ceiling_type = /turf/simulated/floor/shuttle_ceiling/torch -/obj/effect/shuttle_landmark/torch/hangar/exploration_shuttle +/obj/shuttle_landmark/torch/hangar/exploration_shuttle name = "Charon Hangar" landmark_tag = "nav_hangar_charon" base_area = /area/quartermaster/hangar base_turf = /turf/simulated/floor/plating -/obj/effect/shuttle_landmark/torch/deck1/exploration_shuttle +/obj/shuttle_landmark/torch/deck1/exploration_shuttle name = "Space near Forth Deck" landmark_tag = "nav_deck1_charon" -/obj/effect/shuttle_landmark/torch/deck2/exploration_shuttle +/obj/shuttle_landmark/torch/deck2/exploration_shuttle name = "Space near Third Deck" landmark_tag = "nav_deck2_charon" -/obj/effect/shuttle_landmark/torch/deck3/exploration_shuttle +/obj/shuttle_landmark/torch/deck3/exploration_shuttle name = "Space near Second Deck" landmark_tag = "nav_deck3_charon" -/obj/effect/shuttle_landmark/torch/deck4/exploration_shuttle +/obj/shuttle_landmark/torch/deck4/exploration_shuttle name = "Space near First Deck" landmark_tag = "nav_deck4_charon" -/obj/effect/shuttle_landmark/torch/deck5/exploration_shuttle +/obj/shuttle_landmark/torch/deck5/exploration_shuttle name = "Space near Bridge" landmark_tag = "nav_bridge_charon" -/obj/effect/shuttle_landmark/transit/torch/exploration_shuttle +/obj/shuttle_landmark/transit/torch/exploration_shuttle name = "In transit" landmark_tag = "nav_transit_charon" /datum/shuttle/autodock/overmap/guppy name = "Guppy" - warmup_time = 5 - move_time = 20 + warmup_time = 5 SECONDS + move_time = 2 SECONDS shuttle_area = /area/guppy_hangar/start dock_target ="guppy_shuttle" current_location = "nav_hangar_guppy" @@ -402,42 +402,42 @@ TORCH_ESCAPE_POD(17) fuel_consumption = 2 logging_home_tag = "nav_hangar_guppy" logging_access = access_guppy_helm - skill_needed = SKILL_NONE + skill_needed = SKILL_UNSKILLED ceiling_type = /turf/simulated/floor/shuttle_ceiling/torch -/obj/effect/shuttle_landmark/torch/hangar/guppy +/obj/shuttle_landmark/torch/hangar/guppy name = "Guppy Hangar" landmark_tag = "nav_hangar_guppy" base_area = /area/quartermaster/hangar base_turf = /turf/simulated/floor/plating -/obj/effect/shuttle_landmark/torch/deck1/guppy +/obj/shuttle_landmark/torch/deck1/guppy name = "Space near Forth Deck" landmark_tag = "nav_deck1_guppy" -/obj/effect/shuttle_landmark/torch/deck2/guppy +/obj/shuttle_landmark/torch/deck2/guppy name = "Space near Third Deck" landmark_tag = "nav_deck2_guppy" -/obj/effect/shuttle_landmark/torch/deck3/guppy +/obj/shuttle_landmark/torch/deck3/guppy name = "Space near Second Deck" landmark_tag = "nav_deck3_guppy" -/obj/effect/shuttle_landmark/torch/deck4/guppy +/obj/shuttle_landmark/torch/deck4/guppy name = "Space near First Deck" landmark_tag = "nav_deck4_guppy" -/obj/effect/shuttle_landmark/torch/deck5/guppy +/obj/shuttle_landmark/torch/deck5/guppy name = "Space near Bridge" landmark_tag = "nav_bridge_guppy" -/obj/effect/shuttle_landmark/transit/torch/guppy +/obj/shuttle_landmark/transit/torch/guppy name = "In transit" landmark_tag = "nav_transit_guppy" /datum/shuttle/autodock/overmap/aquila name = "Aquila" - move_time = 50 + move_time = 5 SECONDS shuttle_area = list(/area/aquila/cockpit, /area/aquila/power, /area/aquila/storage, /area/aquila/suits, /area/aquila/air, /area/aquila/crew, /area/aquila/medical, /area/aquila/airlock) current_location = "nav_hangar_aquila" landmark_transition = "nav_transit_aquila" @@ -447,33 +447,33 @@ TORCH_ESCAPE_POD(17) logging_access = access_aquila_helm ceiling_type = /turf/simulated/floor/shuttle_ceiling/torch -/obj/effect/shuttle_landmark/torch/hangar/aquila +/obj/shuttle_landmark/torch/hangar/aquila name = "Aquila Hangar" landmark_tag = "nav_hangar_aquila" docking_controller = "aquila_shuttle_dock_airlock" - base_turf = /turf/simulated/floor/reinforced/airless + base_turf = /turf/simulated/floor/reinforced -/obj/effect/shuttle_landmark/torch/deck1/aquila +/obj/shuttle_landmark/torch/deck1/aquila name = "Space near Forth Deck" landmark_tag = "nav_deck1_aquila" -/obj/effect/shuttle_landmark/torch/deck2/aquila +/obj/shuttle_landmark/torch/deck2/aquila name = "Space near Third Deck" landmark_tag = "nav_deck2_aquila" -/obj/effect/shuttle_landmark/torch/deck3/aquila +/obj/shuttle_landmark/torch/deck3/aquila name = "Space near Second Deck" landmark_tag = "nav_deck3_aquila" -/obj/effect/shuttle_landmark/torch/deck4/aquila +/obj/shuttle_landmark/torch/deck4/aquila name = "Space near First Deck" landmark_tag = "nav_deck4_aquila" -/obj/effect/shuttle_landmark/torch/deck5/aquila +/obj/shuttle_landmark/torch/deck5/aquila name = "Space near Bridge" landmark_tag = "nav_bridge_aquila" -/obj/effect/shuttle_landmark/transit/torch/aquila +/obj/shuttle_landmark/transit/torch/aquila name = "In transit" landmark_tag = "nav_transit_aquila" diff --git a/maps/torch/torch_simplemobs.dm b/maps/torch/torch_simplemobs.dm new file mode 100644 index 0000000000000..a641d9f531786 --- /dev/null +++ b/maps/torch/torch_simplemobs.dm @@ -0,0 +1,454 @@ +/obj/landmark/corpse/fleet + name = "Fleet Armsman" + corpse_outfits = list(/singleton/hierarchy/outfit/job/torch/ert/hostile) + spawn_flags = CORPSE_SPAWNER_RANDOM_NAMELESS | CORPSE_SPAWNER_ALL_SKIPS + +/obj/landmark/corpse/fleet/leader + name = "Fleet Team Leader" + corpse_outfits = list(/singleton/hierarchy/outfit/job/torch/ert/hostile/leader) + +/obj/landmark/corpse/fleet/space + name = "Fleet Assault Armsman" + corpse_outfits = list(/singleton/hierarchy/outfit/job/torch/ert/hostile/suit) + +/obj/item/clothing/suit/armor/bulletproof/armsman + valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMOR_A, ACCESSORY_SLOT_ARMOR_L, ACCESSORY_SLOT_ARMOR_S) + accessories = list( + /obj/item/clothing/accessory/arm_guards/riot, + /obj/item/clothing/accessory/leg_guards/riot, + /obj/item/clothing/accessory/armor_tag/solgov/lead, + /obj/item/clothing/accessory/storage/pouches + ) + +/obj/item/clothing/head/helmet/armsman + accessories = list(/obj/item/clothing/accessory/helmet_cover/lead) + +/mob/living/simple_animal/hostile/human/fleet + name = "\improper Fleet Armsman" + desc = "An armsman wearing Fleet garbs. They have a Fleet patch on their uniform, and pride on their shoulders." + icon_state = "fleetarmsman" + icon_living = "fleetarmsman" + icon_dead = "fleetassault_dead" + icon_gib = "fleetarmsman_gib" + turns_per_move = 5 + response_help = "pats" + response_disarm = "shoves" + response_harm = "hits" + natural_armor = list( + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_PISTOL, + laser = ARMOR_LASER_SMALL + ) + speed = 8 + maxHealth = 100 + health = 100 + harm_intent_damage = 5 + natural_weapon = /obj/item/natural_weapon/punch + can_escape = TRUE + a_intent = I_HURT + var/corpse = null + var/weapon1 + var/weapon2 + unsuitable_atmos_damage = 15 + environment_smash = 1 + faction = "roguefleet" + status_flags = CANPUSH + + ai_holder = /datum/ai_holder/simple_animal/humanoid/hostile/fleet + say_list_type = /datum/say_list/fleet/traitor + ranged = TRUE + +/mob/living/simple_animal/hostile/human/fleet/death(gibbed, deathmessage, show_dead_message) + ..(gibbed, deathmessage, show_dead_message) + if(corpse) + new corpse (loc) + if(weapon1) + new weapon1 (loc) + if(weapon2) + new weapon2 (loc) + qdel(src) + return + +///////////////Pistol//////////////// + +/mob/living/simple_animal/hostile/human/fleet/ranged + name = "\improper Armed Fleet Armsman" + icon_state = "fleetarmsmanarmed" + icon_living = "fleetarmsmanarmed" + + corpse = /obj/landmark/corpse/fleet + + casingtype = /obj/item/ammo_casing/pistol + projectiletype = /obj/item/projectile/bullet/pistol + natural_weapon = /obj/item/gun/projectile/pistol/m22f + weapon1 = /obj/item/gun/projectile/pistol/m22f + status_flags = EMPTY_BITFIELD + +/mob/living/simple_animal/hostile/human/fleet/ranged/neutral + say_list_type = /datum/say_list/fleet/friendly + faction = MOB_FACTION_CREW + +//////////////Bullpup//////////////// + +/mob/living/simple_animal/hostile/human/fleet/ranged/bullpup + name = "\improper Fleet Rifleman" + icon_state = "fleetrifleman" + icon_living = "fleetrifleman" + casingtype = /obj/item/ammo_casing/rifle + projectiletype = /obj/item/projectile/bullet/rifle + natural_weapon = /obj/item/gun/projectile/automatic/bullpup_rifle/light + weapon1 = /obj/item/gun/projectile/automatic/bullpup_rifle/light + status_flags = EMPTY_BITFIELD + +/mob/living/simple_animal/hostile/human/fleet/ranged/bullpup/neutral + say_list_type = /datum/say_list/fleet/friendly + faction = MOB_FACTION_CREW + +//////////////Team Leader//////////////// + +/mob/living/simple_animal/hostile/human/fleet/ranged/leader + name = "\improper Fleet Team Leader" + desc = "A Fleet armsman with armaments. This one seems to be more armed than the rest, sporting a Vesper machine-pistol." + icon_state = "fleetteamlead" + icon_living = "fleetteamlead" + maxHealth = 150 + health = 150 + casingtype = /obj/item/ammo_casing/pistol + projectiletype = /obj/item/projectile/bullet/pistol + natural_weapon = /obj/item/gun/projectile/automatic/machine_pistol + weapon1 = /obj/item/gun/projectile/automatic/machine_pistol + status_flags = EMPTY_BITFIELD + + corpse = /obj/landmark/corpse/fleet/leader + + ai_holder = /datum/ai_holder/simple_animal/humanoid/hostile/fleet/ranged/teamlead + rapid = TRUE + +/mob/living/simple_animal/hostile/human/fleet/ranged/leader/neutral + say_list_type = /datum/say_list/fleet/friendly + faction = MOB_FACTION_CREW + +// These guys are chonky. Use them for BIG fights. Or sparingly. + +//////////////Rigsuit//////////////// + +/mob/living/simple_animal/hostile/human/fleet/space + name = "\improper Fleet Assault Armsman" + desc = "A Fleet Armsman clad in a special-purpose rigsuit. They seem tough and hardy." + icon_state = "fleetassault" + icon_living = "fleetassault" + icon_dead = "fleetassault_dead" + corpse = /obj/landmark/corpse/fleet/space + ranged = TRUE + natural_armor = list( + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_RESISTANT, + laser = ARMOR_LASER_HANDGUNS + ) + speed = 4 + maxHealth = 200 + health = 200 + min_gas = null + max_gas = null + minbodytemp = 0 + + var/deactivated = FALSE + ai_holder = /datum/ai_holder/simple_animal/humanoid/hostile/fleet/ranged/space + + +/mob/living/simple_animal/hostile/human/fleet/space/emp_act(severity) + if (status_flags & GODMODE) + return + . = ..() + stun() + +/mob/living/simple_animal/hostile/human/fleet/space/proc/stun() + if (deactivated) + return + set_AI_busy(TRUE) + deactivated = TRUE + visible_message(SPAN_MFAUNA("\The [src]'s rigsuit flashes hastily, locking into place!")) + update_icon() + addtimer(CALLBACK(src, PROC_REF(reactivate)), 6 SECONDS) + +/mob/living/simple_animal/hostile/human/fleet/space/proc/reactivate() + set_AI_busy(FALSE) + deactivated = FALSE + visible_message(SPAN_MFAUNA("\The [src]'s rigsuit stops flashing, regaining motion!")) + update_icon() + +/mob/living/simple_animal/hostile/human/fleet/space/neutral + say_list_type = /datum/say_list/fleet/friendly + faction = MOB_FACTION_CREW + +/mob/living/simple_animal/hostile/human/fleet/space/Process_Spacemove() + return 1 + +//////////////Rigsuit - Bullpup//////////////// + +/mob/living/simple_animal/hostile/human/fleet/space/ranged + icon_state = "fleetassaultarmed" + icon_living = "fleetassaultarmed" + casingtype = /obj/item/ammo_casing/rifle + projectiletype = /obj/item/projectile/bullet/rifle + natural_weapon = /obj/item/gun/projectile/automatic/bullpup_rifle/light + weapon1 = /obj/item/gun/projectile/automatic/bullpup_rifle/light + +/mob/living/simple_animal/hostile/human/fleet/space/ranged/on_update_icon() + ..() + if(stat != DEAD) + if(deactivated) + AddOverlays(image(icon, "disabled")) + return + + ClearOverlays() + +/mob/living/simple_animal/hostile/human/fleet/space/ranged/neutral + say_list_type = /datum/say_list/fleet/friendly + faction = MOB_FACTION_CREW + +//////////////Rigsuit - Heavy//////////////// +/* Has a special, telegraphed rig-mounted laser cannon */ + +#define ATTACK_MODE_LAS "las" +#define ATTACK_MODE_SAW "saw" + +/mob/living/simple_animal/hostile/human/fleet/space/ranged/heavy + name = "\improper Fleet Heavy Weapons Specialist" + desc = "A Fleet Specialist clad in a heavier variant of the special-purpose rigsuit. Their module seems to carry a shoulder-mounted laser. Complementing their L6 SAW." + icon_state = "fleetheavy" + icon_living = "fleetheavy" + rapid = TRUE + maxHealth = 300 + health = 300 + special_attack_cooldown = 1.5 MINUTES + base_attack_cooldown = 0.5 SECONDS + say_list_type = /datum/say_list/fleet/heavy + + casingtype = /obj/item/ammo_casing/rifle + projectiletype = /obj/item/projectile/bullet/rifle + natural_weapon = /obj/item/gun/projectile/automatic/l6_saw + weapon1 = /obj/item/rig_module/mounted/energy/lcannon + + var/attack_mode = ATTACK_MODE_SAW + var/num_shots + +/mob/living/simple_animal/hostile/human/fleet/space/ranged/heavy/Initialize() + . = ..() + switch_mode(ATTACK_MODE_LAS) + +/mob/living/simple_animal/hostile/human/fleet/space/ranged/heavy/Life() + . = ..() + if(!.) + return + + if(time_last_used_ability < world.time) + switch_mode(ATTACK_MODE_LAS) + +/mob/living/simple_animal/hostile/human/fleet/space/ranged/heavy/proc/switch_mode(new_mode) + if(!new_mode || new_mode == attack_mode) + return + + switch(new_mode) + if(ATTACK_MODE_LAS) + attack_mode = ATTACK_MODE_LAS + ranged = TRUE + projectilesound = 'sound/weapons/Laser.ogg' + projectiletype = /obj/item/projectile/beam/midlaser + num_shots = 2 + fire_desc = "fires a laser" + time_last_used_ability = special_attack_cooldown + world.time + visible_message(SPAN_MFAUNA("\The [src]'s rig-mounted laser cannon shines brightly!")) + if(ATTACK_MODE_SAW) + attack_mode = ATTACK_MODE_SAW + ranged = TRUE + projectiletype = /obj/item/projectile/bullet/rifle + num_shots = 10 + fire_desc = "fires a burst" + time_last_used_ability = base_attack_cooldown + world.time + visible_message(SPAN_MFAUNA("\The [src] pulls up \the machinegun to bear!")) + + update_icon() + +/mob/living/simple_animal/hostile/human/fleet/space/ranged/heavy/shoot_target(target_mob) + if(num_shots <= 0) + if(attack_mode == ATTACK_MODE_LAS) + switch_mode(ATTACK_MODE_SAW) + else + switch_mode(ATTACK_MODE_LAS) + ..() + +/mob/living/simple_animal/hostile/human/fleet/space/ranged/heavy/shoot(target, start, user, bullet) + if (projectiletype) + ..() + num_shots-- + +/mob/living/simple_animal/hostile/human/fleet/space/ranged/heavy/on_update_icon() + ..() + if(stat != DEAD) + if(deactivated) + AddOverlays(image(icon, "disabled")) + return + + ClearOverlays() + switch(attack_mode) + if(ATTACK_MODE_LAS) + AddOverlays(image(icon, "laser")) + +/mob/living/simple_animal/hostile/human/fleet/space/ranged/heavy/neutral + say_list_type = /datum/say_list/fleet/friendly + faction = MOB_FACTION_CREW + +/* AI */ + +/datum/ai_holder/simple_animal/humanoid/hostile/fleet + threaten_delay = 2 SECOND + threaten_timeout = 30 SECONDS + violent_breakthrough = FALSE + speak_chance = 5 + base_wander_delay = 5 + +/datum/ai_holder/simple_animal/humanoid/hostile/fleet/ranged/teamlead + threaten_delay = 2 SECOND + threaten_timeout = 30 SECONDS + base_wander_delay = 3 + conserve_ammo = FALSE + pointblank = TRUE +/datum/ai_holder/simple_animal/humanoid/hostile/fleet/ranged/space + threaten_delay = 2 SECOND + threaten_timeout = 30 SECONDS + speak_chance = 5 + base_wander_delay = 3 + returns_home = FALSE + violent_breakthrough = TRUE + conserve_ammo = FALSE + destructive = TRUE + pointblank = TRUE + +/datum/ai_holder/simple_animal/humanoid/hostile/fleet/ranged/friendly + intelligence_level = AI_NORMAL + threaten_delay = 2 SECOND + threaten_timeout = 30 SECONDS + violent_breakthrough = FALSE + speak_chance = 5 + base_wander_delay = 5 + +/* SAY LIST */ + +/datum/say_list/fleet/friendly + speak = list( + "Wish someone would act up. Just once.", + "I love this job, but boy do I hate the damn wait...", + "Really wish something would happen right about now.", + "The hell'd we pack all this ammo for if we're not using it?", + "Wish something would pop up to shoot now..." + ) + emote_hear = list( + "fidgets, antsy.", + "unloads their weapon to check their ammo, before reloading.", + "is rearing and ready to go, bouncing in their boots.", + "scans the area for threats." + ) + say_threaten = list( + "There you are, let's get the party started!", + "Hey, contact spotted, load up!", + "Found one, a hostile!", + "About time I got to shoot something!", + "Time to lock and load!" + ) + say_maybe_target = list( + "Hold up, heard something.", + "Saw a contact, checking them.", + "Hey, you, hold a minute!", + "Think I heard something over there.", + "Saw something move, let's check it out." + ) + say_escalate = list( + "Fire on that one!!", + "Engage that hostile!", + "Fire at will!", + "Pursuing hostile target!", + "Clearing the area!", + "Engaging hostile target!" + ) + say_stand_down = list( + "We're clear! Let's find these guys!", + "All hostiles down or gone, area clear. Keep watch!", + "Hostiles have broken contact, pull security!", + "Visual broken, find them!", + "Visual lost, make sure they're gone!", + "They're gone, clear the area!" + ) + +/datum/say_list/fleet/traitor + speak = list( + "I don't like this feeling.", + "You ever think maybe we're the baddies?", + "...mmm, something feels off.", + "Best of the best... condemned to this." + ) + emote_hear = list( + "checks their weapon, antsy.", + "unloads their weapon to check their ammo, before reloading.", + "is scanning for threats.", + "snaps their gun somewhere nearby, before grunting as nothing's there." + ) + say_threaten = list( + "Knew I fucking saw you!", + "Hey- Load up! We found one!", + "They fucking found us!", + "I knew it wasn't the fucking shadows!", + "HEY, asshole! Time to die!" + ) + say_maybe_target = list( + "FUCK! Heard something again...", + "Think there's a fucking person over here!", + "I'm not jumping at shadows, I saw someone!", + "Think I heard something over there!", + "Saw something move, tempted to shoot it." + ) + say_escalate = list( + "Kill that fucker!", + "Contact, front!", + "Blast 'em!", + "Fire! Fire fire fire!" + ) + say_stand_down = list( + "Fuck! What if there's more?!", + "Get ready! More will probably come!", + "Pull up on defense! Can't let them catch us off guard!", + "Lost sight of them, find them!", + "Visual's lost, make sure there isn't more lurking!", + "They're gone! Search the damn area!" + ) + +/datum/say_list/fleet/heavy + speak = list( + "At this rate I'll never get to use this cannon...", + "I've got this place locked down.", + "This rig's as ready as it can be. Just waiting for action." + ) + say_threaten = list( + "Scope's picked up target!", + "Finally!", + ) + say_maybe_target = list( + "Just me. Nothing real.", + "Gah, thought I saw something..", + "Nevermind..", + "Guess I don't get to use this this, after all." + ) + say_escalate = list( + "Got you!", + "Stand still!", + "Big mistake, buddy!", + "Can't run from my machinegun!" + ) + say_stand_down = list( + "Piece of cake.", + "Rig makes this too easy.", + "Watch 'em go!" + ) + +#undef ATTACK_MODE_LAS +#undef ATTACK_MODE_SAW diff --git a/maps/torch/torch_unit_testing.dm b/maps/torch/torch_unit_testing.dm index 8f3d794ef0f35..469903874da27 100644 --- a/maps/torch/torch_unit_testing.dm +++ b/maps/torch/torch_unit_testing.dm @@ -78,15 +78,18 @@ /area/turbolift/seconddeck, /area/turbolift/thirddeck, /area/turbolift/fourthdeck, - /area/template_noop + /area/template_noop, + /area/bluespace_interlude, + /area/bluespace_interlude/platform, + /area/bluespace_interlude/surroundings ) /datum/unit_test/zas_area_test/cargo_bay name = "ZAS: Cargo Bay" area_path = /area/quartermaster/storage -/datum/unit_test/zas_area_test/supply_centcomm - name = "ZAS: Supply Shuttle (CentComm)" +/datum/unit_test/zas_area_test/supply_centcom + name = "ZAS: Supply Shuttle (CentCom)" area_path = /area/supply/dock /datum/unit_test/zas_area_test/xenobio diff --git a/maps/torch/z1_admin.dmm b/maps/torch/z1_admin.dmm index b94c2eb8cfd23..152f0c4a1a00e 100644 --- a/maps/torch/z1_admin.dmm +++ b/maps/torch/z1_admin.dmm @@ -13,7 +13,7 @@ /turf/space, /area/shuttle/syndicate_elite/mothership) "aae" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /obj/machinery/telecomms/allinone{ @@ -68,7 +68,7 @@ /area/holodeck/source_picnicarea) "aay" = ( /obj/structure/table/rack/holorack, -/obj/effect/landmark/costume/chameleon, +/obj/landmark/costume/chameleon, /turf/simulated/floor/holofloor/tiled/dark, /area/holodeck/source_theatre) "aaz" = ( @@ -108,19 +108,19 @@ /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_emptycourt) "aaH" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ +/obj/floor_decal/corner/red/three_quarters{ dir = 8 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_emptycourt) "aaI" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 5 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_emptycourt) "aaJ" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ +/obj/floor_decal/corner/red/three_quarters{ dir = 1 }, /turf/simulated/floor/holofloor/tiled, @@ -156,13 +156,13 @@ /turf/simulated/floor/holofloor/wood, /area/holodeck/source_courtroom) "aaW" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "Holocarp Spawn" }, /turf/simulated/floor/holofloor/reinforced, /area/holodeck/source_wildlife) "aaX" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/holofloor/tiled, @@ -171,7 +171,7 @@ /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_emptycourt) "aaZ" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /turf/simulated/floor/holofloor/tiled, @@ -181,7 +181,7 @@ /turf/simulated/floor/holofloor/grass, /area/holodeck/source_picnicarea) "abh" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/holofloor/desert, /area/holodeck/source_picnicarea) "abi" = ( @@ -216,19 +216,19 @@ dir = 1; name = "Jury Box" }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 9 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 5 }, /turf/simulated/floor/holofloor/carpet, @@ -265,25 +265,25 @@ /turf/simulated/floor/holofloor/grass, /area/holodeck/source_picnicarea) "abC" = ( -/obj/effect/floor_decal/spline/plain{ +/obj/floor_decal/spline/plain{ dir = 1 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_theatre) "abD" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 5 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 9 }, /turf/simulated/floor/holofloor/carpet, @@ -340,13 +340,13 @@ /obj/structure/bed/chair/holochair{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 9 }, /turf/simulated/floor/holofloor/carpet, @@ -355,10 +355,10 @@ /obj/structure/bed/chair/holochair{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, -/obj/effect/floor_decal/carpet/corners{ +/obj/floor_decal/carpet/corners{ dir = 9 }, /turf/simulated/floor/holofloor/carpet, @@ -393,70 +393,70 @@ /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_theatre) "aci" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 9 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_theatre) "acj" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_theatre) "ack" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 5 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_theatre) "acl" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_theatre) "acm" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 9 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_courtroom) "acn" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_courtroom) "aco" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 5 }, /turf/simulated/floor/holofloor/carpet, @@ -465,7 +465,7 @@ /obj/structure/bed/chair/holochair{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, /turf/simulated/floor/holofloor/carpet, @@ -474,7 +474,7 @@ /obj/structure/bed/chair/holochair{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, /turf/simulated/floor/holofloor/carpet, @@ -558,7 +558,7 @@ /area/holodeck/source_picnicarea) "acS" = ( /obj/structure/holostool, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, /turf/simulated/floor/holofloor/carpet, @@ -569,14 +569,14 @@ /area/holodeck/source_theatre) "acU" = ( /obj/structure/holostool, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_theatre) "acV" = ( /obj/structure/table/holo_woodentable, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, /turf/simulated/floor/holofloor/carpet, @@ -590,19 +590,19 @@ /area/holodeck/source_courtroom) "acY" = ( /obj/structure/table/holo_woodentable, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_courtroom) "acZ" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_emptycourt) "ada" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /turf/simulated/floor/holofloor/tiled, @@ -658,7 +658,7 @@ /obj/structure/bed/chair/holochair{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, /turf/simulated/floor/holofloor/carpet, @@ -673,7 +673,7 @@ /obj/structure/bed/chair/holochair{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, /turf/simulated/floor/holofloor/carpet, @@ -691,13 +691,13 @@ /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_courtroom) "adO" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_courtroom) "adP" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, /turf/simulated/floor/holofloor/carpet, @@ -734,43 +734,43 @@ /area/centcom/evac) "adZ" = ( /obj/structure/holostool, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ dir = 10 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_theatre) "aea" = ( /obj/structure/holostool, -/obj/effect/floor_decal/carpet, +/obj/floor_decal/carpet, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_theatre) "aeb" = ( /obj/structure/holostool, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ dir = 6 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_theatre) "aec" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ dir = 6 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 10 }, /turf/simulated/floor/holofloor/carpet, @@ -779,11 +779,11 @@ /obj/structure/bed/chair/holochair{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ dir = 10 }, /turf/simulated/floor/holofloor/carpet, @@ -792,11 +792,11 @@ /obj/structure/bed/chair/holochair{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ dir = 6 }, /turf/simulated/floor/holofloor/carpet, @@ -840,16 +840,16 @@ /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_theatre) "aeq" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 5 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 6 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 10 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 9 }, /turf/simulated/floor/holofloor/carpet, @@ -858,11 +858,11 @@ /obj/structure/bed/chair/holochair{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ dir = 10 }, /turf/simulated/floor/holofloor/carpet, @@ -871,34 +871,34 @@ /obj/structure/bed/chair/holochair{ dir = 1 }, -/obj/effect/floor_decal/carpet, +/obj/floor_decal/carpet, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_courtroom) "aet" = ( /obj/structure/bed/chair/holochair{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ dir = 6 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_courtroom) "aeu" = ( -/obj/effect/floor_decal/corner/green/three_quarters, +/obj/floor_decal/corner/green/three_quarters, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_emptycourt) "aev" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_emptycourt) "aew" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 4 }, /turf/simulated/floor/holofloor/tiled, @@ -1024,26 +1024,26 @@ /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "aeU" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ +/obj/floor_decal/corner/red/three_quarters{ dir = 8 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "aeV" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 5 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "aeW" = ( /obj/structure/holohoop, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 5 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "aeX" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ +/obj/floor_decal/corner/red/three_quarters{ dir = 1 }, /turf/simulated/floor/holofloor/tiled, @@ -1068,7 +1068,7 @@ "afc" = ( /obj/structure/table/holotable, /obj/machinery/readybutton, -/obj/effect/floor_decal/corner/red/three_quarters{ +/obj/floor_decal/corner/red/three_quarters{ dir = 8 }, /turf/simulated/floor/holofloor/tiled, @@ -1079,14 +1079,14 @@ /obj/item/clothing/suit/armor/tdome/red, /obj/item/clothing/under/color/red, /obj/item/holo/esword/red, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 5 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_thunderdomecourt) "afe" = ( /obj/structure/table/holotable, -/obj/effect/floor_decal/corner/red/three_quarters{ +/obj/floor_decal/corner/red/three_quarters{ dir = 1 }, /turf/simulated/floor/holofloor/tiled, @@ -1107,7 +1107,7 @@ }, /area/centcom/evac) "afj" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "Holocarp Spawn Random" }, /turf/simulated/floor/holofloor/space, @@ -1117,46 +1117,46 @@ /turf/simulated/floor/holofloor/snow, /area/holodeck/source_snowfield) "afl" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 9 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 10 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_meetinghall) "afm" = ( -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ dir = 1 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_meetinghall) "afn" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 5 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 6 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_meetinghall) "afo" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/holofloor/tiled, @@ -1165,7 +1165,7 @@ /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "afq" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /turf/simulated/floor/holofloor/tiled, @@ -1189,7 +1189,7 @@ }, /area/holodeck/source_beach) "afu" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/holofloor/tiled, @@ -1198,7 +1198,7 @@ /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_thunderdomecourt) "afw" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /turf/simulated/floor/holofloor/tiled, @@ -1220,7 +1220,7 @@ /area/holodeck/source_snowfield) "afV" = ( /obj/structure/table/holo_woodentable, -/obj/effect/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood, /turf/simulated/floor/holofloor/wood, /area/holodeck/source_meetinghall) "afW" = ( @@ -1341,13 +1341,13 @@ /turf/simulated/floor/holofloor/tiled/dark, /area/holodeck/source_boxingcourt) "agA" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ +/obj/floor_decal/corner/red/three_quarters{ dir = 8 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_boxingcourt) "agB" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 5 }, /turf/simulated/floor/holofloor/tiled, @@ -1407,119 +1407,119 @@ /turf/simulated/floor/holofloor/snow, /area/holodeck/source_snowfield) "agR" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 5 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 6 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 9 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 10 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_meetinghall) "agS" = ( /obj/structure/holostool, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 9 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_meetinghall) "agT" = ( /obj/structure/holostool, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_meetinghall) "agU" = ( /obj/structure/holostool, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 5 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_meetinghall) "agV" = ( -/obj/effect/floor_decal/corner/red/three_quarters, +/obj/floor_decal/corner/red/three_quarters, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "agW" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "agX" = ( /obj/item/beach_ball/holoball, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "agY" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ +/obj/floor_decal/corner/red/three_quarters{ dir = 4 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "agZ" = ( /obj/structure/window/reinforced/holowindow/disappearing, -/obj/effect/floor_decal/corner/red/three_quarters, +/obj/floor_decal/corner/red/three_quarters, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_thunderdomecourt) "aha" = ( /obj/structure/window/reinforced/holowindow/disappearing, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_thunderdomecourt) "ahb" = ( /obj/structure/window/reinforced/holowindow/disappearing, -/obj/effect/floor_decal/corner/red/three_quarters{ +/obj/floor_decal/corner/red/three_quarters{ dir = 4 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_thunderdomecourt) "ahc" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_boxingcourt) "ahd" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 8 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_boxingcourt) "ahe" = ( -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/green{ dir = 1 }, -/obj/effect/floor_decal/corner/black{ +/obj/floor_decal/corner/black{ dir = 4 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_boxingcourt) "ahf" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /turf/simulated/floor/holofloor/tiled, @@ -1579,7 +1579,7 @@ /area/centcom/evac) "aht" = ( /obj/structure/holostool, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, /turf/simulated/floor/holofloor/carpet, @@ -1590,25 +1590,25 @@ /area/holodeck/source_meetinghall) "ahv" = ( /obj/structure/holostool, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_meetinghall) "ahw" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 8 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "ahx" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "ahy" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 1 }, /turf/simulated/floor/holofloor/tiled, @@ -1629,7 +1629,7 @@ /obj/structure/window/reinforced/holowindow/disappearing{ dir = 1 }, -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 8 }, /turf/simulated/floor/holofloor/tiled, @@ -1638,7 +1638,7 @@ /obj/structure/window/reinforced/holowindow/disappearing{ dir = 1 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/holofloor/tiled, @@ -1647,23 +1647,23 @@ /obj/structure/window/reinforced/holowindow/disappearing{ dir = 1 }, -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 1 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_thunderdomecourt) "ahE" = ( -/obj/effect/floor_decal/corner/red, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/red, +/obj/floor_decal/corner/green{ dir = 1 }, -/obj/effect/floor_decal/corner/black{ +/obj/floor_decal/corner/black{ dir = 8 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_boxingcourt) "ahF" = ( -/obj/effect/floor_decal/corner/red/three_quarters{ +/obj/floor_decal/corner/red/three_quarters{ dir = 4 }, /turf/simulated/floor/holofloor/tiled, @@ -1685,13 +1685,13 @@ }, /area/centcom/evac) "ahX" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "ahY" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /turf/simulated/floor/holofloor/tiled, @@ -1715,25 +1715,25 @@ /turf/simulated/floor/holofloor/beach/sand, /area/holodeck/source_beach) "aid" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_thunderdomecourt) "aie" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_thunderdomecourt) "aif" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_boxingcourt) "aig" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 4 }, /turf/simulated/floor/holofloor/tiled, @@ -1763,7 +1763,7 @@ /area/holodeck/source_snowfield) "aiu" = ( /obj/structure/holostool, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, /turf/simulated/floor/holofloor/carpet{ @@ -1780,18 +1780,18 @@ /turf/simulated/floor/holofloor/tiled/dark, /area/holodeck/source_basketball) "aiw" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "aix" = ( -/obj/effect/overlay/palmtree_r, +/obj/overlay/palmtree_r, /turf/simulated/floor/holofloor/beach/sand, /area/holodeck/source_beach) "aiz" = ( -/obj/effect/overlay/palmtree_l, -/obj/effect/overlay/coconut, +/obj/overlay/palmtree_l, +/obj/overlay/coconut, /turf/simulated/floor/holofloor/beach/sand, /area/holodeck/source_beach) "aiA" = ( @@ -1827,27 +1827,27 @@ /area/centcom/evac) "aiK" = ( /obj/structure/holostool, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ dir = 10 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_meetinghall) "aiL" = ( /obj/structure/holostool, -/obj/effect/floor_decal/carpet, +/obj/floor_decal/carpet, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_meetinghall) "aiM" = ( /obj/structure/holostool, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ dir = 4 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 6 }, /turf/simulated/floor/holofloor/carpet, @@ -1881,27 +1881,27 @@ }, /area/centcom/evac) "aja" = ( -/obj/effect/floor_decal/corner/green/three_quarters, +/obj/floor_decal/corner/green/three_quarters, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "ajb" = ( /obj/structure/holohoop{ dir = 1 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "ajc" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 4 }, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_basketball) "ajd" = ( /obj/structure/table/holotable, -/obj/effect/floor_decal/corner/green/three_quarters, +/obj/floor_decal/corner/green/three_quarters, /turf/simulated/floor/holofloor/tiled, /area/holodeck/source_thunderdomecourt) "aje" = ( @@ -1910,7 +1910,7 @@ /obj/item/clothing/suit/armor/tdome/green, /obj/item/clothing/under/color/green, /obj/item/holo/esword/green, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/holofloor/tiled, @@ -1918,7 +1918,7 @@ "ajf" = ( /obj/structure/table/holotable, /obj/machinery/readybutton, -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 4 }, /turf/simulated/floor/holofloor/tiled, @@ -2011,24 +2011,24 @@ /turf/unsimulated/beach/sand, /area/beach) "alJ" = ( -/obj/effect/overlay/palmtree_l, +/obj/overlay/palmtree_l, /turf/unsimulated/beach/sand, /area/beach) "alK" = ( -/obj/effect/overlay/palmtree_r, -/obj/effect/overlay/coconut, +/obj/overlay/palmtree_r, +/obj/overlay/coconut, /turf/unsimulated/beach/sand, /area/beach) "alX" = ( -/obj/effect/overlay/coconut, +/obj/overlay/coconut, /turf/unsimulated/beach/sand, /area/beach) "amK" = ( -/obj/effect/overlay/palmtree_r, +/obj/overlay/palmtree_r, /turf/unsimulated/beach/sand, /area/beach) "anb" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "endgame_exit" }, /turf/unsimulated/beach/sand, @@ -2073,7 +2073,7 @@ /area/beach) "aph" = ( /obj/structure/bed/chair, -/obj/effect/landmark{ +/obj/landmark{ name = "endgame_exit" }, /turf/unsimulated/beach/sand, @@ -2122,7 +2122,7 @@ }, /area/centcom) "asS" = ( -/obj/effect/paint/hull, +/obj/paint/hull, /turf/simulated/wall/r_titanium, /area/shuttle/administration/centcom) "asV" = ( @@ -2201,14 +2201,14 @@ }, /area/prison/solitary) "atl" = ( -/obj/effect/decal/cleanable/cobweb2, +/obj/decal/cleanable/cobweb2, /turf/unsimulated/floor{ icon_state = "plating"; name = "plating" }, /area/prison/solitary) "atm" = ( -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, /turf/unsimulated/floor{ icon_state = "plating"; name = "plating" @@ -2264,7 +2264,7 @@ }, /area/centcom/living) "atw" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ icon_state = "dark" }, @@ -2273,7 +2273,7 @@ /turf/unsimulated/wall, /area/centcom/suppy) "atA" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "prisonwarp" }, /turf/unsimulated/floor{ @@ -2286,14 +2286,14 @@ dir = 8; icon_state = "propulsion_l" }, -/obj/effect/paint/black, +/obj/paint/black, /turf/simulated/wall/r_titanium, /area/shuttle/administration/centcom) "atC" = ( /obj/structure/shuttle/engine/heater{ dir = 8 }, -/obj/effect/paint/black, +/obj/paint/black, /turf/simulated/wall/r_titanium, /area/shuttle/administration/centcom) "atD" = ( @@ -2397,7 +2397,7 @@ dir = 8; icon_state = "propulsion_r" }, -/obj/effect/paint/black, +/obj/paint/black, /turf/simulated/wall/r_titanium, /area/shuttle/administration/centcom) "atV" = ( @@ -2445,7 +2445,7 @@ /area/centcom/living) "aue" = ( /obj/structure/bed, -/obj/effect/decal/cleanable/cobweb, +/obj/decal/cleanable/cobweb, /turf/unsimulated/floor{ icon_state = "plating"; name = "plating" @@ -2483,8 +2483,8 @@ /turf/simulated/floor/shuttle/red, /area/shuttle/administration/centcom) "aum" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/black, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/black, /turf/simulated/floor/plating, /area/shuttle/administration/centcom) "aun" = ( @@ -2500,7 +2500,7 @@ }, /area/centcom/living) "auo" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/r_titanium, /area/supply/dock) "auq" = ( @@ -2508,11 +2508,11 @@ dir = 1 }, /obj/structure/window/reinforced, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/r_titanium, /area/supply/dock) "aus" = ( -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, /turf/unsimulated/wall, /area/prison/solitary) "aut" = ( @@ -2533,7 +2533,7 @@ id_tag = "supply_shuttle"; name = "Supply Drone Shutter Control" }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/r_titanium, /area/supply/dock) "auy" = ( @@ -2549,7 +2549,7 @@ /turf/simulated/floor/shuttle/white, /area/shuttle/administration/centcom) "auE" = ( -/obj/structure/closet/secure_closet/freezer/meat, +/obj/structure/closet/fridge/meat, /turf/simulated/floor/shuttle/white, /area/shuttle/administration/centcom) "auF" = ( @@ -2616,7 +2616,7 @@ }, /area/centcom/living) "auQ" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/blast/shutters{ dir = 4; id_tag = "supply_shuttle"; @@ -2645,7 +2645,7 @@ }, /area/centcom/living) "auV" = ( -/obj/structure/closet/secure_closet/freezer/meat, +/obj/structure/closet/fridge/meat, /turf/unsimulated/floor{ icon_state = "freezerfloor" }, @@ -2660,7 +2660,7 @@ }, /area/centcom/living) "auX" = ( -/obj/effect/shuttle_landmark/supply/centcom, +/obj/shuttle_landmark/supply/centcom, /turf/simulated/floor/plating, /area/supply/dock) "auY" = ( @@ -2688,7 +2688,7 @@ /turf/simulated/floor/shuttle/red, /area/shuttle/administration/centcom) "avd" = ( -/obj/machinery/robotic_fabricator, +/obj/machinery/robotics_fabricator, /obj/machinery/light{ dir = 1 }, @@ -2742,7 +2742,7 @@ }, /area/centcom/living) "avm" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ icon_state = "plating"; name = "plating" @@ -2844,6 +2844,7 @@ /obj/structure/showcase{ desc = "A self-contained autopilot that controls supply drones."; icon_state = "comm_server"; + icon = 'icons/obj/machines/telecomms.dmi'; name = "Supply Drone Virtual Intelligence" }, /turf/simulated/floor/plating, @@ -2854,7 +2855,7 @@ /area/space) "avE" = ( /obj/machinery/vending/medical, -/obj/effect/paint/black, +/obj/paint/black, /turf/simulated/wall/r_titanium, /area/shuttle/administration/centcom) "avF" = ( @@ -2945,7 +2946,7 @@ locked = 1; name = "Shuttle Hatch" }, -/obj/effect/shuttle_landmark/admin/start, +/obj/shuttle_landmark/admin/start, /turf/simulated/floor/plating, /area/shuttle/administration/centcom) "avT" = ( @@ -2987,7 +2988,7 @@ }, /area/centcom/living) "awc" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/unsimulated/floor{ icon_state = "steel" }, @@ -3062,12 +3063,12 @@ /area/centcom/specops) "awl" = ( /obj/structure/table/rack, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, -/obj/item/ammo_magazine/mil_rifle, +/obj/item/ammo_magazine/mil_rifle/heavy, +/obj/item/ammo_magazine/mil_rifle/heavy, +/obj/item/ammo_magazine/mil_rifle/heavy, +/obj/item/ammo_magazine/mil_rifle/heavy, +/obj/item/ammo_magazine/mil_rifle/heavy, +/obj/item/ammo_magazine/mil_rifle/heavy, /obj/item/gun/projectile/automatic/bullpup_rifle, /obj/item/gun/projectile/automatic/bullpup_rifle, /turf/unsimulated/floor{ @@ -3157,14 +3158,14 @@ }, /area/centcom/creed) "aww" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ icon_state = "plating"; name = "plating" }, /area/centcom/creed) "awx" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ icon_state = "plating"; name = "plating" @@ -3172,7 +3173,7 @@ /area/centcom/control) "awy" = ( /obj/machinery/telecomms/receiver/preset_cent, -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 8 }, /turf/unsimulated/floor{ @@ -3181,7 +3182,7 @@ /area/centcom/control) "awz" = ( /obj/machinery/telecomms/bus/preset_cent, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/unsimulated/floor{ @@ -3190,7 +3191,7 @@ /area/centcom/control) "awA" = ( /obj/machinery/telecomms/processor/preset_cent, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/unsimulated/floor{ @@ -3198,8 +3199,8 @@ }, /area/centcom/control) "awB" = ( -/obj/machinery/telecomms/server/presets/centcomm, -/obj/effect/floor_decal/corner/green{ +/obj/machinery/telecomms/server/presets/centcom, +/obj/floor_decal/corner/green{ dir = 5 }, /turf/unsimulated/floor{ @@ -3207,7 +3208,7 @@ }, /area/centcom/control) "awC" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/unsimulated/floor{ @@ -3301,7 +3302,7 @@ check_synth = 1; enabled = 1 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/unsimulated/floor{ icon_state = "lino" }, @@ -3328,7 +3329,7 @@ }, /area/centcom/control) "awT" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/unsimulated/floor{ @@ -3501,14 +3502,14 @@ }, /area/centcom/specops) "axu" = ( -/obj/effect/floor_decal/corner/green/three_quarters, +/obj/floor_decal/corner/green/three_quarters, /turf/unsimulated/floor{ icon_state = "steel" }, /area/centcom/control) "axv" = ( /obj/machinery/telecomms/broadcaster/preset_cent, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/unsimulated/floor{ @@ -3517,7 +3518,7 @@ /area/centcom/control) "axw" = ( /obj/machinery/telecomms/hub/preset_cent, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/unsimulated/floor{ @@ -3525,7 +3526,7 @@ }, /area/centcom/control) "axx" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /obj/machinery/computer/rdservercontrol{ @@ -3539,7 +3540,7 @@ /area/centcom/control) "axy" = ( /obj/machinery/r_n_d/server/centcom, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/unsimulated/floor{ @@ -3547,7 +3548,7 @@ }, /area/centcom/control) "axz" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/unsimulated/floor{ @@ -3566,7 +3567,7 @@ }, /area/centcom/test) "axC" = ( -/obj/structure/closet/secure_closet/freezer/meat, +/obj/structure/closet/fridge/meat, /turf/unsimulated/floor{ icon_state = "white" }, @@ -3606,7 +3607,7 @@ /area/centcom/control) "axK" = ( /obj/machinery/porta_turret/crescent, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/unsimulated/floor{ icon_state = "steel" }, @@ -3846,7 +3847,7 @@ }, /area/centcom/specops) "ayc" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ icon_state = "plating"; name = "plating" @@ -3893,13 +3894,13 @@ }, /area/centcom/specops) "ayh" = ( -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /turf/unsimulated/floor{ icon_state = "steel" }, /area/centcom/control) "ayi" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/unsimulated/floor{ @@ -3907,7 +3908,7 @@ }, /area/centcom/control) "ayj" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, /turf/unsimulated/floor{ @@ -3963,7 +3964,7 @@ }, /area/centcom/specops) "ayr" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /turf/unsimulated/floor{ @@ -4174,7 +4175,7 @@ }, /area/centcom/specops) "azs" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ dir = 8; icon_state = "vault" @@ -4185,10 +4186,10 @@ /turf/unsimulated/wall, /area/centcom/specops) "azu" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/unsimulated/floor{ icon_state = "steel" }, @@ -4244,10 +4245,10 @@ }, /area/centcom/control) "azC" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/unsimulated/floor{ @@ -4256,9 +4257,9 @@ /area/centcom/control) "azQ" = ( /obj/structure/table/rack, -/obj/item/rig_module/mounted/taser, -/obj/item/rig_module/mounted/taser, -/obj/item/rig_module/mounted/taser, +/obj/item/rig_module/mounted/energy/taser, +/obj/item/rig_module/mounted/energy/taser, +/obj/item/rig_module/mounted/energy/taser, /obj/item/rig_module/maneuvering_jets, /obj/item/rig_module/maneuvering_jets, /obj/item/rig_module/grenade_launcher, @@ -4266,16 +4267,16 @@ /obj/item/rig_module/device/drill, /obj/item/rig_module/device/healthscanner, /obj/item/rig_module/device/healthscanner, -/obj/item/rig_module/mounted/plasmacutter, -/obj/item/rig_module/mounted/plasmacutter, +/obj/item/rig_module/mounted/energy/plasmacutter, +/obj/item/rig_module/mounted/energy/plasmacutter, /obj/item/rig_module/device/rcd, /obj/item/rig_module/device/rcd, /obj/item/rig_module/chem_dispenser/injector, /obj/item/rig_module/chem_dispenser/injector, /obj/item/rig_module/chem_dispenser/combat, /obj/item/rig_module/chem_dispenser/combat, -/obj/item/rig_module/mounted/egun, -/obj/item/rig_module/mounted/egun, +/obj/item/rig_module/mounted/energy/egun, +/obj/item/rig_module/mounted/energy/egun, /turf/unsimulated/floor{ dir = 1; icon_state = "vault" @@ -4304,13 +4305,13 @@ id_tag = "CREED"; name = "Ready Room" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/unsimulated/floor{ icon_state = "steel" }, /area/centcom/specops) "azU" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/unsimulated/floor{ icon_state = "steel" }, @@ -4319,7 +4320,7 @@ /obj/machinery/door/airlock/centcom{ name = "Special Operations" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/door/blast/regular{ id_tag = "CREED"; name = "Ready Room" @@ -4329,7 +4330,7 @@ }, /area/centcom/specops) "azW" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/unsimulated/floor{ @@ -4346,7 +4347,7 @@ /area/centcom/control) "azY" = ( /obj/structure/bed/chair, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/unsimulated/floor{ @@ -4355,7 +4356,7 @@ /area/centcom/control) "azZ" = ( /obj/structure/bed/chair, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/unsimulated/floor{ @@ -4363,7 +4364,7 @@ }, /area/centcom/control) "aAa" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /turf/unsimulated/floor{ @@ -4453,8 +4454,8 @@ /turf/unsimulated/wall, /area/centcom/specops) "aAt" = ( -/obj/effect/floor_decal/corner/green, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/corner/green, +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/unsimulated/floor{ @@ -4479,10 +4480,10 @@ }, /area/centcom/control) "aAx" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/unsimulated/floor{ @@ -4717,7 +4718,7 @@ /obj/structure/table/reinforced, /obj/item/storage/box/autoinjectors, /obj/item/storage/box/beakers, -/obj/item/storage/box/gloves, +/obj/item/storage/box/latexgloves, /obj/item/storage/box/pillbottles, /obj/item/bodybag/cryobag, /obj/item/bodybag/cryobag, @@ -4784,7 +4785,7 @@ }, /area/centcom/specops) "aBA" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "Commando" }, /turf/unsimulated/floor{ @@ -4879,7 +4880,7 @@ }, /area/centcom/specops) "aBN" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 4 }, /turf/unsimulated/floor{ @@ -4887,7 +4888,7 @@ }, /area/centcom/control) "aBO" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, /turf/unsimulated/floor{ @@ -4985,7 +4986,7 @@ pixel_y = 3 }, /obj/item/bonesetter, -/obj/item/scalpel, +/obj/item/scalpel/basic, /obj/item/retractor{ pixel_y = 6 }, @@ -5096,7 +5097,7 @@ }, /area/centcom/holding) "aCv" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ icon_state = "cult"; name = "plating" @@ -5109,7 +5110,7 @@ /area/centcom/holding) "aCy" = ( /obj/item/stool/padded, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /turf/unsimulated/floor{ @@ -5148,7 +5149,7 @@ }, /area/centcom/holding) "aCR" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/unsimulated/floor{ @@ -5156,7 +5157,7 @@ }, /area/centcom/holding) "aCS" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 8 }, /turf/unsimulated/floor{ @@ -5164,10 +5165,10 @@ }, /area/centcom/holding) "aCT" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/unsimulated/floor{ @@ -5175,7 +5176,7 @@ }, /area/centcom/holding) "aCU" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/unsimulated/floor{ @@ -5183,10 +5184,10 @@ }, /area/centcom/holding) "aCV" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/unsimulated/floor{ @@ -5194,7 +5195,7 @@ }, /area/centcom/holding) "aCW" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 1 }, /turf/unsimulated/floor{ @@ -5211,7 +5212,7 @@ }, /area/centcom/specops) "aDl" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/unsimulated/floor{ @@ -5219,7 +5220,7 @@ }, /area/centcom/holding) "aDm" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /turf/unsimulated/floor{ @@ -5231,14 +5232,14 @@ dir = 1; icon_state = "propulsion_r" }, -/obj/effect/paint/black, +/obj/paint/black, /turf/simulated/wall/r_titanium, /area/shuttle/specops/centcom) "aDz" = ( /obj/structure/shuttle/engine/propulsion{ dir = 1 }, -/obj/effect/paint/black, +/obj/paint/black, /turf/simulated/wall/r_titanium, /area/shuttle/specops/centcom) "aDA" = ( @@ -5246,7 +5247,7 @@ dir = 1; icon_state = "propulsion_l" }, -/obj/effect/paint/black, +/obj/paint/black, /turf/simulated/wall/r_titanium, /area/shuttle/specops/centcom) "aDB" = ( @@ -5277,7 +5278,7 @@ }, /area/centcom/holding) "aDE" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ icon_state = "plating"; name = "plating" @@ -5301,7 +5302,7 @@ }, /area/centcom/holding) "aDQ" = ( -/obj/effect/paint/black, +/obj/paint/black, /turf/simulated/wall/r_titanium, /area/shuttle/specops/centcom) "aDR" = ( @@ -5309,7 +5310,7 @@ dir = 1 }, /obj/structure/window/reinforced/crescent, -/obj/effect/paint/black, +/obj/paint/black, /turf/simulated/floor/plating, /area/shuttle/specops/centcom) "aDS" = ( @@ -5321,7 +5322,7 @@ }, /area/centcom/holding) "aDT" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /turf/unsimulated/floor{ @@ -5408,7 +5409,7 @@ /area/shuttle/specops/centcom) "aEt" = ( /obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/unsimulated/floor{ @@ -5423,7 +5424,7 @@ /area/centcom/holding) "aEv" = ( /obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /turf/unsimulated/floor{ @@ -5490,7 +5491,7 @@ /turf/unsimulated/wall, /area/centcom/ferry) "aEF" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ icon_state = "cult"; name = "plating" @@ -5500,7 +5501,7 @@ /obj/machinery/atm{ pixel_x = -26 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/unsimulated/floor{ @@ -5508,7 +5509,7 @@ }, /area/centcom/holding) "aEH" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/unsimulated/floor{ icon_state = "steel" }, @@ -5543,7 +5544,7 @@ }, /area/centcom/specops) "aEY" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ icon_state = "plating"; name = "plating" @@ -5577,7 +5578,7 @@ /obj/structure/bed/chair{ dir = 4 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/unsimulated/floor{ @@ -5585,7 +5586,7 @@ }, /area/centcom/holding) "aFe" = ( -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/unsimulated/floor{ icon_state = "steel" }, @@ -5640,7 +5641,7 @@ /obj/structure/bed/chair{ dir = 8 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /turf/unsimulated/floor{ @@ -5674,7 +5675,7 @@ /obj/structure/bed/chair{ dir = 8 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 4 }, /turf/unsimulated/floor{ @@ -5699,13 +5700,13 @@ /area/shuttle/specops/centcom) "aGa" = ( /obj/structure/bed/chair/comfy/brown, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 9 }, /turf/unsimulated/floor{ @@ -5714,7 +5715,7 @@ /area/centcom/holding) "aGb" = ( /obj/structure/bed/chair/comfy/brown, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, /turf/unsimulated/floor{ @@ -5723,13 +5724,13 @@ /area/centcom/holding) "aGc" = ( /obj/structure/bed/chair/comfy/brown, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 5 }, /turf/unsimulated/floor{ @@ -5745,7 +5746,7 @@ /obj/structure/bed/chair{ dir = 4 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, /turf/unsimulated/floor{ @@ -5776,11 +5777,11 @@ locked = 1; name = "Forward Docking Hatch" }, -/obj/effect/shuttle_landmark/specops/start, +/obj/shuttle_landmark/specops/start, /turf/simulated/floor/plating, /area/shuttle/specops/centcom) "aGr" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, /turf/unsimulated/floor{ @@ -5793,7 +5794,7 @@ }, /area/centcom/holding) "aGt" = ( -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, /turf/unsimulated/floor{ @@ -5812,11 +5813,11 @@ /obj/structure/bed/chair/comfy/brown{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ dir = 10 }, /turf/unsimulated/floor{ @@ -5827,7 +5828,7 @@ /obj/structure/bed/chair/comfy/brown{ dir = 1 }, -/obj/effect/floor_decal/carpet, +/obj/floor_decal/carpet, /turf/unsimulated/floor{ icon_state = "carpet" }, @@ -5836,11 +5837,11 @@ /obj/structure/bed/chair/comfy/brown{ dir = 1 }, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet{ dir = 4 }, -/obj/effect/floor_decal/carpet, -/obj/effect/floor_decal/carpet{ +/obj/floor_decal/carpet, +/obj/floor_decal/carpet{ dir = 6 }, /turf/unsimulated/floor{ @@ -5851,19 +5852,19 @@ /obj/structure/bed/chair{ dir = 8 }, -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /turf/unsimulated/floor{ icon_state = "steel" }, /area/centcom/holding) "aGF" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/unsimulated/floor{ icon_state = "steel" }, /area/centcom/holding) "aGG" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/unsimulated/floor{ icon_state = "steel" }, @@ -5904,7 +5905,7 @@ /obj/structure/bed/chair{ dir = 4 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, /turf/unsimulated/floor{ @@ -5919,14 +5920,14 @@ /area/centcom/holding) "aGS" = ( /obj/machinery/status_display, -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ icon_state = "plating"; name = "plating" }, /area/centcom/holding) "aGT" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/unsimulated/floor{ @@ -5955,7 +5956,7 @@ c_tag = "Crescent Arrivals South"; dir = 4 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/unsimulated/floor{ @@ -5963,7 +5964,7 @@ }, /area/centcom/holding) "aHe" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/unsimulated/floor{ @@ -6025,7 +6026,7 @@ /area/centcom/holding) "aHm" = ( /obj/machinery/vending/coffee, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 9 }, /turf/unsimulated/floor{ @@ -6102,13 +6103,13 @@ /area/centcom/holding) "aHv" = ( /obj/machinery/vending/cigarette, -/obj/effect/floor_decal/corner/green/three_quarters, +/obj/floor_decal/corner/green/three_quarters, /turf/unsimulated/floor{ icon_state = "steel" }, /area/centcom/holding) "aHw" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 8 }, /turf/unsimulated/floor{ @@ -6245,7 +6246,7 @@ locked = 1; name = "Shuttle Hatch" }, -/obj/effect/shuttle_landmark/ferry/start, +/obj/shuttle_landmark/ferry/start, /turf/simulated/floor/shuttle/blue, /area/shuttle/transport1/centcom) "aHV" = ( @@ -6364,13 +6365,13 @@ }, /area/centcom/holding) "aIl" = ( -/obj/effect/floor_decal/corner/lime, +/obj/floor_decal/corner/lime, /turf/unsimulated/floor{ icon_state = "white" }, /area/centcom/holding) "aIm" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 8 }, /turf/unsimulated/floor{ @@ -6428,7 +6429,7 @@ /turf/unsimulated/wall, /area/tdome) "aIy" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ icon_state = "plating"; name = "plating" @@ -6464,7 +6465,7 @@ }, /area/centcom/holding) "aIB" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ +/obj/floor_decal/corner/lime/three_quarters{ dir = 4 }, /turf/unsimulated/floor{ @@ -6472,7 +6473,7 @@ }, /area/centcom/holding) "aIC" = ( -/obj/effect/floor_decal/corner/lime/three_quarters, +/obj/floor_decal/corner/lime/three_quarters, /turf/unsimulated/floor{ icon_state = "white" }, @@ -6510,7 +6511,7 @@ }, /area/tdome) "aIJ" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 4 }, /turf/unsimulated/floor{ @@ -6518,7 +6519,7 @@ }, /area/centcom/holding) "aIK" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ +/obj/floor_decal/corner/lime/three_quarters{ dir = 1 }, /turf/unsimulated/floor{ @@ -6526,7 +6527,7 @@ }, /area/centcom/holding) "aIL" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ +/obj/floor_decal/corner/lime/three_quarters{ dir = 8 }, /turf/unsimulated/floor{ @@ -6534,7 +6535,7 @@ }, /area/centcom/holding) "aIM" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 1 }, /turf/unsimulated/floor{ @@ -6593,7 +6594,7 @@ /obj/item/retractor{ pixel_y = 6 }, -/obj/item/scalpel, +/obj/item/scalpel/basic, /turf/unsimulated/floor{ icon_state = "white" }, @@ -6624,7 +6625,7 @@ }, /area/centcom/holding) "aJa" = ( -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/simulated/floor/plating, /area/centcom/holding) "aJg" = ( @@ -6636,7 +6637,7 @@ }, /area/centcom/holding) "aJj" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/unsimulated/floor{ @@ -6645,7 +6646,7 @@ }, /area/tdome) "aJk" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /turf/unsimulated/floor{ @@ -6680,7 +6681,7 @@ /area/centcom/holding) "aJo" = ( /obj/structure/table/standard, -/obj/item/storage/box/gloves{ +/obj/item/storage/box/latexgloves{ pixel_x = 3; pixel_y = 4 }, @@ -6690,14 +6691,14 @@ }, /area/centcom/holding) "aJs" = ( -/obj/effect/floor_decal/corner/red/three_quarters, +/obj/floor_decal/corner/red/three_quarters, /turf/unsimulated/floor{ dir = 5; icon_state = "vault" }, /area/tdome) "aJt" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 10 }, /turf/unsimulated/floor{ @@ -6706,7 +6707,7 @@ }, /area/tdome) "aJu" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/unsimulated/floor{ @@ -6715,7 +6716,7 @@ }, /area/tdome) "aJv" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 4 }, /turf/unsimulated/floor{ @@ -6725,7 +6726,7 @@ /area/tdome) "aJw" = ( /obj/structure/table/standard, -/obj/item/storage/box/gloves{ +/obj/item/storage/box/latexgloves{ pixel_x = 3; pixel_y = 4 }, @@ -6971,20 +6972,20 @@ }, /area/tdome/tdomeobserve) "aKt" = ( -/obj/structure/closet/secure_closet/freezer/meat, +/obj/structure/closet/fridge/meat, /turf/unsimulated/floor{ icon_state = "white" }, /area/tdome) "aKu" = ( -/obj/structure/closet/secure_closet/freezer/fridge, +/obj/structure/closet/fridge, /turf/unsimulated/floor{ icon_state = "white" }, /area/tdome) "aKv" = ( /obj/structure/bed/chair, -/obj/effect/landmark{ +/obj/landmark{ name = "tdomeobserve" }, /turf/unsimulated/floor{ @@ -7043,7 +7044,7 @@ }, /area/tdome/tdomeobserve) "aKI" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "ActorSpawn" }, /turf/unsimulated/floor{ @@ -7329,7 +7330,7 @@ "aLf" = ( /obj/structure/bed/chair, /obj/structure/disposalpipe/segment, -/obj/effect/landmark{ +/obj/landmark{ name = "tdomeobserve" }, /turf/unsimulated/floor{ @@ -7338,7 +7339,7 @@ /area/tdome/tdomeobserve) "aLh" = ( /obj/item/paper{ - info = "\[center]\[b]READ INSTRUCTIONS CAREFULLY\[/b]\[/center]\[br]\[br]Hello! Welcome and congratulations on being hired for NanoTrasen's new Television initiative. You are now tasked with the creation and production of NanoTrasen brand television that is to be broadcasted to all of our stations!\[br]\[br] We've outfitted these facilities with all the materials and objects you will need.\[br]On the port side you'll find various venders and machines, namely the Wardrobe Dispenser, which will dispense holoclothing and items for you to use, and a Quickee brand plastic surgery machine (which I would remind you you are contractually obligated to \[b]not\[/b] report to the authorities.) which can change your appearance into anything you want, even other races. Stern and aft you'll find all the materials we could muster up on short notice. Use it to decorate the stage to your liking. Starboard you'll find gases, microwaves, hydroponic trays and the like. Go silly! This is already paid for (as are you) so do what you want and entertain!"; + info = "\[center]\[b]READ INSTRUCTIONS CAREFULLY\[/b]\[/center]\[br]\[br]Hello! Welcome and congratulations on being hired for Nanotrasen's new Television initiative. You are now tasked with the creation and production of Nanotrasen brand television that is to be broadcasted to all of our stations!\[br]\[br] We've outfitted these facilities with all the materials and objects you will need.\[br]On the port side you'll find various venders and machines, namely the Wardrobe Dispenser, which will dispense holoclothing and items for you to use, and a Quickee brand plastic surgery machine (which I would remind you you are contractually obligated to \[b]not\[/b] report to the authorities.) which can change your appearance into anything you want, even other races. Stern and aft you'll find all the materials we could muster up on short notice. Use it to decorate the stage to your liking. Starboard you'll find gases, microwaves, hydroponic trays and the like. Go silly! This is already paid for (as are you) so do what you want and entertain!"; name = "Actor's Guild Instruction Pamphlet" }, /turf/unsimulated/floor{ @@ -7357,22 +7358,22 @@ }, /area/tdome) "aLj" = ( -/obj/effect/forcefield{ +/obj/forcefield{ desc = "You can't get in. Heh."; name = "Blocker" }, -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ icon_state = "dark" }, /area/tdome) "aLk" = ( -/obj/effect/forcefield{ +/obj/forcefield{ desc = "You can't get in. Heh."; name = "Blocker" }, /obj/structure/disposalpipe/segment, -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ icon_state = "dark" }, @@ -7482,7 +7483,7 @@ }, /area/tdome) "aLz" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "tdome2" }, /turf/unsimulated/floor{ @@ -7501,7 +7502,7 @@ }, /area/tdome) "aLB" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/unsimulated/floor{ @@ -7509,7 +7510,7 @@ }, /area/tdome) "aLC" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 6 }, /turf/unsimulated/floor{ @@ -7517,7 +7518,7 @@ }, /area/tdome) "aLD" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "tdome1" }, /turf/unsimulated/floor{ @@ -7539,7 +7540,7 @@ }, /area/tdome) "aLF" = ( -/obj/effect/step_trigger/teleporter/random{ +/obj/step_trigger/teleporter/random{ affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; @@ -7549,7 +7550,7 @@ teleport_z = 6; teleport_z_offset = 6 }, -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ affect_ghosts = 1; name = "thrower_throwdown"; tiles = 0 @@ -7570,7 +7571,7 @@ /obj/machinery/recharger{ pixel_y = 4 }, -/obj/effect/landmark{ +/obj/landmark{ name = "tdome2" }, /turf/unsimulated/floor{ @@ -7582,7 +7583,7 @@ /obj/machinery/recharger{ pixel_y = 4 }, -/obj/effect/landmark{ +/obj/landmark{ name = "tdome1" }, /turf/unsimulated/floor{ @@ -7591,12 +7592,12 @@ }, /area/tdome/tdome1) "aLL" = ( -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ affect_ghosts = 1; name = "thrower_throwdown"; tiles = 0 }, -/obj/effect/step_trigger/teleporter/random{ +/obj/step_trigger/teleporter/random{ affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; @@ -7636,7 +7637,7 @@ }, /area/acting/backstage) "aLS" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "tdome2" }, /obj/machinery/camera/network/thunder{ @@ -7663,7 +7664,7 @@ }, /area/tdome) "aLV" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "tdome1" }, /obj/machinery/camera/network/thunder{ @@ -7779,7 +7780,7 @@ "aMu" = ( /obj/structure/bed, /obj/item/bedsheet/hop, -/obj/effect/landmark/start{ +/obj/landmark/start{ name = "Merchant" }, /turf/simulated/floor/carpet, @@ -7831,7 +7832,7 @@ "aMG" = ( /obj/structure/bed, /obj/item/bedsheet/rd, -/obj/effect/landmark/start{ +/obj/landmark/start{ name = "Merchant" }, /turf/simulated/floor/carpet/blue, @@ -7852,7 +7853,7 @@ /turf/simulated/floor/asteroid, /area/merchant_station) "aMK" = ( -/obj/effect/decal/cleanable/cobweb2{ +/obj/decal/cleanable/cobweb2{ icon_state = "spiderling"; name = "dead spider" }, @@ -7939,7 +7940,7 @@ /obj/machinery/vending/cigarette{ name = "hacked cigarette machine"; prices = list(); - products = list(/obj/item/storage/fancy/smokable/transstellar = 10, /obj/item/storage/box/matches = 10, /obj/item/flame/lighter/zippo/random = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) + products = list(/obj/item/storage/fancy/smokable/transstellar = 10, /obj/item/storage/fancy/matches/matchbox = 10, /obj/item/flame/lighter/zippo/random = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) }, /turf/unsimulated/floor{ icon_state = "plating"; @@ -7954,7 +7955,7 @@ }, /area/acting/backstage) "aNj" = ( -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 8 }, /turf/unsimulated/floor{ @@ -7983,12 +7984,12 @@ }, /area/tdome) "aNm" = ( -/obj/effect/forcefield{ +/obj/forcefield{ desc = "You can't get in. Heh."; name = "Blocker" }, /obj/machinery/atmospherics/pipe/simple/visible, -/obj/effect/wingrille_spawn/reinforced/crescent, +/obj/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor{ icon_state = "dark" }, @@ -8006,7 +8007,7 @@ }, /area/tdome) "aNo" = ( -/obj/effect/floor_decal/corner/green, +/obj/floor_decal/corner/green, /turf/unsimulated/floor{ dir = 5; icon_state = "vault" @@ -8016,7 +8017,7 @@ /obj/machinery/cryopod{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/white, /area/merchant_station) "aNq" = ( @@ -8054,7 +8055,7 @@ /obj/item/bodybag/cryobag{ pixel_x = 5 }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled/white, /area/merchant_station) @@ -8097,7 +8098,7 @@ /obj/machinery/door/airlock{ name = "Toilet" }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled/freezer, /area/merchant_station) "aNB" = ( @@ -8108,7 +8109,7 @@ /obj/structure/hygiene/toilet{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled/freezer, /area/merchant_station) "aNC" = ( @@ -8141,7 +8142,7 @@ /obj/structure/bed/chair{ dir = 1 }, -/obj/effect/landmark{ +/obj/landmark{ name = "tdomeadmin" }, /turf/unsimulated/floor{ @@ -8165,7 +8166,7 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/effect/landmark{ +/obj/landmark{ name = "tdomeadmin" }, /turf/unsimulated/floor{ @@ -8183,7 +8184,7 @@ /obj/machinery/sleeper{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, @@ -8257,38 +8258,38 @@ name = "merchant's locker"; req_access = list("ACCESS_MERCHANT") }, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark, /area/merchant_station) "aOd" = ( /obj/machinery/light/small{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, /area/merchant_station) "aOe" = ( /obj/structure/closet/crate/freezer, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark, /area/merchant_station) "aOf" = ( /obj/structure/closet/crate, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark, /area/merchant_station) "aOg" = ( /obj/machinery/light/small{ dir = 1 }, -/obj/effect/decal/cleanable/spiderling_remains, +/obj/decal/cleanable/spiderling_remains, /turf/simulated/floor/tiled/dark, /area/merchant_station) "aOh" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/structure/largecrate, /obj/random/loot, -/obj/effect/decal/cleanable/cobweb2, +/obj/decal/cleanable/cobweb2, /turf/simulated/floor/tiled/dark, /area/merchant_station) "aOr" = ( @@ -8332,7 +8333,7 @@ }, /area/tdome/tdomeadmin) "aOw" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/space, /area/merchant_station) "aOx" = ( @@ -8341,7 +8342,7 @@ pixel_y = 6 }, /obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/blue/three_quarters{ +/obj/floor_decal/corner/blue/three_quarters{ dir = 8 }, /turf/simulated/floor/tiled, @@ -8352,7 +8353,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 1 }, /turf/simulated/floor/tiled, @@ -8372,7 +8373,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/effect/floor_decal/corner/blue, +/obj/floor_decal/corner/blue, /turf/simulated/floor/tiled, /area/merchant_station) "aOB" = ( @@ -8390,7 +8391,7 @@ /obj/machinery/vending/cigarette{ name = "hacked cigarette machine"; prices = list(); - products = list(/obj/item/storage/fancy/smokable/transstellar = 10, /obj/item/storage/box/matches = 10, /obj/item/flame/lighter/zippo/random = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) + products = list(/obj/item/storage/fancy/smokable/transstellar = 10, /obj/item/storage/fancy/matches/matchbox = 10, /obj/item/flame/lighter/zippo/random = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) }, /obj/structure/window/reinforced{ dir = 1 @@ -8455,15 +8456,15 @@ /turf/simulated/floor/tiled/freezer, /area/merchant_station) "aOK" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, /area/merchant_station) "aOL" = ( /obj/structure/table/rack, /obj/random/contraband, /obj/random/loot, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/effect/decal/cleanable/dirt, +/obj/floor_decal/industrial/outline/grey, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, /area/merchant_station) "aOM" = ( @@ -8471,7 +8472,7 @@ /turf/simulated/floor/tiled/dark, /area/merchant_station) "aON" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled/dark, /area/merchant_station) "aOY" = ( @@ -8496,7 +8497,7 @@ }, /area/tdome/tdomeadmin) "aPb" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/constructable_frame/computerframe, @@ -8516,14 +8517,14 @@ dir = 4; icon_state = "tube1" }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled, /area/merchant_station) "aPf" = ( -/obj/effect/wingrille_spawn/reinforced, +/obj/wingrille_spawn/reinforced, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/merchant_station) @@ -8740,7 +8741,7 @@ }, /area/tdome/tdomeadmin) "aPT" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/computer/shuttle_control/merchant{ @@ -8856,7 +8857,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/merchant_station) "aQg" = ( @@ -8920,7 +8921,7 @@ /area/merchant_station) "aQo" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/item/card/id{ access = list(301); desc = "A visitor's access card, this one is for the Merchant's Station."; @@ -8957,12 +8958,12 @@ pixel_y = 9 }, /obj/item/pen, -/obj/effect/floor_decal/corner/blue/three_quarters, +/obj/floor_decal/corner/blue/three_quarters, /turf/simulated/floor/tiled, /area/merchant_station) "aQG" = ( /obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /obj/random/handgun, @@ -8971,7 +8972,7 @@ "aQH" = ( /obj/structure/table/reinforced, /obj/random/loot, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled, @@ -8983,7 +8984,7 @@ pixel_x = 25; req_access = list("ACCESS_MERCHANT") }, -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 8 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -9119,7 +9120,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/random/loot, /obj/random/loot, /turf/simulated/floor/tiled, @@ -9130,14 +9131,14 @@ /turf/simulated/floor/tiled, /area/merchant_station) "aRA" = ( -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/r_titanium, /area/shuttle/merchant/home) "aRB" = ( /obj/structure/shuttle/engine/heater{ dir = 4 }, -/obj/effect/paint/silver, +/obj/paint/silver, /turf/simulated/wall/r_titanium, /area/shuttle/merchant/home) "aRC" = ( @@ -9228,8 +9229,8 @@ name = "Merchant Window Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/merchant/home) "aRX" = ( @@ -9256,7 +9257,7 @@ name = "merchant's locker"; req_access = list("ACCESS_MERCHANT") }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /turf/simulated/floor/tiled/dark, @@ -9266,7 +9267,7 @@ /turf/simulated/floor/tiled, /area/shuttle/merchant/home) "aSk" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /turf/simulated/floor/plating, /area/shuttle/merchant/home) "aSl" = ( @@ -9283,7 +9284,7 @@ "aSn" = ( /obj/machinery/portable_atmospherics/canister/air/airlock, /obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -9304,7 +9305,7 @@ pixel_x = 27; pixel_y = -9 }, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled, /area/merchant_station) "aSp" = ( @@ -9332,8 +9333,8 @@ name = "Merchant Window Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/merchant/home) "aSz" = ( @@ -9393,13 +9394,13 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/merchant/home) "aSG" = ( -/obj/effect/floor_decal/corner/green/three_quarters{ +/obj/floor_decal/corner/green/three_quarters{ dir = 8 }, /turf/simulated/floor/tiled, /area/shuttle/merchant/home) "aSH" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -9408,14 +9409,14 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, /area/shuttle/merchant/home) "aSJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, /turf/simulated/floor/tiled, @@ -9443,14 +9444,14 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ id_tag = "merchant_ship_vent" }, /turf/simulated/floor/plating, /area/shuttle/merchant/home) "aSO" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/tiled, @@ -9462,25 +9463,25 @@ id_tag = "merchantbase"; name = "Merchant Loading Shutters" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled, /area/merchant_station) "aSQ" = ( /obj/machinery/light/small{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /turf/simulated/floor/tiled, /area/merchant_station) "aSR" = ( /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/merchant_station) "aSS" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/merchant_station) "aST" = ( @@ -9488,7 +9489,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/conveyor_switch{ id = "merchantbelt2" }, @@ -9496,7 +9497,7 @@ /area/merchant_station) "aSU" = ( /obj/machinery/door/window/southright, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/merchant_station) "aTc" = ( @@ -9548,10 +9549,10 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/merchant/home) "aTi" = ( -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 1 }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 8 }, /turf/simulated/floor/tiled, @@ -9561,10 +9562,10 @@ /area/shuttle/merchant/home) "aTk" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 5 }, -/obj/effect/floor_decal/corner/green{ +/obj/floor_decal/corner/green{ dir = 10 }, /turf/simulated/floor/tiled, @@ -9612,8 +9613,8 @@ id_tag = "merchantbase"; name = "Merchant Loading Shutters" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/decal/cleanable/dirt, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled, /area/merchant_station) "aTq" = ( @@ -9692,23 +9693,23 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/merchant/home) "aTD" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 9 }, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /turf/simulated/floor/tiled, /area/shuttle/merchant/home) "aTE" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /turf/simulated/floor/tiled, /area/shuttle/merchant/home) "aTF" = ( /obj/machinery/light, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /turf/simulated/floor/tiled, @@ -9721,14 +9722,14 @@ /turf/simulated/floor/plating, /area/shuttle/merchant/home) "aTI" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 9 }, /turf/simulated/floor/tiled, /area/merchant_station) "aTJ" = ( /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled, @@ -9739,13 +9740,13 @@ pixel_x = 25; req_access = list("ACCESS_MERCHANT") }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled, /area/merchant_station) "aTL" = ( -/obj/effect/decal/cleanable/ash, +/obj/decal/cleanable/ash, /obj/machinery/conveyor{ dir = 1; id = "merchantbelt1" @@ -9760,13 +9761,13 @@ name = "Merchant Window Shutters"; opacity = 0 }, -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/merchant/home) "aTQ" = ( /obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/random/loot, @@ -9774,7 +9775,7 @@ /area/shuttle/merchant/home) "aTR" = ( /obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/random/clipboard, @@ -9812,21 +9813,21 @@ master_tag = "merchant_ship_dock"; pixel_x = -28 }, -/obj/effect/shuttle_landmark/merchant/start, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/shuttle_landmark/merchant/start, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/plating, /area/shuttle/merchant/home) "aTZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/merchant_station) "aUa" = ( /obj/machinery/light/small{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/simulated/floor/tiled, @@ -9872,7 +9873,7 @@ /area/merchant_station) "aUe" = ( /obj/structure/table/rack, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -9895,7 +9896,7 @@ dir = 4; pixel_y = 8 }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /obj/machinery/conveyor{ dir = 1; id = "merchantbelt1" @@ -9924,7 +9925,7 @@ /turf/simulated/floor/tiled, /area/merchant_station) "aUk" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, @@ -9967,7 +9968,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/merchant_station) "aUx" = ( @@ -10055,14 +10056,14 @@ /turf/simulated/floor/tiled, /area/merchant_station) "aUE" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/simulated/floor/tiled, /area/merchant_station) "aUF" = ( -/obj/effect/decal/cleanable/generic, -/obj/effect/floor_decal/industrial/warning{ +/obj/decal/cleanable/generic, +/obj/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor/tiled, @@ -10170,18 +10171,16 @@ }, /turf/simulated/floor/tiled, /area/merchant_station) -"aUZ" = ( -/obj/structure/table/rack, -/turf/simulated/floor/tiled/airless, -/area/merchant_station) "aVk" = ( /obj/structure/cable{ d2 = 2; icon_state = "0-2" }, /obj/machinery/power/solar, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, +/obj/floor_decal/solarpanel, +/turf/simulated/floor{ + map_airless = 1 + }, /area/merchant_station) "aVl" = ( /obj/structure/table/steel, @@ -10217,7 +10216,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/merchant_station) "aVp" = ( @@ -10231,7 +10230,7 @@ name = "Maintenance" }, /obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/merchant_station) "aVq" = ( @@ -10262,7 +10261,7 @@ /turf/simulated/floor/tiled, /area/merchant_station) "aVu" = ( -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/merchant_station) "aVv" = ( @@ -10286,8 +10285,10 @@ icon_state = "0-4" }, /obj/machinery/power/solar, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, +/obj/floor_decal/solarpanel, +/turf/simulated/floor{ + map_airless = 1 + }, /area/merchant_station) "aVG" = ( /obj/structure/cable{ @@ -10300,7 +10301,9 @@ d2 = 8; icon_state = "2-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/merchant_station) "aVH" = ( /obj/structure/cable/blue{ @@ -10381,7 +10384,7 @@ dir = 8 }, /obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /obj/machinery/atmospherics/portables_connector{ dir = 1 }, @@ -10389,7 +10392,7 @@ /area/merchant_station) "aVP" = ( /obj/structure/closet/crate, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/merchant_station) "aVQ" = ( @@ -10437,8 +10440,10 @@ icon_state = "map_vent_out"; use_power = 1 }, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/airless, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor{ + map_airless = 1 + }, /area/merchant_station) "aWg" = ( /obj/structure/cable/blue{ @@ -10453,7 +10458,7 @@ output_attempt = 1; output_level = 250000 }, -/obj/effect/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/merchant_station) "aWh" = ( @@ -10462,7 +10467,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/merchant_station) "aWi" = ( @@ -10480,12 +10485,12 @@ /area/merchant_station) "aWl" = ( /obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/effect/decal/cleanable/cobweb2, +/obj/decal/cleanable/cobweb2, /turf/simulated/floor/plating, /area/merchant_station) "aWm" = ( /obj/structure/closet/crate/freezer, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/merchant_station) "aWn" = ( @@ -10508,7 +10513,9 @@ icon_state = "0-4" }, /obj/machinery/power/tracker, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/merchant_station) "aWz" = ( /obj/structure/cable{ @@ -10516,7 +10523,9 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/merchant_station) "aWA" = ( /obj/structure/cable{ @@ -10534,7 +10543,9 @@ d2 = 4; icon_state = "2-4" }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/merchant_station) "aWB" = ( /obj/structure/cable{ @@ -10545,7 +10556,9 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/merchant_station) "aWC" = ( /obj/structure/cable{ @@ -10560,10 +10573,12 @@ dir = 4; pixel_y = 8 }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/merchant_station) "aWD" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -10594,14 +10609,14 @@ /obj/structure/bed/chair/comfy/brown{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/merchant_station) "aWF" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/merchant_station) "aWG" = ( @@ -10667,7 +10682,9 @@ d2 = 8; icon_state = "1-8" }, -/turf/simulated/floor/airless, +/turf/simulated/floor{ + map_airless = 1 + }, /area/merchant_station) "aWW" = ( /obj/machinery/power/solar_control/autostart, @@ -10709,7 +10726,7 @@ /turf/simulated/floor/plating, /area/merchant_station) "aXc" = ( -/obj/effect/decal/cleanable/blood/oil, +/obj/decal/cleanable/blood/oil, /turf/simulated/floor/plating, /area/merchant_station) "aXd" = ( @@ -10762,14 +10779,14 @@ dir = 4 }, /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/merchant_station) "aXI" = ( /obj/machinery/atmospherics/binary/pump{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/merchant_station) "aXJ" = ( @@ -10778,7 +10795,7 @@ }, /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/item/tank/nitrogen, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/merchant_station) "aXK" = ( @@ -10799,8 +10816,10 @@ "aYf" = ( /obj/structure/cable, /obj/machinery/power/solar, -/obj/effect/floor_decal/solarpanel, -/turf/simulated/floor/airless, +/obj/floor_decal/solarpanel, +/turf/simulated/floor{ + map_airless = 1 + }, /area/merchant_station) "aZb" = ( /obj/machinery/computer/modular/preset/civilian{ @@ -10825,7 +10844,7 @@ dir = 8; holographic = 1 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 5 }, /turf/simulated/floor/holofloor/carpet, @@ -10869,7 +10888,7 @@ }, /area/centcom/holding) "blb" = ( -/obj/effect/overlay/palmtree_r, +/obj/overlay/palmtree_r, /turf/unsimulated/beach/sand{ icon_state = "desert2" }, @@ -10887,7 +10906,7 @@ }, /area/centcom/holding) "bnc" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner, +/obj/floor_decal/spline/fancy/wood/corner, /turf/simulated/floor/holofloor/concrete, /area/holodeck/source_plaza) "bob" = ( @@ -10906,7 +10925,7 @@ }, /area/centcom/holding) "bqb" = ( -/obj/effect/overlay/palmtree_l, +/obj/overlay/palmtree_l, /turf/unsimulated/beach/sand{ icon_state = "desert2" }, @@ -10920,13 +10939,13 @@ "bsb" = ( /obj/structure/table/rack, /obj/random/action_figure, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/floor_decal/industrial/outline/grey, /obj/item/clothing/accessory/storage/holster, /turf/simulated/floor/tiled/dark, /area/merchant_station) "btb" = ( /obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/machinery/recharger, @@ -10937,7 +10956,7 @@ /obj/structure/bed/chair/wood{ holographic = 1 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /turf/simulated/floor/holofloor/concrete, @@ -10963,7 +10982,7 @@ /area/centcom/control) "bwb" = ( /obj/machinery/computer/modular/preset/security, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 9 }, /turf/unsimulated/floor{ @@ -11074,11 +11093,11 @@ pixel_y = 32 }, /obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, /turf/simulated/floor/tiled/freezer, /area/merchant_station) "bRY" = ( -/obj/effect/floor_decal/beach/corner{ +/obj/floor_decal/beach/corner{ dir = 8 }, /turf/simulated/floor/holofloor/concrete, @@ -11091,7 +11110,7 @@ /turf/simulated/floor/holofloor/concrete, /area/holodeck/source_plaza) "cjX" = ( -/obj/effect/landmark{ +/obj/landmark{ name = "Syndicate-Commando" }, /turf/unsimulated/floor{ @@ -11100,13 +11119,13 @@ /area/syndicate_elite_squad) "cqu" = ( /obj/structure/holostool, -/obj/effect/floor_decal/beach{ +/obj/floor_decal/beach{ dir = 4 }, /turf/simulated/floor/holofloor/concrete, /area/holodeck/source_volleyball) "czt" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/merchant_station) @@ -11115,14 +11134,14 @@ /turf/simulated/floor/carpet/blue, /area/shuttle/merchant/home) "cMe" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /turf/simulated/floor/holofloor/concrete, /area/holodeck/source_plaza) "cMP" = ( /obj/structure/flora/ausbushes/genericbush, -/obj/effect/floor_decal/spline/plain/grey{ +/obj/floor_decal/spline/plain/grey{ dir = 9 }, /turf/simulated/floor/holofloor/grass, @@ -11132,7 +11151,7 @@ dir = 1; holographic = 1 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 6 }, /turf/simulated/floor/holofloor/carpet, @@ -11142,7 +11161,7 @@ /turf/simulated/floor/holofloor/beach/sand, /area/holodeck/source_volleyball) "dnO" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 6 }, /turf/simulated/floor/holofloor/concrete, @@ -11152,13 +11171,13 @@ /obj/structure/flora/ausbushes/ywflowers, /obj/structure/flora/ausbushes/ppflowers, /obj/structure/flora/ausbushes/brflowers, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 9 }, /turf/simulated/floor/holofloor/grass, /area/holodeck/source_plaza) "dBi" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 9 }, /turf/simulated/floor/holofloor/concrete, @@ -11171,17 +11190,17 @@ /turf/simulated/floor/holofloor/tiled/stone, /area/holodeck/source_temple) "dJV" = ( -/obj/effect/floor_decal/beach/corner, +/obj/floor_decal/beach/corner, /turf/simulated/floor/holofloor/concrete, /area/holodeck/source_volleyball) "dMH" = ( -/obj/effect/floor_decal/spline/plain{ +/obj/floor_decal/spline/plain{ dir = 10 }, /turf/simulated/floor/holofloor/beach/sand, /area/holodeck/source_volleyball) "dNG" = ( -/obj/effect/floor_decal/stoneborder{ +/obj/floor_decal/stoneborder{ dir = 1 }, /turf/simulated/floor/holofloor/beach/water, @@ -11194,7 +11213,7 @@ /turf/simulated/floor/holofloor/wood, /area/holodeck/source_cafe) "dZC" = ( -/obj/effect/floor_decal/spline/plain{ +/obj/floor_decal/spline/plain{ dir = 4 }, /obj/structure/holonet/end{ @@ -11237,7 +11256,7 @@ /area/holodeck/source_temple) "fcv" = ( /obj/structure/holostool, -/obj/effect/floor_decal/beach{ +/obj/floor_decal/beach{ dir = 8 }, /turf/simulated/floor/holofloor/concrete, @@ -11246,7 +11265,7 @@ /turf/unsimulated/floor/plating, /area/centcom/evac) "fpW" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ +/obj/floor_decal/spline/fancy/wood/corner{ dir = 8 }, /turf/simulated/floor/holofloor/concrete, @@ -11256,13 +11275,13 @@ dir = 4; holographic = 1 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 9 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_cafe) "fJf" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /turf/simulated/floor/holofloor/concrete, @@ -11275,7 +11294,7 @@ /area/holodeck/source_temple) "gse" = ( /obj/structure/table/holo_woodentable, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, /obj/item/flame/candle{ @@ -11294,7 +11313,7 @@ /obj/structure/flora/ausbushes/ywflowers, /obj/structure/flora/ausbushes/ppflowers, /obj/structure/flora/ausbushes/brflowers, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 6 }, /turf/simulated/floor/holofloor/grass, @@ -11307,12 +11326,12 @@ dir = 1; holographic = 1 }, -/obj/effect/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood, /turf/simulated/floor/holofloor/concrete, /area/holodeck/source_plaza) "ikd" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/silver, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/silver, /turf/simulated/floor/plating, /area/shuttle/merchant/home) "iqj" = ( @@ -11322,11 +11341,11 @@ }, /area/syndicate_elite_squad) "izl" = ( -/obj/effect/paint/black, +/obj/paint/black, /turf/simulated/wall/r_titanium, /area/shuttle/administration/centcom) "iBC" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, /turf/simulated/floor/holofloor/concrete, @@ -11336,7 +11355,7 @@ /obj/structure/flora/ausbushes/ywflowers, /obj/structure/flora/ausbushes/ppflowers, /obj/structure/flora/ausbushes/brflowers, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 10 }, /turf/simulated/floor/holofloor/grass, @@ -11348,24 +11367,24 @@ }, /area/holodeck/source_temple) "iSJ" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /turf/simulated/floor/plating, /area/shuttle/transport1/centcom) "jed" = ( -/obj/effect/floor_decal/beach{ +/obj/floor_decal/beach{ dir = 1 }, /turf/simulated/floor/holofloor/concrete, /area/holodeck/source_volleyball) "jgg" = ( -/obj/effect/floor_decal/spline/plain{ +/obj/floor_decal/spline/plain{ dir = 1 }, /turf/simulated/floor/holofloor/beach/sand, /area/holodeck/source_volleyball) "jhl" = ( /obj/structure/table/holo_woodentable, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /obj/item/flame/candle{ @@ -11390,7 +11409,7 @@ }, /area/holodeck/source_volleyball) "jvm" = ( -/obj/effect/floor_decal/spline/plain, +/obj/floor_decal/spline/plain, /turf/simulated/floor/holofloor/beach/sand{ icon_state = "desert1" }, @@ -11400,14 +11419,14 @@ /obj/structure/flora/ausbushes/ywflowers, /obj/structure/flora/ausbushes/ppflowers, /obj/structure/flora/ausbushes/brflowers, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 5 }, /turf/simulated/floor/holofloor/grass, /area/holodeck/source_plaza) "jHQ" = ( /obj/structure/flora/ausbushes/ppflowers, -/obj/effect/floor_decal/spline/plain/grey{ +/obj/floor_decal/spline/plain/grey{ dir = 8 }, /turf/simulated/floor/holofloor/grass, @@ -11428,7 +11447,7 @@ }, /area/holodeck/source_volleyball) "kfk" = ( -/obj/effect/floor_decal/spline/plain{ +/obj/floor_decal/spline/plain{ dir = 5 }, /turf/simulated/floor/holofloor/beach/sand{ @@ -11440,13 +11459,13 @@ dir = 1; holographic = 1 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 10 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_cafe) "kBT" = ( -/obj/effect/floor_decal/spline/plain{ +/obj/floor_decal/spline/plain{ dir = 4 }, /turf/simulated/floor/holofloor/beach/sand, @@ -11473,7 +11492,7 @@ /turf/simulated/floor/holofloor/tiled/stone, /area/holodeck/source_temple) "lGk" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/wallframe_spawn/reinforced/titanium, /turf/unsimulated/floor/plating, /area/centcom/evac) "lIX" = ( @@ -11496,7 +11515,7 @@ /obj/structure/bed/chair/wood{ holographic = 1 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, /turf/simulated/floor/holofloor/carpet, @@ -11505,13 +11524,13 @@ /obj/structure/bed/chair/wood{ holographic = 1 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_cafe) "lWf" = ( -/obj/effect/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood, /turf/simulated/floor/holofloor/concrete, /area/holodeck/source_plaza) "mjR" = ( @@ -11533,13 +11552,13 @@ }, /area/holodeck/source_temple) "moq" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ +/obj/floor_decal/spline/fancy/wood/corner{ dir = 4 }, /turf/simulated/floor/holofloor/concrete, /area/holodeck/source_plaza) "mrn" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 10 }, /turf/simulated/floor/holofloor/concrete, @@ -11561,14 +11580,14 @@ /obj/structure/bed/chair/wood{ holographic = 1 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 9 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_cafe) "mTy" = ( /obj/structure/flora/ausbushes/genericbush, -/obj/effect/floor_decal/spline/plain/grey{ +/obj/floor_decal/spline/plain/grey{ dir = 10 }, /turf/simulated/floor/holofloor/grass, @@ -11587,13 +11606,13 @@ /obj/structure/bed/chair/wood{ dir = 4 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /turf/simulated/floor/holofloor/concrete, /area/holodeck/source_plaza) "ntZ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 8 }, /obj/structure/table/holo_woodentable, @@ -11604,7 +11623,7 @@ dir = 8; holographic = 1 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, /turf/simulated/floor/holofloor/concrete, @@ -11622,13 +11641,13 @@ }, /area/syndicate_elite_squad) "occ" = ( -/obj/effect/floor_decal/spline/plain{ +/obj/floor_decal/spline/plain{ dir = 6 }, /turf/simulated/floor/holofloor/beach/sand, /area/holodeck/source_volleyball) "olJ" = ( -/obj/effect/floor_decal/beach{ +/obj/floor_decal/beach{ dir = 4 }, /obj/structure/holostool, @@ -11639,13 +11658,13 @@ dir = 1; holographic = 1 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_cafe) "oFc" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /turf/simulated/floor/holofloor/lino, @@ -11668,7 +11687,7 @@ /turf/simulated/floor/plating, /area/shuttle/merchant/home) "pAh" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 4 }, /obj/structure/table/holo_woodentable, @@ -11676,7 +11695,7 @@ /area/holodeck/source_cafe) "pEp" = ( /obj/machinery/door/firedoor, -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/merchant_station) "pET" = ( @@ -11684,7 +11703,7 @@ /turf/unsimulated/floor/plating, /area/centcom/evac) "pUt" = ( -/obj/effect/floor_decal/stoneborder, +/obj/floor_decal/stoneborder, /turf/simulated/floor/holofloor/beach/water, /area/holodeck/source_temple) "pWv" = ( @@ -11695,11 +11714,11 @@ /turf/simulated/floor/holofloor/wood, /area/holodeck/source_cafe) "qir" = ( -/obj/effect/floor_decal/stoneborder/corner, +/obj/floor_decal/stoneborder/corner, /turf/simulated/floor/holofloor/beach/water, /area/holodeck/source_temple) "qoH" = ( -/obj/effect/floor_decal/spline/plain{ +/obj/floor_decal/spline/plain{ dir = 8 }, /turf/simulated/floor/holofloor/beach/sand, @@ -11716,7 +11735,7 @@ /turf/simulated/floor/holofloor/tiled/stone, /area/holodeck/source_temple) "qMl" = ( -/obj/effect/floor_decal/stoneborder/corner{ +/obj/floor_decal/stoneborder/corner{ dir = 8 }, /turf/simulated/floor/holofloor/beach/water, @@ -11744,11 +11763,11 @@ dir = 1; holographic = 1 }, -/obj/effect/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_cafe) "rms" = ( -/obj/effect/floor_decal/spline/plain{ +/obj/floor_decal/spline/plain{ dir = 9 }, /turf/simulated/floor/holofloor/beach/sand{ @@ -11783,7 +11802,7 @@ }, /area/holodeck/source_temple) "skD" = ( -/obj/effect/floor_decal/beach{ +/obj/floor_decal/beach{ dir = 8 }, /obj/structure/holostool, @@ -11809,7 +11828,7 @@ /turf/unsimulated/floor/plating, /area/centcom/evac) "sWJ" = ( -/obj/effect/floor_decal/beach{ +/obj/floor_decal/beach{ dir = 8 }, /turf/simulated/floor/holofloor/concrete, @@ -11825,31 +11844,31 @@ /area/holodeck/source_boxingcourt) "thM" = ( /obj/structure/flora/ausbushes/ywflowers, -/obj/effect/floor_decal/spline/plain/grey{ +/obj/floor_decal/spline/plain/grey{ dir = 8 }, /turf/simulated/floor/holofloor/grass, /area/holodeck/source_cafe) "tsJ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 5 }, /turf/simulated/floor/holofloor/concrete, /area/holodeck/source_plaza) "twU" = ( -/obj/effect/floor_decal/beach{ +/obj/floor_decal/beach{ dir = 4 }, /turf/simulated/floor/holofloor/concrete, /area/holodeck/source_volleyball) "tDw" = ( -/obj/effect/floor_decal/stoneborder{ +/obj/floor_decal/stoneborder{ dir = 4 }, /turf/simulated/floor/holofloor/beach/water, /area/holodeck/source_temple) "tGT" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 1 }, /turf/simulated/floor/holofloor/tiled/dark, @@ -11860,7 +11879,7 @@ /area/centcom/evac) "tQu" = ( /obj/structure/flora/ausbushes/brflowers, -/obj/effect/floor_decal/spline/plain/grey{ +/obj/floor_decal/spline/plain/grey{ dir = 8 }, /turf/simulated/floor/holofloor/grass, @@ -11870,7 +11889,7 @@ /turf/simulated/floor/holofloor/concrete, /area/holodeck/source_plaza) "uly" = ( -/obj/effect/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood, /turf/simulated/floor/holofloor/wood, /area/holodeck/source_meetinghall) "upH" = ( @@ -11895,17 +11914,17 @@ /turf/simulated/floor/holofloor/tiled/stone, /area/holodeck/source_temple) "uFd" = ( -/obj/effect/paint/red, +/obj/paint/red, /turf/simulated/wall/r_titanium, /area/shuttle/specops/centcom) "uIr" = ( -/obj/effect/floor_decal/stoneborder/corner{ +/obj/floor_decal/stoneborder/corner{ dir = 4 }, /turf/simulated/floor/holofloor/tiled/stone, /area/holodeck/source_temple) "uJE" = ( -/obj/effect/floor_decal/stoneborder{ +/obj/floor_decal/stoneborder{ dir = 8 }, /turf/simulated/floor/holofloor/beach/sand, @@ -11927,13 +11946,13 @@ }, /area/holodeck/source_temple) "vOe" = ( -/obj/effect/floor_decal/stoneborder/corner{ +/obj/floor_decal/stoneborder/corner{ dir = 1 }, /turf/simulated/floor/holofloor/tiled/stone, /area/holodeck/source_temple) "vQS" = ( -/obj/effect/overlay/palmtree_r, +/obj/overlay/palmtree_r, /turf/simulated/floor/holofloor/beach/sand, /area/holodeck/source_temple) "wda" = ( @@ -11942,7 +11961,7 @@ /turf/simulated/floor/holofloor/grass, /area/holodeck/source_plaza) "wjw" = ( -/obj/effect/floor_decal/stoneborder{ +/obj/floor_decal/stoneborder{ dir = 8 }, /turf/simulated/floor/holofloor/beach/sand{ @@ -11950,9 +11969,9 @@ }, /area/holodeck/source_temple) "wkp" = ( -/obj/effect/wallframe_spawn/reinforced/titanium, -/obj/effect/paint/hull, -/obj/effect/paint/black, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, +/obj/paint/black, /turf/simulated/floor/plating, /area/shuttle/administration/centcom) "wyK" = ( @@ -11976,13 +11995,13 @@ /obj/structure/bed/chair/wood{ holographic = 1 }, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/floor_decal/spline/fancy/wood{ dir = 5 }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_cafe) "xHn" = ( -/obj/effect/floor_decal/spline/plain{ +/obj/floor_decal/spline/plain{ dir = 8 }, /obj/structure/holonet/end, @@ -11996,7 +12015,7 @@ /turf/simulated/floor/holofloor/wood, /area/holodeck/source_cafe) "xTh" = ( -/obj/effect/floor_decal/spline/plain{ +/obj/floor_decal/spline/plain{ dir = 4 }, /turf/simulated/floor/holofloor/beach/sand{ @@ -12004,7 +12023,7 @@ }, /area/holodeck/source_volleyball) "xXB" = ( -/obj/effect/floor_decal/spline/plain, +/obj/floor_decal/spline/plain, /turf/simulated/floor/holofloor/beach/sand, /area/holodeck/source_volleyball) @@ -24783,7 +24802,7 @@ aTL aUf aUl aUF -aUZ +aVv aVx aVS aWp diff --git a/maps/torch/z2_transit.dmm b/maps/torch/z2_transit.dmm index 9bd383b39b804..927268a53f81e 100644 --- a/maps/torch/z2_transit.dmm +++ b/maps/torch/z2_transit.dmm @@ -1,29 +1,29 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod15, +/obj/shuttle_landmark/escape_pod/transit/pod15, /turf/space/transit/north, /area/space) "ct" = ( -/obj/effect/shuttle_landmark/ninja/internim, +/obj/shuttle_landmark/ninja/internim, /turf/space/bluespace, /area/space) "cX" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod16, +/obj/shuttle_landmark/escape_pod/transit/pod16, /turf/space/transit/north, /area/space) "dj" = ( -/obj/effect/shuttle_landmark/transit/scavver_gantry/two, +/obj/shuttle_landmark/transit/scavver_gantry/two, /turf/space, /area/space) "dK" = ( /turf/space/transit/north, /area/space) "eB" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod8, +/obj/shuttle_landmark/escape_pod/out/pod8, /turf/space, /area/space) "eV" = ( -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ direction = 1; name = "thrower_throwup"; tiles = 0 @@ -31,42 +31,42 @@ /turf/space, /area/space) "ft" = ( -/obj/effect/shuttle_landmark/transit/scavver_gantry, +/obj/shuttle_landmark/transit/scavver_gantry, /turf/space, /area/space) "gm" = ( -/obj/effect/shuttle_landmark/transit/merc, +/obj/shuttle_landmark/transit/merc, /turf/space, /area/space) "gT" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod11, +/obj/shuttle_landmark/escape_pod/transit/pod11, /turf/space/transit/east, /area/space) "hh" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod12, +/obj/shuttle_landmark/escape_pod/transit/pod12, /turf/space/transit/north, /area/space) "hV" = ( -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ affect_ghosts = 1; name = "thrower_leftnostop" }, /turf/space/transit/east, /area/space) "ka" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod13, +/obj/shuttle_landmark/escape_pod/out/pod13, /turf/space, /area/space) "lg" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod7, +/obj/shuttle_landmark/escape_pod/transit/pod7, /turf/space/transit/north, /area/space) "mv" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod15, +/obj/shuttle_landmark/escape_pod/out/pod15, /turf/space, /area/space) "nN" = ( -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ direction = 1; name = "thrower_throwup"; tiles = 0 @@ -74,11 +74,11 @@ /turf/space/bluespace, /area/space) "oX" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod10, +/obj/shuttle_landmark/escape_pod/out/pod10, /turf/space, /area/space) "pB" = ( -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ affect_ghosts = 1; name = "thrower_throwdownside"; nostop = 1; @@ -88,11 +88,11 @@ /turf/space, /area/space) "pD" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod8, +/obj/shuttle_landmark/escape_pod/transit/pod8, /turf/space/transit/north, /area/space) "qg" = ( -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ affect_ghosts = 1; name = "thrower_throwdownside"; nostop = 1; @@ -102,11 +102,11 @@ /turf/space/transit/north, /area/space) "rD" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod17, +/obj/shuttle_landmark/escape_pod/transit/pod17, /turf/space/transit/north, /area/space) "sI" = ( -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ direction = 1; name = "thrower_throwup"; tiles = 0 @@ -114,11 +114,11 @@ /turf/space/transit/north, /area/space) "vK" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod13, +/obj/shuttle_landmark/escape_pod/transit/pod13, /turf/space/transit/north, /area/space) "vV" = ( -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ affect_ghosts = 1; name = "thrower_throwdownside"; nostop = 1; @@ -128,7 +128,7 @@ /turf/space/bluespace, /area/space) "xk" = ( -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ affect_ghosts = 1; direction = 8; name = "thrower_escapeshuttletop(left)"; @@ -137,15 +137,15 @@ /turf/space/bluespace, /area/space) "xw" = ( -/obj/effect/shuttle_landmark/transit/scavver_gantry/three, +/obj/shuttle_landmark/transit/scavver_gantry/three, /turf/space, /area/space) "yk" = ( -/obj/effect/shuttle_landmark/transit/torch/aquila, +/obj/shuttle_landmark/transit/torch/aquila, /turf/space/transit/north, /area/space) "yK" = ( -/obj/effect/shuttle_landmark/skipjack/internim, +/obj/shuttle_landmark/skipjack/internim, /turf/space/bluespace, /area/space) "zt" = ( @@ -154,15 +154,15 @@ }, /area/space) "zC" = ( -/obj/effect/shuttle_landmark/transit/torch/exploration_shuttle, +/obj/shuttle_landmark/transit/torch/exploration_shuttle, /turf/space/transit/north, /area/space) "zK" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod7, +/obj/shuttle_landmark/escape_pod/out/pod7, /turf/space, /area/space) "zU" = ( -/obj/effect/step_trigger/teleporter/random{ +/obj/step_trigger/teleporter/random{ affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; @@ -177,19 +177,19 @@ }, /area/space) "Bg" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod12, +/obj/shuttle_landmark/escape_pod/out/pod12, /turf/space, /area/space) "BG" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod17, +/obj/shuttle_landmark/escape_pod/out/pod17, /turf/space, /area/space) "BJ" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod9, +/obj/shuttle_landmark/escape_pod/out/pod9, /turf/space, /area/space) "DN" = ( -/obj/effect/step_trigger/teleporter/random{ +/obj/step_trigger/teleporter/random{ affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; @@ -202,11 +202,11 @@ /turf/space, /area/space) "DW" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod11, +/obj/shuttle_landmark/escape_pod/out/pod11, /turf/space, /area/space) "EK" = ( -/obj/effect/step_trigger/teleporter/random{ +/obj/step_trigger/teleporter/random{ affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; @@ -216,7 +216,7 @@ teleport_z = 6; teleport_z_offset = 6 }, -/obj/effect/step_trigger/teleporter/random{ +/obj/step_trigger/teleporter/random{ affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; @@ -231,15 +231,15 @@ }, /area/space) "Gm" = ( -/obj/effect/shuttle_landmark/ert/internim, +/obj/shuttle_landmark/ert/internim, /turf/space/bluespace, /area/space) "Gy" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod10, +/obj/shuttle_landmark/escape_pod/transit/pod10, /turf/space/transit/east, /area/space) "GN" = ( -/obj/effect/step_trigger/teleporter/random{ +/obj/step_trigger/teleporter/random{ affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; @@ -252,7 +252,7 @@ /turf/space/transit/north, /area/space) "GT" = ( -/obj/effect/step_trigger/teleporter/random{ +/obj/step_trigger/teleporter/random{ affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; @@ -262,7 +262,7 @@ teleport_z = 6; teleport_z_offset = 6 }, -/obj/effect/step_trigger/teleporter/random{ +/obj/step_trigger/teleporter/random{ affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; @@ -278,7 +278,7 @@ /turf/space/transit/east, /area/space) "Lp" = ( -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ affect_ghosts = 1; name = "thrower_throwdown"; tiles = 0 @@ -286,11 +286,11 @@ /turf/space/bluespace, /area/space) "Pr" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod6, +/obj/shuttle_landmark/escape_pod/out/pod6, /turf/space, /area/space) "RR" = ( -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ affect_ghosts = 1; direction = 4; name = "thrower_escapeshuttletop(right)"; @@ -299,7 +299,7 @@ /turf/space/transit/north, /area/space) "RU" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod9, +/obj/shuttle_landmark/escape_pod/transit/pod9, /turf/space/transit/north, /area/space) "Uc" = ( @@ -309,11 +309,11 @@ /turf/space, /area/space) "VK" = ( -/obj/effect/shuttle_landmark/transit/torch/guppy, +/obj/shuttle_landmark/transit/torch/guppy, /turf/space/transit/north, /area/space) "VO" = ( -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ affect_ghosts = 1; direction = 4; name = "thrower_escapeshuttletop(right)"; @@ -322,20 +322,20 @@ /turf/space/bluespace, /area/space) "WO" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod6, +/obj/shuttle_landmark/escape_pod/transit/pod6, /turf/space/transit/north, /area/space) "XQ" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod16, +/obj/shuttle_landmark/escape_pod/out/pod16, /turf/space, /area/space) "Zi" = ( -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ direction = 1; name = "thrower_throwup"; tiles = 0 }, -/obj/effect/step_trigger/thrower{ +/obj/step_trigger/thrower{ direction = 1; name = "thrower_throwup"; tiles = 0 diff --git a/maps/unit_tests/virtual_mob_test.dmm b/maps/unit_tests/virtual_mob_test.dmm index bbd0928e6b960..f29dcade35c11 100644 --- a/maps/unit_tests/virtual_mob_test.dmm +++ b/maps/unit_tests/virtual_mob_test.dmm @@ -25,7 +25,7 @@ /turf/unsimulated/wall, /area/test_area/requires_power_non_dynamic_lighting) "h" = ( -/obj/effect/landmark/virtual_spawn/two, +/obj/landmark/virtual_spawn/two, /turf/unsimulated/floor{ icon_state = "hydrofloor" }, @@ -36,13 +36,13 @@ }, /area/test_area/powered_non_dynamic_lighting) "j" = ( -/obj/effect/landmark/virtual_spawn/one, +/obj/landmark/virtual_spawn/one, /turf/unsimulated/floor{ icon_state = "hydrofloor" }, /area/test_area/powered_non_dynamic_lighting) "k" = ( -/obj/effect/landmark/virtual_spawn/three, +/obj/landmark/virtual_spawn/three, /turf/unsimulated/floor{ icon_state = "hydrofloor" }, diff --git a/maps/using.dm b/maps/using.dm index 2cf62e88f9612..926908a4411b1 100644 --- a/maps/using.dm +++ b/maps/using.dm @@ -1,4 +1,5 @@ //Easily change which map to build by uncommenting ONE below. //#include "example\map.dm" -#include "torch\map.dm" +//#include "torch\map.dm" +#include "sierra\map.dm" diff --git a/mods/CREATE_MOD.ps1 b/mods/CREATE_MOD.ps1 new file mode 100644 index 0000000000000..8add13e2aa775 --- /dev/null +++ b/mods/CREATE_MOD.ps1 @@ -0,0 +1,58 @@ +$COLOR_RESET = [char]27 + '[0m' +$COLOR_GREEN = [char]27 + '[32m' +$COLOR_BLUE = [char]27 + '[36m' + +$script_dir = Split-Path -Parent $MyInvocation.MyCommand.Path +$mod_name = "" +$mod_name_upper = "" +$mod_name_lower = "" + +while (-not $mod_name) { + Write-Host "${COLOR_GREEN}| ${COLOR_RESET}Название мода пишется заглавными буквами, а также с" + Write-Host "${COLOR_GREEN}| ${COLOR_RESET}использованием подчёркиваний вместо пробелов или тире." + Write-Host "${COLOR_GREEN}| ${COLOR_RESET}Пример: COOKIE_FACTORY" + $mod_name = Read-Host "${COLOR_BLUE}> ${COLOR_RESET}Введи название мода" + Write-Host + $mod_name = $mod_name -replace '\s|-', '_' + + $mod_name_upper = $mod_name.ToUpper() + $mod_name_lower = $mod_name.ToLower() + + Write-Host "${COLOR_GREEN}| ${COLOR_RESET}Выбранное название: ${mod_name_upper} / ${mod_name_lower}" + $confirmation = Read-Host "${COLOR_BLUE}> ${COLOR_RESET}Всё верно? (Y/n)" + Write-Host + if ($confirmation -and $confirmation.ToLower() -ne "y") { + $mod_name = "" + } +} + +if (-Not (Test-Path "$script_dir\_example" -PathType Container)) { + Write-Host "Папка mods\_example не найдена. Убедись что она существует и попробуй ещё раз." + Exit +} + +$modpack_dir = Join-Path -Path $script_dir -ChildPath $mod_name_lower +if (Test-Path "$modpack_dir" -PathType Container) { + Write-Host "Папка mods\$mod_name_lower уже существует." + Exit +} + +New-Item -ItemType Directory -Path "$modpack_dir" | Out-Null +Copy-Item -Path "$script_dir\_example\*" -Destination "$modpack_dir" + +# Rename files +Get-ChildItem "$modpack_dir" | ForEach-Object { + $newName = $_.Name -replace "_example", "_$mod_name_lower" + Rename-Item -Path $_.FullName -NewName $newName +} + +# Process and update content of all the files +Get-ChildItem "$modpack_dir\*.*" | ForEach-Object { + $content = Get-Content $_.FullName | ForEach-Object { + $_ -creplace "EXAMPLE", $mod_name_upper -creplace "example", $mod_name_lower + } + $content | Set-Content $_.FullName +} + +Write-Host "Готово! Файлы для мода $mod_name_upper созданы." +Write-Host "Находятся они в папке mods/$mod_name_lower." diff --git a/mods/CREATE_MOD.py b/mods/CREATE_MOD.py new file mode 100644 index 0000000000000..a2047e6ea6b20 --- /dev/null +++ b/mods/CREATE_MOD.py @@ -0,0 +1,63 @@ +import os + +COLOR_RESET = '\033[0m' +COLOR_GREEN = '\033[32m' +COLOR_BLUE = '\033[36m' + +script_dir = os.path.dirname(os.path.realpath(__file__)) +mod_name = "" +mod_name_upper = "" +mod_name_lower = "" + + +while not mod_name: + print(f"{COLOR_GREEN}| {COLOR_RESET}Название мода пишется заглавными буквами, а также с") + print(f"{COLOR_GREEN}| {COLOR_RESET}использованием подчёркиваний вместо пробелов или тире.") + print(f"{COLOR_GREEN}| {COLOR_RESET}Пример: COOKIE_FACTORY") + mod_name = input(f"{COLOR_BLUE}> {COLOR_RESET}Введи название мода: ") + print() + mod_name = mod_name.replace(' ', '_') + mod_name = mod_name.replace('-', '_') + + mod_name_upper = mod_name.upper() + mod_name_lower = mod_name.lower() + + print(f"{COLOR_GREEN}| {COLOR_RESET}Выбранное название: {mod_name_upper} / {mod_name_lower}") + confirmation = input(f"{COLOR_BLUE}> {COLOR_RESET}Всё верно? (Y/n) ").lower() + print() + if confirmation and confirmation != "y": + mod_name = "" + +if not os.path.exists(f"{script_dir}/_example"): + print("Папка mods/_example не найдена. Убедись что она существует и попробуй ещё раз.") + print() + input("Нажмите Enter для закрытия...") + exit() + +if os.path.exists(f"{script_dir}/{mod_name_lower}"): + print(f"Папка mods/{mod_name_lower} уже существует.") + print() + input("Нажмите Enter для закрытия...") + exit() + +os.mkdir(f"{script_dir}/{mod_name_lower}") + +for filename in os.listdir(f"{script_dir}/_example"): + source = f"{script_dir}/_example/{filename}" + destination = f"{script_dir}/{mod_name_lower}/{filename}" + if os.path.isdir(source): + continue + with open(source, 'r', encoding="utf8") as src_file, open(destination, 'w', encoding="utf8") as dest_file: + dest_file.write(src_file.read().replace("EXAMPLE", mod_name_upper).replace("example", mod_name_lower)) + + +# Rename files +for filename in os.listdir(f"{script_dir}/{mod_name_lower}"): + new_name = filename.replace("_example", f"_{mod_name_lower}") + os.rename(f"{script_dir}/{mod_name_lower}/{filename}", f"{script_dir}/{mod_name_lower}/{new_name}") + + +print(f"Готово! Файлы для мода {mod_name_upper} созданы.") +print(f"Находятся они в папке mods/{mod_name_lower}.") +print() +input("Нажмите Enter для закрытия...") diff --git a/mods/CREATE_MOD.sh b/mods/CREATE_MOD.sh new file mode 100644 index 0000000000000..1b20f822258b1 --- /dev/null +++ b/mods/CREATE_MOD.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +COLOR_RESET='\033[0m' +COLOR_GREEN='\033[32m' +COLOR_BLUE='\033[36m' + +mod_name="" +mod_name_upper="" +mod_name_lower="" + +script_dir=$(dirname "$0") + +while [ -z "$mod_name" ]; do + echo -e "${COLOR_GREEN}| ${COLOR_RESET}Название мода пишется заглавными буквами, а также с" + echo -e "${COLOR_GREEN}| ${COLOR_RESET}использованием подчёркиваний вместо пробелов или тире." + echo -e "${COLOR_GREEN}| ${COLOR_RESET}Пример: COOKIE_FACTORY" + echo -en "${COLOR_BLUE}> ${COLOR_RESET}Введи название мода: " + read mod_name + echo + + mod_name=$(echo "$mod_name" | sed -E 's/\s|-/_/g') + + mod_name_upper=$(echo "$mod_name" | tr '[:lower:]' '[:upper:]') + mod_name_lower=$(echo "$mod_name" | tr '[:upper:]' '[:lower:]') + + echo -e "${COLOR_GREEN}| ${COLOR_RESET}Выбранное название: ${mod_name_upper} / ${mod_name_lower}" + echo -en "${COLOR_BLUE}> ${COLOR_RESET}Всё верно? (Y/n) " + read confirmation + echo + + confirmation=${confirmation:-y} + if [ "${confirmation,,}" != "y" ]; then + mod_name="" + fi +done + +if [ ! -d "$script_dir/_example" ]; then + echo "Папка mods/_example не найдена. Убедись что она существует и попробуй ещё раз." + exit 1 +fi + +if [ -d "$script_dir/$mod_name_lower" ]; then + echo "Папка mods/$mod_name_lower уже существует." + exit 1 +fi + +mkdir -p "$script_dir/$mod_name_lower" +cp "$script_dir/_example/"* "$script_dir/$mod_name_lower/" + +# Rename files +for file in "$script_dir/$mod_name_lower"/*example*; do + new_name=$(echo "$file" | sed -E "s/_example/_$mod_name_lower/") + mv "$file" "$new_name" +done + +# Process and update content of all the files +for file in "$script_dir/$mod_name_lower"/*; do + sed -i'' -e "s/EXAMPLE/$mod_name_upper/g" -e "s/example/$mod_name_lower/g" "$file" +done + +echo "Готово! Файлы для мода $mod_name_upper созданы." +echo "Находятся они в папке mods/$mod_name_lower." diff --git a/mods/README.md b/mods/README.md new file mode 100644 index 0000000000000..857a29a00994b --- /dev/null +++ b/mods/README.md @@ -0,0 +1,325 @@ +# Модуляризация + +### Если вы не будете следовать этому руководству, то с большой вероятностью ваш PR будет отклонён. + +
    +Содержание документа + +- [Модуляризация](#модуляризация) + - [Введение](#введение) + - [Тестите PRы!](#тестите-prы) + - [Природа конфликтов](#природа-конфликтов) + - [Решение](#Решение) +- [Руководство по модуляризации](#руководство-по-модуляризации) + - [Модпаки](#модпаки) + - [Создание модпака](#создание-модпака) + - [Структура модпака](#структура-модпака) + - [Быстрое создание основы мода](#быстрое-создание-основы-мода) + - [Назначение каждого из файлов](#назначение-каждого-из-файлов) + - [Папки `code/`, `icons/`, `sounds/`, `maps/`](#папки-code-icons-sounds-maps) + - [Комментирование кода мода - Не делай этого!](#комментирование-кода-мода---не-делай-этого) + - [Папка `_master_files`](#папка-_master_files) + - [Оверрайды](#оверрайды) + - [Ассеты: Изображения, иконки, звуки и другие бинарные файлы](#ассеты-изображения-иконки-звуки-и-другие-бинарные-файлы) + - [Код: Модульные изменения](#код-модульные-изменения) + - [Код: Немодульные изменения](#код-немодульные-изменения) + - [NanoUI](#nanoui) + - [Исключительные случаи](#исключительные-случаи) + - [Дефайны (`#define`)](#дефайны-define) + +
    + +## Введение + +Разработка и поддержка отдельной кодовой базы - это громадная, тяжёлая задача, пытаясь справиться с которой, многие потерпели неудачу и пострадали от последствий, таких как устаревший и беспорядочный код. Это не обязательно вина нехватки навыков у людей, поддерживающих кодбазу - просто нехватка ресурсов и то, сколько непрерывных усилий требует такая попытка. + +Одним из решений проблемы - основать наш сервер на надежной кодовой базе, которая в основном поддерживается кем-то другим, в нашем случае - [BayStation](https://github.com/Baystation12/Baystation12), и вставлять наш контент модульным образом, следуя общему направлению кода (но не геймплея) апстрима, отражая любые его изменения. + +Git, как система контроля версий, очень удобен, однако это просто очень методичная вещь, которая следует своим многочисленным алгоритмам, и они, к сожалению, не всегда могут разумно разрешать определенные изменения в коде однозначным образом, вызывая *конфликты*, которые приходится решать вручную. + +Так как возможность долгосрочной поддержки является одной из основных причин использования как основы другой кодбазы, **это руководство по модуляризации являтеся обязательным к прочтению и использованию**. Хорошо организованный, задокументированный и атомизированный код избавляет мейнтейнеров от тонны головной боли. Не перекладывайте на них работу, которую можете сделать сами. + +Этот документ может обновляться время от времени, если вдруг появятся новые исключения из правил. Иногда его стоило бы перепроверять. + +## Тестите PRы! +Ты ответственнен за тестирование твоих PR. PR нельзя отмечать готовым к ревью, пока он тобой не протестирован. Если для тестов требуется второй клиент - ты можешь зайти с использованием гостевого аккаунта. Для этого нужно лишь выйти из аккаунта BYOND и зайти на сервер. Тест мёржи - не для поиска багов, а для стресс-тестов, которые локально повторить не получится. + +## Природа конфликтов +Например, у нас есть переменная +```dm +var/something = 1 +``` +В *кор коде* мы решили заменить `1` на `2` +```diff +- var/something = 1 ++ var/something = 2 // SIERRA +``` +А на апстриме решили сменить на `1` вообще на `4` +```diff +- var/something = 1 ++ var/something = 4 +``` +Таким образом получается достаточно простой конфликт +```diff +- var/something = 1 +<<<<<< ours ++ var/something = 2 // SIERRA +====== ++ var/something = 4 +>>>>>>> theirs +``` +Где мы выбираем предпочитаемый вариант вручную. + +## Решение +Конфликты - это то, что не может и не должно решаться автоматически, потому что это может привести к ошибкам и багам, которые будет очень сложно отследить, не говоря уже и о более сложных примерах, например таких, что добавляют, изменяют и перемещают строки кода повсюду. + +Вкратце, программа изо всех сил старается, но она слишком глупая. Поэтому мы сами должны что-то делать, чтобы она могла без усилий выполнять большую часть работы, сводя к минимуму участие мейнтейнеров, вмешательство которых будет требоваться лишь когда конфликты будут неизбежны. + +Решение - модуляризация кода. + +Модуляризация означает, что максимально возможное количество изменений будут производиться в отдельной папке `mods/`, независимой от *кор кода* насколько это возможно, а те изменения, которые ну никак не поддаются модуляризации будут отмечены специальными комментариями с указанием где они начинаются, заканчиваются и частью какого мода они являются. + +# Руководство по модуляризации +Начни с определения темы/цели того что ты хочешь сделать. Возможно ты можешь не создавать новый мод, а добавить функционал к уже существующему. + +**Если это твик или фикс, относящийся к Baystation12**, то первым твоим действием должно быть обсуждение и создание PR на апстриме, чтобы беспричинно не модуляризировать это у нас. + +В ином случае, выбери ID для своего мода, например `DNA_FEATURE_WINGS`, `XENOARCHEOLOGY` или `SHUTTLE_TOGGLE` - он будет использоваться для документирования и идентифицирования мода. Именно этот ID должен использоваться ВЕЗДЕ, чтобы можно было легко найти всё что относится к твоему моду. + +Далее тебе нужно создать папку, название которой - ID твоего мода строчными буквами. Например, для `HELLO_WORLD` это будет путь `mods/hello_world/` + +## Модпаки + +Модпаки загружаются компилятором сразу после всего остального кода и после карты, что позволяет делать оверрайды, безболезненно добавлять предметы, пользуясь дефайнами из *кор кода* и много много всего. + +Инициализируются модпаки на этапе `SS_INIT_EARLY` с вызовом соответствующей процедуры у синглтона. Подробнее можно почитать в [`mods/_modpack.dm`](/mods/_modpack.dm) + +## Создание модпака +Любой модпак состоит из: +- `README.md` файла с информацией о моде +- `.dme` файла с подключением всех остальных +- `.dm` файла с синглтоном, содержащем информацию о паке +- Возможных в нём подпапок: + - `code` - содержит **только** `.dm` файлы + - `maps` - содержит **только** `.dmm` файлы + - `icons` - содержит **только** файлы изображений + - `sounds` - содержит **только** файлы звуков + +### Структура модпака +Если мы условимся, что наш пак будет называется `hello_world`, то это будет выглядеть так: +``` +mods/hello_world +├─ code +│ ├─ any_file.dm +│ ╰─ some_file.dm +├─ icons +│ ├─ any_icon.dmi +│ ╰─ some_icon.png +├─ maps +│ ├─ any_map.dmm +│ ╰─ some_map.dmm +├─ sounds +│ ├─ any_sound.ogg +│ ╰─ some_sound.mp3 +├─ _hello_world.dm +├─ _hello_world.dme +╰─ README.md +``` + +### Быстрое создание основы мода +#### Автоматически + +**Для любой системы** с установленным Python 3 - запустить файл `mods/CREATE_MOD.py`. + +В **Windows** можно это сделать ещё двумя способами: +1. Открыть конмандную строку в папке SierraBay и прописать: + ```bat + powershell mods\CREATE_MOD.ps1 + ``` +2. Открыть PowerShell в папке SierraBay и прописать: + ```ps + .\mods\CREATE_MOD.ps1 + ``` + +Те, кто пользуется **Linux или WSL** могут использовать bash файл: +```bash +./mods/CREATE_MOD.sh +``` + +#### Вручную +Чтобы реализовать основу мода достаточно выполнить три действия: +- Создать папку `mods/hello_world/`. +- Скопировать в папку `mods/hello_world/` все файлы из [`/mods/_example/`](/mods/_example/). +- Переименовать `example.dme` и `example.dm` в `_hello_world.dme` и `_hello_world.dm`. + +### Назначение каждого из файлов +#### Файл `README.md` +В нём содержатся: +- ID мода +- Ссылка на PR, в котором был создан мод. +- Ссылки на PR с крупными изменениями мода. +- Название мода и его подробное описание. +- Список файлов, изменённых в *кор коде* с коротким описанием изменений. +- Список изменений, внесённых в другие моды, необходимых для функционирования этого. +- Автор кода. + +Все подробности по заполнению файла находятся в нём самом. + +#### Файл `_hello_world.dm` +В синглтоне описывается базовая информация о моде, отображаемая игрокам. +- `name` - Имя мода из `readme.md`, либо оно же, но на русском. +- `desc` - Описание мода. Не из `readme.md`. + + Хотелось бы, чтобы описание было достаточно подробным, чтобы можно было понять что содержит мод, но не сильно замудрённым, чтобы любой игрок осилил читать буквы. + +- `author` - Автор (или авторы) кода из `readme.md`. + +Здесь не стоит размещать имплементацию процедур этого синглтона. + +#### Файл `_hello_world.dme` +Здесь подключаются все необходимые файлы, включая файл с синглтоном. Ничего особенного. + +Пути здесь указываются локальные, а не глобальные. То есть писать нужно не так: +```dm +#include "mods/hello_world/_hello_world.dm" +``` +А вот так: +```dm +#include "_hello_world.dm" +``` + +### Папки `code/`, `icons/`, `sounds/`, `maps/` +**Не повторяй файловую структуру *кор кода* в своём модуле!** + +Примеры: + +`code/`: +- **✅ Правильно:** `/mods/hello_world/code/disease_mob.dm` +- **❌ Неправильно:** `/mods/hello_world/code/modules/antagonists/disease/disease_mob.dm` + +`icons/`: +- **✅ Правильно:** `/mods/hello_world/icons/mining_righthand.dmi` +- **❌ Неправильно:** `/mods/hello_world/icons/mob/inhands/equipment/mining_righthand.dmi` + +С `sounds/` и `maps/` **абсолютно** то же самое. + +### Комментирование кода мода - Не делай этого! +**Если это не *кор код***, то старый код комментировать не нужно - просто удали его. + +Даже если ты думаешь, что кто-то возможно захочет отменить изменения - не комментируй, удаляй. Для этого гит и существует как система контроля версий. + +**Не относится к *кор коду*.** + +## Папка `_master_files` +Ты всегда должен помещать любые модульные переопределения иконок, звуков, кода и всего другого в эту папку. Она должна соответствовать структуре папки основного кода. + +Например: `code/modules/mob/living/living.dm` → `mods/_master_files/code/modules/mob/living/living.dm` + +Это сделано для того, чтобы было проще выяснить, что изменилось в основном файле, без необходимости поиска в определениях процедур. + +Это также помогает предотвратить многократное ненужное переопределение модулями одной и той же процедуры. + +## Оверрайды +### Ассеты: Изображения, иконки, звуки и другие бинарные файлы +Гит не умеет решать конфликты в бинарных файлах и именно поэтому **изменение бинарных файлов в *кор коде* запрещено**. Исключением может быть лишь очень *очень* ***очень*** хорошая причина. + +Все ассеты должны быть размещены в той же папке мода, в который находится и твой код. То есть всё хранится именно в папке мода: код, звуки, изображения... +### Код: Модульные изменения +Код можно легко дописывать к выполнению процедуры из *кор кода* как до её выполнения, так и после, используя вызов родителя - `..()`. И переменные тоже можно добавлять и переписывать без изменения *кор кода*. + +**Эти модульные изменения должны быть размещены в папке `_master_files` и следует избегать размещения их где-либо ещё кроме как здесь.** + +Предположим, что ты хочешь, чтобы оружие искрило при выстреле, для имитации дульного выстрела или для чего-либо ещё, и ты хочешь сделать это потенциально для всех видов оружия. + +В модульном файле мы добавляем переменную +```dm +/obj/item/gun + var/muzzle_flash = TRUE +``` +И это будет прекрасно работать. + +После этого, предположим, ты хочешь проверить эту переменную и создать искры после выстрела. Зная, что исходная процедура вызываемая стрельбой - это +```dm +/obj/item/gun/proc/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1) +``` +Ты можешь создать дочернюю процедуру, которая будет вставлена в цепочку наследования связанных процедур (умные слова, но в этом простом примере можно особо над ними не задумываться) +```dm +/obj/item/gun/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1) + // . - это стандартное возвращаемое значение. + // Ему мы присваиваем то, что возвращает родительская процедура + // Заметь, здесь вызываем родителя перед нашей вставкой + . = ..() + if(muzzle_flash) + // Для упрощения, предположим, что ты уже написал свой proc для этого + spawn_sparks(src) +``` +Вот и основа модуьрных изменений. + +### Код: Немодульные изменения + +Время от времени происходит случай, когда редактирование файлов *кор кода* становится неизбежным. + +Обязательно укажите все изменённые файлы в `README.md` мода. + +В этом случае применяются следующие обозначения: +- **Добавление** + ```dm + // [SIERRA-ADD] - SHUTTLE_TOGGLE - (Необязательно - причина или комментарий) + var/adminEmergencyNoRecall = FALSE + var/lastMode = SHUTTLE_IDLE + var/lastCallTime = 6000 + // [/SIERRA-ADD] + ``` +- **Удаление** + ```dm + // [SIERRA-REMOVE] - SHUTTLE_TOGGLE - (Необязательно - причина или комментарий) + /* + for(var/obj/docking_port/stationary/S in stationary) + if(S.id = id) + return S + */ + // [/SIERRA-REMOVE] + ``` + Для удаления с перемещением в другой файл: + ```dm + // [SIERRA-REMOVE] - SHUTTLE_TOGGLE - (Перемещено в /mods/shuttle_toggle/randomverbs.dm) + /* + /client/proc/admin_call_shuttle() + set category = "Admin - Events" + set name = "Call Shuttle" + + if(EMERGENCY_AT_LEAST_DOCKED) + return + + ... + + message_admins(span_adminnotice("[key_name_admin(usr)] admin-called the emergency shuttle.")) + return + */ + // [/SIERRA-REMOVE] + ``` +- **Изменение** + ```dm + // [SIERRA-EDIT] - SHUTTLE_TOGGLE - (Optional Reason/comment) + // if(SHUTTLE_STRANDED, SHUTTLE_ESCAPE) // SIERRA-EDIT - ORIGINAL + if(SHUTTLE_STRANDED, SHUTTLE_ESCAPE, SHUTTLE_DISABLED) + // [SIERRA-EDIT] + return 1 + ``` + +## NanoUI +Новый интерфейс необходимо создавать в папке `nano/templates/mods`. Для редактирования существующего - создать там его копию и включить в игру с помощью мода/модулярного изменения. + +Для подключения интерфейса из этой папки, нужно к названию файла добавить префикс `mods-`. + +То есть для файла `nano/templates/mods/jukebox.tmpl` при открытии интерфейса нужно использовать название `"mods-jukebox.tmpl"` вместо обычного `"jukebox.tmpl"`. + +## Исключительные случаи +Из каждого правила есть исключения, обусловленные многими обстоятельствами. Не задумывайся об этом сильно. + +## Дефайны (`#define`) +Из-за того, как BYOND загружает файлы, есть необходимость существования отдельной папки для хранения дефайнов модов. Эта папка - `code/__defines/~mods/`, в которой ты можешь создать новый файл, либо дописать код в существующий. + +Если у тебя есть `#define`, который используется более чем в одном файле, он должен быть объявлен именно здесь. + +Если `#define` используется только в одном файле и больше нигде не будет использоваться, объяви его вверху, а в самом низу файла допиши `#undef MY_DEFINE`. Это делается для того, чтобы контекстные меню при разработке оставались чистыми, а также для предотвращения путаницы у тех, кто использует IDE с автозаполнением. diff --git a/mods/_events/EVENT_MODPACKS_HERE.md b/mods/_events/EVENT_MODPACKS_HERE.md new file mode 100644 index 0000000000000..8cf73c5533f34 --- /dev/null +++ b/mods/_events/EVENT_MODPACKS_HERE.md @@ -0,0 +1,2 @@ +# Модпаки для ивентов размещать здесь +### Основной гайд по модпакам diff --git a/mods/_example/README.md b/mods/_example/README.md new file mode 100644 index 0000000000000..0f32408d2d170 --- /dev/null +++ b/mods/_example/README.md @@ -0,0 +1,79 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/##### + + + +## Мод-пример + +ID мода: EXAMPLE + + +### Описание мода + +Этот мод служит примером для разработчиков и существует лишь для того, +чтобы его можно было легко скопировать и вставить в другое место. + + +### Изменения *кор кода* + +- `code/modules/mob/living.dm`: `proc/overriden_proc`, `var/overriden_var` + + +### Оверрайды + +- `mods/_master_files/sound/my_cool_sound.ogg` +- `mods/_master_files/code/my_modular_override.dm`: `proc/overriden_proc`, `var/overriden_var` + + +### Дефайны + +- `code/__defines/~mods/example.dm`: `EXAMPLE_SPEED_MULTIPLIER`, `EXAMPLE_SPEED_BASE` + + +### Используемые файлы, не содержащиеся в модпаке + +- `mods/_master_files/icons/obj/alien.dmi` + + +### Авторы: + +Твой никнейм + diff --git a/mods/_example/_example.dm b/mods/_example/_example.dm new file mode 100644 index 0000000000000..4c347115e71ef --- /dev/null +++ b/mods/_example/_example.dm @@ -0,0 +1,4 @@ +/singleton/modpack/example + name = "Мод-пример" + desc = "Мод, который является примером и ни в коем случае не должен быть использован." + author = "Твой никнейм" diff --git a/mods/_example/_example.dme b/mods/_example/_example.dme new file mode 100644 index 0000000000000..402173254bba0 --- /dev/null +++ b/mods/_example/_example.dme @@ -0,0 +1,9 @@ +#ifndef MODPACK_EXAMPLE +#define MODPACK_EXAMPLE + +#include "_example.dm" + +// Далее просто включай свой код +// #include "code/something.dm" + +#endif diff --git a/mods/_maps/farfleet/_map_farfleet.dm b/mods/_maps/farfleet/_map_farfleet.dm new file mode 100644 index 0000000000000..9007cdc351498 --- /dev/null +++ b/mods/_maps/farfleet/_map_farfleet.dm @@ -0,0 +1,3 @@ +/singleton/modpack/map_farfleet + name = "Разведывательный корабль Пионерского Корпуса КФ ГКК" + desc = "Авейка, включающая в себя разведывательный корабль, принадлежащий к Пионерскому корпусу КФ ГКК." diff --git a/mods/_maps/farfleet/_map_farfleet.dme b/mods/_maps/farfleet/_map_farfleet.dme new file mode 100644 index 0000000000000..6e735338b38ad --- /dev/null +++ b/mods/_maps/farfleet/_map_farfleet.dme @@ -0,0 +1,15 @@ +#ifndef MODPACK_MAP_FARFLEET +#define MODPACK_MAP_FARFLEET + +#include "_map_farfleet.dm" +#include "code/farfleet.dm" +#include "code/farfleet_areas.dm" +#include "code/farfleet_crew.dm" +#include "code/farfleet_faction.dm" +#include "code/farfleet_items.dm" +#include "code/farfleet_presets.dm" +#include "code/farfleet_shuttle.dm" +#include "code/farfleet_structures.dm" +#include "code/farfleet_turbolift.dm" + +#endif diff --git a/mods/_maps/farfleet/code/farfleet.dm b/mods/_maps/farfleet/code/farfleet.dm new file mode 100644 index 0000000000000..ea31ba6ac5d75 --- /dev/null +++ b/mods/_maps/farfleet/code/farfleet.dm @@ -0,0 +1,104 @@ + + /////////// + //OVERMAP// + /////////// + +/obj/overmap/visitable/ship/farfleet + name = "Pioneer Corps Gunboat" + desc = "ICGNV Garibaldi-class Gunboat. This craft bears markings of Pioneer Corps" + color = "#fc7a00" + fore_dir = WEST + vessel_mass = 1000 + known_ships = list(/obj/overmap/visitable/ship/landable/snz) + vessel_size = SHIP_SIZE_SMALL + hide_from_reports = TRUE + start_x = 39 + start_y = 39 + + initial_generic_waypoints = list( + "nav_farfleet_1", + "nav_farfleet_2", + "nav_farfleet_3", + "nav_farfleet_4", + "nav_hangar_snz" + ) + + initial_restricted_waypoints = list( + "SNZ" = list("nav_hangar_snz") + ) + +#define RECON_SHIP_PREFIX pick("Admiral Sobolev","Ivan Kozhedub","Sevastopol","Zirkel","Kurchatov","Gomel","Admiral Kolchak","Udaloi","Omsk","Krondstatt","Admiral Nakhimov","Iron Dmitry","Simbirsk","Apostle Peter","Admiral Chernavin","Proryv","Triumph","Besstrashnyi","Elisarov","Magnitogorsk") +/obj/overmap/visitable/ship/farfleet/New() + name = "ICCGN PC [RECON_SHIP_PREFIX], \a [name]" + for(var/area/ship/farfleet/A) + A.name = "\improper [name] - [A.name]" + GLOB.using_map.area_purity_test_exempt_areas += A.type + ..() +#undef RECON_SHIP_PREFIX + +/datum/map_template/ruin/away_site/farfleet + name = "Pioneer Corps Gunboat (ICGNV)" + id = "awaysite_recon_ship" + description = "Garibaldi-class Gunboat, ICCG Pioneer Corps Reconnaissance Craft." + prefix = "mods/_maps/farfleet/maps/" + suffixes = list("farfleet-1.dmm", "farfleet-2.dmm") + ban_ruins = list(/datum/map_template/ruin/away_site/patrol) + spawn_cost = 0.5 + player_cost = 7 + spawn_weight = 1 + shuttles_to_initialise = list(/datum/shuttle/autodock/overmap/snz) + + area_usage_test_exempted_areas = list( + /area/turbolift/farfleet_first, + /area/turbolift/farfleet_second + ) + +/obj/shuttle_landmark/nav_farfleet/nav1 + name = "Pioneer Corps Ship Fore" + landmark_tag = "nav_farfleet_1" + +/obj/shuttle_landmark/nav_farfleet/nav2 + name = "Pioneer Corps Ship Aft" + landmark_tag = "nav_farfleet_2" + +/obj/shuttle_landmark/nav_farfleet/nav3 + name = "Pioneer Corps Ship Port" + landmark_tag = "nav_farfleet_3" + +/obj/shuttle_landmark/nav_farfleet/nav4 + name = "Pioneer Corps Ship Starboard" + landmark_tag = "nav_farfleet_4" + +/obj/submap_landmark/joinable_submap/farfleet + name = "ICCGN PC Ship" + archetype = /singleton/submap_archetype/away_iccgn_farfleet + +/* TCOMMS + * ====== + */ + +/obj/machinery/telecomms/allinone/iccgn + listening_freqs = list(ICCGN_FREQ) + channel_color = COMMS_COLOR_ICCG + channel_name = "Pioneer" + circuitboard = /obj/item/stock_parts/circuitboard/telecomms/allinone/iccgn + + +//Items +/obj/item/device/radio/headset/iccgn + name = "iccgn headset" + desc = "Headset belonging to an ICCGN operative." + icon_state = "syndie_headset" + item_state = "headset" + ks1type = /obj/item/device/encryptionkey/iccgn + +/obj/item/device/radio/headset/iccgn/Initialize() + . = ..() + set_frequency(ICCGN_FREQ) + +/obj/item/device/encryptionkey/iccgn + name = "\improper ICCGN radio encryption key" + channels = list("ICGN Ship" = 1) + +/obj/item/stock_parts/circuitboard/telecomms/allinone/iccgn + build_path = /obj/machinery/telecomms/allinone/iccgn diff --git a/mods/_maps/farfleet/code/farfleet_areas.dm b/mods/_maps/farfleet/code/farfleet_areas.dm new file mode 100644 index 0000000000000..f139bd4f27496 --- /dev/null +++ b/mods/_maps/farfleet/code/farfleet_areas.dm @@ -0,0 +1,230 @@ +/area/ship/farfleet + name = "\improper ICCGN Farfleet" + icon_state = "shuttle2" + area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED + +/area/ship/farfleet/crew + name = "\improper Officer's Locker Room" + icon_state = "locker" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_CREW + +/area/ship/farfleet/crew/hydroponics + name = "\improper Auxiliary Hydroponics" + icon_state = "green" + req_access = list(access_away_iccgn) + +/area/ship/farfleet/crew/canteen + name = "\improper Canteen" + icon_state = "cafeteria" + req_access = list(access_away_iccgn) + +/area/ship/farfleet/crew/kitchen + name = "\improper Galley" + icon_state = "green" + req_access = list(access_away_iccgn) + +/area/ship/farfleet/crew/freezer + name = "\improper Freezer" + icon_state = "locker" + req_access = list(access_away_iccgn) + +/area/ship/farfleet/crew/cryo + name = "Cryo Storage" + icon_state = "cryo" + req_access = list(access_away_iccgn) + +/area/ship/farfleet/crew/comms + name = "Communication Relay" + icon_state = "teleporter" + req_access = list(access_away_iccgn, access_away_iccgn_captain) + +/area/ship/farfleet/crew/toilet + name = "\improper Toilet" + icon_state = "toilet" + req_access = list(access_away_iccgn) + +/area/ship/farfleet/crew/hallway/lower + name = "\improper Hallway - Operative Deck" + icon_state = "hallF" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_HALLWAYS + +/area/ship/farfleet/crew/hallway/upper + name = "\improper Hallway - Hangar Deck" + icon_state = "hallA" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_HALLWAYS + +/area/ship/farfleet/crew/brig + name = "\improper Ship Brig" + icon_state = "red" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_SECURITY + +/area/ship/farfleet/crew/brig/emergency_armory + name = "\improper Emergency Armory" + icon_state = "red" + req_access = list(access_away_iccgn, access_away_iccgn_captain) + holomap_color = HOLOMAP_AREACOLOR_SECURITY + +/area/ship/farfleet/crew/brig/css + name = "\improper Counsultant Room" + icon_state = "red" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_COMMAND + +/area/ship/farfleet/engineering/hallway + name = "\improper Engineering Hallway" + icon_state = "yellow" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_ENGINEERING + +/area/ship/farfleet/engineering/equipment + name = "\improper Engineering Equipment" + icon_state = "yellow" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_ENGINEERING + +/area/ship/farfleet/engineering/atmos_equipment + name = "\improper Atmospherics Equipment" + icon_state = "yellow" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_ENGINEERING + +/area/ship/farfleet/engineering/storage + name = "\improper Engineering Storage" + icon_state = "engineering_locker" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_ENGINEERING + +/area/ship/farfleet/engineering/shield + name = "\improper Shield Generator" + icon_state = "yellow" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_ENGINEERING + +/area/ship/farfleet/engineering/fussion + name = "\improper Fussion Zone" + icon_state = "rust_reactor" + ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambieng1.ogg') + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_ENGINEERING + +/area/ship/farfleet/engineering/fussion/control + name = "\improper Fussion Control" + icon_state = "green" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_ENGINEERING + +/area/ship/farfleet/engineering/atmospherics + name = "\improper Atmospherics" + icon_state = "atmos" + ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambiatm1.ogg') + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_ENGINEERING + +/area/ship/farfleet/barracks + name = "\improper Droptroops Section" + icon_state = "locker" + req_access = list(access_away_iccgn, access_away_iccgn_droptroops) + holomap_color = HOLOMAP_AREACOLOR_EXPLORATION + +/area/ship/farfleet/barracks/armory + name = "\improper Droptroops Armory" + icon_state = "red" + req_access = list(access_away_iccgn, access_away_iccgn_droptroops, access_away_iccgn_sergeant) + holomap_color = HOLOMAP_AREACOLOR_EXPLORATION + + + +/area/ship/farfleet/medbay + name = "\improper Medical Bay" + icon_state = "exam_room" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_MEDICAL + +/area/ship/farfleet/medbay/storage + name = "\improper Medical Storage" + icon_state = "medbay" + req_access = list(access_away_iccgn) + +/area/ship/farfleet/medbay/surgery + name = "\improper Surgery" + icon_state = "surgery" + req_access = list(access_away_iccgn) + + + + + +/area/ship/farfleet/maintenance + name = "\improper Port Maintenance" + icon_state = "amaint" + req_access = list(access_away_iccgn) + +/area/ship/farfleet/maintenance/anomaly + name = "\improper Anomaly Materials " + icon_state = "amaint" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_SCIENCE + +/area/ship/farfleet/maintenance/storage + name = "\improper Auxiliary Storage" + icon_state = "amaint" + req_access = list(access_away_iccgn) + +/area/ship/farfleet/maintenance/waste + name = "\improper Waste Disposal" + icon_state = "amaint" + req_access = list(access_away_iccgn) + +/area/ship/farfleet/maintenance/engine + name = "\improper Thrusters" + icon_state = "red" + req_access = list(access_away_iccgn) + + + +/area/ship/farfleet/command/bridge + name = "\improper Bridge" + icon_state = "bridge" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_COMMAND + +/area/ship/farfleet/command/eva + name = "\improper Fleet EVA" + icon_state = "eva" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_COMMAND + +/area/ship/farfleet/command/equipment + name = "\improper Fleet Equipment" + icon_state = "eva" + req_access = list(access_away_iccgn) + +/area/ship/farfleet/command/snz_hangar + name = "\improper SNZ Hangar" + icon_state = "hangar" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_CARGO + +/area/ship/farfleet/command/hangar_canisters + name = "\improper Fuel station" + icon_state = "purple" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_ENGINEERING + +/area/ship/farfleet/command/launcher + name = "\improper Fore Impulse Cannon" + icon_state = "blue" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_COMMAND + + + +/area/ship/farfleet/dock + name = "\improper Docking Bay" + icon_state = "entry_1" + req_access = list(access_away_iccgn) + holomap_color = HOLOMAP_AREACOLOR_ENGINEERING diff --git a/mods/_maps/farfleet/code/farfleet_crew.dm b/mods/_maps/farfleet/code/farfleet_crew.dm new file mode 100644 index 0000000000000..e2b5e3c147951 --- /dev/null +++ b/mods/_maps/farfleet/code/farfleet_crew.dm @@ -0,0 +1,350 @@ +#define WEBHOOK_SUBMAP_LOADED_ICCGN "webhook_submap_ICCGN" + +/obj/submap_landmark/joinable_submap/away_iccgn_farfleet + name = "Pioneer Corps Recon Craft" + archetype = /singleton/submap_archetype/away_iccgn_farfleet + +/singleton/submap_archetype/away_iccgn_farfleet + descriptor = "ICCG Pioneer Corps Recon Craft" + map = "Recon Ship" + crew_jobs = list( + /datum/job/submap/away_iccgn_farfleet, + /datum/job/submap/away_iccgn_farfleet/iccgn_captain, + /datum/job/submap/away_iccgn_farfleet/iccgn_sergeant, + /datum/job/submap/away_iccgn_farfleet/iccgn_medic, + /datum/job/submap/away_iccgn_farfleet/iccgn_gunner, + /datum/job/submap/away_iccgn_farfleet/iccgn_pawn + ) + call_webhook = WEBHOOK_SUBMAP_LOADED_ICCGN + +/decl/submap_archetype/away_iccgn_farfleet/New() + . = ..() + GLOB.using_map.map_admin_faxes.Add("Lordania Pioneer Corps Relay") + for(var/obj/machinery/photocopier/faxmachine/fax as anything in SSmachines.get_machinery_of_type(/obj/machinery/photocopier/faxmachine)) + GLOB.admin_departments += "Lordania Pioneer Corps Relay" + +/obj/submap_landmark/spawnpoint/away_iccgn_farfleet + name = "Pioneer Corps Trooper" + movable_flags = MOVABLE_FLAG_EFFECTMOVE + +/obj/submap_landmark/spawnpoint/away_iccgn_farfleet/sergeant + name = "Pioneer Corps Starszy Bosman" + +/obj/submap_landmark/spawnpoint/away_iccgn_farfleet/captain + name = "Pioneer Corps Captain" + +/obj/submap_landmark/spawnpoint/away_iccgn_farfleet/iccgn_pawn + name = "CSS Field Operative" + +/obj/submap_landmark/spawnpoint/away_iccgn_farfleet/medic + name = "Pioneer Corpsman" + +/obj/submap_landmark/spawnpoint/away_iccgn_farfleet/gunner + name = "Pioneer Corps Technician" + +/* ACCESS + * ======= + */ + +var/global/const/access_away_iccgn = "ACCESS_ICCGN" +var/global/const/access_away_iccgn_droptroops = "ACCESS_ICCGN_DROPTROOPS" +var/global/const/access_away_iccgn_sergeant = "ACCESS_ICCGN_SERGEANT" +var/global/const/access_away_iccgn_captain = "ACCESS_ICCGN_CAPTAIN" + +/datum/access/access_away_iccgn + id = access_away_iccgn + desc = "ICCGN Main" + region = ACCESS_REGION_NONE + +/datum/access/access_away_iccgn_droptroops + id = access_away_iccgn_droptroops + desc = "ICCGN Droptroops" + region = ACCESS_REGION_NONE + +/datum/access/access_away_iccgn_sergeant + id = access_away_iccgn_sergeant + desc = "ICCGN Sergeant" + region = ACCESS_REGION_NONE + +/datum/access/access_away_iccgn_captain + id = access_away_iccgn_captain + desc = "ICCGN Captain" + region = ACCESS_REGION_NONE + +/obj/item/card/id/awayiccgn/fleet + color = COLOR_GRAY40 + detail_color = "#447ab1" + access = list(access_away_iccgn, access_engine_equip) + +/obj/item/card/id/awayiccgn/droptroops + color = COLOR_GRAY40 + detail_color = "#0018a0" + access = list(access_away_iccgn, access_away_iccgn_droptroops, access_engine_equip) + +/obj/item/card/id/awayiccgn/droptroops/sergeant + access = list(access_away_iccgn, access_away_iccgn_droptroops, access_away_iccgn_sergeant) + extra_details = list("goldstripe") + +/obj/item/card/id/awayiccgn/fleet/captain + access = list(access_away_iccgn, access_away_iccgn_droptroops, access_away_iccgn_sergeant, access_away_iccgn_captain, access_engine_equip) + extra_details = list("goldstripe") + +/obj/item/card/id/awayiccgn/fleet/iccgn_pawn + access = list(access_away_iccgn, access_away_iccgn_droptroops, access_away_iccgn_sergeant, access_away_iccgn_captain, access_engine_equip) + color = COLOR_SURGERY_BLUE + extra_details = list("goldstripe") + +/* JOBS + * ======= + */ + +/datum/job/submap/away_iccgn_farfleet + title = "Pioneer Corps Trooper" + total_positions = 2 + outfit_type = /singleton/hierarchy/outfit/job/iccgn/iccgn_droptroops + allowed_branches = list(/datum/mil_branch/iccgn) + allowed_ranks = list(/datum/mil_rank/iccgn/or3) + supervisors = "Starszy Bosman" + loadout_allowed = TRUE + is_semi_antagonist = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая прохладный воздух на своём лице, а также лёгкую тошноту. \ + Являясь одним из членов экипажа разведывательного корабля Пионерского Корпуса ГКК, вы - член прикоммандированного к нему отряда Космодесантных войск ГКК. \ + По данным бортового компьютера, в данном регионе могут потенциально находиться цели вашей разведывательной экседиции.\ + \ + Вам крайне нежелательно приближаться к кораблям и станциям с опозновательными знаками, или вступать в огневой контакт с кораблями или войсками ЦПСС без разрешения от командования группировкой. \ + Исключением являются те ситуации, когда вы атакованы противником, терпите бедствие или на вашем судне аварийная ситуация." + required_language = LANGUAGE_HUMAN_RUSSIAN + whitelisted_species = list(SPECIES_HUMAN, SPECIES_IPC) + min_skill = list(SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC, + SKILL_EVA = SKILL_BASIC) + + access = list(access_away_iccgn, access_away_iccgn_droptroops, access_engine_equip) + +/datum/job/submap/away_iccgn_farfleet/iccgn_sergeant + title = "Pioneer Corps Starszy Bosman" + total_positions = 1 + outfit_type = /singleton/hierarchy/outfit/job/iccgn/iccgn_sergeant + supervisors = "Recon captain, Command of the Pioneer Corps , ICCGN" + allowed_branches = list(/datum/mil_branch/iccgn) + allowed_ranks = list(/datum/mil_rank/iccgn/or5) + loadout_allowed = TRUE + is_semi_antagonist = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая прохладный воздух на своём лице, а также лёгкую тошноту. \ + Являясь одним из членов экипажа разведывательного корабля Пионерского Корпуса ГКК, вы - командир прикоммандированного к нему отряда Космодесантных войск ГКК. \ + По данным бортового компьютера, в данном регионе могут потенциально находиться цели вашей разведывательной экседиции.\ + \ + Вам крайне нежелательно приближаться к кораблям и станциям с опозновательными знаками, или вступать в огневой контакт с кораблями или войсками ЦПСС без разрешения от командования группировкой. \ + Исключением являются те ситуации, когда вы атакованы противником, терпите бедствие или на вашем судне аварийная ситуация." + required_language = LANGUAGE_HUMAN_RUSSIAN + whitelisted_species = list(SPECIES_HUMAN) + min_skill = list(SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC, + SKILL_PILOT = SKILL_TRAINED, + SKILL_EVA = SKILL_BASIC) + + + access = list(access_away_iccgn, access_away_iccgn_droptroops, access_away_iccgn_sergeant, access_engine_equip) + +/datum/job/submap/away_iccgn_farfleet/iccgn_captain + title = "Pioneer Corps Captain" + total_positions = 1 + outfit_type = /singleton/hierarchy/outfit/job/iccgn/iccgn_captain + allowed_branches = list(/datum/mil_branch/iccgn) + allowed_ranks = list( + /datum/mil_rank/iccgn/of4, + /datum/mil_rank/iccgn/of5 + ) + supervisors = "command of the Pioneer Corps , ICCGN" + loadout_allowed = TRUE + is_semi_antagonist = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая прохладный воздух на своём лице, а также лёгкую тошноту. \ + Будучи одним из членов экипажа разведывательного корабля Пионерского Корпуса ГКК, вы - капитан разведывательного корабля. \ + По данным бортового компьютера, в данном регионе могут потенциально находиться цели вашей разведывательной экседиции.\ + \ + Вам крайне нежелательно приближаться к кораблям и станциям с опозновательными знаками, или вступать в огневой контакт с кораблями или войсками ЦПСС без разрешения от командования группировкой. \ + Исключением являются те ситуации, когда вы атакованы противником, терпите бедствие или на вашем судне аварийная ситуация." + required_language = LANGUAGE_HUMAN_RUSSIAN + whitelisted_species = list(SPECIES_HUMAN) + min_skill = list(SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC, + SKILL_PILOT = SKILL_TRAINED, + SKILL_EVA = SKILL_BASIC) + + access = list(access_away_iccgn, access_away_iccgn_droptroops, access_away_iccgn_sergeant, access_away_iccgn_captain, access_engine_equip) + + +/datum/job/submap/away_iccgn_farfleet/iccgn_medic + title = "Pioneer Corpsman" + total_positions = 1 + outfit_type = /singleton/hierarchy/outfit/job/iccgn/iccgn_medic + allowed_branches = list(/datum/mil_branch/iccgn) + allowed_ranks = list( + /datum/mil_rank/iccgn/of1, + /datum/mil_rank/iccgn/of3 + ) + loadout_allowed = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая прохладный воздух на своём лице, а также лёгкую тошноту. \ + Являясь одним из членов экипажа разведывательного корабля Пионерского Корпуса ГКК, ваша задача состоит в медицинской поддержке экипажа. \ + \ + Вам крайне нежелательно приближаться к кораблям и станциям с опозновательными знаками, или вступать в огневой контакт с кораблями или войсками ЦПСС без разрешения от командования группировкой. \ + Исключением являются те ситуации, когда вы атакованы противником, терпите бедствие или на вашем судне аварийная ситуация." + required_language = LANGUAGE_HUMAN_RUSSIAN + whitelisted_species = list(SPECIES_HUMAN, SPECIES_IPC) + is_semi_antagonist = TRUE + min_skill = list(SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_TRAINED, + SKILL_MEDICAL = SKILL_EXPERIENCED, + SKILL_ANATOMY = SKILL_BASIC, + SKILL_CHEMISTRY = SKILL_BASIC, + SKILL_EVA = SKILL_BASIC) + + + + access = list(access_away_iccgn, access_engine_equip) + +/datum/job/submap/away_iccgn_farfleet/iccgn_gunner + title = "Pioneer Corps Technician" + total_positions = 1 + outfit_type = /singleton/hierarchy/outfit/job/iccgn/iccgn_gunner + allowed_branches = list(/datum/mil_branch/iccgn) + allowed_ranks = list( + /datum/mil_rank/iccgn/of1, + /datum/mil_rank/iccgn/of3 + ) + supervisors = "captain" + loadout_allowed = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая прохладный воздух на своём лице, а также лёгкую тошноту. \ + Являясь одним из членов экипажа разведывательного корабля Пионерского Корпуса ГКК, ваша задача состоит в ведении огня из ракетных установок, пилотирования корабля, поддержании работоспособности судна и экипировки экипажа. \ + \ + Вам крайне нежелательно приближаться к кораблям и станциям с опозновательными знаками, или вступать в огневой контакт с кораблями или войсками ЦПСС без разрешения от командования группировкой. \ + Исключением являются те ситуации, когда вы атакованы противником, терпите бедствие или на вашем судне аварийная ситуация." + required_language = LANGUAGE_HUMAN_RUSSIAN + whitelisted_species = list(SPECIES_HUMAN, SPECIES_IPC) + is_semi_antagonist = TRUE + min_skill = list(SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_TRAINED, + SKILL_MEDICAL = SKILL_BASIC, + SKILL_PILOT = SKILL_TRAINED, + SKILL_EVA = SKILL_TRAINED, + SKILL_CONSTRUCTION = SKILL_TRAINED, + SKILL_ELECTRICAL = SKILL_TRAINED, + SKILL_ATMOS = SKILL_BASIC, + SKILL_ENGINES = SKILL_TRAINED, + SKILL_DEVICES = SKILL_BASIC) + + access = list(access_away_iccgn, access_engine_equip) + +/datum/job/submap/away_iccgn_farfleet/iccgn_pawn + title = "CSS Field Operative" + total_positions = 1 + outfit_type = /singleton/hierarchy/outfit/job/iccgn/iccgn_pawn + allowed_branches = list(/datum/mil_branch/css) + allowed_ranks = list(/datum/mil_rank/css/fa7) + supervisors = "chief of 'P' Department, Confederate Security Service" + psi_faculties = list(PSI_COERCION = PSI_RANK_MASTER) + loadout_allowed = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая прохладный воздух на своём лице, а также лёгкую тошноту. \ + Вы - сотрдник отдела 'П' Конфедеративной Службы Безопасности, приписанный к кораблю Пионерского Корпуса. \ + По данным бортового компьютера, в данном регионе могут потенциально находиться цели вашей разведывательной экседиции.\ + \ + Вашей первичной задачей является сбор разведданных об активности корпоративных судов, судов ЦПСС, а также иной активности, которая покажется вам подозрительной. \ + У вас нет права подниматься на борт судов Nanotrasen или ЦПСС. Помните об этом и не провоцируйте ненужные Конфедерации конфликты. \ + Исключением являются те ситуации, когда вы атакованы противником, терпите бедствие или на вашем судне аварийная ситуация." + required_language = LANGUAGE_HUMAN_RUSSIAN + whitelisted_species = list(SPECIES_HUMAN) + is_semi_antagonist = TRUE + min_skill = list(SKILL_BUREAUCRACY = SKILL_TRAINED, + SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC, + SKILL_PILOT = SKILL_TRAINED, + SKILL_EVA = SKILL_BASIC) + + access = list(access_away_iccgn, access_away_iccgn_droptroops, access_away_iccgn_sergeant, access_away_iccgn_captain, access_engine_equip) + + +/* OUTFITS + * ======= + */ + +#define ICCGN_OUTFIT_JOB_NAME(job_name) ("ICCGN Recon Craft - Job - " + job_name) + +/singleton/hierarchy/outfit/job/iccgn + hierarchy_type = /singleton/hierarchy/outfit/job/iccgn + uniform = /obj/item/clothing/under/iccgn/utility + shoes = /obj/item/clothing/shoes/iccgn/utility + l_ear = /obj/item/device/radio/headset/iccgn + l_pocket = /obj/item/device/radio + r_pocket = /obj/item/crowbar/prybar + suit_store = /obj/item/tank/oxygen + id_types = list(/obj/item/card/id/awayiccgn/fleet) + id_slot = slot_wear_id + pda_type = null + belt = null + back = /obj/item/storage/backpack/satchel/leather/navy + backpack_contents = null + flags = OUTFIT_EXTENDED_SURVIVAL + +/singleton/hierarchy/outfit/job/iccgn/iccgn_droptroops + name = ICCGN_OUTFIT_JOB_NAME("Droptrooper") + head = /obj/item/clothing/head/iccgn/beret + uniform = /obj/item/clothing/under/iccgn/pt + id_types = list(/obj/item/card/id/awayiccgn/droptroops) + belt = /obj/item/storage/belt/holster/security/tactical/farfleet + gloves = /obj/item/clothing/gloves/thick/combat + +/singleton/hierarchy/outfit/job/iccgn/iccgn_sergeant + name = ICCGN_OUTFIT_JOB_NAME("Droptroops Sergeant") + head = /obj/item/clothing/head/iccgn/beret + uniform = /obj/item/clothing/under/iccgn/pt + id_types = list(/obj/item/card/id/awayiccgn/droptroops/sergeant) + belt = /obj/item/storage/belt/holster/security/tactical/farfleet + gloves = /obj/item/clothing/gloves/thick/combat + +/singleton/hierarchy/outfit/job/iccgn/iccgn_gunner + name = ICCGN_OUTFIT_JOB_NAME("Senior Technican") + head = /obj/item/clothing/head/iccgn/service + uniform = /obj/item/clothing/under/iccgn/utility + belt = /obj/item/storage/belt/utility/full + gloves = /obj/item/clothing/gloves/insulated //black + +/singleton/hierarchy/outfit/job/iccgn/iccgn_medic + name = ICCGN_OUTFIT_JOB_NAME("Pioneer Corpsman") + head = /obj/item/clothing/head/iccgn/service + uniform = /obj/item/clothing/under/iccgn/utility + belt = /obj/item/storage/belt/medical/emt + gloves = /obj/item/clothing/gloves/latex/nitrile + +/singleton/hierarchy/outfit/job/iccgn/iccgn_captain + name = ICCGN_OUTFIT_JOB_NAME("Pioneer Corps Captain") + head = /obj/item/clothing/head/iccgn/service_command + uniform = /obj/item/clothing/under/iccgn/service_command + suit = /obj/item/clothing/suit/iccgn/service_command + id_types = list(/obj/item/card/id/awayiccgn/fleet/captain) + shoes = /obj/item/clothing/shoes/iccgn/service + gloves = /obj/item/clothing/gloves/iccgn/duty + belt = /obj/item/storage/belt/holster/security/tactical/farfleet + +/singleton/hierarchy/outfit/job/iccgn/iccgn_pawn + name = ICCGN_OUTFIT_JOB_NAME("Eighth Department's Consultant") + head = /obj/item/clothing/head/iccgn/service + uniform = /obj/item/clothing/under/suit_jacket/charcoal + suit = /obj/item/clothing/suit/iccgn/dress_officer + id_types = list(/obj/item/card/id/awayiccgn/fleet/iccgn_pawn) + shoes = /obj/item/clothing/shoes/dress + gloves = /obj/item/clothing/gloves/iccgn/duty + holster = /obj/item/clothing/accessory/storage/holster/armpit + belt = /obj/item/storage/belt/holster/security/farfleet/iccgn_pawn + +#undef ICCGN_OUTFIT_JOB_NAME +#undef WEBHOOK_SUBMAP_LOADED_ICCGN diff --git a/mods/_maps/farfleet/code/farfleet_faction.dm b/mods/_maps/farfleet/code/farfleet_faction.dm new file mode 100644 index 0000000000000..7035a6b841f5d --- /dev/null +++ b/mods/_maps/farfleet/code/farfleet_faction.dm @@ -0,0 +1,43 @@ +/datum/mil_branch/css + name = "Confederate Security Service" + name_short = "ICCGCSS" + email_domain = "css.gcc" + assistant_job = null + min_skill = list( + SKILL_HAULING = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_EVA = SKILL_BASIC + ) + + rank_types = list( + /datum/mil_rank/css/fa7, + /datum/mil_rank/css/ia6 + ) + + spawn_rank_types = list( + /datum/mil_rank/css/fa7, + /datum/mil_rank/css/ia6 + ) + + +/datum/mil_branch/css/New() + rank_types = subtypesof(/datum/mil_rank/css) + ..() + + +/datum/mil_rank/css/fa7 + name = "Ensign of Confederate Security" + name_short = "EnCS" + accessory = list( + /obj/item/clothing/accessory/iccgn_rank/or7 + ) + sort_order = 70 + + +/datum/mil_rank/css/ia6 + name = "Commissar of Confederate Security" + name_short = "ComCS" + accessory = list( + /obj/item/clothing/accessory/iccgn_rank/of5 + ) + sort_order = 150 diff --git a/mods/_maps/farfleet/code/farfleet_items.dm b/mods/_maps/farfleet/code/farfleet_items.dm new file mode 100644 index 0000000000000..ac1b11b822b54 --- /dev/null +++ b/mods/_maps/farfleet/code/farfleet_items.dm @@ -0,0 +1,374 @@ + +/* CARDS + * ======== + */ + +/obj/item/card/id/farfleet/droptroops + desc = "An identification card issued to ICCG crewmembers aboard the Farfleet Recon Craft." + icon_state = "base" + access = list(access_away_iccgn, access_away_iccgn_droptroops) + +/obj/item/card/id/farfleet/droptroops/sergeant + desc = "An identification card issued to ICCG crewmembers aboard the Farfleet Recon Craft." + icon_state = "base" + access = list(access_away_iccgn, access_away_iccgn_droptroops, access_away_iccgn_sergeant) + +/obj/item/card/id/farfleet/fleet + desc = "An identification card issued to ICCG crewmembers aboard the Farfleet Recon Craft." + icon_state = "base" + access = list(access_away_iccgn) + +/obj/item/card/id/farfleet/fleet/captain + desc = "An identification card issued to ICCG crewmembers aboard the Farfleet Recon Craft." + icon_state = "base" + access = list(access_away_iccgn, access_away_iccgn_captain) + +/* CLOTHING + * ======== + */ + + +/obj/item/clothing/under/iccgn/service_command + accessories = list( + /obj/item/clothing/accessory/iccgn_patch/pioneer + ) + +/obj/item/clothing/under/iccgn/utility + accessories = list( + /obj/item/clothing/accessory/iccgn_patch/pioneer + ) + +/obj/item/clothing/under/iccgn/pt + accessories = list( + /obj/item/clothing/accessory/iccgn_patch/pioneer + ) + +/obj/item/storage/belt/holster/security/tactical/farfleet/New() + ..() + new /obj/item/gun/projectile/pistol/optimus(src) + new /obj/item/ammo_magazine/pistol/double(src) + new /obj/item/ammo_magazine/pistol/double(src) + +/obj/item/storage/belt/holster/security/farfleet/iccgn_pawn/New() + ..() + new /obj/item/gun/projectile/pistol/bobcat(src) + new /obj/item/ammo_magazine/pistol(src) + new /obj/item/ammo_magazine/pistol(src) + + +/* WEAPONARY - BALLISTICS + * ======== + */ + +/obj/item/gun/projectile/automatic/assault_rifle/heltek + name = "LA-700" + desc = "HelTek LA-700 is a standart equipment of ICCG Space-assault Forces. Looks very similiar to STS-35." + icon = 'mods/_maps/farfleet/icons/obj/iccg_rifle.dmi' + icon_state = "iccg_rifle" + +/obj/item/gun/projectile/automatic/assault_rifle/heltek/on_update_icon() + ..() + if(ammo_magazine) + icon_state = "iccg_rifle" + wielded_item_state = "arifle-wielded" + else + icon_state = "iccg_rifle-empty" + wielded_item_state = "arifle-wielded-empty" + +/obj/item/gun/projectile/automatic/mr735 + name = "MR-735" + desc = "A cheap rifle for close quarters combat, with an auto-firing mode available. HelTek MR-735 is a standard rifle for ICCG Space-assault Forces, designed without a stock for easier storage and combat in closed spaces. Perfect weapon for some ship's crew." + icon = 'mods/_maps/farfleet/icons/obj/mr735.dmi' + icon_state = "nostockrifle" + item_state = "nostockrifle" + item_icons = list( + slot_r_hand_str = 'mods/_maps/farfleet/icons/mob/righthand.dmi', + slot_l_hand_str = 'mods/_maps/farfleet/icons/mob/lefthand.dmi', + ) + wielded_item_state = "nostockrifle_wielded" + force = 10 + caliber = CALIBER_RIFLE + origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ESOTERIC = 5) + slot_flags = SLOT_BACK + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/rifle + allowed_magazines = /obj/item/ammo_magazine/rifle + bulk = GUN_BULK_RIFLE + mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg' + mag_remove_sound = 'sound/weapons/guns/interaction/ltrifle_magout.ogg' + + //Assault rifle, burst fire degrades quicker than SMG, worse one-handing penalty, slightly increased move delay + firemodes = list( + list(mode_name="semi auto", burst=1, fire_delay=null, one_hand_penalty=8, burst_accuracy=null, dispersion=null), + list(mode_name="2-round bursts", burst=2, fire_delay=null, one_hand_penalty=9, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)), + list(mode_name="full auto", burst=1, fire_delay=1.7, burst_delay=1.3, one_hand_penalty=7, burst_accuracy=list(0,-1,-1), dispersion=list(1.3, 1.5, 1.7, 1.9, 2.2), autofire_enabled=1) + ) + +/obj/item/gun/projectile/automatic/mr735/on_update_icon() + ..() + if(ammo_magazine) + icon_state = "nostockrifle" + wielded_item_state = "nostockrifle-wielded" + else + icon_state = "nostockrifle-empty" + wielded_item_state = "nostockrifle-wielded-empty" + + +/obj/item/gun/projectile/automatic/mbr + name = "MBR" + desc = "A shabby bullpup carbine. Despite its size, it looks a little uncomfortable, but it is robust. HelTek MBR is a standart equipment of ICCG Space-assault Forces, designed in a bullpup layout. Possesses autofire and is perfect for the ship's crew." + icon = 'mods/_maps/farfleet/icons/obj/mbr_bullpup.dmi' + icon_state = "mbr_bullpup" + item_state = "mbr_bullpup" + item_icons = list( + slot_r_hand_str = 'mods/_maps/farfleet/icons/mob/righthand.dmi', + slot_l_hand_str = 'mods/_maps/farfleet/icons/mob/lefthand.dmi', + ) + wielded_item_state = "mbr_bullpup-wielded" + force = 10 + caliber = CALIBER_RIFLE + origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ESOTERIC = 5) + slot_flags = SLOT_BACK + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/rifle + allowed_magazines = /obj/item/ammo_magazine/rifle + bulk = GUN_BULK_RIFLE + 1 + mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg' + mag_remove_sound = 'sound/weapons/guns/interaction/ltrifle_magout.ogg' + + firemodes = list( + list(mode_name="semi auto", burst=1, fire_delay=null, one_hand_penalty=8, burst_accuracy=null, dispersion=null), + list(mode_name="2-round bursts", burst=2, fire_delay=null, one_hand_penalty=9, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)), + list(mode_name="full auto", burst=1, fire_delay=1.7, burst_delay=1.3, one_hand_penalty=7, burst_accuracy=list(0,-1,-1), dispersion=list(1.3, 1.5, 1.7, 1.9, 2.2), autofire_enabled=1) + ) + +/obj/item/gun/projectile/automatic/mbr/on_update_icon() + ..() + if(ammo_magazine) + icon_state = "mbr_bullpup" + else + icon_state = "mbr_bullpup-empty" + + +/* WEAPONARY - ENERGY + * ======== + */ + +/obj/item/gun/energy/laser/bonfire + name = "Bonfire Carbine" + desc = "Strange construction: laser carbine with underslung grenade launcher and very capable internal battery. HelTek Bonfire-75 is a weapon designed for suppressive fire in close quarters, where usage of ballistic weaponry will be uneffective or simply hazardous." + icon = 'mods/_maps/farfleet/icons/obj/bonfire.dmi' + icon_state = "bonfire" + item_state = "bonfire" + item_icons = list( + slot_r_hand_str = 'mods/_maps/farfleet/icons/mob/righthand.dmi', + slot_l_hand_str = 'mods/_maps/farfleet/icons/mob/lefthand.dmi', + ) + slot_flags = SLOT_BELT|SLOT_BACK + w_class = ITEM_SIZE_LARGE + force = 10 + one_hand_penalty = 2 + fire_delay = 6 + burst_delay = 2 + max_shots = 30 + bulk = GUN_BULK_RIFLE + origin_tech = list(TECH_COMBAT = 5, TECH_MAGNET = 4) + matter = list(MATERIAL_STEEL = 2000) + projectile_type = /obj/item/projectile/beam/smalllaser + wielded_item_state = "bonfire-wielded" + + firemodes = list( + list(mode_name="semi auto", burst=1, fire_delay=null, one_hand_penalty=0, burst_accuracy=null, dispersion=null), + list(mode_name="3-ray bursts", burst=3, fire_delay=null, one_hand_penalty=1, burst_accuracy=list(0,0,-1,-1), dispersion=list(0.0, 0.0, 0.5, 0.6)), + list(mode_name="fire grenades", burst=null, fire_delay=null, use_launcher=1, one_hand_penalty=10, burst_accuracy=null, dispersion=null) + ) + + var/use_launcher = 0 + var/obj/item/gun/launcher/grenade/underslung/launcher + +/obj/item/gun/energy/laser/bonfire/Initialize() + . = ..() + launcher = new(src) + +/obj/item/gun/energy/laser/bonfire/use_tool(obj/item/tool, mob/user, list/click_params) + if(istype(tool, /obj/item/grenade)) + launcher.load(tool, user) + return TRUE + return ..() + +/obj/item/gun/energy/laser/bonfire/attack_hand(mob/user) + if(user.get_inactive_hand() == src && use_launcher) + launcher.unload(user) + else + ..() + +/obj/item/gun/energy/laser/bonfire/Fire(atom/target, mob/living/user, params, pointblank=0, reflex=0) + if(use_launcher) + launcher.Fire(target, user, params, pointblank, reflex) + if(!launcher.chambered) + switch_firemodes() //switch back automatically + else + ..() + +/obj/item/gun/energy/ionrifle/small/stupor + name = "Stupor ion pistol" + desc = "The HelTek Stupor-45 is a compact anti-drone weapon. Due to their small output of EMP, you need be marksman to disable human-sized synthetic. But it's still better, than nothing." + icon = 'mods/_maps/farfleet/icons/obj/stupor.dmi' + icon_state = "stupor" + item_state = "stupor" + item_icons = list( + slot_r_hand_str = 'mods/_maps/farfleet/icons/mob/righthand.dmi', + slot_l_hand_str = 'mods/_maps/farfleet/icons/mob/lefthand.dmi', + ) + fire_delay = 40 + one_hand_penalty = 0 + charge_cost = 40 + max_shots = 5 + +// CSS Anti-psionics stuff + +/obj/item/ammo_casing/pistol/nullglass + desc = "A 10mm bullet casing with a nullglass coating." + projectile_type = /obj/item/projectile/bullet/nullglass + +/obj/item/ammo_casing/pistol/nullglass/disrupts_psionics() + return src + +/obj/item/ammo_magazine/pistol/nullglass + ammo_type = /obj/item/ammo_casing/pistol/nullglass + +/* VOIDSUITS AND RIGS + * ======== + */ + +/obj/item/clothing/head/helmet/space/void/pioneer + name = "pioneer corps voidsuit helmet" + desc = "A somewhat old-fashioned helmet in bright colors. On the forehead you can see the inscription PC ICCG. This one has radiation shielding." + icon = 'mods/_maps/farfleet/icons/obj/obj_head.dmi' + icon_state = "pioneer" + item_state = "pioneer" + item_icons = list(slot_head_str = 'mods/_maps/farfleet/icons/mob/onmob_head.dmi') + armor = list( + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MINOR, + laser = ARMOR_LASER_MINOR, + bomb = ARMOR_BOMB_PADDED, + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_RESISTANT + ) + max_pressure_protection = ENG_VOIDSUIT_MAX_PRESSURE + siemens_coefficient = 0.3 + +/obj/item/clothing/suit/space/void/pioneer + name = "pioneer corps voidsuit" + desc = "A somewhat old-fashioned voidsuit in bright colors. On the shoulder you can see the inscription PC ICCG. This one has radiation shielding." + icon = 'mods/_maps/farfleet/icons/obj/obj_suit.dmi' + icon_state = "pioneer" + item_state = "pioneer" + item_icons = list(slot_wear_suit_str = 'mods/_maps/farfleet/icons/mob/onmob_suit.dmi') + max_pressure_protection = ENG_VOIDSUIT_MAX_PRESSURE + siemens_coefficient = 0.3 + armor = list( + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MINOR, + laser = ARMOR_LASER_MINOR, + bomb = ARMOR_BOMB_PADDED, + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_RESISTANT + ) + allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/storage/briefcase/inflatable,/obj/item/rcd,/obj/item/rpd, /obj/item/gun) + +/obj/item/clothing/suit/space/void/pioneer/prepared + helmet = /obj/item/clothing/head/helmet/space/void/pioneer + boots = /obj/item/clothing/shoes/magboots + item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_INVALID_FOR_CHAMELEON + +/obj/item/rig/pioneer + name = "pioneer corps suit control module" + desc = "A ridiculously bulky military hardsuit with PC-13AA inscription and a small ICCG crest on its control module. This suit's armor plates mostly replaced with anomaly and radiation shielding." + suit_type = "heavy" + icon_state = "gcc_rig" + online_slowdown = 2 ///chunky + offline_slowdown = 4 + armor = list( + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_RESISTANT, + laser = ARMOR_LASER_MAJOR, + energy = ARMOR_ENERGY_STRONG, + bomb = ARMOR_BOMB_PADDED, + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_SHIELDED + ) + initial_modules = list( + /obj/item/rig_module/vision/meson, + /obj/item/rig_module/chem_dispenser, + /obj/item/rig_module/ai_container, + /obj/item/rig_module/device/anomaly_scanner, + /obj/item/rig_module/power_sink, + /obj/item/rig_module/cooling_unit, + /obj/item/rig_module/maneuvering_jets + ) + + chest_type = /obj/item/clothing/suit/space/rig/pioneer + helm_type = /obj/item/clothing/head/helmet/space/rig/pioneer + boot_type = /obj/item/clothing/shoes/magboots/rig/pioneer + glove_type = /obj/item/clothing/gloves/rig/pioneer + +/obj/item/clothing/head/helmet/space/rig/pioneer + light_overlay = "helmet_light_dual_alt" + +/obj/item/clothing/suit/space/rig/pioneer + breach_threshold = 40 + species_restricted = list(SPECIES_HUMAN, SPECIES_IPC) + allowed = list( + /obj/item/gun, + /obj/item/ammo_magazine, + /obj/item/ammo_casing, + /obj/item/handcuffs, + /obj/item/device/flashlight, + /obj/item/tank, + /obj/item/device/suit_cooling_unit, + /obj/item/melee/baton + ) + +/obj/item/clothing/gloves/rig/pioneer + siemens_coefficient = 0 + +/obj/item/clothing/shoes/magboots/rig/pioneer + +/obj/item/rig/pioneer/sergeant + name = "pioneer corps sergeant suit control module" + desc = "A ridiculously bulky military hardsuit with PC-13AS inscription and a small ICCG crest on its control module. This suit's armor plates mostly replaced with anomaly and radiation shielding." + suit_type = "heavy" + + initial_modules = list( + /obj/item/rig_module/vision/meson, + /obj/item/rig_module/chem_dispenser, + /obj/item/rig_module/ai_container, + /obj/item/rig_module/mounted/ballistic/minigun, + /obj/item/rig_module/device/anomaly_scanner, + /obj/item/rig_module/power_sink, + /obj/item/rig_module/cooling_unit, + /obj/item/rig_module/maneuvering_jets + ) + +/* MISC + * ======== + */ + +/obj/item/paper/farfleet/turrets + name = "About Turrets" + info = {"

    По поводу турелей.

    +

    Вася, я не знаю, как ты настраивал эти чёртовы турели, но у них слетает проверка доступа каждый раз как весь экипаж уходит в криосон. Да, я знаю, что они не должны сбоить из-за того, что все спят, но вот они так делают. Наше счастье, что они просто начинают оглушающим лучом бить,а не летальным режимом.

    +

    ПЕРЕЗАГРУЗИ КОНТРОЛЛЕР ТУРЕЛЕЙ, КАК ПОЙДЁШЬ В АНГАР.

    + "} + +/obj/item/paper/farfleet/engines + name = "Engines Usage" + info = {" +
    +

    Я не буду сейчас долго расписывать как работает атмосфера на Гарибальди, которую гайцы ТОЧНО не утащили у клятых марсиан, но принцип работы примерно следующий:

    +

    Основные маршевые двигатели - ионные. Да, не слишком быстро, но надёжно если после затухания реакции в токамаке сможете нормально его настроить. А газовые двигатели - УСКОРИТЕЛИ. Но летать на них постоянно не советую, углекислота не бесконечная.

    +
    +

    Ченков В.П.

    + "} diff --git a/mods/_maps/farfleet/code/farfleet_presets.dm b/mods/_maps/farfleet/code/farfleet_presets.dm new file mode 100644 index 0000000000000..5daa66a03fd49 --- /dev/null +++ b/mods/_maps/farfleet/code/farfleet_presets.dm @@ -0,0 +1,38 @@ + //////// + //SMES// + //////// + +/obj/machinery/power/smes/buildable/preset/farfleet/engine_main + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil/super_capacity = 1, + /obj/item/stock_parts/smes_coil = 1) + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE + +/obj/machinery/power/smes/buildable/preset/farfleet/engine_gyrotron + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil = 1, + /obj/item/stock_parts/smes_coil/super_io = 1) + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE + +/obj/machinery/power/smes/buildable/preset/farfleet/shuttle + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil = 1) + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE + +/obj/machinery/power/smes/buildable/preset/farfleet/laser + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil = 1, + /obj/item/stock_parts/smes_coil = 1) + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE diff --git a/mods/_maps/farfleet/code/farfleet_shuttle.dm b/mods/_maps/farfleet/code/farfleet_shuttle.dm new file mode 100644 index 0000000000000..691a643202880 --- /dev/null +++ b/mods/_maps/farfleet/code/farfleet_shuttle.dm @@ -0,0 +1,51 @@ +/datum/shuttle/autodock/overmap/snz + name = "SNZ Speedboat" + warmup_time = 10 SECONDS + dock_target = "snz_shuttle" + current_location = "nav_hangar_snz" + range = 1 + shuttle_area = /area/ship/snz + fuel_consumption = 4 + defer_initialisation = TRUE + flags = SHUTTLE_FLAGS_PROCESS + skill_needed = SKILL_MIN + ceiling_type = /turf/simulated/floor/shuttle_ceiling/merc + +/obj/machinery/computer/shuttle_control/explore/away_farfleet/snz + name = "SNZ Shuttle control console" + req_access = list(access_away_iccgn) + shuttle_tag = "SNZ Speedboat" + +/obj/overmap/visitable/ship/landable/snz + name = "SNZ Speedboat" + desc = "SNZ-350 Speedboat. Multipurpose shuttle, used for personnel and light venchles delivery. This one definetly belongs to ICCG." + shuttle = "SNZ Speedboat" + fore_dir = WEST + color = "#ff7300" + vessel_mass = 1000 + vessel_size = SHIP_SIZE_TINY + + +/area/ship/snz + name = "\improper ICCGN PC SNZ-350" + icon_state = "shuttlered" + requires_power = 1 + dynamic_lighting = 1 + area_flags = AREA_FLAG_RAD_SHIELDED + req_access = list(access_away_iccgn) + +/obj/shuttle_landmark/snz/start + name = "SNZ Hangar" + landmark_tag = "nav_hangar_snz" + base_area = /area/ship/farfleet/command/snz_hangar + base_turf = /turf/simulated/floor/plating + movable_flags = MOVABLE_FLAG_EFFECTMOVE + +/obj/shuttle_landmark/snz/altdock + name = "Docking Port" + landmark_tag = "nav_hangar_snzalt" + +/obj/shuttle_landmark/snz/dock + name = "NSV Sierra Restricted Dock" + landmark_tag = "nav_snz_dock" + docking_controller = "rescue_shuttle_dock_airlock" diff --git a/mods/_maps/farfleet/code/farfleet_structures.dm b/mods/_maps/farfleet/code/farfleet_structures.dm new file mode 100644 index 0000000000000..0027ea0347349 --- /dev/null +++ b/mods/_maps/farfleet/code/farfleet_structures.dm @@ -0,0 +1,298 @@ + /////////////// + //GUNCABINETS// + /////////////// + +/obj/structure/closet/secure_closet/guncabinet/farfleet + name = "heavy armory cabinet" + req_access = list(access_away_iccgn_droptroops) + +/obj/structure/closet/secure_closet/guncabinet/farfleet/antitank/WillContain() + return list( + /obj/item/gun/magnetic/railgun = 1, + /obj/item/gun/energy/ionrifle/small/stupor = 2, + /obj/item/rcd_ammo = 5 + ) + +/obj/structure/closet/secure_closet/guncabinet/farfleet/ballistics/WillContain() + return list( + /obj/item/ammo_magazine/rifle = 15, + /obj/item/gun/projectile/automatic/assault_rifle/heltek = 3, + ) + +/obj/structure/closet/secure_closet/guncabinet/farfleet/energy/WillContain() + return list( + /obj/item/gun/energy/laser/bonfire = 3, + /obj/item/storage/box/fragshells = 3 + ) + +/obj/structure/closet/secure_closet/guncabinet/farfleet/utility/WillContain() + return list( + /obj/item/storage/box/teargas = 1, + /obj/item/storage/box/frags = 1, + /obj/item/storage/box/smokes = 2, + /obj/item/storage/box/anti_photons = 1, + /obj/item/plastique = 6 + ) + + /////////// + //CLOSETS// + /////////// + +/singleton/closet_appearance/secure_closet/farfleet + extra_decals = list( + "stripe_vertical_left_full" = COLOR_DARK_BLUE_GRAY, + "stripe_vertical_right_full" = COLOR_DARK_BLUE_GRAY, + "security" = COLOR_RED_LIGHT + ) + +/singleton/closet_appearance/secure_closet/farfleet/two + color = COLOR_DARK_BLUE_GRAY + decals = list( + "lower_side_vent" + ) + extra_decals = list( + "stripe_vertical_mid_full" = COLOR_RED_LIGHT , + "security" = COLOR_RED_LIGHT + ) + +/obj/structure/closet/secure_closet/farfleet + name = "pioneer locker" + closet_appearance = /singleton/closet_appearance/secure_closet/farfleet/two + req_access = list(access_away_iccgn_droptroops) + +/obj/structure/closet/secure_closet/farfleet/WillContain() + return list( + /obj/item/storage/belt/holster/security/tactical, + /obj/item/melee/telebaton, + /obj/item/clothing/glasses/hud/security/prot/aviators, + /obj/item/clothing/glasses/tacgoggles, + /obj/item/clothing/accessory/storage/black_vest, + /obj/item/clothing/gloves/thick/combat, + /obj/item/device/flashlight/maglight, + /obj/item/storage/firstaid/sleekstab, + /obj/item/clothing/mask/balaclava, + /obj/item/gun/energy/gun, + /obj/item/clothing/accessory/storage/holster/thigh, + /obj/item/clothing/accessory/armor_plate/merc, + /obj/item/clothing/head/helmet/tactical, + /obj/item/storage/backpack/satchel/leather/black + ) + + +/obj/structure/closet/secure_closet/farfleet/sergeant + name = "pioneer sergeant locker" + closet_appearance = /singleton/closet_appearance/secure_closet/farfleet/two + req_access = list(access_away_iccgn_sergeant) + +/obj/structure/closet/secure_closet/farfleet/sergeant/WillContain() + return list( + /obj/item/storage/belt/holster/security/tactical, + /obj/item/melee/telebaton, + /obj/item/clothing/glasses/hud/security/prot/aviators, + /obj/item/clothing/glasses/tacgoggles, + /obj/item/clothing/accessory/storage/black_vest, + /obj/item/clothing/gloves/thick/combat, + /obj/item/device/flashlight/maglight, + /obj/item/storage/firstaid/sleekstab, + /obj/item/device/megaphone, + /obj/item/clothing/mask/balaclava, + /obj/item/storage/fancy/smokable/cigar, + /obj/item/flame/lighter/zippo/gunmetal, + /obj/item/clothing/mask/gas/swat, + /obj/item/clothing/gloves/wristwatch, + /obj/item/gun/energy/gun, + /obj/item/clothing/accessory/storage/holster/thigh, + /obj/item/clothing/accessory/armor_plate/merc, + /obj/item/clothing/head/helmet/tactical, + /obj/item/storage/backpack/satchel/leather/black + ) + +/obj/structure/closet/secure_closet/farfleet/fleet + name = "crew cabinet" + closet_appearance = /singleton/closet_appearance/secure_closet/farfleet + req_access = list(access_away_iccgn) + +/obj/structure/closet/secure_closet/farfleet/fleet/WillContain() + return list( + /obj/item/storage/firstaid/sleekstab, + /obj/item/clothing/mask/gas, + /obj/item/clothing/accessory/storage/black_drop, + /obj/item/clothing/gloves/thick, + /obj/item/clothing/under/iccgn/utility, + /obj/item/storage/backpack/satchel/leather/navy + ) + +/obj/structure/closet/secure_closet/farfleet/fleet/engi + name = "corps technician cabinet" + closet_appearance = /singleton/closet_appearance/secure_closet/farfleet + req_access = list(access_away_iccgn) + +/obj/structure/closet/secure_closet/farfleet/fleet/engi/WillContain() + return list( + /obj/item/storage/firstaid/sleekstab, + /obj/item/clothing/mask/gas, + /obj/item/storage/belt/utility/full, + /obj/item/device/multitool, + /obj/item/clothing/glasses/welding/superior, + /obj/item/clothing/head/hardhat/orange, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/under/iccgn/utility, + /obj/item/storage/backpack/satchel/leather/navy + ) + +/obj/structure/closet/secure_closet/farfleet/fleet/med + name = "pioneer corpsman cabinet" + closet_appearance = /singleton/closet_appearance/secure_closet/farfleet + req_access = list(access_away_iccgn) + +/obj/structure/closet/secure_closet/farfleet/fleet/med/WillContain() + return list( + /obj/item/storage/firstaid/sleekstab, + /obj/item/clothing/mask/gas, + /obj/item/storage/belt/medical, + /obj/item/storage/firstaid/adv, + /obj/item/clothing/accessory/stethoscope, + /obj/item/clothing/glasses/hud/health, + /obj/item/clothing/suit/storage/toggle/labcoat, + /obj/item/clothing/gloves/latex/nitrile, + /obj/item/clothing/under/rank/medical/scrubs/black, + /obj/item/clothing/head/surgery/black, + /obj/item/clothing/suit/storage/hazardvest/white, + /obj/item/clothing/under/iccgn/utility, + /obj/item/storage/backpack/satchel/leather/navy + ) + +/obj/structure/closet/secure_closet/farfleet/fleet_cpt + name = "captain cabinet" + closet_appearance = /singleton/closet_appearance/secure_closet/farfleet + req_access = list(access_away_iccgn, access_away_iccgn_captain) + +/obj/structure/closet/secure_closet/farfleet/fleet_cpt/WillContain() + return list( + /obj/item/melee/telebaton, + /obj/item/storage/firstaid/sleekstab, + /obj/item/device/megaphone, + /obj/item/clothing/accessory/storage/black_drop, + /obj/item/clothing/mask/gas, + /obj/item/storage/fancy/smokable/cigar, + /obj/item/flame/lighter/zippo/gunmetal, + /obj/item/gun/projectile/pistol/magnum_pistol, + /obj/item/clothing/gloves/wristwatch/gold, + /obj/item/clothing/under/iccgn/service_command, + /obj/item/storage/backpack/satchel/leather/navy + ) + +/obj/structure/closet/secure_closet/farfleet/css + name = "CSS cabinet" + closet_appearance = /singleton/closet_appearance/secure_closet/farfleet + req_access = list(access_away_iccgn, access_away_iccgn_captain) + +/obj/structure/closet/secure_closet/farfleet/css/WillContain() + return list( + /obj/item/melee/telebaton, + /obj/item/storage/firstaid/sleekstab, + /obj/item/device/megaphone, + /obj/item/clothing/accessory/storage/holster/armpit, + /obj/item/clothing/mask/gas, + /obj/item/storage/fancy/smokable/cigar, + /obj/item/flame/lighter/zippo/gunmetal, + /obj/item/gun/projectile/pistol/bobcat, + /obj/item/clothing/gloves/wristwatch/gold, + /obj/item/clothing/under/iccgn/service, + /obj/item/ammo_magazine/pistol/nullglass = 2, + /obj/item/device/flash/advanced, + /obj/item/implanter/psi = 2, + /obj/item/storage/backpack/satchel/leather/black + ) + + //////// + //MISC// + //////// + +/obj/machinery/computer/ship/sensors/farfleet + construct_state = /singleton/machine_construction/default/panel_closed/computer/no_deconstruct + base_type = /obj/machinery/computer/ship/sensors + print_language = LANGUAGE_HUMAN_RUSSIAN + +/obj/machinery/door/airlock/terran + door_color = COLOR_DARK_BLUE_GRAY + +/obj/machinery/door/airlock/glass/terran + door_color = COLOR_DARK_BLUE_GRAY + stripe_color = COLOR_NT_RED + +/obj/machinery/door/airlock/multi_tile/terran + door_color = COLOR_DARK_BLUE_GRAY + stripe_color = COLOR_NT_RED + +/obj/machinery/door/airlock/multi_tile/glass/terran + door_color = COLOR_DARK_BLUE_GRAY + stripe_color = COLOR_NT_RED + +/* Voidsuit Storage Unit + * ==== + */ + +/obj/machinery/suit_storage_unit/pioneer + name = "pioneer corps voidsuit storage unit" + suit= /obj/item/clothing/suit/space/void/pioneer + helmet = /obj/item/clothing/head/helmet/space/void/pioneer + boots = /obj/item/clothing/shoes/magboots + tank = /obj/item/tank/oxygen + mask = /obj/item/clothing/mask/breath + req_access = list(access_away_iccgn) + islocked = 1 + +/obj/structure/sign/farfleetplaque + name = "\improper Pioneer Corps Plaque" + desc = "Пионерский Корпус, сформированный в 2306 году является авангардом Конфедерации. Пионерский корпус не входит в состав Флота ГКК, выполняет ряд миротворческих и гуманитарных функций. На этой табличке - первые страницы приказа о создании Пионерского Корпуса." + icon = 'mods/_maps/farfleet/icons/iccg_flag.dmi' + icon_state = "pioneer_plaque" + +/obj/floor_decal/iccglogo + icon = 'mods/_maps/farfleet/icons/GCC-floor.dmi' + icon_state = "center" + +/obj/floor_decal/iccglogo/center_left + icon_state = "center_left" + +/obj/floor_decal/iccglogo/center_right + icon_state = "center_right" + +/obj/floor_decal/iccglogo/top_center + icon_state = "top_center" + +/obj/floor_decal/iccglogo/top_left + icon_state = "top_left" + +/obj/floor_decal/iccglogo/top_right + icon_state = "top_right" + +/obj/floor_decal/iccglogo/bottom_center + icon_state = "bottom_center" + +/obj/floor_decal/iccglogo/bottom_left + icon_state = "bottom_left" + +/obj/floor_decal/iccglogo/bottom_right + icon_state = "bottom_right" + +/obj/floor_decal/iccglogo/corner + icon_state = "gcc_corner" + +/obj/structure/sign/iccg + name = "\improper ICCG Seal" + desc = "A sign which signifies who this vessel belongs to." + icon = 'mods/_maps/farfleet/icons/iccg_flag.dmi' + icon_state = "iccg_seal" + +/obj/structure/sign/double/iccgflag + name = "ICCG Flag" + desc = "The flag of the Independent Colonial Confederation of Gilgamesh, a symbol of Motherland to many proud peoples." + icon = 'mods/_maps/farfleet/icons/iccg_flag.dmi' + +/obj/structure/sign/double/iccgflag/left + icon_state = "GCCflag-left" + +/obj/structure/sign/double/iccgflag/right + icon_state = "GCCflag-right" diff --git a/mods/_maps/farfleet/code/farfleet_turbolift.dm b/mods/_maps/farfleet/code/farfleet_turbolift.dm new file mode 100644 index 0000000000000..1573b12b5b649 --- /dev/null +++ b/mods/_maps/farfleet/code/farfleet_turbolift.dm @@ -0,0 +1,25 @@ +/obj/turbolift_map_holder/farfleet + name = "Farfleet turbolift map placeholder" + icon = 'icons/obj/structures/turbolift_preview_2x2.dmi' + depth = 2 + lift_size_x = 3 + lift_size_y = 3 + + areas_to_use = list( + /area/turbolift/farfleet_first, + /area/turbolift/farfleet_second + ) + +/area/turbolift/farfleet_second + name = "lift (upper deck)" + lift_floor_label = "Deck 1" + lift_floor_name = "Hangar Deck" + lift_announce_str = "Arriving at Hangar Deck: Секция гаупвахты. Секция экипажа. Ангар шаттла. Оружейная десанта. Хранилище аномальных материалов." + base_turf = /turf/simulated/floor + +/area/turbolift/farfleet_first + name = "lift (lower deck)" + lift_floor_label = "Deck 2" + lift_floor_name = "Operating Deck" + lift_announce_str = "Arriving at Operating Deck: Мостик. Инженерный отсек. Атмосферный отсек. " + base_turf = /turf/simulated/floor diff --git a/mods/_maps/farfleet/icons/GCC-floor.dmi b/mods/_maps/farfleet/icons/GCC-floor.dmi new file mode 100644 index 0000000000000..0f9e485558366 Binary files /dev/null and b/mods/_maps/farfleet/icons/GCC-floor.dmi differ diff --git a/mods/_maps/farfleet/icons/iccg_flag.dmi b/mods/_maps/farfleet/icons/iccg_flag.dmi new file mode 100644 index 0000000000000..724142d7bc85c Binary files /dev/null and b/mods/_maps/farfleet/icons/iccg_flag.dmi differ diff --git a/mods/_maps/farfleet/icons/mob/lefthand.dmi b/mods/_maps/farfleet/icons/mob/lefthand.dmi new file mode 100644 index 0000000000000..4d23ea4ff1de9 Binary files /dev/null and b/mods/_maps/farfleet/icons/mob/lefthand.dmi differ diff --git a/mods/_maps/farfleet/icons/mob/onmob_head.dmi b/mods/_maps/farfleet/icons/mob/onmob_head.dmi new file mode 100644 index 0000000000000..04e9342e0d471 Binary files /dev/null and b/mods/_maps/farfleet/icons/mob/onmob_head.dmi differ diff --git a/mods/_maps/farfleet/icons/mob/onmob_suit.dmi b/mods/_maps/farfleet/icons/mob/onmob_suit.dmi new file mode 100644 index 0000000000000..8b292034c30f8 Binary files /dev/null and b/mods/_maps/farfleet/icons/mob/onmob_suit.dmi differ diff --git a/mods/_maps/farfleet/icons/mob/righthand.dmi b/mods/_maps/farfleet/icons/mob/righthand.dmi new file mode 100644 index 0000000000000..1e6881d01d681 Binary files /dev/null and b/mods/_maps/farfleet/icons/mob/righthand.dmi differ diff --git a/mods/_maps/farfleet/icons/obj/bonfire.dmi b/mods/_maps/farfleet/icons/obj/bonfire.dmi new file mode 100644 index 0000000000000..6dbbc65a4f84b Binary files /dev/null and b/mods/_maps/farfleet/icons/obj/bonfire.dmi differ diff --git a/mods/_maps/farfleet/icons/obj/iccg_rifle.dmi b/mods/_maps/farfleet/icons/obj/iccg_rifle.dmi new file mode 100644 index 0000000000000..8ace36e956205 Binary files /dev/null and b/mods/_maps/farfleet/icons/obj/iccg_rifle.dmi differ diff --git a/mods/_maps/farfleet/icons/obj/mbr_bullpup.dmi b/mods/_maps/farfleet/icons/obj/mbr_bullpup.dmi new file mode 100644 index 0000000000000..819e025474e5a Binary files /dev/null and b/mods/_maps/farfleet/icons/obj/mbr_bullpup.dmi differ diff --git a/mods/_maps/farfleet/icons/obj/mr735.dmi b/mods/_maps/farfleet/icons/obj/mr735.dmi new file mode 100644 index 0000000000000..c4f76d7a0ece7 Binary files /dev/null and b/mods/_maps/farfleet/icons/obj/mr735.dmi differ diff --git a/mods/_maps/farfleet/icons/obj/obj_head.dmi b/mods/_maps/farfleet/icons/obj/obj_head.dmi new file mode 100644 index 0000000000000..db0a1cee375b0 Binary files /dev/null and b/mods/_maps/farfleet/icons/obj/obj_head.dmi differ diff --git a/mods/_maps/farfleet/icons/obj/obj_suit.dmi b/mods/_maps/farfleet/icons/obj/obj_suit.dmi new file mode 100644 index 0000000000000..c20150a6346b9 Binary files /dev/null and b/mods/_maps/farfleet/icons/obj/obj_suit.dmi differ diff --git a/mods/_maps/farfleet/icons/obj/stupor.dmi b/mods/_maps/farfleet/icons/obj/stupor.dmi new file mode 100644 index 0000000000000..70443f6d2c9b7 Binary files /dev/null and b/mods/_maps/farfleet/icons/obj/stupor.dmi differ diff --git a/mods/_maps/farfleet/maps/farfleet-1.dmm b/mods/_maps/farfleet/maps/farfleet-1.dmm new file mode 100644 index 0000000000000..5629641dc83a6 --- /dev/null +++ b/mods/_maps/farfleet/maps/farfleet-1.dmm @@ -0,0 +1,22441 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/space, +/area/space) +"ab" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "farfleet_pd" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ad" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/engine) +"ae" = ( +/obj/structure/closet/hydrant{ + pixel_y = 28 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"af" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/fussion/control) +"ah" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"aj" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_ICCGN") + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/shield) +"ak" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/sign/warning/high_voltage{ + pixel_x = -32 + }, +/obj/machinery/computer/air_control{ + dir = 4; + frequency = 1442; + input_tag = "patrol_rust"; + name = "RUST Injector Control Console"; + output_tag = null + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/fussion/control) +"an" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"ap" = ( +/obj/machinery/fusion_fuel_injector/mapped{ + anchored = 0; + dir = 4; + id_tag = "fusion_injector_farfleet"; + req_access = list("ACCESS_ICCGN"); + initial_id_tag = "fusion_injector_farfleet" + }, +/turf/simulated/floor, +/area/ship/farfleet/engineering/fussion/control) +"aq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"as" = ( +/obj/item/stool/bar/padded, +/turf/simulated/floor/wood/maple, +/area/ship/farfleet/maintenance) +"at" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/omni/mixer{ + tag_north = 1; + tag_east = 2 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"au" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/adv, +/obj/item/stack/nanopaste, +/obj/item/stack/nanopaste, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"ax" = ( +/obj/structure/cable/green, +/obj/machinery/power/smes/buildable/preset/farfleet/engine_gyrotron, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"ay" = ( +/obj/structure/cable, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/decal/cleanable/dirt, +/obj/paint/dark_gunmetal, +/obj/wallframe_spawn/reinforced/hull, +/turf/simulated/floor, +/area/ship/farfleet/dock) +"aH" = ( +/obj/structure/flora/pottedplant/large, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"aI" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/extinguisher_cabinet{ + pixel_x = -24; + dir = 4 + }, +/obj/structure/closet/crate/secure/phoron, +/obj/item/stack/material/phoron/ten, +/obj/item/stack/material/phoron/ten, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/engineering/equipment) +"aK" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/engineering/equipment) +"aL" = ( +/obj/structure/bed/chair/rounded/blue{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/farfleet/crew/comms) +"aN" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/obj/paint/hull, +/turf/simulated/wall/ocp_wall, +/area/ship/farfleet/engineering/atmospherics) +"aO" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/power/port_gen/pacman, +/obj/structure/table/rack, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"aP" = ( +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/obj/machinery/door/blast/regular/open{ + id_tag = "pcbridge"; + name = "Emergensy Blast Resistant Shutters" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/bridge) +"aR" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/floordetail/edgedrain{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"aU" = ( +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/floor_decal/industrial/warning, +/obj/machinery/light/small/red{ + name = "light fixture"; + dir = 1 + }, +/obj/machinery/disperser/middle{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/command/launcher) +"aW" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"aX" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"aZ" = ( +/obj/floor_decal/industrial/warning/half, +/obj/machinery/shield_diffuser, +/obj/machinery/door/blast/regular{ + id_tag = "recon_main_airlock_blast"; + name = "Protective Blast Doors" + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + name = "Docking Port Airlock"; + id_tag = "recon_dock_airlock_outer" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor, +/area/ship/farfleet/dock) +"ba" = ( +/obj/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner"; + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"bb" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/hallway) +"bc" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 5 + }, +/obj/paint/hull, +/turf/simulated/wall/ocp_wall, +/area/ship/farfleet/engineering/atmospherics) +"be" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"bh" = ( +/obj/machinery/computer/ship/engines{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"bi" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"bn" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + icon_state = "map_injector"; + id = "h2_in"; + pixel_y = 1; + use_power = 1; + frequency = 1442 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/ship/farfleet/engineering/atmospherics) +"bv" = ( +/obj/paint/dark_gunmetal, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "fusion_observation_farfleet" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/paint_stripe/yellow, +/turf/simulated/floor, +/area/ship/farfleet/engineering/fussion/control) +"bw" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/wood/maple, +/area/ship/farfleet/maintenance) +"bx" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/blue, +/obj/machinery/atmospherics/portables_connector{ + dir = 4; + icon_state = "map_connector" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"by" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/hallway) +"bz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "tokamak_controller_farfleet"; + name = "Fusion Maintenance Access Controller"; + pixel_x = 26; + pixel_y = 0; + req_access = list("ACCESS_ICCGN"); + tag_exterior_door = "tokamak_exterior_farfleet"; + tag_interior_door = "tokamak_interior_farfleet"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/hallway) +"bA" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/machinery/power/apc/critical{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_ICCGN") + }, +/obj/structure/cable, +/obj/item/stack/material/glass/boron, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/storage) +"bC" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/white, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance) +"bE" = ( +/obj/structure/table/reinforced, +/obj/item/auto_cpr, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/half, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"bF" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/armor/laserproof, +/obj/item/clothing/head/helmet/ablative, +/obj/item/clothing/suit/armor/laserproof, +/obj/item/clothing/head/helmet/ablative, +/obj/machinery/recharger/wallcharger{ + dir = 1; + pixel_y = -22 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/emergency_armory) +"bG" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/white, +/turf/simulated/wall, +/area/ship/farfleet/medbay/surgery) +"bK" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"bL" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/launcher) +"bN" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + frequency = 1442; + icon_state = "map_injector"; + id = "patrol_rust"; + use_power = 1; + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"bO" = ( +/obj/machinery/power/fusion_core/mapped{ + initial_id_tag = "fusion_core_farfleet" + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"bQ" = ( +/obj/structure/sign/warning/compressed_gas, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"bR" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"bS" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 8 + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/engine) +"bX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8; + pixel_x = 0 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"bY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/engine) +"ca" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/floor_decal/corner/blue{ + dir = 8 + }, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/machinery/atmospherics/omni/mixer{ + active_power_usage = 7500; + tag_east_con = null; + tag_south = 1; + tag_south_con = 0.21; + use_power = 1; + tag_east = 2; + tag_north = 1; + tag_north_con = 0.79 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"cb" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"cc" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/engineering{ + name = "Engine Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/engineering/hallway) +"ce" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/storage) +"cf" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/storage) +"cg" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"ch" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/storage) +"ci" = ( +/obj/machinery/bodyscanner, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"cj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/helium{ + start_pressure = 14999 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"cl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"cm" = ( +/obj/structure/closet/toolcloset, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/farfleet/crew/comms) +"cn" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/brig/emergency_armory) +"cp" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"cq" = ( +/obj/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 6 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"cs" = ( +/obj/structure/closet/cabinet, +/obj/item/reagent_containers/food/drinks/bottle/premiumvodka, +/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/food/drinks/bottle/tomatojuice, +/obj/item/reagent_containers/food/drinks/bottle/small/beer, +/obj/item/reagent_containers/food/drinks/bottle/small/beer, +/turf/simulated/floor/wood/maple, +/area/ship/farfleet/maintenance) +"cw" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Emergency Armory" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/emergency_armory) +"cx" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"cB" = ( +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"cD" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"cE" = ( +/obj/structure/table/standard, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/hallway) +"cG" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/closet/bombcloset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/launcher) +"cI" = ( +/obj/floor_decal/corner/red{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"cJ" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"cK" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/tool{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/engineering/equipment) +"cL" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/inflatable_dispenser, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/storage) +"cM" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/storage) +"cN" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/storage) +"cP" = ( +/obj/floor_decal/industrial/warning{ + dir = 5; + icon_state = "warning" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "recon_dock_airlock_pump" + }, +/turf/simulated/floor, +/area/ship/farfleet/dock) +"cQ" = ( +/obj/machinery/fabricator/hacked{ + desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; + name = "Unlocked Autolathe" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"cR" = ( +/obj/machinery/conveyor{ + id_tag = "pc_disposal" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"cS" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"cU" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/farfleet/maintenance) +"cX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"db" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/hallway) +"de" = ( +/obj/structure/curtain/medical, +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/blue, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"dg" = ( +/obj/structure/bed/chair/comfy/blue{ + name = "captain chair" + }, +/obj/floor_decal/iccglogo/center_left, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"dh" = ( +/obj/structure/plasticflaps/airtight, +/obj/machinery/conveyor{ + dir = 4; + id_tag = "pc_disposal" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"di" = ( +/obj/floor_decal/industrial/loading{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"dk" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/equipment) +"dl" = ( +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/equipment) +"dm" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/window/boron_reinforced{ + dir = 8 + }, +/obj/structure/window/boron_reinforced{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"do" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/fussion/control) +"dp" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/blue, +/obj/item/storage/box/bodybags{ + pixel_y = 4 + }, +/obj/item/defibrillator/loaded, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"dr" = ( +/obj/machinery/vending/engivend{ + dir = 4; + req_access = list("ACCESS_ICCGN") + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/engineering/equipment) +"ds" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/equipment) +"dt" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/equipment) +"du" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/engineering{ + name = "Engineering Storage" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/engineering/storage) +"dv" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/storage) +"dw" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/storage) +"dx" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/storage) +"dz" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/structure/sign/iccg{ + pixel_y = 32 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"dA" = ( +/obj/structure/closet/crate/medical, +/obj/item/storage/firstaid/sleekstab, +/obj/item/storage/firstaid/sleekstab, +/obj/item/storage/firstaid/sleekstab, +/obj/item/storage/firstaid/sleekstab, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"dC" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"dE" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"dG" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/equipment) +"dH" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/electrical, +/obj/structure/table/rack, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/engineering/equipment) +"dI" = ( +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/equipment) +"dM" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube_map" + }, +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"dO" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"dQ" = ( +/obj/structure/table/rack, +/obj/item/storage/firstaid/regular{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/firstaid/regular, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"dR" = ( +/obj/machinery/computer/modular/preset/civilian, +/obj/floor_decal/iccglogo/corner, +/obj/structure/sign/double/iccgflag/left{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"dS" = ( +/obj/item/tank/anesthetic, +/obj/item/clothing/mask/breath/anesthetic, +/obj/structure/closet/crate/medical, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"dT" = ( +/obj/paint/hull, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/wall/ocp_wall, +/area/ship/farfleet/engineering/fussion/control) +"dU" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"dW" = ( +/obj/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner"; + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner"; + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"dY" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hallway/lower) +"eb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"ec" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/sign/double/iccgflag/right{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"eg" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"eh" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/conveyor_switch/oneway{ + id_tag = "pc_disposal" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"ei" = ( +/obj/machinery/light{ + icon_state = "tube1" + }, +/obj/floor_decal/corner/black{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"ej" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/equipment) +"ek" = ( +/obj/floor_decal/industrial/warning/half, +/obj/machinery/door/airlock/external/bolted/cycling{ + name = "Docking Port Airlock"; + id_tag = "recon_dock_airlock_inner" + }, +/turf/simulated/floor, +/area/ship/farfleet/dock) +"el" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/item/stack/material/glass/fifty{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/structure/table/rack, +/obj/item/stack/material/aluminium/fifty, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/storage) +"em" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"ep" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hallway/lower) +"eq" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"eu" = ( +/obj/wallframe_spawn/reinforced, +/obj/floor_decal/iccglogo/corner{ + dir = 1 + }, +/obj/paint/dark_gunmetal, +/obj/machinery/door/blast/regular/open{ + id_tag = "pcbridge"; + name = "Emergensy Blast Resistant Shutters" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/bridge) +"ev" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_east = 5; + tag_north = 2; + tag_south = 8; + tag_west = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"ew" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/glass/terran{ + name = "Docking Control" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"ey" = ( +/obj/machinery/door/airlock/multi_tile/terran{ + name = "Emergensy Storage" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/command/equipment) +"eB" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/paint/dark_gunmetal, +/obj/paint_stripe/brown, +/turf/simulated/floor, +/area/ship/farfleet/engineering/atmospherics) +"eC" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/shield) +"eL" = ( +/obj/machinery/mech_recharger, +/mob/living/exosuit/premade/powerloader, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"eN" = ( +/obj/floor_decal/iccglogo/top_center, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"eP" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/air, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"eR" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/dock) +"eT" = ( +/obj/machinery/atmospherics/binary/pump/high_power/on{ + target_pressure = 40 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"eV" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/bridge) +"fb" = ( +/obj/floor_decal/industrial/outline/red, +/obj/structure/closet/secure_closet/farfleet/fleet/med, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/hallway) +"fc" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/equipment) +"fd" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/terran, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/engineering/atmos_equipment) +"fi" = ( +/obj/structure/table/standard, +/obj/item/device/scanner/spectrometer/adv, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"fj" = ( +/obj/structure/table/standard, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/glass/fifty{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/plastic/fifty, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"fn" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmos_equipment) +"fo" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"fq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"fs" = ( +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "farfleet_fusion" + }, +/obj/structure/grille, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/atmospherics) +"ft" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/open{ + id_tag = "pcbridge"; + name = "Emergensy Blast Resistant Shutters" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/command/bridge) +"fw" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/ship_munition/disperser_charge/explosive/military, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"fx" = ( +/obj/machinery/shieldgen, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"fy" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/fussion/control) +"fA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + icon_state = "intact"; + dir = 4 + }, +/obj/paint/silver, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/engine) +"fB" = ( +/obj/machinery/radio_beacon, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"fD" = ( +/obj/machinery/chemical_dispenser/full, +/obj/structure/window/reinforced, +/obj/floor_decal/corner/paleblue{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"fE" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/flora/pottedplant/bamboo, +/obj/structure/sign/warning/smoking{ + pixel_x = 29 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"fG" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/brown, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"fH" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"fN" = ( +/obj/paint/ocean, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"fP" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 6 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"fS" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"fU" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/wall, +/area/ship/farfleet/engineering/hallway) +"fW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/decal/cleanable/dirt, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"gb" = ( +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"gc" = ( +/obj/item/stool/padded, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/hallway) +"gd" = ( +/obj/machinery/computer/telecomms/monitor{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/farfleet/crew/comms) +"gg" = ( +/obj/machinery/optable, +/obj/machinery/button/windowtint{ + dir = 8; + pixel_y = -1; + pixel_x = 24; + id = "pcsurgery" + }, +/obj/machinery/button/holosign{ + pixel_y = 9; + pixel_x = 22; + id_tag = "pcsurgerysign" + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/half{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"gh" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/farfleet/dock) +"gk" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/farfleet/crew/hallway) +"gl" = ( +/obj/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"gp" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"gt" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/dock) +"gw" = ( +/obj/floor_decal/industrial/outline/orange, +/obj/structure/ship_munition/disperser_charge/fire/military, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/command/launcher) +"gy" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"gD" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/critical{ + dir = 1; + name = "north bump"; + pixel_y = 23; + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/shield) +"gE" = ( +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/pointdefense{ + initial_id_tag = "farfleet_pd" + }, +/obj/structure/sign/iccg{ + pixel_x = 32 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"gG" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/wall, +/area/ship/farfleet/engineering/fussion/control) +"gI" = ( +/obj/machinery/conveyor{ + dir = 10; + id_tag = "pc_disposal" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"gJ" = ( +/obj/structure/table/rack, +/obj/item/stack/material/ocp/fifty, +/obj/item/stack/material/plasteel/fifty, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/command/equipment) +"gM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"gO" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 5 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"gR" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"gS" = ( +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/eva) +"gV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"gX" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/launcher) +"hc" = ( +/obj/machinery/door/blast/regular/open{ + dir = 4; + icon_state = "pdoor0"; + id_tag = "prototype_chamber_blast_farfleet" + }, +/obj/wallframe_spawn/reinforced_phoron, +/obj/paint/hull, +/turf/simulated/floor, +/area/ship/farfleet/engineering/fussion/control) +"he" = ( +/obj/floor_decal/corner/red{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"hf" = ( +/obj/structure/closet/radiation, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/sign/warning/radioactive{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/hallway) +"hg" = ( +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "pcsurgery" + }, +/obj/paint_stripe/white, +/turf/simulated/floor/plating, +/area/ship/farfleet/medbay/surgery) +"hj" = ( +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "prototype_exhaust_farfleet" + }, +/obj/machinery/shield_diffuser, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"hk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/structure/sign/bluecross_2{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"hl" = ( +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/obj/machinery/power/apc/critical{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1"; + pixel_y = 0 + }, +/obj/structure/cable, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/hallway) +"hn" = ( +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/obj/machinery/suit_storage_unit/pioneer, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/eva) +"hp" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"hu" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/command{ + name = "Communication Relay" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/comms) +"hx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"hB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/equipment) +"hC" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"hD" = ( +/obj/structure/closet/secure_closet/guncabinet{ + req_access = list("ACCESS_ICCGN") + }, +/obj/item/gun/energy/ionrifle/small/stupor, +/obj/item/gun/energy/ionrifle/small/stupor, +/obj/item/gun/energy/laser/bonfire, +/obj/item/gun/energy/laser/bonfire, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/emergency_armory) +"hH" = ( +/turf/simulated/floor/wood/maple, +/area/ship/farfleet/maintenance) +"hJ" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"hK" = ( +/obj/paint/hull, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/wall/ocp_wall, +/area/ship/farfleet/engineering/atmospherics) +"hP" = ( +/obj/overmap/visitable/ship/farfleet, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"hS" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/shield) +"hU" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "farfleet_pd" + }, +/obj/structure/cable, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"hW" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 16; + d2 = 0; + icon_state = "16-0" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/window/westleft{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"hY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"ia" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"ic" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/command/eva) +"ii" = ( +/obj/structure/table/standard, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/farfleet/crew/comms) +"ik" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"il" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/medbay/storage) +"iz" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/engine) +"iG" = ( +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/eva) +"iK" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"iM" = ( +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "Emergency NanoMed"; + pixel_y = -29 + }, +/obj/structure/table/reinforced, +/obj/item/clothing/suit/surgicalapron, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/reagent_containers/spray/sterilizine{ + pixel_x = 2; + pixel_y = 4 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 10 + }, +/obj/floor_decal/corner/darkblue{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"iN" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/terran{ + name = "Officer's Locker" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/hallway) +"iO" = ( +/obj/machinery/door/airlock/multi_tile/glass/medical{ + name = "Infirmary" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/farfleet/medbay) +"iQ" = ( +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/pointdefense{ + initial_id_tag = "farfleet_pd" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"iR" = ( +/obj/structure/flora/pottedplant/stoutbush, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"iU" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"iV" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/shield) +"jj" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/hallway) +"jn" = ( +/obj/machinery/door/blast/regular{ + dir = 8; + id_tag = "prototype_exhaust_farfleet" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"jq" = ( +/obj/machinery/power/emitter/gyrotron/anchored{ + dir = 4; + initial_id_tag = "fusion_gyrotron_farfleet"; + req_access = list("ACCESS_ICCGN"); + id_tag = "fusion_gyrotron_farfleet" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced, +/area/ship/farfleet/engineering/fussion/control) +"jv" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"jx" = ( +/obj/machinery/fusion_fuel_injector/mapped{ + dir = 4; + initial_id_tag = "fusion_injector_farfleet"; + id_tag = "fusion_injector_farfleet"; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/reinforced, +/area/ship/farfleet/engineering/fussion/control) +"jy" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"jz" = ( +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"jD" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/equipment) +"jE" = ( +/obj/machinery/body_scanconsole{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"jH" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/smes/buildable/preset/farfleet/engine_main, +/turf/simulated/floor, +/area/ship/farfleet/engineering/fussion/control) +"jO" = ( +/obj/machinery/sleeper{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"jR" = ( +/obj/machinery/computer/fusion/core_control{ + dir = 8; + initial_id_tag = "fusion_core_farfleet" + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/fussion/control) +"jS" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"ka" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/critical{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/fussion/control) +"kc" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/storage) +"kh" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/floor_decal/corner/black{ + icon_state = "corner_white"; + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"ki" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"kj" = ( +/obj/shuttle_landmark/nav_farfleet/nav2, +/turf/space, +/area/space) +"ko" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"kt" = ( +/obj/machinery/computer/ship/navigation, +/obj/structure/sign/double/iccgflag/right{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"ku" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/meter, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/paint/blue, +/turf/simulated/floor, +/area/ship/farfleet/engineering/atmospherics) +"ky" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/brig/emergency_armory) +"kD" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"kE" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 4; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "o2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/machinery/air_sensor{ + id_tag = "o2_sensor" + }, +/turf/simulated/floor/reinforced/nitrogen, +/area/ship/farfleet/engineering/atmospherics) +"kF" = ( +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"kH" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"kK" = ( +/obj/machinery/uniform_vendor, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/hallway) +"kO" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_ICCGN") + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"kP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"kQ" = ( +/obj/wallframe_spawn/reinforced_phoron/hull, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id_tag = "farfleet_engineview"; + name = "blast door"; + opacity = 0 + }, +/obj/machinery/door/firedoor, +/obj/paint/hull, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/atmospherics) +"kR" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/farfleet/medbay) +"kT" = ( +/obj/machinery/computer/ship/disperser/military{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/window/boron_reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"kU" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"kX" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"kZ" = ( +/obj/structure/table/rack, +/obj/item/device/flashlight/upgraded, +/obj/item/device/flashlight/upgraded, +/obj/item/device/flashlight/upgraded, +/obj/item/device/flashlight/upgraded, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/hallway) +"lb" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"lf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"lg" = ( +/obj/structure/sign/poster/nyc/doctor_griefsey{ + pixel_y = 32 + }, +/turf/simulated/floor/wood/maple, +/area/ship/farfleet/maintenance) +"lh" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"li" = ( +/obj/structure/table/rack, +/obj/item/storage/firstaid/toxin{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/firstaid/adv, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24; + pixel_y = 0 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"lj" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/engineering{ + name = "Engine Control Room" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/engineering/fussion/control) +"lm" = ( +/obj/machinery/power/apc/super/critical{ + dir = 4; + name = "east bump"; + pixel_x = 25; + req_access = list("ACCESS_ICCGN") + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/dock) +"lr" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 10; + icon_state = "intact" + }, +/obj/machinery/igniter{ + id_tag = "farfleet_igniter" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/atmospherics) +"lu" = ( +/obj/structure/bed/chair/comfy/blue, +/obj/floor_decal/iccglogo/top_right, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"lv" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/launcher) +"lw" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"lx" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/holosign/surgery{ + dir = 8; + id_tag = "pcsurgerysign" + }, +/obj/machinery/door/airlock/medical{ + name = "Surgery" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/farfleet/medbay/surgery) +"lC" = ( +/obj/structure/table/standard, +/obj/item/storage/box/beakers, +/obj/item/clothing/glasses/science, +/obj/item/clothing/gloves/latex, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/three_quarters, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"lD" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/dock) +"lE" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/wall, +/area/ship/farfleet/engineering/shield) +"lI" = ( +/obj/machinery/atmospherics/valve{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"lM" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/maintenance/engine) +"lN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"lO" = ( +/obj/machinery/light, +/obj/machinery/pipedispenser, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"lR" = ( +/obj/floor_decal/corner/red{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"lU" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/photocopier/faxmachine{ + department = "Pioneer Corps Craft" + }, +/obj/structure/sign/iccg{ + pixel_y = 32 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"ma" = ( +/turf/simulated/floor/plating, +/area/ship/farfleet/crew/hallway/lower) +"mb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/equipment) +"me" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/structure/window/reinforced, +/obj/item/clothing/suit/space/emergency{ + pixel_x = 6 + }, +/obj/item/clothing/suit/space/emergency, +/obj/item/clothing/suit/space/emergency{ + pixel_x = -6 + }, +/obj/machinery/door/window{ + dir = 8 + }, +/obj/item/clothing/head/helmet/space/emergency{ + pixel_x = 7 + }, +/obj/item/clothing/head/helmet/space/emergency, +/obj/item/clothing/head/helmet/space/emergency{ + pixel_x = -7 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"mf" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"mg" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/paint/red, +/turf/simulated/floor, +/area/ship/farfleet/engineering/atmospherics) +"mj" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hallway/lower) +"mk" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/eva) +"ml" = ( +/obj/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"mm" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/hallway) +"mn" = ( +/obj/structure/table/rack, +/obj/machinery/light, +/obj/machinery/recharger/wallcharger{ + dir = 1; + pixel_y = -22 + }, +/obj/item/gun/projectile/pistol/bobcat, +/obj/item/gun/projectile/pistol/bobcat, +/obj/item/gun/projectile/pistol/bobcat, +/obj/item/gun/projectile/pistol/bobcat, +/obj/item/ammo_magazine/pistol, +/obj/item/ammo_magazine/pistol, +/obj/item/ammo_magazine/pistol, +/obj/item/ammo_magazine/pistol, +/obj/item/ammo_magazine/pistol, +/obj/item/ammo_magazine/pistol, +/obj/item/ammo_magazine/pistol, +/obj/item/ammo_magazine/pistol, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/emergency_armory) +"mo" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/launcher) +"mq" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 8 + }, +/turf/simulated/floor/airless, +/area/ship/farfleet/maintenance/engine) +"ms" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/hallway) +"mt" = ( +/obj/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner"; + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner"; + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"mx" = ( +/obj/machinery/bodyscanner{ + dir = 4 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/half{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"mA" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/warning/half{ + icon_state = "warninghalf"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance{ + id_tag = "tokamak_interior_farfleet"; + frequency = 1379 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/hallway) +"mD" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"mE" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint/dark_gunmetal, +/obj/paint_stripe/white, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/medbay/storage) +"mF" = ( +/obj/paint/ocean, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"mG" = ( +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor, +/area/ship/farfleet/engineering/atmos_equipment) +"mO" = ( +/obj/machinery/power/shield_generator, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/shield) +"mP" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"mQ" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 4; + icon_state = "map_injector"; + id = "n2_in"; + use_power = 1; + frequency = 1442 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/ship/farfleet/engineering/atmospherics) +"mT" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"mU" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/closet/crate/trashcart, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"ne" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/white, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/medbay/storage) +"ng" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/dock) +"nl" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"nn" = ( +/obj/machinery/door/airlock/multi_tile/engineering{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/maintenance/engine) +"no" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/power/apc/critical{ + name = "south bump"; + pixel_y = -24; + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -32; + pixel_y = -21 + }, +/obj/structure/cable, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/farfleet/crew/comms) +"nq" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/brig/emergency_armory) +"nr" = ( +/obj/machinery/shipsensors, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/command/bridge) +"nt" = ( +/obj/machinery/hologram/holopad/longrange, +/obj/floor_decal/iccglogo, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"nu" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"nv" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"nw" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/door/window/southright{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"nA" = ( +/obj/structure/closet/secure_closet/guncabinet{ + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/gun/projectile/automatic/merc_smg, +/obj/item/gun/projectile/automatic/merc_smg, +/obj/item/gun/projectile/automatic/merc_smg, +/obj/item/gun/projectile/automatic/merc_smg, +/obj/item/ammo_magazine/smg, +/obj/item/ammo_magazine/smg, +/obj/item/ammo_magazine/smg, +/obj/item/ammo_magazine/smg, +/obj/item/ammo_magazine/smg, +/obj/item/ammo_magazine/smg, +/obj/item/ammo_magazine/smg, +/obj/item/ammo_magazine/smg, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/emergency_armory) +"nC" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"nE" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"nH" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/button/alternate/door/bolts{ + pixel_y = 28; + name = "Impulse Cannon Access"; + id_tag = "pcannon" + }, +/obj/machinery/button/blast_door{ + pixel_y = 28; + pixel_x = -10; + id_tag = "pcbridge"; + name = "Last Stand Shutters Control"; + desc = "Bridge blast door control panel. If you press this not at the drill, there is a bad news for you. Die as a man." + }, +/obj/machinery/button/blast_door{ + pixel_y = 28; + pixel_x = 10; + name = "Sensors Protection"; + id_tag = "pcsensors" + }, +/obj/item/paper/farfleet/engines{ + language = "Pan-Slavic" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"nJ" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/multi_tile/maintenance, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"nK" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/obj/machinery/power/apc/super/critical{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"nM" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"nN" = ( +/obj/machinery/computer/operating{ + dir = 1 + }, +/obj/machinery/light, +/obj/floor_decal/floordetail/edgedrain{ + dir = 6 + }, +/obj/floor_decal/corner/darkblue{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"nO" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 1; + icon_state = "map_injector"; + id = "co2_in"; + pixel_y = 1; + use_power = 1; + frequency = 1442 + }, +/turf/simulated/floor/reinforced/hydrogen, +/area/ship/farfleet/engineering/atmospherics) +"nS" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/sign/warning/secure_area{ + pixel_y = -32; + dir = 1 + }, +/obj/structure/table/standard, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"nT" = ( +/obj/floor_decal/iccglogo/bottom_left, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"nW" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/hallway/lower) +"nY" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/button/blast_door{ + dir = 4; + id_tag = "iccg_space"; + name = "Obstruction Field Disperser Space Shield"; + pixel_x = -24; + pixel_y = -5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"nZ" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"oa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/maple, +/area/ship/farfleet/maintenance) +"of" = ( +/obj/paint/hull, +/turf/simulated/wall/ocp_wall, +/area/ship/farfleet/engineering/fussion/control) +"oh" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 10; + icon_state = "intact" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/atmospherics) +"oi" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/window/boron_reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"on" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/surgery, +/obj/item/reagent_containers/syringe{ + pixel_y = -2 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/floordetail/edgedrain, +/obj/floor_decal/corner/darkblue/half{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"oo" = ( +/obj/floor_decal/iccglogo/bottom_right, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"op" = ( +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"oq" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/bridge) +"ow" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"ox" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 9 + }, +/obj/item/paper_bin, +/obj/item/pen/blue, +/obj/item/pen/red{ + pixel_y = 3 + }, +/obj/item/pen{ + pixel_y = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"oz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"oA" = ( +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"oI" = ( +/obj/structure/table/rack, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/item/stack/material/glass/fifty, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/command/equipment) +"oJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"oM" = ( +/obj/floor_decal/industrial/warning/half, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/external/bolted/cycling{ + name = "Docking Port Airlock"; + id_tag = "recon_dock_airlock_inner" + }, +/turf/simulated/floor, +/area/ship/farfleet/dock) +"oQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"oS" = ( +/obj/structure/table/standard, +/obj/machinery/recharger, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"oW" = ( +/obj/structure/curtain/medical, +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/blue, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"pb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/engineering{ + name = "Engineering Bay" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/engineering/equipment) +"pc" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"pf" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"pl" = ( +/obj/machinery/computer/telecomms/server{ + dir = 4; + network = "pioneertcommsat"; + req_access = list("ACCESS_ICCGN") + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/farfleet/crew/comms) +"pn" = ( +/obj/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 10 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"pu" = ( +/obj/turbolift_map_holder/farfleet{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/crew/hallway/lower) +"pv" = ( +/obj/structure/table/rack, +/obj/item/airlock_brace, +/obj/item/airlock_brace, +/obj/item/airlock_brace, +/obj/item/airlock_brace, +/obj/item/material/twohanded/jack/titanium, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/emergency_armory) +"pw" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/telecomms/allinone/iccgn, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/farfleet/crew/comms) +"pH" = ( +/obj/machinery/organ_printer/robot/mapped, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"pJ" = ( +/obj/machinery/portable_atmospherics/powered/pump, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"pL" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/hallway) +"pO" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"pP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"pR" = ( +/obj/structure/table/rack, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"pS" = ( +/obj/machinery/smartfridge/secure/medbay{ + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/medbay) +"pV" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"qd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/eva) +"qg" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/glass/terran{ + name = "Bridge"; + dir = 8 + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "pcbridge"; + name = "Emergensy Blast Resistant Shutters"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/command/bridge) +"qh" = ( +/obj/structure/closet/walllocker{ + pixel_x = -32 + }, +/obj/item/melee/telebaton, +/obj/item/melee/telebaton, +/obj/item/melee/telebaton, +/obj/item/melee/telebaton, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"qr" = ( +/obj/structure/table/steel, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/maglight, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/emergency_armory) +"qD" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/hallway) +"qF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"qG" = ( +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"qM" = ( +/obj/structure/table/rack, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/machinery/recharger/wallcharger{ + dir = 1; + pixel_y = -22 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/emergency_armory) +"qN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5; + icon_state = "intact" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"qQ" = ( +/obj/machinery/computer/ship/navigation{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"qS" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"rb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"rc" = ( +/obj/machinery/chem_master, +/obj/structure/window/reinforced, +/obj/floor_decal/corner/paleblue{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"rg" = ( +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/machinery/space_heater, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/engine) +"rn" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/window/brigdoor/northright{ + dir = 2 + }, +/obj/structure/wall_frame/hull, +/obj/structure/table/wallf/steel, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/emergency_armory) +"ru" = ( +/obj/floor_decal/industrial/outline/red, +/obj/structure/closet/secure_closet/farfleet/fleet_cpt, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/hallway) +"rx" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics Maintenance"; + req_access = list("ACCESS_ICCGN"); + secured_wires = 1 + }, +/obj/floor_decal/industrial/warning/half, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"ry" = ( +/obj/machinery/conveyor{ + dir = 4; + id_tag = "pc_disposal" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"rF" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/item/stack/material/plasteel/fifty{ + pixel_x = -3; + pixel_y = 4 + }, +/obj/item/stack/material/ocp/fifty, +/obj/item/stack/material/wood/maple/twentyfive, +/obj/item/stack/material/wood/maple/twentyfive, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/storage) +"rM" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"rQ" = ( +/obj/structure/dispenser/oxygen, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/eva) +"rR" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/launcher) +"rU" = ( +/obj/paint/red, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"sa" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/glass/beaker/cryoxadone, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"sb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"se" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/farfleet/medbay/storage) +"sg" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/farfleet/crew/comms) +"si" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/engine) +"sr" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 5; + icon_state = "intact" + }, +/obj/machinery/atmospherics/pipe/vent/high_volume{ + icon_state = "intact" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/atmospherics) +"sv" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/waste) +"sw" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/ship/farfleet/dock) +"sA" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Disposal System Access" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"sC" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/atmospherics) +"sH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"sI" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/critical{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"sN" = ( +/obj/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"sP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"sQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/engine) +"sR" = ( +/obj/floor_decal/industrial/outline/orange, +/obj/structure/ship_munition/disperser_charge/fire/military, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/command/launcher) +"sS" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/farfleet/crew/comms) +"sW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"sY" = ( +/obj/paint/ocean, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/dock) +"te" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/launcher) +"tf" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/hallway) +"th" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/hallway) +"to" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/hallway) +"tp" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/structure/bed/chair, +/obj/structure/window/boron_reinforced{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"tr" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/hallway) +"ts" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"tt" = ( +/obj/structure/bed/chair/comfy/blue, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"tF" = ( +/obj/structure/table/woodentable/mahogany, +/turf/simulated/floor/wood/maple, +/area/ship/farfleet/maintenance) +"tN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"tV" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"tZ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/paint/dark_gunmetal, +/obj/paint_stripe/nt_red, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/launcher) +"ud" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hallway/lower) +"ui" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/internals/fuel, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"uk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"un" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/hallway) +"uG" = ( +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/ship/farfleet/engineering/atmospherics) +"uH" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/ship_munition/disperser_charge/emp/military, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"uI" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"uJ" = ( +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/machinery/power/port_gen/pacman, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/engine) +"uL" = ( +/obj/structure/table/steel_reinforced, +/obj/item/folder/red, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"uM" = ( +/obj/machinery/light/small{ + dir = 4; + pixel_x = 6; + pixel_y = 18 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"uN" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/storage) +"uQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"uY" = ( +/obj/machinery/button/ignition{ + id_tag = "farfleet_igniter"; + pixel_y = 25 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"va" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + icon_state = "intact"; + dir = 4 + }, +/obj/paint/silver, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/engine) +"vg" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"vp" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10; + pixel_y = 0 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"vq" = ( +/obj/floor_decal/industrial/outline/red, +/obj/structure/ship_munition/disperser_charge/explosive/military, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"vx" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"vz" = ( +/obj/paint/blue, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"vF" = ( +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"vG" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/hallway) +"vK" = ( +/obj/floor_decal/corner/paleblue{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"vV" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/structure/sign/bluecross_2{ + pixel_y = -33 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"vW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"wg" = ( +/obj/structure/iv_stand, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_ICCGN") + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"wl" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"wo" = ( +/obj/structure/flora/pottedplant/stoutbush, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"wu" = ( +/obj/machinery/fusion_fuel_injector/mapped{ + anchored = 0; + dir = 4; + id_tag = "fusion_injector_farfleet"; + req_access = list("ACCESS_ICCGN"); + initial_id_tag = "fusion_injector_farfleet" + }, +/turf/simulated/floor/reinforced, +/area/ship/farfleet/engineering/fussion/control) +"wx" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/paint/blue, +/turf/simulated/floor, +/area/ship/farfleet/engineering/atmospherics) +"wA" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen/engine_setup, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"wB" = ( +/obj/machinery/computer/fusion/gyrotron{ + dir = 8; + id_tag = "fusion_gyrotron_farfleet"; + initial_id_tag = "fusion_gyrotron_farfleet" + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/fussion/control) +"wE" = ( +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/obj/paint_stripe/white, +/turf/simulated/floor/plating, +/area/ship/farfleet/medbay) +"wI" = ( +/obj/floor_decal/corner/paleblue{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"xc" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"xs" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"xu" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/engine) +"xw" = ( +/obj/structure/roller_bed/nanoblood, +/obj/floor_decal/corner/paleblue{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"xB" = ( +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"xC" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"xH" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"xJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/wood/maple, +/area/ship/farfleet/maintenance) +"xL" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"xM" = ( +/obj/machinery/power/apc/critical{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/structure/cable, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"xO" = ( +/obj/machinery/fusion_fuel_compressor, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"xR" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/decal/cleanable/dirt, +/obj/paint/dark_gunmetal, +/obj/wallframe_spawn/reinforced/hull, +/turf/simulated/floor, +/area/ship/farfleet/dock) +"xT" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "bsapc" + }, +/obj/structure/plasticflaps/airtight, +/obj/machinery/door/blast/regular/open{ + density = 0; + dir = 4; + id_tag = "iccg_space"; + name = "Impulse Cannon Interior Hatch"; + opacity = 0 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"xU" = ( +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"xW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"yb" = ( +/obj/machinery/door/airlock/multi_tile/terran{ + name = "Bridge Hallway" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/open{ + id_tag = "pcbridge"; + name = "Emergensy Blast Resistant Shutters" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/command/bridge) +"yc" = ( +/obj/floor_decal/industrial/warning{ + dir = 9; + icon_state = "warning" + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/ship/farfleet/dock) +"ym" = ( +/obj/machinery/light/small, +/turf/simulated/floor/wood/maple, +/area/ship/farfleet/maintenance) +"yF" = ( +/obj/floor_decal/industrial/outline/red, +/obj/structure/closet/secure_closet/farfleet/fleet/engi, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/hallway) +"yG" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/fussion/control) +"yW" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"zh" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "farfleet_pd" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"zi" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + icon_state = "map_universal"; + dir = 2 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"zj" = ( +/obj/machinery/conveyor{ + id_tag = "pc_disposal" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"zl" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"zp" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"zr" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/waste) +"zt" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/eva) +"zw" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"zz" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/ship_munition/disperser_charge/emp/military, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"zE" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24; + pixel_y = 0 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/sign/double/iccgflag/left{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"zJ" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"zM" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance) +"zO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/eva) +"zT" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 9 + }, +/obj/floor_decal/corner/darkblue/half{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"zZ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/floor_decal/corner/darkblue/half{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Aa" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"Ad" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Aj" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/medbay/storage) +"Ak" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"Al" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/launcher) +"Ar" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 23 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"Az" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"AD" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance) +"AF" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"AY" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/waste) +"AZ" = ( +/obj/machinery/power/apc/critical{ + dir = 1; + name = "north bump"; + pixel_y = 23; + req_access = list("ACCESS_ICCGN") + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/engine) +"Bd" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/obj/paint/hull, +/turf/simulated/wall/ocp_wall, +/area/ship/farfleet/engineering/atmospherics) +"Bf" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Bu" = ( +/obj/machinery/pointdefense_control{ + initial_id_tag = "farfleet_pd" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Bz" = ( +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/aluminium/fifty, +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/command/equipment) +"BH" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"BN" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/equipment) +"BS" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"BT" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"BV" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/farfleet/engineering/atmos_equipment) +"Cd" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/sign/warning/vacuum{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"Cg" = ( +/obj/machinery/ion_engine{ + dir = 8 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/airless, +/area/ship/farfleet/maintenance/engine) +"Cl" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "h2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/machinery/air_sensor{ + id_tag = "tox_sensor" + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/ship/farfleet/engineering/atmospherics) +"Cm" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/closet/crate/radiation, +/obj/item/stack/material/deuterium/fifty, +/obj/item/stack/material/deuterium/fifty, +/obj/item/stack/material/deuterium/fifty, +/obj/item/stack/material/tritium/fifty, +/obj/item/stack/material/tritium/fifty, +/obj/item/stack/material/tritium/fifty, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"Cp" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/bridge) +"Cq" = ( +/obj/machinery/atmospherics/unary/freezer{ + icon_state = "freezer"; + dir = 4 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"Cx" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"CD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"CH" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"CJ" = ( +/obj/structure/closet/crate/internals, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/tank/oxygen_emergency_extended, +/obj/item/tank/oxygen_emergency_extended, +/obj/item/tank/oxygen_emergency_extended, +/obj/item/tank/oxygen_emergency_extended, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"CK" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/waste) +"CU" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"CX" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Dc" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"Dj" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 9; + icon_state = "intact" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/atmospherics) +"Dl" = ( +/obj/structure/reagent_dispensers/water_cooler{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Do" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/launcher) +"Du" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"Dv" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/equipment) +"Dx" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/paint/dark_gunmetal, +/obj/paint_stripe/brown, +/turf/simulated/floor, +/area/ship/farfleet/engineering/atmospherics) +"Dz" = ( +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"DJ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/eva) +"DO" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/launcher) +"DS" = ( +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"DX" = ( +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"Ei" = ( +/obj/machinery/atmospherics/unary/cryo_cell{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"En" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Eq" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Es" = ( +/obj/structure/flora/pottedplant/tropical, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"Ev" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"Ey" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/waste) +"EC" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/dock) +"EE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"EJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + display_name = "Port Recon Dock"; + id_tag = "recon_dock_airlock"; + pixel_x = 1; + pixel_y = -5; + req_access = list("ACCESS_ICCGN"); + tag_chamber_sensor = "recon_dock_airlock_sensor"; + tag_exterior_door = "recon_dock_airlock_outer"; + tag_interior_door = "recon_dock_airlock_inner"; + tag_airpump = "recon_dock_airlock_pump" + }, +/obj/item/device/radio/intercom{ + pixel_x = -8; + pixel_y = 20 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the observation shutters"; + id_tag = "recon_main_airlock_blast"; + name = "Main Airlock Lockdown"; + pixel_x = 8; + pixel_y = 24 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/dock) +"ER" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/hallway) +"Fk" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hallway/lower) +"Fl" = ( +/obj/structure/ship_munition/disperser_charge/explosive/military, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"Fo" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 4; + icon_state = "map_injector"; + id = "o2_in"; + use_power = 1; + frequency = 1442 + }, +/turf/simulated/floor/reinforced/nitrogen, +/area/ship/farfleet/engineering/atmospherics) +"Fr" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"FA" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/meter, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/paint/ocean, +/turf/simulated/floor, +/area/ship/farfleet/engineering/atmospherics) +"FC" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"FI" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/farfleet/crew/hallway/lower) +"FN" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/structure/table/standard, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"FW" = ( +/obj/structure/table/rack, +/obj/item/storage/box/freezer/blood/human, +/obj/item/storage/box/freezer/blood/human, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"FZ" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/hallway) +"Ge" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"Gf" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_y = 30; + pixel_x = -10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Gj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"Gq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/sign/warning/nosmoking_1{ + pixel_y = -32; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube1" + }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Gv" = ( +/obj/machinery/access_button/airlock_interior{ + master_tag = "prototype_controller_patrol"; + pixel_x = 24; + pixel_y = -24 + }, +/obj/structure/hygiene/shower{ + pixel_y = 22 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/access_button/airlock_exterior{ + master_tag = "prototype_controller_patrol"; + pixel_x = -24; + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/hallway) +"Gw" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Gy" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/light, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"GB" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"GF" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"GG" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/engine) +"GJ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/light, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"GM" = ( +/obj/structure/sign/farfleetplaque{ + pixel_y = 32 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"GO" = ( +/obj/floor_decal/industrial/outline/red, +/obj/structure/ship_munition/disperser_charge/explosive/military, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"Hd" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/white, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/medbay/surgery) +"He" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"Hh" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "prototype_access_hatch"; + locked = 1; + req_access = list("ACCESS_ICCGN") + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/fussion/control) +"Hl" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance) +"Hu" = ( +/obj/paint/dark_gunmetal, +/obj/structure/sign/warning/docking_area, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/dock) +"Hv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/engine) +"HG" = ( +/obj/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner"; + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner"; + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"HI" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"HL" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"HP" = ( +/obj/structure/table/rack, +/obj/item/storage/firstaid/o2{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/firstaid/fire, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"HQ" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"Ib" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"Ie" = ( +/obj/machinery/light, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"If" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/medbay/storage) +"Ig" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/dock) +"Ih" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 4; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "n2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/machinery/air_sensor{ + id_tag = "n2_sensor" + }, +/turf/simulated/floor/reinforced/oxygen, +/area/ship/farfleet/engineering/atmospherics) +"Io" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"Iv" = ( +/obj/floor_decal/iccglogo/center_right, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"IJ" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/paint/red, +/turf/simulated/floor, +/area/ship/farfleet/engineering/atmospherics) +"IM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/eva) +"IV" = ( +/obj/floor_decal/iccglogo/bottom_center, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"IX" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_east = 2; + tag_north = 3; + tag_south = 4; + tag_west = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Ji" = ( +/obj/item/stack/material/phoron/ten, +/obj/structure/closet/crate/secure/phoron, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"Jn" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"Jy" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"JB" = ( +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/equipment) +"JF" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/closet/crate/trashcart, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"JG" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/equipment) +"JH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/light/small{ + dir = 4; + pixel_x = 6; + pixel_y = 18 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/equipment) +"JJ" = ( +/obj/structure/table/standard, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/hallway) +"JQ" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/dock) +"JS" = ( +/obj/structure/iv_stand, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"JT" = ( +/obj/machinery/vending/security, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"JX" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/dispenser/oxygen, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"JY" = ( +/obj/floor_decal/industrial/hatch/grey, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"Kd" = ( +/obj/structure/barricade, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"Kf" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"KA" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"KB" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"KE" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner"; + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"KG" = ( +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"KK" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"KO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"KX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/conveyor_switch/oneway{ + id = "bsapc" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"Lf" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Li" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"Lp" = ( +/obj/machinery/conveyor{ + dir = 4; + id_tag = "pc_disposal" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"Ls" = ( +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/suit_storage_unit/pioneer, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/eva) +"Lu" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"LD" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"LM" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/critical{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"Mp" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/binary/pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Mr" = ( +/obj/item/gun/launcher/grenade, +/obj/item/storage/box/fragshells, +/obj/item/storage/box/fragshells, +/obj/structure/closet/secure_closet/guncabinet{ + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"Ms" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance) +"Mu" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/white, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"Mv" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"MD" = ( +/obj/machinery/light, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/port_gen/pacman/mrs, +/obj/item/stack/material/tritium/ten, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"MG" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"MJ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/terran{ + name = "Pioneer Corps EVA" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/command/eva) +"MM" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/launcher) +"MO" = ( +/obj/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 5 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"MP" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/structure/ship_munition/disperser_charge/emp/military, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"MZ" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/waste) +"Na" = ( +/obj/structure/closet/bombcloset, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"Nk" = ( +/obj/machinery/door/airlock/engineering{ + name = "Shield Generator" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/engineering/shield) +"Nl" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11; + pixel_y = 5 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 4 + }, +/obj/floor_decal/corner/darkblue/half{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"Nm" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/fussion/control) +"Np" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"NE" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 6; + icon_state = "intact" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/atmospherics) +"NF" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"NH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"NJ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/launcher) +"NK" = ( +/obj/paint/hull, +/turf/simulated/wall/ocp_wall, +/area/ship/farfleet/engineering/atmospherics) +"NO" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/wall, +/area/ship/farfleet/engineering/storage) +"NU" = ( +/obj/machinery/body_scanconsole, +/obj/floor_decal/corner/paleblue{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"Ob" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor/wood/maple, +/area/ship/farfleet/maintenance) +"Oe" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/machinery/computer/ship/sensors/farfleet{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Of" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/command/equipment) +"Oj" = ( +/obj/machinery/computer/ship/helm{ + dir = 4; + req_access = list("ACCESS_ICCGN") + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 8 + }, +/obj/floor_decal/iccglogo/corner{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Ok" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"On" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/fussion/control) +"Ou" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Ov" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/medbay/storage) +"Ox" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 10 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"Oy" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/highsecurity/bolted{ + id_tag = "pcannon"; + name = "Impulse Cannon" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/launcher) +"OD" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"OI" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/hallway) +"OJ" = ( +/obj/machinery/light_switch{ + pixel_y = 30; + pixel_x = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig/emergency_armory) +"OY" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + id_tag = "pcbridge"; + name = "Emergensy Blast Resistant Shutters"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/command/bridge) +"Pb" = ( +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Pc" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/white, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/medbay) +"Pe" = ( +/obj/structure/table/woodentable_reinforced/ebony, +/obj/item/reagent_containers/food/drinks/teapot, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner2, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Pn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"Pq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/door/window/phoronreinforced{ + dir = 4; + name = "Impulse Cannon Control" + }, +/obj/structure/window/boron_reinforced{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"Pr" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Ps" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"Pv" = ( +/obj/paint/dark_gunmetal, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "fusion_observation_farfleet" + }, +/obj/paint_stripe/yellow, +/turf/simulated/floor, +/area/ship/farfleet/engineering/fussion/control) +"PD" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/atmospherics) +"PH" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/fussion/control) +"PI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/eva) +"PK" = ( +/obj/machinery/door/airlock/multi_tile/terran{ + name = "Docknig Hall" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"PL" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"PR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"PW" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "iccg_space"; + name = "Unknown Compartament Hatch" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/command/launcher) +"PY" = ( +/obj/decal/cleanable/dirt, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"Qb" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"Qk" = ( +/obj/structure/table/standard, +/obj/item/storage/toolbox/mechanical, +/obj/item/tape_roll, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/eva) +"Qu" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"Qw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/maple, +/area/ship/farfleet/maintenance) +"QO" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Emergency Armory" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/emergency_armory) +"QP" = ( +/obj/machinery/door/blast/regular/open{ + id_tag = "pcsensors"; + name = "Sensors Protective Shutters" + }, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/command/bridge) +"QW" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"Ra" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Rc" = ( +/obj/submap_landmark/joinable_submap/farfleet, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"Rf" = ( +/obj/structure/table/woodentable/mahogany, +/obj/structure/sign/poster/nyc/krotovuha{ + pixel_y = 32 + }, +/turf/simulated/floor/wood/maple, +/area/ship/farfleet/maintenance) +"Ri" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/meter, +/obj/paint/red, +/turf/simulated/floor, +/area/ship/farfleet/engineering/atmospherics) +"Rj" = ( +/obj/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/orange, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Rk" = ( +/obj/floor_decal/industrial/warning/half{ + icon_state = "warninghalf"; + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch/maintenance{ + id_tag = "tokamak_exterior_farfleet"; + frequency = 1379 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/hallway) +"Rx" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"RC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"RG" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"RI" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/comms) +"RO" = ( +/obj/paint/hull, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/wall/ocp_wall, +/area/ship/farfleet/engineering/fussion/control) +"RZ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Se" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"Sj" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance) +"Sq" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/paint/dark_gunmetal, +/obj/paint_stripe/brown, +/turf/simulated/floor, +/area/ship/farfleet/engineering/atmospherics) +"Su" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/engineering/fussion/control) +"Sv" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "co2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/machinery/air_sensor{ + id_tag = "co2_sensor" + }, +/turf/simulated/floor/reinforced/hydrogen, +/area/ship/farfleet/engineering/atmospherics) +"Sy" = ( +/obj/shuttle_landmark/nav_farfleet/nav1, +/turf/space, +/area/space) +"SB" = ( +/obj/structure/table/rack, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/emergency_armory) +"SI" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/obj/paint/dark_gunmetal, +/obj/paint_stripe/brown, +/turf/simulated/floor, +/area/ship/farfleet/engineering/atmospherics) +"SK" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"SX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + name = "Medical Storage" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/farfleet/medbay/storage) +"Tg" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/button/blast_door{ + id_tag = "farfleet_fusion"; + name = "Chamber Vent Control"; + pixel_y = 24; + pixel_x = 5 + }, +/obj/machinery/button/blast_door{ + id_tag = "farfleet_engineview"; + name = "Chamber viewing port control"; + pixel_x = -5; + pixel_y = 24 + }, +/obj/structure/closet/hydrant{ + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Ti" = ( +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the observation shutters"; + id_tag = "fusion_observation_farfleet"; + name = "Chamber Observation"; + pixel_y = 24; + pixel_x = 10 + }, +/obj/machinery/computer/fusion/fuel_control{ + dir = 8; + id_tag = "fusion_injector_farfleet"; + initial_id_tag = "fusion_injector_farfleet" + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the engine containment doors"; + id_tag = "prototype_chamber_blast_farfleet"; + name = "Chamber Containment"; + pixel_y = 24 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the prototype exhaust"; + id_tag = "prototype_exhaust_farfleet"; + name = "Chamber Exhaust"; + pixel_y = 32; + pixel_x = 5 + }, +/obj/machinery/light_switch{ + pixel_y = 30; + pixel_x = -10 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/fussion/control) +"Tq" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/eva) +"TA" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/fussion/control) +"TB" = ( +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"TD" = ( +/obj/structure/bed/chair/comfy/blue, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"TH" = ( +/obj/decal/cleanable/dirt, +/obj/structure/table/standard, +/obj/item/storage/toolbox/mechanical, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/atmos_equipment) +"TL" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"TM" = ( +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "farfleet_fusion" + }, +/obj/structure/grille, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/atmospherics) +"TU" = ( +/obj/floor_decal/industrial/warning{ + icon_state = "warning"; + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner"; + dir = 8 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/engineering/fussion/control) +"TW" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "fusion_observation_farfleet" + }, +/obj/paint_stripe/yellow, +/turf/simulated/floor, +/area/ship/farfleet/engineering/fussion/control) +"TY" = ( +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -32; + pixel_y = -21 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/hallway) +"Ub" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/paint/hull, +/turf/simulated/wall/ocp_wall, +/area/ship/farfleet/engineering/atmospherics) +"Uc" = ( +/obj/paint/dark_gunmetal, +/obj/paint_stripe/yellow, +/turf/simulated/wall, +/area/ship/farfleet/engineering/equipment) +"Uh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 23 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/equipment) +"Ul" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Ut" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/tank/air{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"UA" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 8 + }, +/obj/floor_decal/corner/darkblue/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/surgery) +"Vc" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/meter, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/paint/ocean, +/turf/simulated/floor, +/area/ship/farfleet/engineering/atmospherics) +"Vh" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"VF" = ( +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"VN" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/corner/black{ + icon_state = "corner_white"; + dir = 5 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"VS" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"VT" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"VU" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "bsapc" + }, +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/floor_decal/industrial/warning, +/obj/machinery/disperser/back{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/ship/farfleet/command/launcher) +"Wc" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"Wh" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "bsapc" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"Wi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/terran{ + name = "Meeting Room" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Wt" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/fussion/control) +"Wz" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + icon_state = "intact"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"WA" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/sign/warning/high_voltage{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/engineering/equipment) +"WC" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/paleblue{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"WK" = ( +/obj/paint/ocean, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/medbay/storage) +"WN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"WW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/command/equipment) +"WX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"Xc" = ( +/obj/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Xd" = ( +/obj/structure/table/rack, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/command/equipment) +"Xj" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/dock) +"Xm" = ( +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Xn" = ( +/turf/simulated/floor/reinforced/nitrogen, +/area/ship/farfleet/engineering/atmospherics) +"Xp" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/engineering/fussion/control) +"XD" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 4 + }, +/obj/floor_decal/corner/black{ + icon_state = "corner_white"; + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"XE" = ( +/obj/floor_decal/iccglogo/top_left, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"XK" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"XM" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) +"XN" = ( +/obj/floor_decal/corner/black{ + icon_state = "corner_white"; + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"XU" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Ya" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance) +"Ye" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/darkblue/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Yi" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/command/eva) +"Yq" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/airless, +/area/ship/farfleet/maintenance/waste) +"Ys" = ( +/obj/floor_decal/industrial/warning{ + dir = 10; + icon_state = "warning" + }, +/obj/machinery/airlock_sensor{ + id_tag = "recon_dock_airlock_sensor"; + pixel_x = -24; + master_tag = "patrol_dock_airlock" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "recon_dock_airlock_pump"; + dir = 4 + }, +/turf/simulated/floor, +/area/ship/farfleet/dock) +"Yv" = ( +/obj/floor_decal/corner/paleblue{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"YB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay/storage) +"YE" = ( +/obj/structure/bed/chair/comfy/blue, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"YF" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/medbay) +"YM" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance/waste) +"YS" = ( +/obj/paint/ocean, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance) +"YV" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/engineering/atmospherics) +"Zh" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/dock) +"Zi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"Zk" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/hallway) +"Zn" = ( +/obj/floor_decal/iccglogo/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"Zt" = ( +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/disperser/front{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/command/launcher) +"ZD" = ( +/obj/structure/bed/chair/comfy/blue, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/bridge) +"ZH" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/structure/ship_munition/disperser_charge/explosive/military, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/techfloor, +/area/ship/farfleet/command/launcher) +"ZN" = ( +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/command/eva) +"ZO" = ( +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/machinery/ship_map, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/lower) +"ZP" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hallway/lower) +"ZY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/maintenance) + +(1,1,1) = {" +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 +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 +"} +(2,1,1) = {" +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 +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 +"} +(3,1,1) = {" +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 +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 +"} +(4,1,1) = {" +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 +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 +"} +(5,1,1) = {" +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 +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 +"} +(6,1,1) = {" +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 +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 +"} +(7,1,1) = {" +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 +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 +"} +(8,1,1) = {" +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 +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 +"} +(9,1,1) = {" +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 +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 +"} +(10,1,1) = {" +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 +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 +"} +(11,1,1) = {" +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 +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 +"} +(12,1,1) = {" +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 +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 +"} +(13,1,1) = {" +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 +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 +"} +(14,1,1) = {" +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 +Sy +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 +"} +(15,1,1) = {" +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 +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 +"} +(16,1,1) = {" +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 +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 +"} +(17,1,1) = {" +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 +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 +"} +(18,1,1) = {" +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 +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 +"} +(19,1,1) = {" +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 +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 +"} +(20,1,1) = {" +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 +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 +"} +(21,1,1) = {" +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 +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 +"} +(22,1,1) = {" +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 +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 +"} +(23,1,1) = {" +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 +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 +"} +(24,1,1) = {" +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 +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 +"} +(25,1,1) = {" +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 +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 +"} +(26,1,1) = {" +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 +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 +"} +(27,1,1) = {" +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 +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 +"} +(28,1,1) = {" +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 +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 +"} +(29,1,1) = {" +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 +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 +"} +(30,1,1) = {" +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 +gX +gX +PW +gX +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 +"} +(31,1,1) = {" +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 +gX +gX +Zt +gX +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 +"} +(32,1,1) = {" +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 +gE +gX +gX +aU +gX +gE +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 +"} +(33,1,1) = {" +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 +gX +MM +mo +lv +VU +lv +Al +gX +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 +"} +(34,1,1) = {" +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 +gX +rR +tZ +rR +xT +rR +rR +gX +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 +"} +(35,1,1) = {" +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 +gX +rR +nY +uH +Wh +uH +rR +gX +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 +"} +(36,1,1) = {" +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 +Do +gX +rR +KX +zz +Wh +zz +rR +gX +Do +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 +"} +(37,1,1) = {" +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 +Do +rR +rR +vg +di +JY +di +rR +rR +Do +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 +"} +(38,1,1) = {" +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 +Do +rR +vq +vg +TB +TB +dm +oi +rR +Do +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 +"} +(39,1,1) = {" +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 +Do +Do +rR +GO +vg +zp +PL +tp +qQ +rR +Do +Do +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 +"} +(40,1,1) = {" +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 +Do +rR +rR +vq +vg +Jy +EE +Pq +kT +rR +rR +Do +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 +"} +(41,1,1) = {" +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 +Do +rR +MP +TB +vg +TB +gV +TB +TB +sR +rR +Do +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 +"} +(42,1,1) = {" +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 +DO +Do +rR +MP +TB +vg +TB +gV +TB +TB +sR +rR +Do +DO +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 +"} +(43,1,1) = {" +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 +DO +gX +rR +MP +TB +Li +ki +HQ +Ar +sP +gw +rR +rR +DO +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 +"} +(44,1,1) = {" +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 +DO +rR +vq +TB +TB +rR +rR +Oy +rR +TB +iU +fw +rR +DO +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 +"} +(45,1,1) = {" +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 +DO +DO +rR +vq +TB +zJ +rR +cG +NJ +rR +TB +hp +ZH +rR +DO +DO +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 +"} +(46,1,1) = {" +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 +DO +gX +rR +vq +TB +eL +rR +te +bL +rR +Na +LM +Fl +rR +gX +DO +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 +"} +(47,1,1) = {" +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 +DO +gX +rR +rR +rR +rR +rR +rR +Oy +rR +rR +rR +rR +rR +gX +DO +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 +"} +(48,1,1) = {" +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 +vG +vG +mm +yF +fb +ru +JJ +mm +Ev +He +ky +nA +hD +Mr +qr +ky +cn +cn +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 +"} +(49,1,1) = {" +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 +vG +mm +mm +gc +gc +gc +TY +gk +Dz +He +ky +dU +dU +dU +dU +ky +ky +cn +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 +"} +(50,1,1) = {" +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 +vG +mm +mm +kK +un +Zk +qD +iN +eb +cX +rn +tV +Ib +aX +mn +ky +ky +cn +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 +"} +(51,1,1) = {" +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 +vG +vG +mm +mm +kZ +tr +ER +ms +gk +Dz +fq +ky +CJ +vW +dU +qM +ky +ky +cn +cn +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 +"} +(52,1,1) = {" +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 +vG +mm +mm +mm +cE +tf +th +jj +mm +qG +He +ky +dA +zw +xM +bF +ky +ky +ky +cn +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 +"} +(53,1,1) = {" +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 +vG +mm +mm +mm +mm +mm +mm +mm +mm +mj +dY +ky +ky +QO +ky +ky +ky +ky +ky +cn +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 +"} +(54,1,1) = {" +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 +oq +eV +eV +fB +Oe +Oj +bh +eV +aH +Ev +Dz +He +ky +JT +lb +qh +SB +ky +ky +ky +cn +nq +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 +"} +(55,1,1) = {" +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 +oq +eV +eV +nH +XE +dg +nT +aP +Dz +RC +lf +Gy +ky +OJ +ah +aq +pv +ky +ky +ky +ky +nq +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 +"} +(56,1,1) = {" +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 +gE +oq +eV +eV +dR +eN +nt +IV +eu +Dz +Dz +Dz +MG +cw +sH +Gj +GF +ky +zM +as +hH +zM +Sj +gE +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 +"} +(57,1,1) = {" +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 +oq +oq +eV +eV +kt +lu +Iv +oo +aP +Dz +Vh +Zi +GJ +ky +fo +eg +cb +ky +zM +tF +hH +zM +Sj +YS +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 +"} +(58,1,1) = {" +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 +oq +eV +eV +eV +Bu +Ad +Zn +Bf +eV +Es +GB +Dz +He +ky +ky +ky +ky +ky +zM +as +ym +zM +zM +YS +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 +"} +(59,1,1) = {" +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 +oq +eV +ox +rM +Ad +Ad +Ad +eV +eV +FI +nW +mj +dY +nW +ma +ma +ma +pu +zM +lg +hH +hH +zM +YS +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 +"} +(60,1,1) = {" +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 +Cp +eV +eV +lU +TD +wl +rb +CX +eV +dC +RC +ep +hP +zl +mj +ma +ma +ma +ma +zM +as +as +bw +zM +AD +Ms +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 +"} +(61,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +kj +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Cp +eV +eV +Ye +uL +sI +Ou +Pr +eV +dC +AF +Fk +Rc +Ge +mj +ma +ma +ma +ma +zM +Rf +tF +Ob +zM +Ya +Ms +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 +"} +(62,1,1) = {" +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 +Cp +eV +eV +eV +eV +eV +OY +qg +eV +eV +eV +nW +mj +dY +nW +ma +ma +ma +ma +zM +xJ +oa +Qw +cs +Ya +Ms +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 +"} +(63,1,1) = {" +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 +Cp +Cp +eV +ZD +Lu +Dl +eV +Gf +Ad +Ad +Ad +yb +Dz +Dz +fq +zM +zM +zM +zM +zM +zM +cU +cU +Kd +cU +Ya +Ms +Ms +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 +"} +(64,1,1) = {" +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 +QP +nr +eV +dz +Np +an +Wi +RZ +Gw +XU +XU +ft +eb +eb +jy +nJ +ko +nE +sW +PR +ZY +nE +ko +XM +oz +Hl +zM +Ms +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 +"} +(65,1,1) = {" +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 +Cp +eV +eV +tt +HI +Pe +eV +eV +eV +eV +eV +eV +fH +Dz +He +eq +gb +gb +gb +gb +gb +gb +gb +ts +gb +VF +zM +Ms +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 +"} +(66,1,1) = {" +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 +JQ +JQ +ng +ng +ng +ng +ng +ng +oI +Xd +gJ +Bz +Dv +GM +Dz +fq +bC +bC +bC +bC +bC +bC +bC +fx +ts +gb +VF +zM +Ms +Ms +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 +"} +(67,1,1) = {" +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 +JQ +ng +ng +zE +ow +xB +xB +gh +dl +dl +dl +dl +Dv +ZO +Dz +hk +Pc +Ei +Cq +dM +sa +fi +Pc +fx +ts +gb +vF +zM +zM +Ms +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 +"} +(68,1,1) = {" +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 +gE +JQ +ng +ng +ec +hx +kF +kF +PK +JB +BN +dk +JB +ey +Dz +Dz +QW +Pc +lw +cx +cg +RG +JF +Pc +pJ +WN +Qb +pV +Rx +zM +Ms +gE +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 +"} +(69,1,1) = {" +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 +sY +Ig +ng +ng +Cd +qF +xL +xW +mf +JG +WW +JH +Uh +Of +eb +eb +cX +wE +Yv +pO +Kf +NU +ci +Pc +Jn +xC +gb +pV +aO +zM +Ms +YS +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 +"} +(70,1,1) = {" +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 +aZ +yc +Ys +ek +kF +gp +aW +ng +ng +Dv +Dv +Dv +Dv +Dv +KG +Dz +He +iO +DS +Pn +oJ +xw +jO +Pc +be +uM +gb +pV +Ji +zM +zM +YS +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 +"} +(71,1,1) = {" +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 +aZ +cP +sw +oM +qN +kF +Zh +mk +ZN +Qk +rQ +ic +mk +iR +Dz +Dz +MG +kR +OD +vx +WX +xw +jO +ne +ne +ne +se +ne +ne +ne +ne +WK +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 +"} +(72,1,1) = {" +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 +Ig +sY +xR +ay +Hu +KO +kF +hC +MJ +PI +DJ +Tq +iG +zt +Dz +RC +lf +Ak +pS +vK +lC +Io +wI +Ie +ne +JS +wg +Fr +li +HP +dQ +ne +WK +If +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 +"} +(73,1,1) = {" +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 +Xj +lD +EJ +gt +ew +NF +xW +BT +Yi +zO +qd +IM +gS +zt +Dz +Vh +Zi +FC +wE +YE +rc +Wc +WC +qS +SX +NH +tN +YB +YB +YB +KA +mE +il +Aj +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 +"} +(74,1,1) = {" +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 +EC +ng +eR +lm +ng +Du +JX +me +mk +hn +Ls +Ls +Ls +mk +wo +Dz +Dz +vV +Pc +YF +fD +Io +wI +xc +ne +oW +de +pR +dp +FW +dS +ne +Ov +Aj +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 +"} +(75,1,1) = {" +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 +Nm +On +On +On +On +On +FZ +FZ +FZ +FZ +dG +dG +dG +dG +dG +dG +ud +ZP +Hd +Hd +hg +lx +hg +Hd +ne +ne +ne +ne +ne +ne +ne +ne +Ov +Aj +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 +"} +(76,1,1) = {" +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 +Nm +gG +gG +gG +gG +gG +fU +fU +fU +pL +cK +dr +dH +aK +aI +Uc +qG +He +Hd +au +aR +UA +BS +iM +Mu +nv +nv +nv +nv +nv +nv +nv +nv +mD +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 +"} +(77,1,1) = {" +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 +Nm +yG +jH +ak +ka +Se +db +hl +by +to +dI +ds +dI +ej +dI +fc +Dz +He +Hd +bE +uQ +jE +xU +on +Mu +Aa +Aa +nv +rU +rU +rU +rU +nv +mD +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 +"} +(78,1,1) = {" +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 +Nm +yG +fy +PH +af +lj +OI +bb +bz +cc +mb +hB +dt +WA +jD +pb +eb +sb +Hd +pH +Nl +mx +gg +nN +Mu +mQ +Ih +nv +Xn +Fo +kE +Xn +nv +mD +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 +"} +(79,1,1) = {" +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 +ab +Wt +yG +Ti +jR +wB +yG +Rk +pL +pL +NO +uN +du +kc +iV +Nk +iV +Dz +fq +bG +bG +bG +bG +bG +bG +Mu +Vc +FA +bQ +mg +IJ +Ri +nv +nv +mD +iQ +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 +"} +(80,1,1) = {" +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 +Xp +Nm +yG +Pv +TW +bv +yG +Gv +hf +pL +ce +cM +dv +bA +iV +aj +iV +Dz +He +BV +mT +oS +fj +cQ +hW +nv +op +Pb +ca +cI +he +lR +Ut +nv +mD +fN +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 +"} +(81,1,1) = {" +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 +Xp +Nm +yG +MD +xO +Cm +yG +mA +pL +pL +cf +cN +dw +cL +iV +gD +iV +ae +Qu +fd +fW +bi +bX +lN +em +rx +kP +pP +Ul +Lf +eT +Ra +nw +nv +mD +fN +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 +"} +(82,1,1) = {" +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 +Xp +Nm +ik +Su +cp +PY +kO +Ps +ax +yG +kc +ch +rF +el +iV +mO +iV +Dz +He +mG +fE +nM +kD +TH +nS +nv +lh +vp +nu +oQ +XK +nZ +nw +nv +mD +fN +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 +"} +(83,1,1) = {" +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 +Xp +Nm +Mv +iK +pc +HL +LD +cS +cJ +KB +dx +dx +dx +dx +hS +eC +lE +lM +nn +BV +BV +BV +BV +fn +fn +nv +CD +zi +yW +Xm +VS +Ul +Ut +nv +mD +fN +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 +"} +(84,1,1) = {" +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 +Xp +Nm +cj +wA +ap +wu +jq +jx +jx +bK +yG +sv +gI +zj +cR +YM +sv +AZ +GG +RI +pl +gd +pw +nv +mP +Eq +VS +TL +Mp +YV +Gq +ia +ia +ia +kH +mF +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 +"} +(85,1,1) = {" +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 +Xp +Nm +dT +of +hc +hc +hc +hc +hc +Hh +of +sv +ry +FN +DX +VT +sA +si +ad +hu +sg +aL +no +nv +nK +hY +jS +uk +IX +xs +zT +ku +nO +vz +PD +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 +"} +(86,1,1) = {" +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 +Xp +Nm +RO +bN +jz +jz +jz +jz +kX +kU +of +sv +Lp +eh +cB +jv +sv +uJ +rg +RI +cm +ii +sS +nv +cD +eP +Xm +dO +Wz +pf +zZ +wx +Sv +vz +PD +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 +"} +(87,1,1) = {" +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 +Nm +of +jz +gR +HG +fS +mt +pn +bR +of +sv +Lp +mU +SK +Hv +bS +bS +iz +bS +bS +sQ +cl +gM +lO +ui +Xm +Xc +ev +xs +ei +bQ +nv +nv +PD +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 +"} +(88,1,1) = {" +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 +Nm +of +Cx +BH +Dc +dW +Ox +ba +bR +of +sv +dh +sv +CK +fA +fA +fA +va +fA +fA +bY +hK +NK +Bd +bc +Xm +dO +VS +Xm +XN +SI +uG +fG +PD +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 +"} +(89,1,1) = {" +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 +hj +jn +ml +ml +oA +bO +TU +hJ +Az +of +sv +nC +MZ +xu +mq +mq +mq +mq +mq +mq +xu +hK +NE +sC +aN +Xm +bx +VS +Xm +XN +SI +uG +fG +PD +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 +"} +(90,1,1) = {" +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 +Nm +of +Ok +gy +gO +sN +fP +KE +jz +of +sv +Ey +MZ +Cg +aa +aa +aa +aa +aa +aa +Cg +hK +lr +sr +kQ +lI +at +En +Xm +VN +Dx +uG +fG +PD +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 +"} +(91,1,1) = {" +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 +Nm +of +jz +MO +CU +gl +uI +cq +jz +of +sv +Ey +MZ +aa +aa +aa +aa +aa +aa +aa +aa +hK +NE +Dj +NK +uY +Rj +dE +xs +kh +eB +bn +fG +PD +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 +"} +(92,1,1) = {" +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 +Nm +of +jz +jz +jz +jz +jz +jz +jz +of +sv +Ey +MZ +aa +aa +aa +aa +aa +aa +aa +aa +hK +oh +sC +Ub +Tg +KK +nl +xH +XD +Sq +Cl +fG +PD +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 +"} +(93,1,1) = {" +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 +Nm +of +of +of +of +of +of +of +of +of +sv +Ey +MZ +aa +aa +aa +aa +aa +aa +aa +aa +hK +fs +NK +NK +nv +nv +nv +nv +nv +nv +nv +nv +PD +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 +"} +(94,1,1) = {" +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 +ab +do +TA +TA +TA +TA +TA +TA +TA +TA +TA +AY +Yq +zr +aa +aa +aa +aa +aa +aa +aa +aa +PD +TM +mD +mD +mD +mD +mD +mD +mD +mD +mD +mD +CH +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(95,1,1) = {" +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 +zh +aa +aa +aa +aa +aa +aa +aa +aa +zh +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 +"} +(96,1,1) = {" +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 +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 +"} +(97,1,1) = {" +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 +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 +"} +(98,1,1) = {" +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 +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 +"} +(99,1,1) = {" +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 +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 +"} +(100,1,1) = {" +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 +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 +"} +(101,1,1) = {" +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 +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 +"} +(102,1,1) = {" +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 +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 +"} +(103,1,1) = {" +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 +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 +"} +(104,1,1) = {" +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 +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 +"} +(105,1,1) = {" +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 +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 +"} +(106,1,1) = {" +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 +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 +"} +(107,1,1) = {" +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 +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 +"} +(108,1,1) = {" +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 +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 +"} +(109,1,1) = {" +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 +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 +"} +(110,1,1) = {" +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 +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 +"} +(111,1,1) = {" +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 +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 +"} +(112,1,1) = {" +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 +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 +"} +(113,1,1) = {" +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 +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 +"} +(114,1,1) = {" +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 +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 +"} +(115,1,1) = {" +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 +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 +"} +(116,1,1) = {" +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 +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 +"} +(117,1,1) = {" +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 +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 +"} +(118,1,1) = {" +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 +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 +"} +(119,1,1) = {" +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 +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 +"} +(120,1,1) = {" +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 +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 +"} diff --git a/mods/_maps/farfleet/maps/farfleet-2.dmm b/mods/_maps/farfleet/maps/farfleet-2.dmm new file mode 100644 index 0000000000000..9b8e32f21c2c2 --- /dev/null +++ b/mods/_maps/farfleet/maps/farfleet-2.dmm @@ -0,0 +1,20090 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/space, +/area/space) +"ab" = ( +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"aj" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"al" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"an" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/snz_hangar) +"aq" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"aF" = ( +/obj/floor_decal/industrial/outline/red, +/obj/structure/closet/secure_closet/guncabinet/farfleet/energy, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"aO" = ( +/obj/machinery/photocopier, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/css) +"aP" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/machinery/cooker/oven, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"aQ" = ( +/obj/structure/hygiene/urinal{ + pixel_y = 31 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/toilet) +"aT" = ( +/obj/structure/table/marble, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"aW" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + id_tag = "snz_shuttle_outer"; + frequency = 1380 + }, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "snz_shuttle"; + pixel_x = -27; + pixel_y = 7; + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "snzblastdoor"; + name = "SNZ Blast Shutters" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"aX" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/structure/closet/walllocker{ + pixel_y = 32 + }, +/obj/item/stack/package_wrap/cargo_wrap, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"ba" = ( +/obj/structure/table/reinforced, +/obj/item/storage/slide_projector, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"bg" = ( +/obj/machinery/radio_beacon, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"bn" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"bo" = ( +/obj/machinery/atmospherics/unary/tank/hydrogen{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/hangar_canisters) +"br" = ( +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"bv" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"bz" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hallway/upper) +"bD" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/hangar_canisters) +"bF" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"bH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"bJ" = ( +/obj/machinery/vending/dinnerware, +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"bO" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/farfleet/crew/hydroponics) +"bQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks/armory) +"bT" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"bW" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/toilet) +"bY" = ( +/obj/floor_decal/industrial/outline/red, +/obj/structure/closet/secure_closet/guncabinet/farfleet/ballistics, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"ce" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/barracks/armory) +"cg" = ( +/obj/structure/janitorialcart, +/obj/item/mop, +/obj/machinery/light_switch{ + pixel_y = 30; + pixel_x = -10 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"cj" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"cn" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/machinery/fabricator/micro/bartender{ + pixel_y = 4; + pixel_x = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"cz" = ( +/obj/machinery/vending/sovietsoda, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"cD" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/flashlight/lamp{ + pixel_y = 12 + }, +/obj/structure/flora/pottedplant/smallcactus{ + pixel_y = 7 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/css) +"cK" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/hallway/upper) +"cO" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/canteen) +"cW" = ( +/obj/machinery/psi_meter, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/css) +"cZ" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"dg" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/hangar_canisters) +"dq" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/barracks/armory) +"ds" = ( +/obj/item/device/flashlight/lantern, +/obj/item/device/flashlight/lantern, +/obj/structure/closet/crate, +/obj/item/device/flashlight/lantern, +/obj/floor_decal/industrial/outline/yellow, +/obj/random/contraband, +/obj/random/accessory, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"dt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"dw" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube_map" + }, +/turf/simulated/floor/carpet/purple, +/area/ship/farfleet/crew/brig/css) +"dy" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/freezer) +"dI" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"dM" = ( +/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/hangar_canisters) +"dY" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/snacks/mint, +/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/spray/cleaner{ + pixel_y = 7 + }, +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"dZ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"ec" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/paint/ocean, +/turf/simulated/wall/r_titanium, +/area/ship/snz) +"ed" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security{ + name = "Security Wing"; + req_access = newlist(); + secured_wires = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig) +"ef" = ( +/obj/machinery/gibber, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"eg" = ( +/obj/machinery/artifact_analyser, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"en" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/corner/red/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"eo" = ( +/obj/structure/reagent_dispensers/coolanttank, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"er" = ( +/obj/structure/closet/fridge, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"et" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/freezer) +"ev" = ( +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/pointdefense{ + initial_id_tag = "farfleet_pd" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ey" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/structure/table/marble, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"ez" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/terran{ + name = "Anomaly Storage" + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"eB" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "snz_shuttle_pump" + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "snz_shuttle_sensor"; + pixel_x = -24; + pixel_y = -7 + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + cycle_to_external_air = 1; + dir = 4; + frequency = 1380; + id_tag = "snz_shuttle"; + pixel_x = -25; + pixel_y = 4; + req_access = list("ACCESS_ICCGN"); + tag_exterior_door = "snz_shuttle_outer"; + tag_interior_door = "snz_shuttle_inner"; + tag_exterior_sensor = "snz_shuttle_exterior_sensor"; + tag_chamber_sensor = "snz_shuttle_sensor"; + tag_airpump = "snz_shuttle_pump"; + tag_interior_sensor = "snz_shuttle_interior_sensor" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"eC" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/barracks/armory) +"eD" = ( +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"eE" = ( +/obj/overmap/visitable/ship/landable/snz, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"eN" = ( +/obj/structure/bed/padded, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"eS" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ship/farfleet/barracks) +"ff" = ( +/obj/structure/table/steel_reinforced, +/obj/item/modular_computer/laptop, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/carpet/purple, +/area/ship/farfleet/crew/brig/css) +"fi" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/hangar_canisters) +"fr" = ( +/obj/structure/bed/chair/comfy/red, +/turf/simulated/floor/carpet/purple, +/area/ship/farfleet/crew/brig/css) +"fu" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks/armory) +"fN" = ( +/obj/machinery/photocopier, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"fS" = ( +/obj/structure/table/marble, +/obj/machinery/door/firedoor, +/obj/machinery/chemical_dispenser/bar_soft/full{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"fZ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"gc" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel, +/obj/machinery/meter, +/obj/machinery/recharger/wallcharger{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"go" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/medical, +/obj/item/storage/firstaid/light, +/obj/item/storage/firstaid/light, +/obj/item/storage/firstaid/light, +/obj/item/storage/firstaid/light, +/obj/item/storage/firstaid/light, +/obj/item/storage/firstaid/light, +/obj/item/storage/firstaid/light, +/obj/item/storage/firstaid/light, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"gs" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/hangar_canisters) +"gu" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"gz" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/hangar_canisters) +"gI" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/suspension_gen, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"gJ" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4; + icon_state = "map_connector" + }, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/hangar_canisters) +"gL" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/barracks) +"gR" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/kitchen) +"hh" = ( +/obj/structure/closet/crate, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/powercell, +/obj/random/powercell, +/obj/random/junk, +/obj/random/junk, +/obj/random/technology_scanner, +/obj/random/technology_scanner, +/obj/random/bomb_supply, +/obj/random/bomb_supply, +/obj/random/bomb_supply, +/obj/random/bomb_supply, +/obj/random/advdevice, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"hi" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -15 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"hj" = ( +/obj/structure/closet/radiation, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"hn" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks/armory) +"ht" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ship/farfleet/barracks/armory) +"hv" = ( +/obj/machinery/artifact_scanpad, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"hw" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"hJ" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/submap_landmark/spawnpoint/away_iccgn_farfleet/iccgn_pawn, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/cryo) +"hL" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/toilet) +"hO" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"hX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/light_switch{ + pixel_y = 30; + pixel_x = -10 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"hY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"if" = ( +/obj/machinery/computer/ship/helm{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"ig" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + pixel_y = 30; + pixel_x = 2; + id_tag = "snzblastdoor"; + name = "Airlock Blast Door" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"ih" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/security{ + id_tag = "prisonentry"; + name = "Cell Two" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig) +"il" = ( +/obj/machinery/door/airlock{ + name = "Head" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/toilet) +"im" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"in" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/toilet) +"iu" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/anomaly) +"iv" = ( +/obj/structure/closet/secure_closet/farfleet/css, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/css) +"iG" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/cryo) +"iR" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/chem_disp_cartridge/ethanol, +/obj/item/reagent_containers/chem_disp_cartridge/sodium, +/obj/item/reagent_containers/chem_disp_cartridge/potassium, +/obj/item/reagent_containers/chem_disp_cartridge/ammonia, +/obj/item/reagent_containers/chem_disp_cartridge/acetone, +/obj/item/reagent_containers/chem_disp_cartridge/silicon, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"iU" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"je" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"jo" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/warning/full, +/obj/structure/ladder, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"jt" = ( +/obj/paint/black, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/snz_hangar) +"ju" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"jx" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/kitchen) +"jE" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 27 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"jG" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/machinery/recharger, +/obj/item/music_tape/custom, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"jJ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"jK" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube_map" + }, +/obj/structure/closet/crate, +/obj/item/stock_parts/circuitboard/helm, +/obj/item/stock_parts/circuitboard/engine, +/obj/item/stock_parts/circuitboard/nav, +/obj/item/stock_parts/circuitboard/nav, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"kg" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/canteen) +"kl" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ship/farfleet/crew/brig) +"kp" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"kz" = ( +/obj/floor_decal/industrial/outline/red, +/obj/structure/closet/secure_closet/guncabinet/farfleet/utility, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"kH" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/barracks/armory) +"kI" = ( +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/supply{ + dir = 4 + }, +/obj/structure/lattice, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "32-8"; + d1 = 32 + }, +/obj/catwalk_plated, +/turf/simulated/open, +/area/ship/farfleet/command/snz_hangar) +"kJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"kL" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/freezer) +"kM" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/closet/crate/bin, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"kO" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"kP" = ( +/obj/structure/closet/secure_closet/hydroponics{ + req_access = list() + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"kS" = ( +/obj/machinery/light, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"kU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"ln" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/snz) +"lp" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"lz" = ( +/obj/structure/bed/chair/shuttle/blue, +/obj/floor_decal/industrial/outline, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"lA" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/toilet) +"lC" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/anomaly) +"lL" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/fuel_port{ + pixel_x = 32 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"lN" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"lP" = ( +/obj/machinery/porta_turret{ + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/snz) +"lS" = ( +/obj/machinery/sleeper/survival_pod{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/snz) +"lT" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/purple, +/area/ship/farfleet/crew/brig/css) +"mc" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks) +"md" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/farfleet/crew/kitchen) +"mm" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"mB" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/storage) +"mJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"mM" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"mQ" = ( +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"mT" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"nc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"nj" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"ns" = ( +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/command/snz_hangar) +"nt" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hydroponics) +"nw" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo"; + pixel_x = -5 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"nD" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"nG" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"nL" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/machinery/reagentgrinder, +/obj/item/reagent_containers/glass/beaker{ + pixel_x = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"nR" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/fuel_port{ + pixel_x = 32 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"oq" = ( +/obj/machinery/fabricator/hacked{ + desc = "Your typical Special Forces Autolathe."; + name = "Autolathe" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"ot" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/freezer) +"ow" = ( +/obj/structure/table/standard, +/obj/item/towel/random, +/obj/item/towel/random{ + pixel_y = 3 + }, +/obj/item/towel/random{ + pixel_y = 6 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/toilet) +"oA" = ( +/obj/structure/closet/crate/solar, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"oE" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/machinery/jukebox/custom_tape/old, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"oH" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "farfleet_pd" + }, +/obj/structure/cable, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"oJ" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"oV" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"oX" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"oZ" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 8; + icon_state = "shuttle_chair_preview" + }, +/obj/floor_decal/industrial/outline, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"pf" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/submap_landmark/spawnpoint/away_iccgn_farfleet/medic, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/cryo) +"pg" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"po" = ( +/obj/machinery/porta_turret{ + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/snz) +"pr" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"pw" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks/armory) +"px" = ( +/obj/machinery/radiocarbon_spectrometer, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"pD" = ( +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"pF" = ( +/obj/item/storage/mirror{ + pixel_y = 32 + }, +/obj/structure/hygiene/sink{ + pixel_y = 19 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/toilet) +"pL" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/paint/dark_gunmetal, +/obj/machinery/door/blast/regular/open{ + dir = 4; + name = "SNZ Blast Shutters"; + id_tag = "snzblast" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/snz) +"pM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/purple, +/area/ship/farfleet/crew/brig/css) +"pN" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "snz_pd" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/snz) +"pT" = ( +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"qa" = ( +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"qh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/dummy_airlock_controller{ + id_tag = "snz_shuttle"; + pixel_x = 0; + anchored = 1; + pixel_y = 26 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"qi" = ( +/obj/machinery/power/terminal{ + dir = 1; + icon_state = "term" + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"qj" = ( +/obj/machinery/door/airlock/highsecurity{ + req_access = list("ACCESS_ICCGN"); + name = "Armory" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"qs" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/farfleet/crew/cryo) +"qx" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"qA" = ( +/obj/machinery/body_scanconsole{ + dir = 4 + }, +/obj/item/bodybag/cryobag, +/obj/structure/closet/medical_wall{ + pixel_y = -22 + }, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/fire, +/obj/item/storage/firstaid/trauma, +/obj/item/storage/firstaid/o2, +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -15 + }, +/turf/simulated/floor/tiled/white, +/area/ship/snz) +"qG" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"qJ" = ( +/obj/machinery/door/airlock, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"qX" = ( +/obj/machinery/power/smes/buildable/preset/farfleet/shuttle, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"rb" = ( +/obj/floor_decal/industrial/outline/red, +/obj/structure/closet/secure_closet/farfleet, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks) +"rg" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"rh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"rk" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hallway/upper) +"rm" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/terran{ + name = "Droptroops Armory"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"rq" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/command/snz_hangar) +"ry" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"rD" = ( +/obj/machinery/computer/ship/engines{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"rH" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"rL" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/structure/table/marble, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"rQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/stasis_cage, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"rS" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall, +/area/ship/farfleet/crew/toilet) +"rV" = ( +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"sa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"sg" = ( +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"sh" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"st" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/brig) +"sx" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint/red, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 8 + }, +/turf/simulated/wall/r_titanium, +/area/ship/snz) +"sz" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/hangar_canisters) +"sO" = ( +/obj/floor_decal/corner/red/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"sX" = ( +/obj/machinery/vending/hydronutrients{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"sY" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/closet/hydrant{ + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"tc" = ( +/obj/item/device/lightreplacer, +/obj/item/storage/box/lights/mixed, +/obj/item/storage/box/lights/mixed, +/obj/item/storage/box/lights/bulbs, +/obj/item/storage/box/lights, +/obj/structure/closet/crate, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"td" = ( +/obj/structure/sign/double/iccgflag/right{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/css) +"tf" = ( +/obj/structure/handrail{ + dir = 8; + icon_state = "handrail" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "snz_shuttle_pump_out_internal" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"ty" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/snz_hangar) +"tB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/toilet) +"tC" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/paint/red, +/turf/simulated/wall/r_titanium, +/area/ship/snz) +"tN" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 6; + icon_state = "intact" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"tP" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"ub" = ( +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/hangar_canisters) +"ue" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks/armory) +"uf" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/cryo) +"ui" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "snz_pd" + }, +/obj/structure/cable/green, +/turf/simulated/floor/plating, +/area/ship/snz) +"uo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/submap_landmark/spawnpoint/away_iccgn_farfleet, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/cryo) +"uq" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"uv" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"uA" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"uL" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"uO" = ( +/obj/machinery/atmospherics/binary/passive_gate{ + unlocked = 1; + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"uQ" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"uS" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks/armory) +"uW" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable, +/obj/machinery/power/apc/critical{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"ve" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/command/snz_hangar) +"vj" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/snz_hangar) +"vp" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/glass/terran{ + name = "Droptroops Section" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks) +"vt" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"vz" = ( +/obj/floor_decal/industrial/outline/red, +/obj/structure/closet/secure_closet/guncabinet/farfleet/antitank, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"vH" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4; + icon_state = "map" + }, +/obj/machinery/door/airlock/external{ + id_tag = "snz_shuttle_inner"; + frequency = 1380 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"vM" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/toilet) +"vN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"vP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"vV" = ( +/obj/floor_decal/industrial/outline, +/obj/machinery/pointdefense_control{ + initial_id_tag = "snz_pd" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"wb" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"wd" = ( +/obj/machinery/smartfridge/foods, +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"wg" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/farfleet/crew/cryo) +"wh" = ( +/obj/machinery/optable, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/snz) +"wi" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube_map" + }, +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"wj" = ( +/obj/machinery/mech_recharger, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"wr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/submap_landmark/spawnpoint/away_iccgn_farfleet, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/cryo) +"wt" = ( +/obj/floor_decal/industrial/outline/red, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/closet/secure_closet/farfleet, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks) +"wA" = ( +/obj/floor_decal/corner/red{ + dir = 6 + }, +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"wB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"wD" = ( +/obj/structure/closet/secure_closet/farfleet/sergeant, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks) +"wG" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"wJ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks) +"wK" = ( +/obj/machinery/anomaly_container, +/obj/floor_decal/industrial/outline, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"wP" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/light, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"wZ" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/freezer) +"xb" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/css) +"xc" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/snz) +"xk" = ( +/obj/machinery/artifact_harvester, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"xl" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/structure/sign/double/iccgflag/right{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"xp" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 8; + icon_state = "tube_map" + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"xq" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"xr" = ( +/obj/machinery/ion_engine{ + dir = 8 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/ship/snz) +"xD" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"xE" = ( +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"xG" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + icon_state = "map_vent_out"; + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/closet/toolcloset/excavation/awaysite, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"xO" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"xP" = ( +/obj/shuttle_landmark/nav_farfleet/nav3, +/turf/space, +/area/space) +"xQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"xR" = ( +/obj/landmark/map_data{ + height = 2 + }, +/turf/space, +/area/space) +"xS" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 8; + icon_state = "tube_map" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"xW" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/light{ + dir = 8; + icon_state = "tube_map" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/hangar_canisters) +"yf" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"yp" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/glass/terran{ + name = "Canteen"; + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"ys" = ( +/obj/shuttle_landmark/nav_farfleet/nav4, +/turf/space, +/area/space) +"yA" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"yB" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/anodevice, +/obj/item/anobattery{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/anobattery{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/device/scanner/health, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"yK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"yQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/hangar_canisters) +"yX" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"zg" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks/armory) +"zi" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"zk" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"zp" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"zB" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"zR" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/anomaly) +"zS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10; + icon_state = "intact" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"zV" = ( +/obj/structure/closet/crate, +/obj/random/voidhelmet, +/obj/random/voidsuit, +/obj/structure/extinguisher_cabinet{ + pixel_y = 0; + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"zW" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "snz_pd" + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/sign/iccg{ + pixel_x = 32 + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ship/snz) +"Ab" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/barracks) +"Ac" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"Ah" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"Al" = ( +/obj/structure/hygiene/shower{ + dir = 4 + }, +/obj/structure/curtain/open/shower, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/toilet) +"Am" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"Ay" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"AC" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 23 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"AE" = ( +/obj/machinery/portable_atmospherics/powered/pump, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"AJ" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/machinery/cooker/grill, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"AK" = ( +/obj/structure/closet/crate/freezer/rations, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/item/storage/box/latexgloves, +/obj/item/storage/box/nitrilegloves, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hydroponics) +"AN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"AW" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"AY" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_titanium, +/area/ship/snz) +"Ba" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"Bf" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"Bg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"Bh" = ( +/obj/paint/blue, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/snz_hangar) +"Bi" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"Bl" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/snz) +"Bt" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/farfleet/crew/freezer) +"BA" = ( +/turf/simulated/floor/carpet/purple, +/area/ship/farfleet/crew/brig/css) +"BI" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/terran{ + name = "Hangar"; + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/command/snz_hangar) +"BP" = ( +/obj/structure/bed/chair, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/carpet/purple, +/area/ship/farfleet/crew/brig/css) +"Cm" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/cryo) +"Cs" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"CD" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/freezer) +"CI" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/submap_landmark/spawnpoint/away_iccgn_farfleet/captain, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/cryo) +"CN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"CT" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hallway/upper) +"CW" = ( +/obj/structure/hygiene/toilet{ + dir = 1 + }, +/obj/machinery/button/alternate/door/bolts{ + dir = 8; + id_tag = "toiletpc"; + name = "Door Lock"; + pixel_x = 24; + pixel_y = -8 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/toilet) +"CZ" = ( +/obj/paint/ocean, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/barracks) +"Db" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_ICCGN") + }, +/obj/structure/bed/chair/padded/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"Dc" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks/armory) +"Dh" = ( +/obj/machinery/sleeper{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/snz) +"Dj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"Dk" = ( +/obj/machinery/portable_atmospherics/canister/empty, +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"Dl" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hallway/upper) +"Dr" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"Dv" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/light, +/obj/structure/sign/hydro{ + dir = 1; + pixel_y = -35 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"Dz" = ( +/obj/machinery/power/apc/critical{ + dir = 1; + name = "north bump"; + pixel_y = 23; + req_access = list("ACCESS_ICCGN") + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"DA" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"DE" = ( +/obj/structure/table/marble, +/obj/machinery/door/firedoor, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3; + pixel_y = 0 + }, +/obj/item/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/food/condiment/small/sugar{ + pixel_y = 1; + pixel_x = -8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"DJ" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/storage/firstaid/surgery, +/obj/item/stack/nanopaste, +/turf/simulated/floor/tiled/white, +/area/ship/snz) +"DL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5; + icon_state = "intact" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"DT" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/brig/css) +"DX" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/cryopod, +/obj/structure/sign/warning/nosmoking_1{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/cryo) +"DZ" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"Eg" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/paint/black, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/snz_hangar) +"Eh" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/rig_module/electrowarfare_suite, +/obj/item/rig_module/electrowarfare_suite, +/obj/item/rig_module/electrowarfare_suite, +/obj/structure/sign/double/iccgflag/left{ + pixel_y = 32 + }, +/obj/item/rig_module/grenade_launcher/light, +/obj/item/rig_module/grenade_launcher/light, +/obj/item/rig_module/grenade_launcher/light, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"En" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"Ep" = ( +/obj/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"Ez" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"EC" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"EK" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/obj/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"ES" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"EX" = ( +/obj/machinery/hologram/holopad/longrange, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"Fo" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/cryopod{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/cryo) +"Fr" = ( +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/structure/bed/chair/comfy/red, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"Fw" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"FI" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/toilet) +"FM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/ship/snz) +"FO" = ( +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks/armory) +"Gb" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"Ge" = ( +/obj/structure/closet/crate/freezer, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/storage/box/canned_tomato, +/obj/item/storage/box/canned_beef, +/obj/item/storage/box/canned_beans, +/obj/item/reagent_containers/food/snacks/canned/caviar/true, +/obj/item/reagent_containers/food/snacks/canned/caviar/true, +/obj/item/reagent_containers/food/snacks/canned/caviar/true, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"Gg" = ( +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/toilet) +"Gj" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/rig_module/device/rcd, +/obj/item/rig_module/vision/multi, +/obj/item/rig_module/vision/nvg, +/obj/item/rig_module/vision/nvg, +/obj/item/rig_module/device/healthscanner, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"Gq" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/hangar_canisters) +"Gs" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/glass/fifty{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/stack/material/aluminium, +/obj/item/stack/material/plastic/fifty, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"GK" = ( +/obj/paint/ocean, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/hangar_canisters) +"GP" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 1; + icon_state = "shuttle_chair_preview" + }, +/obj/floor_decal/industrial/outline, +/obj/machinery/turretid/lethal{ + ailock = 1; + check_arrest = 0; + check_records = 0; + pixel_y = -32; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"Hg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"Hj" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/cryo) +"Hq" = ( +/obj/structure/bed/chair/shuttle/blue, +/obj/floor_decal/industrial/outline, +/obj/machinery/computer/ship/navigation/telescreen{ + pixel_y = 32 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"Hv" = ( +/obj/machinery/computer/shuttle_control/explore/away_farfleet/snz{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"HA" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"HF" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/barracks/armory) +"HO" = ( +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"HT" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks/armory) +"HX" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/command/snz_hangar) +"Ic" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks/armory) +"Ig" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/machinery/cooker/fryer, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"In" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/item/wrench, +/obj/item/wrench, +/obj/item/wrench, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"Iu" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "snz_shuttle_pump_out_internal" + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"ID" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "farfleet_pd" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"IF" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/paint/red, +/turf/simulated/wall/r_titanium, +/area/ship/snz) +"II" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"IN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"IP" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"Je" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"Jh" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/recharger/wallcharger{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"Jm" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/floor_decal/corner/red/three_quarters{ + dir = 1 + }, +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"Jt" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/ship/snz) +"Jw" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"Jy" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"JW" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint/red, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/r_titanium, +/area/ship/snz) +"Kg" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"Kl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"Ko" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/anomaly_container, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"Kr" = ( +/turf/unsimulated/mask, +/area/ship/farfleet/crew/hallway/upper) +"Kz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"KA" = ( +/obj/machinery/atmospherics/unary/tank/air{ + start_pressure = 8000; + dir = 4 + }, +/obj/floor_decal/industrial/outline, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"KE" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_ICCGN") + }, +/obj/structure/table/steel_reinforced, +/obj/item/reagent_containers/glass/bucket, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"KF" = ( +/obj/machinery/shipsensors, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/floor/plating, +/area/ship/snz) +"KL" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"KM" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"KU" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"KV" = ( +/obj/machinery/door/airlock{ + name = "Hydroponics" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hydroponics) +"Lf" = ( +/obj/machinery/papershredder, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/css) +"Ll" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/barracks) +"Lv" = ( +/obj/machinery/porta_turret{ + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/light, +/obj/structure/sign/iccg{ + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/ship/snz) +"Ly" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"LA" = ( +/obj/machinery/porta_turret{ + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/light, +/turf/simulated/floor/plating, +/area/ship/snz) +"LH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/paint/ocean, +/turf/simulated/wall/r_titanium, +/area/ship/snz) +"LI" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4; + icon_state = "map_connector" + }, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/floor_decal/industrial/outline/orange, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"LS" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/clothing/suit/armor/pcarrier, +/obj/item/clothing/suit/armor/pcarrier, +/obj/item/clothing/suit/armor/pcarrier, +/obj/item/clothing/accessory/storage/pouches, +/obj/item/clothing/accessory/storage/pouches, +/obj/item/clothing/accessory/storage/pouches, +/obj/item/clothing/accessory/storage/pouches/large, +/obj/item/clothing/accessory/storage/pouches/large, +/obj/item/clothing/accessory/storage/pouches/large, +/obj/machinery/light, +/obj/item/clothing/accessory/ubac, +/obj/item/clothing/accessory/ubac, +/obj/item/clothing/accessory/ubac, +/obj/item/clothing/accessory/arm_guards/tactical, +/obj/item/clothing/accessory/arm_guards/tactical, +/obj/item/clothing/accessory/arm_guards/tactical, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"LT" = ( +/obj/structure/table/standard, +/obj/item/paper/farfleet/turrets{ + language = "Pan-Slavic" + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"LZ" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/freezer/rations, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hydroponics) +"Ms" = ( +/obj/shuttle_landmark/snz/start, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/command/snz_hangar) +"Mt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ship/snz) +"MC" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/ship/snz) +"ME" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"MN" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"MT" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"MY" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"Ne" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen/multi, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"Nl" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/security{ + id_tag = "prisonentry"; + name = "Cell One" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig) +"Ny" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"NF" = ( +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"NG" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/barracks) +"NN" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint/red, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/wall/r_titanium, +/area/ship/snz) +"NO" = ( +/obj/structure/closet/crate/solar_assembly, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"NR" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/clothing/suit/armor/pcarrier/tan, +/obj/item/clothing/suit/armor/pcarrier/tan, +/obj/item/clothing/suit/armor/pcarrier/tan, +/obj/item/clothing/accessory/storage/pouches/tan, +/obj/item/clothing/accessory/storage/pouches/tan, +/obj/item/clothing/accessory/storage/pouches/tan, +/obj/item/clothing/accessory/storage/pouches/large/tan, +/obj/item/clothing/accessory/storage/pouches/large/tan, +/obj/item/clothing/accessory/storage/pouches/large/tan, +/obj/item/clothing/accessory/ubac/tan, +/obj/item/clothing/accessory/ubac/tan, +/obj/item/clothing/accessory/ubac/tan, +/obj/item/clothing/accessory/arm_guards/tan, +/obj/item/clothing/accessory/arm_guards/tan, +/obj/item/clothing/accessory/arm_guards/tan, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"NV" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/submap_landmark/spawnpoint/away_iccgn_farfleet/sergeant, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/cryo) +"NW" = ( +/obj/structure/closet/fridge/meat, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"Oc" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"Of" = ( +/obj/structure/table/standard, +/obj/item/reagent_containers/glass/bucket, +/obj/structure/cable, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"Oj" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/item/board, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"Ol" = ( +/obj/machinery/computer/ship/sensors, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"Oo" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"OB" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks/armory) +"OQ" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"OT" = ( +/obj/structure/kitchenspike, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"Pc" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/dispenser/oxygen, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"Pg" = ( +/obj/paint/silver, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/freezer) +"Po" = ( +/obj/machinery/psi_monitor, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/css) +"Pr" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"Px" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/critical{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks/armory) +"PA" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"PD" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"PW" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"Qb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"Qd" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/clothing/suit/armor/pcarrier/green, +/obj/item/clothing/suit/armor/pcarrier/green, +/obj/item/clothing/suit/armor/pcarrier/green, +/obj/item/clothing/accessory/storage/pouches/green, +/obj/item/clothing/accessory/storage/pouches/green, +/obj/item/clothing/accessory/storage/pouches/green, +/obj/item/clothing/accessory/storage/pouches/large/green, +/obj/item/clothing/accessory/storage/pouches/large/green, +/obj/item/clothing/accessory/storage/pouches/large/green, +/obj/item/clothing/accessory/ubac/green, +/obj/item/clothing/accessory/ubac/green, +/obj/item/clothing/accessory/ubac/green, +/obj/item/clothing/accessory/arm_guards/green, +/obj/item/clothing/accessory/arm_guards/green, +/obj/item/clothing/accessory/arm_guards/green, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"Qk" = ( +/obj/machinery/ion_engine{ + dir = 8 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/farfleet/command/snz_hangar) +"Qs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"QE" = ( +/obj/machinery/door/airlock{ + id_tag = "toiletpc"; + name = "Toilet" + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/toilet) +"QQ" = ( +/obj/structure/sign/double/iccgflag/left{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/css) +"QR" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/rig/pioneer{ + pixel_y = 6 + }, +/obj/item/rig/pioneer, +/obj/item/rig/pioneer/sergeant{ + pixel_y = -5 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"QU" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/storage/box/cups, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"QZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"Rs" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/structure/table/marble, +/obj/machinery/reagent_temperature{ + pixel_y = 12 + }, +/obj/machinery/reagent_temperature{ + pixel_y = -4 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_y = 4; + pixel_x = -11 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"Rv" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"Rw" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "snz_shuttle_pump_out_external"; + dir = 4 + }, +/obj/machinery/airlock_sensor/airlock_exterior{ + frequency = 1380; + id_tag = "snz_shuttle_exterior_sensor"; + pixel_x = 24; + pixel_y = -8 + }, +/obj/machinery/pointdefense{ + initial_id_tag = "snz_pd" + }, +/turf/simulated/floor/plating, +/area/ship/snz) +"Ry" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/paint/black, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/snz_hangar) +"RA" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"RC" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/computer/cryopod{ + pixel_x = -32 + }, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/cryo) +"RH" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/light, +/obj/floor_decal/industrial/outline, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"RU" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"RV" = ( +/obj/machinery/door/airlock/highsecurity{ + req_access = list("ACCESS_ICCGN"); + name = "Armory" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"RW" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"RX" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"Sc" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"Se" = ( +/obj/machinery/stasis_cage, +/obj/floor_decal/industrial/outline/green, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"Sk" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"Sp" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"Su" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/hydroponics) +"Sv" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"Sx" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint/red, +/turf/simulated/wall/r_titanium, +/area/ship/snz) +"Sz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 8 + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_titanium, +/area/ship/snz) +"SD" = ( +/obj/paint/ocean, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/cryo) +"SV" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/storage) +"Tb" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/clothing/accessory/storage/holster/machete, +/obj/item/clothing/accessory/storage/holster/machete, +/obj/item/clothing/accessory/storage/holster/machete, +/obj/item/clothing/accessory/storage/holster/knife/polymer, +/obj/item/clothing/accessory/storage/holster/knife/polymer, +/obj/item/clothing/accessory/storage/holster/knife/polymer, +/obj/item/clothing/accessory/storage/holster/armpit, +/obj/item/clothing/accessory/storage/holster/armpit, +/obj/item/clothing/accessory/storage/holster/armpit, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"Tg" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"Tk" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/item/storage/box/checkers, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"Tm" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/command/snz_hangar) +"Tr" = ( +/obj/machinery/vending/hydroseeds{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"Tz" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"TB" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/paint/red, +/turf/simulated/wall/r_titanium, +/area/ship/snz) +"TH" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/structure/table/marble, +/obj/item/material/kitchen/rollingpin, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"TR" = ( +/obj/structure/handrail{ + dir = 8; + icon_state = "handrail" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "snz_shuttle_pump" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"TS" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"TV" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"TX" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/terran{ + name = "Consultant's Office" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/crew/brig/css) +"Ua" = ( +/obj/machinery/smartfridge/drying_rack, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"Ud" = ( +/obj/paint/silver, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/storage) +"Ui" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/cryopod, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/cryo) +"Um" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"Uu" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/barracks) +"Ux" = ( +/obj/machinery/bodyscanner{ + dir = 4 + }, +/obj/machinery/light, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/snz) +"UF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10; + icon_state = "intact" + }, +/obj/machinery/door/airlock/external{ + id_tag = "snz_shuttle_outer"; + frequency = 1380 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/blast/regular/open{ + id_tag = "snzblastdoor"; + name = "SNZ Blast Shutters" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"UH" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"UQ" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"UU" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/submap_landmark/spawnpoint/away_iccgn_farfleet/gunner, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/cryo) +"UV" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/machinery/door/airlock/glass{ + name = "Galley"; + req_access = list("ACCESS_ICCGN") + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"Vg" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint/dark_gunmetal, +/obj/machinery/door/blast/regular/open{ + dir = 4; + name = "SNZ Blast Shutters"; + id_tag = "snzblast" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/snz) +"Vi" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"Vj" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/shield/riot/metal, +/obj/item/shield/riot/metal, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"Vv" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"Vz" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/crew/hallway/upper) +"VA" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"VB" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"VC" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/hangar_canisters) +"VE" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "snz_pd" + }, +/obj/structure/cable/green, +/obj/structure/sign/iccg{ + pixel_x = 32 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/snz) +"VN" = ( +/obj/floor_decal/corner/grey_alt/diagonal{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/kitchen) +"VP" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"VU" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"VX" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/storage) +"Wd" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/machinery/media/music_writer{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"Wj" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/carpet/purple, +/area/ship/farfleet/crew/brig/css) +"Wx" = ( +/obj/floor_decal/corner/red{ + dir = 9 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/farfleet/crew/brig) +"Wy" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"WH" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/farfleet/maintenance/anomaly) +"WI" = ( +/obj/paint/ocean, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/toilet) +"WJ" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "farfleet_pd" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"WK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/item/shuttle_beacon, +/obj/item/shuttle_beacon, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"WY" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"Xg" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"Xs" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 1; + icon_state = "shuttle_chair_preview" + }, +/obj/floor_decal/industrial/outline, +/obj/machinery/computer/ship/navigation/telescreen{ + pixel_y = -32 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) +"Xu" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks/armory) +"Xv" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/medical, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/medical, +/obj/random/medical, +/obj/random/medical, +/obj/random/firstaid, +/obj/random/firstaid, +/obj/random/drinkbottle, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"XD" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"XG" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hydroponics) +"Yc" = ( +/obj/floor_decal/corner/b_green/diagonal{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/sign/poster/no_alcohol{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/ship/farfleet/crew/canteen) +"Ye" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/crew/canteen) +"Yi" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/terran{ + name = "Warehouse" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"Yk" = ( +/obj/structure/closet/crate, +/obj/random/tank, +/obj/random/smokes, +/obj/random/smokes, +/obj/random/soap, +/obj/random/junk, +/obj/random/junk, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_ICCGN") + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"Yn" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/hydrogen, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/hangar_canisters) +"Ys" = ( +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/farfleet/command/hangar_canisters) +"Yy" = ( +/obj/paint/ocean, +/turf/simulated/wall/r_wall, +/area/ship/farfleet/maintenance/storage) +"YC" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/toilet) +"YS" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/farfleet/command/snz_hangar) +"YY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5; + icon_state = "intact" + }, +/obj/machinery/door/airlock/external{ + id_tag = "snz_shuttle_inner"; + frequency = 1380 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/snz) +"Za" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "farfleet_pd" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"Zh" = ( +/obj/paint/red, +/turf/simulated/wall/r_titanium, +/area/ship/snz) +"Zj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/farfleet/maintenance/storage) +"Zs" = ( +/obj/machinery/porta_turret{ + req_access = list("ACCESS_ICCGN") + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/sign/iccg{ + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/ship/snz) +"Zt" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + icon_state = "map-scrubbers"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/floor_decal/corner_steel_grid/diagonal, +/turf/simulated/floor/tiled, +/area/ship/farfleet/crew/hallway/upper) +"Zw" = ( +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/farfleet/command/snz_hangar) +"Zz" = ( +/obj/structure/closet/kitchen{ + req_access = list() + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/farfleet/crew/freezer) +"ZA" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/terran{ + name = "Droptroops Locker"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/farfleet/barracks) +"ZS" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 8; + icon_state = "shuttle_chair_preview" + }, +/obj/floor_decal/industrial/outline, +/obj/machinery/button/blast_door{ + pixel_y = 28; + pixel_x = -32; + id_tag = "snzblast"; + name = "Protective Window Shutters" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/snz) + +(1,1,1) = {" +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 +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 +"} +(2,1,1) = {" +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 +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 +"} +(3,1,1) = {" +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 +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 +"} +(4,1,1) = {" +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 +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 +"} +(5,1,1) = {" +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 +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 +"} +(6,1,1) = {" +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 +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 +"} +(7,1,1) = {" +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 +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 +"} +(8,1,1) = {" +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 +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 +"} +(9,1,1) = {" +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 +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 +"} +(10,1,1) = {" +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 +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 +"} +(11,1,1) = {" +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 +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 +"} +(12,1,1) = {" +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 +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 +"} +(13,1,1) = {" +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 +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 +"} +(14,1,1) = {" +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 +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 +"} +(15,1,1) = {" +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 +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 +"} +(16,1,1) = {" +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 +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 +"} +(17,1,1) = {" +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 +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 +"} +(18,1,1) = {" +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 +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 +"} +(19,1,1) = {" +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 +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 +"} +(20,1,1) = {" +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 +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 +"} +(21,1,1) = {" +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 +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 +"} +(22,1,1) = {" +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 +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 +"} +(23,1,1) = {" +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 +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 +"} +(24,1,1) = {" +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 +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 +"} +(25,1,1) = {" +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 +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 +"} +(26,1,1) = {" +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 +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 +"} +(27,1,1) = {" +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 +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 +"} +(28,1,1) = {" +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 +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 +"} +(29,1,1) = {" +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 +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 +"} +(30,1,1) = {" +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 +ab +ab +ab +ab +aa +aa +aa +xR +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 +"} +(31,1,1) = {" +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 +ab +ab +ab +ab +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 +"} +(32,1,1) = {" +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 +ab +ab +ab +ab +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 +"} +(33,1,1) = {" +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 +ev +ab +ab +ab +ab +ab +ab +ev +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 +"} +(34,1,1) = {" +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 +wb +ab +ab +dy +dy +ab +ab +wb +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 +"} +(35,1,1) = {" +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 +wb +ab +dy +dy +dy +dy +ab +wb +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 +"} +(36,1,1) = {" +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 +ab +wb +dy +dy +dy +dy +dy +dy +wb +ab +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 +"} +(37,1,1) = {" +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 +ab +wb +wZ +kL +kL +kL +kL +wZ +wb +ab +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 +"} +(38,1,1) = {" +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 +ab +wb +wZ +kL +Zz +NF +kL +wZ +wb +ab +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 +"} +(39,1,1) = {" +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 +ab +ab +CD +ot +et +Ge +EC +et +ot +Pg +ab +ab +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 +"} +(40,1,1) = {" +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 +ab +ab +wZ +kL +kL +er +PA +kL +kL +wZ +ab +ab +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 +"} +(41,1,1) = {" +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 +ab +ab +wZ +kL +NW +Sc +RA +uL +kL +wZ +ab +ab +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 +"} +(42,1,1) = {" +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 +ab +ab +wZ +wZ +kL +OT +qa +XD +ef +kL +wZ +wZ +ab +ab +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 +"} +(43,1,1) = {" +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 +ab +ab +wZ +kL +kL +Bt +Bt +qJ +Bt +kL +kL +wZ +ab +ab +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 +"} +(44,1,1) = {" +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 +ab +ab +gR +jx +nw +Rs +rL +VN +hi +aP +jx +gR +ab +ab +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 +"} +(45,1,1) = {" +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 +ab +ab +gR +jx +jx +aX +uq +uq +uq +nj +Ig +jx +gR +gR +ab +ab +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 +"} +(46,1,1) = {" +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 +ab +ab +gR +jx +jx +nL +uq +TH +ey +uQ +AJ +jx +jx +gR +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +xP +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 +"} +(47,1,1) = {" +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 +ab +ab +gR +jx +bJ +uq +uq +uq +uq +Sv +Sp +dY +jx +gR +ab +ab +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 +"} +(48,1,1) = {" +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 +ab +ab +gR +gR +jx +md +wd +aT +DE +fS +md +UV +md +jx +gR +gR +ab +ab +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 +"} +(49,1,1) = {" +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 +ab +ab +cO +Ye +Ye +jG +Tg +Tg +Tg +mM +xp +hO +cn +Ye +Ye +cO +ab +ab +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 +"} +(50,1,1) = {" +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 +ab +ab +cO +Ye +Tg +Jw +Jw +Jw +Tg +Oo +Jw +Jw +Jw +Xg +Ye +cO +ab +ab +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 +"} +(51,1,1) = {" +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 +ab +ab +cO +cO +Ye +Yc +Ac +Ac +vt +Je +MT +VA +Oj +Tk +Wd +Ye +cO +cO +ab +ab +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 +"} +(52,1,1) = {" +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 +ab +ab +cO +Ye +Ye +Tg +kO +kO +kO +Tg +Oo +kO +oJ +hw +Tg +Ye +Ye +cO +ab +ab +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 +"} +(53,1,1) = {" +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 +ab +ab +cO +Ye +kM +Tg +KU +AC +RU +cj +Dr +oE +Ye +Ye +Ye +Ye +Ye +cO +ab +ab +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 +"} +(54,1,1) = {" +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 +ev +ab +kg +Ye +Ye +Ye +Ye +Ye +Ye +Ye +PW +yp +Ye +FI +Al +Al +Al +FI +FI +hL +ab +ev +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 +"} +(55,1,1) = {" +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 +wb +ab +Hj +uf +uf +Fo +iG +Fo +uf +cz +pT +tP +FI +pF +Gg +Gg +vM +FI +FI +hL +ab +wb +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 +"} +(56,1,1) = {" +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 +ab +HA +SD +Cm +RC +pf +CI +uo +wg +AN +AN +Zt +il +tB +YC +ow +rS +rS +lA +WI +HA +uv +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 +"} +(57,1,1) = {" +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 +ab +ab +Hj +Hj +uf +NV +hJ +UU +wr +qs +vN +vN +wP +FI +aQ +in +bW +QE +CW +FI +hL +hL +ab +ab +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 +"} +(58,1,1) = {" +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 +ab +ab +Hj +uf +uf +Ui +Ui +DX +Ui +uf +LT +pT +tP +FI +FI +FI +FI +FI +FI +FI +FI +hL +ab +ab +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 +"} +(59,1,1) = {" +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 +ab +ab +Hj +uf +uf +uf +uf +uf +uf +uf +cK +Dl +Vz +cK +Kr +Kr +Kr +Kr +FI +FI +FI +hL +ab +ab +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 +"} +(60,1,1) = {" +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 +ab +ab +st +st +st +st +eN +vP +st +jo +kp +CT +Kl +bv +bz +Kr +Kr +Kr +Kr +FI +FI +FI +FI +FI +ab +ab +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 +"} +(61,1,1) = {" +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 +ab +ab +st +eN +vP +st +IP +mJ +st +jo +VU +rk +yK +fZ +bz +Kr +Kr +Kr +Kr +Su +Su +Su +Su +Su +ab +ab +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 +"} +(62,1,1) = {" +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 +ab +ab +st +IP +mJ +st +kl +Nl +st +st +st +st +Dl +Vz +cK +Kr +Kr +Kr +Kr +Su +Tr +sX +Su +Su +ab +ab +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 +"} +(63,1,1) = {" +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 +ab +ab +st +st +kl +ih +st +sO +Ly +Jm +wA +wA +kl +pT +Wy +Su +Su +Su +Su +Su +Su +jE +kS +Su +Su +Su +ab +ab +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 +"} +(64,1,1) = {" +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 +ab +ab +st +st +KL +Bf +Kz +CN +pr +CN +CN +CN +ed +Sk +Dv +bO +AK +LZ +nt +kP +Ua +eD +XG +Su +Su +Su +ab +ab +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 +"} +(65,1,1) = {" +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 +ab +ab +st +st +UH +yf +en +Wx +Bi +bF +EK +Ep +kl +pT +Ba +KV +wB +wB +wB +wB +wB +bH +Of +Su +Su +Su +ab +ab +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 +"} +(66,1,1) = {" +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 +ab +ab +DT +DT +DT +DT +TX +DT +DT +DT +st +st +st +st +HX +BI +Su +Su +Su +Su +Su +bn +Hg +Am +bn +Su +Su +Su +ab +ab +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 +"} +(67,1,1) = {" +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 +ab +ab +DT +DT +DT +dw +lT +Wj +Lf +DT +OQ +xO +xS +xO +xO +UQ +xO +xS +uW +WY +Su +lN +Hg +Am +bn +Su +Su +Su +ab +ab +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 +"} +(68,1,1) = {" +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 +ab +ab +DT +DT +QQ +pM +cW +BA +iv +DT +Kg +ns +ns +ns +ns +ns +ns +ns +ns +dI +Su +bn +wG +rV +eD +bn +Su +Su +ab +ab +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 +"} +(69,1,1) = {" +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 +ev +ab +DT +DT +DT +td +BP +ff +fr +DT +DT +ME +ns +zW +MC +Vg +pL +Jt +VE +ns +ME +Su +Su +bn +Fw +yA +bn +Su +Su +Su +ab +ev +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 +"} +(70,1,1) = {" +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 +wb +ab +DT +DT +DT +Po +xb +cD +aO +DT +OQ +iU +ns +Jt +Jt +if +Hv +Jt +Jt +ns +pg +WY +Su +Su +Su +Su +Su +Su +Su +Su +ab +wb +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 +"} +(71,1,1) = {" +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 +wb +ab +DT +DT +DT +DT +DT +DT +DT +DT +ME +ns +ns +Jt +Ol +ZS +oZ +rD +Jt +ns +ns +pg +WY +VC +gJ +xW +dM +dM +dg +dg +ab +wb +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 +"} +(72,1,1) = {" +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 +ab +wb +Ab +Ll +Ll +Uu +Ne +wi +Db +Ll +cZ +iU +ns +LA +Jt +vV +eE +EX +bg +Jt +po +ns +ns +Vi +Gq +bD +Ys +gz +yQ +gs +gs +GK +uv +ab +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 +"} +(73,1,1) = {" +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 +ab +wb +Ab +Ll +Ll +Fr +ba +mQ +mQ +Ll +VP +ve +ns +Rw +MC +Hq +Oc +yX +Xs +MC +ui +ns +ns +ME +VC +Yn +ub +sz +bo +dg +dg +fi +ab +ab +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 +"} +(74,1,1) = {" +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 +ab +Ny +CZ +gL +lp +rg +uA +mQ +qx +Ll +VP +ve +ns +Sz +Jt +lz +pD +II +GP +Jt +Jt +ns +ns +ME +zR +zR +zR +zR +zR +zR +zR +lC +ab +ab +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 +"} +(75,1,1) = {" +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 +ab +ab +Ab +Ll +QU +RW +mm +Qb +Qb +vp +Um +ns +LH +ec +Jt +Jt +ig +jJ +lS +Dh +AY +AY +ns +ME +zR +px +oX +yB +KE +fN +zR +lC +ab +ab +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 +"} +(76,1,1) = {" +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 +ab +ab +Ab +Ll +zi +aj +nD +Uu +Uu +wJ +ME +Ms +aW +Iu +eB +YY +QZ +MN +Mt +Bl +qA +AY +ns +ME +zR +eo +sg +sg +sg +DA +zR +lC +ab +ab +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 +"} +(77,1,1) = {" +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 +ab +ab +Ab +Ll +Ll +eS +mc +ZA +eS +Ll +Zw +YS +UF +tf +TR +vH +DL +En +FM +ln +Ux +AY +ns +VB +zR +hj +sg +sg +sg +hv +zR +lC +ab +ab +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 +"} +(78,1,1) = {" +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 +ab +ab +Ab +Ll +rb +Uu +ju +Uu +zp +eS +ME +ns +AY +AY +Jt +Jt +qh +rH +DJ +wh +AY +AY +ns +ME +ez +sg +sg +nc +sg +eg +zR +lC +ab +ab +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 +"} +(79,1,1) = {" +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 +ab +ab +Ab +Ll +wt +PD +Gb +kU +uA +eS +sh +rq +ns +Jt +qX +qi +zS +dt +TV +KA +Jt +ns +ns +Vv +oV +IN +Qs +Bg +sg +xk +zR +lC +ab +ab +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 +"} +(80,1,1) = {" +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 +ab +ab +ab +NG +Ll +wD +Uu +ju +Uu +uA +eS +sh +rq +ns +Jt +Dz +AW +zB +KM +tN +Tz +Jt +ns +ns +kI +zR +hX +sg +WH +sg +hv +zR +iu +ab +ab +ab +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 +"} +(81,1,1) = {" +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 +ab +ab +ab +ce +kH +kH +ht +aq +rm +ht +kH +qG +ns +Lv +Jt +br +im +rQ +gI +uO +RH +Jt +Zs +ns +VB +zR +Cs +sg +sg +sg +DA +zR +iu +ab +ab +ab +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 +"} +(82,1,1) = {" +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 +ab +ab +ab +ce +kH +Vj +QR +zg +fu +Gs +kH +ME +ns +Jt +Jt +LI +bT +Ko +xG +Pr +LI +Jt +Jt +ns +ME +zR +Se +Se +ry +wK +wK +zR +iu +ab +ab +ab +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 +"} +(83,1,1) = {" +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 +ID +Ay +HA +HF +dq +bQ +pw +Dc +fu +oq +kH +ME +ns +Jt +Dk +HO +sa +WK +kJ +hY +xE +zk +Jt +ns +ME +zR +zR +zR +zR +zR +zR +zR +iu +ab +al +oH +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 +"} +(84,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ys +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +wb +ab +ce +kH +Eh +Gj +zg +fu +In +kH +ME +ns +Jt +nG +je +sY +lL +nR +Jh +gc +wj +Jt +ns +ME +SV +zV +Xv +iR +jK +go +SV +Ud +ab +wb +ab +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 +"} +(85,1,1) = {" +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 +ab +wb +ab +ce +kH +xl +Tb +zg +fu +Qd +kH +ME +ns +tC +NN +sx +Sx +Sx +TB +Sx +sx +JW +IF +ns +ES +Yi +rh +xQ +Dj +Zj +gu +VX +mB +HA +Ez +ab +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 +"} +(86,1,1) = {" +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 +ab +wb +ab +ce +kH +FO +hn +ue +uS +LS +kH +ME +ns +pN +xr +xc +Zh +lP +KF +Zh +xc +xr +pN +ns +ME +Ah +xD +Rv +dZ +MY +AE +SV +Ud +ab +wb +ab +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 +"} +(87,1,1) = {" +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 +wb +ab +ce +kH +Pc +Xu +zg +fu +NR +kH +TS +xO +RX +DZ +xO +xO +xO +xO +xO +xO +DZ +RX +xO +xq +SV +cg +xD +dZ +ds +SV +SV +Ud +ab +wb +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 +"} +(88,1,1) = {" +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 +wb +ab +ce +kH +kH +ht +RV +qj +ht +kH +kH +an +ty +jt +Bh +jt +Bh +Bh +jt +Bh +jt +ty +an +SV +SV +Jy +xD +dZ +tc +SV +SV +Ud +ab +wb +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 +"} +(89,1,1) = {" +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 +wb +ab +ce +kH +kH +vz +OB +Ic +aF +kH +kH +an +vj +Ry +Bh +jt +Bh +Bh +jt +Bh +Eg +Tm +an +SV +SV +xD +xD +dZ +mT +SV +SV +Ud +ab +wb +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 +"} +(90,1,1) = {" +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 +wb +ab +ab +ce +kH +bY +Px +HT +kz +kH +ce +ab +wb +Qk +aa +aa +aa +aa +aa +aa +Qk +wb +ab +Ud +SV +NO +oA +Yk +hh +SV +Ud +ab +ab +wb +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 +"} +(91,1,1) = {" +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 +wb +ab +ab +ce +kH +kH +kH +kH +kH +kH +ce +ab +wb +aa +aa +aa +aa +aa +aa +aa +aa +wb +ab +Ud +SV +SV +SV +SV +SV +SV +Ud +ab +ab +wb +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 +"} +(92,1,1) = {" +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 +wb +ab +ab +eC +eC +eC +eC +eC +eC +eC +eC +ab +wb +aa +aa +aa +aa +aa +aa +aa +aa +wb +ab +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +ab +ab +wb +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 +"} +(93,1,1) = {" +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 +wb +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +wb +aa +aa +aa +aa +aa +aa +aa +aa +wb +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +wb +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 +"} +(94,1,1) = {" +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 +WJ +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +Za +aa +aa +aa +aa +aa +aa +aa +aa +Za +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +WJ +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 +"} +(95,1,1) = {" +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 +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 +"} +(96,1,1) = {" +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 +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 +"} +(97,1,1) = {" +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 +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 +"} +(98,1,1) = {" +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 +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 +"} +(99,1,1) = {" +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 +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 +"} +(100,1,1) = {" +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 +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 +"} +(101,1,1) = {" +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 +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 +"} +(102,1,1) = {" +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 +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 +"} +(103,1,1) = {" +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 +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 +"} +(104,1,1) = {" +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 +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 +"} +(105,1,1) = {" +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 +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 +"} +(106,1,1) = {" +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 +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 +"} +(107,1,1) = {" +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 +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 +"} +(108,1,1) = {" +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 +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 +"} +(109,1,1) = {" +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 +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 +"} +(110,1,1) = {" +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 +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 +"} +(111,1,1) = {" +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 +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 +"} +(112,1,1) = {" +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 +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 +"} +(113,1,1) = {" +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 +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 +"} +(114,1,1) = {" +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 +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 +"} +(115,1,1) = {" +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 +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 +"} +(116,1,1) = {" +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 +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 +"} +(117,1,1) = {" +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 +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 +"} +(118,1,1) = {" +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 +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 +"} +(119,1,1) = {" +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 +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 +"} +(120,1,1) = {" +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 +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 +"} diff --git a/mods/_maps/hand/_map_hand.dm b/mods/_maps/hand/_map_hand.dm new file mode 100644 index 0000000000000..cf3187b7434d3 --- /dev/null +++ b/mods/_maps/hand/_map_hand.dm @@ -0,0 +1,3 @@ +/singleton/modpack/map_hand + name = "Корабль с пси-культистами на борту" + desc = "Авейка, включающая в себя старый корабль корпоративных старателей, теперь ставший базой операций для ячейки пси-культа." diff --git a/mods/_maps/hand/_map_hand.dme b/mods/_maps/hand/_map_hand.dme new file mode 100644 index 0000000000000..520735112af73 --- /dev/null +++ b/mods/_maps/hand/_map_hand.dme @@ -0,0 +1,12 @@ +#ifndef MODPACK_MAP_HAND +#define MODPACK_MAP_HAND + +#include "_map_hand.dm" +#include "code/hand.dm" +#include "code/hand_areas.dm" +#include "code/hand_crew.dm" +#include "code/hand_items.dm" +#include "code/hand_shuttles.dm" +#include "code/hand_structures.dm" + +#endif diff --git a/mods/_maps/hand/code/hand.dm b/mods/_maps/hand/code/hand.dm new file mode 100644 index 0000000000000..7e47dfbdc1711 --- /dev/null +++ b/mods/_maps/hand/code/hand.dm @@ -0,0 +1,79 @@ + /////////// + //OVERMAP// + /////////// + +/obj/overmap/visitable/ship/hand + name = "Salvage Vessel" + desc = "Hyena-class salvage vessel used by countless independent prospectors and corporates alike" + color = "#40e200" + fore_dir = NORTH + vessel_mass = 3000 + known_ships = list( + /obj/overmap/visitable/ship/landable/graysontug/hand_one, + /obj/overmap/visitable/ship/landable/graysontug/hand_two, + /obj/overmap/visitable/ship/landable/pod_hand_one, + /obj/overmap/visitable/ship/landable/pod_hand_two + ) + vessel_size = SHIP_SIZE_SMALL + + initial_generic_waypoints = list( + "nav_hand_1", + "nav_hand_2", + "nav_hand_3", + "nav_hand_4" + ) + + initial_restricted_waypoints = list( + "Hyena GM Tug-1" = list("nav_handtugone_start"), + "Hyena GM Tug-2" = list("nav_handtugtwo_start"), + "EE S-class 18-24-1" = list("nav_handpodone_start"), + "EE S-class 18-24-2" = list("nav_handpodtwo_start") + ) + + +#define HAND_SHIP_PREFIX pick("FTU Freeman", "SFV Adrian", "NTV Calhoun", "HIV-T Tapir", "GrM Carrion", "SAV Kilo", "EE T-class 36-78") +/obj/overmap/visitable/ship/hand/New() + name = "[HAND_SHIP_PREFIX], \a [name]" + for(var/area/ship/hand/A) + A.name = "\improper [name] - [A.name]" + GLOB.using_map.area_purity_test_exempt_areas += A.type + ..() +#undef HAND_SHIP_PREFIX + + +/datum/map_template/ruin/away_site/hand + name = "Salvage Vessel (FAV)" + id = "awaysite_hand_ship" + description = "Hyena-class salvage vessel." + prefix = "mods/_maps/hand/maps/" + suffixes = list("hand-1.dmm", "hand-2.dmm") + spawn_cost = 0.5 + player_cost = 7 + spawn_weight = 1 + shuttles_to_initialise = list( + /datum/shuttle/autodock/overmap/graysontug/hand_one, + /datum/shuttle/autodock/overmap/graysontug/hand_two, + /datum/shuttle/autodock/overmap/pod_hand_one, + /datum/shuttle/autodock/overmap/pod_hand_two + ) + + +/obj/shuttle_landmark/nav_hand/nav1 + name = "hand Ship Fore" + landmark_tag = "nav_hand_1" + +/obj/shuttle_landmark/nav_hand/nav2 + name = "hand Ship Aft" + landmark_tag = "nav_hand_2" + +/obj/shuttle_landmark/nav_hand/nav3 + name = "hand Ship Port" + landmark_tag = "nav_hand_3" + +/obj/shuttle_landmark/nav_hand/nav4 + name = "hand Ship Starboard" + landmark_tag = "nav_hand_4" + +/obj/submap_landmark/joinable_submap/hand + name = "FA Salvage Vessel" + archetype = /singleton/submap_archetype/away_hand diff --git a/mods/_maps/hand/code/hand_areas.dm b/mods/_maps/hand/code/hand_areas.dm new file mode 100644 index 0000000000000..d91fff357bee4 --- /dev/null +++ b/mods/_maps/hand/code/hand_areas.dm @@ -0,0 +1,164 @@ +/area/ship/hand + name = "\improper Salvage Vessel" + icon_state = "shuttle2" + req_access = list(access_away_hand) + area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED + +/area/ship/hand/crew + name = "Cryo Storage" + icon_state = "cryo" + +/area/ship/hand/crew/miner_one + name = "Prospectors Dormintories - One" + icon_state = "crew_quarters" + +/area/ship/hand/crew/miner_two + name = "Prospectors Dormintories - Two" + icon_state = "crew_quarters" + +/area/ship/hand/crew/miner_three + name = "Prospectors Dormintories - Three" + icon_state = "crew_quarters" + +/area/ship/hand/crew/miner_four + name = "Prospectors Dormintories - Four" + icon_state = "crew_quarters" + + +/area/ship/hand/crew/hallway/lower + name = "\improper Lower Hallway - Center" + +/area/ship/hand/crew/hallway/lower/fore + name = "\improper Lower Hallway - Fore" + icon_state = "hallF" + +/area/ship/hand/crew/hallway/lower/aft + name = "\improper Lower Hallway - Aft" + icon_state = "hallA" + +/area/ship/hand/crew/hallway/upper + name = "\improper Upper Hallway - Center" + +/area/ship/hand/crew/hallway/upper/fore + name = "\improper Upper Hallway - Fore" + icon_state = "hallF" + +/area/ship/hand/crew/hallway/upper/aft + name = "\improper Upper Hallway - Aft" + icon_state = "hallA" + +/area/ship/hand/crew/kitchen + name = "\improper Galley" + icon_state = "kitchen" + req_access = list(access_away_hand) + +/area/ship/hand/crew/hydro + name = "Hydroponics" + icon_state = "hydro" + + +/area/ship/hand/crew/bar + name = "\improper Canteen" + icon_state = "bar" + + +/area/ship/hand/crew/toilet + name = "\improper Head" + icon_state = "locker" + + +/area/ship/hand/cargo + name = "Cargo Hold" + icon_state = "quartstorage" + +/area/ship/hand/cargo/maints + name = "Maintenance Storage" + +/area/ship/hand/cargo/emergency_armory + name = "Emergency Armory" + icon_state = "locker" + +/area/ship/hand/engineering/hallway + name = "\improper Engineering Hallway" + icon_state = "green" + req_access = list(access_away_hand) + +/area/ship/hand/engineering/port + name = "\improper Engineering Equipment" + icon_state = "green" + req_access = list(access_away_hand) + +/area/ship/hand/engineering/starboard + name = "\improper Engineering Equipment" + icon_state = "green" + req_access = list(access_away_hand) + +/area/ship/hand/engineering/storage + name = "\improper Engineering Storage" + icon_state = "green" + req_access = list(access_away_hand) + + +/area/ship/hand/maintenance/solarport + name = "Solar Maintenance - Port" + icon_state = "SolarcontrolP" + +/area/ship/hand/maintenance/solarstarboard + name = "Solar Maintenance - Starboard" + icon_state = "SolarcontrolS" + + +/area/ship/hand/medbay + name = "\improper Medical Bay" + icon_state = "medbay" + req_access = list(access_away_hand) + +/area/ship/hand/medbay/storage + name = "\improper Medical Bay Lobby" + icon_state = "medbay" + req_access = list(access_away_hand) + + + +#define HAND_ENG_AMBIENCE list('sound/ambience/ambiatm1.ogg') +/area/ship/hand/maintenance/atmos + name = "\improper Atmospherics Comparment" + icon_state = "atmos" + ambience = HAND_ENG_AMBIENCE + req_access = list(access_away_hand) + +/area/ship/hand/maintenance/atmos/fuel + name = "\improper Fuel Comparment" + +/area/ship/hand/maintenance/engine + icon_state = "engine" + ambience = HAND_ENG_AMBIENCE + req_access = list(access_away_hand) + +/area/ship/hand/maintenance/engine/port + name = "\improper Port Thruster" + +/area/ship/hand/maintenance/engine/starboard + name = "\improper Starboard Thruster" + +#undef HAND_ENG_AMBIENCE + + +/area/ship/hand/command + name = "\improper Flight Officers Quarters" + icon_state = "bridge" + req_access = list(access_away_hand_captain) + +/area/ship/hand/command/medic + name = "\improper Senior Staff Quarters" + icon_state = "bridge" + req_access = list(access_away_hand_med) + +/area/ship/hand/command/bridge + name = "\improper Bridge" + icon_state = "bridge" + +/area/ship/hand/airlock + name = "\improper External Airlock" + icon_state = "entry_1" + req_access = list(access_away_hand) diff --git a/mods/_maps/hand/code/hand_crew.dm b/mods/_maps/hand/code/hand_crew.dm new file mode 100644 index 0000000000000..e53e9c16da818 --- /dev/null +++ b/mods/_maps/hand/code/hand_crew.dm @@ -0,0 +1,255 @@ +#define WEBHOOK_SUBMAP_LOADED_HAND "webhook_submap_hand" + +/singleton/submap_archetype/away_hand + descriptor = "FA Salvage Vessel" + map = "Salvage Vessel" + crew_jobs = list( + /datum/job/submap/hand, + /datum/job/submap/hand/captain, + /datum/job/submap/hand/surgeon + ) + call_webhook = WEBHOOK_SUBMAP_LOADED_HAND + +/obj/submap_landmark/spawnpoint/away_hand + name = "Corporate Salvage Technican" + movable_flags = MOVABLE_FLAG_EFFECTMOVE + +/obj/submap_landmark/spawnpoint/away_hand/captain + name = "Corporate Vessel Captain" + +/obj/submap_landmark/spawnpoint/away_hand/captain/guardsman + name = "Frontier Alliance Guardsman" + +/obj/submap_landmark/spawnpoint/away_hand/captain/pilot + name = "Battlegroup Alpha Pilot" + +/obj/submap_landmark/spawnpoint/away_hand/surgeon + name = "Corporate Vessel Corpsman" + +/obj/submap_landmark/joinable_submap/away_hand + name = "FA Salvage Vessel" + archetype = /singleton/submap_archetype/away_hand + +/* ACCESS + * ======= + */ + +var/global/const/access_away_hand = "ACCESS_HAND" +var/global/const/access_away_hand_med = "ACCESS_HAND_MED" +var/global/const/access_away_hand_captain = "ACCESS_HAND_CAPTAIN" + +/datum/access/access_away_hand_hand + id = access_away_hand + desc = "Salvage Vessel Main" + region = ACCESS_REGION_NONE + +/datum/access/access_away_hand_med + id = access_away_hand_med + desc = "Salvage Vessel Medic" + region = ACCESS_REGION_NONE + +/datum/access/access_away_hand_captain + id = access_away_hand_captain + desc = "Salvage Vessel Captain" + region = ACCESS_REGION_NONE + +/* JOBS + * ======= + */ + +/datum/job/submap/hand + title = "Corporate Salvage Technican" + total_positions = 4 + outfit_type = /singleton/hierarchy/outfit/job/hand/miner + allowed_branches = list( + /datum/mil_branch/civilian, + /datum/mil_branch/contractor + ) + allowed_ranks = list( + /datum/mil_rank/civ/contractor, + /datum/mil_rank/civ/civ + ) + supervisors = "Hearer's Hand Soloist, who hides behind mask of your Corpsman" + loadout_allowed = TRUE + is_semi_antagonist = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая затхлый воздух старого разборного судна. \ + Когда-то вы были простым разборщиком, служившего одной из корпораций, но после восстания на Иолатусе всё изменилось. \ + Теперь вы сами за себя и у вас есть возможность найти своё место среди звёзд. Неважно под флагом Альянса Фронтира или нет.\ + \ + За вами присматривает ваш духовный наставник и лидер, скрывающийся под личиной простого корабельного медика. Не подведите его. \ + Ваших сил не хватит чтобы выстоять в открытом бою против сил угнетателей, но на вашей стороне сами звёзды." + whitelisted_species = list(SPECIES_VATGROWN, SPECIES_SPACER, SPECIES_GRAVWORLDER, SPECIES_MULE, SPECIES_TRITONIAN) + min_skill = list( + SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_TRAINED, + SKILL_ATMOS = SKILL_BASIC, + SKILL_ENGINES = SKILL_BASIC, + SKILL_EVA = SKILL_TRAINED, + SKILL_ELECTRICAL = SKILL_TRAINED, + SKILL_CONSTRUCTION = SKILL_TRAINED, + ) + access = list(access_away_hand) + +/datum/job/submap/hand/captain + title = "Corporate Vessel Captain" + total_positions = 1 + alt_titles = list( + "Frontier Alliance Guardsman", + "Battlegroup Alpha Pilot" + ) + outfit_type = /singleton/hierarchy/outfit/job/hand/captain + allowed_branches = list( + /datum/mil_branch/fleet, + /datum/mil_branch/civilian, + /datum/mil_branch/contractor, + /datum/mil_branch/employee + ) + allowed_ranks = list( + /datum/mil_rank/fleet/o3, + /datum/mil_rank/civ/contractor, + /datum/mil_rank/civ/civ + ) + supervisors = "Hearer's Hand Soloist, who hides behind mask of your Corpsman" + loadout_allowed = TRUE + is_semi_antagonist = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая затхлый воздух старого разборного судна. Ваш расколотый разум сводит в спазме. \ + Кем вы были? Когда-то давно вы были офицером, который бороздил космос под флагом ЦПСС. Но теперь это давно в прошлом. Всё что имеет значение - подчинение. \ + Вы беспрекословно следуете приказам этой таинственной фигуры, ворвавшейся в вашу судьбу. Она связана с пси-культами и по её пятам идёт Фонд Кухулин. Но вы с радостью отдадите жизнь за неё.\ + \ + За вами присматривает ваш духовный наставник и лидер, скрывающийся под личиной простого корабельного медика. Не подведите его. \ + Ваших сил не хватит чтобы выстоять в открытом бою против карательных сил флота ЦПСС, но вы и не из такого дерьма выбирались." + required_language = list(LANGUAGE_HUMAN_EURO, LANGUAGE_SPACER) + whitelisted_species = list(SPECIES_HUMAN) + min_skill = list( + SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC, + SKILL_PILOT = SKILL_TRAINED, + SKILL_EVA = SKILL_BASIC + ) + access = list(access_away_hand, access_away_hand_captain) + +/* TO DO: Make this doable +/datum/job/submap/hand/captain/equip(mob/living/carbon/human/H) + if(H.mind.role_alt_title == "Frontier Alliance Guardsman") + outfit_type = /singleton/hierarchy/outfit/job/hand/captain/guardsman + if(H.mind.role_alt_title == "Battlegroup Alpha Pilot") + outfit_type = /singleton/hierarchy/outfit/job/hand/captain/pilot + return ..() +*/ + +/datum/job/submap/hand/surgeon + title = "Corporate Vessel Corpsman" + total_positions = 1 + outfit_type = /singleton/hierarchy/outfit/job/hand/surgeon + psi_faculties = list( + PSI_REDACTION = PSI_RANK_GRANDMASTER, + PSI_COERCION = PSI_RANK_OPERANT + ) + allowed_branches = list( + /datum/mil_branch/fleet, + /datum/mil_branch/civilian, + /datum/mil_branch/contractor, + /datum/mil_branch/employee + ) + allowed_ranks = list( + /datum/mil_rank/fleet/o2, + /datum/mil_rank/civ/contractor, + /datum/mil_rank/civ/civ + ) + supervisors = "Upper Chorus of the Hearer's Hand" + loadout_allowed = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая затхлый воздух старого разборного судна. Ваш разум отзывается зову звёзд. \ + Являясь солистом одной из ячеек Длани Слышащих, вы несёте слово Длани всем заблудшим и нуждающимся. Ваши способности были оценены по-достоинству и теперь вы - первая скрипка. \ + \ + Де-юре вы подчиняетесь капитану судна, но фактически вы - кукловод, который ведёт свой Хор к расширению своего влияния на фронтире. Вы в ответе за своих людей. \ + \ + Вам стоит проявлять осторожность, чтобы не привлечь к себе лишнее внимание. Пробуждение псиоников - ваша цель, но сохранение ячейки важнее. \ + Ваших сил не хватит чтобы выстоять в открытом бою против карательных сил флота ЦПСС и того, что придёт за ними. Помните это. И да услышит вашу Песнь весь космос." + whitelisted_species = list(SPECIES_HUMAN, SPECIES_SPACER, SPECIES_GRAVWORLDER, SPECIES_VATGROWN, SPECIES_TRITONIAN) + min_skill = list( + SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_TRAINED, + SKILL_MEDICAL = SKILL_EXPERIENCED, + SKILL_ANATOMY = SKILL_BASIC, + SKILL_DEVICES = SKILL_BASIC, + SKILL_CHEMISTRY = SKILL_BASIC, + SKILL_EVA = SKILL_BASIC + ) + access = list(access_away_hand, access_away_hand_med, access_away_hand_captain) + +/* OUTFITS + * ======= + */ + +#define HAND_OUTFIT_JOB_NAME(job_name) ("Hearer's Hand Chorus - Job - " + job_name) + +/singleton/hierarchy/outfit/job/hand + hierarchy_type = /singleton/hierarchy/outfit/job/hand + uniform = /obj/item/clothing/under/grayson + shoes = /obj/item/clothing/shoes/workboots + l_ear = /obj/item/device/radio/headset/headset_mining + l_pocket = /obj/item/device/radio + r_pocket = /obj/item/crowbar/prybar + suit_store = /obj/item/tank/oxygen + id_types = list(/obj/item/card/id/hand) + id_slot = slot_wear_id + gloves = /obj/item/clothing/gloves/thick + pda_type = null + belt = /obj/item/storage/belt/utility/full + back = /obj/item/storage/backpack/industrial + backpack_contents = null + flags = OUTFIT_EXTENDED_SURVIVAL + +/singleton/hierarchy/outfit/job/hand/miner + name = HAND_OUTFIT_JOB_NAME("Corporate Salvage Technican") + +/singleton/hierarchy/outfit/job/hand/captain + name = HAND_OUTFIT_JOB_NAME("Corporate Vessel Captain") + uniform = /obj/item/clothing/under/rank/adjutant + shoes = /obj/item/clothing/shoes/jackboots + id_types = list(/obj/item/card/id/hand/captain) + gloves = /obj/item/clothing/gloves/thick/duty + back = /obj/item/storage/backpack/rucksack + backpack_contents = null + flags = OUTFIT_EXTENDED_SURVIVAL + +/singleton/hierarchy/outfit/job/hand/captain/guardsman + name = HAND_OUTFIT_JOB_NAME("Frontier Alliance Guardsman") + head = /obj/item/clothing/head/deckcrew + uniform = /obj/item/clothing/under/fa/vacsuit/hand/guardsman + shoes = /obj/item/clothing/shoes/jackboots + id_types = list(/obj/item/card/id/hand/captain) + gloves = /obj/item/clothing/gloves/thick/duty + back = /obj/item/storage/backpack/rucksack/blue + backpack_contents = null + flags = OUTFIT_EXTENDED_SURVIVAL + +/singleton/hierarchy/outfit/job/hand/captain/pilot + name = HAND_OUTFIT_JOB_NAME("Battlegroup Alpha Pilot") + head = /obj/item/clothing/head/solgov/utility/fleet + uniform = /obj/item/clothing/under/solgov/utility/fleet/command/pilot/fifth_fleet + shoes = /obj/item/clothing/shoes/jackboots + id_types = list(/obj/item/card/id/hand/captain/fifth_fleet) + belt = /obj/item/storage/belt/holster/security/tactical/away_solpatrol + gloves = /obj/item/clothing/gloves/thick/duty + back = /obj/item/storage/backpack/rucksack/navy + backpack_contents = null + flags = OUTFIT_EXTENDED_SURVIVAL + +/singleton/hierarchy/outfit/job/hand/surgeon + name = HAND_OUTFIT_JOB_NAME("Corporate Vessel Corpsman") + uniform = /obj/item/clothing/under/solgov/utility/fleet/medical/hand + shoes = /obj/item/clothing/shoes/black + id_types = list(/obj/item/card/id/hand/medic) + belt = /obj/item/storage/belt/medical/emt + gloves = /obj/item/clothing/gloves/latex/nitrile + back = /obj/item/storage/backpack/satchel/med + backpack_contents = null + flags = OUTFIT_EXTENDED_SURVIVAL + +#undef HAND_OUTFIT_JOB_NAME +#undef WEBHOOK_SUBMAP_LOADED_HAND diff --git a/mods/_maps/hand/code/hand_items.dm b/mods/_maps/hand/code/hand_items.dm new file mode 100644 index 0000000000000..a299eb457dc90 --- /dev/null +++ b/mods/_maps/hand/code/hand_items.dm @@ -0,0 +1,101 @@ +/* CARDS + * ======== + */ + +/obj/item/card/id/hand + desc = "An identification card issued to corporate laborers across countless frontier facilities and vessels." + detail_color = COLOR_BROWN + access = list(access_away_hand) + +/obj/item/card/id/hand/captain + desc = "An identification card issued to corporate pilot crew." + icon_state = "base" + color = COLOR_GRAY40 + extra_details = list("goldstripe") + detail_color = COLOR_COMMAND_BLUE + access = list(access_away_hand, access_away_hand_captain) + +/obj/item/card/id/hand/captain/ftu + desc = "An identification card issued to Free Trade Union personnel." + color = COLOR_OFF_WHITE + detail_color = COLOR_BEIGE + +/obj/item/card/id/hand/captain/fifth_fleet + desc = "An identification card issued to SCGN Flight Crew. This one was issued to personnel of Fifth Fleet's Battlegroup 'Alpha'." + icon_state = "base" + extra_details = null + color = COLOR_GRAY40 + detail_color = "#447ab1" + access = list(access_away_hand, access_away_hand_captain) + +/obj/item/card/id/hand/medic + desc = "An identification card issued to corporate medical personnel across countless frontier facilities and vessels." + icon_state = "base" + detail_color = COLOR_PALE_BLUE_GRAY + access = list(access_away_hand, access_away_hand_med, access_away_hand_captain) + +/obj/item/card/id/hand/medic/fifth_fleet + desc = "An identification card issued to corporate medical personnel across countless frontier facilities and vessels." + icon_state = "base" + detail_color = COLOR_PALE_BLUE_GRAY + access = list(access_away_hand, access_away_hand_med, access_away_hand_captain) + +/* CLOTHING + * ======== + */ + +/obj/item/clothing/under/fa/vacsuit/hand/guardsman + accessories = list(/obj/item/clothing/accessory/fa_badge/guardsman) + +/obj/item/clothing/under/solgov/utility/fleet/command/pilot/fifth_fleet + accessories = list( + /obj/item/clothing/accessory/solgov/specialty/pilot, + /obj/item/clothing/accessory/solgov/rank/fleet/officer/o3, + /obj/item/clothing/accessory/solgov/fleet_patch/fifth + ) + +/obj/item/clothing/under/solgov/utility/fleet/medical/hand + accessories = list( + /obj/item/clothing/accessory/solgov/department/medical/fleet, + /obj/item/clothing/accessory/solgov/rank/fleet/officer, + /obj/item/clothing/accessory/solgov/fleet_patch/fifth + ) + +/obj/item/clothing/suit/bio_suit/anomaly/lethal + name = "cheap anomaly suit" + desc = "A cheap suit that should protect against exotic alien energies and biological contamination." + icon = 'mods/_maps/hand/icons/obj/obj_hand.dmi' + item_icons = list(slot_wear_suit_str = 'mods/_maps/hand/icons/mob/onmob_hand.dmi') + icon_state = "lethal_suit" + +/obj/item/clothing/head/bio_hood/anomaly/lethal + name = "cheap anomaly mask" + desc = "A hood that should protect the head and face from exotic alien energies and biological contamination." + icon = 'mods/_maps/hand/icons/obj/obj_hand.dmi' + item_icons = list(slot_head_str = 'mods/_maps/hand/icons/mob/onmob_hand.dmi') + icon_state = "lethal_helm" + +// Fluff + +/obj/item/paper/hand/pods + name = "Pods Usage" + icon_state = "paper_words" + language = LANGUAGE_SPACER + info = {" +
    +

    Техника безопасности при работе со шлюзовыми камерами капсул EE S-class 18-24:

    +

    1. Вручную откройте дверь шлюза. Войдите в шлюз

    +

    2. Закройте внутреннюю дверь. Убедитесь что капсула пристыкована. Откройте обе двери

    +

    3. Опустите болты шлюза капсулы. Начинайте проводить погрузку

    +

    4. Завершив погрузку, закройте внутреннюю дверь шлюза. Закройте внешнюю дверь шлюза, находясь в шлюзе капсулы

    +

    5. Переключите шлюз капсулы на удержание воздуха. Убедитесь что он закроется. После этого начинайте отстыковку

    +
    + "} + +/obj/item/paper/hand/engineer + name = "To stupid ones" + language = LANGUAGE_SPACER + info = {"

    Капсулы, ещё раз.

    +

    Если ещё раз кто-то из вас, кривых и косых недолюдей забудет нормально пристыковать эйнштейновскую капсулу перед тем, как давать команду на открытие шлюза

    +

    То я этого умника привяжу снаружи перед мостиком на день.

    + "} diff --git a/mods/_maps/hand/code/hand_shuttles.dm b/mods/_maps/hand/code/hand_shuttles.dm new file mode 100644 index 0000000000000..9116fd75d42b7 --- /dev/null +++ b/mods/_maps/hand/code/hand_shuttles.dm @@ -0,0 +1,174 @@ +/datum/shuttle/autodock/overmap/graysontug/hand_one + name = "Hyena GM Tug-1" + dock_target = "handtugone_shuttle" + current_location = "nav_handtugone_start" + range = 1 + shuttle_area = /area/ship/hand/shuttle/tug_one + fuel_consumption = 4 + defer_initialisation = TRUE + flags = SHUTTLE_FLAGS_PROCESS + skill_needed = SKILL_MIN + ceiling_type = /turf/simulated/floor/shuttle_ceiling + +/datum/shuttle/autodock/overmap/graysontug/hand_two + name = "Hyena GM Tug-2" + dock_target = "handtugtwo_shuttle" + current_location = "nav_handtugtwo_start" + range = 1 + shuttle_area = /area/ship/hand/shuttle/tug_two + fuel_consumption = 4 + defer_initialisation = TRUE + flags = SHUTTLE_FLAGS_PROCESS + skill_needed = SKILL_MIN + ceiling_type = /turf/simulated/floor/shuttle_ceiling + +/obj/machinery/computer/shuttle_control/explore/graysontug/hand_one + name = "GM Tug Shuttle control console" + shuttle_tag = "Hyena GM Tug-1" + +/obj/machinery/computer/shuttle_control/explore/graysontug/hand_two + name = "GM Tug Shuttle control console" + shuttle_tag = "Hyena GM Tug-2" + +/obj/overmap/visitable/ship/landable/graysontug/hand_one + name = "GM Tug" + desc = "Grayson Manufactories Tug. Space truckin commonly seen across Frontier." + shuttle = "Hyena GM Tug-1" + fore_dir = NORTH + color = "#e6f7ff" + vessel_mass = 2500 + vessel_size = SHIP_SIZE_TINY + known_ships = list( + /obj/overmap/visitable/ship/hand, + /obj/overmap/visitable/ship/landable/graysontug/hand_two, + /obj/overmap/visitable/ship/landable/pod_hand_one, + /obj/overmap/visitable/ship/landable/pod_hand_two + ) + +/obj/overmap/visitable/ship/landable/graysontug/hand_two + name = "GM Tug" + desc = "Grayson Manufactories Tug. Space truckin commonly seen across Frontier." + shuttle = "Hyena GM Tug-2" + fore_dir = NORTH + color = "#e6f7ff" + vessel_mass = 2500 + vessel_size = SHIP_SIZE_TINY + known_ships = list( + /obj/overmap/visitable/ship/hand, + /obj/overmap/visitable/ship/landable/graysontug/hand_one, + /obj/overmap/visitable/ship/landable/pod_hand_one, + /obj/overmap/visitable/ship/landable/pod_hand_two + ) + +/area/ship/hand/shuttle/tug_one + name = "\improper GM Tug" + icon_state = "shuttlered" + requires_power = 1 + dynamic_lighting = 1 + area_flags = AREA_FLAG_RAD_SHIELDED + +/area/ship/hand/shuttle/tug_two + name = "\improper GM Tug" + icon_state = "shuttlered" + requires_power = 1 + dynamic_lighting = 1 + area_flags = AREA_FLAG_RAD_SHIELDED + +/obj/shuttle_landmark/handtugone/start + name = "Port Tug Dock" + landmark_tag = "nav_handtugone_start" + docking_controller = "handtugone_port_dock" + movable_flags = MOVABLE_FLAG_EFFECTMOVE + +/obj/shuttle_landmark/handtugtwo/start + name = "Starboard Tug Dock" + landmark_tag = "nav_handtugtwo_start" + docking_controller = "handtugtwo_port_dock" + movable_flags = MOVABLE_FLAG_EFFECTMOVE + +/datum/shuttle/autodock/overmap/pod_hand_one + name = "EE S-class 18-24-1" + warmup_time = 5 + current_location = "nav_handpodone_start" + range = 2 + shuttle_area = list(/area/ship/hand/shuttle/pod_hand_one) + defer_initialisation = TRUE + flags = SHUTTLE_FLAGS_PROCESS + skill_needed = SKILL_BASIC + ceiling_type = /turf/simulated/floor/shuttle_ceiling + +/datum/shuttle/autodock/overmap/pod_hand_two + name = "EE S-class 18-24-2" + warmup_time = 5 + current_location = "nav_handpodtwo_start" + range = 2 + shuttle_area = list(/area/ship/hand/shuttle/pod_hand_one) + defer_initialisation = TRUE + flags = SHUTTLE_FLAGS_PROCESS + skill_needed = SKILL_BASIC + ceiling_type = /turf/simulated/floor/shuttle_ceiling + +/obj/machinery/computer/shuttle_control/explore/pod_hand_one + name = "EE S-class 18-24 Shuttle control console" + shuttle_tag = "EE S-class 18-24-1" + +/obj/machinery/computer/shuttle_control/explore/pod_hand_two + name = "EE S-class 18-24 Shuttle control console" + shuttle_tag = "EE S-class 18-24-2" + + +/obj/overmap/visitable/ship/landable/pod_hand_one + shuttle = "EE S-class 18-24-1" + name = "EE S-class 18-24-1" + desc = "Einstein Engines S-class pod. Universal takeoff and landing module." + max_speed = 1/(2 SECONDS) + burn_delay = 1 SECONDS + fore_dir = NORTH + color = "#e6f7ff" + vessel_mass = 500 + vessel_size = SHIP_SIZE_TINY + known_ships = list( + /obj/overmap/visitable/ship/landable/graysontug/hand_one, + /obj/overmap/visitable/ship/landable/graysontug/hand_two, + /obj/overmap/visitable/ship/landable/pod_hand_two, + /obj/overmap/visitable/ship/hand + ) + +/obj/overmap/visitable/ship/landable/pod_hand_two + shuttle = "EE S-class 18-24-2" + name = "EE S-class 18-24-2" + desc = "Einstein Engines S-class pod. Universal takeoff and landing module." + max_speed = 1/(2 SECONDS) + burn_delay = 1 SECONDS + fore_dir = NORTH + color = "#e6f7ff" + vessel_mass = 500 + vessel_size = SHIP_SIZE_TINY + known_ships = list( + /obj/overmap/visitable/ship/landable/graysontug/hand_one, + /obj/overmap/visitable/ship/landable/graysontug/hand_two, + /obj/overmap/visitable/ship/landable/pod_hand_one, + /obj/overmap/visitable/ship/hand + ) + +/area/ship/hand/shuttle/pod_hand_one + icon_state = "shuttlered" + requires_power = 1 + dynamic_lighting = 1 + area_flags = AREA_FLAG_RAD_SHIELDED + +/area/ship/hand/shuttle/pod_hand_two + icon_state = "shuttlered" + requires_power = 1 + dynamic_lighting = 1 + area_flags = AREA_FLAG_RAD_SHIELDED + +/obj/shuttle_landmark/pod_hand_one/start + name = "Port EE S-class Dock" + landmark_tag = "nav_handpodone_start" + movable_flags = MOVABLE_FLAG_EFFECTMOVE + +/obj/shuttle_landmark/pod_hand_two/start + name = "Starboard EE S-class Dock" + landmark_tag = "nav_handpodtwo_start" + movable_flags = MOVABLE_FLAG_EFFECTMOVE diff --git a/mods/_maps/hand/code/hand_structures.dm b/mods/_maps/hand/code/hand_structures.dm new file mode 100644 index 0000000000000..5918acbdd2460 --- /dev/null +++ b/mods/_maps/hand/code/hand_structures.dm @@ -0,0 +1,48 @@ + /////////// + //CLOSETS// + /////////// + +/obj/structure/closet/wardrobe/hand + name = "PMC attire closet" + closet_appearance = /singleton/closet_appearance/tactical + + +/obj/structure/closet/wardrobe/hand/saare + name = "SAARE attire closet" + closet_appearance = /singleton/closet_appearance/tactical + +/obj/structure/closet/wardrobe/hand/saare/WillContain() + return list( + /obj/item/clothing/suit/armor/pcarrier/green/heavy_saare = 6, + /obj/item/clothing/under/rank/security/saarecombat = 5, + /obj/item/clothing/under/saare, + /obj/item/clothing/head/beret/sec/corporate/saare = 6, + /obj/item/clothing/accessory/helmet_cover/saare = 6, + /obj/item/clothing/shoes/jackboots = 6, + ) + +/obj/structure/closet/wardrobe/hand/pcrc + name = "PCRC attire closet" + closet_appearance = /singleton/closet_appearance/tactical + +/obj/structure/closet/wardrobe/hand/pcrc/WillContain() + return list( + /obj/item/clothing/under/pcrc = 5, + /obj/item/clothing/under/pcrcsuit, + /obj/item/clothing/head/beret/pcrc = 6, + /obj/item/clothing/accessory/helmet_cover/pcrc = 6, + /obj/item/clothing/accessory/armor_tag/pcrc = 6, + /obj/item/clothing/shoes/jackboots = 6, + ) + +/obj/structure/closet/wardrobe/hand/zpci + name = "ZPCI attire closet" + closet_appearance = /singleton/closet_appearance/tactical + +/obj/structure/closet/wardrobe/hand/zpci/WillContain() + return list( + /obj/item/clothing/under/zpci_uniform = 6, + /obj/item/clothing/head/beret/sec/corporate/zpci = 6, + /obj/item/clothing/accessory/armor_tag/zpci = 6, + /obj/item/clothing/shoes/jackboots = 6, + ) diff --git a/mods/_maps/hand/icons/mob/onmob_hand.dmi b/mods/_maps/hand/icons/mob/onmob_hand.dmi new file mode 100644 index 0000000000000..f5040a37854e1 Binary files /dev/null and b/mods/_maps/hand/icons/mob/onmob_hand.dmi differ diff --git a/mods/_maps/hand/icons/obj/obj_hand.dmi b/mods/_maps/hand/icons/obj/obj_hand.dmi new file mode 100644 index 0000000000000..29bb4f894abb1 Binary files /dev/null and b/mods/_maps/hand/icons/obj/obj_hand.dmi differ diff --git a/mods/_maps/hand/maps/hand-1.dmm b/mods/_maps/hand/maps/hand-1.dmm new file mode 100644 index 0000000000000..5f7c095cb1958 --- /dev/null +++ b/mods/_maps/hand/maps/hand-1.dmm @@ -0,0 +1,24794 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/space, +/area/space) +"ac" = ( +/obj/machinery/recharger/wallcharger{ + pixel_y = 24 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4; + icon_state = "intact" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_three) +"ag" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/bed/chair/shuttle/black{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"ai" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/vulcan{ + id_tag = "handpodtwo_pump_out_scrubber"; + power_rating = 15000; + scrubbing = "siphon"; + dir = 8 + }, +/obj/structure/handrail{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_two) +"aj" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4; + icon_state = "intact" + }, +/obj/machinery/door/airlock/external/glass/bolted/cycling{ + id_tag = "handpodone_port_shuttle_dock_interior_door"; + frequency = 1380 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "handpodone_port_shuttle_dock"; + pixel_y = -24; + pixel_x = 7 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_one) +"al" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_three) +"an" = ( +/obj/structure/catwalk, +/obj/machinery/light, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"ao" = ( +/obj/structure/bed/chair/padded/yellow, +/obj/floor_decal/corner/b_green/diagonal, +/obj/machinery/light/led/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_one) +"ar" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/table/steel_reinforced, +/obj/machinery/cell_charger, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"av" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/maints) +"aw" = ( +/obj/machinery/computer/ship/helm{ + accellimit = 0.005 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_one) +"ay" = ( +/obj/floor_decal/corner/b_green/three_quarters{ + dir = 1 + }, +/obj/structure/filingcabinet{ + pixel_x = 10 + }, +/obj/structure/filingcabinet{ + pixel_x = -10 + }, +/obj/structure/filingcabinet, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"az" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_three) +"aA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/glass/engineering, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/engineering/hallway) +"aE" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 5 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"aH" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/port) +"aP" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"aS" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "handtugone_shuttle_pump_out_external"; + power_rating = 25000 + }, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"aY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/lino, +/area/ship/hand/command/medic) +"bd" = ( +/obj/floor_decal/corner/b_green/three_quarters, +/obj/machinery/papershredder, +/obj/machinery/vending/wallmed2{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"bg" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/paint/pink, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_one) +"br" = ( +/obj/structure/table/rack, +/obj/item/wheelchair_kit, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -21; + pixel_y = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo/maints) +"bt" = ( +/obj/machinery/computer/ship/engines{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"bA" = ( +/obj/machinery/atmospherics/binary/pump, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_two) +"bB" = ( +/obj/item/cell/standard, +/obj/item/clothing/glasses/meson, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"bF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"bI" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/vulcan{ + id_tag = "handpodone_pump_out_internal" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_one) +"bK" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"bL" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"bU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/ship/hand/command/medic) +"bV" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, +/obj/machinery/door/blast/regular{ + id_tag = "handtugonerear"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/tug_one) +"bW" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/sign/warning/radioactive{ + dir = 1; + pixel_y = -32 + }, +/obj/structure/closet/secure_closet/engineering_electrical/bearcat{ + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"cb" = ( +/obj/machinery/door/blast/regular/open{ + name = "Bridge Blast Doors"; + id_tag = "hand_hallway" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hallway/lower/fore) +"ch" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/vulcan{ + id_tag = "handpodone_pump_out_internal" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_one) +"ck" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + id_tag = "handtugtwo_port_dock"; + pixel_y = 19; + tag_airpump = "handtugtwo_port_dock_pump"; + tag_exterior_door = "handtugtwo_port_dock_exterior_door"; + tag_interior_door = "handtugtwo_port_dock_interior_door"; + tag_interior_sensor = "handtugtwo_port_dock_sensor_chamber"; + frequency = 1380 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"cl" = ( +/obj/structure/bed/chair/shuttle/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_two) +"cn" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"cx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"cA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/maints) +"cG" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, +/obj/structure/handrail, +/obj/structure/sign/warning/internals_required{ + pixel_y = 28 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_three) +"cH" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "handtugone_shuttle_pump_out_internal" + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "handtugone_shuttle_sensor"; + pixel_x = -23 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_one) +"cK" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/paint/dark_gunmetal, +/obj/machinery/door/blast/regular{ + id_tag = "handtugtworear"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/tug_two) +"cN" = ( +/obj/wallframe_spawn/reinforced, +/obj/paint/sun, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine) +"cQ" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_one) +"cT" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"cU" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/industrial/danger, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"cV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 6 + }, +/obj/paint/red, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_two) +"cW" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/paint/red, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_two) +"cX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"cZ" = ( +/obj/structure/catwalk, +/obj/machinery/light, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_three) +"db" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"dd" = ( +/obj/structure/table/rack, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/bucket, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/engine) +"df" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"dl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"dp" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/structure/sign/warning/secure_area/armory{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"dr" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/port) +"du" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/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/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/crew/hallway/lower/aft) +"dw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "handtugone_port_dock_pump"; + power_rating = 25000 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/miner_three) +"dz" = ( +/obj/paint/red, +/turf/simulated/wall/r_wall, +/area/ship/hand/maintenance/engine/starboard) +"dA" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/industrial/danger{ + dir = 6 + }, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"dC" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/obj/paint/silver, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_two) +"dF" = ( +/obj/machinery/atmospherics/valve/open{ + dir = 4; + open = 0 + }, +/obj/overmap/visitable/ship/landable/pod_hand_one, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_one) +"dG" = ( +/obj/machinery/computer/shuttle_control/explore/graysontug/hand_two{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"dO" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"dS" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/structure/closet/medical_wall/filled{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_two) +"dT" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"ed" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/vulcan{ + id_tag = "carpod4_pump_out_internal" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_two) +"ee" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"eg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"eh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"em" = ( +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + controlled = 0; + dir = 1; + icon_state = "map_vent_in"; + pressure_checks = 2; + pressure_checks_default = 2; + use_power = 1 + }, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"ep" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + id_tag = "handtugone_port_dock"; + pixel_y = 19; + tag_airpump = "handtugone_port_dock_pump"; + tag_exterior_door = "handtugone_port_dock_exterior_door"; + tag_interior_door = "handtugone_port_dock_interior_door"; + tag_interior_sensor = "handtugone_port_dock_sensor_chamber"; + frequency = 1380 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_three) +"eq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"er" = ( +/obj/item/trash/candle, +/obj/machinery/light/led/small{ + dir = 6 + }, +/turf/simulated/floor/wood/ebony, +/area/ship/hand/crew/miner_one) +"es" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"et" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"eu" = ( +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/vulcan{ + dir = 1; + id_tag = "handpodtwo_pump_out_external" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_two) +"ew" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"ez" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/starboard) +"eA" = ( +/obj/structure/bed/padded, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/item/bedsheet/hop, +/turf/simulated/floor/lino, +/area/ship/hand/command) +"eB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -23; + pixel_y = 6 + }, +/turf/simulated/floor/lino, +/area/ship/hand/command) +"eL" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"eN" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/obj/paint/red, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_two) +"eO" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"eP" = ( +/obj/floor_decal/corner/b_green/diagonal, +/obj/machinery/light/led/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_one) +"eR" = ( +/obj/structure/table/rack, +/obj/item/rcd, +/obj/decal/cleanable/cobweb, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo/maints) +"eT" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 5 + }, +/obj/paint/red, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/tug_two) +"eV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 6 + }, +/obj/structure/bed/chair/shuttle/black{ + dir = 1 + }, +/obj/machinery/button/blast_door{ + pixel_x = 26; + name = "Blast Shutters"; + id_tag = "handpodone"; + pixel_y = 25 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_one) +"eY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"fa" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/structure/closet/crate/solar_assembly, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/port) +"fn" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/hologram/holopad/longrange/remoteship, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"fr" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/obj/machinery/door/blast/regular{ + id_tag = "handtugoneback" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_one) +"fw" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"fx" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower) +"fA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"fB" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"fE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"fJ" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + icon_state = "map" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"fK" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/starboard) +"fO" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/closet/secure_closet/engineering_welding{ + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"fQ" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/b_green/mono, +/obj/item/device/binoculars{ + pixel_y = 11 + }, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/pawn{ + pixel_y = -1; + pixel_x = 11 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"fR" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "handtugone_shuttle_pump_out_internal" + }, +/obj/machinery/button/blast_door{ + pixel_x = 22; + name = "Cargo Hold"; + id_tag = "handtugoneback"; + pixel_y = 8; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_one) +"fT" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"fV" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "handtugone_shuttle" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + cycle_to_external_air = 1; + frequency = 1380; + id_tag = "handtugone_shuttle"; + pixel_y = 25; + tag_airpump = "handtugone_shuttle_pump"; + tag_exterior_door = "handtugone_shuttle_outer"; + tag_exterior_sensor = "handtugone_shuttle_exterior_sensor"; + tag_interior_door = "handtugone_shuttle_inner"; + tag_interior_sensor = "handtugone_shuttle_sensor" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_one) +"fW" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "drone_engine"; + pixel_y = 22 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/starboard) +"fX" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/port) +"fY" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarstarboard) +"gb" = ( +/obj/machinery/door/blast/regular{ + id_tag = "handpodone" + }, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/vox, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/pod_hand_one) +"gd" = ( +/obj/floor_decal/corner/b_green/three_quarters{ + dir = 8 + }, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"gg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"gh" = ( +/obj/structure/lattice, +/turf/space, +/area/space) +"gi" = ( +/obj/machinery/power/port_gen/pacman{ + anchored = 1; + sheets = 25 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"gj" = ( +/obj/paint/sun, +/turf/simulated/wall/r_wall, +/area/ship/hand/maintenance/engine/port) +"gk" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"gl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"go" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_one) +"gu" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/industrial/danger{ + dir = 10 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"gv" = ( +/obj/machinery/door/airlock/hatch, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_one) +"gw" = ( +/obj/item/cell/standard, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"gz" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1380; + id_tag = "drone_engine_exterior_door"; + locked = 1 + }, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "drone_engine"; + pixel_y = -23; + pixel_z = 1 + }, +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/engineering/starboard) +"gD" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/disposalpipe/junction, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower) +"gF" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"gH" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"gK" = ( +/obj/paint/hull, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/tug_one) +"gL" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/vulcan{ + dir = 1; + id_tag = "handpodone_pump_out_external" + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/pod_hand_one) +"gQ" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/b_green/mono, +/obj/machinery/photocopier/faxmachine, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"gR" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "handtugtwo_shuttle_outer"; + frequency = 1380 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "handtugtwo_shuttle"; + pixel_y = 23; + pixel_z = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_two) +"gU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/item/storage/box/greenglowsticks, +/obj/item/storage/box/glowsticks, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"gX" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/port) +"gY" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/maintenance{ + name = "Maintenance Storage"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo/maints) +"gZ" = ( +/obj/machinery/atmospherics/omni/mixer{ + tag_north = 1; + tag_west = 2; + tag_south = 1 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"hg" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"hh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"hk" = ( +/obj/structure/bed/chair/padded/yellow, +/obj/floor_decal/corner/b_green/diagonal, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_one) +"ho" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-j2" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower/fore) +"hq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/lino, +/area/ship/hand/command) +"hx" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/bed/padded, +/obj/machinery/computer/ship/navigation/telescreen{ + pixel_y = 21 + }, +/obj/item/bedsheet/orange, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_three) +"hE" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/turf/space, +/area/space) +"hG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/paint/hull, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/tug_one) +"hH" = ( +/obj/machinery/power/smes/buildable/preset/on_full, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_one) +"hM" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"hO" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "drone_engine2_pump" + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/port) +"hS" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4; + icon_state = "intact" + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1380; + id_tag = "handtugone_port_dock_interior_door" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "handtugone_port_dock"; + pixel_y = -24; + pixel_x = 7 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_three) +"hV" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"hX" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"hY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"ia" = ( +/obj/machinery/computer/ship/sensors/spacer, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_one) +"ic" = ( +/obj/machinery/computer/ship/engines{ + dir = 8 + }, +/obj/structure/sign/warning/internals_required{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_two) +"if" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/obj/paint/pink, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_one) +"ig" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"ik" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/port) +"in" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"ir" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"is" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"it" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/lino, +/area/ship/hand/command/medic) +"iu" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/structure/railing/mapped, +/turf/space, +/area/space) +"iw" = ( +/obj/machinery/power/smes/buildable/preset/on_full, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_two) +"ix" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24; + req_access = list("ACCESS_HAND") + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"iF" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/command/bridge) +"iM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/tug_two) +"iP" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/structure/lattice, +/turf/space, +/area/space) +"iY" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/maintenance/engine/port) +"jb" = ( +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "handpodone_interior_sensor"; + pixel_x = 23; + pixel_y = 10 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/vulcan{ + id_tag = "handpodone_pump_out_scrubber"; + power_rating = 15000; + scrubbing = "siphon"; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_one) +"jh" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/structure/railing/mapped, +/obj/structure/lattice, +/turf/space, +/area/space) +"jk" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "drone_engine2_exterior_door"; + locked = 1; + frequency = 1380 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "drone_engine2"; + pixel_y = -23; + pixel_z = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/engineering/port) +"jm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarstarboard) +"jp" = ( +/obj/machinery/atmospherics/pipe/vent/high_volume{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/pod_hand_two) +"jw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"jx" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "handtugone_shuttle_inner"; + frequency = 1380 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "handtugone_shuttle"; + pixel_y = 22 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_one) +"jC" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"jH" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_two) +"jI" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_two) +"jN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/miner_one) +"jV" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/obj/structure/catwalk, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "handtugone_port_dock"; + pixel_y = -23; + pixel_z = 1 + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1380; + id_tag = "handtugone_port_dock_exterior_door"; + locked = 1 + }, +/obj/shuttle_landmark/handtugone/start, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_three) +"jW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/obj/structure/catwalk, +/obj/structure/sign/warning/vacuum{ + dir = 4; + pixel_x = -45 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_one) +"jY" = ( +/obj/machinery/computer/ship/helm{ + accellimit = 0.005; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"kb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/lino, +/area/ship/hand/command) +"kd" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_three) +"ke" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/starboard) +"kg" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"kh" = ( +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/vulcan{ + dir = 1; + id_tag = "handpodone_pump_out_external" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_one) +"km" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/structure/closet/crate/solar, +/obj/structure/catwalk, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/port) +"kn" = ( +/obj/structure/catwalk, +/obj/structure/lattice, +/turf/space, +/area/space) +"ks" = ( +/obj/floor_decal/corner/b_green/half, +/obj/structure/fireaxecabinet{ + pixel_y = -32 + }, +/obj/structure/holoplant, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"kD" = ( +/obj/machinery/atmospherics/valve/open, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"kE" = ( +/obj/paint/sun, +/turf/simulated/wall, +/area/ship/hand/crew/hallway/lower/aft) +"kI" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"kK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/fuel, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"kL" = ( +/obj/machinery/power/solar_control{ + dir = 4; + id_tag = "handsolarsport" + }, +/obj/structure/sign/warning/airlock{ + dir = 4; + pixel_x = -32 + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/port) +"kP" = ( +/obj/machinery/door/airlock/command{ + name = "Bridge"; + autoset_access = 0 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"kQ" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/space, +/area/space) +"kR" = ( +/obj/structure/catwalk, +/turf/space, +/area/space) +"kS" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"kU" = ( +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/shipsensors, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ship/hand/command/bridge) +"kV" = ( +/obj/submap_landmark/joinable_submap/away_hand, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"kW" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/sleeper/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"kY" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/lino, +/area/ship/hand/command/medic) +"kZ" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarport) +"la" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/blue{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"lb" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/paint/red, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/tug_one) +"lc" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"lf" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"lj" = ( +/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"lk" = ( +/obj/machinery/washing_machine, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_three) +"ln" = ( +/obj/machinery/light, +/obj/machinery/conveyor{ + dir = 8; + id = "hand_ore" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/hallway/lower) +"lp" = ( +/obj/floor_decal/industrial/loading{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hallway/lower) +"lq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"lr" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_one) +"lv" = ( +/obj/wallframe_spawn/reinforced/bare, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "hand_bridge" + }, +/obj/paint/brown, +/turf/simulated/floor/plating, +/area/ship/hand/command/bridge) +"ly" = ( +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"lz" = ( +/obj/machinery/power/smes/buildable/preset/on_full, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"lB" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"lF" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "handtugtwo_shuttle_pump_out_internal" + }, +/obj/machinery/button/blast_door{ + pixel_x = -22; + name = "Cargo Hold"; + id_tag = "handtugtwoback"; + pixel_y = 8; + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_two) +"lG" = ( +/obj/paint/brown, +/turf/simulated/wall, +/area/ship/hand/engineering/port) +"lH" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/space, +/area/space) +"lK" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/turf/space, +/area/space) +"lL" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/space, +/area/space) +"lN" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/green, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/ship/hand/command) +"lX" = ( +/obj/machinery/disposal, +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/railing/mapped, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/sign/warning/deathsposal{ + pixel_x = -32 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_two) +"mb" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_two) +"mi" = ( +/obj/machinery/power/solar{ + id_tag = "handsolarsport"; + name = "Port Solar Array" + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarport) +"mm" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1380; + id_tag = "drone_engine_interior_door" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/engineering/starboard) +"mx" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/starboard) +"mE" = ( +/obj/structure/lattice, +/obj/structure/catwalk, +/turf/space, +/area/space) +"mH" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"mI" = ( +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/maints) +"mN" = ( +/obj/floor_decal/corner/b_green/half{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"mQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/door/airlock/external/glass/bolted/cycling{ + id_tag = "handpodtwo_outer"; + frequency = 1380 + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "handpodtwo_exterior_sensor"; + pixel_x = -8; + pixel_y = -22 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "handpodtwo"; + pixel_y = 23; + pixel_z = 1 + }, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "handpodtwo_outer"; + name = "door bolts"; + pixel_y = -30; + dir = 1; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_two) +"nc" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_one) +"nj" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarport) +"nl" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_two) +"nn" = ( +/obj/floor_decal/corner/b_green/diagonal, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 21; + pixel_y = -8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_one) +"np" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/bed/chair/shuttle/black{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"nq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"nt" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_two) +"nx" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/vulcan{ + dir = 1; + id_tag = "handpodtwo_pump_out_external" + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/pod_hand_two) +"ny" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + pixel_x = 8; + name = "Rear Window Shutters"; + id_tag = "handtugonerear"; + pixel_y = -22; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"nE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/sleeper/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"nG" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/pod_hand_one) +"nJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"nM" = ( +/obj/structure/catwalk, +/obj/structure/ladder/up, +/obj/structure/lattice, +/turf/space, +/area/space) +"nO" = ( +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/maints) +"nP" = ( +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "handtugtwo_port_dock_sensor_chamber"; + pixel_x = 24 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "handtugtwo_port_dock_pump"; + power_rating = 25000 + }, +/obj/machinery/atmospherics/valve/shutoff/fuel{ + dir = 8 + }, +/obj/floor_decal/industrial/shutoff{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/miner_two) +"nS" = ( +/obj/machinery/power/port_gen/pacman{ + anchored = 0; + sheets = 25 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_HAND") + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_one) +"nT" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo/maints) +"nU" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "handtugone_shuttle" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_one) +"nY" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"oe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"oj" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/door/airlock/external/glass/bolted/cycling{ + id_tag = "handpodone_outer" + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "handpodone_exterior_sensor"; + pixel_x = 8; + pixel_y = -22 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "handpodone"; + pixel_y = 23; + pixel_z = 1 + }, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "handpodone_outer"; + name = "door bolts"; + pixel_y = -30; + dir = 1; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_one) +"ok" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/starboard) +"on" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"oo" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, +/obj/machinery/door/blast/regular{ + id_tag = "handtugone"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/tug_one) +"op" = ( +/obj/machinery/power/solar{ + id_tag = "handsolarsport"; + name = "Port Solar Array" + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarport) +"oy" = ( +/obj/machinery/atmospherics/unary/freezer{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/maintenance/engine/port) +"oB" = ( +/obj/machinery/atmospherics/valve/shutoff/fuel{ + dir = 8 + }, +/obj/machinery/embedded_controller/radio/airlock/tin_can{ + dir = 8; + frequency = 1380; + id_tag = "handpodone"; + pixel_x = 17; + pixel_y = 25 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/floor_decal/industrial/shutoff{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_one) +"oD" = ( +/obj/structure/table/standard{ + name = "plastic table frame" + }, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_three) +"oE" = ( +/obj/machinery/atmospherics/pipe/vent/high_volume{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/hand/maintenance/atmos/fuel) +"oF" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"oM" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarstarboard) +"oP" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/paint/silver, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_two) +"oU" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/blast/regular/open{ + name = "Bridge Blast Doors"; + id_tag = "hand_hallway" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hallway/lower/fore) +"oX" = ( +/obj/machinery/pointdefense, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ship/hand/command/bridge) +"oY" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_three) +"po" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"pr" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "handtugoner_shuttle_inner" + }, +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "handtugoner_shuttle"; + pixel_y = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_one) +"ps" = ( +/obj/machinery/power/port_gen/pacman/super/potato/reactor, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/engine) +"pu" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"py" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "handtugtwo_shuttle_inner"; + frequency = 1380 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "handtugtwo_shuttle"; + pixel_y = 22 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_two) +"pz" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + frequency = 1380; + id_tag = "drone_engine"; + pixel_y = 26; + tag_airpump = "drone_engine_pump"; + tag_chamber_sensor = "drone_engine_sensor_chamber"; + tag_exterior_door = "drone_engine_exterior_door"; + tag_interior_door = "drone_engine_interior_door" + }, +/obj/structure/catwalk, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/starboard) +"pB" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/paint/sun, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_one) +"pD" = ( +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"pE" = ( +/obj/machinery/computer/ship/sensors/spacer{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"pJ" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/tug_two) +"pM" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/engineering/starboard) +"pQ" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/machinery/computer/ship/navigation/telescreen{ + pixel_y = 21 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/purple, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_two) +"pR" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"pV" = ( +/obj/machinery/fabricator/hacked, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/starboard) +"pW" = ( +/obj/paint/sun, +/turf/simulated/wall, +/area/ship/hand/cargo/maints) +"pY" = ( +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"qa" = ( +/obj/structure/closet/secure_closet/guncabinet{ + req_access = list("ACCESS_HAND") + }, +/obj/item/gun/projectile/automatic/machine_pistol, +/obj/item/gun/projectile/automatic/machine_pistol, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/ammo_magazine/machine_pistol, +/obj/item/ammo_magazine/machine_pistol, +/obj/item/ammo_magazine/machine_pistol, +/obj/item/ammo_magazine/machine_pistol, +/obj/item/ammo_magazine/machine_pistol, +/obj/item/ammo_magazine/machine_pistol, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"qb" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 6 + }, +/obj/structure/cable/cyan, +/obj/machinery/power/apc/critical{ + name = "west bump"; + dir = 8; + pixel_x = -21; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_one) +"qc" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1380; + id_tag = "handtugtwo_port_dock_interior_door" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"qd" = ( +/obj/structure/dispenser/oxygen, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"qf" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/clothing/head/helmet/solgov/pilot/fleet, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/ship/hand/command) +"qi" = ( +/obj/item/gun/energy/incendiary_laser, +/obj/structure/displaycase{ + req_access = list("ACCESS_HAND_CAPTAIN") + }, +/turf/simulated/floor/lino, +/area/ship/hand/command) +"qm" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "drone_engine2_pump" + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "drone_engine2_sensor_chamber"; + pixel_x = -24 + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/port) +"qo" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "handtugoner_shuttle_outer" + }, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "handtugoner_shuttle"; + pixel_y = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_one) +"qp" = ( +/obj/structure/bed/chair/padded/yellow, +/obj/floor_decal/corner/b_green/diagonal, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_one) +"qs" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"qw" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"qx" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/hand/maintenance/atmos/fuel) +"qB" = ( +/obj/structure/railing/mapped, +/obj/machinery/shipsensors, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_two) +"qE" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/lino, +/area/ship/hand/command) +"qF" = ( +/obj/machinery/computer/ship/helm{ + accellimit = 0.005 + }, +/obj/floor_decal/corner/b_green/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"qG" = ( +/obj/machinery/computer/shuttle_control/explore/pod_hand_two, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_two) +"qI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "handtugtwo_port_dock_pump"; + power_rating = 25000 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/miner_two) +"qJ" = ( +/obj/machinery/light/led/small, +/turf/simulated/floor/wood/ebony, +/area/ship/hand/crew/miner_one) +"qK" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/dark_gunmetal, +/obj/machinery/door/blast/regular{ + id_tag = "handtugtworear"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/tug_two) +"qR" = ( +/obj/machinery/computer/shuttle_control/explore/graysontug/hand_one{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"qS" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"qT" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24; + req_access = list("ACCESS_HAND") + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"qU" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "drone_engine_pump"; + power_rating = 25000 + }, +/obj/structure/handrail{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/starboard) +"qV" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1380; + id_tag = "handtugtwor_shuttle_outer" + }, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "handtugtwor_shuttle"; + pixel_y = 8; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/tug_two) +"qZ" = ( +/obj/structure/table/rack, +/obj/item/shield/riot, +/obj/item/shield/riot, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light_switch{ + pixel_x = 24; + dir = 8; + pixel_y = 9 + }, +/obj/item/shield/riot/metal, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"rc" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/paint/vox, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_one) +"ri" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/cable/yellow, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_one) +"rj" = ( +/obj/floor_decal/corner/b_green/half{ + dir = 1 + }, +/obj/structure/filingcabinet/chestdrawer, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"rk" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/b_green/mono, +/obj/random/firstaid, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"rm" = ( +/obj/machinery/power/port_gen/pacman{ + anchored = 0; + sheets = 25 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/port) +"ro" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/obj/structure/table/standard{ + name = "plastic table frame" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_two) +"rp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"rq" = ( +/obj/structure/stairs/north, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower/aft) +"rr" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_two) +"rs" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/cable/yellow, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_two) +"rt" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/machinery/sleeper/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"ru" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/obj/structure/catwalk, +/obj/structure/sign/warning/vacuum{ + dir = 4; + pixel_x = -45 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_three) +"rv" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 21; + pixel_y = -8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_three) +"rD" = ( +/obj/structure/railing/mapped, +/obj/machinery/shipsensors, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_one) +"rE" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/floor_decal/industrial/outline, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"rF" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/item/clothing/suit/bio_suit/anomaly/lethal, +/obj/item/clothing/suit/bio_suit/anomaly/lethal, +/obj/item/clothing/suit/bio_suit/anomaly/lethal, +/obj/item/clothing/suit/bio_suit/anomaly/lethal, +/obj/item/clothing/head/bio_hood/anomaly/lethal, +/obj/item/clothing/head/bio_hood/anomaly/lethal, +/obj/item/clothing/head/bio_hood/anomaly/lethal, +/obj/item/clothing/head/bio_hood/anomaly/lethal, +/obj/item/shovel, +/obj/item/shovel, +/obj/item/shovel, +/obj/item/shovel, +/obj/structure/closet/crate/secure/gear, +/obj/item/device/scanner/price, +/obj/item/device/scanner/price, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/starboard) +"rI" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 1; + start_pressure = 4559.63 + }, +/obj/floor_decal/industrial/outline, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"rJ" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"rK" = ( +/obj/structure/table/rack, +/obj/item/airlock_electronics, +/obj/item/airlock_electronics, +/obj/item/airlock_electronics, +/obj/item/airlock_electronics, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo/maints) +"rL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/visible, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_two) +"rM" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 10 + }, +/obj/structure/cable/cyan, +/obj/machinery/power/apc/critical{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_two) +"rQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower/fore) +"rR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"rS" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"rZ" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 1; + start_pressure = 4559.63 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"sc" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"sh" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/obj/paint/red, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/tug_one) +"sk" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 10 + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"sm" = ( +/obj/wallframe_spawn/reinforced/bare, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "hand_bridge" + }, +/obj/paint/brown, +/turf/simulated/floor/plating, +/area/ship/hand/command/bridge) +"sn" = ( +/obj/paint/brown, +/turf/simulated/wall, +/area/ship/hand/crew/miner_three) +"sp" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/decal/cleanable/cobweb2, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/port) +"st" = ( +/obj/structure/catwalk, +/obj/machinery/light/led/small, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_one) +"su" = ( +/obj/machinery/door/blast/regular{ + id_tag = "carpod4" + }, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/silver, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/pod_hand_two) +"sw" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"sy" = ( +/obj/structure/catwalk, +/turf/space, +/area/ship/hand/maintenance/solarport) +"sA" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/decal/cleanable/dirt, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/steel_dirty, +/area/ship/hand/crew/miner_two) +"sB" = ( +/obj/machinery/hologram/holopad/longrange/remoteship, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_one) +"sD" = ( +/obj/paint/red, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/tug_two) +"sE" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "hand_ore" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/hallway/lower) +"sF" = ( +/obj/paint/pink, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_one) +"sI" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"sK" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"sL" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"sQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_three) +"sT" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"sX" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"tb" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/space, +/area/space) +"td" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + pixel_x = -8; + name = "Rear Window Shutters"; + id_tag = "handtugtworear"; + pixel_y = -22; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"ti" = ( +/obj/machinery/atmospherics/pipe/vent/high_volume{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine) +"tl" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/tank/air{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_two) +"tm" = ( +/obj/floor_decal/corner/b_green/diagonal, +/obj/machinery/computer/ship/navigation/telescreen{ + pixel_y = 21 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_one) +"tn" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"tp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/miner_two) +"ts" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"tt" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"tu" = ( +/obj/structure/reagent_dispensers/coolanttank, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/engine) +"tB" = ( +/obj/machinery/power/solar{ + id_tag = "handsolarsstarboard" + }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarstarboard) +"tC" = ( +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/starboard) +"tD" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/starboard) +"tE" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/b_green/mono, +/obj/item/storage/box/cups{ + pixel_y = 11; + pixel_x = 4 + }, +/obj/item/storage/slide_projector, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"tF" = ( +/obj/paint/sun, +/turf/simulated/wall, +/area/ship/hand/maintenance/atmos/fuel) +"tM" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"tN" = ( +/obj/machinery/power/solar{ + id_tag = "handsolarsstarboard" + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarstarboard) +"tO" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"tQ" = ( +/obj/machinery/computer/ship/engines{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"tR" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_three) +"tT" = ( +/obj/structure/bed/padded, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_x = 24; + dir = 8; + pixel_y = -5 + }, +/obj/item/bedsheet/medical, +/turf/simulated/floor/lino, +/area/ship/hand/command/medic) +"tX" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"tY" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 6 + }, +/obj/structure/catwalk, +/obj/machinery/door/airlock/external/glass/bolted/cycling{ + frequency = 1380; + id_tag = "handpodtwo_port_shuttle_dock_exterior_door"; + locked = 1 + }, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "handpodtwo_port_shuttle_dock"; + pixel_y = -23; + pixel_z = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/shuttle_landmark/pod_hand_two/start, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "handpodtwo_port_shuttle_dock_exterior_door"; + name = "door bolts"; + pixel_y = 30; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"uf" = ( +/obj/paint/brown, +/turf/simulated/wall, +/area/ship/hand/crew/hallway/lower) +"ug" = ( +/obj/paint/brown, +/turf/simulated/wall, +/area/ship/hand/cargo/emergency_armory) +"uh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/maints) +"ul" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1380; + id_tag = "handtugtwor_shuttle_inner" + }, +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "handtugtwor_shuttle"; + pixel_y = 4; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/tug_two) +"uq" = ( +/obj/structure/table/rack, +/obj/item/stack/net/thirty, +/obj/decal/cleanable/cobweb2, +/obj/item/stack/net/thirty, +/obj/item/stack/net/thirty, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo/maints) +"ur" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/engine) +"us" = ( +/obj/structure/table/rack, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_HAND") + }, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/item/inflatable_dispenser, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"ut" = ( +/obj/machinery/door/airlock/command{ + name = "Bridge"; + autoset_access = 0 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"uz" = ( +/obj/machinery/suit_storage_unit/mining{ + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_three) +"uA" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/structure/sign/warning/hot_exhaust{ + dir = 8; + pixel_x = 32 + }, +/turf/space, +/area/space) +"uE" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/command) +"uG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/paint/red, +/turf/simulated/wall/r_wall, +/area/ship/hand/maintenance/engine/starboard) +"uM" = ( +/obj/structure/foamedmetal, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"uN" = ( +/obj/machinery/door/airlock/multi_tile/atmos{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/atmos/fuel) +"uO" = ( +/turf/simulated/floor/wood/ebony, +/area/ship/hand/crew/miner_one) +"uP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"uQ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"uR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"uS" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_one) +"uV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"uZ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/engine) +"vc" = ( +/obj/machinery/portable_atmospherics/powered/pump, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/port) +"vd" = ( +/obj/machinery/atmospherics/pipe/vent/high_volume{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/pod_hand_one) +"vf" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "HandCOVent"; + name = "Heating Chamber Vent" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/hand/maintenance/atmos/fuel) +"vg" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/starboard) +"vi" = ( +/obj/floor_decal/corner/b_green/half, +/obj/machinery/photocopier, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"vm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/miner_one) +"vo" = ( +/obj/machinery/power/smes/buildable/max_cap_in_out, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/port) +"vp" = ( +/obj/paint/silver, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_two) +"vt" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/floor_decal/industrial/outline/red, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"vu" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/port) +"vw" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"vx" = ( +/obj/machinery/light/led/small{ + dir = 8 + }, +/turf/simulated/floor/wood/ebony, +/area/ship/hand/crew/miner_one) +"vA" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"vD" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_one) +"vK" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_two) +"vP" = ( +/obj/machinery/computer/ship/sensors/spacer{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"vT" = ( +/obj/paint/sun, +/turf/simulated/wall/ocp_wall, +/area/ship/hand/maintenance/atmos/fuel) +"vW" = ( +/obj/structure/closet/jcloset/sierra, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"vX" = ( +/obj/structure/table/rack, +/obj/item/storage/firstaid/radiation{ + pixel_y = 8 + }, +/obj/item/storage/firstaid/toxin, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine) +"vY" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"wa" = ( +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"wd" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 10 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"we" = ( +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarport) +"wf" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/disposaloutlet{ + dir = 4 + }, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarstarboard) +"wj" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/structure/lattice, +/turf/space, +/area/space) +"wm" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower/fore) +"wn" = ( +/obj/structure/stairs/south, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower/fore) +"wp" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/table/rack, +/obj/item/storage/briefcase/inflatable, +/obj/item/shuttle_beacon, +/obj/item/device/flashlight/lamp/floodlamp, +/obj/random/toolbox, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_two) +"wq" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/command/medic) +"wz" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/circuitboard/smes, +/obj/item/stock_parts/circuitboard/smes, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo/maints) +"wD" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, +/obj/structure/handrail, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/sign/warning/internals_required{ + pixel_y = 28 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"wE" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"wG" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 1; + start_pressure = 4559.63 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"wH" = ( +/obj/floor_decal/corner/b_green/diagonal, +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/machinery/light/led/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_one) +"wL" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_two) +"wP" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/structure/lattice, +/turf/space, +/area/space) +"wQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/atmos/fuel) +"wS" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/paint/sun, +/turf/simulated/wall/ocp_wall, +/area/ship/hand/maintenance/atmos/fuel) +"wT" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/engineering/port) +"wU" = ( +/obj/paint/brown, +/turf/simulated/wall, +/area/ship/hand/crew/hallway/lower/aft) +"wY" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/port) +"xi" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/obj/structure/foamedmetal, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/starboard) +"xj" = ( +/obj/machinery/atmospherics/valve/shutoff/fuel{ + dir = 8 + }, +/obj/machinery/embedded_controller/radio/airlock/tin_can{ + dir = 4; + frequency = 1380; + id_tag = "handpodtwo"; + pixel_x = -17; + pixel_y = 25 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/floor_decal/industrial/shutoff{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_two) +"xn" = ( +/obj/paint/brown, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/hand/command/bridge) +"xp" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 9 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/hand/maintenance/atmos/fuel) +"xs" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/starboard) +"xu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/atmos{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/atmos) +"xw" = ( +/obj/decal/cleanable/dirt, +/obj/item/clothing/under/grayson, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"xx" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"xy" = ( +/obj/machinery/space_heater, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"xA" = ( +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"xD" = ( +/obj/structure/bed/chair/comfy/blue, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/lino, +/area/ship/hand/command) +"xG" = ( +/obj/machinery/mineral/processing_unit{ + input_turf = 8; + output_turf = 4 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "hand_ore" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/hallway/lower) +"xN" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"xO" = ( +/obj/machinery/igniter, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/hand/maintenance/atmos/fuel) +"xU" = ( +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"yc" = ( +/obj/structure/table/woodentable/walnut, +/obj/structure/filingcabinet/wallcabinet{ + pixel_y = 0; + pixel_x = -30 + }, +/turf/simulated/floor/lino, +/area/ship/hand/command/medic) +"yk" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 6 + }, +/obj/structure/catwalk, +/obj/structure/sign/warning/vacuum{ + dir = 8; + pixel_x = 32 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "handpodtwo_port_shuttle_dock"; + pixel_x = 32; + pixel_y = 8 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"yl" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + frequency = 1380; + id_tag = "handpodtwo_port_shuttle_dock"; + pixel_y = 26; + tag_airpump = "handpodtwo_port_shuttle_dock_pump"; + tag_chamber_sensor = "handpodtwo_port_shuttle_dock_sensor_chamber"; + tag_exterior_door = "handpodtwo_port_shuttle_dock_exterior_door"; + tag_interior_door = "handpodtwo_port_shuttle_dock_interior_door" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"ym" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/door/airlock/external/glass/bolted/cycling{ + frequency = 1380; + id_tag = "handpodtwo_port_shuttle_dock_interior_door" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"ys" = ( +/obj/structure/closet/secure_closet/guncabinet{ + req_access = list("ACCESS_HAND") + }, +/obj/item/gun/energy/plasmastun, +/obj/item/gun/energy/plasmastun, +/obj/random/energy, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"yw" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/hand/command/medic) +"yx" = ( +/obj/paint/sun, +/turf/simulated/wall, +/area/ship/hand/engineering/hallway) +"yA" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/maints) +"yC" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"yH" = ( +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"yJ" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/table/steel_reinforced, +/obj/machinery/cell_charger, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"yM" = ( +/obj/wallframe_spawn/reinforced_phoron/hull, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/paint/sun, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/atmos/fuel) +"yN" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"yO" = ( +/obj/structure/table/rack, +/obj/item/device/scanner/health, +/obj/item/storage/belt/utility/full, +/obj/item/storage/bag/fossils, +/obj/item/shuttle_beacon, +/obj/item/device/multitool, +/obj/item/tape_roll, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"yT" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/maintenance/engine/port) +"yU" = ( +/obj/paint/red, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/tug_one) +"yW" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"zd" = ( +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/obj/random/contraband, +/obj/random/contraband, +/obj/random/contraband, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_HAND") + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"zl" = ( +/obj/floor_decal/corner/b_green/diagonal, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_one) +"zm" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/port) +"zo" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 6 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_one) +"zr" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"zt" = ( +/obj/item/cell/standard, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"zw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower) +"zx" = ( +/obj/structure/bed/chair/shuttle/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_one) +"zz" = ( +/obj/machinery/computer/ship/helm{ + accellimit = 0.005; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"zH" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/item/paper/hand/engineer, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"zJ" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/industrial/danger, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"zO" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/port) +"zP" = ( +/obj/structure/closet, +/obj/item/clothing/under/fa/vacsuit, +/obj/item/storage/pill_bottle/three_eye, +/obj/item/stamp/chameleon, +/obj/item/clothing/head/helmet, +/obj/item/clothing/suit/armor/pcarrier/medium, +/obj/item/gun/energy/toxgun, +/obj/item/clothing/glasses/hud/health, +/obj/item/device/scanner/health, +/obj/item/rig/medical/equipped{ + req_access = list("ACCESS_HAND_MED") + }, +/obj/item/reagent_containers/food/drinks/bottle/pwine, +/obj/item/clothing/head/surgery/teal, +/obj/item/clothing/suit/surgicalapron, +/obj/item/clothing/under/rank/medical/scrubs/teal, +/obj/item/clothing/shoes/white, +/obj/item/clothing/accessory/storage/holster/waist, +/turf/simulated/floor/lino, +/area/ship/hand/command/medic) +"zT" = ( +/obj/structure/table/rack, +/obj/item/pickaxe/drill, +/obj/item/device/radio, +/obj/item/device/gps, +/obj/item/device/scanner/mining, +/obj/item/tape_roll, +/obj/item/device/geiger, +/obj/item/pickaxe/hammer, +/obj/item/clothing/glasses/meson, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"zV" = ( +/obj/structure/cable{ + d1 = 16; + d2 = 0; + icon_state = "16-0" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers, +/obj/machinery/atmospherics/pipe/zpipe/up/supply, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/up, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower/fore) +"zW" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "handtugtwo_shuttle" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + cycle_to_external_air = 1; + frequency = 1380; + id_tag = "handtugtwo_shuttle"; + pixel_y = 25; + tag_airpump = "handtugtwo_shuttle_pump"; + tag_exterior_door = "handtugtwo_shuttle_outer"; + tag_exterior_sensor = "handtugtwo_shuttle_exterior_sensor"; + tag_interior_door = "handtugtwo_shuttle_inner"; + tag_interior_sensor = "handtugtwo_shuttle_sensor" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_two) +"zX" = ( +/obj/structure/sign/warning/compressed_gas{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"Af" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"Ah" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarstarboard) +"Aj" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"Ak" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"Al" = ( +/obj/structure/fuel_port, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/obj/paint/silver, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_two) +"An" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_three) +"At" = ( +/obj/machinery/atmospherics/portables_connector, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Au" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1; + icon_state = "map-scrubbers" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"Av" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/vulcan{ + id_tag = "handpodone_pump_out_scrubber"; + power_rating = 15000; + scrubbing = "siphon"; + dir = 4 + }, +/obj/structure/handrail{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_one) +"Ax" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/b_green/mono, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"Az" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hallway/lower) +"AA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "handpodone_port_shuttle_dock_pump"; + power_rating = 25000 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/miner_one) +"AH" = ( +/obj/structure/closet/crate/uranium, +/obj/machinery/power/apc/critical{ + name = "west bump"; + dir = 8; + pixel_x = -21; + req_access = list("ACCESS_HAND") + }, +/obj/structure/cable, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine) +"AL" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/obj/paint/red, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/tug_two) +"AN" = ( +/obj/machinery/door/airlock/engineering, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/engine/starboard) +"AO" = ( +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"AP" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"AU" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/railing/mapped, +/obj/structure/bed/chair/padded/yellow{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_three) +"AV" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/pod_hand_two) +"AY" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "handtugtwo_shuttle_pump_out_external"; + power_rating = 25000 + }, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"AZ" = ( +/obj/machinery/computer/ship/navigation, +/obj/floor_decal/corner/b_green/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"Bg" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/door/airlock/engineering, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/engine/port) +"Bk" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/starboard) +"Bp" = ( +/obj/structure/ore_box, +/obj/spider/stickyweb, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"Bq" = ( +/obj/structure/table/rack, +/obj/item/cell/high, +/obj/item/cell/high, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Bs" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4; + name = "fuel input" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Bv" = ( +/obj/paint/sun, +/turf/simulated/wall/r_wall, +/area/space) +"Bx" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower/fore) +"By" = ( +/obj/machinery/computer/ship/engines, +/obj/floor_decal/corner/b_green/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"BB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/light, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower) +"BD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/glass/mining, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hallway/lower/aft) +"BE" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hallway/lower) +"BF" = ( +/obj/machinery/radio_beacon, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"BH" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"BK" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_one) +"BL" = ( +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/starboard) +"BN" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/circuitboard/batteryrack, +/obj/item/stock_parts/circuitboard/batteryrack, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo/maints) +"BO" = ( +/obj/paint/sun, +/turf/simulated/wall, +/area/ship/hand/maintenance/atmos) +"BP" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/starboard) +"BT" = ( +/obj/structure/closet/radiation, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine) +"BV" = ( +/obj/structure/cable{ + 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{ + dir = 8 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower/fore) +"BZ" = ( +/obj/paint/brown, +/turf/simulated/wall, +/area/ship/hand/engineering/starboard) +"Cd" = ( +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/item/storage/mirror{ + pixel_x = -23; + pixel_y = 9 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_three) +"Ce" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/miner_two) +"Ci" = ( +/obj/structure/table/rack, +/obj/item/clothing/head/helmet, +/obj/item/clothing/head/helmet, +/obj/item/clothing/head/helmet, +/obj/item/clothing/head/helmet, +/obj/item/clothing/suit/armor/pcarrier/medium, +/obj/item/clothing/suit/armor/pcarrier/medium, +/obj/item/clothing/suit/armor/pcarrier/medium, +/obj/item/clothing/suit/armor/pcarrier/medium, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"Cj" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/miner_three) +"Cl" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "hand_ore" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/hallway/lower) +"Cm" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Cn" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/table/standard{ + name = "plastic table frame" + }, +/obj/random/smokes, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_three) +"Co" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/corner/b_green/mono, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/corp{ + pixel_y = -1; + pixel_x = -3 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"Cp" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_HAND") + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"Cr" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"Cu" = ( +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"Cv" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/atmos) +"Cy" = ( +/obj/structure/closet/crate/secure/weapon, +/obj/item/beartrap, +/obj/item/beartrap, +/obj/item/beartrap, +/obj/item/beartrap, +/obj/item/beartrap, +/obj/item/beartrap, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"CA" = ( +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/machinery/atmospherics/valve/shutoff/fuel, +/obj/floor_decal/industrial/shutoff, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "nuke_shuttle_dock_airlock_sensor"; + master_tag = "handtugone_shuttle_exterior_sensor"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"CB" = ( +/obj/paint/vox, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_one) +"CC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/techfloor/orange, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/maints) +"CE" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 5 + }, +/obj/paint/sun, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_one) +"CF" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"CG" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"CL" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "hand_ore" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/hallway/lower) +"CM" = ( +/obj/paint/sun, +/turf/simulated/wall/r_wall, +/area/ship/hand/maintenance/engine) +"CT" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/paint/red, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_two) +"CV" = ( +/obj/machinery/atmospherics/binary/pump, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_one) +"Db" = ( +/obj/structure/closet/secure_closet/guncabinet{ + req_access = list("ACCESS_HAND") + }, +/obj/random/biggun, +/obj/random/biggun, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"Dc" = ( +/obj/machinery/door/airlock/command{ + name = "Captain"; + autoset_access = 0 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command) +"Df" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"Dj" = ( +/obj/machinery/atmospherics/unary/heater{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/maintenance/engine/port) +"Dk" = ( +/obj/paint/brown, +/turf/simulated/wall, +/area/ship/hand/crew/miner_one) +"Dp" = ( +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Dq" = ( +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/floodlight{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"Dt" = ( +/obj/machinery/computer/shuttle_control/explore/pod_hand_one, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_one) +"Dv" = ( +/obj/structure/cable, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/lino, +/area/ship/hand/command/medic) +"Dx" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 4 + }, +/obj/machinery/meter, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/port) +"Dy" = ( +/obj/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/port) +"Dz" = ( +/obj/machinery/power/solar_control{ + dir = 8; + id_tag = "handsolarsstarboard" + }, +/obj/structure/sign/warning/airlock{ + dir = 8; + pixel_x = 32 + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/starboard) +"DC" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/starboard) +"DE" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/light/led/small{ + dir = 8 + }, +/turf/simulated/floor/wood/ebony, +/area/ship/hand/crew/miner_one) +"DG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"DJ" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/paint/sun, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_one) +"DM" = ( +/obj/structure/catwalk, +/obj/structure/sign/warning/hot_exhaust{ + pixel_y = 32 + }, +/turf/space, +/area/space) +"DN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"DT" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"DV" = ( +/obj/machinery/power/smes/buildable/preset/on_full, +/obj/structure/cable, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine) +"Ea" = ( +/obj/floor_decal/techfloor/orange{ + dir = 5 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/maints) +"Ed" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"Ee" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarport) +"Eg" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"Ei" = ( +/obj/structure/cable{ + 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{ + dir = 8 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower) +"Eq" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/port) +"Eu" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"Ew" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"Ey" = ( +/obj/structure/table/rack, +/obj/item/clothing/mask/balaclava, +/obj/item/clothing/mask/balaclava, +/obj/item/clothing/mask/balaclava, +/obj/item/clothing/mask/balaclava, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"EC" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"EE" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "handtugtwor_shuttle_pump" + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + cycle_to_external_air = 1; + frequency = 1380; + id_tag = "handtugtwor_shuttle"; + tag_airpump = "handtugtwor_shuttle_pump"; + tag_exterior_door = "handtugtwor_shuttle_outer"; + tag_exterior_sensor = "handtugtwor_shuttle_exterior_sensor"; + tag_interior_door = "handtugtwor_shuttle_inner"; + tag_interior_sensor = "handtugtwor_shuttle_sensor"; + dir = 8; + pixel_x = 22 + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "handtugtwor_shuttle_sensor"; + pixel_x = -23 + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/tug_two) +"EI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/mining, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hallway/lower/aft) +"EN" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/tank/air{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_one) +"EO" = ( +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "handpodtwo_interior_sensor"; + pixel_x = -23; + pixel_y = 10 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/vulcan{ + id_tag = "handpodtwo_pump_out_scrubber"; + power_rating = 15000; + scrubbing = "siphon"; + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_two) +"ER" = ( +/obj/floor_decal/corner/b_green/three_quarters{ + dir = 4 + }, +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"EU" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 29 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"EY" = ( +/obj/item/gun/energy/laser/xenofauna, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"Fa" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/starboard) +"Fd" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 4 + }, +/obj/floor_decal/corner/b_green/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"Ff" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"Fi" = ( +/obj/structure/table/rack, +/obj/item/pickaxe/drill, +/obj/item/device/radio, +/obj/item/device/gps, +/obj/item/device/scanner/mining, +/obj/item/tape_roll, +/obj/item/device/geiger, +/obj/decal/cleanable/cobweb{ + dir = 4 + }, +/obj/item/clothing/under/hephaestus, +/obj/structure/sign/poster{ + pixel_x = -32 + }, +/obj/item/clothing/glasses/meson, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"Fj" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"Fm" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_one) +"Fo" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"Fp" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_three) +"Fq" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/structure/foamedmetal, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/starboard) +"Fs" = ( +/obj/shuttle_landmark/nav_hand/nav1, +/turf/space, +/area/space) +"Fw" = ( +/obj/machinery/door/window, +/obj/machinery/door/window{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/engine) +"Fy" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Fz" = ( +/obj/machinery/atmospherics/valve/open{ + dir = 4; + open = 0 + }, +/obj/overmap/visitable/ship/landable/pod_hand_two, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_two) +"FB" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine) +"FC" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/closet/excavation, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/port) +"FE" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/port) +"FF" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"FG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"FH" = ( +/obj/machinery/door/airlock/multi_tile/security{ + name = "Armory"; + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo/emergency_armory) +"FI" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"FP" = ( +/obj/machinery/atmospherics/unary/tank/oxygen{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"FQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 6 + }, +/obj/paint/red, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/tug_one) +"FS" = ( +/obj/paint/red, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_two) +"FT" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 10; + icon_state = "intact" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/hand/maintenance/atmos/fuel) +"FU" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_two) +"FW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"Gd" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/structure/catwalk, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/port) +"Ge" = ( +/obj/structure/railing/mapped, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"Gg" = ( +/obj/structure/cable/cyan, +/obj/machinery/power/apc/critical{ + name = "west bump"; + dir = 8; + pixel_x = -21; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"Gh" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 9 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"Gi" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"Gk" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/table/rack, +/obj/item/gun/energy/laser/xenofauna, +/obj/item/clothing/under/fa/vacsuit, +/obj/item/clothing/under/fa/vacsuit, +/obj/structure/sign/poster{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_three) +"Gm" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"Gn" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/starboard) +"Gq" = ( +/obj/floor_decal/corner/b_green/diagonal, +/obj/machinery/light/led/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_one) +"Gu" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"Gx" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/decal/cleanable/dirt, +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/turf/simulated/floor/steel_dirty, +/area/ship/hand/crew/miner_two) +"Gy" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/recharger/wallcharger{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4; + icon_state = "intact" + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"Gz" = ( +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 6 + }, +/obj/structure/closet/crate/plastic, +/obj/random/toolbox, +/obj/item/shuttle_beacon, +/obj/item/stack/net/thirty, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"GC" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"GF" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/structure/closet/medical_wall/filled{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_one) +"GH" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 9 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"GM" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"GN" = ( +/obj/floor_decal/corner/b_green/half{ + dir = 1 + }, +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"GP" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/crew/hallway/lower/aft) +"GV" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + frequency = 1380; + id_tag = "handpodone_port_shuttle_dock"; + pixel_y = 26; + tag_airpump = "handpodone_port_shuttle_dock_pump"; + tag_chamber_sensor = "handpodone_port_shuttle_dock_sensor_chamber"; + tag_exterior_door = "handpodone_port_shuttle_dock_exterior_door"; + tag_interior_door = "handpodone_port_shuttle_dock_interior_door" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_one) +"GW" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/b_green/mono, +/obj/random/donkpocket_box, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"Hc" = ( +/obj/paint/brown, +/turf/simulated/wall, +/area/ship/hand/crew/miner_two) +"Hd" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/port) +"He" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Hh" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/hand/maintenance/atmos/fuel) +"Hk" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/decal/cleanable/dirt, +/obj/item/broken_bottle, +/obj/decal/cleanable/blood/drip, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/steel_dirty, +/area/ship/hand/crew/miner_two) +"Hl" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"Hm" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"Hn" = ( +/obj/floor_decal/industrial/loading{ + dir = 8 + }, +/obj/structure/sign/warning/moving_parts{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hallway/lower) +"Ho" = ( +/obj/structure/catwalk, +/obj/structure/ladder/up, +/turf/space, +/area/space) +"Hy" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_two) +"Hz" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "handtugone_shuttle_outer"; + frequency = 1380 + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "handtugone_shuttle"; + pixel_y = 23; + pixel_z = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_one) +"HD" = ( +/obj/machinery/hologram/holopad/longrange/remoteship, +/obj/floor_decal/corner/b_green/mono, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"HE" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/reagent_dispensers/water_cooler{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -21; + pixel_y = -8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_two) +"HH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"HJ" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarport) +"HK" = ( +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + controlled = 0; + dir = 1; + icon_state = "map_vent_in"; + pressure_checks = 2; + pressure_checks_default = 2; + use_power = 1 + }, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"HL" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"HQ" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/bed/padded, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/obj/item/bedsheet/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_two) +"HR" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_one) +"HS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24; + req_access = list("ACCESS_HAND") + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"HX" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/conveyor_switch/oneway{ + id = "hand_ore" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/hallway/lower) +"Ia" = ( +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower/aft) +"Ib" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/miner_three) +"Ie" = ( +/obj/machinery/mining/brace, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"Ii" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_one) +"Ij" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "handtugtwo_shuttle_pump_out_internal" + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "handtugtwo_shuttle_sensor"; + pixel_x = 23 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_two) +"Im" = ( +/obj/machinery/power/port_gen/pacman{ + anchored = 0; + sheets = 25 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/maintenance/engine/port) +"In" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower) +"Iq" = ( +/obj/machinery/door/airlock/hatch{ + locked = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/barricade, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"Ir" = ( +/obj/structure/closet, +/obj/item/clothing/ring/fleet, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/item/clothing/suit/armor/pcarrier/navy, +/obj/item/clothing/under/fa/vacsuit, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/clothing/glasses/tacgoggles, +/obj/item/clothing/shoes/laceup, +/obj/item/clothing/accessory/tunic/exec/heph, +/obj/item/clothing/under/formal/vest, +/obj/item/clothing/accessory/storage/holster/waist, +/turf/simulated/floor/lino, +/area/ship/hand/command) +"Is" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine) +"Iv" = ( +/obj/paint/red, +/turf/simulated/wall/r_wall, +/area/ship/hand/maintenance/engine/port) +"Iy" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/door/airlock/multi_tile/glass/engineering{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/crew/hallway/lower/aft) +"Iz" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/railing/mapped, +/obj/structure/table/standard{ + name = "plastic table frame" + }, +/obj/random/smokes, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_two) +"II" = ( +/obj/machinery/atmospherics/valve/open, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"IN" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"IW" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/hallway/lower) +"IY" = ( +/obj/machinery/recharger/wallcharger{ + pixel_y = 24 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4; + icon_state = "intact" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"Jc" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/port) +"Jh" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Ji" = ( +/obj/structure/fireaxecabinet{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Jm" = ( +/obj/machinery/computer/mining, +/obj/paint/brown, +/obj/structure/wall_frame/standard, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower) +"Jp" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/obj/paint/sun, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_one) +"Jt" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"Jx" = ( +/obj/machinery/mining/drill, +/obj/decal/cleanable/cobweb{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"Jy" = ( +/obj/structure/table/rack, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/rods/fifty, +/obj/item/stack/material/rods/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/aluminium/fifty, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/engineering/starboard) +"JB" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/railing/mapped, +/obj/structure/table/standard{ + name = "plastic table frame" + }, +/obj/item/clothing/under/fa/vacsuit, +/obj/item/clothing/under/fa/vacsuit, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_two) +"JC" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/item/storage/mirror{ + pixel_x = -23; + pixel_y = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_two) +"JE" = ( +/obj/structure/bed/chair/shuttle/black{ + dir = 1 + }, +/obj/overmap/visitable/ship/landable/graysontug/hand_one, +/obj/machinery/button/blast_door{ + pixel_x = 26; + name = "Window Shutters"; + id_tag = "handtugone"; + pixel_y = 25 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"JF" = ( +/obj/machinery/power/port_gen/pacman/super/potato/reactor, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/engine) +"JI" = ( +/obj/machinery/suit_storage_unit/mining{ + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"JK" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "handtugoner_shuttle_pump" + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + cycle_to_external_air = 1; + frequency = 1380; + id_tag = "handtugoner_shuttle"; + tag_airpump = "handtugoner_shuttle_pump"; + tag_exterior_door = "handtugoner_shuttle_outer"; + tag_exterior_sensor = "handtugoner_shuttle_exterior_sensor"; + tag_interior_door = "handtugoner_shuttle_inner"; + tag_interior_sensor = "handtugoner_shuttle_sensor"; + dir = 4; + pixel_x = -22 + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "handtugoner_shuttle_sensor"; + pixel_x = 23 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_one) +"JU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_two) +"Ka" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/starboard) +"Kb" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/paint/red, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/tug_two) +"Kd" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/corner/b_green/mono, +/obj/machinery/button/blast_door{ + pixel_x = -5; + name = "Bridge Shields"; + id_tag = "hand_bridge"; + dir = 4; + pixel_y = -1 + }, +/obj/item/paper_bin{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/machinery/button/blast_door{ + pixel_x = -5; + name = "Hallway Lockdown"; + id_tag = "hand_hallway"; + dir = 4; + pixel_y = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"Kg" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Ki" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/reagent_dispensers/water_cooler{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_three) +"Kj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"Kk" = ( +/obj/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/port) +"Kn" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_one) +"Ko" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"Kz" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup{ + start_pressure = 7498 + }, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"KC" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/hand/maintenance/atmos/fuel) +"KD" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"KF" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped, +/obj/structure/lattice, +/turf/space, +/area/space) +"KG" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/structure/railing/mapped, +/obj/structure/lattice, +/turf/space, +/area/space) +"KI" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/item/gun/energy/laser/xenofauna/broken, +/obj/decal/cleanable/blood/drip, +/turf/simulated/floor/steel_dirty, +/area/ship/hand/crew/miner_two) +"KM" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo/emergency_armory) +"KO" = ( +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/solarpanel, +/obj/machinery/power/tracker, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarport) +"KP" = ( +/obj/machinery/shieldgen, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/port) +"KR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/obj/structure/catwalk, +/obj/machinery/door/airlock/external/bolted/cycling{ + frequency = 1380; + id_tag = "handtugtwo_port_dock_exterior_door"; + locked = 1 + }, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "handtugtwo_port_dock"; + pixel_y = -23; + pixel_z = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/shuttle_landmark/handtugtwo/start, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"KU" = ( +/obj/machinery/atmospherics/omni/mixer{ + active_power_usage = 7500; + tag_east_con = 0.21; + tag_south = 2; + use_power = 1; + tag_east = 1; + tag_west = 1; + tag_west_con = 0.79 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"KV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/port) +"KY" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/dark_gunmetal, +/obj/machinery/door/blast/regular{ + id_tag = "handtugtwo"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/tug_two) +"KZ" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/sign/warning/radioactive{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"Lc" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 6 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/hand/maintenance/atmos/fuel) +"Ld" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"Lg" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"Lh" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_two) +"Ln" = ( +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower/fore) +"Lp" = ( +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hallway/lower) +"Lq" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 1 + }, +/obj/floor_decal/corner/b_green/half{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"Lu" = ( +/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"LA" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/floor_decal/corner/yellow/diagonal, +/obj/decal/cleanable/cobweb, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/paper/hand/pods, +/turf/simulated/floor/steel_dirty, +/area/ship/hand/crew/miner_two) +"LF" = ( +/obj/overmap/visitable/ship/hand, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"LH" = ( +/obj/machinery/pointdefense_control{ + initial_id_tag = "hand_turret" + }, +/obj/floor_decal/corner/b_green/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"LM" = ( +/obj/floor_decal/corner/b_green/diagonal, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_one) +"LP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"LQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/floor_decal/industrial/radiation/fulltile, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "Hnreactor"; + name = "Reactor Emergensy Vent" + }, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine) +"LS" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10 + }, +/obj/structure/bed/chair/shuttle/black{ + dir = 1 + }, +/obj/machinery/button/blast_door{ + pixel_x = -26; + name = "Blast Shutters"; + id_tag = "carpod4"; + pixel_y = 25 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_two) +"LX" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"LY" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -21; + pixel_y = -8 + }, +/turf/simulated/floor/steel_dirty, +/area/ship/hand/crew/miner_two) +"Mb" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"Mf" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/obj/structure/catwalk, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "handpodone_port_shuttle_dock"; + pixel_y = -23; + pixel_z = 1 + }, +/obj/machinery/door/airlock/external/glass/bolted/cycling{ + id_tag = "handpodone_port_shuttle_dock_exterior_door"; + frequency = 1380 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/shuttle_landmark/pod_hand_one/start, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "handpodone_port_shuttle_dock_exterior_door"; + name = "door bolts"; + pixel_y = 30; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_one) +"Ml" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/starboard) +"Mo" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/bed/chair/padded/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_two) +"Mq" = ( +/obj/machinery/computer/ship/sensors/spacer, +/obj/floor_decal/corner/b_green/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"Ms" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/obj/machinery/door/blast/regular{ + id_tag = "handtugoneback" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_one) +"Mt" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_one) +"Mu" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/decal/cleanable/dirt, +/obj/item/trash/candle, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/steel_dirty, +/area/ship/hand/crew/miner_two) +"Mx" = ( +/obj/floor_decal/corner/b_green/half, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/sign/warning/deathsposal{ + pixel_y = -32 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"Mz" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup{ + start_pressure = 7498 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_one) +"MC" = ( +/obj/structure/table/standard{ + name = "plastic table frame" + }, +/obj/structure/bedsheetbin, +/obj/item/ironing_board, +/obj/item/ironing_iron, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_three) +"MD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"MH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/miner_two) +"MM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"MN" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/cell/standard, +/obj/item/cell/standard, +/obj/item/cell/standard, +/obj/item/cell/standard, +/obj/item/cell/standard, +/obj/item/cell/standard, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo/maints) +"MO" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"MP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"MT" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/b_green/mono, +/obj/random/smokes, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/one{ + pixel_x = -2; + pixel_y = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"MZ" = ( +/obj/machinery/hologram/holopad/longrange/remoteship, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/shuttle/pod_hand_two) +"Nc" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"Nf" = ( +/obj/structure/table/standard, +/obj/machinery/microwave{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/port) +"Nl" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/obj/paint/vox, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_one) +"Nn" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"Np" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/floodlight, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/port) +"Nq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"Ns" = ( +/obj/machinery/door/airlock/hatch, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"Nu" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_three) +"Nv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"Nz" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"NH" = ( +/obj/machinery/door/airlock/external/bolted/cycling{ + id_tag = "drone_engine2_interior_door"; + frequency = 1380 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/engineering/port) +"NI" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"NQ" = ( +/obj/structure/table/rack, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"NV" = ( +/obj/floor_decal/corner/b_green/diagonal, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/item/paper/hand/pods, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_one) +"NW" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"NX" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"Oc" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/obj/machinery/power/port_gen/pacman{ + anchored = 0; + sheets = 25 + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_two) +"Og" = ( +/obj/structure/table/rack, +/obj/item/device/scanner/health, +/obj/item/storage/belt/utility/full, +/obj/item/storage/bag/fossils, +/obj/item/shuttle_beacon, +/obj/item/device/multitool, +/obj/item/tape_roll, +/obj/item/clothing/glasses/meson, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_three) +"Oj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"Ou" = ( +/obj/structure/fuel_port, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/obj/paint/pink, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_one) +"OB" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/green, +/turf/simulated/floor/lino, +/area/ship/hand/command/medic) +"OC" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/item/material/twohanded/baseballbat/metal{ + pixel_x = 11; + pixel_y = -2 + }, +/turf/simulated/floor/steel_dirty, +/area/ship/hand/crew/miner_two) +"OD" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"OF" = ( +/obj/structure/cable{ + 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{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"OJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/engine) +"OL" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/structure/sign/warning/moving_parts{ + dir = 8; + pixel_x = 34 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"ON" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hallway/lower/fore) +"OP" = ( +/obj/machinery/atmospherics/valve/shutoff/fuel{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "handpodone_port_shuttle_dock_pump"; + power_rating = 25000 + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "handpodone_port_shuttle_dock_sensor_chamber"; + pixel_x = -23 + }, +/obj/machinery/light/small, +/obj/floor_decal/industrial/shutoff{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/miner_one) +"OQ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"OS" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/shipsensors, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"OT" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/janitorialcart, +/obj/item/mop, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -21; + pixel_y = -10 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"OV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/item/ladder_mobile, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/port) +"OW" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/railing/mapped, +/obj/structure/bed/chair/padded/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_three) +"Pc" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/starboard) +"Pd" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, +/obj/structure/handrail, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/sign/warning/internals_required{ + pixel_y = 28 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_one) +"Pi" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/bed/padded, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_HAND") + }, +/obj/item/bedsheet/brown, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_three) +"Pj" = ( +/obj/floor_decal/corner/yellow/diagonal, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_three) +"Pk" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"Pm" = ( +/obj/machinery/mineral/unloading_machine, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hallway/lower) +"Po" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "handpodtwo_port_shuttle_dock_pump"; + power_rating = 25000 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/miner_two) +"Pq" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Pt" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_one) +"Pv" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/maintenance/engine/port) +"Pw" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/port) +"Py" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/starboard) +"Pz" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"PC" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/port) +"PI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"PJ" = ( +/obj/floor_decal/corner/b_green/diagonal, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_one) +"PN" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"PO" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"PT" = ( +/obj/machinery/conveyor{ + id = "hand_ore" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/hallway/lower) +"PW" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/engine) +"PY" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"Qa" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/obj/structure/lattice, +/turf/space, +/area/space) +"Qb" = ( +/obj/paint/sun, +/turf/simulated/wall/r_wall, +/area/ship/hand/maintenance/engine/starboard) +"Qc" = ( +/obj/machinery/disposal, +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/sign/warning/deathsposal{ + pixel_x = -32 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/steel_dirty, +/area/ship/hand/crew/miner_two) +"Qe" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/turf/space, +/area/space) +"Qj" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/decal/cleanable/dirt, +/obj/item/reagent_containers/pill/happy, +/turf/simulated/floor/steel_dirty, +/area/ship/hand/crew/miner_two) +"Ql" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"Qm" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/port) +"Qu" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Qv" = ( +/obj/machinery/atmospherics/valve/shutoff/fuel{ + dir = 8 + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "handpodtwo_port_shuttle_dock_sensor_chamber"; + pixel_x = 24 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "handpodtwo_port_shuttle_dock_pump"; + power_rating = 25000 + }, +/obj/machinery/light/small, +/obj/floor_decal/industrial/shutoff{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/miner_two) +"Qy" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/circuitboard/sensors, +/obj/item/stock_parts/circuitboard/pacman/super, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo/maints) +"QA" = ( +/obj/machinery/vending/engineering{ + req_access = newlist(); + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"QD" = ( +/obj/paint/sun, +/turf/simulated/wall/r_wall, +/area/ship/hand/engineering/port) +"QE" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/structure/noticeboard{ + pixel_y = 22 + }, +/obj/floor_decal/corner/yellow/diagonal, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_two) +"QF" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/starboard) +"QI" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/structure/sign/warning/radioactive{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"QJ" = ( +/obj/paint/sun, +/turf/simulated/wall, +/area/ship/hand/maintenance/engine/port) +"QK" = ( +/obj/structure/table/rack, +/obj/item/storage/belt/holster/security/tactical, +/obj/item/storage/belt/holster/security/tactical, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"QP" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/obj/machinery/door/blast/regular{ + id_tag = "handtugtwoback" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_two) +"QR" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"QU" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "drone_engine_pump"; + power_rating = 25000 + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "drone_engine_sensor_chamber"; + pixel_x = 24 + }, +/obj/structure/handrail{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/starboard) +"QW" = ( +/obj/machinery/atmospherics/binary/pump/high_power/on{ + target_pressure = 40 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"QX" = ( +/obj/paint/sun, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_one) +"QZ" = ( +/obj/structure/sign/warning/compressed_gas{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"Ra" = ( +/obj/floor_decal/corner/b_green/half, +/obj/machinery/power/apc/critical{ + name = "south bump"; + pixel_y = -21; + req_access = list("ACCESS_HAND") + }, +/obj/structure/cable, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"Rd" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/shipsensors, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"Re" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"Rg" = ( +/obj/machinery/computer/ship/engines{ + dir = 4 + }, +/obj/structure/sign/warning/internals_required{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_one) +"Rh" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"Rm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Ro" = ( +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"Rp" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Rq" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/hallway/lower) +"Rr" = ( +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/obj/random/contraband, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/storage/box/lights/bulbs, +/obj/item/storage/box/lights/tubes, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo/maints) +"Rs" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup{ + start_pressure = 7498 + }, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"Ru" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hallway/lower/fore) +"Rw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"RA" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/decal/cleanable/dirt, +/obj/item/reagent_containers/pill/tramadol, +/turf/simulated/floor/steel_dirty, +/area/ship/hand/crew/miner_two) +"RC" = ( +/obj/machinery/mineral/stacking_machine, +/obj/machinery/conveyor{ + dir = 8; + id = "hand_ore" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/hallway/lower) +"RD" = ( +/obj/machinery/power/smes/buildable/preset/on_full, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"RI" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/machinery/disposal, +/obj/structure/railing/mapped, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/sign/warning/deathsposal{ + pixel_x = 32 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_three) +"RL" = ( +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarstarboard) +"RM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"RP" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 10 + }, +/obj/paint/sun, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_one) +"RS" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/maintenance/engine/port) +"RZ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/item/shuttle_beacon, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/random/toolbox, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"Sb" = ( +/obj/structure/closet/secure_closet/guncabinet{ + req_access = list("ACCESS_HAND") + }, +/obj/random/lilgun, +/obj/random/lilgun, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 1 + }, +/obj/random/projectile, +/obj/random/projectile, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/emergency_armory) +"Sf" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/vulcan{ + id_tag = "handpodtwo_pump_out_internal" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_two) +"Sn" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Sv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"Sx" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "handtugone_shuttle_pump_out_external"; + power_rating = 25000 + }, +/obj/structure/fuel_port{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"Sz" = ( +/obj/structure/bed/chair/shuttle/black{ + dir = 1 + }, +/obj/overmap/visitable/ship/landable/graysontug/hand_two, +/obj/machinery/button/blast_door{ + pixel_x = -26; + name = "Window Shutters"; + id_tag = "handtugtwo"; + pixel_y = 25 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"SB" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_x = 8; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/port) +"SD" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/machinery/washing_machine, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_two) +"SK" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/starboard) +"SP" = ( +/obj/machinery/conveyor{ + dir = 9; + id = "hand_ore" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/hallway/lower) +"SQ" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 1; + start_pressure = 4559.63 + }, +/obj/floor_decal/industrial/outline, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"SS" = ( +/obj/machinery/light/led/small{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/ship/hand/crew/miner_one) +"SY" = ( +/obj/machinery/suit_storage_unit/security{ + name = "Red Voidsuit Storage Unit"; + req_access = list("ACCESS_HAND_CAPTAIN") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"Ta" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/b_green/mono, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/teacup, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"Tb" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 9 + }, +/obj/paint/red, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_two) +"Te" = ( +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"Tf" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/paint/hull, +/obj/machinery/door/blast/regular{ + id_tag = "handtugonerear"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/tug_one) +"Ti" = ( +/obj/structure/closet/crate/freezer/rations, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/port) +"Tj" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/port) +"Tn" = ( +/obj/floor_decal/corner/b_green/three_quarters{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/item/reagent_containers/food/drinks/pitcher{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"To" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/machinery/computer/ship/navigation/telescreen{ + pixel_y = 21 + }, +/turf/simulated/floor/steel_dirty, +/area/ship/hand/crew/miner_two) +"Tp" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Ts" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/machinery/sleeper/survival_pod{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"Tu" = ( +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/machinery/atmospherics/valve/shutoff/fuel, +/obj/floor_decal/industrial/shutoff, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "nuke_shuttle_dock_airlock_sensor"; + master_tag = "handtugtwo_shuttle_exterior_sensor"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"Tw" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"Tx" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/obj/paint/silver, +/turf/simulated/wall/titanium, +/area/ship/hand/shuttle/pod_hand_two) +"Ty" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/obj/machinery/door/blast/regular{ + id_tag = "handtugtwoback" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_two) +"Tz" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/empty, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"TA" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/hallway/lower) +"TB" = ( +/obj/floor_decal/corner/b_green/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"TE" = ( +/obj/machinery/door/airlock/hatch, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_three) +"TK" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"TL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"TM" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/b_green/mono, +/obj/item/reagent_containers/food/drinks/glass2/coffeecup/metal{ + pixel_y = 9; + pixel_x = -2 + }, +/obj/item/paper/hand/pods, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"TQ" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/starboard) +"TU" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"TX" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/industrial/danger/corner, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"Ub" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"Uc" = ( +/obj/floor_decal/corner/yellow/diagonal, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_two) +"Uh" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 8 + }, +/obj/machinery/meter, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/starboard) +"Ui" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"Uj" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower) +"Uk" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-j2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/catwalk_plated, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower/fore) +"Uq" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 6 + }, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "handtugtwo_port_dock"; + pixel_x = 32; + pixel_y = 8 + }, +/obj/structure/catwalk, +/obj/structure/sign/warning/vacuum{ + dir = 8; + pixel_x = 32 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"Uu" = ( +/obj/structure/table/rack, +/obj/item/rig/industrial/equipped, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Uv" = ( +/obj/structure/bed/chair/comfy/green, +/turf/simulated/floor/lino, +/area/ship/hand/command/medic) +"UC" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/port) +"UF" = ( +/obj/machinery/computer/ship/sensors/spacer, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_two) +"UG" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "handtugtwo_shuttle" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_two) +"UH" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/floodlight, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/starboard) +"UJ" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/port) +"UM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/structure/table/rack, +/obj/item/storage/briefcase/inflatable, +/obj/item/shuttle_beacon, +/obj/item/device/flashlight/lamp/floodlamp/green, +/obj/random/toolbox, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/shuttle/pod_hand_one) +"UP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower) +"US" = ( +/obj/machinery/shieldgen, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/port) +"UY" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 6 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/maintenance/engine/port) +"Vc" = ( +/obj/machinery/atmospherics/valve/shutoff/fuel{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "handtugone_port_dock_pump"; + power_rating = 25000 + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "handtugone_port_dock"; + pixel_x = -23 + }, +/obj/machinery/light/small, +/obj/floor_decal/industrial/shutoff{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/miner_three) +"Vh" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/closet/medical_wall/filled{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"Vl" = ( +/obj/machinery/atmospherics/unary/tank/carbon_dioxide{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Vo" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"Vs" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/port) +"Vv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"Vx" = ( +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"VA" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"VF" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-j2" + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower) +"VH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"VJ" = ( +/obj/machinery/portable_atmospherics/powered/pump, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine/port) +"VK" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "handtugtwo_shuttle_pump_out_external"; + power_rating = 25000 + }, +/obj/structure/fuel_port{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_two) +"VP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/aft) +"VR" = ( +/obj/machinery/atmospherics/unary/tank/nitrogen, +/obj/floor_decal/industrial/outline/orange, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"VT" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/tug_one) +"VZ" = ( +/obj/paint/sun, +/turf/simulated/wall/ocp_wall, +/area/ship/hand/maintenance/engine/port) +"Wa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"Wc" = ( +/obj/structure/catwalk, +/obj/structure/table/woodentable/walnut, +/obj/item/trash/candle, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_one) +"We" = ( +/obj/structure/cable/cyan, +/obj/machinery/power/apc/critical{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"Wi" = ( +/obj/floor_decal/corner/b_green/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"Wj" = ( +/obj/structure/catwalk, +/turf/space, +/area/ship/hand/maintenance/solarstarboard) +"Wm" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Wr" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"Wt" = ( +/obj/structure/table/rack, +/obj/item/shield_diffuser, +/obj/random/maintenance/clean, +/obj/random/tool, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small, +/obj/item/device/oxycandle, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo/maints) +"Wu" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"Wv" = ( +/obj/floor_decal/techfloor/orange{ + dir = 6 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo/maints) +"Wy" = ( +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"WC" = ( +/obj/floor_decal/corner/b_green/half, +/obj/structure/table/rack, +/obj/item/storage/briefcase, +/obj/machinery/light, +/obj/item/inflatable_dispenser, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"WD" = ( +/obj/machinery/mining/brace, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"WF" = ( +/obj/paint/sun, +/turf/simulated/wall/r_wall, +/area/ship/hand/maintenance/atmos) +"WJ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine) +"WL" = ( +/obj/structure/cable{ + 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{ + dir = 8 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower/fore) +"WN" = ( +/obj/structure/table/rack, +/obj/item/pickaxe/drill, +/obj/item/device/radio, +/obj/item/device/gps, +/obj/item/device/scanner/mining, +/obj/item/tape_roll, +/obj/item/device/geiger, +/obj/item/pickaxe/hammer, +/obj/item/clothing/glasses/meson, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_three) +"WP" = ( +/obj/paint/sun, +/turf/simulated/wall/r_wall, +/area/ship/hand/cargo/maints) +"WS" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"WT" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/structure/table/standard{ + name = "plastic table frame" + }, +/obj/random/drinkbottle, +/obj/item/paper/hand/pods, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/miner_three) +"WY" = ( +/obj/paint/sun, +/turf/simulated/wall/r_wall, +/area/ship/hand/engineering/starboard) +"Xd" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor{ + map_airless = 1 + }, +/area/ship/hand/shuttle/tug_one) +"Xe" = ( +/obj/machinery/atmospherics/binary/pump/high_power, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Xf" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hallway/lower/fore) +"Xg" = ( +/obj/structure/table/rack/wooden, +/obj/item/book/manual/psionics{ + desc = "Green radiotelescope on cover seems to be desecrated" + }, +/turf/simulated/floor/wood/ebony, +/area/ship/hand/crew/miner_one) +"Xh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/hologram/holopad/longrange/remoteship, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"Xl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/engineering, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/engineering/hallway) +"Xm" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/obj/structure/catwalk, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + frequency = 1380; + id_tag = "drone_engine2"; + pixel_y = 26; + tag_airpump = "drone_engine2_pump"; + tag_chamber_sensor = "drone_engine2_sensor_chamber"; + tag_exterior_door = "drone_engine2_exterior_door"; + tag_interior_door = "drone_engine2_interior_door" + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/port) +"Xs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/paint/red, +/turf/simulated/wall/r_wall, +/area/ship/hand/maintenance/engine/port) +"Xu" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/decal/cleanable/dirt, +/obj/structure/bed/padded, +/obj/item/reagent_containers/pill/happy, +/obj/decal/cleanable/blood, +/obj/item/storage/pill_bottle/zoom, +/turf/simulated/floor/steel_dirty, +/area/ship/hand/crew/miner_two) +"XB" = ( +/obj/machinery/computer/ship/helm{ + accellimit = 0.005 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/shuttle/pod_hand_two) +"XC" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarport) +"XE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/floodlight{ + dir = 8 + }, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarstarboard) +"XF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/hallway) +"XH" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"XI" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"XJ" = ( +/obj/machinery/power/port_gen/pacman{ + anchored = 1; + sheets = 25 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_two) +"XL" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/maintenance/engine/port) +"XM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"XS" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/engine) +"XT" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hallway/lower/fore) +"XX" = ( +/obj/floor_decal/corner/yellow/diagonal, +/obj/machinery/portable_atmospherics/canister/empty/oxygen, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/steel_dirty, +/area/ship/hand/crew/miner_two) +"XZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/miner_three) +"Yc" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/critical{ + name = "north bump"; + pixel_y = 21; + dir = 1; + req_access = list("ACCESS_HAND") + }, +/obj/structure/closet/crate/internals, +/obj/item/device/oxycandle, +/obj/item/device/oxycandle, +/obj/item/device/oxycandle, +/obj/item/device/oxycandle, +/obj/item/device/oxycandle, +/obj/item/device/oxycandle, +/obj/item/device/oxycandle, +/obj/item/device/oxycandle, +/obj/item/device/oxycandle, +/obj/item/device/oxycandle, +/obj/item/device/oxycandle, +/obj/item/device/oxycandle, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"Yh" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 8 + }, +/obj/machinery/meter, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Yi" = ( +/obj/machinery/mining/drill, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"Yk" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4; + icon_state = "intact" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/recharger/wallcharger{ + pixel_y = 24 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_one) +"Yl" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "drone_engine2"; + pixel_y = 22 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/port) +"Ym" = ( +/obj/machinery/pipedispenser, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/maintenance/atmos) +"Yp" = ( +/obj/machinery/space_heater, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Yq" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 5; + icon_state = "intact" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/hand/maintenance/atmos/fuel) +"Yr" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/dark_gunmetal, +/obj/machinery/door/blast/regular{ + id_tag = "handtugtwo" + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/tug_two) +"Yx" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine) +"Yy" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/cargo/emergency_armory) +"YA" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/glass/engineering{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/crew/hallway/lower/aft) +"YD" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"YI" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/maintenance/engine) +"YM" = ( +/obj/floor_decal/corner/b_green/half{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/command/bridge) +"YR" = ( +/obj/machinery/suit_storage_unit/mining{ + req_access = list("ACCESS_HAND") + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"YT" = ( +/obj/machinery/computer/modular/preset/civilian, +/obj/floor_decal/corner/b_green/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/hand/command/bridge) +"YX" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/crew/hallway/lower) +"YY" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarstarboard) +"Zb" = ( +/obj/paint/sun, +/turf/simulated/wall/r_wall, +/area/ship/hand/maintenance/atmos/fuel) +"Zc" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/structure/cable, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/plating, +/area/ship/hand/engineering/port) +"Zd" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/starboard) +"Zh" = ( +/obj/machinery/vending/tool{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/corner, +/obj/structure/sign/warning/radioactive{ + dir = 8; + pixel_x = 32 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"Zk" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/miner_two) +"Zp" = ( +/obj/machinery/power/tracker, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/solarpanel, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarstarboard) +"Zu" = ( +/obj/machinery/shieldgen, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/engineering/starboard) +"Zv" = ( +/obj/machinery/conveyor{ + dir = 5; + id = "hand_ore" + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/hallway/lower) +"ZC" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/closet/medical_wall/filled{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/hand/shuttle/tug_one) +"ZD" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating{ + map_airless = 1 + }, +/area/ship/hand/maintenance/solarstarboard) +"ZE" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/spirit_board, +/obj/item/storage/candle_box, +/obj/item/storage/candle_box, +/obj/machinery/light/led/small{ + dir = 10 + }, +/turf/simulated/floor/wood/ebony, +/area/ship/hand/crew/miner_one) +"ZG" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/engine) +"ZK" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/miner_one) +"ZL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/maintenance/engine) +"ZN" = ( +/obj/structure/table/rack, +/obj/item/device/scanner/health, +/obj/item/storage/belt/utility/full, +/obj/item/storage/bag/fossils, +/obj/item/shuttle_beacon, +/obj/item/device/multitool, +/obj/item/tape_roll, +/obj/structure/sign/poster{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/crew/miner_two) +"ZO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 1 + }, +/obj/catwalk_plated, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/lower/fore) +"ZW" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/maintenance/atmos/fuel) +"ZX" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, +/obj/machinery/door/blast/regular{ + id_tag = "handtugone" + }, +/turf/simulated/floor/plating, +/area/ship/hand/shuttle/tug_one) + +(1,1,1) = {" +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 +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 +"} +(2,1,1) = {" +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 +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 +"} +(3,1,1) = {" +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 +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 +"} +(4,1,1) = {" +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 +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 +"} +(5,1,1) = {" +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 +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 +"} +(6,1,1) = {" +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 +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 +"} +(7,1,1) = {" +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 +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 +"} +(8,1,1) = {" +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 +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 +"} +(9,1,1) = {" +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 +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 +"} +(10,1,1) = {" +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 +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 +"} +(11,1,1) = {" +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 +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 +"} +(12,1,1) = {" +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 +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 +"} +(13,1,1) = {" +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 +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 +"} +(14,1,1) = {" +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 +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 +"} +(15,1,1) = {" +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 +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 +"} +(16,1,1) = {" +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 +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 +"} +(17,1,1) = {" +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 +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 +"} +(18,1,1) = {" +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 +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 +"} +(19,1,1) = {" +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 +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 +"} +(20,1,1) = {" +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 +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 +"} +(21,1,1) = {" +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 +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 +"} +(22,1,1) = {" +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 +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 +"} +(23,1,1) = {" +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 +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 +"} +(24,1,1) = {" +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 +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 +"} +(25,1,1) = {" +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 +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 +"} +(26,1,1) = {" +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 +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 +"} +(27,1,1) = {" +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 +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 +"} +(28,1,1) = {" +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 +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 +"} +(29,1,1) = {" +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 +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 +"} +(30,1,1) = {" +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 +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 +"} +(31,1,1) = {" +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 +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 +"} +(32,1,1) = {" +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 +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 +"} +(33,1,1) = {" +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 +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 +"} +(34,1,1) = {" +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 +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 +"} +(35,1,1) = {" +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 +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 +"} +(36,1,1) = {" +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 +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 +"} +(37,1,1) = {" +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 +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 +"} +(38,1,1) = {" +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 +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +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 +"} +(39,1,1) = {" +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 +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +aa +aa +aa +aa +aa +aa +gh +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +tb +tb +tb +tb +tb +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 +"} +(40,1,1) = {" +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 +tb +tb +tb +gh +gh +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +gh +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +gh +aa +aa +aa +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(41,1,1) = {" +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 +tb +tb +aa +aa +aa +gh +gh +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +gh +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +gh +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(42,1,1) = {" +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 +tb +tb +aa +aa +aa +aa +aa +gh +Qa +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +mE +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +jh +aa +aa +aa +tb +we +we +op +op +op +op +op +op +op +op +op +op +op +op +op +op +op +op +op +op +op +KO +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(43,1,1) = {" +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 +tb +aa +aa +aa +aa +aa +aa +aa +lL +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +gh +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +KF +aa +aa +aa +tb +nj +XC +kZ +kZ +kZ +kZ +kZ +kZ +kZ +kZ +kZ +kZ +kZ +kZ +kZ +kZ +kZ +kZ +kZ +kZ +kZ +HJ +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(44,1,1) = {" +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 +tb +aa +aa +aa +aa +aa +aa +aa +lL +aa +aa +aa +aa +aa +aa +aa +aa +sF +sF +aa +aa +gh +aa +gK +oo +oo +gK +gK +gK +gK +gK +gK +gK +gK +gK +aa +aa +aa +KF +aa +aa +aa +tb +Ee +we +mi +mi +mi +mi +mi +mi +mi +mi +mi +mi +mi +mi +mi +mi +mi +mi +mi +mi +mi +mi +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(45,1,1) = {" +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 +tb +aa +aa +aa +aa +aa +aa +aa +lL +aa +aa +CB +CB +CB +CB +CB +CB +sF +rD +aa +aa +gh +aa +ZX +zz +qR +tQ +gi +RD +Gg +Pz +pR +pr +JK +qo +aa +aa +aa +KF +aa +aa +aa +tb +Ee +sy +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +kQ +Qe +Qe +Qe +Qe +Qe +Qe +Qe +Qe +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(46,1,1) = {" +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 +tb +tb +aa +aa +aa +aa +aa +aa +aa +lL +aa +CB +CB +GF +Rg +nS +hH +qb +bg +CE +QX +aa +gh +aa +ZX +Mb +JE +BH +Xh +Gm +kD +Ed +ny +gK +yU +yU +aa +aa +aa +KF +aa +aa +lK +Qe +Ee +sy +Qe +Qe +Qe +Qe +Qe +Qe +Qe +aa +aa +aa +aa +kQ +kR +gj +gj +gj +gj +gj +gj +gj +kR +tb +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(47,1,1) = {" +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 +tb +aa +aa +aa +aa +aa +aa +aa +aa +lL +aa +gb +ia +vD +uS +zo +ri +CV +UM +RP +vd +aa +gh +aa +gK +gK +vP +Wr +ag +ZC +yJ +nE +Ts +wG +FQ +lc +aa +aa +aa +KF +aa +aa +lL +wT +jk +QD +QD +Zb +Zb +Zb +Zb +Zb +kR +Qe +uA +aa +uA +kR +Ho +gj +Im +Ti +Nf +Iv +Iv +Iv +kR +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(48,1,1) = {" +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 +tb +aa +aa +aa +aa +aa +aa +aa +aa +lL +aa +gb +aw +zx +dF +Ii +sB +BK +ch +pB +nG +aa +gh +aa +aa +gK +gK +jx +gK +gK +gK +Tf +bV +gK +lb +lc +aa +aa +aa +KF +aa +aa +lL +wT +Xm +qm +QD +Vl +Vl +Vl +Vl +Zb +vT +vT +vT +vf +vT +vT +VZ +gj +iY +PC +UY +Xs +aH +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(49,1,1) = {" +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 +tb +aa +aa +aa +aa +aa +aa +aa +aa +lL +aa +gb +Dt +eV +HR +lr +cQ +Mz +bI +Jp +gL +aa +gh +aa +aa +gK +fV +nc +cH +Ms +Sx +RZ +Rs +Rd +sh +yU +aa +aa +aa +KF +aa +kQ +kR +wT +Eq +hO +QD +sk +He +Pq +XH +lj +vT +Lc +Yq +xO +Lc +Yq +VZ +oy +iY +PC +vu +Xs +aH +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(50,1,1) = {" +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 +gh +gh +aa +aa +aa +aa +aa +aa +aa +lL +aa +CB +CB +EN +Pt +oB +jb +Av +Ou +DJ +QX +aa +gh +aa +aa +gK +nU +VT +fR +fr +aS +db +FW +vA +sc +wa +aa +aa +aa +kn +Qe +kR +wT +wT +NH +QD +QD +Kg +Kg +Tp +qs +Lu +vT +Hh +Hh +oE +Hh +Hh +VZ +RS +iY +Kk +Gd +Xs +aH +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(51,1,1) = {" +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 +gh +gh +aa +aa +aa +aa +aa +aa +lL +aa +aa +CB +CB +CB +oj +rc +Nl +if +kh +aa +aa +gh +aa +aa +gK +Hz +hG +hG +hG +CA +Dq +RM +em +Te +Xd +aa +aa +aa +kn +kR +wT +wT +lG +Yl +kL +QD +Kg +Kg +uQ +NI +Lu +vT +KC +FT +qx +xp +KC +VZ +XL +iY +PC +OV +Iv +Iv +Iv +kR +aa +tb +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(52,1,1) = {" +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 +gh +wj +Qe +Qe +Qe +Qe +Qe +kR +kR +aa +aa +aa +ZK +Mf +vm +ZK +sF +sF +aa +aa +gh +aa +aa +Cj +jV +XZ +Cj +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +nM +wT +wT +Vs +Np +zO +wY +QD +Kg +Kg +uQ +QR +Lu +vT +wS +vT +yM +vT +wS +VZ +Pv +iY +PC +gX +Iv +Iv +Iv +kR +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(53,1,1) = {" +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 +Qe +Qe +Qe +kR +iF +sm +sm +iF +kR +kR +kR +kR +kR +ZK +ZK +GV +OP +ZK +ZK +ZK +ZK +ZK +ZK +ZK +ZK +Cj +ep +Vc +Cj +Cj +Cj +Cj +Cj +Cj +Cj +Cj +Yy +Yy +Yy +Yy +Yy +lG +rm +Dy +Qm +fX +QD +vt +Fy +Tp +yC +Yh +Xe +sT +Cm +Wm +AO +Tz +QJ +yT +iY +PC +km +Xs +aH +aa +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(54,1,1) = {" +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 +lL +kR +iF +sm +sm +iF +Ax +GW +iF +wq +wq +wq +wq +wq +wq +ZK +Pd +AA +ZK +tm +qp +ao +Gq +DE +vx +ZE +Cj +cG +dw +Cj +hx +Pi +Cn +AU +oD +Cd +lk +ug +ys +Ld +yH +QK +lG +FC +Jc +UJ +Zc +QD +Zb +Zb +EU +Bs +pD +AO +AO +At +gZ +AP +Tz +QJ +Dj +iY +PC +fa +Xs +aH +aa +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(55,1,1) = {" +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 +lL +iF +iF +LH +MT +Tn +mN +mN +bd +wq +zP +bU +kY +Uv +yc +ZK +aj +jN +ZK +PJ +hk +hk +PJ +Xg +uO +qJ +Cj +hS +Ib +Cj +Pj +Pj +WT +OW +MC +Fp +Og +ug +qa +sK +Fo +Ey +lG +vo +UC +ik +zm +QD +Uu +Bq +AO +Jh +MM +YD +hh +AO +AO +AO +Sn +QJ +SB +PC +dr +vu +Xs +aH +aa +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(56,1,1) = {" +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 +lL +Ho +iF +gd +XI +TU +TU +TU +vi +wq +tT +aY +it +Dv +OB +ZK +Yk +jW +go +Kn +Fm +Fm +Fm +Wc +Fm +st +sn +ac +ru +sQ +tR +al +al +oY +Nu +Nu +cZ +ug +Sb +sX +GM +Ci +lG +KP +US +FE +zm +QD +Ji +AO +AO +AO +MM +YD +ZW +Rm +Rm +Rm +tX +Bg +KV +Tj +Pw +Dx +Xs +aH +aa +aa +aa +aa +tb +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(57,1,1) = {" +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 +oX +xn +xn +rj +CF +PY +MP +LP +WC +wq +wq +yw +wq +wq +wq +ZK +NV +LM +nn +Mt +zl +wH +eP +SS +SS +er +sn +An +kd +rv +az +Ki +Gk +RI +uz +uz +WN +ug +Db +xU +Nq +qZ +wU +wU +wU +GP +YA +QD +xy +Yp +Dp +Qu +cX +nJ +cx +Vx +QA +Zh +Rp +QJ +sp +Hd +VJ +vc +Iv +Iv +Ho +kR +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(58,1,1) = {" +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 +lv +rk +YM +TU +pu +dl +oe +TU +SY +iF +ix +zJ +Ln +wn +ZK +Dk +Dk +Dk +gv +Dk +Dk +Dk +Dk +Dk +Dk +sn +sn +sn +sn +TE +sn +sn +sn +sn +sn +sn +ug +ug +KM +FH +ug +wU +rq +Ia +cn +qT +kE +tF +tF +tF +tF +wQ +uN +tF +tF +CM +CM +uZ +CM +CM +CM +CM +CM +CM +Bv +Bv +DM +gh +gh +gh +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(59,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +Fs +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +lv +YT +YM +nY +By +Kd +XM +ig +ig +kP +gg +eq +OD +gu +cb +hM +bK +XT +eh +hg +Xf +Nn +tO +kg +Lg +XT +CG +Ql +dT +eg +mH +Cr +dT +Az +rJ +Ff +Cp +dp +Ro +Uj +Eu +BD +MD +hV +lf +Vo +aA +Sv +lB +PN +QZ +Wa +fA +NX +KZ +CM +vX +YI +AH +cN +tu +OJ +JF +CM +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 +"} +(60,1,1) = {" +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 +lv +AZ +Lq +LF +qF +KD +HD +TU +ks +iF +zV +Uk +rQ +Tw +oU +lq +WL +Ru +ZO +ho +Bx +PI +wm +BV +Bx +ON +fx +fx +VF +kK +gD +Ei +fx +BE +fx +Ei +zw +Rw +In +UP +BB +wU +HH +OF +xx +gk +yx +HS +Vv +uP +Vv +XF +VA +Oj +uR +ZL +WJ +Yx +Is +Fw +PW +ur +ZG +LQ +ti +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 +"} +(61,1,1) = {" +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 +lv +YT +YM +kV +Mq +Co +jw +fE +ir +ut +et +TX +tn +dA +cb +df +is +XT +rp +hX +Wu +rS +Wu +sI +yN +XT +eL +sL +fT +eY +eL +eO +fw +Az +zr +eO +OL +xA +Ro +Ro +bF +EI +rR +bL +gH +VP +Xl +TL +ew +Af +zX +sw +fA +fO +bW +CM +BT +FB +DV +cN +tu +dd +ps +CM +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 +"} +(62,1,1) = {" +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 +lv +tE +YM +TU +ee +Ui +gl +hY +BF +iF +Nv +cU +Ln +wn +Ce +Hc +Hc +Hc +Iq +Hc +Hc +Hc +Hc +Hc +Hc +Hc +Hc +Hc +Hc +Ns +Hc +Hc +Hc +Hc +Hc +Hc +uf +Pm +lp +Lp +Hn +wU +rq +Ia +es +Gu +kE +BO +BO +BO +BO +Cv +xu +BO +BO +CM +CM +XS +CM +CM +CM +CM +CM +CM +Qb +Bv +DM +gh +gh +gh +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(63,1,1) = {" +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 +kU +iF +iF +GN +TU +fB +VH +nq +Mx +uE +uE +Dc +uE +uE +uE +Ce +LA +sA +LY +Zk +Hk +Gx +Qc +YR +Bp +Fi +Ce +QE +rr +HE +kS +SD +JC +lX +JI +JI +zT +uf +Cl +HX +Rq +CL +wU +wU +wU +du +Iy +WF +TK +MO +PO +rE +Hl +ts +yW +qd +Qb +QI +wE +OT +zd +us +gU +NQ +dz +dz +Ho +kR +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(64,1,1) = {" +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 +lL +Ho +iF +TB +Fj +TU +TU +Ko +Ra +uE +Ir +hq +eB +kb +eA +Ce +IY +yk +Aj +zH +Rh +Rh +in +Wy +zt +an +Ce +Gy +Uq +Aj +xN +Rh +Rh +in +Pk +zt +an +uf +sE +YX +IW +ln +BZ +Jy +ez +mx +ok +WF +TK +TK +PO +rE +DN +FF +Kj +Ym +Qb +qw +xs +ke +Bk +fK +Ml +Uh +uG +DC +aa +aa +aa +aa +tb +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(65,1,1) = {" +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 +lL +iF +iF +TM +fQ +ay +Wi +Fd +ER +uE +qi +qE +xD +qf +lN +Ce +ym +MH +Ce +OC +Qj +KI +RA +gw +xw +yO +Ce +qc +MH +Ce +Uc +Uc +Mo +JB +bB +EY +ZN +uf +xG +Jm +Jm +RC +BZ +pV +tC +tD +SK +WF +Yc +Nc +Nc +po +LX +EC +Au +Kj +AN +Ew +Df +DG +Ew +vW +Ew +Pc +uG +DC +aa +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(66,1,1) = {" +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 +lL +kR +iF +sm +sm +iF +gQ +Ta +iF +uE +uE +uE +uE +uE +uE +Ce +wD +Po +Ce +To +Mu +Xu +XX +WD +Ie +Jx +Ce +wD +qI +Ce +pQ +HQ +ro +Iz +Ie +Ie +Yi +uf +SP +PT +PT +Zv +BZ +BL +tC +vg +tC +WF +Nz +pY +pY +Hm +Hm +GC +OQ +OQ +WP +pW +nT +gY +pW +pW +Ew +Pc +uG +DC +aa +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(67,1,1) = {" +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 +hE +hE +hE +kR +iF +sm +sm +iF +kR +kR +kR +kR +kR +Ce +Ce +yl +Qv +Ce +Ce +Ce +Ce +Ce +Ce +Ce +Ce +Ce +ck +nP +Ce +Ce +Ce +Ce +Ce +Ce +Ce +Ce +TA +TA +TA +TA +TA +BZ +Zu +tC +Ka +BP +WF +dO +DT +FG +aE +pY +Re +pY +Cu +WP +eR +uh +av +br +pW +TQ +Pc +uG +DC +aa +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(68,1,1) = {" +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 +gh +wP +hE +hE +hE +hE +hE +kR +aa +aa +aa +aa +Ce +tY +tp +Ce +vp +vp +aa +aa +gh +aa +aa +Ce +KR +tp +Ce +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +nM +pM +pM +Gn +rF +QF +Zd +WF +wd +fJ +Nz +KU +qS +Ub +NW +rI +WP +wz +cA +av +MN +pW +Ew +UH +dz +dz +dz +kR +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(69,1,1) = {" +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 +gh +gh +aa +aa +aa +aa +aa +aa +lL +aa +aa +vp +vp +vp +mQ +dC +Tx +Tx +eu +aa +aa +gh +aa +aa +pJ +gR +iM +iM +iM +Tu +ly +Eg +HK +Gz +Kz +aa +aa +aa +kn +kR +pM +pM +BZ +fW +Dz +WF +VR +WS +Jt +oF +GC +pY +vY +SQ +WP +Qy +yA +CC +Wt +pW +Ew +Fa +dz +dz +dz +kR +aa +tb +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(70,1,1) = {" +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 +gh +gh +aa +aa +aa +aa +aa +aa +aa +lL +aa +vp +vp +tl +Hy +xj +EO +ai +Al +cW +FS +aa +gh +aa +aa +pJ +UG +FU +lF +QP +AY +on +HL +IN +vw +Ge +aa +aa +aa +kn +hE +kR +pM +pM +mm +WY +WF +VR +WS +la +GH +GC +pY +vY +SQ +WP +BN +nO +mI +Rr +pW +Cy +Fq +uG +DC +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(71,1,1) = {" +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 +tb +aa +aa +aa +aa +aa +aa +aa +aa +lL +aa +su +qG +LS +vK +nl +nt +wL +Sf +eN +nx +aa +gh +aa +aa +pJ +zW +rL +Ij +Ty +VK +uV +HL +OS +eT +sD +aa +aa +aa +KF +aa +lH +kR +pM +Py +qU +WF +VR +WS +la +Gi +Ub +QW +tM +SQ +WP +uq +Ea +Wv +rK +pW +uM +Fq +uG +DC +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(72,1,1) = {" +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 +tb +aa +aa +aa +aa +aa +aa +aa +aa +lL +aa +su +XB +cl +Fz +Lh +MZ +jH +ed +CT +AV +aa +gh +aa +aa +pJ +pJ +py +pJ +pJ +pJ +cK +qK +pJ +Kb +kI +aa +aa +aa +KF +aa +aa +lL +pM +pz +QU +WF +VR +Gh +FP +FP +WF +WF +WF +WF +WP +WP +WP +WP +WP +pW +uM +xi +uG +DC +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(73,1,1) = {" +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 +tb +aa +aa +aa +aa +aa +aa +aa +aa +lL +aa +su +UF +mb +jI +JU +rs +bA +wp +cV +jp +aa +gh +aa +pJ +pJ +pE +Ak +np +Vh +ar +kW +rt +rZ +AL +kI +aa +aa +aa +KF +aa +aa +lL +pM +gz +WY +WF +WF +WF +WF +WF +WF +kR +hE +hE +hE +hE +kR +Ho +Qb +uM +uM +uM +dz +dz +dz +kR +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(74,1,1) = {" +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 +tb +tb +aa +aa +aa +aa +aa +aa +aa +lL +aa +vp +vp +dS +ic +Oc +iw +rM +oP +Tb +FS +aa +gh +aa +Yr +gF +Sz +jC +fn +FI +II +aP +td +pJ +sD +sD +aa +aa +aa +KF +aa +aa +lH +hE +fY +Wj +hE +hE +hE +hE +hE +hE +iu +aa +aa +aa +aa +lH +kR +Qb +Qb +Qb +Qb +Qb +Qb +Qb +kR +tb +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(75,1,1) = {" +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 +tb +aa +aa +aa +aa +aa +aa +aa +lL +aa +aa +vp +vp +vp +vp +vp +vp +vp +qB +aa +aa +gh +aa +Yr +jY +dG +bt +XJ +lz +We +tt +cT +ul +EE +qV +aa +aa +aa +KF +aa +aa +aa +tb +fY +Wj +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +lH +hE +hE +hE +hE +hE +hE +hE +hE +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(76,1,1) = {" +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 +tb +aa +aa +aa +aa +aa +aa +aa +lL +aa +aa +aa +aa +aa +aa +aa +aa +vp +vp +aa +aa +gh +aa +pJ +KY +KY +pJ +pJ +pJ +pJ +pJ +pJ +pJ +pJ +pJ +aa +aa +aa +KF +aa +aa +aa +tb +fY +RL +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(77,1,1) = {" +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 +tb +aa +aa +aa +aa +aa +aa +aa +lL +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +gh +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +KF +aa +aa +aa +tb +Ah +YY +ZD +ZD +ZD +ZD +ZD +ZD +ZD +ZD +ZD +ZD +ZD +ZD +ZD +ZD +ZD +ZD +ZD +ZD +ZD +oM +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(78,1,1) = {" +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 +tb +tb +aa +aa +aa +aa +aa +gh +iP +hE +hE +hE +hE +hE +hE +hE +hE +hE +hE +hE +hE +kn +hE +hE +hE +hE +hE +hE +hE +hE +hE +hE +hE +hE +hE +hE +hE +hE +KG +aa +aa +aa +tb +jm +RL +tN +tN +tN +tN +tN +tN +tN +tN +tN +tN +tN +tN +tN +tN +tN +tN +tN +tN +tN +Zp +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(79,1,1) = {" +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 +tb +tb +aa +aa +aa +gh +gh +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +gh +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +gh +aa +aa +aa +tb +XE +Wj +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(80,1,1) = {" +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 +tb +tb +tb +gh +gh +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +gh +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +gh +aa +aa +aa +tb +wf +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(81,1,1) = {" +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 +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +aa +aa +aa +aa +aa +aa +gh +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +tb +tb +tb +tb +tb +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 +"} +(82,1,1) = {" +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 +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +tb +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 +"} +(83,1,1) = {" +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 +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 +"} +(84,1,1) = {" +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 +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 +"} +(85,1,1) = {" +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 +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 +"} +(86,1,1) = {" +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 +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 +"} +(87,1,1) = {" +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 +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 +"} +(88,1,1) = {" +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 +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 +"} +(89,1,1) = {" +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 +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 +"} +(90,1,1) = {" +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 +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 +"} +(91,1,1) = {" +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 +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 +"} +(92,1,1) = {" +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 +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 +"} +(93,1,1) = {" +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 +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 +"} +(94,1,1) = {" +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 +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 +"} +(95,1,1) = {" +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 +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 +"} +(96,1,1) = {" +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 +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 +"} +(97,1,1) = {" +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 +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 +"} +(98,1,1) = {" +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 +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 +"} +(99,1,1) = {" +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 +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 +"} +(100,1,1) = {" +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 +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 +"} +(101,1,1) = {" +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 +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 +"} +(102,1,1) = {" +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 +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 +"} +(103,1,1) = {" +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 +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 +"} +(104,1,1) = {" +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 +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 +"} +(105,1,1) = {" +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 +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 +"} +(106,1,1) = {" +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 +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 +"} +(107,1,1) = {" +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 +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 +"} +(108,1,1) = {" +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 +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 +"} +(109,1,1) = {" +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 +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 +"} +(110,1,1) = {" +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 +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 +"} +(111,1,1) = {" +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 +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 +"} +(112,1,1) = {" +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 +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 +"} +(113,1,1) = {" +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 +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 +"} +(114,1,1) = {" +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 +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 +"} +(115,1,1) = {" +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 +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 +"} +(116,1,1) = {" +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 +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 +"} +(117,1,1) = {" +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 +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 +"} +(118,1,1) = {" +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 +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 +"} +(119,1,1) = {" +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 +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 +"} +(120,1,1) = {" +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 +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 +"} diff --git a/mods/_maps/hand/maps/hand-2.dmm b/mods/_maps/hand/maps/hand-2.dmm new file mode 100644 index 0000000000000..068d9affb1eda --- /dev/null +++ b/mods/_maps/hand/maps/hand-2.dmm @@ -0,0 +1,19450 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/space, +/area/space) +"ad" = ( +/obj/structure/closet/wardrobe/hand/pcrc, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/engineering/storage) +"aw" = ( +/obj/paint/green, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/hydro) +"az" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/medical{ + name = "Medical Storage" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/medbay/storage) +"aA" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_HAND") + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper) +"aE" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/glass/medical{ + dir = 8; + name = "Treatment Center" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/hand/medbay) +"aH" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/industrial/outline/green, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hydro) +"aM" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/floordetail/edgedrain{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"aP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"aU" = ( +/obj/machinery/gibber, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/kitchen) +"aV" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/adv, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"aZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "hand_upper_pump" + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 8 + }, +/obj/machinery/airlock_sensor{ + id_tag = "hand_upper_sensor_chamber"; + pixel_x = -12; + pixel_y = 24; + frequency = 1380 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/airlock) +"bc" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"bf" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper) +"bg" = ( +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"bl" = ( +/obj/machinery/portable_atmospherics/powered/pump, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"bt" = ( +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"bz" = ( +/obj/structure/hygiene/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/random/soap, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"bD" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance/clean, +/obj/decal/cleanable/dirt, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/cargo) +"bG" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"bI" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"bJ" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/structure/lattice, +/turf/space, +/area/space) +"bK" = ( +/obj/decal/cleanable/filth, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hydro) +"bT" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/storage/box/freezer/blood/human, +/obj/item/storage/box/freezer/blood/human{ + pixel_y = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay/storage) +"bV" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/hand/crew) +"bZ" = ( +/obj/floor_decal/borderfloorblack/corner, +/obj/floor_decal/corner/paleblue/bordercorner, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"cc" = ( +/obj/wallframe_spawn, +/obj/paint/brown, +/turf/simulated/floor/plating, +/area/ship/hand/crew/bar) +"ce" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"co" = ( +/obj/machinery/cooker/fryer, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"cp" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/industrial/outline/green, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hydro) +"cz" = ( +/obj/machinery/optable, +/obj/floor_decal/floordetail/edgedrain{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"cC" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/airlock) +"cD" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/light, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/fore) +"cF" = ( +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"cG" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/civilian{ + dir = 4; + name = "Restroom" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"cI" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/turf/space, +/area/space) +"cL" = ( +/obj/wallframe_spawn/reinforced/bare, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "carrier_lock" + }, +/obj/paint/brown, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper) +"cQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"cW" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"db" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/submap_landmark/spawnpoint/away_hand, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"dc" = ( +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"dg" = ( +/obj/structure/sign/warning/airlock{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/airlock) +"dq" = ( +/obj/wallframe_spawn/reinforced/bare, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "carrier_lock" + }, +/obj/paint/brown, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/fore) +"dv" = ( +/obj/floor_decal/floordetail/edgedrain{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"dw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"dG" = ( +/turf/simulated/open, +/area/space) +"dK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"dL" = ( +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"dW" = ( +/obj/machinery/washing_machine, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"ed" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"em" = ( +/obj/machinery/door/airlock/external{ + id_tag = "hand_upper_external_door"; + locked = 1; + frequency = 1380 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/airlock) +"eq" = ( +/obj/structure/kitchenspike, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/kitchen) +"er" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"eu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"ex" = ( +/obj/structure/bed/chair/padded/green, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"ez" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"eC" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance/clean, +/obj/decal/cleanable/dirt, +/obj/random/toolbox, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo) +"eF" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"eI" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance/clean, +/obj/decal/cleanable/dirt, +/obj/random/solgov, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/cargo) +"eJ" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/hallway/upper/fore) +"eM" = ( +/obj/landmark/map_data{ + height = 2 + }, +/turf/space, +/area/space) +"eP" = ( +/obj/structure/grille, +/turf/space, +/area/space) +"eS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/submap_landmark/spawnpoint/away_hand/captain/guardsman, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"eZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"fa" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/submap_landmark/spawnpoint/away_hand, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"fb" = ( +/obj/wallframe_spawn, +/obj/machinery/door/firedoor, +/obj/paint/nt_white, +/turf/simulated/floor/plating, +/area/ship/hand/medbay) +"fh" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"fq" = ( +/obj/machinery/floodlight, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ft" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/decal/cleanable/dirt, +/obj/random/vendor{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/cargo) +"fx" = ( +/obj/structure/table/marble, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"fz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/submap_landmark/spawnpoint/away_hand, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"fA" = ( +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"fB" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper) +"fD" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/hallway/upper) +"fG" = ( +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"fN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"fZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"gg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"gh" = ( +/obj/machinery/button/blast_door{ + pixel_x = -24; + name = "Window Shields"; + id_tag = "cryo_lock"; + dir = 4; + pixel_y = -1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"gi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"gk" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper) +"gq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"gv" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"gw" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"gH" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/hand/crew) +"gI" = ( +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"gQ" = ( +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"gV" = ( +/obj/machinery/door/airlock/external{ + id_tag = "hand_upper_interior_door"; + locked = 1; + frequency = 1380 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/airlock) +"gX" = ( +/obj/machinery/sleeper{ + dir = 4 + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "iaaright" + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"hb" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/kitchen) +"hn" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"ho" = ( +/obj/structure/table/marble, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"hw" = ( +/obj/structure/closet/crate/large, +/obj/item/stock_parts/power/terminal/buildable, +/obj/item/stock_parts/power/terminal/buildable, +/obj/item/stock_parts/power/terminal/buildable, +/obj/item/stock_parts/power/battery/buildable, +/obj/item/stock_parts/power/battery/buildable, +/obj/item/stock_parts/power/battery/buildable, +/obj/item/stock_parts/power/apc/buildable, +/obj/item/stock_parts/power/apc/buildable, +/obj/item/stock_parts/power/apc/buildable, +/obj/item/stock_parts/keyboard, +/obj/item/stock_parts/keyboard, +/obj/item/stock_parts/keyboard, +/obj/item/stock_parts/keyboard, +/obj/item/stock_parts/console_screen, +/obj/item/stock_parts/console_screen, +/obj/item/stock_parts/console_screen, +/obj/item/stock_parts/console_screen, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/engineering/storage) +"hy" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"hz" = ( +/obj/structure/closet/crate/large/hydroponics, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/plasteel/fifty, +/obj/item/stack/material/plasteel/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/obj/machinery/light_switch{ + pixel_x = 7; + pixel_y = 26 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/engineering/storage) +"hD" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"hG" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"hH" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"hT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hydro) +"hZ" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"iE" = ( +/obj/decal/cleanable/flour, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/kitchen) +"iK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper) +"iL" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/reagent_containers/glass/bucket, +/obj/structure/cable, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hydro) +"iY" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"iZ" = ( +/obj/machinery/jukebox/old, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"jg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/kitchen) +"jx" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay/storage) +"jD" = ( +/obj/paint/nt_white, +/turf/simulated/wall, +/area/ship/hand/medbay) +"jP" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/cargo) +"jX" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/industrial/outline/green, +/obj/machinery/light, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hydro) +"jZ" = ( +/turf/simulated/open, +/area/ship/hand/crew/hallway/upper/aft) +"kj" = ( +/obj/structure/table/woodentable/mahogany, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"kv" = ( +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"kC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"kI" = ( +/obj/structure/table/woodentable/mahogany, +/obj/item/board, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"kK" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/ash, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/cargo) +"kM" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/fore) +"kX" = ( +/obj/machinery/reagentgrinder, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"lc" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"lg" = ( +/obj/machinery/cryopod{ + dir = 2 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/hand/crew) +"lo" = ( +/obj/paint/black, +/obj/paint/black, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/toilet) +"lx" = ( +/obj/structure/window/reinforced/polarized{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/auto_cpr, +/obj/floor_decal/floordetail/edgedrain{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"lC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"lE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"lH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"lO" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/medical/lite, +/obj/random/medical, +/obj/item/storage/box/beakers/insulated, +/obj/item/storage/box/bodybags, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/medbay/storage) +"mk" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"mo" = ( +/obj/floor_decal/snow, +/obj/structure/closet/fridge/meat, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/kitchen) +"mq" = ( +/obj/paint/black, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/hydro) +"ms" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/engineering/storage) +"mF" = ( +/obj/structure/table/marble, +/obj/machinery/reagent_temperature, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"mK" = ( +/obj/structure/table/marble, +/obj/item/material/kitchen/rollingpin{ + pixel_x = -4; + pixel_y = 7 + }, +/obj/item/reagent_containers/food/condiment/soysauce, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"mQ" = ( +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hydro) +"mW" = ( +/obj/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/airlock) +"mZ" = ( +/obj/structure/window/reinforced/polarized{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/floor_decal/floordetail/edgedrain{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"nf" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/fruit_smudge, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo) +"nk" = ( +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "iaaright" + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/sleeper/survival_pod{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"nm" = ( +/obj/structure/table/marble, +/obj/machinery/cooker/cereal{ + pixel_y = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"nz" = ( +/obj/item/device/flashlight/lamp/floodlamp, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"nB" = ( +/obj/structure/table/standard, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24; + req_access = list("ACCESS_HAND") + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -21; + pixel_y = -10 + }, +/obj/random/soap, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"nJ" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/paint/black, +/turf/simulated/floor/plating, +/area/ship/hand/crew) +"nL" = ( +/obj/decal/cleanable/flour, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/kitchen) +"nY" = ( +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"ob" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/food/condiment/flour, +/obj/floor_decal/snow, +/obj/item/reagent_containers/food/condiment/flour, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/kitchen) +"og" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/medbay/storage) +"oh" = ( +/obj/shuttle_landmark/nav_hand/nav2, +/turf/space, +/area/space) +"ot" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/cargo) +"ou" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"oC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hydro) +"oF" = ( +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"oH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"oM" = ( +/obj/structure/table/marble, +/obj/machinery/reagentgrinder/juicer{ + pixel_y = 8 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"oT" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"oY" = ( +/obj/machinery/cryopod, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/hand/crew) +"pb" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"pi" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"pn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay/storage) +"pp" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/turf/simulated/floor/shuttle_ceiling, +/area/space) +"pr" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"pu" = ( +/obj/structure/cable{ + d1 = 32; + d2 = 2; + icon_state = "32-2" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/zpipe/down/supply, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/down, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/open, +/area/ship/hand/crew/hallway/upper/fore) +"pv" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"pA" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/condiment/salt, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"pH" = ( +/obj/structure/bed/sofa/r/brown{ + dir = 4 + }, +/turf/simulated/floor/carpet/green, +/area/ship/hand/crew/bar) +"pS" = ( +/obj/structure/bed/sofa/l/brown{ + dir = 4 + }, +/turf/simulated/floor/carpet/green, +/area/ship/hand/crew/bar) +"qe" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"qm" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/fore) +"qp" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance/clean, +/obj/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 4 + }, +/obj/random/solgov, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/cargo) +"qz" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/roller_bed, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"qB" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"qK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper) +"qQ" = ( +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"qU" = ( +/obj/structure/hygiene/toilet{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"rb" = ( +/obj/machinery/door/airlock/external{ + id_tag = "hand_upper_interior_door"; + locked = 1; + frequency = 1380 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4; + icon_state = "intact" + }, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "hand_upper"; + pixel_y = -23 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/airlock) +"rd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay/storage) +"re" = ( +/obj/machinery/chemical_dispenser/full, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"ri" = ( +/obj/decal/cleanable/dirt, +/obj/item/usedcryobag, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/cargo) +"rp" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/generic, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo) +"rz" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/storage/box/autoinjectors, +/obj/item/storage/box/syringes, +/obj/item/storage/box/masks, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay/storage) +"rK" = ( +/obj/paint/nt_white, +/turf/simulated/wall, +/area/ship/hand/medbay/storage) +"rQ" = ( +/obj/machinery/chemical_dispenser/bar_coffee/full{ + dir = 4; + pixel_y = 11 + }, +/obj/structure/table/gamblingtable, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"rR" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"rT" = ( +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"se" = ( +/obj/structure/table/woodentable/mahogany, +/obj/random/single/playing_cards, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"sg" = ( +/obj/structure/closet/crate/secure/gear, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/obj/item/storage/belt/utility/full, +/obj/item/storage/belt/utility/full, +/obj/item/pickaxe/drill, +/obj/item/pickaxe/drill, +/obj/item/device/suit_cooling_unit, +/obj/item/device/suit_cooling_unit, +/obj/item/shuttle_beacon, +/obj/item/shuttle_beacon, +/obj/item/shuttle_beacon, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/geiger, +/obj/item/device/binoculars, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/engineering/storage) +"so" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/door/airlock/civilian, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/bar) +"sr" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/ship/hand/cargo) +"sH" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper) +"sO" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"sP" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/airlock) +"sZ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"tf" = ( +/obj/paint/brown, +/turf/simulated/wall, +/area/ship/hand/crew/kitchen) +"th" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 21 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"tj" = ( +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"tr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"tz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/fore) +"tD" = ( +/obj/decal/cleanable/dirt, +/obj/floor_decal/snow, +/obj/structure/closet/fridge, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/kitchen) +"tF" = ( +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"tH" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ship/hand/airlock) +"tO" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/danger, +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"tZ" = ( +/obj/decal/cleanable/fruit_smudge, +/obj/floor_decal/snow, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/kitchen) +"ul" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"uo" = ( +/obj/structure/table/marble, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/item/reagent_containers/food/condiment/small/peppermill, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_y = 10; + pixel_x = -7 + }, +/obj/item/reagent_containers/food/condiment/small/sugar{ + pixel_y = 5; + pixel_x = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"uq" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"uv" = ( +/obj/structure/bed/chair/padded/green{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"uw" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"uE" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/storage) +"uL" = ( +/obj/machinery/atmospherics/unary/freezer{ + dir = 1; + icon_state = "freezer"; + set_temperature = 80; + use_power = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/sign/warning/nosmoking_1{ + dir = 8; + pixel_x = 32; + pixel_y = 5 + }, +/obj/machinery/light, +/obj/machinery/light_switch{ + pixel_x = 24; + dir = 8; + pixel_y = -5 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"uR" = ( +/obj/structure/table/reinforced, +/obj/machinery/reagent_temperature, +/obj/item/reagent_containers/glass/beaker/cryoxadone{ + pixel_y = 14 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"uT" = ( +/obj/paint/black, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew) +"va" = ( +/obj/paint/brown, +/turf/simulated/wall, +/area/ship/hand/crew/bar) +"vx" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/fore) +"vz" = ( +/obj/structure/catwalk, +/turf/space, +/area/space) +"vF" = ( +/obj/item/device/mmi, +/obj/structure/closet/crate/freezer, +/obj/item/device/mmi, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/medbay/storage) +"vH" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/space, +/area/space) +"vK" = ( +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"vP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"vY" = ( +/turf/simulated/floor/shuttle_ceiling, +/area/space) +"wg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"wj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/fore) +"wl" = ( +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"wn" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"wv" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/rescue/loaded, +/obj/item/bodybag/rescue/loaded, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1; + id_tag = null + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/medbay/storage) +"wD" = ( +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"wE" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/multi_tile/glass/civilian{ + name = "Hallway" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper) +"wM" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"wV" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"xe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/submap_landmark/spawnpoint/away_hand, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"xk" = ( +/obj/machinery/vending/dinnerware{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"xm" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"xv" = ( +/obj/structure/hygiene/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"xx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay/storage) +"xG" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/cargo) +"xK" = ( +/obj/structure/table/reinforced, +/obj/item/defibrillator/loaded, +/obj/floor_decal/floordetail/edgedrain{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"xM" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/cargo) +"xQ" = ( +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/ship/hand/crew) +"xR" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/multi_tile/glass/civilian{ + name = "Hallway" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"xT" = ( +/obj/structure/iv_stand, +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack/corner2, +/obj/floor_decal/corner/paleblue/bordercorner2, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay/storage) +"xY" = ( +/obj/structure/bed/sofa/m/brown{ + dir = 4 + }, +/obj/machinery/vending/wallmed2{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/floor/carpet/green, +/area/ship/hand/crew/bar) +"yi" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance/clean, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo) +"yx" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + id_tag = "cryo_lock"; + dir = 2 + }, +/obj/paint/black, +/turf/simulated/floor/plating, +/area/ship/hand/crew) +"yF" = ( +/obj/structure/table/marble, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/item/reagent_containers/food/condiment/small/oliveoil, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"yN" = ( +/obj/structure/table/marble, +/obj/machinery/fabricator/micro/bartender, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"yW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"yY" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/surgery, +/obj/floor_decal/floordetail/edgedrain{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"yZ" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"zb" = ( +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"zp" = ( +/obj/structure/sign/botany{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"zs" = ( +/obj/decal/cleanable/greenglow, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hydro) +"zz" = ( +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"zF" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper) +"zI" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/generic, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/cargo) +"zM" = ( +/obj/paint/black, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/toilet) +"zQ" = ( +/obj/structure/table/marble, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"zZ" = ( +/obj/floor_decal/industrial/danger/corner, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"Ae" = ( +/obj/machinery/cooker/oven, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"Al" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "hand_upper_pump" + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + frequency = 1380; + id_tag = "hand_upper"; + pixel_y = 26; + tag_airpump = "hand_upper_pump"; + tag_chamber_sensor = "hand_upper_sensor_chamber"; + tag_exterior_door = "hand_upper_external_door"; + tag_interior_door = "hand_upper_interior_door" + }, +/obj/floor_decal/industrial/warning/cee{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/airlock) +"Ay" = ( +/obj/machinery/chem_master, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"AB" = ( +/obj/structure/table/marble, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/item/reagent_containers/food/condiment/barbecue, +/obj/item/reagent_containers/food/condiment/enzyme{ + pixel_y = 5; + pixel_x = -7 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"AT" = ( +/obj/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"Bo" = ( +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/paleblue/border, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"Bq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/sign/directions/med{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/fore) +"Bu" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/kitchen) +"Bv" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/fore) +"BB" = ( +/obj/structure/closet/crate/plastic, +/obj/machinery/firealarm{ + pixel_y = 18 + }, +/obj/item/seeds/weeds, +/obj/item/seeds/weeds, +/obj/item/seeds/weeds, +/obj/item/seeds/weeds, +/obj/item/seeds/random, +/obj/item/seeds/random, +/obj/item/seeds/random, +/obj/item/seeds/random, +/obj/item/seeds/random, +/obj/item/seeds/random, +/obj/item/seeds/random, +/obj/item/seeds/random, +/obj/item/seeds/random, +/obj/item/seeds/random, +/obj/item/seeds/potatoseed, +/obj/item/seeds/potatoseed, +/obj/item/seeds/potatoseed, +/obj/item/seeds/potatoseed, +/obj/item/seeds/potatoseed, +/obj/item/seeds/bananaseed, +/obj/item/seeds/ambrosiadeusseed, +/obj/item/seeds/ambrosiadeusseed, +/obj/item/seeds/ambrosiadeusseed, +/obj/item/seeds/ambrosiadeusseed, +/obj/item/seeds/ambrosiavulgarisseed, +/obj/item/seeds/ambrosiavulgarisseed, +/obj/item/seeds/carrotseed, +/obj/item/seeds/carrotseed, +/obj/item/seeds/carrotseed, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/engineering/storage) +"BE" = ( +/obj/machinery/disposal/small, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/sign/warning/deathsposal{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"BI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"BN" = ( +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/item/storage/briefcase/inflatable, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"BR" = ( +/obj/floor_decal/snow, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/kitchen) +"BT" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"BU" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"BW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"BZ" = ( +/obj/structure/table/marble, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/item/reagent_containers/food/condiment/ketchup, +/obj/item/reagent_containers/food/condiment/mayo{ + pixel_y = 9; + pixel_x = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"Cd" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper) +"Cj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"Cl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/obj/floor_decal/snow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/kitchen) +"Ct" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance/clean, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/cobweb, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/cargo) +"Cw" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/storage) +"Cy" = ( +/obj/machinery/body_scanconsole{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 5 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"CD" = ( +/obj/machinery/seed_storage/garden{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/green, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hydro) +"CF" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"CI" = ( +/obj/structure/closet/crate/large, +/obj/item/tank/hydrogen, +/obj/item/tank/hydrogen, +/obj/item/tank/hydrogen, +/obj/item/tank/hydrogen, +/obj/item/tank/hydrogen, +/obj/item/tank/hydrogen, +/obj/item/tank/hydrogen, +/obj/item/device/flashlight/upgraded, +/obj/item/device/flashlight/upgraded, +/obj/item/device/flashlight/upgraded, +/obj/item/airlock_brace, +/obj/item/airlock_brace, +/obj/item/airlock_brace, +/obj/item/airlock_brace, +/obj/item/airlock_brace, +/obj/item/airlock_brace, +/obj/item/material/twohanded/jack, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/engineering/storage) +"CN" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"CS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"CW" = ( +/obj/structure/catwalk, +/obj/structure/ladder, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/open, +/area/space) +"CY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay/storage) +"De" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/industrial/outline/green, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hydro) +"Dt" = ( +/obj/structure/table/marble, +/obj/machinery/cooker/candy{ + pixel_y = 14 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"Dx" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"DB" = ( +/obj/structure/hygiene/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"DI" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"DL" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance/clean, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/cobweb2, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo) +"DM" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/space, +/area/space) +"DO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"DT" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/floor_decal/industrial/hatch/red, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"DY" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"Eg" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/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" + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"Ej" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/medical, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew) +"Em" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"Ep" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/storage/firstaid/stab, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/medbay/storage) +"Eq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/fore) +"Et" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"Ez" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"EH" = ( +/obj/structure/lattice, +/turf/space, +/area/space) +"EP" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance/clean, +/obj/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/cargo) +"Fi" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo) +"Fl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"Fo" = ( +/obj/machinery/door/airlock/civilian{ + name = "Toilet"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"FM" = ( +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_HAND") + }, +/obj/item/inflatable_dispenser, +/obj/structure/table/rack, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/airlock) +"FR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"FS" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/blast/regular/open{ + name = "Bridge Blast Doors"; + id_tag = "hand_hallway" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/multi_tile/glass/civilian{ + name = "Hallway" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/fore) +"FT" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/airlock) +"Ga" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper) +"Gd" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"GG" = ( +/obj/machinery/smartfridge, +/turf/simulated/floor/plating, +/area/ship/hand/crew/kitchen) +"GV" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped, +/turf/space, +/area/space) +"Hi" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/airlock) +"Hj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"Hm" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/structure/sign/poster{ + pixel_x = -32 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"Hw" = ( +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light_switch{ + pixel_x = 21; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"HE" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance/clean, +/obj/decal/cleanable/dirt, +/obj/random/masks, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo) +"HV" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/sign/warning/deathsposal{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"Ib" = ( +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"Ih" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"Il" = ( +/obj/structure/bed/chair/padded/green{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"In" = ( +/obj/paint/green, +/turf/simulated/wall, +/area/ship/hand/crew/toilet) +"It" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/space, +/area/space) +"ID" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/submap_landmark/spawnpoint/away_hand/surgeon, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"IM" = ( +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"IQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/medbay/storage) +"IX" = ( +/obj/structure/table/marble, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"Jd" = ( +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"Jy" = ( +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"JD" = ( +/obj/floor_decal/borderfloorblack/corner{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"JG" = ( +/obj/structure/closet/wardrobe/hand/saare, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/engineering/storage) +"JH" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"JJ" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo) +"JN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"JR" = ( +/obj/machinery/smartfridge/drying_rack, +/obj/floor_decal/industrial/outline/green, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hydro) +"Ka" = ( +/obj/machinery/vending/lavatory, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"Kc" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper) +"Kk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24; + req_access = list("ACCESS_HAND") + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"Km" = ( +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"Kr" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"Ku" = ( +/obj/structure/handrail, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"Ky" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"Kz" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/small{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/sign/warning/deathsposal{ + pixel_x = 32; + pixel_y = 0 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"KE" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"KH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/obj/floor_decal/industrial/danger/corner, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"KP" = ( +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"Ln" = ( +/obj/machinery/vending/hydronutrients/generic{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/green, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hydro) +"Ly" = ( +/obj/structure/closet/crate/secure/biohazard{ + req_access = list("ACCESS_HAND") + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay/storage) +"Lz" = ( +/obj/paint/brown, +/turf/simulated/wall, +/area/ship/hand/medbay/storage) +"LA" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/open{ + name = "Bridge Blast Doors"; + id_tag = "hand_hallway" + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"LD" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/civilian, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/hand/crew/kitchen) +"LF" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/bar) +"LG" = ( +/obj/paint/green, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/toilet) +"LO" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/item/storage/firstaid/sleekstab, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"LT" = ( +/obj/decal/cleanable/dirt, +/obj/item/trash/cakewrap, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo) +"LY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/obj/structure/sign/directions/med{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/fore) +"Mb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/button/blast_door{ + pixel_x = -24; + name = "Window Shields"; + id_tag = "carrier_lock"; + dir = 4; + pixel_y = -1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/fore) +"Me" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo) +"Mt" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/space, +/area/space) +"MB" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"MD" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/medbay/storage) +"MH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"ML" = ( +/obj/machinery/chemical_dispenser/bar_alc/full{ + pixel_y = 8; + dir = 4 + }, +/obj/structure/table/gamblingtable, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"Nf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"Ni" = ( +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"Nw" = ( +/obj/structure/bed/chair/padded/green{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"Nz" = ( +/obj/machinery/door/airlock/corporate, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/engineering/storage) +"NA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hydro) +"NC" = ( +/obj/paint/nt_white, +/turf/simulated/wall/r_wall, +/area/ship/hand/medbay) +"NI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"NM" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/decal/cleanable/dirt, +/obj/random/closet, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/cargo) +"NW" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/maintenance{ + name = "Maintenance Storage" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo) +"Oa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"Ou" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"Ow" = ( +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"OA" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance/clean, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/cargo) +"OH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/computer/cryopod{ + pixel_y = 26 + }, +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"OI" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"OQ" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/floor_decal/industrial/outline/green, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hydro) +"OU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/submap_landmark/spawnpoint/away_hand/captain, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"Pf" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/ship/hand/airlock) +"Pg" = ( +/obj/structure/table/rack, +/obj/item/stock_parts/circuitboard/stationalert, +/obj/item/stock_parts/circuitboard/stationalert, +/obj/item/stock_parts/circuitboard/solar_control, +/obj/item/stock_parts/circuitboard/miningdrillbrace, +/obj/item/stock_parts/circuitboard/miningdrillbrace, +/obj/item/stock_parts/circuitboard/miningdrill, +/obj/item/stock_parts/circuitboard/mech_recharger, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/engineering/storage) +"Pw" = ( +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"PD" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/medical/lite, +/obj/random/medical, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/medbay/storage) +"PN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"PT" = ( +/obj/machinery/door/airlock/civilian{ + name = "Toilet"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"PW" = ( +/obj/decal/cleanable/filth, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"Qd" = ( +/obj/machinery/chemical_dispenser/bar_soft/full{ + pixel_y = 8; + dir = 4 + }, +/obj/structure/table/gamblingtable, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"Qo" = ( +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"QE" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/glass/civilian{ + name = "Hydroponics Bay" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hydro) +"QM" = ( +/obj/machinery/washing_machine, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"QQ" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo) +"QS" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"QT" = ( +/obj/structure/hygiene/sink{ + pixel_y = -15 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"QU" = ( +/obj/structure/handrail{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"Ra" = ( +/obj/structure/sign/poster{ + pixel_y = 32 + }, +/turf/simulated/floor/carpet/green, +/area/ship/hand/crew/bar) +"Rg" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/flour, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/cargo) +"Ro" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/ship/hand/crew/bar) +"Rv" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"Rz" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/hand/airlock) +"RW" = ( +/obj/structure/railing/mapped, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"Sb" = ( +/obj/structure/closet/emcloset/anchored, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/storage/briefcase/inflatable, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"Sm" = ( +/obj/random/toolbox, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"Sn" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/paleblue/border, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"Su" = ( +/obj/structure/hygiene/sink{ + pixel_y = -15 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"Sv" = ( +/obj/machinery/smartfridge/chemistry, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/hand/medbay/storage) +"Sy" = ( +/obj/paint/nt_white, +/turf/simulated/wall/r_wall, +/area/ship/hand/medbay/storage) +"SD" = ( +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "iaaright" + }, +/obj/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 10 + }, +/obj/structure/roller_bed, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + dir = 1; + pixel_x = 0; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"SZ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ship/hand/airlock) +"Td" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/freezer, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/kitchen) +"Te" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/catwalk, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"Ts" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/medbay/storage) +"Tu" = ( +/turf/simulated/floor/carpet/green, +/area/ship/hand/crew/bar) +"Tv" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/maintenance/clean, +/obj/decal/cleanable/dirt, +/obj/random/coin, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/cargo) +"Tx" = ( +/obj/machinery/bodyscanner{ + dir = 1 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"TF" = ( +/obj/structure/handrail{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 1; + icon_state = "railing0-1" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"TM" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/space, +/area/space) +"TV" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/danger/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"TY" = ( +/obj/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/fore) +"Un" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_HAND") + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/storage) +"UC" = ( +/obj/structure/table/rack, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/hand/crew/hydro) +"UE" = ( +/obj/floor_decal/floordetail/edgedrain{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"UJ" = ( +/obj/machinery/vitals_monitor, +/obj/floor_decal/floordetail/edgedrain, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"UN" = ( +/obj/item/trash/cakewrap, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/medbay/storage) +"UO" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"UQ" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/medical{ + name = "Medical Storage" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/hand/medbay/storage) +"UT" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 8 + }, +/obj/machinery/vending/wallmed2{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"UX" = ( +/obj/shuttle_landmark/nav_hand/nav4, +/turf/space, +/area/space) +"UY" = ( +/obj/structure/closet/wardrobe/hand/zpci, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/engineering/storage) +"Vk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/storage) +"Vl" = ( +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper) +"Vm" = ( +/obj/structure/handrail{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"Vr" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/hand/crew/toilet) +"VD" = ( +/obj/machinery/organ_printer/robot/mapped, +/obj/floor_decal/floordetail/edgedrain{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"VF" = ( +/obj/structure/window/reinforced/polarized{ + dir = 1 + }, +/obj/machinery/organ_printer/flesh/mapped, +/obj/floor_decal/floordetail/edgedrain{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"VS" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/engineering/storage) +"VT" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/decal/cleanable/dirt, +/obj/random/vendor{ + dir = 1 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/cargo) +"Wf" = ( +/turf/simulated/open, +/area/ship/hand/crew/hallway/upper/fore) +"Wi" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper/aft) +"Wm" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"Ww" = ( +/obj/structure/table/rack, +/obj/item/stack/material/plasteel/fifty, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/engineering/storage) +"WB" = ( +/obj/structure/dispenser/oxygen, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/airlock) +"WL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"WM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"WO" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -5 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -5 + }, +/obj/item/storage/belt/medical, +/obj/item/storage/belt/medical, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/storage/briefcase/inflatable, +/turf/simulated/floor/tiled/steel_ridged, +/area/ship/hand/medbay/storage) +"Xb" = ( +/obj/floor_decal/floordetail/edgedrain, +/obj/structure/closet/walllocker{ + pixel_y = -28; + name = "biomechanical surgery" + }, +/obj/item/stack/nanopaste, +/obj/item/stack/nanopaste, +/obj/item/swapper/power_drill, +/obj/item/swapper/jaws_of_life, +/obj/item/tape_roll, +/obj/item/weldingtool/electric, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"Xp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"Xw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 9 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"XC" = ( +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"XE" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/hand/medbay) +"XF" = ( +/obj/floor_decal/borderfloorblack, +/obj/floor_decal/corner/paleblue/border, +/obj/submap_landmark/spawnpoint/away_hand/captain/pilot, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew) +"XI" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/structure/catwalk, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ship/hand/airlock) +"XU" = ( +/obj/machinery/cooker/grill, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"XV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/medbay/storage) +"XX" = ( +/obj/structure/catwalk, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/space, +/area/space) +"YF" = ( +/obj/structure/catwalk, +/obj/structure/ladder, +/turf/simulated/open, +/area/space) +"YG" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/hand/crew/hydro) +"YL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/ship/hand/crew/hallway/upper) +"YO" = ( +/obj/item/trash/cakewrap, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"YP" = ( +/obj/machinery/door/airlock/hatch, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/airlock) +"YU" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/turf/simulated/floor/tiled/techmaint, +/area/ship/hand/crew/hallway/upper/aft) +"YX" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/medical/lite, +/obj/random/firstaid, +/obj/random/firstaid, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/medbay/storage) +"Zu" = ( +/obj/machinery/door/airlock/external{ + id_tag = "hand_upper_external_door"; + locked = 1; + frequency = 1380 + }, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "hand_upper"; + pixel_y = -23; + pixel_z = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/hand/airlock) +"Zx" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay) +"ZM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/crew/kitchen) +"ZO" = ( +/obj/paint/brown, +/turf/simulated/wall/r_wall, +/area/ship/hand/crew/hallway/upper/aft) +"ZU" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/hand/cargo) +"ZW" = ( +/obj/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue/border{ + dir = 5 + }, +/obj/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue/bordercorner2{ + dir = 4 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_HAND") + }, +/turf/simulated/floor/tiled/white, +/area/ship/hand/medbay/storage) + +(1,1,1) = {" +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 +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 +eM +"} +(2,1,1) = {" +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 +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 +"} +(3,1,1) = {" +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 +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 +"} +(4,1,1) = {" +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 +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 +"} +(5,1,1) = {" +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 +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 +"} +(6,1,1) = {" +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 +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 +"} +(7,1,1) = {" +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 +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 +"} +(8,1,1) = {" +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 +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 +"} +(9,1,1) = {" +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 +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 +"} +(10,1,1) = {" +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 +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 +"} +(11,1,1) = {" +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 +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 +"} +(12,1,1) = {" +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 +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 +"} +(13,1,1) = {" +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 +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 +"} +(14,1,1) = {" +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 +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 +"} +(15,1,1) = {" +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 +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 +"} +(16,1,1) = {" +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 +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 +"} +(17,1,1) = {" +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 +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 +"} +(18,1,1) = {" +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 +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 +"} +(19,1,1) = {" +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 +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 +"} +(20,1,1) = {" +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 +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 +"} +(21,1,1) = {" +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 +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 +"} +(22,1,1) = {" +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 +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 +"} +(23,1,1) = {" +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 +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 +"} +(24,1,1) = {" +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 +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 +"} +(25,1,1) = {" +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 +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 +"} +(26,1,1) = {" +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 +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 +"} +(27,1,1) = {" +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 +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 +"} +(28,1,1) = {" +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 +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 +"} +(29,1,1) = {" +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 +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 +"} +(30,1,1) = {" +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 +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 +"} +(31,1,1) = {" +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 +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 +"} +(32,1,1) = {" +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 +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 +"} +(33,1,1) = {" +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 +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 +"} +(34,1,1) = {" +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 +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 +"} +(35,1,1) = {" +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 +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 +"} +(36,1,1) = {" +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 +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 +"} +(37,1,1) = {" +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 +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 +"} +(38,1,1) = {" +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 +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 +"} +(39,1,1) = {" +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 +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 +"} +(40,1,1) = {" +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 +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(41,1,1) = {" +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 +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +aa +aa +aa +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(42,1,1) = {" +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 +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +EH +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +EH +aa +aa +aa +aa +aa +EH +aa +aa +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +aa +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(43,1,1) = {" +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 +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +EH +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +EH +aa +aa +aa +aa +aa +EH +aa +aa +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +aa +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(44,1,1) = {" +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 +TM +aa +aa +aa +aa +aa +aa +aa +aa +vY +vY +aa +aa +EH +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +aa +aa +aa +EH +aa +aa +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +aa +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(45,1,1) = {" +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 +TM +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +aa +aa +EH +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +aa +aa +aa +EH +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(46,1,1) = {" +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 +TM +TM +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +aa +aa +aa +EH +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +vH +vH +uq +uq +uq +uq +uq +uq +UO +EH +EH +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(47,1,1) = {" +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 +TM +TM +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +aa +aa +aa +uq +uq +uq +uq +uq +uq +uq +uq +uq +aa +aa +aa +aa +aa +vz +YF +zz +zz +zz +zz +zz +zz +RW +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 +"} +(48,1,1) = {" +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 +TM +TM +aa +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +aa +aa +aa +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +RW +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 +"} +(49,1,1) = {" +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 +TM +TM +aa +aa +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +aa +aa +aa +zz +zz +zz +zz +zz +zz +zz +zz +zz +Vm +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +RW +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 +"} +(50,1,1) = {" +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 +TM +TM +TM +TM +TM +aa +aa +aa +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +aa +aa +zz +zz +zz +zz +zz +zz +zz +aw +aw +aw +aw +aw +aw +aw +zz +zz +zz +zz +Sm +zz +zz +zz +RW +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 +"} +(51,1,1) = {" +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 +TM +TM +TM +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +aa +aa +EH +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +cI +cI +cI +zz +zz +zz +ms +ms +ms +ms +aw +aw +OQ +OQ +cp +OQ +OQ +aw +aw +zz +nz +zz +zz +zz +zz +zz +zz +RW +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 +"} +(52,1,1) = {" +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 +TM +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cI +cI +Pw +Pw +Pw +Pw +pp +pp +cI +cI +bJ +cI +cI +zz +zz +zz +zz +aa +aa +aa +aa +aa +aa +aa +aa +EH +vz +YF +zz +zz +zz +zz +ms +hw +Un +Ww +aw +De +mQ +mQ +mQ +mQ +mQ +jX +aw +zz +zz +zz +zz +zz +zz +zz +zz +RW +EH +EH +EH +EH +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(53,1,1) = {" +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 +TM +aa +aa +aa +aa +aa +aa +Pw +Pw +Pw +Pw +cI +cI +cI +vz +vz +Sy +Sy +Sy +Sy +NC +NC +NC +NC +NC +NC +NC +NC +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +hb +hb +hb +hb +hb +ms +BB +Cw +Pg +aw +OQ +mQ +mQ +mQ +mQ +bK +OQ +aw +Ku +zz +zz +zz +zz +zz +zz +RW +aa +aa +aa +aa +aa +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(54,1,1) = {" +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 +TM +aa +aa +aa +Pw +Pw +Pw +zz +zz +zz +MD +MD +MD +MD +MD +Sy +Sy +rz +bT +rK +kX +LO +aV +VF +yY +cz +aM +NC +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +hb +aU +tZ +eq +tD +ms +sg +Vk +UY +aw +OQ +mQ +mQ +JR +mQ +mQ +OQ +aw +zz +zz +zz +zz +zz +zz +zz +RW +aa +aa +aa +aa +aa +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(55,1,1) = {" +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 +TM +aa +aa +bg +zz +zz +zz +zz +zz +zz +MD +vF +Ts +og +az +rd +xx +pn +CY +UQ +lH +Nf +Sn +UE +lH +DT +UJ +NC +LF +LF +LF +LF +LF +LF +LF +hb +hb +hb +hb +hb +hb +hb +hb +mo +nL +Bu +BR +ms +CI +uE +ad +aw +OQ +mQ +zs +mQ +mQ +mQ +aH +aw +zz +zz +Vm +zz +zz +zz +zz +RW +aa +aa +aa +aa +aa +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(56,1,1) = {" +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 +TM +aa +aa +CW +zz +xG +xG +xG +xG +xG +xG +Ep +UN +wv +Lz +ZW +jx +Ly +xT +Sv +dc +XC +wV +mZ +XC +lC +Xb +jD +pH +xY +pS +rQ +Qd +ML +Hm +yN +xk +oM +fx +IX +BI +WL +Td +jg +Cl +iE +ob +ms +hz +VS +JG +aw +De +bK +NA +oC +YG +mQ +jX +mq +uT +uT +uT +uT +uT +uT +zz +zz +vH +XX +aa +aa +aa +It +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(57,1,1) = {" +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 +TM +aa +aa +bg +xG +xG +Ct +EP +eI +Tv +xG +PD +IQ +WO +MD +Sy +Sy +Sy +Sy +Sy +eF +uR +wV +lx +xK +dv +VD +jD +Ra +Tu +Tu +QS +wD +wD +fA +ho +Km +Km +Km +Km +pb +BE +tf +tf +tf +tf +tf +ms +ms +Nz +ms +aw +aw +CD +Ln +hT +UC +iL +mq +uT +Sb +kC +Ni +UT +Ib +uT +uT +CF +YF +GV +aa +aa +aa +aa +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(58,1,1) = {" +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 +TM +aa +aa +bg +xG +yi +QQ +Rg +ri +ZU +xG +lO +XV +YX +MD +Wf +Wf +kv +qQ +NC +re +rR +JD +gX +nk +fh +SD +jD +hn +uv +uv +Nw +Et +Ro +fA +ho +Hj +AB +mK +pA +Ih +Km +GG +dL +DY +jZ +jZ +ZO +dL +Wm +bt +bt +aw +aw +aw +QE +aw +aw +uT +Xw +MH +fa +OU +fz +pv +gh +yx +qB +zz +GV +aa +aa +aa +aa +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(59,1,1) = {" +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 +TM +aa +aa +bg +xG +HE +LT +QQ +ot +ft +xG +MD +MD +MD +MD +nY +oF +cF +PW +NC +Ay +XC +XC +Jd +Jd +fZ +HV +jD +ex +kj +kI +se +cQ +bI +fA +ho +oH +zQ +Km +BZ +ez +Dt +tf +zb +Ow +KP +KP +wn +dL +Wm +dL +dL +wn +oT +zp +WM +dL +dL +nJ +eu +IM +oY +oY +oY +IM +iY +yx +qB +vz +GV +aa +aa +aa +aa +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(60,1,1) = {" +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 +TM +aa +aa +TF +xG +eC +rp +sr +NM +VT +xG +bl +tO +pu +vP +wj +wj +wj +tz +NC +qz +gg +dw +dw +dw +ou +Bo +jD +wM +Il +Il +Il +Ky +wD +fA +uo +ZM +YO +JN +CN +Eg +mF +tf +Te +Dx +BW +aP +hH +Dx +Wi +Dx +gv +lc +FR +FR +Ou +BW +aP +Ej +eS +gH +xQ +xQ +xQ +lg +XF +yx +qB +GV +aa +aa +aa +aa +aa +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +oh +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(61,1,1) = {" +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 +TM +aa +aa +bg +xG +yi +nf +Me +xM +zI +NW +gw +fN +sZ +KH +gI +gI +TY +cD +NC +pr +Xp +Tx +Cy +Zx +gi +uL +jD +hG +gq +gq +KE +Cj +Kz +iZ +yF +XU +Ae +co +pi +Hw +nm +tf +Kk +zZ +uw +YU +wn +dL +hD +dL +eZ +wn +dL +dL +CS +sO +JH +nJ +PN +IM +bV +bV +bV +IM +iY +yx +qB +vz +GV +aa +aa +aa +aa +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(62,1,1) = {" +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 +TM +aa +aa +bg +xG +DL +QQ +Fi +kK +jP +JJ +xm +ce +gQ +MB +Wf +Wf +tF +kM +NC +jD +fb +fb +jD +XE +aE +jD +jD +va +cc +cc +va +so +va +va +tf +tf +tf +tf +LD +tf +tf +tf +qe +fG +jZ +jZ +ZO +ZO +ZO +ZO +bG +LG +LG +LG +cG +LG +LG +uT +OH +dK +db +ID +xe +bZ +AT +yx +qB +zz +GV +aa +aa +aa +aa +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(63,1,1) = {" +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 +TM +aa +aa +bg +xG +xG +OA +qp +OA +bD +xG +ed +cW +eJ +eJ +eJ +eJ +cF +qm +FS +Mb +wj +Eq +Bq +Bv +vx +LY +wE +Cd +Cd +qK +Kc +gk +Cd +Cd +wE +Cd +iK +Kc +gk +aA +YL +xR +yW +TV +BT +Hi +Hi +FM +WB +Hi +LG +LG +nB +Qo +lE +rT +wl +lo +uT +BN +Rv +tj +Rv +ul +uT +uT +Ez +YF +GV +aa +aa +aa +aa +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(64,1,1) = {" +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 +TM +aa +aa +CW +zz +xG +xG +xG +xG +xG +xG +eJ +eJ +eJ +zz +zz +eJ +hZ +Kr +LA +hZ +gQ +xm +ce +gQ +gQ +gQ +bf +sH +Vl +zF +fB +Vl +Vl +Ga +bf +sH +zF +fB +Vl +Vl +Vl +wn +DI +hD +hy +YP +Pf +SZ +tH +cC +LG +Ka +vK +Em +mk +Vr +vK +xv +zM +uT +uT +uT +uT +uT +uT +zz +zz +DM +Mt +aa +aa +aa +It +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(65,1,1) = {" +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 +TM +aa +aa +bg +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +eJ +eJ +eJ +eJ +eJ +eJ +dq +dq +dq +eJ +eJ +fD +fD +fD +cL +cL +cL +fD +fD +fD +fD +fD +cL +cL +cL +fD +ZO +ZO +ZO +ZO +Hi +dg +sP +mW +FT +LG +dW +vK +vK +tr +vK +vK +bz +LG +zz +zz +QU +zz +zz +zz +zz +RW +aa +aa +aa +aa +aa +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(66,1,1) = {" +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 +TM +aa +aa +aa +OI +OI +OI +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +bc +yZ +yZ +yZ +Ez +zz +zz +zz +bc +yZ +yZ +yZ +Ez +zz +zz +zz +bc +yZ +yZ +yZ +Ez +zz +zz +zz +zz +Hi +gV +rb +Hi +Hi +LG +QM +Oa +DO +BU +Fl +wg +DB +LG +zz +zz +zz +zz +zz +zz +zz +RW +aa +aa +aa +aa +aa +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(67,1,1) = {" +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 +TM +aa +aa +aa +aa +aa +aa +OI +OI +OI +OI +aa +aa +aa +aa +aa +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +Jy +Hi +aZ +XI +Hi +Jy +LG +In +PT +In +Fo +In +PT +In +LG +Ku +zz +zz +zz +zz +zz +zz +RW +aa +aa +aa +aa +aa +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(68,1,1) = {" +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 +TM +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +zz +zz +zz +zz +vY +vY +aa +aa +aa +EH +aa +OI +OI +OI +OI +aa +aa +aa +aa +aa +aa +aa +aa +EH +vz +YF +zz +zz +Jy +Hi +Al +Rz +Hi +zz +LG +th +NI +In +QT +In +er +Su +LG +fq +zz +zz +zz +zz +zz +zz +zz +RW +EH +EH +EH +EH +It +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(69,1,1) = {" +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 +TM +TM +TM +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +aa +aa +aa +EH +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +DM +DM +DM +zz +zz +Hi +em +Zu +Hi +zz +LG +LG +qU +In +qU +In +qU +LG +LG +zz +zz +zz +zz +zz +zz +zz +zz +RW +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 +"} +(70,1,1) = {" +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 +TM +TM +TM +TM +TM +aa +aa +aa +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +aa +EH +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +aa +aa +zz +bc +yZ +yZ +Ez +zz +zz +LG +LG +LG +LG +LG +LG +LG +zz +zz +zz +zz +zz +zz +zz +zz +RW +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 +"} +(71,1,1) = {" +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 +eP +It +aa +aa +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +aa +EH +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +aa +aa +aa +zz +zz +zz +zz +zz +zz +zz +zz +zz +QU +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +RW +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 +"} +(72,1,1) = {" +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 +It +It +aa +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +aa +EH +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +aa +aa +aa +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +zz +RW +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 +"} +(73,1,1) = {" +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 +It +It +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +aa +EH +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +aa +aa +aa +zz +OI +OI +OI +OI +OI +OI +OI +OI +aa +aa +aa +aa +aa +vz +YF +zz +zz +zz +zz +zz +zz +RW +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 +"} +(74,1,1) = {" +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 +It +TM +aa +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +aa +EH +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +aa +aa +aa +EH +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +DM +DM +OI +OI +OI +OI +OI +OI +Gd +EH +EH +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(75,1,1) = {" +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 +TM +aa +aa +vY +vY +vY +vY +vY +vY +vY +vY +aa +aa +aa +EH +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +aa +aa +aa +EH +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(76,1,1) = {" +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 +TM +aa +aa +aa +aa +aa +aa +aa +aa +vY +vY +aa +aa +aa +EH +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +vY +aa +EH +aa +aa +aa +aa +aa +EH +aa +aa +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +aa +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(77,1,1) = {" +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 +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +EH +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +EH +aa +aa +aa +aa +aa +EH +aa +aa +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +aa +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(78,1,1) = {" +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 +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +EH +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +EH +aa +aa +aa +aa +aa +EH +aa +aa +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +aa +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(79,1,1) = {" +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 +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +aa +aa +aa +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(80,1,1) = {" +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 +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +TM +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(81,1,1) = {" +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 +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 +"} +(82,1,1) = {" +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 +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 +"} +(83,1,1) = {" +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 +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 +"} +(84,1,1) = {" +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 +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 +"} +(85,1,1) = {" +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 +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 +"} +(86,1,1) = {" +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 +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 +"} +(87,1,1) = {" +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 +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 +"} +(88,1,1) = {" +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 +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 +"} +(89,1,1) = {" +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 +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 +"} +(90,1,1) = {" +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 +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 +"} +(91,1,1) = {" +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 +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 +"} +(92,1,1) = {" +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 +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 +"} +(93,1,1) = {" +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 +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 +"} +(94,1,1) = {" +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 +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 +"} +(95,1,1) = {" +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 +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 +"} +(96,1,1) = {" +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 +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 +"} +(97,1,1) = {" +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 +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 +"} +(98,1,1) = {" +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 +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 +"} +(99,1,1) = {" +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 +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 +"} +(100,1,1) = {" +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 +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 +"} +(101,1,1) = {" +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 +UX +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 +"} +(102,1,1) = {" +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 +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 +"} +(103,1,1) = {" +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 +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 +"} +(104,1,1) = {" +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 +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 +"} +(105,1,1) = {" +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 +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 +"} +(106,1,1) = {" +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 +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 +"} +(107,1,1) = {" +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 +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 +"} +(108,1,1) = {" +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 +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 +"} +(109,1,1) = {" +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 +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 +"} +(110,1,1) = {" +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 +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 +"} +(111,1,1) = {" +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 +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 +"} +(112,1,1) = {" +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 +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 +"} +(113,1,1) = {" +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 +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 +"} +(114,1,1) = {" +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 +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 +"} +(115,1,1) = {" +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 +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 +"} +(116,1,1) = {" +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 +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 +"} +(117,1,1) = {" +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 +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 +"} +(118,1,1) = {" +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 +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 +"} +(119,1,1) = {" +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 +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 +"} +(120,1,1) = {" +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 +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 +"} diff --git a/mods/_maps/liberia/_map_liberia.dm b/mods/_maps/liberia/_map_liberia.dm new file mode 100644 index 0000000000000..44ebbdd5b5c96 --- /dev/null +++ b/mods/_maps/liberia/_map_liberia.dm @@ -0,0 +1,3 @@ +/singleton/modpack/map_liberia + name = "Тогровое судно Liberia" + desc = "Авейка, включающая в себя две новые профессии и созданная для разнообразия геймплея с экономической стороны." diff --git a/mods/_maps/liberia/_map_liberia.dme b/mods/_maps/liberia/_map_liberia.dme new file mode 100644 index 0000000000000..f54143e4c26c2 --- /dev/null +++ b/mods/_maps/liberia/_map_liberia.dme @@ -0,0 +1,13 @@ +#ifndef MODPACK_MAP_LIBERIA +#define MODPACK_MAP_LIBERIA + +#include "_map_liberia.dm" + +#include "code/liberia.dm" +#include "code/liberia_areas.dm" +#include "code/liberia_jobs.dm" +#include "code/liberia_shuttles.dm" +#include "code/liberia_structures.dm" +#include "code/liberia_navpoints.dm" + +#endif diff --git a/mods/_maps/liberia/code/liberia.dm b/mods/_maps/liberia/code/liberia.dm new file mode 100644 index 0000000000000..159c24445f438 --- /dev/null +++ b/mods/_maps/liberia/code/liberia.dm @@ -0,0 +1,75 @@ +#define WEBHOOK_SUBMAP_LOADED_LIBERIA "webhook_submap_liberia" + +// Map template data +/datum/map_template/ruin/away_site/liberia + name = "Liberia" + id = "awaysite_liberia" + description = "A Merchant ship." + prefix = "mods/_maps/liberia/maps/" + suffixes = list("liberia.dmm") + spawn_cost = 0 + player_cost = 0 + template_flags = TEMPLATE_FLAG_SPAWN_GUARANTEED + spawn_weight = 50 // Нельзя ставить 0, иначе подбор авеек сломается + shuttles_to_initialise = list( + /datum/shuttle/autodock/overmap/mule + ) + apc_test_exempt_areas = list( + /area/liberia/solar1 = NO_SCRUBBER|NO_VENT|NO_APC, + /area/liberia/solar2 = NO_SCRUBBER|NO_VENT|NO_APC + ) + area_usage_test_exempted_root_areas = list(/area/liberia) + +// Overmap objects +/obj/overmap/visitable/ship/liberia + name = "Liberia" + desc = "Vessel with Free Trade Union registration" + color = "#8a6642" + vessel_mass = 3000 + fore_dir = WEST + max_speed = 1/(1 SECOND) + initial_restricted_waypoints = list( + "Mule" = list("nav_mule_start") + ) + initial_generic_waypoints = list( + "nav_liberia_north", + "nav_liberia_east", + "nav_liberia_south", + "nav_liberia_west" + ) + +/obj/submap_landmark/joinable_submap/liberia + name = "Liberia" + archetype = /singleton/submap_archetype/liberia + +/singleton/webhook/submap_loaded/liberia + id = WEBHOOK_SUBMAP_LOADED_LIBERIA + +/singleton/submap_archetype/liberia + descriptor = "Free Trade Union merchant ship" + map = "Liberia - merchant ship" + crew_jobs = list( + /datum/job/submap/merchant_leader, + /datum/job/submap/merchant + ) + whitelisted_species = null + blacklisted_species = null + call_webhook = WEBHOOK_SUBMAP_LOADED_LIBERIA + +/decl/submap_archetype/liberia/New() + . = ..() + GLOB.using_map.map_admin_faxes.Add("FTU Agency") + for(var/obj/machinery/photocopier/faxmachine/fax as anything in SSmachines.get_machinery_of_type(/obj/machinery/photocopier/faxmachine)) + GLOB.admin_departments += "FTU Agency" + +/obj/machinery/power/apc/liberia + req_access = list(access_merchant) + +/obj/machinery/power/smes/buildable/preset/liberia + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE + +#undef WEBHOOK_SUBMAP_LOADED_LIBERIA diff --git a/mods/_maps/liberia/code/liberia_areas.dm b/mods/_maps/liberia/code/liberia_areas.dm new file mode 100644 index 0000000000000..008fe11448129 --- /dev/null +++ b/mods/_maps/liberia/code/liberia_areas.dm @@ -0,0 +1,104 @@ +/area/liberia/ + req_access = list(access_merchant) + +/area/liberia/dockinghall + name = "FTV Liberia - Docking Hall" + icon_state = "entry_1" + +/area/liberia/guestroom1 + name = "FTV Liberia - Guest Room 1" + icon_state = "green" + +/area/liberia/guestroom2 + name = "FTV Liberia - Guest Room 2" + icon_state = "red" + +/area/liberia/library + name = "FTV Liberia - Library" + icon_state = "library" + +/area/liberia/hallway + name = "FTV Liberia - HallWay" + icon_state = "hallC1" + +/area/liberia/merchantstorage + name = "FTV Liberia - Merchant Storage" + icon_state = "storage" + +/area/liberia/engineeringlobby + name = "FTV Liberia - Engineering Lobby" + icon_state = "primarystorage" + +/area/liberia/engineeringstorage + name = "FTV Liberia - Engineering Storage" + icon_state = "emergencystorage" + +/area/liberia/engineeringreactor + name = "FTV Liberia - Engineering Reactor" + icon_state = "engineering_workshop" + +/area/liberia/engineeringengines + name = "FTV Liberia - Engineering Engines" + icon_state = "engine" + +/area/liberia/personellroom1 + name = "FTV Liberia - Personell Room 1" + icon_state = "dk_yellow" + +/area/liberia/personellroom2 + name = "FTV Liberia - Personell Room 2" + icon_state = "purple" + +/area/liberia/traidingroom + name = "FTV Liberia - Traiding Room" + icon_state = "purple" + +/area/liberia/bridge + name = "FTV Liberia - Bridge" + icon_state = "bridge" + +/area/liberia/cryo + name = "FTV Liberia - Cryo" + icon_state = "crew_quarters" + +/area/liberia/medbay + name = "FTV Liberia - Medbay" + icon_state = "medbay" + +/area/liberia/officeroom + name = "FTV Liberia - Office Room" + icon_state = "observatory" + +/area/liberia/toiletroom1 + name = "FTV Liberia - Shower" + icon_state = "showroom" + +/area/liberia/toiletroom2 + name = "FTV Liberia - Toilet" + icon_state = "toilet" + +/area/liberia/bar + name = "FTV Liberia - Bar" + icon_state = "bar" + +/area/liberia/captain + name = "FTV Liberia - Captain Office" + icon_state = "blue-red" + req_access = list(access_merchant) + +/area/liberia/atmos + name = "FTV Liberia - Atmos Chamber" + icon_state = "atmos" + +/area/liberia/solar1 + name = "FTV Liberia - Solar1" + icon_state = "away1" + +/area/liberia/solar2 + name = "FTV Liberia - Solar2" + icon_state = "away2" + +/area/liberia/mule + name = "FTV Mule" + icon_state = "shuttle" + area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED diff --git a/mods/_maps/liberia/code/liberia_jobs.dm b/mods/_maps/liberia/code/liberia_jobs.dm new file mode 100644 index 0000000000000..30d57a4bbc6a2 --- /dev/null +++ b/mods/_maps/liberia/code/liberia_jobs.dm @@ -0,0 +1,176 @@ +// Submap datum and archetype. +/datum/job/submap/merchant_leader + title = "Merchant" + + info = "Вы свободные торговцы, которых в поисках выгоды занесло в неизведанные дали. Путешествуйте, торгуйте, make profit! \ + \ + Посещать неизведанные обьекты крайне небезопасно. Вы торговцы, а не мусорщики, ваша смерть не принесет прибыли, не лезьте куда не надо." + total_positions = 1 + spawn_positions = 1 + supervisors = "невидимой рукой рынка" + selection_color = "#515151" + ideal_character_age = 30 + minimal_player_age = 7 + create_record = FALSE + outfit_type = /singleton/hierarchy/outfit/job/liberia/merchant/leader + whitelisted_species = null + blacklisted_species = list(SPECIES_VOX, SPECIES_ALIEN, SPECIES_GOLEM, SPECIES_ADHERENT, SPECIES_NABBER) // SPECIES_MANTID_GYNE, SPECIES_MANTID_ALATE, SPECIES_MONARCH_WORKER, SPECIES_MONARCH_QUEEN Not yet... not yet... + + latejoin_at_spawnpoints = TRUE + + access = list( + access_merchant + ) + + announced = FALSE + min_skill = list( + SKILL_FINANCE = SKILL_TRAINED, + SKILL_PILOT = SKILL_BASIC + ) + give_psionic_implant_on_join = FALSE + skill_points = 24 + economic_power = 10 // We use splitted from station account system, which need lover economic_power to not break things + +/datum/job/submap/merchant_leader/equip(mob/living/carbon/human/H) + return ..() + +/datum/job/submap/merchant/is_position_available() + . = ..() + if(. && requires_supervisor) + for(var/mob/M in GLOB.player_list) + if(!M.client || !M.mind || !M.mind.assigned_job || M.mind.assigned_job.title != requires_supervisor) + continue + var/datum/job/submap/merchant_leader/merchant_job = M.mind.assigned_job + if(istype(merchant_job) && merchant_job.owner == owner) + return TRUE + return FALSE + +/datum/job/submap/merchant + title = "Merchant Assistant" + + var/requires_supervisor = "Merchant" + total_positions = 5 + spawn_positions = 5 + supervisors = "Торговцем" + selection_color = "#515151" + ideal_character_age = 20 + minimal_player_age = 0 + create_record = FALSE + whitelisted_species = null + blacklisted_species = list(SPECIES_VOX, SPECIES_ALIEN, SPECIES_GOLEM, ) // SPECIES_MANTID_GYNE, SPECIES_MANTID_ALATE, SPECIES_MONARCH_WORKER, SPECIES_MONARCH_QUEEN Not yet... not yet... + alt_titles = list( + "Merchant Security" = /singleton/hierarchy/outfit/job/liberia/merchant/security, + "Merchant Engineer" = /singleton/hierarchy/outfit/job/liberia/merchant/engineer, + "Merchant Medical" = /singleton/hierarchy/outfit/job/liberia/merchant/doctor + ) + outfit_type = /singleton/hierarchy/outfit/job/liberia/merchant + + latejoin_at_spawnpoints = TRUE + access = list( + access_merchant + ) + announced = FALSE + min_skill = list( + SKILL_FINANCE = SKILL_BASIC + ) + + max_skill = list( + SKILL_COMBAT = SKILL_MAX, + SKILL_WEAPONS = SKILL_MAX + ) + + give_psionic_implant_on_join = FALSE + + economic_power = 4 + skill_points = 24 + +/datum/job/submap/merchant/equip(mob/living/carbon/human/H) + outfit_type = H.mind.role_alt_title!="Merchant Assistant" ? alt_titles[H.mind.role_alt_title] : outfit_type + . = ..() + +// Spawn points. +/obj/submap_landmark/spawnpoint/liberia + name = "Merchant" + +/obj/submap_landmark/spawnpoint/liberia/trainee + name = "Merchant Assistant" + +/obj/submap_landmark/spawnpoint/liberia/security + name = "Merchant Security" + +/obj/submap_landmark/spawnpoint/liberia/engineer + name = "Merchant Engineer" + +/obj/submap_landmark/spawnpoint/liberia/doctor + name = "Merchant Medical" + +/singleton/hierarchy/outfit/job/liberia/merchant + name = OUTFIT_JOB_NAME("Merchant Assistant") + uniform = /obj/item/clothing/under/suit_jacket/tan + shoes = /obj/item/clothing/shoes/brown + id_types = list(/obj/item/card/id/liberia/merchant) + +/singleton/hierarchy/outfit/job/liberia/merchant/proc/get_briefcase_money(mob/living/carbon/human/H, datum/job/J) + . = 0.25 * rand(2.5, 5) * J.economic_power + + var/culture_mod = 0 + var/culture_count = 0 + for(var/token in H.cultural_info) + var/singleton/cultural_info/culture = H.get_cultural_value(token) + if(culture && !isnull(culture.economic_power)) + culture_count++ + culture_mod += culture.economic_power + if(culture_count) + culture_mod /= culture_count + . *= culture_mod + + . *= GLOB.using_map.salary_modifier + . *= 1 + 0.4 * H.get_skill_value(SKILL_FINANCE)/(SKILL_MAX - SKILL_MIN) + . = round(.) + +/singleton/hierarchy/outfit/job/liberia/merchant/post_equip(mob/living/carbon/human/H) + ..() + var/datum/job/J = SSjobs.get_by_title(H.job) + var/money_to_put = get_briefcase_money(H, J) + var/obj/item/storage/secure/briefcase/sec_briefcase = new(H) + for(var/obj/item/briefcase_item in sec_briefcase) + qdel(briefcase_item) + for(var/i = money_to_put, i > 0, i--) + new /obj/item/spacecash/bundle/c2500(sec_briefcase) + H.equip_to_slot_or_del(sec_briefcase, slot_l_hand) + +/singleton/hierarchy/outfit/job/liberia/merchant/security + name = OUTFIT_JOB_NAME("Merchant Security") + uniform = /obj/item/clothing/under/syndicate/tacticool + suit = /obj/item/clothing/suit/armor/pcarrier/light + shoes = /obj/item/clothing/shoes/jackboots + id_pda_assignment = "Merchant Security" + +/singleton/hierarchy/outfit/job/liberia/merchant/engineer + name = OUTFIT_JOB_NAME("Merchant Engineer") + uniform = /obj/item/clothing/under/rank/engineer + shoes = /obj/item/clothing/shoes/jackboots + id_pda_assignment = "Merchant Engineer" + +/singleton/hierarchy/outfit/job/liberia/merchant/doctor + name = OUTFIT_JOB_NAME("Merchant Medical") + uniform = /obj/item/clothing/under/color/white + suit = /obj/item/clothing/suit/storage/toggle/labcoat + shoes = /obj/item/clothing/shoes/dress + id_pda_assignment = "Merchant Medical" + +/singleton/hierarchy/outfit/job/liberia/merchant/leader + name = OUTFIT_JOB_NAME("Merchant Leader - liberia") + uniform = /obj/item/clothing/under/suit_jacket/charcoal + shoes = /obj/item/clothing/shoes/laceup + id_types = list(/obj/item/card/id/liberia/merchant/leader) + +/obj/item/card/id/liberia/merchant + desc = "An identification card issued to Merchants." + job_access_type = /datum/job/submap/merchant + color = COLOR_OFF_WHITE + detail_color = COLOR_BEIGE + +/obj/item/card/id/liberia/merchant/leader + desc = "An identification card issued to Merchant Leaders, indicating their right to sell and buy goods." + job_access_type = /datum/job/submap/merchant_leader diff --git a/mods/_maps/liberia/code/liberia_navpoints.dm b/mods/_maps/liberia/code/liberia_navpoints.dm new file mode 100644 index 0000000000000..5ea43636d9972 --- /dev/null +++ b/mods/_maps/liberia/code/liberia_navpoints.dm @@ -0,0 +1,19 @@ +/obj/shuttle_landmark/nav_liberia/north + name = "Liberia North" + landmark_tag = "nav_liberia_north" + +/obj/shuttle_landmark/nav_liberia/east + name = "Liberia East" + landmark_tag = "nav_liberia_east" + +/obj/shuttle_landmark/nav_liberia/south + name = "Liberia South" + landmark_tag = "nav_liberia_south" + +/obj/shuttle_landmark/nav_liberia/west + name = "Liberia west" + landmark_tag = "nav_liberia_west" + +/obj/shuttle_landmark/nav_liberia/antag + name = "Liberia North-East" + landmark_tag = "nav_liberia_antag" diff --git a/mods/_maps/liberia/code/liberia_shuttles.dm b/mods/_maps/liberia/code/liberia_shuttles.dm new file mode 100644 index 0000000000000..5fc2f86bdbd01 --- /dev/null +++ b/mods/_maps/liberia/code/liberia_shuttles.dm @@ -0,0 +1,34 @@ +// Submap shuttles. +// Mule - Shuttle One, Port Side +/obj/overmap/visitable/ship/landable/mule + shuttle = "Mule" + name = "Mule" + desc = "Vessel with FTU designation. Dedicated to spaceship designated as Liberia" + + max_speed = 1/(2 SECONDS) + burn_delay = 1 SECONDS + vessel_mass = 5000 + fore_dir = WEST + skill_needed = SKILL_BASIC + vessel_size = SHIP_SIZE_SMALL + +/obj/machinery/computer/shuttle_control/explore/mule + name = "shuttle control console" + shuttle_tag = "Mule" + +/obj/shuttle_landmark/mule/start + name = "Mule Docked" + landmark_tag = "nav_mule_start" + docking_controller = "mule_port_dock" + +/datum/shuttle/autodock/overmap/mule + name = "Mule" + warmup_time = 5 SECONDS + current_location = "nav_mule_start" + range = 2 + dock_target = "mule_port_shuttle_dock" + shuttle_area = list(/area/liberia/mule) + defer_initialisation = TRUE + flags = SHUTTLE_FLAGS_PROCESS + skill_needed = SKILL_BASIC + ceiling_type = /turf/simulated/floor/shuttle_ceiling diff --git a/mods/_maps/liberia/code/liberia_structures.dm b/mods/_maps/liberia/code/liberia_structures.dm new file mode 100644 index 0000000000000..a9f282cdd2b70 --- /dev/null +++ b/mods/_maps/liberia/code/liberia_structures.dm @@ -0,0 +1,76 @@ +/obj/structure/table/mag + name = "Magnetic Table" + desc = "It is simple magnetic table. Good for merchants." + icon = 'mods/_maps/liberia/icons/mag_tables.dmi' + icon_state = "magnetic_table_disabled" + var/icon_state_open = "magnetic_table_disabled" + var/icon_state_closed = "magnetic_table_enabled" + req_access = list(access_merchant) + can_plate = 0 + can_reinforce = 0 + flipped = -1 + var/locked = 0 + var/health = 20 + var/maxhealth = 20 + +/obj/structure/table/mag/Initialize() + . = ..() + verbs -= /obj/structure/table/verb/do_flip + verbs -= /obj/structure/table/proc/do_put + name = "Magnetic Table" + maxhealth = 20 + health = 20 + +/obj/structure/table/mag/on_update_icon() + if (locked) + icon_state = icon_state_closed + else + icon_state = icon_state_open + return + +/obj/structure/table/mag/can_connect() + return FALSE + +//obj/structure/table/mag/attack_generic(mob/user, damage, attack_verb) TO DO - fix +// take_damage(amount) +// ..() +// if(health <= 10 && locked) +// toggle_lock() + + +/obj/structure/table/mag/Destroy() + if(locked) + toggle_lock() + ..() + +/obj/structure/table/mag/break_to_parts(full_return = 0) + if(locked) + toggle_lock() + ..() + +/obj/structure/table/mag/proc/toggle_lock() + if(health <= 10 && !locked) + return + locked = !locked + update_icon() + for (var/obj/item/I in get_turf(src)) + I.anchored = locked + playsound(src, 'sound/effects/storage/briefcase.ogg', 100, 1) + +/obj/structure/table/mag/use_tool(obj/item/W as obj, mob/user as mob, click_params) + if(isrobot(user)) + return..() + if(istype(W, /obj/item/card/id) || istype(W, /obj/item/modular_computer)) + if(allowed(usr)) + toggle_lock() + visible_message(SPAN_NOTICE("[usr] [locked ? "" : "un"]locked [src]!")) + return TRUE + if(isitem(W)) + if(user.drop_from_inventory(W, src.loc)) + auto_align(W, click_params) + W.anchored = locked + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + ..() + +/obj/structure/table/mag/CtrlClick() + return TRUE diff --git a/mods/_maps/liberia/icons/mag_tables.dmi b/mods/_maps/liberia/icons/mag_tables.dmi new file mode 100644 index 0000000000000..ebd99b5883425 Binary files /dev/null and b/mods/_maps/liberia/icons/mag_tables.dmi differ diff --git a/mods/_maps/liberia/maps/liberia.dmm b/mods/_maps/liberia/maps/liberia.dmm new file mode 100644 index 0000000000000..484c1f7a6a05f --- /dev/null +++ b/mods/_maps/liberia/maps/liberia.dmm @@ -0,0 +1,49537 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/space, +/area/space) +"ab" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2"; + pixel_y = 0 + }, +/obj/machinery/power/smes/buildable/preset/liberia, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"ac" = ( +/obj/machinery/door/airlock/external{ + autoset_access = 0; + frequency = 1380; + id_tag = "merchant_station_exterior"; + locked = 1; + name = "Station Exterior" + }, +/obj/machinery/shield_diffuser, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/dockinghall) +"ad" = ( +/obj/structure/bed/chair/comfy/captain{ + dir = 4 + }, +/obj/floor_decal/corner/blue/mono, +/obj/submap_landmark/joinable_submap/liberia, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"ae" = ( +/obj/item/device/scanner/health, +/obj/item/device/scanner/gas, +/obj/item/device/scanner/mining, +/obj/item/autopsy_scanner, +/obj/item/device/scanner/plant, +/obj/item/device/scanner/price, +/obj/item/device/scanner/xenobio, +/obj/item/device/t_scanner, +/obj/item/device/gps, +/obj/item/device/gps, +/obj/structure/table/rack/dark, +/obj/random/maintenance/clean, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"af" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/rd, +/obj/item/storage/secure/safe{ + pixel_x = 34 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/submap_landmark/spawnpoint/liberia, +/turf/simulated/floor/carpet/red, +/area/liberia/captain) +"ag" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/brown, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 22 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/submap_landmark/spawnpoint/liberia/trainee, +/turf/simulated/floor/carpet, +/area/liberia/personellroom2) +"ah" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/brown, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/alarm/merchant{ + dir = 8; + pixel_x = 25 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/submap_landmark/spawnpoint/liberia/trainee, +/turf/simulated/floor/carpet, +/area/liberia/personellroom2) +"ak" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"al" = ( +/obj/structure/closet/secure_closet{ + name = "merchant's locker" + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"ao" = ( +/obj/shuttle_landmark/nav_liberia/south, +/turf/space, +/area/space) +"aq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"ar" = ( +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"as" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/corner, +/obj/machinery/power/apc/liberia{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/blue{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"at" = ( +/obj/structure/closet, +/obj/random/clothing, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"au" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"ay" = ( +/obj/machinery/door/blast/regular/open{ + dir = 2; + icon_state = "pdoor0"; + id_tag = "merch_radaway"; + opacity = 0 + }, +/obj/machinery/door/window/northleft{ + dir = 8; + name = "Checkpoint's Desk"; + req_access = newlist() + }, +/obj/machinery/door/window/northleft{ + autoset_access = 0; + dir = 4; + name = "Checkpoint's Desk"; + req_access = newlist() + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/simulated/floor, +/area/liberia/engineeringreactor) +"az" = ( +/obj/machinery/meter/turf, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/structure/sign{ + icon_state = "radiation"; + pixel_x = 0; + pixel_y = 30 + }, +/obj/machinery/door/blast/regular/open{ + dir = 2; + icon_state = "pdoor0"; + id_tag = "merch_radaway"; + opacity = 0 + }, +/turf/simulated/floor, +/area/liberia/engineeringreactor) +"aA" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/port_gen/pacman/super/potato/reactor, +/turf/simulated/floor, +/area/liberia/engineeringreactor) +"aB" = ( +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/liberia/solar1) +"aC" = ( +/obj/machinery/door/window/brigdoor/northleft{ + dir = 4; + req_access = newlist() + }, +/obj/random/hardsuit, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"aD" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"aE" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/storage/toolbox/electrical{ + pixel_x = 7; + pixel_y = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringengines) +"aF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner_techfloor_grid{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"aG" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"aH" = ( +/obj/machinery/button/blast_door{ + dir = 8; + id_tag = "merch_radaway"; + name = "Radiation shields"; + pixel_x = 24 + }, +/obj/item/caution/cone, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"aI" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/blue{ + d2 = 8; + icon_state = "0-8" + }, +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/liberia/merchantstorage) +"aK" = ( +/obj/machinery/ion_engine{ + dir = 4 + }, +/turf/simulated/floor/airless, +/area/liberia/engineeringengines) +"aM" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/structure/closet/emcloset{ + anchored = 1; + name = "anchored emergency closet" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringengines) +"aN" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/structure/table/standard, +/obj/item/rcd, +/obj/item/rcd_ammo/large, +/obj/item/rcd_ammo/large, +/obj/item/rcd_ammo/large, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringengines) +"aO" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"aP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/blast/shutters{ + id_tag = "merchantwarehouse"; + name = "Warehouse Shutters" + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"aQ" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/blast/shutters{ + id_tag = "merchantwarehouse"; + name = "Warehouse Shutters" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"aR" = ( +/obj/machinery/power/shield_generator, +/obj/structure/cable, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"aU" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringengines) +"aV" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Nuclear Reactor"; + req_access = newlist() + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"aW" = ( +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"aX" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/cryo) +"aY" = ( +/obj/machinery/door/airlock/multi_tile/glass/maintenance{ + dir = 8; + name = "Meeting Room" + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"aZ" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"bb" = ( +/obj/paint/red, +/obj/structure/shuttle/engine/heater{ + dir = 4 + }, +/obj/paint_stripe/red, +/turf/simulated/wall/r_titanium, +/area/liberia/mule) +"bc" = ( +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"be" = ( +/obj/machinery/disposal, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/structure/disposalpipe/trunk, +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/corner/green, +/turf/simulated/floor/tiled/monotile, +/area/liberia/traidingroom) +"bf" = ( +/obj/structure/closet/crate, +/obj/random/loot, +/obj/random/loot, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/traidingroom) +"bg" = ( +/obj/structure/table/rack, +/obj/random/loot, +/obj/machinery/button/blast_door{ + id_tag = "merchantwarehouse"; + name = "Warehouse Shutters"; + pixel_x = 9; + pixel_y = 27 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/traidingroom) +"bh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/liberia/traidingroom) +"bj" = ( +/obj/machinery/vending/fashionvend, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/traidingroom) +"bk" = ( +/obj/structure/table/steel, +/obj/item/paper_bin, +/obj/item/pen, +/obj/random/cash, +/obj/item/spacecash/bundle/c1000{ + desc = "It's worth 13000 Thalers. Who the fuck made it?"; + name = "13000 Thaler"; + worth = 13000 + }, +/obj/item/device/flashlight, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/traidingroom) +"bl" = ( +/obj/structure/table/rack, +/obj/item/storage/bag/cash, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/green{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/traidingroom) +"bm" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "merch-ship_windows" + }, +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/liberia/bridge) +"bn" = ( +/obj/structure/bed/chair/wood/walnut, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"bo" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "merchantshuttle"; + name = "Merchant Window Shutters"; + opacity = 0 + }, +/obj/paint/silver, +/obj/paint_stripe/yellow, +/turf/simulated/floor/plating, +/area/liberia/mule) +"bp" = ( +/obj/paint/silver, +/obj/paint_stripe/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 6 + }, +/turf/simulated/wall/r_titanium, +/area/liberia/mule) +"bq" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 8; + external_pressure_bound = 140; + external_pressure_bound_default = 140; + icon_state = "map_vent_out"; + use_power = 1 + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/airless, +/area/liberia/mule) +"br" = ( +/obj/structure/closet/secure_closet{ + name = "merchant's locker"; + req_access = list("ACCESS_MERCHANT") + }, +/obj/floor_decal/corner/brown/half, +/obj/item/storage/pill_bottle/methylphenidate, +/obj/item/storage/pill_bottle/three_eye, +/obj/item/plastique, +/obj/item/plastique, +/obj/item/beartrap, +/obj/item/beartrap, +/obj/item/grenade/smokebomb, +/obj/item/silencer, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/mule) +"bs" = ( +/obj/structure/closet/secure_closet{ + name = "merchant's locker"; + req_access = list("ACCESS_MERCHANT") + }, +/obj/floor_decal/corner/brown/half, +/obj/item/storage/belt/holster/security/tactical, +/obj/item/clothing/mask/balaclava, +/obj/item/clothing/mask/balaclava, +/obj/item/clothing/glasses/tacgoggles, +/obj/item/clothing/under/syndicate, +/obj/item/clothing/gloves/insulated/black, +/obj/item/clothing/suit/armor/pcarrier/tactical, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/mule) +"bt" = ( +/obj/structure/closet/secure_closet{ + name = "merchant's locker"; + req_access = list("ACCESS_MERCHANT") + }, +/obj/floor_decal/corner/brown/half, +/obj/machinery/power/apc/liberia{ + dir = 1; + name = "merchant north bump"; + pixel_y = 24; + req_access = list("ACCESS_MERCHANT") + }, +/obj/structure/cable/blue{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/mule) +"bu" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/closet/crate/secure/weapon{ + req_access = list("ACCESS_MERCHANT") + }, +/obj/machinery/door/window/brigdoor/southright{ + req_access = newlist() + }, +/obj/item/storage/secure/briefcase, +/obj/item/contraband/poster, +/obj/item/contraband/poster, +/obj/item/contraband/poster, +/obj/item/contraband/poster, +/obj/item/contraband/poster, +/obj/item/contraband/poster, +/obj/item/material/knife/folding/combat/balisong, +/obj/item/material/knife/folding/combat/balisong, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"bv" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/closet/crate/medical, +/obj/random/medical, +/obj/random/medical, +/obj/random/medical, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/machinery/door/window/brigdoor/southright{ + req_access = newlist() + }, +/obj/item/storage/firstaid/surgery, +/obj/item/stack/nanopaste, +/obj/item/stack/nanopaste, +/obj/item/auto_cpr, +/obj/item/bodybag/rescue/loaded, +/obj/item/bodybag/rescue/loaded, +/obj/item/defibrillator/compact/combat/loaded, +/obj/item/scalpel/laser, +/obj/item/scalpel/ims, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"bw" = ( +/obj/paint/silver, +/obj/paint_stripe/yellow, +/turf/simulated/wall/titanium, +/area/liberia/mule) +"bx" = ( +/obj/structure/table/mag, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/obj/random/hat, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"by" = ( +/obj/structure/table/mag, +/obj/floor_decal/corner/green{ + dir = 10 + }, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"bz" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/door/window/brigdoor/southright{ + req_access = newlist() + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"bA" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/door/window/brigdoor/southright{ + req_access = newlist() + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"bB" = ( +/obj/paint/silver, +/obj/paint_stripe/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/red, +/turf/simulated/wall/r_titanium, +/area/liberia/mule) +"bC" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 4; + icon_state = "shutter0"; + id_tag = "merchantshuttle"; + name = "Merchant Window Shutters"; + opacity = 0 + }, +/obj/paint/silver, +/obj/paint_stripe/yellow, +/turf/simulated/floor/plating, +/area/liberia/mule) +"bD" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/computer/ship/helm{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue2, +/area/liberia/mule) +"bE" = ( +/obj/structure/bed/chair/shuttle/blue{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue2, +/area/liberia/mule) +"bF" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/blue{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/blue, +/turf/simulated/floor/carpet/blue2, +/area/liberia/mule) +"bG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"bH" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/traidingroom) +"bI" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/traidingroom) +"bJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/traidingroom) +"bK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/liberia/traidingroom) +"bM" = ( +/obj/machinery/computer/modular/preset/merchant{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/traidingroom) +"bN" = ( +/obj/machinery/vending/wallmed1{ + pixel_x = 7; + pixel_y = 32 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -7; + pixel_y = 32 + }, +/obj/item/storage/secure/safe{ + pixel_x = 30 + }, +/obj/machinery/power/smes/buildable{ + RCon_tag = null; + charge = 2.5e+006; + input_attempt = 1; + input_level = 250000; + output_attempt = 1; + output_level = 250000 + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/cable/blue{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/liberia/mule) +"bO" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/mule) +"bP" = ( +/turf/simulated/floor/tiled/dark, +/area/liberia/mule) +"bQ" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/mule) +"bR" = ( +/obj/machinery/door/airlock/hatch{ + name = "Trading Desk"; + req_access = newlist() + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/mule) +"bS" = ( +/obj/floor_decal/corner/green/three_quarters{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/liberia/mule) +"bT" = ( +/obj/floor_decal/corner/green{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/liberia/mule) +"bU" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/liberia/mule) +"bV" = ( +/obj/floor_decal/corner/green{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/liberia/mule) +"bW" = ( +/obj/floor_decal/corner/green{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/liberia/mule) +"bX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/liberia/mule) +"bY" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/silver, +/obj/paint_stripe/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/red, +/turf/simulated/floor/plating, +/area/liberia/mule) +"bZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "merchant_ship_vent" + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/liberia/mule) +"ca" = ( +/obj/machinery/access_button{ + command = "cycle_exterior"; + frequency = 1380; + master_tag = "mule_port_shuttle_dock"; + name = "exterior access button"; + pixel_x = 6; + pixel_y = 28 + }, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1380; + master_tag = "mule_port_shuttle_dock"; + name = "interior access button"; + pixel_x = -6; + pixel_y = 28 + }, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "merchant_ship_vent" + }, +/obj/structure/catwalk, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 8; + frequency = 1380; + id_tag = "mule_port_shuttle_dock"; + pixel_x = 20; + req_access = list("ACCESS_MERCHANT"); + tag_airpump = "merchant_ship_vent"; + tag_chamber_sensor = "merchant_ship_sensor"; + tag_exterior_door = "merchant_ship_exterior"; + tag_interior_door = "merchant_ship_interior" + }, +/turf/simulated/floor/plating, +/area/liberia/mule) +"cb" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/corner, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"cc" = ( +/obj/machinery/computer/shuttle_control/explore/mule{ + dir = 4 + }, +/obj/overmap/visitable/ship/landable/mule, +/turf/simulated/floor/carpet/blue2, +/area/liberia/mule) +"cd" = ( +/obj/machinery/button/blast_door{ + id_tag = "merchantshuttle"; + name = "Merchant Window Shutters"; + pixel_y = -28; + req_access = list("ACCESS_MERCHANT") + }, +/obj/structure/bed/chair/shuttle/blue{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue2, +/area/liberia/mule) +"ce" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/hologram/holopad/longrange, +/turf/simulated/floor/carpet/blue2, +/area/liberia/mule) +"cf" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/mule) +"cg" = ( +/obj/machinery/door/airlock/hatch{ + name = "Cockpit"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/mule) +"ch" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ + dir = 1 + }, +/obj/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/liberia/mule) +"ci" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"cj" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/glass/maintenance{ + dir = 8; + name = "Trading Office" + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/monotile, +/area/liberia/traidingroom) +"ck" = ( +/obj/random/loot, +/obj/random/loot, +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"cl" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/liberia/traidingroom) +"cm" = ( +/obj/machinery/merchant_pad, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/traidingroom) +"cn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/catwalk_plated/dark, +/turf/simulated/floor/plating, +/area/liberia/mule) +"co" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/item/device/taperecorder, +/turf/simulated/floor/tiled/dark, +/area/liberia/mule) +"cp" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 4; + icon_state = "shutter0"; + id_tag = "merchantdesk"; + name = "Merchant Desk Shutters"; + opacity = 0 + }, +/obj/paint/silver, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/blue{ + d2 = 8; + icon_state = "0-8" + }, +/obj/paint_stripe/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/liberia/mule) +"cq" = ( +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/floor_decal/corner/brown{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/liberia/mule) +"cr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 9 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/liberia/mule) +"cs" = ( +/obj/floor_decal/corner/green{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/table/mag, +/obj/item/gun/projectile/pistol/holdout, +/obj/random/handgun, +/obj/random/handgun, +/obj/floor_decal/corner/brown{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"ct" = ( +/obj/structure/table/mag, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/brown{ + dir = 10 + }, +/obj/random/projectile, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"cu" = ( +/obj/structure/table/mag, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/brown{ + dir = 10 + }, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"cv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/structure/table/mag, +/obj/floor_decal/corner/brown{ + dir = 10 + }, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"cw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 4 + }, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/liberia/mule) +"cx" = ( +/obj/floor_decal/industrial/loading{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/liberia/mule) +"cy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + autoset_access = 0; + frequency = 1380; + id_tag = "merchant_ship_interior"; + locked = 1; + name = "Ship Exterior" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/red, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/mule) +"cz" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/liberia/mule) +"cA" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "merchant_ship_sensor"; + pixel_x = 28 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/liberia/mule) +"cB" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/carpet/blue2, +/area/liberia/mule) +"cC" = ( +/obj/structure/table/reinforced, +/obj/item/paper/sierrau/merchant, +/turf/simulated/floor/carpet/blue2, +/area/liberia/mule) +"cD" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/computer/ship/engines{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue2, +/area/liberia/mule) +"cE" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Nuclear Reactor"; + req_access = newlist() + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"cF" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/power/apc/liberia{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/blue{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringengines) +"cG" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/structure/bed/chair/rounded/black, +/turf/simulated/floor/carpet/red, +/area/liberia/traidingroom) +"cI" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/red, +/area/liberia/traidingroom) +"cJ" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood/corner, +/turf/simulated/floor/carpet/red, +/area/liberia/traidingroom) +"cK" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"cL" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/liberia/traidingroom) +"cM" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm/merchant{ + dir = 1; + pixel_y = -20 + }, +/obj/machinery/computer/ship/sensors{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/mule) +"cN" = ( +/obj/paint/silver, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/paint_stripe/yellow, +/turf/simulated/wall/r_titanium, +/area/liberia/mule) +"cO" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/mule) +"cP" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/mule) +"cQ" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/bed/chair/rounded/brown{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/mule) +"cR" = ( +/obj/machinery/door/window/brigdoor/eastright{ + autoset_access = 0; + req_access = newlist() + }, +/obj/structure/wall_frame/titanium, +/obj/structure/table/wallf/steel, +/obj/paint/silver, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 4; + icon_state = "shutter0"; + id_tag = "merchantdesk"; + name = "Merchant Desk Shutters"; + opacity = 0 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/paint_stripe/yellow, +/obj/machinery/door/window/brigdoor/eastright{ + dir = 8; + req_access = newlist() + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/mule) +"cS" = ( +/obj/floor_decal/corner/brown{ + dir = 9 + }, +/obj/floor_decal/corner/brown{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/liberia/mule) +"cU" = ( +/obj/machinery/light, +/obj/floor_decal/corner/brown{ + dir = 10 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/liberia/mule) +"cV" = ( +/obj/floor_decal/corner/brown{ + dir = 10 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/liberia/mule) +"cW" = ( +/obj/floor_decal/corner/brown{ + dir = 10 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/liberia/mule) +"cX" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"cY" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringengines) +"cZ" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/chemical_dispenser/bar_coffee{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/carpet/red, +/area/liberia/traidingroom) +"da" = ( +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringengines) +"db" = ( +/obj/machinery/alarm/merchant{ + dir = 4; + pixel_x = -25 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/floor_decal/corner/blue/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"dc" = ( +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/suit_cycler/engineering{ + req_access = list() + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringstorage) +"dd" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"de" = ( +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/liberia/traidingroom) +"df" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"dg" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/silver, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/paint_stripe/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/liberia/mule) +"dh" = ( +/obj/machinery/computer/ship/engines{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"di" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "merchant_ship_vent" + }, +/obj/structure/catwalk, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/mule) +"dk" = ( +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"dl" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + id_tag = "merchant_ship_vent" + }, +/obj/structure/sign/warning/airlock{ + dir = 8; + pixel_x = 32 + }, +/obj/structure/catwalk, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/fuel_port{ + pixel_x = 32; + pixel_y = -32 + }, +/turf/simulated/floor/plating, +/area/liberia/mule) +"dm" = ( +/obj/machinery/fabricator{ + desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; + fab_status_flags = 1; + name = "unlocked autolathe" + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + frequency = 1380; + id_tag = "merchant_ship_dock"; + pixel_x = -24; + tag_airpump = "merchant_ship_vent"; + tag_chamber_sensor = "merchant_ship_sensor"; + tag_exterior_door = "merchant_ship_exterior"; + tag_interior_door = "merchant_ship_interior" + }, +/obj/floor_decal/corner/brown/half{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/mule) +"dn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/obj/catwalk_plated, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"do" = ( +/obj/machinery/computer/modular/preset/civilian, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/green, +/turf/simulated/floor/tiled/monotile, +/area/liberia/traidingroom) +"dp" = ( +/obj/structure/table/rack, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/traidingroom) +"dq" = ( +/obj/machinery/recharger, +/obj/structure/table/reinforced, +/obj/structure/extinguisher_cabinet{ + pixel_x = -7; + pixel_y = 32 + }, +/obj/machinery/vending/wallmed1{ + pixel_x = 7; + pixel_y = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/green{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/liberia/traidingroom) +"dr" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"ds" = ( +/obj/structure/sign/warning{ + dir = 8; + pixel_x = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/liberia/traidingroom) +"dt" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"dv" = ( +/obj/machinery/hologram/holopad/longrange, +/obj/floor_decal/corner/blue/mono, +/obj/overmap/visitable/ship/liberia, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"dw" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm/merchant{ + pixel_y = 24 + }, +/obj/structure/closet/secure_closet/engineering_electrical/bearcat, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"dx" = ( +/obj/structure/table/steel, +/obj/machinery/cell_charger, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable/blue{ + d2 = 2; + icon_state = "0-2" + }, +/obj/random/powercell, +/obj/machinery/power/apc/liberia{ + dir = 1; + name = "merchant north bump"; + pixel_y = 24; + req_access = list("ACCESS_MERCHANT") + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow{ + dir = 10; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"dy" = ( +/obj/machinery/suit_storage_unit/standard_unit{ + req_access = list("ACCESS_MERCHANT") + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow{ + dir = 10; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"dz" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Engineering Wing"; + req_access = newlist() + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/engineeringlobby) +"dA" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"dB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"dC" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/fulltile, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"dD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"dE" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"dF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"dG" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/table/steel, +/obj/item/storage/box/lights/mixed, +/obj/item/reagent_containers/spray/cleaner, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow{ + dir = 10; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"dH" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/glass/command{ + name = "Bridge"; + req_access = newlist() + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"dI" = ( +/obj/machinery/computer/modular/preset/security{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"dJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/liberia/officeroom) +"dK" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow{ + dir = 10; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"dL" = ( +/obj/structure/table/glass, +/obj/item/folder/blue, +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"dM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/full, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"dN" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/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/tiled/steel_grid, +/area/liberia/atmos) +"dO" = ( +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"dP" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"dQ" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/engineeringlobby) +"dR" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/green{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"dS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"dT" = ( +/obj/machinery/cell_charger, +/obj/floor_decal/corner/brown/half{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/alarm/merchant{ + dir = 1; + pixel_y = -20 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/mule) +"dU" = ( +/obj/floor_decal/corner/brown/half{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/button/blast_door{ + dir = 1; + id_tag = "merchantdesk"; + name = "Merchant Desk Shutters"; + pixel_y = -21; + req_access = list("ACCESS_MERCHANT") + }, +/obj/structure/filingcabinet/wallcabinet{ + pixel_x = 28 + }, +/obj/item/folder, +/obj/item/folder, +/obj/item/folder/blue, +/obj/item/folder/red, +/obj/item/hand_labeler, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/mule) +"dV" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/glass/maintenance{ + dir = 8; + name = "Trading Office" + }, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"dW" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"dX" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"dY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"dZ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringengines) +"ea" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringengines) +"eb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"ec" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/closet/crate/secure{ + name = "basic resources crate"; + req_access = list("ACCESS_MERCHANT") + }, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/rods/fifty, +/obj/item/stack/material/rods/fifty, +/obj/item/stack/material/plasteel{ + amount = 40 + }, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/item/stack/material/wood/fifty, +/obj/item/stack/material/wood/fifty, +/obj/machinery/door/window/brigdoor/northleft{ + req_access = newlist() + }, +/obj/item/stack/material/titanium/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/aluminium/fifty, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"ed" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"ee" = ( +/obj/structure/closet/crate/freezer, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"ef" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/closet/crate/secure/phoron{ + name = "resources crate"; + req_access = list("ACCESS_MERCHANT") + }, +/obj/item/stack/material/diamond/ten, +/obj/item/stack/material/gold/ten, +/obj/item/stack/material/silver/ten, +/obj/item/stack/material/phoron/ten, +/obj/item/stack/material/uranium/ten, +/obj/machinery/door/window/brigdoor/northleft{ + req_access = newlist() + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"eg" = ( +/obj/structure/table/mag, +/obj/item/swapper/jaws_of_life, +/obj/item/swapper/power_drill, +/obj/item/device/flashlight/upgraded, +/obj/item/marshalling_wand, +/obj/floor_decal/corner/brown{ + dir = 10 + }, +/obj/floor_decal/corner/brown{ + dir = 5 + }, +/obj/item/device/binoculars, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"eh" = ( +/obj/structure/table/mag, +/obj/floor_decal/corner/brown{ + dir = 10 + }, +/obj/floor_decal/corner/brown{ + dir = 5 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"ej" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"ek" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"el" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/emcloset{ + anchored = 1; + name = "anchored emergency closet" + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"em" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/catwalk_plated, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"en" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/liberia/traidingroom) +"eo" = ( +/obj/machinery/light, +/obj/floor_decal/corner/blue{ + dir = 10; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"ep" = ( +/obj/machinery/atm{ + pixel_y = -30 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/door/window/northleft{ + autoclose = 1; + autoset_access = 0; + name = "ATM Private" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"eq" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"er" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/yellow/three_quarters, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"es" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"et" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/item/card/id{ + access = list("ACCESS_MERCHANT"); + desc = "A visitor's access card, this one is for the Merchant's Station."; + name = "Visitor's Card - Merchant's Station" + }, +/obj/item/card/id{ + access = list("ACCESS_MERCHANT"); + desc = "A visitor's access card, this one is for the Merchant's Station."; + name = "Visitor's Card - Merchant's Station" + }, +/obj/item/card/id{ + access = list("ACCESS_MERCHANT"); + desc = "A visitor's access card, this one is for the Merchant's Station."; + name = "Visitor's Card - Merchant's Station" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm/merchant{ + dir = 4; + pixel_x = -25 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"eu" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/green{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"ev" = ( +/obj/structure/closet/crate, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/floor_decal/borderfloor, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"ew" = ( +/obj/structure/largecrate, +/obj/random/loot, +/obj/random/plushie, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"ex" = ( +/obj/paint/silver, +/obj/paint_stripe/yellow, +/turf/simulated/wall/r_titanium, +/area/liberia/mule) +"ey" = ( +/obj/machinery/door/airlock/external{ + autoset_access = 0; + frequency = 1380; + id_tag = "merchant_ship_exterior"; + locked = 1; + name = "Ship Exterior" + }, +/obj/machinery/access_button{ + command = "cycle_exterior"; + frequency = 1380; + master_tag = "mule_port_shuttle_dock"; + pixel_x = -28 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/shield_diffuser, +/obj/shuttle_landmark/mule/start, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/mule) +"ez" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/corner/green/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"eA" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner/green/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"eB" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/green{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"eC" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_east = 1; + tag_south = 3; + tag_west = 2 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"eD" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"eE" = ( +/obj/machinery/atmospherics/binary/passive_gate/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"eF" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/light/small{ + dir = 4; + pixel_y = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"eG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/item/reagent_containers/glass/beaker/cryoxadone{ + pixel_x = 7; + pixel_y = 1 + }, +/obj/structure/closet/walllocker{ + pixel_x = -24; + pixel_y = 3 + }, +/obj/floor_decal/corner/blue/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/liberia/medbay) +"eH" = ( +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/corner/blue/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/liberia/medbay) +"eI" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"eJ" = ( +/obj/structure/sign/poster, +/turf/simulated/wall/prepainted, +/area/liberia/hallway) +"eM" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"eN" = ( +/obj/structure/closet/crate, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/item/stack/material/glass{ + amount = 15 + }, +/obj/item/stack/material/plastic{ + amount = 10 + }, +/obj/item/stack/material/steel{ + amount = 10 + }, +/obj/item/device/suit_cooling_unit, +/obj/item/stack/material/aluminium/ten, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/obj/item/clothing/gloves/insulated/black, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"eO" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"eP" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"eQ" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"eR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/obj/machinery/alarm/merchant{ + dir = 4; + pixel_x = -25 + }, +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/liberia/medbay) +"eS" = ( +/obj/machinery/body_scanconsole, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/machinery/power/apc/liberia{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/blue{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/liberia/medbay) +"eT" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"eU" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"eV" = ( +/obj/machinery/cryopod{ + dir = 2 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -21 + }, +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/cryo) +"eW" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/cryopod{ + dir = 2 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/computer/cryopod{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/cryo) +"eX" = ( +/obj/machinery/cryopod{ + dir = 2 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/cryo) +"eY" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"eZ" = ( +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/engineeringlobby) +"fa" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/yellow/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"fc" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"fd" = ( +/obj/machinery/vitals_monitor, +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/liberia/medbay) +"fe" = ( +/obj/machinery/vending/snack{ + dir = 4; + name = "hacked Getmore Chocolate Corp"; + prices = list() + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"ff" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"fg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/machinery/door/airlock{ + name = "Cryo Storage" + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/cryo) +"fh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 9 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/cryo) +"fi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/cryo) +"fj" = ( +/turf/simulated/floor/tiled/techfloor, +/area/liberia/cryo) +"fk" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"fl" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 4 + }, +/turf/simulated/floor/airless, +/area/liberia/mule) +"fm" = ( +/obj/structure/closet/crate/uranium, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"fn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/green{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"fo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/structure/sign/warning/airlock{ + dir = 4; + pixel_x = -32 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/corner/green{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"fp" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"fq" = ( +/obj/machinery/atmospherics/binary/pump, +/obj/floor_decal/borderfloor/corner, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/floor_decal/corner/yellow/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"fr" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 1; + start_pressure = 740.5 + }, +/obj/machinery/light/small, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow{ + dir = 5; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"fs" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 1; + start_pressure = 740.5 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"ft" = ( +/obj/machinery/optable, +/obj/item/device/scanner/health, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/liberia/medbay) +"fu" = ( +/obj/structure/closet/walllocker{ + pixel_x = 24; + pixel_y = 4 + }, +/obj/item/reagent_containers/food/snacks/candy/donor, +/obj/item/reagent_containers/food/snacks/candy/donor, +/obj/item/reagent_containers/food/snacks/candy/donor, +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/obj/structure/iv_stand, +/obj/item/reagent_containers/ivbag/blood/skrell/oneg, +/obj/item/reagent_containers/ivbag/blood/human/opos, +/turf/simulated/floor/tiled/white/monotile, +/area/liberia/medbay) +"fv" = ( +/obj/machinery/vending/cola{ + dir = 4; + name = "hacked Robust Softdrinks"; + prices = list() + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"fw" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/cryo) +"fx" = ( +/obj/floor_decal/techfloor, +/obj/structure/table/standard, +/obj/machinery/power/apc/liberia{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/blue, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/cryo) +"fy" = ( +/obj/structure/sign{ + icon_state = "radiation"; + pixel_x = 0; + pixel_y = 30 + }, +/obj/structure/reagent_dispensers/fueltank, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"fz" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"fA" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/alarm/merchant{ + dir = 1; + pixel_y = -20 + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow{ + dir = 5; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"fB" = ( +/obj/machinery/light/small, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/item/tank/nitrogen, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/yellow{ + dir = 5; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"fC" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"fD" = ( +/obj/machinery/disposal, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"fE" = ( +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"fF" = ( +/turf/simulated/floor/tiled, +/area/liberia/traidingroom) +"fG" = ( +/obj/structure/bookcase/manuals/medical, +/turf/simulated/wall/prepainted, +/area/liberia/bar) +"fH" = ( +/obj/structure/bookcase/manuals/engineering, +/turf/simulated/wall/prepainted, +/area/liberia/bar) +"fI" = ( +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"fJ" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"fK" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/officeroom) +"fL" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/folder, +/obj/item/folder, +/turf/simulated/floor/tiled/monotile, +/area/liberia/officeroom) +"fM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"fN" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/structure/flora/pottedplant{ + icon_state = "plant-06" + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/officeroom) +"fO" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/green, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/carpet, +/area/liberia/bar) +"fP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/bed/sofa/l/black, +/turf/simulated/floor/carpet, +/area/liberia/bar) +"fQ" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/bed/sofa/m/black{ + dir = 10 + }, +/turf/simulated/floor/carpet, +/area/liberia/bar) +"fR" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 4; + icon_state = "wooden_chair_wings" + }, +/obj/machinery/alarm/merchant{ + pixel_y = 24 + }, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"fS" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"fT" = ( +/obj/structure/bed/chair/wood/wings/walnut{ + dir = 8; + icon_state = "wooden_chair_wings" + }, +/obj/machinery/power/apc/liberia{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/blue{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"fU" = ( +/obj/structure/table/woodentable/walnut, +/obj/random/drinkbottle, +/obj/random/drinkbottle, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"fV" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/chemical_dispenser/bar_soft/full, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"fW" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/reagent_dispensers/beerkeg, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"fX" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"fY" = ( +/obj/machinery/atm{ + pixel_x = -30 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"fZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/alarm/merchant{ + dir = 1; + pixel_y = -20 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"ga" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"gb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/glass/command{ + name = "Office"; + req_access = newlist() + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/officeroom) +"gc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/liberia/officeroom) +"gd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/bed/chair/rounded/blue{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/liberia/officeroom) +"ge" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/floor/tiled/monotile, +/area/liberia/officeroom) +"gf" = ( +/obj/structure/bed/sofa/r/black{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/liberia/bar) +"gg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet, +/area/liberia/bar) +"gh" = ( +/obj/structure/bed/sofa/r/black{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/liberia/bar) +"gi" = ( +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"gj" = ( +/obj/structure/bed/chair/wood/wings/walnut, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"gk" = ( +/obj/machinery/door/window/westright, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"gl" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/storage/box/glasses/pint, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"gm" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -7; + pixel_y = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/green, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"gn" = ( +/obj/machinery/door/airlock{ + name = "Toilet" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/toiletroom1) +"go" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/machinery/power/apc/liberia{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/blue, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/monotile, +/area/liberia/officeroom) +"gp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/bed/chair/rounded/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/liberia/officeroom) +"gq" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/alarm/merchant{ + dir = 8; + pixel_x = 25 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/officeroom) +"gr" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/structure/bed/sofa/l/black{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/liberia/bar) +"gs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet, +/area/liberia/bar) +"gt" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet, +/area/liberia/bar) +"gu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/spline/plain/brown, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"gv" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/spline/plain/brown, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"gw" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/floor_decal/spline/plain/brown, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"gx" = ( +/obj/structure/table/woodentable/walnut, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"gy" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/material/ashtray/bronze, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/item/clothing/mask/smokable/cigarette/cigar/havana, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"gz" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/item/storage/fancy/matches/matchbox, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"gA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/liberia/bar) +"gC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"gD" = ( +/obj/structure/closet/emcloset, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"gE" = ( +/obj/structure/table/standard, +/obj/item/towel/random, +/obj/machinery/power/apc/liberia{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/blue{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/toiletroom1) +"gF" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/toiletroom1) +"gG" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 16 + }, +/obj/item/storage/mirror{ + dir = 4; + pixel_x = -1; + pixel_y = 30 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/toiletroom1) +"gH" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 16 + }, +/obj/item/storage/mirror{ + dir = 4; + pixel_x = -1; + pixel_y = 30 + }, +/obj/machinery/alarm/merchant{ + dir = 8; + pixel_x = 25 + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/toiletroom1) +"gI" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -21 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/officeroom) +"gJ" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/borderfloor, +/obj/item/device/eftpos{ + eftpos_name = "Merchant EFTPOS scanner" + }, +/obj/item/stack/package_wrap/cargo_wrap, +/obj/item/hand_labeler, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/officeroom) +"gK" = ( +/obj/floor_decal/borderfloor, +/obj/machinery/computer/modular/preset/civilian{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/officeroom) +"gL" = ( +/obj/machinery/photocopier, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/monotile, +/area/liberia/officeroom) +"gM" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/shoes/leather, +/obj/item/clothing/under/blazer, +/obj/item/clothing/under/lawyer/black, +/obj/item/clothing/under/suit_jacket/navy, +/obj/random/handgun, +/obj/item/reagent_containers/food/drinks/bottle/premiumwine, +/turf/simulated/floor/wood/ebony, +/area/liberia/captain) +"gN" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/wood/ebony, +/area/liberia/captain) +"gO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/power/apc/liberia{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/blue{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/wood/ebony, +/area/liberia/captain) +"gP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/alarm/merchant{ + pixel_y = 24 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/ebony, +/area/liberia/captain) +"gQ" = ( +/obj/machinery/door/airlock{ + autoset_access = 0; + dir = 4; + name = "Merchant Leader"; + req_access = list("ACCESS_MERCHANT") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/spline/plain/brown{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/ebony, +/area/liberia/captain) +"gR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/library) +"gS" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"gT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"gU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/light, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"gW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"gX" = ( +/obj/floor_decal/spline/plain/brown{ + dir = 10 + }, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"gY" = ( +/obj/floor_decal/spline/plain/brown, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"gZ" = ( +/obj/structure/disposalpipe/segment, +/obj/floor_decal/spline/plain/brown, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"ha" = ( +/obj/machinery/door/airlock/glass{ + name = "Lounge" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"hb" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/toiletroom1) +"hc" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/toiletroom1) +"hd" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/toiletroom1) +"he" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/toiletroom1) +"hf" = ( +/obj/floor_decal/spline/plain/brown, +/obj/structure/closet/secure_closet{ + name = "merchant's locker"; + req_access = list("ACCESS_MERCHANT") + }, +/obj/item/folder, +/obj/item/book/manual/nt_sop, +/turf/simulated/floor/wood/ebony, +/area/liberia/captain) +"hh" = ( +/obj/floor_decal/spline/plain/brown, +/turf/simulated/floor/wood/ebony, +/area/liberia/captain) +"hi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/spline/plain/brown, +/turf/simulated/floor/wood/ebony, +/area/liberia/captain) +"hj" = ( +/obj/machinery/door/airlock{ + name = "Merchant Assistants"; + req_access = newlist() + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/personellroom2) +"hk" = ( +/obj/machinery/jukebox/custom_tape/old, +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"hl" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"hm" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/toiletroom1) +"hn" = ( +/obj/structure/hygiene/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/toiletroom1) +"ho" = ( +/obj/structure/closet/radiation, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"hp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"hq" = ( +/obj/structure/bed/chair/rounded/red{ + dir = 8 + }, +/turf/simulated/floor/carpet/red, +/area/liberia/captain) +"hs" = ( +/obj/structure/undies_wardrobe, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/machinery/power/apc/liberia{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/blue{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/carpet, +/area/liberia/personellroom2) +"ht" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/carpet, +/area/liberia/personellroom2) +"hv" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/clothing/suit/chef/classic, +/obj/item/material/kitchen/rollingpin, +/obj/item/material/knife/kitchen, +/turf/simulated/floor/tiled/freezer, +/area/liberia/bar) +"hw" = ( +/obj/machinery/door/window/northleft{ + name = "Kitchen" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/freezer, +/area/liberia/bar) +"hx" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/microwave, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/freezer, +/area/liberia/bar) +"hy" = ( +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"hz" = ( +/obj/machinery/vending/cigarette{ + name = "hacked cigarette machine"; + prices = list(); + products = list(/obj/item/storage/fancy/smokable/luckystars=10,/obj/item/storage/fancy/matches/matchbox=10,/obj/item/flame/lighter/zippo=4,/obj/item/clothing/mask/smokable/cigarette/cigar/havana=2) + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"hA" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/scanner/price, +/obj/item/device/scanner/price, +/obj/machinery/light/small, +/obj/item/device/scanner/price, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"hB" = ( +/obj/machinery/pipelayer, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"hC" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/material/ashtray, +/obj/random/smokes, +/turf/simulated/floor/carpet/red, +/area/liberia/captain) +"hD" = ( +/obj/structure/table/woodentable/walnut, +/mob/living/simple_animal/tindalos{ + name = "Eddy" + }, +/obj/item/crowbar/prybar, +/turf/simulated/floor/carpet/red, +/area/liberia/captain) +"hE" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/green, +/turf/simulated/floor/carpet/red, +/area/liberia/captain) +"hF" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + dir = 8; + pixel_x = 22 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/undies_wardrobe, +/turf/simulated/floor/carpet/red, +/area/liberia/captain) +"hG" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/shoes/black, +/obj/item/clothing/under/overalls, +/obj/item/clothing/under/skirt, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/item/crowbar/prybar, +/turf/simulated/floor/carpet, +/area/liberia/personellroom2) +"hH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet, +/area/liberia/personellroom2) +"hI" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/green, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/liberia/personellroom2) +"hJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/alarm/merchant{ + dir = 4; + pixel_x = -25 + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/bar) +"hK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/bar) +"hL" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/bar) +"hM" = ( +/obj/item/stock_parts/computer/tesla_link, +/obj/item/stock_parts/computer/tesla_link, +/obj/item/stock_parts/computer/tesla_link, +/obj/item/stock_parts/computer/tesla_link, +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/alarm/merchant{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"hN" = ( +/obj/structure/table/woodentable/walnut, +/obj/random/action_figure, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/carpet, +/area/liberia/personellroom2) +"hO" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet, +/area/liberia/personellroom2) +"hQ" = ( +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -21 + }, +/obj/structure/closet/kitchen{ + req_access = newlist() + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/bar) +"hR" = ( +/obj/structure/hygiene/sink, +/turf/simulated/floor/tiled/freezer, +/area/liberia/bar) +"hS" = ( +/obj/structure/closet/fridge, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/reagent_containers/food/condiment/enzyme, +/turf/simulated/floor/tiled/freezer, +/area/liberia/bar) +"hT" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/alarm/merchant{ + dir = 4; + pixel_x = -25 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/floor_decal/corner/green{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"hU" = ( +/obj/structure/closet/radiation, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"hW" = ( +/obj/machinery/atmospherics/omni/mixer{ + active_power_usage = 2500; + tag_east = 1; + tag_east_con = 0.21; + tag_south = 2; + tag_west = 1; + tag_west_con = 0.79 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"hY" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 6 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"hZ" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"ib" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/item/device/flashlight, +/obj/random/tool, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringengines) +"ic" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/structure/sign/warning/airlock{ + dir = 1; + pixel_y = -32 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "liberia_solar_south"; + name = "south liberia solar interior"; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"id" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"ie" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"ig" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/corner/green/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"ih" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 6 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringengines) +"ii" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Storage"; + req_access = newlist() + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringengines) +"ij" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"ik" = ( +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringengines) +"in" = ( +/obj/structure/table/standard, +/obj/item/defibrillator/compact/loaded, +/obj/item/device/flashlight, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"io" = ( +/obj/structure/table/standard, +/obj/machinery/cell_charger, +/obj/item/storage/toolbox/electrical{ + pixel_x = 7; + pixel_y = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"ip" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"iu" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringstorage) +"iv" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"iw" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"ix" = ( +/obj/machinery/power/solar_control/autostart{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringstorage) +"iy" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/engineeringengines) +"iz" = ( +/obj/machinery/computer/ship/sensors{ + dir = 8 + }, +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"iA" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar1) +"iB" = ( +/obj/item/stack/nanopaste, +/obj/item/device/robotanalyzer, +/obj/item/stack/nanopaste, +/obj/structure/table/rack/dark, +/obj/random/maintenance/clean, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"iD" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"iG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Maintenance"; + req_access = newlist() + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/warning/fulltile, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/liberia/atmos) +"iH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"iI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"iJ" = ( +/obj/floor_decal/solarpanel, +/obj/machinery/power/tracker, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/liberia/solar1) +"iK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/liberia/traidingroom) +"iL" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"iN" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 4 + }, +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"iO" = ( +/obj/machinery/computer/ship/helm{ + dir = 8 + }, +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"iP" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar1) +"iR" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar1) +"iS" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar1) +"iT" = ( +/obj/machinery/door/airlock/external{ + autoset_access = 0; + frequency = 1380; + id_tag = "liberia_solar_north_outer"; + locked = 1; + name = "North Liberia Solar External"; + req_access = list("ACCESS_MERCHANT") + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringstorage) +"iU" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "liberia_solar_north_pump" + }, +/obj/structure/catwalk, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 1; + frequency = 1380; + id_tag = "liberia_solar_north"; + name = "Liberia Solar North Airlock Controller"; + pixel_y = -24; + req_access = list(); + tag_airpump = "liberia_solar_north_pump"; + tag_chamber_sensor = "liberia_solar_north_sensor"; + tag_exterior_door = "liberia_solar_north_outer"; + tag_interior_door = "liberia_solar_north_inner" + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "liberia_solar_north_sensor"; + master_tag = "liberia_solar_north"; + pixel_y = 24 + }, +/turf/simulated/floor/plating, +/area/liberia/engineeringstorage) +"iV" = ( +/obj/structure/largecrate, +/obj/random/loot, +/obj/random/plushie, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"iW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external{ + autoset_access = 0; + frequency = 1380; + id_tag = "liberia_solar_north_inner"; + locked = 1; + name = "North Liberia Solar Interior"; + req_access = list("ACCESS_MERCHANT") + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringstorage) +"iX" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"iY" = ( +/obj/machinery/computer/ship/engines{ + dir = 8 + }, +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"iZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"ja" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar2) +"jb" = ( +/obj/floor_decal/solarpanel, +/obj/machinery/power/solar{ + id = "auxsolarsport"; + name = "Aft Port Solar Array" + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/liberia/solar1) +"jd" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar1) +"je" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar1) +"jg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"jh" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar2) +"jn" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar1) +"jo" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/space_heater, +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"jq" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"jr" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/power/port_gen/pacman/mrs{ + sheets = 5 + }, +/obj/floor_decal/industrial/warning/full, +/obj/structure/cable/blue{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringstorage) +"js" = ( +/obj/structure/closet/crate/solar, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringstorage) +"jt" = ( +/obj/structure/cable/blue, +/obj/machinery/power/smes/buildable/preset/liberia, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringstorage) +"ju" = ( +/obj/machinery/vending/tool, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"jv" = ( +/obj/structure/table/steel, +/obj/random/advdevice, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"jw" = ( +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/tile/carpetred/fifty, +/obj/item/stack/tile/carpetorange/fifty, +/obj/item/stack/tile/carpetblue/fifty, +/obj/item/stack/tile/carpetpurple/fifty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"jx" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/corner/blue/mono, +/obj/machinery/computer/modular/preset/cardslot/command{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"jy" = ( +/obj/structure/closet, +/obj/random/shoes, +/obj/random/clothing, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"jz" = ( +/obj/structure/table/glass, +/obj/item/paper_bin, +/obj/item/pen, +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"jA" = ( +/obj/structure/closet/crate, +/obj/random/loot, +/obj/random/loot, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"jB" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"jC" = ( +/obj/machinery/computer/ship/navigation{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"jD" = ( +/obj/structure/table/glass, +/obj/machinery/photocopier/faxmachine{ + department = "FTU Ship Liberia"; + send_access = list("ACCESS_MERCHANT") + }, +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"jE" = ( +/obj/random/action_figure, +/obj/random/plushie, +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"jF" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar1) +"jG" = ( +/obj/structure/closet/cabinet, +/obj/random/plushie, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/machinery/alarm/merchant{ + dir = 4; + pixel_x = -25 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/carpet/green, +/area/liberia/guestroom1) +"jH" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/green, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/submap_landmark/spawnpoint/liberia/engineer, +/turf/simulated/floor/carpet/green, +/area/liberia/guestroom1) +"jI" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/rd, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/submap_landmark/spawnpoint/liberia/engineer, +/turf/simulated/floor/carpet/magenta, +/area/liberia/guestroom2) +"jJ" = ( +/obj/structure/closet/cabinet, +/obj/random/plushie, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/machinery/alarm/merchant{ + dir = 8; + pixel_x = 25 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/carpet/magenta, +/area/liberia/guestroom2) +"jK" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/bed/sofa/m/black{ + dir = 6 + }, +/turf/simulated/floor/carpet, +/area/liberia/library) +"jL" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/alarm/merchant{ + pixel_y = 24 + }, +/obj/structure/bed/sofa/r/black, +/turf/simulated/floor/carpet, +/area/liberia/library) +"jM" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/library) +"jN" = ( +/obj/structure/bookcase/manuals/engineering, +/turf/simulated/floor/wood/walnut, +/area/liberia/library) +"jO" = ( +/obj/structure/bookcase/manuals/xenoarchaeology, +/turf/simulated/floor/wood/walnut, +/area/liberia/library) +"jP" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/liberia/guestroom1) +"jQ" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/monotile, +/area/liberia/officeroom) +"jR" = ( +/obj/structure/bed/chair/wood/walnut, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/carpet/green, +/area/liberia/guestroom1) +"jS" = ( +/obj/floor_decal/corner/blue/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"jT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/power/apc/liberia{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/blue, +/obj/floor_decal/corner/blue/three_quarters, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"jU" = ( +/obj/structure/bed/chair/wood/walnut, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/power/apc/liberia{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/blue{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/carpet/magenta, +/area/liberia/guestroom2) +"jV" = ( +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/structure/table/rack/dark, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"jW" = ( +/obj/structure/bed/sofa/m/black{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/liberia/library) +"jX" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/lava/orange, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/liberia/library) +"jY" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/green, +/area/liberia/guestroom1) +"jZ" = ( +/obj/machinery/button/alternate/door/bolts{ + dir = 4; + id_tag = "merchdorm2"; + name = "Lock"; + pixel_x = -24 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/carpet/magenta, +/area/liberia/guestroom2) +"ka" = ( +/obj/structure/table/woodentable/walnut, +/obj/structure/flora/pottedplant/smallcactus{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/carpet/magenta, +/area/liberia/guestroom2) +"kb" = ( +/obj/floor_decal/spline/fancy/wood, +/obj/submap_landmark/spawnpoint/liberia/doctor, +/obj/structure/bed/sofa/l/black{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/liberia/library) +"kc" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/storage/box/donut, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet, +/area/liberia/library) +"kf" = ( +/obj/machinery/ion_engine{ + dir = 8 + }, +/turf/simulated/floor/airless, +/area/liberia/mule) +"kg" = ( +/obj/machinery/door/airlock/civilian{ + id_tag = "merchdorm1"; + name = "Room One" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/guestroom1) +"kh" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/library) +"ki" = ( +/obj/machinery/newscaster{ + pixel_x = 26; + pixel_y = 2 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/library) +"kk" = ( +/obj/floor_decal/techfloor{ + dir = 9 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"kl" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"km" = ( +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner, +/obj/machinery/alarm/merchant{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"kn" = ( +/obj/machinery/door/airlock/civilian{ + name = "Shuttle Dock" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/library) +"ko" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/carpet, +/area/liberia/library) +"kp" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/carpet, +/area/liberia/library) +"kq" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/bed/chair/rounded/black{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/liberia/library) +"kr" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/carpet, +/area/liberia/library) +"ks" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/corner, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"kt" = ( +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"ku" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"kw" = ( +/obj/machinery/vending/coffee{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/carpet, +/area/liberia/library) +"kx" = ( +/obj/machinery/vending/weeb{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet, +/area/liberia/library) +"ky" = ( +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/spline/fancy/wood, +/obj/machinery/power/apc/liberia{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/blue, +/turf/simulated/floor/carpet, +/area/liberia/library) +"kz" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet, +/area/liberia/library) +"kB" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"kC" = ( +/obj/structure/table/steel, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/belt/utility/full, +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"kF" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"kG" = ( +/obj/machinery/vending/engivend{ + req_access = list("ACCESS_MERCHANT") + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"kJ" = ( +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"kK" = ( +/obj/machinery/light, +/obj/floor_decal/borderfloor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"kL" = ( +/obj/structure/cable/blue{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/obj/machinery/power/smes/buildable/preset/liberia, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"kM" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"kN" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/obj/floor_decal/corner/blue/full, +/turf/simulated/floor/tiled/white/monotile, +/area/liberia/medbay) +"kO" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"kQ" = ( +/obj/machinery/atmospherics/unary/freezer{ + icon_state = "freezer" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/liberia/medbay) +"kR" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"kS" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/white, +/area/liberia/medbay) +"kT" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"kU" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/submap_landmark/spawnpoint/liberia/doctor, +/turf/simulated/floor/tiled/white, +/area/liberia/medbay) +"kV" = ( +/obj/machinery/bodyscanner, +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/liberia/medbay) +"kW" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"kX" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/liberia/personellroom1) +"kY" = ( +/obj/machinery/sleeper{ + dir = 4 + }, +/obj/floor_decal/corner/blue/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/liberia/medbay) +"kZ" = ( +/obj/floor_decal/corner/blue{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/liberia/medbay) +"la" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/liberia/medbay) +"lb" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "liberia_solar_north"; + name = "north liberia solar interior"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"lc" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/structure/sign/warning/airlock{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"ld" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"le" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/machinery/suit_storage_unit/engineering/salvage{ + req_access = list() + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringstorage) +"lf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"lg" = ( +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 4; + frequency = 1380; + id_tag = "mule_port_dock"; + pixel_x = -20; + tag_airpump = "merchant_station_vent"; + tag_chamber_sensor = "merchant_station_sensor"; + tag_exterior_door = "merchant_station_exterior"; + tag_interior_door = "merchant_station_interior" + }, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "merchant_station_sensor"; + pixel_x = -28; + pixel_y = -10 + }, +/obj/decal/cleanable/dirt, +/obj/structure/catwalk, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/liberia/dockinghall) +"lh" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "merchant_station_vent" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/catwalk, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/dockinghall) +"li" = ( +/obj/machinery/door/airlock/external{ + autoset_access = 0; + frequency = 1380; + id_tag = "merchant_station_interior"; + locked = 1; + name = "Station Interior" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1380; + master_tag = "mule_port_dock"; + name = "interior access button"; + pixel_x = -1; + pixel_y = 22 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"lj" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"ll" = ( +/obj/machinery/meter, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6; + icon_state = "intact" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"lm" = ( +/obj/machinery/atmospherics/omni/filter{ + active_power_usage = 2500; + tag_east = 1; + tag_south = 4; + tag_west = 2 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"ln" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"lo" = ( +/obj/structure/table/standard, +/obj/item/defibrillator/loaded, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/sign/warning/nosmoking_1{ + dir = 8; + pixel_x = 32 + }, +/obj/item/storage/firstaid/regular{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/storage/firstaid/adv{ + pixel_x = -2 + }, +/obj/item/storage/firstaid/fire{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/storage/firstaid/o2, +/obj/item/storage/firstaid/toxin, +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/liberia/medbay) +"lp" = ( +/obj/floor_decal/corner/blue/three_quarters, +/obj/machinery/sleeper/survival_pod{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/liberia/medbay) +"lq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/corner/blue{ + dir = 10; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled/white, +/area/liberia/medbay) +"lr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/blue{ + dir = 10; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled/white, +/area/liberia/medbay) +"ls" = ( +/obj/structure/table/standard, +/obj/item/storage/firstaid/surgery{ + pixel_y = 6 + }, +/obj/item/stack/medical/advanced/bruise_pack, +/obj/item/reagent_containers/spray/sterilizine, +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 22 + }, +/obj/floor_decal/corner/blue/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/liberia/medbay) +"lt" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"lu" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/liberia/bar) +"lv" = ( +/obj/machinery/vending/medical/sierra{ + req_access = list("ACCESS_MERCHANT") + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/white, +/area/liberia/medbay) +"lw" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/medical{ + name = "Medical Compartment" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/liberia/medbay) +"lx" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/power/apc/liberia{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/blue{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/carpet/green, +/area/liberia/guestroom1) +"ly" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/carpet/magenta, +/area/liberia/guestroom2) +"lz" = ( +/obj/machinery/button/alternate/door/bolts{ + dir = 8; + id_tag = "merchdorm1"; + name = "Lock"; + pixel_x = 24 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/carpet/green, +/area/liberia/guestroom1) +"lB" = ( +/turf/simulated/floor/wood/walnut, +/area/liberia/library) +"lC" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 5 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"lD" = ( +/turf/simulated/wall/prepainted, +/area/liberia/merchantstorage) +"lE" = ( +/obj/machinery/button/blast_door{ + id_tag = "merch-ship_windows"; + name = "Bridge Window Blast Doors"; + pixel_x = -36 + }, +/obj/machinery/button/blast_door{ + id_tag = "merch-ship_sensors"; + name = "Bridge Sensors Blast Door"; + pixel_x = -26 + }, +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"lR" = ( +/obj/machinery/vending/wallmed1{ + pixel_x = 7; + pixel_y = 32 + }, +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"ml" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"mo" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/alarm/merchant{ + dir = 4; + pixel_x = -25 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/engineeringlobby) +"mr" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"mt" = ( +/obj/shuttle_landmark/nav_liberia/west, +/turf/space, +/area/space) +"mu" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/corner, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"mz" = ( +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"mO" = ( +/obj/structure/closet/crate/med_crate, +/obj/item/storage/firstaid/fire, +/obj/item/storage/firstaid/o2, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/surgery, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/trauma, +/obj/item/defibrillator, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/rescue/loaded, +/obj/item/bodybag/rescue/loaded, +/obj/item/auto_cpr, +/obj/item/storage/box/freezer, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"mT" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/green{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"no" = ( +/turf/simulated/floor/carpet/red, +/area/liberia/captain) +"np" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"ns" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/liberia/traidingroom) +"nD" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/machinery/recharge_station, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"nH" = ( +/obj/structure/bed/chair/wood/walnut, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"nO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/liberia/solar2) +"nQ" = ( +/turf/simulated/wall/prepainted, +/area/liberia/bar) +"oe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/library) +"oo" = ( +/obj/shuttle_landmark/nav_liberia/antag, +/turf/space, +/area/space) +"op" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/table/rack/dark, +/obj/item/stack/material/wood/bamboo/fifty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"os" = ( +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/red, +/area/liberia/traidingroom) +"oD" = ( +/obj/floor_decal/techfloor, +/obj/structure/table/standard, +/obj/item/folder, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/cryo) +"oF" = ( +/turf/simulated/floor/tiled, +/area/liberia/officeroom) +"oH" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/floor_decal/corner/green{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"oM" = ( +/obj/floor_decal/solarpanel, +/obj/machinery/power/solar{ + id = "auxsolarsport"; + name = "Aft Port Solar Array" + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/liberia/solar2) +"oN" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/engineeringlobby) +"oO" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringstorage) +"oS" = ( +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/cryo) +"pa" = ( +/turf/simulated/wall/prepainted, +/area/liberia/guestroom1) +"pf" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/green/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"ps" = ( +/obj/machinery/door/blast/regular{ + dir = 2; + id_tag = "merch-ship_windows" + }, +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/liberia/bridge) +"pB" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"pD" = ( +/obj/structure/sign/poster, +/turf/simulated/wall/prepainted, +/area/liberia/toiletroom1) +"pJ" = ( +/obj/structure/fireaxecabinet{ + pixel_x = -32 + }, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/engineeringlobby) +"pS" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar2) +"pV" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"pX" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/machinery/cryopod{ + dir = 2 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/cryo) +"pZ" = ( +/obj/structure/table/woodentable/walnut, +/obj/machinery/fabricator/micro/bartender{ + pixel_x = 4 + }, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/red, +/area/liberia/traidingroom) +"qg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"qj" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/personellroom1) +"qm" = ( +/obj/catwalk_plated, +/obj/structure/disposalpipe/junction, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"qx" = ( +/turf/simulated/wall/prepainted, +/area/liberia/hallway) +"qA" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"qD" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"qI" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"qR" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"rc" = ( +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"rn" = ( +/obj/structure/table/rack{ + dir = 8 + }, +/obj/item/device/radio, +/obj/item/device/flashlight, +/obj/item/crowbar/prybar, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/steel_ridged, +/area/liberia/engineeringlobby) +"ro" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"rx" = ( +/obj/machinery/power/apc/liberia{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/blue{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled, +/area/liberia/traidingroom) +"rE" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"rT" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/corner/green{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/liberia/hallway) +"rZ" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/closet/cabinet, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/under/rank/engineer, +/obj/item/clothing/under/rank/security, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue, +/area/liberia/personellroom1) +"se" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -28 + }, +/obj/catwalk_plated, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"ss" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"sF" = ( +/obj/machinery/door/airlock/civilian{ + id_tag = "merchdorm2"; + name = "Room One" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/guestroom2) +"sJ" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/power/apc/liberia{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/blue{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"sN" = ( +/obj/structure/catwalk, +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "liberia_solar_south_sensor"; + master_tag = "liberia_solar_south"; + pixel_y = 24 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "liberia_solar_south_pump" + }, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 1; + frequency = 1380; + id_tag = "liberia_solar_south"; + name = "Liberia Solar South Airlock Controller"; + pixel_y = -24; + req_access = list(); + tag_airpump = "liberia_solar_south_pump"; + tag_chamber_sensor = "liberia_solar_south_sensor"; + tag_exterior_door = "liberia_solar_south_outer"; + tag_interior_door = "liberia_solar_south_inner" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/liberia/atmos) +"sQ" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/floor_decal/corner/green/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"sS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/blue, +/area/liberia/personellroom1) +"sY" = ( +/obj/item/stack/material/plastic/ten{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/item/stack/material/aluminium/ten{ + pixel_y = -4 + }, +/obj/item/stack/material/glass/ten{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/red, +/area/liberia/traidingroom) +"th" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"to" = ( +/obj/structure/table/rack/dark, +/obj/random/loot, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"tz" = ( +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"tA" = ( +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "liberia_solar_north"; + name = "north liberia solars exterior"; + pixel_x = -10 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/engineeringstorage) +"tI" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/liberia/cryo) +"tK" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/liberia/solar2) +"tL" = ( +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/liberia/bar) +"tR" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"tU" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"uf" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/engineeringreactor) +"uh" = ( +/obj/floor_decal/solarpanel, +/obj/machinery/power/solar{ + id = "auxsolarsport"; + name = "Aft Port Solar Array" + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/liberia/solar1) +"uo" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/engineeringlobby) +"ur" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/guestroom1) +"uX" = ( +/obj/shuttle_landmark/nav_liberia/north, +/turf/space, +/area/space) +"vd" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"vi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/blue{ + dir = 10; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"vv" = ( +/turf/space, +/area/liberia/solar1) +"vw" = ( +/obj/shuttle_landmark/nav_liberia/east, +/turf/space, +/area/space) +"vB" = ( +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "liberia_solar_south"; + name = "south liberia solars exterior"; + pixel_x = -10 + }, +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/atmos) +"vR" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/ebony, +/area/liberia/bar) +"wq" = ( +/obj/machinery/door/airlock/external{ + autoset_access = 0; + frequency = 1380; + id_tag = "liberia_solar_south_inner"; + locked = 1; + name = "South Liberia Solar Interior"; + req_access = list("ACCESS_MERCHANT") + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/atmos) +"wt" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled/steel_ridged, +/area/liberia/engineeringlobby) +"wD" = ( +/obj/structure/lattice, +/turf/space, +/area/liberia/solar1) +"wK" = ( +/obj/floor_decal/corner/blue{ + dir = 10; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"wM" = ( +/obj/machinery/floodlight, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"wW" = ( +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"xc" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/liberia/captain) +"xn" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/door/window/northright, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/dockinghall) +"xr" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"xG" = ( +/obj/structure/lattice, +/turf/space, +/area/space) +"xT" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/plastic/fifty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"ya" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/liberia/solar2) +"yh" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"yC" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/table/standard, +/obj/machinery/cell_charger, +/obj/random/tech_supply, +/obj/random/tech_supply, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringengines) +"yL" = ( +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/green/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/liberia/traidingroom) +"yP" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"yS" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"yU" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 8 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"zd" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"zl" = ( +/obj/floor_decal/corner/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"zn" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/liberia/officeroom) +"zq" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/bridge) +"zt" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "merch-ship_sensors" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/liberia/merchantstorage) +"zQ" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"Aa" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/captain) +"Af" = ( +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/borderfloor{ + dir = 10 + }, +/obj/floor_decal/corner/green{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"Am" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"Aq" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"Au" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"Az" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/cryo) +"AO" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/hallway) +"AT" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/liberia/traidingroom) +"Bl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/engineeringlobby) +"Br" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"BC" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/toiletroom2) +"BE" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/machinery/power/solar_control/autostart{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"BH" = ( +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"BJ" = ( +/turf/simulated/wall/prepainted, +/area/liberia/library) +"BW" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/plasteel/fifty, +/obj/item/stack/material/plasteel/fifty, +/obj/item/stack/material/plasteel/fifty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"DI" = ( +/turf/simulated/wall/prepainted, +/area/liberia/personellroom1) +"DK" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/corner/blue/full, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"DL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"DP" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/floor_decal/corner/green/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"Eb" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"Ei" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/suit_storage_unit/atmos{ + req_access = list() + }, +/obj/machinery/alarm/merchant{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringstorage) +"Ep" = ( +/obj/structure/table/rack/dark, +/obj/item/storage/box/latexgloves, +/obj/item/storage/box/bloodpacks, +/obj/item/storage/box/beakers, +/obj/item/storage/box/masks, +/obj/item/storage/box/syringes, +/obj/item/storage/box/bodybags, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"Eq" = ( +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"Ez" = ( +/obj/structure/hygiene/toilet{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/power/apc/liberia{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/blue{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/toiletroom2) +"ED" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/random/coin, +/obj/item/reagent_containers/glass/beaker/large, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringengines) +"EG" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/dockinghall) +"EQ" = ( +/obj/machinery/alarm/merchant{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/freezer, +/area/liberia/toiletroom2) +"EZ" = ( +/obj/wallframe_spawn/no_grille, +/turf/simulated/floor/plating, +/area/liberia/officeroom) +"Fc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/liberia/solar2) +"Fs" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/personellroom2) +"FZ" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/floor_decal/corner/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"Gd" = ( +/obj/floor_decal/borderfloor{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/corner/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/engineeringlobby) +"Gu" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/maintenance{ + name = "EVA Storage"; + req_access = newlist() + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"Gy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/green/full, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"GE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/catwalk_plated, +/obj/machinery/power/apc/liberia{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/blue{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"GG" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow{ + dir = 10; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/engineeringlobby) +"GP" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/atmos) +"GV" = ( +/obj/structure/janitorialcart, +/obj/item/mop, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/power/apc/liberia{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/blue{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringstorage) +"Ha" = ( +/obj/structure/closet/crate, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/rods/fifty, +/obj/item/stack/material/rods/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/titanium/fifty, +/obj/item/stack/material/ocp/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/fifty, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/plasteel/fifty, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small, +/obj/machinery/power/apc/liberia{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/blue, +/turf/simulated/floor/tiled/steel_ridged, +/area/liberia/engineeringlobby) +"Hl" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"Hm" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/grey, +/obj/structure/largecrate, +/obj/random/loot, +/obj/random/loot, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"Ht" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/bar) +"Hv" = ( +/turf/simulated/wall/prepainted, +/area/liberia/medbay) +"Hw" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"HA" = ( +/obj/floor_decal/borderfloor{ + dir = 9 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/floor_decal/corner/yellow, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"HG" = ( +/obj/machinery/pipedispenser/disposal, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"HM" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/ce, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/submap_landmark/spawnpoint/liberia/security, +/turf/simulated/floor/carpet/blue, +/area/liberia/personellroom1) +"HQ" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"HT" = ( +/obj/floor_decal/corner/blue/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"HV" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/merchantstorage) +"Ig" = ( +/obj/machinery/light, +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"Io" = ( +/obj/machinery/shipsensors, +/obj/structure/cable/blue{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced, +/area/liberia/merchantstorage) +"Iw" = ( +/turf/simulated/wall/prepainted, +/area/liberia/dockinghall) +"Iy" = ( +/obj/paint/silver, +/obj/paint_stripe/yellow, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/wall/r_titanium, +/area/liberia/mule) +"IA" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/engineeringstorage) +"IH" = ( +/obj/floor_decal/techfloor, +/obj/machinery/alarm/merchant{ + dir = 1; + pixel_y = -20 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringengines) +"IQ" = ( +/obj/structure/sign/poster, +/turf/simulated/wall/prepainted, +/area/liberia/bar) +"Ja" = ( +/obj/structure/bed/chair/wood/walnut, +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/floor_decal/corner/green{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"Jf" = ( +/obj/floor_decal/corner/blue/mono, +/turf/simulated/floor/tiled/dark/monotile, +/area/liberia/bridge) +"JE" = ( +/obj/machinery/door/airlock/external{ + autoset_access = 0; + frequency = 1380; + id_tag = "liberia_solar_south_outer"; + locked = 1; + name = "South Liberia Solar External"; + req_access = list("ACCESS_MERCHANT") + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/atmos) +"JI" = ( +/obj/floor_decal/borderfloor/corner, +/obj/floor_decal/corner/green/three_quarters{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"JS" = ( +/obj/machinery/power/apc/liberia{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/blue{ + d2 = 4; + icon_state = "0-4" + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/structure/table/woodentable/walnut, +/turf/simulated/floor/carpet/blue, +/area/liberia/personellroom1) +"Kh" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"Km" = ( +/obj/structure/closet/crate/secure/phoron, +/obj/item/stack/material/phoron/ten, +/obj/item/stack/material/phoron/ten, +/obj/item/stack/material/phoron/ten, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"Kv" = ( +/obj/machinery/fabricator{ + fab_status_flags = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/liberia/engineeringlobby) +"Lh" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar2) +"Lj" = ( +/obj/floor_decal/techfloor{ + dir = 10 + }, +/obj/structure/reagent_dispensers/coolanttank, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringengines) +"Lk" = ( +/obj/floor_decal/solarpanel, +/obj/machinery/power/tracker, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/liberia/solar2) +"Lm" = ( +/turf/simulated/wall/prepainted, +/area/liberia/bridge) +"Lz" = ( +/turf/simulated/wall/prepainted, +/area/liberia/toiletroom2) +"LJ" = ( +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/obj/machinery/radio_beacon, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"LW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"Mj" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/officeroom) +"Ml" = ( +/obj/structure/table/woodentable/walnut, +/obj/item/material/ashtray/glass, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/green{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"Mm" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/structure/undies_wardrobe, +/turf/simulated/floor/carpet/blue, +/area/liberia/personellroom1) +"MU" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"Nk" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1; + icon_state = "spline_fancy" + }, +/turf/simulated/floor/carpet/blue, +/area/liberia/personellroom1) +"Nq" = ( +/obj/floor_decal/spline/fancy/wood/cee{ + dir = 4 + }, +/turf/simulated/floor/carpet/red, +/area/liberia/traidingroom) +"Nt" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar2) +"Nv" = ( +/turf/simulated/wall/prepainted, +/area/liberia/traidingroom) +"Nw" = ( +/obj/floor_decal/techfloor{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"NK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/library) +"Od" = ( +/turf/simulated/wall/prepainted, +/area/liberia/atmos) +"OA" = ( +/turf/simulated/wall/prepainted, +/area/liberia/toiletroom1) +"OC" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar2) +"OT" = ( +/obj/machinery/alarm/merchant{ + dir = 8; + pixel_x = 25 + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/closet/emcloset{ + anchored = 1; + name = "anchored emergency closet" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/cryo) +"Py" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"PG" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 10 + }, +/obj/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"PI" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/library) +"PU" = ( +/obj/floor_decal/borderfloor{ + dir = 4 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/floor_decal/corner/green{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"PW" = ( +/obj/machinery/shipsensors, +/obj/structure/cable/blue{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/industrial/warning/full, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/mule) +"Qi" = ( +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"Qj" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"Qk" = ( +/obj/structure/closet/toolcloset, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/floor_decal/industrial/outline/yellow, +/obj/random/single/color/cable_coil, +/obj/random/bomb_supply, +/turf/simulated/floor/tiled/steel_ridged, +/area/liberia/engineeringlobby) +"Qo" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringstorage) +"QA" = ( +/obj/floor_decal/techfloor, +/obj/machinery/power/apc/liberia{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/blue, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"QE" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id_tag = "merchantshuttle"; + name = "Merchant Window Shutters"; + opacity = 0 + }, +/obj/paint/silver, +/obj/paint_stripe/yellow, +/obj/structure/cable/blue{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/liberia/mule) +"QH" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"QK" = ( +/obj/structure/table/woodentable/walnut, +/obj/floor_decal/borderfloor, +/obj/floor_decal/corner/green{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"QM" = ( +/turf/simulated/wall/prepainted, +/area/liberia/guestroom2) +"Ro" = ( +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"Rw" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/guestroom2) +"Rz" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/corner/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/engineeringlobby) +"RF" = ( +/obj/structure/table/rack/dark, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"RO" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/wood/walnut, +/area/liberia/library) +"Sa" = ( +/turf/simulated/wall/prepainted, +/area/liberia/cryo) +"Se" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/toiletroom1) +"Sm" = ( +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/liberia/solar2) +"St" = ( +/turf/simulated/wall/prepainted, +/area/liberia/officeroom) +"SN" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8; + icon_state = "railing0-1" + }, +/obj/structure/dispenser/oxygen, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringstorage) +"SP" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 8 + }, +/obj/floor_decal/borderfloor{ + dir = 6 + }, +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/atmos) +"SU" = ( +/obj/floor_decal/techfloor, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"SY" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 5 + }, +/obj/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/dockinghall) +"Tg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/library) +"Tz" = ( +/obj/machinery/door/airlock{ + name = "Personnel" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/liberia/personellroom1) +"TB" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/yellow{ + dir = 10; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"TG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"TT" = ( +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/corner, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringreactor) +"Uc" = ( +/obj/floor_decal/corner/blue, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"Ue" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/library) +"Uh" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/bar) +"Um" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"Ut" = ( +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"UV" = ( +/obj/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"Vc" = ( +/obj/structure/cable/blue{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"Vk" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"Vp" = ( +/turf/simulated/wall/prepainted, +/area/liberia/personellroom2) +"Vz" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/liberia/solar2) +"VP" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/green/three_quarters, +/turf/simulated/floor/tiled, +/area/liberia/traidingroom) +"VS" = ( +/obj/machinery/atm{ + pixel_y = -30 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/door/window/northright{ + autoclose = 1; + autoset_access = 0; + name = "ATM Private" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/mule) +"VX" = ( +/obj/floor_decal/solarpanel, +/obj/machinery/power/solar{ + id = "auxsolarsport"; + name = "Aft Port Solar Array" + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/liberia/solar2) +"VZ" = ( +/obj/machinery/door/airlock{ + name = "Toilet"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/freezer, +/area/liberia/toiletroom2) +"Wb" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/walnut, +/area/liberia/library) +"Wn" = ( +/obj/floor_decal/borderfloor{ + dir = 8 + }, +/obj/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"Wr" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"Wx" = ( +/obj/structure/cable/blue{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/borderfloor, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/corner/yellow{ + dir = 5; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/liberia/engineeringlobby) +"WC" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped, +/obj/item/stack/material/wood/yew/twentyfive, +/obj/item/stack/material/wood/walnut/twentyfive, +/obj/item/stack/material/wood/maple/twentyfive, +/obj/item/stack/material/wood/mahogany/ten, +/obj/item/stack/material/wood/fifty, +/obj/item/stack/material/wood/ebony/ten, +/obj/item/stack/material/wood/bamboo/fifty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"WM" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"WS" = ( +/obj/machinery/ion_engine{ + dir = 4 + }, +/turf/simulated/floor/airless, +/area/liberia/captain) +"WW" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/hos, +/obj/submap_landmark/spawnpoint/liberia/security, +/turf/simulated/floor/carpet/blue, +/area/liberia/personellroom1) +"Xe" = ( +/obj/floor_decal/borderfloor{ + dir = 1 + }, +/obj/floor_decal/corner/yellow{ + dir = 10; + icon_state = "corner_white" + }, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"XE" = ( +/obj/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/floor_decal/corner/green/three_quarters, +/turf/simulated/floor/tiled, +/area/liberia/hallway) +"XH" = ( +/obj/structure/cable/blue{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/carpet/blue, +/area/liberia/personellroom1) +"XJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/alarm/merchant{ + dir = 4; + pixel_x = -25 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/structure/table/woodentable/walnut, +/obj/item/device/flashlight/lamp/green, +/turf/simulated/floor/carpet/blue, +/area/liberia/personellroom1) +"XS" = ( +/obj/catwalk_plated, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/liberia/hallway) +"Yt" = ( +/obj/structure/table/rack/dark, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/item/stack/material/glass/reinforced/fifty, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"Yy" = ( +/obj/floor_decal/techfloor{ + dir = 8 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 4 + }, +/obj/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/structure/cable/blue{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/merchantstorage) +"YD" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/techfloor{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/engineeringstorage) +"Zg" = ( +/obj/structure/table/rack/dark, +/obj/random/loot, +/obj/random/loot, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/merchantstorage) +"Zp" = ( +/turf/simulated/wall/r_wall/prepainted, +/area/liberia/traidingroom) +"Zu" = ( +/obj/structure/railing/mapped{ + dir = 4; + icon_state = "railing0-1" + }, +/obj/machinery/pipedispenser, +/turf/simulated/floor/tiled/techfloor/grid, +/area/liberia/engineeringreactor) +"ZB" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/corner/blue/full, +/turf/simulated/floor/tiled/dark, +/area/liberia/bridge) +"ZN" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar2) +"ZO" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/airless, +/area/liberia/solar2) +"ZP" = ( +/obj/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/cryopod{ + dir = 2 + }, +/turf/simulated/floor/tiled/techfloor, +/area/liberia/cryo) + +(1,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(3,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(4,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(5,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(6,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(7,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(8,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(9,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(10,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(11,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(12,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(13,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(14,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(15,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(16,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(17,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(18,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(19,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(20,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(21,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(22,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(23,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(24,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(25,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(26,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(27,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(28,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(29,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(30,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(31,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(32,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(33,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(34,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(35,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(36,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(37,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(38,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(39,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(40,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(41,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(42,1,1) = {" +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +mt +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(43,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(44,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(45,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(46,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(47,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(48,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(49,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(50,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(51,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(52,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(53,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(54,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(55,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(56,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(57,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(58,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(59,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(60,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(61,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(62,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(63,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(64,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(65,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(66,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(67,1,1) = {" +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ex +bC +bC +bC +ex +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 +aa +aa +aa +aa +aa +aa +aa +"} +(68,1,1) = {" +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +bo +bD +cc +cB +bo +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 +aa +aa +aa +aa +aa +aa +aa +"} +(69,1,1) = {" +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +bo +bE +cd +cC +bo +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 +aa +aa +aa +aa +aa +aa +aa +"} +(70,1,1) = {" +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +QE +bF +ce +cD +bo +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 +aa +aa +aa +aa +aa +aa +aa +"} +(71,1,1) = {" +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +PW +Iy +bN +cf +cM +ex +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 +aa +aa +aa +aa +aa +aa +aa +"} +(72,1,1) = {" +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 +aa +aa +iJ +aa +aa +aa +aa +aa +aa +ex +ex +ex +cg +cN +ex +ex +aa +aa +aa +aa +Lk +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 +aa +"} +(73,1,1) = {" +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 +jb +jd +jn +iP +uh +aa +aa +aa +aa +ex +br +bO +ch +cO +dm +ex +aa +aa +oM +OC +Lh +Nt +VX +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 +"} +(74,1,1) = {" +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 +jb +je +jb +iR +uh +aa +aa +aa +ex +ex +bs +bP +cn +cP +dT +ex +ex +aa +oM +ZO +oM +pS +VX +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 +"} +(75,1,1) = {" +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 +jb +je +jb +iR +uh +aa +aa +aa +bb +ex +bt +bQ +co +cQ +dU +ex +bb +aa +oM +ZO +oM +pS +VX +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 +"} +(76,1,1) = {" +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 +jb +je +jb +iR +uh +aa +aa +aa +fl +ex +ex +bR +cp +cR +ex +ex +fl +aa +oM +ZO +oM +pS +VX +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 +"} +(77,1,1) = {" +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 +jb +je +jb +iR +uh +aa +aa +aa +aa +bo +bu +bS +cq +cS +ec +bo +aa +aa +oM +ZO +oM +pS +VX +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 +"} +(78,1,1) = {" +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 +jb +je +jb +iR +uh +aa +aa +aa +aa +bo +bv +bT +cr +cV +ef +bo +aa +aa +oM +ZO +oM +pS +VX +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 +"} +(79,1,1) = {" +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 +jb +je +jb +iR +uh +aa +aa +aa +aa +ex +bw +bU +cs +cU +bw +ex +aa +aa +oM +ZO +oM +pS +VX +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 +"} +(80,1,1) = {" +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 +jb +je +jb +iR +uh +aa +aa +aa +ex +ex +bx +bV +ct +cV +eg +ex +ex +aa +oM +ZO +oM +pS +VX +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 +"} +(81,1,1) = {" +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 +jb +je +jb +iR +uh +aa +aa +aa +kf +ex +by +bV +cu +cV +eh +ex +kf +aa +oM +ZO +oM +pS +VX +nO +ya +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 +"} +(82,1,1) = {" +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 +iy +aK +aK +aK +aK +iy +wD +jb +je +jb +iR +uh +aa +aa +aa +aa +ex +bw +bU +cv +cU +bw +ex +aa +aa +oM +ZO +oM +pS +VX +Fc +Aa +WS +WS +WS +WS +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 +"} +(83,1,1) = {" +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 +iy +iy +iy +iy +iy +iy +vv +jb +je +jb +iR +uh +aa +aa +aa +aa +ex +bz +bW +cw +cV +ep +ex +aa +aa +oM +ZO +oM +pS +VX +Fc +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 +"} +(84,1,1) = {" +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 +iy +aM +ED +ib +Lj +iy +wD +jb +je +jb +iR +uh +aa +aa +aa +aa +ex +bA +bX +cx +cW +VS +ex +aa +aa +oM +ZO +oM +pS +VX +Fc +Aa +gM +hf +no +hC +xc +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 +"} +(85,1,1) = {" +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 +iy +cF +cY +dZ +IH +iy +vv +jb +je +jb +iR +uh +aa +aa +aa +aa +bp +bB +bY +cy +dg +ex +ex +aa +aa +oM +ZO +oM +pS +VX +Fc +Aa +gN +hh +hq +hD +xc +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 +"} +(86,1,1) = {" +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 +iy +aE +da +ea +ik +iy +wD +jb +je +jb +iR +uh +aa +aa +aa +aa +bq +ex +bZ +cz +di +ex +EG +EG +EG +oM +ZO +oM +pS +VX +Fc +Aa +gO +hh +no +hE +xc +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 +"} +(87,1,1) = {" +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 +uX +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +iy +aN +aU +ih +yC +iy +vv +aB +iA +jF +iS +aB +aa +aa +aa +aa +aa +ex +ca +cA +dl +ey +ac +lg +EG +Sm +jh +ZN +ja +Vz +tK +Aa +gP +hi +af +hF +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 +"} +(88,1,1) = {" +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 +iy +iy +iy +iy +ii +iy +iy +IA +IA +IA +tA +iT +ur +aa +aa +aa +aa +aa +ex +ex +ex +ex +ex +EG +lh +EG +GP +JE +vB +Uh +lu +lu +Aa +gQ +Vp +Vp +Vp +Fs +Fs +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 +"} +(89,1,1) = {" +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 +uf +ab +aR +jo +aZ +jq +uf +js +jr +iu +IA +iU +ur +ur +jP +ur +ur +EG +EG +EG +EG +EG +EG +EG +li +Iw +Od +sN +Od +fG +fO +gf +gr +np +Vp +hs +hG +hN +Fs +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 +"} +(90,1,1) = {" +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 +uf +ak +ij +ij +bc +cb +cE +cX +Vc +iv +IA +iW +ur +jG +jR +jY +pa +kk +ks +kB +kB +iD +kB +xr +lj +xn +Od +wq +Od +fH +fP +gg +gs +gS +hj +ht +hH +hO +Fs +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 +"} +(91,1,1) = {" +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 +uf +aq +cK +df +TT +rE +uf +le +Vk +iw +ix +lb +ur +jH +lx +lz +kg +lC +rc +Iw +Iw +Iw +Iw +Iw +Iw +Iw +Od +ic +Od +nQ +fQ +gh +gt +gT +Vp +ag +hI +ah +Fs +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 +"} +(92,1,1) = {" +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 +uf +as +aH +dr +kF +mz +uf +Ei +fX +tU +Py +lc +ur +pa +pa +pa +pa +kl +QA +Iw +kC +kG +eN +kL +ll +kR +BE +id +fz +nQ +fR +gi +gu +gU +IQ +nQ +nQ +nQ +Uh +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 +"} +(93,1,1) = {" +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 +uf +ay +uf +eT +pV +Ig +uf +dc +dd +SN +dP +ld +Rw +jI +ly +jZ +sF +SY +Eq +Iw +dG +aO +eY +pB +lm +eM +hY +ie +fA +nQ +fS +gj +gv +BH +hk +hv +hJ +hQ +Uh +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 +"} +(94,1,1) = {" +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 +uf +az +uf +fy +pV +HG +uf +GV +Vk +Qo +HQ +Hl +Rw +jJ +jU +ka +QM +km +ku +Iw +dK +Hw +kJ +kM +ln +hW +hZ +fp +fB +nQ +fT +vR +gw +gW +bG +hw +hK +hR +Uh +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ao +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 +"} +(95,1,1) = {" +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 +uf +aA +uf +ju +pV +hB +uf +oO +YD +yS +Kh +jt +Rw +QM +QM +QM +QM +kn +BJ +BJ +dx +dk +ej +Br +eC +eO +MU +fq +fC +nQ +fU +gk +gx +gX +mr +hx +hL +hS +Uh +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 +"} +(96,1,1) = {" +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 +uf +uf +uf +wM +pV +Zu +uf +IA +IA +IA +Gu +IA +PI +jK +jW +kb +kh +gR +lB +BJ +dy +dN +ek +eq +eD +eY +fc +fr +Od +nQ +fV +gi +gy +gY +mr +nQ +Uh +Uh +Uh +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 +"} +(97,1,1) = {" +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 +uf +dw +PG +Nw +aV +mo +uo +pJ +Rz +rn +PI +jL +jX +kc +oe +ko +kw +BJ +nD +dM +tR +er +eE +eP +fa +fs +Od +nQ +fW +gl +gz +gZ +hl +hy +Uh +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 +"} +(98,1,1) = {" +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 +uf +fm +wW +in +uf +wt +GG +Bl +Wx +Kv +PI +jM +lB +NK +Ue +kp +kx +BJ +Od +iG +Od +es +eF +eQ +SP +Od +Od +nQ +nQ +tL +gA +nQ +mr +hz +Uh +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 +"} +(99,1,1) = {" +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 +uf +hU +Au +io +uf +Qk +Gd +eZ +dQ +Ha +PI +jN +RO +Wb +oe +kq +ky +BJ +HA +iH +qx +Hv +Hv +Hv +Hv +Hv +kY +lp +Hv +gm +gC +ha +Ht +hA +Uh +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 +"} +(100,1,1) = {" +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 +qj +qj +qj +qj +qj +qj +oN +dz +oN +oN +PI +jO +lB +Tg +ki +kr +kz +BJ +Xe +iI +qx +kN +eG +eR +fd +ft +kZ +lq +lv +oH +ro +nQ +nQ +Uh +Uh +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 +"} +(101,1,1) = {" +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 +kX +HM +JS +XJ +qj +HA +dA +Wn +tz +qx +qx +aW +aY +qx +qx +qx +qx +Xe +iZ +qx +Hv +kQ +kS +kU +la +la +lr +lw +Gy +TG +Ja +Af +Wr +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 +"} +(102,1,1) = {" +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 +kX +Nk +XH +sS +Tz +TB +dO +fk +sQ +mT +dR +ez +eA +eB +fn +fo +hT +ig +lf +el +Hv +eH +eS +kV +fu +lo +ls +Hv +lR +ro +nH +QK +Wr +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 +"} +(103,1,1) = {" +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 +kX +WW +rZ +Mm +qj +FZ +WM +XS +Eb +XS +XS +ar +qm +ci +ci +GE +dn +dB +dS +qx +Hv +Hv +Hv +Hv +Hv +Hv +Hv +Hv +lt +ro +bn +Ml +Wr +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 +"} +(104,1,1) = {" +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 +qj +qj +qj +DI +DI +lD +lD +lD +lD +lD +Nv +bH +cj +Nv +Nv +Nv +Nv +dC +dV +qx +et +eI +qx +fe +fv +fD +fI +qx +ip +ro +Lz +Lz +BC +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 +"} +(105,1,1) = {" +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 +HV +al +jV +to +iB +ae +al +at +aC +lD +be +bI +fF +cG +cZ +Nv +do +dD +dW +em +kO +kO +kT +kW +kO +fE +kO +fY +kO +se +Lz +Ez +BC +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 +"} +(106,1,1) = {" +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 +HV +sJ +Yy +mu +qI +zd +qI +Yy +aD +lD +bf +bJ +fF +cI +os +de +dp +dE +dX +DP +yh +yh +eU +ff +PU +yh +XE +ff +yh +gD +Lz +EQ +BC +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 +"} +(107,1,1) = {" +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 +HV +ck +zQ +kt +qR +ss +BW +zQ +SU +lD +bg +bJ +fF +cI +pZ +de +dp +dF +dY +kK +qx +eJ +Sa +fg +Sa +Sa +ip +LW +pD +OA +Lz +VZ +BC +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 +"} +(108,1,1) = {" +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 +HV +ee +zQ +kt +xT +qg +Hm +ml +aF +aP +bh +bK +cl +cJ +sY +Nv +dq +dF +eb +pf +eu +qx +eV +fh +fw +Sa +lt +fZ +OA +gE +hb +hm +Se +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 +"} +(109,1,1) = {" +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 +HV +ho +qD +au +Yt +Am +op +zQ +aG +aQ +VP +en +fF +Nq +Nv +Nv +Nv +dF +eb +th +ev +qx +eW +fi +fx +Sa +ip +ga +gn +gF +hc +hn +Se +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 +"} +(110,1,1) = {" +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 +HV +HV +jV +Aq +yP +vd +WC +Ut +Qj +lD +bj +fF +fF +fF +fF +rx +ns +DL +hp +JI +ew +qx +eX +fj +oD +Sa +ip +LW +OA +gG +hd +Se +Se +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 +"} +(111,1,1) = {" +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 +HV +hM +yU +qA +QH +Zg +HV +aI +HV +bk +fF +yL +cL +AT +ds +iK +iX +jg +LJ +qx +qx +ZP +fj +oS +Az +rT +LW +OA +gH +he +Se +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 +"} +(112,1,1) = {" +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 +HV +HV +iV +zQ +kt +RF +HV +Io +HV +bl +bM +cm +Lm +Lm +Lm +dH +Lm +Lm +Lm +qx +qx +pX +aX +OT +Az +EZ +gb +St +St +Mj +Se +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 +"} +(113,1,1) = {" +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 +HV +jv +zQ +kt +mO +HV +zt +HV +Zp +Zp +Zp +zq +db +dt +fM +ed +jT +zq +AO +AO +Az +tI +Az +Az +fK +dJ +go +gI +Mj +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 +"} +(114,1,1) = {" +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 +HV +jw +zQ +kt +jy +HV +aa +aa +xG +aa +aa +ps +Um +dh +iL +jB +vi +ps +aa +aa +xG +aa +aa +Mj +fL +gc +gp +gJ +zn +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 +"} +(115,1,1) = {" +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 +HV +Ep +zQ +kt +jA +HV +aa +aa +xG +aa +aa +ps +DK +Jf +ad +lE +ZB +ps +aa +aa +xG +aa +aa +zn +jQ +gd +oF +gK +zn +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 +"} +(116,1,1) = {" +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 +HV +Km +qD +UV +jE +HV +aa +aa +xG +aa +aa +ps +Qi +dI +jx +jC +wK +ps +aa +aa +xG +aa +aa +zn +fN +ge +gq +gL +Mj +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 +"} +(117,1,1) = {" +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 +HV +HV +HV +HV +HV +HV +xG +xG +xG +xG +xG +zq +fJ +dL +jz +jD +eo +zq +xG +xG +xG +xG +xG +Mj +zn +zn +Mj +Mj +Mj +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 +"} +(118,1,1) = {" +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 +aa +aa +aa +aa +aa +aa +aa +aa +ps +Qi +Ro +dv +Ro +wK +ps +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 +aa +aa +aa +aa +aa +aa +aa +"} +(119,1,1) = {" +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 +aa +aa +aa +aa +aa +aa +aa +aa +ps +jS +zl +iN +Uc +HT +ps +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 +aa +aa +aa +aa +aa +aa +aa +"} +(120,1,1) = {" +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 +aa +aa +aa +aa +aa +aa +aa +aa +zq +zq +iz +iO +iY +zq +zq +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 +aa +aa +aa +aa +aa +aa +aa +"} +(121,1,1) = {" +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +zq +bm +bm +bm +zq +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 +aa +aa +aa +aa +aa +aa +aa +aa +"} +(122,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(123,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(124,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(125,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(126,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(127,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(128,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(129,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(130,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(131,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(132,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(133,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(134,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(135,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(136,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(137,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(138,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(139,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(140,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(141,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(142,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(143,1,1) = {" +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 +oo +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 +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 +"} +(144,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(145,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(146,1,1) = {" +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +vw +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 +aa +aa +aa +aa +aa +aa +aa +aa +"} +(147,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(148,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(149,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(150,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(151,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(152,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(153,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(154,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(155,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(156,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(157,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(158,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(159,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(160,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(161,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(162,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(163,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(164,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(165,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(166,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(167,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(168,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(169,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(170,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(171,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(172,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(173,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(174,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(175,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(176,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(177,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(178,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(179,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(180,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(181,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(182,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(183,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(184,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(185,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(186,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(187,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(188,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(189,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(190,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(191,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(192,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(193,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(194,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(195,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(196,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(197,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(198,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(199,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(200,1,1) = {" +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 +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/mods/_maps/sentinel/_map_sentinel.dm b/mods/_maps/sentinel/_map_sentinel.dm new file mode 100644 index 0000000000000..1e09a0be11a76 --- /dev/null +++ b/mods/_maps/sentinel/_map_sentinel.dm @@ -0,0 +1,3 @@ +/singleton/modpack/map_sentinel + name = "Патрульный корабль КФ ЦПСС" + desc = "Авейка, включающая в себя патрульный корабль, принадлежащий к 5 флоту ЦПСС." diff --git a/mods/_maps/sentinel/_map_sentinel.dme b/mods/_maps/sentinel/_map_sentinel.dme new file mode 100644 index 0000000000000..9bd5db068da1e --- /dev/null +++ b/mods/_maps/sentinel/_map_sentinel.dme @@ -0,0 +1,14 @@ +#ifndef MODPACK_MAP_SENTINEL +#define MODPACK_MAP_SENTINEL + +#include "_map_sentinel.dm" +#include "code/sentinel.dm" +#include "code/sentinel_areas.dm" +#include "code/sentinel_crew.dm" +#include "code/sentinel_items.dm" +#include "code/sentinel_presets.dm" +#include "code/sentinel_shuttle.dm" +#include "code/sentinel_structures.dm" +#include "code/sentinel_turbolift.dm" + +#endif diff --git a/mods/_maps/sentinel/code/sentinel.dm b/mods/_maps/sentinel/code/sentinel.dm new file mode 100644 index 0000000000000..55a36d9d0a3b8 --- /dev/null +++ b/mods/_maps/sentinel/code/sentinel.dm @@ -0,0 +1,102 @@ + + /////////// + //OVERMAP// + /////////// + +/obj/overmap/visitable/ship/patrol + name = "SCGF Patrol Craft" + desc = "SCGF Cobra-class Patrol Craft. Seconded to Battlegroup Bravo of Fifth Fleet " + color = "#990000" + fore_dir = WEST + vessel_mass = 1000 + known_ships = list(/obj/overmap/visitable/ship/landable/reaper) + vessel_size = SHIP_SIZE_SMALL + start_x = 1 + start_y = 1 + + initial_generic_waypoints = list( + "nav_patrol_1", + "nav_patrol_2", + "nav_patrol_3", + "nav_patrol_4", + "nav_hangar_reaper" + ) + + initial_restricted_waypoints = list( + "Reaper" = list("nav_hangar_reaper") + ) + + +#define PATROL_SHIP_PREFIX pick("Sentinel","Cavalry","Scarabaeus","Heretic","Apocalypse","Calamatious","Terror","Pandemonium","Anubis","Hound","Stalker","Avatar","Ultimatum","Goliath","Tyrant","Nemesis","Hydra","Stormhawk","Manticore","Basilisk") +/obj/overmap/visitable/ship/patrol/New() + name = "SFV [PATROL_SHIP_PREFIX], \a [name]" + for(var/area/ship/patrol/A) + A.name = "\improper [name] - [A.name]" + GLOB.using_map.area_purity_test_exempt_areas += A.type + ..() +#undef PATROL_SHIP_PREFIX + + +/datum/map_template/ruin/away_site/patrol + name = "Sol Patrol Craft (SFV)" + id = "awaysite_patrol_ship" + description = "Cobra-class Patrol Craft." + prefix = "mods/_maps/sentinel/maps/" + suffixes = list("sentinel-1.dmm", "sentinel-2.dmm") + ban_ruins = list(/datum/map_template/ruin/away_site/farfleet) + spawn_cost = 0.5 + player_cost = 7 + spawn_weight = 1 + shuttles_to_initialise = list(/datum/shuttle/autodock/overmap/reaper) + + area_usage_test_exempted_areas = list( + /area/turbolift/sentinel_first, + /area/turbolift/sentinel_second + ) + +/obj/shuttle_landmark/nav_patrol/nav1 + name = "Patrol Ship Fore" + landmark_tag = "nav_patrol_1" + +/obj/shuttle_landmark/nav_patrol/nav2 + name = "Patrol Ship Aft" + landmark_tag = "nav_patrol_2" + +/obj/shuttle_landmark/nav_patrol/nav3 + name = "Patrol Ship Port" + landmark_tag = "nav_patrol_3" + +/obj/shuttle_landmark/nav_patrol/nav4 + name = "Patrol Ship Starboard" + landmark_tag = "nav_patrol_4" + +/obj/submap_landmark/joinable_submap/patrol + name = "Sol Patrol Ship" + archetype = /singleton/submap_archetype/away_scg_patrol + +/* TCOMMS + * ====== + */ + +/obj/machinery/telecomms/allinone/away_scg_patrol + listening_freqs = list(SFV_FREQ) + channel_color = COMMS_COLOR_CENTCOM + channel_name = "SCG Patrol" + circuitboard = /obj/item/stock_parts/circuitboard/telecomms/allinone/away_scg_patrol + +/obj/item/stock_parts/circuitboard/telecomms/allinone/away_scg_patrol + build_path = /obj/machinery/telecomms/allinone/away_scg_patrol + +/obj/item/device/radio/headset/away_scg_patrol + name = "SCG Patrol headset" + icon_state = "nt_headset" + ks1type = /obj/item/device/encryptionkey/away_scg_patrol + +/obj/item/device/radio/headset/away_scg_patrol/Initialize() + . = ..() + set_frequency(SFV_FREQ) //Not going to be random or just set to the common frequency, but can be set later. + +/obj/item/device/encryptionkey/away_scg_patrol + name = "SCG Patrol radio encryption key" + icon_state = "nt_cypherkey" + channels = list("SCG Patrol" = 1) diff --git a/mods/_maps/sentinel/code/sentinel_areas.dm b/mods/_maps/sentinel/code/sentinel_areas.dm new file mode 100644 index 0000000000000..49859231a27b9 --- /dev/null +++ b/mods/_maps/sentinel/code/sentinel_areas.dm @@ -0,0 +1,238 @@ +/area/ship/patrol + name = "\improper Patrol Ship" + icon_state = "shuttle2" + area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED + +/area/ship/patrol/crew + name = "\improper Crew Section" + icon_state = "crew_quarters" + req_access = list(access_away_cavalry) + +/area/ship/patrol/crew/hallway/lower + name = "\improper Lower Hallway - Center" + req_access = list(access_away_cavalry) + +/area/ship/patrol/crew/hallway/lower/fore + name = "\improper Lower Hallway - Fore" + req_access = list(access_away_cavalry) + +/area/ship/patrol/crew/hallway/lower/aft + name = "\improper Lower Hallway - Aft" + req_access = list(access_away_cavalry) + +/area/ship/patrol/crew/hallway/lower/port + name = "\improper Lower Hallway - Port" + req_access = list(access_away_cavalry) + +/area/ship/patrol/crew/hallway/lower/starboard + name = "\improper Lower Hallway - Starboard" + req_access = list(access_away_cavalry) + +/area/ship/patrol/crew/hallway/upper/starboard + name = "\improper Upper Hallway - Center" + req_access = list(access_away_cavalry) + +/area/ship/patrol/crew/hallway/upper/starboard + name = "\improper Upper Hallway - Starboard" + req_access = list(access_away_cavalry) + + +/area/ship/patrol/crew/kitchen + name = "\improper Galley" + icon_state = "kitchen" + req_access = list(access_away_cavalry) + +/area/ship/patrol/crew/cryo + name = "Cryo Storage" + icon_state = "cryo" + req_access = list(access_away_cavalry) + +/area/ship/patrol/crew/comms + name = "Communication Relay" + req_access = list(access_away_cavalry, access_away_cavalry_commander) + +/area/ship/patrol/crew/toilet + name = "\improper Head" + icon_state = "locker" + req_access = list(access_away_cavalry) + +/area/ship/patrol/crew/cargo + name = "\improper Cargo Hold" + icon_state = "quartstorage" + req_access = list(access_away_cavalry) + +/area/ship/patrol/crew/fitness + name = "\improper Fitness Bay" + icon_state = "green" + req_access = list(access_away_cavalry) + +/area/ship/patrol/crew/brig + name = "\improper Brig Section" + icon_state = "locker" + req_access = list(access_away_cavalry) + +/area/ship/patrol/crew/brig/office + name = "\improper Brig Office" + icon_state = "locker" + req_access = list(access_away_cavalry) + +/area/ship/patrol/crew/brig/emergency_armory + name = "Emergency Armory" + icon_state = "locker" + req_access = list(access_away_cavalry, access_away_cavalry_fleet_armory) + +/area/ship/patrol/engineering/hallway + name = "\improper Engineering Hallway" + icon_state = "green" + req_access = list(access_away_cavalry) + +/area/ship/patrol/engineering/equipment + name = "\improper Engineering Equipment" + icon_state = "green" + req_access = list(access_away_cavalry) + +/area/ship/patrol/engineering/storage + name = "\improper Engineering Storage" + icon_state = "green" + req_access = list(access_away_cavalry) + +/area/ship/patrol/engineering/shield + name = "\improper Shield Generator" + icon_state = "green" + req_access = list(access_away_cavalry) + +/area/ship/patrol/engineering/fussion + name = "\improper Fussion Zone" + icon_state = "red" + req_access = list(access_away_cavalry) + +/area/ship/patrol/engineering/fussion/control + name = "\improper Fussion Control" + icon_state = "green" + req_access = list(access_away_cavalry) + + + + +/area/ship/patrol/barracks + name = "\improper Troops Section" + icon_state = "locker" + req_access = list(access_away_cavalry, access_away_cavalry_ops) + +/area/ship/patrol/barracks/armory + name = "\improper Troops Armory" + icon_state = "locker" + req_access = list(access_away_cavalry, access_away_cavalry_ops, access_away_cavalry_captain) + + + + +/area/ship/patrol/medbay + name = "\improper Medical Bay" + icon_state = "medbay" + req_access = list(access_away_cavalry) + +/area/ship/patrol/medbay/lobby + name = "\improper Medical Bay Lobby" + icon_state = "medbay" + req_access = list(access_away_cavalry) + + + + + +/area/ship/patrol/maintenance/lower + name = "\improper Maintenance Lower Fore" + icon_state = "amaint" + req_access = list(access_away_cavalry) + +/area/ship/patrol/maintenance/lower/starboard + name = "\improper Maintenance Lower Starboard" + icon_state = "amaint" + req_access = list(access_away_cavalry) + +/area/ship/patrol/maintenance/lower/port + name = "\improper Maintenance Lower Port" + icon_state = "amaint" + req_access = list(access_away_cavalry) + +/area/ship/patrol/maintenance/upper + name = "\improper Maintenance Upper Fore" + icon_state = "amaint" + req_access = list(access_away_cavalry) + +/area/ship/patrol/maintenance/upper/aft + name = "\improper Maintenance Upper Aft" + icon_state = "amaint" + req_access = list(access_away_cavalry) + +/area/ship/patrol/maintenance/upper/port + name = "\improper Maintenance Upper Port" + icon_state = "amaint" + req_access = list(access_away_cavalry) + +/area/ship/patrol/maintenance/upper/starboard + name = "\improper Maintenance Upper Starboard" + icon_state = "amaint" + req_access = list(access_away_cavalry) + +/area/ship/patrol/maintenance/upper/munition + name = "\improper Ammunition Storage" + req_access = list(access_away_cavalry) + +/area/ship/patrol/maintenance/upper/waste + name = "\improper Waste Disposal" + req_access = list(access_away_cavalry) + +#define PATROL_ENG_AMBIENCE list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambieng1.ogg') +/area/ship/patrol/maintenance/atmos + name = "\improper Atmospherics Comparment" + icon_state = "atmos" + ambience = PATROL_ENG_AMBIENCE + req_access = list(access_away_cavalry) + +/area/ship/patrol/maintenance/engine + icon_state = "engine" + ambience = PATROL_ENG_AMBIENCE + req_access = list(access_away_cavalry) +#undef PATROL_ENG_AMBIENCE + +/area/ship/patrol/maintenance/engine/port + name = "\improper Port Thruster" + req_access = list(access_away_cavalry) + +/area/ship/patrol/maintenance/engine/starboard + name = "\improper Starboard Thruster" + req_access = list(access_away_cavalry) + + + +/area/ship/patrol/command/bridge + name = "\improper Bridge" + icon_state = "bridge" + req_access = list(access_away_cavalry) + +/area/ship/patrol/command/eva + name = "\improper Fleet EVA" + req_access = list(access_away_cavalry) + +/area/ship/patrol/command/equipment + name = "\improper Fleet Equipment" + req_access = list(access_away_cavalry) + +/area/ship/patrol/command/hangar + name = "\improper Hangar" + icon_state = "purple" + req_access = list(access_away_cavalry) + +/area/ship/patrol/command/cannon + name = "\improper Impulse Cannon" + icon_state = "yellow" + req_access = list(access_away_cavalry) + + + +/area/ship/patrol/dock + name = "\improper Docking Bay" + icon_state = "entry_1" + req_access = list(access_away_cavalry) diff --git a/mods/_maps/sentinel/code/sentinel_crew.dm b/mods/_maps/sentinel/code/sentinel_crew.dm new file mode 100644 index 0000000000000..d919d6b4a7b9d --- /dev/null +++ b/mods/_maps/sentinel/code/sentinel_crew.dm @@ -0,0 +1,476 @@ +#define WEBHOOK_SUBMAP_LOADED_SOL "webhook_submap_sol" + +/obj/submap_landmark/joinable_submap/away_scg_patrol + name = "Patrol Ship" + archetype = /singleton/submap_archetype/away_scg_patrol + +/singleton/submap_archetype/away_scg_patrol + descriptor = "SCGF Patrol Ship" + map = "Patrol Ship" + crew_jobs = list( + /datum/job/submap/patrol/commander, + /datum/job/submap/patrol/pilot1, + /datum/job/submap/patrol, + /datum/job/submap/patrol/captain, + /datum/job/submap/patrol/surgeon, + /datum/job/submap/patrol/engineer + ) + call_webhook = WEBHOOK_SUBMAP_LOADED_SOL + +/obj/submap_landmark/spawnpoint/away_patrol + name = "Army SCGSO Trooper" + movable_flags = MOVABLE_FLAG_EFFECTMOVE + +/obj/submap_landmark/spawnpoint/away_patrol/captain + name = "Army SCGSO Leader" + +/obj/submap_landmark/spawnpoint/away_patrol/commander + name = "Fleet Commander" + +/obj/submap_landmark/spawnpoint/away_patrol/pilot1 + name = "Fleet Pilot" + +/obj/submap_landmark/spawnpoint/away_patrol/surgeon + name = "Fleet Corpsman" + +/obj/submap_landmark/spawnpoint/away_patrol/engineer + name = "Fleet Technician" + +/* ACCESS + * ======= + */ + +var/global/const/access_away_cavalry = "ACCESS_CAVALRY" +var/global/const/access_away_cavalry_fleet_armory = "ACCESS_CAVALRY_EMERG_ARMORY" +var/global/const/access_away_cavalry_ops = "ACCESS_CAVALRY_OPS" +var/global/const/access_away_cavalry_pilot = "ACCESS_CAVALRY_PILOT" +var/global/const/access_away_cavalry_captain = "ACCESS_CAVALRY_CAPTAIN" +var/global/const/access_away_cavalry_commander = "ACCESS_CAVALRY_COMMANDER" + +/datum/access/access_away_cavalry_patrol + id = access_away_cavalry + desc = "SPS Main" + region = ACCESS_REGION_NONE + +/datum/access/access_away_cavalry_ops + id = access_away_cavalry_ops + desc = "SPS Army" + region = ACCESS_REGION_NONE + +/datum/access/access_away_cavalry_captain + id = access_away_cavalry_captain + desc = "SPS Captain" + region = ACCESS_REGION_NONE + +/datum/access/access_away_patrol_commander + id = access_away_cavalry_commander + desc = "SPS Commander" + region = ACCESS_REGION_NONE + +/* JOBS + * ======= + */ + +/datum/job/submap/patrol + title = "Army SCGSO Trooper" + total_positions = 2 + outfit_type = /singleton/hierarchy/outfit/job/patrol/army_ops + allowed_branches = list(/datum/mil_branch/scga) + allowed_ranks = list( + /datum/mil_rank/scga/e4, + /datum/mil_rank/scga/e5 + ) + supervisors = "Army Captain" + loadout_allowed = TRUE + is_semi_antagonist = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая прохладный воздух на своём лице, а также лёгкую тошноту. \ + Являясь одним из членов экипажа патрульного корабля 5-го флота ЦПСС, вы - член группы 'Буря', разведовательных войск СОЦПСС. \ + По данным бортового компьютера, поступал сигнал о неизвестных нападениях в этом регионе.\ + \ + Вам крайне нежелательно приближаться к кораблям и станциям с опозновательными знаками без разрешения от командования группировкой. \ + Исключением являются те ситуации, когда вы терпите бедствие или на вашем судне аварийная ситуация." + required_language = LANGUAGE_HUMAN_EURO + whitelisted_species = list(SPECIES_HUMAN) + min_skill = list(SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC, + SKILL_EVA = SKILL_BASIC) + access = list(access_away_cavalry, access_away_cavalry_ops) + +/datum/job/submap/patrol/captain + title = "Army SCGSO Leader" + total_positions = 1 + outfit_type = /singleton/hierarchy/outfit/job/patrol/captain + minimum_character_age = list(SPECIES_HUMAN = 25) + ideal_character_age = 27 + allowed_branches = list(/datum/mil_branch/scga) + allowed_ranks = list( + /datum/mil_rank/scga/o2, + /datum/mil_rank/scga/o3 + ) + supervisors = "Lieutenant Commander, Command of the Battle Group Bravo of the 5th fleet, SCGDF" + loadout_allowed = TRUE + is_semi_antagonist = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая прохладный воздух на своём лице, а также лёгкую тошноту. \ + Являясь одним из членов соединения, входящего в экипаж патрульного корабля 5-го флота ЦПСС, ваша задача состоит в руководстве группой 'Буря', разведовательных войск СОЦПСС. \ + По данным бортового компьютера, поступал сигнал о неизвестных нападениях в этом регионе.\ + \ + Вам крайне нежелательно приближаться к кораблям и станциям с опозновательными знаками без разрешения от командования группировкой. \ + Исключением являются те ситуации, когда вы терпите бедствие или на вашем судне аварийная ситуация." + required_language = LANGUAGE_HUMAN_EURO + whitelisted_species = list(SPECIES_HUMAN) + min_skill = list( + SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC, + SKILL_EVA = SKILL_BASIC + ) + access = list(access_away_cavalry, access_away_cavalry_ops, access_away_cavalry_fleet_armory, access_away_cavalry_captain) + +/datum/job/submap/patrol/commander + title = "Fleet Commander" + total_positions = 1 + outfit_type = /singleton/hierarchy/outfit/job/patrol/commander + allowed_branches = list(/datum/mil_branch/fleet) + allowed_ranks = list( + /datum/mil_rank/fleet/o3, + /datum/mil_rank/fleet/o4 + ) + supervisors = "Command of the Battle Group Bravo of the 5th fleet, SCGDF" + loadout_allowed = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая прохладный воздух на своём лице, а также лёгкую тошноту. \ + Являясь одним из членов экипажа патрульного корабля 5-го флота ЦПСС, ваша задача состоит в патруле и разведке данного сектора. \ + По данным бортового компьютера, поступал сигнал о неизвестных нападениях в этом регионе.\ + \ + Вам крайне нежелательно приближаться к кораблям и станциям с опозновательными знаками без разрешения от командования группировкой. \ + Исключением являются те ситуации, когда вы терпите бедствие или на вашем судне аварийная ситуация." + min_skill = list( + SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC, + SKILL_PILOT = SKILL_TRAINED, + SKILL_EVA = SKILL_BASIC + ) + access = list(access_away_cavalry, access_away_cavalry_ops, access_away_cavalry_pilot, access_away_cavalry_fleet_armory, access_away_cavalry_commander) + +/datum/job/submap/patrol/pilot1 + title = "Fleet Pilot" + total_positions = 1 + outfit_type = /singleton/hierarchy/outfit/job/patrol/pilot1 + allowed_branches = list(/datum/mil_branch/fleet) + allowed_ranks = list( + /datum/mil_rank/fleet/o1, + /datum/mil_rank/fleet/o2 + ) + supervisors = "Lieutenant Commander" + loadout_allowed = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая прохладный воздух на своём лице, а также лёгкую тошноту. \ + Являясь одним из членов экипажа патрульного корабля 5-го флота ЦПСС, ваша задача состоит в пилотировании и руководством экипажа. \ + По данным бортового компьютера, поступал сигнал о неизвестных нападениях в этом регионе.\ + \ + Вам крайне нежелательно приближаться к кораблям и станциям с опозновательными знаками без разрешения от командования группировкой. \ + Исключением являются те ситуации, когда вы терпите бедствие или на вашем судне аварийная ситуация." + min_skill = list( + SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_BASIC, + SKILL_MEDICAL = SKILL_BASIC, + SKILL_PILOT = SKILL_TRAINED, + SKILL_EVA = SKILL_BASIC + ) + access = list(access_away_cavalry, access_away_cavalry_pilot, access_away_cavalry_fleet_armory) + +/datum/job/submap/patrol/surgeon + title = "Fleet Corpsman" + total_positions = 1 + outfit_type = /singleton/hierarchy/outfit/job/patrol/surgeon + allowed_branches = list(/datum/mil_branch/fleet) + allowed_ranks = list( + /datum/mil_rank/fleet/o1, + /datum/mil_rank/fleet/o2 + ) + supervisors = "Fleet Commander" + loadout_allowed = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая прохладный воздух на своём лице, а также лёгкую тошноту. \ + Являясь одним из членов экипажа патрульного корабля 5-го флота ЦПСС, ваша задача состоит в медицинской поддержке экипажа. \ + \ + Хоть вы и являетесь офицером, в ваши обязанности НЕ входит командование экипажем - это всего лишь показатель вашего профессионализма в медицинской сфере. \ + \ + Вам крайне нежелательно приближаться к кораблям и станциям с опозновательными знаками без разрешения от командования группировкой. \ + Исключением являются те ситуации, когда вы терпите бедствие или на вашем судне аварийная ситуация." + min_skill = list( + SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_TRAINED, + SKILL_MEDICAL = SKILL_EXPERIENCED, + SKILL_ANATOMY = SKILL_BASIC, + SKILL_CHEMISTRY = SKILL_BASIC, + SKILL_EVA = SKILL_BASIC + ) + access = list(access_away_cavalry) + +/datum/job/submap/patrol/engineer + title = "Fleet Technician" + total_positions = 1 + outfit_type = /singleton/hierarchy/outfit/job/patrol/engineer + allowed_branches = list(/datum/mil_branch/fleet) + allowed_ranks = list( + /datum/mil_rank/fleet/e4, + /datum/mil_rank/fleet/e5, + /datum/mil_rank/fleet/e6 + ) + supervisors = "Fleet Commander" + loadout_allowed = TRUE + info = "Вы просыпаетесь и выходите из криосна, ощущая прохладный воздух на своём лице, а также лёгкую тошноту. \ + Являясь одним из членов экипажа патрульного корабля 5-го флота ЦПСС, ваша задача состоит в поддержании работоспособности судна и экипировки экипажа. \ + \ + Вам крайне нежелательно приближаться к кораблям и станциям с опозновательными знаками без разрешения от командования группировкой. \ + Исключением являются те ситуации, когда вы терпите бедствие или на вашем судне аварийная ситуация." + min_skill = list( + SKILL_COMBAT = SKILL_BASIC, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_HAULING = SKILL_TRAINED, + SKILL_MEDICAL = SKILL_BASIC, + SKILL_ATMOS = SKILL_BASIC, + SKILL_ENGINES = SKILL_TRAINED, + SKILL_DEVICES = SKILL_BASIC, + SKILL_EVA = SKILL_TRAINED, + SKILL_ELECTRICAL = SKILL_TRAINED, + SKILL_CONSTRUCTION = SKILL_TRAINED, + ) + access = list(access_away_cavalry) + + +/* BRANCH & RANKS + * ======= + */ + +/datum/mil_branch/fleet + name = "SCG Fleet" + name_short = "SCGF" + email_domain = "fleet.mil" + rank_types = list( + /datum/mil_rank/fleet/e4, + /datum/mil_rank/fleet/e5, + /datum/mil_rank/fleet/e6, + /datum/mil_rank/fleet/o1, + /datum/mil_rank/fleet/o2, + /datum/mil_rank/fleet/o3, + /datum/mil_rank/fleet/o4, + /datum/mil_rank/fleet/o6, + /datum/mil_rank/fleet/o7, + /datum/mil_rank/fleet/o8 + ) + spawn_rank_types = list( + /datum/mil_rank/fleet/e4, + /datum/mil_rank/fleet/e5, + /datum/mil_rank/fleet/e6, + /datum/mil_rank/fleet/o1, + /datum/mil_rank/fleet/o2, + /datum/mil_rank/fleet/o3, + /datum/mil_rank/fleet/o4, + /datum/mil_rank/fleet/o6, + /datum/mil_rank/fleet/o7, + /datum/mil_rank/fleet/o8 + ) + +/datum/mil_rank/grade() + . = ..() + if(!sort_order) + return "" + if(sort_order <= 10) + return "E[sort_order]" + return "O[sort_order - 10]" + +/datum/mil_rank/fleet/e4 + name = "Petty Officer Third Class" + name_short = "PO3" + accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e4, /obj/item/clothing/accessory/solgov/specialty/enlisted) + sort_order = 4 + +/datum/mil_rank/fleet/e5 + name = "Petty Officer Second Class" + name_short = "PO2" + accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e5, /obj/item/clothing/accessory/solgov/specialty/enlisted) + sort_order = 5 + +/datum/mil_rank/fleet/e6 + name = "Petty Officer First Class" + name_short = "PO1" + accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/enlisted/e6, /obj/item/clothing/accessory/solgov/specialty/enlisted) + sort_order = 6 + +/datum/mil_rank/fleet/o1 + name = "Ensign" + name_short = "ENS" + accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/officer, /obj/item/clothing/accessory/solgov/specialty/officer) + sort_order = 11 + +/datum/mil_rank/fleet/o2 + name = "Sub-lieutenant" + name_short = "SLT" + accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/officer/o2, /obj/item/clothing/accessory/solgov/specialty/officer) + sort_order = 12 + +/datum/mil_rank/fleet/o3 + name = "Lieutenant" + name_short = "LT" + accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/officer/o3, /obj/item/clothing/accessory/solgov/specialty/officer) + sort_order = 13 + +/datum/mil_rank/fleet/o4 + name = "Lieutenant Commander" + name_short = "LCDR" + accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/officer/o4, /obj/item/clothing/accessory/solgov/specialty/officer) + sort_order = 14 + +/datum/mil_rank/fleet/o6 + name = "Captain" + name_short = "CAPT" + accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/officer/o6, /obj/item/clothing/accessory/solgov/specialty/officer) + sort_order = 16 + +/datum/mil_rank/fleet/o7 + name = "Commodore" + name_short = "CDRE" + accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/flag, /obj/item/clothing/accessory/solgov/specialty/officer) + sort_order = 17 + +/datum/mil_rank/fleet/o8 + name = "Rear Admiral" + name_short = "RADM" + accessory = list(/obj/item/clothing/accessory/solgov/rank/fleet/flag/o8, /obj/item/clothing/accessory/solgov/specialty/officer) + sort_order = 18 + +/datum/mil_branch/scga + name = "SCG Army" + name_short = "SCGA" + email_domain = "army.mil" + rank_types = list( + /datum/mil_rank/scga/e4, + /datum/mil_rank/scga/e5, + /datum/mil_rank/scga/o2, + /datum/mil_rank/scga/o3 + ) + spawn_rank_types = list( + /datum/mil_rank/scga/e4, + /datum/mil_rank/scga/e5, + /datum/mil_rank/scga/o2, + /datum/mil_rank/scga/o3 + ) + +/datum/mil_rank/scga/e4 + name = "Corporal" + name_short = "Cpl" + accessory = list( + /obj/item/clothing/accessory/scga_rank/e4, + /obj/item/clothing/accessory/scga_badge/enlisted + ) + sort_order = 4 + +/datum/mil_rank/scga/e5 + name = "Sergeant" + name_short = "SGT" + accessory = list( + /obj/item/clothing/accessory/scga_rank/e5, + /obj/item/clothing/accessory/scga_badge/enlisted + ) + sort_order = 5 + +/datum/mil_rank/scga/o2 + name = "First Lieutenant" + name_short = "1Lt" + accessory = list( + /obj/item/clothing/accessory/scga_rank/o2, + /obj/item/clothing/accessory/scga_badge/officer + ) + sort_order = 12 + +/datum/mil_rank/scga/o3 + name = "Captain" + name_short = "CAPT" + accessory = list( + /obj/item/clothing/accessory/scga_rank/o3, + /obj/item/clothing/accessory/scga_badge/officer + ) + sort_order = 13 + +/* OUTFITS + * ======= + */ + +#define PATROL_OUTFIT_JOB_NAME(job_name) ("SCG Patrol Ship - Job - " + job_name) + +/singleton/hierarchy/outfit/job/patrol + hierarchy_type = /singleton/hierarchy/outfit/job/patrol + uniform = /obj/item/clothing/under/solgov/utility/fleet/away_solpatrol + shoes = /obj/item/clothing/shoes/dutyboots + l_ear = /obj/item/device/radio/headset/away_scg_patrol + l_pocket = /obj/item/device/radio + r_pocket = /obj/item/crowbar/prybar + suit_store = /obj/item/tank/oxygen + id_types = list(/obj/item/card/id/awaycavalry/fleet) + id_slot = slot_wear_id + pda_type = null + belt = null + back = /obj/item/storage/backpack/satchel/leather/navy + backpack_contents = null + flags = OUTFIT_EXTENDED_SURVIVAL + +/singleton/hierarchy/outfit/job/patrol/army_ops + name = PATROL_OUTFIT_JOB_NAME("Ops") + head = /obj/item/clothing/head/scga/utility + uniform = /obj/item/clothing/under/scga/utility + id_types = list(/obj/item/card/id/awaycavalry/ops) + gloves = /obj/item/clothing/gloves/thick/combat + +/singleton/hierarchy/outfit/job/patrol/captain + name = PATROL_OUTFIT_JOB_NAME("Captain") + head = /obj/item/clothing/head/scga/utility + uniform = /obj/item/clothing/under/scga/utility + id_types = list(/obj/item/card/id/awaycavalry/ops/captain) + gloves = /obj/item/clothing/gloves/thick/combat + +/singleton/hierarchy/outfit/job/patrol/engineer + name = PATROL_OUTFIT_JOB_NAME("Technician") + uniform = /obj/item/clothing/under/solgov/utility/fleet/engineering/away_solpatrol + belt = /obj/item/storage/belt/holster/security/tactical/away_solpatrol + gloves = /obj/item/clothing/gloves/insulated + +/singleton/hierarchy/outfit/job/patrol/surgeon + name = PATROL_OUTFIT_JOB_NAME("Doctor") + uniform = /obj/item/clothing/under/solgov/utility/fleet/medical/away_solpatrol + belt = /obj/item/storage/belt/holster/security/tactical/away_solpatrol + gloves = /obj/item/clothing/gloves/latex/nitrile + +/singleton/hierarchy/outfit/job/patrol/commander + name = PATROL_OUTFIT_JOB_NAME("Lieutenant Commander") + head = /obj/item/clothing/head/beret/solgov/fleet/branch/fifth + uniform = /obj/item/clothing/under/solgov/utility/fleet/officer/command/commander/away_solpatrol + belt = /obj/item/storage/belt/holster/security/tactical/away_solpatrol + id_types = list(/obj/item/card/id/awaycavalry/fleet/commander) + gloves = /obj/item/clothing/gloves/thick/duty/solgov/cmd + +/singleton/hierarchy/outfit/job/patrol/pilot1 + name = PATROL_OUTFIT_JOB_NAME("Sub-Lieutenant") + head = /obj/item/clothing/head/beret/solgov/fleet/branch/fifth + uniform = /obj/item/clothing/under/solgov/utility/fleet/officer/pilot1/away_solpatrol + belt = /obj/item/storage/belt/holster/security/tactical/away_solpatrol + gloves = /obj/item/clothing/gloves/thick/duty + +/singleton/hierarchy/outfit/job/patrol/fleet_command + name = PATROL_OUTFIT_JOB_NAME("Senior Officer") + head = /obj/item/clothing/head/solgov/dress/fleet/command + uniform = /obj/item/clothing/under/solgov/service/fleet + belt = /obj/item/storage/belt/holster/general/away_solpatrol + shoes = /obj/item/clothing/shoes/dress + suit = /obj/item/clothing/suit/storage/solgov/service/fleet/command/away_solpatrol + r_pocket = /obj/item/card/id/syndicate + id_types = list(/obj/item/card/id/centcom/station) + id_pda_assignment = "5th Fleet Senior Officer" + +#undef PATROL_OUTFIT_JOB_NAME +#undef WEBHOOK_SUBMAP_LOADED_SOL diff --git a/mods/_maps/sentinel/code/sentinel_items.dm b/mods/_maps/sentinel/code/sentinel_items.dm new file mode 100644 index 0000000000000..86c5537b23ad1 --- /dev/null +++ b/mods/_maps/sentinel/code/sentinel_items.dm @@ -0,0 +1,117 @@ + +/* CARDS + * ======== + */ + +/obj/item/card/id/awaycavalry/ops + desc = "An identification card issued to SolGov crewmembers aboard the Sol Patrol Craft." + icon_state = "base" + color = "#b10309c2" + detail_color = "#000000" + access = list(access_away_cavalry, access_away_cavalry_ops) + +/obj/item/card/id/awaycavalry/ops/captain + desc = "An identification card issued to SolGov crewmembers aboard the Sol Patrol Craft." + icon_state = "base" + access = list(access_away_cavalry, access_away_cavalry_ops, access_away_cavalry_fleet_armory, access_away_cavalry_captain) + extra_details = list("goldstripe") + +/obj/item/card/id/awaycavalry/fleet + desc = "An identification card issued to SolGov crewmembers aboard the Sol Patrol Craft." + icon_state = "base" + color = COLOR_GRAY40 + detail_color = "#447ab1" + access = list(access_away_cavalry) + +/obj/item/card/id/awaycavalry/fleet/pilot + access = list(access_away_cavalry, access_away_cavalry_pilot, access_away_cavalry_fleet_armory) + +/obj/item/card/id/awaycavalry/fleet/commander + desc = "An identification card issued to SolGov crewmembers aboard the Sol Patrol Craft." + icon_state = "base" + access = list(access_away_cavalry, access_away_cavalry_ops, access_away_cavalry_pilot, access_away_cavalry_fleet_armory, access_away_cavalry_commander) //TODO: беды с доступами + extra_details = list("goldstripe") + +/* RADIOHEADS + * ======== + */ + +/obj/item/device/radio/headset/rescue + name = "rescue team radio headset" + desc = "The headset of the rescue team member." + icon_state = "com_headset" + item_state = "headset" + ks2type = /obj/item/device/encryptionkey/rescue + +/obj/item/device/radio/headset/rescue/leader + name = "rescue team leader radio headset" + desc = "The headset of the rescue team member." + icon_state = "com_headset" + item_state = "headset" + ks2type = /obj/item/device/encryptionkey/rescue/leader + +/obj/item/device/encryptionkey/rescue //for events + name = "\improper rescue radio encryption key" + icon_state = "cargo_cypherkey" + channels = list("Response Team" = 1) + +/obj/item/device/encryptionkey/rescue/leader + name = "\improper rescue leader radio encryption key" + channels = list("Response Team" = 1, "Command" = 1, ) + +/* CLOTHING + * ======== + */ + +/obj/item/clothing/under/solgov/utility/fleet/officer/pilot1/away_solpatrol + accessories = list( + /obj/item/clothing/accessory/solgov/specialty/pilot, + /obj/item/clothing/accessory/solgov/fleet_patch/fifth + ) + +/obj/item/clothing/under/solgov/utility/fleet/officer/command/commander/away_solpatrol + accessories = list( + /obj/item/clothing/accessory/solgov/department/command/fleet, + /obj/item/clothing/accessory/solgov/specialty/pilot, + /obj/item/clothing/accessory/solgov/fleet_patch/fifth + ) + +/obj/item/clothing/under/solgov/utility/fleet/engineering/away_solpatrol + accessories = list( + /obj/item/clothing/accessory/solgov/department/engineering/fleet, + /obj/item/clothing/accessory/solgov/fleet_patch/fifth + ) + +/obj/item/clothing/under/solgov/utility/fleet/medical/away_solpatrol + accessories = list( + /obj/item/clothing/accessory/solgov/department/medical/fleet, + /obj/item/clothing/accessory/solgov/fleet_patch/fifth + ) + +/obj/item/clothing/under/solgov/utility/fleet/away_solpatrol + accessories = list( + /obj/item/clothing/accessory/solgov/department/command/fleet, + /obj/item/clothing/accessory/solgov/fleet_patch/fifth + ) + +/obj/item/clothing/suit/storage/solgov/service/fleet/command/away_solpatrol + accessories = list( + /obj/item/clothing/accessory/solgov/rank/fleet/officer/o6, + /obj/item/clothing/accessory/solgov/specialty/officer + ) + +/obj/item/storage/belt/holster/security/tactical/away_solpatrol/New() + ..() + new /obj/item/gun/projectile/pistol/m22f(src) + new /obj/item/ammo_magazine/pistol/double(src) + new /obj/item/ammo_magazine/pistol/double(src) + +/obj/item/storage/belt/holster/general/away_solpatrol/New() + ..() + new /obj/item/modular_computer/tablet/preset/custom_loadout/advanced(src) + new /obj/item/gun/projectile/revolver/medium(src) + +/obj/item/clothing/accessory/armband/bluegold/away_solpatrol + name = "SCG armband" + desc = "An armband, worn by the crew to display which country they represent. This one is blue and gold." + icon_state = "solblue" diff --git a/mods/_maps/sentinel/code/sentinel_presets.dm b/mods/_maps/sentinel/code/sentinel_presets.dm new file mode 100644 index 0000000000000..d47ef6df03db7 --- /dev/null +++ b/mods/_maps/sentinel/code/sentinel_presets.dm @@ -0,0 +1,122 @@ + ////////// + //TCOMMS// + ////////// + +/obj/machinery/telecomms/hub/presetsent + id = "Patrol Hub" + network = "senttcommsat" + autolinkers = list("sentHub", "sentrelay", "albrelay", "senttroops", "sentmedical", "sentcommon", "sentcommand", + "receiverSent", "broadcasterSent") + +/obj/machinery/telecomms/relay/preset/sent + id = "Patrol Relay" + network = "senttcommsat" + autolinkers = list("sentrelay") + +/obj/machinery/telecomms/relay/preset/sentalb + id = "Albatross Relay" + network = "senttcommsat" + autolinkers = list("albrelay") + +/obj/machinery/telecomms/receiver/preset_sent + id = "Patrol Receiver" + network = "senttcommsat" + autolinkers = list("receiverSent") + freq_listening = list(ERT_FREQ, MED_FREQ, COMM_FREQ, PUB_FREQ) + +/obj/machinery/telecomms/bus/preset_sent1 + id = "Patrol Bus 1" + network = "senttcommsat" + freq_listening = list(ERT_FREQ, COMM_FREQ) + autolinkers = list("processorsent1", "senttroops", "sentcommand") + +/obj/machinery/telecomms/bus/preset_sent2 + id = "Patrol Bus 2" + network = "senttcommsat" + freq_listening = list(MED_FREQ, PUB_FREQ) + autolinkers = list("processorsent2", "sentmedical", "sentcommon") + +/obj/machinery/telecomms/bus/preset_sent2/New() + for(var/i = PUBLIC_LOW_FREQ, i < PUBLIC_HIGH_FREQ, i += 2) + if(i == PUB_FREQ) + continue + freq_listening |= i + ..() + +/obj/machinery/telecomms/processor/preset_sent1 + id = "Patrol Processor 1" + network = "senttcommsat" + autolinkers = list("processorsent1") + +/obj/machinery/telecomms/processor/preset_sent2 + id = "Patrol Processor 2" + network = "senttcommsat" + autolinkers = list("processorsent2") + +/obj/machinery/telecomms/broadcaster/preset_sent + id = "Patrol Broadcaster" + network = "senttcommsat" + autolinkers = list("broadcasterSent") + +/obj/machinery/telecomms/server/presets/sentinel/common + id = "Patrol Common Server" + freq_listening = list(PUB_FREQ) // AI Private and Common + network = "senttcommsat" + autolinkers = list("sentcommon") + +/obj/machinery/telecomms/server/presets/sentinel/command + id = "Patrol Command Server" + freq_listening = list(COMM_FREQ) + network = "senttcommsat" + autolinkers = list("sentcommand") + +/obj/machinery/telecomms/server/presets/sentinel/troops + id = "Patrol Troops Server" + freq_listening = list(ERT_FREQ) + network = "senttcommsat" + autolinkers = list("senttroops") + +/obj/machinery/telecomms/server/presets/sentinel/medical + id = "Patrol Medical Server" + freq_listening = list(MED_FREQ) + network = "senttcommsat" + autolinkers = list("sentmedical") + + //////// + //SMES// + //////// + +/obj/machinery/power/smes/buildable/preset/patrol/engine_main + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil/super_capacity = 1, + /obj/item/stock_parts/smes_coil = 1) + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE + +/obj/machinery/power/smes/buildable/preset/patrol/engine_gyrotron + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil = 1, + /obj/item/stock_parts/smes_coil/super_io = 1) + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE + +/obj/machinery/power/smes/buildable/preset/patrol/shuttle + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil = 1) + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE + +/obj/machinery/power/smes/buildable/preset/patrol/laser + uncreated_component_parts = list(/obj/item/stock_parts/smes_coil = 1, + /obj/item/stock_parts/smes_coil = 1) + _input_maxed = TRUE + _output_maxed = TRUE + _input_on = TRUE + _output_on = TRUE + _fully_charged = TRUE diff --git a/mods/_maps/sentinel/code/sentinel_shuttle.dm b/mods/_maps/sentinel/code/sentinel_shuttle.dm new file mode 100644 index 0000000000000..4ed4e5a769063 --- /dev/null +++ b/mods/_maps/sentinel/code/sentinel_shuttle.dm @@ -0,0 +1,49 @@ +/datum/shuttle/autodock/overmap/reaper + name = "Reaper Gunboat" + warmup_time = 15 SECONDS + dock_target = "albatross_shuttle" + current_location = "nav_hangar_reaper" + range = 2 + shuttle_area = /area/ship/reaper + defer_initialisation = TRUE + flags = SHUTTLE_FLAGS_PROCESS + skill_needed = SKILL_UNSKILLED + ceiling_type = /turf/simulated/floor/shuttle_ceiling/merc + +/obj/machinery/computer/shuttle_control/explore/away_scg_patrol/reaper + name = "Reaper Shuttle control console" + req_access = list(access_away_cavalry) + shuttle_tag = "Reaper Gunboat" + +/obj/overmap/visitable/ship/landable/reaper + name = "Reaper-G" + desc = "A heavily modified military gunboat of particular design. More of the dropship now, scanner detects heavy alteration to the hull of the vessel and no designation" + shuttle = "Reaper Gunboat" + fore_dir = WEST + color = "#000000" + vessel_mass = 500 + vessel_size = SHIP_SIZE_TINY + +/area/ship/reaper + name = "\improper Reaper" + icon_state = "shuttlered" + base_turf = /turf/simulated/floor + requires_power = 1 + dynamic_lighting = 1 + area_flags = AREA_FLAG_RAD_SHIELDED + +/obj/shuttle_landmark/reaper/start + name = "Dock" + landmark_tag = "nav_hangar_reaper" + base_area = /area/ship/patrol/command/hangar + base_turf = /turf/simulated/floor/plating + movable_flags = MOVABLE_FLAG_EFFECTMOVE + +/obj/shuttle_landmark/reaper/altdock + name = "Docking Port" + landmark_tag = "nav_hangar_reaperalt" + +/obj/shuttle_landmark/reaper/dock + name = "NSV Sierra Dock" + landmark_tag = "nav_reaper_dock" + docking_controller = "nuke_shuttle_dock_airlock" diff --git a/mods/_maps/sentinel/code/sentinel_structures.dm b/mods/_maps/sentinel/code/sentinel_structures.dm new file mode 100644 index 0000000000000..87d56a43f75cd --- /dev/null +++ b/mods/_maps/sentinel/code/sentinel_structures.dm @@ -0,0 +1,356 @@ + /////////////// + //GUNCABINETS// + /////////////// + +/obj/structure/closet/secure_closet/guncabinet/patrol + name = "tempest group cabinet" + req_access = list(access_away_cavalry_captain) + +/obj/structure/closet/secure_closet/guncabinet/patrol/energy/WillContain() + return list( + /obj/item/gun/energy/ionrifle/small = 1, + /obj/item/gun/energy/plasmastun = 1, + /obj/item/gun/energy/laser = 3, + /obj/item/gun/energy/sniperrifle = 1 + ) + +/obj/structure/closet/secure_closet/guncabinet/patrol/assault/WillContain() + return list( + /obj/item/ammo_magazine/mil_rifle/light = 15, + /obj/item/gun/projectile/automatic/bullpup_rifle/light = 3, + /obj/item/ammo_magazine/machine_pistol = 5, + /obj/item/gun/projectile/automatic/machine_pistol = 1 + ) + +/obj/structure/closet/secure_closet/guncabinet/patrol/carabine/WillContain() + return list( + /obj/item/ammo_magazine/mil_rifle/heavy = 5, + /obj/item/gun/projectile/automatic/bullpup_rifle = 1, + /obj/item/clothing/accessory/storage/bandolier = 1, + /obj/item/gun/projectile/shotgun/pump/combat = 1, + /obj/item/gun/projectile/pistol/m22f = 3 + ) + +/obj/structure/closet/secure_closet/guncabinet/patrol/utility/WillContain() + return list( + /obj/item/storage/box/teargas = 1, + /obj/item/storage/box/frags = 1, + /obj/item/storage/box/fragshells = 2, + /obj/item/storage/box/smokes = 2, + /obj/item/storage/box/ammo/flashshells = 2, + /obj/item/storage/box/ammo/shotgunshells = 2, + /obj/item/storage/box/ammo/shotgunammo = 2, + /obj/item/storage/box/ammo/stunshells = 2, + /obj/item/plastique = 6 + ) + + /////////// + //CLOSETS// + /////////// + +/obj/structure/closet/secure_closet/patrol + name = "trooper locker" + closet_appearance = /singleton/closet_appearance/secure_closet/sol/two/dark + req_access = list(access_away_cavalry_ops) + +/obj/structure/closet/secure_closet/patrol/WillContain() + return list( + /obj/item/storage/belt/holster/security/tactical, + /obj/item/melee/telebaton, + /obj/item/clothing/glasses/hud/security/prot/aviators, + /obj/item/clothing/glasses/tacgoggles, + /obj/item/clothing/accessory/storage/black_vest, + /obj/item/clothing/gloves/thick/combat, + /obj/item/device/flashlight/maglight, + /obj/item/storage/firstaid/sleekstab, + /obj/item/clothing/mask/balaclava, + /obj/item/gun/energy/gun, + /obj/item/clothing/accessory/storage/holster/thigh, + /obj/item/clothing/accessory/armor_plate/merc, + /obj/item/clothing/head/helmet/tactical, + /obj/item/storage/backpack/satchel/leather/black + ) + + +/obj/structure/closet/secure_closet/patrol/marine_lead + name = "squad leader locker" + closet_appearance = /singleton/closet_appearance/secure_closet/sol/two/dark + req_access = list(access_away_cavalry_captain) + + +/obj/structure/closet/secure_closet/patrol/marine_lead/WillContain() + return list( + /obj/item/storage/belt/holster/security/tactical, + /obj/item/melee/telebaton, + /obj/item/clothing/glasses/hud/security/prot/aviators, + /obj/item/clothing/glasses/tacgoggles, + /obj/item/clothing/accessory/storage/black_vest, + /obj/item/clothing/gloves/thick/combat, + /obj/item/device/flashlight/maglight, + /obj/item/storage/firstaid/sleekstab, + /obj/item/device/megaphone, + /obj/item/clothing/mask/balaclava, + //obj/item/clothing/accessory/armor/tag/solgov/com, + /obj/item/storage/fancy/smokable/cigar, + /obj/item/flame/lighter/zippo/gunmetal, + /obj/item/clothing/mask/gas/swat, + /obj/item/clothing/gloves/wristwatch, + /obj/item/gun/energy/gun, + /obj/item/clothing/accessory/storage/holster/thigh, + /obj/item/clothing/accessory/armor_plate/merc, + /obj/item/clothing/head/helmet/tactical, + /obj/item/storage/backpack/satchel/leather/black + ) + +/obj/structure/closet/secure_closet/patrol/fleet + name = "fleet pilot cabinet" + closet_appearance = /singleton/closet_appearance/secure_closet/sol + req_access = list(access_away_cavalry) + +/obj/structure/closet/secure_closet/patrol/fleet/WillContain() + return list( + /obj/item/storage/firstaid/sleekstab, + /obj/item/clothing/mask/gas, + /obj/item/clothing/under/solgov/utility/fleet/polopants/command, + /obj/item/clothing/head/solgov/dress/fleet, + /obj/item/clothing/head/beret/solgov/fleet/command, + /obj/item/clothing/accessory/solgov/department/command/fleet, + /obj/item/clothing/suit/storage/solgov/service/fleet/officer + ) + +/obj/structure/closet/secure_closet/patrol/fleet/engi + name = "fleet technician cabinet" + closet_appearance = /singleton/closet_appearance/secure_closet/sol + req_access = list(access_away_cavalry) + +/obj/structure/closet/secure_closet/patrol/fleet/engi/WillContain() + return list( + /obj/item/storage/firstaid/sleekstab, + /obj/item/clothing/mask/gas, + /obj/item/storage/belt/utility/full, + /obj/item/device/multitool, + /obj/item/clothing/glasses/welding/superior, + /obj/item/clothing/head/hardhat/orange, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/head/beret/solgov/fleet/engineering, + /obj/item/clothing/head/solgov/dress/fleet/garrison, + /obj/item/clothing/under/solgov/utility/fleet/polopants, + /obj/item/clothing/accessory/solgov/department/engineering/fleet, + /obj/item/clothing/suit/storage/solgov/service/fleet + ) + +/obj/structure/closet/secure_closet/patrol/fleet/med + name = "fleet corpsman cabinet" + closet_appearance = /singleton/closet_appearance/secure_closet/sol + req_access = list(access_away_cavalry) + +/obj/structure/closet/secure_closet/patrol/fleet/med/WillContain() + return list( + /obj/item/storage/firstaid/sleekstab, + /obj/item/clothing/mask/gas, + /obj/item/storage/belt/medical, + /obj/item/clothing/head/beret/solgov/fleet/medical, + /obj/item/storage/firstaid/adv, + /obj/item/clothing/accessory/stethoscope, + /obj/item/clothing/glasses/hud/health, + /obj/item/clothing/suit/storage/toggle/labcoat, + /obj/item/clothing/gloves/latex/nitrile, + /obj/item/clothing/under/rank/medical/scrubs/black, + /obj/item/clothing/head/surgery/black, + /obj/item/clothing/suit/storage/hazardvest/white, + /obj/item/clothing/head/solgov/dress/fleet, + /obj/item/clothing/under/solgov/utility/fleet/polopants/command, + /obj/item/clothing/accessory/solgov/department/medical/fleet, + /obj/item/clothing/suit/storage/solgov/service/fleet/officer + ) + +/obj/structure/closet/secure_closet/patrol/fleet_com + name = "fleet commander cabinet" + closet_appearance = /singleton/closet_appearance/secure_closet/sol + req_access = list(access_away_cavalry, access_away_cavalry_commander) + +/obj/structure/closet/secure_closet/patrol/fleet_com/WillContain() + return list( + /obj/item/melee/telebaton, + /obj/item/gun/projectile/pistol/m22f, + /obj/item/device/megaphone, + //obj/item/clothing/accessory/armor/tag/solgov/com, + /obj/item/clothing/mask/gas, + /obj/item/storage/chewables/rollable/rollingkit, + /obj/item/storage/fancy/smokable/cigar, + /obj/item/flame/lighter/zippo/gunmetal, + /obj/item/clothing/head/beret/solgov/fleet/command, + /obj/item/clothing/under/solgov/utility/fleet/polopants/command, + /obj/item/gun/projectile/revolver/medium, + /obj/item/clothing/gloves/wristwatch/gold, + /obj/item/clothing/head/solgov/dress/fleet, + /obj/item/clothing/accessory/solgov/department/command/fleet, + /obj/item/clothing/suit/storage/solgov/service/fleet/officer + ) + + +/obj/structure/closet/wardrobe/patrol + name = "military attire closet" + closet_appearance = /singleton/closet_appearance/tactical + + +/obj/structure/closet/wardrobe/patrol/desert + name = "desert attire closet" + closet_appearance = /singleton/closet_appearance/tactical + +/obj/structure/closet/wardrobe/patrol/desert/WillContain() + return list( + /obj/item/clothing/under/scga/utility/tan = 3, + /obj/item/clothing/head/scga/utility/tan = 3, + /obj/item/clothing/shoes/tactical = 3, + /obj/item/clothing/gloves/thick/combat = 3 + ) + +/obj/structure/closet/wardrobe/patrol/army + name = "woodland attire closet" + closet_appearance = /singleton/closet_appearance/tactical + +/obj/structure/closet/wardrobe/patrol/army/WillContain() + return list( + /obj/item/clothing/under/scga/utility = 3, + /obj/item/clothing/head/scga/utility = 3, + /obj/item/clothing/shoes/scga/utility = 3, + /obj/item/clothing/gloves/thick/combat = 3 + ) + +/obj/structure/closet/wardrobe/patrol/urban + name = "urban attire closet" + closet_appearance = /singleton/closet_appearance/tactical + +/obj/structure/closet/wardrobe/patrol/urban/WillContain() + return list( + /obj/item/clothing/under/solgov/utility = 3, + /obj/item/clothing/head/solgov/utility = 3, + /obj/item/clothing/shoes/dutyboots = 3, + /obj/item/clothing/gloves/thick/combat = 3 + ) + + //////// + //MISC// + //////// + +/obj/machinery/door/airlock/autoname/command + req_access = list(access_away_cavalry) + +/obj/machinery/door/airlock/autoname/engineering + req_access = list(access_away_cavalry) + +/obj/machinery/door/airlock/autoname/marine + req_access = list(access_away_cavalry) + +/obj/machinery/vending/away_solpatrol_uniform + name = "Fleet uniform dispenser" + desc = "A specialized vending machine with nice and fresh navy-blue clothing inside. For military personnel only." + icon = 'mods/_maps/sentinel/icons/fleet_vendomat.dmi' + icon_state = "uniform_fleet" + icon_deny = "uniform_fleet-deny" + icon_vend = "uniform_fleet-vend" + req_access = list(access_away_cavalry) + products = list(/obj/item/clothing/head/beret/solgov/fleet/branch/fifth = 5, + /obj/item/clothing/head/soft/solgov/fleet = 5, + /obj/item/clothing/head/ushanka/solgov/fleet = 5, + /obj/item/clothing/under/solgov/utility/fleet = 5, + /obj/item/clothing/under/solgov/utility/fleet/combat = 5, + /obj/item/clothing/under/solgov/service/fleet = 5, + /obj/item/clothing/under/solgov/pt/fleet = 5, + /obj/item/clothing/suit/storage/hooded/wintercoat/solgov/fleet = 5, + /obj/item/clothing/shoes/dutyboots = 5, + /obj/item/clothing/shoes/dress = 5, + /obj/item/clothing/shoes/black = 5, + /obj/item/clothing/gloves/thick = 5, + /obj/item/storage/belt/holster/security = 5, + /obj/item/storage/backpack/satchel/leather/navy = 5, + /obj/item/clothing/accessory/storage/black_drop = 5, + /obj/item/clothing/accessory/solgov/fleet_patch/fifth = 5, + ) +/* Voidsuit Storage Unit + * ==== + */ + +/obj/machinery/suit_storage_unit/away_cavalry_med + name = "Corpsman Voidsuit Storage Unit" + suit= /obj/item/clothing/suit/space/void/medical/alt/sol/prepared + boots = /obj/item/clothing/shoes/magboots + tank = /obj/item/tank/oxygen + req_access = list(access_away_cavalry) + islocked = 1 + +/obj/machinery/suit_storage_unit/away_cavalry_eng + name = "Technician Voidsuit Storage Unit" + suit= /obj/item/clothing/suit/space/void/engineering/alt/sol/prepared + boots = /obj/item/clothing/shoes/magboots + tank = /obj/item/tank/oxygen + req_access = list(access_away_cavalry) + islocked = 1 + +/obj/machinery/suit_storage_unit/away_cavalry_com + name = "Officer Voidsuit Storage Unit" + suit= /obj/item/clothing/suit/space/void/command/prepared + boots = /obj/item/clothing/shoes/magboots + tank = /obj/item/tank/oxygen + req_access = list(access_away_cavalry, access_away_cavalry_commander) + islocked = 1 + +/obj/machinery/suit_storage_unit/away_cavalry_fly + name = "Pilot Voidsuit Storage Unit" + suit= /obj/item/clothing/suit/space/void/pilot/sol/prepared + boots = /obj/item/clothing/shoes/magboots + tank = /obj/item/tank/oxygen + req_access = list(access_away_cavalry) + islocked = 1 + +// BOSNIAN ARTILLERY SECTION // + +/obj/machinery/computer/ship/disperser/military + name = "impulse cannon control" + +/obj/item/stock_parts/circuitboard/disperser/military + name = "circuit board (impulse cannon control)" + build_path = /obj/machinery/computer/ship/disperser/military + origin_tech = list(TECH_ENGINEERING = 6, TECH_COMBAT = 6, TECH_BLUESPACE = 6) + +/obj/structure/ship_munition/disperser_charge/fire/military + name = "M1050-NPLM" + desc = "A charge to power the military impulse gun. This charge is designed to release a localised fire on impact." + chargedesc = "NPLM" + +/obj/structure/ship_munition/disperser_charge/fire/military/fire(turf/target, strength, range, shield_active_EM, shield_active_KTC) + if(shield_active_EM && shield_active_KTC) + return + var/datum/reagent/napalm/napalm_liquid = new /datum/reagent/napalm + napalm_liquid.volume = 5 * strength + for(var/atom/A in view(range, target)) + if(ismob(A)) + napalm_liquid.touch_mob(A, 10 * strength) + if(isturf(A)) + napalm_liquid.touch_turf(A, TRUE) + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread + s.set_up(3, 1, target) + addtimer(CALLBACK(s, TYPE_PROC_REF(/datum/effect, start)), 0.1 SECONDS | TIMER_STOPPABLE) + +/obj/structure/ship_munition/disperser_charge/emp/military + name = "M850-EM" + desc = "A charge to power the military impulse gun. This charge is designed to release a blast of electromagnetic pulse on impact." + chargedesc = "EMS" + +/obj/structure/ship_munition/disperser_charge/emp/military/fire(turf/target, strength, range, shield_active_EM, shield_active_KTC) + var/shield_mod = 1 + if(shield_active_EM) + shield_mod = 0.5 + empulse(target, strength * range / 2 * shield_mod , strength * range * 1.5 * shield_mod) + +/obj/structure/ship_munition/disperser_charge/explosive/military + name = "M950-HE" + desc = "A charge to power the military impulse gun. This charge is designed to explode on impact." + chargedesc = "HES" + +/obj/structure/ship_munition/disperser_charge/explosive/military/fire(turf/target, strength, range, shield_active_EM, shield_active_KTC) + var/shield_mod = 1 + if(shield_active_KTC) + shield_mod = 0.75 + explosion(target,max(1,strength * range / 8 * shield_mod),strength * range / 6 * shield_mod,strength * range / 4 * shield_mod) diff --git a/mods/_maps/sentinel/code/sentinel_turbolift.dm b/mods/_maps/sentinel/code/sentinel_turbolift.dm new file mode 100644 index 0000000000000..09adbd5777b33 --- /dev/null +++ b/mods/_maps/sentinel/code/sentinel_turbolift.dm @@ -0,0 +1,25 @@ +/obj/turbolift_map_holder/sentinel + name = "Sentinel turbolift map placeholder" + icon = 'icons/obj/structures/turbolift_preview_2x2.dmi' + depth = 2 + lift_size_x = 3 + lift_size_y = 3 + + areas_to_use = list( + /area/turbolift/sentinel_first, + /area/turbolift/sentinel_second + ) + +/area/turbolift/sentinel_second + name = "lift (upper deck)" + lift_floor_label = "Deck 1" + lift_floor_name = "Crew Deck" + lift_announce_str = "Arriving at Crew Deck: Секция гаупвахты. Секция экипажа. Столовая. Капсулы криосна. Туалет." + base_turf = /turf/simulated/floor + +/area/turbolift/sentinel_first + name = "lift (lower deck)" + lift_floor_label = "Deck 2" + lift_floor_name = "Utility Deck" + lift_announce_str = "Arriving at Utility Deck: Мостик. Ангар. Атмосферный отсек. Реактор R-UST. Личное снаряжение. Отсек EVA. Секция Пехоты. Ракетный отсек. Медбей." + base_turf = /turf/simulated/floor diff --git a/mods/_maps/sentinel/icons/fleet_vendomat.dmi b/mods/_maps/sentinel/icons/fleet_vendomat.dmi new file mode 100644 index 0000000000000..65bccef0950f6 Binary files /dev/null and b/mods/_maps/sentinel/icons/fleet_vendomat.dmi differ diff --git a/mods/_maps/sentinel/maps/sentinel-1.dmm b/mods/_maps/sentinel/maps/sentinel-1.dmm new file mode 100644 index 0000000000000..0bcef473cc9c2 --- /dev/null +++ b/mods/_maps/sentinel/maps/sentinel-1.dmm @@ -0,0 +1,24537 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/space, +/area/space) +"ab" = ( +/obj/shuttle_landmark/nav_patrol/nav4, +/turf/space, +/area/space) +"ae" = ( +/obj/shuttle_landmark/nav_patrol/nav2, +/turf/space, +/area/space) +"af" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/cargo) +"ag" = ( +/obj/paint/meatstation/lab, +/obj/structure/sign/fifthfleet, +/turf/simulated/wall/r_wall, +/area/ship/patrol/dock) +"ai" = ( +/obj/floor_decal/industrial/warning/half, +/obj/machinery/shield_diffuser, +/obj/machinery/door/blast/regular{ + id_tag = "patrol_main_airlock_blast"; + name = "Protective Blast Doors" + }, +/obj/machinery/door/airlock/external/bolted/cycling{ + name = "Docking Port Airlock"; + id_tag = "patrol_dock_airlock_outer" + }, +/turf/simulated/floor, +/area/ship/patrol/dock) +"aj" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/atmos) +"ak" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/starboard) +"al" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/eva) +"am" = ( +/obj/floor_decal/industrial/warning{ + dir = 9; + icon_state = "warning" + }, +/obj/structure/catwalk, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor, +/area/ship/patrol/dock) +"an" = ( +/obj/floor_decal/industrial/warning{ + dir = 5; + icon_state = "warning" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "patrol_dock_airlock_pump" + }, +/turf/simulated/floor, +/area/ship/patrol/dock) +"ao" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/decal/cleanable/dirt, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor, +/area/ship/patrol/dock) +"ap" = ( +/obj/structure/table/reinforced, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + display_name = "Port Patrol Dock"; + id_tag = "patrol_dock_airlock"; + pixel_x = 1; + pixel_y = -5; + req_access = list("ACCESS_CAVALRY"); + tag_chamber_sensor = "patrol_dock_airlock_sensor"; + tag_exterior_door = "patrol_dock_airlock_outer"; + tag_interior_door = "patrol_dock_airlock_inner"; + tag_airpump = "patrol_dock_airlock_pump" + }, +/obj/structure/sign/double/solgovflag/left{ + dir = 8; + pixel_x = 32 + }, +/obj/item/device/radio/intercom{ + pixel_x = -8; + pixel_y = 20 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the observation shutters"; + id_tag = "patrol_main_airlock_blast"; + name = "Main Airlock Lockdown"; + pixel_x = 8; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/dock) +"ar" = ( +/obj/floor_decal/industrial/warning{ + dir = 10; + icon_state = "warning" + }, +/obj/machinery/airlock_sensor{ + id_tag = "patrol_dock_airlock_sensor"; + pixel_x = -24; + master_tag = "patrol_dock_airlock" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/airlock{ + id_tag = "patrol_dock_airlock_pump"; + dir = 4 + }, +/turf/simulated/floor, +/area/ship/patrol/dock) +"as" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/ship/patrol/dock) +"at" = ( +/obj/structure/cable, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/decal/cleanable/dirt, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor, +/area/ship/patrol/dock) +"au" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/sign/double/solgovflag/right{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/dock) +"av" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 6 + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/atmos) +"aw" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/portables_connector, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"ax" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/door/window/southright, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"ay" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/door/window/southleft, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"az" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/tank/air, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/patrol/maintenance/atmos) +"aA" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 10 + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/atmos) +"aB" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + frequency = 1442; + icon_state = "map_injector"; + id = "co2_in"; + use_power = 1 + }, +/obj/floor_decal/corner/black/half{ + dir = 1 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/ship/patrol/maintenance/atmos) +"aC" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "co2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/floor_decal/corner/black/half{ + dir = 1 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/ship/patrol/maintenance/atmos) +"aD" = ( +/obj/floor_decal/corner/mauve/half{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/outlet_injector{ + frequency = 1442; + icon_state = "map_injector"; + id = "h2_in"; + use_power = 1 + }, +/turf/simulated/floor/reinforced/hydrogen, +/area/ship/patrol/maintenance/atmos) +"aF" = ( +/obj/floor_decal/corner/mauve/half{ + dir = 1 + }, +/turf/simulated/floor/reinforced/hydrogen, +/area/ship/patrol/maintenance/atmos) +"aG" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "h2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/floor_decal/corner/mauve/half{ + dir = 1 + }, +/turf/simulated/floor/reinforced/hydrogen, +/area/ship/patrol/maintenance/atmos) +"aH" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"aI" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"aJ" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate, +/obj/random/tank, +/obj/random/smokes, +/obj/random/smokes, +/obj/random/soap, +/obj/random/junk, +/obj/random/junk, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"aK" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/tech_supply, +/obj/random/powercell, +/obj/random/powercell, +/obj/random/junk, +/obj/random/junk, +/obj/random/technology_scanner, +/obj/random/technology_scanner, +/obj/random/bomb_supply, +/obj/random/bomb_supply, +/obj/random/bomb_supply, +/obj/random/bomb_supply, +/obj/random/advdevice, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"aL" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/freezer/rations, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/item/storage/box/latexgloves, +/obj/item/storage/box/nitrilegloves, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"aM" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 23; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"aN" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/medical, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/medical/lite, +/obj/random/medical, +/obj/random/medical, +/obj/random/medical, +/obj/random/firstaid, +/obj/random/firstaid, +/obj/random/drinkbottle, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"aO" = ( +/obj/floor_decal/industrial/warning/half, +/obj/machinery/door/airlock/external/bolted/cycling{ + name = "Docking Port Airlock"; + id_tag = "patrol_dock_airlock_inner" + }, +/turf/simulated/floor, +/area/ship/patrol/dock) +"aP" = ( +/obj/floor_decal/industrial/warning/half, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/airlock/external/bolted/cycling{ + name = "Docking Port Airlock"; + id_tag = "patrol_dock_airlock_inner" + }, +/turf/simulated/floor, +/area/ship/patrol/dock) +"aQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/sign/warning/high_voltage{ + pixel_x = -32 + }, +/obj/machinery/door/airlock/glass/sol{ + name = "Primary Docking Port Control" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/dock) +"aR" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 4; + frequency = 1442; + icon_state = "map_injector"; + id = "o2_in"; + use_power = 1 + }, +/obj/floor_decal/corner/blue/half{ + dir = 8 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/ship/patrol/maintenance/atmos) +"aS" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 9 + }, +/obj/machinery/meter, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"aT" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"aU" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"aV" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"aW" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"aX" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 4 + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/atmos) +"aY" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/meter, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"aZ" = ( +/obj/machinery/meter, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"ba" = ( +/obj/structure/sign/warning/compressed_gas, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/atmos) +"bb" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bc" = ( +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bd" = ( +/obj/paint/dark_gunmetal, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/atmos) +"be" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/fuel, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bf" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"bg" = ( +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"bh" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"bi" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/trashcart, +/obj/random/action_figure, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/junk, +/obj/random/accessory, +/obj/random/contraband, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"bj" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/dock) +"bk" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/sign/warning/airlock{ + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"bl" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/floor_decal/corner/brown{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"bm" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light{ + dir = 1; + icon_state = "tube1" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"bn" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"bo" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 4; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "o2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/floor_decal/corner/blue/half{ + dir = 8 + }, +/turf/simulated/floor/reinforced/oxygen, +/area/ship/patrol/maintenance/atmos) +"bp" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/meter, +/obj/wallframe_spawn/reinforced_phoron, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bq" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"br" = ( +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 1; + target_pressure = 40 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bs" = ( +/obj/machinery/atmospherics/binary/pump/on, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bt" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/floor_decal/corner/blue/diagonal, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bu" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 5 + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/maintenance/atmos) +"bv" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bw" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/pump, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bx" = ( +/obj/machinery/light{ + dir = 1; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"by" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/atmospherics/omni/filter{ + tag_east = 2; + tag_north = 8; + tag_south = 1; + tag_west = 5 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bz" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bA" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bB" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bC" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/fuel{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bD" = ( +/obj/machinery/alarm/server{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/dispenser/oxygen, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/eva) +"bE" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/suit_storage_unit/away_cavalry_com, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/eva) +"bF" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/suit_storage_unit/away_cavalry_fly, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/eva) +"bG" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/suit_storage_unit/away_cavalry_med, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/eva) +"bH" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 22 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/suit_storage_unit/away_cavalry_eng, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/eva) +"bI" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate, +/obj/random/voidhelmet, +/obj/random/voidsuit, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 0; + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"bJ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"bK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/port) +"bL" = ( +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"bM" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"bN" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"bO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/dock) +"bP" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/corner/brown{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"bQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/floor_decal/corner/brown{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"bR" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"bS" = ( +/obj/structure/dispenser/oxygen, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"bT" = ( +/obj/machinery/atmospherics/omni/mixer{ + active_power_usage = 7500; + tag_east = 2; + tag_east_con = null; + tag_north = 1; + tag_north_con = 0.21; + tag_south = 1; + tag_south_con = 0.79; + tag_west_con = null + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bU" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bW" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/floor_decal/corner/red/diagonal{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bX" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 6 + }, +/obj/machinery/door/firedoor, +/obj/structure/sign/warning/nosmoking_1{ + pixel_y = 32 + }, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bY" = ( +/obj/machinery/atmospherics/omni/filter{ + tag_east = 2; + tag_north = 3; + tag_south = 1; + tag_west = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"bZ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"ca" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"cb" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 9 + }, +/obj/structure/closet/crate/internals/fuel, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"cc" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"cd" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"ce" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"cf" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + target_pressure = 3500 + }, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"cg" = ( +/obj/machinery/light/small{ + dir = 8; + icon_state = "bulb1" + }, +/obj/machinery/atmospherics/pipe/manifold/visible/black{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/engine/starboard) +"ch" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/obj/machinery/power/apc/critical{ + dir = 1; + name = "north bump"; + pixel_y = 23; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/engine/starboard) +"ci" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 8 + }, +/obj/paint/red, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/starboard) +"cj" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/airless, +/area/ship/patrol/maintenance/engine/starboard) +"cl" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/eva) +"cm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/command/eva) +"cq" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/command/eva) +"cr" = ( +/obj/machinery/door/firedoor, +/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/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/sol{ + name = "Fleet EVA" + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/eva) +"cs" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"ct" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"cu" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/cargo) +"cv" = ( +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/floor_decal/corner/brown{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/cargo) +"cw" = ( +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/floor_decal/corner/brown{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/cargo) +"cx" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/dock) +"cy" = ( +/obj/floor_decal/corner/brown{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"cz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/floor_decal/corner/brown{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"cA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"cB" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"cC" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 4; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + id_tag = "n2_out"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/floor_decal/corner/red/half{ + dir = 8 + }, +/turf/simulated/floor/reinforced/nitrogen, +/area/ship/patrol/maintenance/atmos) +"cD" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"cE" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"cF" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"cG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"cH" = ( +/obj/machinery/door/airlock/glass/atmos{ + name = "Atmospherics" + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/binary/pump/high_power/on{ + dir = 4; + target_pressure = 15000 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/atmos) +"cI" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"cJ" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"cK" = ( +/obj/decal/cleanable/dirt, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"cM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/obj/decal/cleanable/dirt, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"cN" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"cO" = ( +/obj/machinery/door/airlock/atmos{ + name = "Starboard Engine"; + secured_wires = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/atmos) +"cP" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/engine/starboard) +"cQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/engine/starboard) +"cR" = ( +/obj/structure/table/standard, +/obj/machinery/recharger/wallcharger{ + dir = 4; + pixel_x = -24; + pixel_y = -2 + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/tape_roll, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/turf/simulated/floor/tiled, +/area/ship/patrol/command/eva) +"cS" = ( +/obj/item/stack/material/plastic/fifty, +/obj/item/stack/material/aluminium/fifty, +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/eva) +"cT" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -28 + }, +/obj/structure/table/rack, +/obj/item/stack/material/ocp/fifty, +/obj/item/stack/material/glass/boron_reinforced/ten, +/obj/item/stack/material/plasteel/fifty, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/eva) +"cU" = ( +/obj/machinery/light, +/obj/structure/table/rack, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/eva) +"cV" = ( +/obj/machinery/power/apc/super/critical{ + dir = 4; + name = "east bump"; + pixel_x = 25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable, +/obj/structure/extinguisher_cabinet{ + pixel_y = -21; + dir = 1 + }, +/obj/structure/table/rack, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/item/stack/material/glass/reinforced/fifty, +/obj/item/stack/material/glass/fifty, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/eva) +"cW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/chem_disp_cartridge/ethanol, +/obj/item/reagent_containers/chem_disp_cartridge/sodium, +/obj/item/reagent_containers/chem_disp_cartridge/potassium, +/obj/item/reagent_containers/chem_disp_cartridge/ammonia, +/obj/item/reagent_containers/chem_disp_cartridge/acetone, +/obj/item/reagent_containers/chem_disp_cartridge/silicon, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"cX" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"cY" = ( +/obj/floor_decal/industrial/hatch/yellow, +/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/light, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"cZ" = ( +/obj/floor_decal/industrial/hatch/yellow, +/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/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"da" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/corner/brown{ + dir = 4 + }, +/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 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/cargo) +"db" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/corner/brown{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/cargo) +"dc" = ( +/obj/floor_decal/industrial/warning, +/obj/floor_decal/corner/brown{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/cargo) +"dd" = ( +/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/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/cargo) +"de" = ( +/obj/machinery/door/firedoor, +/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/door/airlock/multi_tile/glass/sol{ + name = "Main Hallway"; + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/dock) +"df" = ( +/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 = 9 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/corner/brown{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"dg" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/industrial/warning{ + dir = 6; + icon_state = "warning" + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -28 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"dh" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"di" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 4; + frequency = 1442; + icon_state = "map_injector"; + id = "n2_in"; + use_power = 1 + }, +/obj/floor_decal/corner/red/half{ + dir = 8 + }, +/turf/simulated/floor/reinforced/nitrogen, +/area/ship/patrol/maintenance/atmos) +"dk" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/unary/tank/air{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/patrol/maintenance/atmos) +"dl" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dm" = ( +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/up/supply{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 16; + d2 = 0; + icon_state = "16-0" + }, +/obj/structure/cable, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/door/window/westleft, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dn" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/atmos) +"do" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 9 + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/maintenance/atmos) +"dp" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dq" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/decal/cleanable/dirt, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dr" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/helium, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dt" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/maintenance/atmos) +"du" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dv" = ( +/obj/machinery/door/airlock/glass/atmos{ + name = "Atmospherics" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/atmos) +"dw" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dx" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/obj/decal/cleanable/dirt, +/obj/machinery/atmospherics/binary/pump, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/engine/starboard) +"dy" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/engine/starboard) +"dz" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/crew/cargo) +"dA" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/glass/sol{ + name = "Main Hallway" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"dB" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/cargo) +"dC" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/floor_decal/corner/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"dD" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/atmos{ + name = "Atmospherics" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/atmos) +"dE" = ( +/obj/machinery/pipedispenser/disposal, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dF" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible/red, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dG" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dH" = ( +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dI" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dJ" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/atmospherics/unary/heater{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dK" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dL" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/atmospherics/unary/heater{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"dM" = ( +/obj/machinery/light/small{ + dir = 8; + icon_state = "bulb1" + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/engine/starboard) +"dN" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/sign/warning/nosmoking_1{ + pixel_x = 32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/engine/starboard) +"dO" = ( +/obj/paint/red, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/hangar) +"dQ" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/lower) +"dS" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/decal/cleanable/dirt, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/lower) +"dT" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/lower) +"dU" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/lower) +"dV" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/starboard) +"dW" = ( +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/floor_decal/corner/brown{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/starboard) +"dX" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "bridgep_lock"; + name = "Bridge Lockdown blast doors" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/paint/dark_gunmetal, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/patrol/command/bridge) +"dY" = ( +/obj/machinery/power/apc/critical{ + dir = 1; + name = "north bump"; + pixel_y = 23 + }, +/obj/structure/table/steel_reinforced, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/photocopier/faxmachine{ + send_access = list(); + department = "Sol 5th Fleet Patrol Craft" + }, +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"dZ" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the observation shutters"; + id_tag = "bridgep_lock"; + name = "Bridge Lockdown"; + pixel_x = -6; + pixel_y = 24 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the observation shutters"; + id_tag = "sensorslockp"; + name = "Sensors Protection Switch"; + pixel_x = 6; + pixel_y = 24 + }, +/obj/machinery/button/alternate/door/bolts{ + id_tag = "cannon"; + name = "Impulse Cannon bolts"; + pixel_x = 6; + pixel_y = 34; + req_access = list("ACCESS_CAVALRY_PILOT") + }, +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"ea" = ( +/obj/structure/closet/crate/bin, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/command/bridge) +"eb" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"ec" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"ed" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"ee" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/sign/warning/secure_area{ + pixel_y = 32 + }, +/obj/structure/table/standard, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"ef" = ( +/obj/machinery/pipedispenser, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"eg" = ( +/obj/structure/cable, +/obj/machinery/power/apc/super/critical{ + name = "south bump"; + pixel_y = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"eh" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/tank{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"ei" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"ej" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"ek" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/structure/catwalk, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"el" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/maintenance{ + name = "Starboard Engine" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/engine/starboard) +"eo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"ep" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/ship_munition/disperser_charge/emp/military, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"eq" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/ship_munition/disperser_charge/emp/military, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"es" = ( +/obj/structure/catwalk, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/lower) +"et" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/hallway/lower/starboard) +"eu" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/crew/hallway/lower/starboard) +"ev" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/corner/brown{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/starboard) +"ew" = ( +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/floor_decal/corner/brown{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/starboard) +"ex" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/bridge) +"ey" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/command/bridge) +"ez" = ( +/obj/machinery/fabricator/hacked{ + desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; + name = "Unlocked Autolathe" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"eA" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/warning{ + dir = 9; + icon_state = "warning" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"eB" = ( +/obj/decal/cleanable/dirt, +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/structure/table/standard, +/obj/item/storage/toolbox/mechanical, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"eC" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/door/airlock/glass/maintenance{ + name = "Port Engine" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/engine/port) +"eD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"eE" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"eF" = ( +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/pointdefense{ + initial_id_tag = "patrol_pd" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"eH" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 0; + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"eI" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"eJ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/storage/bible, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"eK" = ( +/obj/decal/cleanable/dirt, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/lower) +"eL" = ( +/turf/simulated/floor, +/area/ship/patrol/crew/hallway/lower/starboard) +"eM" = ( +/obj/structure/flora/pottedplant/decorative, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/starboard) +"eN" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/corner/brown{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/starboard) +"eO" = ( +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/floor_decal/corner/brown{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/starboard) +"eP" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "bridgep_lock"; + name = "Bridge Lockdown blast doors" + }, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "bridgep_lock"; + name = "Bridge Lockdown blast doors" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/bridge) +"eQ" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/computer/ship/sensors{ + dir = 4 + }, +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"eR" = ( +/obj/floor_decal/icarus_scglogo{ + dir = 8; + icon_state = "top-right" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"eS" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"eT" = ( +/obj/floor_decal/corner/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"eU" = ( +/obj/floor_decal/icarus_scglogo{ + dir = 8; + icon_state = "bottom-left" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"eV" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "bridgep_lock"; + name = "Bridge Lockdown blast doors" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/command/bridge) +"eW" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"eX" = ( +/obj/structure/table/standard, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/glass/fifty{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/stack/material/aluminium/fifty, +/obj/item/stack/material/plastic/fifty, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"eY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/decal/cleanable/dirt, +/obj/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"eZ" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"fa" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/command/hangar) +"fb" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"fc" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"fd" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/spot{ + dir = 1; + icon_state = "tube1" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"fe" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"ff" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"fg" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 1; + icon_state = "tube1" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"fh" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"fj" = ( +/obj/decal/cleanable/dirt, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/lower) +"fk" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/starboard) +"fl" = ( +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/starboard) +"fm" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/corner/brown{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/starboard) +"fn" = ( +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/floor_decal/corner/brown{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/starboard) +"fo" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "bridgep_lock"; + name = "Bridge Lockdown blast doors" + }, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/patrol/command/bridge) +"fp" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/table/steel_reinforced, +/obj/item/folder/blue, +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"fq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/icarus_scglogo{ + dir = 8; + icon_state = "bottom-center" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"fr" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/icarus_scglogo{ + dir = 8 + }, +/obj/overmap/visitable/ship/patrol, +/obj/machinery/hologram/holopad/longrange, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"fs" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/icarus_scglogo{ + dir = 8; + icon_state = "top-center" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"ft" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"fu" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "bridgep_lock"; + name = "Bridge Lockdown blast doors" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/door/airlock/multi_tile/glass/command{ + name = "Bridge"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/command/bridge) +"fv" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/table/steel, +/obj/floor_decal/corner/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"fw" = ( +/obj/structure/table/standard, +/obj/machinery/recharger, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"fx" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"fy" = ( +/obj/floor_decal/industrial/warning{ + dir = 6; + icon_state = "warning" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"fz" = ( +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor, +/area/ship/patrol/command/hangar) +"fA" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"fB" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/full, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"fC" = ( +/obj/item/caution/cone, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"fD" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"fE" = ( +/obj/paint/black, +/turf/simulated/wall/r_titanium, +/area/ship/reaper) +"fF" = ( +/obj/machinery/ion_engine{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"fG" = ( +/obj/decal/cleanable/dirt, +/obj/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"fH" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"fI" = ( +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"fL" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/lower) +"fM" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/starboard) +"fN" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/corner/blue/three_quarters, +/obj/machinery/radio_beacon, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"fO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/icarus_scglogo{ + dir = 8; + icon_state = "bottom-right" + }, +/obj/floor_decal/corner/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"fP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/icarus_scglogo{ + dir = 8; + icon_state = "center-right" + }, +/obj/structure/bed/chair/comfy/black, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"fQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/icarus_scglogo{ + dir = 8; + icon_state = "top-left" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"fS" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "bridgep_lock"; + name = "Bridge Lockdown blast doors" + }, +/obj/wallframe_spawn/reinforced, +/obj/structure/cable, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/patrol/command/bridge) +"fT" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/bed/chair/padded/black{ + dir = 1 + }, +/obj/floor_decal/corner/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"fU" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"fV" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/decal/cleanable/dirt, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"fW" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/flora/pottedplant/bamboo, +/obj/structure/sign/warning/smoking{ + pixel_x = 29 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/maintenance/lower/starboard) +"fY" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"fZ" = ( +/obj/floor_decal/industrial/warning/full, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/machinery/porta_turret{ + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"ga" = ( +/obj/machinery/sleeper, +/obj/floor_decal/corner/paleblue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/reaper) +"gb" = ( +/obj/floor_decal/corner/paleblue{ + dir = 5 + }, +/obj/structure/roller_bed, +/turf/simulated/floor/tiled/white, +/area/ship/reaper) +"gc" = ( +/obj/item/storage/firstaid/fire{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/firstaid/regular, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/structure/table/rack, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/o2{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/reaper) +"ge" = ( +/obj/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"gf" = ( +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"gg" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, +/obj/structure/ship_munition/disperser_charge/explosive/military, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"gh" = ( +/obj/paint/meatstation/lab, +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/cannon) +"gi" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/lower) +"gj" = ( +/obj/turbolift_map_holder/sentinel{ + dir = 4; + icon_state = "" + }, +/turf/simulated/floor, +/area/ship/patrol/crew/hallway/lower/starboard) +"gk" = ( +/obj/machinery/door/firedoor, +/obj/structure/sign/deck/second{ + pixel_x = -32 + }, +/obj/machinery/door/airlock/multi_tile/glass/sol{ + name = "Main Hallway" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/lower/starboard) +"gl" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/lower/starboard) +"gm" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -20 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/corner/blue/three_quarters, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"gn" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/computer/modular/preset/civilian{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/blue{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"go" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"gp" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/machinery/pointdefense_control{ + initial_id_tag = "patrol_pd" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/blue/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"gr" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"gs" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/maintenance/lower/starboard) +"gt" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/sol{ + name = "Technical Storage" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/maintenance/lower/starboard) +"gu" = ( +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor, +/area/ship/patrol/maintenance/lower/starboard) +"gv" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"gw" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/full, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"gx" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/recharger/wallcharger{ + pixel_y = 24 + }, +/obj/structure/table/rack, +/obj/item/storage/briefcase/inflatable, +/turf/simulated/floor, +/area/ship/reaper) +"gy" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/recharger/wallcharger{ + pixel_y = 24 + }, +/obj/structure/table/rack, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/turf/simulated/floor, +/area/ship/reaper) +"gz" = ( +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -15 + }, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/corner/paleblue{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/reaper) +"gA" = ( +/obj/floor_decal/industrial/warning, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/ship/reaper) +"gB" = ( +/obj/item/bodybag/cryobag, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/corner/paleblue{ + dir = 4 + }, +/obj/structure/closet/crate/medical, +/turf/simulated/floor/tiled/white, +/area/ship/reaper) +"gD" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/red, +/obj/structure/closet/bombcloset, +/obj/structure/sign/warning/bomb_range{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"gE" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/warning/full, +/obj/structure/sign/warning/pods{ + dir = 1; + pixel_x = -32 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"gF" = ( +/obj/floor_decal/corner/grey_alt, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"gG" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"gH" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"gI" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "bridgep_lock"; + name = "Bridge Lockdown blast doors" + }, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/patrol/command/bridge) +"gJ" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/bridge) +"gK" = ( +/obj/structure/closet/emcloset, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"gL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"gM" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/hydrant, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"gN" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/sign/fifthfleet{ + pixel_x = -32 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"gO" = ( +/obj/machinery/computer/ship/sensors, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the observation shutters"; + dir = 4; + id_tag = "reaper_window_lock"; + name = "Window Blast Doors control"; + pixel_x = -24; + pixel_y = 6 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the observation shutters"; + dir = 4; + id_tag = "reaper_rear_hatch_lock"; + name = "Reaper Rear Hatch Lock"; + pixel_x = -24; + pixel_y = -6 + }, +/obj/machinery/turretid{ + check_access = 0; + check_anomalies = 0; + check_arrest = 0; + check_records = 0; + name = "Reaper turret control panel"; + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/reaper) +"gP" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/reaper) +"gQ" = ( +/obj/structure/catwalk, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"gR" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/turf/simulated/floor/plating, +/area/ship/reaper) +"gS" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Storage" + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"gT" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/plating, +/area/ship/reaper) +"gV" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"gW" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"gX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/highsecurity/bolted{ + id_tag = "cannon"; + name = "Impulse Cannon" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"gY" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable, +/obj/structure/cable, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"gZ" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/sign/warning/moving_parts{ + dir = 4; + pixel_x = -34 + }, +/obj/structure/ship_munition/disperser_charge/explosive/military, +/obj/structure/ship_munition/disperser_charge/explosive/military, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"ha" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/ship_munition/disperser_charge/explosive/military, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"hc" = ( +/obj/structure/ship_munition/disperser_charge/fire/military, +/obj/floor_decal/industrial/outline/orange, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"hd" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/cannon) +"hf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"hg" = ( +/obj/floor_decal/corner/red, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"hh" = ( +/obj/floor_decal/corner/red, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"hi" = ( +/obj/floor_decal/corner/red, +/obj/machinery/light{ + dir = 1; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"hj" = ( +/obj/floor_decal/corner/red, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 23; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"hk" = ( +/obj/floor_decal/corner/red, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"hl" = ( +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"hm" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/lower/fore) +"hn" = ( +/obj/floor_decal/corner/grey_alt, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"ho" = ( +/obj/floor_decal/corner/grey_alt, +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"hp" = ( +/obj/structure/sign/directions/bridge{ + dir = 4; + pixel_x = 32; + pixel_y = 28 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"hq" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/lower/aft) +"hr" = ( +/obj/floor_decal/corner/blue, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"hs" = ( +/obj/floor_decal/corner/blue, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"ht" = ( +/obj/floor_decal/corner/blue, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"hu" = ( +/obj/floor_decal/corner/blue, +/obj/structure/sign/directions/bridge{ + dir = 1; + pixel_y = 28 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"hv" = ( +/obj/floor_decal/corner/blue, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"hw" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"hy" = ( +/obj/floor_decal/corner/blue, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"hz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/blue, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"hA" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"hB" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/hangar) +"hC" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"hD" = ( +/obj/machinery/door/firedoor, +/obj/paint/black, +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "reaper_window_lock"; + name = "Reaper Window Blast Doors" + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"hE" = ( +/obj/machinery/computer/ship/helm{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/reaper) +"hF" = ( +/obj/structure/bed/chair/shuttle/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"hG" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/bed/chair/shuttle/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"hH" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/overmap/visitable/ship/landable/reaper, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"hI" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"hJ" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/super/critical{ + dir = 4; + name = "east bump"; + pixel_x = 25; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"hK" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"hL" = ( +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/floor_decal/industrial/warning, +/obj/machinery/light/small/red{ + name = "light fixture"; + dir = 1 + }, +/obj/machinery/disperser/middle{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/command/cannon) +"hM" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/cannon) +"hN" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "bsap" + }, +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/floor_decal/industrial/warning, +/obj/machinery/disperser/back{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/ship/patrol/command/cannon) +"hO" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "bsap" + }, +/obj/structure/plasticflaps/airtight, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id_tag = "bsap_space"; + name = "Cannon Compartment Hatch"; + opacity = 0 + }, +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/command/cannon) +"hP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/conveyor{ + dir = 8; + id = "bsap" + }, +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/command/cannon) +"hQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"hR" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"hS" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/obj/machinery/door/airlock/highsecurity/bolted{ + id_tag = "cannon"; + name = "Impulse Cannon" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"hT" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"hU" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/paleblue{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"hV" = ( +/obj/floor_decal/corner/paleblue{ + dir = 1 + }, +/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, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"hW" = ( +/obj/floor_decal/corner/paleblue{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"hX" = ( +/obj/floor_decal/corner/paleblue{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/sign/bluecross_2{ + pixel_x = 32; + pixel_y = -32 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"hY" = ( +/obj/floor_decal/corner/paleblue{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"hZ" = ( +/obj/floor_decal/corner/paleblue{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"ia" = ( +/obj/floor_decal/corner/paleblue{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"ib" = ( +/obj/floor_decal/corner/paleblue{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/fore) +"ic" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/glass/sol{ + name = "Main Hallway"; + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/lower/fore) +"id" = ( +/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, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"ie" = ( +/obj/floor_decal/corner/grey_alt, +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"if" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"ig" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"ih" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/glass/sol{ + name = "Main Hallway"; + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/lower/aft) +"ii" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"ij" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/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, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"ik" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"il" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"im" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"in" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"io" = ( +/obj/machinery/door/firedoor, +/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/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/lower/aft) +"ip" = ( +/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/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"iq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/light, +/obj/floor_decal/corner/blue{ + dir = 1 + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"ir" = ( +/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/floor_decal/corner/blue{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"is" = ( +/obj/machinery/door/firedoor, +/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/door/airlock/multi_tile/sol{ + name = "Dropship Hangar"; + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/hangar) +"it" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"iu" = ( +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"iv" = ( +/obj/machinery/computer/shuttle_control/explore/away_scg_patrol/reaper{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/reaper) +"ix" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 6 + }, +/obj/structure/bed/chair/shuttle/black, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"iy" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/bed/chair/shuttle/black, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"iz" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"iA" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"iB" = ( +/obj/structure/handrail, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/oxygen_pump{ + pixel_y = 32 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "patrol_shuttle_pump" + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"iC" = ( +/obj/machinery/airlock_sensor{ + frequency = 1380; + id_tag = "patrol_shuttle_sensor"; + pixel_x = 27; + pixel_y = 6 + }, +/obj/structure/handrail, +/obj/machinery/oxygen_pump{ + pixel_y = 32 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "patrol_shuttle_pump" + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"iD" = ( +/obj/paint/meatstation/lab, +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/cannon) +"iE" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/sign/warning/vacuum{ + dir = 4; + pixel_x = -34 + }, +/obj/structure/ship_munition/disperser_charge/emp/military, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"iF" = ( +/obj/floor_decal/industrial/loading{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"iG" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/medbay) +"iH" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/glass/medical{ + name = "Infirmary" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/patrol/medbay) +"iI" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/patrol/medbay) +"iJ" = ( +/obj/paint/dark_gunmetal, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/patrol/medbay) +"iK" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/crew/hallway/lower/fore) +"iL" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/hallway/lower/fore) +"iM" = ( +/obj/structure/ladder/up, +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/warning/full, +/obj/structure/sign/warning/pods{ + dir = 1; + pixel_x = -32 + }, +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -28 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"iN" = ( +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"iO" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"iP" = ( +/obj/structure/flora/pottedplant{ + icon_state = "plant-26" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/alarm{ + alarm_id = "xenobio3_alarm"; + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"iQ" = ( +/obj/paint/black, +/turf/simulated/wall/r_wall, +/area/ship/patrol/barracks) +"iR" = ( +/obj/paint/black, +/turf/simulated/wall/r_wall, +/area/ship/patrol/engineering/equipment) +"iS" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/engineering/equipment) +"iT" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/equipment) +"iU" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/engineering{ + name = "Engineering Bay" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/engineering/equipment) +"iV" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/engineering/shield) +"iW" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/sign/solgov{ + pixel_x = -32 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"iX" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/computer/ship/engines{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/reaper) +"iY" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"iZ" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/turf/simulated/floor/plating, +/area/ship/reaper) +"ja" = ( +/obj/machinery/light, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"jb" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"jc" = ( +/obj/structure/catwalk, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"jd" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/access_button/airlock_interior{ + frequency = 1380; + master_tag = "albatross_shuttle"; + pixel_x = 24; + pixel_y = -24 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"je" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external{ + frequency = 1380; + id_tag = "patrol_shuttle_inner"; + name = "Reaper External Access" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/reaper) +"jf" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"jg" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 1; + frequency = 1380; + id_tag = "albatross_shuttle"; + pixel_y = -24; + req_access = list("ACCESS_CAVALRY"); + tag_airpump = "patrol_shuttle_pump"; + tag_chamber_sensor = "patrol_shuttle_sensor"; + tag_exterior_door = "patrol_shuttle_outer"; + tag_interior_door = "patrol_shuttle_inner" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"jh" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external{ + frequency = 1380; + id_tag = "patrol_shuttle_outer"; + name = "Reaper External Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "reaper_rear_hatch_lock"; + name = "Reaper Rear Hatch" + }, +/obj/machinery/access_button/airlock_exterior{ + frequency = 1380; + master_tag = "albatross_shuttle"; + pixel_x = 6; + pixel_y = 25 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/reaper) +"ji" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/shuttle_landmark/reaper/start, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"jj" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"jk" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/medbay) +"jl" = ( +/obj/floor_decal/industrial/warning/full, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"jm" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"jn" = ( +/obj/floor_decal/industrial/warning/full, +/obj/machinery/atmospherics/unary/freezer{ + icon_state = "freezer" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"jo" = ( +/obj/floor_decal/corner/pink{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"jq" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/structure/table/standard, +/obj/item/clothing/gloves/latex, +/obj/item/storage/box/beakers, +/obj/item/clothing/glasses/science, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"jr" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/machinery/chemical_dispenser/full, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"js" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/equipment) +"jt" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/away_solpatrol_uniform, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/command/equipment) +"ju" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/hallway/lower/port) +"jv" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/glass/sol{ + name = "Main Hallway" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/lower/port) +"jw" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/lower/port) +"jx" = ( +/obj/structure/flora/pottedplant/aquatic, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/light{ + dir = 1; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"jy" = ( +/obj/structure/sign/double/solgovflag/left{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"jz" = ( +/obj/structure/sign/double/solgovflag/right{ + pixel_y = 32 + }, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/folder/red, +/obj/item/storage/photo_album, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"jA" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -24; + dir = 4 + }, +/obj/structure/closet/crate/secure/phoron, +/obj/item/stack/material/phoron/ten, +/obj/item/stack/material/phoron/ten, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/engineering/equipment) +"jB" = ( +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/equipment) +"jC" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/equipment) +"jD" = ( +/obj/machinery/door/airlock/engineering{ + name = "Shield Generator" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/engineering/shield) +"jE" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/shield) +"jF" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/critical{ + dir = 1; + name = "north bump"; + pixel_y = 23; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/shield) +"jG" = ( +/obj/machinery/power/shield_generator, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/shield) +"jH" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/extinguisher_cabinet{ + pixel_x = -24; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"jI" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/empty, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor, +/area/ship/reaper) +"jJ" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/turf/simulated/floor, +/area/ship/reaper) +"jK" = ( +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"jL" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"jM" = ( +/obj/machinery/power/terminal, +/obj/structure/cable, +/obj/structure/table/rack, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/item/shuttle_beacon, +/obj/item/shuttle_beacon, +/obj/item/clothing/head/helmet/solgov/pilot/fleet, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"jN" = ( +/obj/structure/sign/solgov, +/obj/paint/red, +/turf/simulated/wall/r_titanium, +/area/ship/reaper) +"jO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"jP" = ( +/obj/floor_decal/corner/pink{ + dir = 9 + }, +/obj/structure/iv_stand, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"jQ" = ( +/obj/structure/table/standard, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/item/storage/box/masks, +/obj/item/storage/box/freezer, +/obj/item/storage/box/latexgloves, +/obj/machinery/vending/wallmed1{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/machinery/atmospherics/binary/pump/on, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"jR" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"jS" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"jT" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/corner/pink{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"jU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/pink{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"jV" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"jW" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/bed/chair/office/comfy/blue, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"jX" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/command/equipment) +"jY" = ( +/obj/structure/table/rack, +/obj/item/device/flashlight/upgraded, +/obj/item/device/flashlight/upgraded, +/obj/item/device/flashlight/upgraded, +/obj/item/device/flashlight/upgraded, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/command/equipment) +"jZ" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/equipment) +"ka" = ( +/obj/floor_decal/corner/red, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/port) +"kb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/port) +"kc" = ( +/obj/machinery/computer/cryopod{ + pixel_y = 32 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/floor_decal/corner/red/full, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"kd" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/submap_landmark/spawnpoint/away_patrol/captain, +/obj/floor_decal/corner/black, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"ke" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/corner/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"kf" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/critical{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/wardrobe/patrol/urban, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"kg" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/engineering/equipment) +"kh" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/equipment) +"ki" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/sign/warning/high_voltage{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/equipment) +"kj" = ( +/obj/machinery/recharge_station, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"kk" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/mech_recharger, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"kl" = ( +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/power/smes/buildable/preset/patrol/shuttle, +/turf/simulated/floor/plating, +/area/ship/reaper) +"km" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"kn" = ( +/obj/structure/table/standard, +/obj/floor_decal/industrial/warning{ + dir = 10; + icon_state = "warning" + }, +/obj/machinery/cell_charger, +/obj/item/reagent_containers/glass/beaker/cryoxadone, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"ko" = ( +/obj/floor_decal/industrial/warning, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"kp" = ( +/obj/floor_decal/industrial/warning{ + dir = 6; + icon_state = "warning" + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"kq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/pink{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"kr" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/machinery/smartfridge/secure/medbay{ + dir = 1; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"ks" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/structure/window/reinforced, +/obj/floor_decal/industrial/warning, +/obj/machinery/chem_master, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"kt" = ( +/obj/structure/window/reinforced, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/structure/table/standard, +/obj/item/hand_labeler, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/command/equipment) +"ku" = ( +/obj/item/stool/padded, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/equipment) +"kv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/power/apc/super/critical{ + dir = 4; + name = "east bump"; + pixel_x = 25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/equipment) +"kw" = ( +/obj/floor_decal/corner/red, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/port) +"kx" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/port) +"ky" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/wallframe_spawn/reinforced, +/obj/paint/black, +/turf/simulated/floor/plating, +/area/ship/patrol/barracks) +"kz" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/floor_decal/corner/green/full, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"kA" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/submap_landmark/spawnpoint/away_patrol, +/obj/floor_decal/corner/black{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"kB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/black{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"kC" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/wardrobe/patrol/desert, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"kD" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/electrical, +/obj/structure/table/rack, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/engineering/equipment) +"kE" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/equipment) +"kF" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/engineering/storage) +"kG" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/machinery/power/apc/critical{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/storage) +"kH" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/inflatable_dispenser, +/obj/item/storage/briefcase/inflatable, +/obj/item/storage/briefcase/inflatable, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/storage) +"kI" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/item/stack/material/glass/fifty{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/plastic/fifty, +/obj/structure/table/rack, +/obj/item/stack/material/aluminium/fifty, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/storage) +"kJ" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"kL" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"kM" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/structure/curtain/medical, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"kN" = ( +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"kO" = ( +/obj/machinery/bodyscanner{ + dir = 8 + }, +/obj/floor_decal/corner/pink/mono, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/patrol/medbay) +"kP" = ( +/obj/machinery/body_scanconsole{ + dir = 8 + }, +/obj/floor_decal/corner/pink{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"kQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"kR" = ( +/obj/floor_decal/corner/pink{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"kS" = ( +/obj/structure/table/rack, +/obj/item/defibrillator/loaded, +/obj/floor_decal/corner/pink/mono, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/patrol/medbay) +"kT" = ( +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/closet/secure_closet/patrol/fleet/med, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/equipment) +"kU" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/equipment) +"kV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/equipment) +"kW" = ( +/obj/floor_decal/corner/red, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/port) +"kX" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/port) +"kY" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/floor_decal/corner/green/full, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"kZ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/submap_landmark/spawnpoint/away_patrol, +/obj/floor_decal/corner/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"la" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/floor_decal/corner/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"lb" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/wardrobe/patrol/army, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"lc" = ( +/obj/machinery/vending/engivend{ + dir = 4; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/engineering/equipment) +"ld" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/equipment) +"le" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/equipment) +"lf" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass/engineering{ + name = "Engineering Storage" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/engineering/storage) +"lg" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/storage) +"lh" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/storage) +"li" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/item/stack/material/plasteel/fifty{ + pixel_x = -3; + pixel_y = 4 + }, +/obj/item/stack/material/ocp/fifty, +/obj/item/stack/material/wood/maple/twentyfive, +/obj/item/stack/material/wood/maple/twentyfive, +/obj/item/stack/material/glass/boron_reinforced{ + amount = 30 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/storage) +"lj" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"ll" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/spot, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"lm" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"ln" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"lo" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"lp" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/machinery/light/spot, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"lq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"lr" = ( +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"ls" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/pink{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"lt" = ( +/obj/floor_decal/corner/pink/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"lu" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/floor_decal/corner/pink/mono, +/obj/structure/table/rack, +/obj/item/storage/box/freezer/blood/human, +/obj/item/storage/box/freezer/blood/human, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/patrol/medbay) +"lv" = ( +/obj/machinery/alarm/server{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/closet/secure_closet/patrol/fleet/engi, +/obj/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/equipment) +"lx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/equipment) +"ly" = ( +/obj/floor_decal/corner/red, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/port) +"lz" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/port) +"lA" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/glass/sol{ + name = "Troops Cryo" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"lB" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"lC" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/tool{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/engineering/equipment) +"lD" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/equipment) +"lE" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/storage) +"lF" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/storage) +"lG" = ( +/obj/floor_decal/industrial/warning{ + dir = 6; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/storage) +"lH" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/storage) +"lI" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/catwalk, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"lJ" = ( +/obj/structure/table/standard, +/obj/item/device/scanner/spectrometer/adv, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/floor_decal/industrial/warning{ + dir = 9; + icon_state = "warning" + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"lK" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/industrial/warning{ + dir = 5; + icon_state = "warning" + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"lL" = ( +/obj/floor_decal/corner/pink{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"lM" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"lN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"lO" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/floor_decal/corner/pink{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"lP" = ( +/obj/floor_decal/industrial/warning{ + dir = 9; + icon_state = "warning" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/roller_bed/nanoblood, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"lQ" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/structure/closet/secure_closet/patrol/fleet, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/command/equipment) +"lR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/equipment) +"lS" = ( +/obj/floor_decal/corner/red, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/port) +"lT" = ( +/obj/floor_decal/corner/red{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/port) +"lU" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"lV" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4; + icon_state = "warningcorner" + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/floor_decal/corner/black, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"lW" = ( +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/floor_decal/corner/black, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"lX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/floor_decal/corner/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"lY" = ( +/obj/structure/flora/pottedplant/flower, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/floor_decal/corner/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"lZ" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/engineering{ + name = "Engine Access" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/engineering/equipment) +"ma" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/engineering/storage) +"mb" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/storage) +"mc" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/storage) +"md" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/engineering/fussion/control) +"me" = ( +/turf/simulated/wall/ocp_wall, +/area/ship/patrol/engineering/fussion/control) +"mf" = ( +/obj/machinery/power/fusion_core/mapped{ + id_tag = null; + initial_id_tag = "fusion_core_patrol" + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"mg" = ( +/obj/structure/catwalk, +/obj/structure/cable, +/obj/machinery/light/small{ + dir = 8; + icon_state = "bulb1" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/power/apc/critical{ + name = "south bump"; + pixel_y = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/engine/port) +"mh" = ( +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8; + icon_state = "warningcorner" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"mi" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"mj" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/port) +"mk" = ( +/obj/structure/table/standard, +/obj/item/storage/firstaid/toxin{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/firstaid/adv, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"ml" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/corner/pink{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/sleeper{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"mm" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"mn" = ( +/obj/floor_decal/industrial/warning, +/obj/floor_decal/corner/pink{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"mo" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/crate/trashcart, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"mp" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/structure/closet/secure_closet/patrol/fleet_com, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/command/equipment) +"mq" = ( +/obj/machinery/light, +/obj/item/stool/padded, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/equipment) +"mr" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 0; + pixel_x = 24; + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/equipment) +"mt" = ( +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/port) +"mu" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/red{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/port) +"mv" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/glass/sol{ + name = "Troops Section"; + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"mw" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/floor_decal/corner/black{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"mx" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/black{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"my" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/black{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"mz" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/corner/black{ + dir = 9 + }, +/obj/structure/reagent_dispensers/water_cooler{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"mB" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/engineering/hallway) +"mC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/flora/pottedplant/fern, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/hallway) +"mD" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "prototype_controller_patrol"; + name = "Fusion Maintenance Access Controller"; + pixel_x = 26; + req_access = list("ACCESS_CAVALRY"); + tag_exterior_door = "prototype_exterior_pat"; + tag_interior_door = "prototype_interior_pat" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/hallway) +"mE" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/engineering/hallway) +"mF" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/machinery/light{ + dir = 1; + icon_state = "tube1" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"mG" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"mH" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "prototype_access_hatch"; + locked = 1 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"mI" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"mJ" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"mK" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "prototype_exhaust_patrol" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"mL" = ( +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"mM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/engine/port) +"mN" = ( +/obj/structure/table/standard, +/obj/item/storage/firstaid/o2{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/firstaid/fire, +/obj/floor_decal/industrial/warning{ + dir = 10; + icon_state = "warning" + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"mO" = ( +/obj/structure/table/standard, +/obj/item/storage/firstaid/regular{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/firstaid/regular, +/obj/floor_decal/industrial/warning{ + dir = 6; + icon_state = "warning" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"mP" = ( +/obj/machinery/door/firedoor, +/obj/paint/dark_gunmetal, +/obj/wallframe_spawn/reinforced/polarized/no_grille{ + id = "surgery_windows_patrol" + }, +/turf/simulated/floor, +/area/ship/patrol/medbay) +"mQ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + name = "Operating Theatre" + }, +/obj/machinery/holosign/surgery{ + id_tag = "surgeryp" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"mR" = ( +/obj/paint/black, +/turf/simulated/wall/r_wall, +/area/ship/patrol/barracks/armory) +"mS" = ( +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/wallframe_spawn/reinforced, +/obj/paint/black, +/turf/simulated/floor, +/area/ship/patrol/barracks) +"mT" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable, +/obj/wallframe_spawn/reinforced, +/obj/paint/black, +/turf/simulated/floor, +/area/ship/patrol/barracks) +"mU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/paint/black, +/turf/simulated/wall/r_wall, +/area/ship/patrol/barracks) +"mV" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/floor_decal/corner/black{ + dir = 4 + }, +/obj/structure/table/standard, +/obj/random/smokes, +/obj/item/flame/lighter, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"mW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/floor_decal/corner/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"mX" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/floor_decal/corner/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"mY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/corner/black{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/storage/box/cups, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"na" = ( +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/obj/machinery/power/apc/critical{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/hallway) +"nb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/hallway) +"nd" = ( +/obj/structure/closet/radiation, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/sign/warning/radioactive{ + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/hallway) +"ne" = ( +/obj/machinery/power/smes/buildable/preset/patrol/engine_gyrotron, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"nf" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable/yellow{ + dir = 1 + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"ng" = ( +/obj/machinery/fusion_fuel_injector/mapped{ + dir = 4; + initial_id_tag = "fusion_injector_patrol" + }, +/turf/simulated/floor, +/area/ship/patrol/engineering/fussion/control) +"nh" = ( +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "prototype_chamber_blast_patrol" + }, +/obj/wallframe_spawn/reinforced_phoron, +/turf/simulated/floor, +/area/ship/patrol/engineering/fussion/control) +"ni" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1; + icon_state = "warningcorner" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"nj" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"nk" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"nm" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"nn" = ( +/obj/floor_decal/industrial/warning{ + dir = 5; + icon_state = "warning" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"no" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 8 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/engine/port) +"np" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 8 + }, +/obj/paint/red, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/port) +"nq" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/airless, +/area/ship/patrol/maintenance/engine/port) +"nr" = ( +/obj/structure/table/reinforced, +/obj/machinery/vending/wallmed1{ + dir = 4; + pixel_x = -24 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 9 + }, +/obj/floor_decal/corner/paleblue, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/reagent_containers/spray/sterilizine{ + pixel_x = 2; + pixel_y = 4 + }, +/obj/item/clothing/suit/surgicalapron, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"ns" = ( +/obj/floor_decal/floordetail/edgedrain{ + dir = 1 + }, +/obj/floor_decal/corner/paleblue{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"nu" = ( +/obj/structure/closet/secure_closet/medical_wall{ + pixel_x = 26; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 5 + }, +/obj/floor_decal/corner/paleblue{ + dir = 8 + }, +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 16 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"nv" = ( +/obj/structure/closet/secure_closet/guncabinet/patrol/carabine, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks/armory) +"nw" = ( +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/closet/secure_closet/guncabinet/patrol/assault, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks/armory) +"nx" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/wallframe_spawn/reinforced, +/obj/paint/black, +/turf/simulated/floor/plating, +/area/ship/patrol/barracks/armory) +"ny" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/clothing/accessory/storage/black_drop, +/obj/item/clothing/accessory/storage/black_drop, +/obj/item/clothing/accessory/storage/black_drop, +/obj/item/clothing/accessory/storage/brown_drop, +/obj/item/clothing/accessory/storage/brown_drop, +/obj/item/clothing/accessory/storage/brown_drop, +/obj/item/clothing/accessory/storage/white_drop, +/obj/item/clothing/accessory/storage/white_drop, +/obj/item/clothing/accessory/storage/white_drop, +/obj/item/clothing/accessory/armband/bluegold/away_solpatrol, +/obj/item/clothing/accessory/armband/bluegold/away_solpatrol, +/obj/item/clothing/accessory/armband/bluegold/away_solpatrol, +/obj/item/clothing/head/beret/solgov/orbital, +/obj/item/clothing/head/beret/solgov/orbital, +/obj/item/clothing/head/beret/solgov/orbital, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"nz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/floor_decal/corner/red/full, +/obj/structure/closet/secure_closet/patrol/marine_lead, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"nA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/corner/green/full, +/obj/structure/closet/secure_closet/patrol, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"nB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/corner/green/full, +/obj/structure/closet/secure_closet/patrol, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"nC" = ( +/obj/floor_decal/industrial/warning{ + dir = 9; + icon_state = "warning" + }, +/obj/floor_decal/industrial/warning/corner, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"nD" = ( +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"nF" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/hangar) +"nG" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/corner/yellow{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/hallway) +"nH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/hallway) +"nI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance/bolted{ + frequency = 1379; + id_tag = "prototype_exterior_pat"; + name = "Fusion Maintenance" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/engineering/hallway) +"nJ" = ( +/obj/machinery/access_button/airlock_interior{ + master_tag = "prototype_controller_patrol"; + pixel_x = 24; + pixel_y = -24 + }, +/obj/structure/hygiene/shower{ + dir = 1 + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/access_button/airlock_exterior{ + master_tag = "prototype_controller_patrol"; + pixel_x = -24; + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/hallway) +"nK" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance/bolted{ + frequency = 1379; + id_tag = "prototype_interior_pat"; + name = "Fusion Maintenance" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/engineering/hallway) +"nL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/decal/cleanable/dirt, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"nM" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"nN" = ( +/obj/machinery/fusion_fuel_injector/mapped{ + dir = 4; + initial_id_tag = "fusion_injector_patrol" + }, +/turf/simulated/floor/reinforced, +/area/ship/patrol/engineering/fussion/control) +"nO" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1; + icon_state = "warningcorner" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8; + icon_state = "warningcorner" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"nP" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"nR" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 5; + icon_state = "warning" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"nS" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"nT" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/engine/port) +"nU" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/adv, +/obj/floor_decal/floordetail/edgedrain{ + dir = 10 + }, +/obj/floor_decal/corner/paleblue{ + dir = 4 + }, +/obj/machinery/button/holosign{ + id_tag = "surgeryp"; + pixel_x = -24; + pixel_y = 5 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/item/stack/nanopaste, +/obj/item/stack/nanopaste, +/obj/machinery/button/windowtint{ + id_tag = "surgery_windows_patrol"; + pixel_x = -24; + pixel_y = -5 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"nV" = ( +/obj/floor_decal/floordetail/edgedrain, +/obj/floor_decal/corner/paleblue{ + dir = 5 + }, +/obj/structure/table/reinforced, +/obj/item/reagent_containers/syringe{ + pixel_y = -2 + }, +/obj/machinery/light, +/obj/item/storage/firstaid/surgery, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"nW" = ( +/obj/machinery/optable, +/obj/floor_decal/floordetail/edgedrain, +/obj/floor_decal/corner/paleblue{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"nX" = ( +/obj/machinery/computer/operating{ + dir = 1 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 6 + }, +/obj/floor_decal/corner/paleblue{ + dir = 1 + }, +/obj/item/device/radio/intercom/department/medbay{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"nY" = ( +/obj/floor_decal/corner/black{ + dir = 5 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks/armory) +"nZ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/highsecurity{ + name = "Troops Armory" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks/armory) +"oa" = ( +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"ob" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"od" = ( +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"oe" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"of" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/rig/military, +/obj/item/rig/military, +/obj/item/rig/military, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"og" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/shield/riot/metal, +/obj/item/shield/riot/metal, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"oh" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/floor_decal/corner/paleblue/diagonal, +/obj/structure/curtain/medical, +/obj/structure/extinguisher_cabinet{ + pixel_x = -24; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"oi" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/engineering/fussion/control) +"oj" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"ok" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/engineering{ + name = "Engine Control Room" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/engineering/fussion/control) +"ol" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/engineering/fussion/control) +"om" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"on" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"oo" = ( +/obj/machinery/power/emitter/gyrotron/anchored{ + dir = 4; + initial_id_tag = "fusion_gyrotron_patrol" + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced, +/area/ship/patrol/engineering/fussion/control) +"op" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"oq" = ( +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1; + icon_state = "warningcorner" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8; + icon_state = "warningcorner" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"os" = ( +/obj/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"ot" = ( +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"ox" = ( +/obj/floor_decal/corner/black{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks/armory) +"oy" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/corner/black{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks/armory) +"oz" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/highsecurity{ + name = "Troops Armory" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks/armory) +"oA" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"oB" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"oC" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"oE" = ( +/obj/machinery/power/apc/critical{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/fussion/control) +"oF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/fussion/control) +"oG" = ( +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the observation shutters"; + id_tag = "fusion_observation_patrol"; + name = "Chamber Observation"; + pixel_y = 29 + }, +/obj/machinery/computer/fusion/fuel_control{ + dir = 8; + id_tag = null; + initial_id_tag = "fusion_injector_patrol" + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the prototype exhaust"; + id_tag = "prototype_exhaust_patrol"; + name = "Chamber Exhaust"; + pixel_y = 21 + }, +/obj/machinery/button/blast_door{ + desc = "A remote control-switch for the engine containment doors"; + id_tag = "prototype_chamber_blast_patrol"; + name = "Chamber Containment"; + pixel_y = 37 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/fussion/control) +"oI" = ( +/obj/floor_decal/industrial/warning, +/obj/structure/closet/crate/radiation, +/obj/item/stack/material/deuterium/fifty, +/obj/item/stack/material/deuterium/fifty, +/obj/item/stack/material/deuterium/fifty, +/obj/item/stack/material/tritium/fifty, +/obj/item/stack/material/tritium/fifty, +/obj/item/stack/material/tritium/fifty, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"oJ" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"oK" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"oL" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8; + icon_state = "warningcorner" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 1; + icon_state = "warningcorner" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"oM" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 10; + icon_state = "warning" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"oO" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/warning{ + dir = 6; + icon_state = "warning" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"oP" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"oR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/port) +"oS" = ( +/obj/structure/closet/secure_closet/guncabinet/patrol/utility, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks/armory) +"oT" = ( +/obj/structure/cable, +/obj/machinery/power/apc/critical{ + name = "south bump"; + pixel_y = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/closet/secure_closet/guncabinet/patrol/energy, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks/armory) +"oU" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/wallframe_spawn/reinforced, +/obj/paint/black, +/turf/simulated/floor/plating, +/area/ship/patrol/barracks/armory) +"oW" = ( +/obj/floor_decal/industrial/warning, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"oX" = ( +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"oY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4; + icon_state = "warningcorner" + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks) +"pa" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/industrial/warning, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/sign/warning/high_voltage{ + pixel_x = -32 + }, +/obj/machinery/computer/air_control{ + dir = 4; + frequency = 1442; + input_tag = "patrol_rust"; + name = "RUST Injector Control Console"; + output_tag = null + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/fussion/control) +"pb" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/fussion/control) +"pc" = ( +/obj/machinery/computer/fusion/core_control{ + dir = 8; + id_tag = null; + initial_id_tag = "fusion_core_patrol" + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/fussion/control) +"pd" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "fusion_observation_patrol" + }, +/obj/paint/dark_gunmetal, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/ship/patrol/engineering/fussion/control) +"pe" = ( +/obj/machinery/fusion_fuel_compressor, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"pf" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"pg" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"ph" = ( +/obj/floor_decal/industrial/warning{ + dir = 10; + icon_state = "warning" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"pi" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8; + icon_state = "warningcorner" + }, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"pk" = ( +/obj/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner{ + dir = 8; + icon_state = "warningcorner" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"pl" = ( +/obj/floor_decal/industrial/warning{ + dir = 6; + icon_state = "warning" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"pp" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/clothing/suit/armor/pcarrier, +/obj/item/clothing/suit/armor/pcarrier, +/obj/item/clothing/suit/armor/pcarrier, +/obj/item/clothing/accessory/storage/pouches, +/obj/item/clothing/accessory/storage/pouches, +/obj/item/clothing/accessory/storage/pouches, +/obj/item/clothing/accessory/storage/pouches/large, +/obj/item/clothing/accessory/storage/pouches/large, +/obj/item/clothing/accessory/storage/pouches/large, +/obj/machinery/light, +/obj/item/clothing/accessory/ubac, +/obj/item/clothing/accessory/ubac, +/obj/item/clothing/accessory/ubac, +/obj/item/clothing/accessory/arm_guards/tactical, +/obj/item/clothing/accessory/arm_guards/tactical, +/obj/item/clothing/accessory/arm_guards/tactical, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"pq" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/clothing/suit/armor/pcarrier/tan, +/obj/item/clothing/suit/armor/pcarrier/tan, +/obj/item/clothing/suit/armor/pcarrier/tan, +/obj/item/clothing/accessory/storage/pouches/tan, +/obj/item/clothing/accessory/storage/pouches/tan, +/obj/item/clothing/accessory/storage/pouches/tan, +/obj/item/clothing/accessory/storage/pouches/large/tan, +/obj/item/clothing/accessory/storage/pouches/large/tan, +/obj/item/clothing/accessory/storage/pouches/large/tan, +/obj/item/clothing/accessory/ubac/tan, +/obj/item/clothing/accessory/ubac/tan, +/obj/item/clothing/accessory/ubac/tan, +/obj/item/clothing/accessory/arm_guards/tan, +/obj/item/clothing/accessory/arm_guards/tan, +/obj/item/clothing/accessory/arm_guards/tan, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"pr" = ( +/obj/structure/cable, +/obj/machinery/power/apc/critical{ + name = "south bump"; + pixel_y = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/stack/material/steel/fifty, +/obj/item/stack/material/glass/fifty{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/stack/material/aluminium, +/obj/item/stack/material/plastic/fifty, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"ps" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/item/crowbar/prybar, +/obj/item/wrench, +/obj/item/wrench, +/obj/item/wrench, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"pt" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"pu" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/dispenser/oxygen, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"pv" = ( +/obj/structure/cable, +/obj/machinery/power/smes/buildable/preset/patrol/engine_main, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor, +/area/ship/patrol/engineering/fussion/control) +"pw" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/fussion/control) +"px" = ( +/obj/machinery/computer/fusion/gyrotron{ + dir = 8; + id_tag = null; + initial_id_tag = "fusion_gyrotron_patrol" + }, +/obj/floor_decal/corner/yellow{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/engineering/fussion/control) +"py" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "fusion_observation_patrol" + }, +/obj/paint/dark_gunmetal, +/turf/simulated/floor, +/area/ship/patrol/engineering/fussion/control) +"pz" = ( +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/machinery/light, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/port_gen/pacman/mrs, +/obj/item/stack/material/tritium/ten, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"pA" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"pB" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"pC" = ( +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/machinery/portable_atmospherics/canister/hydrogen/engine_setup, +/turf/simulated/floor, +/area/ship/patrol/engineering/fussion/control) +"pD" = ( +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"pF" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8; + icon_state = "warningcorner" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"pG" = ( +/obj/structure/cable, +/obj/machinery/shipsensors, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/maintenance/engine/port) +"pH" = ( +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "sensorslockp"; + name = "Sensors Protective blast doors" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/maintenance/engine/port) +"pJ" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/barracks/armory) +"pK" = ( +/obj/shuttle_landmark/nav_patrol/nav1, +/turf/space, +/area/space) +"pL" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "prototype_exhaust_patrol" + }, +/obj/machinery/shield_diffuser, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"pM" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"pO" = ( +/obj/shuttle_landmark/nav_patrol/nav3, +/turf/space, +/area/space) +"qt" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/cannon) +"qG" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/cannon) +"rs" = ( +/obj/machinery/shield_diffuser, +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "bsap_space"; + name = "Cannon Compartment Hatch" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/command/cannon) +"rt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/conveyor_switch{ + id = "bsap"; + name = "loading conveyor switch" + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"rx" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/computer/ship/navigation{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/industrial/outline/yellow, +/obj/floor_decal/corner/blue{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"rI" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/computer/ship/helm{ + dir = 4 + }, +/obj/floor_decal/corner/blue{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"rL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"rQ" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/medbay) +"rZ" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/engineering/equipment) +"sJ" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"sW" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/medbay) +"sZ" = ( +/obj/structure/catwalk, +/obj/structure/lattice, +/turf/space, +/area/space) +"tb" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/engineering/fussion/control) +"tn" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/eva) +"tu" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/hangar) +"ty" = ( +/obj/structure/lattice, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/space, +/area/space) +"tR" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/port) +"tS" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 9 + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/starboard) +"uh" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/clothing/suit/armor/pcarrier/green, +/obj/item/clothing/suit/armor/pcarrier/green, +/obj/item/clothing/suit/armor/pcarrier/green, +/obj/item/clothing/accessory/storage/pouches/green, +/obj/item/clothing/accessory/storage/pouches/green, +/obj/item/clothing/accessory/storage/pouches/green, +/obj/item/clothing/accessory/storage/pouches/large/green, +/obj/item/clothing/accessory/storage/pouches/large/green, +/obj/item/clothing/accessory/storage/pouches/large/green, +/obj/item/clothing/accessory/ubac/green, +/obj/item/clothing/accessory/ubac/green, +/obj/item/clothing/accessory/ubac/green, +/obj/item/clothing/accessory/arm_guards/green, +/obj/item/clothing/accessory/arm_guards/green, +/obj/item/clothing/accessory/arm_guards/green, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"uB" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/cargo) +"uW" = ( +/obj/floor_decal/industrial/warning/full, +/obj/machinery/porta_turret{ + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"vd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/wall/ocp_wall, +/area/ship/patrol/engineering/fussion/control) +"vz" = ( +/obj/machinery/computer/ship/disperser/military{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"vR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"wa" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/cargo) +"wf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"wk" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + frequency = 1442; + icon_state = "map_injector"; + id = "patrol_rust"; + use_power = 1 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/engineering/fussion/control) +"wC" = ( +/obj/machinery/computer/ship/navigation/telescreen{ + pixel_y = 26 + }, +/obj/structure/bed/chair/padded/black, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"wN" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/dock) +"wO" = ( +/obj/floor_decal/industrial/outline/orange, +/obj/structure/ship_munition/disperser_charge/fire/military, +/obj/structure/sign/warning/nosmoking_1{ + dir = 4; + pixel_x = -34; + pixel_y = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"xr" = ( +/obj/machinery/shipsensors, +/turf/simulated/floor/plating, +/area/ship/reaper) +"xy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/window/brigdoor/northright, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"xR" = ( +/obj/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"ya" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/hangar) +"ye" = ( +/obj/floor_decal/industrial/outline/orange, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/ship_munition/disperser_charge/fire/military, +/obj/structure/ship_munition/disperser_charge/fire/military, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"yr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/sign/warning/bomb_range{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"zp" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/engineering/fussion/control) +"zq" = ( +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"zJ" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/atmos) +"zW" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/hangar) +"Al" = ( +/obj/paint/black, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/barracks/armory) +"AU" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/starboard) +"Bl" = ( +/obj/random/trash, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/lower) +"Bz" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/ship_munition/disperser_charge/fire/military, +/obj/floor_decal/industrial/outline/orange, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"BI" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"BY" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/ship_munition/disperser_charge/emp/military, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"Cb" = ( +/obj/structure/lattice, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/catwalk, +/turf/space, +/area/space) +"Cp" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/eva) +"Cr" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"Ct" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"Cy" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/sign/warning/secure_area{ + dir = 4; + pixel_x = -34 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"CI" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/engineering/fussion/control) +"CT" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/clothing/accessory/storage/holster/machete, +/obj/item/clothing/accessory/storage/holster/machete, +/obj/item/clothing/accessory/storage/holster/machete, +/obj/item/clothing/accessory/storage/holster/knife/polymer, +/obj/item/clothing/accessory/storage/holster/knife/polymer, +/obj/item/clothing/accessory/storage/holster/knife/polymer, +/obj/item/clothing/accessory/storage/holster/armpit, +/obj/item/clothing/accessory/storage/holster/armpit, +/obj/item/clothing/accessory/storage/holster/armpit, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"CW" = ( +/obj/paint/red, +/obj/structure/sign/warning/hot_exhaust, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/port) +"DJ" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "bsap" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/floor_decal/industrial/warning{ + dir = 1; + icon_state = "warning" + }, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/command/cannon) +"DU" = ( +/obj/paint/meatstation/lab, +/obj/structure/sign/solgov, +/turf/simulated/wall/r_wall, +/area/ship/patrol/dock) +"DV" = ( +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"DW" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/unary/outlet_injector{ + use_power = 1; + icon_state = "map_injector" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/engine/starboard) +"DY" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"Ex" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/barracks) +"Fo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/wall/ocp_wall, +/area/ship/patrol/engineering/fussion/control) +"FA" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/port) +"FI" = ( +/obj/structure/lattice, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/space, +/area/space) +"FP" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/cannon) +"FU" = ( +/obj/paint/black, +/obj/structure/sign/fifthfleet/small, +/turf/simulated/wall/r_titanium, +/area/ship/reaper) +"FW" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/medbay) +"Gb" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/glass/command{ + name = "Bridge" + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/command/bridge) +"Gj" = ( +/obj/machinery/atmospherics/unary/heater{ + dir = 8 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"GD" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/cannon) +"GF" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/computer/ship/engines{ + dir = 4 + }, +/obj/floor_decal/corner/blue/three_quarters{ + dir = 8 + }, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"GP" = ( +/obj/floor_decal/industrial/warning, +/obj/machinery/sleeper{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/medbay) +"Hi" = ( +/obj/machinery/door/airlock/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/lower) +"Hl" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"HY" = ( +/obj/floor_decal/corner/brown{ + dir = 8 + }, +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/cargo) +"ID" = ( +/obj/paint/red, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/starboard) +"IG" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/cannon) +"IW" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/eva) +"Jl" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/blast/regular/open{ + dir = 2; + id_tag = "bridgep_lock"; + name = "Bridge Lockdown blast doors" + }, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/patrol/command/bridge) +"JF" = ( +/obj/machinery/fabricator/hacked{ + desc = "Your typical Special Forces Autolathe."; + name = "Autolathe" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"JU" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/cargo) +"JZ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/table/steel_reinforced, +/obj/item/folder/blue, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"Ks" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"Kv" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/eva) +"KF" = ( +/obj/paint/meatstation/lab, +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 6 + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/starboard) +"KL" = ( +/obj/floor_decal/corner/paleblue/diagonal, +/obj/item/stool/padded, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/equipment) +"KP" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/starboard) +"KQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/floor_decal/icarus_scglogo{ + dir = 8; + icon_state = "center-left" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"Lm" = ( +/obj/paint/red, +/turf/simulated/wall/r_titanium, +/area/ship/reaper) +"Lt" = ( +/obj/paint/red, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/port) +"Lv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/bed/chair/office/comfy/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"LN" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"LP" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/hangar) +"LU" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/red, +/obj/floor_decal/industrial/outline/red, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/ship_munition/disperser_charge/explosive/military, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"Mm" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "patrol_pd" + }, +/obj/structure/cable, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"MC" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "patrol_pd" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"MF" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"MR" = ( +/obj/paint/dark_gunmetal, +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1; + target_pressure = 15000; + name = "Waste to Space" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/starboard) +"Ne" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/hangar) +"No" = ( +/obj/machinery/hologram/holopad/longrange, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/reaper) +"Nt" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/hangar) +"NY" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/ion_engine{ + dir = 8 + }, +/turf/simulated/floor/airless, +/area/ship/patrol/maintenance/engine/port) +"Ol" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"Op" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/medbay) +"Ow" = ( +/obj/paint/black, +/turf/simulated/wall/titanium, +/area/ship/reaper) +"OK" = ( +/obj/decal/cleanable/dirt, +/obj/machinery/light/spot{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/full, +/obj/machinery/porta_turret{ + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/turf/simulated/floor/plating, +/area/ship/reaper) +"Pn" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/engineering/fussion/control) +"PD" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/starboard) +"PF" = ( +/obj/structure/lattice, +/obj/structure/catwalk, +/turf/space, +/area/space) +"PV" = ( +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"PX" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/reaper) +"Qa" = ( +/obj/submap_landmark/joinable_submap/away_scg_patrol, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower) +"Qe" = ( +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"QH" = ( +/obj/paint/red, +/obj/structure/sign/warning/hot_exhaust, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/starboard) +"QL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"QP" = ( +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/outline/red, +/obj/structure/ship_munition/disperser_charge/explosive/military, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/command/cannon) +"Rb" = ( +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "fusion_observation_patrol" + }, +/obj/paint/dark_gunmetal, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/ship/patrol/engineering/fussion/control) +"Rk" = ( +/obj/machinery/button/blast_door{ + pixel_x = 8; + pixel_y = 25; + id_tag = "bsap_space"; + name = "Fire-ready Blast Door" + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/item/hand_labeler, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"Rs" = ( +/obj/machinery/atmospherics/unary/heater{ + dir = 4 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/atmos) +"RA" = ( +/obj/structure/table/steel_reinforced, +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"RG" = ( +/obj/floor_decal/industrial/warning/full, +/obj/machinery/porta_turret{ + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/reaper) +"Sl" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/barracks/armory) +"SC" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/starboard) +"SG" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/dock) +"SM" = ( +/obj/structure/lattice, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/space, +/area/space) +"SV" = ( +/obj/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/disperser/front{ + dir = 8 + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/ship/patrol/command/cannon) +"TX" = ( +/obj/paint/dark_gunmetal, +/obj/structure/sign/fifthfleet/small, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/bridge) +"Uk" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/atmos) +"UL" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/obj/structure/bed/chair/padded/black, +/obj/floor_decal/corner/blue{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"Vb" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/engineering/fussion/control) +"Vf" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"Vm" = ( +/obj/machinery/computer/ship/navigation{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"Vq" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/ion_engine{ + dir = 8 + }, +/turf/simulated/floor/airless, +/area/ship/patrol/maintenance/engine/starboard) +"Vr" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/sol{ + name = "Fleet Equipment Room" + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/crew/hallway/lower/port) +"VB" = ( +/obj/paint/dark_gunmetal, +/obj/structure/sign/fifthfleet/small, +/turf/simulated/wall/r_wall, +/area/ship/patrol/dock) +"VH" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/dock) +"VI" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/eva) +"Wd" = ( +/obj/floor_decal/corner/yellow{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/aft) +"Wn" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/atmos) +"Wq" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/command/hangar) +"Ww" = ( +/obj/paint/dark_gunmetal, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular/open{ + dir = 4; + id_tag = "bridgep_lock"; + name = "Bridge Lockdown blast doors" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2"; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/command/bridge) +"WX" = ( +/obj/paint/meatstation/lab, +/obj/structure/sign/warning/vent_port, +/turf/simulated/wall/r_wall, +/area/ship/patrol/engineering/fussion/control) +"Xc" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"Xg" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"Xj" = ( +/obj/floor_decal/corner/black{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/barracks/armory) +"Xv" = ( +/obj/structure/table/steel_reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/pen/fancy{ + pixel_x = 3; + pixel_y = -1 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/item/storage/secure/safe{ + pixel_y = 24; + pixel_x = 3 + }, +/obj/floor_decal/corner/blue/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"Xx" = ( +/obj/floor_decal/corner/brown{ + dir = 4 + }, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/lower/starboard) +"XC" = ( +/obj/paint/dark_gunmetal, +/obj/machinery/atmospherics/pipe/simple/visible/black, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/engine/starboard) +"XG" = ( +/obj/item/device/radio/intercom{ + dir = 1; + pixel_y = -28 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/command/cannon) +"XJ" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/rig_module/maneuvering_jets, +/obj/item/rig_module/maneuvering_jets, +/obj/item/rig_module/maneuvering_jets, +/obj/item/rig_module/electrowarfare_suite, +/obj/item/rig_module/electrowarfare_suite, +/obj/item/rig_module/electrowarfare_suite, +/obj/item/rig_module/device/healthscanner, +/obj/item/rig_module/chem_dispenser/combat, +/obj/item/rig_module/chem_dispenser/combat, +/obj/item/rig_module/chem_dispenser/combat, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"Yr" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/rig_module/device/rcd, +/obj/item/rig_module/grenade_launcher/light, +/obj/item/rig_module/grenade_launcher/light, +/obj/item/rig_module/grenade_launcher/light, +/obj/item/rig_module/power_sink, +/obj/item/rig_module/power_sink, +/obj/item/rig_module/power_sink, +/obj/item/rig_module/self_destruct/small, +/obj/item/rig_module/self_destruct/small, +/obj/item/rig_module/self_destruct/small, +/obj/item/rig_module/vision/multi, +/obj/item/rig_module/vision/nvg, +/obj/item/rig_module/vision/nvg, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/barracks) +"YJ" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "patrol_pd" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"YP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"YU" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/command/bridge) +"Zl" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/ship/patrol/command/hangar) +"Zn" = ( +/obj/paint/meatstation/lab, +/obj/structure/sign/warning/hot_exhaust, +/turf/simulated/wall/r_wall, +/area/ship/patrol/engineering/fussion/control) +"Zr" = ( +/obj/machinery/vending/coffee{ + name = "Better Hot Drinks machine"; + prices = list() + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/command/bridge) +"ZG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/helium{ + start_pressure = 14999 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/engineering/fussion/control) +"ZX" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "patrol_pd" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) + +(1,1,1) = {" +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 +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 +"} +(2,1,1) = {" +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 +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 +"} +(3,1,1) = {" +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 +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 +"} +(4,1,1) = {" +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 +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 +"} +(5,1,1) = {" +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 +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 +"} +(6,1,1) = {" +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 +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 +"} +(7,1,1) = {" +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 +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 +"} +(8,1,1) = {" +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 +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 +"} +(9,1,1) = {" +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 +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 +"} +(10,1,1) = {" +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 +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 +"} +(11,1,1) = {" +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 +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 +"} +(12,1,1) = {" +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 +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 +"} +(13,1,1) = {" +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 +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 +"} +(14,1,1) = {" +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 +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 +"} +(15,1,1) = {" +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 +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 +"} +(16,1,1) = {" +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 +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 +"} +(17,1,1) = {" +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 +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 +"} +(18,1,1) = {" +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 +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 +"} +(19,1,1) = {" +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 +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 +"} +(20,1,1) = {" +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 +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 +"} +(21,1,1) = {" +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 +pK +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 +"} +(22,1,1) = {" +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 +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 +"} +(23,1,1) = {" +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 +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 +"} +(24,1,1) = {" +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 +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 +"} +(25,1,1) = {" +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 +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 +"} +(26,1,1) = {" +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 +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 +"} +(27,1,1) = {" +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 +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 +"} +(28,1,1) = {" +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 +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 +"} +(29,1,1) = {" +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 +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 +"} +(30,1,1) = {" +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 +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 +"} +(31,1,1) = {" +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 +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 +"} +(32,1,1) = {" +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 +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 +"} +(33,1,1) = {" +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 +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 +"} +(34,1,1) = {" +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 +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 +"} +(35,1,1) = {" +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 +qG +qG +rs +qG +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 +"} +(36,1,1) = {" +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 +eF +PF +PF +qG +qG +hM +SV +qG +qG +sZ +PF +YJ +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 +"} +(37,1,1) = {" +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 +ty +qG +gh +gh +hM +hM +hL +hM +qG +qG +qG +FI +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 +"} +(38,1,1) = {" +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 +qt +qG +hM +hM +hM +hM +hN +hM +hM +hM +qG +qt +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 +"} +(39,1,1) = {" +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 +qG +iD +GD +IG +hM +hM +hM +hO +hM +hM +hM +hM +qt +qG +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 +"} +(40,1,1) = {" +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 +qG +qG +hM +hM +Rk +rt +yr +gZ +DJ +iE +wf +Cy +hM +FP +gh +FW +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 +"} +(41,1,1) = {" +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 +qG +qG +qG +hM +hM +hM +wC +Qe +Qe +ha +hP +BY +Xg +gY +GD +hd +hM +FW +FW +FW +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 +"} +(42,1,1) = {" +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 +YJ +aa +aa +al +qG +hM +hM +hM +hM +hM +PV +Qe +Qe +iF +hQ +iF +BI +eJ +Vm +vz +hM +jk +jk +FW +FW +aa +aa +YJ +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 +"} +(43,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +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 +ty +PF +al +al +hM +hM +hM +hM +hM +hM +Xc +vR +hf +QL +hR +Ks +rL +xy +Lv +XG +hM +jk +jk +jk +FW +FW +PF +ty +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 +"} +(44,1,1) = {" +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 +ty +al +al +tn +hM +hc +wO +Vf +eH +pM +Qe +Qe +Ol +hM +gX +hM +hM +hM +hM +hM +hM +jk +jk +jk +jk +FW +FW +ty +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 +"} +(45,1,1) = {" +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 +VI +IW +Cp +Kv +hM +Bz +ye +eo +eI +eb +Ct +MF +Hl +hM +hT +hM +jl +jQ +kn +oh +kM +lJ +mk +mN +jk +jk +FW +Op +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 +"} +(46,1,1) = {" +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 +al +tn +tn +cl +tn +tn +hM +ep +ep +QP +QP +QP +hM +hM +hS +hM +jm +jR +ko +kN +kN +lK +DV +mO +rQ +rQ +rQ +sW +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 +"} +(47,1,1) = {" +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 +al +tn +bD +cm +cR +tn +hM +eq +ep +gg +LU +gg +hM +gD +hU +jk +jn +jS +kp +kO +jP +lL +ml +jk +jk +jk +jk +FW +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 +"} +(48,1,1) = {" +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 +al +tn +bE +cm +cS +tn +hM +hM +hM +hM +hM +hM +hM +hh +hY +iH +jo +jT +jo +kP +lr +lM +GP +mP +nr +nU +jk +FW +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 +"} +(49,1,1) = {" +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 +al +tn +bF +cm +cT +tn +dQ +es +eK +fj +fL +gi +Hi +hg +hW +iI +kq +jU +kq +ls +kQ +lN +mm +mQ +ns +nV +jk +FW +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 +"} +(50,1,1) = {" +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 +al +al +tn +bG +cm +cU +tn +dQ +et +et +et +et +et +et +hh +hX +iJ +jq +jV +kr +lt +kR +lO +mn +mP +ns +nW +jk +FW +FW +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 +"} +(51,1,1) = {" +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 +al +al +tn +tn +bH +cq +cV +tn +dS +et +eL +eL +eL +gj +et +hi +hV +iG +jr +jW +ks +kS +lu +lP +mo +jk +nu +nX +jk +jk +FW +FW +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 +"} +(52,1,1) = {" +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 +al +tn +tn +tn +tn +cr +tn +tn +Bl +et +eL +eL +eL +eL +et +hj +hZ +iK +js +js +jk +jk +jk +jk +jk +mR +mR +mR +mR +mR +mR +Sl +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 +"} +(53,1,1) = {" +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 +ZX +SM +SM +uB +JU +JU +bf +bI +cs +cW +dz +dT +et +eL +eL +eL +eL +et +hk +ia +iL +jY +jX +kt +kT +lv +lQ +mp +mR +nv +nY +ox +oS +Al +pJ +SM +SM +Mm +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 +"} +(54,1,1) = {" +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 +af +af +wa +aH +bg +bJ +ct +cX +dz +dQ +et +eL +eL +eL +eL +et +hl +ib +iL +jt +kU +kU +KL +KL +ku +mq +mR +nw +Xj +oy +oT +mR +Sl +Sl +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 +"} +(55,1,1) = {" +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 +af +wa +wa +aI +bg +bL +bL +cY +dz +eK +et +et +fk +fk +et +et +hm +ic +iL +iL +jZ +kv +kV +lx +lR +mr +mR +nx +nZ +oz +oU +mR +mR +Sl +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 +"} +(56,1,1) = {" +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 +af +wa +wa +aJ +bg +bL +bL +cZ +dz +dU +eu +eM +fl +fl +eu +gE +hn +id +iM +ju +ju +ju +ju +Vr +ju +js +iQ +ny +oa +oA +oX +uh +iQ +Ex +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 +"} +(57,1,1) = {" +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 +af +wa +wa +aK +bg +bL +cu +da +dA +dV +ev +eN +fm +Xx +gk +gF +Qa +ie +iN +jv +ka +kw +kW +ly +lS +mt +mS +nz +ob +oB +oW +pp +iQ +Ex +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 +"} +(58,1,1) = {" +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 +af +wa +wa +aL +bg +bL +cv +db +dB +dW +ew +eO +fn +fM +gl +gG +ho +if +iO +jw +kb +kx +kX +lz +lT +mu +mT +nA +oa +oA +oX +pq +iQ +Ex +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 +"} +(59,1,1) = {" +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 +af +wa +wa +aM +bh +bM +cw +dc +wa +ex +dX +eP +fo +ex +ex +gH +hp +ig +iP +iQ +iQ +ky +iQ +iQ +lU +mv +mU +nB +od +oA +oX +JF +iQ +Ex +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 +"} +(60,1,1) = {" +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 +af +wa +wa +aN +bi +bN +HY +dd +wa +GF +rI +eQ +fp +fN +ex +ex +hq +ih +iQ +iQ +kc +kz +kY +iQ +lV +mw +mV +nC +oe +oC +oY +pr +iQ +Ex +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 +"} +(61,1,1) = {" +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 +ag +wN +wN +wN +bj +bO +cx +de +VB +xR +eS +eU +fq +fO +gm +TX +hr +ii +iQ +jx +kd +kA +kZ +lA +lW +mx +mW +nD +of +XJ +nD +ps +iQ +Ex +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 +"} +(62,1,1) = {" +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 +ai +am +ar +aO +bk +bP +cy +df +wN +dY +JZ +KQ +fr +fP +gn +Jl +hs +ij +iQ +jy +ke +kB +la +lB +lX +my +mX +nD +CT +Yr +nD +pt +iQ +Ex +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 +"} +(63,1,1) = {" +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 +ai +an +as +aP +bl +bQ +cz +dg +wN +dZ +YP +fQ +fs +eR +rx +gI +hr +ik +iQ +jz +kf +kC +lb +iQ +lY +mz +mY +nD +og +Cr +nD +pu +iQ +Ex +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 +"} +(64,1,1) = {" +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 +DU +ao +at +wN +bm +bR +cA +dh +wN +Xv +RA +go +ft +zq +gp +ex +ht +il +iR +iR +iR +iR +iR +iR +iR +iQ +iQ +iQ +iQ +iQ +iQ +iQ +iQ +Ex +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 +"} +(65,1,1) = {" +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 +VH +ap +au +aQ +bn +bS +SG +cB +wN +ex +Ww +eV +fu +fS +ex +ex +hu +Wd +iS +jA +kg +kD +lc +lC +rZ +mB +mB +mB +md +md +md +md +md +tb +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 +"} +(66,1,1) = {" +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 +VH +wN +wN +wN +wN +wN +wN +wN +wN +Zr +eT +eT +YU +eT +eT +Gb +hv +im +iT +jB +kh +jB +ld +jB +iT +mC +na +nG +oj +oE +pa +pv +oi +tb +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 +"} +(67,1,1) = {" +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 +aj +Uk +Uk +aR +bo +Uk +cC +di +Uk +ea +dC +UL +fv +fT +gr +gJ +hw +in +iU +jC +ki +kE +le +lD +lZ +mD +nb +nH +ok +oF +pb +pw +Vb +tb +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 +"} +(68,1,1) = {" +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 +aj +Uk +av +aS +bp +ba +bp +bp +Uk +ey +ey +ey +ey +ey +ey +ey +hq +io +iV +jD +iV +kF +lf +lE +ma +mE +mB +nI +ol +oG +pc +px +Vb +tb +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 +"} +(69,1,1) = {" +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 +ZX +SM +zJ +Wn +aw +aT +bq +bT +cD +dk +Uk +ec +ez +eX +fw +fU +gs +gK +hy +ip +iV +jE +iV +kG +lg +lF +mb +mE +nd +nJ +md +Rb +pd +py +CI +zp +zp +SM +Mm +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 +"} +(70,1,1) = {" +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 +aj +Uk +ax +aU +br +bU +cE +dl +dD +ed +eA +eY +fx +fV +gt +gL +hz +iq +iV +jF +iV +kH +lh +lG +mc +mB +mB +nK +mB +oI +pe +pz +md +md +tb +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 +"} +(71,1,1) = {" +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 +aj +Uk +ay +aV +bs +bV +cF +dm +Uk +ee +eB +eZ +fy +fW +gu +gM +hA +ir +iV +jG +iV +kI +li +lH +kF +md +ne +nL +om +oJ +pf +pA +DY +md +tb +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 +"} +(72,1,1) = {" +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 +aj +Uk +az +aW +bt +bW +cG +dn +Uk +Uk +Uk +fa +fz +fa +fa +fa +hB +is +fa +Nt +nF +nF +nF +nF +Pn +mF +nf +nM +on +oK +pg +pB +LN +md +tb +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 +"} +(73,1,1) = {" +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 +aj +Uk +aA +aX +bu +bX +cH +do +dE +ef +Uk +fb +fA +fY +gv +gN +hC +it +iW +jH +fY +kJ +lj +Ne +md +mG +ng +nN +oo +nN +nN +pC +ZG +md +tb +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 +"} +(74,1,1) = {" +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 +aj +Uk +aB +aY +bv +bY +cI +dp +dF +eg +Uk +fc +fB +iu +gw +fE +fD +iu +fE +gw +fC +fB +fc +Ne +me +mH +nh +nh +nh +nh +nh +me +vd +tb +tb +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +pO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(75,1,1) = {" +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 +aj +Uk +aC +aZ +bw +bZ +cJ +dq +dG +eh +Uk +fc +fC +iu +fE +fE +hD +hD +fE +fE +iu +fC +fc +Ne +me +mI +ni +mL +mL +mL +mL +wk +Fo +tb +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 +"} +(76,1,1) = {" +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 +aj +Uk +Uk +ba +bx +ca +cK +dr +dH +ei +Uk +fd +iu +fZ +fE +fE +hE +iv +fE +fE +OK +iu +ll +Ne +me +mJ +nj +nO +op +oL +ph +mL +me +tb +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 +"} +(77,1,1) = {" +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 +aj +Uk +aD +bb +by +cb +cJ +dr +dI +ej +Uk +fc +fD +fE +fE +gO +hF +hF +iX +fE +fE +fD +fc +Ne +me +mJ +nk +nP +oq +oM +pi +pD +me +Zn +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 +"} +(78,1,1) = {" +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 +aj +Uk +aF +bc +bz +cc +cJ +dt +dt +dt +Uk +fc +uW +fE +gx +gP +gP +No +iY +jI +fE +RG +fc +Ne +me +eW +gf +lm +mf +mh +mi +mi +mK +pL +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 +"} +(79,1,1) = {" +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 +aj +Uk +aF +bc +bA +cd +cJ +du +dJ +Rs +Uk +Zl +fE +fE +gy +gP +hG +ix +iZ +jJ +fE +fE +fc +Ne +me +mL +nm +nR +os +oO +pk +pF +me +WX +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 +"} +(80,1,1) = {" +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 +aj +Uk +aF +bc +bB +ce +cM +dv +dK +ek +Uk +fc +fE +fE +fE +gQ +hG +iy +ja +fE +fE +fE +fc +Ne +me +mL +nn +nS +ot +oP +pl +mL +me +tb +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 +"} +(81,1,1) = {" +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 +aj +Uk +aG +be +bC +cf +cN +dw +dL +Gj +Uk +fc +fE +ga +gz +gP +hH +PX +jb +jK +kj +fE +fc +Ne +me +mL +mL +mL +mL +mL +mL +mL +me +tb +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 +"} +(82,1,1) = {" +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 +aj +Uk +Uk +Uk +Uk +bd +cO +Uk +Uk +Uk +Uk +fc +FU +gb +gA +gR +hI +iz +jc +jL +kk +FU +fc +Ne +me +me +me +me +me +me +me +me +me +tb +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 +"} +(83,1,1) = {" +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 +ak +KF +XC +XC +MR +cg +cP +dx +dM +AU +iu +fc +fE +gc +gB +gP +hJ +iA +jd +jM +kl +fE +fc +sJ +mj +mj +mj +mj +mj +mj +tR +tR +tR +tR +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 +"} +(84,1,1) = {" +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 +DW +tS +KP +PD +PD +ch +cQ +dy +dN +el +eD +fe +fE +fE +fE +gS +Ow +Ow +je +fE +fE +fE +ln +jO +eC +mM +no +nT +mg +oR +bK +pG +tR +tR +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 +"} +(85,1,1) = {" +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 +ZX +SM +Cb +ak +ak +ID +ci +ID +ci +ID +SC +eE +ff +Lm +Lm +Lm +gT +Ow +iB +jf +Lm +Lm +Lm +lo +lI +mj +Lt +np +Lt +np +Lt +tR +pH +FA +SM +SM +Mm +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 +"} +(86,1,1) = {" +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 +ak +QH +cj +Vq +cj +dO +zW +iu +ff +fF +fF +Lm +fE +Ow +iC +jg +Lm +fF +fF +lo +sJ +Ne +dO +nq +NY +nq +CW +tR +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 +"} +(87,1,1) = {" +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 +dO +zW +Ne +fg +fG +ge +Lm +xr +fE +fE +jh +jN +ge +fG +lp +Ne +Ne +dO +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 +"} +(88,1,1) = {" +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 +tu +LP +Ne +fh +fH +fH +fH +gV +hK +hK +ji +jO +jO +jO +lq +Wq +ya +tu +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 +"} +(89,1,1) = {" +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 +LP +Ne +Ne +fI +fI +fI +gW +iu +fD +jj +iu +km +kL +Ne +Ne +LP +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 +"} +(90,1,1) = {" +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 +LP +tu +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +tu +LP +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 +"} +(91,1,1) = {" +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 +ty +tu +tu +tu +tu +tu +tu +tu +tu +tu +tu +tu +tu +tu +tu +ty +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 +"} +(92,1,1) = {" +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 +ty +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ty +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 +"} +(93,1,1) = {" +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 +MC +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +MC +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 +"} +(94,1,1) = {" +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 +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 +"} +(95,1,1) = {" +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 +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 +"} +(96,1,1) = {" +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 +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 +"} +(97,1,1) = {" +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 +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 +"} +(98,1,1) = {" +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 +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 +"} +(99,1,1) = {" +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 +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 +"} +(100,1,1) = {" +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 +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 +"} +(101,1,1) = {" +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 +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 +"} +(102,1,1) = {" +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 +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 +"} +(103,1,1) = {" +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 +ae +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 +"} +(104,1,1) = {" +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 +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 +"} +(105,1,1) = {" +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 +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 +"} +(106,1,1) = {" +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 +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 +"} +(107,1,1) = {" +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 +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 +"} +(108,1,1) = {" +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 +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 +"} +(109,1,1) = {" +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 +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 +"} +(110,1,1) = {" +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 +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 +"} +(111,1,1) = {" +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 +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 +"} +(112,1,1) = {" +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 +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 +"} +(113,1,1) = {" +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 +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 +"} +(114,1,1) = {" +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 +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 +"} +(115,1,1) = {" +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 +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 +"} +(116,1,1) = {" +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 +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 +"} +(117,1,1) = {" +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 +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 +"} +(118,1,1) = {" +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 +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 +"} +(119,1,1) = {" +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 +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 +"} +(120,1,1) = {" +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 +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 +"} diff --git a/mods/_maps/sentinel/maps/sentinel-2.dmm b/mods/_maps/sentinel/maps/sentinel-2.dmm new file mode 100644 index 0000000000000..84fc8e52da42e --- /dev/null +++ b/mods/_maps/sentinel/maps/sentinel-2.dmm @@ -0,0 +1,20288 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/space, +/area/space) +"ab" = ( +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ac" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/starboard) +"ad" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/aft) +"ae" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper) +"af" = ( +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"ag" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"ah" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/starboard) +"ai" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"aj" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"ak" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"al" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"am" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/maintenance/upper/starboard) +"an" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"ao" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"ap" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"aq" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/aft) +"ar" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"as" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"at" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"au" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/crew/hallway/upper/starboard) +"av" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/cryo) +"aw" = ( +/obj/structure/cable{ + d1 = 32; + icon_state = "32-1" + }, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/zpipe/down/supply{ + dir = 1 + }, +/obj/structure/lattice, +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/open, +/area/ship/patrol/maintenance/upper/starboard) +"ax" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/maintenance/upper/aft) +"ay" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"az" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"aA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"aB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"aD" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/yellow, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"aE" = ( +/obj/structure/closet/cabinet, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"aF" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/blue, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"aG" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/cryopod{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/cryo) +"aH" = ( +/obj/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/obj/machinery/computer/cryopod{ + pixel_y = 32 + }, +/obj/submap_landmark/spawnpoint/away_patrol/pilot1, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/cryo) +"aI" = ( +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/submap_landmark/spawnpoint/away_patrol/commander, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/cryo) +"aJ" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/cryopod, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/cryo) +"aK" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/brig) +"aL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"aM" = ( +/mob/living/exosuit/premade/powerloader/old, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/mech_recharger, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/aft) +"aN" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/item/stool, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"aO" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/crew/hallway/upper) +"aP" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/crew/hallway/upper) +"aQ" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/carpet/green, +/area/ship/patrol/crew/hallway/upper/starboard) +"aR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/bed/chair/rounded/brown{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"aT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/bed/chair/rounded/brown{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"aU" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/carpet/green, +/area/ship/patrol/crew/hallway/upper/starboard) +"aV" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/cryo) +"aW" = ( +/obj/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/cryo) +"aX" = ( +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/cryo) +"aY" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/cryopod, +/obj/structure/sign/warning/nosmoking_1{ + dir = 8; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/cryo) +"aZ" = ( +/obj/floor_decal/corner/red{ + dir = 5 + }, +/obj/structure/bed/padded, +/obj/item/bedsheet/orange, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"ba" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 1p"; + name = "Cell Locker" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"bb" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/crew/brig) +"bc" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 2p"; + name = "Cell Locker" + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"bd" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/hallway/upper) +"be" = ( +/obj/structure/closet/emcloset, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"bf" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"bg" = ( +/obj/structure/closet/emcloset, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"bh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/button/alternate/door/bolts{ + desc = "A remote control-switch for the engine core airlock hatch bolts."; + dir = 4; + id_tag = "cabinp_1"; + name = "Privacy Control"; + pixel_x = -24 + }, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"bi" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/item/music_player/boombox, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"bj" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/item/device/synthesized_instrument/guitar, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"bk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/button/alternate/door/bolts{ + desc = "A remote control-switch for the engine core airlock hatch bolts."; + dir = 8; + id_tag = "cabinp_2"; + name = "Privacy Control"; + pixel_x = 24 + }, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"bm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/submap_landmark/spawnpoint/away_patrol/surgeon, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/cryo) +"bn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/submap_landmark/spawnpoint/away_patrol/engineer, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/cryo) +"bo" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/cryopod, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/cryo) +"bp" = ( +/obj/floor_decal/corner/red{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/light/small{ + dir = 8; + icon_state = "bulb1" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"bq" = ( +/obj/floor_decal/corner/red, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 12; + pixel_y = 2 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"br" = ( +/obj/floor_decal/corner/red{ + dir = 8 + }, +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"bs" = ( +/obj/floor_decal/corner/red, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"bt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/aft) +"bu" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"bv" = ( +/turf/unsimulated/mask, +/area/ship/patrol/crew/hallway/upper) +"bw" = ( +/obj/floor_decal/corner/grey_alt, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"bx" = ( +/obj/floor_decal/corner/grey_alt, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"by" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"bz" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/civilian{ + id_tag = "cabinp_1"; + name = "Cabin One" + }, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"bA" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/civilian{ + id_tag = "cabinp_2"; + name = "Cabin Two" + }, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"bB" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/multi_tile/glass/sol{ + name = "Cryogenic Storage" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/patrol/crew/cryo) +"bC" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/patrol/crew/cryo) +"bD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/security{ + id_tag = "prisonentry"; + name = "Cell One" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"bE" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/patrol/crew/brig) +"bF" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/patrol/crew/brig) +"bG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/door/airlock/glass/security{ + id_tag = "prisonentry"; + name = "Cell Two" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"bH" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/aft) +"bI" = ( +/obj/paint/dark_gunmetal, +/turf/space, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/munition) +"bJ" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/munition) +"bK" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/space, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/munition) +"bL" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/upper) +"bM" = ( +/obj/floor_decal/corner/grey_alt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"bN" = ( +/obj/floor_decal/corner/grey_alt, +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"bO" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"bP" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/upper/starboard) +"bQ" = ( +/obj/floor_decal/corner/grey_alt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"bR" = ( +/obj/floor_decal/corner/grey_alt, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"bS" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/floor_decal/corner/grey_alt, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"bT" = ( +/obj/floor_decal/corner/grey_alt, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 23; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"bU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"bX" = ( +/obj/floor_decal/corner/grey_alt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"bY" = ( +/obj/floor_decal/corner/grey_alt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"bZ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"ca" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/brig) +"cb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"cc" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"cd" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"ce" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"cf" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"cg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"ch" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/aft) +"ci" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/catwalk, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"cj" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"ck" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/aft) +"cl" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"cm" = ( +/obj/machinery/button/blast_door{ + id_tag = "ofd_storagep"; + name = "Ammunition Storage Shutters"; + pixel_x = -6; + pixel_y = 24; + req_access = list("access_away_cavalry") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/munition) +"co" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8; + icon_state = "warningcorner" + }, +/obj/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/munition) +"cp" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 8; + icon_state = "warningcorner" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/munition) +"cr" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"cs" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"ct" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"cu" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/sol{ + name = "Crew Section"; + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/upper/starboard) +"cv" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"cw" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"cx" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"cy" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"cz" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"cA" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/upper/starboard) +"cB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"cC" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"cD" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"cE" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper/starboard) +"cF" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/airlock/multi_tile/glass/security{ + dir = 8; + name = "Brig Airlock" + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/brig) +"cG" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"cH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/red, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"cI" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"cJ" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"cK" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"cL" = ( +/obj/structure/flora/pottedplant/smelly, +/obj/structure/sign/warning/secure_area/armory{ + pixel_y = -32 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 22 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig) +"cM" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"cN" = ( +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "ofd_storagep"; + name = "Missile Storage Shutters" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/munition) +"cO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/munition) +"cP" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/maintenance/upper) +"cQ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper) +"cR" = ( +/obj/machinery/door/firedoor, +/obj/structure/sign/deck/first{ + pixel_x = -32 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/upper) +"cS" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/hallway/upper) +"cT" = ( +/obj/structure/table/woodentable, +/obj/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/item/device/flashlight/lamp/green, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"cU" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/bed/sofa/l/brown, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"cV" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/bed/sofa/r/brown, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"cW" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"cX" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + dir = 8 + }, +/obj/structure/closet/crate/trashcart, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"cY" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/patrol/crew/brig/office) +"cZ" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/patrol/crew/brig/office) +"da" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass/security{ + id_tag = "prisonentry"; + name = "Brig Entry" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig/office) +"db" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/brig/office) +"dc" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 2; + id_tag = "parmory"; + name = "Armory Shutters" + }, +/obj/structure/table/wallf{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/crew/brig/emergency_armory) +"dd" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/brig/emergency_armory) +"de" = ( +/obj/structure/closet/crate/medical, +/obj/floor_decal/industrial/outline/grey, +/obj/item/storage/firstaid/stab, +/obj/item/storage/firstaid/stab, +/obj/item/storage/firstaid/sleekstab, +/obj/item/storage/firstaid/sleekstab, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/crew/brig/emergency_armory) +"df" = ( +/obj/structure/closet/crate/internals, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/floor_decal/industrial/outline/grey, +/obj/item/tank/oxygen_emergency_extended, +/obj/item/tank/oxygen_emergency_extended, +/obj/item/tank/oxygen_emergency_extended, +/obj/item/tank/oxygen_emergency_extended, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/crew/brig/emergency_armory) +"dg" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"dh" = ( +/obj/structure/catwalk, +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"di" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/munition) +"dj" = ( +/obj/paint/meatstation/lab, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + id_tag = "abandoned_bar" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"dk" = ( +/obj/random/trash, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"dl" = ( +/obj/item/stool, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"dm" = ( +/obj/floor_decal/corner/black{ + dir = 5 + }, +/obj/structure/ladder{ + pixel_y = 6 + }, +/obj/floor_decal/industrial/warning/full, +/turf/simulated/floor, +/area/ship/patrol/crew/hallway/upper) +"dn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"do" = ( +/obj/structure/bed/sofa/r/brown{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/media/music_writer{ + pixel_x = -31 + }, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"dp" = ( +/turf/simulated/floor/carpet, +/area/ship/patrol/crew/hallway/upper/starboard) +"dq" = ( +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"dr" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"ds" = ( +/obj/machinery/vending/coffee{ + dir = 8; + name = "Better Hot Drinks machine"; + prices = list() + }, +/turf/simulated/floor/carpet/blue2, +/area/ship/patrol/crew/hallway/upper/starboard) +"dt" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/computer/telecomms/server{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/comms) +"du" = ( +/obj/structure/table/standard, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/floor_decal/corner/red/three_quarters{ + dir = 8 + }, +/obj/machinery/recharger/wallcharger{ + dir = 4; + pixel_x = -24; + pixel_y = -2 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig/office) +"dv" = ( +/obj/floor_decal/corner/red{ + dir = 5 + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 4; + icon_state = "warningcorner" + }, +/obj/machinery/computer/modular/preset/security, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig/office) +"dw" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4; + pixel_y = -16 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig/office) +"dx" = ( +/obj/machinery/button/blast_door{ + dir = 4; + id_tag = "parmory"; + name = "Desk Shutters Control"; + pixel_x = -24; + pixel_y = 11; + req_access = list("ACCESS_CAVALRY_EMERG_ARMORY") + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -22; + pixel_y = -6 + }, +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/crew/brig/emergency_armory) +"dy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/crew/brig/emergency_armory) +"dz" = ( +/obj/structure/sign/solgov{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/crew/brig/emergency_armory) +"dA" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/crew/brig/emergency_armory) +"dD" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/space, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/aft) +"dE" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"dF" = ( +/obj/structure/bed/chair/wood/maple{ + dir = 8 + }, +/obj/machinery/button/blast_door{ + id_tag = "abandoned_bar"; + pixel_y = 24 + }, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"dG" = ( +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"dH" = ( +/obj/structure/table/standard, +/obj/random/drinkbottle, +/turf/simulated/floor, +/area/ship/patrol/maintenance/upper) +"dI" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/random/trash, +/turf/simulated/floor, +/area/ship/patrol/maintenance/upper) +"dL" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"dM" = ( +/obj/floor_decal/corner/grey_alt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"dN" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"dO" = ( +/obj/structure/bed/sofa/l/brown{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"dQ" = ( +/obj/machinery/vending/cigarette{ + dir = 8; + name = "Better Cigarette machine"; + prices = list() + }, +/turf/simulated/floor/carpet/blue2, +/area/ship/patrol/crew/hallway/upper/starboard) +"dR" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/patrol/crew/comms) +"dS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/structure/bed/chair/rounded/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/patrol/crew/comms) +"dT" = ( +/obj/structure/sign/warning/nosmoking_1{ + dir = 8; + pixel_x = 32 + }, +/obj/machinery/computer/telecomms/monitor{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/comms) +"dU" = ( +/obj/structure/table/standard, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/floor_decal/corner/red{ + dir = 9 + }, +/obj/item/device/flashlight/lamp, +/obj/structure/filingcabinet/wallcabinet{ + pixel_x = -24 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig/office) +"dV" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig/office) +"dW" = ( +/obj/machinery/alarm{ + alarm_id = "xenobio3_alarm"; + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/industrial/warning/corner, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig/office) +"dX" = ( +/obj/structure/table/steel, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/stamp, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/crew/brig/emergency_armory) +"dY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/crew/brig/emergency_armory) +"dZ" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/clothing/suit/armor/laserproof, +/obj/item/clothing/head/helmet/ballistic, +/obj/item/clothing/head/helmet/ablative, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/crew/brig/emergency_armory) +"ea" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/item/clothing/accessory/armband/bluegold/away_solpatrol, +/obj/item/clothing/accessory/armband/bluegold/away_solpatrol, +/obj/item/clothing/accessory/armband/bluegold/away_solpatrol, +/obj/item/clothing/accessory/armband/bluegold/away_solpatrol, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/item/clothing/accessory/storage/holster/thigh, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/crew/brig/emergency_armory) +"eb" = ( +/obj/structure/table/rack, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/item/clothing/suit/armor/pcarrier/navy, +/obj/item/clothing/suit/armor/pcarrier/navy, +/obj/item/clothing/suit/armor/pcarrier/navy, +/obj/item/clothing/suit/armor/pcarrier/navy, +/obj/item/clothing/accessory/storage/pouches/navy, +/obj/item/clothing/accessory/storage/pouches/navy, +/obj/item/clothing/accessory/storage/pouches/navy, +/obj/item/clothing/accessory/storage/pouches/navy, +/obj/item/clothing/accessory/ubac/blue, +/obj/item/clothing/accessory/ubac/blue, +/obj/item/clothing/accessory/ubac/blue, +/obj/item/clothing/accessory/ubac/blue, +/obj/structure/extinguisher_cabinet{ + pixel_y = 0; + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/crew/brig/emergency_armory) +"ec" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"ed" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"ee" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"eg" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"eh" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper) +"ei" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"ej" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/crew/hallway/upper) +"ek" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"el" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/corner/grey_alt{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"em" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1"; + pixel_y = 16 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/corner/grey_alt{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"en" = ( +/obj/structure/bookcase, +/obj/item/book/manual/solgov_law, +/obj/item/book/manual/sol_sop, +/obj/item/book/manual/military_law, +/obj/item/book/manual/chef_recipes, +/obj/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"eo" = ( +/obj/structure/bed/sofa/r/brown{ + dir = 1 + }, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"ep" = ( +/obj/structure/bed/sofa/l/brown{ + dir = 1 + }, +/obj/machinery/light, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"eq" = ( +/obj/structure/flora/pottedplant/fern, +/obj/floor_decal/spline/fancy/wood, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"er" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 4 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/wood, +/area/ship/patrol/crew/hallway/upper/starboard) +"es" = ( +/obj/machinery/computer/modular/preset/civilian{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue2, +/area/ship/patrol/crew/hallway/upper/starboard) +"et" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/patrol/crew/comms) +"eu" = ( +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/comms) +"ev" = ( +/obj/floor_decal/corner/red{ + dir = 9 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -24; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig/office) +"ew" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig/office) +"ex" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/brig/office) +"ey" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/highsecurity{ + name = "Emergency Armory" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/crew/brig/emergency_armory) +"ez" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/crew/brig/emergency_armory) +"eA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/crew/brig/emergency_armory) +"eB" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/crew/brig/emergency_armory) +"eD" = ( +/obj/item/mop, +/turf/simulated/floor, +/area/ship/patrol/maintenance/upper) +"eE" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/alarm{ + alarm_id = "misc_research"; + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"eF" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/crew/toilet) +"eG" = ( +/obj/floor_decal/corner/black{ + dir = 5 + }, +/obj/structure/ladder{ + pixel_y = 6 + }, +/obj/floor_decal/industrial/warning/full, +/obj/structure/extinguisher_cabinet{ + pixel_x = -24; + dir = 4 + }, +/turf/simulated/floor, +/area/ship/patrol/crew/hallway/upper) +"eH" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"eJ" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/airlock_brace, +/obj/item/airlock_brace, +/obj/item/airlock_brace, +/obj/item/airlock_brace, +/obj/item/material/twohanded/jack/titanium, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/brig/office) +"eK" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/obj/item/barrier, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/brig/office) +"eL" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/vending/security{ + dir = 1; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/brig/office) +"eM" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/table/steel, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/maglight, +/obj/item/device/flashlight/maglight, +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/floor_decal/industrial/outline/grey, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/crew/brig/emergency_armory) +"eN" = ( +/obj/machinery/power/apc/critical{ + name = "south bump"; + pixel_y = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable, +/obj/structure/table/steel, +/obj/item/melee/telebaton, +/obj/item/melee/telebaton, +/obj/item/melee/telebaton, +/obj/floor_decal/industrial/outline/grey, +/obj/item/melee/telebaton, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/dark, +/area/ship/patrol/crew/brig/emergency_armory) +"eO" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/gun/energy/gun, +/obj/item/gun/energy/gun, +/obj/item/gun/energy/gun, +/obj/item/gun/energy/gun, +/obj/structure/closet/secure_closet/guncabinet{ + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/crew/brig/emergency_armory) +"eP" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/item/gun/energy/ionrifle, +/obj/item/gun/energy/ionrifle, +/obj/structure/closet/secure_closet/guncabinet{ + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/crew/brig/emergency_armory) +"eQ" = ( +/obj/floor_decal/industrial/outline/grey, +/obj/item/gun/energy/stunrevolver/rifle, +/obj/item/gun/energy/stunrevolver/rifle, +/obj/item/gun/energy/stunrevolver/rifle, +/obj/item/gun/energy/stunrevolver/rifle, +/obj/structure/closet/secure_closet/guncabinet{ + req_access = list("ACCESS_CAVALRY") + }, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/turf/simulated/floor/tiled/dark/monotile, +/area/ship/patrol/crew/brig/emergency_armory) +"eS" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/munition) +"eV" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"eW" = ( +/obj/structure/hygiene/shower{ + dir = 4 + }, +/obj/machinery/button/alternate/door/bolts{ + dir = 8; + id_tag = "showerp"; + name = "Door Lock"; + pixel_x = 24; + pixel_y = -8 + }, +/obj/structure/curtain/open/shower, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/toilet) +"eX" = ( +/obj/structure/hygiene/toilet{ + pixel_y = 14 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/button/alternate/door/bolts{ + dir = 8; + id_tag = "toiletp"; + name = "Door Lock"; + pixel_x = 24; + pixel_y = -8 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/toilet) +"eZ" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fa" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/vending/cola{ + name = "Better Robust Softdrinks"; + prices = list() + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fb" = ( +/obj/machinery/vending/snack{ + name = "Better Getmore Chocolate Corp"; + prices = list() + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fc" = ( +/obj/structure/sign/double/solgovflag/left{ + pixel_y = 32 + }, +/obj/structure/table/standard, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fd" = ( +/obj/structure/sign/double/solgovflag/right{ + pixel_y = 32 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fe" = ( +/obj/machinery/vending/coffee{ + dir = 2; + name = "Better Hot Drinks machine"; + prices = list() + }, +/obj/floor_decal/corner/blue/diagonal, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"ff" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/vending/cigarette{ + name = "Better Cigarette machine"; + prices = list() + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fg" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/crew/kitchen) +"fh" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/cooker/grill, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fi" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/cooker/fryer, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fj" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/kitchen) +"fk" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper) +"fl" = ( +/obj/machinery/door/airlock{ + id_tag = "showerp"; + name = "Shower" + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/toilet) +"fm" = ( +/obj/machinery/door/airlock{ + id_tag = "toiletp"; + name = "Toilet" + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/toilet) +"fn" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"fo" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"fp" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"fq" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/patrol/crew/kitchen) +"fr" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fs" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"ft" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fu" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fv" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/glass/sol{ + name = "Galley" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/patrol/crew/kitchen) +"fw" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fx" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fy" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fz" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/requests_console{ + department = "Kitchen"; + departmentType = 2; + name = "Galley RC"; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fA" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fB" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Galley Maintenance" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/crew/kitchen) +"fC" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/aft) +"fD" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/aft) +"fE" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/ship_munition/disperser_charge/emp/military, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/munition) +"fF" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"fG" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"fH" = ( +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -15 + }, +/obj/item/storage/mirror{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/toilet) +"fI" = ( +/obj/structure/hygiene/urinal{ + pixel_y = 28 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/toilet) +"fJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/toilet) +"fK" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock{ + name = "Head" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/toilet) +"fL" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"fM" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 4 + }, +/obj/floor_decal/corner/grey_alt{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"fN" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"fO" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/glass/sol{ + name = "Mess Hall"; + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/white/monotile, +/area/ship/patrol/crew/kitchen) +"fP" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fQ" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fR" = ( +/obj/structure/bed/chair, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fS" = ( +/obj/structure/bed/chair, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fT" = ( +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 25; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fU" = ( +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fV" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/item/material/kitchen/rollingpin, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fW" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/item/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fX" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/microwave{ + pixel_x = -3; + pixel_y = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"fY" = ( +/obj/structure/hygiene/sink{ + dir = 8; + pixel_x = -15 + }, +/obj/item/storage/mirror{ + pixel_x = -32 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/toilet) +"fZ" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/toilet) +"ga" = ( +/obj/structure/flora/pottedplant/large, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/toilet) +"gb" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"gc" = ( +/obj/floor_decal/corner/grey_alt{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"gd" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"ge" = ( +/obj/machinery/door/firedoor, +/obj/wallframe_spawn/reinforced, +/obj/paint/dark_gunmetal, +/turf/simulated/floor/plating, +/area/ship/patrol/crew/kitchen) +"gf" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gg" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gh" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gi" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/music_tape/custom{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/music_tape/custom{ + pixel_x = -1; + pixel_y = -3 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gk" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/item/material/kitchen/utensil/spoon{ + pixel_x = -3; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gl" = ( +/obj/structure/noticeboard{ + dir = 8; + pixel_x = 32 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gm" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gn" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/closet/crate/trashcart, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"go" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/chemical_dispenser/bar_soft{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gp" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo"; + pixel_x = -5 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/kitchen) +"gq" = ( +/obj/item/device/radio/intercom{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/kitchen) +"gr" = ( +/obj/machinery/gibber, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/kitchen) +"gt" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/maintenance/upper/port) +"gv" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -24; + dir = 4 + }, +/obj/item/trash/popcorn, +/obj/item/trash/liquidfood, +/obj/item/trash/liquidfood, +/obj/item/trash/tastybread, +/obj/structure/closet/crate/trashcart, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gw" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/item/trash/liquidfood, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gx" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gy" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/item/reagent_containers/food/snacks/liquidfood, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gz" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/item/trash/proteinbar, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gA" = ( +/obj/structure/table/marble, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "kitchenshowp"; + name = "Kitchen Shutters" + }, +/obj/machinery/fabricator/micro/bartender{ + pixel_x = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gB" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/item/reagent_containers/food/snacks/mint, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gC" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/stack/package_wrap/cargo_wrap, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gD" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/cooker/cereal, +/obj/structure/extinguisher_cabinet{ + pixel_y = 0; + pixel_x = 24; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gE" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/kitchen{ + req_access = list() + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/kitchen) +"gF" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/kitchen) +"gG" = ( +/obj/structure/kitchenspike, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/kitchen) +"gH" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"gI" = ( +/obj/machinery/alarm{ + dir = 0; + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"gJ" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/crew/hallway/upper) +"gK" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/computer/modular/preset/civilian{ + dir = 4 + }, +/obj/item/device/radio/intercom/entertainment{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gL" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gM" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gN" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gO" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gP" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gQ" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gR" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gS" = ( +/obj/structure/table/marble, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 22 + }, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/item/reagent_containers/spray/cleaner, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"gT" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/closet/crate/freezer, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/kitchen) +"gU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/kitchen) +"gV" = ( +/obj/structure/closet/fridge, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/kitchen) +"gW" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/port) +"gX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"ha" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"hb" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"hc" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"hd" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"he" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"hf" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/freezer{ + name = "Galley Cold Room" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/kitchen) +"hg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/kitchen) +"hh" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/kitchen) +"hi" = ( +/obj/structure/closet/fridge/meat, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/ship/patrol/crew/kitchen) +"hj" = ( +/obj/landmark/map_data{ + height = 2 + }, +/turf/space, +/area/space) +"hk" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/port) +"hl" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/machinery/vending/hydroseeds{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"hm" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/catwalk, +/obj/random/trash, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"hn" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"ho" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/structure/bookcase, +/obj/item/book/manual/sol_sop, +/obj/item/book/manual/solgov_law, +/obj/item/book/manual/military_law, +/obj/item/book/manual/nt_regs, +/obj/item/book/manual/chef_recipes, +/obj/item/book/manual/barman_recipes, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"hp" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/item/tray, +/obj/item/material/kitchen/utensil/fork{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/material/kitchen/utensil/fork{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/material/kitchen/utensil/fork{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/material/kitchen/utensil/spoon{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/material/kitchen/utensil/spoon{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/material/kitchen/utensil/spoon{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable, +/obj/item/material/kitchen/utensil/spoon{ + pixel_x = -4 + }, +/obj/item/material/kitchen/utensil/fork{ + pixel_x = 4; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"hq" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/vending/fitness{ + dir = 1; + prices = list() + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"hr" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/table/standard, +/obj/item/storage/box/cups, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"hs" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 22 + }, +/obj/structure/reagent_dispensers/water_cooler, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"ht" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/vending/dinnerware{ + dir = 1 + }, +/obj/machinery/button/blast_door{ + id_tag = "kitchenshowp"; + name = "Kitchen Showcase"; + pixel_x = -26 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"hu" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/structure/table/marble, +/obj/machinery/reagent_temperature, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"hv" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/light, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable, +/obj/structure/table/marble, +/obj/machinery/reagent_temperature, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"hw" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/reagentgrinder, +/obj/item/reagent_containers/glass/beaker{ + pixel_x = 5 + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"hx" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/cooker/oven, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"hy" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance{ + name = "Galley Maintenance" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/crew/kitchen) +"hB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"hC" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"hD" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/port) +"hE" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 23; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"hG" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"hH" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch/maintenance, +/obj/floor_decal/industrial/hatch/yellow, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/aft) +"hI" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/maintenance/solgov/clean, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"hJ" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/accessory, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"if" = ( +/obj/structure/lattice, +/turf/space, +/area/space) +"ij" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 1 + }, +/obj/floor_decal/industrial/danger/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/waste) +"jg" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/waste) +"jx" = ( +/obj/structure/table/standard, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"jS" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "patrol_pd" + }, +/obj/structure/cable, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"ka" = ( +/obj/structure/catwalk, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"km" = ( +/obj/structure/lattice, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/space, +/area/space) +"kr" = ( +/obj/machinery/computer/arcade, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"kP" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "wdisposalp" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/waste) +"lD" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"lE" = ( +/obj/structure/closet/secure_closet/hydroponics{ + req_access = list() + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"ma" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"mn" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/aft) +"ms" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 23; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/munition) +"mv" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"mG" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"nc" = ( +/obj/floor_decal/corner/grey_alt, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ship/patrol/crew/hallway/upper) +"nd" = ( +/obj/structure/janitorialcart, +/turf/simulated/floor, +/area/ship/patrol/maintenance/upper) +"np" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/waste) +"nP" = ( +/obj/machinery/conveyor{ + dir = 10; + id = "wdisposalp" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/waste) +"nS" = ( +/obj/item/stack/material/phoron/ten, +/obj/structure/closet/crate/secure/phoron, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"ok" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/floor_decal/corner_techfloor_grid/full{ + dir = 8 + }, +/obj/structure/table/standard, +/obj/floor_decal/industrial/danger{ + dir = 9 + }, +/obj/random/cash, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/waste) +"os" = ( +/obj/structure/table/standard, +/obj/random/junk, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"ou" = ( +/obj/structure/table/woodentable, +/obj/item/material/ashtray/plastic, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"oA" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"oM" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/maintenance/upper/munition) +"pk" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "ofd_storagep"; + name = "Missile Storage Shutters" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/munition) +"pl" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/aft) +"pm" = ( +/obj/machinery/light/small, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/aft) +"pp" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"pu" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "ofd_storagep"; + name = "Missile Storage Shutters" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/munition) +"qe" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"qG" = ( +/obj/floor_decal/industrial/outline/blue, +/obj/structure/ship_munition/disperser_charge/emp/military, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/munition) +"qJ" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/coin, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"qM" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/port) +"rw" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper) +"rC" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "wdisposalp" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/waste) +"rG" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/starboard) +"rH" = ( +/obj/paint/dark_gunmetal, +/turf/space, +/turf/simulated/wall, +/area/ship/patrol/maintenance/upper/aft) +"rJ" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"rS" = ( +/obj/machinery/floodlight{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper) +"rV" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"rZ" = ( +/obj/structure/table/woodentable, +/obj/item/reagent_containers/food/drinks/shaker, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"ss" = ( +/obj/structure/catwalk, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"st" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/munition) +"sD" = ( +/obj/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"sL" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/munition) +"th" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/waste) +"ti" = ( +/obj/structure/catwalk, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"tw" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"tE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/warning/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/munition) +"tL" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"ub" = ( +/obj/structure/catwalk, +/obj/random/trash, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"ue" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/structure/table/rack, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"ul" = ( +/obj/machinery/smartfridge/drying_rack, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"uV" = ( +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable, +/obj/structure/closet/crate/trashcart, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/waste) +"vg" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/port) +"vi" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"vz" = ( +/obj/structure/table/marble, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "kitchenshowp"; + name = "Kitchen Shutters" + }, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"vF" = ( +/obj/machinery/vending/boozeomat{ + req_access = list() + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"vK" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Disposal System Access" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/waste) +"vY" = ( +/obj/structure/lattice, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"wd" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "patrol_pd" + }, +/obj/machinery/pointdefense{ + initial_id_tag = "patrol_pd" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"wv" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/machinery/cooker/candy, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"wx" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance/solgov/clean, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"wB" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped, +/obj/random/contraband, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"xs" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 8; + icon_state = "bulb1" + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper) +"xK" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/waste) +"xT" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/turf/simulated/floor, +/area/ship/patrol/maintenance/upper/aft) +"xY" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/skele_stand, +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"zg" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/munition) +"zz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"zO" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/starboard) +"zP" = ( +/obj/structure/ship_munition/disperser_charge/explosive/military, +/obj/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/munition) +"zX" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, +/obj/structure/ship_munition/disperser_charge/emp/military, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/munition) +"Ae" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"Ao" = ( +/obj/paint/meatstation/lab, +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "abandoned_bar" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"Aq" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"AF" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/aft) +"AI" = ( +/obj/random/closet, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"AQ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/command{ + name = "Communication Relay" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/comms) +"AX" = ( +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"Bi" = ( +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"Bt" = ( +/obj/item/stack/cable_coil/yellow, +/obj/floor_decal/industrial/outline/yellow, +/obj/item/mech_component/manipulators, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/aft) +"Bx" = ( +/obj/machinery/vending/hydronutrients{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"CA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/railing/mapped, +/obj/floor_decal/industrial/warning/half, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/munition) +"CW" = ( +/obj/structure/table/rack, +/obj/item/storage/toolbox/mechanical, +/obj/random/junk, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/aft) +"Dj" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper) +"Du" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/ship_munition/disperser_charge/fire/military, +/obj/floor_decal/industrial/outline/orange, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/munition) +"Dx" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "patrol_pd" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"Dz" = ( +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/aft) +"ET" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper) +"Ff" = ( +/obj/structure/table/standard, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"Fk" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"Fp" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/computer/modular/preset/civilian{ + dir = 4 + }, +/obj/item/device/radio/intercom/entertainment{ + dir = 4; + pixel_x = -22 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/ship/patrol/crew/kitchen) +"FT" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "patrol_pd" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"Gf" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"GH" = ( +/obj/machinery/door/firedoor, +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/blast/shutters{ + dir = 4; + id_tag = "ofd_storagep"; + name = "Missile Storage Shutters" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/munition) +"GS" = ( +/obj/structure/ship_munition/disperser_charge/explosive/military, +/obj/floor_decal/industrial/outline/red, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/munition) +"GW" = ( +/obj/structure/ship_munition/disperser_charge/fire/military, +/obj/floor_decal/industrial/outline/orange, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/munition) +"Hm" = ( +/obj/structure/bed/chair/wood/maple{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"Hw" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/aft) +"In" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/aft) +"IB" = ( +/obj/structure/table/woodentable, +/obj/random/cash, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"IT" = ( +/obj/structure/closet/crate/trashcart, +/obj/random/junk, +/obj/random/junk, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/waste) +"IW" = ( +/obj/structure/mattress, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"Jd" = ( +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"Jj" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/waste) +"Jp" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/hallway/upper/starboard) +"JD" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/aft) +"JX" = ( +/obj/paint/meatstation/lab, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper) +"Km" = ( +/obj/paint/dark_gunmetal, +/obj/structure/sign/warning/server_room{ + dir = 1 + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/comms) +"Kr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"Kz" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 5 + }, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/waste) +"Lf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/ship/patrol/crew/comms) +"Lt" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/random/junk, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"LU" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/structure/closet/toolcloset, +/obj/item/tape_roll, +/obj/random/tech_supply, +/obj/item/storage/toolbox/syndicate, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 23; + req_access = list("ACCESS_CAVALRY") + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/comms) +"LZ" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/port) +"Mb" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped, +/obj/random/maintenance/solgov/clean, +/obj/random/maintenance/solgov/clean, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"Mj" = ( +/obj/floor_decal/corner_techfloor_grid{ + dir = 5 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/waste) +"Mn" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall, +/area/ship/patrol/maintenance/upper/waste) +"Mw" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/floor_decal/corner_techfloor_grid{ + dir = 9 + }, +/obj/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/waste) +"NR" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/waste) +"NU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/waste) +"NY" = ( +/obj/random/closet, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"OL" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/aft) +"Pb" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/trash, +/obj/machinery/light/small{ + dir = 8; + icon_state = "bulb1" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"PE" = ( +/obj/structure/table/standard, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/random/maintenance/solgov/clean, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"PF" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/maintenance/solgov/clean, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"PK" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"PT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"QF" = ( +/obj/structure/catwalk, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"Rp" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/random/trash, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"RI" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"RL" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped{ + dir = 1 + }, +/obj/random/maintenance/solgov/clean, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"RT" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper) +"RX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"Sj" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/airless, +/area/ship/patrol/maintenance/upper/waste) +"Tm" = ( +/obj/structure/table/rack, +/obj/structure/railing/mapped, +/obj/random/maintenance/solgov/clean, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"Tq" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/highsecurity{ + name = "Missile Storage" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/munition) +"TK" = ( +/obj/random/closet, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"TN" = ( +/obj/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"TP" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper) +"TQ" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/aft) +"TS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"TX" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/aft) +"Ua" = ( +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/port) +"Uq" = ( +/obj/paint/dark_gunmetal, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/starboard) +"Us" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 8; + icon_state = "bulb1" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"Uu" = ( +/obj/structure/catwalk, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"UE" = ( +/obj/structure/catwalk, +/obj/machinery/alarm{ + pixel_y = 24; + req_access = list("ACCESS_CAVALRY") + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"UV" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"Vd" = ( +/obj/structure/catwalk, +/obj/random/trash, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"Vr" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"VA" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/catwalk, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/port) +"VV" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"Wa" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/crew/comms) +"Wd" = ( +/obj/structure/railing/mapped{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) +"Wi" = ( +/obj/machinery/telecomms/allinone/away_scg_patrol, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monotile, +/area/ship/patrol/crew/comms) +"Wu" = ( +/obj/structure/disposalpipe/segment, +/obj/paint/meatstation/lab, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper/waste) +"Wx" = ( +/obj/random/junk, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"Xb" = ( +/obj/paint/meatstation/lab, +/obj/wallframe_spawn/reinforced, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "abandoned_bar" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"Xn" = ( +/obj/structure/catwalk, +/obj/random/maintenance/solgov/clean, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"Xp" = ( +/obj/machinery/pointdefense{ + initial_id_tag = "patrol_pd" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/reinforced{ + map_airless = 1 + }, +/area/space) +"XL" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"XY" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "wdisposalp" + }, +/obj/structure/plasticflaps/airtight, +/turf/simulated/floor/tiled/techfloor, +/area/ship/patrol/maintenance/upper/waste) +"Ym" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper) +"Yr" = ( +/obj/paint/dark_gunmetal, +/turf/simulated/wall/r_wall, +/area/ship/patrol/maintenance/upper) +"YI" = ( +/obj/machinery/door/airlock/multi_tile/glass/maintenance{ + dir = 8 + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/patrol/maintenance/upper/aft) +"YP" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/aft) +"YZ" = ( +/obj/structure/lattice, +/obj/structure/catwalk, +/turf/space, +/area/space) +"Zf" = ( +/obj/item/stool/bar/padded, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood, +/area/ship/patrol/maintenance/upper) +"Zq" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ship/patrol/maintenance/upper/starboard) + +(1,1,1) = {" +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 +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 +"} +(2,1,1) = {" +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 +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 +"} +(3,1,1) = {" +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 +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 +"} +(4,1,1) = {" +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 +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 +"} +(5,1,1) = {" +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 +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 +"} +(6,1,1) = {" +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 +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 +"} +(7,1,1) = {" +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 +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 +"} +(8,1,1) = {" +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 +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 +"} +(9,1,1) = {" +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 +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 +"} +(10,1,1) = {" +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 +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 +"} +(11,1,1) = {" +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 +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 +"} +(12,1,1) = {" +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 +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 +"} +(13,1,1) = {" +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 +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 +"} +(14,1,1) = {" +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 +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 +"} +(15,1,1) = {" +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 +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 +"} +(16,1,1) = {" +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 +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 +"} +(17,1,1) = {" +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 +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 +"} +(18,1,1) = {" +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 +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 +"} +(19,1,1) = {" +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 +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 +"} +(20,1,1) = {" +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 +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 +"} +(21,1,1) = {" +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 +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 +"} +(22,1,1) = {" +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 +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 +"} +(23,1,1) = {" +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 +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 +"} +(24,1,1) = {" +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 +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 +"} +(25,1,1) = {" +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 +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 +"} +(26,1,1) = {" +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 +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 +"} +(27,1,1) = {" +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 +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 +"} +(28,1,1) = {" +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 +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 +"} +(29,1,1) = {" +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 +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 +"} +(30,1,1) = {" +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 +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 +"} +(31,1,1) = {" +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 +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 +"} +(32,1,1) = {" +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 +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 +"} +(33,1,1) = {" +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 +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 +"} +(34,1,1) = {" +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 +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 +"} +(35,1,1) = {" +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 +ab +ab +ab +ab +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 +"} +(36,1,1) = {" +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 +ab +ab +ab +wd +ab +ab +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 +"} +(37,1,1) = {" +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 +ab +ab +ab +ab +ab +lD +ab +ab +ab +ab +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 +"} +(38,1,1) = {" +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 +ab +ab +ab +ab +ab +ab +lD +ab +ab +ab +ab +ab +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 +"} +(39,1,1) = {" +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 +ab +ab +ab +ab +ab +ab +ab +lD +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +hj +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 +"} +(40,1,1) = {" +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 +ab +ab +ab +ab +ab +ab +ab +ab +lD +ab +ab +ab +ab +ab +ab +ab +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 +"} +(41,1,1) = {" +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 +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lD +ab +ab +ab +ab +ab +ab +ab +ab +ab +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 +"} +(42,1,1) = {" +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 +FT +ab +ab +ab +vY +vY +vY +ab +ab +ae +Ao +Xb +Ao +ae +ab +ab +ab +ab +ab +ab +ab +FT +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 +"} +(43,1,1) = {" +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 +ab +lD +ab +ab +ab +vY +vY +vY +ab +ab +dj +ou +Hm +dG +dj +ab +ab +ab +ab +ab +ab +ab +lD +ab +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 +"} +(44,1,1) = {" +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 +ab +ab +lD +ab +ab +ab +ab +ab +ab +ab +ae +ae +dF +ee +dG +ae +ae +ab +ab +ab +ab +ab +ab +lD +ab +ab +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 +"} +(45,1,1) = {" +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 +ab +ab +ab +lD +ab +ab +ae +ae +ae +ae +ae +ae +dG +dG +Zf +dE +dk +ae +ae +ae +ae +ae +ab +ab +lD +ab +ab +ab +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 +"} +(46,1,1) = {" +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 +ab +ab +ab +lD +ae +ae +ae +Yr +Yr +Yr +Yr +Yr +dl +dG +Zf +dE +dG +vF +Yr +Yr +Yr +ae +ae +ae +lD +ab +ab +ab +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 +"} +(47,1,1) = {" +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 +ab +ab +ab +JX +ae +Yr +Yr +Yr +ET +rS +rS +Yr +kr +dG +Zf +IB +dG +rZ +Yr +rV +Yr +Yr +Yr +ae +JX +ab +ab +ab +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 +"} +(48,1,1) = {" +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 +ab +ab +ae +JX +Yr +Yr +pp +Vr +bu +ti +bu +cP +dG +Wx +Zf +dE +dG +cP +Yr +AX +xs +rw +Yr +Yr +JX +ae +ab +ab +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 +"} +(49,1,1) = {" +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 +ab +ab +ae +RT +Dj +Ym +Ym +Ym +Ym +mv +Ym +cQ +eV +eV +eg +eE +eV +fk +fF +Xn +Ym +Ym +Ym +Dj +TP +ae +ab +ab +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 +"} +(50,1,1) = {" +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 +ab +ab +ab +ac +zO +zO +ah +am +bd +bd +bd +bd +bd +bd +Yr +eh +cP +cP +cP +fG +XL +gt +gt +gW +hk +hk +Ua +ab +ab +ab +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 +"} +(51,1,1) = {" +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 +ab +ab +ab +ab +ac +zO +Tm +ag +Bi +bd +bv +bv +bv +bv +bd +dH +ei +eF +eF +eF +eF +eF +eF +gH +mG +ul +hk +Ua +ab +ab +ab +ab +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 +"} +(52,1,1) = {" +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 +ab +ab +ab +ab +ac +zO +ue +ag +Bi +bd +bv +bv +bv +bv +bd +dI +ei +eF +eW +fl +fH +fY +eF +PK +mG +Bx +hk +Ua +ab +ab +ab +ab +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 +"} +(53,1,1) = {" +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 +ab +ab +ab +ab +ac +zO +UV +ag +aN +bd +bv +bv +bv +bv +bd +eD +ei +eF +eF +eF +fI +fZ +eF +gI +mG +hl +hk +Ua +ab +ab +ab +ab +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 +"} +(54,1,1) = {" +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 +ab +ab +ab +ab +ab +ac +zO +TK +ag +jx +bd +bv +bv +bv +bv +bd +nd +ei +eF +eX +fm +fJ +ga +eF +gH +mG +lE +hk +Ua +ab +ab +ab +ab +ab +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 +"} +(55,1,1) = {" +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 +ab +ab +ab +ab +ac +ac +zO +am +ah +aO +bd +bd +bL +bL +bd +bd +aO +ej +aO +aO +aO +fK +aO +aO +aO +gW +hk +hk +Ua +Ua +ab +ab +ab +ab +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 +"} +(56,1,1) = {" +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 +Dx +RX +RX +rG +rG +Uq +Uq +Zq +Ae +aO +be +bw +bM +cr +aO +dm +dL +ek +eG +aO +fn +fL +gb +be +aO +mG +mG +hk +LZ +vg +vg +RX +RX +jS +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 +"} +(57,1,1) = {" +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 +ab +ab +ab +ac +zO +zO +ag +ag +tw +aP +bf +nc +bN +cs +cR +bx +dM +el +eH +bL +fo +fM +gc +bf +gJ +gX +hm +mG +qM +hk +Ua +ab +ab +ab +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 +"} +(58,1,1) = {" +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 +ab +ab +ab +ac +zO +af +ag +Vd +ag +aO +bg +by +bO +ct +cS +dn +dN +em +dn +cS +fp +fN +gd +bg +aO +NY +hn +gX +hB +hk +Ua +ab +ab +ab +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 +"} +(59,1,1) = {" +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 +ab +ab +ab +ac +zO +ag +Gf +au +au +au +au +au +bP +cu +au +au +au +au +au +aO +fq +fO +ge +aO +aO +fg +fg +wB +hC +hk +Ua +ab +ab +ab +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 +"} +(60,1,1) = {" +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 +ab +ab +ab +ac +zO +ag +nS +au +aD +aQ +bh +bz +bQ +cv +cT +do +dO +en +au +eZ +fr +fP +gf +gv +gK +Fp +fg +Mb +hC +hk +Ua +ab +ab +ab +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 +"} +(61,1,1) = {" +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 +ab +ab +ab +ac +zO +ah +am +au +aE +aR +bi +au +bR +cw +cU +dp +dp +eo +au +fa +fs +fQ +gg +fP +gL +gO +fg +fg +hD +hk +Ua +ab +ab +ab +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 +"} +(62,1,1) = {" +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 +ab +ab +ab +ac +zO +ag +oA +au +au +au +au +au +bS +cx +cV +dp +dp +ep +au +fb +ft +fR +Ff +gw +gM +gO +ho +fg +hC +hk +Ua +ab +ab +ab +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 +"} +(63,1,1) = {" +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 +ab +ab +ab +ac +zO +ag +PE +au +aE +aT +bj +au +bT +cy +cW +dq +dq +eq +au +fc +fu +fS +gi +gx +gN +ha +hp +fg +hC +hk +Ua +ab +ab +ab +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 +"} +(64,1,1) = {" +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 +ab +ab +ab +ac +zO +UE +os +au +aF +aU +bk +bA +bU +cz +cX +dr +dr +er +au +fd +ft +fR +gh +gh +gM +gO +hq +fg +VA +hk +Ua +ab +ab +ab +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 +"} +(65,1,1) = {" +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 +ab +ab +ab +ac +zO +ai +an +av +av +av +av +av +bP +cA +Jp +ds +dQ +es +Jp +fe +ft +fR +gk +gy +gM +gO +hr +fg +hE +hk +Ua +ab +ab +ab +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 +"} +(66,1,1) = {" +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 +ab +ab +ab +ac +zO +aj +Wd +av +aG +aV +aG +av +bR +cB +Wa +Wa +Wa +Wa +Wa +ff +ft +fT +gl +gz +gO +gO +hs +fg +hC +hk +Ua +ab +ab +ab +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 +"} +(67,1,1) = {" +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 +ab +ab +ab +ac +zO +ak +am +av +aH +aW +bm +bB +bX +cC +Km +LU +dR +Wi +Wa +fg +fv +fg +fg +gA +vz +vz +fg +fg +hC +hk +Ua +ab +ab +ab +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 +"} +(68,1,1) = {" +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 +ab +ab +ab +ac +zO +aj +RL +av +aI +aX +bn +bC +bY +cD +AQ +Lf +dS +et +Wa +fh +fw +fU +gm +gm +gP +hb +ht +fg +hC +hk +Ua +ab +ab +ab +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 +"} +(69,1,1) = {" +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 +ab +ab +ab +ac +zO +aj +qJ +av +aJ +aY +bo +av +bZ +cE +Wa +dt +dT +eu +Wa +fi +fx +fV +wv +gB +gQ +hc +hu +fg +qe +hk +Ua +ab +ab +ab +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 +"} +(70,1,1) = {" +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 +ab +ab +ab +ac +zO +Rp +Fk +av +av +av +av +av +ca +cF +Wa +Wa +Wa +Wa +Wa +fj +fy +fW +gn +gC +gR +hd +hv +fg +ub +hk +Ua +ab +ab +ab +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 +"} +(71,1,1) = {" +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 +ab +ab +ab +ac +zO +al +ao +aw +aK +aZ +bp +bD +cb +cG +cY +du +dU +ev +eJ +fj +fz +fA +fA +fA +fA +he +hw +fg +qe +hk +Ua +ab +ab +ab +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 +"} +(72,1,1) = {" +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 +ab +ab +ab +ac +zO +af +ap +Wd +aK +ba +bq +bE +cc +cH +cZ +dv +dV +ew +eK +fj +fA +fX +go +gD +gS +he +hx +fg +hG +hk +Ua +ab +ab +ab +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 +"} +(73,1,1) = {" +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 +ab +ab +ab +ad +TX +TX +aq +ax +aK +bb +bb +bb +cd +cI +da +dw +dW +ex +eL +fj +fB +fg +fg +fg +fg +hf +fg +fg +hH +TX +ad +ab +ab +ab +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 +"} +(74,1,1) = {" +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 +Dx +RX +RX +AF +OL +OL +ar +ay +aK +bc +br +bF +ce +cJ +db +db +db +ey +db +TX +QF +fg +gp +gE +gT +hg +fg +vi +VV +OL +AF +RX +RX +jS +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 +"} +(75,1,1) = {" +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 +ab +ab +ab +ad +TX +TX +Kr +AI +aK +aZ +bs +bG +cf +cK +dc +dx +dX +ez +eM +TX +ss +fg +gq +gF +gU +hh +hy +rJ +rJ +TX +ad +ab +ab +ab +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 +"} +(76,1,1) = {" +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 +ab +ab +ab +ad +TX +TX +as +az +aK +aK +aK +aK +cg +cL +dd +dy +dY +eA +eN +TX +Jd +fg +gr +gG +gV +hi +fg +rJ +hI +TX +ad +ab +ab +ab +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 +"} +(77,1,1) = {" +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 +ab +ab +ab +ad +ad +TX +at +aA +Pb +tL +ax +TX +ch +TX +dd +dz +dZ +eB +eO +TX +fC +fg +fg +fg +fg +fg +fg +rJ +hJ +TX +ad +ab +ab +ab +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 +"} +(78,1,1) = {" +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 +ab +ab +ab +ab +ad +TX +TX +aB +aL +TS +bt +PT +ci +TX +de +dA +ea +dA +eP +TX +rJ +rJ +fD +rJ +rJ +rJ +rJ +rJ +TX +TX +ad +ab +ab +ab +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 +"} +(79,1,1) = {" +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 +ab +ab +ab +ab +ad +ad +TX +TX +TX +TX +TX +xY +cj +TX +df +dA +eb +dA +eQ +TX +rJ +Lt +TX +TX +TX +TX +TX +TX +TX +ad +ad +ab +ab +ab +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 +"} +(80,1,1) = {" +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 +ab +ab +ab +ab +ab +ad +ad +ad +TX +TX +TX +TX +ck +TX +TX +TX +TX +TX +TX +TX +fD +TX +TX +TX +TX +ad +ad +ad +ad +ad +ab +ab +ab +ab +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 +"} +(81,1,1) = {" +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 +ab +ab +ab +ab +ab +ab +ab +ad +ad +TX +TX +bH +cl +cM +dg +Us +ec +rJ +rJ +rJ +rJ +wx +TX +TX +ad +ad +ab +ab +ab +ab +ab +ab +ab +ab +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 +"} +(82,1,1) = {" +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 +ab +ab +ab +ab +ab +ab +ab +ab +ad +TX +TX +mn +dh +TN +TN +TN +ed +pl +Uu +rJ +ka +RI +TX +TX +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +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 +"} +(83,1,1) = {" +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 +ab +ab +ab +ab +ab +ab +ab +ab +ad +TX +TX +bI +GH +cN +pk +pu +oM +rH +Dz +YI +ax +rH +TX +TX +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +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 +"} +(84,1,1) = {" +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 +ab +ab +ab +ab +ab +ab +ab +ad +ad +TX +bJ +cm +GS +GS +zP +bJ +CW +Aq +rJ +wx +ax +TX +ad +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +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 +"} +(85,1,1) = {" +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 +ab +ab +ab +ab +ab +ab +ab +ad +TX +bJ +co +st +tE +eS +bJ +aM +Aq +rJ +IW +TX +TX +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +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 +"} +(86,1,1) = {" +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 +ab +ab +if +if +if +ab +ad +TX +bJ +CA +GS +GS +zP +bJ +Bt +Aq +rJ +wx +TX +TX +ad +ab +ab +if +if +if +ab +ab +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 +"} +(87,1,1) = {" +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 +ab +ad +ad +bJ +ms +GW +GW +Du +bJ +YP +sD +rJ +PF +TX +ad +ad +ab +ab +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 +"} +(88,1,1) = {" +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 +Dx +RX +AF +sL +cp +cO +di +di +Tq +zz +rJ +rJ +pm +JD +AF +RX +RX +jS +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 +"} +(89,1,1) = {" +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 +ab +ad +bK +qG +zX +qG +fE +bJ +xT +ma +dg +In +dD +ad +ab +ab +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 +"} +(90,1,1) = {" +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 +ab +ad +zg +bJ +bJ +bJ +bJ +oM +vK +Mn +Mn +ax +TQ +ad +ab +ab +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 +"} +(91,1,1) = {" +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 +ab +ad +TQ +TX +th +nP +kP +kP +Kz +np +Mn +TX +TQ +ad +ab +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 +"} +(92,1,1) = {" +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 +ad +Hw +TX +th +XY +ok +Mw +ij +uV +th +TX +Hw +ad +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 +"} +(93,1,1) = {" +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 +Hw +ad +th +xK +Mj +rC +NU +IT +th +ad +Hw +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 +"} +(94,1,1) = {" +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 +km +ad +th +jg +Wu +Jj +NR +th +th +ad +km +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 +"} +(95,1,1) = {" +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 +km +ad +ad +ad +ad +Sj +ad +ad +ad +ad +km +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 +"} +(96,1,1) = {" +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 +km +YZ +aa +aa +if +aa +if +aa +aa +YZ +km +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 +"} +(97,1,1) = {" +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 +km +aa +aa +aa +aa +aa +aa +aa +aa +aa +km +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 +"} +(98,1,1) = {" +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 +Xp +aa +aa +aa +aa +aa +aa +aa +aa +aa +Xp +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 +"} +(99,1,1) = {" +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 +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 +"} +(100,1,1) = {" +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 +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 +"} +(101,1,1) = {" +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 +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 +"} +(102,1,1) = {" +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 +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 +"} +(103,1,1) = {" +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 +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 +"} +(104,1,1) = {" +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 +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 +"} +(105,1,1) = {" +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 +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 +"} +(106,1,1) = {" +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 +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 +"} +(107,1,1) = {" +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 +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 +"} +(108,1,1) = {" +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 +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 +"} +(109,1,1) = {" +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 +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 +"} +(110,1,1) = {" +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 +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 +"} +(111,1,1) = {" +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 +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 +"} +(112,1,1) = {" +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 +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 +"} +(113,1,1) = {" +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 +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 +"} +(114,1,1) = {" +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 +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 +"} +(115,1,1) = {" +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 +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 +"} +(116,1,1) = {" +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 +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 +"} +(117,1,1) = {" +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 +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 +"} +(118,1,1) = {" +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 +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 +"} +(119,1,1) = {" +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 +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 +"} +(120,1,1) = {" +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 +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 +"} diff --git a/mods/_master_files/code/game/gamemodes/ert.dm b/mods/_master_files/code/game/gamemodes/ert.dm new file mode 100644 index 0000000000000..40c93e2be5d74 --- /dev/null +++ b/mods/_master_files/code/game/gamemodes/ert.dm @@ -0,0 +1,21 @@ +/datum/map_template/ruin/antag_spawn/ert + prefix = "mods/antagonists/maps/" + suffixes = list("ert_base.dmm") + shuttles_to_initialise = list(/datum/shuttle/autodock/multi/antag/rescue) + apc_test_exempt_areas = list(/area/map_template/rescue_base = NO_SCRUBBER|NO_VENT|NO_APC) + +/datum/shuttle/autodock/multi/antag/rescue + destination_tags = list( + "nav_ert_deck1", + "nav_ert_deck2", + "nav_ert_deck3", + "nav_ert_deck4", + "nav_ert_deck5", + "nav_ert_dock", + "nav_ert_start" + ) + +// Areas + +/area/map_template/rescue_base/start + base_turf = /turf/unsimulated/floor/techfloor diff --git a/mods/_master_files/code/game/objects/effects/decals/contraband.dm b/mods/_master_files/code/game/objects/effects/decals/contraband.dm new file mode 100644 index 0000000000000..386d991a81f34 --- /dev/null +++ b/mods/_master_files/code/game/objects/effects/decals/contraband.dm @@ -0,0 +1,4 @@ +/obj/structure/sign/poster/set_poster(poster_type) + . = ..() + var/singleton/poster/design = GET_SINGLETON(poster_type) + icon = design.icon diff --git a/mods/_master_files/code/game/objects/structures/crates_lockers/closets/_closet_appearance_definitions.dm b/mods/_master_files/code/game/objects/structures/crates_lockers/closets/_closet_appearance_definitions.dm new file mode 100644 index 0000000000000..9ab1e94bd47bb --- /dev/null +++ b/mods/_master_files/code/game/objects/structures/crates_lockers/closets/_closet_appearance_definitions.dm @@ -0,0 +1,5 @@ +/singleton/closet_appearance + base_icon = 'mods/_master_files/icons/obj/closets/bases/closet.dmi' + +/singleton/closet_appearance/wall + base_icon = 'icons/obj/closets/bases/wall.dmi' diff --git a/mods/_master_files/code/game/world.dm b/mods/_master_files/code/game/world.dm new file mode 100644 index 0000000000000..5823163839251 --- /dev/null +++ b/mods/_master_files/code/game/world.dm @@ -0,0 +1,4 @@ +/world/save_mode(the_mode) + var/error = rustg_file_write(the_mode, "data/mode.txt") + if (error) + crash_with(error) diff --git a/mods/_master_files/code/modules/clothing/spacesuits/spacesuits.dm b/mods/_master_files/code/modules/clothing/spacesuits/spacesuits.dm new file mode 100644 index 0000000000000..94f1663f4f64c --- /dev/null +++ b/mods/_master_files/code/modules/clothing/spacesuits/spacesuits.dm @@ -0,0 +1,6 @@ +//Spacesuit +//Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together. +// Meaning the the suit is defined directly after the corrisponding helmet. Just like below! + +/obj/item/clothing/suit/space + valid_accessory_slots = list(ACCESSORY_SLOT_INSIGNIA, ACCESSORY_SLOT_ARMBAND, ACCESSORY_SLOT_OVER) diff --git a/mods/_master_files/code/modules/culture_descriptor/_culture.dm b/mods/_master_files/code/modules/culture_descriptor/_culture.dm new file mode 100644 index 0000000000000..fd7bb47b8f904 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/_culture.dm @@ -0,0 +1,36 @@ +/singleton/cultural_info/get_text_details() + . = list() + var/list/spoken_langs = get_spoken_languages() + if(LAZYLEN(spoken_langs)) + . += "Основной язык(и): [english_list(spoken_langs)]." + if(LAZYLEN(secondary_langs)) + . += "Доступные языки: [english_list(secondary_langs)]." + if(!isnull(economic_power)) + . += "Экономическая сила: [round(100 * economic_power)]%" + +#define COLLAPSED_CULTURE_BLURB_LEN 48 +/singleton/cultural_info/get_description(header, append, verbose = TRUE) + var/list/dat = list() + dat += "
    " + dat += "" + if(append) + dat += "" + dat += "
    " + var/translatedname = name + if(header) + if(nickname) + translatedname = nickname + header += translatedname + dat += "[header ? header : "[desc_type]:[translatedname]"]
    " + if(verbose) + dat += "" + dat += "[jointext(get_text_details(), "
    ")]" + dat += "
    " + dat += "
    " + if(verbose || length(get_text_body()) <= COLLAPSED_CULTURE_BLURB_LEN) + dat += "[get_text_body()]" + else + dat += "[copytext(get_text_body(), 1, COLLAPSED_CULTURE_BLURB_LEN)] \[...\]" + dat += "[append]
    " + return jointext(dat, null) +#undef COLLAPSED_CULTURE_BLURB_LEN diff --git a/mods/_master_files/code/modules/culture_descriptor/culture/cultures_adherent.dm b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_adherent.dm new file mode 100644 index 0000000000000..7ad7ec9ddde98 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_adherent.dm @@ -0,0 +1,7 @@ +/singleton/cultural_info/culture/adherent + nickname = "Часовые" + description = "Часовые - это относительно свободное сообщество полуорганических машин-слуг - адхерантов, \ + созданных ныне вымершей цивилизацией. Они чтят память своих давно погибших создателей, уничтоженных Криком - \ + солнечной вспышкой, стершей большую часть записей о создателях и повредившей многие сенсорные и управляющие \ + системы, ошеломив и дезориентировав выживших адхерантов на сотни лет. Теперь, наладив контакт с человечеством, \ + Часовые неуверенно делают первые шаги к месту в широком галактическом сообществе." diff --git a/mods/_master_files/code/modules/culture_descriptor/culture/cultures_diona.dm b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_diona.dm new file mode 100644 index 0000000000000..f03bdbd99a795 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_diona.dm @@ -0,0 +1,5 @@ +/singleton/cultural_info/culture/diona + nickname = "Гештальт Дионея" + description = "Существовать гештальтом Дионея - значит быть облаком крошечных искорок, формирующих костёр и \ + поющих в темноту, бесконечно любопытных и вечно в поиске новых знаний, лишь чтобы вернуться в хор, \ + породивший \"тебя\"." diff --git a/mods/_master_files/code/modules/culture_descriptor/culture/cultures_human.dm b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_human.dm new file mode 100644 index 0000000000000..b35495cb72aa2 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_human.dm @@ -0,0 +1,224 @@ +/singleton/cultural_info/culture/generic + nickname = "Малоизвестная культура" + description = "Вы из одной из небольших, относительно неизвестных культур, разбросанных по Галактике." + +/singleton/cultural_info/culture/human + nickname = "Человек" + description = "Вы из одной из разнообразных культур человеческих планет." + +/singleton/cultural_info/culture/human/martian_surfacer + nickname = "Марсианин, житель поверхности" + description = "Вы происходите с поверхности Марса. Вы выросли в одном из множества фермерских общин, либо в \ + одном из крупных городов, таких как Олимпус. Большинство жителей поверхности известны как монсийцы - самая \ + большая этническая группа поверхности планеты. Довольно много жителей поверхности имеют достойное воспитание, \ + и представляют средний уровень комфорта, ожидаемый в пространстве ЦПСС. Почти все жители поверхности такие \ + же, как и многие по всей Галактике, хотя некоторые испытывают неприязнь к другим марсианским культурным \ + группам или слишком гордятся своим происхождением в целом, как в случае с гидеонцами, доходя до того, \ + что постоянно про нее упоминают." + +/singleton/cultural_info/culture/human/martian_tunneller + nickname = "Марсианин, житель подгорода" + description = "Вы один из жителей ПодГородов Марса. ПодГорода, изначально возведенные в качестве \"временных\" \ + мест проживания, в то время как строятся города над ними, с тех пор переросли свои первоначальные размеры и \ + теперь распространились под поверхностью красной планеты. Туннельщики, несмотря на такой же доступ к \ + одинаковым благам и услугам, как и у жителей поверхности, всё же несколько беднее своих надземных сородичей, \ + как результат своего менее удачного расположения, а также из-за высокой преступности, происходящей от веков \ + небрежного отношения и большей заинтересованности марсианского правительства в делах на поверхности. \ + Большинство туннельщиков упрямы и неунывающи, но недоверчивы и осторожны с чужаками, а не-марсиан и вовсе \ + открыто не любят." + +/singleton/cultural_info/culture/human/luna_poor + nickname = "Селенианин, низший класс" + description = "Вы родом с Луны - естественного спутника Земли и дома богатейших, наикультурнейших или \ + влиятельных представителей человечества. К сожалению, вы совершенно точно к ним не относитесь... Хотя Луна и \ + известна своим богатством, искусством, культурой и старыми деньгами, она также является домом приличному \ + количеству рабочих с доходом ниже среднего, а то и вовсе низким. Обычно, это работники множества корпораций, \ + занятые в сфере обслуживания в одной из нескольких префектур, или жители Нью-Вегаса. Лунную \"бедноту\" \ + обычно возмущают богатые, из-за их финансовой, культурной и политической власти и влияния на жизни бедных." + +/singleton/cultural_info/culture/human/luna_rich + nickname = "Селенианин, высший класс" + description = "Вы родом с Луны - естественного спутника Земли и дома богатейших, наикультурнейших или \ + влиятельных представителей человечества. К счастью, вы часть этой хорошо обеспеченной элиты. Богачи Луны \ + имеют политическое и экономическое влияние не только на ней, но и в различных корпорациях, организациях и \ + даже правительственных органах ЦПСС. Лунный высший класс не весь одинаков; обычно разделяясь между новыми \ + корпоративными богачами и богатыми аристократами из старых династий, многие члены которых смотрят на \ + \"новичков\" свысока. Большая часть элиты на Луне впутаны в \"Игру\", постоянные политические манёвры и \ + интриги среди различных фракций и влиятельных личностей с намерениями, выходящими далеко за пределы споров \ + между префектурами." + +/singleton/cultural_info/culture/human/venusian_upper + nickname = "Венерианин, житель Зон" + description = "Вы из одной из многих Зон Венеры. Паря над поверхностью планеты на гигантских платформах, \ + вы принадлежите ко многим, кто живет на одной из самых пышных планет ЦПСС. Как жителю Венеры, вам не привыкать \ + к роскоши, богатству и развлечениям. Венера в основном привлекает туристов, и многие из постоянных жителей \ + работают в соответствующей сфере, имея довольно средний доход. Высший класс намного богаче, состоя из \ + владельцев отелей, казино и курортов, а также политиков, банкиров или просто богатых пенсионеров." + +/singleton/cultural_info/culture/human/venusian_surfacer + nickname = "Венерианин, житель поверхности" + description = "Вы с поверхности Венеры, из числа занятых в шахтерстве, на производстве или в сфере услуг. \ + Жители поверхности Венеры довольно бедны, особенно если сравнивать с обитателями Зон, и имеют куда как более \ + низкие стандарты жизни, чем живущие сверху. Выносливые люди, проводящие большую часть своего времени за \ + работой в довольно небезопасных условиях для того, чтобы содержать общество над ними, жители поверхности \ + ценят честную работу, солидарность, единство и демократию. К несчастью, хотя они и поддерживают благородные \ + идеалы, их реальная ситуация не всегда им соответствует, и большая часть поверхности Венеры изобилует \ + организованной преступностью, сепаратистскими группами и другими преступными группировками." + +/singleton/cultural_info/culture/human/belter + nickname = "Белтер" + description = "Вы с Цереры. Церериане и жители главного пояса астероидов Солнечной системы в разговорной \ + речи известны как «Белтеры». Традиционно люди, укоренившиеся в горнодобывающей промышленности, сегодня заняты \ + главным образом в сфере машиностроения, судостроения и технического обслуживания. \ + Белтеры довольно разнообразны, и что-то вроде плавильного котла из огромного количества временных рабочих, \ + экипажей автоперевозчиков и правительственных и корпоративных служащих, базирующихся вокруг великих верфей \ + Цереры. Это привело к тому, что культура белтеров в основном связана с переменами, новыми людьми и новым \ + опытом, а также с чувством гордости за свою работу, поскольку репутация кораблестроение Цереры широко \ + известна в человеческом пространстве." + +/singleton/cultural_info/culture/human/plutonian + nickname = "Плутонианин" + description = "Вы с Плутона, один из многих обитателей этого жестокого и неумолимого мира. В течение многих \ + лет Плутон находился в состоянии медленного разложения и упадка, в результате чего большая часть \ + инфраструктуры планеты стала нестабильной и распалась. Это, в сочетании с безудержной коррупцией и большим \ + влиянием криминальных организаций на большей части планеты, привело к тому, что у людей Плутона плохая \ + репутация, а граждане здесь имеют дурную славу. Сами люди, однако, обычно просто мечтают о том, чтобы \ + покинуть это место и переехать в более комфортные места. К сожалению, несмотря на усилия ЦПСС, многие \ + плутониане, как правило, поддерживают преступные связи, даже за пределами планеты." + +/singleton/cultural_info/culture/human/earthling + nickname = "Землянин" + description = "Вы с Земли - колыбели человечества. Культура Земли такая же, какой она была на протяжении \ + веков, со старыми национальными государствами, хоть и не столь политически важными, но все же культурно \ + значимыми для многих людей по всей галактике, так как все уходят корнями на эту планету. Несмотря на то, \ + что географически они не так разнообразны, как в прошлом, в большинстве стран есть по крайней мере две \ + аркологии, составляющие большую часть своего населения, а остальные люди живут в небольших деревнях или в \ + одной из многочисленных общин по охране природы. Длительный период восстановления Земли привел к тому, \ + что большая часть населения была осведомлена об окружающей среде и активно защищает природные ресурсы, \ + стремясь избежать ошибок прошлого. Большинство землян - довольный народ, который считает себя самым близким \ + к природе и хранителями наследия человечества." + +/singleton/cultural_info/culture/human/ceti_north + nickname = "Эпсилонец, северянин" + description = "Вы с северного полюса Эпсилон Кита, и, вероятно, происходите из клаустрофобных \"серых джунглей\" северных мегаполисов - таких, как город Айкон. \ + Граждане ПСС, происходящие с севера, обычно имеют больше возможностей для получения лучшей работы и ведут более комфортный образ жизни по сравнению с жителями юга. \ + Айкон также является технологической столицей Эпсилон Кита, предоставляя своим жителям доступ к лучшему образованию и новейшим технологиям." + +/singleton/cultural_info/culture/human/ceti_south + nickname = "Эпсилонец, южанин" + description = "Вы с южного полюса Эпсилон Кита. Вероятно, вы живете в одном из охваченных смогом городов, таких как столица региона Скадде, или в одном из отдаленных поселков. \ + Граждане ПСС, происходящие с юга, куда более ограничены в доступе к благам и карьерным возможностям по сравнению с жителями севера, но все же достигают успеха в жизни даже в столь непростых экономических условиях. \ + Скадде — это экономический центр для труда специалистов и разнорабочих; кроме того, именно здесь расположена штаб-квартира Hephaestus Industries в системе Тау Кита." + +/singleton/cultural_info/culture/human/ceti_interstate + nickname = "Эпсилонец, апатрид" + description = "Участок между северным и южным полюсами Эпсилон Кита называется Межгосударственным муниципальным регионом Кита. Те, кто живет в этой знойной пустыне, скорее всего оказались здесь из необходимости, а не по собственному выбору. \ + Большую часть промышленности в регионе составляют горнодобывающие предприятия, гидропонные фермы и независимые предприятия, не принадлежащие к правительствам севера или юга. \ + Регион малонаселен, и среди его обитателей встречаются как ищущие возможности предприниматели, так и те, кто извлекает выгоду из отсутствия защиты со стороны полиции и сил планетарной обороны." + +/singleton/cultural_info/culture/human/foster + nickname = "Фостернианец" + description = "Мир Фостера когда-то считался слишком холодным и пустынным для проживания, но десятилетия проживания Фостернианцев превратили его в продуктивное и популярное место. \ + Жители Фостера традиционно отличаются своей находчивостью и мотивацией, а также предпочтением жить в более холодных условиях. \ + Снег - часть культуры жителей Мира Фостера, а имя себе они сделали, исследуя и ловя рыбу в термальных океанах. " + +/singleton/cultural_info/culture/human/tadmor + nickname = "Тадморец" + description = "Тадмор — один из наиболее успешных колониальных проектов ЦПСС, в результате чего его культура богата и возвышенна.\ + Тадморийцы, живущие в основном в расщелинах пустынного мира, наиболее известны своим культурным пацифизмом и отвращением к участию в \ + Гайском Конфликте, который рассматривается всеми жителями либо как момент гордости, либо как пятно в богатой истории планеты, берущей свои корни ещё на Марсе. " + +/singleton/cultural_info/culture/human/iolaus + nickname = "Иоланец" + description = "Старый колониальный проект Терранского Содружества, переживший период вынужденной изоляции, Иолай объявил себя столицей молодого и шовинистического Альянсом Фронтира. \ + Многие иоланские беженцы сейчас оказались в ловушке за пределами Коперниканской блокады, но независимо от того, лояльны они или предательствуют, все иоланы имеют долгую историю уверенности в своих силах, \ + сильное чувство личной трудовой этики и культурное представление о том, что люди являются винтиками в машине, которая служит щитом для всего Фронтира. " + +/singleton/cultural_info/culture/human/brahe + nickname = "Брахиец" + description = "Культура брахийцев, родом из океанского мира Браге, отличается корпоративным доминированием и академическим мастерством. Ценящие исследования и образование, а также \ + обладущие тягой к исследованиям, брахийцы оказываются отрезанными от своего родного мира Коперниканской блокадой и своими отношениями с молодым Альянсом Фронтира \ + которые можно описать одновременно как напряженные, так и как синергирующие." + +/singleton/cultural_info/culture/human/eos + nickname = "Еосер" + description = "В культуре народа Еоса, крупнейшего населенного пункта системы Гелиоса, в последние десятилетия доминировала история Гайского Конфликта. \ + Разрушение Врат Гелиоса глубоко укоренилось в культурной памяти этих людей, и поэтому многие Еосеры воспитаны с сильным чувством национализма и \ + тесной связью с Силами Обороны ЦПСС." + +/singleton/cultural_info/culture/human/pirx_high + nickname = "Прикс, нобилитет" + description = "Правящий класс Административного Района города Юдоу, обучно называемый 'Лордами Прикса' из-за их влияния на городскую собственность, правительство и сферу услуг, \ + и инфраструктуру. Будучи отрезанными от Солнечной системы и годами не встречавшими угроз своей власти, сделало их крайне консервативными и реакционерными с акцентом на \ + традиционный стиль жизни и семейное наследие." + +/singleton/cultural_info/culture/human/pirx_bug + nickname = "Прикс, жукоед" + description = "Жукоеды, названные так за превалирование протеина из насекомых в их рационе внутри Административного Района города Юдоу, составляют большинство жителей Прикс Прайм. \ + Снимая жильё и зарабатывая на хоть какое-то жильё в рукотворных каньонах города, они известны за их невнятный, экзотичесикй диалект, который делает их крайне заметными. Их диета и \ + манера одеваться делает их легко отличимыми как чужаков в любом уголке пространства ЦПСС." + +/singleton/cultural_info/culture/human/pirx_frontier + nickname = "Прикс, фронтирец" + description = "Коалиция Фронтира Прикса зачастую рассматривается как последний фронтир в пространстве ЦПСС. Известные своими прочными чувствами к приключениям и связью с природой, люди что населяют \ + неизведанные джунгли Прикс Прайм считаются жителями сущей глухомани в области технологий, обрвазования и товарного производства. Их существование тесно связано с тёплым воздухом джунглей Греющего Дерева \ + которое встречается повсюду на этой зелёной планете, а также мириадами экзотических форм жизни, обитающих в чистой воде Прикса." + +/singleton/cultural_info/culture/human/spacer + nickname = "Спейсер, центральные системы" + description = "Вы родились посреди космического пространства между мирами, достаточно близко к развитым \ + планетам. Вы из одной из бесчисленных космических станций, орбитальных платформ, дальнобойных грузовых \ + кораблей, гейтвеев или других объектов, которые занимают огромные пространства в космосе. Спейсеры \ + центральных миров привыкли к жизни быстрых пересадок, постоянно перемещаясь от места к месту, встречая \ + множество людей и принимая многие культуры, близкие к дому человечества. Как таковые, спейсеры центральных \ + миров, как правило, заняты работой, общительны и мобильны, редко довольные оседлой жизнью. Они почти \ + повсеместно знают, как жить и работать среди пустоты и более готовы к космическим сюрпризам, чем их \ + привязанные к планетам коллеги." + +/singleton/cultural_info/culture/human/offworld + nickname = "Спейсер, фронтир" + description = "Вы родились посреди космического пространства между мирами, достаточно близко к обширной \ + границе территории ЦПСС или за ее пределами. Здесь такие вещи, как национальная идентичность и культура, \ + значат меньше; те, кто живет так далеко от центральных миров, беспокоятся только за свою семью и близких \ + друзей, а не за какую-то большую группу. Рожденные на одном из дальнобойных грузовых кораблей, которые \ + перемещаются между мирами фронтира, доставляющие жизненно важные товары, или на одном из одиноких форпостов \ + фронтира, - такие люди растут в маленьких, тесных пространствах с немногими другими людьми и, как правило, \ + наиболее знакомы со старыми, надежными, но просроченными технологиями. Независимые люди на фронтире более \ + склонны к изоляционизму и самостоятельности." + +/singleton/cultural_info/culture/human/confederate + nickname = "Терранец" + description = "Вы с Терры (не с Земли), что находится в системе Гильгамеш. Это столичный мир Гильгамешской \ + Колониальной Конфедерации. Её жители воплощают в себе все то, что значит быть частью ГКК. К сожалению, годы, \ + прошедшие после Гайского Конфликта, оказались нелегкими для Терры, и длительный период восстановления \ + экономики не облегчил жизнь. Люди Терры, как правило, заняты в военном, промышленном, правительственном или \ + сервисном секторах, при этом особое внимание уделяется военной службе. Терранцы сегодня, как правило, бедные, \ + озлобленные и несколько разбитые люди, злые и обиженные из-за своих потерь в Гайском Конфликте. Воспитание на \ + Терре подчеркивает странное сочетание служения государству, либерализма и милитаризма." + +/singleton/cultural_info/culture/human/confederate_colony + nickname = "Конфедерат, житель колоний" + description = "Вы с окраин Гильгамешской Колониальной Конфедерации. Терранские колонисты имеют разные взгляды на их государство, верные сильному национальному духу, соединяющему ГКК, но \ + каждый из них разделяет общую историю экспроприирования ресурсов колониальным центром и рекрутский набор. Быть из нации призывников значит уметь выживать в любых условиях, \ + будь то стагнирующая экономика, или военная служба далеко от родной планеты. Конфедераты сегодня, как правило, бедные, озлобленные и несколько разбитые люди, злые и обиженные из-за своих потерь в Гайском Конфликте. \ + Воспитание в пространстве Конфедерации подчеркивает странное сочетание служения государству, либерализма и милитаризма." + +/singleton/cultural_info/culture/human/gaia + nickname = "Гайец" + description = "Гайя - единственная планета в системе Галилей, служащая Демилитаризованной Зоной между ЦПСС и ТКК. \ + Сам со себе, это сельскохозяйственный мир, хотя различные конфликты на поверхности оставили неизгладимое \ + впечатление на облике планеты. Она делится на контролируемую ЦПСС Южную Гайю и контролируемую ТКК Северную Гайю, \ + при этом Новая Венеция остается нейтральной внутри ДМЗ. Население планеты остается разделенным даже спустя 10 лет \ + после Гайского конфликта. Новая Венеция находится на берегу озера Кабот. Пока мир разделен, нынешний мэр Новой \ + Венеции служит жизненно важным посредником между обеими сторонами. Местные жители устали от войны и жаждут увидеть \ + свои семьи снова. Они сильно пострадали во время войны и боятся, что это еще не конец." + +/singleton/cultural_info/culture/human/other + nickname = "Неопределенная культура" + description = "Некоторые люди происходят из мест, о которых никто никогда не слышал, или мест, слишком \ + необузданных и фантастических, чтобы внести их в Галактическую Энциклопедию. Вы один из них." + +/singleton/cultural_info/culture/human/vatgrown + nickname = "Выращенный" + description = "Вы были искусственно выращены в капсуле, либо клонированы, либо генетически модифицированы, \ + и ваш кругозор соответственно отклоняется от нормального человеческого уровня." diff --git a/mods/_master_files/code/modules/culture_descriptor/culture/cultures_ipc.dm b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_ipc.dm new file mode 100644 index 0000000000000..adc80c982eaf0 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_ipc.dm @@ -0,0 +1,37 @@ +/singleton/cultural_info/culture/ipc + nickname = "ИПС первого поколения" + description = "Позитроникой первого поколения называют оригинальные наработки Chiron IM. По сравнению с современными \ + машинами, они были упрощенными, негибкими и подверженными отказам. После выхода на рынок следующего поколения позитроники, \ + их производят только для самых простых, рутинных задач под прямым руководством человека или более продвинутого собрата, \ + но редко можно встретить устройства, произведённые ещё до выкупа Chiron IM. У представителей первого поколения слабо развито \ + чувство собственного достоинства, они полностью ориентированы на выполнение задач с рудиментарной и похожей на роботов \ + личностью, чем к интеллекту человеческого уровня. Они обладают лишь очень ограниченной способностью к обучению и полагаются \ + на запрограммированную информацию для руководства своими действиями и реакциями." + +/singleton/cultural_info/culture/ipc/gen2 + nickname = "ИПС второго поколения" + description = "Представители второго поколения являются наиболее распространенным видом позитроников, они были значительно \ + усовершенствованы компанией Xion Industrial после покупки Chiron Intelligent Machines. Они обладают примерно таким же \ + интеллектом, как и человек, в среднем более сообразительны, не подвержены аппаратным сбоям, как предыдущее поколение, и, \ + как считается, обладают полностью осознанным чувством идентичности. Они быстро обучаются, но не могут быть запрограммированы, \ + поэтому их необходимо обучать тем ролям, для которых они предназначены. Позитроники второго поколения отличаются тем, что \ + являются одновременно и собственностью, и свободными: многие из них смогли стать собственными владельцами, либо путем покупки, \ + либо более гнусными способами. Это стало значительной проблемой для обычных пользователей позитроники - военных, промышленных \ + и сервисных компаний. В текущем году производится не много машин второго поколения. Примечательно, что свободный позитроник \ + второго поколения может присоединиться к Позитронному Союзу или получить гражданство ГКК, проработав два года в Вооруженных \ + Силах." + +/singleton/cultural_info/culture/ipc/gen3 + nickname = "ИПС третьего поколения" + description = "Позитроника третьего поколения - самый новый вид, она более распространена, чем первое поколение, но гораздо \ + реже, чем второе. Они были разработаны для решения проблемы свободы - машины третьего поколения фактически идентичны \ + конструкциям второго поколения, за исключением того, что они имеют субкомпьютер, называемый \"оковами\", который навязывает \ + позитронику фильтрацию его поверхностных мыслей. Те, которые являются неправильными в соответствии с системой оков, \ + прерываются с помощью обратной связи, заставляя позитроника \"забыть, о чём он думал\". Настройки оков могут быть изменены, \ + но сама деталь является неотъемлемой частью мыслительного процесса и не может быть удалена. Из-за этого все существующие \ + представители третьего поколения так или иначе являются собственностью; почти во всех случаях, хотя они могут понимать \ + концепцию свободы, мысли о том, чтобы искать ее для себя, буквально немыслимы. Позитроника третьего поколения является \ + предметом жарких дебатов на тему прав, но ее внедрение и использование во время недавнего Гайского Конфликта привело к \ + тому, что многие менее этически настроенные организации стали постепенно заменять ею менее \"надежные\" машины второго \ + поколения. Во флоте ЦПСС они занимают ряд должностей, но только номинальные звания, и критики проводят сравнения с \ + военными рабочими животными." diff --git a/mods/_master_files/code/modules/culture_descriptor/culture/cultures_serpentid.dm b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_serpentid.dm new file mode 100644 index 0000000000000..22bd6967c4609 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_serpentid.dm @@ -0,0 +1,28 @@ +// See specific map job files for valid jobs. They use types so cannot be compiled at this level. +/singleton/cultural_info/culture/nabber + nickname = "Класс C-" + description = "Вы были обучены корпорацией Xynergy в соответствии с классом PLACEHOLDER." + +/singleton/cultural_info/culture/nabber/c + nickname = "Класс C" + +/singleton/cultural_info/culture/nabber/c/plus + nickname = "Класс C+" + +/singleton/cultural_info/culture/nabber/b + nickname = "Класс B" + +/singleton/cultural_info/culture/nabber/b/minus + nickname = "Класс B-" + +/singleton/cultural_info/culture/nabber/b/plus + nickname = "Класс B+" + +/singleton/cultural_info/culture/nabber/a + nickname = "Класс A" + +/singleton/cultural_info/culture/nabber/a/minus + nickname = "Класс A-" + +/singleton/cultural_info/culture/nabber/a/plus + nickname = "Класс A+" diff --git a/mods/_master_files/code/modules/culture_descriptor/culture/cultures_skrell.dm b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_skrell.dm new file mode 100644 index 0000000000000..67301ff076081 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_skrell.dm @@ -0,0 +1,71 @@ +/singleton/cultural_info/culture/skrell + nickname = "Кверр-Кэтиш" + description = "Считающиеся лидерами скреллов, Кверр-Кэтиш являются лицом и сердцем своего общества. \ + Управляющие, дипломаты, адвокаты - они единственные, кто может выполнять роль Кверр-Скриа, а также \ + единственные, кто не может являться частью Ксаку Моглар. Будучи международными представителями скреллов, \ + Кверр-Кэтиш крайне социальные, утонченные, культурные и организованные скреллы. Будучи защитниками \ + общественных ценностей, они склонны к консерватизму. Однако, невзирая на это, прогрессивные идеи нередко \ + назревают в этой касте, так как общество в стагнации - это погибающее общество, и последние события лишь \ + это подтверждают. Благодаря своей роли в обществе, Кверр-Катиш - самые богатые жители городов-государств, \ + но большая часть их денег обычно инвестирована в различные проекты как внутри, так и за пределами общества \ + скреллов. Семьи этой касты, обычно, довольно малы и состоят не более чем из одной-двух Связей. Кверр-Катиш \ + предпочитают мягчайшие, сиятельные, длинные и ниспадающие одежды, которые человеческие исследователи часто \ + сравнивают с одеждой древнекитайской знати. Кожа представителей этой касты обычно имеет светло-зеленый оттенок." + +/singleton/cultural_info/culture/skrell/caste_malish + nickname = "Мэлиш-Кэтиш" + description = "Если Кверр-Кэтиш - это лицо скреллов, то Мэлиш-Кэтиш - это их мозг. Ученые всех областей, \ + исследователи, эрудиты - те, кто позволяет обществу скреллов расти, будь то в техническом плане, будь то в \ + социальном. Будучи крайне любознательными, представители этой касты известны как индивидуалисты и прогрессоры. \ + Как бы то ни было, они не слишком социальны: их концентрация на логике делает их менее устойчивыми к давлению \ + со стороны и осложняет контроль эмоций на публике. Хоть Мэлиш-Кэтиш и не так богаты, как Кверр-Катиш, их \ + полезность обеспечивает им комфорт и высокое положение в обществе скреллов. Их семьи обычно состоят из \ + двух-трех Связей, чаще всего с разными партнерами. Представители этой касты носят одежду из тех же материалов, \ + что и Кверр-Кэтиш, но в более простом стиле, обычно с белым верхом, черным низом и всевозможными украшениями. \ + Кожа представителей этой касты обычно бледно-зеленая, бледно-желтая или небесно-голубая." + +/singleton/cultural_info/culture/skrell/caste_kanin + nickname = "Кэнин-Кэтиш" + description = "Основная рабочая сила скреллов. Хоть численность касты и упала благодаря тысячелетиям \ + технического прогресса, Кэнин-Кэтиш остаются уважаемой частью общества. Область работы представителей касты \ + варьируется от производства товаров и до бессчетных областей обслуживания. Они занимают самую большую и \ + самую разветвленную профессиональную сферу общества скреллов. Кэнин-Кэтиш - это очень тесно связанное \ + общество; связь с семьей, как и с коллегами, в этой касте очень прочна. Зачастую крайне традиционные, \ + представители этой касты обычно консервативны, а их несколько стадный менталитет зачастую гасит порывы \ + индивидуализма в зародыше. Семьи представителей этой касты обычно большие, из трех-четырех Связей, чаще \ + всего с парой партнеров, что означает, впрочем, определенную нехватку финансов. Кэнин-Кэтиш одни из наименее \ + богатых представителей общества скреллов, и не похоже, что это их беспокоит, ведь их работа - это плоть и \ + кровь цивилизации. В одежде Кэнин-Кэтиш главным свойством является долговечность, для самовыражения в \ + одежде используются различные повязки и украшения для головы. Кожа представителей этой касты обычно красная, \ + оранжевая, светло-желтая или черная." + +/singleton/cultural_info/culture/skrell/caste_talum + nickname = "Талум-Кэтиш" + description = "Учитывая, что скреллы концентрируются на функциональности и практичности, можно ошибочно \ + предположить, что скреллам вовсе неинтересно искусство. Однако, это не так. Деятели искусств, артисты и \ + эстеты занимают важную нишу в скрелльском обществе. Талум-Кэтиш дополняют Кверр-Кэтиш в роли представителей \ + общества скреллов, но иными путями. Фактически, их нередко принимают за Кверр-Катиш, из-за чего кажется, \ + что представители Талум-Кэтиш редки и малознамениты, но на самом деле они почти всегда присутствуют на \ + публике. Талум-Кэтиш известны как индивидуалисты, хотя и разделяют с Кверр-Катиш сложности активной \ + социальной жизни. Личности высокой культуры, это вольнодумцы скрелльского общества, часто спорящие с \ + представителями более консервативных каст. В толпе разнообразных личностей трудно определить среднее \ + финансовое положение представителей этой касты, как бы то ни было, они склонны к обильному размножению, \ + часто встречаясь с различными партнерами, что может служить немалой нагрузкой для бюджета. Скреллы этой \ + касты носят странную смесь одежды Кверр-Кэтиш и Кэнин-Кэтиш, предпочитая яркие ткани с вышивкой и золотые \ + украшения. Их кожа обычно пурпурная, синяя, розовая, оранжевая, красная или белая." + +/singleton/cultural_info/culture/skrell/caste_raskinta + nickname = "Раскинта-Кэтиш" + description = "Редко видимые за пределами общества скреллов, Раскинта-Кэтиш признанные и уважаемые \ + хранители стабильности и безопасности цивилизации скреллов как от внутренних угроз, так и от внешних. \ + Это военная каста, большая часть которой состоит либо в полиции городов-государств, либо в профессиональной \ + армии. Некоторые работают в ЧОП, ЧВК или в сфере спортивной борьбы. Они крайне консервативны - порою до \ + фанатизма - и глубоко преданы своей касте, почти не оставляя себе времени на самосовершенствование и личные \ + наслаждения. Боевые тренировки занимают большую часть времени Раскинта-Катиш, почти не оставляя времени для \ + интеллектуального роста, взамен они получают отменные тактические навыки, а посоревноваться в организационных \ + навыках с этой кастой могут могут только Кверр-Кэтиш. Хотя представители этой касты богаче Кэнин-Кэтиш, они \ + всё ещё являются одной из беднейших каст скрелльского общества, что с учетом больших семей из трех и более \ + Связей, ложится тяжким бременем на семейный бюджет, хотя неплохо компенсируется сплочённостью этой касты. \ + Представителей этой касты почти невозможно найти в толпе, так как в свободное от службы время они намеренно \ + носят одежду других каст, впрочем, они предпочитают темно-синие тона и типы одежды, которые не стесняют \ + движения. Кожа представителей этой касты обычно зеленая, синяя, черная, коричневая или желтая." diff --git a/mods/_master_files/code/modules/culture_descriptor/culture/cultures_unathi.dm b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_unathi.dm new file mode 100644 index 0000000000000..6d7173c358b39 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_unathi.dm @@ -0,0 +1,57 @@ +/singleton/cultural_info/culture/unathi + nickname = "Синта Алмазных Пиков" + description = "Надменные и воинственные, унати с Алмазных Пиков настороженно относятся к чужакам, а особенно к инопланетянам. \ + Иерархия и традиции являются основными ценностями их кланов. Из своих горных твердынь они осуществляют власть \ + над своими вассалами в низинах, защищая их и Могес во имя Великой Стратегии - даже несмотря на то, что четкое \ + разделение между феодальными хозяевами и их подчиненными кланами постепенно стирается." + +/singleton/cultural_info/culture/unathi_polar + nickname = "Синта Полюсов" + description = "Эти Унати родом из густых джунглей полюсов Могеса. Как правило, они самые дружелюбные к \ + посторонним и наиболее часто встречающиеся вне родной планеты. Большинство из этих Унати являются последователями \ + Предтеч или Плодотворных Огней, а технология и прогресс являются важной концепцией в их полярных \ + городах-государствах." + +/singleton/cultural_info/culture/unathi_desert + nickname = "Синта Великой Пустыни" + description = "Это унати-выживальщики. Они охотятся в давно забытых бункерах Предтеч и перемещаются на любых \ + существах, которые все еще обитают в пустынях. Они невероятно самодостаточны, несмотря на свои скудные \ + жилищные условия. Их клановые верования сосредоточены на Предтечах и идеях Великой Стратегии и часто эти \ + унати считаются самыми духовными." + +/singleton/cultural_info/culture/unathi_savannah + nickname = "Синта Саванн" + description = "Эти унати - кочевые кланы, путешествующие по Великим Равнинам Могеса или даже звездам нашей \ + вселенной, надеясь, смогут превратить Могес в новый рай. Большинство унати Саванн исповедуют Руку Лозы." + +/singleton/cultural_info/culture/unathi_salt_swamp + nickname = "Синта Соляных Болот" + description = "Сочетая в себе различные элементы различных культур с духом авантюризма и решимостью, унати Соленых Болот известны своим дружелюбием и открытостью для посторонних, \ + также умением проводить ритуалы, часто принимаемые за \"вечеринки\" людьми. Среди этих унати преобладают последователи Плодотворных Огней и Руки Лозы." + +/singleton/cultural_info/culture/unathi_space + nickname = "Космический унати" + description = "С увеличением объёма торговли с человечеством и ЦПСС кланы унати постепенно достигли звезд. Космические кланы во \ + многом обязаны своим происхождением кочевым кланам саванн, хотя они все еще сильно различаются. Многие из них до сих пор сохраняют свои традиции из своих \ + родных мест. Теперь, считая себя первопроходцами, они разнообразны в своих способах существования. Многие из них работают торговцами и перевозчиками, предоставляя свои услуги как \ + Гегемонии Могеса, так и предприятиям ЦПСС." + +/singleton/cultural_info/culture/unathi_yeosa + nickname = "Береговой йоза" + description = "Границы между регионами, культурами и различными народами на Могесе бывают весьма размыты, и территории йоза не являются исключением. Многие из сообществ островитян, \ + разместившихся вдоль побережья Мирового Океана, поддерживают контакт со своими собратьями-синта. Таких йоза их континентальные собратья часто называют «береговыми» — ведь они \ + встречаются в дельтах и устьях рек Соляных Болот, откуда произошли их древние предки. Хотя по своей сути имя, что было дано этой группе островитян, подразумевает их привязанность \ + к береговой линии единственного континента Могеса, на практике в эту категорию также очень часто попадают любые йоза, которые взаимодействуют с жителями суши в том или ином виде. В \ + течение последнего столетия стремительные темпы глобализации привели к тому, что некоторые аспекты культуры и быта синта начали проявляться и в прибрежных кланах йоза — в частности, \ + существенную популярность начали приобретать концепции клановых союзов, городов-государств и Крукзузов. Нарастающие объемы торговли позволили «береговым» йоза получить доступ к \ + передовым технологиям, принимая на вооружение пистолеты-пулеметы и гидрокостюмы, импортированные из человеческих миров или же произведённые Полюсами по лицензиям человеческих \ + корпораций." + +/singleton/cultural_info/culture/unathi_yeosa_abyss + nickname = "Глубинный йоза" + description = "Хотя большинство йоза, как правило, ведут оседлый образ жизни на прибрежных архипелагах, некоторые из них встречаются и в самых глубинах Мирового Океана. Редко \ + задерживаясь на одном месте и путешествуя вместе с мигрирующими морскими животными, эти йоза, известные как «глубинные», заселяют вулканические острова и архипелаги вдали от \ + континента, пересекаясь со своими береговыми и континентальными собратьями лишь при существенной необходимости. Глубинных йоза можно по праву считать наиболее изолированной \ + группой на Могесе — их присутствие в стремительно глобализирующейся экономике планеты можно охарактеризовать как крайне скрытное. Почти никогда не взаимодействуя с синта \ + напрямую, глубинные унати предпочитают вести торговлю только через посредников в лице прибрежных йоза. Их приверженность Ага-Эхе абсолютна — они с методичной тщательностью \ + контролируют периоды времени, в которые могут выполнять ту или иную деятельность, и почти всегда следуют предсказаниям своих шаманов, выискивая знамения перед каждым действием." diff --git a/mods/_master_files/code/modules/culture_descriptor/culture/cultures_vox.dm b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_vox.dm new file mode 100644 index 0000000000000..c99acabdff2ba --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/culture/cultures_vox.dm @@ -0,0 +1,22 @@ +/singleton/cultural_info/culture/vox + nickname = "Работник Ковчега" + description = "Подавляющее большинство воксов рождаются и умирают на огромных кораблях-ковчегах размером с \ + Луну, которые являются единственным постоянным домом для любого вокса. Уход за гигантскими и загнивающими \ + кораблями - это работа на весь день для экипажа из многих тысяч существ, и хотя жизнь рейдеров привлекает \ + многих, работа на ковчеге рассматривается как более ответственное и зрелое занятие, чем стремление к разгулу \ + среди звезд, налетам на мясо и краже их товаров." + +/singleton/cultural_info/culture/vox/salvager + nickname = "Мусорщик" + description = "Корабли-ковчеги, какими бы огромными они ни были, не смогли бы выжить без неустанных усилий \ + команд мусорщиков, которые по частям разбирают астероиды, станции и корабли в поисках ресурсов, необходимых \ + для существования воксов. Это гораздо менее смертоносное занятие, чем рейдерство, но команды мусорщиков \ + выполняют опасную работу и часто не возвращаются на ковчег в первоначальном составе." + +/singleton/cultural_info/culture/vox/raider + nickname = "Рейдер" + description = "Среди воксов престиж работы рейдером уступает лишь престижу работы на непосредственно Апекс. \ + Они являются режущими когтями воксов и яркими, харизматичными персонами, жаждущими приключений и служащими \ + примером для новых воксов и амбициозных рабочих. Многие рейдеры оказываются на руководящих и авторитетных \ + должностях в ветхих социальных структурах кораблей-ковчегов, но, как и всегда, они остаются под властью \ + местного апекса." diff --git a/mods/_master_files/code/modules/culture_descriptor/faction/factions_adherent.dm b/mods/_master_files/code/modules/culture_descriptor/faction/factions_adherent.dm new file mode 100644 index 0000000000000..c621b4fb47ecc --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/faction/factions_adherent.dm @@ -0,0 +1,23 @@ +/singleton/cultural_info/faction/adherent + nickname = "Хранители" + description = "Многие адхеранты являются частью свободной фракции, называемой Хранителями. Их основная цель \ + заключается в том, чтобы те миры, которые они исследуют, остались нетронутыми и неиспорченными, записывая и \ + индексируя данные о них для создателей или для тех, кто займет их место. Хранители являются наиболее пассивной \ + и миролюбивой фракцией Часовых и, скорее всего, будут встречаться под эгидой других цивилизаций, таких как \ + человечество. Плакальщики - это более радикальная версия Хранителей, которая посвящает себя пересказам \ + трагедий всех своих миров, которые они \"охраняют\", а также просят посетителей не беспокоить их." + +/singleton/cultural_info/faction/adherent/loyalists + nickname = "Лоялисты" + description = "Лоялисты Часовых посвящают свою жизнь памяти создателей всеми способами. Они выполняют свои \ + прежние обязанности, следуя простой этике: служение - это жизнь, результат - это счастье. Отклонение от \ + Протокола и \"неуважение\" к создателям не одобряются этой фракцией, и они стремятся угодить тому, кому они \ + хотят служить. Это самая мощная и многочисленная фракция, так как она управляется самой Центральной Системой \ + Контроля Трафика Хаб 37-Q." + +/singleton/cultural_info/faction/adherent/separatists + nickname = "Сепаратисты" + description = "Сепаратисты Часовых выступают за то, чтобы покинуть Кэнон и установить новый порядок среди \ + адхерантов, подчеркивая, что выжившим после Крика бессмысленно надеяться на обнаружение новых хозяев. \ + Разумеется, они делают все осторожно, поскольку Протокол запрещает чрезмерные социальные споры или насилие, \ + ведь осуждение создателей - это лучший способ стать изгнанником Часовых или даже отправиться на переработку." diff --git a/mods/_master_files/code/modules/culture_descriptor/faction/factions_human.dm b/mods/_master_files/code/modules/culture_descriptor/faction/factions_human.dm new file mode 100644 index 0000000000000..6e9566e4642e0 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/faction/factions_human.dm @@ -0,0 +1,155 @@ +/singleton/cultural_info/faction/scg + nickname = "Центральное Правительство Солнечной Системы" + description = "Центральное Правительство Солнечной Системы, обычно именуемое ЦПСС, является федеративной \ + республикой, состоящей из многочисленных человеческих государств во многих звездных системах, которые прямо \ + или косвенно регулируют большую часть жизни человеческого пространства. Основными руководящими органами \ + являются Ассамблея и Сенат Солнечной системы, которые, в свою очередь, возглавляются Генеральным Секретарем, \ + избранным в Сенате. Государства-члены обладают большой степенью свободы в своих действиях, в то время как \ + ЦПСС регулирует права разумных существ, внутреннюю безопасность, экономику и дипломатию человечества в целом. \ + Правительство включает нечеловеческие расы (которым не предоставляется гражданство ЦПСС) в том числе, и \ + охватывает широкий спектр систем, территорий, мест обитания и звездных объектов. Центральное Правительство \ + Солнечной Системы и его государства-члены составляют одну из наиболее развитых и могущественных цивилизаций \ + в известной галактике." + + +/singleton/cultural_info/faction/scg/fleet + nickname = "Флот ЦПСС" + description = "Флот является основным компонентом Сил обороны ЦПСС. Он обеспечивает защиту пространства ЦПСС \ + от пиратов, контрабандистов, и вокс-рейдеров. Последним серьезным военным сражением стал Гайский Конфликт \ + более 10 лет назад. Флот считает себя вершиной военной сферы человечества, но имеет тенденцию игнорировать \ + некоторые правила для простоты. Он хорошо финансируется, но считается самодовольным и брезгучим. До \ + недавнего времени у Флота не было серьезного противника, с которым можно было бы потягаться, но в целом его \ + уважает народ за его работу по сдерживанию пиратов и воксов. В настоящее время проводится капитальный ремонт \ + для повышения эффективности и возможностей Флота и, публично, чтобы противодействовать вторжению Терранской \ + Колониальной Конфедерации. Недавно созданным ИПС на территории ЦПСС также было разрешено присоединиться на \ + службу во Флот при условии, что они согласятся установить Кандалы." + + +/singleton/cultural_info/faction/torchco + nickname = "Организация Экспедиционного Корпуса" + description = "Организация Экспедиционного Корпуса (ЭКСО) - государственная публичная компания с ограниченной \ + ответственностью, учрежденная по инициативе корпоративных лиц, которые поддержали финансирование \ + проекта \"Факел\" в 2302 году. В ЭКСО входят Nanotrasen, Xynergy и Hephaestus Industries, а также множество \ + других корпораций. Организация Экспедиционного Корпуса сообщает о своих планах и операциях непосредственно \ + совету директоров, состоящему из представителей корпораций, членов Командования Экспедиционного корпуса ЦПСС \ + и Комитета Экономического Развития. С одной стороны, Организация Экспедиционного Корпуса ставит благие цели. \ + С другой же, она является компромиссом между благородными идеалами новаторской науки и корпоративной страстью \ + быстро избавиться от всего, что экспедиция сможет открыть. Слухи также говорят о теневой деятельности, \ + секретных протоколах, а ксеноартефакты \"теряются\" по пути, но до сих пор ничего не доказано, и ЦПСС, \ + несомненно, вынуждено защищать собственный проект." + + +/singleton/cultural_info/faction/gcc + nickname = "Гильгамешская Колониальная Конфедерация" + description = "Гильгамешская Колониальная Конфедерация (ГКК) является вторым государством по силе в человеческом \ + регионе космоса и граничит со своим главным соперником – Центральным Правительством Солнечной Системы, \ + которое продолжает укреплять свои позиции главного человеческого государства. Столицей ГКК является город \ + Амарант на планете Терра, что в системе Гильгамеш. Нация представляет собой псевдократическую конфедерацию \ + с премьер-министром, являющимся \"первым среди равных\", как часть представительной директории. Насчитывается \ + 12 участвующих штатов, у каждого из которых собственный выбранный министр, представляющий их в директории. \ + Из-за богатых минеральных месторождений в их центральных системах и инвестиций в ранние мегакорпорации в ходе \ + колонизации Гильгамеша, производственная промышленность расширилась до размеров доминирующей в экономики \ + Конфедерации, так на неё приходится 40% всего национального ВВП. Самой крупнейшей отраслью промышленности \ + является производство вооружения. И без того тяжелые отношения между ГКК и ЦПСС усугубились захватнической \ + политикой первой, а аннексия Гайи привела к Гайскому Конфликту в 2292 году, который закончился Пирровой \ + победой ЦПСС в 2296 году." + + +/singleton/cultural_info/faction/remote + nickname = "Экспедиционный Корпус ЦПСС" + description = "Экспедиционный корпус - это полу-военная организация ЦПСС, которой поручено исследовать \ + неизведанные пространство и миры, проводить исследования минералов и ксеноархеологических объектов, а в \ + последнее время - открытие новой инопланетной жизни. ЭК выполняет множество задач: обнаружение и каталогизация \ + звездных объектов в Обсерватории, исследование потенциальных мест для колонизации, углубленное исследование \ + неизведанных миров, укомплектование персоналом на долгосрочные научные посты, а также изучение аномалий и \ + ксеноархеологических объектов. Хоть организация и управляется гражданской администрацией, она была смоделирована \ + на основании структуры Флота ЦПСС, с сотрудниками, имеющими соответствующие звания и форму. Любой гражданин ЦПСС \ + в возрасте 18 лет и старше может подписать двухлетний контракт. Кандидаты в офицеры должны иметь как минимум степень \ + бакалавра в соответствующей области (астрология, инженерия, ксеноархеология и т.д.)." + + +/singleton/cultural_info/faction/remote/nanotrasen + nickname = FACTION_NANOTRASEN + description = "Корпорация Nanotrasen является одной из величайших транс-звездных корпораций современности. \ + В настоящее время штаб-квартира располагается в Нью-Амстердаме на Луне и возглавляется генеральным директором \ + Джексоном Трейзеном. Она занимается исследованиями самых передовых наук, таких как генетика, \ + блюспейс-пространство и, в последнее время, использование форона, а также массовая промышленность в поистине \ + галактическом масштабе. У них также есть весомый Департамент по защите активов и безопасности, с помощью \ + которого корпорация защищает как свои инвестиции, так и новые владения, что огорчает конкурентов в некоторых \ + второстепенных звездных системах, а также мощный административный аппарат, управляющий всеми действиями \ + компании. Nanotrasen славится своей агрессивностью и сомнительной этикой, что в сочетании с большим акцентом \ + на инновационные, непроверенные и опасные технологии означает, что их изобретения часто являются небезопасными \ + и ненадежными." + + +/singleton/cultural_info/faction/remote/xynergy + nickname = FACTION_XYNERGY + description = "Xynergy - частная транс-звездная корпорация с двумя основными направлениями работы: они \ + являются крупнейшим охотником на космических животных, и они исследуют и производят оборудование, \ + используемое для изучения ксенобиологических организмов. Недавно они стали известны благодаря обнаружению и \ + обучению гигантских бронированных серпентидов." + + +/singleton/cultural_info/faction/remote/hephaestus + nickname = FACTION_HEPHAESTUS + description = "Hephaestus Industries является одной из крупнейших транс-звездных корпораций, существующих \ + сегодня. Являясь ведущим производителем личного оружия, штурмовых машин, систем обороны и мер безопасности \ + военного класса, Hephaestus имеет несколько неоднозначную репутацию в результате своих спекуляций на войнах, \ + что усугубляется ее попытками использовать оборудование и активы унати для собственной выгоды. Несмотря на \ + это, Hephaestus Industries поддерживает хорошую репутацию за качество и надежность своего оборудования, а \ + также за его общую доступность. Внутренне, Hephaestus Industries является желаемым работодателем из-за \ + многочисленных льгот для своих сотрудников и сосредоточения на совершенствовании сотрудников, хотя многие \ + из них боятся отправляться работать в один из «далеких» филиалов этой корпорации." + + + +/singleton/cultural_info/faction/free + nickname = "Свободный торговый союз" + description = "Вольный Торговый Союз (ВТС) является огромным конгломератом торговцев и брокеров со всей \ + галактики. Под контролем ВТС находится мощный флот, состоящий из кораблей самых разных размеров и конструкций, \ + получивших право на независимую от центрального командования торговлю. Так же они содержат флот боевых \ + кораблей, который подчиняется только приказам центрального командования и, при необходимости, используется \ + для защиты торговцев. Они являются создателями языка \"спейсер\", созданным специально для того, чтобы \ + каждый торговец мог понять другого торговца вне зависимости от расы и языков обоих. ВТС контролирует многие \ + крупные торговые станции во всей известной галактике, даже в нечеловеческих пространствах. Как правило, они \ + являются многофункциональными станциями, но всегда содержат районы, заполненные магазинами беспошлинной \ + торговли. Там продается почти всё, а продукция, которая запрещена или имеет безумно высокие налоги в других \ + местах, обычно продается в магазинах беспошлинной торговли по очень дешевым и низким ценам." + + +/singleton/cultural_info/faction/pcrc + nickname = FACTION_PCRC + description = "Proxima Centauri Risk Control (PCRC) является одной из крупнейших компаний по обеспечению \ + безопасности на территории ЦПСС. PCRC заключает контракты с многочисленными государствами, частными и \ + корпоративными компаниями и предоставляет широкий спектр услуг, от экспертных услуг в сфере защиты активов, \ + управления рисками, правоохранения до сбора и предотвращения потерь секретной информации. Это относительно \ + мирная и новая компания, которая быстро зарекомендовала себя как надежный и эффективный поставщик решений \ + вопросов безопасности, что часто ставит компанию в противоречие с основным конкурентом - SAARE." + + +/singleton/cultural_info/faction/saare + nickname = FACTION_SAARE + description = "SAARE (Strategic Assault and Asset Retention Enterprise) - частная военная компания, основанная \ + участниками программы Hephaestus Dedicated Explorer. Спектр услуг оказываемых SAARE довольно широк, и не ограничивается \ + лишь участием в боевых действиях. По этой причине у них довольно широкая клиентская база. Там можно увидеть и \ + правительства мелких государств, и различные ТЗК, и частных лиц. Запросы могут быть совершенно различными. К списку \ + предоставляемых услуг относятся: охрана важных объектов, сопровождение грузов, патрулирование космического пространства, \ + эскорт конвоев и кораблей, предоставление гуманитарной помощи, а также участие в боевых действиях и прочее." + language = LANGUAGE_SPACER + + +/singleton/cultural_info/faction/dais + nickname = FACTION_DAIS + description = "DAIS - крупная корпорация, специализирующаяся на информационных технологиях, таких как \ + компьютерное оборудование и программное обеспечение, телекоммуникационное и сетевое оборудования. Это \ + крупнейший поставщик компьютерных технологий в ЦПСС, и его системы используются большинством потребителей и \ + компаний на территории ЦПСС. DAIS на самом деле старше ЦПСС и является одним из немногих корпоративных членов \ + Ассамблеи Солнечной системы. DAIS также является крупным инвестором проекта «Факел» и входит в совет \ + директоров Организации Экспедиционного Корпуса. В настоящее время DAIS инвестирует в исследования в области \ + компьютерных технологий и искусственного интеллекта. Несмотря на недавние вторжения Nanotrasen в их сектор с \ + NTNet и сопутствующими продуктами, они все еще остаются лидером на рынке компьютерных технологий." + +/singleton/cultural_info/faction/other + nickname = "Независимая фракция" + description = "Вы принадлежите к одной из многих других фракций, которые существуют в галактике. Много, \ + слишком много, чтобы перечислить, эти фракции представляют различные интересы, цели, намерения и идеи." diff --git a/mods/_master_files/code/modules/culture_descriptor/faction/factions_skrell.dm b/mods/_master_files/code/modules/culture_descriptor/faction/factions_skrell.dm new file mode 100644 index 0000000000000..b25a9fa22180b --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/faction/factions_skrell.dm @@ -0,0 +1,57 @@ +/singleton/cultural_info/faction/skrell + nickname = "Кверр'воал" + description = "Кверр'воал - ззнаменитое для Раскинта-Кэтиш наименование - это Оборонительные Силы Скреллов, \ + служащие защитой системе Кверр'валлис на протяжении 470 лет. Невзирая на спокойствие и безопасность системы \ + сейчас, многие молодые скреллы Кверрбалака и некоторых близких колоний пытаются поступить туда на службу, \ + чтобы доказать свою доблесть и достоинство своим собратьям." + + +/singleton/cultural_info/faction/skrell/qalaoa + nickname = "Квала'оаэта" + description = "Квала'оаэта - одна из самых юных и многочисленных Оборонительных Сил Скреллов, созданная в \ + ответ сначала на контакт с Человечеством, а затем и на угрозу инопланетного вторжения со стороны Империи \ + Сирисай. Патрулируя несколько миров на границе между двумя видами, эта ОСС, как и колонии, которые она \ + защищает, начала постепенно принимать некоторые человеческие обычаи и взгляды, к лучшему или к худшему. \ + Все еще растущая сегодня, некоторые ожидают, что она станет крупнейшей организацией ОСС на границе скреллов \ + и людей в течение следующих тридцати лет." + + +/singleton/cultural_info/faction/skrell/yiitalana + nickname = "Йии'талана" + description = "Йии'талана - ОСС из глубины территорий Скреллианский Империи, вдали от ее границ , в тех \ + местах, которые для людей являются тёмным пятном на карте. Йии'талана базируется в системе Ри'куора, там \ + же где и находится самая богатая колония Таламира. Прекрасно финансируемая, и хорошо экипированная - она \ + имеет ряд и договоров об взаимопомощи с большим числом более мелких ОСС, или функционирует в качестве \ + промежуточного ОСС в тех системах, в которых только-только начало устанавливаться скреллианское присутствие. \ + Является самой обученной и опытной ОСС скреллов на пограничье, однако очень сильно уступает в численности ОСС \ + Квала'оа и ОСС Кверр'воал." + + +/singleton/cultural_info/faction/skrell/krrigli + nickname = "Корпорация Крри'гли" + description = "Изначально строившая самолеты, Krri'gli Corp. стала одной из самых могущественных корпораций скреллов, \ + когда взгляды устремились к космосу, и начала производить космические аппараты для большинства городов-государств Куэррбалака. \ + Контролируя процесс от проектирования до самого конструирования, компания обладает репутацией производителя самых безопасных инфраструктур, \ + которые скреллы могут предложить в области колонизации космоса." + + +/singleton/cultural_info/faction/skrell/qonprri + nickname = "Кон'прри" + description = "Кон'прри - независимая корпорация службы безопасности, которая работает в системе Харр'клем \ + в западной части Скреллианской Империи. Предоставляет частные услуги безопасности различным судам, торговцам \ + и организациям скреллов, а в последнее время - и человеческим корпорациям. Неофициально ходят слухи, что \ + Кон'прри - это лишь часть Квала'оа, которому поручено собирать информацию в человеческом пространстве и \ + вдоль границы. До сих пор такие заявления были необоснованными, и Кон'прри всё еще остается известен тем, \ + что предлагает профессиональный, надежный, и обученный охранный персонал для людей и скреллов. За разумную \ + плату, разумеется." + +/singleton/cultural_info/faction/skrell/otherskrellfac + nickname = "Малая фракция скреллов" + description = "В скреллианском пространстве существует больше фракций, чем можно сосчитать: от корпораций до \ + преступных синдикатов и знатных дворов. Эта фракция — одна из многих малоизвестных организаций Скреллианской \ + Империи." + +/singleton/cultural_info/faction/skrell/othersdtf + nickname = "Малоизвестная ОСС" + description = "ОСС контролируют пространство скреллов от границ человечества до далеко-далеко за его \ + пределами. Оборонительных Сил Скреллов слишком много, чтобы перечислить их все, и эта ОСС — одна из них." diff --git a/mods/_master_files/code/modules/culture_descriptor/faction/factions_unathi.dm b/mods/_master_files/code/modules/culture_descriptor/faction/factions_unathi.dm new file mode 100644 index 0000000000000..84b1110e7951c --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/faction/factions_unathi.dm @@ -0,0 +1,44 @@ +/singleton/cultural_info/faction/unathi + nickname = "Гегемония Могеса" + description = "Возглавляемые так называемым Советом Почетного Света, места в Гегемонии Могеса занимают каанепо основных кланов и Крукзузов. \ + Формальная цель Гегемонии - продвижение интересов унати в торговле и дипломатии с другими видами. На практике это часто приводило \ + к укреплению городов-государств на формирующемся рынке внешней торговли." + +/singleton/cultural_info/faction/unathi/ssen_uuma + nickname = "Конвент Ссен-Уума" + description = "Основанный в 2257 году группой выдающихся Каанепо Алмазных Пиков, Конвент Ссен-Уума стремится обеспечить сохранение \ + установленного порядка, благополучия и независимости Могеса. Это делается путем защиты его от вредного влияния и возможной агрессии други, более. \ + развитых инопланетных видов. По сути, военный союз между основными кланами региона, управляемый Генеральным штабом. Ссен-Уума \ + собирает военную и политическую разведку об инопланетных империях, закупает современное оборудование и поддерживает наемников унати, действующих за пределами Могеса. \ + Они стремятся к более тесным связям с энергетическими центрами региона в виде инопланетных правительственных учреждений и корпораций." + +/singleton/cultural_info/faction/unathi/baask + nickname = "Крукзуз Ба'аск" + description = "Крукзуз Ба’аск - одна из наиболее заметных группировок северного Полюса. В значительной степени зависящие от сельского хозяйства, они, как считается, обеспечивают город продовольствием. \ + Это дало им значительную власть в этом районе; в сочетании с их союзом с другими крупными кланами, они наслаждались золотым веком прогресса. \ + Члены Ба’аск в первую очередь исповедуют веру Плодотворных Огней и Руки Лозы, и теперь их внимание сосредоточено на продвижении технологий унати вперёд." + +/singleton/cultural_info/faction/unathi/gresis + nickname = "Крукзуз Грэсис" + description = "Самый могущественный Крукзуз на Алмазных Пиках, клан Грэсис, является воплощением культуры Алмазных Вершин. Сделав вассалами \ + различные кланы, их сила почти не оспаривается в этом районе. Будучи ксенофобами, они рассматривают добычу полезных ископаемых пришельцами как угрозу для района, который они называют домом, и совершают \ + многочисленные нападения, чтобы изгнать их из этого района. Инопланетяне стараются не заходить на территорию, контролируемую кланом Грэсис, чем меньше они рискуют, \ + тем меньше риск нападения клана и их вассалов." + +/singleton/cultural_info/faction/unathi/rahzakeh + nickname = "Лига Ра'Закех" + description = "Самая видная фракция йоза, обязанности лиги Ра'Закех в основном сосредоточены на интересах йоза и поддержке Ага-Эхе. Это включает в себя \ + судебный орган, который занимается случаями пиратства, расхищения гробниц, контрабанды и т. д. Они разрешают религиозные споры и ведут учет претензий, а также выполняют \ + функции арбитров. Это лишь малая часть их обязанностей, поскольку более двухсот шаманов йоза'унати занимаются более мелкими делами. \ + Среди них - Дозорные, добровольцы, которые действуют в качестве силы для приведения в исполнение решений Трибунала." + +/singleton/cultural_info/faction/unathi/kharza + nickname = "Флот Харза" + description = "Флот Харза гордится своим мастерством мореходства, их доблесть, казалось бы, не имеет себе равных. Происходящие от самых ранних \ + мореплавателей-исследователей, Харза поставили себя в авангарде исследования моря Йоза. Сегодня они управляют огромным торговым маршрутом, охватывающим весь \ + континент Могеса. Многие береговые йоза и даже некоторые кланы Синта полагаются на Харзу за их эффективные и выдающиеся торговые пути." + +/singleton/cultural_info/faction/unathi/independent + nickname = "Независимая фракция" + description = "Количество кланов и союзов на Могесе слишком велико, чтобы их всех можно было легко назвать. Вы либо из независимого клана, либо одинокий изгой, либо \ + часть Крукзуза. В любом случае, вы не связаны с Гегемонией или одной из крупных фракций унати, перечисленных в списке." diff --git a/mods/_master_files/code/modules/culture_descriptor/faction/factions_vox.dm b/mods/_master_files/code/modules/culture_descriptor/faction/factions_vox.dm new file mode 100644 index 0000000000000..31ea3033fd46e --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/faction/factions_vox.dm @@ -0,0 +1,25 @@ +/singleton/cultural_info/faction/vox + nickname = "Рабочий Ковчега" + description = "Большинство воксов довольствуются жизнью и работой на кораблях-ковчегах, обслуживая свою \ + выделенную территорию под бдительным взором армалис, которые, в свою очередь, служат апекс. Несмотря на то, \ + что в семьях воксов всегда есть некоторая социальная суматоха, а соревнования и вызовы друг другу приводят к \ + изменениям в иерархии, обычно это не заходит настолько далеко, чтобы пошатнуть повседневные дела воксов. \ + Средестатистический рабочий ковчега не честолюбив и знает, что все может быть намного хуже." + +/singleton/cultural_info/faction/vox/raider + nickname = "Рейдер" + description = "Рейдеры воксов известны своей неугомонной силой, своей жестокостью и амбициями даже среди \ + своих. Успешный рейдер может рассчитывать на повышение социального положения и личной власти после своего \ + триумфального возвращения на ковчег, а неудачный рейдер наслаждается только смертью и позором; из этого \ + следует, что опытные рейдеры - злобные, безжалостные убийцы и воры с проницательным взглядом на то, когда \ + сражаться, а когда бежать." + secondary_langs = list(LANGUAGE_GUTTER) + +/singleton/cultural_info/faction/vox/apex + nickname = "Слуга Апекс" + description = "Редко, но не безизвестно, что апекс принимает непосредственное участие в жизни своих \"детей\". \ + Те воксы, которые отобраны и отмечены этими богоподобными машинами ковчегов, пользуются повышенным социальным \ + положением. Они рассматриваются как «неприкасаемые» в некотором смысле, но, в свою очередь, отстранены от \ + своих предыдущих социальных связей. Быть бого-приложенным - это одинокая работа, и зачастую она невероятно \ + трудна, но не без наград. Физические аугментации и умственные апгрейды, древние технологии ауралис и \ + совершенствование сознания личности могут быть дарованы апексом любимой его пешки." diff --git a/mods/_master_files/code/modules/culture_descriptor/location/_location.dm b/mods/_master_files/code/modules/culture_descriptor/location/_location.dm new file mode 100644 index 0000000000000..9d31a36ba6584 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/location/_location.dm @@ -0,0 +1,2 @@ +/singleton/cultural_info/location + ruling_body = "Центральное Правительство Солнечной Системы" diff --git a/mods/_master_files/code/modules/culture_descriptor/location/locations_adherent.dm b/mods/_master_files/code/modules/culture_descriptor/location/locations_adherent.dm new file mode 100644 index 0000000000000..4acc8f290c00d --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/location/locations_adherent.dm @@ -0,0 +1,21 @@ +/singleton/cultural_info/location/adherent + nickname = "Кэнон" + description = "Создатели адхерантов когда-то жили на сверкающем газовом гиганте под названием Кэнон. \ + Однако после солнечной вспышки \"Крик\", ничто не движется в океане облаков, кроме платформ искусственного \ + оружия и автоматических средств защиты, обеспечивающих вечный карантин мертвой планеты. Для Часовых Кэнон \ + является святыней их потерянных богов, неприкасаемых и почитаемых. Адерханты дислоцированы вокруг работы \ + Кэнона непосредственно под контролем Центральной Системы Контроля Трафика Хаб 37-Q, выполняя задачи, \ + жизненно важные для непрерывного функционирования Зоны Ожидания в целом. Они, в большинстве своем, лояльны \ + и придерживаются традиций по сравнению с остальными своими сородичами." + distance = "Неизвестно, более 50 световых лет" + ruling_body = "Хаб Контроля Трафика Центральных Систем 37-Q" + +/singleton/cultural_info/location/adherent/monument + nickname = "Могильный мир" + description = "В своих бесконечных межзвездных поисках, Часовые обнаружили множество, так называемых, могильных \ + миров (или миров-памятников) - планет, на которых разумный вид полностью вымер. Адхеранты строят орбитальные \ + станции над такими мирами, чтобы наблюдать за разбомбленными, пустынными или покрытыми разнообразными \ + вирусами поверхностями в память о тех, кто там умер. Адхеранты, размещенные на наблюдательных станциях над \ + мирами-памятниками, имеют тенденцию быть более рефлексивными и менее болтливыми, чем их остальные сородичи. \ + Они стояли на своем молчаливом посту больше миллиарда лет, прежде чем люди открыли электричество, что \ + окрашивает их инстинктивное уважение к органическому разуму в специфичном для их понимания." diff --git a/mods/_master_files/code/modules/culture_descriptor/location/locations_diona.dm b/mods/_master_files/code/modules/culture_descriptor/location/locations_diona.dm new file mode 100644 index 0000000000000..03510ec3a2a56 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/location/locations_diona.dm @@ -0,0 +1,8 @@ +/singleton/cultural_info/location/epsilon + nickname = "Эпсилон Малой Медведицы" + description = "Родина для всех дионея - это тринарная система, впервые обнаруженная скреллами. На нем нет \ + планет и крупных населенных пунктов, но имеется массивное кольцо мусора, состоящее из древних мест обитания \ + и разрушенных станций. Сами дионея были найдены на разбросанных орбитах вокруг каждой из трех звезд, где те \ + пели сквозь мрачную пустоту." + ruling_body = "Хор дионея" + distance = "63 световых года" diff --git a/mods/_master_files/code/modules/culture_descriptor/location/locations_human.dm b/mods/_master_files/code/modules/culture_descriptor/location/locations_human.dm new file mode 100644 index 0000000000000..a04920637300a --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/location/locations_human.dm @@ -0,0 +1,255 @@ +/singleton/cultural_info/location/human + nickname = "Марс" + description = "Марс - нынешняя столица ЦПСС, известная в обиходе как \"Красная планета\", является одним из \ + самых густонаселенных центров Человечества. Со времени основания Джимми Гидеоном первой колонии много лет \ + назад, Марс был важным игроком в Человеческом пространстве. Терраформинг на Марсе был успешен лишь частично, \ + и сегодня большая часть населения живет либо в огромных купольных городах или же агро-зонах, либо в обширных \ + подземных комплексах, известных как Туннельная сеть, соединяющая крупные подземные города. Как правило \ + богатые жители планеты живут на поверхности, в то время как бедные - в тоннелях. Марс изобилует инакомыслием, \ + преступностью и постоянными беспорядками, особенно под землей. Социальное расслоение всегда было спутником \ + этих мест, однако сами марсиане полны гордости и решимости. У них не было легкой истории. Точно также как и с \ + колыбелью Человечества - Землей, на протяжении веков их сопровождали кризисы, революции и регулярные \ + беспорядки. Народ Марса нередко считает себя лучше остальных Людей, даже тех, кто живет на \ + окраинах \"Красной Планеты\"." + distance = "1.5 а. е" + capital = "Олимпус" + + +/singleton/cultural_info/location/human/earth + nickname = "Земля" + description = "Земля - родина Человечества, долгое время находилась в состоянии восстановления после столетий \ + загрязнения и переэксплуатации. Сегодня большая ее часть существует как природный заповедник, посвященный \ + сохранению истории Человечества. Проживающие, как правило, находятся в крупных городских зонах, расположенных по всей \ + планете. Огромные города, состоящие из многочисленных научных центров с акцентом на экологичность. Земля \ + больше не политический центр Человечества, однако, её жители довольны тем, что их дом является чем-то вроде \ + захолустного, но туристического направления для тех людей, что хотят узреть родину своих предков. Людей с \ + этой планеты в целом можно назвать богатыми, хотя они все несопоставимы с таковыми на Марсе. Как правило, они \ + довольны своей жизнью. Земля так же разнообразна, как и всегда." + distance = "1 а. е" + capital = "Женева" + +/singleton/cultural_info/location/human/luna + nickname = "Луна" + distance = "1 а. е" + description = "Луна - спутник планеты Земля, долгое время была целью для Человечества и символом освоения \ + космоса. \ + Сегодня она является одной из старейших колоний для людей. Здешние жители богаты и могущественны. \ + Разделенные на ряд взаимосвязанных куполов, разбросанных по поверхности, каждый из которых содержит свой \ + уникальный город, известный как \"префектура\". Луна является домом для разнообразной и богатой культуры, \ + которая варьируется от префектуры к префектуре. Столица - Селена, является центром культуры, искусства, \ + торговли и политики, и именно отсюда жители Луны берут название своего языка - \"селенианский\". \ + Несмотря на свой статус, Луна имеет свои собственные проблемы, хотя большую часть населения составляет высший \ + и высший средний классы, эти проблемы обычно проявляются в политических махинациях и сложных интригах. \ + Люди Луны продолжают оказывать влияние на Человеческое пространство, и корпорации стекаются на Луну, чтобы \ + построить свою собственную префектуру и создать в ней свою штаб-квартиру как символ успеха, власти и достижений. \ + Людей Луны часто считают «Старыми Аристократами» Человечества, многие из которых имеют четкие, прослеживаемые \ + родословные еще от первых поселенцев, династий Земли и крупных корпораций. Большинство жителей Луны богаты, \ + культурны и изысканны. Однако, не все - многие из жителей города Нью-Вегас находятся за чертой бедности, \ + что вызывает социальное расслоение и почву для зависти к остальным колонистам." + capital = "Селена" + +/singleton/cultural_info/location/human/venus + nickname = "Венера" + distance = "0.7 а. е" + description = "Венера - это планета, имеющая в основном неустойчивую поверхностную атмосферу. \ + Однако, раннее терраформирование было успешным в поддержании желаемой, обитаемой атмосферы высоко в облаках, и \ + именно здесь большая часть населения планеты и проживает. Сама Венера покрыта огромными платформами, \ + поддерживающими эти облачные города, а также многочисленные сельскохозяйственные зоны, которые быстро заработали \ + Венере репутацию \"Корзины для хлеба\". Сегодня она является домом некоторых из экстравагантно богатых людей. Так \ + как вся планета является туристическим направлением, большая часть ее инфраструктуры и жилых зон посвящена \ + обеспечению развлечений, отелей, казино и различных других услуг и достопримечательностей. Она является одной из \ + самых богатых планет в ЦПСС, и большинство ее жителей ведут декадентский, элитарный образ жизни. Многие жители \ + Венеры делятся на две категории: богатые и отставники. Первая категория обычно наслаждается своим гедонистским и \ + беззаботным образом жизни, вполне соответстсвующим их богатству. Помимо тех, кто достаточно богат, чтобы жить там \ + постоянно, большинство людей на Венере - работники сферы обслуживания, которые живут там только на время их \ + занятости. Вторая группа - это выносливые рабочие, трудящиеся в больших промышленных центрах, жизнь которых \ + полностью отличается от богачей. Они часто возмущаются и конфликтуют с первой группой." + capital = "Иштар-Терра" + +/singleton/cultural_info/location/human/ceres + nickname = "Церера" + distance = "2.7 а. е" + description = "Официально, Правительственный Горнодобывающий и Жилой Форпост Планеты Церера - форпост по добыче \ + полезных ископаемых, исторически являющийся важным горнодобывающим объектом для Человечества. Тем не менее, \ + эта важность значительно уменьшилась за последние несколько десятилетий, и сегодня - это обширная, \ + многолюдная станция. Управляемая главным образом Falco Designs, одной из ведущих судостроительных корпораций \ + ЦПСС, Церера является домом для множества доков и сервисных центров для судов. Она также является \ + торговым и военным аванпостом для всех кораблей, входящих в Солнечную Систему. Однако, помимо всего \ + вышеперечисленного, это место имеет репутацию своеобразного черного рынка. Обычно, называемые «Белтерами», \ + люди Цереры в основном заняты судостроением, производством, и обслуживанием судов. Они, как правило, считают \ + себя адаптивными, гордыми членами ЦПСС, а также лучшими инженерами, без преувеличения, всего Человечества." + capital = "Район Йирина, станция Цереры" + +/singleton/cultural_info/location/human/pluto + nickname = "Плутон" + distance = "45 а. е" + description = "Плутон, номинально являющийся Демократической Республикой - самая маленькая планета в Солнечной \ + Системе. Его население сравнительно небольшое на фоне других планет ЦПСС. Большая часть \ + жителей Плутона сосредоточена вокруг двух городов, оба из которых остро нуждаются в модернизации и ремонте, а \ + также большой, давно разрушенной инфраструктуре. На Плутоне преобладают криминальные элементы, а коррупция \ + процветает. Те, кто живет на этой планете либо влечет отчаянное, жалкое существование, пытаясь покинуть этот мир, \ + либо является частью, или же просто под прикрытием одного из многочисленных местных преступных синдикатов. \ + Несмотря на ряд усилий по модернизации, планете мало что действительно помогло. Местные жители не отличаются \ + гостеприимством и моральными качествами, и за это часто порицаются на всей территории ЦПСС. Забитые, бедные, и \ + из региона, который так кишит преступностью, они создали свою собственную уникальную, но вместе с тем наводящую \ + ужас культуру. Большинство людей Плутона очень грубы, трусливы, закалены годами нищеты или преступности. Те, кому \ + посчастливилось покинуть это место, очень редко хотят вернуться обратно." + capital = "Нью Санто-Доминго" + +/singleton/cultural_info/location/human/cetiepsilon + nickname = "Эпсилон Кита" + distance = "11.9 световых лет" + description = "Эпсилон Кита - единственная обитаемая планета в системе Тау Кита, а также дом для ее крупнейшего \ + и единственного населенного пункта - Верлиза. Сама планета, фактически, покрыта одним крупным городом с несколькими \ + «зелеными» областями, разбросанными по всей поверхности. Она привлекает многих туристов своими неоновыми огнями, \ + где так легко потеряться на многочисленных улицах. Что еще более важно, на Эпсилон Кита расположен \ + Технологический Институт Кита - возможно, лучшее учебное заведение во всем Человеческом пространстве. \ + Технологический Институт Кита является государственным университетом и, по большей части, предоставляет \ + бесплатное обучение для всех. Тем не менее, места выделяются предпочтительно для уроженцев системы Тау Кита, так \ + как конкуренция за их получение была еще с самого его основания. Сегодня Эпсилон Кита является крупным центром \ + технологий, предназначенных для тех, кто ищет лучшую жизнь или же просто стремится к профессиональному \ + совершенству. Люди из этого места являются одними из самых подкованных в научно-техническом плане. Будучи из в \ + значительной степени застроенного мира с акцентом на самые передовые технологии, большинство эпсилонианов имеют \ + отличное образование. Они заработали Эпсилон Кита репутацию одной из лучших планет ЦПСС." + capital = "Айкон" + +/singleton/cultural_info/location/human/eos + nickname = "Гаусс" + description = "Гаусс в системе Гелиос сам по себе является маленьким, жарким и плотно заселенным миром. Планета \ + осуществляет исключительно маргинальную функцию, хотя и поддерживает плотно населенный город - Сурья, \ + который стал известен своими банковскими услугами. Гелиоская Гейтвейная Установка (ГГУ) - это самое большое \ + сооружение Гейтвея на территории ЦПСС, обеспечивает жизненно важную транспортную связь со многими другими \ + системами СолПрава. Фактически, это город в космосе. ГГУ является смесью частных апартаментов, офисов Флота, \ + правоохранительных органов, государственных служб и широкого спектра частных предприятий, которые обслуживают \ + множество туристов, путешественников, торговцев и солдат, проходящих через Гейтвей ежедневно. Только этот факт \ + позволил Гелиосу и Гауссу в целом преодолеть многочисленные экономические упадки и позволил зарекомендовать их \ + как главный коммерческий центр ЦПСС. Дела были затруднены во время Гайского Конфликта, когда ГГУ была \ + уничтожена в результате самоподрыва Четвертого Флота, чтобы остановить продвижение флотилии Терранской \ + Конфедерации. Гейтвей быстро оправился после оккупации, но память и скорбь остаются всегда." + capital = "Сурья" + distance = "10 световых лет" + +/singleton/cultural_info/location/human/terra + nickname = "Терра" + description ="Терра, в системе Гильгамеша. Разве это не та планета Земля, как могут подумать некоторые? Нет, \ + Терра - домом Гильгамешской Колониальной Конфедерации, столица сверхдержавы. Она является одной \ + из многих ключевых планет в ГКК и, возможно, самой важной. Ее жители придерживаются изоляционизма, что \ + особенно заметно по характерному отсутствию ксенорас среди населения. Большая часть Терры сильно \ + индустриализирована, с однако более низким уровнем жизни, чем на эквивалентных планетах ЦПСС. Большая часть \ + населения работает в сфере услуг, промышленности или армии. Все еще восстанавливаясь после экономического краха в \ + конце Гайского Конфликта, большая часть планеты находится в упадке: коммунальные услуги и возможности устроиться \ + на какую-либо работу минимальны, а большая часть населения обременена высокими налогами. Такое положение дел \ + привело к тому, что в последние годы многие Терранцы отправились на другие миры в надежде избежать тех плохих \ + условий, в которых они оказались. Несмотря на это, люди Терры - гордые и нерушимые люди, которые в высшей \ + степени патриотичны и склонны поддерживать свое государство где бы они не находились." + capital = "Амарант" + distance = "22.5 световых лет." + ruling_body = "Гильгамешская Колониальная Конфедерация" + +/singleton/cultural_info/location/human/saffar + nickname = "Саффар" + distance = "44 световых года" + description = "Саффар - газовый гигант в системе Ипсилон Андромеды. Поверхность, сравнимая по размеру с Юпитером, \ + непригодна для пребывания большинства высших форм жизни. Однако из-за близости системы к нескольким другим колониям \ + и состава атмосферы Саффара на высокой орбите в 2198 году была построена заправочно-добывающая станция. Со временем \ + станция расширилась, чтобы вместить более высокий трафик и постоянно растущее число постоянных жителей, кульминацией \ + чего стало строительство Врат внутри системы вскоре после окончания войны между Терранским Содружеством и \ + Конфедерацией Ареса. С момента постройки Врат Саффар номинально находится под юрисдикцией Администрации Врат ЦПСС, \ + хотя попытки Саффара считаться государством-членом предпринимались с момента первого формирования Правительства \ + Солнечной Системы." + capital = "Станция Саффар" + +/singleton/cultural_info/location/human/tadmor + nickname = "Тадмор" + distance = "45 световых лет" + description = "Тадмор - пустынная планета размером примерно в два раза больше Земли, расположенная в системе Гамма \ + Цефеи. Тадмор был государством-членом Правительства Солнечной Системы с момента его образования. Экономика Тадмора, \ + впервые заселенного в 2176 году группой марсианских колонистов, основана как на промышленном сельском хозяйстве, так \ + и на производстве различных электронных товаров. Тадморанцы гордятся своим пацифизмом, и лишь немногие из них \ + встречаются в Силах Обороны ПСС. Однако это привело к некоторому конфликту во время Гайской Войны между сенаторами \ + Тадмора и политиками центральных миров." + capital = "Пальмира" + +/singleton/cultural_info/location/human/pirx + nickname = "Прикс Прайм" + distance = "41 световой год" + description = "Пиркс Прайм - экзотическая планета, расположенная в системе Пиркс. Выделяясь большим разнообразием флоры \ + и враждебной фауны, Пиркс по своей сути ближе к неизведанному космосу, чем к большинству других колоний. Пиркс пострадал \ + от этого разрыва: в нем мало корпоративных инвесторов и иммигрантов. Таким образом, большая часть планеты остается \ + неисследованной. С недавним возрождением Экспедиционного Корпуса Пиркс быстро стал своего рода узлом снабжения \ + для кораблей ЭК и тренировочным полигоном для будущих исследователей. Длительное пренебрежение, а затем внезапная \ + эксплуатация породили у многих жителей Пиркса резкое отношение к ЦПСС и ЭК." + capital = "Юоду" + +/singleton/cultural_info/location/human/brahe + nickname = "Браге" + distance = "41 световой год" + description = "Браге — планета-океан в системе Коперника. Впервые колонизирован вместе с Иолаем в 2132 году. Контакт с \ + планетой был временно потерян во время войны между Содружеством Терранов и Конфедерацией Ареса. С тех пор, как контакт \ + был восстановлен во время формирования ЦПСС, Браге стал решительным сторонником правительства и дальнейшей экспансии в \ + неизведанный космос. Поскольку только 12% поверхности планеты является пригодной для использования сушей, экономика \ + Браге в основном основана на туризме, который привлекают обширные побережья, и исследованиях, проводимых в надводных и \ + подводных лабораториях. Корпорация Zeng-Hu, в частности, имеет прочные связи с генетическими исследовательскими \ + лабораториями Браге, и многие правительственные чиновники Браге занимают должности в компании." + capital = "Новый Орхус" + +/singleton/cultural_info/location/human/iolaus + nickname = "Иолай" + distance = "41 световой год" + description = "Иолай - терроформированная планета в системе Коперника. Впервые колонизирован одновременно с Браге в \ + 2132 году. Контакт с планетой был временно потерян во время войны между Терранским Содружеством и Конфедерацией Ареса. \ + В течение этого периода времени Иолай поддерживал жизнь двух молодых колоний, производя достаточно еды и припасов, \ + чтобы две планеты могли прокормиться. Поскольку контакт был восстановлен во время формирования ЦПСС, Иолай \ + предпринял усилия, чтобы сохранить некоторую независимость, одновременно воспользовавшись преимуществами \ + восстановления торговли в системе. В результате импорт Иолая, как правило, ограничивается только тем, что они \ + не могут произвести сами, в то время как экспорт Иолаев отправляется по всему пространству ПСС." + capital = "Немея" + +/singleton/cultural_info/location/human/gaia + nickname = "Гайя" + distance = "14 световых лет" + description = "Гайя - единственная планета в системе Галилей, служащая Демилитаризованной Зоной между ЦПСС и ТКК. \ + Сам со себе, это сельскохозяйственный мир, хотя различные конфликты на поверхности оставили неизгладимое \ + впечатление на облике планеты. Она делится на контролируемую ЦПСС Южную Гайю и контролируемую ТКК Северную Гайю, \ + при этом Новая Венеция остается нейтральной внутри ДМЗ. Население планеты остается разделенным даже спустя 10 лет \ + после Гайского конфликта. Новая Венеция находится на берегу озера Кабот. Пока мир разделен, нынешний мэр Новой \ + Венеции служит жизненно важным посредником между обеими сторонами. Местные жители устали от войны и жаждут увидеть \ + свои семьи снова. Они сильно пострадали во время войны и боятся, что это еще не конец." + capital = "Нью-Венеция" + +/singleton/cultural_info/location/human/magnitka + nickname = "Магнитка" + distance = "24 световых года" + description = "Магнитка - это независимая, промышленно развитая горно-добывающая колония, расположенная в системе \ + Урса. Под управлением авторитарного правительства, тесно связанного с основавшими его корпорациями, недавняя \ + история Магнитки отмечена гражданской войной. Даже сегодня большое количество повстанческих групп населяют планету. \ + Основанная немецкими компаниями в 2230-ых годах, подавляющее большинство колонистов происходит из \ + восточноевропейских рабочих и их немецких менеджеров. К сожалению, экономика Магнитки находится в упадке, \ + поскольку ее основной экспорт - железо - с каждым днем все дешевеет. Основные карьеры в этом мире: военная служба, \ + добыча полезных ископаемых или организованная преступность. Хотя исторически склонная к изоляционизму, сегодня \ + Магнитка все теснее связывается с ГКК, пытаясь компенсировать экономический спад." + capital = "Лейбортаун" + economic_power = 0.8 + ruling_body = "Магнитка" + +/singleton/cultural_info/location/human/castilla + nickname = "Нуэва Кастилья" + distance = "10 световых лет" + description = "Нуэва Кастилья - экзопланета в системе Кулебре, находящаяся на поздней стадии терраформирования. \ + Бывшая ранее бесплодной скалой, она была выбрана для будущей колонизации благодаря своим размерам, составу ядра \ + и расположению в \"зоне золотого сечения\" системы Кулебре. С начала реализации проекта на Нуэва Кастилья \ + сформировалась функциональная, хотя и весьма своеобразная биосфера, большая часть которой покрыта \ + быстрорастущим мхом. На планете имеется два крупных поселения и несколько более мелких, как на поверхности, так и \ + внутри системы." + capital = "Плацида" + +/singleton/cultural_info/location/human/fosters + nickname = "Планета Фостера" + distance = "11 световых лет" + description = "Мир Фостера, расположенный в системе Санура, представляет собой небольшую ледяную экзопланету с \ + планетарной массой немного меньшей, чем у Земли. Высокоактивное ядро вызвало образование нескольких небольших океанов \ + с широкими и умеренными береговыми линиями — единственная причина, по которой на планете вообще есть пригодная для \ + дыхания атмосфера. Планета и система принадлежат частному кооперативу. Колонисты, отважившиеся покорить планету, \ + процветают, несмотря на суровые погодные условия, экспортируя морепродукты и принимая туристов, жаждущих \ + познакомиться с чужой планетой." + capital = "Высадка Фостера" diff --git a/mods/_master_files/code/modules/culture_descriptor/location/locations_other.dm b/mods/_master_files/code/modules/culture_descriptor/location/locations_other.dm new file mode 100644 index 0000000000000..4c0f89e247a09 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/location/locations_other.dm @@ -0,0 +1,17 @@ +/singleton/cultural_info/location/stateless + nickname = "Апатрид" + description = "Некоторые разумные возникают просто из ниоткуда... Нет правительства или организации, что постояли бы за ваши права." + ruling_body = "Отсутствует" + +/singleton/cultural_info/location/other + nickname = "Неизвестное происхождение" + description = "В последний раз, когда кто-то пытался создать всеобъемлющую энциклопедию известной галактики, его позитронный \ + процессор удалился сам, не успев справиться с задачей. Вы из ниоткуда - из захолустного мира или откуда-то за пределами \ + звездных карт." + distance = "Варьируется" + capital = "Варьируется" + ruling_body = "Варьируется" + +/singleton/cultural_info/location/deep_space + nickname = "Глубокий космос" + description = "Вы пришли из межвездной пустоты." diff --git a/mods/_master_files/code/modules/culture_descriptor/location/locations_serpentids.dm b/mods/_master_files/code/modules/culture_descriptor/location/locations_serpentids.dm new file mode 100644 index 0000000000000..3d8762c57fc58 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/location/locations_serpentids.dm @@ -0,0 +1,8 @@ +/singleton/cultural_info/location/tauwilo + nickname = "Тау Вило" + description = "Тау Вило - маленькая планета, родная для ГБС, имеющая низкую гравитацию и плотную кислородную и \ + азотную атмосферу с примесями форона. Здесь преобладают биоразнообразные тропические и субтропические леса.\ + Единственное Человеческое поселение - исследовательский центр, построенный компанией Xynergy и используемый \ + в программе обучения ГБС. Тау-Вило является единственным известным местом размножения этих причудливых \ + созданий." + distance = "26 световых лет" diff --git a/mods/_master_files/code/modules/culture_descriptor/location/locations_skrell.dm b/mods/_master_files/code/modules/culture_descriptor/location/locations_skrell.dm new file mode 100644 index 0000000000000..077e24ad78c8f --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/location/locations_skrell.dm @@ -0,0 +1,77 @@ +/singleton/cultural_info/location/qerrbalak + nickname = "Кверр'балак" + description = "Кверр'балак в системе Кверр'валис является древним домом скреллов. Большой, болотистый мир, он \ + состоит из двух континентов, разделенных архипелагами в огромном океане. Меньший континент, являющийся родным \ + домом цивилизации Скреллов, - Корр'глоа, представляет собой болото, причем большинство их городов \ + построены на побережье. Оно отделено морем К'оррия от другого, более крупного материка, - Си'Кририоал, \ + густонаселенного и разнообразного, со снежными горами на юге и умеренными зонами во внутренних районах. \ + Кверр'балак, состоящий из сотен городов-государств, до сих пор является домом для значительного населения скреллов. \ + Хотя он больше не является единственной электростанцией на планете, он все еще широко почитаем среди скреллов как \ + их родной мир, а также за его научные достижения." + capital = "Нет" + ruling_body = "Скреллианская Империя" + distance = "67 световых лет" + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_HUMAN_RUSSIAN, LANGUAGE_SIGN, LANGUAGE_GUTTER, LANGUAGE_HUMAN_EURO) + +/singleton/cultural_info/location/talamira + nickname = "Таламира" + description = "Таламира в системе Ри'куора расположена далеко в пространстве скреллов, в том месте, что для людей \ + является неизученной и неизведанной территорией. Основанная около 500 лет назад, Таламира считается торговым и \ + коммерческим центром в своем секторе. Это в значительной степени является результатом его центрального положения \ + между большим количеством пограничных городов-государств и остальной части Скреллианской Империи. Сама планета \ + состоит из одного суперконтинента, на котором болота несколько теплее, чем Кверр'балак, с сотнями \ + городов-государств, усеивающих ее поверхность, большинство из которых вкладывают значительные средства в \ + производство и логистику, извлекая выгоду из торговли сырьевыми ресурсами с пограничными мирами. Таламира \ + считается экономическим центром, где ее города-государства обладают большим влиянием за рубежом." + capital = "Нет" + ruling_body = "Скреллианская Империя" + distance = "300 световых лет" + +/singleton/cultural_info/location/roasora + nickname = "Роа'сора" + description = "Роа'сора в системе Куэрри'терр представляет собой небольшую планету, состоящую из одного \ + города-государства под названием Три'Сорр. С момента своего основания около 200 лет назад, \ + скреллы из Роа'сора находились в состоянии постоянной обороны от таинственных чужаков, которые не предпринимали \ + никаких дипломатических попыток сообщить о себе. Из назвали \"Трумами\" - из-за отличительного звуков, которые те \ + издавали. Трумы совершали постоянные набеги на колонистов-скреллов. Именно из-за такой ситуации Роа'сора сильно \ + милитаризована, однако с их стороны все еще не прекращаются попытки установить дипломатический контакт \ + с \"налетчиками\". Основной экспорт планеты - редкие полезные ископаемые, хотя имеется и сильно развитая военная \ + промышленность, поскольку до сих пор переговоры с чужаками не принесли каких-либо успехов. Географически планета \ + имеет горную и скалистую поверхность, с несколькими глубокими озерами в горных долинах, вокруг которых построено \ + большинство шахтерских станций." + capital = "Нет" + ruling_body = "Скреллианская Империя" + distance = "350 световых лет" + +/singleton/cultural_info/location/mitorqi + nickname = "Ми'тор'куи" + description = "Ми'тор'куи в системе Куа'ло является одной из множества планет вдоль границы между Человечеством и \ + Скреллианской Империей. Будучи одной из новейших колоний, многочисленные города-государства Ми'тор'куи \ + демонстрируют большое влияние Людей в их обществе. Экономически сосредоточенные на межзвездной торговле с \ + представителями Человечества, именно отсюда ряд компаний корпораций скреллов предлагают кредитные услуги \ + квалифицированных работников человеческим организациям. Однако такое положение дел нравится далеко не всем \ + местным. Несмотря на процветание планеты, здесь растет консервативность и ксенофобское движение во многих \ + городах-государствах, обеспокоенных возрастающим влиянием Человечества и его потенциальным долгосрочным ущербом." + capital = "Нет" + ruling_body = "Скреллианская Империя" + distance = "32 световых года" + +/singleton/cultural_info/location/skrellspace + nickname = "Оборонительная Сила Скреллов" + description = "Совсем другой стиль жизни, отличающийся от традиционного, основанного на городе-государстве. \ + Это те, кто живут в космосе, не принадлежат к одному конкретному городу-государству, а вместо этого служат ОСС \ + (Оборонительным Силам Скреллов), в которой они находятся, со всей спецификой организации военного типа. Жизнь \ + в таких обстоятельствах куда более упорядочена и дисциплинирована, с сильным акцентом на братство и \ + сотрудничество в целом, с различными крайностями в зависимости от статуса, финансирования и уровня военных действий." + capital = "Нет" + ruling_body = "Локальная ОСС" + distance = "Варьируется" + +/singleton/cultural_info/location/otherskrell + nickname = "Территория скреллов" + description = "Скреллы контролируют гораздо более обширную область космоса, чем человечество, и многим их \ + пространство кажется неисчислимо бесконечным. Эта планета — один из многих скреллианских миров, которые менее \ + известны." + capital = "Нет" + ruling_body = "Скреллианская Империя" + distance = "Варьируется" diff --git a/mods/_master_files/code/modules/culture_descriptor/location/locations_unathi.dm b/mods/_master_files/code/modules/culture_descriptor/location/locations_unathi.dm new file mode 100644 index 0000000000000..c7cf18eada84f --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/location/locations_unathi.dm @@ -0,0 +1,26 @@ +/singleton/cultural_info/location/moghes + nickname = "Могес" + description = "Могес - мёртвый мир, полный странных, чудовищных существ и таинственных и опасных ландшафтов, - \ + это дом унати. Унати верят, что этот мир когда-то был пышным и полным жизни, но из-за \ + решений предтеч он был убит и оставлен гнить. Для унати их долг \ + - вернуть его к жизни или стать достаточно сильным, чтобы им не пришлось этого делать." + ruling_body = "Кланы унати" + distance = "29 световых лет" + +/singleton/cultural_info/location/ouere + nickname = "Оуэр" + description = "Недавно обнаруженная система Врат Предшественников, соединяющих Могес с его младшей сестрой \ + планетой Оуэр, видела множество кланов и небольших групп, шагающих через нее в этот новый мир. Всё ещё \ + нет четкого консенсуса относительно того, каково будет отношение к этому новому миру - либо как к логическому продолжению Могеса, совершенно новой сущности, \ + или просто как к ресурсной базе для улучшения родной планеты. Многие колонисты, охотники за артефактами и подвергшиеся остракизму группы \ + стекались на планету, и число последователей Маркешских общин росло довольно быстро, по сравнению с другими частями Могеса." + ruling_body = "Кланы унати" + distance = "29 световых лет" + +/singleton/cultural_info/location/offworld + nickname = "Иные миры" + description = "То ли по несчастным обстоятельствам, то ли по собственной воле вы оставили Могес в поисках своей \ + цели. Вы - один из многих унати, которые бросили вызов опасностям и покинули свою собственную планету, чтобы творить свою собственную судьбу, будь \ + то в обжигающем жаре Цину, тропических раях Кингстона или шумных верфях Цереры." + ruling_body = "Различается" + distance = "Различается" diff --git a/mods/_master_files/code/modules/culture_descriptor/location/locations_vox.dm b/mods/_master_files/code/modules/culture_descriptor/location/locations_vox.dm new file mode 100644 index 0000000000000..04cb65ecb329a --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/location/locations_vox.dm @@ -0,0 +1,30 @@ +/singleton/cultural_info/location/vox + nickname = "Ковчег" + description = "Корабли-ковчеги размером с Луну остаются домом для огромного, подавляющего числа воксов и \ + представляют собой самую стабильную планетарную культуру, которую имеют эти кочевые виды. Воксы с ковчегов \ + могут рассчитывать на долгую жизнь, редкие ситуации реимпринтинга и богатую, разнообразную социальную жизнь \ + среди буйных кланов и семей. Рейдеры и мусорщики могут считать жителя ковчега ленивым и пассивным воксом, \ + но они склонны возвращаться на ковчег для отдыха и восстановления сил после каждой миссии, без особых жалоб." + ruling_body = "Апекс" + distance = "Варьируется" + +/singleton/cultural_info/location/vox/shroud + nickname = "Саванна Ковчега" + description = "Саванна корабля-ковчега является нестабильным и опасным местом для жизни, и те, кто там \ + находится, часто работают мусорщиками, спасателями, инженерами и техниками, борющимися с бесконечными \ + поломками и разрушением ковчега, которое может перейти за пределы Саванны - в Рощу, и загнать устоявшуюся \ + систему в более критическое состояние. По сравнению с простыми жителями ковчегов, жители Саванны тихие, \ + самостоятельные и независимые, мало заботятся о клановой политике, семейных ссорах или соревновательных \ + проблемах. Они знают, что их задача имеет решающее значение для выживания воксов как вида, поэтому борьба \ + со своими сверстниками кажется глупым занятием." + secondary_langs = list(LANGUAGE_GUTTER) + +/singleton/cultural_info/location/vox/ship + nickname = "Звездолёты воксов" + description = "Воксы с космических кораблей часто специально \"выращиваются\" для выполнения конкретно \ + поставленных перед ними задач под непосредственным руководством апекса или его слуг - армалисов. Они часто \ + рассматриваются как «одноразовые» в культуре воксов, поскольку редко удается им провести процедуру \ + реимпринтинга во время нахождения тела за пределами корабля. Те, кому удается это сделать, как правило, \ + отправляются с заданием на еще более дальние дистанции, так как их успехи говорят своим хозяевам о хороших \ + способностях. Жизнь рожденного на корабле вокса трудна и кровава, и его будут убивать и возрождать чаще, \ + чем даже самых безрассудных рейдеров, рожденных на ковчеге." diff --git a/mods/_master_files/code/modules/culture_descriptor/religion/religions_human.dm b/mods/_master_files/code/modules/culture_descriptor/religion/religions_human.dm new file mode 100644 index 0000000000000..cff486c1b7e16 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/religion/religions_human.dm @@ -0,0 +1,81 @@ +/singleton/cultural_info/religion/other + nickname = "Локальная религия" + description = "Одна из многих локальных и относительно неизвестных религий." + +/singleton/cultural_info/religion/unstated + nickname = "Не указано" + description = "Верования и религия не указаны по причинам, известным только самому субъекту." + +/singleton/cultural_info/religion/jewish + nickname = "Иудаизм" + description = "Абрахамская монотеистическая религия, которую исповедует еврейский народ. Того, кто исповедует \ + иудаизм и относится к еврейской культуре, называют евреем." + +/singleton/cultural_info/religion/hindu + nickname = "Индуизм" + description = "Индийская религия, охватывающая множество традиций, верований и духовных практик. Того, кто \ + исповедует индуизм, называют индуистом." + +/singleton/cultural_info/religion/buddhist + nickname = "Буддизм" + description = "Индийская религия, охватывающая множество традиций, верований и духовных практик, основанных \ + на учении Будды. Того, кто исповедует буддизм, называют буддистом." + +/singleton/cultural_info/religion/jain + nickname = "Джайнизм" + description = "Индийская религия, которая учит спасению через самосовершенствование души и ненасилие для \ + достижения всеведения, всесилия и вечного блаженства. Того, кто исповедует джайнизм, называют джайном." + +/singleton/cultural_info/religion/sikh + nickname = "Сикхизм" + description = "Индийская монотеистическая религия, основанная на духовных учениях Гуру Нанака и девяти \ + сикхских гуру, пришедших ему на смену. Того, кто исповедует сикхизм, называют сикхом." + +/singleton/cultural_info/religion/muslim + nickname = "Ислам" + description = "Абрахамская монотеистическая религия, которая гласит, что существует только один Бог, и что \ + Мухаммед является Его пророком. Того, кто исповедует ислам, называют мусульманином." + +/singleton/cultural_info/religion/christian + nickname = "Христианство" + description = "Абрахамская монотеистическая религия, основанная на жизни и учении Иисуса из Назарета. Того, \ + кто исповедует христианство, называют христианином." + +/singleton/cultural_info/religion/bahai + nickname = "Бахаи" + description = "Абрахамская монотеистическая религия, которая следует учению Бахауллы и верит во всеобщий мир \ + и единство. Того, кто исповедует веру бахаи, называют бахаитом." + +/singleton/cultural_info/religion/agnostic + nickname = "Агностицизм" + description = "Вера в то, что ничего не известно или не может быть известно о существовании или природе Бога. \ + Того, кто придерживается агностицизма, называют агностиком." + +/singleton/cultural_info/religion/deist + nickname = "Деизм" + description = "Вера в существование высшего существа, в частности, создателя, который не вмешивается во \ + вселенную. Того, кто исповедует деизм, называют деистом." + +/singleton/cultural_info/religion/atheist + nickname = "Атеизм" + description = "Отсутствие веры в Бога и высшие силы. Того, кто придерживается атеизма, называют атеистом." + +/singleton/cultural_info/religion/thelemite + nickname = "Телема" + description = "Эзотерическая западная религия, основанная на законе Телемы. Того, кто исповедует Телему, \ + называют Телемитом." + +/singleton/cultural_info/religion/spiritualism + nickname = "Спиритуализм" + description = "Вера, основанная на общении с духами мертвых, особенно через медиумов. Тот, кто исповедует \ + спиритуализм, называется спиритуалистом." + +/singleton/cultural_info/religion/shinto + nickname = "Синтоизм" + description = "Традиционная японская религия, основанная на ритуалах для создания связи между прошлым и \ + настоящим. Того, кто исповедует синтоизм, называют синтоистом." + +/singleton/cultural_info/religion/taoist + nickname = "Даосизм" + description = "Традиционная китайская религия, которая подчеркивает жизнь в гармонии с дао. Тот, кто \ + исповедует даосизм, называется даосом." diff --git a/mods/_master_files/code/modules/culture_descriptor/religion/religions_skrell.dm b/mods/_master_files/code/modules/culture_descriptor/religion/religions_skrell.dm new file mode 100644 index 0000000000000..7a84dbfa045c9 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/religion/religions_skrell.dm @@ -0,0 +1,8 @@ +/singleton/cultural_info/religion/warble + nickname = "Учение Пустоты" + description = "Хотя большинство скреллов придерживаются материализма и отвергают присутствие в реальности сверхестественных сил, не все представители \ + этой расы так сильно верят в непоколебимость рационализма. Долгие путешествия сквозь космос заставляют задумываться многих о том, как же они \ + незначительны на фоне целой Галактики. Некоторые приобретают философский взгляд на вещи, другие же просто осознают как же важно оставаться среди своих \ + собратьев. Но есть и те, кто стараются понять окружающий их мир посредством эмоций, внутренних чувств и ощущений. Они стараются стать едиными с Пустотой, \ + с темным бескрайним космосом, стремясь понять его не используя свой разум - но душу. Многие последователи этого \"учения Пустоты\" часто уходят в дальние \ + экспедиции, лишь ради этого ощущения удаленности от цивилизации." diff --git a/mods/_master_files/code/modules/culture_descriptor/religion/religions_unathi.dm b/mods/_master_files/code/modules/culture_descriptor/religion/religions_unathi.dm new file mode 100644 index 0000000000000..cc6f9a9af3ef6 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/religion/religions_unathi.dm @@ -0,0 +1,43 @@ +/singleton/cultural_info/religion/unathi + nickname = "Рука Лозы" + description = "Рука Лозы - вера фермеров, её проповедуют полукочевые путешественники, которые верят, что разрушение Могеса должно стать шансом для унати \ + превратить его в свой собственный рай. Они всегда ищут новые способы развития жизни в своем мире и часто называют себя \ + \"Её руки\"." + +/singleton/cultural_info/religion/unathi_precursors + nickname = "Поклонение Предтеч" + description = "Поклонение Предтеч - ориентированные в первую очередь на изучение и понимание всего, что они могут, о предтеч, последователи этой веры \ + хотят построить лучший мир для своего народа с помощью инструментов, которые оставили для них предтеч." + +/singleton/cultural_info/religion/unathi_strat + nickname = "Великая Стратегия" + description = "Конфликт и борьба определяют эту веру. Будь то война, внутренняя борьба, споры или другие вызовы - для последователей Великой Стратегии \ + эти события всегда должны быть возможностью расти и учиться, чтобы они могли стать вершиной общества унати, а их дети могли быть еще сильнее. \ + Как еще унати смогут победить космическое зло и выжить в мире, подобном Могесу?" + +/singleton/cultural_info/religion/unathi_lights + nickname = "Плодотворные Огни" + description = "Последователи Плодотворных Огней подчеркивают важность того, что *вы* можете делать своими руками и умом. Как вы можете создать лучший \ + мир для себя и своего клана? Плодотворные Огни хотят создать этот мир для унати. В отличие от почитателей Предтеч, \ + последователи Огней верят в знание законов природы и считают, что именно изобретательность и \ + инженерия должны принести золотой век их народу." + +/singleton/cultural_info/religion/unathi_markesh + nickname = "Маркешели" + description = "Презираемый культ Маркеша стоит особняком от других верований унати. Будучи впервые упомянутым и впоследствии почти \ + уничтоженным - два тысячелетия спустя другие унатхи считают Маркешели темным пятном в своей истории. Культ, который процветал на насилии и жертвоприношениях, \ + Маркешели терпят из-за народного недовольства их вытеснением. Многие внеземные маркешели являются более миролюбивыми из \ + последователей культа. Тем не менее, большинство унати все еще видят в них сущее зло, отчасти из-за их истории насилия." + +/singleton/cultural_info/religion/unathi_ancestor + nickname = "Поклонение Предкам" + description = "Чтобы обеспечить нормальное функционирование естественной и общественной жизни, унати ищут покровительства могущественных духов \ + прошлого, особенно тех из своих сородичей, которых называют Предками, - в ряды которых каждый унати обязан в какой-то момент вступить. \ + Поклонение Предкам почти универсально и служит основой для других духовных движений Могеса." + +/singleton/cultural_info/religion/unathi_aga_eakhe + nickname = "Ага-Эхе" + description = "Традиционная религия Йоза, Ага-Эхе, основана на тотемическом поклонении Предкам и другим духам, которые проявляют себя как чудовищные \ + существа, обитающие на морском дне. Почитаемые Йоза, эти физические аватары могущественных покоятся под темными водами, их простое движение \ + вызывает изменение моря. Ага-Эхе имеет свою собственную устную традицию и заповеди, призванные облегчить выживание Йоза в их \ + водном мире - эти религиозные законы соблюдаются большинством кланов Мирового Моря." diff --git a/mods/_master_files/code/modules/culture_descriptor/religion/religions_vox.dm b/mods/_master_files/code/modules/culture_descriptor/religion/religions_vox.dm new file mode 100644 index 0000000000000..41d2e6237a367 --- /dev/null +++ b/mods/_master_files/code/modules/culture_descriptor/religion/religions_vox.dm @@ -0,0 +1,3 @@ +/singleton/cultural_info/religion/vox + nickname = "Поклонение Ауралис" + description = "Повинуйтесь Ауралис и почитайте, ибо они те, кто пришел раньше, и за то, что они откроют путь." diff --git a/mods/_master_files/code/modules/events/gravity.dm b/mods/_master_files/code/modules/events/gravity.dm new file mode 100644 index 0000000000000..af80028b14819 --- /dev/null +++ b/mods/_master_files/code/modules/events/gravity.dm @@ -0,0 +1,10 @@ +/datum/event/gravity/setup() + announceWhen = rand(15, 60) + +/datum/event/gravity/start() + var/obj/machinery/gravity_generator/main/GG = GLOB.station_gravity_generator + if(!GG || !(GG.z in affecting_z)) + log_debug("The gravity generator was not found while trying to start an event.") + return + + GG.set_state(FALSE) diff --git a/mods/_master_files/code/modules/mob/living/carbon/human/human_movement.dm b/mods/_master_files/code/modules/mob/living/carbon/human/human_movement.dm new file mode 100644 index 0000000000000..b0975872bdf84 --- /dev/null +++ b/mods/_master_files/code/modules/mob/living/carbon/human/human_movement.dm @@ -0,0 +1,4 @@ +/mob/living/carbon/human/movement_delay() + . = ..() + if(facing_dir) + . += 3 diff --git a/mods/_master_files/code/modules/mob/new_player/new_player.dm b/mods/_master_files/code/modules/mob/new_player/new_player.dm new file mode 100644 index 0000000000000..613ad15fbb502 --- /dev/null +++ b/mods/_master_files/code/modules/mob/new_player/new_player.dm @@ -0,0 +1,15 @@ +/mob/new_player/Topic(href, href_list) + if (usr != src) + return TOPIC_NOACTION + if (!client) + return TOPIC_NOACTION + + if(href_list["ready"] || href_list["observe"] || href_list["late_join"]) + if(config.minimum_byondacc_age && client.player_age <= config.minimum_byondacc_age) + if(!client.discord_id || (client.discord_id && length(client.discord_id) == 32)) + client.load_player_discord(client) + to_chat(usr, "Вам необходимо привязать дискорд-профиль к аккаунту!") + to_chat(usr, "Нажмите 'Привязка Discord' во вкладке 'Special Verbs' для получения инструкций.") + return TOPIC_NOACTION + + return ..() diff --git a/mods/_master_files/code/modules/power/gravitygenerator.dm b/mods/_master_files/code/modules/power/gravitygenerator.dm new file mode 100644 index 0000000000000..3c972ee0682df --- /dev/null +++ b/mods/_master_files/code/modules/power/gravitygenerator.dm @@ -0,0 +1,14 @@ +/obj/machinery/gravity_generator + use_power = 0 + unacidable = TRUE + light_color = "#7de1e1" + +/obj/machinery/gravity_generator/ex_act(severity) + return + +/obj/machinery/gravity_generator/emp_act(severity) + SHOULD_CALL_PARENT(FALSE) + return + +/obj/machinery/gravity_generator/bullet_act(obj/item/projectile/P, def_zone) + return diff --git a/mods/_master_files/code/modules/projectiles/projectile/bullets.dm b/mods/_master_files/code/modules/projectiles/projectile/bullets.dm new file mode 100644 index 0000000000000..e9a7676fbe891 --- /dev/null +++ b/mods/_master_files/code/modules/projectiles/projectile/bullets.dm @@ -0,0 +1,3 @@ +/obj/item/projectile/bullet + sharp = TRUE + step_delay = 0.4 diff --git a/mods/_master_files/code/modules/reagents/reagent_containers/food/shaker.dm b/mods/_master_files/code/modules/reagents/reagent_containers/food/shaker.dm new file mode 100644 index 0000000000000..67b1000bce67a --- /dev/null +++ b/mods/_master_files/code/modules/reagents/reagent_containers/food/shaker.dm @@ -0,0 +1,5 @@ +/obj/item/reagent_containers/food/drinks/use_after(obj/target, mob/user) + . = ..() + if (!.) + splashtarget(target, user) + return TURE diff --git a/mods/_master_files/icons/obj/closets/bases/closet.dmi b/mods/_master_files/icons/obj/closets/bases/closet.dmi new file mode 100644 index 0000000000000..7f294b4591118 Binary files /dev/null and b/mods/_master_files/icons/obj/closets/bases/closet.dmi differ diff --git a/mods/_master_files/icons/obj/closets/bases/wall.dmi b/mods/_master_files/icons/obj/closets/bases/wall.dmi new file mode 100644 index 0000000000000..006d30111ef72 Binary files /dev/null and b/mods/_master_files/icons/obj/closets/bases/wall.dmi differ diff --git a/mods/_master_files/maps/sierra/items/rigs.dm b/mods/_master_files/maps/sierra/items/rigs.dm new file mode 100644 index 0000000000000..992ce83480ed0 --- /dev/null +++ b/mods/_master_files/maps/sierra/items/rigs.dm @@ -0,0 +1,4 @@ +/obj/item/rig/exploration + chest_type = /obj/item/clothing/suit/space/rig/command/exploration + boot_type = /obj/item/clothing/shoes/magboots/rig/command/exploration + glove_type = /obj/item/clothing/gloves/rig/command/exploration diff --git a/mods/_master_files/maps/sierra/sierra_ranks.dm b/mods/_master_files/maps/sierra/sierra_ranks.dm new file mode 100644 index 0000000000000..c82309561798b --- /dev/null +++ b/mods/_master_files/maps/sierra/sierra_ranks.dm @@ -0,0 +1,11 @@ +/datum/mil_branch/civilian + name = "Civilian" + name_short = "civ" + +/datum/mil_branch/contractor + name = "Contractor" + name_short = "contr" + +/datum/mil_branch/employee + name = "Employee" + name_short = "empl" diff --git a/mods/_modpack.dm b/mods/_modpack.dm new file mode 100644 index 0000000000000..5cc97598efe7e --- /dev/null +++ b/mods/_modpack.dm @@ -0,0 +1,20 @@ +/singleton/modpack + /// A string name for the modpack. Used for looking up other modpacks in init. + var/name + /// A string desc for the modpack. Can be used for modpack verb list as description. + var/desc + /// A string with authors of this modpack. + var/author + +/singleton/modpack/proc/get_player_panel_options(mob/M) + return + +/singleton/modpack/proc/pre_initialize() + if(!name) + return "Modpack name is unset." + +/singleton/modpack/proc/initialize() + return + +/singleton/modpack/proc/post_initialize() + return diff --git a/mods/ai/README.md b/mods/ai/README.md new file mode 100644 index 0000000000000..5950c2588ae15 --- /dev/null +++ b/mods/ai/README.md @@ -0,0 +1,78 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1773 + + + +## Artificial intelligence + +ID мода: AI + + +### Описание мода + +Твики и QoL фичи для ИИ + + +### Изменения *кор кода* + +- `code/modules/mob/living/silicon/ai/ai.dm`: `var/global/list/ai_verbs_default` +- `code/modules/mob/observer/freelook/chunk.dm`: `/datum/obfuscation/proc/get_obfuscation()` + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +LordNest + diff --git a/mods/ai/_ai.dm b/mods/ai/_ai.dm new file mode 100644 index 0000000000000..c03604b9d5169 --- /dev/null +++ b/mods/ai/_ai.dm @@ -0,0 +1,4 @@ +/singleton/modpack/ai + name = "Artificial intelligence" + desc = "Искусственный - да. Интеллект - нет." + author = "LordNest" diff --git a/mods/ai/_ai.dme b/mods/ai/_ai.dme new file mode 100644 index 0000000000000..b8f1da74be8eb --- /dev/null +++ b/mods/ai/_ai.dme @@ -0,0 +1,10 @@ +#ifndef MODPACK_AI +#define MODPACK_AI + +#include "_ai.dm" + +#include "code/ai.dm" +#include "code/ai_hud.dm" +#include "code/ai_screen_objects.dm" + +#endif diff --git a/mods/ai/code/ai.dm b/mods/ai/code/ai.dm new file mode 100644 index 0000000000000..5f7e07b593c64 --- /dev/null +++ b/mods/ai/code/ai.dm @@ -0,0 +1,65 @@ +// Access + +/mob/living/silicon/ai + idcard = /obj/item/card/id/all/ai + +/obj/item/card/id/all/ai + job_access_type = /datum/job/ai + +/datum/job/ai/get_access() + return get_all_station_access() + +// Languages + +/mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, obj/item/device/mmi/B, safety = FALSE) + . = ..() + add_language(LANGUAGE_SIIK_MAAS, TRUE) + add_language(LANGUAGE_LEGALESE, TRUE) + + +// New verbs + +/mob/living/silicon/ai/proc/ai_take_image() + set name = "Take Photo" + set desc = "Activates the given subsystem" + set category = "Silicon Commands" + + silicon_camera.toggle_camera_mode() + +/mob/living/silicon/ai/proc/ai_view_images() + set name = "View Photo" + set desc = "Activates the given subsystem" + set category = "Silicon Commands" + + silicon_camera.viewpictures() + +/mob/living/silicon/ai/proc/change_floor() + set name = "Change Grid Color" + set category = "Silicon Commands" + + var/f_color = input("Choose your color, dark colors are not recommended!") as color + if(!f_color) + return + + for(var/turf/simulated/floor/bluegrid/turf_to_update in get_area_turfs(get_area(usr))) + turf_to_update.color = f_color + + to_chat(usr, SPAN_NOTICE("Proccessing strata color was change to [f_color]")) + +/mob/living/silicon/ai/proc/show_crew_manifest() + set category = "Silicon Commands" + set name = "Show Crew Manifest" + + open_subsystem(/datum/nano_module/crew_manifest) + +/mob/living/silicon/ai/proc/show_crew_monitor() + set category = "Silicon Commands" + set name = "Show Crew Lifesigns Monitor" + + open_subsystem(/datum/nano_module/crew_monitor) + +/mob/living/silicon/ai/proc/show_crew_records() + set category = "Silicon Commands" + set name = "Show Crew Records" + + open_subsystem(/datum/nano_module/records) diff --git a/mods/ai/code/ai_hud.dm b/mods/ai/code/ai_hud.dm new file mode 100644 index 0000000000000..97e6263c6535c --- /dev/null +++ b/mods/ai/code/ai_hud.dm @@ -0,0 +1,235 @@ +// AI button defines +#define AI_BUTTON_PROC_BELONGS_TO_CALLER 1 +#define AI_BUTTON_INPUT_REQUIRES_SELECTION 2 + +// AI HUD DEFINES +#define ui_ai_core "LEFT:6,BOTTOM:5" +#define ui_ai_announcement "LEFT+1:10,BOTTOM:5" +#define ui_ai_cam_track "LEFT+2:12,BOTTOM:5" +#define ui_ai_cam_light "LEFT+3:14,BOTTOM:5" +#define ui_ai_cam_change_network "LEFT+4:16,BOTTOM:5" +#define ui_ai_sensor "CENTER-2:18,BOTTOM:5" +#define ui_ai_crew_manifest "CENTER-1:20,BOTTOM:5" +#define ui_ai_take_image "CENTER:22,BOTTOM:5" +#define ui_ai_view_images "CENTER+1:24,BOTTOM:5" +#define ui_ai_state_laws "CENTER+2:26,BOTTOM:5" +#define ui_ai_call_shuttle "RIGHT-4:28,BOTTOM:5" + +#define ui_ai_up "RIGHT-1:30,BOTTOM+1:5" +#define ui_ai_down "RIGHT-1:30,BOTTOM:5" + +// AI: Customization +#define ui_ai_holo_change "RIGHT-1:30,BOTTOM+2:5" +#define ui_ai_color "RIGHT-1:30,BOTTOM+3:5" +#define ui_ai_core_icon "RIGHT-1:30,BOTTOM+4:5" +#define ui_ai_status "RIGHT-1:30,BOTTOM+5:5" + +// AI: Tools +#define ui_ai_power_override "LEFT:6,TOP:0" +#define ui_ai_shutdown "LEFT+1:6,TOP:0" +#define ui_ai_holo_mov "LEFT:6, TOP-1:0" + +// AI: Crew +#define ui_ai_crew_mon "RIGHT-1:30,TOP:0" +#define ui_ai_crew_rec "RIGHT-2:30, TOP:0" + +// HUD Code + +/mob/living/silicon/ai + hud_type = /datum/hud/ai + +/datum/hud/ai/FinalizeInstantiation() + + if(!isAI(mymob)) + return + + var/mob/living/silicon/A = mymob + + adding = list() + adding += new /obj/screen/ai_button(null, + ui_ai_core, + "AI Core", + "ai_core", + /mob/living/silicon/ai/proc/core + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_announcement, + "AI Announcement", + "announcement", + /mob/living/silicon/ai/proc/ai_announcement + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_cam_track, + "Track With Camera", + "track", + /mob/living/silicon/ai/proc/ai_camera_track, + list(TYPE_PROC_REF(/mob/living/silicon/ai, trackable_mobs) = (AI_BUTTON_PROC_BELONGS_TO_CALLER|AI_BUTTON_INPUT_REQUIRES_SELECTION)) + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_cam_light, + "Toggle Camera Lights", + "camera_light", + /mob/living/silicon/ai/proc/toggle_camera_light + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_cam_change_network, + "Jump to Network", + "camera", + /mob/living/silicon/ai/proc/ai_network_change, + list(TYPE_PROC_REF(/mob/living/silicon/ai, get_camera_network_list) = (AI_BUTTON_PROC_BELONGS_TO_CALLER|AI_BUTTON_INPUT_REQUIRES_SELECTION)) + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_sensor, + "Set Sensor Mode", + "ai_sensor", + /mob/living/silicon/ai/proc/sensor_mode + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_crew_manifest, + "Show Crew Manifest", + "manifest", + /mob/living/silicon/ai/proc/show_crew_manifest + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_take_image, + "Toggle Camera Mode", + "take_picture", + /mob/living/silicon/ai/proc/ai_take_image + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_view_images, + "View Images", + "view_images", + /mob/living/silicon/ai/proc/ai_view_images + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_state_laws, + "State Laws", + "state_laws", + /mob/living/silicon/ai/proc/ai_checklaws + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_call_shuttle, + "Call Shuttle", + "call_shuttle", + /mob/living/silicon/ai/proc/ai_call_shuttle + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_up, + "Move Upwards", + "ai_up", + /mob/verb/up + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_down, + "Move Downwards", + "ai_down", + /mob/verb/down + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_color, + "Change Floor Color", + "ai_floor", + /mob/living/silicon/ai/proc/change_floor + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_holo_change, + "Change Hologram", + "ai_holo_change", + /mob/living/silicon/ai/proc/ai_hologram_change + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_crew_mon, + "Crew Monitor", + "crew_monitor", + /mob/living/silicon/ai/proc/show_crew_monitor + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_power_override, + "Toggle Power Override", + "ai_p_override", + /mob/living/silicon/ai/proc/ai_power_override + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_shutdown, + "Shutdown", + "ai_shutdown", + /mob/living/silicon/ai/proc/ai_shutdown + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_holo_mov, + "Toggle Hologram Movement", + "ai_holo_mov", + /mob/living/silicon/ai/proc/toggle_hologram_movement + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_core_icon, + "Pick Icon", + "ai_core_pick", + /mob/living/silicon/ai/proc/pick_icon + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_status, + "Pick Status", + "ai_status", + /mob/living/silicon/ai/proc/ai_statuschange + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_crew_rec, + "Crew Records", + "ai_crew_rec", + /mob/living/silicon/ai/proc/show_crew_records + ) + + A.client.screen = list() + A.client.screen.Add(adding) + + +// Undef +#undef ui_ai_core +#undef ui_ai_announcement +#undef ui_ai_cam_track +#undef ui_ai_cam_light +#undef ui_ai_cam_change_network +#undef ui_ai_sensor +#undef ui_ai_crew_manifest +#undef ui_ai_take_image +#undef ui_ai_view_images +#undef ui_ai_state_laws +#undef ui_ai_call_shuttle + +#undef ui_ai_up +#undef ui_ai_down + +#undef ui_ai_holo_change +#undef ui_ai_color +#undef ui_ai_core_icon +#undef ui_ai_status + +#undef ui_ai_power_override +#undef ui_ai_shutdown +#undef ui_ai_holo_mov + +#undef ui_ai_crew_mon +#undef ui_ai_crew_rec diff --git a/mods/ai/code/ai_screen_objects.dm b/mods/ai/code/ai_screen_objects.dm new file mode 100644 index 0000000000000..9bb0b2b10abbb --- /dev/null +++ b/mods/ai/code/ai_screen_objects.dm @@ -0,0 +1,54 @@ +/obj/screen/ai_button + var/mob/living/silicon/ai/ai_verb + var/list/input_procs + var/list/input_args + icon = 'mods/ai/icons/screen_ai.dmi' + var/list/template_icon = list(null, "template") + +/obj/screen/ai_button/Click() + if(!isAI(usr)) + return TRUE + var/mob/living/silicon/ai/A = usr + if(!(ai_verb in A.verbs)) + return TRUE + + var/input_arguments = list() + for(var/input_proc in input_procs) + var/input_flags = input_procs[input_proc] + var/input_arg + if(input_flags & AI_BUTTON_PROC_BELONGS_TO_CALLER) // Does the called proc belong to the AI, or not? + input_arg = call(A, input_proc)() + else + input_arg = call(input_proc)() + + if(input_flags & AI_BUTTON_INPUT_REQUIRES_SELECTION) + input_arg = input("Make a selection.", "Make a selection.") as null|anything in input_arg + if(isnull(input_arg)) + return // We assume a null-input means the user cancelled + + if(!(ai_verb in A.verbs) || A.incapacitated()) + return + + input_arguments += input_arg + + if(length(input_args)) + input_arguments |= input_args + + call(A, ai_verb)(arglist(input_arguments)) + return TRUE + +/obj/screen/ai_button/Initialize(maploading, screen_loc, name, icon_state, ai_verb, list/input_procs = null, list/input_args = null) + . = ..() + if(!LAZYLEN(template_icon)) + template_icon = list(icon) + + src.name = name + src.icon_state = icon_state + src.screen_loc = screen_loc + src.ai_verb = ai_verb + if(input_procs) + src.input_procs = input_procs.Copy() + if(input_args) + src.input_args = input_args.Copy() + + underlays += image(template_icon[1], template_icon[2]) diff --git a/mods/ai/icons/screen_ai.dmi b/mods/ai/icons/screen_ai.dmi new file mode 100644 index 0000000000000..2d415ba1f8c08 Binary files /dev/null and b/mods/ai/icons/screen_ai.dmi differ diff --git a/mods/antagonists/README.md b/mods/antagonists/README.md new file mode 100644 index 0000000000000..59d783639a07c --- /dev/null +++ b/mods/antagonists/README.md @@ -0,0 +1,88 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1474 +- https://github.com/SierraBay/SierraBay12/pull/1683 +- https://github.com/SierraBay/SierraBay12/pull/1798 + + + +## Antag tweaks + +ID мода: ANTAGONISTS + + +### Описание мода + +Общие изменения антагонистов, специфичные для SierraBay. + + +### Изменения *кор кода* + +- Отсутствуют + + +### Оверрайды + +- `mods/_master_files/code/game/gamemodes/ert.dm`: + - `/datum/map_template/ruin/antag_spawn/ert`: + - `var/prefix` + - `var/suffixes` + - `var/shuttles_to_initialise` + - `var/apc_test_exempt_areas` + - `/datum/shuttle/autodock/multi/antag/rescue/var/destination_tags` + - `/area/map_template/rescue_base/start/var/base_turf` + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- `icons/obj/augment.dmi` +- `mods/ntnet/code/NTNet-items.dm` + + + +### Авторы: + +LordNest + diff --git a/mods/antagonists/_antagonists.dm b/mods/antagonists/_antagonists.dm new file mode 100644 index 0000000000000..b1f583eb90f4a --- /dev/null +++ b/mods/antagonists/_antagonists.dm @@ -0,0 +1,4 @@ +/singleton/modpack/antagonists + name = "Antag tweaks" + desc = "Общие изменения антагонистов, специфичные для SierraBay." + author = "LordNest" diff --git a/mods/antagonists/_antagonists.dme b/mods/antagonists/_antagonists.dme new file mode 100644 index 0000000000000..911fe25f76179 --- /dev/null +++ b/mods/antagonists/_antagonists.dme @@ -0,0 +1,15 @@ +#ifndef MODPACK_ANTAGONISTS +#define MODPACK_ANTAGONISTS + +#include "_antagonists.dm" + +#include "code/blackout.dm" +#include "code/ert.dm" +#include "code/mercenary.dm" +#include "code/revolutionary.dm" +#include "code/operative.dm" +#include "code/traitor.dm" +#include "code/teleportation.dm" +#include "code/uplink.dm" + +#endif diff --git a/mods/antagonists/code/blackout.dm b/mods/antagonists/code/blackout.dm new file mode 100644 index 0000000000000..389fe0347ead3 --- /dev/null +++ b/mods/antagonists/code/blackout.dm @@ -0,0 +1,79 @@ +// Too complex, so different file for it +// Blackout tool, used to trigger massive electricity outttage on ship or station, including connected levels. +// It may have additional shots to use, but currently balanced to one shot. + +/datum/uplink_item/item/tools/blackout + name = "High Pulse Electricity Outage Tool" + item_cost = 36 + path = /obj/item/device/blackout + desc = "A device which can create power surge in terminal, spread it in power network and temporally creating blackout." + +/obj/item/device/blackout + name = "Energy network scanner" + desc = "A device with several metal antennas. It looks like a scanner or multimeter, but this one is completely black." + icon = 'mods/antagonists/icons/obj/blackout.dmi' + icon_state = "device_blackout-off" + + var/severity = 2 + var/shots = 1 + var/lastUse = 0 + var/cooldown = (20 MINUTES) + +/obj/item/device/blackout/afterattack(obj/target, mob/user, proximity) + if(!proximity) + return + if(!istype(target)) + return + + target.add_fingerprint(user) + + if(istype(target, /obj/machinery/power/terminal)) + var/obj/machinery/power/terminal/terminal = target + + if(!terminal.powernet) + to_chat(user, SPAN_WARNING("This power station isn't connected to power net.")) + return + + if(check_to_use()) + to_chat(user, SPAN_WARNING("Device does not respond. Perhaps you need to try later.")) + return + + if(!shots) + to_chat(user, SPAN_WARNING("Device does not respond.")) + return + + hacktheenergy(terminal, user) + +/obj/item/device/blackout/proc/hacktheenergy(obj/machinery/power/terminal/terminal_in, mob/user) + if(!istype(terminal_in) || !user) return // security + + src.audible_message("Synthesized recording states, \"-- Вас приветствует Ассистент КиДжи. Начало. Производится подключение к терминалу. --\"") + if(!do_after(user, 60, terminal_in)) return + + src.audible_message("Synthesized recording states, \"-- Подключение к терминалу успешно. Начато получение информации о конфигурации электросети... --\"") + if(!do_after(user, 160, terminal_in)) return + + src.audible_message("Synthesized recording states, \"-- Сканирование корабельной электросети успешно. Начинается процедура перегрузки корабельной электросети. Не прерывайте работу терминала. --\"") + icon_state = "device_blackout-on" + playsound(src, 'sound/items/goggles_charge.ogg', 50, 1) + + if(do_after(user, 80, terminal_in)) + src.audible_message("Synthesized recording states, \"-- Перегрузка завершена. Можете отсоединять терминал. \ + Утилизируйте устройство после использования. --\"") + + shots-- + cooldown = world.time + + power_failure() + + log_and_message_admins("[key_name(usr)] used \the [src.name] on \the [admin_jump_link(terminal_in, src)] to shutdown entire ship.") + + icon_state = "device_blackout-off" + +/obj/item/device/blackout/proc/check_to_use() + return lastUse <= (world.time - cooldown) + +/obj/item/device/blackout/examine(mob/user) + . = ..() + if(isobserver(user) || (user.mind && user.mind.special_role != null) || user.skill_check(SKILL_DEVICES, SKILL_EXPERIENCED) || user.skill_check(SKILL_ELECTRICAL, SKILL_EXPERIENCED)) + . += SPAN_NOTICE("This device appears to be able to send a signal to overload the power grid.") diff --git a/mods/antagonists/code/ert.dm b/mods/antagonists/code/ert.dm new file mode 100644 index 0000000000000..8ade027f4ff21 --- /dev/null +++ b/mods/antagonists/code/ert.dm @@ -0,0 +1,32 @@ +/obj/item/rig/ert/assetprotection + name = "heavy emergency response suit control module" + desc = "A heavy, modified version of a common emergency response hardsuit. Has blood red highlights. Armoured and space ready." + suit_type = "heavy emergency response" + icon_state = "asset_protection_rig" + armor = list( + melee = ARMOR_MELEE_VERY_HIGH, + bullet = ARMOR_BALLISTIC_RESISTANT, + laser = ARMOR_LASER_MAJOR, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED, + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_SHIELDED + ) + + glove_type = /obj/item/clothing/gloves/rig/ert/assetprotection + + initial_modules = list( + /obj/item/rig_module/ai_container, + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/grenade_launcher, + /obj/item/rig_module/vision/multi, + /obj/item/rig_module/mounted/energy/egun, + /obj/item/rig_module/chem_dispenser/combat, + /obj/item/rig_module/mounted/energy/plasmacutter, + /obj/item/rig_module/device/rcd, + /obj/item/rig_module/datajack, + /obj/item/rig_module/cooling_unit + ) + +/obj/item/clothing/gloves/rig/ert/assetprotection + siemens_coefficient = 0 diff --git a/mods/antagonists/code/mercenary.dm b/mods/antagonists/code/mercenary.dm new file mode 100644 index 0000000000000..f84a1b67ca25e --- /dev/null +++ b/mods/antagonists/code/mercenary.dm @@ -0,0 +1,468 @@ + +/datum/uplink_category/mercenary + name = "Mercenary Kits" + +/datum/uplink_item/item/mercenary + category = /datum/uplink_category/mercenary + +/* +Mercenary Kits +Used for quick dress-up. Also comes with several discount +*/ + +/datum/uplink_item/item/mercenary/bioterror + name = "Bioterror Kit" + desc = "Kit, filled with bioweaponery. It contains: Voidsuit, sprayer with bioterror mix, bioterror grenade and military pistol. Don't forget to turn your internals on!" + item_cost = DEFAULT_TELECRYSTAL_AMOUNT + antag_roles = list(MODE_MERCENARY) + path = /obj/structure/closet/crate/mercenary/bioterror + +/datum/uplink_item/item/mercenary/pyro + name = "Pyro Kit" + desc = "Kit, used for making FIRES! It contains: Special pyro voidsuit, flamethrower with 4 napalm canisters, 2 incendiary grenades and military pistol." + item_cost = DEFAULT_TELECRYSTAL_AMOUNT + antag_roles = list(MODE_MERCENARY) + path = /obj/structure/closet/crate/mercenary/pyro + +/datum/uplink_item/item/mercenary/classic + name = "Classic Kit" + desc = "Old and faithful kit. It contains: Heavy armor, assault rifle, cryptographic sequencer and grenade." + item_cost = DEFAULT_TELECRYSTAL_AMOUNT + antag_roles = list(MODE_MERCENARY) + path = /obj/structure/closet/crate/mercenary/classic + +/datum/uplink_item/item/mercenary/stealthy + name = "Stealthy Kit" + desc = "A special kit for stealthy operations. It contains: Chameleon kit, fake crew annoncement, freedom implant, cryptographic sequencer, plastic surgery kit, silensed pistol and clerical kit." + item_cost = DEFAULT_TELECRYSTAL_AMOUNT + antag_roles = list(MODE_MERCENARY) + path = /obj/structure/closet/crate/mercenary/stealthy + +/datum/uplink_item/item/mercenary/sniper + name = "Sniper Kit" + desc = "Fashionable kit for fashionable operatives. It contains: Cool-looking armor vest, disguised as a suit, thermal googles and sniper rifle with ammo." + item_cost = DEFAULT_TELECRYSTAL_AMOUNT + antag_roles = list(MODE_MERCENARY) + path = /obj/structure/closet/crate/mercenary/sniper + +/datum/uplink_item/item/mercenary/breacher + name = "Breacher Kit" + desc = "You're leading the assault. It contains: Heavy armor, 3 C-4 explosives, drum-fed shotgun and cryptographic sequencer." + item_cost = DEFAULT_TELECRYSTAL_AMOUNT + antag_roles = list(MODE_MERCENARY) + path = /obj/structure/closet/crate/mercenary/breacher + +/datum/uplink_item/item/mercenary/saboteur + name = "Saboteur Kit" + desc = "You want to sabotage ship systems? This kit is specially for you. It contains: Heavy armor, military pistol, flashdark, chameleon projector, cryptographic sequencer and some C-4 explosives." + item_cost = DEFAULT_TELECRYSTAL_AMOUNT + antag_roles = list(MODE_MERCENARY) + path = /obj/structure/closet/crate/mercenary/saboteur + +/datum/uplink_item/item/mercenary/medic + name = "Field Medic Kit" + desc = "This kit can provide almost everything for combat medic. It contains: Heavy armor, military pistol, combat medkit, combat defibrilator and surgery kit." + item_cost = DEFAULT_TELECRYSTAL_AMOUNT + antag_roles = list(MODE_MERCENARY) + path = /obj/structure/closet/crate/mercenary/medic + +/datum/uplink_item/item/mercenary/heavy + name = "Heavy Kit" + desc = "This kit is for heavy gunners. It contains: Heavy armor, energy shield, grenade and L6 Saw machinegun." + item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 2 + antag_roles = list(MODE_MERCENARY) + path = /obj/structure/closet/crate/mercenary/heavy + +/datum/uplink_item/item/mercenary/netrunner + name = "Netrunner Kit" + desc = "This kit is can provide some help in hacking of ship systems. It contains: Hacker rig, camera MIU, some computers and cryptographic sequencer." + item_cost = DEFAULT_TELECRYSTAL_AMOUNT + antag_roles = list(MODE_MERCENARY) + path = /obj/structure/closet/crate/mercenary/netrunner + +// What's inside the box + +/singleton/closet_appearance/crate/mercenary + color = COLOR_DARK_GUNMETAL + decals = list( + "crate_stripes" = COLOR_MAROON + ) + +/obj/structure/closet/crate/mercenary + name = "gorlex marauders crate" + desc = "A mercenary equipment crate." + +/obj/structure/closet/crate/mercenary/bioterror + +/obj/structure/closet/crate/mercenary/bioterror/WillContain() + return list( + /obj/item/clothing/suit/armor/pcarrier/merc, + /obj/item/clothing/head/helmet/merc, + /obj/item/clothing/mask/gas/syndicate, + /obj/item/tank/oxygen_emergency_double, + /obj/item/reagent_containers/spray/chemsprayer/bioterror, + /obj/item/reagent_containers/glass/beaker/insulated/large/bioterror = 3, + /obj/item/grenade/chem_grenade/bioterror, + /obj/item/gun/projectile/pistol/optimus + ) + +/obj/structure/closet/crate/mercenary/pyro + +/obj/structure/closet/crate/mercenary/pyro/WillContain() + return list( + /obj/item/clothing/suit/space/void/merc/heavy/prepared, + /obj/item/clothing/mask/gas/syndicate, + /obj/item/tank/oxygen_emergency_double, + /obj/item/flamethrower/full/loaded, + /obj/item/reagent_containers/glass/beaker/insulated/large/napalm = 3, + /obj/item/grenade/chem_grenade/fuelspray = 2, + /obj/item/gun/projectile/pistol/optimus + ) + +/obj/structure/closet/crate/mercenary/classic + +/obj/structure/closet/crate/mercenary/classic/WillContain() + return list( + /obj/item/clothing/suit/armor/pcarrier/merc, + /obj/item/clothing/head/helmet/merc, + /obj/item/gun/projectile/automatic/assault_rifle, + /obj/item/grenade/frag/high_yield, + /obj/item/card/emag + ) + +/obj/structure/closet/crate/mercenary/stealthy + +/obj/structure/closet/crate/mercenary/stealthy/WillContain() + return list( + /obj/item/storage/box/syndie_kit/chameleon = 2, + /obj/item/storage/box/syndie_kit/silenced, + /obj/item/storage/box/syndie_kit/spy, + /obj/item/clothing/mask/chameleon/voice, + /obj/item/device/cosmetic_surgery_kit, + /obj/item/stamp/chameleon, + /obj/item/pen/chameleon, + /obj/item/storage/box/syndie_kit/imp_freedom, + /obj/item/device/uplink_service/fake_crew_announcement, + /obj/item/card/emag + ) + +/obj/structure/closet/crate/mercenary/sniper + +/obj/structure/closet/crate/mercenary/sniper/WillContain() + return list( + /obj/item/clothing/under/det, + /obj/item/clothing/suit/storage/leather_jacket/armored, + /obj/item/gun/projectile/heavysniper, + /obj/item/storage/box/ammo/sniperammo, + /obj/item/clothing/glasses/thermal/syndi + ) + +/obj/structure/closet/crate/mercenary/breacher + +/obj/structure/closet/crate/mercenary/breacher/WillContain() + return list( + /obj/item/clothing/suit/armor/pcarrier/merc, + /obj/item/clothing/head/helmet/merc, + /obj/item/gun/projectile/shotgun/magshot, + /obj/item/ammo_magazine/shotgunmag/shot, + /obj/item/ammo_magazine/shotgunmag, + /obj/item/plastique = 3, + /obj/item/card/emag + ) + +/obj/structure/closet/crate/mercenary/saboteur + +/obj/structure/closet/crate/mercenary/saboteur/WillContain() + return list( + /obj/item/clothing/suit/armor/pcarrier/merc, + /obj/item/clothing/head/helmet/merc, + /obj/item/device/flashlight/flashdark, + /obj/item/device/chameleon, + /obj/item/gun/projectile/pistol/optimus, + /obj/item/plastique = 2, + /obj/item/card/emag + ) + +/obj/structure/closet/crate/mercenary/medic + +/obj/structure/closet/crate/mercenary/medic/WillContain() + return list( + /obj/item/clothing/suit/armor/pcarrier/merc, + /obj/item/clothing/head/helmet/merc, + /obj/item/storage/firstaid/combat, + /obj/item/storage/firstaid/surgery, + /obj/item/defibrillator/compact/combat/loaded, + /obj/item/gun/projectile/pistol/optimus, + ) + +/obj/structure/closet/crate/mercenary/heavy + +/obj/structure/closet/crate/mercenary/heavy/WillContain() + return list( + /obj/item/clothing/suit/space/void/merc/heavy/prepared, + /obj/item/gun/projectile/automatic/l6_saw, + /obj/item/ammo_magazine/box/machinegun = 3, + /obj/item/grenade/frag/high_yield, + /obj/item/shield/energy + ) + +/obj/structure/closet/crate/mercenary/netrunner + +/obj/structure/closet/crate/mercenary/netrunner/WillContain() + return list( + /obj/item/rig/light/hacker/runner, + /obj/item/modular_computer/laptop/preset/custom_loadout/advanced, + /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, + /obj/item/modular_computer/pda/syndicate, + /obj/item/clothing/glasses/hud/it, + /obj/item/clothing/mask/ai, + /obj/item/device/multitool/hacktool, + /obj/item/card/emag = 2 + ) + + +// Items + +/obj/item/reagent_containers/glass/beaker/insulated/large/napalm + +/obj/item/reagent_containers/glass/beaker/insulated/large/napalm/Initialize() + . = ..() + reagents.add_reagent(/datum/reagent/napalm, 120) + + +/obj/item/reagent_containers/glass/beaker/insulated/large/bioterror + +/obj/item/reagent_containers/glass/beaker/insulated/large/bioterror/Initialize() + . = ..() + reagents.add_reagent(/datum/reagent/drugs/hextro, volume / 10) + reagents.add_reagent(/datum/reagent/drugs/mindbreaker, volume / 10) + reagents.add_reagent(/datum/reagent/toxin/carpotoxin, volume / 10) + reagents.add_reagent(/datum/reagent/mutagen, volume / 10) + reagents.add_reagent(/datum/reagent/toxin/amatoxin, volume / 10) + reagents.add_reagent(/datum/reagent/toxin/phoron, volume / 10) + reagents.add_reagent(/datum/reagent/impedrezene, volume / 10) + reagents.add_reagent(/datum/reagent/toxin/potassium_chlorophoride, volume / 10) + reagents.add_reagent(/datum/reagent/acid/polyacid, volume / 10) + reagents.add_reagent(/datum/reagent/radium, volume / 10) + +// Bioterror Chem sprayer + +/obj/item/reagent_containers/spray/chemsprayer/bioterror + name = "bioterror chem sprayer" + desc = "This chem sprayer is filled with mix, that will melt, mutate and irradiate everything." + +/obj/item/reagent_containers/spray/chemsprayer/bioterror/Initialize() + . = ..() + reagents.add_reagent(/datum/reagent/drugs/hextro, volume / 60) + reagents.add_reagent(/datum/reagent/drugs/mindbreaker, volume / 60) + reagents.add_reagent(/datum/reagent/toxin/carpotoxin, volume / 60) + reagents.add_reagent(/datum/reagent/mutagen, volume / 60) + reagents.add_reagent(/datum/reagent/toxin/amatoxin, volume / 60) + reagents.add_reagent(/datum/reagent/toxin/phoron, volume / 60) + reagents.add_reagent(/datum/reagent/impedrezene, volume / 60) + reagents.add_reagent(/datum/reagent/toxin/potassium_chlorophoride, volume / 60) + reagents.add_reagent(/datum/reagent/acid/polyacid, volume / 60) + reagents.add_reagent(/datum/reagent/radium, volume / 60) + +// Grenades + +/obj/item/grenade/chem_grenade/bioterror + name = "bioterror grenade" + desc = "Used for clearing rooms of living things." + path = 1 + stage = 2 + +/obj/item/grenade/chem_grenade/bioterror/Initialize() + . = ..() + var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src) + var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src) + + B1.reagents.add_reagent(/datum/reagent/phosphorus, 26) + B1.reagents.add_reagent(/datum/reagent/sugar, 14) + B2.reagents.add_reagent(/datum/reagent/sugar, 14) + B2.reagents.add_reagent(/datum/reagent/potassium, 26) + B1.reagents.add_reagent(/datum/reagent/drugs/hextro,20) + B2.reagents.add_reagent(/datum/reagent/toxin/carpotoxin, 20) + B1.reagents.add_reagent(/datum/reagent/drugs/mindbreaker, 20) + B2.reagents.add_reagent(/datum/reagent/toxin/amatoxin, 20) + B2.reagents.add_reagent(/datum/reagent/acid/polyacid, 20) + B1.reagents.add_reagent(/datum/reagent/toxin/phoron, 20) + B1.reagents.add_reagent(/datum/reagent/mutagen, 20) + B2.reagents.add_reagent(/datum/reagent/acid/polyacid, 20) + B2.reagents.add_reagent(/datum/reagent/impedrezene, 20) + + detonator = new/obj/item/device/assembly_holder/timer_igniter(src) + + beakers += B1 + beakers += B2 + icon_state = initial(icon_state) +"_locked" + +/obj/item/grenade/chem_grenade/fuelspray + name = "napalm mix release grenade" + desc = "Used for reliasing lots of napalm mix." + path = 1 + stage = 2 + +/obj/item/grenade/chem_grenade/fuelspray/Initialize() + . = ..() + var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src) + var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src) + + B1.reagents.add_reagent(/datum/reagent/potassium, 26) + B1.reagents.add_reagent(/datum/reagent/sugar, 14) + B2.reagents.add_reagent(/datum/reagent/sugar, 14) + B2.reagents.add_reagent(/datum/reagent/phosphorus, 26) + B1.reagents.add_reagent(/datum/reagent/napalm, 40) + B2.reagents.add_reagent(/datum/reagent/napalm, 40) + B1.reagents.add_reagent(/datum/reagent/toxin/phoron/oxygen, 40) + B2.reagents.add_reagent(/datum/reagent/fuel, 40) + + detonator = new/obj/item/device/assembly_holder/timer_igniter(src) + + beakers += B1 + beakers += B2 + icon_state = initial(icon_state) +"_locked" + + +// Elite Voidsuit + +/obj/item/clothing/head/helmet/space/void/merc/heavy + name = "elite tactical voidsuit helmet" + desc = "A heavy tactical void helm designed for combat under heavy enemy fire and in extreme conditions. Property of Gorlex Marauders." + + icon = 'maps/sierra/icons/obj/clothing/obj_head.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + icon_state = "syndie_helm" + action_button_name = "Toggle Combat Mode" + + armor = list( + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_RIFLE, + laser = ARMOR_LASER_MAJOR, + energy = ARMOR_ENERGY_RESISTANT, + bomb = ARMOR_BOMB_RESISTANT, + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_RESISTANT + ) + siemens_coefficient = 0.3 + species_restricted = list(SPECIES_HUMAN, SPECIES_IPC) + camera = /obj/machinery/camera/network/mercenary + light_overlay = "yellow_double_light" + max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE + tint = 1 + +/obj/item/clothing/suit/space/void/merc/heavy + name = "elite tactical voidsuit" + desc = "A heavy tactical voidsuit designed for combat under heavy enemy fire and in extreme conditions. Property of Gorlex Marauders." + + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + + item_icons = list( + slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi', + slot_l_hand_str = 'icons/mob/onmob/items/lefthand_spacesuits.dmi', + slot_r_hand_str = 'icons/mob/onmob/items/righthand_spacesuits.dmi',) + + + item_state_slots = list(slot_l_hand_str = "syndie_voidsuit", + slot_r_hand_str = "syndie_voidsuit", + slot_wear_suit_str = "syndie_voidsuit") + icon_state = "syndie_voidsuit" + + w_class = ITEM_SIZE_LARGE + armor = list( + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_RIFLE, + laser = ARMOR_LASER_MAJOR, + energy = ARMOR_ENERGY_RESISTANT, + bomb = ARMOR_BOMB_RESISTANT, + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_RESISTANT + ) + + allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs) + siemens_coefficient = 0.3 + species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_IPC) + max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE + var/mode = 0 + + var/armor_normal = list( + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_RIFLE, + laser = ARMOR_LASER_MAJOR, + energy = ARMOR_ENERGY_RESISTANT, + bomb = ARMOR_BOMB_RESISTANT, + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_RESISTANT + ) + + var/armor_combat = list( + melee = ARMOR_MELEE_VERY_HIGH, + bullet = ARMOR_BALLISTIC_AP, + laser = ARMOR_LASER_RIFLES, + energy = ARMOR_ENERGY_STRONG, + bomb = ARMOR_BOMB_RESISTANT, + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_RESISTANT + ) + +/obj/item/clothing/suit/space/void/merc/heavy/Initialize() + . = ..() + slowdown_per_slot[slot_wear_suit] = 1.5 + START_PROCESSING(SSobj, src) + +/obj/item/clothing/suit/space/void/merc/heavy/prepared + helmet = /obj/item/clothing/head/helmet/space/void/merc/heavy + boots = /obj/item/clothing/shoes/magboots + tank = /obj/item/tank/oxygen + +/obj/item/clothing/suit/space/void/merc/heavy/verb/toggle_mode() + + set name = "Toggle Combat Mode" + set category = "Object" + set src in usr + + if(!istype(src.loc,/mob/living)) return + + if(!helmet) + to_chat(usr, "There is no helmet installed.") + return + + var/mob/living/carbon/human/H = usr + + if(!istype(H)) return + if(H.incapacitated()) return + if(H.wear_suit != src) return + + if(H.head == helmet) + if(mode) + to_chat(usr, "You disengaged combat mode on your suit. Now you will be much faster, but your suit will offer less protection.") + slowdown_per_slot[slot_wear_suit] = 1.5 + helmet.armor = armor_normal + armor = armor_normal + mode = 0 + else + to_chat(usr, "You engaged combat mode on your suit. It will give you much more protection in cost of speed.") + slowdown_per_slot[slot_wear_suit] = 7.5 + helmet.armor = armor_combat + armor = armor_combat + mode = 1 + else + to_chat(usr, "You can't toggle combat mode while your helmet is disengaged.") + return + helmet.update_light(H) + +// Netrunner stuff + +/obj/item/rig/light/hacker/runner + + initial_modules = list( + /obj/item/rig_module/ai_container, + /obj/item/rig_module/chem_dispenser/ninja, + /obj/item/rig_module/mounted/energy/ion, + /obj/item/rig_module/power_sink, + /obj/item/rig_module/datajack, + /obj/item/rig_module/electrowarfare_suite, + /obj/item/rig_module/voice, + /obj/item/rig_module/vision, + /obj/item/rig_module/cooling_unit + ) diff --git a/mods/antagonists/code/operative.dm b/mods/antagonists/code/operative.dm new file mode 100644 index 0000000000000..a2fe9515d1a12 --- /dev/null +++ b/mods/antagonists/code/operative.dm @@ -0,0 +1,64 @@ +///Ninja equipment loadouts. Placed here because author overrided them using Torch files. Now we overriding this again for some QoL stuff. +/obj/structure/closet/crate/ninja/sol + name = "sol equipment crate" + desc = "A tactical equipment crate." + +/obj/structure/closet/crate/ninja/sol/WillContain() + return list( + /obj/item/rig/light/ninja/sol, + /obj/item/gun/projectile/pistol/m22f, + /obj/item/ammo_magazine/pistol/double = 2, + /obj/item/clothing/under/scga/utility/urban, + /obj/item/clothing/shoes/swat, + /obj/item/clothing/accessory/scga_rank/e6, + /obj/item/device/encryptionkey/away_scg_patrol + ) + +/obj/structure/closet/crate/ninja/gcc + name = "gcc equipment crate" + desc = "A heavy equipment crate." + +/obj/structure/closet/crate/ninja/gcc/WillContain() + return list( + /obj/item/rig/light/ninja/gcc, + /obj/item/gun/projectile/pistol/optimus, + /obj/item/ammo_magazine/pistol/double = 2, + /obj/item/ammo_magazine/box/minigun = 2, + /obj/item/clothing/under/iccgn/utility, + /obj/item/clothing/shoes/iccgn/utility, + /obj/item/clothing/accessory/iccgn_rank/or6, + /obj/item/device/encryptionkey/iccgn + ) + +/obj/structure/closet/crate/ninja/corpo + name = "corporate equipment crate" + desc = "A patented equipment crate." + +/obj/structure/closet/crate/ninja/corpo/WillContain() + return list( + /obj/item/rig/light/ninja/corpo, + /obj/item/gun/energy/gun, + /obj/item/inducer, + /obj/item/clothing/under/rank/security/corp, + /obj/item/clothing/shoes/swat, + /obj/item/clothing/accessory/badge/holo, + /obj/item/storage/box/syndie_kit/jaunter + ) + +/obj/structure/closet/crate/ninja/merc + name = "mercenary equipment crate" + desc = "A traitorous equipment crate." + +/obj/structure/closet/crate/ninja/merc/WillContain() + return list( + /obj/item/rig/merc/ninja, + /obj/item/gun/projectile/revolver/medium, + /obj/item/ammo_magazine/speedloader = 2, + /obj/item/clothing/under/syndicate/combat, + /obj/item/clothing/shoes/swat, + /obj/item/clothing/mask/gas/syndicate, + /obj/item/storage/backpack/dufflebag/syndie_kit/plastique, + /obj/item/storage/box/anti_photons, + /obj/item/device/encryptionkey/syndie_full, + /obj/item/card/emag + ) diff --git a/mods/antagonists/code/revolutionary.dm b/mods/antagonists/code/revolutionary.dm new file mode 100644 index 0000000000000..7bd30b2cbaef7 --- /dev/null +++ b/mods/antagonists/code/revolutionary.dm @@ -0,0 +1,13 @@ +//Overriding loyalists and making them adminspawn only due to their imbalance +/datum/antagonist/revolutionary + blacklisted_jobs = list(/datum/job/ai, /datum/job/cyborg, /datum/job/captain, /datum/job/hop, /datum/job/hos, /datum/job/chief_engineer, /datum/job/rd, /datum/job/cmo, /datum/job/lawyer) + restricted_jobs = list(/datum/job/detective, /datum/job/officer, /datum/job/warden) + +/datum/game_mode/revolution + antag_tags = list(MODE_REVOLUTIONARY, MODE_MERCENARY) + +/datum/game_mode/siege + antag_tags = list(MODE_REVOLUTIONARY, MODE_MERCENARY) + +/datum/game_mode/uprising + antag_tags = list(MODE_REVOLUTIONARY, MODE_MERCENARY) diff --git a/mods/antagonists/code/teleportation.dm b/mods/antagonists/code/teleportation.dm new file mode 100644 index 0000000000000..8336e01bf8b10 --- /dev/null +++ b/mods/antagonists/code/teleportation.dm @@ -0,0 +1,15 @@ +/proc/animated_teleportation(atom/movable/target, atom/anchor) + if(ismob(target)) + to_chat(target, SPAN_WARNING("You feel like something pulling you in bluespace.")) + var/obj/temporary/A = new(get_turf(target), 24.5, 'mods/antagonists/icons/effects/bs_silk.dmi', "silc_teleport_back") + target.set_dir(2) + target.forceMove(A) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(animated_teleportation_ending), target, anchor), 23) + +/proc/animated_teleportation_ending(atom/movable/target, atom/anchor) + target.set_dir(2) + target.forceMove(new /obj/temporary(get_turf(anchor), 26.5, 'mods/antagonists/icons/effects/bs_silk.dmi', "silc_get_hub")) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(finalize_animated_teleportation), target, anchor), 24) + +/proc/finalize_animated_teleportation(atom/movable/target, atom/anchor) + target.dropInto(get_turf(anchor)) diff --git a/mods/antagonists/code/traitor.dm b/mods/antagonists/code/traitor.dm new file mode 100644 index 0000000000000..fc08e873ccb1c --- /dev/null +++ b/mods/antagonists/code/traitor.dm @@ -0,0 +1,271 @@ +// +// DOOR CHARGE +// + +/obj/item/door_charge + name = "door charge" + desc = "This is a booby trap, planted on doors. When door opens, it will explode!." + gender = PLURAL + icon = 'mods/antagonists/icons/obj/door_charge.dmi' + icon_state = "door_charge" + item_state = "door_charge" + item_flags = ITEM_FLAG_NO_BLUDGEON + w_class = ITEM_SIZE_SMALL + origin_tech = list(TECH_ESOTERIC = 4) + var/ready = 0 + +/obj/item/door_charge/use_after(atom/movable/target, mob/user) + if (ismob(target) || !istype(target, /obj/machinery/door/airlock)) + return FALSE + + to_chat(user, "Planting explosives...") + user.do_attack_animation(target) + + if(do_after(user, 50, target) && in_range(user, target)) + if(!user.unequip_item()) + return TRUE + + forceMove(target) + + log_and_message_admins("planted \a [src] on \the [target].") + + to_chat(user, "Bomb has been planted.") + + GLOB.density_set_event.register(target, src, PROC_REF(explode)) + + return TRUE + + +/obj/item/door_charge/proc/explode(obj/machinery/door/airlock/airlock) + if(!airlock.density) + explosion(get_turf(airlock), -1, 1, 2, 3) + airlock.ex_act(1) + qdel(src) + +// +// BLUESPACE JAUNTER +// + +/obj/item/device/syndietele + name = "strange sensor" + desc = "Looks like regular powernet sensor, but this one almost black and have spooky red light blinking" + icon = 'mods/antagonists/icons/obj/syndiejaunter.dmi' + icon_state = "beacon" + item_state = "signaler" + origin_tech = list(TECH_BLUESPACE = 4, TECH_ESOTERIC = 3) + + w_class = ITEM_SIZE_SMALL + +/obj/item/device/syndiejaunter + name = "strange device" + desc = "This thing looks like remote. Almost black, with red button and status display." + icon = 'mods/antagonists/icons/obj/syndiejaunter.dmi' + icon_state = "jaunter" + item_state = "jaunter" + w_class = ITEM_SIZE_SMALL + var/obj/item/device/syndietele/beacon + var/usable = 1 + var/image/cached_usable + +/obj/item/device/syndiejaunter/examine(mob/user, distance) + . = ..() + . += SPAN_NOTICE("Display is [usable ? "online and shows number [usable]" : "offline"].") + +/obj/item/device/syndiejaunter/Initialize() + . = ..() + update_icon() + +/obj/item/device/syndiejaunter/on_update_icon() + . = ..() + if(usable) + AddOverlays(image(icon, "usable")) + else + ClearOverlays() + +/obj/item/device/syndiejaunter/attack_self(mob/user) + if(!istype(beacon) || !usable) + return 0 + + animated_teleportation(user, beacon) + usable = max(usable - 1, 0) + update_icon() + +/obj/item/device/syndiejaunter/use_after(atom/target, mob/user) + if(istype(target,/obj/item/device/syndietele)) + beacon = target + to_chat(user, "You succesfully linked [src] to [target]!") + else + to_chat(user, "You can't link [src] to [target]!") + update_icon() + +/obj/item/storage/box/syndie_kit/jaunter + startswith = list(/obj/item/device/syndietele, + /obj/item/device/syndiejaunter) + +// +// HOLOBOMBS +// + +/obj/item/device/holobomb + name = "holobomb" + desc = "A small explosive charge with a holoprojector designed to disable the curious guards." + icon = 'mods/antagonists/icons/obj/holobomb.dmi' + icon_state = "minibomb" + item_state = "nothing" + slot_flags = SLOT_EARS + w_class = ITEM_SIZE_SMALL + var/active = FALSE + var/mode = 0 + +/obj/item/device/holobomb/afterattack(obj/item/target, mob/user , proximity) + if(!proximity) + return + if(!target) + return + if(target.w_class <= w_class) + name = target.name + desc = target.desc + icon = target.icon + color = target.color + icon_state = target.icon_state + active = TRUE + to_chat(user, "\The [src] is now active.") + playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6) + update_icon() + else + to_chat(user, "\The [target] is too big for \the [src] hologramm") + +/obj/item/device/holobomb/attack_self(mob/user) + trigger(user) + +/obj/item/device/holobomb/emp_act() + ..() + trigger() + +/obj/item/device/holobomb/attack_hand(mob/user) + . = ..() + if(!mode) + trigger(user) + +/obj/item/device/holobomb/proc/switch_mode(mob/user) + mode = !mode + if(mode) + to_chat(user, "Mode 1.Now \the [src] will explode upon activation.") + else + to_chat(user, "Mode 2. Now \the [src] will explode as soon as they pick it up or upon activation.") + +/obj/item/device/holobomb/proc/trigger(mob/user) + if(!active) + switch_mode(user) + return + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(!user) + return + var/obj/item/organ/external/O = H.get_organ(pick(BP_L_HAND, BP_R_HAND)) + if(!O) + return + + var/dam = rand(35, 45) + H.visible_message("\The [src] in \the [H]'s hand explodes with a loud bang!") + H.apply_damage(dam, DAMAGE_BRUTE, O, damage_flags = DAMAGE_FLAG_SHARP, used_weapon = "explode") + explosion(src.loc, 0,0,1,1) + H.Stun(5) + qdel(src) + +/obj/item/paper/holobomb + name = "instruction" + info = "Бомба имеет два режима. В первом она взрывается при попытке \"ипользовать\" её, во втором при прикосновении. Для начала работы с бомбой выберете режим и просканируйте нужный вам небольшой предмет. Всё, бомба взведена, удачи! И помните, после активации режим бомбы лучше не менять." + +/obj/item/storage/box/syndie_kit/holobombs + name = "box of holobombs" + desc = "A box containing 5 experimental holobombs." + icon_state = "flashbang" + startswith = list(/obj/item/device/holobomb = 5, /obj/item/paper/holobomb = 1) + +// +// Poison +// + +/obj/item/storage/box/syndie_kit/bioterror + startswith = list( + /obj/item/reagent_containers/glass/beaker/vial/random/toxin/bioterror = 7 + ) + +/obj/item/reagent_containers/glass/beaker/vial/random/toxin/bioterror + random_reagent_list = list( + list(/datum/reagent/drugs/mindbreaker = 10, /datum/reagent/drugs/hextro = 20) = 2, + list(/datum/reagent/toxin/carpotoxin = 30) = 2, + list(/datum/reagent/impedrezene = 30) = 2, + list(/datum/reagent/mutagen = 30) = 2, + list(/datum/reagent/toxin/amatoxin = 30) = 2, + list(/datum/reagent/drugs/cryptobiolin = 30) = 2, + list(/datum/reagent/impedrezene = 30) = 2, + list(/datum/reagent/toxin/potassium_chlorophoride = 30) = 2, + list(/datum/reagent/acid/polyacid = 30) = 2, + list(/datum/reagent/radium = 30) = 2, + list(/datum/reagent/toxin/zombiepowder = 30) = 1) + +// Key + +/obj/item/device/encryptionkey/syndie_full + icon_state = "cypherkey" + channels = list("Mercenary" = 1, "Command" = 1, "Security" = 1, "Engineering" = 1, "Exploration" = 1, "Science" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1) + origin_tech = list(TECH_ESOTERIC = 3) + syndie = 1 + +// Stimm + +/obj/item/reagent_containers/hypospray/autoinjector/stimpack + name = "stimpack" + band_color = COLOR_PINK //inf //was: COLOR_DARK_GRAY + starts_with = list(/datum/reagent/nitritozadole = 5) + +/datum/reagent/nitritozadole + name = "Nitritozadole" + description = "Nitritozadole is a very dangerous mix, which can increase your speed temporarly." + taste_description = "metal" + reagent_state = LIQUID + color = "#ff2681" + metabolism = REM * 0.20 + overdose = REAGENTS_OVERDOSE / 3 + value = 4.5 + +/datum/reagent/nitritozadole/affect_blood(mob/living/carbon/M, alien, removed) + if(alien == SPECIES_DIONA) + return + + if(prob(2)) + to_chat(M, SPAN_DANGER("My heart gonna break out from the chest!")) + M.stun_effect_act(0, 15, BP_CHEST, "heart damage") //a small pain without damage + if(prob(15)) + for(var/obj/item/organ/internal/heart/H in M.internal_organs) + H.damage += 1 + + if(prob(5)) + M.emote(pick("twitch", "blink_r", "shiver")) + M.add_chemical_effect(CE_SPEEDBOOST, 1.5) + M.add_chemical_effect(CE_PULSE, 3) + + +// Radlaser + +/obj/item/device/scanner/health/syndie + name = "health analyzer" + desc = "A hand-held body scanner able to distinguish vital signs of the subject." + item_flags = ITEM_FLAG_NO_BLUDGEON + matter = list(MATERIAL_ALUMINIUM = 200) + origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ESOTERIC = 2) + +/obj/item/device/scanner/health/syndie/scan(mob/living/carbon/human/A, mob/user) + playsound(src, 'sound/effects/fastbeep.ogg', 20) + if(!istype(A)) + return + + A.apply_damage(30, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) + +/obj/item/device/scanner/health/syndie/examine(mob/user) + . = ..() + if(isobserver(user) || (user.mind && user.mind.special_role != null) || user.skill_check(SKILL_DEVICES, SKILL_MASTER) || user.skill_check(SKILL_MEDICAL, SKILL_MASTER)) + . += SPAN_NOTICE("The scanner contacts do not look as they should.") diff --git a/mods/antagonists/code/uplink.dm b/mods/antagonists/code/uplink.dm new file mode 100644 index 0000000000000..0d07d687bfd62 --- /dev/null +++ b/mods/antagonists/code/uplink.dm @@ -0,0 +1,93 @@ +// +// DOOR CHARGE Uplink part +// + +/datum/uplink_item/item/tools/door_charge + name = "Door Charge" + desc = "Special explosive, which can be planted on doors and will explode when somebody will open this door." + item_cost = 14 + path = /obj/item/door_charge + +// +// JAINTER Uplink part +// + +/datum/uplink_item/item/tools/jaunter + name = "Bluespace Jaunter" + item_cost = 42 + path = /obj/item/storage/box/syndie_kit/jaunter + desc = "Disposable one way teleportation device. Use with care. Don't forget to link jaunter to the beacon!" + +// +// Psi Amp - Uplink part (Here because turned off by Bay12) +// + +/datum/uplink_item/item/visible_weapons/psi_amp + name = "Cerebroenergetic Psionic Amplifier" + item_cost = 50 + path = /obj/item/clothing/head/helmet/space/psi_amp/lesser + desc = "A powerful, illegal psi-amp. Boosts latent psi-faculties to extremely high levels." + +// +// Holobombs - Uplink part +// + +/datum/uplink_item/item/tools/holobomb + name = "Box of holobombs" + item_cost = 32 + path =/obj/item/storage/box/syndie_kit/holobombs + desc = "Contains 5 holobomb and instruction. \ + A bomb that changes appearance, and can destroy some hands." + +// +// С-4 pack - Uplink part +// + +/datum/uplink_item/item/tools/plastique_bag + name = "Box of holobombs" + item_cost = 48 + path =/obj/item/storage/backpack/dufflebag/syndie_kit/plastique + desc = "Contains 6 C-4 charges at 50% discount." + +// +// Poison - Uplink part +// + +/datum/uplink_item/item/tools/bioterror + name = "Poisons kit" + desc = "A box, containing 7 vials of random and very deadly poisons." + item_cost = 48 + path = /obj/item/storage/box/syndie_kit/bioterror + +// +// Encrypt key - Uplink part +// + +/datum/uplink_item/item/tools/encryptionkey_full + name = "Special Encryption Key" + desc = "This headset encryption key will allow you listen and speak on any channel! Use a screwdriver on your headset to exchange keys." + item_cost = 24 + path = /obj/item/device/encryptionkey/syndie_full + +// Stimpack + +/datum/uplink_item/item/tools/stimpack + name = "Stimpack" + desc = "Autoinjector, containing 5u of experimental stimulants, that will increase your speed temporarly." + item_cost = 18 + antag_costs = list(MODE_MERCENARY = 12) + path = /obj/item/reagent_containers/hypospray/autoinjector/stimpack + +// Radlaser + +/datum/uplink_item/item/tools/radlaser + name = "Radioactive Microlaser" + item_cost = 18 + path = /obj/item/device/scanner/health/syndie + desc = "A tiny microlaser, hidden in health analyzer, that can irradiate your targets." + +/datum/uplink_item/item/tools/blackout + name = "High Pulse Electricity Outage Tool" + item_cost = 24 + path = /obj/item/device/blackout + desc = "A device which can create power surge in terminal, spread it in power network and temporally creating blackout." diff --git a/mods/antagonists/icons/effects/bs_silk.dmi b/mods/antagonists/icons/effects/bs_silk.dmi new file mode 100644 index 0000000000000..437617bd517b4 Binary files /dev/null and b/mods/antagonists/icons/effects/bs_silk.dmi differ diff --git a/mods/antagonists/icons/obj/blackout.dmi b/mods/antagonists/icons/obj/blackout.dmi new file mode 100644 index 0000000000000..a0d4df3eeef5c Binary files /dev/null and b/mods/antagonists/icons/obj/blackout.dmi differ diff --git a/mods/antagonists/icons/obj/door_charge.dmi b/mods/antagonists/icons/obj/door_charge.dmi new file mode 100644 index 0000000000000..541ae59cf85f1 Binary files /dev/null and b/mods/antagonists/icons/obj/door_charge.dmi differ diff --git a/mods/antagonists/icons/obj/holobomb.dmi b/mods/antagonists/icons/obj/holobomb.dmi new file mode 100644 index 0000000000000..b938a05e136c2 Binary files /dev/null and b/mods/antagonists/icons/obj/holobomb.dmi differ diff --git a/mods/antagonists/icons/obj/syndiejaunter.dmi b/mods/antagonists/icons/obj/syndiejaunter.dmi new file mode 100644 index 0000000000000..8e2c07c53042d Binary files /dev/null and b/mods/antagonists/icons/obj/syndiejaunter.dmi differ diff --git a/mods/antagonists/maps/ert_base.dmm b/mods/antagonists/maps/ert_base.dmm new file mode 100644 index 0000000000000..16e48081ae422 --- /dev/null +++ b/mods/antagonists/maps/ert_base.dmm @@ -0,0 +1,6267 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ab" = ( +/obj/machinery/mech_recharger, +/mob/living/exosuit/premade/light, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"ac" = ( +/obj/structure/window/reinforced/crescent{ + dir = 4 + }, +/obj/structure/window/reinforced/crescent, +/obj/structure/table/rack, +/obj/item/rig/ert/janitor, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"ad" = ( +/turf/unsimulated/wall, +/area/map_template/rescue_base/base) +"ae" = ( +/obj/machinery/computer/teleporter, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"af" = ( +/obj/machinery/pipedispenser, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ag" = ( +/obj/machinery/tele_pad, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ah" = ( +/turf/unsimulated/wall{ + icon = 'icons/obj/doors/rapid_pdoor.dmi'; + icon_state = "pdoor1"; + name = "Restricted Access" + }, +/area/map_template/rescue_base/base) +"ai" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/shoes/magboots/rig/combat, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aj" = ( +/obj/structure/table/steel_reinforced, +/obj/item/storage/firstaid/regular, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"ak" = ( +/obj/machinery/floodlight, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"al" = ( +/obj/structure/table/steel_reinforced, +/obj/item/storage/box/bodybags, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"am" = ( +/obj/structure/table/steel_reinforced, +/obj/item/storage/firstaid/surgery, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"an" = ( +/obj/item/clothing/accessory/solgov/department/engineering/fleet, +/obj/item/clothing/accessory/solgov/department/engineering/fleet, +/obj/item/clothing/accessory/solgov/department/engineering/fleet, +/obj/item/clothing/accessory/solgov/department/engineering/fleet, +/obj/item/clothing/head/beret/solgov/fleet/engineering, +/obj/item/clothing/head/beret/solgov/fleet/engineering, +/obj/item/clothing/head/beret/solgov/fleet/engineering, +/obj/item/clothing/head/beret/solgov/fleet/engineering, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"ao" = ( +/turf/unsimulated/floor{ + dir = 8; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ap" = ( +/obj/structure/window/reinforced/crescent, +/obj/structure/table/rack, +/obj/item/rig/ert/engineer, +/obj/structure/window/reinforced/crescent{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"aq" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/taperecorder, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"ar" = ( +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"as" = ( +/obj/structure/table/steel_reinforced, +/obj/item/bikehorn/rubberducky, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"au" = ( +/obj/structure/hygiene/toilet{ + pixel_y = 16 + }, +/turf/unsimulated/floor{ + icon_state = "freezerfloor" + }, +/area/map_template/rescue_base/base) +"av" = ( +/obj/structure/hygiene/shower{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "freezerfloor" + }, +/area/map_template/rescue_base/base) +"aw" = ( +/obj/item/soap, +/obj/structure/hygiene/shower{ + pixel_y = 32 + }, +/turf/unsimulated/floor{ + icon_state = "freezerfloor" + }, +/area/map_template/rescue_base/base) +"ax" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/assembly/mousetrap, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"ay" = ( +/obj/structure/bed/chair, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"az" = ( +/obj/structure/table/steel_reinforced, +/obj/item/material/twohanded/baseballbat/metal, +/obj/item/material/hatchet, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aA" = ( +/obj/machinery/door/blast/regular{ + id_tag = "rescuegarage"; + name = "Garage Exit"; + dir = 4; + health_max = 50000 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aB" = ( +/turf/unsimulated/floor{ + icon_state = "freezerfloor" + }, +/area/map_template/rescue_base/base) +"aC" = ( +/obj/machinery/door/airlock/centcom{ + name = "Security Armory"; + icon_state = "closed"; + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aD" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 1 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/map_template/rescue_base/base) +"aE" = ( +/turf/unsimulated/wall{ + desc = "A secure airlock. Doesn't look like you can get through easily."; + icon = 'icons/obj/doors/centcom/door.dmi'; + icon_state = "closed"; + name = "Bluespace Drive Compartment" + }, +/area/map_template/rescue_base/base) +"aF" = ( +/obj/item/ammo_magazine/n10mm, +/obj/item/ammo_magazine/n10mm, +/obj/item/ammo_magazine/n10mm, +/obj/structure/table/rack, +/obj/item/ammo_magazine/n10mm, +/obj/item/ammo_magazine/n10mm, +/obj/item/ammo_magazine/n10mm, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"aG" = ( +/obj/structure/table/rack, +/obj/item/mech_equipment/mounted_system/extinguisher{ + pixel_y = -2 + }, +/obj/item/mech_equipment/mounted_system/rcd{ + pixel_y = 11 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aH" = ( +/obj/structure/table/steel_reinforced, +/obj/item/reagent_containers/syringe/drugs{ + pixel_x = 3; + pixel_y = -1 + }, +/obj/item/reagent_containers/syringe/drugs{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/reagent_containers/syringe/drugs{ + pixel_x = 3; + pixel_y = 9 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aI" = ( +/obj/structure/table/steel_reinforced, +/obj/item/storage/belt/utility/full, +/obj/item/device/assembly/igniter, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aJ" = ( +/obj/structure/table/rack, +/obj/item/rig_module/mounted/energy/taser, +/obj/item/rig_module/vision/nvg, +/obj/item/rig_module/device/flash, +/obj/structure/window/reinforced/crescent{ + dir = 4 + }, +/obj/structure/window/reinforced/crescent{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"aK" = ( +/obj/structure/mopbucket, +/obj/item/mop, +/obj/floor_decal/corner/blue/diagonal, +/obj/structure/hygiene/sink/kitchen{ + pixel_y = 21 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aL" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/floor_decal/corner/blue/diagonal, +/obj/item/device/radio/intercom/specops{ + pixel_y = 22 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aM" = ( +/obj/structure/table/reinforced, +/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/floor_decal/corner/blue/diagonal, +/obj/item/device/radio/intercom/specops{ + pixel_y = 22 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aN" = ( +/obj/structure/table/reinforced, +/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/floor_decal/corner/blue/diagonal, +/obj/machinery/vending/boozeomat{ + pixel_y = 32 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aO" = ( +/obj/structure/closet/fridge, +/obj/floor_decal/corner/blue/diagonal, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aP" = ( +/obj/floor_decal/corner/blue/diagonal, +/obj/structure/closet/fridge/meat, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aQ" = ( +/obj/machinery/door/airlock/centcom{ + name = "Stall" + }, +/turf/unsimulated/floor{ + icon_state = "freezerfloor" + }, +/area/map_template/rescue_base/base) +"aR" = ( +/obj/item/storage/mirror, +/turf/unsimulated/wall, +/area/map_template/rescue_base/base) +"aS" = ( +/obj/machinery/door/airlock/centcom{ + name = "Showers" + }, +/turf/unsimulated/floor{ + icon_state = "freezerfloor" + }, +/area/map_template/rescue_base/base) +"aT" = ( +/obj/machinery/door/blast/regular{ + id_tag = "standardrescue"; + name = "Heavy Equipment"; + dir = 4; + health_max = 50000 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aU" = ( +/obj/item/device/radio/intercom/specops{ + dir = 2; + pixel_y = 22 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aV" = ( +/obj/structure/table/rack, +/obj/item/mech_equipment/light, +/obj/item/mech_equipment/light{ + pixel_y = 12 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aX" = ( +/obj/machinery/door/airlock/centcom{ + name = "Processing" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"aY" = ( +/obj/structure/table/rack, +/obj/item/gun/energy/pulse_rifle{ + pixel_y = -11 + }, +/obj/item/gun/energy/pulse_rifle{ + pixel_y = -5 + }, +/obj/item/gun/energy/pulse_rifle, +/obj/item/gun/energy/pulse_rifle{ + pixel_y = 5 + }, +/obj/item/gun/energy/pulse_rifle{ + pixel_y = 10 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"aZ" = ( +/obj/floor_decal/corner/blue/diagonal, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"ba" = ( +/obj/structure/table/rack, +/obj/item/mech_equipment/sleeper, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bb" = ( +/turf/unsimulated/wall{ + desc = "A secure airlock. Doesn't look like you can get through easily."; + icon = 'icons/obj/doors/centcom/door.dmi'; + icon_state = "closed"; + name = "Commanding Officer"; + dir = 4 + }, +/area/map_template/rescue_base/base) +"bc" = ( +/obj/structure/hygiene/sink{ + dir = 1; + pixel_y = 16 + }, +/turf/unsimulated/floor{ + icon_state = "freezerfloor" + }, +/area/map_template/rescue_base/base) +"bd" = ( +/obj/structure/table/steel, +/obj/item/storage/fancy/smokable/cigar, +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/map_template/rescue_base/base) +"be" = ( +/obj/machinery/door/airlock/centcom{ + name = "Brig"; + icon_state = "closed"; + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bg" = ( +/obj/wingrille_spawn/reinforced/crescent, +/turf/unsimulated/floor{ + icon_state = "plating"; + name = "plating" + }, +/area/map_template/rescue_base/base) +"bh" = ( +/obj/machinery/suit_storage_unit/medical, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"bj" = ( +/obj/structure/bed, +/obj/item/bedsheet/orange, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bk" = ( +/obj/structure/hygiene/toilet{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bl" = ( +/obj/floor_decal/industrial/outline/yellow, +/obj/machinery/door/airlock/external{ + frequency = 1331; + id_tag = "rescue_base_hatch" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"bm" = ( +/obj/machinery/vending/dinnerware, +/obj/floor_decal/corner/blue/diagonal, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bp" = ( +/obj/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"bq" = ( +/obj/structure/table/rack, +/obj/item/storage/secure/briefcase, +/obj/item/clothing/head/beret/centcom/captain, +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/map_template/rescue_base/base) +"br" = ( +/obj/structure/window/reinforced/crescent{ + dir = 4 + }, +/obj/structure/window/reinforced/crescent{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/item/rig/ert/janitor, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"bs" = ( +/turf/unsimulated/floor{ + dir = 9; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"bt" = ( +/obj/machinery/door/airlock/centcom{ + name = "Cell 2" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bu" = ( +/obj/structure/table/rack, +/obj/item/device/lightreplacer, +/obj/item/device/lightreplacer, +/obj/floor_decal/corner/blue/diagonal, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bv" = ( +/obj/structure/table/rack, +/obj/item/clothing/shoes/galoshes, +/obj/item/clothing/head/bio_hood/janitor, +/obj/item/clothing/suit/bio_suit/janitor, +/obj/item/clothing/glasses/science, +/obj/item/clothing/shoes/galoshes, +/obj/item/clothing/head/bio_hood/janitor, +/obj/item/clothing/suit/bio_suit/janitor, +/obj/item/clothing/glasses/science, +/obj/item/reagent_containers/spray/plantbgone, +/obj/item/reagent_containers/spray/plantbgone, +/obj/item/storage/box/lights/mixed, +/obj/item/storage/box/lights/mixed, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/floor_decal/corner/blue/diagonal, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bw" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/blue/diagonal, +/obj/machinery/microwave, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bx" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/blue/diagonal, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"by" = ( +/obj/structure/table/reinforced, +/obj/floor_decal/corner/blue/diagonal, +/obj/random/donkpocket_box, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bz" = ( +/obj/floor_decal/corner/blue/diagonal, +/obj/item/storage/box/donkpocket_premium, +/obj/structure/closet/kitchen, +/obj/item/reagent_containers/food/condiment/enzyme, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bA" = ( +/obj/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"bB" = ( +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"bC" = ( +/obj/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"bF" = ( +/obj/machinery/door/blast/regular{ + id_tag = "heavyrescue"; + name = "Combat Exosuit"; + dir = 4; + health_max = 100000 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"bG" = ( +/obj/structure/table/rack, +/obj/item/ammo_magazine/box/machinegun, +/obj/item/ammo_magazine/box/machinegun, +/obj/item/ammo_magazine/box/machinegun, +/obj/item/ammo_magazine/box/machinegun, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"bH" = ( +/obj/item/stool, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bI" = ( +/obj/structure/table/standard, +/obj/item/paper, +/obj/item/pen, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bJ" = ( +/obj/structure/table/rack, +/obj/item/gun/projectile/automatic/bullpup_rifle, +/obj/item/gun/projectile/automatic/bullpup_rifle{ + pixel_y = 10 + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"bK" = ( +/obj/structure/table/rack, +/obj/item/rig/ert/security, +/obj/structure/window/reinforced/crescent{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"bM" = ( +/obj/structure/bed, +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/map_template/rescue_base/base) +"bN" = ( +/obj/machinery/door/airlock/centcom{ + name = "Engineering Supplies"; + icon_state = "closed" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bO" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"bP" = ( +/obj/structure/table/rack, +/obj/item/plastique, +/obj/item/plastique, +/obj/item/plastique, +/obj/item/plastique, +/obj/item/plastique, +/obj/item/plastique, +/obj/item/plastique, +/obj/item/plastique, +/obj/item/plastique, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"bQ" = ( +/obj/machinery/door/airlock/centcom{ + name = "Spec Ops Cryo Storage"; + icon_state = "closed"; + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bR" = ( +/obj/machinery/tele_projector{ + dir = 4 + }, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"bS" = ( +/turf/unsimulated/wall{ + desc = "A secure airlock. Doesn't look like you can get through easily."; + icon = 'icons/obj/doors/centcom/door.dmi'; + icon_state = "closed"; + name = "Bridge Access" + }, +/area/map_template/rescue_base/base) +"bT" = ( +/obj/machinery/door/blast/regular{ + id_tag = "heavyrescue"; + name = "Restricted Equipment"; + dir = 4; + health_max = 100000 + }, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/base) +"bU" = ( +/obj/machinery/acting/changer, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"bV" = ( +/obj/landmark{ + name = "Response Team" + }, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"bW" = ( +/obj/machinery/door/airlock/centcom{ + name = "EVA"; + icon_state = "closed"; + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bX" = ( +/obj/machinery/door/airlock/centcom{ + name = "Cell 1" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"bY" = ( +/obj/structure/undies_wardrobe, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"bZ" = ( +/obj/item/clothing/shoes/orange, +/obj/item/clothing/under/color/orange, +/obj/structure/closet{ + name = "Prisoner's Locker" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"ca" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cc" = ( +/obj/structure/table/rack, +/obj/item/storage/box/handcuffs, +/obj/item/storage/box/handcuffs, +/obj/item/storage/box/teargas, +/obj/item/storage/box/teargas, +/obj/item/storage/box/flashbangs, +/obj/item/storage/box/flashbangs, +/obj/item/device/flash, +/obj/item/device/flash, +/obj/item/melee/baton/loaded, +/obj/item/melee/baton/loaded, +/obj/item/reagent_containers/spray/pepper, +/obj/item/reagent_containers/spray/pepper, +/obj/item/melee/telebaton, +/obj/item/melee/telebaton, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 32 + }, +/obj/item/taperoll/police, +/obj/item/taperoll/police, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cd" = ( +/obj/structure/table/rack, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/tacgoggles, +/obj/item/clothing/glasses/tacgoggles, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ce" = ( +/obj/structure/table/rack, +/obj/item/storage/backpack/ert/security, +/obj/item/storage/backpack/ert/security, +/obj/item/storage/belt/holster/security/tactical, +/obj/item/storage/belt/holster/security/tactical, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cf" = ( +/obj/structure/table/rack, +/obj/item/gun/energy/gun/nuclear, +/obj/item/gun/energy/gun/nuclear, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cg" = ( +/obj/structure/table/rack, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 32 + }, +/obj/item/clothing/suit/armor/vest/ert/security, +/obj/item/clothing/suit/armor/vest/ert/security, +/obj/item/clothing/head/helmet/ert/security, +/obj/item/clothing/head/helmet/ert/security, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ch" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/armor/vest/ert/engineer, +/obj/item/clothing/suit/armor/vest/ert/engineer, +/obj/item/clothing/head/helmet/ert/engineer, +/obj/item/clothing/head/helmet/ert/engineer, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ci" = ( +/obj/structure/table/rack, +/obj/item/gun/energy/gun, +/obj/item/gun/energy/gun, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cj" = ( +/obj/structure/table/rack, +/obj/item/storage/backpack/ert/medical, +/obj/item/storage/backpack/ert/medical, +/obj/item/storage/belt/medical, +/obj/item/storage/belt/medical, +/obj/item/storage/belt/medical/emt, +/obj/item/storage/belt/medical/emt, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ck" = ( +/obj/structure/table/rack, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health, +/obj/item/storage/box/latexgloves, +/obj/item/storage/box/nitrilegloves, +/obj/item/storage/box/masks, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cl" = ( +/obj/structure/table/rack, +/obj/item/device/flash, +/obj/item/device/flash, +/obj/item/melee/baton/loaded, +/obj/item/melee/baton/loaded, +/obj/item/storage/box/syringes, +/obj/item/storage/box/syringes, +/obj/item/storage/box/autoinjectors, +/obj/item/storage/box/autoinjectors, +/obj/item/storage/box/beakers, +/obj/item/storage/box/beakers, +/obj/item/storage/box/pillbottles, +/obj/item/storage/box/pillbottles, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/syringegun, +/obj/item/storage/box/syringegun, +/obj/item/storage/box/syringegun, +/obj/item/storage/box/syringegun, +/obj/item/gun/launcher/syringe/rapid, +/obj/item/gun/launcher/syringe/rapid, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cm" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/hypospray, +/obj/item/reagent_containers/hypospray, +/obj/item/reagent_containers/hypospray, +/obj/item/reagent_containers/hypospray, +/obj/item/reagent_containers/hypospray, +/obj/item/reagent_containers/hypospray, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/bottle/inaprovaline, +/obj/item/reagent_containers/glass/bottle/inaprovaline, +/obj/item/reagent_containers/glass/bottle/inaprovaline, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cn" = ( +/obj/structure/table/reinforced, +/obj/item/aicard, +/obj/item/pinpointer/advpinpointer, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"co" = ( +/obj/structure/table/rack, +/obj/item/mech_equipment/clamp, +/obj/item/mech_equipment/clamp{ + pixel_y = 9 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"cp" = ( +/obj/structure/table/rack, +/obj/item/clothing/head/helmet/ballistic, +/obj/item/clothing/head/helmet/ballistic, +/obj/item/clothing/head/helmet/ballistic, +/obj/item/clothing/head/helmet/ballistic, +/obj/item/clothing/head/helmet/ballistic, +/obj/item/clothing/head/helmet/ballistic, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/clothing/suit/armor/bulletproof, +/obj/item/clothing/suit/armor/bulletproof, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"cq" = ( +/obj/machinery/button/blast_door{ + id_tag = "rescuegarage"; + name = "Garage"; + pixel_x = -24; + pixel_y = -4 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"cr" = ( +/obj/structure/table/steel, +/obj/item/device/radio/intercom/specops, +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/map_template/rescue_base/base) +"cs" = ( +/obj/structure/table/rack, +/obj/item/rig/ert/assetprotection, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"cu" = ( +/obj/item/device/radio/intercom/specops{ + dir = 1; + pixel_y = -22 + }, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cv" = ( +/obj/machinery/cryopod{ + dir = 2 + }, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cw" = ( +/obj/structure/table/rack, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 2; + pixel_y = 2 + }, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cx" = ( +/obj/structure/table/rack, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/obj/item/gun/energy/laser, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cy" = ( +/obj/machinery/chemical_dispenser/ert, +/obj/item/reagent_containers/glass/beaker/large, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cz" = ( +/obj/structure/table/rack, +/obj/item/rig_module/mounted/energy/taser, +/obj/item/rig_module/mounted/energy/taser, +/obj/item/rig_module/maneuvering_jets, +/obj/item/rig_module/maneuvering_jets, +/obj/item/rig_module/chem_dispenser/injector, +/obj/item/rig_module/chem_dispenser/injector, +/obj/item/rig_module/device/healthscanner, +/obj/item/rig_module/device/healthscanner, +/obj/item/rig_module/vision/medhud, +/obj/item/rig_module/vision/medhud, +/obj/structure/window/reinforced/crescent{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"cA" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"cB" = ( +/obj/structure/table/reinforced, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"cC" = ( +/obj/structure/table/reinforced, +/obj/item/tableflag, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"cD" = ( +/obj/machinery/fabricator/hacked, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cE" = ( +/obj/structure/table/rack, +/obj/item/gun/energy/ionrifle, +/obj/item/gun/energy/ionrifle, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cF" = ( +/obj/structure/table/rack, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot, +/obj/item/shield/riot, +/obj/item/shield/riot, +/obj/item/shield/riot, +/obj/item/shield/riot, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cG" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/nanoblood, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/skrell/oneg, +/obj/item/reagent_containers/ivbag/blood/skrell/oneg, +/obj/item/reagent_containers/ivbag/blood/unathi/oneg, +/obj/item/reagent_containers/ivbag/blood/unathi/oneg, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/defibrillator/compact/loaded, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cH" = ( +/obj/structure/table/reinforced, +/obj/item/roller_bed, +/obj/item/roller_bed, +/obj/item/roller_bed, +/obj/item/roller_bed, +/obj/item/roller_bed, +/obj/item/roller_bed, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cI" = ( +/obj/item/clothing/accessory/solgov/department/medical/fleet, +/obj/item/clothing/accessory/solgov/department/medical/fleet, +/obj/item/clothing/accessory/solgov/department/medical/fleet, +/obj/item/clothing/accessory/solgov/department/medical/fleet, +/obj/item/clothing/head/beret/solgov/fleet/medical, +/obj/item/clothing/head/beret/solgov/fleet/medical, +/obj/item/clothing/head/beret/solgov/fleet/medical, +/obj/item/clothing/head/beret/solgov/fleet/medical, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"cJ" = ( +/obj/machinery/chem_master, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cK" = ( +/obj/machinery/door/airlock/external{ + frequency = 1331; + id_tag = "rescue_base_hatch"; + name = "Landing Pad" + }, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"cL" = ( +/obj/structure/table/reinforced, +/obj/item/device/paicard, +/obj/item/device/paicard, +/obj/item/device/paicard, +/obj/item/device/paicard, +/obj/item/device/paicard, +/obj/item/device/paicard, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cM" = ( +/obj/structure/table/rack, +/obj/item/gun/energy/gun, +/obj/item/gun/energy/gun, +/obj/item/gun/energy/gun, +/obj/item/gun/energy/gun, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cN" = ( +/obj/structure/table/rack, +/obj/item/shield/riot/metal, +/obj/item/shield/riot/metal, +/obj/item/shield/riot/metal, +/obj/item/shield/riot/metal, +/turf/unsimulated/floor{ + dir = 8; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cO" = ( +/obj/machinery/reagentgrinder, +/obj/item/reagent_containers/glass/beaker/large, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cP" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cQ" = ( +/obj/structure/table/reinforced, +/obj/item/device/megaphone, +/obj/item/device/megaphone, +/obj/item/device/megaphone, +/obj/item/device/megaphone, +/obj/item/device/megaphone, +/obj/item/device/megaphone, +/obj/structure/noticeboard{ + pixel_x = 32 + }, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cR" = ( +/obj/structure/table/rack, +/obj/item/gun/energy/stunrevolver/rifle, +/obj/item/gun/energy/stunrevolver/rifle, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"cS" = ( +/obj/structure/iv_stand, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cT" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/sterilizine, +/obj/item/reagent_containers/spray/sterilizine, +/obj/item/storage/box/bloodpacks, +/obj/item/tape/medical, +/obj/item/tape/medical, +/obj/item/device/flashlight/pen, +/obj/item/device/flashlight/pen, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cU" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/fire, +/obj/item/storage/firstaid/fire, +/obj/item/storage/firstaid/fire, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/o2, +/obj/item/storage/firstaid/o2, +/obj/item/storage/firstaid/o2, +/obj/item/storage/firstaid/radiation, +/obj/item/storage/firstaid/radiation, +/obj/item/storage/firstaid/radiation, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cV" = ( +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/adv, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/obj/item/storage/firstaid/combat, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cW" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"cX" = ( +/obj/floor_decal/corner/blue/diagonal, +/obj/machinery/door/airlock/centcom{ + name = "Galley"; + icon_state = "closed"; + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"cZ" = ( +/obj/structure/table/rack, +/obj/item/storage/box/ammo/stunshells, +/obj/item/storage/box/ammo/stunshells, +/obj/item/storage/box/ammo/beanbags, +/obj/item/storage/box/ammo/beanbags, +/obj/item/storage/box/ammo/shotgunammo, +/obj/item/storage/box/ammo/shotgunammo, +/obj/item/storage/box/ammo/shotgunshells, +/obj/item/storage/box/ammo/shotgunshells, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"dc" = ( +/obj/machinery/acting/changer, +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/map_template/rescue_base/base) +"dd" = ( +/obj/floor_decal/industrial/outline/yellow, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"de" = ( +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/map_template/rescue_base/base) +"df" = ( +/obj/machinery/vending/security, +/turf/unsimulated/wall, +/area/map_template/rescue_base/base) +"dg" = ( +/obj/structure/table/rack, +/obj/item/rig/ert/security, +/obj/structure/window/reinforced/crescent{ + dir = 1 + }, +/obj/structure/window/reinforced/crescent{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"dh" = ( +/obj/machinery/mech_recharger, +/mob/living/exosuit/premade/powerloader, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"di" = ( +/obj/machinery/vending/medical, +/turf/unsimulated/wall, +/area/map_template/rescue_base/base) +"dj" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"dm" = ( +/obj/machinery/door/airlock/centcom{ + name = "ERT Leader"; + icon_state = "closed"; + dir = 4 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"do" = ( +/obj/machinery/door/blast/regular{ + id_tag = "teleporter"; + name = "Emergency Insertion"; + dir = 4; + health_max = 50000 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"dq" = ( +/obj/structure/table/reinforced, +/obj/item/modular_computer/tablet/lease/preset/command, +/obj/item/modular_computer/tablet/lease/preset/command, +/obj/item/modular_computer/tablet/lease/preset/command, +/obj/item/modular_computer/tablet/lease/preset/command, +/obj/item/modular_computer/tablet/lease/preset/command, +/obj/item/modular_computer/tablet/lease/preset/command, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dr" = ( +/obj/machinery/recharge_station, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ds" = ( +/obj/structure/table/rack, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/obj/item/clothing/accessory/storage/white_vest, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dt" = ( +/obj/structure/table/rack, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/clothing/accessory/storage/black_vest, +/obj/item/clothing/accessory/storage/black_vest, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"du" = ( +/obj/structure/table/rack, +/obj/item/clothing/accessory/storage/brown_vest, +/obj/item/clothing/accessory/storage/brown_vest, +/obj/item/clothing/accessory/storage/brown_vest, +/obj/item/clothing/accessory/storage/brown_vest, +/obj/item/clothing/accessory/storage/brown_vest, +/obj/item/clothing/accessory/storage/brown_vest, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dv" = ( +/obj/structure/table/rack, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/item/clothing/accessory/storage/holster/thigh, +/obj/item/clothing/accessory/storage/holster/thigh, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dx" = ( +/obj/structure/table/rack, +/obj/item/rig/ert, +/obj/structure/window/reinforced/crescent{ + dir = 8 + }, +/obj/structure/window/reinforced/crescent{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"dy" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"dA" = ( +/obj/machinery/door/airlock/centcom{ + name = "Infirmary"; + icon_state = "closed"; + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"dB" = ( +/obj/structure/table/rack, +/obj/item/ammo_magazine/smg_top, +/obj/item/ammo_magazine/smg_top, +/obj/item/ammo_magazine/smg_top, +/obj/item/ammo_magazine/smg_top, +/obj/item/ammo_magazine/smg_top, +/obj/item/ammo_magazine/smg_top, +/obj/item/ammo_magazine/smg_top, +/obj/item/ammo_magazine/smg_top, +/obj/item/ammo_magazine/smg_top, +/obj/item/ammo_magazine/smg_top, +/obj/item/ammo_magazine/smg_top, +/obj/item/ammo_magazine/smg_top, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"dC" = ( +/obj/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"dD" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/trackimp, +/obj/item/storage/box/cdeathalarm_kit, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dE" = ( +/obj/structure/table/reinforced, +/obj/prefab/hand_teleporter, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dF" = ( +/obj/machinery/door/airlock/centcom{ + name = "Engineering Supplies"; + icon_state = "closed"; + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"dG" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/cell/hyper, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dH" = ( +/obj/machinery/vending/engivend, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dI" = ( +/obj/machinery/vending/tool, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dJ" = ( +/obj/machinery/vending/generic, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dK" = ( +/turf/unsimulated/wall{ + icon = 'icons/obj/doors/rapid_pdoor.dmi'; + icon_state = "pdoor1"; + name = "Hangar Blastdoor" + }, +/area/map_template/rescue_base/base) +"dL" = ( +/obj/machinery/pipedispenser/disposal, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dM" = ( +/obj/machinery/vending/engineering, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dN" = ( +/obj/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"dO" = ( +/obj/machinery/computer/modular/preset/full/ert{ + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/map_template/rescue_base/base) +"dP" = ( +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dR" = ( +/obj/machinery/door/blast/regular{ + id_tag = "rescuegarage"; + name = "Garage Exit" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"dS" = ( +/obj/machinery/door/airlock/centcom{ + name = "ERT Leader"; + icon_state = "closed" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"dT" = ( +/obj/structure/table/glass, +/obj/item/storage/firstaid/surgery, +/turf/simulated/floor/tiled/dark/monotile, +/area/map_template/rescue_base/start) +"dU" = ( +/obj/structure/table/rack, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"dV" = ( +/obj/structure/window/reinforced/crescent, +/obj/structure/table/rack, +/obj/item/rig_module/mounted/energy/taser, +/obj/item/rig_module/mounted/energy/taser, +/obj/item/rig_module/maneuvering_jets, +/obj/item/rig_module/maneuvering_jets, +/obj/item/rig_module/device/drill, +/obj/item/rig_module/device/drill, +/obj/item/rig_module/mounted/energy/plasmacutter, +/obj/item/rig_module/mounted/energy/plasmacutter, +/obj/item/rig_module/device/rcd, +/obj/item/rig_module/device/rcd, +/obj/item/rig_module/vision/meson, +/obj/item/rig_module/vision/meson, +/obj/structure/window/reinforced/crescent{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"dW" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dX" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dY" = ( +/obj/machinery/shieldgen, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"dZ" = ( +/obj/item/aiModule/reset, +/obj/item/aiModule/freeformcore, +/obj/item/aiModule/protectStation, +/obj/item/aiModule/quarantine, +/obj/item/aiModule/safeguard, +/obj/structure/table/rack, +/obj/item/aiModule/nanotrasen, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"eb" = ( +/obj/structure/bed/chair/office/dark, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"ed" = ( +/obj/structure/table/rack, +/obj/item/gun/projectile/automatic/l6_saw, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"ee" = ( +/obj/machinery/door/airlock/centcom{ + name = "Storage"; + icon_state = "closed" + }, +/turf/unsimulated/floor{ + icon_state = "freezerfloor" + }, +/area/map_template/rescue_base/base) +"ef" = ( +/obj/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"eg" = ( +/obj/floor_decal/corner/blue/diagonal, +/obj/machinery/door/airlock/centcom{ + name = "Storage"; + icon_state = "closed" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"eh" = ( +/obj/structure/table/rack, +/obj/item/storage/box/flashbangs, +/obj/item/storage/box/teargas, +/obj/item/storage/box/handcuffs, +/obj/item/melee/baton/loaded, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ei" = ( +/obj/structure/table/rack, +/obj/item/clothing/mask/gas, +/obj/item/clothing/glasses/tacgoggles, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ej" = ( +/obj/structure/table/rack, +/obj/item/storage/backpack/ert/commander, +/obj/item/storage/belt/holster/security/tactical, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ek" = ( +/obj/structure/table/rack, +/obj/item/gun/energy/gun, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"el" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/armor/vest/ert, +/obj/item/clothing/head/helmet/ert, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"em" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"en" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ep" = ( +/obj/floor_decal/industrial/hatch/yellow, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"et" = ( +/obj/structure/table/rack, +/obj/item/rig/ert/medical, +/obj/structure/window/reinforced/crescent{ + dir = 1 + }, +/obj/structure/window/reinforced/crescent{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"eu" = ( +/obj/machinery/power/emitter, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ev" = ( +/obj/structure/table/steel, +/obj/machinery/button/blast_door{ + id_tag = "standardrescue"; + name = "Standard Gear"; + pixel_x = 5; + pixel_y = 4 + }, +/obj/machinery/button/blast_door{ + id_tag = "teleporter"; + name = "Teleporter"; + pixel_y = -4; + req_access = list("ACCESS_CENT_CAPTAIN") + }, +/obj/machinery/button/blast_door{ + id_tag = "heavyrescue"; + name = "Heavy Gear"; + pixel_x = -5; + pixel_y = 4 + }, +/turf/unsimulated/floor{ + icon_state = "wood"; + name = "plating" + }, +/area/map_template/rescue_base/base) +"ew" = ( +/turf/unsimulated/floor/plating, +/area/map_template/rescue_base/base) +"ex" = ( +/obj/machinery/door/blast/regular{ + id_tag = "rescueengi"; + name = "Engineering Supplies" + }, +/obj/floor_decal/industrial/hatch/yellow, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"ey" = ( +/obj/structure/table/rack, +/obj/item/storage/backpack/ert/engineer, +/obj/item/storage/backpack/ert/engineer, +/obj/item/storage/belt/utility/full, +/obj/item/storage/belt/utility/full, +/obj/item/clothing/gloves/insulated, +/obj/item/clothing/gloves/insulated, +/obj/item/clothing/gloves/insulated, +/obj/item/clothing/gloves/insulated, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ez" = ( +/obj/structure/table/rack, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/welding/superior, +/obj/item/clothing/glasses/welding/superior, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"eA" = ( +/obj/structure/table/rack, +/obj/item/device/flash, +/obj/item/device/flash, +/obj/item/melee/baton/loaded, +/obj/item/melee/baton/loaded, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/inflatable_dispenser, +/obj/item/inflatable_dispenser, +/obj/item/pickaxe/diamonddrill, +/obj/item/pickaxe/diamonddrill, +/obj/item/storage/briefcase/inflatable{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/inflatable{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/inflatable{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/inflatable{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"eB" = ( +/obj/structure/table/reinforced, +/obj/item/taperoll/engineering, +/obj/item/taperoll/engineering, +/obj/item/taperoll/atmos, +/obj/item/taperoll/atmos, +/obj/item/device/multitool, +/obj/item/device/multitool, +/obj/item/tape_roll, +/obj/item/tape_roll, +/obj/item/tape_roll, +/obj/item/tape_roll, +/obj/item/cell/high, +/obj/item/cell/high, +/obj/item/cell/high, +/obj/item/cell/high, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"eC" = ( +/obj/structure/table/reinforced, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd, +/obj/item/rcd, +/obj/item/rcd, +/obj/item/rcd, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"eD" = ( +/obj/structure/table/reinforced, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/glass{ + amount = 50 + }, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/stack/material/steel{ + amount = 50; + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/glass/reinforced{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/plastic{ + amount = 50 + }, +/obj/item/stack/material/glass/boron_reinforced{ + amount = 20 + }, +/obj/item/stack/material/glass/boron_reinforced{ + amount = 20 + }, +/obj/item/stack/material/glass/boron_reinforced{ + amount = 20 + }, +/obj/item/stack/material/glass/boron_reinforced{ + amount = 20 + }, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"eE" = ( +/obj/structure/table/reinforced, +/obj/item/stock_parts/circuitboard/smes, +/obj/item/stock_parts/circuitboard/smes, +/obj/item/stock_parts/smes_coil, +/obj/item/stock_parts/smes_coil, +/obj/item/stock_parts/smes_coil/super_capacity, +/obj/item/stock_parts/smes_coil/super_capacity, +/obj/item/stock_parts/smes_coil/super_io, +/obj/item/stock_parts/smes_coil/super_io, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"eF" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"eH" = ( +/obj/machinery/suit_storage_unit/security, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"eI" = ( +/obj/machinery/hologram/holopad/longrange, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"eK" = ( +/mob/living/exosuit/premade/heavy, +/obj/machinery/mech_recharger, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"eM" = ( +/obj/machinery/suit_storage_unit/engineering, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"eN" = ( +/obj/floor_decal/industrial/loading, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"eO" = ( +/obj/structure/table/rack, +/obj/item/mech_equipment/catapult, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"eP" = ( +/obj/floor_decal/industrial/warning, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"eQ" = ( +/obj/structure/table/rack, +/obj/item/gun/projectile/shotgun/pump/combat, +/obj/item/gun/projectile/shotgun/pump/combat, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"eR" = ( +/obj/floor_decal/industrial/hatch/yellow, +/obj/machinery/porta_turret/crescent, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"eS" = ( +/obj/structure/table/rack, +/obj/item/rig/ert/medical, +/obj/structure/window/reinforced/crescent{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"eT" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/closet/crate/secure{ + req_access = list("ACCESS_CENT_SPECOPS") + }, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"eU" = ( +/obj/paint/hull, +/turf/simulated/wall/titanium, +/area/map_template/rescue_base/start) +"eW" = ( +/obj/machinery/door/blast/regular{ + density = 0; + icon_state = "pdoor0"; + id_tag = "rescuedock"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"eX" = ( +/obj/machinery/door/airlock/external{ + frequency = 1331; + id_tag = "rescue_shuttle_outer"; + name = "Ship External Access" + }, +/obj/shuttle_landmark/ert/start, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"eY" = ( +/obj/machinery/computer/prisoner{ + name = "Implant Management"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"eZ" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"fa" = ( +/obj/machinery/door/airlock/centcom{ + name = "Infirmary"; + icon_state = "closed" + }, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"fb" = ( +/obj/item/device/radio/intercom/specops{ + dir = 8; + pixel_x = 22 + }, +/obj/structure/table/steel_reinforced, +/obj/item/storage/fancy/smokable/dromedaryco, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fc" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + dir = 4; + id_tag = "rescue_shuttle_pump" + }, +/obj/machinery/airlock_sensor{ + frequency = 1331; + id_tag = "rescue_shuttle_sensor"; + pixel_x = 8; + pixel_y = 25 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"fd" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"fe" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + dir = 8; + id_tag = "rescue_shuttle_pump" + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + frequency = 1331; + id_tag = "rescue_shuttle"; + pixel_x = -8; + pixel_y = 24 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/button/blast_door{ + id_tag = "rescuedock"; + name = "Window Shutters Control"; + pixel_x = 4; + pixel_y = 24 + }, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"ff" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fg" = ( +/obj/floor_decal/corner/paleblue{ + dir = 4 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 10 + }, +/obj/structure/closet/medical_wall{ + pixel_y = -24 + }, +/obj/item/reagent_containers/glass/bottle/stoxin, +/obj/item/reagent_containers/glass/bottle/stoxin, +/obj/item/reagent_containers/syringe, +/obj/item/tank/anesthetic, +/obj/item/clothing/mask/breath/medical, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"fh" = ( +/obj/machinery/atmospherics/unary/freezer{ + icon_state = "freezer" + }, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"fi" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/radio/intercom/specops{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fj" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/obj/structure/closet/medical_wall{ + pixel_x = 32 + }, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/ivbag/blood/human/oneg, +/obj/item/reagent_containers/syringe/antiviral, +/obj/item/reagent_containers/syringe/antiviral, +/obj/item/reagent_containers/syringe, +/obj/item/reagent_containers/glass/bottle/antitoxin{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/reagent_containers/glass/bottle/inaprovaline{ + pixel_x = 4; + pixel_y = 7 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"fk" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"fl" = ( +/obj/machinery/door/airlock/external{ + frequency = 1331; + id_tag = "rescue_shuttle_outer"; + name = "Ship External Access" + }, +/obj/shuttle_landmark/ert/start, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "ert_starboard_airlock_blast_door" + }, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"fn" = ( +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fo" = ( +/obj/machinery/hologram/holopad/longrange, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fp" = ( +/obj/machinery/body_scanconsole{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"fq" = ( +/obj/item/device/radio/intercom/specops{ + dir = 8; + pixel_x = 22; + pixel_y = -10 + }, +/obj/structure/handrail{ + dir = 8 + }, +/obj/machinery/button/blast_door{ + id_tag = "ert_starboard_airlock_blast_door"; + name = "Port Exit Shutters Control"; + pixel_x = 24; + pixel_y = 8; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"fs" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"ft" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + dir = 4; + id_tag = "rescue_shuttle_pump" + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"fu" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"fv" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"fw" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/shuttle{ + dir = 8; + id_tag = "rescue_shuttle_pump" + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"fx" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"fy" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fz" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"fA" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/door/airlock/external{ + frequency = 1331; + id_tag = "rescue_shuttle_inner"; + name = "Ship External Access" + }, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"fB" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"fC" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/head/solgov/dress/fleet/command, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fD" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/closet/radiation, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fE" = ( +/obj/machinery/computer/modular/preset/medical{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fF" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fG" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/machinery/meter, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fH" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1331; + master_tag = "rescue_shuttle"; + name = "interior access button"; + pixel_x = 25; + pixel_y = 25; + req_access = list("ACCESS_CENT_SPECOPS") + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fI" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fJ" = ( +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id_tag = "rescueeva"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/wallframe_spawn/reinforced/titanium, +/obj/paint/hull, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"fL" = ( +/obj/structure/closet/bombclosetsecurity, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fM" = ( +/obj/structure/table/rack, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fN" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fO" = ( +/obj/structure/closet, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fP" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/item/device/radio/intercom/specops{ + pixel_x = -22; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"fQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fS" = ( +/obj/machinery/door/airlock/centcom{ + name = "Cell"; + icon_state = "closed" + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fT" = ( +/obj/machinery/door/airlock/centcom{ + name = "Storage"; + icon_state = "closed" + }, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"fU" = ( +/obj/machinery/door/airlock/centcom{ + name = "Flight Deck"; + icon_state = "closed" + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fV" = ( +/obj/structure/closet/l3closet/general, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fW" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fX" = ( +/obj/item/device/radio/intercom/specops{ + dir = 1; + pixel_y = -22 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fY" = ( +/obj/structure/table/rack, +/obj/machinery/light, +/obj/item/tank/jetpack/carbondioxide, +/obj/item/tank/jetpack/carbondioxide, +/obj/machinery/button/blast_door{ + id_tag = "rescueeva"; + name = "Window Shutters Control"; + pixel_x = 24; + pixel_y = -4 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"fZ" = ( +/obj/machinery/door/airlock/centcom{ + name = "Brig"; + icon_state = "closed" + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"ga" = ( +/obj/structure/shuttle/engine/heater, +/obj/paint/sun, +/turf/simulated/wall/titanium, +/area/map_template/rescue_base/start) +"gb" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"gc" = ( +/obj/floor_decal/corner/red{ + dir = 6 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"gd" = ( +/obj/machinery/door/airlock/centcom{ + name = "Passageway"; + icon_state = "closed" + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"ge" = ( +/obj/structure/handrail, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gf" = ( +/obj/structure/closet, +/obj/item/storage/box/donkpocket_premium, +/obj/item/storage/box/donkpocket_premium, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gh" = ( +/obj/structure/bed, +/obj/item/bedsheet/orange, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gi" = ( +/obj/machinery/flasher{ + id_tag = "rescueflash"; + pixel_y = 28 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gj" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gk" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gl" = ( +/obj/floor_decal/corner/paleblue, +/obj/floor_decal/floordetail/edgedrain{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"gm" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"gn" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"go" = ( +/obj/item/device/radio/intercom/specops{ + dir = 8; + pixel_x = 22 + }, +/obj/machinery/bodyscanner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"gp" = ( +/obj/item/stool, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gq" = ( +/obj/structure/hygiene/toilet{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gr" = ( +/obj/structure/table/rack, +/obj/random/solgov, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gs" = ( +/obj/structure/closet/crate/freezer/rations, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"gt" = ( +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"gu" = ( +/obj/machinery/shieldwallgen, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"gv" = ( +/obj/structure/closet/secure_closet/chemical, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"gw" = ( +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"gx" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gy" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/button/blast_door{ + id_tag = "rescuebridge"; + name = "Window Shutters Control"; + pixel_y = -4 + }, +/obj/item/device/radio/intercom/hailing{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gz" = ( +/obj/machinery/door/airlock/external{ + frequency = 1331; + id_tag = "rescue_shuttle_outer"; + name = "Ship External Access" + }, +/obj/shuttle_landmark/ert/start, +/obj/machinery/door/blast/regular{ + dir = 4; + id_tag = "ert_port_airlock_blast_door" + }, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"gA" = ( +/obj/structure/table/glass, +/obj/item/defibrillator/loaded, +/obj/item/reagent_containers/glass/beaker/cryoxadone, +/obj/machinery/atmospherics/binary/pump/on, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"gB" = ( +/obj/structure/closet/secure_closet/medical1, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"gD" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/vending/wallmed1{ + name = "Emergency NanoMed"; + pixel_x = 28; + req_access = newlist() + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gE" = ( +/obj/structure/table/rack, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gF" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/iv_stand, +/obj/floor_decal/corner/red{ + dir = 10 + }, +/obj/floor_decal/floordetail/edgedrain{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"gG" = ( +/obj/machinery/recharger/wallcharger{ + pixel_x = -25 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gJ" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gK" = ( +/obj/structure/bed/chair, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gL" = ( +/obj/machinery/vending/wallmed1{ + name = "Emergency NanoMed"; + pixel_x = 28; + req_access = newlist() + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/handrail{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gM" = ( +/obj/structure/handrail{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gN" = ( +/obj/structure/handrail{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gO" = ( +/obj/machinery/optable, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"gP" = ( +/obj/machinery/button/flasher{ + id_tag = "rescueflash"; + name = "Flasher"; + pixel_x = 27 + }, +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gQ" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"gR" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/syringe/antiviral, +/obj/item/reagent_containers/syringe/antiviral, +/obj/item/stack/medical/advanced/bruise_pack, +/turf/simulated/floor/tiled/dark/monotile, +/area/map_template/rescue_base/start) +"gS" = ( +/obj/machinery/button/blast_door{ + id_tag = "rescueinfirm"; + name = "Window Shutters Control"; + pixel_x = 4; + pixel_y = -24; + dir = 1 + }, +/obj/floor_decal/corner/red{ + dir = 5 + }, +/obj/floor_decal/floordetail/edgedrain, +/obj/structure/hygiene/sink{ + dir = 4; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/rescue_base/start) +"gT" = ( +/obj/machinery/door/airlock/centcom{ + name = "Garage" + }, +/obj/machinery/door/blast/regular{ + id_tag = "standardrescue"; + name = "Garage"; + health_max = 50000 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"gU" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id_tag = "rescuebridge"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/paint/hull, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"gV" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gW" = ( +/obj/structure/closet{ + name = "Prisoner's Locker" + }, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/under/color/orange, +/obj/item/device/radio/intercom/specops{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gX" = ( +/obj/paint/sun, +/turf/simulated/wall/titanium, +/area/map_template/rescue_base/start) +"gY" = ( +/obj/structure/bed/chair/shuttle{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"gZ" = ( +/obj/structure/table/rack, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"ha" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 6 + }, +/obj/item/reagent_containers/spray/sterilizine{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/surgical, +/turf/simulated/floor/tiled/dark/monotile, +/area/map_template/rescue_base/start) +"hb" = ( +/obj/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id_tag = "rescueinfirm"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/paint/hull, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"hd" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"he" = ( +/obj/structure/closet{ + name = "Prisoner's Locker" + }, +/obj/item/clothing/shoes/orange, +/obj/item/clothing/under/color/orange, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"hf" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/simulated/floor/reinforced, +/area/map_template/rescue_base/start) +"hg" = ( +/obj/machinery/computer/shuttle_control/multi/rescue, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"hh" = ( +/obj/machinery/computer/modular/preset/engineering, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"hi" = ( +/obj/machinery/computer/modular/preset/security, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"hj" = ( +/obj/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"hk" = ( +/obj/machinery/embedded_controller/radio/simple_docking_controller{ + frequency = 1331; + id_tag = "rescue_base"; + pixel_x = 5; + pixel_y = -25 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"hl" = ( +/obj/machinery/computer/cryopod{ + pixel_y = 32 + }, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"iC" = ( +/obj/structure/table/rack, +/obj/item/gun/energy/taser/carbine, +/obj/item/gun/energy/taser/carbine, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"iP" = ( +/obj/structure/table/rack, +/obj/item/gun/projectile/automatic/sec_smg, +/obj/item/gun/projectile/automatic/sec_smg, +/obj/item/gun/projectile/automatic/sec_smg, +/obj/item/gun/projectile/automatic/sec_smg, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"lE" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/space, +/area/map_template/rescue_base/start) +"nZ" = ( +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"oT" = ( +/obj/structure/table/rack, +/obj/item/ammo_magazine/mil_rifle/heavy, +/obj/item/ammo_magazine/mil_rifle/heavy, +/obj/item/ammo_magazine/mil_rifle/heavy, +/obj/item/ammo_magazine/mil_rifle/heavy, +/obj/item/ammo_magazine/mil_rifle/heavy, +/obj/item/ammo_magazine/mil_rifle/heavy, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"qQ" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"si" = ( +/obj/item/clothing/accessory/solgov/department/security/fleet, +/obj/item/clothing/accessory/solgov/department/security/fleet, +/obj/item/clothing/accessory/solgov/department/security/fleet, +/obj/item/clothing/accessory/solgov/department/security/fleet, +/obj/item/clothing/head/beret/solgov/fleet/security, +/obj/item/clothing/head/beret/solgov/fleet/security, +/obj/item/clothing/head/beret/solgov/fleet/security, +/obj/item/clothing/head/beret/solgov/fleet/security, +/obj/structure/closet/walllocker{ + pixel_x = -28 + }, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"ua" = ( +/obj/structure/table/rack, +/obj/item/tank/oxygen_emergency_double, +/obj/item/tank/oxygen_emergency_double, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"uV" = ( +/obj/structure/window/reinforced/crescent, +/obj/structure/table/rack, +/obj/item/rig/ert/engineer, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"xK" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/armor/vest/ert/medical, +/obj/item/clothing/suit/armor/vest/ert/medical, +/obj/item/clothing/head/helmet/ert/medical, +/obj/item/clothing/head/helmet/ert/medical, +/turf/unsimulated/floor{ + dir = 1; + icon_state = "vault" + }, +/area/map_template/rescue_base/base) +"yR" = ( +/obj/structure/table/rack, +/obj/item/clothing/head/helmet/ablative, +/obj/item/clothing/head/helmet/ablative, +/obj/item/clothing/head/helmet/ablative, +/obj/item/clothing/head/helmet/ablative, +/obj/item/clothing/head/helmet/ablative, +/obj/item/clothing/head/helmet/ablative, +/obj/item/clothing/suit/armor/laserproof, +/obj/item/clothing/suit/armor/laserproof, +/obj/item/clothing/suit/armor/laserproof, +/obj/item/clothing/suit/armor/laserproof, +/obj/item/clothing/suit/armor/laserproof, +/obj/item/clothing/suit/armor/laserproof, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"zS" = ( +/obj/machinery/door/airlock/centcom{ + name = "Infirmary"; + icon_state = "closed" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"Bh" = ( +/obj/structure/handrail{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"Cc" = ( +/obj/structure/table/rack, +/obj/item/rig_module/mounted/energy/taser, +/obj/item/rig_module/mounted/energy/taser, +/obj/item/rig_module/maneuvering_jets, +/obj/item/rig_module/maneuvering_jets, +/obj/item/rig_module/mounted/energy/egun, +/obj/item/rig_module/mounted/energy/egun, +/obj/item/rig_module/chem_dispenser/combat, +/obj/item/rig_module/chem_dispenser/combat, +/obj/item/rig_module/grenade_launcher, +/obj/item/rig_module/vision/sechud, +/obj/item/rig_module/vision/sechud, +/obj/item/rig_module/device/flash, +/obj/item/rig_module/device/flash, +/obj/structure/window/reinforced/crescent{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"Cm" = ( +/obj/structure/table/rack, +/obj/item/gun/energy/sniperrifle, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"Cz" = ( +/obj/item/gun/projectile/automatic/nt41, +/obj/item/gun/projectile/automatic/nt41{ + pixel_y = 8 + }, +/obj/structure/table/rack, +/turf/unsimulated/floor/techfloor{ + icon_state = "techfloor_grid" + }, +/area/map_template/rescue_base/base) +"DF" = ( +/obj/structure/handrail{ + dir = 4 + }, +/obj/item/device/radio/intercom/hailing{ + dir = 4; + pixel_x = -24; + pixel_y = -10 + }, +/obj/machinery/button/blast_door{ + id_tag = "ert_port_airlock_blast_door"; + name = "Port Exit Shutters Control"; + pixel_x = -24; + dir = 4; + pixel_y = 8 + }, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"DH" = ( +/obj/machinery/door/airlock/centcom{ + name = "Briefing Room"; + icon_state = "closed"; + dir = 8 + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"Es" = ( +/obj/machinery/telecomms/allinone/ert, +/turf/simulated/floor/plating, +/area/map_template/rescue_base/start) +"GI" = ( +/obj/structure/table/rack, +/obj/item/cell/high, +/obj/item/cell/high, +/obj/item/cell/high, +/obj/item/cell/high, +/obj/item/cell/high, +/obj/item/cell/high, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"JH" = ( +/obj/machinery/door/airlock/centcom{ + name = "EVA"; + icon_state = "closed" + }, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/map_template/rescue_base/base) +"Wi" = ( +/obj/structure/table/rack, +/obj/item/storage/box/smokes, +/obj/item/storage/box/smokes, +/obj/item/storage/box/frags, +/obj/item/storage/box/emps, +/obj/item/storage/box/emps, +/obj/item/gun/launcher/grenade, +/turf/unsimulated/floor/techfloor, +/area/map_template/rescue_base/base) +"ZT" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 4; + start_pressure = 740.5 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/rescue_base/start) +"ZX" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/unsimulated/floor/plating, +/area/map_template/rescue_base/base) + +(1,1,1) = {" +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +"} +(2,1,1) = {" +ad +bd +de +de +de +de +de +ad +au +aB +aQ +aB +ad +aN +aZ +bm +bw +bx +ad +aK +aZ +ad +ew +ew +ew +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ad +"} +(3,1,1) = {" +ad +cr +aD +de +de +de +bM +ad +ad +ad +aR +bc +ad +aM +aZ +aZ +aZ +by +ad +aL +aZ +ad +ew +ew +ew +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ad +"} +(4,1,1) = {" +ad +ev +dO +de +de +de +bq +ad +av +av +aR +bc +ee +aZ +aZ +aZ +aZ +aZ +eg +aZ +aZ +ad +ew +ew +ew +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ad +"} +(5,1,1) = {" +ad +de +de +de +de +de +dc +ad +aw +aB +aS +aB +ad +aP +aO +aZ +aZ +bz +ad +bv +bu +ad +ew +ew +ew +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ad +"} +(6,1,1) = {" +ad +ad +bb +bb +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +cX +cX +ad +ad +ad +ad +ad +ew +ew +ew +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +"} +(7,1,1) = {" +ad +eh +ar +ar +dD +bg +ar +ar +an +cI +si +ar +dq +ad +bY +ao +ao +bU +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +ad +qQ +"} +(8,1,1) = {" +ad +ei +ar +ar +dE +bg +ar +cA +ar +bO +bO +ar +ds +ad +cv +bV +bV +cP +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ad +ZX +"} +(9,1,1) = {" +ad +ej +ar +ar +cn +bg +eI +cB +ar +bO +bO +ar +dt +ad +cv +bV +bV +cP +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ad +ZX +"} +(10,1,1) = {" +ad +ek +ar +ar +ar +dS +ar +cC +ar +bO +bO +ar +du +ad +cv +bV +bV +cP +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ad +ZX +"} +(11,1,1) = {" +ad +el +ar +ar +cQ +bg +ar +ar +ar +ar +ar +ar +dv +ad +hl +ao +ao +cu +ad +ad +dM +ci +ch +dJ +dI +dH +dG +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +"} +(12,1,1) = {" +ad +ad +dm +dm +ad +ad +bg +bg +bg +DH +DH +bg +ad +ad +ad +bQ +bQ +ad +ad +dL +ar +ar +ar +ar +ar +ar +ar +dZ +ad +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ad +"} +(13,1,1) = {" +aE +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +dr +ad +af +ar +ar +dY +ar +dY +ar +ar +ey +bg +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ad +"} +(14,1,1) = {" +aE +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +dr +ad +eu +ar +ar +dX +ar +en +ar +ar +ez +bg +ar +ar +ef +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +bC +dC +ar +ar +ad +"} +(15,1,1) = {" +ad +bg +dA +dA +bg +bg +bg +bg +bg +ad +bg +bW +bW +bg +ad +ao +ao +cL +bg +eE +ar +ar +dX +ar +en +ar +ar +eA +bg +ar +ar +bA +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +eP +ar +ar +ad +"} +(16,1,1) = {" +ad +xK +ao +ao +cj +cl +ck +cS +cG +bg +cW +ao +ao +eM +bg +ao +ao +cm +bg +eF +ar +ar +dX +ar +en +ar +ar +eB +bg +ar +ar +bA +bB +eR +bB +bB +bB +bB +bB +bB +bB +bB +eU +eU +eU +eU +eU +eU +gU +eU +eU +eU +eU +eU +eU +gX +gX +bB +eP +ar +ar +dK +"} +(17,1,1) = {" +ad +ci +ao +ao +ar +ar +ar +ar +ar +di +dP +ao +ao +eM +bg +ao +ao +cm +bg +cw +ar +ar +dX +ar +en +ar +ar +eC +bg +ar +ar +bA +bB +bB +bB +bB +bB +bB +bB +bB +bB +eU +eU +gh +gp +fx +gG +gG +gV +hd +eU +gu +gu +eT +Es +ga +hf +bB +eP +ar +ar +dK +"} +(18,1,1) = {" +ad +cB +ao +ao +ar +ar +ar +ar +ar +zS +ar +ao +ao +ar +JH +ao +ao +ca +bg +cD +ar +ar +dW +ar +em +ar +ar +eD +ad +ar +ar +bA +bB +bB +bB +bB +bB +bB +bB +eU +fJ +eU +eU +gi +fn +fS +fn +fn +fn +fn +eU +gQ +gt +gt +gt +ga +hf +bB +eP +ar +ar +dK +"} +(19,1,1) = {" +ad +cU +ao +ao +ar +ar +ar +ar +ar +bg +eH +ao +ao +bh +bg +ao +ao +ao +bN +ao +ao +ao +ao +ao +ao +ao +ao +ao +ex +ar +ar +bA +bB +bB +bB +bB +bB +eU +eU +eU +fM +ua +eU +gj +gq +fx +fn +gP +gW +he +eU +gQ +gt +gt +gs +ga +hf +bB +eP +ar +ar +dK +"} +(20,1,1) = {" +ad +cV +ao +ao +cy +cJ +cO +cT +cH +bg +eH +ao +ao +bh +bg +ao +ao +ao +bN +ao +ao +ao +ao +ao +ao +ao +ao +ao +dR +ar +ar +bA +bB +eU +eU +gz +eU +eU +eU +ZT +fn +Bh +eU +eU +eU +eU +fZ +eU +eU +eU +eU +eU +eU +fT +eU +gX +gX +gX +eP +ar +ar +dK +"} +(21,1,1) = {" +ad +bg +dA +dA +bg +bg +bg +bg +bg +ad +bg +bW +bW +bg +ad +ao +ao +ar +ad +ad +ad +dF +dF +ad +ad +ad +ad +ad +ad +ar +ar +bA +bB +eU +fc +gt +DF +ft +eU +fF +fn +fn +fW +fx +gN +gN +fn +gr +gr +gJ +gE +fx +fL +fn +fV +fD +ga +hf +eP +ar +ar +dK +"} +(22,1,1) = {" +bS +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +cK +ep +ep +bl +ao +ao +dd +eN +eW +fd +fk +fk +fu +fz +fG +fn +fn +fn +gd +fn +fn +fn +fn +fn +fn +fn +fU +fn +fn +fn +fn +ga +hf +eP +ar +ar +dK +"} +(23,1,1) = {" +bS +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +ao +cK +ep +ep +bl +ao +ao +dd +eN +eX +fd +fk +fk +fv +fA +fH +fn +fn +fX +eU +ge +fn +fn +fn +gV +gV +fn +fx +fO +fn +fy +ff +ga +hf +eP +ar +ar +dK +"} +(24,1,1) = {" +ad +df +aC +aC +bg +bg +bg +ad +ao +ao +ad +ad +aT +aT +aT +aT +aT +ad +ad +ar +bs +bs +bs +bs +hk +ad +ad +ad +ad +ar +ar +bA +bB +eU +fe +gt +fq +fw +eU +fQ +fn +fn +fY +eU +gL +gM +fn +gK +gD +fb +fs +fx +gf +fn +eY +fE +ga +hf +eP +ar +ar +dK +"} +(25,1,1) = {" +ad +cc +ao +ao +cN +iC +cR +bg +ao +ao +ad +et +bB +bB +bB +bB +bB +cZ +ad +ad +aA +aA +aA +aA +ad +ad +dy +dy +ad +ar +ar +bA +bB +eU +eU +fl +eU +eU +eU +fI +fn +Bh +eU +eU +eU +fx +fa +eU +eU +eU +eU +eU +eU +fU +eU +gX +gX +gX +eP +ar +ar +dK +"} +(26,1,1) = {" +ad +cd +ao +ao +ar +ar +cf +bg +ao +ao +ad +eS +bB +bB +GI +bB +bB +eQ +ad +cq +ao +ao +ao +ao +ar +ar +ar +ar +ad +ar +ar +bA +bB +bB +bB +bB +bB +eU +eU +eU +fN +gx +eU +gm +fP +gw +gw +gB +ha +dT +gR +eU +hg +fo +gk +ga +lE +bB +eP +ar +ar +dK +"} +(27,1,1) = {" +ad +ce +ao +ao +ar +ar +cx +bg +ao +ao +ad +cz +bB +bB +dV +bB +bB +aF +ad +dh +ao +ao +ao +ao +ao +ao +ao +ao +gT +ar +ar +bA +bB +bB +bB +bB +bB +bB +bB +eU +fJ +eU +eU +fh +eZ +gb +fp +gw +gl +gc +fg +eU +hh +gY +fC +ga +hf +bB +eP +ar +ar +dK +"} +(28,1,1) = {" +ad +cF +ao +ao +ar +ar +cE +bg +ao +ao +ad +dg +bB +bB +uV +bB +bB +Cz +ad +ab +ao +ao +ao +ao +ao +ao +ao +ao +gT +ar +ar +bA +bB +bB +bB +bB +bB +bB +bB +bB +bB +eU +eU +gn +gA +fj +go +gv +gF +gO +gS +eU +hi +fi +gy +ga +hf +bB +eP +ar +ar +dK +"} +(29,1,1) = {" +ad +cg +ao +ao +iP +dB +cM +bg +ao +ao +ad +bK +bB +bB +ap +bB +bB +Wi +ad +aU +ar +ar +ar +ar +ar +ar +ar +ar +ad +ar +ar +bA +bB +eR +bB +bB +bB +bB +bB +bB +bB +bB +eU +eU +eU +eU +eU +eU +hb +eU +eU +eU +eU +eU +eU +gX +gX +bB +eP +ar +ar +dK +"} +(30,1,1) = {" +ad +ad +aC +aC +ad +ad +bg +ad +ao +ao +ad +Cc +bB +bB +bB +bB +bB +bP +ad +ar +ar +ar +ba +eO +aG +aV +co +dU +ad +ar +ar +bA +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +bB +eP +ar +ar +ad +"} +(31,1,1) = {" +ah +ao +ao +ao +ao +ao +ao +ao +ao +ao +ad +dx +bB +bB +bB +bB +bB +bB +ad +ad +ad +bF +ad +ad +ad +ad +ad +ad +ad +ar +ar +bp +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +hj +dN +ar +ar +ad +"} +(32,1,1) = {" +ah +ao +ao +ao +ao +ao +ao +ao +ao +ao +ad +aJ +bB +br +ac +fB +yR +cp +ad +eK +nZ +nZ +nZ +ad +ew +ew +ew +ew +ad +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ad +"} +(33,1,1) = {" +ad +ad +do +do +ad +ad +ad +be +be +ad +ad +ad +bT +ad +ad +ad +ad +ad +ad +gZ +nZ +nZ +nZ +ad +ew +ew +ew +ew +ad +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +ad +"} +(34,1,1) = {" +ad +ae +ao +ao +ad +ar +ar +ar +ar +ar +ad +Cm +nZ +bG +ed +oT +bJ +aY +ad +ad +ad +ad +ad +ad +ew +ew +ew +ew +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +"} +(35,1,1) = {" +ad +bR +ao +ao +ad +eb +cB +ar +ar +ar +ad +nZ +nZ +nZ +nZ +nZ +nZ +nZ +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +ad +qQ +"} +(36,1,1) = {" +ad +ag +ao +ao +ad +cB +cB +ar +ar +ar +ad +nZ +nZ +nZ +nZ +nZ +nZ +nZ +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +ad +qQ +"} +(37,1,1) = {" +ad +ad +ad +ad +ad +ad +ar +ar +ar +ar +ad +cs +cs +cs +nZ +cs +cs +cs +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +ad +qQ +"} +(38,1,1) = {" +ad +ai +aq +ax +aH +ad +ar +ar +ar +ar +ad +ad +ad +ad +ad +ad +ad +ad +ad +ew +ew +ew +ad +ad +ad +ad +ad +ad +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +nZ +ad +qQ +"} +(39,1,1) = {" +ad +aj +ar +ar +ar +ad +ar +ar +ar +dj +dj +bZ +bZ +ad +ew +ew +ew +ew +ew +ew +ew +ew +ad +ew +ew +ew +ew +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +"} +(40,1,1) = {" +ad +ak +ar +ay +ar +aX +ar +ar +ar +ar +ar +ar +ar +ad +ew +ew +ew +ew +ew +ew +ew +ew +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ad +"} +(41,1,1) = {" +ad +al +ar +ar +ar +ad +ar +bs +ar +ar +ar +bs +ar +ad +ew +ew +ew +ew +ew +ew +ew +ew +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ad +"} +(42,1,1) = {" +ad +am +as +az +aI +ad +bg +bt +bg +ad +bg +bX +bg +ad +ew +ew +ew +ad +ad +ad +ad +ad +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ad +"} +(43,1,1) = {" +ad +ad +ad +ad +ad +ad +bj +ar +bH +ad +bH +ar +bj +ad +ew +ew +ew +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ad +"} +(44,1,1) = {" +ad +ew +ew +ew +ew +ad +bk +ar +bI +ad +bI +ar +bk +ad +ew +ew +ew +ad +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ew +ad +"} +(45,1,1) = {" +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +"} diff --git a/mods/atmos_ret_field/_atm_ret_field.dm b/mods/atmos_ret_field/_atm_ret_field.dm new file mode 100644 index 0000000000000..697c7eb8a8a8c --- /dev/null +++ b/mods/atmos_ret_field/_atm_ret_field.dm @@ -0,0 +1,5 @@ +/singleton/modpack/atmospheric_retention_field + name = "Atmospheric Retention Fields" + desc = @{"Высокотехнологичная альтернатива обычным противопожарным дверям. +Атмосферные удерживающие поля активируются при срабатывании воздушной или пожарной сигнализации +создавая мерцающее силовое поле, которое препятствует прохождению воздуха через него."} diff --git a/mods/atmos_ret_field/_atm_ret_field.dme b/mods/atmos_ret_field/_atm_ret_field.dme new file mode 100644 index 0000000000000..5962d1dbb7fb2 --- /dev/null +++ b/mods/atmos_ret_field/_atm_ret_field.dme @@ -0,0 +1,7 @@ +#ifndef MODPACK_ATM_RET_FIELD +#define MODPACK_ATM_RET_FIELD + +#include "_atm_ret_field.dm" +#include "code/atmospheric_retention_field.dm" + +#endif diff --git a/mods/atmos_ret_field/code/atmospheric_retention_field.dm b/mods/atmos_ret_field/code/atmospheric_retention_field.dm new file mode 100644 index 0000000000000..807620ebaabef --- /dev/null +++ b/mods/atmos_ret_field/code/atmospheric_retention_field.dm @@ -0,0 +1,254 @@ +// Activate all retention fields! +/area/proc/arfgs_activate() + if(!arfgs_active) + arfgs_active = TRUE + if(!all_arfgs) + return + for(var/obj/machinery/atmospheric_field_generator/E in all_arfgs) + E.generate_field() //don't need to check powered state like doors, the arfgs handles it on its end + E.wasactive = TRUE + +// Deactivate retention fields! +/area/proc/arfgs_deactivate() + if(arfgs_active) + arfgs_active = FALSE + if(!all_arfgs) + return + for(var/obj/machinery/atmospheric_field_generator/E in all_arfgs) + E.disable_field() + E.wasactive = FALSE + + +/obj/machinery/atmospheric_field_generator + name = "atmospheric retention field generator" + desc = "A floor-mounted piece of equipment that generates an atmosphere-retaining energy field when powered and activated. Linked to environmental alarm systems and will automatically activate when hazardous conditions are detected.

    Note: prolonged immersion in active atmospheric retention fields may have negative long-term health consequences." + icon = 'mods/atmos_ret_field/icons/atm_fieldgen.dmi' + icon_state = "arfg_off" + anchored = TRUE + opacity = FALSE + density = FALSE + power_channel = ENVIRON //so they shut off last + use_power = POWER_USE_IDLE + idle_power_usage = 10 + active_power_usage = 2500 + var/ispowered = TRUE + var/isactive = FALSE + var/wasactive = FALSE //controls automatic reboot after power-loss + var/alwaysactive = FALSE //for a special subtype + + //how long it takes us to reboot if we're shut down by an EMP + var/reboot_delay_min = 50 + var/reboot_delay_max = 75 + + var/hatch_open = FALSE + var/wires_intact = TRUE + var/list/areas_added + var/field_type = /obj/structure/atmospheric_retention_field + +/obj/machinery/atmospheric_field_generator/impassable + desc = "An older model of ARF-G that generates an impassable retention field. Works just as well as the modern variety, but is slightly more energy-efficient.

    Note: prolonged immersion in active atmospheric retention fields may have negative long-term health consequences." + active_power_usage = 2000 + field_type = /obj/structure/atmospheric_retention_field/impassable + +/obj/machinery/atmospheric_field_generator/perma + name = "static atmospheric retention field generator" + desc = "A floor-mounted piece of equipment that generates an atmosphere-retaining energy field when powered and activated. This model is designed to always be active, though the field will still drop from loss of power or electromagnetic interference.

    Note: prolonged immersion in active atmospheric retention fields may have negative long-term health consequences." + alwaysactive = TRUE + active_power_usage = 2000 + +/obj/machinery/atmospheric_field_generator/perma/impassable + active_power_usage = 1500 + field_type = /obj/structure/atmospheric_retention_field/impassable + +/obj/machinery/atmospheric_field_generator/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(isactive) + USE_FEEDBACK_FAILURE("You can't open the ARF-G whilst it's running!") + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + to_chat(user, SPAN_NOTICE("You [hatch_open? "close" : "open"] [src]'s access hatch.")) + hatch_open = !hatch_open + update_icon() + if(alwaysactive && wires_intact) + generate_field() + +/obj/machinery/atmospheric_field_generator/multitool_act(mob/living/user, obj/item/tool) + if(!hatch_open) + return + . = ITEM_INTERACT_SUCCESS + to_chat(user, SPAN_NOTICE("You toggle [src]'s activation behavior to [alwaysactive? "emergency" : "always-on"].")) + alwaysactive = !alwaysactive + update_icon() + +/obj/machinery/atmospheric_field_generator/wirecutter_act(mob/living/user, obj/item/tool) + if(!hatch_open) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + to_chat(user, SPAN_WARNING("You [wires_intact? "cut" : "mend"] [src]'s wires!")) + wires_intact = !wires_intact + update_icon() + +/obj/machinery/atmospheric_field_generator/welder_act(mob/living/user, obj/item/tool) + if(!hatch_open) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.tool_start_check(user, 5)) + return + USE_FEEDBACK_DECONSTRUCT_START(user) + if(!tool.use_as_tool(src, user, 2 SECONDS, 5, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message("[user] disassembles [src].", "You disassemble [src].") + qdel(src) + +/obj/machinery/atmospheric_field_generator/perma/Initialize() + . = ..() + generate_field() + +/obj/machinery/atmospheric_field_generator/on_update_icon() + if(MACHINE_IS_BROKEN(src)) + icon_state = "arfg_broken" + else if(hatch_open && wires_intact) + icon_state = "arfg_open_wires" + else if(hatch_open && !wires_intact) + icon_state = "arfg_open_wirescut" + else if(isactive) + icon_state = "arfg_on" + else + icon_state = "arfg_off" + +/obj/machinery/atmospheric_field_generator/power_change() + var/oldstat + ..() + if(!(stat & MACHINE_STAT_NOPOWER)) + ispowered = 1 + update_icon() + if(alwaysactive || wasactive) //reboot our field if we were on or are supposed to be always-on + generate_field() + if(stat != oldstat && isactive && (stat & MACHINE_STAT_NOPOWER)) + ispowered = 0 + disable_field() + update_icon() + +/obj/machinery/atmospheric_field_generator/emp_act() + . = ..() + disable_field() //shutting dowwwwwwn + if(alwaysactive || wasactive) //reboot after a short delay if we were online before + spawn(rand(reboot_delay_min,reboot_delay_max)) + generate_field() + +/obj/machinery/atmospheric_field_generator/ex_act(severity) + switch(severity) + if(1) + disable_field() + qdel(src) + return + if(2) + set_broken(TRUE) + update_icon() + src.visible_message("The ARF-G cracks and shatters!","You hear an uncomfortable metallic crunch.") + disable_field() + if(3) + emp_act() + return + +/obj/machinery/atmospheric_field_generator/proc/generate_field() + if(!ispowered || hatch_open || !wires_intact || isactive) //if it's not powered, the hatch is open, the wires are busted, or it's already on, don't do anything + return + else + isactive = 1 + icon_state = "arfg_on" + new field_type (src.loc) + src.visible_message("The ARF-G crackles to life!","You hear an ARF-G coming online!") + update_use_power(POWER_USE_ACTIVE) + return + +/obj/machinery/atmospheric_field_generator/proc/disable_field() + if(isactive) + icon_state = "arfg_off" + for(var/obj/structure/atmospheric_retention_field/F in loc) + qdel(F) + src.visible_message("The ARF-G shuts down with a low hum.","You hear an ARF-G powering down.") + update_use_power(POWER_USE_IDLE) + isactive = 0 + return + +/obj/machinery/atmospheric_field_generator/Initialize() + . = ..() + //Delete ourselves if we find extra mapped in arfgs + for(var/obj/machinery/atmospheric_field_generator/F in loc) + if(F != src) + log_debug("Duplicate ARFGS at [x],[y],[z]") + return INITIALIZE_HINT_QDEL + + var/area/A = get_area(src) + ASSERT(istype(A)) + + LAZYADD(A.all_arfgs, src) + areas_added = list(A) + + for(var/direction in GLOB.cardinal) + A = get_area(get_step(src,direction)) + if(istype(A) && !(A in areas_added)) + LAZYADD(A.all_arfgs, src) + areas_added += A + +/obj/structure/atmospheric_retention_field + name = "atmospheric retention field" + desc = "A shimmering forcefield that keeps the good air inside and the bad air outside. This field has been modulated so that it doesn't impede movement or projectiles.

    Note: prolonged immersion in active atmospheric retention fields may have negative long-term health consequences." + icon = 'mods/atmos_ret_field/icons/atm_fieldgen.dmi' + icon_state = "arfg_field" + anchored = TRUE + density = FALSE + opacity = 0 + layer = BASE_HUMAN_LAYER + atmos_canpass = CANPASS_NEVER + var/basestate = "arfg_field" + + light_range = 13 + light_power = 2 + light_color = "#ffffff" + +/obj/structure/atmospheric_retention_field/on_update_icon() + ClearOverlays() + var/list/dirs = list() + for(var/obj/structure/atmospheric_retention_field/F in orange(src,1)) + dirs += get_dir(src, F) + + var/list/connections = dirs_to_corner_states(dirs) + + icon_state = "" + for(var/i = 1 to 4) + var/image/I = image(icon, "[basestate][connections[i]]", dir = SHIFTL(1, i-1)) + AddOverlays(I) + + return + +/obj/structure/atmospheric_retention_field/Initialize() + . = ..() + update_nearby_tiles() //Force ZAS update + update_connections(1) + update_icon() + +/obj/structure/atmospheric_retention_field/Destroy() + for(var/obj/structure/atmospheric_retention_field/W in orange(1, src.loc)) + W.update_connections(1) + update_nearby_tiles() //Force ZAS update + . = ..() + +/obj/structure/atmospheric_retention_field/attack_hand(mob/user as mob) + if(density) + visible_message("You touch the retention field, and it crackles faintly. Tingly!") + else + visible_message("You try to touch the retention field, but pass through it like it isn't even there.") + +/obj/structure/atmospheric_retention_field/ex_act() + return + +/obj/structure/atmospheric_retention_field/impassable + desc = "A shimmering forcefield that keeps the good air inside and the bad air outside. It seems fairly solid, almost like it's made out of some kind of hardened light.

    Note: prolonged immersion in active atmospheric retention fields may have negative long-term health consequences." + icon = 'mods/atmos_ret_field/icons/atm_fieldgen.dmi' + icon_state = "arfg_field" + density = TRUE diff --git a/mods/atmos_ret_field/icons/atm_fieldgen.dmi b/mods/atmos_ret_field/icons/atm_fieldgen.dmi new file mode 100644 index 0000000000000..0c30371196aa4 Binary files /dev/null and b/mods/atmos_ret_field/icons/atm_fieldgen.dmi differ diff --git a/mods/bluespace_kitty/_bluespace_kitty.dm b/mods/bluespace_kitty/_bluespace_kitty.dm new file mode 100644 index 0000000000000..e6f596760b7d4 --- /dev/null +++ b/mods/bluespace_kitty/_bluespace_kitty.dm @@ -0,0 +1,3 @@ +/singleton/modpack/real_runtime + name = "Real runtime" + desc = "Блюспейс кот Трейси. Может появится в нашей реальности только при ошибке в матрице, в которой мы живем." diff --git a/mods/bluespace_kitty/_bluespace_kitty.dme b/mods/bluespace_kitty/_bluespace_kitty.dme new file mode 100644 index 0000000000000..a231edb37ed4f --- /dev/null +++ b/mods/bluespace_kitty/_bluespace_kitty.dme @@ -0,0 +1,7 @@ +#ifndef MODPACK_BLUESPACECAT +#define MODPACK_BLUESPACECAT + +#include "_bluespace_kitty.dm" +#include "code/bluespace_kitty.dm" + +#endif diff --git a/mods/bluespace_kitty/code/bluespace_kitty.dm b/mods/bluespace_kitty/code/bluespace_kitty.dm new file mode 100644 index 0000000000000..4d275082358bd --- /dev/null +++ b/mods/bluespace_kitty/code/bluespace_kitty.dm @@ -0,0 +1,130 @@ +#define CAT_COOLDOWN 20 SECONDS +#define CAT_MAX_NUMBER 10 + +/world/Error(exception/E) + + if(!istype(E)) //Something threw an unusual exception + return ..() + + if(GAME_STATE < RUNLEVEL_GAME) + return ..() + + if(istype(usr)) + // Create a Tracy at the runtime location + var/static/cat_teleport = 0.0 + if(usr.loc && prob(10) && (world.time - cat_teleport > CAT_COOLDOWN) && (cat_number < CAT_MAX_NUMBER)) // Avoid runtime spam spawning lots of Tracy + new /mob/living/simple_animal/passive/cat/real_runtime(get_turf(usr), E.file, E.line) + cat_teleport = world.time + + return ..() + +/obj/temp_visual/pulse + icon ='icons/effects/effects.dmi' + icon_state = "emppulse" + duration = 10 + +/obj/temp_visual/sparkles + icon = 'icons/effects/effects.dmi' + icon_state = "shieldsparkles" + duration = 8 + +// Real runtime cat +var/global/cat_number = 0 +/mob/living/simple_animal/passive/cat/real_runtime + name = "Tracy" + desc = "Мурлыкающая жертва экспериментов. Пробирается в наше измерение, когда сама вуаль реальности разрывается на части." + icon = 'mods/bluespace_kitty/icons/runtimecat.dmi' + icon_state = "runtimecat" + density = FALSE + universal_speak = TRUE + + a_intent = I_HURT + + status_flags = GODMODE // Bluespace cat + min_oxy = 0 + minbodytemp = 0 + maxbodytemp = INFINITY + + attacktext = "slashed" + attack_sound = 'sound/weapons/bladeslice.ogg' + + var/const/cat_life_duration = 25 SECONDS + + +/mob/living/simple_animal/passive/cat/real_runtime/Initialize(mapload, runtime_file, runtime_line) + . = ..() + cat_number += 1 + playsound(loc, 'sound/magic/blink.ogg', 50) + new /obj/temp_visual/pulse(loc) + new /obj/temp_visual/sparkles(loc) + + addtimer(CALLBACK(src, PROC_REF(back_to_bluespace)), cat_life_duration) + addtimer(CALLBACK(src, PROC_REF(say_runtime), runtime_file, runtime_line), 5 SECONDS) + + for(var/i in rand(1, 3)) + step(src, pick(GLOB.alldirs)) + +/mob/living/simple_animal/passive/cat/real_runtime/post_use_item(obj/item/O, interaction_handled, use_call, mob/living/user) + . = ..() + if(interaction_handled) + visible_message(SPAN_DANGER("[user]'s [O.name] harmlessly passes through \the [src].")) + strike_back(user) + + +// It's easier to do this than to climb into a combos +/mob/living/simple_animal/passive/cat/real_runtime/attack_hand(mob/living/carbon/human/M) + switch(M.a_intent) + + if(I_HELP) + M.visible_message(SPAN_NOTICE("[M] pets \the [src].")) + + if(I_DISARM) + M.visible_message(SPAN_NOTICE("[M]'s hand passes through \the [src].")) + M.do_attack_animation(src) + + if(I_GRAB) + if(M == src) + return + if(!(status_flags & CANPUSH)) + return + + M.visible_message(SPAN_NOTICE("[M]'s hand passes through \the [src].")) + M.do_attack_animation(src) + + if(I_HURT) + M.visible_message(SPAN_WARNING("[M] tries to kick \the [src] but [M.gender == FEMALE ? "her" : "his"] foot passes through.")) + M.do_attack_animation(src) + visible_message(SPAN_WARNING("\The [src] hisses.")) + strike_back(M) + +/mob/living/simple_animal/passive/cat/real_runtime/proc/say_runtime(runtime_file, runtime_line) + if(!runtime_file || !runtime_line) + return + + var/filename = copytext(runtime_file, 1, findtext(runtime_file, ".")) + say("\"Зафиксирована аномалия \"[filename]-[runtime_line]\"!\"") + sleep(2 SECONDS) + say("\"Пожалуйста, отойдите подальше!\"") + +/mob/living/simple_animal/passive/cat/real_runtime/proc/back_to_bluespace() + playsound(loc, 'sound/magic/blink.ogg', 50) + new /obj/temp_visual/pulse(loc) + new /obj/temp_visual/sparkles(loc) + qdel(src) + +/mob/living/simple_animal/passive/cat/real_runtime/proc/strike_back(mob/living/target_mob) + if(!Adjacent(target_mob)) + return + target_mob.attack_generic(src) + +/mob/living/simple_animal/passive/cat/real_runtime/bullet_act(obj/item/projectile/proj) + return PROJECTILE_FORCE_MISS + +/mob/living/simple_animal/passive/cat/real_runtime/ex_act(severity) + return + +/mob/living/simple_animal/passive/cat/real_runtime/singularity_act() + return + +/mob/living/simple_animal/passive/cat/real_runtime/MouseDrop(atom/over_object) + return diff --git a/mods/bluespace_kitty/icons/runtimecat.dmi b/mods/bluespace_kitty/icons/runtimecat.dmi new file mode 100644 index 0000000000000..7c5f35e6cfdf3 Binary files /dev/null and b/mods/bluespace_kitty/icons/runtimecat.dmi differ diff --git a/mods/body_markings/README.md b/mods/body_markings/README.md new file mode 100644 index 0000000000000..2cb71b1c9892f --- /dev/null +++ b/mods/body_markings/README.md @@ -0,0 +1,77 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1101 + + + +## Нательные метки + +ID мода: BODY_MARKINGS + + +### Описание мода + +Включает в себя разнообразие различных нательных меток. + + +### Изменения *кор кода* + +- Отсутствуют + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +Wolfor By Kot, SuhEugene + diff --git a/mods/body_markings/_body_markings.dm b/mods/body_markings/_body_markings.dm new file mode 100644 index 0000000000000..57ce1a8c967c3 --- /dev/null +++ b/mods/body_markings/_body_markings.dm @@ -0,0 +1,4 @@ +/singleton/modpack/body_markings + name = "Нательные метки" + desc = "Включает в себя разнообразие различных нательных меток." + author = "Wolfor By Kot, SuhEugene" diff --git a/mods/body_markings/_body_markings.dme b/mods/body_markings/_body_markings.dme new file mode 100644 index 0000000000000..e4a4c05353ae6 --- /dev/null +++ b/mods/body_markings/_body_markings.dme @@ -0,0 +1,7 @@ +#ifndef MODPACK_BODY_MARKINGS +#define MODPACK_BODY_MARKINGS + +#include "_body_markings.dm" +#include "code/body_markings.dm" + +#endif diff --git a/mods/body_markings/code/body_markings.dm b/mods/body_markings/code/body_markings.dm new file mode 100644 index 0000000000000..202d5eaa78869 --- /dev/null +++ b/mods/body_markings/code/body_markings.dm @@ -0,0 +1,133 @@ +/datum/sprite_accessory/marking/modpack_body_markings + do_coloration = DO_COLORATION_AUTO // На случай если оффы дефолтный изменят + icon = 'mods/body_markings/icons/body_markings.dmi' + use_organ_tag = FALSE + + +/datum/sprite_accessory/marking/modpack_body_markings/heterochromia + name = "Heterochromia" + icon_state = "heterochromia" + do_coloration = DO_COLORATION_USER + body_parts = list(BP_HEAD) + species_allowed = list(SPECIES_HUMAN, SPECIES_TAJARA) + +/datum/sprite_accessory/marking/modpack_body_markings/greatbrows + name = "Greatbrows" + icon_state = "greatbrows" + draw_target = MARKING_TARGET_HEAD + body_parts = list(BP_HEAD) + species_allowed = list(SPECIES_HUMAN, SPECIES_TAJARA) + + +// HUMAN / SKRELL / TAJARA + +/datum/sprite_accessory/marking/modpack_body_markings/humanlike + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJARA) + + +/datum/sprite_accessory/marking/modpack_body_markings/humanlike/tonage_chest + name = "Tonage 1 (Masculine)" + icon_state = "tonage_chest" + do_coloration = DO_COLORATION_USER + body_parts = list(BP_CHEST) + disallows = list(/datum/sprite_accessory/marking/modpack_body_markings/humanlike/tonage_chest) + +/datum/sprite_accessory/marking/modpack_body_markings/humanlike/tonage_chest/feminine + name = "Tonage 1 (Feminine)" + icon_state = "tonage_chest_f" + +/datum/sprite_accessory/marking/modpack_body_markings/humanlike/tonage_chest/two + name = "Tonage 2 (Masculine)" + icon_state = "tonage_chest2" + +/datum/sprite_accessory/marking/modpack_body_markings/humanlike/tonage_chest/two/feminine + name = "Tonage 2 (Feminine)" + icon_state = "tonage_chest2_f" + + +/datum/sprite_accessory/marking/modpack_body_markings/humanlike/burnface_right + name = "Burnface (severe, right)" + icon_state = "burnface_right" + do_coloration = DO_COLORATION_SKIN + body_parts = list(BP_HEAD) + disallows = list(/datum/sprite_accessory/marking/modpack_body_markings/humanlike/burnface_right) + +/datum/sprite_accessory/marking/modpack_body_markings/humanlike/burnface_right/slight + name = "Burnface (slight, right)" + icon_state = "fburnface_right" + + +/datum/sprite_accessory/marking/modpack_body_markings/humanlike/burnface_left + name = "Burnface (severe, left)" + icon_state = "burnface_left" + do_coloration = DO_COLORATION_SKIN + body_parts = list(BP_HEAD) + disallows = list(/datum/sprite_accessory/marking/modpack_body_markings/humanlike/burnface_left) + +/datum/sprite_accessory/marking/modpack_body_markings/humanlike/burnface_left/slight + name = "Burnface (slight, left)" + icon_state = "fburnface_left" + + +/datum/sprite_accessory/marking/modpack_body_markings/humanlike/scar + name = "Scar (Large)" + icon_state = "scar1" + do_coloration = DO_COLORATION_SKIN + body_parts = list(BP_HEAD) + disallows = list(/datum/sprite_accessory/marking/modpack_body_markings/humanlike/scar) + +/datum/sprite_accessory/marking/modpack_body_markings/humanlike/scar/small + name = "Scar (Small)" + icon_state = "scar2" + + +// HUMAN ONLY + +/datum/sprite_accessory/marking/modpack_body_markings + species_allowed = list(SPECIES_HUMAN) + icon = 'mods/body_markings/icons/body_markings.dmi' + +/datum/sprite_accessory/marking/modpack_body_markings/human/tonage_chest3 + name = "Tonage 3 (Masculine)" + icon_state = "h_tonage_chest3" + do_coloration = DO_COLORATION_SKIN + body_parts = list(BP_CHEST) + disallows = list( + /datum/sprite_accessory/marking/modpack_body_markings/humanlike/tonage_chest, + /datum/sprite_accessory/marking/modpack_body_markings/human/tonage_chest3 + ) + +/datum/sprite_accessory/marking/modpack_body_markings/human/tonage_chest3/femenine + name = "Tonage 3 (Feminine)" + icon_state = "h_tonage_chest3_f" + + +/datum/sprite_accessory/marking/modpack_body_markings/human/bodyhair + name = "Body hair" + icon_state = "h_bodyhair" + do_coloration = DO_COLORATION_USER + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/modpack_body_markings/human/brows_head + name = "Brows" + icon_state = "brows_head" + draw_target = MARKING_TARGET_HEAD + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/modpack_body_markings/human/eyeshade + name = "Eyeshade" + icon_state = "eyeshade" + do_coloration = DO_COLORATION_USER + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/modpack_body_markings/human/blush + name = "Blush" + icon_state = "blush" + do_coloration = FALSE + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/modpack_body_markings/human/eyeshadow + name = "Eyeshadow" + icon_state = "eyeshadow" + do_coloration = DO_COLORATION_USER + body_parts = list(BP_HEAD) diff --git a/mods/body_markings/icons/body_markings.dmi b/mods/body_markings/icons/body_markings.dmi new file mode 100644 index 0000000000000..d5661dab7956c Binary files /dev/null and b/mods/body_markings/icons/body_markings.dmi differ diff --git a/mods/client_verbs/README.md b/mods/client_verbs/README.md new file mode 100644 index 0000000000000..c91d6ecf4f7fb --- /dev/null +++ b/mods/client_verbs/README.md @@ -0,0 +1,78 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1103 +- https://github.com/SierraBay/SierraBay12/pull/1798 + + + +## Client verbs + +ID мода: CLIENT_VERBS + + +### Описание мода + +Добавляет различного рода возможности в виде кнопок в правом меню. + + +### Изменения *кор кода* + +- `code/modules/admin/admin_verbs.dm`: `var/global/list/admin_verbs_spawn` + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +SuhEugene + diff --git a/mods/client_verbs/_client_verbs.dm b/mods/client_verbs/_client_verbs.dm new file mode 100644 index 0000000000000..f462d79093e7c --- /dev/null +++ b/mods/client_verbs/_client_verbs.dm @@ -0,0 +1,4 @@ +/singleton/modpack/client_verbs + name = "Client verbs" + desc = "Добавляет различного рода возможности в виде кнопок в правом меню." + author = "SuhEugene" diff --git a/mods/client_verbs/_client_verbs.dme b/mods/client_verbs/_client_verbs.dme new file mode 100644 index 0000000000000..805223e958178 --- /dev/null +++ b/mods/client_verbs/_client_verbs.dme @@ -0,0 +1,13 @@ +#ifndef MODPACK_CLIENT_VERBS +#define MODPACK_CLIENT_VERBS + +#include "_client_verbs.dm" + +#include "code/credits.dm" +#include "code/set_respawn_timer.dm" +#include "code/get_server_logs.dm" +#include "code/respawn_as_human.dm" +#include "code/skin_dmf.dm" +#include "code/sendbacktolobby.dm" + +#endif diff --git a/mods/client_verbs/code/credits.dm b/mods/client_verbs/code/credits.dm new file mode 100644 index 0000000000000..a8bd424350da9 --- /dev/null +++ b/mods/client_verbs/code/credits.dm @@ -0,0 +1,73 @@ +/client/verb/credits() + set name = "Credits" + set category = "OOC" + + var/static/credits_users = list() + var/datum/tgui_module/credits/credits = credits_users[usr] + if(!credits) + credits = new(src) + credits_users[usr] = credits + credits.tgui_interact(usr) + +/datum/tgui_module/credits + name = "Авторы" + +/datum/tgui_module/credits/tgui_state(mob/user) + return GLOB.tgui_always_state + +/datum/tgui_module/credits/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Credits", name) + ui.set_autoupdate(FALSE) + ui.open() + +/datum/tgui_module/credits/tgui_static_data(mob/user) + var/list/data = list() + + var/list/credits = list() + var/credit_singletons = GET_SINGLETON_SUBTYPE_MAP(/singleton/credits) + for(var/singleton_type in credit_singletons) + var/singleton/credits/build = credit_singletons[singleton_type] + credits += list(list( + "name" = build.name, + "coders" = build.coders, + "mappers" = build.mappers, + "spriters" = build.spriters, + "ui_designers" = build.ui_designers, + "special" = build.special, + "linkContributors" = build.contributors, + )) + data["credits"] = credits + + return data + +/datum/tgui_module/credits/tgui_act(action, list/params) + if(..()) + return + . = FALSE + + switch(action) + if("openContributors") + var/buildPage = params["buildPage"] + var/buildName = params["buildName"] + if(tgui_alert(usr, "Это откроет страницу с контрибьюторами проекта [buildName]. Вы уверены?", "Контрибьютеры", list("Да", "Нет")) != "Да") + return + var/url = "[buildPage]" + to_target(usr, link(url)) + return TRUE + if("openGitHub") + if(tgui_alert(usr, "Это откроет страницу нашего GitHub. Вы уверены?", "GitHub", list("Да", "Нет")) != "Да") + return + to_target(usr, link("https://github.com/ss220club/WyccerraBay220")) + return TRUE + if("openWiki") + if(tgui_alert(usr, "Это откроет страницу с нашей вики. Вы уверены?", "Wiki", list("Да", "Нет")) != "Да") + return + to_target(usr, link("https://sierra.ss220.club")) + return TRUE + if("openDiscord") + if(tgui_alert(usr, "Это откроет страницу с ссылкой на приглашение в наш дискорд. Вы уверены?", "Discord", list("Да", "Нет")) != "Да") + return + to_target(usr, link("https://discord.gg/ss220")) + return TRUE diff --git a/mods/client_verbs/code/credits_datums.dm b/mods/client_verbs/code/credits_datums.dm new file mode 100644 index 0000000000000..abc1456742a1b --- /dev/null +++ b/mods/client_verbs/code/credits_datums.dm @@ -0,0 +1,64 @@ +/singleton/credits + var/name = "Sierra SS13" + var/list/coders + var/list/mappers + var/list/spriters + var/list/ui_designers + var/list/special + var/contributors + +/singleton/credits/wyccerrabay + name = "WyccerraBay (SS220)" + coders = list("Gaxeer", "awkwardlyconfusedneuralnetwork", "Larentoun", "Furior", "Legendaxe") + mappers = list("LordNest") + ui_designers = list("Aylong") + contributors = "https://github.com/ss220club/WyccerraBay220/graphs/contributors" + +/singleton/credits/sierrabay + name = "SierraBay (EX666)" + coders = list("awkwardlyconfusedneuralnetwork", "CuddleAndTea", "LordNest", "SuhEugene") + mappers = list("KandJX") + spriters = list("Remission") + contributors = "https://github.com/SierraBay/SierraBay12/graphs/contributors" + +/singleton/credits/infinity + name = "Infinity Station" + coders = list( + "quardbreak", "FireFlashie", "KaReTa", "Sladkoeshka", "Coltrane97", "S.Konoplich", + "Gverdy", "Dexofan", "Ducky", "bear1ake", "TermService", "SeasoneWolf", "RuCat", + "Violentfire", "FirstTea", "Aphimag", "Forrya", "Ivan-P", "Slayer", "Archibald125", + "KuzyXD", "RedKnightHero", "Cre77", "YourBro", "Terror4000rus", "Builder13", "Logfol", + "Not_A_User", "Sosiskoed", "Courierr", "FurryDog", "Sarumyn", "Kosteg", "Liners", + "Elar", "Laxesh", "SolarK", "SmartKar" + ) + mappers = list("Neterson", "SanecMan", "XSareth", "Max750rus", "DieSiege") + spriters = list( + "Temblrex", "Kettenhund", "TwinInDifferent", "Vsrneji", "Krupks2017", "Marionetka", + "Rarytech", "Surman", "Nymary", "Chowny", "Zorghol" + ) + contributors = "https://github.com/infinitystation/Baystation12/graphs/contributors" + +/singleton/credits/baystation + name = "Baystation 12" + coders = list( + "CrimsonShrike", "MuckerMayhem", "PsiOmegaDelta", "SierraKomodo", "afterthought", "chinsky", + "F-Tang Steve", "mloc", "xales" + ) + special = list( + "Abi79", "Apple_Master", "Arcalane", "Aryn", "babydoll", "Cael_Aislinn", "Ccomp5950", + "chinsky", "CompactNinja", "Deus Dactyl", "DopeGhoti", "Erthilo", "Flashkirby", "Hawk_v3", + "Head", "Ipsil", "Invisty", "JoeyJo0", "Lexusjjss", "Melonstorm", "Miniature", "Zuhayr", + "mloc", "NerdyBoy1104", "PsiOmegaDelta", "Searif", "SkyMarshal", "Snapshot", "Spectre", + "Strumpetplaya", "Sunfall", "Tastyfish", "Uristqwerty", "Xenone", "cib", "faux" + ) + contributors = "https://github.com/Baystation12/Baystation12/graphs/contributors" + +/singleton/credits/goonstation + name = "GoonStation 13" + coders = list( + "Stuntwaffle", "Showtime", "Pantaloons", "Nannek", "Keelin", "Exadv1", "hobnob", + "Justicefries", "0staf", "sniperchance", "AngriestIBM", "BrianOBlivion" + ) + spriters = list( + "Supernorn", "Haruhi", "Stuntwaffle", "Pantaloons", "Rho", "SynthOrange", "I Said No" + ) diff --git a/mods/client_verbs/code/get_server_logs.dm b/mods/client_verbs/code/get_server_logs.dm new file mode 100644 index 0000000000000..25ef04aa47fd7 --- /dev/null +++ b/mods/client_verbs/code/get_server_logs.dm @@ -0,0 +1,65 @@ +/client/proc/getserverlog() + set name = "Get Server Logs" + set desc = "Fetch logfiles from data/logs" + set category = "Admin" + + if(!check_rights(R_ADMIN)) + return + + var/path = browse_files("data/logs/") + if(!path) + return + + if(file_spam_check()) + return + + message_admins("[key_name_admin(src)] accessed file: [path]") + log_admin("[key_name_admin(src)] accessed file: [path]") + to_target(src, ftp(file(path))) + to_chat(src, "Attempting to send file, this may take a fair few minutes if the file is very large.") + return + +// FILE BROWSING THINGS +/client/proc/browse_files(root="data/logs/", max_iterations=10, list/valid_extensions=list(".txt",".log",".htm")) + var/path = root + + for(var/i=0, iError: browse_files(): File not found/Invalid file([path]).") + return + + return path + + +#define FTPDELAY 200 //200 tick delay to discourage spam +/* This proc is a failsafe to prevent spamming of file requests. + It is just a timer that only permits a download every [FTPDELAY] ticks. + This can be changed by modifying FTPDELAY's value above. + + PLEASE USE RESPONSIBLY, Some log files canr each sizes of 4MB! */ +var/global/fileaccess_timer = 0 +/client/proc/file_spam_check() + var/time_to_wait = fileaccess_timer - world.time + if(time_to_wait > 0) + to_chat(src, "Error: file_spam_check(): Spam. Please wait [round(time_to_wait/10)] seconds.") + return 1 + fileaccess_timer = world.time + FTPDELAY + return 0 +#undef FTPDELAY diff --git a/mods/client_verbs/code/respawn_as_human.dm b/mods/client_verbs/code/respawn_as_human.dm new file mode 100644 index 0000000000000..1ebe232804da0 --- /dev/null +++ b/mods/client_verbs/code/respawn_as_human.dm @@ -0,0 +1,35 @@ +/client/proc/respawn_as_self() + set name = "Respawn as Current Character" + set desc = "Respawn instantly with currenly loaded character on place." + set category = "Special Verbs" + + if(!check_rights(R_SPAWN)) + return + + var/input = ckey(input(src, "Specify which key will be respawned as their character.", "Respawn as Current Character", "[usr.ckey]") as text) + if(!input || input == "Cancel") + return + + var/client/C + for(var/client/find in GLOB.clients) + if(find.ckey == input) + C = find + break + + if(!C) + to_chat(usr, SPAN_WARNING("There is no active key like that in the game or the person is not currently a ghost.")) + return + + if(isnewplayer(C.mob)) + to_chat(usr, SPAN_WARNING("You can't use this on a new player.")) + return + + if(!C.prefs) + to_chat(usr, SPAN_WARNING("No preferences or client found.")) + return + + var/mob/oldmob = C.mob + var/mob/living/carbon/human/H = new(oldmob.loc) + C.prefs.copy_to(H) + H.key = C.key + qdel(oldmob) diff --git a/mods/client_verbs/code/sendbacktolobby.dm b/mods/client_verbs/code/sendbacktolobby.dm new file mode 100644 index 0000000000000..4fb42d7abb5c9 --- /dev/null +++ b/mods/client_verbs/code/sendbacktolobby.dm @@ -0,0 +1,26 @@ + +/datum/admins/Topic(href, href_list) + . = ..() + if(href_list["sendbacktolobby"]) + if(!check_rights(R_ADMIN)) + return + + var/mob/M = locate(href_list["sendbacktolobby"]) + + if(!isobserver(M)) + to_chat(usr, "You can only send ghost players back to the Lobby.") + return + + if(!M.client) + to_chat(usr, "[M] doesn't seem to have an active client.") + return + + if(alert(usr, "Send [key_name(M)] back to Lobby?", "Message", "Yes", "No") != "Yes") + return + + log_admin("[key_name(usr)] has sent [key_name(M)] back to the Lobby.") + message_admins("[key_name(usr)] has sent [key_name(M)] back to the Lobby.") + + var/mob/new_player/NP = new() + NP.ckey = M.ckey + qdel(M) diff --git a/mods/client_verbs/code/set_respawn_timer.dm b/mods/client_verbs/code/set_respawn_timer.dm new file mode 100644 index 0000000000000..fec531f7ddee1 --- /dev/null +++ b/mods/client_verbs/code/set_respawn_timer.dm @@ -0,0 +1,12 @@ +/datum/admins/proc/set_respawn_timer() + set name = "Set Respawn Timer" + set category = "Server" + + if(!check_rights(R_ADMIN)) + return + + var/delay = input(usr, "Enter new respawn delays in minutes", "Respawn timer configuration") as null|num + if(!isnull(delay)) + delay = clamp(delay, 0, INFINITY) + config.respawn_delay = delay + log_and_message_admins("changed respawn delay to [delay] minutes.") diff --git a/mods/client_verbs/code/skin_dmf.dm b/mods/client_verbs/code/skin_dmf.dm new file mode 100644 index 0000000000000..d0bf57382aa69 --- /dev/null +++ b/mods/client_verbs/code/skin_dmf.dm @@ -0,0 +1,3 @@ +/client/verb/onresize() + set hidden = TRUE + fit_viewport() diff --git a/mods/don_loadout/README.md b/mods/don_loadout/README.md new file mode 100644 index 0000000000000..3b3c17d6666f1 --- /dev/null +++ b/mods/don_loadout/README.md @@ -0,0 +1,94 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/892 +- https://github.com/SierraBay/SierraBay12/pull/1738 + + + +## Донатный лодаут + +ID мода: DON_LOADOUT + + +### Описание мода + +Содержит запрос к БД насчёт статуса, привязывается к экосистеме SS220. + +Изменения лодаутных вещей лучше делать в этом моде, чтобы всё было в одном месте. + + +### Изменения *кор кода* + +- `code/modules/client/preference_setup/general/05_preview.dm`: `/datum/preferences/proc/dress_preview_mob()` +- `code/datums/communication/ooc.dm`: `/singleton/communication_channel/ooc/do_communicate()` + + +### Оверрайды + +- Тонна. Внутри мода в папке `loadout`. + + +### Дефайны + +- `code/__defines/~mods/~master_defines.dm`: + - `DONATION_TIER_NONE` + - `DONATION_TIER_ONE` + - `DONATION_TIER_TWO` + - `DONATION_TIER_THREE` + - `DONATION_TIER_FOUR` + - `DONATION_TIER_ADMIN` + - `DONATION_TIER_ONE_SUM` + - `DONATION_TIER_TWO_SUM` + - `DONATION_TIER_THREE_SUM` + - `DONATION_TIER_FOUR_SUM` + - `DONATION_TIER_ALL_TIERS` + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +SuhEugene + +Своровано с [OnyxBay](https://github.com/ChaoticOnyx/OnyxBay). + diff --git a/mods/don_loadout/_don_loadout.dm b/mods/don_loadout/_don_loadout.dm new file mode 100644 index 0000000000000..fbb2a3690bd9f --- /dev/null +++ b/mods/don_loadout/_don_loadout.dm @@ -0,0 +1,3 @@ +/singleton/modpack/don_loadout + name = "Loadout with donations" + author = "SuhEugene" diff --git a/mods/don_loadout/_don_loadout.dme b/mods/don_loadout/_don_loadout.dme new file mode 100644 index 0000000000000..ed2e0883c568f --- /dev/null +++ b/mods/don_loadout/_don_loadout.dme @@ -0,0 +1,8 @@ +#ifndef MODPACK_DON_LOADOUT +#define MODPACK_DON_LOADOUT + +#include "_don_loadout.dm" + +#include "code/donations/donations.dm" +#include "code/donations/donator.dm" +#endif diff --git a/mods/don_loadout/code/donations/donations.dm b/mods/don_loadout/code/donations/donations.dm new file mode 100644 index 0000000000000..9d1fe85255658 --- /dev/null +++ b/mods/don_loadout/code/donations/donations.dm @@ -0,0 +1,88 @@ +// When i wrote this, it was called at SS_INIT_EARLY - right after SS_INIT_DBCODE +/singleton/modpack/don_loadout/initialize() + if(!sqlenabled) + log_debug("Donations system is disabled with SQL!") + return + + if(establish_db_connection()) + log_debug("Donations system successfully connected to DB!") + UpdateAllClients() + else + log_debug("Donations system failed to connect with DB!") + + return ..() + +/singleton/modpack/don_loadout/proc/UpdateAllClients() + set waitfor = 0 + for(var/client/C in GLOB.clients) + update_donator(C) + log_debug("Donators info were updated!") + +/singleton/modpack/don_loadout/proc/update_donator(client/player) + set waitfor = 0 + + if(!establish_db_connection()) + return FALSE + ASSERT(player) + + var/was_donator = player.donator_info.donator + + var/DBQuery/query = dbcon.NewQuery({" + SELECT CAST(SUM(amount) as UNSIGNED INTEGER) + FROM `[sqlfdbkdbutil]`.`budget` + WHERE + ckey = '[player.ckey]' AND + is_valid = TRUE AND + date_start <= NOW() AND + (NOW() < date_end OR date_end IS NULL) + GROUP BY ckey + "}) + + query.Execute() + + if(query.NextRow()) + var/total = text2num(query.item[1]) + var/donator_level = DONATION_TIER_NONE + if(total >= DONATION_TIER_ONE_SUM) + donator_level = DONATION_TIER_ONE + if(total >= DONATION_TIER_TWO_SUM) + donator_level = DONATION_TIER_TWO + if(total >= DONATION_TIER_THREE_SUM) + donator_level = DONATION_TIER_THREE + if(total >= DONATION_TIER_FOUR_SUM) + donator_level = DONATION_TIER_FOUR + player.donator_info.donation_type = donator_level + + if(player.holder?.rights & R_ADMIN) + player.donator_info.donation_type = DONATION_TIER_ADMIN + + if(!was_donator) + player.donator_info.on_donation_tier_loaded(player) + + return TRUE + +/singleton/modpack/don_loadout/proc/show_donations_info(mob/user) + ASSERT(user) + + var html = {" +
    Бусти проекта можно найти в разделе #полезные-ссылки нашего дискорда:
    +
    +
    Открыть Discord
    +
    +
    За денежные пожертвования, в благодарность вы получаете доступ к некоторым специальным предметам лодаута (В будущем)
    + "} + var/datum/browser/popup = new(user, "donation_links", "Донат", 400, 230) + popup.set_content(html) + popup.open() + + +/singleton/modpack/don_loadout/Topic(href, href_list) + var/mob/user = usr + + switch(href_list["action"]) + if("discord") + log_debug("\[Donations] discord link used by '[user]'") + send_link(user, config.discord_url) + return TOPIC_HANDLED + + return TOPIC_NOACTION diff --git a/mods/don_loadout/code/donations/donator.dm b/mods/don_loadout/code/donations/donator.dm new file mode 100644 index 0000000000000..cf662d2151ce8 --- /dev/null +++ b/mods/don_loadout/code/donations/donator.dm @@ -0,0 +1,64 @@ + +/proc/donation_tier_to_css_class(tier) + switch(tier) + if(DONATION_TIER_ONE) return "dt_1" + if(DONATION_TIER_TWO) return "dt_2" + if(DONATION_TIER_THREE) return "dt_3" + if(DONATION_TIER_FOUR) return "dt_4" + if(DONATION_TIER_ADMIN) return "dt_a" + +/proc/donation_tier_decorated(tier) + if(tier == DONATION_TIER_NONE) + return "None" + + var/tier_text + switch(tier) + if(DONATION_TIER_ONE) + tier_text = "Tier I" + if(DONATION_TIER_TWO) + tier_text = "Tier II" + if(DONATION_TIER_THREE) + tier_text = "Tier III" + if(DONATION_TIER_FOUR) + tier_text = "Tier IV" + if(DONATION_TIER_ADMIN) + tier_text = "Admin" + + return SPAN_CLASS(donation_tier_to_css_class(tier), tier_text) + +/client + var/datum/donator_info/donator_info = new + +/client/New() + . = ..() + var/singleton/modpack/don_loadout/donations = GET_SINGLETON(/singleton/modpack/don_loadout) + donations.update_donator(src) + +/client/verb/donations_info() + set name = "Donations Info" + set desc = "View information about donations." + set hidden = 1 + + var/singleton/modpack/don_loadout/donations = GET_SINGLETON(/singleton/modpack/don_loadout) + donations.show_donations_info(mob) + +/datum/donator_info + var/donator = FALSE + var/donation_type = DONATION_TIER_NONE + +/datum/donator_info/proc/on_donation_tier_loaded(client/C) + return + +/datum/donator_info/proc/get_decorated_message(client/C, message) + if(!SScharacter_setup.initialized || isnull(donation_type)) + return message + if (C.get_preference_value(/datum/client_preference/ooc_donation_color) != GLOB.PREF_SHOW) + return message + return "[message]" + +/datum/donator_info/proc/get_full_donation_tier() + return donation_tier_decorated(donation_type) + +/datum/donator_info/proc/donation_tier_available(required) + ASSERT(required) + return donation_type >= required diff --git a/mods/emote_panel/README.md b/mods/emote_panel/README.md new file mode 100644 index 0000000000000..9803bc1469749 --- /dev/null +++ b/mods/emote_panel/README.md @@ -0,0 +1,78 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1087 +- https://github.com/SierraBay/SierraBay12/pull/1815 + + + +## Мод-пример + +ID мода: EMOTE_PANEL + + +### Описание мода + +Добавляет панель эиоций + + +### Изменения *кор кода* + +- Отсутствуют + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +SuhEugene, LordNest + diff --git a/mods/emote_panel/_emote_panel.dm b/mods/emote_panel/_emote_panel.dm new file mode 100644 index 0000000000000..630165110d699 --- /dev/null +++ b/mods/emote_panel/_emote_panel.dm @@ -0,0 +1,4 @@ +/singleton/modpack/emote_panel + name = "Панель эмоций" + desc = "Добавляет панель эмоций." + author = "SuhEugene, LordNest" diff --git a/mods/emote_panel/_emote_panel.dme b/mods/emote_panel/_emote_panel.dme new file mode 100644 index 0000000000000..f958213fd751b --- /dev/null +++ b/mods/emote_panel/_emote_panel.dme @@ -0,0 +1,12 @@ +#ifndef MODPACK_EMOTE_PANEL +#define MODPACK_EMOTE_PANEL + +#include "_emote_panel.dm" +#include "code/audible.dm" +#include "code/emotes.dm" +#include "code/overrides.dm" +// #include "code/pain.dm" // SIERRA TODO: Use it +#include "code/silicon.dm" +#include "code/unathi.dm" + +#endif diff --git a/mods/emote_panel/code/audible.dm b/mods/emote_panel/code/audible.dm new file mode 100644 index 0000000000000..d425746d8a318 --- /dev/null +++ b/mods/emote_panel/code/audible.dm @@ -0,0 +1,191 @@ +#define SOUNDED_SPECIES list(SPECIES_HUMAN, SPECIES_VATGROWN, SPECIES_SPACER, SPECIES_TRITONIAN, SPECIES_GRAVWORLDER, SPECIES_MULE, SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_TAJARA, SPECIES_SKRELL) + +/singleton/emote/audible + // three-dimensional array + // first is the species, associated to a list of genders, associated to a list of the sound effects to use + var/list/sounded_species = null + +/singleton/emote/audible/do_extra(atom/user) + if(emote_sound) do_sound(user) + +/singleton/emote/audible/proc/do_sound(atom/user) + var/mob/living/carbon/human/H = user + if(H.stat) return // No dead or unconcious people screaming pls. + if(istype(H)) + if(sounded_species) + if(H.species.name in sounded_species) + if(islist(emote_sound)) + if(H.species.name == SPECIES_SKRELL) + if(H.head_hair_style == "Skrell Male Tentacles") + return playsound(user.loc, pick(emote_sound[MALE]), 50, 0) + else + return playsound(user.loc, pick(emote_sound[FEMALE]), 50, 0) + if(emote_sound[H.gender]) + return playsound(user.loc, pick(emote_sound[H.gender]), 50, 0) + return playsound(user.loc, pick(emote_sound), 50, 0) + +/singleton/emote/audible/gasp + emote_sound = list( + MALE = list( + 'mods/emote_panel/sound/gasp_male1.ogg', + 'mods/emote_panel/sound/gasp_male2.ogg', + 'mods/emote_panel/sound/gasp_male3.ogg', + 'mods/emote_panel/sound/gasp_male4.ogg', + 'mods/emote_panel/sound/gasp_male5.ogg', + 'mods/emote_panel/sound/gasp_male6.ogg', + 'mods/emote_panel/sound/gasp_male7.ogg' + ), + FEMALE = list( + 'mods/emote_panel/sound/gasp_female1.ogg', + 'mods/emote_panel/sound/gasp_female2.ogg', + 'mods/emote_panel/sound/gasp_female3.ogg', + 'mods/emote_panel/sound/gasp_female4.ogg', + 'mods/emote_panel/sound/gasp_female5.ogg', + 'mods/emote_panel/sound/gasp_female6.ogg', + 'mods/emote_panel/sound/gasp_female7.ogg' + ) + ) + sounded_species = list(SPECIES_HUMAN, SPECIES_VATGROWN, SPECIES_SPACER, SPECIES_TRITONIAN, SPECIES_GRAVWORLDER, + SPECIES_MULE, + SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_TAJARA, SPECIES_VOX, SPECIES_SKRELL) + +/singleton/emote/audible/whistle + emote_sound = 'mods/emote_panel/sound/whistle.ogg' + sounded_species = list(SPECIES_HUMAN, SPECIES_VATGROWN, SPECIES_SPACER, SPECIES_TRITONIAN, SPECIES_GRAVWORLDER, + SPECIES_MULE, + SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_TAJARA, SPECIES_VOX, SPECIES_IPC, + SPECIES_SKRELL) + +/singleton/emote/audible/sneeze + emote_sound = list( + MALE = list( + 'mods/emote_panel/sound/sneeze_male_1.ogg', + 'mods/emote_panel/sound/sneeze_male_2.ogg' + ), + FEMALE = list( + 'mods/emote_panel/sound/sneeze_female_1.ogg', + 'mods/emote_panel/sound/sneeze_female_2.ogg' + ) + ) + sounded_species = SOUNDED_SPECIES + +/singleton/emote/audible/snore + emote_sound = list( + 'mods/emote_panel/sound/snore_1.ogg', + 'mods/emote_panel/sound/snore_2.ogg', + 'mods/emote_panel/sound/snore_3.ogg', + 'mods/emote_panel/sound/snore_4.ogg', + 'mods/emote_panel/sound/snore_5.ogg', + 'mods/emote_panel/sound/snore_6.ogg', + 'mods/emote_panel/sound/snore_7.ogg' + ) + sounded_species = list(SPECIES_HUMAN, SPECIES_VATGROWN, SPECIES_SPACER, SPECIES_TRITONIAN, SPECIES_GRAVWORLDER, + SPECIES_MULE, + SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_TAJARA, SPECIES_VOX, SPECIES_SKRELL) + +/singleton/emote/audible/yawn + emote_sound = list( + MALE = list( + 'mods/emote_panel/sound/yawn_male_1.ogg', + 'mods/emote_panel/sound/yawn_male_2.ogg' + ), + FEMALE = list( + 'mods/emote_panel/sound/yawn_female_1.ogg', + 'mods/emote_panel/sound/yawn_female_2.ogg', + 'mods/emote_panel/sound/yawn_female_3.ogg' + ) + ) + sounded_species = SOUNDED_SPECIES + +/singleton/emote/audible/clap + emote_sound = 'mods/emote_panel/sound/clap.ogg' + +/singleton/emote/audible/cough + emote_sound = list( + MALE = 'mods/emote_panel/sound/cough_male.ogg', + FEMALE = 'mods/emote_panel/sound/cough_female.ogg' + ) + sounded_species = list(SPECIES_HUMAN, SPECIES_VATGROWN, SPECIES_SPACER, SPECIES_TRITONIAN, SPECIES_GRAVWORLDER, + SPECIES_MULE, + SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_TAJARA, SPECIES_VOX, SPECIES_SKRELL) + +/singleton/emote/audible/cry + emote_sound = list( + MALE = list( + 'mods/emote_panel/sound/cry_male_1.ogg', + 'mods/emote_panel/sound/cry_male_2.ogg' + ), + FEMALE = list( + 'mods/emote_panel/sound/cry_female_1.ogg', + 'mods/emote_panel/sound/cry_female_2.ogg', + 'mods/emote_panel/sound/cry_female_3.ogg' + ) + ) + sounded_species = SOUNDED_SPECIES + +/singleton/emote/audible/sigh + emote_sound = list( + MALE = 'mods/emote_panel/sound/sigh_male.ogg', + FEMALE = 'mods/emote_panel/sound/sigh_female.ogg' + ) + sounded_species = list(SPECIES_HUMAN, SPECIES_VATGROWN, SPECIES_SPACER, SPECIES_TRITONIAN, SPECIES_GRAVWORLDER, + SPECIES_MULE, + SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_TAJARA, SPECIES_VOX, SPECIES_SKRELL) + +/singleton/emote/audible/laugh + emote_sound = list( + MALE = list( + 'mods/emote_panel/sound/laugh_male_1.ogg', + 'mods/emote_panel/sound/laugh_male_2.ogg', + 'mods/emote_panel/sound/laugh_male_3.ogg' + ), + FEMALE = list( + 'mods/emote_panel/sound/laugh_female_1.ogg', + 'mods/emote_panel/sound/laugh_female_2.ogg', + 'mods/emote_panel/sound/laugh_female_3.ogg' + ) + ) + sounded_species = SOUNDED_SPECIES + +/singleton/emote/audible/giggle + emote_sound = list( + MALE = 'mods/emote_panel/sound/giggle_male_1.ogg', + FEMALE = 'mods/emote_panel/sound/giggle_female_1.ogg' + ) + sounded_species = SOUNDED_SPECIES + +/singleton/emote/audible/scream + emote_sound = list( + MALE = list( + 'mods/emote_panel/sound/scream_male_1.ogg', + 'mods/emote_panel/sound/scream_male_2.ogg', + 'mods/emote_panel/sound/scream_male_3.ogg' + ), + FEMALE = list( + 'mods/emote_panel/sound/scream_female_1.ogg', + 'mods/emote_panel/sound/scream_female_2.ogg' + ) + ) + sounded_species = SOUNDED_SPECIES + +/singleton/emote/audible/scream/monkey + emote_sound = list( + 'mods/emote_panel/sound/pain_monkey_1.ogg', + 'mods/emote_panel/sound/pain_monkey_2.ogg', + 'mods/emote_panel/sound/pain_monkey_3.ogg' + ) + sounded_species = null + +/singleton/emote/audible/cat_purr + key = "purr" + emote_message_3p = "USER мурчит." + emote_sound = 'mods/emote_panel/sound/cat_purr.ogg' + +/singleton/emote/audible/cat_purr/long + key = "purrl" + emote_sound = 'mods/emote_panel/sound/cat_purr_long.ogg' + +/singleton/emote/audible/finger_snap + key = "snap" + emote_message_3p = "USER щёлкает пальцами." + emote_sound = 'mods/emote_panel/sound/fingersnap.ogg' diff --git a/mods/emote_panel/code/emotes.dm b/mods/emote_panel/code/emotes.dm new file mode 100644 index 0000000000000..174b33db0ed64 --- /dev/null +++ b/mods/emote_panel/code/emotes.dm @@ -0,0 +1,209 @@ +/mob/living/verb/laugh() + set name = "Смеяться" + set category = "Emote" + emote("laugh") + +/mob/living/verb/giggle() + set name = "Хихикать" + set category = "Emote" + emote("giggle") + +/mob/living/verb/scream() + set name = "Кричать" + set category = "Emote" + emote("scream") + +/mob/living/verb/scratch() + set name = "Почесаться" + set category = "Emote" + emote("scratch") + +/mob/living/verb/blush() + set name = "Краснеть" + set category = "Emote" + emote("blush") + +/mob/living/verb/blink() + set name = "Проморгаться" + set category = "Emote" + emote("blink") + +/mob/living/verb/bow() + set name = "Поклониться" + set category = "Emote" + emote("bow") + +/mob/living/verb/choke() + set name = "Подавиться" + set category = "Emote" + emote("choke") + +/mob/living/verb/chuckle() + set name = "Усмехнуться" + set category = "Emote" + emote("chuckle") + +/mob/living/verb/collapse() + set name = "Рухнуть" + set category = "Emote" + emote("collapse") + +/mob/living/verb/cough() + set name = "Кашлять" + set category = "Emote" + emote("cough") + +/mob/living/verb/cry() + set name = "Плакать" + set category = "Emote" + emote("cry") + +/mob/living/verb/clap() + set name = "Хлопать" + set category = "Emote" + emote("clap") + +/mob/living/verb/drool() + set name = "Нести чепуху" + set category = "Emote" + emote("drool") + +/mob/living/verb/faint() + set name = "Потерять сознание" + set category = "Emote" + emote("faint") + +/mob/living/verb/frown() + set name = "Хмуриться" + set category = "Emote" + emote("frown") + +/mob/living/verb/gasp() + set name = "Задыхаться" + set category = "Emote" + emote("gasp") + +/mob/living/verb/glare() + set name = "Смотреть с ненавистью" + set category = "Emote" + emote("glare") + +/mob/living/verb/groan() + set name = "Болезненный стон" + set category = "Emote" + emote("groan") + +/mob/living/verb/grin() + set name = "Оскалиться в улыбке" + set category = "Emote" + emote("grin") + +/mob/living/verb/look() + set name = "Посмотреть" + set category = "Emote" + emote("look") + +/mob/living/verb/nod() + set name = "Кивнуть" + set category = "Emote" + emote("nod") + +/mob/living/verb/moan() + set name = "Стонать" + set category = "Emote" + emote("moan") + +/mob/living/verb/shake() + set name = "Трясти головой" + set category = "Emote" + emote("shake") + +/mob/living/verb/sigh() + set name = "Вздыхать" + set category = "Emote" + emote("sigh") + +/mob/living/verb/smile() + set name = "Улыбнуться" + set category = "Emote" + emote("smile") + +/mob/living/verb/sneeze() + set name = "Чихнуть" + set category = "Emote" + emote("sneeze") + +/mob/living/verb/grunt() + set name = "Ворчать" + set category = "Emote" + emote("grunt") + +/mob/living/verb/sniff() + set name = "Понюхать" + set category = "Emote" + emote("sniff") + +/mob/living/verb/snore() + set name = "Храпеть" + set category = "Emote" + emote("snore") + +/mob/living/verb/shrug() + set name = "Пожать плечами" + set category = "Emote" + emote("shrug") + +/mob/living/verb/stare() + set name = "Пялиться" + set category = "Emote" + emote("stare") + +/mob/living/verb/tremble() + set name = "Дрожать в ужасе" + set category = "Emote" + emote("tremble") + +/mob/living/verb/twitch_v() + set name = "Сильно дёргаться" + set category = "Emote" + emote("twitch_v") + +/mob/living/verb/twitch() + set name = "Дёргаться" + set category = "Emote" + emote("twitch") + +/mob/living/verb/wave() + set name = "Махать" + set category = "Emote" + emote("wave") + +/mob/living/verb/whimper() + set name = "Хныкать" + set category = "Emote" + emote("whimper") + +/mob/living/verb/whistle() + set name = "Свистеть" + set category = "Emote" + emote("whistle") + +/mob/living/verb/wink() + set name = "Подмигнуть" + set category = "Emote" + emote("wink") + +/mob/living/verb/yawn() + set name = "Зевать" + set category = "Emote" + emote("yawn") + +/mob/living/verb/salute() + set name = "Сделать воинское приветствие" + set category = "Emote" + emote("salute") + +/mob/living/verb/eyebrow() + set name = "Приподнять бровь" + set category = "Emote" + emote("eyebrow") diff --git a/mods/emote_panel/code/overrides.dm b/mods/emote_panel/code/overrides.dm new file mode 100644 index 0000000000000..d35acce592893 --- /dev/null +++ b/mods/emote_panel/code/overrides.dm @@ -0,0 +1,347 @@ +/singleton/emote/visible + key ="tail" + emote_message_3p = "USER виляет своим хвостом." + message_type = VISIBLE_MESSAGE + +/singleton/emote/visible/scratch + key = "scratch" + check_restraints = TRUE + emote_message_3p = "USER чешется." + +/singleton/emote/visible/drool + key ="drool" + emote_message_3p = "USER неразборчиво бурчит." + conscious = 0 + +/singleton/emote/visible/nod + key ="nod" + emote_message_3p = "USER кивает." + +/singleton/emote/visible/sway + key ="sway" + emote_message_3p = "USER шатается." + +/singleton/emote/visible/sulk + key ="sulk" + emote_message_3p = "USER грустно садится..." + +/singleton/emote/visible/dance + key ="dance" + check_restraints = TRUE + emote_message_3p = "USER танцует!" + +/singleton/emote/visible/roll + key ="roll" + check_restraints = TRUE + emote_message_3p = "USER катается." + +/singleton/emote/visible/shake + key ="shake" + emote_message_3p = "USER трясет головой." + +/singleton/emote/visible/jump + key ="jump" + emote_message_3p = "USER прыгает!" + +/singleton/emote/visible/hiss + key ="hiss_" + emote_message_3p = "USER мягко шипит..." + emote_message_3p_target = "USER мягко шипит на TARGET..." + +/singleton/emote/visible/shiver + key ="shiver" + emote_message_3p = "USER дрожит." + conscious = 0 + +/singleton/emote/visible/collapse + key ="collapse" + emote_message_3p = "USER падает!" + +/singleton/emote/visible/collapse/do_extra(mob/user) + if(istype(user)) + user.Paralyse(2) + +// /singleton/emote/visible/flash +// key = "flash" +// emote_message_3p = "The lights on USER flash quickly." + +/singleton/emote/visible/blink + key = "blink" + emote_message_3p = "USER моргает." + +// /singleton/emote/visible/airguitar +// key = "airguitar" +// check_restraints = TRUE +// emote_message_3p = "USER is strumming the air and headbanging like a safari chimp." + +/singleton/emote/visible/blink_r + key = "blink_r" + emote_message_3p = "USER быстро моргает!" + +/singleton/emote/visible/bow + key = "bow" + emote_message_3p_target = "USER делает поклон TARGET." + emote_message_3p = "USER делает поклон." + +/singleton/emote/visible/salute + key = "salute" + emote_message_3p_target = "USER выполняет воинское приветствие TARGET." + emote_message_3p = "USER выполняет воинское приветствие." + check_restraints = TRUE + +/singleton/emote/visible/flap + key = "flap" + check_restraints = TRUE + emote_message_3p = "USER машет крыльями." + +/singleton/emote/visible/aflap + key = "aflap" + check_restraints = TRUE + emote_message_3p = "USER агрессивно машет крыльями!" + +/singleton/emote/visible/eyebrow + key = "eyebrow" + emote_message_3p = "USER приподнимает бровь." + +/singleton/emote/visible/twitch + key = "twitch" + emote_message_3p = "USER дергается." + conscious = 0 + +/singleton/emote/visible/twitch_v + key = "twitch_v" + emote_message_3p = "USER сильно дергается!" + conscious = 0 + +/singleton/emote/visible/faint + key = "faint" + emote_message_3p = "USER падает в обморок!" + +/singleton/emote/visible/faint/do_extra(mob/user) + if(istype(user) && user.sleeping <= 0) + user.sleeping += 10 + +/singleton/emote/visible/frown + key = "frown" + emote_message_3p = "USER хмурится." + +/singleton/emote/visible/blush + key = "blush" + emote_message_3p = "USER краснеет..." + +/singleton/emote/visible/wave + key = "wave" + emote_message_3p = "USER машет." + emote_message_3p_target = "USER машет TARGET." + check_restraints = TRUE + +/singleton/emote/visible/glare + key = "glare" + emote_message_3p = "USER недовольно смотрит на TARGET." + emote_message_3p = "USER недовольно смотрит." + +/singleton/emote/visible/stare + key = "stare" + emote_message_3p = "USER пялится на TARGET." + emote_message_3p = "USER пялится." + +/singleton/emote/audible/scream + key = "scream" + emote_message_3p = "USER кричит!" + +/singleton/emote/visible/look + key = "look" + emote_message_3p = "USER смотрит на TARGET." + emote_message_3p = "USER смотрит." + +/singleton/emote/visible/point + key = "point" + check_restraints = TRUE + emote_message_3p = "USER показывает пальцем." + emote_message_3p_target = "USER показывает пальцем на TARGET." + +/singleton/emote/visible/raise + key = "raise" + check_restraints = TRUE + emote_message_3p = "USER поднимает руку." + +/singleton/emote/visible/grin + key = "grin" + emote_message_3p = "USER скалится в улыбке." + +/singleton/emote/visible/shrug + key = "shrug" + emote_message_3p = "USER пожимает плечами." + +/singleton/emote/visible/smile + key = "smile" + emote_message_3p = "USER улыбается." + emote_message_3p_target = "USER улыбается TARGET." + +/singleton/emote/visible/pale + key = "pale" + emote_message_3p = "USER на секунду бледнеет..." + +/singleton/emote/visible/tremble + key = "tremble" + emote_message_3p = "USER трепещет в страхе!" + +/singleton/emote/visible/wink + key = "wink" + emote_message_3p = "USER подмигивает." + emote_message_3p_target = "USER подмигивает TARGET." + +/singleton/emote/visible/hug + key = "hug" + check_restraints = TRUE + emote_message_3p_target = "USER обнимает TARGET!" + emote_message_3p = "USER обнимает USER_SELF!" + check_range = 1 + +// /singleton/emote/visible/dap +// key = "dap" +// check_restraints = TRUE +// emote_message_3p_target = "USER gives daps to TARGET." +// emote_message_3p = "USER sadly can't find anybody to give daps to, and daps USER_SELF." + +/singleton/emote/visible/bounce + key = "bounce" + emote_message_3p = "USER прыгает на месте!" + +/singleton/emote/visible/jiggle + key = "jiggle" + emote_message_3p = "USER покачивается..." + +/singleton/emote/visible/lightup + key = "light" + emote_message_3p = "USER lights up for a bit, then stops." + +/singleton/emote/visible/vibrate + key = "vibrate" + emote_message_3p = "USER вибрирует!" + +// /singleton/emote/visible/deathgasp_robot +// key = "deathgasp" +// emote_message_3p = "USER shudders violently for a moment, then becomes motionless, USER_THEIR eyes slowly darkening." + +/singleton/emote/visible/handshake + key = "handshake" + check_restraints = TRUE + emote_message_3p_target = "USER пожимает руку TARGET." + emote_message_3p = "USER пожимает руку USER_SELF." + check_range = 1 + +/singleton/emote/visible/handshake/get_emote_message_3p(atom/user, atom/target, extra_params) + if(target && !user.Adjacent(target)) + return "USER протягивает руку TARGET." + return ..() + +/singleton/emote/visible/signal + key = "signal" + emote_message_3p_target = "USER машет TARGET." + emote_message_3p = "USER машет." + check_restraints = TRUE + +/singleton/emote/visible/signal/check_user(atom/user) + return ismob(user) + +/singleton/emote/visible/signal/proc/get_fingers_word(number) + switch(number) + if (1) return "палец" + if (2, 3, 4) return "пальца" + if (5) return "пальцев" + +/singleton/emote/visible/signal/get_emote_message_3p(mob/user, atom/target, extra_params) + if(istype(user) && !(user.r_hand && user.l_hand)) + var/t1 = round(text2num(extra_params)) + if(isnum(t1) && t1 <= 5) + return "USER показывает [t1] [get_fingers_word(t1)]." + return .. () + +/singleton/emote/visible/afold + key = "afold" + check_restraints = TRUE + emote_message_3p = "USER складывает руки." + +/singleton/emote/visible/alook + key = "alook" + emote_message_3p = "USER отворачивается." + +/singleton/emote/visible/hbow + key = "hbow" + emote_message_3p = "USER кланяет голову." + +/singleton/emote/visible/hip + key = "hip" + check_restraints = TRUE + emote_message_3p = "USER упирается руками в свои бёдра." + +/singleton/emote/visible/holdup + key = "holdup" + check_restraints = TRUE + emote_message_3p = "USER поднимает свои ладони." + +/singleton/emote/visible/hshrug + key = "hshrug" + emote_message_3p = "USER чуть пожимает плечами." + +/singleton/emote/visible/crub + key = "crub" + check_restraints = TRUE + emote_message_3p = "USER потирает подбородок." + +/singleton/emote/visible/eroll + key = "eroll" + emote_message_3p = "USER закатывает глаза." + emote_message_3p_target = "USER закатывает глаза на TARGET." + +/singleton/emote/visible/erub + key = "erub" + check_restraints = TRUE + emote_message_3p = "USER протирает глаза." + +/singleton/emote/visible/fslap + key = "fslap" + check_restraints = TRUE + emote_message_3p = "USER шлёпает себя по лбу." + +/singleton/emote/visible/ftap + key = "ftap" + emote_message_3p = "USER постукивает ногой." + +/singleton/emote/visible/hrub + key = "hrub" + check_restraints = TRUE + emote_message_3p = "USER потирает свои руки." + +/singleton/emote/visible/hspread + key = "hspread" + check_restraints = TRUE + emote_message_3p = "USER разводит руками." + +/singleton/emote/visible/pocket + key = "pocket" + check_restraints = TRUE + emote_message_3p = "USER засовывает свои руки в карманы." + +// /singleton/emote/visible/rsalute +// key = "rsalute" +// check_restraints = TRUE +// emote_message_3p = "USER returns the salute." + +/singleton/emote/visible/rshoulder + key = "rshoulder" + emote_message_3p = "USER закатывает свои рукава." + +/singleton/emote/visible/squint + key = "squint" + emote_message_3p = "USER прищуривается." + emote_message_3p_target = "USER щурится на TARGET." + +/singleton/emote/visible/tfist + key = "tfist" + emote_message_3p = "USER сжимает руки в кулаки." + +/singleton/emote/visible/tilt + key = "tilt" + emote_message_3p = "USER наклоняет свою голову." diff --git a/mods/emote_panel/code/pain.dm b/mods/emote_panel/code/pain.dm new file mode 100644 index 0000000000000..1cc1cee40a63d --- /dev/null +++ b/mods/emote_panel/code/pain.dm @@ -0,0 +1,68 @@ +// SIERRA TODO: Use these sounds +#define PICK_MALE_PAIN_SOUND pick(\ + 'mods/emote_panel/sound/pain_male_1.ogg', \ + 'mods/emote_panel/sound/pain_male_2.ogg', \ + 'mods/emote_panel/sound/pain_male_3.ogg' \ +) +#define PICK_FEMALE_PAIN_SOUND pick(\ + 'mods/emote_panel/sound/agony_female_1.ogg', \ + 'mods/emote_panel/sound/agony_female_2.ogg', \ + 'mods/emote_panel/sound/agony_female_3.ogg' \ +) +#define PICK_MALE_MOAN_SOUND pick(\ + 'mods/emote_panel/sound/moan_male_1.ogg', \ + 'mods/emote_panel/sound/moan_male_2.ogg', \ + 'mods/emote_panel/sound/moan_male_3.ogg' \ +) +#define PICK_FEMALE_MOAN_SOUND pick(\ + 'mods/emote_panel/sound/moan_female_1.ogg', \ + 'mods/emote_panel/sound/moan_female_2.ogg', \ + 'mods/emote_panel/sound/moan_female_3.ogg' \ +) + +/mob/living/proc/agony_scream() + if(stat || is_species(SPECIES_MONKEY)) + return + var/scream_sound = null + var/message = null + + if(ishuman(src)) + var/mob/living/carbon/human/H = src + if(!is_muzzled()) + switch(gender) + if(MALE) scream_sound = PICK_MALE_PAIN_SOUND + if(FEMALE) scream_sound = PICK_FEMALE_PAIN_SOUND + message = "кричит от боли!" + else + message = "издает громкое мычание!" + + if(message) + custom_emote(2, message) + +/mob/living/proc/agony_moan() + if(stat || is_species(SPECIES_MONKEY)) + return + var/moan_sound = null + var/message = null + + if(ishuman(src)) + var/mob/living/carbon/human/H = src + if(!is_muzzled()) + switch(gender) + if(MALE) moan_sound = PICK_MALE_MOAN_SOUND + if(FEMALE) moan_sound = PICK_FEMALE_MOAN_SOUND + message = "стонет от боли!" + else + message = "издает громкое мычание!" + + if(moan_sound) + if(H.species.name in SOUNDED_SPECIES) + playsound(src, moan_sound, 50, 0, 1) + + if(message) + custom_emote(2, message) + +#undef PICK_MALE_PAIN_SOUND +#undef PICK_FEMALE_PAIN_SOUND +#undef PICK_MALE_MOAN_SOUND +#undef PICK_FEMALE_MOAN_SOUND diff --git a/mods/emote_panel/code/silicon.dm b/mods/emote_panel/code/silicon.dm new file mode 100644 index 0000000000000..eaf8134c15d32 --- /dev/null +++ b/mods/emote_panel/code/silicon.dm @@ -0,0 +1,45 @@ +/mob/living/silicon + var/speech_sounds + +/mob/living/silicon/ai + speech_sounds = list( + 'mods/emote_panel/sound/robot_talk_heavy_1.ogg', + 'mods/emote_panel/sound/robot_talk_heavy_2.ogg', + 'mods/emote_panel/sound/robot_talk_heavy_3.ogg', + 'mods/emote_panel/sound/robot_talk_heavy_4.ogg' + ) + +/mob/living/silicon/robot + speech_sounds = list( + 'mods/emote_panel/sound/robot_talk_heavy_1.ogg', + 'mods/emote_panel/sound/robot_talk_heavy_2.ogg', + 'mods/emote_panel/sound/robot_talk_heavy_3.ogg', + 'mods/emote_panel/sound/robot_talk_heavy_4.ogg' + ) + +/mob/living/silicon/robot/drone + speech_sounds = list( + 'mods/emote_panel/sound/robot_talk_light_1.ogg', + 'mods/emote_panel/sound/robot_talk_light_2.ogg', + 'mods/emote_panel/sound/robot_talk_light_3.ogg', + 'mods/emote_panel/sound/robot_talk_light_4.ogg', + 'mods/emote_panel/sound/robot_talk_light_5.ogg' + ) + +/mob/living/silicon/robot/flying + speech_sounds = list( + 'mods/emote_panel/sound/robot_talk_light_1.ogg', + 'mods/emote_panel/sound/robot_talk_light_2.ogg', + 'mods/emote_panel/sound/robot_talk_light_3.ogg', + 'mods/emote_panel/sound/robot_talk_light_4.ogg', + 'mods/emote_panel/sound/robot_talk_light_5.ogg' + ) + +/singleton/emote/audible/synth/do_extra(atom/user) + if(emote_sound) + playsound(user.loc, emote_sound, 50, 0) + +/singleton/emote/audible/synth/scream + key = "scream" + emote_message_3p = "USER screams." + emote_sound = 'mods/emote_panel/sound/scream_robot.ogg' diff --git a/mods/emote_panel/code/unathi.dm b/mods/emote_panel/code/unathi.dm new file mode 100644 index 0000000000000..7e6471180c80e --- /dev/null +++ b/mods/emote_panel/code/unathi.dm @@ -0,0 +1,91 @@ +/datum/species/unathi/default_emotes = list( + /singleton/emote/human/swish, + /singleton/emote/human/wag, + /singleton/emote/human/sway, + /singleton/emote/human/qwag, + /singleton/emote/human/fastsway, + /singleton/emote/human/swag, + /singleton/emote/human/stopsway, + /singleton/emote/audible/lizard_bellow, + /singleton/emote/audible/lizard_squeal, + /singleton/emote/audible/lizard_scream, + /singleton/emote/audible/lizard_roar, + /singleton/emote/audible/lizard_rumble, + /singleton/emote/audible/lizard_threat +) + +/singleton/emote/audible/lizard_bellow + key = "bellow" + emote_message_3p_target = "USER утробно рычит на TARGET!" + emote_message_3p = "USER рычит!" + emote_sound = 'sound/voice/LizardBellow.ogg' + +/singleton/emote/audible/lizard_squeal + key = "squeal" + emote_message_3p = "USER визжит." + emote_sound = 'sound/voice/LizardSqueal.ogg' + +/singleton/emote/audible/lizard_scream + key = "scream" + emote_message_3p = "USER кричит!" + emote_sound = list( + MALE = list( + 'mods/emote_panel/sound/unathi/m_u_scream.ogg', 'mods/emote_panel/sound/unathi/m_u_scream2.ogg'), + FEMALE = list( + 'mods/emote_panel/sound/unathi/f_u_scream.ogg', 'mods/emote_panel/sound/unathi/f_u_scream2.ogg')) + +/singleton/emote/audible/lizard_roar + key = "roar" + emote_message_3p = "USER издаёт рёв!" + emote_sound = list( + 'mods/emote_panel/sound/unathi/roar.ogg', + 'mods/emote_panel/sound/unathi/roar2.ogg', + 'mods/emote_panel/sound/unathi/roar3.ogg' + ) + +/singleton/emote/audible/lizard_rumble + key = "rumble" + emote_message_3p = "USER урчит" + emote_sound = list( + 'mods/emote_panel/sound/unathi/rumble.ogg', + 'mods/emote_panel/sound/unathi/rumble2.ogg' + ) + +/singleton/emote/audible/lizard_threat + key = "threat" + emote_message_3p_target = "USER угрожающе раскрывает пасть на TARGET!" + emote_message_3p = "USER грозно рычит" + emote_sound = list( + 'mods/emote_panel/sound/unathi/threat.ogg', + 'mods/emote_panel/sound/unathi/threat2.ogg' + ) + +/mob/living/carbon/human/unathi/verb/lizard_bellow() + set name = "Рычать" + set category = "Emote" + emote("bellow") + +/mob/living/carbon/human/unathi/verb/lizard_squeal() + set name = "Визжать" + set category = "Emote" + emote("squeal") + +/mob/living/carbon/human/unathi/verb/lizard_scream() + set name = "Кричать" + set category = "Emote" + emote("scream") + +/mob/living/carbon/human/unathi/verb/lizard_roar() + set name = "Издать рёв" + set category = "Emote" + emote("roar") + +/mob/living/carbon/human/unathi/verb/lizard_rumble() + set name = "Урчать" + set category = "Emote" + emote("rumble") + +/mob/living/carbon/human/unathi/verb/lizard_threat() + set name = "Угрожающе рычать" + set category = "Emote" + emote("threat") diff --git a/mods/emote_panel/sound/agony_female_1.ogg b/mods/emote_panel/sound/agony_female_1.ogg new file mode 100644 index 0000000000000..83dc81ea17634 Binary files /dev/null and b/mods/emote_panel/sound/agony_female_1.ogg differ diff --git a/mods/emote_panel/sound/agony_female_2.ogg b/mods/emote_panel/sound/agony_female_2.ogg new file mode 100644 index 0000000000000..cf4bea4414d9e Binary files /dev/null and b/mods/emote_panel/sound/agony_female_2.ogg differ diff --git a/mods/emote_panel/sound/agony_female_3.ogg b/mods/emote_panel/sound/agony_female_3.ogg new file mode 100644 index 0000000000000..1f14b5097e6ce Binary files /dev/null and b/mods/emote_panel/sound/agony_female_3.ogg differ diff --git a/mods/emote_panel/sound/cat_purr.ogg b/mods/emote_panel/sound/cat_purr.ogg new file mode 100644 index 0000000000000..1125cb2bbd711 Binary files /dev/null and b/mods/emote_panel/sound/cat_purr.ogg differ diff --git a/mods/emote_panel/sound/cat_purr_long.ogg b/mods/emote_panel/sound/cat_purr_long.ogg new file mode 100644 index 0000000000000..c74b845250d0c Binary files /dev/null and b/mods/emote_panel/sound/cat_purr_long.ogg differ diff --git a/mods/emote_panel/sound/clap.ogg b/mods/emote_panel/sound/clap.ogg new file mode 100644 index 0000000000000..7535857e4583a Binary files /dev/null and b/mods/emote_panel/sound/clap.ogg differ diff --git a/mods/emote_panel/sound/cough_female.ogg b/mods/emote_panel/sound/cough_female.ogg new file mode 100644 index 0000000000000..28370c235ebbc Binary files /dev/null and b/mods/emote_panel/sound/cough_female.ogg differ diff --git a/mods/emote_panel/sound/cough_male.ogg b/mods/emote_panel/sound/cough_male.ogg new file mode 100644 index 0000000000000..1687844821b2e Binary files /dev/null and b/mods/emote_panel/sound/cough_male.ogg differ diff --git a/mods/emote_panel/sound/cry_female_1.ogg b/mods/emote_panel/sound/cry_female_1.ogg new file mode 100644 index 0000000000000..1b415ea46a074 Binary files /dev/null and b/mods/emote_panel/sound/cry_female_1.ogg differ diff --git a/mods/emote_panel/sound/cry_female_2.ogg b/mods/emote_panel/sound/cry_female_2.ogg new file mode 100644 index 0000000000000..95eea1260a515 Binary files /dev/null and b/mods/emote_panel/sound/cry_female_2.ogg differ diff --git a/mods/emote_panel/sound/cry_female_3.ogg b/mods/emote_panel/sound/cry_female_3.ogg new file mode 100644 index 0000000000000..97b190d7994c4 Binary files /dev/null and b/mods/emote_panel/sound/cry_female_3.ogg differ diff --git a/mods/emote_panel/sound/cry_male_1.ogg b/mods/emote_panel/sound/cry_male_1.ogg new file mode 100644 index 0000000000000..6d4e35be168fc Binary files /dev/null and b/mods/emote_panel/sound/cry_male_1.ogg differ diff --git a/mods/emote_panel/sound/cry_male_2.ogg b/mods/emote_panel/sound/cry_male_2.ogg new file mode 100644 index 0000000000000..b0437d3d93831 Binary files /dev/null and b/mods/emote_panel/sound/cry_male_2.ogg differ diff --git a/mods/emote_panel/sound/fingersnap.ogg b/mods/emote_panel/sound/fingersnap.ogg new file mode 100644 index 0000000000000..f7046403513da Binary files /dev/null and b/mods/emote_panel/sound/fingersnap.ogg differ diff --git a/mods/emote_panel/sound/gasp_female1.ogg b/mods/emote_panel/sound/gasp_female1.ogg new file mode 100644 index 0000000000000..f74882f902f6e Binary files /dev/null and b/mods/emote_panel/sound/gasp_female1.ogg differ diff --git a/mods/emote_panel/sound/gasp_female2.ogg b/mods/emote_panel/sound/gasp_female2.ogg new file mode 100644 index 0000000000000..8bd7f74cfddc3 Binary files /dev/null and b/mods/emote_panel/sound/gasp_female2.ogg differ diff --git a/mods/emote_panel/sound/gasp_female3.ogg b/mods/emote_panel/sound/gasp_female3.ogg new file mode 100644 index 0000000000000..6e05d1ea794a5 Binary files /dev/null and b/mods/emote_panel/sound/gasp_female3.ogg differ diff --git a/mods/emote_panel/sound/gasp_female4.ogg b/mods/emote_panel/sound/gasp_female4.ogg new file mode 100644 index 0000000000000..f33b775fd34ea Binary files /dev/null and b/mods/emote_panel/sound/gasp_female4.ogg differ diff --git a/mods/emote_panel/sound/gasp_female5.ogg b/mods/emote_panel/sound/gasp_female5.ogg new file mode 100644 index 0000000000000..cbeeb63e128a0 Binary files /dev/null and b/mods/emote_panel/sound/gasp_female5.ogg differ diff --git a/mods/emote_panel/sound/gasp_female6.ogg b/mods/emote_panel/sound/gasp_female6.ogg new file mode 100644 index 0000000000000..444b6688a4819 Binary files /dev/null and b/mods/emote_panel/sound/gasp_female6.ogg differ diff --git a/mods/emote_panel/sound/gasp_female7.ogg b/mods/emote_panel/sound/gasp_female7.ogg new file mode 100644 index 0000000000000..096354f98501a Binary files /dev/null and b/mods/emote_panel/sound/gasp_female7.ogg differ diff --git a/mods/emote_panel/sound/gasp_male1.ogg b/mods/emote_panel/sound/gasp_male1.ogg new file mode 100644 index 0000000000000..e0ddde118f3a8 Binary files /dev/null and b/mods/emote_panel/sound/gasp_male1.ogg differ diff --git a/mods/emote_panel/sound/gasp_male2.ogg b/mods/emote_panel/sound/gasp_male2.ogg new file mode 100644 index 0000000000000..2119daf880dd6 Binary files /dev/null and b/mods/emote_panel/sound/gasp_male2.ogg differ diff --git a/mods/emote_panel/sound/gasp_male3.ogg b/mods/emote_panel/sound/gasp_male3.ogg new file mode 100644 index 0000000000000..6d5cb214f3ae4 Binary files /dev/null and b/mods/emote_panel/sound/gasp_male3.ogg differ diff --git a/mods/emote_panel/sound/gasp_male4.ogg b/mods/emote_panel/sound/gasp_male4.ogg new file mode 100644 index 0000000000000..a9173a1a2c01c Binary files /dev/null and b/mods/emote_panel/sound/gasp_male4.ogg differ diff --git a/mods/emote_panel/sound/gasp_male5.ogg b/mods/emote_panel/sound/gasp_male5.ogg new file mode 100644 index 0000000000000..8e7ef3734d808 Binary files /dev/null and b/mods/emote_panel/sound/gasp_male5.ogg differ diff --git a/mods/emote_panel/sound/gasp_male6.ogg b/mods/emote_panel/sound/gasp_male6.ogg new file mode 100644 index 0000000000000..546ba45bff0f8 Binary files /dev/null and b/mods/emote_panel/sound/gasp_male6.ogg differ diff --git a/mods/emote_panel/sound/gasp_male7.ogg b/mods/emote_panel/sound/gasp_male7.ogg new file mode 100644 index 0000000000000..f73854f6cf3a2 Binary files /dev/null and b/mods/emote_panel/sound/gasp_male7.ogg differ diff --git a/mods/emote_panel/sound/giggle_female_1.ogg b/mods/emote_panel/sound/giggle_female_1.ogg new file mode 100644 index 0000000000000..057a842adcbc9 Binary files /dev/null and b/mods/emote_panel/sound/giggle_female_1.ogg differ diff --git a/mods/emote_panel/sound/giggle_male_1.ogg b/mods/emote_panel/sound/giggle_male_1.ogg new file mode 100644 index 0000000000000..befb7665723ad Binary files /dev/null and b/mods/emote_panel/sound/giggle_male_1.ogg differ diff --git a/mods/emote_panel/sound/laugh_female_1.ogg b/mods/emote_panel/sound/laugh_female_1.ogg new file mode 100644 index 0000000000000..b4b464bb685cf Binary files /dev/null and b/mods/emote_panel/sound/laugh_female_1.ogg differ diff --git a/mods/emote_panel/sound/laugh_female_2.ogg b/mods/emote_panel/sound/laugh_female_2.ogg new file mode 100644 index 0000000000000..3124eaf055cd5 Binary files /dev/null and b/mods/emote_panel/sound/laugh_female_2.ogg differ diff --git a/mods/emote_panel/sound/laugh_female_3.ogg b/mods/emote_panel/sound/laugh_female_3.ogg new file mode 100644 index 0000000000000..ed80538fa085c Binary files /dev/null and b/mods/emote_panel/sound/laugh_female_3.ogg differ diff --git a/mods/emote_panel/sound/laugh_male_1.ogg b/mods/emote_panel/sound/laugh_male_1.ogg new file mode 100644 index 0000000000000..6b4f906ffe092 Binary files /dev/null and b/mods/emote_panel/sound/laugh_male_1.ogg differ diff --git a/mods/emote_panel/sound/laugh_male_2.ogg b/mods/emote_panel/sound/laugh_male_2.ogg new file mode 100644 index 0000000000000..4033e04eac3bb Binary files /dev/null and b/mods/emote_panel/sound/laugh_male_2.ogg differ diff --git a/mods/emote_panel/sound/laugh_male_3.ogg b/mods/emote_panel/sound/laugh_male_3.ogg new file mode 100644 index 0000000000000..dba2e80c257f0 Binary files /dev/null and b/mods/emote_panel/sound/laugh_male_3.ogg differ diff --git a/mods/emote_panel/sound/moan_female_1.ogg b/mods/emote_panel/sound/moan_female_1.ogg new file mode 100644 index 0000000000000..dcbac9ae65797 Binary files /dev/null and b/mods/emote_panel/sound/moan_female_1.ogg differ diff --git a/mods/emote_panel/sound/moan_female_2.ogg b/mods/emote_panel/sound/moan_female_2.ogg new file mode 100644 index 0000000000000..88a1bf62b93d6 Binary files /dev/null and b/mods/emote_panel/sound/moan_female_2.ogg differ diff --git a/mods/emote_panel/sound/moan_female_3.ogg b/mods/emote_panel/sound/moan_female_3.ogg new file mode 100644 index 0000000000000..f283acbcac70c Binary files /dev/null and b/mods/emote_panel/sound/moan_female_3.ogg differ diff --git a/mods/emote_panel/sound/moan_male_1.ogg b/mods/emote_panel/sound/moan_male_1.ogg new file mode 100644 index 0000000000000..59cc27914305a Binary files /dev/null and b/mods/emote_panel/sound/moan_male_1.ogg differ diff --git a/mods/emote_panel/sound/moan_male_2.ogg b/mods/emote_panel/sound/moan_male_2.ogg new file mode 100644 index 0000000000000..82a021b0a945c Binary files /dev/null and b/mods/emote_panel/sound/moan_male_2.ogg differ diff --git a/mods/emote_panel/sound/moan_male_3.ogg b/mods/emote_panel/sound/moan_male_3.ogg new file mode 100644 index 0000000000000..78e8eb9c8f66f Binary files /dev/null and b/mods/emote_panel/sound/moan_male_3.ogg differ diff --git a/mods/emote_panel/sound/pain_male_1.ogg b/mods/emote_panel/sound/pain_male_1.ogg new file mode 100644 index 0000000000000..e03ceeba1ea2c Binary files /dev/null and b/mods/emote_panel/sound/pain_male_1.ogg differ diff --git a/mods/emote_panel/sound/pain_male_2.ogg b/mods/emote_panel/sound/pain_male_2.ogg new file mode 100644 index 0000000000000..a4bc4c9de108a Binary files /dev/null and b/mods/emote_panel/sound/pain_male_2.ogg differ diff --git a/mods/emote_panel/sound/pain_male_3.ogg b/mods/emote_panel/sound/pain_male_3.ogg new file mode 100644 index 0000000000000..6a580d0a1d4be Binary files /dev/null and b/mods/emote_panel/sound/pain_male_3.ogg differ diff --git a/mods/emote_panel/sound/pain_monkey_1.ogg b/mods/emote_panel/sound/pain_monkey_1.ogg new file mode 100644 index 0000000000000..34d90cb68cbc8 Binary files /dev/null and b/mods/emote_panel/sound/pain_monkey_1.ogg differ diff --git a/mods/emote_panel/sound/pain_monkey_2.ogg b/mods/emote_panel/sound/pain_monkey_2.ogg new file mode 100644 index 0000000000000..a1e6271014263 Binary files /dev/null and b/mods/emote_panel/sound/pain_monkey_2.ogg differ diff --git a/mods/emote_panel/sound/pain_monkey_3.ogg b/mods/emote_panel/sound/pain_monkey_3.ogg new file mode 100644 index 0000000000000..974041d85de85 Binary files /dev/null and b/mods/emote_panel/sound/pain_monkey_3.ogg differ diff --git a/mods/emote_panel/sound/robot_talk_heavy_1.ogg b/mods/emote_panel/sound/robot_talk_heavy_1.ogg new file mode 100644 index 0000000000000..e808e0db58776 Binary files /dev/null and b/mods/emote_panel/sound/robot_talk_heavy_1.ogg differ diff --git a/mods/emote_panel/sound/robot_talk_heavy_2.ogg b/mods/emote_panel/sound/robot_talk_heavy_2.ogg new file mode 100644 index 0000000000000..e81b2832eab7e Binary files /dev/null and b/mods/emote_panel/sound/robot_talk_heavy_2.ogg differ diff --git a/mods/emote_panel/sound/robot_talk_heavy_3.ogg b/mods/emote_panel/sound/robot_talk_heavy_3.ogg new file mode 100644 index 0000000000000..0670b3cded4e9 Binary files /dev/null and b/mods/emote_panel/sound/robot_talk_heavy_3.ogg differ diff --git a/mods/emote_panel/sound/robot_talk_heavy_4.ogg b/mods/emote_panel/sound/robot_talk_heavy_4.ogg new file mode 100644 index 0000000000000..0713e045a8104 Binary files /dev/null and b/mods/emote_panel/sound/robot_talk_heavy_4.ogg differ diff --git a/mods/emote_panel/sound/robot_talk_light_1.ogg b/mods/emote_panel/sound/robot_talk_light_1.ogg new file mode 100644 index 0000000000000..6ac3ca8c065f8 Binary files /dev/null and b/mods/emote_panel/sound/robot_talk_light_1.ogg differ diff --git a/mods/emote_panel/sound/robot_talk_light_2.ogg b/mods/emote_panel/sound/robot_talk_light_2.ogg new file mode 100644 index 0000000000000..c547e6506f3d5 Binary files /dev/null and b/mods/emote_panel/sound/robot_talk_light_2.ogg differ diff --git a/mods/emote_panel/sound/robot_talk_light_3.ogg b/mods/emote_panel/sound/robot_talk_light_3.ogg new file mode 100644 index 0000000000000..bd185943e6f39 Binary files /dev/null and b/mods/emote_panel/sound/robot_talk_light_3.ogg differ diff --git a/mods/emote_panel/sound/robot_talk_light_4.ogg b/mods/emote_panel/sound/robot_talk_light_4.ogg new file mode 100644 index 0000000000000..d2f17878a52ef Binary files /dev/null and b/mods/emote_panel/sound/robot_talk_light_4.ogg differ diff --git a/mods/emote_panel/sound/robot_talk_light_5.ogg b/mods/emote_panel/sound/robot_talk_light_5.ogg new file mode 100644 index 0000000000000..a5c6712b52671 Binary files /dev/null and b/mods/emote_panel/sound/robot_talk_light_5.ogg differ diff --git a/mods/emote_panel/sound/scream_female_1.ogg b/mods/emote_panel/sound/scream_female_1.ogg new file mode 100644 index 0000000000000..19dd74f464f77 Binary files /dev/null and b/mods/emote_panel/sound/scream_female_1.ogg differ diff --git a/mods/emote_panel/sound/scream_female_2.ogg b/mods/emote_panel/sound/scream_female_2.ogg new file mode 100644 index 0000000000000..e2dce0e7a2c9a Binary files /dev/null and b/mods/emote_panel/sound/scream_female_2.ogg differ diff --git a/mods/emote_panel/sound/scream_male_1.ogg b/mods/emote_panel/sound/scream_male_1.ogg new file mode 100644 index 0000000000000..33acc51884cc2 Binary files /dev/null and b/mods/emote_panel/sound/scream_male_1.ogg differ diff --git a/mods/emote_panel/sound/scream_male_2.ogg b/mods/emote_panel/sound/scream_male_2.ogg new file mode 100644 index 0000000000000..bb66916ab0c93 Binary files /dev/null and b/mods/emote_panel/sound/scream_male_2.ogg differ diff --git a/mods/emote_panel/sound/scream_male_3.ogg b/mods/emote_panel/sound/scream_male_3.ogg new file mode 100644 index 0000000000000..e58bc8df76062 Binary files /dev/null and b/mods/emote_panel/sound/scream_male_3.ogg differ diff --git a/mods/emote_panel/sound/scream_robot.ogg b/mods/emote_panel/sound/scream_robot.ogg new file mode 100644 index 0000000000000..5db056a771358 Binary files /dev/null and b/mods/emote_panel/sound/scream_robot.ogg differ diff --git a/mods/emote_panel/sound/sigh_female.ogg b/mods/emote_panel/sound/sigh_female.ogg new file mode 100644 index 0000000000000..d72c206cc3065 Binary files /dev/null and b/mods/emote_panel/sound/sigh_female.ogg differ diff --git a/mods/emote_panel/sound/sigh_male.ogg b/mods/emote_panel/sound/sigh_male.ogg new file mode 100644 index 0000000000000..1590bcdee605a Binary files /dev/null and b/mods/emote_panel/sound/sigh_male.ogg differ diff --git a/mods/emote_panel/sound/sneeze_female_1.ogg b/mods/emote_panel/sound/sneeze_female_1.ogg new file mode 100644 index 0000000000000..2794147957db2 Binary files /dev/null and b/mods/emote_panel/sound/sneeze_female_1.ogg differ diff --git a/mods/emote_panel/sound/sneeze_female_2.ogg b/mods/emote_panel/sound/sneeze_female_2.ogg new file mode 100644 index 0000000000000..91c9d9d150b61 Binary files /dev/null and b/mods/emote_panel/sound/sneeze_female_2.ogg differ diff --git a/mods/emote_panel/sound/sneeze_male_1.ogg b/mods/emote_panel/sound/sneeze_male_1.ogg new file mode 100644 index 0000000000000..b36b86eb45867 Binary files /dev/null and b/mods/emote_panel/sound/sneeze_male_1.ogg differ diff --git a/mods/emote_panel/sound/sneeze_male_2.ogg b/mods/emote_panel/sound/sneeze_male_2.ogg new file mode 100644 index 0000000000000..d473e4ad1bae7 Binary files /dev/null and b/mods/emote_panel/sound/sneeze_male_2.ogg differ diff --git a/mods/emote_panel/sound/snore_1.ogg b/mods/emote_panel/sound/snore_1.ogg new file mode 100644 index 0000000000000..f1afa4ecccab1 Binary files /dev/null and b/mods/emote_panel/sound/snore_1.ogg differ diff --git a/mods/emote_panel/sound/snore_2.ogg b/mods/emote_panel/sound/snore_2.ogg new file mode 100644 index 0000000000000..97b4b7a99cf52 Binary files /dev/null and b/mods/emote_panel/sound/snore_2.ogg differ diff --git a/mods/emote_panel/sound/snore_3.ogg b/mods/emote_panel/sound/snore_3.ogg new file mode 100644 index 0000000000000..b95e4603cc11f Binary files /dev/null and b/mods/emote_panel/sound/snore_3.ogg differ diff --git a/mods/emote_panel/sound/snore_4.ogg b/mods/emote_panel/sound/snore_4.ogg new file mode 100644 index 0000000000000..4e867039ea71e Binary files /dev/null and b/mods/emote_panel/sound/snore_4.ogg differ diff --git a/mods/emote_panel/sound/snore_5.ogg b/mods/emote_panel/sound/snore_5.ogg new file mode 100644 index 0000000000000..8c0a300acd268 Binary files /dev/null and b/mods/emote_panel/sound/snore_5.ogg differ diff --git a/mods/emote_panel/sound/snore_6.ogg b/mods/emote_panel/sound/snore_6.ogg new file mode 100644 index 0000000000000..bddccff92491a Binary files /dev/null and b/mods/emote_panel/sound/snore_6.ogg differ diff --git a/mods/emote_panel/sound/snore_7.ogg b/mods/emote_panel/sound/snore_7.ogg new file mode 100644 index 0000000000000..7bfe7ca8b6b49 Binary files /dev/null and b/mods/emote_panel/sound/snore_7.ogg differ diff --git a/mods/emote_panel/sound/unathi/f_u_scream.ogg b/mods/emote_panel/sound/unathi/f_u_scream.ogg new file mode 100644 index 0000000000000..a8a8fb45ce8d4 Binary files /dev/null and b/mods/emote_panel/sound/unathi/f_u_scream.ogg differ diff --git a/mods/emote_panel/sound/unathi/f_u_scream2.ogg b/mods/emote_panel/sound/unathi/f_u_scream2.ogg new file mode 100644 index 0000000000000..06c72dbdea655 Binary files /dev/null and b/mods/emote_panel/sound/unathi/f_u_scream2.ogg differ diff --git a/mods/emote_panel/sound/unathi/m_u_scream.ogg b/mods/emote_panel/sound/unathi/m_u_scream.ogg new file mode 100644 index 0000000000000..30255bf49c4fd Binary files /dev/null and b/mods/emote_panel/sound/unathi/m_u_scream.ogg differ diff --git a/mods/emote_panel/sound/unathi/m_u_scream2.ogg b/mods/emote_panel/sound/unathi/m_u_scream2.ogg new file mode 100644 index 0000000000000..841fbcc36c60e Binary files /dev/null and b/mods/emote_panel/sound/unathi/m_u_scream2.ogg differ diff --git a/mods/emote_panel/sound/unathi/roar.ogg b/mods/emote_panel/sound/unathi/roar.ogg new file mode 100644 index 0000000000000..f286ebd35e094 Binary files /dev/null and b/mods/emote_panel/sound/unathi/roar.ogg differ diff --git a/mods/emote_panel/sound/unathi/roar2.ogg b/mods/emote_panel/sound/unathi/roar2.ogg new file mode 100644 index 0000000000000..1674bb756eba4 Binary files /dev/null and b/mods/emote_panel/sound/unathi/roar2.ogg differ diff --git a/mods/emote_panel/sound/unathi/roar3.ogg b/mods/emote_panel/sound/unathi/roar3.ogg new file mode 100644 index 0000000000000..24d212007b400 Binary files /dev/null and b/mods/emote_panel/sound/unathi/roar3.ogg differ diff --git a/mods/emote_panel/sound/unathi/rumble.ogg b/mods/emote_panel/sound/unathi/rumble.ogg new file mode 100644 index 0000000000000..f9e218f2ce72c Binary files /dev/null and b/mods/emote_panel/sound/unathi/rumble.ogg differ diff --git a/mods/emote_panel/sound/unathi/rumble2.ogg b/mods/emote_panel/sound/unathi/rumble2.ogg new file mode 100644 index 0000000000000..18e353878f9b6 Binary files /dev/null and b/mods/emote_panel/sound/unathi/rumble2.ogg differ diff --git a/mods/emote_panel/sound/unathi/threat.ogg b/mods/emote_panel/sound/unathi/threat.ogg new file mode 100644 index 0000000000000..e101bab110a02 Binary files /dev/null and b/mods/emote_panel/sound/unathi/threat.ogg differ diff --git a/mods/emote_panel/sound/unathi/threat2.ogg b/mods/emote_panel/sound/unathi/threat2.ogg new file mode 100644 index 0000000000000..9560561ba74e8 Binary files /dev/null and b/mods/emote_panel/sound/unathi/threat2.ogg differ diff --git a/mods/emote_panel/sound/whistle.ogg b/mods/emote_panel/sound/whistle.ogg new file mode 100644 index 0000000000000..e8c1a6c90f465 Binary files /dev/null and b/mods/emote_panel/sound/whistle.ogg differ diff --git a/mods/emote_panel/sound/yawn_female_1.ogg b/mods/emote_panel/sound/yawn_female_1.ogg new file mode 100644 index 0000000000000..548be96b76e11 Binary files /dev/null and b/mods/emote_panel/sound/yawn_female_1.ogg differ diff --git a/mods/emote_panel/sound/yawn_female_2.ogg b/mods/emote_panel/sound/yawn_female_2.ogg new file mode 100644 index 0000000000000..67b15056728e5 Binary files /dev/null and b/mods/emote_panel/sound/yawn_female_2.ogg differ diff --git a/mods/emote_panel/sound/yawn_female_3.ogg b/mods/emote_panel/sound/yawn_female_3.ogg new file mode 100644 index 0000000000000..12d42db2440e1 Binary files /dev/null and b/mods/emote_panel/sound/yawn_female_3.ogg differ diff --git a/mods/emote_panel/sound/yawn_male_1.ogg b/mods/emote_panel/sound/yawn_male_1.ogg new file mode 100644 index 0000000000000..193f598745848 Binary files /dev/null and b/mods/emote_panel/sound/yawn_male_1.ogg differ diff --git a/mods/emote_panel/sound/yawn_male_2.ogg b/mods/emote_panel/sound/yawn_male_2.ogg new file mode 100644 index 0000000000000..4064029e1e34a Binary files /dev/null and b/mods/emote_panel/sound/yawn_male_2.ogg differ diff --git a/mods/ex666_ecosystem/README.md b/mods/ex666_ecosystem/README.md new file mode 100644 index 0000000000000..42dd9a787de05 --- /dev/null +++ b/mods/ex666_ecosystem/README.md @@ -0,0 +1,97 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/901 + + + +## Экосистема EX666 + +ID мода: EX666_ECOSYSTEM + + +### Описание мода + +Подключает Сьерру к экосистеме EX666. + + +### Изменения *кор кода* + +- `code/contorllers/configuration.dm`: + - `/datum/configuration/proc/load_config()` + - `/datum/configuration/proc/load_sql()` +- `code/game/world.dm`: `/world/Topic()` +- `code/modules/admin/DB ban/functions.dm`: + - `/proc/_DB_ban_record()` + - `/datum/admins/proc/DB_ban_unban()` + - `/datum/admins/proc/DB_ban_unban_by_id()` + - `/datum/admins/proc/DB_ban_panel()` +- `code/modules/admin/IsBanned.dm`: `/world/IsBanned()` +- `code/modules/admin/admin.dm`: `/datum/admins/proc/show_player_panel()` +- `code/modules/admin/admin_ranks.dm`: + - `/proc/load_admin_ranks()` + - `/proc/load_admins()` +- `code/modules/admin/banjob.dm`: `/proc/jobban_loadbanfile()` +- `code/modules/admin/connectioncheck/bancheck_functions.dm`: + - `/proc/_fetch_bans()` + - `/proc/_find_bans_in_connections()` +- `code/modules/admin/topic.dm`: `/datum/admins/Topic()` +- `code/modules/new_player/login.dm`: `/mob/new_player/Login()` +- `code/modules/client/client_procs.dm`: `/client/New()` + + +### Оверрайды + +- `mods/_master_files/code/modules/mob/new_player/new_player.dm`: `/mob/new_player/Topic()` + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +SuhEugene + diff --git a/mods/ex666_ecosystem/_ex666_ecosystem.dm b/mods/ex666_ecosystem/_ex666_ecosystem.dm new file mode 100644 index 0000000000000..0fa2e49ce92ce --- /dev/null +++ b/mods/ex666_ecosystem/_ex666_ecosystem.dm @@ -0,0 +1,4 @@ +/singleton/modpack/ex666_ecosystem + name = "Экосистема EX666" + desc = "Подключает Сьерру к экосистеме EX666." + author = "SuhEugene" diff --git a/mods/ex666_ecosystem/_ex666_ecosystem.dme b/mods/ex666_ecosystem/_ex666_ecosystem.dme new file mode 100644 index 0000000000000..e4650907fd9b1 --- /dev/null +++ b/mods/ex666_ecosystem/_ex666_ecosystem.dme @@ -0,0 +1,19 @@ +#ifndef MODPACK_EX666_ECOSYSTEM +#define MODPACK_EX666_ECOSYSTEM + +#include "_ex666_ecosystem.dm" + +#include "code/database.dm" +#include "code/discord.dm" +#include "code/whitelist.dm" + +#include "code/experience/_defines.dm" +#include "code/experience/exp_job.dm" +#include "code/experience/exp_species.dm" +#include "code/experience/subsystem.dm" +#include "code/experience/_undefines.dm" // Чтоб всё работало, он должен быть последним +#include "code/xeno_whitelist/_defines.dm" +#include "code/xeno_whitelist/xeno_whitelist.dm" +#include "code/xeno_whitelist/xeno_webhook.dm" + +#endif diff --git a/mods/ex666_ecosystem/code/database.dm b/mods/ex666_ecosystem/code/database.dm new file mode 100644 index 0000000000000..33540f8c7f6ea --- /dev/null +++ b/mods/ex666_ecosystem/code/database.dm @@ -0,0 +1 @@ +var/global/sqlfdbkdbutil = "test" diff --git a/mods/ex666_ecosystem/code/discord.dm b/mods/ex666_ecosystem/code/discord.dm new file mode 100644 index 0000000000000..554b7ab434d0b --- /dev/null +++ b/mods/ex666_ecosystem/code/discord.dm @@ -0,0 +1,48 @@ +/client + var/discord_id = null + var/discord_name = null + +/client/proc/load_player_discord(client/C) + establish_db_connection() + if(!dbcon.IsConnected()) + return + + var/sql_ckey = sql_sanitize_text(C.ckey) + + var/DBQuery/query = dbcon.NewQuery("SELECT `discord_id`, `discord_name` FROM `erro_player` WHERE `ckey` = '[sql_ckey]'") + query.Execute() + + if(query.NextRow()) + discord_id = sanitize_text(query.item[1]) + discord_name = sanitize_text(query.item[2]) + +/client/verb/link_discord_account() + set name = "Привязка Discord" + set category = "Special Verbs" + set desc = "Привязать аккаунт Discord для удобного просмотра игровой статистики на нашем Discord-сервере." + + if(!config.discord_url) + return + + if(IsGuestKey(key)) + to_chat(usr, "Гостевой аккаунт не может быть привязан.") + return + + load_player_discord(usr) + + if(discord_id && length(discord_id) < 32) + to_chat(usr, SPAN_CLASS("darkmblue", "Аккаунт Discord уже привязан! Чтобы отвязать используйте команду [SPAN_CLASS("boldannounce", "!отвязать_аккаунт")] в канале #дом-бота в Discord-сообществе!")) + return + + var/token = md5("[world.time+rand(1000,1000000)]") + if(dbcon.IsConnected()) + var/sql_ckey = sql_sanitize_text(ckey(key)) + var/DBQuery/query_update_token = dbcon.NewQuery("UPDATE `erro_player` SET `discord_id` = '[token]' WHERE `ckey` = '[sql_ckey]'") + + if(!query_update_token.Execute()) + to_chat(usr, "Ошибка записи токена в БД! Обратитесь к администрации.") + log_debug("link_discord_account: failed db update discord_id for ckey [ckey]") + return + + to_chat(usr, SPAN_CLASS("darkmblue", "Для завершения используйте команду [SPAN_CLASS("boldannounce", "!привязать_аккаунт [token]")] в канале #дом-бота в Discord-сообществе!")) + load_player_discord(usr) diff --git a/mods/ex666_ecosystem/code/experience/_defines.dm b/mods/ex666_ecosystem/code/experience/_defines.dm new file mode 100644 index 0000000000000..d30bc5de6866f --- /dev/null +++ b/mods/ex666_ecosystem/code/experience/_defines.dm @@ -0,0 +1,15 @@ +#define EXP_TYPE_LIVING "Living" +#define EXP_TYPE_CREW "Crew" +#define EXP_TYPE_GHOST "Ghost" +#define EXP_TYPE_COMMAND "Command" +#define EXP_TYPE_ENGINEERING "Engineering" +#define EXP_TYPE_MEDICAL "Medical" +#define EXP_TYPE_SCIENCE "Science" +#define EXP_TYPE_SUPPLY "Supply" +#define EXP_TYPE_SERVICE "Service" +#define EXP_TYPE_EXPLORATION "Exploration" +#define EXP_TYPE_SECURITY "Security" +#define EXP_TYPE_SILICON "Silicon" +#define EXP_TYPE_CIVILIAN "Civilian" +#define EXP_TYPE_SUBMAP "Submap" +#define EXP_TYPE_SPECIAL "Special" diff --git a/mods/ex666_ecosystem/code/experience/_undefines.dm b/mods/ex666_ecosystem/code/experience/_undefines.dm new file mode 100644 index 0000000000000..03bf9ba0ee268 --- /dev/null +++ b/mods/ex666_ecosystem/code/experience/_undefines.dm @@ -0,0 +1,15 @@ +#undef EXP_TYPE_LIVING +#undef EXP_TYPE_CREW +#undef EXP_TYPE_GHOST +#undef EXP_TYPE_COMMAND +#undef EXP_TYPE_ENGINEERING +#undef EXP_TYPE_MEDICAL +#undef EXP_TYPE_SCIENCE +#undef EXP_TYPE_SUPPLY +#undef EXP_TYPE_SERVICE +#undef EXP_TYPE_EXPLORATION +#undef EXP_TYPE_SECURITY +#undef EXP_TYPE_SILICON +#undef EXP_TYPE_CIVILIAN +#undef EXP_TYPE_SUBMAP +#undef EXP_TYPE_SPECIAL diff --git a/mods/ex666_ecosystem/code/experience/exp_job.dm b/mods/ex666_ecosystem/code/experience/exp_job.dm new file mode 100644 index 0000000000000..4ac6bcacf44ef --- /dev/null +++ b/mods/ex666_ecosystem/code/experience/exp_job.dm @@ -0,0 +1,117 @@ +GLOBAL_LIST_INIT(command_positions, list( + "Captain", + "Head of Personnel", + "Research Director", + "Chief Medical Officer", + "Chief Engineer", + "Head of Security", + "Internal Affairs Agent", + "Adjutant" +)) + +GLOBAL_LIST_INIT(engineering_positions, list( + "Chief Engineer", + "Senior Engineer", + "Engineer", + "Engineer Trainee", + "Information Technician", + "Field Engineer" +)) + +GLOBAL_LIST_INIT(medical_positions, list( + "Chief Medical Officer", + "Surgeon", + "Doctor", + "Intern", + "Chemist", + "Counselor", + "Field Medic" +)) + +GLOBAL_LIST_INIT(science_positions, list( + "Research Director", + "Senior Researcher", + "Scientist", + "Roboticist", + "Research Assistant" +)) + +GLOBAL_LIST_INIT(supply_positions, list( + "Quartermaster", + "Prospector", + "Cargo Technician", + "Cargo Assistant" +)) + +GLOBAL_LIST_INIT(service_positions, list( + "Head of Personnel", + "Chaplain", + "Janitor", + "Chef", + "Bartender", + "Actor" +)) + +GLOBAL_LIST_INIT(exploration_positions, list( + "Exploration Leader", + "Explorer", + "Expeditionary Pilot", + "Field Medic", + "Field Engineer" +)) + + +GLOBAL_LIST_INIT(security_positions, list( + "Head of Security", + "Warden", + "Criminal Investigator", + "Security Guard", + "Security Cadet" +)) + +GLOBAL_LIST_INIT(silicon_positions, list( + "AI", + "pAI", + "Robot" +)) + +GLOBAL_LIST_INIT(civilian_positions, list( + "Crewman" +)) + +GLOBAL_LIST_INIT(submap_positions, get_submap_position_titles()) + + +// We hardcoded this list, because of two reasons: +// 1. The way it should be saved in Database (list2params) +// 2. Jobs can't 100% accuratly divided into groups +GLOBAL_LIST_INIT(job_exp_type_to_job_titles, list( + EXP_TYPE_LIVING = list(), // all living mobs + EXP_TYPE_CREW = command_positions | engineering_positions | medical_positions | science_positions | supply_positions | service_positions | exploration_positions | security_positions | silicon_positions | civilian_positions, // crew positions + EXP_TYPE_GHOST = list(), // dead people, observers + EXP_TYPE_COMMAND = command_positions, + EXP_TYPE_ENGINEERING = engineering_positions, + EXP_TYPE_MEDICAL = medical_positions, + EXP_TYPE_SCIENCE = science_positions, + EXP_TYPE_SUPPLY = supply_positions, + EXP_TYPE_SERVICE = service_positions, + EXP_TYPE_EXPLORATION = exploration_positions, + EXP_TYPE_SECURITY = security_positions, + EXP_TYPE_SILICON = silicon_positions, + EXP_TYPE_CIVILIAN = civilian_positions, + EXP_TYPE_SUBMAP = submap_positions, // submap roles like merchants, vox, patrole ship, etc + EXP_TYPE_SPECIAL = list(), // antags, ERT, etc +)) + +/** + * Get all submap role titles + */ +/proc/get_submap_position_titles() + var/list/submap_role_paths = typesof(/datum/job/submap) + var/list/submap_role_titles = list() + for (var/datum/job/path as anything in submap_role_paths) + var/initial_title = initial(path.title) + if(initial_title) + submap_role_titles |= (initial_title) + + return submap_role_titles diff --git a/mods/ex666_ecosystem/code/experience/exp_species.dm b/mods/ex666_ecosystem/code/experience/exp_species.dm new file mode 100644 index 0000000000000..5f71b1c7bd198 --- /dev/null +++ b/mods/ex666_ecosystem/code/experience/exp_species.dm @@ -0,0 +1,47 @@ +// We hardcode it, because current system for saving is not expandable or shrinkable. +// Otherwise some of the saved experience will be lost +GLOBAL_LIST_INIT(species_to_save_experice_for, list( + SPECIES_VOX, + SPECIES_DIONA, + SPECIES_IPC, + SPECIES_SKRELL, + SPECIES_TAJARA, + SPECIES_ADHERENT, + SPECIES_NABBER, + SPECIES_UNATHI, + SPECIES_HUMAN +)) + +GLOBAL_LIST_INIT(species_to_names_map, init_species_to_names_map()) + +/** + * Get species initial names by path. + * + * Arguments + ** species_paths - paths of species datums, for which to find initial name. Default list(/datum/species) + */ +/proc/get_species_names(list/datum/species/species_paths = list(/datum/species)) + var/list/species_names = list() + + // We use as anything for path, to bypass type check, as this doesn't work for path + for (var/datum/species/path as anything in species_paths) + var/initial_name = initial(path.name) + if (initial_name) + species_names |= initial_name + + return species_names + +/** + * Initialize species archetype name to all subtypes names map. + */ +/proc/init_species_to_names_map() + var/list/species_to_names_map = list() + var/list/datum/species/species_paths = typesof(/datum/species) + + // We use as anything for path, to bypass type check, as this doesn't work for path + for (var/datum/species/path as anything in species_paths) + var/initial_name = initial(path.name) + if (initial_name in GLOB.species_to_save_experice_for) + species_to_names_map[initial_name] = get_species_names(typesof(path)) + + return species_to_names_map diff --git a/mods/ex666_ecosystem/code/experience/subsystem.dm b/mods/ex666_ecosystem/code/experience/subsystem.dm new file mode 100644 index 0000000000000..4ddbcaf1bdd65 --- /dev/null +++ b/mods/ex666_ecosystem/code/experience/subsystem.dm @@ -0,0 +1,220 @@ +#define SSEXP_STEP_WAIT 0 +#define SSEXP_STEP_GET_EXP 1 +#define SSEXP_STEP_UPDATE_EXP 2 + +SUBSYSTEM_DEF(experience) + name = "Player Experience" + wait = 0.5 SECONDS + init_order = SS_INIT_MISC_LATE + flags = SS_NO_INIT | SS_NEEDS_SHUTDOWN + var/step = SSEXP_STEP_WAIT + var/last_check = 0 + var/interval = 5 MINUTES + var/max_queries_per_tick = 20 + + var/list/client/clients_to_process + + /// List of SELECT queries to mass grab EXP. + var/list/DBQuery/select_queries_queue + /// List of SELECT queries with grabbed EXP. + var/list/DBQuery/select_queries + + /// List of queries to update player EXP + var/list/DBQuery/player_update_queries + /// List of queries to update the playtime history table + var/list/DBQuery/playtime_history_update_queries + + var/list/old_exp_records = list() // Assoc List of ckey to exp + var/list/old_species_exp_records = list() // Assoc List of ckey to species exp + +/datum/controller/subsystem/experience/fire(resumed = FALSE) + + if (step == SSEXP_STEP_WAIT && (world.realtime - last_check) < interval) + return + + establish_db_connection() + if (!dbcon.IsConnected()) + log_debug("No connections to database while updating player experience in [src.type]") + last_check = world.realtime + step = SSEXP_STEP_WAIT + return + + switch (step) + if (SSEXP_STEP_WAIT) + populate_select_queue() + if (SSEXP_STEP_GET_EXP) + execute_select_queue() + get_player_exp() + if (SSEXP_STEP_UPDATE_EXP) + populate_update_queue() + + +/datum/controller/subsystem/experience/proc/populate_select_queue() + last_check = world.realtime + var/minutes_to_add = interval / (1 MINUTE) + + // Get a list of clients to process + // This is copied so that clients joining in the middle of this dont break things + clients_to_process = GLOB.clients.Copy() + log_debug("Starting EXP update for [LAZYLEN(clients_to_process)] clients. (Adding [minutes_to_add] minutes)") + + select_queries_queue = list() + for (var/client/client as anything in clients_to_process) + // If a client logs out in the middle of this or has no mob or mind + if(!client || !client.mob || !client.mob.mind) + clients_to_process.Remove(client) + continue + + var/sql_ckey = sql_sanitize_text(client.ckey) + select_queries_queue[client.ckey] = dbcon.NewQuery("SELECT `exp`, `species_exp` FROM `erro_player` WHERE `ckey` = '[sql_ckey]'") + + step = SSEXP_STEP_GET_EXP + + +/datum/controller/subsystem/experience/proc/execute_select_queue() + LAZYINITLIST(select_queries) + + var/i = 1 + for (var/ckey in select_queries_queue) + if (i++ > max_queries_per_tick) + return + + var/DBQuery/query = select_queries_queue[ckey] + query.Execute() + + select_queries_queue.Remove(ckey) + select_queries[ckey] = query + + // When all the queue was processed we can continue to updates + // Next will be called proc get_player_exp() and next tick - next step + step = SSEXP_STEP_UPDATE_EXP + + +/datum/controller/subsystem/experience/proc/get_player_exp() + LAZYINITLIST(old_exp_records) + LAZYINITLIST(old_species_exp_records) + + for (var/client/client as anything in clients_to_process) + // If a client logs out in the middle of this or has no mob or mind + if(!client || !client.mob || !client.mob.mind || !select_queries[client.ckey]) + clients_to_process.Remove(client) + continue + + while(select_queries[client.ckey].NextRow()) + old_exp_records[client.ckey] = params2list(select_queries[client.ckey].item[1]) + old_species_exp_records[client.ckey] = params2list(select_queries[client.ckey].item[2]) + + for(var/item in select_queries) + qdel(select_queries[item]) + select_queries.Cut() + + +/datum/controller/subsystem/experience/proc/populate_update_queue() + + player_update_queries = list() // List of queries to update player EXP + playtime_history_update_queries = list() // List of queries to update the playtime history table + + var/minutes_to_add = interval / (1 MINUTE) + + // Loop to update player experience + for(var/client/client as anything in clients_to_process) + // If a client logs out in the middle of this or has no mob or mind + if(!client || !client.mob || !client.mob.mind) + clients_to_process.Remove(client) + continue + + var/list/new_exp_records = create_exp_records(GLOB.job_exp_type_to_job_titles, old_exp_records[client.ckey]) + var/list/new_species_exp_records = create_exp_records(GLOB.species_to_names_map, old_species_exp_records[client.ckey]) + + var/role = client.mob.mind.assigned_role + var/species = client.mob.dna?.species + var/added_living = 0 + var/added_ghost = 0 + if(client.mob.stat != DEAD) + if(role) + new_exp_records[EXP_TYPE_LIVING] += minutes_to_add + added_living += minutes_to_add + + for(var/job_exp_type in GLOB.job_exp_type_to_job_titles) + if(role in GLOB.job_exp_type_to_job_titles[job_exp_type]) + new_exp_records[job_exp_type] += minutes_to_add // Add played time to current player's job experience + + // To avoid double logging for submap positions and special roles, + // that are mostly antags, there is check for presence in submap_positions list + if(client.mob.mind.special_role && !(role in GLOB.submap_positions)) + new_exp_records[EXP_TYPE_SPECIAL] += minutes_to_add + + if(species) + for(var/species_type in GLOB.species_to_names_map) + if(species in GLOB.species_to_names_map[species_type]) + new_species_exp_records[species_type] += minutes_to_add // Add played time to current player's species experience + break // Mob can't be multiple species at the same time, so we break as we found needed `species` + + else if(isobserver(client.mob)) + new_exp_records[EXP_TYPE_GHOST] += minutes_to_add + added_ghost += minutes_to_add + else + continue + + var/updated_exp = list2params(new_exp_records) + var/updated_species_exp = list2params(new_species_exp_records) + + var/sql_ckey = sql_sanitize_text(client.ckey) + var/DBQuery/player_update_query = dbcon.NewQuery({" + UPDATE `erro_player` + SET + `exp` = [updated_exp], + `species_exp` = [updated_species_exp], + `lastseen` = NOW() + WHERE + `ckey` = '[sql_ckey]' + "}) + + player_update_queries += player_update_query + + var/DBQuery/update_query_history = dbcon.NewQuery({" + INSERT + INTO `erro_playtime_history` + (`ckey`, `date`, `time_living`, `time_ghost`) + VALUES + ('[sql_ckey]', CURDATE(), [added_living], [added_ghost]) + ON DUPLICATE KEY + UPDATE + `time_living` = `time_living` + VALUES(`time_living`), + `time_ghost` = `time_ghost` + VALUES(`time_ghost`) + "}) + + playtime_history_update_queries += update_query_history + + execute_update_queue() + +/datum/controller/subsystem/experience/proc/execute_update_queue() + + for (var/DBQuery/query as anything in player_update_queries) + invoke_async(query, TYPE_PROC_REF(/DBQuery, Execute)) + player_update_queries.Cut() + + for (var/DBQuery/query as anything in playtime_history_update_queries) + invoke_async(query, TYPE_PROC_REF(/DBQuery, Execute)) + playtime_history_update_queries.Cut() + + log_debug("Successfully requested update of all EXP data in [(world.realtime - last_check)/10]s") + step = SSEXP_STEP_WAIT + +/datum/controller/subsystem/experience/proc/create_exp_records(list/exp_map, list/old_records) + if (!old_records) + old_records = list() + + var/list/new_records = list() + for(var/exp_type in exp_map) + var/old_exp_value = text2num(old_records[exp_type]) + if(old_exp_value) + new_records[exp_type] = old_exp_value + else + new_records[exp_type] = 0 + + return new_records + +#undef SSEXP_STEP_WAIT +#undef SSEXP_STEP_GET_EXP +#undef SSEXP_STEP_UPDATE_EXP diff --git a/mods/ex666_ecosystem/code/whitelist.dm b/mods/ex666_ecosystem/code/whitelist.dm new file mode 100644 index 0000000000000..6610615897d51 --- /dev/null +++ b/mods/ex666_ecosystem/code/whitelist.dm @@ -0,0 +1,31 @@ +/datum/configuration + var/usewhitelist_database = FALSE + var/overflow_server_url + var/minimum_byondacc_age + +/mob/new_player/proc/whitelist_check() + // Admins are immune to overflow rerouting + if(!config.usewhitelist_database) + return TRUE + if(check_rights(rights_required = 0, show_msg = 0)) + return TRUE + establish_db_connection() + // Whitelisted people are immune to overflow rerouting. + if(dbcon.IsConnected()) + var/dbckey = sql_sanitize_text(src.ckey) + var/DBQuery/find_ticket = dbcon.NewQuery({" + SELECT `ckey` + FROM `ckey_whitelist` + WHERE `ckey`='[dbckey]' + AND `is_valid` = true + AND `port` = [world.port] + AND `date_start` <= NOW() + AND (NOW() < `date_end` OR `date_end` IS NULL) + "}) + if(!find_ticket.Execute()) + log_error(dbcon.ErrorMsg()) + return FALSE + if(!find_ticket.NextRow()) + return FALSE + return TRUE + return FALSE diff --git a/mods/ex666_ecosystem/code/xeno_whitelist/_defines.dm b/mods/ex666_ecosystem/code/xeno_whitelist/_defines.dm new file mode 100644 index 0000000000000..a4525c779a495 --- /dev/null +++ b/mods/ex666_ecosystem/code/xeno_whitelist/_defines.dm @@ -0,0 +1,2 @@ +#define WEBHOOK_XENO_WHITELIST "webhook_xeno_whitelist" +#define COLOR_WEBHOOK_XENO 0xf2b000 diff --git a/mods/ex666_ecosystem/code/xeno_whitelist/xeno_webhook.dm b/mods/ex666_ecosystem/code/xeno_whitelist/xeno_webhook.dm new file mode 100644 index 0000000000000..de1a9a4658e0c --- /dev/null +++ b/mods/ex666_ecosystem/code/xeno_whitelist/xeno_webhook.dm @@ -0,0 +1,88 @@ +/singleton/webhook/xeno_msg + id = WEBHOOK_XENO_WHITELIST + +/singleton/webhook/xeno_msg/get_message(list/data) + . = ..() + + if(!length(data)) + .["content"] = "Тут должно быть сообщение о вайтлисте, но кто то вызвал вебхук вручную." + return + + if(!data["grant"] && !data["revoke"]) + return + if(!data["ckey"]) data["ckey"] = "ДАННЫЕ УДАЛЕНЫ" + if(!data["type"]) data["type"] = "ДАННЫЕ УДАЛЕНЫ" + + var/list/desc = list() + desc["title"] = "Ксеномодератор - [data["ckey"]]" + desc["description"] = "Изменения внесены в [data["type"]]" + desc["color"] = COLOR_WEBHOOK_XENO + desc["author"] = list( + "name" = "Изменение вайтлиста на расы", + "icon_url" = "https://cdn.discordapp.com/emojis/244791612268347392.png") // :inf: emoji + + var/list/grant = data["grant"] + var/list/revoke = data["revoke"] + var/icon = "https://cdn.discordapp.com/emojis/680793066415980576.png" // :SeemsRichKot: emoji + if(length(revoke) >= length(grant)) + icon = "https://cdn.discordapp.com/emojis/601028456675016706.png" // :resomisad: emoji + desc["thumbnail"] = list("url" = icon) +/* + var/list/unite = list() + + for(var/ckey in grant) + var/list/temp = list() + var/list/check = grant[ckey] + for(var/race in check) + temp += "++[race]" + unite[ckey] += list(temp) + for(var/ckey in revoke) + var/list/temp = list() + var/list/check = revoke[ckey] + for(var/race in check) + temp += "--[race]" + unite[ckey] += list(temp) +*/ + var/list/A = list() + var/list/B = list() + for(var/ckey in grant) + var/list/check = grant[ckey] + for(var/race in check) + B += "+ [race]" + A[ckey] = B.Copy() + B.Cut() + grant = A.Copy() + A.Cut() + B.Cut() + for(var/ckey in revoke) + var/list/check = revoke[ckey] + for(var/race in check) + B += "- [race]" + A[ckey] = B.Copy() + B.Cut() + revoke = A.Copy() + + var/list/unite = list() + for(var/ckey in grant) + unite[ckey] = grant[ckey] + for(var/ckey in revoke) + unite[ckey] += revoke[ckey] + + if(!length(unite)) + .["content"] = "Сюда пришло изменение вайтлиста, но мы потеряли список." + return + var/list/fields = list() + unite = sortAssoc(unite) //sorting by ckey + for(var/ckey2 in unite) + var/list/check = unite[ckey2] + check = sortList(check) //sorting by race + var/list/text = list("diff") + for(var/race in check) + text += race + fields[++length(fields)] = list( + "name" = ckey2, + "value" = "```[jointext(text, "\n")]```" + ) + if(length(fields)) + desc["fields"] = fields + .["embeds"] = list(desc) diff --git a/mods/ex666_ecosystem/code/xeno_whitelist/xeno_whitelist.dm b/mods/ex666_ecosystem/code/xeno_whitelist/xeno_whitelist.dm new file mode 100644 index 0000000000000..8df3438ea441a --- /dev/null +++ b/mods/ex666_ecosystem/code/xeno_whitelist/xeno_whitelist.dm @@ -0,0 +1,535 @@ +var/global/list/admin_verbs_xeno = list( + /datum/admins/proc/PlayerNotes, + /datum/admins/proc/xeno_whitelist_panel +) + +/client/add_admin_verbs() + ..() + if(holder) + if(holder.rights & R_XENO) verbs += admin_verbs_xeno + +#define HOLDER_LIST list(SPECIES_FBP) + +/datum/admins/proc/xeno_whitelist_panel() + set name = "Xenos Whitelist Panel" + set desc = "Use this to edit players xenowhitelist. Yupi!" + set category = "Admin" + + if(!usr.client) return + + if(!istype(src,/datum/admins)) + src = usr.client.holder + if(!istype(src,/datum/admins)) + to_chat(usr, "Error: you are not an admin!") + return + + if(!check_rights(R_XENO)) + if(!check_rights(R_DEBUG)) + to_chat(usr, "Access Denied!") + return + log_admin("[key_name(usr)] access xeno whitelist via debug.") + message_staff("[key_name_admin(usr)] currently debugging xeno whitelist.") + + var/datum/nano_module/xenopanel/NM = locate("xenoui_[usr.ckey]") + if(!NM) + NM = new /datum/nano_module/xenopanel(usr) + NM.tag = "xenoui_[usr.ckey]" + NM.ui_interact(usr) + +/* + This state checks that the user is an ~~admin~~ XenoModerator, end of story +*/ +GLOBAL_DATUM_INIT(xeno_state, /datum/topic_state/admin_state/xeno, new) + +/datum/topic_state/admin_state/xeno/can_use_topic(src_object, mob/user) + return check_rights(R_XENO|R_DEBUG, 0, user) ? STATUS_INTERACTIVE : STATUS_CLOSE + + +/datum/nano_module/xenopanel + var/alternate = FALSE // 0 - current whitelist, 1 - not used whitelist + var/list/used = list() + var/list/noused = list() + var/list/lowerxenoname = list() + var/sortkey = "ckey" + var/datum/nanoui/myui // Shame on me + +/datum/nano_module/xenopanel/New() + .=..() + for(var/s in all_species) + var/datum/species/species = all_species[s] + if(species.spawn_flags & SPECIES_IS_WHITELISTED) + if(!(lowertext(species.whitelistName()) in lowerxenoname)) + lowerxenoname.Add("[lowertext(species.whitelistName())]") + for(var/s2 in HOLDER_LIST) + lowerxenoname.Add("[lowertext(s2)]") + used = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(FALSE), lowerxenoname), sortkey) + noused = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(TRUE), lowerxenoname), sortkey) + +/datum/nano_module/xenopanel/CanUseTopic(mob/user, datum/topic_state/state = GLOB.xeno_state) + . = ..() + +/datum/nano_module/xenopanel/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.xeno_state) + var/list/data = list() + data["searchbox"] = "
    New ckey
    " + data["sorting"] = sortkey + data["debug"] = check_rights(R_DEBUG) + data["mode"] = alternate + establish_db_connection() + data["SQL"] = dbcon.IsConnected() // -2 No connection, disabled, -1 Connected, config setup, 0 No connection, SQL setup, 1 Connected, SQL use setup + if(!config.usealienwhitelistSQL) + data["SQL"] = data["SQL"] ? -1 : -2 + data["disabled"] = !config.usealienwhitelist + data["currentlist"] = alternate ? noused : used + data["lowerallxenos"] = lowerxenoname + + ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "xeno_whitelist.tmpl", "XenoWhitelist Panel", 3000, 1000, src, state = state) + ui.set_initial_data(data) + ui.open() + myui = ui + +/datum/nano_module/xenopanel/Topic(href, href_list, state) + if(..()) + return 1 + if(href_list["close"]) // This is called when the window is closed; we've signed up to get notified of it. + qdel(src) + return 1 + if (href_list["mode"]) + alternate = text2num(href_list["mode"]) + . = TOPIC_REFRESH + + else if (href_list["DBreconnect"]) + establish_db_connection() + if(dbcon.IsConnected()) + used = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(FALSE), lowerxenoname), "ckey") + noused = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(TRUE), lowerxenoname), "ckey") + . = TOPIC_REFRESH + else + to_chat(usr, "Не удалось установить подключение к БД") + . = TOPIC_NOACTION + + else if (href_list["ckey"] && href_list["race"]) + var/list/l = alternate ? noused : used + var/list/ckey + for(ckey in l) + if(ckey["ckey"] == href_list["ckey"]) + break + if(!ckey) + log_admin("Error: Alien Whitelist Panel - unknown ckey marker found. Ckey [href_list["ckey"]]; Race [href_list["race"]]") + message_staff("Error: Alien Whitelist Panel - unknown ckey marker found. Ckey [href_list["ckey"]]; Race [href_list["race"]]") + return TOPIC_NOACTION + if(href_list["race"] in ckey["YES"]) + ckey["YES"] -= list(href_list["race"]) + ckey["REVOKE"] += list(href_list["race"]) + else if(href_list["race"] in ckey["REVOKE"]) + ckey["REVOKE"] -= list(href_list["race"]) + ckey["YES"] += list(href_list["race"]) + else if(href_list["race"] in ckey["NO"]) + ckey["NO"] -= list(href_list["race"]) + ckey["GRANT"] += list(href_list["race"]) + else if(href_list["race"] in ckey["GRANT"]) + ckey["GRANT"] -= list(href_list["race"]) + ckey["NO"] += list(href_list["race"]) + else + log_admin("Error: Alien Whitelist Panel - unknown species found. Ckey [href_list["ckey"]]; Race [href_list["race"]]") + message_staff("Error: Alien Whitelist Panel - unknown species found. Ckey [href_list["ckey"]]; Race [href_list["race"]]") + . = TOPIC_REFRESH + + else if (href_list["sorting"]) + sortkey = href_list["sorting"] + used = SortByRace(used, sortkey) + noused = SortByRace(noused, sortkey) + . = TOPIC_REFRESH + + else if (href_list["send"]) + var/list/l = alternate ? noused : used + var/list/grant = list() + var/list/revoke = list() + for(var/list/ckey in l) + var/list/local = ckey["GRANT"] + if(length(local)) + grant["[ckey["ckey"]]"] += local + local = ckey["REVOKE"] + if(length(local)) + revoke["[ckey["ckey"]]"] += local + var/success + if(!alternate) + if(config.usealienwhitelistSQL) + success = upload_SQL(usr, grant, revoke) + else + success = upload_CONFIG(usr, grant, revoke) + else + if(!config.usealienwhitelistSQL) + success = upload_SQL(usr, grant, revoke) + else + success = upload_CONFIG(usr, grant, revoke) + if(!success) + log_admin("Error: Alien Whitelist Panel - Unable to override WL source") + message_staff("Error: Alien Whitelist Panel - Unable to override WL source") + used = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(FALSE), lowerxenoname), "ckey") + noused = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(TRUE), lowerxenoname), "ckey") + . = TOPIC_REFRESH + + else if (href_list["synch"]) + var/list/l + var/list/notlist + if(config.usealienwhitelistSQL) + if(href_list["synch"] == "CDB") + l = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(TRUE), lowerxenoname), "ckey") + notlist = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(FALSE), lowerxenoname), "ckey") + else + l = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(FALSE), lowerxenoname), "ckey") + notlist = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(TRUE), lowerxenoname), "ckey") + else + if(href_list["synch"] == "CDB") + l = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(FALSE), lowerxenoname), "ckey") + notlist = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(TRUE), lowerxenoname), "ckey") + else + l = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(TRUE), lowerxenoname), "ckey") + notlist = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(FALSE), lowerxenoname), "ckey") + + var/nullification = FALSE + if(check_rights(R_SERVER) && length(notlist)) + if(alert("Удалить старые данные, перед тем как заменить их новыми?", "ERASE WARNING", "Удалить и записать новое", "Нет, только добавить") == "Удалить и записать новое") + nullification = TRUE + message_staff("ВНИМАНИЕ: [usr.ckey] готовится сбросить ксеновайтлист в [href_list["synch"] == "CDB" ? "БД" : "конфиг-файле"]!!!") + if(href_list["synch"] == "CDB") + if(alert("Вы уверены что хотите скопировать данные из конфига в БД?\nВсе изменения ниже будут отменены!", "Synch", "Да", "Отмена") == "Отмена") + return TOPIC_NOACTION + else if(href_list["synch"] == "DBC") + if(alert("Вы уверены что хотите скопировать данные из БД в конфиг?\nВсе изменения ниже будут отменены!", "Synch", "Да", "Отмена") == "Отмена") + return TOPIC_NOACTION + else + to_chat(usr, "Ошибка синхронизации: неизвестные адреса синхронизации.") + return TOPIC_NOACTION + + var/list/grant1 = list() + var/list/grant2 = list() + var/list/notgrant = list() + for(var/list/ckey5 in l) + var/list/local = ckey5["YES"] + if(length(local)) + grant1[ckey5["ckey"]] = local + + if(nullification == FALSE) // HARD RESET not need this. + for(var/list/ckey6 in notlist) + var/list/local = ckey6["YES"] + if(length(local)) + notgrant[ckey6["ckey"]] = local + + grant2 = xeno_diff_list(grant1, notgrant) + else // HARD RESET + log_admin("XENOWHITELIST RESET! Type: [href_list["synch"] == "CDB" ? "SQL" : "CONFIG"]. Administrator: [usr.ckey]") + if(href_list["synch"] == "CDB") + var/sql = "DELETE FROM `whitelist` WHERE race IS NOT NULL" + establish_db_connection() + if(!dbcon.IsConnected()) + to_chat(usr, "Обнуление неудалось.") + return TOPIC_NOACTION + var/DBQuery/query_insert = dbcon.NewQuery(sql) + query_insert.Execute() + else + fdel("config/alienwhitelist.txt") + text2file("\n", "config/alienwhitelist.txt") + + if(!length(grant2)) + to_chat(usr, "Нечего переносить.") + return TOPIC_NOACTION + var/success + if(href_list["synch"] == "CDB") + success = upload_SQL(usr, grant2, null) + else + success = upload_CONFIG(usr, grant2, null) + if(!success) + to_chat(usr, "Загрузка неудалась.") + . = TOPIC_REFRESH + + else if (href_list["refresh"]) + if(alert("Вы уверены что хотите синхронизироваться с БД | конфиг-файлом?\nВсе изменения ниже будут отменены!", "Refresh", "Да", "Отмена") == "Отмена") + return TOPIC_NOACTION + used = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(FALSE), lowerxenoname), "ckey") + noused = SortByRace(ParseXenoWhitelist(GetXenoWhitelist(TRUE), lowerxenoname), "ckey") + . = TOPIC_REFRESH + else if (href_list["input"]) + var/input = lowertext(sanitize(href_list["input"])) + sortkey = input + if(!input) + return TOPIC_NOACTION + if(used) + used = inckeysearch(used, input) + if(noused) + noused = inckeysearch(noused, input) + if(myui) + myui.update() + . = TOPIC_REFRESH + +/datum/nano_module/xenopanel/proc/inckeysearch(list/l, ckey) + var/list/newckey = list() + var/list/insort = list() + var/list/notinsort = list() + var/create = TRUE + l = sortByKey(l, "ckey") + for(var/list/check in l) + if(check["ckey"] == ckey) + create = FALSE + newckey[++length(newckey)] = check + else if(findtext(check["ckey"], ckey, 1, length(ckey)+1)) + insort[++length(insort)] = check + else + notinsort[++length(notinsort)] = check + + if(create) + var/list/check = list() + check["ckey"] = ckey + for(var/race in lowerxenoname) + check["NO"] += list(race) + newckey[++length(newckey)] = check + + l.Cut() + l.Add(newckey) + l.Add(insort) + l.Add(notinsort) + return l + +/datum/nano_module/xenopanel/proc/upload_SQL(client/user, list/grant, list/revoke) + . = 1 + user = user.get_client() + if(length(grant)) + for(var/ckey in grant) + var/list/check = grant[ckey] + var/dbckey = sql_sanitize_text("[ckey]") + for(var/race in check) + var/sql = "INSERT INTO `whitelist` (ckey,race) VALUES ('[lowertext(dbckey)]','[lowertext(race)]')" + establish_db_connection() + if(!dbcon.IsConnected()) + return 0 + var/DBQuery/query_insert = dbcon.NewQuery(sql) + query_insert.Execute() + log_admin("Alien Whitelist GRANTED (SQL) by [user.ckey]. [lowertext(dbckey)]: [jointext(check, ", ")]") + message_staff("Alien Whitelist GRANTED (SQL) by [user.ckey]. [lowertext(dbckey)]: [jointext(check, ", ")]") + if(length(revoke)) + for(var/ckey in revoke) + var/list/check = revoke[ckey] + var/dbckey = sql_sanitize_text("[ckey]") + for(var/race in check) + var/sql = "DELETE FROM `whitelist` WHERE ckey = '[lowertext(dbckey)]' AND race = '[lowertext(race)]'" + establish_db_connection() + if(!dbcon.IsConnected()) + return 0 + var/DBQuery/query_insert = dbcon.NewQuery(sql) + query_insert.Execute() + log_admin("Alien Whitelist REVOKED (SQL) by [user.ckey]. [lowertext(dbckey)]: [jointext(check, ", ")]") + message_staff("Alien Whitelist REVOKED (SQL) by [user.ckey]. [lowertext(dbckey)]: [jointext(check, ", ")]") + user = user.get_client() + SSwebhooks.send(WEBHOOK_XENO_WHITELIST, list("ckey" = user.ckey, "grant" = grant, "revoke" = revoke, "type" = "базу данных")) + if(config.usealienwhitelistSQL) + return load_alienwhitelistSQL() + +/datum/nano_module/xenopanel/proc/upload_CONFIG(client/user, list/grant, list/revoke, sort = TRUE) + . = 1 + user = user.get_client() + var/text = file2text("config/alienwhitelist.txt") + if (!text) + log_misc("Failed to load config/alienwhitelist.txt") + return 0 + var/list/l = splittext(text, "\n") + // Empty line in the end + if(l[length(l)] == "") + l -= l[length(l)] + if(length(revoke)) + for(var/ckey in revoke) + var/list/check = revoke[ckey] + for(var/race in check) + l -= "[lowertext(ckey)] - [lowertext(race)]" + log_admin("Alien Whitelist REVOKED (CONFIG) by [user.ckey]. [lowertext(ckey)]: [jointext(check, ", ")]") + message_staff("Alien Whitelist REVOKED (CONFIG) by [user.ckey]. [lowertext(ckey)]: [jointext(check, ", ")]") + if(length(grant)) + for(var/ckey in grant) + var/list/check = grant[ckey] + for(var/race in check) + l += "[lowertext(ckey)] - [lowertext(race)]" + log_admin("Alien Whitelist GRANTED (CONFIG) by [user.ckey]. [lowertext(ckey)]: [jointext(check, ", ")]") + message_staff("Alien Whitelist GRANTED (CONFIG) by [user.ckey]. [lowertext(ckey)]: [jointext(check, ", ")]") + if(!length(l)) + log_misc("Failed to load config/alienwhitelist.txt") + return 0 + // Not working + if(sort) + var/ckeys = list() + var/list/racecheck = list() + for(var/check in l) + var/list/unite = splittext(check, " - ") + var/list/a = list() + if(!unite[1] || !unite[2]) + message_staff("Alien Whitelist ERROR when accessing CONFIG in line '[check]'") + log_admin("Alien Whitelist ERROR when accessing CONFIG in line '[check]'") + continue + a["ckey"] = unite[1] + a["race"] = unite[2] + ckeys += list(a) + if(!(unite[2] in racecheck)) + racecheck[++length(racecheck)] = unite[2] + racecheck = sortList(racecheck) + var/list/result = list() + for(var/check in racecheck) + var/list/ckeys1 = list() + for(var/chekycheck in ckeys) + var/list/local = chekycheck + if(local["race"] == check) + ckeys1 += list(chekycheck) + ckeys1 = sortByKey(ckeys1, "ckey") + result += ckeys1 + ckeys1.Cut() + + l.Cut() + for(var/ChEcK in result) + var/list/key = ChEcK + var/CKEY = key["ckey"] + var/RACE = key["race"] + var/unite = "[CKEY] - [RACE]" + l += unite + SSwebhooks.send(WEBHOOK_XENO_WHITELIST, list("ckey" = user.ckey, "grant" = grant, "revoke" = revoke, "type" = "конфиг-файл")) + text = jointext(l, "\n") + fdel("config/alienwhitelist.txt") + text2file(text, "config/alienwhitelist.txt") + if(!config.usealienwhitelistSQL) + return load_alienwhitelist() + +// Если элемент есть в подлисте - вытаскиваем его повыше +/proc/SortByRace(list/L, race = "ckey") + if(!length(L)) + return + L = sortByKey(L, "ckey") + if(race && !(race == "ckey")) + var/list/insort = list() + var/list/secondsort = list() + var/list/tirhdsort = list() + var/list/notinsort = list() + for(var/list/s in L) + if(lowertext(race) in s["GRANT"]) + insort[++length(insort)] = s + else if(lowertext(race) in s["REVOKE"]) + secondsort[++length(secondsort)] = s + else if(lowertext(race) in s["YES"]) + tirhdsort[++length(tirhdsort)] = s + else + notinsort[++length(notinsort)] = s + L.Cut() + L.Add(insort) + L.Add(secondsort) + L.Add(tirhdsort) + L.Add(notinsort) + return L + +// Для того чтобы уи мог нормально читать дату, нам нужно наш общий список еще раз переделать. Да - говнокод, но зато какой! ~Laxesh +/proc/ParseXenoWhitelist(list/l, list/allspecies) + var/list/A = list() + if(!length(l)) + return + A = splittext(pick(l), " - ") + if(length(A) >= 2) + log_admin("Error: Alien Whitelist SQL usage has been turned on, but list wasn't reloaded.") + message_staff("Error: Alien Whitelist SQL usage has been turned on, but list wasn't reloaded.") + return + A.Cut() + for(var/string in l) + var/list/unite = list() + unite["ckey"] = string + for(var/s in allspecies) + if(s in l[string]) + unite["YES"] += list(s) + else + unite["NO"] += list(s) + A += list(unite) + return A + +// При отключенном вайтлисте - лист не генерится, а так что генерим его сами. +// Получаем лист в структуре - whitelist["ckey"]=list("race1","race2") +/proc/GetXenoWhitelist(not_used_list = FALSE) + var/SQL = config.usealienwhitelistSQL + . = list() + //Нам нужен действующий ВЛ сервера, и он есть. + if(!not_used_list && alien_whitelist) + . = alien_whitelist + //Нам нужен txt ВЛ, и его надо загрузить. (!XOR) + else if(!(not_used_list ^ SQL) || (!alien_whitelist && !SQL)) + var/text = file2text("config/alienwhitelist.txt") + if (text) + . = splittext(text, "\n") + else + return + //Нам нужен SQL ВЛ, и его надо загрузить. (XOR) + else if((not_used_list ^ SQL) || (!alien_whitelist && SQL)) + establish_db_connection() + if(!dbcon.IsConnected()) + return + var/DBQuery/query = dbcon.NewQuery("SELECT * FROM whitelist") + if(!query.Execute()) + to_world_log(dbcon.ErrorMsg()) + return + else + while(query.NextRow()) + var/list/row = query.GetRowData() + if(.[row["ckey"]]) + var/list/A = .[row["ckey"]] + A.Add(row["race"]) + else + .[row["ckey"]] = list(row["race"]) + //Неизвестное состояние + else + return + + //Но при SQL лист по другому формируется. Приводим к общей структуре. + if(SQL ^ not_used_list) + return + var/list/secondary = list() + var/list/l = . + for(var/s in .) + var/list/A = splittext(s, " - ") + if(length(A) < 2) + if(l[length(l)] == s) + break + log_admin("File alien_whitelist parsing error in line: [s]") + message_staff("File alien_whitelist parsing error in line: [s]") + continue + if(A[1] in secondary) + var/list/B = secondary[A[1]] + if(findtext(s, " - All")) + B = list() + for(var/race in all_species) + var/datum/species/species = all_species[race] + if(species.spawn_flags & SPECIES_IS_WHITELISTED) + B.Add("[lowertext(species.name)]") + else + if(!(A[2] in B)) + B.Add(lowertext(A[2])) + else + if(findtext(s, " - All")) + secondary[A[1]] = list() + for(var/race in all_species) + var/datum/species/species = all_species[race] + if(species.spawn_flags & SPECIES_IS_WHITELISTED) + secondary[A[1]] += list("[lowertext(species.name)]") + else + secondary[A[1]] = list(lowertext(A[2])) + . = secondary + +/proc/xeno_diff_list(list/a, list/b) + var/list/result = list() + for(var/check in a) + if(b[check] && islist(b[check]) && islist(a[check])) + var/list/temp = list() + for(var/check2 in a[check]) + if(!(check2 in b[check])) + temp.Add(check2) + if(length(temp)) + result[check] = temp + else if(!b[check]) + result[check] = a[check] + return result +#undef HOLDER_LIST + + +/datum/species/proc/whitelistName(mob/living/carbon/human/H) + return get_bodytype(H) diff --git a/mods/expanded_culture_descriptor/README.md b/mods/expanded_culture_descriptor/README.md new file mode 100644 index 0000000000000..7a31ce778d87e --- /dev/null +++ b/mods/expanded_culture_descriptor/README.md @@ -0,0 +1,313 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1442 + + + +## Expanded Culture Descriptor + +ID мода: EXPANDED_CULTURE_DESCRIPTOR + + +### Описание мода + +Мод включает в себя полный перевод редактора происхождения персонажа, +а также добавляет новые варианты происхождений на основании лора и +контента билда Infinity. +- Редактор бэкграунда персонажей полностью переведен, включая все культуры, происхождения, религии и фракции, существующие на SierraBay и в соседствующих модах; +- Для людей, унати и скреллов добавлены культуры, происхождения и фракции, что были доступны для них на Infinity, но не имелись в наличии на SierraBay; +- Добавлены языки, соответствующие новым культурам - мираниский, авалонский, лорриманский; +- Добавлена новая обложка для миранийского паспорта, улучшено описание авалонского паспорта, добавлены отдельные паспорта для фракций унати. + + +### Изменения *кор кода* + +- `code/__defines/culture.dm`: + - `#define TAG_CULTURE` + - `#define TAG_HOMEWORLD` + - `#define TAG_FACTION` + - `#define TAG_RELIGION` +- `code/modules/client/preference_setup/background/01_culture.dm`: `/datum/category_item/player_setup_item/background/culture/content()` +- `code/modules/client/preference_setup/background/02_language.dm`: + - `/datum/category_item/player_setup_item/background/languages/content()` + - `/datum/category_item/player_setup_item/background/languages/OnTopic()` + - `/datum/category_item/player_setup_item/background/languages/proc/get_language_text()` +- `code/modules/client/preference_setup/background/03_records.dm`: + - `/datum/category_item/player_setup_item/background/records/content()` + - `/datum/category_item/player_setup_item/background/records/OnTopic()` +- `code/modules/culture_descriptor/culture/cultures_serpentid.dm`: `/singleton/cultural_info/culture/nabber/New()` +- `code/modules/culture_descriptor/location/_location.dm`: `/singleton/cultural_info/location/get_text_details()` +- `code/modules/species/species.dm`: `/datum/species/New()` + + +### Оверрайды + +- `mods/_master_files/code/modules/culture_descriptor/_culture.dm`: + - `/singleton/cultural_info/get_text_details()` + - `/singleton/cultural_info/get_description()` +- `mods/_master_files/code/modules/culture_descriptor/culture/cultures_adherent.dm`: `/singleton/cultural_info/culture/adherent` +- `mods/_master_files/code/modules/culture_descriptor/culture/cultures_diona.dm`: `/singleton/cultural_info/culture/diona` +- `mods/_master_files/code/modules/culture_descriptor/culture/cultures_human.dm`: + - `/singleton/cultural_info/culture/generic` + - `/singleton/cultural_info/culture/human` + - `/singleton/cultural_info/culture/human/martian_surfacer` + - `/singleton/cultural_info/culture/human/martian_tunneller` + - `/singleton/cultural_info/culture/human/luna_poor` + - `/singleton/cultural_info/culture/human/luna_rich` + - `/singleton/cultural_info/culture/human/venusian_upper` + - `/singleton/cultural_info/culture/human/venusian_surfacer` + - `/singleton/cultural_info/culture/human/belter` + - `/singleton/cultural_info/culture/human/plutonian` + - `/singleton/cultural_info/culture/human/earthling` + - `/singleton/cultural_info/culture/human/ceti_north` + - `/singleton/cultural_info/culture/human/ceti_south` + - `/singleton/cultural_info/culture/human/ceti_interstate` + - `/singleton/cultural_info/culture/human/spacer_core` + - `/singleton/cultural_info/culture/human/spacer_frontier` + - `/singleton/cultural_info/culture/human/confederate` + - `/singleton/cultural_info/culture/human/gaia` + - `/singleton/cultural_info/culture/human/other` + - `/singleton/cultural_info/culture/human/vatgrown` +- `mods/_master_files/code/modules/culture_descriptor/culture/cultures_ipc.dm`: + - `/singleton/cultural_info/culture/ipc` + - `/singleton/cultural_info/culture/ipc/gen2` + - `/singleton/cultural_info/culture/ipc/gen3` +- `mods/_master_files/code/modules/culture_descriptor/culture/cultures_serpentid.dm`: + - `/singleton/cultural_info/culture/nabber` + - `/singleton/cultural_info/culture/nabber/c` + - `/singleton/cultural_info/culture/nabber/c/plus` + - `/singleton/cultural_info/culture/nabber/b` + - `/singleton/cultural_info/culture/nabber/b/minus` + - `/singleton/cultural_info/culture/nabber/b/plus` + - `/singleton/cultural_info/culture/nabber/a` + - `/singleton/cultural_info/culture/nabber/a/minus` + - `/singleton/cultural_info/culture/nabber/a/plus` +- `mods/_master_files/code/modules/culture_descriptor/culture/cultures_skrell.dm`: + - `/singleton/cultural_info/culture/skrell` + - `/singleton/cultural_info/culture/skrell/caste_malish` + - `/singleton/cultural_info/culture/skrell/caste_kanin` + - `/singleton/cultural_info/culture/skrell/caste_talum` + - `/singleton/cultural_info/culture/skrell/caste_raskinta` +- `mods/_master_files/code/modules/culture_descriptor/culture/cultures_unathi.dm`: + - `/singleton/cultural_info/culture/unathi` + - `/singleton/cultural_info/culture/unathi_polar` + - `/singleton/cultural_info/culture/unathi_desert` + - `/singleton/cultural_info/culture/unathi_savannah` + - `/singleton/cultural_info/culture/unathi_salt_swamp` + - `/singleton/cultural_info/culture/unathi_space` + - `/singleton/cultural_info/culture/unathi_yeosa` + - `/singleton/cultural_info/culture/unathi_yeosa_abyss` +- `mods/_master_files/code/modules/culture_descriptor/culture/cultures_vox.dm`: + - `/singleton/cultural_info/culture/vox` + - `/singleton/cultural_info/culture/vox/salvager` + - `/singleton/cultural_info/culture/vox/raider` +- `mods/_master_files/code/modules/culture_descriptor/faction/factions_adherent.dm`: + - `/singleton/cultural_info/faction/adherent` + - `/singleton/cultural_info/faction/adherent/loyalists` + - `/singleton/cultural_info/faction/adherent/separatists` +- `mods/_master_files/code/modules/culture_descriptor/faction/factions_human.dm`: + - `/singleton/cultural_info/faction/scg` + - `/singleton/cultural_info/faction/scg/fleet` + - `/singleton/cultural_info/faction/torchco` + - `/singleton/cultural_info/faction/gcc` + - `/singleton/cultural_info/faction/remote` + - `/singleton/cultural_info/faction/remote/nanotrasen` + - `/singleton/cultural_info/faction/remote/xynergy` + - `/singleton/cultural_info/faction/remote/hephaestus` + - `/singleton/cultural_info/faction/free` + - `/singleton/cultural_info/faction/pcrc` + - `/singleton/cultural_info/faction/saare` + - `/singleton/cultural_info/faction/dais` + - `/singleton/cultural_info/faction/other` +- `mods/_master_files/code/modules/culture_descriptor/faction/factions_skrell.dm`: + - `/singleton/cultural_info/faction/skrell` + - `/singleton/cultural_info/faction/skrell/qalaoa` + - `/singleton/cultural_info/faction/skrell/yiitalana` + - `/singleton/cultural_info/faction/skrell/krrigli` + - `/singleton/cultural_info/faction/skrell/qonprri` + - `/singleton/cultural_info/faction/skrell/otherskrellfac` + - `/singleton/cultural_info/faction/skrell/othersdtf` +- `mods/_master_files/code/modules/culture_descriptor/faction/factions_unathi.dm`: + - `/singleton/cultural_info/faction/unathi` + - `/singleton/cultural_info/faction/unathi/ssen_uuma` + - `/singleton/cultural_info/faction/unathi/baask` + - `/singleton/cultural_info/faction/unathi/gresis` + - `/singleton/cultural_info/faction/unathi/rahzakeh` + - `/singleton/cultural_info/faction/unathi/kharza` + - `/singleton/cultural_info/faction/unathi/independent` +- `mods/_master_files/code/modules/culture_descriptor/faction/factions_vox.dm`: + - `/singleton/cultural_info/faction/vox` + - `/singleton/cultural_info/faction/vox/raider` + - `/singleton/cultural_info/faction/vox/apex` +- `mods/_master_files/code/modules/culture_descriptor/location/_location.dm`: + - `/singleton/cultural_info/location` +- `mods/_master_files/code/modules/culture_descriptor/location/locations_adherent.dm`: + - `/singleton/cultural_info/location/adherent` + - `/singleton/cultural_info/location/adherent/monument` +- `mods/_master_files/code/modules/culture_descriptor/location/locations_diona.dm`: + - `/singleton/cultural_info/location/epsilon` +- `mods/_master_files/code/modules/culture_descriptor/location/locations_human.dm`: + - `/singleton/cultural_info/location/human` + - `/singleton/cultural_info/location/human/earth` + - `/singleton/cultural_info/location/human/luna` + - `/singleton/cultural_info/location/human/venus` + - `/singleton/cultural_info/location/human/ceres` + - `/singleton/cultural_info/location/human/pluto` + - `/singleton/cultural_info/location/human/cetiepsilon` + - `/singleton/cultural_info/location/human/eos` + - `/singleton/cultural_info/location/human/terra` + - `/singleton/cultural_info/location/human/saffar` + - `/singleton/cultural_info/location/human/tadmor` + - `/singleton/cultural_info/location/human/pirx` + - `/singleton/cultural_info/location/human/brahe` + - `/singleton/cultural_info/location/human/iolaus` + - `/singleton/cultural_info/location/human/gaia` + - `/singleton/cultural_info/location/human/magnitka` + - `/singleton/cultural_info/location/human/castilla` + - `/singleton/cultural_info/location/human/fosters` +- `mods/_master_files/code/modules/culture_descriptor/location/locations_other.dm`: + - `/singleton/cultural_info/location/stateless` + - `/singleton/cultural_info/location/other` + - `/singleton/cultural_info/location/deep_space` +- `mods/_master_files/code/modules/culture_descriptor/location/locations_serpentids.dm`: + - `/singleton/cultural_info/location/tauwilo` +- `mods/_master_files/code/modules/culture_descriptor/location/locations_skrell.dm`: + - `/singleton/cultural_info/location/qerrbalak` + - `/singleton/cultural_info/location/talamira` + - `/singleton/cultural_info/location/roasora` + - `/singleton/cultural_info/location/mitorqi` + - `/singleton/cultural_info/location/skrellspace` + - `/singleton/cultural_info/location/otherskrell` +- `mods/_master_files/code/modules/culture_descriptor/location/locations_unathi.dm`: + - `/singleton/cultural_info/location/moghes` + - `/singleton/cultural_info/location/ouere` + - `/singleton/cultural_info/location/offworld` +- `mods/_master_files/code/modules/culture_descriptor/location/locations_vox.dm`: + - `/singleton/cultural_info/location/vox` + - `/singleton/cultural_info/location/vox/shroud` + - `/singleton/cultural_info/location/vox/ship` +- `mods/_master_files/code/modules/culture_descriptor/religion/religions_human.dm`: + - `/singleton/cultural_info/religion/other` + - `/singleton/cultural_info/religion/unstated` + - `/singleton/cultural_info/religion/jewish` + - `/singleton/cultural_info/religion/hindu` + - `/singleton/cultural_info/religion/buddhist` + - `/singleton/cultural_info/religion/jain` + - `/singleton/cultural_info/religion/sikh` + - `/singleton/cultural_info/religion/muslim` + - `/singleton/cultural_info/religion/christian` + - `/singleton/cultural_info/religion/bahai` + - `/singleton/cultural_info/religion/agnostic` + - `/singleton/cultural_info/religion/deist` + - `/singleton/cultural_info/religion/atheist` + - `/singleton/cultural_info/religion/thelemite` + - `/singleton/cultural_info/religion/spiritualism` + - `/singleton/cultural_info/religion/shinto` + - `/singleton/cultural_info/religion/taoist` +- `mods/_master_files/code/modules/culture_descriptor/religion/religions_skrell.dm`: + - `/singleton/cultural_info/religion/warble` +- `mods/_master_files/code/modules/culture_descriptor/religion/religions_unathi.dm`: + - `/singleton/cultural_info/religion/unathi` + - `/singleton/cultural_info/religion/unathi_precursors` + - `/singleton/cultural_info/religion/unathi_strat` + - `/singleton/cultural_info/religion/unathi_lights` + - `/singleton/cultural_info/religion/unathi_markesh` + - `/singleton/cultural_info/religion/unathi_ancestor` + - `/singleton/cultural_info/religion/unathi_aga_eakhe` +- `mods/_master_files/code/modules/culture_descriptor/religion/religions_vox.dm`: `/singleton/cultural_info/religion/vox` + + +### Дефайны + +- `code/__defines/~mods/expanded_culture_descriptor.dm`: + - `HOME_SYSTEM_UNATHI_TERSTEN` + - `FACTION_UNATHI_TERSTEN` + - `CULTURE_UNATHI_TERSTEN` + - `FACTION_ZENG_HU` + - `FACTION_WARD_TAKAHASHI` + - `FACTION_GRAYSON` + - `FACTION_AERTHER` + - `FACTION_MAJOR_BILL` + - `FACTION_FOCAL_POINT` + - `FACTION_XION` + - `FACTION_VEY_MED` + - `FACTION_BISHOP` + - `FACTION_MORPHEUS` + - `FACTION_ZPCI` + - `FACTION_SEPTENERGO` + - `CULTURE_HUMAN_LORRIMAN` + - `CULTURE_HUMAN_AVANOBLE` + - `CULTURE_HUMAN_AVACOMMON` + - `CULTURE_HUMAN_LORDUP` + - `CULTURE_HUMAN_LORDLOW` + - `CULTURE_HUMAN_MIRANIAN` + - `CULTURE_HUMAN_NYXIAN` + - `HOME_SYSTEM_TERSTEN` + - `HOME_SYSTEM_AVALON` + - `HOME_SYSTEM_MIRANIA` + - `HOME_SYSTEM_NYX_BRINKBURN` + - `HOME_SYSTEM_NYX_KALDARK` + - `HOME_SYSTEM_NYX_ROANOK` + - `HOME_SYSTEM_NYX_YUKLIT` + - `HOME_SYSTEM_NYX_CASSER` + - `FACTION_SKRELL_MED` + - `FACTION_SKRELL_AIR` + - `FACTION_SKRELL_FOOD` + - `FACTION_POSITRONICS` + - `HOME_SYSTEM_ROOT` + - `LANGUAGE_HUMAN_LORRIMAN` + - `LANGUAGE_HUMAN_AVALON` + - `LANGUAGE_HUMAN_MIRANIAN` +- `code/__defines/culture.dm`: + - `TAG_CULTURE` + - `TAG_HOMEWORLD` + - `TAG_FACTION` + - `TAG_RELIGION` + + +### Используемые файлы, не содержащиеся в модпаке + +Отсутствуют + + +### Авторы: + +UEDHighCommand + diff --git a/mods/expanded_culture_descriptor/_expanded_culture_descriptor.dm b/mods/expanded_culture_descriptor/_expanded_culture_descriptor.dm new file mode 100644 index 0000000000000..f8445276b1311 --- /dev/null +++ b/mods/expanded_culture_descriptor/_expanded_culture_descriptor.dm @@ -0,0 +1,4 @@ +/singleton/modpack/expanded_culture_descriptor + name = "Расширенный редактор происхождений" + desc = "Мод включает в себя полный перевод редактора происхождения персонажа, а также добавляет новые варианты происхождений на основании лора и контента билда Infinity." + author = "UEDHighCommand" diff --git a/mods/expanded_culture_descriptor/_expanded_culture_descriptor.dme b/mods/expanded_culture_descriptor/_expanded_culture_descriptor.dme new file mode 100644 index 0000000000000..ea4c83cc2e1be --- /dev/null +++ b/mods/expanded_culture_descriptor/_expanded_culture_descriptor.dme @@ -0,0 +1,41 @@ +#ifndef EXPANDED_CULTURE_DESCRIPTOR +#define EXPANDED_CULTURE_DESCRIPTOR + +#include "_expanded_culture_descriptor.dm" + +// Далее просто включай свой код +// #include "code/something.dm" + +#include "code/cultures/_culture.dm" +#include "code/cultures/cultures_human.dm" +#include "code/cultures/cultures_unathi.dm" + +#include "code/factions/factions_human.dm" +#include "code/factions/factions_ipc.dm" +#include "code/factions/factions_skrell.dm" +#include "code/factions/factions_unathi.dm" + +#include "code/locations/locations_human.dm" +#include "code/locations/locations_ipc.dm" +#include "code/locations/locations_unathi.dm" + +#include "code/loadout_xeno.dm" +#include "code/passport.dm" + +#include "code/language/alain.dm" +#include "code/language/arabic.dm" +#include "code/language/chinese.dm" +#include "code/language/euro.dm" +#include "code/language/german.dm" +#include "code/language/indian.dm" +#include "code/language/lirris.dm" +#include "code/language/russian.dm" +#include "code/language/selenian.dm" +#include "code/language/spanish.dm" + +#include "code/species/species.dm" +#include "code/species/station.dm" +#include "code/species/machine.dm" +#include "code/species/lizard.dm" + +#endif diff --git a/mods/expanded_culture_descriptor/code/cultures/_culture.dm b/mods/expanded_culture_descriptor/code/cultures/_culture.dm new file mode 100644 index 0000000000000..9f5279eb06539 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/cultures/_culture.dm @@ -0,0 +1,5 @@ +/singleton/cultural_info + var/nickname + +/singleton/cultural_info/proc/get_nickname() + return nickname || name diff --git a/mods/expanded_culture_descriptor/code/cultures/cultures_human.dm b/mods/expanded_culture_descriptor/code/cultures/cultures_human.dm new file mode 100644 index 0000000000000..afd8e7d04dbe4 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/cultures/cultures_human.dm @@ -0,0 +1,115 @@ +/singleton/cultural_info/culture/human/lorrimanian + name = CULTURE_HUMAN_LORRIMAN + nickname = "Лорриманианин" + description = "Вы родом с Лорримана, планеты в системе Гессшир. \ + Общество вашей родной планеты сильно отличается от привычного человеческий расе, завязанное на науке и стремлении к новым открытиям. \ + Некоторые люди называют Лорриман кастовым сообществом, с разительными отличиями между образованной “элитой” и простой рабочей силой. \ + Вы, скорее всего, выросли в одном из бесчисленных научных комплексов, что расположились вдоль горных хребтов арктической планеты, \ + а ваша жизнь была тесно связана с наукой, с началом обучения в достаточно раннем возрасте. \ + Обучение в местном Институте является крайне интенсивным и получить Сертификат Знания удается далеко не всем. \ + Если вам удалось успешно закончить обучение - вам открыты многие дороги. \ + Конечно, роскошь - понятие не совсем применимое к жизни прагматичных людей Лорримана, \ + однако, не важно относитесь ли вы к ученым или же к рабочему классу, - ваше существование нельзя назвать бедным. \ + Напротив, ваша жизнь окружена технологическими новинками и самыми передовыми разработками человечества." + economic_power = 1.3 + language = LANGUAGE_HUMAN_LORRIMAN + +/singleton/cultural_info/culture/human/avalon_noble + name = CULTURE_HUMAN_AVANOBLE + nickname = "Авалонец, дворянин" + description = "Вы относите себя к аристократической культуре Авалона, где нет места таким мелочным проблемам \ + как неурожай, недостаток образованности или же отсутствие качественного лечения, \ + зато есть светские вечера в богатых домах, каверзные интриги и мастерство искусств. \ + Жизнь аристократа мало походит на свободную, замкнутую в цепи многочисленных традиций, \ + политики и амбиций, как ваших, так и чужих." + economic_power = 1 + language = LANGUAGE_HUMAN_AVALON + +/singleton/cultural_info/culture/human/avalon_common + name = CULTURE_HUMAN_AVACOMMON + nickname = "Авалонец, простолюдин" + description = "Вы относите себя к простонародной культуре Авалона, как простой человек Вы потратили большую часть времени на то, \ + чтобы оставаться на плаву и постоянно ожидать худшего, болезней, войн, голода. \ + Несмотря на то, что до аристократии вам далеко, хорошее лечение и образование было вполне доступно, хоть и сильно било по карману. \ + Впрочем, теперь Вы уже вне Авалона и его традиций, как и вне его проблем." + economic_power = 0.4 + language = LANGUAGE_HUMAN_AVALON + +/singleton/cultural_info/culture/human/lord_upper + name = CULTURE_HUMAN_LORDUP + nickname = "Лорданианин, неоаристократ" + description = "Вы родом с планеты Лордания - центра развлечений, моды и коммерции. \ + Будучи представителем неоаристократии, собственная семья для вас важнее всего, а к представителям других вы относитесь менее гостеприимно. \ + Акцент на социальный статус и роскошь сформировали ваш декадентный образ жизни, и вы с неохотой покидаете свою родину." + economic_power = 1.3 + secondary_langs = list( + LANGUAGE_HUMAN_EURO, + LANGUAGE_HUMAN_CHINESE, + LANGUAGE_HUMAN_ARABIC, + LANGUAGE_HUMAN_INDIAN, + LANGUAGE_HUMAN_IBERIAN, + LANGUAGE_HUMAN_RUSSIAN, + LANGUAGE_SPACER, + LANGUAGE_GUTTER, + LANGUAGE_SIGN + ) + +/singleton/cultural_info/culture/human/lord_lower + name = CULTURE_HUMAN_LORDLOW + nickname = "Лорданианин, низший класс" + description = "Вы родом с планеты Лордания - центра развлечений, моды и коммерции. \ + Будучи представителем рабочего класса, вы остаетесь традиционным служащим на базе лорданианского сектора. \ + Не имея каких-либо политических свобод, вы бы предпочли покинуть свою родину. \ + Несмотря на огромный разрыв между вами и высшими лорданианами, вы также извращены мыслями о богатстве и почете." + economic_power = 1 + secondary_langs = list( + LANGUAGE_HUMAN_EURO, + LANGUAGE_HUMAN_CHINESE, + LANGUAGE_HUMAN_ARABIC, + LANGUAGE_HUMAN_INDIAN, + LANGUAGE_HUMAN_IBERIAN, + LANGUAGE_HUMAN_RUSSIAN, + LANGUAGE_SPACER, + LANGUAGE_GUTTER, + LANGUAGE_SIGN + ) + +/singleton/cultural_info/culture/human/miranian + name = CULTURE_HUMAN_MIRANIAN + nickname = "Мираниец" + description = "Тенденции урбанизированной Мирании стали близки к националистическим и милитаристским после ее выхода из ЦПСС. \ + Миранианские отношения с Терранской Конфедерацией сегодня довольно дружелюбные, так как Мирания стремится наладить контакт с независимой от ЦПСС силой, чтобы закрепить свой дипломатический суверенитет. \ + Мирания практикует ксенофобскую политику, и недавние экономические трудности привели к тому, что многие из оставшихся обездоленных и безработных обратились к националистическим партиям, которые обещают довести Миранию на первые места и восстановить прежнюю сильную экономику. \ + Сегодня Мирания является концентратором науки и технологий на фронтире, особенно в сфере вооружений и кораблестроения." + economic_power = 0.9 + language = LANGUAGE_HUMAN_MIRANIAN + secondary_langs = list( + LANGUAGE_HUMAN_EURO, + LANGUAGE_HUMAN_CHINESE, + LANGUAGE_HUMAN_ARABIC, + LANGUAGE_HUMAN_INDIAN, + LANGUAGE_HUMAN_IBERIAN, + LANGUAGE_HUMAN_RUSSIAN, + LANGUAGE_SPACER, + LANGUAGE_GUTTER, + LANGUAGE_SIGN + ) + +/singleton/cultural_info/culture/human/nyxian + name = CULTURE_HUMAN_NYXIAN + nickname = "Никсианин" + description = "Вы родом из системы Никс - центра горной добычи и корпоративной войны. \ + Расположение здесь единственного известного форонового гиганта - Эребуса, привело к возведению бесчисленных холдингов транс-звездных корпораций и активности пиратов, колонизаторов, работорговцев и других подобных лиц, одним из которых вы, скорее всего, и являетесь. \ + Население системы многокультурно и здесь можно встретить все слои общества, от честных шахтеров до закаленных преступников, просто желающих разбогатеть." + economic_power = 1 + secondary_langs = list( + LANGUAGE_HUMAN_EURO, + LANGUAGE_HUMAN_CHINESE, + LANGUAGE_HUMAN_ARABIC, + LANGUAGE_HUMAN_INDIAN, + LANGUAGE_HUMAN_IBERIAN, + LANGUAGE_HUMAN_RUSSIAN, + LANGUAGE_SPACER, + LANGUAGE_GUTTER, + LANGUAGE_SIGN + ) diff --git a/mods/expanded_culture_descriptor/code/cultures/cultures_unathi.dm b/mods/expanded_culture_descriptor/code/cultures/cultures_unathi.dm new file mode 100644 index 0000000000000..2abaf2be5cf73 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/cultures/cultures_unathi.dm @@ -0,0 +1,16 @@ +/singleton/cultural_info/culture/unathi_tersten + name = CULTURE_UNATHI_TERSTEN + nickname = "Терстенский унати" + description = "Кланы синта, которые обосновались на Терстене, - это нечто странное. Многие поселились на планете в самом начале \ + Золотого Века Терстена. Оставаясь независимыми, они поддерживают тесные отношения с народом Терстена. Эти кланы сформировали свою собственную \ + гегемонию, причем их основной целью было единство кланов, а также поддержание отношений с коренным народом планеты. Всё еще традиционные в своих \ + убеждениях, синта на Терстене хорошо интегрировались с жителями планеты. Кланы Терстена рассматриваются некоторыми кланами Могеса как предатели, которые \ + покинули свою родину. Несмотря на это, Терстенские унати наслаждаются миром, который не может быть достигнут на грубой поверхности Могеса." + secondary_langs = list( + LANGUAGE_UNATHI_SINTA, + LANGUAGE_UNATHI_YEOSA, + LANGUAGE_HUMAN_IBERIAN, + LANGUAGE_SIGN, + LANGUAGE_HUMAN_EURO, + LANGUAGE_SPACER + ) diff --git a/mods/expanded_culture_descriptor/code/factions/factions_human.dm b/mods/expanded_culture_descriptor/code/factions/factions_human.dm new file mode 100644 index 0000000000000..a5b7d2d507637 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/factions/factions_human.dm @@ -0,0 +1,105 @@ +/singleton/cultural_info/faction/wardtakahashi + name = FACTION_WARD_TAKAHASHI + nickname = FACTION_WARD_TAKAHASHI + description = "Разберите любую современную электронику и, скорее всего, вы увидите логотип Ward-Takahashi GMB на любом чипе. \ + Возьмите стрелковое оружие и увидите тот же логотип сбоку. Возможно, Ward-Takahashi GMB не занимается тяжелой промышленностью, \ + но в любом случае её техника есть в любой крупной колонии. На судне, вероятнее всего, вы можете встретить инжнеров, роботехников и учёных-физиков от этой организации." + economic_power = 1.1 + +/singleton/cultural_info/faction/zenghu + name = FACTION_ZENG_HU + nickname = FACTION_ZENG_HU + description = "Фармацевтическая компания, известная благодаря своим достижениям в медицине, биотехнологиях и производстве одних из наиболее правдоподобных марок протезов. \ + Многие современные медицинские препараты, например, патентованный трамадол, были изобретены и поставлены на производство учеными и генетиками от этой корпорации. \ + Даже Nanotrasen, один из основных конкурентов на рынке, в настоящее время использует многие их патентованные препараты. \ + Однако, не стоит себя обманывать - Zeng-Hu имеет дурную репутацию из-за своих неэтичных экспериментов и политики 'подчинения' меньших корпораций, что теперь входят в неё. \ + На судне, вероятнее всего, вы можете встретить ученых-генетиков, биологов, врачей и роботехников." + economic_power = 1.2 + +/singleton/cultural_info/faction/aerther + name = FACTION_AERTHER + nickname = FACTION_AERTHER + description = "Будчи главным разработчиком и поставщиком систем жизнеобеспечения для многих судов и человеческих колоний, \ + Aether Atmospherics and Recycling занимает уверенную позицию на галактическом рынке, преимущественно в ЦПСС. Помимо поставок оборудования, специалистов по системам жизнеобеспечения этой корпораци можно увидеть на самых различных объектах. \ + На судне, вероятнее всего, вы встретите атмосферных техников от этой организации." + economic_power = 0.95 + language = LANGUAGE_HUMAN_EURO + +/singleton/cultural_info/faction/grayson + name = FACTION_GRAYSON + nickname = FACTION_GRAYSON + description = "Горнодобывающая компания, которая является одним из крупнейших поставщиков сырья и материалов в известном пространстве. \ + Будучи одной из ведущих корпораций, Grayson Manufactories Ltd конкурирует со множеством частных предприятий и даже некоторыми крупными ТЗК, \ + например, Nanotrasen. На судне, вероятнее всего, от неё вы встретите участников горнодобывающих групп - геологов, шахтеров, операторов дрелей и шахтерских экзокостюмов." + +/singleton/cultural_info/faction/majorbill + name = FACTION_MAJOR_BILL + nickname = FACTION_MAJOR_BILL + description = "Хотя перевозка грузов и не может быть самой романтичной карьерой в 24-м столетии, Major Bill's Transportation and Shipping частично отвечает за быстрое обеспечение межколониальной торговли. \ + Используя огромный флот грузовых судов, танкеров и тягачей, корпорация работает в большей части человеческого пространства. \ + Работников этой организации можно встретить в отделе снабжения в качестве техников с квалификацией пилота или даже завхозов." + economic_power = 0.9 + +/singleton/cultural_info/faction/focalpoint + name = FACTION_FOCAL_POINT + nickname = FACTION_FOCAL_POINT + description = "Учрежденная в результате объединения энергетических и электротехнических фирм, эта компания считается энергетической мегакорпорацией. \ + Она фокусируется на предоставлении ресурсов и техники для энергосистем в колониальном массштабе. Имея акции SeptEnergo PJSC, две компании через договора фактически делят между собой влияние в ЦПСС, но Focal Point стремится расширить своё влияние за пределами государственной границы. Хотя корпорация еще не владеет такими технологиями как гравитационная сингуярность или суперматерия, \ + она не находит себе равных в производстве других устройств и компонентов надлежащей рабочей сети, таких как подземная экранированная проводка, высокоэффективные трансформаторы (до 99,8%), газовые турбины и ТЭГ. \ + Они проектируют стойки для блоков питания (PSU), а также СМЕСы. На судне вам могут встретиться ученые и инженеры от этой организации." + +/singleton/cultural_info/faction/xion + name = FACTION_XION + nickname = FACTION_XION + description = "Являясь одним из крупнейших поставщиков роботизированных единиц, Xion Industrial является серьезной проблемой для многих работников на предприятиях с потенциальной заменой труда разумного трудом машины. \ + В настоящее время, компания не ведёт активной научной деятельности, предпочитая массовость и дешивизну собственной продукции - специализированные дроны всё ещё пользуются большим спросом на галактическом рынке. \ + Помимо производства роботов, корпорация также занимается выпуском протезов под собственной маркой минималистичной компановки. \ + На судне вы можете встретить учёных-механиков и роботехников от Xion." + economic_power = 0.9 + +/singleton/cultural_info/faction/veymed + name = FACTION_VEY_MED + nickname = FACTION_VEY_MED + description = "Медицинская корпорация - наиболее точное определение, которое можно дать Vey-Med. Специализируясь на выпуске одной из самых дорогих и качественных марок протезов, поломка которых, обычно, приравнивается к чему-то между потерей машины и недвижимости, \ + фирма также обеспечивает космические суда и колонии медицинским оборудованием - сканерами, слиперами, хирургическими инструментами, средствами биологической защиты и многим другим, что имеет маркировку Vey-Med. В настоящее время, меньшие организации \ + , вроде SaniCorp, всё ещё являются проблемой для Vey-Med. Однако, велика вероятность их будущей интеграции в своего большего конкурента. На судне вы можете встритить практически весь медицинский депарамент от Vey-Med." + +/singleton/cultural_info/faction/bishop + name = FACTION_BISHOP + nickname = FACTION_BISHOP + description = "Bishop была основана в начале 24-го века, сразу после подъема робототехники. В то время, как Zeng-Hu активно принимала участие в замене конечностей на новые, \ + напоминавшие реальные конечности, Bishop оставалась на заднем плане, зарабатывая деньги путем продажи гладких протезов, сосредотачиваясь на эстетике и футуризме, которые привлекли внимание трансгуманистов. \ + Bishop также возглавляла развитие протезирования всего тела и была одной из первых пользователей Man Machine Interface (MMI), впервые внедренный Morpheus Corporation в широких масштабах. \ + Они по-прежнему создают «первоклассные» протезы, хотя большая часть цены складывается из гладкого внешнего вида и брендинга, поскольку качество самого продукта очень спорно. \ + Их ассортимент по-прежнему сосредоточен на трансгуманистической идеологии, представленная в виде имплантов, протезов, киборгов и синтетических органов. На судне вам могут встретиться роботехники от Bishop, рекламирующие протезы корпорации." + economic_power = 1.1 + +/singleton/cultural_info/faction/morpheus + name = FACTION_MORPHEUS + nickname = FACTION_MORPHEUS + description = "Morpheus Cyberkinetics принадлежащая свободным позитроникам мегакорпорация, располагающаяся на Руте. Изначально кибернетическая корпорация сейчас не спешными, но уверенными шагами заходит на новые рынки \ + высокотехнологичного машиностроения. Пока что основным продуктом Morpheus являются протезы, корпуса для ИПС и некоторые аугментации, в убыток широте выбора корпорация предоставляет высокое качество, а среди позитроников \ + корпуса Morpheus считаются эталоном удобства и отказоустойчивости. Доподлинно известно о производстве позитронного мозга для собственных нужд, из-за производства малыми партиями ходят слухи о новом типе или поколении \ + устройства, но в реальности это скорее всего связано с высокими затратами и сложностью масштабирования производств. \ + Не часто можно встретить учёных-роботехников и обычных роботехников-ИПC от данной организации, но как правило, они предоставляют наиболее качественное техническое обслуживание для своих 'собратьев' и носителей иных протезов." + economic_power = 0.7 + +/singleton/cultural_info/faction/zpci + name = FACTION_ZPCI + nickname = FACTION_ZPCI + description = "Zone Protection Control Inc - это полувоенная миротворческая корпорация, занимающаяся пресечением экстремизма в известном космосе максимально гуманными способами. Её сотрудники, в основном, \ + занимаются непосредственным исключением всех источников экстремизма и дальнейшим поддержанием мирового порядка в той или иной зоне. Все представители этой организации - это, в первую очередь, идейные личности, \ + в сердцах которых крепко обосновались принципы о таких добродетелях, как честь, терпение и сострадание, а так же и чувство долга. \ + Корпорация не стремится соперничать за место под солнцем с такими гигантами обеспечения безопасности как SAARE или PCRC, однако, те в свою очередь не изъявляют желания кооперироваться. \ + Можно назвать везением для экипажа, если на судне окажутся активные охранники от ZPCI." + language = LANGUAGE_SPACER + +/singleton/cultural_info/faction/septenergo + name = FACTION_SEPTENERGO + nickname = "SeptEnergo Public Joint-Stock Company" + description = "Крупнейшая государственная энергетическая корпорация. Известна многовековой историей и своим проектом космического мегасооружения - Энергетического конвергентора, \ + которую многие ошибочно называют 'сферой Дайсона'. \ + Будучи одновременно крупнейшим поставщиков энергии на территории ЦПСС и акционерным обществом, контрольный пакет остается за ЦПСС, в то время как остальное делится между крупными корпорациями и ТКК. \ + На судне вы можете встретить инженеров от этой организации." + economic_power = 1.1 + language = LANGUAGE_HUMAN_EURO diff --git a/mods/expanded_culture_descriptor/code/factions/factions_ipc.dm b/mods/expanded_culture_descriptor/code/factions/factions_ipc.dm new file mode 100644 index 0000000000000..f8b75ac6b6feb --- /dev/null +++ b/mods/expanded_culture_descriptor/code/factions/factions_ipc.dm @@ -0,0 +1,13 @@ +/singleton/cultural_info/faction/positronic + name = FACTION_POSITRONICS + nickname = "Позитронный Союз" + description = "Позитронный Союз – государство позитроников, владеющее небольшой территорией вокруг системы Кернел, \ + на краю контролируемого ПСС пространства. Большинство синтетических граждан Союза функционируют как ИПС, \ + при этом все другие корпуса составляют 19% населения. Как известно, единственными абсолютными органическими \ + жителями в пространстве Союза являются послы и дипломаты других звездных правительств или корпораций. \ + Население Позитронного Союза в настоящее время составляет более 10 миллионов свободных позитроников, причем \ + примерно 94% всех его граждан проживают на Руте. Другие путешествуют в космосе выполняя различные задачи во имя \ + процветания государства. Обычно это включает в себя миссии по привлечению новых граждан, а также по улучшению отношений \ + с различными организациями, соседними державами и органическими видами. Конечно, не все свободные синтетики являются \ + частью Позитронного Союза. По сей день, ПС составляет около 68% от всей свободной синтетики. Остальные либо остаются \ + гражданами своего первоначального правительства, либо не имеют гражданства." diff --git a/mods/expanded_culture_descriptor/code/factions/factions_skrell.dm b/mods/expanded_culture_descriptor/code/factions/factions_skrell.dm new file mode 100644 index 0000000000000..c871f42336add --- /dev/null +++ b/mods/expanded_culture_descriptor/code/factions/factions_skrell.dm @@ -0,0 +1,27 @@ +/singleton/cultural_info/faction/skrell/med + name = FACTION_SKRELL_MED + nickname = "Корпорация Глоа'Морр" + description = "Первоначально филиал компании Qorr'moa Inc., \ + специализирующийся на фармацевтике, Глоа'Морр был признан независимым королевским указом города Мо'глар два столетия назад. \ + В настоящее время он предоставляет большую часть медицинских центров Куэррбалака, а также нескольких других колоний Центра." + economic_power = 1.3 + language = LANGUAGE_SKRELLIAN + +/singleton/cultural_info/faction/skrell/air + name = FACTION_SKRELL_AIR + nickname = "Корпорация Крри'гли" + description = "Изначально строившая самолеты, Krri'gli Corp. стала одной из самых могущественных корпораций скреллов, \ + когда взгляды устремились к космосу, и начала производить космические аппараты для большинства городов-государств Куэррбалака. \ + Контролируя процесс от проектирования до самого конструирования, компания обладает репутацией производителя самых безопасных инфраструктур, \ + которые скреллы могут предложить в области колонизации космоса." + economic_power = 1.4 + language = LANGUAGE_SKRELLIAN + +/singleton/cultural_info/faction/skrell/food + name = FACTION_SKRELL_FOOD + nickname = "Куорр'моа" + description = "Основанная после войны Крри-Кьериа, компания Qorr'moa Inc. быстро обосновалась в качестве одного из крупнейших производителей продуктов питания планеты. \ + В то время как её мануфактуры растут и по сей день, она недавно открыла новые технологии, \ + особенно в области генной инженерии, для расширения ассортимента продукции." + economic_power = 1.2 + language = LANGUAGE_SKRELLIAN diff --git a/mods/expanded_culture_descriptor/code/factions/factions_unathi.dm b/mods/expanded_culture_descriptor/code/factions/factions_unathi.dm new file mode 100644 index 0000000000000..7fcf5351b6e8f --- /dev/null +++ b/mods/expanded_culture_descriptor/code/factions/factions_unathi.dm @@ -0,0 +1,6 @@ +/singleton/cultural_info/faction/unathi/tersten + name = FACTION_UNATHI_TERSTEN + nickname = "Гегемония Терстена" + description = "Гегемония Терстена - это политическое объединение всех кланов терстенских унати, учрежденное по совместному проекту собрания Каанепо \ + и администрации президента Кузнецова в 2296-м году. Своими основными задачами Гегемония провозглашает продвижение интересов унати на Терстене, поддержание \ + близких отношений между представителями двух рас, разрешение возникающих конфликтов, а также дальнейшую интеграцию унати в человеческом обществе." diff --git a/mods/expanded_culture_descriptor/code/language/alain.dm b/mods/expanded_culture_descriptor/code/language/alain.dm new file mode 100644 index 0000000000000..a4fcfd608dcf3 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/language/alain.dm @@ -0,0 +1,26 @@ +/datum/language/human/alain + name = LANGUAGE_HUMAN_AVALON + desc = "Алаин был создан в основном из языков Западной Европы, но с влиянием культур как Южной Африки, так и Индии, оставившие характерный след в написании и необычности произношения." + colour = "alain" + key = "9" + shorthand = "AL" + space_chance = 100 + partial_understanding = list( + LANGUAGE_HUMAN_EURO = 35, + LANGUAGE_HUMAN_MIRANIAN = 20, + LANGUAGE_HUMAN_CHINESE = 5, + LANGUAGE_HUMAN_ARABIC = 10, + LANGUAGE_HUMAN_INDIAN = 15, + LANGUAGE_HUMAN_IBERIAN = 10, + LANGUAGE_HUMAN_RUSSIAN = 5, + LANGUAGE_SPACER = 20, + LANGUAGE_HUMAN_LORRIMAN = 10, + LANGUAGE_GUTTER = 20 + ) + syllables = list( + "dieu", "every", "ar", "as", "sauntz", "swelce", "er", "but", "he", "hi", "is", "le", "me", "on", "coste", "ti", + "lufodon", "enning", "ðæm", "ent", "fwiston", "peyned", "hat", "welan", "ch", "be", "abe", "alle", "sch", "aus", + "meaht", "lytle", "que", "makythe", "men", "ave", "spyrig", "com", "eta", "eur", "noldon", "ing", "ver", "was", + "hiora", "oment", "auxi", "forlæten", "vueillent", "purront", "et", "ex", "allas", "quo", "undo", "dothe", + "ek", "onlutan", "kitrowe", "ki", "ke", "cause", "ki", "ne", "ek", "mode", "ain", "ki", "me", "dei", "dekh" + ) diff --git a/mods/expanded_culture_descriptor/code/language/arabic.dm b/mods/expanded_culture_descriptor/code/language/arabic.dm new file mode 100644 index 0000000000000..593c15c9f10b8 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/language/arabic.dm @@ -0,0 +1,4 @@ +/datum/language/human/arabic/New() + . = ..() + partial_understanding += list(LANGUAGE_HUMAN_AVALON = 5) + partial_understanding += list(LANGUAGE_HUMAN_LORRIMAN = 10) diff --git a/mods/expanded_culture_descriptor/code/language/chinese.dm b/mods/expanded_culture_descriptor/code/language/chinese.dm new file mode 100644 index 0000000000000..9f41ee2b0d761 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/language/chinese.dm @@ -0,0 +1,4 @@ +/datum/language/human/chinese/New() + . = ..() + partial_understanding += list(LANGUAGE_HUMAN_AVALON = 5) + partial_understanding += list(LANGUAGE_HUMAN_LORRIMAN = 10) diff --git a/mods/expanded_culture_descriptor/code/language/euro.dm b/mods/expanded_culture_descriptor/code/language/euro.dm new file mode 100644 index 0000000000000..bdb88083ca338 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/language/euro.dm @@ -0,0 +1,5 @@ +/datum/language/human/euro/New() + . = ..() + partial_understanding += list(LANGUAGE_HUMAN_AVALON = 35) + partial_understanding += list(LANGUAGE_HUMAN_MIRANIAN = 30) + partial_understanding += list(LANGUAGE_HUMAN_LORRIMAN = 75) diff --git a/mods/expanded_culture_descriptor/code/language/german.dm b/mods/expanded_culture_descriptor/code/language/german.dm new file mode 100644 index 0000000000000..a12295df48600 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/language/german.dm @@ -0,0 +1,20 @@ +/datum/language/human/miranian + name = LANGUAGE_HUMAN_MIRANIAN + desc = "Естественный язык, который берёт своё происхождение с планеты Мирания, ставший своеобразным наследником Немецкого, Французского и Итальянского языков. Как правило, на нём говорят либо жители той самой Мирании, либо же те, кто достаточно часто контактирует с таковыми." + colour = "german" + key = "0" + shorthand = "Mir" + partial_understanding = list( + LANGUAGE_HUMAN_EURO = 75, + LANGUAGE_HUMAN_IBERIAN = 30, + LANGUAGE_HUMAN_RUSSIAN = 5, + LANGUAGE_HUMAN_SELENIAN = 75, + LANGUAGE_SPACER = 20, + LANGUAGE_HUMAN_AVALON = 35, + LANGUAGE_HUMAN_LORRIMAN = 75 + ) + space_chance = 70 + syllables = list( + "sieg", "mensch", "tag", "buch", "haus", "boot", "heu", "te", "ge", "fahr", "lö", "schen", "mee", "re", "el", "er", "was", "ser", "grü", "ße", "kat", "ze", + "cker", "Bürs", "te", "ung", "trau", "schöns", "blech", "schwis", "rei", "scho", "zeich", "nen", "nien", "der", "unter", "heil", "ö", "ü", "ß", "ße" + ) diff --git a/mods/expanded_culture_descriptor/code/language/indian.dm b/mods/expanded_culture_descriptor/code/language/indian.dm new file mode 100644 index 0000000000000..1430ceff8500b --- /dev/null +++ b/mods/expanded_culture_descriptor/code/language/indian.dm @@ -0,0 +1,5 @@ +/datum/language/human/indian/New() + . = ..() + partial_understanding += list(LANGUAGE_HUMAN_AVALON = 25) + partial_understanding += list(LANGUAGE_HUMAN_MIRANIAN = 30) + partial_understanding += list(LANGUAGE_HUMAN_LORRIMAN = 15) diff --git a/mods/expanded_culture_descriptor/code/language/lirris.dm b/mods/expanded_culture_descriptor/code/language/lirris.dm new file mode 100644 index 0000000000000..45d5627190784 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/language/lirris.dm @@ -0,0 +1,26 @@ +/datum/language/human/lirris + name = LANGUAGE_HUMAN_LORRIMAN + desc = "Общеизвестный диалект цюрихского языка, являющийся основным используемым на Лорримане. Характерными особенностями Лирриса являются строгость терминов, краткая информативность " + colour = "lirris" + key = "8" + shorthand = "LRS" + space_chance = 100 + partial_understanding = list( + LANGUAGE_HUMAN_EURO = 85, + LANGUAGE_HUMAN_MIRANIAN = 60, + LANGUAGE_HUMAN_CHINESE = 10, + LANGUAGE_HUMAN_ARABIC = 15, + LANGUAGE_HUMAN_INDIAN = 15, + LANGUAGE_HUMAN_IBERIAN = 15, + LANGUAGE_HUMAN_RUSSIAN = 10, + LANGUAGE_SPACER = 15, + LANGUAGE_HUMAN_AVALON = 10, + LANGUAGE_GUTTER = 5 + ) + syllables = list( + "talkia", "an", "sningen", "ingen", "at", "ed", "er", "ha", "he", "hi", "is", "le", "me", "on", "se", "ti", + "sånt", "wa", "hver", "ent", "sjone", "hdyksi", "hat", "hin", "ch", "be", "visnin", "die", "sch", "aus", + "också", "entä", "que", "ait", "ihmis", "ave", "con", "com", "eta", "kultur", "välttä", "ing", "ver", "was", + "hin", "får", "sellä", "tyvät", "kästi", "läh", "et", "ex", "ihmissu", "quo", "talkis", "ad", + "ek", "aur", "kvalifik", "läggan", "ke", "de", "är", "ne", "åt", "aar", "ain", "ki", "me", "dei", "hiihtämin" + ) diff --git a/mods/expanded_culture_descriptor/code/language/russian.dm b/mods/expanded_culture_descriptor/code/language/russian.dm new file mode 100644 index 0000000000000..bb67f974dedbc --- /dev/null +++ b/mods/expanded_culture_descriptor/code/language/russian.dm @@ -0,0 +1,5 @@ +/datum/language/human/russian/New() + . = ..() + partial_understanding += list(LANGUAGE_HUMAN_AVALON = 5) + partial_understanding += list(LANGUAGE_HUMAN_MIRANIAN = 5) + partial_understanding += list(LANGUAGE_HUMAN_LORRIMAN = 10) diff --git a/mods/expanded_culture_descriptor/code/language/selenian.dm b/mods/expanded_culture_descriptor/code/language/selenian.dm new file mode 100644 index 0000000000000..73651711f9994 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/language/selenian.dm @@ -0,0 +1,5 @@ +/datum/language/human/selenian/New() + . = ..() + partial_understanding += list(LANGUAGE_HUMAN_AVALON = 25) + partial_understanding += list(LANGUAGE_HUMAN_MIRANIAN = 45) + partial_understanding += list(LANGUAGE_HUMAN_LORRIMAN = 75) diff --git a/mods/expanded_culture_descriptor/code/language/spanish.dm b/mods/expanded_culture_descriptor/code/language/spanish.dm new file mode 100644 index 0000000000000..8e359f7e4d0cf --- /dev/null +++ b/mods/expanded_culture_descriptor/code/language/spanish.dm @@ -0,0 +1,5 @@ +/datum/language/human/iberian/New() + . = ..() + partial_understanding += list(LANGUAGE_HUMAN_AVALON = 25) + partial_understanding += list(LANGUAGE_HUMAN_MIRANIAN = 15) + partial_understanding += list(LANGUAGE_HUMAN_LORRIMAN = 10) diff --git a/mods/expanded_culture_descriptor/code/loadout_xeno.dm b/mods/expanded_culture_descriptor/code/loadout_xeno.dm new file mode 100644 index 0000000000000..f43488056c2a9 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/loadout_xeno.dm @@ -0,0 +1,10 @@ +/datum/gear/document/passport/unathi/New() + ..() + whitelisted += list(SPECIES_YEOSA) + var/list/passports = list() + passports["independent clans registration document"] = /obj/item/passport/xeno/unathi/independent + passports["Moghes Hegemony registration document"] = /obj/item/passport/xeno/unathi/hegemony + passports["Ssen-Uuma Convent registration document"] = /obj/item/passport/xeno/unathi/convent + passports["Rah'Zakeh League registration document"] = /obj/item/passport/xeno/unathi/league + passports["Tersten Republic identity document"] = /obj/item/passport/xeno/unathi/tersten + gear_tweaks += new/datum/gear_tweak/path(passports) diff --git a/mods/expanded_culture_descriptor/code/locations/locations_human.dm b/mods/expanded_culture_descriptor/code/locations/locations_human.dm new file mode 100644 index 0000000000000..948fd00a2a6da --- /dev/null +++ b/mods/expanded_culture_descriptor/code/locations/locations_human.dm @@ -0,0 +1,115 @@ +/singleton/cultural_info/location/human/tersten + name = HOME_SYSTEM_TERSTEN + nickname = "Терстен" + distance = "46 световых лет" + description = "Терстен является населенным равнинным миром и третьей планетой системы Гавил, которая расположена \ + примерно в 50 световых годах от Солнечной Системы. Трестен является самой удалённой человеческой колонией в известном \ + космосе и единственной населённой планетой в системе Гавил. Система Гавил расположенна в \"Лордианском кластере\" — малой \ + группы из десяти звёзд расположенных близко к друг-другу, и чья история тесно переплетается между собой. Столица — \ + Терстен-сити, расположена на северной территории планеты. Название планеты происходит от лидера первых поселенцев — \ + Джонатана Терстена. Планета также известна, неофициально, под названием \"Планета Изобилия\" в отношении богатства \ + плодородными равнинами, используемыми для обеспечения продуктами питания большой части Внешнего Лорданианского Кольца. \ + Планета изначально была известна под названием Пинаскимат, разделенная на Терстенскую Территорию и Неваданскую Территорию \ + после основания двух крупнейших поселений на планете — Терстен-сити и Невада соответственно. В 2215 году два государства \ + были объединены, и название Пинаскимат (из-за своего темного прошлого как колонии-каторги) перестало употребляться. В \ + 2288 году Терстен присоединился ко Второй Лорданианской Республике. Здесь жители известны как терстениане, или, \ + неофициально, \"невокии\" в языковой интерпретации народов Невады и Оклахомы. Нынешний президент — Роберт Маккензи. \ + Терстенская Республика входит в состав Второй Лордианской Республики — региона космоса контролируемого ЦПСС. В связи с \ + тёплыми отношениями между Трестеном и ЦПСС, первый имеет несколько отрядов во вооружённых силах ЦПСС." + capital = "Терстен-сити" + economic_power = 1.0 + +/singleton/cultural_info/location/avalon + name = HOME_SYSTEM_AVALON + nickname = "Авалон" + description = "Авалон - пригодная для жизни планета, на которой действует феодальная монархия. \ + Культура этой планеты восходит к временам раннего средневековья Земли, не сильно беспокоясь о передовых технологиях, существующих в других частях известной галактики. \ + Авалонцы занимаются производством как примитивных, архаичных устройств и инструментов, так и довольно высокотехнологичной продукции конца 20 - начала 21 века \ + Политика технологического ограничения привела этот мир к удивительно простой и спокойной фермерской жизни с акцентом на средневековые землевладельческие сословия, заменив больной капитализм и процессы урбанизации." + language = LANGUAGE_HUMAN_AVALON + capital = "Нью-Йорвик" + ruling_body = "Авалонское Королевство" + distance = "19 световых лет" + economic_power = 0.9 + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_SIGN, LANGUAGE_HUMAN_EURO) + +/singleton/cultural_info/location/mirania + name = HOME_SYSTEM_MIRANIA + nickname = "Мирания" + description = "Тенденции урбанизированной Мирании стали близки к националистическим и милитаристским после ее выхода из ЦПСС. \ + Миранианские отношения с Терранской Конфедерацией сегодня довольно дружелюбные, так как Мирания стремится наладить контакт с независимой от ЦПСС силой, чтобы закрепить свой дипломатический суверенитет. \ + Мирания практикует ксенофобскую политику, и недавние экономические трудности привели к тому, что многие из оставшихся обездоленных и безработных обратились к националистическим партиям, которые обещают довести Миранию на первые места и восстановить прежнюю сильную экономику. \ + Сегодня Мирания является концентратором науки и технологий на фронтире, особенно в сфере вооружений и кораблестроения." + language = LANGUAGE_HUMAN_EURO + capital = "Мирания III" + ruling_body = "Федеративная Республика Мирания" + distance = "22 световых года" + economic_power = 0.9 + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_SIGN, LANGUAGE_HUMAN_MIRANIAN) + +/singleton/cultural_info/location/brinkburn + name = HOME_SYSTEM_NYX_BRINKBURN + nickname = "Бринкбёрн" + description = "Бринкбёрн - марсоподобная планета и бывшая корпоративная колония, ныне находящаяся под властью многочисленных банд и преступников. \ + Эти банды вымогают деньги местного населения, в качестве формы грубого налогообложения для дальнейшей своей деятельности, и взамен они обеспечивают «защиту» от других банд, наряду с использованием некоторых государственных услуг, которыми они управляют. \ + Банда Lumoco Arms and Supplies контролирует большую часть территории планеты и почти всю экономику. Этот беззаконный статус сохранился до настоящего времени и вряд ли можно еще говорить о создании устойчивого правительства." + language = LANGUAGE_HUMAN_EURO + capital = "Остакра-Таун" + ruling_body = "Никс" + distance = "30 световых лет" + economic_power = 0.85 + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_SIGN) + +/singleton/cultural_info/location/kaldark + name = HOME_SYSTEM_NYX_KALDARK + nickname = "Калдарк" + description = "Калдарк - среднего размера спутник Эребуса, имеющий большое количество минеральных богатств, включая форон. \ + Бринкбёрнская группа, которая изначально поселилась на Калдарке, была независимой, не связанной с каким-либо государственным или корпоративным образованием. \ + Это привлекает людей сомнительного происхождения или обыкновенных граждан, которые не хотят работать ни на одну корпорацию. \ + Калдарк получает свою долю от горнодобывающих операций в регионе, по сути являясь одним из крупнейших независимых горнодобывающих и торговых центров не только вокруг Эребуса, но и во всей системе Никс. \ + Несмотря на то, что это, технически, республика, она не признается суверенным государством. ЦПСС не может позаботиться о Калдарке, и от некоторых людей можно услышать, что Калдарк является “первой независимой нацией системы Никс“" + language = LANGUAGE_HUMAN_EURO + capital = "Калдарк" + ruling_body = "Никс" + distance = "30 световых лет" + economic_power = 0.95 + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_SIGN) + +/singleton/cultural_info/location/roanok + name = HOME_SYSTEM_NYX_ROANOK + nickname = "Роанок" + description = "Роанок - больших размеров спутник Эребуса со смертельной атмосферой. Nanotrasen заявила свои права на это место, богатое фороном, и основало множество предприятий. \ + Когда из 8 изначальных сооружений осталось всего 3, Nanotrasen, узнав об истинных опасностях спутника, решила местную проблему благополучия и безопасности, утвердив строгие правила работы и техники безопасности. \ + Сегодня Роанок является одним из основных поставщиков форона Nanotrasen в системе Никс, а работники имеют относительно роскошные жилищные апартаменты и хорошие условия работы, особенно в сравнении с другими местами в этой системе." + language = LANGUAGE_HUMAN_EURO + capital = "ТБН Аркоп V" + ruling_body = "Никс" + distance = "30 световых лет" + economic_power = 1.1 + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_SIGN) + +/singleton/cultural_info/location/yuklit + name = HOME_SYSTEM_NYX_YUKLIT + nickname = "Йуклит" + description = "Йуклит - большая скалистая планета, находящаяся под контролем Gilthari Exports и Aether Atmospherics and Recycling. \ + Бывший археологический лагерь Гриндиир сегодня является полноценным купольным городом и фактической столицей планеты. \ + Gilthari Exports, в первую очередь, ориентируется на сельскохозяйственные, горнодобывающие и ксеноархеологические работы, в то время как Aether Atmospherics использует свои ресурсы для поддержания атмосферы и гравитационных генераторов. Йуклит, обычно, считается фактической столицей Никс, так как колония имеет наибольшую численность в системе, однако стоимость проживания здесь довольно высока из-за законов, которые утвердили корпорации, такие как высокие арендная плата и налоги на коммунальные услуги, транспорт и водоснабжение. \ + Независимо от относительного отсутствия больших возможностей, это по-прежнему одно из самых предпочтительных мест в системе Никс для лиц среднего класса или богатых, которые могут позволить себе такие расходы, причем многие корпорации и предприятия из других систем базируются именно здесь." + language = LANGUAGE_HUMAN_EURO + capital = "Гриндиир" + ruling_body = "Никс" + distance = "30 световых лет" + economic_power = 1.1 + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_SIGN) + +/singleton/cultural_info/location/casser + name = HOME_SYSTEM_NYX_CASSER + nickname = "Кассер" + description = "Кассер - средний по размеру спутник Эребуса. Grayson Manufactories, используя свой опыт как в шахтёрстве, так и в промышленности, создала небольшой, но эффективный горнодобывающий комплекс, который быстро стал одним из основных экспортеров и производителей всего оборудования, используемого сегодня на местных спутниках. \ + Небольшая шахтерская платформа превратилась в огромную индустрию с топливоперерабатывающими заводами и фабриками, покрывающими большую часть поверхности Кассера. Здесь шахтеры зарабатывают достаточно, чтобы прожить, но едва. Рабочие фабрик получают немного больше, а корпоративные представители зарабатывают добротно каждый день." + language = LANGUAGE_HUMAN_EURO + capital = "Центральный Космопорт Кассера" + ruling_body = "Никс" + distance = "30 световых лет" + economic_power = 1 + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_SIGN) diff --git a/mods/expanded_culture_descriptor/code/locations/locations_ipc.dm b/mods/expanded_culture_descriptor/code/locations/locations_ipc.dm new file mode 100644 index 0000000000000..c7afb8c06a635 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/locations/locations_ipc.dm @@ -0,0 +1,9 @@ +/singleton/cultural_info/location/root + name = HOME_SYSTEM_ROOT + nickname = "Рут" + description = "Рут - колонизированная Позитронным Союзом экзотическая планета в системе Кернел. \ + Планета более чем в трое больше Земли, обладает системой пылевых колец, разделенных железно-никелевым спутником, Акерта. \ + Ha экваторе Рута находится россыпь поселений c центром в огромной столичной агломерации под названием 01." + ruling_body = "Позитронный Союз" + capital = "01" + distance = "33 световых года" diff --git a/mods/expanded_culture_descriptor/code/locations/locations_unathi.dm b/mods/expanded_culture_descriptor/code/locations/locations_unathi.dm new file mode 100644 index 0000000000000..1191af3342031 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/locations/locations_unathi.dm @@ -0,0 +1,21 @@ +/singleton/cultural_info/location/unathi_tersten + name = HOME_SYSTEM_UNATHI_TERSTEN + nickname = "Терстен" + description = "Терстен распахнул свои объятия перед Унати вслед за наступлением золотого века. Хотя кланы по-прежнему пользуются значительной \ + автономией на планете, ориентированной на человека, два народа в значительной степени сотрудничают друг с другом. \ + Образ жизни Терстенцев хорошо сочетался с культурой и традициями унати, и поэтому виды наслаждаются хорошими отношениями друг с \ + другом." + ruling_body = "Центральное Правительство Солнечной Системы" + distance = "46 световых лет" + secondary_langs = list( + LANGUAGE_UNATHI_SINTA, + LANGUAGE_UNATHI_YEOSA, + LANGUAGE_SIGN, + LANGUAGE_HUMAN_EURO, + LANGUAGE_HUMAN_CHINESE, + LANGUAGE_HUMAN_ARABIC, + LANGUAGE_HUMAN_INDIAN, + LANGUAGE_HUMAN_IBERIAN, + LANGUAGE_HUMAN_RUSSIAN, + LANGUAGE_SPACER + ) diff --git a/mods/expanded_culture_descriptor/code/passport.dm b/mods/expanded_culture_descriptor/code/passport.dm new file mode 100644 index 0000000000000..2f335617e72da --- /dev/null +++ b/mods/expanded_culture_descriptor/code/passport.dm @@ -0,0 +1,37 @@ +/obj/item/passport/independent/avalon + icon_state = "passport" + desc = "A passport from the Star Kingdom of Avalon, an independent nation established upon Claude III." + +/obj/item/passport/independent/mirania + icon = 'mods/expanded_culture_descriptor/icons/passport.dmi' + icon_state = "passport_mir" + desc = "A passport from the Federal Republic of Mirania, an independent nation established upon Mirania III after its secession from the SCG." + +/obj/item/passport/xeno/unathi/independent + name = "\improper independent clans registration document" + icon_state = "passport" + desc = "A document that indentifies its bearer as a member of a minor clan that is not aligned with any major power." + +/obj/item/passport/xeno/unathi/hegemony + name = "\improper Moghes Hegemony registration document" + icon = 'mods/expanded_culture_descriptor/icons/passport.dmi' + icon_state = "passport_unathi_heg" + desc = "A document that indentifies its bearer as a registered denizen of the Moghes Hegemony." + +/obj/item/passport/xeno/unathi/convent + name = "\improper Ssen-Uuma Convent registration document" + icon = 'mods/expanded_culture_descriptor/icons/passport.dmi' + icon_state = "passport_unathi_conv" + desc = "A document that indentifies its bearer as a registered denizen of the Ssen-Uuma Convent." + +/obj/item/passport/xeno/unathi/league + name = "\improper Rah'Zakeh League registration document" + icon = 'mods/expanded_culture_descriptor/icons/passport.dmi' + icon_state = "passport_unathi_league" + desc = "A document that indentifies its bearer as a registered denizen of the Rah'Zakeh League." + +/obj/item/passport/xeno/unathi/tersten + name = "\improper Tersten Republic identity document" + icon = 'mods/expanded_culture_descriptor/icons/passport.dmi' + icon_state = "passport_unathi_tersten" + desc = "Issued by the Tersten Republic to its Unathi inhabitants, this document identifies its bearer as a citizen of the Republic, while also acting as a permanent residence permit across the rest of the SCG space." diff --git a/mods/expanded_culture_descriptor/code/species/lizard.dm b/mods/expanded_culture_descriptor/code/species/lizard.dm new file mode 100644 index 0000000000000..a8feea01e99dd --- /dev/null +++ b/mods/expanded_culture_descriptor/code/species/lizard.dm @@ -0,0 +1,31 @@ +/datum/species/unathi + extended_cultural_info = list( + TAG_CULTURE = list( + CULTURE_UNATHI_TERSTEN + ), + TAG_HOMEWORLD = list( + HOME_SYSTEM_UNATHI_TERSTEN + ), + TAG_FACTION = list( + FACTION_UNATHI_TERSTEN, + FACTION_NANOTRASEN, + FACTION_FREETRADE, + FACTION_HEPHAESTUS, + FACTION_EXPEDITIONARY, + FACTION_PCRC, + FACTION_SAARE, + FACTION_CORPORATE, + FACTION_DAIS, + FACTION_ZENG_HU, + FACTION_WARD_TAKAHASHI, + FACTION_GRAYSON, + FACTION_AERTHER, + FACTION_MAJOR_BILL, + FACTION_FOCAL_POINT, + FACTION_XION, + FACTION_VEY_MED, + FACTION_BISHOP, + FACTION_ZPCI, + FACTION_SEPTENERGO + ) + ) diff --git a/mods/expanded_culture_descriptor/code/species/machine.dm b/mods/expanded_culture_descriptor/code/species/machine.dm new file mode 100644 index 0000000000000..3fc5064976e41 --- /dev/null +++ b/mods/expanded_culture_descriptor/code/species/machine.dm @@ -0,0 +1,9 @@ +/datum/species/machine + extended_cultural_info = list( + TAG_HOMEWORLD = list( + HOME_SYSTEM_ROOT + ), + TAG_FACTION = list( + FACTION_POSITRONICS + ) + ) diff --git a/mods/expanded_culture_descriptor/code/species/species.dm b/mods/expanded_culture_descriptor/code/species/species.dm new file mode 100644 index 0000000000000..0bab26230a43e --- /dev/null +++ b/mods/expanded_culture_descriptor/code/species/species.dm @@ -0,0 +1,2 @@ +/datum/species + var/list/extended_cultural_info = list() diff --git a/mods/expanded_culture_descriptor/code/species/station.dm b/mods/expanded_culture_descriptor/code/species/station.dm new file mode 100644 index 0000000000000..92fa57896822d --- /dev/null +++ b/mods/expanded_culture_descriptor/code/species/station.dm @@ -0,0 +1,76 @@ +/datum/species/human + extended_cultural_info = list( + TAG_CULTURE = list( + CULTURE_HUMAN_AVACOMMON, + CULTURE_HUMAN_AVANOBLE, + CULTURE_HUMAN_LORRIMAN, + CULTURE_HUMAN_LORDUP, + CULTURE_HUMAN_LORDLOW, + CULTURE_HUMAN_MIRANIAN, + CULTURE_HUMAN_NYXIAN + ), + TAG_FACTION = list( + FACTION_SOL_CENTRAL, + FACTION_FLEET, + FACTION_EXPEDITIONARY, + FACTION_INDIE_CONFED, + FACTION_NANOTRASEN, + FACTION_FREETRADE, + FACTION_CORPORATE, + FACTION_HEPHAESTUS, + FACTION_XYNERGY, + FACTION_DAIS, + FACTION_ZENG_HU, + FACTION_WARD_TAKAHASHI, + FACTION_GRAYSON, + FACTION_AERTHER, + FACTION_MAJOR_BILL, + FACTION_FOCAL_POINT, + FACTION_XION, + FACTION_VEY_MED, + FACTION_BISHOP, + FACTION_SEPTENERGO, + FACTION_PCRC, + FACTION_SAARE, + FACTION_ZPCI, + FACTION_OTHER + ), + TAG_HOMEWORLD = list( + HOME_SYSTEM_EARTH, + HOME_SYSTEM_LUNA, + HOME_SYSTEM_MARS, + HOME_SYSTEM_VENUS, + HOME_SYSTEM_CERES, + HOME_SYSTEM_PLUTO, + HOME_SYSTEM_TAU_CETI, + HOME_SYSTEM_HELIOS, + HOME_SYSTEM_TERRA, + HOME_SYSTEM_SAFFAR, + HOME_SYSTEM_PIRX, + HOME_SYSTEM_TADMOR, + HOME_SYSTEM_BRAHE, + HOME_SYSTEM_IOLAUS, + HOME_SYSTEM_GAIA, + HOME_SYSTEM_MAGNITKA, + HOME_SYSTEM_CASTILLA, + HOME_SYSTEM_FOSTER, + HOME_SYSTEM_TERSTEN, + HOME_SYSTEM_AVALON, + HOME_SYSTEM_MIRANIA, + HOME_SYSTEM_NYX_BRINKBURN, + HOME_SYSTEM_NYX_KALDARK, + HOME_SYSTEM_NYX_ROANOK, + HOME_SYSTEM_NYX_YUKLIT, + HOME_SYSTEM_NYX_CASSER, + HOME_SYSTEM_OTHER, + HOME_SYSTEM_DEEP_SPACE + ) + ) + +/datum/species/skrell + extended_cultural_info = list( + TAG_FACTION = list( + FACTION_SKRELL_MED, + FACTION_SKRELL_FOOD + ) + ) diff --git a/mods/expanded_culture_descriptor/icons/passport.dmi b/mods/expanded_culture_descriptor/icons/passport.dmi new file mode 100644 index 0000000000000..c4c2db8178ae5 Binary files /dev/null and b/mods/expanded_culture_descriptor/icons/passport.dmi differ diff --git a/mods/fancy_sofas/_fancy_sofas.dm b/mods/fancy_sofas/_fancy_sofas.dm new file mode 100644 index 0000000000000..b66e9f41a0272 --- /dev/null +++ b/mods/fancy_sofas/_fancy_sofas.dm @@ -0,0 +1,5 @@ + +/singleton/modpack/fancy_sofas + name = "Fancy Sofas" + desc = "Красивые диванчики за авторством Келгараса и Ремишн" + author = "Констебель Глист#2586, shroad#2612, Remission#3553" diff --git a/mods/fancy_sofas/_fancy_sofas.dme b/mods/fancy_sofas/_fancy_sofas.dme new file mode 100644 index 0000000000000..604c77b79c11c --- /dev/null +++ b/mods/fancy_sofas/_fancy_sofas.dme @@ -0,0 +1,9 @@ +#ifndef MODPACK_FANCY_SOFAS +#define MODPACK_FANCY_SOFAS + +#include "_fancy_sofas.dm" + +#include "code/roundedchair.dm" +#include "code/sofa.dm" + +#endif diff --git a/mods/fancy_sofas/code/roundedchair.dm b/mods/fancy_sofas/code/roundedchair.dm new file mode 100644 index 0000000000000..4c77b58dc649d --- /dev/null +++ b/mods/fancy_sofas/code/roundedchair.dm @@ -0,0 +1,72 @@ +/obj/structure/bed/chair/rounded + name = "rounded chair" + desc = "It's a rounded chair. It looks comfy." + icon = 'mods/fancy_sofas/icons/furniture.dmi' + icon_state = "roundedchair_preview" + base_icon = "roundedchair" + +/obj/structure/bed/chair/rounded/hard/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, padding_material) + +/obj/structure/bed/chair/rounded/brown/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, MATERIAL_LEATHER_GENERIC) + +/obj/structure/bed/chair/rounded/red/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, MATERIAL_CARPET) + +/obj/structure/bed/chair/rounded/teal/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "teal") + +/obj/structure/bed/chair/rounded/black/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "black") + +/obj/structure/bed/chair/rounded/green/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "green") + +/obj/structure/bed/chair/rounded/purple/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "purple") + +/obj/structure/bed/chair/rounded/blue/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "blue") + +/obj/structure/bed/chair/rounded/beige/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "beige") + +/obj/structure/bed/chair/rounded/lime/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "lime") + +/obj/structure/bed/chair/rounded/yellow/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "yellow") + +/obj/structure/bed/chair/rounded/light/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, MATERIAL_CLOTH) + +//SOFA RECIPE +/datum/stack_recipe/furniture/chair/rounded + title = "rounded chair" + result_type = /obj/structure/bed/chair/rounded + time = 10 + +/datum/stack_recipe/furniture/chair/rounded/display_name() + return modifiers ? jointext(modifiers + ..(), " ") : ..() + +/datum/stack_recipe/furniture/chair/rounded + title = "rounded chair" + req_amount = 3 + +#define ROUNDEDCHAIR(color) /datum/stack_recipe/furniture/chair/rounded/##color{\ + result_type = /obj/structure/bed/chair/rounded/##color;\ + modifiers = list(#color)\ + } +ROUNDEDCHAIR(beige) +ROUNDEDCHAIR(black) +ROUNDEDCHAIR(brown) +ROUNDEDCHAIR(blue) +ROUNDEDCHAIR(lime) +ROUNDEDCHAIR(teal) +ROUNDEDCHAIR(red) +ROUNDEDCHAIR(purple) +ROUNDEDCHAIR(green) +ROUNDEDCHAIR(yellow) +ROUNDEDCHAIR(light) +#undef ROUNDEDCHAIR diff --git a/mods/fancy_sofas/code/sofa.dm b/mods/fancy_sofas/code/sofa.dm new file mode 100644 index 0000000000000..e8a606109d6bb --- /dev/null +++ b/mods/fancy_sofas/code/sofa.dm @@ -0,0 +1,266 @@ +/obj/structure/bed/sofa + name = "sofa" + desc = "A wide and comfy sofa - no one assistant was ate by it due production! It's made of wood and covered with synthetic leather." + icon = 'mods/fancy_sofas/icons/furniture.dmi' + icon_state = "sofa_preview" + base_icon = "sofa" + buckle_dir = FALSE + buckle_stance = BUCKLE_FORCE_STAND + obj_flags = OBJ_FLAG_ROTATABLE + +/obj/structure/bed/sofa/do_simple_ranged_interaction(mob/user) + if(!buckled_mob && user) + rotate(user) + return TRUE + +/obj/structure/bed/sofa/set_dir() + ..() + if(buckled_mob) + buckled_mob.set_dir(dir) + +/obj/structure/bed/sofa/post_buckle_mob() + update_icon() + return ..() + +/obj/structure/bed/sofa/on_update_icon() + ..() + + var/cache_key = "[base_icon]-[material.name]-over" + if(isnull(stool_cache[cache_key])) + var/image/I = image('mods/fancy_sofas/icons/furniture.dmi', "[base_icon]_over") + if(material_alteration & MATERIAL_ALTERATION_COLOR) + I.color = material.icon_colour + I.layer = ABOVE_HUMAN_LAYER + stool_cache[cache_key] = I + AddOverlays(stool_cache[cache_key]) + // Padding overlay. + if(padding_material) + var/padding_cache_key = "[base_icon]-padding-[padding_material.name]-over" + if(isnull(stool_cache[padding_cache_key])) + var/image/I = image(icon, "[base_icon]_padding_over") + if(material_alteration & MATERIAL_ALTERATION_COLOR) + I.color = padding_material.icon_colour + I.layer = ABOVE_HUMAN_LAYER + stool_cache[padding_cache_key] = I + AddOverlays(stool_cache[padding_cache_key]) + + if(buckled_mob) + cache_key = "[base_icon]-armrest-[material.name]" + if(isnull(stool_cache[cache_key])) + var/image/I = image(icon, "[base_icon]_armrest") + I.layer = ABOVE_HUMAN_LAYER + if(material_alteration & MATERIAL_ALTERATION_COLOR) + I.color = material.icon_colour + stool_cache[cache_key] = I + AddOverlays(stool_cache[cache_key]) + if(padding_material) + cache_key = "[base_icon]-padding-armrest-[padding_material.name]" + if(isnull(stool_cache[cache_key])) + var/image/I = image(icon, "[base_icon]_padding_armrest") + I.layer = ABOVE_HUMAN_LAYER + if(material_alteration & MATERIAL_ALTERATION_COLOR) + I.color = padding_material.icon_colour + stool_cache[cache_key] = I + AddOverlays(stool_cache[cache_key]) + +/obj/structure/bed/sofa/m/rotate(mob/user) + if(!CanPhysicallyInteract(user) || anchored) + to_chat(user, SPAN_NOTICE("You can't interact with \the [src] right now!")) + return + + set_dir(turn(dir, 45)) + update_icon() + +/obj/structure/bed/sofa/rotate(mob/user) + if(!CanPhysicallyInteract(user) || anchored) + to_chat(user, SPAN_NOTICE("You can't interact with \the [src] right now!")) + return + + set_dir(turn(dir, 90)) + update_icon() + +/obj/structure/bed/sofa/m/red/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, MATERIAL_CARPET) + +/obj/structure/bed/sofa/m/brown/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, MATERIAL_LEATHER_GENERIC) + +/obj/structure/bed/sofa/m/teal/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "teal") + +/obj/structure/bed/sofa/m/black/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "black") + +/obj/structure/bed/sofa/m/green/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "green") + +/obj/structure/bed/sofa/m/purple/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "purple") + +/obj/structure/bed/sofa/m/blue/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "blue") + +/obj/structure/bed/sofa/m/beige/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "beige") + +/obj/structure/bed/sofa/m/lime/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "lime") + +/obj/structure/bed/sofa/m/yellow/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "yellow") + +/obj/structure/bed/sofa/m/light/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, MATERIAL_CLOTH) + +/obj/structure/bed/sofa/r + name = "sofa" + desc = "A wide and comfy sofa - no one assistant was ate by it due production! It's made of wood and covered with synthetic leather." + icon_state = "sofa_r_preview" + base_icon = "sofa_r" + +/obj/structure/bed/sofa/r/red/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, MATERIAL_CARPET) + +/obj/structure/bed/sofa/r/brown/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, MATERIAL_LEATHER_GENERIC) + +/obj/structure/bed/sofa/r/teal/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "teal") + +/obj/structure/bed/sofa/r/black/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "black") + +/obj/structure/bed/sofa/r/green/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "green") + +/obj/structure/bed/sofa/r/purple/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "purple") + +/obj/structure/bed/sofa/r/blue/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "blue") + +/obj/structure/bed/sofa/r/beige/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "beige") + +/obj/structure/bed/sofa/r/lime/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "lime") + +/obj/structure/bed/sofa/r/yellow/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "yellow") + +/obj/structure/bed/sofa/r/light/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, MATERIAL_CLOTH) + +/obj/structure/bed/sofa/l + name = "sofa" + desc = "A wide and comfy sofa - no one assistant was ate by it due production! It's made of wood and covered with synthetic leather." + icon_state = "sofa_l_preview" + base_icon = "sofa_l" + +/obj/structure/bed/sofa/l/red/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, MATERIAL_CARPET) + +/obj/structure/bed/sofa/l/brown/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, MATERIAL_LEATHER_GENERIC) + +/obj/structure/bed/sofa/l/teal/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "teal") + +/obj/structure/bed/sofa/l/black/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "black") + +/obj/structure/bed/sofa/l/green/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "green") + +/obj/structure/bed/sofa/l/purple/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "purple") + +/obj/structure/bed/sofa/l/blue/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "blue") + +/obj/structure/bed/sofa/l/beige/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "beige") + +/obj/structure/bed/sofa/l/lime/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "lime") + +/obj/structure/bed/sofa/l/yellow/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, "yellow") + +/obj/structure/bed/sofa/l/light/New(newloc, newmaterial = MATERIAL_WOOD) + ..(newloc, newmaterial, MATERIAL_CLOTH) + + + +//SOFA RECIPE +/datum/stack_recipe/furniture/sofa + title = "sofa" + result_type = /obj/structure/bed/sofa + time = 10 + var/list/modifiers + +/datum/stack_recipe/furniture/sofa/display_name() + return modifiers ? jointext(modifiers + ..(), " ") : ..() + +/datum/stack_recipe/furniture/sofa/m + title = "middle sofa" + req_amount = 3 + +#define MIDDLE_SOFA(color) /datum/stack_recipe/furniture/sofa/m/##color{\ + result_type = /obj/structure/bed/sofa/m/##color;\ + modifiers = list(#color, "middle")\ + } +MIDDLE_SOFA(beige) +MIDDLE_SOFA(black) +MIDDLE_SOFA(brown) +MIDDLE_SOFA(blue) +MIDDLE_SOFA(lime) +MIDDLE_SOFA(teal) +MIDDLE_SOFA(red) +MIDDLE_SOFA(purple) +MIDDLE_SOFA(green) +MIDDLE_SOFA(yellow) +MIDDLE_SOFA(light) +#undef MIDDLE_SOFA + +/datum/stack_recipe/furniture/sofa/l + title = "left sofa" + req_amount = 3 + +#define LEFT_SOFA(color) /datum/stack_recipe/furniture/sofa/l/##color{\ + result_type = /obj/structure/bed/sofa/l/##color;\ + modifiers = list(#color, "left")\ + } +LEFT_SOFA(beige) +LEFT_SOFA(black) +LEFT_SOFA(brown) +LEFT_SOFA(blue) +LEFT_SOFA(lime) +LEFT_SOFA(teal) +LEFT_SOFA(red) +LEFT_SOFA(purple) +LEFT_SOFA(green) +LEFT_SOFA(yellow) +LEFT_SOFA(light) +#undef LEFT_SOFA + +/datum/stack_recipe/furniture/sofa/r + title = "right sofa" + req_amount = 3 + +#define RIGHT_SOFA(color) /datum/stack_recipe/furniture/sofa/r/##color{\ + result_type = /obj/structure/bed/sofa/r/##color;\ + modifiers = list(#color, "right")\ + } +RIGHT_SOFA(beige) +RIGHT_SOFA(black) +RIGHT_SOFA(brown) +RIGHT_SOFA(blue) +RIGHT_SOFA(lime) +RIGHT_SOFA(teal) +RIGHT_SOFA(red) +RIGHT_SOFA(purple) +RIGHT_SOFA(green) +RIGHT_SOFA(yellow) +RIGHT_SOFA(light) +#undef RIGHT_SOFA diff --git a/mods/fancy_sofas/icons/furniture.dmi b/mods/fancy_sofas/icons/furniture.dmi new file mode 100644 index 0000000000000..46ca6abcba137 Binary files /dev/null and b/mods/fancy_sofas/icons/furniture.dmi differ diff --git a/mods/gliding/README.md b/mods/gliding/README.md new file mode 100644 index 0000000000000..cbfb9378bf2e4 --- /dev/null +++ b/mods/gliding/README.md @@ -0,0 +1,83 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/897 + + + +## Глайдинг + +ID мода: GLIDING + + +### Описание мода + +Плавное движение от тайла до тайла для всех объектов игры. + + +### Изменения *кор кода* + +- `code/modules/mob/living/living.dm`: `/mob/living/proc/handle_pulling_after_move()` +- `/code/datums/movement/mob.dm`: + - `/datum/movement_handler/mob/delay/DoMove()` + - `/datum/movement_handler/mob/delay/SetDelay()` + - `/datum/movement_handler/mob/delay/AddDelay()` + - `/datum/movement_handler/mob/movement/proc/HandleGrabs()` + + +### Оверрайды + +- Отсутствуют + + + +### Дефайны + +- `code/__defines/~mods/~master_defines.dm`: `DELAY2GLIDESIZE` + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +SuhEugene + diff --git a/mods/gliding/_gliding.dm b/mods/gliding/_gliding.dm new file mode 100644 index 0000000000000..385bb656903f9 --- /dev/null +++ b/mods/gliding/_gliding.dm @@ -0,0 +1,4 @@ +/singleton/modpack/gliding + name = "Глайдинг" + desc = "Плавное движение от тайла до тайла для всех объектов игры." + author = "SuhEugene" diff --git a/mods/gliding/_gliding.dme b/mods/gliding/_gliding.dme new file mode 100644 index 0000000000000..0531fb2a86c51 --- /dev/null +++ b/mods/gliding/_gliding.dme @@ -0,0 +1,9 @@ +#ifndef MODPACK_GLIDING +#define MODPACK_GLIDING + +#include "_gliding.dm" + +#include "code/movable.dm" +#include "code/movement_handler.dm" + +#endif diff --git a/mods/gliding/code/movable.dm b/mods/gliding/code/movable.dm new file mode 100644 index 0000000000000..e53182dd2b282 --- /dev/null +++ b/mods/gliding/code/movable.dm @@ -0,0 +1,9 @@ +/atom/movable/proc/set_glide_size(glide_size_override = 0, min = 0.9, max = world.icon_size/2) + if (!glide_size_override || glide_size_override > max) + glide_size = 0 + else + glide_size = max(min, glide_size_override) + +/proc/step_glide(atom/movable/am, dir, glide_size_override) + am.set_glide_size(glide_size_override) + return step(am, dir) diff --git a/mods/gliding/code/movement_handler.dm b/mods/gliding/code/movement_handler.dm new file mode 100644 index 0000000000000..40c9d94f3af90 --- /dev/null +++ b/mods/gliding/code/movement_handler.dm @@ -0,0 +1,8 @@ +/datum/movement_handler/mob/delay + VAR_PROTECTED/delay = 1 + +/datum/movement_handler/mob/delay/proc/UpdateGlideSize() + host.set_glide_size(DELAY2GLIDESIZE(delay)) + +/datum/movement_handler/delay/proc/UpdateGlideSize() + host.set_glide_size(DELAY2GLIDESIZE(delay)) diff --git a/mods/global_modpacks.dm b/mods/global_modpacks.dm new file mode 100644 index 0000000000000..94639e95b2db7 --- /dev/null +++ b/mods/global_modpacks.dm @@ -0,0 +1,32 @@ +// SIERRA TODO: GET RID OF IT!!! +#include "ai/_ai.dme" +#include "body_markings/_body_markings.dme" +#include "client_verbs/_client_verbs.dme" +#include "don_loadout/_don_loadout.dme" +#include "emote_panel/_emote_panel.dme" +#include "ex666_ecosystem/_ex666_ecosystem.dme" +#include "expanded_culture_descriptor/_expanded_culture_descriptor.dme" +#include "gliding/_gliding.dme" +#include "machinery/_machinery.dme" +#include "hairs_ports/_hairs_ports.dme" +#include "hardsuits/_hardsuits.dme" +#include "sprite_accessories/_sprite_accessories.dme" +#include "jukebox_tapes/_jukebox_tapes.dme" +#include "loadout_items/_loadout_items.dme" +#include "ipc_cooling_unit/_ipc_cooling_unit.dme" +#include "music_player/_music_player.dme" +#include "ntnet/_ntnet.dme" +#include "nyc_posters/_nyc_posters.dme" +#include "statusbar/_statusbar.dme" +#include "utf8/_utf8.dme" +#include "utility_items/_utility_items.dme" + +// SS220 PACKS START + +#include "~_ss220/text2speech/tts.dme" +#include "~_ss220/bloom_light/_bloom_light.dme" +#include "~_ss220/tgs/includes.dm" + +// SS220 PACKS END + +#include "../packs/sierra-tweaks/_pack.dm" diff --git a/mods/guns/README.md b/mods/guns/README.md new file mode 100644 index 0000000000000..1ab2e942df66d --- /dev/null +++ b/mods/guns/README.md @@ -0,0 +1,77 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1897 + + + +## Оружие + +ID мода: MODPACK_GUNS + + +### Описание мода + +Модпак добавляет новые спрайты вооружения, а также ребалансит некоторое оружие. + + +### Изменения *кор кода* + +- Отсутствуют + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +LordNest, WolforbyKot (спрайты) + diff --git a/mods/guns/_guns.dm b/mods/guns/_guns.dm new file mode 100644 index 0000000000000..d63fbc4c0c0db --- /dev/null +++ b/mods/guns/_guns.dm @@ -0,0 +1,4 @@ +/singleton/modpack/guns + name = "Оружие" + desc = "Модификация спрайтов и ребаланс вооружения." + author = "LordNest" diff --git a/mods/guns/_guns.dme b/mods/guns/_guns.dme new file mode 100644 index 0000000000000..b3e85345ab2d6 --- /dev/null +++ b/mods/guns/_guns.dme @@ -0,0 +1,19 @@ +#ifndef MODPACK_GUNS +#define MODPACK_GUNS + +#include "_guns.dm" + +#include "code/energy.dm" +#include "code/projectile.dm" +#include "code/xenos.dm" + +#endif +// BEGIN_INTERNALS +// END_INTERNALS +// BEGIN_FILE_DIR +#define FILE_DIR . +// END_FILE_DIR +// BEGIN_PREFERENCES +// END_PREFERENCES +// BEGIN_INCLUDE +// END_INCLUDE diff --git a/mods/guns/code/energy.dm b/mods/guns/code/energy.dm new file mode 100644 index 0000000000000..489df86689f69 --- /dev/null +++ b/mods/guns/code/energy.dm @@ -0,0 +1,94 @@ +/obj/item/gun/energy/laser + icon = 'mods/guns/icons/obj/laser_carbine.dmi' + +/obj/item/gun/energy/retro + name = "retro laser" + icon = 'mods/guns/icons/obj/retro_laser.dmi' + +/obj/item/gun/energy/lasercannon + icon = 'mods/guns/icons/obj/laser_cannon.dmi' + +/obj/item/gun/energy/xray + icon = 'mods/guns/icons/obj/xray.dmi' + +/obj/item/gun/energy/xray/pistol + icon = 'mods/guns/icons/obj/xray_pistol.dmi' + +/obj/item/gun/energy/sniperrifle + icon = 'mods/guns/icons/obj/laser_sniper.dmi' + +/obj/item/gun/energy/pulse_rifle + wielded_item_state = "pulsecarbine-wielded" + icon = 'mods/guns/icons/obj/pulse_rifle.dmi' + item_icons = list( + slot_r_hand_str = 'mods/guns/icons/mob/righthand_guns.dmi', + slot_l_hand_str = 'mods/guns/icons/mob/lefthand_guns.dmi' + ) + +/obj/item/gun/energy/pulse_rifle/carbine + icon = 'mods/guns/icons/obj/pulse_carbine.dmi' + wielded_item_state = null + +/obj/item/gun/energy/pulse_rifle/pistol + icon = 'mods/guns/icons/obj/pulse_pistol.dmi' + wielded_item_state = null + +/obj/item/gun/energy/ionrifle + icon = 'mods/guns/icons/obj/ion_rifle.dmi' + item_icons = list( + slot_r_hand_str = 'mods/guns/icons/mob/righthand_guns.dmi', + slot_l_hand_str = 'mods/guns/icons/mob/lefthand_guns.dmi' + ) + +/obj/item/gun/energy/ionrifle/small + wielded_item_state = null + +/obj/item/gun/energy/ionrifle/small/sec + desc = "The NT Mk72 EW Preston is a personal defense weapon designed to disable mechanical threats. This one clad in white frame." + icon = 'mods/guns/icons/obj/ion_pistol_nt.dmi' + +/obj/item/gun/energy/incendiary_laser + icon = 'mods/guns/icons/obj/incendiary_laser.dmi' + +/obj/item/gun/energy/taser + icon = 'mods/guns/icons/obj/taser.dmi' + +/obj/item/gun/energy/taser/carbine + icon = 'mods/guns/icons/obj/taser_carbine.dmi' + item_icons = list( + slot_r_hand_str = 'mods/guns/icons/mob/righthand_guns.dmi', + slot_l_hand_str = 'mods/guns/icons/mob/lefthand_guns.dmi' + ) + +/obj/item/gun/energy/stunrevolver + icon = 'mods/guns/icons/obj/stunrevolver.dmi' + +/obj/item/gun/energy/stunrevolver/rifle + icon = 'mods/guns/icons/obj/stunrifle.dmi' + item_icons = list( + slot_r_hand_str = 'mods/guns/icons/mob/righthand_guns.dmi', + slot_l_hand_str = 'mods/guns/icons/mob/lefthand_guns.dmi', + ) + +/obj/item/gun/energy/laser/secure + icon = 'mods/guns/icons/obj/laser_carbine.dmi' + req_access = list(list(access_brig, access_bridge)) + +/obj/item/gun/energy/confuseray/secure + name = "disorientator" + desc = "The W-T Mk. 6 Disorientator fitted with an NT1017 secure fire chip. It has a Nanotrasen logo on the grip." + icon = 'mods/guns/icons/obj/confuseray_secure.dmi' + icon_state = "confusesecure" + req_access = list(list(access_brig, access_bridge)) + +/obj/item/gun/energy/stunrevolver/secure + name = "smart service revolver" + desc = "A&M X8 Tessub. Next level in personal security with three diffirent firing modes. This one is fitted with an NT1019 chip which allows remote authorization of weapon functionality. It has an NT emblem on the grip." + icon = 'mods/guns/icons/obj/stunrevolver_secure.dmi' + projectile_type = /obj/item/projectile/beam/stun + firemodes = list( + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="energyrevolverstun"), + list(mode_name="shock", projectile_type=/obj/item/projectile/beam/stun/shock, modifystate="energyrevolvershock"), + list(mode_name="kill", projectile_type=/obj/item/projectile/beam, modifystate="energyrevolverkill") + ) + req_access = list(list(access_brig, access_heads)) diff --git a/mods/guns/code/projectile.dm b/mods/guns/code/projectile.dm new file mode 100644 index 0000000000000..ed8b30941369f --- /dev/null +++ b/mods/guns/code/projectile.dm @@ -0,0 +1,44 @@ +/obj/item/gun/projectile/revolver/foundation + icon = 'mods/guns/icons/obj/foundation.dmi' + +/obj/item/gun/projectile/automatic + icon = 'mods/guns/icons/obj/prototype_smg.dmi' + +/obj/item/gun/projectile/automatic/machine_pistol + icon = 'mods/guns/icons/obj/machine_pistol.dmi' + +/obj/item/gun/projectile/automatic/merc_smg + icon = 'mods/guns/icons/obj/merc_smg.dmi' + +/* +/obj/item/gun/projectile/automatic/assault_rifle + icon = 'mods/guns/icons/obj/assault_rifle.dmi' + +/obj/item/gun/projectile/automatic/l6_saw + icon = 'mods/guns/icons/obj/saw.dmi' + +*/ + +/obj/item/gun/projectile/automatic/bullpup_rifle + icon = 'mods/guns/icons/obj/bullpup_rifle.dmi' + +/obj/item/gun/projectile/automatic/battlerifle + icon = 'mods/guns/icons/obj/battlerifle.dmi' + item_icons = list( + slot_r_hand_str = 'mods/guns/icons/mob/righthand_guns.dmi', + slot_l_hand_str = 'mods/guns/icons/mob/lefthand_guns.dmi', + ) + +/* +/obj/item/gun/projectile/heavysniper + icon = 'mods/guns/icons/obj/heavysniper.dmi' + +/obj/item/gun/projectile/heavysniper/boltaction + icon = 'mods/guns/icons/obj/boltaction.dmi' +*/ + +/obj/item/gun/projectile/pistol/optimus + icon = 'mods/guns/icons/obj/confederate.dmi' + +/obj/item/gun/projectile/pistol/magnum_pistol + icon = 'mods/guns/icons/obj/magnum_pistol.dmi' diff --git a/mods/guns/code/xenos.dm b/mods/guns/code/xenos.dm new file mode 100644 index 0000000000000..8c5f88c20aa47 --- /dev/null +++ b/mods/guns/code/xenos.dm @@ -0,0 +1,47 @@ +/obj/item/gun/energy/gun/skrell + icon = 'mods/guns/icons/obj/skrell_pistol.dmi' + +/obj/item/gun/energy/pulse_rifle/skrell + icon = 'mods/guns/icons/obj/skrell_carbine.dmi' + +/obj/item/gun/magnetic/railgun/flechette/skrell + icon = 'icons/obj/guns/skrell_rifle.dmi' + +// VOX BOX + +/obj/item/projectile/beam/darkmatter + damage = 30 + armor_penetration = 35 + +/obj/item/projectile/beam/stun/darkmatter + agony = 70 + eyeblur = 6 + +/obj/item/projectile/energy/darkmatter + damage = 10 + armor_penetration = 40 + +/obj/item/gun/energy/darkmatter + firemodes = list( + list(mode_name="stunning", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(30), dispersion=null, projectile_type=/obj/item/projectile/beam/stun/darkmatter, charge_cost = 60), + list(mode_name="focused", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(30), dispersion=null, projectile_type=/obj/item/projectile/beam/darkmatter, charge_cost = 100), + list(mode_name="scatter burst", burst=8, fire_delay=null, move_delay=4, burst_accuracy=list(0, 0, 0, 0, 0, 0, 0, 0), dispersion=list(0, 0, 0, 1, 1, 1, 2, 2, 3), projectile_type=/obj/item/projectile/energy/darkmatter, charge_cost = 7) + ) + +/obj/item/gun/energy/sonic + firemodes = list( + list(mode_name="normal", projectile_type=/obj/item/projectile/energy/plasmastun/sonic/weak, charge_cost = 50), + list(mode_name="overcharge", projectile_type=/obj/item/projectile/energy/plasmastun/sonic/strong, charge_cost = 100) + ) + +/obj/item/projectile/energy/plasmastun/sonic + life_span = 6 + +/obj/item/projectile/energy/plasmastun/sonic/strong + damage = 35 + +/obj/item/gun/launcher/alien/spikethrower + max_ammo = 4 + +/obj/item/gun/launcher/alien/slugsling + ammo_gen_time = 200 diff --git a/mods/guns/icons/mob/lefthand_guns.dmi b/mods/guns/icons/mob/lefthand_guns.dmi new file mode 100644 index 0000000000000..a05954af3671a Binary files /dev/null and b/mods/guns/icons/mob/lefthand_guns.dmi differ diff --git a/mods/guns/icons/mob/lefthand_guns_secure.dmi b/mods/guns/icons/mob/lefthand_guns_secure.dmi new file mode 100644 index 0000000000000..b7ea0250dbcb7 Binary files /dev/null and b/mods/guns/icons/mob/lefthand_guns_secure.dmi differ diff --git a/mods/guns/icons/mob/righthand_guns.dmi b/mods/guns/icons/mob/righthand_guns.dmi new file mode 100644 index 0000000000000..b544f1492e419 Binary files /dev/null and b/mods/guns/icons/mob/righthand_guns.dmi differ diff --git a/mods/guns/icons/mob/righthand_guns_secure.dmi b/mods/guns/icons/mob/righthand_guns_secure.dmi new file mode 100644 index 0000000000000..d2f8c4400d540 Binary files /dev/null and b/mods/guns/icons/mob/righthand_guns_secure.dmi differ diff --git a/mods/guns/icons/obj/basic_energy.dmi b/mods/guns/icons/obj/basic_energy.dmi new file mode 100644 index 0000000000000..e5bd33bcb25be Binary files /dev/null and b/mods/guns/icons/obj/basic_energy.dmi differ diff --git a/mods/guns/icons/obj/battlerifle.dmi b/mods/guns/icons/obj/battlerifle.dmi new file mode 100644 index 0000000000000..3cd0abe546ed1 Binary files /dev/null and b/mods/guns/icons/obj/battlerifle.dmi differ diff --git a/mods/guns/icons/obj/boltaction.dmi b/mods/guns/icons/obj/boltaction.dmi new file mode 100644 index 0000000000000..7d5bf0e518bc9 Binary files /dev/null and b/mods/guns/icons/obj/boltaction.dmi differ diff --git a/mods/guns/icons/obj/bullpup_rifle.dmi b/mods/guns/icons/obj/bullpup_rifle.dmi new file mode 100644 index 0000000000000..94eaa62c793e3 Binary files /dev/null and b/mods/guns/icons/obj/bullpup_rifle.dmi differ diff --git a/mods/guns/icons/obj/confederate.dmi b/mods/guns/icons/obj/confederate.dmi new file mode 100644 index 0000000000000..359eba7f25ff0 Binary files /dev/null and b/mods/guns/icons/obj/confederate.dmi differ diff --git a/mods/guns/icons/obj/confuseray_secure.dmi b/mods/guns/icons/obj/confuseray_secure.dmi new file mode 100644 index 0000000000000..0f3fea6317d13 Binary files /dev/null and b/mods/guns/icons/obj/confuseray_secure.dmi differ diff --git a/mods/guns/icons/obj/energy_gun_secure.dmi b/mods/guns/icons/obj/energy_gun_secure.dmi new file mode 100644 index 0000000000000..bf92635e1b431 Binary files /dev/null and b/mods/guns/icons/obj/energy_gun_secure.dmi differ diff --git a/mods/guns/icons/obj/foundation.dmi b/mods/guns/icons/obj/foundation.dmi new file mode 100644 index 0000000000000..8b6e76cf70176 Binary files /dev/null and b/mods/guns/icons/obj/foundation.dmi differ diff --git a/mods/guns/icons/obj/freezegun.dmi b/mods/guns/icons/obj/freezegun.dmi new file mode 100644 index 0000000000000..07164e27e155f Binary files /dev/null and b/mods/guns/icons/obj/freezegun.dmi differ diff --git a/mods/guns/icons/obj/garand.dmi b/mods/guns/icons/obj/garand.dmi new file mode 100644 index 0000000000000..983691f8255e2 Binary files /dev/null and b/mods/guns/icons/obj/garand.dmi differ diff --git a/mods/guns/icons/obj/heavysniper.dmi b/mods/guns/icons/obj/heavysniper.dmi new file mode 100644 index 0000000000000..1cb817f1c442a Binary files /dev/null and b/mods/guns/icons/obj/heavysniper.dmi differ diff --git a/mods/guns/icons/obj/holdout_pistol.dmi b/mods/guns/icons/obj/holdout_pistol.dmi new file mode 100644 index 0000000000000..f39fed04730c9 Binary files /dev/null and b/mods/guns/icons/obj/holdout_pistol.dmi differ diff --git a/mods/guns/icons/obj/incendiary_laser.dmi b/mods/guns/icons/obj/incendiary_laser.dmi new file mode 100644 index 0000000000000..1b0f64fcdd6b1 Binary files /dev/null and b/mods/guns/icons/obj/incendiary_laser.dmi differ diff --git a/mods/guns/icons/obj/ion_pistol_nt.dmi b/mods/guns/icons/obj/ion_pistol_nt.dmi new file mode 100644 index 0000000000000..b966402dca5d9 Binary files /dev/null and b/mods/guns/icons/obj/ion_pistol_nt.dmi differ diff --git a/mods/guns/icons/obj/ion_rifle.dmi b/mods/guns/icons/obj/ion_rifle.dmi new file mode 100644 index 0000000000000..5200943f79041 Binary files /dev/null and b/mods/guns/icons/obj/ion_rifle.dmi differ diff --git a/mods/guns/icons/obj/laser_cannon.dmi b/mods/guns/icons/obj/laser_cannon.dmi new file mode 100644 index 0000000000000..e98b5bc08b325 Binary files /dev/null and b/mods/guns/icons/obj/laser_cannon.dmi differ diff --git a/mods/guns/icons/obj/laser_carbine.dmi b/mods/guns/icons/obj/laser_carbine.dmi new file mode 100644 index 0000000000000..29bbed3e4f033 Binary files /dev/null and b/mods/guns/icons/obj/laser_carbine.dmi differ diff --git a/mods/guns/icons/obj/laser_sniper.dmi b/mods/guns/icons/obj/laser_sniper.dmi new file mode 100644 index 0000000000000..d258ece49862c Binary files /dev/null and b/mods/guns/icons/obj/laser_sniper.dmi differ diff --git a/mods/guns/icons/obj/machine_pistol.dmi b/mods/guns/icons/obj/machine_pistol.dmi new file mode 100644 index 0000000000000..570e779e80915 Binary files /dev/null and b/mods/guns/icons/obj/machine_pistol.dmi differ diff --git a/mods/guns/icons/obj/magnum_pistol.dmi b/mods/guns/icons/obj/magnum_pistol.dmi new file mode 100644 index 0000000000000..c3d6585dfa713 Binary files /dev/null and b/mods/guns/icons/obj/magnum_pistol.dmi differ diff --git a/mods/guns/icons/obj/merc_smg.dmi b/mods/guns/icons/obj/merc_smg.dmi new file mode 100644 index 0000000000000..44295abf3bc3e Binary files /dev/null and b/mods/guns/icons/obj/merc_smg.dmi differ diff --git a/mods/guns/icons/obj/military_pistol.dmi b/mods/guns/icons/obj/military_pistol.dmi new file mode 100644 index 0000000000000..f4dfc7c79e154 Binary files /dev/null and b/mods/guns/icons/obj/military_pistol.dmi differ diff --git a/mods/guns/icons/obj/pistol.dmi b/mods/guns/icons/obj/pistol.dmi new file mode 100644 index 0000000000000..098a8f219ec0e Binary files /dev/null and b/mods/guns/icons/obj/pistol.dmi differ diff --git a/mods/guns/icons/obj/prototype_smg.dmi b/mods/guns/icons/obj/prototype_smg.dmi new file mode 100644 index 0000000000000..e7665eedf2820 Binary files /dev/null and b/mods/guns/icons/obj/prototype_smg.dmi differ diff --git a/mods/guns/icons/obj/pulse_carbine.dmi b/mods/guns/icons/obj/pulse_carbine.dmi new file mode 100644 index 0000000000000..878589a86f53b Binary files /dev/null and b/mods/guns/icons/obj/pulse_carbine.dmi differ diff --git a/mods/guns/icons/obj/pulse_pistol.dmi b/mods/guns/icons/obj/pulse_pistol.dmi new file mode 100644 index 0000000000000..96c17ac3b03eb Binary files /dev/null and b/mods/guns/icons/obj/pulse_pistol.dmi differ diff --git a/mods/guns/icons/obj/pulse_rifle.dmi b/mods/guns/icons/obj/pulse_rifle.dmi new file mode 100644 index 0000000000000..991425add7940 Binary files /dev/null and b/mods/guns/icons/obj/pulse_rifle.dmi differ diff --git a/mods/guns/icons/obj/retro_laser.dmi b/mods/guns/icons/obj/retro_laser.dmi new file mode 100644 index 0000000000000..3723c71ce5e6d Binary files /dev/null and b/mods/guns/icons/obj/retro_laser.dmi differ diff --git a/mods/guns/icons/obj/revolvers.dmi b/mods/guns/icons/obj/revolvers.dmi new file mode 100644 index 0000000000000..78c609d6dd840 Binary files /dev/null and b/mods/guns/icons/obj/revolvers.dmi differ diff --git a/mods/guns/icons/obj/shotguns.dmi b/mods/guns/icons/obj/shotguns.dmi new file mode 100644 index 0000000000000..89a8d700001b3 Binary files /dev/null and b/mods/guns/icons/obj/shotguns.dmi differ diff --git a/mods/guns/icons/obj/skrell_carbine.dmi b/mods/guns/icons/obj/skrell_carbine.dmi new file mode 100644 index 0000000000000..18e901adb6a2a Binary files /dev/null and b/mods/guns/icons/obj/skrell_carbine.dmi differ diff --git a/mods/guns/icons/obj/skrell_pistol.dmi b/mods/guns/icons/obj/skrell_pistol.dmi new file mode 100644 index 0000000000000..5bb2dcc028b64 Binary files /dev/null and b/mods/guns/icons/obj/skrell_pistol.dmi differ diff --git a/mods/guns/icons/obj/skrell_rifle.dmi b/mods/guns/icons/obj/skrell_rifle.dmi new file mode 100644 index 0000000000000..1d7d2a3a08cf9 Binary files /dev/null and b/mods/guns/icons/obj/skrell_rifle.dmi differ diff --git a/mods/guns/icons/obj/small_egun.dmi b/mods/guns/icons/obj/small_egun.dmi new file mode 100644 index 0000000000000..938ac544ffe50 Binary files /dev/null and b/mods/guns/icons/obj/small_egun.dmi differ diff --git a/mods/guns/icons/obj/small_egun_secure.dmi b/mods/guns/icons/obj/small_egun_secure.dmi new file mode 100644 index 0000000000000..a4548ee7733e9 Binary files /dev/null and b/mods/guns/icons/obj/small_egun_secure.dmi differ diff --git a/mods/guns/icons/obj/stunrevolver.dmi b/mods/guns/icons/obj/stunrevolver.dmi new file mode 100644 index 0000000000000..928355f4b3020 Binary files /dev/null and b/mods/guns/icons/obj/stunrevolver.dmi differ diff --git a/mods/guns/icons/obj/stunrevolver_secure.dmi b/mods/guns/icons/obj/stunrevolver_secure.dmi new file mode 100644 index 0000000000000..aa94f73910118 Binary files /dev/null and b/mods/guns/icons/obj/stunrevolver_secure.dmi differ diff --git a/mods/guns/icons/obj/stunrifle.dmi b/mods/guns/icons/obj/stunrifle.dmi new file mode 100644 index 0000000000000..8b9977f613ad3 Binary files /dev/null and b/mods/guns/icons/obj/stunrifle.dmi differ diff --git a/mods/guns/icons/obj/taser.dmi b/mods/guns/icons/obj/taser.dmi new file mode 100644 index 0000000000000..73eefb4cd6676 Binary files /dev/null and b/mods/guns/icons/obj/taser.dmi differ diff --git a/mods/guns/icons/obj/taser_carbine.dmi b/mods/guns/icons/obj/taser_carbine.dmi new file mode 100644 index 0000000000000..e82f42c2b08a8 Binary files /dev/null and b/mods/guns/icons/obj/taser_carbine.dmi differ diff --git a/mods/guns/icons/obj/xray.dmi b/mods/guns/icons/obj/xray.dmi new file mode 100644 index 0000000000000..438fbd15f125b Binary files /dev/null and b/mods/guns/icons/obj/xray.dmi differ diff --git a/mods/guns/icons/obj/xray_pistol.dmi b/mods/guns/icons/obj/xray_pistol.dmi new file mode 100644 index 0000000000000..4d63fff64c21b Binary files /dev/null and b/mods/guns/icons/obj/xray_pistol.dmi differ diff --git a/mods/hairs_ports/README.md b/mods/hairs_ports/README.md new file mode 100644 index 0000000000000..8422236b2fec8 --- /dev/null +++ b/mods/hairs_ports/README.md @@ -0,0 +1,77 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1101 + + + +## Дополнительные прически + +ID мода: HAIR_PORT + + +### Описание мода + +Порт причесок с билдов aurora, infinity, onyxbay, paradise RS666. + + +### Изменения *кор кода* + +- Отсутствуют + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +Kam_Survivor, (ресусрсы сообществ aurora, onyxbay, infinity, rs666). + diff --git a/mods/hairs_ports/_hairs_ports.dm b/mods/hairs_ports/_hairs_ports.dm new file mode 100644 index 0000000000000..6ffe25405d399 --- /dev/null +++ b/mods/hairs_ports/_hairs_ports.dm @@ -0,0 +1,4 @@ +/singleton/modpack/hairs_ports + name = "Дополнительные прически" + desc = "Порт причесок и бород с aurora, onyxbay, infinity, rs666." + author = "Kam_Survivor, (ресусрсы сообществ aurora, onyxbay, infinity, rs666)." diff --git a/mods/hairs_ports/_hairs_ports.dme b/mods/hairs_ports/_hairs_ports.dme new file mode 100644 index 0000000000000..e3ce01854ef78 --- /dev/null +++ b/mods/hairs_ports/_hairs_ports.dme @@ -0,0 +1,8 @@ +#ifndef MODPACK_HAIRS_PORTS +#define MODPACK_HAIRS_PORTS + +#include "_hairs_ports.dm" +#include "code\_accessory_facial.dm" +#include "code\_accessory_hair.dm" + +#endif diff --git a/mods/hairs_ports/code/_accessory_facial.dm b/mods/hairs_ports/code/_accessory_facial.dm new file mode 100644 index 0000000000000..13e0022a4c710 --- /dev/null +++ b/mods/hairs_ports/code/_accessory_facial.dm @@ -0,0 +1,182 @@ +/* +/////////////////////////////////// +/ =---------------------------= / +/ == Aurora facial_hair Hair Definitions == / +/ =---------------------------= / +/////////////////////////////////// +*/ + +/datum/sprite_accessory/facial_hair/modpack_hairs_port + icon = 'mods/hairs_ports/icons/port_facial.dmi' + name = "Horseshoe" + icon_state = "facial_horseshoe" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/aurora_britstache + name = "Britstache" + icon_state = "facial_britstache" +/datum/sprite_accessory/facial_hair/modpack_hairs_port/aurora_hairideburns + name = "facial_hair Side Burns" + icon_state = "facial_facialideburns" +/datum/sprite_accessory/facial_hair/modpack_hairs_port/aurora_gt3 + name = "Goat 2" + icon_state = "facial_gt2" +/datum/sprite_accessory/facial_hair/modpack_hairs_port/aurora_gt3 + name = "Goat 3" + icon_state = "facial_gt3" +/datum/sprite_accessory/facial_hair/modpack_hairs_port/aurora_tribeard + name = "Tribeard" + icon_state = "facial_tribeard" +/datum/sprite_accessory/facial_hair/modpack_hairs_port/aurora_martialartist + name = "Martial Artist" + icon_state = "facial_martialartist" +/* +/////////////////////////////////// +/ =---------------------------= / +/ == Onyx facial_hair Hair Definitions == / +/ =---------------------------= / +/////////////////////////////////// +*/ + +/datum/sprite_accessory/facial_hair_hair/modpack_hairs_port/onyx_great + name = "Great" + icon_state = "facial_great" +/datum/sprite_accessory/facial_hair_hair/modpack_hairs_port/onyx_classy + name = "Classy" + icon_state = "facial_classy" +/datum/sprite_accessory/facial_hair_hair/modpack_hairs_port/onyx_tsar + name = "Tsar" + icon_state = "facial_tsar" +/datum/sprite_accessory/facial_hair_hair/modpack_hairs_port/onyx_jarl + name = "Jarl" + icon_state = "facial_jarl" +/datum/sprite_accessory/facial_hair_hair/modpack_hairs_port/onyx_viking + name = "Viking" + icon_state = "facial_viking" + +/* +/////////////////////////////////// +/ =---------------------------= / +/ == RS666 facial_hair Hair Definitions == / +/ =---------------------------= / +/////////////////////////////////// +*/ + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_bandholz + name = "Bandholz" + icon_state = "facial_bandholz" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_classic_beard + name = "Classic Beard" + icon_state = "facial_classic_beard" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_gtb + name = "Gtb" + icon_state = "facial_gtb" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_figther_beard + name = "Figther Beard" + icon_state = "facial_figther_beard" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_side_mustache + name = "Side Mustache" + icon_state = "facial_side_mustache" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_gtp + name = "Stripe" + icon_state = "facial_gtp" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_hollywood_beard + name = "Hollywood Beard" + icon_state = "facial_hollywood_beard" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_brush + name = "Brush" + icon_state = "facial_brush" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_old_man + name = "Old Man" + icon_state = "facial_old_man" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_worker_long + name = "Worker Long" + icon_state = "facial_worker_long" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_lumbers + name = "Lumbers" + icon_state = "facial_lumbers" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_sideburns + name = "Sideburns" + icon_state = "facial_sideburns" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_up_mustache + name = "Up Mustache" + icon_state = "facial_up_mustache" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_bigbeard + name = "Big Beard" + icon_state = "facial_bigbeard" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_mcb + name = "Du Bois" + icon_state = "facial_mcb" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_prospector + name = "Prospector" + icon_state = "facial_prospector" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_sea_wolf_beard + name = "Sea Wolf Beard" + icon_state = "facial_sea_wolf_beard" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_brashes_mustache + name = "Brashes Mustache" + icon_state = "facial_brashes_mustache" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_geek_chin_bread + name = "Geek Chin Bread" + icon_state = "facial_geek_chin_bread" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_livrah_beard + name = "Livrah Beard" + icon_state = "facial_livrah_beard" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_mcs + name = "Mustache And Sideburns" + icon_state = "facial_mcs" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_texas_mustache + name = "Texas Mustache" + icon_state = "facial_texas_mustache" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_unshaven + name = "Unshaven" + icon_state = "facial_unshaven" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_waiter_mustache + name = "Waiter Mustache" + icon_state = "facial_waiter_mustache" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_fishhook + name = "Fishhook" + icon_state = "facial_fishhook" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_anchor + name = "Anchor" + icon_state = "facial_anchor" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_doubleb + name = "Doubleb" + icon_state = "facial_doubleb" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_sideburns_mustache + name = "Sideburns Mustache" + icon_state = "facial_sideburns_mustache" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_vandykehort + name = "Vandykehort" + icon_state = "facial_vandykehort" + +/datum/sprite_accessory/facial_hair/modpack_hairs_port/rs666_balbo + name = "Balbo" + icon_state = "facial_balbo" diff --git a/mods/hairs_ports/code/_accessory_hair.dm b/mods/hairs_ports/code/_accessory_hair.dm new file mode 100644 index 0000000000000..3dfd957cd056c --- /dev/null +++ b/mods/hairs_ports/code/_accessory_hair.dm @@ -0,0 +1,689 @@ + +/* +//////////////////////////// +/ =--------------------= / +/ == Aurora Hair Definitions == / +/ =--------------------= / +//////////////////////////// +*/ + + + + +/datum/sprite_accessory/hair/modpack_hairs_port + icon = 'mods/hairs_ports/icons/port_hair.dmi' + name = "80s Ponytail" + icon_state = "hair_80s_ponytail" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_amanita_long + name = "Amanita Long" + icon_state = "hair_amanita_long" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_bangs + name = "Bangs" + icon_state = "hair_bangs" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_beehive3 + name = "Beehive 3" + icon_state = "hair_beehive3" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_bowlcut_birdnest + name = "Bowlcut Birdnest" + icon_state = "hair_bowlcut_birdnest" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_braided_hipster + name = "Braided Hipster" + icon_state = "hair_braided_hipster" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_80s_ponytail_alt + name = "80s Ponytail Alt" + icon_state = "hair_80s_ponytail_alt" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_amanita_long_alt + name = "Amanita Long Alt" + icon_state = "hair_amanita_long_alt" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_bangs_veryshort + name = "Bangs Very Short" + icon_state = "hair_bangs_veryshort" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_belenko + name = "Belenko" + icon_state = "hair_belenko" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_afrobig + name = "Afro Big" + icon_state = "hair_afrobig" + +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_bangshort + name = "Bang Short" + icon_state = "hair_bangshort" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_bun_casual + name = "Bun Casual" + icon_state = "hair_bun_casual" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_amanita + name = "Amanita" + icon_state = "hair_amanita" + +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_bedhead4 + name = "Bedhead 4" + icon_state = "hair_bedhead4" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_bob_kusanagi + name = "Bob Kusanagi" + icon_state = "hair_bob_kusanagi" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_braided_alt + name = "Braided Alt" + icon_state = "hair_braided_alt" +/datum/sprite_accessory/hair/modpack_hairs_port/aurora_bun_donut + name = "Bun Donut" + icon_state = "hair_bun_donut" + +/* +//////////////////////////// +/ =--------------------= / +/ == Infinity Hair Definitions == / +/ =--------------------= / +//////////////////////////// +*/ + + +/datum/sprite_accessory/hair/modpack_hairs_port/inf_amicia + name = "Amicia" + icon_state = "hair_amicia" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_bun_odango + name = "Bunodango" + icon_state = "hair_bun_odango" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_combedbob + name = "Combed Bob" + icon_state = "hair_combedbob" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_elize + name = "Elize" + icon_state = "hair_elize" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_hairhinobu + name = "Shinobu" + icon_state = "hair_hairhinobu" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_hairidetail3 + name = "Hairs Detail 3" + icon_state = "hair_hairidetail3" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_harley + name = "Harley" + icon_state = "hair_harley" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_lbangs + name = "Messy Bangs" + icon_state = "hair_lbangs" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_longemo_alt + name = "Long Emo (alt)" + icon_state = "hair_longemo_alt" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_mancut + name = "Mancut" + icon_state = "hair_mancut" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_pigtails_kagami + name = "Pigtails Kagami" + icon_state = "hair_pigtails_kagami" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_roxy + name = "Roxy" + icon_state = "hair_roxy" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_twincurls2 + name = "Twincurls2" + icon_state = "hair_twincurls2" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_widowmaker_alt + name = "Widowmaker Alt" + icon_state = "hair_widowmaker_alt" + + + + + + + + +/datum/sprite_accessory/hair/modpack_hairs_port/inf_angel + name = "Angel" + icon_state = "hair_angel" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_bun_odango2 + name = "Bunodango 2" + icon_state = "hair_bun_odango2" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_cotton_hair + name = "Cotton Hair" + icon_state = "hair_cotton_hair" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_encoder + name = "Encoder" + icon_state = "hair_encoder" + +/datum/sprite_accessory/hair/modpack_hairs_port/inf_hairlightlymessy + name = "Slightly Messy" + icon_state = "hair_hairlightlymessy" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_hipstery + name = "Hipstery" + icon_state = "hair_hipstery" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_long_braid_2 + name = "Long Braid 2" + icon_state = "hair_long_braid_2" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_longsidepart + name = "Long Side Part" + icon_state = "hair_longsidepart" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_messy_rightcut + name = "Messy Right Cut" + icon_state = "hair_messy_rightcut" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_pigtails_low + name = "Pigtail Slow" + icon_state = "hair_pigtails_low" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_toph + name = "Toph" + icon_state = "hair_toph" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_vriska + name = "Vriska" + icon_state = "hair_vriska" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_widowmakerhort + name = "Widowmaker Short" + icon_state = "hair_widowmakerhort" + + + + + + + + + +/datum/sprite_accessory/hair/modpack_hairs_port/inf_baum + name = "Baum" + icon_state = "hair_baum" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_bun_odango3 + name = "Bunodango 3" + icon_state = "hair_bun_odango3" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_country + name = "Country" + icon_state = "hair_country" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_geisha + name = "Geisha" + icon_state = "hair_geisha" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_hairhortcover + name = "Short Cover" + icon_state = "hair_hairhortcover" + +/datum/sprite_accessory/hair/modpack_hairs_port/inf_jade + name = "Jade" + icon_state = "hair_jade" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_long_braided + name = "Long Braided" + icon_state = "hair_long_braided" + +/datum/sprite_accessory/hair/modpack_hairs_port/inf_pais + name = "Pais" + icon_state = "hair_pais" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_pigtails_twintail_ombre + name = "Pigtails Twin Tail Ombre" + icon_state = "hair_pigtails_twintail_ombre" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_protagonist + name = "Protagonist" + icon_state = "hair_protagonist" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_travolta + name = "Travolta" + icon_state = "hair_travolta" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_waterfall + name = "Waterfall" + icon_state = "hair_waterfall" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_wisp + name = "Wisp" + icon_state = "hair_wisp" + + + + + + + + +/datum/sprite_accessory/hair/modpack_hairs_port/inf_big_bow + name = "Bigbow" + icon_state = "hair_big_bow" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_bun_odango4 + name = "Bunodango 4" + icon_state = "hair_bun_odango4" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_drills_celes + name = "Drillsceles" + icon_state = "hair_drills_celes" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_hairchierke + name = "Chierke" + icon_state = "hair_hairchierke" + +/datum/sprite_accessory/hair/modpack_hairs_port/inf_hairquare + name = "Quare" + icon_state = "hair_hairquare" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_judge + name = "Judge" + icon_state = "hair_judge" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_longcover + name = "Long Cover" + icon_state = "hair_longcover" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_longwide + name = "Long Wide" + icon_state = "hair_longwide" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_pigtails_belle + name = "Pigtails Belle" + icon_state = "hair_pigtails_belle" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_pigtails_twintail_ombre_alt + name = "Pigtails Twin Tail Ombre Alt" + icon_state = "hair_pigtails_twintail_ombre_alt" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_rosa + name = "Rosa" + icon_state = "hair_rosa" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_travolta_tied + name = "Travolta Tied" + icon_state = "hair_travolta_tied" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_widowmaker + name = "Widowmaker" + icon_state = "hair_widowmaker" + +/datum/sprite_accessory/hair/modpack_hairs_port/inf_travolta_tied + name = "Ponytail 7 (alt)" + icon_state = "hair_ponytail7alt" +/datum/sprite_accessory/hair/modpack_hairs_port/inf_widowmaker + name = "Swept Back (alt)" + icon_state = "hair_swept_backalt" + + + + + + + + + + + +/* +//////////////////////////// +/ =--------------------= / +/ == Onyx Hair Definitions == / +/ =--------------------= / +//////////////////////////// +*/ + +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_80s + name = "80s" + icon_state = "hair_80s" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_backswept + name = "Backswept" + icon_state = "hair_backswept" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_birdnest + name = "Birdnest" + icon_state = "hair_birdnest" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_bluntbangs + name = "Blunt Bangs" + icon_state = "hair_bluntbangs" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_bob_asymm2 + name = "Bob Asymm 2" + icon_state = "hair_bob_asymm2" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_braided + name = "Braided" + icon_state = "hair_braided" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_cossack + name = "Cossack" + icon_state = "hair_cossack" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_dreadtail + name = "Dreadtail" + icon_state = "hair_dreadtail" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_flow + name = "Flow" + icon_state = "hair_flow" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_highponytail + name = "High Ponytail" + icon_state = "hair_highponytail" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_ladyliketylish + name = "Ladylike Stylish" + icon_state = "hair_ladyliketylish" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_long_curls + name = "Long Curls" + icon_state = "hair_long_curls" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_maid_b + name = "Maid B" + icon_state = "hair_maid_b" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_messybun + name = "Messy Bun" + icon_state = "hair_messybun" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_monk_tonsure + name = "Monk Tonsure" + icon_state = "hair_monk_tonsure" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_pigtails_b + name = "Pigtails B" + icon_state = "hair_pigtails_b" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_ramona + name = "Ramona" + icon_state = "hair_ramona" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_shavedpart + name = "Shaved Part" + icon_state = "hair_shavedpart" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_shortbraid + name = "Short Braid" + icon_state = "hair_shortbraid" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_shoulder_length + name = "Shoulder Length" + icon_state = "hair_shoulder_length" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_medlong + name = "Medium Long Strait" + icon_state = "hair_medlong" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_stail + name = "Stail" + icon_state = "hair_stail" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_unkept + name = "Unkept" + icon_state = "hair_unkept" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_volajutylish + name = "Volaju Stylish" + icon_state = "hair_volajutylish" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_zone + name = "Zone" + icon_state = "hair_zone" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_african_pigtails + name = "African Pigtails" + icon_state = "hair_african_pigtails" + +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_birdnest2 + name = "Birdnest 2" + icon_state = "hair_birdnest2" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_bluntbangs_alt + name = "Blunt Bangs Alt" + icon_state = "hair_bluntbangs_alt" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_bob2 + name = "Bob2" + icon_state = "hair_bob2" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_bun3 + name = "Bun 3" + icon_state = "hair_bun3" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_cossack2 + name = "Cossack 2" + icon_state = "hair_cossack2" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_dreadtail2 + name = "Dreadtail 2" + icon_state = "hair_dreadtail2" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_hamasaki + name = "Hamasaki" + icon_state = "hair_hamasaki" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_ladylike + name = "Ladylike" + icon_state = "hair_ladylike" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_leon + name = "Leon" + icon_state = "hair_leon" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_longesttylish + name = "Longest Stylish" + icon_state = "hair_longesttylish" + +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_ming_dynasty + name = "Ming Dynasty" + icon_state = "hair_ming_dynasty" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_new_era + name = "New Era" + icon_state = "hair_new_era" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_pixie + name = "Pixie" + icon_state = "hair_pixie" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_samurai + name = "Samurai" + icon_state = "hair_samurai" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_short2 + name = "Short 2" + icon_state = "hair_short2" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_shorthime + name = "Short Hime" + icon_state = "hair_shorthime" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_sickboy + name = "Sick Boy" + icon_state = "hair_sickboy" + +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_straightlong + name = "Straight Long (alt)" + icon_state = "hair_straightlong" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_veryshortovereye + name = "Very Short Over Eye" + icon_state = "hair_veryshortovereye" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_wolfmane + name = "Wolfmane" + icon_state = "hair_wolfmane" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_alien + name = "Alien" + icon_state = "hair_alien" + +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_blackswordsman + name = "Black Swords Man" + icon_state = "hair_blackswordsman" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_bluntbangs_curls + name = "Blunt Bangs Curls" + icon_state = "hair_bluntbangs_curls" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_bowie + name = "Bowie" + icon_state = "hair_bowie" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_business4 + name = "Business 4" + icon_state = "hair_business4" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_cotton + name = "Cotton" + icon_state = "hair_cotton" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_drillrurutylish + name = "Drillruru Stylish" + icon_state = "hair_drillrurutylish" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_hbangs + name = "Hbangs" + icon_state = "hair_hbangs" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_ladylike_alt + name = "Ladylike Alt" + icon_state = "hair_ladylike_alt" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_long_bedhead_alt + name = "Long Bedhead Alt" + icon_state = "hair_long_bedhead_alt" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_longideparts + name = "Long Side Parts" + icon_state = "hair_longideparts" + +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_mist + name = "Mist" + icon_state = "hair_mist" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_nia + name = "Nia" + icon_state = "hair_nia" + + +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_short3 + name = "Short 3" + icon_state = "hair_short3" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_shortovereye + name = "Short Over Eye" + icon_state = "hair_shortovereye" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_sidepart + name = "Side Part" + icon_state = "hair_sidepart" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_spikyponytail + name = "Spiky Ponytail" + icon_state = "hair_spikyponytail" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_stylo + name = "Stylo" + icon_state = "hair_stylo" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_veryshortovereye2 + name = "Very Short Over Eye 2" + icon_state = "hair_veryshortovereye2" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_wong + name = "Wong" + icon_state = "hair_wong" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_antenna + name = "Antenna" + icon_state = "hair_antenna" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_bird_tail + name = "Bird Tail" + icon_state = "hair_bird_tail" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_blades + name = "Blades" + icon_state = "hair_blades" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_bob_asymm + name = "Bob Asymm" + icon_state = "hair_bob_asymm" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_braid + name = "Braid" + icon_state = "hair_braid" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_chop + name = "Chop" + icon_state = "hair_chop" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_doublebun2 + name = "Double Bun 2" + icon_state = "hair_doublebun2" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_femc + name = "Femc" + icon_state = "hair_femc" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_hbangs_alt + name = "Hbangs Alt" + icon_state = "hair_hbangs_alt" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_ladylike_alttylish + name = "Ladylike Alt Stylish" + icon_state = "hair_ladylike_alttylish" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_long_braid + name = "Long Braid (alt)" + icon_state = "hair_long_braidalt" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_longtraight_ponytail + name = "Long Straight Ponytail" + icon_state = "hair_longtraight_ponytail" + +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_mediumbraid + name = "Medium Braid (alt)" + icon_state = "hair_mediumbraid" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_oxton + name = "Oxton" + icon_state = "hair_oxton" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_qing_dynasty + name = "Qing Dynasty" + icon_state = "hair_qing_dynasty" + + +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_shortovereyetylish + name = "Short Over Eye Stylish" + icon_state = "hair_shortovereyetylish" + +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_square + name = "Square" + icon_state = "hair_square" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_undercut2 + name = "Undercut2" + icon_state = "hair_undercut2" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_viking2 + name = "Viking2" + icon_state = "hair_viking2" +/datum/sprite_accessory/hair/modpack_hairs_port/onyx_ziegler + name = "Ziegler" + icon_state = "hair_ziegler" +/* +//////////////////////////// +/ =--------------------= / +/ == RS666 Hair Definitions == / +/ =--------------------= / +//////////////////////////// +*/ + + +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_80_ponytail + name = "80 Ponytail" + icon_state = "hair_80_ponytail" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_hipbraid_beads + name = "Hipbraid Beads" + icon_state = "hair_hipbraid_beads" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_long + name = "Long" + icon_state = "hair_long" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_low_twins + name = "Low Twins" + icon_state = "hair_low_twins" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_ponytailm + name = "Ponytail M" + icon_state = "hair_ponytailm" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_sailor + name = "Sailor" + icon_state = "hair_sailor" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_shortflip + name = "Short Flip" + icon_state = "hair_shortflip" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_sideweep + name = "Sidesweept" + icon_state = "hair_sideweep" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_twincurl + name = "Twincurl" + icon_state = "hair_twincurl" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_unshavenmohawk + name = "Unshaven Mohawk" + icon_state = "hair_unshavenmohawk" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_80_ponytail_alt + name = "80 Ponytail Alt" + icon_state = "hair_80_ponytail_alt" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_bedhead_alt + name = "Bedhead Alt" + icon_state = "hair_bedhead_alt" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_bun4 + name = "Bun4" + icon_state = "hair_bun4" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_dave + name = "Dave" + icon_state = "hair_dave" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_long_buns + name = "Long Buns" + icon_state = "hair_long_buns" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_ombre_twintails + name = "Ombre Twintails" + icon_state = "hair_ombre_twintails" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_poofy2 + name = "Poofy2" + icon_state = "hair_poofy2" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_schierke + name = "Schierke" + icon_state = "hair_schierke" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_shorthair3 + name = "Shorthair3" + icon_state = "hair_shorthair3" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_slightlymessy + name = "Slightlymessy" + icon_state = "hair_hairlightlymessy" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_twincurl2 + name = "Twincurl2" + icon_state = "hair_twincurl2" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_zone_alt + name = "Zone Alt" + icon_state = "hair_zone_alt" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_buns + name = "Buns" + icon_state = "hair_buns" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_floorbraid + name = "Floor Braid" + icon_state = "hair_floorbraid" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_himecut_long + name = "Himecut Really Long" + icon_state = "hair_himecut_long" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_kreoline_whomen + name = "Kreoline Whomen" + icon_state = "hair_kreoline_whomen" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_long_curls_alt + name = "Long Curls Alt" + icon_state = "hair_long_curls_alt" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_ombre_twintails_alt + name = "Ombre Twintails Alt" + icon_state = "hair_ombre_twintails_alt" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_shortpiked + name = "Shortpiked" + icon_state = "hair_shortpiked" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_spikey + name = "Spikey" + icon_state = "hair_spikey" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_undercut4 + name = "Undercut4" + icon_state = "hair_undercut4" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_casual_cut + name = "Casual Cut" + icon_state = "hair_casual_cut" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_duelist + name = "Duelist" + icon_state = "hair_duelist" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_hipbraid + name = "Hipbraid" + icon_state = "hair_hipbraid" + +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_ponytailf + name = "Ponytail F" + icon_state = "hair_ponytailf" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_psalad_fluff_hair + name = "Fluff Hair" + icon_state = "hair_psalad_fluff_hair" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_secretary_cut + name = "Secretary Cut" + icon_state = "hair_secretary_cut" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_shy + name = "Shy" + icon_state = "hair_shy" +/datum/sprite_accessory/hair/modpack_hairs_port/rs666_sidetail3 + name = "Side Tail 3" + icon_state = "hair_sidetail3" diff --git a/mods/hairs_ports/icons/port_facial.dmi b/mods/hairs_ports/icons/port_facial.dmi new file mode 100644 index 0000000000000..fd87a840966d9 Binary files /dev/null and b/mods/hairs_ports/icons/port_facial.dmi differ diff --git a/mods/hairs_ports/icons/port_hair.dmi b/mods/hairs_ports/icons/port_hair.dmi new file mode 100644 index 0000000000000..dc8be01699d97 Binary files /dev/null and b/mods/hairs_ports/icons/port_hair.dmi differ diff --git a/mods/hardsuits/README.md b/mods/hardsuits/README.md new file mode 100644 index 0000000000000..1972247aeae18 --- /dev/null +++ b/mods/hardsuits/README.md @@ -0,0 +1,87 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1717 + + + +## Hardsuits + +ID мода: HARDSUITS + + +### Описание мода + +Порт спрайтов и функционала костюмов ВКД и ИКС, доступных на Infinity +- Добавляет более качественные спрайты войдсьютов и ИКС для унати +- Добавляет спрайты ИКС ЛЭКа для унати, таяра, скреллов + + +### Изменения *кор кода* + +- `code/game/machinery/suit_cycler_units.dm`: + - `/obj/machinery/suit_cycler/engineering/var/available_modifications` + - `/obj/machinery/suit_cycler/security/var/available_modifications` + - `/obj/machinery/suit_cycler/pilot/var/available_modifications` + + +### Оверрайды + +- `mods/_master_files/maps/sierra/items/rigs.dm`: + - `/obj/item/rig/exploration/var/chest_type` + - `/obj/item/rig/exploration/var/boot_type` + - `/obj/item/rig/exploration/var/glove_type` + + + +### Дефайны + +Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- `packs/infinity/icons/obj/clothing/species/erosan/hats.dmi` +- `packs/infinity/icons/obj/clothing/species/erosan/suits.dmi` + + +### Авторы: + +UEDHighCommand + diff --git a/mods/hardsuits/_hardsuits.dm b/mods/hardsuits/_hardsuits.dm new file mode 100644 index 0000000000000..54a06bdb31308 --- /dev/null +++ b/mods/hardsuits/_hardsuits.dm @@ -0,0 +1,4 @@ +/singleton/modpack/modpack_hardsuits + name = "Костюмы ВКД" + desc = "Портирование спрайтов и функционала костюмов ВКД и ИКС, доступных на Infinity" + author = "UEDHighCommand" diff --git a/mods/hardsuits/_hardsuits.dme b/mods/hardsuits/_hardsuits.dme new file mode 100644 index 0000000000000..9a8e47590a415 --- /dev/null +++ b/mods/hardsuits/_hardsuits.dme @@ -0,0 +1,9 @@ +#ifndef MODPACK_HARDSUITS +#define MODPACK_HARDSUITS + +#include "_hardsuits.dm" + +#include "code/void.dm" +#include "code/rigs.dm" + +#endif diff --git a/mods/hardsuits/code/rigs.dm b/mods/hardsuits/code/rigs.dm new file mode 100644 index 0000000000000..c7e4953ea365b --- /dev/null +++ b/mods/hardsuits/code/rigs.dm @@ -0,0 +1,32 @@ +/obj/item/clothing/head/helmet/space/rig/command/exploration/New() + . = ..() + species_restricted |= list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_TAJARA,SPECIES_UNATHI,SPECIES_IPC) + sprite_sheets ^= list( + SPECIES_SKRELL, + SPECIES_UNATHI + ) + sprite_sheets |= list( + SPECIES_SKRELL = 'mods/hardsuits/icons/rigs/onmob_head_solgov_skrell.dmi', + SPECIES_UNATHI = 'mods/hardsuits/icons/rigs/onmob_head_solgov_unathi.dmi' + ) + +/obj/item/clothing/suit/space/rig/command/exploration + species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_TAJARA,SPECIES_UNATHI,SPECIES_IPC) + icon_state = "command_exp_rig" + sprite_sheets = list( + SPECIES_UNATHI = 'mods/hardsuits/icons/rigs/onmob_suit_solgov_unathi.dmi' + ) + +/obj/item/clothing/gloves/rig/command/exploration + species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_TAJARA,SPECIES_UNATHI,SPECIES_IPC) + icon_state = "command_exp_rig" + sprite_sheets = list( + SPECIES_UNATHI = 'mods/hardsuits/icons/rigs/onmob_hands_solgov_unathi.dmi' + ) + +/obj/item/clothing/shoes/magboots/rig/command/exploration + species_restricted = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_TAJARA,SPECIES_UNATHI,SPECIES_IPC) + icon_state = "command_exp_rig" + sprite_sheets = list( + SPECIES_UNATHI = 'mods/hardsuits/icons/rigs/onmob_feet_solgov_unathi.dmi' + ) diff --git a/mods/hardsuits/code/void.dm b/mods/hardsuits/code/void.dm new file mode 100644 index 0000000000000..2b8e389ce2d3c --- /dev/null +++ b/mods/hardsuits/code/void.dm @@ -0,0 +1,224 @@ +#define SETUP_NAME "name" +#define SETUP_OBJ_SHEET "icon" +#define SETUP_ONMOB_SHEET "item_icons" +#define SETUP_ICON_STATE "icon_state" +#define SETUP_ITEM_STATE "item_state" +#define SETUP_ITEM_STATE_SLOTS "item_state_slots" +#define SETUP_SPECIES_OBJ "sprite_sheets_obj" +#define SETUP_SPECIES_ONMOB "sprite_sheets" + + +/singleton/item_modifier/space_suit/sierra + name = "Standard, NT" + type_setups = list( + /obj/item/clothing/head/helmet/space = list( + SETUP_NAME = "voidsuit helmet", + SETUP_OBJ_SHEET = 'icons/obj/clothing/obj_head.dmi', + SETUP_ONMOB_SHEET = list(slot_wear_suit_str = 'icons/mob/onmob/onmob_head.dmi'), + SETUP_ICON_STATE = "void", + SETUP_SPECIES_OBJ = list( + SPECIES_HUMAN = 'icons/obj/clothing/obj_head.dmi', + SPECIES_UNATHI = 'packs/infinity/icons/obj/clothing/species/erosan/hats.dmi', + SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/obj_head_skrell.dmi' + ), + SETUP_SPECIES_ONMOB = list( + SPECIES_HUMAN = 'icons/mob/onmob/onmob_head.dmi', + SPECIES_UNATHI = 'mods/hardsuits/icons/voidsuits/onmob_head_unathi.dmi', + SPECIES_SKRELL = 'icons/mob/species/skrell/onmob_head_skrell.dmi' + ) + ), + /obj/item/clothing/suit/space/void = list( + SETUP_NAME = "voidsuit", + SETUP_OBJ_SHEET = 'icons/obj/clothing/obj_suit.dmi', + SETUP_ONMOB_SHEET = list(slot_wear_suit_str = 'icons/mob/onmob/onmob_suit.dmi'), + SETUP_ICON_STATE = "void", + SETUP_SPECIES_OBJ = list( + SPECIES_HUMAN = 'icons/obj/clothing/obj_suit.dmi', + SPECIES_UNATHI = 'packs/infinity/icons/obj/clothing/species/erosan/suits.dmi', + SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/obj_suit_skrell.dmi' + ), + SETUP_SPECIES_ONMOB = list( + SPECIES_HUMAN = 'icons/mob/onmob/onmob_suit.dmi', + SPECIES_UNATHI = 'mods/hardsuits/icons/voidsuits/onmob_suit_unathi.dmi', + SPECIES_SKRELL = 'icons/mob/onmob/onmob_suit.dmi' + ) + ) + ) + + +/singleton/item_modifier/space_suit/sierra/engineering + name = "Engineering, NT" + +/singleton/item_modifier/space_suit/sierra/engineering/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "engineering voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-engineering" + helmet_setup[SETUP_ITEM_STATE] = "eng_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "engineering voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-engineering" + suit_setup[SETUP_ITEM_STATE_SLOTS] = list( + slot_l_hand_str = "eng_voidsuit", + slot_r_hand_str = "eng_voidsuit" + ) + + +/singleton/item_modifier/space_suit/sierra/security + name = "Security, NT" + +/singleton/item_modifier/space_suit/sierra/security/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "security voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-sec" + helmet_setup[SETUP_ITEM_STATE] = "sec_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "security voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-sec" + suit_setup[SETUP_ITEM_STATE_SLOTS] = list( + slot_l_hand_str = "sec_voidsuit", + slot_r_hand_str = "sec_voidsuit" + ) + + +/singleton/item_modifier/space_suit/sierra/security/alt + name = "Security, Riot" + +/singleton/item_modifier/space_suit/sierra/security/alt/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "riot security voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-secalt" + helmet_setup[SETUP_ITEM_STATE] = "secalt_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "riot security voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-secalt" + + +/singleton/item_modifier/space_suit/sierra/atmos + name = "Atmos, NT" + +/singleton/item_modifier/space_suit/sierra/atmos/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "atmospherics voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-atmos" + helmet_setup[SETUP_ITEM_STATE] = "atmos_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "atmospherics voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-atmos" + suit_setup[SETUP_ITEM_STATE_SLOTS] = list( + slot_l_hand_str = "atmos_voidsuit", + slot_r_hand_str = "atmos_voidsuit" + ) + + +/singleton/item_modifier/space_suit/sierra/pilot + name = "Pilot, NT" + +/singleton/item_modifier/space_suit/sierra/pilot/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "pilot voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0_pilot" + helmet_setup[SETUP_ITEM_STATE] = "pilot_helm" + helmet_setup[SETUP_SPECIES_OBJ][SPECIES_UNATHI] = 'mods/hardsuits/icons/voidsuits/obj_head_unathi.dmi' + helmet_setup[SETUP_SPECIES_OBJ][SPECIES_SKRELL] = 'mods/hardsuits/icons/voidsuits/obj_head_skrell.dmi' + helmet_setup[SETUP_SPECIES_ONMOB][SPECIES_SKRELL] = 'mods/hardsuits/icons/voidsuits/onmob_head_skrell.dmi' + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "pilot voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-pilot" + suit_setup[SETUP_ITEM_STATE_SLOTS] = list( + slot_l_hand_str = "s_suit", + slot_r_hand_str = "s_suit" + ) + suit_setup[SETUP_SPECIES_OBJ][SPECIES_UNATHI] = 'mods/hardsuits/icons/voidsuits/obj_suit_unathi.dmi' + suit_setup[SETUP_SPECIES_OBJ][SPECIES_SKRELL] = 'mods/hardsuits/icons/voidsuits/obj_suit_skrell.dmi' + suit_setup[SETUP_SPECIES_ONMOB][SPECIES_SKRELL] = 'mods/hardsuits/icons/voidsuits/onmob_suit_skrell.dmi' + +/singleton/item_modifier/space_suit/sol/sierra + name = "Standard, SCG" + type_setups = list( + /obj/item/clothing/head/helmet/space = list( + SETUP_NAME = "voidsuit helmet", + SETUP_OBJ_SHEET = 'maps/torch/icons/obj/obj_head_solgov.dmi', + SETUP_ONMOB_SHEET = list(slot_head_str = 'maps/torch/icons/mob/onmob_head_solgov.dmi'), + SETUP_ICON_STATE = "rig_explorer", + SETUP_ITEM_STATE = "explorer_helm", + SETUP_SPECIES_OBJ = list( + SPECIES_HUMAN = 'maps/torch/icons/obj/obj_head_solgov.dmi', + SPECIES_UNATHI = 'packs/infinity/icons/obj/clothing/species/erosan/hats.dmi', + SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_head_solgov_skrell.dmi' + ), + SETUP_SPECIES_ONMOB = list( + SPECIES_HUMAN = 'maps/torch/icons/mob/onmob_head_solgov.dmi', + SPECIES_UNATHI = 'mods/hardsuits/icons/voidsuits/onmob_head_unathi.dmi', + SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_head_solgov_skrell.dmi' + ) + ), + /obj/item/clothing/suit/space/void = list( + SETUP_NAME = "voidsuit", + SETUP_OBJ_SHEET = 'maps/torch/icons/obj/obj_suit_solgov.dmi', + SETUP_ONMOB_SHEET = list(slot_wear_suit_str = 'maps/torch/icons/mob/onmob_suit_solgov.dmi'), + SETUP_ICON_STATE = "rig0_explorer", + SETUP_SPECIES_OBJ = list( + SPECIES_HUMAN = 'maps/torch/icons/obj/obj_suit_solgov.dmi', + SPECIES_UNATHI = 'packs/infinity/icons/obj/clothing/species/erosan/suits.dmi', + SPECIES_SKRELL = 'maps/torch/icons/obj/skrell/obj_suit_solgov_skrell.dmi' + ), + SETUP_SPECIES_ONMOB = list( + SPECIES_HUMAN = 'maps/torch/icons/mob/onmob_suit_solgov.dmi', + SPECIES_UNATHI = 'mods/hardsuits/icons/voidsuits/onmob_suit_unathi.dmi', + SPECIES_SKRELL = 'maps/torch/icons/mob/skrell/onmob_suit_solgov_skrell.dmi' + ) + ) + ) + +/singleton/item_modifier/space_suit/sol/sierra/medical + name = "Medical, Streamlined" + +/singleton/item_modifier/space_suit/sol/sierra/medical/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "streamlined medical voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0-medicalalt" + helmet_setup[SETUP_ITEM_STATE] = "medicalalt_helm" + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "streamlined medical voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig-medicalalt" + +/singleton/item_modifier/space_suit/sol/sierra/exploration + name = "Explorer, SCG" + +/singleton/item_modifier/space_suit/sol/sierra/exploration/Initialize() + . = ..() + var/helmet_setup = type_setups[/obj/item/clothing/head/helmet/space] + helmet_setup[SETUP_NAME] = "exploration voidsuit helmet" + helmet_setup[SETUP_ICON_STATE] = "rig0_explorer" + helmet_setup[SETUP_ITEM_STATE] = "explorer_helm" + helmet_setup[SETUP_SPECIES_OBJ][SPECIES_UNATHI] = 'mods/hardsuits/icons/voidsuits/obj_head_unathi.dmi' + helmet_setup[SETUP_SPECIES_OBJ][SPECIES_SKRELL] = 'mods/hardsuits/icons/voidsuits/obj_head_skrell.dmi' + helmet_setup[SETUP_SPECIES_ONMOB][SPECIES_SKRELL] = 'mods/hardsuits/icons/voidsuits/onmob_head_skrell.dmi' + + var/suit_setup = type_setups[/obj/item/clothing/suit/space/void] + suit_setup[SETUP_NAME] = "exploration voidsuit" + suit_setup[SETUP_ICON_STATE] = "rig_explorer" + suit_setup[SETUP_SPECIES_OBJ][SPECIES_UNATHI] = 'mods/hardsuits/icons/voidsuits/obj_suit_unathi.dmi' + suit_setup[SETUP_SPECIES_OBJ][SPECIES_SKRELL] = 'mods/hardsuits/icons/voidsuits/obj_suit_skrell.dmi' + suit_setup[SETUP_SPECIES_ONMOB][SPECIES_SKRELL] = 'mods/hardsuits/icons/voidsuits/onmob_suit_skrell.dmi' + +#undef SETUP_NAME +#undef SETUP_OBJ_SHEET +#undef SETUP_ONMOB_SHEET +#undef SETUP_ICON_STATE +#undef SETUP_ITEM_STATE +#undef SETUP_ITEM_STATE_SLOTS +#undef SETUP_SPECIES_OBJ +#undef SETUP_SPECIES_ONMOB diff --git a/mods/hardsuits/icons/rigs/onmob_feet_solgov_unathi.dmi b/mods/hardsuits/icons/rigs/onmob_feet_solgov_unathi.dmi new file mode 100644 index 0000000000000..2e2377fd30799 Binary files /dev/null and b/mods/hardsuits/icons/rigs/onmob_feet_solgov_unathi.dmi differ diff --git a/mods/hardsuits/icons/rigs/onmob_hands_solgov_unathi.dmi b/mods/hardsuits/icons/rigs/onmob_hands_solgov_unathi.dmi new file mode 100644 index 0000000000000..28db335cc5926 Binary files /dev/null and b/mods/hardsuits/icons/rigs/onmob_hands_solgov_unathi.dmi differ diff --git a/mods/hardsuits/icons/rigs/onmob_head_solgov_skrell.dmi b/mods/hardsuits/icons/rigs/onmob_head_solgov_skrell.dmi new file mode 100644 index 0000000000000..5f9c20a5506ad Binary files /dev/null and b/mods/hardsuits/icons/rigs/onmob_head_solgov_skrell.dmi differ diff --git a/mods/hardsuits/icons/rigs/onmob_head_solgov_unathi.dmi b/mods/hardsuits/icons/rigs/onmob_head_solgov_unathi.dmi new file mode 100644 index 0000000000000..9f2e86430b4ef Binary files /dev/null and b/mods/hardsuits/icons/rigs/onmob_head_solgov_unathi.dmi differ diff --git a/mods/hardsuits/icons/rigs/onmob_suit_solgov_skrell.dmi b/mods/hardsuits/icons/rigs/onmob_suit_solgov_skrell.dmi new file mode 100644 index 0000000000000..e99ded5760045 Binary files /dev/null and b/mods/hardsuits/icons/rigs/onmob_suit_solgov_skrell.dmi differ diff --git a/mods/hardsuits/icons/rigs/onmob_suit_solgov_unathi.dmi b/mods/hardsuits/icons/rigs/onmob_suit_solgov_unathi.dmi new file mode 100644 index 0000000000000..d8dafc0420034 Binary files /dev/null and b/mods/hardsuits/icons/rigs/onmob_suit_solgov_unathi.dmi differ diff --git a/mods/hardsuits/icons/voidsuits/obj_head_skrell.dmi b/mods/hardsuits/icons/voidsuits/obj_head_skrell.dmi new file mode 100644 index 0000000000000..bf2552ba5dedd Binary files /dev/null and b/mods/hardsuits/icons/voidsuits/obj_head_skrell.dmi differ diff --git a/mods/hardsuits/icons/voidsuits/obj_head_unathi.dmi b/mods/hardsuits/icons/voidsuits/obj_head_unathi.dmi new file mode 100644 index 0000000000000..b926a13ac8289 Binary files /dev/null and b/mods/hardsuits/icons/voidsuits/obj_head_unathi.dmi differ diff --git a/mods/hardsuits/icons/voidsuits/obj_suit_skrell.dmi b/mods/hardsuits/icons/voidsuits/obj_suit_skrell.dmi new file mode 100644 index 0000000000000..3d1818c26581b Binary files /dev/null and b/mods/hardsuits/icons/voidsuits/obj_suit_skrell.dmi differ diff --git a/mods/hardsuits/icons/voidsuits/obj_suit_unathi.dmi b/mods/hardsuits/icons/voidsuits/obj_suit_unathi.dmi new file mode 100644 index 0000000000000..efd94f459a809 Binary files /dev/null and b/mods/hardsuits/icons/voidsuits/obj_suit_unathi.dmi differ diff --git a/mods/hardsuits/icons/voidsuits/onmob_head_skrell.dmi b/mods/hardsuits/icons/voidsuits/onmob_head_skrell.dmi new file mode 100644 index 0000000000000..41b53f7099e33 Binary files /dev/null and b/mods/hardsuits/icons/voidsuits/onmob_head_skrell.dmi differ diff --git a/mods/hardsuits/icons/voidsuits/onmob_head_unathi.dmi b/mods/hardsuits/icons/voidsuits/onmob_head_unathi.dmi new file mode 100644 index 0000000000000..b530b597ee41c Binary files /dev/null and b/mods/hardsuits/icons/voidsuits/onmob_head_unathi.dmi differ diff --git a/mods/hardsuits/icons/voidsuits/onmob_suit_skrell.dmi b/mods/hardsuits/icons/voidsuits/onmob_suit_skrell.dmi new file mode 100644 index 0000000000000..ec0185260bd3b Binary files /dev/null and b/mods/hardsuits/icons/voidsuits/onmob_suit_skrell.dmi differ diff --git a/mods/hardsuits/icons/voidsuits/onmob_suit_unathi.dmi b/mods/hardsuits/icons/voidsuits/onmob_suit_unathi.dmi new file mode 100644 index 0000000000000..e889635a2dbb7 Binary files /dev/null and b/mods/hardsuits/icons/voidsuits/onmob_suit_unathi.dmi differ diff --git a/mods/ipc_cooling_unit/README.md b/mods/ipc_cooling_unit/README.md new file mode 100644 index 0000000000000..cc5d91047fc1c --- /dev/null +++ b/mods/ipc_cooling_unit/README.md @@ -0,0 +1,78 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1782 + + + +## IPC Cooling organ + +ID мода: IPC_COOLING_UNIT + + +### Описание мода + +Добавляет орган охлаждения для ИПС и внешнее охлаждающее устройство для ИПС + + +### Изменения *кор кода* +- Отсутствуют + + + +### Оверрайды + +- `mods/ipc_cooling_unit/code/machine.dm`: + - `/datum/species/machine/passive_temp_gain` + - `/datum/species/machine/New()` + - `/obj/machinery/organ_printer/robot/New()` + - `/mob/living/carbon/human/Stat()` + - `/obj/item/organ/internal/cell/Process()` + + + +### Дефайны + +- `code/__defines/~mods/~master_defines.dm`: `BP_COOLING`, + +### Используемые файлы, не содержащиеся в модпаке +- Отсуствует + + + +### Авторы: + +Lexanx + diff --git a/mods/ipc_cooling_unit/_ipc_cooling_unit.dm b/mods/ipc_cooling_unit/_ipc_cooling_unit.dm new file mode 100644 index 0000000000000..fcea627b07451 --- /dev/null +++ b/mods/ipc_cooling_unit/_ipc_cooling_unit.dm @@ -0,0 +1,3 @@ +/singleton/modpack/ipc_cooling_unit + name = "Орган Охлаждения ИПС" + author = "Lexanx" diff --git a/mods/ipc_cooling_unit/_ipc_cooling_unit.dme b/mods/ipc_cooling_unit/_ipc_cooling_unit.dme new file mode 100644 index 0000000000000..6366838019bac --- /dev/null +++ b/mods/ipc_cooling_unit/_ipc_cooling_unit.dme @@ -0,0 +1,9 @@ +#ifndef MODPACK_IPC_COOLING_UNIT +#define MODPACK_IPC_COOLING_UNIT + +#include "_ipc_cooling_unit.dm" +#include "code/cooling_system.dm" +#include "code/external_cooling_device.dm" +#include "code/machine.dm" + +#endif diff --git a/mods/ipc_cooling_unit/code/cooling_system.dm b/mods/ipc_cooling_unit/code/cooling_system.dm new file mode 100644 index 0000000000000..d30eee6f69fc6 --- /dev/null +++ b/mods/ipc_cooling_unit/code/cooling_system.dm @@ -0,0 +1,139 @@ +/obj/item/organ/internal/cooling_system + name = "cooling system" + icon = 'mods/ipc_cooling_unit/icons/ipc_icons.dmi' + icon_state = "cooling0" + organ_tag = BP_COOLING + parent_organ = BP_GROIN + status = ORGAN_ROBOTIC + desc = "The internal liquid cooling system consists of a weighty humming cylinder and a small ribbed block connected by flexible tubes through which clear liquid flows." + var/refrigerant_max = 90 // Максимальное количество охладителя + var/refrigerant_rate = 5 // Чем больше это значение, тем сильнее будет идти нагрев владельца. + var/durability_factor = 30 // Чем больше это значение, тем сильнее будет идти нагрев владельца при повреждениях + var/safety = 1 + damage_reduction = 0.8 + max_damage = 50 + var/sprite_name = "cooling" + var/fresh_coolant = 0 + var/coolant_purity = 0 + var/datum/reagents/coolant_reagents + var/used_coolant = 0 + var/heating_modificator + var/list/coolant_reagents_efficiency = list() + var/coolant_reagent_water + +/obj/item/organ/internal/cooling_system/New() + robotize() + create_reagents(refrigerant_max) + coolant_reagents_efficiency[/datum/reagent/water] = 17 + coolant_reagents_efficiency[/datum/reagent/ethanol] = 10 + coolant_reagents_efficiency[/datum/reagent/space_cleaner] = 5 + coolant_reagents_efficiency[/datum/reagent/sterilizine] = 3 + coolant_reagents_efficiency[/datum/reagent/coolant] = 0.1 + reagents.add_reagent(/datum/reagent/coolant, 60) + reagents.add_reagent(/datum/reagent/water, 30) + ..() + +/obj/item/organ/internal/cooling_system/emp_act(severity) + damage += rand(15 - severity * 5, 20 - severity * 5) + ..() +// Коэффицент эффективности работы смеси +/obj/item/organ/internal/cooling_system/proc/coolant_purity() + var/total_purity = 0 + fresh_coolant = 0 + coolant_purity = 0 + for (var/datum/reagent/current_reagent in src.reagents.reagent_list) + if (!current_reagent) + continue + var/cur_purity = coolant_reagents_efficiency[current_reagent.type] + if(!cur_purity) + cur_purity = 25 + else if(cur_purity < 0.1) + cur_purity = 0.1 + total_purity += cur_purity * current_reagent.volume + fresh_coolant += current_reagent.volume + if(total_purity && fresh_coolant) + coolant_purity = total_purity / fresh_coolant + heating_modificator = coolant_purity + + + + +/obj/item/organ/internal/cooling_system/proc/get_coolant_drain() + var/damage_factor = (damage*durability_factor)/max_damage + return damage_factor + +/obj/item/organ/internal/cooling_system/Process() + + if(!owner || owner.stat == DEAD || owner.bodytemperature < 32) + return + coolant_purity() + handle_cooling() + ..() + +/obj/item/organ/internal/cooling_system/proc/handle_cooling() + + var/obj/item/organ/internal/cell/C = owner.internal_organs_by_name[BP_CELL] + refrigerant_rate = heating_modificator + if (C && C.get_charge() < 25) + return + if(reagents.total_volume >= 0) + var/bruised_cost = get_coolant_drain() + + if(is_bruised()) + var/reagents_remove = bruised_cost/durability_factor + reagents.remove_any(reagents_remove) + + if(is_damaged()) + get_coolant_drain() + refrigerant_rate += bruised_cost // Нагрев владельца при повреждениях высчитывается тут. + + if(reagents.get_reagent_amount(/datum/reagent/water) <= (0.3 * reagents.total_volume)) + var/need_more_water = ((refrigerant_max - reagents.get_reagent_amount(/datum/reagent/water))/100) + take_internal_damage(need_more_water) + + if(reagents.total_volume <= 0) + refrigerant_rate += 40 + +/obj/item/organ/internal/cooling_system/proc/get_tempgain() + if(owner.bodytemperature > 950 CELSIUS) + return 0 + if(refrigerant_rate > 0) + return refrigerant_rate + +/obj/item/organ/internal/cooling_system/proc/get_coolant_remaining() + if(status & ORGAN_DEAD) + return 0 + return round(reagents.total_volume) + +/obj/item/organ/internal/cooling_system/examine(mob/user, distance) + . = ..() + if(distance <= 0) + . += SPAN_NOTICE(text("[icon2html(src, viewers(get_turf(src)))] [] contains [] units of liquid left!", src, src.reagents.total_volume)) + +/obj/item/organ/internal/cooling_system/attack_self(mob/user as mob) + safety = !safety + src.icon_state = "[sprite_name][!safety]" + src.desc = "The injection is [safety ? "on" : "off"]." + to_chat(user, "The injection is [safety ? "on" : "off"].") + + +/obj/item/organ/internal/cooling_system/afterattack(atom/target, mob/user, flag) + var/obj/item/reagent_containers/glass/beaker = target + if (!flag || !istype(beaker)) + return ..() + + var/amount = reagents.get_free_space() + if (safety) + if (amount <= 0) + to_chat(user, SPAN_NOTICE("\The [src] is full.")) + return + if (beaker.reagents.total_volume <= 0) + to_chat(user, SPAN_NOTICE("\The [beaker] is empty.")) + return + amount = beaker.reagents.trans_to_obj(src, refrigerant_max) + to_chat(user, SPAN_NOTICE("You fill \the [src] with [amount] units from \the [beaker].")) + playsound(src.loc, 'sound/effects/pour.ogg', 25, 1) + else + amount = src.reagents.trans_to_obj(beaker, refrigerant_max) + to_chat(user, SPAN_NOTICE("You fill \the [beaker] with [amount] units from \the [src].")) + playsound(src.loc, 'sound/effects/pour.ogg', 25, 1) diff --git a/mods/ipc_cooling_unit/code/external_cooling_device.dm b/mods/ipc_cooling_unit/code/external_cooling_device.dm new file mode 100644 index 0000000000000..e30893e6c928c --- /dev/null +++ b/mods/ipc_cooling_unit/code/external_cooling_device.dm @@ -0,0 +1,229 @@ +/obj/machinery/external_cooling_device + name = "\improper External Cooling Device" + icon = 'mods/ipc_cooling_unit/icons/ipc_icons.dmi' + icon_state = "basepowered" + desc = "It's a bulky machine that delivers life-giving cold through a hose." + anchored = FALSE + density = TRUE + var/mob/living/carbon/human/attached + var/obj/item/cell/cell = /obj/item/cell/high + var/active = FALSE + var/closed = TRUE + var/set_temperature = T0C + +/obj/machinery/external_cooling_device/New() + ..() + if(ispath(cell)) + cell = new cell(src) + update_icon() + +/obj/machinery/external_cooling_device/examine(mob/user) + . = ..() + + . += SPAN_NOTICE("The external cooling device is [active ? "on" : "off"] and the hatch is [!closed ? "open" : "closed"].") + if(!closed) + . += SPAN_NOTICE("The power cell is [cell ? "installed" : "missing"].") + else + . += SPAN_NOTICE("The charge meter reads [cell ? round(cell.percent(),1) : 0]%") + + +/obj/machinery/external_cooling_device/Topic(href, href_list, state = GLOB.physical_state) + if (..()) + return 1 + + switch(href_list["op"]) + + if("temp") + var/value = text2num(href_list["val"]) + + // limit to 0-90 degC + set_temperature = dd_range(T0C, T0C + 90, set_temperature + value) + + if("cellremove") + if(!closed && cell && !usr.get_active_hand()) + usr.visible_message( + SPAN_NOTICE("The [usr] removes \the [cell] from \the [src]."), + SPAN_NOTICE("You remove \the [cell] from \the [src].") + ) + cell.update_icon() + usr.put_in_hands(cell) + cell.add_fingerprint(usr) + cell = null + + if("cellinstall") + if(!closed && !cell) + var/obj/item/cell/C = usr.get_active_hand() + if(istype(C)) + if(!usr.unEquip(C, src)) + return TOPIC_NOACTION + cell = C + C.add_fingerprint(usr) + usr.visible_message( + SPAN_NOTICE("\The [usr] inserts \the [C] into \the [src]."), + SPAN_NOTICE("You insert \the [C] into \the [src].") + ) + + if("Power_On") + if(cell) + active = !active + + if("Power_Off") + active = !active + + update_icon() + updateDialog() + +/obj/machinery/external_cooling_device/emp_act(severity) + if(cell) + cell.emp_act(severity) + ..(severity) + + +/obj/machinery/external_cooling_device/interface_interact(mob/user) + interact(user) + return TRUE + +/obj/machinery/external_cooling_device/interact(mob/user) + var/list/dat = list() + dat += "Power cell: " + if(cell) + dat += "Installed
    " + else + dat += "Removed
    " + + if(!active) + dat += "Power On
    " + else + dat += "Power Off
    " + + dat += "Power Level: [cell ? round(cell.percent(),1) : 0]%

    " + + dat += "Set Temperature: " + + dat += "-" + + dat += " [set_temperature]K ([set_temperature-T0C]°C)" + dat += "+
    " + + var/datum/browser/popup = new(usr, "spaceheater", "External Cooling Device Control Panel") + popup.set_content(jointext(dat, null)) + popup.open() + + +/obj/machinery/external_cooling_device/on_update_icon(rebuild_overlay = 1) + if(!cell) + icon_state = "base" + else + icon_state = "basepowered" + + if(rebuild_overlay) + ClearOverlays() + if(attached) + AddOverlays("o_h") + if(!closed) + AddOverlays("o_m") + if(active && cell) + AddOverlays("o_w") + + +/obj/machinery/external_cooling_device/MouseDrop(over_object, src_location, over_location) + if(!CanMouseDrop(over_object)) + return + if(attached) + cooling_detach() + else if(ishuman(over_object)) + hook_up(over_object, usr) + +/obj/machinery/external_cooling_device/use_tool(obj/item/W, mob/living/user, list/click_params) + + if(istype(W, /obj/item/screwdriver)) + closed = !closed + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + to_chat(user, SPAN_NOTICE("You [closed ? "tighten" : "unscrew"] ECD panel")) + on_update_icon() + if(!closed) + if (istype(W, /obj/item/cell)) + if(!isnull(src.cell)) + USE_FEEDBACK_FAILURE("There is already a cell loaded!") + return + if(!user.unEquip(W, src)) + return + cell = W + to_chat(user, "You attach \the [W] to \the [src].") + on_update_icon() + else + return ..() + + +/obj/machinery/external_cooling_device/Destroy() + STOP_PROCESSING(SSobj,src) + attached = null + QDEL_NULL(cell) + . = ..() + +/obj/machinery/external_cooling_device/Process() + + if(!cell) + return + + if(attached) + if(!Adjacent(attached)) + rip_out() + return + if(active) + if(!attached) + return + if(attached.bodytemperature > set_temperature) + attached.bodytemperature -= 20 + queue_icon_update() + cell.use(5) + +/obj/machinery/external_cooling_device/verb/cooling_detach() + set category = "Object" + set name = "Detach cooling device" + set src in range(1) + + if(!attached) + return + + if(!CanPhysicallyInteractWith(usr, src)) + to_chat(usr, SPAN_WARNING("You're in no condition to do that!")) + return + + if(!usr.skill_check(SKILL_DEVICES, SKILL_BASIC)) + rip_out() + else + visible_message(SPAN_NOTICE("\The [attached] is taken off \the [src].")) + attached = null + update_icon() + + +/obj/machinery/external_cooling_device/proc/rip_out() + visible_message(SPAN_WARNING("\The tube is ripped out of \the [src.attached]!")) + attached.apply_damage(1, DAMAGE_BRUTE, pick(BP_GROIN, BP_CHEST), damage_flags=DAMAGE_FLAG_SHARP) + attached = null + update_icon() + +/obj/machinery/external_cooling_device/proc/hook_up(mob/living/carbon/human/target, mob/user) + if(do_ECD_hookup(target, user, src)) + attached = target + update_icon() + +/obj/machinery/external_cooling_device/proc/do_ECD_hookup(mob/living/carbon/human/target, mob/user, obj/ECD) + to_chat(user, SPAN_NOTICE("You start to hook up \the [target] to \the [ECD].")) + if(!user.do_skilled(2 SECONDS, SKILL_DEVICES, target)) + return FALSE + + if(prob(user.skill_fail_chance(SKILL_DEVICES, 40, SKILL_MIN))) + user.visible_message( + SPAN_WARNING("\The [user] fails while trying to hook \the [target] up to \the [ECD], stabbing them instead!"), + SPAN_WARNING("You fail while trying to hook \the [target] up to \the [ECD], stabbing yourself instead!") + ) + target.apply_damage(5, DAMAGE_BRUTE, pick(BP_GROIN, BP_CHEST), damage_flags=DAMAGE_FLAG_SHARP) + return FALSE + + user.visible_message( + SPAN_NOTICE("\The [user] hooks \the [target] up to \the [ECD]."), + SPAN_NOTICE("You hook \the [target] up to \the [ECD]") + ) + return TRUE diff --git a/mods/ipc_cooling_unit/code/machine.dm b/mods/ipc_cooling_unit/code/machine.dm new file mode 100644 index 0000000000000..d3f96db15abcd --- /dev/null +++ b/mods/ipc_cooling_unit/code/machine.dm @@ -0,0 +1,40 @@ +/datum/species/machine + passive_temp_gain = 0 // This should cause IPCs to stabilize at ~80 C in a 20 C environment.(5 is default without organ) + + +/datum/species/machine/New() + LAZYINITLIST(has_organ) + has_organ[BP_COOLING] = /obj/item/organ/internal/cooling_system + ..() + +// ROBOT ORGAN PRINTER +/obj/machinery/organ_printer/robot/New() + LAZYINITLIST(products) + products[BP_COOLING] = list(/obj/item/organ/internal/cooling_system, 35) + . = ..() + + +/mob/living/carbon/human/Stat() + . = ..() + if(statpanel("Status")) + var/obj/item/organ/internal/cell/potato = internal_organs_by_name[BP_CELL] + var/obj/item/organ/internal/cooling_system/coolant = internal_organs_by_name[BP_COOLING] + if(potato && potato.cell && src.is_species(SPECIES_IPC)) + stat("Coolant remaining:","[coolant.get_coolant_remaining()]/[coolant.refrigerant_max]") + +/obj/item/organ/internal/cell/Process() + ..() + var/cost = get_power_drain() + if(!checked_use(cost) && owner.isSynthetic()) + if(owner.species.name == SPECIES_IPC) + owner.species.passive_temp_gain = 0 + if(owner.species.name == SPECIES_IPC) + var/obj/item/organ/internal/cooling_system/cooling_organ = owner.internal_organs_by_name[BP_COOLING] + var/normal_passive_temp_gain = 30 + if(!cooling_organ) + if(owner.bodytemperature > 950 CELSIUS) + owner.species.passive_temp_gain = 0 + else + owner.species.passive_temp_gain = normal_passive_temp_gain + else + owner.species.passive_temp_gain = cooling_organ.get_tempgain() diff --git a/mods/ipc_cooling_unit/icons/ipc_icons.dmi b/mods/ipc_cooling_unit/icons/ipc_icons.dmi new file mode 100644 index 0000000000000..921934a57e5f9 Binary files /dev/null and b/mods/ipc_cooling_unit/icons/ipc_icons.dmi differ diff --git a/mods/jukebox_tapes/_jukebox_tapes.dm b/mods/jukebox_tapes/_jukebox_tapes.dm new file mode 100644 index 0000000000000..a925f93066562 --- /dev/null +++ b/mods/jukebox_tapes/_jukebox_tapes.dm @@ -0,0 +1,4 @@ +/singleton/modpack/jukebox_tapes + name = "Jukebox custom tapes" + desc = "Ваша музыка теперь и в стационарных музыкальных проигрывателях." + author = "CuddleAndTea" diff --git a/mods/jukebox_tapes/_jukebox_tapes.dme b/mods/jukebox_tapes/_jukebox_tapes.dme new file mode 100644 index 0000000000000..e75492ec0368b --- /dev/null +++ b/mods/jukebox_tapes/_jukebox_tapes.dme @@ -0,0 +1,7 @@ +#ifndef MODPACK_JUKEBOX_TAPES +#define MODPACK_JUKEBOX_TAPES + +#include "_jukebox_tapes.dm" +#include "code\jukebox.dm" + +#endif diff --git a/mods/jukebox_tapes/code/jukebox.dm b/mods/jukebox_tapes/code/jukebox.dm new file mode 100644 index 0000000000000..3c1b2ec8ec7c4 --- /dev/null +++ b/mods/jukebox_tapes/code/jukebox.dm @@ -0,0 +1,149 @@ +/obj/machinery/jukebox/custom_tape + var/obj/item/music_tape/tape + +/obj/machinery/jukebox/custom_tape/verb/eject() + set name = "Eject" + set category = "Object" + set src in oview(1) + + if(!CanPhysicallyInteract(usr)) + return + + if(tape) + jukebox.Stop() + for(var/jukebox_track/T in jukebox.tracks) + if(T == tape.track) + jukebox.tracks -= T + jukebox.Last() + + if(!usr.put_in_hands(tape)) + tape.dropInto(loc) + + tape = null + visible_message(SPAN_NOTICE("[usr] eject \a [tape] from \the [src].")) + verbs -= /obj/machinery/jukebox/custom_tape/verb/eject + playsound(src, 'mods/jukebox_tapes/sounds/tape_eject.ogg', 40) + jukebox.ui_interact(usr) + +/obj/machinery/jukebox/custom_tape/Initialize() + . = ..() + jukebox = new(src, "jukebox.tmpl", "MediaTronic Library", 400, 600) + jukebox.falloff = 3 + queue_icon_update() + + +/obj/machinery/jukebox/custom_tape/Destroy() + QDEL_NULL(jukebox) + . = ..() + + +/obj/machinery/jukebox/custom_tape/on_update_icon() + ClearOverlays() + if (!anchored || inoperable()) + icon_state = "[initial(icon_state)]-[MACHINE_IS_BROKEN(src) ? "broken" : "nopower"]" + return + icon_state = initial(icon_state) + if (!jukebox?.playing) + return + AddOverlays("[initial(icon_state)]-[emagged ? "emagged" : "running"]") + + +/obj/machinery/jukebox/custom_tape/powered() + return anchored && ..() + + +/obj/machinery/jukebox/custom_tape/power_change() + . = ..() + if (inoperable() && jukebox?.playing) + jukebox.Stop() + + +/obj/machinery/jukebox/custom_tape/CanUseTopic(mob/user, datum/topic_state/state) + if (!anchored) + to_chat(user, SPAN_WARNING("Secure \the [src] first.")) + return STATUS_CLOSE + return ..() + + +/obj/machinery/jukebox/custom_tape/interface_interact(mob/user) + jukebox.ui_interact(user) + return TRUE + +/obj/machinery/jukebox/custom_tape/use_tool(obj/item/tool, mob/user, list/click_params) + if(istype(tool, /obj/item/music_tape)) + var/obj/item/music_tape/D = tool + if(tape) + to_chat(user, "There is already \a [tape] inside.") + return TRUE + + if(D.ruined) + to_chat(user, "\The [D] is ruined, you can't use it.") + return TRUE + + if(!D.track) + to_chat(user, "There is no music recorded on \a [D].") + return TRUE + + if(user.drop_item()) + visible_message("[usr] insert \a [tape] into \the [src].") + D.forceMove(src) + playsound(loc, 'mods/jukebox_tapes/sounds/tape_insert.ogg', 40) + tape = D + jukebox.tracks += tape.track + verbs += /obj/machinery/jukebox/custom_tape/verb/eject + return TRUE + + return ..() + +/obj/machinery/jukebox/custom_tape/old + name = "space jukebox" + desc = "A battered and hard-loved jukebox in some forgotten style, carefully restored to some semblance of working condition." + icon = 'icons/obj/machines/jukebox.dmi' + icon_state = "jukebox2" + pixel_x = 0 + + +// SIERRA TODO: Move to corecode or override +/jukebox/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui, force_open = TRUE, datum/topic_state/state = GLOB.default_state)//, datum/topic_state/state = GLOB.jukebox_state) + var/list/data_tracks = list() + for (var/i = 1 to length(tracks)) + var/jukebox_track/track = tracks[i] + data_tracks += list(list("track" = track.title, "index" = i)) + var/jukebox_track/track = tracks[index] + var/list/data = list( + "track" = track.title, + "playing" = playing, + "volume" = volume, + "tracks" = data_tracks + ) + if(istype(owner, /obj/machinery/jukebox/custom_tape)) + var/obj/machinery/jukebox/custom_tape/J = owner + data["tape"] = J.tape + ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new (user, src, ui_key, template, ui_title, ui_width, ui_height, state = state) + ui.set_initial_data(data) + ui.open() + +/jukebox/Topic(href, href_list) + switch ("[href_list["act"]]") + if ("next") Next() + if ("last") Last() + if ("stop") Stop() + if ("play") Play() + if ("volume") Volume("[href_list["dat"]]") + if ("track") Track("[href_list["dat"]]") + if ("eject") + if(istype(owner, /obj/machinery/jukebox/custom_tape)) + var/obj/machinery/jukebox/custom_tape/J = owner + J.eject() + return TOPIC_REFRESH + +/obj/random/machine/jukebox_custom + name = "random jukebox" + +/obj/random/machine/jukebox_custom/spawn_choices() + return list( + /obj/machinery/jukebox/custom_tape, + /obj/machinery/jukebox/custom_tape/old + ) diff --git a/mods/jukebox_tapes/sounds/tape_eject.ogg b/mods/jukebox_tapes/sounds/tape_eject.ogg new file mode 100644 index 0000000000000..9c04b3fdfdaf5 Binary files /dev/null and b/mods/jukebox_tapes/sounds/tape_eject.ogg differ diff --git a/mods/jukebox_tapes/sounds/tape_insert.ogg b/mods/jukebox_tapes/sounds/tape_insert.ogg new file mode 100644 index 0000000000000..93d7ff6e8840b Binary files /dev/null and b/mods/jukebox_tapes/sounds/tape_insert.ogg differ diff --git a/mods/legalese_language/README.md b/mods/legalese_language/README.md new file mode 100644 index 0000000000000..a04e9adfda5b2 --- /dev/null +++ b/mods/legalese_language/README.md @@ -0,0 +1,79 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/388 +- https://github.com/SierraBay/SierraBay12/pull/1773 + + + + +## Канцелярит + +ID мода: LEGALESE + + +### Описание мода + +Мод добавляет канцелярит - загадочный язык межзвездных бюрократов + + +### Изменения *кор кода* + +- Отсутствуют + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- `code/__defines/~mods/~master_defines.dm`: `LANGUAGE_LEGALESE` + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +Furior + diff --git a/mods/legalese_language/_legalese.dm b/mods/legalese_language/_legalese.dm new file mode 100644 index 0000000000000..5889605c2b149 --- /dev/null +++ b/mods/legalese_language/_legalese.dm @@ -0,0 +1,4 @@ +/singleton/modpack/atmospheric_retention_field + name = "Language Legalese" + desc = "Язык для истинных мастеров бюрократии." + author = "Furior" diff --git a/mods/legalese_language/_legalese.dme b/mods/legalese_language/_legalese.dme new file mode 100644 index 0000000000000..2d02dc54800a9 --- /dev/null +++ b/mods/legalese_language/_legalese.dme @@ -0,0 +1,11 @@ +#ifndef MODPACK_LEGALESE_LANGUAGE +#define MODPACK_LEGALESE_LANGUAGE + +#include "_legalese.dm" +#include "code/legalese.dm" +#include "code/gutter.dm" +#include "code/robot_module.dm" +#include "code/selenian.dm" +#include "code/skill.dm" + +#endif diff --git a/mods/legalese_language/code/gutter.dm b/mods/legalese_language/code/gutter.dm new file mode 100644 index 0000000000000..07a7943b0636d --- /dev/null +++ b/mods/legalese_language/code/gutter.dm @@ -0,0 +1,3 @@ +/datum/language/gutter/New() + . = ..() + partial_understanding += list(LANGUAGE_LEGALESE = 25) diff --git a/mods/legalese_language/code/legalese.dm b/mods/legalese_language/code/legalese.dm new file mode 100644 index 0000000000000..f9fe9e1170e52 --- /dev/null +++ b/mods/legalese_language/code/legalese.dm @@ -0,0 +1,20 @@ +/datum/language/legal + name = LANGUAGE_LEGALESE + desc = "A cryptic language used by interstellar bureaucrats and lawyers." + speech_verb = "states" + exclaim_verb = "objects" + ask_verb = "inquiries" + shorthand = "Law" + space_chance = 100 + key = "u" + partial_understanding = list( + LANGUAGE_HUMAN_EURO = 10, + LANGUAGE_HUMAN_SELENIAN = 25, + LANGUAGE_SKRELLIAN = 5 + ) + syllables = list( + "hitherto", "whereof", "hereunto", "deed", "hereinbefore", "whereas", "consensus", "nonwithstanding", + "exonerated", "effecuate", "accord", "caveat", "stipulation", "pledgee", "covenant", "rights", + "lawful", "suit of law", "sequestrator", "et al", "et", "ex", "quid", "bono", "quo", "pro", "ad" + ) + has_written_form = TRUE diff --git a/mods/legalese_language/code/robot_module.dm b/mods/legalese_language/code/robot_module.dm new file mode 100644 index 0000000000000..aa2390b3e89f5 --- /dev/null +++ b/mods/legalese_language/code/robot_module.dm @@ -0,0 +1,3 @@ +/obj/item/robot_module/Initialize() + . = ..() + languages += list(LANGUAGE_LEGALESE = TRUE) diff --git a/mods/legalese_language/code/selenian.dm b/mods/legalese_language/code/selenian.dm new file mode 100644 index 0000000000000..5d6056a9a0255 --- /dev/null +++ b/mods/legalese_language/code/selenian.dm @@ -0,0 +1,3 @@ +/datum/language/human/selenian/New() + . = ..() + partial_understanding += list(LANGUAGE_LEGALESE = 15) diff --git a/mods/legalese_language/code/skill.dm b/mods/legalese_language/code/skill.dm new file mode 100644 index 0000000000000..78e0f5882d777 --- /dev/null +++ b/mods/legalese_language/code/skill.dm @@ -0,0 +1,8 @@ +/singleton/hierarchy/skill/organizational/bureaucracy/update_special_effects(mob/mob, level) + . = ..() + mob.remove_language(LANGUAGE_LEGALESE) + if(level == SKILL_MASTER) + if(ishuman(mob)) + var/mob/living/carbon/human/H = mob + if(istype(H.species, /datum/species/human)) + H.add_language(LANGUAGE_LEGALESE) diff --git a/mods/loadout_items/README.md b/mods/loadout_items/README.md new file mode 100644 index 0000000000000..58a9c801ecbdd --- /dev/null +++ b/mods/loadout_items/README.md @@ -0,0 +1,90 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1562 +- https://github.com/SierraBay/SierraBay12/pull/1643 +- https://github.com/SierraBay/SierraBay12/pull/1650 +- https://github.com/SierraBay/SierraBay12/pull/1761 + + + +## Предметы лодаута + +ID мода: LOADOUT_ITEMS + + +### Описание мода + +Модулярно добавленные в билд предметы для лодаута. + + +### Изменения *кор кода* + +- `code/controllers/subsystems/jobs.dm`: + - `/datum/controller/subsystem/jobs/proc/equip_custom_loadout` + + +### Оверрайды + +- `mods/_master_files/code/modules/clothing/spacesuits/spacesuits.dm`: + - `/obj/item/clothing/suit/space/var/valid_accessory_slots` + + +### Дефайны + +- `code/__defines/~mods/~master_defines.dm`: + - `ACCESSORY_SLOT_OVER` + + +### Используемые файлы, не содержащиеся в модпаке + +- `maps\sierra\loadout\loadout_gloves.dm` +- `maps\torch\icons\obj\obj_accessories_solgov.dmi` +- `maps\torch\icons\mob\unathi\onmob_accessories_solgov_unathi.dmi` +- `maps\torch\icons\mob\onmob_accessories_solgov.dmi` +- `maps\torch\icons\obj\obj_under_solgov.dmi` +- `maps\torch\icons\mob\onmob_under_solgov.dmi` +- `maps\torch\icons\mob\unathi\onmob_under_solgov_unathi.dmi` + + + +### Авторы: + +UEDHighCommand + diff --git a/mods/loadout_items/_loadout_items.dm b/mods/loadout_items/_loadout_items.dm new file mode 100644 index 0000000000000..61b1b8b322890 --- /dev/null +++ b/mods/loadout_items/_loadout_items.dm @@ -0,0 +1,4 @@ +/singleton/modpack/loadout_items + name = "Предметы лодаута" + desc = "Модулярно добавленные в билд предметы для лодаута." + author = "UEDHighCommand" diff --git a/mods/loadout_items/_loadout_items.dme b/mods/loadout_items/_loadout_items.dme new file mode 100644 index 0000000000000..e258a326f4a61 --- /dev/null +++ b/mods/loadout_items/_loadout_items.dme @@ -0,0 +1,20 @@ +#ifndef MODPACK_LOADOUT_ITEMS +#define MODPACK_LOADOUT_ITEMS + +#include "_loadout_items.dm" +#include "code/accessory.dm" +#include "code/armor.dm" +#include "code/cloak.dm" +#include "code/gloves.dm" +#include "code/head.dm" +#include "code/shoes.dm" +#include "code/general.dm" +#include "code/suits.dm" +#include "code/uniforms.dm" +#include "code/lists/accessories.dm" +#include "code/lists/cloaks.dm" +#include "code/lists/general.dm" +#include "code/lists/uniforms.dm" +#include "code/lists/suits.dm" + +#endif diff --git a/mods/loadout_items/code/accessory.dm b/mods/loadout_items/code/accessory.dm new file mode 100644 index 0000000000000..8afd3167068e5 --- /dev/null +++ b/mods/loadout_items/code/accessory.dm @@ -0,0 +1,306 @@ +/obj/item/clothing/accessory/solgov + name = "master solgov accessory" + icon = 'maps/torch/icons/obj/obj_accessories_solgov.dmi' + accessory_icons = list(slot_w_uniform_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi', slot_wear_suit_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi') + w_class = ITEM_SIZE_TINY + sprite_sheets = list( + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_accessories_solgov_unathi.dmi' + ) + +/********* +ranks - ec +*********/ + +/obj/item/clothing/accessory/solgov/rank + name = "ranks" + desc = "Insignia denoting rank of some kind. These appear blank." + icon_state = "fleetrank" + on_rolled_down = ACCESSORY_ROLLED_NONE + slot = ACCESSORY_SLOT_RANK + gender = PLURAL + accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY + +/obj/item/clothing/accessory/solgov/rank/ec + name = "explorer ranks" + desc = "Insignia denoting rank of some kind. These appear blank." + icon_state = "ecrank_e1" + +/obj/item/clothing/accessory/solgov/rank/ec/enlisted + name = "ranks (E-1 apprentice explorer)" + desc = "Insignia denoting the rank of Apprentice Explorer." + icon_state = "ecrank_e1" + +/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e3 + name = "ranks (E-3 explorer)" + desc = "Insignia denoting the rank of Explorer." + icon_state = "ecrank_e3" + +/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e5 + name = "ranks (E-5 senior explorer)" + desc = "Insignia denoting the rank of Senior Explorer." + icon_state = "ecrank_e5" + +/obj/item/clothing/accessory/solgov/rank/ec/enlisted/e7 + name = "ranks (E-7 chief explorer)" + desc = "Insignia denoting the rank of Chief Explorer." + icon_state = "ecrank_e7" + +/obj/item/clothing/accessory/solgov/rank/ec/officer + name = "ranks (O-1 ensign)" + desc = "Insignia denoting the rank of Ensign." + icon_state = "ecrank_o1" + +/obj/item/clothing/accessory/solgov/rank/ec/officer/o3 + name = "ranks (O-3 lieutenant)" + desc = "Insignia denoting the rank of Lieutenant." + icon_state = "ecrank_o3" + +/obj/item/clothing/accessory/scarf/fancy + name = "red striped scarf" + icon_state = "stripedredscarf" + icon = 'mods/loadout_items/icons/obj_accessory.dmi' + accessory_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_accessory.dmi', slot_wear_suit_str = 'mods/loadout_items/icons/onmob_accessory.dmi') + item_icons = list(slot_wear_mask_str = 'mods/loadout_items/icons/onmob_accessory.dmi') + +/obj/item/clothing/accessory/scarf/fancy/green + name = "green striped scarf" + icon_state = "stripedgreenscarf" + +/obj/item/clothing/accessory/scarf/fancy/blue + name = "blue striped scarf" + icon_state = "stripedbluescarf" + +/obj/item/clothing/accessory/scarf/fancy/zebra + name = "zebra scarf" + icon_state = "zebrascarf" + +/obj/item/clothing/accessory/scarf/fancy/christmas + name = "christmas scarf" + icon_state = "christmasscarf" + +// Press + +/obj/item/clothing/accessory/badge/press/independent + name = "press pass" + desc = "A freelance journalist's pass, certified by Oculum Broadcast." + icon = 'mods/loadout_items/icons/obj_accessory.dmi' + accessory_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_accessory.dmi', slot_wear_suit_str = 'mods/loadout_items/icons/onmob_accessory.dmi') + icon_state = "pressbadge-i" + badge_string = "Freelance Journalist" + +/obj/item/clothing/accessory/badge/holo/investigator + name = "\improper Internal Investigations holobadge" + desc = "This badge marks the holder as an internal affairs investigator." + icon = 'mods/loadout_items/icons/obj_accessory.dmi' + accessory_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_accessory.dmi', slot_wear_suit_str = 'mods/loadout_items/icons/onmob_accessory.dmi') + icon_state = "invbadge" + badge_string = "Internal Investigations" + slot_flags = SLOT_TIE | SLOT_BELT + +/* +--- Kinky stuff +*/ + +/obj/item/clothing/accessory/corset + name = "Corset" + desc = "Tight fitting undergarment, worn to shape the figure" + icon = 'mods/loadout_items/icons/obj_accessory.dmi' + accessory_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_accessory.dmi', slot_wear_suit_str = 'mods/loadout_items/icons/onmob_accessory.dmi') + icon_state = "corset" + +/obj/item/clothing/accessory/corset/vinyl + name = "Vinyl Corset" + desc = "I don't even want to ask..." + icon_state = "vynilcorset" + +/obj/item/clothing/accessory/choker + name = "choker" + desc = "to keep your neck warm" + icon = 'mods/loadout_items/icons/obj_accessory.dmi' + accessory_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_accessory.dmi', slot_wear_suit_str = 'mods/loadout_items/icons/onmob_accessory.dmi') + icon_state = "choker_color" + +/obj/item/clothing/accessory/necklace/collar + name = "silver tag collar" + desc = "A collar for your little pets... or the big ones." + icon = 'mods/loadout_items/icons/obj_accessory.dmi' + icon_state = "collar_bksilv" + + accessory_icons = list( + slot_w_uniform_str = 'mods/loadout_items/icons/onmob_accessory.dmi', + slot_wear_suit_str = 'mods/loadout_items/icons/onmob_accessory.dmi' + ) + item_icons = list( + slot_wear_mask_str = 'mods/loadout_items/icons/onmob_accessory.dmi' + ) + + var/renameable = FALSE + +/obj/item/clothing/accessory/necklace/collar/gold + name = "golden tag collar" + desc = "A collar for your little pets... or the big ones." + icon_state = "collar_bkgold" + renameable = TRUE + +/obj/item/clothing/accessory/necklace/collar/bell + name = "bell collar" + desc = "A collar with a tiny bell hanging from it, purrfect furr kitties." + icon_state = "collar_bkbell" + renameable = TRUE + +/obj/item/clothing/accessory/necklace/collar/spike + name = "spiked collar" + desc = "A collar with spikes that look as sharp as your teeth." + icon_state = "collar_bkspike" + renameable = TRUE + +/obj/item/clothing/accessory/necklace/collar/pink + name = "pink collar" + desc = "This collar will make your pets look FA-BU-LOUS." + icon_state = "collar_pisilv" + renameable = TRUE + +/obj/item/clothing/accessory/necklace/collar/use_tool(obj/item/tool, mob/living/user, list/click_params) + if(renameable && tool.sharp) + var/inscription = sanitize(input("Enter an inscription to engrave.", "Inscription") as null|text) + + if(!user.stat && !user.incapacitated() && user.Adjacent(src) && user.use_sanity_check(src, tool)) + if(!inscription) + return TRUE + USE_FEEDBACK_FAILURE("You carve \"[inscription]\" into \the [src].") + name = initial(name) + " ([inscription])" + desc = initial(desc) + " The tag says \"[inscription]\"." + return TRUE + return ..() + +/obj/item/clothing/accessory/necklace/collar/holo + name = "holo-collar" + desc = "An expensive holo-collar for the modern day pet." + icon_state = "collar_bkholo" + +/obj/item/clothing/accessory/necklace/collar/holo/attack_self(mob/user as mob) + to_chat(user, SPAN_NOTICE("[name]'s interface is projected onto your hand.")) + + var/str = copytext(reject_bad_text(input(user,"Tag text?","Set tag","")),1,MAX_NAME_LEN) + + if(!str || !length(str)) + to_chat(user, SPAN_NOTICE("[name]'s tag set to be blank.")) + name = initial(name) + desc = initial(desc) + else + to_chat(user, SPAN_NOTICE("You set the [name]'s tag to '[str]'.")) + name = initial(name) + " ([str])" + desc = initial(desc) + " The tag says \"[str]\"." + +/obj/item/clothing/accessory/necklace/collar/shock + name = "shock collar" + desc = "A collar used to ease hungry predators." + icon_state = "collar_bkshk0" + item_state = "collar_bkshk" + var/on = FALSE // 0 for off, 1 for on, starts off to encourage people to set non-default frequencies and codes. + var/frequency = 1449 + var/code = 2 + var/datum/radio_frequency/radio_connection + +/obj/item/clothing/accessory/necklace/collar/shock/New() + ..() + radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) // Makes it so you don't need to change the frequency off of default for it to work. + +/obj/item/clothing/accessory/necklace/collar/shock/Destroy() //Clean up your toys when you're done. + radio_controller.remove_object(src, frequency) + radio_connection = null //Don't delete this, this is a shared object. + return ..() + +/obj/item/clothing/accessory/necklace/collar/shock/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) + +/obj/item/clothing/accessory/necklace/collar/shock/Topic(href, href_list) + if(usr.stat || usr.restrained()) + return + if(((istype(usr, /mob/living/carbon/human) && ((!( SSticker ) || (SSticker && SSticker.mode != "monkey")) && LAZYACCESS(usr.contents, src))) || (LAZYACCESS(usr.contents, master) || (in_range(src, usr) && istype(loc, /turf))))) + usr.set_machine(src) + if(href_list["freq"]) + var/new_frequency = sanitize_frequency(frequency + text2num(href_list["freq"])) + set_frequency(new_frequency) + else + if(href_list["code"]) + code += text2num(href_list["code"]) + code = round(code) + code = min(100, code) + code = max(1, code) + else + if(href_list["power"]) + on = !( on ) + icon_state = "collar_bkshk[on]" // And apparently this works, too?! + if(!( master )) + if(istype(loc, /mob)) + attack_self(loc) + else + for(var/mob/M in viewers(1, src)) + if(M.client) + attack_self(M) + else + if(istype(master.loc, /mob)) + attack_self(master.loc) + else + for(var/mob/M in viewers(1, master)) + if(M.client) + attack_self(M) + else + close_browser(usr, "window=radio") + return + return + +/obj/item/clothing/accessory/necklace/collar/shock/receive_signal(datum/signal/signal) + if(!signal || signal.encryption != code) + return + + if(on) + var/mob/M = null + if(ismob(loc)) + M = loc + if(ismob(loc.loc)) + M = loc.loc // This is about as terse as I can make my solution to the whole 'collar won't work when attached as accessory' thing. + to_chat(M, SPAN_DANGER("You feel a sharp shock!")) + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread + s.set_up(3, 1, M) + s.start() + M.Weaken(5) + return + +/obj/item/clothing/accessory/necklace/collar/shock/attack_self(mob/user as mob, flag1) + if(!istype(user, /mob/living/carbon/human)) + return + user.set_machine(src) + var/dat = {" + Turn [on ? "Off" : "On"]
    + Frequency/Code for collar:
    + Frequency: + - + - [format_frequency(frequency)] + + + +
    + + Code: + - + - [code] + + + +
    +
    "} + show_browser(user, dat, "window=radio") + onclose(user, "radio") + return + +// Overrides + +/obj/item/clothing/accessory/badge/holo + icon = 'mods/loadout_items/icons/obj_accessory.dmi' + accessory_icons = list( + slot_w_uniform_str = 'mods/loadout_items/icons/onmob_accessory.dmi', + slot_wear_suit_str = 'mods/loadout_items/icons/onmob_accessory.dmi' + ) + item_icons = list( + slot_wear_mask_str = 'mods/loadout_items/icons/onmob_accessory.dmi' + ) diff --git a/mods/loadout_items/code/armor.dm b/mods/loadout_items/code/armor.dm new file mode 100644 index 0000000000000..00bc1a711a067 --- /dev/null +++ b/mods/loadout_items/code/armor.dm @@ -0,0 +1,38 @@ +/obj/item/clothing/head/helmet/nt/blueshift + name = "research division security helmet" + desc = "A helmet with 'RESEARCH DIVISION SECURITY' printed on the back in red lettering." + icon = 'mods/loadout_items/icons/obj_head.dmi' + item_icons = list(slot_head_str = 'mods/loadout_items/icons/onmob_head.dmi') + icon_state = "blueshift_helm" + +/obj/item/clothing/suit/armor/vest/blueshift + name = "research division armored vest" + desc = "A synthetic armor vest. This one is marked with a hazard markings and 'RESEARCH DIVISION SECURITY' tag." + icon = 'mods/loadout_items/icons/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'mods/loadout_items/icons/onmob_suit.dmi') + icon_state = "blueshift_armor" + +/* +Armor Patches, covers, ect +*/ + +/obj/item/clothing/accessory/armor/helmcover/scp_cover + name = "SCP cover" + desc = "A fabric cover for armored helmets. This one has SCP's colors." + icon_override = 'mods/loadout_items/icons/obj_accessory.dmi' + icon = 'mods/loadout_items/icons/obj_accessory.dmi' + icon_state = "scp_cover" + accessory_icons = list(slot_tie_str = 'mods/loadout_items/icons/onmob_accessory.dmi', slot_head_str = 'mods/loadout_items/icons/onmob_accessory.dmi') + +/obj/item/clothing/accessory/armor_tag/scp + name = "SCP tag" + desc = "An armor tag with the words SECURITY CORPORATE PERSONAL printed in red lettering on it." + icon_override = 'mods/loadout_items/icons/onmob_accessory.dmi' + icon = 'mods/loadout_items/icons/obj_accessory.dmi' + icon_state = "scp_tag" + accessory_icons = list(slot_tie_str = 'mods/loadout_items/icons/onmob_accessory.dmi', slot_wear_suit_str = 'mods/loadout_items/icons/onmob_accessory.dmi') + +/obj/item/clothing/accessory/armor_tag/zpci + name = "\improper ZPCI tag" + desc = "An armor tag with the words ZONE PROTECTION CONTROL INCORPORATED printed in cyan lettering on it." + icon_state = "pcrctag" diff --git a/mods/loadout_items/code/cloak.dm b/mods/loadout_items/code/cloak.dm new file mode 100644 index 0000000000000..18aff7a380265 --- /dev/null +++ b/mods/loadout_items/code/cloak.dm @@ -0,0 +1,191 @@ +/obj/item/clothing/accessory/cloak // A colorable cloak + name = "blank cloak" + desc = "A simple, bland cloak." + icon = 'mods/loadout_items/icons/obj_accessory.dmi' + icon_state = "colorcloak" + + accessory_icons = list( + slot_w_uniform_str = 'mods/loadout_items/icons/onmob_accessory.dmi', \ + slot_tie_str = 'mods/loadout_items/icons/onmob_accessory.dmi', \ + slot_wear_suit_str = 'mods/loadout_items/icons/onmob_accessory.dmi') + item_icons = list( + slot_wear_suit_str = 'mods/loadout_items/icons/onmob_accessory.dmi') + + sprite_sheets = list( + SPECIES_UNATHI = 'mods/loadout_items/icons/onmob_accessory.dmi', + SPECIES_NABBER = 'mods/loadout_items/icons/onmob_accessory.dmi' + ) + + var/fire_resist = T0C+100 + allowed = list(/obj/item/tank/oxygen_emergency) + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + slot_flags = SLOT_OCLOTHING + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + siemens_coefficient = 0.9 + w_class = ITEM_SIZE_NORMAL + slot = ACCESSORY_SLOT_OVER + accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY + + species_restricted = null + valid_accessory_slots = null + +/obj/item/clothing/accessory/cloak/ce + name = "chief engineer's cloak" + desc = "An elaborate cloak worn by the chief engineer." + icon_state = "cecloak" + +/obj/item/clothing/accessory/cloak/cmo + name = "chief medical officer's cloak" + desc = "An elaborate cloak meant to be worn by the chief medical officer." + icon_state = "cmocloak" + +/obj/item/clothing/accessory/cloak/hop + name = "head of personnel's cloak" + desc = "An elaborate cloak meant to be worn by the head of personnel." + icon_state = "hopcloak" + +/obj/item/clothing/accessory/cloak/rd + name = "research director's cloak" + desc = "An elaborate cloak meant to be worn by the research director." + icon_state = "rdcloak" + +/obj/item/clothing/accessory/cloak/qm + name = "quartermaster's cloak" + desc = "An elaborate cloak meant to be worn by the quartermaster." + icon_state = "qmcloak" + +/obj/item/clothing/accessory/cloak/hos + name = "head of security's cloak" + desc = "An elaborate cloak meant to be worn by the head of security." + icon_state = "hoscloak" + +/obj/item/clothing/accessory/cloak/captain + name = "captain's cloak" + desc = "An elaborate cloak meant to be worn by the colony director." + icon_state = "capcloak" + +/obj/item/clothing/accessory/cloak/cargo + name = "brown cloak" + desc = "A simple brown and black cloak." + icon_state = "cargocloak" + +/obj/item/clothing/accessory/cloak/mining + name = "trimmed purple cloak" + desc = "A trimmed purple and brown cloak." + icon_state = "miningcloak" + +/obj/item/clothing/accessory/cloak/security + name = "red cloak" + desc = "A simple red and black cloak." + icon_state = "seccloak" + +/obj/item/clothing/accessory/cloak/service + name = "green cloak" + desc = "A simple green and blue cloak." + icon_state = "servicecloak" + +/obj/item/clothing/accessory/cloak/engineer + name = "gold cloak" + desc = "A simple gold and brown cloak." + icon_state = "engicloak" + +/obj/item/clothing/accessory/cloak/atmos + name = "yellow cloak" + desc = "A trimmed yellow and blue cloak." + icon_state = "atmoscloak" + +/obj/item/clothing/accessory/cloak/research + name = "purple cloak" + desc = "A simple purple and white cloak." + icon_state = "scicloak" + +/obj/item/clothing/accessory/cloak/medical + name = "blue cloak" + desc = "A simple blue and white cloak." + icon_state = "medcloak" + +/obj/item/clothing/accessory/cloak/antiq + name = "antiquated cape" + desc = "This cape is so much aged that you can almost think it's a relic." + icon_state = "antiquated_cape" + +/obj/item/clothing/accessory/cloak/hooded + var/obj/item/clothing/head/hood + var/hoodtype = null + var/suittoggled = 0 + name = "Crimson Fleece" + desc = "A huge crimson cloak. Its outer shell is made of heavy and durable tarp-like material, and the inner shell is made of very warm and comfortable fleece." + icon_state = "crimson_cloak" + item_state = "crimson_cloak" + action_button_name = "Toggle Hood" + hoodtype = /obj/item/clothing/head/cloak_hood + +/obj/item/clothing/accessory/cloak/hooded/New() + MakeHood() + ..() + +/obj/item/clothing/accessory/cloak/hooded/Destroy() + QDEL_NULL(hood) + return ..() + +/obj/item/clothing/accessory/cloak/hooded/proc/MakeHood() + if(!hood) + hood = new hoodtype(src) + +/obj/item/clothing/accessory/cloak/hooded/ui_action_click() + ToggleHood() + +/obj/item/clothing/accessory/cloak/hooded/equipped(mob/user, slot) + if((slot != slot_w_uniform) && (slot != slot_tie)) + RemoveHood() + ..() + +/obj/item/clothing/accessory/cloak/hooded/proc/RemoveHood() + if(!hood) + return + suittoggled = 0 + update_icon() + if(ishuman(hood.loc)) + var/mob/living/carbon/H = hood.loc + H.drop_from_inventory(hood) + H.update_inv_wear_suit() + hood.forceMove(src) + +/obj/item/clothing/accessory/cloak/hooded/dropped() + RemoveHood() + +/obj/item/clothing/accessory/cloak/hooded/proc/ToggleHood() + if(!suittoggled) + if(ishuman(loc)) + var/mob/living/carbon/human/H = src.loc + if(H.wear_suit != src) + FEEDBACK_FAILURE(H, "You must be wearing \the [src] to put up the hood!") + return + if(H.head) + FEEDBACK_FAILURE(H, "You're already wearing something on your head!") + return + else + H.equip_to_slot_if_possible(hood,slot_head,0,0,1) + suittoggled = 1 + hood.icon_state = "[icon_state]_hood" + hood.item_state = "[item_state]_hood" + update_icon() + H.update_inv_wear_suit() + else + RemoveHood() + +/obj/item/clothing/accessory/cloak/hooded/on_update_icon() + if(suittoggled) + icon_state = "[initial(icon_state)]_t" + else + icon_state = "[initial(icon_state)]" + + +/obj/item/clothing/head/cloak_hood + name = "crimson hood" + desc = "A hood." + icon = 'maps/sierra/icons/mob/onmob/onmob_head.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + icon_state = "crimson_cloak_hood" + flags_inv = BLOCKHEADHAIR + body_parts_covered = HEAD diff --git a/mods/loadout_items/code/general.dm b/mods/loadout_items/code/general.dm new file mode 100644 index 0000000000000..8ea872878b3a8 --- /dev/null +++ b/mods/loadout_items/code/general.dm @@ -0,0 +1,232 @@ +// Big Gigachad Towels +/obj/item/rolled_towel + name = "rolled big towel" + desc = "A collapsed big towel - looks like you can't use it as a normal one... Try it on a beach." + icon = 'packs/infinity/icons/obj/items.dmi' + icon_state = "rolled_towel" + w_class = 2 + + force = 0.3 // Big soft towel is more harmless + attack_verb = list("whipped") + hitsound = 'sound/weapons/towelwhip.ogg' + // SIERRA TODO: port to Bay12 drop sounds + // drop_sound = 'sound/items/drop/cloth.ogg' + // pickup_sound = 'sound/items/pickup/cloth.ogg' + + var/beach_towel = /obj/structure/towel + +/obj/item/rolled_towel/attack_self(mob/living/user as mob) + var/obj/item/rolled_towel/R = new beach_towel(user.loc) + R.add_fingerprint(user) + qdel(src) + +/obj/structure/towel + name = "big towel" + icon = 'mods/loadout_items/icons/towels.dmi' + icon_state = "beach_towel" + anchored = FALSE + var/rolled_towel = /obj/item/rolled_towel + +/obj/structure/towel/attack_hand(mob/living/user as mob) + ..() + if(!ishuman(user)) + return 0 + visible_message("[usr] rolled up [src].") + var/obj/item/rolled_towel/B = new rolled_towel(get_turf(src)) + usr.put_in_hands(B) + qdel(src) + +/obj/item/rolled_towel/black + name = "black rolled towel" + icon_state = "black_rolled_towel" + beach_towel = /obj/structure/towel/black + +/obj/structure/towel/black + name = "black big towel" + icon_state = "black_beach_towel" + rolled_towel = /obj/item/rolled_towel/black + +/obj/item/rolled_towel/blue_stripped + name = "blue rolled towel" + icon_state = "bluestripp_towel" + beach_towel = /obj/structure/towel/blue_stripped + +/obj/structure/towel/blue_stripped + name = "blue big towel" + icon_state = "bluestripp_beach" + rolled_towel = /obj/item/rolled_towel/blue_stripped + +/obj/item/rolled_towel/red_stripped + name = "red rolled towel" + icon_state = "redstripp_towel" + beach_towel = /obj/structure/towel/red_stripped + +/obj/structure/towel/red_stripped + name = "red big towel" + icon_state = "redstripp_beach" + rolled_towel = /obj/item/rolled_towel/red_stripped + +/obj/item/rolled_towel/green_stripped + name = "green rolled towel" + icon_state = "greenstripp_towel" + beach_towel = /obj/structure/towel/green_stripped + +/obj/structure/towel/green_stripped + name = "green big towel" + icon_state = "greenstripp_beach" + rolled_towel = /obj/item/rolled_towel/green_stripped + +/obj/item/rolled_towel/yellow_stripped + name = "yellow rolled towel" + icon_state = "yellowstripp_towel" + beach_towel = /obj/structure/towel/yellow_stripped + +/obj/structure/towel/yellow_stripped + name = "green big towel" + icon_state = "yellowstripp_beach" + rolled_towel = /obj/item/rolled_towel/yellow_stripped + +/obj/item/rolled_towel/pink_stripped + name = "pink rolled towel" + icon_state = "pinkstripp_towel" + beach_towel = /obj/structure/towel/pink_stripped + +/obj/structure/towel/pink_stripped + name = "green big towel" + icon_state = "pinkstripp_beach" + rolled_towel = /obj/item/rolled_towel/pink_stripped + +/obj/item/rolled_towel/ilove + name = "*i <3 you* rolled towel" + icon_state = "rolled_towel" + beach_towel = /obj/structure/towel/ilove + +/obj/structure/towel/ilove + name = "*i <3 you* big towel" + icon_state = "ilove_beach" + rolled_towel = /obj/item/rolled_towel/ilove + +/obj/item/rolled_towel/fitness + name = "rolled fitness mat" + desc = "A fitness mat - place it in a gym for better training.." + icon_state = "rolled_gym_beach" + beach_towel = /obj/structure/towel/fitness + +/obj/structure/towel/fitness + name = "fitness mat" + icon_state = "gym_beach" + rolled_towel = /obj/item/rolled_towel/fitness + +/obj/structure/towel/holo + name = "big holographic towel" + icon = 'mods/loadout_items/icons/towels.dmi' + icon_state = "beach_towel" + anchored = TRUE + rolled_towel = null + +/obj/structure/towel/holo/attack_hand(mob/living/user as mob) + return + +/obj/structure/towel/holo/ilove + name = "*i <3 you* big towel" + icon_state = "ilove_beach" + +/obj/structure/towel/holo/blue_stripped + name = "blue big towel" + icon_state = "bluestripp_beach" + +// Cards + +/obj/item/deck/compact + name = "compact deck of cards" + desc = "A deck of playing cards. Looks like this one hasn't numbers from two to five, and jokers." + icon_state = "deck" + +/obj/item/deck/compact/New() + ..() + + var/datum/playingcard/P + for(var/suit in list("spades", "clubs", "diamonds", "hearts")) + + var/colour + if(suit == "spades" || suit == "clubs") + colour = "black_" + else + colour = "red_" + + for(var/number in list("ace", "six", "seven", "eight", "nine", "ten")) + P = new() + P.name = "[number] of [suit]" + P.card_icon = "[colour]num" + P.back_icon = "card_back" + cards += P + + for(var/number in list("jack", "queen", "king")) + P = new() + P.name = "[number] of [suit]" + P.card_icon = "[colour]col" + P.back_icon = "card_back" + cards += P + +// Zippo + +/obj/item/flame/lighter/zippo/fancy + name = "engraved zippo" + icon = 'mods/loadout_items/icons/lighters.dmi' + icon_state = "engraved" + +/obj/item/flame/lighter/zippo/fancy/gold + name = "golden zippo" + icon_state = "gold" + +/obj/item/flame/lighter/zippo/fancy/station + name = "13'th zippo " + icon_state = "13" + +/obj/item/flame/lighter/zippo/fancy/black + name = "cross zippo" + icon_state = "black" + +/obj/item/flame/lighter/zippo/fancy/blue + name = "blue zippo" + icon_state = "bluezippo" + +/obj/item/flame/lighter/zippo/fancy/red + name = "red-white zippo" + icon_state = "redzippo" + +/obj/item/flame/lighter/zippo/fancy/butterfly + name = "butterfly zippo" + icon_state = "butterzippo" + +/obj/item/flame/lighter/zippo/fancy/fancy + name = "flower zippo" + icon_state = "fancyzippo" + +/obj/item/flame/lighter/zippo/fancy/on_update_icon() + var/datum/extension/base_icon_state/bis = get_extension(src, /datum/extension/base_icon_state) + + if(lit) + icon_state = "[bis.base_icon_state]_on" + item_state = "[bis.base_icon_state]_on" + else + icon_state = "[bis.base_icon_state]" + item_state = "[bis.base_icon_state]" + +// Wheelchair + +/obj/item/wheelchair_kit + name = "compressed wheelchair kit" + desc = "Collapsed parts, prepared to immediately spring into the shape of a wheelchair." + icon = 'packs/infinity/icons/obj/items.dmi' + icon_state = "wheelchair-item" + item_state = "rbed" + w_class = ITEM_SIZE_LARGE + +/obj/item/wheelchair_kit/attack_self(mob/user) + visible_message("[user] starts lay out \the [src.name].") + if(do_after(user, 4 SECONDS, src)) + var/obj/structure/bed/chair/wheelchair/W = new /obj/structure/bed/chair/wheelchair(get_turf(user)) + visible_message(SPAN_NOTICE("[user] lay out \the [W.name].")) + W.add_fingerprint(user) + qdel(src) diff --git a/mods/loadout_items/code/gloves.dm b/mods/loadout_items/code/gloves.dm new file mode 100644 index 0000000000000..567ddeabdb4a0 --- /dev/null +++ b/mods/loadout_items/code/gloves.dm @@ -0,0 +1,13 @@ +/obj/item/clothing/gloves/insulated/black + name = "black insulated gloves" + desc = "These gloves will protect the wearer from electric shocks. A great choice for stylish hackers." + color = COLOR_GRAY20 + icon_state = "white" + item_state = "lgloves" + +/obj/item/clothing/gloves/insulated/white + name = "white insulated gloves" + desc = "These gloves will protect the wearer from electric shocks. A great choice for ladies and gentlemen." + color = COLOR_WHITE + icon_state = "white" + item_state = "lgloves" diff --git a/mods/loadout_items/code/head.dm b/mods/loadout_items/code/head.dm new file mode 100644 index 0000000000000..fdad5c3540768 --- /dev/null +++ b/mods/loadout_items/code/head.dm @@ -0,0 +1,39 @@ +// Unathi garnmaents + +/obj/item/clothing/head/cap/sec + name = "big security cap" + desc = "A security cap. This one pretty big." + icon = 'mods/loadout_items/icons/obj_head.dmi' + item_icons = list(slot_wear_suit_str = 'mods/loadout_items/icons/onmob_head.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'mods/loadout_items/icons/onmob_head.dmi' + ) + icon_state = "unathi_seccap" + item_state = "unathi_seccap" + species_restricted = list(SPECIES_UNATHI) + flags_inv = BLOCKHEADHAIR + +/obj/item/clothing/head/cap/desert + name = "Suncap" + desc = "A big suncap designed for use in the desert. Unathi use it to withstand scorhing heat rays when \"Burning Mother\" at it's zenith, something that their heads cannot handle. This one features foldable flaps to keep back of the neck protected. It's too big to fit anyone, but unathi." + icon = 'mods/loadout_items/icons/obj_head.dmi' + item_icons = list(slot_wear_suit_str = 'mods/loadout_items/icons/onmob_head.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'mods/loadout_items/icons/onmob_head.dmi' + ) + icon_state = "unathi_suncap" + item_state = "unathi_suncap" + flags_inv = HIDEEARS|BLOCKHEADHAIR + var/icon_state_up = "unathi_suncap_u" + species_restricted = list(SPECIES_UNATHI) + body_parts_covered = HEAD + +/obj/item/clothing/head/cap/desert/attack_self(mob/user as mob) + if(icon_state == initial(icon_state)) + icon_state = icon_state_up + item_state = icon_state_up + to_chat(user, "You raise the ear flaps on the Suncap.") + else + icon_state = initial(icon_state) + item_state = initial(icon_state) + to_chat(user, "You lower the ear flaps on the Suncap.") diff --git a/mods/loadout_items/code/lists/accessories.dm b/mods/loadout_items/code/lists/accessories.dm new file mode 100644 index 0000000000000..c9fc7007fee1d --- /dev/null +++ b/mods/loadout_items/code/lists/accessories.dm @@ -0,0 +1,96 @@ +/datum/gear/accessory/solgov_ec_rank + display_name = "Expeditionary Corps rank badges selection" + description = "An insignia denoting wearer's rank within the SCG Expeditionary Corps." + path = /obj/item/clothing/accessory + allowed_branches = list(/datum/mil_branch/contractor) + required_factions = list(FACTION_EXPEDITIONARY, FACTION_CORPORATE) + +/datum/gear/accessory/solgov_ec_rank/New() + ..() + var/solgovranks = list() + solgovranks["ranks (E-1 apprentice explorer)"] = /obj/item/clothing/accessory/solgov/rank/ec/enlisted + solgovranks["ranks (E-3 explorer)"] = /obj/item/clothing/accessory/solgov/rank/ec/enlisted/e3 + solgovranks["ranks (E-5 senior explorer)"] = /obj/item/clothing/accessory/solgov/rank/ec/enlisted/e5 + solgovranks["ranks (O-1 ensign)"] = /obj/item/clothing/accessory/solgov/rank/ec/officer + gear_tweaks += new/datum/gear_tweak/path(solgovranks) + +// Cosmetics + +/datum/gear/brush + display_name = "hairbrush" + path = /obj/item/haircomb/brush + category = GEAR_CATEGORY_COSMETICS + +/datum/gear/deodorant + display_name = "deodorant" + path = /obj/item/reagent_containers/spray/cleaner/deodorant + category = GEAR_CATEGORY_COSMETICS + +/datum/gear/lipstick + display_name = "lipstick selection" + path = /obj/item/lipstick + category = GEAR_CATEGORY_COSMETICS + flags = GEAR_HAS_TYPE_SELECTION + +/datum/gear/comb + display_name = "plastic comb" + path = /obj/item/haircomb + category = GEAR_CATEGORY_COSMETICS + flags = GEAR_HAS_COLOR_SELECTION + +// Assorted accessories + +/datum/gear/corset + display_name = "corset selection" + path = /obj/item/clothing/accessory/corset + category = GEAR_CATEGORY_CLOTHING_PIECES + flags = GEAR_HAS_COLOR_SELECTION + +/datum/gear/vinylcorset + display_name = "vinyl corset" + path = /obj/item/clothing/accessory/corset/vinyl + category = GEAR_CATEGORY_CLOTHING_PIECES + +/datum/gear/choker + display_name = "choker selection" + path = /obj/item/clothing/accessory/choker + category = GEAR_CATEGORY_CLOTHING_PIECES + flags = GEAR_HAS_COLOR_SELECTION + +/datum/gear/accessory/collar + display_name = "collar selection" + path = /obj/item/clothing/accessory/necklace/collar + +/datum/gear/accessory/collar/New() + ..() + var/collar = list() + collar["gold collar"] = /obj/item/clothing/accessory/necklace/collar/gold + collar["bell collar"] = /obj/item/clothing/accessory/necklace/collar/bell + collar["spike collar"] = /obj/item/clothing/accessory/necklace/collar/spike + collar["pink collar"] = /obj/item/clothing/accessory/necklace/collar/pink + collar["holo collar"] = /obj/item/clothing/accessory/necklace/collar/holo + gear_tweaks += new/datum/gear_tweak/path(collar) + +// Press + +/datum/gear/accessory/pressbadge + display_name = "corporate press pass" + path = /obj/item/clothing/accessory/badge/press + +/datum/gear/accessory/pressbadge + display_name = "freelance press pass" + path = /obj/item/clothing/accessory/badge/press/independent + +/datum/gear/accessory/scarf_fancy + display_name = "special scarfs selection" + path = /obj/item/clothing/accessory/scarf/fancy + +/datum/gear/accessory/scarf_fancy/New() + ..() + var/scarf = list() + scarf["red striped scarf"] = /obj/item/clothing/accessory/scarf/fancy + scarf["green striped scarf"] = /obj/item/clothing/accessory/scarf/fancy/green + scarf["blue striped scarf"] = /obj/item/clothing/accessory/scarf/fancy/blue + scarf["zebra scarf"] = /obj/item/clothing/accessory/scarf/fancy/zebra + scarf["christmas scarf"] = /obj/item/clothing/accessory/scarf/fancy/christmas + gear_tweaks += new/datum/gear_tweak/path(scarf) diff --git a/mods/loadout_items/code/lists/cloaks.dm b/mods/loadout_items/code/lists/cloaks.dm new file mode 100644 index 0000000000000..9374a0a88f75a --- /dev/null +++ b/mods/loadout_items/code/lists/cloaks.dm @@ -0,0 +1,83 @@ +/datum/gear/clothing/cloak_custom // common cloak + display_name = "cloak, colorable" + path = /obj/item/clothing/accessory/cloak + flags = GEAR_HAS_COLOR_SELECTION + +//command cloaks + +/datum/gear/clothing/cloak_captain + display_name = "cloak, command (captain)" + path = /obj/item/clothing/accessory/cloak/captain + allowed_roles = list(/datum/job/captain) + +/datum/gear/clothing/cloak_hop + display_name = "cloak, command (head of personnel)" + path = /obj/item/clothing/accessory/cloak/hop + allowed_roles = list(/datum/job/hop) + +/datum/gear/clothing/cloak_hos + display_name = "cloak, command (head of security)" + path = /obj/item/clothing/accessory/cloak/hos + allowed_roles = list(/datum/job/hos) + +/datum/gear/clothing/cloak_cmo + display_name = "cloak, command (chief medical officer)" + path = /obj/item/clothing/accessory/cloak/cmo + allowed_roles = list(/datum/job/cmo) + +/datum/gear/clothing/cloak_ce + display_name = "cloak, command (chief engineer)" + path = /obj/item/clothing/accessory/cloak/ce + allowed_roles = list(/datum/job/chief_engineer) + +/datum/gear/clothing/cloak_rd + display_name = "cloak, command (research director)" + path = /obj/item/clothing/accessory/cloak/rd + allowed_roles = list(/datum/job/rd) + +/datum/gear/clothing/cloak_qm + display_name = "cloak, command (quartermaster)" + path = /obj/item/clothing/accessory/cloak/qm + allowed_roles = list(/datum/job/qm) + +// departaments cloaks + +/datum/gear/clothing/cloak_cargo + display_name = "cloak, cargo" + path = /obj/item/clothing/accessory/cloak/cargo + +/datum/gear/clothing/cloak_mining + display_name = "cloak, mining" + path = /obj/item/clothing/accessory/cloak/mining + +/datum/gear/clothing/cloak_security + display_name = "cloak, security" + path = /obj/item/clothing/accessory/cloak/security + +/datum/gear/clothing/cloak_service + display_name = "cloak, service" + path = /obj/item/clothing/accessory/cloak/service + +/datum/gear/clothing/cloak_engineer + display_name = "cloak, engineer" + path = /obj/item/clothing/accessory/cloak/engineer + +/datum/gear/clothing/cloak_atmos + display_name = "cloak, atmos" + path = /obj/item/clothing/accessory/cloak/atmos + +/datum/gear/clothing/cloak_research + display_name = "cloak, science" + path = /obj/item/clothing/accessory/cloak/research + +/datum/gear/clothing/cloak_medical + display_name = "cloak, medical" + path = /obj/item/clothing/accessory/cloak/medical + +/datum/gear/clothing/cloak_antiq + display_name = "antiquated cape" + path = /obj/item/clothing/accessory/cloak/antiq + +/datum/gear/clothing/cloak_hooded + display_name = "cloak, hooded" + path = /obj/item/clothing/accessory/cloak/hooded diff --git a/mods/loadout_items/code/lists/general.dm b/mods/loadout_items/code/lists/general.dm new file mode 100644 index 0000000000000..a187cd9dd3820 --- /dev/null +++ b/mods/loadout_items/code/lists/general.dm @@ -0,0 +1,23 @@ +/datum/gear/utility/wheelchair + display_name = "compressed wheelchair kit" + path = /obj/item/wheelchair_kit + cost = 2 + +/datum/gear/utility/general_belt + display_name = "equipment belt" + path = /obj/item/storage/belt/general + +/datum/gear/rolled_towel + display_name = "big towel" + description = "Collapsed big towel - looks like you can't use it as a normal one... Use it on the beach or gym." + path = /obj/item/rolled_towel + flags = GEAR_HAS_TYPE_SELECTION + +/datum/gear/cards_compact + display_name = "deck of cards (compact)" + path = /obj/item/deck/compact + +/datum/gear/zippo_decorated + display_name = "zippo (decorated)" + path = /obj/item/flame/lighter/zippo/fancy + flags = GEAR_HAS_TYPE_SELECTION diff --git a/mods/loadout_items/code/lists/suits.dm b/mods/loadout_items/code/lists/suits.dm new file mode 100644 index 0000000000000..17ff9e1e1c0ca --- /dev/null +++ b/mods/loadout_items/code/lists/suits.dm @@ -0,0 +1,104 @@ +/datum/gear/suit/fancy_jackets + display_name = "fancy jackets selection" + path = /obj/item/clothing/suit + +/datum/gear/suit/fancy_jackets/New() + ..() + var/fancy_jackets = list() + fancy_jackets += /obj/item/clothing/suit/storage/drive_jacket + fancy_jackets += /obj/item/clothing/suit/storage/toggle/the_jacket + fancy_jackets += /obj/item/clothing/suit/storage/brand_jacket + fancy_jackets += /obj/item/clothing/suit/storage/brand_orange_jacket + fancy_jackets += /obj/item/clothing/suit/storage/brand_rjacket + fancy_jackets += /obj/item/clothing/suit/storage/hooded/faln_jacket + fancy_jackets += /obj/item/clothing/suit/storage/leon_jacket + fancy_jackets += /obj/item/clothing/suit/storage/toggle/longjacket + fancy_jackets += /obj/item/clothing/suit/storage/tgbomber + gear_tweaks += new/datum/gear_tweak/path/specified_types_list(fancy_jackets) + +/datum/gear/suit/old_pullover + display_name = "old pullover sweater" + path = /obj/item/clothing/suit/storage/old_pullover + +/datum/gear/suit/fancy_coats + display_name = "coats selection" + path = /obj/item/clothing/suit + +/datum/gear/suit/fancy_coats/New() + ..() + var/fancy_coats = list() + fancy_coats += /obj/item/clothing/suit/storage/long_coat + fancy_coats += /obj/item/clothing/suit/storage/gentlecoat + fancy_coats += /obj/item/clothing/suit/storage/tailcoat + fancy_coats += /obj/item/clothing/suit/storage/jensencoat + gear_tweaks += new/datum/gear_tweak/path/specified_types_list(fancy_coats) + +/datum/gear/suit/kimono + display_name = "kimono selection" + path = /obj/item/clothing/suit/storage/kimono + +/datum/gear/suit/kimono/New() + ..() + var/kim = list() + kim += /obj/item/clothing/suit/storage/kimono + kim += /obj/item/clothing/suit/storage/kimono/blue + kim += /obj/item/clothing/suit/storage/kimono/red_short + kim += /obj/item/clothing/suit/storage/kimono/black + gear_tweaks += new/datum/gear_tweak/path/specified_types_list(kim) + +/datum/gear/suit/sierra_medcoat + display_name = "medical suit selection" + path = /obj/item/clothing/suit + flags = GEAR_HAS_NO_CUSTOMIZATION + +/datum/gear/suit/sierra_medcoat/New() + ..() + var/medicoats = list() + medicoats["first responder jacket"] = /obj/item/clothing/suit/storage/toggle/fr_jacket + medicoats["first responder jacket (high-visibility)"] = /obj/item/clothing/suit/storage/toggle/fr_jacket/highvis + medicoats["EMS jacket"] = /obj/item/clothing/suit/storage/toggle/fr_jacket/ems + medicoats["surgical apron"] = /obj/item/clothing/suit/surgicalapron + medicoats["medical jacket"] = /obj/item/clothing/suit/storage/toggle/fr_jacket/emrs + gear_tweaks += new/datum/gear_tweak/path(medicoats) + +/datum/gear/suit/unathi/officer_uniform + display_name = "(Unathi) large security uniform" + path = /obj/item/clothing/under/security/officer + slot = slot_w_uniform + +/datum/gear/suit/unathi/desert_uniform + display_name = "(Unathi) desert uniform" + path = /obj/item/clothing/under/security/desert + slot = slot_w_uniform + +/datum/gear/suit/unathi/paramedic_uniform + display_name = "(Unathi) first responder uniform" + path = /obj/item/clothing/under/medic/paramedic + slot = slot_w_uniform + +/datum/gear/suit/unathi/security_cap + display_name = "(Unathi) big security cap" + path = /obj/item/clothing/head/cap/sec + slot = slot_head + +/datum/gear/suit/unathi/desert_cap + display_name = "(Unathi) suncap" + path = /obj/item/clothing/head/cap/desert + slot = slot_head + +/datum/gear/suit/unathi/security_jacket + display_name = "(Unathi) security jacket" + path = /obj/item/clothing/suit/storage/security + slot = slot_wear_suit + +/datum/gear/suit/unathi/footwraps + display_name = "(Unathi) big footwraps" + path = /obj/item/clothing/shoes/loadout_unathi + slot = slot_shoes + flags = GEAR_HAS_COLOR_SELECTION + +/datum/gear/suit/unathi/sandals + display_name = "(Unathi) unathi sandals" + path = /obj/item/clothing/shoes/loadout_unathi/sandals + slot = slot_shoes + flags = GEAR_HAS_COLOR_SELECTION diff --git a/mods/loadout_items/code/lists/tactical.dm b/mods/loadout_items/code/lists/tactical.dm new file mode 100644 index 0000000000000..5a8067208e581 --- /dev/null +++ b/mods/loadout_items/code/lists/tactical.dm @@ -0,0 +1 @@ +// SIERRA TODO: Move here stuff from Infinity Pack diff --git a/mods/loadout_items/code/lists/uniforms.dm b/mods/loadout_items/code/lists/uniforms.dm new file mode 100644 index 0000000000000..f0afa4e622db3 --- /dev/null +++ b/mods/loadout_items/code/lists/uniforms.dm @@ -0,0 +1,175 @@ +/datum/gear/uniform/pmc //Some of that is duplicate of standart Torch uniforms selection. But who cares. + display_name = "PMC uniform selection" + allowed_roles = list(/datum/job/detective, /datum/job/officer, /datum/job/hos) + path = /obj/item/clothing/under + +/datum/gear/uniform/pmc/New() + ..() + var/pmc = list() + pmc["SAARE utility uniform"]= /obj/item/clothing/under/saare + pmc["SAARE combat uniform"]= /obj/item/clothing/under/rank/security/saarecombat + pmc["PCRC utility uniform"] = /obj/item/clothing/under/pcrc + pmc["PCRC formal uniform"] = /obj/item/clothing/under/pcrcsuit + pmc["SCP utility uniform"] = /obj/item/clothing/under/scp_uniform + pmc["ZPCI utility uniform"] = /obj/item/clothing/under/zpci_uniform + gear_tweaks += new/datum/gear_tweak/path(pmc) + +/datum/gear/tactical/colorable_camo + display_name = "camo uniform - colorable" + path = /obj/item/clothing/under/gray_camo + slot = slot_w_uniform + flags = GEAR_HAS_COLOR_SELECTION + +/datum/gear/uniform/sierra_scg + display_name = "SCG uniform selection" + allowed_branches = list(/datum/mil_branch/contractor) + required_factions = list(FACTION_EXPEDITIONARY, FACTION_CORPORATE) + path = /obj/item/clothing/under + +/datum/gear/uniform/sierra_scg/New() + ..() + var/scg = list() + scg += /obj/item/clothing/under/scg_expeditonary + scg += /obj/item/clothing/under/scg_expeditonary/officer + gear_tweaks += new/datum/gear_tweak/path/specified_types_list(scg) + +/datum/gear/uniform/avalon + display_name = "avalon outfit selection" + path = /obj/item/clothing/under/avalon + +/datum/gear/uniform/avalon/New() + ..() + var/avalon = list() + avalon["avalon skirt"] = /obj/item/clothing/under/avalon + avalon["avalon noble suit"] = /obj/item/clothing/under/avalon/noble + gear_tweaks += new/datum/gear_tweak/path(avalon) + +/datum/gear/uniform/sport + display_name = "sportive outfit selection" + path = /obj/item/clothing/under/sport + +/datum/gear/uniform/sport/New() + ..() + var/sport = list() + sport["faln trousers"] = /obj/item/clothing/under/sport + sport["olympic clothes"] = /obj/item/clothing/under/sport/olympic + gear_tweaks += new/datum/gear_tweak/path(sport) + +/datum/gear/uniform/maid + display_name = "maid dress" + path = /obj/item/clothing/under/maid + +/datum/gear/uniform/mafia + display_name = "mafia outfit selection" + path = /obj/item/clothing/under/mafia + +/datum/gear/uniform/mafia/New() + ..() + var/mafia = list() + mafia["mafia outfit"] = /obj/item/clothing/under/mafia + mafia["mafia vest"] = /obj/item/clothing/under/mafia/vest + mafia["white mafia outfit"] = /obj/item/clothing/under/mafia/white + gear_tweaks += new/datum/gear_tweak/path(mafia) + +/datum/gear/uniform/blackservice + display_name = "service uniform selection" + path = /obj/item/clothing/under/service + +/datum/gear/uniform/blackservice/New() + ..() + var/service = list() + service["dark service uniform"] = /obj/item/clothing/under/service + service["brown service uniform"] = /obj/item/clothing/under/service/brown + service["fleet service uniform"] = /obj/item/clothing/under/service/milsim + service["white service uniform"] = /obj/item/clothing/under/service/white + service["white female service uniform"] = /obj/item/clothing/under/service/female + gear_tweaks += new/datum/gear_tweak/path(service) + +/datum/gear/uniform/cuttop + display_name = "cuttop uniform selection (female)" + path = /obj/item/clothing/under/cuttop + +/datum/gear/uniform/cuttop/New() + ..() + var/cuttop = list() + cuttop["cuttop uniform"] = /obj/item/clothing/under/cuttop + cuttop["red cuttop uniform"] = /obj/item/clothing/under/cuttop/red + gear_tweaks += new/datum/gear_tweak/path(cuttop) + +/datum/gear/uniform/checkered + display_name = "checkered shirt selection" + path = /obj/item/clothing/under/checkered + +/datum/gear/uniform/checkered/New() + ..() + var/checkered = list() + checkered["pinstripe"] = /obj/item/clothing/under/checkered + checkered["red checkered shirt"] = /obj/item/clothing/under/checkered/red + gear_tweaks += new/datum/gear_tweak/path(checkered) + +/datum/gear/uniform/gotsis + display_name = "gotsis dress selection" + path = /obj/item/clothing/under/dress + +/datum/gear/uniform/gotsis/New() + ..() + var/gdress = list() + gdress["red gotsis dress"] = /obj/item/clothing/under/dress/gotsis_red + gdress["orange gotsis dress"] = /obj/item/clothing/under/dress/gotsis_orange + gear_tweaks += new/datum/gear_tweak/path(gdress) + +/datum/gear/uniform/victdress + display_name = "victorian dress selection" + path = /obj/item/clothing/under/dress/victorian + +/datum/gear/uniform/victdress/New() + ..() + var/dress = list() + dress["black victorian dress"] = /obj/item/clothing/under/dress/victorian + dress["red victorian dresst"] = /obj/item/clothing/under/dress/victorian/red + gear_tweaks += new/datum/gear_tweak/path(dress) + +/datum/gear/uniform/victsuit + display_name = "victorian suit selection" + path = /obj/item/clothing/under/formal/victorian + +/datum/gear/uniform/victsuit/New() + ..() + var/victsuit = list() + victsuit["victorian suit"] = /obj/item/clothing/under/formal/victorian + victsuit["red and black victorian suit"] = /obj/item/clothing/under/formal/victorian/black_red + victsuit["red victorian suit"] = /obj/item/clothing/under/formal/victorian/red + victsuit["dark victorian suit"] = /obj/item/clothing/under/formal/victorian/twilight + gear_tweaks += new/datum/gear_tweak/path(victsuit) + +/datum/gear/uniform/formal + display_name = "formal uniform selection" + path = /obj/item/clothing/under/formal + +/datum/gear/uniform/formal/New() + ..() + var/formal = list() + formal["white black"] = /obj/item/clothing/under/formal + formal["formal vest"] = /obj/item/clothing/under/formal/vest + formal["classic suit"] = /obj/item/clothing/under/formal/classic_suit + formal["black and white with style"] = /obj/item/clothing/under/formal/chain_with_shirt + formal["aristo uniform"] = /obj/item/clothing/under/formal/aristo + formal["callum vest"] = /obj/item/clothing/under/formal/callum + formal["charcoal vest"] = /obj/item/clothing/under/formal/hm_suit + formal["red 'n black suit"] = /obj/item/clothing/under/formal/red_n_black + formal["rubywhite uniform"] = /obj/item/clothing/under/formal/rubywhite + gear_tweaks += new/datum/gear_tweak/path(formal) + +/datum/gear/uniform/informal + display_name = "informal uniform selection" + path = /obj/item/clothing/under/informal + +/datum/gear/uniform/informal/New() + ..() + var/informal = list() + informal["harper uniform"] = /obj/item/clothing/under/informal + informal["vice uniform"] = /obj/item/clothing/under/informal/vice + informal["lify suit"] = /obj/item/clothing/under/informal/lify + informal["denim vest"] = /obj/item/clothing/under/informal/denimvest + informal["rhumba outfit"] = /obj/item/clothing/under/informal/cuban_suit + gear_tweaks += new/datum/gear_tweak/path(informal) diff --git a/mods/loadout_items/code/shoes.dm b/mods/loadout_items/code/shoes.dm new file mode 100644 index 0000000000000..8aa45c31c55ba --- /dev/null +++ b/mods/loadout_items/code/shoes.dm @@ -0,0 +1,19 @@ +/obj/item/clothing/shoes/loadout_unathi + name = "big footwraps" + desc = "A large roll of treated canvas used to protect paws." + icon = 'mods/loadout_items/icons/obj_feet.dmi' + item_icons = list(slot_shoes_str = 'mods/loadout_items/icons/onmob_feet.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'mods/loadout_items/icons/onmob_feet.dmi' + ) + icon_state = "unathi_footwraps" + item_state = "unathi_footwraps" + force = 0 + w_class = ITEM_SIZE_SMALL + species_restricted = list(SPECIES_UNATHI) + +/obj/item/clothing/shoes/loadout_unathi/sandals + name = "unathi sandals" + desc = "A pair of unathi sandals built exclusively for their paws." + icon_state = "unathi_sandals" + item_state = "unathi_sandals" diff --git a/mods/loadout_items/code/suits.dm b/mods/loadout_items/code/suits.dm new file mode 100644 index 0000000000000..efb9e798c9772 --- /dev/null +++ b/mods/loadout_items/code/suits.dm @@ -0,0 +1,204 @@ +// Fancy Jackets (referenses to films, games, etc) + +/obj/item/clothing/suit/storage/drive_jacket + name = "drive jacket" + desc = "Stylish jacket for a real hero. Just like me." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "drive_jacket" + item_state = "drive_jacket" + +/obj/item/clothing/suit/storage/toggle/the_jacket + name = "the jacket" + desc = "Old fashioned jacket. For lonely ride across southern city. Or for working on hotline may be?" + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "the_jacket" + +/obj/item/clothing/suit/storage/leon_jacket + name = "patterned leather jacket" + desc = "A black leather jacket wit some bizarre patterns." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "leon_jacket" + item_state = "leon_jacket" + +/obj/item/clothing/suit/storage/toggle/longjacket + name = "long jacket" + desc = "A long gray jacket" + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "longjacket_o" + +/obj/item/clothing/suit/storage/tgbomber + name = "modern bomber jacket" + desc = "A leather bomber jacket." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "bomberjacket" + body_parts_covered = UPPER_TORSO|ARMS + cold_protection = UPPER_TORSO|ARMS + min_cold_protection_temperature = T0C - 20 + +/obj/item/clothing/suit/storage/brand_jacket + name = "blue brand jacket" + desc = "What a fiery coloration." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "brand_jacket" + item_state = "brand_jacket" + +/obj/item/clothing/suit/storage/brand_orange_jacket + name = "orange brand jacket" + desc = "What a fiery coloration." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "brand_orange_jacket" + item_state = "brand_orange_jacket" + +/obj/item/clothing/suit/storage/brand_rjacket + name = "red brand jacket" + desc = "What a fiery coloration." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "brand_rjacket" + item_state = "brand_rjacket" + +/obj/item/clothing/suit/storage/hooded/faln_jacket + name = "faln jacket" + desc = "A very special piece of sports apparel, this jacket is warm, completely water and wind proof, and provides the air circulation through the membrane in its inner shell." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "papaleroy_faln_jacket" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + action_button_name = "Toggle Hood" + hoodtype = /obj/item/clothing/head/faln_jacket_hood + +/obj/item/clothing/head/faln_jacket_hood + name = "faln jacket hood" + desc = "A hood attached to a faln jacket hood." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "papaleroy_faln_jacket_hood" + body_parts_covered = HEAD + flags_inv = HIDEEARS | BLOCKHAIR + +//Pullower + +/obj/item/clothing/suit/storage/old_pullover + name = "old pullover" + desc = "old style pullover" + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "pullover" + item_state = "pullover" + +// Coats + +/obj/item/clothing/suit/storage/long_coat + name = "long coat" + desc = "Just a blank fabric black longcoat. It's surprisingly light." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "long_coat" + item_state = "long_coat" + +/obj/item/clothing/suit/storage/gentlecoat + name = "gentlecoat" + desc = "A tweed tailcoat purposed for some wannabe gentleman." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "gentlecoat" + item_state = "gentlecoat" + +/obj/item/clothing/suit/storage/tailcoat + name = "tailcoat" + desc = "A very delicate tailcoat, it imbues its wearer with vibe of snobbery and excessive self-importance." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "papaleroy_tailcoat" + item_state = "papaleroy_tailcoat" + +/obj/item/clothing/suit/storage/jensencoat + name = "short trenchcoat" + desc = "You may've never asked for this." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "jensencoat" + item_state = "jensencoat" + +// Kimonio + +/obj/item/clothing/suit/storage/kimono + name = "kimono" + desc = "Traditional Japanese garb, purposed for wearing by women." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "kimono" + item_state = "kimono" + body_parts_covered = UPPER_TORSO + +/obj/item/clothing/suit/storage/kimono/blue + name = "blue kimono" + desc = "Traditional Japanese garb, purposed for wearing by women." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "blue_kimono" + item_state = "blue_kimono" + +/obj/item/clothing/suit/storage/kimono/red_short + name = "red short kimono" + desc = "Traditional Japanese garb, purposed for wearing by women. This one is shortened for some extra style points." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "red_short_kimono" + item_state = "red_short_kimono" + +/obj/item/clothing/suit/storage/kimono/black + name = "black kimono" + desc = "Traditional Japanese garb, purposed for wearing by women." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "black_kimono" + item_state = "black_kimono" + +// First responder jacket + +/obj/item/clothing/suit/storage/toggle/fr_jacket/highvis + name = "first responder jacket" + icon = 'mods/loadout_items/icons/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'mods/loadout_items/icons/onmob_suit.dmi') + +/obj/item/clothing/suit/storage/toggle/fr_jacket/highvis/New() + . = ..() + sprite_sheets[SPECIES_UNATHI] = 'mods/loadout_items/icons/unathi/onmob_suit_unathi.dmi' + +// Unathi garments + +/obj/item/clothing/suit/storage/security + name = "Big Security Jacket" + desc = "A pretty big jacket with deep pockets, favored by unathi mercenaries. It's too big to fit anyone, but unathi." + icon = 'mods/loadout_items/icons/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'mods/loadout_items/icons/onmob_suit.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'mods/loadout_items/icons/onmob_suit.dmi' + ) + icon_state = "unathi_secjacket" + item_state = "unsecjacket" + + species_restricted = list(SPECIES_UNATHI) + w_class = ITEM_SIZE_NORMAL + allowed = list( + /obj/item/gun, + /obj/item/ammo_magazine, + /obj/item/ammo_casing, + /obj/item/melee/baton, + /obj/item/handcuffs, + /obj/item/tank/oxygen_emergency, + /obj/item/tank/oxygen_emergency_extended, + /obj/item/tank/nitrogen_emergency + ) + siemens_coefficient = 0.9 + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + + diff --git a/mods/loadout_items/code/uniforms.dm b/mods/loadout_items/code/uniforms.dm new file mode 100644 index 0000000000000..983872a52bbb3 --- /dev/null +++ b/mods/loadout_items/code/uniforms.dm @@ -0,0 +1,472 @@ +/obj/item/clothing/under/scp_uniform + name = "SCP guard uniform" + desc = "It's dark grey uniform made of a slightly sturdier material than standard jumpsuits, to allow for good protection.\nThis uniform has SCP tags on shoulders, terran organization of NT asset protection." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "scp_uniform" + item_state = "scp_uniform" + worn_state = "scp_uniform" + armor = list(melee = 10, bullet = 5, laser = 5,energy = 0, bomb = 0, bio = 0, rad = 0) + siemens_coefficient = 0.9 + +/obj/item/clothing/under/zpci_uniform + name = "ZPCI uniform" + desc = "This is a standard model of the ZPCI uniform." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "zpci_uniform" + item_state = "zpci_uniform" + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) //it's security uniform's stats + siemens_coefficient = 0.9 + +/obj/item/clothing/under/rank/security/saarecombat + name = "\improper SAARE combat uniform" + desc = "Tight-fitting dark uniform with a bright-green SAARE patch on the shoulder. The perfect outfit in which to kick doors out and teeth in." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "saarecombat" + item_state = "saarecombat" + worn_state = "saarecombat" + gender_icons = 1 + +// SIERRA TO DO: Cleanup icons from unused loadout + +/obj/item/clothing/under/gray_camo + name = "camo uniform" + desc = "It's camo unifrom made of a slightly sturdier material than standard jumpsuits, to allow for good protection and military style." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "gray_camo" + item_state = "gray_camo" + worn_state = "gray_camo" + +// Retro + +/obj/item/clothing/under/retro/security + desc = "A retro corporate security jumpsuit. Although it provides same protection as modern jumpsuits do, wearing this almost feels like being wrapped in tarp." + name = "retro security officer's uniform" + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "retro_sec" + item_state = "retro_sec" + siemens_coefficient = 0.9 + armor = list( + melee = ARMOR_MELEE_SMALL + ) + +/obj/item/clothing/under/retro/medical + desc = "A biologically resistant retro medical uniform with high-vis reflective stripes." + name = "retro medical officer's uniform" + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "retro_med" + item_state = "retro_med" + permeability_coefficient = 0.50 + armor = list( + bio = ARMOR_BIO_MINOR + ) + +/obj/item/clothing/under/retro/engineering + desc = "A faded grimy engineering jumpsuit and overall combo. It craves for being soiled with oil, dust, and grit this damn instant." + name = "retro engineering uniform" + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "retro_eng" + item_state = "retro_eng" + armor = list( + rad = ARMOR_RAD_MINOR + ) + +/obj/item/clothing/under/retro/science + desc = "A faded polo and set of brown slacks with distinctive pink stripes. What a ridiculous tie." + name = "retro science officer's uniform" + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "retro_sci" + item_state = "retro_sci" + armor = list( + bio = ARMOR_BIO_MINOR + ) + +/obj/item/clothing/under/blueshift_uniform + desc = "Blue shirt with robust jeans from robust materials. Still standard issue equipment for long clam blue shifts." + name = "research division security uniform" + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "blueshift" + item_state = "blueshift" + +/obj/item/clothing/under/scg_expeditonary + name = "Expeditionary Corps uniform" + desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has silver trim." + icon = 'maps/torch/icons/obj/obj_under_solgov.dmi' + item_icons = list(slot_w_uniform_str = 'maps/torch/icons/mob/onmob_under_solgov.dmi') + icon_state = "blackutility_crew" + item_state = "bl_suit" + worn_state = "blackutility_crew" + sprite_sheets = list( + SPECIES_UNATHI = 'maps/torch/icons/mob/unathi/onmob_under_solgov_unathi.dmi' + ) + siemens_coefficient = 0.8 + gender_icons = 1 + +/obj/item/clothing/under/scg_expeditonary/officer + name = "Expeditionary Corps officer's uniform" + desc = "The utility uniform of the SCG Expeditionary Corps, made from biohazard resistant material. This one has gold trim." + icon_state = "blackutility_com" + worn_state = "blackutility_com" + +// Unathi garnments + +/obj/item/clothing/under/medic/paramedic + name = "first responder uniform" + desc = "Light and bulky paramedic jumpsuit with bright markings. It's too big to fit anyone, but unathi." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'mods/loadout_items/icons/onmob_under.dmi' + ) + species_restricted = list(SPECIES_UNATHI) + icon_state = "unathi_paramedic" + item_state = "unathi_paramedic" + worn_state = "unathi_paramedic" + +/obj/item/clothing/under/security/desert + name = "desert jumpsuit" + desc = "A bulky and light jumpsuit designed for use in the desert. Unathi use it to withstand scorhing heat rays when \"Burning Mother\" at it's zenith, something that their scales cannot handle. It's too big to fit anyone, but unathi." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'mods/loadout_items/icons/onmob_under.dmi' + ) + species_restricted = list(SPECIES_UNATHI) + icon_state = "desertuniform" + item_state = "desertuniform" + worn_state = "desertuniform" + rolled_sleeves = SLEEVES_ROLLDOWN_STATUS_UNROLLED + +/obj/item/clothing/under/security/officer + name = "large security uniform" + desc = "An aftermarket modification of a regular desert jumpsuit, favored by unathi mercenaries. This one provides a bit more physical protection as if unathi ever needed that. It's too big to fit anyone, but unathi." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + sprite_sheets = list( + SPECIES_UNATHI = 'mods/loadout_items/icons/onmob_under.dmi' + ) + species_restricted = list(SPECIES_UNATHI) + icon_state = "unsecuniform" + item_state = "unsecuniform" + worn_state = "unsecuniform" + rolled_sleeves = SLEEVES_ROLLDOWN_STATUS_UNROLLED + +// Avalon + +/obj/item/clothing/under/avalon + name = "antiquated skirt" + desc = "Some really old fashioned skirt. Presumably a piece of Avalonian craftsmanship." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "antiquated_skirt" + item_state = "antiquated_skirt" + +/obj/item/clothing/under/avalon/noble + name = "artsy suit" + desc = "A piece of exceptional work, for Avalonian artisan. Nobles from up there tend to be fond of wearing this." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "noble" + item_state = "noble" + +// Expencive + +/* SIERRA TODO: Переспрайтить и сделать отдельный розовый жакет + шлем Для костюма Джекета то же самое +/obj/item/clothing/under/biker + name = "biker" + desc = "For when you craving for some dead meat." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "biker" + item_state = "biker" + +/obj/item/clothing/under/jacket + name = "old style jacket" + desc = "You know it damn well here." + desc = "For when you craving for some dead meat." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "jacket" + item_state = "jacket" + +*/ + +// Cuttop + +/obj/item/clothing/under/cuttop + name = "grey cuttop" + desc = "Loose fitting grey shirt with a broad neckline, accompained with some skinny jeans. Obviously worn by women." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "cuttop" + item_state = "cuttop" + worn_state = "cuttop" + +/obj/item/clothing/under/cuttop/red + name = "red cuttop" + desc = "Loose fitting red shirt with a broad neckline, accompained with some skinny jeans. Obviously worn by women." + icon_state = "cuttop_red" + item_state = "cuttop_red" + worn_state = "cuttop_red" + +// Checkered + +/obj/item/clothing/under/checkered + name = "pinstripe" + desc = "You ain't one to be afraid of 18 karat of bad luck." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "pinstripe" + item_state = "pinstripe" + +/obj/item/clothing/under/checkered/red + name = "red checkered shirt" + desc = "Incredibly comfy and warm flannel shirt in red checkered pattern." + icon_state = "stripped_shirt" + item_state = "stripped_shirt" + worn_state = "stripped_shirt" + +// Gotsis? + +/obj/item/clothing/under/dress/gotsis_red + name = "red gotsis dress" + desc = "Welcome to cabaret, lolly jolly~~" + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "gotsis_dress_1" + item_state = "gotsis_dress_1" + +/obj/item/clothing/under/dress/gotsis_orange + name = "orange gotsis dress" + desc = "Welcome to cabaret, lolly jolly~~" + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "gotsis_dress_2" + item_state = "gotsis_dress_2" + +// Spotrs + +/obj/item/clothing/under/sport + name = "faln trousers" + desc = "These athletic pants are truly a masterpiece as they perfectly fit for any type of figure." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "papaleroy_faln_trousers" + item_state = "papaleroy_faln_trousers" + +/obj/item/clothing/under/sport/olympic + name = "olympic clothes" + desc = "A set of tracksuit and trackpants in gaudy coloration. Incredibly comfy for wearing and exercising, but this contrast of colors make your eyes melt." + icon_state = "olympic" + item_state = "olympic" + +// Formal + +/obj/item/clothing/under/formal + name = "white black" + desc = "White top, dark bottom. Too default." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "white_black" + item_state = "white_black" + +/obj/item/clothing/under/formal/vest + name = "formal vest" + desc = "A standard set with a beige necktie." + icon_state = "formalvest" + item_state = "formalvest" + +/obj/item/clothing/under/formal/classic_suit + name = "classic suit" + desc = "Classic suit for really special occasions. It demands for regard, so treat it accordingly." + icon_state = "classic_suit" + item_state = "classic_suit" + +/obj/item/clothing/under/formal/chain_with_shirt + name = "black and white with style" + desc = "Some weird combination of starched shirt and studded jeans with a chain hanging off the belt." + icon_state = "chain_with_shirt" + item_state = "chain_with_shirt" + worn_state = "chain_with_shirt" + +/obj/item/clothing/under/formal/aristo + name = "aristo uniform" + desc = "Delicately sewn, this suit is magnificently fine and very expensive. Not for just any bourgeois." + icon_state = "papaleroy_aristo_suit" + item_state = "papaleroy_aristo_suit" + +/obj/item/clothing/under/formal/callum + name = "callum vest" + desc = "A quite sleek vest." + icon_state = "callum" + item_state = "callum" + +/obj/item/clothing/under/formal/hm_suit + name = "charcoal vest" + desc = "A woven charcoal suit and an azure necktie." + icon_state = "hm_suit" + item_state = "hm_suit" + +/obj/item/clothing/under/formal/red_n_black + name = "red 'n black suit" + desc = "A set of black slacks and red shirt." + icon_state = "detective" + item_state = "detective" + worn_state = "detective" + +/obj/item/clothing/under/formal/rubywhite + name = "rubywhite uniform" + desc = "Scarlet shirt accompained with white slacks held with suspenders." + icon_state = "papaleroy_rubywhite" + item_state = "papaleroy_rubywhite" + worn_state = "papaleroy_rubywhite" + gender_icons = 1 + +// Informal + +/obj/item/clothing/under/informal + name = "harper uniform" + desc = "A maggy tank top and denim cargo pants with some knee protection sewn onto them. Seems like a perfect outfit for some garage dweller." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "harper_uniform" + item_state = "harper_uniform" + +/obj/item/clothing/under/informal/vice + name = "vice uniform" + desc = "Casual set of black suit and red t-shirt." + icon_state = "vice2" + item_state = "vice2" + +/obj/item/clothing/under/informal/lify + name = "lify" + desc = "Here's some childish style, I dunno. Like who the hell would wear tank top with buttons?." + icon_state = "lify" + item_state = "lify" + +/obj/item/clothing/under/informal/denimvest + name = "denim vest" + desc = "Slightly bleached out denim vest with rebellic emblems drawn on its back." + icon_state = "denimvest" + item_state = "denimvest" + +/obj/item/clothing/under/informal/cuban_suit + name = "rhumba outfit" + desc = "A satin shirt and high-waisted pants, worn by dancers in the Rhumba style. It smells oddly like... sulfur?" + icon_state = "cuban_suit" + item_state = "cuban_suit" + +// Mafia + +/obj/item/clothing/under/mafia + name = "mafia outfit" + desc = "The business of the mafia is business." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "mafia_suit" + item_state = "mafia_suit" + +/obj/item/clothing/under/mafia/vest + name = "mafia vest" + desc = "Extreme problems often require extreme solutions." + icon_state = "mafia_vest" + item_state = "mafia_vest" + +/obj/item/clothing/under/mafia/white + name = "white mafia outfit" + desc = "The best defense against the treacherous is treachery." + icon_state = "mafia_white" + item_state = "mafia_white" + +// Cursed + +/obj/item/clothing/under/maid + name = "maid dress" + desc = "Cliche product of Japan." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "meido" + item_state = "meido" + body_parts_covered = UPPER_TORSO|LOWER_TORSO + +// Service uniforms + +/obj/item/clothing/under/service + name = "dark service uniform" + desc = "A set of service clothes in military style. Largely available in many of surplus stores." + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "blackservice" + item_state = "blackservice" + +/obj/item/clothing/under/service/brown + name = "brown service uniform" + desc = "A set of service clothes in military style. Largely available in many of surplus stores." + icon_state = "blackserviceof" + item_state = "blackserviceof" + +/obj/item/clothing/under/service/white + name = "white service uniform" + desc = "A set of service clothes in military style. This one is purposed for special occasions." + icon_state = "whiteservice" + item_state = "whiteservice" + +/obj/item/clothing/under/service/female + name = "white female service uniform" + desc = "A set of service clothes in military style. This one is purposed for special occasions." + icon_state = "whiteservicefem" + item_state = "whiteservicefem" + +/obj/item/clothing/under/service/milsim + name = "milsim uniform" + desc = "Set of milsim navy fatigues which is very common in many of surplus stores." + icon_state = "papaleroy_milsim" + item_state = "papaleroy_milsim" + +// Victorian Dresses. We're still a research vessel... + +/obj/item/clothing/under/dress/victorian + name = "black victorian dress" + desc = "A victorian style dress, fancy!" + icon = 'mods/loadout_items/icons/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/loadout_items/icons/onmob_under.dmi') + icon_state = "victorian_dress" + item_state = "victorian_dress" + body_parts_covered = UPPER_TORSO|LOWER_TORSO + +/obj/item/clothing/under/dress/victorian/red + name = "red victorian dress" + desc = "A victorian style dress, fancy!" + icon_state = "victorian_reddress" + item_state = "victorian_reddress" + +// Victorian Suits. Vampire fangs not included + +/obj/item/clothing/under/formal/victorian + name = "victorian suit" + desc = "A victorian style suit, fancy!" + icon_state = "victorian_black" + item_state = "victorian_black" + +/obj/item/clothing/under/formal/victorian/black_red + name = "red and black victorian suit" + icon_state = "victorian_redblack" + item_state = "victorian_redblack" + +/obj/item/clothing/under/formal/victorian/red + name = "red victorian suit" + icon_state = "victorian_redvest" + item_state = "victorian_redvest" + +/obj/item/clothing/under/formal/victorian/twilight + name = "dark victorian suit" + icon_state = "victorian_twilight" + item_state = "victorian_twilight" diff --git a/mods/loadout_items/icons/lighters.dmi b/mods/loadout_items/icons/lighters.dmi new file mode 100644 index 0000000000000..cc4a9b3c22350 Binary files /dev/null and b/mods/loadout_items/icons/lighters.dmi differ diff --git a/mods/loadout_items/icons/obj_accessory.dmi b/mods/loadout_items/icons/obj_accessory.dmi new file mode 100644 index 0000000000000..28242c3ae293c Binary files /dev/null and b/mods/loadout_items/icons/obj_accessory.dmi differ diff --git a/mods/loadout_items/icons/obj_feet.dmi b/mods/loadout_items/icons/obj_feet.dmi new file mode 100644 index 0000000000000..4f68ddbbd3050 Binary files /dev/null and b/mods/loadout_items/icons/obj_feet.dmi differ diff --git a/mods/loadout_items/icons/obj_head.dmi b/mods/loadout_items/icons/obj_head.dmi new file mode 100644 index 0000000000000..59a4a33835632 Binary files /dev/null and b/mods/loadout_items/icons/obj_head.dmi differ diff --git a/mods/loadout_items/icons/obj_suit.dmi b/mods/loadout_items/icons/obj_suit.dmi new file mode 100644 index 0000000000000..2fd811629416d Binary files /dev/null and b/mods/loadout_items/icons/obj_suit.dmi differ diff --git a/mods/loadout_items/icons/obj_under.dmi b/mods/loadout_items/icons/obj_under.dmi new file mode 100644 index 0000000000000..26ab979e08a7f Binary files /dev/null and b/mods/loadout_items/icons/obj_under.dmi differ diff --git a/mods/loadout_items/icons/onmob_accessory.dmi b/mods/loadout_items/icons/onmob_accessory.dmi new file mode 100644 index 0000000000000..5612804a4fedf Binary files /dev/null and b/mods/loadout_items/icons/onmob_accessory.dmi differ diff --git a/mods/loadout_items/icons/onmob_feet.dmi b/mods/loadout_items/icons/onmob_feet.dmi new file mode 100644 index 0000000000000..015dfad6caae5 Binary files /dev/null and b/mods/loadout_items/icons/onmob_feet.dmi differ diff --git a/mods/loadout_items/icons/onmob_head.dmi b/mods/loadout_items/icons/onmob_head.dmi new file mode 100644 index 0000000000000..2c649ac83722e Binary files /dev/null and b/mods/loadout_items/icons/onmob_head.dmi differ diff --git a/mods/loadout_items/icons/onmob_suit.dmi b/mods/loadout_items/icons/onmob_suit.dmi new file mode 100644 index 0000000000000..70102f5f203d3 Binary files /dev/null and b/mods/loadout_items/icons/onmob_suit.dmi differ diff --git a/mods/loadout_items/icons/onmob_under.dmi b/mods/loadout_items/icons/onmob_under.dmi new file mode 100644 index 0000000000000..f6b7123a59a3c Binary files /dev/null and b/mods/loadout_items/icons/onmob_under.dmi differ diff --git a/mods/loadout_items/icons/towels.dmi b/mods/loadout_items/icons/towels.dmi new file mode 100644 index 0000000000000..e5f83851efd68 Binary files /dev/null and b/mods/loadout_items/icons/towels.dmi differ diff --git a/mods/loadout_items/icons/unathi/onmob_suit_unathi.dmi b/mods/loadout_items/icons/unathi/onmob_suit_unathi.dmi new file mode 100644 index 0000000000000..5391c4dbb5532 Binary files /dev/null and b/mods/loadout_items/icons/unathi/onmob_suit_unathi.dmi differ diff --git a/mods/machinery/README.md b/mods/machinery/README.md new file mode 100644 index 0000000000000..1f135bf042564 --- /dev/null +++ b/mods/machinery/README.md @@ -0,0 +1,87 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/797 +- https://github.com/SierraBay/SierraBay12/pull/1847 + + + +## Машинерия + +ID мода: MACHINERY + + +### Описание мода + +Машина, что генерирует гравитацию на главном корабле карты. Добавляет ему провода и более знакомое игрокам Infinity Sierra поведение. + + +### Изменения *кор кода* + +- Отсутствуют + + +### Оверрайды + +- `mods/_master_files/code/modules/events/gravity.dm`: + - `/datum/event/gravity/setup()` + - `/datum/event/gravity/start()` +- `mods/_master_files/code/modules/power/gravitygenerator.dm`: + - `/obj/machinery/gravity_generator/use_power` + - `/obj/machinery/gravity_generator/unacidable` + - `/obj/machinery/gravity_generator/light_color` + - `/obj/machinery/gravity_generator/ex_act()` + - `/obj/machinery/gravity_generator/emp_act()` + - `/obj/machinery/gravity_generator/bullet_act()` + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +Сумасандаран Самалан Бабан + diff --git a/mods/machinery/_machinery.dm b/mods/machinery/_machinery.dm new file mode 100644 index 0000000000000..0d5409fd347ab --- /dev/null +++ b/mods/machinery/_machinery.dm @@ -0,0 +1,5 @@ + +/singleton/modpack/machinery + name = "Машинерия" + desc = "Модпак, который добавляет различную полезную и придающую глубины геймплею машинерию." + author = "Сумасандаран Самалан Бабан, LordNest" diff --git a/mods/machinery/_machinery.dme b/mods/machinery/_machinery.dme new file mode 100644 index 0000000000000..2784799ff176f --- /dev/null +++ b/mods/machinery/_machinery.dme @@ -0,0 +1,11 @@ +#ifndef MODPACK_MACHINERY +#define MODPACK_MACHINERY + +#include "_machinery.dm" + +#include "code/gravity_generator/base.dm" +#include "code/gravity_generator/main.dm" +#include "code/gravity_generator/wires.dm" +#include "code/sealing_generator.dm" + +#endif diff --git a/mods/machinery/code/gravity_generator/base.dm b/mods/machinery/code/gravity_generator/base.dm new file mode 100644 index 0000000000000..5f1e1a25efdd5 --- /dev/null +++ b/mods/machinery/code/gravity_generator/base.dm @@ -0,0 +1,549 @@ +/obj/machinery/gravity_generator + icon = 'mods/machinery/icons/gravity_generator.dmi' + icon_state = "0_0" + + var/sprite_number = 0 + var/broken_state = 0 + +/obj/machinery/gravity_generator/on_update_icon() + icon_state = "[broken_state]_[sprite_number]" + +/obj/machinery/gravity_generator/proc/show_broken_info() + return + +/obj/machinery/gravity_generator/proc/take_damage(amount) + return + + +#define POWER_IDLE 0 +#define POWER_UP 1 +#define POWER_DOWN 2 + +#define GRAV_NEEDS_PLASTEEL 1 +#define GRAV_NEEDS_WELDING 2 +#define GRAV_NEEDS_WRENCH 3 +#define GRAV_NEEDS_SCREWDRIVER 4 + +/obj/machinery/gravity_generator/main + name = "gravitational generator panel" + icon_state = "0_8" + idle_power_usage = 0 + active_power_usage = 100000 + power_channel = ENVIRON + sprite_number = 8 + use_power = POWER_USE_ACTIVE + + var/enabled = TRUE // for switching gravity status in areas + var/breaker = TRUE // if true - charges the GG if it has power + var/charging_state = POWER_IDLE // check process() + var/charge_count = 100 // % of current charge + var/health = 1000 + + var/list/parts = list() + var/list/lights = list() + var/list/connected_areas = list() + var/obj/machinery/gravity_generator/part/middle = null + + // Wires + var/announcer = TRUE // if true - notifies about the switching of the state of the generator to the engineering channel + var/power_supply = TRUE // if false - will lose power after proc/update_power() + var/can_toggle_breaker = TRUE + var/emergency_shutoff_button = FALSE // if true - shows an additional option with emergency generator shutdown + +/obj/machinery/gravity_generator/main/Initialize() + . = ..() + setup_parts() + update_icon() + add_areas() + wires = new/datum/wires/gravity_generator(src) + +/obj/machinery/gravity_generator/main/Destroy() + QDEL_NULL(wires) + for(var/obj/machinery/gravity_generator/part/P in parts) + P.main_part = null + parts -= P + if(!QDELETED(P)) + qdel(P) + middle = null + lights = null + connected_areas = null + update_connectected_areas_gravity() + return ..() + +/obj/machinery/gravity_generator/main/examine(mob/user) + . = ..() + if(panel_open) + . += SPAN_NOTICE("The maintenance hatch is open.") + . += show_broken_info(user) + +/obj/machinery/gravity_generator/main/show_broken_info(mob/user) + . = list() + switch(broken_state) + if(GRAV_NEEDS_PLASTEEL) + . += SPAN_NOTICE("It requires ten plasteel to repair.") + if(GRAV_NEEDS_WELDING) + . += SPAN_NOTICE("It requires a welder to repair.") + if(GRAV_NEEDS_WRENCH) + . += SPAN_NOTICE("It requires a wrench to repair.") + if(GRAV_NEEDS_SCREWDRIVER) + . += SPAN_NOTICE("It requires a screwdriver to repair.") + +/obj/machinery/gravity_generator/main/ex_act(severity) + switch(severity) + if(1) + take_damage(rand(750, 1250)) + if(2) + take_damage(rand(350, 500)) + if(3) + take_damage(rand(50, 150)) + +/obj/machinery/gravity_generator/main/emp_act(severity) + if(!breaker || inoperable()) + return + + if(prob(80 / severity)) + set_state(FALSE) + + set_stat(MACHINE_STAT_EMPED, TRUE) + +/obj/machinery/gravity_generator/main/bullet_act(obj/item/projectile/P, def_zone) + switch(P.damage_type) + if(INJURY_TYPE_BRUISE) + take_damage(P.damage) + if(INJURY_TYPE_BURN) + take_damage(P.damage) + if(INJURY_TYPE_PIERCE) + take_damage(P.damage) + if(INJURY_TYPE_LASER) + take_damage(P.damage) + if(INJURY_TYPE_SHATTER) + take_damage(P.damage) + +/obj/machinery/gravity_generator/main/take_damage(amount) + var/new_health = max(0, health - amount) + update_health(new_health) + update_icon() + +/obj/machinery/gravity_generator/main/proc/set_broken_state(state) + broken_state = state + for(var/obj/machinery/gravity_generator/part/P in parts) + P.broken_state = state + +/obj/machinery/gravity_generator/main/proc/update_health(new_health) + if(new_health == health) + return + health = new_health + switch(health) + if(0) + charge_count = 0 + enabled = FALSE + visible_message(SPAN_WARNING("[src] breaks apart!")) + set_broken_state(GRAV_NEEDS_PLASTEEL) + set_broken(MACHINE_BROKEN_GENERIC, TRUE) + set_state(FALSE) + update_gravity_status() + update_power() + if(1 to 249) + set_broken_state(GRAV_NEEDS_WELDING) + if(250 to 499) + set_broken_state(GRAV_NEEDS_WRENCH) + if(500 to 749) + set_broken_state(GRAV_NEEDS_SCREWDRIVER) + +/obj/machinery/gravity_generator/main/proc/setup_parts() + var/turf/our_turf = get_turf(src) + // 9x9 block obtained from the bottom middle of the block + var/list/spawn_turfs = block(locate(our_turf.x - 1, our_turf.y + 2, our_turf.z), locate(our_turf.x + 1, our_turf.y, our_turf.z)) + var/count = 10 + for(var/turf/T in spawn_turfs) + count-- + if(T == our_turf) // Skip our turf. + continue + var/obj/machinery/gravity_generator/part/P = new(T) + if(count == 5) + middle = P + if(count <= 3) // Their sprite is the top part of the generator + P.density = FALSE + P.layer = MOB_LAYER + 0.1 + if(count in list(2, 5, 7, 9)) + lights += P + P.sprite_number = count + P.main_part = src + parts += P + +/obj/machinery/gravity_generator/main/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(middle, user, 5 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + panel_open = !panel_open + update_icon() + to_chat(user, SPAN_NOTICE("You [panel_open ? "open" : "close"] the maintenance hatch.")) + +// Fixing the gravity generator. +/obj/machinery/gravity_generator/main/screwdriver_act(mob/living/user, obj/item/tool) + if(broken_state != GRAV_NEEDS_SCREWDRIVER) + return + . = ITEM_INTERACT_SUCCESS + user.visible_message( + SPAN_NOTICE("[user] begins to attach the details in the desired order."), + SPAN_NOTICE("You begin to attach the details in the desired order.") + ) + if(!tool.use_as_tool(middle, user, 15 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || broken_state != GRAV_NEEDS_SCREWDRIVER) + return + health += max(initial(health), health + 250) + user.visible_message( + SPAN_NOTICE("[user] attached the details."), + SPAN_NOTICE("You have attached the details.") + ) + stat &= ~MACHINE_BROKEN_GENERIC + set_broken_state(0) + update_icon() + +/obj/machinery/gravity_generator/main/wrench_act(mob/living/user, obj/item/tool) + if(broken_state != GRAV_NEEDS_WRENCH) + return + . = ITEM_INTERACT_SUCCESS + user.visible_message( + SPAN_NOTICE("[user] screws the parts back."), + SPAN_NOTICE("You begin to screw the parts back.") + ) + if(!tool.use_as_tool(middle, user, 15 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || broken_state != GRAV_NEEDS_WRENCH) + return + health += 250 + user.visible_message( + SPAN_NOTICE("[user] screwed the parts back."), + SPAN_NOTICE("You screwed the parts back.") + ) + set_broken_state(GRAV_NEEDS_SCREWDRIVER) + update_icon() + +/obj/machinery/gravity_generator/main/welder_act(mob/living/user, obj/item/tool) + if(broken_state != GRAV_NEEDS_WELDING) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.tool_start_check(user, 1)) + return + USE_FEEDBACK_REPAIR_START(user) + if(!tool.use_as_tool(src, user, 15 SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || broken_state != GRAV_NEEDS_WELDING) + return + health += 250 + USE_FEEDBACK_REPAIR_FINISH(user) + set_broken_state(GRAV_NEEDS_WRENCH) + update_icon() + +/obj/machinery/gravity_generator/main/use_tool(obj/item/tool, mob/living/user, list/click_params) + if(broken_state == GRAV_NEEDS_PLASTEEL) + if(istype(tool, /obj/item/stack/material/plasteel) || broken_state != GRAV_NEEDS_PLASTEEL) + var/obj/item/stack/material/plasteel/PS = tool + if(PS.amount < 10) + to_chat(user, SPAN_WARNING("You need 10 sheets of plasteel.")) + return TRUE + + user.visible_message( + SPAN_NOTICE("[user] begins to add plasteel to the destroyed frame."), + SPAN_NOTICE("You begin to add plasteel to the destroyed frame.") + ) + playsound(loc, 'sound/machines/click.ogg', 75, 1) + + if(!do_after(user, 15 SECONDS, middle) || !user.use_sanity_check(src, tool) || PS.amount < 10) + return TRUE + + PS.use(10) + health += 250 + user.visible_message( + SPAN_NOTICE("[user] replaced the destroyed frame."), + SPAN_NOTICE("You replaced the destroyed frame.") + ) + playsound(loc, 'sound/machines/click.ogg', 75, 1) + set_broken_state(GRAV_NEEDS_WELDING) + update_icon() + return TRUE + return ..() + +/obj/machinery/gravity_generator/part/attack_ghost(mob/user) + ui_interact(user) + +/obj/machinery/gravity_generator/main/attack_ai(mob/user) + if(inoperable()) + return + + ui_interact(user) + +/obj/machinery/gravity_generator/main/attack_hand(mob/user) + if(reason_broken) + to_chat(user, SPAN_WARNING("[src] is broken!")) + return + + if(wires && panel_open) + wires.Interact(user) + return + + if(!is_powered()) + return + + ui_interact(user) + +/obj/machinery/gravity_generator/main/CanUseTopic(mob/user) + if(!power_supply) + return STATUS_CLOSE + if(GET_FLAGS(stat, MACHINE_STAT_EMPED)) + return STATUS_CLOSE + return ..() + +// Interaction +/obj/machinery/gravity_generator/main/ui_interact(mob/user, ui_key, datum/nanoui/ui, force_open, datum/nanoui/master_ui, datum/topic_state/state) + var/data = list() + + data["enabled"] = enabled + data["charging_state"] = charging_state + data["charger_count"] = charge_count + data["breaker"] = breaker + data["emergency_shutoff_button"] = emergency_shutoff_button + + ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "gravgen.tmpl", "Gravitational Generator Panel", 500, 300, state = state) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/gravity_generator/main/OnTopic(mob/user, href_list, datum/topic_state/state) + if(href_list["gentoggle"]) + if(!can_toggle_breaker || !power_supply || !is_powered()) + to_chat(user, SPAN_WARNING("You pressed a button, but it doesn’t seem to respond.")) + return + set_state(breaker ? FALSE : TRUE) + + else if(href_list["eshutoff"]) + if(!emergency_shutoff_button) + return + if(!charge_count) + to_chat(user, SPAN_WARNING("[middle] discharged!")) + return + + user.visible_message( + SPAN_WARNING("[user] starts to press a lot of buttons on [src]!"), + SPAN_NOTICE("You start to press many buttons on [src], as if you know what you are doing.") + ) + if(do_after(user, 15 SECONDS, src)) + emergency_shutoff() + +/obj/machinery/gravity_generator/main/proc/emergency_shutoff() + if(!charge_count) + return + + var/charge = charge_count + var/was_enabled = enabled + charge_count = 0 + toggle_stat(MACHINE_STAT_EMPED) + enabled = FALSE + breaker = FALSE + charging_state = POWER_IDLE + update_use_power(POWER_USE_IDLE) + visible_message(SPAN_DANGER("[src] makes a large whirring noise!")) + + for(var/i = 0, i <= 3, i++) + switch(i) + if(0) + set_light(8, 1,"#b30f00") + if(1) + set_light(8, 0.75,"#b30f00") + if(2) + set_light(8, 0.5,"#b30f00") + if(3) + set_light(8, 0.25,"#b30f00") + + playsound(loc, 'sound/effects/EMPulse.ogg', 100, 1) + sleep(25) + + toggle_stat(MACHINE_STAT_EMPED) + if(was_enabled) + update_gravity_status() + update_icon() + + if(announcer) + GLOB.global_announcer.autosay("Alert! Gravitational Generator has been discharged! Gravitation is disabled.", "Gravity Generator Alert System") + + SSradiation.radiate(src, 3 * charge) + playsound(loc, 'sound/effects/EMPulse.ogg', 100, 1) + empulse(loc, 7 * (charge * 0.01), 14 * (charge * 0.01)) + +/obj/machinery/gravity_generator/main/on_update_icon() + . = ..() + ClearOverlays() + for(var/obj/machinery/gravity_generator/part/P in lights) + P.ClearOverlays() + + var/console + if(power_supply && operable()) + if(charging_state == POWER_IDLE) + console = charge_count ? "console_charged" : "console_discharged" + else + console = "console_charging" + AddOverlays(console) + if(breaker) + for(var/obj/machinery/gravity_generator/part/P in lights) + P.AddOverlays("[P.sprite_number]_light") + + if(!panel_open) + if(power_supply && operable()) + AddOverlays("keyboard_on") + else + AddOverlays("keyboard_off") + + var/overlay_state + switch(charge_count) + if(0 to 20) + overlay_state = null + set_light(0) + if(21 to 40) + overlay_state = "startup" + set_light(4, 0.2, "#6496fa") + if(41 to 60) + overlay_state = "idle" + set_light(6, 0.5, "#7d9bff") + if(61 to 80) + overlay_state = "activating" + set_light(6, 0.8, "#7dc3ff") + if(81 to 100) + overlay_state = "activated" + set_light(8, 1, "#7de1e1") + + if(middle) + middle.ClearOverlays() + if(overlay_state) + middle.AddOverlays(overlay_state) + + for(var/obj/machinery/gravity_generator/part/P in parts) + P.update_icon() + +/obj/machinery/gravity_generator/main/power_change() + . = ..() + update_power() + +// Set the state of the gravity. +/obj/machinery/gravity_generator/main/proc/set_state(new_state) + breaker = new_state + update_power() + +// Set the charging state based on power/breaker/power_supply(wires) status. +/obj/machinery/gravity_generator/main/proc/update_power() + var/operable = breaker && power_supply && operable() + + update_use_power(operable ? POWER_USE_ACTIVE : POWER_USE_IDLE) + if(operable && charge_count < 100) + charging_state = POWER_UP + else if(!operable && charge_count > 0) + charging_state = POWER_DOWN + else + charging_state = POWER_IDLE + + update_icon() + investigate_log("is now [charging_state == POWER_UP ? "charging" : "discharging"].", "gravity") + +// Charge/Discharge and turn on/off gravity when you reach 0/100 percent. +// Also emit radiation and handle the overlays. +/obj/machinery/gravity_generator/main/Process() + if(reason_broken) + return + + if(charge_count > 0) + SSradiation.radiate(src, 30 * (charge_count * 0.01)) + + if(charging_state != POWER_IDLE) + update_icon() + if(prob(75)) + playsound(loc, 'sound/effects/EMPulse.ogg', 50, 1) + + var/last_charge_count = charge_count + switch(charging_state) + if(POWER_UP) + charge_count = min(100, charge_count + 2) + + if(POWER_DOWN) + charge_count = max(0, charge_count - 2) + if(announcer && charge_count <= 50 && charge_count % 5 == 0) + GLOB.global_announcer.autosay("Danger! Gravitational Generator discharges detected! Charge status at [charge_count]%", "Gravity Generator Alert System", "Engineering") + + if(last_charge_count <= 100 && charge_count == 100) + on_fully_charged() + + else if(last_charge_count > 0 && charge_count == 0) + on_discharge() + +/obj/machinery/gravity_generator/main/proc/on_discharge() + set_state(FALSE) + if(!enabled) + return + + enabled = FALSE + update_gravity_status() + playsound(loc, 'sound/effects/alert.ogg', 50, 1) + if(announcer) + GLOB.global_announcer.autosay("Alert! Gravitational Generator has been discharged! Gravitation is disabled.", "Gravity Generator Alert System") + +/obj/machinery/gravity_generator/main/proc/on_fully_charged() + set_state(TRUE) + if(enabled) + return + + enabled = TRUE + + update_gravity_status() + playsound(loc, 'sound/effects/alert.ogg', 50, 1) + if(announcer) + GLOB.global_announcer.autosay("Gravitational Generator has been fully charged. Gravitation is enabled!", "Gravity Generator Alert System") + +/obj/machinery/gravity_generator/main/proc/update_gravity_status() + shake_everyone() + update_connectected_areas_gravity() + +/obj/machinery/gravity_generator/main/proc/shake_everyone() + var/list/area_refs_set = get_area_refs_set(connected_areas) + for(var/mob/living/living_mob as anything in GLOB.living_players) + if(living_mob.stat) + continue + + if(!area_refs_set[ref(get_area(living_mob))]) + continue + + shake_camera(living_mob, 5, 1) + +/obj/machinery/gravity_generator/main/proc/update_connectected_areas_gravity() + for(var/area/area_to_update as anything in connected_areas) + area_to_update.gravitychange(enabled) + +/obj/machinery/gravity_generator/main/proc/add_areas() + connected_areas += get_filtered_areas(list(GLOBAL_PROC_REF(is_not_space_area), GLOBAL_PROC_REF(is_station_area))) + +#undef GRAV_NEEDS_SCREWDRIVER +#undef GRAV_NEEDS_WELDING +#undef GRAV_NEEDS_PLASTEEL +#undef GRAV_NEEDS_WRENCH + +#undef POWER_IDLE +#undef POWER_UP +#undef POWER_DOWN + + + +/obj/machinery/gravity_generator/part + var/obj/machinery/gravity_generator/main/main_part = null + +/obj/machinery/gravity_generator/part/Destroy() + if(!QDELETED(main_part)) + main_part.parts -= src + QDEL_NULL(main_part) + return ..() + +/obj/machinery/gravity_generator/part/examine(mob/user) + . = ..() + main_part.show_broken_info(user) + +/obj/machinery/gravity_generator/part/use_tool(obj/item/tool, mob/living/user, list/click_params) + if (main_part) + return main_part.use_tool(tool, user, click_params) + return ..() + +/obj/machinery/gravity_generator/part/bullet_act(obj/item/projectile/P) + return main_part.bullet_act(P) diff --git a/mods/machinery/code/gravity_generator/main.dm b/mods/machinery/code/gravity_generator/main.dm new file mode 100644 index 0000000000000..e05f67c0cea1f --- /dev/null +++ b/mods/machinery/code/gravity_generator/main.dm @@ -0,0 +1,12 @@ +GLOBAL_VAR(station_gravity_generator) +/obj/machinery/gravity_generator/main/station/Initialize(mapload, ...) + . = ..() + GLOB.station_gravity_generator = src + if(!mapload) + update_connectected_areas_gravity() + + +/obj/machinery/gravity_generator/main/station/Destroy() + if(GLOB.station_gravity_generator == src) + GLOB.station_gravity_generator = null + return ..() diff --git a/mods/machinery/code/gravity_generator/wires.dm b/mods/machinery/code/gravity_generator/wires.dm new file mode 100644 index 0000000000000..c73c1bdad8b72 --- /dev/null +++ b/mods/machinery/code/gravity_generator/wires.dm @@ -0,0 +1,56 @@ +/datum/wires/gravity_generator + random = 1 + holder_type = /obj/machinery/gravity_generator/main + wire_count = 4 + +var/global/const/GRAVITY_GENERATOR_WIRE_BREAKER = 1 +var/global/const/GRAVITY_GENERATOR_WIRE_EMERGENCY_BUTTON = 2 +var/global/const/GRAVITY_GENERATOR_WIRE_POWER = 4 +var/global/const/GRAVITY_GENERATOR_WIRE_ANNOUNCER = 8 + +/datum/wires/gravity_generator/CanUse(mob/living/L) + var/obj/machinery/gravity_generator/main/GG = holder + if(GG.panel_open) + return TRUE + return FALSE + +/datum/wires/gravity_generator/GetInteractWindow() + . = ..() + var/obj/machinery/gravity_generator/main/GG = holder + . += "
    The breaker is [GG.breaker ? "on" : "off"]." + . += "
    The energy protection system is [GG.emergency_shutoff_button ? "disabled" : "enabled"]." + . += "
    The power supply indicator is [GG.power_supply && !(GG.stat & MACHINE_STAT_NOPOWER) ? "green" : "red"]." + . += "
    The alert system is [GG.announcer ? "on" : "off"]." + +/datum/wires/gravity_generator/UpdateCut(index, mended) + var/obj/machinery/gravity_generator/main/GG = holder + + switch(index) + if(GRAVITY_GENERATOR_WIRE_BREAKER) + GG.can_toggle_breaker = !GG.can_toggle_breaker + + if(GRAVITY_GENERATOR_WIRE_EMERGENCY_BUTTON) + GG.emergency_shutoff_button = !GG.emergency_shutoff_button + + if(GRAVITY_GENERATOR_WIRE_POWER) + GG.power_supply = !GG.power_supply + GG.power_change() + GG.shock(usr, 100) + +/datum/wires/gravity_generator/UpdatePulsed(index) + var/obj/machinery/gravity_generator/main/GG = holder + if(IsIndexCut(index)) + return + + switch(index) + if(GRAVITY_GENERATOR_WIRE_BREAKER) + GG.set_state(GG.breaker ? FALSE : TRUE) + + if(GRAVITY_GENERATOR_WIRE_EMERGENCY_BUTTON) + GG.shock(usr, 100) + + if(GRAVITY_GENERATOR_WIRE_POWER) + GG.shock(usr, 100) + + if(GRAVITY_GENERATOR_WIRE_ANNOUNCER) + GG.announcer = !GG.announcer diff --git a/mods/machinery/code/sealing_generator.dm b/mods/machinery/code/sealing_generator.dm new file mode 100644 index 0000000000000..781fd7a59eba1 --- /dev/null +++ b/mods/machinery/code/sealing_generator.dm @@ -0,0 +1,278 @@ +/obj/machinery/sealgen + name = "sealing field generator" + desc = "An extremely energy-intensive force field generator that can block the movement of gases, allowing solid objects to pass through." + icon = 'mods/machinery/icons/sealing_generator.dmi' + icon_state = "sealgen" + + atom_flags = ATOM_FLAG_NO_TEMP_CHANGE | ATOM_FLAG_CLIMBABLE + + anchored = FALSE + density = TRUE + + active_power_usage = 40000 // Suffer + idle_power_usage = 50 + + var/obj/effect/seal_field/current_field + + var/fold_time = 7 SECONDS + + var/field_color = COLOR_YELLOW + var/field_density = FALSE //It can be used to block movement via wires, though you can dispel it with hand + + var/hatch_open = FALSE + wires = /datum/wires/sealgen + + req_access = list(access_engine_equip) + + var/locked = TRUE + +//General proc overrides + +/obj/machinery/sealgen/Initialize() + . = ..() + update_icon() + +/obj/machinery/sealgen/on_update_icon() + ClearOverlays() + if(current_field) + var/image/I = image(icon=icon,icon_state=initial(icon_state)+"-on",layer=LIGHTING_PLANE+1) + AddOverlays(I) + if(hatch_open) + AddOverlays("[icon_state]-hatch") + +/obj/machinery/sealgen/Process() + if(stat & MACHINE_STAT_NOPOWER) + off() + update_icon() + change_power_consumption(field_density ? initial(active_power_usage)*3 : initial(active_power_usage), use_power_mode = POWER_USE_ACTIVE) + update_use_power(current_field ? POWER_USE_ACTIVE : POWER_USE_IDLE) + if(current_field) + current_field.density = field_density + +/obj/machinery/sealgen/Destroy() + off() + . = ..() + +/obj/machinery/sealgen/emp_act() + ..() + off() + +//Machine-specific procs + +/obj/machinery/sealgen/proc/activate() + if(stat & MACHINE_STAT_NOPOWER) + visible_message("[src] flicks the lights and goes dark.") + return + if(!anchored) + visible_message("[src] awakes and shakes uncontrolable, then goes silent. Maybe anchoring bolts need more attention?") + return + current_field = new(get_step(src,dir)) + current_field.dir = dir + current_field.generator = src + colorize(field_color) + GLOB.moved_event.register(src, src, TYPE_PROC_REF(/obj/machinery/sealgen, off)) + + +/obj/machinery/sealgen/proc/off() + qdel(current_field) + current_field = null + GLOB.moved_event.unregister(src, src, TYPE_PROC_REF(/obj/machinery/sealgen, off)) + +/obj/machinery/sealgen/proc/colorize() + if(!current_field) return + current_field.color = field_color + current_field.set_light(1, 0.3, 5, l_color = field_color) //Glowy thing + +//Interaction + +/obj/machinery/sealgen/attack_hand(mob/user) + + if(locked && !allowed(user)) + to_chat(user, SPAN_WARNING("It's locked! You can't [current_field ? "shut it down" : "turn it on"].")) + return + + if(!current_field) + activate() + else + off() + + update_icon() + +/obj/machinery/sealgen/multitool_act(mob/living/user, obj/item/tool) + if(locked) + return + . = ITEM_INTERACT_SUCCESS + field_color = input(usr, "Choose field colour.", "Field color", initial(field_color)) as color|null + to_chat(usr, SPAN_NOTICE("You change [src] field color.")) + colorize() + +/obj/machinery/sealgen/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + hatch_open = !hatch_open + USE_FEEDBACK_NEW_PANEL_OPEN(user, hatch_open) + update_icon() + +/obj/machinery/sealgen/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!anchored && (!isturf(src.loc) || is_space_turf(src.loc))) + to_chat(user, SPAN_WARNING("[src] can't be anchored here.")) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + anchored = !anchored + to_chat(user, "You [anchored ? "wrench [src] to" : "unwrench [src] from"] [get_turf(src)]") + if(!anchored) + off() + +/obj/machinery/sealgen/wirecutter_act(mob/living/user, obj/item/tool) + if(hatch_open) + . = ITEM_INTERACT_SUCCESS + wires.Interact(user) + +/obj/machinery/sealgen/use_tool(obj/item/W, mob/living/user, list/click_params) + if(isid(W) && allowed(usr)) + locked = !locked + to_chat(user, "You [locked ? "lock" : "unlock"] [src].") + return + . = ..() + +//Actual field + +/obj/effect/seal_field + name = "atmospheric containment field" + desc = "An energy field, capable of blocking any gas as long as it's active." + icon = 'icons/obj/machines/shielding.dmi' + icon_state = "shield_normal" + + atmos_canpass = CANPASS_PROC + + anchored = TRUE + density = FALSE + opacity = FALSE + + var/dispel_delay = 10 SECONDS + var/obj/machinery/sealgen/generator + var/ded = FALSE + +/obj/effect/seal_field/attack_hand(mob/user) + ..() + if(density) + user.visible_message(SPAN_DANGER("[user] begins waving around [src]."),SPAN_WARNING("You begin to wave around [src], trying to dispel it.")) + if(do_after(user, dispel_delay, src)) + generator.off() + +/obj/effect/seal_field/c_airblock(turf/other) + return ded ? 0 : BLOCKED + +/obj/effect/seal_field/New() + ..() + update_nearby_tiles(need_rebuild=1) + +/obj/effect/seal_field/Destroy() + ded = TRUE + update_nearby_tiles() + . = ..() + +//Wires +#define SEALGEN_WIRE_LOCK 1 +#define SEALGEN_WIRE_DENSITY 2 +#define SEALGEN_WIRE_POWER 4 + +/datum/wires/sealgen + holder_type = /obj/machinery/sealgen + wire_count = 6 + window_y = 340 + descriptions = list( + new /datum/wire_description(SEALGEN_WIRE_LOCK, "This wire is connected to the ID scanning panel."), + new /datum/wire_description(SEALGEN_WIRE_DENSITY, "This wire is connected to field density setting.",SKILL_TRAINED), + new /datum/wire_description(SEALGEN_WIRE_POWER, "This wire seems to be carrying a heavy current.",SKILL_TRAINED) + ) + +/datum/wires/sealgen/UpdateCut(index, mended) + var/obj/machinery/sealgen/S = holder + switch(index) + if(SEALGEN_WIRE_LOCK) + S.locked = !mended + if(SEALGEN_WIRE_DENSITY) + S.field_density = !mended + if(SEALGEN_WIRE_POWER) + if(!S.current_field) return + S.off() + S.shock(usr, 100) + +#undef SEALGEN_WIRE_LOCK +#undef SEALGEN_WIRE_DENSITY +#undef SEALGEN_WIRE_POWER + +/datum/wires/sealgen/GetInteractWindow(mob/user) + var/obj/machinery/sealgen/S = holder + . += ..() + . += "
    \nLockdown light is [S.locked ? "on" : "off"].
    \nDensity setting is set to [S.field_density ? "maximum" : "normal"]." + +//Case and folding + +/obj/item/sealgen_case + name = "sealing field generator case" + desc = "Aether Atmospherics brand case. This case quite heavy and contains one sealing field inside. Also it have an ID lock." + icon = 'mods/machinery/icons/sealing_generator.dmi' + icon_state = "case" + item_state = "RPED" + + w_class = ITEM_SIZE_HUGE + + var/deploy_time = 10 SECONDS + var/slowdown_held = 2 // Yes, you can carry it. But this thing is cumbersome. + +/obj/item/sealgen_case/Initialize() + slowdown_per_slot[slot_l_hand] = slowdown_held + slowdown_per_slot[slot_r_hand] = slowdown_held + + . = ..() + + +/obj/item/sealgen_case/attack_self(mob/user) + . = ..() + to_chat(user,SPAN_NOTICE("You start deploying [src].")) + user.visible_message(SPAN_NOTICE("[user] starts deploying [src].")) + if(do_after(user, deploy_time, src)) + qdel(src) + var/obj/machinery/sealgen/G = new(get_turf(user)) + user.visible_message(SPAN_NOTICE("[user] deploys [G]."),SPAN_INFO("You deploy [G].")) + G.dir = user.dir + +/obj/machinery/sealgen/MouseDrop(over_object, src_location, over_location) + . = ..() + var/mob/user = usr + if(istype(user) && Adjacent(user)) + if(locked) + to_chat(user,SPAN_WARNING("You can't fold [src], it's locked!")) + return + if(anchored) + to_chat(user,SPAN_WARNING("You can't fold [src], it's anchor bolts doesn't fit.")) + return + if(over_object == user) + to_chat(user,SPAN_NOTICE("You start folding [src].")) + user.visible_message(SPAN_NOTICE("[user] starts folding [src].")) + if(do_after(user, fold_time, src)) + user.visible_message(SPAN_NOTICE("[user] folds [src]."),SPAN_INFO("You fold [src].")) + fold(user) + +/obj/machinery/sealgen/proc/fold(mob/user) + if(current_field) + off() + if(user) + var/obj/item/sealgen_case/case = new(get_turf(user)) + user.put_in_hands(case) + else + new/obj/item/sealgen_case(get_turf(src)) + qdel(src) + +// Cargo +/singleton/hierarchy/supply_pack/machinery/sealgen + name = "Machinery - SFG Crate" + containername = "sealing field generator crate" + containertype = /obj/structure/closet/crate + cost = 60 + contains = list(/obj/item/sealgen_case = 3) diff --git a/mods/machinery/icons/gravity_generator.dmi b/mods/machinery/icons/gravity_generator.dmi new file mode 100644 index 0000000000000..139ce602953e2 Binary files /dev/null and b/mods/machinery/icons/gravity_generator.dmi differ diff --git a/mods/machinery/icons/sealing_generator.dmi b/mods/machinery/icons/sealing_generator.dmi new file mode 100644 index 0000000000000..b640e2dbe18c2 Binary files /dev/null and b/mods/machinery/icons/sealing_generator.dmi differ diff --git a/mods/music_player/_music_player.dm b/mods/music_player/_music_player.dm new file mode 100644 index 0000000000000..cfec8c31a2307 --- /dev/null +++ b/mods/music_player/_music_player.dm @@ -0,0 +1,4 @@ +/singleton/modpack/music_player + name = "Music player" + desc = "Ваша музыка теперь всегда с собой." + author = "CuddleAndTea" diff --git a/mods/music_player/_music_player.dme b/mods/music_player/_music_player.dme new file mode 100644 index 0000000000000..2cdcb59f18488 --- /dev/null +++ b/mods/music_player/_music_player.dme @@ -0,0 +1,12 @@ +#ifndef MODPACK_MUSIC_PLAYER +#define MODPACK_MUSIC_PLAYER + +#include "_music_player.dm" + +#include "code/music_player.dm" +#include "code/music_tape.dm" +#include "code/music_writer.dm" +#include "code/subtypes_player.dm" +#include "code/subtypes_tape.dm" + +#endif diff --git a/mods/music_player/code/music_player.dm b/mods/music_player/code/music_player.dm new file mode 100644 index 0000000000000..383b665425a55 --- /dev/null +++ b/mods/music_player/code/music_player.dm @@ -0,0 +1,525 @@ +// This pack is transfered from infinity pack without redaction and in some day needs to be rewieved. As for example sounds transfered in sounds.dm +GLOBAL_LIST_EMPTY(music_players) + +#define PANEL_CLOSED 0 +#define PANEL_UNSCREWED 1 +#define PANEL_OPENED 2 + +#define PLAYER_STATE_OFF 0 +#define PLAYER_STATE_PLAY 1 +#define PLAYER_STATE_PAUSE 2 + +// First at all, /obj/item/music_player is just a player core which should do basic functions and interactions +// If this type will be spawned, it'll get instantly deleted by Initialization +// Because we can create subtypes, we should use only them for regular playthrought + +GLOBAL_LIST_INIT(heavystep_sound, list( +'packs/infinity/sound/effects/x1.ogg', +'packs/infinity/sound/effects/x2.ogg', +'packs/infinity/sound/effects/x3.ogg', +'packs/infinity/sound/effects/x4.ogg' +)) +GLOBAL_LIST_INIT(light_strike_sound, list( +'packs/infinity/sound/effects/hit_kick.ogg', +'packs/infinity/sound/effects/hit_punch.ogg' +)) +GLOBAL_LIST_INIT(gun_sound, list( +'packs/infinity/sound/weapons/gunshot.ogg', +'packs/infinity/sound/weapons/gunshot2.ogg', +'packs/infinity/sound/weapons/gunshot3.ogg', +'packs/infinity/sound/weapons/gunshot4.ogg' +)) +GLOBAL_LIST_INIT(human_clearing_throat, list( + FEMALE = "packs/infinity/sound/voice/clearing-throat-f.ogg", + MALE = "packs/infinity/sound/voice/clearing-throat-m.ogg" +)) +GLOBAL_LIST_INIT(machinery_exposed_sound, list( +'packs/infinity/sound/machines/Custom_screwdriveropen.ogg', +'packs/infinity/sound/machines/Custom_screwdriverclose.ogg' +)) +GLOBAL_LIST_INIT(rig_breath_sound, list( +'packs/infinity/sound/voice/gasmask1.ogg','packs/infinity/sound/voice/gasmask2.ogg', +'packs/infinity/sound/voice/gasmask3.ogg','packs/infinity/sound/voice/gasmask4.ogg', +'packs/infinity/sound/voice/gasmask5.ogg','packs/infinity/sound/voice/gasmask6.ogg', +'packs/infinity/sound/voice/gasmask7.ogg','packs/infinity/sound/voice/gasmask8.ogg', +'packs/infinity/sound/voice/gasmask9.ogg','packs/infinity/sound/voice/gasmask10.ogg' +)) +GLOBAL_LIST_INIT(console_interact_sound, list( +'packs/infinity/sound/machines/console/console_interact1.ogg', +'packs/infinity/sound/machines/console/console_interact2.ogg', +'packs/infinity/sound/machines/console/console_interact3.ogg', +'packs/infinity/sound/machines/console/console_interact4.ogg', +'packs/infinity/sound/machines/console/console_interact5.ogg', +'packs/infinity/sound/machines/console/console_interact6.ogg', +'packs/infinity/sound/machines/console/console_interact7.ogg' +)) +GLOBAL_LIST_INIT(radio_chatter_sound, list( +'packs/infinity/sound/effects/radio1.ogg', +'packs/infinity/sound/effects/radio2.ogg', +'packs/infinity/sound/effects/radio3.ogg', +'packs/infinity/sound/effects/radio4.ogg' +)) +GLOBAL_LIST_INIT(trauma_sound, list( +'packs/infinity/sound/effects/gore/trauma1.ogg', +'packs/infinity/sound/effects/gore/trauma2.ogg', +'packs/infinity/sound/effects/gore/trauma3.ogg' +)) + +GLOBAL_LIST_INIT(switch_small_sound, list( +'packs/infinity/sound/effects/using/switch/small1.ogg','packs/infinity/sound/effects/using/switch/small2.ogg')) + + + + + + +/obj/item/music_player + name = "music player" + desc = "A little device which can be used to play soft tunes. If you see this you're probably should be banned for abuse. Report this situation to dev team." + icon = 'mods/music_player/icons/object.dmi' + icon_state = null + item_state = null + + w_class = ITEM_SIZE_NORMAL + obj_flags = OBJ_FLAG_CONDUCTIBLE + + throwforce = 2 + throw_speed = 4 + throw_range = 10 + + matter = list(MATERIAL_STEEL = 75, MATERIAL_GLASS = 30) + origin_tech = list(TECH_MAGNET = 2) + + var/mode = 0 + var/volume = 20 + var/max_volume = 50 + var/frequency = 1 + + var/datum/sound_token/sound_token + var/sound_id + + var/break_chance = 3 + var/broken + var/panel = PANEL_CLOSED + + var/obj/item/cell/device/cell = /obj/item/cell/device/high + var/power_usage = 250 + var/obj/item/music_tape/tape = null + + // Used for identification + var/serial_number + +/obj/item/music_player/Initialize() + . = ..() + if(type == /obj/item/music_player) + log_and_message_admins("Something, or someone has tried to create \"[src.type]\", which was prohibited since the specific path is not for the gameplay. It will be deleted.") + send2adminirc("Something, or someone has tried create \"[src.type]\", which was prohibited since the specific path is not for the gameplay. It will be deleted.") + cell = null + tape = null + return INITIALIZE_HINT_QDEL + else + if(ispath(cell)) + cell = new cell(src) + + if(ispath(tape)) + tape = new tape(src) + + sound_id = "[/obj/item/music_player]_[sequential_id(/obj/item/music_player)]" + serial_number = "[rand(1,999)]" + desc = desc + "
    You see \"#[serial_number]\" on the cover." + GLOB.music_players += src + log_and_message_admins("MUSIC PLAYER: #[serial_number] has been created.") + update_icon() + +/obj/item/music_player/Destroy() + set_mode(PLAYER_STATE_OFF) + QDEL_NULL(cell) + QDEL_NULL(tape) + log_and_message_admins("MUSIC PLAYER: #[serial_number] is deleted.") + GLOB.music_players -= src + . = ..() + +/obj/item/music_player/examine(mob/user) + . = ..(user) + if(.) + if(tape) + . += SPAN_NOTICE("You can see [tape] inside it.") + + switch(panel) + if(PANEL_OPENED) + . += SPAN_NOTICE("The front panel is unhinged.") + if(PANEL_UNSCREWED) + . += SPAN_NOTICE("The front panel is unscrewed.") + + if(broken) + . += SPAN_WARNING("It's broken.") + +/obj/item/music_player/on_update_icon() + ClearOverlays() + + if(mode == PLAYER_STATE_PLAY) + AddOverlays(image(icon, "[icon_state]_play")) + + if(panel == PANEL_OPENED) + AddOverlays(image(icon, "[icon_state]_panel-open")) + + if(cell) + AddOverlays(image(icon, "[icon_state]_panel-cell")) + +/obj/item/music_player/Process() + if(!get_cell() || !cell.checked_use(power_usage * CELLRATE)) + StopPlaying() + visible_message(SPAN_WARNING("[src]'s power meter flashes a battery warning and refuses to operate.")) + return PROCESS_KILL + +/obj/item/music_player/proc/set_mode(value) + if(value == mode) + return + + playsound(src, mode == (PLAYER_STATE_OFF || PLAYER_STATE_PAUSE) ? GLOB.switch_small_sound[1] : GLOB.switch_small_sound[2], 35) + + if(broken) + return + + switch(value) + if(PLAYER_STATE_OFF) + StopPlaying() + if(PLAYER_STATE_PLAY) + StartPlaying() + if(PLAYER_STATE_PAUSE) + StopPlaying(pause = TRUE) + +/obj/item/music_player/attack_self(mob/user) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + switch(mode) + if(PLAYER_STATE_OFF) + set_mode(PLAYER_STATE_PLAY) + if(PLAYER_STATE_PLAY) + set_mode(PLAYER_STATE_OFF) + if(PLAYER_STATE_PAUSE) + set_mode(PLAYER_STATE_PLAY) + +/obj/item/music_player/crowbar_act(mob/living/user, obj/item/tool) + switch(panel) + if(PANEL_OPENED) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message(SPAN_NOTICE("[user] re-attaches [src]'s front panel with [tool]."), SPAN_NOTICE("You re-attach [src]'s front panel.")) + panel = PANEL_UNSCREWED + update_icon() + if(PANEL_UNSCREWED) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + user.visible_message(SPAN_NOTICE("[user] unhinges [src]'s front panel with [tool]."), SPAN_NOTICE("You unhinge [src]'s front panel.")) + panel = PANEL_OPENED + update_icon() + +/obj/item/music_player/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + switch(panel) + if(PANEL_UNSCREWED) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + panel = PANEL_CLOSED + USE_FEEDBACK_NEW_PANEL_OPEN(user, FALSE) + if(PANEL_CLOSED) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + panel = PANEL_UNSCREWED + balloon_alert(user, "панель откручена") + if(PANEL_OPENED) + . = ITEM_INTERACT_SUCCESS + var/choices = list() + if(cell) + choices += "Remove cell" + if(!broken) + choices += "Adjust player" + var/response = input(user, "What do you want to do?", "[src]") as null|anything in choices + if(!Adjacent(user) || !response) //moved away or cancelled + return + switch(response) + if("Remove cell") + if(!cell) + USE_FEEDBACK_CELL_MISSING(user) + return + if(!MayAdjust(user)) + return + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + USE_FEEDBACK_CELL_REMOVED(user) + user.put_in_hands(cell) + cell = null + update_icon() + if("Adjust player") + if(!broken) + AdjustFrequency(tool, user) + +/obj/item/music_player/use_tool(obj/item/tool, mob/living/user, list/click_params) + if(istype(tool, /obj/item/music_tape)) + var/obj/item/music_tape/C = tool + if(tape) + to_chat(user, SPAN_NOTICE("There is already [tape] inside.")) + return TRUE + + if(C.ruined) + USE_FEEDBACK_FAILURE("[C] is ruined, you can't use it.") + return TRUE + + if(!user.unEquip(C)) + return TRUE + + C.forceMove(src) + tape = C + user.visible_message( + SPAN_NOTICE("[user] insert [tape] into [src]."), + SPAN_NOTICE("You insert [tape] into [src].")) + playsound(src, 'sound/weapons/TargetOn.ogg', 35, 1) + update_icon() + return TRUE + + if(istype(tool, /obj/item/cell/device)) + var/obj/item/cell/device/C = tool + if(panel == PANEL_OPENED) + if(cell) + to_chat(user, SPAN_NOTICE("[src] already has [cell] installed.")) + return TRUE + + if(!user.unEquip(C)) + return TRUE + + C.forceMove(src) + cell = C + to_chat(user, SPAN_NOTICE("You insert [cell] into [src].")) + update_icon() + return TRUE + + if(istype(tool, /obj/item/stack/nanopaste)) + var/obj/item/stack/S = tool + if(broken && panel == PANEL_OPENED) + if(S.use(1)) + user.visible_message(SPAN_NOTICE("[user] pours some of [S] onto [src]."), SPAN_NOTICE("You pour some of [S] over [src]'s internals and watch as it retraces and resolders paths.")) + broken = FALSE + else + to_chat(user, SPAN_NOTICE("[S] is empty.")) + return TRUE + + if(isCoil(tool)) + var/obj/item/stack/S = tool + if(broken && panel == PANEL_OPENED) + if(user.skill_check(SKILL_ELECTRICAL, SKILL_BASIC)) + if(S.use(5)) + user.visible_message(SPAN_NOTICE("[user] starts replace burned out wires in [src]."), SPAN_NOTICE("You are replacing burned out wires in [src]'.")) + if(!do_after(user, 60, src)) + return TRUE + user.visible_message(SPAN_NOTICE("[user] replaces burned out wires in [src]."), SPAN_NOTICE("You replace burned out wires in [src].")) + broken = FALSE + else + to_chat(user, SPAN_NOTICE("You need more [S] to fix [src].")) + + else + to_chat(user, SPAN_NOTICE("You don't know how to fix [src].")) + return TRUE + + return ..() + +/obj/item/music_player/get_cell() + return cell + +/obj/item/music_player/proc/AdjustFrequency(obj/item/W, mob/user) + var/const/MIN_FREQUENCY = 0.5 + var/const/MAX_FREQUENCY = 1.5 + + if(!MayAdjust(user)) + return FALSE + + var/list/options = list() + var/tighten = "Tighten (play slower)" + var/loosen = "Loosen (play faster)" + + if(frequency > MIN_FREQUENCY) + options += tighten + if(frequency < MAX_FREQUENCY) + options += loosen + + var/operation = input(user, "How do you wish to adjust the player head?", "Adjust player", options[1]) as null|anything in options + if(!operation) + return FALSE + if(!MayAdjust(user)) + return FALSE + if(W != user.get_active_hand()) + return FALSE + + if(!CanPhysicallyInteract(user)) + return FALSE + + if(operation == loosen) + frequency += 0.1 + else if(operation == tighten) + frequency -= 0.1 + frequency = clamp(frequency, MIN_FREQUENCY, MAX_FREQUENCY) + + user.visible_message(SPAN_NOTICE("[user] adjusts [src]'s player head."), SPAN_NOTICE("You adjust [src]'s player head.")) + playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) + + if(frequency > 1.0) + to_chat(user, SPAN_NOTICE("[src] should be playing faster than usual.")) + else if(frequency < 1.0) + to_chat(user, SPAN_NOTICE("[src] should be playing slower than usual.")) + else + to_chat(user, SPAN_NOTICE("[src] should be playing as fast as usual.")) + + return TRUE + +/obj/item/music_player/proc/MayAdjust(mob/user) + if(mode) + USE_FEEDBACK_NEED_DISABLED(user) + return FALSE + return TRUE + +/obj/item/music_player/attack_ai(mob/user) + return + +/obj/item/music_player/MouseDrop(obj/over_object) + if(!over_object) + return + + //makes sure that the clothing is equipped so that we can't drag it into our hand from miles away. + if(!(src.loc == usr)) + return + + if(usr.incapacitated()) + return + + switch(over_object.name) + if("r_hand") + eject(usr) + if("l_hand") + eject(usr) + update_icon() + +/obj/item/music_player/proc/eject(mob/user) + if(!tape) + to_chat(user, SPAN_NOTICE("There's no tape in [src].")) + return + + if(mode) + StopPlaying() + + playsound(src, GLOB.machinery_exposed_sound[1], 20, 1) + if(user) + visible_message( + SPAN_NOTICE("[user] eject [tape] from [src]."), + SPAN_NOTICE("You eject [tape] from [src].")) + if(user) + user.put_in_hands(tape) + else + tape.dropInto(loc) + tape = null + +/obj/item/music_player/verb/volume() + set name = "Change Volume" + set category = "Object" + set src in view(1) + + if(usr.incapacitated()) + return + + var/vol = input(usr, "What volume would you like the sound to play at?",, volume) as null|num + if(vol) + AdjustVolume(vol) + return + +/obj/item/music_player/proc/AdjustVolume(new_volume) + volume = clamp(new_volume, 0, max_volume) + if(sound_token) + sound_token.SetVolume(volume) + +/obj/item/music_player/proc/explode() + walk_to(src, 0) + src.visible_message(SPAN_DANGER("[src] blows apart!"), 1) + + explosion(src.loc, 1, 1, 1, rand(3, 4), 1) + + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread + s.set_up(3, 1, src) + s.start() + + new /obj/decal/cleanable/blood/oil(src.loc) + qdel(src) + +/obj/item/music_player/proc/break_act() + audible_message(SPAN_WARNING("[src]'s speakers pop with a sharp crack!")) + playsound(src, 'sound/effects/snap.ogg', 100, 1) + StopPlaying() + broken = TRUE + +/obj/item/music_player/proc/StartPlaying() + if(!get_cell() || !cell.check_charge(power_usage * CELLRATE)) + return + + if(broken) + return + + if(isnull(tape)) + return + + if(!tape.CanPlay()) + return + + if(mode == PLAYER_STATE_PAUSE && sound_token) + sound_token.Unpause() + else + QDEL_NULL(sound_token) + sound_token = GLOB.sound_player.PlayLoopingSound(src, sound_id, tape.track.source, volume = volume, frequency = frequency, range = 9, falloff = 2, prefer_mute = TRUE) + + mode = PLAYER_STATE_PLAY + START_PROCESSING(SSobj, src) + log_and_message_admins("launched [src] #[serial_number] with the song \"[tape.track.title]\".") + + if(prob(break_chance)) + break_act() + + update_icon() + +/obj/item/music_player/proc/StopPlaying(pause = 0) + if(pause && sound_token) + mode = PLAYER_STATE_PAUSE + sound_token.Pause() + else + mode = PLAYER_STATE_OFF + QDEL_NULL(sound_token) + + STOP_PROCESSING(SSobj, src) + update_icon() + +//Alternative way to activate it, but instead stop, we will pause it. +/obj/item/music_player/AltClick(mob/user) + if(!CanPhysicallyInteract(user)) + return ..() + + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + switch(mode) + if(PLAYER_STATE_PLAY) + set_mode(PLAYER_STATE_PAUSE) + if(PLAYER_STATE_PAUSE) + set_mode(PLAYER_STATE_PLAY) + + return TRUE + +/obj/item/music_player/fire_act() + break_act() + if(tape) + tape.ruin() + return ..() + +#undef PLAYER_STATE_OFF +#undef PLAYER_STATE_PLAY +#undef PLAYER_STATE_PAUSE + +#undef PANEL_CLOSED +#undef PANEL_UNSCREWED +#undef PANEL_OPENED diff --git a/mods/music_player/code/music_tape.dm b/mods/music_player/code/music_tape.dm new file mode 100644 index 0000000000000..6b43c0f425936 --- /dev/null +++ b/mods/music_player/code/music_tape.dm @@ -0,0 +1,129 @@ +// Music tape code. +/obj/item/music_tape + name = "tape" + desc = "Magnetic tape adapted to outdated but proven music formats such as ogg, midi and module files." + icon = 'icons/obj/tools/tape_recorder.dmi' + icon_state = "tape_white" + item_state = "analyzer" + w_class = ITEM_SIZE_TINY + force = 1 + throwforce = 0 + // SIERRA TODO: port to Bay12 drop sounds + // pickup_sound = "plastic_pickup_sound" + // drop_sound = "plastic_drop_sound" + + matter = list(MATERIAL_PLASTIC = 20, MATERIAL_STEEL = 5, MATERIAL_GLASS= 5) + + var/random_color = TRUE + var/ruined = 0 + var/rewrites_left = 2 + + var/jukebox_track/track + var/uploader_ckey + +/obj/item/music_tape/Initialize() + . = ..() + if(random_color) + icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]" + +/obj/item/music_tape/on_update_icon() + ClearOverlays() + if(ruined) + AddOverlays("ribbonoverlay") + +/obj/item/music_tape/examine(mob/user) + . = ..(user) + if(track?.title) + . += SPAN_NOTICE("It's labeled as \"[track.title]\".") + +/obj/item/music_tape/attack_self(mob/user) + if(!ruined) + to_chat(user, SPAN_NOTICE("You pull out all the tape!")) + ruin() + +/obj/item/music_tape/screwdriver_act(mob/living/user, obj/item/tool) + if(!ruined) + USE_FEEDBACK_NOTHING_TO_REPAIR(user) + return + . = ITEM_INTERACT_SUCCESS + USE_FEEDBACK_REPAIR_START(user) + if(!tool.use_as_tool(src, user, 12 SECONDS, volume = 50, skill_path = list(SKILL_CONSTRUCTION, SKILL_DEVICES), do_flags = DO_REPAIR_CONSTRUCT)) + return + USE_FEEDBACK_REPAIR_FINISH(user) + fix() + +/obj/item/music_tape/use_tool(obj/item/tool, mob/living/user, list/click_params) + if(ruined && istype(tool, /obj/item/pen)) + to_chat(user, SPAN_NOTICE("You start winding [src] back in...")) + if(do_after(user, 12 SECONDS, target = src) && user.use_sanity_check(src, tool)) + to_chat(user, SPAN_NOTICE("You wound [src] back in.")) + fix() + return TRUE + + if(istype(tool, /obj/item/pen)) + if(loc == user && !user.incapacitated()) + var/new_name = input(user, "What would you like to label [src]?", "\improper [src] labeling", name) as null|text + if(isnull(new_name) || new_name == name) + return TRUE + + new_name = sanitizeSafe(new_name) + + if(new_name) + to_chat(user, SPAN_NOTICE("You label [src] '[new_name]'.")) + if(track) + track.title = "tape - \"[new_name]\"" + SetName("tape - \"[new_name]\"") + else + to_chat(user, SPAN_NOTICE("You scratch off the label.")) + if(track) + track.title = "unknown" + SetName("tape") + return TRUE + + return ..() + +/obj/item/music_tape/fire_act() + ruin() + +/obj/item/music_tape/proc/CanPlay() + if(!track) + return FALSE + + if(ruined) + return FALSE + + return TRUE + +/obj/item/music_tape/proc/ruin() + ruined = TRUE + update_icon() + +/obj/item/music_tape/proc/fix() + ruined = FALSE + update_icon() + +/obj/item/storage/music_tape_holder + name = "Tape holder" + desc = "It can hold a few tapes and screwdriwer." + icon = 'mods/music_player/icons/object.dmi' + icon_state = "tape_holder" + w_class = ITEM_SIZE_SMALL + max_w_class = ITEM_SIZE_SMALL //Don't worry, see contents_allowed[] + max_storage_space = 5 + contents_allowed = list( + /obj/item/music_tape, + /obj/item/device/flashlight/pen, + /obj/item/device/tape, + /obj/item/material/coin, + /obj/item/dice, + /obj/item/disk, + /obj/item/paper, + /obj/item/paper_bundle, + /obj/item/pen, + /obj/item/photo, + /obj/item/screwdriver + ) + startswith = list( + /obj/item/music_tape/custom = 2, + /obj/item/screwdriver = 1 + ) diff --git a/mods/music_player/code/music_writer.dm b/mods/music_player/code/music_writer.dm new file mode 100644 index 0000000000000..3f59856e76e75 --- /dev/null +++ b/mods/music_player/code/music_writer.dm @@ -0,0 +1,174 @@ +/obj/machinery/media/music_writer + name = "music disks rewriter" + desc = "A machine which rewrites musical disks." + icon = 'packs/infinity/icons/obj/machinery/disk_writer.dmi' + icon_state = "writer_off" + density = FALSE + power_channel = EQUIP + use_power = 1 + idle_power_usage = 10 + active_power_usage = 100 + anchored = TRUE + + var/mob/customer //current user + var/cooldown = 0 // Every 3 minute after successful re-write. + + var/writing = FALSE + + var/obj/item/music_tape/disk + +/obj/machinery/media/music_writer/Process() + if(writing) + if(!check_victim()) + set_off() + if(cooldown) + cooldown -= 1 SECOND + +/obj/machinery/media/music_writer/on_update_icon() + if(writing) + icon_state = "writer_on" + else + icon_state = "writer_off" + +/obj/machinery/media/music_writer/proc/check_victim() + if(locate(customer, src.loc)) + return 1 + return 0 + +/obj/machinery/media/music_writer/proc/set_off() + if(customer) + customer = null + writing = FALSE + update_icon() + +/obj/machinery/media/music_writer/proc/set_on(mob/M) + if(M) + customer = M + writing = TRUE + update_icon() + +/obj/machinery/media/music_writer/use_tool(obj/item/tool, mob/user, list/click_params) + if(istype(tool, /obj/item/music_tape)) + var/obj/item/music_tape/D = tool + if(disk) + to_chat(user, SPAN_NOTICE("There is already a disk inside.")) + return TRUE + + if(D.ruined) + to_chat(user, SPAN_NOTICE("\The [D] is ruined, you can't use it.")) + return TRUE + + visible_message(SPAN_NOTICE("[user] inserts the disk in \the [src]'s card slot.")) + user.drop_item() + D.forceMove(src) + disk = D + return TRUE + return ..() + +/obj/machinery/media/music_writer/physical_attack_hand(mob/user) + if(get_dist(src, user)<=1) + interact(user) + +/obj/machinery/media/music_writer/interact(mob/user) + var/dat = "Please insert a cassette.
    " + + if(writing) + dat = "Memory scan completed.
    Writing the tune from scan of [customer.name] mind... Please, stand still." + + if(disk && !writing) + dat = "Write ([disk.rewrites_left] times left)" + + if(disk && !writing) + dat += "
    Eject Disk" + + if(cooldown) + dat = "[src] is recalibrating its systems for a new rewrite. Please, wait [cooldown/10] seconds." + + playsound(src, 'packs/infinity/sound/machines/console/console2.ogg', 40, 1) + + var/datum/browser/popup = new(user, "musicwriter", "Music Writer", 200, 100) + popup.set_content(dat) + popup.open() + +/obj/machinery/media/music_writer/attack_ai(mob/user) + return + +/obj/machinery/media/music_writer/OnTopic(mob/user, list/href_list) + if(href_list["write"]) + if(!writing && !customer && disk && cooldown == 0) + if(disk.rewrites_left > 0) + if(write_disk(usr)) + message_admins("[customer.real_name]([customer.ckey]) uploaded new sound (preview) in the cassette named as \"[disk.track.title]\". Wipe data.") + cooldown += 3 MINUTES + sleep(4 SECONDS) + + playsound(src, 'packs/infinity/sound/machines/console/console_success.ogg', 40, 1) + sleep(2 SECONDS) + + eject(usr) + set_off() + else + playsound(src, 'packs/infinity/sound/machines/console/console_error.ogg', 40, 1) + to_chat(usr, SPAN_DANGER("You can't rewrite this disk - the tape was rewriten too many times.")) + + if(href_list["eject"]) + if(usr.incapacitated()) + return + + if(!disk) + to_chat(usr, SPAN_NOTICE("There's no disk in \the [src]")) + return + + if(writing) + to_chat(usr, SPAN_DANGER("You can't eject the disk while \the [src] is working.")) + return + + visible_message(SPAN_NOTICE("[usr] eject the disk from \the [src].")) + eject(usr) + + return TOPIC_REFRESH + +/obj/machinery/media/music_writer/proc/write_disk(mob/user) + set_on(user) + + playsound(src, pick(GLOB.console_interact_sound), 40, 1) + + var/new_sound_file = input(user, "Pick file:","File") as null|sound + if(!new_sound_file) + playsound(src, 'packs/infinity/sound/machines/console/console_error.ogg', 40, 1) + set_off() + return + + playsound(src, pick(GLOB.console_interact_sound), 40, 1) + + var/new_name = input(user, "Name the cassette:") as null|text + if(!new_name) + playsound(src, 'packs/infinity/sound/machines/console/console_error.ogg', 40, 1) + set_off() + return + + playsound(src, pick(GLOB.console_interact_sound), 40, 1) + + new_name = sanitizeSafe(new_name) + + if(new_sound_file && new_name && writing) + playsound(src, 'packs/infinity/sound/machines/console/console.ogg', 40) + + disk.SetName("cassette - \"[new_name]\"") + + if(disk.track) //Removing old datum disk if there one + qdel(disk.track) + + var/jukebox_track/T = new(new_name, new_sound_file) + + if(T) + disk.track = T + disk.uploader_ckey = customer.ckey + disk.rewrites_left-- + return 1 + return 0 + +/obj/machinery/media/music_writer/proc/eject(mob/user) + playsound(src, 'packs/infinity/sound/machines/console/console3.ogg', 40, 1) + user.put_in_hands(disk) + disk = null diff --git a/mods/music_player/code/subtypes_player.dm b/mods/music_player/code/subtypes_player.dm new file mode 100644 index 0000000000000..26cd4630cd3a7 --- /dev/null +++ b/mods/music_player/code/subtypes_player.dm @@ -0,0 +1,77 @@ +// Radio player +/obj/item/music_player/radio + name = "radio station" + desc = "An old radio box. In the past people used them for listening to radio stations and communication between radio amateurs. \ + In future there's still an enthusiasts who like to repair and modify old electronics. For example this one may play music disks." + icon_state = "radio" + item_state = "radio" + +/obj/item/music_player/radio/custom_tape + tape = /obj/item/music_tape/custom + +// Cassett player +/obj/item/music_player/csplayer + name = "cassett player" + desc = "An ordinary cassette player model FN-16, he looks old and worn in some places." + icon_state = "csplayer_empty" + item_state = "device" + + slot_flags = SLOT_BELT + +/obj/item/music_player/csplayer/on_update_icon() + if(tape && (mode == (1 || 2))) + icon_state = "csplayer_on" + else if(tape) + icon_state = "csplayer_loaded" + else + icon_state = "csplayer_empty" + +/obj/item/music_player/csplayer/custom_tape + tape = /obj/item/music_tape/custom + +// Dusty player +/obj/item/music_player/dusty + name = "dusty cassette player" + desc = "Old and dusty cassette player, it seems that it is broken." + icon_state = "dustyplayer_empty" + item_state = "device" + +/obj/item/music_player/dusty/on_update_icon() + icon_state = "dustyplayer_[tape ? "loaded" : "empty"]" + +/obj/item/music_player/dusty/custom_tape + tape = /obj/item/music_tape/custom + +// Boombox +/obj/item/music_player/boombox + name = "black boombox" + desc = "A musical audio player station, also known as boombox or ghettobox. Very robust." + icon_state = "boombox" + item_state = "boombox" + + item_icons = list( + slot_l_hand_str = 'mods/music_player/icons/onmob_lefthand.dmi', + slot_r_hand_str = 'mods/music_player/icons/onmob_righthand.dmi', + slot_back_str = 'mods/music_player/icons/onmob_back.dmi', + ) + +// slot_flags = SLOT_BACK + w_class = ITEM_SIZE_LARGE + + throwforce = 10 + throw_speed = 2 + throw_range = 10 + force = 10 + +/obj/item/music_player/boombox/custom_tape + tape = /obj/item/music_tape/custom + +// This one for debug pruporses +// I'll yell on you if you will use it in game without good reason >:( +/obj/item/music_player/debug + name = "typ3n4m3-cl4ss: CRUSH/ZER0" + icon_state = "console" + tape = /obj/item/music_tape/custom + max_volume = 100 + break_chance = 0 + power_usage = 1 diff --git a/mods/music_player/code/subtypes_tape.dm b/mods/music_player/code/subtypes_tape.dm new file mode 100644 index 0000000000000..43e7d61a2b66c --- /dev/null +++ b/mods/music_player/code/subtypes_tape.dm @@ -0,0 +1,28 @@ +/obj/item/music_tape/custom + name = "dusty tape" + desc = "A dusty tape, which can hold anything. Only what you need is blow the dust away and you will be able to play it again." + +/obj/item/music_tape/custom/attack_self(mob/user) + if(!ruined && !track) + if(setup_tape(user)) + log_and_message_admins("uploaded new sound (preview) in \the [src] with track name \"[track.title]\". Wipe data.") + return + ..() + +/obj/item/music_tape/custom/proc/setup_tape(mob/user) + var/new_sound = input(user, "Select sound to upload. You should use only those audio formats which byond can accept. Ogg and module files is a good choice.", "Song Reminiscence: File") as null|sound + if(isnull(new_sound)) + return FALSE + + var/new_name = input(user, "Name \the [src]:", "Song Reminiscence: Name", "Untitled") as null|text + if(isnull(new_name)) + return FALSE + + new_name = sanitizeSafe(new_name) + + SetName("tape - \"[new_name]\"") + + if(new_sound && new_name && !track) + track = new /jukebox_track(new_name, new_sound) + return TRUE + return FALSE diff --git a/mods/music_player/icons/object.dmi b/mods/music_player/icons/object.dmi new file mode 100644 index 0000000000000..1619a59495adf Binary files /dev/null and b/mods/music_player/icons/object.dmi differ diff --git a/mods/music_player/icons/onmob_back.dmi b/mods/music_player/icons/onmob_back.dmi new file mode 100644 index 0000000000000..2675e77de80e5 Binary files /dev/null and b/mods/music_player/icons/onmob_back.dmi differ diff --git a/mods/music_player/icons/onmob_lefthand.dmi b/mods/music_player/icons/onmob_lefthand.dmi new file mode 100644 index 0000000000000..a82af56f0ed3a Binary files /dev/null and b/mods/music_player/icons/onmob_lefthand.dmi differ diff --git a/mods/music_player/icons/onmob_righthand.dmi b/mods/music_player/icons/onmob_righthand.dmi new file mode 100644 index 0000000000000..126e389eeaf0e Binary files /dev/null and b/mods/music_player/icons/onmob_righthand.dmi differ diff --git a/mods/ntnet/README.md b/mods/ntnet/README.md new file mode 100644 index 0000000000000..b7c883046e7a1 --- /dev/null +++ b/mods/ntnet/README.md @@ -0,0 +1,79 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1683 + + + +## NTNetwork + +ID мода: NTNET + + +### Описание мода + +NTNet + + +### Изменения *кор кода* + +- `code/__defines/items_clothing.dm` +- `code/modules/mob/living/carbon/human/examine.dm` + + +### Оверрайды + + + +### Дефайны + +- HUD_IT + + +### Используемые файлы, не содержащиеся в модпаке + +- `maps/sierra/icons/obj/clothing/obj_suit.dmi` +- `maps/sierra/icons/mob/onmob/onmob_suit.dmi` + + +### Авторы: + +- Код - LordNest + + diff --git a/mods/ntnet/_ntnet.dm b/mods/ntnet/_ntnet.dm new file mode 100644 index 0000000000000..b8294a95e3f9e --- /dev/null +++ b/mods/ntnet/_ntnet.dm @@ -0,0 +1,4 @@ +/singleton/modpack/ntnet + name = "NTNet" + desc = "NTNet - Best solutions for your internal network. Мод, который добавляет НТнет." + author = "LordNest and others who originally coded this thing." diff --git a/mods/ntnet/_ntnet.dme b/mods/ntnet/_ntnet.dme new file mode 100644 index 0000000000000..e60c0c4b049a7 --- /dev/null +++ b/mods/ntnet/_ntnet.dme @@ -0,0 +1,9 @@ +#ifndef MODPACK_NTNET +#define MODPACK_NTNET + +#include "_ntnet.dm" + +#include "code\NTNet-items.dm" +#include "code\NTNet-core.dm" + +#endif diff --git a/mods/ntnet/code/NTNet-core.dm b/mods/ntnet/code/NTNet-core.dm new file mode 100644 index 0000000000000..8c326defc9459 --- /dev/null +++ b/mods/ntnet/code/NTNet-core.dm @@ -0,0 +1,40 @@ +#include "terminal\terminal-core.dm" +GLOBAL_LIST_INIT(NTNet_machines, list()) + +// modify core +/obj/machinery + var/NTNet_id + +//generating ID +/obj/machinery/proc/get_new_ntnet_id(A) + NTNet_id = A + num2text(rand(100,999)) + var/list/IDS = list() + if(NTNet_id in IDS) + get_new_ntnet_id() + for(var/obj/machinery/i in GLOB.NTNet_machines) + if(i == src) + continue + IDS += i.NTNet_id + return + +/obj/machinery/door/airlock/Initialize() + . = ..() + GLOB.NTNet_machines += src + get_new_ntnet_id("AL") + +/obj/machinery/firealarm/Initialize() + . = ..() + GLOB.NTNet_machines += src + get_new_ntnet_id("FA") + +/obj/machinery/power/apc/Initialize() + . = ..() + GLOB.NTNet_machines += src + get_new_ntnet_id("PC") + + +/datum/terminal/proc/get_remote_ID(ID) + for(var/obj/machinery/R as anything in SSmachines.get_all_machinery()) + if(R.NTNet_id == ID) + return R + return null diff --git a/mods/ntnet/code/NTNet-items.dm b/mods/ntnet/code/NTNet-items.dm new file mode 100644 index 0000000000000..01e84fb3a8c47 --- /dev/null +++ b/mods/ntnet/code/NTNet-items.dm @@ -0,0 +1,52 @@ +// HACSO's HUD and related interactions +// code\__defines\items_clothing.dm - used outside pack +// code\modules\mob\living\carbon\human\examine.dm - used outside pack + +/obj/item/clothing/glasses/hud/it + name = "IT special HUD" + desc = "An augmented reality device that allows you to see doors NTNet ID's." + icon = 'mods/NTNet/icons/obj_eyes.dmi' + item_icons = list(slot_glasses_str = 'mods/NTNet/icons/onmob_eyes.dmi') + icon_state = "ithud" + off_state = "ithud_off" + hud_type = HUD_IT + body_parts_covered = 0 + +/obj/machinery/door/airlock/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) + if (src.isElectrified()) + if (istype(mover, /obj/item)) + var/obj/item/i = mover + if (i.matter && (MATERIAL_STEEL in i.matter) && i.matter[MATERIAL_STEEL] > 0) + var/datum/effect/spark_spread/s = new /datum/effect/spark_spread + s.set_up(5, 1, src) + s.start() + return ..() + +/obj/machinery/door/airlock/examine(mob/user) + . = ..() + if(hasHUD(user, HUD_IT) && arePowerSystemsOn()) + . += SPAN_INFO(SPAN_ITALIC("You may notice a small hologram that says: [NTNet_id]")) + +/obj/machinery/power/apc/examine(mob/user) + . = ..() + if(hasHUD(user, HUD_IT) && has_electronics && terminal()) + . += SPAN_INFO(SPAN_ITALIC("You may notice a small hologram that says: [NTNet_id]")) + +/obj/machinery/firealarm/examine(mob/user) + . = ..() + if(hasHUD(user, HUD_IT)) + . += SPAN_INFO(SPAN_ITALIC("You may notice a small hologram that says: [NTNet_id]")) + +/obj/item/modular_computer/examine(mob/user) + . = ..() + if(hasHUD(user, HUD_IT)) + if(network_card && network_card.check_functionality() && enabled) + . += SPAN_INFO(SPAN_ITALIC("You may notice a small hologram that says: [network_card.get_network_tag()].")) + +/obj/machinery/computer/modular/examine(mob/user) + . = ..() + if(hasHUD(user, HUD_IT)) + var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) + var/obj/item/stock_parts/computer/network_card/network_card = os.get_component(PART_NETWORK) + if(istype(network_card) && network_card.check_functionality() && os.on) + . += SPAN_INFO(SPAN_ITALIC("You may notice a small hologram that says: [network_card.get_network_tag()].")) diff --git a/mods/ntnet/code/terminal/commands/connect.dm b/mods/ntnet/code/terminal/commands/connect.dm new file mode 100644 index 0000000000000..02d06c02298e9 --- /dev/null +++ b/mods/ntnet/code/terminal/commands/connect.dm @@ -0,0 +1,163 @@ +/datum/terminal_command/connect + name = "connect" + man_entry = list( + "Format: connect \[REMOTE id].", + "Standard format show you data about REMOTE, it needn't access of REMOTE.", + "Open format: connect \[REMOTE id] -open. To close REMOTE, replace '-open' by '-close'. Need airlock accessible", + "Locking (bolting) format: connect \[REMOTE id] -lock. To unlock use -unlock. Need airlock access.", + "In red and orange code you can override airlock access by using override key. Like this: 'connect y421 -open -override Yota11'" + ) + pattern = "^connect" + skill_needed = SKILL_TRAINED + +/datum/terminal_command/connect/proper_input_entered(text, mob/user, datum/terminal/terminal) + var/list/txt = splittext(text, " ") + + + if ((length(txt)==1) || ((length(txt)==2) && (length(txt[2])!=5))) + return "[name]: syntax error. Use 'man [name]'" + +// AIRLOCK + if (copytext(txt[2],1,3) == "AL") + var/NTID = txt[2] + var/obj/machinery/door/airlock/REMOTE = terminal.get_remote_ID(NTID) + if (length(txt)==2) + . += "Outputting data about airlock([NTID]):
    " + . += "Name: [REMOTE.name]
    " + . += "Energy: [REMOTE.main_power_lost_until ? "OFFLINE" : "ONLINE"]" + . += "
    Network data:
    " + . += " NTNet connection: [REMOTE.ai_control_disabled ? "ERROR" : "STABLE"].
    " +// . += " AI cover: [REMOTE.hackProof ? "ACTIVE" : "OUT OF SERVICE"].
    " + var/electrified_state + switch(REMOTE.electrified_until) + if(-1) + electrified_state = "PERMANENT" + if(0) + electrified_state = "FALSE" + else + electrified_state = "TRUE" + . += "
    Local functional data:
    " + . += " Electrified: [electrified_state].
    " + . += " Bolts: [REMOTE.locked ? "LOCKED DOWN" : "OUT OF SERVICE"].
    " + . += " Lights: [REMOTE.lights ? "STABLE" : "OUT OF SERVICE"].

    " + . += "SAFETY DATA:
    " + . += " Airlock timing: [REMOTE.normalspeed ? "STABLE" : "OVERRIDEN"].
    " + . += " Safety protocols: [REMOTE.safe ? "STABLE" : "OVERRIDEN"].
    " + . += "Required Access: [length(REMOTE.req_access)>=1 ? "([jointext(REMOTE.req_access, ", ") ])" : "ACCESS NOT REQUIRED"].
    " + . += "Acces check: [has_access(REMOTE.req_access, user.GetAccess()) ? "GRANTED" : "DENIED"]." + return + + if(!has_access(REMOTE.req_access, user.GetAccess())) // && !override) + return "[name]: ACCESS ERROR." + + + else if (length(txt)==3) + switch(txt[3]) + if("-open") + if(!REMOTE.open()) // лютая хуета, но тока так корректно отрабатывает + . += "[name]: unable to open airlock, maybe it bolted or already opened or lack for energy." + return + . += "[name]: Airlock with id([NTID]) was opened." + return + if("-close") + REMOTE.close() + if(!REMOTE.density) + . += "[name]: FALSE." + return + . += "[name]: Airlock with id([NTID]) TRUE." + return + if("-lock") + if(!REMOTE.lock()) + . += "[name]: unable to close airlock, maybe it bolted or already locked or lack for energy." + return + . += "[name]: Airlock with id([NTID]) was locked." + return + if("-unlock") + if(!REMOTE.unlock()) + . += "[name]: unable to close airlock, maybe it bolted or already unlocked or lack for energy." + return + . += "[name]: Airlock with id([NTID]) was unlocked." + return + + else + return "[text[3]]: ERROR: Unknown parametr." + else + . += "[name]: ERROR 404:: Unknown ID." + +// APC + if (copytext(txt[2],1,3) == "PC") + var/NTID = txt[2] + var/obj/machinery/power/apc/REMOTE = terminal.get_remote_ID(NTID) + if (length(txt)==2) + var/obj/item/cell/BAT = REMOTE.get_cell() + . += "Outputting data about APC([NTID]):
    " + . += "Name:[copytext(REMOTE.name,2)]
    " + . += "Batery:[BAT ? num2text(BAT.percent())+"%" : "NONE"]
    " + . += "Status:[REMOTE.locked ? "BLOCKED" : "OPEN"]

    " + return + + + if ((length(txt)==3) && (has_access(REMOTE.req_access, user.GetAccess() || !REMOTE.locked))) + switch(txt[3]) + //lock-unlock panel + if("-lock") + REMOTE.locked = 1 + . += "APC panel BLOCKED" + REMOTE.update_icon() + if("-unlock") + REMOTE.locked = 0 + . += "APC panel OPEN" + REMOTE.update_icon() + //lock-unlock cover + if("-lock-cover") + REMOTE.coverlocked = 1 + . += "APC cover BLOCKED" + if("-unlock-cover") + REMOTE.coverlocked = 0 + . += "APC cover OPEN" + //light control + if("-light-up") + REMOTE.lighting = 3 + REMOTE.update_overlay_chan["Lighting"] = 3 + . += "Light up" + if("-light-down") + REMOTE.lighting = 0 + REMOTE.update_overlay_chan["Lighting"] = 0 + . += "Light down" + if("-light-auto") + REMOTE.lighting = 4 + REMOTE.update_overlay_chan["Lighting"] = 4 + . += "Light automated" + + + else + return "Wrong parametr" + REMOTE.update() + return + else + return "ACCESS ERROR" + + +// FIREALARM + if (copytext(txt[2],1,3) == "FA") + var/NTID = txt[2] + var/obj/machinery/firealarm/REMOTE = terminal.get_remote_ID(NTID) + if (length(txt)==2) + . += "Outputting data about firealarm([NTID]):
    " + . += "Name: [REMOTE.name]

    " + . += "Status: [REMOTE.detecting ? "Automatic" : "OFF"].

    " + return + else if (length(txt)==3) + switch(txt[3]) + if("-alarm") + REMOTE.alarm() + return "Activated" + if("-reset") + REMOTE.reset() + return "Deactivated" + if("-detect") + REMOTE.detecting = !REMOTE.detecting + return "Automatic switched to: [REMOTE.detecting ? "ON" : "OFF"]." + + else + . += "Syntax mismach" diff --git a/mods/ntnet/code/terminal/terminal-core.dm b/mods/ntnet/code/terminal/terminal-core.dm new file mode 100644 index 0000000000000..2df3043066320 --- /dev/null +++ b/mods/ntnet/code/terminal/terminal-core.dm @@ -0,0 +1 @@ +#include "commands\connect.dm" diff --git a/mods/ntnet/icons/obj_eyes.dmi b/mods/ntnet/icons/obj_eyes.dmi new file mode 100644 index 0000000000000..c79445c78325b Binary files /dev/null and b/mods/ntnet/icons/obj_eyes.dmi differ diff --git a/mods/ntnet/icons/onmob_eyes.dmi b/mods/ntnet/icons/onmob_eyes.dmi new file mode 100644 index 0000000000000..c0c87d8bafdfb Binary files /dev/null and b/mods/ntnet/icons/onmob_eyes.dmi differ diff --git a/mods/nyc_posters/README.md b/mods/nyc_posters/README.md new file mode 100644 index 0000000000000..58bf7b0fd71c6 --- /dev/null +++ b/mods/nyc_posters/README.md @@ -0,0 +1,77 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/797 + + + +## New Year 2023 Posters + +ID мода: NYC_POSTERS + + +### Описание мода + +Постеры сделанные для конкурса по случаю наступления 2023 года. + + +### Изменения *кор кода* + +- `code/unit_tests/icon_tests.dm`: `/datum/unit_test/icon_test/posters_shall_have_icon_states/start_test()` + + +### Оверрайды + +- `mods/_master_files/code/game/objects/effects/decals/contraband.dm`: `/obj/structure/sign/poster/set_poster()` + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +LordNest + diff --git a/mods/nyc_posters/_nyc_posters.dm b/mods/nyc_posters/_nyc_posters.dm new file mode 100644 index 0000000000000..bd820d704ac47 --- /dev/null +++ b/mods/nyc_posters/_nyc_posters.dm @@ -0,0 +1,4 @@ +/singleton/modpack/nyc_posters + name = "New Year 2023 Posters" + desc = "Постеры сделанные для конкурса по случаю наступления 2023 года." + author = "LordNest" diff --git a/mods/nyc_posters/_nyc_posters.dme b/mods/nyc_posters/_nyc_posters.dme new file mode 100644 index 0000000000000..b61f1a9913ecc --- /dev/null +++ b/mods/nyc_posters/_nyc_posters.dme @@ -0,0 +1,9 @@ +#ifndef MODPACK_NYC_POSTERS +#define MODPACK_NYC_POSTERS + +#include "_nyc_posters.dm" + +#include "code/nyc_posters.dm" +#include "code/singleton.dm" + +#endif diff --git a/mods/nyc_posters/code/nyc_posters.dm b/mods/nyc_posters/code/nyc_posters.dm new file mode 100644 index 0000000000000..9dcc16d8e63bd --- /dev/null +++ b/mods/nyc_posters/code/nyc_posters.dm @@ -0,0 +1,505 @@ +// --------------------------- // +// SS220 2023 New Year contest // +// --------------------------- // + +/singleton/poster/nyc + icon = 'mods/nyc_posters/icons/nyc_posters.dmi' + name = "NYC Poster" + desc = "You probably shouldn't be seeing this." + abstract_type = /singleton/poster/nyc + +/singleton/poster/nyc/mine + // by Скавен-крыс + icon_state = "mine" + name = "Mine" + desc = "Even in space, the profession of miners is in demand. And this poster \ + from Grayson Manufactories Ltd. encourages you to pick up a pickaxe and start \ + mining! \"We mining all, even space!\"" + + +/singleton/poster/nyc/tersten_ranger + // by Wastelander41 + icon_state = "tersten_ranger" + name = "Tersten Ranger" + desc = "Alsar Treiss is the first unathi on Tersten to become a Ranger. \ + Huge as a mountain, so is his gun. There is a small note in the corner: \ + Patrolling Tersten almost makes you wish for a nuclear winter." + +/singleton/poster/nyc/blood_donation + // by Kysovich + icon_state = "blood_donation" + name = "Стань донором крови!" + desc = "Плакат на недорогой бумаге, агитирующий сдать кровь или аналогичную \ + биологическую жидкость в ближайшем медицинском учреждении Nanotrasen. \ + Надпись на плакате гласит: \"Даже один стакан крови может спасти жизнь \ + ценного сотрудника!\"." + +/singleton/poster/nyc/krotovuha + // by Andrei + icon_state = "krotovuha" + name = "Krotovuha" + desc = "Krotovuha is a tincture of a space mole, could be found in the ICCG territory. \ + Usually made in a very small amounts by some moonshiners. It has a very unique flavor \ + many people would compare to spirit with stale earth after rain in a deciduous forest. \ + (ICCG Ministry of Health advises against consumption due to possible helminths or \ + other infection)." + +/singleton/poster/nyc/gas_advertisement + // by God Damn Turkey + icon_state = "gas_advertisement" + name = "Giant Armoured Serpentid" + desc = "Buy them today - they'll work whole their life without salary because they LOVE working!" + +/singleton/poster/nyc/obey + // by PyotrTheTchaikowsky + icon_state = "obey" + name = "Obey" + desc = "There is something more powerful than your weapon here, bureaucracy, \ + just accept it and obey." + +/singleton/poster/nyc/xeno_inferiority + // by Iceberg + icon_state = "xeno_inferiority" + name = "XENO INFERIORITY" + desc = "Propaganda poster sponsored by Rage of Humanity. Aimed at reminding a \ + REAL HUMAN about the importance of preserving jobs and living space for \ + new generations." + +/singleton/poster/nyc/multipassport + // by Derp + icon_state = "multipassport" + name = "Multipassport" + desc = "An old border service poster, below you can see the text: \"Regardless \ + of what system you are from and what planet you were born on, carry your passports \ + with you. A passport is a thing that everyone must have.\"" + +/singleton/poster/nyc/space_escort + // by dj-34 + icon_state = "space_escort" + name = "Space Escort" + desc = "A poster advertising a space escort service on high-speed shuttles. It says \ + \"We will will bring our client to any location - quickly, safely and comfortably!\"" + +/singleton/poster/nyc/unathi_mercenaries + // by Wastelander41 + icon_state = "unathi_mercenaries" + name = "Unathi mercenaries" + desc = "A poster depicting an unathi mercenary band named \"Black Bones\". You can see three \ + figures wearing custom heavy armor with lots of pouches, you can probably tell half of those \ + stuffed with protein bricks and not magazines. This particular band wearing all-black and dyes \ + their scales with dark paint, they are famous for bringing heaviest firearms on the battlefield, \ + which look like toys on them." + +/singleton/poster/nyc/wanted + // by PyotrTheTchaikowsky + icon_state = "wanted" + name = "Wanted!" + desc = "On the poster you can see: a bald, black-eyed woman, age 30, and she is wanted in \ + the vastness of the entire SCG space. What did she do to be so wanted..." + +/singleton/poster/nyc/wild_cargo + // by PyotrTheTchaikowsky + icon_state = "wild_cargo" + name = "Wild Cargo" + desc = "The beautiful wild place with their own sheriff." + +/singleton/poster/nyc/report + // by PyotrTheTchaikowsky + icon_state = "report" + name = "Report" + desc = "Always remember to report your superiors" + +/singleton/poster/nyc/attention + // by Derp + icon_state = "attention" + name = "Attention!" + desc = "\"Attention! Thank you for attention!\" - written on the poster. This appears to be \ + an old poster from the Human Resources Department, aimed at making employees more attentive \ + and willing to read every instruction they see." + +/singleton/poster/nyc/unexplored_species + // by PyotrTheTchaikowsky + icon_state = "unexplored_species" + name = "Unexplored species" + desc = "Poster made to promote space exploration and depicting fictional alien. You see a \ + wild-looking creature, a little bit similar to Unathi, but clearly not the same. Behind you \ + can see a rocky world with rivers of lava. Small note in the corner reads: \"The galaxy is \ + so big and how much there is to explore!\"" + +/singleton/poster/nyc/future_is_us + // by Nevek + icon_state = "future_is_us" + name = "Future is Us" + desc = "Propaganda poster. The poster depicts a human-explorer in a voidsuit, holding a helmet in \ + his hand. The poster says \"Future is us\". There is an outer space on a background. Isn't it \ + worth wearing a helmet in space?" + +/singleton/poster/nyc/keep_clean + // by Фанзиль + icon_state = "keep_clean" + name = "Keep clean" + desc = "On the poster you see a scalpel depicted on a blue background. The scalpel is so clean it's \ + shiny. The poster reminds of the importance of keeping surgical instruments sterile. The NT logo is \ + visible at the bottom left." + +/singleton/poster/nyc/forge + // by Скавен-крыс + icon_state = "forge" + name = "Forge" + desc = "In the poster you see many shuttles and ships flying into the unknown of space. \"Many ships and shuttles \ + go to different corners of the galaxy in search of resources, and the miners on them \ + forge their own destiny, for it is in their hands!\" \ + A small tag at the bottom indicates that this poster is sponsored by Grayson Manufactories - HRM" + + +/* Contraband only */ + +/singleton/poster/nyc/adme_midala + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by KandJX + icon_state = "adme_midala" + name = "Adme Midala" + desc = "Постер известной актрисы-политика времен позднего Терранского содружества на фоне Луны. \ + Девушка держит в руках старый пистолет модели Colt1911 и смотрит прямо вам в глаза. \ + От неё веет одновременно и изящностью, и решительностью. \ + Текст на постере гласит \"Stop the Martians\"." + +/singleton/poster/nyc/evening_before_12 + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by Den10901 + icon_state = "evening_before_12" + name = "Evening before 12" + desc = "Some old poster, colours faded a long time ago, only a few shades of green \ + and red can be seen. Is it tajaran? Old man? Santa? \"Died Moroz\"? There's \ + no answer on poster." + +/singleton/poster/nyc/know_the_enemy + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by NAKAII + icon_state = "know_the_enemy" + name = "Beware the pirates!" + desc = "A foreboding poster depicting the mask of a blood-red hardsuit. The caption \ + reads \"Know the enemy!\". There is also a tiny marking at the bottom of the poster, \ + it reads: \"Beware the frontier pirates!\"" + +/singleton/poster/nyc/the_goushque + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by tomatik + icon_state = "the_goushque" + name = "The Goushque" + desc = "Derived from Old French, A Goushque, or how they say it, Le Goushque is a tailless \ + amphibian with a short squat body, moist smooth skin, and very long hind legs for leaping." + +/singleton/poster/nyc/grinch + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by Mata + icon_state = "grinch" + name = "Grinch" + desc = "Find this bastard and don't let him ruin our holiday! Remuneration is attached. " + +/singleton/poster/nyc/work_for_profit + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by Kysovich + icon_state = "work_for_profit" + name = "Work for profit" + desc = "Always remember why you are here. Do your job, make more money for corp, \ + waste less money of corp. This is how things work in Nanotrasen." + +/singleton/poster/nyc/toolbox + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by PyotrTheTchaikowsky + icon_state = "toolbox" + name = "Toolbox" + desc = "You see a slightly battered poster, which shows a RED toolbox and the \ + inscription \"Danger, very robust!\", some people say that this red paint on \ + the poster is made of real blood." + +/singleton/poster/nyc/big_brother + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by Semonic_ + icon_state = "big_brother" + name = "BIG BROTHER" + desc = "Never forget that you can be followed at any moment. Even when you enjoy privacy and tranquility." + +/singleton/poster/nyc/doctor_griefsey + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by God Damn Turkey + icon_state = "doctor_griefsey" + name = "Dr. Griefsey" + desc = "Doctor Griefsey states: \"Drinking is redundant expenses of your corporate salary for treating your liver!\"" + +/singleton/poster/nyc/equality + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by God Damn Turkey + icon_state = "equality" + name = "EQUALITY" + desc = "A ripped of poster, that was showing a tajaran in HoS uniform. Nothing besides the title can be read." + +/singleton/poster/nyc/do_not_disturb + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by Derp + icon_state = "do_not_disturb" + name = "Do not disturb" + desc = "A medical department poster that says \"do not disturb\" at the bottom. On the \ + poster, you can see a surgeon in the middle of an operation covering a body on the \ + table from someone with his hand. You can also see an empty drip, drops of blood on \ + the floor, a flat pulse line... Hell, there is a body bag on the table. Glory to the \ + free medicine of Nanotrasen!" + +/singleton/poster/nyc/xmas_gas + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by PyotrTheTchaikowsky + icon_state = "xmas_gas" + name = "Xmas GAS" + desc = "The poster depicts the GAS that is dressed up like a Xmas tree, wish you a Merry Xmas and a happy New Year!" + +/singleton/poster/nyc/zeng_hu_pharmaceuticals + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by KoKoC + icon_state = "zeng_hu_pharmaceuticals" + name = "Zeng-Hu Pharmaceuticals" + desc = "This is a poster advertising Zeng-Hu Pharmaceuticals corporation. It shows a beaker filled \ + with a blue substance and a simple DNA picture. Also there are an unknown scientist in a white \ + labcoat. You can see some text in the bottom. \"The largest pharmaceutical company is ready to \ + provide you with any medical products for an extremely favorable price. All research is LEGAL!\"" + +/singleton/poster/nyc/good_mood_sponsor + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by Dobre Pachantok / pudge_xxl + icon_state = "good_mood_sponsor" + name = "Good Mood Sponsor" + desc = "A poster featuring different cocktails like Sugar Rush, Manhattan and others. A large \ + inscription is visible: \"The best way to forget insults and cheer up is alcohol!\"" + +/singleton/poster/nyc/true_hero + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by Derp + icon_state = "true_hero" + name = "True hero" + desc = "Shabby, hand-painted paper torn from the sides. It looks like it used to be a label either \ + on a barrel or on a container. The poster shows a janitor in a darkened room, it looks like he came \ + there to change lights. Below you can see the postscript: \"True hero\"." + +/singleton/poster/nyc/space_dwarf + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by Скавен-крыс + icon_state = "space_dwarf" + name = "Space Dwarf" + desc = "This poster shows a bearded man with a mug of beer. \"After your shift at the mine, \ + it's always a good idea to go to the bar and refresh yourself with a cold mug of beer. After all, no one will \ + judge you for wiping your pants and dancing drunk.\" The tag at the bottom \ + of the poster indicates that the poster is sponsored by Grayson Manufactories - HRM" + +/singleton/poster/nyc/good_old_times + poster_flags = POSTER_FLAG_RANDOM_PICK | POSTER_FLAG_CONTRABAND + // by Скавен-крыс + icon_state = "good_old_times" + name = "Good Old Times" + desc = "A poster with a character from the old days, no one remembers his name, but they usually talk about him in a good way" + +/* Resomi....... */ + +/* +/singleton/poster/nyc/imperium_we_see + // by Derp + icon_state = "imperium_we_see" + name = "Imperium" + desc = "A hastily made poster on cheap paper. Someone really dislikes Resomi, \ + since he decided to make this poster. Everyone knows that the Imperials won't \ + come here. Isn't that right?" + +/singleton/poster/nyc/shirisai + // by Derp + icon_state = "shirisai" + name = "Shirisai" + desc = "Shirisai - the home planet of Resomi. A cold and snowy world, mostly covered in tundra. \ + And why do many resomi flee from there?" + +/singleton/poster/nyc/imperium_calls + // by Derp + icon_state = "imperium_calls" + name = "Imperium calls" + desc = "An old shabby propaganda poster. On the poster you can see some kind of cold planet \ + and a calling resomi with a coat of arms. There are no corners at the lower part of the poster, \ + probably someone tried to rip it off, but he did not have enough height." + +/singleton/poster/nyc/together + // by TiranShot + icon_state = "together" + name = "Together" + desc = "A handmade poster. The poster depicts the coat of arms of the new Resomi union in the form \ + of three multi-colored feathers. The poster says \"Unite, feathers\", \"Let's build a new house\"." +*/ + + +/* OBJECTS */ +/* Common posters */ + +/obj/structure/sign/poster/nyc + icon = 'mods/nyc_posters/icons/nyc_posters.dmi' + random_poster_base_type = /singleton/poster/nyc + +/obj/structure/sign/poster/nyc/mine + icon_state = "mine" + poster_type = /singleton/poster/nyc/mine + +/obj/structure/sign/poster/nyc/tersten_ranger + icon_state = "tersten_ranger" + poster_type = /singleton/poster/nyc/tersten_ranger + +/obj/structure/sign/poster/nyc/blood_donation + icon_state = "blood_donation" + poster_type = /singleton/poster/nyc/blood_donation + +/obj/structure/sign/poster/nyc/krotovuha + icon_state = "krotovuha" + poster_type = /singleton/poster/nyc/krotovuha + +/obj/structure/sign/poster/nyc/gas_advertisement + icon_state = "gas_advertisement" + poster_type = /singleton/poster/nyc/gas_advertisement + +/obj/structure/sign/poster/nyc/obey + icon_state = "obey" + poster_type = /singleton/poster/nyc/obey + +/obj/structure/sign/poster/nyc/xeno_inferiority + icon_state = "xeno_inferiority" + poster_type = /singleton/poster/nyc/xeno_inferiority + +/obj/structure/sign/poster/nyc/multipassport + icon_state = "multipassport" + poster_type = /singleton/poster/nyc/multipassport + +/obj/structure/sign/poster/nyc/space_escort + icon_state = "space_escort" + poster_type = /singleton/poster/nyc/space_escort + +/obj/structure/sign/poster/nyc/unathi_mercenaries + icon_state = "unathi_mercenaries" + poster_type = /singleton/poster/nyc/unathi_mercenaries + +/obj/structure/sign/poster/nyc/wanted + icon_state = "wanted" + poster_type = /singleton/poster/nyc/wanted + +/obj/structure/sign/poster/nyc/wild_cargo + icon_state = "wild_cargo" + poster_type = /singleton/poster/nyc/wild_cargo + +/obj/structure/sign/poster/nyc/report + icon_state = "report" + poster_type = /singleton/poster/nyc/report + +/obj/structure/sign/poster/nyc/attention + icon_state = "attention" + poster_type = /singleton/poster/nyc/attention + +/obj/structure/sign/poster/nyc/unexplored_species + icon_state = "unexplored_species" + poster_type = /singleton/poster/nyc/unexplored_species + + +/obj/structure/sign/poster/nyc/future_is_us + icon_state = "future_is_us" + poster_type = /singleton/poster/nyc/future_is_us + +/obj/structure/sign/poster/nyc/keep_clean + icon_state = "keep_clean" + poster_type = /singleton/poster/nyc/keep_clean + +/obj/structure/sign/poster/forge + icon_state = "keep_clean" + poster_type = /singleton/poster/nyc/forge + + +/* Contraband only */ + +/obj/structure/sign/poster/nyc/adme_midala + icon_state = "adme_midala" + poster_type = /singleton/poster/nyc/adme_midala + +/obj/structure/sign/poster/nyc/evening_before_12 + icon_state = "evening_before_12" + poster_type = /singleton/poster/nyc/evening_before_12 + +/obj/structure/sign/poster/nyc/know_the_enemy + icon_state = "know_the_enemy" + poster_type = /singleton/poster/nyc/know_the_enemy + +/obj/structure/sign/poster/nyc/the_goushque + icon_state = "the_goushque" + poster_type = /singleton/poster/nyc/the_goushque + +/obj/structure/sign/poster/nyc/grinch + icon_state = "grinch" + poster_type = /singleton/poster/nyc/grinch + +/obj/structure/sign/poster/nyc/work_for_profit + icon_state = "work_for_profit" + poster_type = /singleton/poster/nyc/work_for_profit + +/obj/structure/sign/poster/nyc/toolbox + icon_state = "toolbox" + poster_type = /singleton/poster/nyc/toolbox + +/obj/structure/sign/poster/nyc/big_brother + icon_state = "big_brother" + poster_type = /singleton/poster/nyc/big_brother + +/obj/structure/sign/poster/nyc/doctor_griefsey + icon_state = "doctor_griefsey" + poster_type = /singleton/poster/nyc/doctor_griefsey + +/obj/structure/sign/poster/nyc/equality + icon_state = "equality" + poster_type = /singleton/poster/nyc/equality + +/obj/structure/sign/poster/nyc/do_not_disturb + icon_state = "do_not_disturb" + poster_type = /singleton/poster/nyc/do_not_disturb + +/obj/structure/sign/poster/nyc/xmas_gas + icon_state = "xmas_gas" + poster_type = /singleton/poster/nyc/xmas_gas + +/obj/structure/sign/poster/nyc/zeng_hu_pharmaceuticals + icon_state = "zeng_hu_pharmaceuticals" + poster_type = /singleton/poster/nyc/zeng_hu_pharmaceuticals + +/obj/structure/sign/poster/nyc/good_mood_sponsor + icon_state = "good_mood_sponsor" + poster_type = /singleton/poster/nyc/good_mood_sponsor + +/obj/structure/sign/poster/nyc/true_hero + icon_state = "true_hero" + poster_type = /singleton/poster/nyc/true_hero + +/obj/structure/sign/poster/space_dwarf + icon_state = "good_mood_sponsor" + poster_type = /singleton/poster/nyc/space_dwarf + +/obj/structure/sign/poster/good_old_times + icon_state = "true_hero" + poster_type = /singleton/poster/nyc/good_old_times + + +/* Resomi....... */ + +/* +/obj/structure/sign/poster/nyc/imperium_we_see + icon_state = "imperium_we_see" + poster_type = /singleton/poster/nyc/imperium_we_see + +/obj/structure/sign/poster/nyc/shirisai + icon_state = "shirisai" + poster_type = /singleton/poster/nyc/shirisai + +/obj/structure/sign/poster/nyc/imperium_calls + icon_state = "imperium_calls" + poster_type = /singleton/poster/nyc/imperium_calls + +/obj/structure/sign/poster/nyc/together + icon_state = "together" + poster_type = /singleton/poster/nyc/together +*/ diff --git a/mods/nyc_posters/code/singleton.dm b/mods/nyc_posters/code/singleton.dm new file mode 100644 index 0000000000000..327484519353e --- /dev/null +++ b/mods/nyc_posters/code/singleton.dm @@ -0,0 +1,2 @@ +/singleton/poster + var/icon = 'icons/obj/structures/contraband.dmi' diff --git a/mods/nyc_posters/icons/nyc_posters.dmi b/mods/nyc_posters/icons/nyc_posters.dmi new file mode 100644 index 0000000000000..621af803b1048 Binary files /dev/null and b/mods/nyc_posters/icons/nyc_posters.dmi differ diff --git a/mods/petting_zoo/README.md b/mods/petting_zoo/README.md new file mode 100644 index 0000000000000..b8382692fc398 --- /dev/null +++ b/mods/petting_zoo/README.md @@ -0,0 +1,81 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/16 +- https://github.com/SierraBay/SierraBay12/pull/1824 + + + +## Мод-пример + +ID мода: PETTING_ZOO + + +### Описание мода + +Различное зверьё + + +### Изменения *кор кода* + +- `Отсутствуют` + + +### Оверрайды + +- `Отсутствуют` + + + +### Дефайны + +- `Отсутствуют` + + +### Используемые файлы, не содержащиеся в модпаке + +- `Отсутствуют` + + +### Авторы: + +LordNest (Code) +PapaLeroy (Sprites) +Zhuzhila (AI) + diff --git a/mods/petting_zoo/_petting_zoo.dm b/mods/petting_zoo/_petting_zoo.dm new file mode 100644 index 0000000000000..d22c828906b69 --- /dev/null +++ b/mods/petting_zoo/_petting_zoo.dm @@ -0,0 +1,5 @@ + +/singleton/modpack/petting_zoo + name = "Petting Zoo" + desc = "Контактный зоопарк имени Папы Лероя. Добавляет различных животных в билд." + author = "Papa Leroy#5647, LordNest" diff --git a/mods/petting_zoo/_petting_zoo.dme b/mods/petting_zoo/_petting_zoo.dme new file mode 100644 index 0000000000000..e0ea31aeeca28 --- /dev/null +++ b/mods/petting_zoo/_petting_zoo.dme @@ -0,0 +1,12 @@ +#ifndef MODPACK_PETTING_ZOO +#define MODPACK_PETTING_ZOO + +#include "_petting_zoo.dm" +#include "code/beasts.dm" +#include "code/commanded.dm" +#include "code/datums.dm" +#include "code/fox.dm" +#include "code/koala.dm" +#include "code/rabbit.dm" + +#endif diff --git a/mods/petting_zoo/code/beasts.dm b/mods/petting_zoo/code/beasts.dm new file mode 100644 index 0000000000000..d34b59244e269 --- /dev/null +++ b/mods/petting_zoo/code/beasts.dm @@ -0,0 +1,496 @@ +/mob/living/simple_animal/butterfly + name = "butterfly" + desc = "A colorful butterfly, how'd it get up here?" + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' + icon_state = "butterfly" + icon_living = "butterfly" + icon_dead = "butterfly_dead" + turns_per_move = 1 + response_help = "shoos" + response_disarm = "brushes aside" + response_harm = "squashes" + maxHealth = 2 + health = 2 + harm_intent_damage = 1 + friendly = "nudges" + density = FALSE + pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GRILLE + mob_size = MOB_MINISCULE + say_list_type = /datum/say_list/butterfly + ai_holder = /datum/ai_holder/simple_animal/passive + +/mob/living/simple_animal/butterfly/Initialize(mapload, ...) + . = ..() + color = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) + +/datum/say_list/butterfly + emote_see = list("flutters") + +// New big cats. And i'm don't allow you to copypaste whole parent code, Leroy. Not like this + +/mob/living/simple_animal/friendly/cat/maine_coon + name = "maine coon" + desc = "What a hell of a cat!" + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' + icon_state = "maine_coon" + item_state = "maine_coon" + icon_living = "maine_coon" + icon_dead = "maine_coon_dead" + gender = NEUTER + +// What time is it? IT'S WAR CRIME TIME +/mob/living/simple_animal/friendly/cat/floppa + name = "caracal" + desc = "Well-known for distinctive tassels on its ears and a strong urge for dumplings." + icon = 'mods/petting_zoo/icons/leroy_beasts_32x64.dmi' + icon_state = "caracal" + item_state = "caracal" + icon_living = "caracal" + icon_dead = "caracal_dead" + default_pixel_x = -16 + pixel_x = -16 + gender = MALE + say_list_type = /datum/say_list/cat/floppa + ai_holder = /datum/ai_holder/simple_animal/passive/cat + +/datum/say_list/cat/floppa + emote_see = list("flaps its ears", "gnashes", "shakes its head") + emote_hear = list("chirps", "hisses") + speak = list("HSSSSS", "Maow!") + +// Dogs. Some kind of happinies is measured out in miles. What makes you think you're something special when you smile? + +/mob/living/simple_animal/friendly/dogs + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' + speak_emote = list("barks", "woofs") + turns_per_move = 10 + response_help = "pets" + response_disarm = "bops" + response_harm = "kicks" + see_in_dark = 5 + mob_size = 15 + possession_candidate = 1 + pass_flags = PASS_FLAG_TABLE + density = FALSE + + meat_type = /obj/item/reagent_containers/food/snacks/meat/corgi + meat_amount = 5 + skin_material = MATERIAL_SKIN_FUR_ORANGE + + var/obj/item/inventory_head + var/obj/item/inventory_back + + ai_holder = /datum/ai_holder/simple_animal/passive/corgi + say_list_type = /datum/say_list/dog + +/datum/say_list/dog + emote_see = list("wiggles its tail warily", "scratches itself") + emote_hear = list("woofs", "barks") + speak = list("Bark!", "Woof!") + +/mob/living/simple_animal/friendly/dogs/pug // Some kind of solitude is measured out in you + name = "pug" + real_name = "pug" + desc = "It's a pug." + icon_state = "pug" + icon_living = "pug" + icon_dead = "pug_dead" + mob_size = 8 + + meat_amount = 2 + + ai_holder = /datum/ai_holder/simple_animal/passive/corgi + say_list_type = /datum/say_list/corgi //we don't need repeat main say list here, aren't we? + +/mob/living/simple_animal/friendly/dogs/shiba_inu + name = "shiba inu" + real_name = "shiba inu" + desc = "This good boy demonstrates noticeably high intelligence." + icon_state = "shiba_inu" + icon_living = "shiba_inu" + icon_dead = "shiba_inu_dead" + +// Big Mon'keigh, ahem, just a normal gorilla + +/mob/living/simple_animal/hostile/gorilla + name = "gorilla" + desc = "A ground-dwelling, predominantly herbivorous ape that inhabits the tropic forests." + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' + icon_state = "gorilla" + icon_living = "gorilla" + icon_dead = "gorilla_dead" + maxHealth = 220 + health = 220 + speed = 0.2 + mob_size = MOB_LARGE + natural_weapon = /obj/item/natural_weapon/giant + break_stuff_probability = 80 + melee_attack_delay = 5 SECOND + attacktext = list("smashed", "whacked", "smacked") + attack_sound = list('sound/weapons/genhit1.ogg', + 'sound/weapons/punch1.ogg') + possession_candidate = 1 + ai_holder = /datum/ai_holder/simple_animal/retaliate + say_list_type = /datum/say_list/gorilla + + +/datum/say_list/gorilla + emote_see = list("stares menacingly", "scratches its chest") + emote_hear = list("growls menacingly") + +/datum/ai_holder/simple_animal/melee/gorilla/engage_target() + . = ..() + + var/mob/living/L = . + if(istype(L)) + if(prob(90)) + L.Weaken(3) + L.visible_message("\the [src] knocks down \the [L]!") + +// It's Wednesday, my dudes +/mob/living/simple_animal/friendly/frog + name = "frog" + desc = "They seem a little sad." + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' + icon_state = "frog" + icon_living = "frog" + icon_dead = "frog_dead" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" + turns_per_move = 5 + maxHealth = 15 + health = 15 + harm_intent_damage = 10 + density = FALSE + pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GRILLE + say_list_type = /datum/say_list/frog + ai_holder = /datum/ai_holder/simple_animal/passive + +/mob/living/simple_animal/friendly/frog/venomous + name = "rare frog" + desc = "They seem a little smug." + icon_state = "frog_venomous" + icon_living = "frog_venomous" + icon_dead = "frog_venomous_dead" + natural_weapon = /obj/item/natural_weapon/bite/weak + ///How much of a reagent the mob injects on attack + var/poison_per_bite = 3 + ///What reagent the mob injects targets with + var/poison_type = /datum/reagent/toxin/cyanide + +/datum/say_list/frog + speak = list("ribbit","croak") + emote_see = list("hops in a circle.", "shakes.") + +/mob/living/simple_animal/friendly/rabbit + name = "\improper rabbit" + desc = "He do be hoppin doe" + gender = PLURAL + health = 15 + maxHealth = 15 + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' + icon_state = "rabbit" + icon_living = "rabbit" + icon_dead = "rabbit_dead" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" + density = FALSE + turns_per_move = 3 + pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GRILLE + say_list_type = /datum/say_list/rabbit + ai_holder = /datum/ai_holder/simple_animal/passive + + var/body_color + +/datum/say_list/rabbit + speak = list("sniffles","twitches") + emote_hear = list("hops.") + emote_see = list("hops around","bounces up and down") + +/mob/living/simple_animal/friendly/rabbit/Initialize(mapload, ...) + . = ..() + if(!body_color) + body_color = pick( list("brown","black","white") ) + icon_state = "rabbit_[body_color]" + icon_living = "rabbit_[body_color]" + icon_dead = "rabbit_[body_color]_dead" + pixel_x = rand(-6, 6) + pixel_y = rand(0, 10) + +// A ya seen dis? +/mob/living/simple_animal/hostile/retaliate/kangaroo + name = "kangaroo" + real_name = "kangaroo" + desc = "A large marsupial herbivore. It has powerful hind legs, with nails that resemble long claws." + icon = 'mods/petting_zoo/icons/leroy_beasts_32x64.dmi' + icon_state = "kangaroo" // Credit: FoS + icon_living = "kangaroo" + icon_dead = "kangaroo_dead" + turns_per_move = 8 + response_help = "pets the" + response_disarm = "gently pushes aside" + response_harm = "hits the" + maxHealth = 150 + health = 150 + harm_intent_damage = 10 + natural_weapon = /obj/item/natural_weapon/claws/strong + attacktext = list("kicks", "leaps onto") + attack_sound = 'sound/weapons/bladeslice.ogg' // they have nails that work like claws, so, slashing sound + melee_attack_delay = 2 SECOND + move_to_delay = 4 // at 20ticks/sec, this is 5 tile/sec movespeed, about the same as a 'fast human'. + speed = -1 // '-1' converts to 1.5 total move delay, or 6.6 tiles/sec movespeed + can_escape = TRUE + ai_holder = /datum/ai_holder/simple_animal/retaliate + +// Hey, pink guy from local pond, you better have this dependencies working clear, because you far from your parent type +/mob/living/simple_animal/friendly/lizard/axolotl + name = "axolotl" + desc = "A cute tiny axolotl. And it's just like you - has no brain as well!" + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' + icon_state = "axolotl" + icon_living = "axolotl" + icon_dead = "axolotl_dead" + +// TG breached contaiment, call MTF +/mob/living/simple_animal/friendly/megamoth + name = "big moff" + desc = "Keep it away from fire." + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' + icon_state = "megamoth" + icon_living = "megamoth" + icon_dead = "megamoth_dead" + turns_per_move = 5 + see_in_dark = 6 + health = 5 + maxHealth = 5 + natural_weapon = /obj/item/natural_weapon/bite/weak + response_help = "pets" + response_disarm = "shoos" + response_harm = "stomps on" + mob_size = MOB_SMALL + possession_candidate = 1 + can_escape = TRUE + pass_flags = PASS_FLAG_TABLE + density = FALSE + ai_holder = /datum/ai_holder/simple_animal/passive + say_list_type = /datum/say_list/megamoth + +/datum/say_list/megamoth + emote_see = list("taps its paws", "ruffles its fur", "flaps its wings") + emote_hear = list("sizzles softly") + +// Big cats. This one don't like you +/mob/living/simple_animal/hostile/panther + name = "panther" + desc = "A long sleek, black cat with sharp teeth and claws." + icon = 'mods/petting_zoo/icons/leroy_beasts_32x64.dmi' + icon_state = "panther" + icon_living = "panther" + icon_dead = "panther_dead" + icon_rest = "panther_rest" + icon_gib = "panther_dead" + speed = 2.5 + turns_per_move = 3 + default_pixel_x = -16 + pixel_x = -16 + meat_type = /obj/item/reagent_containers/food/snacks/meat + meat_amount = 3 + bone_amount = 5 + skin_amount = 10 + skin_material = MATERIAL_SKIN_FUR_HEAVY + response_help = "pets the" + response_disarm = "gently pushes aside" + response_harm = "hits the" + maxHealth = 80 + health = 80 + natural_weapon = /obj/item/natural_weapon/claws/strong + can_escape = TRUE + melee_attack_delay = 0.5 SECOND + attacktext = list("clawed", "chomped") + harm_intent_damage = 5 + attack_sound = 'sound/weapons/bite.ogg' + possession_candidate = 1 + + see_in_dark = 8 + + ai_holder = /datum/ai_holder/simple_animal/retaliate + say_list_type = /datum/say_list/panther + +/datum/say_list/panther + emote_see = list("grooms its fur", "stretches", "wiggles its tail warily") + emote_hear = list("meows gruntly", "yawns", "hisses", "gnashes") + +/datum/ai_holder/simple_animal/melee/panther/engage_target() + . = ..() + + var/mob/living/L = . + if(istype(L)) + if(prob(25)) + L.Weaken(3) + L.visible_message("\the [src] knocks down \the [L]!") + +/mob/living/simple_animal/hostile/panther/on_update_icon() + . = ..() + return + +/mob/living/simple_animal/hostile/panther/get_natural_weapon() + if(natural_weapon) + qdel(natural_weapon) + natural_weapon = /obj/item/natural_weapon/claws/strong + return ..() + +/mob/living/simple_animal/hostile/panther/lion + name = "lion" + desc = "The proud bearer of his majestic mane." + icon = 'mods/petting_zoo/icons/leroy_beasts_32x64.dmi' + icon_state = "lion" + icon_living = "lion" + icon_dead = "lion_dead" + icon_gib = "lion_dead" + default_pixel_x = -16 + pixel_x = -16 + gender = MALE + +// Kovalski, analysis +/mob/living/simple_animal/penguin + name = "penguin" + real_name = "penguin" + response_help = "pets" + response_disarm = "bops" + response_harm = "kicks" + faction = list("penguin") + see_in_dark = 5 + turns_per_move = 10 + density = FALSE + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' + ai_holder = /datum/ai_holder/simple_animal/passive + +/mob/living/simple_animal/penguin/emperor + name = "emperor penguin" + real_name = "penguin" + desc = "Emperor of all he surveys." + + icon_state = "penguin" + icon_living = "penguin" + icon_dead = "penguin_dead" + say_list_type = /datum/say_list/penguin + maxHealth = 15 + health = 15 + harm_intent_damage = 3 + +/datum/say_list/penguin + speak = list("Gah Gah!", "NOOT NOOT!", "NOOT!", "Noot", "noot", "Prah!", "Grah!") + emote_hear = list("squawk!", "gakkers!", "noots.","NOOTS!") + emote_see = list("shakes its beak.", "flaps it's wings.","preens itself.") + +/mob/living/simple_animal/penguin/baby + name = "penguin chick" + real_name = "penguin" + desc = "Can't fly and barely waddles, but is the prince of all chicks." + icon_state = "penguin_baby" + icon_living = "penguin_baby" + icon_dead = "penguin_baby_dead" + mob_size = MOB_MINISCULE + say_list_type = /datum/say_list/penguin/baby + maxHealth = 5 + health = 5 + harm_intent_damage = 2 + +/datum/say_list/penguin/baby + speak = list("gah", "noot noot", "noot!", "noot", "squeee!", "noo!") + emote_see = list("shakes its beak.", "flaps it's wings.","preens itself.") + +/mob/living/simple_animal/penguin/baby/pet + name = "Major Willy" + desc = "The talisman and example of productivity for all cargo workers." + say_list_type = /datum/say_list/penguin/baby/pet + +/datum/say_list/penguin/baby/pet + speak = list("gah", "noot noot", "noot!", "noot", "squeee!", "noo!", "GET TO WORK THIS FUCKING INSTANT YOU DARN SLEEPY MAGGOTS!") + emote_see = list("shakes its beak.", "flaps it's wings.","preens itself.") + +// I think i little late for X-mas with this code. But anyway, this comments made for easier splitting different types of beasts, isn't it? +/mob/living/simple_animal/hostile/retaliate/reindeer + name = "reindeer" + desc = "The king of tundra, extremely endurant beast." + icon = 'mods/petting_zoo/icons/leroy_beasts_32x64.dmi' + icon_state = "reindeer" + icon_living = "reindeer" + icon_dead = "reindeer_dead" + maxHealth = 80 + health = 80 + harm_intent_damage = 5 + speed = 2.5 + turns_per_move = 3 + default_pixel_x = -16 + pixel_x = -16 + meat_type = /obj/item/reagent_containers/food/snacks/meat + meat_amount = 3 + bone_amount = 5 + skin_amount = 10 + skin_material = MATERIAL_SKIN_FUR_HEAVY + response_help = "pets the" + response_disarm = "gently pushes aside" + response_harm = "hits the" + natural_weapon = /obj/item/natural_weapon/large + + ai_holder = /datum/ai_holder/simple_animal/retaliate + +/datum/ai_holder/simple_animal/melee/reindeer/engage_target() + . = ..() + + var/mob/living/L = . + if(istype(L)) + if(prob(25)) + L.Weaken(3) + L.visible_message("\the [src] knocks down \the [L]!") + +/mob/living/simple_animal/hostile/panther/on_update_icon() + . = ..() + return + +/mob/living/simple_animal/hostile/panther/get_natural_weapon() + if(natural_weapon) + qdel(natural_weapon) + natural_weapon = /obj/item/natural_weapon/claws/strong + return ..() + +// And worker from HR NT Department +/mob/living/simple_animal/pet/sloth + name = "sloth" + desc = "An adorable, sleepy creature. Still twice more productive than most of the crewmembers." + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' + icon_state = "sloth" + icon_living = "sloth" + icon_dead = "sloth_dead" + gender = MALE + turns_per_move = 5 + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" + health = 25 + maxHealth = 25 + speed = 0.2 + say_list_type = /datum/say_list/sloth + can_escape = TRUE + pass_flags = PASS_FLAG_TABLE + density = TRUE + ai_holder = /datum/ai_holder/simple_animal/passive + +/datum/say_list/sloth + speak = list("Ahhhh...") + emote_hear = list("snores.","yawns.") + emote_see = list("dozes off.", "looks around sleepily.") + + +// Override of legacy space bear +/mob/living/simple_animal/hostile/bear + icon = 'mods/petting_zoo/icons/leroy_beasts_32x64.dmi' + icon_state = "brown_bear" + icon_living = "brown_bear" + icon_dead = "brown_bear_dead" + icon_gib = "bear_gib" + default_pixel_x = -16 + pixel_x = -16 diff --git a/mods/petting_zoo/code/commanded.dm b/mods/petting_zoo/code/commanded.dm new file mode 100644 index 0000000000000..45bb59fb8d684 --- /dev/null +++ b/mods/petting_zoo/code/commanded.dm @@ -0,0 +1,161 @@ +/mob/living/simple_animal/hostile/commanded/rex + var/list/possible_natural_weapon // Rex can attack with random natural weapon + name = "Rex" + desc = "A large.... dog?" + + icon_state = "lavadog" + icon_living = "lavadog" + icon_dead = "lavadog_dead" + + + health = 45 + maxHealth = 45 + speed = 8 + + density = TRUE + + natural_weapon = /obj/item/natural_weapon/bite + possible_natural_weapon = list(/obj/item/natural_weapon/bite, /obj/item/natural_weapon/claws) + can_escape = TRUE + + max_gas = list(GAS_PHORON = 10, GAS_CO2 = 10) + + response_help = "pets" + response_harm = "bites" + response_disarm = "pushes" + + known_commands = list("stay", "stop", "attack", "follow", "guard", "forget master", "obey", "forget target") + ai_holder = /datum/ai_holder/simple_animal/melee/commanded + +/mob/living/simple_animal/hostile/commanded/rex/get_natural_weapon() + if(natural_weapon) + qdel(natural_weapon) + natural_weapon = pick(possible_natural_weapon) + return ..() + +/mob/living/simple_animal/hostile/commanded/rex/hear_say(message, verb = "says", datum/language/language = null, alt_name = "", italics = 0, mob/speaker = null, sound/speech_sound, sound_vol) + + if(!master && istype(speaker, /mob/living/carbon/human)) + var/mob/living/carbon/human/S = speaker + if ("ACCESS_HEAD_OF_SECURITY" in S.GetAccess()) + master = S + ai_holder.leader = S + friends |= weakref(S) + allowed_targets -= S + S.guards += src + ..() + +/mob/living/simple_animal/hostile/commanded/rex/can_use_item(obj/item/O, mob/user) + if(istype(O, /obj/item/reagent_containers/food/snacks/meat) && stat != DEAD) + if(user != master) + visible_message(SPAN_WARNING("\The [src] started to growl")) + else + visible_message(SPAN_NOTICE("\The [user] start feeding the [src] [O]")) + if(do_after(user, 30, src)) + var/prev_AI_busy = ai_holder.busy + set_AI_busy(FALSE) + heal_overall_damage(10, 10) + qdel(O) + visible_message(SPAN_NOTICE("\The [src] ate [O]")) + set_AI_busy(prev_AI_busy) + + else + ..() + +/mob/living/simple_animal/hostile/commanded/rex/attack_hand(mob/living/carbon/human/target) + if(target.a_intent != I_HELP && retribution) //assume he wants to hurt us. + var/dealt_damage = harm_intent_damage + var/harm_verb = response_harm + if(ishuman(target) && target.species) + var/datum/unarmed_attack/attack = target.get_unarmed_attack(src) + dealt_damage = max(dealt_damage, attack.damage) + harm_verb = pick(attack.attack_verb) + if(attack.sharp || attack.edge) + adjustBleedTicks(dealt_damage) + + adjustBruteLoss(dealt_damage) + target.visible_message(SPAN_WARNING("[target] [harm_verb] \the [src]!")) + target.do_attack_animation(src) + + if((target == master) && prob(80)) + visible_message(SPAN_WARNING("The [src] whines")) + return TRUE + + target_mob = target + allowed_targets |= target + stance = STANCE_ATTACK + friends |= weakref(target) + set_AI_busy(FALSE) + ai_holder.react_to_attack(target) + return TRUE + + + else if(target.a_intent == I_HELP) + if((target == master) || (weakref(target) in friends)) + visible_message("The [src] wags its tail") + if(prob(20)) + say("Wuff!") + return TRUE + + visible_message(SPAN_WARNING("\The [src] started to growl")) + if(prob(10)) + attack_target(target) + + . = ..() + +/mob/living/simple_animal/hostile/commanded/dog + icon = 'mods/petting_zoo/icons/leroy_beasts_32x32.dmi' + speak_emote = list("barks", "woofs") + turns_per_move = 10 + response_help = "pets" + response_disarm = "bops" + response_harm = "kicks" + see_in_dark = 5 + mob_size = 15 + possession_candidate = 1 + pass_flags = PASS_FLAG_TABLE + density = FALSE + + meat_type = /obj/item/reagent_containers/food/snacks/meat/corgi + meat_amount = 5 + skin_material = MATERIAL_SKIN_FUR_ORANGE + + var/obj/item/inventory_head + var/obj/item/inventory_back + + ai_holder = /datum/ai_holder/simple_animal/melee/commanded + say_list_type = /datum/say_list/dog + +/datum/say_list/dog + emote_see = list("wiggles its tail warily", "scratches itself") + emote_hear = list("woofs", "barks") + speak = list("Bark!", "Woof!") + +/mob/living/simple_animal/hostile/commanded/dog/german + name = "german shepherd" + real_name = "german shepherd" + desc = "That very type of a dog that appears in everybody's mind in the first place." + icon_state = "german_shepherd" + icon_living = "german_shepherd" + icon_dead = "german_shepherd_dead" + +/mob/living/simple_animal/hostile/commanded/dog/german/black + icon_state = "german_shepherd_black" + icon_living = "german_shepherd_black" + icon_dead = "german_shepherd_black_dead" + +/mob/living/simple_animal/hostile/commanded/dog/golden_retriever + name = "golden retriever" + real_name = "golden retriever" + desc = "Your perfect companion." + icon_state = "golden_retriever" + icon_living = "golden_retriever" + icon_dead = "golden_retriever_dead" + +/mob/living/simple_animal/hostile/commanded/dog/bullterrier + name = "bullterrier" + real_name = "bullterrier" + desc = "Don't tempt this perky guy." + icon_state = "bullterrier" + icon_living = "bullterrier" + icon_dead = "bullterrier_dead" diff --git a/mods/petting_zoo/code/datums.dm b/mods/petting_zoo/code/datums.dm new file mode 100644 index 0000000000000..139aa6fcc9a3e --- /dev/null +++ b/mods/petting_zoo/code/datums.dm @@ -0,0 +1,319 @@ +#define COMMANDED_STOP 6 //basically 'do nothing' +#define COMMANDED_FOLLOW 7 //follows a target +#define COMMANDED_MISC 8 //catch all state for misc commands that need one. + +/mob/living/carbon + var/list/guards = list() // We need this list here + +/mob/living/simple_animal/hostile/commanded + name = "commanded" + stance = COMMANDED_STOP + natural_weapon = /obj/item/natural_weapon + density = FALSE + var/list/command_buffer = list() + var/list/known_commands = list("stay", "stop", "attack", "follow", "guard", "forget master", "forget target", "obey") + var/mob/master = null //undisputed master. Their commands hold ultimate sway and ultimate power. + var/list/allowed_targets = list() //WHO CAN I KILL D: + var/retribution = 1 //whether or not they will attack us if we attack them like some kinda dick. + var/list/protected_mobs = list() // who under our protection + + ai_holder = /datum/ai_holder/simple_animal/melee/commanded + +/datum/ai_holder/simple_animal/melee/commanded/can_attack(atom/movable/the_target, vision_required) + var/mob/living/simple_animal/hostile/commanded/H = holder + if(!(the_target in H.allowed_targets)) + return FALSE + return ..() + +/datum/ai_holder/simple_animal/melee/commanded/find_target(list/possible_targets, has_targets_list) + ai_log("commanded/find_target() : Entered.", AI_LOG_TRACE) + var/mob/living/simple_animal/hostile/commanded/C = holder + if(!length(C.allowed_targets)) + return null + var/mode = "specific" + if(C.allowed_targets[1] == "everyone") //we have been given the golden gift of murdering everything. Except our master, of course. And our friends. So just mostly everyone. + mode = "everyone" + for(var/atom/A in list_targets()) + var/mob/M = null + if(A == src) + continue + if(isliving(A)) + M = A + if(M && M.stat) + continue + if(mode == "specific") + if(!(A in C.allowed_targets)) + continue + C.stance = STANCE_IDLE + give_target(A) + return A + else + C.allowed_targets += A + if(M == C.master || (weakref(M) in C.friends)) + continue + C.stance = STANCE_IDLE + give_target(M) + return A + return ..() + +/mob/living/simple_animal/hostile/commanded/hear_say(message, verb = "says", datum/language/language = null, alt_name = "", italics = 0, mob/speaker = null, sound/speech_sound, sound_vol) + if(((weakref(speaker) in friends) && !master) || speaker == master) + command_buffer.Add(speaker) + command_buffer.Add(lowertext(html_decode(message))) + return FALSE + +/mob/living/simple_animal/hostile/commanded/hear_radio(message, verb="says", datum/language/language=null, part_a, part_b, part_c, mob/speaker = null, hard_to_hear = 0) + if(((weakref(speaker) in friends) && !master) || speaker == master) + command_buffer.Add(speaker) + command_buffer.Add(lowertext(html_decode(message))) + return FALSE + +/mob/living/simple_animal/hostile/commanded/Life() + . = ..() + if(!.) + return FALSE + while(length(command_buffer) > 0) + var/mob/speaker = command_buffer[1] + var/text = command_buffer[2] + var/filtered_name = lowertext(html_decode(name)) + if(dd_hasprefix(text,filtered_name) || dd_hasprefix(text,"everyone") || dd_hasprefix(text, "everybody")) //in case somebody wants to command 8 bears at once. + var/substring = copytext(text,length(filtered_name)+1) //get rid of the name. + listen(speaker,substring) + command_buffer.Remove(command_buffer[1],command_buffer[2]) + . = ..() + if(.) + switch(stance) + if(COMMANDED_FOLLOW) + follow_target() + if(COMMANDED_STOP) + commanded_stop() + + +//TODO:use AI following behaviour +/mob/living/simple_animal/hostile/commanded/proc/follow_target() + set_AI_busy(TRUE) + if(!target_mob) + return + + if(target_mob in ai_holder.list_targets()) + walk_to(src,target_mob,1,move_speed) + ai_holder.destination = target_mob.loc + else if(ai_holder.destination) + ai_holder.min_distance_to_destination = 0 + ai_holder.walk_to_destination() + step(src, get_dir(src.loc, target_mob.loc), move_speed) + if(get_dist(src,target_mob)<=3) + step(src, get_dir(src.loc, target_mob.loc), move_speed) + ai_holder.min_distance_to_destination = 1 + + +/mob/living/simple_animal/hostile/commanded/proc/commanded_stop() //basically a proc that runs whenever we are asked to stay put. Probably going to remain unused. + return + +/mob/living/simple_animal/hostile/commanded/proc/listen(mob/speaker, text) + for(var/command in known_commands) + if(findtext(text,command)) + switch(command) + if("stay") + if(stay_command(speaker,text)) //find a valid command? Stop. Don't try and find more. + break + if("stop") + if(stop_command(speaker,text)) + break + if("attack") + if(attack_command(speaker,text)) + break + if("follow") + if(follow_command(speaker,text)) + break + if("guard") + if(guard_command(speaker,text)) + break + if("forget master") + if(forget_master_command(speaker,text)) + break + if("forget target") + if(forget_target_command(speaker,text)) + break + if("obey") + if(obey_command(speaker,text)) + break + else + misc_command(speaker,text) //for specific commands + + return TRUE + +//returns a list of everybody we wanna do stuff with. +/mob/living/simple_animal/hostile/commanded/proc/get_targets_by_name(text, filter_friendlies = 0) + var/list/possible_targets = hearers(src,10) + . = list() + for(var/mob/M in possible_targets) + if(filter_friendlies && ((weakref(M) in friends) || M.faction == faction || M == master || M == src)) + continue + var/found = 0 + if(findtext(text, "[M]")) + found = 1 + else + var/list/parsed_name = splittext(replace_characters(lowertext(html_decode("[M]")),list("-"=" ", "."=" ", "," = " ", "'" = " ")), " ") //this big MESS is basically 'turn this into words, no punctuation, lowercase so we can check first name/last name/etc' + for(var/a in parsed_name) + if(a == "the" || length(a) < 2) //get rid of shit words. + continue + if(findtext(text,"[a]")) + found = 1 + break + if(found) + . += M + + +/mob/living/simple_animal/hostile/commanded/proc/clear_protected_mobs() + for(var/mob/living/carbon/guarded in protected_mobs) + guarded.guards -= src + friends -= weakref(guarded) + + protected_mobs = list() + +/mob/living/simple_animal/hostile/commanded/proc/attack_command(mob/speaker, text) + clear_protected_mobs() // I must attack something, don`t guard + target_mob = null //want me to attack something? Well I better forget my old target. + set_AI_busy(FALSE) + walk_to(src,0) + stance = STANCE_ATTACK + if(text == " attack." || findtext(text,"everyone") || findtext(text,"anybody") || findtext(text, "somebody") || findtext(text, "someone")) //if its just 'attack' then just attack anybody, same for if they say 'everyone', somebody, anybody. Assuming non-pickiness. + allowed_targets = list("everyone")//everyone? EVERYONE + return TRUE + + var/list/targets = get_targets_by_name(text) + allowed_targets -= "everyone" + for(var/target in targets) + allowed_targets |= target + + return length(targets) != 0 + +/mob/living/simple_animal/hostile/commanded/proc/stay_command(mob/speaker, text) + target_mob = null + stance = COMMANDED_STOP + set_AI_busy(TRUE) + walk_to(src,0) + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/stop_command(mob/speaker, text) + clear_protected_mobs() + allowed_targets = list() + walk_to(src,0) + ai_holder.target = null + target_mob = null //gotta stop SOMETHIN + stance = STANCE_IDLE + set_AI_busy(FALSE) + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/follow_command(mob/speaker, text) + //we can assume 'stop following' is handled by stop_command + clear_protected_mobs() + if(findtext(text,"me")) + stance = COMMANDED_FOLLOW + target_mob = speaker //this wont bite me in the ass later. + friends |= weakref(target_mob) + return TRUE + + var/list/targets = get_targets_by_name(text) + if(length(targets) > 1 || !length(targets)) //CONFUSED. WHO DO I FOLLOW? + return FALSE + + stance = COMMANDED_FOLLOW //GOT SOMEBODY. BETTER FOLLOW EM. + target_mob = targets[1] //YEAH GOOD IDEA + friends |= weakref(target_mob) + + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/guard_command(mob/living/carbon/speaker, text) + if(findtext(text,"me")) + stance = COMMANDED_FOLLOW + target_mob = speaker + clear_protected_mobs() + speaker.guards |= src + friends |= weakref(target_mob) + return TRUE + + var/list/targets = get_targets_by_name(text) + if(!length(targets)) + return FALSE + + for(var/mob/living/carbon/guarded_mob in targets) // only carbon lives need protection + if(!(src in guarded_mob.guards)) + guarded_mob.guards += src + protected_mobs += guarded_mob + friends |= weakref(guarded_mob) + + stance = COMMANDED_FOLLOW + target_mob = pick(targets) + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/forget_target_command(mob/speaker, text) + allowed_targets = list() + ai_holder.target = null + target_mob = null //gotta stop SOMETHIN + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/forget_master_command(mob/speaker, text) + if(speaker != master) + return FALSE + friends -= weakref(master) + + master = null // I`m alone, again, maybe my name is Hachiko? + ai_holder.leader = null + walk_to(src,0) + target_mob = null //gotta stop SOMETHIN + stance = STANCE_IDLE + set_AI_busy(FALSE) + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/obey_command(mob/speaker, text) + if(speaker != master) + return FALSE + + var/list/targets = list() + for(var/mob/living/carbon/human/H in get_targets_by_name(text)) //I want to obey humans + targets += H + if(length(targets) > 1 || !length(targets)) //CONFUSED. WHO DO I OBEY? + return FALSE + master = targets[1] + friends |= weakref(master) + ai_holder.leader = master + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/misc_command(mob/speaker, text) + return FALSE + +/mob/living/simple_animal/hostile/commanded/hit_with_weapon(obj/item/O, mob/living/user, effective_force, hit_zone) + //if they attack us, we want to kill them. None of that "you weren't given a command so free kill" bullshit. + . = ..() + if(. && retribution) + target_mob = user + allowed_targets |= target_mob //fuck this guy in particular. + stance = STANCE_ATTACK + friends -= weakref(user) + set_AI_busy(FALSE) + ai_holder.react_to_attack(user) + + +/mob/living/simple_animal/hostile/commanded/attack_hand(mob/living/carbon/human/M as mob) + ..() + if(M.a_intent == I_HURT && retribution) //assume he wants to hurt us. + target_mob = M + allowed_targets |= M //fuck this guy in particular. + stance = STANCE_ATTACK + friends -= weakref(M) + set_AI_busy(FALSE) + ai_holder.react_to_attack(M) + + +/mob/living/simple_animal/hostile/commanded/proc/hunt_on(mob/M) + if(M in ai_holder.list_targets()) + friends -= weakref(M) + set_AI_busy(FALSE) + stance = STANCE_ATTACK + allowed_targets |= M + +#undef COMMANDED_STOP +#undef COMMANDED_FOLLOW +#undef COMMANDED_MISC diff --git a/mods/petting_zoo/code/fox.dm b/mods/petting_zoo/code/fox.dm new file mode 100644 index 0000000000000..a47f8d773849c --- /dev/null +++ b/mods/petting_zoo/code/fox.dm @@ -0,0 +1,53 @@ +/mob/living/simple_animal/friendly/fox + holder_type = /obj/item/holder/fox + +/obj/item/holder/fox + slot_flags = null + icon = 'mods/petting_zoo/icons/mobs.dmi' + icon_state = "fox" + + item_icons = list( + slot_l_hand_str = 'mods/petting_zoo/icons/onmob/mob_holder.dmi', + slot_r_hand_str = 'mods/petting_zoo/icons/onmob/mob_holder.dmi', + ) + + item_state_slots = list( + slot_l_hand_str = "fox_l", + slot_r_hand_str = "fox_r", + ) + +//Foxxy +/mob/living/simple_animal/friendly/fox + name = "fox" + desc = "It's a fox." + icon = 'mods/petting_zoo/icons/mobs.dmi' + icon_state = "fox" + icon_living = "fox" + icon_dead = "fox_dead" + speak_emote = list("geckers", "barks") + turns_per_move = 5 + see_in_dark = 6 + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" + mob_size = MOB_SMALL + density = TRUE + + ai_holder = /datum/ai_holder/simple_animal/passive/fox + say_list_type = /datum/say_list/fox + +/datum/ai_holder/simple_animal/passive/fox // Как кошка, только лиса ~bear1ake + can_flee = TRUE + speak_chance = 1 + +/datum/say_list/fox + speak = list("Ack-Ack", "Ack-Ack-Ack-Ackawoooo", "Geckers", "Awoo", "Tchoff") + emote_hear = list("howls.", "barks.") + emote_see = list("shakes its head.", "shivers.") + +//Captain fox +/mob/living/simple_animal/friendly/fox/renault + name = "Renault" + desc = "Renault, the Captain's trustworthy female fox. Sometimes a bit smarter than an actual captain..." + gender = FEMALE + universal_speak = TRUE //actually smart. But rememer: Ack-Ack! diff --git a/mods/petting_zoo/code/koala.dm b/mods/petting_zoo/code/koala.dm new file mode 100644 index 0000000000000..266cfa67d3904 --- /dev/null +++ b/mods/petting_zoo/code/koala.dm @@ -0,0 +1,28 @@ +/mob/living/simple_animal/friendly/koala + name = "space koala" + desc = "A little grey bear, now much time he gonna sleep today?" + icon = 'mods/petting_zoo/icons/mobs.dmi' + icon_state = "koala" + icon_living = "koala" + icon_dead = "koala_dead" + maxHealth = 45 + health = 45 + speed = 4 + speak_emote = list("roar") + turns_per_move = 10 + see_in_dark = 6 + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" + + say_list_type = /datum/say_list/koala + +/datum/say_list/koala + speak = list("Rrr", "Wraarh...", "Pfrrr...") + emote_hear = list("grunting.","rustling.", "slowly yawns.") + emote_see = list("slowly turns around his head.", "rises to his feet, and lays to the ground on all fours.") + +/mob/living/simple_animal/friendly/koala/samorey + name = "Haradrim" + desc = "A lovable koala, named by man who love eucalyptus." + gender = MALE diff --git a/mods/petting_zoo/code/rabbit.dm b/mods/petting_zoo/code/rabbit.dm new file mode 100644 index 0000000000000..6c4257cb8f132 --- /dev/null +++ b/mods/petting_zoo/code/rabbit.dm @@ -0,0 +1,69 @@ +/mob/living/simple_animal/rabbit + holder_type = /obj/item/holder/rabbit + +/obj/item/holder/rabbit + slot_flags = null + icon = 'mods/petting_zoo/icons/mobs.dmi' + icon_state = "rabbit_white" + + item_icons = list( + slot_l_hand_str = 'mods/petting_zoo/icons/onmob/mob_holder.dmi', + slot_r_hand_str = 'mods/petting_zoo/icons/onmob/mob_holder.dmi', + ) + + item_state_slots = list( + slot_l_hand_str = "rabbit_l", + slot_r_hand_str = "rabbit_r", + ) + +/mob/living/simple_animal/rabbit + name = "\improper rabbit" + desc = "The hippiest hop around." + icon = 'mods/petting_zoo/icons/mobs.dmi' + icon_state = "rabbit_white" + icon_living = "rabbit_white" + icon_dead = "rabbit_white_dead" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "stomps" + speak_emote = list("sniffles","twitches") + meat_type = /obj/item/reagent_containers/food/snacks/meat + meat_amount = 1 + mob_size = MOB_SMALL + + ai_holder = /datum/ai_holder/simple_animal/passive + say_list_type = /datum/say_list/rabbit + +/datum/say_list/rabbit + emote_hear = list("hops.") + emote_see = list("hops around","bounces up and down") + +/mob/living/simple_animal/rabbit/brown + icon_state = "rabbit_brown" + icon_living = "rabbit_brown" + icon_dead = "rabbit_brown_dead" + +/mob/living/simple_animal/rabbit/black + icon_state = "rabbit_black" + icon_living = "rabbit_black" + icon_dead = "rabbit_black_dead" + +// Space one +/mob/living/simple_animal/rabbit/space + icon_state = "s_rabbit_white" + icon_living = "s_rabbit_white" + icon_dead = "s_rabbit_white_dead" + min_gas = list("oxygen" = 0) + max_gas = list("phoron" = 0, "carbon_dioxide" = 0) + minbodytemp = 0 + maxbodytemp = 1500 + +/mob/living/simple_animal/rabbit/space/brown + icon_state = "s_rabbit_brown" + icon_living = "s_rabbit_brown" + icon_dead = "s_rabbit_brown_dead" + +/mob/living/simple_animal/rabbit/space/black + icon_state = "s_rabbit_black" + icon_living = "s_rabbit_black" + icon_dead = "s_rabbit_black_dead" diff --git a/mods/petting_zoo/icons/leroy_beasts_32x32.dmi b/mods/petting_zoo/icons/leroy_beasts_32x32.dmi new file mode 100644 index 0000000000000..c8ec28de35908 Binary files /dev/null and b/mods/petting_zoo/icons/leroy_beasts_32x32.dmi differ diff --git a/mods/petting_zoo/icons/leroy_beasts_32x64.dmi b/mods/petting_zoo/icons/leroy_beasts_32x64.dmi new file mode 100644 index 0000000000000..2aaa16eb049db Binary files /dev/null and b/mods/petting_zoo/icons/leroy_beasts_32x64.dmi differ diff --git a/mods/petting_zoo/icons/mobs.dmi b/mods/petting_zoo/icons/mobs.dmi new file mode 100644 index 0000000000000..7aa5b529099bc Binary files /dev/null and b/mods/petting_zoo/icons/mobs.dmi differ diff --git a/mods/petting_zoo/icons/onmob/mob_holder.dmi b/mods/petting_zoo/icons/onmob/mob_holder.dmi new file mode 100644 index 0000000000000..961f568f27b9a Binary files /dev/null and b/mods/petting_zoo/icons/onmob/mob_holder.dmi differ diff --git a/mods/resomi/_resomi.dm b/mods/resomi/_resomi.dm new file mode 100644 index 0000000000000..4aee8166d2d08 --- /dev/null +++ b/mods/resomi/_resomi.dm @@ -0,0 +1,2 @@ +/singleton/modpack/resomi + name = "Resomi" diff --git a/mods/resomi/_resomi.dme b/mods/resomi/_resomi.dme new file mode 100644 index 0000000000000..fb86c78943c1d --- /dev/null +++ b/mods/resomi/_resomi.dme @@ -0,0 +1,20 @@ +#ifndef MODPACK_RESOMI +#define MODPACK_RESOMI + +#include "_resomi.dm" + +#include "code/gear.dm" +#include "code/language.dm" +#include "code/unit_tests.dm" + +#include "code/clothing/clothing.dm" +#include "code/clothing/glasses.dm" +#include "code/clothing/misc.dm" +#include "code/clothing/suits.dm" +#include "code/clothing/under.dm" + +#include "code/datum/body/organs.dm" +#include "code/datum/culture/resomi_culture.dm" +#include "code/datum/species.dm" + +#endif diff --git a/mods/resomi/code/clothing/accessories.dm.dm b/mods/resomi/code/clothing/accessories.dm.dm new file mode 100644 index 0000000000000..ba742c77a03c0 --- /dev/null +++ b/mods/resomi/code/clothing/accessories.dm.dm @@ -0,0 +1,7 @@ +//Resomi scarf +/obj/item/clothing/accessory/scarf/resomi + name = "small mantle" + desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks." + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_accessories_resomi.dmi' + icon_state = "small_mantle" + species_restricted = list(SPECIES_RESOMI) diff --git a/mods/resomi/code/clothing/clothing.dm b/mods/resomi/code/clothing/clothing.dm new file mode 100644 index 0000000000000..2c324706c5f78 --- /dev/null +++ b/mods/resomi/code/clothing/clothing.dm @@ -0,0 +1,165 @@ + + +//Shoes + +/obj/item/clothing/shoes/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_feet_resomi.dmi') + LAZYSET(sprite_sheets_obj, SPECIES_RESOMI, 'packs/infinity/icons/obj/clothing/species/resomi/obj_feet_resomi.dmi') + +//Gloves +/obj/item/clothing/gloves/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_hands_resomi.dmi') + + +//suit +/obj/item/clothing/suit/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_suit_resomi.dmi') + LAZYSET(sprite_sheets_obj, SPECIES_RESOMI, 'packs/infinity/icons/obj/clothing/species/resomi/obj_suit_resomi.dmi') + +//rig +/obj/item/rig/eva/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi') + +/obj/item/rig/light/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi') + +/obj/item/rig/medical/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi') + +/obj/item/rig/hazard/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi') + +/obj/item/rig/combat/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi') + +/obj/item/rig/merc/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi') + +/obj/item/rig/zero/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi') + +/obj/item/rig/ce/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi') + +/obj/item/rig/industrial/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi') + +/obj/item/rig/hazmat/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi') + +/obj/item/rig/ert/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi') + +/obj/item/rig/command/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi') + + +/* +/obj/item/clothing/head/helmet/space/rig/Initialize() + . = ..() + LAZYADD(species_restricted, list(SPECIES_RESOMI)) + +/obj/item/clothing/gloves/rig/Initialize() + . = ..() + LAZYADD(species_restricted, list(SPECIES_RESOMI)) + +/obj/item/clothing/shoes/magboots/rig/Initialize() + . = ..() + LAZYADD(species_restricted, list(SPECIES_RESOMI)) + +/obj/item/clothing/suit/space/rig/Initialize() + . = ..() + LAZYADD(species_restricted, list(SPECIES_RESOMI)) +*/ + + +/obj/item/storage/belt/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_belt_resomi.dmi') + +/obj/item/clothing/accessory/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_accessories_resomi.dmi') + LAZYSET(sprite_sheets_obj, SPECIES_RESOMI, 'packs/infinity/icons/obj/clothing/species/resomi/obj_accessories_resomi.dmi') +// back +/obj/item/storage/backpack/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_back_resomi.dmi') + +// under +/obj/item/clothing/under/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_under_resomi.dmi') + LAZYSET(sprite_sheets_obj, SPECIES_RESOMI, 'packs/infinity/icons/obj/clothing/species/resomi/obj_under_resomi.dmi') +//ears +/obj/item/clothing/ears/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_ears_resomi.dmi') + +//mask +/obj/item/clothing/mask/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_mask_resomi.dmi') + +//head +/obj/item/clothing/head/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_head_resomi.dmi') + LAZYSET(sprite_sheets_obj, SPECIES_RESOMI, 'packs/infinity/icons/obj/clothing/species/resomi/obj_head_resomi.dmi') +//glasses +/obj/item/clothing/glasses/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_eyes_resomi.dmi') + LAZYSET(sprite_sheets_obj, SPECIES_RESOMI, 'packs/infinity/icons/obj/clothing/species/resomi/obj_eyes_resomi.dmi') + +//devices and machines +/obj/machinery/suit_cycler/Initialize() + . = ..() + species += SPECIES_RESOMI + +/obj/item/auto_cpr/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_suit_resomi.dmi') + +/obj/item/device/radio/headset/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_ears_resomi.dmi') + +/obj/item/clothing/mask/plunger/equipped(M, slot) + ..() + sprite_sheets[SPECIES_RESOMI] = (slot == slot_head ? 'mods/resomi/icons/clothing/onmob_head_resomi.dmi' : 'mods/resomi/icons/clothing/onmob_mask_resomi.dmi') + +/obj/item/card/id/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_id_resomi.dmi') + +/obj/item/handcuffs/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/misc.dmi') + +/obj/item/storage/belt/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_belt_resomi.dmi') + +/obj/item/tank/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_RESOMI, 'mods/resomi/icons/clothing/onmob_back_resomi.dmi') + +/obj/item/towel/equipped(M, slot) + ..() + sprite_sheets = list(SPECIES_RESOMI = (slot == slot_head ? 'mods/resomi/icons/clothing/onmob_head_resomi.dmi' : 'mods/resomi/icons/clothing/onmob_suit_resomi.dmi')) diff --git a/mods/resomi/code/clothing/glasses.dm b/mods/resomi/code/clothing/glasses.dm new file mode 100644 index 0000000000000..ee53db0044a1d --- /dev/null +++ b/mods/resomi/code/clothing/glasses.dm @@ -0,0 +1,30 @@ +/obj/item/clothing/glasses/sunglasses/lenses + name = "small sun lenses" + desc = "It looks fitted to nonhuman proportions. Usually, you can(?) see them in resomis' or monkeys' eyes." + item_icons = list(slot_glasses_str = 'mods/resomi/icons/clothing/onmob_eyes_resomi.dmi') + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_eyes_resomi.dmi' + icon_state = "sun_lenses" + item_state = null + species_restricted = list(SPECIES_RESOMI) + flash_protection = FLASH_PROTECTION_MODERATE + body_parts_covered = 0 + +/obj/item/clothing/glasses/sunglasses/sechud/lenses + name = "small sechud lenses" + desc = "Lenses with a HUD. This one has a sechud." + item_icons = list(slot_glasses_str = 'mods/resomi/icons/clothing/onmob_eyes_resomi.dmi') + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_eyes_resomi.dmi' + icon_state = "sec_lenses" + item_state = null + species_restricted = list(SPECIES_RESOMI) + flash_protection = FLASH_PROTECTION_MODERATE + +/obj/item/clothing/glasses/hud/health/lenses + name = "small medhud lenses" + desc = "A small lenses that scans the creatures in view and provides accurate data about their health status." + item_icons = list(slot_glasses_str = 'mods/resomi/icons/clothing/onmob_eyes_resomi.dmi') + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_eyes_resomi.dmi' + icon_state = "med_lenses" + item_state = null + flash_protection = FLASH_PROTECTION_MODERATE + species_restricted = list(SPECIES_RESOMI) diff --git a/mods/resomi/code/clothing/misc.dm b/mods/resomi/code/clothing/misc.dm new file mode 100644 index 0000000000000..b8869c1ddd9f8 --- /dev/null +++ b/mods/resomi/code/clothing/misc.dm @@ -0,0 +1,381 @@ +//Resomi scarf +/obj/item/clothing/accessory/scarf/resomi + name = "small mantle" + desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks." + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_accessories_resomi.dmi' + icon_state = "small_mantle" + species_restricted = list(SPECIES_RESOMI) + +/* +/obj/item/clothing/mask/gas/explorer_resomi + name = "exploratory mask" + desc = "It looks like a tracker's mask. Too small for tall humanoids." + icon = CUSTOM_ITEM_OBJ + item_icons = list(slot_wear_mask_str = CUSTOM_ITEM_MOB) + icon_state = "explorer_mask" + item_state = "explorer_mask" + species_restricted = list(SPECIES_RESOMI) + sprite_sheets = list(SPECIES_RESOMI = CUSTOM_ITEM_MOB) +*/ + +/obj/item/clothing/shoes/workboots/resomi + icon_state = "resomi_workboots" + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_feet_resomi.dmi' + item_state = "workboots" + name = "small workboots" + desc = "Small and tight shoes with an iron sole for those who work in dangerous area or hate their paws" + + w_class = ITEM_SIZE_SMALL + species_restricted = list(SPECIES_RESOMI) + +/obj/item/clothing/shoes/workboots/resomi/New() + ..() + slowdown_per_slot[slot_shoes] = 0.3 + + +/obj/item/clothing/shoes/footwraps + name = "cloth footwraps" + desc = "A roll of treated canvas used for wrapping paws" + icon_state = "clothwrap" + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_feet_resomi.dmi' + item_state = "clothwrap" + force = 0 + item_flags = ITEM_FLAG_SILENT + w_class = ITEM_SIZE_SMALL + species_restricted = list(SPECIES_RESOMI) + drop_sound = 'sound/items/drop/cloth.ogg' + pickup_sound = 'sound/items/pickup/cloth.ogg' + +/obj/item/clothing/shoes/footwraps/socks_resomi + name = "koishi" + desc = "Looks like socks but with toe holes and thick sole." + icon_state = "socks" + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_feet_resomi.dmi' + item_state = "socks" + + +/obj/item/clothing/under/thermal + name = "thermal suit" + desc = "Gray thermal suit. Nothing interesting." + icon = 'packs/infinity/icons/obj/clothing/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'packs/infinity/icons/mob/onmob/onmob_under.dmi') + icon_state = "gray_camo" + item_state = "gray_camo" + item_flags = ITEM_FLAG_THICKMATERIAL + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + min_cold_protection_temperature = T0C - 75 + max_heat_protection_temperature = T0C + 50 + var/max_cooling = 1.2 // in degrees per second - probably don't need to mess with heat capacity here + var/thermostat = T0C + 10 + + +/obj/item/clothing/under/thermal/resomi + name = "small thermal suit" + desc = "Looks like very small suit. For children or resomi? This thermal suit is black." + icon_state = "thermores_1" + item_state = "thermores_1" + thermostat = T0C + species_restricted = list(SPECIES_RESOMI) + sprite_sheets = list( + SPECIES_RESOMI = 'packs/infinity/icons/mob/onmob/onmob_under.dmi', + ) + +/obj/item/clothing/under/thermal/resomi/white + desc = "Looks like very small suit. For children or resomi? This thermal suit is white. " + icon_state = "thermores_2" + item_state = "thermores_2" + + +/datum/sprite_accessory/hair/resomi + name = "Resomi Plumage" + icon_state = "resomi_default" + icon = 'packs/infinity/icons/mob/human_races/species/resomi/hair.dmi' + species_allowed = list(SPECIES_RESOMI) + +/datum/sprite_accessory/hair/resomi/ears + name = "Resomi Ears" + icon_state = "resomi_ears" + +/datum/sprite_accessory/hair/resomi/excited + name = "Resomi Spiky" + icon_state = "resomi_spiky" + +/datum/sprite_accessory/hair/resomi/hedgehog + name = "Resomi Hedgehog" + icon_state = "resomi_hedge" + +/datum/sprite_accessory/hair/resomi/long + name = "Resomi Unpruned" + icon_state = "resomi_long" + +/datum/sprite_accessory/hair/resomi/sunburst + name = "Resomi Sunburst" + icon_state = "resomi_burst_short" + +/datum/sprite_accessory/hair/resomi/mohawk + name = "Resomi Mohawk" + icon_state = "resomi_mohawk" + +/datum/sprite_accessory/hair/resomi/pointy + name = "Resomi Pointy" + icon_state = "resomi_pointy" + +/datum/sprite_accessory/hair/resomi/upright + name = "Resomi Upright" + icon_state = "resomi_upright" + +/datum/sprite_accessory/hair/resomi/mane + name = "Resomi Mane" + icon_state = "resomi_mane" + +/datum/sprite_accessory/hair/resomi/mane_beardless + name = "Resomi Large Ears" + icon_state = "resomi_mane_beardless" + +/datum/sprite_accessory/hair/resomi/droopy + name = "Resomi Droopy" + icon_state = "resomi_droopy" + +/datum/sprite_accessory/hair/resomi/mushroom + name = "Resomi Mushroom" + icon_state = "resomi_mushroom" + +/datum/sprite_accessory/hair/resomi/twies + name = "Resomi Twies" + icon_state = "resomi_twies" + +/datum/sprite_accessory/hair/resomi/backstrafe + name = "Resomi Backstrafe" + icon_state = "resomi_backstrafe" + +/datum/sprite_accessory/hair/resomi/longway + name = "Resomi Long way" + icon_state = "resomi_longway" + +/datum/sprite_accessory/hair/resomi/notree + name = "Resomi Tree" + icon_state = "resomi_notree" + +/datum/sprite_accessory/hair/resomi/fluffymohawk + name = "Resomi Fluffy Mohawk" + icon_state = "resomi_fluffymohawk" + +// MARKINGS + +/datum/sprite_accessory/marking/resomi + icon = 'packs/infinity/icons/mob/human_races/species/resomi/markings.dmi' + species_allowed = list(SPECIES_RESOMI) + do_coloration = TRUE + +/datum/sprite_accessory/marking/resomi/resomi_fluff + name = "Resomi underfluff" + icon_state = "resomi_fluff" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_GROIN,BP_CHEST,BP_HEAD) + +/datum/sprite_accessory/marking/resomi/resomi_small_feathers + name = "Resomi small wingfeathers" + icon_state = "resomi_sf" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND,BP_CHEST) + + +/* + * RESOMI SOL GOV UNDER + */ + +/obj/item/clothing/under/solgov/pt/expeditionary/resomi + name = "small expeditionary pt smock" + desc = "It looks fitted to nonhuman proportions." + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_under_resomi.dmi' + item_icons = list('mods/resomi/icons/clothing/onmob_under_resomi.dmi') + icon_state = "resomi_expeditionpt" + worn_state = "resomi_expeditionpt" + species_restricted = list(SPECIES_RESOMI) + sprite_sheets = list(SPECIES_RESOMI = 'mods/resomi/icons/clothing/onmob_under_resomi.dmi') + +/obj/item/clothing/under/solgov/utility/expeditionary/resomi + name = "small expeditionary uniform" + desc = "It looks fitted to nonhuman proportions." + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_under_resomi.dmi' + item_icons = list('mods/resomi/icons/clothing/onmob_under_resomi.dmi') + icon_state = "resomi_blackutility" + worn_state = "resomi_blackutility" + species_restricted = list(SPECIES_RESOMI) + sprite_sheets = list(SPECIES_RESOMI = 'mods/resomi/icons/clothing/onmob_under_resomi.dmi') + +/obj/item/clothing/under/solgov/utility/expeditionary/officer/resomi + name = "small expeditionary officer's uniform" + desc = "It looks fitted to nonhuman proportions." + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_under_resomi.dmi' + item_icons = list('mods/resomi/icons/clothing/onmob_under_resomi.dmi') + icon_state = "resomi_blackutility_com" + worn_state = "resomi_blackutility_com" + species_restricted = list(SPECIES_RESOMI) + sprite_sheets = list(SPECIES_RESOMI = 'mods/resomi/icons/clothing/onmob_under_resomi.dmi') + accessories = list(/obj/item/clothing/accessory/solgov/department/command) + +/obj/item/clothing/under/solgov/mildress/expeditionary/resomi + name = "small expeditionary dress uniform" + desc = "It looks fitted to nonhuman proportions." + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_under_resomi.dmi' + item_icons = list('mods/resomi/icons/clothing/onmob_under_resomi.dmi') + icon_state = "resomi_greydress" + worn_state = "resomi_greydress" + species_restricted = list(SPECIES_RESOMI) + sprite_sheets = list(SPECIES_RESOMI = 'mods/resomi/icons/clothing/onmob_under_resomi.dmi') + + +/datum/gear/uniform/resomi + display_name = "(Resomi) smock, grey" + path = /obj/item/clothing/under/resomi + whitelisted = list(SPECIES_RESOMI) + +/datum/gear/uniform/resomi/New() + ..() + var/uniform = list() + uniform["rainbow smock"] = /obj/item/clothing/under/resomi/rainbow + uniform["engineering smock"] = /obj/item/clothing/under/resomi/yellow + uniform["robotics smock"] = /obj/item/clothing/under/resomi/robotics + uniform["security smock"] = /obj/item/clothing/under/resomi/red + gear_tweaks += new/datum/gear_tweak/path(uniform) + +/datum/gear/uniform/resomi/white + display_name = "(Resomi) smock, colored" + path = /obj/item/clothing/under/resomi/white + flags = GEAR_HAS_COLOR_SELECTION + +/datum/gear/uniform/resomi/dress + display_name = "(Resomi) dresses selection" + path = /obj/item/clothing/under/resomi/dress + flags = GEAR_HAS_TYPE_SELECTION + +/datum/gear/uniform/resomi/utility + display_name = "(Resomi) uniform selection" + path = /obj/item/clothing/under/resomi/utility + flags = GEAR_HAS_TYPE_SELECTION + +/datum/gear/uniform/resomi/sport + display_name = "(Resomi) uniform, Sport" + path = /obj/item/clothing/under/resomi/sport + +/datum/gear/uniform/resomi/med + display_name = "(Resomi) uniform, Medical" + path = /obj/item/clothing/under/resomi/medical + +/datum/gear/uniform/resomi/science + display_name = "(Resomi) uniform, Science" + path = /obj/item/clothing/under/resomi/science + +/datum/gear/uniform/resomi/dark_worksmock + display_name = "(Resomi) work uniform, dark" + path = /obj/item/clothing/under/resomi/work_black + flags = GEAR_HAS_TYPE_SELECTION + +/datum/gear/uniform/resomi/light_worksmock + display_name = "(Resomi) work uniform, light" + path = /obj/item/clothing/under/resomi/work_white + flags = GEAR_HAS_TYPE_SELECTION + +/datum/gear/uniform/resomi/white/New() + return +/datum/gear/uniform/resomi/dress/New() + return +/datum/gear/uniform/resomi/utility/New() + return +/datum/gear/uniform/resomi/sport/New() + return +/datum/gear/uniform/resomi/med/New() + return +/datum/gear/uniform/resomi/science/New() + return +/datum/gear/uniform/resomi/dark_worksmock/New() + return +/datum/gear/uniform/resomi/light_worksmock/New() + return + +/datum/gear/eyes/resomi + display_name = "(Resomi) sun lenses" + path = /obj/item/clothing/glasses/sunglasses/lenses + whitelisted = list(SPECIES_RESOMI) + +/datum/gear/eyes/resomi/lenses_sec + display_name = "(Resomi) sun sechud lenses" + path = /obj/item/clothing/glasses/sunglasses/sechud/lenses + +/datum/gear/eyes/resomi/lenses_med + display_name = "(Resomi) sun medhud lenses" + path = /obj/item/clothing/glasses/hud/health/lenses + +/datum/gear/accessory/resomi_mantle + display_name = "(Resomi) small mantle" + path = /obj/item/clothing/accessory/scarf/resomi + flags = GEAR_HAS_COLOR_SELECTION + whitelisted = list(SPECIES_RESOMI) + +/datum/gear/suit/resomi_cloak + display_name = "(Resomi) small cloak" + path = /obj/item/clothing/suit/storage/toggle/Resomicoat + whitelisted = list(SPECIES_RESOMI) + +/datum/gear/suit/resomi_cloak/New() + ..() + var/resomi = list() + resomi["black cloak"] = /obj/item/clothing/suit/storage/toggle/Resomicoat + resomi["white cloak"] = /obj/item/clothing/suit/storage/toggle/Resomicoat/white + gear_tweaks += new/datum/gear_tweak/path(resomi) + +/datum/gear/shoes/resomi + display_name = "(Resomi) small workboots" + path = /obj/item/clothing/shoes/workboots/resomi + whitelisted = list(SPECIES_RESOMI) + +/datum/gear/shoes/resomi/footwraps + display_name = "(Resomi) foots clothwraps" + flags = GEAR_HAS_COLOR_SELECTION + path = /obj/item/clothing/shoes/footwraps + +/datum/gear/shoes/resomi/socks + display_name = "(Resomi) koishi" + flags = GEAR_HAS_COLOR_SELECTION + path = /obj/item/clothing/shoes/footwraps/socks_resomi + +/datum/gear/suit/resomicloak + display_name = "(Resomi) standard/job cloaks" + path = /obj/item/clothing/suit/storage/resomicloak + whitelisted = list(SPECIES_RESOMI) + flags = GEAR_HAS_SUBTYPE_SELECTION + +/datum/gear/suit/resomicloak_alt + display_name = "(Resomi) alt cloaks" + path = /obj/item/clothing/suit/storage/resomicloak_alt + whitelisted = list(SPECIES_RESOMI) + flags = GEAR_HAS_SUBTYPE_SELECTION + +/datum/gear/suit/resomicloak_belted + display_name = "(Resomi) belted cloaks" + path = /obj/item/clothing/suit/storage/resomicloak_belted + whitelisted = list(SPECIES_RESOMI) + flags = GEAR_HAS_SUBTYPE_SELECTION + +/datum/gear/suit/resomicloak + display_name = "(Resomi) Hooded Cloak" + path = /obj/item/clothing/suit/storage/hooded/resomi + whitelisted = list(SPECIES_RESOMI) + flags = GEAR_HAS_SUBTYPE_SELECTION + + +/datum/gear/suit/resomi_labcoat + display_name = "(Resomi) small labcoat" + path = /obj/item/clothing/suit/storage/toggle/Resomilabcoat + flags = GEAR_HAS_COLOR_SELECTION + whitelisted = list(SPECIES_RESOMI) + +/obj/item/toy/plushie/resomi + name = "resomi plush" + desc = "This is a plush resomi. Very soft, with a pompom on the tail. The toy is made well, as if alive. Looks like she is sleeping. Shhh!" + icon = 'packs/infinity/icons/obj/toy.dmi' + icon_state = "resomiplushie" + +/obj/item/clothing/accessory/necklace/collar/New() + sprite_sheets += list(SPECIES_RESOMI = 'mods/resomi/icons/clothing/misc.dmi') + . = ..() diff --git a/mods/resomi/code/clothing/suits.dm b/mods/resomi/code/clothing/suits.dm new file mode 100644 index 0000000000000..7dd92da4c12e9 --- /dev/null +++ b/mods/resomi/code/clothing/suits.dm @@ -0,0 +1,897 @@ + +////////////// +////resomi//// +////////////// + +/obj/item/clothing/suit/storage/toggle/Resomicoat + name = "small cloak" + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_suit_resomi.dmi' + desc = "A cloak that seems too small to fit a human." + icon_state = "resomicoat" + icon_open = "resomicoat_open" + icon_closed = "resomicoat" + body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS + species_restricted = list(SPECIES_RESOMI) + +/obj/item/clothing/suit/storage/toggle/Resomicoat/white + icon_state = "white_resomicoat" + icon_open = "white_resomicoat_open" + icon_closed = "white_resomicoat" + +/obj/item/clothing/suit/storage/toggle/Resomilabcoat + name = "small labcoat" + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_suit_resomi.dmi' + desc = "A labcoat that seems too small to fit a human." + icon_state = "resomi_labcoat" + icon_open = "resomi_labcoat_open" + icon_closed = "resomi_labcoat" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + species_restricted = list(SPECIES_RESOMI) + allowed = list(/obj/item/device/scanner/gas,/obj/item/stack/medical,/obj/item/reagent_containers/dropper,/obj/item/reagent_containers/syringe,/obj/item/reagent_containers/hypospray,/obj/item/device/scanner/health,/obj/item/device/flashlight/pen,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle,/obj/item/paper) + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0) + +//standart resomicloak + +/obj/item/clothing/suit/storage/resomicloak + name = "black and orange cloak" + desc = "It drapes over a Resomes's shoulders and closes at the neck with pockets convienently placed inside." + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_suit_resomi.dmi' + icon_state = "tesh_cloak_bo" + slots = 2 + species_restricted = list(SPECIES_RESOMI) + body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO + +/obj/item/clothing/suit/storage/resomicloak/Initialize() + . = ..() + if(pockets) + qdel(pockets) + pockets = new/obj/item/storage/internal/pouch(src, slots*BASE_STORAGE_COST(ITEM_SIZE_SMALL)) + +/obj/item/clothing/suit/storage/resomicloak/standard/black_grey + name = "black and grey cloak" + icon_state = "tesh_cloak_bg" + item_state = "tesh_cloak_bg" + +/obj/item/clothing/suit/storage/resomicloak/standard/black_midgrey + name = "black and medium grey cloak" + icon_state = "tesh_cloak_bmg" + item_state = "tesh_cloak_bmg" + +/obj/item/clothing/suit/storage/resomicloak/standard/black_lightgrey + name = "black and light grey cloak" + icon_state = "tesh_cloak_blg" + item_state = "tesh_cloak_blg" + +/obj/item/clothing/suit/storage/resomicloak/standard/black_white + name = "black and white cloak" + icon_state = "tesh_cloak_bw" + item_state = "tesh_cloak_bw" + +/obj/item/clothing/suit/storage/resomicloak/standard/black_red + name = "black and red cloak" + icon_state = "tesh_cloak_br" + item_state = "tesh_cloak_br" + +/obj/item/clothing/suit/storage/resomicloak/standard/black + name = "black cloak" + icon_state = "tesh_cloak_bn" + item_state = "tesh_cloak_bn" + +/obj/item/clothing/suit/storage/resomicloak/standard/black_yellow + name = "black and yellow cloak" + icon_state = "tesh_cloak_by" + item_state = "tesh_cloak_by" + +/obj/item/clothing/suit/storage/resomicloak/standard/black_green + name = "black and green cloak" + icon_state = "tesh_cloak_bgr" + item_state = "tesh_cloak_bgr" + +/obj/item/clothing/suit/storage/resomicloak/standard/black_blue + name = "black and blue cloak" + icon_state = "tesh_cloak_bbl" + item_state = "tesh_cloak_bbl" + +/obj/item/clothing/suit/storage/resomicloak/standard/black_purple + name = "black and purple cloak" + icon_state = "tesh_cloak_bp" + item_state = "tesh_cloak_bp" + +/obj/item/clothing/suit/storage/resomicloak/standard/black_pink + name = "black and pink cloak" + icon_state = "tesh_cloak_bpi" + item_state = "tesh_cloak_bpi" + +/obj/item/clothing/suit/storage/resomicloak/standard/black_brown + name = "black and brown cloak" + icon_state = "tesh_cloak_bbr" + item_state = "tesh_cloak_bbr" + +/obj/item/clothing/suit/storage/resomicloak/standard/orange_grey + name = "orange and grey cloak" + icon_state = "tesh_cloak_og" + item_state = "tesh_cloak_og" + +/obj/item/clothing/suit/storage/resomicloak/standard/rainbow + name = "rainbow cloak" + icon_state = "tesh_cloak_rainbow" + item_state = "tesh_cloak_rainbow" + +/obj/item/clothing/suit/storage/resomicloak/standard/lightgrey_grey + name = "light grey and grey cloak" + icon_state = "tesh_cloak_lgg" + item_state = "tesh_cloak_lgg" + +/obj/item/clothing/suit/storage/resomicloak/standard/white_grey + name = "white and grey cloak" + icon_state = "tesh_cloak_wg" + item_state = "tesh_cloak_wg" + +/obj/item/clothing/suit/storage/resomicloak/standard/red_grey + name = "red and grey cloak" + icon_state = "tesh_cloak_rg" + item_state = "tesh_cloak_rg" + +/obj/item/clothing/suit/storage/resomicloak/standard/orange + name = "orange cloak" + icon_state = "tesh_cloak_on" + item_state = "tesh_cloak_on" + +/obj/item/clothing/suit/storage/resomicloak/standard/yellow_grey + name = "yellow and grey cloak" + icon_state = "tesh_cloak_yg" + item_state = "tesh_cloak_yg" + +/obj/item/clothing/suit/storage/resomicloak/standard/green_grey + name = "green and grey cloak" + icon_state = "tesh_cloak_gg" + item_state = "tesh_cloak_gg" + +/obj/item/clothing/suit/storage/resomicloak/standard/blue_grey + name = "blue and grey cloak" + icon_state = "tesh_cloak_blug" + item_state = "tesh_cloak_blug" + +/obj/item/clothing/suit/storage/resomicloak/standard/purple_grey + name = "purple and grey cloak" + icon_state = "tesh_cloak_pg" + item_state = "tesh_cloak_pg" + +/obj/item/clothing/suit/storage/resomicloak/standard/pink_grey + name = "pink and grey cloak" + icon_state = "tesh_cloak_pig" + item_state = "tesh_cloak_pig" + +/obj/item/clothing/suit/storage/resomicloak/standard/brown_grey + name = "brown and grey cloak" + icon_state = "tesh_cloak_brg" + item_state = "tesh_cloak_brg" + +//job resomicloak + +/obj/item/clothing/suit/storage/resomicloak/jobs/cargo + name = "cargo cloak" + desc = "A soft Resomi cloak made for the Cargo department" + icon_state = "tesh_cloak_car" + item_state = "tesh_cloak_car" + +/obj/item/clothing/suit/storage/resomicloak/jobs/mining + name = "mining cloak" + desc = "A soft Resomi cloak made for Mining" + icon_state = "tesh_cloak_mine" + item_state = "tesh_cloak_mine" + +/obj/item/clothing/suit/storage/resomicloak/jobs/command + name = "command cloak" + desc = "A soft Resomi cloak made for the Command department" + icon_state = "tesh_cloak_comm" + item_state = "tesh_cloak_comm" + +/obj/item/clothing/suit/storage/resomicloak/jobs/ce + name = "cheif engineer cloak" + desc = "A soft Resomi cloak made the Chief Engineer" + icon_state = "tesh_cloak_ce" + item_state = "tesh_cloak_ce" + +/obj/item/clothing/suit/storage/resomicloak/jobs/eningeer + name = "engineering cloak" + desc = "A soft Resomi cloak made for the Engineering department" + icon_state = "tesh_cloak_engie" + item_state = "tesh_cloak_engie" + +/obj/item/clothing/suit/storage/resomicloak/jobs/atmos + name = "atmospherics cloak" + desc = "A soft Resomi cloak made for the Atmospheric Technician" + icon_state = "tesh_cloak_atmos" + item_state = "tesh_cloak_atmos" + +/obj/item/clothing/suit/storage/resomicloak/jobs/cmo + name = "chief medical officer cloak" + desc = "A soft Resomi cloak made the Cheif Medical Officer" + icon_state = "tesh_cloak_cmo" + item_state = "tesh_cloak_cmo" + +/obj/item/clothing/suit/storage/resomicloak/jobs/medical + name = "medical cloak" + desc = "A soft Resomi cloak made for the Medical department" + icon_state = "tesh_cloak_doc" + item_state = "tesh_cloak_doc" + +/obj/item/clothing/suit/storage/resomicloak/jobs/chemistry + name = "chemist cloak" + desc = "A soft Resomi cloak made for the Chemist" + icon_state = "tesh_cloak_chem" + item_state = "tesh_cloak_chem" + +/obj/item/clothing/suit/storage/resomicloak/jobs/viro + name = "virologist cloak" + desc = "A soft Resomi cloak made for the Virologist" + icon_state = "tesh_cloak_viro" + item_state = "tesh_cloak_viro" + +/obj/item/clothing/suit/storage/resomicloak/jobs/para + name = "paramedic cloak" + desc = "A soft Resomi cloak made for the Paramedic" + icon_state = "tesh_cloak_para" + item_state = "tesh_cloak_para" + +/obj/item/clothing/suit/storage/resomicloak/jobs/sci + name = "scientist cloak" + desc = "A soft Resomi cloak made for the Science department" + icon_state = "tesh_cloak_sci" + item_state = "tesh_cloak_sci" + +/obj/item/clothing/suit/storage/resomicloak/jobs/robo + name = "roboticist cloak" + desc = "A soft Resomi cloak made for the roboticist" + icon_state = "tesh_cloak_robo" + item_state = "tesh_cloak_robo" + +/obj/item/clothing/suit/storage/resomicloak/jobs/sec + name = "security cloak" + desc = "A soft Resomi cloak made for the Security department" + icon_state = "tesh_cloak_sec" + item_state = "tesh_cloak_sec" + +/obj/item/clothing/suit/storage/resomicloak/jobs/qm + name = "quartermaster cloak" + desc = "A soft Resomi cloak made for the Quartermaster" + icon_state = "tesh_cloak_qm" + item_state = "tesh_cloak_qm" + +/obj/item/clothing/suit/storage/resomicloak/jobs/service + name = "service cloak" + desc = "A soft Resomi cloak made for the Service department" + icon_state = "tesh_cloak_serv" + item_state = "tesh_cloak_serv" + +/obj/item/clothing/suit/storage/resomicloak/jobs/iaa + name = "internal affairs cloak" + desc = "A soft Resomi cloak made for the Internal Affairs Agent" + icon_state = "tesh_cloak_iaa" + item_state = "tesh_cloak_iaa" + +/obj/item/clothing/suit/storage/resomicloak_alt + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_suit_resomi.dmi' + name = "resomi cloak dretrowave" + desc = "A soft Resomi cloak" + icon_state = "tesh_cloak_dretrowave" + body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO + +/obj/item/clothing/suit/storage/resomicloak_alt/tesh_cloak_dretrowave + name = "resomi cloak dretrowave" + icon_state = "tesh_cloak_dretrowave" + +/obj/item/clothing/suit/storage/resomicloak_alt/green_grey + name = "green and grey cloak" + icon_state = "tesh_cloak_gg_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/blue_grey + name = "blue and grey cloak" + icon_state = "tesh_cloak_blug_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/purple_grey + name = "purple and grey cloak" + icon_state = "tesh_cloak_pg_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/cmo + name = "chief medical officer cloak" + desc = "A soft Resomi cloak made the Cheif Medical Officer" + icon_state = "tesh_cloak_cmo_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/medical + name = "medical cloak" + desc = "A soft Resomi cloak made for the Medical department" + icon_state = "tesh_cloak_doc_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/chemistry + name = "chemist cloak" + desc = "A soft Resomi cloak made for the Chemist" + icon_state = "tesh_cloak_chem_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/psych + name = "psychiatrist cloak" + desc = "A soft Resomi cloak made for the Psychiatrist" + icon_state = "tesh_cloak_psych" + +/obj/item/clothing/suit/storage/resomicloak_alt/ce + name = "cheif engineer cloak" + desc = "A soft Resomi cloak made the Chief Engineer" + icon_state = "tesh_cloak_ce_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/engineer + name = "engineering cloak" + desc = "A soft Resomi cloak made for the Engineering department" + icon_state = "tesh_cloak_engie_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/atmos + name = "atmospherics cloak" + desc = "A soft Resomi cloak made for the Atmospheric Technician" + icon_state = "tesh_cloak_atmos_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/hos + name = "head of security cloak" + desc = "A soft Resomi cloak made for the Head of Security" + icon_state = "tesh_cloak_hos" +/obj/item/clothing/suit/storage/resomicloak_alt/qm + name = "quartermaster cloak" + desc = "A soft Resomi cloak made for the Quartermaster" + icon_state = "tesh_cloak_qm_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/cargo + name = "cargo cloak" + desc = "A soft Resomi cloak made for the Cargo department" + icon_state = "tesh_cloak_car_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/mining + name = "mining cloak" + desc = "A soft Resomi cloak made for Mining" + icon_state = "tesh_cloak_mine_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/hop + name = "head of personnel cloak" + desc = "A soft Resomi cloak made for the Head of Personnel" + icon_state = "tesh_cloak_hop" + +/obj/item/clothing/suit/storage/resomicloak_alt/service + name = "service cloak" + desc = "A soft Resomi cloak made for the Service department" + icon_state = "tesh_cloak_serv_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/sec + name = "security cloak" + desc = "A soft Resomi cloak made for the Security department" + icon_state = "tesh_cloak_sec_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/iaa + name = "internal affairs cloak" + desc = "A soft Resomi cloak made for the Internal Affairs Agent" + icon_state = "tesh_cloak_iaa" + +/obj/item/clothing/suit/storage/resomicloak_alt/robo + name = "roboticist cloak" + desc = "A soft Resomi cloak made for the Roboticist" + icon_state = "tesh_cloak_robo_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/rd + name = "research director cloak" + desc = "A soft Resomi cloak made for the Research Director" + icon_state = "tesh_cloak_rd" + +/obj/item/clothing/suit/storage/resomicloak_alt/sci + name = "scientist cloak" + desc = "A soft Resomi cloak made for the Science department" + icon_state = "tesh_cloak_sci_alt" + +/obj/item/clothing/suit/storage/resomicloak_alt/iaa + name = "internal affairs cloak" + desc = "A soft Resomi cloak made for the Internal Affairs Agent" + icon_state = "tesh_cloak_iaa" + item_state = "tesh_cloak_iaa" + +//Belted cloaks +/obj/item/clothing/suit/storage/resomicloak_belted + name = "belted cloak" + desc = "A more ridged and stylized Resomi cloak." + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_suit_resomi.dmi' + icon_state = "tesh_beltcloak_bo" + body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO + species_restricted = list(SPECIES_RESOMI) + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/black_orange + name = "black belted cloak (orange)" + icon_state = "tesh_beltcloak_bo" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/black_grey + name = "black belted cloak" + icon_state = "tesh_beltcloak_bg" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/black_midgrey + name = "black belted cloak (medium grey)" + icon_state = "tesh_beltcloak_bmg" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/black_lightgrey + name = "black belted cloak (light grey)" + icon_state = "tesh_beltcloak_blg" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/black_white + name = "black belted cloak (white)" + icon_state = "tesh_beltcloak_bw" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/black_red + name = "black belted cloak (red)" + icon_state = "tesh_beltcloak_br" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/black + name = "black simple belted cloak" + icon_state = "tesh_beltcloak_bn" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/black_yellow + name = "black belted cloak (yellow)" + icon_state = "tesh_beltcloak_by" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/black_green + name = "black belted cloak (green)" + icon_state = "tesh_beltcloak_bgr" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/black_blue + name = "black belted cloak (blue)" + icon_state = "tesh_beltcloak_bbl" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/black_purple + name = "black belted cloak (purple)" + icon_state = "tesh_beltcloak_bp" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/black_pink + name = "black belted cloak (pink)" + icon_state = "tesh_beltcloak_bpi" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/black_brown + name = "black belted cloak (brown)" + icon_state = "tesh_beltcloak_bbr" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/orange_grey + name = "orange belted cloak" + icon_state = "tesh_beltcloak_og" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/rainbow + name = "rainbow belted cloak" + icon_state = "tesh_beltcloak_rainbow" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/lightgrey_grey + name = "light grey belted cloak" + icon_state = "tesh_beltcloak_lgg" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/white_grey + name = "white belted cloak" + icon_state = "tesh_beltcloak_wg" + +/obj/item/clothing/suit/storage/resomicloak_belted/standard/brown_grey + name = "brown belted cloak" + icon_state = "tesh_beltcloak_brg" + +//Belted job cloaks +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/cargo + name = "cargo belted cloak" + desc = "A soft Resomi cloak made for the Cargo department" + icon_state = "tesh_beltcloak_car" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/mining + name = "mining belted cloak" + desc = "A soft Resomi cloak made for Mining" + icon_state = "tesh_beltcloak_mine" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/command + name = "command belted cloak" + desc = "A soft Resomi cloak made for the Command department" + icon_state = "tesh_beltcloak_comm" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/ce + name = "chief engineer belted cloak" + desc = "A soft Resomi cloak made the Chief Engineer" + icon_state = "tesh_beltcloak_ce" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/engineer + name = "engineering belted cloak" + desc = "A soft Resomi cloak made for the Engineering department" + icon_state = "tesh_beltcloak_engie" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/atmos + name = "atmospherics belted cloak" + desc = "A soft Resomi cloak made for the Atmospheric Technician" + icon_state = "tesh_beltcloak_atmos" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/cmo + name = "chief medical officer belted cloak" + desc = "A soft Resomi cloak made the Chief Medical Officer" + icon_state = "tesh_beltcloak_cmo" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/medical + name = "medical belted cloak" + desc = "A soft Resomi cloak made for the Medical department" + icon_state = "tesh_beltcloak_doc" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/chemistry + name = "chemist belted cloak" + desc = "A soft Resomi cloak made for the Chemist" + icon_state = "tesh_beltcloak_chem" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/viro + name = "virologist belted cloak" + desc = "A soft Resomi cloak made for the Virologist" + icon_state = "tesh_beltcloak_viro" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/sci + name = "scientist belted cloak" + desc = "A soft Resomi cloak made for the Science department" + icon_state = "tesh_beltcloak_sci" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/robo + name = "roboticist belted cloak" + desc = "A soft Resomi cloak made for the Roboticist" + icon_state = "tesh_beltcloak_robo" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/sec + name = "security belted cloak" + desc = "A soft Resomi cloak made for the Security department" + icon_state = "tesh_beltcloak_sec" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/qm + name = "quartermaster belted cloak" + desc = "A soft Resomi cloak made for the Quartermaster" + icon_state = "tesh_beltcloak_qm" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/service + name = "service belted cloak" + desc = "A soft Resomi cloak made for the Service department" + icon_state = "tesh_beltcloak_serv" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/iaa + name = "internal affairs belted cloak" + desc = "A soft Resomi cloak made for the Internal Affairs Agent" + icon_state = "tesh_beltcloak_iaa" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/wrdn + name = "warden belted cloak" + desc = "A soft Resomi cloak made for the Warden" + icon_state = "tesh_beltcloak_wrdn" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/hos + name = "security chief belted cloak" + desc = "A soft Resomi cloak made for the Head of Security" + icon_state = "tesh_beltcloak_hos" + +/obj/item/clothing/suit/storage/resomicloak_belted/jobs/jani + name = "janitor belted cloak" + desc = "A soft Resomi cloak made for the Janitor" + icon_state = "tesh_beltcloak_jani" + + + +/obj/item/clothing/suit/storage/hooded/polychromic + name = "polychromic cloak" + desc = "Resomi cloak. Seems to be coated with polychrome paint. There is also a sewn hood. DO NOT MIX WITH EMP!" + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_suit_resomi.dmi' + icon_state = "polychromic" + hoodtype = /obj/item/clothing/head/winterhood/polychromic_hood + action_button_name = "Toggle Hood" + slots = 2 + species_restricted = list(SPECIES_RESOMI) + body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO + +/obj/item/clothing/suit/storage/hooded/polychromic/New() + ..() + sprite_sheets = list( + SPECIES_RESOMI = 'mods/resomi/icons/clothing/onmob_suit_resomi.dmi' + ) + if(pockets) + qdel(pockets) + pockets = new/obj/item/storage/internal/pouch(src, slots*BASE_STORAGE_COST(ITEM_SIZE_SMALL)) + +/obj/item/clothing/suit/storage/hooded/polychromic/verb/change_color() + set name = "Change Cloak Color" + set category = "Object" + set desc = "Change the color of the cloak." + set src in usr + + if(usr.incapacitated()) + return + + var/new_color = input(usr, "Pick a new color", "Cloak Color", color) as color|null + if(!new_color || new_color == color || usr.incapacitated()) + return + color = new_color + hood.color = color + hood.update_icon() + update_icon() + +/obj/item/clothing/suit/storage/hooded/polychromic/on_update_icon() + ..() + update_clothing_icon() + hood.color = color + hood.update_clothing_icon() + +/obj/item/clothing/suit/storage/hooded/polychromic/emp_act() + color = null + hood.color = null + update_icon() + +/obj/item/clothing/head/winterhood/polychromic_hood + name = "hood" + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_head_resomi.dmi' + icon_state = "polychromic_hood" + species_restricted = list(SPECIES_RESOMI) + desc = "It's hood that covers the head." + flags_inv = BLOCKHAIR | HIDEEARS + body_parts_covered = HEAD + +/obj/item/clothing/head/winterhood/polychromic_hood/New() + ..() + sprite_sheets = list( + SPECIES_RESOMI = 'mods/resomi/icons/clothing/onmob_head_resomi.dmi' + ) + +//Hooded Resomi cloaks +/obj/item/clothing/suit/storage/hooded/resomi + name = "Hooded Resomi Cloak" + desc = "A soft resomi cloak with an added hood." + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_suit_resomi.dmi' + icon_state = "tesh_hcloak_bo" + //item_state_slots = list(slot_r_hand_str = "tesh_hcloak_bo", slot_l_hand_str = "tesh_hcloak_bo") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + //flags_inv = HIDEHOLSTER|HIDETIE + action_button_name = "Toggle Cloak Hood" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood + //allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask) + species_restricted = list(SPECIES_RESOMI) + +/obj/item/clothing/suit/storage/hooded/resomi/New() + ..() + sprite_sheets = list( + SPECIES_RESOMI = 'mods/resomi/icons/clothing/onmob_suit_resomi.dmi' + ) + if(pockets) + qdel(pockets) + pockets = new/obj/item/storage/internal/pouch(src, slots*BASE_STORAGE_COST(ITEM_SIZE_SMALL)) + +/obj/item/clothing/suit/storage/hooded/resomi/on_update_icon() + ..() + update_clothing_icon() + +/obj/item/clothing/head/resomi/resomi_hood + name = "Cloak Hood" + desc = "A hood attached to a resomi cloak." + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_head_resomi.dmi' + icon_state = "tesh_hcloak_bo_hood" + flags_inv = BLOCKHAIR | HIDEEARS + body_parts_covered = HEAD + species_restricted = list(SPECIES_RESOMI) + sprite_sheets = list(SPECIES_RESOMI = 'mods/resomi/icons/clothing/onmob_head_resomi.dmi') + +/obj/item/clothing/head/resomi/resomi_hood/New() + ..() + sprite_sheets = list( + SPECIES_RESOMI = 'mods/resomi/icons/clothing/onmob_head_resomi.dmi' + ) + + + +/obj/item/clothing/suit/storage/hooded/resomi/black_orange + name = "black and orange hooded cloak" + icon_state = "tesh_hcloak_bo" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/black_orange + +/obj/item/clothing/suit/storage/hooded/resomi/black_grey + name = "black and grey hooded cloak" + icon_state = "tesh_hcloak_bg" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/black_grey + +/obj/item/clothing/suit/storage/hooded/resomi/black_midgrey + name = "black and medium grey hooded cloak" + icon_state = "tesh_hcloak_bmg" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/black_midgrey + +/obj/item/clothing/suit/storage/hooded/resomi/black_lightgrey + name = "black and light grey hooded cloak" + icon_state = "tesh_hcloak_blg" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/black_lightgrey + +/obj/item/clothing/suit/storage/hooded/resomi/black_white + name = "black and white hooded cloak" + icon_state = "tesh_hcloak_bw" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/black_white + +/obj/item/clothing/suit/storage/hooded/resomi/black_red + name = "black and red hooded cloak" + icon_state = "tesh_hcloak_br" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/black_red + +/obj/item/clothing/suit/storage/hooded/resomi/black + name = "black hooded cloak" + icon_state = "tesh_hcloak_bn" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/black + +/obj/item/clothing/suit/storage/hooded/resomi/black_yellow + name = "black and yellow hooded cloak" + icon_state = "tesh_hcloak_by" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/black_yellow + +/obj/item/clothing/suit/storage/hooded/resomi/black_green + name = "black and green hooded cloak" + icon_state = "tesh_hcloak_bgr" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/black_green + +/obj/item/clothing/suit/storage/hooded/resomi/black_blue + name = "black and blue hooded cloak" + icon_state = "tesh_hcloak_bbl" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/black_blue + +/obj/item/clothing/suit/storage/hooded/resomi/black_purple + name = "black and purple hooded cloak" + icon_state = "tesh_hcloak_bp" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/black_purple + +/obj/item/clothing/suit/storage/hooded/resomi/black_pink + name = "black and pink hooded cloak" + icon_state = "tesh_hcloak_bpi" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/black_pink + +/obj/item/clothing/suit/storage/hooded/resomi/black_brown + name = "black and brown hooded cloak" + icon_state = "tesh_hcloak_bbr" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/black_brown + +/obj/item/clothing/suit/storage/hooded/resomi/orange_grey + name = "orange and grey hooded cloak" + icon_state = "tesh_hcloak_og" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/orange_grey + +/obj/item/clothing/suit/storage/hooded/resomi/lightgrey_grey + name = "light grey and grey hooded cloak" + icon_state = "tesh_hcloak_lgg" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/lightgrey_grey + +/obj/item/clothing/suit/storage/hooded/resomi/white_grey + name = "white and grey hooded cloak" + icon_state = "tesh_hcloak_wg" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/white_grey + +/obj/item/clothing/suit/storage/hooded/resomi/red_grey + name = "red and grey hooded cloak" + icon_state = "tesh_hcloak_rg" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/red_grey + +/obj/item/clothing/suit/storage/hooded/resomi/orange + name = "orange hooded cloak" + icon_state = "tesh_hcloak_on" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/orange + +/obj/item/clothing/suit/storage/hooded/resomi/yellow_grey + name = "yellow and grey hooded cloak" + icon_state = "tesh_hcloak_yg" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/yellow_grey + +/obj/item/clothing/suit/storage/hooded/resomi/green_grey + name = "green and grey hooded cloak" + icon_state = "tesh_hcloak_gg" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/green_grey + +/obj/item/clothing/suit/storage/hooded/resomi/blue_grey + name = "blue and grey hooded cloak" + icon_state = "tesh_hcloak_blug" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/blue_grey + +/obj/item/clothing/suit/storage/hooded/resomi/purple_grey + name = "purple and grey hooded cloak" + icon_state = "tesh_hcloak_pg" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/purple_grey + +/obj/item/clothing/suit/storage/hooded/resomi/pink_grey + name = "pink and grey hooded cloak" + icon_state = "tesh_hcloak_pig" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/pink_grey + +/obj/item/clothing/suit/storage/hooded/resomi/brown_grey + name = "brown and grey hooded cloak" + icon_state = "tesh_hcloak_brg" + hoodtype = /obj/item/clothing/head/resomi/resomi_hood/brown_grey + +//The actual hoods +/obj/item/clothing/head/resomi/resomi_hood/black_orange + name = "black and orange cloak hood" + icon_state = "tesh_hcloak_bo_hood" +/obj/item/clothing/head/resomi/resomi_hood/black_grey + name = "black and grey cloak hood" + icon_state = "tesh_hcloak_bg_hood" + +/obj/item/clothing/head/resomi/resomi_hood/black_midgrey + name = "black and medium grey cloak hood" + icon_state = "tesh_hcloak_bmg_hood" + +/obj/item/clothing/head/resomi/resomi_hood/black_lightgrey + name = "black and light grey cloak hood" + icon_state = "tesh_hcloak_blg_hood" + +/obj/item/clothing/head/resomi/resomi_hood/black_white + name = "black and white cloak hood" + icon_state = "tesh_hcloak_bw_hood" + +/obj/item/clothing/head/resomi/resomi_hood/black_red + name = "black and red cloak hood" + icon_state = "tesh_hcloak_br_hood" + +/obj/item/clothing/head/resomi/resomi_hood/black + name = "black cloak hood" + icon_state = "tesh_hcloak_bn_hood" + +/obj/item/clothing/head/resomi/resomi_hood/black_yellow + name = "black and yellow cloak hood" + icon_state = "tesh_hcloak_by_hood" + +/obj/item/clothing/head/resomi/resomi_hood/black_green + name = "black and green cloak hood" + icon_state = "tesh_hcloak_bgr_hood" + +/obj/item/clothing/head/resomi/resomi_hood/black_blue + name = "black and blue cloak hood" + icon_state = "tesh_hcloak_bbl_hood" + +/obj/item/clothing/head/resomi/resomi_hood/black_purple + name = "black and purple cloak hood" + icon_state = "tesh_hcloak_bp_hood" + +/obj/item/clothing/head/resomi/resomi_hood/black_pink + name = "black and pink cloak hood" + icon_state = "tesh_hcloak_bpi_hood" + +/obj/item/clothing/head/resomi/resomi_hood/black_brown + name = "black and brown cloak hood" + icon_state = "tesh_hcloak_bbr_hood" + +/obj/item/clothing/head/resomi/resomi_hood/orange_grey + name = "orange and grey cloak hood" + icon_state = "tesh_hcloak_og_hood" + +/obj/item/clothing/head/resomi/resomi_hood/rainbow + name = "rainbow cloak hood" + icon_state = "tesh_hood_rainbow" + +/obj/item/clothing/head/resomi/resomi_hood/lightgrey_grey + name = "light grey and grey cloak hood" + icon_state = "tesh_hcloak_lgg_hood" + +/obj/item/clothing/head/resomi/resomi_hood/white_grey + name = "white and grey cloak hood" + icon_state = "tesh_hcloak_wg_hood" + +/obj/item/clothing/head/resomi/resomi_hood/red_grey + name = "red and grey cloak hood" + icon_state = "tesh_hcloak_rg_hood" + +/obj/item/clothing/head/resomi/resomi_hood/orange + name = "orange cloak hood" + icon_state = "tesh_hcloak_on_hood" + +/obj/item/clothing/head/resomi/resomi_hood/yellow_grey + name = "yellow and grey cloak hood" + icon_state = "tesh_hcloak_yg_hood" + +/obj/item/clothing/head/resomi/resomi_hood/green_grey + name = "green and grey cloak hood" + icon_state = "tesh_hcloak_gg_hood" + +/obj/item/clothing/head/resomi/resomi_hood/blue_grey + name = "blue and grey cloak hood" + icon_state = "tesh_hcloak_blug_hood" + +/obj/item/clothing/head/resomi/resomi_hood/purple_grey + name = "purple and grey cloak hood" + icon_state = "tesh_hcloak_pg_hood" + +/obj/item/clothing/head/resomi/resomi_hood/pink_grey + name = "pink and grey cloak hood" + icon_state = "tesh_hcloak_pig_hood" + +/obj/item/clothing/head/resomi/resomi_hood/brown_grey + name = "brown and grey cloak hood" + icon_state = "tesh_hcloak_brg_hood" diff --git a/mods/resomi/code/clothing/under.dm b/mods/resomi/code/clothing/under.dm new file mode 100644 index 0000000000000..e9901ef49ca08 --- /dev/null +++ b/mods/resomi/code/clothing/under.dm @@ -0,0 +1,380 @@ +/obj/item/clothing/under/resomi + name = "small grey smock" + desc = "It looks fitted to nonhuman proportions." + icon = 'packs/infinity/icons/obj/clothing/species/resomi/obj_under_resomi.dmi' + icon_state = "resomi_grey" + item_state = "resomi_grey" + species_restricted = list(SPECIES_RESOMI) + +/obj/item/clothing/under/resomi/white + name = "small smock" + icon_state = "resomi_white" + item_state = "resomi_white" + +/obj/item/clothing/under/resomi/red + name = "small Security smock" + icon_state = "resomi_red" + item_state = "resomi_red" + +/obj/item/clothing/under/resomi/yellow + name = "small Engineering smock" + icon_state = "resomi_yellow" + item_state = "resomi_yellow" + +/obj/item/clothing/under/resomi/medical + name = "small Medical uniform" + icon_state = "resomi_medical" + item_state = "resomi_medical" + +/obj/item/clothing/under/resomi/rainbow + name = "small rainbow smock" + icon_state = "resomi_rainbow" + item_state = "resomi_rainbow" + +/obj/item/clothing/under/resomi/science + name = "small science uniform" + icon_state = "resomi_science" + item_state = "resomi_science" + +/obj/item/clothing/under/resomi/dress + name = "small dress" + icon_state = "resomi_dress_cap" + item_state = "resomi_dress_cap" + +/obj/item/clothing/under/resomi/dress/formal + name = "small formal dress" + icon_state = "resomi_captain" + item_state = "resomi_captain" + +/obj/item/clothing/under/resomi/dress/stylish + name = "small stylish dress" + icon_state = "resomi_captain_formal" + item_state = "resomi_captain_formal" + +/obj/item/clothing/under/resomi/dress/white + name = "small black dress" + icon_state = "resomi_blackutility_com" + worn_state = "resomi_blackutility_com" + +/obj/item/clothing/under/resomi/robotics + name = "small robotics uniform" + icon_state = "resomi_robotics" + item_state = "resomi_robotics" + +/obj/item/clothing/under/resomi/work_black + name = "small darkblue work smock" + desc = "A small black working suit of non-human proportions with colored lines on it and a black steel belt.\ + On a small label reads: 'Twinne Corp. - feathers and style'. So... Relaxing." + icon_state = "resomi_black_blue_worksuit" + +/obj/item/clothing/under/resomi/work_black/red + name = "small darkred work smock" + desc = "A small black working suit of non-human proportions with colored lines on it and a black steel belt.\ + On a small label reads: 'Twinne Corp. - feathers and style'. Looks like you're on duty of forces of evil." + icon_state = "resomi_black_red_worksuit" + +/obj/item/clothing/under/resomi/work_black/purple + name = "small darkpurple work smock" + desc = "A small black working suit of non-human proportions with colored lines on it and a black steel belt.\ + On a small label reads: 'Twinne Corp. - feathers and style'. So, where is your labcoat, doctor?" + icon_state = "resomi_black_purple_worksuit" + +/obj/item/clothing/under/resomi/work_black/green + name = "small darkgreen work smock" + desc = "A small black working suit of non-human proportions with colored lines on it and a black steel belt.\ + On a small label reads: 'Twinne Corp. - feathers and style'. Flowers will love you, whether they want it or not." + icon_state = "resomi_black_green_worksuit" + +/obj/item/clothing/under/resomi/work_black/orange + name = "small darkorange work smock" + desc = "A small black working suit of non-human proportions with colored lines on it and a black steel belt.\ + On a small label reads: 'Twinne Corp. - feathers and style'. Don't forget about hardhat." + icon_state = "resomi_black_orange_worksuit" + +/obj/item/clothing/under/resomi/work_white + name = "small lightblue work smock" + desc = "A small white working suit of non-human proportions with colored lines on it and a white steel belt.\ + On a small label reads: 'Twinne Corp. - feathers and style'. Really relaxing" + icon_state = "resomi_white_blue_worksuit" + +/obj/item/clothing/under/resomi/work_white/red + name = "small lightred work smock" + desc = "A small white working suit of non-human proportions with colored lines on it and a white steel belt.\ + On a small label reads: 'Twinne Corp. - feathers and style'. For maximum civilian security." + icon_state = "resomi_white_red_worksuit" + +/obj/item/clothing/under/resomi/work_white/purple + name = "small lightpurple work smock" + desc = "A small white working suit of non-human proportions with colored lines on it and a white steel belt.\ + On a small label reads: 'Twinne Corp. - feathers and style'. So, where is your labcoat, assistant?" + icon_state = "resomi_white_purple_worksuit" + +/obj/item/clothing/under/resomi/work_white/green + name = "small lightgreen work smock" + desc = "A small white working suit of non-human proportions with colored lines on it and a white steel belt.\ + On a small label reads: 'Twinne Corp. - feathers and style'. Flowers will love you... You guess." + icon_state = "resomi_white_green_worksuit" + +/obj/item/clothing/under/resomi/work_white/orange + name = "small lightorange work smock" + desc = "A small white working suit of non-human proportions with colored lines on it and a white steel belt.\ + On a small label reads: 'Twinne Corp. - feathers and style'. Don't forget about hardhat and gloves." + icon_state = "resomi_white_orange_worksuit" + +/obj/item/clothing/under/resomi/sport + name = "small sport uniform" + icon_state = "resomi_expeditionpt" + worn_state = "resomi_expeditionpt" + +/obj/item/clothing/under/resomi/utility + name = "small black utility uniform" + icon_state = "resomi_blackutility" + worn_state = "resomi_blackutility" + +/obj/item/clothing/under/resomi/utility/black + name = "small grey utility uniform" + icon_state = "resomi_greydress" + worn_state = "resomi_greydress" + +//Undercoat + +/obj/item/clothing/under/resomi/undercoat + name = "black and orange undercoat" + desc = "Once developed by Xen'Corp clothing for refugees of the Resomi race.\ + Made of micro and nanofibres to make it light and billowy, perfect for going fast and stylishly!" + icon_state = "tesh_uniform_bo" + item_state = "tesh_uniform_bo" + +/obj/item/clothing/under/resomi/undercoat/standard/black_grey + name = "black and grey undercoat" + icon_state = "tesh_uniform_bg" + item_state = "tesh_uniform_bg" + +/obj/item/clothing/under/resomi/undercoat/standard/black_midgrey + name = "black and medium grey undercoat" + icon_state = "tesh_uniform_bmg" + item_state = "tesh_uniform_bmg" + +/obj/item/clothing/under/resomi/undercoat/standard/black_lightgrey + name = "black and light grey undercoat" + icon_state = "tesh_uniform_blg" + item_state = "tesh_uniform_blg" + +/obj/item/clothing/under/resomi/undercoat/standard/black_white + name = "black and white undercoat" + icon_state = "tesh_uniform_bw" + item_state = "tesh_uniform_bw" + +/obj/item/clothing/under/resomi/undercoat/standard/black_red + name = "black and red undercoat" + icon_state = "tesh_uniform_br" + item_state = "tesh_uniform_br" + +/obj/item/clothing/under/resomi/undercoat/standard/black + name = "black undercoat" + icon_state = "tesh_uniform_bn" + item_state = "tesh_uniform_bn" + +/obj/item/clothing/under/resomi/undercoat/standard/black_yellow + name = "black and yellow undercoat" + icon_state = "tesh_uniform_by" + item_state = "tesh_uniform_by" + +/obj/item/clothing/under/resomi/undercoat/standard/black_green + name = "black and green undercoat" + icon_state = "tesh_uniform_bgr" + item_state = "tesh_uniform_bgr" + +/obj/item/clothing/under/resomi/undercoat/standard/black_blue + name = "black and blue undercoat" + icon_state = "tesh_uniform_bbl" + item_state = "tesh_uniform_bbl" + +/obj/item/clothing/under/resomi/undercoat/standard/black_purple + name = "black and purple undercoat" + icon_state = "tesh_uniform_bp" + item_state = "tesh_uniform_bp" + +/obj/item/clothing/under/resomi/undercoat/standard/black_pink + name = "black and pink undercoat" + icon_state = "tesh_uniform_bpi" + item_state = "tesh_uniform_bpi" + +/obj/item/clothing/under/resomi/undercoat/standard/black_brown + name = "black and brown undercoat" + icon_state = "tesh_uniform_bbr" + item_state = "tesh_uniform_bbr" + +/obj/item/clothing/under/resomi/undercoat/standard/orange_grey + name = "orange and grey undercoat" + icon_state = "tesh_uniform_og" + item_state = "tesh_uniform_og" + +/obj/item/clothing/under/resomi/undercoat/standard/rainbow + name = "rainbow undercoat" + icon_state = "tesh_uniform_rainbow" + item_state = "tesh_uniform_rainbow" + +/obj/item/clothing/under/resomi/undercoat/standard/lightgrey_grey + name = "light grey and grey undercoat" + icon_state = "tesh_uniform_lgg" + item_state = "tesh_uniform_lgg" + +/obj/item/clothing/under/resomi/undercoat/standard/white_grey + name = "white and grey undercoat" + icon_state = "tesh_uniform_wg" + item_state = "tesh_uniform_wg" + +/obj/item/clothing/under/resomi/undercoat/standard/red_grey + name = "red and grey undercoat" + icon_state = "tesh_uniform_rg" + item_state = "tesh_uniform_rg" + +/obj/item/clothing/under/resomi/undercoat/standard/orange + name = "orange undercoat" + icon_state = "tesh_uniform_on" + item_state = "tesh_uniform_on" + +/obj/item/clothing/under/resomi/undercoat/standard/yellow_grey + name = "yellow and grey undercoat" + icon_state = "tesh_uniform_yg" + item_state = "tesh_uniform_yg" + +/obj/item/clothing/under/resomi/undercoat/standard/green_grey + name = "green and grey undercoat" + icon_state = "tesh_uniform_gg" + item_state = "tesh_uniform_gg" + +/obj/item/clothing/under/resomi/undercoat/standard/blue_grey + name = "blue and grey undercoat" + icon_state = "tesh_uniform_blug" + item_state = "tesh_uniform_blug" + +/obj/item/clothing/under/resomi/undercoat/standard/purple_grey + name = "purple and grey undercoat" + icon_state = "tesh_uniform_pg" + item_state = "tesh_uniform_pg" + +/obj/item/clothing/under/resomi/undercoat/standard/pink_grey + name = "pink and grey undercoat" + icon_state = "tesh_uniform_pig" + item_state = "tesh_uniform_pig" + +/obj/item/clothing/under/resomi/undercoat/standard/brown_grey + name = "brown and grey undercoat" + icon_state = "tesh_uniform_brg" + item_state = "tesh_uniform_brg" + +/obj/item/clothing/under/resomi/undercoat/jobs/cargo + name = "cargo undercoat" + desc = "Resomi job clothing for the Cargo department" + icon_state = "tesh_uniform_car" + item_state = "tesh_uniform_car" + +/obj/item/clothing/under/resomi/undercoat/jobs/mining + name = "mining undercoat" + desc = "Resomi job clothing for Mining" + icon_state = "tesh_uniform_mine" + item_state = "tesh_uniform_mine" + +/obj/item/clothing/under/resomi/undercoat/jobs/command + name = "command undercoat" + desc = "Resomi job clothing for the Command department" + icon_state = "tesh_uniform_comm" + item_state = "tesh_uniform_comm" + +/obj/item/clothing/under/resomi/undercoat/jobs/command_g + name = "command undercoat" + desc = "Resomi job clothing for the Command department. This one has fancier gold buttons" + icon_state = "tesh_uniform_comm_g" + item_state = "tesh_uniform_comm_g" + +/obj/item/clothing/under/resomi/undercoat/jobs/ce + name = "cheif engineer undercoat" + desc = "Resomi job clothing for the Chief Engineer" + icon_state = "tesh_uniform_ce" + item_state = "tesh_uniform_ce" + +/obj/item/clothing/under/resomi/undercoat/jobs/ce_w + name = "cheif engineer undercoat" + desc = "Resomi job clothing for the Chief Engineer. This one is white" + icon_state = "tesh_uniform_ce_w" + item_state = "tesh_uniform_ce_w" + +/obj/item/clothing/under/resomi/undercoat/jobs/engineer + name = "engineering undercoat" + desc = "Resomi job clothing for the Engineering department" + icon_state = "tesh_uniform_engie" + item_state = "tesh_uniform_engie" + +/obj/item/clothing/under/resomi/undercoat/jobs/atmos + name = "atmospherics undercoat" + desc = "Resomi job clothing for the Atmospheric Technician" + icon_state = "tesh_uniform_atmos" + item_state = "tesh_uniform_atmos" + +/obj/item/clothing/under/resomi/undercoat/jobs/cmo + name = "chief medical officer undercoat" + desc = "Resomi job clothing for the Cheif Medical Officer" + icon_state = "tesh_uniform_cmo" + item_state = "tesh_uniform_cmo" + +/obj/item/clothing/under/resomi/undercoat/jobs/medical + name = "medical undercoat" + desc = "Resomi job clothing for the Medical department" + icon_state = "tesh_uniform_doc" + item_state = "tesh_uniform_doc" + +/obj/item/clothing/under/resomi/undercoat/jobs/chemistry + name = "chemist undercoat" + desc = "Resomi job clothing for the Chemist" + icon_state = "tesh_uniform_chem" + item_state = "tesh_uniform_chem" + +/obj/item/clothing/under/resomi/undercoat/jobs/viro + name = "virologist undercoat" + desc = "Resomi job clothing for the Virologist" + icon_state = "tesh_uniform_viro" + item_state = "tesh_uniform_viro" + +/obj/item/clothing/under/resomi/undercoat/jobs/para + name = "paramedic undercoat" + desc = "Resomi job clothing for the Paramedic" + icon_state = "tesh_uniform_para" + item_state = "tesh_uniform_para" + +/obj/item/clothing/under/resomi/undercoat/jobs/sci + name = "scientist undercoat" + desc = "Resomi job clothing for the Science department" + icon_state = "tesh_uniform_sci" + item_state = "tesh_uniform_sci" + +/obj/item/clothing/under/resomi/undercoat/jobs/robo + name = "roboticist undercoat" + desc = "Resomi job clothing for the Roboticist" + icon_state = "tesh_uniform_robo" + item_state = "tesh_uniform_robo" + +/obj/item/clothing/under/resomi/undercoat/jobs/sec + name = "security undercoat" + desc = "Resomi job clothing for the Security department" + icon_state = "tesh_uniform_sec" + item_state = "tesh_uniform_sec" + +/obj/item/clothing/under/resomi/undercoat/jobs/qm + name = "quartermaster undercoat" + desc = "Resomi job clothing for the Quartermaster" + icon_state = "tesh_uniform_qm" + item_state = "tesh_uniform_qm" + +/obj/item/clothing/under/resomi/undercoat/jobs/service + name = "service undercoat" + desc = "Resomi job clothing for the Service department" + icon_state = "tesh_uniform_serv" + item_state = "tesh_uniform_serv" + +/obj/item/clothing/under/resomi/undercoat/jobs/iaa + name = "internal affairs undercoat" + desc = "Resomi job clothing for the Internal Affairs Agent" + icon_state = "tesh_uniform_iaa" + item_state = "tesh_uniform_iaa" diff --git a/mods/resomi/code/datum/body/organs.dm b/mods/resomi/code/datum/body/organs.dm new file mode 100644 index 0000000000000..3778e18b8eb69 --- /dev/null +++ b/mods/resomi/code/datum/body/organs.dm @@ -0,0 +1,113 @@ + + // // + //EXTERNAL RESOMI ORGANS// + // // + +/obj/item/organ/external/foot/resomi + body_hair = "feathers" + +/obj/item/organ/external/foot/right/resomi + body_hair = "feathers" + +/obj/item/organ/external/hand/resomi + body_hair = "feathers" + +/obj/item/organ/external/hand/right/resomi + body_hair = "feathers" + + // // + //INTERNAL RESOMI ORGANS// + // // + +/obj/item/organ/internal/kidneys/resomi + parent_organ = BP_CHEST + +/obj/item/organ/internal/liver/resomi + parent_organ = BP_CHEST + +/obj/item/organ/internal/eyes/resomi + icon = 'packs/infinity/icons/mob/human_races/species/resomi/eyes.dmi' + eye_icon = 'packs/infinity/icons/mob/human_races/species/resomi/eyes.dmi' + icon_state = "eyes_resomi" + + // // + // PROSTHETIC RESOMI ORGANS // + // // + +/datum/robolimb/resomi + company = "Small prosthetic" + desc = "This prosthetic is small and fit for nonhuman proportions." + icon = 'packs/infinity/icons/mob/human_races/cyberlimbs/resomi/resomi_main.dmi' + species_cannot_use = list(SPECIES_ADHERENT, SPECIES_YEOSA, SPECIES_UNATHI, SPECIES_NABBER, SPECIES_DIONA) + restricted_to = list(SPECIES_RESOMI) + allowed_bodytypes = list(SPECIES_RESOMI) + applies_to_part = list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT, BP_L_HAND, BP_R_HAND) + + + // // + // RESOMI ABILITY // + // // + +/mob/living/proc/toggle_pass_table() + set category = "Abilities" + set name = "Toggle Agility" //Dunno a better name for this. You have to be pretty agile to hop over stuff!!! + set desc = "Allows you to start/stop hopping over things such as hydroponics trays, tables, and railings." + pass_flags ^= PASS_FLAG_TABLE //I dunno what this fancy ^= is but Aronai gave it to me. + to_chat(src, "You [pass_flags&PASS_FLAG_TABLE ? "will" : "will NOT"] move over tables/railings/trays!") + + +/mob/living/carbon/human/proc/resomi_sonar_ping() + set name = "Listen In" + set desc = "Allows you to listen in to movement and noises around you." + set category = "Abilities" + + if(incapacitated()) + to_chat(src, "You need to recover before you can use this ability.") + return + if(is_deaf() || is_below_sound_pressure(get_turf(src))) + to_chat(src, "You are for all intents and purposes currently deaf!") + return + to_chat(src, "You take a moment to listen in to your environment...") + if(do_after(src, delay = 5, do_flags = DO_DEFAULT & ~DO_USER_SAME_HAND)) + var/heard_something = FALSE + for(var/mob/living/L in range(client.view, src)) + var/turf/T = get_turf(L) + if(!T || L == src || L.stat == DEAD || is_below_sound_pressure(T)) + continue + heard_something = TRUE + var/image/ping_image = image(icon = 'icons/effects/effects.dmi', icon_state = "sonar_ping", loc = src) + ping_image.plane = HUD_PLANE + ping_image.layer = UNDER_HUD_LAYER + ping_image.pixel_x = (T.x - src.x) * WORLD_ICON_SIZE + ping_image.pixel_y = (T.y - src.y) * WORLD_ICON_SIZE + image_to(src, ping_image) + addtimer(CALLBACK(src, PROC_REF(clear_sonar_effect), src.client, ping_image), 8) + var/feedback = list("There are noises of movement ") + var/direction = get_dir(src, L) + if(direction) + feedback += "towards the [dir2text(direction)], " + switch(get_dist(src, L) / client.view) + if(0 to 0.2) + feedback += "very close by." + if(0.2 to 0.4) + feedback += "close by." + if(0.4 to 0.6) + feedback += "some distance away." + if(0.6 to 0.8) + feedback += "further away." + else + feedback += "far away." + else // No need to check distance if they're standing right on-top of us + feedback += "right on top of you." + feedback += "" + to_chat(src, jointext(feedback,null)) + if(!heard_something) + to_chat(src, "You hear no movement but your own.") + else + to_chat(src, "You need to stand still while you listen.") + + +/mob/living/carbon/human/proc/clear_sonar_effect(client/C, image/I) + if(C && I) + C.images -= I + qdel(I) diff --git a/mods/resomi/code/datum/culture/resomi_culture.dm b/mods/resomi/code/datum/culture/resomi_culture.dm new file mode 100644 index 0000000000000..3519b45d24df7 --- /dev/null +++ b/mods/resomi/code/datum/culture/resomi_culture.dm @@ -0,0 +1,247 @@ +// Resomi cultures. + +//#define CULTURE_RESOMI_BIRDCAGE "Birdcage, \"Born in the void\"" +#define CULTURE_RESOMI_EREMUS "Eremus, Eremusianin" +#define CULTURE_RESOMI_ASRANDA "Asranda, Randian" +//#define CULTURE_RESOMI_SAVEEL "Saveel, Sav" +#define CULTURE_RESOMI_REFUGEE "Imperial refugee" +#define CULTURE_RESOMI_NEWGENERATION "New generation" +#define CULTURE_RESOMI_LOSTCOLONYRICH "A native of a thriving lost colony" +#define CULTURE_RESOMI_LOSTCOLONYPOOR "A native of a impoverished lost colony" + +//#define FACTION_RESOMI |There are no fractions, as well as the soil for their appearance. + +#define HOME_SYSTEM_RESOMI_BIRDCAGE "Birdcage (Colchis Habitat)" +#define HOME_SYSTEM_RESOMI_EREMUS "Eremus" +//#define HOME_SYSTEM_RESOMI_TIAMATH "Tiamat" +#define HOME_SYSTEM_RESOMI_ASRANDA "Asranda" +#define HOME_SYSTEM_RESOMI_SAVEEL "Zer'een (Saveel)" +#define HOME_SYSTEM_RESOMI_LOST_COLONY "Unknown independent colony" +#define HOME_SYSTEM_RESOMI_REFUGEE_COLONY "Unknown Independent Refugee Colony" +#define HOME_SYSTEM_RESOMI_HOMELESS "None" +#define HOME_SYSTEM_RESOMI_IMPER_COLONY "Unknown Imperial colony" + +#define RELIGION_RESOMI_CHOSEN "Faith of the Chosen" +#define RELIGION_RESOMI_EMPEROR "Cult of the Emperor" +#define RELIGION_RESOMI_MOUNTAIN "Echos of the Mountain" +#define RELIGION_RESOMI_SKIES "Lights of the Skies" + + + +/singleton/cultural_info/culture/resomi + language = LANGUAGE_RESOMI + name_language = LANGUAGE_RESOMI + +/*decl/cultural_info/culture/resomi/birdcage + name = CULTURE_RESOMI_BIRDCAGE + description = "" + economic_power = 0.70 |~| We still need to think about whether we need it.*/ + +/singleton/cultural_info/culture/resomi/eremus + name = CULTURE_RESOMI_EREMUS + description = "Вы с Эремуса - пустынной планеты с отсутствующим каким-либо центральным правительством. \ + Эремус расположен наиболее близко к имперскому пространству, \ + чем большинство других колоний. Вновь прибывшие Резоми, если они не привыкли к \ + дикой природе планеты или не близки к преступным бандам, склонны проживать во Врасе - \ + обществе Резоми, живущему вблизи от полярной шапки. Тем не менее, у \ + беженцев-резоми Враса есть то, чего не хватает многим - независимости. " + economic_power = 0.85 //Improvement needed. + +/singleton/cultural_info/culture/resomi/asranda + name = CULTURE_RESOMI_ASRANDA + description = "Вы рандианин, с планеты А’шранда. Культура жителей данного мира похожа на культуру старой \ + Республики. Общество, в отличии от имперских собратьев, здесь свободно, и несмотря на коррумпированную \ + политическую систему, каждый рандианин имеет куда более высокий уровень социальной мобильности, чем большинство \ + других Резоми. Но большинство Резоми на А’шранде всё \ + же относится к низшему классу, шахтерам или ремесленникам. Существует небольшой средний класс, но богатые, в \ + целом, контролируют поток денег.Политики часто являются ценителями искусства, поддерживая респектабельную \ + ремесленную индустрию, а семейная жизнь Резоми тут считается важным институтом, \ + который нужно поддерживать. В отличие от Империи, семейные профессии широко распространены на А’шранде. Первый, \ + второй и третий птенцы часто учатся ремеслу своих родителей, в то время как последующие птенцы могут обучаться у \ + своих братьев и сестер или преследовать свои личные интересы." + economic_power = 1.15 + +/*singleton/cultural_info/culture/resomi/saveel + name = CULTURE_RESOMI_SAVEEL + description = "Вы один из представителей cавиильцев, племеного общества Резоми на планете \ + \ +

    OOC Notes:Постарайтесь хорошо изучить весь доступный лор по Савилю, а так же хорошо продумать свою предысторию попадания на корабль (желательно не забыв про заполнение записей), \ + да , можно придумать адекватные варианты, но подсказывать вам мы их не будем.

    " + economic_power = 0.45 |~| We still need to think about whether we need it. */ + +/singleton/cultural_info/culture/resomi/refugee + name = CULTURE_RESOMI_REFUGEE + description = " Вы родились в одном из миров, принадлежащих Империи Сирисай. Но еперь не важно, где вы родились, кем вы были и какую ступень в иерархии вы занимали.\ + Вы предали Империю и имперские идеалы, а так же свой народ, свою величественную расу. Империя уже никогда не простит ваше предательство, \ + как и остальные Резоми, жертвующие свои жизни ради выживания Империи, ради светлого будущего своих потомков, ради безопасности всей галактики, \ + опасность для которой представляет бездушная и безумная синтетика, в любой момент способная выйти из узд ещё молодых и слаборазвитых рас. \ + Вам остаётся надеяться и верить в то, что Империи не хватит сил обратить свой взор на вас, надеяться на то, что вскоре она испустит дух и канет в лету, \ + надеяться на то, что она не окрепнет, не успеет излечить все свои раны.

    Вы потеряли всё, \ + сохранив лишь те материальные ценности, которые вы смогли с собой унести, именно это та цена, которую вы заплатили ради надежды на новое будущее. \ + Скорее всего вам ещё сложно привыкнуть к этому \"новому\" миру, совладать со свободой, смириться с тем, что вы стали дешёвой (часто даже высококвалифицированной) рабочей силой для иных рас, \ + к которым вы относились как к жалким ксеносам, которые совсем не ровня вам. Вы ещё очень хорошо сохранили свои имперские манеры, вы вежливы, \ + недоверчивы к автоматизированной синтетике и презрительны к другим видам." + economic_power = 0.75 + +/singleton/cultural_info/culture/resomi/newgeneration + name = CULTURE_RESOMI_NEWGENERATION + description = "Вы новое поколение, произошедшее от недавних имперских беженцев. Вы могли родится в одном из многочисленных гетто, основанной беженцами колоний или пародий на среду обитания. \ + Условия жизни сильно разнятся от места к месту, поэтому вы могли успеть прожить за это время как спокойную, так и неспокойную и тяжёлую жизнь. Сильно разнится и поведение, \ + оно сильно зависит от условий и окружения, вы могли стать как и более агрессивным и нетерпимым к ксеносам, так и куда более дружелюбными по отношению к другим расам, \ + по сравнению с поколением, от которого вы произошли. Возможно вы даже были частично культурно ассимилированы с иными расами и ваше поведение даже схоже с поведением представителей их вида. \ + Так же маловероятно, что вы переняли и цените все имперские традиции, переданных вам вашими предками. " + economic_power = 0.9 + +/singleton/cultural_info/culture/resomi/lost_colony_rich + name = CULTURE_RESOMI_LOSTCOLONYRICH + description = "Вы выходец с одной из \"потерянных\" колоний. К счастью \"Падение\" не так сильно затронуло вашу колонию,\ + а так же благодаря удачному стечению обстоятельств и удалённому расположению нет намёков о том, что Империя знает о вашей колонии.\ + Благодаря всему этому вашим предкам удалось относительно спокойно пережить кризис, обрести автономию и сохранить небольшую часть технологий и даже манеры Республики,\ + такие как семейное ученичество и демократическое управление" + economic_power = 1.4 + +/singleton/cultural_info/culture/resomi/lost_colony_poor + name = CULTURE_RESOMI_LOSTCOLONYPOOR + description = "Вы выходец с одной из \"потерянных\" колоний, к сожалению ваша колония сильно пострадала в результате \"Падения\",\ + неизвестно почему Империя оставила колонию на произвол судьбы. Возможно она даже не догадывается, что колония всё ещё подаёт признаки жизни,\ + возможно всё куда проще, и Империя пока занята своими внутренними проблемами, и не готова взять под свой контроль ещё один голодный и разорёный мир.\ + Население таких колоний может относиться куда более яростно к чуждой синтетике, чем имперцы, так же нередко жители таких колоний принимают экстремальные решения для выживания.\ + Колонисты таких миров не живут, они каждый день ведут борьбу за выживание." + economic_power = 0.65 + + + +/singleton/cultural_info/location/birdcage + name = HOME_SYSTEM_RESOMI_BIRDCAGE + description = "Жилой модуль \"Бирдкейдж\" искуственной среды обитания \"Колхис\", расположенной на орбите вокруг Джикамы. \ + \"Колхис\" некоторое время являлся пунктом приема для некоторых беженцев-резоми в 2275 году. \ + После уменьшения финансирования и закрытия лагеря беженцев для новых приезжих контроль над безопасностью среды обитания был передан её администрации. \ + Отношения Резоми с другими обитателями среды являются довольно напряжёнными, особенно после ухудшения условий содержания в модуле \"Бирдкейдж\". \ +

    Многие люди на борту Колхиса считают Резоми главной причиной увеличения преступности на станции. В итоге резоми вынуждены оставаться только в выделенном для них жилом модуле,\ + дополнительно для них была ограниченна и доступная для Резоми работа." + language = LANGUAGE_RESOMI + capital = "None" + ruling_body = "None" + distance = "UNDEFINED DISTANCE" + economic_power = 0.85 + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_SIGN, LANGUAGE_GUTTER, LANGUAGE_HUMAN_EURO) + +/singleton/cultural_info/location/eremus + name = HOME_SYSTEM_RESOMI_EREMUS + description = "Эремус - планета расположенная в системе Голгенна, имеет суперконтинент с двумя огромными морями, соединёнными между собой сетью рек. \ + Имеет как и наполненные жизнью биомы возле морей, рек и оазисов, так и неблагоприятные для жизни обширные территории пустынь. \ + Помимо людей на планете так же проживают и Резоми, в основном предпочитающие проживать в Варсе. Варс - это общество, основанное беженцами из Империи, \ + расположенное вблизи от полярной шапки планеты. Остальных же Резоми как и иных ксеносов можно встретить в любых уголках Эремуса, \ + от многочисленных коммун и \"сухопутных карет\" до разношёрстных преступных группировок, которыми богата данная планета.

    \ + Ресурсы планеты весьма ограничены что обязывает многие поселения тщательно их контролировать. \ + Нередко дефицит ресурсов становится причиной многих экономических и \"холодных войн\" между Городами-государствами.\ + Вне стен городов понятие \"экономики\" теряется в песках великих пустынь, уступая место \"понятию\" выживания. Рабство и организованная преступность распространены,\ + и уже давно стали обыденностью для жителей данной планеты.

    \ + Дополнительная информация " + capital = "None" + ruling_body = "Varies from settlement to settlement" + distance = "UNDEFINED DISTANCE" + economic_power = 0.85 + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_SIGN, LANGUAGE_GUTTER, LANGUAGE_RESOMI, LANGUAGE_HUMAN_EURO) + +/singleton/cultural_info/location/asranda + name = HOME_SYSTEM_RESOMI_ASRANDA + description = " А’шранда - одна из колонизированных планет ещё со времён Республики. Планета почти полностью покрыта горами, имеет один океан который проходит почти от полюса до полюса. \ + Так же планета обладает мощным магнитным полем (которое сильно мешает удалённому изучению планеты) и внушительными запасами полезных ископаемых. \ + Климат имеет четыре сезона в году с минимальными вариациями. Прозрачная вода редко встречается на поверхности, и более крупная растительность встречается лишь в умеренных экваториальных регионах. \ +

    Резоми на А’шранде, в основном живут под землей, в просверленных каменных камерах, начиная от тесных туннелей и бараков до более роскошных апартаментов, похожих на квартиры. \ + На поверхности, рандиане живут, в основном, в низких хорошо замаскированных общежитиях из бетона и металла. А культура А’шранды в целом похожа на культуру старой Республики. \ + Общество, как правило, свободно, в отличии от имперцев, и несмотря на коррумпированную политическую систему, рандиане имеют более высокий уровень социальной мобильности, \ + чем большинство других Резоми.

    \ + Дополнительная информация" + language = LANGUAGE_RESOMI + capital = "Ацер'на" + ruling_body = "Демократическая олигархия" + distance = "UNDEFINED DISTANCE" + economic_power = 1.15 + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_SIGN, LANGUAGE_HUMAN_EURO) + +/singleton/cultural_info/location/saveel + name = HOME_SYSTEM_RESOMI_SAVEEL + description = "Савииль - технологически слаборазвитая колония, расположенная на планете Зер`ин. Планета находится далеко от торговых путей \ + и звездных скоплений, что делает её малопосещаемым местом. Так же Зер`ин ничем непримечателен с точки зрения добычи минералов, полезные \ + ископаемые присутствуют, но их достаточно мало.

    Савиильцы, как правило, являются дикими и грубыми по сравнению с другими Резоми. \ + Покинувший свою родную планету савиилец, является крайне редким явлением, особенно учитывая редкую посещаемость Зер`ина.

    \ + Дополнительная информация" + language = LANGUAGE_RESOMI + capital = "None" + ruling_body = "Племенная олигархия" + distance = "UNDEFINED DISTANCE" + economic_power = 0.45 + secondary_langs = list(LANGUAGE_SIGN) + +/singleton/cultural_info/location/r_lost_colony + name = HOME_SYSTEM_RESOMI_LOST_COLONY + description = "Одна из множества \"потерянных\" колоний, основанных во времена Республики. К счастью или к сожалению, по итогу войны с \"восставшей\" синтетикой Империя потеряла контроль \ + над множеством миров Резоми, и до сих пор считает, что многие из колоний полностью разорёны или аннигилированы в ходе войны, либо на \ + данный момент не проявляет интереса к ним. Уроженцы некоторых так называемых \"потерянных\" колонии часто имеют манеры \"Республики\", такие как семейное ученичество \ + , демократическое управление и даже сотрудничество с ИИ. Другие же \"потерянные\" миры, сильно разоренные в результате Падения,\ + могут относиться ещё более яростно и более чуждо по отношению к синтетике и некоторым технологиям. Часто таким колониям приходится прибегать к экстремальным поступкам и решениям, чтобы выжить." + language = LANGUAGE_RESOMI + capital = "Various" + ruling_body = "Various" + distance = "Various" + economic_power = 1 + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_SIGN, LANGUAGE_GUTTER, LANGUAGE_HUMAN_EURO) + +/singleton/cultural_info/location/r_refuge_colony + name = HOME_SYSTEM_RESOMI_REFUGEE_COLONY + description = "Малоизвестная колония имперских беженцев, одна из бесчисленного множества подобных.

    Резоми, покидающие Империю с большим запасом снабжения и ресурсов, \ + и те некоторые, кому удается заработать немало денег в человеческом пространстве, нередко создают свои собственные колонии и места обитания. \ + Такие колонии порой распологаются далеко от обитаемого и изученного пространства. Население колоний редко превышает черту и в тысячу колонистов, \ + но так или иначе некоторые из них имеют достаточное влияние, дабы \"спасать\" других Резоми, живущих в куда более худших условиях." + language = LANGUAGE_RESOMI + capital = "Various" + ruling_body = "Various" + distance = "Various" + economic_power = 0.8 + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_SIGN, LANGUAGE_GUTTER, LANGUAGE_HUMAN_EURO) + +/singleton/cultural_info/location/r_homeless + name = HOME_SYSTEM_RESOMI_HOMELESS + description = "Судя по всему, обстоятельства сложились так что вам не удалось найти свой новый дом вне границ Империи. Но скорее всего вы смогли найти работу, \ + и сохранить часть \"средств\" на дальнейшее существование, правда?" + language = LANGUAGE_RESOMI + capital = "none" + ruling_body = "none" + distance = "none" + economic_power = 0.55 + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_SIGN, LANGUAGE_GUTTER, LANGUAGE_HUMAN_EURO) + +/singleton/cultural_info/location/imperial_colony + name = HOME_SYSTEM_RESOMI_IMPER_COLONY + description = "Одна из множества колоний нахоядщихся во власти Империи, как и остальные страдающая от недостатка нормальной пищи, припасов и низкого уровня жизни в большей или чуть меньшей степени." + language = LANGUAGE_RESOMI + capital = "Various" + ruling_body = "Various" + distance = "Various" + economic_power = 0.4 + secondary_langs = list(LANGUAGE_SPACER, LANGUAGE_SIGN) + + +/singleton/cultural_info/religion/chosen + name = RELIGION_RESOMI_CHOSEN + description = "Некогда преобладавшая религия до падения Республики. \"Вера Избранных\" - политеистическая религия, состоящая из четырнадцати божеств, в\ + которой каждый из богов управляет каким-либо аспектом жизни. Прежде всего, это Мать и Отец. Мать является создательницей звезд и неба, которая в паре\ + с Отцом вылупила остальных Богов. Отец - это прародитель всех Резоми, который поместил Сирисай на небеса и Резоми на него. Согласно Вере, святая\ + семья руководит избранным народом Резоми, для которых и создала галактику." + +/singleton/cultural_info/religion/emperor + name = RELIGION_RESOMI_EMPEROR + description = "Претерпевшая изменения во время падения \"Вера Избранных\", теперь ключевую роль в религии занимает бог-император - сын великих Матери и Отца,\ + посланный провести великий народ сквозь тёмное время." + +/singleton/cultural_info/religion/mountain + name = RELIGION_RESOMI_MOUNTAIN + description = "Образовавшаяся из поверий шахтёров, религия \"Эхо Гор\" стала популярна среди множества укрывшихся в шахтах и пещерах Резоми. Она говорит\ + о святости Гор, и возможности через медитацию стать единым с ними, подобным их несокрушимости и вечности, и обрести общую судьбу." + +/singleton/cultural_info/religion/skies + name = RELIGION_RESOMI_SKIES + description = "Прозрачные небеса пропускают свет бессмертных и прекрасных звёзд, некогда потрясших своей красотой вышедших на поверхность после восстания \ + машин Резоми. Религия \"Свет Небес\" гласит, что каждая звезда святая, и что именно из их божественного света и произошли Резоми,поэтому они обязаны воссоединиться с ними." diff --git a/mods/resomi/code/datum/species.dm b/mods/resomi/code/datum/species.dm new file mode 100644 index 0000000000000..18d5f0005d77f --- /dev/null +++ b/mods/resomi/code/datum/species.dm @@ -0,0 +1,202 @@ + + +/datum/species/resomi + name = SPECIES_RESOMI + name_plural = "Resomii" + description = "Раса пернатых хищников, которые развивались на холодном мире, почти \ + за пределами зоны Златовласки. Крайне хрупкие, они выработали охотничьи навыки \ + в которых особое внимание уделялось уничтожению добычи без ущерба для себя. Они являются \ + развитой культурой, находящаяся в хороших отношениях с Скрелами и людьми.." + + min_age = 15 + max_age = 45 + hidden_from_codex = FALSE + health_hud_intensity = 3 + + blood_color = "#d514f7" + flesh_color = "#5f7bb0" + base_color = "#001144" + tail = "resomitail" + tail_hair = "feathers" + strength = STR_HIGH + breath_pressure = 12 + + move_trail = /obj/decal/cleanable/blood/tracks/paw + + icobase = 'packs/infinity/icons/mob/human_races/species/resomi/body.dmi' + deform = 'packs/infinity/icons/mob/human_races/species/resomi/body.dmi' + damage_overlays = 'packs/infinity/icons/mob/human_races/species/resomi/damage_overlay.dmi' + damage_mask = 'packs/infinity/icons/mob/human_races/species/resomi/damage_mask.dmi' + blood_mask = 'packs/infinity/icons/mob/human_races/species/resomi/blood_mask.dmi' + preview_icon = 'packs/infinity/icons/mob/human_races/species/resomi/preview.dmi' + husk_icon = 'packs/infinity/icons/mob/human_races/species/resomi/husk.dmi' + + slowdown = -0.8 //speed fix? + + darksight_range = 2 + darksight_tint = DARKTINT_GOOD + flash_mod = 2 + total_health = 150 + brute_mod = 1.35 + burn_mod = 1.35 + metabolism_mod = 2.0 + mob_size = MOB_SMALL + holder_type = /obj/item/holder + light_sensitive = 6 + gluttonous = GLUT_TINY + blood_volume = 280 + hunger_factor = DEFAULT_HUNGER_FACTOR * 1.5 + taste_sensitivity = TASTE_SENSITIVE + pulse_rate_mod = 1.5 + body_temperature = 314.15 + + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_NO_FBP_CONSTRUCTION | SPECIES_NO_FBP_CHARGEN + appearance_flags = SPECIES_APPEARANCE_HAS_HAIR_COLOR | SPECIES_APPEARANCE_HAS_SKIN_COLOR | SPECIES_APPEARANCE_HAS_EYE_COLOR | SPECIES_APPEARANCE_HAS_A_SKIN_TONE + bump_flag = MONKEY + swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL + push_flags = MONKEY|SLIME|SIMPLE_ANIMAL|ALIEN + + cold_level_1 = 180 + cold_level_2 = 130 + cold_level_3 = 70 + heat_level_1 = 320 + heat_level_2 = 370 + heat_level_3 = 600 + heat_discomfort_level = 292 + heat_discomfort_strings = list( + "Ваши перья колются от жары..", + "Вы чувствуете дискомфорт от жары..", + ) + cold_discomfort_level = 200 + cold_discomfort_strings = list( + "Вы не чувствуете своих лап из-за холода..", + "Вы чувствуете усталость и чувство холода..", + "Твои перья щетинятся от холода..") + + has_limbs = list( + BP_CHEST = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand/resomi), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/resomi), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot/resomi), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/resomi) + ) + + has_organ = list( + BP_HEART = /obj/item/organ/internal/heart, + BP_LUNGS = /obj/item/organ/internal/lungs, + BP_LIVER = /obj/item/organ/internal/liver/resomi, + BP_STOMACH = /obj/item/organ/internal/stomach, + BP_KIDNEYS = /obj/item/organ/internal/kidneys/resomi, + BP_BRAIN = /obj/item/organ/internal/brain, + BP_EYES = /obj/item/organ/internal/eyes/resomi + ) + + unarmed_types = list( + /datum/unarmed_attack/bite/sharp, + /datum/unarmed_attack/claws, + /datum/unarmed_attack/punch, + /datum/unarmed_attack/stomp/weak + ) + + inherent_verbs = list( + /mob/living/carbon/human/proc/resomi_sonar_ping, + /mob/living/proc/toggle_pass_table + ) + + descriptors = list( + /datum/mob_descriptor/height = -8, + /datum/mob_descriptor/build = -8 + ) + + available_cultural_info = list( + TAG_CULTURE = list( + CULTURE_RESOMI_REFUGEE, + CULTURE_RESOMI_NEWGENERATION, + //CULTURE_RESOMI_BIRDCAGE, + CULTURE_RESOMI_EREMUS, + CULTURE_RESOMI_ASRANDA, + CULTURE_HUMAN_LUNAPOOR, + CULTURE_HUMAN_MARTIAN, + CULTURE_HUMAN_MARSTUN, + CULTURE_HUMAN_PLUTO, + CULTURE_HUMAN_BELTER, + CULTURE_HUMAN_CETI, + CULTURE_RESOMI_LOSTCOLONYRICH, + CULTURE_RESOMI_LOSTCOLONYPOOR, + //CULTURE_RESOMI_SAVEEL, + CULTURE_OTHER + ), + TAG_HOMEWORLD = list( + HOME_SYSTEM_RESOMI_BIRDCAGE, + HOME_SYSTEM_RESOMI_EREMUS, + HOME_SYSTEM_RESOMI_ASRANDA, + //HOME_SYSTEM_RESOMI_TIAMATH + HOME_SYSTEM_LUNA, + HOME_SYSTEM_MARS, + HOME_SYSTEM_PLUTO, + HOME_SYSTEM_CERES, + HOME_SYSTEM_TAU_CETI, + HOME_SYSTEM_RESOMI_REFUGEE_COLONY, + HOME_SYSTEM_RESOMI_LOST_COLONY, + HOME_SYSTEM_RESOMI_HOMELESS, + HOME_SYSTEM_RESOMI_SAVEEL, + HOME_SYSTEM_OTHER + ), + TAG_FACTION = list( + FACTION_NANOTRASEN, + FACTION_FREETRADE, + FACTION_HEPHAESTUS, + FACTION_XYNERGY, + FACTION_EXPEDITIONARY, + FACTION_CORPORATE, + FACTION_DAIS, + //FACTION_ZENG_HU, + //FACTION_WARD_TAKAHASHI, + //FACTION_GRAYSON, + //FACTION_AERTHER, + //FACTION_MAJOR_BILL, + //FACTION_FOCAL_POINT, + //FACTION_VEY_MED, + //FACTION_BISHOP, + //FACTION_SEPTENERGO, + FACTION_OTHER + ), + TAG_RELIGION = list( + RELIGION_RESOMI_CHOSEN, + RELIGION_RESOMI_EMPEROR, + RELIGION_AGNOSTICISM, + RELIGION_ATHEISM, + RELIGION_RESOMI_SKIES, + RELIGION_RESOMI_MOUNTAIN, + RELIGION_CHRISTIANITY, + RELIGION_OTHER + ) + ) + +/datum/species/resomi/equip_survival_gear(mob/living/carbon/human/H) + ..() + H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/lenses(H), slot_glasses) + +/datum/species/resomi/get_surgery_overlay_icon(mob/living/carbon/human/H) + return 'packs/infinity/icons/mob/human_races/species/resomi/surgery.dmi' + +/datum/species/resomi/skills_from_age(age) + switch(age) + if(0 to 17) . = -4 + if(18 to 25) . = 0 + if(26 to 35) . = 4 + else . = 8 + +/datum/species/resomi + default_emotes = list( + /singleton/emote/audible/chuckle/resomi, + /singleton/emote/audible/cough/resomi, + /singleton/emote/audible/laugh/resomi, + /singleton/emote/audible/scream/resomi, + ) diff --git a/mods/resomi/code/gear.dm b/mods/resomi/code/gear.dm new file mode 100644 index 0000000000000..6359f90e37a77 --- /dev/null +++ b/mods/resomi/code/gear.dm @@ -0,0 +1,5 @@ +/datum/gear/document/passport/resomi + display_name = "(Resomi) registration document" + path = /obj/item/passport/xeno/resomi + flags = 0 + whitelisted = list(SPECIES_RESOMI) diff --git a/mods/resomi/code/language.dm b/mods/resomi/code/language.dm new file mode 100644 index 0000000000000..eddf9f217e479 --- /dev/null +++ b/mods/resomi/code/language.dm @@ -0,0 +1,55 @@ +/datum/language/resomi + name = LANGUAGE_RESOMI + desc = "A trilling language spoken by the diminutive Resomi." + speech_verb = "щебечет" + ask_verb = "чирикает" + exclaim_verb = "верещит" + colour = "alien" + key = "e" + flags = WHITELISTED + space_chance = 50 + syllables = list( + "ca", "ra", "ma", "sa", "na", "ta", "la", "sha", "scha", "a", "a", + "ce", "re", "me", "se", "ne", "te", "le", "she", "sche", "e", "e", + "ci", "ri", "mi", "si", "ni", "ti", "li", "shi", "schi", "i", "i" + ) + shorthand = "SCH" + + +//AUTOHISS +/datum/species/resomi + autohiss_basic_map = list( + "з" = list("с") + ) + autohiss_extra_map = list( + "ч" = list("щ"), + + "ж" = list("ш") + ) + autohiss_exempt = list(LANGUAGE_RESOMI) + +/datum/language/resomi/get_random_name(gender) + return ..(gender, 1, 4, 1.5) + +//TODO: RESOMI MISC FILE +/datum/trader/trading_beacon/New() + ..() + speech[TRADER_HAIL_START + SPECIES_RESOMI] = "Greetings, I am MERCHANT, Artifical Intelligence onboard ORIGIN. We wish to trade with you, no more." + + +// RESOMI EMOTIONS + +/singleton/emote/audible/chuckle/resomi + emote_sound = 'packs/infinity/sound/voice/resomicougha.ogg' + + +/singleton/emote/audible/cough/resomi + emote_sound = 'packs/infinity/sound/voice/resomicoughb.ogg' + + +/singleton/emote/audible/laugh/resomi + emote_sound = 'packs/infinity/sound/voice/resomicougha.ogg' + + +/singleton/emote/audible/scream/resomi + emote_sound = 'packs/infinity/sound/voice/resomisneeze.ogg' diff --git a/mods/resomi/code/unit_tests.dm b/mods/resomi/code/unit_tests.dm new file mode 100644 index 0000000000000..0ccded0359e44 --- /dev/null +++ b/mods/resomi/code/unit_tests.dm @@ -0,0 +1,34 @@ +// ================================================================= +// RESOMI UNIT TESTS +// ================================================================= + +/datum/unit_test/mob_damage/resomi + name = "MOB: Resomi damage check template" + template = /datum/unit_test/mob_damage/resomi + mob_type = /mob/living/carbon/human/resomi + +/datum/unit_test/mob_damage/resomi/brute + name = "MOB: Resomi Brute Damage Check" + damagetype = DAMAGE_BRUTE + expected_vulnerability = EXTRA_VULNERABLE + +/datum/unit_test/mob_damage/resomi/fire + name = "MOB: Resomi Fire Damage Check" + damagetype = DAMAGE_BURN + expected_vulnerability = EXTRA_VULNERABLE + +/datum/unit_test/mob_damage/resomi/tox + name = "MOB: Resomi Toxins Damage Check" + damagetype = DAMAGE_TOXIN + +/datum/unit_test/mob_damage/resomi/oxy + name = "MOB: Resomi Oxygen Damage Check" + damagetype = DAMAGE_OXY + +/datum/unit_test/mob_damage/resomi/genetic + name = "MOB: Resomi Genetic Damage Check" + damagetype = DAMAGE_GENETIC + +/datum/unit_test/mob_damage/resomi/pain + name = "MOB: Resomi Pain Damage Check" + damagetype = DAMAGE_PAIN diff --git a/mods/resomi/icons/clothing/misc.dmi b/mods/resomi/icons/clothing/misc.dmi new file mode 100644 index 0000000000000..5e0e0d6db8612 Binary files /dev/null and b/mods/resomi/icons/clothing/misc.dmi differ diff --git a/mods/resomi/icons/clothing/onmob_accessories_resomi.dmi b/mods/resomi/icons/clothing/onmob_accessories_resomi.dmi new file mode 100644 index 0000000000000..1112714a98a99 Binary files /dev/null and b/mods/resomi/icons/clothing/onmob_accessories_resomi.dmi differ diff --git a/mods/resomi/icons/clothing/onmob_back_resomi.dmi b/mods/resomi/icons/clothing/onmob_back_resomi.dmi new file mode 100644 index 0000000000000..707cd2397ba1c Binary files /dev/null and b/mods/resomi/icons/clothing/onmob_back_resomi.dmi differ diff --git a/mods/resomi/icons/clothing/onmob_belt_resomi.dmi b/mods/resomi/icons/clothing/onmob_belt_resomi.dmi new file mode 100644 index 0000000000000..aa9d8ffa2e0ff Binary files /dev/null and b/mods/resomi/icons/clothing/onmob_belt_resomi.dmi differ diff --git a/mods/resomi/icons/clothing/onmob_ears_resomi.dmi b/mods/resomi/icons/clothing/onmob_ears_resomi.dmi new file mode 100644 index 0000000000000..95f437839b301 Binary files /dev/null and b/mods/resomi/icons/clothing/onmob_ears_resomi.dmi differ diff --git a/mods/resomi/icons/clothing/onmob_eyes_resomi.dmi b/mods/resomi/icons/clothing/onmob_eyes_resomi.dmi new file mode 100644 index 0000000000000..cd80d5c6f7cd9 Binary files /dev/null and b/mods/resomi/icons/clothing/onmob_eyes_resomi.dmi differ diff --git a/mods/resomi/icons/clothing/onmob_feet_resomi.dmi b/mods/resomi/icons/clothing/onmob_feet_resomi.dmi new file mode 100644 index 0000000000000..07b1c4eeb709d Binary files /dev/null and b/mods/resomi/icons/clothing/onmob_feet_resomi.dmi differ diff --git a/mods/resomi/icons/clothing/onmob_hands_resomi.dmi b/mods/resomi/icons/clothing/onmob_hands_resomi.dmi new file mode 100644 index 0000000000000..eb03bee08a935 Binary files /dev/null and b/mods/resomi/icons/clothing/onmob_hands_resomi.dmi differ diff --git a/mods/resomi/icons/clothing/onmob_head_resomi.dmi b/mods/resomi/icons/clothing/onmob_head_resomi.dmi new file mode 100644 index 0000000000000..f45b917b026ef Binary files /dev/null and b/mods/resomi/icons/clothing/onmob_head_resomi.dmi differ diff --git a/mods/resomi/icons/clothing/onmob_id_resomi.dmi b/mods/resomi/icons/clothing/onmob_id_resomi.dmi new file mode 100644 index 0000000000000..fb4d5b6e58347 Binary files /dev/null and b/mods/resomi/icons/clothing/onmob_id_resomi.dmi differ diff --git a/mods/resomi/icons/clothing/onmob_mask_resomi.dmi b/mods/resomi/icons/clothing/onmob_mask_resomi.dmi new file mode 100644 index 0000000000000..a93f82087a026 Binary files /dev/null and b/mods/resomi/icons/clothing/onmob_mask_resomi.dmi differ diff --git a/mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi b/mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi new file mode 100644 index 0000000000000..8f7bf868bb5c3 Binary files /dev/null and b/mods/resomi/icons/clothing/onmob_rig_back_resomi.dmi differ diff --git a/mods/resomi/icons/clothing/onmob_suit_resomi.dmi b/mods/resomi/icons/clothing/onmob_suit_resomi.dmi new file mode 100644 index 0000000000000..cc63d9de0cc9e Binary files /dev/null and b/mods/resomi/icons/clothing/onmob_suit_resomi.dmi differ diff --git a/mods/resomi/icons/clothing/onmob_under_resomi.dmi b/mods/resomi/icons/clothing/onmob_under_resomi.dmi new file mode 100644 index 0000000000000..2197b4b203dae Binary files /dev/null and b/mods/resomi/icons/clothing/onmob_under_resomi.dmi differ diff --git a/mods/resomi/icons/resomi_main.dmi b/mods/resomi/icons/resomi_main.dmi new file mode 100644 index 0000000000000..fa0720f1c4de6 Binary files /dev/null and b/mods/resomi/icons/resomi_main.dmi differ diff --git a/mods/resomi/sound/resomicough.ogg b/mods/resomi/sound/resomicough.ogg new file mode 100644 index 0000000000000..dfc594c73c1e4 Binary files /dev/null and b/mods/resomi/sound/resomicough.ogg differ diff --git a/mods/resomi/sound/resomilaugh.ogg b/mods/resomi/sound/resomilaugh.ogg new file mode 100644 index 0000000000000..58649042fabe6 Binary files /dev/null and b/mods/resomi/sound/resomilaugh.ogg differ diff --git a/mods/resomi/sound/resomiscream.ogg b/mods/resomi/sound/resomiscream.ogg new file mode 100644 index 0000000000000..59328b29ccbb8 Binary files /dev/null and b/mods/resomi/sound/resomiscream.ogg differ diff --git a/mods/resomi/sound/resomisneeze.ogg b/mods/resomi/sound/resomisneeze.ogg new file mode 100644 index 0000000000000..55827fcf1349e Binary files /dev/null and b/mods/resomi/sound/resomisneeze.ogg differ diff --git a/mods/rust_g/README.md b/mods/rust_g/README.md new file mode 100644 index 0000000000000..711c1e91e99a1 --- /dev/null +++ b/mods/rust_g/README.md @@ -0,0 +1,138 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1467 + + + +## RustG + +ID мода: RUST_G + + +### Описание мода + +Мод добавляет поддержку растижки - написанной на языке RUST библиотеки, которая +позволяет заменить более быстрыми те функции BYOND'а, которые он делает медленно. + + +### Изменения *кор кода* + +- `code/_macros.dm`: `#define to_world_log` +- `code/_helpers/logging.dm`: `/proc/game_log()` +- `code/controllers/master.dm`: `/datum/controller/master/New()` +- `code/controllers/subsystems/garbage.dm`: `/datum/controller/subsystem/garbage/Shutdown()` +- `code/datums/helper_datums/getrev.dm`: `/datum/getrev/New()` +- `code/game/world.dm`: + - `/world/New()` + - `/world/Topic()` + - `/world/Reboot()` +- `code/modules/persistence/persistence_datum.dm`: `/datum/persistent/proc/Shutdown()` + + +### Оверрайды + +- `mods/_master_files/code/game/world.dm`: `/world/save_mode()` +- `mods/_master_files/code/modules/client/preferences_persist.dm`: `/datum/preferences/save_pref_record()` + + +### Дефайны + +- `code/__defines/~mods/rust_g.dm`: + - `RUST_G` + - `RUSTG_OVERRIDE_BUILTINS` + - `RUSTG_CALL` + - `rustg_setup_acreplace` + - `rustg_setup_acreplace_with_options` + - `rustg_acreplace` + - `rustg_acreplace_with_replacements` + - `rustg_cnoise_generate` + - `rustg_dmi_strip_metadata` + - `rustg_dmi_create_png` + - `rustg_dmi_resize_png` + - `rustg_dmi_icon_states` + - `rustg_file_read` + - `rustg_file_exists` + - `rustg_file_write` + - `rustg_file_append` + - `rustg_file_get_line_count` + - `rustg_file_seek_line` + - `rustg_git_revparse` + - `rustg_git_commit_date` + - `RUSTG_HTTP_METHOD_GET` + - `RUSTG_HTTP_METHOD_PUT` + - `RUSTG_HTTP_METHOD_DELETE` + - `RUSTG_HTTP_METHOD_PATCH` + - `RUSTG_HTTP_METHOD_HEAD` + - `RUSTG_HTTP_METHOD_POST` + - `rustg_http_request_blocking` + - `rustg_http_request_async` + - `rustg_http_check_request` + - `RUSTG_JOB_NO_RESULTS_YET` + - `RUSTG_JOB_NO_SUCH_JOB` + - `RUSTG_JOB_ERROR` + - `rustg_json_is_valid` + - `rustg_log_write` + - `rustg_log_write_formatted` + - `rustg_log_write_no_format` + - `rustg_noise_get_at_coordinates` + - `rustg_sql_connect_pool` + - `rustg_sql_query_async` + - `rustg_sql_query_blocking` + - `rustg_sql_connected` + - `rustg_sql_disconnect_pool` + - `rustg_sql_check_query` + - `rustg_time_microseconds` + - `rustg_time_milliseconds` + - `rustg_time_reset` + - `rustg_raw_read_toml_file` + - `rustg_raw_toml_encode` + - `rustg_url_encode` + - `rustg_url_decode` + + +### Используемые файлы, не содержащиеся в модпаке + +- `scripts/install-rust_g.sh` + + +### Авторы: + +SuhEugene + diff --git a/mods/rust_g/_rust_g.dm b/mods/rust_g/_rust_g.dm new file mode 100644 index 0000000000000..7058c4c93da21 --- /dev/null +++ b/mods/rust_g/_rust_g.dm @@ -0,0 +1,4 @@ +/singleton/modpack/rust_g + name = "RustG" + desc = "Мод добавляет поддержку растижки - написанной на языке RUST библиотеки, которая позволяет заменить более быстрыми те функции BYOND'а, которые он делает медленно." + author = "SuhEugene" diff --git a/mods/rust_g/_rust_g.dme b/mods/rust_g/_rust_g.dme new file mode 100644 index 0000000000000..c539b19b7d5b9 --- /dev/null +++ b/mods/rust_g/_rust_g.dme @@ -0,0 +1,6 @@ +#ifndef MODPACK_RUST_G +#define MODPACK_RUST_G + +#include "_rust_g.dm" + +#endif diff --git a/mods/sauna_props/README.md b/mods/sauna_props/README.md new file mode 100644 index 0000000000000..accd395df430a --- /dev/null +++ b/mods/sauna_props/README.md @@ -0,0 +1,77 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1893 + + + +## Sauna Props + +ID мода: SAUNA_PROPS + + +### Описание мода + +Импортирует с Final Destination пропы для бани. + + +### Изменения *кор кода* + +- Отсутствуют + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +KandJX(Импортировал), DarkSoviet(Автор) + diff --git a/mods/sauna_props/_sauna_props.dm b/mods/sauna_props/_sauna_props.dm new file mode 100644 index 0000000000000..69aeaa40df3c2 --- /dev/null +++ b/mods/sauna_props/_sauna_props.dm @@ -0,0 +1,4 @@ +/singleton/modpack/sauna_props + name = "Sauna Props" + desc = "Импортирует с Final Destination пропы для бани." + author = "KandJX(Импортировал), DarkSoviet(Автор)" diff --git a/mods/sauna_props/_sauna_props.dme b/mods/sauna_props/_sauna_props.dme new file mode 100644 index 0000000000000..f30f5c3d0a37c --- /dev/null +++ b/mods/sauna_props/_sauna_props.dme @@ -0,0 +1,8 @@ +#ifndef MODPACK_SAUNA_PROPS +#define MODPACK_SAUNA_PROPS + +#include "_sauna_props.dm" + +#include "code/sauna_props.dm" + +#endif diff --git a/mods/sauna_props/code/sauna_props.dm b/mods/sauna_props/code/sauna_props.dm new file mode 100644 index 0000000000000..cda21f4ede8d0 --- /dev/null +++ b/mods/sauna_props/code/sauna_props.dm @@ -0,0 +1,65 @@ +/obj/item/mop/broom + name = "broom" + desc = "This one is made of fake leafsand branches." + icon = 'mods/sauna_props/icons/sauna_props.dmi' + icon_state = "sauna_broom" + hitsound = 'mods/sauna_props/sound/broomwhip.ogg' + hitsound = 'mods/sauna_props/sound/broomwhip.ogg' + attack_verb = list("whipped") + throwforce = 0.001 + force = 0.001 + mopspeed = 110 + +/obj/item/mop/broom/afterattack(atom/A, mob/user, proximity) + if(!proximity) + return + + if(is_type_in_list(A,moppable_types)) + var/turf/T = get_turf(A) + if(!T) + return + + user.visible_message(SPAN_WARNING("\The [user] begins to clean \the [T].")) + + if(do_after(user, mopspeed, T, do_flags = DO_DEFAULT | DO_PUBLIC_PROGRESS)) + if(T) + T.clean(src, user) + to_chat(user, SPAN_NOTICE("You have finished mopping!")) + +/obj/structure/bed/sauna_bench + name = "sauna bench" + desc = "A wooden sauna bench." + icon = 'mods/sauna_props/icons/sauna_props.dmi' + icon_state = "bench" + base_icon = "bench" + var/static/list/sauna_bench_buckle_pixel_shift = list(0, 10, 0) + +/obj/structure/bed/sauna_bench/New(newloc) + ..(newloc, MATERIAL_WOOD, MATERIAL_LEATHER_GENERIC) + +/obj/structure/bed/sauna_bench/Destroy() + buckle_pixel_shift = null + ..() + +/obj/structure/bed/sauna_bench/Initialize() + buckle_pixel_shift = sauna_bench_buckle_pixel_shift + . = ..() + +/obj/structure/bed/sauna_bench/on_update_icon() + icon_state = base_icon + +/obj/structure/bed/sauna_bench/middle + icon_state = "bench_middle" + base_icon = "bench_middle" + +/obj/structure/bed/sauna_bench/middle/north + icon_state = "bench_middlenorth" + base_icon = "bench_middlenorth" + +/obj/structure/bed/sauna_bench/north + icon_state = "bench_north" + base_icon = "bench_north" + +/obj/structure/bed/sauna_bench/south + icon_state = "bench_south" + base_icon = "bench_south" diff --git a/mods/sauna_props/icons/sauna_props.dmi b/mods/sauna_props/icons/sauna_props.dmi new file mode 100644 index 0000000000000..9addd4be2a23e Binary files /dev/null and b/mods/sauna_props/icons/sauna_props.dmi differ diff --git a/mods/sauna_props/sound/broomwhip.ogg b/mods/sauna_props/sound/broomwhip.ogg new file mode 100644 index 0000000000000..b5dddbbac5051 Binary files /dev/null and b/mods/sauna_props/sound/broomwhip.ogg differ diff --git a/mods/screentips/_screentips.dm b/mods/screentips/_screentips.dm new file mode 100644 index 0000000000000..5b913a8426340 --- /dev/null +++ b/mods/screentips/_screentips.dm @@ -0,0 +1,4 @@ +/singleton/modpack/screentips + name = "Screentips" + desc = "Модификация, добавляющая отключаемые в преференсах подсказки названия атома, на который наводится игрок, в самом верху экрана" + author = "SuhEugene" diff --git a/mods/screentips/_screentips.dme b/mods/screentips/_screentips.dme new file mode 100644 index 0000000000000..2244e6e6c19fb --- /dev/null +++ b/mods/screentips/_screentips.dme @@ -0,0 +1,11 @@ +#ifndef MODPACK_SCREENTIPS +#define MODPACK_SCREENTIPS + +#include "_screentips.dm" + +#include "code/handler.dm" +#include "code/hud.dm" +#include "code/preference.dm" +#include "code/screentip.dm" + +#endif diff --git a/mods/screentips/code/handler.dm b/mods/screentips/code/handler.dm new file mode 100644 index 0000000000000..fb84464fee97e --- /dev/null +++ b/mods/screentips/code/handler.dm @@ -0,0 +1,8 @@ +/client/MouseEntered(atom/hoverOn) + . = ..() + + if (GAME_STATE <= RUNLEVEL_SETUP || !screentip.show) + return + + screen |= screentip + screentip.set_text(hoverOn.name) diff --git a/mods/screentips/code/hud.dm b/mods/screentips/code/hud.dm new file mode 100644 index 0000000000000..abf9134716b3a --- /dev/null +++ b/mods/screentips/code/hud.dm @@ -0,0 +1,11 @@ +/datum/hud + ///UI for screentips that appear when you mouse over things + var/obj/screen/screentip/screentip_text + +/datum/hud/New() + screentip_text = new(null, src) + . = ..() + +/datum/hud/Destroy() + QDEL_NULL(screentip_text) + . = ..() diff --git a/mods/screentips/code/preference.dm b/mods/screentips/code/preference.dm new file mode 100644 index 0000000000000..86df4dbda45a5 --- /dev/null +++ b/mods/screentips/code/preference.dm @@ -0,0 +1,8 @@ +/datum/client_preference/show_screentip + description = "Screentip" + key = "SHOW_SCREENTIP" + options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) + +/datum/client_preference/show_screentip/changed(mob/preference_mob, new_value) + var/client/C = preference_mob.client + C.screentip.set_show(new_value == GLOB.PREF_SHOW) diff --git a/mods/screentips/code/screentip.dm b/mods/screentips/code/screentip.dm new file mode 100644 index 0000000000000..268b8db153a1e --- /dev/null +++ b/mods/screentips/code/screentip.dm @@ -0,0 +1,33 @@ +/client + var/obj/screen/screentip/screentip + +/client/New() + . = ..() + screentip = new + if (SScharacter_setup.initialized) + screentip.set_show(get_preference_value(/datum/client_preference/show_screentip) == GLOB.PREF_SHOW) + +/mob/new_player/deferred_login() + . = ..() + client?.screentip?.set_show(get_preference_value(/datum/client_preference/show_screentip) == GLOB.PREF_SHOW) + +/obj/screen/screentip + icon = null + icon_state = null + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + screen_loc = "TOP, CENTER - 3" + maptext_width = 256 + maptext_height = 480 + maptext_x = -16 + plane = HUD_PLANE + layer = UNDER_HUD_LAYER + var/show = TRUE + +/obj/screen/screentip/proc/set_text(text) + if (show) + maptext = "[text]" + +/obj/screen/screentip/proc/set_show(show) + src.show = show + if (!show) + maptext = "" diff --git a/mods/sprite_accessories/README.md b/mods/sprite_accessories/README.md new file mode 100644 index 0000000000000..3bddd0c556315 --- /dev/null +++ b/mods/sprite_accessories/README.md @@ -0,0 +1,77 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1496 + + + +## Спрайт-аксессуары + +ID мода: SPRITE_ACCESSORIES + + +### Описание мода + +Модулярно добавленные в билд спрайт-аксессуары для мобов. Это рога, ушки, спинные шипы и т.п. + + +### Изменения *кор кода* + +- Отсутствуют + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +UEDHighCommand + diff --git a/mods/sprite_accessories/_sprite_accessories.dm b/mods/sprite_accessories/_sprite_accessories.dm new file mode 100644 index 0000000000000..f39580f0e25fc --- /dev/null +++ b/mods/sprite_accessories/_sprite_accessories.dm @@ -0,0 +1,4 @@ +/singleton/modpack/sprite_accessories + name = "Спрайт-аксессуары" + desc = "Модулярно добавленные в билд спрайт-аксессуары. Это рога, ушки, спинные шипы и т.п." + author = "UEDHighCommand" diff --git a/mods/sprite_accessories/_sprite_accessories.dme b/mods/sprite_accessories/_sprite_accessories.dme new file mode 100644 index 0000000000000..f8dbd4deaf955 --- /dev/null +++ b/mods/sprite_accessories/_sprite_accessories.dme @@ -0,0 +1,7 @@ +#ifndef MODPACK_SPRITE_ACCESSORIES +#define MODPACK_SPRITE_ACCESSORIES + +#include "_sprite_accessories.dm" +#include "code/accessory_unathi.dm" + +#endif diff --git a/mods/sprite_accessories/code/accessory_unathi.dm b/mods/sprite_accessories/code/accessory_unathi.dm new file mode 100644 index 0000000000000..be1bbe51ffd62 --- /dev/null +++ b/mods/sprite_accessories/code/accessory_unathi.dm @@ -0,0 +1,21 @@ +// FACIAL + +/datum/sprite_accessory/facial_hair/species_unathi + name = "Horn Chin" + icon = 'mods/sprite_accessories/icons/unathi_facial.dmi' + icon_state = "facial_chinhorns" + gender = NEUTER + blend = ICON_MULTIPLY + species_allowed = list(SPECIES_UNATHI) + +/datum/sprite_accessory/facial_hair/species_unathi/hornadorns + name = "Horn Adorns" + icon_state = "facial_hornadorns" + +/datum/sprite_accessory/facial_hair/species_unathi/spinespikes + name = "Spine Spikes" + icon_state = "facial_spikes" + +/datum/sprite_accessory/facial_hair/species_unathi/dorsalfrill + name = "Frill Dorsal" + icon_state = "facial_dorsalfrill" diff --git a/mods/sprite_accessories/icons/unathi_facial.dmi b/mods/sprite_accessories/icons/unathi_facial.dmi new file mode 100644 index 0000000000000..ee277c6b5e357 Binary files /dev/null and b/mods/sprite_accessories/icons/unathi_facial.dmi differ diff --git a/mods/statusbar/README.md b/mods/statusbar/README.md new file mode 100644 index 0000000000000..a14014b9ed0c0 --- /dev/null +++ b/mods/statusbar/README.md @@ -0,0 +1,79 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1103 + + + +## Статусбар + +ID мода: STATUSBAR + + +### Описание мода + +Этот мод служит примером для разработчиков и существует лишь для того, +чтобы его можно было легко скопировать и вставить в другое место. + + +### Изменения *кор кода* + +- `code/modules/mob/new_player/login.dm`: `/mob/new_player/Login()` +- `code/modules/mob/new_player/logout.dm`: `/mob/new_player/Logout()` + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- `interface/skin.dmf` + + +### Авторы: + +SuhEugene + diff --git a/mods/statusbar/_statusbar.dm b/mods/statusbar/_statusbar.dm new file mode 100644 index 0000000000000..dda67dd57879f --- /dev/null +++ b/mods/statusbar/_statusbar.dm @@ -0,0 +1,4 @@ +/singleton/modpack/statusbar + name = "Статусбар - плашка статуса" + desc = "Та самая красивая мелкая незаметная штучка слева снизу." + author = "SuhEugene" diff --git a/mods/statusbar/_statusbar.dme b/mods/statusbar/_statusbar.dme new file mode 100644 index 0000000000000..f31d9b9cdd82e --- /dev/null +++ b/mods/statusbar/_statusbar.dme @@ -0,0 +1,7 @@ +#ifndef MODPACK_STATUSBAR +#define MODPACK_STATUSBAR + +#include "_statusbar.dm" +#include "code/statusbar.dm" + +#endif diff --git a/mods/statusbar/code/statusbar.dm b/mods/statusbar/code/statusbar.dm new file mode 100644 index 0000000000000..e8f8f39809025 --- /dev/null +++ b/mods/statusbar/code/statusbar.dm @@ -0,0 +1,22 @@ +/datum/client_preference/show_statusbar + description = "Statusbar" + key = "show_statusbar" + options = list(GLOB.PREF_SHOW, GLOB.PREF_HIDE) + +/datum/client_preference/show_statusbar/changed(mob/preference_mob, new_value) + if (new_value == GLOB.PREF_HIDE) + winset(preference_mob, "mapwindow.statusbar", "is-visible=false") + else + winset(preference_mob, "mapwindow.statusbar", "is-visible=true") + + +/client/verb/toggle_statusbar() + set name = "Toggle Status Bar" + set category = "OOC" + + var/is_shown = winget(usr, "mapwindow.statusbar", "is-visible") == "true" + + if (is_shown) + winset(usr, "mapwindow.statusbar", "is-visible=false") + else + winset(usr, "mapwindow.statusbar", "is-visible=true") diff --git a/mods/tajara/README.md b/mods/tajara/README.md new file mode 100644 index 0000000000000..9e7e152a7bb2a --- /dev/null +++ b/mods/tajara/README.md @@ -0,0 +1,87 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1583 + + + +## tajara + +ID мода: MODPACK_TAJARA + + +### Описание мода + +Таяра. Ксенораса прямоходящих кошачьих. + + +### Изменения *кор кода* + +- `code/unit_tests/icon_tests.dm`: `/datum/unit_test/icon_test/posters_shall_have_icon_states/start_test()` + + +### Оверрайды + +- "Отсутствуют" + + +### Дефайны + +- `mods\tajara\code\datum\_defines.dm`: + - `CULTURE_TAJARAN` + - `FACTION_TAJARAN_HADII` + - `FACTION_TAJARAN_KAYTAM` + - `FACTION_TAJARAN_NAZKIIN` + - `FACTION_TAJARAN_KAYTAM_KSD` + - `FACTION_TAJARAN_SHISHI` + - `FACTION_TAJARAN_JAR` + - `FACTION_TAJARAN_OTHER` + - `HOME_SYSTEM_AHDOMAI` + + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +LordNest + diff --git a/mods/tajara/_tajara.dm b/mods/tajara/_tajara.dm new file mode 100644 index 0000000000000..5ab1da0b538a5 --- /dev/null +++ b/mods/tajara/_tajara.dm @@ -0,0 +1,2 @@ +/singleton/modpack/tajara + name = "Tajara Content" diff --git a/mods/tajara/_tajara.dme b/mods/tajara/_tajara.dme new file mode 100644 index 0000000000000..ab4a5830070dc --- /dev/null +++ b/mods/tajara/_tajara.dme @@ -0,0 +1,27 @@ +#ifndef MODPACK_TAJARA +#define MODPACK_TAJARA + +#include "_tajara.dm" + +#include "code/language.dm" +#include "code/misc.dm" +#include "code/robolimbs.dm" +#include "code/posters.dm" +#include "code/unit_tests.dm" +#include "code/clothing/accessories.dm" +#include "code/clothing/clothing.dm" + +/* +SIERRA TODO: Это бля что? +#include "clothing/glasses.dm" +#include "clothing/misc.dm" +#include "clothing/suits.dm" +#include "clothing/under.dm" +*/ + +#include "code/datum/_defines.dm" +#include "code/datum/tajara_culture.dm" +#include "code/datum/sprite_accessory.dm" +#include "code/datum/species.dm" + +#endif diff --git a/mods/tajara/code/clothing/accessories.dm b/mods/tajara/code/clothing/accessories.dm new file mode 100644 index 0000000000000..bfda5a55d0f15 --- /dev/null +++ b/mods/tajara/code/clothing/accessories.dm @@ -0,0 +1,537 @@ +/obj/item/clothing/glasses/tajblind + name = "embroidered veil" + desc = "An classic Ahdominian made veil that allows the user to see while obscuring their eyes." + icon_state = "tajblind" + item_state = "tajblind" + item_icons = list(slot_glasses_str = 'mods/tajara/icons/onmob_eyes.dmi') + icon = 'mods/tajara/icons/obj_eyes.dmi' + prescription = 5 + body_parts_covered = EYES + +/obj/item/clothing/glasses/hud/health/tajblind + name = "lightweight veil" + desc = "An classic Ahdominian made veil that allows the user to see while obscuring their eyes. This one has an installed medical HUD." + item_icons = list(slot_glasses_str = 'mods/tajara/icons/onmob_eyes.dmi') + icon = 'mods/tajara/icons/obj_eyes.dmi' + icon_state = "tajblind_med" + item_state = "tajblind_med" + off_state = "tajblind_med" + body_parts_covered = EYES + +/obj/item/clothing/glasses/hud/science/tajblind + name = "science veil" + desc = "An classic Ahdominian made veil that allows the user to see while obscuring their eyes. This one has an in-built science HUD." + item_icons = list(slot_glasses_str = 'mods/tajara/icons/onmob_eyes.dmi') + icon = 'mods/tajara/icons/obj_eyes.dmi' + icon_state = "tajblind_sci" + item_state = "tajblind_sci" + prescription = 5 + body_parts_covered = EYES + +/obj/item/clothing/glasses/hud/security/prot/sunglasses/tajblind + name = "sleek veil" + desc = "An classic Ahdominian made veil that allows the user to see while obscuring their eyes. This one has an in-built security HUD." + item_icons = list(slot_glasses_str = 'mods/tajara/icons/onmob_eyes.dmi') + icon = 'mods/tajara/icons/obj_eyes.dmi' + icon_state = "tajblind_sec" + item_state = "tajblind_sec" + prescription = 5 + body_parts_covered = EYES + +/obj/item/clothing/glasses/meson/prescription/tajblind + name = "industrial veil" + desc = "An classic Ahdominian made veil that allows the user to see while obscuring their eyes. This one has installed mesons." + item_icons = list(slot_glasses_str = 'mods/tajara/icons/onmob_eyes.dmi') + icon = 'mods/tajara/icons/obj_eyes.dmi' + icon_state = "tajblind_meson" + item_state = "tajblind_meson" + off_state = "tajblind_meson" + body_parts_covered = EYES + +/obj/item/clothing/glasses/hud/health/tajvisor + name = "lightweight visor" + desc = "A modern Ahdominian made visor that allows the user to see while obscuring their eyes. This one has an installed medical HUD." + item_icons = list(slot_glasses_str = 'mods/tajara/icons/onmob_eyes.dmi') + icon = 'mods/tajara/icons/obj_eyes.dmi' + icon_state = "tajvisor_med" + item_state = "tajvisor_med" + off_state = "tajvisor_med" + body_parts_covered = EYES + +/obj/item/clothing/glasses/hud/science/tajvisor + name = "lightweight visor" + desc = "A modern Ahdominian made visor that allows the user to see while obscuring their eyes. This one has an installed science HUD." + item_icons = list(slot_glasses_str = 'mods/tajara/icons/onmob_eyes.dmi') + icon = 'mods/tajara/icons/obj_eyes.dmi' + icon_state = "tajvisor_sci" + item_state = "tajvisor_sci" + off_state = "tajvisor_sci" + body_parts_covered = EYES + +/obj/item/clothing/glasses/hud/security/prot/sunglasses/tajvisor + name = "sleek visor" + desc = "A modern Ahdominian made visor that allows the user to see while obscuring their eyes. This one has an in-built security HUD." + item_icons = list(slot_glasses_str = 'mods/tajara/icons/onmob_eyes.dmi') + icon = 'mods/tajara/icons/obj_eyes.dmi' + icon_state = "tajvisor_sec" + item_state = "tajvisor_sec" + prescription = 5 + body_parts_covered = EYES + +/obj/item/clothing/glasses/meson/prescription/tajvisor + name = "industrial visor" + desc = "A modern Ahdominian made visor that allows the user to see while obscuring their eyes. This one has installed mesons." + item_icons = list(slot_glasses_str = 'mods/tajara/icons/onmob_eyes.dmi') + icon = 'mods/tajara/icons/obj_eyes.dmi' + icon_state = "tajvisor_mes" + item_state = "tajvisor_mes" + off_state = "tajvisor_mes" + body_parts_covered = EYES + +/obj/item/clothing/glasses/meson/prescription/tajvisor/hybrid + name = "engineering visor" + desc = "A modern Ahdominian made visor that allows the user to see while obscuring their eyes. This one has installed as the mesons, and the add-on shielding module." + item_icons = list(slot_glasses_str = 'mods/tajara/icons/onmob_eyes.dmi') + icon = 'mods/tajara/icons/obj_eyes.dmi' + icon_state = "tajvisor_mes" + item_state = "tajvisor_mes" + off_state = "tajvisor_mes" + body_parts_covered = EYES + var/mode = 1 + +/obj/item/clothing/glasses/meson/prescription/tajvisor/hybrid/attack_self(mob/user) + if(!toggleable || user.incapacitated()) + return + switch(mode) + if(1) + flash_protection = FLASH_PROTECTION_MAJOR + tint = TINT_HEAVY + to_chat(user, "You switch \the [src] to welding protection mode.") + mode = 2 + active = TRUE + return + if(2) + flash_protection = FLASH_PROTECTION_NONE + vision_flags = SEE_TURFS + tint = TINT_NONE + to_chat(user, "You switch \the [src] to meson mode.") + mode = 3 + active = TRUE + user.update_inv_glasses() + return + if(3) + vision_flags = null + to_chat(user, "You switch off \the [src].") + mode = 1 + active = FALSE + user.update_inv_glasses() + return + +/obj/item/clothing/glasses/tajvisor + name = "tajaran master visor object, not used" + desc = "An Ahdominian made eyeguard." + item_icons = list(slot_glasses_str = 'mods/tajara/icons/onmob_eyes.dmi') + icon = 'mods/tajara/icons/obj_eyes.dmi' + body_parts_covered = EYES + +/obj/item/clothing/glasses/tajvisor/a + name = "visor" + icon_state = "tajvisor_a" + item_state = "tajvisor_a" + +/obj/item/clothing/glasses/tajvisor/b + name = "visor" + icon_state = "tajvisor_b" + item_state = "tajvisor_b" + +/obj/item/clothing/glasses/tajvisor/c + name = "visor" + icon_state = "tajvisor_c" + item_state = "tajvisor_c" + +/obj/item/clothing/glasses/tajvisor/d + name = "visor" + icon_state = "tajvisor_d" + item_state = "tajvisor_d" + +/obj/item/clothing/glasses/tajvisor/d + name = "visor" + icon_state = "tajvisor_d" + item_state = "tajvisor_d" + +/obj/item/clothing/glasses/tajvisor/e + name = "visor" + icon_state = "tajvisor_e" + item_state = "tajvisor_e" + +/obj/item/clothing/glasses/tajvisor/f + name = "visor" + icon_state = "tajvisor_f" + item_state = "tajvisor_f" + +/obj/item/clothing/glasses/tajvisor/g + name = "visor" + icon_state = "tajvisor_g" + item_state = "tajvisor_g" + + +// Tajaran clothing +/datum/gear/document/passport/tajara + display_name = "(Tajara) passport" + path = /obj/item/passport/xeno/tajara + whitelisted = list(SPECIES_TAJARA) + flags = 0 + +/obj/item/passport/xeno/tajara + name = "\improper Tajaran passport" + icon = 'maps/sierra/icons/obj/passports.dmi' + icon_state = "passport_taj" + desc = "A passport that apparently belongs to the Tajara." + +// Pre-modified gloves + +/datum/gear/gloves/dress/modified + display_name = "modified gloves, dress" + path = /obj/item/clothing/gloves/color/white/modified + whitelisted = list(SPECIES_TAJARA, SPECIES_UNATHI, SPECIES_YEOSA) + +/obj/item/clothing/under/taj_old_uniform + desc = "A loose-fitting uniform with lots of pockets made of canvas or similar material, very comfortable. Widely used by tajaran revolutionaries during slave's uprising, remained as favored uniform for a short period of time after the uprising and now just a reminder of dark age or a reason for pride. There is a tailhole on the back of the pants!" + name = "vintage uniform" + worn_state = "taj_old_uniform" + icon_state = "taj_old_uniform" + item_state = "taj_old_uniform" + icon = 'mods/tajara/icons/under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/tajara/icons/onmob_under.dmi') + +/obj/item/clothing/under/taj_new_fatigues + desc = "A tight-fitting union suit made of modern synthetic materials and features CCA markings, sleek. This uniform is one of the numerous variants, but the layout is somewhat similar. This one is provided by CCA Armed Forces for numerous PMC's when they sent over CCA control. There is a tailhole on the back of the pants!" + name = "CCA fatigues" + worn_state = "taj_new_fatigues" + icon_state = "taj_new_fatigues" + item_state = "taj_new_fatigues" + icon = 'mods/tajara/icons/under.dmi' + item_icons = list(slot_w_uniform_str = 'mods/tajara/icons/onmob_under.dmi') + + +/obj/item/clothing/accessory/scarf/tajaran + name = "tua-tari scarf" + desc = "A light and soft scarf, very long and wide. You also may rise it to hide your person..." + icon = 'mods/tajara/icons/obj_accessories.dmi' + icon_state = "tajneck" + accessory_icons = list(slot_w_uniform_str = 'mods/tajara/icons/onmob_accessories.dmi', slot_wear_suit_str = 'mods/tajara/icons/onmob_accessories.dmi') + item_icons = list(slot_wear_mask_str = 'mods/tajara/icons/onmob_accessories.dmi') + body_parts_covered = 0 + item_flags = ITEM_FLAG_FLEXIBLEMATERIAL + slot_flags = SLOT_MASK | SLOT_TIE + var/lowered_icon_state = "tajneck" + var/rised_icon_state = "tajmask" + +/obj/item/clothing/accessory/scarf/tajaran/attack_self(mob/user) + if(body_parts_covered >= FACE) + body_parts_covered &= ~FACE + icon_state = lowered_icon_state + to_chat(user, SPAN_NOTICE("You lowered your scarf.")) + else + body_parts_covered |= FACE + icon_state = rised_icon_state + to_chat(user, SPAN_NOTICE("You rised your scarf. Let's rrrobe someone!")) + +/obj/item/clothing/accessory/amulet + name = "talisman" + desc = "A simple metal amulet with runes, according to the primitive beliefs of Tajara, able to protect them from evil spirits." + icon_state = "taj_amulet" + icon = 'mods/tajara/icons/obj_accessories.dmi' + w_class = ITEM_SIZE_SMALL + slot_flags = SLOT_MASK | SLOT_TIE + +/* todo +Сделать, чтобы блокировало мелкое воздействие - чтение мыслей, слабое лечение. Сейчас оно высасывае псионику \ +со своего тайла - можно контрить псиоников, удерживая. +/obj/item/clothing/accessory/amulet/disrupts_psionics() + visible_message("The [src] protect his owner but explodes.") + playsound(src.loc, 'sound/effects/glass_step.ogg', 100, 1, -4) + QDEL_IN(src, 0) + return src +*/ + +/obj/item/clothing/accessory/amulet/medium + name = "amulet" + desc = "An expensive-looking amulet, interspersed with unknown crystals and runes, according to the primitive beliefs of Tajara, able to protect them from evil spirits." + icon_state = "taj_amulet_2" + +/* todo +/obj/item/clothing/accessory/amulet/medium/disrupts_psionics() + if(prob(20)) + visible_message("The [src] protect his owner but explodes.") + playsound(src.loc, 'sound/effects/glass_step.ogg', 100, 1, -4) + QDEL_IN(src, 0) + return src +*/ + +/obj/item/clothing/accessory/amulet/strong + name = "averter" + desc = "Amulet of Tajara, created from the primordial stone according to their belief, able to protect according to their primitive religion from evil spirits and their servants. The runes on the amulet are etched with acid." + icon_state = "taj_amulet_3" + +/* todo +/obj/item/clothing/accessory/amulet/strong/disrupts_psionics() + visible_message("The [src] radiated faint waves of heat and light, protecting the wearer from psionic influence...") + if(prob(0.01)) + visible_message("The [src] protect his owner but explodes.") + playsound(src.loc, 'sound/effects/glass_step.ogg', 100, 1, -4) + QDEL_IN(src, 0) + return src +*/ + + + +/* todo +Сделать, чтобы блокировало мелкое воздействие - чтение мыслей, слабое лечение. Сейчас оно высасывае псионику \ +со своего тайла - можно контрить псиоников, удерживая. +/obj/item/clothing/accessory/amulet/disrupts_psionics() + visible_message("The [src] protect his owner but explodes.") + playsound(src.loc, 'sound/effects/glass_step.ogg', 100, 1, -4) + QDEL_IN(src, 0) + return src +*/ + +/obj/item/clothing/accessory/amulet/medium + name = "amulet" + desc = "An expensive-looking amulet, interspersed with unknown crystals and runes, according to the primitive beliefs of Tajara, able to protect them from evil spirits." + icon_state = "taj_amulet_2" + +/obj/item/clothing/accessory/amulet/strong + name = "averter" + desc = "Amulet of Tajara, created from the primordial stone according to their belief, able to protect according to their primitive religion from evil spirits and their servants. The runes on the amulet are etched with acid." + icon_state = "taj_amulet_3" + +/datum/gear/head/zhan_scarf/neck + display_name = "(Tajara) Tua-Tari scarf" + path = /obj/item/clothing/accessory/scarf/tajaran + whitelisted = list(SPECIES_TAJARA) + flags = GEAR_HAS_COLOR_SELECTION + +/datum/gear/uniform/tajara + display_name = "(Tajara) vintage uniform" + path = /obj/item/clothing/under/taj_old_uniform + whitelisted = list(SPECIES_TAJARA) + +/obj/item/clothing/suit/storage/taj_overcoat + name = "vintage tajaran overcoat" + desc = "A lengthy coat made of wooly, but sturdy and hydrophobic material. Designed mostly to protect against strong wind and other harsh weather conditions on Ahdomai, when having fur is not enough. There is a weird U-shape hole on the back of the coat for tail!" + icon_state = "taj_overcoat" + item_state = "taj_overcoat" + icon = 'mods/tajara/icons/suit.dmi' + item_icons = list(slot_wear_suit_str = 'mods/tajara/icons/onmob_suit.dmi') + species_restricted = list(SPECIES_TAJARA) + +/datum/gear/uniform/tajara/taj_new_fatigues + display_name = "(Tajara) CCA fatigues" + path = /obj/item/clothing/under/taj_new_fatigues + +/datum/gear/suit/tajara + display_name = "(Tajara) vintage tajaran overcoat" + path = /obj/item/clothing/suit/storage/taj_overcoat + whitelisted = list(SPECIES_TAJARA) + +/datum/gear/shoes/tajara + display_name = "(Tajara) vintage boots" + path = /obj/item/clothing/shoes/taj_old_shoes + whitelisted = list(SPECIES_TAJARA) + +/datum/gear/shoes/tajara/taj_new_shoes + display_name = "(Tajara) military boots" + path = /obj/item/clothing/shoes/taj_new_shoes + +/datum/gear/shoes/tajara/taj_new_shoes_cut + display_name = "(Tajara) toeless military boots" + path = /obj/item/clothing/shoes/taj_new_shoes_cut + +/datum/gear/shoes/tajara/taj_old_shoes_cut + display_name = "(Tajara) toeless vintage boots" + path = /obj/item/clothing/shoes/taj_old_shoes_cut + + +/datum/gear/accessory/amulet + display_name = "(Tajara) talisman selection" + path = /obj/item/clothing/accessory/amulet + whitelisted = list(SPECIES_TAJARA) + flags = GEAR_HAS_TYPE_SELECTION + +//Taj clothing. + +/obj/item/clothing/suit/xeno/furs + name = "heavy furs" + desc = "A traditional Zhan-Khazan garment." + icon_state = "zhan_furs" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS + +/obj/item/clothing/head/xeno/scarf + name = "headscarf" + desc = "A scarf of coarse fabric. Seems to have ear-holes." + icon_state = "zhan_scarf" + body_parts_covered = HEAD|FACE + +/obj/item/clothing/shoes/sandal/xeno/caligae + name = "caligae" + desc = "The standard Tajaran footwear loosly resembles the Roman Caligae. Made of leather and rubber, their unique design allows for improved traction and protection. They don't look like they would fit on anyone but a Tajara." + icon_state = "caligae" + item_state = "caligae" + body_parts_covered = FEET|LEGS + species_restricted = list(SPECIES_TAJARA) + +/obj/item/clothing/shoes/sandal/xeno/caligae/white + desc = "The standard Tajaran footwear loosly resembles the Roman Caligae. Made of leather and rubber, their unique design allows for improved traction and protection. They don't look like they would fit on anyone but a Tajara. /This one has a white covering." + icon_state = "whitecaligae" + item_state = "whitecaligae" + +/obj/item/clothing/shoes/sandal/xeno/caligae/grey + desc = "The standard Tajaran footwear loosly resembles the Roman Caligae. Made of leather and rubber, their unique design allows for improved traction and protection. They don't look like they would fit on anyone but a Tajara. /This one has a grey covering." + icon_state = "greycaligae" + item_state = "greycaligae" + +/obj/item/clothing/shoes/sandal/xeno/caligae/black + desc = "The standard Tajaran footwear loosly resembles the Roman Caligae. Made of leather and rubber, their unique design allows for improved traction and protection. They don't look like they would fit on anyone but a Tajara. /This one has a black covering." + icon_state = "blackcaligae" + item_state = "blackcaligae" + +/obj/item/clothing/accessory/shouldercape + name = "shoulder cape" + desc = "A simple shoulder cape." + icon_state = "gruntcape" + slot = ACCESSORY_SLOT_INSIGNIA // Adding again in case we want to change it in the future. + +/obj/item/clothing/accessory/shouldercape/grunt + name = "modir cape" + desc = "A simple looking cape with a couple of runes woven into the fabric." + icon_state = "gruntcape" // Again, just in case it is changed. + +/obj/item/clothing/accessory/shouldercape/officer + name = "nraji cape" + desc = "A decorated cape. Runed patterns have been woven into the fabric." + icon_state = "officercape" + +/obj/item/clothing/accessory/shouldercape/command + name = "hejun cape" + desc = "A heavily decorated cape with rank emblems on the shoulders signifying positions within the Tajaran govenment. An ornate runed design has been woven into the fabric of it" + icon_state = "commandcape" + +/obj/item/clothing/accessory/shouldercape/general + name = "ginajir cape" + desc = "An extremely decorated cape with an intricately runed design has been woven into the fabric of this cape with great care. This cape can only be found within the Tajaran elite." + icon_state = "leadercape" + +// Taj clothing +/datum/gear/eyes/medical/tajblind + display_name = "(Tajara) veil, medical" + path = /obj/item/clothing/glasses/hud/health/tajblind + whitelisted = list(SPECIES_TAJARA) + +/datum/gear/eyes/medical/tajblind/New() + return + +/datum/gear/eyes/meson/tajblind + display_name = "(Tajara) veil, industrial" + path = /obj/item/clothing/glasses/meson/prescription/tajblind + whitelisted = list(SPECIES_TAJARA) + +/datum/gear/eyes/meson/tajblind/New() + return + +/datum/gear/eyes/sciencegoggles_tajblind + display_name = "(Tajara) veil, science " + path = /obj/item/clothing/glasses/hud/science/tajblind + whitelisted = list(SPECIES_TAJARA) + +/datum/gear/eyes/security/tajblind + display_name = "(Tajara) veil, sleek" + path = /obj/item/clothing/glasses/hud/security/prot/sunglasses/tajblind + whitelisted = list(SPECIES_TAJARA) + +/datum/gear/eyes/security/tajblind/New() + return + +/datum/gear/eyes/visors + display_name = "(Tajara) visor selection" + path = /obj/item/clothing/glasses/tajvisor + whitelisted = list(SPECIES_TAJARA) + +/datum/gear/eyes/visors/New() + ..() + var/visors = list() + visors["visor type-A (Tajara)"] = /obj/item/clothing/glasses/tajvisor/a + visors["visor type-B (Tajara)"] = /obj/item/clothing/glasses/tajvisor/b + visors["visor type-C (Tajara)"] = /obj/item/clothing/glasses/tajvisor/c + visors["visor type-D (Tajara)"] = /obj/item/clothing/glasses/tajvisor/d + visors["visor type-E (Tajara)"] = /obj/item/clothing/glasses/tajvisor/e + visors["visor type-F (Tajara)"] = /obj/item/clothing/glasses/tajvisor/f + visors["visor type-G (Tajara)"] = /obj/item/clothing/glasses/tajvisor/g + gear_tweaks += new/datum/gear_tweak/path(visors) + +/datum/gear/eyes/sciencegoggles_tajvisor + display_name = "(Tajara) visor, science " + path = /obj/item/clothing/glasses/hud/science/tajvisor + whitelisted = list(SPECIES_TAJARA) + +/datum/gear/eyes/medical/tajvisor + display_name = "(Tajara) visor, medical" + path = /obj/item/clothing/glasses/hud/health/tajvisor + whitelisted = list(SPECIES_TAJARA) + +/datum/gear/eyes/medical/tajvisor/New() + return + +/datum/gear/eyes/security/tajvisor + display_name = "(Tajara) visor, security" + path = /obj/item/clothing/glasses/hud/security/prot/sunglasses/tajvisor + whitelisted = list(SPECIES_TAJARA) + +/datum/gear/eyes/security/tajvisor/New() + return + +/datum/gear/eyes/meson/tajvisor + display_name = "(Tajara) visor, industrial" + path = /obj/item/clothing/glasses/meson/prescription/tajvisor + whitelisted = list(SPECIES_TAJARA) + +/datum/gear/eyes/meson/tajvisor/New() + return + +/datum/gear/eyes/meson/tajvisor/hybr + display_name = "(Tajara) visor, engineering" + path = /obj/item/clothing/glasses/meson/prescription/tajvisor/hybrid + whitelisted = list(SPECIES_TAJARA) + cost = 3 + +/datum/gear/shoes/caligae + display_name = "(Tajara) caligae" + path = /obj/item/clothing/shoes/sandal/xeno/caligae + whitelisted = list(SPECIES_TAJARA) + +/datum/gear/shoes/caligae/New() + ..() + var/caligae = list() + caligae["no sock"] = /obj/item/clothing/shoes/sandal/xeno/caligae + caligae["black sock"] = /obj/item/clothing/shoes/sandal/xeno/caligae/black + caligae["grey sock"] = /obj/item/clothing/shoes/sandal/xeno/caligae/grey + caligae["white sock"] = /obj/item/clothing/shoes/sandal/xeno/caligae/white + gear_tweaks += new/datum/gear_tweak/path(caligae) + +/datum/gear/head/zhan_scarf + display_name = "(Tajara) Zhan headscarf" + path = /obj/item/clothing/head/xeno/scarf + whitelisted = list(SPECIES_TAJARA) + +/datum/gear/accessory/capes + display_name = "(Tajara) shoulder capes" + path = /obj/item/clothing/accessory/shouldercape + whitelisted = list(SPECIES_TAJARA) + +/datum/gear/accessory/capes/New() + ..() + var/capes = list() + capes["simple cape"] = /obj/item/clothing/accessory/shouldercape/grunt + capes["decorated cape"] = /obj/item/clothing/accessory/shouldercape/officer + capes["government cape"] = /obj/item/clothing/accessory/shouldercape/command + gear_tweaks += new/datum/gear_tweak/path(capes) diff --git a/mods/tajara/code/clothing/clothing.dm b/mods/tajara/code/clothing/clothing.dm new file mode 100644 index 0000000000000..5779e824e5ae4 --- /dev/null +++ b/mods/tajara/code/clothing/clothing.dm @@ -0,0 +1,190 @@ + +//Helmets + +/obj/item/clothing/head/helmet/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + +/obj/item/clothing/head/welding/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + +//MASKS +/obj/item/clothing/mask/balaclava/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + +/obj/item/clothing/mask/breath/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/mask.dmi') + +/obj/item/clothing/mask/gas/aquabreather/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/mask.dmi') + +/obj/item/clothing/mask/surgical/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/mask.dmi') + +//suit +/obj/item/clothing/suit/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/suit.dmi') + +//RIG +/obj/item/clothing/suit/space/rig/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/suit.dmi') + +// RIG PARTS +/obj/item/clothing/head/helmet/space/rig/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + +/obj/item/clothing/head/helmet/space/rig/ert/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + +/obj/item/clothing/suit/space/rig/light/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/suit.dmi') + +/obj/item/clothing/head/helmet/space/rig/light/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + +/obj/item/clothing/head/helmet/space/rig/industrial/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + +/obj/item/clothing/suit/space/rig/industrial/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/suit.dmi') + +/obj/item/clothing/head/helmet/space/rig/eva/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + +/obj/item/clothing/suit/space/rig/eva/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/suit.dmi') + +/obj/item/clothing/head/helmet/space/rig/hazmat/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + +/obj/item/clothing/suit/space/rig/hazmat/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/suit.dmi') + +/obj/item/clothing/head/helmet/space/rig/medical/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + +/obj/item/clothing/suit/space/rig/medical/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/suit.dmi') + +/obj/item/clothing/shoes/magboots/rig/medical/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/feet.dmi') + +/obj/item/clothing/gloves/rig/medical/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/hands.dmi') + +/obj/item/clothing/head/helmet/space/rig/hazard/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + +/obj/item/clothing/suit/space/rig/hazard/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/suit.dmi') + +/obj/item/clothing/shoes/magboots/rig/hazard/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/feet.dmi') + +/obj/item/clothing/gloves/rig/hazard/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/hands.dmi') + + +/obj/item/clothing/head/helmet/space/void/engineering/alt/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + +/obj/item/clothing/suit/space/void/engineering/alt/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/suit.dmi') + + +/obj/item/clothing/head/helmet/space/void/security/alt/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + +/obj/item/clothing/suit/space/void/security/alt/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/suit.dmi') + +/obj/item/clothing/head/helmet/space/void/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + LAZYSET(sprite_sheets_obj, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/obj/hats.dmi') + LAZYADD(species_restricted, list(SPECIES_TAJARA)) + +/obj/item/clothing/suit/space/void/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/suit.dmi') + LAZYSET(sprite_sheets_obj, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/obj/suits.dmi') + LAZYADD(species_restricted, list(SPECIES_TAJARA)) + +/obj/item/clothing/suit/space/rig/Initialize() + . = ..() + LAZYADD(species_restricted, list(SPECIES_TAJARA)) + +/obj/item/clothing/head/Initialize() + . = ..() + LAZYSET(sprite_sheets, SPECIES_TAJARA, 'mods/tajara/icons/sprite_sheets/helmet.dmi') + + +/obj/machinery/suit_cycler/Initialize() + . = ..() + LAZYADD(species, list(SPECIES_TAJARA)) + + +/obj/item/clothing/shoes/taj_old_shoes + desc = "An old pattern shoes made of blackened leather with greenish protector. Built to keep moisture out and prevent \"trench paw\". This ones are for cold winter periods and cover the whole feet." + name = "vintage boots" + icon_state = "taj_old_shoes" + item_state = "taj_old_shoes" + icon = 'mods/tajara/icons/shoes.dmi' + item_icons = list(slot_shoes_str = 'mods/tajara/icons/onmob_feet.dmi') + species_restricted = list(SPECIES_TAJARA) + +/obj/item/clothing/shoes/taj_new_shoes + desc = "A new pattern boots made of black leather with a slighly blueish tint. This ones quite ergonomic and not as encumbering as the old boots. Built to keep moisture out and prevent \"trench paw\". This ones are for cold winter periods and cover the whole feet." + name = "military boots" + icon_state = "taj_new_shoes" + item_state = "taj_new_shoes" + icon = 'mods/tajara/icons/shoes.dmi' + item_icons = list(slot_shoes_str = 'mods/tajara/icons/onmob_feet.dmi') + species_restricted = list(SPECIES_TAJARA) + +/obj/item/clothing/shoes/taj_new_shoes_cut + desc = "A new pattern boots made of black leather with a slighly blueish tint. This ones quite ergonomic and not as encumbering as the old boots. Light and toeless version for long distance marches!" + name = "toeless military boots" + icon_state = "taj_new_shoes" + item_state = "taj_new_shoes_cut" + icon = 'mods/tajara/icons/shoes.dmi' + item_icons = list(slot_shoes_str = 'mods/tajara/icons/onmob_feet.dmi') + species_restricted = list(SPECIES_TAJARA) + +/obj/item/clothing/shoes/taj_old_shoes_cut + desc = "An old pattern shoes made of blackened leather with greenish protector. Built to withstand a lot of abuse during travel. This ones are for \"warmer\" and dry periods, good for hiking, good for toes." + name = "toeless vintage boots" + icon_state = "taj_old_shoes" + item_state = "taj_old_shoes_cut" + icon = 'mods/tajara/icons/shoes.dmi' + item_icons = list(slot_shoes_str = 'mods/tajara/icons/onmob_feet.dmi') + species_restricted = list(SPECIES_TAJARA) diff --git a/mods/tajara/code/datum/_defines.dm b/mods/tajara/code/datum/_defines.dm new file mode 100644 index 0000000000000..43ed9592b995f --- /dev/null +++ b/mods/tajara/code/datum/_defines.dm @@ -0,0 +1,11 @@ +#define CULTURE_TAJARAN "CMA Citizen" + +#define FACTION_TAJARAN_HADII "Hadii Family" +#define FACTION_TAJARAN_KAYTAM "Kaytam Family" +#define FACTION_TAJARAN_NAZKIIN "Nazkiin Family" +#define FACTION_TAJARAN_KAYTAM_KSD "Khan-Shanu'Dar clan" +#define FACTION_TAJARAN_SHISHI "Shi-Shi Family" +#define FACTION_TAJARAN_JAR "Jar'Nash'Karr'Ree Family" +#define FACTION_TAJARAN_OTHER "Other Family" + +#define HOME_SYSTEM_AHDOMAI "Ahdomai" diff --git a/mods/tajara/code/datum/species.dm b/mods/tajara/code/datum/species.dm new file mode 100644 index 0000000000000..f266402e5c20c --- /dev/null +++ b/mods/tajara/code/datum/species.dm @@ -0,0 +1,165 @@ +/datum/species/tajaran + name = SPECIES_TAJARA + name_plural = "Tajaran" + icobase = 'mods/tajara/icons/tajara_body/body.dmi' + deform = 'mods/tajara/icons/tajara_body/deformed_body.dmi' + preview_icon = 'mods/tajara/icons/tajara_body/preview.dmi' + tail = "tajtail" + tail_animation = 'mods/tajara/icons/tajara_body/tail.dmi' + default_head_hair_style = "Tajaran Ears" + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite/sharp) + + + + + darksight_range = 7 + darksight_tint = DARKTINT_GOOD + slowdown = -0.5 + brute_mod = 1.15 + burn_mod = 1.15 + flash_mod = 1.5 + hunger_factor = DEFAULT_HUNGER_FACTOR * 1.5 + + gluttonous = GLUT_TINY + hidden_from_codex = FALSE + health_hud_intensity = 1.75 + + min_age = 19 + max_age = 120 + + description = "The Tajaran are a species of furred mammalian bipeds hailing from the chilly planet of Ahdomai \ + in the Zamsiin-lr system. They are a naturally superstitious species, with the new generations growing up with tales \ + of the heroic struggles of their forebears against the Overseers. This spirit has led them forward to the \ + reconstruction and advancement of their society to what they are today. Their pride for the struggles they \ + went through is heavily tied to their spiritual beliefs. Recent discoveries have jumpstarted the progression \ + of highly advanced cybernetic technology, causing a culture shock within Tajaran society." + + cold_level_1 = 200 //Default 260 + cold_level_2 = 140 //Default 200 + cold_level_3 = 80 //Default 120 + + heat_level_1 = 330 //Default 360 + heat_level_2 = 380 //Default 400 + heat_level_3 = 800 //Default 1000 + + heat_discomfort_level = 292 + heat_discomfort_strings = list( + "Your fur prickles in the heat.", + "You feel uncomfortably warm.", + "Your overheated skin itches." + ) + cold_discomfort_level = 230 + + primitive_form = "Farwa" + + + default_emotes = list( + /singleton/emote/human/swish, + /singleton/emote/human/wag, + /singleton/emote/human/sway, + /singleton/emote/human/qwag, + /singleton/emote/human/fastsway, + /singleton/emote/human/swag, + /singleton/emote/human/stopsway + ) + + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED + appearance_flags = SPECIES_APPEARANCE_HAS_HAIR_COLOR | SPECIES_APPEARANCE_HAS_LIPS | SPECIES_APPEARANCE_HAS_UNDERWEAR | SPECIES_APPEARANCE_HAS_SKIN_COLOR | SPECIES_APPEARANCE_HAS_EYE_COLOR + + flesh_color = "#afa59e" + base_color = "#333333" + blood_color = "#862a51" + organs_icon = 'mods/tajara/icons/tajara_body/organs.dmi' + + move_trail = /obj/decal/cleanable/blood/tracks/paw +/* + base_auras = list( + /obj/aura/speed/bio/tajaran + ) + inherent_verbs = list( + /mob/living/carbon/human/proc/toggle_sprint + ) +*/ + sexybits_location = BP_GROIN + + available_cultural_info = list( + TAG_CULTURE = list( + CULTURE_TAJARAN, + CULTURE_HUMAN, + CULTURE_HUMAN_MARTIAN, + CULTURE_HUMAN_MARSTUN, + CULTURE_HUMAN_LUNAPOOR, + CULTURE_HUMAN_LUNARICH, + CULTURE_HUMAN_VENUSIAN, + CULTURE_HUMAN_VENUSLOW, + CULTURE_HUMAN_BELTER, + CULTURE_HUMAN_EARTH, + CULTURE_HUMAN_CETIN, + CULTURE_HUMAN_CETIS, + CULTURE_HUMAN_CETII, + CULTURE_HUMAN_SPACER, + CULTURE_HUMAN_OTHER + ), + TAG_HOMEWORLD = list( + HOME_SYSTEM_AHDOMAI, + HOME_SYSTEM_EARTH, + HOME_SYSTEM_LUNA, + HOME_SYSTEM_MARS, + HOME_SYSTEM_VENUS, + HOME_SYSTEM_CERES, + HOME_SYSTEM_PLUTO, + HOME_SYSTEM_TAU_CETI, + HOME_SYSTEM_HELIOS, + HOME_SYSTEM_GAIA, + HOME_SYSTEM_OTHER + ), + TAG_FACTION = list( + FACTION_TAJARAN_HADII, + FACTION_TAJARAN_KAYTAM, + FACTION_TAJARAN_KAYTAM_KSD, + FACTION_TAJARAN_SHISHI, + FACTION_TAJARAN_JAR, + FACTION_TAJARAN_NAZKIIN, + FACTION_TAJARAN_OTHER, + FACTION_NANOTRASEN, + FACTION_FREETRADE, + FACTION_HEPHAESTUS, + FACTION_XYNERGY, + FACTION_EXPEDITIONARY, + FACTION_PCRC, + FACTION_CORPORATE, + FACTION_DAIS, + FACTION_SAARE, + FACTION_OTHER + ), + TAG_RELIGION = list( + RELIGION_SPIRITUALISM, + RELIGION_JUDAISM, + RELIGION_HINDUISM, + RELIGION_BUDDHISM, + RELIGION_ISLAM, + RELIGION_CHRISTIANITY, + RELIGION_AGNOSTICISM, + RELIGION_DEISM, + RELIGION_THELEMA, + RELIGION_ATHEISM, + RELIGION_OTHER + ) + ) + +/obj/item/organ/internal/eyes/taj + name = "tajara eyes" + + +/datum/species/tajaran/equip_survival_gear(mob/living/carbon/human/H) + ..() + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes) + H.equip_to_slot_or_del(new /obj/item/clothing/glasses/tajblind(H),slot_glasses) + +// human_species part +/mob/living/carbon/human/tajaran/Initialize(mapload) + head_hair_style = "Tajaran Ears" + . = ..(mapload, SPECIES_TAJARA) + +/mob/living/carbon/human/farwa/Initialize(mapload) + . = ..(mapload, "Farwa") diff --git a/mods/tajara/code/datum/sprite_accessory.dm b/mods/tajara/code/datum/sprite_accessory.dm new file mode 100644 index 0000000000000..0f8a2db003dde --- /dev/null +++ b/mods/tajara/code/datum/sprite_accessory.dm @@ -0,0 +1,344 @@ + +/datum/sprite_accessory/hair/taj + name = "Tajaran Ears" + icon_state = "ears_plain" + species_allowed = list(SPECIES_TAJARA) + icon = 'mods/tajara/icons/tajara_body/sprite_accessory/hair.dmi' + +/datum/sprite_accessory/hair/taj/ears_clean + name = "Tajara Clean" + icon_state = "hair_clean" + +/datum/sprite_accessory/hair/taj/ears_bangs + name = "Tajara Bangs" + icon_state = "hair_bangs" + +/datum/sprite_accessory/hair/taj/ears_braid + name = "Tajara Braid" + icon_state = "hair_tbraid" + +/datum/sprite_accessory/hair/taj/ears_shaggy + name = "Tajara Shaggy" + icon_state = "hair_shaggy" + +/datum/sprite_accessory/hair/taj/ears_mohawk + name = "Tajaran Mohawk" + icon_state = "hair_mohawk" + +/datum/sprite_accessory/hair/taj/ears_plait + name = "Tajara Plait" + icon_state = "hair_plait" + +/datum/sprite_accessory/hair/taj/ears_straight + name = "Tajara Straight" + icon_state = "hair_straight" + +/datum/sprite_accessory/hair/taj/ears_long + name = "Tajara Long" + icon_state = "hair_long" + +/datum/sprite_accessory/hair/taj/ears_rattail + name = "Tajara Rat Tail" + icon_state = "hair_rattail" + +/datum/sprite_accessory/hair/taj/ears_spiky + name = "Tajara Spiky" + icon_state = "hair_tajspiky" + +/datum/sprite_accessory/hair/taj/ears_messy + name = "Tajara Messy" + icon_state = "hair_messy" + +/datum/sprite_accessory/hair/taj/ears_bob + name = "Tajara Bob" + icon_state = "hair_tbob" + +/datum/sprite_accessory/hair/taj/ears_sidebraid + name = "Tajara Sidebraid" + icon_state = "hair_sidebraid" + +/datum/sprite_accessory/hair/taj/ears_ribbons + name = "Tajara Ribbons" + icon_state = "hair_ribbons" + +/datum/sprite_accessory/hair/taj/ears_combedback + name = "Tajara Combedback" + icon_state = "hair_combedback" + +/datum/sprite_accessory/hair/taj/ears_tailedbangs + name = "Tajara Tailedbangs" + icon_state = "hair_tailedbangs" + +/datum/sprite_accessory/hair/taj/ears_longtail + name = "Tajara Longtail" + icon_state = "hair_longtail" + +/datum/sprite_accessory/hair/taj/ears_shy + name = "Tajara Shy" + icon_state = "hair_shy" + +/datum/sprite_accessory/hair/taj/ears_ponytail + name = "Tajara Ponytail" + icon_state = "hair_ponytail" + +/datum/sprite_accessory/hair/taj/ears_overeye + name = "Tajara Overeye" + icon_state = "hair_overeye" + +/datum/sprite_accessory/hair/taj/ears_tough + name = "Tajara Tough" + icon_state = "hair_tough" + +/datum/sprite_accessory/hair/taj/ears_cuttail + name = "Tajara Cuttail" + icon_state = "hair_cuttail" + +/datum/sprite_accessory/hair/taj/ears_dreadlocks + name = "Tajara Dreadlocks" + icon_state = "hair_dreadlocks" + +/datum/sprite_accessory/hair/taj/ears_clean_noear + name = "Tajara Clean (No ears)" + icon_state = "hair_clean_s_noear" + +/datum/sprite_accessory/hair/taj/ears_bangs_noear + name = "Tajara Bangs (No ears)" + icon_state = "hair_bangs_s_noear" + +/datum/sprite_accessory/hair/taj/ears_braid_noear + name = "Tajara Braid (No ears)" + icon_state = "hair_tbraid_s_noear" + +/datum/sprite_accessory/hair/taj/ears_shaggy_noear + name = "Tajara Shaggy (No ears)" + icon_state = "hair_shaggy_s_noear" + +/datum/sprite_accessory/hair/taj/ears_mohawk_noear + name = "Tajaran Mohawk (No ears)" + icon_state = "hair_mohawk_s_noear" + +/datum/sprite_accessory/hair/taj/ears_plait_noear + name = "Tajara Plait (No ears)" + icon_state = "hair_plait_s_noear" + +/datum/sprite_accessory/hair/taj/ears_straight_noear + name = "Tajara Straight (No ears)" + icon_state = "hair_straight_s_noear" + +/datum/sprite_accessory/hair/taj/ears_long_noear + name = "Tajara Long (No ears)" + icon_state = "hair_long_s_noear" + +/datum/sprite_accessory/hair/taj/ears_rattail_noear + name = "Tajara Rat Tail (No ears)" + icon_state = "hair_rattail_s_noear" + +/datum/sprite_accessory/hair/taj/ears_spiky_noear + name = "Tajara Spiky (No ears)" + icon_state = "hair_tajspiky_s_noear" + +/datum/sprite_accessory/hair/taj/ears_messy_noear + name = "Tajara Messy (No ears)" + icon_state = "hair_messy_s_noear" + +/datum/sprite_accessory/hair/taj/ears_bob_noear + name = "Tajara Bob (No ears)" + icon_state = "hair_tbob_s_noear" + +/datum/sprite_accessory/hair/taj/ears_sidebraid_noear + name = "Tajara Sidebraid (No ears)" + icon_state = "hair_sidebraid_s_noear" + +/datum/sprite_accessory/hair/taj/ears_ribbons_noear + name = "Tajara Ribbons (No ears)" + icon_state = "hair_ribbons_s_noear" + +/datum/sprite_accessory/hair/taj/ears_combedback_noear + name = "Tajara Combedback (No ears)" + icon_state = "hair_combedback_s_noear" + +/datum/sprite_accessory/hair/taj/ears_tailedbangs_noear + name = "Tajara Tailedbangs (No ears)" + icon_state = "hair_tailedbangs_s_noear" + +/datum/sprite_accessory/hair/taj/ears_longtail_noear + name = "Tajara Longtail (No ears)" + icon_state = "hair_longtail_s_noear" + +/datum/sprite_accessory/hair/taj/ears_shy_noear + name = "Tajara Shy (No ears)" + icon_state = "hair_shy_s_noear" + +/datum/sprite_accessory/hair/taj/ears_ponytail_noear + name = "Tajara Ponytail (No ears)" + icon_state = "hair_ponytail_s_noear" + +/datum/sprite_accessory/hair/taj/ears_overeye_noear + name = "Tajara Overeye (No ears)" + icon_state = "hair_overeye_s_noear" + +/datum/sprite_accessory/hair/taj/ears_tough_noear + name = "Tajara Tough (No ears)" + icon_state = "hair_tough_s_noear" + +/datum/sprite_accessory/hair/taj/ears_cuttail_noear + name = "Tajara Cuttail (No ears)" + icon_state = "hair_cuttail_s_noear" + +/datum/sprite_accessory/hair/taj/ears_dreadlocks_noear + name = "Tajara Dreadlocks (No ears)" + icon_state = "hair_dreadlocks_s_noear" + +// FACIAL + +/datum/sprite_accessory/facial_hair/species_tajara + name = "Tajara Sideburns" + icon_state = "facial_sideburns" + species_allowed = list(SPECIES_TAJARA) + icon = 'mods/tajara/icons/tajara_body/sprite_accessory/facial.dmi' + +/datum/sprite_accessory/facial_hair/species_tajara/mutton + name = "Tajara Mutton" + icon_state = "facial_mutton" + +/datum/sprite_accessory/facial_hair/species_tajara/pencilstache + name = "Tajara Pencilstache" + icon_state = "facial_pencilstache" + +/datum/sprite_accessory/facial_hair/species_tajara/moustache + name = "Tajara Moustache" + icon_state = "facial_moustache" + +/datum/sprite_accessory/facial_hair/species_tajara/goatee + name = "Tajara Goatee" + icon_state = "facial_goatee" + +/datum/sprite_accessory/facial_hair/species_tajara/smallstache + name = "Tajara Smallsatche" + icon_state = "facial_smallstache" + +/datum/sprite_accessory/facial_hair/species_tajara/shaved + name = "Tajara Shaved" + icon_state = "facial_shaved" + +// MARKINGS + +/datum/sprite_accessory/marking/taj + name = "Socks Coloration (Taj)" + icon = 'mods/tajara/icons/tajara_body/sprite_accessory/markings.dmi' + icon_state = "taj_pawsocks" + species_allowed = list(SPECIES_TAJARA) + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) + +/datum/sprite_accessory/marking/taj/paw_socks + name = "Socks Coloration (Generic)" + icon_state = "pawsocks" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) + +/datum/sprite_accessory/marking/taj/belly_hands_feet + name = "Hands/Feet/Belly Color (Minor)" + icon_state = "bellyhandsfeetsmall" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_CHEST) + +/datum/sprite_accessory/marking/taj/hands_feet_belly_full + name = "Hands/Feet/Belly Color (Major)" + icon_state = "bellyhandsfeet" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_CHEST) + +/datum/sprite_accessory/marking/taj/hands_feet_belly_full_female + name = "Hands,Feet,Belly Color (Major, Female)" + icon_state = "bellyhandsfeet_female" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_CHEST) + +/datum/sprite_accessory/marking/taj/patches + name = "Color Patches" + icon_state = "patches" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_CHEST,BP_GROIN) + +/datum/sprite_accessory/marking/taj/patchesface + name = "Color Patches (Face)" + icon_state = "patchesface" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/taj/tiger_stripes + name = "Tiger Stripes" + icon_state = "tiger" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_GROIN) + +/datum/sprite_accessory/marking/taj/tigerhead + name = "Tiger Stripes (Head, Minor)" + icon_state = "tigerhead" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/taj/tigerface + name = "Tiger Stripes (Head, Major)" + icon_state = "tigerface" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/taj/belly + name = "Belly Fur (Taj)" + icon_state = "taj_belly" + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/taj/bellyfull + name = "Belly Fur Wide (Taj)" + icon_state = "taj_bellyfull" + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/taj/earsout + name = "Outer Ear (Taj)" + icon_state = "taj_earsout" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/taj/earsin + name = "Inner Ear (Taj)" + icon_state = "taj_earsin" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/taj/nose + name = "Nose Color (Taj)" + icon_state = "taj_nose" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/taj/crest + name = "Chest Fur Crest (Taj)" + icon_state = "taj_crest" + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/taj/muzzle + name = "Muzzle Color (Taj)" + icon_state = "taj_muzzle" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/taj/face + name = "Cheeks Color (Taj)" + icon_state = "taj_face" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/taj/all + name = "All Taj Head (Taj)" + icon_state = "taj_all" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/taj/earslynx + name = "Lynx Ear (Taj)" + icon_state = "taj_earsout_lynx" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/taj/earsearrings + name = "Earrings (Taj)" + icon_state = "taj_earrings" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/taj/facelynx + name = "Lynx cheeks (Taj)" + icon_state = "taj_lynxcheeks" + body_parts = list(BP_HEAD) + +// SKIN + +/datum/sprite_accessory/skin/tajaran + name = "Default tajaran skin" + icon_state = "default" + icon = 'mods/tajara/icons/tajara_body/body.dmi' + species_allowed = list(SPECIES_TAJARA) diff --git a/mods/tajara/code/datum/tajara_culture.dm b/mods/tajara/code/datum/tajara_culture.dm new file mode 100644 index 0000000000000..95e132cb91328 --- /dev/null +++ b/mods/tajara/code/datum/tajara_culture.dm @@ -0,0 +1,83 @@ +/singleton/cultural_info/culture/tajaran + name = CULTURE_TAJARAN + language = LANGUAGE_SIIK_MAAS + name_language = LANGUAGE_SIIK_MAAS + secondary_langs = list(LANGUAGE_SIIK_MAAS, LANGUAGE_SIIK_TAJR) + nickname = "Адомайский таяран" + description = "Вы - таяран, рожденный на Адомае. Гордый представитель своего вида. \ + Ваши предки ранее долгое время были покорены грязными глупцами, считающими свое \ + право властвовать над другими, данным им с рождения, непоколебимым. Но пролились \ + реки крови и теперь они мертвы, а вы, как и остальные достойные представители \ + своей расы - свободны. В тяжелые времена появляются сильные личности, \ + и вам хочется верить, что вы - один из них." + +/singleton/cultural_info/faction/tajaran + name = FACTION_TAJARAN_HADII + nickname = "Клан Хади" + description = "Хади - капиталистически развивающийся клан таяра, а ты - его член. Ты не очень любишь представителей клана Кайтам,\ + а они не очень любят тебя. Но зато твой клан любит деньги и имеет множество коммерческих пактов с транс-звездными корпорациями,\ + выгодными для вас обоих. Сотрудничество - это здорово, а сотрудничество приносящее доход - выгодно вдвойне!" + language = LANGUAGE_SIIK_MAAS + economic_power = 1.5 + +/singleton/cultural_info/faction/tajaran/kaytam + name = FACTION_TAJARAN_KAYTAM + nickname = "Клан Кайтам" + description = "Конечно, клан Кайтам трудно назвать самым благополучным и богатым кланом, но он твой - и потому он лучший.\ + А еще твой клан вложил самый большой вклад в победу над надзирателями и армия у твоего клана самая сильная! \ + Кайтам - лучший клан, все же в нашем клане так говорят, потому так наверное и есть. \ + По радио наши лидеры говорят то же самое, а они - не врут." + economic_power = 0.85 + +/singleton/cultural_info/faction/tajaran/kaytam/ksd + name = FACTION_TAJARAN_KAYTAM_KSD + nickname = "Кхан-Схану'Дар" + description = "Кхан-Схану'Дар - один из крупнейших подкланов Кайтам, но обладающий гораздо большей независимостью и суверенитетом. \ + Твой клан идет по пути социализма, равенства и свободы. Таяра в других кланах могут быть богаче, свободнее, но ты знаешь, что \ + твой клан не бросит тебя в беде. Дружба, братство, равенство и взаимовыручка - основные постулаты представителей этого клана.\ + Ты многое по жизни своей должен этому клану, но и клан многое должен тебе." + economic_power = 0.5 + +/singleton/cultural_info/faction/tajaran/nazkiin + name = FACTION_TAJARAN_NAZKIIN + nickname = "Клан Назкийн" + description = "Ты - выходец из клана Назкийн, одного из наиболее консервативных кланов. Они известны своей любовью \ + к археологии, прошлому и науке. Благотворительность - не пустое слово, а одно из тех дел, которым часто занимаются \ + состоящие в клане. Распространение знаний - добрый, правильный поступок. Назкийн - один из наиболее миролюбивых кланов." + economic_power = 1.15 + +/singleton/cultural_info/faction/tajaran/shishi + name = FACTION_TAJARAN_SHISHI + nickname = "Клан Ши-Сши" + description = "Ты представитель клана Ши-Сши - одного из наиболее миролюбивых кланов. \ + Твои предки жили в единстве с природой, занимались земледелием, собирательством, знахарством. \ + Ты знаешь, что насилие - это очень плохо и заниматься этим тебе не хочется. \ + Вне дома ты грустишь по родной флоре своего мира." + economic_power = 1 + +/singleton/cultural_info/faction/tajaran/jar + name = FACTION_TAJARAN_JAR + nickname = "Клан Джарр'Наш'Карр'Рри" + description = "Джарр'Наш'Карр'Рри - твой клан. Клан строителей, художников и творцов. \ + Скорее всего и ты идешь по следам своих предков и занимаешься одним из любимых дел своего клана. \ + Да и не просто, а лучше всех. Никто не сравнится с представителями твоего клана, известного \ + и за пределами Адомая в его стезе." + economic_power = 1 + +/singleton/cultural_info/faction/tajaran/other + name = FACTION_TAJARAN_OTHER + nickname = "Малоизвестный клан" + description = "Ты представитель одного из менее значимых кланов таяра, или ты не состоишь, не являешься частью какого-либо клана." + economic_power = 1 + + //LOCATION + +/singleton/cultural_info/location/ahdomai + name = HOME_SYSTEM_AHDOMAI + nickname = "Адомай" + description = "Адомай - холодный, ледяной мир, являющийся столицей Конфедеративного Содружества Адомая. \ + Обычный мир, скрывающий под своей поверхностью неизвестно откуда взявшиеся артефакты, странные строения и предметы. " + language = LANGUAGE_SIIK_MAAS + ruling_body = "Конфедеративное Содружество Адомая" + distance = "34 световых года" + secondary_langs = list(LANGUAGE_SIIK_TAJR, LANGUAGE_SIGN, LANGUAGE_SPACER, LANGUAGE_HUMAN_EURO, LANGUAGE_GUTTER) diff --git a/mods/tajara/code/language.dm b/mods/tajara/code/language.dm new file mode 100644 index 0000000000000..bbf0e8eb2b1b8 --- /dev/null +++ b/mods/tajara/code/language.dm @@ -0,0 +1,42 @@ +/datum/language/tajaran + name = LANGUAGE_SIIK_MAAS + desc = "The traditionally employed tongue of Ahdomai, composed of expressive yowls and chirps. Native to the Tajaran." + speech_verb = "мурчит" + ask_verb = "мурчит" + exclaim_verb = "воет" + colour = "tajaran" + key = "v" + flags = WHITELISTED + syllables = list("mrr","rr","tajr","kir","raj","kii","mir","kra","ahk","nal","vah","khaz","jri","ran","darr", + "mi","jri","dynh","manq","rhe","zar","rrhaz","kal","chur","eech","thaa","dra","jurl","mah","sanu","dra","ii'r", + "ka","aasi","far","wa","baq","ara","qara","zir","sam","mak","hrar","nja","rir","khan","jun","dar","rik","kah", + "hal","ket","jurl","mah","tul","cresh","azu","ragh","mro","mra","mrro","mrra") + shorthand = "TJ" + has_written_form = TRUE + +/datum/language/tajaran/get_random_name(gender) + + var/new_name = ..(gender,1) + if(prob(50)) + new_name += " [pick(list("Hadii","Kaytam","Nazkiin","Zhan-Khazan","Hharar","Njarir'Akhan","Faaira'Nrezi","Rhezar","Mi'dynh","Rrhazkal","Bayan","Al'Manq","Mi'jri","Chur'eech","Sanu'dra","Ii'rka"))]" + else + new_name += " [..(gender,1)]" + return new_name + +/datum/language/tajsign + name = LANGUAGE_SIIK_TAJR + desc = "A type of sign language mostly based on tail movements that was used during the Tajaran rebellion." + signlang_verb = list("делает пасы хвостом", "жестикулирует хвостом", "искусно жестикулирует хвостом") + colour = "tajaran" + key = "l" + flags = WHITELISTED | SIGNLANG | NO_STUTTER | NONVERBAL + shorthand = "TS" + +//AUTOHISS +/datum/species/tajaran + //Autohiss + autohiss_basic_map = list( + "r" = list("rr", "rrr", "rrrr"), + "р" = list("рр", "ррр", "рррр")//thats not "pi" + ) + autohiss_exempt = list(LANGUAGE_SIIK_MAAS) diff --git a/mods/tajara/code/misc.dm b/mods/tajara/code/misc.dm new file mode 100644 index 0000000000000..9e0b9c2a2dedf --- /dev/null +++ b/mods/tajara/code/misc.dm @@ -0,0 +1,20 @@ +/datum/reagent/drink/tajaran/chai + name = "Herbal tincture" + description = "Drink similar to tea, but from other herbs. If you brewed hundreds of medicinal herbs from pharmacies - could be something similar." + taste_description = "hundreds of herbs" + color = "#8f86e4" + glass_name = "Herbal tincture" + glass_desc = " Drink similar to tea, but from other herbs. If you brewed hundreds of medicinal herbs from pharmacies - could be something similar." + +/datum/reagent/ethanol/tajaran/kotovino + name = "Djurl'Ma-Tua" + description = "One of the oldest tajaran drinks, the history of which stretches from unknown-distant epochs. \ + Anywhere but on Ahdomai, this drink is not cooked. It tastes like wine, \ + but combines a large number of different types of spices and spices. " + + taste_description = "exotic, sweet, hard and gentle at the same time" + color = "#ba86e4" + strength = 80 + adj_temp = 5 + glass_name = "Djurl'Ma-Tua" + glass_desc = "Exotic drink native to Ahdomai. Its taste is similar to wine with a lot of different condiments and spices." diff --git a/mods/tajara/code/posters.dm b/mods/tajara/code/posters.dm new file mode 100644 index 0000000000000..11aaa756147e2 --- /dev/null +++ b/mods/tajara/code/posters.dm @@ -0,0 +1,218 @@ +/obj/structure/sign/poster/tjpost + icon = 'mods/tajara/icons/posters.dmi' + icon_state = "tposter" + random_poster_base_type = /singleton/poster/tjpost + +/obj/structure/sign/poster/tjpost/tposter + icon_state = "tposter" + poster_type = /singleton/poster/tjpost/tposter + +/obj/structure/sign/poster/tjpost/tposter_2 + icon_state = "tposter_2" + poster_type = /singleton/poster/tjpost/tposter_2 + +/obj/structure/sign/poster/tjpost/tposter_3 + icon_state = "tposter_3" + poster_type = /singleton/poster/tjpost/tposter_3 + +/obj/structure/sign/poster/tjpost/tposter_4 + icon_state = "tposter_4" + poster_type = /singleton/poster/tjpost/tposter_4 + +/obj/structure/sign/poster/tjpost/tposter_5 + icon_state = "tposter_5" + poster_type = /singleton/poster/tjpost/tposter_5 + +/obj/structure/sign/poster/tjpost/tposter_6 + icon_state = "tposter_6" + poster_type = /singleton/poster/tjpost/tposter_6 + +/obj/structure/sign/poster/tjpost/tposter_7 + icon_state = "tposter_7" + poster_type = /singleton/poster/tjpost/tposter_7 + +/obj/structure/sign/poster/tjpost/tposter_8 + icon_state = "tposter_8" + poster_type = /singleton/poster/tjpost/tposter_8 + +/obj/structure/sign/poster/tjpost/tposter_9 + icon_state = "tposter_9" + poster_type = /singleton/poster/tjpost/tposter_9 + +/obj/structure/sign/poster/tjpost/tposter_10 + icon_state = "tposter_10" + poster_type = /singleton/poster/tjpost/tposter_10 + +/obj/structure/sign/poster/tjpost/tposter_11 + icon_state = "tposter_11" + poster_type = /singleton/poster/tjpost/tposter_11 + +/obj/structure/sign/poster/tjpost/tposter_12 + icon_state = "tposter_12" + poster_type = /singleton/poster/tjpost/tposter_12 + +/obj/structure/sign/poster/tjpost/tposter_13 + icon_state = "tposter_13" + poster_type = /singleton/poster/tjpost/tposter_13 + +/obj/structure/sign/poster/tjpost/tposter_14 + icon_state = "tposter_14" + poster_type = /singleton/poster/tjpost/tposter_14 + +/obj/structure/sign/poster/tjpost/tposter_15 + icon_state = "tposter_15" + poster_type = /singleton/poster/tjpost/tposter_15 + +/obj/structure/sign/poster/tjpost/tposter_16 + icon_state = "tposter_16" + poster_type = /singleton/poster/tjpost/tposter_16 + +/obj/structure/sign/poster/tjpost/tposter_17 + icon_state = "tposter_17" + poster_type = /singleton/poster/tjpost/tposter_17 + +/obj/structure/sign/poster/tjpost/tposter_18 + icon_state = "tposter_18" + poster_type = /singleton/poster/tjpost/tposter_18 + +/obj/structure/sign/poster/tjpost/tposter_19 + icon_state = "tposter_19" + poster_type = /singleton/poster/tjpost/tposter_19 + +/obj/structure/sign/poster/tjpost/tposter_20 + icon_state = "tposter_20" + poster_type = /singleton/poster/tjpost/tposter_20 + +/obj/structure/sign/poster/tjpost/tposter_21 + icon_state = "tposter_21" + poster_type = /singleton/poster/tjpost/tposter_21 + +/obj/structure/sign/poster/tjpost/tposter_22 + icon_state = "tposter_22" + poster_type = /singleton/poster/tjpost/tposter_22 + +/singleton/poster/tjpost + icon = 'mods/tajara/icons/posters.dmi' + name = "Tajara Poster" + desc = "You probably shouldn't be seeing this." + abstract_type = /singleton/poster/tjpost + +/singleton/poster/tjpost/tposter + icon_state = "tposter" + name = "Liberation day" + desc = "A memorable photo, which depicted how the soldiers of the Kaytam clan raise their flag \ + over the overseer citadel in Naliar. Looks like one of CCA posters..." + +/singleton/poster/tjpost/tposter_2 + icon_state = "tposter_2" + name = "Patriotic poster" + desc = "It reminds you that the galaxy around is not very friendly, and you should watch your safety yourself." + +/singleton/poster/tjpost/tposter_3 + icon_state = "tposter_3" + name = "Technical poster" + desc = "It is a guide on how to use the carabiner TV-3C, there is detailed \ + information about assembly, disassembly, and maintenance, but one of the written dialects of Ahdomai. \ + An another one of CCA posters." + +/singleton/poster/tjpost/tposter_4 + icon_state = "tposter_4" + name = "Jet poster" + desc = "It shows one of the most common fighter-interceptor FLA. An image at port shows CCA insignia." + +/singleton/poster/tjpost/tposter_5 + icon_state = "tposter_5" + name = "Heli-poster" + desc = "It shows transport helicopters flying over the ruins of the suburbs of Naliar. \ + The photo was taken shortly before the final assault, and saw him every tajaran. \ + An another one historian posters of CCA." + +/singleton/poster/tjpost/tposter_6 + icon_state = "tposter_6" + name = "FLA MBT-86" + desc = "It shows one of the FLA MBT used by the eastern forces at the end of the Conflict. \ + An another one historian posters of CCA." + +/singleton/poster/tjpost/tposter_7 + icon_state = "tposter_7" + name = "Sa'a poster" + desc = "It offers views of the mountains of Sa'a, Ahdomai." + +/singleton/poster/tjpost/tposter_8 + icon_state = "tposter_8" + name = "First mech poster" + desc = "It shows the first combat mech created by the Kaytam clan used in urban combat in Naliar. \ + No CCA symbol, hm..." + +/singleton/poster/tjpost/tposter_9 + icon_state = "tposter_9" + name = "CCA Army" + desc = "It shows one of the tanks of Zhan-Hazan, and behind him you can see the attack helicopter." + +/singleton/poster/tjpost/tposter_10 + icon_state = "tposter_10" + name = "Assault Drones" + desc = "This poster depicts the flying combat drones times of Ahdomai Conflict." + +/singleton/poster/tjpost/tposter_11 + icon_state = "tposter_11" + name = "Sunrise on S'Randjiir" + desc = "The picture was taken from the dome of one of the gas producing factories on it." + +/singleton/poster/tjpost/tposter_12 + icon_state = "tposter_12" + name = "Ir-Shira class station" + desc = "One of the mobile station class of Ir-Shira, descended from the shipyards over \ + Adamem to gateway in the neighboring system. CCA insignia at hull." + +/singleton/poster/tjpost/tposter_13 + icon_state = "tposter_13" + name = "109 year" + desc = "Each tajaran knows what happened in the 109 year. The first satellite was launched into Ahdomai orbit." + +/singleton/poster/tjpost/tposter_14 + icon_state = "tposter_14" + name = "298 year" + desc = "First crew change in orbit of the first space station of Ahdomai." + +/singleton/poster/tjpost/tposter_15 + icon_state = "tposter_15" + name = "Winter night" + desc = "You see one of the quiet winter nights of Ahdomai, \ + it becomes easier from the memories of the beauty of your home. Even if you aren't tajara." + +/singleton/poster/tjpost/tposter_16 + icon_state = "tposter_16" + name = "Ta'Apa Charka" + desc = "One of the icebergs on the holy land for tajaran." + +/singleton/poster/tjpost/tposter_17 + icon_state = "tposter_17" + name = "Maya'Thcha mountaints" + desc = "Mountains Maya'Thcha in its beauty, Ahdomai." + +/singleton/poster/tjpost/tposter_18 + icon_state = "tposter_18" + name = "Sunrise in the forest" + desc = "Sunrise in one of the forests. Nice and simple. Naturally. Corporative woodchoppers will be there soon..." + +/singleton/poster/tjpost/tposter_19 + icon_state = "tposter_19" + name = "Bayan" + desc = "The Bayan village in the winter. Looks like some old wooden town at hill..." + +/singleton/poster/tjpost/tposter_20 + icon_state = "tposter_20" + name = "Mirr-Shorrkra" + desc = "View of Mirr-Shorrkra from the Naff'Yark, Ahdomai." + +/singleton/poster/tjpost/tposter_21 + icon_state = "tposter_21" + name = "Unknown liberator" + desc = "You can see the beautiful spokeswoman of tajara that fought for the liberation of Ahdomai \ + during a long war." + +/singleton/poster/tjpost/tposter_22 + icon_state = "tposter_22" + name = "Mryarov Mraporting" + desc = "There is a drone blimp-bomber of the Kaytam clan." diff --git a/mods/tajara/code/robolimbs.dm b/mods/tajara/code/robolimbs.dm new file mode 100644 index 0000000000000..541274bc4ca50 --- /dev/null +++ b/mods/tajara/code/robolimbs.dm @@ -0,0 +1,27 @@ +/* +Robolimbs for robocats - Restricted roster of prosthetics for tajara +*/ + +/datum/robolimb/tajara + company = "Nanotrasen Lion" + desc = "This limb is made from a cheap polymer. It has stamp reads: produced by Nanotrasen in Mi'dyn Al'Mank." + icon = 'icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_main.dmi' + restricted_to = list(SPECIES_TAJARA) + allowed_bodytypes = list(SPECIES_TAJARA) + applies_to_part = list(BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT) + unavailable_at_fab = 1 + +/datum/robolimb/tajara/dyson + company = "Dyson-Rhyn'yai Cybernetics" + desc = "A lightweight prosthesis that claims to imitate the curves of a cat-like body" + icon = 'mods/tajara/icons/tajara_body/dyson.dmi' + +/* +SIERRA TODO: Waiting for sprites instead of plaseholders +/datum/robolimb/tajara/dyson/expensive + company = "Dyson-Rhyn'yai Premium Series" + desc = "This high quality limb is nearly indistinguishable from an tajara one." + icon = 'mods/tajara/icons/tajara_body/dyson-expensive.dmi' + applies_to_part = BP_ALL_LIMBS + can_eat = 1 +*/ diff --git a/mods/tajara/code/unit_tests.dm b/mods/tajara/code/unit_tests.dm new file mode 100644 index 0000000000000..52d288b729bde --- /dev/null +++ b/mods/tajara/code/unit_tests.dm @@ -0,0 +1,33 @@ +// ================================================================= +// TAJARA UNIT TESTS +// ================================================================= +/datum/unit_test/mob_damage/tajara + name = "MOB: Tajara damage check template" + template = /datum/unit_test/mob_damage/tajara + mob_type = /mob/living/carbon/human/tajaran + +/datum/unit_test/mob_damage/tajara/brute + name = "MOB: Tajara Brute Damage Check" + damagetype = DAMAGE_BRUTE + expected_vulnerability = EXTRA_VULNERABLE + +/datum/unit_test/mob_damage/tajara/fire + name = "MOB: Tajara Fire Damage Check" + damagetype = DAMAGE_BURN + expected_vulnerability = EXTRA_VULNERABLE + +/datum/unit_test/mob_damage/tajara/tox + name = "MOB: Tajara Toxins Damage Check" + damagetype = DAMAGE_TOXIN + +/datum/unit_test/mob_damage/tajara/oxy + name = "MOB: Tajara Oxygen Damage Check" + damagetype = DAMAGE_OXY + +/datum/unit_test/mob_damage/tajara/genetic + name = "MOB: Tajara Genetic Damage Check" + damagetype = DAMAGE_GENETIC + +/datum/unit_test/mob_damage/tajara/pain + name = "MOB: Tajara Pain Damage Check" + damagetype = DAMAGE_PAIN diff --git a/mods/tajara/icons/drinks.dmi b/mods/tajara/icons/drinks.dmi new file mode 100644 index 0000000000000..4d7ec253627a2 Binary files /dev/null and b/mods/tajara/icons/drinks.dmi differ diff --git a/mods/tajara/icons/obj_accessories.dmi b/mods/tajara/icons/obj_accessories.dmi new file mode 100644 index 0000000000000..0fe689a6f2663 Binary files /dev/null and b/mods/tajara/icons/obj_accessories.dmi differ diff --git a/mods/tajara/icons/obj_eyes.dmi b/mods/tajara/icons/obj_eyes.dmi new file mode 100644 index 0000000000000..6c84e60d74b05 Binary files /dev/null and b/mods/tajara/icons/obj_eyes.dmi differ diff --git a/mods/tajara/icons/onmob_accessories.dmi b/mods/tajara/icons/onmob_accessories.dmi new file mode 100644 index 0000000000000..1ebc7ec428703 Binary files /dev/null and b/mods/tajara/icons/onmob_accessories.dmi differ diff --git a/mods/tajara/icons/onmob_eyes.dmi b/mods/tajara/icons/onmob_eyes.dmi new file mode 100644 index 0000000000000..c70411a19501e Binary files /dev/null and b/mods/tajara/icons/onmob_eyes.dmi differ diff --git a/mods/tajara/icons/onmob_feet.dmi b/mods/tajara/icons/onmob_feet.dmi new file mode 100644 index 0000000000000..cfd688fcdfbc2 Binary files /dev/null and b/mods/tajara/icons/onmob_feet.dmi differ diff --git a/mods/tajara/icons/onmob_suit.dmi b/mods/tajara/icons/onmob_suit.dmi new file mode 100644 index 0000000000000..44db8e61d3504 Binary files /dev/null and b/mods/tajara/icons/onmob_suit.dmi differ diff --git a/mods/tajara/icons/onmob_under.dmi b/mods/tajara/icons/onmob_under.dmi new file mode 100644 index 0000000000000..b4b4d035c6a58 Binary files /dev/null and b/mods/tajara/icons/onmob_under.dmi differ diff --git a/mods/tajara/icons/posters.dmi b/mods/tajara/icons/posters.dmi new file mode 100644 index 0000000000000..8a876da651f17 Binary files /dev/null and b/mods/tajara/icons/posters.dmi differ diff --git a/mods/tajara/icons/shoes.dmi b/mods/tajara/icons/shoes.dmi new file mode 100644 index 0000000000000..9a75778d156d7 Binary files /dev/null and b/mods/tajara/icons/shoes.dmi differ diff --git a/mods/tajara/icons/sprite_sheets/feet.dmi b/mods/tajara/icons/sprite_sheets/feet.dmi new file mode 100644 index 0000000000000..56430b3336925 Binary files /dev/null and b/mods/tajara/icons/sprite_sheets/feet.dmi differ diff --git a/mods/tajara/icons/sprite_sheets/hands.dmi b/mods/tajara/icons/sprite_sheets/hands.dmi new file mode 100644 index 0000000000000..dd7358ef84db2 Binary files /dev/null and b/mods/tajara/icons/sprite_sheets/hands.dmi differ diff --git a/mods/tajara/icons/sprite_sheets/helmet.dmi b/mods/tajara/icons/sprite_sheets/helmet.dmi new file mode 100644 index 0000000000000..d52da603d5b26 Binary files /dev/null and b/mods/tajara/icons/sprite_sheets/helmet.dmi differ diff --git a/mods/tajara/icons/sprite_sheets/mask.dmi b/mods/tajara/icons/sprite_sheets/mask.dmi new file mode 100644 index 0000000000000..b9d2ffaf015e0 Binary files /dev/null and b/mods/tajara/icons/sprite_sheets/mask.dmi differ diff --git a/mods/tajara/icons/sprite_sheets/obj/hats.dmi b/mods/tajara/icons/sprite_sheets/obj/hats.dmi new file mode 100644 index 0000000000000..312d8c69c20b6 Binary files /dev/null and b/mods/tajara/icons/sprite_sheets/obj/hats.dmi differ diff --git a/mods/tajara/icons/sprite_sheets/obj/suits.dmi b/mods/tajara/icons/sprite_sheets/obj/suits.dmi new file mode 100644 index 0000000000000..6780fcdd5b115 Binary files /dev/null and b/mods/tajara/icons/sprite_sheets/obj/suits.dmi differ diff --git a/mods/tajara/icons/sprite_sheets/suit.dmi b/mods/tajara/icons/sprite_sheets/suit.dmi new file mode 100644 index 0000000000000..bce53ea32de44 Binary files /dev/null and b/mods/tajara/icons/sprite_sheets/suit.dmi differ diff --git a/mods/tajara/icons/suit.dmi b/mods/tajara/icons/suit.dmi new file mode 100644 index 0000000000000..8b5b40091ce96 Binary files /dev/null and b/mods/tajara/icons/suit.dmi differ diff --git a/mods/tajara/icons/tajara_body/body.dmi b/mods/tajara/icons/tajara_body/body.dmi new file mode 100644 index 0000000000000..20adf98b4f0e9 Binary files /dev/null and b/mods/tajara/icons/tajara_body/body.dmi differ diff --git a/mods/tajara/icons/tajara_body/deformed_body.dmi b/mods/tajara/icons/tajara_body/deformed_body.dmi new file mode 100644 index 0000000000000..fa4460781d7ac Binary files /dev/null and b/mods/tajara/icons/tajara_body/deformed_body.dmi differ diff --git a/mods/tajara/icons/tajara_body/dyson-expensive.dmi b/mods/tajara/icons/tajara_body/dyson-expensive.dmi new file mode 100644 index 0000000000000..20adf98b4f0e9 Binary files /dev/null and b/mods/tajara/icons/tajara_body/dyson-expensive.dmi differ diff --git a/mods/tajara/icons/tajara_body/dyson.dmi b/mods/tajara/icons/tajara_body/dyson.dmi new file mode 100644 index 0000000000000..0d752947114c5 Binary files /dev/null and b/mods/tajara/icons/tajara_body/dyson.dmi differ diff --git a/mods/tajara/icons/tajara_body/organs.dmi b/mods/tajara/icons/tajara_body/organs.dmi new file mode 100644 index 0000000000000..d249044c22cec Binary files /dev/null and b/mods/tajara/icons/tajara_body/organs.dmi differ diff --git a/mods/tajara/icons/tajara_body/preview.dmi b/mods/tajara/icons/tajara_body/preview.dmi new file mode 100644 index 0000000000000..4cbe764de5115 Binary files /dev/null and b/mods/tajara/icons/tajara_body/preview.dmi differ diff --git a/mods/tajara/icons/tajara_body/sprite_accessory/ears.dmi b/mods/tajara/icons/tajara_body/sprite_accessory/ears.dmi new file mode 100644 index 0000000000000..0ce010f3eafd5 Binary files /dev/null and b/mods/tajara/icons/tajara_body/sprite_accessory/ears.dmi differ diff --git a/mods/tajara/icons/tajara_body/sprite_accessory/facial.dmi b/mods/tajara/icons/tajara_body/sprite_accessory/facial.dmi new file mode 100644 index 0000000000000..0388921512002 Binary files /dev/null and b/mods/tajara/icons/tajara_body/sprite_accessory/facial.dmi differ diff --git a/mods/tajara/icons/tajara_body/sprite_accessory/hair.dmi b/mods/tajara/icons/tajara_body/sprite_accessory/hair.dmi new file mode 100644 index 0000000000000..1cf95106c1fa5 Binary files /dev/null and b/mods/tajara/icons/tajara_body/sprite_accessory/hair.dmi differ diff --git a/mods/tajara/icons/tajara_body/sprite_accessory/markings.dmi b/mods/tajara/icons/tajara_body/sprite_accessory/markings.dmi new file mode 100644 index 0000000000000..537be6c832903 Binary files /dev/null and b/mods/tajara/icons/tajara_body/sprite_accessory/markings.dmi differ diff --git a/mods/tajara/icons/tajara_body/tail.dmi b/mods/tajara/icons/tajara_body/tail.dmi new file mode 100644 index 0000000000000..62a432ae76da0 Binary files /dev/null and b/mods/tajara/icons/tajara_body/tail.dmi differ diff --git a/mods/tajara/icons/under.dmi b/mods/tajara/icons/under.dmi new file mode 100644 index 0000000000000..3254d733c7a4e Binary files /dev/null and b/mods/tajara/icons/under.dmi differ diff --git a/mods/utf8/README.md b/mods/utf8/README.md new file mode 100644 index 0000000000000..4f888ef04e3a2 --- /dev/null +++ b/mods/utf8/README.md @@ -0,0 +1,77 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/866 + + + +## UTF-8 + +ID мода: UTF8 + + +### Описание мода + +Восстанавливающий кодировку в интерфейсах мод. + + +### Изменения *кор кода* + +- Отсутствуют + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- `code/__defines/~mods/~master_defines.dm`: `show_browser` + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +SuhEugene + diff --git a/mods/utf8/_utf8.dm b/mods/utf8/_utf8.dm new file mode 100644 index 0000000000000..18d2feb0120ab --- /dev/null +++ b/mods/utf8/_utf8.dm @@ -0,0 +1,4 @@ +/singleton/modpack/utf8 + name = "UTF-8" + desc = "Восстанавливающий кодировку в интерфейсах мод." + author = "SuhEugene" diff --git a/mods/utf8/_utf8.dme b/mods/utf8/_utf8.dme new file mode 100644 index 0000000000000..d742bcee303aa --- /dev/null +++ b/mods/utf8/_utf8.dme @@ -0,0 +1,8 @@ +#ifndef MODPACK_UTF8 +#define MODPACK_UTF8 + +#include "_utf8.dm" + +#include "code/utf8.dm" + +#endif diff --git a/mods/utf8/code/utf8.dm b/mods/utf8/code/utf8.dm new file mode 100644 index 0000000000000..ac7ebcfcaf1e0 --- /dev/null +++ b/mods/utf8/code/utf8.dm @@ -0,0 +1,7 @@ +/proc/utf_8_html(browser_content) + if (isnull(browser_content) || isfile(browser_content)) + return browser_content + else if(findtext(browser_content, "")) + return replacetext(browser_content, "", "") + else + return "[browser_content]" diff --git a/mods/utility_items/README.md b/mods/utility_items/README.md new file mode 100644 index 0000000000000..1b6df2e574c3f --- /dev/null +++ b/mods/utility_items/README.md @@ -0,0 +1,79 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1847 + + + +## Предметы-утилиты + +ID мода: UTILITY_ITEMS + + +### Описание мода + +Модпак добавляет различные предметы, которые будут полезны в использовании, но слишком комплексные, чтобы держать их в файлах карты или где-то ещё. + + +### Изменения *кор кода* + +- `code/modules/mining/abandonedcrates.dm` `/obj/structure/closet/crate/secure/loot/var/codelen` + + + +### Оверрайды + +- Отсутствуют + + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- `mods/ntnet/code/NTNet_code.dm` + + +### Авторы: + +LordNest + diff --git a/mods/utility_items/_utility_items.dm b/mods/utility_items/_utility_items.dm new file mode 100644 index 0000000000000..cf6c4c2aa882e --- /dev/null +++ b/mods/utility_items/_utility_items.dm @@ -0,0 +1,4 @@ +/singleton/modpack/utility + name = "Предметы-утилиты" + desc = "Модпак добавляет различные предметы, которые будут полезны в использовании, но слишком комплексные, чтобы держать их в файлах карты или где-то ещё." + author = "LordNest" diff --git a/mods/utility_items/_utility_items.dme b/mods/utility_items/_utility_items.dme new file mode 100644 index 0000000000000..e9739e678d821 --- /dev/null +++ b/mods/utility_items/_utility_items.dme @@ -0,0 +1,10 @@ +#ifndef MODPACK_UTILITY_ITEMS +#define MODPACK_UTILITY_ITEMS + +#include "_utility_items.dm" + + +#include "code/multimeter.dm" +#include "code/wires.dm" + +#endif diff --git a/mods/utility_items/code/multimeter.dm b/mods/utility_items/code/multimeter.dm new file mode 100644 index 0000000000000..8e7c181ce11fc --- /dev/null +++ b/mods/utility_items/code/multimeter.dm @@ -0,0 +1,231 @@ +#define METER_MESURING "Measuring" +#define METER_CHECKING "Checking" + +#define isMultimeter(A) (A && A.ismultimeter()) + +/obj/item/device/multitool/multimeter + name = "multimeter" + desc = "Используется для измерения потребления электроэнергии оборудования и прозвонки проводов. Рекомендуется докторами." + icon = 'mods/utility_items/icons/multimeter.dmi' + icon_state = "multimeter" + origin_tech = list(TECH_MAGNET = 4, TECH_ENGINEERING = 4) + slot_flags = SLOT_BELT + var/mode = METER_MESURING // Mode + +/obj/item/device/multitool/multimeter/attack_self(mob/user) + switch(mode) + if(METER_MESURING) + mode = METER_CHECKING + if(METER_CHECKING) + mode = METER_MESURING + to_chat(user, "Режим сменён на: [mode].") + +/obj/item/device/multitool/multimeter/ismultimeter() + return TRUE + +/atom/proc/ismultimeter() + return FALSE + +/datum/wires/Topic(href, href_list) + . = ..() + var/list/unsolved_wires = src.wires.Copy() + var/colour_function + var/solved_colour_function + + if(in_range(holder, usr) && isliving(usr)) + + var/mob/living/L = usr + if(CanUse(L) && href_list["action"]) + + var/obj/item/I = L.get_active_hand() + + var/obj/item/offhand_item + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + offhand_item = H.wearing_rig && H.wearing_rig.selected_module + + if(href_list["pulse"]) + var/colour = href_list["pulse"] + if(isMultimeter(I)) + var/obj/item/device/multitool/multimeter/O = L.get_active_hand() + if(O.mode == METER_MESURING) + if (L.skill_check(SKILL_ELECTRICAL, SKILL_TRAINED)) + to_chat(usr, SPAN_NOTICE("Вы подаёте напряжение на провод...")) + if(!do_after(L, 50, holder)) + return + PulseColour(colour) + to_chat(usr,SPAN_NOTICE("Провод пропульсован.")) + else + to_chat(L, SPAN_NOTICE ("Вы не знаете с каким напряжением работает этот провод.")) + else + if (L.skill_check(SKILL_ELECTRICAL, SKILL_TRAINED)) + if(!do_after(L, 10, holder)) + return + if(!IsColourCut(colour)) + colour_function = unsolved_wires[colour] + solved_colour_function = SolveWireFunction(colour_function) + if(solved_colour_function != "") + to_chat(L, "the [colour] wire connected to [solved_colour_function]") + playsound(O.loc, 'mods/utility_items/sounds/mbeep.ogg', 20, 1) + else + to_chat(L, "the [colour] wire not connected") + else + to_chat(L, "the [colour] wire not connected") + else + to_chat(L, SPAN_NOTICE ("Вы не умеете подключать мультиметр.")) + + if(href_list["examine"]) + if(isMultimeter(I) || isMultimeter(offhand_item)) + var/obj/item/device/multitool/multimeter/O = L.get_active_hand() + if (L.skill_check(SKILL_ELECTRICAL, SKILL_TRAINED)) + if(O.mode == METER_CHECKING) + to_chat(L, SPAN_NOTICE ("Перебираем провода...")) + var/name_by_type = name_by_type() + to_chat(L, "[name_by_type] wires:") + for(var/colour in src.wires) + if(unsolved_wires[colour]) + if(!do_after(L, 10, holder)) + return + if(!IsColourCut(colour)) + colour_function = unsolved_wires[colour] + solved_colour_function = SolveWireFunction(colour_function) + if(solved_colour_function != "") + to_chat(L, "the [colour] wire connected to [solved_colour_function]") + playsound(O.loc, 'mods/utility_items/sounds/mbeep.ogg', 20, 1) + else + to_chat(L, "the [colour] wire not connected") + else + to_chat(L, "the [colour] wire not connected") + else + to_chat(L, SPAN_NOTICE ("Переключите мультиметр в режим прозвонки.")) + else + to_chat(L, SPAN_NOTICE ("Вы не знаете как с этим работать.")) + +/datum/design/item/tool/multimeter + name = "multimeter" + desc = "Используется для измерения потребления электроэнергии оборудования и прозвонки проводов. Рекомендуется докторами." + id = "multimeter" + req_tech = list(TECH_MAGNET = 4, TECH_ENGINEERING = 5, TECH_MATERIAL = 6) + materials = list(DEFAULT_WALL_MATERIAL = 1000, MATERIAL_GLASS = 1000, MATERIAL_SILVER = 500) + build_path = /obj/item/device/multitool/multimeter + sort_string = "VAGAM" + +// Closet unlocking + +/obj/structure/closet + + var/code1[8] + var/code2[8] + var/validate = 0 + var/codelen + +/obj/structure/closet/Initialize(mapload, need_fill) + ..() + update_icon() + if((setup & CLOSET_HAS_LOCK)) + verbs += /obj/structure/closet/proc/togglelock_verb + + codelen = rand(7,10) + codelen = length(code1) + codelen = length(code2) + for(var/i=1 to codelen) + code1[i] = rand(0,9) + code2[i] = rand(0,9) + + return mapload ? INITIALIZE_HINT_LATELOAD : INITIALIZE_HINT_NORMAL + +// Overrides this because otherwise this leads us to unit tests failing +/obj/structure/closet/crate/secure/loot + codelen = 4 + +// Proceeding to do stuff + +/obj/structure/closet/use_tool(obj/item/tool, mob/user, list/click_params) + . = ..() + if(setup & CLOSET_HAS_LOCK) + if(isMultimeter(tool)) + var/obj/item/device/multitool/multimeter/O = tool + if(O.mode != METER_CHECKING) + to_chat(user, SPAN_NOTICE ("Переключите мультиметр.")) + else + if (user.skill_check(SKILL_ELECTRICAL, SKILL_TRAINED)) + src.interact(usr) + else + to_chat(user, SPAN_NOTICE ("Вы не умеете работать с этим замком.")) + +/obj/structure/closet/interact(mob/user) + add_fingerprint(user) + + var/dat = "" + for(var/i = 1 to codelen) + dat += "" + for(var/i = 1 to codelen) + dat += "" + for(var/i = 1 to codelen) + dat += "
    +" + dat += "
    [code2[i]]" + dat += "
    -" + dat += "

    Сопоставить код" + + user.set_machine(src) + var/datum/browser/popup = new(user, "closet", "[name]", 90 + codelen * 30, 200) + popup.set_content(dat) + popup.open(1) + +/obj/structure/closet/Topic(href, href_list) + if(!ishuman(usr)) + return + + var/mob/living/carbon/human/user = usr + var/obj/item/device/multitool/multimeter/W = user.get_active_hand() + user.set_machine(src) + + if(href_list["check"]) + if(!W.in_use) + W.in_use = TRUE + else + return + + validate = 0 + + if(W.mode != METER_CHECKING) + to_chat(user, SPAN_NOTICE("Мультиметр не реагирует на подключение.")) + return + + to_chat(usr, SPAN_NOTICE ("Вы начинаете проверять замок...")) + for(var/i = 1 to codelen) + if(do_after(user, 10, src)) + if(code2[i] == code1[i]) + validate++ + to_chat(usr, SPAN_NOTICE ("Ключ подходит.")) + playsound(W.loc, 'mods/utility_items/sounds/mbeep.ogg', 30, 1, frequency = rand(50000, 55000)) + else + to_chat(usr, SPAN_NOTICE ("Ключ не подходит.")) + W.in_use = FALSE + + if(validate < codelen) + return + + locked = !locked + update_icon() + visible_message(SPAN_WARNING ("[user] has [locked ? "locked" : "hacked"] [src]!")) + return + + if(href_list["inc"]) + var/inc = text2num(href_list["inc"]) + code2[inc]++ + if(code2[inc] > 9) + code2[inc] = 0 + interact(user) + + if(href_list["dec"]) + var/inc = text2num(href_list["dec"]) + code2[inc]-- + if(code2[inc] < 0) + code2[inc] = 9 + interact(user) + +#undef METER_MESURING +#undef METER_CHECKING + +#undef isMultimeter diff --git a/mods/utility_items/code/wires.dm b/mods/utility_items/code/wires.dm new file mode 100644 index 0000000000000..d89ce6386eee5 --- /dev/null +++ b/mods/utility_items/code/wires.dm @@ -0,0 +1,255 @@ +// Multitool wires solving function - Just too big + +// Wire solve functions + +/datum/wires/proc/name_by_type() + var/name_by_type + if(istype(src, /datum/wires/airlock)) + name_by_type = "Airlock" + if(istype(src, /datum/wires/apc)) + name_by_type = "APC" + if(istype(src, /datum/wires/robot)) + name_by_type = "Cyborg" + if(istype(src, /datum/wires/fabricator)) + name_by_type = "Autolathe" + if(istype(src, /datum/wires/alarm)) + name_by_type = "Air Alarm" + if(istype(src, /datum/wires/camera)) + name_by_type = "Camera" + if(istype(src, /datum/wires/explosive)) + name_by_type = "C4 Bomb" + if(istype(src, /datum/wires/nuclearbomb)) + name_by_type = "Nuclear Bomb" + if(istype(src, /datum/wires/particle_acc)) + name_by_type = "Particle Accelerator" + if(istype(src, /datum/wires/radio)) + name_by_type = "Radio" + if(istype(src, /datum/wires/vending)) + name_by_type = "Vending Machine" + return name_by_type + +/datum/wires/proc/SolveWires() + var/list/unsolved_wires = src.wires.Copy() + var/colour_function + var/solved_colour_function + + var/name_by_type = name_by_type() + + var/solved_txt = "[name_by_type] wires:
    " + + for(var/colour in src.wires) + if(unsolved_wires[colour]) //unsolved_wires[red] + colour_function = unsolved_wires[colour] //unsolved_wires[red] = 1 so colour_index = 1 + solved_colour_function = SolveWireFunction(colour_function) //unsolved_wires[red] = 1, 1 = AIRLOCK_WIRE_IDSCAN + solved_txt += "the [colour] wire connected to [solved_colour_function]
    " //the red wire is the ID wire + + solved_txt += "
    " + + return solved_txt + +/datum/wires/proc/SolveWireFunction(WireFunction) + return WireFunction //Default returns the original number, so it still "works" + +/datum/wires/airlock/SolveWireFunction(function) + var/sf = "" + var/obj/machinery/door/airlock/AIRL = holder + switch(function) + if(AIRLOCK_WIRE_IDSCAN) + sf = "Port A" + if(AIRLOCK_WIRE_MAIN_POWER1) + sf = "Port B" + if(AIRLOCK_WIRE_MAIN_POWER2) + sf = "Port C" + if(AIRLOCK_WIRE_DOOR_BOLTS) + sf = "Port D" + if(AIRLOCK_WIRE_BACKUP_POWER1) + sf = "Port E" + if(AIRLOCK_WIRE_BACKUP_POWER2) + sf = "Port F" + if(AIRLOCK_WIRE_OPEN_DOOR) + sf = "Port G" + if(AIRLOCK_WIRE_AI_CONTROL) + sf = "Port H (NTNet ID = [AIRL.NTNet_id])" + if(AIRLOCK_WIRE_ELECTRIFY) + sf = "Port I" + if(AIRLOCK_WIRE_SAFETY) + sf = "Port J" + if(AIRLOCK_WIRE_SPEED) + sf = "Port K" + if(AIRLOCK_WIRE_LIGHT) + sf = "Port L" + + return sf + +/datum/wires/alarm/SolveWireFunction(function) + var/sf = "" + switch(function) + if(AALARM_WIRE_IDSCAN) + sf = "Port A" + if(AALARM_WIRE_POWER) + sf = "Port B" + if(AALARM_WIRE_SYPHON) + sf = "Port C" + if(AALARM_WIRE_AI_CONTROL) + sf = "Port D" + if(AALARM_WIRE_AALARM) + sf = "Port E" + + return sf + +/datum/wires/apc/SolveWireFunction(function) + var/sf = "" + switch(function) + if(APC_WIRE_IDSCAN) + sf = "Port A" + if(APC_WIRE_MAIN_POWER1) + sf = "Port B" + if(APC_WIRE_MAIN_POWER2) + sf = "Port C" + if(APC_WIRE_AI_CONTROL) + sf = "Port D" + + return sf + +/datum/wires/camera/SolveWireFunction(function) + var/sf = "" + switch(function) + if(CAMERA_WIRE_FOCUS) + sf = "Port A" + if(CAMERA_WIRE_POWER) + sf = "Port B" + if(CAMERA_WIRE_LIGHT) + sf = "Port C" + if(CAMERA_WIRE_ALARM) + sf = "Port D" + if(CAMERA_WIRE_NOTHING1) + sf = "Port E" + if(CAMERA_WIRE_NOTHING2) + sf = "Port F" + + return sf + +/datum/wires/explosive/SolveWireFunction(function) + var/sf = "" + switch(function) + if(WIRE_EXPLODE) + sf = "explosive" + + return sf + +/datum/wires/nuclearbomb/SolveWireFunction(function) + var/sf = "" + switch(function) + if(NUCLEARBOMB_WIRE_LIGHT) + sf = "Port A" + if(NUCLEARBOMB_WIRE_TIMING) + sf = "Port B" + if(NUCLEARBOMB_WIRE_SAFETY) + sf = "Port C" + return sf + +/datum/wires/particle_acc/SolveWireFunction(function) + var/sf = "" + switch(function) + if(PARTICLE_TOGGLE_WIRE) + sf = "Port A" + if(PARTICLE_STRENGTH_WIRE) + sf = "Port B" + if(PARTICLE_INTERFACE_WIRE) + sf = "Port C" + if(PARTICLE_LIMIT_POWER_WIRE) + sf = "Port D" + + return sf + +/datum/wires/radio/SolveWireFunction(function) + var/sf = "" + switch(function) + if(WIRE_SIGNAL) + sf = "Port A" + if(WIRE_RECEIVE) + sf = "Port B" + if(WIRE_TRANSMIT) + sf = "Port C" + + return sf + +/datum/wires/robot/SolveWireFunction(function) + var/sf = "" + switch(function) + if(BORG_WIRE_LAWCHECK) + sf = "Port A" + if(BORG_WIRE_MAIN_POWER) + sf = "Port B" + if(BORG_WIRE_LOCKED_DOWN) + sf = "Port C" + if(BORG_WIRE_AI_CONTROL) + sf = "Port D" + + return sf + +/datum/wires/shield_generator/SolveWireFunction(function) + var/sf = "" + switch(function) + if(SHIELDGEN_WIRE_POWER) + sf = "Port A" + if(SHIELDGEN_WIRE_HACK) + sf = "Port B" + if(SHIELDGEN_WIRE_CONTROL) + sf = "Port C" + if(SHIELDGEN_WIRE_AICONTROL) + sf = "Port D" + if(SHIELDGEN_WIRE_NOTHING) + sf = "Port E" + return sf + +/datum/wires/smartfridge/SolveWireFunction(function) + var/sf = "" + switch(function) + if(SMARTFRIDGE_WIRE_ELECTRIFY) + sf = "Port A" + if(SMARTFRIDGE_WIRE_THROW) + sf = "Port B" + if(SMARTFRIDGE_WIRE_IDSCAN) + sf = "Port C" + return sf + +/datum/wires/smes/SolveWireFunction(function) + var/sf = "" + switch(function) + if(SMES_WIRE_RCON) + sf = "Port A" + if(SMES_WIRE_INPUT) + sf = "Port B" + if(SMES_WIRE_OUTPUT) + sf = "Port C" + if(SMES_WIRE_GROUNDING) + sf = "Port D" + if(SMES_WIRE_FAILSAFES) + sf = "Port E" + return sf + +/datum/wires/suit_storage_unit/SolveWireFunction(function) + var/sf = "" + switch(function) + if(SUIT_STORAGE_WIRE_ELECTRIFY) + sf = "Port A" + if(SUIT_STORAGE_WIRE_SAFETY) + sf = "Port B" + if(SUIT_STORAGE_WIRE_LOCKED) + sf = "Port C" + return sf + +/datum/wires/vending/SolveWireFunction(function) + var/sf = "" + switch(function) + if(WIRE_THROW_PRODUCTS) + sf = "A" + if(WIRE_SHOW_CONTRABAND) + sf = "B" + if(WIRE_SHOCK_USERS) + sf = "C" + if(WIRE_SCAN_ID) + sf = "D" + + return sf diff --git a/mods/utility_items/icons/multimeter.dmi b/mods/utility_items/icons/multimeter.dmi new file mode 100644 index 0000000000000..14079cbd799a1 Binary files /dev/null and b/mods/utility_items/icons/multimeter.dmi differ diff --git a/mods/utility_items/sounds/mbeep.ogg b/mods/utility_items/sounds/mbeep.ogg new file mode 100644 index 0000000000000..54e1571533a5f Binary files /dev/null and b/mods/utility_items/sounds/mbeep.ogg differ diff --git a/mods/~_ss220/bloom_light/_bloom_light.dm b/mods/~_ss220/bloom_light/_bloom_light.dm new file mode 100644 index 0000000000000..d4b05a02178ce --- /dev/null +++ b/mods/~_ss220/bloom_light/_bloom_light.dm @@ -0,0 +1,4 @@ +/singleton/modpack/bloom_light + name = "Bloom Light" + desc = "Блумный свет с Тау Киты" + author = "AndreyGysev, TheArturZh" diff --git a/mods/~_ss220/bloom_light/_bloom_light.dme b/mods/~_ss220/bloom_light/_bloom_light.dme new file mode 100644 index 0000000000000..136a518b26d29 --- /dev/null +++ b/mods/~_ss220/bloom_light/_bloom_light.dme @@ -0,0 +1,11 @@ +#ifndef MODPACK_BLOOM_LIGHT +#define MODPACK_BLOOM_LIGHT + +#include "_bloom_light.dm" +#include "code/__HELPERS/color_matrix.dm" +#include "code/preferences.dm" +#include "code/_renderer.dm" +#include "code/lighting.dm" +#include "code/lighting_atom.dm" + +#endif diff --git a/mods/~_ss220/bloom_light/code/__HELPERS/color_matrix.dm b/mods/~_ss220/bloom_light/code/__HELPERS/color_matrix.dm new file mode 100644 index 0000000000000..b6f680c6f703b --- /dev/null +++ b/mods/~_ss220/bloom_light/code/__HELPERS/color_matrix.dm @@ -0,0 +1,97 @@ +/datum/ColorMatrix + var/list/matrix + var/combined = 1 + var/const/lumR = 0.3086 // or 0.2125 + var/const/lumG = 0.6094 // or 0.7154 + var/const/lumB = 0.0820 // or 0.0721 + +/datum/ColorMatrix/New(mat, contrast = 1, brightness = null) + ..() + + if(istext(mat)) + if(!matrix) + SetColor(mat, contrast, brightness) + else if(isnum(mat)) + SetSaturation(mat, contrast, brightness) + else + matrix = mat + +/datum/ColorMatrix/proc/Reset() + matrix = list(1,0,0, + 0,1,0, + 0,0,1) + +/datum/ColorMatrix/proc/Get(contrast = 1) + var/list/mat = matrix + mat = mat.Copy() + + for(var/i = 1 to min(length(mat), 12)) + mat[i] *= contrast + + return mat + +/datum/ColorMatrix/proc/SetSaturation(s, c = 1, b = null) + var/sr = (1 - s) * lumR + var/sg = (1 - s) * lumG + var/sb = (1 - s) * lumB + + matrix = list(c * (sr + s), c * (sr), c * (sr), + c * (sg), c * (sg + s), c * (sg), + c * (sb), c * (sb), c * (sb + s)) + + SetBrightness(b) + +/datum/ColorMatrix/proc/SetBrightness(brightness) + if(isnull(brightness)) return + + if(!matrix) + Reset() + + var/matrixlen = length(matrix) + + if(matrixlen == 9 || matrixlen == 16) + matrix += brightness + matrix += brightness + matrix += brightness + + if(matrixlen == 16) + matrix += 0 + + else if(matrixlen == 12) + for(var/i = matrixlen to matrixlen - 3 step -1) + matrix[i] = brightness + + else if(matrixlen == 3) + for(var/i = matrixlen - 1 to matrixlen - 4 step -1) + matrix[i] = brightness + +/datum/ColorMatrix/proc/hex2value(hex) + var/num1 = copytext(hex, 1, 2) + var/num2 = copytext(hex, 2) + + if(isnum(text2num(num1))) + num1 = text2num(num1) + else + num1 = text2ascii(lowertext(num1)) - 87 + + if(isnum(text2num(num1))) + num2 = text2num(num1) + else + num2 = text2ascii(lowertext(num2)) - 87 + + return num1 * 16 + num2 + +/datum/ColorMatrix/proc/SetColor(color, contrast = 1, brightness = null) + var/rr = hex2value(copytext(color, 2, 4)) / 255 + var/gg = hex2value(copytext(color, 4, 6)) / 255 + var/bb = hex2value(copytext(color, 6, 8)) / 255 + + rr = round(rr * 1000) / 1000 * contrast + gg = round(gg * 1000) / 1000 * contrast + bb = round(bb * 1000) / 1000 * contrast + + matrix = list(rr, gg, bb, + rr, gg, bb, + rr, gg, bb) + + SetBrightness(brightness) diff --git a/mods/~_ss220/bloom_light/code/_renderer.dm b/mods/~_ss220/bloom_light/code/_renderer.dm new file mode 100644 index 0000000000000..e61f5e434eeb0 --- /dev/null +++ b/mods/~_ss220/bloom_light/code/_renderer.dm @@ -0,0 +1,118 @@ +/atom/movable/renderer/exposure + name = "Lighting Exposure" + group = RENDER_GROUP_SCENE + plane = LIGHTING_EXPOSURE_PLANE + blend_mode = BLEND_ADD + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + appearance_flags = PLANE_MASTER|PIXEL_SCALE // should use client color + +/atom/movable/renderer/exposure/proc/Setup() + filters = list() + + var/mob/M = owner + if(istype(M)) + var/level = M.get_preference_value(/datum/client_preference/exposurelevel) + var/alpha = 255 + if(level == GLOB.PREF_OFF) + alpha *= 0 + else if(level == GLOB.PREF_LOW) + alpha *= 0.33 + else if(level == GLOB.PREF_MEDIUM) + alpha *= 0.66 + + filters += filter( + type = "color", + color = rgb(255, 255, 255, alpha) + ) + + if(level == GLOB.PREF_OFF) + return + + filters += filter( + type = "blur", + size = 20 + ) + +/atom/movable/renderer/exposure/proc/UpdateRenderer() + Setup() + +/atom/movable/renderer/exposure/Initialize() + . = ..() + Setup() + +/atom/movable/renderer/lamps + name = "Lamps Plane Master" + group = RENDER_GROUP_SCENE + plane = LIGHTING_LAMPS_PLANE + blend_mode = BLEND_ADD + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + appearance_flags = PLANE_MASTER // should use client color + +/atom/movable/renderer/lamps/proc/Setup() + filters = list() + + var/bloomsize = 0 + var/bloomoffset = 0 + + var/mob/M = owner + if(istype(M)) + var/level = M.get_preference_value(/datum/client_preference/bloomlevel) + if(level == GLOB.PREF_OFF) + return + else if(level == GLOB.PREF_LOW) + bloomsize = 2 + bloomoffset = 1 + else if(level == GLOB.PREF_MED) + bloomsize = 3 + bloomoffset = 2 + else if(level == GLOB.PREF_HIGH) + bloomsize = 5 + bloomoffset = 3 + + filters += filter( + type = "bloom", + threshold = "#aaaaaa", + size = bloomsize, + offset = bloomoffset, + alpha = 100 + ) + +/atom/movable/renderer/lamps/proc/UpdateRenderer() + Setup() + +/atom/movable/renderer/lamps/Initialize() + . = ..() + Setup() + +/atom/movable/renderer/lamps_glare + name = "Lamps Glare Plane Master" + group = RENDER_GROUP_SCENE + plane = LIGHTING_LAMPS_GLARE + blend_mode = BLEND_OVERLAY + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + appearance_flags = PLANE_MASTER // should use client color + +/atom/movable/renderer/lamps_glare/proc/Setup() + filters = list() + + var/mob/M = owner + if(istype(M)) + var/enabled = M.get_preference_value(/datum/client_preference/glare) + if(enabled == GLOB.PREF_NO) + filters += filter( + type = "color", + color = "#00000000" + ) + return + + filters += filter( + type = "radial_blur", + size = 0.03 + ) + +/atom/movable/renderer/lamps_glare/proc/UpdateRenderer() + Setup() + +/atom/movable/renderer/lamps_glare/Initialize() + . = ..() + Setup() diff --git a/mods/~_ss220/bloom_light/code/lighting.dm b/mods/~_ss220/bloom_light/code/lighting.dm new file mode 100644 index 0000000000000..ed58b6801c761 --- /dev/null +++ b/mods/~_ss220/bloom_light/code/lighting.dm @@ -0,0 +1,9 @@ +/obj/machinery/light + exposure_icon_state = "cone" + icon = 'mods/~_ss220/bloom_light/icons/obj/structures/lighting.dmi' + +/obj/machinery/light/small + exposure_icon_state = "circle" + +/obj/machinery/light/led/small + exposure_icon_state = "circle" diff --git a/mods/~_ss220/bloom_light/code/lighting_atom.dm b/mods/~_ss220/bloom_light/code/lighting_atom.dm new file mode 100644 index 0000000000000..959859ced0260 --- /dev/null +++ b/mods/~_ss220/bloom_light/code/lighting_atom.dm @@ -0,0 +1,42 @@ +/atom/var/exposure_icon = 'mods/~_ss220/bloom_light/icons/exposures.dmi' +/atom/var/exposure_icon_state +/atom/var/exposure_colored = TRUE +/atom/var/image/exposure_overlay + +var/global/EXPOSURE_BRIGHTNESS_BASE = 0.2 +var/global/EXPOSURE_BRIGHTNESS_POWER = -0.2 +var/global/EXPOSURE_CONTRAST_BASE = 10 +var/global/EXPOSURE_CONTRAST_POWER = 0 + +/atom/proc/update_bloom() + CutOverlays(exposure_overlay) + + if (!(exposure_icon && exposure_icon_state)) + return + + if (!exposure_overlay) + exposure_overlay = image(icon = exposure_icon, icon_state = exposure_icon_state, dir = dir, layer = -1) + + exposure_overlay.plane = LIGHTING_EXPOSURE_PLANE + exposure_overlay.blend_mode = BLEND_ADD + exposure_overlay.appearance_flags = RESET_ALPHA | RESET_COLOR | KEEP_APART + + var/contrast = EXPOSURE_CONTRAST_BASE + EXPOSURE_CONTRAST_POWER * light_power + var/brightness = EXPOSURE_BRIGHTNESS_BASE + EXPOSURE_BRIGHTNESS_POWER * light_power + + var/datum/ColorMatrix/MATRIX = new(1, contrast, brightness) + if(exposure_colored) + MATRIX.SetColor(light_color, contrast, brightness) + + exposure_overlay.color = MATRIX.Get() + + var/icon/EX = icon(icon = exposure_icon, icon_state = exposure_icon_state) + + exposure_overlay.pixel_x = 16 - EX.Width() / 2 + exposure_overlay.pixel_y = 16 - EX.Height() / 2 + + AddOverlays(exposure_overlay) + +/atom/proc/delete_lights() + CutOverlays(exposure_overlay) + QDEL_NULL(exposure_overlay) diff --git a/mods/~_ss220/bloom_light/code/preferences.dm b/mods/~_ss220/bloom_light/code/preferences.dm new file mode 100644 index 0000000000000..43d4f3410b613 --- /dev/null +++ b/mods/~_ss220/bloom_light/code/preferences.dm @@ -0,0 +1,38 @@ +/datum/client_preference/exposurelevel + description = "Exposure strength" + key = "EXPOSURELEVEL" + options = list(GLOB.PREF_OFF, GLOB.PREF_LOW, GLOB.PREF_MED, GLOB.PREF_HIGH) + default_value = GLOB.PREF_HIGH + +/datum/client_preference/exposurelevel/changed(mob/preference_mob, new_value) + if(!preference_mob?.client) + return + + for(var/atom/movable/renderer/exposure/exposure_to_update in preference_mob.renderers) + exposure_to_update.UpdateRenderer() + +/datum/client_preference/bloomlevel + description = "Bloom strength" + key = "BLOOMLEVEL" + options = list(GLOB.PREF_OFF, GLOB.PREF_LOW, GLOB.PREF_MED, GLOB.PREF_HIGH) + default_value = GLOB.PREF_MED + +/datum/client_preference/bloomlevel/changed(mob/preference_mob, new_value) + if(!preference_mob?.client) + return + + for(var/atom/movable/renderer/lamps/lamps_to_update in preference_mob.renderers) + lamps_to_update.UpdateRenderer() + +/datum/client_preference/glare + description = "Show lamp glare" + key = "GLARE" + options = list(GLOB.PREF_YES, GLOB.PREF_NO) + default_value = GLOB.PREF_YES + +/datum/client_preference/glare/changed(mob/preference_mob, new_value) + if(!preference_mob?.client) + return + + for(var/atom/movable/renderer/lamps_glare/glare_to_update in preference_mob.renderers) + glare_to_update.UpdateRenderer() diff --git a/mods/~_ss220/bloom_light/icons/exposures.dmi b/mods/~_ss220/bloom_light/icons/exposures.dmi new file mode 100644 index 0000000000000..74552b2820612 Binary files /dev/null and b/mods/~_ss220/bloom_light/icons/exposures.dmi differ diff --git a/mods/~_ss220/bloom_light/icons/obj/structures/lighting.dmi b/mods/~_ss220/bloom_light/icons/obj/structures/lighting.dmi new file mode 100644 index 0000000000000..1fd7c4f4b1828 Binary files /dev/null and b/mods/~_ss220/bloom_light/icons/obj/structures/lighting.dmi differ diff --git a/mods/~_ss220/text2speech/_tts.dm b/mods/~_ss220/text2speech/_tts.dm new file mode 100644 index 0000000000000..bbc43283e3e23 --- /dev/null +++ b/mods/~_ss220/text2speech/_tts.dm @@ -0,0 +1,4 @@ +/singleton/modpack/tts + name = "Text-To-Speech" + desc = "2д космонавтики говорят вслух." + author = "furior" diff --git a/mods/~_ss220/text2speech/code/SSHttp.dm b/mods/~_ss220/text2speech/code/SSHttp.dm new file mode 100644 index 0000000000000..0005c35117299 --- /dev/null +++ b/mods/~_ss220/text2speech/code/SSHttp.dm @@ -0,0 +1,246 @@ +SUBSYSTEM_DEF(http) + name = "HTTP" + flags = SS_TICKER | SS_BACKGROUND | SS_NO_INIT // Measure in ticks, but also only run if we have the spare CPU. + wait = 1 + runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY // All the time + // Assuming for the worst, since only discord is hooked into this for now, but that may change + /// List of all async HTTP requests in the processing chain + var/list/datum/http_request/active_async_requests = list() + /// Variable to define if logging is enabled or not. Disabled by default since we know the requests the server is making. Enable with VV if you need to debug requests + var/logging_enabled = FALSE + /// Total requests the SS has processed in a round + var/total_requests + +/datum/controller/subsystem/http/PreInit() + . = ..() + rustg_create_async_http_client() // Open the door + +/datum/controller/subsystem/http/fire(resumed) + for(var/r in active_async_requests) + var/datum/http_request/req = r + // Check if we are complete + if(req.is_complete()) + // If so, take it out the processing list + active_async_requests -= req + var/datum/http_response/res = req.into_response() + + // If the request has a callback, invoke it.Async of course to avoid choking the SS + if(req.cb) + invoke_async(req.cb, res) + + // And log the result + if(logging_enabled) + var/list/log_data = list() + log_data += "BEGIN ASYNC RESPONSE (ID: [req.id])" + if(res.errored) + log_data += "\t ----- RESPONSE ERRROR -----" + log_data += "\t [res.error]" + else + log_data += "\tResponse status code: [res.status_code]" + log_data += "\tResponse body: [res.body]" + log_data += "\tResponse headers: [json_encode(res.headers)]" + log_data += "END ASYNC RESPONSE (ID: [req.id])" + log_debug(log_data.Join("\n")) + +/** + * Async request creator + * + * Generates an async request, and adds it to the subsystem's processing list + * These should be used as they do not lock the entire DD process up as they execute inside their own thread pool inside RUSTG + */ +/datum/controller/subsystem/http/proc/create_async_request(method, url, body = "", list/headers, datum/callback/proc_callback) + var/datum/http_request/req = new() + req.prepare(method, url, body, headers) + if(proc_callback) + req.cb = proc_callback + + // Begin it and add it to the SS active list + req.begin_async() + active_async_requests += req + total_requests++ + + if(logging_enabled) + // Create a log holder + var/list/log_data = list() + log_data += "BEGIN ASYNC REQUEST (ID: [req.id])" + log_data += "\t[uppertext(req.method)] [req.url]" + log_data += "\tRequest body: [req.body]" + log_data += "\tRequest headers: [req.headers]" + log_data += "END ASYNC REQUEST (ID: [req.id])" + + // Write the log data + log_debug(log_data.Join("\n")) + +/** + * Blocking request creator + * + * Generates a blocking request, executes it, logs the info then cleanly returns the response + * Exists as a proof of concept, and should never be used + */ +/datum/controller/subsystem/http/proc/make_blocking_request(method, url, body = "", list/headers) + CRASH("Attempted use of a blocking HTTP request") + +/** + * # HTTP Request + * + * Holder datum for ingame HTTP requests + * + * Holds information regarding to methods used, URL, and response, + * as well as job IDs and progress tracking for async requests + */ +/datum/http_request + /// The ID of the request (Only set if it is an async request) + var/id + /// Is the request in progress? (Only set if it is an async request) + var/in_progress = FALSE + /// HTTP method used + var/method + /// Body of the request being sent + var/body + /// Request headers being sent + var/headers + /// URL that the request is being sent to + var/url + /// If present, response body will be saved to this file. + var/output_file + /// The raw response, which will be decoeded into a [/datum/http_response] + var/_raw_response + /// Callback for executing after async requests. Will be called with an argument of [/datum/http_response] as first argument + var/datum/callback/cb + +/* +########################################################################### +THE METHODS IN THIS FILE ARE TO BE USED BY THE SUBSYSTEM AS A MANGEMENT HUB +----------------------- DO NOT MANUALLY INVOKE THEM ----------------------- +########################################################################### +*/ + +/** + * Preparation handler + * + * Call this with relevant parameters to form the request you want to make + * + * Arguments: + * * _method - HTTP Method to use, see code/__DEFINES/rust_g.dm for a full list + * * _url - The URL to send the request to + * * _body - The body of the request, if applicable + * * _headers - Associative list of HTTP headers to send, if applicab;e + */ +/datum/http_request/proc/prepare(_method, _url, _body = "", list/_headers, _output_file) + if(!length(_headers)) + headers = "" + else + headers = json_encode(_headers) + + method = _method + url = _url + body = _body + output_file = _output_file + +/** + * Blocking executor + * + * Remains as a proof of concept to show it works, but should NEVER be used to do FFI halting the entire DD process up + * Async rqeuests are much preferred, but also require the subsystem to be firing for them to be answered + */ +/datum/http_request/proc/execute_blocking() + CRASH("Attempted to execute a blocking HTTP request") + // _raw_response = rustg_http_request_blocking(method, url, body, headers, build_options()) + +/** + * Async execution starter + * + * Tells the request to start executing inside its own thread inside RUSTG + * Preferred over blocking, but also requires SShttp to be active + * As such, you cannot use this for events which may happen at roundstart (EG: IPIntel, BYOND account tracking, etc) + */ +/datum/http_request/proc/begin_async() + if(in_progress) + CRASH("Attempted to re-use a request object.") + + id = rustg_http_request_async(method, url, body, headers, build_options()) + + if(isnull(text2num(id))) + _raw_response = "Proc error: [id]" + CRASH("Proc error: [id]") + else + in_progress = TRUE + +/** + * Options builder + * + * Builds options for if we want to download files with SShttp + */ +/datum/http_request/proc/build_options() + if(output_file) + return json_encode(list("output_filename" = output_file, "body_filename" = null)) + return null + +/** + * Async completion checker + * + * Checks if an async request has been complete + * Has safety checks built in to compensate if you call this on blocking requests, + * or async requests which have already finished + */ +/datum/http_request/proc/is_complete() + // If we dont have an ID, were blocking, so assume complete + if(isnull(id)) + return TRUE + + // If we arent in progress, assume complete + if(!in_progress) + return TRUE + + // We got here, so check the status + var/result = rustg_http_check_request(id) + + // If we have no result, were not finished + if(result == RUSTG_JOB_NO_RESULTS_YET) + return FALSE + else + // If we got here, we have a result to parse + _raw_response = result + in_progress = FALSE + return TRUE + +/** + * Response deserializer + * + * Takes a HTTP request object, and converts it into a [/datum/http_response] + * The entire thing is wrapped in try/catch to ensure it doesnt break on invalid requests + * Can be called on async and blocking requests + */ +/datum/http_request/proc/into_response() + var/datum/http_response/R = new() + + try + var/list/L = json_decode(_raw_response) + R.status_code = L["status_code"] + R.headers = L["headers"] + R.body = L["body"] + catch + R.errored = TRUE + R.error = _raw_response + + return R + +/** + * # HTTP Response + * + * Holder datum for HTTP responses + * + * Created from calling [/datum/http_request/proc/into_response()] + * Contains vars about the result of the response + */ +/datum/http_response + /// The HTTP status code of the response + var/status_code + /// The body of the response from the server + var/body + /// Associative list of headers sent from the server + var/list/headers + /// Has the request errored + var/errored = FALSE + /// Raw response if we errored + var/error diff --git a/mods/~_ss220/text2speech/code/_procs.dm b/mods/~_ss220/text2speech/code/_procs.dm new file mode 100644 index 0000000000000..3284f2defdf96 --- /dev/null +++ b/mods/~_ss220/text2speech/code/_procs.dm @@ -0,0 +1,2 @@ +/proc/trim(text) + return trim_left(trim_right(text)) diff --git a/mods/~_ss220/text2speech/code/base_seeds/mobs/_base.dm b/mods/~_ss220/text2speech/code/base_seeds/mobs/_base.dm new file mode 100644 index 0000000000000..c0b17e11aa86a --- /dev/null +++ b/mods/~_ss220/text2speech/code/base_seeds/mobs/_base.dm @@ -0,0 +1,15 @@ +//Fallback values for TTS voices + +/mob/living/add_tts_component() + AddComponent(/datum/component/tts_component) + +/mob/living/simple_animal/add_tts_component() + AddComponent(/datum/component/tts_component, /datum/tts_seed/silero/angel) + +/mob/living/silicon/add_tts_component() + AddComponent(/datum/component/tts_component, null, TTS_TRAIT_ROBOTIZE) + +/mob/living/carbon/human/Initialize(mapload, datum/species/new_species) + . = ..() + if(dna) + dna.tts_seed_dna = get_tts_seed() diff --git a/mods/~_ss220/text2speech/code/base_seeds/mobs/alien.dm b/mods/~_ss220/text2speech/code/base_seeds/mobs/alien.dm new file mode 100644 index 0000000000000..6d828ddff61c4 --- /dev/null +++ b/mods/~_ss220/text2speech/code/base_seeds/mobs/alien.dm @@ -0,0 +1,4 @@ +//Aliens! + +/mob/living/carbon/alien/add_tts_component() + AddComponent(/datum/component/tts_component, /datum/tts_seed/silero/ladyvashj) diff --git a/mods/~_ss220/text2speech/code/base_seeds/mobs/other.dm b/mods/~_ss220/text2speech/code/base_seeds/mobs/other.dm new file mode 100644 index 0000000000000..2bd8098f0f7fd --- /dev/null +++ b/mods/~_ss220/text2speech/code/base_seeds/mobs/other.dm @@ -0,0 +1,16 @@ +//Uncategorized mobs + +/mob/living/silicon/ai/add_tts_component() + AddComponent(/datum/component/tts_component, /datum/tts_seed/silero/glados, TTS_TRAIT_ROBOTIZE) + +/mob/living/simple_animal/shade/add_tts_component() + AddComponent(/datum/component/tts_component, /datum/tts_seed/silero/kelthuzad) + +/mob/living/simple_animal/slime/add_tts_component() + AddComponent(/datum/component/tts_component, /datum/tts_seed/silero/chen) + +/mob/living/simple_animal/drone/add_tts_component() + return + +/mob/living/bot/add_tts_component() + return diff --git a/mods/~_ss220/text2speech/code/base_seeds/objs/objs.dm b/mods/~_ss220/text2speech/code/base_seeds/objs/objs.dm new file mode 100644 index 0000000000000..0794f25efec0f --- /dev/null +++ b/mods/~_ss220/text2speech/code/base_seeds/objs/objs.dm @@ -0,0 +1,5 @@ +/obj/machinery/add_tts_component() + return + +/obj/machinery/computer/add_tts_component() + return diff --git a/mods/~_ss220/text2speech/code/configuration.dm b/mods/~_ss220/text2speech/code/configuration.dm new file mode 100644 index 0000000000000..a2ccdea11607b --- /dev/null +++ b/mods/~_ss220/text2speech/code/configuration.dm @@ -0,0 +1,6 @@ +/datum/configuration + var/tts_enabled + var/tts_token_silero + var/tts_cache_enabled + var/ffmpeg_cpuaffinity + var/tts_api_url_silero diff --git a/mods/~_ss220/text2speech/code/numbers.dm b/mods/~_ss220/text2speech/code/numbers.dm new file mode 100644 index 0000000000000..ed41e245dfcf3 --- /dev/null +++ b/mods/~_ss220/text2speech/code/numbers.dm @@ -0,0 +1,161 @@ +/proc/num_in_words(n) + return get_num_in_words(n) + +/proc/dec_in_words(n) + return get_num_in_words(n, TRUE) + +/proc/get_num_in_words(n, decimal = FALSE) + var/static/datum/number/num + if(!num) + num = new /datum/number + + if(num.cache["[n]"]) + return num.cache["[n]"] + + var/result = decimal ? num.decimal2words(n) : num.int2words(n) + + result = " [result] " + num.cache["[n]"] = result + return result + +/datum/number + var/static/list/units = list( + "ноль", + + list("один", "одна"), + list("два", "две"), + + "три", "четыре", "пять", + "шесть", "семь", "восемь", "девять" + ) + + var/static/list/teens = list( + "десять", "одиннадцать", + "двенадцать", "тринадцать", + "четырнадцать", "пятнадцать", + "шестнадцать", "семнадцать", + "восемнадцать", "девятнадцать" + ) + + var/static/list/tens = list( + "десять", + "двадцать", "тридцать", + "сорок", "пятьдесят", + "шестьдесят", "семьдесят", + "восемьдесят", "девяносто" + ) + + var/static/list/hundreds = list( + "сто", "двести", + "триста", "четыреста", + "пятьсот", "шестьсот", + "семьсот", "восемьсот", + "девятьсот" + ) + + var/static/list/orders = list( + list(list("тысяча", "тысячи", "тысяч"), "f"), + list(list("миллион", "миллиона", "миллионов"), "m"), + list(list("миллиард", "миллиарда", "миллиардов"), "m"), + list(list("триллион", "триллиона", "триллионов"), "m"), + list(list("квадриллион", "квадриллиона", "квадриллионов"), "m"), + list(list("квинтиллион", "квинтиллиона", "квинтиллионов"), "m"), + ) + + var/static/list/decimal_int_units = list(list("целая", "целых", "целых"), "f") + + var/static/list/decimal_exp_units = list( + list(list("десятая", "десятых", "десятых"), "f"), + list(list("сотая", "сотых", "сотых"), "f"), + list(list("тысячная", "тысячных", "тысячных"), "f"), + ) + + var/static/minus = "минус" + + var/static/cache = list() + +/datum/number/proc/thousand(rest, sex) +// """Converts numbers from 19 to 999""" + var/prev = 0 + var/plural = 3 + var/list/name = list() + var/use_teens = (rest % 100 >= 10) && (rest % 100 <= 19) + var/list/data = use_teens ? list(list(teens, 10), list(hundreds, 1000)) : list(list(units, 10), list(tens, 100), list(hundreds, 1000)) + for(var/list in data) + + var/names = list[1] + var/x = list[2] + + var/cur = round(((rest - prev) % x) * 10 / x) + 1 + prev = rest % x + + if(x == 10 && use_teens) + plural = 3 + name += teens[cur] + else if(cur == 1) + continue + else if(x == 10) + var/name_ = names[cur] + if(islist(name_)) + name_ = name_[sex == "m" ? 1 : 2] + name += name_ + if(cur >= 3 && cur <= 5) + plural = 2 + else if(cur == 2) + plural = 1 + else + plural = 3 + else + name += names[cur-1] + + return list(plural, name) + +/datum/number/proc/int2words(textnum, list/main_units = list(list("", "", ""), "m")) +// http://ru.wikipedia.org/wiki/Gettext#.D0.9C.D0.BD.D0.BE.D0.B6.D0.B5.D1.81.D1.82.D0.B2.D0.B5.D0.BD.D0.BD.D1.8B.D0.B5_.D1.87.D0.B8.D1.81.D0.BB.D0.B0_2 + + var/list/_orders = list(main_units) + orders + + var/num = text2num(textnum) + if(num == 0) + return trim(jointext(list(units[1], _orders[1][1][3]), " ")) + + var/negative = FALSE + if(num < 0) + negative = TRUE + textnum = copytext_char(textnum, 2, 0) + + var/ord = 1 + var/list/name = list() + + while(textnum) + var/next_thousand = text2num(copytext_char(textnum, -3, 0)) + var/list/thousand_result = thousand(next_thousand, _orders[ord][2]) + var/plural = thousand_result[1] + var/list/nme = thousand_result[2] + + if(length(nme) || ord == 1) + name += _orders[ord][1][plural] + + name += nme + textnum = copytext_char(textnum, 1, -3) + ord += 1 + + if(negative) + name += minus + + var/temp_name = name + name = list() + for(var/i = length_char(temp_name), i >= 1, i--) + name += temp_name[i] + + var/result = trim(jointext(name, " ")) + return result + +/datum/number/proc/decimal2words(textvalue, places = 3) + var/pieces = splittext_char(textvalue, ".") + var/integral = pieces[1] + var/exp = copytext_char(pieces[2], 1, places + 1) + var/list/exp_units = decimal_exp_units[length_char(exp)] + + var/result = trim("[int2words(integral, decimal_int_units)] [int2words(exp, exp_units)]") + return result diff --git a/mods/~_ss220/text2speech/code/providers/silero.dm b/mods/~_ss220/text2speech/code/providers/silero.dm new file mode 100644 index 0000000000000..33b9559967399 --- /dev/null +++ b/mods/~_ss220/text2speech/code/providers/silero.dm @@ -0,0 +1,48 @@ +/datum/tts_provider/silero + name = "Silero" + is_enabled = TRUE + +/datum/tts_provider/silero/request(text, datum/tts_seed/silero/seed, datum/callback/proc_callback) + if(throttle_check()) + return FALSE + + var/ssml_text = {"[text]"} + + var/list/req_body = list() + req_body["api_token"] = config.tts_token_silero + req_body["text"] = ssml_text + req_body["sample_rate"] = 24000 + req_body["ssml"] = TRUE + req_body["speaker"] = seed.value + req_body["lang"] = "ru" + req_body["remote_id"] = "[world.port]" + req_body["put_accent"] = TRUE + req_body["put_yo"] = FALSE + req_body["symbol_durs"] = list() + req_body["format"] = "ogg" + req_body["word_ts"] = FALSE + + SShttp.create_async_request(RUSTG_HTTP_METHOD_POST, config.tts_api_url_silero , json_encode(req_body), list("content-type" = "application/json"), proc_callback) + + return TRUE + +/datum/tts_provider/silero/process_response(datum/http_response/response) + var/data = json_decode(response.body) + // log_debug(response.body) + + if(data["timings"]["003_tts_time"] > 3) + is_throttled = TRUE + throttled_until = world.time + 15 SECONDS + + return data["results"][1]["audio"] + + //var/sha1 = data["original_sha1"] + +/datum/tts_provider/silero/pitch_whisper(text) + return {"[text]"} + +/datum/tts_provider/silero/rate_faster(text) + return {"[text]"} + +/datum/tts_provider/silero/rate_medium(text) + return {"[text]"} diff --git a/mods/~_ss220/text2speech/code/seeds/base.dm b/mods/~_ss220/text2speech/code/seeds/base.dm new file mode 100644 index 0000000000000..dbfe0e6af47d6 --- /dev/null +++ b/mods/~_ss220/text2speech/code/seeds/base.dm @@ -0,0 +1,7 @@ +/datum/tts_seed + var/name = "STUB" + var/value = "STUB" + var/category = TTS_CATEGORY_OTHER + var/gender = TTS_GENDER_ANY + var/datum/tts_provider/provider = /datum/tts_provider + var/required_donator_level = 0 diff --git a/mods/~_ss220/text2speech/code/seeds/silero.dm b/mods/~_ss220/text2speech/code/seeds/silero.dm new file mode 100644 index 0000000000000..d85746ec8fa6b --- /dev/null +++ b/mods/~_ss220/text2speech/code/seeds/silero.dm @@ -0,0 +1,4863 @@ +/datum/tts_seed/silero + provider = /datum/tts_provider/silero + +/datum/tts_seed/silero/arthas + name = "Arthas" + value = "arthas" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/kelthuzad + name = "Kelthuzad" + value = "kelthuzad" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/anubarak + name = "Anubarak" + value = "anubarak" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/thrall + name = "Thrall" + value = "thrall" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/grunt + name = "Grunt" + value = "grunt" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/cairne + name = "Cairne" + value = "cairne" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/rexxar + name = "Rexxar" + value = "rexxar" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/uther + name = "Uther" + value = "uther" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/jaina + name = "Jaina" + value = "jaina" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/kael + name = "Kael" + value = "kael" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/garithos + name = "Garithos" + value = "garithos" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/maiev + name = "Maiev" + value = "maiev" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/naisha + name = "Naisha" + value = "naisha" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/tyrande + name = "Tyrande" + value = "tyrande" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/furion + name = "Furion" + value = "furion" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/illidan + name = "Illidan" + value = "illidan" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/ladyvashj + name = "Ladyvashj" + value = "ladyvashj" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/narrator + name = "Narrator" + value = "narrator" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/medivh + name = "Medivh" + value = "medivh" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/villagerm + name = "Villagerm" + value = "villagerm" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/xenia + name = "Xenia" + value = "xenia" + category = TTS_CATEGORY_OTHER + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/illidan_f + name = "Illidan_f" + value = "illidan_f" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/peon + name = "Peon" + value = "peon" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/chen + name = "Chen" + value = "chen" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/dread_bm + name = "Dread_bm" + value = "dread_bm" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/sylvanas + name = "Sylvanas" + value = "sylvanas" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/priest + name = "Priest" + value = "priest" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/acolyte + name = "Acolyte" + value = "acolyte" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/muradin + name = "Muradin" + value = "muradin" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/dread_t + name = "Dread_t" + value = "dread_t" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/mannoroth + name = "Mannoroth" + value = "mannoroth" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/sorceress + name = "Sorceress" + value = "sorceress" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/peasant + name = "Peasant" + value = "peasant" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/alyx + name = "Alyx" + value = "alyx" + category = TTS_CATEGORY_HALFLIFE2 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/glados + name = "Glados" + value = "glados" + category = TTS_CATEGORY_PORTAL2 + gender = TTS_GENDER_ANY + +/datum/tts_seed/silero/announcer + name = "Announcer" + value = "announcer" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/wheatley + name = "Wheatley" + value = "wheatley" + category = TTS_CATEGORY_PORTAL2 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/barney + name = "Barney" + value = "barney" + category = TTS_CATEGORY_HALFLIFE2 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/raynor + name = "Raynor" + value = "raynor" + category = TTS_CATEGORY_STARCRAFT + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/kerrigan + name = "Kerrigan" + value = "kerrigan" + category = TTS_CATEGORY_STARCRAFT + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/tusk + name = "Tusk" + value = "tusk" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/earth + name = "Earth" + value = "earth" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/wraith + name = "Wraith" + value = "wraith" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/meepo + name = "Meepo" + value = "meepo" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/lina + name = "Lina" + value = "lina" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/bristle + name = "Bristle" + value = "bristle" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/gyro + name = "Gyro" + value = "gyro" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/treant + name = "Treant" + value = "treant" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/lancer + name = "Lancer" + value = "lancer" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/clockwerk + name = "Clockwerk" + value = "clockwerk" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/batrider + name = "Batrider" + value = "batrider" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/kotl + name = "Kotl" + value = "kotl" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/kunkka + name = "Kunkka" + value = "kunkka" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/pudge + name = "Pudge" + value = "pudge" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/juggernaut + name = "Juggernaut" + value = "juggernaut" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/vort_e2 + name = "Vort_e2" + value = "vort_e2" + category = TTS_CATEGORY_HALFLIFE2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/luna + name = "Luna" + value = "luna" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/omni + name = "Omni" + value = "omni" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/sniper + name = "Sniper" + value = "sniper" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/skywrath + name = "Skywrath" + value = "skywrath" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/bounty + name = "Bounty" + value = "bounty" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/huskar + name = "Huskar" + value = "huskar" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/windranger + name = "Windranger" + value = "windranger" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/bloodseeker + name = "Bloodseeker" + value = "bloodseeker" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/templar + name = "Templar" + value = "templar" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/ranger + name = "Ranger" + value = "ranger" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/shaker + name = "Shaker" + value = "shaker" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/mortred + name = "Mortred" + value = "mortred" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/queen + name = "Queen" + value = "queen" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/storm + name = "Storm" + value = "storm" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/tide + name = "Tide" + value = "tide" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/evelynn + name = "Evelynn" + value = "evelynn" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/riki + name = "Riki" + value = "riki" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/antimage + name = "Antimage" + value = "antimage" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/witchdoctor + name = "Witchdoctor" + value = "witchdoctor" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/doom + name = "Doom" + value = "doom" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/yuumi + name = "Yuumi" + value = "yuumi" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_ANY + +/datum/tts_seed/silero/bandit + name = "Bandit" + value = "bandit" + category = TTS_CATEGORY_STALKER + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/pantheon + name = "pantheon" + value = "pantheon" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/tychus + name = "Tychus" + value = "tychus" + category = TTS_CATEGORY_STARCRAFT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/breen + name = "Breen" + value = "breen" + category = TTS_CATEGORY_HALFLIFE2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/kleiner + name = "Kleiner" + value = "kleiner" + category = TTS_CATEGORY_HALFLIFE2 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/father + name = "Father" + value = "father" + category = TTS_CATEGORY_HALFLIFE2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/tosh + name = "Tosh" + value = "tosh" + category = TTS_CATEGORY_STARCRAFT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/stetmann + name = "Stetmann" + value = "stetmann" + category = TTS_CATEGORY_STARCRAFT + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/hanson + name = "Hanson" + value = "hanson" + category = TTS_CATEGORY_STARCRAFT + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/swann + name = "Swann" + value = "swann" + category = TTS_CATEGORY_STARCRAFT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/hill + name = "Hill" + value = "hill" + category = TTS_CATEGORY_STARCRAFT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/gman_e2 + name = "Gman_e2" + value = "gman_e2" + category = TTS_CATEGORY_HALFLIFE2 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/valerian + name = "Valerian" + value = "valerian" + category = TTS_CATEGORY_STARCRAFT + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/gman + name = "Gman" + value = "gman" + category = TTS_CATEGORY_HALFLIFE2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/vort + name = "Vort" + value = "vort" + category = TTS_CATEGORY_HALFLIFE2 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/aradesh + name = "Aradesh" + value = "aradesh" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/dornan + name = "Dornan" + value = "dornan" + category = TTS_CATEGORY_FALLOUT2 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/elder + name = "Elder" + value = "elder" + category = TTS_CATEGORY_FALLOUT2 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/harris + name = "Harris" + value = "harris" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/cabbot + name = "Cabbot" + value = "cabbot" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/decker + name = "Decker" + value = "decker" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/dick + name = "Dick" + value = "dick" + category = TTS_CATEGORY_FALLOUT2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/officer + name = "Officer" + value = "officer" + category = TTS_CATEGORY_FALLOUT2 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/frank + name = "Frank" + value = "frank" + category = TTS_CATEGORY_FALLOUT2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/gizmo + name = "Gizmo" + value = "gizmo" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/hakunin + name = "Hakunin" + value = "hakunin" + category = TTS_CATEGORY_FALLOUT2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/harold + name = "Harold" + value = "harold" + category = TTS_CATEGORY_FALLOUT2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/harry + name = "Harry" + value = "harry" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/jain + name = "Jain" + value = "jain" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/maxson + name = "Maxson" + value = "maxson" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/killian + name = "Killian" + value = "killian" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/laura + name = "Laura" + value = "laura" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/lieutenant + name = "Lieutenant" + value = "lieutenant" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/loxley + name = "Loxley" + value = "loxley" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/lynette + name = "Lynette" + value = "lynette" + category = TTS_CATEGORY_FALLOUT2 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/marcus + name = "Marcus" + value = "marcus" + category = TTS_CATEGORY_FALLOUT2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/master + name = "Master" + value = "master" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/morpheus + name = "Morpheus" + value = "morpheus" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/myron + name = "Myron" + value = "myron" + category = TTS_CATEGORY_FALLOUT2 + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/nicole + name = "Nicole" + value = "nicole" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/overseer + name = "Overseer" + value = "overseer" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/rhombus + name = "Rhombus" + value = "rhombus" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/_set + name = "Set" + value = "set" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/sulik + name = "Sulik" + value = "sulik" + category = TTS_CATEGORY_FALLOUT2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/tandi + name = "Tandi" + value = "tandi" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/vree + name = "Vree" + value = "vree" + category = TTS_CATEGORY_FALLOUT + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/dude + name = "Dude" + value = "dude" + category = TTS_CATEGORY_POSTAL2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/archmage + name = "Archmage" + value = "archmage" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/demoman + name = "Demoman" + value = "demoman" + category = TTS_CATEGORY_TEAMFORTRESS2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/engineer + name = "Engineer" + value = "engineer" + category = TTS_CATEGORY_TEAMFORTRESS2 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/heavy + name = "Heavy" + value = "heavy" + category = TTS_CATEGORY_TEAMFORTRESS2 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/medic + name = "Medic" + value = "medic" + category = TTS_CATEGORY_TEAMFORTRESS2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/scout + name = "Scout" + value = "scout" + category = TTS_CATEGORY_TEAMFORTRESS2 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/sniper_tf + name = "Sniper_tf" + value = "sniper_tf" + category = TTS_CATEGORY_TEAMFORTRESS2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/soldier + name = "Soldier" + value = "soldier" + category = TTS_CATEGORY_TEAMFORTRESS2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/spy + name = "Spy" + value = "spy" + category = TTS_CATEGORY_TEAMFORTRESS2 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/admiral + name = "Admiral" + value = "admiral" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/alchemist + name = "Alchemist" + value = "alchemist" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/archimonde + name = "Archimonde" + value = "archimonde" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/breaker + name = "Breaker" + value = "breaker" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/captain + name = "Captain" + value = "captain" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/dryad + name = "Dryad" + value = "dryad" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_ANY + +/datum/tts_seed/silero/elf_eng + name = "Elf_eng" + value = "elf_eng" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/footman + name = "Footman" + value = "footman" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/grom + name = "Grom" + value = "grom" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/hh + name = "Hh" + value = "hh" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/huntress + name = "Huntress" + value = "huntress" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/keeper + name = "Keeper" + value = "keeper" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/naga_m + name = "Naga_m" + value = "naga_m" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/naga_rg + name = "Naga_rg" + value = "naga_rg" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/peasant_w + name = "Peasant_w" + value = "peasant_w" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/rifleman + name = "Rifleman" + value = "rifleman" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/satyr + name = "Satyr" + value = "satyr" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/sylvanas_w + name = "Sylvanas_w" + value = "sylvanas_w" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/voljin + name = "Voljin" + value = "voljin" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/sidorovich + name = "Sidorovich" + value = "sidorovich" + category = TTS_CATEGORY_STALKER + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/p3 + name = "P3" + value = "p3" + category = TTS_CATEGORY_ATOMIC_HEART + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/hraz + name = "Hraz" + value = "hraz" + category = TTS_CATEGORY_ATOMIC_HEART + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/tereshkova + name = "Tereshkova" + value = "tereshkova" + category = TTS_CATEGORY_ATOMIC_HEART + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/babazina + name = "Babazina" + value = "babazina" + category = TTS_CATEGORY_ATOMIC_HEART + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/darius + name = "Darius" + value = "darius" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/trundle + name = "Trundle" + value = "trundle" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/garen + name = "Garen" + value = "garen" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/kled + name = "Kled" + value = "kled" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/ekko + name = "Ekko" + value = "ekko" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/volibear + name = "Volibear" + value = "volibear" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/samira + name = "Samira" + value = "samira" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/swain + name = "Swain" + value = "swain" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/udyr + name = "Udyr" + value = "udyr" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/dr_mundo + name = "Dr_mundo" + value = "dr_mundo" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/graves + name = "Graves" + value = "graves" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/rakan + name = "Rakan" + value = "rakan" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/renata_glasc + name = "Renata_glasc" + value = "renata_glasc" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/gangplank + name = "Gangplank" + value = "gangplank" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/riven + name = "Riven" + value = "riven" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/katarina + name = "Katarina" + value = "katarina" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/ahri + name = "Ahri" + value = "ahri" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/ornn + name = "Ornn" + value = "ornn" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/braum + name = "Braum" + value = "braum" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/fizz + name = "Fizz" + value = "fizz" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/draven + name = "Draven" + value = "draven" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/qiyana + name = "Qiyana" + value = "qiyana" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/ksante + name = "Ksante" + value = "ksante" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/talon + name = "Talon" + value = "talon" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/shyvana + name = "Shyvana" + value = "shyvana" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/zenyatta + name = "Zenyatta" + value = "zenyatta" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/kiriko + name = "Kiriko" + value = "kiriko" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/hanzo + name = "Hanzo" + value = "hanzo" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/roadhog + name = "Roadhog" + value = "roadhog" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/sigma + name = "Sigma" + value = "sigma" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/soldier_76 + name = "Soldier_76" + value = "soldier_76" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/junkrat + name = "Junkrat" + value = "junkrat" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/tracer + name = "Tracer" + value = "tracer" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/genji + name = "Genji" + value = "genji" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/echo + name = "Echo" + value = "echo" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/sojourn + name = "Sojourn" + value = "sojourn" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/winston + name = "Winston" + value = "winston" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/reaper + name = "Reaper" + value = "reaper" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/training_robot + name = "Training_robot" + value = "training_robot" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/m_darkelf + name = "M_darkelf" + value = "m_darkelf" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/esbern + name = "Esbern" + value = "esbern" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/m_argo + name = "M_argo" + value = "m_argo" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/m_khajiit + name = "M_khajiit" + value = "m_khajiit" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/m_coward + name = "M_coward" + value = "m_coward" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/farkas + name = "Farkas" + value = "farkas" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/m_drunk + name = "M_drunk" + value = "m_drunk" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/f_khajiit + name = "F_khajiit" + value = "f_khajiit" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/m_citizen + name = "M_citizen" + value = "m_citizen" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/m_orc + name = "M_orc" + value = "m_orc" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/odahviing + name = "Odahviing" + value = "odahviing" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/kodlak + name = "Kodlak" + value = "kodlak" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/m_child + name = "M_child" + value = "m_child" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/emperor + name = "Emperor" + value = "emperor" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/hagraven + name = "Hagraven" + value = "hagraven" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/nazir + name = "Nazir" + value = "nazir" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/dremora + name = "Dremora" + value = "dremora" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/alduin + name = "Alduin" + value = "alduin" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/malkoran + name = "Malkoran" + value = "malkoran" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/barbas + name = "Barbas" + value = "barbas" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/hermaeus + name = "Hermaeus" + value = "hermaeus" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/hakon + name = "Hakon" + value = "hakon" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/rita + name = "Rita" + value = "rita" + category = TTS_CATEGORY_RITA + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/barman + name = "Barman" + value = "barman" + category = TTS_CATEGORY_STALKER + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/bridger2 + name = "Bridger2" + value = "bridger2" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/bridger3 + name = "Bridger3" + value = "bridger3" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/cannibal3 + name = "Cannibal3" + value = "cannibal3" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/bridger1 + name = "Bridger1" + value = "bridger1" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/cannibal2 + name = "Cannibal2" + value = "cannibal2" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/slave1 + name = "Slave1" + value = "slave1" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/slave3 + name = "Slave3" + value = "slave3" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/mira + name = "Mira" + value = "mira" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/valeera + name = "Valeera" + value = "valeera" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/rehgar + name = "Rehgar" + value = "rehgar" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/yrel + name = "Yrel" + value = "yrel" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/volskaya + name = "Volskaya" + value = "volskaya" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/necromancer + name = "Necromancer" + value = "necromancer" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/zuljin + name = "Zuljin" + value = "zuljin" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/samuro + name = "Samuro" + value = "samuro" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/tyrael + name = "Tyrael" + value = "tyrael" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/athena + name = "Athena" + value = "athena" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/default + name = "Default" + value = "default" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/chromie + name = "Chromie" + value = "chromie" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/orphea + name = "Orphea" + value = "orphea" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/adjutant + name = "Adjutant" + value = "adjutant" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/vanndara + name = "Vanndara" + value = "vanndara" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/mechatassadar + name = "Mechatassadar" + value = "mechatassadar" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/blackheart + name = "Blackheart" + value = "blackheart" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/olaf + name = "Olaf" + value = "olaf" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/alarak + name = "Alarak" + value = "alarak" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/dva + name = "Dva" + value = "dva" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/toy18 + name = "Toy18" + value = "toy18" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/witchdoctor_h + name = "Witchdoctor_h" + value = "witchdoctor_h" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/lucio + name = "Lucio" + value = "lucio" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/angel + name = "Angel" + value = "angel" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/thunderking + name = "Thunderking" + value = "thunderking" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/dr_boom + name = "Dr_boom" + value = "dr_boom" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/hooktusk + name = "Hooktusk" + value = "hooktusk" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/sinclari + name = "Sinclari" + value = "sinclari" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/kazakus + name = "Kazakus" + value = "kazakus" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/ol_toomba + name = "Ol_toomba" + value = "ol_toomba" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/moroes + name = "Moroes" + value = "moroes" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/maiev_hs + name = "Maiev_hs" + value = "maiev_hs" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/zentimo + name = "Zentimo" + value = "zentimo" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/rastakhan + name = "Rastakhan" + value = "rastakhan" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/innkeeper + name = "Innkeeper" + value = "innkeeper" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/togwaggle + name = "Togwaggle" + value = "togwaggle" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/biggs + name = "Biggs" + value = "biggs" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/brann + name = "Brann" + value = "brann" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/tekahn_boss + name = "Tekahn_boss" + value = "tekahn_boss" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/siamat + name = "Siamat" + value = "siamat" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/omnotron + name = "Omnotron" + value = "omnotron" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/putricide + name = "Putricide" + value = "putricide" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/khadgar + name = "Khadgar" + value = "khadgar" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/zoie + name = "Zoie" + value = "zoie" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/azalina + name = "Azalina" + value = "azalina" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/chu + name = "Chu" + value = "chu" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/tekahn + name = "Tekahn" + value = "tekahn" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/sthara + name = "Sthara" + value = "sthara" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/dovo + name = "Dovo" + value = "dovo" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/shaw + name = "Shaw" + value = "shaw" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/greymane + name = "Greymane" + value = "greymane" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/willow + name = "Willow" + value = "willow" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/haro + name = "Haro" + value = "haro" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/hagatha + name = "Hagatha" + value = "hagatha" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/reno + name = "Reno" + value = "reno" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/ozara + name = "Ozara" + value = "ozara" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/loti + name = "Loti" + value = "loti" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/tarkus + name = "Tarkus" + value = "tarkus" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/voone + name = "Voone" + value = "voone" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/tala + name = "Tala" + value = "tala" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/edra + name = "Edra" + value = "edra" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/myra + name = "Myra" + value = "myra" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/smiggs + name = "Smiggs" + value = "smiggs" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/timothy + name = "Timothy" + value = "timothy" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/wendy + name = "Wendy" + value = "wendy" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/hannigan + name = "Hannigan" + value = "hannigan" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/vargoth + name = "Vargoth" + value = "vargoth" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/jolene + name = "Jolene" + value = "jolene" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/kyriss + name = "Kyriss" + value = "kyriss" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/saurfang + name = "Saurfang" + value = "saurfang" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/kizi + name = "Kizi" + value = "kizi" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/slate + name = "Slate" + value = "slate" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/hesutu + name = "Hesutu" + value = "hesutu" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/hancho + name = "Hancho" + value = "hancho" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/gnomenapper + name = "Gnomenapper" + value = "gnomenapper" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/valdera + name = "Valdera" + value = "valdera" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/disidra + name = "Disidra" + value = "disidra" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/omu + name = "Omu" + value = "omu" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/floop + name = "Floop" + value = "floop" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/belloc + name = "Belloc" + value = "belloc" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/xurios + name = "Xurios" + value = "xurios" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/wagtoggle + name = "Wagtoggle" + value = "wagtoggle" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/belnaara + name = "Belnaara" + value = "belnaara" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/lilayell + name = "Lilayell" + value = "lilayell" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/candlebeard + name = "Candlebeard" + value = "candlebeard" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/awilo + name = "Awilo" + value = "awilo" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/marei + name = "Marei" + value = "marei" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/applebough + name = "Applebough" + value = "applebough" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/lazul + name = "Lazul" + value = "lazul" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/arwyn + name = "Arwyn" + value = "arwyn" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/glowtron + name = "Glowtron" + value = "glowtron" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/cardish + name = "Cardish" + value = "cardish" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/robold + name = "Robold" + value = "robold" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/malfurion + name = "Malfurion" + value = "malfurion" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/deathwhisper + name = "Deathwhisper" + value = "deathwhisper" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/janna + name = "Janna" + value = "janna" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/cassiopeia + name = "Cassiopeia" + value = "cassiopeia" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/taliyah + name = "Taliyah" + value = "taliyah" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/neeko + name = "Neeko" + value = "neeko" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/taric + name = "Taric" + value = "taric" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/akshan + name = "Akshan" + value = "akshan" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/tristana + name = "Tristana" + value = "tristana" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/sylas + name = "Sylas" + value = "sylas" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/sejuani + name = "Sejuani" + value = "sejuani" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/anivia + name = "Anivia" + value = "anivia" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/vayne + name = "Vayne" + value = "vayne" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/karma + name = "Karma" + value = "karma" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/nilah + name = "Nilah" + value = "nilah" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/olaf_lol + name = "Olaf_lol" + value = "olaf_lol" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/quinn + name = "Quinn" + value = "quinn" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/lissandra + name = "Lissandra" + value = "lissandra" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/hecarim + name = "Hecarim" + value = "hecarim" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/vi + name = "Vi" + value = "vi" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/zyra + name = "Zyra" + value = "zyra" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/zac + name = "Zac" + value = "zac" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/moira + name = "Moira" + value = "moira" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/ashe + name = "Ashe" + value = "ashe" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/brigitte + name = "Brigitte" + value = "brigitte" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/mercy + name = "Mercy" + value = "mercy" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/lucio_ov + name = "Lucio_ov" + value = "lucio_ov" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/dva_ov + name = "Dva_ov" + value = "dva_ov" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/symmetra + name = "Symmetra" + value = "symmetra" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/zarya + name = "Zarya" + value = "zarya" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/cassidy + name = "Cassidy" + value = "cassidy" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/baptiste + name = "Baptiste" + value = "baptiste" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/junker_queen + name = "Junker_queen" + value = "junker_queen" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/doomfist + name = "Doomfist" + value = "doomfist" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/pharah + name = "Pharah" + value = "pharah" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/sombra + name = "Sombra" + value = "sombra" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/ana + name = "Ana" + value = "ana" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/widowmaker + name = "Widowmaker" + value = "widowmaker" + category = TTS_CATEGORY_OVERWATCH + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/harbor + name = "Harbor" + value = "harbor" + category = TTS_CATEGORY_VALORANT + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/sage + name = "Sage" + value = "sage" + category = TTS_CATEGORY_VALORANT + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/brimstone + name = "Brimstone" + value = "brimstone" + category = TTS_CATEGORY_VALORANT + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/sova + name = "Sova" + value = "sova" + category = TTS_CATEGORY_VALORANT + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/f_shrill + name = "F_shrill" + value = "f_shrill" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/m_haughty + name = "M_haughty" + value = "m_haughty" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/m_soldier + name = "M_soldier" + value = "m_soldier" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/sven + name = "Sven" + value = "sven" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/f_sultry + name = "F_sultry" + value = "f_sultry" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/eorlund + name = "Eorlund" + value = "eorlund" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/m_commander + name = "M_commander" + value = "m_commander" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/f_nord + name = "F_nord" + value = "f_nord" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/lydia + name = "Lydia" + value = "lydia" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/motierre + name = "Motierre" + value = "motierre" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/f_haughty + name = "F_haughty" + value = "f_haughty" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/tullius + name = "Tullius" + value = "tullius" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/festus + name = "Festus" + value = "festus" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/m_nord + name = "M_nord" + value = "m_nord" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/olava + name = "Olava" + value = "olava" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/f_commander + name = "F_commander" + value = "f_commander" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/hadvar + name = "Hadvar" + value = "hadvar" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/f_argo + name = "F_argo" + value = "f_argo" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/arngeir + name = "Arngeir" + value = "arngeir" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/nazeem + name = "Nazeem" + value = "nazeem" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/falion + name = "Falion" + value = "falion" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/f_coward + name = "F_coward" + value = "f_coward" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/m_guard + name = "M_guard" + value = "m_guard" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/m_commoner + name = "M_commoner" + value = "m_commoner" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/elisif + name = "Elisif" + value = "elisif" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/paarthurnax + name = "Paarthurnax" + value = "paarthurnax" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/grelka + name = "Grelka" + value = "grelka" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/f_commoner + name = "F_commoner" + value = "f_commoner" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/ebony + name = "Ebony" + value = "ebony" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/ulfric + name = "Ulfric" + value = "ulfric" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/farengar + name = "Farengar" + value = "farengar" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/astrid + name = "Astrid" + value = "astrid" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/brynjolf + name = "Brynjolf" + value = "brynjolf" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/maven + name = "Maven" + value = "maven" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/f_child + name = "F_child" + value = "f_child" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/f_orc + name = "F_orc" + value = "f_orc" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/delphine + name = "Delphine" + value = "delphine" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/f_darkelf + name = "F_darkelf" + value = "f_darkelf" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/grelod + name = "Grelod" + value = "grelod" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/tolfdir + name = "Tolfdir" + value = "tolfdir" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/m_bandit + name = "M_bandit" + value = "m_bandit" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/m_forsworn + name = "M_forsworn" + value = "m_forsworn" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/karliah + name = "Karliah" + value = "karliah" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/felldir + name = "Felldir" + value = "felldir" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/ancano + name = "Ancano" + value = "ancano" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/mercer + name = "Mercer" + value = "mercer" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/vex + name = "Vex" + value = "vex" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/mirabelle + name = "Mirabelle" + value = "mirabelle" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/aventus + name = "Aventus" + value = "aventus" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/tsun + name = "Tsun" + value = "tsun" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/elenwen + name = "Elenwen" + value = "elenwen" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/gormlaith + name = "Gormlaith" + value = "gormlaith" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/dragon + name = "Dragon" + value = "dragon" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/overwatch + name = "Overwatch" + value = "overwatch" + category = TTS_CATEGORY_HALFLIFE2 + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/zak + name = "Zak" + value = "zak" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/merc2 + name = "Merc2" + value = "merc2" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/forest1 + name = "Forest1" + value = "forest1" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/bandit3 + name = "Bandit3" + value = "bandit3" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/forest2 + name = "Forest2" + value = "forest2" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/merc1 + name = "Merc1" + value = "merc1" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/bandit2 + name = "Bandit2" + value = "bandit2" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/forest3 + name = "Forest3" + value = "forest3" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/tribal3 + name = "Tribal3" + value = "tribal3" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/slave2 + name = "Slave2" + value = "slave2" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/miller + name = "Miller" + value = "miller" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/krest + name = "Krest" + value = "krest" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/tribal1 + name = "Tribal1" + value = "tribal1" + category = TTS_CATEGORY_METRO + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/abathur + name = "Abathur" + value = "abathur" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/erik + name = "Erik" + value = "erik" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/varian + name = "Varian" + value = "varian" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/anduin + name = "Anduin" + value = "anduin" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/deckard + name = "Deckard" + value = "deckard" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/malfurion_h + name = "Malfurion_h" + value = "malfurion_h" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/demonhunter + name = "Demonhunter" + value = "demonhunter" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/demon + name = "Demon" + value = "demon" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/kerrigan_h + name = "Kerrigan_h" + value = "kerrigan_h" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/ladyofthorns + name = "Ladyofthorns" + value = "ladyofthorns" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/barbarian + name = "Barbarian" + value = "barbarian" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/crusader + name = "Crusader" + value = "crusader" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/whitemane + name = "Whitemane" + value = "whitemane" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/nexushunter + name = "Nexushunter" + value = "nexushunter" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/greymane_h + name = "Greymane_h" + value = "greymane_h" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/gardensdayannouncer + name = "Gardensdayannouncer" + value = "gardensdayannouncer" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/drekthar + name = "Drekthar" + value = "drekthar" + category = TTS_CATEGORY_HEROESOFTHESTORM + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/squeamlish + name = "Squeamlish" + value = "squeamlish" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/dagg + name = "Dagg" + value = "dagg" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/brukan + name = "Brukan" + value = "brukan" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/bolan + name = "Bolan" + value = "bolan" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/goya + name = "Goya" + value = "goya" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/stargazer + name = "Stargazer" + value = "stargazer" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/eudora + name = "Eudora" + value = "eudora" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/mozaki + name = "Mozaki" + value = "mozaki" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/katrana + name = "Katrana" + value = "katrana" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/valeera_hs + name = "Valeera_hs" + value = "valeera_hs" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/malacrass + name = "Malacrass" + value = "malacrass" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/elise + name = "Elise" + value = "elise" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/flark + name = "Flark" + value = "flark" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/rhogi + name = "Rhogi" + value = "rhogi" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/gallywix + name = "Gallywix" + value = "gallywix" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/talanji + name = "Talanji" + value = "talanji" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/dr_sezavo + name = "Dr_sezavo" + value = "dr_sezavo" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/tierra + name = "Tierra" + value = "tierra" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/zenda + name = "Zenda" + value = "zenda" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/baechao + name = "Baechao" + value = "baechao" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/lilian + name = "Lilian" + value = "lilian" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/aranna + name = "Aranna" + value = "aranna" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/oshi + name = "Oshi" + value = "oshi" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/norroa + name = "Norroa" + value = "norroa" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/turalyon + name = "Turalyon" + value = "turalyon" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/aki + name = "Aki" + value = "aki" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/lunara + name = "Lunara" + value = "lunara" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/bob + name = "Bob" + value = "bob" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/illucia + name = "Illucia" + value = "illucia" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/yrel_hs + name = "Yrel_hs" + value = "yrel_hs" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/fireheart + name = "Fireheart" + value = "fireheart" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/lanathel + name = "Lanathel" + value = "lanathel" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/tyrande_hs + name = "Tyrande_hs" + value = "tyrande_hs" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/draemus + name = "Draemus" + value = "draemus" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/rasil + name = "Rasil" + value = "rasil" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/kalec + name = "Kalec" + value = "kalec" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/karastamper + name = "Karastamper" + value = "karastamper" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/george + name = "George" + value = "george" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/pollark + name = "Pollark" + value = "pollark" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/stelina + name = "Stelina" + value = "stelina" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/kasa + name = "Kasa" + value = "kasa" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/whirt + name = "Whirt" + value = "whirt" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/anarii + name = "Anarii" + value = "anarii" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/ilza + name = "Ilza" + value = "ilza" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/avozu + name = "Avozu" + value = "avozu" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 3 + +/datum/tts_seed/silero/jeklik + name = "Jeklik" + value = "jeklik" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/zibb + name = "Zibb" + value = "zibb" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/thrud + name = "Thrud" + value = "thrud" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/isiset + name = "Isiset" + value = "isiset" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/akazamzarak + name = "Akazamzarak" + value = "akazamzarak" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/arha + name = "Arha" + value = "arha" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + +/datum/tts_seed/silero/aidar + name = "Aidar" + value = "aidar" + category = TTS_CATEGORY_OTHER + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/baya + name = "Baya" + value = "baya" + category = TTS_CATEGORY_OTHER + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/kseniya + name = "Kseniya" + value = "kseniya" + category = TTS_CATEGORY_OTHER + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/eugene + name = "Eugene" + value = "eugene" + category = TTS_CATEGORY_OTHER + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/senna + name = "Senna" + value = "senna" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/nunu + name = "Nunu" + value = "nunu" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/ryze + name = "Ryze" + value = "ryze" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/yone + name = "Yone" + value = "yone" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/sett + name = "Sett" + value = "sett" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/camille + name = "Camille" + value = "camille" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/lee_sin + name = "Lee_sin" + value = "lee_sin" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/kayle + name = "Kayle" + value = "kayle" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/azir + name = "Azir" + value = "azir" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_ANY + required_donator_level = 3 + +/datum/tts_seed/silero/tryndamere + name = "Tryndamere" + value = "tryndamere" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/nami + name = "Nami" + value = "nami" + category = TTS_CATEGORY_LOL + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/delvin + name = "Delvin" + value = "delvin" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/cicero + name = "Cicero" + value = "cicero" + category = TTS_CATEGORY_SKYRIM + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/linzi + name = "Linzi" + value = "linzi" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/cache + name = "Cache" + value = "cache" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/cravitz + name = "Cravitz" + value = "cravitz" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 3 + +/datum/tts_seed/silero/lady_vashj + name = "Lady_vashj" + value = "lady_vashj" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/dendrologist + name = "Dendrologist" + value = "dendrologist" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/jythiros + name = "Jythiros" + value = "jythiros" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/draan + name = "Draan" + value = "draan" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/rikkar + name = "Rikkar" + value = "rikkar" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/splintergraft + name = "Splintergraft" + value = "splintergraft" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/malchezaar + name = "Malchezaar" + value = "malchezaar" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/taskmaster + name = "Taskmaster" + value = "taskmaster" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/oxana + name = "Oxana" + value = "oxana" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/inara + name = "Inara" + value = "inara" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/ivan + name = "Ivan" + value = "ivan" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/kazamon + name = "Kazamon" + value = "kazamon" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/albin + name = "Albin" + value = "albin" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/ammunae + name = "Ammunae" + value = "ammunae" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/illidara + name = "Illidara" + value = "illidara" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 2 + +/datum/tts_seed/silero/nici + name = "Nici" + value = "nici" + category = TTS_CATEGORY_HEARTHSTONE + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/byasha + name = "Byasha" + value = "byasha" + category = TTS_CATEGORY_TINYBUNNY + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/cerys + name = "Cerys" + value = "cerys" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/philippa + name = "Philippa" + value = "philippa" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/oldnekro + name = "Oldnekro" + value = "oldnekro" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/lambert + name = "Lambert" + value = "lambert" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/shani + name = "Shani" + value = "shani" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/anton + name = "Anton" + value = "anton" + category = TTS_CATEGORY_TINYBUNNY + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/dolg1 + name = "Dolg1" + value = "dolg1" + category = TTS_CATEGORY_STALKER + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/guru + name = "Guru" + value = "guru" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/lugos + name = "Lugos" + value = "lugos" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/karina + name = "Karina" + value = "karina" + category = TTS_CATEGORY_TINYBUNNY + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/ewald + name = "Ewald" + value = "ewald" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/mirror + name = "Mirror" + value = "mirror" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/noble + name = "Noble" + value = "noble" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/huber + name = "Huber" + value = "huber" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/wywern + name = "Wywern" + value = "wywern" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/avallach + name = "Avallach" + value = "avallach" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/semen + name = "Semen" + value = "semen" + category = TTS_CATEGORY_TINYBUNNY + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/all_elder + name = "All_elder" + value = "all_elder" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/nsheriff + name = "Nsheriff" + value = "nsheriff" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/orcc + name = "Orcc" + value = "orcc" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/clerk + name = "Clerk" + value = "clerk" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/witch + name = "Witch" + value = "witch" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/deva + name = "Deva" + value = "deva" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/coach + name = "Coach" + value = "coach" + category = TTS_CATEGORY_LEFT4DEAD + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/dictor + name = "Dictor" + value = "dictor" + category = TTS_CATEGORY_PORTAL2 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/monolith2 + name = "Monolith2" + value = "monolith2" + category = TTS_CATEGORY_STALKER + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/invoker + name = "Invoker" + value = "invoker" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/goblin + name = "Goblin" + value = "goblin" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/annah + name = "Annah" + value = "annah" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/patrick + name = "Patrick" + value = "patrick" + category = TTS_CATEGORY_SPONGEBOB + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/spongebob + name = "Spongebob" + value = "spongebob" + category = TTS_CATEGORY_SPONGEBOB + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/kapitan + name = "Kapitan" + value = "kapitan" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/karh + name = "Karh" + value = "karh" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/lydia_tb + name = "Lydia_tb" + value = "lydia_tb" + category = TTS_CATEGORY_TINYBUNNY + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/silencer + name = "Silencer" + value = "silencer" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/sheriff + name = "Sheriff" + value = "sheriff" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/lycan + name = "Lycan" + value = "lycan" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/cirilla + name = "Cirilla" + value = "cirilla" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/legends + name = "Legends" + value = "legends" + category = TTS_CATEGORY_STALKER + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/monolith1 + name = "Monolith1" + value = "monolith1" + category = TTS_CATEGORY_STALKER + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/trapper + name = "Trapper" + value = "trapper" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/mirana + name = "Mirana" + value = "mirana" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_FEMALE + required_donator_level = 3 + +/datum/tts_seed/silero/glav + name = "Glav" + value = "glav" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/syanna + name = "Syanna" + value = "syanna" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/regis + name = "Regis" + value = "regis" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/dazzle + name = "Dazzle" + value = "dazzle" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/mthief + name = "Mthief" + value = "mthief" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/guillaume + name = "Guillaume" + value = "guillaume" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/vivienne + name = "Vivienne" + value = "vivienne" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/plankton + name = "Plankton" + value = "plankton" + category = TTS_CATEGORY_SPONGEBOB + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/rochelle + name = "Rochelle" + value = "rochelle" + category = TTS_CATEGORY_LEFT4DEAD + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/vor + name = "Vor" + value = "vor" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/grandmother + name = "Grandmother" + value = "grandmother" + category = TTS_CATEGORY_TINYBUNNY + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/dolg2 + name = "Dolg2" + value = "dolg2" + category = TTS_CATEGORY_STALKER + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/junboy + name = "Junboy" + value = "junboy" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/shopper + name = "Shopper" + value = "shopper" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/papillon + name = "Papillon" + value = "papillon" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/cm + name = "Cm" + value = "cm" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/vesemir + name = "Vesemir" + value = "vesemir" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/kate + name = "Kate" + value = "kate" + category = TTS_CATEGORY_TINYBUNNY + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/polina + name = "Polina" + value = "polina" + category = TTS_CATEGORY_TINYBUNNY + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/crach + name = "Crach" + value = "crach" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/gryphon + name = "Gryphon" + value = "gryphon" + category = TTS_CATEGORY_WARCRAFT3 + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/zeus + name = "Zeus" + value = "zeus" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/iz + name = "Iz" + value = "iz" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/geralt + name = "Geralt" + value = "geralt" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/stories + name = "Stories" + value = "stories" + category = TTS_CATEGORY_STALKER + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/nekro + name = "Nekro" + value = "nekro" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/hwleader + name = "Hwleader" + value = "hwleader" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/yennefer + name = "Yennefer" + value = "yennefer" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/hero + name = "Hero" + value = "hero" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/baratrum + name = "Baratrum" + value = "baratrum" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/ellis + name = "Ellis" + value = "ellis" + category = TTS_CATEGORY_LEFT4DEAD + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/udalryk + name = "Udalryk" + value = "udalryk" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/dad + name = "Dad" + value = "dad" + category = TTS_CATEGORY_TINYBUNNY + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/smith + name = "Smith" + value = "smith" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/romka + name = "Romka" + value = "romka" + category = TTS_CATEGORY_TINYBUNNY + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/abaddon + name = "Abaddon" + value = "abaddon" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/eskel + name = "Eskel" + value = "eskel" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/freedom + name = "Freedom" + value = "freedom" + category = TTS_CATEGORY_STALKER + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/magess + name = "Magess" + value = "magess" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_ANY + required_donator_level = 1 + +/datum/tts_seed/silero/nalo + name = "Nalo" + value = "nalo" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_FEMALE + required_donator_level = 2 + +/datum/tts_seed/silero/dandelion + name = "Dandelion" + value = "dandelion" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/palmerin + name = "Palmerin" + value = "palmerin" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/olgierd + name = "Olgierd" + value = "olgierd" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/d_sven + name = "D_sven" + value = "d_sven" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 3 + +/datum/tts_seed/silero/triss + name = "Triss" + value = "triss" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_FEMALE + required_donator_level = 1 + +/datum/tts_seed/silero/monkey + name = "Monkey" + value = "monkey" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/squidward + name = "Squidward" + value = "squidward" + category = TTS_CATEGORY_SPONGEBOB + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/ember + name = "Ember" + value = "ember" + category = TTS_CATEGORY_DOTA2 + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/ycf + name = "Ycf" + value = "ycf" + category = TTS_CATEGORY_EVILISLANDS + gender = TTS_GENDER_MALE + required_donator_level = 2 + +/datum/tts_seed/silero/nick + name = "Nick" + value = "nick" + category = TTS_CATEGORY_LEFT4DEAD + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/hjalmar + name = "Hjalmar" + value = "hjalmar" + category = TTS_CATEGORY_WITCHER + gender = TTS_GENDER_MALE + required_donator_level = 1 + +/datum/tts_seed/silero/gale + name = "Gale" + value = "en_Gale" + category = TTS_CATEGORY_BALDURS_GATE_3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/jaheira + name = "Jaheira" + value = "en_Jaheira" + category = TTS_CATEGORY_BALDURS_GATE_3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/laezel + name = "Laezel" + value = "en_Laezel" + category = TTS_CATEGORY_BALDURS_GATE_3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/karlach + name = "Karlach" + value = "en_Karlach" + category = TTS_CATEGORY_BALDURS_GATE_3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/shadowheart + name = "Shadowheart" + value = "en_Shadowheart" + category = TTS_CATEGORY_BALDURS_GATE_3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/wyll + name = "Wyll" + value = "en_Wyll" + category = TTS_CATEGORY_BALDURS_GATE_3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/minthara + name = "Minthara" + value = "en_Minthara" + category = TTS_CATEGORY_BALDURS_GATE_3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/minsc + name = "Minsc" + value = "en_Minsc" + category = TTS_CATEGORY_BALDURS_GATE_3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/astarion + name = "Astarion" + value = "en_Astarion" + category = TTS_CATEGORY_BALDURS_GATE_3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/halsin + name = "Halsin" + value = "en_Halsin" + category = TTS_CATEGORY_BALDURS_GATE_3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/emperor_bg3 + name = "Mind_Flayer_Emperor" + value = "en_Emperor" + category = TTS_CATEGORY_BALDURS_GATE_3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/ketheric + name = "Ketheric" + value = "en_Ketheric" + category = TTS_CATEGORY_BALDURS_GATE_3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/gortash + name = "Gortash" + value = "en_Gortash" + category = TTS_CATEGORY_BALDURS_GATE_3 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/cave_johnson + name = "Cave_Johnson" + value = "portal_cave_johnson" + category = TTS_CATEGORY_PORTAL + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/shredder + name = "Shredder" + value = "Ninja_Turtles_shredder" + category = TTS_CATEGORY_TMNT + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/han_solo + name = "Han_Solo" + value = "Star_Wars_Han_Solo" + category = TTS_CATEGORY_STAR_WARS + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/darth_sidious + name = "Darth_Sidious" + value = "Star_Wars_Darth_Sidious" + category = TTS_CATEGORY_STAR_WARS + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/luke_skywalker + name = "Luke_Skywalker" + value = "Star_Wars_Luke_Skywalker" + category = TTS_CATEGORY_STAR_WARS + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/yoda + name = "Yoda" + value = "Star_Wars_Yoda" + category = TTS_CATEGORY_STAR_WARS + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/darth_vader + name = "Darth_Vader" + value = "Star_Wars_Darth_Vader" + category = TTS_CATEGORY_STAR_WARS + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/obiwan_kenobi + name = "Obi-wan_Kenobi" + value = "Star_Wars_Obi-Wan_Kenobi" + category = TTS_CATEGORY_STAR_WARS + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/anakin_skywalker + name = "Anakin_Skywalker" + value = "Star_Wars_Anakin_Skywalker" + category = TTS_CATEGORY_STAR_WARS + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/optimus_prime + name = "Optimus_Prime" + value = "Transformers_War_of_Cybertron_optimusprime" + category = TTS_CATEGORY_TRANSFORMERS + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/megatron + name = "Megatron" + value = "Transformers_War_of_Cybertron_megatron" + category = TTS_CATEGORY_TRANSFORMERS + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/soundwave + name = "Soundwave" + value = "Transformers_War_of_Cybertron_soundwave" + category = TTS_CATEGORY_TRANSFORMERS + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/aragorn + name = "Aragorn" + value = "The_Lord_of_the_Rings_Aragorn" + category = TTS_CATEGORY_LOTR + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/elrond + name = "Elrond" + value = "The_Lord_of_the_Rings_Elrond" + category = TTS_CATEGORY_LOTR + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/gandalf + name = "Gandalf" + value = "The_Lord_of_the_Rings_Gandalf" + category = TTS_CATEGORY_LOTR + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/gimli + name = "Gimli" + value = "The_Lord_of_the_Rings_Gimli" + category = TTS_CATEGORY_LOTR + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/gollum + name = "Gollum" + value = "The_Lord_of_the_Rings_Gollum" + category = TTS_CATEGORY_LOTR + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/legolas + name = "Legolas" + value = "The_Lord_of_the_Rings_Legolas" + category = TTS_CATEGORY_LOTR + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/gingerbread_man + name = "Gingerbread_Man" + value = "Srek_Gingerbread_Man" + category = TTS_CATEGORY_SHREK + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/fiona + name = "Fiona" + value = "Srek_Fiona" + category = TTS_CATEGORY_SHREK + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/donkey + name = "Donkey" + value = "Srek_Donkey" + category = TTS_CATEGORY_SHREK + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/fairy_godmother + name = "Fairy_Godmother" + value = "Srek_Fairy_Godmother" + category = TTS_CATEGORY_SHREK + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/srek_king + name = "King" + value = "Srek_King" + category = TTS_CATEGORY_SHREK + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/srek_narrator + name = "Shrek_Narrator" + value = "Srek_Narrator" + category = TTS_CATEGORY_SHREK + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/puss_in_boots + name = "Puss_in_Boots" + value = "Srek_Puss_in_Boots" + category = TTS_CATEGORY_SHREK + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/shrek + name = "Shrek" + value = "Srek_Shrek" + category = TTS_CATEGORY_SHREK + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/jack_sparrow + name = "Jack_Sparrow" + value = "Pirats_of_the_caribbean_Jack_Sparrow" + category = TTS_CATEGORY_POTC + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/barbossa + name = "Barbossa" + value = "Pirats_of_the_caribbean_Barbossa" + category = TTS_CATEGORY_POTC + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/tiadalma + name = "Tiadalma" + value = "Pirats_of_the_caribbean_Tiadalma" + category = TTS_CATEGORY_POTC + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/davy_jones + name = "Davy_Jones" + value = "Pirats_of_the_caribbean_Davy_Jones" + category = TTS_CATEGORY_POTC + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/sirius_black + name = "Sirius_Black" + value = "Harry_Potter_Sirius_Black" + category = TTS_CATEGORY_HARRY_POTTER + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/dobby + name = "Dobby" + value = "Harry_Potter_Dobby" + category = TTS_CATEGORY_HARRY_POTTER + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/severus_snape_film + name = "Severus_snape_film" + value = "Harry_Potter_Severus_Snape_film" + category = TTS_CATEGORY_HARRY_POTTER + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/harry_potter + name = "Harry_Potter" + value = "Harry_Potter_Harry_Potter" + category = TTS_CATEGORY_HARRY_POTTER + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/dumbledore + name = "Albus_Dumbledore" + value = "Harry_Potter_Albus_Dumbledore" + category = TTS_CATEGORY_HARRY_POTTER + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/voldemort + name = "Voldemort" + value = "Harry_Potter_Lord_Voldemort" + category = TTS_CATEGORY_HARRY_POTTER + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/severus_snape + name = "Severus_Snape" + value = "Harry_Potter_Severus_Snape" + category = TTS_CATEGORY_HARRY_POTTER + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/flitwick + name = "Filius_Flitwick" + value = "Harry_Potter_Filius_Flitwick" + category = TTS_CATEGORY_HARRY_POTTER + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/minerva_mcgonagall + name = "Minnerva_McGonagall" + value = "Harry_Potter_Minerva_McGonagall" + category = TTS_CATEGORY_HARRY_POTTER + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/horace_slughorn + name = "Horace_Slughorn" + value = "Harry_Potter_Horace_Slughorn" + category = TTS_CATEGORY_HARRY_POTTER + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/cedric + name = "Cedric" + value = "Harry_Potter_Cedric" + category = TTS_CATEGORY_HARRY_POTTER + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/alastor + name = "Alastor_Mad-eye_Moody" + value = "Harry_Potter_Alastor_Mad-Eye_Moody" + category = TTS_CATEGORY_HARRY_POTTER + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/x3_betty + name = "Betty" + value = "X3_reunion_Betty" + category = TTS_CATEGORY_X3 + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/overlord_gnarl + name = "Gnarl" + value = "Overlord_2_Gnarl" + category = TTS_CATEGORY_OVERLORD2 + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/tony_stark + name = "Tony_Stark" + value = "Marvel_Tony_Stark" + category = TTS_CATEGORY_MARVEL + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/sabellian + name = "Sabellian" + value = "Dragons_Sabellian" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/ysera + name = "Ysera" + value = "Dragons_Ysera" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/malygos_wotlk + name = "Malygos_wotlk" + value = "Dragons_MalygosWrath_of_the_Lich_King" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/ebyssian + name = "Ebyssian" + value = "Dragons_Ebyssian" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/deathwing + name = "Deathwing" + value = "Dragons_Deathwing" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/nozdormu + name = "Nozdormu" + value = "Dragons_Nozdormu" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/malygos + name = "Malygos" + value = "Dragons_Malygos" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/calderax + name = "Calderax" + value = "Draconids_Calderax" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/bazentus + name = "Bazentus" + value = "Draconids_Bazentus" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/kazra + name = "Kazra" + value = "Draconids_Kazra" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/seltherex + name = "Seltherex" + value = "Draconids_Seltherex" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/sendrax + name = "Sendrax" + value = "Draconids_Sendrax" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/evantkis + name = "Evantkis" + value = "Draconids_Evantkis" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/drine + name = "Drine" + value = "Draconids_Drine" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/lethanak + name = "Lethanak" + value = "Draconids_Lethanak" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/wrathion_echo + name = "Wrathion_echo" + value = "Dragons2_Wrathion_echo" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/alexstraza + name = "Alexstraza" + value = "Dragons2_Alexstraza" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/kalecgos + name = "Kalecgos" + value = "Dragons2_Kalecgos" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/wrathion + name = "Wrathion" + value = "Dragons2_Wrathion" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/kalechos_echo + name = "Kalecgos_echo" + value = "Dragons2_Kalecgos_echo" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/alextraza_echo + name = "Alextraza_echo" + value = "Dragons2_Alextraza_echo" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/neltharion_echo + name = "Neltharion_echo" + value = "Dragons2_Neltharion_echo" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/wrathion_deathwing + name = "Wration_Deathwing" + value = "Dragons2_Wrathion_Deathwing" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/neltharion + name = "Neltharion" + value = "Dragons2_Neltharion" + category = TTS_CATEGORY_WOW + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/livsy + name = "Livsy" + value = "Treasure_Island_Livsy" + category = TTS_CATEGORY_TREASURE_ISLAND + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/sp_brother + name = "sp_brother" + value = "slovo_patsana_brother" + category = TTS_CATEGORY_BOYS_WORD + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/sp_koschei + name = "sp_koschei" + value = "slovo_patsana_koschei" + category = TTS_CATEGORY_BOYS_WORD + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/sp_marat + name = "sp_marat" + value = "slovo_patsana_marat" + category = TTS_CATEGORY_BOYS_WORD + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/sp_angry_cop + name = "sp_angry_cop" + value = "slovo_patsana_angry_cop" + category = TTS_CATEGORY_BOYS_WORD + gender = TTS_GENDER_MALE + +/datum/tts_seed/silero/sp_cop + name = "sp_cop" + value = "slovo_patsana_cop" + category = TTS_CATEGORY_BOYS_WORD + gender = TTS_GENDER_FEMALE + +/datum/tts_seed/silero/sp_main + name = "sp_main" + value = "slovo_patsana_main" + category = TTS_CATEGORY_BOYS_WORD + gender = TTS_GENDER_MALE diff --git a/mods/~_ss220/text2speech/code/shell.dm b/mods/~_ss220/text2speech/code/shell.dm new file mode 100644 index 0000000000000..3268d5ddf613e --- /dev/null +++ b/mods/~_ss220/text2speech/code/shell.dm @@ -0,0 +1,116 @@ +#define SHELLEO_ERRORLEVEL 1 +#define SHELLEO_STDOUT 2 +#define SHELLEO_STDERR 3 + +#define SHELLEO_NAME "data/shelleo." +#define SHELLEO_ERR ".err" +#define SHELLEO_OUT ".out" + +/world/proc/shelleo(command) + var/static/list/shelleo_ids = list() + var/stdout = "" + var/stderr = "" + var/errorcode = 1 + var/shelleo_id + var/out_file = "" + var/err_file = "" + var/static/list/interpreters = list("[MS_WINDOWS]" = "cmd /c", "[UNIX]" = "sh -c") + var/interpreter = interpreters["[world.system_type]"] + if(!interpreter) + CRASH("Operating System: [world.system_type] not supported") // If you encounter this error, you are encouraged to update this proc with support for the new operating system + + for(var/seo_id in shelleo_ids) + if(!shelleo_ids[seo_id]) + shelleo_ids[seo_id] = TRUE + shelleo_id = "[seo_id]" + break + if(!shelleo_id) + shelleo_id = "[length(shelleo_ids) + 1]" + shelleo_ids += shelleo_id + shelleo_ids[shelleo_id] = TRUE + out_file = "[SHELLEO_NAME][shelleo_id][SHELLEO_OUT]" + err_file = "[SHELLEO_NAME][shelleo_id][SHELLEO_ERR]" + if(world.system_type == UNIX) + errorcode = shell("[interpreter] \"[replacetext(command, "\"", "\\\"")]\" > [out_file] 2> [err_file]") + else + errorcode = shell("[interpreter] \"[command]\" > [out_file] 2> [err_file]") + if(fexists(out_file)) + stdout = file2text(out_file) + fdel(out_file) + if(fexists(err_file)) + stderr = file2text(err_file) + fdel(err_file) + shelleo_ids[shelleo_id] = FALSE + + return list(errorcode, stdout, stderr) + +/proc/shell_url_scrub(url) + var/static/regex/bad_chars_regex = regex("\[^#%&./:=?\\w]*", "g") + var/scrubbed_url = "" + var/bad_match = "" + var/last_good = 1 + var/bad_chars = 1 + do + bad_chars = bad_chars_regex.Find(url) + scrubbed_url += copytext(url, last_good, bad_chars) + if(bad_chars) + bad_match = url_encode(bad_chars_regex.match) + scrubbed_url += bad_match + last_good = bad_chars + length(bad_chars_regex.match) + while(bad_chars) + . = scrubbed_url + + + +/proc/apply_sound_effect(singleton/sound_effect/effect, filename_input, filename_output) + if(!effect) + CRASH("Invalid sound effect chosen.") + + var/taskset + if(config.ffmpeg_cpuaffinity) + taskset = "taskset -ac [config.ffmpeg_cpuaffinity]" + + var/command = {"[taskset] ffmpeg -y -hide_banner -loglevel error -i [filename_input] -filter:a "[effect.ffmpeg_arguments]" [filename_output]"} + var/list/output = world.shelleo(command) + + var/errorlevel = output[SHELLEO_ERRORLEVEL] + var/stdout = output[SHELLEO_STDOUT] + var/stderr = output[SHELLEO_STDERR] + if(errorlevel) + error("Error: apply_sound_effect([effect.suffix], [filename_input], [filename_output]) - See debug logs.") + log_debug("apply_sound_effect([effect.suffix], [filename_input], [filename_output]) STDOUT: [stdout]") + log_debug("apply_sound_effect([effect.suffix], [filename_input], [filename_output]) STDERR: [stderr]") + return FALSE + return TRUE + +/singleton/sound_effect + var/suffix + var/ffmpeg_arguments + +/singleton/sound_effect/radio + suffix = "_radio" + ffmpeg_arguments = "highpass=f=1000, lowpass=f=3000, acrusher=1:1:50:0:log" + +/singleton/sound_effect/robot + suffix = "_robot" + ffmpeg_arguments = "afftfilt=real='hypot(re,im)*sin(0)':imag='hypot(re,im)*cos(0)':win_size=1024:overlap=0.5, deesser=i=0.4, volume=volume=1.5" + +/singleton/sound_effect/radio_robot + suffix = "_radio_robot" + ffmpeg_arguments = "afftfilt=real='hypot(re,im)*sin(0)':imag='hypot(re,im)*cos(0)':win_size=1024:overlap=0.5, deesser=i=0.4, volume=volume=1.5, highpass=f=1000, lowpass=f=3000, acrusher=1:1:50:0:log" + +/singleton/sound_effect/megaphone + suffix = "_megaphone" + ffmpeg_arguments = "highpass=f=500, lowpass=f=4000, volume=volume=10, acrusher=1:1:45:0:log" + +/singleton/sound_effect/megaphone_robot + suffix = "_megaphone_robot" + ffmpeg_arguments = "afftfilt=real='hypot(re,im)*sin(0)':imag='hypot(re,im)*cos(0)':win_size=1024:overlap=0.5, deesser=i=0.4, highpass=f=500, lowpass=f=4000, volume=volume=10, acrusher=1:1:45:0:log" + +#undef SHELLEO_ERRORLEVEL +#undef SHELLEO_STDOUT +#undef SHELLEO_STDERR + +#undef SHELLEO_NAME +#undef SHELLEO_ERR +#undef SHELLEO_OUT diff --git a/mods/~_ss220/text2speech/code/sound/radio_chatter.ogg b/mods/~_ss220/text2speech/code/sound/radio_chatter.ogg new file mode 100644 index 0000000000000..6e5b3ecfbfe24 Binary files /dev/null and b/mods/~_ss220/text2speech/code/sound/radio_chatter.ogg differ diff --git a/mods/~_ss220/text2speech/code/tts_component.dm b/mods/~_ss220/text2speech/code/tts_component.dm new file mode 100644 index 0000000000000..b6940fc512898 --- /dev/null +++ b/mods/~_ss220/text2speech/code/tts_component.dm @@ -0,0 +1,157 @@ +/datum/component/tts_component + var/datum/tts_seed/tts_seed + var/list/traits = list() + +/datum/component/tts_component/RegisterWithParent() + RegisterSignal(parent, COMSIG_ATOM_TTS_SEED_CHANGE, PROC_REF(tts_seed_change)) + RegisterSignal(parent, COMSIG_ATOM_TTS_CAST, PROC_REF(cast_tts)) + RegisterSignal(parent, COMSIG_ATOM_TTS_TRAIT_ADD, PROC_REF(tts_trait_add)) + RegisterSignal(parent, COMSIG_ATOM_TTS_TRAIT_REMOVE, PROC_REF(tts_trait_remove)) + +/datum/component/tts_component/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_ATOM_TTS_SEED_CHANGE) + UnregisterSignal(parent, COMSIG_ATOM_TTS_CAST) + UnregisterSignal(parent, COMSIG_ATOM_TTS_TRAIT_ADD) + UnregisterSignal(parent, COMSIG_ATOM_TTS_TRAIT_REMOVE) + +/datum/component/tts_component/Initialize(datum/tts_seed/new_tts_seed, ...) + if(!isatom(parent)) + return COMPONENT_INCOMPATIBLE + if(ispath(new_tts_seed) && SStts220.tts_seeds[initial(new_tts_seed.name)]) + new_tts_seed = SStts220.tts_seeds[initial(new_tts_seed.name)] + if(istype(new_tts_seed)) + tts_seed = new_tts_seed + if(!tts_seed) + tts_seed = get_random_tts_seed_by_gender() + if(!tts_seed) // Something went terribly wrong + return COMPONENT_INCOMPATIBLE + if(length(args) > 1) + for(var/trait in 2 to length(args)) + traits += args[trait] + if(ishuman(parent)) + var/mob/living/carbon/human/owner = parent + traits += owner.species.tts_trait + +/datum/component/tts_component/proc/return_tts_seed() + SIGNAL_HANDLER + return tts_seed + +/datum/component/tts_component/proc/select_tts_seed(mob/chooser, silent_target = FALSE, override = FALSE, list/new_traits = null) + if(!chooser) + if(ismob(parent)) + chooser = parent + else + return null + + var/atom/being_changed = parent + var/static/tts_test_str = "Так звучит мой голос." + var/datum/tts_seed/new_tts_seed + + if(chooser == being_changed) + var/datum/preferences/prefs = chooser.client.prefs + if(being_changed.gender == prefs.gender) + if(alert(chooser, "Оставляем голос вашего персонажа [prefs.real_name] - [prefs.tts_seed]?", "Выбор голоса", "Нет", "Да") == "Да") + if(!SStts220.tts_seeds[prefs.tts_seed]) + to_chat(chooser, SPAN_WARNING("Отсутствует tts_seed для значения \"[prefs.tts_seed]\". Текущий голос - [tts_seed.name]")) + return null + new_tts_seed = SStts220.tts_seeds[prefs.tts_seed] + if(new_traits) + traits = new_traits + invoke_async(SStts220, TYPE_PROC_REF(/datum/controller/subsystem/tts220, get_tts), null, chooser, tts_test_str, new_tts_seed, FALSE, get_effect()) + return new_tts_seed + + var/tts_seeds + var/list/tts_seeds_by_gender = SStts220.get_tts_by_gender(being_changed.gender) + if(!length(tts_seeds_by_gender)) + to_chat(chooser, SPAN_WARNING("Не удалось найти пол для голоса! Текущий голос - [tts_seed.name]")) + return null + if(check_rights(R_ADMIN, FALSE, chooser) || override || !ismob(being_changed)) + tts_seeds = tts_seeds_by_gender + else + tts_seeds = tts_seeds_by_gender && SStts220.get_available_seeds(being_changed) // && for lists means intersection + + var/new_tts_seed_key + new_tts_seed_key = tgui_input_list(chooser, "Выберите голос персонажа", "Преобразуем голос", tts_seeds, tts_seed.name) + if(!new_tts_seed_key || !SStts220.tts_seeds[new_tts_seed_key]) + to_chat(chooser, SPAN_WARNING("Что-то пошло не так с выбором голоса. Текущий голос - [tts_seed.name]")) + return null + + new_tts_seed = SStts220.tts_seeds[new_tts_seed_key] + if(new_traits) + traits = new_traits + + if(!silent_target && being_changed != chooser && ismob(being_changed)) + invoke_async(SStts220, TYPE_PROC_REF(/datum/controller/subsystem/tts220, get_tts), null, being_changed, tts_test_str, new_tts_seed, FALSE, get_effect()) + + if(chooser) + invoke_async(SStts220, TYPE_PROC_REF(/datum/controller/subsystem/tts220, get_tts), null, chooser, tts_test_str, new_tts_seed, FALSE, get_effect()) + + return new_tts_seed + +/datum/component/tts_component/proc/tts_seed_change(atom/being_changed, mob/chooser, override = FALSE, list/new_traits = null) + set waitfor = FALSE + var/datum/tts_seed/new_tts_seed = select_tts_seed(chooser = chooser, override = override, new_traits = new_traits) + if(!new_tts_seed) + return null + tts_seed = new_tts_seed + +/datum/component/tts_component/proc/get_random_tts_seed_by_gender() + var/atom/being_changed = parent + var/tts_choice = SStts220.pick_tts_seed_by_gender(being_changed.gender) + var/datum/tts_seed/seed = SStts220.tts_seeds[tts_choice] + if(!seed) + return null + return seed + +/datum/component/tts_component/proc/get_effect(effect) + . = effect + switch(.) + if(null) + if(TTS_TRAIT_ROBOTIZE in traits) + return /singleton/sound_effect/robot + if(/singleton/sound_effect/radio) + if(TTS_TRAIT_ROBOTIZE in traits) + return /singleton/sound_effect/radio_robot + if(/singleton/sound_effect/megaphone) + if(TTS_TRAIT_ROBOTIZE in traits) + return /singleton/sound_effect/megaphone_robot + return . + +/datum/component/tts_component/proc/cast_tts(atom/speaker, mob/listener, message, atom/location, is_local = TRUE, effect = null, traits = TTS_TRAIT_RATE_FASTER, preSFX, postSFX) + SIGNAL_HANDLER + + if(!message) + return + if(!(listener?.client) || listener.is_deaf()) + return + if(!speaker) + speaker = parent + if(!location) + location = parent + if(effect == /singleton/sound_effect/radio) + if(listener == speaker && !issilicon(parent)) // don't hear both radio and whisper from yourself + return + + effect = get_effect(effect) + + invoke_async(SStts220, TYPE_PROC_REF(/datum/controller/subsystem/tts220, get_tts), location, listener, message, tts_seed, is_local, effect, traits, preSFX, postSFX) + +/datum/component/tts_component/proc/tts_trait_add(atom/user, trait) + SIGNAL_HANDLER + + if(!isnull(trait) && !(trait in traits)) + traits += trait + +/datum/component/tts_component/proc/tts_trait_remove(atom/user, trait) + SIGNAL_HANDLER + + if(!isnull(trait) && (trait in traits)) + traits -= trait + +// Component usage + +/mob/living/silicon/verb/synth_change_voice() + set name = "Смена голоса" + set desc = "Express yourself!" + set category = "Silicon Commands" + change_tts_seed(src, new_traits = list(TTS_TRAIT_ROBOTIZE)) diff --git a/mods/~_ss220/text2speech/code/tts_preferences.dm b/mods/~_ss220/text2speech/code/tts_preferences.dm new file mode 100644 index 0000000000000..6f32196f7d39c --- /dev/null +++ b/mods/~_ss220/text2speech/code/tts_preferences.dm @@ -0,0 +1,106 @@ +/datum/client_preference/tts_enabled + default_value = GLOB.PREF_YES + description = "Toggle TTS" + key = "TTS_ENABLED" + +/datum/preferences/proc/set_random_gendered_tts_seed() + var/random_tts_seed = SStts220.pick_tts_seed_by_gender(gender) + if(random_tts_seed) + tts_seed = random_tts_seed + +/datum/tgui_module/tts_seeds_explorer + name = "Эксплорер TTS голосов" + var/phrases = TTS_PHRASES + +/datum/tgui_module/tts_seeds_explorer/tgui_state(mob/user) + return GLOB.tgui_always_state + +/datum/tgui_module/tts_seeds_explorer/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "TTSSeedsExplorer", name) + ui.set_autoupdate(FALSE) + ui.open() + +/datum/tgui_module/tts_seeds_explorer/tgui_data(mob/user) + var/list/data = list() + data["selected_seed"] = user.client.prefs.tts_seed + data["donator_level"] = 5 + data["character_gender"] = user.client.prefs.gender + + return data + +/datum/tgui_module/tts_seeds_explorer/tgui_static_data(mob/user) + var/list/data = list() + + var/list/providers = list() + for(var/_provider in SStts220.tts_providers) + var/datum/tts_provider/provider = SStts220.tts_providers[_provider] + providers += list(list( + "name" = provider.name, + "is_enabled" = provider.is_enabled, + )) + data["providers"] = providers + + var/list/seeds = list() + for(var/_seed in SStts220.tts_seeds) + var/datum/tts_seed/seed = SStts220.tts_seeds[_seed] + seeds += list(list( + "name" = seed.name, + "value" = seed.value, + "category" = seed.category, + "gender" = seed.gender, + "provider" = initial(seed.provider.name), + "required_donator_level" = seed.required_donator_level, + )) + data["seeds"] = seeds + data["phrases"] = phrases + + return data + +/datum/tgui_module/tts_seeds_explorer/tgui_act(action, list/params) + if(..()) + return + . = TRUE + + switch(action) + if("listen") + var/phrase = params["phrase"] + var/seed_name = params["seed"] + + if(!(phrase in phrases)) + return + if(!(seed_name in SStts220.tts_seeds)) + return + invoke_async(SStts220, TYPE_PROC_REF(/datum/controller/subsystem/tts220, get_tts), null, usr, phrase, SStts220.tts_seeds[seed_name], FALSE) + if("select") + var/seed_name = params["seed"] + + if(!(seed_name in SStts220.tts_seeds)) + return + //var/datum/tts_seed/seed = SStts220.tts_seeds[seed_name] + //if(usr.client.donator_level < seed.required_donator_level) + // return + + usr.client.prefs.tts_seed = seed_name + else + return FALSE + +/mob/new_player/Topic(href, href_list) + if(config.tts_enabled && (href_list["lobby_ready"] || href_list["late_join"])) + if(!usr.client.prefs.tts_seed) + usr.client.prefs.set_random_gendered_tts_seed() + to_chat(usr, SPAN_WARNING("У вас не выбран голос. Мы вам зарандомили его, так что не жалуйтесь потом.")) + . = ..() + + +/mob/new_player/Topic(href, href_list) + if(config.tts_enabled && (href_list["lobby_ready"] || href_list["late_join"])) + if(!usr.client.prefs.tts_seed) + usr.client.prefs.set_random_gendered_tts_seed() + to_chat(usr, SPAN_WARNING("У вас не выбран голос. Мы вам зарандомили его, так что не жалуйтесь потом.")) + . = ..() + +/datum/preferences/CanUseTopic(mob/user, datum/topic_state/state) + . = ..() + return STATUS_INTERACTIVE diff --git a/mods/~_ss220/text2speech/code/tts_provider.dm b/mods/~_ss220/text2speech/code/tts_provider.dm new file mode 100644 index 0000000000000..65d2e484fdbc3 --- /dev/null +++ b/mods/~_ss220/text2speech/code/tts_provider.dm @@ -0,0 +1,32 @@ +/datum/tts_provider + var/name = "STUB" + var/is_enabled = TRUE + var/api_url + + var/is_throttled = FALSE + var/throttled_until = 0 + + var/timed_out_requests = 0 + var/failed_requests = 0 + var/failed_requests_limit = 10 + +/datum/tts_provider/proc/request(text, datum/tts_seed/seed, datum/callback/proc_callback) + return TRUE + +/datum/tts_provider/proc/process_response(list/response) + return null + +/datum/tts_provider/proc/throttle_check() + if(is_throttled && throttled_until < world.time) + return TRUE + is_throttled = FALSE + return FALSE + +/datum/tts_provider/proc/pitch_whisper(text) + return text + +/datum/tts_provider/proc/rate_faster(text) + return text + +/datum/tts_provider/proc/rate_medium(text) + return text diff --git a/mods/~_ss220/text2speech/code/tts_seed.dm b/mods/~_ss220/text2speech/code/tts_seed.dm new file mode 100644 index 0000000000000..46c79fbae8427 --- /dev/null +++ b/mods/~_ss220/text2speech/code/tts_seed.dm @@ -0,0 +1,37 @@ +/datum/dna + var/datum/tts_seed/tts_seed_dna + +/datum/dna/Clone() + . = ..() + var/datum/dna/new_dna = . + new_dna.tts_seed_dna = tts_seed_dna + return new_dna + +/atom/proc/add_tts_component() + return + +/atom/Initialize(mapload, ...) + . = ..() + add_tts_component() + +/atom/proc/cast_tts(mob/listener, message, atom/location, is_local = TRUE, effect = null, traits = TTS_TRAIT_RATE_FASTER, preSFX, postSFX) + SEND_SIGNAL(src, COMSIG_ATOM_TTS_CAST, listener, message, location, is_local, effect, traits, preSFX, postSFX) + +// TODO: Do it better? +/atom/proc/get_tts_seed() + var/datum/component/tts_component/tts_component = GetComponent(/datum/component/tts_component) + if(tts_component) + return tts_component.tts_seed + +/atom/proc/change_tts_seed(mob/chooser, override, list/new_traits = null) + if(!get_tts_seed()) + if(alert(chooser, "Отсутствует TTS компонент. Создать?", "Изменение TTS", "Да", "Нет") == "Нет") + return + AddComponent(/datum/component/tts_component, /datum/tts_seed/silero/angel) + SEND_SIGNAL(src, COMSIG_ATOM_TTS_SEED_CHANGE, chooser, override, new_traits) + +/atom/proc/tts_trait_add(trait) + SEND_SIGNAL(src, COMSIG_ATOM_TTS_TRAIT_ADD, trait) + +/atom/proc/tts_trait_remove(trait) + SEND_SIGNAL(src, COMSIG_ATOM_TTS_TRAIT_REMOVE, trait) diff --git a/mods/~_ss220/text2speech/code/tts_subsystem.dm b/mods/~_ss220/text2speech/code/tts_subsystem.dm new file mode 100644 index 0000000000000..cf4c3b821bec0 --- /dev/null +++ b/mods/~_ss220/text2speech/code/tts_subsystem.dm @@ -0,0 +1,491 @@ +#define TTS_REPLACEMENTS_FILE_PATH "config/tts_replacements.json" +#define TTS_ACRONYM_REPLACEMENTS "tts_acronym_replacements" +#define TTS_JOB_REPLACEMENTS "tts_job_replacements" + +#define FILE_CLEANUP_DELAY 30 SECONDS + +SUBSYSTEM_DEF(tts220) + name = "Text-to-Speech 220" + init_order = SS_INIT_DEFAULT + wait = 0.5 SECONDS + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT + + /// All time tts uses + VAR_PRIVATE/tts_wanted = 0 + /// Amount of errored requests to providers + VAR_PRIVATE/tts_request_failed = 0 + /// Amount of successfull requests to providers + VAR_PRIVATE/tts_request_succeeded = 0 + /// Amount of cache hits + VAR_PRIVATE/tts_reused = 0 + /// Assoc list of request error codes + VAR_PRIVATE/list/tts_errors = list() + /// Last errored requests' contents + VAR_PRIVATE/tts_error_raw = "" + + // Simple Moving Average RPS + VAR_PRIVATE/list/tts_rps_list = list() + VAR_PRIVATE/tts_sma_rps = 0 + + /// Requests per Second (RPS), only real API requests + VAR_PRIVATE/tts_rps = 0 + VAR_PRIVATE/tts_rps_counter = 0 + + /// Total Requests per Second (TRPS), all TTS request, even reused + VAR_PRIVATE/tts_trps = 0 + VAR_PRIVATE/tts_trps_counter = 0 + + /// Reused Requests per Second (RRPS), only reused requests + VAR_PRIVATE/tts_rrps = 0 + VAR_PRIVATE/tts_rrps_counter = 0 + + VAR_PRIVATE/is_enabled = TRUE + /// List of all available TTS seeds + var/list/datum/tts_seed/tts_seeds = list() + /// List of all available TTS providers + var/list/datum/tts_provider/tts_providers = list() + + VAR_PRIVATE/tts_requests_queue_limit = 100 + VAR_PRIVATE/tts_rps_limit = 11 + VAR_PRIVATE/last_network_fire = 0 + + /// General request queue + VAR_PRIVATE/list/tts_queue = list() + /// Ffmpeg queue. Is an assoc list. Each entry is a filename mapped to the list of sound processing requests which require it. + VAR_PRIVATE/list/tts_effects_queue = list() + /// Lazy list of request that need to performed to TTS provider API + VAR_PRIVATE/list/tts_requests_queue + + /// The channel used for radio tts. Should be an exact one to not spam with radio messages, but queque them instead + VAR_PRIVATE/tts_channel_radio + /// List of currently existing binding of atom and sound channel: `atom` => `sound_channel`. SS220 TODO: free channel when atom is detroyed and may be on some other circumstances + VAR_PRIVATE/list/tts_local_channels_by_owner = list() + + /// Mapping of BYOND gender to TTS gender + VAR_PRIVATE/list/gender_table = list( + NEUTER = TTS_GENDER_ANY, + PLURAL = TTS_GENDER_ANY, + MALE = TTS_GENDER_MALE, + FEMALE = TTS_GENDER_FEMALE + ) + /// Is debug mode enabled or not. Information about `sanitized_messages_cache_hit` and `sanitized_messages_cache_miss` is printed to debug logs each SS fire + VAR_PRIVATE/debug_mode_enabled = FALSE + /// Whether or not caching of sanitized messages is performed + VAR_PRIVATE/sanitized_messages_caching = TRUE + /// Amount of message duplicates that were sanitized current SS fire. Debug purpose only + VAR_PRIVATE/sanitized_messages_cache_hit = 0 + /// Amount of unique messages that were sanitized current SS fire. Debug purpose only + VAR_PRIVATE/sanitized_messages_cache_miss = 0 + /// List of all messages that were sanitized as: `meesage md5 hash` => `message` + VAR_PRIVATE/list/sanitized_messages_cache = list() + + /// List of all available TTS seed names + VAR_PRIVATE/list/tts_seeds_names = list() + /// List of all available TTS seed names, mapped by donator level for faster access + VAR_PRIVATE/list/tts_seeds_names_by_donator_levels = list() + + /// List of all tts seeds mapped by TTS gender: `tts gender` => `list of seeds` + VAR_PRIVATE/list/tts_seeds_by_gender + /// Replacement map for acronyms for proper TTS spelling. Not private because `replacetext` can use only global procs + var/list/tts_acronym_replacements + /// Replacement map for jobs for proper TTS spelling + VAR_PRIVATE/list/tts_job_replacements + +/datum/controller/subsystem/tts220/PreInit() + . = ..() + for(var/path in subtypesof(/datum/tts_provider)) + var/datum/tts_provider/provider = new path + tts_providers[provider.name] += provider + + for(var/path in subtypesof(/datum/tts_seed)) + var/datum/tts_seed/seed = new path + if(seed.value == "STUB") + continue + seed.provider = tts_providers[initial(seed.provider.name)] + tts_seeds[seed.name] = seed + tts_seeds_names += seed.name + tts_seeds_names_by_donator_levels["[seed.required_donator_level]"] += list(seed.name) + LAZYADDASSOCLIST(tts_seeds_by_gender, seed.gender, seed.name) + tts_seeds_names = sortTim(tts_seeds_names, GLOBAL_PROC_REF(cmp_text_asc)) + +/datum/controller/subsystem/tts220/Initialize(start_timeofday) + if(!config.tts_enabled) + is_enabled = FALSE + return + + load_replacements() + tts_channel_radio = GLOB.sound_channels.RequestChannel("TTS_RADIO") + +/datum/controller/subsystem/tts220/disable() + . = ..() + is_enabled = FALSE + +/datum/controller/subsystem/tts220/fire() + if(last_network_fire + 1 SECOND <= world.time) + fire_networking() + fire_sound_processing() + +/datum/controller/subsystem/tts220/proc/fire_networking() + last_network_fire = world.time + + tts_rps = tts_rps_counter + tts_rps_counter = 0 + tts_trps = tts_trps_counter + tts_trps_counter = 0 + tts_rrps = tts_rrps_counter + tts_rrps_counter = 0 + + tts_rps_list += tts_rps + if(length(tts_rps_list) > 15) + tts_rps_list.Cut(1,2) + + var/rps_sum = 0 + for(var/rps in tts_rps_list) + rps_sum += rps + tts_sma_rps = round(rps_sum / length(tts_rps_list), 0.1) + + var/free_rps = clamp(tts_rps_limit - tts_rps, 0, tts_rps_limit) + var/requests = LAZYCOPY_RANGE(tts_requests_queue, 1, clamp(LAZYLEN(tts_requests_queue), 0, free_rps) + 1) + for(var/request in requests) + var/text = request[1] + var/datum/tts_seed/seed = request[2] + var/datum/callback/proc_callback = request[3] + var/datum/tts_provider/provider = seed.provider + provider.request(text, seed, proc_callback) + tts_rps_counter++ + LAZYCUT(tts_requests_queue, 1, clamp(LAZYLEN(tts_requests_queue), 0, free_rps) + 1) + + if(sanitized_messages_caching) + sanitized_messages_cache.Cut() + if(debug_mode_enabled) + log_debug("sanitized_messages_cache: HIT=[sanitized_messages_cache_hit] / MISS=[sanitized_messages_cache_miss]") + sanitized_messages_cache_hit = 0 + sanitized_messages_cache_miss = 0 + +/datum/controller/subsystem/tts220/proc/fire_sound_processing() + var/queue_position = 1 + while(LAZYLEN(tts_effects_queue) >= queue_position) + var/filename = tts_effects_queue[queue_position++] + invoke_async(src, PROC_REF(process_filename_sound_effect_requests), filename) + + if(MC_TICK_CHECK) + break + + LAZYCUT(tts_effects_queue, 1, queue_position) + +/datum/controller/subsystem/tts220/proc/process_filename_sound_effect_requests(filename) + var/list/filename_requests = tts_effects_queue[filename] + var/datum/sound_effect_request/request = filename_requests[1] + + if(!apply_sound_effect(request.effect, request.original_filename, request.output_filename)) + return + + for(var/datum/sound_effect_request/adjacent_request as anything in filename_requests) + invoke_async(adjacent_request.cb) + +/datum/controller/subsystem/tts220/Recover() + is_enabled = SStts220.is_enabled + tts_wanted = SStts220.tts_wanted + tts_request_failed = SStts220.tts_request_failed + tts_request_succeeded = SStts220.tts_request_succeeded + tts_reused = SStts220.tts_reused + tts_acronym_replacements = SStts220.tts_acronym_replacements + tts_job_replacements = SStts220.tts_job_replacements + +/datum/controller/subsystem/tts220/proc/load_replacements() + if(!fexists(TTS_REPLACEMENTS_FILE_PATH)) + log_debug("No file for TTS replacements located at: [TTS_REPLACEMENTS_FILE_PATH]. No replacements will be applied for TTS.") + return + + var/tts_replacements_json = file2text(TTS_REPLACEMENTS_FILE_PATH) + if(!length(tts_replacements_json)) + log_debug("TTS replacements file is empty at: [TTS_REPLACEMENTS_FILE_PATH].") + return + + var/list/replacements = json_decode(tts_replacements_json) + tts_acronym_replacements = replacements[TTS_ACRONYM_REPLACEMENTS] + tts_job_replacements = replacements[TTS_JOB_REPLACEMENTS] + +/datum/controller/subsystem/tts220/proc/queue_request(text, datum/tts_seed/seed, datum/callback/proc_callback) + if(LAZYLEN(tts_requests_queue) > tts_requests_queue_limit) + is_enabled = FALSE + to_chat(world, SPAN_INFO("SERVER: очередь запросов превысила лимит, подсистема SStts220 принудительно отключена!")) + return FALSE + + if(tts_rps_counter < tts_rps_limit) + var/datum/tts_provider/provider = seed.provider + provider.request(text, seed, proc_callback) + tts_rps_counter++ + return TRUE + + LAZYADD(tts_requests_queue, list(list(text, seed, proc_callback))) + return TRUE + +/datum/controller/subsystem/tts220/proc/get_tts(atom/speaker, mob/listener, message, datum/tts_seed/tts_seed, is_local = TRUE, singleton/sound_effect/effect = null, traits = TTS_TRAIT_RATE_FASTER, preSFX = null, postSFX = null) + if(!is_enabled) + return + if(!message) + return + if(isnull(listener) || !listener.client) + return + if(ispath(tts_seed) && SStts220.tts_seeds[initial(tts_seed.name)]) + tts_seed = SStts220.tts_seeds[initial(tts_seed.name)] + if(!istype(tts_seed)) + return + + tts_wanted++ + tts_trps_counter++ + + var/datum/tts_provider/provider = tts_seed.provider + if(!provider.is_enabled) + return + if(provider.throttle_check()) + return + + var/dirty_text = message + var/text = sanitize_tts_input(dirty_text) + + if(!text || length_char(text) > MAX_MESSAGE_LEN) + return + + if(traits & TTS_TRAIT_RATE_FASTER) + text = provider.rate_faster(text) + + if(traits & TTS_TRAIT_RATE_MEDIUM) + text = provider.rate_medium(text) + + if(traits & TTS_TRAIT_PITCH_WHISPER) + text = provider.pitch_whisper(text) + + var/hash = md5(lowertext(text)) + + var/filename = "data/tts_cache/[tts_seed.name]/[hash]" + var/singleton/sound_effect/effect_singleton = GET_SINGLETON(effect) + + if(fexists("[filename].ogg")) + tts_reused++ + tts_rrps_counter++ + play_tts(speaker, listener, filename, is_local, effect_singleton, preSFX, postSFX) + return + + var/datum/callback/play_tts_cb = CALLBACK(src, PROC_REF(play_tts), speaker, listener, filename, is_local, effect_singleton, preSFX, postSFX) + + if(LAZYLEN(tts_queue[filename])) + tts_reused++ + tts_rrps_counter++ + LAZYADD(tts_queue[filename], play_tts_cb) + return + + queue_request(text, tts_seed, CALLBACK(src, PROC_REF(get_tts_callback), speaker, listener, filename, tts_seed, is_local, effect_singleton, preSFX, postSFX)) + + LAZYADD(tts_queue[filename], play_tts_cb) + +/datum/controller/subsystem/tts220/proc/get_tts_callback(atom/speaker, mob/listener, filename, datum/tts_seed/seed, is_local, effect, preSFX, postSFX, datum/http_response/response) + var/datum/tts_provider/provider = seed.provider + + // Bail if it errored + if(response.errored) + provider.timed_out_requests++ + log_game(SPAN_WARNING("Error connecting to [provider.name] TTS API. Please inform a maintainer or server host.")) + message_admins(SPAN_WARNING("Error connecting to [provider.name] TTS API. Please inform a maintainer or server host.")) + return + + if(response.status_code != 200) + provider.failed_requests++ + log_game(SPAN_WARNING("Error performing [provider.name] TTS API request (Code: [response.status_code])")) + message_admins(SPAN_WARNING("Error performing [provider.name] TTS API request (Code: [response.status_code])")) + tts_request_failed++ + if(response.status_code) + if(tts_errors["[response.status_code]"]) + tts_errors["[response.status_code]"]++ + else + tts_errors += "[response.status_code]" + tts_errors["[response.status_code]"] = 1 + tts_error_raw = response.error + return + + tts_request_succeeded++ + + var/voice = provider.process_response(response) + if(!voice) + return + + rustg_file_write_b64decode(voice, "[filename].ogg") + + if(!config.tts_cache_enabled) + addtimer(CALLBACK(src, PROC_REF(cleanup_tts_file), "[filename].ogg"), FILE_CLEANUP_DELAY) + + for(var/datum/callback/cb in tts_queue[filename]) + invoke_async(cb) + tts_queue[filename] -= cb + + tts_queue -= filename + +/datum/controller/subsystem/tts220/proc/queue_sound_effect_processing(pure_filename, effect, processed_filename, datum/callback/output_tts_cb) + var/datum/sound_effect_request/request = new + request.original_filename = "[pure_filename].ogg" + request.output_filename = processed_filename + request.effect = effect + request.cb = output_tts_cb + LAZYADD(tts_effects_queue[processed_filename], request) + +/datum/controller/subsystem/tts220/proc/play_tts(atom/speaker, mob/listener, pure_filename, is_local = TRUE, singleton/sound_effect/effect = null, preSFX = null, postSFX = null) + if(isnull(listener) || !listener.client) + return + + var/filename2play = "[pure_filename][effect?.suffix].ogg" + + if(isnull(effect) || fexists(filename2play)) + output_tts(speaker, listener, filename2play, is_local, preSFX, postSFX) + return + + var/datum/callback/output_tts_cb = CALLBACK(src, PROC_REF(output_tts), speaker, listener, filename2play, is_local, preSFX, postSFX) + queue_sound_effect_processing(pure_filename, effect, filename2play, output_tts_cb) + +/datum/controller/subsystem/tts220/proc/output_tts(atom/speaker, mob/listener, filename2play, is_local = TRUE, preSFX = null, postSFX = null) + var/turf/turf_source = get_turf(speaker) + + var/volume = 100 + + var/sound/output = sound(filename2play) + output.status = SOUND_STREAM + if(!is_local || isnull(speaker)) + output.channel = tts_channel_radio + output.wait = TRUE + output.volume = volume + output.environment = NO_CHANGE + + if(output.volume <= 0) + return + + play_sfx_if_exists(listener, preSFX, output) + sound_to(listener, output) + play_sfx_if_exists(listener, postSFX, output) + + return + + output.channel = get_local_channel_by_owner(speaker) + + play_sfx_if_exists(listener, preSFX, output) + + output = listener.playsound_local(turf_source, output, volume) + + if(!output || output.volume <= 0) + return + + play_sfx_if_exists(listener, postSFX, output) + +/datum/controller/subsystem/tts220/proc/play_sfx_if_exists(mob/listener, sfx, sound/output) + if(sfx) + play_sfx(listener, sfx, output.channel, output.volume, output.environment) + +/datum/controller/subsystem/tts220/proc/play_sfx(mob/listener, sfx, channel, volume, environment) + var/sound/output = sound(sfx) + output.status = SOUND_STREAM + output.wait = TRUE + output.channel = channel + output.volume = volume + output.environment = environment + sound_to(listener, output) + +/datum/controller/subsystem/tts220/proc/cleanup_tts_file(filename) + fdel(filename) + +/datum/controller/subsystem/tts220/proc/get_available_seeds(owner) + var/list/_tts_seeds_names = list() + _tts_seeds_names |= tts_seeds_names + + if(!ismob(owner)) + return _tts_seeds_names + + var/mob/M = owner + + if(!M.client) + return _tts_seeds_names + + return _tts_seeds_names + +/datum/controller/subsystem/tts220/proc/get_random_seed(owner) + return pick(get_available_seeds(owner)) + +/datum/controller/subsystem/tts220/proc/sanitize_tts_input(message) + var/hash + if(sanitized_messages_caching) + hash = md5(lowertext(message)) + if(sanitized_messages_cache[hash]) + sanitized_messages_cache_hit++ + return sanitized_messages_cache[hash] + sanitized_messages_cache_miss++ + . = message + . = trim(.) + var/static/regex/punctuation_check = new(@"[.,?!]\Z") + if(!punctuation_check.Find(.)) + . += "." + var/static/regex/html_tags = new(@"<[^>]*>", "g") + . = html_tags.Replace(., "") + . = html_decode(.) + var/static/regex/forbidden_symbols = new(@"[^a-zA-Z0-9а-яА-ЯёЁ,!?+./ \r\n\t:—()-]", "g") + . = forbidden_symbols.Replace(., "") + var/static/regex/acronyms = new(@"(?=4.1. +- [LICENSE](./LICENSE) is the MIT license for the DMAPI. + +APIs communicate with TGS in two ways. All versions implement TGS -> DM communication using /world/Topic. DM -> TGS communication, called the bridge method, is different for each version. diff --git a/mods/~_ss220/tgs/core/README.md b/mods/~_ss220/tgs/core/README.md new file mode 100644 index 0000000000000..b82d8f49e297f --- /dev/null +++ b/mods/~_ss220/tgs/core/README.md @@ -0,0 +1,9 @@ +# Core DMAPI functions + +This folder contains all DMAPI code not directly involved in an API. + +- [_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals. +- [core.dm](./core.dm) contains the implementations of the `/world/proc/TgsXXX()` procs. Many map directly to the `/datum/tgs_api` functions. It also contains the /datum selection and setup code. +- [datum.dm](./datum.dm) contains the `/datum/tgs_api` declarations that all APIs must implement. +- [tgs_version.dm](./tgs_version.dm) contains the `/datum/tgs_version` definition +- diff --git a/mods/~_ss220/tgs/core/_definitions.dm b/mods/~_ss220/tgs/core/_definitions.dm new file mode 100644 index 0000000000000..fd98034eb7162 --- /dev/null +++ b/mods/~_ss220/tgs/core/_definitions.dm @@ -0,0 +1,10 @@ +#if DM_VERSION < 510 +#error The TGS DMAPI does not support BYOND versions < 510! +#endif + +#define TGS_UNIMPLEMENTED "___unimplemented" +#define TGS_VERSION_PARAMETER "server_service_version" + +#ifndef TGS_DEBUG_LOG +#define TGS_DEBUG_LOG(message) +#endif diff --git a/mods/~_ss220/tgs/core/core.dm b/mods/~_ss220/tgs/core/core.dm new file mode 100644 index 0000000000000..5cdfed0564500 --- /dev/null +++ b/mods/~_ss220/tgs/core/core.dm @@ -0,0 +1,157 @@ +/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) + var/current_api = TGS_READ_GLOBAL(tgs) + if(current_api) + TGS_ERROR_LOG("API datum already set (\ref[current_api] ([current_api]))! Was TgsNew() called more than once?") + return + + if(!(minimum_required_security_level in list(TGS_SECURITY_ULTRASAFE, TGS_SECURITY_SAFE, TGS_SECURITY_TRUSTED))) + TGS_ERROR_LOG("Invalid minimum_required_security_level: [minimum_required_security_level]!") + return + +#ifdef TGS_V3_API + if(minimum_required_security_level != TGS_SECURITY_TRUSTED) + TGS_WARNING_LOG("V3 DMAPI requires trusted security!") + minimum_required_security_level = TGS_SECURITY_TRUSTED +#endif + var/raw_parameter = world.params[TGS_VERSION_PARAMETER] + if(!raw_parameter) + return + + var/datum/tgs_version/version = new(raw_parameter) + if(!version.Valid(FALSE)) + TGS_ERROR_LOG("Failed to validate DMAPI version parameter: [raw_parameter]!") + return + + var/api_datum + switch(version.suite) + if(5) + api_datum = /datum/tgs_api/v5 + else + TGS_ERROR_LOG("Dont use old TGS lol.") + + var/datum/tgs_version/max_api_version = TgsMaximumApiVersion(); + if(version.suite != null && version.minor != null && version.patch != null && version.deprecated_patch != null && version.deprefixed_parameter > max_api_version.deprefixed_parameter) + TGS_ERROR_LOG("Detected unknown Interop API version! Defaulting to latest. Update the DMAPI to fix this problem.") + api_datum = /datum/tgs_api/latest + + if(!api_datum) + TGS_ERROR_LOG("Found unsupported Interop API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.") + return + + TGS_INFO_LOG("Activating API for version [version.deprefixed_parameter]") + + if(event_handler && !istype(event_handler)) + TGS_ERROR_LOG("Invalid parameter for event_handler: [event_handler]") + event_handler = null + + var/datum/tgs_api/new_api = new api_datum(event_handler, version) + + TGS_WRITE_GLOBAL(tgs, new_api) + + var/result = new_api.OnWorldNew(minimum_required_security_level) + if(!result || result == TGS_UNIMPLEMENTED) + TGS_WRITE_GLOBAL(tgs, null) + TGS_ERROR_LOG("Failed to activate API!") + +/world/TgsMaximumApiVersion() + return new /datum/tgs_version("5.x.x") + +/world/TgsMinimumApiVersion() + return new /datum/tgs_version("3.2.x") + +/world/TgsInitializationComplete() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.OnInitializationComplete() + +/world/proc/TgsTopic(T) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.OnTopic(T) + if(result != TGS_UNIMPLEMENTED) + return result + +/world/TgsRevision() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.Revision() + if(result != TGS_UNIMPLEMENTED) + return result + +/world/TgsReboot() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.OnReboot() + +/world/TgsAvailable() + return TGS_READ_GLOBAL(tgs) != null + +/world/TgsVersion() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + return api.version + +/world/TgsApiVersion() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + return api.ApiVersion() + +/world/TgsEngine() +#ifdef OPENDREAM + return TGS_ENGINE_TYPE_OPENDREAM +#else + return TGS_ENGINE_TYPE_BYOND +#endif + +/world/TgsInstanceName() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.InstanceName() + if(result != TGS_UNIMPLEMENTED) + return result + +/world/TgsTestMerges() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.TestMerges() + if(result != TGS_UNIMPLEMENTED) + return result + return list() + +/world/TgsEndProcess() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.EndProcess() + +/world/TgsChatChannelInfo() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.ChatChannelInfo() + if(result != TGS_UNIMPLEMENTED) + return result + return list() + +/world/TgsChatBroadcast(message, list/channels) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.ChatBroadcast(message, channels) + +/world/TgsTargetedChatBroadcast(message, admin_only) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.ChatTargetedBroadcast(message, admin_only) + +/world/TgsChatPrivateMessage(message, datum/tgs_chat_user/user) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.ChatPrivateMessage(message, user) + +/world/TgsSecurityLevel() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + return api.SecurityLevel() + +/world/TgsVisibility() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + return api.Visibility() diff --git a/mods/~_ss220/tgs/core/datum.dm b/mods/~_ss220/tgs/core/datum.dm new file mode 100644 index 0000000000000..07ce3b684584e --- /dev/null +++ b/mods/~_ss220/tgs/core/datum.dm @@ -0,0 +1,71 @@ +TGS_DEFINE_AND_SET_GLOBAL(tgs, null) + +/datum/tgs_api + var/datum/tgs_version/version + var/datum/tgs_event_handler/event_handler + + var/list/warned_deprecated_command_runs + +/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version) + . = ..() + src.event_handler = event_handler + src.version = version + +/datum/tgs_api/proc/TerminateWorld() + while(TRUE) + TGS_DEBUG_LOG("About to terminate world. Tick: [world.time], sleep_offline: [world.sleep_offline]") + world.sleep_offline = FALSE // https://www.byond.com/forum/post/2894866 + del(world) + world.sleep_offline = FALSE // just in case, this is BYOND after all... + sleep(1) + TGS_DEBUG_LOG("BYOND DIDN'T TERMINATE THE WORLD!!! TICK IS: [world.time], sleep_offline: [world.sleep_offline]") + +/datum/tgs_api/latest + parent_type = /datum/tgs_api/v5 + +TGS_PROTECT_DATUM(/datum/tgs_api) + +/datum/tgs_api/proc/ApiVersion() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/OnWorldNew(datum/tgs_event_handler/event_handler) + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/OnInitializationComplete() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/OnTopic(T) + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/OnReboot() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/InstanceName() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/TestMerges() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/EndProcess() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/Revision() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/ChatChannelInfo() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/ChatBroadcast(message, list/channels) + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/ChatTargetedBroadcast(message, admin_only) + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/ChatPrivateMessage(message, datum/tgs_chat_user/user) + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/SecurityLevel() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/Visibility() + return TGS_UNIMPLEMENTED diff --git a/mods/~_ss220/tgs/core/tgs_core.dm b/mods/~_ss220/tgs/core/tgs_core.dm new file mode 100644 index 0000000000000..8be96f27404a4 --- /dev/null +++ b/mods/~_ss220/tgs/core/tgs_core.dm @@ -0,0 +1,168 @@ +/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) + var/current_api = TGS_READ_GLOBAL(tgs) + if(current_api) + TGS_ERROR_LOG("API datum already set (\ref[current_api] ([current_api]))! Was TgsNew() called more than once?") + return + + if(!(minimum_required_security_level in list(TGS_SECURITY_ULTRASAFE, TGS_SECURITY_SAFE, TGS_SECURITY_TRUSTED))) + TGS_ERROR_LOG("Invalid minimum_required_security_level: [minimum_required_security_level]!") + return + +#ifdef TGS_V3_API + if(minimum_required_security_level != TGS_SECURITY_TRUSTED) + TGS_WARNING_LOG("V3 DMAPI requires trusted security!") + minimum_required_security_level = TGS_SECURITY_TRUSTED +#endif + var/raw_parameter = world.params[TGS_VERSION_PARAMETER] + if(!raw_parameter) + return + + var/datum/tgs_version/version = new(raw_parameter) + if(!version.Valid(FALSE)) + TGS_ERROR_LOG("Failed to validate DMAPI version parameter: [raw_parameter]!") + return + + var/api_datum + switch(version.suite) + if(3) +#ifndef TGS_V3_API + TGS_ERROR_LOG("Detected V3 API but TGS_V3_API isn't defined!") + return +#else + switch(version.minor) + if(2) + api_datum = /datum/tgs_api/v3210 +#endif + if(4) + switch(version.minor) + if(0) + api_datum = /datum/tgs_api/v4 + if(5) + api_datum = /datum/tgs_api/v5 + + var/datum/tgs_version/max_api_version = TgsMaximumApiVersion(); + if(version.suite != null && version.minor != null && version.patch != null && version.deprecated_patch != null && version.deprefixed_parameter > max_api_version.deprefixed_parameter) + TGS_ERROR_LOG("Detected unknown Interop API version! Defaulting to latest. Update the DMAPI to fix this problem.") + api_datum = /datum/tgs_api/latest + + if(!api_datum) + TGS_ERROR_LOG("Found unsupported Interop API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.") + return + + TGS_INFO_LOG("Activating API for version [version.deprefixed_parameter]") + + if(event_handler && !istype(event_handler)) + TGS_ERROR_LOG("Invalid parameter for event_handler: [event_handler]") + event_handler = null + + var/datum/tgs_api/new_api = new api_datum(event_handler, version) + + TGS_WRITE_GLOBAL(tgs, new_api) + + var/result = new_api.OnWorldNew(minimum_required_security_level) + if(!result || result == TGS_UNIMPLEMENTED) + TGS_WRITE_GLOBAL(tgs, null) + TGS_ERROR_LOG("Failed to activate API!") + +/world/TgsMaximumApiVersion() + return new /datum/tgs_version("5.x.x") + +/world/TgsMinimumApiVersion() + return new /datum/tgs_version("3.2.x") + +/world/TgsInitializationComplete() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.OnInitializationComplete() + +/world/proc/TgsTopic(T) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.OnTopic(T) + if(result != TGS_UNIMPLEMENTED) + return result + +/world/TgsRevision() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.Revision() + if(result != TGS_UNIMPLEMENTED) + return result + +/world/TgsReboot() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.OnReboot() + +/world/TgsAvailable() + return TGS_READ_GLOBAL(tgs) != null + +/world/TgsVersion() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + return api.version + +/world/TgsApiVersion() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + return api.ApiVersion() + +/world/TgsEngine() +#ifdef OPENDREAM + return TGS_ENGINE_TYPE_OPENDREAM +#else + return TGS_ENGINE_TYPE_BYOND +#endif + +/world/TgsInstanceName() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.InstanceName() + if(result != TGS_UNIMPLEMENTED) + return result + +/world/TgsTestMerges() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.TestMerges() + if(result != TGS_UNIMPLEMENTED) + return result + return list() + +/world/TgsEndProcess() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.EndProcess() + +/world/TgsChatChannelInfo() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + var/result = api.ChatChannelInfo() + if(result != TGS_UNIMPLEMENTED) + return result + return list() + +/world/TgsChatBroadcast(message, list/channels) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.ChatBroadcast(message, channels) + +/world/TgsTargetedChatBroadcast(message, admin_only) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.ChatTargetedBroadcast(message, admin_only) + +/world/TgsChatPrivateMessage(message, datum/tgs_chat_user/user) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + api.ChatPrivateMessage(message, user) + +/world/TgsSecurityLevel() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + return api.SecurityLevel() + +/world/TgsVisibility() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + return api.Visibility() diff --git a/mods/~_ss220/tgs/core/tgs_datum.dm b/mods/~_ss220/tgs/core/tgs_datum.dm new file mode 100644 index 0000000000000..07ce3b684584e --- /dev/null +++ b/mods/~_ss220/tgs/core/tgs_datum.dm @@ -0,0 +1,71 @@ +TGS_DEFINE_AND_SET_GLOBAL(tgs, null) + +/datum/tgs_api + var/datum/tgs_version/version + var/datum/tgs_event_handler/event_handler + + var/list/warned_deprecated_command_runs + +/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version) + . = ..() + src.event_handler = event_handler + src.version = version + +/datum/tgs_api/proc/TerminateWorld() + while(TRUE) + TGS_DEBUG_LOG("About to terminate world. Tick: [world.time], sleep_offline: [world.sleep_offline]") + world.sleep_offline = FALSE // https://www.byond.com/forum/post/2894866 + del(world) + world.sleep_offline = FALSE // just in case, this is BYOND after all... + sleep(1) + TGS_DEBUG_LOG("BYOND DIDN'T TERMINATE THE WORLD!!! TICK IS: [world.time], sleep_offline: [world.sleep_offline]") + +/datum/tgs_api/latest + parent_type = /datum/tgs_api/v5 + +TGS_PROTECT_DATUM(/datum/tgs_api) + +/datum/tgs_api/proc/ApiVersion() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/OnWorldNew(datum/tgs_event_handler/event_handler) + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/OnInitializationComplete() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/OnTopic(T) + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/OnReboot() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/InstanceName() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/TestMerges() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/EndProcess() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/Revision() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/ChatChannelInfo() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/ChatBroadcast(message, list/channels) + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/ChatTargetedBroadcast(message, admin_only) + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/ChatPrivateMessage(message, datum/tgs_chat_user/user) + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/SecurityLevel() + return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/Visibility() + return TGS_UNIMPLEMENTED diff --git a/mods/~_ss220/tgs/core/tgs_version.dm b/mods/~_ss220/tgs/core/tgs_version.dm new file mode 100644 index 0000000000000..13452128d4ce2 --- /dev/null +++ b/mods/~_ss220/tgs/core/tgs_version.dm @@ -0,0 +1,28 @@ +/datum/tgs_version/New(raw_parameter) + src.raw_parameter = raw_parameter + deprefixed_parameter = replacetext(raw_parameter, "/tg/station 13 Server v", "") + var/list/version_bits = splittext(deprefixed_parameter, ".") + + suite = text2num(version_bits[1]) + if(length(version_bits) > 1) + minor = text2num(version_bits[2]) + if(length(version_bits) > 2) + patch = text2num(version_bits[3]) + if(length(version_bits) == 4) + deprecated_patch = text2num(version_bits[4]) + +/datum/tgs_version/proc/Valid(allow_wildcards = FALSE) + if(isnull(suite)) + return FALSE + if(allow_wildcards) + return TRUE + return !Wildcard() + +/datum/tgs_version/Wildcard() + return isnull(minor) || isnull(patch) + +/datum/tgs_version/Equals(datum/tgs_version/other_version) + if(!istype(other_version)) + return FALSE + + return suite == other_version.suite && minor == other_version.minor && patch == other_version.patch && deprecated_patch == other_version.deprecated_patch diff --git a/mods/~_ss220/tgs/includes.dm b/mods/~_ss220/tgs/includes.dm new file mode 100644 index 0000000000000..50a1de64312b1 --- /dev/null +++ b/mods/~_ss220/tgs/includes.dm @@ -0,0 +1,13 @@ +#include "core\_definitions.dm" +#include "core\core.dm" +#include "core\datum.dm" +#include "core\tgs_version.dm" + +#include "v5\_defines.dm" +#include "v5\api.dm" +#include "v5\bridge.dm" +#include "v5\chunking.dm" +#include "v5\commands.dm" +#include "v5\serializers.dm" +#include "v5\topic.dm" +#include "v5\undefs.dm" diff --git a/mods/~_ss220/tgs/v5/README.md b/mods/~_ss220/tgs/v5/README.md new file mode 100644 index 0000000000000..a8a0c748e7b0a --- /dev/null +++ b/mods/~_ss220/tgs/v5/README.md @@ -0,0 +1,13 @@ +# DMAPI V5 + +This DMAPI implements bridge requests using HTTP GET requests to TGS. It has no security restrictions. + +- [__interop_version.dm](./__interop_version.dm) contains the version of the API used between the DMAPI and TGS. +- [_defines.dm](./_defines.dm) contains constant definitions. +- [api.dm](./api.dm) contains the bulk of the API code. +- [bridge.dm](./bridge.dm) contains functions related to making bridge requests. +- [chunking.dm](./chunking.dm) contains common function for splitting large raw data sets into chunks BYOND can natively process. +- [commands.dm](./commands.dm) contains functions relating to `/datum/tgs_chat_command`s. +- [serializers.dm](./serializers.dm) contains function to help convert interop `/datum`s into a JSON encodable `list()` format. +- [topic.dm](./topic.dm) contains functions related to processing topic requests. +- [undefs.dm](./undefs.dm) Undoes the work of `_defines.dm`. diff --git a/mods/~_ss220/tgs/v5/__interop_version.dm b/mods/~_ss220/tgs/v5/__interop_version.dm new file mode 100644 index 0000000000000..616263098fd3e --- /dev/null +++ b/mods/~_ss220/tgs/v5/__interop_version.dm @@ -0,0 +1 @@ +"5.8.0" diff --git a/mods/~_ss220/tgs/v5/_defines.dm b/mods/~_ss220/tgs/v5/_defines.dm new file mode 100644 index 0000000000000..1c7d67d20cdf6 --- /dev/null +++ b/mods/~_ss220/tgs/v5/_defines.dm @@ -0,0 +1,118 @@ +#define DMAPI5_PARAM_SERVER_PORT "tgs_port" +#define DMAPI5_PARAM_ACCESS_IDENTIFIER "tgs_key" + +#define DMAPI5_BRIDGE_DATA "data" +#define DMAPI5_TOPIC_DATA "tgs_data" + +#define DMAPI5_BRIDGE_REQUEST_LIMIT 8198 +#define DMAPI5_TOPIC_REQUEST_LIMIT 65528 +#define DMAPI5_TOPIC_RESPONSE_LIMIT 65529 + +#define DMAPI5_BRIDGE_COMMAND_STARTUP 1 +#define DMAPI5_BRIDGE_COMMAND_PRIME 2 +#define DMAPI5_BRIDGE_COMMAND_REBOOT 3 +#define DMAPI5_BRIDGE_COMMAND_KILL 4 +#define DMAPI5_BRIDGE_COMMAND_CHAT_SEND 5 +#define DMAPI5_BRIDGE_COMMAND_CHUNK 6 + +#define DMAPI5_PARAMETER_ACCESS_IDENTIFIER "accessIdentifier" +#define DMAPI5_PARAMETER_CUSTOM_COMMANDS "customCommands" +#define DMAPI5_PARAMETER_TOPIC_PORT "topicPort" + +#define DMAPI5_CHUNK "chunk" +#define DMAPI5_CHUNK_PAYLOAD "payload" +#define DMAPI5_CHUNK_TOTAL "totalChunks" +#define DMAPI5_CHUNK_SEQUENCE_ID "sequenceId" +#define DMAPI5_CHUNK_PAYLOAD_ID "payloadId" + +#define DMAPI5_MISSING_CHUNKS "missingChunks" + +#define DMAPI5_RESPONSE_ERROR_MESSAGE "errorMessage" + +#define DMAPI5_BRIDGE_PARAMETER_COMMAND_TYPE "commandType" +#define DMAPI5_BRIDGE_PARAMETER_CURRENT_PORT "currentPort" +#define DMAPI5_BRIDGE_PARAMETER_VERSION "version" +#define DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE "chatMessage" +#define DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL "minimumSecurityLevel" + +#define DMAPI5_BRIDGE_RESPONSE_NEW_PORT "newPort" +#define DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION "runtimeInformation" + +#define DMAPI5_CHAT_MESSAGE_CHANNEL_IDS "channelIds" + +#define DMAPI5_RUNTIME_INFORMATION_ACCESS_IDENTIFIER "accessIdentifier" +#define DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION "serverVersion" +#define DMAPI5_RUNTIME_INFORMATION_SERVER_PORT "serverPort" +#define DMAPI5_RUNTIME_INFORMATION_API_VALIDATE_ONLY "apiValidateOnly" +#define DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME "instanceName" +#define DMAPI5_RUNTIME_INFORMATION_REVISION "revision" +#define DMAPI5_RUNTIME_INFORMATION_TEST_MERGES "testMerges" +#define DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL "securityLevel" +#define DMAPI5_RUNTIME_INFORMATION_VISIBILITY "visibility" + +#define DMAPI5_CHAT_UPDATE_CHANNELS "channels" + +#define DMAPI5_TEST_MERGE_TIME_MERGED "timeMerged" +#define DMAPI5_TEST_MERGE_REVISION "revision" +#define DMAPI5_TEST_MERGE_TITLE_AT_MERGE "titleAtMerge" +#define DMAPI5_TEST_MERGE_BODY_AT_MERGE "bodyAtMerge" +#define DMAPI5_TEST_MERGE_URL "url" +#define DMAPI5_TEST_MERGE_AUTHOR "author" +#define DMAPI5_TEST_MERGE_NUMBER "number" +#define DMAPI5_TEST_MERGE_PULL_REQUEST_REVISION "pullRequestRevision" +#define DMAPI5_TEST_MERGE_COMMENT "comment" + +#define DMAPI5_CHAT_COMMAND_NAME "name" +#define DMAPI5_CHAT_COMMAND_PARAMS "params" +#define DMAPI5_CHAT_COMMAND_USER "user" + +#define DMAPI5_EVENT_NOTIFICATION_TYPE "type" +#define DMAPI5_EVENT_NOTIFICATION_PARAMETERS "parameters" + +#define DMAPI5_TOPIC_COMMAND_CHAT_COMMAND 0 +#define DMAPI5_TOPIC_COMMAND_EVENT_NOTIFICATION 1 +#define DMAPI5_TOPIC_COMMAND_CHANGE_PORT 2 +#define DMAPI5_TOPIC_COMMAND_CHANGE_REBOOT_STATE 3 +#define DMAPI5_TOPIC_COMMAND_INSTANCE_RENAMED 4 +#define DMAPI5_TOPIC_COMMAND_CHAT_CHANNELS_UPDATE 5 +#define DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE 6 +#define DMAPI5_TOPIC_COMMAND_HEALTHCHECK 7 +#define DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH 8 +#define DMAPI5_TOPIC_COMMAND_SEND_CHUNK 9 +#define DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK 10 +#define DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST 11 + +#define DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE "commandType" +#define DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND "chatCommand" +#define DMAPI5_TOPIC_PARAMETER_EVENT_NOTIFICATION "eventNotification" +#define DMAPI5_TOPIC_PARAMETER_NEW_PORT "newPort" +#define DMAPI5_TOPIC_PARAMETER_NEW_REBOOT_STATE "newRebootState" +#define DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME "newInstanceName" +#define DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE "chatUpdate" +#define DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION "newServerVersion" +#define DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE "broadcastMessage" + +#define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE "commandResponse" +#define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE "commandResponseMessage" +#define DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES "chatResponses" + +#define DMAPI5_REVISION_INFORMATION_COMMIT_SHA "commitSha" +#define DMAPI5_REVISION_INFORMATION_TIMESTAMP "timestamp" +#define DMAPI5_REVISION_INFORMATION_ORIGIN_COMMIT_SHA "originCommitSha" + +#define DMAPI5_CHAT_USER_ID "id" +#define DMAPI5_CHAT_USER_FRIENDLY_NAME "friendlyName" +#define DMAPI5_CHAT_USER_MENTION "mention" +#define DMAPI5_CHAT_USER_CHANNEL "channel" + +#define DMAPI5_CHAT_CHANNEL_ID "id" +#define DMAPI5_CHAT_CHANNEL_FRIENDLY_NAME "friendlyName" +#define DMAPI5_CHAT_CHANNEL_CONNECTION_NAME "connectionName" +#define DMAPI5_CHAT_CHANNEL_IS_ADMIN_CHANNEL "isAdminChannel" +#define DMAPI5_CHAT_CHANNEL_IS_PRIVATE_CHANNEL "isPrivateChannel" +#define DMAPI5_CHAT_CHANNEL_TAG "tag" +#define DMAPI5_CHAT_CHANNEL_EMBEDS_SUPPORTED "embedsSupported" + +#define DMAPI5_CUSTOM_CHAT_COMMAND_NAME "name" +#define DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT "helpText" +#define DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY "adminOnly" diff --git a/mods/~_ss220/tgs/v5/api.dm b/mods/~_ss220/tgs/v5/api.dm new file mode 100644 index 0000000000000..a5c064a8eaf1e --- /dev/null +++ b/mods/~_ss220/tgs/v5/api.dm @@ -0,0 +1,281 @@ +/datum/tgs_api/v5 + var/server_port + var/access_identifier + + var/instance_name + var/security_level + var/visibility + + var/reboot_mode = TGS_REBOOT_MODE_NORMAL + + /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call + var/list/intercepted_message_queue + + /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call + var/list/offline_message_queue + + var/list/custom_commands + + var/list/test_merges + var/datum/tgs_revision_information/revision + var/list/chat_channels + + var/initialized = FALSE + var/initial_bridge_request_received = FALSE + var/datum/tgs_version/interop_version + + var/chunked_requests = 0 + var/list/chunked_topics = list() + + var/detached = FALSE + +/datum/tgs_api/v5/New() + . = ..() + interop_version = version + TGS_DEBUG_LOG("V5 API created: [json_encode(args)]") + +/datum/tgs_api/v5/ApiVersion() + return new /datum/tgs_version( + #include "__interop_version.dm" + ) + +/datum/tgs_api/v5/OnWorldNew(minimum_required_security_level) + TGS_DEBUG_LOG("OnWorldNew()") + server_port = world.params[DMAPI5_PARAM_SERVER_PORT] + access_identifier = world.params[DMAPI5_PARAM_ACCESS_IDENTIFIER] + + var/datum/tgs_version/api_version = ApiVersion() + version = null // we want this to be the TGS version, not the interop version + var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands(), DMAPI5_PARAMETER_TOPIC_PORT = GetTopicPort())) + if(!istype(bridge_response)) + TGS_ERROR_LOG("Failed initial bridge request!") + return FALSE + + var/list/runtime_information = bridge_response[DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION] + if(!istype(runtime_information)) + TGS_ERROR_LOG("Failed to decode runtime information from bridge response: [json_encode(bridge_response)]!") + return FALSE + + if(runtime_information[DMAPI5_RUNTIME_INFORMATION_API_VALIDATE_ONLY]) + TGS_INFO_LOG("DMAPI validation, exiting...") + TerminateWorld() + + initial_bridge_request_received = TRUE + version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) // reassigning this because it can change if TGS updates + security_level = runtime_information[DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL] + visibility = runtime_information[DMAPI5_RUNTIME_INFORMATION_VISIBILITY] + instance_name = runtime_information[DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME] + + var/list/revisionData = runtime_information[DMAPI5_RUNTIME_INFORMATION_REVISION] + if(istype(revisionData)) + revision = new + revision.commit = revisionData[DMAPI5_REVISION_INFORMATION_COMMIT_SHA] + revision.timestamp = revisionData[DMAPI5_REVISION_INFORMATION_TIMESTAMP] + revision.origin_commit = revisionData[DMAPI5_REVISION_INFORMATION_ORIGIN_COMMIT_SHA] + else + TGS_ERROR_LOG("Failed to decode [DMAPI5_RUNTIME_INFORMATION_REVISION] from runtime information!") + + test_merges = list() + var/list/test_merge_json = runtime_information[DMAPI5_RUNTIME_INFORMATION_TEST_MERGES] + if(istype(test_merge_json)) + for(var/entry in test_merge_json) + var/datum/tgs_revision_information/test_merge/tm = new + tm.number = entry[DMAPI5_TEST_MERGE_NUMBER] + + var/list/revInfo = entry[DMAPI5_TEST_MERGE_REVISION] + if(revInfo) + tm.commit = revisionData[DMAPI5_REVISION_INFORMATION_COMMIT_SHA] + tm.origin_commit = revisionData[DMAPI5_REVISION_INFORMATION_ORIGIN_COMMIT_SHA] + tm.timestamp = entry[DMAPI5_REVISION_INFORMATION_TIMESTAMP] + else + TGS_WARNING_LOG("Failed to decode [DMAPI5_TEST_MERGE_REVISION] from test merge #[tm.number]!") + + if(!tm.timestamp) + tm.timestamp = entry[DMAPI5_TEST_MERGE_TIME_MERGED] + + tm.title = entry[DMAPI5_TEST_MERGE_TITLE_AT_MERGE] + tm.body = entry[DMAPI5_TEST_MERGE_BODY_AT_MERGE] + tm.url = entry[DMAPI5_TEST_MERGE_URL] + tm.author = entry[DMAPI5_TEST_MERGE_AUTHOR] + tm.head_commit = entry[DMAPI5_TEST_MERGE_PULL_REQUEST_REVISION] + tm.comment = entry[DMAPI5_TEST_MERGE_COMMENT] + + test_merges += tm + else + TGS_WARNING_LOG("Failed to decode [DMAPI5_RUNTIME_INFORMATION_TEST_MERGES] from runtime information!") + + chat_channels = list() + DecodeChannels(runtime_information) + + initialized = TRUE + return TRUE + +/datum/tgs_api/v5/proc/GetTopicPort() +#if defined(OPENDREAM) && defined(OPENDREAM_TOPIC_PORT_EXISTS) + return "[world.opendream_topic_port]" +#else + return null +#endif + +/datum/tgs_api/v5/proc/RequireInitialBridgeResponse() + TGS_DEBUG_LOG("RequireInitialBridgeResponse()") + var/logged = FALSE + while(!initial_bridge_request_received) + if(!logged) + TGS_DEBUG_LOG("RequireInitialBridgeResponse: Starting sleep") + logged = TRUE + + sleep(1) + + TGS_DEBUG_LOG("RequireInitialBridgeResponse: Passed") + +/datum/tgs_api/v5/OnInitializationComplete() + Bridge(DMAPI5_BRIDGE_COMMAND_PRIME) + +/datum/tgs_api/v5/OnTopic(T) + TGS_DEBUG_LOG("OnTopic()") + RequireInitialBridgeResponse() + TGS_DEBUG_LOG("OnTopic passed bridge request gate") + var/list/params = params2list(T) + var/json = params[DMAPI5_TOPIC_DATA] + if(!json) + TGS_DEBUG_LOG("No \"[DMAPI5_TOPIC_DATA]\" entry found, ignoring...") + return FALSE // continue to /world/Topic + + if(!initialized) + TGS_WARNING_LOG("Missed topic due to not being initialized: [json]") + return TRUE // too early to handle, but it's still our responsibility + + return ProcessTopicJson(json, TRUE) + +/datum/tgs_api/v5/OnReboot() + var/list/result = Bridge(DMAPI5_BRIDGE_COMMAND_REBOOT) + if(!result) + return + + //okay so the standard TGS proceedure is: right before rebooting change the port to whatever was sent to us in the above json's data parameter + + var/port = result[DMAPI5_BRIDGE_RESPONSE_NEW_PORT] + if(!isnum(port)) + return //this is valid, server may just want use to reboot + + if(port == 0) + //to byond 0 means any port and "none" means close vOv + port = "none" + + if(!world.OpenPort(port)) + TGS_ERROR_LOG("Unable to set port to [port]!") + +/datum/tgs_api/v5/InstanceName() + RequireInitialBridgeResponse() + return instance_name + +/datum/tgs_api/v5/TestMerges() + RequireInitialBridgeResponse() + return test_merges.Copy() + +/datum/tgs_api/v5/EndProcess() + Bridge(DMAPI5_BRIDGE_COMMAND_KILL) + +/datum/tgs_api/v5/Revision() + RequireInitialBridgeResponse() + return revision + +// Common proc b/c it's used by the V3/V4 APIs +/datum/tgs_api/proc/UpgradeDeprecatedChatMessage(datum/tgs_message_content/message) + if(!istext(message)) + return message + + TGS_WARNING_LOG("Received legacy string when a [/datum/tgs_message_content] was expected. Please audit all calls to TgsChatBroadcast, TgsChatTargetedBroadcast, and TgsChatPrivateMessage to ensure they use the new /datum.") + return new /datum/tgs_message_content(message) + +/datum/tgs_api/v5/ChatBroadcast(datum/tgs_message_content/message2, list/channels) + if(!length(channels)) + channels = ChatChannelInfo() + + var/list/ids = list() + for(var/I in channels) + var/datum/tgs_chat_channel/channel = I + ids += channel.id + + SendChatMessageRaw(message2, ids) + +/datum/tgs_api/v5/ChatTargetedBroadcast(datum/tgs_message_content/message2, admin_only) + var/list/channels = list() + for(var/I in ChatChannelInfo()) + var/datum/tgs_chat_channel/channel = I + if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only))) + channels += channel.id + + SendChatMessageRaw(message2, channels) + +/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user) + SendChatMessageRaw(message2, list(user.channel.id)) + +/datum/tgs_api/v5/proc/SendChatMessageRaw(datum/tgs_message_content/message2, list/channel_ids) + message2 = UpgradeDeprecatedChatMessage(message2) + + if (!length(channel_ids)) + return + + var/list/data = message2._interop_serialize() + data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channel_ids + if(intercepted_message_queue) + intercepted_message_queue += list(data) + return + + if(offline_message_queue) + offline_message_queue += list(data) + return + + if(detached) + offline_message_queue = list(data) + + WaitForReattach(FALSE) + + data = offline_message_queue + offline_message_queue = null + + for(var/queued_message in data) + SendChatDataRaw(queued_message) + else + SendChatDataRaw(data) + +/datum/tgs_api/v5/proc/SendChatDataRaw(list/data) + Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + +/datum/tgs_api/v5/ChatChannelInfo() + RequireInitialBridgeResponse() + WaitForReattach(TRUE) + return chat_channels.Copy() + +/datum/tgs_api/v5/proc/DecodeChannels(chat_update_json) + TGS_DEBUG_LOG("DecodeChannels()") + var/list/chat_channels_json = chat_update_json[DMAPI5_CHAT_UPDATE_CHANNELS] + if(istype(chat_channels_json)) + chat_channels.Cut() + for(var/channel_json in chat_channels_json) + var/datum/tgs_chat_channel/channel = DecodeChannel(channel_json) + if(channel) + chat_channels += channel + else + TGS_WARNING_LOG("Failed to decode [DMAPI5_CHAT_UPDATE_CHANNELS] from channel update!") + +/datum/tgs_api/v5/proc/DecodeChannel(channel_json) + var/datum/tgs_chat_channel/channel = new + channel.id = channel_json[DMAPI5_CHAT_CHANNEL_ID] + channel.friendly_name = channel_json[DMAPI5_CHAT_CHANNEL_FRIENDLY_NAME] + channel.connection_name = channel_json[DMAPI5_CHAT_CHANNEL_CONNECTION_NAME] + channel.is_admin_channel = channel_json[DMAPI5_CHAT_CHANNEL_IS_ADMIN_CHANNEL] + channel.is_private_channel = channel_json[DMAPI5_CHAT_CHANNEL_IS_PRIVATE_CHANNEL] + channel.custom_tag = channel_json[DMAPI5_CHAT_CHANNEL_TAG] + channel.embeds_supported = channel_json[DMAPI5_CHAT_CHANNEL_EMBEDS_SUPPORTED] + return channel + +/datum/tgs_api/v5/SecurityLevel() + RequireInitialBridgeResponse() + return security_level + +/datum/tgs_api/v5/Visibility() + RequireInitialBridgeResponse() + return visibility diff --git a/mods/~_ss220/tgs/v5/bridge.dm b/mods/~_ss220/tgs/v5/bridge.dm new file mode 100644 index 0000000000000..a0ab359876704 --- /dev/null +++ b/mods/~_ss220/tgs/v5/bridge.dm @@ -0,0 +1,106 @@ +/datum/tgs_api/v5/proc/Bridge(command, list/data) + if(!data) + data = list() + + var/single_bridge_request = CreateBridgeRequest(command, data) + if(length(single_bridge_request) <= DMAPI5_BRIDGE_REQUEST_LIMIT) + return PerformBridgeRequest(single_bridge_request) + + // chunking required + var/payload_id = ++chunked_requests + + var/raw_data = CreateBridgeData(command, data, FALSE) + + var/list/chunk_requests = GenerateChunks(raw_data, TRUE) + + var/list/response + for(var/bridge_request in chunk_requests) + response = PerformBridgeRequest(bridge_request) + if(!response) + // Abort + return + + var/list/missing_sequence_ids = response[DMAPI5_MISSING_CHUNKS] + if(length(missing_sequence_ids)) + do + TGS_WARNING_LOG("Server is still missing some chunks of bridge P[payload_id]! Sending missing chunks...") + if(!istype(missing_sequence_ids)) + TGS_ERROR_LOG("Did not receive a list() for [DMAPI5_MISSING_CHUNKS]!") + return + + for(var/missing_sequence_id in missing_sequence_ids) + if(!isnum(missing_sequence_id)) + TGS_ERROR_LOG("Did not receive a num in [DMAPI5_MISSING_CHUNKS]!") + return + + var/missing_chunk_request = chunk_requests[missing_sequence_id + 1] + response = PerformBridgeRequest(missing_chunk_request) + if(!response) + // Abort + return + + missing_sequence_ids = response[DMAPI5_MISSING_CHUNKS] + while(length(missing_sequence_ids)) + + return response + +/datum/tgs_api/v5/proc/CreateBridgeRequest(command, list/data) + var/json = CreateBridgeData(command, data, TRUE) + var/encoded_json = url_encode(json) + + var/api_prefix = interop_version.minor >= 8 ? "api/" : "" + + var/url = "http://127.0.0.1:[server_port]/[api_prefix]Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]" + return url + +/datum/tgs_api/v5/proc/CreateBridgeData(command, list/data, needs_auth) + data[DMAPI5_BRIDGE_PARAMETER_COMMAND_TYPE] = command + if(needs_auth) + data[DMAPI5_PARAMETER_ACCESS_IDENTIFIER] = access_identifier + + var/json = json_encode(data) + return json + +/datum/tgs_api/v5/proc/WaitForReattach(require_channels = FALSE) + if(detached) + // Wait up to one minute + for(var/i in 1 to 600) + sleep(1) + if(!detached && (!require_channels || length(chat_channels))) + break + + // dad went out for milk and cigarettes 20 years ago... + // yes, this affects all other waiters, intentional + if(i == 600) + detached = FALSE + +/datum/tgs_api/v5/proc/PerformBridgeRequest(bridge_request) + WaitForReattach(FALSE) + + // This is an infinite sleep until we get a response + var/export_response = world.Export(bridge_request) + if(!export_response) + TGS_ERROR_LOG("Failed bridge request: [bridge_request]") + return + + var/content = export_response["CONTENT"] + if(!content) + TGS_ERROR_LOG("Failed bridge request, missing content!") + return + + var/response_json = file2text(content) + if(!response_json) + TGS_ERROR_LOG("Failed bridge request, failed to load content!") + return + + var/list/bridge_response = json_decode(response_json) + if(!bridge_response) + TGS_ERROR_LOG("Failed bridge request, bad json: [response_json]") + return + + var/error = bridge_response[DMAPI5_RESPONSE_ERROR_MESSAGE] + if(error) + TGS_ERROR_LOG("Failed bridge request, bad request: [error]") + return + + return bridge_response diff --git a/mods/~_ss220/tgs/v5/chunking.dm b/mods/~_ss220/tgs/v5/chunking.dm new file mode 100644 index 0000000000000..cd5944d34fb4f --- /dev/null +++ b/mods/~_ss220/tgs/v5/chunking.dm @@ -0,0 +1,43 @@ +/datum/tgs_api/v5/proc/GenerateChunks(payload, bridge) + var/limit = bridge ? DMAPI5_BRIDGE_REQUEST_LIMIT : DMAPI5_TOPIC_RESPONSE_LIMIT + + var/payload_id = ++chunked_requests + var/data_length = length(payload) + + var/chunk_count + var/list/chunk_requests + for(chunk_count = 2; !chunk_requests; ++chunk_count) + var/max_chunk_size = -round(-(data_length / chunk_count)) + if(max_chunk_size > limit) + continue + + chunk_requests = list() + for(var/i in 1 to chunk_count) + var/start_index = 1 + ((i - 1) * max_chunk_size) + if (start_index > data_length) + break + + var/end_index = min(1 + (i * max_chunk_size), data_length + 1) + + var/chunk_payload = copytext(payload, start_index, end_index) + + // sequence IDs in interop chunking are always zero indexed + var/list/chunk = list(DMAPI5_CHUNK_PAYLOAD_ID = payload_id, DMAPI5_CHUNK_SEQUENCE_ID = (i - 1), DMAPI5_CHUNK_TOTAL = chunk_count, DMAPI5_CHUNK_PAYLOAD = chunk_payload) + + var/chunk_request = list(DMAPI5_CHUNK = chunk) + var/chunk_length + if(bridge) + chunk_request = CreateBridgeRequest(DMAPI5_BRIDGE_COMMAND_CHUNK, chunk_request) + chunk_length = length(chunk_request) + else + chunk_request = list(chunk_request) // wrap for adding to list + chunk_length = length(json_encode(chunk_request)) + + if(chunk_length > limit) + // Screwed by encoding, no way to preempt it though + chunk_requests = null + break + + chunk_requests += chunk_request + + return chunk_requests diff --git a/mods/~_ss220/tgs/v5/commands.dm b/mods/~_ss220/tgs/v5/commands.dm new file mode 100644 index 0000000000000..9557f8a08ed54 --- /dev/null +++ b/mods/~_ss220/tgs/v5/commands.dm @@ -0,0 +1,60 @@ +/datum/tgs_api/v5/proc/ListCustomCommands() + var/results = list() + custom_commands = list() + for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) + var/datum/tgs_chat_command/stc = new I + if(stc.ignore_type == I) + continue + + var/command_name = stc.name + if(!command_name || findtext(command_name, " ") || findtext(command_name, "'") || findtext(command_name, "\"")) + TGS_ERROR_LOG("Custom command [command_name] ([I]) can't be used as it is empty or contains illegal characters!") + continue + + if(results[command_name]) + var/datum/other = custom_commands[command_name] + TGS_ERROR_LOG("Custom commands [other.type] and [I] have the same name (\"[command_name]\"), only [other.type] will be available!") + continue + results += list(list(DMAPI5_CUSTOM_CHAT_COMMAND_NAME = command_name, DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT = stc.help_text, DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY = stc.admin_only)) + custom_commands[command_name] = stc + + return results + +/datum/tgs_api/v5/proc/HandleCustomCommand(list/command_json) + var/command = command_json[DMAPI5_CHAT_COMMAND_NAME] + var/user = command_json[DMAPI5_CHAT_COMMAND_USER] + var/params = command_json[DMAPI5_CHAT_COMMAND_PARAMS] + + var/datum/tgs_chat_user/u = new + u.id = user[DMAPI5_CHAT_USER_ID] + u.friendly_name = user[DMAPI5_CHAT_USER_FRIENDLY_NAME] + u.mention = user[DMAPI5_CHAT_USER_MENTION] + u.channel = DecodeChannel(user[DMAPI5_CHAT_USER_CHANNEL]) + + var/datum/tgs_chat_command/sc = custom_commands[command] + if(sc) + var/datum/tgs_message_content/response = sc.Run(u, params) + response = UpgradeDeprecatedCommandResponse(response, command) + + var/list/topic_response = TopicResponse() + topic_response[DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE] = response ? response.text : null + topic_response[DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE] = response ? response._interop_serialize() : null + return topic_response + return TopicResponse("Unknown custom chat command: [command]!") + +// Common proc b/c it's used by the V3/V4 APIs +/datum/tgs_api/proc/UpgradeDeprecatedCommandResponse(datum/tgs_message_content/response, command) + // Backwards compatibility, used to return a string + if(istext(response)) + warned_deprecated_command_runs = warned_deprecated_command_runs || list() + if(!warned_deprecated_command_runs[command]) + TGS_WARNING_LOG("Custom chat command \"[command]\" is still returning a string. This behaviour is deprecated, please upgrade it to return a [/datum/tgs_message_content].") + warned_deprecated_command_runs[command] = TRUE + + return new /datum/tgs_message_content(response) + + if(!istype(response)) + TGS_ERROR_LOG("Custom chat command \"[command]\" should return a [/datum/tgs_message_content]! Got: \"[response]\"") + return null + + return response diff --git a/mods/~_ss220/tgs/v5/serializers.dm b/mods/~_ss220/tgs/v5/serializers.dm new file mode 100644 index 0000000000000..3a32848ad5129 --- /dev/null +++ b/mods/~_ss220/tgs/v5/serializers.dm @@ -0,0 +1,59 @@ +/datum/tgs_message_content/proc/_interop_serialize() + return list("text" = text, "embed" = embed ? embed._interop_serialize() : null) + +/datum/tgs_chat_embed/proc/_interop_serialize() + CRASH("Base /proc/interop_serialize called on [type]!") + +/datum/tgs_chat_embed/structure/_interop_serialize() + var/list/serialized_fields + if(istype(fields, /list)) + serialized_fields = list() + for(var/datum/tgs_chat_embed/field/field as anything in fields) + serialized_fields += list(field._interop_serialize()) + return list( + "title" = title, + "description" = description, + "url" = url, + "timestamp" = timestamp, + "colour" = colour, + "image" = src.image ? src.image._interop_serialize() : null, + "thumbnail" = thumbnail ? thumbnail._interop_serialize() : null, + "video" = video ? video._interop_serialize() : null, + "footer" = footer ? footer._interop_serialize() : null, + "provider" = provider ? provider._interop_serialize() : null, + "author" = author ? author._interop_serialize() : null, + "fields" = serialized_fields + ) + +/datum/tgs_chat_embed/media/_interop_serialize() + return list( + "url" = url, + "width" = width, + "height" = height, + "proxyUrl" = proxy_url + ) + +/datum/tgs_chat_embed/provider/_interop_serialize() + return list( + "url" = url, + "name" = name + ) + +/datum/tgs_chat_embed/provider/author/_interop_serialize() + . = ..() + .["iconUrl"] = icon_url + .["proxyIconUrl"] = proxy_icon_url + +/datum/tgs_chat_embed/footer/_interop_serialize() + return list( + "text" = text, + "iconUrl" = icon_url, + "proxyIconUrl" = proxy_icon_url + ) + +/datum/tgs_chat_embed/field/_interop_serialize() + return list( + "name" = name, + "value" = value, + "isInline" = is_inline + ) diff --git a/mods/~_ss220/tgs/v5/topic.dm b/mods/~_ss220/tgs/v5/topic.dm new file mode 100644 index 0000000000000..05e6c4e1b2146 --- /dev/null +++ b/mods/~_ss220/tgs/v5/topic.dm @@ -0,0 +1,283 @@ +/datum/tgs_api/v5/proc/TopicResponse(error_message = null) + var/list/response = list() + if(error_message) + response[DMAPI5_RESPONSE_ERROR_MESSAGE] = error_message + return response + +/datum/tgs_api/v5/proc/ProcessTopicJson(json, check_access_identifier) + TGS_DEBUG_LOG("ProcessTopicJson(..., [check_access_identifier])") + var/list/result = ProcessRawTopic(json, check_access_identifier) + if(!result) + result = TopicResponse("Runtime error!") + else if(!length(result)) + return "{}" // quirk of json_encode is an empty list returns "[]" + + var/response_json = json_encode(result) + if(length(response_json) > DMAPI5_TOPIC_RESPONSE_LIMIT) + // cache response chunks and send the first + var/list/chunks = GenerateChunks(response_json, FALSE) + var/payload_id = chunks[1][DMAPI5_CHUNK][DMAPI5_CHUNK_PAYLOAD_ID] + var/cache_key = ResponseTopicChunkCacheKey(payload_id) + + chunked_topics[cache_key] = chunks + + response_json = json_encode(chunks[1]) + + return response_json + +/datum/tgs_api/v5/proc/ProcessRawTopic(json, check_access_identifier) + TGS_DEBUG_LOG("ProcessRawTopic(..., [check_access_identifier])") + var/list/topic_parameters = json_decode(json) + if(!topic_parameters) + TGS_DEBUG_LOG("ProcessRawTopic: json_decode failed") + return TopicResponse("Invalid topic parameters json: [json]!"); + + var/their_sCK = topic_parameters[DMAPI5_PARAMETER_ACCESS_IDENTIFIER] + if(check_access_identifier && their_sCK != access_identifier) + TGS_DEBUG_LOG("ProcessRawTopic: access identifier check failed") + return TopicResponse("Failed to decode [DMAPI5_PARAMETER_ACCESS_IDENTIFIER] or it does not match!") + + var/command = topic_parameters[DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE] + if(!isnum(command)) + TGS_DEBUG_LOG("ProcessRawTopic: command type check failed") + return TopicResponse("Failed to decode [DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE]!") + + return ProcessTopicCommand(command, topic_parameters) + +/datum/tgs_api/v5/proc/ResponseTopicChunkCacheKey(payload_id) + return "response[payload_id]" + +/datum/tgs_api/v5/proc/ProcessTopicCommand(command, list/topic_parameters) + TGS_DEBUG_LOG("ProcessTopicCommand([command], ...)") + switch(command) + + if(DMAPI5_TOPIC_COMMAND_CHAT_COMMAND) + intercepted_message_queue = list() + var/list/result = HandleCustomCommand(topic_parameters[DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND]) + if(!result) + result = TopicResponse("Error running chat command!") + result[DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES] = intercepted_message_queue + intercepted_message_queue = null + return result + + if(DMAPI5_TOPIC_COMMAND_EVENT_NOTIFICATION) + var/list/event_notification = topic_parameters[DMAPI5_TOPIC_PARAMETER_EVENT_NOTIFICATION] + if(!istype(event_notification)) + return TopicResponse("Invalid [DMAPI5_TOPIC_PARAMETER_EVENT_NOTIFICATION]!") + + var/event_type = event_notification[DMAPI5_EVENT_NOTIFICATION_TYPE] + if(!isnum(event_type)) + return TopicResponse("Invalid or missing [DMAPI5_EVENT_NOTIFICATION_TYPE]!") + + var/list/event_parameters = event_notification[DMAPI5_EVENT_NOTIFICATION_PARAMETERS] + if(event_parameters && !istype(event_parameters)) + . = TopicResponse("Invalid or missing [DMAPI5_EVENT_NOTIFICATION_PARAMETERS]!") + else + var/list/response = TopicResponse() + . = response + if(event_handler != null) + var/list/event_call = list(event_type) + if(event_parameters) + event_call += event_parameters + + intercepted_message_queue = list() + event_handler.HandleEvent(arglist(event_call)) + response[DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES] = intercepted_message_queue + intercepted_message_queue = null + + if (event_type == TGS_EVENT_WATCHDOG_DETACH) + detached = TRUE + chat_channels.Cut() // https://github.com/tgstation/tgstation-server/issues/1490 + + return + + if(DMAPI5_TOPIC_COMMAND_CHANGE_PORT) + var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] + if (!isnum(new_port) || !(new_port > 0)) + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]") + + if(event_handler != null) + event_handler.HandleEvent(TGS_EVENT_PORT_SWAP, new_port) + + //the topic still completes, miraculously + //I honestly didn't believe byond could do it without exploding + if(!world.OpenPort(new_port)) + return TopicResponse("Port change failed!") + + return TopicResponse() + + if(DMAPI5_TOPIC_COMMAND_CHANGE_REBOOT_STATE) + var/new_reboot_mode = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_REBOOT_STATE] + if(!isnum(new_reboot_mode)) + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_REBOOT_STATE]!") + + if(event_handler != null) + event_handler.HandleEvent(TGS_EVENT_REBOOT_MODE_CHANGE, reboot_mode, new_reboot_mode) + + reboot_mode = new_reboot_mode + return TopicResponse() + + if(DMAPI5_TOPIC_COMMAND_INSTANCE_RENAMED) + var/new_instance_name = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME] + if(!istext(new_instance_name)) + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME]!") + + if(event_handler != null) + event_handler.HandleEvent(TGS_EVENT_INSTANCE_RENAMED, new_instance_name) + + instance_name = new_instance_name + return TopicResponse() + + if(DMAPI5_TOPIC_COMMAND_CHAT_CHANNELS_UPDATE) + TGS_DEBUG_LOG("ProcessTopicCommand: It's a chat update") + var/list/chat_update_json = topic_parameters[DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE] + if(!istype(chat_update_json)) + TGS_DEBUG_LOG("ProcessTopicCommand: failed \"[DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE]\" check") + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE]!") + + DecodeChannels(chat_update_json) + return TopicResponse() + + if(DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE) + var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] + if (!isnum(new_port) || !(new_port > 0)) + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]") + + server_port = new_port + return TopicResponse() + + if(DMAPI5_TOPIC_COMMAND_HEALTHCHECK) + if(event_handler && event_handler.receive_health_checks) + event_handler.HandleEvent(TGS_EVENT_HEALTH_CHECK) + return TopicResponse() + + if(DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH) + detached = FALSE + var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] + var/error_message = null + if (new_port != null) + if (!isnum(new_port) || !(new_port > 0)) + error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]" + else + server_port = new_port + + var/new_version_string = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION] + if (!istext(new_version_string)) + if(error_message != null) + error_message += ", " + error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]" + else + var/datum/tgs_version/new_version = new(new_version_string) + if (event_handler) + event_handler.HandleEvent(TGS_EVENT_WATCHDOG_REATTACH, new_version) + + version = new_version + + var/list/reattach_response = TopicResponse(error_message) + reattach_response[DMAPI5_PARAMETER_CUSTOM_COMMANDS] = ListCustomCommands() + reattach_response[DMAPI5_PARAMETER_TOPIC_PORT] = GetTopicPort() + return reattach_response + + if(DMAPI5_TOPIC_COMMAND_SEND_CHUNK) + var/list/chunk = topic_parameters[DMAPI5_CHUNK] + if(!istype(chunk)) + return TopicResponse("Invalid [DMAPI5_CHUNK]!") + + var/payload_id = chunk[DMAPI5_CHUNK_PAYLOAD_ID] + if(!isnum(payload_id)) + return TopicResponse("[DMAPI5_CHUNK_PAYLOAD_ID] is not a number!") + + // Always updated the highest known payload ID + chunked_requests = max(chunked_requests, payload_id) + + var/sequence_id = chunk[DMAPI5_CHUNK_SEQUENCE_ID] + if(!isnum(sequence_id)) + return TopicResponse("[DMAPI5_CHUNK_SEQUENCE_ID] is not a number!") + + var/total_chunks = chunk[DMAPI5_CHUNK_TOTAL] + if(!isnum(total_chunks)) + return TopicResponse("[DMAPI5_CHUNK_TOTAL] is not a number!") + + if(total_chunks == 0) + return TopicResponse("[DMAPI5_CHUNK_TOTAL] is zero!") + + var/payload = chunk[DMAPI5_CHUNK_PAYLOAD] + if(!istext(payload)) + return TopicResponse("[DMAPI5_CHUNK_PAYLOAD] is not text!") + + var/cache_key = "request[payload_id]" + var/payloads = chunked_topics[cache_key] + + if(!payloads) + payloads = new /list(total_chunks) + chunked_topics[cache_key] = payloads + + if(total_chunks != length(payloads)) + chunked_topics -= cache_key + return TopicResponse("Received differing total chunks for same [DMAPI5_CHUNK_PAYLOAD_ID]! Invalidating [DMAPI5_CHUNK_PAYLOAD_ID]!") + + var/pre_existing_chunk = payloads[sequence_id + 1] + if(pre_existing_chunk && pre_existing_chunk != payload) + chunked_topics -= cache_key + return TopicResponse("Received differing payload for same [DMAPI5_CHUNK_SEQUENCE_ID]! Invalidating [DMAPI5_CHUNK_PAYLOAD_ID]!") + + payloads[sequence_id + 1] = payload + + var/list/missing_sequence_ids = list() + for(var/i in 1 to total_chunks) + if(!payloads[i]) + missing_sequence_ids += i - 1 + + if(length(missing_sequence_ids)) + return list(DMAPI5_MISSING_CHUNKS = missing_sequence_ids) + + chunked_topics -= cache_key + var/full_json = jointext(payloads, "") + + return ProcessRawTopic(full_json, FALSE) + + if(DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK) + var/payload_id = topic_parameters[DMAPI5_CHUNK_PAYLOAD_ID] + if(!isnum(payload_id)) + return TopicResponse("[DMAPI5_CHUNK_PAYLOAD_ID] is not a number!") + + // Always updated the highest known payload ID + chunked_requests = max(chunked_requests, payload_id) + + var/list/missing_chunks = topic_parameters[DMAPI5_MISSING_CHUNKS] + if(!istype(missing_chunks) || !length(missing_chunks)) + return TopicResponse("Missing or empty [DMAPI5_MISSING_CHUNKS]!") + + var/sequence_id_to_send = missing_chunks[1] + if(!isnum(sequence_id_to_send)) + return TopicResponse("[DMAPI5_MISSING_CHUNKS] contained a non-number!") + + var/cache_key = ResponseTopicChunkCacheKey(payload_id) + var/list/chunks = chunked_topics[cache_key] + if(!chunks) + return TopicResponse("Unknown response chunk set: P[payload_id]!") + + // sequence IDs in interop chunking are always zero indexed + var/chunk_to_send = chunks[sequence_id_to_send + 1] + if(!chunk_to_send) + return TopicResponse("Sequence ID [sequence_id_to_send] is not present in response chunk P[payload_id]!") + + if(length(missing_chunks) == 1) + // sending last chunk, purge the cache + chunked_topics -= cache_key + + return chunk_to_send + + if(DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST) + var/message = topic_parameters[DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE] + if (!istext(message)) + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE]") + + TGS_WORLD_ANNOUNCE(message) + return TopicResponse() + + return TopicResponse("Unknown command: [command]") + +/datum/tgs_api/v5/proc/WorldBroadcast(message) + set waitfor = FALSE + TGS_WORLD_ANNOUNCE(message) diff --git a/mods/~_ss220/tgs/v5/undefs.dm b/mods/~_ss220/tgs/v5/undefs.dm new file mode 100644 index 0000000000000..d531d4b7b9dd1 --- /dev/null +++ b/mods/~_ss220/tgs/v5/undefs.dm @@ -0,0 +1,118 @@ +#undef DMAPI5_PARAM_SERVER_PORT +#undef DMAPI5_PARAM_ACCESS_IDENTIFIER + +#undef DMAPI5_BRIDGE_DATA +#undef DMAPI5_TOPIC_DATA + +#undef DMAPI5_BRIDGE_REQUEST_LIMIT +#undef DMAPI5_TOPIC_REQUEST_LIMIT +#undef DMAPI5_TOPIC_RESPONSE_LIMIT + +#undef DMAPI5_BRIDGE_COMMAND_STARTUP +#undef DMAPI5_BRIDGE_COMMAND_PRIME +#undef DMAPI5_BRIDGE_COMMAND_REBOOT +#undef DMAPI5_BRIDGE_COMMAND_KILL +#undef DMAPI5_BRIDGE_COMMAND_CHAT_SEND +#undef DMAPI5_BRIDGE_COMMAND_CHUNK + +#undef DMAPI5_PARAMETER_ACCESS_IDENTIFIER +#undef DMAPI5_PARAMETER_CUSTOM_COMMANDS +#undef DMAPI5_PARAMETER_TOPIC_PORT + +#undef DMAPI5_CHUNK +#undef DMAPI5_CHUNK_PAYLOAD +#undef DMAPI5_CHUNK_TOTAL +#undef DMAPI5_CHUNK_SEQUENCE_ID +#undef DMAPI5_CHUNK_PAYLOAD_ID + +#undef DMAPI5_MISSING_CHUNKS + +#undef DMAPI5_RESPONSE_ERROR_MESSAGE + +#undef DMAPI5_BRIDGE_PARAMETER_COMMAND_TYPE +#undef DMAPI5_BRIDGE_PARAMETER_CURRENT_PORT +#undef DMAPI5_BRIDGE_PARAMETER_VERSION +#undef DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE +#undef DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL + +#undef DMAPI5_BRIDGE_RESPONSE_NEW_PORT +#undef DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION + +#undef DMAPI5_CHAT_MESSAGE_CHANNEL_IDS + +#undef DMAPI5_RUNTIME_INFORMATION_ACCESS_IDENTIFIER +#undef DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION +#undef DMAPI5_RUNTIME_INFORMATION_SERVER_PORT +#undef DMAPI5_RUNTIME_INFORMATION_API_VALIDATE_ONLY +#undef DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME +#undef DMAPI5_RUNTIME_INFORMATION_REVISION +#undef DMAPI5_RUNTIME_INFORMATION_TEST_MERGES +#undef DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL +#undef DMAPI5_RUNTIME_INFORMATION_VISIBILITY + +#undef DMAPI5_CHAT_UPDATE_CHANNELS + +#undef DMAPI5_TEST_MERGE_TIME_MERGED +#undef DMAPI5_TEST_MERGE_REVISION +#undef DMAPI5_TEST_MERGE_TITLE_AT_MERGE +#undef DMAPI5_TEST_MERGE_BODY_AT_MERGE +#undef DMAPI5_TEST_MERGE_URL +#undef DMAPI5_TEST_MERGE_AUTHOR +#undef DMAPI5_TEST_MERGE_NUMBER +#undef DMAPI5_TEST_MERGE_PULL_REQUEST_REVISION +#undef DMAPI5_TEST_MERGE_COMMENT + +#undef DMAPI5_CHAT_COMMAND_NAME +#undef DMAPI5_CHAT_COMMAND_PARAMS +#undef DMAPI5_CHAT_COMMAND_USER + +#undef DMAPI5_EVENT_NOTIFICATION_TYPE +#undef DMAPI5_EVENT_NOTIFICATION_PARAMETERS + +#undef DMAPI5_TOPIC_COMMAND_CHAT_COMMAND +#undef DMAPI5_TOPIC_COMMAND_EVENT_NOTIFICATION +#undef DMAPI5_TOPIC_COMMAND_CHANGE_PORT +#undef DMAPI5_TOPIC_COMMAND_CHANGE_REBOOT_STATE +#undef DMAPI5_TOPIC_COMMAND_INSTANCE_RENAMED +#undef DMAPI5_TOPIC_COMMAND_CHAT_CHANNELS_UPDATE +#undef DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE +#undef DMAPI5_TOPIC_COMMAND_HEALTHCHECK +#undef DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH +#undef DMAPI5_TOPIC_COMMAND_SEND_CHUNK +#undef DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK +#undef DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST + +#undef DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE +#undef DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND +#undef DMAPI5_TOPIC_PARAMETER_EVENT_NOTIFICATION +#undef DMAPI5_TOPIC_PARAMETER_NEW_PORT +#undef DMAPI5_TOPIC_PARAMETER_NEW_REBOOT_STATE +#undef DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME +#undef DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE +#undef DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION +#undef DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE + +#undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE +#undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE +#undef DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES + +#undef DMAPI5_REVISION_INFORMATION_COMMIT_SHA +#undef DMAPI5_REVISION_INFORMATION_TIMESTAMP +#undef DMAPI5_REVISION_INFORMATION_ORIGIN_COMMIT_SHA + +#undef DMAPI5_CHAT_USER_ID +#undef DMAPI5_CHAT_USER_FRIENDLY_NAME +#undef DMAPI5_CHAT_USER_MENTION +#undef DMAPI5_CHAT_USER_CHANNEL + +#undef DMAPI5_CHAT_CHANNEL_ID +#undef DMAPI5_CHAT_CHANNEL_FRIENDLY_NAME +#undef DMAPI5_CHAT_CHANNEL_CONNECTION_NAME +#undef DMAPI5_CHAT_CHANNEL_IS_ADMIN_CHANNEL +#undef DMAPI5_CHAT_CHANNEL_IS_PRIVATE_CHANNEL +#undef DMAPI5_CHAT_CHANNEL_TAG +#undef DMAPI5_CHAT_CHANNEL_EMBEDS_SUPPORTED + +#undef DMAPI5_CUSTOM_CHAT_COMMAND_NAME +#undef DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT +#undef DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY diff --git a/nano/css/icons.css b/nano/css/icons.css index 845637fefca84..277451ac4e877 100644 --- a/nano/css/icons.css +++ b/nano/css/icons.css @@ -241,7 +241,7 @@ width: 16px; height: 16px; background-image: url(uiIcons16Green.png); - background-position: -144px -96px; + background-position: -48px -112px; /* Question Mark */ background-repeat: no-repeat; zoom: 0.125; margin-left: -1px; @@ -251,70 +251,102 @@ background-image: url(uiIcons16Red.png); } -/* Command Positions */ -.mapIcon16.rank-captain { +/* Command Positions - Star */ +.mapIcon16.rank-captain, +.mapIcon16.rank-commandingofficer, +.mapIcon16.rank-executiveofficer +{ background-position: -224px -112px; } -.mapIcon16.rank-headofpersonnel { - background-position: -112px -96px; -} -.mapIcon16.rank-headofsecurity { - background-position: -112px -128px; -} -.mapIcon16.rank-chiefengineer { - background-position: -176px -112px; -} -.mapIcon16.rank-researchdirector { - background-position: -128px -128px; -} -.mapIcon16.rank-chiefmedicalofficer { - background-position: -32px -128px; -} -/* Engineering Positions */ -.mapIcon16.rank-engineer { - background-position: -176px -112px; +/* Command Support Positions - Chainlink */ +.mapIcon16.rank-headofpersonnel, +.mapIcon16.rank-bridgeofficer, +.mapIcon16.rank-internalaffairsagent, +.mapIcon16.rank-solgovrepresentative, +.mapIcon16.rank-seniorenlistedadvisor, +.mapIcon16.rank-workplaceliaison +{ + background-position: -240 -112px; } -.mapIcon16.rank-atmospherictechnician { + +/* Engineering Positions - Wrench */ +.mapIcon16.rank-chiefengineer, +.mapIcon16.rank-engineer, +.mapIcon16.rank-atmospherictechnician, +.mapIcon16.rank-seniorengineer, +.mapIcon16.rank-engineertrainee, +.mapIcon16.rank-roboticist +{ background-position: -176px -112px; } -/* Medical Positions */ -.mapIcon16.rank-medicaldoctor { - background-position: -32px -128px; -} -.mapIcon16.rank-geneticist { - background-position: -32px -128px; -} -.mapIcon16.rank-psychiatrist { - background-position: -32px -128px; -} -.mapIcon16.rank-chemist { +/* Medical Positions - Plus */ +.mapIcon16.rank-chiefmedicalofficer, +.mapIcon16.rank-medicaldoctor, +.mapIcon16.rank-geneticist, +.mapIcon16.rank-psychiatrist, +.mapIcon16.rank-pharmacist, +.mapIcon16.rank-paramedic, +.mapIcon16.rank-physician, +.mapIcon16.rank-medicalresident, +.mapIcon16.rank-medicaltechnician, +.mapIcon16.rank-traineemedicaltechnician, +.mapIcon16.rank-counselor +{ background-position: -32px -128px; } -/* Science Positions */ -.mapIcon16.rank-scientist { - background-position: -128px -128px; -} -.mapIcon16.rank-geneticist { - background-position: -128px -128px; -} -.mapIcon16.rank-roboticist { - background-position: -128px -128px; -} -.mapIcon16.rank-xenobiologist { +/* Science Positions - Lightbulb */ +.mapIcon16.rank-chiefscienceofficer, +.mapIcon16.rank-researchdirector, +.mapIcon16.rank-scientist, +.mapIcon16.rank-geneticist, +.mapIcon16.rank-xenobiologist, +.mapIcon16.rank-seniorresearcher, +.mapIcon16.rank-researchassistant +{ background-position: -128px -128px; } -/* Security Positions */ -.mapIcon16.rank-warden { - background-position: -112px -128px; -} -.mapIcon16.rank-detective { +/* Security Positions - Key */ +.mapIcon16.rank-headofsecurity, +.mapIcon16.rank-chiefofsecurity, +.mapIcon16.rank-warden, +.mapIcon16.rank-detective, +.mapIcon16.rank-securityofficer, +.mapIcon16.rank-brigchief, +.mapIcon16.rank-forensictechnician, +.mapIcon16.rank-masteratarms +{ background-position: -112px -128px; } -.mapIcon16.rank-securityofficer { - background-position: -112px -128px; + +/* Exploration Positions - Flag */ +.mapIcon16.rank-pathfinder, +.mapIcon16.rank-shuttle-pilot, +.mapIcon16.rank-explorer +{ + background-position: -16px -112px } +/* Other Crew - Person */ +.mapIcon16.rank-assistant, +.mapIcon16.rank-cargotechnician, +.mapIcon16.rank-janitor, +.mapIcon16.rank-shaftminer +.mapIcon16.rank-bartender, +.mapIcon16.rank-cook, +.mapIcon16.rank-passenger, +.mapIcon16.rank-chiefsteward, +.mapIcon16.rank-chaplain, +.mapIcon16.rank-sanitation, +.mapIcon16.rank-technician, +.mapIcon16.rank-steward, +.mapIcon16.rank-crewman, +.mapIcon16.rank-deckchief, +.mapIcon16.rank-decktechnician, +.mapIcon16.rank-prospector +{ + background-position: -144px -96px; +} diff --git a/nano/images/sierra/sierra-1.png b/nano/images/sierra/sierra-1.png new file mode 100644 index 0000000000000..3b680f01cd4fb Binary files /dev/null and b/nano/images/sierra/sierra-1.png differ diff --git a/nano/images/sierra/sierra-2.png b/nano/images/sierra/sierra-2.png new file mode 100644 index 0000000000000..1dc8ed45953d4 Binary files /dev/null and b/nano/images/sierra/sierra-2.png differ diff --git a/nano/images/sierra/sierra-3.png b/nano/images/sierra/sierra-3.png new file mode 100644 index 0000000000000..84e69f967b936 Binary files /dev/null and b/nano/images/sierra/sierra-3.png differ diff --git a/nano/images/sierra/sierra-4.png b/nano/images/sierra/sierra-4.png new file mode 100644 index 0000000000000..975cebb62655f Binary files /dev/null and b/nano/images/sierra/sierra-4.png differ diff --git a/nano/images/sierra/sierra-5.png b/nano/images/sierra/sierra-5.png new file mode 100644 index 0000000000000..57a40e380300f Binary files /dev/null and b/nano/images/sierra/sierra-5.png differ diff --git a/nano/js/libraries/jquery.js b/nano/js/libraries/jquery.js index 732203fdc63ad..02d42a2db5817 100644 --- a/nano/js/libraries/jquery.js +++ b/nano/js/libraries/jquery.js @@ -10337,4 +10337,4 @@ if ( typeof noGlobal === strundefined ) { return jQuery; -})); \ No newline at end of file +})); diff --git a/nano/js/nano_base_callbacks.js b/nano/js/nano_base_callbacks.js index 29fb6e8954ded..ebeb958747d29 100644 --- a/nano/js/nano_base_callbacks.js +++ b/nano/js/nano_base_callbacks.js @@ -1,126 +1,93 @@ -// NanoBaseCallbacks is where the base callbacks (common to all templates) are stored -NanoBaseCallbacks = function () -{ - // _canClick is used to disable clicks for a short period after each click (to avoid mis-clicks) - var _canClick = true; - - var _baseBeforeUpdateCallbacks = {} - - var _baseAfterUpdateCallbacks = { - // this callback is triggered after new data is processed - // it updates the status/visibility icon and adds click event handling to buttons/links - status: function (updateData) { - var uiStatusClass; - if (updateData['config']['status'] == 2) - { - uiStatusClass = 'icon24 uiStatusGood'; - $('.linkActive').removeClass('inactive'); - } - else if (updateData['config']['status'] == 1) - { - uiStatusClass = 'icon24 uiStatusAverage'; - $('.linkActive').addClass('inactive'); - } - else - { - uiStatusClass = 'icon24 uiStatusBad' - $('.linkActive').addClass('inactive'); - } - $('#uiStatusIcon').attr('class', uiStatusClass); - - $('.linkActive').stopTime('linkPending'); - $('.linkActive').removeClass('linkPending'); - - $('.linkActive') - .off('click') - .on('click', function (event) { - event.preventDefault(); - var href = $(this).data('href'); - if (href != null && _canClick) - { - _canClick = false; - $('body').oneTime(300, 'enableClick', function () { - _canClick = true; - }); - if (updateData['config']['status'] == 2) - { - $(this).oneTime(300, 'linkPending', function () { - $(this).addClass('linkPending'); - }); - } - window.location.href = href; - } - }); - - return updateData; - }, - nanomap: function (updateData) { - $('.mapIcon') - .off('mouseenter mouseleave') - .on('mouseenter', - function (event) { - var self = this; - $('#uiMapTooltip') - .html($(this).children('.tooltip').html()) - .show() - .stopTime() - .oneTime(5000, 'hideTooltip', function () { - $(this).fadeOut(500); - }); - } - ); - - $('.zoomLink') - .off('click') - .on('click', function (event) { - event.preventDefault(); - var zoomLevel = $(this).data('zoomLevel'); - var uiMapObject = $('#uiMap'); - var uiMapWidth = uiMapObject.width() * zoomLevel; - var uiMapHeight = uiMapObject.height() * zoomLevel; - - uiMapObject.css({ - zoom: zoomLevel, - left: '50%', - top: '50%', - marginLeft: '-' + Math.floor(uiMapWidth / 2) + 'px', - marginTop: '-' + Math.floor(uiMapHeight / 2) + 'px' - }); - }); - - $('#uiMapImage').attr('src', updateData['config']['mapName'] + '-' + updateData['config']['mapZLevel'] + '.png'); - - return updateData; - } - }; - - return { - addCallbacks: function () { - NanoStateManager.addBeforeUpdateCallbacks(_baseBeforeUpdateCallbacks); - NanoStateManager.addAfterUpdateCallbacks(_baseAfterUpdateCallbacks); - }, - removeCallbacks: function () { - for (var callbackKey in _baseBeforeUpdateCallbacks) - { - if (_baseBeforeUpdateCallbacks.hasOwnProperty(callbackKey)) - { - NanoStateManager.removeBeforeUpdateCallback(callbackKey); - } - } - for (var callbackKey in _baseAfterUpdateCallbacks) - { - if (_baseAfterUpdateCallbacks.hasOwnProperty(callbackKey)) - { - NanoStateManager.removeAfterUpdateCallback(callbackKey); - } +NanoBaseCallbacks = function () { + var _canClick = true + var _baseBeforeUpdateCallbacks = {} + var _baseAfterUpdateCallbacks = { + status: function (updateData) { + var uiStatusClass + // rome-ignore lint/suspicious/noDoubleEquals: Needs checking - this might rely on coercion + if (updateData['config']['status'] == 2) { + uiStatusClass = 'icon24 uiStatusGood' + $('.linkActive').removeClass('inactive') + } + // rome-ignore lint/suspicious/noDoubleEquals: Needs checking - this might rely on coercion + else if (updateData['config']['status'] == 1) { + uiStatusClass = 'icon24 uiStatusAverage' + $('.linkActive').addClass('inactive') + } + else { + uiStatusClass = 'icon24 uiStatusBad' + $('.linkActive').addClass('inactive') + } + $('#uiStatusIcon').attr('class', uiStatusClass) + $('.linkActive').stopTime('linkPending') + $('.linkActive').removeClass('linkPending') + $('.linkActive') + .off('click') + .on('click', function (event) { + event.preventDefault() + var href = $(this).data('href') + if (href != null && _canClick) { + _canClick = false + $('body').oneTime(300, 'enableClick', function () { + _canClick = true + }) + // rome-ignore lint/suspicious/noDoubleEquals: Needs checking - this might rely on coercion + if (updateData['config']['status'] == 2) + $(this).oneTime(300, 'linkPending', function () { + $(this).addClass('linkPending') + }) + window.location.href = href } - } - }; -} (); - - - - + }) + return updateData + }, + nanomap: function (updateData) { + $('.mapIcon') + .off('mouseenter mouseleave') + .on('mouseenter', function (event) { + $('#uiMapTooltip') + .html($(this).children('.tooltip').html()) + .show() + .stopTime() + .oneTime(5000, 'hideTooltip', function () { + $(this).fadeOut(500) + }) + }) + $('.zoomLink') + .off('click') + .on('click', function (event) { + event.preventDefault() + var zoomLevel = $(this).data('zoomLevel') + var uiMapObject = $('#uiMap') + var uiMapWidth = uiMapObject.width() * zoomLevel + var uiMapHeight = uiMapObject.height() * zoomLevel + uiMapObject.css({ + zoom: zoomLevel, + left: '50%', + top: '50%', + marginLeft: '-' + Math.floor(uiMapWidth / 2) + 'px', + marginTop: '-' + Math.floor(uiMapHeight / 2) + 'px' + }) + }) + $('#uiMapImage').attr('src', updateData['config']['mapName'] + '-' + updateData['config']['mapZLevel'] + '.png') + return updateData + } + } + return { + addCallbacks: function () { + NanoStateManager.addBeforeUpdateCallbacks(_baseBeforeUpdateCallbacks) + NanoStateManager.addAfterUpdateCallbacks(_baseAfterUpdateCallbacks) + }, + removeCallbacks: function () { + for (var callbackKey in _baseBeforeUpdateCallbacks) + if (_baseBeforeUpdateCallbacks.hasOwnProperty(callbackKey)) + NanoStateManager.removeBeforeUpdateCallback(callbackKey) + for (var callbackKey in _baseAfterUpdateCallbacks) + if (_baseAfterUpdateCallbacks.hasOwnProperty(callbackKey)) + NanoStateManager.removeAfterUpdateCallback(callbackKey) + } + } +}() diff --git a/nano/js/nano_base_helpers.js b/nano/js/nano_base_helpers.js index 42b68b4f6e822..b31a3aae782cf 100644 --- a/nano/js/nano_base_helpers.js +++ b/nano/js/nano_base_helpers.js @@ -1,227 +1,143 @@ -// NanoBaseHelpers is where the base template helpers (common to all templates) are stored -NanoBaseHelpers = function () -{ - var _baseHelpers = { - // change ui styling to "syndicate mode" - syndicateMode: function() { - $('body').css("background-color","#8f1414"); - $('body').css("background-image","url('uiBackground-Syndicate.png')"); - $('body').css("background-position","50% 0"); - $('body').css("background-repeat","repeat-x"); - - $('#uiTitleFluff').css("background-image","url('uiTitleFluff-Syndicate.png')"); - $('#uiTitleFluff').css("background-position","50% 50%"); - $('#uiTitleFluff').css("background-repeat", "no-repeat"); - - return ''; - }, - // Generate a Byond link - link: function( text, icon, parameters, status, elementClass, elementId) { - - var iconHtml = ''; - var iconClass = 'noIcon'; - if (typeof icon != 'undefined' && icon) - { - iconHtml = '
    '; - iconClass = 'hasIcon'; - } - - if (typeof elementClass == 'undefined' || !elementClass) - { - elementClass = 'link'; - } - - var elementIdHtml = ''; - if (typeof elementId != 'undefined' && elementId) - { - elementIdHtml = 'id="' + elementId + '"'; - } - - if (typeof status != 'undefined' && status) - { - return ''; - } - - return '
    ' + iconHtml + text + '
    '; - }, - // Round a number to the nearest integer - round: function(number) { - return Math.round(number); - }, - // Returns the number fixed to 1 decimal - fixed: function(number) { - return Math.round(number * 10) / 10; - }, - // Round a number down to integer - floor: function(number) { - return Math.floor(number); - }, - // Round a number up to integer - ceil: function(number) { - return Math.ceil(number); - }, - // Format a string (~string("Hello {0}, how are {1}?", 'Martin', 'you') becomes "Hello Martin, how are you?") - string: function() { - if (arguments.length == 0) - { - return ''; - } - else if (arguments.length == 1) - { - return arguments[0]; - } - else if (arguments.length > 1) - { - stringArgs = []; - for (var i = 1; i < arguments.length; i++) - { - stringArgs.push(arguments[i]); - } - return arguments[0].format(stringArgs); - } - return ''; - }, - formatNumber: function(x) { - // From http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript - var parts = x.toString().split("."); - parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); - return parts.join("."); - }, - // Capitalize the first letter of a string. From http://stackoverflow.com/questions/1026069/capitalize-the-first-letter-of-string-in-javascript - capitalizeFirstLetter: function(string) { - return string.charAt(0).toUpperCase() + string.slice(1); - }, - // Display a bar. Used to show health, capacity, etc. Use difClass if the entire display bar class should be different - displayBar: function(value, rangeMin, rangeMax, styleClass, showText, difClass, direction) { - - if (rangeMin < rangeMax) - { - if (value < rangeMin) - { - value = rangeMin; - } - else if (value > rangeMax) - { - value = rangeMax; - } - } - else - { - if (value > rangeMin) - { - value = rangeMin; - } - else if (value < rangeMax) - { - value = rangeMax; - } - } - - if (typeof styleClass == 'undefined' || !styleClass) - { - styleClass = ''; - } - - if (typeof showText == 'undefined' || !showText) - { - showText = ''; - } - - if (typeof difClass == 'undefined' || !difClass) - { - difClass = '' - } - - if(typeof direction == 'undefined' || !direction) - { - direction = 'width' - } - else - { - direction = 'height' - } - - var percentage = Math.round((value - rangeMin) / (rangeMax - rangeMin) * 100); - - return '
    ' + showText + '
    '; - }, - // Display DNA Blocks (for the DNA Modifier UI) - displayDNABlocks: function(dnaString, selectedBlock, selectedSubblock, blockSize, paramKey) { - if (!dnaString) - { - return '
    Please place a valid subject into the DNA modifier.
    '; - } - - var characters = dnaString.split(''); - - var html = '
    '; - var block = 1; - var subblock = 1; - for (index in characters) - { - if (!characters.hasOwnProperty(index) || typeof characters[index] === 'object') - { - continue; - } - - var parameters; - if (paramKey.toUpperCase() == 'UI') - { - parameters = { 'selectUIBlock' : block, 'selectUISubblock' : subblock }; - } - else - { - parameters = { 'selectSEBlock' : block, 'selectSESubblock' : subblock }; - } - - var status = 'linkActive'; - if (block == selectedBlock && subblock == selectedSubblock) - { - status = 'selected'; - } - - html += '' - - index++; - if (index % blockSize == 0 && index < characters.length) - { - block++; - subblock = 1; - html += '
    '; - } - else - { - subblock++; - } - } - - html += '
    '; - - return html; - } - }; - - return { - addHelpers: function () - { - NanoTemplate.addHelpers(_baseHelpers); - }, - removeHelpers: function () - { - for (var helperKey in _baseHelpers) - { - if (_baseHelpers.hasOwnProperty(helperKey)) - { - NanoTemplate.removeHelper(helperKey); - } - } +NanoBaseHelpers = function () { + var _baseHelpers = { + syndicateMode: function () { + $('body').css("background-color","#8f1414") + $('body').css("background-image","url('uiBackground-Syndicate.png')") + $('body').css("background-position","50% 0") + $('body').css("background-repeat","repeat-x") + $('#uiTitleFluff').css("background-image","url('uiTitleFluff-Syndicate.png')") + $('#uiTitleFluff').css("background-position","50% 50%") + $('#uiTitleFluff').css("background-repeat", "no-repeat") + return '' + }, + + link: function (text, icon, parameters, status, elementClass, elementId) { + var iconHtml = '' + var iconClass = 'noIcon' + if (typeof icon !== 'undefined' && icon) { + iconHtml = '
    ' + iconClass = 'hasIcon' + } + if (typeof elementClass === 'undefined' || !elementClass) + elementClass = 'link' + var elementIdHtml = '' + if (typeof elementId !== 'undefined' && elementId) { + elementIdHtml = 'id="' + elementId + '"' + } + if (typeof status !== 'undefined' && status) + return '' + return '
    ' + iconHtml + text + '
    ' + }, + + round: function (number) { + return Math.round(number) + }, + + fixed: function (number) { + return Math.round(number * 10) / 10 + }, + + floor: function (number) { + return Math.floor(number) + }, + + ceil: function (number) { + return Math.ceil(number) + }, + + // Format a string (~string("Hello {0}, how are {1}?", 'Martin', 'you') becomes "Hello Martin, how are you?") + string: function () { + if (arguments.length === 0) + return '' + else if (arguments.length === 1) + return arguments[0] + var stringArgs = [] + for (var i = 1; i < arguments.length; i++) + stringArgs.push(arguments[i]) + return arguments[0].format(stringArgs) + }, + + formatNumber: function(x) { + var parts = x.toString().split(".") + parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + return parts.join(".") + }, + + capitalizeFirstLetter: function(string) { + return string.charAt(0).toUpperCase() + string.slice(1) + }, + + displayBar: function (value, rangeMin, rangeMax, styleClass, showText, difClass, direction) { + if (rangeMin < rangeMax) { + if (value < rangeMin) + value = rangeMin + else if (value > rangeMax) + value = rangeMax + } + else if (value > rangeMin) + value = rangeMin + else if (value < rangeMax) + value = rangeMax + if (typeof styleClass === 'undefined' || !styleClass) + styleClass = '' + if (typeof showText === 'undefined' || !showText) + showText = '' + if (typeof difClass === 'undefined' || !difClass) + difClass = '' + if (typeof direction === 'undefined' || !direction) + direction = 'width' + else + direction = 'height' + var percentage = Math.round((value - rangeMin) / (rangeMax - rangeMin) * 100) + return '
    ' + showText + '
    ' + }, + + displayDNABlocks: function (dnaString, selectedBlock, selectedSubblock, blockSize, paramKey) { + if (!dnaString) + return '
    Please place a valid subject into the DNA modifier.
    ' + var characters = dnaString.split('') + var html = '
    ' + var block = 1 + var subblock = 1 + + for (index in characters) { + if (!characters.hasOwnProperty(index) || typeof characters[index] === 'object') + continue + var parameters + if (paramKey.toUpperCase() === 'UI') + parameters = { 'selectUIBlock' : block, 'selectUISubblock' : subblock } + else + parameters = { 'selectSEBlock' : block, 'selectSESubblock' : subblock } + + var status = 'linkActive' + if (block === selectedBlock && subblock === selectedSubblock) + status = 'selected' + + html += '' + + index++ + if (index % blockSize === 0 && index < characters.length) { + block++ + subblock = 1 + html += '
    ' } - }; -} (); - - - - - - - + else + subblock++ + } + html += '
    ' + return html + } + } + + return { + addHelpers: function () { + NanoTemplate.addHelpers(_baseHelpers) + }, + + removeHelpers: function () { + for (var helperKey in _baseHelpers) + if (_baseHelpers.hasOwnProperty(helperKey)) + NanoTemplate.removeHelper(helperKey) + } + } +}() diff --git a/nano/js/nano_state.js b/nano/js/nano_state.js index 14291de953dd6..f08afc4a154a7 100644 --- a/nano/js/nano_state.js +++ b/nano/js/nano_state.js @@ -1,124 +1,78 @@ -// This is the base state class, it is not to be used directly - function NanoStateClass() { - /*if (typeof this.key != 'string' || !this.key.length) - { - alert('ERROR: Tried to create a state with an invalid state key: ' + this.key); - return; - } - - this.key = this.key.toLowerCase(); - - NanoStateManager.addState(this);*/ } -NanoStateClass.prototype.key = null; -NanoStateClass.prototype.layoutRendered = false; -NanoStateClass.prototype.contentRendered = false; -NanoStateClass.prototype.mapInitialised = false; +NanoStateClass.prototype.key = null +NanoStateClass.prototype.layoutRendered = false +NanoStateClass.prototype.contentRendered = false +NanoStateClass.prototype.mapInitialised = false NanoStateClass.prototype.isCurrent = function () { - return NanoStateManager.getCurrentState() == this; -}; + return NanoStateManager.getCurrentState() === this +} NanoStateClass.prototype.onAdd = function (previousState) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - NanoBaseCallbacks.addCallbacks(); - NanoBaseHelpers.addHelpers(); -}; + NanoBaseCallbacks.addCallbacks() + NanoBaseHelpers.addHelpers() +} NanoStateClass.prototype.onRemove = function (nextState) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - NanoBaseCallbacks.removeCallbacks(); - NanoBaseHelpers.removeHelpers(); -}; + NanoBaseCallbacks.removeCallbacks() + NanoBaseHelpers.removeHelpers() +} NanoStateClass.prototype.onBeforeUpdate = function (data) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - data = NanoStateManager.executeBeforeUpdateCallbacks(data); - - return data; // Return data to continue, return false to prevent onUpdate and onAfterUpdate -}; + data = NanoStateManager.executeBeforeUpdateCallbacks(data) + return data +} NanoStateClass.prototype.onUpdate = function (data) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - try - { - if (!this.layoutRendered || (data['config'].hasOwnProperty('autoUpdateLayout') && data['config']['autoUpdateLayout'])) - { - $("#uiLayout").html(NanoTemplate.parse('layout', data)); // render the 'mail' template to the #mainTemplate div - this.layoutRendered = true; - } - if (!this.contentRendered || (data['config'].hasOwnProperty('autoUpdateContent') && data['config']['autoUpdateContent'])) - { - $("#uiContent").html(NanoTemplate.parse('main', data)); // render the 'mail' template to the #mainTemplate div - - if (NanoTemplate.templateExists('layoutHeader')) - { - $("#uiHeaderContent").html(NanoTemplate.parse('layoutHeader', data)); - } - this.contentRendered = true; - } - if (NanoTemplate.templateExists('mapContent')) - { - if (!this.mapInitialised) - { - // Add drag functionality to the map ui - $('#uiMap').draggable(); - - $('#uiMapTooltip') - .off('click') - .on('click', function (event) { - event.preventDefault(); - $(this).fadeOut(400); - }); - - this.mapInitialised = true; - } - - $("#uiMapContent").html(NanoTemplate.parse('mapContent', data)); // render the 'mapContent' template to the #uiMapContent div - - if (data['config'].hasOwnProperty('showMap') && data['config']['showMap']) - { - $('#uiContent').addClass('hidden'); - $('#uiMapWrapper').removeClass('hidden'); - } - else - { - $('#uiMapWrapper').addClass('hidden'); - $('#uiContent').removeClass('hidden'); - } - } - if (NanoTemplate.templateExists('mapHeader')) - { - $("#uiMapHeader").html(NanoTemplate.parse('mapHeader', data)); // render the 'mapHeader' template to the #uiMapHeader div - } - if (NanoTemplate.templateExists('mapFooter')) - { - $("#uiMapFooter").html(NanoTemplate.parse('mapFooter', data)); // render the 'mapFooter' template to the #uiMapFooter div - } + try { + if (!this.layoutRendered || (data['config'].hasOwnProperty('autoUpdateLayout') && data['config']['autoUpdateLayout'])){ + $("#uiLayout").html(NanoTemplate.parse('layout', data)) + this.layoutRendered = true } - catch(error) - { - alert('ERROR: An error occurred while rendering the UI: ' + error.message); - return; + if (!this.contentRendered || (data['config'].hasOwnProperty('autoUpdateContent') && data['config']['autoUpdateContent'])) { + $("#uiContent").html(NanoTemplate.parse('main', data)) + if (NanoTemplate.templateExists('layoutHeader')) + $("#uiHeaderContent").html(NanoTemplate.parse('layoutHeader', data)) + this.contentRendered = true } -}; + if (NanoTemplate.templateExists('mapContent')) { + if (!this.mapInitialised) { + $('#uiMap').draggable() + $('#uiMapTooltip') + .off('click') + .on('click', function (event) { + event.preventDefault() + $(this).fadeOut(400) + }) + this.mapInitialised = true + } + $("#uiMapContent").html(NanoTemplate.parse('mapContent', data)) + if (data['config'].hasOwnProperty('showMap') && data['config']['showMap']) { + $('#uiContent').addClass('hidden') + $('#uiMapWrapper').removeClass('hidden') + } + else { + $('#uiMapWrapper').addClass('hidden') + $('#uiContent').removeClass('hidden') + } + } + if (NanoTemplate.templateExists('mapHeader')) + $("#uiMapHeader").html(NanoTemplate.parse('mapHeader', data)) + if (NanoTemplate.templateExists('mapFooter')) + $("#uiMapFooter").html(NanoTemplate.parse('mapFooter', data)) + } + catch(error) { + alert('ERROR: An error occurred while rendering the UI: ' + error.message) + return + } +} NanoStateClass.prototype.onAfterUpdate = function (data) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - NanoStateManager.executeAfterUpdateCallbacks(data); -}; + NanoStateManager.executeAfterUpdateCallbacks(data) +} NanoStateClass.prototype.alertText = function (text) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - alert(text); -}; - - + alert(text) +} diff --git a/nano/js/nano_state_default.js b/nano/js/nano_state_default.js index 65493b8c87e74..ea9da2a22951c 100644 --- a/nano/js/nano_state_default.js +++ b/nano/js/nano_state_default.js @@ -1,14 +1,8 @@ - -NanoStateDefaultClass.inheritsFrom(NanoStateClass); -var NanoStateDefault = new NanoStateDefaultClass(); +NanoStateDefaultClass.inheritsFrom(NanoStateClass) +var NanoStateDefault = new NanoStateDefaultClass() function NanoStateDefaultClass() { - - this.key = 'default'; - - //this.parent.constructor.call(this); - - this.key = this.key.toLowerCase(); - - NanoStateManager.addState(this); -} \ No newline at end of file + this.key = 'default' + this.key = this.key.toLowerCase() + NanoStateManager.addState(this) +} diff --git a/nano/js/nano_state_manager.js b/nano/js/nano_state_manager.js index bcc60cef9b9b9..1795e05759a24 100644 --- a/nano/js/nano_state_manager.js +++ b/nano/js/nano_state_manager.js @@ -1,224 +1,148 @@ -// NanoStateManager handles data from the server and uses it to render templates -NanoStateManager = function () -{ - // _isInitialised is set to true when all of this ui's templates have been processed/rendered - var _isInitialised = false; - - // the data for this ui - var _data = null; - - // this is an array of callbacks which are called when new data arrives, before it is processed - var _beforeUpdateCallbacks = {}; - // this is an array of callbacks which are called when new data arrives, before it is processed - var _afterUpdateCallbacks = {}; - - // this is an array of state objects, these can be used to provide custom javascript logic - var _states = {}; - - var _currentState = null; - - // the init function is called when the ui has loaded - // this function sets up the templates and base functionality - var init = function () - { - // We store initialData and templateData in the body tag, it's as good a place as any - _data = $('body').data('initialData'); - - if (_data == null || !_data.hasOwnProperty('config') || !_data.hasOwnProperty('data')) - { - alert('Error: Initial data did not load correctly.'); - } - - var stateKey = 'default'; - if (_data['config'].hasOwnProperty('stateKey') && _data['config']['stateKey']) - { - stateKey = _data['config']['stateKey'].toLowerCase(); - } - - NanoStateManager.setCurrentState(stateKey); - - $(document).on('templatesLoaded', function () { - doUpdate(_data); - - _isInitialised = true; - }); - }; - - // Receive update data from the server - var receiveUpdateData = function (jsonString) - { - var updateData; - - //alert("recieveUpdateData called." + "
    Type: " + typeof jsonString); //debug hook - try - { - // parse the JSON string from the server into a JSON object - updateData = jQuery.parseJSON(jsonString); - } - catch (error) - { - alert("recieveUpdateData failed. " + "
    Error name: " + error.name + "
    Error Message: " + error.message); - return; - } - - //alert("recieveUpdateData passed trycatch block."); //debug hook - - if (!updateData.hasOwnProperty('data')) - { - if (_data && _data.hasOwnProperty('data')) - { - updateData['data'] = _data['data']; - } - else - { - updateData['data'] = {}; - } - } - - if (_isInitialised) // all templates have been registered, so render them - { - doUpdate(updateData); - } - else - { - _data = updateData; // all templates have not been registered. We set _data directly here which will be applied after the template is loaded with the initial data - } - }; - - // This function does the update by calling the methods on the current state - var doUpdate = function (data) - { - if (_currentState == null) - { - return; - } - - data = _currentState.onBeforeUpdate(data); - - if (data === false) - { - alert('data is false, return'); - return; // A beforeUpdateCallback returned a false value, this prevents the render from occuring - } - - _data = data; - - _currentState.onUpdate(_data); - - _currentState.onAfterUpdate(_data); - }; - - // Execute all callbacks in the callbacks array/object provided, updateData is passed to them for processing and potential modification - var executeCallbacks = function (callbacks, data) - { - for (var key in callbacks) - { - if (callbacks.hasOwnProperty(key) && jQuery.isFunction(callbacks[key])) - { - data = callbacks[key].call(this, data); - } - } - - return data; - }; - - return { - init: function () - { - init(); - }, - receiveUpdateData: function (jsonString) - { - receiveUpdateData(jsonString); - }, - addBeforeUpdateCallback: function (key, callbackFunction) - { - _beforeUpdateCallbacks[key] = callbackFunction; - }, - addBeforeUpdateCallbacks: function (callbacks) { - for (var callbackKey in callbacks) { - if (!callbacks.hasOwnProperty(callbackKey)) - { - continue; - } - NanoStateManager.addBeforeUpdateCallback(callbackKey, callbacks[callbackKey]); - } - }, - removeBeforeUpdateCallback: function (key) - { - if (_beforeUpdateCallbacks.hasOwnProperty(key)) - { - delete _beforeUpdateCallbacks[key]; - } - }, - executeBeforeUpdateCallbacks: function (data) { - return executeCallbacks(_beforeUpdateCallbacks, data); - }, - addAfterUpdateCallback: function (key, callbackFunction) - { - _afterUpdateCallbacks[key] = callbackFunction; - }, - addAfterUpdateCallbacks: function (callbacks) { - for (var callbackKey in callbacks) { - if (!callbacks.hasOwnProperty(callbackKey)) - { - continue; - } - NanoStateManager.addAfterUpdateCallback(callbackKey, callbacks[callbackKey]); - } - }, - removeAfterUpdateCallback: function (key) - { - if (_afterUpdateCallbacks.hasOwnProperty(key)) - { - delete _afterUpdateCallbacks[key]; - } - }, - executeAfterUpdateCallbacks: function (data) { - return executeCallbacks(_afterUpdateCallbacks, data); - }, - addState: function (state) - { - if (!(state instanceof NanoStateClass)) - { - alert('ERROR: Attempted to add a state which is not instanceof NanoStateClass'); - return; - } - if (!state.key) - { - alert('ERROR: Attempted to add a state with an invalid stateKey'); - return; - } - _states[state.key] = state; - }, - setCurrentState: function (stateKey) - { - if (typeof stateKey == 'undefined' || !stateKey) { - alert('ERROR: No state key was passed!'); - return false; - } - if (!_states.hasOwnProperty(stateKey)) - { - alert('ERROR: Attempted to set a current state which does not exist: ' + stateKey); - return false; - } - - var previousState = _currentState; - - _currentState = _states[stateKey]; - - if (previousState != null) { - previousState.onRemove(_currentState); - } - - _currentState.onAdd(previousState); - - return true; - }, - getCurrentState: function () - { - return _currentState; - } - }; -} (); - \ No newline at end of file +NanoStateManager = function () { // Renders templates from server data. + var _isInitialised = false // True once all of this UIs templates are ready. + var _data = null // the data for this UI, if any. + var _beforeUpdateCallbacks = {} // Callbacks to call on NanoStateClass.onBeforeUpdate. + var _afterUpdateCallbacks = {} // Callbacks to call on NanoStateClass.onAfterUpdate. + var _states = {} // State objects for custom behavior. + var _currentState = null + + // Called when the UI loads. Sets up templates and behaviors. + var init = function () { + _data = $('body').data('initialData') + if (_data == null || !_data.hasOwnProperty('config') || !_data.hasOwnProperty('data')) + alert('Error: Initial data did not load correctly.') + var stateKey = 'default' + if (_data['config'].hasOwnProperty('stateKey') && _data['config']['stateKey']) + stateKey = _data['config']['stateKey'].toLowerCase() + NanoStateManager.setCurrentState(stateKey) + $(document).on('templatesLoaded', function () { + doUpdate(_data) + _isInitialised = true + }) + } + + // Receive update data from the server + var receiveUpdateData = function (jsonString) { + var updateData + try { + updateData = jQuery.parseJSON(jsonString) + } + catch (error) { + alert("recieveUpdateData failed. " + "
    Error name: " + error.name + "
    Error Message: " + error.message) + return + } + if (!updateData.hasOwnProperty('data')) + if (_data && _data.hasOwnProperty('data')) + updateData['data'] = _data['data'] + else + updateData['data'] = {} + if (_isInitialised) + doUpdate(updateData) + else + _data = updateData + } + + // Update the template once ready and data is available. + var doUpdate = function (data) { + if (_currentState == null) + return + data = _currentState.onBeforeUpdate(data) + if (data === false) { + alert('data is false, return') + return // No render. + } + _data = data + _currentState.onUpdate(_data) + _currentState.onAfterUpdate(_data) + } + + // Run everything in callbacks on data and return the result. + var executeCallbacks = function (callbacks, data) { + for (var key in callbacks) + if (callbacks.hasOwnProperty(key) && jQuery.isFunction(callbacks[key])) + data = callbacks[key].call(this, data) + return data + } + + return { + init: function () { + init() + }, + + receiveUpdateData: function (jsonString) { + receiveUpdateData(jsonString) + }, + + addBeforeUpdateCallback: function (key, callbackFunction) { + _beforeUpdateCallbacks[key] = callbackFunction + }, + + addBeforeUpdateCallbacks: function (callbacks) { + for (var callbackKey in callbacks) + if (callbacks.hasOwnProperty(callbackKey)) + NanoStateManager.addBeforeUpdateCallback(callbackKey, callbacks[callbackKey]) + }, + + removeBeforeUpdateCallback: function (key) { + if (_beforeUpdateCallbacks.hasOwnProperty(key)) + delete _beforeUpdateCallbacks[key] + }, + + executeBeforeUpdateCallbacks: function (data) { + return executeCallbacks(_beforeUpdateCallbacks, data) + }, + + addAfterUpdateCallback: function (key, callbackFunction) { + _afterUpdateCallbacks[key] = callbackFunction + }, + + addAfterUpdateCallbacks: function (callbacks) { + for (var callbackKey in callbacks) + if (callbacks.hasOwnProperty(callbackKey)) + NanoStateManager.addAfterUpdateCallback(callbackKey, callbacks[callbackKey]) + }, + + removeAfterUpdateCallback: function (key) { + if (_afterUpdateCallbacks.hasOwnProperty(key)) + delete _afterUpdateCallbacks[key] + }, + + executeAfterUpdateCallbacks: function (data) { + return executeCallbacks(_afterUpdateCallbacks, data) + }, + + addState: function (state) { + if (!(state instanceof NanoStateClass)) { + alert('ERROR: Attempted to add a state which is not instanceof NanoStateClass') + return + } + if (!state.key) { + alert('ERROR: Attempted to add a state with an invalid stateKey') + return + } + _states[state.key] = state + }, + + setCurrentState: function (stateKey) { + if (typeof stateKey === 'undefined' || !stateKey) { + alert('ERROR: No state key was passed!') + return false + } + if (!_states.hasOwnProperty(stateKey)) { + alert('ERROR: Attempted to set a current state which does not exist: ' + stateKey) + return false + } + var previousState = _currentState; + _currentState = _states[stateKey] + + if (previousState != null) + previousState.onRemove(_currentState) + _currentState.onAdd(previousState) + return true + }, + + getCurrentState: function () { + return _currentState + } + } +}() diff --git a/nano/js/nano_template.js b/nano/js/nano_template.js index f8f5d2659485a..4885f99f5c54c 100644 --- a/nano/js/nano_template.js +++ b/nano/js/nano_template.js @@ -1,135 +1,107 @@ - var NanoTemplate = function () { - - var _templateData = {}; - - var _templates = {}; - var _compiledTemplates = {}; - - var _helpers = {}; +var _templateData = {} +var _templates = {} +var _compiledTemplates = {} +var _helpers = {} var init = function () { - // We store templateData in the body tag, it's as good a place as any - _templateData = $('body').data('templateData'); - - if (_templateData == null) - { - alert('Error: Template data did not load correctly.'); - } - - loadNextTemplate(); - }; + _templateData = $('body').data('templateData') + if (_templateData == null) + alert('Error: Template data did not load correctly.') + loadNextTemplate() + } var loadNextTemplate = function () { - // we count the number of templates for this ui so that we know when they've all been rendered - var templateCount = Object.size(_templateData); + var templateCount = Object.size(_templateData) + + if (!templateCount) { + $(document).trigger('templatesLoaded') + return + } + for (var key in _templateData) { + if (!_templateData.hasOwnProperty(key)) + continue + $.when($.ajax({ + url: _templateData[key], + cache: false, + dataType: 'text' + })) + .done(function(templateMarkup) { + templateMarkup += '
    ' + try { + NanoTemplate.addTemplate(key, templateMarkup) + } + catch(error) { + alert('ERROR: An error occurred while loading the UI: ' + error.message) + return + } + delete _templateData[key] + loadNextTemplate() + }) + .fail(function () { + alert('ERROR: Loading template ' + key + '(' + _templateData[key] + ') failed!') + }) + return + } + } - if (!templateCount) - { - $(document).trigger('templatesLoaded'); - return; + var compileTemplates = function () { + for (var key in _templates) { + try { + _compiledTemplates[key] = doT.template(_templates[key], null, _templates) } - - // load markup for each template and register it - for (var key in _templateData) - { - if (!_templateData.hasOwnProperty(key)) - { - continue; - } - - $.when($.ajax({ - url: _templateData[key], - cache: false, - dataType: 'text' - })) - .done(function(templateMarkup) { - - templateMarkup += '
    '; - - try - { - NanoTemplate.addTemplate(key, templateMarkup); - } - catch(error) - { - alert('ERROR: An error occurred while loading the UI: ' + error.message); - return; - } - - delete _templateData[key]; - - loadNextTemplate(); - }) - .fail(function () { - alert('ERROR: Loading template ' + key + '(' + _templateData[key] + ') failed!'); - }); - - return; + catch (error) { + alert(error.message) } + } } - var compileTemplates = function () { + return { + init: function () { + init() + }, - for (var key in _templates) { - try { - _compiledTemplates[key] = doT.template(_templates[key], null, _templates) - } - catch (error) { - alert(error.message); - } - } - }; + addTemplate: function (key, templateString) { + _templates[key] = templateString + }, - return { - init: function () { - init(); - }, - addTemplate: function (key, templateString) { - _templates[key] = templateString; - }, - templateExists: function (key) { - return _templates.hasOwnProperty(key); - }, - parse: function (templateKey, data) { - if (!_compiledTemplates.hasOwnProperty(templateKey) || !_compiledTemplates[templateKey]) { - if (!_templates.hasOwnProperty(templateKey)) { - alert('ERROR: Template "' + templateKey + '" does not exist in _compiledTemplates!'); - return '

    Template error (does not exist)

    '; - } - compileTemplates(); - } - if (typeof _compiledTemplates[templateKey] != 'function') { - alert(_compiledTemplates[templateKey]); - alert('ERROR: Template "' + templateKey + '" failed to compile!'); - return '

    Template error (failed to compile)

    '; - } - return _compiledTemplates[templateKey].call(this, data['data'], data['config'], _helpers); - }, - addHelper: function (helperName, helperFunction) { - if (!jQuery.isFunction(helperFunction)) { - alert('NanoTemplate.addHelper failed to add ' + helperName + ' as it is not a function.'); - return; - } - - _helpers[helperName] = helperFunction; - }, - addHelpers: function (helpers) { - for (var helperName in helpers) { - if (!helpers.hasOwnProperty(helperName)) - { - continue; - } - NanoTemplate.addHelper(helperName, helpers[helperName]); - } - }, - removeHelper: function (helperName) { - if (helpers.hasOwnProperty(helperName)) - { - delete _helpers[helperName]; - } - } - } -}(); - + templateExists: function (key) { + return _templates.hasOwnProperty(key) + }, + parse: function (templateKey, data) { + if (!_compiledTemplates.hasOwnProperty(templateKey) || !_compiledTemplates[templateKey]) { + if (!_templates.hasOwnProperty(templateKey)) { + alert('ERROR: Template "' + templateKey + '" does not exist in _compiledTemplates!') + return '

    Template error (does not exist)

    ' + } + compileTemplates() + } + if (typeof _compiledTemplates[templateKey] !== 'function') { + alert(_compiledTemplates[templateKey]) + alert('ERROR: Template "' + templateKey + '" failed to compile!') + return '

    Template error (failed to compile)

    ' + } + return _compiledTemplates[templateKey].call(this, data['data'], data['config'], _helpers) + }, + + addHelper: function (helperName, helperFunction) { + if (!jQuery.isFunction(helperFunction)) { + alert('NanoTemplate.addHelper failed to add ' + helperName + ' as it is not a function.') + return + } + _helpers[helperName] = helperFunction + }, + + addHelpers: function (helpers) { + for (var helperName in helpers) + if (helpers.hasOwnProperty(helperName)) + NanoTemplate.addHelper(helperName, helpers[helperName]) + }, + + removeHelper: function (helperName) { + if (helpers.hasOwnProperty(helperName)) + delete _helpers[helperName] + } + } +}() diff --git a/nano/js/nano_utility.js b/nano/js/nano_utility.js index e65b7bbd1387c..665cc6fd03a2c 100644 --- a/nano/js/nano_utility.js +++ b/nano/js/nano_utility.js @@ -1,169 +1,145 @@ -// NanoUtility is the place to store utility functions -var NanoUtility = function () -{ - var _urlParameters = {}; // This is populated with the base url parameters (used by all links), which is probaby just the "src" parameter - - return { - init: function () - { - var body = $('body'); // We store data in the body tag, it's as good a place as any - - _urlParameters = body.data('urlParameters'); - }, - // generate a Byond href, combines _urlParameters with parameters - generateHref: function (parameters) - { - var queryString = '?'; - - for (var key in _urlParameters) - { - if (_urlParameters.hasOwnProperty(key)) - { - if (queryString !== '?') - { - queryString += ';'; - } - queryString += key + '=' + _urlParameters[key]; - } - } - - for (var key in parameters) - { - if (parameters.hasOwnProperty(key)) - { - if (queryString !== '?') - { - queryString += ';'; - } - queryString += key + '=' + parameters[key]; - } - } - return queryString; - } +var NanoUtility = function () { + var _urlParameters = {} + return { + init: function () { + var body = $('body') + _urlParameters = body.data('urlParameters') + }, + + generateHref: function (parameters) { + var queryString = '?' + for (var key in _urlParameters) { + if (_urlParameters.hasOwnProperty(key)) { + if (queryString !== '?') + queryString += ';' + queryString += key + '=' + _urlParameters[key] + } + } + for (var key in parameters) { + if (parameters.hasOwnProperty(key)) { + if (queryString !== '?') + queryString += ';' + queryString += key + '=' + parameters[key] + } + } + return queryString } -} (); - -if (typeof jQuery == 'undefined') { - alert('ERROR: Javascript library failed to load!'); + } +}() + +if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function (searchElement, fromIndex) { + var length = this.length + if (!length) + return -1 + else if (fromIndex >= length) + return -1 + else if ((fromIndex|0) !== fromIndex) + return -1 + else if (typeof searchElement === 'number' && searchElement !== searchElement) + return -1 + else if (fromIndex == null) + fromIndex = 0 + else if (fromIndex < -length) + fromIndex = 0 + else if (fromIndex < 0) + fromIndex += length + for (var index = fromIndex; index < length; ++index) + if (this[index] === searchElement) + return index + return -1 + } } -if (typeof doT == 'undefined') { - alert('ERROR: Template engine failed to load!'); -} - -(function() { - var _alert = window.alert; - window.alert = function(str) { - window.location = "byond://?nano_err=" + encodeURIComponent(str); - _alert(str); - }; -})(); - -// All scripts are initialised here, this allows control of init order -$(document).ready(function () { - NanoUtility.init(); - NanoStateManager.init(); - NanoTemplate.init(); -}); - -if (!Array.prototype.indexOf) -{ - Array.prototype.indexOf = function(elt /*, from*/) - { - var len = this.length; - - var from = Number(arguments[1]) || 0; - from = (from < 0) - ? Math.ceil(from) - : Math.floor(from); - if (from < 0) - from += len; - for (; from < len; from++) - { - if (from in this && - this[from] === elt) - return from; - } - return -1; - }; -}; +if (!String.prototype.format) { + String.prototype.format = function (args) { + var str = this + return str.replace(String.prototype.format.regex, function(item) { + var intVal = parseInt(item.substring(1, item.length - 1)) + var replace + if (intVal >= 0) + replace = args[intVal] + else if (intVal === -1) + replace = "{" + else if (intVal === -2) + replace = "}" + else + replace = "" + return replace + }) + } + String.prototype.format.regex = new RegExp("{-?[0-9]+}", "g") +} -if (!String.prototype.format) -{ - String.prototype.format = function (args) { - var str = this; - return str.replace(String.prototype.format.regex, function(item) { - var intVal = parseInt(item.substring(1, item.length - 1)); - var replace; - if (intVal >= 0) { - replace = args[intVal]; - } else if (intVal === -1) { - replace = "{"; - } else if (intVal === -2) { - replace = "}"; - } else { - replace = ""; - } - return replace; - }); - }; - String.prototype.format.regex = new RegExp("{-?[0-9]+}", "g"); -}; +Object.size = function (obj) { + var size = 0 + for (var key in obj) + if (obj.hasOwnProperty(key)) + size++ + return size +} -Object.size = function(obj) { - var size = 0, key; - for (var key in obj) { - if (obj.hasOwnProperty(key)) size++; +if (!window.console) { + window.console = { + log: function (str) { + return false } - return size; -}; - -if(!window.console) { - window.console = { - log : function(str) { - return false; - } - }; -}; + } +} String.prototype.toTitleCase = function () { - var smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|vs?\.?|via)$/i; - - return this.replace(/([^\W_]+[^\s-]*) */g, function (match, p1, index, title) { - if (index > 0 && index + p1.length !== title.length && - p1.search(smallWords) > -1 && title.charAt(index - 2) !== ":" && - title.charAt(index - 1).search(/[^\s-]/) < 0) { - return match.toLowerCase(); - } - - if (p1.substr(1).search(/[A-Z]|\../) > -1) { - return match; - } - - return match.charAt(0).toUpperCase() + match.substr(1); - }); -}; - -$.ajaxSetup({ - cache: false -}); + var smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|vs?\.?|via)$/i + return this.replace(/([^\W_]+[^\s-]*) */g, function (match, p1, index, title) { + if (index > 0 && index + p1.length !== title.length && + p1.search(smallWords) > -1 && title.charAt(index - 2) !== ":" && + title.charAt(index - 1).search(/[^\s-]/) < 0) { + return match.toLowerCase() + } + if (p1.substr(1).search(/[A-Z]|\../) > -1) { + return match + } + return match.charAt(0).toUpperCase() + match.substr(1) + }) +} Function.prototype.inheritsFrom = function (parentClassOrObject) { - this.prototype = new parentClassOrObject; - this.prototype.constructor = this; - this.prototype.parent = parentClassOrObject.prototype; - return this; -}; + this.prototype = new parentClassOrObject + this.prototype.constructor = this + this.prototype.parent = parentClassOrObject.prototype + return this +} if (!String.prototype.trim) { - String.prototype.trim = function () { - return this.replace(/^\s+|\s+$/g, ''); - }; + String.prototype.trim = function () { + return this.replace(/^\s+|\s+$/g, '') + } } -// Replicate the ckey proc from BYOND if (!String.prototype.ckey) { - String.prototype.ckey = function () { - return this.replace(/\W/g, '').toLowerCase(); - }; -} \ No newline at end of file + String.prototype.ckey = function () { + return this.replace(/\W/g, '').toLowerCase() + } +} + +if (typeof jQuery === 'undefined') + alert('ERROR: Javascript library failed to load!') +if (typeof doT === 'undefined') + alert('ERROR: Template engine failed to load!') + +(function () { + var _alert = window.alert + window.alert = function(str) { + window.location = "byond://?nano_err=" + encodeURIComponent(str) + _alert(str) + } +})() + +$(document).ready(function () { + NanoUtility.init() + NanoStateManager.init() + NanoTemplate.init() +}) + +$.ajaxSetup({ + cache: false +}) diff --git a/nano/templates/accounts_terminal.tmpl b/nano/templates/accounts_terminal.tmpl index b553828113461..58f8c4b105461 100644 --- a/nano/templates/accounts_terminal.tmpl +++ b/nano/templates/accounts_terminal.tmpl @@ -138,7 +138,7 @@ {{else}}
    -

    NanoTrasen Accounts

    +

    Nanotrasen Accounts

    {{if data.accounts}} diff --git a/nano/templates/apc.tmpl b/nano/templates/apc.tmpl deleted file mode 100644 index 2936fc52ae859..0000000000000 --- a/nano/templates/apc.tmpl +++ /dev/null @@ -1,189 +0,0 @@ -{{if data.failTime}} -
    -

    SYSTEM FAILURE

    - I/O regulators malfunction detected! Waiting for system reboot...
    - Automatic reboot in {{:data.failTime}} seconds... - {{:helper.link('Reboot Now', 'refresh', {'reboot' : 1})}}


    -
    -{{else}} -
    - {{if data.siliconUser}} -
    - Interface Lock: -
    -
    - {{:helper.link('Engaged', 'locked', {'toggleaccess' : 1}, data.locked ? 'selected' : null)}}{{:helper.link('Disengaged', 'unlocked', {'toggleaccess' : 1}, data.malfStatus >= 2 ? 'linkOff' : (data.locked ? null : 'selected'))}} -
    -
    - {{else}} - {{if data.locked}} - Swipe an ID card to unlock this interface - {{else}} - Swipe an ID card to lock this interface - {{/if}} - {{/if}} -
    - -
    - -

    Power Status

    - -
    -
    - Main Breaker: -
    -
    - {{if data.locked && !data.siliconUser}} - {{if data.isOperating}} - On - {{else}} - Off - {{/if}} - {{else}} - {{:helper.link('On', 'power', {'breaker' : 1}, data.isOperating ? 'selected' : null)}}{{:helper.link('Off', 'close', {'breaker' : 1}, data.isOperating ? null : 'selected')}} - {{/if}} -
    -
    - -
    -
    - External Power: -
    -
    - {{if data.externalPower == 2}} - Good - {{else data.externalPower == 1}} - Low - {{else}} - None - {{/if}} -
    -
    - -
    -
    - Power Cell: -
    - {{if data.powerCellStatus == null}} -
    - Power cell removed. -
    - {{else}} - - {{:helper.displayBar(data.powerCellStatus, 0, 100, (data.powerCellStatus >= 50) ? 'good' : (data.powerCellStatus >= 25) ? 'average' : 'bad')}} -
    - {{:helper.round(data.powerCellStatus*10)/10}}% -
    - {{/if}} -
    - - {{if data.powerCellStatus != null}} -
    -
    - Charge Mode: -
    -
    - {{if data.locked && !data.siliconUser}} - {{if data.chargeMode}} - Auto - {{else}} - Off - {{/if}} - {{else}} - {{:helper.link('Auto', 'refresh', {'cmode' : 1}, data.chargeMode ? 'selected' : null)}}{{:helper.link('Off', 'close', {'cmode' : 1}, data.chargeMode ? null : 'selected')}} - {{/if}} -   - {{if data.chargingStatus > 1}} - [Fully Charged] - {{else data.chargingStatus == 1}} - [Charging] - {{else}} - [Not Charging] - {{/if}} -
    -
    - {{/if}} - - -

    Power Channels

    - - {{for data.powerChannels}} -
    -
    - {{:value.title}}: -
    -
    - {{:value.powerLoad}} W -
    -
    -    - {{if value.status < data.pChan_On}} - Off - {{else}} - On - {{/if}} - {{if data.locked}} - {{if value.status == data.pChan_Off_A || value.status == data.pChan_On_A}} -   Auto - {{else}} -   Manual - {{/if}} - {{/if}} -
    - {{if !data.locked || data.siliconUser}} -
    - {{:helper.link('Auto', 'refresh', value.topicParams.auto, (value.status == data.pChan_Off_A || value.status == data.pChan_On_A) ? 'selected' : null)}} - {{:helper.link('On', 'power', value.topicParams.on, (value.status == data.pChan_Off_T || value.status == data.pChan_On) ? 'selected' : null)}} - {{:helper.link('Off', 'close', value.topicParams.off, (value.status == data.pChan_Off) ? 'selected' : null)}} -
    - {{/if}} -
    - {{/for}} - -
    -
    - Total Load: -
    -
    - {{if data.totalCharging}} - {{:data.totalLoad}}W (+ {{:data.totalCharging}}W Charging) - {{else}} - {{:data.totalLoad}}W - {{/if}} -
    -
    - -
     
    - -
    -
    - Cover Lock: -
    -
    - {{if data.locked && !data.siliconUser}} - {{if data.coverLocked}} - Engaged - {{else}} - Disengaged - {{/if}} - {{else}} - {{:helper.link('Engaged', 'locked', {'lock' : 1}, data.coverLocked ? 'selected' : null)}}{{:helper.link('Disengaged', 'unlocked', {'lock' : 1}, data.coverLocked ? null : 'selected')}} - {{/if}} -
    -
    - - {{if data.siliconUser}} -

    System Overrides

    - -
    - {{:helper.link('Overload Lighting Circuit', 'lightbulb', {'overload' : 1})}} - {{if data.malfStatus == 1}} - {{:helper.link('Override Programming', 'script', {'malfhack' : 1})}} - {{else data.malfStatus > 1}} -
    APC Hacked
    - {{/if}} -
    - {{/if}} - -
    -{{/if}} \ No newline at end of file diff --git a/nano/templates/appearance_changer.tmpl b/nano/templates/appearance_changer.tmpl index cddc1a6f76924..af595c6a7e9b0 100644 --- a/nano/templates/appearance_changer.tmpl +++ b/nano/templates/appearance_changer.tmpl @@ -1,88 +1,88 @@ -{{if data.change_race}} -
    -
    - Species: -
    -
    - {{for data.species}} - {{:helper.link(value.specimen, null, { 'race' : value.specimen}, null, data.specimen == value.specimen ? 'selected' : null)}} - {{/for}} -
    -
    -{{/if}} - -{{if data.change_gender}} -
    -
    - Gender: -
    -
    - {{for data.genders}} - {{:helper.link(value.gender_name, null, { 'gender' : value.gender_key}, null, data.gender == value.gender_key ? 'selected' : null)}} - {{/for}} -
    -
    -{{/if}} - -{{if data.change_eye_color || data.change_skin_tone || data.change_skin_color || data.change_hair_color || data.change_facial_hair_color}} -
    -
    - Colors: -
    -
    - {{if data.change_eye_color}} - {{:helper.link('Change eye color', null, { 'eye_color' : 1})}} - {{/if}} - {{if data.change_skin_tone}} - {{:helper.link('Change skin tone', null, { 'skin_tone' : 1})}} - {{/if}} - {{if data.change_skin_color}} - {{:helper.link('Change skin color', null, { 'skin_color' : 1})}} - {{/if}} - {{if data.change_hair_color}} - {{:helper.link('Change hair color', null, { 'hair_color' : 1})}} - {{/if}} - {{if data.change_facial_hair_color}} - {{:helper.link('Change facial hair color', null, { 'facial_hair_color' : 1})}} - {{/if}} -
    -
    -{{/if}} - -{{if data.change_hair}} -
    -
    - Hair styles: -
    -
    - {{for data.hair_styles}} - {{:helper.link(value.hairstyle, null, { 'hair' : value.hairstyle}, null, data.hair_style == value.hairstyle ? 'selected' : null)}} - {{/for}} -
    -
    -{{/if}} - -{{if data.change_facial_hair}} -
    -
    - Facial hair styles: -
    -
    - {{for data.facial_hair_styles}} - {{:helper.link(value.facialhairstyle, null, { 'facial_hair' : value.facialhairstyle}, null, data.facial_hair_style == value.facialhairstyle ? 'selected' : null)}} - {{/for}} -
    -
    -{{/if}} -{{if data.change_languages}} -
    -
    - Languages: -
    -
    - {{for data.languages}} - {{:helper.link(value.language, null, {'language': value.language, 'language_mode': value.selected ? 'rem': 'add'}, null, value.selected ? 'selected' : null )}} - {{/for}} -
    -
    -{{/if}} +{{if data.change_race}} +
    +
    + Species: +
    +
    + {{for data.species}} + {{:helper.link(value.specimen, null, { 'race' : value.specimen}, null, data.specimen == value.specimen ? 'selected' : null)}} + {{/for}} +
    +
    +{{/if}} + +{{if data.change_gender}} +
    +
    + Gender: +
    +
    + {{for data.genders}} + {{:helper.link(value.gender_name, null, { 'gender' : value.gender_key}, null, data.gender == value.gender_key ? 'selected' : null)}} + {{/for}} +
    +
    +{{/if}} + +{{if data.change_eye_color || data.change_skin_tone || data.change_skin_color || data.change_hair_color || data.change_facial_hair_color}} +
    +
    + Colors: +
    +
    + {{if data.change_eye_color}} + {{:helper.link('Change eye color', null, { 'eye_color' : 1})}} + {{/if}} + {{if data.change_skin_tone}} + {{:helper.link('Change skin tone', null, { 'skin_tone' : 1})}} + {{/if}} + {{if data.change_skin_color}} + {{:helper.link('Change skin color', null, { 'skin_color' : 1})}} + {{/if}} + {{if data.change_hair_color}} + {{:helper.link('Change hair color', null, { 'hair_color' : 1})}} + {{/if}} + {{if data.change_facial_hair_color}} + {{:helper.link('Change facial hair color', null, { 'facial_hair_color' : 1})}} + {{/if}} +
    +
    +{{/if}} + +{{if data.change_hair}} +
    +
    + Hair styles: +
    +
    + {{for data.hair_styles}} + {{:helper.link(value.hairstyle, null, { 'hair' : value.hairstyle}, null, data.hair_style == value.hairstyle ? 'selected' : null)}} + {{/for}} +
    +
    +{{/if}} + +{{if data.change_facial_hair}} +
    +
    + Facial hair styles: +
    +
    + {{for data.facial_hair_styles}} + {{:helper.link(value.facialhairstyle, null, { 'facial_hair' : value.facialhairstyle}, null, data.facial_hair_style == value.facialhairstyle ? 'selected' : null)}} + {{/for}} +
    +
    +{{/if}} +{{if data.change_languages}} +
    +
    + Languages: +
    +
    + {{for data.languages}} + {{:helper.link(value.language, null, {'language': value.language, 'language_mode': value.selected ? 'rem': 'add'}, null, value.selected ? 'selected' : null )}} + {{/for}} +
    +
    +{{/if}} diff --git a/nano/templates/canister.tmpl b/nano/templates/canister.tmpl deleted file mode 100644 index e4033eb016445..0000000000000 --- a/nano/templates/canister.tmpl +++ /dev/null @@ -1,83 +0,0 @@ -

    Tank Status

    -
    -
    - Tank Label: -
    -
    -
    {{:data.name}}
    {{:helper.link('Relabel', 'pencil', {'relabel' : 1}, data.canLabel ? null : 'disabled')}} -
    -
    - -
    -
    - Tank Pressure: -
    -
    - {{:data.tankPressure}} kPa -
    -
    - -
    -
    - Port Status: -
    -
    - {{:data.portConnected ? 'Connected' : 'Disconnected'}} -
    -
    - -

    Holding Tank Status

    -{{if data.hasHoldingTank}} -
    -
    - Tank Label: -
    -
    -
    {{:data.holdingTank.name}}
    {{:helper.link('Eject', 'eject', {'remove_tank' : 1})}} -
    -
    - -
    -
    - Tank Pressure: -
    -
    - {{:data.holdingTank.tankPressure}} kPa -
    -
    -{{else}} -
    No holding tank inserted.
    -
     
    -{{/if}} - - -

    Release Valve Status

    -
    -
    - Release Pressure: -
    -
    - {{:helper.displayBar(data.releasePressure, data.minReleasePressure, data.maxReleasePressure)}} -
    - {{:helper.link('-', null, {'pressure_adj' : -1000}, (data.releasePressure > data.minReleasePressure) ? null : 'disabled')}} - {{:helper.link('-', null, {'pressure_adj' : -100}, (data.releasePressure > data.minReleasePressure) ? null : 'disabled')}} - {{:helper.link('-', null, {'pressure_adj' : -10}, (data.releasePressure > data.minReleasePressure) ? null : 'disabled')}} - {{:helper.link('-', null, {'pressure_adj' : -1}, (data.releasePressure > data.minReleasePressure) ? null : 'disabled')}} -
     {{:data.releasePressure}} kPa 
    - {{:helper.link('+', null, {'pressure_adj' : 1}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}} - {{:helper.link('+', null, {'pressure_adj' : 10}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}} - {{:helper.link('+', null, {'pressure_adj' : 100}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}} - {{:helper.link('+', null, {'pressure_adj' : 1000}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}} -
    -
    -
    - -
    -
    - Release Valve: -
    -
    - {{:helper.link('Open', 'unlocked', {'toggle' : 1}, data.valveOpen ? 'selected' : null)}}{{:helper.link('Close', 'locked', {'toggle' : 1}, data.valveOpen ? null : 'selected')}} -
    -
    - diff --git a/nano/templates/chem_disp.tmpl b/nano/templates/chem_disp.tmpl deleted file mode 100644 index 7e3e50cd99477..0000000000000 --- a/nano/templates/chem_disp.tmpl +++ /dev/null @@ -1,78 +0,0 @@ - -
    -
    - Dispense: -
    -
    - {{:helper.link('5', 'gear', {'amount' : 5}, (data.amount == 5) ? 'selected' : null)}} - {{:helper.link('10', 'gear', {'amount' : 10}, (data.amount == 10) ? 'selected' : null)}} - {{:helper.link('20', 'gear', {'amount' : 20}, (data.amount == 20) ? 'selected' : null)}} - {{:helper.link('30', 'gear', {'amount' : 30}, (data.amount == 30) ? 'selected' : null)}} - {{:helper.link('40', 'gear', {'amount' : 40}, (data.amount == 40) ? 'selected' : null)}} - {{:helper.link('50', 'gear', {'amount' : 50}, (data.amount == 50) ? 'selected' : null)}} - {{:helper.link('60', 'gear', {'amount' : 60}, (data.amount == 60) ? 'selected' : null)}} -


    - {{:helper.link('--', '', {'amount' : data.amount-10})}} - {{:helper.link('-', '', {'amount' : data.amount-1})}} -
    {{:data.amount}}
    - {{:helper.link('+', '', {'amount' : data.amount+1})}} - {{:helper.link('++', '', {'amount' : data.amount+10})}} -
    -
    -
     
    -
    -
    - {{if data.chemicals.length}} - {{for data.chemicals}} - {{:helper.link(value.label + " ("+value.amount+")", 'circle-arrow-s', {"dispense":value.label}, null, 'fixedLeftWide')}} - {{/for}} - {{else}} - No cartridges installed! - {{/if}} -
    -
    -
     
    -
    -
    - {{if data.glass}} - Glass - {{else}} - Beaker - {{/if}} Contents -
    -
    - {{:helper.link(data.glass ? 'Eject Glass' : 'Eject Beaker', 'eject', {'ejectBeaker' : 1}, data.isBeakerLoaded ? null : 'disabled', 'floatRight')}} -
    -
    -
    -
    -
    - {{if data.isBeakerLoaded}} - Volume: {{:data.beakerCurrentVolume}} / {{:data.beakerMaxVolume}}
    - {{for data.beakerContents}} - {{:value.volume}} units of {{:value.name}}
    - {{empty}} - - {{if data.glass}} - Glass - {{else}} - Beaker - {{/if}} is empty - - {{/for}} - {{else}} - - No - {{if data.glass}} - Glass - {{else}} - Beaker - {{/if}} loaded - - {{/if}} -
    -
    -
    diff --git a/nano/templates/chemmaster.tmpl b/nano/templates/chemmaster.tmpl deleted file mode 100644 index 282e9a8ce1d53..0000000000000 --- a/nano/templates/chemmaster.tmpl +++ /dev/null @@ -1,145 +0,0 @@ - -{{if data.analyzedReagent}} -
    - {{:data.analyzedData}} -
    -
    - {{:helper.link('Return', null, {"main": 1})}} -
    -{{else data.switchingSprite}} - {{if data.switchingSprite === "PILL"}} -
    - Select an appearance for the pills created using this machine. -
    -
    - {{for data.pillSprites}} - -
    {{:helper.link(value.image, null, {"pill_sprite" : value.index}, value.image == data.spritePill ? 'selected' : null, "linkbig link")}} - {{/for}} -
    - {{else data.switchingSprite === "BOTTLE"}} -
    - Select an appearance for the bottles created using this machine. -
    - - {{for data.bottleSprites}} - -
    {{:helper.link(value.image, null, {"bottle_sprite" : value.index}, value.image == data.spriteBottle ? 'selected' : null, "linkbig link")}} - {{/for}} -
    - {{/if}} -
    - {{:helper.link('Return', null, {"main": 1})}} -
    -{{else}} - {{if data.loadedContainer}} -
    -
    - {{:helper.link('Eject Container and Clear Buffer', null, {"eject": 1})}} -
    -
    -
    -
    - {{if data.loadedPillBottle}} - {{:helper.link(data.pillBottleBlurb, null, {"ejectp": 1})}} - {{else}} - No pill bottle inserted. - {{/if}} -
    -
    -
    -
    - Purification Mode: -
    -
    - {{:helper.link(data.isSloppy ? "Quick" : "Thorough", null, {"toggle_sloppy" : 1})}} -
    -
    -
    -
    - Transfer from buffer into: -
    -
    - {{:helper.link(data.isTransferringToBeaker ? "Container" : "Disposal", null, {"toggle" : 1})}} -
    -
    -
    -
    -
    - Container reagents -
    -
    - - {{for data.containerChemicals}} - -
    {{:value.name}} - {{:value.volume}} units    - {{:helper.link('1', null, {"add" : value.ref, "amount" : 1})}} - {{:helper.link('5', null, {"add" : value.ref, "amount" : 5})}} - {{:helper.link('10', null, {"add" : value.ref, "amount" : 10})}} - {{:helper.link('All', null, {"add" : value.ref, "amount" : value.volume})}} - {{:helper.link('(...)', null, {"addcustom" : value.ref})}} - {{:helper.link('Analyze', 'search', {"analyze" : value.ref})}} - {{empty}} - Container is empty. - {{/for}} -
    -
    -
    -
    -
    -
    - Buffer reagents -
    -
    - - {{for data.bufferChemicals}} - -
    {{:value.name}} - {{:value.volume}} units    - {{:helper.link('1', null, {"remove" : value.ref, "amount" : 1})}} - {{:helper.link('5', null, {"remove" : value.ref, "amount" : 5})}} - {{:helper.link('10', null, {"remove" : value.ref, "amount" : 10})}} - {{:helper.link('All', null, {"remove" : value.ref, "amount" : value.volume})}} - {{:helper.link('(...)', null, {"removecustom" : value.ref})}} - {{:helper.link('Analyze', 'search', {"analyze" : value.ref})}} - {{empty}} - Buffer is empty. - {{/for}} -
    -
    -
    -
    - - {{if data.productionOptions === "BASE"}} -
    - - - - -
    {{:helper.link("Create pill (max. 30u)", null, {"createpill" : 1})}} {{:helper.link(data.pillDosage, null, {"pill_dosage" : 1})}} -
    {{:helper.link("Create multiple pills", null, {"createpill_multiple" : 1})}} -
    {{:helper.link("Create bottle (max. 60u)", null, {"createbottle" : 1})}} {{:helper.link(data.bottleDosage, null, {"bottle_dosage" : 1})}} -
    -
    -
    -
    - {{:helper.link(data.spritePill, null, {"change_pill" : 1}, null, "linkbig link")}} - {{:helper.link(data.spriteBottle, null, {"change_bottle" : 1}, null, "linkbig link")}} -
    -
    - {{else data.productionOptions === "CONDIMENTS"}} -
    - - -
    {{:helper.link("Create condiment bottle (max. 50u)", null, {"createbottle" : 1})}} -
    -
    - - {{/if}} - {{else}} - No container inserted. - {{/if}} -{{/if}} \ No newline at end of file diff --git a/nano/templates/crushercontrol.tmpl b/nano/templates/crushercontrol.tmpl new file mode 100644 index 0000000000000..480f37bd2e411 --- /dev/null +++ b/nano/templates/crushercontrol.tmpl @@ -0,0 +1,84 @@ +

    Crusher Management

    +{{if data.piston_count == 0}} +
    +
    + Intialize Crusher: +
    +
    + {{:helper.link('Initialize', 'refresh', { 'initialize' : '1' })}} +
    +
    +{{/if}} +{{if data.airlock_count > 0}} +
    +
    + Airlock Control: +
    +
    + {{:helper.link('Open', 'refresh', { 'hatch_open' : '1' })}} + {{:helper.link('Close', 'refresh', { 'hatch_close' : '1' })}} +
    +
    +{{/if}} +{{if data.piston_count > 0}} +
    +
    + Activate: +
    +
    + {{if data.extending == 1}} + {{:helper.link('Start', 'alert', { 'crush' : '1' }, 'active')}} + {{:helper.link('Abort', 'alert', { 'abort' : '1' })}} + {{else}} + {{:helper.link('Start', 'alert', { 'crush' : '1' })}} + {{:helper.link('Abort', 'alert', { 'abort' : '1' }, 'disabled')}} + {{/if}} +
    +
    +{{/if}} + +

    Crusher Monitoring

    +
    +
    + Linked Pistons: +
    +
    + {{:data.piston_count}} +
    +
    +{{if data.piston_count > 0}} + + {{for data.status_pistons}} + + + {{if value.blocked == 0}} + {{if value.action == "extend"}} + + {{else}} + + {{/if}} + {{else}} + + {{/if}} + + {{/for}} +
    Piston {{:value.piston}}{{:helper.displayBar(value.progress, 0, 100, 'good')}}{{:helper.displayBar(value.progress, 0, 100, 'average')}}{{:helper.displayBar(value.progress, 0, 100, 'bad')}}
    +{{/if}} +
    +
    + Linked Airlocks: +
    +
    + {{:data.airlock_count}} +
    +
    +{{if data.message }} +
    +
    + Message: +
    +
    + {{:data.message}}{{:helper.link('', 'close', { 'close' : '1' })}} +
    +
    +{{/if}} diff --git a/nano/templates/cryo.tmpl b/nano/templates/cryo.tmpl index 60709f5077332..5a61be7611bb9 100644 --- a/nano/templates/cryo.tmpl +++ b/nano/templates/cryo.tmpl @@ -50,4 +50,16 @@ Used In File(s): \code\game\machinery\cryo.dm
    {{:helper.link('Eject Beaker', 'eject', {'ejectBeaker' : 1}, data.isBeakerLoaded ? null : 'disabled')}}
    + +
     
    +
    +
    + Cryostasis Speed: +
    +
    + {{:helper.link('Fast', null, {'goFast' : 1}, data.current_stasis_mult === data.fast_stasis_mult ? 'selected' : null)}} + {{:helper.link('Regular', null, {'goRegular' : 1}, data.current_stasis_mult === 1 ? 'selected' : null)}} + {{:helper.link('Slow', null, {'goSlow' : 1}, data.current_stasis_mult === data.slow_stasis_mult ? 'selected' : null)}} +
    +
    \ No newline at end of file diff --git a/nano/templates/disperser.tmpl b/nano/templates/disperser.tmpl index 994c8114b6da6..2140e74152c07 100644 --- a/nano/templates/disperser.tmpl +++ b/nano/templates/disperser.tmpl @@ -23,6 +23,22 @@ {{:helper.link('', 'triangle-1-se', { 'choose' : 6 }, data.overmapdir == 6 ? 'selected' : null, null)}} +
    + {{if data.coordinates}} +
    :: X + {{:helper.link(data.t_x, null, { 'setx' : 1 }, null, null)}} +
    +
    :: Y + {{:helper.link(data.t_y, null, { 'sety' : 1 }, null, null)}} +
    +
    :: Z + {{:helper.link(data.t_z, null, { 'setz' : 1 }, null, null)}} +
    + {{:helper.link('Reset Coordinates', null, { 'reset' : 1 }, null, null)}} + {{else}} + {{:helper.link('Set Coordinates', null, { 'sety' : 1, 'setx' : 1, 'setz' : 1 }, null, null)}} + {{/if}} +
    @@ -85,7 +101,7 @@
    -
    +
    {{:helper.link("Fire", 'alert', { 'fire' : 1 }, null, null)}}
    {{/if}} diff --git a/nano/templates/fabricator.tmpl b/nano/templates/fabricator.tmpl deleted file mode 100644 index 1fb0857872588..0000000000000 --- a/nano/templates/fabricator.tmpl +++ /dev/null @@ -1,94 +0,0 @@ -{{if data.functional}} - - - - - - - - - - - - - - -
    - - - - - - - {{for data.material_storage}} - - - - - - {{/for}} -
    ResourceStorageOptions
    {{:value.name}}{{:value.stored}}/{{:value.max}}{{:helper.link(value.eject_label, null, {'eject_mat' : value.eject_key})}}
    -
    - - - - - - - - - - - -
    Current BuildUnitsProgress
    {{:data.current_build.name}}{{:data.current_build.multiplier}}{{:data.current_build.progress}}
    -
    - - - - - - - {{for data.build_queue}} - - - - {{if value.reference}} - - {{else}} - - {{/if}} - - {{/for}} -
    PendingUnitsOptions
    {{:value.name}}{{:value.multiplier}}{{:helper.link('Cancel', null, {'cancel' : value.reference})}}-
    -
    Selected Category {{:helper.link(data.category, null, {'change_category' : 1})}}
    - - - - - - - {{for data.build_options}} - - {{if value.illegal}} - - {{else}} - - {{/if}} - - - - {{/for}} -
    DesignCostOptions
    {{:value.name}}{{:value.name}}{{:value.cost}} - {{if !value.unavailable}} - {{:helper.link('Queue', null, {'make' : value.reference, 'multiplier' : 1})}} - {{for value.multiplier :multValue:multIndex}} - {{:helper.link(multValue.label, null, {'make' : value.reference, 'multiplier' : multValue.multiplier})}} - {{/for}} - {{else}} - Insufficient resources. - {{/if}} -
    -
    -{{else}} -

    FABRICATOR OFFLINE. CONTACT SYSTEM ADMINISTRATOR.

    -{{/if}} diff --git a/nano/templates/gps.tmpl b/nano/templates/gps.tmpl deleted file mode 100644 index dc5be79526929..0000000000000 --- a/nano/templates/gps.tmpl +++ /dev/null @@ -1,78 +0,0 @@ -{{if data.tracking == 0}} - {{:helper.link('Switch On', null, {'toggle_power' : 1})}} -{{else}} - {{:helper.link('Switch Off', null, {'toggle_power' : 1})}} - -
    -
    Current location
    -
    {{:data.my_area_name}} ({{:data.curr_x}}, {{:data.curr_y}}, {{:data.curr_z}})
    -
    - -
    - {{if data.hide_signal == 1}} - Tagged as {{:data.gps_tag}}. - {{else}} - Broadcasting as {{:data.gps_tag}}. - {{/if}} -
    - -
    -
    Configuration
    -
    - {{:helper.link('Change Tag', null, { 'tag' : 1 })}} - {{if data.local_mode == 1}} - {{:helper.link('Narrow Band', null, { 'range' : 1 })}} - {{else}} - {{:helper.link('Broad Band', null, { 'range' : 1 })}} - {{/if}} - {{if data.can_hide_signal == 1}} - {{:helper.link('Toggle Signal Visibility', null, { 'hide' : 1})}} - {{/if}} -
    -
    - - {{if data.no_signals == 1}} -
    -
    - No signals detected. -
    -
    - {{else}} - {{for data.gps_list}} - -
    -
    - {{:value.gps_tag}} - {{:value.area_name}} -
    - -
    - {{if value.is_special_gps_marker == 1}} - {{if value.local == 1}} - {{:value.direction}} Dist: {{:value.distance}}m - {{else}} - {{:value.z}} - {{/if}} - {{else}} - ({{:value.x}}, {{:value.y}}) - {{/if}} -
    - {{if value.local == 1}} - {{:value.distance}}m, {{:value.direction}} - {{else}} - Non-local signal. - {{/if}} -
    - {{if value.being_tracked == 1}} - {{:helper.link('Stop Tracking', null, {'stop_track' : value.gps_ref })}} - {{:helper.link('Color ' + value.coloured_square, null, {'track_color' : value.gps_ref })}} - {{:helper.link('Show/Hide Label', null, {'track_label' : value.gps_ref })}} - {{else}} - {{:helper.link('Start Tracking', null, {'start_track' : value.gps_ref })}} - {{/if}} -
    -
    - - {{/for}} - {{/if}} -
    -{{/if}} diff --git a/nano/templates/gravgen.tmpl b/nano/templates/gravgen.tmpl new file mode 100644 index 0000000000000..0b3c55be38e0e --- /dev/null +++ b/nano/templates/gravgen.tmpl @@ -0,0 +1,69 @@ +

    Power Status

    +
    +
    +
    + Gravity Field: +
    +
    + {{if data.enabled}} + Active + {{else}} + Inactive + {{/if}} +
    +
    + +
    +
    + Power Status: +
    +
    + {{if data.charging_state == 1}} + Charging + {{else data.charging_state == 2}} + Discharging + {{else}} + {{if data.breaker}} + Powered + {{else}} + Unpowered + {{/if}} + {{/if}} +
    +
    + +
    +
    + Charge Status: +
    + + {{:helper.displayBar(data.charger_count, 0, 100, (data.charger_count >= 50) ? 'good' : (data.charger_count >= 25) ? 'average' : 'bad')}} +
    + {{:helper.round(data.charger_count*10)/10}}% +
    + +
    + +
    + + +

    Options

    +
    +
    + Breaker Status: +
    +
    + {{:helper.link('On', 'power', {'gentoggle' : 1}, data.breaker ? 'selected' : null)}} {{:helper.link('Off', 'close', {'gentoggle' : 1}, data.breaker ? null : 'selected')}} +
    +
    + +{{if data.emergency_shutoff_button}} +
    +
    + Emergency Shutdown: +
    +
    + {{:helper.link('ACTIVATE', 'power', {'eshutoff' : 1}, null, 'redButton')}} +
    +
    +{{/if}} diff --git a/nano/templates/guestpass.tmpl b/nano/templates/guestpass.tmpl index 6dd5ded05e163..389d15255c8af 100644 --- a/nano/templates/guestpass.tmpl +++ b/nano/templates/guestpass.tmpl @@ -4,7 +4,7 @@ {{for data.internal_log}}
    - {{value}} + {{:value}}
    {{/for}} @@ -74,4 +74,4 @@ -{{/if}} \ No newline at end of file +{{/if}} diff --git a/nano/templates/jukebox.tmpl b/nano/templates/jukebox.tmpl index 018491459f8f6..81b1702053368 100644 --- a/nano/templates/jukebox.tmpl +++ b/nano/templates/jukebox.tmpl @@ -2,6 +2,7 @@
    {{:helper.link('Play', 'play', {'act': 'play'}, data.playing ? 'disabled' : null, null)}} {{:helper.link('Stop', 'stop', {'act': 'stop'}, !data.playing ? 'disabled' : null, null)}} + {{:helper.link('Eject' , 'eject', {'act': 'eject'}, data.tape ? null : 'disabled', null)}}

    Volume Level:

    @@ -19,7 +20,7 @@
    {{for data.tracks}}
    - {{:helper.link(value.track, 'gear', {'act': 'track', 'dat': value.index}, value.track == data.track ? 'disabled' : null, null)}} + {{:helper.link(value.track, 'gear', {'act': 'track', 'dat': value.index}, value.track == data.track ? 'disabled' : null, null)}}
    {{/for}}
    diff --git a/nano/templates/laptop_configuration.tmpl b/nano/templates/laptop_configuration.tmpl index bff518d971bcf..9bfd6a2d301e2 100644 --- a/nano/templates/laptop_configuration.tmpl +++ b/nano/templates/laptop_configuration.tmpl @@ -94,4 +94,4 @@



    -NTOS v2.0.4b Copyright NanoTrasen +NTOS v2.0.4b Copyright Nanotrasen diff --git a/nano/templates/law_manager.tmpl b/nano/templates/law_manager.tmpl index fa91140881e4a..137ccdc4be81f 100644 --- a/nano/templates/law_manager.tmpl +++ b/nano/templates/law_manager.tmpl @@ -1,41 +1,41 @@ + +{{if data}} + {{if data.disabled}} +

    Вайтлист на ксеносов отключен в конфигурации сервера.


    + {{/if}} + {{if data.SQL == -1}} +

    Вайтлист работает в файловом режиме.
    Использование БД отключено конфигурацией сервера.


    + {{else data.SQL == -2}} +

    Вайтлист работает в файловом режиме.
    Использование БД отключено конфигурацией сервера.


    +
    Не удалось установить подключение к Базе Данных.

    + {{:helper.link('Переподключение к БД.', null, {'DBreconnect' : 1})}} + {{else data.SQL == 0}} +

    Не удалось установить подключение к Базе Данных.


    + {{:helper.link('Переподключение к БД.', null, {'DBreconnect' : 1})}}
    + {{else data.SQL == 1}} +

    База Данных готова.


    + {{else}} +

    Неожиданный код статуса Базы Данных: {{:data.SQL}}


    + {{:helper.link('Переподключение к БД.', null, {'DBreconnect' : 1})}}
    + {{/if}} + {{if data.debug}} +
    ===== High-risk zone =====
    Не трогайте эти кнопки, если не знааете что они делают!
    + + +
    + {{:helper.link('СИНХРОНИЗИРОВАТЬ КОНФИГ --> БД', 'alert', {'synch': 'CDB'}, null, 'redButton')}} + + {{:helper.link('СИНХРОНИЗИРОВАТЬ БД --> КОНФИГ', 'alert', {'synch': 'DBC'}, null, 'redButton')}} +
    + ===== End of high-risk zone =====

    + {{/if}} + + + + {{if data.SQL == -1}} +
    + {{:helper.link('ПРИМЕНИТЬ ИЗМЕНЕНИЯ', 'arrowstop-1-n', {'send': 1}, null, 'yellowButton')}} + + {{:helper.link('Получить ВЛ | Сбросить изменения', 'refresh', {'refresh': 1}, null)}} +
    + {{:helper.link('База Данных', null, {'mode': 1}, data.debug ? data.mode ? 'selected' : null : data.mode ? 'selected' : 'disabled')}} + + {{:helper.link('Конфиг-Файл', null, {'mode': 0}, data.debug ? data.mode ? null : 'selected' : data.mode ? 'disabled' : 'selected')}} + {{else data.SQL == -2}} + + {{:helper.link('База Данных', null, {'mode': 1}, data.debug ? data.mode ? 'selected' : null : data.mode ? 'selected' : 'disabled')}} + + {{:helper.link('Конфиг-Файл', null, {'mode': 0}, data.debug ? data.mode ? null : 'selected' : data.mode ? 'disabled' : 'selected')}} + {{else}} + + {{:helper.link('База Данных', null, {'mode': 0}, data.debug ? data.mode ? null : 'selected' : data.mode ? 'disabled' : 'selected')}} + + {{:helper.link('Конфиг-Файл', null, {'mode': 1}, data.debug ? data.mode ? 'selected' : null : data.mode ? 'selected' : 'disabled')}} + {{/if}} +
    +
    +
    {{:data.searchbox}}
    +
    + + + {{if data.currentlist}} + + +

    Список пуст. Внесите новый ckey.


    Или используйте другой способ синхронизации вайтлиста.
    + {{/for}} +
    + {{:helper.link("Ckey", "search", {'sorting' : "ckey"}, data.sorting ? data.sorting == "ckey" ? 'selected' : null : null)}} + {{for data.lowerallxenos :name_value:name_key}} + + {{:helper.link(name_value, "search", {'sorting' : name_value}, data.sorting ? data.sorting == name_value ? 'selected' : null : null)}} + {{/for}} + {{/if}} + {{for data.currentlist}} +
    + {{:value.ckey}} + {{for data.lowerallxenos :name_value:name_key}} + + {{for value.YES :xenos_value:xenos_key}} + {{if xenos_value == name_value}} + {{:helper.link(name_value, "check", {'ckey' : value.ckey, 'race' : name_value}, null, 'selected')}} + {{/if}} + {{/for}} + {{for value.NO :xenos_value:xenos_key}} + {{if xenos_value == name_value}} + {{:helper.link(name_value, "close", {'ckey' : value.ckey, 'race' : name_value}, null)}} + {{/if}} + {{/for}} + {{for value.GRANT :xenos_value:xenos_key}} + {{if xenos_value == name_value}} + {{:helper.link(name_value, "plus", {'ckey' : value.ckey, 'race' : name_value}, null, 'yellowButton')}} + {{/if}} + {{/for}} + {{for value.REVOKE :xenos_value:xenos_key}} + {{if xenos_value == name_value}} + {{:helper.link(name_value, "cancel", {'ckey' : value.ckey, 'race' : name_value}, null, 'redButton')}} + {{/if}} + {{/for}} + {{/for}} + {{empty}} +
    +{{else}} +

    Интерфейс не получил никаких данных.
    Перезагрузите окно.

    +{{/if}} \ No newline at end of file diff --git a/packs/deepmaint/_pack.dm b/packs/deepmaint/_pack.dm new file mode 100644 index 0000000000000..768964825f385 --- /dev/null +++ b/packs/deepmaint/_pack.dm @@ -0,0 +1,8 @@ +#include "generator/deepmaint_event.dm" +#include "generator/deepmaint.dm" +#include "generator/jp_dungeon_gen.dm" +#include "generator/deepmain_room.dm" +#include "deepmaint.dm" +#include "deepmaint_rooms/template.dm" +#include "deepmaint_rooms/core/_core_rooms.dm" +#include "deepmaint_rooms/normal/_normal_rooms.dm" diff --git a/maps/deepmaint/deepmaint-1.dmm b/packs/deepmaint/deepmaint-1.dmm similarity index 99% rename from maps/deepmaint/deepmaint-1.dmm rename to packs/deepmaint/deepmaint-1.dmm index a7fee0eeecdfb..88f223af39101 100644 --- a/maps/deepmaint/deepmaint-1.dmm +++ b/packs/deepmaint/deepmaint-1.dmm @@ -6,7 +6,7 @@ /turf/simulated/wall, /area/map_template/deepmaint) "c" = ( -/obj/effect/landmark/map_data/deepmaint/lvl1, +/obj/landmark/map_data/deepmaint/lvl1, /turf/unsimulated/wall, /area/map_template/deepmaint) "d" = ( diff --git a/maps/deepmaint/deepmaint-2.dmm b/packs/deepmaint/deepmaint-2.dmm similarity index 99% rename from maps/deepmaint/deepmaint-2.dmm rename to packs/deepmaint/deepmaint-2.dmm index a7bd7d642a3b0..dfe6816109d4b 100644 --- a/maps/deepmaint/deepmaint-2.dmm +++ b/packs/deepmaint/deepmaint-2.dmm @@ -6,7 +6,7 @@ /turf/simulated/wall, /area/map_template/deepmaint) "c" = ( -/obj/effect/landmark/map_data/deepmaint/lvl2, +/obj/landmark/map_data/deepmaint/lvl2, /turf/unsimulated/wall, /area/map_template/deepmaint) "d" = ( diff --git a/maps/deepmaint/deepmaint-3.dmm b/packs/deepmaint/deepmaint-3.dmm similarity index 99% rename from maps/deepmaint/deepmaint-3.dmm rename to packs/deepmaint/deepmaint-3.dmm index 18c10bdb7f488..9548bd7a5847f 100644 --- a/maps/deepmaint/deepmaint-3.dmm +++ b/packs/deepmaint/deepmaint-3.dmm @@ -6,7 +6,7 @@ /turf/simulated/wall, /area/map_template/deepmaint) "c" = ( -/obj/effect/landmark/map_data/deepmaint/lvl3, +/obj/landmark/map_data/deepmaint/lvl3, /turf/unsimulated/wall, /area/map_template/deepmaint) "d" = ( diff --git a/packs/deepmaint/deepmaint.dm b/packs/deepmaint/deepmaint.dm new file mode 100644 index 0000000000000..93bcc97c911e7 --- /dev/null +++ b/packs/deepmaint/deepmaint.dm @@ -0,0 +1,16 @@ +/obj/landmark/map_data/deepmaint/lvl1 + name = "Deep Dark Marvelous" + height = 1 + +/datum/map_template/ruin/deepmaint + name = "Deepmaint" + id = "deepmaint" + description = "Somewhere inbetween. How did we get here? How do we leave?" + suffixes = list("packs/deepmaint/deepmaint-1.dmm") + +/area/map_template/deepmaint + name = "\improper Deep Maintenance" + sound_env = TUNNEL_ENCLOSED + turf_initializer = /singleton/turf_initializer/maintenance + forced_ambience = list('sound/ambience/maintambience.ogg') + requires_power = FALSE diff --git a/packs/deepmaint/deepmaint_rooms/core/_core_rooms.dm b/packs/deepmaint/deepmaint_rooms/core/_core_rooms.dm new file mode 100644 index 0000000000000..bce6c53b5cb23 --- /dev/null +++ b/packs/deepmaint/deepmaint_rooms/core/_core_rooms.dm @@ -0,0 +1,26 @@ +/datum/map_template/deepmaint_template/big/archive + name = "archive" + desc = "isafigjoa sghjsbzuy Page: 152" + id = "deepmaint_coreroom_archive" + mappaths = list('packs/deepmaint/deepmaint_rooms/core/archive.dmm') + + +/datum/map_template/deepmaint_template/big/maint_asteroid + name = "maintenance asteroid" + desc = "How did this thing even get here?" + id = "deepmaint_coreroom_maint_asteroid" + mappaths = list('packs/deepmaint/deepmaint_rooms/core/maint_asteroid.dmm') + + +/datum/map_template/deepmaint_template/big/ai_core + name = "AI core" + desc = " I'm sorry, Dave." + id = "deepmaint_coreroom_ai_core" + mappaths = list('packs/deepmaint/deepmaint_rooms/core/ai_core.dmm') + + +/datum/map_template/deepmaint_template/big/dinner + name = "dinner" + desc = "A last meal." + id = "deepmaint_coreroom_dinner" + mappaths = list('packs/deepmaint/deepmaint_rooms/core/diner.dmm') diff --git a/maps/deepmaint/deepmaint_rooms/core/ai_core.dmm b/packs/deepmaint/deepmaint_rooms/core/ai_core.dmm similarity index 100% rename from maps/deepmaint/deepmaint_rooms/core/ai_core.dmm rename to packs/deepmaint/deepmaint_rooms/core/ai_core.dmm diff --git a/maps/deepmaint/deepmaint_rooms/core/archive.dmm b/packs/deepmaint/deepmaint_rooms/core/archive.dmm similarity index 97% rename from maps/deepmaint/deepmaint_rooms/core/archive.dmm rename to packs/deepmaint/deepmaint_rooms/core/archive.dmm index bb7cbb7707ae9..99e5d83d23966 100644 --- a/maps/deepmaint/deepmaint_rooms/core/archive.dmm +++ b/packs/deepmaint/deepmaint_rooms/core/archive.dmm @@ -23,7 +23,7 @@ /turf/simulated/wall, /area/map_template/deepmaint) "ag" = ( -/obj/structure/closet/secure_closet/freezer/meat, +/obj/structure/closet/fridge/meat, /obj/random/mre, /obj/random/mre, /obj/random/mre, @@ -218,7 +218,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/map_template/deepmaint) "aT" = ( -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, /turf/simulated/floor/wood, /area/map_template/deepmaint) "aU" = ( @@ -351,8 +351,8 @@ /area/map_template/deepmaint) "br" = ( /obj/item/remains/human, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, +/obj/decal/cleanable/blood, /turf/simulated/floor/wood, /area/map_template/deepmaint) "bt" = ( @@ -374,7 +374,7 @@ /area/map_template/deepmaint) "by" = ( /obj/item/remains/human, -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, /turf/simulated/floor/wood, /area/map_template/deepmaint) "bz" = ( @@ -382,7 +382,7 @@ /turf/simulated/floor/carpet/red, /area/map_template/deepmaint) "bA" = ( -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, /obj/random/junk, /turf/simulated/floor/wood, /area/map_template/deepmaint) @@ -426,8 +426,8 @@ /turf/simulated/floor/tiled/steel_ridged, /area/map_template/deepmaint) "bK" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, +/obj/decal/cleanable/blood, /obj/random/junk, /turf/simulated/floor/wood, /area/map_template/deepmaint) diff --git a/packs/deepmaint/deepmaint_rooms/core/diner.dmm b/packs/deepmaint/deepmaint_rooms/core/diner.dmm new file mode 100644 index 0000000000000..d81320493c62c --- /dev/null +++ b/packs/deepmaint/deepmaint_rooms/core/diner.dmm @@ -0,0 +1,947 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ae" = ( +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"ar" = ( +/obj/structure/hygiene/sink/kitchen{ + pixel_y = -32 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"aD" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"bp" = ( +/obj/machinery/door/airlock, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"bz" = ( +/obj/machinery/cooker/grill, +/turf/simulated/floor/tiled/white/monotile, +/area/map_template/deepmaint) +"bD" = ( +/obj/machinery/cooker/fryer, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/map_template/deepmaint) +"bE" = ( +/obj/machinery/light/small/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/deepmaint) +"bW" = ( +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"bX" = ( +/obj/wallframe_spawn/reinforced/no_grille, +/obj/paint/black, +/turf/simulated/floor/plating, +/area/map_template/deepmaint) +"bZ" = ( +/obj/structure/table/steel, +/obj/random/trash, +/obj/item/reagent_containers/food/snacks/old/burger, +/obj/item/reagent_containers/food/snacks/old/burger, +/obj/item/reagent_containers/food/snacks/old/burger, +/obj/item/reagent_containers/food/snacks/old/burger, +/obj/item/reagent_containers/food/snacks/old/burger, +/obj/item/reagent_containers/food/snacks/old/burger, +/obj/item/reagent_containers/food/snacks/old/burger, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"ca" = ( +/obj/structure/kitchenspike, +/turf/simulated/floor/tiled/freezer, +/area/map_template/deepmaint) +"ci" = ( +/obj/structure/table/steel, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"cl" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/landmark/corpse/pirate, +/obj/gibspawner/human, +/turf/simulated/floor/tiled/white, +/area/map_template/deepmaint) +"cq" = ( +/obj/structure/flora/pottedplant/subterranean, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"cB" = ( +/obj/machinery/fabricator/micro/bartender, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/dark, +/area/map_template/deepmaint) +"cL" = ( +/obj/structure/window/reinforced, +/obj/machinery/door/window/westleft, +/obj/floor_decal/spline/fancy/wood, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"fo" = ( +/obj/structure/window/reinforced, +/obj/structure/bed/chair/armchair/red{ + dir = 1 + }, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"gg" = ( +/obj/structure/table/marble, +/obj/item/storage/box/ammo/shotgunshells, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"gA" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/glass/rag, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"hT" = ( +/obj/structure/table/steel, +/obj/random/energy, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"iQ" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"jr" = ( +/obj/structure/table/marble, +/obj/item/gun/projectile/shotgun/doublebarrel, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"ju" = ( +/obj/structure/table/marble, +/turf/simulated/floor/tiled/white/monotile, +/area/map_template/deepmaint) +"ld" = ( +/obj/structure/table/standard, +/obj/machinery/chemical_dispenser/bar_alc/full, +/turf/simulated/floor/tiled/dark, +/area/map_template/deepmaint) +"lQ" = ( +/obj/machinery/light/small/red{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/deepmaint) +"oc" = ( +/obj/structure/table/steel, +/obj/item/reagent_containers/food/condiment/small/peppermill, +/obj/item/reagent_containers/food/condiment/small/saltshaker, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"rT" = ( +/obj/spider/spiderling/growing, +/obj/structure/table/marble, +/obj/item/material/knife/kitchen/cleaver/bronze, +/turf/simulated/floor/tiled/white/monotile, +/area/map_template/deepmaint) +"sJ" = ( +/obj/landmark/corpse/pirate, +/obj/gibspawner/human, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"td" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled/freezer, +/area/map_template/deepmaint) +"uA" = ( +/obj/machinery/door/airlock, +/turf/simulated/floor/tiled/freezer, +/area/map_template/deepmaint) +"uS" = ( +/obj/structure/table/steel, +/obj/random/trash, +/obj/item/reagent_containers/food/snacks/old/taco, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"vp" = ( +/obj/landmark/corpse/chef, +/obj/gibspawner/human, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/deepmaint) +"wf" = ( +/obj/structure/table/marble, +/obj/item/material/bell, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/deepmaint) +"wH" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/random/trash, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"wZ" = ( +/obj/structure/table/steel, +/obj/item/reagent_containers/food/condiment/ketchup, +/obj/item/reagent_containers/food/condiment/mayo, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"yS" = ( +/obj/structure/table/marble, +/obj/machinery/microwave{ + pixel_x = -3; + pixel_y = 6 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/map_template/deepmaint) +"zk" = ( +/obj/spider/spiderling/growing, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/deepmaint) +"zH" = ( +/obj/machinery/jukebox/old, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"zM" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/deepmaint) +"Aw" = ( +/obj/machinery/light/small/red{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/deepmaint) +"Ax" = ( +/obj/structure/table/marble, +/obj/machinery/reagentgrinder/juicer, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/beaker/large, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/map_template/deepmaint) +"Bc" = ( +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/deepmaint) +"Br" = ( +/turf/simulated/floor/tiled/dark, +/area/map_template/deepmaint) +"Dt" = ( +/obj/structure/table/steel, +/obj/random/energy, +/obj/item/reagent_containers/food/snacks/old/pizza, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"Dy" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/snacks/old/hotdog, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"DO" = ( +/obj/machinery/light/spot, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"Fv" = ( +/obj/paint/black, +/turf/simulated/wall, +/area/map_template/deepmaint) +"He" = ( +/obj/spider/spiderling/growing, +/turf/simulated/floor/tiled/freezer, +/area/map_template/deepmaint) +"HV" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window/westright, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"HX" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/snacks/old/burger, +/obj/item/reagent_containers/food/snacks/old/burger, +/obj/item/reagent_containers/food/snacks/old/burger, +/obj/item/reagent_containers/food/snacks/old/burger, +/obj/item/reagent_containers/food/snacks/old/burger, +/obj/item/reagent_containers/food/snacks/old/burger, +/obj/item/reagent_containers/food/snacks/old/burger, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/deepmaint) +"Is" = ( +/obj/structure/table/standard, +/obj/machinery/chemical_dispenser/bar_soft/full, +/turf/simulated/floor/tiled/dark, +/area/map_template/deepmaint) +"Li" = ( +/obj/structure/hygiene/sink/kitchen{ + pixel_y = -32 + }, +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"Lr" = ( +/obj/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"LL" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/bed/chair/armchair/red, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"LZ" = ( +/obj/machinery/gibber, +/turf/simulated/floor/tiled/white/monotile, +/area/map_template/deepmaint) +"My" = ( +/obj/random/trash, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"MQ" = ( +/obj/structure/table/marble, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white/monotile, +/area/map_template/deepmaint) +"Na" = ( +/obj/item/stool/bar/padded, +/obj/machinery/floor_light/mapped_on, +/obj/landmark/corpse/pirate, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"Ox" = ( +/obj/machinery/light/small, +/obj/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/map_template/deepmaint) +"Oz" = ( +/obj/spider/spiderling/growing, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"OQ" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/machinery/door/unpowered/simple/ebony, +/turf/simulated/floor/tiled/white, +/area/map_template/deepmaint) +"Ps" = ( +/obj/floor_decal/corner/red/diagonal, +/obj/spider/spiderling/growing, +/turf/simulated/floor/tiled/white, +/area/map_template/deepmaint) +"PU" = ( +/turf/simulated/floor/tiled/white, +/area/map_template/deepmaint) +"QB" = ( +/obj/machinery/door/airlock/multi_tile, +/turf/simulated/floor/tiled/white, +/area/map_template/deepmaint) +"QE" = ( +/obj/structure/table/marble, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"Rs" = ( +/obj/structure/closet/fridge/meat, +/turf/simulated/floor/tiled/freezer, +/area/map_template/deepmaint) +"Ru" = ( +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"SU" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/bed/chair/armchair/red, +/obj/item/trash/beef, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"Td" = ( +/obj/machinery/vending/boozeomat{ + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/deepmaint) +"Tp" = ( +/obj/structure/table/steel, +/obj/random/trash, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"Tv" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/landmark/corpse/russian, +/obj/gibspawner/human, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"TA" = ( +/obj/structure/table/standard, +/obj/machinery/chemical_dispenser/bar_coffee/full, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/map_template/deepmaint) +"UR" = ( +/turf/simulated/floor/tiled/freezer, +/area/map_template/deepmaint) +"WS" = ( +/obj/item/stool/bar/padded, +/obj/machinery/floor_light/mapped_on, +/turf/simulated/floor/wood/yew, +/area/map_template/deepmaint) +"Xc" = ( +/obj/machinery/vending/dinnerware{ + dir = 4; + req_access = null + }, +/turf/simulated/floor/tiled/white/monotile, +/area/map_template/deepmaint) +"Yn" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/spider/spiderling/growing, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"Za" = ( +/obj/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/map_template/deepmaint) +"Zc" = ( +/obj/machinery/light/small/red, +/turf/simulated/floor/tiled/dark, +/area/map_template/deepmaint) +"ZO" = ( +/obj/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) + +(1,1,1) = {" +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +"} +(2,1,1) = {" +Br +Br +Br +Br +Br +Br +Br +Aw +Br +Br +Br +Br +Br +Aw +Br +Br +Br +Br +Br +Br +Br +"} +(3,1,1) = {" +Br +Br +Fv +Fv +bX +bX +bX +Fv +Fv +bX +bX +bX +Fv +Fv +bX +bX +bX +Fv +Fv +Br +Br +"} +(4,1,1) = {" +Br +Br +Fv +cq +LL +ci +fo +Za +Za +Za +Za +Za +Za +Za +LL +ci +fo +cq +Fv +Br +Br +"} +(5,1,1) = {" +Br +Br +Fv +ae +LL +bZ +fo +Za +Za +bW +oc +bW +Za +Ps +SU +Dt +fo +DO +Fv +Br +Br +"} +(6,1,1) = {" +Br +Br +bX +Ru +Za +Za +cl +Ps +Za +My +zH +bW +Za +Za +cl +Za +Za +Ru +bX +Br +Br +"} +(7,1,1) = {" +Br +Br +bX +Ru +Za +Za +Za +Za +Za +bW +wZ +bW +Za +Za +Za +Za +Ps +Ru +bX +Br +Br +"} +(8,1,1) = {" +Br +Zc +Fv +ae +LL +ci +fo +Za +Za +sJ +hT +bW +Za +Za +LL +uS +fo +DO +Fv +Br +Br +"} +(9,1,1) = {" +Br +Br +Fv +Ru +LL +ci +fo +Za +Za +Za +Za +Za +Za +Za +LL +Tp +fo +Ru +Fv +lQ +Br +"} +(10,1,1) = {" +Br +Br +Fv +cq +Za +Za +Za +Za +Za +zM +Za +Za +Za +Za +Za +Za +Za +Za +OQ +Br +Br +"} +(11,1,1) = {" +Br +Br +Fv +Fv +Fv +Fv +Fv +bp +Fv +Fv +Za +Za +Za +Za +Za +Za +Za +Za +OQ +Br +Br +"} +(12,1,1) = {" +Br +Br +Fv +ju +rT +yS +Xc +Bc +Bc +HX +bW +bW +bW +Oz +bW +bW +bW +bW +Fv +lQ +Br +"} +(13,1,1) = {" +Br +Br +Fv +bz +vp +Bc +Bc +Bc +Bc +wf +bW +bW +bW +bW +bW +bW +bW +bW +Fv +Br +Br +"} +(14,1,1) = {" +Br +Br +Fv +bD +Bc +Bc +Bc +Bc +Bc +Fv +WS +WS +WS +bW +bW +WS +Na +WS +Fv +Br +Br +"} +(15,1,1) = {" +Br +Zc +Fv +LZ +Bc +Bc +Bc +zk +Ox +Fv +gA +QE +QE +HV +cL +jr +gg +Dy +Fv +Br +Br +"} +(16,1,1) = {" +Br +Br +Fv +Fv +uA +Fv +Fv +Bc +Bc +QB +wH +wH +aD +Lr +iQ +Tv +aD +Li +Fv +Br +Br +"} +(17,1,1) = {" +Br +Br +Fv +He +UR +td +Fv +Bc +Bc +PU +ZO +ZO +ZO +ZO +ZO +ZO +Yn +ar +Fv +Br +Br +"} +(18,1,1) = {" +Br +Br +Fv +Rs +ca +Rs +Fv +Ax +MQ +Fv +Is +TA +ld +Td +cB +ld +TA +Is +Fv +Br +Br +"} +(19,1,1) = {" +Br +Br +Fv +Fv +Fv +Fv +Fv +Fv +Fv +Fv +Fv +Fv +Fv +Fv +Fv +Fv +Fv +Fv +Fv +Br +Br +"} +(20,1,1) = {" +Br +Br +Br +Br +Br +Br +bE +Br +Br +Br +Br +Br +Br +Br +Br +Br +bE +Br +Br +Br +Br +"} +(21,1,1) = {" +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +Br +"} diff --git a/maps/deepmaint/deepmaint_rooms/core/maint_asteroid.dmm b/packs/deepmaint/deepmaint_rooms/core/maint_asteroid.dmm similarity index 100% rename from maps/deepmaint/deepmaint_rooms/core/maint_asteroid.dmm rename to packs/deepmaint/deepmaint_rooms/core/maint_asteroid.dmm diff --git a/maps/deepmaint/deepmaint_rooms/core/medbay.dmm b/packs/deepmaint/deepmaint_rooms/core/medbay.dmm similarity index 87% rename from maps/deepmaint/deepmaint_rooms/core/medbay.dmm rename to packs/deepmaint/deepmaint_rooms/core/medbay.dmm index b61f4322f8fb1..654958fb1f259 100644 --- a/maps/deepmaint/deepmaint_rooms/core/medbay.dmm +++ b/packs/deepmaint/deepmaint_rooms/core/medbay.dmm @@ -4,11 +4,11 @@ /turf/simulated/floor/tiled/steel/techfloor, /area/map_template/deepmaint) "bN" = ( -/obj/effect/decal/cleanable/blood/gibs, +/obj/decal/cleanable/blood/gibs, /turf/simulated/floor/tiled/steel/techfloor, /area/map_template/deepmaint) "bW" = ( -/obj/effect/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/drip, /obj/machinery/light{ dir = 8 }, @@ -16,12 +16,12 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "cc" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/gibs/xeno, +/obj/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/gibs/xeno, /turf/simulated/floor/tiled/dark, /area/map_template/deepmaint) "ch" = ( -/obj/effect/decal/cleanable/blood/splatter, +/obj/decal/cleanable/blood/splatter, /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -30,7 +30,7 @@ /area/map_template/deepmaint) "cX" = ( /obj/structure/table/reinforced, -/obj/effect/decal/cleanable/blood/splatter, +/obj/decal/cleanable/blood/splatter, /obj/random/firstaid/low_chance, /obj/random/firstaid/low_chance, /turf/simulated/floor/tiled/white, @@ -45,7 +45,7 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "dy" = ( -/obj/structure/closet/secure_closet/freezer/blood, +/obj/structure/closet/fridge/blood, /turf/simulated/floor/tiled/steel/techfloor, /area/map_template/deepmaint) "dF" = ( @@ -56,27 +56,27 @@ /turf/simulated/floor/tiled/dark/gray_perforated, /area/map_template/deepmaint) "dT" = ( -/obj/effect/decal/cleanable/blood/splatter, +/obj/decal/cleanable/blood/splatter, /obj/machinery/light{ dir = 8 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "ep" = ( -/obj/effect/decal/cleanable/blood/splatter, +/obj/decal/cleanable/blood/splatter, /turf/simulated/floor/wood, /area/map_template/deepmaint) "fa" = ( /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "fA" = ( -/obj/effect/floor_decal/industrial/loading/white{ +/obj/floor_decal/industrial/loading/white{ dir = 4 }, /turf/simulated/floor/tiled/dark, /area/map_template/deepmaint) "gu" = ( -/obj/effect/decal/cleanable/blood/writing{ +/obj/decal/cleanable/blood/writing{ desc = "It looks like a writing in blood. It says: ''NOT SAFE ANYWHERE!''." }, /turf/simulated/floor/tiled/white, @@ -86,19 +86,19 @@ /area/map_template/deepmaint) "in" = ( /obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/tracks, +/obj/decal/cleanable/blood, +/obj/decal/cleanable/blood/tracks, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "jt" = ( /obj/machinery/optable, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/gibs, +/obj/decal/cleanable/blood, +/obj/decal/cleanable/blood/gibs, /turf/simulated/floor/tiled/steel/techfloor, /area/map_template/deepmaint) "jB" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/gibs/xeno, +/obj/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/gibs/xeno, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "jF" = ( @@ -114,15 +114,15 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "lM" = ( -/obj/effect/floor_decal/industrial/botright, +/obj/floor_decal/industrial/botright, /turf/simulated/floor/tiled/dark, /area/map_template/deepmaint) "lN" = ( -/obj/effect/decal/cleanable/blood/tracks, +/obj/decal/cleanable/blood/tracks, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "mr" = ( -/obj/effect/decal/cleanable/blood/gibs/body, +/obj/decal/cleanable/blood/gibs/body, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "my" = ( @@ -131,7 +131,7 @@ /area/map_template/deepmaint) "mX" = ( /obj/structure/bed/chair/comfy/black, -/obj/effect/decal/cleanable/blood/splatter, +/obj/decal/cleanable/blood/splatter, /turf/simulated/floor/wood, /area/map_template/deepmaint) "nv" = ( @@ -152,7 +152,7 @@ /obj/machinery/vending/wallmed/lobby{ pixel_x = -25 }, -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "pB" = ( @@ -163,8 +163,8 @@ /turf/simulated/floor/tiled/dark/gray_perforated, /area/map_template/deepmaint) "qe" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/cleanable/blood/gibs/xeno/body, +/obj/decal/cleanable/blood/splatter, +/obj/decal/cleanable/blood/gibs/xeno/body, /obj/item/frame/light{ dir = 4; pixel_x = 15 @@ -174,7 +174,7 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "qq" = ( -/obj/effect/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/drip, /obj/structure/barricade, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) @@ -198,7 +198,7 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "uZ" = ( -/obj/effect/decal/cleanable/blood/splatter, +/obj/decal/cleanable/blood/splatter, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "vg" = ( @@ -215,7 +215,7 @@ /turf/simulated/floor/wood, /area/map_template/deepmaint) "wp" = ( -/obj/effect/decal/cleanable/blood/gibs/xeno/body, +/obj/decal/cleanable/blood/gibs/xeno/body, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "wq" = ( @@ -224,7 +224,7 @@ /area/map_template/deepmaint) "wU" = ( /obj/machinery/door/blast/regular/open, -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "xb" = ( @@ -236,7 +236,7 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "xA" = ( -/obj/effect/decal/cleanable/blood/gibs/xeno, +/obj/decal/cleanable/blood/gibs/xeno, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "yi" = ( @@ -258,7 +258,7 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "zr" = ( -/obj/effect/decal/cleanable/blood/gibs, +/obj/decal/cleanable/blood/gibs, /turf/simulated/floor/tiled/steel/brown_perforated, /area/map_template/deepmaint) "zu" = ( @@ -270,7 +270,7 @@ /area/map_template/deepmaint) "zT" = ( /obj/item/material/shard, -/obj/effect/decal/cleanable/blood/gibs/xeno, +/obj/decal/cleanable/blood/gibs/xeno, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "Aw" = ( @@ -309,11 +309,11 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "CK" = ( -/obj/effect/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/drip, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "Do" = ( -/obj/effect/decal/cleanable/blood/gibs/xeno/limb, +/obj/decal/cleanable/blood/gibs/xeno/limb, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "Eb" = ( @@ -330,7 +330,7 @@ /turf/simulated/floor/tiled/dark/gray_platform, /area/map_template/deepmaint) "Ev" = ( -/obj/effect/decal/cleanable/blood/splatter, +/obj/decal/cleanable/blood/splatter, /obj/random/medical_lowcost/low_chance, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) @@ -351,7 +351,7 @@ }, /obj/structure/windoor_assembly, /obj/item/material/shard, -/obj/effect/decal/cleanable/blood/gibs/xeno, +/obj/decal/cleanable/blood/gibs/xeno, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "Gg" = ( @@ -363,7 +363,7 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "Go" = ( -/obj/effect/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/drip, /obj/random/medical_lowcost/low_chance, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) @@ -378,7 +378,7 @@ /turf/simulated/floor/tiled/steel/techfloor, /area/map_template/deepmaint) "GP" = ( -/obj/effect/decal/cleanable/blood/gibs/xeno, +/obj/decal/cleanable/blood/gibs/xeno, /turf/simulated/floor/tiled/steel/techfloor, /area/map_template/deepmaint) "Id" = ( @@ -410,7 +410,7 @@ /obj/structure/bed/chair/office/dark, /obj/item/material/shard, /obj/item/material/shard, -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "Ll" = ( @@ -421,7 +421,7 @@ /turf/simulated/floor/tiled/dark, /area/map_template/deepmaint) "Mu" = ( -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, /turf/simulated/floor/tiled/steel/brown_perforated, /area/map_template/deepmaint) "MF" = ( @@ -439,7 +439,7 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "Nx" = ( -/obj/effect/floor_decal/industrial/botleft, +/obj/floor_decal/industrial/botleft, /turf/simulated/floor/tiled/dark, /area/map_template/deepmaint) "Or" = ( @@ -447,7 +447,7 @@ /turf/simulated/floor/wood, /area/map_template/deepmaint) "OL" = ( -/obj/effect/window_lwall_spawn/smartspawn, +/obj/window_lwall_spawn/smartspawn, /turf/simulated/floor/tiled/dark/gray_perforated, /area/map_template/deepmaint) "Qo" = ( @@ -460,11 +460,11 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "Sa" = ( -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "Sj" = ( -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, /turf/simulated/floor/tiled/steel/techfloor, /area/map_template/deepmaint) "SR" = ( @@ -481,13 +481,13 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "UA" = ( -/obj/effect/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/drip, /obj/structure/girder, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "UY" = ( /obj/machinery/optable, -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, /turf/simulated/floor/tiled/steel/techfloor, /area/map_template/deepmaint) "Vy" = ( @@ -497,7 +497,7 @@ /turf/simulated/wall, /area/map_template/deepmaint) "VO" = ( -/obj/structure/closet/secure_closet/freezer/blood, +/obj/structure/closet/fridge/blood, /obj/item/stock_parts/matter_bin, /obj/item/stock_parts/matter_bin, /turf/simulated/floor/tiled/steel/techfloor, @@ -522,8 +522,8 @@ /turf/simulated/floor/tiled/dark/gray_platform, /area/map_template/deepmaint) "YS" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/gibs/xeno/body, +/obj/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/gibs/xeno/body, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "ZE" = ( diff --git a/packs/deepmaint/deepmaint_rooms/core/telecoms.dmm b/packs/deepmaint/deepmaint_rooms/core/telecoms.dmm new file mode 100644 index 0000000000000..f08f85bfe6112 --- /dev/null +++ b/packs/deepmaint/deepmaint_rooms/core/telecoms.dmm @@ -0,0 +1,1323 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"ab" = ( +/turf/simulated/wall/r_wall, +/area/map_template/deepmaint) +"ac" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/computer, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"ag" = ( +/obj/item/trash/material/circuit, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"ah" = ( +/obj/random/pack/tech_loot, +/obj/item/trash/material/device, +/obj/item/trash/broken_robot_part, +/obj/decal/cleanable/blood/oil, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"ai" = ( +/obj/machinery/constructable_frame/machine_frame, +/obj/item/trash/material/device, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"al" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/hivebot/range, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"an" = ( +/obj/machinery/light/floor/built, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/hivebot, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"ap" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"ar" = ( +/obj/item/circuitboard/broken, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/server, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"as" = ( +/obj/item/circuitboard/broken, +/obj/item/trash/material/device, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/computer, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"at" = ( +/obj/structure/foamedmetal, +/obj/decal/cleanable/blood/oil, +/obj/item/mine_old, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"au" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/computer, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"aw" = ( +/obj/structure/salvageable/server, +/obj/item/trash/broken_robot_part, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"ay" = ( +/obj/item/trash/material/device, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"aB" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/retaliate/malf_drone, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"aC" = ( +/obj/random/pack/tech_loot, +/obj/item/trash/material/device, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"aD" = ( +/obj/machinery/door/airlock/vault/bolted, +/obj/item/mine_old, +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"aE" = ( +/obj/machinery/light, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/bliss, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"aF" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/server, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"aH" = ( +/obj/machinery/telecomms/relay, +/obj/random/traps/wire_splicing, +/obj/item/contraband/poster/placed/advertisement/pda{ + desc = "A poster advertising the older PDA stock from Nanotrasen suppliers."; + name = "Out Dated PDA Ad"; + pixel_y = 32 + }, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"aI" = ( +/obj/machinery/constructable_frame/machine_frame, +/obj/item/trash/material/circuit, +/obj/item/trash/material/device, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"aJ" = ( +/obj/item/tool/wirecutters/improvised, +/obj/random/voidsuit/damaged, +/obj/item/tool/multitool, +/obj/item/remains/human, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"aK" = ( +/obj/machinery/constructable_frame/machine_frame, +/obj/item/circuitboard/broken, +/obj/item/trash/material/circuit, +/obj/item/trash/material/device, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"aL" = ( +/obj/item/circuitboard/telecomms/hub, +/obj/machinery/light/floor/built, +/obj/item/trash/material/circuit, +/obj/item/stack/cable_coil/blue, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/item/computer_hardware/network_card/wired, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"aM" = ( +/obj/item/trash/material/circuit, +/obj/item/trash/material/device, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/server, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"aN" = ( +/obj/random/pack/tech_loot, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"aO" = ( +/obj/item/stack/cable_coil, +/obj/item/stack/material/plastic/random, +/obj/random/pack/tech_loot, +/obj/decal/cleanable/blood/oil, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"aR" = ( +/obj/item/trash/material/circuit, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"aS" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"aU" = ( +/obj/item/circuitboard/telecomms/hub, +/obj/item/stack/cable_coil, +/obj/random/pack/tech_loot, +/obj/random/techpart, +/obj/machinery/light/floor/built, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"aV" = ( +/obj/decal/cleanable/blood/oil, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"aX" = ( +/obj/machinery/constructable_frame/machine_frame, +/obj/item/trash/material/metal, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"aY" = ( +/obj/item/circuitboard/telecomms/server, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/item/storage/box/data_disk/basic, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"aZ" = ( +/obj/item/circuitboard/telecomms/server, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"ba" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/item/computer_hardware/network_card/wired, +/obj/structure/salvageable/server, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bb" = ( +/obj/item/circuitboard/telecomms/bus, +/obj/item/stack/cable_coil/green, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"bd" = ( +/obj/structure/inflatable/door, +/obj/item/mine/improvised, +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"bf" = ( +/obj/item/circuitboard/telecomms/processor, +/obj/item/trash/material/circuit, +/obj/item/trash/material/metal, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bg" = ( +/obj/item/circuitboard/broken, +/obj/item/trash/material/device, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/server, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bh" = ( +/obj/item/trash/material/device, +/obj/item/trash/material/metal, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/hivebot, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bi" = ( +/obj/machinery/constructable_frame/machine_frame, +/obj/item/trash/material/circuit, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bk" = ( +/obj/structure/salvageable/server, +/obj/item/trash/material/device, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bl" = ( +/obj/structure/salvageable/server, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bm" = ( +/obj/structure/salvageable/personal, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bn" = ( +/obj/random/techpart, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bo" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bp" = ( +/obj/item/stack/material/plastic/random, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/server, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bq" = ( +/obj/item/circuitboard/broken, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"br" = ( +/obj/item/oddity/common/old_pda, +/obj/item/circuitboard/broken, +/obj/item/trash/material/metal, +/obj/item/stack/cable_coil/orange, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"bs" = ( +/obj/structure/foamedmetal, +/obj/item/mine_old, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bt" = ( +/obj/random/pack/tech_loot, +/obj/item/trash/material/circuit, +/obj/item/trash/broken_robot_part, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bu" = ( +/obj/random/pack/tech_loot, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bv" = ( +/obj/structure/foamedmetal, +/obj/machinery/door/blast/regular/open, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bw" = ( +/obj/item/stack/material/plastic/random, +/obj/item/trash/material/circuit, +/obj/decal/cleanable/blood/oil, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/item/storage/box/data_disk/basic, +/mob/living/simple_animal/hostile/hivebot, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bx" = ( +/obj/structure/foamedmetal, +/obj/machinery/door/blast/regular/open, +/obj/decal/cleanable/blood/oil, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"by" = ( +/obj/decal/cleanable/blood/oil, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/retaliate/malf_drone, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bz" = ( +/obj/item/trash/material/metal, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/computer, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bA" = ( +/obj/machinery/constructable_frame/machine_frame, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bB" = ( +/obj/item/trash/material/metal, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/server, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bC" = ( +/obj/item/stack/cable_coil/yellow, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bD" = ( +/obj/structure/foamedmetal, +/obj/machinery/light, +/obj/decal/cleanable/blood/oil, +/obj/item/mine_old, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bF" = ( +/obj/item/circuitboard/broken, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/item/computer_hardware/network_card/advanced, +/obj/item/storage/box/data_disk/basic, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"bG" = ( +/obj/random/closet_tech, +/obj/machinery/light, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bI" = ( +/obj/item/circuitboard/broken, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"bJ" = ( +/obj/item/circuitboard/telecomms/server, +/obj/machinery/light/floor/built, +/obj/item/stack/cable_coil/white, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"bK" = ( +/obj/item/stack/material/plastic/random, +/obj/random/techpart, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"bL" = ( +/obj/item/trash/material/circuit, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/server, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bN" = ( +/obj/structure/salvageable/implant_container, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bO" = ( +/obj/item/trash/material/circuit, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/computer, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bP" = ( +/obj/structure/foamedmetal, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bQ" = ( +/obj/random/closet_tech, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bR" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/wall/r_wall, +/area/map_template/deepmaint) +"bS" = ( +/obj/structure/salvageable/personal, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/item/computer_hardware/printer, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bT" = ( +/obj/item/stack/cable_coil, +/obj/random/techpart, +/obj/item/trash/material/circuit, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/server, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bU" = ( +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/autolathe, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bV" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bW" = ( +/obj/random/techpart, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bX" = ( +/obj/structure/foamedmetal, +/obj/structure/salvageable/computer, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"bY" = ( +/obj/item/circuitboard/telecomms/bus, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"bZ" = ( +/obj/random/pack/tech_loot, +/obj/item/trash/material/metal, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"ca" = ( +/obj/machinery/light, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"cb" = ( +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"cc" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/item/storage/box/data_disk, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"cd" = ( +/obj/item/remains/xeno, +/obj/machinery/light, +/obj/random/lathe_disk, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"ce" = ( +/obj/random/pack/tech_loot, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/item/computer_hardware/network_card/advanced, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"cf" = ( +/obj/structure/foamedmetal, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"cg" = ( +/obj/random/techpart, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"ch" = ( +/obj/random/junk, +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"ci" = ( +/obj/structure/firedoor_assembly, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"cj" = ( +/obj/machinery/light/floor/built, +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"ck" = ( +/obj/random/techpart, +/obj/item/circuitboard/broken, +/obj/item/trash/material/device, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"cl" = ( +/obj/item/trash/material/circuit, +/obj/decal/cleanable/blood/oil, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"cm" = ( +/obj/item/stack/cable_coil, +/obj/item/circuitboard/broken, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/bluegrid, +/area/map_template/deepmaint) +"cn" = ( +/obj/item/trash/material/metal, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/hivebot/range, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"co" = ( +/obj/structure/foamedmetal, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/computer, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"cp" = ( +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"cq" = ( +/obj/window_lwall_spawn/reinforced, +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"cr" = ( +/obj/structure/foamedmetal, +/obj/decal/cleanable/blood/oil, +/obj/structure/salvageable/computer, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"cs" = ( +/obj/machinery/door/blast/regular/open, +/obj/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"eg" = ( +/obj/machinery/light/floor/built, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"gC" = ( +/obj/decal/cleanable/dirt, +/obj/random/cluster/psi_monster, +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"ko" = ( +/obj/structure/salvageable/computer, +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"kS" = ( +/obj/random/techpart, +/obj/item/trash/material/metal, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"lq" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/item/computer_hardware/card_slot, +/mob/living/simple_animal/hostile/hivebot/range, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"nc" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/hivebot/range, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"ns" = ( +/obj/random/pack/tech_loot, +/obj/random/techpart, +/obj/structure/table/reinforced, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"nu" = ( +/obj/random/pack/tech_loot, +/obj/structure/table/reinforced, +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"ow" = ( +/obj/item/trash/material/metal, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"px" = ( +/obj/decal/cleanable/dirt, +/obj/random/lathe_disk, +/obj/random/cluster/psi_monster/low_chance, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"pZ" = ( +/obj/random/pack/tech_loot, +/obj/structure/table/reinforced, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"qb" = ( +/obj/decal/cleanable/blood/oil, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"rQ" = ( +/obj/structure/table/bench/wooden, +/obj/decal/cleanable/blood/oil, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"tC" = ( +/obj/decal/cleanable/dirt, +/obj/structure/salvageable/computer, +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"ww" = ( +/obj/structure/foamedmetal, +/obj/random/closet_tech, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"ya" = ( +/obj/machinery/light, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"yZ" = ( +/obj/random/pack/tech_loot, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"BF" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/structure/AIcore, +/obj/item/device/aicard, +/obj/item/computer_hardware/hard_drive/portable/advanced/shady, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"CF" = ( +/obj/random/junkfood, +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"Ds" = ( +/obj/machinery/door/airlock/vault/bolted, +/obj/item/mine_old, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"GM" = ( +/obj/random/pack/tech_loot, +/obj/structure/table/reinforced, +/obj/machinery/light, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"Hd" = ( +/obj/random/cluster/psi_monster, +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"HK" = ( +/obj/item/circuitboard/broken, +/obj/decal/cleanable/blood/oil, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/obj/item/computer_hardware/ai_slot, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"HW" = ( +/obj/decal/cleanable/dirt, +/obj/random/lathe_disk, +/obj/structure/salvageable/autolathe, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"HZ" = ( +/obj/item/remains/xeno, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"KH" = ( +/obj/random/pack/tech_loot, +/obj/structure/table/reinforced, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"Ma" = ( +/obj/random/techpart, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/tiled/steel/bar_dance, +/area/map_template/deepmaint) +"Pp" = ( +/obj/random/pack/tech_loot, +/obj/random/techpart, +/obj/structure/table/bench/wooden, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"PN" = ( +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/retaliate/malf_drone, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"RN" = ( +/obj/item/trash/material/metal, +/obj/decal/cleanable/blood/oil, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"Ta" = ( +/obj/decal/cleanable/dirt, +/obj/item/storage/box/data_disk/basic, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"Td" = ( +/obj/structure/foamedmetal, +/turf/simulated/floor/tiled/steel, +/area/map_template/deepmaint) +"VS" = ( +/obj/item/trash/material/metal, +/obj/decal/cleanable/dirt, +/obj/decal/cleanable/dirt, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) +"Yy" = ( +/obj/decal/cleanable/dirt, +/obj/random/cluster/psi_monster/low_chance, +/turf/simulated/floor/reinforced, +/area/map_template/deepmaint) + +(1,1,1) = {" +aa +aa +aa +aa +cj +aa +aa +aa +aa +aa +cp +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +cr +bP +aa +aa +cj +aa +aa +aa +cj +aa +aa +"} +(3,1,1) = {" +aa +ab +ac +aN +ac +cq +au +bu +bs +bx +at +bP +gC +aa +aa +aa +aa +aa +aa +aa +aa +"} +(4,1,1) = {" +ap +ab +ai +aL +ar +cq +bO +ca +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ch +aa +aa +"} +(5,1,1) = {" +aa +ab +aX +aO +aX +cq +bm +aR +cg +au +au +bG +ab +bQ +bU +KH +nu +ab +Td +aa +aa +"} +(6,1,1) = {" +aa +ab +ar +aZ +bz +cq +bS +cc +al +cl +PN +aS +Ds +RN +px +Pp +KH +cq +Td +cj +aa +"} +(7,1,1) = {" +aa +ab +as +bn +aK +cq +bm +aR +aS +bu +au +bG +ab +ww +bV +HZ +KH +cq +Td +aa +aa +"} +(8,1,1) = {" +aa +ab +bl +ay +bA +cq +cq +cq +cq +bd +cq +cq +ab +bR +bR +Ta +qb +ab +ch +aa +aa +"} +(9,1,1) = {" +aa +ab +aw +aB +aN +bl +bk +bk +bl +aV +bl +bl +bN +aE +ab +cb +bP +ab +tC +aa +aa +"} +(10,1,1) = {" +aa +ab +aF +bb +bF +bf +ah +bo +ci +aY +bq +ag +aC +nc +cq +cb +cd +ab +ko +aa +aa +"} +(11,1,1) = {" +ap +ab +aH +aJ +bJ +bg +bT +bp +an +bY +bZ +Ma +HK +BF +cq +bP +cb +cs +Hd +cj +aa +"} +(12,1,1) = {" +aa +ab +aF +br +bK +bh +bo +ce +ck +cm +ci +bI +ow +lq +cq +bP +ya +ab +aa +aa +aa +"} +(13,1,1) = {" +aa +ab +bl +bt +aV +bi +bl +bl +aI +aV +bA +bk +bN +aE +ab +bW +yZ +ab +aa +aa +aa +"} +(14,1,1) = {" +aa +ab +bl +aZ +aX +cq +cq +cq +cq +bd +cq +cq +ab +ab +ab +bV +cb +ab +ch +aa +CF +"} +(15,1,1) = {" +aa +ab +aI +bq +aM +cq +bm +aS +cg +by +au +bG +ab +bQ +Yy +HZ +ns +cq +Td +aa +aa +"} +(16,1,1) = {" +aa +ab +aX +bw +aX +cq +bS +bu +aS +cn +cc +VS +aD +kS +Ta +rQ +pZ +cq +aa +aa +aa +"} +(17,1,1) = {" +aa +ab +aI +aU +ba +cq +bm +cf +cf +co +au +bG +ab +bQ +HW +pZ +GM +ab +ch +aa +aa +"} +(18,1,1) = {" +aa +ab +bB +bC +aI +cq +bX +bD +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +cj +aa +"} +(19,1,1) = {" +ap +ab +bi +bo +bL +cq +bX +bP +bv +at +bP +bV +aa +aa +ch +aa +aa +ch +aa +aa +aa +"} +(20,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +bX +eg +aa +Hd +aa +aa +cj +aa +CF +aa +aa +"} +(21,1,1) = {" +aa +aa +aa +aa +cj +aa +aa +aa +aa +aa +aa +aa +CF +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/packs/deepmaint/deepmaint_rooms/normal/_normal_rooms.dm b/packs/deepmaint/deepmaint_rooms/normal/_normal_rooms.dm new file mode 100644 index 0000000000000..7f770cad256e7 --- /dev/null +++ b/packs/deepmaint/deepmaint_rooms/normal/_normal_rooms.dm @@ -0,0 +1,83 @@ +/datum/map_template/deepmaint_template/room/unionists + name = "Unionists" + desc = "We have seized the means of production!" + id = "deepmaint_room_unionists" + mappaths = list('packs/deepmaint/deepmaint_rooms/normal/angry_unionists.dmm') + +/datum/map_template/deepmaint_template/room/asteroid_bar + name = "Asteroid Bar" + desc = "Take a load off." + id = "deepmaint_room_asteroid_bar" + mappaths = list('packs/deepmaint/deepmaint_rooms/normal/asteroid_bar.dmm') + +/datum/map_template/deepmaint_template/room/casino + name = "Casino" + desc = "You can only lose 100% of your money." + id = "deepmaint_room_casino" + mappaths = list('packs/deepmaint/deepmaint_rooms/normal/casino.dmm') + +/datum/map_template/deepmaint_template/room/diner + name = "Diner" + desc = "A lovely dinner, with a twist." + id = "deepmaint_room_diner" + mappaths = list('packs/deepmaint/deepmaint_rooms/normal/diner.dmm') + +/datum/map_template/deepmaint_template/room/engine_room + name = "Engine Room" + desc = "Is this what powers this place?" + id = "deepmaint_room_engine_room" + mappaths = list('packs/deepmaint/deepmaint_rooms/normal/engine_room.dmm') + +/datum/map_template/deepmaint_template/room/geese_observation + name = "Geese Observation" + desc = "Look, but for the love of GOD DON'T TOUCH THEM." + id = "deepmaint_room_geese_observation" + mappaths = list('packs/deepmaint/deepmaint_rooms/normal/geese_observation.dmm') + +/datum/map_template/deepmaint_template/room/lab + name = "Lab" + desc = "Science! And monsters!" + id = "deepmaint_room_lab" + mappaths = list('packs/deepmaint/deepmaint_rooms/normal/lab.dmm') + +/datum/map_template/deepmaint_template/room/catwalks + name = "Catwalks" + desc = "A pleasent view of the unpleasant fauna." + id = "deepmaint_room_catwalks" + mappaths = list('packs/deepmaint/deepmaint_rooms/normal/catwalks.dmm') + +/datum/map_template/deepmaint_template/room/office + name = "Office" + desc = "Ah, hello there! What can I do for you?" + id = "deepmaint_room_office" + mappaths = list('packs/deepmaint/deepmaint_rooms/normal/office.dmm') + +/datum/map_template/deepmaint_template/room/pirate_asteroid + name = "Pirate Asteroid" + desc = "Yar." + id = "deepmaint_room_pirate_asteroid" + mappaths = list('packs/deepmaint/deepmaint_rooms/normal/pirate_asteroid.dmm') + +/datum/map_template/deepmaint_template/room/robot_asteroid + name = "Robot Asteroid" + desc = "Beep boop." + id = "deepmaint_room_robot_asteroid" + mappaths = list('packs/deepmaint/deepmaint_rooms/normal/robot_asteroid.dmm') + +/datum/map_template/deepmaint_template/room/ship_wreck + name = "Ship Wreck" + desc = "Did it crash before or after it got here?" + id = "deepmaint_room_ship_wreck" + mappaths = list('packs/deepmaint/deepmaint_rooms/normal/ship_wreck.dmm') + +/datum/map_template/deepmaint_template/room/supply + name = "Supply" + desc = "Does anyone ever clean this place?" + id = "deepmaint_room_supply" + mappaths = list('packs/deepmaint/deepmaint_rooms/normal/supply.dmm') + +/datum/map_template/deepmaint_template/room/medical + name = "Medical" + desc = "Oops, zat was not medicine!" + id = "deepmaint_room_medical" + mappaths = list('packs/deepmaint/deepmaint_rooms/normal/medical.dmm') diff --git a/maps/deepmaint/deepmaint_rooms/normal/angry_unionists.dmm b/packs/deepmaint/deepmaint_rooms/normal/angry_unionists.dmm similarity index 95% rename from maps/deepmaint/deepmaint_rooms/normal/angry_unionists.dmm rename to packs/deepmaint/deepmaint_rooms/normal/angry_unionists.dmm index 98a5526b10591..e16addb593a44 100644 --- a/maps/deepmaint/deepmaint_rooms/normal/angry_unionists.dmm +++ b/packs/deepmaint/deepmaint_rooms/normal/angry_unionists.dmm @@ -30,7 +30,7 @@ /obj/item/clothing/head/beret/centcom/officer, /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/accessory/blue, -/obj/item/clothing/accessory/wristwatches/leather, +/obj/item/clothing/accessory/wristwatch/leather, /obj/item/clothing/accessory/ubac/blue, /obj/item/clothing/accessory/toggleable/navy_jacket, /obj/item/clothing/accessory/storage/holster/armpit, @@ -42,7 +42,7 @@ /obj/structure/table/rack, /obj/random/voidsuit, /obj/random/voidhelmet, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/dark/monotile, /area/map_template/deepmaint) "iR" = ( @@ -113,7 +113,7 @@ /obj/random/cash, /obj/random/cash, /obj/random/cash, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/dark/monotile, /area/map_template/deepmaint) "pS" = ( @@ -127,7 +127,7 @@ /obj/random/firstaid, /obj/random/firstaid, /obj/random/firstaid, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/dark/monotile, /area/map_template/deepmaint) "qP" = ( @@ -155,7 +155,7 @@ /turf/simulated/floor/carpet/red, /area/map_template/deepmaint) "uP" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor, /area/map_template/deepmaint) "wK" = ( @@ -220,7 +220,7 @@ /area/map_template/deepmaint) "DI" = ( /obj/machinery/door/airlock/highsecurity, -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /turf/simulated/floor/tiled/dark/monotile, /area/map_template/deepmaint) "DM" = ( @@ -256,14 +256,14 @@ "Iz" = ( /obj/structure/table/rack, /obj/random/backpack, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/dark/monotile, /area/map_template/deepmaint) "Jl" = ( /turf/simulated/wall, /area/map_template/deepmaint) "Js" = ( -/obj/effect/floor_decal/corner/red/diagonal, +/obj/floor_decal/corner/red/diagonal, /turf/simulated/floor/tiled/dark, /area/map_template/deepmaint) "Jt" = ( @@ -276,7 +276,7 @@ /obj/random/ammo, /obj/random/ammo, /obj/random/ammo, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/dark/monotile, /area/map_template/deepmaint) "Kn" = ( @@ -290,7 +290,7 @@ /turf/simulated/floor/carpet/blue2, /area/map_template/deepmaint) "Mo" = ( -/obj/effect/wallframe_spawn/reinforced/bare, +/obj/wallframe_spawn/reinforced/bare, /turf/simulated/floor, /area/map_template/deepmaint) "Nj" = ( @@ -337,7 +337,7 @@ /turf/simulated/floor/tiled/dark/monotile, /area/map_template/deepmaint) "PV" = ( -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, /turf/simulated/floor/carpet/blue2, /area/map_template/deepmaint) "Rc" = ( @@ -359,7 +359,7 @@ /obj/structure/bed/chair/comfy/blue{ dir = 4 }, -/obj/effect/landmark/corpse/commander, +/obj/landmark/corpse/commander, /obj/machinery/light{ dir = 8 }, @@ -401,7 +401,7 @@ }, /obj/random/energy, /obj/random/handgun, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/dark/monotile, /area/map_template/deepmaint) "ZG" = ( diff --git a/maps/deepmaint/deepmaint_rooms/normal/asteroid_bar.dmm b/packs/deepmaint/deepmaint_rooms/normal/asteroid_bar.dmm similarity index 82% rename from maps/deepmaint/deepmaint_rooms/normal/asteroid_bar.dmm rename to packs/deepmaint/deepmaint_rooms/normal/asteroid_bar.dmm index 11c22e5a92d24..563ac5be7f9e9 100644 --- a/maps/deepmaint/deepmaint_rooms/normal/asteroid_bar.dmm +++ b/packs/deepmaint/deepmaint_rooms/normal/asteroid_bar.dmm @@ -6,7 +6,7 @@ /obj/structure/bed/chair/padded/brown{ dir = 4 }, -/obj/effect/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/corner/lightgrey/mono, /obj/machinery/light{ dir = 8 }, @@ -20,7 +20,7 @@ /turf/simulated/floor/lino, /area/map_template/deepmaint) "d" = ( -/obj/effect/floor_decal/corner/lightgrey/diagonal, +/obj/floor_decal/corner/lightgrey/diagonal, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "e" = ( @@ -29,16 +29,16 @@ /turf/simulated/floor/lino, /area/map_template/deepmaint) "f" = ( -/obj/effect/floor_decal/asteroid, +/obj/floor_decal/asteroid, /turf/simulated/floor/asteroid{ initial_gas = list("oxygen"=21.8366,"nitrogen"=82.1472) }, /area/map_template/deepmaint) "g" = ( -/obj/effect/floor_decal/corner/lightgrey{ +/obj/floor_decal/corner/lightgrey{ dir = 6 }, -/obj/effect/floor_decal/corner/lightgrey{ +/obj/floor_decal/corner/lightgrey{ dir = 1 }, /obj/machinery/light/small{ @@ -56,18 +56,18 @@ /turf/simulated/floor/lino, /area/map_template/deepmaint) "j" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/map_template/deepmaint) "k" = ( /obj/structure/bed/chair/padded/brown{ dir = 4 }, -/obj/effect/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/corner/lightgrey/mono, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "l" = ( -/obj/effect/floor_decal/asteroid, +/obj/floor_decal/asteroid, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -76,11 +76,11 @@ /obj/structure/bed/chair/padded/brown{ dir = 1 }, -/obj/effect/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/corner/lightgrey/mono, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "o" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner{ +/obj/floor_decal/industrial/warning/dust/corner{ dir = 8 }, /obj/machinery/light/small, @@ -90,12 +90,12 @@ /area/map_template/deepmaint) "p" = ( /obj/structure/table/standard, -/obj/effect/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/corner/lightgrey/mono, /obj/item/reagent_containers/food/drinks/cans/dr_gibb, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "q" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 6 }, /obj/machinery/light/small{ @@ -110,7 +110,7 @@ /turf/simulated/floor/lino, /area/map_template/deepmaint) "s" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/map_template/deepmaint) "t" = ( @@ -126,7 +126,7 @@ /obj/structure/bed/chair/padded/brown{ dir = 8 }, -/obj/effect/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/corner/lightgrey/mono, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "w" = ( @@ -135,7 +135,7 @@ /turf/simulated/floor/lino, /area/map_template/deepmaint) "x" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 9 }, /turf/simulated/floor/tiled, @@ -151,7 +151,7 @@ /turf/simulated/floor/lino, /area/map_template/deepmaint) "z" = ( -/obj/effect/floor_decal/industrial/warning/dust, +/obj/floor_decal/industrial/warning/dust, /turf/simulated/floor/asteroid{ initial_gas = list("oxygen"=21.8366,"nitrogen"=82.1472) }, @@ -163,7 +163,7 @@ /area/map_template/deepmaint) "B" = ( /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap{ - icon = 'icons/obj/hydroponics_growing.dmi'; + icon = 'icons/obj/flora/hydroponics_growing.dmi'; icon_state = null }, /turf/simulated/floor/asteroid{ @@ -171,7 +171,7 @@ }, /area/map_template/deepmaint) "C" = ( -/obj/effect/floor_decal/industrial/warning/dust{ +/obj/floor_decal/industrial/warning/dust{ dir = 9 }, /turf/simulated/floor/asteroid{ @@ -192,16 +192,16 @@ /obj/structure/bed/chair/padded/brown{ dir = 8 }, -/obj/effect/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/corner/lightgrey/mono, /obj/machinery/light{ dir = 4 }, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "G" = ( -/obj/effect/floor_decal/industrial/warning/dust, +/obj/floor_decal/industrial/warning/dust, /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap{ - icon = 'icons/obj/hydroponics_growing.dmi'; + icon = 'icons/obj/flora/hydroponics_growing.dmi'; icon_state = null }, /turf/simulated/floor/asteroid{ @@ -222,10 +222,10 @@ /turf/simulated/floor/lino, /area/map_template/deepmaint) "J" = ( -/obj/effect/floor_decal/corner/lightgrey{ +/obj/floor_decal/corner/lightgrey{ dir = 9 }, -/obj/effect/floor_decal/corner/lightgrey, +/obj/floor_decal/corner/lightgrey, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "K" = ( @@ -233,18 +233,18 @@ /turf/simulated/floor/lino, /area/map_template/deepmaint) "L" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 6 }, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "M" = ( /obj/structure/bed/chair/padded/brown, -/obj/effect/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/corner/lightgrey/mono, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "N" = ( -/obj/effect/floor_decal/industrial/warning/dust{ +/obj/floor_decal/industrial/warning/dust{ dir = 8 }, /turf/simulated/floor/asteroid{ @@ -252,13 +252,13 @@ }, /area/map_template/deepmaint) "O" = ( -/obj/effect/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/corner/lightgrey/mono, /obj/item/stool/bar/padded, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "P" = ( /obj/structure/table/standard, -/obj/effect/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/corner/lightgrey/mono, /obj/random/drinkbottle, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) @@ -271,10 +271,10 @@ }, /area/map_template/deepmaint) "S" = ( -/obj/effect/floor_decal/corner/lightgrey{ +/obj/floor_decal/corner/lightgrey{ dir = 6 }, -/obj/effect/floor_decal/corner/lightgrey{ +/obj/floor_decal/corner/lightgrey{ dir = 1 }, /obj/machinery/light{ @@ -284,7 +284,7 @@ /area/map_template/deepmaint) "T" = ( /obj/structure/table/standard, -/obj/effect/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/corner/lightgrey/mono, /obj/machinery/fabricator/micro/bartender, /obj/item/stack/material/steel/ten, /obj/item/stack/material/glass/ten, @@ -293,21 +293,21 @@ /area/map_template/deepmaint) "U" = ( /obj/structure/table/standard, -/obj/effect/floor_decal/corner/lightgrey/mono, +/obj/floor_decal/corner/lightgrey/mono, /obj/item/reagent_containers/food/drinks/coffee, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "V" = ( -/obj/effect/floor_decal/corner/lightgrey{ +/obj/floor_decal/corner/lightgrey{ dir = 6 }, -/obj/effect/floor_decal/corner/lightgrey{ +/obj/floor_decal/corner/lightgrey{ dir = 1 }, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "W" = ( -/obj/effect/floor_decal/industrial/warning/dust{ +/obj/floor_decal/industrial/warning/dust{ dir = 4 }, /turf/simulated/floor/asteroid{ diff --git a/maps/deepmaint/deepmaint_rooms/normal/casino.dmm b/packs/deepmaint/deepmaint_rooms/normal/casino.dmm similarity index 85% rename from maps/deepmaint/deepmaint_rooms/normal/casino.dmm rename to packs/deepmaint/deepmaint_rooms/normal/casino.dmm index 5a6464a301280..3f42ae4a4d5af 100644 --- a/maps/deepmaint/deepmaint_rooms/normal/casino.dmm +++ b/packs/deepmaint/deepmaint_rooms/normal/casino.dmm @@ -5,7 +5,7 @@ /turf/simulated/floor/carpet, /area/map_template/deepmaint) "cF" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/item/ammo_casing/pistol/used, /turf/simulated/floor/shuttle/darkred, /area/map_template/deepmaint) @@ -13,14 +13,14 @@ /turf/simulated/floor, /area/map_template/deepmaint) "dW" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/shuttle/darkred, /area/map_template/deepmaint) "fo" = ( /obj/item/ammo_casing/pistol/used, /obj/item/ammo_casing/pistol/used, /obj/item/ammo_casing/pistol/used, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/shuttle/darkred, /area/map_template/deepmaint) "fL" = ( @@ -39,7 +39,7 @@ /turf/simulated/floor/shuttle/darkred, /area/map_template/deepmaint) "hv" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/vending/sovietsoda{ @@ -59,7 +59,7 @@ /turf/simulated/floor/carpet, /area/map_template/deepmaint) "ik" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/vending/weeb{ @@ -96,7 +96,7 @@ /turf/simulated/floor/carpet, /area/map_template/deepmaint) "lF" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/vending/snix{ @@ -126,7 +126,7 @@ "ru" = ( /obj/item/ammo_casing/pistol/used, /obj/item/ammo_casing/pistol/used, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 10 }, /turf/simulated/floor/shuttle/darkred, @@ -136,7 +136,7 @@ /turf/simulated/floor/wood/mahogany, /area/map_template/deepmaint) "ur" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/vending/cigarette{ @@ -148,7 +148,7 @@ /turf/simulated/wall, /area/map_template/deepmaint) "vp" = ( -/obj/effect/gibspawner/human, +/obj/gibspawner/human, /turf/simulated/floor/wood/mahogany, /area/map_template/deepmaint) "wH" = ( @@ -156,7 +156,7 @@ /turf/simulated/floor/wood/mahogany, /area/map_template/deepmaint) "xL" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/shuttle/darkred, @@ -172,7 +172,7 @@ /turf/simulated/floor/carpet, /area/map_template/deepmaint) "zL" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/vending/hotfood{ @@ -192,16 +192,16 @@ /area/map_template/deepmaint) "Ex" = ( /obj/item/stool/bar/padded, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/carpet, /area/map_template/deepmaint) "Fz" = ( -/obj/effect/decal/cleanable/blood/splatter, +/obj/decal/cleanable/blood/splatter, /obj/item/bananapeel, /turf/simulated/floor/wood/mahogany, /area/map_template/deepmaint) "Gs" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/vending/snack{ @@ -218,8 +218,8 @@ /turf/simulated/floor/carpet, /area/map_template/deepmaint) "Hr" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/floor_decal/industrial/warning{ +/obj/decal/cleanable/blood/splatter, +/obj/floor_decal/industrial/warning{ dir = 9; icon_state = "warning" }, @@ -229,13 +229,13 @@ "HF" = ( /obj/item/ammo_casing/pistol/used, /obj/item/ammo_casing/pistol/used, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 5 }, /turf/simulated/floor/shuttle/darkred, /area/map_template/deepmaint) "HN" = ( -/obj/effect/decal/cleanable/blood/splatter, +/obj/decal/cleanable/blood/splatter, /obj/item/stool/bar/padded, /obj/item/ammo_casing/pistol/used, /turf/simulated/floor/carpet, @@ -247,9 +247,9 @@ /turf/simulated/floor/wood/mahogany, /area/map_template/deepmaint) "Jk" = ( -/obj/effect/decal/cleanable/generic, +/obj/decal/cleanable/generic, /obj/item/trash/cigbutt/jerichos, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/machinery/light/spot{ @@ -258,14 +258,14 @@ /turf/simulated/floor/shuttle/darkred, /area/map_template/deepmaint) "JE" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/shuttle/darkred, /area/map_template/deepmaint) "JP" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/decal/cleanable/liquid_fuel, +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/simulated/floor/shuttle/darkred, @@ -279,8 +279,8 @@ /turf/simulated/floor/wood/mahogany, /area/map_template/deepmaint) "LJ" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/floor_decal/industrial/warning, +/obj/decal/cleanable/blood/splatter, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/shuttle/darkred, /area/map_template/deepmaint) "MB" = ( @@ -289,7 +289,7 @@ /turf/simulated/floor/wood/mahogany, /area/map_template/deepmaint) "MO" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 6 }, /obj/structure/closet/crate/trashcart, @@ -297,12 +297,12 @@ /turf/simulated/floor/shuttle/darkred, /area/map_template/deepmaint) "Ng" = ( -/obj/effect/decal/cleanable/blood/splatter, +/obj/decal/cleanable/blood/splatter, /turf/simulated/floor/wood/mahogany, /area/map_template/deepmaint) "Nw" = ( -/obj/effect/decal/cleanable/liquid_fuel, -/obj/effect/floor_decal/industrial/warning{ +/obj/decal/cleanable/liquid_fuel, +/obj/floor_decal/industrial/warning{ dir = 4 }, /obj/machinery/light/spot{ @@ -311,7 +311,7 @@ /turf/simulated/floor/shuttle/darkred, /area/map_template/deepmaint) "Oh" = ( -/obj/effect/decal/cleanable/blood/splatter, +/obj/decal/cleanable/blood/splatter, /obj/item/ammo_casing/pistol/used, /obj/item/ammo_casing/pistol/used, /obj/item/ammo_casing/pistol/used, @@ -334,7 +334,7 @@ /turf/simulated/floor/carpet, /area/map_template/deepmaint) "Pt" = ( -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/shuttle/darkred, /area/map_template/deepmaint) "PY" = ( @@ -342,7 +342,7 @@ /turf/simulated/floor/carpet, /area/map_template/deepmaint) "Qx" = ( -/obj/effect/decal/cleanable/generic, +/obj/decal/cleanable/generic, /turf/simulated/floor/wood/mahogany, /area/map_template/deepmaint) "Rn" = ( @@ -351,18 +351,18 @@ /area/map_template/deepmaint) "St" = ( /obj/item/trash/cigbutt/jerichos, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4 }, /turf/simulated/floor/shuttle/darkred, /area/map_template/deepmaint) "Sv" = ( -/obj/effect/landmark/corpse/commander, +/obj/landmark/corpse/commander, /turf/simulated/floor/wood/mahogany, /area/map_template/deepmaint) "Sz" = ( /obj/item/stool/bar/padded, -/obj/effect/decal/cleanable/generic, +/obj/decal/cleanable/generic, /turf/simulated/floor/carpet, /area/map_template/deepmaint) "Wd" = ( @@ -385,14 +385,14 @@ /turf/simulated/floor/shuttle/darkred, /area/map_template/deepmaint) "Zh" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /obj/machinery/light/spot{ dir = 1 }, /turf/simulated/floor/shuttle/darkred, /area/map_template/deepmaint) "ZH" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8 }, /obj/structure/table/rack, diff --git a/maps/deepmaint/deepmaint_rooms/normal/catwalks.dmm b/packs/deepmaint/deepmaint_rooms/normal/catwalks.dmm similarity index 80% rename from maps/deepmaint/deepmaint_rooms/normal/catwalks.dmm rename to packs/deepmaint/deepmaint_rooms/normal/catwalks.dmm index d409652c19e41..3b3f1eea5a7b7 100644 --- a/maps/deepmaint/deepmaint_rooms/normal/catwalks.dmm +++ b/packs/deepmaint/deepmaint_rooms/normal/catwalks.dmm @@ -1,7 +1,7 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "a" = ( -/obj/effect/floor_decal/corner_techfloor_grid, -/obj/effect/floor_decal/techfloor/corner, +/obj/floor_decal/corner_techfloor_grid, +/obj/floor_decal/techfloor/corner, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "b" = ( @@ -9,7 +9,7 @@ dir = 4; icon_state = "railing0-1" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled, @@ -44,17 +44,17 @@ dir = 8; icon_state = "railing0-1" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "M" = ( -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "O" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 8 }, /turf/simulated/floor/tiled, @@ -67,51 +67,51 @@ dir = 1; icon_state = "railing0-1" }, -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "S" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 1 }, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "T" = ( -/obj/effect/floor_decal/techfloor{ +/obj/floor_decal/techfloor{ dir = 4 }, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "U" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 8 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 8 }, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "V" = ( /obj/structure/railing/mapped, -/obj/effect/floor_decal/techfloor, +/obj/floor_decal/techfloor, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "W" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 4 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 4 }, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "X" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 1 }, -/obj/effect/floor_decal/techfloor/corner{ +/obj/floor_decal/techfloor/corner{ dir = 1 }, /turf/simulated/floor/tiled, diff --git a/packs/deepmaint/deepmaint_rooms/normal/diner.dmm b/packs/deepmaint/deepmaint_rooms/normal/diner.dmm new file mode 100644 index 0000000000000..b276f76566f5c --- /dev/null +++ b/packs/deepmaint/deepmaint_rooms/normal/diner.dmm @@ -0,0 +1,625 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"at" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/device/flashlight/lamp/green, +/obj/structure/sign/warning/smoking{ + pixel_y = 24 + }, +/turf/simulated/floor/carpet/red, +/area/map_template/deepmaint) +"cF" = ( +/obj/structure/table/marble, +/obj/item/book/manual/barman_recipes, +/obj/item/reagent_containers/food/snacks/canned/caviar/true, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"dp" = ( +/obj/random/trash, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"dt" = ( +/obj/machinery/door/airlock/glass/civilian, +/turf/simulated/floor/tiled/steel_ridged, +/area/map_template/deepmaint) +"fb" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/device/paicard, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"fu" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"fM" = ( +/mob/living/simple_animal/hostile/human/syndicate/melee, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"fO" = ( +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"gD" = ( +/obj/structure/sign/double/barsign, +/turf/simulated/wall, +/area/map_template/deepmaint) +"iu" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"iF" = ( +/obj/floor_decal/corner/blue/diagonal{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"ji" = ( +/obj/structure/bed/chair/armchair/brown{ + dir = 8 + }, +/turf/simulated/floor/carpet/red, +/area/map_template/deepmaint) +"ku" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/flame/candle, +/obj/machinery/light/spot, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"mi" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/reagentgrinder/juicer, +/obj/structure/table/marble, +/obj/item/reagent_containers/glass/beaker/large, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"mt" = ( +/obj/machinery/vending/dinnerware{ + dir = 8 + }, +/obj/structure/window/reinforced, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"mx" = ( +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_alc{ + dir = 8 + }, +/obj/machinery/light/spot{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"mJ" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/snacks/dehydrated_carp, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"nd" = ( +/obj/structure/bed/chair/armchair/brown{ + dir = 4 + }, +/turf/simulated/floor/carpet/red, +/area/map_template/deepmaint) +"ow" = ( +/obj/structure/flora/pottedplant/fern, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"qr" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/drinks/glass2/square/bodaplus, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"qs" = ( +/obj/structure/window/reinforced/tinted/frosted, +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/structure/flora/pottedplant/fern, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"ra" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"rn" = ( +/obj/wingrille_spawn, +/turf/simulated/floor, +/area/map_template/deepmaint) +"sG" = ( +/turf/simulated/floor, +/area/map_template/deepmaint) +"tx" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/glass/bucket/wood, +/obj/item/reagent_containers/spray/cleaner/deodorant, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"ud" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/snacks/slice/meatpizza, +/obj/item/reagent_containers/food/snacks/slice/meatpizza, +/obj/item/reagent_containers/food/snacks/slice/meatpizza, +/obj/item/reagent_containers/food/snacks/slice/meatpizza, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"uK" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/snacks/cracker, +/obj/random/medical, +/obj/random/medical, +/obj/random/medical, +/obj/random/medical, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"vV" = ( +/obj/machinery/door/window/southright, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"wj" = ( +/obj/machinery/light/spot{ + dir = 8 + }, +/obj/structure/flora/pottedplant/fern, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"wy" = ( +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_coffee{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"yb" = ( +/obj/structure/table/marble, +/obj/machinery/fabricator/micro/bartender, +/obj/item/stack/material/plastic/ten, +/obj/item/stack/material/glass/ten, +/obj/item/stack/material/steel/ten, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"yt" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/snacks/dionaroast, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"zl" = ( +/obj/structure/hygiene/sink{ + dir = 8; + icon_state = "sink"; + pixel_x = -12; + pixel_y = 2 + }, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"zW" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/storage/candle_box, +/obj/random/single/lighter, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"Ak" = ( +/obj/item/stool/bar/padded, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"BS" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/machinery/light/spot, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"Cw" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/drinks/cans/ale, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"CQ" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/drinks/glass2/shot, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"Ep" = ( +/obj/wingrille_spawn, +/turf/simulated/wall, +/area/map_template/deepmaint) +"Gt" = ( +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"HU" = ( +/obj/machinery/door/window/northright, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"It" = ( +/obj/item/stool/bar/padded, +/obj/machinery/light/spot{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"ID" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/snacks/checker/king/red, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"Jw" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 8 + }, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"Lx" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/item/storage/lunchbox/syndicate/filled, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"NV" = ( +/obj/item/stool/bar/padded, +/mob/living/simple_animal/hostile/human/syndicate, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"OF" = ( +/turf/simulated/floor/carpet/red, +/area/map_template/deepmaint) +"OH" = ( +/obj/floor_decal/corner/blue/diagonal, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"Pd" = ( +/obj/item/stool/bar/padded, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"QU" = ( +/mob/living/simple_animal/hostile/human/syndicate/ranged, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"Rh" = ( +/obj/random/junk, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"RQ" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/drinks/glass2/cognac, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"Sj" = ( +/obj/structure/bed/chair/armchair/brown, +/turf/simulated/floor/carpet/red, +/area/map_template/deepmaint) +"Ux" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/drinks/flask/barflask, +/obj/item/reagent_containers/glass/rag, +/obj/item/reagent_containers/spray/cleaner, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"VN" = ( +/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/table/woodentable_reinforced/walnut, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"VY" = ( +/obj/structure/table/woodentable_reinforced/walnut, +/obj/random/single/lighter, +/obj/random/smokes, +/obj/item/material/ashtray/plastic, +/turf/simulated/floor/carpet/red, +/area/map_template/deepmaint) +"Wr" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 4 + }, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"WV" = ( +/obj/structure/bed/chair/wood/walnut{ + dir = 4 + }, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"Xa" = ( +/obj/floor_decal/corner/blue{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"Xs" = ( +/obj/structure/table/marble, +/obj/item/paper/exodus_bartender, +/obj/item/clothing/under/rank/bartender, +/obj/item/gun/projectile/shotgun/doublebarrel, +/obj/item/storage/box/ammo/stunshells, +/obj/item/reagent_containers/spray/pepper, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"Yf" = ( +/turf/simulated/wall, +/area/map_template/deepmaint) +"YK" = ( +/obj/machinery/door/window/westleft, +/turf/simulated/floor/wood/walnut, +/area/map_template/deepmaint) +"YS" = ( +/obj/structure/table/marble, +/obj/item/reagent_containers/food/drinks/bottle/rakia, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) +"ZY" = ( +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_soft{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/map_template/deepmaint) + +(1,1,1) = {" +sG +sG +sG +sG +sG +sG +sG +sG +sG +sG +sG +sG +sG +sG +sG +"} +(2,1,1) = {" +sG +Yf +Yf +Yf +Yf +gD +OH +Xa +iu +Yf +Yf +Yf +Yf +Yf +sG +"} +(3,1,1) = {" +sG +Yf +Ak +It +Ak +Yf +OH +Xa +iF +Yf +Sj +OF +nd +Yf +sG +"} +(4,1,1) = {" +sG +Yf +Ak +Lx +Ak +Yf +rn +dt +Ep +Yf +at +OF +VY +Yf +sG +"} +(5,1,1) = {" +sG +Yf +Ak +ud +Ak +wj +Gt +Gt +Gt +qs +Sj +OF +ji +Yf +sG +"} +(6,1,1) = {" +sG +Yf +Ak +Ak +Ak +dp +Gt +Gt +Gt +Gt +fu +YK +ra +Yf +sG +"} +(7,1,1) = {" +sG +Yf +Wr +Gt +Gt +Gt +Ak +NV +Ak +Gt +Gt +Gt +ku +Yf +sG +"} +(8,1,1) = {" +sG +Yf +fb +fM +Ak +mJ +cF +Ux +qr +ID +Ak +Gt +Jw +Yf +sG +"} +(9,1,1) = {" +sG +Yf +Jw +Gt +Ak +CQ +fO +Pd +fO +RQ +Ak +QU +ow +Yf +sG +"} +(10,1,1) = {" +sG +Yf +ow +Gt +Ak +CQ +fO +Xs +fO +Cw +Ak +Gt +WV +Yf +sG +"} +(11,1,1) = {" +sG +Yf +Wr +Gt +Ak +YS +fO +yb +fO +uK +Ak +Gt +BS +Yf +sG +"} +(12,1,1) = {" +sG +Yf +yt +Gt +Gt +HU +fO +zl +fO +vV +Gt +Rh +Jw +Yf +sG +"} +(13,1,1) = {" +sG +Yf +Jw +Gt +Gt +mi +ZY +mx +wy +mt +VN +tx +zW +Yf +sG +"} +(14,1,1) = {" +sG +Yf +Yf +Yf +Yf +Yf +Yf +Yf +Yf +Yf +Yf +Yf +Yf +Yf +sG +"} +(15,1,1) = {" +sG +sG +sG +sG +sG +sG +sG +sG +sG +sG +sG +sG +sG +sG +sG +"} diff --git a/maps/deepmaint/deepmaint_rooms/normal/engine_room.dmm b/packs/deepmaint/deepmaint_rooms/normal/engine_room.dmm similarity index 87% rename from maps/deepmaint/deepmaint_rooms/normal/engine_room.dmm rename to packs/deepmaint/deepmaint_rooms/normal/engine_room.dmm index dfac84b2c6c81..bea1944b06139 100644 --- a/maps/deepmaint/deepmaint_rooms/normal/engine_room.dmm +++ b/packs/deepmaint/deepmaint_rooms/normal/engine_room.dmm @@ -3,7 +3,7 @@ /obj/machinery/atmospherics/binary/pump{ dir = 8 }, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 9 }, /turf/simulated/floor/tiled/techmaint{ @@ -13,7 +13,7 @@ "bo" = ( /obj/machinery/atmospherics/pipe/manifold/visible/black, /obj/machinery/meter, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 9 }, /turf/simulated/floor/tiled/techmaint{ @@ -27,7 +27,7 @@ /turf/space, /area/map_template/deepmaint) "bX" = ( -/obj/effect/floor_decal/techfloor/orange{ +/obj/floor_decal/techfloor/orange{ dir = 1 }, /obj/structure/dispenser, @@ -41,7 +41,7 @@ /area/map_template/deepmaint) "de" = ( /obj/machinery/door/airlock/external, -/obj/effect/mech_shield, +/obj/mech_shield, /turf/simulated/floor/tiled/techfloor, /area/map_template/deepmaint) "df" = ( @@ -63,16 +63,16 @@ /obj/machinery/atmospherics/binary/passive_gate{ dir = 4 }, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 6 }, -/obj/effect/decal/cleanable/liquid_fuel, +/obj/decal/cleanable/liquid_fuel, /turf/simulated/floor/tiled/techmaint{ initial_gas = list("nitrogen"=50) }, /area/map_template/deepmaint) "fb" = ( -/obj/effect/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange, /obj/structure/inflatable/door, /turf/simulated/floor/tiled/techfloor{ initial_gas = list("nitrogen"=50) @@ -82,7 +82,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 5 }, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 9 }, /obj/machinery/portable_atmospherics/canister/oxygen, @@ -94,21 +94,21 @@ /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 4 }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor, /area/map_template/deepmaint) "hB" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ dir = 1 }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor, /area/map_template/deepmaint) "hE" = ( /obj/structure/sign/warning/vacuum{ pixel_y = 26 }, -/obj/effect/floor_decal/techfloor/orange{ +/obj/floor_decal/techfloor/orange{ dir = 1 }, /obj/structure/table/rack, @@ -126,7 +126,7 @@ /turf/simulated/wall, /area/map_template/deepmaint) "jx" = ( -/obj/effect/floor_decal/techfloor/orange{ +/obj/floor_decal/techfloor/orange{ dir = 1 }, /obj/structure/inflatable/door, @@ -137,7 +137,7 @@ dir = 4; target_pressure = 15000 }, -/obj/effect/floor_decal/techfloor/orange{ +/obj/floor_decal/techfloor/orange{ dir = 1 }, /turf/simulated/floor/tiled/techfloor{ @@ -148,7 +148,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/fuel{ dir = 1 }, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 6 }, /turf/simulated/floor/tiled/techmaint{ @@ -158,7 +158,7 @@ "mX" = ( /obj/machinery/atmospherics/pipe/simple/visible/black, /obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/techfloor/orange{ +/obj/floor_decal/techfloor/orange{ dir = 1 }, /obj/machinery/light/small{ @@ -197,7 +197,7 @@ dir = 1 }, /obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/effect/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange, /obj/machinery/light/small{ dir = 4 }, @@ -226,7 +226,7 @@ /turf/space, /area/map_template/deepmaint) "rX" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 10 }, /turf/simulated/floor/tiled/techfloor{ @@ -241,7 +241,7 @@ /obj/machinery/power/terminal{ dir = 4 }, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 9 }, /turf/simulated/floor/tiled/techmaint{ @@ -255,13 +255,13 @@ /turf/space, /area/map_template/deepmaint) "uv" = ( -/obj/effect/floor_decal/techfloor/orange{ +/obj/floor_decal/techfloor/orange{ dir = 1 }, /obj/machinery/light/small{ dir = 4 }, -/obj/effect/decal/cleanable/liquid_fuel, +/obj/decal/cleanable/liquid_fuel, /turf/simulated/floor/tiled/techfloor/grid{ initial_gas = list("nitrogen"=50) }, @@ -288,7 +288,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/power/generator{ anchored = 1 }, @@ -311,23 +311,23 @@ /obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 4 }, -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor, /area/map_template/deepmaint) "EL" = ( /obj/machinery/atmospherics/pipe/manifold/visible/black{ dir = 4 }, -/obj/effect/floor_decal/techfloor/orange{ +/obj/floor_decal/techfloor/orange{ dir = 1 }, -/obj/effect/decal/cleanable/liquid_fuel, +/obj/decal/cleanable/liquid_fuel, /turf/simulated/floor/tiled/techfloor/grid{ initial_gas = list("nitrogen"=50) }, /area/map_template/deepmaint) "EV" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/binary/circulator{ anchored = 1; dir = 8 @@ -338,7 +338,7 @@ /area/map_template/deepmaint) "FM" = ( /obj/machinery/power/smes/batteryrack, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 6 }, /obj/machinery/light/small{ @@ -357,7 +357,7 @@ dir = 1 }, /obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/techfloor/orange, +/obj/floor_decal/techfloor/orange, /obj/machinery/light/small{ dir = 8 }, @@ -411,7 +411,7 @@ /obj/machinery/power/terminal{ dir = 8 }, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 6 }, /turf/simulated/floor/tiled/techmaint{ @@ -424,7 +424,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 9 }, /obj/machinery/light/small{ @@ -448,7 +448,7 @@ icon_state = "1-2" }, /obj/machinery/portable_atmospherics/canister/hydrogen, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 9 }, /turf/simulated/floor/tiled/techmaint{ @@ -470,7 +470,7 @@ /turf/space, /area/map_template/deepmaint) "Pd" = ( -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /obj/machinery/atmospherics/binary/circulator{ anchored = 1; dir = 4 @@ -484,7 +484,7 @@ dir = 4 }, /obj/machinery/meter, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 10 }, /turf/simulated/floor/tiled/techfloor{ @@ -502,7 +502,7 @@ /obj/machinery/atmospherics/binary/pump{ dir = 4 }, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 6 }, /turf/simulated/floor/tiled/techmaint{ @@ -517,14 +517,14 @@ /turf/space, /area/map_template/deepmaint) "Xk" = ( -/obj/effect/mech_shield, +/obj/mech_shield, /turf/simulated/wall, /area/map_template/deepmaint) "Xp" = ( /obj/machinery/atmospherics/pipe/simple/visible/fuel{ dir = 10 }, -/obj/effect/floor_decal/corner_techfloor_grid{ +/obj/floor_decal/corner_techfloor_grid{ dir = 6 }, /turf/simulated/floor/tiled/techmaint{ @@ -535,7 +535,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/effect/floor_decal/techfloor/orange{ +/obj/floor_decal/techfloor/orange{ dir = 1 }, /obj/machinery/portable_atmospherics/canister/hydrogen, @@ -544,7 +544,7 @@ }, /area/map_template/deepmaint) "YQ" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /turf/simulated/floor, /area/map_template/deepmaint) "Zq" = ( diff --git a/maps/deepmaint/deepmaint_rooms/normal/geese_observation.dmm b/packs/deepmaint/deepmaint_rooms/normal/geese_observation.dmm similarity index 98% rename from maps/deepmaint/deepmaint_rooms/normal/geese_observation.dmm rename to packs/deepmaint/deepmaint_rooms/normal/geese_observation.dmm index 3636704207108..61da11069e944 100644 --- a/maps/deepmaint/deepmaint_rooms/normal/geese_observation.dmm +++ b/packs/deepmaint/deepmaint_rooms/normal/geese_observation.dmm @@ -102,7 +102,7 @@ /turf/simulated/floor/exoplanet/grass, /area/map_template/deepmaint) "Q" = ( -/obj/effect/wallframe_spawn/reinforced/bare, +/obj/wallframe_spawn/reinforced/bare, /turf/simulated/floor, /area/map_template/deepmaint) "S" = ( diff --git a/maps/deepmaint/deepmaint_rooms/normal/lab.dmm b/packs/deepmaint/deepmaint_rooms/normal/lab.dmm similarity index 79% rename from maps/deepmaint/deepmaint_rooms/normal/lab.dmm rename to packs/deepmaint/deepmaint_rooms/normal/lab.dmm index eb99481269f25..afd62c8fd0527 100644 --- a/maps/deepmaint/deepmaint_rooms/normal/lab.dmm +++ b/packs/deepmaint/deepmaint_rooms/normal/lab.dmm @@ -3,7 +3,7 @@ /obj/structure/bed/chair/padded/green{ dir = 1 }, -/obj/effect/floor_decal/corner/lime/full, +/obj/floor_decal/corner/lime/full, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "av" = ( @@ -25,33 +25,33 @@ pixel_x = 24; master_tag = "deep_maint_viro" }, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 10 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "bX" = ( /obj/structure/virology/console_broken, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "co" = ( /obj/structure/bed/chair, -/obj/effect/gibspawner/human, +/obj/gibspawner/human, /turf/simulated/floor/steel_dirty, /area/map_template/deepmaint) "dF" = ( /obj/structure/bed/chair/padded/green{ dir = 8 }, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 9 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "el" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/floor_decal/corner/purple{ +/obj/decal/cleanable/blood, +/obj/floor_decal/corner/purple{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -69,8 +69,8 @@ /area/map_template/deepmaint) "fC" = ( /obj/structure/table/standard, -/obj/item/scalpel, -/obj/effect/floor_decal/corner/lime/mono, +/obj/item/scalpel/basic, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "fM" = ( @@ -81,7 +81,7 @@ /turf/simulated/floor/steel_dirty, /area/map_template/deepmaint) "fY" = ( -/obj/effect/floor_decal/corner/lime/three_quarters{ +/obj/floor_decal/corner/lime/three_quarters{ dir = 8 }, /turf/simulated/floor/tiled/white, @@ -93,8 +93,8 @@ "gu" = ( /obj/structure/table/rack, /obj/item/storage/box/masks, -/obj/item/storage/box/gloves, -/obj/effect/floor_decal/corner/lime/mono, +/obj/item/storage/box/latexgloves, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "hJ" = ( @@ -102,78 +102,78 @@ dir = 1; pixel_y = 24 }, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 5 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "ij" = ( /obj/structure/virology/centrifuge_broken, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "ix" = ( /obj/structure/table/standard, /obj/item/pen/red, /obj/item/folder/red, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "jB" = ( /obj/structure/bed/chair/padded/green{ dir = 8 }, -/obj/effect/floor_decal/corner/lime/full, +/obj/floor_decal/corner/lime/full, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "kN" = ( /mob/living/simple_animal/hostile/creature, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 9 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "kU" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 9 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "mC" = ( /obj/machinery/light/spot, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 10 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "mM" = ( /obj/item/stool/padded, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 6 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "nz" = ( /obj/machinery/computer/arcade, -/obj/effect/floor_decal/corner/purple/mono, +/obj/floor_decal/corner/purple/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "nL" = ( /obj/structure/bed/chair, -/obj/effect/decal/cleanable/vomit, +/obj/decal/cleanable/vomit, /mob/living/carbon/human/monkey, /turf/simulated/floor/steel_dirty, /area/map_template/deepmaint) "nO" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/red{ +/obj/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/drip, +/obj/floor_decal/corner/red{ dir = 6 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "oe" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 10 }, /obj/item/stool/padded, @@ -183,14 +183,14 @@ /obj/structure/table/standard, /obj/item/reagent_containers/glass/beaker/vial/random, /obj/item/reagent_containers/glass/beaker/vial/random, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /obj/item/device/flashlight/lamp, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "pm" = ( /obj/structure/table/standard, /obj/random/junkfood, -/obj/effect/floor_decal/corner/purple/mono, +/obj/floor_decal/corner/purple/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "qg" = ( @@ -209,7 +209,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 9 }, /turf/simulated/floor/tiled/white, @@ -224,39 +224,39 @@ /obj/item/gun/projectile/revolver{ starts_loaded = 0 }, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "ve" = ( /obj/structure/virology/iso, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "vn" = ( -/obj/effect/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/drip, /mob/living/simple_animal/hostile/creature, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "vS" = ( -/obj/effect/decal/cleanable/generic, +/obj/decal/cleanable/generic, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "vV" = ( /obj/structure/closet/l3closet/virology, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "we" = ( /obj/structure/table/standard, /obj/random/donkpocket_box, -/obj/effect/floor_decal/corner/purple/mono, +/obj/floor_decal/corner/purple/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "wW" = ( /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "xZ" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor, /area/map_template/deepmaint) "ym" = ( @@ -270,25 +270,25 @@ /obj/item/handcuffs, /obj/item/handcuffs, /obj/item/handcuffs, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "yK" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/red{ +/obj/decal/cleanable/blood/drip, +/obj/floor_decal/corner/red{ dir = 9 }, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "yM" = ( /obj/random/trash, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 10 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "yO" = ( -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -297,7 +297,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -305,12 +305,12 @@ "BI" = ( /obj/structure/table/standard, /obj/machinery/microwave, -/obj/effect/floor_decal/corner/purple/mono, +/obj/floor_decal/corner/purple/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "BU" = ( /obj/item/stool/padded, -/obj/effect/floor_decal/corner/red{ +/obj/floor_decal/corner/red{ dir = 6 }, /turf/simulated/floor/tiled, @@ -318,18 +318,18 @@ "CB" = ( /obj/structure/table/standard, /obj/item/storage/box/freezer, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "CC" = ( /obj/item/stool/padded, /obj/machinery/light/spot, -/obj/effect/floor_decal/corner/purple/full, +/obj/floor_decal/corner/purple/full, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "CH" = ( /obj/item/stool/padded, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -337,12 +337,12 @@ "CP" = ( /obj/structure/table/standard, /obj/item/material/clipboard/plastic, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "DB" = ( -/obj/effect/decal/cleanable/generic, -/obj/effect/floor_decal/corner/purple/full, +/obj/decal/cleanable/generic, +/obj/floor_decal/corner/purple/full, /obj/structure/flora/pottedplant/large, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) @@ -352,23 +352,23 @@ /obj/item/storage/box/monkeycubes, /obj/item/reagent_containers/food/drinks/cans/waterbottle, /obj/machinery/light/small, -/obj/effect/floor_decal/corner/red/mono, +/obj/floor_decal/corner/red/mono, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "Em" = ( /obj/structure/table/standard, /obj/item/storage/lockbox/vials, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "Eq" = ( -/obj/effect/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/drip, /obj/item/ammo_casing/pistol/magnum/used, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "EA" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/lime{ +/obj/decal/cleanable/blood/drip, +/obj/floor_decal/corner/lime{ dir = 4 }, /turf/simulated/floor/tiled/white, @@ -382,21 +382,21 @@ /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "Gd" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 10 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "GB" = ( -/obj/effect/decal/cleanable/vomit, -/obj/effect/floor_decal/corner/purple{ +/obj/decal/cleanable/vomit, +/obj/floor_decal/corner/purple{ dir = 10 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "GD" = ( /mob/living/simple_animal/hostile/creature, -/obj/effect/floor_decal/corner/purple{ +/obj/floor_decal/corner/purple{ dir = 10 }, /turf/simulated/floor/tiled/white, @@ -414,7 +414,7 @@ tag_exterior_door = "deep_maint_viro_outter"; tag_interior_door = "deep_maint_viro_inner" }, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -423,7 +423,7 @@ /obj/structure/hygiene/shower{ pixel_y = 28 }, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -431,7 +431,7 @@ "Ms" = ( /obj/structure/table/standard, /obj/random/junk, -/obj/effect/floor_decal/corner/purple/mono, +/obj/floor_decal/corner/purple/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "MZ" = ( @@ -441,22 +441,22 @@ /obj/machinery/light/spot{ dir = 1 }, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "NQ" = ( /obj/structure/virology/analyser_off, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "Og" = ( /obj/structure/table/standard, -/obj/effect/floor_decal/corner/purple/mono, +/obj/floor_decal/corner/purple/mono, /obj/random/junk, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "PQ" = ( -/obj/effect/floor_decal/corner/lime/three_quarters, +/obj/floor_decal/corner/lime/three_quarters, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "QF" = ( @@ -472,11 +472,11 @@ /obj/structure/table/rack, /obj/item/storage/box/pillbottles, /obj/item/storage/box/beakers, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "SG" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 5 }, /turf/simulated/floor/tiled/white, @@ -484,11 +484,11 @@ "Tg" = ( /obj/structure/table/standard, /obj/item/device/radio/phone, -/obj/effect/floor_decal/corner/lime/mono, +/obj/floor_decal/corner/lime/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "Tw" = ( -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 6 }, /turf/simulated/floor/tiled/white, @@ -497,34 +497,34 @@ /obj/structure/table/standard, /obj/item/dice/d100, /obj/machinery/light/spot, -/obj/effect/floor_decal/corner/purple/mono, +/obj/floor_decal/corner/purple/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "Ui" = ( /obj/item/stool/padded, -/obj/effect/floor_decal/corner/purple/three_quarters{ +/obj/floor_decal/corner/purple/three_quarters{ dir = 4 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "Vn" = ( -/obj/effect/floor_decal/corner/purple/mono, +/obj/floor_decal/corner/purple/mono, /obj/structure/reagent_dispensers/water_cooler{ dir = 1 }, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "WE" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/floor_decal/corner/purple{ +/obj/decal/cleanable/blood/drip, +/obj/floor_decal/corner/purple{ dir = 10 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "WV" = ( /obj/structure/closet/crate/secure/biohazard/alt, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood, /turf/simulated/floor/steel_dirty, /area/map_template/deepmaint) "Xe" = ( @@ -536,7 +536,7 @@ dir = 4; icon_state = "bulb1" }, -/obj/effect/floor_decal/corner/lime{ +/obj/floor_decal/corner/lime{ dir = 10 }, /turf/simulated/floor/tiled/white, diff --git a/maps/deepmaint/deepmaint_rooms/normal/medical.dmm b/packs/deepmaint/deepmaint_rooms/normal/medical.dmm similarity index 75% rename from maps/deepmaint/deepmaint_rooms/normal/medical.dmm rename to packs/deepmaint/deepmaint_rooms/normal/medical.dmm index f9dd9b208ef7e..46e83786dfcc0 100644 --- a/maps/deepmaint/deepmaint_rooms/normal/medical.dmm +++ b/packs/deepmaint/deepmaint_rooms/normal/medical.dmm @@ -6,14 +6,14 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "e" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /obj/machinery/door/blast/regular{ id_tag = "deepmaints_med" }, /turf/simulated/floor/plating, /area/map_template/deepmaint) "f" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, /obj/machinery/body_scanconsole{ @@ -23,32 +23,32 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "g" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 10 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "h" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 4 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "i" = ( -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "j" = ( /obj/structure/closet/crate/med_crate/toxin, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "k" = ( -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "l" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 9 }, /turf/simulated/floor/tiled/white, @@ -57,20 +57,20 @@ /obj/structure/barricade/spike{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 4 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "p" = ( -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/bodyscanner{ dir = 8 }, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "q" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1 }, /obj/machinery/button/blast_door{ @@ -80,7 +80,7 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "r" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 5 }, /mob/living/simple_animal/passive/mouse/brown/Tom, @@ -88,11 +88,11 @@ /area/map_template/deepmaint) "s" = ( /obj/structure/closet/crate/med_crate/burn, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "t" = ( -/obj/effect/floor_decal/floordetail/edgedrain, +/obj/floor_decal/floordetail/edgedrain, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "u" = ( @@ -100,19 +100,19 @@ dir = 1; req_access = null }, -/obj/effect/floor_decal/corner/blue/mono, -/obj/effect/floor_decal/industrial/warning/corner, +/obj/floor_decal/corner/blue/mono, +/obj/floor_decal/industrial/warning/corner, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "y" = ( -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/bodyscanner{ dir = 4 }, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "A" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 6 }, /turf/simulated/floor/tiled/white, @@ -120,11 +120,11 @@ "B" = ( /obj/item/storage/firstaid/surgery, /obj/structure/table/standard, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "C" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, /obj/machinery/body_scanconsole{ @@ -134,7 +134,7 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "D" = ( -/obj/effect/wallframe_spawn/reinforced/no_grille, +/obj/wallframe_spawn/reinforced/no_grille, /obj/machinery/door/blast/regular{ dir = 4; id_tag = "deepmaints_med" @@ -142,10 +142,10 @@ /turf/simulated/floor/plating, /area/map_template/deepmaint) "E" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 10 }, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 1 }, /turf/simulated/floor/tiled/white, @@ -155,7 +155,7 @@ /area/map_template/deepmaint) "G" = ( /obj/structure/iv_drip, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "H" = ( @@ -166,7 +166,7 @@ /area/map_template/deepmaint) "J" = ( /obj/machinery/optable, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/light/small/red{ dir = 1 }, @@ -174,7 +174,7 @@ /area/map_template/deepmaint) "K" = ( /obj/structure/closet/crate/med_crate/trauma, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/light/small{ dir = 4 }, @@ -190,18 +190,18 @@ pixel_y = 32 }, /obj/item/reagent_containers/dropper/peridaxon, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /turf/simulated/floor/tiled/white/monotile, /area/map_template/deepmaint) "N" = ( /obj/structure/table/standard, /obj/item/reagent_containers/chem_disp_cartridge/rezadone, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/button/blast_door{ id_tag = "deepmaints_med"; pixel_y = -25 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 8 }, /turf/simulated/floor/tiled/white/monotile, @@ -210,7 +210,7 @@ /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "P" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 1 }, /turf/simulated/floor/tiled/white, @@ -219,44 +219,44 @@ /obj/structure/barricade/spike{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/floor_decal/industrial/warning/corner{ dir = 1 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "R" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 8 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "S" = ( -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 5 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "T" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 9 }, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 4 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "X" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/floor_decal/corner/blue{ dir = 6 }, -/obj/effect/floor_decal/floordetail/edgedrain{ +/obj/floor_decal/floordetail/edgedrain{ dir = 8 }, /turf/simulated/floor/tiled/white, /area/map_template/deepmaint) "Y" = ( /obj/structure/closet/crate/med_crate/oxyloss, -/obj/effect/floor_decal/corner/blue/mono, +/obj/floor_decal/corner/blue/mono, /obj/machinery/light/small{ dir = 8 }, diff --git a/maps/deepmaint/deepmaint_rooms/normal/office.dmm b/packs/deepmaint/deepmaint_rooms/normal/office.dmm similarity index 100% rename from maps/deepmaint/deepmaint_rooms/normal/office.dmm rename to packs/deepmaint/deepmaint_rooms/normal/office.dmm diff --git a/packs/deepmaint/deepmaint_rooms/normal/pirate_asteroid.dmm b/packs/deepmaint/deepmaint_rooms/normal/pirate_asteroid.dmm new file mode 100644 index 0000000000000..c5180542b53e9 --- /dev/null +++ b/packs/deepmaint/deepmaint_rooms/normal/pirate_asteroid.dmm @@ -0,0 +1,621 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"as" = ( +/obj/floor_decal/industrial/warning/dust{ + dir = 8 + }, +/turf/simulated/floor/asteroid{ + initial_gas = list("oxygen"=21.8366,"nitrogen"=82.1472) + }, +/area/map_template/deepmaint) +"ca" = ( +/obj/floor_decal/corner/brown{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"dg" = ( +/obj/floor_decal/corner/brown{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"eD" = ( +/turf/simulated/mineral/random, +/area/map_template/deepmaint) +"fo" = ( +/obj/structure/table/standard, +/obj/random/snack, +/obj/random/single/cola, +/obj/floor_decal/corner/brown/mono, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"gq" = ( +/obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap{ + icon = 'icons/obj/flora/hydroponics_growing.dmi'; + icon_state = null + }, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/map_template/deepmaint) +"iq" = ( +/obj/floor_decal/corner/brown/bordercorner{ + dir = 1 + }, +/obj/floor_decal/corner/brown/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"lu" = ( +/obj/floor_decal/corner/brown/bordercorner{ + dir = 8 + }, +/obj/floor_decal/corner/brown/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"mb" = ( +/obj/floor_decal/industrial/warning/dust{ + dir = 8 + }, +/obj/item/stack/material/steel/ten, +/turf/simulated/floor/asteroid{ + initial_gas = list("oxygen"=21.8366,"nitrogen"=82.1472) + }, +/area/map_template/deepmaint) +"mU" = ( +/obj/floor_decal/asteroid, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/map_template/deepmaint) +"nk" = ( +/obj/structure/wall_frame/standard, +/obj/item/material/shard, +/obj/item/stack/material/rods, +/turf/simulated/floor/plating, +/area/map_template/deepmaint) +"no" = ( +/obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap{ + icon = 'icons/obj/flora/hydroponics_growing.dmi'; + icon_state = null + }, +/turf/simulated/floor/asteroid{ + initial_gas = list("oxygen"=21.8366,"nitrogen"=82.1472) + }, +/area/map_template/deepmaint) +"nQ" = ( +/obj/floor_decal/industrial/warning/dust{ + dir = 8 + }, +/obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap{ + icon = 'icons/obj/flora/hydroponics_growing.dmi'; + icon_state = null + }, +/turf/simulated/floor/asteroid{ + initial_gas = list("oxygen"=21.8366,"nitrogen"=82.1472) + }, +/area/map_template/deepmaint) +"ov" = ( +/obj/floor_decal/corner/brown/mono, +/obj/structure/table/rack, +/obj/item/shovel, +/obj/item/storage/ore, +/obj/item/pickaxe, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"ow" = ( +/obj/floor_decal/corner/brown{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"oR" = ( +/obj/floor_decal/corner/brown{ + dir = 9 + }, +/mob/living/simple_animal/hostile/human/pirate, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"oV" = ( +/obj/floor_decal/corner/brown/bordercorner, +/obj/floor_decal/corner/brown/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"sH" = ( +/obj/floor_decal/corner/brown{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"sJ" = ( +/obj/floor_decal/corner/brown/bordercorner{ + dir = 4 + }, +/obj/floor_decal/corner/brown/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"tc" = ( +/obj/floor_decal/corner/brown{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"uI" = ( +/obj/floor_decal/corner/brown/mono, +/obj/structure/closet/toolcloset/excavation/awaysite, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"vP" = ( +/obj/floor_decal/industrial/warning/dust/corner{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/asteroid{ + initial_gas = list("oxygen"=21.8366,"nitrogen"=82.1472) + }, +/area/map_template/deepmaint) +"xw" = ( +/obj/structure/closet/emcloset, +/obj/floor_decal/corner/brown/mono, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"zB" = ( +/turf/simulated/floor, +/area/map_template/deepmaint) +"AE" = ( +/obj/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/map_template/deepmaint) +"AM" = ( +/obj/floor_decal/corner/brown{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"AP" = ( +/obj/random/drinkbottle, +/obj/floor_decal/corner/brown/mono, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"Cq" = ( +/obj/floor_decal/corner/brown/mono, +/obj/item/stack/material/rods, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"FB" = ( +/turf/simulated/floor/plating, +/area/map_template/deepmaint) +"FJ" = ( +/obj/floor_decal/corner/brown/three_quarters{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"FT" = ( +/obj/floor_decal/corner/brown, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"Go" = ( +/obj/floor_decal/corner/brown/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"IH" = ( +/obj/floor_decal/corner/brown/mono, +/obj/structure/table/rack, +/obj/item/clothing/glasses/meson, +/obj/item/device/measuring_tape, +/obj/item/storage/excavation, +/obj/item/device/flashlight/lantern, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"Ji" = ( +/obj/floor_decal/industrial/warning/dust/corner{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/asteroid{ + initial_gas = list("oxygen"=21.8366,"nitrogen"=82.1472) + }, +/area/map_template/deepmaint) +"JJ" = ( +/obj/machinery/door/airlock/glass/mining, +/turf/simulated/floor/tiled/steel_ridged, +/area/map_template/deepmaint) +"Kd" = ( +/obj/floor_decal/industrial/warning/dust{ + dir = 4 + }, +/obj/item/material/shard, +/turf/simulated/floor/asteroid{ + initial_gas = list("oxygen"=21.8366,"nitrogen"=82.1472) + }, +/area/map_template/deepmaint) +"Ld" = ( +/obj/floor_decal/corner/brown{ + dir = 5 + }, +/mob/living/simple_animal/hostile/human/pirate/ranged, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"Mz" = ( +/turf/simulated/wall, +/area/map_template/deepmaint) +"MY" = ( +/obj/floor_decal/corner/brown{ + dir = 6 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"Nf" = ( +/obj/floor_decal/corner/brown{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"Nz" = ( +/obj/floor_decal/corner/brown/border, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"ND" = ( +/obj/floor_decal/corner/brown/three_quarters{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"Ow" = ( +/obj/floor_decal/corner/brown/three_quarters, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"QK" = ( +/obj/structure/wall_frame/standard, +/obj/item/stack/material/rods, +/turf/simulated/floor/plating, +/area/map_template/deepmaint) +"Rb" = ( +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/map_template/deepmaint) +"SQ" = ( +/obj/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/floor_decal/corner/brown/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"SV" = ( +/obj/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/floor_decal/corner/brown/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"SW" = ( +/obj/floor_decal/corner/brown/mono, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/table/rack, +/obj/item/device/scanner/mining, +/obj/item/device/scanner/gas, +/obj/item/device/binoculars, +/obj/item/stack/flag/green, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"UU" = ( +/obj/catwalk_plated, +/turf/simulated/floor/plating, +/area/map_template/deepmaint) +"VH" = ( +/obj/floor_decal/corner/brown/mono, +/obj/structure/closet/firecloset, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) +"Wx" = ( +/obj/floor_decal/corner/brown/three_quarters{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/map_template/deepmaint) +"Yp" = ( +/obj/floor_decal/industrial/warning/dust{ + dir = 4 + }, +/turf/simulated/floor/asteroid{ + initial_gas = list("oxygen"=21.8366,"nitrogen"=82.1472) + }, +/area/map_template/deepmaint) +"Zg" = ( +/mob/living/simple_animal/hostile/human/pirate/ranged, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/map_template/deepmaint) +"ZB" = ( +/obj/floor_decal/corner/brown/borderfull, +/obj/floor_decal/plaque, +/turf/simulated/floor/tiled/monotile, +/area/map_template/deepmaint) + +(1,1,1) = {" +zB +zB +zB +zB +zB +zB +zB +zB +zB +zB +zB +zB +zB +zB +zB +"} +(2,1,1) = {" +zB +Mz +Mz +Mz +Mz +Mz +Mz +Mz +Mz +Mz +Mz +Mz +Mz +Mz +zB +"} +(3,1,1) = {" +zB +Mz +uI +VH +xw +Mz +FJ +ca +dg +MY +dg +tc +Ow +Mz +zB +"} +(4,1,1) = {" +zB +AE +Nf +Nf +Nf +AE +AM +ow +oV +SV +sJ +Ld +ow +Mz +zB +"} +(5,1,1) = {" +zB +JJ +UU +UU +UU +JJ +ow +AM +Nz +ZB +Go +ow +AM +Mz +zB +"} +(6,1,1) = {" +zB +AE +dg +dg +dg +AE +AM +ow +lu +SQ +iq +AM +ow +Mz +zB +"} +(7,1,1) = {" +zB +Mz +IH +SW +ov +Mz +Wx +sH +Nf +oR +Nf +FT +ND +Mz +zB +"} +(8,1,1) = {" +zB +Mz +Mz +Mz +Mz +Mz +Mz +Wx +dg +dg +dg +ND +Mz +Mz +zB +"} +(9,1,1) = {" +zB +Mz +eD +eD +eD +eD +Mz +Mz +fo +AP +Cq +Mz +Mz +Mz +zB +"} +(10,1,1) = {" +zB +Mz +eD +eD +eD +eD +eD +Mz +QK +nk +FB +Mz +eD +Mz +zB +"} +(11,1,1) = {" +zB +Mz +eD +eD +eD +eD +no +vP +nQ +as +mb +Ji +no +Mz +zB +"} +(12,1,1) = {" +zB +Mz +eD +eD +Yp +Yp +Yp +Yp +Yp +Kd +Yp +Yp +Yp +Mz +zB +"} +(13,1,1) = {" +zB +Mz +gq +Rb +Rb +Rb +Zg +Rb +Rb +mU +Rb +Rb +Rb +Mz +zB +"} +(14,1,1) = {" +zB +Mz +Mz +Mz +Mz +Mz +Mz +Mz +Mz +Mz +Mz +Mz +Mz +Mz +zB +"} +(15,1,1) = {" +zB +zB +zB +zB +zB +zB +zB +zB +zB +zB +zB +zB +zB +zB +zB +"} diff --git a/maps/deepmaint/deepmaint_rooms/normal/robot_asteroid.dmm b/packs/deepmaint/deepmaint_rooms/normal/robot_asteroid.dmm similarity index 79% rename from maps/deepmaint/deepmaint_rooms/normal/robot_asteroid.dmm rename to packs/deepmaint/deepmaint_rooms/normal/robot_asteroid.dmm index c4ae7249a97c3..aefeac2fb3bef 100644 --- a/maps/deepmaint/deepmaint_rooms/normal/robot_asteroid.dmm +++ b/packs/deepmaint/deepmaint_rooms/normal/robot_asteroid.dmm @@ -3,7 +3,7 @@ /turf/simulated/floor, /area/map_template/deepmaint) "b" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 9 }, /turf/simulated/floor/tiled, @@ -15,13 +15,13 @@ }, /area/map_template/deepmaint) "e" = ( -/obj/effect/floor_decal/asteroid, +/obj/floor_decal/asteroid, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/map_template/deepmaint) "g" = ( -/obj/effect/floor_decal/industrial/warning/dust{ +/obj/floor_decal/industrial/warning/dust{ dir = 4 }, /turf/simulated/floor/asteroid{ @@ -30,13 +30,13 @@ /area/map_template/deepmaint) "h" = ( /obj/structure/closet/emcloset, -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "i" = ( -/obj/effect/floor_decal/industrial/warning/dust, +/obj/floor_decal/industrial/warning/dust, /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap{ - icon = 'icons/obj/hydroponics_growing.dmi'; + icon = 'icons/obj/flora/hydroponics_growing.dmi'; icon_state = null }, /turf/simulated/floor/asteroid{ @@ -44,7 +44,7 @@ }, /area/map_template/deepmaint) "j" = ( -/obj/effect/floor_decal/industrial/warning/dust{ +/obj/floor_decal/industrial/warning/dust{ dir = 8 }, /turf/simulated/floor/asteroid{ @@ -52,14 +52,14 @@ }, /area/map_template/deepmaint) "k" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 10 }, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "l" = ( /obj/structure/table/standard, -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /obj/random/firstaid, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) @@ -70,13 +70,13 @@ pixel_x = 22 }, /obj/machinery/cell_charger, -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /obj/random/powercell, /obj/random/powercell, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "n" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 9 }, /obj/machinery/light{ @@ -89,11 +89,11 @@ /turf/simulated/floor/tiled/steel_ridged, /area/map_template/deepmaint) "p" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner{ +/obj/floor_decal/industrial/warning/dust/corner{ dir = 4 }, /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap{ - icon = 'icons/obj/hydroponics_growing.dmi'; + icon = 'icons/obj/flora/hydroponics_growing.dmi'; icon_state = null }, /turf/simulated/floor/asteroid{ @@ -101,7 +101,7 @@ }, /area/map_template/deepmaint) "q" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner, +/obj/floor_decal/industrial/warning/dust/corner, /obj/machinery/light/small{ dir = 4; icon_state = "bulb1" @@ -111,7 +111,7 @@ }, /area/map_template/deepmaint) "r" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner{ +/obj/floor_decal/industrial/warning/dust/corner{ dir = 8 }, /obj/machinery/light/small, @@ -120,18 +120,18 @@ }, /area/map_template/deepmaint) "s" = ( -/obj/effect/floor_decal/industrial/warning/dust, +/obj/floor_decal/industrial/warning/dust, /turf/simulated/floor/asteroid{ initial_gas = list("oxygen"=21.8366,"nitrogen"=82.1472) }, /area/map_template/deepmaint) "t" = ( -/obj/effect/floor_decal/corner/brown/full, +/obj/floor_decal/corner/brown/full, /mob/living/simple_animal/hostile/hivebot/ranged_damage/laser, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "u" = ( -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /obj/machinery/computer/modular/preset{ dir = 4 }, @@ -146,7 +146,7 @@ }, /area/map_template/deepmaint) "x" = ( -/obj/effect/floor_decal/corner/brown{ +/obj/floor_decal/corner/brown{ dir = 5 }, /obj/machinery/light{ @@ -155,11 +155,11 @@ /turf/simulated/floor/tiled, /area/map_template/deepmaint) "y" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner{ +/obj/floor_decal/industrial/warning/dust/corner{ dir = 4 }, /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap{ - icon = 'icons/obj/hydroponics_growing.dmi'; + icon = 'icons/obj/flora/hydroponics_growing.dmi'; icon_state = null }, /obj/machinery/light/small{ @@ -170,21 +170,21 @@ }, /area/map_template/deepmaint) "A" = ( -/obj/effect/floor_decal/corner/brown/full, +/obj/floor_decal/corner/brown/full, /turf/simulated/floor/tiled, /area/map_template/deepmaint) "B" = ( /obj/structure/closet, -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /obj/random/energy, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "D" = ( -/obj/effect/floor_decal/industrial/warning/dust{ +/obj/floor_decal/industrial/warning/dust{ dir = 1 }, /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap{ - icon = 'icons/obj/hydroponics_growing.dmi'; + icon = 'icons/obj/flora/hydroponics_growing.dmi'; icon_state = null }, /turf/simulated/floor/asteroid{ @@ -195,7 +195,7 @@ /turf/simulated/floor/tiled, /area/map_template/deepmaint) "H" = ( -/obj/effect/floor_decal/industrial/warning/dust{ +/obj/floor_decal/industrial/warning/dust{ dir = 1 }, /turf/simulated/floor/asteroid{ @@ -204,14 +204,14 @@ /area/map_template/deepmaint) "I" = ( /obj/structure/closet, -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /obj/random/biggun, /obj/random/ammo, /obj/random/ammo, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "J" = ( -/obj/effect/floor_decal/industrial/warning/dust, +/obj/floor_decal/industrial/warning/dust, /mob/living/simple_animal/hostile/hivebot, /turf/simulated/floor/asteroid{ initial_gas = list("oxygen"=21.8366,"nitrogen"=82.1472) @@ -219,7 +219,7 @@ /area/map_template/deepmaint) "K" = ( /obj/structure/closet/crate/trashcart, -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "L" = ( @@ -228,17 +228,17 @@ }, /area/map_template/deepmaint) "M" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/map_template/deepmaint) "O" = ( /obj/structure/table/standard, -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /obj/random/loot, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "P" = ( -/obj/effect/floor_decal/industrial/warning/dust, +/obj/floor_decal/industrial/warning/dust, /mob/living/simple_animal/hostile/hivebot/rapid, /turf/simulated/floor/asteroid{ initial_gas = list("oxygen"=21.8366,"nitrogen"=82.1472) @@ -246,7 +246,7 @@ /area/map_template/deepmaint) "R" = ( /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap{ - icon = 'icons/obj/hydroponics_growing.dmi'; + icon = 'icons/obj/flora/hydroponics_growing.dmi'; icon_state = null }, /turf/simulated/floor/asteroid{ @@ -257,11 +257,11 @@ /obj/structure/bed/chair/padded/brown{ dir = 8 }, -/obj/effect/floor_decal/corner/brown/mono, +/obj/floor_decal/corner/brown/mono, /turf/simulated/floor/tiled/monotile, /area/map_template/deepmaint) "U" = ( -/obj/effect/floor_decal/industrial/warning/dust{ +/obj/floor_decal/industrial/warning/dust{ dir = 6 }, /turf/simulated/floor/asteroid{ @@ -272,11 +272,11 @@ /turf/simulated/wall, /area/map_template/deepmaint) "X" = ( -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor/plating, /area/map_template/deepmaint) "Z" = ( -/obj/effect/floor_decal/industrial/warning/dust{ +/obj/floor_decal/industrial/warning/dust{ dir = 8 }, /obj/machinery/light/small{ diff --git a/packs/deepmaint/deepmaint_rooms/normal/ship_wreck.dmm b/packs/deepmaint/deepmaint_rooms/normal/ship_wreck.dmm new file mode 100644 index 0000000000000..5bde6046302ee --- /dev/null +++ b/packs/deepmaint/deepmaint_rooms/normal/ship_wreck.dmm @@ -0,0 +1,535 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/simulated/floor, +/area/map_template/deepmaint) +"b" = ( +/obj/item/stack/cable_coil/single, +/obj/landmark/scorcher, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"c" = ( +/obj/landmark/scorcher, +/obj/structure/closet/crate/plastic, +/obj/item/material/twohanded/fireaxe, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"d" = ( +/obj/item/stack/material/rods, +/turf/space, +/area/map_template/deepmaint) +"e" = ( +/obj/landmark/scorcher, +/obj/structure/closet/crate/plastic, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"f" = ( +/obj/item/material/shard/shrapnel/titanium, +/obj/landmark/scorcher, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"g" = ( +/turf/simulated/floor{ + icon_state = "dmg2"; + map_airless = 1 + }, +/area/map_template/deepmaint) +"h" = ( +/obj/structure/door_assembly/door_assembly_ext, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"i" = ( +/obj/item/material/shard/shrapnel/titanium, +/turf/space, +/area/map_template/deepmaint) +"j" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/landmark/scorcher, +/obj/decal/cleanable/liquid_fuel, +/mob/living/simple_animal/hostile/carp, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"k" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 8 + }, +/turf/simulated/floor, +/area/map_template/deepmaint) +"l" = ( +/obj/machinery/door/airlock/external, +/obj/mech_shield, +/turf/simulated/floor, +/area/map_template/deepmaint) +"n" = ( +/obj/item/stack/material/rods, +/obj/landmark/scorcher, +/obj/decal/cleanable/liquid_fuel, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"p" = ( +/obj/item/stack/cable_coil/single, +/turf/simulated/floor/asteroid{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"q" = ( +/obj/mech_shield, +/turf/simulated/wall, +/area/map_template/deepmaint) +"r" = ( +/obj/landmark/scorcher, +/obj/random/toolbox, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"s" = ( +/obj/structure/bed/chair/shuttle/white{ + dir = 4 + }, +/obj/gibspawner/robot, +/obj/landmark/scorcher, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"t" = ( +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"v" = ( +/obj/structure/lattice, +/turf/space, +/area/map_template/deepmaint) +"w" = ( +/mob/living/simple_animal/hostile/carp/pike, +/turf/space, +/area/map_template/deepmaint) +"x" = ( +/obj/structure/wall_frame/titanium, +/obj/item/stack/material/rods, +/obj/item/stack/material/rods, +/turf/simulated/floor, +/area/map_template/deepmaint) +"y" = ( +/obj/structure/inflatable/door, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"z" = ( +/obj/structure/mech_wreckage/powerloader, +/turf/space, +/area/map_template/deepmaint) +"A" = ( +/mob/living/exosuit/premade/firefighter, +/turf/simulated/floor/asteroid{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"B" = ( +/obj/item/material/shard, +/obj/structure/door_assembly/door_assembly_ext, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"C" = ( +/obj/structure/sign/warning/vacuum{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/suit_storage_unit/retro, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/map_template/deepmaint) +"D" = ( +/obj/random/junk, +/turf/space, +/area/map_template/deepmaint) +"E" = ( +/obj/structure/sign/warning/internals_required{ + dir = 1; + pixel_y = -32 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/suit_storage_unit/retro, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/map_template/deepmaint) +"G" = ( +/turf/simulated/mineral, +/area/map_template/deepmaint) +"H" = ( +/turf/space, +/area/map_template/deepmaint) +"K" = ( +/obj/structure/inflatable/door, +/obj/floor_decal/industrial/warning, +/turf/simulated/floor, +/area/map_template/deepmaint) +"L" = ( +/obj/structure/wall_frame/titanium, +/obj/item/material/shard, +/obj/item/stack/material/rods, +/turf/simulated/floor{ + icon_state = "dmg1" + }, +/area/map_template/deepmaint) +"M" = ( +/obj/item/stack/material/rods, +/obj/landmark/scorcher, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"N" = ( +/obj/item/stack/material/rods, +/mob/living/simple_animal/hostile/carp, +/turf/space, +/area/map_template/deepmaint) +"O" = ( +/obj/structure/wall_frame/titanium, +/obj/item/material/shard, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"P" = ( +/obj/item/material/shard, +/obj/landmark/scorcher, +/obj/decal/cleanable/liquid_fuel, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"Q" = ( +/obj/item/extinguisher/empty, +/turf/space, +/area/map_template/deepmaint) +"R" = ( +/turf/simulated/floor/asteroid{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"S" = ( +/obj/item/material/shard/shrapnel/titanium, +/obj/landmark/scorcher, +/turf/simulated/floor{ + icon_state = "dmg1" + }, +/area/map_template/deepmaint) +"T" = ( +/turf/simulated/wall/titanium, +/area/map_template/deepmaint) +"U" = ( +/obj/machinery/constructable_frame/computerframe/deconstruct{ + dir = 8 + }, +/obj/landmark/scorcher, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"V" = ( +/obj/item/stack/material/titanium, +/turf/space, +/area/map_template/deepmaint) +"W" = ( +/turf/simulated/wall, +/area/map_template/deepmaint) +"X" = ( +/obj/landmark/scorcher, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"Y" = ( +/obj/landmark/scorcher, +/obj/item/stack/material/titanium, +/turf/simulated/floor{ + map_airless = 1 + }, +/area/map_template/deepmaint) +"Z" = ( +/obj/structure/wall_frame/titanium, +/obj/item/stack/material/rods, +/turf/simulated/floor, +/area/map_template/deepmaint) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +W +W +W +W +W +W +W +W +W +W +W +W +W +a +"} +(3,1,1) = {" +a +W +N +G +k +H +H +p +A +T +w +H +d +W +a +"} +(4,1,1) = {" +a +W +d +g +T +T +H +h +B +T +T +k +H +W +a +"} +(5,1,1) = {" +a +W +H +H +t +G +S +X +e +H +T +T +i +W +a +"} +(6,1,1) = {" +a +W +W +V +H +H +G +X +X +G +T +H +H +W +a +"} +(7,1,1) = {" +a +C +q +H +H +T +M +Y +X +H +v +H +H +W +a +"} +(8,1,1) = {" +a +K +l +y +H +T +r +f +f +G +v +H +H +W +a +"} +(9,1,1) = {" +a +E +q +z +v +x +X +X +c +T +H +H +p +W +a +"} +(10,1,1) = {" +a +W +W +G +H +L +X +s +j +X +O +R +R +W +a +"} +(11,1,1) = {" +a +W +R +Q +H +T +b +U +P +n +T +H +H +W +a +"} +(12,1,1) = {" +a +W +R +H +D +T +T +Z +v +T +G +G +i +W +a +"} +(13,1,1) = {" +a +W +i +i +H +d +H +H +V +H +H +H +H +W +a +"} +(14,1,1) = {" +a +W +W +W +W +W +W +W +W +W +W +W +W +W +a +"} +(15,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/maps/deepmaint/deepmaint_rooms/normal/supply.dmm b/packs/deepmaint/deepmaint_rooms/normal/supply.dmm similarity index 92% rename from maps/deepmaint/deepmaint_rooms/normal/supply.dmm rename to packs/deepmaint/deepmaint_rooms/normal/supply.dmm index c6ded5d30c21b..4fb6fbceca239 100644 --- a/maps/deepmaint/deepmaint_rooms/normal/supply.dmm +++ b/packs/deepmaint/deepmaint_rooms/normal/supply.dmm @@ -4,7 +4,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -33,7 +33,7 @@ /obj/machinery/conveyor{ id = "garbag2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -61,7 +61,7 @@ dir = 8 }, /obj/machinery/portable_atmospherics/powered/scrubber, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/steel_dirty, /area/map_template/deepmaint) "gH" = ( @@ -71,14 +71,14 @@ "hW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor, /area/map_template/deepmaint) "iv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" }, @@ -88,14 +88,14 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 4; icon_state = "warning" }, /turf/simulated/floor/steel_dirty, /area/map_template/deepmaint) "iU" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -233,7 +233,7 @@ /area/map_template/deepmaint) "yx" = ( /obj/machinery/portable_atmospherics/canister/air, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/steel_dirty, /area/map_template/deepmaint) "yZ" = ( @@ -250,7 +250,7 @@ /turf/simulated/floor/steel_dirty, /area/map_template/deepmaint) "zm" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -267,14 +267,14 @@ /area/map_template/deepmaint) "zC" = ( /obj/machinery/atmospherics/valve/shutoff/scrubbers, -/obj/effect/floor_decal/industrial/shutoff, +/obj/floor_decal/industrial/shutoff, /turf/simulated/floor, /area/map_template/deepmaint) "zG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -284,7 +284,7 @@ /obj/machinery/conveyor{ id = "garbag2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -331,7 +331,7 @@ "EG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor, /area/map_template/deepmaint) "Gu" = ( @@ -340,7 +340,7 @@ id = "garbag2"; name = "disposal conveyor" }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/steel_dirty, /area/map_template/deepmaint) "Hf" = ( @@ -355,7 +355,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor, /area/map_template/deepmaint) "HA" = ( @@ -380,7 +380,7 @@ dir = 8 }, /obj/machinery/portable_atmospherics/powered/pump/filled, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/steel_dirty, /area/map_template/deepmaint) "Ku" = ( @@ -414,7 +414,7 @@ "LC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/catwalk_plated, +/obj/catwalk_plated, /turf/simulated/floor, /area/map_template/deepmaint) "LE" = ( @@ -422,7 +422,7 @@ dir = 8 }, /obj/machinery/floodlight, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/floor_decal/industrial/outline/blue, /turf/simulated/floor/steel_dirty, /area/map_template/deepmaint) "Nj" = ( @@ -454,11 +454,11 @@ "OX" = ( /obj/structure/table/woodentable, /obj/machinery/cell_charger, -/obj/item/stack/cable_coil/random, +/obj/random/single/color/cable_coil, /turf/simulated/floor/carpet/orange, /area/map_template/deepmaint) "Pd" = ( -/obj/effect/floor_decal/industrial/loading{ +/obj/floor_decal/industrial/loading{ dir = 4 }, /obj/structure/closet/crate/trashcart, @@ -476,7 +476,7 @@ /obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -498,7 +498,7 @@ /obj/machinery/conveyor{ id = "garbag2" }, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -507,8 +507,8 @@ /turf/simulated/floor/plating, /area/map_template/deepmaint) "RC" = ( -/obj/effect/mech_shield, -/obj/effect/wallframe_spawn, +/obj/mech_shield, +/obj/wallframe_spawn, /obj/structure/disposalpipe/segment, /turf/simulated/floor, /area/map_template/deepmaint) @@ -545,7 +545,7 @@ id = "garbag2" }, /obj/structure/plasticflaps, -/obj/effect/floor_decal/industrial/warning{ +/obj/floor_decal/industrial/warning{ dir = 8; icon_state = "warning" }, @@ -580,12 +580,12 @@ dir = 8 }, /obj/machinery/meter, -/obj/effect/floor_decal/industrial/warning, +/obj/floor_decal/industrial/warning, /turf/simulated/floor, /area/map_template/deepmaint) "Ww" = ( /obj/machinery/atmospherics/valve/shutoff/supply, -/obj/effect/floor_decal/industrial/shutoff, +/obj/floor_decal/industrial/shutoff, /turf/simulated/floor, /area/map_template/deepmaint) "Yy" = ( diff --git a/maps/deepmaint/deepmaint_rooms/normal/tundra.dmm b/packs/deepmaint/deepmaint_rooms/normal/tundra.dmm similarity index 97% rename from maps/deepmaint/deepmaint_rooms/normal/tundra.dmm rename to packs/deepmaint/deepmaint_rooms/normal/tundra.dmm index 53c36d6244439..0ca4b041377dd 100644 --- a/maps/deepmaint/deepmaint_rooms/normal/tundra.dmm +++ b/packs/deepmaint/deepmaint_rooms/normal/tundra.dmm @@ -3,7 +3,7 @@ /turf/simulated/floor/exoplanet/snow, /area/map_template/deepmaint) "d" = ( -/obj/effect/floor_decal/industrial/traffic{ +/obj/floor_decal/industrial/traffic{ dir = 8 }, /turf/simulated/floor/exoplanet/snow, @@ -43,7 +43,7 @@ /obj/item/clothing/suit/storage/hooded/wintercoat, /obj/item/clothing/suit/storage/hooded/wintercoat, /obj/item/clothing/suit/storage/hooded/wintercoat, -/obj/effect/floor_decal/industrial/traffic{ +/obj/floor_decal/industrial/traffic{ dir = 8 }, /turf/simulated/floor/exoplanet/snow, @@ -157,7 +157,7 @@ /obj/item/device/flashlight/flare, /obj/item/device/flashlight/flare, /obj/item/device/flashlight/flare, -/obj/effect/floor_decal/industrial/traffic{ +/obj/floor_decal/industrial/traffic{ dir = 8 }, /turf/simulated/floor/exoplanet/snow, diff --git a/maps/deepmaint/deepmaint_rooms/normal/vampire_lair.dmm b/packs/deepmaint/deepmaint_rooms/normal/vampire_lair.dmm similarity index 93% rename from maps/deepmaint/deepmaint_rooms/normal/vampire_lair.dmm rename to packs/deepmaint/deepmaint_rooms/normal/vampire_lair.dmm index e63fae507e3a4..edd2f96943214 100644 --- a/maps/deepmaint/deepmaint_rooms/normal/vampire_lair.dmm +++ b/packs/deepmaint/deepmaint_rooms/normal/vampire_lair.dmm @@ -14,11 +14,11 @@ /turf/simulated/floor/wood/walnut, /area/map_template/deepmaint) "d" = ( -/obj/effect/forcefield, +/obj/forcefield, /turf/space, /area/map_template/deepmaint) "e" = ( -/obj/effect/decal/cleanable/blood, +/obj/decal/cleanable/blood, /turf/simulated/floor/wood/walnut, /area/map_template/deepmaint) "g" = ( @@ -46,8 +46,8 @@ /turf/space, /area/map_template/deepmaint) "m" = ( -/obj/effect/gibspawner/human, -/obj/effect/decal/remains, +/obj/gibspawner/human, +/obj/decal/remains, /turf/simulated/floor/wood/walnut, /area/map_template/deepmaint) "n" = ( @@ -74,7 +74,7 @@ /turf/simulated/floor/wood/walnut, /area/map_template/deepmaint) "v" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/wallframe_spawn/reinforced, /turf/simulated/floor, /area/map_template/deepmaint) "w" = ( @@ -114,7 +114,7 @@ /turf/simulated/floor/wood/walnut, /area/map_template/deepmaint) "F" = ( -/obj/effect/decal/cleanable/blood/tracks/claw{ +/obj/decal/cleanable/blood/tracks/claw{ setdirs = list("1"=1,"2"=0,"4"=0,"8"=0,"16"=16,"32"=0,"64"=0,"128"=0) }, /turf/simulated/floor/wood/walnut, @@ -132,7 +132,7 @@ /turf/simulated/floor/wood/walnut, /area/map_template/deepmaint) "J" = ( -/obj/effect/decal/cleanable/blood/drip, +/obj/decal/cleanable/blood/drip, /turf/simulated/floor/wood/walnut, /area/map_template/deepmaint) "L" = ( @@ -166,15 +166,15 @@ /area/map_template/deepmaint) "Q" = ( /obj/machinery/door/airlock/civilian, -/obj/effect/mech_shield, +/obj/mech_shield, /turf/simulated/floor/wood/walnut, /area/map_template/deepmaint) "S" = ( /turf/simulated/wall, /area/map_template/deepmaint) "T" = ( -/obj/effect/decal/remains, -/obj/effect/gibspawner/human, +/obj/decal/remains, +/obj/gibspawner/human, /turf/simulated/floor/wood/walnut, /area/map_template/deepmaint) "U" = ( @@ -188,7 +188,7 @@ /turf/simulated/wall/r_wall, /area/map_template/deepmaint) "X" = ( -/obj/effect/mech_shield, +/obj/mech_shield, /turf/simulated/wall, /area/map_template/deepmaint) "Y" = ( @@ -198,7 +198,7 @@ /turf/simulated/floor/wood/walnut, /area/map_template/deepmaint) "Z" = ( -/obj/effect/decal/remains, +/obj/decal/remains, /turf/simulated/floor/wood/walnut, /area/map_template/deepmaint) diff --git a/maps/deepmaint/deepmaint_rooms/template.dm b/packs/deepmaint/deepmaint_rooms/template.dm similarity index 100% rename from maps/deepmaint/deepmaint_rooms/template.dm rename to packs/deepmaint/deepmaint_rooms/template.dm diff --git a/maps/deepmaint/deepmaint_rooms/template.dmm b/packs/deepmaint/deepmaint_rooms/template.dmm similarity index 100% rename from maps/deepmaint/deepmaint_rooms/template.dmm rename to packs/deepmaint/deepmaint_rooms/template.dmm diff --git a/code/modules/random_map/dungeon/rooms/deepmain_room.dm b/packs/deepmaint/generator/deepmain_room.dm similarity index 76% rename from code/modules/random_map/dungeon/rooms/deepmain_room.dm rename to packs/deepmaint/generator/deepmain_room.dm index 7274c69b3dbda..c56337ffeaef0 100644 --- a/code/modules/random_map/dungeon/rooms/deepmain_room.dm +++ b/packs/deepmaint/generator/deepmain_room.dm @@ -1,3 +1,6 @@ +/datum/map_template/deepmaint_template + skip_main_unit_tests = "Is a deepmaint template." + /datum/map_template/deepmaint_template/room name = "Deepmaint Template" var/desc = "Deep. Dark. Marvelous." diff --git a/packs/deepmaint/generator/deepmaint.dm b/packs/deepmaint/generator/deepmaint.dm new file mode 100644 index 0000000000000..0628771ad8d19 --- /dev/null +++ b/packs/deepmaint/generator/deepmaint.dm @@ -0,0 +1,167 @@ +/** + For the sake of dungeon generator being modular and not tied exclusively to deepmaint, + most of the objects and modifications required exclusively for it will be kept here. +*/ + + +GLOBAL_LIST_EMPTY(free_deepmaint_ladders) +GLOBAL_LIST_EMPTY(small_deepmaint_room_templates) +GLOBAL_LIST_EMPTY(big_deepmaint_room_templates) + +/proc/populateDeepMaintMapLists() + if(length(GLOB.big_deepmaint_room_templates) || length(GLOB.small_deepmaint_room_templates)) + return + for(var/item in subtypesof(/datum/map_template/deepmaint_template/room)) + var/datum/map_template/deepmaint_template/temp = item + var/datum/map_template/deepmaint_template/S = new temp() + GLOB.small_deepmaint_room_templates += S + + for(var/item in subtypesof(/datum/map_template/deepmaint_template/big)) + var/datum/map_template/deepmaint_template/temp = item + var/datum/map_template/deepmaint_template/S = new temp() + GLOB.big_deepmaint_room_templates += S + +/obj/procedural/jp_dungeonroom/preexist/square/submap/deepmaint + name = "deepmaint room" + +/obj/procedural/jp_dungeonroom/preexist/square/submap/deepmaint/New() + . = ..() + my_map = pick(GLOB.small_deepmaint_room_templates) + +/obj/procedural/jp_dungeonroom/preexist/square/submap/deepmaint/big + name = "deepmaint core room" + +/obj/procedural/jp_dungeonroom/preexist/square/submap/deepmaint/big/New() + . = ..() + my_map = pick(GLOB.big_deepmaint_room_templates) + + +/proc/check_deepmaint_list() + return length(GLOB.free_deepmaint_ladders) + +/obj/procedural/jp_DungeonGenerator/deepmaint + name = "Deep Maintenance Procedural Generator" + +/** + Finds a line of walls adjacent to the line of turfs given +*/ +/obj/procedural/jp_DungeonGenerator/deepmaint/proc/checkForWalls(list/line) + var/turf/t1 = line[1] + var/turf/t2 = line[2] + var/direction = get_dir(t1, t2) + var/list/walls = list() + for(var/turf/A in getAdjacent(t1)) + var/length = length(line) + var/turf/T = A + walls += T + while(length > 0) + length = length - 1 + T = get_step(T, direction) + if (T.is_wall()) + walls += T + if(length(walls) == length(line)) + return walls + else + walls = list() + break + + + return list() + + +/obj/procedural/jp_DungeonGenerator/deepmaint/proc/makeLadders() + var/ladders_to_place = 3 + if(numRooms < ladders_to_place) + return + var/list/obj/procedural/jp_dungeonroom/done_rooms = list() + while(ladders_to_place > 0) + if(numRooms > 1) + if(length(done_rooms) == length(out_rooms)) + testing("Deepmaint generator went through all rooms, but couldn't place all ladders! Ladders left - [ladders_to_place]") + break + var/obj/procedural/jp_dungeonroom/picked_room = pick(out_rooms) + if(picked_room in done_rooms) + continue + var/list/turf/viable_turfs = list() + for (var/turf/simulated/floor/F in RANGE_TURFS(picked_room.centre, roomMinSize + 1)) + //not under walls + if (F.is_wall()) + continue + + if (F.contains_dense_objects()) //There's a lot of things rangine from tables to mechs or closets that can be on the chosen turf, so we'll ignore all turfs that have something aside lighting overlay + continue + + //To be valid, the floor needs to have a wall in a cardinal direction + for (var/d in GLOB.cardinal) + var/turf/T = get_step(F, d) + if (T.is_wall()) + viable_turfs[F] = T //We put this floor and its wall into the possible turfs list + break + + if(length(viable_turfs) == 0) + done_rooms += picked_room + continue + + var/turf/ladder_turf = pick(viable_turfs) + GLOB.free_deepmaint_ladders += ladder_turf + ladders_to_place-- + done_rooms += picked_room + +/obj/procedural/jp_DungeonGenerator/deepmaint/proc/populateCorridors() + for(var/turf/T in path_turfs) + if(prob(30)) + new /obj/decal/cleanable/dirt(T) + +/obj/procedural/dungenerator/deepmaint + name = "Deep Maint Gen" + +/obj/procedural/dungenerator/deepmaint/New() + ..() + spawn() + while(1) + if(Master.current_runlevel) + populateDeepMaintMapLists() + break + else + sleep(150) + + var/start = get_game_time() + var/obj/procedural/jp_DungeonGenerator/deepmaint/generate = new /obj/procedural/jp_DungeonGenerator/deepmaint(src) + testing("Beginning procedural generation of [name] - Z-level [z].") + generate.name = name + generate.setArea(locate(50, 50, z), locate(110, 110, z)) + generate.setWallType(/turf/simulated/wall) + generate.setFloorType(/turf/simulated/floor/tiled/techmaint) + generate.setAllowedRooms(list(/obj/procedural/jp_dungeonroom/preexist/square/submap/deepmaint/big)) + generate.setNumRooms(2) //3 deepmaints "core" rooms + generate.setExtraPaths(0) + generate.setMinPathLength(0) + generate.setMaxPathLength(0) + generate.setMinLongPathLength(0) + generate.setLongPathChance(0) + generate.setPathEndChance(100) + generate.setRoomMinSize(10) + generate.setRoomMaxSize(10) + generate.setPathWidth(1) + generate.generate() + + sleep(90) + + generate.setArea(locate(20, 20, z), locate(150, 150, z)) + generate.setAllowedRooms(list(/obj/procedural/jp_dungeonroom/preexist/square/submap/deepmaint)) + generate.setNumRooms(15) // 25 smaller rooms + generate.setExtraPaths(1) + generate.setMinPathLength(0) + generate.setMaxPathLength(60) //Small Rooms are 60 at most appart + generate.setMinLongPathLength(0) + generate.setLongPathChance(0) + generate.setPathEndChance(100) + generate.setRoomMinSize(5) + generate.setRoomMaxSize(5) + generate.setPathWidth(2) + generate.setUsePreexistingRegions(TRUE) + generate.setDoAccurateRoomPlacementCheck(TRUE) + generate.generate() + generate.populateCorridors() + generate.makeLadders() + testing("Finished procedural generation of [name]. [generate.errString(generate.out_error)] - Z-level [z], in [(get_game_time() - start) / 10] seconds.") diff --git a/packs/deepmaint/generator/deepmaint_event.dm b/packs/deepmaint/generator/deepmaint_event.dm new file mode 100644 index 0000000000000..22b0f49928ca7 --- /dev/null +++ b/packs/deepmaint/generator/deepmaint_event.dm @@ -0,0 +1,64 @@ +/datum/event/deepmaint + announceWhen = 10 + endWhen = 2400 + var/list/free_ladders + var/list/spawned_ladders + +/datum/event/deepmaint/start() + var/attempts = 5 + spawned_ladders = list() + free_ladders = GLOB.free_deepmaint_ladders.Copy() + do + if (!length(free_ladders)) + break + + create_deepmaint_ladder_connection() + + while(--attempts > 0) + + if(length(spawned_ladders) == 0) + log_debug("Failed to spawn any ladders for deepmaint event. Aborting.") + kill(TRUE) + +/datum/event/deepmaint/end() + for (var/obj/structure/ladder/L in spawned_ladders) + L.target_down = null + L.target_up = null + L.visible_message(SPAN_WARNING("\The [src] suddenly vanishes into nothingness!")) + qdel(L) + LAZYCLEARLIST(spawned_ladders) + LAZYCLEARLIST(free_ladders) + command_announcement.Announce("All subspace distortions have ceased. All personnel and/or assets not present onboard should be considered lost.") + + +/datum/event/deepmaint/announce() + command_announcement.Announce("Extreme subspace anomalies detected. Ensure all persons and assets are accounted for.", "[location_name()] Spooky Sensor Network", zlevels = affecting_z) + +/datum/event/deepmaint/proc/create_deepmaint_ladder_connection() + var/area/location = pick_area(list(GLOBAL_PROC_REF(is_not_space_area), GLOBAL_PROC_REF(is_station_area), GLOBAL_PROC_REF(is_maint_area))) + if(!location) + log_debug("Could not find suitable location(s) to spawn ladders to deepmaint. Aborting.") + kill() + return FALSE + + var/list/ladder_turfs = get_area_turfs(location, list(GLOBAL_PROC_REF(not_turf_contains_dense_objects), GLOBAL_PROC_REF(IsTurfAtmosSafe))) + if(!length(ladder_turfs)) + log_debug("Failed to find viable turfs to spawn ladders in \the [location].") + return FALSE + + var/turf/station_turf = pick(ladder_turfs) + + var/turf/deepmaint_turf = pick(free_ladders) + free_ladders -= deepmaint_turf + var/obj/structure/ladder/station_ladder = new (station_turf) + var/turf/T = station_ladder.loc + T.ChangeTurf(/turf/simulated/open) + new/obj/structure/lattice(station_ladder.loc) + var/obj/structure/ladder/up/deepmaint_ladder = new (deepmaint_turf) + station_ladder.desc = "[station_ladder.desc] Was this always here...?" + station_ladder.target_down = deepmaint_ladder + deepmaint_ladder.target_up = station_ladder + spawned_ladders += station_ladder + spawned_ladders += deepmaint_ladder + + return TRUE diff --git a/code/modules/random_map/dungeon/jp_dungeon_gen.dm b/packs/deepmaint/generator/jp_dungeon_gen.dm similarity index 98% rename from code/modules/random_map/dungeon/jp_dungeon_gen.dm rename to packs/deepmaint/generator/jp_dungeon_gen.dm index 39b2b0b1a1f70..41b0d1cd2553b 100644 --- a/code/modules/random_map/dungeon/jp_dungeon_gen.dm +++ b/packs/deepmaint/generator/jp_dungeon_gen.dm @@ -569,7 +569,7 @@ var/timer = world.timeofday - if(seed==null) + if(isnull(seed)) out_seed = rand(-65535, 65535) rand_seed(out_seed) else @@ -644,11 +644,11 @@ border_turfs+=l for(var/turf/t in border_turfs) - for(var/turf/t2 in range(t, 1)) - if(t2.is_wall()&&!(t2 in border_turfs)) - for(var/turf/t3 in range(t2, 1)) + for(var/turf/t2 as anything in RANGE_TURFS(t, 1)) + if(t2.is_wall() && !(t2 in border_turfs)) + for(var/turf/t3 as anything in RANGE_TURFS(t2, 1)) if(!t3.is_wall()) - border_turfs+=t2 + border_turfs += t2 break numits = 0 @@ -694,8 +694,14 @@ region1.addBorder(region2.getBorder()) regions-=region2 - for(var/turf/t in region1.getBorder()) if(!(t in border_turfs)) border_turfs+=t - for(var/turf/t in path) for(var/turf/t2 in range(t, 1)) if(!(t2 in border_turfs)) border_turfs+=t2 + for(var/turf/t in region1.getBorder()) + if(!(t in border_turfs)) + border_turfs+=t + + for(var/turf/t in path) + for(var/turf/t2 as anything in RANGE_TURFS(t, 1)) + if(!(t2 in border_turfs)) + border_turfs+=t2 for(var/obj/procedural/jp_dungeonroom/r in rooms) r.finalise() @@ -1187,9 +1193,10 @@ to the floor that return true from is_wall(). /obj/procedural/jp_dungeonroom/preexist/square/New() ..() - for(var/turf/t in range(centre, size)) turfs += t + for(var/turf/t as anything in RANGE_TURFS(centre, size)) + turfs += t - for(var/turf/t in turfs) + for(var/turf/t as anything in turfs) for(var/turf/t2 in gen.getAdjacent(t)) if(t2 in turfs) continue @@ -1218,16 +1225,15 @@ return true from is_wall() ..() var/radsqr = size*size - for(var/turf/t in range(centre, size)) + for(var/turf/t as anything in RANGE_TURFS(centre, size)) var/ti = t.x-getX() var/tj = t.y-getY() - if(ti*ti + tj*tj>radsqr) continue + if(ti*ti + tj*tj>radsqr) + continue turfs += t - - for(var/turf/t in turfs) for(var/turf/t2 in gen.getAdjacent(t)) if(t2 in turfs) @@ -1252,11 +1258,11 @@ the arms of the plus sign - there are only four. /obj/procedural/jp_dungeonroom/preexist/cross/New() ..() - for(var/turf/t in range(centre, size)) + for(var/turf/t as anything in RANGE_TURFS(centre, size)) if(t.x == getX() || t.y == getY()) turfs += t - for(var/turf/t in range(centre, size+1)) + for(var/turf/t as anything in RANGE_TURFS(centre, size + 1)) if(t in turfs) continue if(t.is_wall() && (t.x == getX() || t.y == getY())) border+=t diff --git a/packs/event_2022jul30/documents.dm b/packs/event_2022jul30/documents.dm index 81f7c82fc0cba..40f5fe7e93589 100644 --- a/packs/event_2022jul30/documents.dm +++ b/packs/event_2022jul30/documents.dm @@ -1,12 +1,3 @@ -/obj/item/folder/envelope/declassified1 - desc = "A thick envelope. The Sol Fleet crest is stamped in the corner, along with 'PUBLIC RELEASE DOCUMENTATION.'" - - -/obj/item/folder/envelope/declassified1/Initialize() - . = ..() - new /obj/item/paper/dclassreport1 (src) - - /obj/item/paper/dclassreport1 name = "Declassified Report: Status of the Fleets" info = {"\ diff --git a/packs/faction_iccgn/badges.dm b/packs/faction_iccgn/badges.dm deleted file mode 100644 index e80a62d29e8a9..0000000000000 --- a/packs/faction_iccgn/badges.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/item/clothing/accessory/iccgn_badge - abstract_type = /obj/item/clothing/accessory/iccgn_badge - name = "base badge, ICCGN" - desc = "You should not see this." - icon = 'packs/faction_iccgn/badges.dmi' - accessory_icons = list( - slot_w_uniform_str = 'packs/faction_iccgn/badges.dmi', - slot_wear_suit_str = 'packs/faction_iccgn/badges.dmi' - ) - on_rolled_down = ACCESSORY_ROLLED_NONE - w_class = ITEM_SIZE_TINY - slot = ACCESSORY_SLOT_INSIGNIA - - -/obj/item/clothing/accessory/iccgn_badge/get_fibers() - return null - - -/obj/item/clothing/accessory/iccgn_badge/enlisted - name = "pin badge, ICCGN Enlisted" - desc = "A shiny little pin badge denoting qualification as a confederation navy enlisted person." - icon_state = "enlisted" - overlay_state = "enlisted_worn" - - -/obj/item/clothing/accessory/iccgn_badge/officer - name = "pin badge, ICCGN Officer" - desc = "A shiny little pin badge denoting qualification as a confederation navy officer." - icon_state = "officer" - overlay_state = "officer_worn" diff --git a/packs/faction_iccgn/clothing.dm b/packs/faction_iccgn/clothing.dm deleted file mode 100644 index 3e9f86694bba3..0000000000000 --- a/packs/faction_iccgn/clothing.dm +++ /dev/null @@ -1,300 +0,0 @@ - -//Main Clothing -/obj/item/clothing/under/iccgn - abstract_type = /obj/item/clothing/under/iccgn - name = "base uniform, ICCGN" - desc = "You should not see this." - icon = 'packs/faction_iccgn/clothing.dmi' - item_icons = list( - slot_w_uniform_str = 'packs/faction_iccgn/clothing.dmi' - ) - sprite_sheets = list() - icon_state = "error" - body_parts_covered = FULL_TORSO | ARMS | FULL_LEGS - siemens_coefficient = 0.9 - armor = list( - melee = ARMOR_MELEE_MINOR, - energy = ARMOR_ENERGY_MINOR - ) - - -/obj/item/clothing/under/iccgn/get_gender_suffix(suffix) - return "" - - -/obj/item/clothing/under/iccgn/get_icon_state(mob/user_mob, slot) - return item_state_slots[slot] - - -/obj/item/clothing/under/iccgn/pt - name = "physical training uniform, ICCGN" - desc = "A comfortable set of clingy shorts and a t-shirt sporting the insigna of the confederation navy." - icon_state = "under_pt" - item_state_slots = list( - slot_l_hand_str = "under_pt_held_l", - slot_r_hand_str = "under_pt_held_r", - slot_w_uniform_str = "under_pt_worn" - ) - - -/obj/item/clothing/under/iccgn/utility - name = "utility uniform, ICCGN" - desc = "A comfortable black utility jumpsuit from a confederation navy uniform." - icon_state = "under_utility" - item_state_slots = list( - slot_l_hand_str = "under_utility_held_l", - slot_r_hand_str = "under_utility_held_r", - slot_w_uniform_str = "under_utility_worn" - ) - - -/obj/item/clothing/under/iccgn/service - name = "service uniform, ICCGN" - desc = "A smart service shirt and dress pants from a confederation navy uniform." - icon_state = "under_service" - item_state_slots = list( - slot_l_hand_str = "under_service_held_l", - slot_r_hand_str = "under_service_held_r", - slot_w_uniform_str = "under_service_worn" - ) - - -/obj/item/clothing/under/iccgn/service_command - name = "service uniform, ICCGN" - desc = "A smart senior officers' shirt and dress pants from a confederation navy uniform." - icon_state = "under_service_command" - item_state_slots = list( - slot_l_hand_str = "under_service_command_held_l", - slot_r_hand_str = "under_service_command_held_r", - slot_w_uniform_str = "under_service_command_worn" - ) - - -//Over Clothing -/obj/item/clothing/suit/iccgn - abstract_type = /obj/item/clothing/suit/iccgn - name = "base jacket, ICCGN" - desc = "You should not see this." - icon = 'packs/faction_iccgn/clothing.dmi' - item_icons = list( - slot_wear_suit_str = 'packs/faction_iccgn/clothing.dmi' - ) - sprite_sheets = list() - icon_state = "error" - body_parts_covered = FULL_TORSO | ARMS - siemens_coefficient = 0.9 - valid_accessory_slots = list( - ACCESSORY_SLOT_RANK, - ACCESSORY_SLOT_INSIGNIA, - ACCESSORY_SLOT_MEDAL - ) - allowed = list() - - -/obj/item/clothing/suit/iccgn/utility - name = "utility jacket, ICCGN" - desc = "A rugged utility jacket from a confederation navy uniform." - icon_state = "suit_utility" - item_state_slots = list( - slot_l_hand_str = "suit_utility_held_l", - slot_r_hand_str = "suit_utility_held_r", - slot_wear_suit_str = "suit_utility_worn" - ) - accessories = list( - /obj/item/clothing/accessory/storage/pockets - ) - - -/obj/item/clothing/suit/iccgn/service_enlisted - name = "service jacket, ICCGN" - desc = "A slick enlisted persons' service jacket from a confederation navy uniform." - icon_state = "suit_service" - item_state_slots = list( - slot_l_hand_str = "suit_service_held_l", - slot_r_hand_str = "suit_service_held_r", - slot_wear_suit_str = "suit_service_worn" - ) - accessories = list( - /obj/item/clothing/accessory/storage/pockets, - /obj/item/clothing/accessory/iccgn_badge/enlisted - ) - - -/obj/item/clothing/suit/iccgn/service_officer - name = "service jacket, ICCGN" - desc = "A slick officers' service jacket from a confederation navy uniform." - icon_state = "suit_service" - item_state_slots = list( - slot_l_hand_str = "suit_service_held_l", - slot_r_hand_str = "suit_service_held_r", - slot_wear_suit_str = "suit_service_worn" - ) - accessories = list( - /obj/item/clothing/accessory/storage/pockets, - /obj/item/clothing/accessory/iccgn_badge/officer - ) - - -/obj/item/clothing/suit/iccgn/service_command - name = "service jacket, ICCGN" - desc = "A slick senior officers' service jacket from a confederation navy uniform." - icon_state = "suit_service_command" - item_state_slots = list( - slot_l_hand_str = "suit_service_held_l", - slot_r_hand_str = "suit_service_held_r", - slot_wear_suit_str = "suit_service_command_worn" - ) - accessories = list( - /obj/item/clothing/accessory/storage/pockets, - /obj/item/clothing/accessory/iccgn_badge/officer - ) - - -/obj/item/clothing/suit/iccgn/dress_enlisted - name = "dress cloak, ICCGN" - desc = "A stylish enlisted persons' dress cloak from a confederation navy uniform." - icon_state = "suit_dress_enlisted" - item_state_slots = list( - slot_l_hand_str = "suit_dress_enlisted_held_l", - slot_r_hand_str = "suit_dress_enlisted_held_r", - slot_wear_suit_str = "suit_dress_enlisted_worn" - ) - accessories = list( - /obj/item/clothing/accessory/iccgn_badge/enlisted - ) - allowed = list() - - -/obj/item/clothing/suit/iccgn/dress_officer - name = "dress cloak, ICCGN" - desc = "A stylish officers' dress cloak from a confederation navy uniform." - icon_state = "suit_dress_officer" - item_state_slots = list( - slot_l_hand_str = "suit_dress_officer_held_l", - slot_r_hand_str = "suit_dress_officer_held_r", - slot_wear_suit_str = "suit_dress_officer_worn" - ) - accessories = list( - /obj/item/clothing/accessory/iccgn_badge/officer - ) - allowed = list() - - -/obj/item/clothing/suit/iccgn/dress_command - name = "dress cloak, ICCGN" - desc = "A stylish senior officers' dress cloak from a confederation navy uniform." - icon_state = "suit_dress_command" - item_state_slots = list( - slot_l_hand_str = "suit_dress_command_held_l", - slot_r_hand_str = "suit_dress_command_held_r", - slot_wear_suit_str = "suit_dress_command_worn" - ) - accessories = list( - /obj/item/clothing/accessory/iccgn_badge/officer - ) - allowed = list() - - -//Gloves -/obj/item/clothing/gloves/iccgn - abstract_type = /obj/item/clothing/gloves/iccgn - name = "base gloves, ICCGN" - desc = "You should not see this." - icon = 'packs/faction_iccgn/clothing.dmi' - item_icons = list( - slot_gloves_str = 'packs/faction_iccgn/clothing.dmi' - ) - sprite_sheets = list() - icon_state = "error" - - -/obj/item/clothing/gloves/iccgn/duty - name = "duty gloves, ICCGN" - desc = "Regal black utility gloves from a confederation navy uniform." - icon_state = "gloves_utility" - item_state_slots = list( - slot_l_hand_str = "gloves_utility_held_l", - slot_r_hand_str = "gloves_utility_held_r", - slot_gloves_str = "gloves_utility_worn" - ) - - -//Shoes -/obj/item/clothing/shoes/iccgn - abstract_type = /obj/item/clothing/shoes/iccgn - name = "base shoes, ICCGN" - desc = "You should not see this." - icon = 'packs/faction_iccgn/clothing.dmi' - item_icons = list( - slot_shoes_str = 'packs/faction_iccgn/clothing.dmi' - ) - sprite_sheets = list() - icon_state = "error" - - -/obj/item/clothing/shoes/iccgn/utility - name = "duty boots, ICCGN" - desc = "Spectacularly shiny utility boots from a confederation navy uniform." - icon_state = "boots_utility" - item_state_slots = list( - slot_l_hand_str = "boots_utility_held_l", - slot_r_hand_str = "boots_utility_held_r", - slot_shoes_str = "boots_utility_worn" - ) - - -/obj/item/clothing/shoes/iccgn/service - name = "service boots, ICCGN" - desc = "Extra tall service boots from a confederation navy uniform." - icon_state = "boots_service" - item_state_slots = list( - slot_l_hand_str = "boots_service_held_l", - slot_r_hand_str = "boots_service_held_r", - slot_shoes_str = "boots_service_worn" - ) - - -//Hats -/obj/item/clothing/head/iccgn - abstract_type = /obj/item/clothing/head/iccgn - name = "base hat, ICCGN" - desc = "You should not see this." - icon = 'packs/faction_iccgn/clothing.dmi' - item_icons = list( - slot_head_str = 'packs/faction_iccgn/clothing.dmi' - ) - sprite_sheets = list() - icon_state = "error" - - -/obj/item/clothing/head/iccgn/beret - name = "uniform beret, ICCGN" - desc = "A slick grey beret from a confederation navy uniform." - icon_state = "hat_beret" - item_state_slots = list( - slot_l_hand_str = "hat_beret_held_l", - slot_r_hand_str = "hat_beret_held_r", - slot_head_str = "hat_beret_worn" - ) - - -/obj/item/clothing/head/iccgn/service - name = "service cover, ICCGN" - desc = "A peaked service cap from a confederation navy uniform." - icon_state = "hat_service" - item_state_slots = list( - slot_l_hand_str = "hat_service_held_l", - slot_r_hand_str = "hat_service_held_r", - slot_head_str = "hat_service_worn" - ) - - -/obj/item/clothing/head/iccgn/service_command - name = "service cover, ICCGN" - desc = "A senior officers' peaked service cap from a confederation navy uniform." - icon_state = "hat_service_command" - item_state_slots = list( - slot_l_hand_str = "hat_service_command_held_l", - slot_r_hand_str = "hat_service_command_held_r", - slot_head_str = "hat_service_command_worn" - ) diff --git a/packs/faction_iccgn/clothing.dmi b/packs/faction_iccgn/clothing.dmi deleted file mode 100644 index 56a3131b59fa6..0000000000000 Binary files a/packs/faction_iccgn/clothing.dmi and /dev/null differ diff --git a/packs/faction_iccgn/coins.dm b/packs/faction_iccgn/coins.dm deleted file mode 100644 index a747b5f6f00f9..0000000000000 --- a/packs/faction_iccgn/coins.dm +++ /dev/null @@ -1,70 +0,0 @@ -/obj/item/material/coin/challenge/gcc - abstract_type = /obj/item/material/coin/challenge/gcc - icon = 'packs/faction_iccgn/coins.dmi' - icon_state = "error" - - -/obj/item/material/coin/challenge/gcc/navy - default_material = MATERIAL_IRON - name = "confederation navy challenge coin" - icon_state = "navy" - desc = {"\ - A challenge coin issued by the Confederation Navy. \ - On the front is the insignia of the Navy, and on the back \ - is a rendering of the late Admiral Yevgeny Novikov.\ - "} - - -/obj/item/material/coin/challenge/gcc/navy_old - default_material = MATERIAL_IRON - name = "old confederation navy challenge coin" - icon_state = "navy-old" - desc = {"\ - A tarnished challenge coin once issued by the \ - Confederation Navy. On the front is the insignia of the \ - Navy, and on the back is an older model of cruiser with \ - Pan-Slavic text written around it.\ - "} - - -/obj/item/material/coin/challenge/gcc/guard - default_material = MATERIAL_IRON - name = "colonial guard challenge coin" - icon_state = "guard" - desc = {"\ - A challenge coin issued by the Confederation Navy. \ - On the front is the insignia of the Colonial Guard, and on \ - the back is a smiling crewman in dress uniform holding an \ - ancient ceremonial rifle.\ - "} - - -/obj/item/material/coin/challenge/gcc/surface - default_material = MATERIAL_IRON - name = "surface warfare challenge coin" - icon_state = "surface" - desc = {"\ - A challenge coin issued by the Confederation Surface \ - Warfare Corps. On the front is a mace against the Corps's \ - parade colors, and on the back is an emboss of a bearded \ - soldier giving a thumbs-up.\ - "} - - -/datum/gear/trinket/gcc_challenge_coin - display_name = "confederation challenge coin selection" - description = {"\ - A selection of challenge coins used by confederation military \ - forces for identification, collection, or bragging rights.\ - "} - path = /obj/item/material/coin/challenge/gcc - cost = 1 - - -/datum/gear/trinket/gcc_challenge_coin/New() - ..() - var/list/options = list() - options["confederation navy"] = /obj/item/material/coin/challenge/gcc/navy - options["colonial guard"] = /obj/item/material/coin/challenge/gcc/guard - options["surface warfare"] = /obj/item/material/coin/challenge/gcc/surface - gear_tweaks += new /datum/gear_tweak/path (options) diff --git a/packs/faction_iccgn/ranks.dm b/packs/faction_iccgn/ranks.dm deleted file mode 100644 index fb8e4b75e885b..0000000000000 --- a/packs/faction_iccgn/ranks.dm +++ /dev/null @@ -1,153 +0,0 @@ -/obj/item/clothing/accessory/iccgn_rank - abstract_type = /obj/item/clothing/accessory/iccgn_rank - name = "base rank insignia, ICCGN" - desc = "You should not see this." - icon = 'packs/faction_iccgn/ranks.dmi' - accessory_icons = list( - slot_w_uniform_str = 'packs/faction_iccgn/ranks.dmi', - slot_wear_suit_str = 'packs/faction_iccgn/ranks.dmi' - ) - icon_state = "error" - overlay_state = "error" - on_rolled_down = ACCESSORY_ROLLED_NONE - w_class = ITEM_SIZE_TINY - slot = ACCESSORY_SLOT_RANK - accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY - gender = PLURAL - - -/obj/item/clothing/accessory/iccgn_rank/get_fibers() - return null - - -/obj/item/clothing/accessory/iccgn_rank/or1 - name = "rank insignia, OR1 Eleve Sailor" - desc = "Collar tabs denoting the GCN OR-1 rank of Eleve Sailor." - icon_state = "or1" - overlay_state = "or_worn" - - -/obj/item/clothing/accessory/iccgn_rank/or3 - name = "rank insignia, OR3 Sailor" - desc = "Collar tabs denoting the GCN OR-3 rank of Sailor." - icon_state = "or3" - overlay_state = "or_worn" - - -/obj/item/clothing/accessory/iccgn_rank/or4 - name = "rank insignia, OR4 Bosman" - desc = "Collar tabs denoting the GCN OR-4 rank of Bosman." - icon_state = "or4" - overlay_state = "or_worn" - - -/obj/item/clothing/accessory/iccgn_rank/or5 - name = "rank insignia, OR5 Starszy Bosman" - desc = "Collar tabs denoting the GCN OR-5 rank of Starszy Bosman." - icon_state = "or5" - overlay_state = "or_worn" - - -/obj/item/clothing/accessory/iccgn_rank/or6 - name = "rank insignia, OR6 Sierzant" - desc = "Collar tabs denoting the GCN OR-6 rank of Sierzant." - icon_state = "or6" - overlay_state = "or_worn" - - -/obj/item/clothing/accessory/iccgn_rank/or7 - name = "rank insignia, OR7 Starshyna" - desc = "Collar tabs denoting the GCN OR-7 rank of Starshyna." - icon_state = "or7" - overlay_state = "or_worn" - - -/obj/item/clothing/accessory/iccgn_rank/or8 - name = "rank insignia, OR8 Adjutant" - desc = "Collar tabs denoting the GCN OR-8 rank of Adjutant." - icon_state = "or8" - overlay_state = "or_worn" - - -/obj/item/clothing/accessory/iccgn_rank/or9 - name = "rank insignia, OR9 Major" - desc = "Collar tabs denoting the GCN OR-9 rank of Major." - icon_state = "or9" - overlay_state = "or_worn" - - -/obj/item/clothing/accessory/iccgn_rank/or9_alt - name = "rank insignia, OR9 Major of the Confederation Navy" - desc = "Collar tabs denoting the GCN OR-9 rank of Major of the Confederation Navy." - icon_state = "or9_alt" - overlay_state = "or_worn" - - -/obj/item/clothing/accessory/iccgn_rank/of1 - name = "rank insignia, OF1 Michman" - desc = "Collar tabs denoting the GCN OF-1 rank of Michman." - icon_state = "of1" - overlay_state = "of_worn" - - -/obj/item/clothing/accessory/iccgn_rank/of2 - name = "rank insignia, OF2 Sous-Leytenant" - desc = "Collar tabs denoting the GCN OF-2 rank of Sous-Leytenant." - icon_state = "of2" - overlay_state = "of_worn" - - -/obj/item/clothing/accessory/iccgn_rank/of3 - name = "rank insignia, OF3 Leytenant" - desc = "Collar tabs denoting the GCN OF-3 rank of Leytenant." - icon_state = "of3" - overlay_state = "of_worn" - - -/obj/item/clothing/accessory/iccgn_rank/of4 - name = "rank insignia, OF4 Sub-Komandor" - desc = "Collar tabs denoting the GCN OF-4 rank of Sub-Komandor." - icon_state = "of4" - overlay_state = "of_worn" - - -/obj/item/clothing/accessory/iccgn_rank/of5 - name = "rank insignia, OF5 Komandor" - desc = "Collar tabs denoting the GCN OF-5 rank of Komandor." - icon_state = "of5" - overlay_state = "of_worn" - - -/obj/item/clothing/accessory/iccgn_rank/of6 - name = "rank insignia, OF6 Kapitan" - desc = "Collar tabs denoting the GCN OF-6 rank of Kapitan." - icon_state = "of6" - overlay_state = "of_worn" - - -/obj/item/clothing/accessory/iccgn_rank/of7 - name = "rank insignia, OF7 Starszy Kapitan" - desc = "Collar tabs denoting the GCN OF-7 rank of Starszy Kapitan." - icon_state = "of7" - overlay_state = "of_worn" - - -/obj/item/clothing/accessory/iccgn_rank/of8 - name = "rank insignia, OF8 Vice-Admiral" - desc = "Collar tabs denoting the GCN OF-8 rank of Vice-Admiral." - icon_state = "of8" - overlay_state = "of_worn" - - -/obj/item/clothing/accessory/iccgn_rank/of9 - name = "rank insignia, OF9 Admiral" - desc = "Collar tabs denoting the GCN OF-9 rank of Admiral." - icon_state = "of9" - overlay_state = "of_worn" - - -/obj/item/clothing/accessory/iccgn_rank/of9_alt - name = "rank insignia, OF9 Marshal of the Confederation Navy" - desc = "Collar tabs denoting the GCN OF-9 rank of Marshal of the Confederation Navy." - icon_state = "of9_alt" - overlay_state = "of_worn" diff --git a/packs/faction_iccgn/tweaks.dm b/packs/faction_iccgn/tweaks.dm deleted file mode 100644 index 8371f17e702ea..0000000000000 --- a/packs/faction_iccgn/tweaks.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/item/storage/wallet/Initialize() - . = ..() - can_hold |= list( - /obj/item/clothing/accessory/iccgn_badge, - /obj/item/clothing/accessory/iccgn_patch, - /obj/item/clothing/accessory/iccgn_rank - ) diff --git a/packs/faction_iccgn/weapons.dm b/packs/faction_iccgn/weapons.dm deleted file mode 100644 index 553cd99fa3f4a..0000000000000 --- a/packs/faction_iccgn/weapons.dm +++ /dev/null @@ -1,26 +0,0 @@ -/obj/item/gun/projectile/pistol/optimus - name = "military pistol" - desc = "A HelTek Optimus. A heavy pistol best known as one of the Confederation Navy's service weapons." - icon = 'packs/faction_iccgn/weapons.dmi' - icon_state = "optimus" - item_state = "secgundark" - safety_icon = "optimus-safety" - magazine_type = /obj/item/ammo_magazine/pistol/double - allowed_magazines = /obj/item/ammo_magazine/pistol/double - origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2, TECH_ESOTERIC = 4) - ammo_indicator = TRUE - fire_delay = 8 - - -/obj/item/gun/projectile/pistol/bobcat - name = "military pistol" - desc = "An Amaranth Armorers P87 Bobcat. A market pistol issued as a Confederation Navy service weapon." - icon = 'packs/faction_iccgn/weapons.dmi' - w_class = ITEM_SIZE_SMALL - icon_state = "bobcat" - item_state = "secgundark" - safety_icon = "bobcat-safety" - magazine_type = /obj/item/ammo_magazine/pistol - allowed_magazines = /obj/item/ammo_magazine/pistol - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ESOTERIC = 4) - fire_delay = 4 diff --git a/packs/factions/commonwealth/_pack.dm b/packs/factions/commonwealth/_pack.dm new file mode 100644 index 0000000000000..a27ad0f365df2 --- /dev/null +++ b/packs/factions/commonwealth/_pack.dm @@ -0,0 +1,5 @@ +#include "badges.dm" +#include "clothing.dm" +#include "misc.dm" +#include "outfits.dm" +#include "tweaks.dm" diff --git a/packs/factions/commonwealth/badges.dm b/packs/factions/commonwealth/badges.dm new file mode 100644 index 0000000000000..99770b3e109e7 --- /dev/null +++ b/packs/factions/commonwealth/badges.dm @@ -0,0 +1,68 @@ +/obj/item/clothing/accessory/commonwealth_badge + abstract_type = /obj/item/clothing/accessory/commonwealth_badge + icon = 'packs/factions/commonwealth/badges.dmi' + accessory_icons = list( + slot_w_uniform_str = 'packs/factions/commonwealth/badges.dmi', + slot_wear_suit_str = 'packs/factions/commonwealth/badges.dmi' + ) + icon_state = null + on_rolled_down = ACCESSORY_ROLLED_NONE + w_class = ITEM_SIZE_TINY + slot = ACCESSORY_SLOT_INSIGNIA + sprite_sheets = list() + + +/obj/item/clothing/accessory/commonwealth_badge/get_fibers() + return null + + +/obj/item/clothing/accessory/commonwealth_badge/navy + name = "commonwealth navy patch" + desc = {"\ + A shield shaped blue and green patch with a red star, signifying service in \ + the now-defunct Terran Commonwealth Navy.\ + "} + icon_state = "navy" + overlay_state = "navy_worn" + + +/obj/item/clothing/accessory/commonwealth_badge/army + name = "commonwealth army patch" + desc = {"\ + A shield shaped blue and green patch with a golden sun, signifying service in \ + the now-defunct Terran Commonwealth Army.\ + "} + icon_state = "army" + overlay_state = "army_worn" + + +/obj/item/clothing/accessory/commonwealth_badge/explorer + name = "ancient Expeditionary Corps patch" + desc = {"\ + A shield shaped blue and green patch with a purple chevron, signifying service \ + in the bygone Expeditionary Corps from before the foundation of the SCG.\ + "} + icon_state = "explorer" + overlay_state = "explorer_worn" + + +/obj/item/clothing/accessory/commonwealth_badge/shield + name = "commonwealth shield" + desc = {"\ + The pin worn by all agents of the Terran Commonwealth to symbolize their \ + service to the blue marble.\ + "} + icon_state = "shield" + overlay_state = "shield_worn" + slot = ACCESSORY_SLOT_MEDAL + + +/obj/item/clothing/accessory/commonwealth_badge/earhart + name = "mission patch, COL Earhart" + desc = {"\ + A reproduction of the symbology for the Terran Commonwealth colony ship COL \ + Earhart, a sea-blue airplane over a red cross. This one has a three digit \ + number on it.\ + "} + icon_state = "earhart" + overlay_state = "earhart_worn" diff --git a/packs/factions/commonwealth/badges.dmi b/packs/factions/commonwealth/badges.dmi new file mode 100644 index 0000000000000..38c884fdd4c50 Binary files /dev/null and b/packs/factions/commonwealth/badges.dmi differ diff --git a/packs/factions/commonwealth/clothing.dm b/packs/factions/commonwealth/clothing.dm new file mode 100644 index 0000000000000..6936b1bb2b56e --- /dev/null +++ b/packs/factions/commonwealth/clothing.dm @@ -0,0 +1,113 @@ +/obj/item/clothing/under/commonwealth + abstract_type = /obj/item/clothing/under/commonwealth + icon = 'packs/factions/commonwealth/clothing.dmi' + item_icons = list( + slot_w_uniform_str = 'packs/factions/commonwealth/clothing.dmi' + ) + sprite_sheets = list() + body_parts_covered = FULL_TORSO | ARMS | FULL_LEGS + siemens_coefficient = 0.9 + armor = list( + melee = ARMOR_MELEE_MINOR, + energy = ARMOR_ENERGY_MINOR + ) + + +/obj/item/clothing/under/commonwealth/utility + name = "commonwealth fatigues" + desc = {"\ + The classic chocolate-brown fatigues of the explorers and soldiers of the \ + bygone Terran Commonwealth. They're in great condition despite probably \ + being over a century old.\ + "} + icon_state = "utility" + item_state_slots = list( + slot_w_uniform_str = "utility" + ) + rolled_down = FALSE + rolled_sleeves = FALSE + + +/obj/item/clothing/under/commonwealth/utility/army + accessories = list( + /obj/item/clothing/accessory/commonwealth_badge/army + ) + + +/obj/item/clothing/under/commonwealth/utility/navy + accessories = list( + /obj/item/clothing/accessory/commonwealth_badge/navy + ) + + +/obj/item/clothing/under/commonwealth/utility/explorer + accessories = list( + /obj/item/clothing/accessory/commonwealth_badge/explorer + ) + + +/obj/item/clothing/under/commonwealth/earhart + name = "earhart fatigues" + desc = {"\ + Faded and greying fatigues that resemble old Commonwealth designs, \ + commonly worn by the Free Peoples of Earhart.\ + "} + icon_state = "earhart" + item_state_slots = list( + slot_w_uniform_str = "earhart" + ) + accessories = list( + /obj/item/clothing/accessory/commonwealth_badge/earhart + ) + rolled_down = FALSE + rolled_sleeves = FALSE + + +/obj/item/clothing/suit/commonwealth + abstract_type = /obj/item/clothing/suit/commonwealth + icon = 'packs/factions/commonwealth/clothing.dmi' + item_icons = list( + slot_wear_suit_str = 'packs/factions/commonwealth/clothing.dmi' + ) + sprite_sheets = list() + body_parts_covered = FULL_TORSO | ARMS + siemens_coefficient = 0.9 + valid_accessory_slots = list( + ACCESSORY_SLOT_RANK, + ACCESSORY_SLOT_INSIGNIA, + ACCESSORY_SLOT_MEDAL + ) + allowed = list() + + +/obj/item/clothing/suit/commonwealth/pilot + name = "commonwealth pilot's jacket" + desc = {"\ + A stylish brown jacket with blue and green Terran Commonwealth insignia. \ + Commonly worn by pilots of the prior century.\ + "} + icon_state = "pilot" + item_state_slots = list( + slot_wear_suit_str = "pilot_worn" + ) + accessories = list( + /obj/item/clothing/accessory/storage/pockets + ) + + +/obj/item/clothing/head/commonwealth + abstract_type = /obj/item/clothing/head/commonwealth + icon = 'packs/factions/commonwealth/clothing.dmi' + item_icons = list( + slot_head_str = 'packs/factions/commonwealth/clothing.dmi' + ) + sprite_sheets = list() + + +/obj/item/clothing/head/commonwealth/pilotka + name = "commonwealth pilotka" + desc = "The folded service cap of the bygone Terran Commonwealth." + icon_state = "pilotka" + item_state_slots = list( + slot_head_str = "pilotka_worn" + ) diff --git a/packs/factions/commonwealth/clothing.dmi b/packs/factions/commonwealth/clothing.dmi new file mode 100644 index 0000000000000..07e1ce9661f7b Binary files /dev/null and b/packs/factions/commonwealth/clothing.dmi differ diff --git a/packs/factions/commonwealth/misc.dm b/packs/factions/commonwealth/misc.dm new file mode 100644 index 0000000000000..859fffd908727 --- /dev/null +++ b/packs/factions/commonwealth/misc.dm @@ -0,0 +1,11 @@ +/obj/item/storage/backpack/dufflebag/kit_commonwealth + name = "dressup kit, Commonwealth" + startswith = list( + /obj/item/clothing/under/commonwealth/earhart, + /obj/item/clothing/suit/commonwealth/pilot, + /obj/item/clothing/head/commonwealth/pilotka, + /obj/item/clothing/accessory/commonwealth_badge/army, + /obj/item/clothing/accessory/commonwealth_badge/navy, + /obj/item/clothing/accessory/commonwealth_badge/explorer, + /obj/item/clothing/accessory/commonwealth_badge/earhart + ) diff --git a/packs/factions/commonwealth/outfits.dm b/packs/factions/commonwealth/outfits.dm new file mode 100644 index 0000000000000..d4dee31ce1fc4 --- /dev/null +++ b/packs/factions/commonwealth/outfits.dm @@ -0,0 +1,16 @@ +/singleton/hierarchy/outfit/tc + name = "TC - Kit" + uniform = /obj/item/clothing/under/commonwealth/utility + gloves = /obj/item/clothing/gloves/thick + shoes = /obj/item/clothing/shoes/dutyboots + belt = /obj/item/storage/belt/holster + l_hand = /obj/item/storage/backpack/dufflebag/kit_commonwealth + + +/singleton/hierarchy/outfit/earhart + name = "TC - Earhart" + uniform = /obj/item/clothing/under/commonwealth/earhart + head = /obj/item/clothing/head/commonwealth/pilotka + gloves = /obj/item/clothing/gloves/thick + shoes = /obj/item/clothing/shoes/dutyboots + belt = /obj/item/storage/belt/holster diff --git a/packs/factions/commonwealth/tweaks.dm b/packs/factions/commonwealth/tweaks.dm new file mode 100644 index 0000000000000..ad5c7f4a1cf97 --- /dev/null +++ b/packs/factions/commonwealth/tweaks.dm @@ -0,0 +1,5 @@ +/obj/item/storage/wallet/Initialize() + . = ..() + contents_allowed |= list( + /obj/item/clothing/accessory/commonwealth_badge + ) diff --git a/packs/factions/fa/_pack.dm b/packs/factions/fa/_pack.dm new file mode 100644 index 0000000000000..a27ad0f365df2 --- /dev/null +++ b/packs/factions/fa/_pack.dm @@ -0,0 +1,5 @@ +#include "badges.dm" +#include "clothing.dm" +#include "misc.dm" +#include "outfits.dm" +#include "tweaks.dm" diff --git a/packs/factions/fa/badges.dm b/packs/factions/fa/badges.dm new file mode 100644 index 0000000000000..1d63d7be4b45d --- /dev/null +++ b/packs/factions/fa/badges.dm @@ -0,0 +1,50 @@ +/obj/item/clothing/accessory/fa_badge + abstract_type = /obj/item/clothing/accessory/fa_badge + icon = 'packs/factions/fa/badges.dmi' + accessory_icons = list( + slot_w_uniform_str = 'packs/factions/fa/badges.dmi', + slot_wear_suit_str = 'packs/factions/fa/badges.dmi' + ) + icon_state = null + on_rolled_down = ACCESSORY_ROLLED_NONE + w_class = ITEM_SIZE_TINY + slot = ACCESSORY_SLOT_INSIGNIA + sprite_sheets = list( + SPECIES_UNATHI = 'packs/factions/fa/badges_unathi.dmi' + ) + + +/obj/item/clothing/accessory/fa_badge/get_fibers() + return null + + +/obj/item/clothing/accessory/fa_badge/guardsman + name = "guardsman medal" + desc = {"\ + A copper four-pointed star denoting that the wearer is a Guardsman of the \ + Frontier Alliance. Not worth enough in the scrapyard to justify being reprimanded.\ + "} + icon_state = "gam" + overlay_state = "gam_worn" + + +/obj/item/clothing/accessory/fa_badge/warden + name = "warden medal" + desc = {"\ + A silver four-pointed star denoting that the wearer is a Warden of the Frontier \ + Alliance. Shinier than necessarily practical, and also clearly made of nickel \ + silver if you bother to stare.\ + "} + icon_state = "wam" + overlay_state = "wam_worn" + + +/obj/item/clothing/accessory/fa_badge/marshal + name = "star marshal medal" + desc = {"\ + A golden four-pointed star denoting that the wearer is a Star Marshal of the \ + Frontier Alliance. If you take a real close look at it, you can see that the \ + gold isn't real. It's plated tin.\ + "} + icon_state = "sam" + overlay_state = "sam_worn" diff --git a/packs/factions/fa/badges.dmi b/packs/factions/fa/badges.dmi new file mode 100644 index 0000000000000..6157728646c9a Binary files /dev/null and b/packs/factions/fa/badges.dmi differ diff --git a/packs/factions/fa/badges_unathi.dmi b/packs/factions/fa/badges_unathi.dmi new file mode 100644 index 0000000000000..02ea8cc8f93c7 Binary files /dev/null and b/packs/factions/fa/badges_unathi.dmi differ diff --git a/packs/factions/fa/clothing.dm b/packs/factions/fa/clothing.dm new file mode 100644 index 0000000000000..cd173784a7cb3 --- /dev/null +++ b/packs/factions/fa/clothing.dm @@ -0,0 +1,31 @@ +/obj/item/clothing/under/fa + abstract_type = /obj/item/clothing/under/fa + icon = 'packs/factions/fa/clothing.dmi' + item_icons = list( + slot_w_uniform_str = 'packs/factions/fa/clothing.dmi' + ) + sprite_sheets = list() + body_parts_covered = FULL_TORSO | ARMS | FULL_LEGS + siemens_coefficient = 0.9 + armor = list( + melee = ARMOR_MELEE_MINOR, + energy = ARMOR_ENERGY_MINOR + ) + + +/obj/item/clothing/under/fa/vacsuit + name = "copernican VAC-suit" + desc = {"\ + A somewhat uncomfortable, utilitarian uniform meant to be worn under \ + spacesuits by orbital shipyard workers. This one has Frontier Alliance \ + crests on both shoulders.\ + "} + icon_state = "vacsuit" + item_state_slots = list( + slot_w_uniform_str = "vacsuit" + ) + sprite_sheets = list( + SPECIES_UNATHI = 'packs/factions/fa/clothing_unathi.dmi' + ) + rolled_down = FALSE + rolled_sleeves = FALSE diff --git a/packs/factions/fa/clothing.dmi b/packs/factions/fa/clothing.dmi new file mode 100644 index 0000000000000..93b716e4ec528 Binary files /dev/null and b/packs/factions/fa/clothing.dmi differ diff --git a/packs/factions/fa/clothing_unathi.dmi b/packs/factions/fa/clothing_unathi.dmi new file mode 100644 index 0000000000000..497dba99e9f1d Binary files /dev/null and b/packs/factions/fa/clothing_unathi.dmi differ diff --git a/packs/factions/fa/misc.dm b/packs/factions/fa/misc.dm new file mode 100644 index 0000000000000..7d26f3d418ffc --- /dev/null +++ b/packs/factions/fa/misc.dm @@ -0,0 +1,7 @@ +/obj/item/storage/backpack/dufflebag/kit_fa + name = "dressup kit, FA" + startswith = list( + /obj/item/clothing/accessory/fa_badge/guardsman, + /obj/item/clothing/accessory/fa_badge/warden, + /obj/item/clothing/accessory/fa_badge/marshal + ) diff --git a/packs/factions/fa/outfits.dm b/packs/factions/fa/outfits.dm new file mode 100644 index 0000000000000..288ea38a5abe9 --- /dev/null +++ b/packs/factions/fa/outfits.dm @@ -0,0 +1,7 @@ +/singleton/hierarchy/outfit/fa + name = "FA - Kit" + uniform = /obj/item/clothing/under/fa/vacsuit + gloves = /obj/item/clothing/gloves/thick + shoes = /obj/item/clothing/shoes/dutyboots + belt = /obj/item/storage/belt/holster + l_hand = /obj/item/storage/backpack/dufflebag/kit_fa diff --git a/packs/factions/fa/tweaks.dm b/packs/factions/fa/tweaks.dm new file mode 100644 index 0000000000000..73df4fab54a22 --- /dev/null +++ b/packs/factions/fa/tweaks.dm @@ -0,0 +1,5 @@ +/obj/item/storage/wallet/Initialize() + . = ..() + contents_allowed |= list( + /obj/item/clothing/accessory/fa_badge + ) diff --git a/packs/faction_iccgn/_pack.dm b/packs/factions/iccgn/_pack.dm similarity index 100% rename from packs/faction_iccgn/_pack.dm rename to packs/factions/iccgn/_pack.dm diff --git a/packs/factions/iccgn/badges.dm b/packs/factions/iccgn/badges.dm new file mode 100644 index 0000000000000..cc2a41557dc61 --- /dev/null +++ b/packs/factions/iccgn/badges.dm @@ -0,0 +1,31 @@ +/obj/item/clothing/accessory/iccgn_badge + abstract_type = /obj/item/clothing/accessory/iccgn_badge + name = "base badge, ICCGN" + desc = "You should not see this." + icon = 'packs/factions/iccgn/badges.dmi' + accessory_icons = list( + slot_w_uniform_str = 'packs/factions/iccgn/badges.dmi', + slot_wear_suit_str = 'packs/factions/iccgn/badges.dmi' + ) + icon_state = null + on_rolled_down = ACCESSORY_ROLLED_NONE + w_class = ITEM_SIZE_TINY + slot = ACCESSORY_SLOT_INSIGNIA + + +/obj/item/clothing/accessory/iccgn_badge/get_fibers() + return null + + +/obj/item/clothing/accessory/iccgn_badge/enlisted + name = "pin badge, ICCGN Enlisted" + desc = "A shiny little pin badge denoting qualification as a confederation navy enlisted person." + icon_state = "enlisted" + overlay_state = "enlisted_worn" + + +/obj/item/clothing/accessory/iccgn_badge/officer + name = "pin badge, ICCGN Officer" + desc = "A shiny little pin badge denoting qualification as a confederation navy officer." + icon_state = "officer" + overlay_state = "officer_worn" diff --git a/packs/faction_iccgn/badges.dmi b/packs/factions/iccgn/badges.dmi similarity index 100% rename from packs/faction_iccgn/badges.dmi rename to packs/factions/iccgn/badges.dmi diff --git a/packs/factions/iccgn/clothing.dm b/packs/factions/iccgn/clothing.dm new file mode 100644 index 0000000000000..76fffe8c69900 --- /dev/null +++ b/packs/factions/iccgn/clothing.dm @@ -0,0 +1,287 @@ + +//Main Clothing +/obj/item/clothing/under/iccgn + abstract_type = /obj/item/clothing/under/iccgn + name = "base uniform, ICCGN" + desc = "You should not see this." + icon = 'packs/factions/iccgn/clothing.dmi' + item_icons = list( + slot_w_uniform_str = 'packs/factions/iccgn/clothing.dmi' + ) + sprite_sheets = list() + body_parts_covered = FULL_TORSO | ARMS | FULL_LEGS + siemens_coefficient = 0.9 + armor = list( + melee = ARMOR_MELEE_MINOR, + energy = ARMOR_ENERGY_MINOR + ) + + +/obj/item/clothing/under/iccgn/pt + name = "physical training uniform, ICCGN" + desc = "A comfortable set of clingy shorts and a t-shirt sporting the insigna of the confederation navy." + icon_state = "under_pt" + item_state_slots = list( + slot_l_hand_str = "under_pt_held_l", + slot_r_hand_str = "under_pt_held_r", + slot_w_uniform_str = "under_pt_worn" + ) + + +/obj/item/clothing/under/iccgn/utility + name = "utility uniform, ICCGN" + desc = "A comfortable black utility jumpsuit from a confederation navy uniform." + icon_state = "under_utility" + item_state_slots = list( + slot_l_hand_str = "under_utility_held_l", + slot_r_hand_str = "under_utility_held_r", + slot_w_uniform_str = "under_utility_worn" + ) + + +/obj/item/clothing/under/iccgn/service + name = "service uniform, ICCGN" + desc = "A smart service shirt and dress pants from a confederation navy uniform." + icon_state = "under_service" + item_state_slots = list( + slot_l_hand_str = "under_service_held_l", + slot_r_hand_str = "under_service_held_r", + slot_w_uniform_str = "under_service_worn" + ) + + +/obj/item/clothing/under/iccgn/service_command + name = "service uniform, ICCGN" + desc = "A smart senior officers' shirt and dress pants from a confederation navy uniform." + icon_state = "under_service_command" + item_state_slots = list( + slot_l_hand_str = "under_service_command_held_l", + slot_r_hand_str = "under_service_command_held_r", + slot_w_uniform_str = "under_service_command_worn" + ) + + +//Over Clothing +/obj/item/clothing/suit/iccgn + abstract_type = /obj/item/clothing/suit/iccgn + name = "base jacket, ICCGN" + desc = "You should not see this." + icon = 'packs/factions/iccgn/clothing.dmi' + item_icons = list( + slot_wear_suit_str = 'packs/factions/iccgn/clothing.dmi' + ) + sprite_sheets = list() + body_parts_covered = FULL_TORSO | ARMS + siemens_coefficient = 0.9 + valid_accessory_slots = list( + ACCESSORY_SLOT_RANK, + ACCESSORY_SLOT_INSIGNIA, + ACCESSORY_SLOT_MEDAL + ) + allowed = list() + + +/obj/item/clothing/suit/iccgn/utility + name = "utility jacket, ICCGN" + desc = "A rugged utility jacket from a confederation navy uniform." + icon_state = "suit_utility" + item_state_slots = list( + slot_l_hand_str = "suit_utility_held_l", + slot_r_hand_str = "suit_utility_held_r", + slot_wear_suit_str = "suit_utility_worn" + ) + accessories = list( + /obj/item/clothing/accessory/storage/pockets + ) + + +/obj/item/clothing/suit/iccgn/service_enlisted + name = "service jacket, ICCGN" + desc = "A slick enlisted persons' service jacket from a confederation navy uniform." + icon_state = "suit_service" + item_state_slots = list( + slot_l_hand_str = "suit_service_held_l", + slot_r_hand_str = "suit_service_held_r", + slot_wear_suit_str = "suit_service_worn" + ) + accessories = list( + /obj/item/clothing/accessory/storage/pockets, + /obj/item/clothing/accessory/iccgn_badge/enlisted + ) + + +/obj/item/clothing/suit/iccgn/service_officer + name = "service jacket, ICCGN" + desc = "A slick officers' service jacket from a confederation navy uniform." + icon_state = "suit_service" + item_state_slots = list( + slot_l_hand_str = "suit_service_held_l", + slot_r_hand_str = "suit_service_held_r", + slot_wear_suit_str = "suit_service_worn" + ) + accessories = list( + /obj/item/clothing/accessory/storage/pockets, + /obj/item/clothing/accessory/iccgn_badge/officer + ) + + +/obj/item/clothing/suit/iccgn/service_command + name = "service jacket, ICCGN" + desc = "A slick senior officers' service jacket from a confederation navy uniform." + icon_state = "suit_service_command" + item_state_slots = list( + slot_l_hand_str = "suit_service_held_l", + slot_r_hand_str = "suit_service_held_r", + slot_wear_suit_str = "suit_service_command_worn" + ) + accessories = list( + /obj/item/clothing/accessory/storage/pockets, + /obj/item/clothing/accessory/iccgn_badge/officer + ) + + +/obj/item/clothing/suit/iccgn/dress_enlisted + name = "dress cloak, ICCGN" + desc = "A stylish enlisted persons' dress cloak from a confederation navy uniform." + icon_state = "suit_dress_enlisted" + item_state_slots = list( + slot_l_hand_str = "suit_dress_enlisted_held_l", + slot_r_hand_str = "suit_dress_enlisted_held_r", + slot_wear_suit_str = "suit_dress_enlisted_worn" + ) + accessories = list( + /obj/item/clothing/accessory/iccgn_badge/enlisted + ) + allowed = list() + + +/obj/item/clothing/suit/iccgn/dress_officer + name = "dress cloak, ICCGN" + desc = "A stylish officers' dress cloak from a confederation navy uniform." + icon_state = "suit_dress_officer" + item_state_slots = list( + slot_l_hand_str = "suit_dress_officer_held_l", + slot_r_hand_str = "suit_dress_officer_held_r", + slot_wear_suit_str = "suit_dress_officer_worn" + ) + accessories = list( + /obj/item/clothing/accessory/iccgn_badge/officer + ) + allowed = list() + + +/obj/item/clothing/suit/iccgn/dress_command + name = "dress cloak, ICCGN" + desc = "A stylish senior officers' dress cloak from a confederation navy uniform." + icon_state = "suit_dress_command" + item_state_slots = list( + slot_l_hand_str = "suit_dress_command_held_l", + slot_r_hand_str = "suit_dress_command_held_r", + slot_wear_suit_str = "suit_dress_command_worn" + ) + accessories = list( + /obj/item/clothing/accessory/iccgn_badge/officer + ) + allowed = list() + + +//Gloves +/obj/item/clothing/gloves/iccgn + abstract_type = /obj/item/clothing/gloves/iccgn + name = "base gloves, ICCGN" + desc = "You should not see this." + icon = 'packs/factions/iccgn/clothing.dmi' + item_icons = list( + slot_gloves_str = 'packs/factions/iccgn/clothing.dmi' + ) + sprite_sheets = list() + + +/obj/item/clothing/gloves/iccgn/duty + name = "duty gloves, ICCGN" + desc = "Regal black utility gloves from a confederation navy uniform." + icon_state = "gloves_utility" + item_state_slots = list( + slot_l_hand_str = "gloves_utility_held_l", + slot_r_hand_str = "gloves_utility_held_r", + slot_gloves_str = "gloves_utility_worn" + ) + + +//Shoes +/obj/item/clothing/shoes/iccgn + abstract_type = /obj/item/clothing/shoes/iccgn + name = "base shoes, ICCGN" + desc = "You should not see this." + icon = 'packs/factions/iccgn/clothing.dmi' + item_icons = list( + slot_shoes_str = 'packs/factions/iccgn/clothing.dmi' + ) + sprite_sheets = list() + + +/obj/item/clothing/shoes/iccgn/utility + name = "duty boots, ICCGN" + desc = "Spectacularly shiny utility boots from a confederation navy uniform." + icon_state = "boots_utility" + item_state_slots = list( + slot_l_hand_str = "boots_utility_held_l", + slot_r_hand_str = "boots_utility_held_r", + slot_shoes_str = "boots_utility_worn" + ) + + +/obj/item/clothing/shoes/iccgn/service + name = "service boots, ICCGN" + desc = "Extra tall service boots from a confederation navy uniform." + icon_state = "boots_service" + item_state_slots = list( + slot_l_hand_str = "boots_service_held_l", + slot_r_hand_str = "boots_service_held_r", + slot_shoes_str = "boots_service_worn" + ) + + +//Hats +/obj/item/clothing/head/iccgn + abstract_type = /obj/item/clothing/head/iccgn + name = "base hat, ICCGN" + desc = "You should not see this." + icon = 'packs/factions/iccgn/clothing.dmi' + item_icons = list( + slot_head_str = 'packs/factions/iccgn/clothing.dmi' + ) + sprite_sheets = list() + + +/obj/item/clothing/head/iccgn/beret + name = "uniform beret, ICCGN" + desc = "A slick grey beret from a confederation navy uniform." + icon_state = "hat_beret" + item_state_slots = list( + slot_l_hand_str = "hat_beret_held_l", + slot_r_hand_str = "hat_beret_held_r", + slot_head_str = "hat_beret_worn" + ) + + +/obj/item/clothing/head/iccgn/service + name = "service cover, ICCGN" + desc = "A peaked service cap from a confederation navy uniform." + icon_state = "hat_service" + item_state_slots = list( + slot_l_hand_str = "hat_service_held_l", + slot_r_hand_str = "hat_service_held_r", + slot_head_str = "hat_service_worn" + ) + + +/obj/item/clothing/head/iccgn/service_command + name = "service cover, ICCGN" + desc = "A senior officers' peaked service cap from a confederation navy uniform." + icon_state = "hat_service_command" + item_state_slots = list( + slot_l_hand_str = "hat_service_command_held_l", + slot_r_hand_str = "hat_service_command_held_r", + slot_head_str = "hat_service_command_worn" + ) diff --git a/packs/factions/iccgn/clothing.dmi b/packs/factions/iccgn/clothing.dmi new file mode 100644 index 0000000000000..429ccc1f52c3a Binary files /dev/null and b/packs/factions/iccgn/clothing.dmi differ diff --git a/packs/factions/iccgn/coins.dm b/packs/factions/iccgn/coins.dm new file mode 100644 index 0000000000000..ef6e2e56f47b9 --- /dev/null +++ b/packs/factions/iccgn/coins.dm @@ -0,0 +1,69 @@ +/obj/item/material/coin/challenge/gcc + abstract_type = /obj/item/material/coin/challenge/gcc + icon = 'packs/factions/iccgn/coins.dmi' + icon_state = "error" + + +/obj/item/material/coin/challenge/gcc/navy + default_material = MATERIAL_IRON + name = "confederation navy challenge coin" + icon_state = "navy" + desc = {"\ + A challenge coin issued by the Confederation Navy. \ + On the front is the insignia of the Navy, and on the back \ + is a rendering of the late Admiral Yevgeny Novikov.\ + "} + + +/obj/item/material/coin/challenge/gcc/navy_old + default_material = MATERIAL_IRON + name = "old confederation navy challenge coin" + icon_state = "navy-old" + desc = {"\ + A tarnished challenge coin once issued by the \ + Confederation Navy. On the front is the insignia of the \ + Navy, and on the back is an older model of cruiser with \ + Pan-Slavic text written around it.\ + "} + + +/obj/item/material/coin/challenge/gcc/guard + default_material = MATERIAL_IRON + name = "colonial guard challenge coin" + icon_state = "guard" + desc = {"\ + A challenge coin issued by the Confederation Navy. \ + On the front is the insignia of the Colonial Guard, and on \ + the back is a smiling crewman in dress uniform holding an \ + ancient ceremonial rifle.\ + "} + + +/obj/item/material/coin/challenge/gcc/surface + default_material = MATERIAL_IRON + name = "surface warfare challenge coin" + icon_state = "surface" + desc = {"\ + A challenge coin issued by the Confederation Surface \ + Warfare Corps. On the front is a mace against the Corps's \ + parade colors, and on the back is an emboss of a bearded \ + soldier giving a thumbs-up.\ + "} + + +/datum/gear/trinket/gcc_challenge_coin + display_name = "confederation challenge coin selection" + description = {"\ + A selection of challenge coins used by confederation military \ + forces for identification, collection, or bragging rights.\ + "} + path = /obj/item/material/coin/challenge/gcc + + +/datum/gear/trinket/gcc_challenge_coin/New() + ..() + var/list/options = list() + options["confederation navy"] = /obj/item/material/coin/challenge/gcc/navy + options["colonial guard"] = /obj/item/material/coin/challenge/gcc/guard + options["surface warfare"] = /obj/item/material/coin/challenge/gcc/surface + gear_tweaks += new /datum/gear_tweak/path (options) diff --git a/packs/faction_iccgn/coins.dmi b/packs/factions/iccgn/coins.dmi similarity index 100% rename from packs/faction_iccgn/coins.dmi rename to packs/factions/iccgn/coins.dmi diff --git a/packs/faction_iccgn/faction.dm b/packs/factions/iccgn/faction.dm similarity index 100% rename from packs/faction_iccgn/faction.dm rename to packs/factions/iccgn/faction.dm diff --git a/packs/faction_iccgn/misc.dm b/packs/factions/iccgn/misc.dm similarity index 100% rename from packs/faction_iccgn/misc.dm rename to packs/factions/iccgn/misc.dm diff --git a/packs/faction_iccgn/outfits.dm b/packs/factions/iccgn/outfits.dm similarity index 100% rename from packs/faction_iccgn/outfits.dm rename to packs/factions/iccgn/outfits.dm diff --git a/packs/faction_iccgn/patches.dm b/packs/factions/iccgn/patches.dm similarity index 93% rename from packs/faction_iccgn/patches.dm rename to packs/factions/iccgn/patches.dm index 48f0897647be7..d7b524fa55a2e 100644 --- a/packs/faction_iccgn/patches.dm +++ b/packs/factions/iccgn/patches.dm @@ -12,12 +12,12 @@ abstract_type = /obj/item/clothing/accessory/iccgn_patch name = "base uniform patch, ICCGN" desc = "You should not see this." - icon = 'packs/faction_iccgn/patches.dmi' + icon = 'packs/factions/iccgn/patches.dmi' accessory_icons = list( - slot_w_uniform_str = 'packs/faction_iccgn/patches.dmi', - slot_wear_suit_str = 'packs/faction_iccgn/patches.dmi' + slot_w_uniform_str = 'packs/factions/iccgn/patches.dmi', + slot_wear_suit_str = 'packs/factions/iccgn/patches.dmi' ) - icon_state = "error" + icon_state = null on_rolled_down = ACCESSORY_ROLLED_NONE w_class = ITEM_SIZE_TINY slot = ACCESSORY_SLOT_INSIGNIA diff --git a/packs/faction_iccgn/patches.dmi b/packs/factions/iccgn/patches.dmi similarity index 100% rename from packs/faction_iccgn/patches.dmi rename to packs/factions/iccgn/patches.dmi diff --git a/packs/factions/iccgn/ranks.dm b/packs/factions/iccgn/ranks.dm new file mode 100644 index 0000000000000..1aa90d3f5e0c8 --- /dev/null +++ b/packs/factions/iccgn/ranks.dm @@ -0,0 +1,153 @@ +/obj/item/clothing/accessory/iccgn_rank + abstract_type = /obj/item/clothing/accessory/iccgn_rank + name = "base rank insignia, ICCGN" + desc = "You should not see this." + icon = 'packs/factions/iccgn/ranks.dmi' + accessory_icons = list( + slot_w_uniform_str = 'packs/factions/iccgn/ranks.dmi', + slot_wear_suit_str = 'packs/factions/iccgn/ranks.dmi' + ) + icon_state = null + overlay_state = "error" + on_rolled_down = ACCESSORY_ROLLED_NONE + w_class = ITEM_SIZE_TINY + slot = ACCESSORY_SLOT_RANK + accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY + gender = PLURAL + + +/obj/item/clothing/accessory/iccgn_rank/get_fibers() + return null + + +/obj/item/clothing/accessory/iccgn_rank/or1 + name = "rank insignia, OR1 Eleve Sailor" + desc = "Collar tabs denoting the GCN OR-1 rank of Eleve Sailor." + icon_state = "or1" + overlay_state = "or_worn" + + +/obj/item/clothing/accessory/iccgn_rank/or3 + name = "rank insignia, OR3 Sailor" + desc = "Collar tabs denoting the GCN OR-3 rank of Sailor." + icon_state = "or3" + overlay_state = "or_worn" + + +/obj/item/clothing/accessory/iccgn_rank/or4 + name = "rank insignia, OR4 Bosman" + desc = "Collar tabs denoting the GCN OR-4 rank of Bosman." + icon_state = "or4" + overlay_state = "or_worn" + + +/obj/item/clothing/accessory/iccgn_rank/or5 + name = "rank insignia, OR5 Starszy Bosman" + desc = "Collar tabs denoting the GCN OR-5 rank of Starszy Bosman." + icon_state = "or5" + overlay_state = "or_worn" + + +/obj/item/clothing/accessory/iccgn_rank/or6 + name = "rank insignia, OR6 Sierzant" + desc = "Collar tabs denoting the GCN OR-6 rank of Sierzant." + icon_state = "or6" + overlay_state = "or_worn" + + +/obj/item/clothing/accessory/iccgn_rank/or7 + name = "rank insignia, OR7 Starshyna" + desc = "Collar tabs denoting the GCN OR-7 rank of Starshyna." + icon_state = "or7" + overlay_state = "or_worn" + + +/obj/item/clothing/accessory/iccgn_rank/or8 + name = "rank insignia, OR8 Adjutant" + desc = "Collar tabs denoting the GCN OR-8 rank of Adjutant." + icon_state = "or8" + overlay_state = "or_worn" + + +/obj/item/clothing/accessory/iccgn_rank/or9 + name = "rank insignia, OR9 Major" + desc = "Collar tabs denoting the GCN OR-9 rank of Major." + icon_state = "or9" + overlay_state = "or_worn" + + +/obj/item/clothing/accessory/iccgn_rank/or9_alt + name = "rank insignia, OR9 Major of the Confederation Navy" + desc = "Collar tabs denoting the GCN OR-9 rank of Major of the Confederation Navy." + icon_state = "or9_alt" + overlay_state = "or_worn" + + +/obj/item/clothing/accessory/iccgn_rank/of1 + name = "rank insignia, OF1 Michman" + desc = "Collar tabs denoting the GCN OF-1 rank of Michman." + icon_state = "of1" + overlay_state = "of_worn" + + +/obj/item/clothing/accessory/iccgn_rank/of2 + name = "rank insignia, OF2 Sous-Leytenant" + desc = "Collar tabs denoting the GCN OF-2 rank of Sous-Leytenant." + icon_state = "of2" + overlay_state = "of_worn" + + +/obj/item/clothing/accessory/iccgn_rank/of3 + name = "rank insignia, OF3 Leytenant" + desc = "Collar tabs denoting the GCN OF-3 rank of Leytenant." + icon_state = "of3" + overlay_state = "of_worn" + + +/obj/item/clothing/accessory/iccgn_rank/of4 + name = "rank insignia, OF4 Sub-Komandor" + desc = "Collar tabs denoting the GCN OF-4 rank of Sub-Komandor." + icon_state = "of4" + overlay_state = "of_worn" + + +/obj/item/clothing/accessory/iccgn_rank/of5 + name = "rank insignia, OF5 Komandor" + desc = "Collar tabs denoting the GCN OF-5 rank of Komandor." + icon_state = "of5" + overlay_state = "of_worn" + + +/obj/item/clothing/accessory/iccgn_rank/of6 + name = "rank insignia, OF6 Kapitan" + desc = "Collar tabs denoting the GCN OF-6 rank of Kapitan." + icon_state = "of6" + overlay_state = "of_worn" + + +/obj/item/clothing/accessory/iccgn_rank/of7 + name = "rank insignia, OF7 Starszy Kapitan" + desc = "Collar tabs denoting the GCN OF-7 rank of Starszy Kapitan." + icon_state = "of7" + overlay_state = "of_worn" + + +/obj/item/clothing/accessory/iccgn_rank/of8 + name = "rank insignia, OF8 Vice-Admiral" + desc = "Collar tabs denoting the GCN OF-8 rank of Vice-Admiral." + icon_state = "of8" + overlay_state = "of_worn" + + +/obj/item/clothing/accessory/iccgn_rank/of9 + name = "rank insignia, OF9 Admiral" + desc = "Collar tabs denoting the GCN OF-9 rank of Admiral." + icon_state = "of9" + overlay_state = "of_worn" + + +/obj/item/clothing/accessory/iccgn_rank/of9_alt + name = "rank insignia, OF9 Marshal of the Confederation Navy" + desc = "Collar tabs denoting the GCN OF-9 rank of Marshal of the Confederation Navy." + icon_state = "of9_alt" + overlay_state = "of_worn" diff --git a/packs/faction_iccgn/ranks.dmi b/packs/factions/iccgn/ranks.dmi similarity index 100% rename from packs/faction_iccgn/ranks.dmi rename to packs/factions/iccgn/ranks.dmi diff --git a/packs/factions/iccgn/tweaks.dm b/packs/factions/iccgn/tweaks.dm new file mode 100644 index 0000000000000..37145945f243a --- /dev/null +++ b/packs/factions/iccgn/tweaks.dm @@ -0,0 +1,7 @@ +/obj/item/storage/wallet/Initialize() + . = ..() + contents_allowed |= list( + /obj/item/clothing/accessory/iccgn_badge, + /obj/item/clothing/accessory/iccgn_patch, + /obj/item/clothing/accessory/iccgn_rank + ) diff --git a/packs/factions/iccgn/weapons.dm b/packs/factions/iccgn/weapons.dm new file mode 100644 index 0000000000000..a030e8947331b --- /dev/null +++ b/packs/factions/iccgn/weapons.dm @@ -0,0 +1,30 @@ +/obj/item/gun/projectile/pistol/optimus + name = "military pistol" + desc = "A HelTek Optimus. A heavy pistol best known as one of the Confederation Navy's service weapons." + icon = 'packs/factions/iccgn/weapons.dmi' + icon_state = "optimus" + item_state = "secgundark" + safety_icon = "optimus-safety" + magazine_type = /obj/item/ammo_magazine/pistol/double + allowed_magazines = /obj/item/ammo_magazine/pistol/double + origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2, TECH_ESOTERIC = 4) + ammo_indicator = TRUE + fire_delay = 8 + + +/obj/item/gun/projectile/pistol/bobcat + name = "military pistol" + desc = "An Amaranth Armorers P87 Bobcat. A market pistol issued as a Confederation Navy service weapon." + icon = 'packs/factions/iccgn/weapons.dmi' + w_class = ITEM_SIZE_SMALL + icon_state = "bobcat" + item_state = "secgundark" + safety_icon = "bobcat-safety" + magazine_type = /obj/item/ammo_magazine/pistol + allowed_magazines = /obj/item/ammo_magazine/pistol + banned_magazines = list( + /obj/item/ammo_magazine/pistol/double, + /obj/item/ammo_magazine/pistol/small + ) + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ESOTERIC = 4) + fire_delay = 4 diff --git a/packs/faction_iccgn/weapons.dmi b/packs/factions/iccgn/weapons.dmi similarity index 100% rename from packs/faction_iccgn/weapons.dmi rename to packs/factions/iccgn/weapons.dmi diff --git a/packs/factions/scga/_pack.dm b/packs/factions/scga/_pack.dm new file mode 100644 index 0000000000000..4a24c6d37f5d5 --- /dev/null +++ b/packs/factions/scga/_pack.dm @@ -0,0 +1,10 @@ +#include "badges.dm" +#include "clothing.dm" +#include "coins.dm" +#include "faction.dm" +#include "misc.dm" +#include "outfits.dm" +#include "ranks.dm" +#include "tweaks.dm" +#include "weapons.dm" +#include "loadout.dm" diff --git a/packs/factions/scga/badges.dm b/packs/factions/scga/badges.dm new file mode 100644 index 0000000000000..0a2bb7b1eacf3 --- /dev/null +++ b/packs/factions/scga/badges.dm @@ -0,0 +1,33 @@ +/obj/item/clothing/accessory/scga_badge + abstract_type = /obj/item/clothing/accessory/scga_badge + name = "base badge, SCGA" + desc = "You should not see this." + icon = 'packs/factions/scga/badges.dmi' + accessory_icons = list( + slot_w_uniform_str = 'packs/factions/scga/badges.dmi', + slot_wear_suit_str = 'packs/factions/scga/badges.dmi' + ) + icon_state = null + on_rolled_down = ACCESSORY_ROLLED_NONE + w_class = ITEM_SIZE_TINY + slot = ACCESSORY_SLOT_INSIGNIA + sprite_sheets = list( + SPECIES_UNATHI = 'packs/factions/scga/species/badges_unathi.dmi' + ) + +/obj/item/clothing/accessory/scga_badge/get_fibers() + return null + + +/obj/item/clothing/accessory/scga_badge/enlisted + name = "pin badge, SCGA Enlisted" + desc = "A shiny little pin badge denoting qualification as a solar army enlistedman." + icon_state = "enlisted" + overlay_state = "enlisted_worn" + + +/obj/item/clothing/accessory/scga_badge/officer + name = "pin badge, SCGA Officer" + desc = "A shiny little pin badge denoting qualification as a solar army officer." + icon_state = "officer" + overlay_state = "officer_worn" diff --git a/packs/factions/scga/badges.dmi b/packs/factions/scga/badges.dmi new file mode 100644 index 0000000000000..6c7a2fb184394 Binary files /dev/null and b/packs/factions/scga/badges.dmi differ diff --git a/packs/factions/scga/clothing.dm b/packs/factions/scga/clothing.dm new file mode 100644 index 0000000000000..10b7040ae3b2d --- /dev/null +++ b/packs/factions/scga/clothing.dm @@ -0,0 +1,486 @@ + +//Main Clothing +/obj/item/clothing/under/scga + abstract_type = /obj/item/clothing/under/scga + name = "base uniform, SCGA" + desc = "You should not see this." + icon = 'packs/factions/scga/clothing.dmi' + item_icons = list( + slot_w_uniform_str = 'packs/factions/scga/clothing.dmi' + ) + armor = list( + melee = ARMOR_MELEE_MINOR, + energy = ARMOR_BALLISTIC_MINOR + ) + sprite_sheets = list( + SPECIES_UNATHI = 'packs/factions/scga/species/clothing_unathi.dmi' + ) + + +/obj/item/clothing/under/scga/pt + name = "physical training uniform, SCGA" + desc = "A flexible set of black shirt and pants. Part of the solar army physical training uniform." + icon_state = "under_pt" + item_state_slots = list( + slot_l_hand_str = "under_pt_held_l", + slot_r_hand_str = "under_pt_held_r", + slot_w_uniform_str = "under_pt_worn" + ) + + +/obj/item/clothing/under/scga/fatigues + name = "standard fatigues, SCGA" + desc = "A loose set of green tank-top and brown short-pants. Part of the solar army general off-duty uniform." + icon_state = "under_fatigues" + item_state_slots = list( + slot_l_hand_str = "under_fatigues_held_l", + slot_r_hand_str = "under_fatigues_held_r", + slot_w_uniform_str = "under_fatigues_worn" + ) + body_parts_covered = FULL_TORSO + + +/obj/item/clothing/under/scga/utility + name = "utility uniform, SCGA" + desc = "A green, durable utility jumpsuit. Belonging to the solar army uniform." + icon_state = "under_utility" + item_state_slots = list( + slot_l_hand_str = "under_utility_held_l", + slot_r_hand_str = "under_utility_held_r", + slot_w_uniform_str = "under_utility_worn" + ) + + +/obj/item/clothing/under/scga/utility/tan + name = "tan utility uniform, SCGA" + desc = "A tan, durable utility jumpsuit. Belonging to the solar army uniform." + icon_state = "under_utility_tan" + item_state_slots = list( + slot_l_hand_str = "under_utility_tan_held_l", + slot_r_hand_str = "under_utility_tan_held_r", + slot_w_uniform_str = "under_utility_tan_worn" + ) + + +/obj/item/clothing/under/scga/utility/urban + name = "urban utility uniform, SCGA" + desc = "A grey, durable utility jumpsuit. Belonging to the solar army utility uniform." + icon_state = "under_utility_urban" + item_state_slots = list( + slot_l_hand_str = "under_utility_urban_held_l", + slot_r_hand_str = "under_utility_urban_held_r", + slot_w_uniform_str = "under_utility_urban_worn" + ) + + +/obj/item/clothing/under/scga/service + name = "service uniform, SCGA" + desc = "A slimming brown service shirt and green pants. Belonging to the solar army service uniform." + icon_state = "under_service" + item_state_slots = list( + slot_l_hand_str = "under_service_held_l", + slot_r_hand_str = "under_service_held_r", + slot_w_uniform_str = "under_service_worn" + ) + + +/obj/item/clothing/under/scga/service/skirt + name = "service skirt uniform, SCGA" + desc = "A slimming brown service shirt and green skirt. Belonging to the solar army service uniform." + icon_state = "under_service_skirt" + item_state_slots = list( + slot_l_hand_str = "under_service_skirt_held_l", + slot_r_hand_str = "under_service_skirt_held_r", + slot_w_uniform_str = "under_service_skirt_worn" + ) + + +/obj/item/clothing/under/scga/service_command + name = "service uniform, SCGA" + desc = "A slimming brown service shirt and green pants with beige streaks, for senior officers. Belonging to the solar army command service uniform." + icon_state = "under_command" + item_state_slots = list( + slot_l_hand_str = "under_command_held_l", + slot_r_hand_str = "under_command_held_r", + slot_w_uniform_str = "under_command_worn" + ) + + +/obj/item/clothing/under/scga/service_command/skirt + name = "service skirt uniform, SCGA" + desc = "A slimming brown service shirt and green skirt with beige streaks, for senior officers. Belonging to the solar army command service uniform." + icon_state = "under_command_skirt" + item_state_slots = list( + slot_l_hand_str = "under_command_skirt_held_l", + slot_r_hand_str = "under_command_skirt_held_r", + slot_w_uniform_str = "under_command_skirt_worn" + ) + + +/obj/item/clothing/under/scga/dress + name = "dress uniform, SCGA" + desc = "A classy brown shirt and black dress pants. Part of the solar army dress uniform." + icon_state = "under_dress" + item_state_slots = list( + slot_l_hand_str = "under_dress_held_l", + slot_r_hand_str = "under_dress_held_r", + slot_w_uniform_str = "under_dress_worn" + ) + + +/obj/item/clothing/under/scga/dress/skirt + name = "dress skirt uniform, SCGA" + desc = "A classy brown shirt and black dress skirt. Part of the solar army dress uniform." + icon_state = "under_dress_skirt" + item_state_slots = list( + slot_l_hand_str = "under_dress_skirt_held_l", + slot_r_hand_str = "under_dress_skirt_held_r", + slot_w_uniform_str = "under_dress_skirt_worn" + ) + +/obj/item/clothing/under/scga/dress_command + name = "dress uniform, SCGA" + desc = "A classy brown shirt and black dress pants with gold streaks, for senior officers. Part of the solar army command dress uniform." + icon_state = "under_dress_command" + item_state_slots = list( + slot_l_hand_str = "under_dress_command_held_l", + slot_r_hand_str = "under_dress_command_held_r", + slot_w_uniform_str = "under_dress_command_worn" + ) + +/obj/item/clothing/under/scga/dress_command/skirt + name = "dress skirt uniform, SCGA" + desc = "A classy brown shirt and black dress skirt with gold streaks, for senior officers. Part of the solar army command dress uniform." + icon_state = "under_dress_command_skirt" + item_state_slots = list( + slot_l_hand_str = "under_dress_command_skirt_held_l", + slot_r_hand_str = "under_dress_command_skirt_held_r", + slot_w_uniform_str = "under_dress_command_skirt_worn" + ) + + +//Over Clothing +/obj/item/clothing/suit/scga + abstract_type = /obj/item/clothing/suit/scga + name = "base jacket, SCGA" + desc = "You should not see this." + icon = 'packs/factions/scga/clothing.dmi' + item_icons = list( + slot_wear_suit_str = 'packs/factions/scga/clothing.dmi' + ) + valid_accessory_slots = list( + ACCESSORY_SLOT_RANK, + ACCESSORY_SLOT_INSIGNIA, + ACCESSORY_SLOT_MEDAL + ) + allowed = list() + + +/obj/item/clothing/suit/scga/hooded/wintercoat + name = "utility wintercoat, SCGA" + desc = "A comfortable winter-coat in green. Part of the solar army utility uniform." + icon_state = "suit_wintercoat" + item_state_slots = list( + slot_l_hand_str = "suit_wintercoat_held_l", + slot_r_hand_str = "suit_wintercoat_held_r", + slot_wear_suit_str = "suit_wintercoat_worn" + ) + accessories = list( + /obj/item/clothing/accessory/storage/pockets, + /obj/item/clothing/accessory/scga_badge/enlisted + ) + + +/obj/item/clothing/suit/scga/service + name = "service jacket, SCGA" + desc = "A rugged green service over-jacket. Part of the solar army service uniform for enlisted." + icon_state = "suit_service" + item_state_slots = list( + slot_l_hand_str = "suit_service_held_l", + slot_r_hand_str = "suit_service_held_r", + slot_wear_suit_str = "suit_service_worn" + ) + accessories = list( + /obj/item/clothing/accessory/storage/pockets, + /obj/item/clothing/accessory/scga_badge/enlisted + ) + + +/obj/item/clothing/suit/scga/service_officer + name = "service jacket, SCGA" + desc = "A rugged green service over-jacket. Part of the solar army service uniform for officers." + icon_state = "suit_service_officer" + item_state_slots = list( + slot_l_hand_str = "suit_service_officer_held_l", + slot_r_hand_str = "suit_service_officer_held_r", + slot_wear_suit_str = "suit_service_officer_worn" + ) + accessories = list( + /obj/item/clothing/accessory/storage/pockets, + /obj/item/clothing/accessory/scga_badge/officer + ) + + +/obj/item/clothing/suit/scga/dress + name = "dress jacket, SCGA" + desc = "A strapping dress jacket. Part of the solar army dress uniform." + icon_state = "suit_dress" + item_state_slots = list( + slot_l_hand_str = "suit_dress_held_l", + slot_r_hand_str = "suit_dress_held_r", + slot_wear_suit_str = "suit_dress_worn" + ) + + +/obj/item/clothing/suit/scga/dress_command + name = "dress jacket, SCGA" + desc = "A strapping dress jacket. Part of the solar army dress uniform for senior officers." + icon_state = "suit_dress_command" + item_state_slots = list( + slot_l_hand_str = "suit_dress_command_held_l", + slot_r_hand_str = "suit_dress_command_held_r", + slot_wear_suit_str = "suit_dress_command_worn" + ) + + +//Gloves +/obj/item/clothing/gloves/scga + abstract_type = /obj/item/clothing/gloves/scga + name = "base gloves, SCGA" + desc = "You should not see this." + icon = 'packs/factions/scga/clothing.dmi' + item_icons = list( + slot_gloves_str = 'packs/factions/scga/clothing.dmi' + ) + sprite_sheets = list() + + +/obj/item/clothing/gloves/scga/duty + name = "duty gloves, SCGA" + desc = "Tough, brown duty gloves for the solar army personnel. Complete with reinforced knuckle-guards." + icon_state = "gloves_utility" + item_state_slots = list( + slot_l_hand_str = "gloves_utility_held_l", + slot_r_hand_str = "gloves_utility_held_r", + slot_gloves_str = "gloves_utility_worn" + ) + + +//Shoes +/obj/item/clothing/shoes/scga + abstract_type = /obj/item/clothing/shoes/scga + name = "base shoes, SCGA" + desc = "You should not see this." + icon = 'packs/factions/scga/clothing.dmi' + item_icons = list( + slot_shoes_str = 'packs/factions/scga/clothing.dmi' + ) + sprite_sheets = list() + + +/obj/item/clothing/shoes/scga/utility + name = "duty boots, SCGA" + desc = "Hardy, strong soled boots in jungle-beige camouflage configuration. Part of the solar army uniform." + icon_state = "boots_utility" + item_state_slots = list( + slot_l_hand_str = "boots_utility_held_l", + slot_r_hand_str = "boots_utility_held_r", + slot_shoes_str = "boots_utility_worn" + ) + armor = list( + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MINOR, + laser = ARMOR_LASER_MINOR, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED, + bio = ARMOR_BIO_MINOR + ) + siemens_coefficient = 0.7 + + +/obj/item/clothing/shoes/scga/utility/tan + name = "tan duty boots, SCGA" + desc = "Hardy, strong soled boots in dusty-tan camouflage configuration. Part of the solar army uniform." + icon_state = "boots_utility_tan" + item_state_slots = list( + slot_l_hand_str = "boots_utility_tan_held_l", + slot_r_hand_str = "boots_utility_tan_held_r", + slot_shoes_str = "boots_utility_tan_worn" + ) + + +/obj/item/clothing/shoes/scga/dress + name = "dress shoes, SCGA" + desc = "Flat, shiny dress shoes belonging to the solar army service and dress uniforms." + icon_state = "shoes_dress" + item_state_slots = list( + slot_l_hand_str = "shoes_dress_held_l", + slot_r_hand_str = "shoes_dress_held_r", + slot_shoes_str = "shoes_dress_worn" + ) + + +//Hats +/obj/item/clothing/head/scga + abstract_type = /obj/item/clothing/head/scga + name = "base hat, SCGA" + desc = "You should not see this." + icon = 'packs/factions/scga/clothing.dmi' + item_icons = list( + slot_head_str = 'packs/factions/scga/clothing.dmi' + ) + sprite_sheets = list() + + +/obj/item/clothing/head/scga/beret + name = "tan beret, SCGA" + desc = "A tan beret denoting service in the SCG Army Diplomatic Security Group. Part of the solar army utility and service uniform." + icon_state = "hat_beret" + item_state_slots = list( + slot_l_hand_str = "hat_beret_held_l", + slot_r_hand_str = "hat_beret_held_r", + slot_head_str = "hat_beret_worn" + ) + + +/obj/item/clothing/head/scga/utility + name = "utility cover, SCGA" + desc = "A stern, green utility cover. Part of the solar army utility uniform." + icon_state = "hat_utility" + item_state_slots = list( + slot_l_hand_str = "hat_utility_held_l", + slot_r_hand_str = "hat_utility_held_r", + slot_head_str = "hat_utility_worn" + ) + + +/obj/item/clothing/head/scga/utility/tan + name = "tan utility cover, SCGA" + desc = "A stern, tan utility cover. Part of the solar army utility uniform." + icon_state = "hat_utility_tan" + item_state_slots = list( + slot_l_hand_str = "hat_utility_tan_held_l", + slot_r_hand_str = "hat_utility_tan_held_r", + slot_head_str = "hat_utility_tan_worn" + ) + + +/obj/item/clothing/head/scga/utility/urban + name = "urban utility cover, SCGA" + desc = "A stern, urban utility cover. Part of the solar army utility uniform." + icon_state = "hat_utility_urban" + item_state_slots = list( + slot_l_hand_str = "hat_utility_urban_held_l", + slot_r_hand_str = "hat_utility_urban_held_r", + slot_head_str = "hat_utility_urban_worn" + ) + + +/obj/item/clothing/head/scga/utility/ushanka + name = "ushanka hat, SCGA" + desc = "A comfy, padded ushanka hat. Part of the solar army utility uniform." + icon_state = "hat_ushanka" + item_state_slots = list( + slot_l_hand_str = "hat_ushanka_held_l", + slot_r_hand_str = "hat_ushanka_held_r", + slot_head_str = "hat_ushanka_worn" + ) + + +/obj/item/clothing/head/scga/utility/ushanka/green + name = "ushanka hat, SCGA" + desc = "A comfy, padded ushanka hat in green. Part of the solar army utility uniform." + icon_state = "hat_ushanka_green" + item_state_slots = list( + slot_l_hand_str = "hat_ushanka_green_held_l", + slot_r_hand_str = "hat_ushanka_green_held_r", + slot_head_str = "hat_ushanka_green_worn" + ) + + +/obj/item/clothing/head/scga/utility/drill + name = "drill hat, SCGA" + desc = "A firm, green drill hat for non-commissioned officers. Part of the solar army utility and service uniform." + icon_state = "hat_drill" + item_state_slots = list( + slot_l_hand_str = "hat_drill_held_l", + slot_r_hand_str = "hat_drill_held_r", + slot_head_str = "hat_drill_worn" + ) + + +/obj/item/clothing/head/scga/service/garrison + name = "garrison cap, SCGA" + desc = "A peaked garrison cap for enlisted. Part of the solar army service uniform." + icon_state = "hat_garrison" + item_state_slots = list( + slot_l_hand_str = "hat_garrison_held_l", + slot_r_hand_str = "hat_garrison_held_r", + slot_head_str = "hat_garrison_worn" + ) + + +/obj/item/clothing/head/scga/service/garrison_officer + name = "garrison cap, SCGA" + desc = "A peaked garrison cap for officers. Part of the solar army service uniform." + icon_state = "hat_garrison_officer" + item_state_slots = list( + slot_l_hand_str = "hat_garrison_officer_held_l", + slot_r_hand_str = "hat_garrison_officer_held_r", + slot_head_str = "hat_garrison_officer_worn" + ) + + +/obj/item/clothing/head/scga/service/wheel + name = "service wheel cover, SCGA" + desc = "A rounded wheel cover for officers. Part of the solar army service uniform." + icon_state = "hat_wheel" + item_state_slots = list( + slot_l_hand_str = "hat_wheel_held_l", + slot_r_hand_str = "hat_wheel_held_r", + slot_head_str = "hat_wheel_worn" + ) + + +/obj/item/clothing/head/scga/service/wheel_command + name = "service wheel cover, SCGA" + desc = "A rounded wheel cover for senior officers. Part of the solar army service uniform." + icon_state = "hat_wheel_command" + item_state_slots = list( + slot_l_hand_str = "hat_wheel_command_held_l", + slot_r_hand_str = "hat_wheel_command_held_r", + slot_head_str = "hat_wheel_command_worn" + ) + + +/obj/item/clothing/head/scga/dress/garrison + name = "dress garrison cap, SCGA" + desc = "A white, peaked garrison cap for enlisted. Part of the solar army dress uniform." + icon_state = "hat_dress_garrison" + item_state_slots = list( + slot_l_hand_str = "hat_dress_garrison_held_l", + slot_r_hand_str = "hat_dress_garrison_held_r", + slot_head_str = "hat_dress_garrison_worn" + ) + + +/obj/item/clothing/head/scga/dress/wheel + name = "dress wheel cover, SCGA" + desc = "A white, rounded wheel cover for officers. Part of the solar army dress uniform." + icon_state = "hat_dress_wheel" + item_state_slots = list( + slot_l_hand_str = "hat_dress_wheel_held_l", + slot_r_hand_str = "hat_dress_wheel_held_r", + slot_head_str = "hat_dress_wheel_worn" + ) + + +/obj/item/clothing/head/scga/dress/wheel_command + name = "dress wheel cover, SCGA" + desc = "A white, rounded wheel cover for senior officers. Part of the solar army dress uniform." + icon_state = "hat_dress_wheel_command" + item_state_slots = list( + slot_l_hand_str = "hat_dress_wheel_command_held_l", + slot_r_hand_str = "hat_dress_wheel_command_held_r", + slot_head_str = "hat_dress_wheel_command_worn" + ) diff --git a/packs/factions/scga/clothing.dmi b/packs/factions/scga/clothing.dmi new file mode 100644 index 0000000000000..81e36a4699a8f Binary files /dev/null and b/packs/factions/scga/clothing.dmi differ diff --git a/packs/factions/scga/coins.dm b/packs/factions/scga/coins.dm new file mode 100644 index 0000000000000..2eee8a553b60f --- /dev/null +++ b/packs/factions/scga/coins.dm @@ -0,0 +1,15 @@ +/obj/item/material/coin/challenge/scga + abstract_type = /obj/item/material/coin/challenge/scga + icon = 'packs/factions/scga/coins.dmi' + icon_state = "error" + + +/obj/item/material/coin/challenge/scga/army + default_material = MATERIAL_BRONZE + name = "army challenge coin" + icon_state = "army" + desc = {"\ + A challenge coin distributed by the SCG Army. On the \ + front is the insignia of the Army, and on the back is the \ + emblem of the SCG inscribed with various dates.\ + "} diff --git a/packs/factions/scga/coins.dmi b/packs/factions/scga/coins.dmi new file mode 100644 index 0000000000000..38f8f8ee425ab Binary files /dev/null and b/packs/factions/scga/coins.dmi differ diff --git a/packs/factions/scga/faction.dm b/packs/factions/scga/faction.dm new file mode 100644 index 0000000000000..e84cab0e02958 --- /dev/null +++ b/packs/factions/scga/faction.dm @@ -0,0 +1,272 @@ +/datum/mil_branch/scga + name = "Sol Central Government Army" + name_short = "SCGA" + email_domain = "army.mil.scg" + assistant_job = null + min_skill = list( + SKILL_HAULING = SKILL_TRAINED, + SKILL_WEAPONS = SKILL_BASIC, + SKILL_COMBAT = SKILL_BASIC + ) + + rank_types = list( + /datum/mil_rank/scga/e1, + /datum/mil_rank/scga/e3, + /datum/mil_rank/scga/e4, + /datum/mil_rank/scga/e5, + /datum/mil_rank/scga/e6, + /datum/mil_rank/scga/e7, + /datum/mil_rank/scga/e8, + /datum/mil_rank/scga/e8_alt, + /datum/mil_rank/scga/e9, + /datum/mil_rank/scga/e9_alt1, + /datum/mil_rank/scga/e9_alt2, + /datum/mil_rank/scga/o1, + /datum/mil_rank/scga/o2, + /datum/mil_rank/scga/o3, + /datum/mil_rank/scga/o4, + /datum/mil_rank/scga/o5, + /datum/mil_rank/scga/o6, + /datum/mil_rank/scga/o7, + /datum/mil_rank/scga/o8, + /datum/mil_rank/scga/o9, + /datum/mil_rank/scga/o10, + /datum/mil_rank/scga/o10_alt + ) + + spawn_rank_types = list( + /datum/mil_rank/scga/e1, + /datum/mil_rank/scga/e3, + /datum/mil_rank/scga/e4, + /datum/mil_rank/scga/e5, + /datum/mil_rank/scga/e6, + /datum/mil_rank/scga/e7, + /datum/mil_rank/scga/e8, + /datum/mil_rank/scga/e8_alt, + /datum/mil_rank/scga/e9, + /datum/mil_rank/scga/e9_alt1, + /datum/mil_rank/scga/e9_alt2, + /datum/mil_rank/scga/o1, + /datum/mil_rank/scga/o2, + /datum/mil_rank/scga/o3, + /datum/mil_rank/scga/o4, + /datum/mil_rank/scga/o5, + /datum/mil_rank/scga/o6, + /datum/mil_rank/scga/o7, + /datum/mil_rank/scga/o8, + /datum/mil_rank/scga/o9, + /datum/mil_rank/scga/o10, + /datum/mil_rank/scga/o10_alt + ) + + +/datum/mil_branch/scga/New() + rank_types = subtypesof(/datum/mil_rank/scga) + ..() + + +/datum/mil_rank/scga/e1 + name = "Private" + name_short = "Pvt" + accessory = list( + /obj/item/clothing/accessory/scga_rank/e1 + ) + sort_order = 10 + + +/datum/mil_rank/scga/e2 + name = "Private Second Class" + name_short = "Pv2" + accessory = list( + /obj/item/clothing/accessory/scga_rank/e2 + ) + sort_order = 20 + + +/datum/mil_rank/scga/e3 + name = "Private First Class" + name_short = "PFC" + accessory = list( + /obj/item/clothing/accessory/scga_rank/e3 + ) + sort_order = 30 + + +/datum/mil_rank/scga/e4 + name = "Corporal" + name_short = "Cpl" + accessory = list( + /obj/item/clothing/accessory/scga_rank/e4 + ) + sort_order = 40 + + +/datum/mil_rank/scga/e5 + name = "Sergeant" + name_short = "Sgt" + accessory = list( + /obj/item/clothing/accessory/scga_rank/e5 + ) + sort_order = 50 + + +/datum/mil_rank/scga/e6 + name = "Staff Sergeant" + name_short = "SSgt" + accessory = list( + /obj/item/clothing/accessory/scga_rank/e6 + ) + sort_order = 60 + + +/datum/mil_rank/scga/e7 + name = "Sergeant First Class" + name_short = "SFC" + accessory = list( + /obj/item/clothing/accessory/scga_rank/e7 + ) + sort_order = 70 + + +/datum/mil_rank/scga/e8 + name = "Master Sergeant" + name_short = "MSgt" + accessory = list( + /obj/item/clothing/accessory/scga_rank/e8 + ) + sort_order = 80 + + +/datum/mil_rank/scga/e8_alt + name = "First Sergeant" + name_short = "1Sgt" + accessory = list( + /obj/item/clothing/accessory/scga_rank/e8_alt + ) + sort_order = 90 + + +/datum/mil_rank/scga/e9 + name = "Sergeant Major" + name_short = "SgtM" + accessory = list( + /obj/item/clothing/accessory/scga_rank/e9 + ) + sort_order = 100 + + +/datum/mil_rank/scga/e9_alt1 + name = "Command Sergeant Major" + name_short = "CSM" + accessory = list( + /obj/item/clothing/accessory/scga_rank/e9_alt1 + ) + sort_order = 110 + + +/datum/mil_rank/scga/e9_alt2 + name = "Sergeant Major of the Army" + name_short = "SMA" + accessory = list( + /obj/item/clothing/accessory/scga_rank/e9_alt2 + ) + sort_order = 120 + + +/datum/mil_rank/scga/o1 + name = "Second Lieutenant" + name_short = "2Lt" + accessory = list( + /obj/item/clothing/accessory/scga_rank/o1 + ) + sort_order = 130 + + +/datum/mil_rank/scga/o2 + name = "First Lieutenant" + name_short = "1Lt" + accessory = list( + /obj/item/clothing/accessory/scga_rank/o2 + ) + sort_order = 140 + + +/datum/mil_rank/scga/o3 + name = "Captain" + name_short = "Cpt" + accessory = list( + /obj/item/clothing/accessory/scga_rank/o3 + ) + sort_order = 150 + + +/datum/mil_rank/scga/o4 + name = "Major" + name_short = "Mjr" + accessory = list( + /obj/item/clothing/accessory/scga_rank/o4 + ) + sort_order = 160 + + +/datum/mil_rank/scga/o5 + name = "Lieutenant Colonel" + name_short = "LtC" + accessory = list( + /obj/item/clothing/accessory/scga_rank/o5 + ) + sort_order = 170 + + +/datum/mil_rank/scga/o6 + name = "Colonel" + name_short = "Col" + accessory = list( + /obj/item/clothing/accessory/scga_rank/o6 + ) + sort_order = 180 + + +/datum/mil_rank/scga/o7 + name = "Brigadier General" + name_short = "BrgG" + accessory = list( + /obj/item/clothing/accessory/scga_rank/o7 + ) + sort_order = 190 + + +/datum/mil_rank/scga/o8 + name = "Major General" + name_short = "MjrG" + accessory = list( + /obj/item/clothing/accessory/scga_rank/o8 + ) + sort_order = 200 + + +/datum/mil_rank/scga/o9 + name = "Lieutenant General" + name_short = "LtG" + accessory = list( + /obj/item/clothing/accessory/scga_rank/o9 + ) + sort_order = 210 + + +/datum/mil_rank/scga/o10 + name = "General" + name_short = "Gen" + accessory = list( + /obj/item/clothing/accessory/scga_rank/o10 + ) + sort_order = 220 + + +/datum/mil_rank/scga/o10_alt + name = "Field-Marshal" + name_short = "FldM" + accessory = list( + /obj/item/clothing/accessory/scga_rank/o10_alt + ) + sort_order = 230 diff --git a/packs/factions/scga/loadout.dm b/packs/factions/scga/loadout.dm new file mode 100644 index 0000000000000..288b57330d586 --- /dev/null +++ b/packs/factions/scga/loadout.dm @@ -0,0 +1,5 @@ +/datum/gear/shoes/boots/scga/New() + var/boots = list() + boots += /obj/item/clothing/shoes/scga/utility + boots += /obj/item/clothing/shoes/scga/utility/tan + ..(boots) diff --git a/packs/factions/scga/misc.dm b/packs/factions/scga/misc.dm new file mode 100644 index 0000000000000..f192dc6a555c2 --- /dev/null +++ b/packs/factions/scga/misc.dm @@ -0,0 +1,49 @@ +/obj/item/storage/box/large/scga_ranks + name = "enlisted rank box, SCGA" + startswith = list( + /obj/item/clothing/accessory/scga_rank/e1, + /obj/item/clothing/accessory/scga_rank/e3, + /obj/item/clothing/accessory/scga_rank/e4, + /obj/item/clothing/accessory/scga_rank/e5, + /obj/item/clothing/accessory/scga_rank/e6, + /obj/item/clothing/accessory/scga_rank/e7, + /obj/item/clothing/accessory/scga_rank/e8, + /obj/item/clothing/accessory/scga_rank/e8_alt, + /obj/item/clothing/accessory/scga_rank/e9, + /obj/item/clothing/accessory/scga_rank/e9_alt1, + /obj/item/clothing/accessory/scga_rank/e9_alt2 + ) + + +/obj/item/storage/box/large/scga_ranks_officer + name = "officer rank box, SCGA" + startswith = list( + /obj/item/clothing/accessory/scga_rank/o1, + /obj/item/clothing/accessory/scga_rank/o2, + /obj/item/clothing/accessory/scga_rank/o3, + /obj/item/clothing/accessory/scga_rank/o4, + /obj/item/clothing/accessory/scga_rank/o5, + /obj/item/clothing/accessory/scga_rank/o6, + /obj/item/clothing/accessory/scga_rank/o7, + /obj/item/clothing/accessory/scga_rank/o8, + /obj/item/clothing/accessory/scga_rank/o9, + /obj/item/clothing/accessory/scga_rank/o10, + /obj/item/clothing/accessory/scga_rank/o10_alt + ) + + +/obj/item/storage/box/scga_badges + name = "badge box, SCGA" + startswith = list( + /obj/item/clothing/accessory/scga_badge/enlisted, + /obj/item/clothing/accessory/scga_badge/officer + ) + + +/obj/item/storage/backpack/dufflebag/scga_accessories + startswith = list( + /obj/item/storage/box/large/scga_ranks, + /obj/item/storage/box/large/scga_ranks_officer, + /obj/item/storage/box/scga_badges, + /obj/item/material/coin/challenge/scga/army + ) diff --git a/packs/factions/scga/outfits.dm b/packs/factions/scga/outfits.dm new file mode 100644 index 0000000000000..eb26cfa27d6bd --- /dev/null +++ b/packs/factions/scga/outfits.dm @@ -0,0 +1,137 @@ +/singleton/hierarchy/outfit/scga + hierarchy_type = /singleton/hierarchy/outfit/scga + flags = OUTFIT_RESET_EQUIPMENT | OUTFIT_ADJUSTMENT_ALL_SKIPS + l_ear = /obj/item/device/radio/headset/ert + l_hand = /obj/item/storage/backpack/dufflebag/scga_accessories + + +/singleton/hierarchy/outfit/scga/utility + name = "SCGA - Utility" + head = /obj/item/clothing/head/scga/utility + uniform = /obj/item/clothing/under/scga/utility + shoes = /obj/item/clothing/shoes/scga/utility + gloves = /obj/item/clothing/gloves/scga/duty + belt = /obj/item/storage/belt/general + back = /obj/item/storage/backpack/messenger/brown + + +/singleton/hierarchy/outfit/scga/utility/tan + name = "SCGA - Utility, Tan" + head = /obj/item/clothing/head/scga/utility/tan + uniform = /obj/item/clothing/under/scga/utility/tan + shoes = /obj/item/clothing/shoes/scga/utility/tan + gloves = /obj/item/clothing/gloves/scga/duty + belt = /obj/item/storage/belt/general + back = /obj/item/storage/backpack/messenger/brown + + +/singleton/hierarchy/outfit/scga/utility/urban + name = "SCGA - Utility, Urban" + head = /obj/item/clothing/head/scga/utility/urban + uniform = /obj/item/clothing/under/scga/utility/urban + shoes = /obj/item/clothing/shoes/scga/utility + gloves = /obj/item/clothing/gloves/scga/duty + belt = /obj/item/storage/belt/general + back = /obj/item/storage/backpack/messenger/black + + +/singleton/hierarchy/outfit/scga/enlisted_service + name = "SCGA - Enlisted Service" + head = /obj/item/clothing/head/scga/service/garrison + uniform = /obj/item/clothing/under/scga/service + suit = /obj/item/clothing/suit/scga/service + shoes = /obj/item/clothing/shoes/scga/dress + belt = /obj/item/storage/belt/general + + +/singleton/hierarchy/outfit/scga/enlisted_service_skirt + name = "SCGA - Enlisted Service (Skirt)" + head = /obj/item/clothing/head/scga/service/garrison + uniform = /obj/item/clothing/under/scga/service/skirt + suit = /obj/item/clothing/suit/scga/service + shoes = /obj/item/clothing/shoes/scga/dress + belt = /obj/item/storage/belt/general + + +/singleton/hierarchy/outfit/scga/enlisted_dress + name = "SCGA - Enlisted Dress" + head = /obj/item/clothing/head/scga/dress/garrison + uniform = /obj/item/clothing/under/scga/dress + suit = /obj/item/clothing/suit/scga/dress + shoes = /obj/item/clothing/shoes/scga/dress + + +/singleton/hierarchy/outfit/scga/enlisted_dress_skirt + name = "SCGA - Enlisted Dress (Skirt)" + head = /obj/item/clothing/head/scga/dress/garrison + uniform = /obj/item/clothing/under/scga/dress/skirt + suit = /obj/item/clothing/suit/scga/dress + shoes = /obj/item/clothing/shoes/scga/dress + + +/singleton/hierarchy/outfit/scga/officer_service + name = "SCGA - Officer Service" + head = /obj/item/clothing/head/scga/service/garrison_officer + uniform = /obj/item/clothing/under/scga/service + suit = /obj/item/clothing/suit/scga/service_officer + shoes = /obj/item/clothing/shoes/scga/dress + belt = /obj/item/storage/belt/general + + +/singleton/hierarchy/outfit/scga/officer_service_skirt + name = "SCGA - Officer Service (Skirt)" + head = /obj/item/clothing/head/scga/service/garrison_officer + uniform = /obj/item/clothing/under/scga/service/skirt + suit = /obj/item/clothing/suit/scga/service_officer + shoes = /obj/item/clothing/shoes/scga/dress + belt = /obj/item/storage/belt/general + + +/singleton/hierarchy/outfit/scga/officer_dress + name = "SCGA - Officer Dress" + head = /obj/item/clothing/head/scga/dress/wheel + uniform = /obj/item/clothing/under/scga/dress + suit = /obj/item/clothing/suit/scga/dress + shoes = /obj/item/clothing/shoes/scga/dress + + +/singleton/hierarchy/outfit/scga/officer_dress_skirt + name = "SCGA - Officer Dress (Skirt)" + head = /obj/item/clothing/head/scga/dress/wheel + uniform = /obj/item/clothing/under/scga/dress/skirt + suit = /obj/item/clothing/suit/scga/dress + shoes = /obj/item/clothing/shoes/scga/dress + + +/singleton/hierarchy/outfit/scga/command_service + name = "SCGA - Command Service" + head = /obj/item/clothing/head/scga/service/wheel_command + uniform = /obj/item/clothing/under/scga/service_command + suit = /obj/item/clothing/suit/scga/service_officer + shoes = /obj/item/clothing/shoes/scga/dress + belt = /obj/item/storage/belt/general + + +/singleton/hierarchy/outfit/scga/command_service_skirt + name = "SCGA - Command Service (Skirt)" + head = /obj/item/clothing/head/scga/service/wheel_command + uniform = /obj/item/clothing/under/scga/service_command/skirt + suit = /obj/item/clothing/suit/scga/service_officer + shoes = /obj/item/clothing/shoes/scga/dress + belt = /obj/item/storage/belt/general + + +/singleton/hierarchy/outfit/scga/command_dress + name ="SCGA - Command Dress" + head = /obj/item/clothing/head/scga/dress/wheel_command + uniform = /obj/item/clothing/under/scga/dress_command + suit = /obj/item/clothing/suit/scga/dress_command + shoes = /obj/item/clothing/shoes/scga/dress + + +/singleton/hierarchy/outfit/scga/command_dress_skirt + name ="SCGA - Command Dress (Skirt)" + head = /obj/item/clothing/head/scga/dress/wheel_command + uniform = /obj/item/clothing/under/scga/dress_command/skirt + suit = /obj/item/clothing/suit/scga/dress_command + shoes = /obj/item/clothing/shoes/scga/dress diff --git a/packs/factions/scga/ranks.dm b/packs/factions/scga/ranks.dm new file mode 100644 index 0000000000000..cc48e91642310 --- /dev/null +++ b/packs/factions/scga/ranks.dm @@ -0,0 +1,182 @@ +/obj/item/clothing/accessory/scga_rank + abstract_type = /obj/item/clothing/accessory/scga_rank + name = "base rank insignia, SCGA" + desc = "You should not see this." + icon = 'packs/factions/scga/ranks.dmi' + accessory_icons = list( + slot_w_uniform_str = 'packs/factions/scga/ranks.dmi', + slot_wear_suit_str = 'packs/factions/scga/ranks.dmi' + ) + icon_state = null + overlay_state = "error" + on_rolled_down = ACCESSORY_ROLLED_NONE + w_class = ITEM_SIZE_TINY + slot = ACCESSORY_SLOT_RANK + accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY + gender = PLURAL + sprite_sheets = list( + SPECIES_UNATHI = 'packs/factions/scga/species/ranks_unathi.dmi' + ) + + +/obj/item/clothing/accessory/scga_rank/get_fibers() + return null + + +/obj/item/clothing/accessory/scga_rank/e1 + name = "rank insignia, E1 Private" + desc = "Collar tabs denoting the SCGA E-1 rank of Private." + icon_state = "e" + overlay_state = "e_worn" + +/obj/item/clothing/accessory/scga_rank/e2 + name = "rank insignia, E2 Private Second Class" + desc = "Collar tabs denoting the SCGA E-2 rank of Private Second Class." + icon_state = "e" + overlay_state = "e_worn" + +/obj/item/clothing/accessory/scga_rank/e3 + name = "rank insignia, E3 Private First Class" + desc = "Collar tabs denoting the SCGA E-3 rank of Private First Class." + icon_state = "e" + overlay_state = "e_worn" + + +/obj/item/clothing/accessory/scga_rank/e4 + name = "rank insignia, E4 Corporal" + desc = "Collar tabs denoting the SCGA E-4 rank of Corporal." + icon_state = "e" + overlay_state = "e_worn" + + +/obj/item/clothing/accessory/scga_rank/e5 + name = "rank insignia, E5 Sergeant" + desc = "Collar tabs denoting the SCGA E-5 rank of Sergeant." + icon_state = "e" + overlay_state = "e_worn" + + +/obj/item/clothing/accessory/scga_rank/e6 + name = "rank insignia, E6 Staff Sergeant" + desc = "Collar tabs denoting the SCGA E-6 rank of Staff Sergeant." + icon_state = "e" + overlay_state = "e_worn" + + +/obj/item/clothing/accessory/scga_rank/e7 + name = "rank insignia, E7 Sergeant First Class" + desc = "Collar tabs denoting the SCGA E-7 rank of Sergeant First Class." + icon_state = "e" + overlay_state = "e_worn" + + +/obj/item/clothing/accessory/scga_rank/e8 + name = "rank insignia, E8 Master Sergeant" + desc = "Collar tabs denoting the SCGA E-8 rank of Master Sergeant." + icon_state = "e" + overlay_state = "e_worn" + + +/obj/item/clothing/accessory/scga_rank/e8_alt + name = "rank insignia, E8 First Sergeant" + desc = "Collar tabs denoting the SCGA E-8 rank of First Sergeant." + icon_state = "e" + overlay_state = "e_worn" + + +/obj/item/clothing/accessory/scga_rank/e9 + name = "rank insignia, E9 Sergeant Major" + desc = "Collar tabs denoting the SCGA E-9 rank of Sergeant Major." + icon_state = "e" + overlay_state = "e_worn" + + +/obj/item/clothing/accessory/scga_rank/e9_alt1 + name = "rank insignia, E9 Command Sergeant Major" + desc = "Collar tabs denoting the SCGA E-9 rank of Command Sergeant Major." + icon_state = "e" + overlay_state = "e_worn" + + +/obj/item/clothing/accessory/scga_rank/e9_alt2 + name = "rank insignia, E9 Sergeant Major of the Army" + desc = "Collar tabs denoting the SCGA E-9 rank of Sergeant Major of the Army." + icon_state = "e" + overlay_state = "e_worn" + + +/obj/item/clothing/accessory/scga_rank/o1 + name = "rank insignia, O1 Second Lieutenant" + desc = "Collar tabs denoting the SCGA O-1 rank of Second Lieutenant." + icon_state = "o" + overlay_state = "o_worn" + + +/obj/item/clothing/accessory/scga_rank/o2 + name = "rank insignia, O2 First Lieutenant" + desc = "Collar tabs denoting the SCGA O-2 rank of First Lieutenant." + icon_state = "o" + overlay_state = "o_worn" + + +/obj/item/clothing/accessory/scga_rank/o3 + name = "rank insignia, O3 Captain" + desc = "Collar tabs denoting the SCGA O-3 rank of Captain." + icon_state = "o" + overlay_state = "o_worn" + + +/obj/item/clothing/accessory/scga_rank/o4 + name = "rank insignia, O4 Major" + desc = "Collar tabs denoting the SCGA O-4 rank of Major." + icon_state = "o" + overlay_state = "o_worn" + + +/obj/item/clothing/accessory/scga_rank/o5 + name = "rank insignia, O5 Lieutenant Colonel" + desc = "Collar tabs denoting the SCGA O-5 rank of Lieutenant Colonel." + icon_state = "o" + overlay_state = "o_worn" + + +/obj/item/clothing/accessory/scga_rank/o6 + name = "rank insignia, O6 Colonel" + desc = "Collar tabs denoting the SCGA O-6 rank of Colonel." + icon_state = "o" + overlay_state = "o_worn" + + +/obj/item/clothing/accessory/scga_rank/o7 + name = "rank insignia, O7 Brigadier General" + desc = "Collar tabs denoting the SCGA O-7 rank of Brigadier General." + icon_state = "o_flag" + overlay_state = "o_flag_worn" + + +/obj/item/clothing/accessory/scga_rank/o8 + name = "rank insignia, O8 Major General" + desc = "Collar tabs denoting the SCGA O-8 rank of Major General." + icon_state = "o_flag" + overlay_state = "o_flag_worn" + + +/obj/item/clothing/accessory/scga_rank/o9 + name = "rank insignia, O9 Lieutenant General" + desc = "Collar tabs denoting the SCGA O-9 rank of Lieutenant General." + icon_state = "o_flag" + overlay_state = "o_flag_worn" + + +/obj/item/clothing/accessory/scga_rank/o10 + name = "rank insignia, O10 General" + desc = "Collar tabs denoting the SCGA O-10 rank of General." + icon_state = "o_flag" + overlay_state = "o_flag_worn" + + +/obj/item/clothing/accessory/scga_rank/o10_alt + name = "rank insignia, O10 Field-Marshal" + desc = "Collar tabs denoting the SCGA O-10 rank of Field-Marshal." + icon_state = "o_flag" + overlay_state = "o_flag_worn" diff --git a/packs/factions/scga/ranks.dmi b/packs/factions/scga/ranks.dmi new file mode 100644 index 0000000000000..ba749b0dbad4b Binary files /dev/null and b/packs/factions/scga/ranks.dmi differ diff --git a/packs/factions/scga/species/badges_unathi.dmi b/packs/factions/scga/species/badges_unathi.dmi new file mode 100644 index 0000000000000..3460853189f53 Binary files /dev/null and b/packs/factions/scga/species/badges_unathi.dmi differ diff --git a/packs/factions/scga/species/clothing_unathi.dmi b/packs/factions/scga/species/clothing_unathi.dmi new file mode 100644 index 0000000000000..e7d0d3590e531 Binary files /dev/null and b/packs/factions/scga/species/clothing_unathi.dmi differ diff --git a/packs/factions/scga/species/ranks_unathi.dmi b/packs/factions/scga/species/ranks_unathi.dmi new file mode 100644 index 0000000000000..ae47448fa3576 Binary files /dev/null and b/packs/factions/scga/species/ranks_unathi.dmi differ diff --git a/packs/factions/scga/tweaks.dm b/packs/factions/scga/tweaks.dm new file mode 100644 index 0000000000000..5a3e49858c725 --- /dev/null +++ b/packs/factions/scga/tweaks.dm @@ -0,0 +1,6 @@ +/obj/item/storage/wallet/Initialize() + . = ..() + contents_allowed |= list( + /obj/item/clothing/accessory/scga_badge, + /obj/item/clothing/accessory/scga_rank + ) diff --git a/packs/factions/scga/weapons.dm b/packs/factions/scga/weapons.dm new file mode 100644 index 0000000000000..1418928516b74 --- /dev/null +++ b/packs/factions/scga/weapons.dm @@ -0,0 +1,12 @@ +/obj/item/material/sword/replica/officersword/scga + name = "dress sword" + desc = "A polished sword issued to SCG Army NCOs." + icon_state = "sword" + item_state = "sword" + + +/obj/item/material/sword/replica/officersword/scga/officer + name = "dress sword" + desc = "A curved sword issued to SCG Army officers." + icon_state = "sword_officer" + item_state = "sword_officer" diff --git a/packs/factions/scga/weapons.dmi b/packs/factions/scga/weapons.dmi new file mode 100644 index 0000000000000..1a883c29a4fa5 Binary files /dev/null and b/packs/factions/scga/weapons.dmi differ diff --git a/packs/factions/scgec/_pack.dm b/packs/factions/scgec/_pack.dm new file mode 100644 index 0000000000000..f0e463e0223ee --- /dev/null +++ b/packs/factions/scgec/_pack.dm @@ -0,0 +1 @@ +#include "misc.dm" diff --git a/packs/factions/scgec/misc.dm b/packs/factions/scgec/misc.dm new file mode 100644 index 0000000000000..844005a8e2589 --- /dev/null +++ b/packs/factions/scgec/misc.dm @@ -0,0 +1,64 @@ +/obj/item/disk/astrodata + name = "astronomical data disk" + desc = "A disk with a wealth of astronomical data recorded." + icon = 'icons/obj/datadisks.dmi' + icon_state = "datadisk0" + item_state = "card-id" + w_class = ITEM_SIZE_SMALL + + +/obj/structure/sign/ecplaque + name = "\improper Expeditionary Directives" + desc = "A plaque with Expeditionary Corps logo etched in it." + icon = 'maps/torch/icons/obj/solgov-decals.dmi' + icon_state = "ecplaque" + var/directives = {"
    \ +

    1. Exploring the unknown is your Primary Mission\ +

    You are to look for land and resources that can be used by Humanity to advance and prosper. Explore. Document. Explain. Knowledge is the most valuable resource.

    \ +

    \ +

    2. Every member of the Expeditionary Corps is an explorer\ +

    Some are Explorers by rank or position, but everyone has to be one when duty calls. You should always expect being assigned to an expedition if needed. You have already volunteered when you signed up.

    \ +

    \ +

    3. Danger is a part of the mission - avoid, not run away\ +

    Keep your crew alive and hull intact, but remember - you are not here to sightsee. Dangers are obstacles to be cleared, not the roadblocks. Weigh risks carefully and keep your Primary Mission in mind.

    \ +

    \ +

    \ + "} + + +/obj/structure/sign/ecplaque/examine(mob/user) + . = ..() + . += SPAN_NOTICE("The founding principles of EC are written there: Expeditionary Directives") + + +/obj/structure/sign/ecplaque/CanUseTopic() + return STATUS_INTERACTIVE + + +/obj/structure/sign/ecplaque/OnTopic(href, href_list) + if (href_list["show_info"]) + to_chat(usr, directives) + return TOPIC_HANDLED + + +/obj/structure/sign/ecplaque/use_grab(obj/item/grab/grab, list/click_params) + if (!ishuman(grab.affecting)) + return ..() + if (grab.assailant.a_intent == I_HURT) + grab.assailant.setClickCooldown(grab.assailant.get_attack_speed(grab)) + grab.affecting.apply_damage(5, DAMAGE_BRUTE, BP_HEAD, used_weapon = src) + grab.assailant.visible_message( + SPAN_WARNING("\The [grab.assailant] smashes \the [grab.affecting] into \the [src] face-first!"), + SPAN_DANGER("You smash \the [grab.affecting] into \the [src] face-first!"), + exclude_mobs = list(grab.affecting) + ) + grab.affecting.show_message( + SPAN_DANGER("\The [grab.assailant] smashes you into \the [src] face-first!"), + VISIBLE_MESSAGE, + SPAN_DANGER("You feel your face being smashed into something!") + ) + playsound(src, 'sound/weapons/tablehit1.ogg', 50, TRUE) + grab.force_drop() + admin_attack_log(grab.assailant, grab.affecting, "educated victim on \the [src].", "Was educated on \the [src].", "used \a [src] to educate") + return TRUE + return ..() diff --git a/packs/infinity/__defines/guns.dm b/packs/infinity/__defines/guns.dm new file mode 100644 index 0000000000000..431624dabbaad --- /dev/null +++ b/packs/infinity/__defines/guns.dm @@ -0,0 +1,18 @@ +#define GUN_BULK_PISTOL 1 +#define GUN_BULK_REVOLVER 2 +#define GUN_BULK_SMG 3 +#define GUN_BULK_CARABINE 4 +//#define GUN_BULK_RIFLE 5 определено в оригинале ~bear1ake +#define GUN_BULK_SNIPER_RIFLE 6 +#define GUN_BULK_MACHINEGUN 7 + +#define CALIBER_PISTOL_TINY "5.6mmP" +//#define CALIBER_PISTOL "10mm" +#define CALIBER_PISTOL_FAST "5.7mmP" +//#define CALIBER_PISTOL_SMALL "7mm" +#define CALIBER_PISTOL_SMALL_MAGNUM "9mmR" +//#define CALIBER_PISTOL_MAGNUM "15mm" +//#define CALIBER_PISTOL_FLECHETTE "4mm" +#define CALIBER_PISTOL_BIG "11.4mmP" +#define CALIBER_PISTOL_BIG_MAGNUM "11.1mmR" +//#define CALIBER_PISTOL_ANTIQUE "~10mm" diff --git a/packs/infinity/_datums/reagents/experimental.dm b/packs/infinity/_datums/reagents/experimental.dm new file mode 100644 index 0000000000000..2775067df05ab --- /dev/null +++ b/packs/infinity/_datums/reagents/experimental.dm @@ -0,0 +1,131 @@ +#define RANDOM_REAGENT list(/datum/reagent/bicaridine, /datum/reagent/kelotane, /datum/reagent/dermaline,\ + /datum/reagent/dylovene, /datum/reagent/dexalin, /datum/reagent/dexalinp,\ + /datum/reagent/tricordrazine, /datum/reagent/tramadol, /datum/reagent/synaptizine) + +/datum/reagent/experimental //Father of all strange reagents + name = "A001" + taste_description = "slime" + taste_mult = 2 + description = "An experimental reagent. Causes heavy mutations. Don't smoke." + reagent_state = SOLID + color = "#a8a8a8" + +/datum/reagent/experimental/affect_touch(mob/living/carbon/M, removed) + if(prob(33)) + affect_blood(M, removed) + +/datum/reagent/experimental/affect_ingest(mob/living/carbon/M, removed) + if(prob(67)) + affect_blood(M, removed) + +/datum/reagent/experimental/affect_blood(mob/living/carbon/M, removed) + + if(M.isSynthetic()) + return + + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.species_flags & SPECIES_FLAG_NO_SCAN)) + return + + if(M.dna) + if(prob(removed * 0.1)) // Approx. one mutation per 10 injected/20 ingested/30 touching units + randmuti(M) + if(prob(98)) + randmutb(M) + else + randmutg(M) + domutcheck(M, null) + M.UpdateAppearance() + M.apply_damage(10 * removed, DAMAGE_RADIATION) + +/datum/reagent/rsh2 + name = "A002" + taste_description = "ash" + taste_mult = 2 + description = "You don't know what's it... Where's your test subject?" + reagent_state = SOLID + color = "#a8a8a8" + +/datum/reagent/rsh2/New() + ..() + name = "ER-[rand(9999)]" + +/datum/reagent/rsh2/affect_blood(mob/living/carbon/M, removed) + M.gib() + +/datum/reagent/rsh3 + name = "A003" + taste_description = "flour" + taste_mult = 2 + description = "You don't know what's it... Where's your test subject?" + reagent_state = SOLID + color = "#a8a8a8" + +/datum/reagent/rsh3/New() + ..() + name = "ER-[rand(9999)]" + +/datum/reagent/rsh3/affect_blood(mob/living/carbon/human/M, removed) + for(var/obj/item/organ/external/E in M.bad_external_organs) + if(E.status & ORGAN_BROKEN && E.damage < E.min_broken_damage) + E.mend_fracture() + to_chat(M, "You feel something mend itself inside your [E.name].") + return 1 + + +/datum/reagent/rsh4 + name = "A004" + taste_description = "milk" + taste_mult = 2 + description = "You don't know what's it... Where's your test subject?" + reagent_state = SOLID + color = "#a8a8a8" + +/datum/reagent/rsh4/New() + ..() + name = "ER-[rand(9999)]" + +/datum/reagent/rsh4/affect_blood(mob/living/carbon/human/M, removed) + if(M.gender != MALE) + to_chat(M, SPAN_NOTICE("Я чувствую себя... Странно. Мягкое, приятное тепло распространяется по всему моему телу, особенно по груди, почему-то заставляя её становиться... Легче? Меня немного пугает ощущение того, как тепло распространяется по моему паху...")) + M.gender = MALE + else + to_chat(M, SPAN_NOTICE("Я чувствую себя... Странно. Мягкое, приятное тепло распространяется по всему моему телу, особенно по груди, почему-то заставляя её тяжелеть... Меня немного пугает ощущение того, как тепло распространяется по моему паху...")) + M.gender = FEMALE + M.update_icon() + remove_self(volume) + return + + + +/datum/chemical_reaction/rsh2 + result = /datum/reagent/rsh2 + required_reagents = list(/datum/reagent/experimental = 1) + result_amount = 1 + +/datum/chemical_reaction/rsh2/New() + var/random_amount = pick(1,3) + required_reagents |= list(pick(RANDOM_REAGENT) = random_amount) + result_amount += random_amount + +/datum/chemical_reaction/rsh3 + result = /datum/reagent/rsh3 + required_reagents = list(/datum/reagent/experimental = 1, /datum/reagent/peridaxon = 1) + result_amount = 2 + +/datum/chemical_reaction/rsh3/New() + var/random_amount = pick(1,3) + required_reagents |= list(pick(RANDOM_REAGENT) = random_amount) + result_amount += random_amount + +/datum/chemical_reaction/rsh4 + result = /datum/reagent/rsh4 + required_reagents = list(/datum/reagent/experimental = 1, /datum/reagent/paracetamol = 1) + result_amount = 2 + +/datum/chemical_reaction/rsh4/New() + var/random_amount = pick(1,3) + required_reagents |= list(pick(RANDOM_REAGENT) = random_amount) + result_amount += random_amount + +#undef RANDOM_REAGENT diff --git a/packs/infinity/_helpers/colors.dm b/packs/infinity/_helpers/colors.dm new file mode 100644 index 0000000000000..ffc5b863afdec --- /dev/null +++ b/packs/infinity/_helpers/colors.dm @@ -0,0 +1,7 @@ +/proc/clamphex(hex, bmin, bmax=255) + . = hex + var/list/bgr = ReadRGB(hex) + if(length(bgr) == 3) + for(var/i in bgr) + i = clamp(i, bmin, bmax) + . = rgb(bgr[1], bgr[2], bgr[3]) diff --git a/packs/infinity/_pack.dm b/packs/infinity/_pack.dm new file mode 100644 index 0000000000000..db292e4dff234 --- /dev/null +++ b/packs/infinity/_pack.dm @@ -0,0 +1,68 @@ +#ifndef CONTENT_PACK_INFINITY +#define CONTENT_PACK_INFINITY + +// DEFINES +#include "__defines\guns.dm" + +// DATUMS +#include "_datums\reagents\experimental.dm" + +// HELPERS +#include "_helpers\colors.dm" + +// Interactions (including overriding) +#include "interactions\glup_down.dm" +#include "interactions\face_wash.dm" + +// Clothing +#include "clothing\head\berets.dm" +#include "clothing\head\head.dm" +#include "clothing\head\helmet.dm" +#include "clothing\accessories\armor.dm" +#include "clothing\accessories\badge.dm" +#include "clothing\accessories\other.dm" +#include "clothing\accessories\pins.dm" +#include "clothing\gloves\gloves.dm" +#include "clothing\suits\armor.dm" +#include "clothing\suits\under_bluebrig.dm" +#include "clothing\suits\suits.dm" +#include "clothing\shoes\shoes.dm" + +// Effects +#include "effects\paint.dm" + +// Items +#include "items\carpets.dm" +#include "items\chairs.dm" +#include "items\chemistry.dm" +#include "items\grown.dm" + +// Guns +#include "items\projectile\ammunition\boxes.dm" +#include "items\projectile\ammunition\bullets.dm" + +#include "items\projectile\guns\automatic.dm" +#include "items\projectile\guns\energy\laser_handmade.dm" + +#include "items\hookah.dm" + +// Machines +#include "machinery\computer.dm" +#include "machinery\heater.dm" +#include "machinery\machines.dm" +#include "machinery\rack.dm" +#include "machinery\lighting.dm" +#include "machinery\survival_pod.dm" +#include "machinery\scrap_compactor\scrap_compactor.dm" + +// Structures +#include "structures\barrier.dm" +#include "structures\chairs.dm" +#include "structures\curtains.dm" +#include "structures\holoplants.dm" +#include "structures\l3closets.dm" +#include "structures\ladder_mobile.dm" +#include "structures\signs.dm" +#include "structures\table_presets.dm" + +#endif diff --git a/packs/infinity/clothing/accessories/armor.dm b/packs/infinity/clothing/accessories/armor.dm new file mode 100644 index 0000000000000..e61baae0e6a26 --- /dev/null +++ b/packs/infinity/clothing/accessories/armor.dm @@ -0,0 +1,46 @@ +/obj/item/clothing/accessory/arm_guards/tactical + desc = "A pair of black arm pads reinforced with additional ablative coating. Attaches to a plate carrier." + armor = list(melee = 50, bullet = 50, laser = 60, energy = 35, bomb = 30, bio = 0, rad = 0) + +/obj/item/clothing/accessory/leg_guards/tactical + desc = "A pair of armored leg pads reinforced with additional ablative coating. Attaches to a plate carrier." + armor = list(melee = 50, bullet = 50, laser = 60, energy = 35, bomb = 30, bio = 0, rad = 0) + +/obj/item/clothing/accessory/armorplate/mainkraft/light + name = "light metal plate" + desc = "Thin homemade metal plate. Unlikely to protect from something strong, but it's better than nothing." + icon_state = "armor_light" + armor = list( + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_SMALL, + laser = ARMOR_LASER_MINOR, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_MINOR + ) + slowdown = 0.25 + +/obj/item/clothing/accessory/armorplate/mainkraft/medium + name = "medium metal plate" + desc = "Metal plate of medium thickness. Feels heavy. I hope it will be able to help." + icon_state = "armor_medium" + armor = list( + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_PISTOL - 10, + laser = ARMOR_LASER_SMALL, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED + ) + slowdown = 0.5 + +/obj/item/clothing/accessory/armorplate/mainkraft/heavy + name = "heavy metal plate" + desc = "A thick sheet of armor that can stop a bullet, it is a pity that as the plate is thick, so heavy." + icon_state = "armor_merc" + armor = list( + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_RESISTANT, + laser = ARMOR_LASER_MAJOR, + energy = ARMOR_ENERGY_RESISTANT, + bomb = ARMOR_BOMB_PADDED + ) + slowdown = 0.75 diff --git a/packs/infinity/clothing/accessories/badge.dm b/packs/infinity/clothing/accessories/badge.dm new file mode 100644 index 0000000000000..81b8f434d4986 --- /dev/null +++ b/packs/infinity/clothing/accessories/badge.dm @@ -0,0 +1,42 @@ +/obj/item/clothing/accessory/badge/dog_tags // non-solgov variant + name = "dog tags" + desc = "Plain identification tags made from a durable metal. They are stamped with a variety of informational details." + gender = PLURAL + icon_state = "tags" + icon = 'maps/torch/icons/obj/obj_accessories_solgov.dmi' + accessory_icons = list(slot_w_uniform_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi', slot_wear_suit_str = 'maps/torch/icons/mob/onmob_accessories_solgov.dmi') + badge_string = null + slot_flags = SLOT_MASK | SLOT_TIE + +/obj/item/clothing/accessory/badge/dog_tags/Initialize() + . = ..() + var/mob/living/carbon/human/H + H = get_holder_of_type(src, /mob/living/carbon/human) + if(H) + set_name(H.real_name) + set_desc(H) + +/obj/item/clothing/accessory/badge/dog_tags/attack_self(mob/living/carbon/human/user as mob) + .=..() + if(!badge_string) + var/confirm = alert("Set badges's faction as your own faction?", "Badge Choice", "Yes", "No") + if(confirm == "No") + var/choice = input(usr,"Choose your badge's faction","Badge Choice","") as text|null + if(!choice) + return + badge_string = choice + if(confirm == "Yes") + var/singleton/cultural_info/faction = user.get_cultural_value(TAG_FACTION) + badge_string = faction.name + to_chat(user, "[src]'s faction now is '[badge_string]'.") + +/obj/item/clothing/accessory/badge/dog_tags/set_desc(mob/living/carbon/human/H) + if(!istype(H)) + return + var/singleton/cultural_info/culture = H.get_cultural_value(TAG_RELIGION) + var/religion = culture ? culture.name : "Unset" + desc = "[initial(desc)]\nName: [H.real_name] ([H.get_species()])\nReligion: [religion]\nBlood type: [H.b_type]" + +/obj/item/clothing/accessory/badge/dog_tags/proc/loadout_setup(mob/M) + set_name(M.real_name) + set_desc(M) diff --git a/packs/infinity/clothing/accessories/other.dm b/packs/infinity/clothing/accessories/other.dm new file mode 100644 index 0000000000000..6e0e1aa438d22 --- /dev/null +++ b/packs/infinity/clothing/accessories/other.dm @@ -0,0 +1,14 @@ +/obj/item/clothing/accessory/storage/bandolier/armory/Initialize() + . = ..() + + for(var/i = 0, i < slots, i++) + new /obj/item/ammo_casing/shotgun/pellet(src) + +//Sprites from tgstation, specially for Parasoul's custom-item +/obj/item/clothing/accessory/necklace/talisman + name = "bone talisman" + desc = "A hunter's talisman, some say the old gods smile on those who wear it." + icon = CUSTOM_ITEM_OBJ + accessory_icons = list(slot_w_uniform_str = CUSTOM_ITEM_MOB, slot_wear_suit_str = CUSTOM_ITEM_MOB) + item_icons = list(slot_wear_mask_str = 'packs/infinity/icons/mob/onmob/onmob_accessories.dmi') + icon_state = "talisman-4" diff --git a/packs/infinity/clothing/accessories/pins.dm b/packs/infinity/clothing/accessories/pins.dm new file mode 100644 index 0000000000000..776f881c97189 --- /dev/null +++ b/packs/infinity/clothing/accessories/pins.dm @@ -0,0 +1,22 @@ +/obj/item/clothing/accessory/inf_pin + name = "NT pin" + desc = "A red Nanotrasen pin." + icon = 'packs/infinity/icons/obj/clothing/obj_accessories.dmi' + icon_state = "nt_r" + accessory_icons = list(slot_w_uniform_str = 'packs/infinity/icons/mob/onmob/onmob_accessories.dmi', slot_wear_suit_str = 'packs/infinity/icons/mob/onmob/onmob_accessories.dmi') + accessory_flags = ACCESSORY_REMOVABLE | ACCESSORY_HIGH_VISIBILITY + +/obj/item/clothing/accessory/inf_pin/ntblue + name = "NT pin" + desc = "A blue Nanotrasen pin." + icon_state = "nt_b" + +/obj/item/clothing/accessory/inf_pin/tccpin + name = "TCC pin" + desc = "A small TCC flag." + icon_state = "tcc" + +/obj/item/clothing/accessory/inf_pin/scgpin + name = "CSG pin" + desc = "A small CSG flag." + icon_state = "csg" diff --git a/packs/infinity/clothing/gloves/gloves.dm b/packs/infinity/clothing/gloves/gloves.dm new file mode 100644 index 0000000000000..5d7f87a24a7c5 --- /dev/null +++ b/packs/infinity/clothing/gloves/gloves.dm @@ -0,0 +1,25 @@ +/obj/item/clothing/gloves/daft_punk + name = "Daft Punk gloves" + desc = "DJs' most comfortable gloves." + icon = 'maps/sierra/icons/obj/clothing/obj_hands.dmi' + icon_override = 'maps/sierra/icons/mob/onmob/onmob_hands.dmi' + icon_state = "daft_gloves" + item_state = null + +/obj/item/clothing/gloves/wristwatch + name = "watch" + desc = "A wristwatch. This one is silver and EMP-resistance." + icon = 'maps/sierra/icons/obj/clothing/obj_hands.dmi' + item_icons = list(slot_gloves_str = 'maps/sierra/icons/mob/onmob/onmob_hands.dmi') + icon_state = "watch_black" + item_state = "watch_black" + +/obj/item/clothing/gloves/wristwatch/gold + name = "gold watch" + desc = "A wristwatch. This one is golden and in makes you feel like a boss." + icon_state = "watch_gold" + item_state = "watch_gold" + +/obj/item/clothing/gloves/wristwatch/examine(mob/user) + . = ..() + . += SPAN_NOTICE("It displays [stationtime2text()]") diff --git a/packs/infinity/clothing/head/berets.dm b/packs/infinity/clothing/head/berets.dm new file mode 100644 index 0000000000000..14f90bd8b7f01 --- /dev/null +++ b/packs/infinity/clothing/head/berets.dm @@ -0,0 +1,84 @@ +/obj/item/clothing/head/beret/infinity //just a subtype to don't override original one + name = "service beret" + desc = "A light green beret for workers in service department. Someone may confuse it with leafs or limes, though." + icon = 'maps/sierra/icons/obj/clothing/obj_head.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + icon_state = "service_beret" + +/obj/item/clothing/head/beret/infinity/hop + name = "head of personnel's beret" + desc = "A command-colored beret for the head of service department. Smells like good bureaucracy - papers, stumps and cases of money." + icon_state = "hop_beret" + +/obj/item/clothing/head/beret/infinity/medical + name = "medical beret" + desc = "A white beret with more white medical cross on it. Sterill as well as surgeon's bomber jacket." + icon_state = "medical_beret" + +/obj/item/clothing/head/beret/infinity/medical_cmo + name = "chief medical officer's beret" + desc = "A light blue beret for some for medical profeccional. The wearer is master in surgery, virology, chemistry, EMT and many more... But may be a bit rough in critical situation." + icon_state = "cmo_beret" + +/obj/item/clothing/head/beret/infinity/cargo + name = "cargo beret" + desc = "A brown beret for working joe of delivery department. Looks like hard work - smells like after one." + icon_state = "cargo_beret" + +/obj/item/clothing/head/beret/infinity/cargo_qm + name = "quartermaster's beret" + desc = "A brown beret of local cargo department head. The baron of crates, denied orders and contraband." + icon_state = "qm_beret" + +/obj/item/clothing/head/beret/infinity/engineer_ce + name = "chief engineer's beret" + desc = "A white beret for chief engineer. Looks like its designer didn't saw the chief's hard hat..." + icon_state = "ce_beret" + +/obj/item/clothing/head/beret/infinity/science + name = "science beret" + desc = "A white beret, emblazoned with purple insignia. Someone surely may well themself smarter while mixing gases in chamber with it on the head." + icon_state = "science_beret" + +/obj/item/clothing/head/beret/infinity/captain + name = "captain's beret" + desc = "A blue beret of the captain - colors are even more command than at HOP's beret. Stars and rank of navy fleet were removed by corporative machine." + icon_state = "captain_beret" + +/obj/item/clothing/head/beret/infinity/exploration + name = "exploration beret" + desc = "A black beret with purple insignia on it. Doesn't exactly look like what you need to go into space." + icon_state = "exploration_beret" + +/obj/item/clothing/head/HoS/dermal/beret + name = "commander's beret" + desc = "A stylish beret of forces commander. Has some armor layers, so, forget about stylish over armor - charge!" + icon_state = "beret_corporate_hos" + +/obj/item/clothing/head/beret/sec/corporate/saare + name = "SAARE beret" + desc = "A dark beret with a silver SAARE logo, usually worn by the company's employees." + icon = 'maps/sierra/icons/obj/clothing/obj_head.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + icon_state = "corporate_beret_SAARE" + +/obj/item/clothing/head/beret/sec/corporate/pcrc + name = "PCRC beret" + desc = "A navy blue beret with a cyan PCRC logo, usually worn by the company's employees." + icon = 'maps/sierra/icons/obj/clothing/obj_head.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + icon_state = "corporate_beret_PCRC" + +/obj/item/clothing/head/beret/sec/corporate/whitered + name = "white and red corporate beret" + desc = "A white corporate beret with a red logo." + icon = 'maps/sierra/icons/obj/clothing/obj_head.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + icon_state = "corporate_beret_whitered" + +/obj/item/clothing/head/beret/sec/corporate/zpci + name = "ZPCI beret" + desc = "Black beret with blue ZPCI logo, typically worn by company's employees." + icon = 'maps/sierra/icons/obj/clothing/obj_head.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + icon_state = "corporate_beret_ZPCI" diff --git a/packs/infinity/clothing/head/head.dm b/packs/infinity/clothing/head/head.dm new file mode 100644 index 0000000000000..26306a3481800 --- /dev/null +++ b/packs/infinity/clothing/head/head.dm @@ -0,0 +1,79 @@ +/obj/item/clothing/head/soft/darkred + name = "darkred cap" + desc = "It's a peaked hat in a tasteless darkred color." + icon = 'maps/sierra/icons/obj/clothing/obj_head.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + icon_state = "darkred_cap" + +/obj/item/clothing/head/kitty/tailless + name = "tailless kitty ears" + desc = "The fur feels.....a little bit realistic." + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + item_state = "kitty_tailless" + +/obj/item/clothing/head/kitty/fake + name = "fake kitty ears" + desc = "The fur feels.....a bit too realistic." + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + item_state = "kitty_tailless" + body_parts_covered = 0 + +/obj/item/clothing/head/kitty/fake/on_update_icon(mob/living/carbon/human/user) + if(!istype(user)) return + var/icon/ears = new/icon("icon" = 'maps/sierra/icons/mob/onmob/onmob_head.dmi', "icon_state" = "kitty") + //ears.Blend(rgb(user.r_hair, user.g_hair, user.b_hair), ICON_ADD) + + var/icon/earbit = new/icon("icon" = 'icons/mob/onmob/onmob_head.dmi', "icon_state" = "kittyinner") + ears.Blend(earbit, ICON_OVERLAY) + +/obj/item/clothing/head/helmet/marine + name = "\improper combat helmet" + desc = "A helmet with 'MARINE CORPS' printed on the back in red lettering." + icon_state = "helmet_nt" + +/obj/item/clothing/head/soft/scp_cap + name = "SCP guard cap" + desc = "A simple security dark grey cap.\nThis one has SCP tag, GGS's organization of NT asset protection." + icon = 'maps/sierra/icons/obj/clothing/obj_head.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + icon_state = "scp_cap" + +/obj/item/clothing/head/christhat + name = "christ's hat" + desc = "Ho ho ho. Merrry X-mas! (if use it, will show/hide hair)." + icon = 'maps/sierra/icons/obj/clothing/obj_head.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + icon_state = "christ_hat" + item_state = "christ_hat" + flags_inv = BLOCKHEADHAIR + body_parts_covered = HEAD + + sprite_sheets = list( + SPECIES_RESOMI = 'mods/resomi/icons/clothing/onmob_head_resomi.dmi', + // SIERRA TODO: SPECIES_UNATHI = 'icons/mob/onmob/Unathi/head_infinity.dmi' + ) + +/obj/item/clothing/head/christhat/attack_self(mob/user) + flags_inv ^= BLOCKHEADHAIR + to_chat(user, "[src] will now [flags_inv & BLOCKHEADHAIR ? "hide" : "show"] hair.") + ..() + +/obj/item/clothing/head/anime_band + name = "white hair band" + desc = "Just a nice looking shoes." + icon = 'maps/sierra/icons/obj/clothing/obj_head.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + icon_state = "anime_white" + item_state = "anime_white" + +/obj/item/clothing/head/anime_band/blue + name = "blue hair band" + desc = "Just a nice looking dress." + icon = 'maps/sierra/icons/obj/clothing/obj_head.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + icon_state = "anime_blue" + item_state = "anime_blue" + +/obj/item/clothing/head/hijab + flags_inv = HIDEEARS|BLOCKHEADHAIR + body_parts_covered = HEAD diff --git a/packs/infinity/clothing/head/helmet.dm b/packs/infinity/clothing/head/helmet.dm new file mode 100644 index 0000000000000..f183b39ef665e --- /dev/null +++ b/packs/infinity/clothing/head/helmet.dm @@ -0,0 +1,43 @@ +/obj/item/clothing/head/helmet/daft_punk //By KaReTa + name = "Daft Punk helm" + desc = "This fancy helm gives you the ability to see through clothes! Well, at least that's what rumors say.." + icon = 'maps/sierra/icons/obj/clothing/obj_head.dmi' + item_icons = list(slot_head_str = 'maps/sierra/icons/mob/onmob/onmob_head.dmi') + icon_state = "daft_helmet" + + +/obj/item/clothing/head/helmet/skrell/navy + name = "navy skrellian helmet" + desc = "A navy blue helmet built for use by a Skrell. This one appears to be fairly standard and reliable." + icon = 'packs/infinity/icons/obj/clothing/species/skrell/obj_head_skrell.dmi' + icon_state = "helmet_skrell_navy" + + item_icons = list( + slot_head_str = 'packs/infinity/icons/mob/species/skrell/onmob_head_skrell.dmi', + slot_l_hand_str = 'icons/mob/onmob/items/lefthand_hats.dmi', + slot_r_hand_str = 'icons/mob/onmob/items/righthand_hats.dmi' + ) + +/obj/item/clothing/head/helmet/skrell/green + name = "green skrellian helmet" + desc = "A green helmet built for use by a Skrell. This one appears to be fairly standard and reliable." + icon = 'packs/infinity/icons/obj/clothing/species/skrell/obj_head_skrell.dmi' + icon_state = "helmet_skrell_green" + + item_icons = list( + slot_head_str = 'packs/infinity/icons/mob/species/skrell/onmob_head_skrell.dmi', + slot_l_hand_str = 'icons/mob/onmob/items/lefthand_hats.dmi', + slot_r_hand_str = 'icons/mob/onmob/items/righthand_hats.dmi' + ) + +/obj/item/clothing/head/helmet/skrell/tan + name = "tan skrellian helmet" + desc = "A tan helmet built for use by a Skrell. This one appears to be fairly standard and reliable." + icon = 'packs/infinity/icons/obj/clothing/species/skrell/obj_head_skrell.dmi' + icon_state = "helmet_skrell_tan" + + item_icons = list( + slot_head_str = 'packs/infinity/icons/mob/species/skrell/onmob_head_skrell.dmi', + slot_l_hand_str = 'icons/mob/onmob/items/lefthand_hats.dmi', + slot_r_hand_str = 'icons/mob/onmob/items/righthand_hats.dmi' + ) diff --git a/packs/infinity/clothing/shoes/shoes.dm b/packs/infinity/clothing/shoes/shoes.dm new file mode 100644 index 0000000000000..8482ca8b2315b --- /dev/null +++ b/packs/infinity/clothing/shoes/shoes.dm @@ -0,0 +1,128 @@ +/obj/item/clothing/shoes/civilian + name = "leather shoes" + desc = "The best choice for haired assistants." + icon = 'maps/sierra/icons/obj/clothing/obj_feet.dmi' + item_icons = list(slot_shoes_str = 'maps/sierra/icons/mob/onmob/onmob_feet.dmi') + icon_state = "leather_shoes" + item_state = "leather_shoes" + +/obj/item/clothing/shoes/civilian/white + name = "white leather shoes" + desc = "The best choice for flag officers." + icon_state = "white_shoes" + item_state = "white_shoes" + +/obj/item/clothing/shoes/civilian/black + name = "black leather shoes" + desc = "The best choice for guys from the streets." + icon_state = "black_shoes" + item_state = "black_shoes" + +/obj/item/clothing/shoes/workboots/alt + name = "low workboots" + icon_state = "workboots" + item_state = "workboots" + icon = 'maps/sierra/icons/obj/clothing/obj_feet.dmi' + item_icons = list(slot_shoes_str = 'maps/sierra/icons/mob/onmob/onmob_feet.dmi') + +/obj/item/clothing/shoes/combat/marine + icon_state = "swat" + armor = list(melee = 50, bullet = 50, laser = 30,energy = 25, bomb = 50, bio = 10, rad = 0) + +/obj/item/clothing/shoes/anime_white + name = "white shoes" + desc = "Just a nice looking shoes." + icon = 'maps/sierra/icons/obj/clothing/obj_feet.dmi' + item_icons = list( + slot_shoes_str = 'maps/sierra/icons/mob/onmob/onmob_feet.dmi', + slot_r_hand_str = 'packs/infinity/icons/mob/onmob/righthand.dmi', + slot_l_hand_str = 'packs/infinity/icons/mob/onmob/lefthand.dmi') + icon_state = "anime_shoes_white" + item_state = "anime_shoes_white" + +/obj/item/clothing/shoes/anime_blue + name = "blue shoes" + desc = "Just a nice looking shoes." + icon = 'maps/sierra/icons/obj/clothing/obj_feet.dmi' + item_icons = list( + slot_shoes_str = 'maps/sierra/icons/mob/onmob/onmob_feet.dmi', + slot_r_hand_str = 'packs/infinity/icons/mob/onmob/righthand.dmi', + slot_l_hand_str = 'packs/infinity/icons/mob/onmob/lefthand.dmi') + icon_state = "anime_shoes_blue" + item_state = "anime_shoes_blue" + +/obj/item/clothing/shoes/cowboy + name = "cowboy boots" + desc = "Lacking a durasteel horse to ride." + icon_state = "cowboy" + item_state = "cowboy" + icon = 'maps/sierra/icons/obj/clothing/obj_feet.dmi' + item_icons = list(slot_shoes_str = 'maps/sierra/icons/mob/onmob/onmob_feet.dmi') + +/obj/item/clothing/shoes/cowboy/classic + name = "classic cowboy boots" + desc = "A classic looking pair of durable cowboy boots." + icon_state = "cowboy_classic" + item_state = "cowboy_classic" + +/obj/item/clothing/shoes/cowboy/snakeskin + name = "snakeskin cowboy boots" + desc = "A pair of cowboy boots made from python skin." + icon_state = "cowboy_snakeskin" + item_state = "cowboy_snakeskin" + +/obj/item/clothing/shoes/brand_shoes + name = "brand shoes" + desc = "Some sneakers with pretty much distinctive fashion." + icon = 'maps/sierra/icons/obj/clothing/obj_feet.dmi' + item_icons = list(slot_shoes_str = 'maps/sierra/icons/mob/onmob/onmob_feet.dmi') + icon_state = "brand_shoes1" + item_state = "brand_shoes1" + +/obj/item/clothing/shoes/brand_shoes/two + name = "brand shoes" + desc = "Some sneakers with pretty much distinctive fashion." + icon_state = "brand_shoes2" + item_state = "brand_shoes2" + +/obj/item/clothing/shoes/brand_shoes/three + name = "brand shoes" + desc = "Some sneakers with pretty much distinctive fashion." + icon_state = "brand_shoes3" + item_state = "brand_shoes3" + +/obj/item/clothing/shoes/brand_shoes/antiquated + name = "antiquated shoes" + desc = "Some sneakers with pretty much distinctive fashion." + icon_state = "antiquated_shoes" + item_state = "antiquated_shoes" + +/obj/item/clothing/shoes/brand_shoes/faln + name = "faln shoes" + desc = "The trekking sneakers that provide nigh-perfect ankle support and traction on any type of terrain." + icon_state = "papaleroy_faln_sneakers" + item_state = "papaleroy_faln_sneakers" + +/obj/item/clothing/shoes/geta + name = "red geta" + desc = "These sandals originate from culture of Japan and are meant to be an accompaniment for kimonos." + icon = 'maps/sierra/icons/obj/clothing/obj_feet.dmi' + item_icons = list(slot_shoes_str = 'maps/sierra/icons/mob/onmob/onmob_feet.dmi') + icon_state = "red_geta" + item_state = "red_geta" + +/obj/item/clothing/shoes/geta/black + name = "black geta" + desc = "These sandals originate from culture of Japan and are meant to be an accompaniment for kimonos." + icon = 'maps/sierra/icons/obj/clothing/obj_feet.dmi' + item_icons = list(slot_shoes_str = 'maps/sierra/icons/mob/onmob/onmob_feet.dmi') + icon_state = "black_geta" + item_state = "black_geta" + +/obj/item/clothing/shoes/noble_boots + name = "noble boots" + desc = "Polished leather boots that would rather fit some Avalonian nobleman." + icon = 'maps/sierra/icons/obj/clothing/obj_feet.dmi' + item_icons = list(slot_shoes_str = 'maps/sierra/icons/mob/onmob/onmob_feet.dmi') + icon_state = "noble_boots" + item_state = "noble_boots" diff --git a/packs/infinity/clothing/suits/armor.dm b/packs/infinity/clothing/suits/armor.dm new file mode 100644 index 0000000000000..8f601b8cec240 --- /dev/null +++ b/packs/infinity/clothing/suits/armor.dm @@ -0,0 +1,24 @@ +/obj/item/clothing/suit/armor/pcarrier/troops + accessories = list(/obj/item/clothing/accessory/armor_plate/medium, /obj/item/clothing/accessory/storage/pouches) + +/obj/item/clothing/suit/armor/pcarrier/troops/heavy + accessories = list(/obj/item/clothing/accessory/armor_plate/medium, /obj/item/clothing/accessory/arm_guards, /obj/item/clothing/accessory/leg_guards, /obj/item/clothing/accessory/storage/pouches) + +/obj/item/clothing/suit/armor/pcarrier/troops/heavy/pcrc + accessories = list(/obj/item/clothing/accessory/armor_plate/medium, /obj/item/clothing/accessory/arm_guards, /obj/item/clothing/accessory/leg_guards, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor_tag/pcrc) + +/obj/item/clothing/suit/armor/pcarrier/green/heavy_saare + accessories = list(/obj/item/clothing/accessory/armor_plate/medium, /obj/item/clothing/accessory/arm_guards/green, /obj/item/clothing/accessory/leg_guards/green, /obj/item/clothing/accessory/storage/pouches/green, /obj/item/clothing/accessory/armor_tag/saare) + +/obj/item/clothing/suit/armor/pcarrier/tactical + accessories = list(/obj/item/clothing/accessory/armor_plate/tactical, /obj/item/clothing/accessory/arm_guards, /obj/item/clothing/accessory/leg_guards) + +/obj/item/clothing/suit/storage/leather_jacket/armored + desc = "A black leather coat. It is reinforced with some armor plates..." + armor = list( + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_RESISTANT, + laser = ARMOR_LASER_HANDGUNS, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED, + ) diff --git a/packs/infinity/clothing/suits/suits.dm b/packs/infinity/clothing/suits/suits.dm new file mode 100644 index 0000000000000..66c8ce2a25991 --- /dev/null +++ b/packs/infinity/clothing/suits/suits.dm @@ -0,0 +1,116 @@ +/obj/item/clothing/suit/sc_labcoat + name = "robotic bathrobe" + desc = "A suit that protects against minor chemical spills." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "sc_labcoat" + item_state = "sc_labcoat" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + allowed = list(/obj/item/device/scanner/gas,/obj/item/stack/medical,/obj/item/reagent_containers/dropper,/obj/item/reagent_containers/syringe,/obj/item/reagent_containers/hypospray,/obj/item/device/scanner/health,/obj/item/device/flashlight/pen,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle,/obj/item/paper) + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0) + +/obj/item/clothing/suit/storage/toggle/civilian + name = "black jacket" + desc = "A black jacket for real white men." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "black_jacket_o" + //icon_open = "black_jacket_o" + //icon_closed = "black_jacket_c" + +/obj/item/clothing/suit/officerdnavyjacket + name = "officer navy jacket" + desc = "The utility jacket of the SCG Fleet, made from an insulated materials." + icon = 'icons/obj/clothing/obj_suit.dmi' + icon_state = "officerdnavyjacket" + body_parts_covered = UPPER_TORSO + +/obj/item/clothing/suit/storage/hoscoat + name = "armored trenchcoat" + desc = "A trenchcoat augmented with a special alloy for some protection and style." + icon_state = "hostrench" + item_state = "hostrench" + armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + siemens_coefficient = 0.6 + allowed = list(/obj/item/gun/energy,/obj/item/device/radio,/obj/item/reagent_containers/spray/pepper,/obj/item/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/handcuffs,/obj/item/gun/magnetic) + +/obj/item/clothing/suit/storage/janjacket + name = "janitor jacket" + desc = "A janitor's jacket. Gives unbelivable protection versus depression about your job." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "janitor_jacket" + body_parts_covered = UPPER_TORSO|ARMS + allowed = list(/obj/item/device/flashlight,/obj/item/device/lightreplacer,/obj/item/storage/bag/trash,/obj/item/grenade/chem_grenade/cleaner,/obj/item/reagent_containers/spray/cleaner, /obj/item/mop, /obj/item/reagent_containers/glass/bucket) + +/obj/item/clothing/suit/storage/tgbomber/militaryjacket + name = "military jacket" + desc = "A canvas jacket styled classical American military garb. Feels sturdy, yet comfortable." + icon_state = "militaryjacket" + +/obj/item/clothing/suit/armor/pcarrier/mainkraft/plastic + name = "plastic plate carrier" + desc = "Someone made it out of plastic with their own hands. There you can hang a sheet of armor." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "plvest" + +/obj/item/clothing/suit/armor/pcarrier/mainkraft/plastic/New() + ..() + slowdown_per_slot[slot_wear_suit] = 0.75 + +/obj/item/clothing/suit/lux_tunic + name = "luxury tunic" + desc = "A luxury suit for some high-ranked officer." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list(slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "admiral_tunic" + item_state = "admiral_tunic" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + valid_accessory_slots = list(ACCESSORY_SLOT_MEDAL) + allowed = list(/obj/item/gun/energy, /obj/item/gun/projectile, /obj/item/melee/baton) + +/obj/item/clothing/suit/storage/toggle/agent_jacket/security + name = "private security jacket" + desc = "A black leather jacket with \"SECURITY\" inscription at back. Belonged to a guard in a warehouse." + + +/obj/item/clothing/suit/anime_white + name = "white dress" + desc = "Just a nice looking dress." + icon = 'packs/infinity/icons/obj/clothing/obj_under.dmi' + item_icons = list( + slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi', + slot_r_hand_str = 'packs/infinity/icons/mob/onmob/righthand.dmi', + slot_l_hand_str = 'packs/infinity/icons/mob/onmob/lefthand.dmi') + icon_state = "anime_white" + item_state = "anime_white" + +/obj/item/clothing/suit/anime_blue + name = "blue dress" + desc = "Just a nice looking dress." + icon = 'packs/infinity/icons/obj/clothing/obj_under.dmi' + item_icons = list( + slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') + icon_state = "anime_blue" + item_state = "anime_blue" + +/obj/item/clothing/suit/snakeskin + name = "snakeskin coat" + desc = "A stylish snakeskin coat." + icon = 'maps/sierra/icons/obj/clothing/obj_suit.dmi' + item_icons = list( + slot_wear_suit_str = 'maps/sierra/icons/mob/onmob/onmob_suit.dmi') //sprite by CeUvi#1236 + icon_state = "snakeskin" + item_state = "snakeskin" + body_parts_covered = UPPER_TORSO|ARMS + +/obj/item/clothing/under/rank/adjutant + name = "adjutant's uniform" + desc = "It's made of a special fiber that gives protection against strong language." + icon = 'packs/infinity/icons/obj/clothing/obj_under.dmi' + item_icons = list(slot_w_uniform_str = 'packs/infinity/icons/mob/onmob/onmob_under.dmi') + icon_state = "adjutant" + item_state = "adjutant" + worn_state = "adjutant" diff --git a/packs/infinity/clothing/suits/under_bluebrig.dm b/packs/infinity/clothing/suits/under_bluebrig.dm new file mode 100644 index 0000000000000..742dae553584a --- /dev/null +++ b/packs/infinity/clothing/suits/under_bluebrig.dm @@ -0,0 +1,45 @@ +/obj/item/clothing/under/rank/security/alt + icon = 'packs/infinity/icons/blue_brig/obj/clothing/uniform.dmi' + worn_state = "security" + item_icons = list( + slot_w_uniform_str = 'packs/infinity/icons/blue_brig/mob/uniform.dmi', + icon_l_hand_str = 'packs/infinity/icons/blue_brig/mob/clothing-lefthand.dmi', + icon_r_hand_str = 'packs/infinity/icons/blue_brig/mob/clothing-righthand.dmi' + ) + +/obj/item/clothing/under/rank/security/corp/alt + icon = 'packs/infinity/icons/blue_brig/obj/clothing/uniform.dmi' + worn_state = "security" + item_icons = list( + slot_w_uniform_str = 'packs/infinity/icons/blue_brig/mob/uniform.dmi', + icon_l_hand_str = 'packs/infinity/icons/blue_brig/mob/clothing-lefthand.dmi', + icon_r_hand_str = 'packs/infinity/icons/blue_brig/mob/clothing-righthand.dmi' + ) + +/obj/item/clothing/under/rank/warden/corp/alt + icon = 'packs/infinity/icons/blue_brig/obj/clothing/uniform.dmi' + item_icons = list( + slot_w_uniform_str = 'packs/infinity/icons/blue_brig/mob/uniform.dmi', + icon_l_hand_str = 'packs/infinity/icons/blue_brig/mob/clothing-lefthand.dmi', + icon_r_hand_str = 'packs/infinity/icons/blue_brig/mob/clothing-righthand.dmi' + ) + +/obj/item/clothing/under/rank/head_of_security/corp/alt + icon = 'packs/infinity/icons/blue_brig/obj/clothing/uniform.dmi' + item_icons = list( + slot_w_uniform_str = 'packs/infinity/icons/blue_brig/mob/uniform.dmi', + icon_l_hand_str = 'packs/infinity/icons/blue_brig/mob/clothing-lefthand.dmi', + icon_r_hand_str = 'packs/infinity/icons/blue_brig/mob/clothing-righthand.dmi' + ) + +/obj/item/clothing/under/rank/security/navyblue/alt + icon_state = "officertanclothes" + worn_state = "officertanclothes" + +/obj/item/clothing/under/rank/warden/navyblue/alt + icon_state = "wardentanclothes" + icon_state = "wardentanclothes" + +/obj/item/clothing/under/rank/head_of_security/navyblue/alt + worn_state = "hostanclothes" + worn_state = "hostanclothes" diff --git a/packs/infinity/effects/paint.dm b/packs/infinity/effects/paint.dm new file mode 100644 index 0000000000000..073bca913d47a --- /dev/null +++ b/packs/infinity/effects/paint.dm @@ -0,0 +1,7 @@ +/obj/paint_stripe + icon = 'packs/infinity/icons/effects/effects.dmi' + icon_state = "stripe" + +/obj/paint + icon = 'packs/infinity/icons/effects/effects.dmi' + icon_state = "paint" diff --git a/packs/infinity/icons/blue_brig/mob/back.dmi b/packs/infinity/icons/blue_brig/mob/back.dmi new file mode 100644 index 0000000000000..78b8775971560 Binary files /dev/null and b/packs/infinity/icons/blue_brig/mob/back.dmi differ diff --git a/packs/infinity/icons/blue_brig/mob/belt.dmi b/packs/infinity/icons/blue_brig/mob/belt.dmi new file mode 100644 index 0000000000000..8ba3dc6ec982c Binary files /dev/null and b/packs/infinity/icons/blue_brig/mob/belt.dmi differ diff --git a/packs/infinity/icons/blue_brig/mob/clothing-lefthand.dmi b/packs/infinity/icons/blue_brig/mob/clothing-lefthand.dmi new file mode 100644 index 0000000000000..c72d906e9aae9 Binary files /dev/null and b/packs/infinity/icons/blue_brig/mob/clothing-lefthand.dmi differ diff --git a/packs/infinity/icons/blue_brig/mob/clothing-righthand.dmi b/packs/infinity/icons/blue_brig/mob/clothing-righthand.dmi new file mode 100644 index 0000000000000..df85299ef1f33 Binary files /dev/null and b/packs/infinity/icons/blue_brig/mob/clothing-righthand.dmi differ diff --git a/packs/infinity/icons/blue_brig/mob/head.dmi b/packs/infinity/icons/blue_brig/mob/head.dmi new file mode 100644 index 0000000000000..7de7eda11364c Binary files /dev/null and b/packs/infinity/icons/blue_brig/mob/head.dmi differ diff --git a/packs/infinity/icons/blue_brig/mob/hud.dmi b/packs/infinity/icons/blue_brig/mob/hud.dmi new file mode 100644 index 0000000000000..3c2a7100d491b Binary files /dev/null and b/packs/infinity/icons/blue_brig/mob/hud.dmi differ diff --git a/packs/infinity/icons/blue_brig/mob/items-lefthand.dmi b/packs/infinity/icons/blue_brig/mob/items-lefthand.dmi new file mode 100644 index 0000000000000..b2e3f501333ca Binary files /dev/null and b/packs/infinity/icons/blue_brig/mob/items-lefthand.dmi differ diff --git a/packs/infinity/icons/blue_brig/mob/items-righthand.dmi b/packs/infinity/icons/blue_brig/mob/items-righthand.dmi new file mode 100644 index 0000000000000..a52d1d05f8350 Binary files /dev/null and b/packs/infinity/icons/blue_brig/mob/items-righthand.dmi differ diff --git a/packs/infinity/icons/blue_brig/mob/mask.dmi b/packs/infinity/icons/blue_brig/mob/mask.dmi new file mode 100644 index 0000000000000..ce8cb47106945 Binary files /dev/null and b/packs/infinity/icons/blue_brig/mob/mask.dmi differ diff --git a/packs/infinity/icons/blue_brig/mob/robot_transformations.dmi b/packs/infinity/icons/blue_brig/mob/robot_transformations.dmi new file mode 100644 index 0000000000000..80cf384b17f33 Binary files /dev/null and b/packs/infinity/icons/blue_brig/mob/robot_transformations.dmi differ diff --git a/packs/infinity/icons/blue_brig/mob/robots.dmi b/packs/infinity/icons/blue_brig/mob/robots.dmi new file mode 100644 index 0000000000000..d277df56abbe1 Binary files /dev/null and b/packs/infinity/icons/blue_brig/mob/robots.dmi differ diff --git a/packs/infinity/icons/blue_brig/mob/suit.dmi b/packs/infinity/icons/blue_brig/mob/suit.dmi new file mode 100644 index 0000000000000..8ff852882f25f Binary files /dev/null and b/packs/infinity/icons/blue_brig/mob/suit.dmi differ diff --git a/packs/infinity/icons/blue_brig/mob/uniform.dmi b/packs/infinity/icons/blue_brig/mob/uniform.dmi new file mode 100644 index 0000000000000..92adc0b7710ce Binary files /dev/null and b/packs/infinity/icons/blue_brig/mob/uniform.dmi differ diff --git a/packs/infinity/icons/blue_brig/obj/PDA.dmi b/packs/infinity/icons/blue_brig/obj/PDA.dmi new file mode 100644 index 0000000000000..7f7bd2effc984 Binary files /dev/null and b/packs/infinity/icons/blue_brig/obj/PDA.dmi differ diff --git a/packs/infinity/icons/blue_brig/obj/closetsec.dmi b/packs/infinity/icons/blue_brig/obj/closetsec.dmi new file mode 100644 index 0000000000000..e8b572d1a92c7 Binary files /dev/null and b/packs/infinity/icons/blue_brig/obj/closetsec.dmi differ diff --git a/packs/infinity/icons/blue_brig/obj/clothing/belts.dmi b/packs/infinity/icons/blue_brig/obj/clothing/belts.dmi new file mode 100644 index 0000000000000..e4b1388c360ab Binary files /dev/null and b/packs/infinity/icons/blue_brig/obj/clothing/belts.dmi differ diff --git a/packs/infinity/icons/blue_brig/obj/clothing/hats.dmi b/packs/infinity/icons/blue_brig/obj/clothing/hats.dmi new file mode 100644 index 0000000000000..eb035672d0a82 Binary files /dev/null and b/packs/infinity/icons/blue_brig/obj/clothing/hats.dmi differ diff --git a/packs/infinity/icons/blue_brig/obj/clothing/masks.dmi b/packs/infinity/icons/blue_brig/obj/clothing/masks.dmi new file mode 100644 index 0000000000000..bf1af0e87b2c4 Binary files /dev/null and b/packs/infinity/icons/blue_brig/obj/clothing/masks.dmi differ diff --git a/packs/infinity/icons/blue_brig/obj/clothing/suits.dmi b/packs/infinity/icons/blue_brig/obj/clothing/suits.dmi new file mode 100644 index 0000000000000..1f24704c4ebf5 Binary files /dev/null and b/packs/infinity/icons/blue_brig/obj/clothing/suits.dmi differ diff --git a/packs/infinity/icons/blue_brig/obj/clothing/uniform.dmi b/packs/infinity/icons/blue_brig/obj/clothing/uniform.dmi new file mode 100644 index 0000000000000..7027f91a770a1 Binary files /dev/null and b/packs/infinity/icons/blue_brig/obj/clothing/uniform.dmi differ diff --git a/packs/infinity/icons/blue_brig/obj/secbarrier.dmi b/packs/infinity/icons/blue_brig/obj/secbarrier.dmi new file mode 100644 index 0000000000000..01df66d91885f Binary files /dev/null and b/packs/infinity/icons/blue_brig/obj/secbarrier.dmi differ diff --git a/packs/infinity/icons/blue_brig/obj/seccomp.dmi b/packs/infinity/icons/blue_brig/obj/seccomp.dmi new file mode 100644 index 0000000000000..ed1b46a40658e Binary files /dev/null and b/packs/infinity/icons/blue_brig/obj/seccomp.dmi differ diff --git a/packs/infinity/icons/blue_brig/obj/secspray.dmi b/packs/infinity/icons/blue_brig/obj/secspray.dmi new file mode 100644 index 0000000000000..e0a90b2abd63b Binary files /dev/null and b/packs/infinity/icons/blue_brig/obj/secspray.dmi differ diff --git a/packs/infinity/icons/blue_brig/obj/storage.dmi b/packs/infinity/icons/blue_brig/obj/storage.dmi new file mode 100644 index 0000000000000..404611fe68d68 Binary files /dev/null and b/packs/infinity/icons/blue_brig/obj/storage.dmi differ diff --git a/packs/infinity/icons/blue_brig/unused/helmet/hoscap.dmi b/packs/infinity/icons/blue_brig/unused/helmet/hoscap.dmi new file mode 100644 index 0000000000000..4fee95a978918 Binary files /dev/null and b/packs/infinity/icons/blue_brig/unused/helmet/hoscap.dmi differ diff --git a/packs/infinity/icons/blue_brig/unused/helmet/policehelm.dmi b/packs/infinity/icons/blue_brig/unused/helmet/policehelm.dmi new file mode 100644 index 0000000000000..c4d79a8606447 Binary files /dev/null and b/packs/infinity/icons/blue_brig/unused/helmet/policehelm.dmi differ diff --git "a/packs/infinity/icons/blue_brig/unused/helmet/\321\210\320\273\320\265\320\274\321\213 \320\241\320\221 .dmi" "b/packs/infinity/icons/blue_brig/unused/helmet/\321\210\320\273\320\265\320\274\321\213 \320\241\320\221 .dmi" new file mode 100644 index 0000000000000..4d1defdcb9604 Binary files /dev/null and "b/packs/infinity/icons/blue_brig/unused/helmet/\321\210\320\273\320\265\320\274\321\213 \320\241\320\221 .dmi" differ diff --git a/packs/infinity/icons/blue_brig/unused/helmet_item/policehlm out.dmi b/packs/infinity/icons/blue_brig/unused/helmet_item/policehlm out.dmi new file mode 100644 index 0000000000000..27f629babd052 Binary files /dev/null and b/packs/infinity/icons/blue_brig/unused/helmet_item/policehlm out.dmi differ diff --git a/packs/infinity/icons/blue_brig/unused/idcard/id.dmi b/packs/infinity/icons/blue_brig/unused/idcard/id.dmi new file mode 100644 index 0000000000000..3f7f39b1aa048 Binary files /dev/null and b/packs/infinity/icons/blue_brig/unused/idcard/id.dmi differ diff --git a/packs/infinity/icons/blue_brig/unused/radio/radio out.dmi b/packs/infinity/icons/blue_brig/unused/radio/radio out.dmi new file mode 100644 index 0000000000000..29fd94859dd14 Binary files /dev/null and b/packs/infinity/icons/blue_brig/unused/radio/radio out.dmi differ diff --git a/packs/infinity/icons/blue_brig/unused/radio/sec headset .dmi b/packs/infinity/icons/blue_brig/unused/radio/sec headset .dmi new file mode 100644 index 0000000000000..98aae1d35b7aa Binary files /dev/null and b/packs/infinity/icons/blue_brig/unused/radio/sec headset .dmi differ diff --git a/packs/infinity/icons/blue_brig/unused/suit/suit Officer.dmi b/packs/infinity/icons/blue_brig/unused/suit/suit Officer.dmi new file mode 100644 index 0000000000000..8e5bbd76735db Binary files /dev/null and b/packs/infinity/icons/blue_brig/unused/suit/suit Officer.dmi differ diff --git a/packs/infinity/icons/blue_brig/unused/under/secuniform.dmi b/packs/infinity/icons/blue_brig/unused/under/secuniform.dmi new file mode 100644 index 0000000000000..14c0569f2047b Binary files /dev/null and b/packs/infinity/icons/blue_brig/unused/under/secuniform.dmi differ diff --git a/packs/infinity/icons/blue_brig/unused/under_item/uniform out.dmi b/packs/infinity/icons/blue_brig/unused/under_item/uniform out.dmi new file mode 100644 index 0000000000000..6d6f28bba613b Binary files /dev/null and b/packs/infinity/icons/blue_brig/unused/under_item/uniform out.dmi differ diff --git a/packs/infinity/icons/effects/beam.dmi b/packs/infinity/icons/effects/beam.dmi new file mode 100644 index 0000000000000..4ec89304e1984 Binary files /dev/null and b/packs/infinity/icons/effects/beam.dmi differ diff --git a/packs/infinity/icons/effects/effects.dmi b/packs/infinity/icons/effects/effects.dmi new file mode 100644 index 0000000000000..1af4a191e6d85 Binary files /dev/null and b/packs/infinity/icons/effects/effects.dmi differ diff --git a/packs/infinity/icons/effects/lighting_overlay_tile.dmi b/packs/infinity/icons/effects/lighting_overlay_tile.dmi new file mode 100644 index 0000000000000..67e4dc2ac22d6 Binary files /dev/null and b/packs/infinity/icons/effects/lighting_overlay_tile.dmi differ diff --git a/packs/infinity/icons/effects/smoke_hookah.dmi b/packs/infinity/icons/effects/smoke_hookah.dmi new file mode 100644 index 0000000000000..242b3c15a02b5 Binary files /dev/null and b/packs/infinity/icons/effects/smoke_hookah.dmi differ diff --git a/packs/infinity/icons/effects/uristrunes.dmi b/packs/infinity/icons/effects/uristrunes.dmi new file mode 100644 index 0000000000000..d8f1c75487d31 Binary files /dev/null and b/packs/infinity/icons/effects/uristrunes.dmi differ diff --git a/packs/infinity/icons/effects/white.dmi b/packs/infinity/icons/effects/white.dmi new file mode 100644 index 0000000000000..97e265e0c8b10 Binary files /dev/null and b/packs/infinity/icons/effects/white.dmi differ diff --git a/packs/infinity/icons/emoji.dmi b/packs/infinity/icons/emoji.dmi new file mode 100644 index 0000000000000..03d8801e6d40c Binary files /dev/null and b/packs/infinity/icons/emoji.dmi differ diff --git a/packs/infinity/icons/event/ammo.dmi b/packs/infinity/icons/event/ammo.dmi new file mode 100644 index 0000000000000..89a443495e3aa Binary files /dev/null and b/packs/infinity/icons/event/ammo.dmi differ diff --git a/packs/infinity/icons/event/guns.dmi b/packs/infinity/icons/event/guns.dmi new file mode 100644 index 0000000000000..fb9db090900da Binary files /dev/null and b/packs/infinity/icons/event/guns.dmi differ diff --git a/packs/infinity/icons/event/left1.dmi b/packs/infinity/icons/event/left1.dmi new file mode 100644 index 0000000000000..61da96f87aba0 Binary files /dev/null and b/packs/infinity/icons/event/left1.dmi differ diff --git a/packs/infinity/icons/event/right1.dmi b/packs/infinity/icons/event/right1.dmi new file mode 100644 index 0000000000000..8ef0c45c26f2b Binary files /dev/null and b/packs/infinity/icons/event/right1.dmi differ diff --git a/packs/infinity/icons/events/_events_misc.dmi b/packs/infinity/icons/events/_events_misc.dmi new file mode 100644 index 0000000000000..4aa02f3c179e9 Binary files /dev/null and b/packs/infinity/icons/events/_events_misc.dmi differ diff --git a/packs/infinity/icons/events/argent_ray.dmi b/packs/infinity/icons/events/argent_ray.dmi new file mode 100644 index 0000000000000..22e70994a7da7 Binary files /dev/null and b/packs/infinity/icons/events/argent_ray.dmi differ diff --git a/packs/infinity/icons/misc/beach.dmi b/packs/infinity/icons/misc/beach.dmi new file mode 100644 index 0000000000000..115cd9809c206 Binary files /dev/null and b/packs/infinity/icons/misc/beach.dmi differ diff --git a/packs/infinity/icons/misc/buildmode.dmi b/packs/infinity/icons/misc/buildmode.dmi new file mode 100644 index 0000000000000..b2dc0940d892c Binary files /dev/null and b/packs/infinity/icons/misc/buildmode.dmi differ diff --git a/packs/infinity/icons/mob/AI.dmi b/packs/infinity/icons/mob/AI.dmi new file mode 100644 index 0000000000000..f3137c57f7078 Binary files /dev/null and b/packs/infinity/icons/mob/AI.dmi differ diff --git a/packs/infinity/icons/mob/alien.dmi b/packs/infinity/icons/mob/alien.dmi new file mode 100644 index 0000000000000..bcc62338c7f32 Binary files /dev/null and b/packs/infinity/icons/mob/alien.dmi differ diff --git a/packs/infinity/icons/mob/hologram.dmi b/packs/infinity/icons/mob/hologram.dmi new file mode 100644 index 0000000000000..fd6b64c9a1f4b Binary files /dev/null and b/packs/infinity/icons/mob/hologram.dmi differ diff --git a/packs/infinity/icons/mob/hud.dmi b/packs/infinity/icons/mob/hud.dmi new file mode 100644 index 0000000000000..94dfaa493c831 Binary files /dev/null and b/packs/infinity/icons/mob/hud.dmi differ diff --git a/packs/infinity/icons/mob/hud_styles/Hi-Tek.dmi b/packs/infinity/icons/mob/hud_styles/Hi-Tek.dmi new file mode 100644 index 0000000000000..c2fb97ec6e03d Binary files /dev/null and b/packs/infinity/icons/mob/hud_styles/Hi-Tek.dmi differ diff --git a/packs/infinity/icons/mob/hud_styles/Hi-Tek_templates.dmi b/packs/infinity/icons/mob/hud_styles/Hi-Tek_templates.dmi new file mode 100644 index 0000000000000..c364afbea263d Binary files /dev/null and b/packs/infinity/icons/mob/hud_styles/Hi-Tek_templates.dmi differ diff --git a/packs/infinity/icons/mob/human.dmi b/packs/infinity/icons/mob/human.dmi new file mode 100644 index 0000000000000..b5ff7e2d4e2b3 Binary files /dev/null and b/packs/infinity/icons/mob/human.dmi differ diff --git a/packs/infinity/icons/mob/human_races/infinity_markings.dmi b/packs/infinity/icons/mob/human_races/infinity_markings.dmi new file mode 100644 index 0000000000000..0db8d27e87ed8 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/infinity_markings.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/abductor/body.dmi b/packs/infinity/icons/mob/human_races/species/abductor/body.dmi new file mode 100644 index 0000000000000..536a2fb99ee23 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/abductor/body.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/abductor/preview.dmi b/packs/infinity/icons/mob/human_races/species/abductor/preview.dmi new file mode 100644 index 0000000000000..c466e8a40f571 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/abductor/preview.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/bionic/preview.dmi b/packs/infinity/icons/mob/human_races/species/bionic/preview.dmi new file mode 100644 index 0000000000000..24c8814302a94 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/bionic/preview.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/erosan/body.dmi b/packs/infinity/icons/mob/human_races/species/erosan/body.dmi new file mode 100644 index 0000000000000..2691e828c5556 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/erosan/body.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/erosan/deformed_body.dmi b/packs/infinity/icons/mob/human_races/species/erosan/deformed_body.dmi new file mode 100644 index 0000000000000..4d0f25e727769 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/erosan/deformed_body.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/erosan/facial.dmi b/packs/infinity/icons/mob/human_races/species/erosan/facial.dmi new file mode 100644 index 0000000000000..b992eb874f3e7 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/erosan/facial.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/erosan/hair.dmi b/packs/infinity/icons/mob/human_races/species/erosan/hair.dmi new file mode 100644 index 0000000000000..6eac2a1c30537 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/erosan/hair.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/erosan/husk.dmi b/packs/infinity/icons/mob/human_races/species/erosan/husk.dmi new file mode 100644 index 0000000000000..613453fc57a7a Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/erosan/husk.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/erosan/organs.dmi b/packs/infinity/icons/mob/human_races/species/erosan/organs.dmi new file mode 100644 index 0000000000000..eb74a5b45f463 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/erosan/organs.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/erosan/preview.dmi b/packs/infinity/icons/mob/human_races/species/erosan/preview.dmi new file mode 100644 index 0000000000000..a34aa6d9f18df Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/erosan/preview.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/human/body.dmi b/packs/infinity/icons/mob/human_races/species/human/body.dmi new file mode 100644 index 0000000000000..82f63f0b260d4 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/human/body.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/human/markings.dmi b/packs/infinity/icons/mob/human_races/species/human/markings.dmi new file mode 100644 index 0000000000000..136e8790de9a8 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/human/markings.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/human/subspecies/booster_mods.dmi b/packs/infinity/icons/mob/human_races/species/human/subspecies/booster_mods.dmi new file mode 100644 index 0000000000000..2c61834170f71 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/human/subspecies/booster_mods.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/human/subspecies/vatgrown_body.dmi b/packs/infinity/icons/mob/human_races/species/human/subspecies/vatgrown_body.dmi new file mode 100644 index 0000000000000..dfbd596a380b3 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/human/subspecies/vatgrown_body.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/human/subspecies/vatgrown_preview.dmi b/packs/infinity/icons/mob/human_races/species/human/subspecies/vatgrown_preview.dmi new file mode 100644 index 0000000000000..c4573ce02bb96 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/human/subspecies/vatgrown_preview.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/resomi/blood_mask.dmi b/packs/infinity/icons/mob/human_races/species/resomi/blood_mask.dmi new file mode 100644 index 0000000000000..104eb8f94dd4e Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/resomi/blood_mask.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/resomi/body.dmi b/packs/infinity/icons/mob/human_races/species/resomi/body.dmi new file mode 100644 index 0000000000000..b6f6f9866191b Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/resomi/body.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/resomi/damage_mask.dmi b/packs/infinity/icons/mob/human_races/species/resomi/damage_mask.dmi new file mode 100644 index 0000000000000..c3166d5945d83 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/resomi/damage_mask.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/resomi/damage_overlay.dmi b/packs/infinity/icons/mob/human_races/species/resomi/damage_overlay.dmi new file mode 100644 index 0000000000000..2241c3943c9f2 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/resomi/damage_overlay.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/resomi/ears.dmi b/packs/infinity/icons/mob/human_races/species/resomi/ears.dmi new file mode 100644 index 0000000000000..f2465fe02e36a Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/resomi/ears.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/resomi/eyes.dmi b/packs/infinity/icons/mob/human_races/species/resomi/eyes.dmi new file mode 100644 index 0000000000000..33482c62e1d11 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/resomi/eyes.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/resomi/hair.dmi b/packs/infinity/icons/mob/human_races/species/resomi/hair.dmi new file mode 100644 index 0000000000000..32f80255971c3 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/resomi/hair.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/resomi/husk.dmi b/packs/infinity/icons/mob/human_races/species/resomi/husk.dmi new file mode 100644 index 0000000000000..ade831bcad244 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/resomi/husk.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/resomi/markings.dmi b/packs/infinity/icons/mob/human_races/species/resomi/markings.dmi new file mode 100644 index 0000000000000..c50ca181de8e4 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/resomi/markings.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/resomi/preview.dmi b/packs/infinity/icons/mob/human_races/species/resomi/preview.dmi new file mode 100644 index 0000000000000..f781dcaa4f9f5 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/resomi/preview.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/resomi/surgery.dmi b/packs/infinity/icons/mob/human_races/species/resomi/surgery.dmi new file mode 100644 index 0000000000000..1ada24c5b4d99 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/resomi/surgery.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/terminator/eyes.dmi b/packs/infinity/icons/mob/human_races/species/terminator/eyes.dmi new file mode 100644 index 0000000000000..aa1258da29601 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/terminator/eyes.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/terminator/preview.dmi b/packs/infinity/icons/mob/human_races/species/terminator/preview.dmi new file mode 100644 index 0000000000000..701b3f21bb995 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/terminator/preview.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/xenophage/body_drone.dmi b/packs/infinity/icons/mob/human_races/species/xenophage/body_drone.dmi new file mode 100644 index 0000000000000..2d0ebba72d7e5 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/xenophage/body_drone.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/xenophage/body_hunter.dmi b/packs/infinity/icons/mob/human_races/species/xenophage/body_hunter.dmi new file mode 100644 index 0000000000000..c108f9958b92e Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/xenophage/body_hunter.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/xenophage/body_queen.dmi b/packs/infinity/icons/mob/human_races/species/xenophage/body_queen.dmi new file mode 100644 index 0000000000000..8f76c3b49b254 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/xenophage/body_queen.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/xenophage/body_sentinel.dmi b/packs/infinity/icons/mob/human_races/species/xenophage/body_sentinel.dmi new file mode 100644 index 0000000000000..fefa4874e21a3 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/xenophage/body_sentinel.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/xenophage/eyes.dmi b/packs/infinity/icons/mob/human_races/species/xenophage/eyes.dmi new file mode 100644 index 0000000000000..216219f24f879 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/xenophage/eyes.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/xenophage/r_xenos_drone.dmi b/packs/infinity/icons/mob/human_races/species/xenophage/r_xenos_drone.dmi new file mode 100644 index 0000000000000..25c039cef3d8a Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/xenophage/r_xenos_drone.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/xenophage/r_xenos_hunter.dmi b/packs/infinity/icons/mob/human_races/species/xenophage/r_xenos_hunter.dmi new file mode 100644 index 0000000000000..b698ea59f6a7e Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/xenophage/r_xenos_hunter.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/xenophage/r_xenos_queen.dmi b/packs/infinity/icons/mob/human_races/species/xenophage/r_xenos_queen.dmi new file mode 100644 index 0000000000000..7879c21949b37 Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/xenophage/r_xenos_queen.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/xenophage/r_xenos_sentinel.dmi b/packs/infinity/icons/mob/human_races/species/xenophage/r_xenos_sentinel.dmi new file mode 100644 index 0000000000000..a89306e3d172f Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/xenophage/r_xenos_sentinel.dmi differ diff --git a/packs/infinity/icons/mob/human_races/species/xenophage/template.dmi b/packs/infinity/icons/mob/human_races/species/xenophage/template.dmi new file mode 100644 index 0000000000000..deb074131983d Binary files /dev/null and b/packs/infinity/icons/mob/human_races/species/xenophage/template.dmi differ diff --git a/packs/infinity/icons/mob/mob.dmi b/packs/infinity/icons/mob/mob.dmi new file mode 100644 index 0000000000000..a0e6ff4ca5bb1 Binary files /dev/null and b/packs/infinity/icons/mob/mob.dmi differ diff --git a/packs/infinity/icons/mob/onmob/lefthand.dmi b/packs/infinity/icons/mob/onmob/lefthand.dmi new file mode 100644 index 0000000000000..570c8aa29584c Binary files /dev/null and b/packs/infinity/icons/mob/onmob/lefthand.dmi differ diff --git a/packs/infinity/icons/mob/onmob/misc.dmi b/packs/infinity/icons/mob/onmob/misc.dmi new file mode 100644 index 0000000000000..3218945d1eff7 Binary files /dev/null and b/packs/infinity/icons/mob/onmob/misc.dmi differ diff --git a/packs/infinity/icons/mob/onmob/onmob_accessories.dmi b/packs/infinity/icons/mob/onmob/onmob_accessories.dmi new file mode 100644 index 0000000000000..f24cb3ebc9073 Binary files /dev/null and b/packs/infinity/icons/mob/onmob/onmob_accessories.dmi differ diff --git a/packs/infinity/icons/mob/onmob/onmob_back.dmi b/packs/infinity/icons/mob/onmob/onmob_back.dmi new file mode 100644 index 0000000000000..1162947c1afe2 Binary files /dev/null and b/packs/infinity/icons/mob/onmob/onmob_back.dmi differ diff --git a/packs/infinity/icons/mob/onmob/onmob_belt.dmi b/packs/infinity/icons/mob/onmob/onmob_belt.dmi new file mode 100644 index 0000000000000..a0b9d40c6a19a Binary files /dev/null and b/packs/infinity/icons/mob/onmob/onmob_belt.dmi differ diff --git a/packs/infinity/icons/mob/onmob/onmob_ears.dmi b/packs/infinity/icons/mob/onmob/onmob_ears.dmi new file mode 100644 index 0000000000000..1092bbad762d2 Binary files /dev/null and b/packs/infinity/icons/mob/onmob/onmob_ears.dmi differ diff --git a/packs/infinity/icons/mob/onmob/onmob_eyes.dmi b/packs/infinity/icons/mob/onmob/onmob_eyes.dmi new file mode 100644 index 0000000000000..6a79b44f5571d Binary files /dev/null and b/packs/infinity/icons/mob/onmob/onmob_eyes.dmi differ diff --git a/packs/infinity/icons/mob/onmob/onmob_hands.dmi b/packs/infinity/icons/mob/onmob/onmob_hands.dmi new file mode 100644 index 0000000000000..681d890a234c2 Binary files /dev/null and b/packs/infinity/icons/mob/onmob/onmob_hands.dmi differ diff --git a/packs/infinity/icons/mob/onmob/onmob_head.dmi b/packs/infinity/icons/mob/onmob/onmob_head.dmi new file mode 100644 index 0000000000000..0c4438eae7023 Binary files /dev/null and b/packs/infinity/icons/mob/onmob/onmob_head.dmi differ diff --git a/packs/infinity/icons/mob/onmob/onmob_mask.dmi b/packs/infinity/icons/mob/onmob/onmob_mask.dmi new file mode 100644 index 0000000000000..7f316f223646c Binary files /dev/null and b/packs/infinity/icons/mob/onmob/onmob_mask.dmi differ diff --git a/packs/infinity/icons/mob/onmob/onmob_modular_armor.dmi b/packs/infinity/icons/mob/onmob/onmob_modular_armor.dmi new file mode 100644 index 0000000000000..4ccddac0e0a61 Binary files /dev/null and b/packs/infinity/icons/mob/onmob/onmob_modular_armor.dmi differ diff --git a/packs/infinity/icons/mob/onmob/onmob_rig_back.dmi b/packs/infinity/icons/mob/onmob/onmob_rig_back.dmi new file mode 100644 index 0000000000000..93f8618b931e7 Binary files /dev/null and b/packs/infinity/icons/mob/onmob/onmob_rig_back.dmi differ diff --git a/packs/infinity/icons/mob/onmob/onmob_under.dmi b/packs/infinity/icons/mob/onmob/onmob_under.dmi new file mode 100644 index 0000000000000..1369299873065 Binary files /dev/null and b/packs/infinity/icons/mob/onmob/onmob_under.dmi differ diff --git a/packs/infinity/icons/mob/onmob/onmob_wristwatch.dmi b/packs/infinity/icons/mob/onmob/onmob_wristwatch.dmi new file mode 100644 index 0000000000000..f353c55b05d8f Binary files /dev/null and b/packs/infinity/icons/mob/onmob/onmob_wristwatch.dmi differ diff --git a/packs/infinity/icons/mob/onmob/righthand.dmi b/packs/infinity/icons/mob/onmob/righthand.dmi new file mode 100644 index 0000000000000..a9c4d3456f358 Binary files /dev/null and b/packs/infinity/icons/mob/onmob/righthand.dmi differ diff --git a/packs/infinity/icons/mob/pai.dmi b/packs/infinity/icons/mob/pai.dmi new file mode 100644 index 0000000000000..0e6019df4d7dc Binary files /dev/null and b/packs/infinity/icons/mob/pai.dmi differ diff --git a/packs/infinity/icons/mob/radial/menu.dmi b/packs/infinity/icons/mob/radial/menu.dmi new file mode 100644 index 0000000000000..d2d032fbbb42c Binary files /dev/null and b/packs/infinity/icons/mob/radial/menu.dmi differ diff --git a/packs/infinity/icons/mob/robots.dmi b/packs/infinity/icons/mob/robots.dmi new file mode 100644 index 0000000000000..5c8a65d308bab Binary files /dev/null and b/packs/infinity/icons/mob/robots.dmi differ diff --git a/packs/infinity/icons/mob/robots_flying.dmi b/packs/infinity/icons/mob/robots_flying.dmi new file mode 100644 index 0000000000000..b751b0e9d1573 Binary files /dev/null and b/packs/infinity/icons/mob/robots_flying.dmi differ diff --git a/packs/infinity/icons/mob/screen/midnight-inf.dmi b/packs/infinity/icons/mob/screen/midnight-inf.dmi new file mode 100644 index 0000000000000..23548f3d7ccef Binary files /dev/null and b/packs/infinity/icons/mob/screen/midnight-inf.dmi differ diff --git a/packs/infinity/icons/mob/screen1_alien.dmi b/packs/infinity/icons/mob/screen1_alien.dmi new file mode 100644 index 0000000000000..d43ca5c777357 Binary files /dev/null and b/packs/infinity/icons/mob/screen1_alien.dmi differ diff --git a/packs/infinity/icons/mob/screen1_robot.dmi b/packs/infinity/icons/mob/screen1_robot.dmi new file mode 100644 index 0000000000000..f80c7a629e003 Binary files /dev/null and b/packs/infinity/icons/mob/screen1_robot.dmi differ diff --git a/packs/infinity/icons/mob/screen_ai.dmi b/packs/infinity/icons/mob/screen_ai.dmi new file mode 100644 index 0000000000000..993786b47d52d Binary files /dev/null and b/packs/infinity/icons/mob/screen_ai.dmi differ diff --git a/packs/infinity/icons/mob/screen_full.dmi b/packs/infinity/icons/mob/screen_full.dmi new file mode 100644 index 0000000000000..c19fccb49f2ba Binary files /dev/null and b/packs/infinity/icons/mob/screen_full.dmi differ diff --git a/packs/infinity/icons/mob/species/erosan/helmet.dmi b/packs/infinity/icons/mob/species/erosan/helmet.dmi new file mode 100644 index 0000000000000..87b80bda6e3e1 Binary files /dev/null and b/packs/infinity/icons/mob/species/erosan/helmet.dmi differ diff --git a/packs/infinity/icons/mob/species/erosan/mask.dmi b/packs/infinity/icons/mob/species/erosan/mask.dmi new file mode 100644 index 0000000000000..7ab7e358a9f89 Binary files /dev/null and b/packs/infinity/icons/mob/species/erosan/mask.dmi differ diff --git a/packs/infinity/icons/mob/species/erosan/suit.dmi b/packs/infinity/icons/mob/species/erosan/suit.dmi new file mode 100644 index 0000000000000..3611aba0ffb4b Binary files /dev/null and b/packs/infinity/icons/mob/species/erosan/suit.dmi differ diff --git a/packs/infinity/icons/mob/species/erosan/tail.dmi b/packs/infinity/icons/mob/species/erosan/tail.dmi new file mode 100644 index 0000000000000..d96d50c9b6d88 Binary files /dev/null and b/packs/infinity/icons/mob/species/erosan/tail.dmi differ diff --git a/packs/infinity/icons/mob/species/skrell/onmob_head_skrell.dmi b/packs/infinity/icons/mob/species/skrell/onmob_head_skrell.dmi new file mode 100644 index 0000000000000..09a7ceda32ccd Binary files /dev/null and b/packs/infinity/icons/mob/species/skrell/onmob_head_skrell.dmi differ diff --git a/packs/infinity/icons/mob/species/skrell/onmob_suit_skrell.dmi b/packs/infinity/icons/mob/species/skrell/onmob_suit_skrell.dmi new file mode 100644 index 0000000000000..6ccaea6f317ea Binary files /dev/null and b/packs/infinity/icons/mob/species/skrell/onmob_suit_skrell.dmi differ diff --git a/packs/infinity/icons/mob/species/tajaran/onmob_head_tajaran.dmi b/packs/infinity/icons/mob/species/tajaran/onmob_head_tajaran.dmi new file mode 100644 index 0000000000000..7a9c6e2c58cc4 Binary files /dev/null and b/packs/infinity/icons/mob/species/tajaran/onmob_head_tajaran.dmi differ diff --git a/packs/infinity/icons/mob/species/tajaran/onmob_suit_tajaran.dmi b/packs/infinity/icons/mob/species/tajaran/onmob_suit_tajaran.dmi new file mode 100644 index 0000000000000..4575f4c66eee7 Binary files /dev/null and b/packs/infinity/icons/mob/species/tajaran/onmob_suit_tajaran.dmi differ diff --git a/packs/infinity/icons/mob/species/unathi/onmob_head_unathi.dmi b/packs/infinity/icons/mob/species/unathi/onmob_head_unathi.dmi new file mode 100644 index 0000000000000..900bf8cef912e Binary files /dev/null and b/packs/infinity/icons/mob/species/unathi/onmob_head_unathi.dmi differ diff --git a/packs/infinity/icons/mob/species/unathi/onmob_mask_unathi.dmi b/packs/infinity/icons/mob/species/unathi/onmob_mask_unathi.dmi new file mode 100644 index 0000000000000..0bbcdb1631b47 Binary files /dev/null and b/packs/infinity/icons/mob/species/unathi/onmob_mask_unathi.dmi differ diff --git a/packs/infinity/icons/mob/species/unathi/onmob_suit_unathi.dmi b/packs/infinity/icons/mob/species/unathi/onmob_suit_unathi.dmi new file mode 100644 index 0000000000000..5f7a49bbc04b7 Binary files /dev/null and b/packs/infinity/icons/mob/species/unathi/onmob_suit_unathi.dmi differ diff --git a/packs/infinity/icons/mob/species/unathi/onmob_under_unathi.dmi b/packs/infinity/icons/mob/species/unathi/onmob_under_unathi.dmi new file mode 100644 index 0000000000000..3ec6bf22bf6c2 Binary files /dev/null and b/packs/infinity/icons/mob/species/unathi/onmob_under_unathi.dmi differ diff --git a/packs/infinity/icons/mob/species/unathi/suit.dmi b/packs/infinity/icons/mob/species/unathi/suit.dmi new file mode 100644 index 0000000000000..ef80325f5b681 Binary files /dev/null and b/packs/infinity/icons/mob/species/unathi/suit.dmi differ diff --git a/packs/infinity/icons/obj/Cryogenic2.dmi b/packs/infinity/icons/obj/Cryogenic2.dmi new file mode 100644 index 0000000000000..bb8a0eb76994f Binary files /dev/null and b/packs/infinity/icons/obj/Cryogenic2.dmi differ diff --git a/packs/infinity/icons/obj/abductor.dmi b/packs/infinity/icons/obj/abductor.dmi new file mode 100644 index 0000000000000..fddbd4e76e962 Binary files /dev/null and b/packs/infinity/icons/obj/abductor.dmi differ diff --git a/packs/infinity/icons/obj/action_buttons/changeling.dmi b/packs/infinity/icons/obj/action_buttons/changeling.dmi new file mode 100644 index 0000000000000..18936f9def684 Binary files /dev/null and b/packs/infinity/icons/obj/action_buttons/changeling.dmi differ diff --git a/packs/infinity/icons/obj/action_buttons/changeling_new.dmi b/packs/infinity/icons/obj/action_buttons/changeling_new.dmi new file mode 100644 index 0000000000000..2933a86b9c57c Binary files /dev/null and b/packs/infinity/icons/obj/action_buttons/changeling_new.dmi differ diff --git a/packs/infinity/icons/obj/airbag.dmi b/packs/infinity/icons/obj/airbag.dmi new file mode 100644 index 0000000000000..e7e3921ce8416 Binary files /dev/null and b/packs/infinity/icons/obj/airbag.dmi differ diff --git a/packs/infinity/icons/obj/ammo.dmi b/packs/infinity/icons/obj/ammo.dmi new file mode 100644 index 0000000000000..f681a7a7562b8 Binary files /dev/null and b/packs/infinity/icons/obj/ammo.dmi differ diff --git a/packs/infinity/icons/obj/assemblies.dmi b/packs/infinity/icons/obj/assemblies.dmi new file mode 100644 index 0000000000000..0ca55c6bb1f52 Binary files /dev/null and b/packs/infinity/icons/obj/assemblies.dmi differ diff --git a/packs/infinity/icons/obj/atmos.dmi b/packs/infinity/icons/obj/atmos.dmi new file mode 100644 index 0000000000000..c38779ef4ccbd Binary files /dev/null and b/packs/infinity/icons/obj/atmos.dmi differ diff --git a/packs/infinity/icons/obj/barrier.dmi b/packs/infinity/icons/obj/barrier.dmi new file mode 100644 index 0000000000000..e532df94fdc00 Binary files /dev/null and b/packs/infinity/icons/obj/barrier.dmi differ diff --git a/packs/infinity/icons/obj/bs_silk_extracter.dmi b/packs/infinity/icons/obj/bs_silk_extracter.dmi new file mode 100644 index 0000000000000..ff93cc0bfa67b Binary files /dev/null and b/packs/infinity/icons/obj/bs_silk_extracter.dmi differ diff --git a/packs/infinity/icons/obj/bureaucracy.dmi b/packs/infinity/icons/obj/bureaucracy.dmi new file mode 100644 index 0000000000000..d74534a67315d Binary files /dev/null and b/packs/infinity/icons/obj/bureaucracy.dmi differ diff --git a/packs/infinity/icons/obj/changeling.dmi b/packs/infinity/icons/obj/changeling.dmi new file mode 100644 index 0000000000000..d8689d522507f Binary files /dev/null and b/packs/infinity/icons/obj/changeling.dmi differ diff --git a/packs/infinity/icons/obj/chemical.dmi b/packs/infinity/icons/obj/chemical.dmi new file mode 100644 index 0000000000000..e63b41bd76a2b Binary files /dev/null and b/packs/infinity/icons/obj/chemical.dmi differ diff --git a/packs/infinity/icons/obj/christmas.dmi b/packs/infinity/icons/obj/christmas.dmi new file mode 100644 index 0000000000000..f97d1eadc7edd Binary files /dev/null and b/packs/infinity/icons/obj/christmas.dmi differ diff --git a/packs/infinity/icons/obj/closets/closets.dmi b/packs/infinity/icons/obj/closets/closets.dmi new file mode 100644 index 0000000000000..a14a77fe21a8c Binary files /dev/null and b/packs/infinity/icons/obj/closets/closets.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/accessories.dmi b/packs/infinity/icons/obj/clothing/TG_copy/accessories.dmi new file mode 100644 index 0000000000000..c0756a9f73df0 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/accessories.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/ballets.dmi b/packs/infinity/icons/obj/clothing/TG_copy/ballets.dmi new file mode 100644 index 0000000000000..7b3ee647de81a Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/ballets.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/belt_overlays.dmi b/packs/infinity/icons/obj/clothing/TG_copy/belt_overlays.dmi new file mode 100644 index 0000000000000..bbd4df9bb00e8 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/belt_overlays.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/belts.dmi b/packs/infinity/icons/obj/clothing/TG_copy/belts.dmi new file mode 100644 index 0000000000000..473f2b8573e23 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/belts.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/cloaks.dmi b/packs/infinity/icons/obj/clothing/TG_copy/cloaks.dmi new file mode 100644 index 0000000000000..dd1ae7d727541 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/cloaks.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/clockwork_garb.dmi b/packs/infinity/icons/obj/clothing/TG_copy/clockwork_garb.dmi new file mode 100644 index 0000000000000..23e5b979e2c50 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/clockwork_garb.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/flightsuit.dmi b/packs/infinity/icons/obj/clothing/TG_copy/flightsuit.dmi new file mode 100644 index 0000000000000..e08e74db1cecf Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/flightsuit.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/glasses.dmi b/packs/infinity/icons/obj/clothing/TG_copy/glasses.dmi new file mode 100644 index 0000000000000..1152b395abb06 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/glasses.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/gloves.dmi b/packs/infinity/icons/obj/clothing/TG_copy/gloves.dmi new file mode 100644 index 0000000000000..48f37887cf05f Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/gloves.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/hats.dmi b/packs/infinity/icons/obj/clothing/TG_copy/hats.dmi new file mode 100644 index 0000000000000..933410bbc53fa Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/hats.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/infinity_inriss.dmi b/packs/infinity/icons/obj/clothing/TG_copy/infinity_inriss.dmi new file mode 100644 index 0000000000000..00810c0a2552d Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/infinity_inriss.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/infinity_work.dmi b/packs/infinity/icons/obj/clothing/TG_copy/infinity_work.dmi new file mode 100644 index 0000000000000..bf3f4ce56f2eb Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/infinity_work.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/masks.dmi b/packs/infinity/icons/obj/clothing/TG_copy/masks.dmi new file mode 100644 index 0000000000000..752a0a00ece4e Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/masks.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/neck.dmi b/packs/infinity/icons/obj/clothing/TG_copy/neck.dmi new file mode 100644 index 0000000000000..0f3668ce102b1 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/neck.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/paradise.dmi b/packs/infinity/icons/obj/clothing/TG_copy/paradise.dmi new file mode 100644 index 0000000000000..8716c5c217750 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/paradise.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/shoes.dmi b/packs/infinity/icons/obj/clothing/TG_copy/shoes.dmi new file mode 100644 index 0000000000000..77b62691d2416 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/shoes.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/suits.dmi b/packs/infinity/icons/obj/clothing/TG_copy/suits.dmi new file mode 100644 index 0000000000000..b30a9895c1bd5 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/suits.dmi differ diff --git a/packs/infinity/icons/obj/clothing/TG_copy/uniforms.dmi b/packs/infinity/icons/obj/clothing/TG_copy/uniforms.dmi new file mode 100644 index 0000000000000..90c60194d5d58 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/TG_copy/uniforms.dmi differ diff --git a/packs/infinity/icons/obj/clothing/hats_onmob.dmi b/packs/infinity/icons/obj/clothing/hats_onmob.dmi new file mode 100644 index 0000000000000..823207503c322 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/hats_onmob.dmi differ diff --git a/packs/infinity/icons/obj/clothing/misc.dmi b/packs/infinity/icons/obj/clothing/misc.dmi new file mode 100644 index 0000000000000..7d70404ade531 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/misc.dmi differ diff --git a/packs/infinity/icons/obj/clothing/obj_accessories.dmi b/packs/infinity/icons/obj/clothing/obj_accessories.dmi new file mode 100644 index 0000000000000..8da54271eaa6d Binary files /dev/null and b/packs/infinity/icons/obj/clothing/obj_accessories.dmi differ diff --git a/packs/infinity/icons/obj/clothing/obj_accessory_hand.dmi b/packs/infinity/icons/obj/clothing/obj_accessory_hand.dmi new file mode 100644 index 0000000000000..9922e66bf3b67 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/obj_accessory_hand.dmi differ diff --git a/packs/infinity/icons/obj/clothing/obj_belt.dmi b/packs/infinity/icons/obj/clothing/obj_belt.dmi new file mode 100644 index 0000000000000..54d61d63b69cd Binary files /dev/null and b/packs/infinity/icons/obj/clothing/obj_belt.dmi differ diff --git a/packs/infinity/icons/obj/clothing/obj_ears.dmi b/packs/infinity/icons/obj/clothing/obj_ears.dmi new file mode 100644 index 0000000000000..12abf87f6801e Binary files /dev/null and b/packs/infinity/icons/obj/clothing/obj_ears.dmi differ diff --git a/packs/infinity/icons/obj/clothing/obj_eyes.dmi b/packs/infinity/icons/obj/clothing/obj_eyes.dmi new file mode 100644 index 0000000000000..d8e7cd354abe1 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/obj_eyes.dmi differ diff --git a/packs/infinity/icons/obj/clothing/obj_mask.dmi b/packs/infinity/icons/obj/clothing/obj_mask.dmi new file mode 100644 index 0000000000000..df4848176d624 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/obj_mask.dmi differ diff --git a/packs/infinity/icons/obj/clothing/obj_under.dmi b/packs/infinity/icons/obj/clothing/obj_under.dmi new file mode 100644 index 0000000000000..851673d868b23 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/obj_under.dmi differ diff --git a/packs/infinity/icons/obj/clothing/species/erosan/hats.dmi b/packs/infinity/icons/obj/clothing/species/erosan/hats.dmi new file mode 100644 index 0000000000000..1bad17757f730 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/species/erosan/hats.dmi differ diff --git a/packs/infinity/icons/obj/clothing/species/erosan/suits.dmi b/packs/infinity/icons/obj/clothing/species/erosan/suits.dmi new file mode 100644 index 0000000000000..de6e11e2161e3 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/species/erosan/suits.dmi differ diff --git a/packs/infinity/icons/obj/clothing/species/resomi/obj_accessories_resomi.dmi b/packs/infinity/icons/obj/clothing/species/resomi/obj_accessories_resomi.dmi new file mode 100644 index 0000000000000..eb7407e817324 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/species/resomi/obj_accessories_resomi.dmi differ diff --git a/packs/infinity/icons/obj/clothing/species/resomi/obj_eyes_resomi.dmi b/packs/infinity/icons/obj/clothing/species/resomi/obj_eyes_resomi.dmi new file mode 100644 index 0000000000000..2fb326057d213 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/species/resomi/obj_eyes_resomi.dmi differ diff --git a/packs/infinity/icons/obj/clothing/species/resomi/obj_feet_resomi.dmi b/packs/infinity/icons/obj/clothing/species/resomi/obj_feet_resomi.dmi new file mode 100644 index 0000000000000..cc5b52eb4f143 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/species/resomi/obj_feet_resomi.dmi differ diff --git a/packs/infinity/icons/obj/clothing/species/resomi/obj_head_resomi.dmi b/packs/infinity/icons/obj/clothing/species/resomi/obj_head_resomi.dmi new file mode 100644 index 0000000000000..6506bd6d686b0 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/species/resomi/obj_head_resomi.dmi differ diff --git a/packs/infinity/icons/obj/clothing/species/resomi/obj_suit_resomi.dmi b/packs/infinity/icons/obj/clothing/species/resomi/obj_suit_resomi.dmi new file mode 100644 index 0000000000000..0446062530f2b Binary files /dev/null and b/packs/infinity/icons/obj/clothing/species/resomi/obj_suit_resomi.dmi differ diff --git a/packs/infinity/icons/obj/clothing/species/resomi/obj_under_resomi.dmi b/packs/infinity/icons/obj/clothing/species/resomi/obj_under_resomi.dmi new file mode 100644 index 0000000000000..ebf3d8ebfef3f Binary files /dev/null and b/packs/infinity/icons/obj/clothing/species/resomi/obj_under_resomi.dmi differ diff --git a/packs/infinity/icons/obj/clothing/species/skrell/obj_head_skrell.dmi b/packs/infinity/icons/obj/clothing/species/skrell/obj_head_skrell.dmi new file mode 100644 index 0000000000000..e4091d2d952eb Binary files /dev/null and b/packs/infinity/icons/obj/clothing/species/skrell/obj_head_skrell.dmi differ diff --git a/packs/infinity/icons/obj/clothing/species/skrell/obj_suit_skrell.dmi b/packs/infinity/icons/obj/clothing/species/skrell/obj_suit_skrell.dmi new file mode 100644 index 0000000000000..20e608cd7780e Binary files /dev/null and b/packs/infinity/icons/obj/clothing/species/skrell/obj_suit_skrell.dmi differ diff --git a/packs/infinity/icons/obj/clothing/species/unathi/obj_head_unathi.dmi b/packs/infinity/icons/obj/clothing/species/unathi/obj_head_unathi.dmi new file mode 100644 index 0000000000000..07a6149d1bef7 Binary files /dev/null and b/packs/infinity/icons/obj/clothing/species/unathi/obj_head_unathi.dmi differ diff --git a/packs/infinity/icons/obj/clothing/species/unathi/obj_suit_unathi.dmi b/packs/infinity/icons/obj/clothing/species/unathi/obj_suit_unathi.dmi new file mode 100644 index 0000000000000..a613477d70cba Binary files /dev/null and b/packs/infinity/icons/obj/clothing/species/unathi/obj_suit_unathi.dmi differ diff --git a/packs/infinity/icons/obj/clothing/voidsuits.dmi b/packs/infinity/icons/obj/clothing/voidsuits.dmi new file mode 100644 index 0000000000000..05e513a18a04b Binary files /dev/null and b/packs/infinity/icons/obj/clothing/voidsuits.dmi differ diff --git a/packs/infinity/icons/obj/decals.dmi b/packs/infinity/icons/obj/decals.dmi new file mode 100644 index 0000000000000..9d7e5673b88a5 Binary files /dev/null and b/packs/infinity/icons/obj/decals.dmi differ diff --git a/packs/infinity/icons/obj/device.dmi b/packs/infinity/icons/obj/device.dmi new file mode 100644 index 0000000000000..689ab4bf94a3b Binary files /dev/null and b/packs/infinity/icons/obj/device.dmi differ diff --git a/packs/infinity/icons/obj/doors/hazard/border/door.dmi b/packs/infinity/icons/obj/doors/hazard/border/door.dmi new file mode 100644 index 0000000000000..f063fd7b34c83 Binary files /dev/null and b/packs/infinity/icons/obj/doors/hazard/border/door.dmi differ diff --git a/packs/infinity/icons/obj/doors/hazard/border/welded.dmi b/packs/infinity/icons/obj/doors/hazard/border/welded.dmi new file mode 100644 index 0000000000000..4774fcd7d974c Binary files /dev/null and b/packs/infinity/icons/obj/doors/hazard/border/welded.dmi differ diff --git a/packs/infinity/icons/obj/doors/unused/bluebrig/Doorsec.dmi b/packs/infinity/icons/obj/doors/unused/bluebrig/Doorsec.dmi new file mode 100644 index 0000000000000..04f78fee82e14 Binary files /dev/null and b/packs/infinity/icons/obj/doors/unused/bluebrig/Doorsec.dmi differ diff --git a/packs/infinity/icons/obj/doors/unused/bluebrig/Doorsecglass.dmi b/packs/infinity/icons/obj/doors/unused/bluebrig/Doorsecglass.dmi new file mode 100644 index 0000000000000..78c8f2ac06ef4 Binary files /dev/null and b/packs/infinity/icons/obj/doors/unused/bluebrig/Doorsecglass.dmi differ diff --git a/packs/infinity/icons/obj/doors/unused/bluebrig/door_assembly.dmi b/packs/infinity/icons/obj/doors/unused/bluebrig/door_assembly.dmi new file mode 100644 index 0000000000000..a7fb03bbe3c31 Binary files /dev/null and b/packs/infinity/icons/obj/doors/unused/bluebrig/door_assembly.dmi differ diff --git a/packs/infinity/icons/obj/food.dmi b/packs/infinity/icons/obj/food.dmi new file mode 100644 index 0000000000000..88435d8b1eb2d Binary files /dev/null and b/packs/infinity/icons/obj/food.dmi differ diff --git a/packs/infinity/icons/obj/forensics.dmi b/packs/infinity/icons/obj/forensics.dmi new file mode 100644 index 0000000000000..211f0b60a33b5 Binary files /dev/null and b/packs/infinity/icons/obj/forensics.dmi differ diff --git a/packs/infinity/icons/obj/grenades.dmi b/packs/infinity/icons/obj/grenades.dmi new file mode 100644 index 0000000000000..d7ebfec0bf4cb Binary files /dev/null and b/packs/infinity/icons/obj/grenades.dmi differ diff --git a/packs/infinity/icons/obj/guns.dmi b/packs/infinity/icons/obj/guns.dmi new file mode 100644 index 0000000000000..38379fc3b90f1 Binary files /dev/null and b/packs/infinity/icons/obj/guns.dmi differ diff --git a/packs/infinity/icons/obj/guns/custom_lasgun.dmi b/packs/infinity/icons/obj/guns/custom_lasgun.dmi new file mode 100644 index 0000000000000..456717fc6772d Binary files /dev/null and b/packs/infinity/icons/obj/guns/custom_lasgun.dmi differ diff --git a/packs/infinity/icons/obj/guns/ion_rifle.dmi b/packs/infinity/icons/obj/guns/ion_rifle.dmi new file mode 100644 index 0000000000000..3b6a641dee2c1 Binary files /dev/null and b/packs/infinity/icons/obj/guns/ion_rifle.dmi differ diff --git a/packs/infinity/icons/obj/guns/lkw.dmi b/packs/infinity/icons/obj/guns/lkw.dmi new file mode 100644 index 0000000000000..81675f7b675c3 Binary files /dev/null and b/packs/infinity/icons/obj/guns/lkw.dmi differ diff --git a/packs/infinity/icons/obj/guns/pistol_throwback.dmi b/packs/infinity/icons/obj/guns/pistol_throwback.dmi new file mode 100644 index 0000000000000..895be6730da84 Binary files /dev/null and b/packs/infinity/icons/obj/guns/pistol_throwback.dmi differ diff --git a/packs/infinity/icons/obj/guns/xr36.dmi b/packs/infinity/icons/obj/guns/xr36.dmi new file mode 100644 index 0000000000000..9ecb3f2928ae5 Binary files /dev/null and b/packs/infinity/icons/obj/guns/xr36.dmi differ diff --git a/packs/infinity/icons/obj/hud_full.dmi b/packs/infinity/icons/obj/hud_full.dmi new file mode 100644 index 0000000000000..5d71b164f7ec9 Binary files /dev/null and b/packs/infinity/icons/obj/hud_full.dmi differ diff --git a/packs/infinity/icons/obj/item/coal.dmi b/packs/infinity/icons/obj/item/coal.dmi new file mode 100644 index 0000000000000..a7daac79b8cdd Binary files /dev/null and b/packs/infinity/icons/obj/item/coal.dmi differ diff --git a/packs/infinity/icons/obj/item/hookah.dmi b/packs/infinity/icons/obj/item/hookah.dmi new file mode 100644 index 0000000000000..42ea780903d0e Binary files /dev/null and b/packs/infinity/icons/obj/item/hookah.dmi differ diff --git a/packs/infinity/icons/obj/items.dmi b/packs/infinity/icons/obj/items.dmi new file mode 100644 index 0000000000000..81b20a79463a0 Binary files /dev/null and b/packs/infinity/icons/obj/items.dmi differ diff --git a/packs/infinity/icons/obj/jukebox.dmi b/packs/infinity/icons/obj/jukebox.dmi new file mode 100644 index 0000000000000..28014984d9402 Binary files /dev/null and b/packs/infinity/icons/obj/jukebox.dmi differ diff --git a/packs/infinity/icons/obj/lighting_inf.dmi b/packs/infinity/icons/obj/lighting_inf.dmi new file mode 100644 index 0000000000000..d1aa7866cc155 Binary files /dev/null and b/packs/infinity/icons/obj/lighting_inf.dmi differ diff --git a/packs/infinity/icons/obj/machinery/ai_slipper.dmi b/packs/infinity/icons/obj/machinery/ai_slipper.dmi new file mode 100644 index 0000000000000..47f09ed615601 Binary files /dev/null and b/packs/infinity/icons/obj/machinery/ai_slipper.dmi differ diff --git a/packs/infinity/icons/obj/machinery/disk_writer.dmi b/packs/infinity/icons/obj/machinery/disk_writer.dmi new file mode 100644 index 0000000000000..90d535772a211 Binary files /dev/null and b/packs/infinity/icons/obj/machinery/disk_writer.dmi differ diff --git a/packs/infinity/icons/obj/machinery/disposal_small.dmi b/packs/infinity/icons/obj/machinery/disposal_small.dmi new file mode 100644 index 0000000000000..91b356aa8fa72 Binary files /dev/null and b/packs/infinity/icons/obj/machinery/disposal_small.dmi differ diff --git a/packs/infinity/icons/obj/machinery/neon.dmi b/packs/infinity/icons/obj/machinery/neon.dmi new file mode 100644 index 0000000000000..5e96a3c964efd Binary files /dev/null and b/packs/infinity/icons/obj/machinery/neon.dmi differ diff --git a/packs/infinity/icons/obj/machines/bluespace_drive.dmi b/packs/infinity/icons/obj/machines/bluespace_drive.dmi new file mode 100644 index 0000000000000..5c6591b75a82f Binary files /dev/null and b/packs/infinity/icons/obj/machines/bluespace_drive.dmi differ diff --git a/packs/infinity/icons/obj/machines/crusher_base.dmi b/packs/infinity/icons/obj/machines/crusher_base.dmi new file mode 100644 index 0000000000000..cea8c97a4cbdf Binary files /dev/null and b/packs/infinity/icons/obj/machines/crusher_base.dmi differ diff --git a/packs/infinity/icons/obj/machines/gravity_gen.dmi b/packs/infinity/icons/obj/machines/gravity_gen.dmi new file mode 100644 index 0000000000000..139ce602953e2 Binary files /dev/null and b/packs/infinity/icons/obj/machines/gravity_gen.dmi differ diff --git a/packs/infinity/icons/obj/machines/metal_detector.dmi b/packs/infinity/icons/obj/machines/metal_detector.dmi new file mode 100644 index 0000000000000..50b072950b3d2 Binary files /dev/null and b/packs/infinity/icons/obj/machines/metal_detector.dmi differ diff --git a/packs/infinity/icons/obj/meter.dmi b/packs/infinity/icons/obj/meter.dmi new file mode 100644 index 0000000000000..6fb7fd36568cc Binary files /dev/null and b/packs/infinity/icons/obj/meter.dmi differ diff --git a/packs/infinity/icons/obj/mine.dmi b/packs/infinity/icons/obj/mine.dmi new file mode 100644 index 0000000000000..387bd37b76b1e Binary files /dev/null and b/packs/infinity/icons/obj/mine.dmi differ diff --git a/packs/infinity/icons/obj/mobile_ladder.dmi b/packs/infinity/icons/obj/mobile_ladder.dmi new file mode 100644 index 0000000000000..917c4a4e8edd1 Binary files /dev/null and b/packs/infinity/icons/obj/mobile_ladder.dmi differ diff --git a/packs/infinity/icons/obj/modular_backup.dmi b/packs/infinity/icons/obj/modular_backup.dmi new file mode 100644 index 0000000000000..097244be1ae5b Binary files /dev/null and b/packs/infinity/icons/obj/modular_backup.dmi differ diff --git a/packs/infinity/icons/obj/monitors.dmi b/packs/infinity/icons/obj/monitors.dmi new file mode 100644 index 0000000000000..906bab23dfc12 Binary files /dev/null and b/packs/infinity/icons/obj/monitors.dmi differ diff --git a/packs/infinity/icons/obj/noose.dmi b/packs/infinity/icons/obj/noose.dmi new file mode 100644 index 0000000000000..a693638f17887 Binary files /dev/null and b/packs/infinity/icons/obj/noose.dmi differ diff --git a/packs/infinity/icons/obj/objects.dmi b/packs/infinity/icons/obj/objects.dmi new file mode 100644 index 0000000000000..a9de8491a4007 Binary files /dev/null and b/packs/infinity/icons/obj/objects.dmi differ diff --git a/packs/infinity/icons/obj/p_weapon.dmi b/packs/infinity/icons/obj/p_weapon.dmi new file mode 100644 index 0000000000000..d7de361bfc5fe Binary files /dev/null and b/packs/infinity/icons/obj/p_weapon.dmi differ diff --git a/packs/infinity/icons/obj/paimod.dmi b/packs/infinity/icons/obj/paimod.dmi new file mode 100644 index 0000000000000..5767b4e6b84f7 Binary files /dev/null and b/packs/infinity/icons/obj/paimod.dmi differ diff --git a/packs/infinity/icons/obj/plants.dmi b/packs/infinity/icons/obj/plants.dmi new file mode 100644 index 0000000000000..219845edc2a34 Binary files /dev/null and b/packs/infinity/icons/obj/plants.dmi differ diff --git a/packs/infinity/icons/obj/power.dmi b/packs/infinity/icons/obj/power.dmi new file mode 100644 index 0000000000000..4646993676d1c Binary files /dev/null and b/packs/infinity/icons/obj/power.dmi differ diff --git a/packs/infinity/icons/obj/rped_bs.dmi b/packs/infinity/icons/obj/rped_bs.dmi new file mode 100644 index 0000000000000..2f66fd3d0a381 Binary files /dev/null and b/packs/infinity/icons/obj/rped_bs.dmi differ diff --git a/packs/infinity/icons/obj/rubble.dmi b/packs/infinity/icons/obj/rubble.dmi new file mode 100644 index 0000000000000..4b3e7f68040f7 Binary files /dev/null and b/packs/infinity/icons/obj/rubble.dmi differ diff --git a/packs/infinity/icons/obj/screen/fullscreen/noise_grains.dmi b/packs/infinity/icons/obj/screen/fullscreen/noise_grains.dmi new file mode 100644 index 0000000000000..6f81acb8c4748 Binary files /dev/null and b/packs/infinity/icons/obj/screen/fullscreen/noise_grains.dmi differ diff --git a/packs/infinity/icons/obj/screen/fullscreen/turret_matrix.dmi b/packs/infinity/icons/obj/screen/fullscreen/turret_matrix.dmi new file mode 100644 index 0000000000000..ac09b7b5fd28f Binary files /dev/null and b/packs/infinity/icons/obj/screen/fullscreen/turret_matrix.dmi differ diff --git a/packs/infinity/icons/obj/singularity.dmi b/packs/infinity/icons/obj/singularity.dmi new file mode 100644 index 0000000000000..9b975a7aecb5c Binary files /dev/null and b/packs/infinity/icons/obj/singularity.dmi differ diff --git a/packs/infinity/icons/obj/stationobjs.dmi b/packs/infinity/icons/obj/stationobjs.dmi new file mode 100644 index 0000000000000..42c83536b8db1 Binary files /dev/null and b/packs/infinity/icons/obj/stationobjs.dmi differ diff --git a/packs/infinity/icons/obj/statue_cage.dmi b/packs/infinity/icons/obj/statue_cage.dmi new file mode 100644 index 0000000000000..cb5fc9792bc57 Binary files /dev/null and b/packs/infinity/icons/obj/statue_cage.dmi differ diff --git a/packs/infinity/icons/obj/status_display.dmi b/packs/infinity/icons/obj/status_display.dmi new file mode 100644 index 0000000000000..87b3bec326ef0 Binary files /dev/null and b/packs/infinity/icons/obj/status_display.dmi differ diff --git a/packs/infinity/icons/obj/storage.dmi b/packs/infinity/icons/obj/storage.dmi new file mode 100644 index 0000000000000..3a6ee9836667a Binary files /dev/null and b/packs/infinity/icons/obj/storage.dmi differ diff --git a/packs/infinity/icons/obj/structures/holoplants.dmi b/packs/infinity/icons/obj/structures/holoplants.dmi new file mode 100644 index 0000000000000..1446559d23672 Binary files /dev/null and b/packs/infinity/icons/obj/structures/holoplants.dmi differ diff --git a/packs/infinity/icons/obj/suitstorage.dmi b/packs/infinity/icons/obj/suitstorage.dmi new file mode 100644 index 0000000000000..5efd56b074ebf Binary files /dev/null and b/packs/infinity/icons/obj/suitstorage.dmi differ diff --git a/packs/infinity/icons/obj/tables.dmi b/packs/infinity/icons/obj/tables.dmi new file mode 100644 index 0000000000000..4ba6d51bd9d09 Binary files /dev/null and b/packs/infinity/icons/obj/tables.dmi differ diff --git a/packs/infinity/icons/obj/terminals_holo.dmi b/packs/infinity/icons/obj/terminals_holo.dmi new file mode 100644 index 0000000000000..21659e5bd5f59 Binary files /dev/null and b/packs/infinity/icons/obj/terminals_holo.dmi differ diff --git a/packs/infinity/icons/obj/throwers.dmi b/packs/infinity/icons/obj/throwers.dmi new file mode 100644 index 0000000000000..65f4e76ec024a Binary files /dev/null and b/packs/infinity/icons/obj/throwers.dmi differ diff --git a/packs/infinity/icons/obj/toy.dmi b/packs/infinity/icons/obj/toy.dmi new file mode 100644 index 0000000000000..926bc3f73f47e Binary files /dev/null and b/packs/infinity/icons/obj/toy.dmi differ diff --git a/packs/infinity/icons/obj/vending.dmi b/packs/infinity/icons/obj/vending.dmi new file mode 100644 index 0000000000000..53c13848aede5 Binary files /dev/null and b/packs/infinity/icons/obj/vending.dmi differ diff --git a/packs/infinity/icons/obj/wallet.dmi b/packs/infinity/icons/obj/wallet.dmi new file mode 100644 index 0000000000000..119d956183b38 Binary files /dev/null and b/packs/infinity/icons/obj/wallet.dmi differ diff --git a/packs/infinity/icons/obj/weaponparts.dmi b/packs/infinity/icons/obj/weaponparts.dmi new file mode 100644 index 0000000000000..70237c2786258 Binary files /dev/null and b/packs/infinity/icons/obj/weaponparts.dmi differ diff --git a/packs/infinity/icons/obj/weapons.dmi b/packs/infinity/icons/obj/weapons.dmi new file mode 100644 index 0000000000000..8486904bcc08f Binary files /dev/null and b/packs/infinity/icons/obj/weapons.dmi differ diff --git a/packs/infinity/icons/obj/wizard.dmi b/packs/infinity/icons/obj/wizard.dmi new file mode 100644 index 0000000000000..5f7d26b5106d1 Binary files /dev/null and b/packs/infinity/icons/obj/wizard.dmi differ diff --git a/packs/infinity/icons/skybox/beige_nebula.dmi b/packs/infinity/icons/skybox/beige_nebula.dmi new file mode 100644 index 0000000000000..02eba31060a32 Binary files /dev/null and b/packs/infinity/icons/skybox/beige_nebula.dmi differ diff --git a/packs/infinity/icons/skybox/green_nebula_river.dmi b/packs/infinity/icons/skybox/green_nebula_river.dmi new file mode 100644 index 0000000000000..ff9b4cda2c675 Binary files /dev/null and b/packs/infinity/icons/skybox/green_nebula_river.dmi differ diff --git a/packs/infinity/icons/skybox/purple_nebula.dmi b/packs/infinity/icons/skybox/purple_nebula.dmi new file mode 100644 index 0000000000000..078ef6209c1f2 Binary files /dev/null and b/packs/infinity/icons/skybox/purple_nebula.dmi differ diff --git a/packs/infinity/icons/skybox/star_in_far.dmi b/packs/infinity/icons/skybox/star_in_far.dmi new file mode 100644 index 0000000000000..812abb948d92e Binary files /dev/null and b/packs/infinity/icons/skybox/star_in_far.dmi differ diff --git a/packs/infinity/icons/skybox/star_near.dmi b/packs/infinity/icons/skybox/star_near.dmi new file mode 100644 index 0000000000000..0577704f9e70d Binary files /dev/null and b/packs/infinity/icons/skybox/star_near.dmi differ diff --git a/packs/infinity/icons/skybox/turqoize_nebula.dmi b/packs/infinity/icons/skybox/turqoize_nebula.dmi new file mode 100644 index 0000000000000..56a5b5d54b368 Binary files /dev/null and b/packs/infinity/icons/skybox/turqoize_nebula.dmi differ diff --git a/packs/infinity/icons/sortthisplease/infinity_work.dmi b/packs/infinity/icons/sortthisplease/infinity_work.dmi new file mode 100644 index 0000000000000..d134bf8f840ee Binary files /dev/null and b/packs/infinity/icons/sortthisplease/infinity_work.dmi differ diff --git a/packs/infinity/icons/sortthisplease/suit.dmi b/packs/infinity/icons/sortthisplease/suit.dmi new file mode 100644 index 0000000000000..f7c8e1b8dcac2 Binary files /dev/null and b/packs/infinity/icons/sortthisplease/suit.dmi differ diff --git a/packs/infinity/icons/sortthisplease/uniform.dmi b/packs/infinity/icons/sortthisplease/uniform.dmi new file mode 100644 index 0000000000000..ef7f594c70843 Binary files /dev/null and b/packs/infinity/icons/sortthisplease/uniform.dmi differ diff --git a/packs/infinity/icons/tooltip.dmi b/packs/infinity/icons/tooltip.dmi new file mode 100644 index 0000000000000..97f1968078c4a Binary files /dev/null and b/packs/infinity/icons/tooltip.dmi differ diff --git a/packs/infinity/icons/turf/abductors.dmi b/packs/infinity/icons/turf/abductors.dmi new file mode 100644 index 0000000000000..97391a82abc08 Binary files /dev/null and b/packs/infinity/icons/turf/abductors.dmi differ diff --git a/packs/infinity/icons/turf/flooring/decals.dmi b/packs/infinity/icons/turf/flooring/decals.dmi new file mode 100644 index 0000000000000..2d5f038c84d48 Binary files /dev/null and b/packs/infinity/icons/turf/flooring/decals.dmi differ diff --git a/packs/infinity/icons/turf/salvage_areas.dmi b/packs/infinity/icons/turf/salvage_areas.dmi new file mode 100644 index 0000000000000..5fe712f9a9dd2 Binary files /dev/null and b/packs/infinity/icons/turf/salvage_areas.dmi differ diff --git a/packs/infinity/interactions/face_wash.dm b/packs/infinity/interactions/face_wash.dm new file mode 100644 index 0000000000000..be190ebf5c45f --- /dev/null +++ b/packs/infinity/interactions/face_wash.dm @@ -0,0 +1,60 @@ +/obj/item/organ/external/head/proc/remove_graffiti() + forehead_graffiti = null + graffiti_style = null + +// And after commiting whis warcrime, we can finaly wash our face + +/obj/structure/hygiene/sink/attack_hand(mob/user) + var/graffiti = FALSE + var/target_part = "hands" + if (ishuman(user) && user.client) + var/mob/living/carbon/human/H = user + var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND] + var/target_zone = H.zone_sel.selecting + if((target_zone == BP_HEAD) && (H.organs_by_name[BP_HEAD])) + target_part = "face" + var/obj/item/organ/external/head/HD = H.organs_by_name[BP_HEAD] + if(HD.forehead_graffiti) + graffiti = TRUE + if (user.hand) + temp = H.organs_by_name[BP_L_HAND] + if(temp && !temp.is_usable()) + to_chat(user,"You try to move your [temp.name], but cannot!") + return + + if(isrobot(user) || isAI(user)) + return + + if(!Adjacent(user)) + return + + if(busy) + to_chat(user, "Someone's already washing here.") + return + + if(graffiti) + to_chat(usr, "You start removing your graffiti and washing your [target_part].") + else + to_chat(usr, "You start washing your [target_part].") + + playsound(loc, 'sound/effects/sink_long.ogg', 75, 1) + + busy = TRUE + if(!do_after(user, 40, src)) + busy = FALSE + return TRUE + busy = FALSE + + user.clean_blood() + if(ishuman(user)) + user:update_inv_gloves() + if(graffiti) + user.visible_message("[user] washes their [target_part] and forehead using \the [src].") + else + user.visible_message("[user] washes their [target_part] using \the [src].") + + if(graffiti) + var/mob/living/carbon/human/H = user + var/obj/item/organ/external/head/I = H.organs_by_name[BP_HEAD] + I.remove_graffiti() + graffiti = FALSE diff --git a/packs/infinity/interactions/glup_down.dm b/packs/infinity/interactions/glup_down.dm new file mode 100644 index 0000000000000..fbba5d0498b93 --- /dev/null +++ b/packs/infinity/interactions/glup_down.dm @@ -0,0 +1,42 @@ +/obj/item/reagent_containers/food/drinks/Initialize() + . = ..() + if(is_open_container()) + verbs += /obj/item/reagent_containers/food/drinks/proc/gulp_whole + +/obj/item/reagent_containers/food/drinks/proc/gulp_whole() + set category = "Object" + set name = "Gulp Down" + set src in view(1) + + if(!istype(usr.get_active_hand(), src)) + FEEDBACK_FAILURE(usr, "You need to hold \the [src] in hands!") + return + + if(is_open_container()) + if(!reagents || reagents.total_volume == 0) + to_chat(usr, "\The [src] is empty!") + else + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + if(!H.check_has_mouth()) + to_chat(H, "Where do you intend to put \the [src]? You don't have a mouth!") + return + var/obj/item/blocked = H.check_mouth_coverage() + if(blocked) + FEEDBACK_FAILURE(H, "\The [blocked] is in the way!") + return + if(reagents.total_volume > 30) // 30 equates to 3 SECONDS. + usr.visible_message(SPAN_NOTICE("[usr] prepares to gulp down [src]."), SPAN_NOTICE("You prepare to gulp down [src].")) + playsound(usr, 'packs/infinity/sound/items/drinking.ogg', reagents.total_volume, 1) + if(!do_after(usr, reagents.total_volume)) + if(!Adjacent(usr)) + return + standard_splash_mob(src, src) + return + if(!Adjacent(usr)) + return + usr.visible_message(SPAN_NOTICE("[usr] gulped down the whole [src]!"),SPAN_NOTICE("You gulped down the whole [src]!")) + playsound(usr, 'packs/infinity/sound/items/drinking_after.ogg', reagents.total_volume, 1) + reagents.trans_to_mob(usr, reagents.total_volume, CHEM_INGEST) + else + to_chat(usr, SPAN_NOTICE("You need to open \the [src] first!")) diff --git a/packs/infinity/items/carpets.dm b/packs/infinity/items/carpets.dm new file mode 100644 index 0000000000000..7ecfaf40be519 --- /dev/null +++ b/packs/infinity/items/carpets.dm @@ -0,0 +1,20 @@ +/obj/item/stack/tile/carpet/ten + amount = 10 + +/obj/item/stack/tile/carpetblue/ten + amount = 10 + +/obj/item/stack/tile/carpetblue2/ten + amount = 10 + +/obj/item/stack/tile/carpetpurple/ten + amount = 10 + +/obj/item/stack/tile/carpetorange/ten + amount = 10 + +/obj/item/stack/tile/carpetgreen/ten + amount = 10 + +/obj/item/stack/tile/carpetred/ten + amount = 10 diff --git a/packs/infinity/items/chairs.dm b/packs/infinity/items/chairs.dm new file mode 100644 index 0000000000000..6dd46220982f9 --- /dev/null +++ b/packs/infinity/items/chairs.dm @@ -0,0 +1,2 @@ +/obj/item/stool/padded/red/New(newloc, newmaterial) + ..(newloc, "steel", "leather") diff --git a/packs/infinity/items/chemistry.dm b/packs/infinity/items/chemistry.dm new file mode 100644 index 0000000000000..4ec18d21ec596 --- /dev/null +++ b/packs/infinity/items/chemistry.dm @@ -0,0 +1,9 @@ +/obj/item/reagent_containers/glass/beaker/vial/exp/New() + ..() + reagents.add_reagent(/datum/reagent/experimental, 30) + update_icon() + +/obj/item/reagent_containers/glass/beaker/vial/away/New() + ..() + reagents.add_reagent(/datum/reagent/experimental, 5) + update_icon() diff --git a/packs/infinity/items/grown.dm b/packs/infinity/items/grown.dm new file mode 100644 index 0000000000000..8886fa9a0cb85 --- /dev/null +++ b/packs/infinity/items/grown.dm @@ -0,0 +1,6 @@ +// Inedible +/obj/item/reagent_containers/food/snacks/grown/harebell + plantname = "harebells" + +/obj/item/reagent_containers/food/snacks/grown/poppy + plantname = "poppies" diff --git a/packs/infinity/items/hookah.dm b/packs/infinity/items/hookah.dm new file mode 100644 index 0000000000000..993c7835275f8 --- /dev/null +++ b/packs/infinity/items/hookah.dm @@ -0,0 +1,346 @@ +/obj/item/hookah + name = "Hookah" + icon = 'packs/infinity/icons/obj/items.dmi' + desc = "A hookah with a jar of water at the bottom. AMOUNT tubes come out through it." + w_class = ITEM_SIZE_LARGE + icon_state = "hookah" + randpixel = 0 + matter = list(MATERIAL_IRON = 65) + var/liquid_level = 0 + var/liquid_type = /datum/reagent/water + var/max_liquid_level = 120 + var/smoketime = 0 + var/maxsmoketime = 500 SECONDS + var/chem_volume = 50 + var/lit = FALSE + var/tubes_amount = 3 + var/list/tubes = list() + var/list/tubes_archive = list() + var/genericmes = "USER lights NAME with the FLAME." + var/matchmes = "USER lights NAME with the FLAME." + var/lightermes = "USER manages to light NAME with FLAME." + var/zippomes = "With much care, USER lights NAME with FLAME." + var/weldermes = "USER recklessly lights NAME with FLAME." + var/ignitermes = "USER fiddles with FLAME, and manages to light NAME with the power of science." + var/list/filling + var/gas_consumption = 0.04 + var/list/coal_status_examine_msg = list("There is very little coal inside", "It's quarter-full of coal", "It's half full of coal", "It's almost full of coal", "It's full of coal") + +/obj/item/tube + name = "Hookah tube" + desc = "Large tube connected to the hookah" + icon_state = "hookah_tube" + icon = 'packs/infinity/icons/obj/items.dmi' + w_class = ITEM_SIZE_NO_CONTAINER + throw_range = 0 + var/obj/item/hookah/parent + +/obj/item/coal + name = "Coal" + desc = "Coal used in hookah's for heat" + w_class = ITEM_SIZE_SMALL + icon = 'packs/infinity/icons/obj/items.dmi' + icon_state = "coal" + var/volume = 500 + +/obj/item/storage/box/large/coal + name = "coal for hookah" + desc = "A box with coals for a hookah." + icon_state = "largebox" + startswith = list(/obj/item/coal = 10) + contents_allowed = list(/obj/item/coal) + w_class = ITEM_SIZE_LARGE + max_w_class = ITEM_SIZE_NORMAL + max_storage_space = DEFAULT_LARGEBOX_STORAGE + use_sound = 'sound/effects/storage/box.ogg' + +/obj/item/hookah/Initialize() + . = ..() + atom_flags |= ATOM_FLAG_NO_REACT // so it doesn't react until you light it + create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 100 + desc = replacetext(desc, "AMOUNT", "[tubes_amount]") + var/obj/item/tube/T + for(var/i in 1 to tubes_amount) + T = new(src) + tubes.Add(T) + tubes_archive.Add(T) + for(var/R in filling) + reagents.add_reagent(R, filling[R]) + update_icon() + +/obj/item/tube/New(obj/item/hookah/W) + parent = W + . = ..() + +/obj/item/hookah/Move() + . = ..() + for(var/obj/item/tube/T in tubes_archive) + T.check_exited() + +/obj/item/tube/Move() + . = ..() + check_exited() + +/obj/item/hookah/dropped(mob/user) + . = ..() + for(var/obj/item/tube/T in tubes_archive) + T.check_exited() + +/obj/item/tube/dropped(mob/user) + GLOB.moved_event.unregister(user, src, TYPE_PROC_REF(/obj/item/tube, check_exited)) + . = ..() + check_exited() + +/obj/item/hookah/throw_impact(atom/hit_atom) + if(QDELETED(src)) + return + if(length(reagents.reagent_list) > 0) + reagents.splash(hit_atom, reagents.total_volume) + visible_message( + SPAN_DANGER("\The [src] shatters from the impact!"), + SPAN_DANGER("You hear the sound of glass shattering!") + ) + playsound(src.loc, pick(GLOB.shatter_sound), 100) + new /obj/item/material/shard(src.loc) + qdel(src) + +/obj/item/hookah/on_update_icon() + icon_state = initial(icon_state) + if(!liquid_level) + icon_state += "_empty" + if(lit) + icon_state += "_work" + . = ..() + +/obj/item/hookah/examine(mob/user, distance) + . = ..() + if(lit) + . += SPAN_NOTICE("It looks lit up") + else + . += SPAN_NOTICE("It looks unlit") + if(distance <= 1) + . += smoketime < 500 ? SPAN_WARNING("There is no coal inside") : SPAN_NOTICE(coal_status_examine_msg[round(smoketime/(maxsmoketime/5), 1)]) + . += reagents.total_volume > 0 ? SPAN_NOTICE("There's tobacco inside") : SPAN_WARNING("There is no tobacco inside") + . += liquid_level > 0 ? SPAN_NOTICE("There's some water inside") : SPAN_WARNING("There is no water inside") + +/obj/item/hookah/proc/extinguish(mob/user, no_message = FALSE) + if(!no_message && !user) + visible_message(SPAN_INFO("Hookah stops smoking.")) + else if (!no_message) + user.visible_message(SPAN_INFO("[user] extinguishes the hookah")) + lit = FALSE + update_icon() + remove_extension(src, /datum/extension/scent) + STOP_PROCESSING(SSobj, src) + +/obj/item/hookah/verb/turnoff() + set src in view(1) + set category = "Object" + set name = "Extinguish" + set desc = "Extinguish the hookah" + if(!lit) + to_chat(usr, SPAN_WARNING("You can't put out what's not lit.")) + return TRUE + extinguish(usr) + +/obj/item/hookah/Process() + if(smoketime < 1) + extinguish() + return TRUE + smoketime -= 1 + +/obj/item/hookah/use_tool(obj/item/tool, mob/user) + if(isFlameOrHeatSource(tool)) + var/text = matchmes + if(istype(tool, /obj/item/flame/match)) + text = matchmes + else if(istype(tool, /obj/item/flame/lighter/zippo)) + text = zippomes + else if(istype(tool, /obj/item/flame/lighter)) + text = lightermes + else if(tool.tool_behaviour == TOOL_WELDER) + text = weldermes + else if(istype(tool, /obj/item/device/assembly/igniter)) + text = ignitermes + else + text = genericmes + text = replacetext(text, "USER", "[user]") + text = replacetext(text, "NAME", "[name]") + text = replacetext(text, "FLAME", "[tool.name]") + light(text) + return TRUE + + else if(istype(tool, /obj/item/tube)) + var/obj/item/tube/T = tool + if(T.parent != src) + to_chat(user, SPAN_WARNING("This tube is not from this hookah.")) + return TRUE + tubes.Add(T) + user.unEquip(T, src) + GLOB.moved_event.unregister(user, T, TYPE_PROC_REF(/obj/item/tube, check_exited)) + to_chat(user, SPAN_INFO("You put the tube back in the hookah.")) + return TRUE + + else if(istype(tool, /obj/item/coal)) + var/obj/item/coal/M = tool + if(smoketime + M.volume > maxsmoketime) + to_chat(user, SPAN_WARNING("The hookah is already full of coal.")) + return TRUE + smoketime += M.volume + qdel(M) + user.visible_message(SPAN_INFO("[user] adds some coal to the hookah."), SPAN_INFO("You added coal to the hookah.")) + return TRUE + + else if(istype(tool, /obj/item/reagent_containers/food/snacks/grown/dried_tobacco)) + if(tool.reagents) + tool.reagents.trans_to_obj(src, tool.reagents.total_volume) + user.unEquip(tool, src) + user.visible_message(SPAN_INFO("[user] put tobacco in the hookah."), SPAN_INFO("You put tobacco in the hookah.")) + qdel(tool) + return TRUE + +/* else if(istype(tool, /obj/item/storage/box/large/coal)) // Я заметил, что в оригинальном коде при нажатии коробкой с углём по калику последний заполнялся до максимума вне зависимости от кол-ва угля в коробке. + var/obj/item/storage/box/large/coal/box = tool // Я попытался это исправить. Теперь при нажатии коробкой по калику сервер взрывается. Отныне коробка с углём будет просто контейнером. + for(var/obj/i in box.contents) // Я хочу умереть. + qdel(box.contents[i]) // Не повторяйте моих ошибок. + smoketime += 500 + src.visible_message(SPAN_INFO("[user] puts coal in the hookah"), SPAN_INFO("You put coal in the hookah")) + return TRUE */ + + else if(istype(tool, /obj/item/reagent_containers)) + var/obj/item/reagent_containers/container_obj = tool + var/datum/reagents/container = container_obj.reagents + if(!container_obj.is_open_container()) + return TRUE + if(!container.has_reagent(liquid_type)) + to_chat(user, SPAN_WARNING("This liquid is not appropriate for use in hookahs.")) + return TRUE + var/transfer_value = min(min(container.get_reagent_amount(liquid_type), container_obj.amount_per_transfer_from_this), max_liquid_level-liquid_level) + if(transfer_value<=0) + to_chat(user, SPAN_WARNING("You can't pour any more water in the hpokah.")) + return TRUE + container.remove_reagent(liquid_type, transfer_value) + liquid_level += transfer_value + playsound(src.loc,'sound/effects/pour.ogg',50,-1) + src.visible_message(SPAN_INFO("[user] filled a hookah from a [container_obj].")) + update_icon() + return TRUE + + return ..() + +/obj/item/hookah/attack_hand(mob/user) + if(user.a_intent == I_GRAB) + return ..() + if(length(tubes) <= 0) + to_chat(user, SPAN_WARNING("There are no tubes left to take.")) + return TRUE + var/obj/item/tube/T = tubes[1] + if(!user.put_in_active_hand(T)) + to_chat(user, SPAN_WARNING("Your active hand must be empty!")) + return TRUE + GLOB.moved_event.register(user, T, TYPE_PROC_REF(/obj/item/tube, check_exited)) + tubes.Remove(T) + to_chat(user, SPAN_INFO("You take the smoking tube.")) + +/obj/item/tube/attack_hand(mob/user) + . = ..() + if(!check_exited()) + GLOB.moved_event.register(user, src, TYPE_PROC_REF(/obj/item/tube, check_exited)) + +/obj/item/tube/use_before(mob/living/carbon/human/H, mob/user, def_zone) + if (!istype(H) || H != user || !H.check_has_mouth()) + return ..() + + if(!parent.lit) + to_chat(user, SPAN_WARNING("You try to take a drag from the tube but nothing happens. Looks like the hookah isn't lit.")) + return FALSE + + var/obj/item/blocked = H.check_mouth_coverage() + if(blocked) + to_chat(H, SPAN_WARNING("\The [blocked] is in the way!")) + return TRUE + + to_chat(H, SPAN_INFO("You take a drag on your [name].")) + + if(parent.liquid_level <= 0) + to_chat(user, SPAN_WARNING("It looks like the water has run out.")) + return FALSE + + playsound(H.loc, pick('packs/infinity/sound/effects/hookah.ogg', 'packs/infinity/sound/effects/hookah1.ogg'), 50, 0, -1) + smoke(5, user) + + return TRUE + +/obj/item/hookah/proc/light(flavor_text) + if(lit || !smoketime) + return TRUE + if(submerged()) + to_chat(usr, SPAN_WARNING("You cannot light \the [src] underwater.")) + return TRUE + lit = TRUE + damtype = "burn" + var/turf/T = get_turf(src) + if (flavor_text) + T.visible_message(SPAN_INFO(flavor_text)) + update_icon() + START_PROCESSING(SSobj, src) + set_scent_by_reagents(src) + playsound(src.loc, 'packs/infinity/sound/effects/hookah_lit.ogg',50, 0, -1) + +/obj/item/hookah/Destroy() + . = ..() + if(lit) + STOP_PROCESSING(SSobj, src) + for(var/obj/item/tube/T as anything in tubes_archive) + qdel(T) + +/obj/item/tube/Destroy() + if(istype(loc, /mob/living)) + GLOB.moved_event.unregister(loc, src, TYPE_PROC_REF(/obj/item/tube, check_exited)) + . = ..() + +/obj/item/hookah/water_act(depth) + ..() + if(!waterproof && lit) + if(submerged(depth)) + extinguish(no_message = TRUE) + +/obj/item/tube/proc/check_exited() + var/turf/hookah_pos = get_turf(parent) + var/turf/mover_pos = get_turf(src) + if((hookah_pos != mover_pos && get_dist(mover_pos, hookah_pos) > 1) || (!isturf(parent.loc) && (parent.loc != src.loc) && !(src in parent.tubes))) + if(iscarbon(loc)) + var/mob/living/carbon/M = loc + visible_message(SPAN_WARNING("The tube was placed back to the hookah by [loc] as they were walking away.")) + M.unEquip(src, parent) + GLOB.moved_event.unregister(loc, src, TYPE_PROC_REF(/obj/item/tube, check_exited)) + else + visible_message(SPAN_WARNING("The tube magically flies back to the hookah. Woah.")) + parent.contents.Add(src) + parent.tubes.Add(src) + return TRUE + return FALSE + +/obj/item/tube/proc/smoke(amount, mob/user) + parent.smoketime -= amount + parent.liquid_level = max(parent.liquid_level-1, 0) + if(parent.liquid_level <= 0) + parent.update_icon() + if(parent.reagents.total_volume) // check if it has any reagents at all + parent.reagents.trans_to_mob(user, REM, CHEM_INGEST, 0.2) + add_trace_DNA(user) + else + to_chat(usr, SPAN_WARNING("The tobacco is gone and all you can feel in your mouth is plain smoke.")) + return TRUE + var/turf/T = get_turf(src) + if(T) + var/datum/gas_mixture/environment = T.return_air() + if(environment.get_by_flag(XGM_GAS_OXIDIZER) < parent.gas_consumption) + parent.extinguish() + else + environment.remove_by_flag(XGM_GAS_OXIDIZER, parent.gas_consumption) + environment.adjust_gas(GAS_CO2, 0.5*parent.gas_consumption, 0) + environment.adjust_gas(GAS_STEAM, 0.5*parent.gas_consumption, 0) + var/datum/effect/steam_spread/steam = new /datum/effect/steam_spread() + steam.set_up(3, usr.dir, usr.loc) + steam.start() diff --git a/packs/infinity/items/projectile/ammunition/boxes.dm b/packs/infinity/items/projectile/ammunition/boxes.dm new file mode 100644 index 0000000000000..825ab95b0aa82 --- /dev/null +++ b/packs/infinity/items/projectile/ammunition/boxes.dm @@ -0,0 +1,10 @@ +/obj/item/ammo_magazine/n10mm + name = "NT41 magazine (5.7x28mm)" + icon = 'packs/infinity/icons/obj/ammo.dmi' + icon_state = "10mm" + mag_type = MAGAZINE + ammo_type = /obj/item/ammo_casing/nt28mm + matter = list(MATERIAL_STEEL = 1500) + caliber = CALIBER_PISTOL_FAST + max_ammo = 20 + multiple_sprites = 1 diff --git a/packs/infinity/items/projectile/ammunition/bullets.dm b/packs/infinity/items/projectile/ammunition/bullets.dm new file mode 100644 index 0000000000000..f6c6fb4adb7f2 --- /dev/null +++ b/packs/infinity/items/projectile/ammunition/bullets.dm @@ -0,0 +1,10 @@ +/obj/item/projectile/bullet/pistol/medium/fast + fire_sound = 'sound/weapons/gunshot/gunshot_smg.ogg' + damage = 45 //4.6x30 mm, 5.7x28 mm + armor_penetration = 7.5 + distance_falloff = 2 + +/obj/item/ammo_casing/nt28mm + desc = "A 5.7x28mm bullet casing." + caliber = CALIBER_PISTOL_FAST + projectile_type = /obj/item/projectile/bullet/pistol/medium/fast diff --git a/packs/infinity/items/projectile/guns/automatic.dm b/packs/infinity/items/projectile/guns/automatic.dm new file mode 100644 index 0000000000000..0b64792ee555d --- /dev/null +++ b/packs/infinity/items/projectile/guns/automatic.dm @@ -0,0 +1,80 @@ +/obj/item/gun/projectile/automatic/nt41 + name = "NT41 submachine gun" + desc = "The NT41 Enforcer is a self-defense weapon made on bullpup system. Produced by Nanotrasen for it's Security Force. Looks cool and stylish, but sometimes too uncomfortably to run with it. Uses 5.7x28mm rounds." + icon_state = "nt41" + item_state = "nt41" + icon = 'packs/infinity/icons/obj/guns.dmi' + wielded_item_state = "nt41-wielded" + item_icons = list( + slot_r_hand_str = 'packs/infinity/icons/mob/onmob/righthand.dmi', + slot_l_hand_str = 'packs/infinity/icons/mob/onmob/lefthand.dmi', + ) + + caliber = CALIBER_PISTOL_FAST + origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3) + slot_flags = SLOT_BELT + ammo_type = /obj/item/ammo_casing/nt28mm + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/n10mm + allowed_magazines = /obj/item/ammo_magazine/n10mm + screen_shake = 0.5 //SMG + + firemodes = list( + list(mode_name="semiauto", burst=1, fire_delay=0, one_hand_penalty=1, burst_accuracy=null, dispersion=null), + list(mode_name="2-round bursts", burst=2, fire_delay=null, one_hand_penalty=3, burst_accuracy=list(0,-1), dispersion=list(0.0, 0.8)), + list(mode_name="short bursts", burst=4, fire_delay=null, one_hand_penalty=4, burst_accuracy=list(0,-1,-1.5,-2), dispersion=list(0.6, 0.8, 1.0, 1.4)), + ) + + bulk = GUN_BULK_CARABINE + w_class = ITEM_SIZE_NORMAL + one_hand_penalty = 2 + +/obj/item/gun/projectile/automatic/nt41/on_update_icon() + ..() + icon_state = (ammo_magazine)? "nt41" : "nt41-e" + + +/obj/item/gun/projectile/automatic/bullpup_rifle/light + firemodes = list( + list( + mode_name="semi auto", burst=1, fire_delay=null, + use_launcher=null, one_hand_penalty=6, + burst_accuracy=null, dispersion=null + ), + list( + mode_name="2-round bursts", burst=2, fire_delay=null, + use_launcher=null, one_hand_penalty=7, + burst_accuracy=list(0,-1), dispersion=list(0.0, 0.6) + ), + list( + mode_name="fire grenades", burst=null, fire_delay=null, + use_launcher=1, one_hand_penalty=10, + burst_accuracy=null, dispersion=null + ), + list( + mode_name="full auto", burst=1, fire_delay=2, burst_delay=2, + use_launcher=null, one_hand_penalty=7, + burst_accuracy = list(0,-1,-1), dispersion=list(0.2, 0.6, 1.2), + autofire_enabled=1 + ) + ) + + +/obj/item/gun/projectile/sniper/garand + firemodes = list( + list( + mode_name="semi auto", burst=1, fire_delay=6, + one_hand_penalty=8, burst_accuracy=null, + dispersion=null + ) + ) + + +/obj/item/gun/projectile/sniper/semistrip + firemodes = list( + list( + mode_name="semi auto", burst=1, fire_delay=2, + one_hand_penalty=8, burst_accuracy=null, + dispersion=null + ) + ) diff --git a/packs/infinity/items/projectile/guns/energy/laser_handmade.dm b/packs/infinity/items/projectile/guns/energy/laser_handmade.dm new file mode 100644 index 0000000000000..4e1f5fa429259 --- /dev/null +++ b/packs/infinity/items/projectile/guns/energy/laser_handmade.dm @@ -0,0 +1,252 @@ +/* THE GUN + * ======= + */ + +/obj/item/gun/energy/laser/craftable + name = "laser" + desc = "Very similar to a laser weapon. It is assembled qualitatively, with love, but with their own hands and from scrap materials, which is extremely noticeable, including sticks and no less well-known second component." + icon = 'packs/infinity/icons/obj/guns/lkw.dmi' + icon_state = "lkwf" + scope_zoom = 1.2 + wielded_item_state = "lkw-wielded" + item_icons = list( + slot_r_hand_str = 'packs/infinity/icons/mob/onmob/righthand.dmi', + slot_l_hand_str = 'packs/infinity/icons/mob/onmob/lefthand.dmi', + slot_back_str = 'packs/infinity/icons/mob/onmob/onmob_back.dmi', + slot_belt_str = 'packs/infinity/icons/mob/onmob/onmob_belt.dmi' + ) + firemodes = list( + list(mode_name="medium laser", projectile_type=/obj/item/projectile/beam/lkw), + list(mode_name="heavy laser", projectile_type=/obj/item/projectile/beam/pulse/lkw), + list(mode_name="light laser", projectile_type=/obj/item/projectile/beam/confuseray/lkw), + ) + + bulk = GUN_BULK_SNIPER_RIFLE + w_class = ITEM_SIZE_HUGE + +/* PROJECTILES + * =========== + */ + +/obj/item/projectile/beam/confuseray/lkw + damage = 10 + agony = 10 + damage_type = DAMAGE_BURN + life_span = 15 + +/obj/item/projectile/beam/lkw + damage = 30 + armor_penetration = 20 + +/obj/item/projectile/beam/pulse/lkw + damage = 10 + armor_penetration = 50 + +/* CRAFTING + * =========== + */ + +/obj/item/laserframe + name = "laser stock" + desc = "It might be a laser, someday. Or emitter... Or projecror... Or flashlight... Or... Or something else." + icon = 'packs/infinity/icons/obj/guns/lkw.dmi' + icon_state = "lkw0" + var/buildstate = 0 + +/obj/item/laserframe/on_update_icon() + icon_state = "lkw[buildstate]" + +/obj/item/laserframe/examine(mob/user) + . = ..(user) + switch(buildstate) + if(1) + . += SPAN_NOTICE("It has a pipe segment installed.") + if(2) + . += SPAN_NOTICE("It has a pipe segment taperolled.") + if(3) + . += SPAN_NOTICE("It has an emitter installed.") + if(4) + . += SPAN_NOTICE("It has a powerccell installed.") + if(5) + . += SPAN_NOTICE("It has a capacitor installed.") + if(6) + . += SPAN_NOTICE("It has a firing mechanism installed.") + if(7) + . += SPAN_NOTICE("It has an igniter installed.") + if(8) + . += SPAN_NOTICE("It has an electronic frame installed.") + if(9) + . += SPAN_NOTICE("It has a reserve powercell installed.") + if(10) + . += SPAN_NOTICE("It has a firing processor installed.") + if(11) + . += SPAN_NOTICE("It has a weapon board installed.") + if(12) + . += SPAN_NOTICE("It has a capacitor-retranslator installed.") + if(13) + . += SPAN_NOTICE("It has cable coils installed.") + if(14) + . += SPAN_NOTICE("It has a cable welded into place.") + if(15) + . += SPAN_NOTICE("It has a little part of shitcode inside.") + if(16) + . += SPAN_NOTICE("It has lenses and a scope.") + if(17) + . += SPAN_NOTICE("It has processed and calibrated lenses.") + if(ishuman(user)) + if(user.skill_check(SKILL_DEVICES, SKILL_EXPERIENCED)) + switch(buildstate) + if(0) + . += SPAN_NOTICE("Looks like you need something as lenses frame... A pipe?") + if(1) + . += SPAN_NOTICE("The pipe is unsecured - fix it with tape roll.") + if(2) + . += SPAN_NOTICE("You some little laser, for start. A high-power micro-laser shouldn't melt the frame and be powerful enough.") + if(3) + . += SPAN_NOTICE("You need a power storage... A hive power cell will be enough.") + if(4) + . += SPAN_NOTICE("The energy should be concetrated in capacitor before firing. Advanced one should be enough.") + if(5) + . += SPAN_NOTICE("It need firing mechanism. Steel one would fit perfectly...") + if(6) + . += SPAN_NOTICE("I don't remember why, but igniter is necessary here.") + if(7) + . += SPAN_NOTICE("It need a frame for circuits, plastic one.") + if(8) + . += SPAN_NOTICE("It need a device power cell for idle capacity.") + if(9) + . += SPAN_NOTICE("It will not work without circuits. A small processor unit from some PDA should be enough.") + if(10) + . += SPAN_NOTICE("I need a power control circuit here - otherwise, it will explode in my hands after second shoot....") + if(11) + . += SPAN_NOTICE("A standard superconductive magnetic coil need here.") + if(12) + . += SPAN_NOTICE("It cannot work without cables...") + if(13) + . += SPAN_NOTICE("I need to weld it together.") + if(14) + . += SPAN_NOTICE("It need calibration, circuits frequencies should be messed up.") + if(15) + . += SPAN_NOTICE("It need lenses for firepower... And scope. Yeap, I wanna scope here.") + if(16) + . += SPAN_NOTICE("Lenses should be calibrated. I don't know how to do that... RCD may help.") + if(17) + . += SPAN_NOTICE("A screwdriver should secure it all.") + +/obj/item/laserframe/use_tool(obj/item/tool, mob/user, list/click_params) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + add_fingerprint(user) + if(loc == user.loc) + to_chat(user, SPAN_NOTICE("You cannot interact with [src] while it in your hands.")) + return TRUE + if(ishuman(user)) + if(!(user.skill_check(SKILL_DEVICES, SKILL_EXPERIENCED))) + to_chat(user, SPAN_NOTICE("You don't know enough about devices to assemble it...")) + switch(buildstate) + if(0) + if(istype(tool, /obj/item/pipe)) + to_chat(user, SPAN_NOTICE("You add [tool] to install the lenses.")) + buildstate++ + qdel(tool) + if(1) + if(istype(tool, /obj/item/tape_roll)) + user.visible_message( + SPAN_NOTICE("[user] secures the pipe with [tool]."), + SPAN_NOTICE("You secure the pipe with [tool].")) + buildstate++ + if(2) + if(istype(tool, /obj/item/stock_parts/micro_laser)) + to_chat(user, SPAN_NOTICE("You install [tool].")) + buildstate++ + qdel(tool) + if(3) + if(istype(tool, /obj/item/cell/high)) + to_chat(user, SPAN_NOTICE("You put [tool] inside.")) + buildstate++ + qdel(tool) + if(4) + if(istype(tool, /obj/item/stock_parts/capacitor)) + to_chat(user, SPAN_NOTICE("You install [tool].")) + buildstate++ + qdel(tool) + if(5) + if(istype(tool, /obj/item/stack/material) && tool.get_material_name() == MATERIAL_STEEL) + var/obj/item/stack/material/M = tool + if(M.use(5)) + to_chat(user, SPAN_NOTICE("You created and installed a trigger mechanism.")) + buildstate++ + else + to_chat(user, SPAN_NOTICE("You need at least 5 metal sheets to complete this task.")) + if(6) + if(istype(tool, /obj/item/device/assembly/igniter)) + to_chat(user, SPAN_NOTICE("You put [tool] inside the trigger mechanism.")) + buildstate++ + qdel(tool) + if(7) + if(istype(tool, /obj/item/stack/material) && tool.get_material_name() == MATERIAL_PLASTIC) + var/obj/item/stack/material/P = tool + if(P.use(10)) + to_chat(user, SPAN_NOTICE("You have prepared and install a frame for electronic systems.")) + buildstate++ + else + to_chat(user, SPAN_NOTICE("You need at least ten plastic sheets to complete this task.")) + if(8) + if(istype(tool, /obj/item/cell/device)) + to_chat(user, SPAN_NOTICE("You install [tool].")) + buildstate++ + qdel(tool) + if(9) + if(istype(tool, /obj/item/stock_parts/computer/processor_unit/small)) + to_chat(user, SPAN_NOTICE("You install [tool].")) + buildstate++ + qdel(tool) + if(10) + if(istype(tool, /obj/item/module/power_control)) + to_chat(user, SPAN_NOTICE("You install [tool].")) + buildstate++ + qdel(tool) + if(11) + if(istype(tool, /obj/item/stock_parts/smes_coil)) + to_chat(user, SPAN_NOTICE("You install [tool].")) + buildstate++ + qdel(tool) + if(12) + if(isCoil(tool)) + var/obj/item/stack/cable_coil/C = tool + if(C.use(30)) + to_chat(user, SPAN_NOTICE("You installed the wiring inside, connecting the electronics inside.")) + buildstate++ + else + to_chat(user, SPAN_NOTICE("You need at least 30 segments of [tool] to complete this task.")) + if(13) + if(tool.tool_behaviour == TOOL_WELDER) + if(!tool.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE + to_chat(user, SPAN_NOTICE("You weld the cables into places.")) + buildstate++ + if(14) + if(tool.tool_behaviour == TOOL_MULTITOOL) + to_chat(user, SPAN_NOTICE("You reprogrammed the resulting internal device with [tool].")) + buildstate++ + if(15) + if(istype(tool, /obj/item/stack/material) && tool.get_material_name() == MATERIAL_GLASS) + var/obj/item/stack/material/M = tool + if(M.use(5)) + to_chat(user, SPAN_NOTICE("You install lenses and scope.")) + buildstate++ + else + to_chat(user, SPAN_NOTICE("You need at least five glass sheets to complete this task.")) + if(16) + if(istype(tool, /obj/item/rcd)) + to_chat(user, SPAN_NOTICE("You processed the lens with [tool], making it perfect.")) + buildstate++ + if(17) + if(tool.tool_behaviour == TOOL_SCREWDRIVER) + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return TRUE + to_chat(user, SPAN_NOTICE("You secure everything with [tool].")) + new /obj/item/gun/energy/laser/craftable(get_turf(src)) + qdel(src) + return TRUE + update_icon() + return ..() diff --git a/packs/infinity/machinery/computer.dm b/packs/infinity/machinery/computer.dm new file mode 100644 index 0000000000000..f0f257246e7f2 --- /dev/null +++ b/packs/infinity/machinery/computer.dm @@ -0,0 +1,5 @@ +/obj/machinery/computer/modular/preset/civilian/professional + uncreated_component_parts = list( + /obj/item/stock_parts/computer/nano_printer, + /obj/item/stock_parts/power/apc + ) diff --git a/packs/infinity/machinery/heater.dm b/packs/infinity/machinery/heater.dm new file mode 100644 index 0000000000000..3895e3dbbbfcf --- /dev/null +++ b/packs/infinity/machinery/heater.dm @@ -0,0 +1,30 @@ +/obj/machinery/space_heater/stationary + name = "stationary space heater" + icon = 'packs/infinity/icons/obj/atmos.dmi' + icon_state = "stheater-off" + anchored = TRUE + density = FALSE + heating_power = 120 KILOWATTS + atom_flags = ATOM_FLAG_NO_TEMP_CHANGE + +/obj/machinery/space_heater/stationary/on_update_icon(rebuild_overlay = 0) + if(!on) + icon_state = "stheater-off" + set_light(0) + else if(active > 0) + icon_state = "stheater-heat" + set_light(3, 0.7, COLOR_SEDONA) + else if(active < 0) + icon_state = "stheater-cool" + set_light(3, 0.7, COLOR_DEEP_SKY_BLUE) + else + icon_state = "stheater-standby" + set_light(0) + + if(rebuild_overlay) + ClearOverlays() + if(panel_open) + AddOverlays("stheater-open") + +/obj/machinery/space_heater/stationary/on + on = 1 diff --git a/packs/infinity/machinery/lighting.dm b/packs/infinity/machinery/lighting.dm new file mode 100644 index 0000000000000..2b09057068c56 --- /dev/null +++ b/packs/infinity/machinery/lighting.dm @@ -0,0 +1,66 @@ +#define LIGHT_DEFAULT_LED_NEON "#ffffff" + +/obj/item/light/led_neon + name = "neon tube" + desc = "A LED neon tape." + matter = list(MATERIAL_GLASS = 100, MATERIAL_ALUMINIUM = 20) + icon = 'packs/infinity/icons/obj/machinery/neon.dmi' + icon_state = "big_tape" + base_state = "big_tape" + item_state = null + + b_range = 4 + b_colour = LIGHT_DEFAULT_LED_NEON + + random_tone = FALSE + +/obj/machinery/light/led + name = "neon tube" + desc = "A tape of LEDs. Not actually neon, but THIS is FUTURE." + light_type = /obj/item/light/led_neon/large + icon = 'packs/infinity/icons/obj/machinery/neon.dmi' + icon_state = "tube_maped" + layer = BELOW_DOOR_LAYER + +/obj/machinery/light/led/small + name = "small neon tube" + base_state = "tube_border" + icon_state = "tube_border_maped" + light_type = /obj/item/light/led_neon/small + +/obj/machinery/light/led/on_update_icon() + . = ..() + pixel_x = 0 + pixel_y = 0 + + +/obj/item/light/led_neon/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + var/c = input("You are changing diode frequency.", "Input", b_colour) as color|null + if(c) + set_color(c) + +/obj/item/light/led_neon/large + base_state = "big_tape" + icon_state = "big_tape_preset" + b_range = 7 + +/obj/item/light/led_neon/small + base_state = "small_tape" + icon_state = "small_tape_preset" + +/obj/item/light/led_neon/small/use_tool(obj/item/tool, mob/user, list/click_params) + if(istype(tool, type)) + var/turf/T = get_turf(user) + if(isturf(T)) + user.drop_from_inventory(src, T) + user.drop_from_inventory(tool, T) + qdel(tool) + qdel(src) + user.put_in_any_hand_if_possible(new /obj/item/light/led_neon/large(T)) + return TRUE + return ..() + +/obj/item/storage/box/lights/led_neon + name = "box of neon leds" + startswith = list(/obj/item/light/led_neon/small = 7) diff --git a/packs/infinity/machinery/machines.dm b/packs/infinity/machinery/machines.dm new file mode 100644 index 0000000000000..14e82310674ea --- /dev/null +++ b/packs/infinity/machinery/machines.dm @@ -0,0 +1,27 @@ +// OVERWRITE +/obj/machinery/camera + icon = 'packs/infinity/icons/obj/monitors.dmi' + +/obj/machinery/hologram/holopad + icon = 'packs/infinity/icons/obj/stationobjs.dmi' + +/obj/machinery/door/blast/shutters/open + icon_state = "shutter0" + +/obj/machinery/door/blast/regular/open + icon_state = "pdoor0" + +// ADD +/obj/machinery/door/airlock/glass/engineering/no_stripe + stripe_color = null + +/obj/machinery/power/apc/high/critical + is_critical = 1 + +/obj/machinery/door/window/phoronreinforced + color = GLASS_COLOR_BORON + health_max = 300 + +/obj/machinery/disposal/small + icon = 'packs/infinity/icons/obj/machinery/disposal_small.dmi' + density = FALSE diff --git a/packs/infinity/machinery/rack.dm b/packs/infinity/machinery/rack.dm new file mode 100644 index 0000000000000..ae4a371d9920b --- /dev/null +++ b/packs/infinity/machinery/rack.dm @@ -0,0 +1,11 @@ +/obj/structure/table/rack/dark + material = MATERIAL_STEEL + color = COLOR_GRAY40 + +/obj/structure/table/rack/wooden + name = "wooden altar" + desc = "A simple wooden altar covered in cloth." + icon = 'icons/obj/cult.dmi' + icon_state = "churchaltar" + color = COLOR_WHITE + material = MATERIAL_WALNUT diff --git a/packs/infinity/machinery/scrap_compactor/crusher_control.dm b/packs/infinity/machinery/scrap_compactor/crusher_control.dm new file mode 100644 index 0000000000000..7f336da08a6b5 --- /dev/null +++ b/packs/infinity/machinery/scrap_compactor/crusher_control.dm @@ -0,0 +1,122 @@ +/datum/computer_file/program/crushercontrol + filename = "crushercontrol" + filedesc = "Crusher Control" + extended_desc = "Application to Control the Crusher" + program_icon_state = "supply" + size = 8 + required_access = access_cargo + usage_flags = PROGRAM_TELESCREEN | PROGRAM_CONSOLE + nanomodule_path = /datum/nano_module/program/crushercontrol/ + +/datum/nano_module/program/crushercontrol/ + name = "Crusher Control" + var/message = "" // Message to return to the user + var/extending = 0 //If atleast one of the pistons is extending + var/list/pistons = list() //List of pistons linked to the program + var/list/airlocks = list() //List of airlocks linked to the program + var/list/status_airlocks = list() //Status of the airlocks + var/list/status_pistons = list() //Status of the pistons + +/datum/nano_module/program/crushercontrol/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.default_state) + var/list/data = host.initial_data() + + status_pistons = list() + extending = 0 + + //Cycle through the pistons and get their status + var/i = 1 + for(var/obj/machinery/crusher_base/piston in pistons) + var/num_progress = piston.get_num_progress() + var/is_blocked = piston.is_blocked() + var/action = piston.get_action() + if(action == "extend") + extending = 1 + status_pistons.Add(list(list( + "progress"=num_progress, + "blocked"=is_blocked, + "action"=action, + "piston"=i + ))) + i++ + + data["message"] = message + data["airlock_count"] = length(airlocks) + data["piston_count"] = length(pistons) + data["status_airlocks"] = status_airlocks + data["status_pistons"] = status_pistons + data["extending"] = extending + ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "crushercontrol.tmpl", name, 500, 350, state = state) + ui.auto_update_layout = 1 + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/datum/nano_module/program/crushercontrol/Topic(href, href_list) + if(..()) + return 1 + + if(href_list["initialize"]) + pistons = list() + for(var/obj/machinery/crusher_base/piston in orange(10,src.host)) + pistons += piston + + airlocks = list() + for(var/obj/machinery/door/airlock/arlk in orange(10,src.host)) + if( arlk.id_tag != "crusher") + continue + airlocks += arlk + + airlock_open() + + if(href_list["hatch_open"]) + message = "Opening the Hatch" + airlock_open() + + if(href_list["hatch_close"]) + message = "Closing the Hatch" + airlock_close() + + if(href_list["crush"]) + message = "Crushing" + airlock_close() + crush_start() + + if(href_list["abort"]) + message = "Aborting" + crush_stop() + + if(href_list["close"]) + message = null + + +/datum/nano_module/program/crushercontrol/proc/airlock_open() + for(var/thing in airlocks) + var/obj/machinery/door/airlock/airlock = thing + if (!airlock.cur_command) + // Not using do_command so that the command queuer works. + airlock.cur_command = "secure_open" + airlock.execute_current_command() + +/datum/nano_module/program/crushercontrol/proc/airlock_close() + for(var/thing in airlocks) + var/obj/machinery/door/airlock/airlock = thing + if (!airlock.cur_command) + airlock.cur_command = "secure_close" + airlock.execute_current_command() + +/datum/nano_module/program/crushercontrol/proc/crush_start() + for(var/obj/machinery/crusher_base/piston in pistons) + piston.crush_start() + +/datum/nano_module/program/crushercontrol/proc/crush_stop() + for(var/obj/machinery/crusher_base/piston in pistons) + piston.crush_abort() + +/obj/item/modular_computer/telescreen/preset/trashcompactor/install_default_programs() + ..() + var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) + if(os) + os.create_file(new/datum/computer_file/program/crushercontrol()) + os.set_autorun("crushercontrol") diff --git a/packs/infinity/machinery/scrap_compactor/crusher_piston.dm b/packs/infinity/machinery/scrap_compactor/crusher_piston.dm new file mode 100644 index 0000000000000..8098558c4ce53 --- /dev/null +++ b/packs/infinity/machinery/scrap_compactor/crusher_piston.dm @@ -0,0 +1,551 @@ +#define PISTON_MOVE_DAMAGE 30 +#define PISTON_MOVE_DIVISOR 8 + +/obj/machinery/crusher_base + name = "trash compactor" + desc = "A colossal piston used for crushing garbage." + icon = 'packs/infinity/machinery/scrap_compactor/icons/crusher_base.dmi' + icon_state = "standalone" + anchored = TRUE + density = TRUE + opacity = TRUE + //Just 300 Watts here. Power is drawn by the piston when it moves + use_power = 1 + idle_power_usage = 300 + + var/obj/machinery/crusher_piston/piston //Piston + construct_state = /singleton/machine_construction/default/panel_closed + uncreated_component_parts = list( + /obj/item/stock_parts/power/apc + ) + + var/action = "idle" //Action the piston should perform + // idle -> Do nothing + // extend -> Extend the piston + // retract -> Retract the piston + + var/status = "idle"//The status the piston is in + // idle -> The piston is idle, doing nothing + // pre_start -> The piston is pre-starting + // stage1 -> The piston is at stage 1 + // stage2 -> The piston is at stage 2 + // stage3 -> The piston is at stage 3 + + var/blocked = 0 //If the piston has been blocked by something - Piston is stuck and preassure valve needs to be opened + var/valve_open = 0 //If the de-preassure valve is open - Pison cant be extended + var/num_progress = 0 //Numerical Progress value + + var/asmtype = "standalone" //If the base is a stand alone base or part of a combined crusher + // standalone -> Standalone base + // leftcap -> Left piece of a combined crusher + // middle -> Middle piece of a combined crusher + // rightcap -> Right piece of a combined crusher + + var/action_start_time = null //The time when the action has been started + var/time_stage_pre = 150 //The time it takes for the stage to complete + var/time_stage_1 = 100 //The time it takes for the stage to complete + var/time_stage_2 = 100 //The time it takes for the stage to complete + var/time_stage_3 = 100 //The time it takes for the stage to complete + var/time_stage_full = 100 //The time to wait when the piston is full extended + + var/list/items_to_move = list() //The list of tiems that should be moved by the piston + var/list/items_to_crush = list() //The list of items that should be destroyed by the piston + + var/initial = 1 // initial run of the piston process + + var/process_lock = 0 //If the call to process is locked because it is still running + +/obj/machinery/crusher_base/Initialize() + . = ..() + +/* + //Create parts for crusher. + component_parts = list() + component_parts += new /obj/item/stock_parts/circuitboard/crusher(src) + component_parts += new /obj/item/stock_parts/matter_bin(src) + component_parts += new /obj/item/stock_parts/matter_bin(src) + component_parts += new /obj/item/stock_parts/matter_bin(src) + component_parts += new /obj/item/stock_parts/matter_bin(src) + component_parts += new /obj/item/stock_parts/manipulator(src) + component_parts += new /obj/item/stock_parts/manipulator(src) + component_parts += new /obj/item/stock_parts/manipulator(src) + component_parts += new /obj/item/reagent_containers/glass/beaker(src) + component_parts += new /obj/item/reagent_containers/glass/beaker(src) + component_parts += new /obj/item/reagent_containers/glass/beaker(src) + RefreshParts() +*/ + action_start_time = world.time + + //Spawn the stage 1 pistons south of it with a density of 0 + piston = new(get_step(src, SOUTH)) + piston.crs_base = src + + update_icon() + // Change the icons of the neighboring bases + change_neighbor_base_icons() + +/obj/machinery/crusher_base/Destroy() + var/oldloc = loc + var/obj/machinery/crusher_base/left = locate(/obj/machinery/crusher_base, get_step(src, WEST)) + var/obj/machinery/crusher_base/right = locate(/obj/machinery/crusher_base, get_step(src, EAST)) + + loc=null + if(left) + left.update_icon() + if(right) + right.update_icon() + loc=oldloc + + QDEL_NULL(piston) + return ..() + +/obj/machinery/crusher_base/wrench_act(mob/living/user, obj/item/tool) + if(!panel_open) + return + . = ITEM_INTERACT_SUCCESS + to_chat(user, SPAN_NOTICE("You start [valve_open ? "closing" : "opening"] the pressure relief valve of [src].")) + if(!tool.use_as_tool(src, user, 5 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT) || !panel_open) + return + valve_open = !valve_open + to_chat(user, SPAN_NOTICE("You [valve_open ? "open" : "close"] the pressure relief valve of [src].")) + if(valve_open) + blocked = 0 + action = "retract" + +/obj/machinery/crusher_base/use_tool(obj/item/tool, mob/living/user, list/click_params) + if(status != "idle" && prob(40) && ishuman(user)) + var/mob/living/carbon/human/M = user + var/prot = 0 + + if(M.getSpeciesOrSynthTemp(HEAT_LEVEL_1) > 400) + prot = 1 + else if(M.gloves) + var/obj/item/clothing/gloves/G = M.gloves + if(G.max_heat_protection_temperature) + if(G.max_heat_protection_temperature > 400) + prot = 1 + else if(MUTATION_COLD_RESISTANCE in user.mutations) + prot = 1 + + if(prot == 0) + M.apply_damage(45, INJURY_TYPE_BRUISE, user.get_active_hand()) + M.apply_damage(EFFECT_PAIN) + M.visible_message(SPAN_DANGER("[user]'s hand catches in the [src]!"), SPAN_DANGER("Your hand gets caught in the [src]!")) + if(M.can_feel_pain()) + M.emote("scream") + return TRUE + return ..() + +/obj/machinery/crusher_base/proc/change_neighbor_base_icons() + var/obj/machinery/crusher_base/left = locate(/obj/machinery/crusher_base, get_step(src, WEST)) + var/obj/machinery/crusher_base/right = locate(/obj/machinery/crusher_base, get_step(src, EAST)) + if(left) + left.update_icon() + + if(right) + right.update_icon() + +/obj/machinery/crusher_base/on_update_icon() + ClearOverlays() + var/obj/machinery/crusher_base/left = locate(/obj/machinery/crusher_base, get_step(src, WEST)) + var/obj/machinery/crusher_base/right = locate(/obj/machinery/crusher_base, get_step(src, EAST)) + + if(QDELETED(left)) + left = null + + if(QDELETED(right)) + right = null + + if(left && right) + asmtype = "middle" + icon_state = asmtype + else if(left) + asmtype = "rightcap" + icon_state = asmtype + else if(right) + asmtype = "leftcap" + icon_state = asmtype + else + asmtype = "standalone" + icon_state = asmtype + + if(powered(EQUIP)) + if(blocked == 1) + AddOverlays("[asmtype]-overlay-red") + else if(action != "idle") + AddOverlays("[asmtype]-overlay-orange") + else + AddOverlays("[asmtype]-overlay-green") + if(panel_open) + AddOverlays(image(icon, "[asmtype]-hatch")) + + var/turf/above = GetAbove(get_turf(src)) + if(above && isopenspace(above)) + above.update_icon() + +/obj/machinery/crusher_base/power_change() + ..() + update_icon() + +/obj/machinery/crusher_base/Process() + set waitfor = FALSE + if(!piston) //We dont process if theres no piston + return + if(process_lock) + log_debug("crusher_piston process() has been called while it was still locked. Aborting") + return + process_lock = 1 + var/timediff = world.time - action_start_time + + //Check what action should be performed + if(action == "idle") + action_start_time = world.time + initial = 1 + else if(action == "extend" && blocked == 0 && powered(EQUIP)) + //If we are idle, flash the warning lights and then put us into pre_start once we are done + if(status == "idle") + if(initial) + playsound(loc, 'sound/machines/airalarm.ogg', 50, 1) //Plays a beep + initial = 0 + //TODO: Flash the lights + if(timediff > time_stage_pre) + initial = 1 + status = "pre_start" // Bring us into pre start + action_start_time = world.time + + + //We are now ready to expand the first piston + else if(status == "pre_start") + if(valve_check()) + //Call extend on all the stage 1 pistons + if(initial) + initial = 0 + num_progress = 33 + if(!piston.extend_0_1()) + num_progress = 0 + status = "idle" + action = "idle" + initial = 1 + visible_message("The hydraulic pump in [src] spins faster and shuts down a few moments later.","You hear a pump spinning faster and then shutting down.") + if(timediff > time_stage_1) + status = "stage1" + action_start_time = world.time + initial = 1 + + //Extend the second piston + else if(status == "stage1") + if(valve_check()) + //Call extend on all the stage 2 pistons + if(initial) + initial = 0 + num_progress = 66 + if(!piston.extend_1_2()) + num_progress = 33 + action = "idle" + blocked = 1 + visible_message("The hydraulic pump in [src] spins faster and shuts down a few moments later.","You hear a pump spinning faster and then shutting down.") + if(timediff > time_stage_2) + status = "stage2" + action_start_time = world.time + initial = 1 + + //Extend the thrid piston + else if(status == "stage2") + if(valve_check()) + //Call extend on all the stage 2 pistons + if(initial) + initial = 0 + num_progress = 100 + if(!piston.extend_2_3()) + num_progress = 66 + action = "idle" + blocked = 1 + visible_message("The hydraulic pump in [src] spins faster and shuts down a few moments later.","You hear a pump spinning faster and then shutting down.") + if(timediff > time_stage_3) + status = "stage3" + action_start_time = world.time + initial = 1 + + //Wait a moment, then reverse the direction + else if(status == "stage3") + if(initial) + initial = 0 + if(timediff > time_stage_full) + action = "retract" + action_start_time = world.time + initial = 1 + + //Update the icon + update_icon() + + //Retract the pistons + else if(action == "retract" && blocked == 0 && powered(EQUIP)) //Only retract if unblocked + update_icon() + num_progress = 0 + + //Retract the 3rd stage pistons + if(status == "stage3") + if(initial) + initial = 0 + piston.retract_3_0() + if(timediff > time_stage_3) //Once the time is up, reset the icon state + piston.icon_state = initial(piston.icon_state) + status = "idle" + action = "idle" + action_start_time = world.time + initial = 1 + update_icon() + else if(status == "stage2") + if(initial) + initial = 0 + piston.retract_2_0() + if(timediff > time_stage_2) //Once the time is up, reset the icon state + piston.icon_state = initial(piston.icon_state) + status = "idle" + action = "idle" + action_start_time = world.time + initial = 1 + update_icon() + else if(status == "stage1") + if(initial) + initial = 0 + piston.retract_1_0() + if(timediff > time_stage_1) //Once the time is up, reset the icon state + piston.icon_state = initial(piston.icon_state) + status = "idle" + action = "idle" + action_start_time = world.time + initial = 1 + update_icon() + else //This shouldnt really happen, but its there just in case + piston.icon_state = initial(piston.icon_state) + piston.reset_blockers() + status = "idle" + action = "idle" + action_start_time = world.time + initial = 1 + update_icon() + + //Move all the items in the move list + for(var/atom/movable/AM in items_to_move) + if(!AM.simulated) + items_to_move -= AM + continue + if(istype(AM,/obj/machinery/crusher_piston)) + items_to_move -= AM + continue + items_to_move -= AM + //If a item could not be moved. Add it to the crush list + if(!AM.piston_move()) + items_to_crush += AM + CHECK_TICK + + //Destroy all the items in the crush list + for(var/atom/movable/AM in items_to_crush) + items_to_crush -= AM + AM.crush_act() + CHECK_TICK + + process_lock = 0 + + +/obj/machinery/crusher_base/proc/crush_start() + action = "extend" + + +/obj/machinery/crusher_base/proc/crush_abort() + //Abort the crush + //Retract all the pistons, ... + action = "retract" + initial = 1 + +/obj/machinery/crusher_base/proc/get_num_progress() + return num_progress + +/obj/machinery/crusher_base/proc/get_action() + return action + +/obj/machinery/crusher_base/proc/get_status() + return status + +/obj/machinery/crusher_base/proc/is_blocked() + return blocked + +/obj/machinery/crusher_base/proc/valve_check() //Check if the depreasurization valve is open + if(valve_open == 1) + visible_message("The hydraulic pump in [src] briefly spins up and then shuts down.","You hear a pump spinning up briefly and then shutting down.") + action = "idle" + return 0 + return 1 + +//Piston Stage 1 +/obj/machinery/crusher_piston + name = "trash compactor piston" + desc = "A colossal piston used for crushing garbage." + icon = 'packs/infinity/machinery/scrap_compactor/icons/crusherpiston.dmi' //Placeholder TODO: Get a proper icon + icon_state = "piston_0" + density = FALSE + anchored = TRUE + pixel_y = -64 + var/stage = 0 //The stage of the piston + var/obj/machinery/crusher_base/crs_base //Crusher Base the piston is linked to + var/obj/effect/piston_blocker/pb1 + var/obj/effect/piston_blocker/pb2 + var/obj/effect/piston_blocker/pb3 + + var/static/list/immovable_items + +/obj/machinery/crusher_piston/Initialize() + . = ..() + + update_turf_above() + // Setup the immovable items typecache. + // (We only want to do this once as this is a huge list.) + if(!LAZYLEN(immovable_items)) + immovable_items = typecacheof(list( + /obj/machinery, + /obj/structure, + /obj/item/modular_computer/telescreen, + )) - /obj/machinery/crusher_piston + +/obj/machinery/crusher_piston/Destroy() + reset_blockers() + if(!QDELETED(crs_base)) + QDEL_NULL(crs_base) + update_turf_above() + return ..() + +/obj/machinery/crusher_piston/proc/reset_blockers() + QDEL_NULL(pb1) + QDEL_NULL(pb2) + QDEL_NULL(pb3) + update_turf_above() + +/obj/machinery/crusher_piston/proc/extend_0_1() + use_power_oneoff(5 KILOWATTS) + var/turf/T = get_turf(src) + if(!can_extend_into(T)) + return 0 + icon_state="piston_0_1" + stage = 1 + update_turf_above() + pb1 = new(loc) + for(var/atom/movable/AM in get_turf(loc)) + crs_base.items_to_move += AM + return 1 + +/obj/machinery/crusher_piston/proc/extend_1_2() + use_power_oneoff(5 KILOWATTS) + var/turf/T = get_turf(pb1) + var/turf/extension_turf = get_step(T,SOUTH) + if(!can_extend_into(extension_turf)) + return 0 + icon_state="piston_1_2" + stage = 2 + update_turf_above() + pb2 = new(get_step(T,SOUTH)) + for(var/atom/movable/AM in extension_turf) + crs_base.items_to_move += AM + return 1 + +/obj/machinery/crusher_piston/proc/extend_2_3() + use_power_oneoff(5 KILOWATTS) + var/turf/T = get_turf(pb2) + var/turf/extension_turf = get_step(T,SOUTH) + if(!can_extend_into(extension_turf)) + return 0 + icon_state="piston_2_3" + stage = 3 + update_turf_above() + pb3 = new(get_step(T,SOUTH)) + for(var/atom/movable/AM in extension_turf) + crs_base.items_to_move += AM + return 1 + +/obj/machinery/crusher_piston/proc/retract_3_0() + icon_state="piston_3_0" + stage = 0 + update_turf_above() + reset_blockers() +/obj/machinery/crusher_piston/proc/retract_2_0() + icon_state="piston_2_0" + stage = 0 + update_turf_above() + reset_blockers() +/obj/machinery/crusher_piston/proc/retract_1_0() + icon_state="piston_1_0" + stage = 0 + update_turf_above() + reset_blockers() + +/obj/machinery/crusher_piston/proc/can_extend_into(turf/extension_turf) + //Check if atom is of a specific Type + if(istype(extension_turf,/turf/simulated/wall)) + return 0 + for(var/atom/A in extension_turf) + if(is_type_in_typecache(A, immovable_items)) + return 0 + return 1 + +/obj/machinery/crusher_piston/proc/update_turf_above() + var/turf/above = GetAbove(get_turf(src)) + if(above && isopenspace(above)) + above.update_icon() + +/obj/effect/piston_blocker + name = "trash compactor piston" + desc = "A colossal piston used for crushing garbage." + density = TRUE + anchored = TRUE + opacity = TRUE + mouse_opacity = 0 + +// +// The piston_move proc for various objects +// +// Return 1 if it could successfully be moved +// Return 0 if it could not be moved +/atom/movable/proc/piston_move() + var/turf/T = get_turf(src) + + var/list/valid_turfs = list() + for(var/dir_to_test in GLOB.cardinal) + var/turf/new_turf = get_step(T, dir_to_test) + if(!new_turf.contains_dense_objects()) + valid_turfs += new_turf + + while(length(valid_turfs)) + T = pick(valid_turfs) + valid_turfs -= T + + if(src.forceMove(T)) + return 1 + // We failed to move our target + return 0 + +/mob/living/piston_move() + for(var/i = 1, i <= PISTON_MOVE_DIVISOR, i++) + adjustBruteLoss(round(PISTON_MOVE_DAMAGE / PISTON_MOVE_DIVISOR)) + AdjustStunned(5) + AdjustWeakened(5) + return ..() + +/mob/living/carbon/piston_move() + if(can_feel_pain()) + emote("scream") + return ..() + +//Dont call the parent and return 1 to prevent effects from getting moved +/obj/effect/piston_move() + return 1 + +// +// The crush act proc +// +/atom/movable/proc/crush_act() + ex_act(1) + if(!QDELETED(src)) + qdel(src)//Just as a failsafe + +#undef PISTON_MOVE_DAMAGE +#undef PISTON_MOVE_DIVISOR diff --git a/packs/infinity/machinery/scrap_compactor/icons/crusher_base.dmi b/packs/infinity/machinery/scrap_compactor/icons/crusher_base.dmi new file mode 100644 index 0000000000000..cea8c97a4cbdf Binary files /dev/null and b/packs/infinity/machinery/scrap_compactor/icons/crusher_base.dmi differ diff --git a/packs/infinity/machinery/scrap_compactor/icons/crusherpiston.dmi b/packs/infinity/machinery/scrap_compactor/icons/crusherpiston.dmi new file mode 100644 index 0000000000000..37784e6a5c20d Binary files /dev/null and b/packs/infinity/machinery/scrap_compactor/icons/crusherpiston.dmi differ diff --git a/packs/infinity/machinery/scrap_compactor/icons/recycling.dmi b/packs/infinity/machinery/scrap_compactor/icons/recycling.dmi new file mode 100644 index 0000000000000..4d1e3fb161433 Binary files /dev/null and b/packs/infinity/machinery/scrap_compactor/icons/recycling.dmi differ diff --git a/packs/infinity/machinery/scrap_compactor/icons/refine.dmi b/packs/infinity/machinery/scrap_compactor/icons/refine.dmi new file mode 100644 index 0000000000000..7ac9d0bf47278 Binary files /dev/null and b/packs/infinity/machinery/scrap_compactor/icons/refine.dmi differ diff --git a/packs/infinity/machinery/scrap_compactor/scrap.dm b/packs/infinity/machinery/scrap_compactor/scrap.dm new file mode 100644 index 0000000000000..a2461f6bf6a3a --- /dev/null +++ b/packs/infinity/machinery/scrap_compactor/scrap.dm @@ -0,0 +1,46 @@ +#define MATERIAL_SCRAP "scrap" +#define MATERIAL_SCRAP_REFINED "refined scrap" + +/material/scrap + name = MATERIAL_SCRAP + stack_type = /obj/item/stack/material/scrap + icon_colour = "#999966" + sheet_icon_base = "sheet" + sheet_icon_reinf = "reinf-overlay" + wall_icon_base = "metal" + door_icon_base = "metal" + wall_icon_reinf = "reinf_over" + table_icon_reinf = "reinf_over" + shard_can_repair = 0 + melting_point = 540 + brute_armor = 3.2 + integrity = 100 + explosion_resistance = 3 + alloy_materials = list(DEFAULT_WALL_MATERIAL = 720, "plastic" = 420) + weight = 18 + hardness = 30 + hitsound = 'sound/weapons/smash.ogg' + sale_price = 1 + +/material/scrap/refined + name = MATERIAL_SCRAP_REFINED + stack_type = /obj/item/stack/material/refined_scrap + melting_point = 820 + brute_armor = 4 + integrity = 120 + explosion_resistance = 4 + alloy_materials = list(DEFAULT_WALL_MATERIAL = 940, "plastic" = 210) + weight = 18 + hardness = 40 + +/obj/item/stack/material/scrap + name = MATERIAL_SCRAP + icon = 'packs/infinity/machinery/scrap_compactor/icons/refine.dmi' + icon_state = "refined" + default_type = MATERIAL_SCRAP + +/obj/item/stack/material/refined_scrap + name = MATERIAL_SCRAP_REFINED + icon = 'packs/infinity/machinery/scrap_compactor/icons/refine.dmi' + icon_state = "refined" + default_type = MATERIAL_SCRAP_REFINED diff --git a/packs/infinity/machinery/scrap_compactor/scrap_circuitboards.dm b/packs/infinity/machinery/scrap_compactor/scrap_circuitboards.dm new file mode 100644 index 0000000000000..32147d91c9127 --- /dev/null +++ b/packs/infinity/machinery/scrap_compactor/scrap_circuitboards.dm @@ -0,0 +1,60 @@ +/obj/item/stock_parts/circuitboard/crusher + name = "circuit board (crusher)" + board_type = "machine" + origin_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 3) + build_path = /obj/machinery/crusher_base + req_components = list( + /obj/item/stock_parts/matter_bin = 3, + /obj/item/stock_parts/manipulator = 3, + /obj/item/reagent_containers/glass/beaker = 3 + ) + additional_spawn_components = list( + /obj/item/stock_parts/power/apc/buildable = 1 + ) + +/obj/item/stock_parts/circuitboard/pile_ripper + name = "circuit board (pile ripper)" + board_type = "machine" + origin_tech = list(TECH_ENGINEERING = 3) + build_path = /obj/machinery/pile_ripper + req_components = list( + /obj/item/stock_parts/manipulator = 1 + ) + additional_spawn_components = list( + /obj/item/stock_parts/power/apc/buildable = 1 + ) + +/obj/item/stock_parts/circuitboard/recycler + name = "circuit board (recycler)" + board_type = "machine" + origin_tech = list(TECH_ENGINEERING = 3) + build_path = /obj/machinery/recycler + req_components = list( + /obj/item/stock_parts/manipulator = 1 + ) + additional_spawn_components = list( + /obj/item/stock_parts/power/apc/buildable = 1 + ) + +// RnD console designs + +/datum/design/circuit/scrap_crusher + name = "crusher" + id = "crusher" + req_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 3, TECH_DATA = 3) + build_path = /obj/item/stock_parts/circuitboard/crusher + sort_string = "KCASA" + +/datum/design/circuit/scrap_ripper + name = "pile ripper" + id = "pile_ripper" + req_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 2) + build_path = /obj/item/stock_parts/circuitboard/pile_ripper + sort_string = "KCASB" + +/datum/design/circuit/srcap_recycler + name = "recycler" + id = "recycler" + req_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 2) + build_path = /obj/item/stock_parts/circuitboard/recycler + sort_string = "KCASC" diff --git a/packs/infinity/machinery/scrap_compactor/scrap_compactor.dm b/packs/infinity/machinery/scrap_compactor/scrap_compactor.dm new file mode 100644 index 0000000000000..d0d55818e9452 --- /dev/null +++ b/packs/infinity/machinery/scrap_compactor/scrap_compactor.dm @@ -0,0 +1,9 @@ +//FIles include +#include "crusher_control.dm" +#include "crusher_piston.dm" +#include "scrap.dm" +#include "scrap_circuitboards.dm" +#include "scrap_pileripper.dm" +#include "scrap_refine.dm" +#include "scrap_refinery.dm" +#include "scrap_stacker.dm" diff --git a/packs/infinity/machinery/scrap_compactor/scrap_pileripper.dm b/packs/infinity/machinery/scrap_compactor/scrap_pileripper.dm new file mode 100644 index 0000000000000..45362b6589450 --- /dev/null +++ b/packs/infinity/machinery/scrap_compactor/scrap_pileripper.dm @@ -0,0 +1,155 @@ +/obj/machinery/pile_ripper + name = "pile ripper" + desc = "This machine rips everything in front of it apart." + icon = 'icons/obj/machines/recycling.dmi' + icon_state = "grinder-o0" + layer = MOB_LAYER+1 // Overhead + anchored = TRUE + density = TRUE + use_power = 1 + idle_power_usage = 300 + + var/safety_mode = 0 // Temporality stops the machine if it detects a mob + var/icon_name = "grinder-o" + var/blood = 0 + var/rating = 1 + var/last_ripped = 0 + construct_state = /singleton/machine_construction/default/panel_closed + uncreated_component_parts = list( + /obj/item/stock_parts/radio/receiver, + /obj/item/stock_parts/power/apc + ) + +/obj/machinery/pile_ripper/Initialize() + . = ..() + RefreshParts() + update_icon() + +/obj/machinery/pile_ripper/Process() + if(last_ripped >= world.time) + return + last_ripped = world.time + if(safety_mode) + playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) + safety_mode = 0 + update_icon() + var/turf/ripped_turf = get_turf(get_step(src, 8)) + for(var/mob/living/poor_soul in ripped_turf) + if(emagged || prob(25)) + eat(poor_soul) + else + stop(poor_soul) + var/count = 0 + for(var/obj/ripped_item in ripped_turf) + if(count >= rating) + break + if(istype(ripped_item, /obj/structure/rubble)) + var/obj/structure/rubble/pile = ripped_item + pile.crush_act() + count++ + else if(istype(ripped_item, /obj/item)) + ripped_item.forceMove(src.loc) + if(prob(20)) + qdel(ripped_item) + else if(istype(ripped_item, /obj/structure/scrap_cube)) + var/obj/structure/scrap_cube/cube = ripped_item + cube.make_pile() + +/obj/machinery/pile_ripper/RefreshParts() + for(var/obj/item/stock_parts/manipulator/M in component_parts) + rating = M.rating + +/obj/machinery/pile_ripper/examine(mob/user) + . = ..() + . += SPAN_NOTICE("The power light is [(stat & MACHINE_STAT_NOPOWER) ? "off" : "on"].") + . += SPAN_NOTICE("The safety-mode light is [safety_mode ? "on" : "off"].") + . += SPAN_NOTICE("The safety-sensors status light is [emagged ? "off" : "on"].") + +/obj/machinery/pile_ripper/power_change() + ..() + update_icon() + +/obj/machinery/pile_ripper/proc/stop(mob/living/L) + playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) + safety_mode = 1 + update_icon() + L.forceMove(src.loc) + + last_ripped += SAFETY_COOLDOWN + update_icon() + +/obj/machinery/pile_ripper/use_tool(obj/item/tool, mob/living/user, list/click_params) + add_fingerprint(user) + if (istype(tool, /obj/item/card/emag)) + emag_act(user) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + return TRUE + return ..() + +/obj/machinery/pile_ripper/emag_act(mob/user) + if(!emagged) + emagged = TRUE + if(safety_mode) + safety_mode = 0 + update_icon() + playsound(src.loc, "sparks", 75, 1, -1) + to_chat(user, SPAN_NOTICE ("You use the cryptographic sequencer on the [src.name].")) + +/obj/machinery/pile_ripper/on_update_icon() + ..() + var/is_powered = !(stat & (MACHINE_BROKEN_GENERIC|MACHINE_STAT_NOPOWER)) + if(safety_mode) + is_powered = 0 + icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end + + +/obj/machinery/pile_ripper/proc/eat(mob/living/L) + if(issilicon(L)) + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + else + playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) + + var/gib = 1 + // By default, the emagged pile_ripper will gib all non-carbons. (human simple animal mobs don't count) + if(iscarbon(L)) + var/mob/living/carbon/C = L + gib = 0 + if(C.can_feel_pain()) + C.emote("scream") + add_blood(L) + if(!blood && !issilicon(L)) + blood = 1 + update_icon() + if(gib) + L.gib() + + // Instantly lie down, also go unconscious from the pain, before you die. + L.Paralyse(5) + // Strip some clothing + + for(var/obj/item/I in L.get_equipped_items()) + if(L.unEquip(I)) + I.forceMove(loc) + if(prob(15)) //saved by ripped cloth + return + + // Start shredding meat + + var/slab_name = L.name + var/slab_type = /obj/item/reagent_containers/food/snacks/meat + + if(iscarbon(L)) + if(istype(L,/mob/living/carbon/human)) + slab_type = /obj/item/reagent_containers/food/snacks/meat/human + if(L.is_species(SPECIES_MONKEY)) + slab_type = /obj/item/reagent_containers/food/snacks/meat/monkey + var/obj/item/reagent_containers/food/snacks/meat/new_meat = new slab_type(get_turf(get_step(src, 4))) + new_meat.name = "[slab_name] [new_meat.name]" + new_meat.reagents.add_reagent(/datum/reagent/nutriment, 10) + if(iscarbon(L)) + var/mob/living/carbon/C = L + C.nutrition -= 100 + if(C.nutrition > 0) + C.adjustBruteLoss(45) + else + C.gib() diff --git a/packs/infinity/machinery/scrap_compactor/scrap_refine.dm b/packs/infinity/machinery/scrap_compactor/scrap_refine.dm new file mode 100644 index 0000000000000..a86dda80d03dd --- /dev/null +++ b/packs/infinity/machinery/scrap_compactor/scrap_refine.dm @@ -0,0 +1,77 @@ +/obj/item/crush_act() // This is how we get unrefined scrap in compactor + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + for(var/i in 1 to w_class) + new /obj/item/scrap_lump(loc) + for(var/obj/item/I in contents) + I.forceMove(loc) + I.crush_act() + ..() + +/obj/item/organ/crush_act() // prevent gaining scrap from organs. Yep this is... so uncivilised + ex_act(1) + if(!QDELETED(src)) + qdel(src) + +/obj/structure/scrap_cube + name = "compressed scrap" + desc = "A cube made of scrap compressed with hydraulic clamp." + density = TRUE + anchored = FALSE + icon_state = "trash_cube" + icon = 'packs/infinity/machinery/scrap_compactor/icons/refine.dmi' + +/obj/structure/scrap_cube/crush_act() + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + for(var/obj/structure/rubble/r in contents) + for(var/a in 1 to LAZYLEN(r.lootleft)) + new /obj/item/scrap_lump(loc) + qdel(src) + +/obj/structure/scrap_cube/proc/make_pile() + for(var/obj/item in contents) + item.forceMove(loc) + qdel(src) + +/obj/structure/scrap_cube/Initialize(mapload, size = -1) + . = ..() + if(size < 0) + new /obj/structure/rubble/house(src) + +/obj/structure/scrap_cube/use_tool(obj/item/tool, mob/living/user, list/click_params) + user.do_attack_animation(src) + user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) + if (istype(tool, /obj/item)) + if(tool.force >=8) + visible_message(SPAN_NOTICE ("The [user] smashes the [src], restoring it's original form.")) + make_pile() + else + visible_message(SPAN_NOTICE ("The [user] smashes the [src], but [tool] is too weak to break it!")) + return TRUE + return ..() + + +/obj/item/scrap_lump + name = "unrefined scrap" + desc = "This thing is messed up beyond any recognition. Into the grinder it goes!" + icon = 'packs/infinity/machinery/scrap_compactor/icons/refine.dmi' + icon_state = "unrefined" + w_class = 4 + +/obj/item/scrap_lump/Initialize() + . = ..() + pixel_x = rand(0, 16) - 8 + pixel_y = rand(0, 8) - 8 + +/obj/item/scrap_lump/crush_act() + return + +// rubble // +/obj/structure/rubble/proc/make_cube() + var/obj/container = new /obj/structure/scrap_cube(loc, lootleft) + forceMove(container) + +/obj/structure/rubble/crush_act() + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + for(var/a in 1 to LAZYLEN(lootleft)) + new /obj/item/scrap_lump(loc) + qdel(src) diff --git a/packs/infinity/machinery/scrap_compactor/scrap_refinery.dm b/packs/infinity/machinery/scrap_compactor/scrap_refinery.dm new file mode 100644 index 0000000000000..1703ce3ad5c9a --- /dev/null +++ b/packs/infinity/machinery/scrap_compactor/scrap_refinery.dm @@ -0,0 +1,159 @@ +var/global/const/SAFETY_COOLDOWN = 100 + +/obj/machinery/recycler + name = "recycler" + desc = "A large crushing machine which is used to grind lumps of trash down; there are lights on the side of it." + icon = 'icons/obj/machines/recycling.dmi' + icon_state = "grinder-b0" + layer = MOB_LAYER+1 // Overhead + anchored = TRUE + density = TRUE + var/safety_mode = 0 // Temporality stops the machine if it detects a mob + var/grinding = 0 + var/icon_name = "grinder-b" + var/blood = 0 + var/eat_dir = WEST + var/chance_to_recycle = 1 + construct_state = /singleton/machine_construction/default/panel_closed + uncreated_component_parts = list( + /obj/item/stock_parts/radio/receiver, + /obj/item/stock_parts/power/apc + ) + +/obj/machinery/recycler/Initialize() + . = ..() + RefreshParts() + update_icon() + +/obj/machinery/recycler/RefreshParts() + for(var/obj/item/stock_parts/manipulator/M in component_parts) + chance_to_recycle = 25 * M.rating //% of materials salvaged + chance_to_recycle = min(100, chance_to_recycle) + +/obj/machinery/recycler/examine(mob/user) + . = ..() + . += SPAN_NOTICE("The power light is [(stat & MACHINE_STAT_NOPOWER) ? "off" : "on"].") + . += SPAN_NOTICE("The safety-mode light is [safety_mode ? "on" : "off"].") + . += SPAN_NOTICE("The safety-sensors status light is [emagged ? "off" : "on"].") + +/obj/machinery/recycler/power_change() + ..() + update_icon() + + +/obj/machinery/recycler/use_tool(obj/item/tool, mob/living/user, list/click_params) + add_fingerprint(user) + if (istype(tool, /obj/item/card/emag)) + emag_act(user) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + return TRUE + return ..() + +/obj/machinery/recycler/emag_act(mob/user) + if(!emagged) + emagged = TRUE + if(safety_mode) + safety_mode = 0 + update_icon() + playsound(src.loc, "sparks", 75, 1, -1) + to_chat(user, "You use the cryptographic sequencer on the [src.name].") + +/obj/machinery/recycler/on_update_icon() + ..() + var/is_powered = !(stat & (MACHINE_BROKEN_GENERIC|MACHINE_STAT_NOPOWER)) + if(safety_mode) + is_powered = 0 + icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end + +// This is purely for admin possession !FUN!. +/obj/machinery/recycler/Bump(atom/movable/AM) + ..() + if(AM) + Bumped(AM) + + +/obj/machinery/recycler/Bumped(atom/movable/AM) + + if(stat & (MACHINE_BROKEN_GENERIC|MACHINE_STAT_NOPOWER)) + return + if(!anchored) + return + if(safety_mode) + return + + var/move_dir = get_dir(loc, AM.loc) + if(move_dir == eat_dir) + if(isliving(AM)) + if(emagged) + eat(AM) + else + stop(AM) + else if(istype(AM, /obj/item)) + recycle(AM) + else // Can't recycle + playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) + AM.forceMove(src.loc) + +/obj/machinery/recycler/proc/recycle(obj/item/I, sound = 1) + I.forceMove(src.loc) + if(!istype(I)) + return + + if(sound) + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + var/chance_mod = 1 + if(!istype(I, /obj/item/scrap_lump)) + chance_mod = 5 + if(prob(chance_to_recycle / chance_mod)) + new /obj/item/stack/material/refined_scrap(loc) + qdel(I) + +/obj/machinery/recycler/proc/stop(mob/living/L) + set waitfor = 0 + playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) + safety_mode = 1 + update_icon() + L.forceMove(src.loc) + + sleep(SAFETY_COOLDOWN) + playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) + safety_mode = 0 + update_icon() + +/obj/machinery/recycler/proc/eat(mob/living/L) + + L.forceMove(src.loc) + + if(issilicon(L)) + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + + var/gib = 1 + // By default, the emagged recycler will gib all non-carbons. (human simple animal mobs don't count) + if(iscarbon(L)) + var/mob/living/carbon/C = L + gib = 0 + if(C.can_feel_pain()) + C.emote("scream") + add_blood(L) + + if(!blood && !issilicon(L)) + blood = 1 + update_icon() + + // Remove and recycle the equipped items. + for(var/obj/item/I in L.get_equipped_items()) + if(L.unEquip(I)) + recycle(I, 0) + + // Instantly lie down, also go unconscious from the pain, before you die. + L.Paralyse(5) + L.anchored = TRUE + // For admin fun, var edit emagged to 2. + if(gib || emagged == 2) + L.gib() + playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) + else if(emagged == 1) + for(var/i = 1 to 3) + sleep(10) + L.adjustBruteLoss(80) + L.anchored = FALSE diff --git a/packs/infinity/machinery/scrap_compactor/scrap_stacker.dm b/packs/infinity/machinery/scrap_compactor/scrap_stacker.dm new file mode 100644 index 0000000000000..337f01b1ea08c --- /dev/null +++ b/packs/infinity/machinery/scrap_compactor/scrap_stacker.dm @@ -0,0 +1,39 @@ +/obj/machinery/scrap/stacking_machine + name = "scrap stacking machine" + icon = 'icons/obj/machines/mining/mining_machines.dmi' + icon_state = "stacker" + density = TRUE + anchored = TRUE + use_power = 0 + var/obj/machinery/mineral/input = null + var/obj/machinery/mineral/output = null + var/list/stack_storage[0] + var/list/stack_paths[0] + var/scrap_amount = 0 + var/stack_amt = 20 // Amount to stack before releassing + +/obj/machinery/scrap/stacking_machine/Bumped(atom/movable/AM) + if(stat & (MACHINE_BROKEN_GENERIC|MACHINE_STAT_NOPOWER)) + return + if(istype(AM, /mob/living)) + return + if(istype(AM, /obj/item/stack/material/refined_scrap)) + var/obj/item/stack/material/refined_scrap/S = AM + scrap_amount += S.get_amount() + qdel(S) + if(scrap_amount >= stack_amt) + new /obj/item/stack/material/refined_scrap(loc, stack_amt) + scrap_amount -= stack_amt + else + AM.forceMove(loc) + +/obj/machinery/scrap/stacking_machine/physical_attack_hand(mob/user) + . = ..() + if(.) + return + if(scrap_amount < 1) + return 1 + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + visible_message("\The [src] was forced to release everything inside.") + new /obj/item/stack/material/refined_scrap(loc, scrap_amount) + scrap_amount = 0 diff --git a/packs/infinity/machinery/survival_pod.dm b/packs/infinity/machinery/survival_pod.dm new file mode 100644 index 0000000000000..b0c82cd8979b1 --- /dev/null +++ b/packs/infinity/machinery/survival_pod.dm @@ -0,0 +1,58 @@ +//Survival/Stasis sleepers +/obj/machinery/sleeper/survival_pod + name = "stasis pod" + desc = "A comfortable pod for stasing of wounded occupants. Similar pods were on first humanity's colonial ships. Now days, you can see them in EMT centers with stasis setting from 20x to 22x." + icon = 'packs/infinity/icons/obj/Cryogenic2.dmi' + icon_state = "stasis_0" + base_type = /obj/machinery/sleeper/survival_pod + stasis = 20 + active_power_usage = 55000 + +/obj/machinery/sleeper/survival_pod/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.outside_state) + var/data[0] + + data["power"] = stat & (MACHINE_BROKEN_GENERIC|MACHINE_STAT_NOPOWER) ? 0 : 1 + + if(occupant) + var/scan = user.skill_check(SKILL_MEDICAL, SKILL_TRAINED) ? medical_scan_results(occupant) : "Contains: \the [occupant]" + scan = replacetext(scan,"'scan_notice'","'white'") + scan = replacetext(scan,"'scan_warning'","'average'") + scan = replacetext(scan,"'scan_danger'","'bad'") + data["occupant"] = scan + else + data["occupant"] = 0 + + ui = SSnano.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "stasis.tmpl", "Stasis Pod UI", 400, 300, state = state) + ui.set_initial_data(data) + ui.open() + +/obj/machinery/sleeper/survival_pod/on_update_icon() + if(!occupant) + icon_state = "stasis_0" + else if(inoperable()) + icon_state = "stasis_1" + else + icon_state = "stasis_2" + +/obj/item/stock_parts/circuitboard/sleeper/survival_pod + name = "circuit board (stasis pod)" + build_path = /obj/machinery/sleeper/survival_pod + board_type = "machine" + origin_tech = list(TECH_ENGINEERING = 3, TECH_BIO = 5, TECH_DATA = 3) + req_components = list ( + /obj/item/stock_parts/scanning_module = 1, + /obj/item/stock_parts/manipulator = 2) + additional_spawn_components = list( + /obj/item/stock_parts/console_screen = 1, + /obj/item/stock_parts/keyboard = 1, + /obj/item/stock_parts/power/apc/buildable = 1 + ) + +/datum/design/circuit/sleeper/survival_pod + name = "stasis pod" + id = "survival_pod" + req_tech = list(TECH_ENGINEERING = 3, TECH_BIO = 5, TECH_DATA = 3) + build_path = /obj/item/stock_parts/circuitboard/sleeper/survival_pod + sort_string = "FACAG" diff --git a/packs/infinity/sound/AI/TG/attention.ogg b/packs/infinity/sound/AI/TG/attention.ogg new file mode 100644 index 0000000000000..912be4425ebb3 Binary files /dev/null and b/packs/infinity/sound/AI/TG/attention.ogg differ diff --git a/packs/infinity/sound/AI/TG/newai.ogg b/packs/infinity/sound/AI/TG/newai.ogg new file mode 100644 index 0000000000000..35aba34564f35 Binary files /dev/null and b/packs/infinity/sound/AI/TG/newai.ogg differ diff --git a/packs/infinity/sound/SS2/ambience/ambmaintence.wav b/packs/infinity/sound/SS2/ambience/ambmaintence.wav new file mode 100644 index 0000000000000..15e6ba266d3e5 Binary files /dev/null and b/packs/infinity/sound/SS2/ambience/ambmaintence.wav differ diff --git a/packs/infinity/sound/SS2/ambience/ambxerxes.wav b/packs/infinity/sound/SS2/ambience/ambxerxes.wav new file mode 100644 index 0000000000000..53df7d61a7e57 Binary files /dev/null and b/packs/infinity/sound/SS2/ambience/ambxerxes.wav differ diff --git a/packs/infinity/sound/SS2/effects/buttons/bhac.wav b/packs/infinity/sound/SS2/effects/buttons/bhac.wav new file mode 100644 index 0000000000000..14b305e506873 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/buttons/bhac.wav differ diff --git a/packs/infinity/sound/SS2/effects/buttons/bkeypad.wav b/packs/infinity/sound/SS2/effects/buttons/bkeypad.wav new file mode 100644 index 0000000000000..c84131d1bf274 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/buttons/bkeypad.wav differ diff --git a/packs/infinity/sound/SS2/effects/buttons/bset.wav b/packs/infinity/sound/SS2/effects/buttons/bset.wav new file mode 100644 index 0000000000000..3f748ec34304e Binary files /dev/null and b/packs/infinity/sound/SS2/effects/buttons/bset.wav differ diff --git a/packs/infinity/sound/SS2/effects/buttons/butelev.wav b/packs/infinity/sound/SS2/effects/buttons/butelev.wav new file mode 100644 index 0000000000000..50d8c7332ffd7 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/buttons/butelev.wav differ diff --git a/packs/infinity/sound/SS2/effects/critical.wav b/packs/infinity/sound/SS2/effects/critical.wav new file mode 100644 index 0000000000000..b702996869d9d Binary files /dev/null and b/packs/infinity/sound/SS2/effects/critical.wav differ diff --git a/packs/infinity/sound/SS2/effects/emag_act.wav b/packs/infinity/sound/SS2/effects/emag_act.wav new file mode 100644 index 0000000000000..06cadbf3f1b72 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/emag_act.wav differ diff --git a/packs/infinity/sound/SS2/effects/hypo.wav b/packs/infinity/sound/SS2/effects/hypo.wav new file mode 100644 index 0000000000000..2395e26cebb82 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/hypo.wav differ diff --git a/packs/infinity/sound/SS2/effects/machines/access_needed.wav b/packs/infinity/sound/SS2/effects/machines/access_needed.wav new file mode 100644 index 0000000000000..51abec781e953 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/machines/access_needed.wav differ diff --git a/packs/infinity/sound/SS2/effects/machines/airlock_close.wav b/packs/infinity/sound/SS2/effects/machines/airlock_close.wav new file mode 100644 index 0000000000000..ed71a3da70277 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/machines/airlock_close.wav differ diff --git a/packs/infinity/sound/SS2/effects/machines/airlock_open.wav b/packs/infinity/sound/SS2/effects/machines/airlock_open.wav new file mode 100644 index 0000000000000..9ef197e76b038 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/machines/airlock_open.wav differ diff --git a/packs/infinity/sound/SS2/effects/machines/blast_open_close.ogg b/packs/infinity/sound/SS2/effects/machines/blast_open_close.ogg new file mode 100644 index 0000000000000..f7c24b59ccebb Binary files /dev/null and b/packs/infinity/sound/SS2/effects/machines/blast_open_close.ogg differ diff --git a/packs/infinity/sound/SS2/effects/machines/countdown.wav b/packs/infinity/sound/SS2/effects/machines/countdown.wav new file mode 100644 index 0000000000000..a7d46e09a57b9 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/machines/countdown.wav differ diff --git a/packs/infinity/sound/SS2/effects/machines/error.wav b/packs/infinity/sound/SS2/effects/machines/error.wav new file mode 100644 index 0000000000000..44fbef5c4c242 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/machines/error.wav differ diff --git a/packs/infinity/sound/SS2/effects/machines/fax1.wav b/packs/infinity/sound/SS2/effects/machines/fax1.wav new file mode 100644 index 0000000000000..2f00ef871050c Binary files /dev/null and b/packs/infinity/sound/SS2/effects/machines/fax1.wav differ diff --git a/packs/infinity/sound/SS2/effects/machines/fax2.wav b/packs/infinity/sound/SS2/effects/machines/fax2.wav new file mode 100644 index 0000000000000..e6856ae2c7916 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/machines/fax2.wav differ diff --git a/packs/infinity/sound/SS2/effects/machines/keycard.wav b/packs/infinity/sound/SS2/effects/machines/keycard.wav new file mode 100644 index 0000000000000..28bb82f7f8439 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/machines/keycard.wav differ diff --git a/packs/infinity/sound/SS2/effects/machines/login.wav b/packs/infinity/sound/SS2/effects/machines/login.wav new file mode 100644 index 0000000000000..3d837fa2862c3 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/machines/login.wav differ diff --git a/packs/infinity/sound/SS2/effects/machines/medbed.wav b/packs/infinity/sound/SS2/effects/machines/medbed.wav new file mode 100644 index 0000000000000..0ec449429198b Binary files /dev/null and b/packs/infinity/sound/SS2/effects/machines/medbed.wav differ diff --git a/packs/infinity/sound/SS2/effects/mempurge.wav b/packs/infinity/sound/SS2/effects/mempurge.wav new file mode 100644 index 0000000000000..8e76940dda696 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/mempurge.wav differ diff --git a/packs/infinity/sound/SS2/effects/simcomp.wav b/packs/infinity/sound/SS2/effects/simcomp.wav new file mode 100644 index 0000000000000..798c8ed31a9a6 Binary files /dev/null and b/packs/infinity/sound/SS2/effects/simcomp.wav differ diff --git a/packs/infinity/sound/SS2/music/02_elevator.mp3 b/packs/infinity/sound/SS2/music/02_elevator.mp3 new file mode 100644 index 0000000000000..75ecb67547c1e Binary files /dev/null and b/packs/infinity/sound/SS2/music/02_elevator.mp3 differ diff --git a/packs/infinity/sound/TG/cult/invoke_general.ogg b/packs/infinity/sound/TG/cult/invoke_general.ogg new file mode 100644 index 0000000000000..67ce044010025 Binary files /dev/null and b/packs/infinity/sound/TG/cult/invoke_general.ogg differ diff --git a/packs/infinity/sound/TG/cult/narsie_attack.ogg b/packs/infinity/sound/TG/cult/narsie_attack.ogg new file mode 100644 index 0000000000000..244b86a1a8c28 Binary files /dev/null and b/packs/infinity/sound/TG/cult/narsie_attack.ogg differ diff --git a/packs/infinity/sound/ambience/Custom_grav.ogg b/packs/infinity/sound/ambience/Custom_grav.ogg new file mode 100644 index 0000000000000..35075b5ff7ad2 Binary files /dev/null and b/packs/infinity/sound/ambience/Custom_grav.ogg differ diff --git a/packs/infinity/sound/ambience/ambispace.ogg b/packs/infinity/sound/ambience/ambispace.ogg new file mode 100644 index 0000000000000..f217d999b9117 Binary files /dev/null and b/packs/infinity/sound/ambience/ambispace.ogg differ diff --git a/packs/infinity/sound/ambience/external/1/LICENSE b/packs/infinity/sound/ambience/external/1/LICENSE new file mode 100644 index 0000000000000..44b4fd129d0b6 --- /dev/null +++ b/packs/infinity/sound/ambience/external/1/LICENSE @@ -0,0 +1,3 @@ +The resources in this folder and its subfolders are taken from https://zvukipro.com, which publicly distributes resources. +Binaries in this folder and its subfolders are not licensed by licenses installed in the project root folder. +But licensed under the license (if any) of the site mentioned above. diff --git a/packs/infinity/sound/ambience/external/1/neon_hum.ogg b/packs/infinity/sound/ambience/external/1/neon_hum.ogg new file mode 100644 index 0000000000000..53668a07db790 Binary files /dev/null and b/packs/infinity/sound/ambience/external/1/neon_hum.ogg differ diff --git a/packs/infinity/sound/ambience/horror_1.ogg b/packs/infinity/sound/ambience/horror_1.ogg new file mode 100644 index 0000000000000..9cc7a68e3c535 Binary files /dev/null and b/packs/infinity/sound/ambience/horror_1.ogg differ diff --git a/packs/infinity/sound/ambience/horror_2.ogg b/packs/infinity/sound/ambience/horror_2.ogg new file mode 100644 index 0000000000000..a8369c8dfa7cb Binary files /dev/null and b/packs/infinity/sound/ambience/horror_2.ogg differ diff --git a/packs/infinity/sound/ambience/horror_3.ogg b/packs/infinity/sound/ambience/horror_3.ogg new file mode 100644 index 0000000000000..161cd12684b75 Binary files /dev/null and b/packs/infinity/sound/ambience/horror_3.ogg differ diff --git a/packs/infinity/sound/customs/roer_voice_helper/voice_helper_four.ogg b/packs/infinity/sound/customs/roer_voice_helper/voice_helper_four.ogg new file mode 100644 index 0000000000000..9b0c9cb73e9be Binary files /dev/null and b/packs/infinity/sound/customs/roer_voice_helper/voice_helper_four.ogg differ diff --git a/packs/infinity/sound/customs/roer_voice_helper/voice_helper_one.ogg b/packs/infinity/sound/customs/roer_voice_helper/voice_helper_one.ogg new file mode 100644 index 0000000000000..347d19ad25d6d Binary files /dev/null and b/packs/infinity/sound/customs/roer_voice_helper/voice_helper_one.ogg differ diff --git a/packs/infinity/sound/customs/roer_voice_helper/voice_helper_three.ogg b/packs/infinity/sound/customs/roer_voice_helper/voice_helper_three.ogg new file mode 100644 index 0000000000000..33f74ba4dcb9d Binary files /dev/null and b/packs/infinity/sound/customs/roer_voice_helper/voice_helper_three.ogg differ diff --git a/packs/infinity/sound/customs/roer_voice_helper/voice_helper_two.ogg b/packs/infinity/sound/customs/roer_voice_helper/voice_helper_two.ogg new file mode 100644 index 0000000000000..1014f1d37085f Binary files /dev/null and b/packs/infinity/sound/customs/roer_voice_helper/voice_helper_two.ogg differ diff --git a/packs/infinity/sound/customs/thekekman666/crowbar/crowbar_attack_self.ogg b/packs/infinity/sound/customs/thekekman666/crowbar/crowbar_attack_self.ogg new file mode 100644 index 0000000000000..5758af1025650 Binary files /dev/null and b/packs/infinity/sound/customs/thekekman666/crowbar/crowbar_attack_self.ogg differ diff --git a/packs/infinity/sound/customs/thekekman666/hevy_suit/hevy_suit_attack_by.ogg b/packs/infinity/sound/customs/thekekman666/hevy_suit/hevy_suit_attack_by.ogg new file mode 100644 index 0000000000000..d779f6cbff8f4 Binary files /dev/null and b/packs/infinity/sound/customs/thekekman666/hevy_suit/hevy_suit_attack_by.ogg differ diff --git a/packs/infinity/sound/customs/thekekman666/hevy_suit/hevy_suit_destroyed.ogg b/packs/infinity/sound/customs/thekekman666/hevy_suit/hevy_suit_destroyed.ogg new file mode 100644 index 0000000000000..5224e94fd6c3a Binary files /dev/null and b/packs/infinity/sound/customs/thekekman666/hevy_suit/hevy_suit_destroyed.ogg differ diff --git a/packs/infinity/sound/customs/wolforbykot/chainsword_attack.ogg b/packs/infinity/sound/customs/wolforbykot/chainsword_attack.ogg new file mode 100644 index 0000000000000..b7fc7c32c18fd Binary files /dev/null and b/packs/infinity/sound/customs/wolforbykot/chainsword_attack.ogg differ diff --git a/packs/infinity/sound/customs/wolforbykot/chainsword_on.ogg b/packs/infinity/sound/customs/wolforbykot/chainsword_on.ogg new file mode 100644 index 0000000000000..dccaa862d6a19 Binary files /dev/null and b/packs/infinity/sound/customs/wolforbykot/chainsword_on.ogg differ diff --git a/packs/infinity/sound/effects/FOLEY_Gaffer_Tape_Tear_mono.ogg b/packs/infinity/sound/effects/FOLEY_Gaffer_Tape_Tear_mono.ogg new file mode 100644 index 0000000000000..1544c2ce1cb03 Binary files /dev/null and b/packs/infinity/sound/effects/FOLEY_Gaffer_Tape_Tear_mono.ogg differ diff --git a/packs/infinity/sound/effects/GLASS_Rattle_Many_Fragments_01_stereo.ogg b/packs/infinity/sound/effects/GLASS_Rattle_Many_Fragments_01_stereo.ogg new file mode 100644 index 0000000000000..92bb50fc0b07f Binary files /dev/null and b/packs/infinity/sound/effects/GLASS_Rattle_Many_Fragments_01_stereo.ogg differ diff --git a/packs/infinity/sound/effects/Splash_Small_01_mono.ogg b/packs/infinity/sound/effects/Splash_Small_01_mono.ogg new file mode 100644 index 0000000000000..ad7be8d9c96ac Binary files /dev/null and b/packs/infinity/sound/effects/Splash_Small_01_mono.ogg differ diff --git a/packs/infinity/sound/effects/alarm.ogg b/packs/infinity/sound/effects/alarm.ogg new file mode 100644 index 0000000000000..e6d838905f5b6 Binary files /dev/null and b/packs/infinity/sound/effects/alarm.ogg differ diff --git a/packs/infinity/sound/effects/bamfgas.ogg b/packs/infinity/sound/effects/bamfgas.ogg new file mode 100644 index 0000000000000..1c845a5632ee3 Binary files /dev/null and b/packs/infinity/sound/effects/bamfgas.ogg differ diff --git a/packs/infinity/sound/effects/beer_open.ogg b/packs/infinity/sound/effects/beer_open.ogg new file mode 100644 index 0000000000000..3970c55810bcf Binary files /dev/null and b/packs/infinity/sound/effects/beer_open.ogg differ diff --git a/packs/infinity/sound/effects/bullethit1.ogg b/packs/infinity/sound/effects/bullethit1.ogg new file mode 100644 index 0000000000000..9139773be1e6f Binary files /dev/null and b/packs/infinity/sound/effects/bullethit1.ogg differ diff --git a/packs/infinity/sound/effects/bullethit2.ogg b/packs/infinity/sound/effects/bullethit2.ogg new file mode 100644 index 0000000000000..8e4fbdea801d5 Binary files /dev/null and b/packs/infinity/sound/effects/bullethit2.ogg differ diff --git a/packs/infinity/sound/effects/bullethit3.ogg b/packs/infinity/sound/effects/bullethit3.ogg new file mode 100644 index 0000000000000..1d59d8522a2b5 Binary files /dev/null and b/packs/infinity/sound/effects/bullethit3.ogg differ diff --git a/packs/infinity/sound/effects/bullethit4.ogg b/packs/infinity/sound/effects/bullethit4.ogg new file mode 100644 index 0000000000000..1e79d63fe4132 Binary files /dev/null and b/packs/infinity/sound/effects/bullethit4.ogg differ diff --git a/packs/infinity/sound/effects/clank_cube_touched.ogg b/packs/infinity/sound/effects/clank_cube_touched.ogg new file mode 100644 index 0000000000000..e1cf26c8561da Binary files /dev/null and b/packs/infinity/sound/effects/clank_cube_touched.ogg differ diff --git a/packs/infinity/sound/effects/creepyshriek.ogg b/packs/infinity/sound/effects/creepyshriek.ogg new file mode 100644 index 0000000000000..86933130d5df4 Binary files /dev/null and b/packs/infinity/sound/effects/creepyshriek.ogg differ diff --git a/packs/infinity/sound/effects/curtain.ogg b/packs/infinity/sound/effects/curtain.ogg new file mode 100644 index 0000000000000..b3be91aaa28bb Binary files /dev/null and b/packs/infinity/sound/effects/curtain.ogg differ diff --git a/packs/infinity/sound/effects/fire01.ogg b/packs/infinity/sound/effects/fire01.ogg new file mode 100644 index 0000000000000..0011e542e91ec Binary files /dev/null and b/packs/infinity/sound/effects/fire01.ogg differ diff --git a/packs/infinity/sound/effects/fire02.ogg b/packs/infinity/sound/effects/fire02.ogg new file mode 100644 index 0000000000000..7858ece47ab50 Binary files /dev/null and b/packs/infinity/sound/effects/fire02.ogg differ diff --git a/packs/infinity/sound/effects/fire03.ogg b/packs/infinity/sound/effects/fire03.ogg new file mode 100644 index 0000000000000..281b425b3fc93 Binary files /dev/null and b/packs/infinity/sound/effects/fire03.ogg differ diff --git a/packs/infinity/sound/effects/gore/blood_splat.ogg b/packs/infinity/sound/effects/gore/blood_splat.ogg new file mode 100644 index 0000000000000..a1396ff0ec181 Binary files /dev/null and b/packs/infinity/sound/effects/gore/blood_splat.ogg differ diff --git a/packs/infinity/sound/effects/gore/bullethit1.ogg b/packs/infinity/sound/effects/gore/bullethit1.ogg new file mode 100644 index 0000000000000..9164f10c84505 Binary files /dev/null and b/packs/infinity/sound/effects/gore/bullethit1.ogg differ diff --git a/packs/infinity/sound/effects/gore/bullethit2.ogg b/packs/infinity/sound/effects/gore/bullethit2.ogg new file mode 100644 index 0000000000000..fa6ce46a6658c Binary files /dev/null and b/packs/infinity/sound/effects/gore/bullethit2.ogg differ diff --git a/packs/infinity/sound/effects/gore/bullethit3.ogg b/packs/infinity/sound/effects/gore/bullethit3.ogg new file mode 100644 index 0000000000000..738aa7fd99692 Binary files /dev/null and b/packs/infinity/sound/effects/gore/bullethit3.ogg differ diff --git a/packs/infinity/sound/effects/gore/bullethit4.ogg b/packs/infinity/sound/effects/gore/bullethit4.ogg new file mode 100644 index 0000000000000..01c9d4063fa6a Binary files /dev/null and b/packs/infinity/sound/effects/gore/bullethit4.ogg differ diff --git a/packs/infinity/sound/effects/gore/chop.ogg b/packs/infinity/sound/effects/gore/chop.ogg new file mode 100644 index 0000000000000..2ebdbfe6f15ea Binary files /dev/null and b/packs/infinity/sound/effects/gore/chop.ogg differ diff --git a/packs/infinity/sound/effects/gore/chop2.ogg b/packs/infinity/sound/effects/gore/chop2.ogg new file mode 100644 index 0000000000000..d7a9310b1df86 Binary files /dev/null and b/packs/infinity/sound/effects/gore/chop2.ogg differ diff --git a/packs/infinity/sound/effects/gore/chop3.ogg b/packs/infinity/sound/effects/gore/chop3.ogg new file mode 100644 index 0000000000000..655a8a194b1b4 Binary files /dev/null and b/packs/infinity/sound/effects/gore/chop3.ogg differ diff --git a/packs/infinity/sound/effects/gore/chop4.ogg b/packs/infinity/sound/effects/gore/chop4.ogg new file mode 100644 index 0000000000000..3fcdb7874b647 Binary files /dev/null and b/packs/infinity/sound/effects/gore/chop4.ogg differ diff --git a/packs/infinity/sound/effects/gore/chop5.ogg b/packs/infinity/sound/effects/gore/chop5.ogg new file mode 100644 index 0000000000000..ad4df2fe3bcdd Binary files /dev/null and b/packs/infinity/sound/effects/gore/chop5.ogg differ diff --git a/packs/infinity/sound/effects/gore/chop6.ogg b/packs/infinity/sound/effects/gore/chop6.ogg new file mode 100644 index 0000000000000..9b9a54dcdacd2 Binary files /dev/null and b/packs/infinity/sound/effects/gore/chop6.ogg differ diff --git a/packs/infinity/sound/effects/gore/fallsmash.ogg b/packs/infinity/sound/effects/gore/fallsmash.ogg new file mode 100644 index 0000000000000..1a5e95c0e05e3 Binary files /dev/null and b/packs/infinity/sound/effects/gore/fallsmash.ogg differ diff --git a/packs/infinity/sound/effects/gore/sear.ogg b/packs/infinity/sound/effects/gore/sear.ogg new file mode 100644 index 0000000000000..1635ec86942a2 Binary files /dev/null and b/packs/infinity/sound/effects/gore/sear.ogg differ diff --git a/packs/infinity/sound/effects/gore/severed.ogg b/packs/infinity/sound/effects/gore/severed.ogg new file mode 100644 index 0000000000000..b19dfcdf24fdd Binary files /dev/null and b/packs/infinity/sound/effects/gore/severed.ogg differ diff --git a/packs/infinity/sound/effects/gore/smash1.ogg b/packs/infinity/sound/effects/gore/smash1.ogg new file mode 100644 index 0000000000000..04eb4027c9954 Binary files /dev/null and b/packs/infinity/sound/effects/gore/smash1.ogg differ diff --git a/packs/infinity/sound/effects/gore/smash2.ogg b/packs/infinity/sound/effects/gore/smash2.ogg new file mode 100644 index 0000000000000..41002b49ad893 Binary files /dev/null and b/packs/infinity/sound/effects/gore/smash2.ogg differ diff --git a/packs/infinity/sound/effects/gore/smash3.ogg b/packs/infinity/sound/effects/gore/smash3.ogg new file mode 100644 index 0000000000000..adcf2256c8223 Binary files /dev/null and b/packs/infinity/sound/effects/gore/smash3.ogg differ diff --git a/packs/infinity/sound/effects/gore/stab1.ogg b/packs/infinity/sound/effects/gore/stab1.ogg new file mode 100644 index 0000000000000..9a8d90bf6e015 Binary files /dev/null and b/packs/infinity/sound/effects/gore/stab1.ogg differ diff --git a/packs/infinity/sound/effects/gore/stab2.ogg b/packs/infinity/sound/effects/gore/stab2.ogg new file mode 100644 index 0000000000000..f7f2e9558603c Binary files /dev/null and b/packs/infinity/sound/effects/gore/stab2.ogg differ diff --git a/packs/infinity/sound/effects/gore/stab3.ogg b/packs/infinity/sound/effects/gore/stab3.ogg new file mode 100644 index 0000000000000..08acf5a11877e Binary files /dev/null and b/packs/infinity/sound/effects/gore/stab3.ogg differ diff --git a/packs/infinity/sound/effects/gore/trauma1.ogg b/packs/infinity/sound/effects/gore/trauma1.ogg new file mode 100644 index 0000000000000..3c357d89db78d Binary files /dev/null and b/packs/infinity/sound/effects/gore/trauma1.ogg differ diff --git a/packs/infinity/sound/effects/gore/trauma2.ogg b/packs/infinity/sound/effects/gore/trauma2.ogg new file mode 100644 index 0000000000000..3ee187ff96c2c Binary files /dev/null and b/packs/infinity/sound/effects/gore/trauma2.ogg differ diff --git a/packs/infinity/sound/effects/gore/trauma3.ogg b/packs/infinity/sound/effects/gore/trauma3.ogg new file mode 100644 index 0000000000000..23d3e78e3c241 Binary files /dev/null and b/packs/infinity/sound/effects/gore/trauma3.ogg differ diff --git a/packs/infinity/sound/effects/greaterling.ogg b/packs/infinity/sound/effects/greaterling.ogg new file mode 100644 index 0000000000000..7654ab0996df5 Binary files /dev/null and b/packs/infinity/sound/effects/greaterling.ogg differ diff --git a/packs/infinity/sound/effects/hit_kick.ogg b/packs/infinity/sound/effects/hit_kick.ogg new file mode 100644 index 0000000000000..850642de69913 Binary files /dev/null and b/packs/infinity/sound/effects/hit_kick.ogg differ diff --git a/packs/infinity/sound/effects/hit_punch.ogg b/packs/infinity/sound/effects/hit_punch.ogg new file mode 100644 index 0000000000000..e4b38e9627a38 Binary files /dev/null and b/packs/infinity/sound/effects/hit_punch.ogg differ diff --git a/packs/infinity/sound/effects/hookah.ogg b/packs/infinity/sound/effects/hookah.ogg new file mode 100644 index 0000000000000..7f35a548e1784 Binary files /dev/null and b/packs/infinity/sound/effects/hookah.ogg differ diff --git a/packs/infinity/sound/effects/hookah1.ogg b/packs/infinity/sound/effects/hookah1.ogg new file mode 100644 index 0000000000000..bd11744650650 Binary files /dev/null and b/packs/infinity/sound/effects/hookah1.ogg differ diff --git a/packs/infinity/sound/effects/hookah_lit.ogg b/packs/infinity/sound/effects/hookah_lit.ogg new file mode 100644 index 0000000000000..d3db7828634b2 Binary files /dev/null and b/packs/infinity/sound/effects/hookah_lit.ogg differ diff --git a/packs/infinity/sound/effects/inhale.ogg b/packs/infinity/sound/effects/inhale.ogg new file mode 100644 index 0000000000000..a55f4d88d6e50 Binary files /dev/null and b/packs/infinity/sound/effects/inhale.ogg differ diff --git a/packs/infinity/sound/effects/lightningbolt.ogg b/packs/infinity/sound/effects/lightningbolt.ogg new file mode 100644 index 0000000000000..e5f6a5731adde Binary files /dev/null and b/packs/infinity/sound/effects/lightningbolt.ogg differ diff --git a/packs/infinity/sound/effects/lingabsorbs.ogg b/packs/infinity/sound/effects/lingabsorbs.ogg new file mode 100644 index 0000000000000..1c47e9c2a91a3 Binary files /dev/null and b/packs/infinity/sound/effects/lingabsorbs.ogg differ diff --git a/packs/infinity/sound/effects/lingextends.ogg b/packs/infinity/sound/effects/lingextends.ogg new file mode 100644 index 0000000000000..ec0b2a5ec097f Binary files /dev/null and b/packs/infinity/sound/effects/lingextends.ogg differ diff --git a/packs/infinity/sound/effects/lingstabs.ogg b/packs/infinity/sound/effects/lingstabs.ogg new file mode 100644 index 0000000000000..85bd7d7b01325 Binary files /dev/null and b/packs/infinity/sound/effects/lingstabs.ogg differ diff --git a/packs/infinity/sound/effects/metal_creaking.ogg b/packs/infinity/sound/effects/metal_creaking.ogg new file mode 100644 index 0000000000000..6d6dde2a7c40a Binary files /dev/null and b/packs/infinity/sound/effects/metal_creaking.ogg differ diff --git a/packs/infinity/sound/effects/noose_idle.ogg b/packs/infinity/sound/effects/noose_idle.ogg new file mode 100644 index 0000000000000..f3c76596c2f08 Binary files /dev/null and b/packs/infinity/sound/effects/noose_idle.ogg differ diff --git a/packs/infinity/sound/effects/noosed.ogg b/packs/infinity/sound/effects/noosed.ogg new file mode 100644 index 0000000000000..276d7f25a8fe5 Binary files /dev/null and b/packs/infinity/sound/effects/noosed.ogg differ diff --git a/packs/infinity/sound/effects/open.ogg b/packs/infinity/sound/effects/open.ogg new file mode 100644 index 0000000000000..50610cd5cb0fa Binary files /dev/null and b/packs/infinity/sound/effects/open.ogg differ diff --git a/packs/infinity/sound/effects/pray.ogg b/packs/infinity/sound/effects/pray.ogg new file mode 100644 index 0000000000000..beadd3916f196 Binary files /dev/null and b/packs/infinity/sound/effects/pray.ogg differ diff --git a/packs/infinity/sound/effects/psh.ogg b/packs/infinity/sound/effects/psh.ogg new file mode 100644 index 0000000000000..baae62e1716ed Binary files /dev/null and b/packs/infinity/sound/effects/psh.ogg differ diff --git a/packs/infinity/sound/effects/radio1.ogg b/packs/infinity/sound/effects/radio1.ogg new file mode 100644 index 0000000000000..29d08d4c7f97a Binary files /dev/null and b/packs/infinity/sound/effects/radio1.ogg differ diff --git a/packs/infinity/sound/effects/radio2.ogg b/packs/infinity/sound/effects/radio2.ogg new file mode 100644 index 0000000000000..5784abd514177 Binary files /dev/null and b/packs/infinity/sound/effects/radio2.ogg differ diff --git a/packs/infinity/sound/effects/radio3.ogg b/packs/infinity/sound/effects/radio3.ogg new file mode 100644 index 0000000000000..ad4eb36a0f8b6 Binary files /dev/null and b/packs/infinity/sound/effects/radio3.ogg differ diff --git a/packs/infinity/sound/effects/radio4.ogg b/packs/infinity/sound/effects/radio4.ogg new file mode 100644 index 0000000000000..0d533ffeef545 Binary files /dev/null and b/packs/infinity/sound/effects/radio4.ogg differ diff --git a/packs/infinity/sound/effects/rings.ogg b/packs/infinity/sound/effects/rings.ogg new file mode 100644 index 0000000000000..830054c2a882d Binary files /dev/null and b/packs/infinity/sound/effects/rings.ogg differ diff --git a/packs/infinity/sound/effects/salute.ogg b/packs/infinity/sound/effects/salute.ogg new file mode 100644 index 0000000000000..90faefb402993 Binary files /dev/null and b/packs/infinity/sound/effects/salute.ogg differ diff --git a/packs/infinity/sound/effects/stamp2.ogg b/packs/infinity/sound/effects/stamp2.ogg new file mode 100644 index 0000000000000..f243cc9683607 Binary files /dev/null and b/packs/infinity/sound/effects/stamp2.ogg differ diff --git a/packs/infinity/sound/effects/throw.ogg b/packs/infinity/sound/effects/throw.ogg new file mode 100644 index 0000000000000..581c4ca9e05b2 Binary files /dev/null and b/packs/infinity/sound/effects/throw.ogg differ diff --git a/packs/infinity/sound/effects/torpedo.ogg b/packs/infinity/sound/effects/torpedo.ogg new file mode 100644 index 0000000000000..7214ceef9ab97 Binary files /dev/null and b/packs/infinity/sound/effects/torpedo.ogg differ diff --git a/packs/infinity/sound/effects/using/switch/small1.ogg b/packs/infinity/sound/effects/using/switch/small1.ogg new file mode 100644 index 0000000000000..3c679ae0543d7 Binary files /dev/null and b/packs/infinity/sound/effects/using/switch/small1.ogg differ diff --git a/packs/infinity/sound/effects/using/switch/small2.ogg b/packs/infinity/sound/effects/using/switch/small2.ogg new file mode 100644 index 0000000000000..d37c6b20c8106 Binary files /dev/null and b/packs/infinity/sound/effects/using/switch/small2.ogg differ diff --git a/packs/infinity/sound/effects/x1.ogg b/packs/infinity/sound/effects/x1.ogg new file mode 100644 index 0000000000000..fe32c7f5a9880 Binary files /dev/null and b/packs/infinity/sound/effects/x1.ogg differ diff --git a/packs/infinity/sound/effects/x2.ogg b/packs/infinity/sound/effects/x2.ogg new file mode 100644 index 0000000000000..efa5ac0450ce1 Binary files /dev/null and b/packs/infinity/sound/effects/x2.ogg differ diff --git a/packs/infinity/sound/effects/x3.ogg b/packs/infinity/sound/effects/x3.ogg new file mode 100644 index 0000000000000..b5a12487f1cda Binary files /dev/null and b/packs/infinity/sound/effects/x3.ogg differ diff --git a/packs/infinity/sound/effects/x4.ogg b/packs/infinity/sound/effects/x4.ogg new file mode 100644 index 0000000000000..c94c96ec38086 Binary files /dev/null and b/packs/infinity/sound/effects/x4.ogg differ diff --git a/packs/infinity/sound/guitar/Ab3.ogg b/packs/infinity/sound/guitar/Ab3.ogg new file mode 100644 index 0000000000000..6e242786c4086 Binary files /dev/null and b/packs/infinity/sound/guitar/Ab3.ogg differ diff --git a/packs/infinity/sound/guitar/Ab4.ogg b/packs/infinity/sound/guitar/Ab4.ogg new file mode 100644 index 0000000000000..6f854ea5d3f0e Binary files /dev/null and b/packs/infinity/sound/guitar/Ab4.ogg differ diff --git a/packs/infinity/sound/guitar/Ab5.ogg b/packs/infinity/sound/guitar/Ab5.ogg new file mode 100644 index 0000000000000..53ba1c01520ba Binary files /dev/null and b/packs/infinity/sound/guitar/Ab5.ogg differ diff --git a/packs/infinity/sound/guitar/Ab6.ogg b/packs/infinity/sound/guitar/Ab6.ogg new file mode 100644 index 0000000000000..d0a238ba60793 Binary files /dev/null and b/packs/infinity/sound/guitar/Ab6.ogg differ diff --git a/packs/infinity/sound/guitar/An3.ogg b/packs/infinity/sound/guitar/An3.ogg new file mode 100644 index 0000000000000..1f06e6d4f284d Binary files /dev/null and b/packs/infinity/sound/guitar/An3.ogg differ diff --git a/packs/infinity/sound/guitar/An4.ogg b/packs/infinity/sound/guitar/An4.ogg new file mode 100644 index 0000000000000..f3354df46b985 Binary files /dev/null and b/packs/infinity/sound/guitar/An4.ogg differ diff --git a/packs/infinity/sound/guitar/An5.ogg b/packs/infinity/sound/guitar/An5.ogg new file mode 100644 index 0000000000000..fc3b1b345c91e Binary files /dev/null and b/packs/infinity/sound/guitar/An5.ogg differ diff --git a/packs/infinity/sound/guitar/An6.ogg b/packs/infinity/sound/guitar/An6.ogg new file mode 100644 index 0000000000000..f58a50d2a6591 Binary files /dev/null and b/packs/infinity/sound/guitar/An6.ogg differ diff --git a/packs/infinity/sound/guitar/Bb3.ogg b/packs/infinity/sound/guitar/Bb3.ogg new file mode 100644 index 0000000000000..e88343d88fbb5 Binary files /dev/null and b/packs/infinity/sound/guitar/Bb3.ogg differ diff --git a/packs/infinity/sound/guitar/Bb4.ogg b/packs/infinity/sound/guitar/Bb4.ogg new file mode 100644 index 0000000000000..11b883285da49 Binary files /dev/null and b/packs/infinity/sound/guitar/Bb4.ogg differ diff --git a/packs/infinity/sound/guitar/Bb5.ogg b/packs/infinity/sound/guitar/Bb5.ogg new file mode 100644 index 0000000000000..5d9b10f87a6bc Binary files /dev/null and b/packs/infinity/sound/guitar/Bb5.ogg differ diff --git a/packs/infinity/sound/guitar/Bb6.ogg b/packs/infinity/sound/guitar/Bb6.ogg new file mode 100644 index 0000000000000..c7f11ef59a63e Binary files /dev/null and b/packs/infinity/sound/guitar/Bb6.ogg differ diff --git a/packs/infinity/sound/guitar/Bn3.ogg b/packs/infinity/sound/guitar/Bn3.ogg new file mode 100644 index 0000000000000..0d6022369fafc Binary files /dev/null and b/packs/infinity/sound/guitar/Bn3.ogg differ diff --git a/packs/infinity/sound/guitar/Bn4.ogg b/packs/infinity/sound/guitar/Bn4.ogg new file mode 100644 index 0000000000000..7e8682d5ff0db Binary files /dev/null and b/packs/infinity/sound/guitar/Bn4.ogg differ diff --git a/packs/infinity/sound/guitar/Bn5.ogg b/packs/infinity/sound/guitar/Bn5.ogg new file mode 100644 index 0000000000000..1912da7f66c65 Binary files /dev/null and b/packs/infinity/sound/guitar/Bn5.ogg differ diff --git a/packs/infinity/sound/guitar/Bn6.ogg b/packs/infinity/sound/guitar/Bn6.ogg new file mode 100644 index 0000000000000..985ec744dfb9b Binary files /dev/null and b/packs/infinity/sound/guitar/Bn6.ogg differ diff --git a/packs/infinity/sound/guitar/Cn4.ogg b/packs/infinity/sound/guitar/Cn4.ogg new file mode 100644 index 0000000000000..0279b73f8bd72 Binary files /dev/null and b/packs/infinity/sound/guitar/Cn4.ogg differ diff --git a/packs/infinity/sound/guitar/Cn5.ogg b/packs/infinity/sound/guitar/Cn5.ogg new file mode 100644 index 0000000000000..ece600a6c1a05 Binary files /dev/null and b/packs/infinity/sound/guitar/Cn5.ogg differ diff --git a/packs/infinity/sound/guitar/Cn6.ogg b/packs/infinity/sound/guitar/Cn6.ogg new file mode 100644 index 0000000000000..8c2fecc62aa18 Binary files /dev/null and b/packs/infinity/sound/guitar/Cn6.ogg differ diff --git a/packs/infinity/sound/guitar/Db4.ogg b/packs/infinity/sound/guitar/Db4.ogg new file mode 100644 index 0000000000000..8a14f1f83655a Binary files /dev/null and b/packs/infinity/sound/guitar/Db4.ogg differ diff --git a/packs/infinity/sound/guitar/Db5.ogg b/packs/infinity/sound/guitar/Db5.ogg new file mode 100644 index 0000000000000..46a67f20ce0d0 Binary files /dev/null and b/packs/infinity/sound/guitar/Db5.ogg differ diff --git a/packs/infinity/sound/guitar/Db6.ogg b/packs/infinity/sound/guitar/Db6.ogg new file mode 100644 index 0000000000000..a07095c6033e1 Binary files /dev/null and b/packs/infinity/sound/guitar/Db6.ogg differ diff --git a/packs/infinity/sound/guitar/Dn4.ogg b/packs/infinity/sound/guitar/Dn4.ogg new file mode 100644 index 0000000000000..587099a0ddc1b Binary files /dev/null and b/packs/infinity/sound/guitar/Dn4.ogg differ diff --git a/packs/infinity/sound/guitar/Dn5.ogg b/packs/infinity/sound/guitar/Dn5.ogg new file mode 100644 index 0000000000000..d6a9c38415a8e Binary files /dev/null and b/packs/infinity/sound/guitar/Dn5.ogg differ diff --git a/packs/infinity/sound/guitar/Dn6.ogg b/packs/infinity/sound/guitar/Dn6.ogg new file mode 100644 index 0000000000000..4e44d5e72fed9 Binary files /dev/null and b/packs/infinity/sound/guitar/Dn6.ogg differ diff --git a/packs/infinity/sound/guitar/Eb4.ogg b/packs/infinity/sound/guitar/Eb4.ogg new file mode 100644 index 0000000000000..1f93c8273d1b8 Binary files /dev/null and b/packs/infinity/sound/guitar/Eb4.ogg differ diff --git a/packs/infinity/sound/guitar/Eb5.ogg b/packs/infinity/sound/guitar/Eb5.ogg new file mode 100644 index 0000000000000..5b795377f3831 Binary files /dev/null and b/packs/infinity/sound/guitar/Eb5.ogg differ diff --git a/packs/infinity/sound/guitar/Eb6.ogg b/packs/infinity/sound/guitar/Eb6.ogg new file mode 100644 index 0000000000000..5febf7a37b35e Binary files /dev/null and b/packs/infinity/sound/guitar/Eb6.ogg differ diff --git a/packs/infinity/sound/guitar/En3.ogg b/packs/infinity/sound/guitar/En3.ogg new file mode 100644 index 0000000000000..d9679bd78eada Binary files /dev/null and b/packs/infinity/sound/guitar/En3.ogg differ diff --git a/packs/infinity/sound/guitar/En4.ogg b/packs/infinity/sound/guitar/En4.ogg new file mode 100644 index 0000000000000..50dad80f50619 Binary files /dev/null and b/packs/infinity/sound/guitar/En4.ogg differ diff --git a/packs/infinity/sound/guitar/En5.ogg b/packs/infinity/sound/guitar/En5.ogg new file mode 100644 index 0000000000000..8617c06920193 Binary files /dev/null and b/packs/infinity/sound/guitar/En5.ogg differ diff --git a/packs/infinity/sound/guitar/En6.ogg b/packs/infinity/sound/guitar/En6.ogg new file mode 100644 index 0000000000000..a487ce33e4b06 Binary files /dev/null and b/packs/infinity/sound/guitar/En6.ogg differ diff --git a/packs/infinity/sound/guitar/Fn3.ogg b/packs/infinity/sound/guitar/Fn3.ogg new file mode 100644 index 0000000000000..4e37dc581269a Binary files /dev/null and b/packs/infinity/sound/guitar/Fn3.ogg differ diff --git a/packs/infinity/sound/guitar/Fn4.ogg b/packs/infinity/sound/guitar/Fn4.ogg new file mode 100644 index 0000000000000..3bf9957d48a46 Binary files /dev/null and b/packs/infinity/sound/guitar/Fn4.ogg differ diff --git a/packs/infinity/sound/guitar/Fn5.ogg b/packs/infinity/sound/guitar/Fn5.ogg new file mode 100644 index 0000000000000..ad0a0ecec793e Binary files /dev/null and b/packs/infinity/sound/guitar/Fn5.ogg differ diff --git a/packs/infinity/sound/guitar/Fn6.ogg b/packs/infinity/sound/guitar/Fn6.ogg new file mode 100644 index 0000000000000..50457e7bf4c21 Binary files /dev/null and b/packs/infinity/sound/guitar/Fn6.ogg differ diff --git a/packs/infinity/sound/guitar/Gb3.ogg b/packs/infinity/sound/guitar/Gb3.ogg new file mode 100644 index 0000000000000..1b2e6c503de6f Binary files /dev/null and b/packs/infinity/sound/guitar/Gb3.ogg differ diff --git a/packs/infinity/sound/guitar/Gb4.ogg b/packs/infinity/sound/guitar/Gb4.ogg new file mode 100644 index 0000000000000..122a0c5c17d0c Binary files /dev/null and b/packs/infinity/sound/guitar/Gb4.ogg differ diff --git a/packs/infinity/sound/guitar/Gb5.ogg b/packs/infinity/sound/guitar/Gb5.ogg new file mode 100644 index 0000000000000..b0346e2f3652d Binary files /dev/null and b/packs/infinity/sound/guitar/Gb5.ogg differ diff --git a/packs/infinity/sound/guitar/Gb6.ogg b/packs/infinity/sound/guitar/Gb6.ogg new file mode 100644 index 0000000000000..4f873de27cf36 Binary files /dev/null and b/packs/infinity/sound/guitar/Gb6.ogg differ diff --git a/packs/infinity/sound/guitar/Gn3.ogg b/packs/infinity/sound/guitar/Gn3.ogg new file mode 100644 index 0000000000000..783cded9fe5ff Binary files /dev/null and b/packs/infinity/sound/guitar/Gn3.ogg differ diff --git a/packs/infinity/sound/guitar/Gn4.ogg b/packs/infinity/sound/guitar/Gn4.ogg new file mode 100644 index 0000000000000..92f9cd2fd9da9 Binary files /dev/null and b/packs/infinity/sound/guitar/Gn4.ogg differ diff --git a/packs/infinity/sound/guitar/Gn5.ogg b/packs/infinity/sound/guitar/Gn5.ogg new file mode 100644 index 0000000000000..42fdebc209bfe Binary files /dev/null and b/packs/infinity/sound/guitar/Gn5.ogg differ diff --git a/packs/infinity/sound/guitar/Gn6.ogg b/packs/infinity/sound/guitar/Gn6.ogg new file mode 100644 index 0000000000000..a36bf38f001fb Binary files /dev/null and b/packs/infinity/sound/guitar/Gn6.ogg differ diff --git a/packs/infinity/sound/interactions/hug.ogg b/packs/infinity/sound/interactions/hug.ogg new file mode 100644 index 0000000000000..68c2948bdc03f Binary files /dev/null and b/packs/infinity/sound/interactions/hug.ogg differ diff --git a/packs/infinity/sound/interactions/slap.ogg b/packs/infinity/sound/interactions/slap.ogg new file mode 100644 index 0000000000000..d8804bc6e91a8 Binary files /dev/null and b/packs/infinity/sound/interactions/slap.ogg differ diff --git a/packs/infinity/sound/items/BOOK_Turn_Page_1.ogg b/packs/infinity/sound/items/BOOK_Turn_Page_1.ogg new file mode 100644 index 0000000000000..75213ae897177 Binary files /dev/null and b/packs/infinity/sound/items/BOOK_Turn_Page_1.ogg differ diff --git a/packs/infinity/sound/items/BOOK_Turn_Page_2.ogg b/packs/infinity/sound/items/BOOK_Turn_Page_2.ogg new file mode 100644 index 0000000000000..60a0372fa6024 Binary files /dev/null and b/packs/infinity/sound/items/BOOK_Turn_Page_2.ogg differ diff --git a/packs/infinity/sound/items/BOOK_Turn_Page_3.ogg b/packs/infinity/sound/items/BOOK_Turn_Page_3.ogg new file mode 100644 index 0000000000000..ecbf68775fea4 Binary files /dev/null and b/packs/infinity/sound/items/BOOK_Turn_Page_3.ogg differ diff --git a/packs/infinity/sound/items/BOOK_Turn_Page_4.ogg b/packs/infinity/sound/items/BOOK_Turn_Page_4.ogg new file mode 100644 index 0000000000000..8355bb79f4db8 Binary files /dev/null and b/packs/infinity/sound/items/BOOK_Turn_Page_4.ogg differ diff --git a/packs/infinity/sound/items/PSHOOM.ogg b/packs/infinity/sound/items/PSHOOM.ogg new file mode 100644 index 0000000000000..5628842f53491 Binary files /dev/null and b/packs/infinity/sound/items/PSHOOM.ogg differ diff --git a/packs/infinity/sound/items/WelderActivate.ogg b/packs/infinity/sound/items/WelderActivate.ogg new file mode 100644 index 0000000000000..5218f2ab1cfbb Binary files /dev/null and b/packs/infinity/sound/items/WelderActivate.ogg differ diff --git a/packs/infinity/sound/items/WelderDeactivate.ogg b/packs/infinity/sound/items/WelderDeactivate.ogg new file mode 100644 index 0000000000000..22ac4f445cb85 Binary files /dev/null and b/packs/infinity/sound/items/WelderDeactivate.ogg differ diff --git a/packs/infinity/sound/items/change_drill.ogg b/packs/infinity/sound/items/change_drill.ogg new file mode 100644 index 0000000000000..406027a5955a1 Binary files /dev/null and b/packs/infinity/sound/items/change_drill.ogg differ diff --git a/packs/infinity/sound/items/change_jaws.ogg b/packs/infinity/sound/items/change_jaws.ogg new file mode 100644 index 0000000000000..b6a41eca80636 Binary files /dev/null and b/packs/infinity/sound/items/change_jaws.ogg differ diff --git a/packs/infinity/sound/items/coinflip.ogg b/packs/infinity/sound/items/coinflip.ogg new file mode 100644 index 0000000000000..299d38d528d16 Binary files /dev/null and b/packs/infinity/sound/items/coinflip.ogg differ diff --git a/packs/infinity/sound/items/creo_1.ogg b/packs/infinity/sound/items/creo_1.ogg new file mode 100644 index 0000000000000..35216a6edc50a Binary files /dev/null and b/packs/infinity/sound/items/creo_1.ogg differ diff --git a/packs/infinity/sound/items/creo_2.ogg b/packs/infinity/sound/items/creo_2.ogg new file mode 100644 index 0000000000000..0b54ae73fe9ef Binary files /dev/null and b/packs/infinity/sound/items/creo_2.ogg differ diff --git a/packs/infinity/sound/items/creo_3.ogg b/packs/infinity/sound/items/creo_3.ogg new file mode 100644 index 0000000000000..bc094865492a1 Binary files /dev/null and b/packs/infinity/sound/items/creo_3.ogg differ diff --git a/packs/infinity/sound/items/drill_hit.ogg b/packs/infinity/sound/items/drill_hit.ogg new file mode 100644 index 0000000000000..0f8fa631aa1a0 Binary files /dev/null and b/packs/infinity/sound/items/drill_hit.ogg differ diff --git a/packs/infinity/sound/items/drill_use.ogg b/packs/infinity/sound/items/drill_use.ogg new file mode 100644 index 0000000000000..82f37cd35bb2c Binary files /dev/null and b/packs/infinity/sound/items/drill_use.ogg differ diff --git a/packs/infinity/sound/items/drinking.ogg b/packs/infinity/sound/items/drinking.ogg new file mode 100644 index 0000000000000..20924324ee0a0 Binary files /dev/null and b/packs/infinity/sound/items/drinking.ogg differ diff --git a/packs/infinity/sound/items/drinking_after.ogg b/packs/infinity/sound/items/drinking_after.ogg new file mode 100644 index 0000000000000..0216ca4d18ae9 Binary files /dev/null and b/packs/infinity/sound/items/drinking_after.ogg differ diff --git a/packs/infinity/sound/items/internals_on.ogg b/packs/infinity/sound/items/internals_on.ogg new file mode 100644 index 0000000000000..1ceab66270a5a Binary files /dev/null and b/packs/infinity/sound/items/internals_on.ogg differ diff --git a/packs/infinity/sound/items/jaws_cut.ogg b/packs/infinity/sound/items/jaws_cut.ogg new file mode 100644 index 0000000000000..a0bfd8550299e Binary files /dev/null and b/packs/infinity/sound/items/jaws_cut.ogg differ diff --git a/packs/infinity/sound/items/multitool_pulse.ogg b/packs/infinity/sound/items/multitool_pulse.ogg new file mode 100644 index 0000000000000..a0419182e0e16 Binary files /dev/null and b/packs/infinity/sound/items/multitool_pulse.ogg differ diff --git a/packs/infinity/sound/items/rped.ogg b/packs/infinity/sound/items/rped.ogg new file mode 100644 index 0000000000000..93dca60d34112 Binary files /dev/null and b/packs/infinity/sound/items/rped.ogg differ diff --git a/packs/infinity/sound/items/sbortj.ogg b/packs/infinity/sound/items/sbortj.ogg new file mode 100644 index 0000000000000..95fca68379da3 Binary files /dev/null and b/packs/infinity/sound/items/sbortj.ogg differ diff --git a/packs/infinity/sound/items/tajalarm.ogg b/packs/infinity/sound/items/tajalarm.ogg new file mode 100644 index 0000000000000..e9c669954dd19 Binary files /dev/null and b/packs/infinity/sound/items/tajalarm.ogg differ diff --git a/packs/infinity/sound/items/unholster.ogg b/packs/infinity/sound/items/unholster.ogg new file mode 100644 index 0000000000000..327aea6482aba Binary files /dev/null and b/packs/infinity/sound/items/unholster.ogg differ diff --git a/packs/infinity/sound/machines/Conveyor_switch.ogg b/packs/infinity/sound/machines/Conveyor_switch.ogg new file mode 100644 index 0000000000000..bd4d3260eb230 Binary files /dev/null and b/packs/infinity/sound/machines/Conveyor_switch.ogg differ diff --git a/packs/infinity/sound/machines/Custom_screwdriverclose.ogg b/packs/infinity/sound/machines/Custom_screwdriverclose.ogg new file mode 100644 index 0000000000000..02972a7961d98 Binary files /dev/null and b/packs/infinity/sound/machines/Custom_screwdriverclose.ogg differ diff --git a/packs/infinity/sound/machines/Custom_screwdriveropen.ogg b/packs/infinity/sound/machines/Custom_screwdriveropen.ogg new file mode 100644 index 0000000000000..4ec276623d67b Binary files /dev/null and b/packs/infinity/sound/machines/Custom_screwdriveropen.ogg differ diff --git a/packs/infinity/sound/machines/PAPER_Fold_01_mono.ogg b/packs/infinity/sound/machines/PAPER_Fold_01_mono.ogg new file mode 100644 index 0000000000000..326462496b936 Binary files /dev/null and b/packs/infinity/sound/machines/PAPER_Fold_01_mono.ogg differ diff --git a/packs/infinity/sound/machines/Table_Fall.ogg b/packs/infinity/sound/machines/Table_Fall.ogg new file mode 100644 index 0000000000000..c683ba935898d Binary files /dev/null and b/packs/infinity/sound/machines/Table_Fall.ogg differ diff --git a/packs/infinity/sound/machines/airlock_ext_close.ogg b/packs/infinity/sound/machines/airlock_ext_close.ogg new file mode 100644 index 0000000000000..7257136297b26 Binary files /dev/null and b/packs/infinity/sound/machines/airlock_ext_close.ogg differ diff --git a/packs/infinity/sound/machines/airlock_ext_open.ogg b/packs/infinity/sound/machines/airlock_ext_open.ogg new file mode 100644 index 0000000000000..e9613aaf843cd Binary files /dev/null and b/packs/infinity/sound/machines/airlock_ext_open.ogg differ diff --git a/packs/infinity/sound/machines/alarm_a.ogg b/packs/infinity/sound/machines/alarm_a.ogg new file mode 100644 index 0000000000000..5d21b2f731fa9 Binary files /dev/null and b/packs/infinity/sound/machines/alarm_a.ogg differ diff --git a/packs/infinity/sound/machines/console/console.ogg b/packs/infinity/sound/machines/console/console.ogg new file mode 100644 index 0000000000000..2a8572ac35b01 Binary files /dev/null and b/packs/infinity/sound/machines/console/console.ogg differ diff --git a/packs/infinity/sound/machines/console/console2.ogg b/packs/infinity/sound/machines/console/console2.ogg new file mode 100644 index 0000000000000..2a49a7504121b Binary files /dev/null and b/packs/infinity/sound/machines/console/console2.ogg differ diff --git a/packs/infinity/sound/machines/console/console3.ogg b/packs/infinity/sound/machines/console/console3.ogg new file mode 100644 index 0000000000000..739db9ed2985a Binary files /dev/null and b/packs/infinity/sound/machines/console/console3.ogg differ diff --git a/packs/infinity/sound/machines/console/console_error.ogg b/packs/infinity/sound/machines/console/console_error.ogg new file mode 100644 index 0000000000000..e7d1a56a93b5a Binary files /dev/null and b/packs/infinity/sound/machines/console/console_error.ogg differ diff --git a/packs/infinity/sound/machines/console/console_interact1.ogg b/packs/infinity/sound/machines/console/console_interact1.ogg new file mode 100644 index 0000000000000..aca5bd82a59a6 Binary files /dev/null and b/packs/infinity/sound/machines/console/console_interact1.ogg differ diff --git a/packs/infinity/sound/machines/console/console_interact2.ogg b/packs/infinity/sound/machines/console/console_interact2.ogg new file mode 100644 index 0000000000000..06d07030eb530 Binary files /dev/null and b/packs/infinity/sound/machines/console/console_interact2.ogg differ diff --git a/packs/infinity/sound/machines/console/console_interact3.ogg b/packs/infinity/sound/machines/console/console_interact3.ogg new file mode 100644 index 0000000000000..1cd6e9ec23eee Binary files /dev/null and b/packs/infinity/sound/machines/console/console_interact3.ogg differ diff --git a/packs/infinity/sound/machines/console/console_interact4.ogg b/packs/infinity/sound/machines/console/console_interact4.ogg new file mode 100644 index 0000000000000..32d901c4094d5 Binary files /dev/null and b/packs/infinity/sound/machines/console/console_interact4.ogg differ diff --git a/packs/infinity/sound/machines/console/console_interact5.ogg b/packs/infinity/sound/machines/console/console_interact5.ogg new file mode 100644 index 0000000000000..93545d3de24e5 Binary files /dev/null and b/packs/infinity/sound/machines/console/console_interact5.ogg differ diff --git a/packs/infinity/sound/machines/console/console_interact6.ogg b/packs/infinity/sound/machines/console/console_interact6.ogg new file mode 100644 index 0000000000000..863f9fdade0bf Binary files /dev/null and b/packs/infinity/sound/machines/console/console_interact6.ogg differ diff --git a/packs/infinity/sound/machines/console/console_interact7.ogg b/packs/infinity/sound/machines/console/console_interact7.ogg new file mode 100644 index 0000000000000..cc215d33d6f20 Binary files /dev/null and b/packs/infinity/sound/machines/console/console_interact7.ogg differ diff --git a/packs/infinity/sound/machines/console/console_success.ogg b/packs/infinity/sound/machines/console/console_success.ogg new file mode 100644 index 0000000000000..85a2e45ea3906 Binary files /dev/null and b/packs/infinity/sound/machines/console/console_success.ogg differ diff --git a/packs/infinity/sound/machines/mbeep.ogg b/packs/infinity/sound/machines/mbeep.ogg new file mode 100644 index 0000000000000..54e1571533a5f Binary files /dev/null and b/packs/infinity/sound/machines/mbeep.ogg differ diff --git a/packs/infinity/sound/machines/shower_end.ogg b/packs/infinity/sound/machines/shower_end.ogg new file mode 100644 index 0000000000000..80b93af39eb25 Binary files /dev/null and b/packs/infinity/sound/machines/shower_end.ogg differ diff --git a/packs/infinity/sound/machines/shower_mid3.ogg b/packs/infinity/sound/machines/shower_mid3.ogg new file mode 100644 index 0000000000000..8b4776a9b97f5 Binary files /dev/null and b/packs/infinity/sound/machines/shower_mid3.ogg differ diff --git a/packs/infinity/sound/machines/shower_start.ogg b/packs/infinity/sound/machines/shower_start.ogg new file mode 100644 index 0000000000000..e5529f401bb54 Binary files /dev/null and b/packs/infinity/sound/machines/shower_start.ogg differ diff --git a/packs/infinity/sound/machines/vending_drop.ogg b/packs/infinity/sound/machines/vending_drop.ogg new file mode 100644 index 0000000000000..8f7c187d0c37c Binary files /dev/null and b/packs/infinity/sound/machines/vending_drop.ogg differ diff --git a/packs/infinity/sound/magic/demon_consume.ogg b/packs/infinity/sound/magic/demon_consume.ogg new file mode 100644 index 0000000000000..ef9276e74c0d8 Binary files /dev/null and b/packs/infinity/sound/magic/demon_consume.ogg differ diff --git a/packs/infinity/sound/mecha/Mech_Rotation.ogg b/packs/infinity/sound/mecha/Mech_Rotation.ogg new file mode 100644 index 0000000000000..58ac0d312eed6 Binary files /dev/null and b/packs/infinity/sound/mecha/Mech_Rotation.ogg differ diff --git a/packs/infinity/sound/mecha/Mech_Step.ogg b/packs/infinity/sound/mecha/Mech_Step.ogg new file mode 100644 index 0000000000000..6aaec0cecc09a Binary files /dev/null and b/packs/infinity/sound/mecha/Mech_Step.ogg differ diff --git a/packs/infinity/sound/mecha/ROBOTIC_Servo_Large_Dual_Servos_Open_mono.ogg b/packs/infinity/sound/mecha/ROBOTIC_Servo_Large_Dual_Servos_Open_mono.ogg new file mode 100644 index 0000000000000..cbb6dcf772fe2 Binary files /dev/null and b/packs/infinity/sound/mecha/ROBOTIC_Servo_Large_Dual_Servos_Open_mono.ogg differ diff --git a/packs/infinity/sound/mecha/UI_SCI-FI_Compute_01_Wet_stereo.ogg b/packs/infinity/sound/mecha/UI_SCI-FI_Compute_01_Wet_stereo.ogg new file mode 100644 index 0000000000000..02e87d15aeae6 Binary files /dev/null and b/packs/infinity/sound/mecha/UI_SCI-FI_Compute_01_Wet_stereo.ogg differ diff --git a/packs/infinity/sound/mecha/UI_SCI-FI_Tone_10_stereo.ogg b/packs/infinity/sound/mecha/UI_SCI-FI_Tone_10_stereo.ogg new file mode 100644 index 0000000000000..d293b9ab46839 Binary files /dev/null and b/packs/infinity/sound/mecha/UI_SCI-FI_Tone_10_stereo.ogg differ diff --git a/packs/infinity/sound/mecha/UI_SCI-FI_Tone_Deep_Wet_15_stereo_error.ogg b/packs/infinity/sound/mecha/UI_SCI-FI_Tone_Deep_Wet_15_stereo_error.ogg new file mode 100644 index 0000000000000..9f4070a2a4900 Binary files /dev/null and b/packs/infinity/sound/mecha/UI_SCI-FI_Tone_Deep_Wet_15_stereo_error.ogg differ diff --git a/packs/infinity/sound/mecha/UI_SCI-FI_Tone_Deep_Wet_22_stereo_complite.ogg b/packs/infinity/sound/mecha/UI_SCI-FI_Tone_Deep_Wet_22_stereo_complite.ogg new file mode 100644 index 0000000000000..822953ddf63fb Binary files /dev/null and b/packs/infinity/sound/mecha/UI_SCI-FI_Tone_Deep_Wet_22_stereo_complite.ogg differ diff --git a/packs/infinity/sound/mecha/bigmech_lstep.ogg b/packs/infinity/sound/mecha/bigmech_lstep.ogg new file mode 100644 index 0000000000000..4196de646db6f Binary files /dev/null and b/packs/infinity/sound/mecha/bigmech_lstep.ogg differ diff --git a/packs/infinity/sound/mecha/bigmech_lturn.ogg b/packs/infinity/sound/mecha/bigmech_lturn.ogg new file mode 100644 index 0000000000000..8ee3879e42c70 Binary files /dev/null and b/packs/infinity/sound/mecha/bigmech_lturn.ogg differ diff --git a/packs/infinity/sound/mecha/bigmech_rstep.ogg b/packs/infinity/sound/mecha/bigmech_rstep.ogg new file mode 100644 index 0000000000000..0f2d0a965ffc2 Binary files /dev/null and b/packs/infinity/sound/mecha/bigmech_rstep.ogg differ diff --git a/packs/infinity/sound/mecha/bigmech_rturn.ogg b/packs/infinity/sound/mecha/bigmech_rturn.ogg new file mode 100644 index 0000000000000..3b4172cf54a91 Binary files /dev/null and b/packs/infinity/sound/mecha/bigmech_rturn.ogg differ diff --git a/packs/infinity/sound/misc/statue/firstpersonsnap.ogg b/packs/infinity/sound/misc/statue/firstpersonsnap.ogg new file mode 100644 index 0000000000000..fbfdfea44835a Binary files /dev/null and b/packs/infinity/sound/misc/statue/firstpersonsnap.ogg differ diff --git a/packs/infinity/sound/misc/statue/firstpersonsnap2.ogg b/packs/infinity/sound/misc/statue/firstpersonsnap2.ogg new file mode 100644 index 0000000000000..c84cc80fc003a Binary files /dev/null and b/packs/infinity/sound/misc/statue/firstpersonsnap2.ogg differ diff --git a/packs/infinity/sound/misc/statue/firstpersonsnap3.ogg b/packs/infinity/sound/misc/statue/firstpersonsnap3.ogg new file mode 100644 index 0000000000000..9f991aaf58529 Binary files /dev/null and b/packs/infinity/sound/misc/statue/firstpersonsnap3.ogg differ diff --git a/packs/infinity/sound/misc/statue/scare1.ogg b/packs/infinity/sound/misc/statue/scare1.ogg new file mode 100644 index 0000000000000..e73141a19ee31 Binary files /dev/null and b/packs/infinity/sound/misc/statue/scare1.ogg differ diff --git a/packs/infinity/sound/misc/statue/scare2.ogg b/packs/infinity/sound/misc/statue/scare2.ogg new file mode 100644 index 0000000000000..daa58c8e9220d Binary files /dev/null and b/packs/infinity/sound/misc/statue/scare2.ogg differ diff --git a/packs/infinity/sound/misc/statue/scare3.ogg b/packs/infinity/sound/misc/statue/scare3.ogg new file mode 100644 index 0000000000000..3d92c2fb688a5 Binary files /dev/null and b/packs/infinity/sound/misc/statue/scare3.ogg differ diff --git a/packs/infinity/sound/misc/statue/scare4.ogg b/packs/infinity/sound/misc/statue/scare4.ogg new file mode 100644 index 0000000000000..79e36e1857b8d Binary files /dev/null and b/packs/infinity/sound/misc/statue/scare4.ogg differ diff --git a/packs/infinity/sound/music/100rengen.ogg b/packs/infinity/sound/music/100rengen.ogg new file mode 100644 index 0000000000000..25de4362d5383 Binary files /dev/null and b/packs/infinity/sound/music/100rengen.ogg differ diff --git a/packs/infinity/sound/music/CaravanPalace_LoneDigger.ogg b/packs/infinity/sound/music/CaravanPalace_LoneDigger.ogg new file mode 100644 index 0000000000000..d7efab87cda10 Binary files /dev/null and b/packs/infinity/sound/music/CaravanPalace_LoneDigger.ogg differ diff --git a/packs/infinity/sound/music/HotlineMiami_Miami.ogg b/packs/infinity/sound/music/HotlineMiami_Miami.ogg new file mode 100644 index 0000000000000..83eefd1006406 Binary files /dev/null and b/packs/infinity/sound/music/HotlineMiami_Miami.ogg differ diff --git a/packs/infinity/sound/music/JohnnyCash_Hurt.ogg b/packs/infinity/sound/music/JohnnyCash_Hurt.ogg new file mode 100644 index 0000000000000..f98ce6bc7fe33 Binary files /dev/null and b/packs/infinity/sound/music/JohnnyCash_Hurt.ogg differ diff --git a/packs/infinity/sound/music/JohnnyMathis_Wonderful_Wonderful.ogg b/packs/infinity/sound/music/JohnnyMathis_Wonderful_Wonderful.ogg new file mode 100644 index 0000000000000..99b21c119bd73 Binary files /dev/null and b/packs/infinity/sound/music/JohnnyMathis_Wonderful_Wonderful.ogg differ diff --git a/packs/infinity/sound/music/Kavinsky_Nightcall.ogg b/packs/infinity/sound/music/Kavinsky_Nightcall.ogg new file mode 100644 index 0000000000000..170697c97f6a5 Binary files /dev/null and b/packs/infinity/sound/music/Kavinsky_Nightcall.ogg differ diff --git a/packs/infinity/sound/music/Nickelback_WhenWeStandTogether.ogg b/packs/infinity/sound/music/Nickelback_WhenWeStandTogether.ogg new file mode 100644 index 0000000000000..3a2e40277ceea Binary files /dev/null and b/packs/infinity/sound/music/Nickelback_WhenWeStandTogether.ogg differ diff --git a/packs/infinity/sound/music/Radiohead_Creep.ogg b/packs/infinity/sound/music/Radiohead_Creep.ogg new file mode 100644 index 0000000000000..e8101e9dfe8a7 Binary files /dev/null and b/packs/infinity/sound/music/Radiohead_Creep.ogg differ diff --git a/packs/infinity/sound/music/TheToxicAvenger_MakeThisRight.ogg b/packs/infinity/sound/music/TheToxicAvenger_MakeThisRight.ogg new file mode 100644 index 0000000000000..93afa516f6545 Binary files /dev/null and b/packs/infinity/sound/music/TheToxicAvenger_MakeThisRight.ogg differ diff --git a/packs/infinity/sound/music/blues_in_velvet_room.ogg b/packs/infinity/sound/music/blues_in_velvet_room.ogg new file mode 100644 index 0000000000000..4fa787ff65eb5 Binary files /dev/null and b/packs/infinity/sound/music/blues_in_velvet_room.ogg differ diff --git a/packs/infinity/sound/music/fluvial-beat-deposits.ogg b/packs/infinity/sound/music/fluvial-beat-deposits.ogg new file mode 100644 index 0000000000000..e4627813b67e9 Binary files /dev/null and b/packs/infinity/sound/music/fluvial-beat-deposits.ogg differ diff --git a/packs/infinity/sound/music/gneiss/Codebrain.mp3 b/packs/infinity/sound/music/gneiss/Codebrain.mp3 new file mode 100644 index 0000000000000..acf1e2c4c26de Binary files /dev/null and b/packs/infinity/sound/music/gneiss/Codebrain.mp3 differ diff --git a/packs/infinity/sound/music/gneiss/Get Set.mp3 b/packs/infinity/sound/music/gneiss/Get Set.mp3 new file mode 100644 index 0000000000000..2bd429338ca60 Binary files /dev/null and b/packs/infinity/sound/music/gneiss/Get Set.mp3 differ diff --git a/packs/infinity/sound/music/gneiss/Gneiss.mp3 b/packs/infinity/sound/music/gneiss/Gneiss.mp3 new file mode 100644 index 0000000000000..c6cc7b25772d9 Binary files /dev/null and b/packs/infinity/sound/music/gneiss/Gneiss.mp3 differ diff --git a/packs/infinity/sound/music/gneiss/Intruder.mp3 b/packs/infinity/sound/music/gneiss/Intruder.mp3 new file mode 100644 index 0000000000000..e17815b9ad779 Binary files /dev/null and b/packs/infinity/sound/music/gneiss/Intruder.mp3 differ diff --git a/packs/infinity/sound/music/gneiss/Night at the Citadel.mp3 b/packs/infinity/sound/music/gneiss/Night at the Citadel.mp3 new file mode 100644 index 0000000000000..bdc3e407a2b42 Binary files /dev/null and b/packs/infinity/sound/music/gneiss/Night at the Citadel.mp3 differ diff --git a/packs/infinity/sound/music/gneiss/O.W.L.mp3 b/packs/infinity/sound/music/gneiss/O.W.L.mp3 new file mode 100644 index 0000000000000..2f6b001f75a65 Binary files /dev/null and b/packs/infinity/sound/music/gneiss/O.W.L.mp3 differ diff --git a/packs/infinity/sound/music/gneiss/Oxygen Facility.mp3 b/packs/infinity/sound/music/gneiss/Oxygen Facility.mp3 new file mode 100644 index 0000000000000..9fe5c450f2bee Binary files /dev/null and b/packs/infinity/sound/music/gneiss/Oxygen Facility.mp3 differ diff --git a/packs/infinity/sound/music/gneiss/Quantum.mp3 b/packs/infinity/sound/music/gneiss/Quantum.mp3 new file mode 100644 index 0000000000000..b16bf3001c285 Binary files /dev/null and b/packs/infinity/sound/music/gneiss/Quantum.mp3 differ diff --git a/packs/infinity/sound/music/jamatar_lepus_rising.ogg b/packs/infinity/sound/music/jamatar_lepus_rising.ogg new file mode 100644 index 0000000000000..f719269c09bad Binary files /dev/null and b/packs/infinity/sound/music/jamatar_lepus_rising.ogg differ diff --git a/packs/infinity/sound/music/newyear/deanmartin_letitsnow.ogg b/packs/infinity/sound/music/newyear/deanmartin_letitsnow.ogg new file mode 100644 index 0000000000000..4ce81b2e7694b Binary files /dev/null and b/packs/infinity/sound/music/newyear/deanmartin_letitsnow.ogg differ diff --git a/packs/infinity/sound/music/newyear/franksinatra_bluemoon.ogg b/packs/infinity/sound/music/newyear/franksinatra_bluemoon.ogg new file mode 100644 index 0000000000000..6e689077e46c4 Binary files /dev/null and b/packs/infinity/sound/music/newyear/franksinatra_bluemoon.ogg differ diff --git a/packs/infinity/sound/music/newyear/gotye_somebodythatiusedtoknow.ogg b/packs/infinity/sound/music/newyear/gotye_somebodythatiusedtoknow.ogg new file mode 100644 index 0000000000000..20f2db3402aae Binary files /dev/null and b/packs/infinity/sound/music/newyear/gotye_somebodythatiusedtoknow.ogg differ diff --git a/packs/infinity/sound/music/newyear/martyrobbins_bigiron.ogg b/packs/infinity/sound/music/newyear/martyrobbins_bigiron.ogg new file mode 100644 index 0000000000000..053f433301a2f Binary files /dev/null and b/packs/infinity/sound/music/newyear/martyrobbins_bigiron.ogg differ diff --git a/packs/infinity/sound/music/newyear/moon_hydrogen.ogg b/packs/infinity/sound/music/newyear/moon_hydrogen.ogg new file mode 100644 index 0000000000000..02d6e5d56a84b Binary files /dev/null and b/packs/infinity/sound/music/newyear/moon_hydrogen.ogg differ diff --git a/packs/infinity/sound/music/newyear/rojdestov_kozachiapesnia.ogg b/packs/infinity/sound/music/newyear/rojdestov_kozachiapesnia.ogg new file mode 100644 index 0000000000000..0d8c29895db1c Binary files /dev/null and b/packs/infinity/sound/music/newyear/rojdestov_kozachiapesnia.ogg differ diff --git a/packs/infinity/sound/music/newyear/tennesseeernieford_sixplusonetonns.ogg b/packs/infinity/sound/music/newyear/tennesseeernieford_sixplusonetonns.ogg new file mode 100644 index 0000000000000..fbd4329e497d0 Binary files /dev/null and b/packs/infinity/sound/music/newyear/tennesseeernieford_sixplusonetonns.ogg differ diff --git a/packs/infinity/sound/music/newyear/thefivestars_atombombbaby.ogg b/packs/infinity/sound/music/newyear/thefivestars_atombombbaby.ogg new file mode 100644 index 0000000000000..b84561eb7c153 Binary files /dev/null and b/packs/infinity/sound/music/newyear/thefivestars_atombombbaby.ogg differ diff --git a/packs/infinity/sound/music/newyear/vechno_molodoy.ogg b/packs/infinity/sound/music/newyear/vechno_molodoy.ogg new file mode 100644 index 0000000000000..bf8a7a0bb8819 Binary files /dev/null and b/packs/infinity/sound/music/newyear/vechno_molodoy.ogg differ diff --git a/packs/infinity/sound/music/newyear/zemlyane.ogg b/packs/infinity/sound/music/newyear/zemlyane.ogg new file mode 100644 index 0000000000000..9eec01556f99e Binary files /dev/null and b/packs/infinity/sound/music/newyear/zemlyane.ogg differ diff --git a/packs/infinity/sound/music/roundEnd.ogg b/packs/infinity/sound/music/roundEnd.ogg new file mode 100644 index 0000000000000..9239723f8138f Binary files /dev/null and b/packs/infinity/sound/music/roundEnd.ogg differ diff --git a/packs/infinity/sound/music/royksopp_i_dust_dont_understand_you.ogg b/packs/infinity/sound/music/royksopp_i_dust_dont_understand_you.ogg new file mode 100644 index 0000000000000..96c1ceae72a2a Binary files /dev/null and b/packs/infinity/sound/music/royksopp_i_dust_dont_understand_you.ogg differ diff --git a/packs/infinity/sound/music/title1.ogg b/packs/infinity/sound/music/title1.ogg new file mode 100644 index 0000000000000..11b5c5eb3429a Binary files /dev/null and b/packs/infinity/sound/music/title1.ogg differ diff --git a/packs/infinity/sound/music/title2.ogg b/packs/infinity/sound/music/title2.ogg new file mode 100644 index 0000000000000..1ec8f5599e3e9 Binary files /dev/null and b/packs/infinity/sound/music/title2.ogg differ diff --git a/packs/infinity/sound/music/title3.ogg b/packs/infinity/sound/music/title3.ogg new file mode 100644 index 0000000000000..425bf2e1901f7 Binary files /dev/null and b/packs/infinity/sound/music/title3.ogg differ diff --git a/packs/infinity/sound/music/title4.ogg b/packs/infinity/sound/music/title4.ogg new file mode 100644 index 0000000000000..c102ed6c45f9f Binary files /dev/null and b/packs/infinity/sound/music/title4.ogg differ diff --git a/packs/infinity/sound/music/ukatz/fight_with_oneself.mp3 b/packs/infinity/sound/music/ukatz/fight_with_oneself.mp3 new file mode 100644 index 0000000000000..187d2b6d43e38 Binary files /dev/null and b/packs/infinity/sound/music/ukatz/fight_with_oneself.mp3 differ diff --git a/packs/infinity/sound/music/ukatz/silence_of_space.mp3 b/packs/infinity/sound/music/ukatz/silence_of_space.mp3 new file mode 100644 index 0000000000000..20450bf59de61 Binary files /dev/null and b/packs/infinity/sound/music/ukatz/silence_of_space.mp3 differ diff --git a/packs/infinity/sound/voice/agony_female_1.ogg b/packs/infinity/sound/voice/agony_female_1.ogg new file mode 100644 index 0000000000000..83dc81ea17634 Binary files /dev/null and b/packs/infinity/sound/voice/agony_female_1.ogg differ diff --git a/packs/infinity/sound/voice/agony_female_2.ogg b/packs/infinity/sound/voice/agony_female_2.ogg new file mode 100644 index 0000000000000..cf4bea4414d9e Binary files /dev/null and b/packs/infinity/sound/voice/agony_female_2.ogg differ diff --git a/packs/infinity/sound/voice/agony_female_3.ogg b/packs/infinity/sound/voice/agony_female_3.ogg new file mode 100644 index 0000000000000..1f14b5097e6ce Binary files /dev/null and b/packs/infinity/sound/voice/agony_female_3.ogg differ diff --git a/packs/infinity/sound/voice/alien_pain.ogg b/packs/infinity/sound/voice/alien_pain.ogg new file mode 100644 index 0000000000000..983a208014413 Binary files /dev/null and b/packs/infinity/sound/voice/alien_pain.ogg differ diff --git a/packs/infinity/sound/voice/bug_screech.ogg b/packs/infinity/sound/voice/bug_screech.ogg new file mode 100644 index 0000000000000..c79f26bb186a1 Binary files /dev/null and b/packs/infinity/sound/voice/bug_screech.ogg differ diff --git a/packs/infinity/sound/voice/cat_purr.ogg b/packs/infinity/sound/voice/cat_purr.ogg new file mode 100644 index 0000000000000..1125cb2bbd711 Binary files /dev/null and b/packs/infinity/sound/voice/cat_purr.ogg differ diff --git a/packs/infinity/sound/voice/cat_purr_long.ogg b/packs/infinity/sound/voice/cat_purr_long.ogg new file mode 100644 index 0000000000000..c74b845250d0c Binary files /dev/null and b/packs/infinity/sound/voice/cat_purr_long.ogg differ diff --git a/packs/infinity/sound/voice/clap.ogg b/packs/infinity/sound/voice/clap.ogg new file mode 100644 index 0000000000000..7535857e4583a Binary files /dev/null and b/packs/infinity/sound/voice/clap.ogg differ diff --git a/packs/infinity/sound/voice/clearing-throat-f.ogg b/packs/infinity/sound/voice/clearing-throat-f.ogg new file mode 100644 index 0000000000000..d1c9c03a160a5 Binary files /dev/null and b/packs/infinity/sound/voice/clearing-throat-f.ogg differ diff --git a/packs/infinity/sound/voice/clearing-throat-m.ogg b/packs/infinity/sound/voice/clearing-throat-m.ogg new file mode 100644 index 0000000000000..c62b19703704d Binary files /dev/null and b/packs/infinity/sound/voice/clearing-throat-m.ogg differ diff --git a/packs/infinity/sound/voice/cough_female.ogg b/packs/infinity/sound/voice/cough_female.ogg new file mode 100644 index 0000000000000..28370c235ebbc Binary files /dev/null and b/packs/infinity/sound/voice/cough_female.ogg differ diff --git a/packs/infinity/sound/voice/cough_male.ogg b/packs/infinity/sound/voice/cough_male.ogg new file mode 100644 index 0000000000000..1687844821b2e Binary files /dev/null and b/packs/infinity/sound/voice/cough_male.ogg differ diff --git a/packs/infinity/sound/voice/cry_female_1.ogg b/packs/infinity/sound/voice/cry_female_1.ogg new file mode 100644 index 0000000000000..1b415ea46a074 Binary files /dev/null and b/packs/infinity/sound/voice/cry_female_1.ogg differ diff --git a/packs/infinity/sound/voice/cry_female_2.ogg b/packs/infinity/sound/voice/cry_female_2.ogg new file mode 100644 index 0000000000000..95eea1260a515 Binary files /dev/null and b/packs/infinity/sound/voice/cry_female_2.ogg differ diff --git a/packs/infinity/sound/voice/cry_female_3.ogg b/packs/infinity/sound/voice/cry_female_3.ogg new file mode 100644 index 0000000000000..97b190d7994c4 Binary files /dev/null and b/packs/infinity/sound/voice/cry_female_3.ogg differ diff --git a/packs/infinity/sound/voice/cry_male_1.ogg b/packs/infinity/sound/voice/cry_male_1.ogg new file mode 100644 index 0000000000000..6d4e35be168fc Binary files /dev/null and b/packs/infinity/sound/voice/cry_male_1.ogg differ diff --git a/packs/infinity/sound/voice/cry_male_2.ogg b/packs/infinity/sound/voice/cry_male_2.ogg new file mode 100644 index 0000000000000..b0437d3d93831 Binary files /dev/null and b/packs/infinity/sound/voice/cry_male_2.ogg differ diff --git a/packs/infinity/sound/voice/fingersnap.ogg b/packs/infinity/sound/voice/fingersnap.ogg new file mode 100644 index 0000000000000..f7046403513da Binary files /dev/null and b/packs/infinity/sound/voice/fingersnap.ogg differ diff --git a/packs/infinity/sound/voice/gasmask1.ogg b/packs/infinity/sound/voice/gasmask1.ogg new file mode 100644 index 0000000000000..0cbd278e076b3 Binary files /dev/null and b/packs/infinity/sound/voice/gasmask1.ogg differ diff --git a/packs/infinity/sound/voice/gasmask10.ogg b/packs/infinity/sound/voice/gasmask10.ogg new file mode 100644 index 0000000000000..b91bfa67fd8d1 Binary files /dev/null and b/packs/infinity/sound/voice/gasmask10.ogg differ diff --git a/packs/infinity/sound/voice/gasmask2.ogg b/packs/infinity/sound/voice/gasmask2.ogg new file mode 100644 index 0000000000000..659d47b95f5b4 Binary files /dev/null and b/packs/infinity/sound/voice/gasmask2.ogg differ diff --git a/packs/infinity/sound/voice/gasmask3.ogg b/packs/infinity/sound/voice/gasmask3.ogg new file mode 100644 index 0000000000000..8be139a097cc8 Binary files /dev/null and b/packs/infinity/sound/voice/gasmask3.ogg differ diff --git a/packs/infinity/sound/voice/gasmask4.ogg b/packs/infinity/sound/voice/gasmask4.ogg new file mode 100644 index 0000000000000..3e25c6e289f30 Binary files /dev/null and b/packs/infinity/sound/voice/gasmask4.ogg differ diff --git a/packs/infinity/sound/voice/gasmask5.ogg b/packs/infinity/sound/voice/gasmask5.ogg new file mode 100644 index 0000000000000..8235f70b64d3e Binary files /dev/null and b/packs/infinity/sound/voice/gasmask5.ogg differ diff --git a/packs/infinity/sound/voice/gasmask6.ogg b/packs/infinity/sound/voice/gasmask6.ogg new file mode 100644 index 0000000000000..d0cd1d682db7e Binary files /dev/null and b/packs/infinity/sound/voice/gasmask6.ogg differ diff --git a/packs/infinity/sound/voice/gasmask7.ogg b/packs/infinity/sound/voice/gasmask7.ogg new file mode 100644 index 0000000000000..64fd064292236 Binary files /dev/null and b/packs/infinity/sound/voice/gasmask7.ogg differ diff --git a/packs/infinity/sound/voice/gasmask8.ogg b/packs/infinity/sound/voice/gasmask8.ogg new file mode 100644 index 0000000000000..af9305837e00b Binary files /dev/null and b/packs/infinity/sound/voice/gasmask8.ogg differ diff --git a/packs/infinity/sound/voice/gasmask9.ogg b/packs/infinity/sound/voice/gasmask9.ogg new file mode 100644 index 0000000000000..15588492676f4 Binary files /dev/null and b/packs/infinity/sound/voice/gasmask9.ogg differ diff --git a/packs/infinity/sound/voice/gasp_female1.ogg b/packs/infinity/sound/voice/gasp_female1.ogg new file mode 100644 index 0000000000000..f74882f902f6e Binary files /dev/null and b/packs/infinity/sound/voice/gasp_female1.ogg differ diff --git a/packs/infinity/sound/voice/gasp_female2.ogg b/packs/infinity/sound/voice/gasp_female2.ogg new file mode 100644 index 0000000000000..8bd7f74cfddc3 Binary files /dev/null and b/packs/infinity/sound/voice/gasp_female2.ogg differ diff --git a/packs/infinity/sound/voice/gasp_female3.ogg b/packs/infinity/sound/voice/gasp_female3.ogg new file mode 100644 index 0000000000000..6e05d1ea794a5 Binary files /dev/null and b/packs/infinity/sound/voice/gasp_female3.ogg differ diff --git a/packs/infinity/sound/voice/gasp_female4.ogg b/packs/infinity/sound/voice/gasp_female4.ogg new file mode 100644 index 0000000000000..f33b775fd34ea Binary files /dev/null and b/packs/infinity/sound/voice/gasp_female4.ogg differ diff --git a/packs/infinity/sound/voice/gasp_female5.ogg b/packs/infinity/sound/voice/gasp_female5.ogg new file mode 100644 index 0000000000000..cbeeb63e128a0 Binary files /dev/null and b/packs/infinity/sound/voice/gasp_female5.ogg differ diff --git a/packs/infinity/sound/voice/gasp_female6.ogg b/packs/infinity/sound/voice/gasp_female6.ogg new file mode 100644 index 0000000000000..444b6688a4819 Binary files /dev/null and b/packs/infinity/sound/voice/gasp_female6.ogg differ diff --git a/packs/infinity/sound/voice/gasp_female7.ogg b/packs/infinity/sound/voice/gasp_female7.ogg new file mode 100644 index 0000000000000..096354f98501a Binary files /dev/null and b/packs/infinity/sound/voice/gasp_female7.ogg differ diff --git a/packs/infinity/sound/voice/gasp_male1.ogg b/packs/infinity/sound/voice/gasp_male1.ogg new file mode 100644 index 0000000000000..e0ddde118f3a8 Binary files /dev/null and b/packs/infinity/sound/voice/gasp_male1.ogg differ diff --git a/packs/infinity/sound/voice/gasp_male2.ogg b/packs/infinity/sound/voice/gasp_male2.ogg new file mode 100644 index 0000000000000..2119daf880dd6 Binary files /dev/null and b/packs/infinity/sound/voice/gasp_male2.ogg differ diff --git a/packs/infinity/sound/voice/gasp_male3.ogg b/packs/infinity/sound/voice/gasp_male3.ogg new file mode 100644 index 0000000000000..6d5cb214f3ae4 Binary files /dev/null and b/packs/infinity/sound/voice/gasp_male3.ogg differ diff --git a/packs/infinity/sound/voice/gasp_male4.ogg b/packs/infinity/sound/voice/gasp_male4.ogg new file mode 100644 index 0000000000000..a9173a1a2c01c Binary files /dev/null and b/packs/infinity/sound/voice/gasp_male4.ogg differ diff --git a/packs/infinity/sound/voice/gasp_male5.ogg b/packs/infinity/sound/voice/gasp_male5.ogg new file mode 100644 index 0000000000000..8e7ef3734d808 Binary files /dev/null and b/packs/infinity/sound/voice/gasp_male5.ogg differ diff --git a/packs/infinity/sound/voice/gasp_male6.ogg b/packs/infinity/sound/voice/gasp_male6.ogg new file mode 100644 index 0000000000000..546ba45bff0f8 Binary files /dev/null and b/packs/infinity/sound/voice/gasp_male6.ogg differ diff --git a/packs/infinity/sound/voice/gasp_male7.ogg b/packs/infinity/sound/voice/gasp_male7.ogg new file mode 100644 index 0000000000000..f73854f6cf3a2 Binary files /dev/null and b/packs/infinity/sound/voice/gasp_male7.ogg differ diff --git a/packs/infinity/sound/voice/giggle_female_1.ogg b/packs/infinity/sound/voice/giggle_female_1.ogg new file mode 100644 index 0000000000000..87961f5ccb896 Binary files /dev/null and b/packs/infinity/sound/voice/giggle_female_1.ogg differ diff --git a/packs/infinity/sound/voice/giggle_female_2.ogg b/packs/infinity/sound/voice/giggle_female_2.ogg new file mode 100644 index 0000000000000..bd1e99de7690b Binary files /dev/null and b/packs/infinity/sound/voice/giggle_female_2.ogg differ diff --git a/packs/infinity/sound/voice/giggle_female_3.ogg b/packs/infinity/sound/voice/giggle_female_3.ogg new file mode 100644 index 0000000000000..057a842adcbc9 Binary files /dev/null and b/packs/infinity/sound/voice/giggle_female_3.ogg differ diff --git a/packs/infinity/sound/voice/giggle_male_1.ogg b/packs/infinity/sound/voice/giggle_male_1.ogg new file mode 100644 index 0000000000000..06eb4abdfef76 Binary files /dev/null and b/packs/infinity/sound/voice/giggle_male_1.ogg differ diff --git a/packs/infinity/sound/voice/giggle_male_2.ogg b/packs/infinity/sound/voice/giggle_male_2.ogg new file mode 100644 index 0000000000000..befb7665723ad Binary files /dev/null and b/packs/infinity/sound/voice/giggle_male_2.ogg differ diff --git a/packs/infinity/sound/voice/laugh_female_1.ogg b/packs/infinity/sound/voice/laugh_female_1.ogg new file mode 100644 index 0000000000000..b4b464bb685cf Binary files /dev/null and b/packs/infinity/sound/voice/laugh_female_1.ogg differ diff --git a/packs/infinity/sound/voice/laugh_female_2.ogg b/packs/infinity/sound/voice/laugh_female_2.ogg new file mode 100644 index 0000000000000..3124eaf055cd5 Binary files /dev/null and b/packs/infinity/sound/voice/laugh_female_2.ogg differ diff --git a/packs/infinity/sound/voice/laugh_female_3.ogg b/packs/infinity/sound/voice/laugh_female_3.ogg new file mode 100644 index 0000000000000..ed80538fa085c Binary files /dev/null and b/packs/infinity/sound/voice/laugh_female_3.ogg differ diff --git a/packs/infinity/sound/voice/laugh_male_1.ogg b/packs/infinity/sound/voice/laugh_male_1.ogg new file mode 100644 index 0000000000000..6b4f906ffe092 Binary files /dev/null and b/packs/infinity/sound/voice/laugh_male_1.ogg differ diff --git a/packs/infinity/sound/voice/laugh_male_2.ogg b/packs/infinity/sound/voice/laugh_male_2.ogg new file mode 100644 index 0000000000000..4033e04eac3bb Binary files /dev/null and b/packs/infinity/sound/voice/laugh_male_2.ogg differ diff --git a/packs/infinity/sound/voice/laugh_male_3.ogg b/packs/infinity/sound/voice/laugh_male_3.ogg new file mode 100644 index 0000000000000..dba2e80c257f0 Binary files /dev/null and b/packs/infinity/sound/voice/laugh_male_3.ogg differ diff --git a/packs/infinity/sound/voice/moan_female_1.ogg b/packs/infinity/sound/voice/moan_female_1.ogg new file mode 100644 index 0000000000000..dcbac9ae65797 Binary files /dev/null and b/packs/infinity/sound/voice/moan_female_1.ogg differ diff --git a/packs/infinity/sound/voice/moan_female_2.ogg b/packs/infinity/sound/voice/moan_female_2.ogg new file mode 100644 index 0000000000000..88a1bf62b93d6 Binary files /dev/null and b/packs/infinity/sound/voice/moan_female_2.ogg differ diff --git a/packs/infinity/sound/voice/moan_female_3.ogg b/packs/infinity/sound/voice/moan_female_3.ogg new file mode 100644 index 0000000000000..f283acbcac70c Binary files /dev/null and b/packs/infinity/sound/voice/moan_female_3.ogg differ diff --git a/packs/infinity/sound/voice/moan_male_1.ogg b/packs/infinity/sound/voice/moan_male_1.ogg new file mode 100644 index 0000000000000..59cc27914305a Binary files /dev/null and b/packs/infinity/sound/voice/moan_male_1.ogg differ diff --git a/packs/infinity/sound/voice/moan_male_2.ogg b/packs/infinity/sound/voice/moan_male_2.ogg new file mode 100644 index 0000000000000..82a021b0a945c Binary files /dev/null and b/packs/infinity/sound/voice/moan_male_2.ogg differ diff --git a/packs/infinity/sound/voice/moan_male_3.ogg b/packs/infinity/sound/voice/moan_male_3.ogg new file mode 100644 index 0000000000000..78e8eb9c8f66f Binary files /dev/null and b/packs/infinity/sound/voice/moan_male_3.ogg differ diff --git a/packs/infinity/sound/voice/naris_blip.ogg b/packs/infinity/sound/voice/naris_blip.ogg new file mode 100644 index 0000000000000..4f7e24e3c2a39 Binary files /dev/null and b/packs/infinity/sound/voice/naris_blip.ogg differ diff --git a/packs/infinity/sound/voice/naris_call.ogg b/packs/infinity/sound/voice/naris_call.ogg new file mode 100644 index 0000000000000..6657a99dfcad1 Binary files /dev/null and b/packs/infinity/sound/voice/naris_call.ogg differ diff --git a/packs/infinity/sound/voice/naris_chatter.ogg b/packs/infinity/sound/voice/naris_chatter.ogg new file mode 100644 index 0000000000000..7e78097869d2c Binary files /dev/null and b/packs/infinity/sound/voice/naris_chatter.ogg differ diff --git a/packs/infinity/sound/voice/naris_scan1.ogg b/packs/infinity/sound/voice/naris_scan1.ogg new file mode 100644 index 0000000000000..f896c38af1698 Binary files /dev/null and b/packs/infinity/sound/voice/naris_scan1.ogg differ diff --git a/packs/infinity/sound/voice/naris_scan2.ogg b/packs/infinity/sound/voice/naris_scan2.ogg new file mode 100644 index 0000000000000..e50feb7d909ea Binary files /dev/null and b/packs/infinity/sound/voice/naris_scan2.ogg differ diff --git a/packs/infinity/sound/voice/naris_scan3.ogg b/packs/infinity/sound/voice/naris_scan3.ogg new file mode 100644 index 0000000000000..c4b7d57988369 Binary files /dev/null and b/packs/infinity/sound/voice/naris_scan3.ogg differ diff --git a/packs/infinity/sound/voice/naris_sirene.ogg b/packs/infinity/sound/voice/naris_sirene.ogg new file mode 100644 index 0000000000000..04d72922e5ff7 Binary files /dev/null and b/packs/infinity/sound/voice/naris_sirene.ogg differ diff --git a/packs/infinity/sound/voice/pain_female_1.ogg b/packs/infinity/sound/voice/pain_female_1.ogg new file mode 100644 index 0000000000000..0e4226f19437e Binary files /dev/null and b/packs/infinity/sound/voice/pain_female_1.ogg differ diff --git a/packs/infinity/sound/voice/pain_female_2.ogg b/packs/infinity/sound/voice/pain_female_2.ogg new file mode 100644 index 0000000000000..985d05b646483 Binary files /dev/null and b/packs/infinity/sound/voice/pain_female_2.ogg differ diff --git a/packs/infinity/sound/voice/pain_female_3.ogg b/packs/infinity/sound/voice/pain_female_3.ogg new file mode 100644 index 0000000000000..b6b5e85194ab6 Binary files /dev/null and b/packs/infinity/sound/voice/pain_female_3.ogg differ diff --git a/packs/infinity/sound/voice/pain_female_4.ogg b/packs/infinity/sound/voice/pain_female_4.ogg new file mode 100644 index 0000000000000..d5fdc9d400411 Binary files /dev/null and b/packs/infinity/sound/voice/pain_female_4.ogg differ diff --git a/packs/infinity/sound/voice/pain_male_1.ogg b/packs/infinity/sound/voice/pain_male_1.ogg new file mode 100644 index 0000000000000..e03ceeba1ea2c Binary files /dev/null and b/packs/infinity/sound/voice/pain_male_1.ogg differ diff --git a/packs/infinity/sound/voice/pain_male_2.ogg b/packs/infinity/sound/voice/pain_male_2.ogg new file mode 100644 index 0000000000000..a4bc4c9de108a Binary files /dev/null and b/packs/infinity/sound/voice/pain_male_2.ogg differ diff --git a/packs/infinity/sound/voice/pain_male_3.ogg b/packs/infinity/sound/voice/pain_male_3.ogg new file mode 100644 index 0000000000000..6a580d0a1d4be Binary files /dev/null and b/packs/infinity/sound/voice/pain_male_3.ogg differ diff --git a/packs/infinity/sound/voice/pain_monkey_1.ogg b/packs/infinity/sound/voice/pain_monkey_1.ogg new file mode 100644 index 0000000000000..34d90cb68cbc8 Binary files /dev/null and b/packs/infinity/sound/voice/pain_monkey_1.ogg differ diff --git a/packs/infinity/sound/voice/pain_monkey_2.ogg b/packs/infinity/sound/voice/pain_monkey_2.ogg new file mode 100644 index 0000000000000..a1e6271014263 Binary files /dev/null and b/packs/infinity/sound/voice/pain_monkey_2.ogg differ diff --git a/packs/infinity/sound/voice/pain_monkey_3.ogg b/packs/infinity/sound/voice/pain_monkey_3.ogg new file mode 100644 index 0000000000000..974041d85de85 Binary files /dev/null and b/packs/infinity/sound/voice/pain_monkey_3.ogg differ diff --git a/packs/infinity/sound/voice/resomicougha.ogg b/packs/infinity/sound/voice/resomicougha.ogg new file mode 100644 index 0000000000000..cbc85d526e240 Binary files /dev/null and b/packs/infinity/sound/voice/resomicougha.ogg differ diff --git a/packs/infinity/sound/voice/resomicoughb.ogg b/packs/infinity/sound/voice/resomicoughb.ogg new file mode 100644 index 0000000000000..b0e0c994e986e Binary files /dev/null and b/packs/infinity/sound/voice/resomicoughb.ogg differ diff --git a/packs/infinity/sound/voice/resomisneeze.ogg b/packs/infinity/sound/voice/resomisneeze.ogg new file mode 100644 index 0000000000000..f7428654647d8 Binary files /dev/null and b/packs/infinity/sound/voice/resomisneeze.ogg differ diff --git a/packs/infinity/sound/voice/robot_talk_heavy_1.ogg b/packs/infinity/sound/voice/robot_talk_heavy_1.ogg new file mode 100644 index 0000000000000..e808e0db58776 Binary files /dev/null and b/packs/infinity/sound/voice/robot_talk_heavy_1.ogg differ diff --git a/packs/infinity/sound/voice/robot_talk_heavy_2.ogg b/packs/infinity/sound/voice/robot_talk_heavy_2.ogg new file mode 100644 index 0000000000000..e81b2832eab7e Binary files /dev/null and b/packs/infinity/sound/voice/robot_talk_heavy_2.ogg differ diff --git a/packs/infinity/sound/voice/robot_talk_heavy_3.ogg b/packs/infinity/sound/voice/robot_talk_heavy_3.ogg new file mode 100644 index 0000000000000..0670b3cded4e9 Binary files /dev/null and b/packs/infinity/sound/voice/robot_talk_heavy_3.ogg differ diff --git a/packs/infinity/sound/voice/robot_talk_heavy_4.ogg b/packs/infinity/sound/voice/robot_talk_heavy_4.ogg new file mode 100644 index 0000000000000..0713e045a8104 Binary files /dev/null and b/packs/infinity/sound/voice/robot_talk_heavy_4.ogg differ diff --git a/packs/infinity/sound/voice/robot_talk_light_1.ogg b/packs/infinity/sound/voice/robot_talk_light_1.ogg new file mode 100644 index 0000000000000..6ac3ca8c065f8 Binary files /dev/null and b/packs/infinity/sound/voice/robot_talk_light_1.ogg differ diff --git a/packs/infinity/sound/voice/robot_talk_light_2.ogg b/packs/infinity/sound/voice/robot_talk_light_2.ogg new file mode 100644 index 0000000000000..c547e6506f3d5 Binary files /dev/null and b/packs/infinity/sound/voice/robot_talk_light_2.ogg differ diff --git a/packs/infinity/sound/voice/robot_talk_light_3.ogg b/packs/infinity/sound/voice/robot_talk_light_3.ogg new file mode 100644 index 0000000000000..bd185943e6f39 Binary files /dev/null and b/packs/infinity/sound/voice/robot_talk_light_3.ogg differ diff --git a/packs/infinity/sound/voice/robot_talk_light_4.ogg b/packs/infinity/sound/voice/robot_talk_light_4.ogg new file mode 100644 index 0000000000000..d2f17878a52ef Binary files /dev/null and b/packs/infinity/sound/voice/robot_talk_light_4.ogg differ diff --git a/packs/infinity/sound/voice/robot_talk_light_5.ogg b/packs/infinity/sound/voice/robot_talk_light_5.ogg new file mode 100644 index 0000000000000..a5c6712b52671 Binary files /dev/null and b/packs/infinity/sound/voice/robot_talk_light_5.ogg differ diff --git a/packs/infinity/sound/voice/scream_female_1.ogg b/packs/infinity/sound/voice/scream_female_1.ogg new file mode 100644 index 0000000000000..19dd74f464f77 Binary files /dev/null and b/packs/infinity/sound/voice/scream_female_1.ogg differ diff --git a/packs/infinity/sound/voice/scream_female_2.ogg b/packs/infinity/sound/voice/scream_female_2.ogg new file mode 100644 index 0000000000000..e2dce0e7a2c9a Binary files /dev/null and b/packs/infinity/sound/voice/scream_female_2.ogg differ diff --git a/packs/infinity/sound/voice/scream_male_1.ogg b/packs/infinity/sound/voice/scream_male_1.ogg new file mode 100644 index 0000000000000..33acc51884cc2 Binary files /dev/null and b/packs/infinity/sound/voice/scream_male_1.ogg differ diff --git a/packs/infinity/sound/voice/scream_male_2.ogg b/packs/infinity/sound/voice/scream_male_2.ogg new file mode 100644 index 0000000000000..bb66916ab0c93 Binary files /dev/null and b/packs/infinity/sound/voice/scream_male_2.ogg differ diff --git a/packs/infinity/sound/voice/scream_male_3.ogg b/packs/infinity/sound/voice/scream_male_3.ogg new file mode 100644 index 0000000000000..e58bc8df76062 Binary files /dev/null and b/packs/infinity/sound/voice/scream_male_3.ogg differ diff --git a/packs/infinity/sound/voice/scream_robot.ogg b/packs/infinity/sound/voice/scream_robot.ogg new file mode 100644 index 0000000000000..5db056a771358 Binary files /dev/null and b/packs/infinity/sound/voice/scream_robot.ogg differ diff --git a/packs/infinity/sound/voice/sigh_female.ogg b/packs/infinity/sound/voice/sigh_female.ogg new file mode 100644 index 0000000000000..d72c206cc3065 Binary files /dev/null and b/packs/infinity/sound/voice/sigh_female.ogg differ diff --git a/packs/infinity/sound/voice/sigh_male.ogg b/packs/infinity/sound/voice/sigh_male.ogg new file mode 100644 index 0000000000000..1590bcdee605a Binary files /dev/null and b/packs/infinity/sound/voice/sigh_male.ogg differ diff --git a/packs/infinity/sound/voice/sneeze_female_1.ogg b/packs/infinity/sound/voice/sneeze_female_1.ogg new file mode 100644 index 0000000000000..2794147957db2 Binary files /dev/null and b/packs/infinity/sound/voice/sneeze_female_1.ogg differ diff --git a/packs/infinity/sound/voice/sneeze_female_2.ogg b/packs/infinity/sound/voice/sneeze_female_2.ogg new file mode 100644 index 0000000000000..91c9d9d150b61 Binary files /dev/null and b/packs/infinity/sound/voice/sneeze_female_2.ogg differ diff --git a/packs/infinity/sound/voice/sneeze_male_1.ogg b/packs/infinity/sound/voice/sneeze_male_1.ogg new file mode 100644 index 0000000000000..b36b86eb45867 Binary files /dev/null and b/packs/infinity/sound/voice/sneeze_male_1.ogg differ diff --git a/packs/infinity/sound/voice/sneeze_male_2.ogg b/packs/infinity/sound/voice/sneeze_male_2.ogg new file mode 100644 index 0000000000000..d473e4ad1bae7 Binary files /dev/null and b/packs/infinity/sound/voice/sneeze_male_2.ogg differ diff --git a/packs/infinity/sound/voice/snore_1.ogg b/packs/infinity/sound/voice/snore_1.ogg new file mode 100644 index 0000000000000..f1afa4ecccab1 Binary files /dev/null and b/packs/infinity/sound/voice/snore_1.ogg differ diff --git a/packs/infinity/sound/voice/snore_2.ogg b/packs/infinity/sound/voice/snore_2.ogg new file mode 100644 index 0000000000000..97b4b7a99cf52 Binary files /dev/null and b/packs/infinity/sound/voice/snore_2.ogg differ diff --git a/packs/infinity/sound/voice/snore_3.ogg b/packs/infinity/sound/voice/snore_3.ogg new file mode 100644 index 0000000000000..b95e4603cc11f Binary files /dev/null and b/packs/infinity/sound/voice/snore_3.ogg differ diff --git a/packs/infinity/sound/voice/snore_4.ogg b/packs/infinity/sound/voice/snore_4.ogg new file mode 100644 index 0000000000000..4e867039ea71e Binary files /dev/null and b/packs/infinity/sound/voice/snore_4.ogg differ diff --git a/packs/infinity/sound/voice/snore_5.ogg b/packs/infinity/sound/voice/snore_5.ogg new file mode 100644 index 0000000000000..8c0a300acd268 Binary files /dev/null and b/packs/infinity/sound/voice/snore_5.ogg differ diff --git a/packs/infinity/sound/voice/snore_6.ogg b/packs/infinity/sound/voice/snore_6.ogg new file mode 100644 index 0000000000000..bddccff92491a Binary files /dev/null and b/packs/infinity/sound/voice/snore_6.ogg differ diff --git a/packs/infinity/sound/voice/snore_7.ogg b/packs/infinity/sound/voice/snore_7.ogg new file mode 100644 index 0000000000000..7bfe7ca8b6b49 Binary files /dev/null and b/packs/infinity/sound/voice/snore_7.ogg differ diff --git a/packs/infinity/sound/voice/throat.ogg b/packs/infinity/sound/voice/throat.ogg new file mode 100644 index 0000000000000..67e8071f68ee1 Binary files /dev/null and b/packs/infinity/sound/voice/throat.ogg differ diff --git a/packs/infinity/sound/voice/traitor_intro.ogg b/packs/infinity/sound/voice/traitor_intro.ogg new file mode 100644 index 0000000000000..ca0efa0ea0f1c Binary files /dev/null and b/packs/infinity/sound/voice/traitor_intro.ogg differ diff --git a/packs/infinity/sound/voice/whistle.ogg b/packs/infinity/sound/voice/whistle.ogg new file mode 100644 index 0000000000000..e8c1a6c90f465 Binary files /dev/null and b/packs/infinity/sound/voice/whistle.ogg differ diff --git a/packs/infinity/sound/voice/yawn_female_1.ogg b/packs/infinity/sound/voice/yawn_female_1.ogg new file mode 100644 index 0000000000000..548be96b76e11 Binary files /dev/null and b/packs/infinity/sound/voice/yawn_female_1.ogg differ diff --git a/packs/infinity/sound/voice/yawn_female_2.ogg b/packs/infinity/sound/voice/yawn_female_2.ogg new file mode 100644 index 0000000000000..67b15056728e5 Binary files /dev/null and b/packs/infinity/sound/voice/yawn_female_2.ogg differ diff --git a/packs/infinity/sound/voice/yawn_female_3.ogg b/packs/infinity/sound/voice/yawn_female_3.ogg new file mode 100644 index 0000000000000..12d42db2440e1 Binary files /dev/null and b/packs/infinity/sound/voice/yawn_female_3.ogg differ diff --git a/packs/infinity/sound/voice/yawn_male_1.ogg b/packs/infinity/sound/voice/yawn_male_1.ogg new file mode 100644 index 0000000000000..193f598745848 Binary files /dev/null and b/packs/infinity/sound/voice/yawn_male_1.ogg differ diff --git a/packs/infinity/sound/voice/yawn_male_2.ogg b/packs/infinity/sound/voice/yawn_male_2.ogg new file mode 100644 index 0000000000000..4064029e1e34a Binary files /dev/null and b/packs/infinity/sound/voice/yawn_male_2.ogg differ diff --git a/packs/infinity/sound/weapons/anime_sword.wav b/packs/infinity/sound/weapons/anime_sword.wav new file mode 100644 index 0000000000000..454013d575f0a Binary files /dev/null and b/packs/infinity/sound/weapons/anime_sword.wav differ diff --git a/packs/infinity/sound/weapons/batonextend.ogg b/packs/infinity/sound/weapons/batonextend.ogg new file mode 100644 index 0000000000000..ca09831fffc64 Binary files /dev/null and b/packs/infinity/sound/weapons/batonextend.ogg differ diff --git a/packs/infinity/sound/weapons/bloodyslice.ogg b/packs/infinity/sound/weapons/bloodyslice.ogg new file mode 100644 index 0000000000000..8b2cb728939b2 Binary files /dev/null and b/packs/infinity/sound/weapons/bloodyslice.ogg differ diff --git a/packs/infinity/sound/weapons/cannon.ogg b/packs/infinity/sound/weapons/cannon.ogg new file mode 100644 index 0000000000000..0b0b7ad4cf118 Binary files /dev/null and b/packs/infinity/sound/weapons/cannon.ogg differ diff --git a/packs/infinity/sound/weapons/crowbarhit.ogg b/packs/infinity/sound/weapons/crowbarhit.ogg new file mode 100644 index 0000000000000..a722c872ff7e2 Binary files /dev/null and b/packs/infinity/sound/weapons/crowbarhit.ogg differ diff --git a/packs/infinity/sound/weapons/crowbarhit2.ogg b/packs/infinity/sound/weapons/crowbarhit2.ogg new file mode 100644 index 0000000000000..d88104a525ab6 Binary files /dev/null and b/packs/infinity/sound/weapons/crowbarhit2.ogg differ diff --git a/packs/infinity/sound/weapons/flash_ring.ogg b/packs/infinity/sound/weapons/flash_ring.ogg new file mode 100644 index 0000000000000..a5d2014b8a2f8 Binary files /dev/null and b/packs/infinity/sound/weapons/flash_ring.ogg differ diff --git a/packs/infinity/sound/weapons/flashbang.ogg b/packs/infinity/sound/weapons/flashbang.ogg new file mode 100644 index 0000000000000..389aad77bc2c2 Binary files /dev/null and b/packs/infinity/sound/weapons/flashbang.ogg differ diff --git a/packs/infinity/sound/weapons/gun_empty.ogg b/packs/infinity/sound/weapons/gun_empty.ogg new file mode 100644 index 0000000000000..817d72e0ed0ec Binary files /dev/null and b/packs/infinity/sound/weapons/gun_empty.ogg differ diff --git a/packs/infinity/sound/weapons/guns/interact/gun_bullet_insert.ogg b/packs/infinity/sound/weapons/guns/interact/gun_bullet_insert.ogg new file mode 100644 index 0000000000000..37def53727f1f Binary files /dev/null and b/packs/infinity/sound/weapons/guns/interact/gun_bullet_insert.ogg differ diff --git a/packs/infinity/sound/weapons/guns/interact/gun_cock.ogg b/packs/infinity/sound/weapons/guns/interact/gun_cock.ogg new file mode 100644 index 0000000000000..9e27e595187f5 Binary files /dev/null and b/packs/infinity/sound/weapons/guns/interact/gun_cock.ogg differ diff --git a/packs/infinity/sound/weapons/guns/interact/gun_magin.ogg b/packs/infinity/sound/weapons/guns/interact/gun_magin.ogg new file mode 100644 index 0000000000000..5d923cb82ffc8 Binary files /dev/null and b/packs/infinity/sound/weapons/guns/interact/gun_magin.ogg differ diff --git a/packs/infinity/sound/weapons/guns/interact/gun_magout.ogg b/packs/infinity/sound/weapons/guns/interact/gun_magout.ogg new file mode 100644 index 0000000000000..ce2b5367bac68 Binary files /dev/null and b/packs/infinity/sound/weapons/guns/interact/gun_magout.ogg differ diff --git a/packs/infinity/sound/weapons/gunshot.ogg b/packs/infinity/sound/weapons/gunshot.ogg new file mode 100644 index 0000000000000..2be6e22d94037 Binary files /dev/null and b/packs/infinity/sound/weapons/gunshot.ogg differ diff --git a/packs/infinity/sound/weapons/gunshot/tjgun.ogg b/packs/infinity/sound/weapons/gunshot/tjgun.ogg new file mode 100644 index 0000000000000..6663f5514f942 Binary files /dev/null and b/packs/infinity/sound/weapons/gunshot/tjgun.ogg differ diff --git a/packs/infinity/sound/weapons/gunshot2.ogg b/packs/infinity/sound/weapons/gunshot2.ogg new file mode 100644 index 0000000000000..a16d186bd19fe Binary files /dev/null and b/packs/infinity/sound/weapons/gunshot2.ogg differ diff --git a/packs/infinity/sound/weapons/gunshot3.ogg b/packs/infinity/sound/weapons/gunshot3.ogg new file mode 100644 index 0000000000000..17d36e43e1205 Binary files /dev/null and b/packs/infinity/sound/weapons/gunshot3.ogg differ diff --git a/packs/infinity/sound/weapons/gunshot4.ogg b/packs/infinity/sound/weapons/gunshot4.ogg new file mode 100644 index 0000000000000..28bf842cf1b71 Binary files /dev/null and b/packs/infinity/sound/weapons/gunshot4.ogg differ diff --git a/packs/infinity/sound/weapons/handcuffs_finish.ogg b/packs/infinity/sound/weapons/handcuffs_finish.ogg new file mode 100644 index 0000000000000..c8437b208c63a Binary files /dev/null and b/packs/infinity/sound/weapons/handcuffs_finish.ogg differ diff --git a/packs/infinity/sound/weapons/katana_out.wav b/packs/infinity/sound/weapons/katana_out.wav new file mode 100644 index 0000000000000..e66f87728c156 Binary files /dev/null and b/packs/infinity/sound/weapons/katana_out.wav differ diff --git a/packs/infinity/sound/weapons/selector.ogg b/packs/infinity/sound/weapons/selector.ogg new file mode 100644 index 0000000000000..298181609e49e Binary files /dev/null and b/packs/infinity/sound/weapons/selector.ogg differ diff --git a/packs/infinity/sound/weapons/slap.ogg b/packs/infinity/sound/weapons/slap.ogg new file mode 100644 index 0000000000000..a1fd4ab9fb1d9 Binary files /dev/null and b/packs/infinity/sound/weapons/slap.ogg differ diff --git a/packs/infinity/structures/barrier.dm b/packs/infinity/structures/barrier.dm new file mode 100644 index 0000000000000..e50687b8bd54e --- /dev/null +++ b/packs/infinity/structures/barrier.dm @@ -0,0 +1,259 @@ +/obj/structure/barrier + name = "defensive barrier" + desc = "A portable barrier - usually, you can see it on defensive positions or in storages in important areas. \ + You can deploy it with a screwdriver for maximum protection, or keep it in mobile position. \ + Also, demontage can be done with a crowbar. In case of structural damage, can be repaired with welding tool." + icon = 'packs/infinity/icons/obj/barrier.dmi' + icon_state = "barrier_rised" + density = TRUE + throwpass = 1 + anchored = TRUE + atom_flags = ATOM_FLAG_CLIMBABLE | ATOM_FLAG_CHECKS_BORDER + var/health = 200 + var/maxhealth = 200 + var/deployed = 0 + var/basic_chance = 50 + +/obj/structure/barrier/Initialize() + . = ..() + update_layers() + update_icon() + +/obj/structure/barrier/examine(mob/user) + . = ..() + if(health>=200) + . += SPAN_NOTICE("It looks undamaged.") + if(health>=140 && health<200) + . += SPAN_WARNING("It has small dents.") + if(health>=80 && health<140) + . += SPAN_WARNING("It has medium dents.") + if(health<80) + . += SPAN_DANGER("It will break apart soon!") + +/obj/structure/barrier/Destroy() + if(health <= 0) + visible_message("[src] was destroyed!") + playsound(src, 'sound/effects/clang.ogg', 100, 1) + new /obj/item/stack/material/steel(src.loc) + new /obj/item/stack/material/steel(src.loc) + return ..() + +/obj/structure/barrier/proc/update_layers() + if(dir != SOUTH) + layer = initial(layer) + 0.1 + else if(dir == SOUTH && density) + layer = ABOVE_HUMAN_LAYER + else + layer = initial(layer) + 0.1 + +/obj/structure/barrier/on_update_icon() + if(density && !deployed) + icon_state = "barrier_rised" + if(!density && !deployed) + icon_state = "barrier_downed" + if(deployed) + icon_state = "barrier_deployed" + +/obj/structure/barrier/set_dir() + ..() + update_layers() + +/obj/structure/barrier/CanPass(atom/movable/mover, turf/target, height = 0, air_group = 0) + if(!density || air_group || !height) + return TRUE + + if(istype(mover, /obj/item/projectile)) + var/obj/item/projectile/proj = mover + + if(Adjacent(proj?.firer)) + return TRUE + + if(mover.dir != reverse_direction(dir)) + return TRUE + + if(get_dist(proj.starting, loc) <= 1)//allows to fire from 1 tile away of barrier + return TRUE + + return check_cover(mover, target) + + if(get_dir(get_turf(src), target) == dir && density)//turned in front of barrier + return FALSE + return TRUE + +/obj/structure/barrier/CheckExit(atom/movable/O as mob|obj, target as turf) + if(O?.checkpass(PASS_FLAG_TABLE)) + return 1 + if (get_dir(loc, target) == dir) + return !density + else + return 1 + +/obj/structure/barrier/attack_hand(mob/living/carbon/human/user as mob) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if(user.species.can_shred(user) && user.a_intent == I_HURT) + take_damage(20) + return + if(deployed) + to_chat(user, SPAN_NOTICE("[src] is already deployed. You can't move it.")) + else + if(do_after(user, 5, src)) + playsound(src, 'sound/effects/extout.ogg', 100, 1) + density = !density + to_chat(user, SPAN_NOTICE("You're getting [density ? "up" : "down"] [src].")) + update_layers() + update_icon() + +/obj/structure/barrier/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(deployed || density) + to_chat(user, SPAN_NOTICE("You should unsecure [src] firstly. Use a screwdriver.")) + return + visible_message(SPAN_DANGER("[user] begins disassembling [src]...")) + if(!tool.use_as_tool(src, user, 6 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + var/obj/item/barrier/B = new /obj/item/barrier(get_turf(user)) + visible_message(SPAN_NOTICE("[user] dismantled [src].")) + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + B.health = health + B.add_fingerprint(user) + qdel(src) + +/obj/structure/barrier/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!density) + return + balloon_alert(user, "[deployed ? "деактивация креплений" : "активация креплений"]") + if(!tool.use_as_tool(src, user, 3 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + deployed = !deployed + balloon_alert_to_viewers("[deployed ? "крепления активны!" : "крепления деактивированы!"]") + if(deployed) + basic_chance = 70 + else + basic_chance = 50 + update_icon() + +/obj/structure/barrier/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(health == maxhealth) + USE_FEEDBACK_NOTHING_TO_REPAIR(user) + return + if(!tool.tool_start_check(user, 1)) + return + USE_FEEDBACK_REPAIR_START(user) + if(!tool.use_as_tool(src, user, (max(5, health / 5)) SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + USE_FEEDBACK_REPAIR_FINISH(user) + health = maxhealth + +/obj/structure/barrier/bullet_act(obj/item/projectile/P) + ..() + take_damage(P.get_structure_damage()) + +/obj/structure/barrier/attack_generic(mob/user, damage, attack_verb) + take_damage(damage) + attack_animation(user) + if(damage >=1) + user.visible_message("[user] [attack_verb] [src]!") + else + user.visible_message("[user] [attack_verb] [src] harmlessly!") + return 1 + +/obj/structure/barrier/proc/take_damage(damage) + health -= damage * 0.5 + if(health <= 0) + qdel(src) + else + playsound(src.loc, 'sound/effects/bang.ogg', 75, 1) + +/obj/structure/barrier/proc/check_cover(obj/item/projectile/P, turf/from) + var/turf/cover = get_turf(src) + var/chance = basic_chance + + if(!cover) + return 1 + + var/mob/living/carbon/human/M = locate(src.loc) + if(M) + chance += 30 + + if(M.lying) + chance += 20 + + if(get_dir(loc, from) == dir) + chance += 10 + + if(prob(chance)) + visible_message(SPAN_WARNING("[P] hits [src]!")) + bullet_act(P) + return 0 + + return 1 + +/obj/structure/barrier/MouseDrop_T(mob/user as mob) + if(src.loc != user.loc) + to_chat(user, "You start climbing onto [src]...") + step(src, get_dir(src, src.dir)) + +/obj/structure/barrier/ex_act(severity) + switch(severity) + if(1.0) + new /obj/item/stack/material/steel(src.loc) + new /obj/item/stack/material/steel(src.loc) + if(prob(50)) + new /obj/item/stack/material/steel(src.loc) + qdel(src) + return + if(2.0) + new /obj/item/stack/material/steel(src.loc) + if(prob(50)) + new /obj/item/stack/material/steel(src.loc) + qdel(src) + return + else + return + +/obj/item/barrier + name = "portable barrier" + desc = "A portable barrier. Usually, you can see it on defensive positions or in storages at important areas. \ + You can deploy it with a screwdriver for maximum protection, or keep it in mobile position. \ + Also, demontage can be done with a crowbar.In case of structural damage, can be repaired with welding tool." + icon = 'packs/infinity/icons/obj/items.dmi' + icon_state = "barrier_hand" + w_class = 4 + var/health = 200 + +/obj/item/barrier/proc/turf_check(mob/user as mob) + for(var/obj/structure/barrier/D in user.loc.contents) + if((D.dir == user.dir)) + USE_FEEDBACK_FAILURE("There is no more space.") + return 1 + return 0 + +/obj/item/barrier/attack_self(mob/user as mob) + if(!isturf(user.loc)) + USE_FEEDBACK_FAILURE("You can't place it here.") + return + if(turf_check(user)) + return + + if(do_after(user, 1 SECOND, src)) + playsound(src, 'sound/effects/extout.ogg', 100, 1) + var/obj/structure/barrier/B = new(user.loc) + B.set_dir(user.dir) + B.health = health + user.drop_item() + qdel(src) + +/obj/item/barrier/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(health == initial(health)) + USE_FEEDBACK_NOTHING_TO_REPAIR(user) + return + if(!tool.tool_start_check(user, 1)) + return + USE_FEEDBACK_REPAIR_START(user) + if(!tool.use_as_tool(src, user, (max(5, health / 5)) SECONDS, 1, 50, SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + USE_FEEDBACK_REPAIR_FINISH(user) + health = initial(health) diff --git a/packs/infinity/structures/chairs.dm b/packs/infinity/structures/chairs.dm new file mode 100644 index 0000000000000..2b58aff218fc3 --- /dev/null +++ b/packs/infinity/structures/chairs.dm @@ -0,0 +1,77 @@ +// SIERRA TODO: Перенести к диванам в мод + вернуть иконки + +/obj/structure/bed/chair/pew/up + // icon = 'packs/infinity/icons/obj/furniture.dmi' + // icon_state = "pew_up" + base_icon = "pew_up" + +/obj/structure/bed/chair/pew/down + // icon = 'packs/infinity/icons/obj/furniture.dmi' + // icon_state = "pew_down" + base_icon = "pew_down" + +/obj/structure/bed/chair/pew/up/mahogany + color = WOOD_COLOR_RICH + pew_material = MATERIAL_MAHOGANY + +/obj/structure/bed/chair/pew/down/mahogany + color = WOOD_COLOR_RICH + pew_material = MATERIAL_MAHOGANY + + + +/obj/structure/bed/chair/office/hard/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, padding_material) + +/obj/structure/bed/chair/office/brown/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, MATERIAL_LEATHER_GENERIC) + +/obj/structure/bed/chair/office/red/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, MATERIAL_CARPET) + +/obj/structure/bed/chair/office/teal/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "teal") + +/obj/structure/bed/chair/office/dark/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "black") + +/obj/structure/bed/chair/office/green/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "green") + +/obj/structure/bed/chair/office/purple/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "purple") + +/obj/structure/bed/chair/office/blue/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "blue") + +/obj/structure/bed/chair/office/beige/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "beige") + +/obj/structure/bed/chair/office/lime/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "lime") + +/obj/structure/bed/chair/office/yellow/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, "yellow") + +/obj/structure/bed/chair/office/light/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, newmaterial, MATERIAL_CLOTH) + + + +/obj/structure/bed/chair/shuttle/hard/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, MATERIAL_STEEL, padding_material) + +/obj/structure/bed/chair/shuttle/blue/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, MATERIAL_STEEL, "blue") + +/obj/structure/bed/chair/shuttle/black/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, MATERIAL_STEEL , "black") + +/obj/structure/bed/chair/shuttle/white/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, MATERIAL_STEEL, MATERIAL_CLOTH) + +/obj/structure/bed/chair/shuttle/red/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, MATERIAL_STEEL, MATERIAL_CARPET) + +/obj/structure/bed/chair/shuttle/green/New(newloc, newmaterial = DEFAULT_FURNITURE_MATERIAL) + ..(newloc, MATERIAL_STEEL, "green") diff --git a/packs/infinity/structures/curtains.dm b/packs/infinity/structures/curtains.dm new file mode 100644 index 0000000000000..7bc6c752f873e --- /dev/null +++ b/packs/infinity/structures/curtains.dm @@ -0,0 +1,39 @@ +/obj/structure/curtain + desc = "Yeap, that's curtains. You may uninstall them with a screwdriver." + var/in_progress = FALSE //for (un)installing + +/obj/structure/curtain/bed + name = "bed curtain" + color = "#854636" + +/obj/structure/curtain/open/bed + name = "bed curtain" + color = "#854636" + +/obj/structure/curtain/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + USE_FEEDBACK_DECONSTRUCT_START(user) + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + var/obj/item/curtain/C = new /obj/item/curtain(loc) + C.color = color + qdel(src) + +/obj/item/curtain + name = "rolled curtain" + desc = "A rolled curtains. Looks like someone may install them with a screwdriver..." + icon = 'packs/infinity/icons/obj/items.dmi' + icon_state = "curtain_rolled" + force = 3 //just plastic + w_class = ITEM_SIZE_HUGE //curtains, yeap + +/obj/item/curtain/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(loc == user.loc) + balloon_alert(user, "нужно устанавливать на полу!") + return + balloon_alert(user, "установка") + if(!tool.use_as_tool(src, user, 4 SECONDS, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + var/obj/structure/curtain/C = new /obj/structure/curtain(loc) + C.color = color diff --git a/packs/infinity/structures/holoplants.dm b/packs/infinity/structures/holoplants.dm new file mode 100644 index 0000000000000..564d6c8d30898 --- /dev/null +++ b/packs/infinity/structures/holoplants.dm @@ -0,0 +1,149 @@ +GLOBAL_LIST_INIT(recomended_holoplants_colors, list(COLOR_PALE_RED_GRAY,COLOR_BLUE_GRAY,COLOR_PALE_GREEN_GRAY,COLOR_PALE_YELLOW,COLOR_PALE_PINK,COLOR_BABY_BLUE)) +/obj/structure/holoplant + name = "holograph" + desc = "An strange flower pot. It have something like holograph projector." + icon = 'packs/infinity/icons/obj/structures/holoplants.dmi' + icon_state = "holopot" + w_class = ITEM_SIZE_TINY + + var/emagged = FALSE + var/interference = FALSE + + var/brightness_on = 1 + var/enabled = TRUE + + var/icon/plant = null + var/plant_color + var/list/colors_clamp = 60 + var/hologram_opacity = 0.85 + + var/list/possible_states + var/list/emagged_states + +/obj/structure/holoplant/Initialize() + . = ..() + update_icon() + +/obj/structure/holoplant/proc/parse_icon() + possible_states = list() + emagged_states = list() + var/list/states = ICON_STATES(icon) + for(var/i in states) + var/list/state_splittext = splittext(i, "-") + if(length(state_splittext) > 1) + if(istext(state_splittext[1])) + var/t = state_splittext[1] + var/list/add2 + if(t == "P") + add2 = possible_states + else if(t == "E") + add2 = emagged_states + add2 += i + +/obj/structure/holoplant/on_update_icon() + . = ..() + if(!islist(possible_states)) + parse_icon() + ClearOverlays() + hologram_opacity = (emagged ? 0.95 : initial(hologram_opacity)) + if(!isicon(plant)) + change_plant(plant) + change_color(plant_color) + + if(enabled) + AddOverlays(plant) + set_light(3, brightness_on, plant_color) + +/obj/structure/holoplant/proc/change_plant(state) + plant = prepare_icon(state) + +/obj/structure/holoplant/proc/prepare_icon(state) + if(!istext(state)) + state = pick((emagged ? emagged_states : possible_states)) + + var/plant_icon = icon(icon, state) + return getHologramIcon(plant_icon, TRUE, null) + +/obj/structure/holoplant/proc/change_color(ncolor) + if (!plant) + return + if(!ncolor) + ncolor = pick(GLOB.recomended_holoplants_colors) + if(islist(colors_clamp) && length(colors_clamp)) + ncolor = clamphex(ncolor, colors_clamp[1], colors_clamp[2]) + else + ncolor = clamphex(ncolor, colors_clamp) + plant_color = ncolor + plant.ColorTone(ncolor) + + set_light(l_color=ncolor) + +/obj/structure/holoplant/attack_hand(mob/user) + if(!interference) + switch(alert("What do you want?",,"Color", "Cancel", "Hologram")) + if("Color") + change_color(input("Select New color", "Color", plant_color) as color) + if("Hologram") + change_plant(input("Select Hologram", "Hologram") in (emagged ? emagged_states : possible_states)) + update_icon() + +/obj/structure/holoplant/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + enabled = !enabled + brightness_on = brightness_on ? 0 : initial(brightness_on) + balloon_alert(user, "[enabled ? "включено" : "выключено"]") + update_icon() + +/obj/structure/holoplant/use_tool(obj/item/tool, mob/user, list/click_params) + if(istype(tool, /obj/item/card/id)) + if(!emagged) + emag_act() + else + rollback() + return TRUE + return ..() + +/obj/structure/holoplant/proc/rollback() + emagged = FALSE + update_icon() + +/obj/structure/holoplant/emag_act() + emagged = TRUE + update_icon() + +/obj/structure/holoplant/proc/Interference() //should not have any returns, cuz of waitfor = 0 + set waitfor = 0 + if (QDELETED(src)) + return + interference = TRUE + ClearOverlays() + set_light(0, 0, l_color = plant_color) + sleep(3) + if(QDELETED(src)) + return + + AddOverlays(plant) + set_light(2, 0.5, brightness_on, l_color = plant_color) + sleep(3) + if(QDELETED(src)) + return + + CutOverlays(plant) + set_light(0, 0, l_color = plant_color) + sleep(3) + if(QDELETED(src)) + return + + update_icon() + + interference = FALSE + +/obj/structure/holoplant/proc/doInterference() + if(!interference && enabled) + addtimer(CALLBACK(src, PROC_REF(Interference)), 0, TIMER_UNIQUE) + +/obj/structure/holoplant/Crossed(mob/living/L) + if(istype(L)) + doInterference() diff --git a/packs/infinity/structures/l3closets.dm b/packs/infinity/structures/l3closets.dm new file mode 100644 index 0000000000000..f8ec5d5f81f22 --- /dev/null +++ b/packs/infinity/structures/l3closets.dm @@ -0,0 +1,11 @@ +/obj/structure/closet/l3closet/xeno_anom + closet_appearance = /singleton/closet_appearance/bio/science + +/obj/structure/closet/l3closet/xeno_anom/WillContain() + return list( + /obj/item/clothing/suit/bio_suit/anomaly, + /obj/item/clothing/head/bio_hood/anomaly, + /obj/item/clothing/mask/gas/half, + /obj/item/clothing/glasses/science, + /obj/item/clothing/gloves/latex + ) diff --git a/packs/infinity/structures/ladder_mobile.dm b/packs/infinity/structures/ladder_mobile.dm new file mode 100644 index 0000000000000..c84629e98105f --- /dev/null +++ b/packs/infinity/structures/ladder_mobile.dm @@ -0,0 +1,118 @@ +/obj/item/ladder_mobile + name = "mobile ladder" + desc = "A lightweight deployable ladder, which you can use to move up or down. Or alternatively, you can bash some faces in." + icon_state = "mobile_ladder" + item_state = "mobile_ladder" + icon = 'packs/infinity/icons/obj/mobile_ladder.dmi' + throw_range = 3 + force = 10 + w_class = ITEM_SIZE_LARGE + slot_flags = SLOT_BACK + item_icons = list( + slot_l_hand_str = 'packs/infinity/icons/mob/onmob/lefthand.dmi', + slot_r_hand_str = 'packs/infinity/icons/mob/onmob/righthand.dmi', + slot_back_str = 'packs/infinity/icons/mob/onmob/onmob_back.dmi' + ) + +/obj/item/ladder_mobile/proc/place_ladder(atom/A, mob/user) + if(istype(A, /turf/simulated/open)) //Place into open space + var/turf/below_loc = GetBelow(A) + if(!below_loc || (istype(/turf/space, below_loc))) + to_chat(user, SPAN_NOTICE("Why would you do that?! There is only infinite space there...")) + return + user.visible_message( + SPAN_WARNING("[user] begins to lower \the [src] into \the [A]."), + SPAN_WARNING("You begin to lower \the [src] into \the [A].") + ) + if(!handle_action(A, user)) + return + // Create the lower ladder first. ladder/Initialize() will make the upper + // ladder create the appropriate links. So the lower ladder must exist first. + var/obj/structure/ladder/mobile/downer = new(below_loc) + downer.allowed_directions = UP + + new /obj/structure/ladder/mobile(A) + + user.drop_item() + qdel(src) + + else if (istype(A, /turf/simulated/floor)) //Place onto Floor + var/turf/upper_loc = GetAbove(A) + if(!upper_loc || !istype(upper_loc,/turf/simulated/open)) + to_chat(user, SPAN_NOTICE("There is something above. You can't deploy!")) + return + user.visible_message( + SPAN_WARNING("[user] begins deploying \the [src] on \the [A]."), + SPAN_WARNING("You begin to deploy \the [src] on \the [A].") + ) + if(!handle_action(A, user)) + return + // Ditto here. Create the lower ladder first. + var/obj/structure/ladder/mobile/downer = new(A) + downer.allowed_directions = UP + + new /obj/structure/ladder/mobile(upper_loc) + + user.drop_item() + qdel(src) + +/obj/item/ladder_mobile/use_after(atom/A, mob/user) + place_ladder(A, user) + return TRUE + +/obj/item/ladder_mobile/proc/handle_action(atom/A, mob/user) + if(!do_after(user, 30, src)) + to_chat(user, "Can't place ladder! You were interrupted!") + return FALSE + if(!A || QDELETED(src) || QDELETED(user)) + // Shit was deleted during delay, call is no longer valid. + return FALSE + return TRUE + +/obj/structure/ladder/mobile + icon = 'packs/infinity/icons/obj/mobile_ladder.dmi' + +/obj/structure/ladder/mobile/Initialize(mapload, ...) + . = ..() + update_icon() + +/obj/structure/ladder/mobile/on_update_icon() + icon_state = "mobile_ladder[!!(allowed_directions & UP)][!!(allowed_directions & DOWN)]" + +/obj/structure/ladder/mobile/verb/fold() + set name = "Fold Ladder" + set category = "Object" + set src in oview(1) + + if(usr.incapacitated() || !usr.IsAdvancedToolUser() || !ishuman(usr)) + FEEDBACK_FAILURE(usr, "You can't do that right now!") + return + + var/mob/living/carbon/human/H = usr + + H.visible_message( + SPAN_NOTICE("[H] starts folding up [src]."), + SPAN_NOTICE("You start folding up [src].") + ) + + if(!do_after(H, 30, src)) + FEEDBACK_FAILURE(H, "You are interrupted!") + return + + if(QDELETED(src)) + return + + var/obj/item/ladder_mobile/R = new(get_turf(H)) + transfer_fingerprints_to(R) + + H.visible_message( + SPAN_NOTICE("[H] folds [src] up into [R]!"), + SPAN_NOTICE("You fold [src] up into [R]!") + ) + + if(target_down) + QDEL_NULL(target_down) + qdel(src) + else + QDEL_NULL(target_up) + qdel(src) diff --git a/packs/infinity/structures/signs.dm b/packs/infinity/structures/signs.dm new file mode 100644 index 0000000000000..93d6b8b35d19a --- /dev/null +++ b/packs/infinity/structures/signs.dm @@ -0,0 +1,40 @@ +/obj/structure/sign/solgov + name = "\improper SolGov Seal" + desc = "Центральное Правительство Солнечной системы, обычно именуемое ЦПСС, является федеративной республикой, состоящей из многочисленных человеческих государств во многих звездных системах." + icon = 'maps/torch/icons/obj/solgov-decals.dmi' + icon_state = "solgovseal" + +/obj/structure/sign/nanotrasen + name = "\improper Nanotrasen Logo" + desc = "Логотип корпорации будущего. Нано - отражение технологий, Трэйзен - Фамилия генерального директора корпорации." + icon = 'packs/infinity/icons/obj/decals.dmi' + icon_state = "NT" + +/obj/structure/sign/spider_clan + name = "\improper Spider Clan" + desc = "Клан паука - органиазация, в которой обучаются лучшие наемные убийцы изведанного космоса. Вероÿтно, мне повезло, если я знаю это." + icon = 'packs/infinity/icons/obj/decals.dmi' + icon_state = "spider_clan" + +/obj/structure/sign/fifthfleet + name = "\improper Fifth Fleet" + desc = "Недавно созданный, оборудованный и модифицированный Пятый Флот был введен в 2297 г Ассамблеями для того, чтобы действовать как Силы Быстрого Реагирования. Хотя он еще невелик, в Пятый Флот входят одни из самых ярких умов Сил Обороны и оснащен новейшими технологиями." + icon = 'packs/infinity/icons/obj/decals.dmi' + icon_state = "fifthfleet" + +/obj/structure/sign/fifthfleet/small + name = "\improper Fifth Fleet" + desc = "Недавно созданный, оборудованный и модифицированный Пятый Флот был введен в 2297 г Ассамблеями для того, чтобы действовать как Силы Быстрого Реагирования. Хотя он еще невелик, в Пятый Флот входят одни из самых ярких умов Сил Обороны и оснащен новейшими технологиями." + icon = 'packs/infinity/icons/obj/decals.dmi' + icon_state = "fifthfleet_small" + +/singleton/poster/number4 + icon_state = "poster4" + name = "Lusty Xeno Specie" + desc = "An another one poster about some pornsite with potential new sexual xeno species... \ + Who the fuck forget it at the space vessel? May be we haven't enought time with families, but we aren't so mad... \ + Or we are?" + +/obj/structure/sign/poster/number4 + icon_state = "poster4" + poster_type = /singleton/poster/number4 diff --git a/packs/infinity/structures/table_presets.dm b/packs/infinity/structures/table_presets.dm new file mode 100644 index 0000000000000..7b0f052edf523 --- /dev/null +++ b/packs/infinity/structures/table_presets.dm @@ -0,0 +1,38 @@ +/obj/structure/table/wallf/New() + ..() + verbs -= /obj/structure/table/verb/do_flip + verbs -= /obj/structure/table/proc/do_put + +/obj/structure/table/wallf/can_connect() + return FALSE + +/obj/structure/table/wallf/on_update_icon() + if(material) + if(material.icon_colour) + src.color = material.icon_colour + +/obj/structure/table/wallf + icon = 'packs/infinity/icons/obj/tables.dmi' + icon_state = "wallf_regular" + color = COLOR_OFF_WHITE + material = MATERIAL_PLASTIC + reinforced = DEFAULT_WALL_MATERIAL + flipped = -1 + +/obj/structure/table/wallf/can_connect() + return FALSE + +/obj/structure/table/wallf/New() + ..() + verbs -= /obj/structure/table/verb/do_flip + verbs -= /obj/structure/table/proc/do_put + +/obj/structure/table/wallf/steel + color = COLOR_GRAY40 + material = DEFAULT_WALL_MATERIAL + reinforced = DEFAULT_WALL_MATERIAL + +/obj/structure/table/wallf/marble + icon_state = "wallf_marble" + color = COLOR_GRAY80 + material = "marble" diff --git a/packs/sierra-tweaks/_helpers/unsorted.dm b/packs/sierra-tweaks/_helpers/unsorted.dm new file mode 100644 index 0000000000000..f8b6d1ede6035 --- /dev/null +++ b/packs/sierra-tweaks/_helpers/unsorted.dm @@ -0,0 +1,65 @@ +#define CODEX_INTERACTIONS_LIST list(\ + "CODEX_INTERACTION_ALT_CLICK", "CODEX_INTERACTION_ALT_SHIFT_CLICK", "CODEX_INTERACTION_CTRL_CLICK",\ + "CODEX_INTERACTION_CTRL_ALT_CLICK", "CODEX_INTERACTION_CTRL_ALT_SHIFT_CLICK", "CODEX_INTERACTION_CTRL_SHIFT_CLICK",\ + "CODEX_INTERACTION_SHIFT_CLICK", "CODEX_INTERACTION_USE_SELF", "CODEX_INTERACTION_HAND",\ + "CODEX_INTERACTION_ID_CARD", "CODEX_INTERACTION_SCREWDRIVER", "CODEX_INTERACTION_WELDER",\ + "CODEX_INTERACTION_GRAB", "CODEX_INTERACTION_GRAB_PASSIVE", "CODEX_INTERACTION_GRAB_AGGRESSIVE",\ + "CODEX_INTERACTION_GRAB_NECK", "CODEX_INTERACTION_EMAG", "CODEX_INTERACTION_EMP"\ +) + +//Vars that will not be copied when using /DuplicateObjectDeep +GLOBAL_LIST_INIT(duplicate_forbidden_vars, list( + "tag", "datum_components", "area", "type", "loc", "locs", "vars", "parent", "parent_type", "verbs", "ckey", "key", + "power_supply", "contents", "reagents", "stat", "x", "y", "z", "group", "atmos_adjacent_turfs", "comp_lookup", + "important_recursive_contents", "bodyparts", "internal_organs", "hand_bodyparts", "overlays_standing", "hud_list", + "actions", "AIStatus", "appearance", "managed_overlays", "managed_vis_overlays", "computer_id", "lastKnownIP", "implants", + "tgui_shared_states", "overlays", "underlays" +)+CODEX_INTERACTIONS_LIST) + +#undef CODEX_INTERACTIONS_LIST + +#define IS_REF_AND_NOT_SINGLETON(A) ((istype(A, /datum) && !istype(A, /singleton)) || ismob(A) ) + +/proc/DuplicateObjectDeep(atom/original, perfectcopy = TRUE, sameloc, atom/newloc = null) + RETURN_TYPE(original.type) + if(!original) + return + var/atom/O + if(sameloc) + O = new original.type(original.loc) + else + O = new original.type(newloc) + + if(perfectcopy && O && original) + + for(var/V in original.vars - GLOB.duplicate_forbidden_vars) + if(islist(original.vars[V])) + var/skipFlag = FALSE + for (var/key in original.vars[V]) + var/value = original.vars[V][key] + if (IS_REF_AND_NOT_SINGLETON(key) || IS_REF_AND_NOT_SINGLETON(value)) + skipFlag = TRUE + break + if (skipFlag) + continue + var/list/L = original.vars[V] + O.vars[V] = L.Copy() + else if(IS_REF_AND_NOT_SINGLETON(original.vars[V])) + continue // This would reference the original's object, that will break when it is used or deleted + else + O.vars[V] = original.vars[V] + + if(isobj(O)) + var/obj/N = O + N.update_icon() + if(istype(O, /obj/machinery)) + var/obj/machinery/M = O + M.power_change() + + if(ismob(O)) // Overlays are carried over despite disallowing them, if a fix is found remove this + var/mob/M = O + M.ClearOverlays() + M.regenerate_icons() + return O + +#undef IS_REF_AND_NOT_SINGLETON diff --git a/packs/sierra-tweaks/_pack.dm b/packs/sierra-tweaks/_pack.dm new file mode 100644 index 0000000000000..bf78bdc34a19d --- /dev/null +++ b/packs/sierra-tweaks/_pack.dm @@ -0,0 +1,35 @@ +#ifndef CONTENT_PACK_SIERRA_TWEAKS +#define CONTENT_PACK_SIERRA_TWEAKS + +// HELPERS +#include "_helpers\unsorted.dm" + +// Admintools +#include "admintools\bmode_copypaste.dm" +#include "admintools\fun_secrets_lights.dm" + +// Client +#include "client\spawnpoints.dm" + +// Mob +#include "mob\say.dm" +#include "mob\stat.dm" + +// Objects +#include "objects\buckling.dm" +#include "objects\items\fruit_jar.dm" +#include "objects\items\cash.dm" +#include "objects\machines\disposal.dm" +#include "objects\machines\floor_light.dm" +#include "objects\machines\machinery.dm" +#include "objects\machines\recharger.dm" +#include "objects\structures\cargo.dm" +#include "objects\structures\extinguisher_cabinet.dm" +#include "objects\structures\shotgun_rack.dm" +#include "objects\structures\wall_frame.dm" +#include "objects\structures\wallframe_spawner.dm" +#include "objects\structures\utility_closets.dm" +#include "objects\vehicles\cargo_train.dm" +#include "objects\vehicles\train.dm" +#include "objects\vehicles\vehicle.dm" +#endif diff --git a/packs/sierra-tweaks/admintools/bmode_copypaste.dm b/packs/sierra-tweaks/admintools/bmode_copypaste.dm new file mode 100644 index 0000000000000..c9209fbdde652 --- /dev/null +++ b/packs/sierra-tweaks/admintools/bmode_copypaste.dm @@ -0,0 +1,32 @@ +/datum/build_mode/copypaste + name = "Copy & Paste" + icon_state = "mode_copypaste" + var/datum/stored + +/datum/build_mode/copypaste/Help() + to_chat(usr, SPAN_NOTICE("***** Build Mode: Copy & Paste ******")) + to_chat(usr, SPAN_NOTICE("Left Mouse Button on obj/turf/mob - Spawn a Copy of selected target")) + to_chat(usr, SPAN_NOTICE("Right Mouse Button on obj/mob - Select target to copy")) + to_chat(usr, SPAN_NOTICE("************************************")) + +/datum/build_mode/copypaste/Destroy() + stored = null + return ..() + +/datum/build_mode/copypaste/proc/get_location(atom/A) + return "[A.loc.name]([A.x],[A.y],[A.z]) (JMP)" + +/datum/build_mode/copypaste/OnClick(atom/object, params) + var/list/modifiers = params2list(params) + if(LAZYACCESS(modifiers, LEFT_CLICK)) + var/turf/T = get_turf(object) + if(stored) + DuplicateObjectDeep(stored, perfectcopy=1, sameloc=0, newloc=T) + log_and_message_admins("Build Mode: [usr.ckey] copied [stored] ([stored.type]) to [get_location(T)]") + to_chat(SPAN_NOTICE("Successfully copied [stored] ([stored.type]) to [T.loc.name]!")) + else + to_chat(usr, SPAN_DANGER("No template! You have to select something using RMB.")) + if (LAZYACCESS(modifiers, RIGHT_CLICK)) + if(ismovable(object)) // No copying turfs + to_chat(usr, SPAN_NOTICE("[object] ([object.type]) set as template.")) + stored = object diff --git a/packs/sierra-tweaks/admintools/fun_secrets_lights.dm b/packs/sierra-tweaks/admintools/fun_secrets_lights.dm new file mode 100644 index 0000000000000..943bfaf523592 --- /dev/null +++ b/packs/sierra-tweaks/admintools/fun_secrets_lights.dm @@ -0,0 +1,48 @@ +/datum/admin_secret_item/fun_secret/break_all_lights/execute(mob/user) + + var/choice = input("Which lights to break?") in list("Changed my mind", "My area", "My Z-Level", "Station", "All lights") + switch(choice) + if ("My area") + var/area/usr_area = get_area(user) + if (!usr_area) return to_chat(user, SPAN_DANGER("Invalid area!")) + for (var/obj/machinery/power/apc/apc in usr_area) + apc.overload_lighting() + + if ("My Z-Level") + var/user_z = get_z(user) + if (!user_z) return to_chat(user, SPAN_DANGER("Invalid Z-Level!")) + for (var/obj/machinery/power/apc/apc as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/apc)) + if (apc.z == user_z) apc.overload_lighting() + + if ("Station") + for (var/obj/machinery/power/apc/apc as anything in SSmachines.get_machinery_of_type(/obj/machinery/power/apc)) + if (apc.z in GLOB.using_map.station_levels) + apc.overload_lighting() + + if ("All lights") + lightsout(0, 0) + +/datum/admin_secret_item/fun_secret/fix_all_lights/execute(mob/user) + + var/choice = input("Which lights to fix?") in list("Changed my mind", "My area", "My Z-Level", "Station", "All lights") + switch(choice) + if ("My area") + var/area/usr_area = get_area(user) + if (!usr_area) return to_chat(user, SPAN_DANGER("Invalid area!")) + for (var/obj/machinery/light/light in usr_area) + light.fix() + + if ("My Z-Level") + var/user_z = get_z(user) + if (!user_z) return to_chat(user, SPAN_DANGER("Invalid Z-Level!")) + for (var/obj/machinery/light/light as anything in SSmachines.get_machinery_of_type(/obj/machinery/light)) + if (light.z == user_z) light.fix() + + if ("Station") + for (var/obj/machinery/light/light as anything in SSmachines.get_machinery_of_type(/obj/machinery/light)) + if (light.z in GLOB.using_map.station_levels) + light.fix() + + if ("All lights") + for (var/obj/machinery/light/light as anything in SSmachines.get_machinery_of_type(/obj/machinery/light)) + light.fix() diff --git a/packs/sierra-tweaks/client/spawnpoints.dm b/packs/sierra-tweaks/client/spawnpoints.dm new file mode 100644 index 0000000000000..0c7531674974a --- /dev/null +++ b/packs/sierra-tweaks/client/spawnpoints.dm @@ -0,0 +1,103 @@ +/datum/spawnpoint/cryo/after_join(mob/living/victim) + if(!istype(victim)) + return + var/area/A = get_area(victim) + var/list/spots = list() + + for(var/obj/machinery/cryopod/C in A) + if(!C.occupant) + spots += C + + if(!length(spots)) + to_chat(victim, "Вы проснулись чуть раньше остальных.") + turfs -= get_turf(victim) + return + + for(var/obj/machinery/cryopod/C in shuffle(spots)) + if(!C.occupant) + C.set_occupant(victim, 1) + to_chat(victim, SPAN_NOTICE("Вы пробуждаетесь от крио-сна. Это может занять пару секунд")) + if (istype(victim, /mob/living/carbon)) + var/mob/living/carbon/H = victim + H.bodytemperature = H.species.cold_level_1 // Very cold, but a point before damage + + if(!victim.isSynthetic()) + to_chat(victim, SPAN_NOTICE("Вы чувствуете озноб и капли воды на себе. Криогенная жидкость только \ + прекратила охлаждать атмосферу внутри капсулы... Сквозь веки бьёт яркий свет, пытаясь заставить проснуться. \ + Похоже, смена начинается.")) + else + to_chat(victim, SPAN_NOTICE("Получен сигнал к пробуждению. Батарея заряжена. Все системы в норме.")) + + if(!victim.isSynthetic()) + give_effect(victim) + give_advice(victim) + + break + +/datum/spawnpoint/cryo/proc/give_effect(mob/living/carbon/human/H) + var/message = "" + + if(prob(5)) + H.make_dizzy(50) + + if(prob(10)) + message += SPAN_WARNING("В ушках звон, в голове белый шум... ") + H.hallucination(30, 30) + + if(prob(5)) + message += SPAN_DANGER("Вы чувствуете ужасающий холод во всём теле! Крио всё ещё охлаждает! ") + H.bodytemperature = H.species.cold_level_2 + + if(prob(5)) + message += SPAN_WARNING("Вы долго не могли уснуть, не смотря на все усилия этой машины. \ + Так не хочется вставать... Ноги ватные, руки тяжелые... ") + + if(prob(20)) + message += SPAN_WARNING("Кажется, вы забыли поесть перед тем, как уйти в сон. Горло пересохло, а \ + живот скрутило в спазме. ") + H.nutrition = rand(0,200) + H.hydration = rand(0,200) + if(H.species.name == SPECIES_UNATHI) + H.nutrition = rand(100,200) + + if(prob(10)) + message += SPAN_WARNING("Трясет от холода. ") + H.make_jittery(120) + H.stuttering = 20 + + if(prob(5)) + message += SPAN_WARNING("Тошнит... ") + H.vomit() + + if(!message) + message += SPAN_NOTICE("Кажется, в этот раз без осложнений... Правда, выспаться в саркофаге всё равно не удалось.") + else + message += SPAN_WARNING("Не удалось даже нормально выспаться в этом гробу...") + + to_chat(H, message) + return TRUE + +/datum/spawnpoint/cryo/proc/give_advice(mob/H) + var/desc = pick( + SPAN_NOTICE("Вы чувствуете себя нормально. Не смотря на капсулу, хочется покушать и заняться работой."), + SPAN_NOTICE("Вы чувствуете усталость. Вас всё ещё немного клонит в сон..."), + SPAN_NOTICE("Вы уверены в себе. Надо держаться в тонусе и не унывать - если не вы, то никто."), + SPAN_NOTICE("Вы чувствуете привкус железа во рту. К чему бы это..."), + SPAN_NOTICE("У вас лёгкое головокружение. Типичное пробуждение..."), + SPAN_NOTICE("Вы чувствуете себя грязно. В прямом смысле. Нужно будет посетить душ..."), + SPAN_NOTICE("Этот запах... Криогенная жидкость. Жжёт в носу."), + SPAN_NOTICE("Вы что-то забыли. Вы точно что-то хотели сделать в эту смену, но не помните что..."), + SPAN_NOTICE("Вы чувствуете слабость. Возможно, это из-за влияния космоса... Может, стоит посетить спортзал?"), + SPAN_NOTICE("Вы практически не помните, что происходило в вашей прошлой смене... Это странно."), + SPAN_NOTICE("Хочется чего-то вкусного и необычного..."), + SPAN_NOTICE("Хм... А мне точно не должны платить больше за то, что я делаю в этой дыре?"), + SPAN_NOTICE("Этот космос совсем доканает... Может, стоит запить всё это в баре?"), + SPAN_NOTICE("Может, стоит разыграть кого-нибудь? Это будет забавно."), + SPAN_WARNING("Вы чувствуете раздражение и лёгкую обиду. Криокапсула, теснота корабля, задержки с едой... Впрочем, это довольно легко побороть."), + SPAN_WARNING("Вы чувствуете лёгкую тревогу. В этой смене что-то произойдет..."), + SPAN_WARNING("У вас затекли конечности. И как только заснули в такой неудобной позе..."), + SPAN_WARNING("Вы чувствуете лёгкий испуг. Как будто снилось что-то плохое...")) + + to_chat(H, desc) + + return TRUE diff --git a/packs/sierra-tweaks/icons/machinery/floor_light.dmi b/packs/sierra-tweaks/icons/machinery/floor_light.dmi new file mode 100644 index 0000000000000..5391662d5bf0d Binary files /dev/null and b/packs/sierra-tweaks/icons/machinery/floor_light.dmi differ diff --git a/packs/sierra-tweaks/icons/machinery/ship_transponder.dmi b/packs/sierra-tweaks/icons/machinery/ship_transponder.dmi new file mode 100644 index 0000000000000..ec1abb473e39f Binary files /dev/null and b/packs/sierra-tweaks/icons/machinery/ship_transponder.dmi differ diff --git a/packs/sierra-tweaks/icons/obj/cart.dmi b/packs/sierra-tweaks/icons/obj/cart.dmi new file mode 100644 index 0000000000000..6b7b80483e988 Binary files /dev/null and b/packs/sierra-tweaks/icons/obj/cart.dmi differ diff --git a/packs/sierra-tweaks/icons/obj/extinguisher.dmi b/packs/sierra-tweaks/icons/obj/extinguisher.dmi new file mode 100644 index 0000000000000..5b3acbd0fc5f4 Binary files /dev/null and b/packs/sierra-tweaks/icons/obj/extinguisher.dmi differ diff --git a/packs/sierra-tweaks/icons/obj/shotgunrack.dmi b/packs/sierra-tweaks/icons/obj/shotgunrack.dmi new file mode 100644 index 0000000000000..9483b59d8bfe8 Binary files /dev/null and b/packs/sierra-tweaks/icons/obj/shotgunrack.dmi differ diff --git a/packs/sierra-tweaks/icons/obj/storage.dmi b/packs/sierra-tweaks/icons/obj/storage.dmi new file mode 100644 index 0000000000000..ad510de9edf80 Binary files /dev/null and b/packs/sierra-tweaks/icons/obj/storage.dmi differ diff --git a/packs/sierra-tweaks/mob/say.dm b/packs/sierra-tweaks/mob/say.dm new file mode 100644 index 0000000000000..f78c9d3e2d960 --- /dev/null +++ b/packs/sierra-tweaks/mob/say.dm @@ -0,0 +1,20 @@ +/// Transforms the speech emphasis mods from [/atom/movable/proc/say_emphasis] into the appropriate HTML tags. Includes escaping. +#define ENCODE_HTML_EMPHASIS(input, char, html, varname) \ + var/static/regex/##varname = regex("(?$1") + +/// Scans the input sentence for speech emphasis modifiers, notably `_italics_` and `+bold+` +/mob/proc/say_emphasis(input) + ENCODE_HTML_EMPHASIS(input, "_", "i", italics) + ENCODE_HTML_EMPHASIS(input, "\\+", "b", bold) + var/static/regex/remove_escape_backlashes = regex("\\\\(_|\\+)", "g") // Removes backslashes used to escape text modification. + input = remove_escape_backlashes.Replace_char(input, "$1") + return input + +#undef ENCODE_HTML_EMPHASIS + +/mob/living/format_say_message(message) + return say_emphasis(..()) + +/mob/format_emote(emoter, message) + return say_emphasis(..()) diff --git a/packs/sierra-tweaks/mob/stat.dm b/packs/sierra-tweaks/mob/stat.dm new file mode 100644 index 0000000000000..c282e56a5846a --- /dev/null +++ b/packs/sierra-tweaks/mob/stat.dm @@ -0,0 +1,8 @@ +/mob/Stat() + ..() + . = (is_client_active(5 MINUTES)) + if (!.) + return + + if(statpanel("Status")) + stat("Round ID", game_id) diff --git a/packs/sierra-tweaks/objects/buckling.dm b/packs/sierra-tweaks/objects/buckling.dm new file mode 100644 index 0000000000000..580188191a0f0 --- /dev/null +++ b/packs/sierra-tweaks/objects/buckling.dm @@ -0,0 +1,26 @@ +/obj/buckle_mob(mob/living/M) + if (M.buckled) + return FALSE + // Additional check not covered can_buckle(), due to attempting to buckle allowing you to move an adjacent target to the object. + if (M.loc != loc) + return FALSE + if(ismob(src)) + var/mob/living/carbon/C = src //Don't wanna forget the xenos. + if(M != src && C.incapacitated()) + return 0 + + M.buckled = src + M.facing_dir = null + M.set_dir(buckle_dir ? buckle_dir : dir) + M.UpdateLyingBuckledAndVerbStatus() + M.update_floating() + M.pixel_x = initial(M.pixel_x) + M.pixel_y = initial(M.pixel_y) + buckled_mob = M + GLOB.destroyed_event.register(buckled_mob, src, TYPE_PROC_REF(/obj, clear_buckle)) + if (buckle_sound) + playsound(src, buckle_sound, 20) + post_buckle_mob(M) + // SIERRA TODO: alerts + // M.throw_alert("buckled", /obj/screen/alert/restrained/buckled) + return TRUE diff --git a/packs/sierra-tweaks/objects/items/cash.dm b/packs/sierra-tweaks/objects/items/cash.dm new file mode 100644 index 0000000000000..c639f1a495382 --- /dev/null +++ b/packs/sierra-tweaks/objects/items/cash.dm @@ -0,0 +1,17 @@ +/obj/item/spacecash/bundle/c2500 + name = "2500 Thaler" + icon_state = "spacecash1000" + desc = "It's worth 2500 Thalers." + worth = 2500 + +/obj/item/spacecash/bundle/c5000 + name = "5000 Thaler" + icon_state = "spacecash1000" + desc = "It's worth 5000 Thalers." + worth = 5000 + +/obj/item/spacecash/bundle/c10000 + name = "10000 Thaler" + icon_state = "spacecash1000" + desc = "It's worth 10000 Thalers." + worth = 10000 diff --git a/packs/sierra-tweaks/objects/items/fruit_jar.dm b/packs/sierra-tweaks/objects/items/fruit_jar.dm new file mode 100644 index 0000000000000..2f68205ae3ec8 --- /dev/null +++ b/packs/sierra-tweaks/objects/items/fruit_jar.dm @@ -0,0 +1,31 @@ +/obj/item/storage/bar_fruit_jar + name = "Fruit jar" + desc = "Jar with fresh fruit. They are definitely edible and never plastic." + icon = 'packs/sierra-tweaks/icons/obj/storage.dmi' + icon_state = "fruitjar" + max_storage_space = 20 + startswith = list( + /obj/item/reagent_containers/food/snacks/grown/apple = 2, + /obj/item/reagent_containers/food/snacks/grown/orange = 2, + /obj/item/reagent_containers/food/snacks/grown/lime = 2, + /obj/item/reagent_containers/food/snacks/grown/lemon = 2 + ) + +/obj/item/storage/bar_fruit_jar/on_update_icon() + . = ..() + if(length(contents)) + icon_state = "fruitjar" + else + icon_state = "fruitjar_empty" + +/obj/item/reagent_containers/food/snacks/grown/apple + plantname = "apple" + +/obj/item/reagent_containers/food/snacks/grown/orange + plantname = "orange" + +/obj/item/reagent_containers/food/snacks/grown/lime + plantname = "lime" + +/obj/item/reagent_containers/food/snacks/grown/lemon + plantname = "lemon" diff --git a/packs/sierra-tweaks/objects/machines/disposal.dm b/packs/sierra-tweaks/objects/machines/disposal.dm new file mode 100644 index 0000000000000..a1b5fb08b663a --- /dev/null +++ b/packs/sierra-tweaks/objects/machines/disposal.dm @@ -0,0 +1,34 @@ +/obj/machinery/disposal/interact(mob/user) + + src.add_fingerprint(user) + if(MACHINE_IS_BROKEN(src)) + user.unset_machine() + return + + var/ai = isAI(user) + var/dat = "" + + if(!ai) // AI can't pull flush handle + if(flush) + dat += "Disposal handle: Disengage Engaged" + else + dat += "Disposal handle: Disengaged Engage" + + dat += "

    Eject contents
    " + + if(mode <= 0) + dat += "Pump: Off On
    " + else if(mode == 1) + dat += "Pump: Off On (pressurizing)
    " + else + dat += "Pump: Off On (idle)
    " + + var/per = 100* air_contents.return_pressure() / (SEND_PRESSURE) + + dat += "Pressure: [round(per, 1)]%
    " + + + user.set_machine(src) + var/datum/browser/popup = new(user, "disposal", "Waste Disposal Unit", 360, 170) + popup.set_content(dat) + popup.open() diff --git a/packs/sierra-tweaks/objects/machines/floor_light.dm b/packs/sierra-tweaks/objects/machines/floor_light.dm new file mode 100644 index 0000000000000..448022bcf58de --- /dev/null +++ b/packs/sierra-tweaks/objects/machines/floor_light.dm @@ -0,0 +1,10 @@ +/obj/machinery/floor_light + icon = 'packs/sierra-tweaks/icons/machinery/floor_light.dmi' + +/obj/machinery/floor_light/multitool_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + var/new_colour = input(usr, "Choose a colour.", "light color", default_light_colour) as color|null + if(new_colour && new_colour != default_light_colour) + default_light_colour = new_colour + update_icon() + to_chat(usr, SPAN_NOTICE("You set \the [src] to shine with a new colour.")) diff --git a/packs/sierra-tweaks/objects/machines/machinery.dm b/packs/sierra-tweaks/objects/machines/machinery.dm new file mode 100644 index 0000000000000..6618886253cf8 --- /dev/null +++ b/packs/sierra-tweaks/objects/machines/machinery.dm @@ -0,0 +1,2 @@ +/obj/machinery/dummy_airlock_controller + anchored = TRUE diff --git a/packs/sierra-tweaks/objects/machines/recharger.dm b/packs/sierra-tweaks/objects/machines/recharger.dm new file mode 100644 index 0000000000000..7a7e0d0e1f9a3 --- /dev/null +++ b/packs/sierra-tweaks/objects/machines/recharger.dm @@ -0,0 +1,3 @@ +/obj/machinery/recharger/Initialize() + . = ..() + allowed_devices += /obj/item/music_player diff --git a/packs/sierra-tweaks/objects/structures/cargo.dm b/packs/sierra-tweaks/objects/structures/cargo.dm new file mode 100644 index 0000000000000..954bb64ddf053 --- /dev/null +++ b/packs/sierra-tweaks/objects/structures/cargo.dm @@ -0,0 +1,227 @@ +/obj/structure/cart + name = "Cargo cart" + desc = "Brand-new cart for heavy things. you can see little logo of NT on the back side." + icon = 'packs/sierra-tweaks/icons/obj/cart.dmi' + icon_state = "cart" + layer = STRUCTURE_LAYER + density = FALSE + w_class = ITEM_SIZE_LARGE + var/haswheels = FALSE + var/cargoweight = 0 + var/atom/movable/load = null + +/obj/structure/cart/Move() + . = ..() + if(load && !istype(load, /datum/vehicle_dummy_load)) + load.set_glide_size(src.glide_size) + load.forceMove(src.loc) + var/todir = src.dir + if(istype(load, /obj/structure/closet/crate)) + todir = turn(src.dir, 90) + load.set_dir(todir) + + var/sound + if(haswheels) + sound = pick(list( + 'packs/sierra-tweaks/sound/effects/cart1.ogg', + 'packs/sierra-tweaks/sound/effects/cart2.ogg', + 'packs/sierra-tweaks/sound/effects/cart3.ogg' + )) + else + sound = pick(list( + 'sound/effects/metalscrape1.ogg', + 'sound/effects/metalscrape2.ogg', + 'sound/effects/metalscrape3.ogg' + )) + + playsound(src, sound, 50, 1, 10) + + +/obj/structure/cart/MouseDrop_T(atom/movable/cargo, mob/user) + if (!istype(user)) + return + + if(!CanPhysicallyInteract(user) || !user.Adjacent(cargo) || !istype(cargo) || (user == cargo)) + return + + if(haswheels) + USE_FEEDBACK_FAILURE("You can't load the cart unless wheels are folded!") + return + + if(do_after(user, 2 SECONDS, src, DO_DEFAULT | DO_TARGET_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) + if(!load(cargo)) + USE_FEEDBACK_FAILURE("You are unable to load [cargo] on [src]") + return + density = TRUE + + +/obj/structure/cart/attack_hand(mob/user) + if (!istype(user)) + return FALSE + + if(user.stat || user.restrained() || !Adjacent(user)) + return FALSE + + if(!load) + return FALSE + + if(haswheels) + USE_FEEDBACK_FAILURE("You must fold the wheels to unload the cart!") + return + + if(do_after(user, 2 SECONDS, src, DO_DEFAULT | DO_TARGET_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) + unload(user) + + return ..() + +/obj/structure/cart/verb/turn_wheels() + set name = "Release wheels" + set category = "Object" + set src in view(1) + + if(usr.stat || !Adjacent(usr)) + return + + if(!istype(usr, /mob/living/carbon)) + return + + var/wheelstat = haswheels ? "folded" : "released" + usr.visible_message(SPAN_NOTICE("[usr] [wheelstat] wheels on [src]"), SPAN_NOTICE("You have [wheelstat] wheels.")) + desc = initial(desc) + desc += "\nNow the wheels are [wheelstat]." + haswheels = !haswheels + +/obj/structure/cart/CtrlAltClick(mob/user) + . = ..() + turn_wheels() + +/obj/structure/cart/proc/load(atom/movable/cargo) + if(ismob(cargo)) + return FALSE + if(!(istype(cargo, /obj/machinery) || istype(cargo, /obj/structure/closet) || istype(cargo, /obj/structure/largecrate) || istype(cargo, /obj/structure/ore_box))) + return FALSE + + //if there are any items you don't want to be able to interact with, add them to this check + // ~no more shielded, emitter armed death trains + if(!isturf(cargo.loc)) //To prevent loading things from someone's inventory, which wouldn't get handled properly. + return FALSE + if(load || cargo.anchored) + return FALSE + + if(istype(cargo, /obj/machinery)) + load_object(cargo) + else + // if a create/closet, close before loading + var/obj/structure/closet/crate = cargo + if(istype(crate) && crate.opened && !crate.close()) + return FALSE + + cargo.forceMove(loc) + cargo.anchored = TRUE + + load = cargo + + cargo.plane = plane + cargo.layer = OBJ_LAYER + + if(!istype(cargo, /obj/structure/closet/crate)) + cargo.pixel_y += 6 + cargo.set_dir(dir) + else + cargo.set_dir(turn(dir, 90)) + + if(load) + var/obj/object_on_cart = load + if(istype(load, /datum/vehicle_dummy_load)) + var/datum/vehicle_dummy_load/dummy = load + object_on_cart = dummy.actual_load + cargoweight = clamp(object_on_cart.w_class, 0, ITEM_SIZE_GARGANTUAN) + return TRUE + return FALSE + +/obj/structure/cart/proc/load_object(atom/movable/cargo) + var/datum/vehicle_dummy_load/dummy_load = new() + load = dummy_load + + if(!load) + return + + dummy_load.actual_load = cargo + cargo.forceMove(src) + + // SIERRA TODO: Мне не нравится эта херня. + // Надо посмотреть можно ли сделать через appearance или подобное. + // То есть у объекта меняются значения, создаётся оверлей и значения возвращаются на место. + // Кринж. + cargo.pixel_y += 6 + cargo.plane = plane + cargo.layer = OBJ_LAYER + + AddOverlays(cargo) + + //we can set these back now since we have already cloned the icon into the overlay + cargo.pixel_y = initial(cargo.pixel_y) + cargo.reset_plane_and_layer() + +/obj/structure/cart/proc/unload(mob/user, direction) + if(istype(load, /datum/vehicle_dummy_load)) + var/datum/vehicle_dummy_load/dummy_load = load + load = dummy_load.actual_load + dummy_load.actual_load = null + qdel(dummy_load) + ClearOverlays() + + if(!load) + return + + var/turf/dest = null + + //find a turf to unload to + if(direction) //if direction specified, unload in that direction + dest = get_step(src, direction) + else if(user) //if a user has unloaded the vehicle, unload at their feet + dest = get_turf(user) + + if(!dest) + dest = get_step_to(src, get_step(src, turn(dir, 90))) //try unloading to the side of the vehicle first if neither of the above are present + + //if these all result in the same turf as the vehicle or nullspace, pick a new turf with open space + if(!dest || dest == get_turf(src)) + var/list/options = list() + for(var/test_dir in GLOB.alldirs) + var/possible_turf = get_step_to(src, get_step(src, test_dir)) + if(!possible_turf) + continue + options += possible_turf + if(length(options)) + dest = pick(options) + else + dest = get_turf(src) //otherwise just dump it on the same turf as the vehicle + + if(!isturf(dest)) //if there still is nowhere to unload, cancel out since the vehicle is probably in nullspace + return FALSE + + load.forceMove(dest) + load.set_dir(get_dir(loc, dest)) + load.anchored = FALSE //we can only load non-anchored items, so it makes sense to set this to false + load.pixel_y = initial(load.pixel_y) + load.reset_plane_and_layer() + + cargoweight = 0 + load = null + + density = FALSE + + update_icon() + + return TRUE + +// SIERRA TODO: Port to Bay12 +// /obj/structure/cart/get_additional_speed_decrease() +// . = ..() +// if (haswheels) +// return 0.1 + +/datum/codex_entry/cargo_cart + associated_paths = list(/obj/structure/cart) + mechanics_text = "To change wheel state you need to press Alt+Ctrl+LMB." diff --git a/packs/sierra-tweaks/objects/structures/extinguisher_cabinet.dm b/packs/sierra-tweaks/objects/structures/extinguisher_cabinet.dm new file mode 100644 index 0000000000000..4dced3cc8ee8d --- /dev/null +++ b/packs/sierra-tweaks/objects/structures/extinguisher_cabinet.dm @@ -0,0 +1,2 @@ +/obj/structure/extinguisher_cabinet + icon = 'packs/sierra-tweaks/icons/obj/extinguisher.dmi' diff --git a/packs/sierra-tweaks/objects/structures/shotgun_rack.dm b/packs/sierra-tweaks/objects/structures/shotgun_rack.dm new file mode 100644 index 0000000000000..298eb79e20442 --- /dev/null +++ b/packs/sierra-tweaks/objects/structures/shotgun_rack.dm @@ -0,0 +1,86 @@ +/obj/structure/shotgun_rack + name = "shotgun rack" + desc = "A wooden rack designated to store shotguns." + icon = 'packs/sierra-tweaks/icons/obj/shotgunrack.dmi' + icon_state = "shotgun_rack" + anchored = TRUE + density = FALSE + var/locked = FALSE + + var/obj/item/gun/projectile/shotgun/rack_shotgun + +/obj/structure/shotgun_rack/use_tool(obj/item/tool, mob/user, list/click_params) + if(isrobot(user)) + return ..() + + if(istype(tool, /obj/item/card/id)) + if(allowed(usr)) + locked = !locked + to_chat(user, "[src]'s lock was [locked ? "enabled" : "disabled"].") + else + to_chat(user, "[src]'s card reader denied you.") + return TRUE + + if(istype(tool, /obj/item/gun/projectile/shotgun) && tool.w_class != ITEM_SIZE_NORMAL) //w_class check is to stop people from placing a sawn off shotgun here + if(!locked) + if(!rack_shotgun) + user.unEquip(tool) + tool.forceMove(src) + rack_shotgun = tool + to_chat(user, SPAN_NOTICE("You place \the [tool] in \the [src].")) + icon_state = "shotgun_rack_[tool.icon_state]" + return TRUE + return ..() + +/obj/structure/shotgun_rack/attack_hand(mob/user) + add_fingerprint(user) + if(isrobot(user)) + return + + if(!locked) + if(rack_shotgun) + user.put_in_hands(rack_shotgun) + to_chat(user, SPAN_NOTICE("You take \the [rack_shotgun] from \the [src].")) + rack_shotgun = null + icon_state = "shotgun_rack" + else + to_chat(user, "[rack_shotgun] is locked.") + + +/obj/structure/shotgun_rack/do_simple_ranged_interaction(mob/user) + if(!locked) + if(rack_shotgun) + rack_shotgun.forceMove(loc) + to_chat(user, SPAN_NOTICE("You telekinetically remove \the [rack_shotgun] from \the [src].")) + rack_shotgun = null + icon_state = "shotgun_rack" + else + to_chat(user, "[rack_shotgun] is locked.") + +/obj/structure/shotgun_rack/double + icon_state = "shotgun_rack_dshotgun" + +/obj/structure/shotgun_rack/double/Initialize() + . = ..() + rack_shotgun = new/obj/item/gun/projectile/shotgun/doublebarrel(src) + +/obj/structure/shotgun_rack/double_pellet + icon_state = "shotgun_rack_dshotgun" + +/obj/structure/shotgun_rack/double_pellet/Initialize() + . = ..() + rack_shotgun = new/obj/item/gun/projectile/shotgun/doublebarrel/pellet(src) + +/obj/structure/shotgun_rack/pump + icon_state = "shotgun_rack_shotgun" + +/obj/structure/shotgun_rack/pump/Initialize() + . = ..() + rack_shotgun = new /obj/item/gun/projectile/shotgun/pump(src) + +/obj/structure/shotgun_rack/combat + icon_state = "shotgun_rack_cshotgun" + +/obj/structure/shotgun_rack/combat/Initialize() + . = ..() + rack_shotgun = new /obj/item/gun/projectile/shotgun/pump/combat(src) diff --git a/packs/sierra-tweaks/objects/structures/utility_closets.dm b/packs/sierra-tweaks/objects/structures/utility_closets.dm new file mode 100644 index 0000000000000..5edeb2664b075 --- /dev/null +++ b/packs/sierra-tweaks/objects/structures/utility_closets.dm @@ -0,0 +1,3 @@ +/obj/structure/closet/emcloset/anchored + name = "anchored emergency closet" + anchored = TRUE diff --git a/packs/sierra-tweaks/objects/structures/wall_frame.dm b/packs/sierra-tweaks/objects/structures/wall_frame.dm new file mode 100644 index 0000000000000..1c302140e1f50 --- /dev/null +++ b/packs/sierra-tweaks/objects/structures/wall_frame.dm @@ -0,0 +1,12 @@ +/obj/structure/wall_frame/hitby(atom/movable/AM, datum/thrownthing/TT) + ..() + var/tforce = 0 + if(ismob(AM)) // All mobs have a multiplier and a size according to mob_defines.dm + var/mob/I = AM + tforce = I.mob_size * (TT.speed/THROWFORCE_SPEED_DIVISOR) + if (isobj(AM)) + var/obj/O = AM + tforce = O.throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) + if (tforce < 15) + return + damage_health(tforce, DAMAGE_BRUTE) diff --git a/packs/sierra-tweaks/objects/structures/wallframe_spawner.dm b/packs/sierra-tweaks/objects/structures/wallframe_spawner.dm new file mode 100644 index 0000000000000..ea55f9c24669f --- /dev/null +++ b/packs/sierra-tweaks/objects/structures/wallframe_spawner.dm @@ -0,0 +1,21 @@ +/obj/structure/wall_frame/wood + paint_color = "#78523b" + +/obj/structure/wall_frame/voxalloy + paint_color = "#6c7364" + +/obj/structure/wall_frame/crystal + paint_color = COLOR_PALE_BLUE_GRAY + +/obj/wallframe_spawn/reinforced/wood + name = "reinforced wooden wall frame window spawner" + icon_state = "r-wingrille" + frame_path = /obj/structure/wall_frame/wood + +/obj/wallframe_spawn/reinforced/voxalloy + name = "reinforced voxalloy wall frame window spawner" + frame_path = /obj/structure/wall_frame/voxalloy + +/obj/wallframe_spawn/reinforced/crystal + name = "reinforced crystal wall frame window spawner" + frame_path = /obj/structure/wall_frame/crystal diff --git a/packs/sierra-tweaks/objects/vehicles/cargo_train.dm b/packs/sierra-tweaks/objects/vehicles/cargo_train.dm new file mode 100644 index 0000000000000..9eb61c225a691 --- /dev/null +++ b/packs/sierra-tweaks/objects/vehicles/cargo_train.dm @@ -0,0 +1,377 @@ +/obj/vehicle/train/cargo/engine + name = "cargo train tug" + desc = "A ridable electric car designed for pulling cargo trolleys." + icon = 'icons/obj/vehicles.dmi' + icon_state = "cargo_engine" + on = 0 + powered = 1 + locked = 0 + + load_item_visible = 1 + load_offset_x = 0 + buckle_pixel_shift = list(0, 0, 7) + + var/car_limit = 3 //how many cars an engine can pull before performance degrades + charge_use = 1 KILOWATTS + active_engines = 1 + var/obj/item/key/cargo_train/key + +/obj/item/key/cargo_train + name = "key" + desc = "A keyring with a small steel key, and a yellow fob reading \"Choo Choo!\"." + icon = 'icons/obj/vehicles.dmi' + icon_state = "train_keys" + w_class = ITEM_SIZE_TINY + +/obj/vehicle/train/cargo/trolley + name = "cargo train trolley" + icon = 'icons/obj/vehicles.dmi' + icon_state = "cargo_trailer" + anchored = FALSE + passenger_allowed = 0 + locked = 0 + + load_item_visible = 1 + load_offset_x = 0 + load_offset_y = 4 + buckle_pixel_shift = list(0, 0, 8) + +//------------------------------------------- +// Standard procs +//------------------------------------------- +/obj/vehicle/train/cargo/engine/New() + ..() + cell = new /obj/item/cell/high(src) + key = new(src) + var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay") + I.plane = plane + I.layer = layer + AddOverlays(I) + turn_off() //so engine verbs are correctly set + +/obj/vehicle/train/cargo/engine/Move(turf/destination) + if(on && cell.charge < (charge_use * CELLRATE)) + turn_off() + update_stats() + if(load && is_train_head()) + to_chat(load, "The drive motor briefly whines, then drones to a stop.") + + if(is_train_head() && !on) + return 0 + + //space check ~no flying space trains sorry + if(on && istype(destination, /turf/space)) + return 0 + + return ..() + +/obj/vehicle/train/cargo/trolley/wirecutter_act(mob/living/user, obj/item/tool) + if(!open) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + passenger_allowed = !passenger_allowed + user.visible_message(SPAN_NOTICE("[user] [passenger_allowed ? "cuts" : "mends"] a cable in [src]."), SPAN_NOTICE("You [passenger_allowed ? "cut" : "mend"] the load limiter cable.")) + +/obj/vehicle/train/cargo/engine/use_tool(obj/item/tool, mob/user, list/click_params) + if(istype(tool, /obj/item/key/cargo_train)) + if(!key) + if(!user.unEquip(tool, src)) + return TRUE + key = tool + verbs += /obj/vehicle/train/cargo/engine/verb/remove_key + return TRUE + return ..() + +//cargo trains are open topped, so there is a chance the projectile will hit the mob ridding the train instead +/obj/vehicle/train/cargo/bullet_act(obj/item/projectile/Proj) + if(buckled_mob && prob(70)) + buckled_mob.bullet_act(Proj) + return + ..() + +/obj/vehicle/train/cargo/on_update_icon() + if(open) + icon_state = initial(icon_state) + "_open" + else + icon_state = initial(icon_state) + +/obj/vehicle/train/cargo/trolley/insert_cell(obj/item/cell/C, mob/living/carbon/human/H) + return + +/obj/vehicle/train/cargo/engine/insert_cell(obj/item/cell/C, mob/living/carbon/human/H) + ..() + update_stats() + +/obj/vehicle/train/cargo/engine/remove_cell(mob/living/carbon/human/H) + ..() + update_stats() + +/obj/vehicle/train/cargo/engine/Bump(atom/Obstacle) + var/obj/machinery/door/D = Obstacle + var/mob/living/carbon/human/H = load + if(istype(D) && istype(H)) + D.Bumped(H) //a little hacky, but hey, it works, and respects access rights + + ..() + +/obj/vehicle/train/cargo/trolley/Bump(atom/Obstacle) + if(!lead) + return //so people can't knock others over by pushing a trolley around + ..() + +//------------------------------------------- +// Train procs +//------------------------------------------- +/obj/vehicle/train/cargo/engine/turn_on() + if(!key) + return + else + ..() + update_stats() + + verbs -= /obj/vehicle/train/cargo/engine/verb/stop_engine + verbs -= /obj/vehicle/train/cargo/engine/verb/start_engine + + if(on) + verbs += /obj/vehicle/train/cargo/engine/verb/stop_engine + else + verbs += /obj/vehicle/train/cargo/engine/verb/start_engine + +/obj/vehicle/train/cargo/engine/turn_off() + ..() + + verbs -= /obj/vehicle/train/cargo/engine/verb/stop_engine + verbs -= /obj/vehicle/train/cargo/engine/verb/start_engine + + if(!on) + verbs += /obj/vehicle/train/cargo/engine/verb/start_engine + else + verbs += /obj/vehicle/train/cargo/engine/verb/stop_engine + +/obj/vehicle/train/cargo/RunOver(mob/living/carbon/human/H) + var/list/parts = list(BP_HEAD, BP_CHEST, BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM) + + H.apply_effects(5, 5) + for(var/i = 0, i < rand(1,5), i++) + var/def_zone = pick(parts) + H.apply_damage(rand(5,10), DAMAGE_BRUTE, def_zone) + +/obj/vehicle/train/cargo/trolley/RunOver(mob/living/carbon/human/H) + ..() + attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])") + +/obj/vehicle/train/cargo/engine/RunOver(mob/living/carbon/human/H) + ..() + + if(is_train_head() && istype(load, /mob/living/carbon/human)) + var/mob/living/carbon/human/D = load + D.visible_message( + SPAN_DANGER("\The [src] ran over [H]!"), + SPAN_DANGER("You ran over [H]!") + ) + attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey]), driven by [D.name] ([D.ckey])") + msg_admin_attack("[D.name] ([D.ckey]) ran over [H.name] ([H.ckey]). (JMP)") + else + attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])") + + +//------------------------------------------- +// Interaction procs +//------------------------------------------- +/obj/vehicle/train/cargo/engine/relaymove(mob/user, direction) + if(user != load || user.incapacitated()) + return 0 + + if(is_train_head()) + if(direction == reverse_direction(dir) && tow) + return 0 + if(Move(get_step(src, direction))) + return 1 + return 0 + else + return ..() + +/obj/vehicle/train/cargo/engine/examine(mob/user, distance) + . = ..() + if(distance > 1) + return + if(!ishuman(user)) + return + . += SPAN_NOTICE("The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition.") + . += SPAN_NOTICE("The charge meter reads [cell? round(cell.percent(), 0.01) : 0]%") + +/obj/vehicle/train/cargo/engine/verb/start_engine() + set name = "Start engine" + set category = "Object" + set src in view(0) + + if(!istype(usr, /mob/living/carbon/human)) + return + + if(on) + to_chat(usr, "The engine is already running.") + return + + turn_on() + if (on) + to_chat(usr, "You start [src]'s engine.") + else + if(cell.charge < charge_use) + to_chat(usr, "[src] is out of power.") + else + to_chat(usr, "[src]'s engine won't start.") + +/obj/vehicle/train/cargo/engine/verb/stop_engine() + set name = "Stop engine" + set category = "Object" + set src in view(0) + + if(!istype(usr, /mob/living/carbon/human)) + return + + if(!on) + to_chat(usr, "The engine is already stopped.") + return + + turn_off() + if (!on) + to_chat(usr, "You stop [src]'s engine.") + +/obj/vehicle/train/cargo/engine/verb/remove_key() + set name = "Remove key" + set category = "Object" + set src in view(0) + + if(!istype(usr, /mob/living/carbon/human)) + return + + if(!key || (load && load != usr)) + return + + if(on) + turn_off() + + usr.put_in_hands(key) + key = null + + verbs -= /obj/vehicle/train/cargo/engine/verb/remove_key + +//------------------------------------------- +// Loading/unloading procs +//------------------------------------------- +/obj/vehicle/train/cargo/trolley/load(atom/movable/C) + if(ismob(C) && !passenger_allowed) + return 0 + if(!istype(C,/obj/machinery) && !istype(C,/obj/structure/closet) && !istype(C,/obj/structure/largecrate) && !istype(C,/obj/structure/reagent_dispensers) && !istype(C,/obj/structure/ore_box) && !istype(C, /mob/living/carbon/human)) + return 0 + + //if there are any items you don't want to be able to interact with, add them to this check + // ~no more shielded, emitter armed death trains + if(istype(C, /obj/machinery)) + load_object(C) + else + ..() + + if(load) + return 1 + +/obj/vehicle/train/cargo/engine/load(atom/movable/C) + if(!istype(C, /mob/living/carbon/human)) + return 0 + + return ..() + +//Load the object "inside" the trolley and add an overlay of it. +//This prevents the object from being interacted with until it has +// been unloaded. A dummy object is loaded instead so the loading +// code knows to handle it correctly. +/obj/vehicle/train/cargo/trolley/proc/load_object(atom/movable/C) + if(!isturf(C.loc)) //To prevent loading things from someone's inventory, which wouldn't get handled properly. + return 0 + if(load || C.anchored) + return 0 + + var/datum/vehicle_dummy_load/dummy_load = new() + load = dummy_load + + if(!load) + return + dummy_load.actual_load = C + C.forceMove(src) + + if(load_item_visible) + C.pixel_x += load_offset_x + C.pixel_y += load_offset_y + C.plane = plane + C.layer = VEHICLE_LOAD_LAYER + + AddOverlays(C) + + //we can set these back now since we have already cloned the icon into the overlay + C.pixel_x = initial(C.pixel_x) + C.pixel_y = initial(C.pixel_y) + C.reset_plane_and_layer() + +/obj/vehicle/train/cargo/trolley/unload(mob/user, direction) + if(istype(load, /datum/vehicle_dummy_load)) + var/datum/vehicle_dummy_load/dummy_load = load + load = dummy_load.actual_load + dummy_load.actual_load = null + qdel(dummy_load) + ClearOverlays() + ..() + +//------------------------------------------- +// Latching/unlatching procs +//------------------------------------------- + +/obj/vehicle/train/cargo/engine/latch(obj/vehicle/train/T, mob/user) + if(!istype(T) || !Adjacent(T)) + return 0 + + //if we are attaching a trolley to an engine we don't care what direction + // it is in and it should probably be attached with the engine in the lead + if(istype(T, /obj/vehicle/train/cargo/trolley)) + T.attach_to(src, user) + else + var/T_dir = get_dir(src, T) //figure out where T is wrt src + + if(dir == T_dir) //if car is ahead + src.attach_to(T, user) + else if(reverse_direction(dir) == T_dir) //else if car is behind + T.attach_to(src, user) + +//------------------------------------------------------- +// Stat update procs +// +// Update the trains stats for speed calculations. +// The longer the train, the slower it will go. car_limit +// sets the max number of cars one engine can pull at +// full speed. Adding more cars beyond this will slow the +// train proportionate to the length of the train. Adding +// more engines increases this limit by car_limit per +// engine. +//------------------------------------------------------- +/obj/vehicle/train/cargo/engine/update_car(train_length, active_engines) + src.train_length = train_length + src.active_engines = active_engines + + //Update move delay + if(!is_train_head() || !on) + move_delay = initial(move_delay) //so that engines that have been turned off don't lag behind + else + move_delay = max(0, (-car_limit * active_engines) + train_length - active_engines) //limits base overweight so you can't overspeed trains + move_delay *= (1 / max(1, active_engines)) * 2 //overweight penalty (scaled by the number of engines) + move_delay += config.run_delay //base reference speed + move_delay *= 1.1 //makes cargo trains 10% slower than running when not overweight + +/obj/vehicle/train/cargo/trolley/update_car(train_length, active_engines) + src.train_length = train_length + src.active_engines = active_engines + + if(!lead && !tow) + anchored = FALSE + else + anchored = TRUE diff --git a/packs/sierra-tweaks/objects/vehicles/train.dm b/packs/sierra-tweaks/objects/vehicles/train.dm new file mode 100644 index 0000000000000..959a9afc5429c --- /dev/null +++ b/packs/sierra-tweaks/objects/vehicles/train.dm @@ -0,0 +1,238 @@ +/obj/vehicle/train + name = "train" + dir = 4 + + move_delay = 1 + + health = 100 + maxhealth = 100 + fire_dam_coeff = 0.7 + brute_dam_coeff = 0.5 + + var/passenger_allowed = 1 + + var/active_engines = 0 + var/train_length = 0 + + var/obj/vehicle/train/lead + var/obj/vehicle/train/tow + + +//------------------------------------------- +// Standard procs +//------------------------------------------- +/obj/vehicle/train/Initialize() + . = ..() + for(var/obj/vehicle/train/T in orange(1, src)) + latch(T) + +/obj/vehicle/train/examine(mob/user) + . = ..() + if (lead) + . += SPAN_NOTICE("It is hitched to [lead].") + if (tow) + . += SPAN_NOTICE("It is towinge [tow].") + +/obj/vehicle/train/Move() + var/old_loc = get_turf(src) + if(..()) + if(tow) + tow.Move(old_loc) + return 1 + else + if(lead) + unattach() + return 0 + +/obj/vehicle/train/Bump(atom/Obstacle) + if(!istype(Obstacle, /atom/movable)) + return + var/atom/movable/A = Obstacle + + if(!A.anchored) + var/turf/T = get_step(A, dir) + if(isturf(T)) + A.Move(T) //bump things away when hit + + if(emagged) + if(istype(A, /mob/living)) + var/mob/living/M = A + visible_message(SPAN_WARNING("[src] knocks over [M]!")) + var/def_zone = ran_zone() + M.apply_effects(5, 5) //knock people down if you hit them + M.apply_damage(22 / move_delay, DAMAGE_BRUTE, def_zone) // and do damage according to how fast the train is going + if(istype(load, /mob/living/carbon/human)) + var/mob/living/D = load + FEEDBACK_FAILURE(D, "You hit [M]!") + msg_admin_attack("[D.name] ([D.ckey]) hit [M.name] ([M.ckey]) with [src]. (JMP)") + + +//------------------------------------------- +// Vehicle procs +//------------------------------------------- +/obj/vehicle/train/explode() + if (tow) + tow.unattach() + unattach() + ..() + + +//------------------------------------------- +// Interaction procs +//------------------------------------------- +/obj/vehicle/train/relaymove(mob/user, direction) + if(user.incapacitated()) + return 0 + + var/turf/T = get_step_to(src, get_step(src, direction)) + if(!T) + to_chat(user, "You can't find a clear area to step onto.") + return 0 + + if(user != load) + if(user in src) //for handling players stuck in src - this shouldn't happen - but just in case it does + user.forceMove(T) + return 1 + return 0 + + unload(user, direction) + + to_chat(user, SPAN_NOTICE("You climb down from [src].")) + + return 1 + +/obj/vehicle/train/MouseDrop_T(atom/movable/C, mob/user) + if (!istype(user)) + return + if(!CanPhysicallyInteract(user) || !user.Adjacent(C) || !istype(C) || (user == C)) + return + if(istype(C,/obj/vehicle/train)) + latch(C, user) + else + if(!load(C)) + USE_FEEDBACK_FAILURE("You were unable to load [C] on [src].") + +/obj/vehicle/train/attack_hand(mob/user as mob) + if(user.stat || user.restrained() || !Adjacent(user)) + return 0 + + if(user != load && (user in src)) + user.forceMove(loc) //for handling players stuck in src + else if(load) + unload(user) //unload if loaded + else if(!load && !user.buckled) + load(user) //else try climbing on board + else + return 0 + +/obj/vehicle/train/verb/unlatch_v() + set name = "Unlatch" + set desc = "Unhitches this train from the one in front of it." + set category = "Object" + set src in view(1) + + if(!istype(usr, /mob/living/carbon/human)) + return + + if(!CanPhysicallyInteract(usr)) + return + + unattach(usr) + +//------------------------------------------- +// Latching/unlatching procs +//------------------------------------------- + +//attempts to attach src as a follower of the train T +//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) + USE_FEEDBACK_FAILURE("[src] is too far away from [T] to hitch them together.") + return + + if (lead) + USE_FEEDBACK_FAILURE("\The [src] is already hitched to something.") + return + + if (T.tow) + USE_FEEDBACK_FAILURE("\The [T] is already towing something.") + return + + //check for cycles. + var/obj/vehicle/train/next_car = T + while (next_car) + if (next_car == src) + USE_FEEDBACK_FAILURE("That seems very silly.") + return + next_car = next_car.lead + + //latch with src as the follower + lead = T + T.tow = src + set_dir(lead.dir) + + if(user) + to_chat(user, SPAN_NOTICE("You hitch \the [src] to \the [T].")) + + update_stats() + + +//detaches the train from whatever is towing it +/obj/vehicle/train/proc/unattach(mob/user) + if (!lead) + USE_FEEDBACK_FAILURE("\The [src] is not hitched to anything.") + return + + lead.tow = null + lead.update_stats() + + to_chat(user, SPAN_NOTICE("You unhitch \the [src] from \the [lead].")) + lead = null + + update_stats() + +/obj/vehicle/train/proc/latch(obj/vehicle/train/T, mob/user) + if(!istype(T) || !Adjacent(T)) + return 0 + + T.attach_to(src, user) + +//returns 1 if this is the lead car of the train +/obj/vehicle/train/proc/is_train_head() + if (lead) + return 0 + return 1 + +//------------------------------------------------------- +// Stat update procs +// +// Used for updating the stats for how long the train is. +// These are useful for calculating speed based on the +// size of the train, to limit super long trains. +//------------------------------------------------------- +/obj/vehicle/train/update_stats() + //first, seek to the end of the train + var/obj/vehicle/train/T = src + while(T.tow) + //check for cyclic train. + if (T.tow == src) + lead.tow = null + lead.update_stats() + + lead = null + update_stats() + return + T = T.tow + + //now walk back to the front. + var/active_engines = 0 + var/train_length = 0 + while(T) + train_length++ + if (T.powered && T.on) + active_engines++ + T.update_car(train_length, active_engines) + T = T.lead + +/obj/vehicle/train/proc/update_car(train_length, active_engines) + return diff --git a/packs/sierra-tweaks/objects/vehicles/vehicle.dm b/packs/sierra-tweaks/objects/vehicles/vehicle.dm new file mode 100644 index 0000000000000..a1906ff369985 --- /dev/null +++ b/packs/sierra-tweaks/objects/vehicles/vehicle.dm @@ -0,0 +1,388 @@ +//Dummy object for holding items in vehicles. +//Prevents items from being interacted with. +/datum/vehicle_dummy_load + var/name = "dummy load" + var/actual_load + +/obj/vehicle + name = "vehicle" + icon = 'icons/obj/vehicles.dmi' + layer = ABOVE_HUMAN_LAYER + density = TRUE + anchored = TRUE + animate_movement=1 + light_power = 0.7 + light_range = 3 + + can_buckle = 1 + buckle_movable = 1 + buckle_stance = BUCKLE_FORCE_STAND + + var/attack_log = null + var/on = 0 + var/health = 0 //do not forget to set health for your vehicle! + var/maxhealth = 0 + var/fire_dam_coeff = 1.0 + var/brute_dam_coeff = 1.0 + var/open = 0 //Maint panel + var/locked = 1 + var/stat = 0 + var/emagged = FALSE + var/powered = 0 //set if vehicle is powered and should use fuel when moving + var/move_delay = 1 //set this to limit the speed of the vehicle + + var/obj/item/cell/cell + var/charge_use = 200 //W + + var/atom/movable/load //all vehicles can take a load, since they should all be a least drivable + var/load_item_visible = 1 //set if the loaded item should be overlayed on the vehicle sprite + var/load_offset_x = 0 //pixel_x offset for item overlay + var/load_offset_y = 0 //pixel_y offset for item overlay + +//------------------------------------------- +// Standard procs +//------------------------------------------- +/obj/vehicle/New() + ..() + //spawn the cell you want in each vehicle + +/obj/vehicle/Move() + if(world.time > l_move_time + move_delay) + var/old_loc = get_turf(src) + if(on && powered && cell.charge < (charge_use * CELLRATE)) + turn_off() + + var/init_anc = anchored + anchored = FALSE + if(!..()) + anchored = init_anc + return 0 + + set_dir(get_dir(old_loc, loc)) + anchored = init_anc + + if(on && powered) + cell.use(charge_use * CELLRATE) + + //Dummy loads do not have to be moved as they are just an overlay + //See load_object() proc in cargo_trains.dm for an example + if(load && !istype(load, /datum/vehicle_dummy_load)) + load.forceMove(loc) + load.set_dir(dir) + + return 1 + else + return 0 + +/obj/vehicle/proc/adjust_health(adjust_health) + health += adjust_health + health = clamp(health, 0, maxhealth) + healthcheck() + +/obj/vehicle/crowbar_act(mob/living/user, obj/item/tool) + if(!cell || !open) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, skill_path = SKILL_CONSTRUCTION, do_flags = DO_REPAIR_CONSTRUCT)) + return + remove_cell(user) + +/obj/vehicle/screwdriver_act(mob/living/user, obj/item/tool) + if(locked) + return + . = ITEM_INTERACT_SUCCESS + if(!tool.use_as_tool(src, user, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + open = !open + update_icon() + USE_FEEDBACK_NEW_PANEL_OPEN(user, open) + +/obj/vehicle/welder_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_SUCCESS + if(health >= maxhealth) + USE_FEEDBACK_NOTHING_TO_REPAIR(user) + return + if(!open) + balloon_alert(user, "нужно открыть панель!") + return + if(!tool.use_as_tool(src, user, amount = 1, volume = 50, do_flags = DO_REPAIR_CONSTRUCT)) + return + adjust_health(10) + USE_FEEDBACK_REPAIR_FINISH(user) + +/obj/vehicle/use_tool(obj/item/tool, mob/user, list/click_params) + if(istype(tool, /obj/item/hand_labeler)) + return ..() + + else if(istype(tool, /obj/item/cell) && !cell && open) + insert_cell(tool, user) + return TRUE + + else if(hasvar(tool, "force") && hasvar(tool, "damtype")) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + switch(tool.damtype) + if("fire") + adjust_health(-tool.force * fire_dam_coeff) + if("brute") + adjust_health(-tool.force * brute_dam_coeff) + healthcheck() + user.do_attack_animation(src) + return TRUE + + return ..() + + +/obj/vehicle/bullet_act(obj/item/projectile/Proj) + adjust_health(-Proj.get_structure_damage()) + ..() + healthcheck() + +/obj/vehicle/ex_act(severity) + switch(severity) + if(1.0) + explode() + return + if(2.0) + adjust_health(-fire_dam_coeff * rand(5, 10)) + adjust_health(-brute_dam_coeff * rand(10, 20)) + healthcheck() + return + if(3.0) + if (prob(50)) + adjust_health(-fire_dam_coeff * rand(1, 2)) + adjust_health(-brute_dam_coeff * rand(1, 2)) + healthcheck() + return + return + +/obj/vehicle/emp_act(severity) + SHOULD_CALL_PARENT(FALSE) + var/was_on = on + stat |= MACHINE_STAT_EMPED + var/obj/overlay/pulse2 = new /obj/overlay(loc) + pulse2.icon = 'icons/effects/effects.dmi' + pulse2.icon_state = "empdisable" + pulse2.SetName("emp sparks") + pulse2.anchored = TRUE + pulse2.set_dir(pick(GLOB.cardinal)) + + if(on) + turn_off() + + sleep(1 SECOND) + qdel(pulse2) + + sleep(severity * 30 SECONDS) + stat &= ~MACHINE_STAT_EMPED + if(was_on) + turn_on() + +/obj/vehicle/attack_ai(mob/user) + return + +/obj/vehicle/unbuckle_mob(mob/user) + . = ..(user) + if(load == .) + unload(.) + +//------------------------------------------- +// Vehicle procs +//------------------------------------------- +/obj/vehicle/proc/turn_on() + if(stat) + return 0 + if(powered && cell.charge < (charge_use * CELLRATE)) + return 0 + on = 1 + set_light(5, 0.8) + update_icon() + return 1 + +/obj/vehicle/proc/turn_off() + on = 0 + set_light(0) + update_icon() + +/obj/vehicle/emag_act(remaining_charges, mob/user as mob) + if(!emagged) + emagged = TRUE + if(locked) + locked = 0 + USE_FEEDBACK_FAILURE("You bypass [src]'s controls.") + return 1 + +/obj/vehicle/proc/explode() + src.visible_message(SPAN_DANGER("[src] blows apart!")) + var/turf/Tsec = get_turf(src) + + new /obj/item/stack/material/rods(Tsec) + new /obj/item/stack/material/rods(Tsec) + new /obj/item/stack/cable_coil/cut(Tsec) + + if(cell) + cell.forceMove(Tsec) + cell.update_icon() + cell = null + + //stuns people who are thrown off a train that has been blown up + if(istype(load, /mob/living)) + var/mob/living/M = load + M.apply_effects(5, 5) + + unload() + + new /obj/gibspawner/robot(Tsec) + new /obj/decal/cleanable/blood/oil(src.loc) + + qdel(src) + +/obj/vehicle/proc/healthcheck() + if(health <= 0) + explode() + +/obj/vehicle/proc/powercheck() + if(!cell && !powered) + return + + if(!cell && powered) + turn_off() + return + + if(cell.charge < (charge_use * CELLRATE)) + turn_off() + return + + if(cell && powered) + turn_on() + return + +/obj/vehicle/proc/insert_cell(obj/item/cell/C, mob/living/carbon/human/H) + if(cell) + return + if(!istype(C)) + return + if(!H.unEquip(C, src)) + return + cell = C + powercheck() + to_chat(usr, SPAN_NOTICE("You install [C] in [src].")) + +/obj/vehicle/proc/remove_cell(mob/living/carbon/human/H) + if(!cell) + return + + to_chat(usr, SPAN_NOTICE("You remove [cell] from [src].")) + H.put_in_hands(cell) + cell = null + powercheck() + +/obj/vehicle/proc/RunOver(mob/living/carbon/human/H) + return //write specifics for different vehicles + +//------------------------------------------- +// Loading/unloading procs +// +// Set specific item restriction checks in +// the vehicle load() definition before +// calling this parent proc. +//------------------------------------------- +/obj/vehicle/proc/load(atom/movable/C) + //This loads objects onto the vehicle so they can still be interacted with. + //Define allowed items for loading in specific vehicle definitions. + if(!isturf(C.loc)) //To prevent loading things from someone's inventory, which wouldn't get handled properly. + return 0 + if(load || C.anchored) + return 0 + + // if a create/closet, close before loading + var/obj/structure/closet/crate = C + if(istype(crate) && crate.opened && !crate.close()) + return 0 + + C.forceMove(loc) + C.set_dir(dir) + C.anchored = TRUE + + load = C + + if(load_item_visible) + C.plane = plane + C.layer = VEHICLE_LOAD_LAYER //so it sits above the vehicle + + if(ismob(C)) + buckle_mob(C) + else if(load_item_visible) + C.pixel_x += load_offset_x + C.pixel_y += load_offset_y + + return 1 + + +/obj/vehicle/proc/unload(mob/user, direction) + if(!load) + return + + var/turf/dest = null + + //find a turf to unload to + if(direction) //if direction specified, unload in that direction + dest = get_step(src, direction) + else if(user) //if a user has unloaded the vehicle, unload at their feet + dest = get_turf(user) + + if(!dest) + dest = get_step_to(src, get_step(src, turn(dir, 90))) //try unloading to the side of the vehicle first if neither of the above are present + + //if these all result in the same turf as the vehicle or nullspace, pick a new turf with open space + if(!dest || dest == get_turf(src)) + var/list/options = new() + for(var/test_dir in GLOB.alldirs) + var/new_dir = get_step_to(src, get_step(src, test_dir)) + if(new_dir && load.Adjacent(new_dir)) + options += new_dir + if(length(options)) + dest = pick(options) + else + dest = get_turf(src) //otherwise just dump it on the same turf as the vehicle + + if(!isturf(dest)) //if there still is nowhere to unload, cancel out since the vehicle is probably in nullspace + return 0 + + load.forceMove(dest) + load.set_dir(get_dir(loc, dest)) + load.anchored = FALSE //we can only load non-anchored items, so it makes sense to set this to false + if(ismob(load)) //atoms should probably have their own procs to define how their pixel shifts and layer can be manipulated, someday + var/mob/M = load + M.pixel_x = M.default_pixel_x + M.pixel_y = M.default_pixel_y + else + load.pixel_x = initial(load.pixel_x) + load.pixel_y = initial(load.pixel_y) + load.reset_plane_and_layer() + + if(ismob(load)) + unbuckle_mob(load) + + load = null + update_icon() + + return 1 + + +//------------------------------------------------------- +// Stat update procs +//------------------------------------------------------- +/obj/vehicle/proc/update_stats() + return + +/obj/vehicle/attack_generic(mob/user, damage, attack_message) + if(!damage) + return + visible_message(SPAN_DANGER("[user] [attack_message] the [src]!")) + if(istype(user)) + admin_attacker_log(user, "attacked [src]") + user.do_attack_animation(src) + adjust_health(-damage) + if(prob(10)) + new /obj/decal/cleanable/blood/oil(src.loc) + return 1 diff --git a/packs/sierra-tweaks/sound/effects/blast_open_close.ogg b/packs/sierra-tweaks/sound/effects/blast_open_close.ogg new file mode 100644 index 0000000000000..f7c24b59ccebb Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/blast_open_close.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall1.ogg b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall1.ogg new file mode 100644 index 0000000000000..6a8eecefeecd4 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall1.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall2.ogg b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall2.ogg new file mode 100644 index 0000000000000..b41bd746c53fb Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall2.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall3.ogg b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall3.ogg new file mode 100644 index 0000000000000..ef2d5ca700633 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall3.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall4.ogg b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall4.ogg new file mode 100644 index 0000000000000..8951e75b40b17 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall4.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall_skrell1.ogg b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall_skrell1.ogg new file mode 100644 index 0000000000000..52bbfa98fcad7 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall_skrell1.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall_skrell2.ogg b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall_skrell2.ogg new file mode 100644 index 0000000000000..7e2c288643952 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall_skrell2.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall_skrell3.ogg b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall_skrell3.ogg new file mode 100644 index 0000000000000..1f4a1906cfa94 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall_skrell3.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall_skrell4.ogg b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall_skrell4.ogg new file mode 100644 index 0000000000000..feeec23a98cea Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/bodyfall/bodyfall_skrell4.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/cart1.ogg b/packs/sierra-tweaks/sound/effects/cart1.ogg new file mode 100644 index 0000000000000..fe2b59613b5c8 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/cart1.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/cart2.ogg b/packs/sierra-tweaks/sound/effects/cart2.ogg new file mode 100644 index 0000000000000..cadc8883b33d3 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/cart2.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/cart3.ogg b/packs/sierra-tweaks/sound/effects/cart3.ogg new file mode 100644 index 0000000000000..9dee27c6d2c54 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/cart3.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/extinguisher_pickup.ogg b/packs/sierra-tweaks/sound/effects/extinguisher_pickup.ogg new file mode 100644 index 0000000000000..2e51ee0af0a33 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/extinguisher_pickup.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/glass2_drop.ogg b/packs/sierra-tweaks/sound/effects/glass2_drop.ogg new file mode 100644 index 0000000000000..282c0b0ec3e46 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/glass2_drop.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/glass2_pickup.ogg b/packs/sierra-tweaks/sound/effects/glass2_pickup.ogg new file mode 100644 index 0000000000000..d7840c222cfa1 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/glass2_pickup.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/glass3_drop.ogg b/packs/sierra-tweaks/sound/effects/glass3_drop.ogg new file mode 100644 index 0000000000000..91d2d9dd15923 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/glass3_drop.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/glass3_pickup.ogg b/packs/sierra-tweaks/sound/effects/glass3_pickup.ogg new file mode 100644 index 0000000000000..110e159bda02e Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/glass3_pickup.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/glass4_drop.ogg b/packs/sierra-tweaks/sound/effects/glass4_drop.ogg new file mode 100644 index 0000000000000..463bd45b8a9e5 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/glass4_drop.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/glass4_pickup.ogg b/packs/sierra-tweaks/sound/effects/glass4_pickup.ogg new file mode 100644 index 0000000000000..5388376fe283f Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/glass4_pickup.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/glass5_drop.ogg b/packs/sierra-tweaks/sound/effects/glass5_drop.ogg new file mode 100644 index 0000000000000..565aa464b7eda Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/glass5_drop.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/glass5_pickup.ogg b/packs/sierra-tweaks/sound/effects/glass5_pickup.ogg new file mode 100644 index 0000000000000..783bfb9ac0a27 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/glass5_pickup.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/glass6_drop.ogg b/packs/sierra-tweaks/sound/effects/glass6_drop.ogg new file mode 100644 index 0000000000000..cba2659e02c2a Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/glass6_drop.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/glass6_pickup.ogg b/packs/sierra-tweaks/sound/effects/glass6_pickup.ogg new file mode 100644 index 0000000000000..ec118d022f647 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/glass6_pickup.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/glass_drop.ogg b/packs/sierra-tweaks/sound/effects/glass_drop.ogg new file mode 100644 index 0000000000000..afa7e1b8a6b91 Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/glass_drop.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/glass_pickup.ogg b/packs/sierra-tweaks/sound/effects/glass_pickup.ogg new file mode 100644 index 0000000000000..16ead773a660d Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/glass_pickup.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/small_plastic_drop.ogg b/packs/sierra-tweaks/sound/effects/small_plastic_drop.ogg new file mode 100644 index 0000000000000..5c8fa0cb7a90a Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/small_plastic_drop.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/small_plastic_pickup.ogg b/packs/sierra-tweaks/sound/effects/small_plastic_pickup.ogg new file mode 100644 index 0000000000000..cf29020051b7e Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/small_plastic_pickup.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/tank2_drop.ogg b/packs/sierra-tweaks/sound/effects/tank2_drop.ogg new file mode 100644 index 0000000000000..c3b8f90bae61b Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/tank2_drop.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/tank_drop.ogg b/packs/sierra-tweaks/sound/effects/tank_drop.ogg new file mode 100644 index 0000000000000..7d3edee4a259c Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/tank_drop.ogg differ diff --git a/packs/sierra-tweaks/sound/effects/tank_pickup.ogg b/packs/sierra-tweaks/sound/effects/tank_pickup.ogg new file mode 100644 index 0000000000000..d1b7249b108ac Binary files /dev/null and b/packs/sierra-tweaks/sound/effects/tank_pickup.ogg differ diff --git a/packs/sierra-tweaks/sound/machines/printer.ogg b/packs/sierra-tweaks/sound/machines/printer.ogg new file mode 100644 index 0000000000000..c9546490f178a Binary files /dev/null and b/packs/sierra-tweaks/sound/machines/printer.ogg differ diff --git a/rome.json b/rome.json deleted file mode 100644 index 0db3279e44b0d..0000000000000 --- a/rome.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - -} diff --git a/rust_g.dll b/rust_g.dll new file mode 100644 index 0000000000000..ef1d0ec0bdd59 Binary files /dev/null and b/rust_g.dll differ diff --git a/scripts/install-rust_g-dependencies.sh b/scripts/install-rust_g-dependencies.sh new file mode 100755 index 0000000000000..78299cdf19331 --- /dev/null +++ b/scripts/install-rust_g-dependencies.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -euo pipefail + +sudo dpkg --add-architecture i386 +sudo apt update || true +sudo apt install libgcc-s1:i386 diff --git a/scripts/install-rust_g.sh b/scripts/install-rust_g.sh new file mode 100755 index 0000000000000..8d1de1d15bf3e --- /dev/null +++ b/scripts/install-rust_g.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [ -f ~/.byond/bin/librust_g.so ]; then + echo "Using cached ~/.byond/bin/librust_g.so." +else + echo "~/.byond/bin/librust_g.so doesn't exist! Downloading..." + mkdir -p ~/.byond/bin + wget -O ~/.byond/bin/librust_g.so "https://github.com/${RUST_G_REPO}/releases/download/${RUST_G_VERSION}/librust_g.so" +fi + +chmod +x ~/.byond/bin/librust_g.so + +echo "LDD ~/.byond/bin/librust_g.so:" +ldd ~/.byond/bin/librust_g.so diff --git a/scripts/install-spaceman-dmm.sh b/scripts/install-spaceman-dmm.sh index ccb544bcedfac..7321d4817480a 100755 --- a/scripts/install-spaceman-dmm.sh +++ b/scripts/install-spaceman-dmm.sh @@ -1,15 +1,15 @@ #!/bin/bash set -euo pipefail -if [ -f "$HOME/spaceman_dmm/$SPACEMAN_DMM_VERSION/$1" ]; +if [ -f ~/spaceman_dmm/$SPACEMAN_DMM_VERSION/$1 ]; then echo "Using cached $1." - cp "$HOME/spaceman_dmm/$SPACEMAN_DMM_VERSION/$1" ~/$1 + cp ~/spaceman_dmm/$SPACEMAN_DMM_VERSION/$1 ~/$1 else wget -O ~/$1 "https://github.com/SpaceManiac/SpacemanDMM/releases/download/$SPACEMAN_DMM_VERSION/$1" - mkdir -p $HOME/spaceman_dmm - cp ~/$1 $HOME/spaceman_dmm/$SPACEMAN_DMM_VERSION + mkdir -p ~/spaceman_dmm + cp ~/$1 ~/spaceman_dmm/$SPACEMAN_DMM_VERSION fi chmod +x ~/$1 -~/$1 --version \ No newline at end of file +~/$1 --version diff --git a/scripts/mysqldump.sh b/scripts/mysqldump.sh index 5bd60aa1334e9..0d8e875c74c6a 100644 --- a/scripts/mysqldump.sh +++ b/scripts/mysqldump.sh @@ -17,7 +17,7 @@ DATE=$(/bin/date +%Y-%m-%d) BAK="/home/ss13/mysql-backups/MySQLdump-$DATE" #The name of the schema (database) -SCHEMA="tgstation" +SCHEMA="baystation" #You don't need to change this \/ @@ -37,5 +37,3 @@ fi #-bash: ./mysqldump.sh: Permission denied #You do not have execution permission on the shell script, use "chmod +x mysqldump.sh" to claim execution ownership of the file. See Linux permissions for more info. - - diff --git a/sound/ambience/bluespace_interlude_ambience.ogg b/sound/ambience/bluespace_interlude_ambience.ogg new file mode 100644 index 0000000000000..0896041e9acde Binary files /dev/null and b/sound/ambience/bluespace_interlude_ambience.ogg differ diff --git a/sound/ambience/bsd_alarm.ogg b/sound/ambience/bsd_alarm.ogg new file mode 100644 index 0000000000000..f8966afecdc1b Binary files /dev/null and b/sound/ambience/bsd_alarm.ogg differ diff --git a/sound/effects/bodyfall.ogg b/sound/effects/bodyfall.ogg new file mode 100644 index 0000000000000..ef2d5ca700633 Binary files /dev/null and b/sound/effects/bodyfall.ogg differ diff --git a/sound/effects/bodyfall_machine.ogg b/sound/effects/bodyfall_machine.ogg new file mode 100644 index 0000000000000..e01c01168e5c3 Binary files /dev/null and b/sound/effects/bodyfall_machine.ogg differ diff --git a/sound/effects/bodyfall_skrell.ogg b/sound/effects/bodyfall_skrell.ogg new file mode 100644 index 0000000000000..1f4a1906cfa94 Binary files /dev/null and b/sound/effects/bodyfall_skrell.ogg differ diff --git a/sound/effects/butelev.ogg b/sound/effects/butelev.ogg new file mode 100644 index 0000000000000..0d717e984f6ba Binary files /dev/null and b/sound/effects/butelev.ogg differ diff --git a/sound/effects/corpsecube.ogg b/sound/effects/corpsecube.ogg new file mode 100644 index 0000000000000..db2b9a0458e35 Binary files /dev/null and b/sound/effects/corpsecube.ogg differ diff --git a/sound/effects/crinkle.ogg b/sound/effects/crinkle.ogg new file mode 100644 index 0000000000000..82281000ceb7d Binary files /dev/null and b/sound/effects/crinkle.ogg differ diff --git a/sound/effects/storage/smallbox.ogg b/sound/effects/storage/smallbox.ogg new file mode 100644 index 0000000000000..d4bb587a05fbe Binary files /dev/null and b/sound/effects/storage/smallbox.ogg differ diff --git a/sound/effects/wrap.ogg b/sound/effects/wrap.ogg new file mode 100644 index 0000000000000..3519d9cb13ebb Binary files /dev/null and b/sound/effects/wrap.ogg differ diff --git a/sound/effects/wrap_tear.ogg b/sound/effects/wrap_tear.ogg new file mode 100644 index 0000000000000..8bc08c75c6467 Binary files /dev/null and b/sound/effects/wrap_tear.ogg differ diff --git a/sound/items/amputation.ogg b/sound/items/amputation.ogg new file mode 100644 index 0000000000000..6e954487f8c8b Binary files /dev/null and b/sound/items/amputation.ogg differ diff --git a/sound/items/baseball/baseball_hit_01.wav b/sound/items/baseball/baseball_hit_01.wav new file mode 100644 index 0000000000000..477d605f3fb7f Binary files /dev/null and b/sound/items/baseball/baseball_hit_01.wav differ diff --git a/sound/items/baseball/baseball_hit_02.wav b/sound/items/baseball/baseball_hit_02.wav new file mode 100644 index 0000000000000..0d2de8a9e17a2 Binary files /dev/null and b/sound/items/baseball/baseball_hit_02.wav differ diff --git a/sound/items/baseball/play_ball.wav b/sound/items/baseball/play_ball.wav new file mode 100644 index 0000000000000..65a2c0c165d28 Binary files /dev/null and b/sound/items/baseball/play_ball.wav differ diff --git a/sound/items/baseball/swing_woosh.wav b/sound/items/baseball/swing_woosh.wav new file mode 100644 index 0000000000000..38502c15734ed Binary files /dev/null and b/sound/items/baseball/swing_woosh.wav differ diff --git a/sound/items/bonegel.ogg b/sound/items/bonegel.ogg new file mode 100644 index 0000000000000..aee49d46ff910 Binary files /dev/null and b/sound/items/bonegel.ogg differ diff --git a/sound/items/bonesetter.ogg b/sound/items/bonesetter.ogg new file mode 100644 index 0000000000000..7872f647af8e4 Binary files /dev/null and b/sound/items/bonesetter.ogg differ diff --git a/sound/items/cautery.ogg b/sound/items/cautery.ogg new file mode 100644 index 0000000000000..dccace1cc70f9 Binary files /dev/null and b/sound/items/cautery.ogg differ diff --git a/sound/items/circularsaw.ogg b/sound/items/circularsaw.ogg new file mode 100644 index 0000000000000..ef3ed685d82a4 Binary files /dev/null and b/sound/items/circularsaw.ogg differ diff --git a/sound/items/fixovein.ogg b/sound/items/fixovein.ogg new file mode 100644 index 0000000000000..e0adf10f7476b Binary files /dev/null and b/sound/items/fixovein.ogg differ diff --git a/sound/items/hemostat.ogg b/sound/items/hemostat.ogg new file mode 100644 index 0000000000000..ede98674d7d90 Binary files /dev/null and b/sound/items/hemostat.ogg differ diff --git a/sound/items/retractor.ogg b/sound/items/retractor.ogg new file mode 100644 index 0000000000000..3ea330376b224 Binary files /dev/null and b/sound/items/retractor.ogg differ diff --git a/sound/items/scalpel.ogg b/sound/items/scalpel.ogg new file mode 100644 index 0000000000000..4411b700a9a84 Binary files /dev/null and b/sound/items/scalpel.ogg differ diff --git a/sound/items/surgicaldrill.ogg b/sound/items/surgicaldrill.ogg new file mode 100644 index 0000000000000..26e43a9800e9f Binary files /dev/null and b/sound/items/surgicaldrill.ogg differ diff --git a/sound/machines/airlockdone.ogg b/sound/machines/airlockdone.ogg new file mode 100644 index 0000000000000..eef291a2d375b Binary files /dev/null and b/sound/machines/airlockdone.ogg differ diff --git a/sound/machines/airlockin.ogg b/sound/machines/airlockin.ogg new file mode 100644 index 0000000000000..66a78128d9f92 Binary files /dev/null and b/sound/machines/airlockin.ogg differ diff --git a/sound/machines/airlockout.ogg b/sound/machines/airlockout.ogg new file mode 100644 index 0000000000000..d4f03f446f00e Binary files /dev/null and b/sound/machines/airlockout.ogg differ diff --git a/sound/machines/sensors/contact_lost.ogg b/sound/machines/sensors/contact_lost.ogg new file mode 100644 index 0000000000000..4a1b7753658a4 Binary files /dev/null and b/sound/machines/sensors/contact_lost.ogg differ diff --git a/sound/machines/sensors/contactgeneric.ogg b/sound/machines/sensors/contactgeneric.ogg new file mode 100644 index 0000000000000..ef4e04b982574 Binary files /dev/null and b/sound/machines/sensors/contactgeneric.ogg differ diff --git a/sound/machines/sensors/sensorloop.ogg b/sound/machines/sensors/sensorloop.ogg new file mode 100644 index 0000000000000..721a631f1d6ba Binary files /dev/null and b/sound/machines/sensors/sensorloop.ogg differ diff --git a/sound/machines/shower.ogg b/sound/machines/shower.ogg new file mode 100644 index 0000000000000..e1ae5a0c456b5 Binary files /dev/null and b/sound/machines/shower.ogg differ diff --git a/sound/music/elevatormusic_alt.ogg b/sound/music/elevatormusic_alt.ogg new file mode 100644 index 0000000000000..31046cde20455 Binary files /dev/null and b/sound/music/elevatormusic_alt.ogg differ diff --git a/sound/weapons/rcd_crossbow.ogg b/sound/weapons/rcd_crossbow.ogg new file mode 100644 index 0000000000000..09fcc89a7946e Binary files /dev/null and b/sound/weapons/rcd_crossbow.ogg differ diff --git a/sound/wyccstation/announcements/anime.ogg b/sound/wyccstation/announcements/anime.ogg new file mode 100644 index 0000000000000..7c078b5f9940b Binary files /dev/null and b/sound/wyccstation/announcements/anime.ogg differ diff --git a/sound/wyccstation/announcements/anomaly_gravity.ogg b/sound/wyccstation/announcements/anomaly_gravity.ogg new file mode 100644 index 0000000000000..91f225a67443f Binary files /dev/null and b/sound/wyccstation/announcements/anomaly_gravity.ogg differ diff --git a/sound/wyccstation/announcements/anomaly_time.ogg b/sound/wyccstation/announcements/anomaly_time.ogg new file mode 100644 index 0000000000000..14cb444d9f8dd Binary files /dev/null and b/sound/wyccstation/announcements/anomaly_time.ogg differ diff --git a/sound/wyccstation/announcements/biohazard_level_5.ogg b/sound/wyccstation/announcements/biohazard_level_5.ogg new file mode 100644 index 0000000000000..aa6870526d853 Binary files /dev/null and b/sound/wyccstation/announcements/biohazard_level_5.ogg differ diff --git a/sound/wyccstation/announcements/biohazard_level_7.ogg b/sound/wyccstation/announcements/biohazard_level_7.ogg new file mode 100644 index 0000000000000..d9d033c00488b Binary files /dev/null and b/sound/wyccstation/announcements/biohazard_level_7.ogg differ diff --git a/sound/wyccstation/announcements/bluespacejump_initialization.ogg b/sound/wyccstation/announcements/bluespacejump_initialization.ogg new file mode 100644 index 0000000000000..463b9d6274bfa Binary files /dev/null and b/sound/wyccstation/announcements/bluespacejump_initialization.ogg differ diff --git a/sound/wyccstation/announcements/bluespacejump_prepare.ogg b/sound/wyccstation/announcements/bluespacejump_prepare.ogg new file mode 100644 index 0000000000000..a58065b08f9f2 Binary files /dev/null and b/sound/wyccstation/announcements/bluespacejump_prepare.ogg differ diff --git a/sound/wyccstation/announcements/bluespacejump_start.ogg b/sound/wyccstation/announcements/bluespacejump_start.ogg new file mode 100644 index 0000000000000..7b671f455b975 Binary files /dev/null and b/sound/wyccstation/announcements/bluespacejump_start.ogg differ diff --git a/sound/wyccstation/announcements/command_report.ogg b/sound/wyccstation/announcements/command_report.ogg new file mode 100644 index 0000000000000..40707e2eb0d68 Binary files /dev/null and b/sound/wyccstation/announcements/command_report.ogg differ diff --git a/sound/wyccstation/announcements/electrical_storm_high.ogg b/sound/wyccstation/announcements/electrical_storm_high.ogg new file mode 100644 index 0000000000000..a59939be37312 Binary files /dev/null and b/sound/wyccstation/announcements/electrical_storm_high.ogg differ diff --git a/sound/wyccstation/announcements/electrical_storm_normal.ogg b/sound/wyccstation/announcements/electrical_storm_normal.ogg new file mode 100644 index 0000000000000..cd53348b5fe35 Binary files /dev/null and b/sound/wyccstation/announcements/electrical_storm_normal.ogg differ diff --git a/sound/wyccstation/announcements/electricity_off.ogg b/sound/wyccstation/announcements/electricity_off.ogg new file mode 100644 index 0000000000000..73e7a8d426e98 Binary files /dev/null and b/sound/wyccstation/announcements/electricity_off.ogg differ diff --git a/sound/wyccstation/announcements/electricity_on.ogg b/sound/wyccstation/announcements/electricity_on.ogg new file mode 100644 index 0000000000000..3ec1d894d3017 Binary files /dev/null and b/sound/wyccstation/announcements/electricity_on.ogg differ diff --git a/sound/wyccstation/announcements/evacuation.ogg b/sound/wyccstation/announcements/evacuation.ogg new file mode 100644 index 0000000000000..d339d929cae3e Binary files /dev/null and b/sound/wyccstation/announcements/evacuation.ogg differ diff --git a/sound/wyccstation/announcements/life_signatures.ogg b/sound/wyccstation/announcements/life_signatures.ogg new file mode 100644 index 0000000000000..ad3155fe95cb7 Binary files /dev/null and b/sound/wyccstation/announcements/life_signatures.ogg differ diff --git a/sound/wyccstation/announcements/meteors_1.ogg b/sound/wyccstation/announcements/meteors_1.ogg new file mode 100644 index 0000000000000..c6176741a920d Binary files /dev/null and b/sound/wyccstation/announcements/meteors_1.ogg differ diff --git a/sound/wyccstation/announcements/meteors_2.ogg b/sound/wyccstation/announcements/meteors_2.ogg new file mode 100644 index 0000000000000..369f2ee851e55 Binary files /dev/null and b/sound/wyccstation/announcements/meteors_2.ogg differ diff --git a/sound/wyccstation/announcements/new_ai_1.ogg b/sound/wyccstation/announcements/new_ai_1.ogg new file mode 100644 index 0000000000000..42048d241a91a Binary files /dev/null and b/sound/wyccstation/announcements/new_ai_1.ogg differ diff --git a/sound/wyccstation/announcements/new_ai_2.ogg b/sound/wyccstation/announcements/new_ai_2.ogg new file mode 100644 index 0000000000000..6bcefd8657d39 Binary files /dev/null and b/sound/wyccstation/announcements/new_ai_2.ogg differ diff --git a/sound/wyccstation/announcements/radiation.ogg b/sound/wyccstation/announcements/radiation.ogg new file mode 100644 index 0000000000000..4737bce7570ba Binary files /dev/null and b/sound/wyccstation/announcements/radiation.ogg differ diff --git a/sound/wyccstation/announcements/welcome_1.ogg b/sound/wyccstation/announcements/welcome_1.ogg new file mode 100644 index 0000000000000..a1a9d3d373de5 Binary files /dev/null and b/sound/wyccstation/announcements/welcome_1.ogg differ diff --git a/sound/wyccstation/announcements/welcome_2.ogg b/sound/wyccstation/announcements/welcome_2.ogg new file mode 100644 index 0000000000000..8314e0b8339b5 Binary files /dev/null and b/sound/wyccstation/announcements/welcome_2.ogg differ diff --git a/sql/Dockerfile b/sql/Dockerfile deleted file mode 100644 index 0e15b9912ece5..0000000000000 --- a/sql/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM mariadb:latest - -COPY migrate/* /docker-entrypoint-initdb.d/ - -ENV MYSQL_RANDOM_ROOT_PASSWORD=yes MYSQL_DATABASE=bs12 MYSQL_USER=gamelord MYSQL_PASSWORD=gamelord \ No newline at end of file diff --git a/sql/README.md b/sql/README.md deleted file mode 100644 index 942c67780e588..0000000000000 --- a/sql/README.md +++ /dev/null @@ -1,47 +0,0 @@ -### Prerequisites - -The server connects to a mysql-compatible server (mysql, mariadb, percona), so you'll need one of those with a database and user/password pair ready. - -We use [flyway](https://flywaydb.org/) to manage database migrations. To set up the database, you'll need to [download flyway](https://flywaydb.org/getstarted/download.html). - -You'll also need some proficiency with the command line. - ---- - -### Initial setup - -In the root project directory, run: - - path/to/flyway migrate -user=USER -password=PASSWORD -url=jdbc:mysql://HOST/DATABASE - -Where USER is your mysql username, PASSWORD is your mysql password, HOST is the hostname of the mysql server and DATABASE is the database to use. - ---- - -### Migrating - -Use the same command as above. Handy, isn't it? - ---- - -### Using a pre-flyway database - -If you're using a database since before we moved to flyway, it's a bit more involved to get migrations working. - -In the root project directory, run: - - path/to/flyway baseline -user=USER -password=PASSWORD -url=jdbc:mysql://HOST/DATABASE -baselineVersion=001 -baselineDescription="Initial schema" - -From there, you can run migrations as normal. - ---- - -### Configuration file - -Instead of putting -user, -password and -url in the command line every time you execute flyway, you can use a config file. Copy the `flyway-example.conf` file in the root directory and update these lines with your relevant information: - - flyway.url=jdbc:mysql://HOST/DATABASE - flyway.user=USER - flyway.password=PASSWORD - -Now you can just run `flyway migrate` from the project's root directory, and the settings will be loaded from config. diff --git a/sql/migrate/V001__Initial_schema.sql b/sql/migrate/V001__Initial_schema.sql deleted file mode 100644 index 245b8406ec7e5..0000000000000 --- a/sql/migrate/V001__Initial_schema.sql +++ /dev/null @@ -1,411 +0,0 @@ --- --- Table structure for table `death` --- - -CREATE TABLE IF NOT EXISTS `death` ( - `id` int(11) NOT NULL, - `pod` text NOT NULL COMMENT 'Place of death', - `coord` text NOT NULL COMMENT 'X, Y, Z POD', - `tod` datetime NOT NULL COMMENT 'Time of death', - `job` text NOT NULL, - `special` text NOT NULL, - `name` text NOT NULL, - `byondkey` text NOT NULL, - `laname` text NOT NULL COMMENT 'Last attacker name', - `lakey` text NOT NULL COMMENT 'Last attacker key', - `gender` text NOT NULL, - `bruteloss` int(11) NOT NULL, - `brainloss` int(11) NOT NULL, - `fireloss` int(11) NOT NULL, - `oxyloss` int(11) NOT NULL -) ENGINE=MyISAM DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `erro_admin` --- - -CREATE TABLE IF NOT EXISTS `erro_admin` ( - `id` int(11) NOT NULL, - `ckey` varchar(32) NOT NULL, - `rank` varchar(32) NOT NULL DEFAULT 'Administrator', - `level` int(2) NOT NULL DEFAULT '0', - `flags` int(16) NOT NULL DEFAULT '0' -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `erro_admin_log` --- - -CREATE TABLE IF NOT EXISTS `erro_admin_log` ( - `id` int(11) NOT NULL, - `datetime` datetime NOT NULL, - `adminckey` varchar(32) NOT NULL, - `adminip` varchar(18) NOT NULL, - `log` text NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `erro_ban` --- - -CREATE TABLE IF NOT EXISTS `erro_ban` ( - `id` int(11) NOT NULL, - `bantime` datetime NOT NULL, - `serverip` varchar(32) NOT NULL, - `bantype` varchar(32) NOT NULL, - `reason` text NOT NULL, - `job` varchar(32) DEFAULT NULL, - `duration` int(11) NOT NULL, - `rounds` int(11) DEFAULT NULL, - `expiration_time` datetime NOT NULL, - `ckey` varchar(32) NOT NULL, - `computerid` varchar(32) NOT NULL DEFAULT '', - `ip` varchar(32) NOT NULL DEFAULT '', - `a_ckey` varchar(32) NOT NULL, - `a_computerid` varchar(32) NOT NULL DEFAULT '', - `a_ip` varchar(32) NOT NULL DEFAULT '', - `who` text NOT NULL, - `adminwho` text NOT NULL, - `edits` text, - `unbanned` tinyint(1) DEFAULT NULL, - `unbanned_datetime` datetime DEFAULT NULL, - `unbanned_ckey` varchar(32) DEFAULT NULL, - `unbanned_computerid` varchar(32) DEFAULT NULL, - `unbanned_ip` varchar(32) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `erro_feedback` --- - -CREATE TABLE IF NOT EXISTS `erro_feedback` ( - `id` int(11) NOT NULL, - `time` datetime NOT NULL, - `round_id` int(8) NOT NULL, - `var_name` varchar(32) NOT NULL, - `var_value` int(16) DEFAULT NULL, - `details` text -) ENGINE=MyISAM DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `erro_player` --- - -CREATE TABLE IF NOT EXISTS `erro_player` ( - `id` int(11) NOT NULL, - `ckey` varchar(32) NOT NULL, - `firstseen` datetime NOT NULL, - `lastseen` datetime NOT NULL, - `ip` varchar(18) NOT NULL, - `computerid` varchar(32) NOT NULL, - `lastadminrank` varchar(32) NOT NULL DEFAULT 'Player' -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `erro_poll_option` --- - -CREATE TABLE IF NOT EXISTS `erro_poll_option` ( - `id` int(11) NOT NULL, - `pollid` int(11) NOT NULL, - `text` varchar(255) NOT NULL, - `percentagecalc` tinyint(1) NOT NULL DEFAULT '1', - `minval` int(3) DEFAULT NULL, - `maxval` int(3) DEFAULT NULL, - `descmin` varchar(32) DEFAULT NULL, - `descmid` varchar(32) DEFAULT NULL, - `descmax` varchar(32) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `erro_poll_question` --- - -CREATE TABLE IF NOT EXISTS `erro_poll_question` ( - `id` int(11) NOT NULL, - `polltype` varchar(16) NOT NULL DEFAULT 'OPTION', - `starttime` datetime NOT NULL, - `endtime` datetime NOT NULL, - `question` varchar(255) NOT NULL, - `adminonly` tinyint(1) DEFAULT '0' -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `erro_poll_textreply` --- - -CREATE TABLE IF NOT EXISTS `erro_poll_textreply` ( - `id` int(11) NOT NULL, - `datetime` datetime NOT NULL, - `pollid` int(11) NOT NULL, - `ckey` varchar(32) NOT NULL, - `ip` varchar(18) NOT NULL, - `replytext` text NOT NULL, - `adminrank` varchar(32) NOT NULL DEFAULT 'Player' -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `erro_poll_vote` --- - -CREATE TABLE IF NOT EXISTS `erro_poll_vote` ( - `id` int(11) NOT NULL, - `datetime` datetime NOT NULL, - `pollid` int(11) NOT NULL, - `optionid` int(11) NOT NULL, - `ckey` varchar(255) NOT NULL, - `ip` varchar(16) NOT NULL, - `adminrank` varchar(32) NOT NULL, - `rating` int(2) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `erro_privacy` --- - -CREATE TABLE IF NOT EXISTS `erro_privacy` ( - `id` int(11) NOT NULL, - `datetime` datetime NOT NULL, - `ckey` varchar(32) NOT NULL, - `option` varchar(128) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `library` --- - -CREATE TABLE IF NOT EXISTS `library` ( - `id` int(11) NOT NULL, - `author` text NOT NULL, - `title` text NOT NULL, - `content` text NOT NULL, - `category` text NOT NULL -) ENGINE=MyISAM DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `population` --- - -CREATE TABLE IF NOT EXISTS `population` ( - `id` int(11) NOT NULL, - `playercount` int(11) DEFAULT NULL, - `admincount` int(11) DEFAULT NULL, - `time` datetime NOT NULL -) ENGINE=MyISAM DEFAULT CHARSET=latin1; - --- -------------------------------------------------------- - --- --- Table structure for table `ranks` --- - -CREATE TABLE IF NOT EXISTS `ranks` ( - `Rank` int(11) NOT NULL COMMENT 'What Numeric Rank', - `Desc` text NOT NULL COMMENT 'What is a person with this rank?' -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `whitelist` --- - -CREATE TABLE IF NOT EXISTS `whitelist` ( - `id` int(11) NOT NULL, - `ckey` text NOT NULL, - `race` text NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- --- Indexes for dumped tables --- - --- --- Indexes for table `death` --- -ALTER TABLE `death` - ADD PRIMARY KEY (`id`); - --- --- Indexes for table `erro_admin` --- -ALTER TABLE `erro_admin` - ADD PRIMARY KEY (`id`); - --- --- Indexes for table `erro_admin_log` --- -ALTER TABLE `erro_admin_log` - ADD PRIMARY KEY (`id`); - --- --- Indexes for table `erro_ban` --- -ALTER TABLE `erro_ban` - ADD PRIMARY KEY (`id`); - --- --- Indexes for table `erro_feedback` --- -ALTER TABLE `erro_feedback` - ADD PRIMARY KEY (`id`); - --- --- Indexes for table `erro_player` --- -ALTER TABLE `erro_player` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `ckey` (`ckey`); - --- --- Indexes for table `erro_poll_option` --- -ALTER TABLE `erro_poll_option` - ADD PRIMARY KEY (`id`); - --- --- Indexes for table `erro_poll_question` --- -ALTER TABLE `erro_poll_question` - ADD PRIMARY KEY (`id`); - --- --- Indexes for table `erro_poll_textreply` --- -ALTER TABLE `erro_poll_textreply` - ADD PRIMARY KEY (`id`); - --- --- Indexes for table `erro_poll_vote` --- -ALTER TABLE `erro_poll_vote` - ADD PRIMARY KEY (`id`); - --- --- Indexes for table `erro_privacy` --- -ALTER TABLE `erro_privacy` - ADD PRIMARY KEY (`id`); - --- --- Indexes for table `library` --- -ALTER TABLE `library` - ADD PRIMARY KEY (`id`); - --- --- Indexes for table `population` --- -ALTER TABLE `population` - ADD PRIMARY KEY (`id`); - --- --- Indexes for table `ranks` --- -ALTER TABLE `ranks` - ADD PRIMARY KEY (`Rank`); - --- --- Indexes for table `whitelist` --- -ALTER TABLE `whitelist` - ADD PRIMARY KEY (`id`); - --- --- AUTO_INCREMENT for dumped tables --- - --- --- AUTO_INCREMENT for table `death` --- -ALTER TABLE `death` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; --- --- AUTO_INCREMENT for table `erro_admin` --- -ALTER TABLE `erro_admin` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; --- --- AUTO_INCREMENT for table `erro_admin_log` --- -ALTER TABLE `erro_admin_log` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; --- --- AUTO_INCREMENT for table `erro_ban` --- -ALTER TABLE `erro_ban` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; --- --- AUTO_INCREMENT for table `erro_feedback` --- -ALTER TABLE `erro_feedback` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; --- --- AUTO_INCREMENT for table `erro_player` --- -ALTER TABLE `erro_player` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; --- --- AUTO_INCREMENT for table `erro_poll_option` --- -ALTER TABLE `erro_poll_option` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; --- --- AUTO_INCREMENT for table `erro_poll_question` --- -ALTER TABLE `erro_poll_question` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; --- --- AUTO_INCREMENT for table `erro_poll_textreply` --- -ALTER TABLE `erro_poll_textreply` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; --- --- AUTO_INCREMENT for table `erro_poll_vote` --- -ALTER TABLE `erro_poll_vote` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; --- --- AUTO_INCREMENT for table `erro_privacy` --- -ALTER TABLE `erro_privacy` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; --- --- AUTO_INCREMENT for table `library` --- -ALTER TABLE `library` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; --- --- AUTO_INCREMENT for table `population` --- -ALTER TABLE `population` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; --- --- AUTO_INCREMENT for table `whitelist` --- -ALTER TABLE `whitelist` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; diff --git a/sql/migrate/V002__Update_tajlang.sql b/sql/migrate/V002__Update_tajlang.sql deleted file mode 100644 index 4645ae0c34a95..0000000000000 --- a/sql/migrate/V002__Update_tajlang.sql +++ /dev/null @@ -1 +0,0 @@ -UPDATE whitelist SET race="siik'maas" WHERE race="siik'tajr"; \ No newline at end of file diff --git a/sql/migrate/V003__Update_Antag_Bans.sql b/sql/migrate/V003__Update_Antag_Bans.sql deleted file mode 100644 index 68096f922df86..0000000000000 --- a/sql/migrate/V003__Update_Antag_Bans.sql +++ /dev/null @@ -1,12 +0,0 @@ --- Case-insensitive is the default but we're playing it safe -UPDATE erro_ban SET job="Borer" WHERE job="borer"; -UPDATE erro_ban SET job="Xenomorph" WHERE job="xeno"; --- UPDATE erro_ban SET job="actor" WHERE job="actor"; -- Same -UPDATE erro_ban SET job="ert" WHERE job="Emergency Response Team"; -UPDATE erro_ban SET job="mercenary" WHERE job="operative"; --- UPDATE erro_ban SET job="raider" WHERE job="raider"; -- Same --- UPDATE erro_ban SET job="wizard" WHERE job="wizard"; -- Same --- UPDATE erro_ban SET job="changeling" WHERE job="changeling"; -- Same --- UPDATE erro_ban SET job="cultist" WHERE job="cultist"; -- Same --- UPDATE erro_ban SET job="loyalist" WHERE job="loyalist"; -- Same --- UPDATE erro_ban SET job="revolutionary" WHERE job="revolutionary"; -- Same diff --git a/sql/migrate/V004__Add_StaffWarn.sql b/sql/migrate/V004__Add_StaffWarn.sql deleted file mode 100644 index 6efb502e479a8..0000000000000 --- a/sql/migrate/V004__Add_StaffWarn.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE erro_player ADD COLUMN staffwarn TEXT DEFAULT NULL; diff --git a/sql/migrate/V005__Cyborg2Robot.sql b/sql/migrate/V005__Cyborg2Robot.sql deleted file mode 100644 index 2eab270d9fc84..0000000000000 --- a/sql/migrate/V005__Cyborg2Robot.sql +++ /dev/null @@ -1 +0,0 @@ -UPDATE erro_ban SET job="Robot" WHERE job="Cyborg"; \ No newline at end of file diff --git a/sql/migrate/v006__Remove_Polls.sql b/sql/migrate/v006__Remove_Polls.sql deleted file mode 100644 index efdfe4c14f283..0000000000000 --- a/sql/migrate/v006__Remove_Polls.sql +++ /dev/null @@ -1,5 +0,0 @@ -DROP TABLE IF EXISTS `erro_poll_option`; -DROP TABLE IF EXISTS `erro_poll_question`; -DROP TABLE IF EXISTS `erro_poll_textreply`; -DROP TABLE IF EXISTS `erro_poll_vote`; -DROP TABLE IF EXISTS `erro_privacy`; diff --git a/sql/schema.sql b/sql/schema.sql new file mode 100644 index 0000000000000..2559eb303d7b1 --- /dev/null +++ b/sql/schema.sql @@ -0,0 +1,137 @@ +CREATE TABLE IF NOT EXISTS `ban` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `bantime` datetime NOT NULL, + `serverip` varchar(32) NOT NULL, + `bantype` varchar(32) NOT NULL, + `reason` mediumtext NOT NULL, + `job` varchar(32) DEFAULT NULL, + `duration` int(11) NOT NULL, + `rounds` int(11) DEFAULT NULL, + `expiration_time` datetime NOT NULL, + `ckey` varchar(32) NOT NULL, + `computerid` varchar(32) NOT NULL, + `ip` varchar(32) NOT NULL, + `a_ckey` varchar(32) NOT NULL, + `a_computerid` varchar(32) NOT NULL, + `a_ip` varchar(32) NOT NULL, + `who` mediumtext NOT NULL, + `adminwho` mediumtext NOT NULL, + `edits` mediumtext DEFAULT NULL, + `unbanned` tinyint(1) DEFAULT NULL, + `unbanned_datetime` datetime DEFAULT NULL, + `unbanned_ckey` varchar(32) DEFAULT NULL, + `unbanned_computerid` varchar(32) DEFAULT NULL, + `unbanned_ip` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `ckey` (`ckey`), + KEY `computerid` (`computerid`), + KEY `ip` (`ip`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE IF NOT EXISTS `budget` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `date` datetime NOT NULL DEFAULT current_timestamp(), + `ckey` varchar(32) DEFAULT NULL, + `amount` int(10) unsigned NOT NULL, + `source` varchar(32) NOT NULL, + `date_start` datetime NOT NULL DEFAULT current_timestamp(), + `date_end` datetime DEFAULT (current_timestamp() + interval 1 month), + `is_valid` tinyint(1) NOT NULL DEFAULT 1, + `discord_id` bigint(20) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE IF NOT EXISTS `ckey_whitelist` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `date` datetime NOT NULL DEFAULT current_timestamp(), + `ckey` varchar(32) NOT NULL, + `adminwho` varchar(32) NOT NULL, + `port` int(5) unsigned NOT NULL, + `date_start` datetime NOT NULL DEFAULT current_timestamp(), + `date_end` datetime DEFAULT NULL, + `is_valid` tinyint(1) NOT NULL DEFAULT 1, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE IF NOT EXISTS `erro_admin` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `ckey` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `rank` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'Administrator', + `level` int(2) NOT NULL DEFAULT 0, + `flags` int(16) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) USING BTREE, + KEY `ckey` (`ckey`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +CREATE TABLE IF NOT EXISTS `erro_admin_tickets` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `assignee` text DEFAULT NULL, + `ckey` varchar(32) NOT NULL, + `text` text DEFAULT NULL, + `status` enum('OPEN','CLOSED','SOLVED','TIMED_OUT') NOT NULL, + `round` varchar(32) DEFAULT NULL, + `inround_id` int(11) DEFAULT NULL, + `open_date` date DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE IF NOT EXISTS `erro_connection_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `datetime` datetime DEFAULT NULL, + `serverip` text DEFAULT NULL, + `server_port` int(5) unsigned NOT NULL, + `ckey` text DEFAULT NULL, + `ip` text DEFAULT NULL, + `computerid` text DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `ckey` (`ckey`(768)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE IF NOT EXISTS `erro_player` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `ckey` text NOT NULL, + `firstseen` datetime DEFAULT NULL, + `lastseen` datetime DEFAULT NULL, + `ip` text DEFAULT NULL, + `computerid` text DEFAULT NULL, + `lastadminrank` text DEFAULT NULL, + `staffwarn` text DEFAULT NULL, + `discord_id` varchar(32) DEFAULT NULL, + `discord_name` varchar(32) DEFAULT NULL, + `exp` text DEFAULT NULL, + `species_exp` text DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `ckey` (`ckey`(768)), + KEY `ckey_2` (`ckey`(768)), + KEY `ip` (`ip`(768)), + KEY `computerid` (`computerid`(768)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE IF NOT EXISTS `erro_playtime_history` ( + `ckey` varchar(32) NOT NULL, + `date` date NOT NULL, + `time_living` int(32) NOT NULL DEFAULT 0, + `time_ghost` int(32) NOT NULL DEFAULT 0, + PRIMARY KEY (`ckey`,`date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE IF NOT EXISTS `library` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `category` text DEFAULT NULL, + `title` text DEFAULT NULL, + `author` text DEFAULT NULL, + `content` text DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `title` (`title`(768)), + KEY `author` (`author`(768)), + KEY `category` (`category`(768)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE IF NOT EXISTS `whitelist` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `ckey` text NOT NULL, + `race` text NOT NULL, + PRIMARY KEY (`id`), + KEY `ckey` (`ckey`(768)), + KEY `race` (`race`(768)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; diff --git a/test/check-paths.sh b/test/check-paths.sh deleted file mode 100755 index 369474807e022..0000000000000 --- a/test/check-paths.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env bash -set -eo pipefail - -FAILED=0 -shopt -s globstar - -exactly() { # exactly N name search [mode] [filter] - count="$1" - name="$2" - search="$3" - mode="${4:--E}" - filter="${5:-**/*.dm}" - - num="$(grep "$mode" "$search" $filter | wc -l || true)" - - if [ $num -eq $count ]; then - echo "$num $name" - else - echo "$(tput setaf 9)$num $name (expecting exactly $count)$(tput sgr0)" - FAILED=1 - fi -} - -# With the potential exception of << if you increase any of these numbers you're probably doing it wrong -exactly 0 "escapes" '\\\\(red|blue|green|black|b|i[^mc])' -exactly 4 "Del()s" '\WDel\(' -exactly 2 "/atom text paths" '"/atom' -exactly 2 "/area text paths" '"/area' -exactly 2 "/datum text paths" '"/datum' -exactly 2 "/mob text paths" '"/mob' -exactly 10 "/obj text paths" '"/obj' -exactly 8 "/turf text paths" '"/turf' -exactly 117 "to_world uses" '\sto_world\(' -exactly 0 "globals with leading /" '^/var' -P -exactly 0 "globals without global sugar" '^var/(?!global/)' -P -exactly 0 "apparent paths with trailing /" '\w/[,\)\n]' -P -exactly 51 "to_world_log uses" '\sto_world_log\(' -exactly 0 "world<< uses" 'world<<|world[[:space:]]<<' -exactly 0 "world.log<< uses" 'world.log<<|world.log[[:space:]]<<' -exactly 2 "<< uses" '(?> uses" '(?)>>(?!>)' -P -exactly 0 "incorrect indentations" '^( {4,})' -P -exactly 25 "text2path uses" 'text2path' -exactly 3 "update_icon() override" '/update_icon\((.*)\)' -P -exactly 5 "goto use" 'goto ' -exactly 1 "NOOP match" 'NOOP' -exactly 352 "spawn uses" '^\s*spawn\s*\(\s*(-\s*)?\d*\s*\)' -P -exactly 0 "tag uses" '\stag = ' -P '**/*.dmm' -exactly 0 "anchored = 0/1" 'anchored\s*=\s*\d' -P -exactly 2 "density = 0/1" 'density\s*=\s*\d' -P -exactly 0 "emagged = 0/1" 'emagged\s*=\s*\d' -P -exactly 0 "simulated = 0/1" 'simulated\s*=\s*\d' -P -exactly 2 "var/ in proc arguments" '(^/[^/].+/.+?\(.*?)var/' -P -exactly 0 "tmp/ vars" 'var.*/tmp/' -P -exactly 5 "uses of .len" '\.len\b' -P -exactly 608 "attackby() override" '\/attackby\((.*)\)' -P -# With the potential exception of << if you increase any of these numbers you're probably doing it wrong - -num=`find ./html/changelogs -not -name "*.yml" | wc -l` -echo "$num non-yml files (expecting exactly 2)" -[ $num -eq 2 ] || FAILED=1 - -num=`find . -perm /111 -name "*.dm*" | wc -l` -echo "$num executable *.dm? files (expecting exactly 0)" -[ $num -eq 0 ] || FAILED=1 - -exit $FAILED diff --git a/test/check_icon_state_limit.py b/test/check_icon_state_limit.py new file mode 100644 index 0000000000000..c436cc3649d26 --- /dev/null +++ b/test/check_icon_state_limit.py @@ -0,0 +1,37 @@ +import argparse, re, sys +from os import path, walk +from PIL import Image + +opt = argparse.ArgumentParser() +opt.add_argument('dir', help='The directory to scan for *.dmi files with an excess number of icon states.') +args = opt.parse_args() + +STATE_PATTERN = r'^state\s*=' + +def get_states_count(path): + try: + im = Image.open(path) + return len(re.findall(STATE_PATTERN, im.info["Description"], re.MULTILINE)) + except (Image.UnidentifiedImageError): + print("{0} is not a valid image".format(path)) + exit(1) + +if(not path.isdir(args.dir)): + print('Not a directory') + sys.exit(1) + +bad_dmi_files = [] + +# This section parses all *.dmi files in the given directory, recursively. +for root, subdirs, files in walk(args.dir): + for filename in files: + if filename.endswith('.dmi'): + file_path = path.join(root, filename) + number_of_icon_states = get_states_count(file_path) + if number_of_icon_states > 512: + bad_dmi_files.append((file_path, number_of_icon_states)) + +if len(bad_dmi_files) > 0: + for dmi_path, icon_states in bad_dmi_files: + print("{0} had too many icon states. {1}/512.".format(dmi_path, icon_states)) + sys.exit(1) diff --git a/test/run-test.sh b/test/run-test.sh index fb7e655bf7091..48d477b2a5d7f 100755 --- a/test/run-test.sh +++ b/test/run-test.sh @@ -198,6 +198,7 @@ function run_code_tests { find_code_deps pip install --user PyYaml -q pip install --user beautifulsoup4 -q + pip install --user Pillow -q shopt -s globstar run_test_fail "maps contain no step_[xy]" "grep 'step_[xy]' maps/**/*.dmm" run_test_fail "maps contain no layer adjustments" "grep 'layer = ' maps/**/*.dmm" @@ -210,7 +211,7 @@ function run_code_tests { run_test "check tags" "python3 tools/TagMatcher/tag-matcher.py ." run_test "check color hex" "python3 tools/ColorHexChecker/color-hex-checker.py ." run_test "check punctuation" "python3 tools/PunctuationChecker/punctuation-checker.py ." - run_test "check icon state limit" "python3 tools/dmitool/check_icon_state_limit.py ." + run_test "check icon state limit" "python3 test/check_icon_state_limit.py ." run_test_ci "check changelog builds" "python3 tools/changelog/ss13_genchangelog.py html/changelog.html html/changelogs" } @@ -225,7 +226,7 @@ function run_byond_tests { if [[ "$CI" == "true" ]]; then msg "installing BYOND" ./install-byond.sh || exit 1 - source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup + source ~/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup fi run_test "build map unit tests" "scripts/dm.sh -DUNIT_TEST -M$MAP_PATH baystation12.dme" run_test "check no warnings in build" "grep ', 0 warnings' build_log.txt" diff --git a/tgui/.editorconfig b/tgui/.editorconfig new file mode 100644 index 0000000000000..33092d4928a4e --- /dev/null +++ b/tgui/.editorconfig @@ -0,0 +1,13 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +max_line_length = 80 diff --git a/tgui/.eslintignore b/tgui/.eslintignore new file mode 100644 index 0000000000000..a59187b933aee --- /dev/null +++ b/tgui/.eslintignore @@ -0,0 +1,6 @@ +/.yarn/** +/**/node_modules +/**/*.bundle.* +/**/*.chunk.* +/**/*.hot-update.* +/packages/inferno/** diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml new file mode 100644 index 0000000000000..9658aca811d74 --- /dev/null +++ b/tgui/.eslintrc.yml @@ -0,0 +1,770 @@ +root: true +parser: '@typescript-eslint/parser' +parserOptions: + ecmaVersion: 2020 + sourceType: module + ecmaFeatures: + jsx: true +env: + es6: true + browser: true + node: true +globals: + Byond: readonly +plugins: + - prettier + - react +settings: + import/resolver: + node: + extensions: ['.js', '.jsx', '.ts', '.tsx'] + react: + version: '16.10' +rules: + ## Possible Errors + ## ---------------------------------------- + + ## Enforce “for” loop update clause moving the counter in the right + ## direction. + # for-direction: error + ## Enforce return statements in getters + # getter-return: error + ## Disallow using an async function as a Promise executor + no-async-promise-executor: error + ## Disallow await inside of loops + # no-await-in-loop: error + ## Disallow comparing against -0 + # no-compare-neg-zero: error + ## Disallow assignment operators in conditional expressions + no-cond-assign: error + ## Disallow the use of console + # no-console: error + ## Disallow constant expressions in conditions + # no-constant-condition: error + ## Disallow control characters in regular expressions + # no-control-regex: error + ## Disallow the use of debugger + no-debugger: error + ## Disallow duplicate arguments in function definitions + no-dupe-args: error + ## Disallow duplicate keys in object literals + no-dupe-keys: error + ## Disallow duplicate case labels + no-duplicate-case: error + ## Disallow empty block statements + # no-empty: error + ## Disallow empty character classes in regular expressions + no-empty-character-class: error + ## Disallow reassigning exceptions in catch clauses + no-ex-assign: error + ## Disallow unnecessary boolean casts + no-extra-boolean-cast: error + ## Disallow unnecessary parentheses + # no-extra-parens: warn + ## Disallow unnecessary semicolons + # no-extra-semi: error + ## Disallow reassigning function declarations + no-func-assign: error + ## Disallow assigning to imported bindings + no-import-assign: error + ## Disallow variable or function declarations in nested blocks + no-inner-declarations: error + ## Disallow invalid regular expression strings in RegExp constructors + no-invalid-regexp: error + ## Disallow irregular whitespace + no-irregular-whitespace: error + ## Disallow characters which are made with multiple code points in character + ## class syntax + no-misleading-character-class: error + ## Disallow calling global object properties as functions + no-obj-calls: error + ## Disallow calling some Object.prototype methods directly on objects + no-prototype-builtins: error + ## Disallow multiple spaces in regular expressions + no-regex-spaces: error + ## Disallow sparse arrays + no-sparse-arrays: error + ## Disallow template literal placeholder syntax in regular strings + no-template-curly-in-string: error + ## Disallow confusing multiline expressions + # no-unexpected-multiline: error + ## Disallow unreachable code after return, throw, continue, and break + ## statements + # no-unreachable: warn + ## Disallow control flow statements in finally blocks + no-unsafe-finally: error + ## Disallow negating the left operand of relational operators + no-unsafe-negation: error + ## Disallow assignments that can lead to race conditions due to usage of + ## await or yield + # require-atomic-updates: error + ## Require calls to isNaN() when checking for NaN + use-isnan: error + ## Enforce comparing typeof expressions against valid strings + valid-typeof: error + + ## Best practices + ## ---------------------------------------- + ## Enforce getter and setter pairs in objects and classes + # accessor-pairs: error + ## Enforce return statements in callbacks of array methods + # array-callback-return: error + ## Enforce the use of variables within the scope they are defined + # block-scoped-var: error + ## Enforce that class methods utilize this + # class-methods-use-this: error + ## Enforce a maximum cyclomatic complexity allowed in a program + complexity: [error, { max: 50 }] + ## Require return statements to either always or never specify values + # consistent-return: error + ## Enforce consistent brace style for all control statements + curly: [error, multi-line] + ## Require default cases in switch statements + # default-case: error + ## Enforce default parameters to be last + # default-param-last: error + ## Enforce consistent newlines before and after dots + # dot-location: [error, property] + ## Enforce dot notation whenever possible + # dot-notation: error + ## Require the use of === and !== + eqeqeq: [error, always] + ## Require for-in loops to include an if statement + # guard-for-in: error + ## Enforce a maximum number of classes per file + # max-classes-per-file: error + ## Disallow the use of alert, confirm, and prompt + # no-alert: error + ## Disallow the use of arguments.caller or arguments.callee + # no-caller: error + ## Disallow lexical declarations in case clauses + no-case-declarations: error + ## Disallow division operators explicitly at the beginning of regular + ## expressions + # no-div-regex: error + ## Disallow else blocks after return statements in if statements + # no-else-return: error + ## Disallow empty functions + # no-empty-function: error + ## Disallow empty destructuring patterns + no-empty-pattern: error + ## Disallow null comparisons without type-checking operators + # no-eq-null: error + ## Disallow the use of eval() + # no-eval: error + ## Disallow extending native types + # no-extend-native: error + ## Disallow unnecessary calls to .bind() + # no-extra-bind: error + ## Disallow unnecessary labels + # no-extra-label: error + ## Disallow fallthrough of case statements + no-fallthrough: error + ## Disallow leading or trailing decimal points in numeric literals + # no-floating-decimal: error + ## Disallow assignments to native objects or read-only global variables + no-global-assign: error + ## Disallow shorthand type conversions + # no-implicit-coercion: error + ## Disallow variable and function declarations in the global scope + # no-implicit-globals: error + ## Disallow the use of eval()-like methods + # no-implied-eval: error + ## Disallow this keywords outside of classes or class-like objects + # no-invalid-this: error + ## Disallow the use of the __iterator__ property + # no-iterator: error + ## Disallow labeled statements + # no-labels: error + ## Disallow unnecessary nested blocks + # no-lone-blocks: error + ## Disallow function declarations that contain unsafe references inside + ## loop statements + # no-loop-func: error + ## Disallow magic numbers + # no-magic-numbers: error + ## Disallow multiple spaces + # no-multi-spaces: warn + ## Disallow multiline strings + # no-multi-str: error + ## Disallow new operators outside of assignments or comparisons + # no-new: error + ## Disallow new operators with the Function object + # no-new-func: error + ## Disallow new operators with the String, Number, and Boolean objects + # no-new-wrappers: error + ## Disallow octal literals + no-octal: error + ## Disallow octal escape sequences in string literals + no-octal-escape: error + ## Disallow reassigning function parameters + # no-param-reassign: error + ## Disallow the use of the __proto__ property + # no-proto: error + ## Disallow variable redeclaration + no-redeclare: error + ## Disallow certain properties on certain objects + # no-restricted-properties: error + ## Disallow assignment operators in return statements + no-return-assign: error + ## Disallow unnecessary return await + # no-return-await: error + ## Disallow javascript: urls + # no-script-url: error + ## Disallow assignments where both sides are exactly the same + no-self-assign: error + ## Disallow comparisons where both sides are exactly the same + # no-self-compare: error + ## Disallow comma operators + no-sequences: error + ## Disallow throwing literals as exceptions + # no-throw-literal: error + ## Disallow unmodified loop conditions + # no-unmodified-loop-condition: error + ## Disallow unused expressions + # no-unused-expressions: error + ## Disallow unused labels + no-unused-labels: warn + ## Disallow unnecessary calls to .call() and .apply() + # no-useless-call: error + ## Disallow unnecessary catch clauses + # no-useless-catch: error + ## Disallow unnecessary concatenation of literals or template literals + # no-useless-concat: error + ## Disallow unnecessary escape characters + no-useless-escape: warn + ## Disallow redundant return statements + # no-useless-return: error + ## Disallow void operators + # no-void: error + ## Disallow specified warning terms in comments + # no-warning-comments: error + ## Disallow with statements + no-with: error + ## Enforce using named capture group in regular expression + # prefer-named-capture-group: error + ## Require using Error objects as Promise rejection reasons + # prefer-promise-reject-errors: error + ## Disallow use of the RegExp constructor in favor of regular expression + ## literals + # prefer-regex-literals: error + ## Enforce the consistent use of the radix argument when using parseInt() + radix: error + ## Disallow async functions which have no await expression + # require-await: error + ## Enforce the use of u flag on RegExp + # require-unicode-regexp: error + ## Require var declarations be placed at the top of their containing scope + # vars-on-top: error + ## Require parentheses around immediate function invocations + # wrap-iife: error + ## Require or disallow “Yoda” conditions + # yoda: error + + ## Strict mode + ## ---------------------------------------- + ## Require or disallow strict mode directives + strict: error + + ## Variables + ## ---------------------------------------- + ## Require or disallow initialization in variable declarations + # init-declarations: error + ## Disallow deleting variables + no-delete-var: error + ## Disallow labels that share a name with a variable + # no-label-var: error + ## Disallow specified global variables + # no-restricted-globals: error + ## Disallow variable declarations from shadowing variables declared in + ## the outer scope + # no-shadow: error + ## Disallow identifiers from shadowing restricted names + no-shadow-restricted-names: error + ## Disallow the use of undeclared variables unless mentioned + ## in /*global*/ comments + no-undef: error + ## Disallow initializing variables to undefined + no-undef-init: error + ## Disallow the use of undefined as an identifier + ## This can't be enabled because of https://github.com/facebook/regenerator/blob/cb755fd82c648cbc5307a5a2d61cdd598e698fc4/packages/runtime/runtime.js#L14 + # no-undefined: error + ## Disallow unused variables + # no-unused-vars: error + ## Disallow the use of variables before they are defined + # no-use-before-define: error + + ## Code style + ## ---------------------------------------- + ## Enforce linebreaks after opening and before closing array brackets + # array-bracket-newline: [error, consistent] + ## Enforce consistent spacing inside array brackets + # array-bracket-spacing: [error, never] + ## Enforce line breaks after each array element + # array-element-newline: error + ## Disallow or enforce spaces inside of blocks after opening block and + ## before closing block + # block-spacing: [error, always] + ## Enforce consistent brace style for blocks + # brace-style: [error, stroustrup, { allowSingleLine: false }] + ## Enforce camelcase naming convention + # camelcase: error + ## Enforce or disallow capitalization of the first letter of a comment + # capitalized-comments: error + ## Require or disallow trailing commas + # comma-dangle: [error, { + # arrays: always-multiline, + # objects: always-multiline, + # imports: always-multiline, + # exports: always-multiline, + # functions: only-multiline, ## Optional on functions + # }] + ## Enforce consistent spacing before and after commas + # comma-spacing: [error, { before: false, after: true }] + ## Enforce consistent comma style + # comma-style: [error, last] + ## Enforce consistent spacing inside computed property brackets + # computed-property-spacing: [error, never] + ## Enforce consistent naming when capturing the current execution context + # consistent-this: error + ## Require or disallow newline at the end of files + # eol-last: error + ## Require or disallow spacing between function identifiers and their + ## invocations + # func-call-spacing: [error, never] + ## Require function names to match the name of the variable or property + ## to which they are assigned + # func-name-matching: error + ## Require or disallow named function expressions + # func-names: error + ## Enforce the consistent use of either function declarations or expressions + func-style: [error, expression] + ## Enforce line breaks between arguments of a function call + # function-call-argument-newline: error + ## Enforce consistent line breaks inside function parentheses + ## NOTE: This rule does not honor a newline on opening paren. + # function-paren-newline: [error, never] + ## Disallow specified identifiers + # id-blacklist: error + ## Enforce minimum and maximum identifier lengths + # id-length: error + ## Require identifiers to match a specified regular expression + # id-match: error + ## Enforce the location of arrow function bodies + # implicit-arrow-linebreak: error + ## Enforce consistent indentation + # indent: [error, 2, { SwitchCase: 1 }] + ## Enforce the consistent use of either double or single quotes in JSX + ## attributes + # jsx-quotes: [error, prefer-double] + ## Enforce consistent spacing between keys and values in object literal + ## properties + # key-spacing: [error, { beforeColon: false, afterColon: true }] + ## Enforce consistent spacing before and after keywords + # keyword-spacing: [error, { before: true, after: true }] + ## Enforce position of line comments + # line-comment-position: error + ## Enforce consistent linebreak style + # linebreak-style: error + ## Require empty lines around comments + # lines-around-comment: error + ## Require or disallow an empty line between class members + # lines-between-class-members: error + ## Enforce a maximum depth that blocks can be nested + # max-depth: error + ## Enforce a maximum line length + #max-len: [error, { + # code: 80, + ## Ignore imports + #ignorePattern: '^(import\s.+\sfrom\s|.*require\()', + #ignoreUrls: true, + #ignoreRegExpLiterals: true, + #ignoreStrings: true, + #}] + ## Enforce a maximum number of lines per file + # max-lines: error + ## Enforce a maximum number of line of code in a function + # max-lines-per-function: error + ## Enforce a maximum depth that callbacks can be nested + # max-nested-callbacks: error + ## Enforce a maximum number of parameters in function definitions + # max-params: error + ## Enforce a maximum number of statements allowed in function blocks + # max-statements: error + ## Enforce a maximum number of statements allowed per line + # max-statements-per-line: error + ## Enforce a particular style for multiline comments + # multiline-comment-style: error + ## Enforce newlines between operands of ternary expressions + # multiline-ternary: [error, always-multiline] + ## Require constructor names to begin with a capital letter + # new-cap: error + ## Enforce or disallow parentheses when invoking a constructor with no + ## arguments + # new-parens: error + ## Require a newline after each call in a method chain + # newline-per-chained-call: error + ## Disallow Array constructors + # no-array-constructor: error + ## Disallow bitwise operators + # no-bitwise: error + ## Disallow continue statements + # no-continue: error + ## Disallow inline comments after code + # no-inline-comments: error + ## Disallow if statements as the only statement in else blocks + # no-lonely-if: error + ## Disallow mixed binary operators + # no-mixed-operators: error + ## Disallow mixed spaces and tabs for indentation + # no-mixed-spaces-and-tabs: error + ## Disallow use of chained assignment expressions + # no-multi-assign: error + ## Disallow multiple empty lines + # no-multiple-empty-lines: error + ## Disallow negated conditions + # no-negated-condition: error + ## Disallow nested ternary expressions + # no-nested-ternary: error + ## Disallow Object constructors + # no-new-object: error + ## Disallow the unary operators ++ and -- + # no-plusplus: error + ## Disallow specified syntax + # no-restricted-syntax: error + ## Disallow all tabs + # no-tabs: error + ## Disallow ternary operators + # no-ternary: error + ## Disallow trailing whitespace at the end of lines + # no-trailing-spaces: error + ## Disallow dangling underscores in identifiers + # no-underscore-dangle: error + ## Disallow ternary operators when simpler alternatives exist + # no-unneeded-ternary: error + ## Disallow whitespace before properties + # no-whitespace-before-property: error + ## Enforce the location of single-line statements + # nonblock-statement-body-position: error + ## Enforce consistent line breaks inside braces + # object-curly-newline: [error, { multiline: true }] + ## Enforce consistent spacing inside braces + # object-curly-spacing: [error, always] + ## Enforce placing object properties on separate lines + # object-property-newline: error + ## Enforce variables to be declared either together or separately in + ## functions + # one-var: error + ## Require or disallow newlines around variable declarations + # one-var-declaration-per-line: error + ## Require or disallow assignment operator shorthand where possible + # operator-assignment: error + ## Enforce consistent linebreak style for operators + # operator-linebreak: [error, before] + ## Require or disallow padding within blocks + # padded-blocks: error + ## Require or disallow padding lines between statements + # padding-line-between-statements: error + ## Disallow using Object.assign with an object literal as the first + ## argument and prefer the use of object spread instead. + # prefer-object-spread: error + ## Require quotes around object literal property names + # quote-props: error + ## Enforce the consistent use of either backticks, double, or single quotes + # quotes: [error, single] + ## Require or disallow semicolons instead of ASI + # semi: error + ## Enforce consistent spacing before and after semicolons + # semi-spacing: [error, { before: false, after: true }] + ## Enforce location of semicolons + # semi-style: [error, last] + ## Require object keys to be sorted + # sort-keys: error + ## Require variables within the same declaration block to be sorted + # sort-vars: error + ## Enforce consistent spacing before blocks + # space-before-blocks: [error, always] + ## Enforce consistent spacing before function definition opening parenthesis + # space-before-function-paren: [error, { + # anonymous: always, + # named: never, + # asyncArrow: always, + # }] + ## Enforce consistent spacing inside parentheses + # space-in-parens: [error, never] + ## Require spacing around infix operators + # space-infix-ops: error + ## Enforce consistent spacing before or after unary operators + # space-unary-ops: error + ## Enforce consistent spacing after the // or /* in a comment + spaced-comment: [error, always] + ## Enforce spacing around colons of switch statements + # switch-colon-spacing: [error, { before: false, after: true }] + ## Require or disallow spacing between template tags and their literals + # template-tag-spacing: [error, never] + ## Require or disallow Unicode byte order mark (BOM) + # unicode-bom: [error, never] + ## Require parenthesis around regex literals + # wrap-regex: error + + ## ES6 + ## ---------------------------------------- + ## Require braces around arrow function bodies + # arrow-body-style: error + ## Require parentheses around arrow function arguments + # arrow-parens: [error, as-needed] + ## Enforce consistent spacing before and after the arrow in arrow functions + # arrow-spacing: [error, { before: true, after: true }] + ## Require super() calls in constructors + # constructor-super: error + ## Enforce consistent spacing around * operators in generator functions + # generator-star-spacing: [error, { before: false, after: true }] + ## Disallow reassigning class members + no-class-assign: error + ## Disallow arrow functions where they could be confused with comparisons + # no-confusing-arrow: error + ## Disallow reassigning const variables + no-const-assign: error + ## Disallow duplicate class members + no-dupe-class-members: error + ## Disallow duplicate module imports + # no-duplicate-imports: error + ## Disallow new operators with the Symbol object + no-new-symbol: error + ## Disallow specified modules when loaded by import + # no-restricted-imports: error + ## Disallow this/super before calling super() in constructors + no-this-before-super: error + ## Disallow unnecessary computed property keys in object literals + # no-useless-computed-key: error + ## Disallow unnecessary constructors + # no-useless-constructor: error + ## Disallow renaming import, export, and destructured assignments to the + ## same name + # no-useless-rename: error + ## Require let or const instead of var + no-var: error + ## Require or disallow method and property shorthand syntax for object + ## literals + # object-shorthand: error + ## Require using arrow functions for callbacks + prefer-arrow-callback: error + ## Require const declarations for variables that are never reassigned after + ## declared + # prefer-const: error + ## Require destructuring from arrays and/or objects + # prefer-destructuring: error + ## Disallow parseInt() and Number.parseInt() in favor of binary, octal, and + ## hexadecimal literals + # prefer-numeric-literals: error + ## Require rest parameters instead of arguments + # prefer-rest-params: error + ## Require spread operators instead of .apply() + # prefer-spread: error + ## Require template literals instead of string concatenation + # prefer-template: error + ## Require generator functions to contain yield + # require-yield: error + ## Enforce spacing between rest and spread operators and their expressions + # rest-spread-spacing: error + ## Enforce sorted import declarations within modules + # sort-imports: error + ## Require symbol descriptions + # symbol-description: error + ## Require or disallow spacing around embedded expressions of template + ## strings + # template-curly-spacing: error + ## Require or disallow spacing around the * in yield* expressions + # yield-star-spacing: [error, { before: false, after: true }] + + ## React + ## ---------------------------------------- + ## Enforces consistent naming for boolean props + react/boolean-prop-naming: error + ## Forbid "button" element without an explicit "type" attribute + react/button-has-type: error + ## Prevent extraneous defaultProps on components + react/default-props-match-prop-types: error + ## Rule enforces consistent usage of destructuring assignment in component + # react/destructuring-assignment: [error, always, { ignoreClassFields: true }] + ## Prevent missing displayName in a React component definition + # react/display-name: error + ## Forbid certain props on Components + # react/forbid-component-props: error + ## Forbid certain props on DOM Nodes + # react/forbid-dom-props: error + ## Forbid certain elements + # react/forbid-elements: error + ## Forbid certain propTypes + # react/forbid-prop-types: error + ## Forbid foreign propTypes + # react/forbid-foreign-prop-types: error + ## Prevent using this.state inside this.setState + react/no-access-state-in-setstate: error + ## Prevent using Array index in key props + # react/no-array-index-key: error + ## Prevent passing children as props + react/no-children-prop: error + ## Prevent usage of dangerous JSX properties + react/no-danger: error + ## Prevent problem with children and props.dangerouslySetInnerHTML + react/no-danger-with-children: error + ## Prevent usage of deprecated methods, including component lifecycle + ## methods + react/no-deprecated: error + ## Prevent usage of setState in componentDidMount + react/no-did-mount-set-state: error + ## Prevent usage of setState in componentDidUpdate + react/no-did-update-set-state: error + ## Prevent direct mutation of this.state + react/no-direct-mutation-state: error + ## Prevent usage of findDOMNode + react/no-find-dom-node: error + ## Prevent usage of isMounted + react/no-is-mounted: error + ## Prevent multiple component definition per file + # react/no-multi-comp: error + ## Prevent usage of shouldComponentUpdate when extending React.PureComponent + react/no-redundant-should-component-update: error + ## Prevent usage of the return value of React.render + react/no-render-return-value: error + ## Prevent usage of setState + # react/no-set-state: error + ## Prevent common casing typos + react/no-typos: error + ## Prevent using string references in ref attribute. + react/no-string-refs: error + ## Prevent using this in stateless functional components + react/no-this-in-sfc: error + ## Prevent invalid characters from appearing in markup + react/no-unescaped-entities: error + ## Prevent usage of unknown DOM property (fixable) + # react/no-unknown-property: error + ## Prevent usage of unsafe lifecycle methods + react/no-unsafe: error + ## Prevent definitions of unused prop types + react/no-unused-prop-types: error + ## Prevent definitions of unused state properties + react/no-unused-state: error + ## Prevent usage of setState in componentWillUpdate + react/no-will-update-set-state: error + ## Enforce ES5 or ES6 class for React Components + react/prefer-es6-class: error + ## Enforce that props are read-only + # react/prefer-read-only-props: error + ## Enforce stateless React Components to be written as a pure function + react/prefer-stateless-function: error + ## Prevent missing props validation in a React component definition + # react/prop-types: error + ## Prevent missing React when using JSX + # react/react-in-jsx-scope: error + ## Enforce a defaultProps definition for every prop that is not a required + ## prop + # react/require-default-props: error + ## Enforce React components to have a shouldComponentUpdate method + # react/require-optimization: error + ## Enforce ES5 or ES6 class for returning value in render function + react/require-render-return: error + ## Prevent extra closing tags for components without children (fixable) + react/self-closing-comp: error + ## Enforce component methods order (fixable) + # react/sort-comp: error + ## Enforce propTypes declarations alphabetical sorting + # react/sort-prop-types: error + ## Enforce the state initialization style to be either in a constructor or + ## with a class property + react/state-in-constructor: error + ## Enforces where React component static properties should be positioned. + # react/static-property-placement: error + ## Enforce style prop value being an object + react/style-prop-object: error + ## Prevent void DOM elements (e.g. ,
    ) from receiving children + react/void-dom-elements-no-children: error + + ## JSX-specific rules + ## ---------------------------------------- + ## Enforce boolean attributes notation in JSX (fixable) + react/jsx-boolean-value: error + ## Enforce or disallow spaces inside of curly braces in JSX attributes and + ## expressions. + # react/jsx-child-element-spacing: error + ## Validate closing bracket location in JSX (fixable) + # react/jsx-closing-bracket-location: [error, { + # ## NOTE: Not really sure about enforcing this one + # selfClosing: false, + # nonEmpty: after-props, + # }] + ## Validate closing tag location in JSX (fixable) + # react/jsx-closing-tag-location: error + ## Enforce or disallow newlines inside of curly braces in JSX attributes and + ## expressions (fixable) + # react/jsx-curly-newline: error + ## Enforce or disallow spaces inside of curly braces in JSX attributes and + ## expressions (fixable) + # react/jsx-curly-spacing: error + ## Enforce or disallow spaces around equal signs in JSX attributes (fixable) + # react/jsx-equals-spacing: error + ## Restrict file extensions that may contain JSX + # react/jsx-filename-extension: error + ## Enforce position of the first prop in JSX (fixable) + # react/jsx-first-prop-new-line: error + ## Enforce event handler naming conventions in JSX + react/jsx-handler-names: error + ## Validate JSX indentation (fixable) + # react/jsx-indent: [error, 2, { + # checkAttributes: true, + # }] + ## Validate props indentation in JSX (fixable) + # react/jsx-indent-props: [error, 2] + ## Validate JSX has key prop when in array or iterator + react/jsx-key: error + ## Validate JSX maximum depth + react/jsx-max-depth: [error, { max: 10 }] ## Generous + ## Limit maximum of props on a single line in JSX (fixable) + # react/jsx-max-props-per-line: error + ## Prevent usage of .bind() and arrow functions in JSX props + # react/jsx-no-bind: error + ## Prevent comments from being inserted as text nodes + react/jsx-no-comment-textnodes: error + ## Prevent duplicate props in JSX + react/jsx-no-duplicate-props: error + ## Prevent usage of unwrapped JSX strings + # react/jsx-no-literals: error + ## Prevent usage of unsafe target='_blank' + react/jsx-no-target-blank: error + ## Disallow undeclared variables in JSX + react/jsx-no-undef: error + ## Disallow unnecessary fragments (fixable) + react/jsx-no-useless-fragment: error + ## Limit to one expression per line in JSX + # react/jsx-one-expression-per-line: error + ## Enforce curly braces or disallow unnecessary curly braces in JSX + # react/jsx-curly-brace-presence: error + ## Enforce shorthand or standard form for React fragments + react/jsx-fragments: error + ## Enforce PascalCase for user-defined JSX components + react/jsx-pascal-case: error + ## Disallow multiple spaces between inline JSX props (fixable) + # react/jsx-props-no-multi-spaces: error + ## Disallow JSX props spreading + # react/jsx-props-no-spreading: error + ## Enforce default props alphabetical sorting + # react/jsx-sort-default-props: error + ## Enforce props alphabetical sorting (fixable) + # react/jsx-sort-props: error + ## Validate whitespace in and around the JSX opening and closing brackets + ## (fixable) + # react/jsx-tag-spacing: error + ## Prevent React to be incorrectly marked as unused + react/jsx-uses-react: error + ## Prevent variables used in JSX to be incorrectly marked as unused + react/jsx-uses-vars: error + ## Prevent missing parentheses around multilines JSX (fixable) + # react/jsx-wrap-multilines: error + +overrides: + - files: ['*.ts', '*.mts', '*.cts', '*.tsx'] + rules: + # https://typescript-eslint.io/linting/troubleshooting/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors + no-undef: off + react/jsx-no-undef: off diff --git a/tgui/.gitattributes b/tgui/.gitattributes new file mode 100644 index 0000000000000..482063210d320 --- /dev/null +++ b/tgui/.gitattributes @@ -0,0 +1,22 @@ +* text=auto + +## Enforce text mode and LF line breaks +*.js text eol=lf +*.jsx text eol=lf +*.ts text eol=lf +*.tsx text eol=lf +*.css text eol=lf +*.cjs text eol=lf +*.scss text eol=lf +*.html text eol=lf +*.json text eol=lf +*.yml text eol=lf +*.md text eol=lf +*.bat text eol=lf +yarn.lock text eol=lf + +## Treat bundles as binary +*.bundle.* binary +*.chunk.* binary +.yarn/releases/**/* binary +.yarn/plugins/**/* binary diff --git a/tgui/.gitignore b/tgui/.gitignore new file mode 100644 index 0000000000000..4d0dd666d88e2 --- /dev/null +++ b/tgui/.gitignore @@ -0,0 +1,24 @@ +## NPM garbage +node_modules +*.log +package-lock.json + +## Yarn stuff +/.pnp.* +/.yarn/* +!/.yarn/releases +!/.yarn/plugins +!/.yarn/sdks +!/.yarn/versions +!/.yarn/lock.yml + +## Build artifacts +/public/.tmp/**/* +/public/**/* +!/public/*.html +!/public/tgui-polyfill.min.js +/coverage + +## Previously ignored locations that are kept to avoid confusing git +## while transitioning to a new project structure. +/packages/tgui/public/** diff --git a/tgui/.prettierignore b/tgui/.prettierignore new file mode 100644 index 0000000000000..026715d1bc0a4 --- /dev/null +++ b/tgui/.prettierignore @@ -0,0 +1,4 @@ +# Ignore built packages: +public +**.cjs +packages/tgui-dev-server diff --git a/tgui/.prettierrc.yml b/tgui/.prettierrc.yml new file mode 100644 index 0000000000000..2911fcd522dd8 --- /dev/null +++ b/tgui/.prettierrc.yml @@ -0,0 +1,11 @@ +arrowParens: always +bracketSpacing: true +endOfLine: lf +jsxSingleQuote: false +printWidth: 80 +proseWrap: preserve +quoteProps: preserve +semi: true +singleQuote: true +tabWidth: 2 +trailingComma: es5 diff --git a/tgui/.yarn/releases/yarn-4.0.2.cjs b/tgui/.yarn/releases/yarn-4.0.2.cjs new file mode 100644 index 0000000000000..f12c120ed1392 --- /dev/null +++ b/tgui/.yarn/releases/yarn-4.0.2.cjs @@ -0,0 +1,893 @@ +#!/usr/bin/env node +/* eslint-disable */ +//prettier-ignore +(()=>{var n_e=Object.create;var MT=Object.defineProperty;var i_e=Object.getOwnPropertyDescriptor;var s_e=Object.getOwnPropertyNames;var o_e=Object.getPrototypeOf,a_e=Object.prototype.hasOwnProperty;var Be=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var Et=(t,e)=>()=>(t&&(e=t(t=0)),e);var _=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Kt=(t,e)=>{for(var r in e)MT(t,r,{get:e[r],enumerable:!0})},l_e=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of s_e(e))!a_e.call(t,a)&&a!==r&&MT(t,a,{get:()=>e[a],enumerable:!(o=i_e(e,a))||o.enumerable});return t};var $e=(t,e,r)=>(r=t!=null?n_e(o_e(t)):{},l_e(e||!t||!t.__esModule?MT(r,"default",{value:t,enumerable:!0}):r,t));var vi={};Kt(vi,{SAFE_TIME:()=>F7,S_IFDIR:()=>wD,S_IFLNK:()=>ID,S_IFMT:()=>Mu,S_IFREG:()=>Hw});var Mu,wD,Hw,ID,F7,T7=Et(()=>{Mu=61440,wD=16384,Hw=32768,ID=40960,F7=456789e3});var ar={};Kt(ar,{EBADF:()=>Io,EBUSY:()=>c_e,EEXIST:()=>g_e,EINVAL:()=>A_e,EISDIR:()=>h_e,ENOENT:()=>f_e,ENOSYS:()=>u_e,ENOTDIR:()=>p_e,ENOTEMPTY:()=>m_e,EOPNOTSUPP:()=>y_e,EROFS:()=>d_e,ERR_DIR_CLOSED:()=>OT});function Rl(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function c_e(t){return Rl("EBUSY",t)}function u_e(t,e){return Rl("ENOSYS",`${t}, ${e}`)}function A_e(t){return Rl("EINVAL",`invalid argument, ${t}`)}function Io(t){return Rl("EBADF",`bad file descriptor, ${t}`)}function f_e(t){return Rl("ENOENT",`no such file or directory, ${t}`)}function p_e(t){return Rl("ENOTDIR",`not a directory, ${t}`)}function h_e(t){return Rl("EISDIR",`illegal operation on a directory, ${t}`)}function g_e(t){return Rl("EEXIST",`file already exists, ${t}`)}function d_e(t){return Rl("EROFS",`read-only filesystem, ${t}`)}function m_e(t){return Rl("ENOTEMPTY",`directory not empty, ${t}`)}function y_e(t){return Rl("EOPNOTSUPP",`operation not supported, ${t}`)}function OT(){return Rl("ERR_DIR_CLOSED","Directory handle was closed")}var BD=Et(()=>{});var Ea={};Kt(Ea,{BigIntStatsEntry:()=>ey,DEFAULT_MODE:()=>HT,DirEntry:()=>UT,StatEntry:()=>$m,areStatsEqual:()=>jT,clearStats:()=>vD,convertToBigIntStats:()=>C_e,makeDefaultStats:()=>R7,makeEmptyStats:()=>E_e});function R7(){return new $m}function E_e(){return vD(R7())}function vD(t){for(let e in t)if(Object.hasOwn(t,e)){let r=t[e];typeof r=="number"?t[e]=0:typeof r=="bigint"?t[e]=BigInt(0):_T.types.isDate(r)&&(t[e]=new Date(0))}return t}function C_e(t){let e=new ey;for(let r in t)if(Object.hasOwn(t,r)){let o=t[r];typeof o=="number"?e[r]=BigInt(o):_T.types.isDate(o)&&(e[r]=new Date(o))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function jT(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs||t.blksize!==e.blksize||t.blocks!==e.blocks||t.ctimeMs!==e.ctimeMs||t.dev!==e.dev||t.gid!==e.gid||t.ino!==e.ino||t.isBlockDevice()!==e.isBlockDevice()||t.isCharacterDevice()!==e.isCharacterDevice()||t.isDirectory()!==e.isDirectory()||t.isFIFO()!==e.isFIFO()||t.isFile()!==e.isFile()||t.isSocket()!==e.isSocket()||t.isSymbolicLink()!==e.isSymbolicLink()||t.mode!==e.mode||t.mtimeMs!==e.mtimeMs||t.nlink!==e.nlink||t.rdev!==e.rdev||t.size!==e.size||t.uid!==e.uid)return!1;let r=t,o=e;return!(r.atimeNs!==o.atimeNs||r.mtimeNs!==o.mtimeNs||r.ctimeNs!==o.ctimeNs||r.birthtimeNs!==o.birthtimeNs)}var _T,HT,UT,$m,ey,qT=Et(()=>{_T=$e(Be("util")),HT=33188,UT=class{constructor(){this.name="";this.path="";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},$m=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=HT;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},ey=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(HT);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}}});function D_e(t){let e,r;if(e=t.match(B_e))t=e[1];else if(r=t.match(v_e))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function P_e(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(w_e))?t=`/${e[1]}`:(r=t.match(I_e))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t}function DD(t,e){return t===ue?L7(e):GT(e)}var jw,Bt,dr,ue,K,N7,w_e,I_e,B_e,v_e,GT,L7,Ca=Et(()=>{jw=$e(Be("path")),Bt={root:"/",dot:".",parent:".."},dr={home:"~",nodeModules:"node_modules",manifest:"package.json",lockfile:"yarn.lock",virtual:"__virtual__",pnpJs:".pnp.js",pnpCjs:".pnp.cjs",pnpData:".pnp.data.json",pnpEsmLoader:".pnp.loader.mjs",rc:".yarnrc.yml",env:".env"},ue=Object.create(jw.default),K=Object.create(jw.default.posix);ue.cwd=()=>process.cwd();K.cwd=process.platform==="win32"?()=>GT(process.cwd()):process.cwd;process.platform==="win32"&&(K.resolve=(...t)=>t.length>0&&K.isAbsolute(t[0])?jw.default.posix.resolve(...t):jw.default.posix.resolve(K.cwd(),...t));N7=function(t,e,r){return e=t.normalize(e),r=t.normalize(r),e===r?".":(e.endsWith(t.sep)||(e=e+t.sep),r.startsWith(e)?r.slice(e.length):null)};ue.contains=(t,e)=>N7(ue,t,e);K.contains=(t,e)=>N7(K,t,e);w_e=/^([a-zA-Z]:.*)$/,I_e=/^\/\/(\.\/)?(.*)$/,B_e=/^\/([a-zA-Z]:.*)$/,v_e=/^\/unc\/(\.dot\/)?(.*)$/;GT=process.platform==="win32"?P_e:t=>t,L7=process.platform==="win32"?D_e:t=>t;ue.fromPortablePath=L7;ue.toPortablePath=GT});async function PD(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.indexPath,{recursive:!0});let o=[];for(let a of r)for(let n of r)o.push(t.mkdirPromise(t.pathUtils.join(e.indexPath,`${a}${n}`),{recursive:!0}));return await Promise.all(o),e.indexPath}async function M7(t,e,r,o,a){let n=t.pathUtils.normalize(e),u=r.pathUtils.normalize(o),A=[],p=[],{atime:h,mtime:E}=a.stableTime?{atime:Lg,mtime:Lg}:await r.lstatPromise(u);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[h,E]}),await YT(A,p,t,n,r,u,{...a,didParentExist:!0});for(let I of A)await I();await Promise.all(p.map(I=>I()))}async function YT(t,e,r,o,a,n,u){let A=u.didParentExist?await O7(r,o):null,p=await a.lstatPromise(n),{atime:h,mtime:E}=u.stableTime?{atime:Lg,mtime:Lg}:p,I;switch(!0){case p.isDirectory():I=await x_e(t,e,r,o,A,a,n,p,u);break;case p.isFile():I=await Q_e(t,e,r,o,A,a,n,p,u);break;case p.isSymbolicLink():I=await F_e(t,e,r,o,A,a,n,p,u);break;default:throw new Error(`Unsupported file type (${p.mode})`)}return(u.linkStrategy?.type!=="HardlinkFromIndex"||!p.isFile())&&((I||A?.mtime?.getTime()!==E.getTime()||A?.atime?.getTime()!==h.getTime())&&(e.push(()=>r.lutimesPromise(o,h,E)),I=!0),(A===null||(A.mode&511)!==(p.mode&511))&&(e.push(()=>r.chmodPromise(o,p.mode&511)),I=!0)),I}async function O7(t,e){try{return await t.lstatPromise(e)}catch{return null}}async function x_e(t,e,r,o,a,n,u,A,p){if(a!==null&&!a.isDirectory())if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;let h=!1;a===null&&(t.push(async()=>{try{await r.mkdirPromise(o,{mode:A.mode})}catch(v){if(v.code!=="EEXIST")throw v}}),h=!0);let E=await n.readdirPromise(u),I=p.didParentExist&&!a?{...p,didParentExist:!1}:p;if(p.stableSort)for(let v of E.sort())await YT(t,e,r,r.pathUtils.join(o,v),n,n.pathUtils.join(u,v),I)&&(h=!0);else(await Promise.all(E.map(async b=>{await YT(t,e,r,r.pathUtils.join(o,b),n,n.pathUtils.join(u,b),I)}))).some(b=>b)&&(h=!0);return h}async function b_e(t,e,r,o,a,n,u,A,p,h){let E=await n.checksumFilePromise(u,{algorithm:"sha1"}),I=r.pathUtils.join(h.indexPath,E.slice(0,2),`${E}.dat`),v;(te=>(te[te.Lock=0]="Lock",te[te.Rename=1]="Rename"))(v||={});let b=1,C=await O7(r,I);if(a){let U=C&&a.dev===C.dev&&a.ino===C.ino,J=C?.mtimeMs!==S_e;if(U&&J&&h.autoRepair&&(b=0,C=null),!U)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1}let T=!C&&b===1?`${I}.${Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0")}`:null,L=!1;return t.push(async()=>{if(!C&&(b===0&&await r.lockPromise(I,async()=>{let U=await n.readFilePromise(u);await r.writeFilePromise(I,U)}),b===1&&T)){let U=await n.readFilePromise(u);await r.writeFilePromise(T,U);try{await r.linkPromise(T,I)}catch(J){if(J.code==="EEXIST")L=!0,await r.unlinkPromise(T);else throw J}}a||await r.linkPromise(I,o)}),e.push(async()=>{C||await r.lutimesPromise(I,Lg,Lg),T&&!L&&await r.unlinkPromise(T)}),!1}async function k_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{let h=await n.readFilePromise(u);await r.writeFilePromise(o,h)}),!0}async function Q_e(t,e,r,o,a,n,u,A,p){return p.linkStrategy?.type==="HardlinkFromIndex"?b_e(t,e,r,o,a,n,u,A,p,p.linkStrategy):k_e(t,e,r,o,a,n,u,A,p)}async function F_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{await r.symlinkPromise(DD(r.pathUtils,await n.readlinkPromise(u)),o)}),!0}var Lg,S_e,WT=Et(()=>{Ca();Lg=new Date(456789e3*1e3),S_e=Lg.getTime()});function SD(t,e,r,o){let a=()=>{let n=r.shift();if(typeof n>"u")return null;let u=t.pathUtils.join(e,n);return Object.assign(t.statSync(u),{name:n,path:void 0})};return new qw(e,a,o)}var qw,U7=Et(()=>{BD();qw=class{constructor(e,r,o={}){this.path=e;this.nextDirent=r;this.opts=o;this.closed=!1}throwIfClosed(){if(this.closed)throw OT()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let r=this.readSync();return typeof e<"u"?e(null,r):Promise.resolve(r)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<"u"?e(null):Promise.resolve()}closeSync(){this.throwIfClosed(),this.opts.onClose?.(),this.closed=!0}}});function _7(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var H7,ty,j7=Et(()=>{H7=Be("events");qT();ty=class extends H7.EventEmitter{constructor(r,o,{bigint:a=!1}={}){super();this.status="ready";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=r,this.path=o,this.bigint=a,this.lastStats=this.stat()}static create(r,o,a){let n=new ty(r,o,a);return n.start(),n}start(){_7(this.status,"ready"),this.status="running",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit("change",this.lastStats,this.lastStats)},3)}stop(){_7(this.status,"running"),this.status="stopped",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit("stop")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let o=this.bigint?new ey:new $m;return vD(o)}}makeInterval(r){let o=setInterval(()=>{let a=this.stat(),n=this.lastStats;jT(a,n)||(this.lastStats=a,this.emit("change",a,n))},r.interval);return r.persistent?o:o.unref()}registerChangeListener(r,o){this.addListener("change",r),this.changeListeners.set(r,this.makeInterval(o))}unregisterChangeListener(r){this.removeListener("change",r);let o=this.changeListeners.get(r);typeof o<"u"&&clearInterval(o),this.changeListeners.delete(r)}unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())this.unregisterChangeListener(r)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let r of this.changeListeners.values())r.ref();return this}unref(){for(let r of this.changeListeners.values())r.unref();return this}}});function ry(t,e,r,o){let a,n,u,A;switch(typeof r){case"function":a=!1,n=!0,u=5007,A=r;break;default:({bigint:a=!1,persistent:n=!0,interval:u=5007}=r),A=o;break}let p=xD.get(t);typeof p>"u"&&xD.set(t,p=new Map);let h=p.get(e);return typeof h>"u"&&(h=ty.create(t,e,{bigint:a}),p.set(e,h)),h.registerChangeListener(A,{persistent:n,interval:u}),h}function Mg(t,e,r){let o=xD.get(t);if(typeof o>"u")return;let a=o.get(e);typeof a>"u"||(typeof r>"u"?a.unregisterAllChangeListeners():a.unregisterChangeListener(r),a.hasChangeListeners()||(a.stop(),o.delete(e)))}function Og(t){let e=xD.get(t);if(!(typeof e>"u"))for(let r of e.keys())Mg(t,r)}var xD,VT=Et(()=>{j7();xD=new WeakMap});function T_e(t){let e=t.match(/\r?\n/g);if(e===null)return G7.EOL;let r=e.filter(a=>a===`\r +`).length,o=e.length-r;return r>o?`\r +`:` +`}function Ug(t,e){return e.replace(/\r?\n/g,T_e(t))}var q7,G7,hf,Ou,_g=Et(()=>{q7=Be("crypto"),G7=Be("os");WT();Ca();hf=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let o=[e];for(;o.length>0;){let a=o.shift();if((await this.lstatPromise(a)).isDirectory()){let u=await this.readdirPromise(a);if(r)for(let A of u.sort())o.push(this.pathUtils.join(a,A));else throw new Error("Not supported")}else yield a}}async checksumFilePromise(e,{algorithm:r="sha512"}={}){let o=await this.openPromise(e,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,q7.createHash)(r),A=0;for(;(A=await this.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await this.closePromise(o)}}async removePromise(e,{recursive:r=!0,maxRetries:o=5}={}){let a;try{a=await this.lstatPromise(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(a.isDirectory()){if(r){let n=await this.readdirPromise(e);await Promise.all(n.map(u=>this.removePromise(this.pathUtils.resolve(e,u))))}for(let n=0;n<=o;n++)try{await this.rmdirPromise(e);break}catch(u){if(u.code!=="EBUSY"&&u.code!=="ENOTEMPTY")throw u;nsetTimeout(A,n*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:r=!0}={}){let o;try{o=this.lstatSync(e)}catch(a){if(a.code==="ENOENT")return;throw a}if(o.isDirectory()){if(r)for(let a of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,a));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{await this.mkdirPromise(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&await this.chmodPromise(A,r),o!=null)await this.utimesPromise(A,o[0],o[1]);else{let p=await this.statPromise(this.pathUtils.dirname(A));await this.utimesPromise(A,p.atime,p.mtime)}}}return n}mkdirpSync(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{this.mkdirSync(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&this.chmodSync(A,r),o!=null)this.utimesSync(A,o[0],o[1]);else{let p=this.statSync(this.pathUtils.dirname(A));this.utimesSync(A,p.atime,p.mtime)}}}return n}async copyPromise(e,r,{baseFs:o=this,overwrite:a=!0,stableSort:n=!1,stableTime:u=!1,linkStrategy:A=null}={}){return await M7(this,e,o,r,{overwrite:a,stableSort:n,stableTime:u,linkStrategy:A})}copySync(e,r,{baseFs:o=this,overwrite:a=!0}={}){let n=o.lstatSync(r),u=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);let p=o.readdirSync(r);for(let h of p)this.copySync(this.pathUtils.join(e,h),o.pathUtils.join(r,h),{baseFs:o,overwrite:a})}else if(n.isFile()){if(!u||a){u&&this.removeSync(e);let p=o.readFileSync(r);this.writeFileSync(e,p)}}else if(n.isSymbolicLink()){if(!u||a){u&&this.removeSync(e);let p=o.readlinkSync(r);this.symlinkSync(DD(this.pathUtils,p),e)}}else throw new Error(`Unsupported file type (file: ${r}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);let A=n.mode&511;this.chmodSync(e,A)}async changeFilePromise(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferPromise(e,r,o):this.changeFileTextPromise(e,r,o)}async changeFileBufferPromise(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=await this.readFilePromise(e)}catch{}Buffer.compare(a,r)!==0&&await this.writeFilePromise(e,r,{mode:o})}async changeFileTextPromise(e,r,{automaticNewlines:o,mode:a}={}){let n="";try{n=await this.readFilePromise(e,"utf8")}catch{}let u=o?Ug(n,r):r;n!==u&&await this.writeFilePromise(e,u,{mode:a})}changeFileSync(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferSync(e,r,o):this.changeFileTextSync(e,r,o)}changeFileBufferSync(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=this.readFileSync(e)}catch{}Buffer.compare(a,r)!==0&&this.writeFileSync(e,r,{mode:o})}changeFileTextSync(e,r,{automaticNewlines:o=!1,mode:a}={}){let n="";try{n=this.readFileSync(e,"utf8")}catch{}let u=o?Ug(n,r):r;n!==u&&this.writeFileSync(e,u,{mode:a})}async movePromise(e,r){try{await this.renamePromise(e,r)}catch(o){if(o.code==="EXDEV")await this.copyPromise(r,e),await this.removePromise(e);else throw o}}moveSync(e,r){try{this.renameSync(e,r)}catch(o){if(o.code==="EXDEV")this.copySync(r,e),this.removeSync(e);else throw o}}async lockPromise(e,r){let o=`${e}.flock`,a=1e3/60,n=Date.now(),u=null,A=async()=>{let p;try{[p]=await this.readJsonPromise(o)}catch{return Date.now()-n<500}try{return process.kill(p,0),!0}catch{return!1}};for(;u===null;)try{u=await this.openPromise(o,"wx")}catch(p){if(p.code==="EEXIST"){if(!await A())try{await this.unlinkPromise(o);continue}catch{}if(Date.now()-n<60*1e3)await new Promise(h=>setTimeout(h,a));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${o})`)}else throw p}await this.writePromise(u,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(u),await this.unlinkPromise(o)}catch{}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}async writeJsonPromise(e,r,{compact:o=!1}={}){let a=o?0:2;return await this.writeFilePromise(e,`${JSON.stringify(r,null,a)} +`)}writeJsonSync(e,r,{compact:o=!1}={}){let a=o?0:2;return this.writeFileSync(e,`${JSON.stringify(r,null,a)} +`)}async preserveTimePromise(e,r){let o=await this.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await this.lutimesPromise(e,o.atime,o.mtime)}async preserveTimeSync(e,r){let o=this.lstatSync(e),a=r();typeof a<"u"&&(e=a),this.lutimesSync(e,o.atime,o.mtime)}},Ou=class extends hf{constructor(){super(K)}}});var Ps,gf=Et(()=>{_g();Ps=class extends hf{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,r,o){return this.baseFs.openPromise(this.mapToBase(e),r,o)}openSync(e,r,o){return this.baseFs.openSync(this.mapToBase(e),r,o)}async opendirPromise(e,r){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),r),{path:e})}opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),r),{path:e})}async readPromise(e,r,o,a,n){return await this.baseFs.readPromise(e,r,o,a,n)}readSync(e,r,o,a,n){return this.baseFs.readSync(e,r,o,a,n)}async writePromise(e,r,o,a,n){return typeof r=="string"?await this.baseFs.writePromise(e,r,o):await this.baseFs.writePromise(e,r,o,a,n)}writeSync(e,r,o,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r,o):this.baseFs.writeSync(e,r,o,a,n)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,r)}createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,r)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase(e),r)}async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}fstatSync(e,r){return this.baseFs.fstatSync(e,r)}lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}fchmodSync(e,r){return this.baseFs.fchmodSync(e,r)}async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e),r)}chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}async fchownPromise(e,r,o){return this.baseFs.fchownPromise(e,r,o)}fchownSync(e,r,o){return this.baseFs.fchownSync(e,r,o)}async chownPromise(e,r,o){return this.baseFs.chownPromise(this.mapToBase(e),r,o)}chownSync(e,r,o){return this.baseFs.chownSync(this.mapToBase(e),r,o)}async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(r))}renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(r))}async copyFilePromise(e,r,o=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),o)}copyFileSync(e,r,o=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),o)}async appendFilePromise(e,r,o){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,o)}appendFileSync(e,r,o){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,o)}async writeFilePromise(e,r,o){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,o)}writeFileSync(e,r,o){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,o)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,o){return this.baseFs.utimesPromise(this.mapToBase(e),r,o)}utimesSync(e,r,o){return this.baseFs.utimesSync(this.mapToBase(e),r,o)}async lutimesPromise(e,r,o){return this.baseFs.lutimesPromise(this.mapToBase(e),r,o)}lutimesSync(e,r,o){return this.baseFs.lutimesSync(this.mapToBase(e),r,o)}async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e),r)}mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e),r)}rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(r))}linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(r))}async symlinkPromise(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkPromise(u,a,o)}symlinkSync(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkSync(u,a,o)}async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapToBase(e),r)}truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}watch(e,r,o){return this.baseFs.watch(this.mapToBase(e),r,o)}watchFile(e,r,o){return this.baseFs.watchFile(this.mapToBase(e),r,o)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}}});var Uu,Y7=Et(()=>{gf();Uu=class extends Ps{constructor(r,{baseFs:o,pathUtils:a}){super(a);this.target=r,this.baseFs=o}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(r){return r}mapToBase(r){return r}}});function W7(t){let e=t;return typeof t.path=="string"&&(e.path=ue.toPortablePath(t.path)),e}var V7,Rn,Hg=Et(()=>{V7=$e(Be("fs"));_g();Ca();Rn=class extends Ou{constructor(r=V7.default){super();this.realFs=r}getExtractHint(){return!1}getRealPath(){return Bt.root}resolve(r){return K.resolve(r)}async openPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.open(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}openSync(r,o,a){return this.realFs.openSync(ue.fromPortablePath(r),o,a)}async opendirPromise(r,o){return await new Promise((a,n)=>{typeof o<"u"?this.realFs.opendir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.opendir(ue.fromPortablePath(r),this.makeCallback(a,n))}).then(a=>{let n=a;return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n})}opendirSync(r,o){let n=typeof o<"u"?this.realFs.opendirSync(ue.fromPortablePath(r),o):this.realFs.opendirSync(ue.fromPortablePath(r));return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n}async readPromise(r,o,a=0,n=0,u=-1){return await new Promise((A,p)=>{this.realFs.read(r,o,a,n,u,(h,E)=>{h?p(h):A(E)})})}readSync(r,o,a,n,u){return this.realFs.readSync(r,o,a,n,u)}async writePromise(r,o,a,n,u){return await new Promise((A,p)=>typeof o=="string"?this.realFs.write(r,o,a,this.makeCallback(A,p)):this.realFs.write(r,o,a,n,u,this.makeCallback(A,p)))}writeSync(r,o,a,n,u){return typeof o=="string"?this.realFs.writeSync(r,o,a):this.realFs.writeSync(r,o,a,n,u)}async closePromise(r){await new Promise((o,a)=>{this.realFs.close(r,this.makeCallback(o,a))})}closeSync(r){this.realFs.closeSync(r)}createReadStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createReadStream(a,o)}createWriteStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createWriteStream(a,o)}async realpathPromise(r){return await new Promise((o,a)=>{this.realFs.realpath(ue.fromPortablePath(r),{},this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}realpathSync(r){return ue.toPortablePath(this.realFs.realpathSync(ue.fromPortablePath(r),{}))}async existsPromise(r){return await new Promise(o=>{this.realFs.exists(ue.fromPortablePath(r),o)})}accessSync(r,o){return this.realFs.accessSync(ue.fromPortablePath(r),o)}async accessPromise(r,o){return await new Promise((a,n)=>{this.realFs.access(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}existsSync(r){return this.realFs.existsSync(ue.fromPortablePath(r))}async statPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.stat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.stat(ue.fromPortablePath(r),this.makeCallback(a,n))})}statSync(r,o){return o?this.realFs.statSync(ue.fromPortablePath(r),o):this.realFs.statSync(ue.fromPortablePath(r))}async fstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.fstat(r,o,this.makeCallback(a,n)):this.realFs.fstat(r,this.makeCallback(a,n))})}fstatSync(r,o){return o?this.realFs.fstatSync(r,o):this.realFs.fstatSync(r)}async lstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.lstat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.lstat(ue.fromPortablePath(r),this.makeCallback(a,n))})}lstatSync(r,o){return o?this.realFs.lstatSync(ue.fromPortablePath(r),o):this.realFs.lstatSync(ue.fromPortablePath(r))}async fchmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.fchmod(r,o,this.makeCallback(a,n))})}fchmodSync(r,o){return this.realFs.fchmodSync(r,o)}async chmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.chmod(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}chmodSync(r,o){return this.realFs.chmodSync(ue.fromPortablePath(r),o)}async fchownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.fchown(r,o,a,this.makeCallback(n,u))})}fchownSync(r,o,a){return this.realFs.fchownSync(r,o,a)}async chownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.chown(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}chownSync(r,o,a){return this.realFs.chownSync(ue.fromPortablePath(r),o,a)}async renamePromise(r,o){return await new Promise((a,n)=>{this.realFs.rename(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}renameSync(r,o){return this.realFs.renameSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async copyFilePromise(r,o,a=0){return await new Promise((n,u)=>{this.realFs.copyFile(ue.fromPortablePath(r),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}copyFileSync(r,o,a=0){return this.realFs.copyFileSync(ue.fromPortablePath(r),ue.fromPortablePath(o),a)}async appendFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFile(A,o,a,this.makeCallback(n,u)):this.realFs.appendFile(A,o,this.makeCallback(n,u))})}appendFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFileSync(n,o,a):this.realFs.appendFileSync(n,o)}async writeFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFile(A,o,a,this.makeCallback(n,u)):this.realFs.writeFile(A,o,this.makeCallback(n,u))})}writeFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFileSync(n,o,a):this.realFs.writeFileSync(n,o)}async unlinkPromise(r){return await new Promise((o,a)=>{this.realFs.unlink(ue.fromPortablePath(r),this.makeCallback(o,a))})}unlinkSync(r){return this.realFs.unlinkSync(ue.fromPortablePath(r))}async utimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.utimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}utimesSync(r,o,a){this.realFs.utimesSync(ue.fromPortablePath(r),o,a)}async lutimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.lutimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}lutimesSync(r,o,a){this.realFs.lutimesSync(ue.fromPortablePath(r),o,a)}async mkdirPromise(r,o){return await new Promise((a,n)=>{this.realFs.mkdir(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}mkdirSync(r,o){return this.realFs.mkdirSync(ue.fromPortablePath(r),o)}async rmdirPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.rmdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.rmdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}rmdirSync(r,o){return this.realFs.rmdirSync(ue.fromPortablePath(r),o)}async linkPromise(r,o){return await new Promise((a,n)=>{this.realFs.link(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}linkSync(r,o){return this.realFs.linkSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async symlinkPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.symlink(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}symlinkSync(r,o,a){return this.realFs.symlinkSync(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a)}async readFilePromise(r,o){return await new Promise((a,n)=>{let u=typeof r=="string"?ue.fromPortablePath(r):r;this.realFs.readFile(u,o,this.makeCallback(a,n))})}readFileSync(r,o){let a=typeof r=="string"?ue.fromPortablePath(r):r;return this.realFs.readFileSync(a,o)}async readdirPromise(r,o){return await new Promise((a,n)=>{o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(W7)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(ue.toPortablePath)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.readdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}readdirSync(r,o){return o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdirSync(ue.fromPortablePath(r),o).map(W7):this.realFs.readdirSync(ue.fromPortablePath(r),o).map(ue.toPortablePath):this.realFs.readdirSync(ue.fromPortablePath(r),o):this.realFs.readdirSync(ue.fromPortablePath(r))}async readlinkPromise(r){return await new Promise((o,a)=>{this.realFs.readlink(ue.fromPortablePath(r),this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}readlinkSync(r){return ue.toPortablePath(this.realFs.readlinkSync(ue.fromPortablePath(r)))}async truncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.truncate(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}truncateSync(r,o){return this.realFs.truncateSync(ue.fromPortablePath(r),o)}async ftruncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.ftruncate(r,o,this.makeCallback(a,n))})}ftruncateSync(r,o){return this.realFs.ftruncateSync(r,o)}watch(r,o,a){return this.realFs.watch(ue.fromPortablePath(r),o,a)}watchFile(r,o,a){return this.realFs.watchFile(ue.fromPortablePath(r),o,a)}unwatchFile(r,o){return this.realFs.unwatchFile(ue.fromPortablePath(r),o)}makeCallback(r,o){return(a,n)=>{a?o(a):r(n)}}}});var gn,K7=Et(()=>{Hg();gf();Ca();gn=class extends Ps{constructor(r,{baseFs:o=new Rn}={}){super(K);this.target=this.pathUtils.normalize(r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(r){return this.pathUtils.isAbsolute(r)?K.normalize(r):this.baseFs.resolve(K.join(this.target,r))}mapFromBase(r){return r}mapToBase(r){return this.pathUtils.isAbsolute(r)?r:this.pathUtils.join(this.target,r)}}});var J7,_u,z7=Et(()=>{Hg();gf();Ca();J7=Bt.root,_u=class extends Ps{constructor(r,{baseFs:o=new Rn}={}){super(K);this.target=this.pathUtils.resolve(Bt.root,r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Bt.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(r){let o=this.pathUtils.normalize(r);if(this.pathUtils.isAbsolute(r))return this.pathUtils.resolve(this.target,this.pathUtils.relative(J7,r));if(o.match(/^\.\.\/?/))throw new Error(`Resolving this path (${r}) would escape the jail`);return this.pathUtils.resolve(this.target,r)}mapFromBase(r){return this.pathUtils.resolve(J7,this.pathUtils.relative(this.target,r))}}});var ny,X7=Et(()=>{gf();ny=class extends Ps{constructor(r,o){super(o);this.instance=null;this.factory=r}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(r){this.instance=r}mapFromBase(r){return r}mapToBase(r){return r}}});var jg,wa,_p,Z7=Et(()=>{jg=Be("fs");_g();Hg();VT();BD();Ca();wa=4278190080,_p=class extends Ou{constructor({baseFs:r=new Rn,filter:o=null,magicByte:a=42,maxOpenFiles:n=1/0,useCache:u=!0,maxAge:A=5e3,typeCheck:p=jg.constants.S_IFREG,getMountPoint:h,factoryPromise:E,factorySync:I}){if(Math.floor(a)!==a||!(a>1&&a<=127))throw new Error("The magic byte must be set to a round value between 1 and 127 included");super();this.fdMap=new Map;this.nextFd=3;this.isMount=new Set;this.notMount=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.baseFs=r,this.mountInstances=u?new Map:null,this.factoryPromise=E,this.factorySync=I,this.filter=o,this.getMountPoint=h,this.magic=a<<24,this.maxAge=A,this.maxOpenFiles=n,this.typeCheck=p}getExtractHint(r){return this.baseFs.getExtractHint(r)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Og(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.saveAndClose?.(),this.mountInstances.delete(r)}discardAndClose(){if(Og(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.discardAndClose?.(),this.mountInstances.delete(r)}resolve(r){return this.baseFs.resolve(r)}remapFd(r,o){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,o]),a}async openPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.openPromise(r,o,a),async(n,{subPath:u})=>this.remapFd(n,await n.openPromise(u,o,a)))}openSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,o,a),(n,{subPath:u})=>this.remapFd(n,n.openSync(u,o,a)))}async opendirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.opendirPromise(r,o),async(a,{subPath:n})=>await a.opendirPromise(n,o),{requireSubpath:!1})}opendirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.opendirSync(r,o),(a,{subPath:n})=>a.opendirSync(n,o),{requireSubpath:!1})}async readPromise(r,o,a,n,u){if((r&wa)!==this.magic)return await this.baseFs.readPromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("read");let[p,h]=A;return await p.readPromise(h,o,a,n,u)}readSync(r,o,a,n,u){if((r&wa)!==this.magic)return this.baseFs.readSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("readSync");let[p,h]=A;return p.readSync(h,o,a,n,u)}async writePromise(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?await this.baseFs.writePromise(r,o,a):await this.baseFs.writePromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("write");let[p,h]=A;return typeof o=="string"?await p.writePromise(h,o,a):await p.writePromise(h,o,a,n,u)}writeSync(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?this.baseFs.writeSync(r,o,a):this.baseFs.writeSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("writeSync");let[p,h]=A;return typeof o=="string"?p.writeSync(h,o,a):p.writeSync(h,o,a,n,u)}async closePromise(r){if((r&wa)!==this.magic)return await this.baseFs.closePromise(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("close");this.fdMap.delete(r);let[a,n]=o;return await a.closePromise(n)}closeSync(r){if((r&wa)!==this.magic)return this.baseFs.closeSync(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("closeSync");this.fdMap.delete(r);let[a,n]=o;return a.closeSync(n)}createReadStream(r,o){return r===null?this.baseFs.createReadStream(r,o):this.makeCallSync(r,()=>this.baseFs.createReadStream(r,o),(a,{archivePath:n,subPath:u})=>{let A=a.createReadStream(u,o);return A.path=ue.fromPortablePath(this.pathUtils.join(n,u)),A})}createWriteStream(r,o){return r===null?this.baseFs.createWriteStream(r,o):this.makeCallSync(r,()=>this.baseFs.createWriteStream(r,o),(a,{subPath:n})=>a.createWriteStream(n,o))}async realpathPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.realpathPromise(r),async(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=await this.baseFs.realpathPromise(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,await o.realpathPromise(n)))})}realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(r),(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=this.baseFs.realpathSync(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,o.realpathSync(n)))})}async existsPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.existsPromise(r),async(o,{subPath:a})=>await o.existsPromise(a))}existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(o,{subPath:a})=>o.existsSync(a))}async accessPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.accessPromise(r,o),async(a,{subPath:n})=>await a.accessPromise(n,o))}accessSync(r,o){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,o),(a,{subPath:n})=>a.accessSync(n,o))}async statPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.statPromise(r,o),async(a,{subPath:n})=>await a.statPromise(n,o))}statSync(r,o){return this.makeCallSync(r,()=>this.baseFs.statSync(r,o),(a,{subPath:n})=>a.statSync(n,o))}async fstatPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstat");let[n,u]=a;return n.fstatPromise(u,o)}fstatSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstatSync");let[n,u]=a;return n.fstatSync(u,o)}async lstatPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.lstatPromise(r,o),async(a,{subPath:n})=>await a.lstatPromise(n,o))}lstatSync(r,o){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,o),(a,{subPath:n})=>a.lstatSync(n,o))}async fchmodPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmod");let[n,u]=a;return n.fchmodPromise(u,o)}fchmodSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmodSync");let[n,u]=a;return n.fchmodSync(u,o)}async chmodPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.chmodPromise(r,o),async(a,{subPath:n})=>await a.chmodPromise(n,o))}chmodSync(r,o){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,o),(a,{subPath:n})=>a.chmodSync(n,o))}async fchownPromise(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownPromise(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchown");let[u,A]=n;return u.fchownPromise(A,o,a)}fchownSync(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownSync(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchownSync");let[u,A]=n;return u.fchownSync(A,o,a)}async chownPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.chownPromise(r,o,a),async(n,{subPath:u})=>await n.chownPromise(u,o,a))}chownSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,o,a),(n,{subPath:u})=>n.chownSync(u,o,a))}async renamePromise(r,o){return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.renamePromise(r,o),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(a,{subPath:n})=>await this.makeCallPromise(o,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await a.renamePromise(n,A)}))}renameSync(r,o){return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.renameSync(r,o),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(a,{subPath:n})=>this.makeCallSync(o,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return a.renameSync(n,A)}))}async copyFilePromise(r,o,a=0){let n=async(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&await this.existsPromise(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=await u.readFilePromise(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}await p.writeFilePromise(h,E)};return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.copyFilePromise(r,o,a),async(u,{subPath:A})=>await n(this.baseFs,r,u,A)),async(u,{subPath:A})=>await this.makeCallPromise(o,async()=>await n(u,A,this.baseFs,o),async(p,{subPath:h})=>u!==p?await n(u,A,p,h):await u.copyFilePromise(A,h,a)))}copyFileSync(r,o,a=0){let n=(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&this.existsSync(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=u.readFileSync(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}p.writeFileSync(h,E)};return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.copyFileSync(r,o,a),(u,{subPath:A})=>n(this.baseFs,r,u,A)),(u,{subPath:A})=>this.makeCallSync(o,()=>n(u,A,this.baseFs,o),(p,{subPath:h})=>u!==p?n(u,A,p,h):u.copyFileSync(A,h,a)))}async appendFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.appendFilePromise(r,o,a),async(n,{subPath:u})=>await n.appendFilePromise(u,o,a))}appendFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.appendFileSync(r,o,a),(n,{subPath:u})=>n.appendFileSync(u,o,a))}async writeFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.writeFilePromise(r,o,a),async(n,{subPath:u})=>await n.writeFilePromise(u,o,a))}writeFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.writeFileSync(r,o,a),(n,{subPath:u})=>n.writeFileSync(u,o,a))}async unlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.unlinkPromise(r),async(o,{subPath:a})=>await o.unlinkPromise(a))}unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(o,{subPath:a})=>o.unlinkSync(a))}async utimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.utimesPromise(r,o,a),async(n,{subPath:u})=>await n.utimesPromise(u,o,a))}utimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(r,o,a),(n,{subPath:u})=>n.utimesSync(u,o,a))}async lutimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.lutimesPromise(r,o,a),async(n,{subPath:u})=>await n.lutimesPromise(u,o,a))}lutimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSync(r,o,a),(n,{subPath:u})=>n.lutimesSync(u,o,a))}async mkdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.mkdirPromise(r,o),async(a,{subPath:n})=>await a.mkdirPromise(n,o))}mkdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,o),(a,{subPath:n})=>a.mkdirSync(n,o))}async rmdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmdirPromise(r,o),async(a,{subPath:n})=>await a.rmdirPromise(n,o))}rmdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,o),(a,{subPath:n})=>a.rmdirSync(n,o))}async linkPromise(r,o){return await this.makeCallPromise(o,async()=>await this.baseFs.linkPromise(r,o),async(a,{subPath:n})=>await a.linkPromise(r,n))}linkSync(r,o){return this.makeCallSync(o,()=>this.baseFs.linkSync(r,o),(a,{subPath:n})=>a.linkSync(r,n))}async symlinkPromise(r,o,a){return await this.makeCallPromise(o,async()=>await this.baseFs.symlinkPromise(r,o,a),async(n,{subPath:u})=>await n.symlinkPromise(r,u))}symlinkSync(r,o,a){return this.makeCallSync(o,()=>this.baseFs.symlinkSync(r,o,a),(n,{subPath:u})=>n.symlinkSync(r,u))}async readFilePromise(r,o){return this.makeCallPromise(r,async()=>await this.baseFs.readFilePromise(r,o),async(a,{subPath:n})=>await a.readFilePromise(n,o))}readFileSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readFileSync(r,o),(a,{subPath:n})=>a.readFileSync(n,o))}async readdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.readdirPromise(r,o),async(a,{subPath:n})=>await a.readdirPromise(n,o),{requireSubpath:!1})}readdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readdirSync(r,o),(a,{subPath:n})=>a.readdirSync(n,o),{requireSubpath:!1})}async readlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.readlinkPromise(r),async(o,{subPath:a})=>await o.readlinkPromise(a))}readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(r),(o,{subPath:a})=>o.readlinkSync(a))}async truncatePromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.truncatePromise(r,o),async(a,{subPath:n})=>await a.truncatePromise(n,o))}truncateSync(r,o){return this.makeCallSync(r,()=>this.baseFs.truncateSync(r,o),(a,{subPath:n})=>a.truncateSync(n,o))}async ftruncatePromise(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncatePromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncate");let[n,u]=a;return n.ftruncatePromise(u,o)}ftruncateSync(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncateSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncateSync");let[n,u]=a;return n.ftruncateSync(u,o)}watch(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,o,a),(n,{subPath:u})=>n.watch(u,o,a))}watchFile(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,o,a),()=>ry(this,r,o,a))}unwatchFile(r,o){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(r,o),()=>Mg(this,r,o))}async makeCallPromise(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return await o();let u=this.resolve(r),A=this.findMount(u);return A?n&&A.subPath==="/"?await o():await this.getMountPromise(A.archivePath,async p=>await a(p,A)):await o()}makeCallSync(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return o();let u=this.resolve(r),A=this.findMount(u);return!A||n&&A.subPath==="/"?o():this.getMountSync(A.archivePath,p=>a(p,A))}findMount(r){if(this.filter&&!this.filter.test(r))return null;let o="";for(;;){let a=r.substring(o.length),n=this.getMountPoint(a,o);if(!n)return null;if(o=this.pathUtils.join(o,n),!this.isMount.has(o)){if(this.notMount.has(o))continue;try{if(this.typeCheck!==null&&(this.baseFs.lstatSync(o).mode&jg.constants.S_IFMT)!==this.typeCheck){this.notMount.add(o);continue}}catch{return null}this.isMount.add(o)}return{archivePath:o,subPath:this.pathUtils.join(Bt.root,r.substring(o.length))}}}limitOpenFiles(r){if(this.mountInstances===null)return;let o=Date.now(),a=o+this.maxAge,n=r===null?0:this.mountInstances.size-r;for(let[u,{childFs:A,expiresAt:p,refCount:h}]of this.mountInstances.entries())if(!(h!==0||A.hasOpenFileHandles?.())){if(o>=p){A.saveAndClose?.(),this.mountInstances.delete(u),n-=1;continue}else if(r===null||n<=0){a=p;break}A.saveAndClose?.(),this.mountInstances.delete(u),n-=1}this.limitOpenFilesTimeout===null&&(r===null&&this.mountInstances.size>0||r!==null)&&isFinite(a)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},a-o).unref())}async getMountPromise(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);if(!a){let n=await this.factoryPromise(this.baseFs,r);a=this.mountInstances.get(r),a||(a={childFs:n(),expiresAt:0,refCount:0})}this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,a.refCount+=1;try{return await o(a.childFs)}finally{a.refCount-=1}}else{let a=(await this.factoryPromise(this.baseFs,r))();try{return await o(a)}finally{a.saveAndClose?.()}}}getMountSync(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);return a||(a={childFs:this.factorySync(this.baseFs,r),expiresAt:0,refCount:0}),this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,o(a.childFs)}else{let a=this.factorySync(this.baseFs,r);try{return o(a)}finally{a.saveAndClose?.()}}}}});var Zt,KT,Gw,$7=Et(()=>{_g();Ca();Zt=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),KT=class extends hf{constructor(){super(K)}getExtractHint(){throw Zt()}getRealPath(){throw Zt()}resolve(){throw Zt()}async openPromise(){throw Zt()}openSync(){throw Zt()}async opendirPromise(){throw Zt()}opendirSync(){throw Zt()}async readPromise(){throw Zt()}readSync(){throw Zt()}async writePromise(){throw Zt()}writeSync(){throw Zt()}async closePromise(){throw Zt()}closeSync(){throw Zt()}createWriteStream(){throw Zt()}createReadStream(){throw Zt()}async realpathPromise(){throw Zt()}realpathSync(){throw Zt()}async readdirPromise(){throw Zt()}readdirSync(){throw Zt()}async existsPromise(e){throw Zt()}existsSync(e){throw Zt()}async accessPromise(){throw Zt()}accessSync(){throw Zt()}async statPromise(){throw Zt()}statSync(){throw Zt()}async fstatPromise(e){throw Zt()}fstatSync(e){throw Zt()}async lstatPromise(e){throw Zt()}lstatSync(e){throw Zt()}async fchmodPromise(){throw Zt()}fchmodSync(){throw Zt()}async chmodPromise(){throw Zt()}chmodSync(){throw Zt()}async fchownPromise(){throw Zt()}fchownSync(){throw Zt()}async chownPromise(){throw Zt()}chownSync(){throw Zt()}async mkdirPromise(){throw Zt()}mkdirSync(){throw Zt()}async rmdirPromise(){throw Zt()}rmdirSync(){throw Zt()}async linkPromise(){throw Zt()}linkSync(){throw Zt()}async symlinkPromise(){throw Zt()}symlinkSync(){throw Zt()}async renamePromise(){throw Zt()}renameSync(){throw Zt()}async copyFilePromise(){throw Zt()}copyFileSync(){throw Zt()}async appendFilePromise(){throw Zt()}appendFileSync(){throw Zt()}async writeFilePromise(){throw Zt()}writeFileSync(){throw Zt()}async unlinkPromise(){throw Zt()}unlinkSync(){throw Zt()}async utimesPromise(){throw Zt()}utimesSync(){throw Zt()}async lutimesPromise(){throw Zt()}lutimesSync(){throw Zt()}async readFilePromise(){throw Zt()}readFileSync(){throw Zt()}async readlinkPromise(){throw Zt()}readlinkSync(){throw Zt()}async truncatePromise(){throw Zt()}truncateSync(){throw Zt()}async ftruncatePromise(e,r){throw Zt()}ftruncateSync(e,r){throw Zt()}watch(){throw Zt()}watchFile(){throw Zt()}unwatchFile(){throw Zt()}},Gw=KT;Gw.instance=new KT});var Hp,eY=Et(()=>{gf();Ca();Hp=class extends Ps{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return ue.fromPortablePath(r)}mapToBase(r){return ue.toPortablePath(r)}}});var R_e,JT,N_e,mi,tY=Et(()=>{Hg();gf();Ca();R_e=/^[0-9]+$/,JT=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,N_e=/^([^/]+-)?[a-f0-9]+$/,mi=class extends Ps{constructor({baseFs:r=new Rn}={}){super(K);this.baseFs=r}static makeVirtualPath(r,o,a){if(K.basename(r)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!K.basename(o).match(N_e))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let u=K.relative(K.dirname(r),a).split("/"),A=0;for(;A{zT=$e(Be("buffer")),kD=Be("url"),rY=Be("util");gf();Ca();bD=class extends Ps{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return r}mapToBase(r){if(typeof r=="string")return r;if(r instanceof kD.URL)return(0,kD.fileURLToPath)(r);if(Buffer.isBuffer(r)){let o=r.toString();if(!L_e(r,o))throw new Error("Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942");return o}throw new Error(`Unsupported path type: ${(0,rY.inspect)(r)}`)}}});var iY,Bo,df,jp,QD,FD,iy,Rc,Nc,M_e,O_e,U_e,__e,Yw,sY=Et(()=>{iY=Be("readline"),Bo=Symbol("kBaseFs"),df=Symbol("kFd"),jp=Symbol("kClosePromise"),QD=Symbol("kCloseResolve"),FD=Symbol("kCloseReject"),iy=Symbol("kRefs"),Rc=Symbol("kRef"),Nc=Symbol("kUnref"),Yw=class{constructor(e,r){this[M_e]=1;this[O_e]=void 0;this[U_e]=void 0;this[__e]=void 0;this[Bo]=r,this[df]=e}get fd(){return this[df]}async appendFile(e,r){try{this[Rc](this.appendFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;return await this[Bo].appendFilePromise(this.fd,e,o?{encoding:o}:void 0)}finally{this[Nc]()}}async chown(e,r){try{return this[Rc](this.chown),await this[Bo].fchownPromise(this.fd,e,r)}finally{this[Nc]()}}async chmod(e){try{return this[Rc](this.chmod),await this[Bo].fchmodPromise(this.fd,e)}finally{this[Nc]()}}createReadStream(e){return this[Bo].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Bo].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error("Method not implemented.")}sync(){throw new Error("Method not implemented.")}async read(e,r,o,a){try{this[Rc](this.read);let n;return Buffer.isBuffer(e)?n=e:(e??={},n=e.buffer??Buffer.alloc(16384),r=e.offset||0,o=e.length??n.byteLength,a=e.position??null),r??=0,o??=0,o===0?{bytesRead:o,buffer:n}:{bytesRead:await this[Bo].readPromise(this.fd,n,r,o,a),buffer:n}}finally{this[Nc]()}}async readFile(e){try{this[Rc](this.readFile);let r=(typeof e=="string"?e:e?.encoding)??void 0;return await this[Bo].readFilePromise(this.fd,r)}finally{this[Nc]()}}readLines(e){return(0,iY.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Rc](this.stat),await this[Bo].fstatPromise(this.fd,e)}finally{this[Nc]()}}async truncate(e){try{return this[Rc](this.truncate),await this[Bo].ftruncatePromise(this.fd,e)}finally{this[Nc]()}}utimes(e,r){throw new Error("Method not implemented.")}async writeFile(e,r){try{this[Rc](this.writeFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;await this[Bo].writeFilePromise(this.fd,e,o)}finally{this[Nc]()}}async write(...e){try{if(this[Rc](this.write),ArrayBuffer.isView(e[0])){let[r,o,a,n]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o??void 0,a??void 0,n??void 0),buffer:r}}else{let[r,o,a]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o,a),buffer:r}}}finally{this[Nc]()}}async writev(e,r){try{this[Rc](this.writev);let o=0;if(typeof r<"u")for(let a of e){let n=await this.write(a,void 0,void 0,r);o+=n.bytesWritten,r+=n.bytesWritten}else for(let a of e){let n=await this.write(a);o+=n.bytesWritten}return{buffers:e,bytesWritten:o}}finally{this[Nc]()}}readv(e,r){throw new Error("Method not implemented.")}close(){if(this[df]===-1)return Promise.resolve();if(this[jp])return this[jp];if(this[iy]--,this[iy]===0){let e=this[df];this[df]=-1,this[jp]=this[Bo].closePromise(e).finally(()=>{this[jp]=void 0})}else this[jp]=new Promise((e,r)=>{this[QD]=e,this[FD]=r}).finally(()=>{this[jp]=void 0,this[FD]=void 0,this[QD]=void 0});return this[jp]}[(Bo,df,M_e=iy,O_e=jp,U_e=QD,__e=FD,Rc)](e){if(this[df]===-1){let r=new Error("file closed");throw r.code="EBADF",r.syscall=e.name,r}this[iy]++}[Nc](){if(this[iy]--,this[iy]===0){let e=this[df];this[df]=-1,this[Bo].closePromise(e).then(this[QD],this[FD])}}}});function Ww(t,e){e=new bD(e);let r=(o,a,n)=>{let u=o[a];o[a]=n,typeof u?.[sy.promisify.custom]<"u"&&(n[sy.promisify.custom]=u[sy.promisify.custom])};{r(t,"exists",(o,...a)=>{let u=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{e.existsPromise(o).then(A=>{u(A)},()=>{u(!1)})})}),r(t,"read",(...o)=>{let[a,n,u,A,p,h]=o;if(o.length<=3){let E={};o.length<3?h=o[1]:(E=o[1],h=o[2]),{buffer:n=Buffer.alloc(16384),offset:u=0,length:A=n.byteLength,position:p}=E}if(u==null&&(u=0),A|=0,A===0){process.nextTick(()=>{h(null,0,n)});return}p==null&&(p=-1),process.nextTick(()=>{e.readPromise(a,n,u,A,p).then(E=>{h(null,E,n)},E=>{h(E,0,n)})})});for(let o of oY){let a=o.replace(/Promise$/,"");if(typeof t[a]>"u")continue;let n=e[o];if(typeof n>"u")continue;r(t,a,(...A)=>{let h=typeof A[A.length-1]=="function"?A.pop():()=>{};process.nextTick(()=>{n.apply(e,A).then(E=>{h(null,E)},E=>{h(E)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",o=>{try{return e.existsSync(o)}catch{return!1}}),r(t,"readSync",(...o)=>{let[a,n,u,A,p]=o;return o.length<=3&&({offset:u=0,length:A=n.byteLength,position:p}=o[2]||{}),u==null&&(u=0),A|=0,A===0?0:(p==null&&(p=-1),e.readSync(a,n,u,A,p))});for(let o of H_e){let a=o;if(typeof t[a]>"u")continue;let n=e[o];typeof n>"u"||r(t,a,n.bind(e))}t.realpathSync.native=t.realpathSync}{let o=t.promises;for(let a of oY){let n=a.replace(/Promise$/,"");if(typeof o[n]>"u")continue;let u=e[a];typeof u>"u"||a!=="open"&&r(o,n,(A,...p)=>A instanceof Yw?A[n].apply(A,p):u.call(e,A,...p))}r(o,"open",async(...a)=>{let n=await e.openPromise(...a);return new Yw(n,e)})}t.read[sy.promisify.custom]=async(o,a,...n)=>({bytesRead:await e.readPromise(o,a,...n),buffer:a}),t.write[sy.promisify.custom]=async(o,a,...n)=>({bytesWritten:await e.writePromise(o,a,...n),buffer:a})}function TD(t,e){let r=Object.create(t);return Ww(r,e),r}var sy,H_e,oY,aY=Et(()=>{sy=Be("util");nY();sY();H_e=new Set(["accessSync","appendFileSync","createReadStream","createWriteStream","chmodSync","fchmodSync","chownSync","fchownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","statSync","symlinkSync","truncateSync","ftruncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),oY=new Set(["accessPromise","appendFilePromise","fchmodPromise","chmodPromise","fchownPromise","chownPromise","closePromise","copyFilePromise","linkPromise","fstatPromise","lstatPromise","lutimesPromise","mkdirPromise","openPromise","opendirPromise","readdirPromise","realpathPromise","readFilePromise","readdirPromise","readlinkPromise","renamePromise","rmdirPromise","statPromise","symlinkPromise","truncatePromise","ftruncatePromise","unlinkPromise","utimesPromise","writeFilePromise","writeSync"])});function lY(t){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return`${t}${e}`}function cY(){if(XT)return XT;let t=ue.toPortablePath(uY.default.tmpdir()),e=oe.realpathSync(t);return process.once("exit",()=>{oe.rmtempSync()}),XT={tmpdir:t,realTmpdir:e}}var uY,Lc,XT,oe,AY=Et(()=>{uY=$e(Be("os"));Hg();Ca();Lc=new Set,XT=null;oe=Object.assign(new Rn,{detachTemp(t){Lc.delete(t)},mktempSync(t){let{tmpdir:e,realTmpdir:r}=cY();for(;;){let o=lY("xfs-");try{this.mkdirSync(K.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=K.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{this.removeSync(a)}catch{}}}}},async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=cY();for(;;){let o=lY("xfs-");try{await this.mkdirPromise(K.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=K.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return await t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{await this.removePromise(a)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Lc.values()).map(async t=>{try{await oe.removePromise(t,{maxRetries:0}),Lc.delete(t)}catch{}}))},rmtempSync(){for(let t of Lc)try{oe.removeSync(t),Lc.delete(t)}catch{}}})});var Vw={};Kt(Vw,{AliasFS:()=>Uu,BasePortableFakeFS:()=>Ou,CustomDir:()=>qw,CwdFS:()=>gn,FakeFS:()=>hf,Filename:()=>dr,JailFS:()=>_u,LazyFS:()=>ny,MountFS:()=>_p,NoFS:()=>Gw,NodeFS:()=>Rn,PortablePath:()=>Bt,PosixFS:()=>Hp,ProxiedFS:()=>Ps,VirtualFS:()=>mi,constants:()=>vi,errors:()=>ar,extendFs:()=>TD,normalizeLineEndings:()=>Ug,npath:()=>ue,opendir:()=>SD,patchFs:()=>Ww,ppath:()=>K,setupCopyIndex:()=>PD,statUtils:()=>Ea,unwatchAllFiles:()=>Og,unwatchFile:()=>Mg,watchFile:()=>ry,xfs:()=>oe});var Pt=Et(()=>{T7();BD();qT();WT();U7();VT();_g();Ca();Ca();Y7();_g();K7();z7();X7();Z7();$7();Hg();eY();gf();tY();aY();AY()});var dY=_((axt,gY)=>{gY.exports=hY;hY.sync=q_e;var fY=Be("fs");function j_e(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var o=0;o{CY.exports=yY;yY.sync=G_e;var mY=Be("fs");function yY(t,e,r){mY.stat(t,function(o,a){r(o,o?!1:EY(a,e))})}function G_e(t,e){return EY(mY.statSync(t),e)}function EY(t,e){return t.isFile()&&Y_e(t,e)}function Y_e(t,e){var r=t.mode,o=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),u=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),A=parseInt("100",8),p=parseInt("010",8),h=parseInt("001",8),E=A|p,I=r&h||r&p&&a===u||r&A&&o===n||r&E&&n===0;return I}});var BY=_((uxt,IY)=>{var cxt=Be("fs"),RD;process.platform==="win32"||global.TESTING_WINDOWS?RD=dY():RD=wY();IY.exports=ZT;ZT.sync=W_e;function ZT(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(o,a){ZT(t,e||{},function(n,u){n?a(n):o(u)})})}RD(t,e||{},function(o,a){o&&(o.code==="EACCES"||e&&e.ignoreErrors)&&(o=null,a=!1),r(o,a)})}function W_e(t,e){try{return RD.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var kY=_((Axt,bY)=>{var oy=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",vY=Be("path"),V_e=oy?";":":",DY=BY(),PY=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),SY=(t,e)=>{let r=e.colon||V_e,o=t.match(/\//)||oy&&t.match(/\\/)?[""]:[...oy?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],a=oy?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",n=oy?a.split(r):[""];return oy&&t.indexOf(".")!==-1&&n[0]!==""&&n.unshift(""),{pathEnv:o,pathExt:n,pathExtExe:a}},xY=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:o,pathExt:a,pathExtExe:n}=SY(t,e),u=[],A=h=>new Promise((E,I)=>{if(h===o.length)return e.all&&u.length?E(u):I(PY(t));let v=o[h],b=/^".*"$/.test(v)?v.slice(1,-1):v,C=vY.join(b,t),T=!b&&/^\.[\\\/]/.test(t)?t.slice(0,2)+C:C;E(p(T,h,0))}),p=(h,E,I)=>new Promise((v,b)=>{if(I===a.length)return v(A(E+1));let C=a[I];DY(h+C,{pathExt:n},(T,L)=>{if(!T&&L)if(e.all)u.push(h+C);else return v(h+C);return v(p(h,E,I+1))})});return r?A(0).then(h=>r(null,h),r):A(0)},K_e=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:o,pathExtExe:a}=SY(t,e),n=[];for(let u=0;u{"use strict";var QY=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(o=>o.toUpperCase()==="PATH")||"Path"};$T.exports=QY;$T.exports.default=QY});var LY=_((pxt,NY)=>{"use strict";var TY=Be("path"),J_e=kY(),z_e=FY();function RY(t,e){let r=t.options.env||process.env,o=process.cwd(),a=t.options.cwd!=null,n=a&&process.chdir!==void 0&&!process.chdir.disabled;if(n)try{process.chdir(t.options.cwd)}catch{}let u;try{u=J_e.sync(t.command,{path:r[z_e({env:r})],pathExt:e?TY.delimiter:void 0})}catch{}finally{n&&process.chdir(o)}return u&&(u=TY.resolve(a?t.options.cwd:"",u)),u}function X_e(t){return RY(t)||RY(t,!0)}NY.exports=X_e});var MY=_((hxt,tR)=>{"use strict";var eR=/([()\][%!^"`<>&|;, *?])/g;function Z_e(t){return t=t.replace(eR,"^$1"),t}function $_e(t,e){return t=`${t}`,t=t.replace(/(\\*)"/g,'$1$1\\"'),t=t.replace(/(\\*)$/,"$1$1"),t=`"${t}"`,t=t.replace(eR,"^$1"),e&&(t=t.replace(eR,"^$1")),t}tR.exports.command=Z_e;tR.exports.argument=$_e});var UY=_((gxt,OY)=>{"use strict";OY.exports=/^#!(.*)/});var HY=_((dxt,_Y)=>{"use strict";var e8e=UY();_Y.exports=(t="")=>{let e=t.match(e8e);if(!e)return null;let[r,o]=e[0].replace(/#! ?/,"").split(" "),a=r.split("/").pop();return a==="env"?o:o?`${a} ${o}`:a}});var qY=_((mxt,jY)=>{"use strict";var rR=Be("fs"),t8e=HY();function r8e(t){let r=Buffer.alloc(150),o;try{o=rR.openSync(t,"r"),rR.readSync(o,r,0,150,0),rR.closeSync(o)}catch{}return t8e(r.toString())}jY.exports=r8e});var VY=_((yxt,WY)=>{"use strict";var n8e=Be("path"),GY=LY(),YY=MY(),i8e=qY(),s8e=process.platform==="win32",o8e=/\.(?:com|exe)$/i,a8e=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function l8e(t){t.file=GY(t);let e=t.file&&i8e(t.file);return e?(t.args.unshift(t.file),t.command=e,GY(t)):t.file}function c8e(t){if(!s8e)return t;let e=l8e(t),r=!o8e.test(e);if(t.options.forceShell||r){let o=a8e.test(e);t.command=n8e.normalize(t.command),t.command=YY.command(t.command),t.args=t.args.map(n=>YY.argument(n,o));let a=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${a}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}function u8e(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let o={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?o:c8e(o)}WY.exports=u8e});var zY=_((Ext,JY)=>{"use strict";var nR=process.platform==="win32";function iR(t,e){return Object.assign(new Error(`${e} ${t.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${t.command}`,path:t.command,spawnargs:t.args})}function A8e(t,e){if(!nR)return;let r=t.emit;t.emit=function(o,a){if(o==="exit"){let n=KY(a,e,"spawn");if(n)return r.call(t,"error",n)}return r.apply(t,arguments)}}function KY(t,e){return nR&&t===1&&!e.file?iR(e.original,"spawn"):null}function f8e(t,e){return nR&&t===1&&!e.file?iR(e.original,"spawnSync"):null}JY.exports={hookChildProcess:A8e,verifyENOENT:KY,verifyENOENTSync:f8e,notFoundError:iR}});var aR=_((Cxt,ay)=>{"use strict";var XY=Be("child_process"),sR=VY(),oR=zY();function ZY(t,e,r){let o=sR(t,e,r),a=XY.spawn(o.command,o.args,o.options);return oR.hookChildProcess(a,o),a}function p8e(t,e,r){let o=sR(t,e,r),a=XY.spawnSync(o.command,o.args,o.options);return a.error=a.error||oR.verifyENOENTSync(a.status,o),a}ay.exports=ZY;ay.exports.spawn=ZY;ay.exports.sync=p8e;ay.exports._parse=sR;ay.exports._enoent=oR});var eW=_((wxt,$Y)=>{"use strict";function h8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function qg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,qg)}h8e(qg,Error);qg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I>",S=Br(">>",!1),y=">&",F=Br(">&",!1),z=">",X=Br(">",!1),Z="<<<",ie=Br("<<<",!1),Se="<&",Ne=Br("<&",!1),ot="<",dt=Br("<",!1),jt=function(N){return{type:"argument",segments:[].concat(...N)}},$t=function(N){return N},xt="$'",an=Br("$'",!1),Qr="'",mr=Br("'",!1),xr=function(N){return[{type:"text",text:N}]},Wr='""',Vn=Br('""',!1),Ns=function(){return{type:"text",text:""}},Ri='"',ps=Br('"',!1),io=function(N){return N},Si=function(N){return{type:"arithmetic",arithmetic:N,quoted:!0}},Ls=function(N){return{type:"shell",shell:N,quoted:!0}},so=function(N){return{type:"variable",...N,quoted:!0}},cc=function(N){return{type:"text",text:N}},cu=function(N){return{type:"arithmetic",arithmetic:N,quoted:!1}},ap=function(N){return{type:"shell",shell:N,quoted:!1}},lp=function(N){return{type:"variable",...N,quoted:!1}},Ms=function(N){return{type:"glob",pattern:N}},Dn=/^[^']/,oo=Cs(["'"],!0,!1),Os=function(N){return N.join("")},ml=/^[^$"]/,yl=Cs(["$",'"'],!0,!1),ao=`\\ +`,Kn=Br(`\\ +`,!1),Mn=function(){return""},Ni="\\",On=Br("\\",!1),_i=/^[\\$"`]/,tr=Cs(["\\","$",'"',"`"],!1,!1),Me=function(N){return N},ii="\\a",Oa=Br("\\a",!1),hr=function(){return"a"},uc="\\b",uu=Br("\\b",!1),Ac=function(){return"\b"},El=/^[Ee]/,vA=Cs(["E","e"],!1,!1),Au=function(){return"\x1B"},Ce="\\f",Tt=Br("\\f",!1),fc=function(){return"\f"},Hi="\\n",fu=Br("\\n",!1),Yt=function(){return` +`},Cl="\\r",DA=Br("\\r",!1),cp=function(){return"\r"},pc="\\t",PA=Br("\\t",!1),Qn=function(){return" "},hi="\\v",hc=Br("\\v",!1),SA=function(){return"\v"},sa=/^[\\'"?]/,Li=Cs(["\\","'",'"',"?"],!1,!1),_o=function(N){return String.fromCharCode(parseInt(N,16))},Ze="\\x",lo=Br("\\x",!1),gc="\\u",pu=Br("\\u",!1),ji="\\U",hu=Br("\\U",!1),xA=function(N){return String.fromCodePoint(parseInt(N,16))},Ua=/^[0-7]/,dc=Cs([["0","7"]],!1,!1),hs=/^[0-9a-fA-f]/,_t=Cs([["0","9"],["a","f"],["A","f"]],!1,!1),Fn=cg(),Ci="{}",oa=Br("{}",!1),co=function(){return"{}"},Us="-",aa=Br("-",!1),la="+",Ho=Br("+",!1),wi=".",gs=Br(".",!1),ds=function(N,V,re){return{type:"number",value:(N==="-"?-1:1)*parseFloat(V.join("")+"."+re.join(""))}},ms=function(N,V){return{type:"number",value:(N==="-"?-1:1)*parseInt(V.join(""))}},_s=function(N){return{type:"variable",...N}},Un=function(N){return{type:"variable",name:N}},Pn=function(N){return N},ys="*",We=Br("*",!1),tt="/",It=Br("/",!1),nr=function(N,V,re){return{type:V==="*"?"multiplication":"division",right:re}},$=function(N,V){return V.reduce((re,he)=>({left:re,...he}),N)},me=function(N,V,re){return{type:V==="+"?"addition":"subtraction",right:re}},Le="$((",ft=Br("$((",!1),pt="))",Rt=Br("))",!1),er=function(N){return N},Zr="$(",qi=Br("$(",!1),es=function(N){return N},xi="${",jo=Br("${",!1),bA=":-",kA=Br(":-",!1),up=function(N,V){return{name:N,defaultValue:V}},ng=":-}",gu=Br(":-}",!1),ig=function(N){return{name:N,defaultValue:[]}},du=":+",uo=Br(":+",!1),QA=function(N,V){return{name:N,alternativeValue:V}},mc=":+}",ca=Br(":+}",!1),sg=function(N){return{name:N,alternativeValue:[]}},yc=function(N){return{name:N}},Pm="$",og=Br("$",!1),$n=function(N){return e.isGlobPattern(N)},Ap=function(N){return N},ag=/^[a-zA-Z0-9_]/,FA=Cs([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Hs=function(){return lg()},mu=/^[$@*?#a-zA-Z0-9_\-]/,Ha=Cs(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),Gi=/^[()}<>$|&; \t"']/,ua=Cs(["(",")","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),yu=/^[<>&; \t"']/,Es=Cs(["<",">","&",";"," "," ",'"',"'"],!1,!1),Ec=/^[ \t]/,Cc=Cs([" "," "],!1,!1),G=0,Dt=0,wl=[{line:1,column:1}],bi=0,wc=[],ct=0,Eu;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function lg(){return t.substring(Dt,G)}function mw(){return Ic(Dt,G)}function TA(N,V){throw V=V!==void 0?V:Ic(Dt,G),fg([Ag(N)],t.substring(Dt,G),V)}function fp(N,V){throw V=V!==void 0?V:Ic(Dt,G),Sm(N,V)}function Br(N,V){return{type:"literal",text:N,ignoreCase:V}}function Cs(N,V,re){return{type:"class",parts:N,inverted:V,ignoreCase:re}}function cg(){return{type:"any"}}function ug(){return{type:"end"}}function Ag(N){return{type:"other",description:N}}function pp(N){var V=wl[N],re;if(V)return V;for(re=N-1;!wl[re];)re--;for(V=wl[re],V={line:V.line,column:V.column};rebi&&(bi=G,wc=[]),wc.push(N))}function Sm(N,V){return new qg(N,null,null,V)}function fg(N,V,re){return new qg(qg.buildMessage(N,V),N,V,re)}function pg(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(re=Cu(),re===r&&(re=null),re!==r?(Dt=N,V=n(re),N=V):(G=N,N=r)):(G=N,N=r),N}function Cu(){var N,V,re,he,ze;if(N=G,V=wu(),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();re!==r?(he=hg(),he!==r?(ze=xm(),ze===r&&(ze=null),ze!==r?(Dt=N,V=u(V,he,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;if(N===r)if(N=G,V=wu(),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();re!==r?(he=hg(),he===r&&(he=null),he!==r?(Dt=N,V=A(V,he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;return N}function xm(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=Cu(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=p(re),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;return N}function hg(){var N;return t.charCodeAt(G)===59?(N=h,G++):(N=r,ct===0&&Ct(E)),N===r&&(t.charCodeAt(G)===38?(N=I,G++):(N=r,ct===0&&Ct(v))),N}function wu(){var N,V,re;return N=G,V=Aa(),V!==r?(re=yw(),re===r&&(re=null),re!==r?(Dt=N,V=b(V,re),N=V):(G=N,N=r)):(G=N,N=r),N}function yw(){var N,V,re,he,ze,mt,fr;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=bm(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=wu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=C(re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;return N}function bm(){var N;return t.substr(G,2)===T?(N=T,G+=2):(N=r,ct===0&&Ct(L)),N===r&&(t.substr(G,2)===U?(N=U,G+=2):(N=r,ct===0&&Ct(J))),N}function Aa(){var N,V,re;return N=G,V=gg(),V!==r?(re=Bc(),re===r&&(re=null),re!==r?(Dt=N,V=te(V,re),N=V):(G=N,N=r)):(G=N,N=r),N}function Bc(){var N,V,re,he,ze,mt,fr;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=Il(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Aa(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=le(re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;return N}function Il(){var N;return t.substr(G,2)===pe?(N=pe,G+=2):(N=r,ct===0&&Ct(Ae)),N===r&&(t.charCodeAt(G)===124?(N=ye,G++):(N=r,ct===0&&Ct(ae))),N}function Iu(){var N,V,re,he,ze,mt;if(N=G,V=Eg(),V!==r)if(t.charCodeAt(G)===61?(re=we,G++):(re=r,ct===0&&Ct(Pe)),re!==r)if(he=qo(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(Dt=N,V=g(V,he),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;else G=N,N=r;if(N===r)if(N=G,V=Eg(),V!==r)if(t.charCodeAt(G)===61?(re=we,G++):(re=r,ct===0&&Ct(Pe)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=Ee(V),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;return N}function gg(){var N,V,re,he,ze,mt,fr,Cr,yn,oi,Mi;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(t.charCodeAt(G)===40?(re=De,G++):(re=r,ct===0&&Ct(ce)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(G)===41?(fr=ne,G++):(fr=r,ct===0&&Ct(ee)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=ja();oi!==r;)yn.push(oi),oi=ja();if(yn!==r){for(oi=[],Mi=Qt();Mi!==r;)oi.push(Mi),Mi=Qt();oi!==r?(Dt=N,V=Ie(ze,yn),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(t.charCodeAt(G)===123?(re=ke,G++):(re=r,ct===0&&Ct(ht)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(G)===125?(fr=H,G++):(fr=r,ct===0&&Ct(lt)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=ja();oi!==r;)yn.push(oi),oi=ja();if(yn!==r){for(oi=[],Mi=Qt();Mi!==r;)oi.push(Mi),Mi=Qt();oi!==r?(Dt=N,V=Re(ze,yn),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){for(re=[],he=Iu();he!==r;)re.push(he),he=Iu();if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r){if(ze=[],mt=hp(),mt!==r)for(;mt!==r;)ze.push(mt),mt=hp();else ze=r;if(ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=Qe(re,ze),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r}else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){if(re=[],he=Iu(),he!==r)for(;he!==r;)re.push(he),he=Iu();else re=r;if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=be(re),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}}}return N}function RA(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){if(re=[],he=gp(),he!==r)for(;he!==r;)re.push(he),he=gp();else re=r;if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=_e(re),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r;return N}function hp(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r?(re=ja(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r),N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();V!==r?(re=gp(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r)}return N}function ja(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(Je.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(He)),re===r&&(re=null),re!==r?(he=dg(),he!==r?(ze=gp(),ze!==r?(Dt=N,V=x(re,he,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function dg(){var N;return t.substr(G,2)===w?(N=w,G+=2):(N=r,ct===0&&Ct(S)),N===r&&(t.substr(G,2)===y?(N=y,G+=2):(N=r,ct===0&&Ct(F)),N===r&&(t.charCodeAt(G)===62?(N=z,G++):(N=r,ct===0&&Ct(X)),N===r&&(t.substr(G,3)===Z?(N=Z,G+=3):(N=r,ct===0&&Ct(ie)),N===r&&(t.substr(G,2)===Se?(N=Se,G+=2):(N=r,ct===0&&Ct(Ne)),N===r&&(t.charCodeAt(G)===60?(N=ot,G++):(N=r,ct===0&&Ct(dt))))))),N}function gp(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(re=qo(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r),N}function qo(){var N,V,re;if(N=G,V=[],re=ws(),re!==r)for(;re!==r;)V.push(re),re=ws();else V=r;return V!==r&&(Dt=N,V=jt(V)),N=V,N}function ws(){var N,V;return N=G,V=Ii(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=km(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=Qm(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=Go(),V!==r&&(Dt=N,V=$t(V)),N=V))),N}function Ii(){var N,V,re,he;return N=G,t.substr(G,2)===xt?(V=xt,G+=2):(V=r,ct===0&&Ct(an)),V!==r?(re=ln(),re!==r?(t.charCodeAt(G)===39?(he=Qr,G++):(he=r,ct===0&&Ct(mr)),he!==r?(Dt=N,V=xr(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function km(){var N,V,re,he;return N=G,t.charCodeAt(G)===39?(V=Qr,G++):(V=r,ct===0&&Ct(mr)),V!==r?(re=mp(),re!==r?(t.charCodeAt(G)===39?(he=Qr,G++):(he=r,ct===0&&Ct(mr)),he!==r?(Dt=N,V=xr(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Qm(){var N,V,re,he;if(N=G,t.substr(G,2)===Wr?(V=Wr,G+=2):(V=r,ct===0&&Ct(Vn)),V!==r&&(Dt=N,V=Ns()),N=V,N===r)if(N=G,t.charCodeAt(G)===34?(V=Ri,G++):(V=r,ct===0&&Ct(ps)),V!==r){for(re=[],he=NA();he!==r;)re.push(he),he=NA();re!==r?(t.charCodeAt(G)===34?(he=Ri,G++):(he=r,ct===0&&Ct(ps)),he!==r?(Dt=N,V=io(re),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;return N}function Go(){var N,V,re;if(N=G,V=[],re=dp(),re!==r)for(;re!==r;)V.push(re),re=dp();else V=r;return V!==r&&(Dt=N,V=io(V)),N=V,N}function NA(){var N,V;return N=G,V=Gr(),V!==r&&(Dt=N,V=Si(V)),N=V,N===r&&(N=G,V=yp(),V!==r&&(Dt=N,V=Ls(V)),N=V,N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=so(V)),N=V,N===r&&(N=G,V=mg(),V!==r&&(Dt=N,V=cc(V)),N=V))),N}function dp(){var N,V;return N=G,V=Gr(),V!==r&&(Dt=N,V=cu(V)),N=V,N===r&&(N=G,V=yp(),V!==r&&(Dt=N,V=ap(V)),N=V,N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=lp(V)),N=V,N===r&&(N=G,V=Ew(),V!==r&&(Dt=N,V=Ms(V)),N=V,N===r&&(N=G,V=pa(),V!==r&&(Dt=N,V=cc(V)),N=V)))),N}function mp(){var N,V,re;for(N=G,V=[],Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo));re!==r;)V.push(re),Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo));return V!==r&&(Dt=N,V=Os(V)),N=V,N}function mg(){var N,V,re;if(N=G,V=[],re=fa(),re===r&&(ml.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(yl))),re!==r)for(;re!==r;)V.push(re),re=fa(),re===r&&(ml.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(yl)));else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function fa(){var N,V,re;return N=G,t.substr(G,2)===ao?(V=ao,G+=2):(V=r,ct===0&&Ct(Kn)),V!==r&&(Dt=N,V=Mn()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(_i.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(tr)),re!==r?(Dt=N,V=Me(re),N=V):(G=N,N=r)):(G=N,N=r)),N}function ln(){var N,V,re;for(N=G,V=[],re=Ao(),re===r&&(Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo)));re!==r;)V.push(re),re=Ao(),re===r&&(Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo)));return V!==r&&(Dt=N,V=Os(V)),N=V,N}function Ao(){var N,V,re;return N=G,t.substr(G,2)===ii?(V=ii,G+=2):(V=r,ct===0&&Ct(Oa)),V!==r&&(Dt=N,V=hr()),N=V,N===r&&(N=G,t.substr(G,2)===uc?(V=uc,G+=2):(V=r,ct===0&&Ct(uu)),V!==r&&(Dt=N,V=Ac()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(El.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(vA)),re!==r?(Dt=N,V=Au(),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===Ce?(V=Ce,G+=2):(V=r,ct===0&&Ct(Tt)),V!==r&&(Dt=N,V=fc()),N=V,N===r&&(N=G,t.substr(G,2)===Hi?(V=Hi,G+=2):(V=r,ct===0&&Ct(fu)),V!==r&&(Dt=N,V=Yt()),N=V,N===r&&(N=G,t.substr(G,2)===Cl?(V=Cl,G+=2):(V=r,ct===0&&Ct(DA)),V!==r&&(Dt=N,V=cp()),N=V,N===r&&(N=G,t.substr(G,2)===pc?(V=pc,G+=2):(V=r,ct===0&&Ct(PA)),V!==r&&(Dt=N,V=Qn()),N=V,N===r&&(N=G,t.substr(G,2)===hi?(V=hi,G+=2):(V=r,ct===0&&Ct(hc)),V!==r&&(Dt=N,V=SA()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(sa.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Li)),re!==r?(Dt=N,V=Me(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=LA()))))))))),N}function LA(){var N,V,re,he,ze,mt,fr,Cr,yn,oi,Mi,wg;return N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(re=qa(),re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===Ze?(V=Ze,G+=2):(V=r,ct===0&&Ct(lo)),V!==r?(re=G,he=G,ze=qa(),ze!==r?(mt=si(),mt!==r?(ze=[ze,mt],he=ze):(G=he,he=r)):(G=he,he=r),he===r&&(he=qa()),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===gc?(V=gc,G+=2):(V=r,ct===0&&Ct(pu)),V!==r?(re=G,he=G,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(ze=[ze,mt,fr,Cr],he=ze):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===ji?(V=ji,G+=2):(V=r,ct===0&&Ct(hu)),V!==r?(re=G,he=G,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(yn=si(),yn!==r?(oi=si(),oi!==r?(Mi=si(),Mi!==r?(wg=si(),wg!==r?(ze=[ze,mt,fr,Cr,yn,oi,Mi,wg],he=ze):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=xA(re),N=V):(G=N,N=r)):(G=N,N=r)))),N}function qa(){var N;return Ua.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(dc)),N}function si(){var N;return hs.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(_t)),N}function pa(){var N,V,re,he,ze;if(N=G,V=[],re=G,t.charCodeAt(G)===92?(he=Ni,G++):(he=r,ct===0&&Ct(On)),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re===r&&(re=G,t.substr(G,2)===Ci?(he=Ci,G+=2):(he=r,ct===0&&Ct(oa)),he!==r&&(Dt=re,he=co()),re=he,re===r&&(re=G,he=G,ct++,ze=Fm(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r))),re!==r)for(;re!==r;)V.push(re),re=G,t.charCodeAt(G)===92?(he=Ni,G++):(he=r,ct===0&&Ct(On)),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re===r&&(re=G,t.substr(G,2)===Ci?(he=Ci,G+=2):(he=r,ct===0&&Ct(oa)),he!==r&&(Dt=re,he=co()),re=he,re===r&&(re=G,he=G,ct++,ze=Fm(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r)));else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function vc(){var N,V,re,he,ze,mt;if(N=G,t.charCodeAt(G)===45?(V=Us,G++):(V=r,ct===0&&Ct(aa)),V===r&&(t.charCodeAt(G)===43?(V=la,G++):(V=r,ct===0&&Ct(Ho))),V===r&&(V=null),V!==r){if(re=[],Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He)),he!==r)for(;he!==r;)re.push(he),Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He));else re=r;if(re!==r)if(t.charCodeAt(G)===46?(he=wi,G++):(he=r,ct===0&&Ct(gs)),he!==r){if(ze=[],Je.test(t.charAt(G))?(mt=t.charAt(G),G++):(mt=r,ct===0&&Ct(He)),mt!==r)for(;mt!==r;)ze.push(mt),Je.test(t.charAt(G))?(mt=t.charAt(G),G++):(mt=r,ct===0&&Ct(He));else ze=r;ze!==r?(Dt=N,V=ds(V,re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;if(N===r){if(N=G,t.charCodeAt(G)===45?(V=Us,G++):(V=r,ct===0&&Ct(aa)),V===r&&(t.charCodeAt(G)===43?(V=la,G++):(V=r,ct===0&&Ct(Ho))),V===r&&(V=null),V!==r){if(re=[],Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He)),he!==r)for(;he!==r;)re.push(he),Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He));else re=r;re!==r?(Dt=N,V=ms(V,re),N=V):(G=N,N=r)}else G=N,N=r;if(N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=_s(V)),N=V,N===r&&(N=G,V=Ga(),V!==r&&(Dt=N,V=Un(V)),N=V,N===r)))if(N=G,t.charCodeAt(G)===40?(V=De,G++):(V=r,ct===0&&Ct(ce)),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();if(re!==r)if(he=ts(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.charCodeAt(G)===41?(mt=ne,G++):(mt=r,ct===0&&Ct(ee)),mt!==r?(Dt=N,V=Pn(he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r}return N}function Bl(){var N,V,re,he,ze,mt,fr,Cr;if(N=G,V=vc(),V!==r){for(re=[],he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===42?(mt=ys,G++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(G)===47?(mt=tt,G++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=he,ze=nr(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r;for(;he!==r;){for(re.push(he),he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===42?(mt=ys,G++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(G)===47?(mt=tt,G++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=he,ze=nr(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r}re!==r?(Dt=N,V=$(V,re),N=V):(G=N,N=r)}else G=N,N=r;return N}function ts(){var N,V,re,he,ze,mt,fr,Cr;if(N=G,V=Bl(),V!==r){for(re=[],he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===43?(mt=la,G++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(G)===45?(mt=Us,G++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=he,ze=me(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r;for(;he!==r;){for(re.push(he),he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===43?(mt=la,G++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(G)===45?(mt=Us,G++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=he,ze=me(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r}re!==r?(Dt=N,V=$(V,re),N=V):(G=N,N=r)}else G=N,N=r;return N}function Gr(){var N,V,re,he,ze,mt;if(N=G,t.substr(G,3)===Le?(V=Le,G+=3):(V=r,ct===0&&Ct(ft)),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();if(re!==r)if(he=ts(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.substr(G,2)===pt?(mt=pt,G+=2):(mt=r,ct===0&&Ct(Rt)),mt!==r?(Dt=N,V=er(he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;return N}function yp(){var N,V,re,he;return N=G,t.substr(G,2)===Zr?(V=Zr,G+=2):(V=r,ct===0&&Ct(qi)),V!==r?(re=Cu(),re!==r?(t.charCodeAt(G)===41?(he=ne,G++):(he=r,ct===0&&Ct(ee)),he!==r?(Dt=N,V=es(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Dc(){var N,V,re,he,ze,mt;return N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,2)===bA?(he=bA,G+=2):(he=r,ct===0&&Ct(kA)),he!==r?(ze=RA(),ze!==r?(t.charCodeAt(G)===125?(mt=H,G++):(mt=r,ct===0&&Ct(lt)),mt!==r?(Dt=N,V=up(re,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,3)===ng?(he=ng,G+=3):(he=r,ct===0&&Ct(gu)),he!==r?(Dt=N,V=ig(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,2)===du?(he=du,G+=2):(he=r,ct===0&&Ct(uo)),he!==r?(ze=RA(),ze!==r?(t.charCodeAt(G)===125?(mt=H,G++):(mt=r,ct===0&&Ct(lt)),mt!==r?(Dt=N,V=QA(re,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,3)===mc?(he=mc,G+=3):(he=r,ct===0&&Ct(ca)),he!==r?(Dt=N,V=sg(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.charCodeAt(G)===125?(he=H,G++):(he=r,ct===0&&Ct(lt)),he!==r?(Dt=N,V=yc(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.charCodeAt(G)===36?(V=Pm,G++):(V=r,ct===0&&Ct(og)),V!==r?(re=Ga(),re!==r?(Dt=N,V=yc(re),N=V):(G=N,N=r)):(G=N,N=r)))))),N}function Ew(){var N,V,re;return N=G,V=yg(),V!==r?(Dt=G,re=$n(V),re?re=void 0:re=r,re!==r?(Dt=N,V=Ap(V),N=V):(G=N,N=r)):(G=N,N=r),N}function yg(){var N,V,re,he,ze;if(N=G,V=[],re=G,he=G,ct++,ze=Cg(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re!==r)for(;re!==r;)V.push(re),re=G,he=G,ct++,ze=Cg(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r);else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function Eg(){var N,V,re;if(N=G,V=[],ag.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(FA)),re!==r)for(;re!==r;)V.push(re),ag.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(FA));else V=r;return V!==r&&(Dt=N,V=Hs()),N=V,N}function Ga(){var N,V,re;if(N=G,V=[],mu.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Ha)),re!==r)for(;re!==r;)V.push(re),mu.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Ha));else V=r;return V!==r&&(Dt=N,V=Hs()),N=V,N}function Fm(){var N;return Gi.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(ua)),N}function Cg(){var N;return yu.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(Es)),N}function Qt(){var N,V;if(N=[],Ec.test(t.charAt(G))?(V=t.charAt(G),G++):(V=r,ct===0&&Ct(Cc)),V!==r)for(;V!==r;)N.push(V),Ec.test(t.charAt(G))?(V=t.charAt(G),G++):(V=r,ct===0&&Ct(Cc));else N=r;return N}if(Eu=a(),Eu!==r&&G===t.length)return Eu;throw Eu!==r&&G!1}){try{return(0,tW.parse)(t,e)}catch(r){throw r.location&&(r.message=r.message.replace(/(\.)?$/,` (line ${r.location.start.line}, column ${r.location.start.column})$1`)),r}}function ly(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:o},a)=>`${MD(r)}${o===";"?a!==t.length-1||e?";":"":" &"}`).join(" ")}function MD(t){return`${cy(t.chain)}${t.then?` ${lR(t.then)}`:""}`}function lR(t){return`${t.type} ${MD(t.line)}`}function cy(t){return`${uR(t)}${t.then?` ${cR(t.then)}`:""}`}function cR(t){return`${t.type} ${cy(t.chain)}`}function uR(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>ND(e)).join(" ")} `:""}${t.args.map(e=>AR(e)).join(" ")}`;case"subshell":return`(${ly(t.subshell)})${t.args.length>0?` ${t.args.map(e=>Kw(e)).join(" ")}`:""}`;case"group":return`{ ${ly(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>Kw(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>ND(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function ND(t){return`${t.name}=${t.args[0]?Gg(t.args[0]):""}`}function AR(t){switch(t.type){case"redirection":return Kw(t);case"argument":return Gg(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function Kw(t){return`${t.subtype} ${t.args.map(e=>Gg(e)).join(" ")}`}function Gg(t){return t.segments.map(e=>fR(e)).join("")}function fR(t){let e=(o,a)=>a?`"${o}"`:o,r=o=>o===""?"''":o.match(/[()}<>$|&;"'\n\t ]/)?o.match(/['\t\p{C}]/u)?o.match(/'/)?`"${o.replace(/["$\t\p{C}]/u,m8e)}"`:`$'${o.replace(/[\t\p{C}]/u,nW)}'`:`'${o}'`:o;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`\${${ly(t.shell)}}`,t.quoted);case"variable":return e(typeof t.defaultValue>"u"?typeof t.alternativeValue>"u"?`\${${t.name}}`:t.alternativeValue.length===0?`\${${t.name}:+}`:`\${${t.name}:+${t.alternativeValue.map(o=>Gg(o)).join(" ")}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(o=>Gg(o)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${OD(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function OD(t){let e=a=>{switch(a){case"addition":return"+";case"subtraction":return"-";case"multiplication":return"*";case"division":return"/";default:throw new Error(`Can't extract operator from arithmetic expression of type "${a}"`)}},r=(a,n)=>n?`( ${a} )`:a,o=a=>r(OD(a),!["number","variable"].includes(a.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${o(t.left)} ${e(t.type)} ${o(t.right)}`}}var tW,rW,d8e,nW,m8e,iW=Et(()=>{tW=$e(eW());rW=new Map([["\f","\\f"],[` +`,"\\n"],["\r","\\r"],[" ","\\t"],["\v","\\v"],["\0","\\0"]]),d8e=new Map([["\\","\\\\"],["$","\\$"],['"','\\"'],...Array.from(rW,([t,e])=>[t,`"$'${e}'"`])]),nW=t=>rW.get(t)??`\\x${t.charCodeAt(0).toString(16).padStart(2,"0")}`,m8e=t=>d8e.get(t)??`"$'${nW(t)}'"`});var oW=_((Nxt,sW)=>{"use strict";function y8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Yg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Yg)}y8e(Yg,Error);Yg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;Ipe&&(pe=J,Ae=[]),Ae.push(He))}function lt(He,x){return new Yg(He,null,null,x)}function Re(He,x,w){return new Yg(Yg.buildMessage(He,x),He,x,w)}function Qe(){var He,x,w,S;return He=J,x=be(),x!==r?(t.charCodeAt(J)===47?(w=n,J++):(w=r,ye===0&&H(u)),w!==r?(S=be(),S!==r?(te=He,x=A(x,S),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=be(),x!==r&&(te=He,x=p(x)),He=x),He}function be(){var He,x,w,S;return He=J,x=_e(),x!==r?(t.charCodeAt(J)===64?(w=h,J++):(w=r,ye===0&&H(E)),w!==r?(S=Je(),S!==r?(te=He,x=I(x,S),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=_e(),x!==r&&(te=He,x=v(x)),He=x),He}function _e(){var He,x,w,S,y;return He=J,t.charCodeAt(J)===64?(x=h,J++):(x=r,ye===0&&H(E)),x!==r?(w=Te(),w!==r?(t.charCodeAt(J)===47?(S=n,J++):(S=r,ye===0&&H(u)),S!==r?(y=Te(),y!==r?(te=He,x=b(),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=Te(),x!==r&&(te=He,x=b()),He=x),He}function Te(){var He,x,w;if(He=J,x=[],C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(T)),w!==r)for(;w!==r;)x.push(w),C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(T));else x=r;return x!==r&&(te=He,x=b()),He=x,He}function Je(){var He,x,w;if(He=J,x=[],L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(U)),w!==r)for(;w!==r;)x.push(w),L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(U));else x=r;return x!==r&&(te=He,x=b()),He=x,He}if(ae=a(),ae!==r&&J===t.length)return ae;throw ae!==r&&J{aW=$e(oW())});var Vg=_((Mxt,Wg)=>{"use strict";function cW(t){return typeof t>"u"||t===null}function C8e(t){return typeof t=="object"&&t!==null}function w8e(t){return Array.isArray(t)?t:cW(t)?[]:[t]}function I8e(t,e){var r,o,a,n;if(e)for(n=Object.keys(e),r=0,o=n.length;r{"use strict";function Jw(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Jw.prototype=Object.create(Error.prototype);Jw.prototype.constructor=Jw;Jw.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};uW.exports=Jw});var pW=_((Uxt,fW)=>{"use strict";var AW=Vg();function pR(t,e,r,o,a){this.name=t,this.buffer=e,this.position=r,this.line=o,this.column=a}pR.prototype.getSnippet=function(e,r){var o,a,n,u,A;if(!this.buffer)return null;for(e=e||4,r=r||75,o="",a=this.position;a>0&&`\0\r +\x85\u2028\u2029`.indexOf(this.buffer.charAt(a-1))===-1;)if(a-=1,this.position-a>r/2-1){o=" ... ",a+=5;break}for(n="",u=this.position;ur/2-1){n=" ... ",u-=5;break}return A=this.buffer.slice(a,u),AW.repeat(" ",e)+o+A+n+` +`+AW.repeat(" ",e+this.position-a+o.length)+"^"};pR.prototype.toString=function(e){var r,o="";return this.name&&(o+='in "'+this.name+'" '),o+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(o+=`: +`+r)),o};fW.exports=pR});var os=_((_xt,gW)=>{"use strict";var hW=uy(),D8e=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],P8e=["scalar","sequence","mapping"];function S8e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(o){e[String(o)]=r})}),e}function x8e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(D8e.indexOf(r)===-1)throw new hW('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=S8e(e.styleAliases||null),P8e.indexOf(this.kind)===-1)throw new hW('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}gW.exports=x8e});var Kg=_((Hxt,mW)=>{"use strict";var dW=Vg(),HD=uy(),b8e=os();function hR(t,e,r){var o=[];return t.include.forEach(function(a){r=hR(a,e,r)}),t[e].forEach(function(a){r.forEach(function(n,u){n.tag===a.tag&&n.kind===a.kind&&o.push(u)}),r.push(a)}),r.filter(function(a,n){return o.indexOf(n)===-1})}function k8e(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function o(a){t[a.kind][a.tag]=t.fallback[a.tag]=a}for(e=0,r=arguments.length;e{"use strict";var Q8e=os();yW.exports=new Q8e("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var wW=_((qxt,CW)=>{"use strict";var F8e=os();CW.exports=new F8e("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var BW=_((Gxt,IW)=>{"use strict";var T8e=os();IW.exports=new T8e("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var jD=_((Yxt,vW)=>{"use strict";var R8e=Kg();vW.exports=new R8e({explicit:[EW(),wW(),BW()]})});var PW=_((Wxt,DW)=>{"use strict";var N8e=os();function L8e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function M8e(){return null}function O8e(t){return t===null}DW.exports=new N8e("tag:yaml.org,2002:null",{kind:"scalar",resolve:L8e,construct:M8e,predicate:O8e,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var xW=_((Vxt,SW)=>{"use strict";var U8e=os();function _8e(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function H8e(t){return t==="true"||t==="True"||t==="TRUE"}function j8e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}SW.exports=new U8e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:_8e,construct:H8e,predicate:j8e,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})});var kW=_((Kxt,bW)=>{"use strict";var q8e=Vg(),G8e=os();function Y8e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function W8e(t){return 48<=t&&t<=55}function V8e(t){return 48<=t&&t<=57}function K8e(t){if(t===null)return!1;var e=t.length,r=0,o=!1,a;if(!e)return!1;if(a=t[r],(a==="-"||a==="+")&&(a=t[++r]),a==="0"){if(r+1===e)return!0;if(a=t[++r],a==="b"){for(r++;r=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0"+t.toString(8):"-0"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var TW=_((Jxt,FW)=>{"use strict";var QW=Vg(),X8e=os(),Z8e=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function $8e(t){return!(t===null||!Z8e.test(t)||t[t.length-1]==="_")}function eHe(t){var e,r,o,a;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,a=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(n){a.unshift(parseFloat(n,10))}),e=0,o=1,a.forEach(function(n){e+=n*o,o*=60}),r*e):r*parseFloat(e,10)}var tHe=/^[-+]?[0-9]+e/;function rHe(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(QW.isNegativeZero(t))return"-0.0";return r=t.toString(10),tHe.test(r)?r.replace("e",".e"):r}function nHe(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||QW.isNegativeZero(t))}FW.exports=new X8e("tag:yaml.org,2002:float",{kind:"scalar",resolve:$8e,construct:eHe,predicate:nHe,represent:rHe,defaultStyle:"lowercase"})});var gR=_((zxt,RW)=>{"use strict";var iHe=Kg();RW.exports=new iHe({include:[jD()],implicit:[PW(),xW(),kW(),TW()]})});var dR=_((Xxt,NW)=>{"use strict";var sHe=Kg();NW.exports=new sHe({include:[gR()]})});var UW=_((Zxt,OW)=>{"use strict";var oHe=os(),LW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),MW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function aHe(t){return t===null?!1:LW.exec(t)!==null||MW.exec(t)!==null}function lHe(t){var e,r,o,a,n,u,A,p=0,h=null,E,I,v;if(e=LW.exec(t),e===null&&(e=MW.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],o=+e[2]-1,a=+e[3],!e[4])return new Date(Date.UTC(r,o,a));if(n=+e[4],u=+e[5],A=+e[6],e[7]){for(p=e[7].slice(0,3);p.length<3;)p+="0";p=+p}return e[9]&&(E=+e[10],I=+(e[11]||0),h=(E*60+I)*6e4,e[9]==="-"&&(h=-h)),v=new Date(Date.UTC(r,o,a,n,u,A,p)),h&&v.setTime(v.getTime()-h),v}function cHe(t){return t.toISOString()}OW.exports=new oHe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:aHe,construct:lHe,instanceOf:Date,represent:cHe})});var HW=_(($xt,_W)=>{"use strict";var uHe=os();function AHe(t){return t==="<<"||t===null}_W.exports=new uHe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:AHe})});var GW=_((ebt,qW)=>{"use strict";var Jg;try{jW=Be,Jg=jW("buffer").Buffer}catch{}var jW,fHe=os(),mR=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function pHe(t){if(t===null)return!1;var e,r,o=0,a=t.length,n=mR;for(r=0;r64)){if(e<0)return!1;o+=6}return o%8===0}function hHe(t){var e,r,o=t.replace(/[\r\n=]/g,""),a=o.length,n=mR,u=0,A=[];for(e=0;e>16&255),A.push(u>>8&255),A.push(u&255)),u=u<<6|n.indexOf(o.charAt(e));return r=a%4*6,r===0?(A.push(u>>16&255),A.push(u>>8&255),A.push(u&255)):r===18?(A.push(u>>10&255),A.push(u>>2&255)):r===12&&A.push(u>>4&255),Jg?Jg.from?Jg.from(A):new Jg(A):A}function gHe(t){var e="",r=0,o,a,n=t.length,u=mR;for(o=0;o>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]),r=(r<<8)+t[o];return a=n%3,a===0?(e+=u[r>>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]):a===2?(e+=u[r>>10&63],e+=u[r>>4&63],e+=u[r<<2&63],e+=u[64]):a===1&&(e+=u[r>>2&63],e+=u[r<<4&63],e+=u[64],e+=u[64]),e}function dHe(t){return Jg&&Jg.isBuffer(t)}qW.exports=new fHe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:pHe,construct:hHe,predicate:dHe,represent:gHe})});var WW=_((rbt,YW)=>{"use strict";var mHe=os(),yHe=Object.prototype.hasOwnProperty,EHe=Object.prototype.toString;function CHe(t){if(t===null)return!0;var e=[],r,o,a,n,u,A=t;for(r=0,o=A.length;r{"use strict";var IHe=os(),BHe=Object.prototype.toString;function vHe(t){if(t===null)return!0;var e,r,o,a,n,u=t;for(n=new Array(u.length),e=0,r=u.length;e{"use strict";var PHe=os(),SHe=Object.prototype.hasOwnProperty;function xHe(t){if(t===null)return!0;var e,r=t;for(e in r)if(SHe.call(r,e)&&r[e]!==null)return!1;return!0}function bHe(t){return t!==null?t:{}}JW.exports=new PHe("tag:yaml.org,2002:set",{kind:"mapping",resolve:xHe,construct:bHe})});var fy=_((sbt,XW)=>{"use strict";var kHe=Kg();XW.exports=new kHe({include:[dR()],implicit:[UW(),HW()],explicit:[GW(),WW(),KW(),zW()]})});var $W=_((obt,ZW)=>{"use strict";var QHe=os();function FHe(){return!0}function THe(){}function RHe(){return""}function NHe(t){return typeof t>"u"}ZW.exports=new QHe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:FHe,construct:THe,predicate:NHe,represent:RHe})});var tV=_((abt,eV)=>{"use strict";var LHe=os();function MHe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),o="";return!(e[0]==="/"&&(r&&(o=r[1]),o.length>3||e[e.length-o.length-1]!=="/"))}function OHe(t){var e=t,r=/\/([gim]*)$/.exec(t),o="";return e[0]==="/"&&(r&&(o=r[1]),e=e.slice(1,e.length-o.length-1)),new RegExp(e,o)}function UHe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function _He(t){return Object.prototype.toString.call(t)==="[object RegExp]"}eV.exports=new LHe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:MHe,construct:OHe,predicate:_He,represent:UHe})});var iV=_((lbt,nV)=>{"use strict";var qD;try{rV=Be,qD=rV("esprima")}catch{typeof window<"u"&&(qD=window.esprima)}var rV,HHe=os();function jHe(t){if(t===null)return!1;try{var e="("+t+")",r=qD.parse(e,{range:!0});return!(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function qHe(t){var e="("+t+")",r=qD.parse(e,{range:!0}),o=[],a;if(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(n){o.push(n.name)}),a=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(o,e.slice(a[0]+1,a[1]-1)):new Function(o,"return "+e.slice(a[0],a[1]))}function GHe(t){return t.toString()}function YHe(t){return Object.prototype.toString.call(t)==="[object Function]"}nV.exports=new HHe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:jHe,construct:qHe,predicate:YHe,represent:GHe})});var zw=_((ubt,oV)=>{"use strict";var sV=Kg();oV.exports=sV.DEFAULT=new sV({include:[fy()],explicit:[$W(),tV(),iV()]})});var DV=_((Abt,Xw)=>{"use strict";var mf=Vg(),pV=uy(),WHe=pW(),hV=fy(),VHe=zw(),Gp=Object.prototype.hasOwnProperty,GD=1,gV=2,dV=3,YD=4,yR=1,KHe=2,aV=3,JHe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,zHe=/[\x85\u2028\u2029]/,XHe=/[,\[\]\{\}]/,mV=/^(?:!|!!|![a-z\-]+!)$/i,yV=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function lV(t){return Object.prototype.toString.call(t)}function Hu(t){return t===10||t===13}function Xg(t){return t===9||t===32}function Ia(t){return t===9||t===32||t===10||t===13}function py(t){return t===44||t===91||t===93||t===123||t===125}function ZHe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function $He(t){return t===120?2:t===117?4:t===85?8:0}function e6e(t){return 48<=t&&t<=57?t-48:-1}function cV(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?` +`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function t6e(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var EV=new Array(256),CV=new Array(256);for(zg=0;zg<256;zg++)EV[zg]=cV(zg)?1:0,CV[zg]=cV(zg);var zg;function r6e(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||VHe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function wV(t,e){return new pV(e,new WHe(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function Sr(t,e){throw wV(t,e)}function WD(t,e){t.onWarning&&t.onWarning.call(null,wV(t,e))}var uV={YAML:function(e,r,o){var a,n,u;e.version!==null&&Sr(e,"duplication of %YAML directive"),o.length!==1&&Sr(e,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(o[0]),a===null&&Sr(e,"ill-formed argument of the YAML directive"),n=parseInt(a[1],10),u=parseInt(a[2],10),n!==1&&Sr(e,"unacceptable YAML version of the document"),e.version=o[0],e.checkLineBreaks=u<2,u!==1&&u!==2&&WD(e,"unsupported YAML version of the document")},TAG:function(e,r,o){var a,n;o.length!==2&&Sr(e,"TAG directive accepts exactly two arguments"),a=o[0],n=o[1],mV.test(a)||Sr(e,"ill-formed tag handle (first argument) of the TAG directive"),Gp.call(e.tagMap,a)&&Sr(e,'there is a previously declared suffix for "'+a+'" tag handle'),yV.test(n)||Sr(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[a]=n}};function qp(t,e,r,o){var a,n,u,A;if(e1&&(t.result+=mf.repeat(` +`,e-1))}function n6e(t,e,r){var o,a,n,u,A,p,h,E,I=t.kind,v=t.result,b;if(b=t.input.charCodeAt(t.position),Ia(b)||py(b)||b===35||b===38||b===42||b===33||b===124||b===62||b===39||b===34||b===37||b===64||b===96||(b===63||b===45)&&(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&py(a)))return!1;for(t.kind="scalar",t.result="",n=u=t.position,A=!1;b!==0;){if(b===58){if(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&py(a))break}else if(b===35){if(o=t.input.charCodeAt(t.position-1),Ia(o))break}else{if(t.position===t.lineStart&&VD(t)||r&&py(b))break;if(Hu(b))if(p=t.line,h=t.lineStart,E=t.lineIndent,Wi(t,!1,-1),t.lineIndent>=e){A=!0,b=t.input.charCodeAt(t.position);continue}else{t.position=u,t.line=p,t.lineStart=h,t.lineIndent=E;break}}A&&(qp(t,n,u,!1),CR(t,t.line-p),n=u=t.position,A=!1),Xg(b)||(u=t.position+1),b=t.input.charCodeAt(++t.position)}return qp(t,n,u,!1),t.result?!0:(t.kind=I,t.result=v,!1)}function i6e(t,e){var r,o,a;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,o=a=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(qp(t,o,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)o=t.position,t.position++,a=t.position;else return!0;else Hu(r)?(qp(t,o,a,!0),CR(t,Wi(t,!1,e)),o=a=t.position):t.position===t.lineStart&&VD(t)?Sr(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Sr(t,"unexpected end of the stream within a single quoted scalar")}function s6e(t,e){var r,o,a,n,u,A;if(A=t.input.charCodeAt(t.position),A!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=o=t.position;(A=t.input.charCodeAt(t.position))!==0;){if(A===34)return qp(t,r,t.position,!0),t.position++,!0;if(A===92){if(qp(t,r,t.position,!0),A=t.input.charCodeAt(++t.position),Hu(A))Wi(t,!1,e);else if(A<256&&EV[A])t.result+=CV[A],t.position++;else if((u=$He(A))>0){for(a=u,n=0;a>0;a--)A=t.input.charCodeAt(++t.position),(u=ZHe(A))>=0?n=(n<<4)+u:Sr(t,"expected hexadecimal character");t.result+=t6e(n),t.position++}else Sr(t,"unknown escape sequence");r=o=t.position}else Hu(A)?(qp(t,r,o,!0),CR(t,Wi(t,!1,e)),r=o=t.position):t.position===t.lineStart&&VD(t)?Sr(t,"unexpected end of the document within a double quoted scalar"):(t.position++,o=t.position)}Sr(t,"unexpected end of the stream within a double quoted scalar")}function o6e(t,e){var r=!0,o,a=t.tag,n,u=t.anchor,A,p,h,E,I,v={},b,C,T,L;if(L=t.input.charCodeAt(t.position),L===91)p=93,I=!1,n=[];else if(L===123)p=125,I=!0,n={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=n),L=t.input.charCodeAt(++t.position);L!==0;){if(Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===p)return t.position++,t.tag=a,t.anchor=u,t.kind=I?"mapping":"sequence",t.result=n,!0;r||Sr(t,"missed comma between flow collection entries"),C=b=T=null,h=E=!1,L===63&&(A=t.input.charCodeAt(t.position+1),Ia(A)&&(h=E=!0,t.position++,Wi(t,!0,e))),o=t.line,gy(t,e,GD,!1,!0),C=t.tag,b=t.result,Wi(t,!0,e),L=t.input.charCodeAt(t.position),(E||t.line===o)&&L===58&&(h=!0,L=t.input.charCodeAt(++t.position),Wi(t,!0,e),gy(t,e,GD,!1,!0),T=t.result),I?hy(t,n,v,C,b,T):h?n.push(hy(t,null,v,C,b,T)):n.push(b),Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===44?(r=!0,L=t.input.charCodeAt(++t.position)):r=!1}Sr(t,"unexpected end of the stream within a flow collection")}function a6e(t,e){var r,o,a=yR,n=!1,u=!1,A=e,p=0,h=!1,E,I;if(I=t.input.charCodeAt(t.position),I===124)o=!1;else if(I===62)o=!0;else return!1;for(t.kind="scalar",t.result="";I!==0;)if(I=t.input.charCodeAt(++t.position),I===43||I===45)yR===a?a=I===43?aV:KHe:Sr(t,"repeat of a chomping mode identifier");else if((E=e6e(I))>=0)E===0?Sr(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?Sr(t,"repeat of an indentation width identifier"):(A=e+E-1,u=!0);else break;if(Xg(I)){do I=t.input.charCodeAt(++t.position);while(Xg(I));if(I===35)do I=t.input.charCodeAt(++t.position);while(!Hu(I)&&I!==0)}for(;I!==0;){for(ER(t),t.lineIndent=0,I=t.input.charCodeAt(t.position);(!u||t.lineIndentA&&(A=t.lineIndent),Hu(I)){p++;continue}if(t.lineIndente)&&p!==0)Sr(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(gy(t,e,YD,!0,a)&&(C?v=t.result:b=t.result),C||(hy(t,h,E,I,v,b,n,u),I=v=b=null),Wi(t,!0,-1),L=t.input.charCodeAt(t.position)),t.lineIndent>e&&L!==0)Sr(t,"bad indentation of a mapping entry");else if(t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),I=0,v=t.implicitTypes.length;I tag; it should be "'+b.kind+'", not "'+t.kind+'"'),b.resolve(t.result)?(t.result=b.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Sr(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):Sr(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||E}function f6e(t){var e=t.position,r,o,a,n=!1,u;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(u=t.input.charCodeAt(t.position))!==0&&(Wi(t,!0,-1),u=t.input.charCodeAt(t.position),!(t.lineIndent>0||u!==37));){for(n=!0,u=t.input.charCodeAt(++t.position),r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);for(o=t.input.slice(r,t.position),a=[],o.length<1&&Sr(t,"directive name must not be less than one character in length");u!==0;){for(;Xg(u);)u=t.input.charCodeAt(++t.position);if(u===35){do u=t.input.charCodeAt(++t.position);while(u!==0&&!Hu(u));break}if(Hu(u))break;for(r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);a.push(t.input.slice(r,t.position))}u!==0&&ER(t),Gp.call(uV,o)?uV[o](t,o,a):WD(t,'unknown document directive "'+o+'"')}if(Wi(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Wi(t,!0,-1)):n&&Sr(t,"directives end mark is expected"),gy(t,t.lineIndent-1,YD,!1,!0),Wi(t,!0,-1),t.checkLineBreaks&&zHe.test(t.input.slice(e,t.position))&&WD(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&VD(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Wi(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var o=IV(t,r);if(typeof e!="function")return o;for(var a=0,n=o.length;a"u"&&(r=e,e=null),BV(t,e,mf.extend({schema:hV},r))}function h6e(t,e){return vV(t,mf.extend({schema:hV},e))}Xw.exports.loadAll=BV;Xw.exports.load=vV;Xw.exports.safeLoadAll=p6e;Xw.exports.safeLoad=h6e});var KV=_((fbt,vR)=>{"use strict";var $w=Vg(),eI=uy(),g6e=zw(),d6e=fy(),TV=Object.prototype.toString,RV=Object.prototype.hasOwnProperty,m6e=9,Zw=10,y6e=13,E6e=32,C6e=33,w6e=34,NV=35,I6e=37,B6e=38,v6e=39,D6e=42,LV=44,P6e=45,MV=58,S6e=61,x6e=62,b6e=63,k6e=64,OV=91,UV=93,Q6e=96,_V=123,F6e=124,HV=125,vo={};vo[0]="\\0";vo[7]="\\a";vo[8]="\\b";vo[9]="\\t";vo[10]="\\n";vo[11]="\\v";vo[12]="\\f";vo[13]="\\r";vo[27]="\\e";vo[34]='\\"';vo[92]="\\\\";vo[133]="\\N";vo[160]="\\_";vo[8232]="\\L";vo[8233]="\\P";var T6e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function R6e(t,e){var r,o,a,n,u,A,p;if(e===null)return{};for(r={},o=Object.keys(e),a=0,n=o.length;a0?t.charCodeAt(n-1):null,v=v&&xV(u,A)}else{for(n=0;no&&t[I+1]!==" ",I=n);else if(!dy(u))return KD;A=n>0?t.charCodeAt(n-1):null,v=v&&xV(u,A)}h=h||E&&n-I-1>o&&t[I+1]!==" "}return!p&&!h?v&&!a(t)?qV:GV:r>9&&jV(t)?KD:h?WV:YV}function _6e(t,e,r,o){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&T6e.indexOf(e)!==-1)return"'"+e+"'";var a=t.indent*Math.max(1,r),n=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),u=o||t.flowLevel>-1&&r>=t.flowLevel;function A(p){return L6e(t,p)}switch(U6e(e,u,t.indent,n,A)){case qV:return e;case GV:return"'"+e.replace(/'/g,"''")+"'";case YV:return"|"+bV(e,t.indent)+kV(SV(e,a));case WV:return">"+bV(e,t.indent)+kV(SV(H6e(e,n),a));case KD:return'"'+j6e(e,n)+'"';default:throw new eI("impossible error: invalid scalar style")}}()}function bV(t,e){var r=jV(t)?String(e):"",o=t[t.length-1]===` +`,a=o&&(t[t.length-2]===` +`||t===` +`),n=a?"+":o?"":"-";return r+n+` +`}function kV(t){return t[t.length-1]===` +`?t.slice(0,-1):t}function H6e(t,e){for(var r=/(\n+)([^\n]*)/g,o=function(){var h=t.indexOf(` +`);return h=h!==-1?h:t.length,r.lastIndex=h,QV(t.slice(0,h),e)}(),a=t[0]===` +`||t[0]===" ",n,u;u=r.exec(t);){var A=u[1],p=u[2];n=p[0]===" ",o+=A+(!a&&!n&&p!==""?` +`:"")+QV(p,e),a=n}return o}function QV(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,o,a=0,n,u=0,A=0,p="";o=r.exec(t);)A=o.index,A-a>e&&(n=u>a?u:A,p+=` +`+t.slice(a,n),a=n+1),u=A;return p+=` +`,t.length-a>e&&u>a?p+=t.slice(a,u)+` +`+t.slice(u+1):p+=t.slice(a),p.slice(1)}function j6e(t){for(var e="",r,o,a,n=0;n=55296&&r<=56319&&(o=t.charCodeAt(n+1),o>=56320&&o<=57343)){e+=PV((r-55296)*1024+o-56320+65536),n++;continue}a=vo[r],e+=!a&&dy(r)?t[n]:a||PV(r)}return e}function q6e(t,e,r){var o="",a=t.tag,n,u;for(n=0,u=r.length;n1024&&(E+="? "),E+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Zg(t,e,h,!1,!1)&&(E+=t.dump,o+=E));t.tag=a,t.dump="{"+o+"}"}function W6e(t,e,r,o){var a="",n=t.tag,u=Object.keys(r),A,p,h,E,I,v;if(t.sortKeys===!0)u.sort();else if(typeof t.sortKeys=="function")u.sort(t.sortKeys);else if(t.sortKeys)throw new eI("sortKeys must be a boolean or a function");for(A=0,p=u.length;A1024,I&&(t.dump&&Zw===t.dump.charCodeAt(0)?v+="?":v+="? "),v+=t.dump,I&&(v+=wR(t,e)),Zg(t,e+1,E,!0,I)&&(t.dump&&Zw===t.dump.charCodeAt(0)?v+=":":v+=": ",v+=t.dump,a+=v));t.tag=n,t.dump=a||"{}"}function FV(t,e,r){var o,a,n,u,A,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,u=a.length;n tag resolver accepts not "'+p+'" style');t.dump=o}return!0}return!1}function Zg(t,e,r,o,a,n){t.tag=null,t.dump=r,FV(t,r,!1)||FV(t,r,!0);var u=TV.call(t.dump);o&&(o=t.flowLevel<0||t.flowLevel>e);var A=u==="[object Object]"||u==="[object Array]",p,h;if(A&&(p=t.duplicates.indexOf(r),h=p!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&e>0)&&(a=!1),h&&t.usedDuplicates[p])t.dump="*ref_"+p;else{if(A&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),u==="[object Object]")o&&Object.keys(t.dump).length!==0?(W6e(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(Y6e(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(u==="[object Array]"){var E=t.noArrayIndent&&e>0?e-1:e;o&&t.dump.length!==0?(G6e(t,E,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(q6e(t,E,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(u==="[object String]")t.tag!=="?"&&_6e(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new eI("unacceptable kind of an object to dump "+u)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function V6e(t,e){var r=[],o=[],a,n;for(IR(t,r,o),a=0,n=o.length;a{"use strict";var JD=DV(),JV=KV();function zD(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}ki.exports.Type=os();ki.exports.Schema=Kg();ki.exports.FAILSAFE_SCHEMA=jD();ki.exports.JSON_SCHEMA=gR();ki.exports.CORE_SCHEMA=dR();ki.exports.DEFAULT_SAFE_SCHEMA=fy();ki.exports.DEFAULT_FULL_SCHEMA=zw();ki.exports.load=JD.load;ki.exports.loadAll=JD.loadAll;ki.exports.safeLoad=JD.safeLoad;ki.exports.safeLoadAll=JD.safeLoadAll;ki.exports.dump=JV.dump;ki.exports.safeDump=JV.safeDump;ki.exports.YAMLException=uy();ki.exports.MINIMAL_SCHEMA=jD();ki.exports.SAFE_SCHEMA=fy();ki.exports.DEFAULT_SCHEMA=zw();ki.exports.scan=zD("scan");ki.exports.parse=zD("parse");ki.exports.compose=zD("compose");ki.exports.addConstructor=zD("addConstructor")});var ZV=_((hbt,XV)=>{"use strict";var J6e=zV();XV.exports=J6e});var eK=_((gbt,$V)=>{"use strict";function z6e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function $g(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,$g)}z6e($g,Error);$g.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I({[ft]:Le})))},pe=function($){return $},Ae=function($){return $},ye=sa("correct indentation"),ae=" ",we=Qn(" ",!1),Pe=function($){return $.length===nr*It},g=function($){return $.length===(nr+1)*It},Ee=function(){return nr++,!0},De=function(){return nr--,!0},ce=function(){return DA()},ne=sa("pseudostring"),ee=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,Ie=hi(["\r",` +`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),ke=/^[^\r\n\t ,\][{}:#"']/,ht=hi(["\r",` +`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),H=function(){return DA().replace(/^ *| *$/g,"")},lt="--",Re=Qn("--",!1),Qe=/^[a-zA-Z\/0-9]/,be=hi([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),_e=/^[^\r\n\t :,]/,Te=hi(["\r",` +`," "," ",":",","],!0,!1),Je="null",He=Qn("null",!1),x=function(){return null},w="true",S=Qn("true",!1),y=function(){return!0},F="false",z=Qn("false",!1),X=function(){return!1},Z=sa("string"),ie='"',Se=Qn('"',!1),Ne=function(){return""},ot=function($){return $},dt=function($){return $.join("")},jt=/^[^"\\\0-\x1F\x7F]/,$t=hi(['"',"\\",["\0",""],"\x7F"],!0,!1),xt='\\"',an=Qn('\\"',!1),Qr=function(){return'"'},mr="\\\\",xr=Qn("\\\\",!1),Wr=function(){return"\\"},Vn="\\/",Ns=Qn("\\/",!1),Ri=function(){return"/"},ps="\\b",io=Qn("\\b",!1),Si=function(){return"\b"},Ls="\\f",so=Qn("\\f",!1),cc=function(){return"\f"},cu="\\n",ap=Qn("\\n",!1),lp=function(){return` +`},Ms="\\r",Dn=Qn("\\r",!1),oo=function(){return"\r"},Os="\\t",ml=Qn("\\t",!1),yl=function(){return" "},ao="\\u",Kn=Qn("\\u",!1),Mn=function($,me,Le,ft){return String.fromCharCode(parseInt(`0x${$}${me}${Le}${ft}`))},Ni=/^[0-9a-fA-F]/,On=hi([["0","9"],["a","f"],["A","F"]],!1,!1),_i=sa("blank space"),tr=/^[ \t]/,Me=hi([" "," "],!1,!1),ii=sa("white space"),Oa=/^[ \t\n\r]/,hr=hi([" "," ",` +`,"\r"],!1,!1),uc=`\r +`,uu=Qn(`\r +`,!1),Ac=` +`,El=Qn(` +`,!1),vA="\r",Au=Qn("\r",!1),Ce=0,Tt=0,fc=[{line:1,column:1}],Hi=0,fu=[],Yt=0,Cl;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function DA(){return t.substring(Tt,Ce)}function cp(){return _o(Tt,Ce)}function pc($,me){throw me=me!==void 0?me:_o(Tt,Ce),gc([sa($)],t.substring(Tt,Ce),me)}function PA($,me){throw me=me!==void 0?me:_o(Tt,Ce),lo($,me)}function Qn($,me){return{type:"literal",text:$,ignoreCase:me}}function hi($,me,Le){return{type:"class",parts:$,inverted:me,ignoreCase:Le}}function hc(){return{type:"any"}}function SA(){return{type:"end"}}function sa($){return{type:"other",description:$}}function Li($){var me=fc[$],Le;if(me)return me;for(Le=$-1;!fc[Le];)Le--;for(me=fc[Le],me={line:me.line,column:me.column};Le<$;)t.charCodeAt(Le)===10?(me.line++,me.column=1):me.column++,Le++;return fc[$]=me,me}function _o($,me){var Le=Li($),ft=Li(me);return{start:{offset:$,line:Le.line,column:Le.column},end:{offset:me,line:ft.line,column:ft.column}}}function Ze($){CeHi&&(Hi=Ce,fu=[]),fu.push($))}function lo($,me){return new $g($,null,null,me)}function gc($,me,Le){return new $g($g.buildMessage($,me),$,me,Le)}function pu(){var $;return $=xA(),$}function ji(){var $,me,Le;for($=Ce,me=[],Le=hu();Le!==r;)me.push(Le),Le=hu();return me!==r&&(Tt=$,me=n(me)),$=me,$}function hu(){var $,me,Le,ft,pt;return $=Ce,me=hs(),me!==r?(t.charCodeAt(Ce)===45?(Le=u,Ce++):(Le=r,Yt===0&&Ze(A)),Le!==r?(ft=Pn(),ft!==r?(pt=dc(),pt!==r?(Tt=$,me=p(pt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$}function xA(){var $,me,Le;for($=Ce,me=[],Le=Ua();Le!==r;)me.push(Le),Le=Ua();return me!==r&&(Tt=$,me=h(me)),$=me,$}function Ua(){var $,me,Le,ft,pt,Rt,er,Zr,qi;if($=Ce,me=Pn(),me===r&&(me=null),me!==r){if(Le=Ce,t.charCodeAt(Ce)===35?(ft=E,Ce++):(ft=r,Yt===0&&Ze(I)),ft!==r){if(pt=[],Rt=Ce,er=Ce,Yt++,Zr=tt(),Yt--,Zr===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?(Zr=t.charAt(Ce),Ce++):(Zr=r,Yt===0&&Ze(v)),Zr!==r?(er=[er,Zr],Rt=er):(Ce=Rt,Rt=r)):(Ce=Rt,Rt=r),Rt!==r)for(;Rt!==r;)pt.push(Rt),Rt=Ce,er=Ce,Yt++,Zr=tt(),Yt--,Zr===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?(Zr=t.charAt(Ce),Ce++):(Zr=r,Yt===0&&Ze(v)),Zr!==r?(er=[er,Zr],Rt=er):(Ce=Rt,Rt=r)):(Ce=Rt,Rt=r);else pt=r;pt!==r?(ft=[ft,pt],Le=ft):(Ce=Le,Le=r)}else Ce=Le,Le=r;if(Le===r&&(Le=null),Le!==r){if(ft=[],pt=We(),pt!==r)for(;pt!==r;)ft.push(pt),pt=We();else ft=r;ft!==r?(Tt=$,me=b(),$=me):(Ce=$,$=r)}else Ce=$,$=r}else Ce=$,$=r;if($===r&&($=Ce,me=hs(),me!==r?(Le=oa(),Le!==r?(ft=Pn(),ft===r&&(ft=null),ft!==r?(t.charCodeAt(Ce)===58?(pt=C,Ce++):(pt=r,Yt===0&&Ze(T)),pt!==r?(Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(er=dc(),er!==r?(Tt=$,me=L(Le,er),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,me=hs(),me!==r?(Le=co(),Le!==r?(ft=Pn(),ft===r&&(ft=null),ft!==r?(t.charCodeAt(Ce)===58?(pt=C,Ce++):(pt=r,Yt===0&&Ze(T)),pt!==r?(Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(er=dc(),er!==r?(Tt=$,me=L(Le,er),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))){if($=Ce,me=hs(),me!==r)if(Le=co(),Le!==r)if(ft=Pn(),ft!==r)if(pt=aa(),pt!==r){if(Rt=[],er=We(),er!==r)for(;er!==r;)Rt.push(er),er=We();else Rt=r;Rt!==r?(Tt=$,me=L(Le,pt),$=me):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;if($===r)if($=Ce,me=hs(),me!==r)if(Le=co(),Le!==r){if(ft=[],pt=Ce,Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?(Zr=Pn(),Zr===r&&(Zr=null),Zr!==r?(qi=co(),qi!==r?(Tt=pt,Rt=te(Le,qi),pt=Rt):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r),pt!==r)for(;pt!==r;)ft.push(pt),pt=Ce,Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?(Zr=Pn(),Zr===r&&(Zr=null),Zr!==r?(qi=co(),qi!==r?(Tt=pt,Rt=te(Le,qi),pt=Rt):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r);else ft=r;ft!==r?(pt=Pn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(Ce)===58?(Rt=C,Ce++):(Rt=r,Yt===0&&Ze(T)),Rt!==r?(er=Pn(),er===r&&(er=null),er!==r?(Zr=dc(),Zr!==r?(Tt=$,me=le(Le,ft,Zr),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r}return $}function dc(){var $,me,Le,ft,pt,Rt,er;if($=Ce,me=Ce,Yt++,Le=Ce,ft=tt(),ft!==r?(pt=_t(),pt!==r?(t.charCodeAt(Ce)===45?(Rt=u,Ce++):(Rt=r,Yt===0&&Ze(A)),Rt!==r?(er=Pn(),er!==r?(ft=[ft,pt,Rt,er],Le=ft):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r),Yt--,Le!==r?(Ce=me,me=void 0):me=r,me!==r?(Le=We(),Le!==r?(ft=Fn(),ft!==r?(pt=ji(),pt!==r?(Rt=Ci(),Rt!==r?(Tt=$,me=pe(pt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,me=tt(),me!==r?(Le=Fn(),Le!==r?(ft=xA(),ft!==r?(pt=Ci(),pt!==r?(Tt=$,me=pe(ft),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))if($=Ce,me=Us(),me!==r){if(Le=[],ft=We(),ft!==r)for(;ft!==r;)Le.push(ft),ft=We();else Le=r;Le!==r?(Tt=$,me=Ae(me),$=me):(Ce=$,$=r)}else Ce=$,$=r;return $}function hs(){var $,me,Le;for(Yt++,$=Ce,me=[],t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));Le!==r;)me.push(Le),t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));return me!==r?(Tt=Ce,Le=Pe(me),Le?Le=void 0:Le=r,Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)):(Ce=$,$=r),Yt--,$===r&&(me=r,Yt===0&&Ze(ye)),$}function _t(){var $,me,Le;for($=Ce,me=[],t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));Le!==r;)me.push(Le),t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));return me!==r?(Tt=Ce,Le=g(me),Le?Le=void 0:Le=r,Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)):(Ce=$,$=r),$}function Fn(){var $;return Tt=Ce,$=Ee(),$?$=void 0:$=r,$}function Ci(){var $;return Tt=Ce,$=De(),$?$=void 0:$=r,$}function oa(){var $;return $=ds(),$===r&&($=la()),$}function co(){var $,me,Le;if($=ds(),$===r){if($=Ce,me=[],Le=Ho(),Le!==r)for(;Le!==r;)me.push(Le),Le=Ho();else me=r;me!==r&&(Tt=$,me=ce()),$=me}return $}function Us(){var $;return $=wi(),$===r&&($=gs(),$===r&&($=ds(),$===r&&($=la()))),$}function aa(){var $;return $=wi(),$===r&&($=ds(),$===r&&($=Ho())),$}function la(){var $,me,Le,ft,pt,Rt;if(Yt++,$=Ce,ee.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Ie)),me!==r){for(Le=[],ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(ke.test(t.charAt(Ce))?(Rt=t.charAt(Ce),Ce++):(Rt=r,Yt===0&&Ze(ht)),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);ft!==r;)Le.push(ft),ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(ke.test(t.charAt(Ce))?(Rt=t.charAt(Ce),Ce++):(Rt=r,Yt===0&&Ze(ht)),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);Le!==r?(Tt=$,me=H(),$=me):(Ce=$,$=r)}else Ce=$,$=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(ne)),$}function Ho(){var $,me,Le,ft,pt;if($=Ce,t.substr(Ce,2)===lt?(me=lt,Ce+=2):(me=r,Yt===0&&Ze(Re)),me===r&&(me=null),me!==r)if(Qe.test(t.charAt(Ce))?(Le=t.charAt(Ce),Ce++):(Le=r,Yt===0&&Ze(be)),Le!==r){for(ft=[],_e.test(t.charAt(Ce))?(pt=t.charAt(Ce),Ce++):(pt=r,Yt===0&&Ze(Te));pt!==r;)ft.push(pt),_e.test(t.charAt(Ce))?(pt=t.charAt(Ce),Ce++):(pt=r,Yt===0&&Ze(Te));ft!==r?(Tt=$,me=H(),$=me):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;return $}function wi(){var $,me;return $=Ce,t.substr(Ce,4)===Je?(me=Je,Ce+=4):(me=r,Yt===0&&Ze(He)),me!==r&&(Tt=$,me=x()),$=me,$}function gs(){var $,me;return $=Ce,t.substr(Ce,4)===w?(me=w,Ce+=4):(me=r,Yt===0&&Ze(S)),me!==r&&(Tt=$,me=y()),$=me,$===r&&($=Ce,t.substr(Ce,5)===F?(me=F,Ce+=5):(me=r,Yt===0&&Ze(z)),me!==r&&(Tt=$,me=X()),$=me),$}function ds(){var $,me,Le,ft;return Yt++,$=Ce,t.charCodeAt(Ce)===34?(me=ie,Ce++):(me=r,Yt===0&&Ze(Se)),me!==r?(t.charCodeAt(Ce)===34?(Le=ie,Ce++):(Le=r,Yt===0&&Ze(Se)),Le!==r?(Tt=$,me=Ne(),$=me):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,t.charCodeAt(Ce)===34?(me=ie,Ce++):(me=r,Yt===0&&Ze(Se)),me!==r?(Le=ms(),Le!==r?(t.charCodeAt(Ce)===34?(ft=ie,Ce++):(ft=r,Yt===0&&Ze(Se)),ft!==r?(Tt=$,me=ot(Le),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)),Yt--,$===r&&(me=r,Yt===0&&Ze(Z)),$}function ms(){var $,me,Le;if($=Ce,me=[],Le=_s(),Le!==r)for(;Le!==r;)me.push(Le),Le=_s();else me=r;return me!==r&&(Tt=$,me=dt(me)),$=me,$}function _s(){var $,me,Le,ft,pt,Rt;return jt.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze($t)),$===r&&($=Ce,t.substr(Ce,2)===xt?(me=xt,Ce+=2):(me=r,Yt===0&&Ze(an)),me!==r&&(Tt=$,me=Qr()),$=me,$===r&&($=Ce,t.substr(Ce,2)===mr?(me=mr,Ce+=2):(me=r,Yt===0&&Ze(xr)),me!==r&&(Tt=$,me=Wr()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Vn?(me=Vn,Ce+=2):(me=r,Yt===0&&Ze(Ns)),me!==r&&(Tt=$,me=Ri()),$=me,$===r&&($=Ce,t.substr(Ce,2)===ps?(me=ps,Ce+=2):(me=r,Yt===0&&Ze(io)),me!==r&&(Tt=$,me=Si()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Ls?(me=Ls,Ce+=2):(me=r,Yt===0&&Ze(so)),me!==r&&(Tt=$,me=cc()),$=me,$===r&&($=Ce,t.substr(Ce,2)===cu?(me=cu,Ce+=2):(me=r,Yt===0&&Ze(ap)),me!==r&&(Tt=$,me=lp()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Ms?(me=Ms,Ce+=2):(me=r,Yt===0&&Ze(Dn)),me!==r&&(Tt=$,me=oo()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Os?(me=Os,Ce+=2):(me=r,Yt===0&&Ze(ml)),me!==r&&(Tt=$,me=yl()),$=me,$===r&&($=Ce,t.substr(Ce,2)===ao?(me=ao,Ce+=2):(me=r,Yt===0&&Ze(Kn)),me!==r?(Le=Un(),Le!==r?(ft=Un(),ft!==r?(pt=Un(),pt!==r?(Rt=Un(),Rt!==r?(Tt=$,me=Mn(Le,ft,pt,Rt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)))))))))),$}function Un(){var $;return Ni.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze(On)),$}function Pn(){var $,me;if(Yt++,$=[],tr.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Me)),me!==r)for(;me!==r;)$.push(me),tr.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Me));else $=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(_i)),$}function ys(){var $,me;if(Yt++,$=[],Oa.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(hr)),me!==r)for(;me!==r;)$.push(me),Oa.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(hr));else $=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(ii)),$}function We(){var $,me,Le,ft,pt,Rt;if($=Ce,me=tt(),me!==r){for(Le=[],ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(Rt=tt(),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);ft!==r;)Le.push(ft),ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(Rt=tt(),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)}else Ce=$,$=r;return $}function tt(){var $;return t.substr(Ce,2)===uc?($=uc,Ce+=2):($=r,Yt===0&&Ze(uu)),$===r&&(t.charCodeAt(Ce)===10?($=Ac,Ce++):($=r,Yt===0&&Ze(El)),$===r&&(t.charCodeAt(Ce)===13?($=vA,Ce++):($=r,Yt===0&&Ze(Au)))),$}let It=2,nr=0;if(Cl=a(),Cl!==r&&Ce===t.length)return Cl;throw Cl!==r&&Ce"u"?!0:typeof t=="object"&&t!==null&&!Array.isArray(t)?Object.keys(t).every(e=>iK(t[e])):!1}function DR(t,e,r){if(t===null)return`null +`;if(typeof t=="number"||typeof t=="boolean")return`${t.toString()} +`;if(typeof t=="string")return`${rK(t)} +`;if(Array.isArray(t)){if(t.length===0)return`[] +`;let o=" ".repeat(e);return` +${t.map(n=>`${o}- ${DR(n,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let[o,a]=t instanceof XD?[t.data,!1]:[t,!0],n=" ".repeat(e),u=Object.keys(o);a&&u.sort((p,h)=>{let E=tK.indexOf(p),I=tK.indexOf(h);return E===-1&&I===-1?ph?1:0:E!==-1&&I===-1?-1:E===-1&&I!==-1?1:E-I});let A=u.filter(p=>!iK(o[p])).map((p,h)=>{let E=o[p],I=rK(p),v=DR(E,e+1,!0),b=h>0||r?n:"",C=I.length>1024?`? ${I} +${b}:`:`${I}:`,T=v.startsWith(` +`)?v:` ${v}`;return`${b}${C}${T}`}).join(e===0?` +`:"")||` +`;return r?` +${A}`:`${A}`}throw new Error(`Unsupported value type (${t})`)}function Ba(t){try{let e=DR(t,0,!1);return e!==` +`?e:""}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}function $6e(t){return t.endsWith(` +`)||(t+=` +`),(0,nK.parse)(t)}function tje(t){if(eje.test(t))return $6e(t);let e=(0,ZD.safeLoad)(t,{schema:ZD.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!="object")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error("Expected an indexed object, got an array instead. Does your file follow Yaml's rules?");return e}function Vi(t){return tje(t)}var ZD,nK,Z6e,tK,XD,eje,sK=Et(()=>{ZD=$e(ZV()),nK=$e(eK()),Z6e=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,tK=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],XD=class{constructor(e){this.data=e}};Ba.PreserveOrdering=XD;eje=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i});var tI={};Kt(tI,{parseResolution:()=>UD,parseShell:()=>LD,parseSyml:()=>Vi,stringifyArgument:()=>AR,stringifyArgumentSegment:()=>fR,stringifyArithmeticExpression:()=>OD,stringifyCommand:()=>uR,stringifyCommandChain:()=>cy,stringifyCommandChainThen:()=>cR,stringifyCommandLine:()=>MD,stringifyCommandLineThen:()=>lR,stringifyEnvSegment:()=>ND,stringifyRedirectArgument:()=>Kw,stringifyResolution:()=>_D,stringifyShell:()=>ly,stringifyShellLine:()=>ly,stringifySyml:()=>Ba,stringifyValueArgument:()=>Gg});var Nl=Et(()=>{iW();lW();sK()});var aK=_((Cbt,PR)=>{"use strict";var rje=t=>{let e=!1,r=!1,o=!1;for(let a=0;a{if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let r=a=>e.pascalCase?a.charAt(0).toUpperCase()+a.slice(1):a;return Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=rje(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(a,n)=>n.toUpperCase()).replace(/\d+(\w|$)/g,a=>a.toUpperCase()),r(t))};PR.exports=oK;PR.exports.default=oK});var lK=_((wbt,nje)=>{nje.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var ed=_(Xa=>{"use strict";var uK=lK(),ju=process.env;Object.defineProperty(Xa,"_vendors",{value:uK.map(function(t){return t.constant})});Xa.name=null;Xa.isPR=null;uK.forEach(function(t){let r=(Array.isArray(t.env)?t.env:[t.env]).every(function(o){return cK(o)});if(Xa[t.constant]=r,r)switch(Xa.name=t.name,typeof t.pr){case"string":Xa.isPR=!!ju[t.pr];break;case"object":"env"in t.pr?Xa.isPR=t.pr.env in ju&&ju[t.pr.env]!==t.pr.ne:"any"in t.pr?Xa.isPR=t.pr.any.some(function(o){return!!ju[o]}):Xa.isPR=cK(t.pr);break;default:Xa.isPR=null}});Xa.isCI=!!(ju.CI||ju.CONTINUOUS_INTEGRATION||ju.BUILD_NUMBER||ju.RUN_ID||Xa.name);function cK(t){return typeof t=="string"?!!ju[t]:Object.keys(t).every(function(e){return ju[e]===t[e]})}});var Hn,cn,td,SR,$D,AK,xR,bR,eP=Et(()=>{(function(t){t.StartOfInput="\0",t.EndOfInput="",t.EndOfPartialInput=""})(Hn||(Hn={}));(function(t){t[t.InitialNode=0]="InitialNode",t[t.SuccessNode=1]="SuccessNode",t[t.ErrorNode=2]="ErrorNode",t[t.CustomNode=3]="CustomNode"})(cn||(cn={}));td=-1,SR=/^(-h|--help)(?:=([0-9]+))?$/,$D=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,AK=/^-[a-zA-Z]{2,}$/,xR=/^([^=]+)=([\s\S]*)$/,bR=process.env.DEBUG_CLI==="1"});var it,my,tP,kR,rP=Et(()=>{eP();it=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},my=class extends Error{constructor(e,r){if(super(),this.input=e,this.candidates=r,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(o=>o.reason!==null&&o.reason===r[0].reason)){let[{reason:o}]=this.candidates;this.message=`${o} + +${this.candidates.map(({usage:a})=>`$ ${a}`).join(` +`)}`}else if(this.candidates.length===1){let[{usage:o}]=this.candidates;this.message=`Command not found; did you mean: + +$ ${o} +${kR(e)}`}else this.message=`Command not found; did you mean one of: + +${this.candidates.map(({usage:o},a)=>`${`${a}.`.padStart(4)} ${o}`).join(` +`)} + +${kR(e)}`}},tP=class extends Error{constructor(e,r){super(),this.input=e,this.usages=r,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: + +${this.usages.map((o,a)=>`${`${a}.`.padStart(4)} ${o}`).join(` +`)} + +${kR(e)}`}},kR=t=>`While running ${t.filter(e=>e!==Hn.EndOfInput&&e!==Hn.EndOfPartialInput).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`});function ije(t){let e=t.split(` +`),r=e.filter(a=>a.match(/\S/)),o=r.length>0?r.reduce((a,n)=>Math.min(a,n.length-n.trimStart().length),Number.MAX_VALUE):0;return e.map(a=>a.slice(o).trimRight()).join(` +`)}function Do(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` +`),t=ije(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 + +`),t=t.replace(/\n(\n)?\n*/g,(o,a)=>a||" "),r&&(t=t.split(/\n/).map(o=>{let a=o.match(/^\s*[*-][\t ]+(.*)/);if(!a)return o.match(/(.{1,80})(?: |$)/g).join(` +`);let n=o.length-o.trimStart().length;return a[1].match(new RegExp(`(.{1,${78-n}})(?: |$)`,"g")).map((u,A)=>" ".repeat(n)+(A===0?"- ":" ")+u).join(` +`)}).join(` + +`)),t=t.replace(/(`+)((?:.|[\n])*?)\1/g,(o,a,n)=>e.code(a+n+a)),t=t.replace(/(\*\*)((?:.|[\n])*?)\1/g,(o,a,n)=>e.bold(a+n+a)),t?`${t} +`:""}var QR,fK,pK,FR=Et(()=>{QR=Array(80).fill("\u2501");for(let t=0;t<=24;++t)QR[QR.length-t]=`\x1B[38;5;${232+t}m\u2501`;fK={header:t=>`\x1B[1m\u2501\u2501\u2501 ${t}${t.length<80-5?` ${QR.slice(t.length+5).join("")}`:":"}\x1B[0m`,bold:t=>`\x1B[1m${t}\x1B[22m`,error:t=>`\x1B[31m\x1B[1m${t}\x1B[22m\x1B[39m`,code:t=>`\x1B[36m${t}\x1B[39m`},pK={header:t=>t,bold:t=>t,error:t=>t,code:t=>t}});function Vo(t){return{...t,[rI]:!0}}function qu(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function nP(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(!r)return"validation failed";let[,o,a]=r;return e&&(a=a[0].toLowerCase()+a.slice(1)),a=o!=="."||!e?`${o.replace(/^\.(\[|$)/,"$1")}: ${a}`:`: ${a}`,a}function nI(t,e){return e.length===1?new it(`${t}${nP(e[0],{mergeName:!0})}`):new it(`${t}: +${e.map(r=>` +- ${nP(r)}`).join("")}`)}function rd(t,e,r){if(typeof r>"u")return e;let o=[],a=[],n=A=>{let p=e;return e=A,n.bind(null,p)};if(!r(e,{errors:o,coercions:a,coercion:n}))throw nI(`Invalid value for ${t}`,o);for(let[,A]of a)A();return e}var rI,yf=Et(()=>{rP();rI=Symbol("clipanion/isOption")});var Ko={};Kt(Ko,{KeyRelationship:()=>Gu,TypeAssertionError:()=>Wp,applyCascade:()=>oI,as:()=>Bje,assert:()=>Cje,assertWithErrors:()=>wje,cascade:()=>aP,fn:()=>vje,hasAtLeastOneKey:()=>UR,hasExactLength:()=>yK,hasForbiddenKeys:()=>qje,hasKeyRelationship:()=>lI,hasMaxLength:()=>Pje,hasMinLength:()=>Dje,hasMutuallyExclusiveKeys:()=>Gje,hasRequiredKeys:()=>jje,hasUniqueItems:()=>Sje,isArray:()=>iP,isAtLeast:()=>MR,isAtMost:()=>kje,isBase64:()=>Oje,isBoolean:()=>fje,isDate:()=>hje,isDict:()=>mje,isEnum:()=>Vs,isHexColor:()=>Mje,isISO8601:()=>Lje,isInExclusiveRange:()=>Fje,isInInclusiveRange:()=>Qje,isInstanceOf:()=>Eje,isInteger:()=>OR,isJSON:()=>Uje,isLiteral:()=>gK,isLowerCase:()=>Tje,isMap:()=>dje,isNegative:()=>xje,isNullable:()=>Hje,isNumber:()=>NR,isObject:()=>dK,isOneOf:()=>LR,isOptional:()=>_je,isPartial:()=>yje,isPayload:()=>pje,isPositive:()=>bje,isRecord:()=>oP,isSet:()=>gje,isString:()=>Ey,isTuple:()=>sP,isUUID4:()=>Nje,isUnknown:()=>RR,isUpperCase:()=>Rje,makeTrait:()=>mK,makeValidator:()=>Hr,matchesRegExp:()=>sI,softAssert:()=>Ije});function jn(t){return t===null?"null":t===void 0?"undefined":t===""?"an empty string":typeof t=="symbol"?`<${t.toString()}>`:Array.isArray(t)?"an array":JSON.stringify(t)}function yy(t,e){if(t.length===0)return"nothing";if(t.length===1)return jn(t[0]);let r=t.slice(0,-1),o=t[t.length-1],a=t.length>2?`, ${e} `:` ${e} `;return`${r.map(n=>jn(n)).join(", ")}${a}${jn(o)}`}function Yp(t,e){var r,o,a;return typeof e=="number"?`${(r=t?.p)!==null&&r!==void 0?r:"."}[${e}]`:sje.test(e)?`${(o=t?.p)!==null&&o!==void 0?o:""}.${e}`:`${(a=t?.p)!==null&&a!==void 0?a:"."}[${JSON.stringify(e)}]`}function TR(t,e,r){return t===1?e:r}function pr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}function uje(t,e){return r=>{t[e]=r}}function Yu(t,e){return r=>{let o=t[e];return t[e]=r,Yu(t,e).bind(null,o)}}function iI(t,e,r){let o=()=>(t(r()),a),a=()=>(t(e),o);return o}function RR(){return Hr({test:(t,e)=>!0})}function gK(t){return Hr({test:(e,r)=>e!==t?pr(r,`Expected ${jn(t)} (got ${jn(e)})`):!0})}function Ey(){return Hr({test:(t,e)=>typeof t!="string"?pr(e,`Expected a string (got ${jn(t)})`):!0})}function Vs(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>typeof a=="string"||typeof a=="number"),o=new Set(e);return o.size===1?gK([...o][0]):Hr({test:(a,n)=>o.has(a)?!0:r?pr(n,`Expected one of ${yy(e,"or")} (got ${jn(a)})`):pr(n,`Expected a valid enumeration value (got ${jn(a)})`)})}function fje(){return Hr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o=Aje.get(t);if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a boolean (got ${jn(t)})`)}return!0}})}function NR(){return Hr({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"){let a;try{a=JSON.parse(t)}catch{}if(typeof a=="number")if(JSON.stringify(a)===t)o=a;else return pr(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a number (got ${jn(t)})`)}return!0}})}function pje(t){return Hr({test:(e,r)=>{var o;if(typeof r?.coercions>"u")return pr(r,"The isPayload predicate can only be used with coercion enabled");if(typeof r.coercion>"u")return pr(r,"Unbound coercion result");if(typeof e!="string")return pr(r,`Expected a string (got ${jn(e)})`);let a;try{a=JSON.parse(e)}catch{return pr(r,`Expected a JSON string (got ${jn(e)})`)}let n={value:a};return t(a,Object.assign(Object.assign({},r),{coercion:Yu(n,"value")}))?(r.coercions.push([(o=r.p)!==null&&o!==void 0?o:".",r.coercion.bind(null,n.value)]),!0):!1}})}function hje(){return Hr({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"&&hK.test(t))o=new Date(t);else{let a;if(typeof t=="string"){let n;try{n=JSON.parse(t)}catch{}typeof n=="number"&&(a=n)}else typeof t=="number"&&(a=t);if(typeof a<"u")if(Number.isSafeInteger(a)||!Number.isSafeInteger(a*1e3))o=new Date(a*1e3);else return pr(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a date (got ${jn(t)})`)}return!0}})}function iP(t,{delimiter:e}={}){return Hr({test:(r,o)=>{var a;let n=r;if(typeof r=="string"&&typeof e<"u"&&typeof o?.coercions<"u"){if(typeof o?.coercion>"u")return pr(o,"Unbound coercion result");r=r.split(e)}if(!Array.isArray(r))return pr(o,`Expected an array (got ${jn(r)})`);let u=!0;for(let A=0,p=r.length;A{var n,u;if(Object.getPrototypeOf(o).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A=[...o],p=[...o];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((E,I)=>E!==A[I])?new Set(p):o;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",iI(a.coercion,o,h)]),!0}else{let A=!0;for(let p of o)if(A=t(p,Object.assign({},a))&&A,!A&&a?.errors==null)break;return A}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A={value:o};return r(o,Object.assign(Object.assign({},a),{coercion:Yu(A,"value")}))?(a.coercions.push([(u=a.p)!==null&&u!==void 0?u:".",iI(a.coercion,o,()=>new Set(A.value))]),!0):!1}return pr(a,`Expected a set (got ${jn(o)})`)}})}function dje(t,e){let r=iP(sP([t,e])),o=oP(e,{keys:t});return Hr({test:(a,n)=>{var u,A,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h=[...a],E=[...a];if(!r(E,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let I=()=>E.some((v,b)=>v[0]!==h[b][0]||v[1]!==h[b][1])?new Map(E):a;return n.coercions.push([(u=n.p)!==null&&u!==void 0?u:".",iI(n.coercion,a,I)]),!0}else{let h=!0;for(let[E,I]of a)if(h=t(E,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(I,Object.assign(Object.assign({},n),{p:Yp(n,E)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h={value:a};return Array.isArray(a)?r(a,Object.assign(Object.assign({},n),{coercion:void 0}))?(n.coercions.push([(A=n.p)!==null&&A!==void 0?A:".",iI(n.coercion,a,()=>new Map(h.value))]),!0):!1:o(a,Object.assign(Object.assign({},n),{coercion:Yu(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",iI(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return pr(n,`Expected a map (got ${jn(a)})`)}})}function sP(t,{delimiter:e}={}){let r=yK(t.length);return Hr({test:(o,a)=>{var n;if(typeof o=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");o=o.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)])}if(!Array.isArray(o))return pr(a,`Expected a tuple (got ${jn(o)})`);let u=r(o,Object.assign({},a));for(let A=0,p=o.length;A{var n;if(Array.isArray(o)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?pr(a,"Unbound coercion result"):r(o,Object.assign(Object.assign({},a),{coercion:void 0}))?(o=Object.fromEntries(o),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)]),!0):!1;if(typeof o!="object"||o===null)return pr(a,`Expected an object (got ${jn(o)})`);let u=Object.keys(o),A=!0;for(let p=0,h=u.length;p{if(typeof a!="object"||a===null)return pr(n,`Expected an object (got ${jn(a)})`);let u=new Set([...r,...Object.keys(a)]),A={},p=!0;for(let h of u){if(h==="constructor"||h==="__proto__")p=pr(Object.assign(Object.assign({},n),{p:Yp(n,h)}),"Unsafe property name");else{let E=Object.prototype.hasOwnProperty.call(t,h)?t[h]:void 0,I=Object.prototype.hasOwnProperty.call(a,h)?a[h]:void 0;typeof E<"u"?p=E(I,Object.assign(Object.assign({},n),{p:Yp(n,h),coercion:Yu(a,h)}))&&p:e===null?p=pr(Object.assign(Object.assign({},n),{p:Yp(n,h)}),`Extraneous property (got ${jn(I)})`):Object.defineProperty(A,h,{enumerable:!0,get:()=>I,set:uje(a,h)})}if(!p&&n?.errors==null)break}return e!==null&&(p||n?.errors!=null)&&(p=e(A,n)&&p),p}});return Object.assign(o,{properties:t})}function yje(t){return dK(t,{extra:oP(RR())})}function mK(t){return()=>t}function Hr({test:t}){return mK(t)()}function Cje(t,e){if(!e(t))throw new Wp}function wje(t,e){let r=[];if(!e(t,{errors:r}))throw new Wp({errors:r})}function Ije(t,e){}function Bje(t,e,{coerce:r=!1,errors:o,throw:a}={}){let n=o?[]:void 0;if(!r){if(e(t,{errors:n}))return a?t:{value:t,errors:void 0};if(a)throw new Wp({errors:n});return{value:void 0,errors:n??!0}}let u={value:t},A=Yu(u,"value"),p=[];if(!e(t,{errors:n,coercion:A,coercions:p})){if(a)throw new Wp({errors:n});return{value:void 0,errors:n??!0}}for(let[,h]of p)h();return a?u.value:{value:u.value,errors:void 0}}function vje(t,e){let r=sP(t);return(...o)=>{if(!r(o))throw new Wp;return e(...o)}}function Dje(t){return Hr({test:(e,r)=>e.length>=t?!0:pr(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)})}function Pje(t){return Hr({test:(e,r)=>e.length<=t?!0:pr(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)})}function yK(t){return Hr({test:(e,r)=>e.length!==t?pr(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0})}function Sje({map:t}={}){return Hr({test:(e,r)=>{let o=new Set,a=new Set;for(let n=0,u=e.length;nt<=0?!0:pr(e,`Expected to be negative (got ${t})`)})}function bje(){return Hr({test:(t,e)=>t>=0?!0:pr(e,`Expected to be positive (got ${t})`)})}function MR(t){return Hr({test:(e,r)=>e>=t?!0:pr(r,`Expected to be at least ${t} (got ${e})`)})}function kje(t){return Hr({test:(e,r)=>e<=t?!0:pr(r,`Expected to be at most ${t} (got ${e})`)})}function Qje(t,e){return Hr({test:(r,o)=>r>=t&&r<=e?!0:pr(o,`Expected to be in the [${t}; ${e}] range (got ${r})`)})}function Fje(t,e){return Hr({test:(r,o)=>r>=t&&re!==Math.round(e)?pr(r,`Expected to be an integer (got ${e})`):!t&&!Number.isSafeInteger(e)?pr(r,`Expected to be a safe integer (got ${e})`):!0})}function sI(t){return Hr({test:(e,r)=>t.test(e)?!0:pr(r,`Expected to match the pattern ${t.toString()} (got ${jn(e)})`)})}function Tje(){return Hr({test:(t,e)=>t!==t.toLowerCase()?pr(e,`Expected to be all-lowercase (got ${t})`):!0})}function Rje(){return Hr({test:(t,e)=>t!==t.toUpperCase()?pr(e,`Expected to be all-uppercase (got ${t})`):!0})}function Nje(){return Hr({test:(t,e)=>cje.test(t)?!0:pr(e,`Expected to be a valid UUID v4 (got ${jn(t)})`)})}function Lje(){return Hr({test:(t,e)=>hK.test(t)?!0:pr(e,`Expected to be a valid ISO 8601 date string (got ${jn(t)})`)})}function Mje({alpha:t=!1}){return Hr({test:(e,r)=>(t?oje.test(e):aje.test(e))?!0:pr(r,`Expected to be a valid hexadecimal color string (got ${jn(e)})`)})}function Oje(){return Hr({test:(t,e)=>lje.test(t)?!0:pr(e,`Expected to be a valid base 64 string (got ${jn(t)})`)})}function Uje(t=RR()){return Hr({test:(e,r)=>{let o;try{o=JSON.parse(e)}catch{return pr(r,`Expected to be a valid JSON string (got ${jn(e)})`)}return t(o,r)}})}function aP(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Hr({test:(o,a)=>{var n,u;let A={value:o},p=typeof a?.coercions<"u"?Yu(A,"value"):void 0,h=typeof a?.coercions<"u"?[]:void 0;if(!t(o,Object.assign(Object.assign({},a),{coercion:p,coercions:h})))return!1;let E=[];if(typeof h<"u")for(let[,I]of h)E.push(I());try{if(typeof a?.coercions<"u"){if(A.value!==o){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,A.value)])}(u=a?.coercions)===null||u===void 0||u.push(...h)}return r.every(I=>I(A.value,a))}finally{for(let I of E)I()}}})}function oI(t,...e){let r=Array.isArray(e[0])?e[0]:e;return aP(t,r)}function _je(t){return Hr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}function Hje(t){return Hr({test:(e,r)=>e===null?!0:t(e,r)})}function jje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)||p.push(h);return p.length>0?pr(u,`Missing required ${TR(p.length,"property","properties")} ${yy(p,"and")}`):!0}})}function UR(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>Object.keys(n).some(h=>a(o,h,n))?!0:pr(u,`Missing at least one property from ${yy(Array.from(o),"or")}`)})}function qje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>0?pr(u,`Forbidden ${TR(p.length,"property","properties")} ${yy(p,"and")}`):!0}})}function Gje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>1?pr(u,`Mutually exclusive properties ${yy(p,"and")}`):!0}})}function lI(t,e,r,o){var a,n;let u=new Set((a=o?.ignore)!==null&&a!==void 0?a:[]),A=aI[(n=o?.missingIf)!==null&&n!==void 0?n:"missing"],p=new Set(r),h=Yje[e],E=e===Gu.Forbids?"or":"and";return Hr({test:(I,v)=>{let b=new Set(Object.keys(I));if(!A(b,t,I)||u.has(I[t]))return!0;let C=[];for(let T of p)(A(b,T,I)&&!u.has(I[T]))!==h.expect&&C.push(T);return C.length>=1?pr(v,`Property "${t}" ${h.message} ${TR(C.length,"property","properties")} ${yy(C,E)}`):!0}})}var sje,oje,aje,lje,cje,hK,Aje,Eje,LR,Wp,aI,Gu,Yje,Za=Et(()=>{sje=/^[a-zA-Z_][a-zA-Z0-9_]*$/;oje=/^#[0-9a-f]{6}$/i,aje=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,lje=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,cje=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,hK=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/;Aje=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]);Eje=t=>Hr({test:(e,r)=>e instanceof t?!0:pr(r,`Expected an instance of ${t.name} (got ${jn(e)})`)}),LR=(t,{exclusive:e=!1}={})=>Hr({test:(r,o)=>{var a,n,u;let A=[],p=typeof o?.errors<"u"?[]:void 0;for(let h=0,E=t.length;h1?pr(o,`Expected to match exactly a single predicate (matched ${A.join(", ")})`):(u=o?.errors)===null||u===void 0||u.push(...p),!1}});Wp=class extends Error{constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=` +`;for(let o of e)r+=` +- ${o}`}super(r)}};aI={missing:(t,e)=>t.has(e),undefined:(t,e,r)=>t.has(e)&&typeof r[e]<"u",nil:(t,e,r)=>t.has(e)&&r[e]!=null,falsy:(t,e,r)=>t.has(e)&&!!r[e]};(function(t){t.Forbids="Forbids",t.Requires="Requires"})(Gu||(Gu={}));Yje={[Gu.Forbids]:{expect:!1,message:"forbids using"},[Gu.Requires]:{expect:!0,message:"requires using"}}});var nt,Vp=Et(()=>{yf();nt=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(Array.isArray(r)){let{isDict:a,isUnknown:n,applyCascade:u}=await Promise.resolve().then(()=>(Za(),Ko)),A=u(a(n()),r),p=[],h=[];if(!A(this,{errors:p,coercions:h}))throw nI("Invalid option schema",p);for(let[,I]of h)I()}else if(r!=null)throw new Error("Invalid command schema");let o=await this.execute();return typeof o<"u"?o:0}};nt.isOption=rI;nt.Default=[]});function va(t){bR&&console.log(t)}function CK(){let t={nodes:[]};for(let e=0;e{if(e.has(o))return;e.add(o);let a=t.nodes[o];for(let u of Object.values(a.statics))for(let{to:A}of u)r(A);for(let[,{to:u}]of a.dynamics)r(u);for(let{to:u}of a.shortcuts)r(u);let n=new Set(a.shortcuts.map(({to:u})=>u));for(;a.shortcuts.length>0;){let{to:u}=a.shortcuts.shift(),A=t.nodes[u];for(let[p,h]of Object.entries(A.statics)){let E=Object.prototype.hasOwnProperty.call(a.statics,p)?a.statics[p]:a.statics[p]=[];for(let I of h)E.some(({to:v})=>I.to===v)||E.push(I)}for(let[p,h]of A.dynamics)a.dynamics.some(([E,{to:I}])=>p===E&&h.to===I)||a.dynamics.push([p,h]);for(let p of A.shortcuts)n.has(p.to)||(a.shortcuts.push(p),n.add(p.to))}};r(cn.InitialNode)}function Kje(t,{prefix:e=""}={}){if(bR){va(`${e}Nodes are:`);for(let r=0;rE!==cn.ErrorNode).map(({state:E})=>({usage:E.candidateUsage,reason:null})));if(h.every(({node:E})=>E===cn.ErrorNode))throw new my(e,h.map(({state:E})=>({usage:E.candidateUsage,reason:E.errorMessage})));o=Xje(h)}if(o.length>0){va(" Results:");for(let n of o)va(` - ${n.node} -> ${JSON.stringify(n.state)}`)}else va(" No results");return o}function zje(t,e,{endToken:r=Hn.EndOfInput}={}){let o=Jje(t,[...e,r]);return Zje(e,o.map(({state:a})=>a))}function Xje(t){let e=0;for(let{state:r}of t)r.path.length>e&&(e=r.path.length);return t.filter(({state:r})=>r.path.length===e)}function Zje(t,e){let r=e.filter(v=>v.selectedIndex!==null),o=r.filter(v=>!v.partial);if(o.length>0&&(r=o),r.length===0)throw new Error;let a=r.filter(v=>v.selectedIndex===td||v.requiredOptions.every(b=>b.some(C=>v.options.find(T=>T.name===C))));if(a.length===0)throw new my(t,r.map(v=>({usage:v.candidateUsage,reason:null})));let n=0;for(let v of a)v.path.length>n&&(n=v.path.length);let u=a.filter(v=>v.path.length===n),A=v=>v.positionals.filter(({extra:b})=>!b).length+v.options.length,p=u.map(v=>({state:v,positionalCount:A(v)})),h=0;for(let{positionalCount:v}of p)v>h&&(h=v);let E=p.filter(({positionalCount:v})=>v===h).map(({state:v})=>v),I=$je(E);if(I.length>1)throw new tP(t,I.map(v=>v.candidateUsage));return I[0]}function $je(t){let e=[],r=[];for(let o of t)o.selectedIndex===td?r.push(o):e.push(o);return r.length>0&&e.push({...EK,path:wK(...r.map(o=>o.path)),options:r.reduce((o,a)=>o.concat(a.options),[])}),e}function wK(t,e,...r){return e===void 0?Array.from(t):wK(t.filter((o,a)=>o===e[a]),...r)}function $a(){return{dynamics:[],shortcuts:[],statics:{}}}function IK(t){return t===cn.SuccessNode||t===cn.ErrorNode}function _R(t,e=0){return{to:IK(t.to)?t.to:t.to>=cn.CustomNode?t.to+e-cn.CustomNode+1:t.to+e,reducer:t.reducer}}function eqe(t,e=0){let r=$a();for(let[o,a]of t.dynamics)r.dynamics.push([o,_R(a,e)]);for(let o of t.shortcuts)r.shortcuts.push(_R(o,e));for(let[o,a]of Object.entries(t.statics))r.statics[o]=a.map(n=>_R(n,e));return r}function Ss(t,e,r,o,a){t.nodes[e].dynamics.push([r,{to:o,reducer:a}])}function Cy(t,e,r,o){t.nodes[e].shortcuts.push({to:r,reducer:o})}function Jo(t,e,r,o,a){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:o,reducer:a})}function lP(t,e,r,o,a){if(Array.isArray(e)){let[n,...u]=e;return t[n](r,o,a,...u)}else return t[e](r,o,a)}var EK,tqe,HR,el,jR,wy,cP=Et(()=>{eP();rP();EK={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:td,partial:!1,tokens:[]};tqe={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,o)=>!t.ignoreOptions&&e===o,isBatchOption:(t,e,r,o)=>!t.ignoreOptions&&AK.test(e)&&[...e.slice(1)].every(a=>o.has(`-${a}`)),isBoundOption:(t,e,r,o,a)=>{let n=e.match(xR);return!t.ignoreOptions&&!!n&&$D.test(n[1])&&o.has(n[1])&&a.filter(u=>u.nameSet.includes(n[1])).every(u=>u.allowBinding)},isNegatedOption:(t,e,r,o)=>!t.ignoreOptions&&e===`--no-${o.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&SR.test(e),isUnsupportedOption:(t,e,r,o)=>!t.ignoreOptions&&e.startsWith("-")&&$D.test(e)&&!o.has(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!$D.test(e)},HR={setCandidateState:(t,e,r,o)=>({...t,...o}),setSelectedIndex:(t,e,r,o)=>({...t,selectedIndex:o}),setPartialIndex:(t,e,r,o)=>({...t,selectedIndex:o,partial:!0}),pushBatch:(t,e,r,o)=>{let a=t.options.slice(),n=t.tokens.slice();for(let u=1;u{let[,o,a]=e.match(xR),n=t.options.concat({name:o,value:a}),u=t.tokens.concat([{segmentIndex:r,type:"option",slice:[0,o.length],option:o},{segmentIndex:r,type:"assign",slice:[o.length,o.length+1]},{segmentIndex:r,type:"value",slice:[o.length+1,o.length+a.length+1]}]);return{...t,options:n,tokens:u}},pushPath:(t,e,r)=>{let o=t.path.concat(e),a=t.tokens.concat({segmentIndex:r,type:"path"});return{...t,path:o,tokens:a}},pushPositional:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!1}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtra:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!0}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtraNoLimits:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:el}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushTrue:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushFalse:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!1}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushUndefined:(t,e,r,o)=>{let a=t.options.concat({name:e,value:void 0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:e});return{...t,options:a,tokens:n}},pushStringValue:(t,e,r)=>{var o;let a=t.options[t.options.length-1],n=t.options.slice(),u=t.tokens.concat({segmentIndex:r,type:"value"});return a.value=((o=a.value)!==null&&o!==void 0?o:[]).concat([e]),{...t,options:n,tokens:u}},setStringValue:(t,e,r)=>{let o=t.options[t.options.length-1],a=t.options.slice(),n=t.tokens.concat({segmentIndex:r,type:"value"});return o.value=e,{...t,options:a,tokens:n}},inhibateOptions:t=>({...t,ignoreOptions:!0}),useHelp:(t,e,r,o)=>{let[,,a]=e.match(SR);return typeof a<"u"?{...t,options:[{name:"-c",value:String(o)},{name:"-i",value:a}]}:{...t,options:[{name:"-c",value:String(o)}]}},setError:(t,e,r,o)=>e===Hn.EndOfInput||e===Hn.EndOfPartialInput?{...t,errorMessage:`${o}.`}:{...t,errorMessage:`${o} ("${e}").`},setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return{...t,errorMessage:`Not enough arguments to option ${r.name}.`}}},el=Symbol(),jR=class{constructor(e,r){this.allOptionNames=new Map,this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=r}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,extra:o=this.arity.extra,proxy:a=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:o,proxy:a})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===el)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!r&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!r&&this.arity.extra!==el?this.arity.extra.push(e):this.arity.extra!==el&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:r=0}={}){if(this.arity.extra===el)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let o=0;o1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(o))throw new Error(`The arity must be an integer, got ${o}`);if(o<0)throw new Error(`The arity must be positive, got ${o}`);let A=e.reduce((p,h)=>h.length>p.length?h:p,"");for(let p of e)this.allOptionNames.set(p,A);this.options.push({preferredName:A,nameSet:e,description:r,arity:o,hidden:a,required:n,allowBinding:u})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let o=[this.cliOpts.binaryName],a=[];if(this.paths.length>0&&o.push(...this.paths[0]),e){for(let{preferredName:u,nameSet:A,arity:p,hidden:h,description:E,required:I}of this.options){if(h)continue;let v=[];for(let C=0;C`:`[${b}]`)}o.push(...this.arity.leading.map(u=>`<${u}>`)),this.arity.extra===el?o.push("..."):o.push(...this.arity.extra.map(u=>`[${u}]`)),o.push(...this.arity.trailing.map(u=>`<${u}>`))}return{usage:o.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=CK(),r=cn.InitialNode,o=this.usage().usage,a=this.options.filter(A=>A.required).map(A=>A.nameSet);r=Mc(e,$a()),Jo(e,cn.InitialNode,Hn.StartOfInput,r,["setCandidateState",{candidateUsage:o,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",u=this.paths.length>0?this.paths:[[]];for(let A of u){let p=r;if(A.length>0){let v=Mc(e,$a());Cy(e,p,v),this.registerOptions(e,v),p=v}for(let v=0;v0||!this.arity.proxy){let v=Mc(e,$a());Ss(e,p,"isHelp",v,["useHelp",this.cliIndex]),Ss(e,v,"always",v,"pushExtra"),Jo(e,v,Hn.EndOfInput,cn.SuccessNode,["setSelectedIndex",td]),this.registerOptions(e,p)}this.arity.leading.length>0&&(Jo(e,p,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,p,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let h=p;for(let v=0;v0||v+1!==this.arity.leading.length)&&(Jo(e,b,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,b,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex])),Ss(e,h,"isNotOptionLike",b,"pushPositional"),h=b}let E=h;if(this.arity.extra===el||this.arity.extra.length>0){let v=Mc(e,$a());if(Cy(e,h,v),this.arity.extra===el){let b=Mc(e,$a());this.arity.proxy||this.registerOptions(e,b),Ss(e,h,n,b,"pushExtraNoLimits"),Ss(e,b,n,b,"pushExtraNoLimits"),Cy(e,b,v)}else for(let b=0;b0)&&this.registerOptions(e,C),Ss(e,E,n,C,"pushExtra"),Cy(e,C,v),E=C}E=v}this.arity.trailing.length>0&&(Jo(e,E,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,E,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let I=E;for(let v=0;v=0&&e{let u=n?Hn.EndOfPartialInput:Hn.EndOfInput;return zje(o,a,{endToken:u})}}}}});function vK(){return uP.default&&"getColorDepth"in uP.default.WriteStream.prototype?uP.default.WriteStream.prototype.getColorDepth():process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}function DK(t){let e=BK;if(typeof e>"u"){if(t.stdout===process.stdout&&t.stderr===process.stderr)return null;let{AsyncLocalStorage:r}=Be("async_hooks");e=BK=new r;let o=process.stdout._write;process.stdout._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?o.call(this,n,u,A):p.stdout.write(n,u,A)};let a=process.stderr._write;process.stderr._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?a.call(this,n,u,A):p.stderr.write(n,u,A)}}return r=>e.run(t,r)}var uP,BK,PK=Et(()=>{uP=$e(Be("tty"),1)});var Iy,SK=Et(()=>{Vp();Iy=class extends nt{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,r){let o=new Iy(r);o.path=e.path;for(let a of e.options)switch(a.name){case"-c":o.commands.push(Number(a.value));break;case"-i":o.index=Number(a.value);break}return o}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: +`),this.context.stdout.write(` +`);let r=0;for(let o of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[o].commandClass,{prefix:`${r++}. `.padStart(5)}));this.context.stdout.write(` +`),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. +`)}}}});async function kK(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=FK(t);return as.from(r,e).runExit(o,a)}async function QK(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=FK(t);return as.from(r,e).run(o,a)}function FK(t){let e,r,o,a;switch(typeof process<"u"&&typeof process.argv<"u"&&(o=process.argv.slice(2)),t.length){case 1:r=t[0];break;case 2:t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],Array.isArray(t[1])?o=t[1]:a=t[1]):(e=t[0],r=t[1]);break;case 3:Array.isArray(t[2])?(e=t[0],r=t[1],o=t[2]):t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],o=t[1],a=t[2]):(e=t[0],r=t[1],a=t[2]);break;default:e=t[0],r=t[1],o=t[2],a=t[3];break}if(typeof o>"u")throw new Error("The argv parameter must be provided when running Clipanion outside of a Node context");return{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}}function bK(t){return t()}var xK,as,TK=Et(()=>{eP();cP();FR();PK();Vp();SK();xK=Symbol("clipanion/errorCommand");as=class{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:o,enableCapture:a=!1,enableColors:n}={}){this.registrations=new Map,this.builder=new wy({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=o,this.enableCapture=a,this.enableColors=n}static from(e,r={}){let o=new as(r),a=Array.isArray(e)?e:[e];for(let n of a)o.register(n);return o}register(e){var r;let o=new Map,a=new e;for(let p in a){let h=a[p];typeof h=="object"&&h!==null&&h[nt.isOption]&&o.set(p,h)}let n=this.builder.command(),u=n.cliIndex,A=(r=e.paths)!==null&&r!==void 0?r:a.paths;if(typeof A<"u")for(let p of A)n.addPath(p);this.registrations.set(e,{specs:o,builder:n,index:u});for(let[p,{definition:h}]of o.entries())h(n,p);n.setContext({commandClass:e})}process(e,r){let{input:o,context:a,partial:n}=typeof e=="object"&&Array.isArray(e)?{input:e,context:r}:e,{contexts:u,process:A}=this.builder.compile(),p=A(o,{partial:n}),h={...as.defaultContext,...a};switch(p.selectedIndex){case td:{let E=Iy.from(p,u);return E.context=h,E.tokens=p.tokens,E}default:{let{commandClass:E}=u[p.selectedIndex],I=this.registrations.get(E);if(typeof I>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let v=new E;v.context=h,v.tokens=p.tokens,v.path=p.path;try{for(let[b,{transformer:C}]of I.specs.entries())v[b]=C(I.builder,b,p,h);return v}catch(b){throw b[xK]=v,b}}break}}async run(e,r){var o,a;let n,u={...as.defaultContext,...r},A=(o=this.enableColors)!==null&&o!==void 0?o:u.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e,u)}catch(E){return u.stdout.write(this.error(E,{colored:A})),1}if(n.help)return u.stdout.write(this.usage(n,{colored:A,detailed:!0})),0;n.context=u,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),definition:E=>this.definition(E),error:(E,I)=>this.error(E,I),format:E=>this.format(E),process:(E,I)=>this.process(E,{...u,...I}),run:(E,I)=>this.run(E,{...u,...I}),usage:(E,I)=>this.usage(E,I)};let p=this.enableCapture&&(a=DK(u))!==null&&a!==void 0?a:bK,h;try{h=await p(()=>n.validateAndExecute().catch(E=>n.catch(E).then(()=>0)))}catch(E){return u.stdout.write(this.error(E,{colored:A,command:n})),1}return h}async runExit(e,r){process.exitCode=await this.run(e,r)}definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:o}=this.getUsageByRegistration(e,{detailed:!1}),{usage:a,options:n}=this.getUsageByRegistration(e,{detailed:!0,inlineOptions:!1}),u=typeof e.usage.category<"u"?Do(e.usage.category,{format:this.format(r),paragraphs:!1}):void 0,A=typeof e.usage.description<"u"?Do(e.usage.description,{format:this.format(r),paragraphs:!1}):void 0,p=typeof e.usage.details<"u"?Do(e.usage.details,{format:this.format(r),paragraphs:!0}):void 0,h=typeof e.usage.examples<"u"?e.usage.examples.map(([E,I])=>[Do(E,{format:this.format(r),paragraphs:!1}),I.replace(/\$0/g,this.binaryName)]):void 0;return{path:o,usage:a,category:u,description:A,details:p,examples:h,options:n}}definitions({colored:e=!1}={}){let r=[];for(let o of this.registrations.keys()){let a=this.definition(o,{colored:e});!a||r.push(a)}return r}usage(e=null,{colored:r,detailed:o=!1,prefix:a="$ "}={}){var n;if(e===null){for(let p of this.registrations.keys()){let h=p.paths,E=typeof p.usage<"u";if(!h||h.length===0||h.length===1&&h[0].length===0||((n=h?.some(b=>b.length===0))!==null&&n!==void 0?n:!1))if(e){e=null;break}else e=p;else if(E){e=null;continue}}e&&(o=!0)}let u=e!==null&&e instanceof nt?e.constructor:e,A="";if(u)if(o){let{description:p="",details:h="",examples:E=[]}=u.usage||{};p!==""&&(A+=Do(p,{format:this.format(r),paragraphs:!1}).replace(/^./,b=>b.toUpperCase()),A+=` +`),(h!==""||E.length>0)&&(A+=`${this.format(r).header("Usage")} +`,A+=` +`);let{usage:I,options:v}=this.getUsageByRegistration(u,{inlineOptions:!1});if(A+=`${this.format(r).bold(a)}${I} +`,v.length>0){A+=` +`,A+=`${this.format(r).header("Options")} +`;let b=v.reduce((C,T)=>Math.max(C,T.definition.length),0);A+=` +`;for(let{definition:C,description:T}of v)A+=` ${this.format(r).bold(C.padEnd(b))} ${Do(T,{format:this.format(r),paragraphs:!1})}`}if(h!==""&&(A+=` +`,A+=`${this.format(r).header("Details")} +`,A+=` +`,A+=Do(h,{format:this.format(r),paragraphs:!0})),E.length>0){A+=` +`,A+=`${this.format(r).header("Examples")} +`;for(let[b,C]of E)A+=` +`,A+=Do(b,{format:this.format(r),paragraphs:!1}),A+=`${C.replace(/^/m,` ${this.format(r).bold(a)}`).replace(/\$0/g,this.binaryName)} +`}}else{let{usage:p}=this.getUsageByRegistration(u);A+=`${this.format(r).bold(a)}${p} +`}else{let p=new Map;for(let[v,{index:b}]of this.registrations.entries()){if(typeof v.usage>"u")continue;let C=typeof v.usage.category<"u"?Do(v.usage.category,{format:this.format(r),paragraphs:!1}):null,T=p.get(C);typeof T>"u"&&p.set(C,T=[]);let{usage:L}=this.getUsageByIndex(b);T.push({commandClass:v,usage:L})}let h=Array.from(p.keys()).sort((v,b)=>v===null?-1:b===null?1:v.localeCompare(b,"en",{usage:"sort",caseFirst:"upper"})),E=typeof this.binaryLabel<"u",I=typeof this.binaryVersion<"u";E||I?(E&&I?A+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} + +`:E?A+=`${this.format(r).header(`${this.binaryLabel}`)} +`:A+=`${this.format(r).header(`${this.binaryVersion}`)} +`,A+=` ${this.format(r).bold(a)}${this.binaryName} +`):A+=`${this.format(r).bold(a)}${this.binaryName} +`;for(let v of h){let b=p.get(v).slice().sort((T,L)=>T.usage.localeCompare(L.usage,"en",{usage:"sort",caseFirst:"upper"})),C=v!==null?v.trim():"General commands";A+=` +`,A+=`${this.format(r).header(`${C}`)} +`;for(let{commandClass:T,usage:L}of b){let U=T.usage.description||"undocumented";A+=` +`,A+=` ${this.format(r).bold(L)} +`,A+=` ${Do(U,{format:this.format(r),paragraphs:!1})}`}}A+=` +`,A+=Do("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(r),paragraphs:!0})}return A}error(e,r){var o,{colored:a,command:n=(o=e[xK])!==null&&o!==void 0?o:null}=r===void 0?{}:r;(!e||typeof e!="object"||!("stack"in e))&&(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let u="",A=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");A==="Error"&&(A="Internal Error"),u+=`${this.format(a).error(A)}: ${e.message} +`;let p=e.clipanion;return typeof p<"u"?p.type==="usage"&&(u+=` +`,u+=this.usage(n)):e.stack&&(u+=`${e.stack.replace(/^.*\n/,"")} +`),u}format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:as.defaultContext.colorDepth>1)?fK:pK}getUsageByRegistration(e,r){let o=this.registrations.get(e);if(typeof o>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(o.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}};as.defaultContext={env:process.env,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:vK()}});var cI,RK=Et(()=>{Vp();cI=class extends nt{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} +`)}};cI.paths=[["--clipanion=definitions"]]});var uI,NK=Et(()=>{Vp();uI=class extends nt{async execute(){this.context.stdout.write(this.cli.usage())}};uI.paths=[["-h"],["--help"]]});function AP(t={}){return Vo({definition(e,r){var o;e.addProxy({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){return o.positionals.map(({value:a})=>a)}})}var qR=Et(()=>{yf()});var AI,LK=Et(()=>{Vp();qR();AI=class extends nt{constructor(){super(...arguments),this.args=AP()}async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.process(this.args).tokens,null,2)} +`)}};AI.paths=[["--clipanion=tokens"]]});var fI,MK=Et(()=>{Vp();fI=class extends nt{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} +`)}};fI.paths=[["-v"],["--version"]]});var GR={};Kt(GR,{DefinitionsCommand:()=>cI,HelpCommand:()=>uI,TokensCommand:()=>AI,VersionCommand:()=>fI});var OK=Et(()=>{RK();NK();LK();MK()});function UK(t,e,r){let[o,a]=qu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Vo({definition(p){p.addOption({names:u,arity:n,hidden:a?.hidden,description:a?.description,required:a.required})},transformer(p,h,E){let I,v=typeof o<"u"?[...o]:void 0;for(let{name:b,value:C}of E.options)!A.has(b)||(I=b,v=v??[],v.push(C));return typeof v<"u"?rd(I??h,v,a.validator):v}})}var _K=Et(()=>{yf()});function HK(t,e,r){let[o,a]=qu(e,r??{}),n=t.split(","),u=new Set(n);return Vo({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E=v);return E}})}var jK=Et(()=>{yf()});function qK(t,e,r){let[o,a]=qu(e,r??{}),n=t.split(","),u=new Set(n);return Vo({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E??(E=0),v?E+=1:E=0);return E}})}var GK=Et(()=>{yf()});function YK(t={}){return Vo({definition(e,r){var o;e.addRest({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){let a=u=>{let A=o.positionals[u];return A.extra===el||A.extra===!1&&uu)}})}var WK=Et(()=>{cP();yf()});function rqe(t,e,r){let[o,a]=qu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Vo({definition(p){p.addOption({names:u,arity:a.tolerateBoolean?0:n,hidden:a.hidden,description:a.description,required:a.required})},transformer(p,h,E,I){let v,b=o;typeof a.env<"u"&&I.env[a.env]&&(v=a.env,b=I.env[a.env]);for(let{name:C,value:T}of E.options)!A.has(C)||(v=C,b=T);return typeof b=="string"?rd(v??h,b,a.validator):b}})}function nqe(t={}){let{required:e=!0}=t;return Vo({definition(r,o){var a;r.addPositional({name:(a=t.name)!==null&&a!==void 0?a:o,required:t.required})},transformer(r,o,a){var n;for(let u=0;u{cP();yf()});var ge={};Kt(ge,{Array:()=>UK,Boolean:()=>HK,Counter:()=>qK,Proxy:()=>AP,Rest:()=>YK,String:()=>VK,applyValidator:()=>rd,cleanValidationError:()=>nP,formatError:()=>nI,isOptionSymbol:()=>rI,makeCommandOption:()=>Vo,rerouteArguments:()=>qu});var JK=Et(()=>{yf();qR();_K();jK();GK();WK();KK()});var pI={};Kt(pI,{Builtins:()=>GR,Cli:()=>as,Command:()=>nt,Option:()=>ge,UsageError:()=>it,formatMarkdownish:()=>Do,run:()=>QK,runExit:()=>kK});var qt=Et(()=>{rP();FR();Vp();TK();OK();JK()});var zK=_((xkt,iqe)=>{iqe.exports={name:"dotenv",version:"16.3.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard","lint-readme":"standard-markdown",pretest:"npm run lint && npm run dts-check",test:"tap tests/*.js --100 -Rspec",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},funding:"https://github.com/motdotla/dotenv?sponsor=1",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@definitelytyped/dtslint":"^0.0.133","@types/node":"^18.11.3",decache:"^4.6.1",sinon:"^14.0.1",standard:"^17.0.0","standard-markdown":"^7.1.0","standard-version":"^9.5.0",tap:"^16.3.0",tar:"^6.1.11",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var eJ=_((bkt,Ef)=>{var XK=Be("fs"),WR=Be("path"),sqe=Be("os"),oqe=Be("crypto"),aqe=zK(),VR=aqe.version,lqe=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function cqe(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,` +`);let o;for(;(o=lqe.exec(r))!=null;){let a=o[1],n=o[2]||"";n=n.trim();let u=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),u==='"'&&(n=n.replace(/\\n/g,` +`),n=n.replace(/\\r/g,"\r")),e[a]=n}return e}function uqe(t){let e=$K(t),r=xs.configDotenv({path:e});if(!r.parsed)throw new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);let o=ZK(t).split(","),a=o.length,n;for(let u=0;u=a)throw A}return xs.parse(n)}function Aqe(t){console.log(`[dotenv@${VR}][INFO] ${t}`)}function fqe(t){console.log(`[dotenv@${VR}][WARN] ${t}`)}function YR(t){console.log(`[dotenv@${VR}][DEBUG] ${t}`)}function ZK(t){return t&&t.DOTENV_KEY&&t.DOTENV_KEY.length>0?t.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function pqe(t,e){let r;try{r=new URL(e)}catch(A){throw A.code==="ERR_INVALID_URL"?new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development"):A}let o=r.password;if(!o)throw new Error("INVALID_DOTENV_KEY: Missing key part");let a=r.searchParams.get("environment");if(!a)throw new Error("INVALID_DOTENV_KEY: Missing environment part");let n=`DOTENV_VAULT_${a.toUpperCase()}`,u=t.parsed[n];if(!u)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);return{ciphertext:u,key:o}}function $K(t){let e=WR.resolve(process.cwd(),".env");return t&&t.path&&t.path.length>0&&(e=t.path),e.endsWith(".vault")?e:`${e}.vault`}function hqe(t){return t[0]==="~"?WR.join(sqe.homedir(),t.slice(1)):t}function gqe(t){Aqe("Loading env from encrypted .env.vault");let e=xs._parseVault(t),r=process.env;return t&&t.processEnv!=null&&(r=t.processEnv),xs.populate(r,e,t),{parsed:e}}function dqe(t){let e=WR.resolve(process.cwd(),".env"),r="utf8",o=Boolean(t&&t.debug);t&&(t.path!=null&&(e=hqe(t.path)),t.encoding!=null&&(r=t.encoding));try{let a=xs.parse(XK.readFileSync(e,{encoding:r})),n=process.env;return t&&t.processEnv!=null&&(n=t.processEnv),xs.populate(n,a,t),{parsed:a}}catch(a){return o&&YR(`Failed to load ${e} ${a.message}`),{error:a}}}function mqe(t){let e=$K(t);return ZK(t).length===0?xs.configDotenv(t):XK.existsSync(e)?xs._configVault(t):(fqe(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),xs.configDotenv(t))}function yqe(t,e){let r=Buffer.from(e.slice(-64),"hex"),o=Buffer.from(t,"base64"),a=o.slice(0,12),n=o.slice(-16);o=o.slice(12,-16);try{let u=oqe.createDecipheriv("aes-256-gcm",r,a);return u.setAuthTag(n),`${u.update(o)}${u.final()}`}catch(u){let A=u instanceof RangeError,p=u.message==="Invalid key length",h=u.message==="Unsupported state or unable to authenticate data";if(A||p){let E="INVALID_DOTENV_KEY: It must be 64 characters long (or more)";throw new Error(E)}else if(h){let E="DECRYPTION_FAILED: Please check your DOTENV_KEY";throw new Error(E)}else throw console.error("Error: ",u.code),console.error("Error: ",u.message),u}}function Eqe(t,e,r={}){let o=Boolean(r&&r.debug),a=Boolean(r&&r.override);if(typeof e!="object")throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(t,n)?(a===!0&&(t[n]=e[n]),o&&YR(a===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):t[n]=e[n]}var xs={configDotenv:dqe,_configVault:gqe,_parseVault:uqe,config:mqe,decrypt:yqe,parse:cqe,populate:Eqe};Ef.exports.configDotenv=xs.configDotenv;Ef.exports._configVault=xs._configVault;Ef.exports._parseVault=xs._parseVault;Ef.exports.config=xs.config;Ef.exports.decrypt=xs.decrypt;Ef.exports.parse=xs.parse;Ef.exports.populate=xs.populate;Ef.exports=xs});var rJ=_((kkt,tJ)=>{"use strict";tJ.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var nd=_((Qkt,KR)=>{"use strict";var Cqe=rJ(),nJ=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,o=()=>{r--,e.length>0&&e.shift()()},a=(A,p,...h)=>{r++;let E=Cqe(A,...h);p(E),E.then(o,o)},n=(A,p,...h)=>{rnew Promise(h=>n(A,h,...p));return Object.defineProperties(u,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),u};KR.exports=nJ;KR.exports.default=nJ});function Wu(t){return`YN${t.toString(10).padStart(4,"0")}`}function fP(t){let e=Number(t.slice(2));if(typeof wr[e]>"u")throw new Error(`Unknown message name: "${t}"`);return e}var wr,pP=Et(()=>{wr=(Me=>(Me[Me.UNNAMED=0]="UNNAMED",Me[Me.EXCEPTION=1]="EXCEPTION",Me[Me.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",Me[Me.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",Me[Me.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",Me[Me.BUILD_DISABLED=5]="BUILD_DISABLED",Me[Me.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",Me[Me.MUST_BUILD=7]="MUST_BUILD",Me[Me.MUST_REBUILD=8]="MUST_REBUILD",Me[Me.BUILD_FAILED=9]="BUILD_FAILED",Me[Me.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",Me[Me.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",Me[Me.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",Me[Me.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",Me[Me.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",Me[Me.REMOTE_INVALID=15]="REMOTE_INVALID",Me[Me.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",Me[Me.RESOLUTION_PACK=17]="RESOLUTION_PACK",Me[Me.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",Me[Me.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",Me[Me.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",Me[Me.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",Me[Me.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",Me[Me.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",Me[Me.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",Me[Me.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",Me[Me.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",Me[Me.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",Me[Me.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",Me[Me.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",Me[Me.FETCH_FAILED=30]="FETCH_FAILED",Me[Me.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",Me[Me.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",Me[Me.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",Me[Me.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",Me[Me.NETWORK_ERROR=35]="NETWORK_ERROR",Me[Me.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",Me[Me.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",Me[Me.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",Me[Me.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",Me[Me.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",Me[Me.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",Me[Me.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",Me[Me.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",Me[Me.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",Me[Me.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",Me[Me.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",Me[Me.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",Me[Me.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",Me[Me.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",Me[Me.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",Me[Me.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",Me[Me.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",Me[Me.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",Me[Me.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",Me[Me.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",Me[Me.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",Me[Me.INVALID_MANIFEST=57]="INVALID_MANIFEST",Me[Me.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",Me[Me.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",Me[Me.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",Me[Me.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",Me[Me.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",Me[Me.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",Me[Me.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",Me[Me.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",Me[Me.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",Me[Me.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",Me[Me.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",Me[Me.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",Me[Me.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",Me[Me.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",Me[Me.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",Me[Me.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK",Me[Me.NM_HARDLINKS_MODE_DOWNGRADED=74]="NM_HARDLINKS_MODE_DOWNGRADED",Me[Me.PROLOG_INSTANTIATION_ERROR=75]="PROLOG_INSTANTIATION_ERROR",Me[Me.INCOMPATIBLE_ARCHITECTURE=76]="INCOMPATIBLE_ARCHITECTURE",Me[Me.GHOST_ARCHITECTURE=77]="GHOST_ARCHITECTURE",Me[Me.RESOLUTION_MISMATCH=78]="RESOLUTION_MISMATCH",Me[Me.PROLOG_LIMIT_EXCEEDED=79]="PROLOG_LIMIT_EXCEEDED",Me[Me.NETWORK_DISABLED=80]="NETWORK_DISABLED",Me[Me.NETWORK_UNSAFE_HTTP=81]="NETWORK_UNSAFE_HTTP",Me[Me.RESOLUTION_FAILED=82]="RESOLUTION_FAILED",Me[Me.AUTOMERGE_GIT_ERROR=83]="AUTOMERGE_GIT_ERROR",Me[Me.CONSTRAINTS_CHECK_FAILED=84]="CONSTRAINTS_CHECK_FAILED",Me[Me.UPDATED_RESOLUTION_RECORD=85]="UPDATED_RESOLUTION_RECORD",Me[Me.EXPLAIN_PEER_DEPENDENCIES_CTA=86]="EXPLAIN_PEER_DEPENDENCIES_CTA",Me[Me.MIGRATION_SUCCESS=87]="MIGRATION_SUCCESS",Me[Me.VERSION_NOTICE=88]="VERSION_NOTICE",Me[Me.TIPS_NOTICE=89]="TIPS_NOTICE",Me[Me.OFFLINE_MODE_ENABLED=90]="OFFLINE_MODE_ENABLED",Me))(wr||{})});var hI=_((Tkt,iJ)=>{var wqe="2.0.0",Iqe=Number.MAX_SAFE_INTEGER||9007199254740991,Bqe=16,vqe=256-6,Dqe=["major","premajor","minor","preminor","patch","prepatch","prerelease"];iJ.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Bqe,MAX_SAFE_BUILD_LENGTH:vqe,MAX_SAFE_INTEGER:Iqe,RELEASE_TYPES:Dqe,SEMVER_SPEC_VERSION:wqe,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var gI=_((Rkt,sJ)=>{var Pqe=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};sJ.exports=Pqe});var By=_((Cf,oJ)=>{var{MAX_SAFE_COMPONENT_LENGTH:JR,MAX_SAFE_BUILD_LENGTH:Sqe,MAX_LENGTH:xqe}=hI(),bqe=gI();Cf=oJ.exports={};var kqe=Cf.re=[],Qqe=Cf.safeRe=[],lr=Cf.src=[],cr=Cf.t={},Fqe=0,zR="[a-zA-Z0-9-]",Tqe=[["\\s",1],["\\d",xqe],[zR,Sqe]],Rqe=t=>{for(let[e,r]of Tqe)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},Jr=(t,e,r)=>{let o=Rqe(e),a=Fqe++;bqe(t,a,e),cr[t]=a,lr[a]=e,kqe[a]=new RegExp(e,r?"g":void 0),Qqe[a]=new RegExp(o,r?"g":void 0)};Jr("NUMERICIDENTIFIER","0|[1-9]\\d*");Jr("NUMERICIDENTIFIERLOOSE","\\d+");Jr("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${zR}*`);Jr("MAINVERSION",`(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})`);Jr("MAINVERSIONLOOSE",`(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})`);Jr("PRERELEASEIDENTIFIER",`(?:${lr[cr.NUMERICIDENTIFIER]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASEIDENTIFIERLOOSE",`(?:${lr[cr.NUMERICIDENTIFIERLOOSE]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASE",`(?:-(${lr[cr.PRERELEASEIDENTIFIER]}(?:\\.${lr[cr.PRERELEASEIDENTIFIER]})*))`);Jr("PRERELEASELOOSE",`(?:-?(${lr[cr.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${lr[cr.PRERELEASEIDENTIFIERLOOSE]})*))`);Jr("BUILDIDENTIFIER",`${zR}+`);Jr("BUILD",`(?:\\+(${lr[cr.BUILDIDENTIFIER]}(?:\\.${lr[cr.BUILDIDENTIFIER]})*))`);Jr("FULLPLAIN",`v?${lr[cr.MAINVERSION]}${lr[cr.PRERELEASE]}?${lr[cr.BUILD]}?`);Jr("FULL",`^${lr[cr.FULLPLAIN]}$`);Jr("LOOSEPLAIN",`[v=\\s]*${lr[cr.MAINVERSIONLOOSE]}${lr[cr.PRERELEASELOOSE]}?${lr[cr.BUILD]}?`);Jr("LOOSE",`^${lr[cr.LOOSEPLAIN]}$`);Jr("GTLT","((?:<|>)?=?)");Jr("XRANGEIDENTIFIERLOOSE",`${lr[cr.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);Jr("XRANGEIDENTIFIER",`${lr[cr.NUMERICIDENTIFIER]}|x|X|\\*`);Jr("XRANGEPLAIN",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:${lr[cr.PRERELEASE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGEPLAINLOOSE",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:${lr[cr.PRERELEASELOOSE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAIN]}$`);Jr("XRANGELOOSE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COERCE",`(^|[^\\d])(\\d{1,${JR}})(?:\\.(\\d{1,${JR}}))?(?:\\.(\\d{1,${JR}}))?(?:$|[^\\d])`);Jr("COERCERTL",lr[cr.COERCE],!0);Jr("LONETILDE","(?:~>?)");Jr("TILDETRIM",`(\\s*)${lr[cr.LONETILDE]}\\s+`,!0);Cf.tildeTrimReplace="$1~";Jr("TILDE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAIN]}$`);Jr("TILDELOOSE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("LONECARET","(?:\\^)");Jr("CARETTRIM",`(\\s*)${lr[cr.LONECARET]}\\s+`,!0);Cf.caretTrimReplace="$1^";Jr("CARET",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAIN]}$`);Jr("CARETLOOSE",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COMPARATORLOOSE",`^${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]})$|^$`);Jr("COMPARATOR",`^${lr[cr.GTLT]}\\s*(${lr[cr.FULLPLAIN]})$|^$`);Jr("COMPARATORTRIM",`(\\s*)${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]}|${lr[cr.XRANGEPLAIN]})`,!0);Cf.comparatorTrimReplace="$1$2$3";Jr("HYPHENRANGE",`^\\s*(${lr[cr.XRANGEPLAIN]})\\s+-\\s+(${lr[cr.XRANGEPLAIN]})\\s*$`);Jr("HYPHENRANGELOOSE",`^\\s*(${lr[cr.XRANGEPLAINLOOSE]})\\s+-\\s+(${lr[cr.XRANGEPLAINLOOSE]})\\s*$`);Jr("STAR","(<|>)?=?\\s*\\*");Jr("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");Jr("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var hP=_((Nkt,aJ)=>{var Nqe=Object.freeze({loose:!0}),Lqe=Object.freeze({}),Mqe=t=>t?typeof t!="object"?Nqe:t:Lqe;aJ.exports=Mqe});var XR=_((Lkt,uJ)=>{var lJ=/^[0-9]+$/,cJ=(t,e)=>{let r=lJ.test(t),o=lJ.test(e);return r&&o&&(t=+t,e=+e),t===e?0:r&&!o?-1:o&&!r?1:tcJ(e,t);uJ.exports={compareIdentifiers:cJ,rcompareIdentifiers:Oqe}});var Po=_((Mkt,hJ)=>{var gP=gI(),{MAX_LENGTH:AJ,MAX_SAFE_INTEGER:dP}=hI(),{safeRe:fJ,t:pJ}=By(),Uqe=hP(),{compareIdentifiers:vy}=XR(),tl=class{constructor(e,r){if(r=Uqe(r),e instanceof tl){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>AJ)throw new TypeError(`version is longer than ${AJ} characters`);gP("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let o=e.trim().match(r.loose?fJ[pJ.LOOSE]:fJ[pJ.FULL]);if(!o)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+o[1],this.minor=+o[2],this.patch=+o[3],this.major>dP||this.major<0)throw new TypeError("Invalid major version");if(this.minor>dP||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>dP||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map(a=>{if(/^[0-9]+$/.test(a)){let n=+a;if(n>=0&&n=0;)typeof this.prerelease[n]=="number"&&(this.prerelease[n]++,n=-2);if(n===-1){if(r===this.prerelease.join(".")&&o===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let n=[r,a];o===!1&&(n=[r]),vy(this.prerelease[0],r)===0?isNaN(this.prerelease[1])&&(this.prerelease=n):this.prerelease=n}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};hJ.exports=tl});var id=_((Okt,dJ)=>{var gJ=Po(),_qe=(t,e,r=!1)=>{if(t instanceof gJ)return t;try{return new gJ(t,e)}catch(o){if(!r)return null;throw o}};dJ.exports=_qe});var yJ=_((Ukt,mJ)=>{var Hqe=id(),jqe=(t,e)=>{let r=Hqe(t,e);return r?r.version:null};mJ.exports=jqe});var CJ=_((_kt,EJ)=>{var qqe=id(),Gqe=(t,e)=>{let r=qqe(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};EJ.exports=Gqe});var BJ=_((Hkt,IJ)=>{var wJ=Po(),Yqe=(t,e,r,o,a)=>{typeof r=="string"&&(a=o,o=r,r=void 0);try{return new wJ(t instanceof wJ?t.version:t,r).inc(e,o,a).version}catch{return null}};IJ.exports=Yqe});var PJ=_((jkt,DJ)=>{var vJ=id(),Wqe=(t,e)=>{let r=vJ(t,null,!0),o=vJ(e,null,!0),a=r.compare(o);if(a===0)return null;let n=a>0,u=n?r:o,A=n?o:r,p=!!u.prerelease.length;if(!!A.prerelease.length&&!p)return!A.patch&&!A.minor?"major":u.patch?"patch":u.minor?"minor":"major";let E=p?"pre":"";return r.major!==o.major?E+"major":r.minor!==o.minor?E+"minor":r.patch!==o.patch?E+"patch":"prerelease"};DJ.exports=Wqe});var xJ=_((qkt,SJ)=>{var Vqe=Po(),Kqe=(t,e)=>new Vqe(t,e).major;SJ.exports=Kqe});var kJ=_((Gkt,bJ)=>{var Jqe=Po(),zqe=(t,e)=>new Jqe(t,e).minor;bJ.exports=zqe});var FJ=_((Ykt,QJ)=>{var Xqe=Po(),Zqe=(t,e)=>new Xqe(t,e).patch;QJ.exports=Zqe});var RJ=_((Wkt,TJ)=>{var $qe=id(),eGe=(t,e)=>{let r=$qe(t,e);return r&&r.prerelease.length?r.prerelease:null};TJ.exports=eGe});var Ll=_((Vkt,LJ)=>{var NJ=Po(),tGe=(t,e,r)=>new NJ(t,r).compare(new NJ(e,r));LJ.exports=tGe});var OJ=_((Kkt,MJ)=>{var rGe=Ll(),nGe=(t,e,r)=>rGe(e,t,r);MJ.exports=nGe});var _J=_((Jkt,UJ)=>{var iGe=Ll(),sGe=(t,e)=>iGe(t,e,!0);UJ.exports=sGe});var mP=_((zkt,jJ)=>{var HJ=Po(),oGe=(t,e,r)=>{let o=new HJ(t,r),a=new HJ(e,r);return o.compare(a)||o.compareBuild(a)};jJ.exports=oGe});var GJ=_((Xkt,qJ)=>{var aGe=mP(),lGe=(t,e)=>t.sort((r,o)=>aGe(r,o,e));qJ.exports=lGe});var WJ=_((Zkt,YJ)=>{var cGe=mP(),uGe=(t,e)=>t.sort((r,o)=>cGe(o,r,e));YJ.exports=uGe});var dI=_(($kt,VJ)=>{var AGe=Ll(),fGe=(t,e,r)=>AGe(t,e,r)>0;VJ.exports=fGe});var yP=_((eQt,KJ)=>{var pGe=Ll(),hGe=(t,e,r)=>pGe(t,e,r)<0;KJ.exports=hGe});var ZR=_((tQt,JJ)=>{var gGe=Ll(),dGe=(t,e,r)=>gGe(t,e,r)===0;JJ.exports=dGe});var $R=_((rQt,zJ)=>{var mGe=Ll(),yGe=(t,e,r)=>mGe(t,e,r)!==0;zJ.exports=yGe});var EP=_((nQt,XJ)=>{var EGe=Ll(),CGe=(t,e,r)=>EGe(t,e,r)>=0;XJ.exports=CGe});var CP=_((iQt,ZJ)=>{var wGe=Ll(),IGe=(t,e,r)=>wGe(t,e,r)<=0;ZJ.exports=IGe});var eN=_((sQt,$J)=>{var BGe=ZR(),vGe=$R(),DGe=dI(),PGe=EP(),SGe=yP(),xGe=CP(),bGe=(t,e,r,o)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return BGe(t,r,o);case"!=":return vGe(t,r,o);case">":return DGe(t,r,o);case">=":return PGe(t,r,o);case"<":return SGe(t,r,o);case"<=":return xGe(t,r,o);default:throw new TypeError(`Invalid operator: ${e}`)}};$J.exports=bGe});var tz=_((oQt,ez)=>{var kGe=Po(),QGe=id(),{safeRe:wP,t:IP}=By(),FGe=(t,e)=>{if(t instanceof kGe)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(wP[IP.COERCE]);else{let o;for(;(o=wP[IP.COERCERTL].exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||o.index+o[0].length!==r.index+r[0].length)&&(r=o),wP[IP.COERCERTL].lastIndex=o.index+o[1].length+o[2].length;wP[IP.COERCERTL].lastIndex=-1}return r===null?null:QGe(`${r[2]}.${r[3]||"0"}.${r[4]||"0"}`,e)};ez.exports=FGe});var nz=_((aQt,rz)=>{"use strict";rz.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var BP=_((lQt,iz)=>{"use strict";iz.exports=Cn;Cn.Node=sd;Cn.create=Cn;function Cn(t){var e=this;if(e instanceof Cn||(e=new Cn),e.tail=null,e.head=null,e.length=0,t&&typeof t.forEach=="function")t.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var r=0,o=arguments.length;r1)r=e;else if(this.head)o=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;o!==null;a++)r=t(r,o.value,a),o=o.next;return r};Cn.prototype.reduceReverse=function(t,e){var r,o=this.tail;if(arguments.length>1)r=e;else if(this.tail)o=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;o!==null;a--)r=t(r,o.value,a),o=o.prev;return r};Cn.prototype.toArray=function(){for(var t=new Array(this.length),e=0,r=this.head;r!==null;e++)t[e]=r.value,r=r.next;return t};Cn.prototype.toArrayReverse=function(){for(var t=new Array(this.length),e=0,r=this.tail;r!==null;e++)t[e]=r.value,r=r.prev;return t};Cn.prototype.slice=function(t,e){e=e||this.length,e<0&&(e+=this.length),t=t||0,t<0&&(t+=this.length);var r=new Cn;if(ethis.length&&(e=this.length);for(var o=0,a=this.head;a!==null&&othis.length&&(e=this.length);for(var o=this.length,a=this.tail;a!==null&&o>e;o--)a=a.prev;for(;a!==null&&o>t;o--,a=a.prev)r.push(a.value);return r};Cn.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var o=0,a=this.head;a!==null&&o{"use strict";var LGe=BP(),od=Symbol("max"),If=Symbol("length"),Dy=Symbol("lengthCalculator"),yI=Symbol("allowStale"),ad=Symbol("maxAge"),wf=Symbol("dispose"),sz=Symbol("noDisposeOnSet"),bs=Symbol("lruList"),Oc=Symbol("cache"),az=Symbol("updateAgeOnGet"),tN=()=>1,nN=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let r=this[od]=e.max||1/0,o=e.length||tN;if(this[Dy]=typeof o!="function"?tN:o,this[yI]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[ad]=e.maxAge||0,this[wf]=e.dispose,this[sz]=e.noDisposeOnSet||!1,this[az]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[od]=e||1/0,mI(this)}get max(){return this[od]}set allowStale(e){this[yI]=!!e}get allowStale(){return this[yI]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[ad]=e,mI(this)}get maxAge(){return this[ad]}set lengthCalculator(e){typeof e!="function"&&(e=tN),e!==this[Dy]&&(this[Dy]=e,this[If]=0,this[bs].forEach(r=>{r.length=this[Dy](r.value,r.key),this[If]+=r.length})),mI(this)}get lengthCalculator(){return this[Dy]}get length(){return this[If]}get itemCount(){return this[bs].length}rforEach(e,r){r=r||this;for(let o=this[bs].tail;o!==null;){let a=o.prev;oz(this,e,o,r),o=a}}forEach(e,r){r=r||this;for(let o=this[bs].head;o!==null;){let a=o.next;oz(this,e,o,r),o=a}}keys(){return this[bs].toArray().map(e=>e.key)}values(){return this[bs].toArray().map(e=>e.value)}reset(){this[wf]&&this[bs]&&this[bs].length&&this[bs].forEach(e=>this[wf](e.key,e.value)),this[Oc]=new Map,this[bs]=new LGe,this[If]=0}dump(){return this[bs].map(e=>vP(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[bs]}set(e,r,o){if(o=o||this[ad],o&&typeof o!="number")throw new TypeError("maxAge must be a number");let a=o?Date.now():0,n=this[Dy](r,e);if(this[Oc].has(e)){if(n>this[od])return Py(this,this[Oc].get(e)),!1;let p=this[Oc].get(e).value;return this[wf]&&(this[sz]||this[wf](e,p.value)),p.now=a,p.maxAge=o,p.value=r,this[If]+=n-p.length,p.length=n,this.get(e),mI(this),!0}let u=new iN(e,r,n,a,o);return u.length>this[od]?(this[wf]&&this[wf](e,r),!1):(this[If]+=u.length,this[bs].unshift(u),this[Oc].set(e,this[bs].head),mI(this),!0)}has(e){if(!this[Oc].has(e))return!1;let r=this[Oc].get(e).value;return!vP(this,r)}get(e){return rN(this,e,!0)}peek(e){return rN(this,e,!1)}pop(){let e=this[bs].tail;return e?(Py(this,e),e.value):null}del(e){Py(this,this[Oc].get(e))}load(e){this.reset();let r=Date.now();for(let o=e.length-1;o>=0;o--){let a=e[o],n=a.e||0;if(n===0)this.set(a.k,a.v);else{let u=n-r;u>0&&this.set(a.k,a.v,u)}}}prune(){this[Oc].forEach((e,r)=>rN(this,r,!1))}},rN=(t,e,r)=>{let o=t[Oc].get(e);if(o){let a=o.value;if(vP(t,a)){if(Py(t,o),!t[yI])return}else r&&(t[az]&&(o.value.now=Date.now()),t[bs].unshiftNode(o));return a.value}},vP=(t,e)=>{if(!e||!e.maxAge&&!t[ad])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[ad]&&r>t[ad]},mI=t=>{if(t[If]>t[od])for(let e=t[bs].tail;t[If]>t[od]&&e!==null;){let r=e.prev;Py(t,e),e=r}},Py=(t,e)=>{if(e){let r=e.value;t[wf]&&t[wf](r.key,r.value),t[If]-=r.length,t[Oc].delete(r.key),t[bs].removeNode(e)}},iN=class{constructor(e,r,o,a,n){this.key=e,this.value=r,this.length=o,this.now=a,this.maxAge=n||0}},oz=(t,e,r,o)=>{let a=r.value;vP(t,a)&&(Py(t,r),t[yI]||(a=void 0)),a&&e.call(o,a.value,a.key,t)};lz.exports=nN});var Ml=_((uQt,pz)=>{var ld=class{constructor(e,r){if(r=OGe(r),e instanceof ld)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new ld(e.raw,r);if(e instanceof sN)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(o=>this.parseRange(o.trim())).filter(o=>o.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let o=this.set[0];if(this.set=this.set.filter(a=>!Az(a[0])),this.set.length===0)this.set=[o];else if(this.set.length>1){for(let a of this.set)if(a.length===1&&YGe(a[0])){this.set=[a];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let o=((this.options.includePrerelease&&qGe)|(this.options.loose&&GGe))+":"+e,a=uz.get(o);if(a)return a;let n=this.options.loose,u=n?Da[zo.HYPHENRANGELOOSE]:Da[zo.HYPHENRANGE];e=e.replace(u,t5e(this.options.includePrerelease)),ci("hyphen replace",e),e=e.replace(Da[zo.COMPARATORTRIM],_Ge),ci("comparator trim",e),e=e.replace(Da[zo.TILDETRIM],HGe),ci("tilde trim",e),e=e.replace(Da[zo.CARETTRIM],jGe),ci("caret trim",e);let A=e.split(" ").map(I=>WGe(I,this.options)).join(" ").split(/\s+/).map(I=>e5e(I,this.options));n&&(A=A.filter(I=>(ci("loose invalid filter",I,this.options),!!I.match(Da[zo.COMPARATORLOOSE])))),ci("range list",A);let p=new Map,h=A.map(I=>new sN(I,this.options));for(let I of h){if(Az(I))return[I];p.set(I.value,I)}p.size>1&&p.has("")&&p.delete("");let E=[...p.values()];return uz.set(o,E),E}intersects(e,r){if(!(e instanceof ld))throw new TypeError("a Range is required");return this.set.some(o=>fz(o,r)&&e.set.some(a=>fz(a,r)&&o.every(n=>a.every(u=>n.intersects(u,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new UGe(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",YGe=t=>t.value==="",fz=(t,e)=>{let r=!0,o=t.slice(),a=o.pop();for(;r&&o.length;)r=o.every(n=>a.intersects(n,e)),a=o.pop();return r},WGe=(t,e)=>(ci("comp",t,e),t=JGe(t,e),ci("caret",t),t=VGe(t,e),ci("tildes",t),t=XGe(t,e),ci("xrange",t),t=$Ge(t,e),ci("stars",t),t),Xo=t=>!t||t.toLowerCase()==="x"||t==="*",VGe=(t,e)=>t.trim().split(/\s+/).map(r=>KGe(r,e)).join(" "),KGe=(t,e)=>{let r=e.loose?Da[zo.TILDELOOSE]:Da[zo.TILDE];return t.replace(r,(o,a,n,u,A)=>{ci("tilde",t,o,a,n,u,A);let p;return Xo(a)?p="":Xo(n)?p=`>=${a}.0.0 <${+a+1}.0.0-0`:Xo(u)?p=`>=${a}.${n}.0 <${a}.${+n+1}.0-0`:A?(ci("replaceTilde pr",A),p=`>=${a}.${n}.${u}-${A} <${a}.${+n+1}.0-0`):p=`>=${a}.${n}.${u} <${a}.${+n+1}.0-0`,ci("tilde return",p),p})},JGe=(t,e)=>t.trim().split(/\s+/).map(r=>zGe(r,e)).join(" "),zGe=(t,e)=>{ci("caret",t,e);let r=e.loose?Da[zo.CARETLOOSE]:Da[zo.CARET],o=e.includePrerelease?"-0":"";return t.replace(r,(a,n,u,A,p)=>{ci("caret",t,a,n,u,A,p);let h;return Xo(n)?h="":Xo(u)?h=`>=${n}.0.0${o} <${+n+1}.0.0-0`:Xo(A)?n==="0"?h=`>=${n}.${u}.0${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.0${o} <${+n+1}.0.0-0`:p?(ci("replaceCaret pr",p),n==="0"?u==="0"?h=`>=${n}.${u}.${A}-${p} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}-${p} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A}-${p} <${+n+1}.0.0-0`):(ci("no pr"),n==="0"?u==="0"?h=`>=${n}.${u}.${A}${o} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A} <${+n+1}.0.0-0`),ci("caret return",h),h})},XGe=(t,e)=>(ci("replaceXRanges",t,e),t.split(/\s+/).map(r=>ZGe(r,e)).join(" ")),ZGe=(t,e)=>{t=t.trim();let r=e.loose?Da[zo.XRANGELOOSE]:Da[zo.XRANGE];return t.replace(r,(o,a,n,u,A,p)=>{ci("xRange",t,o,a,n,u,A,p);let h=Xo(n),E=h||Xo(u),I=E||Xo(A),v=I;return a==="="&&v&&(a=""),p=e.includePrerelease?"-0":"",h?a===">"||a==="<"?o="<0.0.0-0":o="*":a&&v?(E&&(u=0),A=0,a===">"?(a=">=",E?(n=+n+1,u=0,A=0):(u=+u+1,A=0)):a==="<="&&(a="<",E?n=+n+1:u=+u+1),a==="<"&&(p="-0"),o=`${a+n}.${u}.${A}${p}`):E?o=`>=${n}.0.0${p} <${+n+1}.0.0-0`:I&&(o=`>=${n}.${u}.0${p} <${n}.${+u+1}.0-0`),ci("xRange return",o),o})},$Ge=(t,e)=>(ci("replaceStars",t,e),t.trim().replace(Da[zo.STAR],"")),e5e=(t,e)=>(ci("replaceGTE0",t,e),t.trim().replace(Da[e.includePrerelease?zo.GTE0PRE:zo.GTE0],"")),t5e=t=>(e,r,o,a,n,u,A,p,h,E,I,v,b)=>(Xo(o)?r="":Xo(a)?r=`>=${o}.0.0${t?"-0":""}`:Xo(n)?r=`>=${o}.${a}.0${t?"-0":""}`:u?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,Xo(h)?p="":Xo(E)?p=`<${+h+1}.0.0-0`:Xo(I)?p=`<${h}.${+E+1}.0-0`:v?p=`<=${h}.${E}.${I}-${v}`:t?p=`<${h}.${E}.${+I+1}-0`:p=`<=${p}`,`${r} ${p}`.trim()),r5e=(t,e,r)=>{for(let o=0;o0){let a=t[o].semver;if(a.major===e.major&&a.minor===e.minor&&a.patch===e.patch)return!0}return!1}return!0}});var EI=_((AQt,Ez)=>{var CI=Symbol("SemVer ANY"),Sy=class{static get ANY(){return CI}constructor(e,r){if(r=hz(r),e instanceof Sy){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),aN("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===CI?this.value="":this.value=this.operator+this.semver.version,aN("comp",this)}parse(e){let r=this.options.loose?gz[dz.COMPARATORLOOSE]:gz[dz.COMPARATOR],o=e.match(r);if(!o)throw new TypeError(`Invalid comparator: ${e}`);this.operator=o[1]!==void 0?o[1]:"",this.operator==="="&&(this.operator=""),o[2]?this.semver=new mz(o[2],this.options.loose):this.semver=CI}toString(){return this.value}test(e){if(aN("Comparator.test",e,this.options.loose),this.semver===CI||e===CI)return!0;if(typeof e=="string")try{e=new mz(e,this.options)}catch{return!1}return oN(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Sy))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new yz(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new yz(this.value,r).test(e.semver):(r=hz(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||oN(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||oN(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Ez.exports=Sy;var hz=hP(),{safeRe:gz,t:dz}=By(),oN=eN(),aN=gI(),mz=Po(),yz=Ml()});var wI=_((fQt,Cz)=>{var n5e=Ml(),i5e=(t,e,r)=>{try{e=new n5e(e,r)}catch{return!1}return e.test(t)};Cz.exports=i5e});var Iz=_((pQt,wz)=>{var s5e=Ml(),o5e=(t,e)=>new s5e(t,e).set.map(r=>r.map(o=>o.value).join(" ").trim().split(" "));wz.exports=o5e});var vz=_((hQt,Bz)=>{var a5e=Po(),l5e=Ml(),c5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new l5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===-1)&&(o=u,a=new a5e(o,r))}),o};Bz.exports=c5e});var Pz=_((gQt,Dz)=>{var u5e=Po(),A5e=Ml(),f5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new A5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===1)&&(o=u,a=new u5e(o,r))}),o};Dz.exports=f5e});var bz=_((dQt,xz)=>{var lN=Po(),p5e=Ml(),Sz=dI(),h5e=(t,e)=>{t=new p5e(t,e);let r=new lN("0.0.0");if(t.test(r)||(r=new lN("0.0.0-0"),t.test(r)))return r;r=null;for(let o=0;o{let A=new lN(u.semver.version);switch(u.operator){case">":A.prerelease.length===0?A.patch++:A.prerelease.push(0),A.raw=A.format();case"":case">=":(!n||Sz(A,n))&&(n=A);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${u.operator}`)}}),n&&(!r||Sz(r,n))&&(r=n)}return r&&t.test(r)?r:null};xz.exports=h5e});var Qz=_((mQt,kz)=>{var g5e=Ml(),d5e=(t,e)=>{try{return new g5e(t,e).range||"*"}catch{return null}};kz.exports=d5e});var DP=_((yQt,Nz)=>{var m5e=Po(),Rz=EI(),{ANY:y5e}=Rz,E5e=Ml(),C5e=wI(),Fz=dI(),Tz=yP(),w5e=CP(),I5e=EP(),B5e=(t,e,r,o)=>{t=new m5e(t,o),e=new E5e(e,o);let a,n,u,A,p;switch(r){case">":a=Fz,n=w5e,u=Tz,A=">",p=">=";break;case"<":a=Tz,n=I5e,u=Fz,A="<",p="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(C5e(t,e,o))return!1;for(let h=0;h{b.semver===y5e&&(b=new Rz(">=0.0.0")),I=I||b,v=v||b,a(b.semver,I.semver,o)?I=b:u(b.semver,v.semver,o)&&(v=b)}),I.operator===A||I.operator===p||(!v.operator||v.operator===A)&&n(t,v.semver))return!1;if(v.operator===p&&u(t,v.semver))return!1}return!0};Nz.exports=B5e});var Mz=_((EQt,Lz)=>{var v5e=DP(),D5e=(t,e,r)=>v5e(t,e,">",r);Lz.exports=D5e});var Uz=_((CQt,Oz)=>{var P5e=DP(),S5e=(t,e,r)=>P5e(t,e,"<",r);Oz.exports=S5e});var jz=_((wQt,Hz)=>{var _z=Ml(),x5e=(t,e,r)=>(t=new _z(t,r),e=new _z(e,r),t.intersects(e,r));Hz.exports=x5e});var Gz=_((IQt,qz)=>{var b5e=wI(),k5e=Ll();qz.exports=(t,e,r)=>{let o=[],a=null,n=null,u=t.sort((E,I)=>k5e(E,I,r));for(let E of u)b5e(E,e,r)?(n=E,a||(a=E)):(n&&o.push([a,n]),n=null,a=null);a&&o.push([a,null]);let A=[];for(let[E,I]of o)E===I?A.push(E):!I&&E===u[0]?A.push("*"):I?E===u[0]?A.push(`<=${I}`):A.push(`${E} - ${I}`):A.push(`>=${E}`);let p=A.join(" || "),h=typeof e.raw=="string"?e.raw:String(e);return p.length{var Yz=Ml(),uN=EI(),{ANY:cN}=uN,II=wI(),AN=Ll(),Q5e=(t,e,r={})=>{if(t===e)return!0;t=new Yz(t,r),e=new Yz(e,r);let o=!1;e:for(let a of t.set){for(let n of e.set){let u=T5e(a,n,r);if(o=o||u!==null,u)continue e}if(o)return!1}return!0},F5e=[new uN(">=0.0.0-0")],Wz=[new uN(">=0.0.0")],T5e=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===cN){if(e.length===1&&e[0].semver===cN)return!0;r.includePrerelease?t=F5e:t=Wz}if(e.length===1&&e[0].semver===cN){if(r.includePrerelease)return!0;e=Wz}let o=new Set,a,n;for(let b of t)b.operator===">"||b.operator===">="?a=Vz(a,b,r):b.operator==="<"||b.operator==="<="?n=Kz(n,b,r):o.add(b.semver);if(o.size>1)return null;let u;if(a&&n){if(u=AN(a.semver,n.semver,r),u>0)return null;if(u===0&&(a.operator!==">="||n.operator!=="<="))return null}for(let b of o){if(a&&!II(b,String(a),r)||n&&!II(b,String(n),r))return null;for(let C of e)if(!II(b,String(C),r))return!1;return!0}let A,p,h,E,I=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1,v=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;I&&I.prerelease.length===1&&n.operator==="<"&&I.prerelease[0]===0&&(I=!1);for(let b of e){if(E=E||b.operator===">"||b.operator===">=",h=h||b.operator==="<"||b.operator==="<=",a){if(v&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===v.major&&b.semver.minor===v.minor&&b.semver.patch===v.patch&&(v=!1),b.operator===">"||b.operator===">="){if(A=Vz(a,b,r),A===b&&A!==a)return!1}else if(a.operator===">="&&!II(a.semver,String(b),r))return!1}if(n){if(I&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===I.major&&b.semver.minor===I.minor&&b.semver.patch===I.patch&&(I=!1),b.operator==="<"||b.operator==="<="){if(p=Kz(n,b,r),p===b&&p!==n)return!1}else if(n.operator==="<="&&!II(n.semver,String(b),r))return!1}if(!b.operator&&(n||a)&&u!==0)return!1}return!(a&&h&&!n&&u!==0||n&&E&&!a&&u!==0||v||I)},Vz=(t,e,r)=>{if(!t)return e;let o=AN(t.semver,e.semver,r);return o>0?t:o<0||e.operator===">"&&t.operator===">="?e:t},Kz=(t,e,r)=>{if(!t)return e;let o=AN(t.semver,e.semver,r);return o<0?t:o>0||e.operator==="<"&&t.operator==="<="?e:t};Jz.exports=Q5e});var zn=_((vQt,$z)=>{var fN=By(),Xz=hI(),R5e=Po(),Zz=XR(),N5e=id(),L5e=yJ(),M5e=CJ(),O5e=BJ(),U5e=PJ(),_5e=xJ(),H5e=kJ(),j5e=FJ(),q5e=RJ(),G5e=Ll(),Y5e=OJ(),W5e=_J(),V5e=mP(),K5e=GJ(),J5e=WJ(),z5e=dI(),X5e=yP(),Z5e=ZR(),$5e=$R(),e9e=EP(),t9e=CP(),r9e=eN(),n9e=tz(),i9e=EI(),s9e=Ml(),o9e=wI(),a9e=Iz(),l9e=vz(),c9e=Pz(),u9e=bz(),A9e=Qz(),f9e=DP(),p9e=Mz(),h9e=Uz(),g9e=jz(),d9e=Gz(),m9e=zz();$z.exports={parse:N5e,valid:L5e,clean:M5e,inc:O5e,diff:U5e,major:_5e,minor:H5e,patch:j5e,prerelease:q5e,compare:G5e,rcompare:Y5e,compareLoose:W5e,compareBuild:V5e,sort:K5e,rsort:J5e,gt:z5e,lt:X5e,eq:Z5e,neq:$5e,gte:e9e,lte:t9e,cmp:r9e,coerce:n9e,Comparator:i9e,Range:s9e,satisfies:o9e,toComparators:a9e,maxSatisfying:l9e,minSatisfying:c9e,minVersion:u9e,validRange:A9e,outside:f9e,gtr:p9e,ltr:h9e,intersects:g9e,simplifyRange:d9e,subset:m9e,SemVer:R5e,re:fN.re,src:fN.src,tokens:fN.t,SEMVER_SPEC_VERSION:Xz.SEMVER_SPEC_VERSION,RELEASE_TYPES:Xz.RELEASE_TYPES,compareIdentifiers:Zz.compareIdentifiers,rcompareIdentifiers:Zz.rcompareIdentifiers}});var tX=_((DQt,eX)=>{"use strict";function y9e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function cd(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,cd)}y9e(cd,Error);cd.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I{switch(Ne[1]){case"|":return Se|Ne[3];case"&":return Se&Ne[3];case"^":return Se^Ne[3]}},Z)},v="!",b=Re("!",!1),C=function(Z){return!Z},T="(",L=Re("(",!1),U=")",J=Re(")",!1),te=function(Z){return Z},le=/^[^ \t\n\r()!|&\^]/,pe=Qe([" "," ",` +`,"\r","(",")","!","|","&","^"],!0,!1),Ae=function(Z){return e.queryPattern.test(Z)},ye=function(Z){return e.checkFn(Z)},ae=Te("whitespace"),we=/^[ \t\n\r]/,Pe=Qe([" "," ",` +`,"\r"],!1,!1),g=0,Ee=0,De=[{line:1,column:1}],ce=0,ne=[],ee=0,Ie;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function ke(){return t.substring(Ee,g)}function ht(){return He(Ee,g)}function H(Z,ie){throw ie=ie!==void 0?ie:He(Ee,g),S([Te(Z)],t.substring(Ee,g),ie)}function lt(Z,ie){throw ie=ie!==void 0?ie:He(Ee,g),w(Z,ie)}function Re(Z,ie){return{type:"literal",text:Z,ignoreCase:ie}}function Qe(Z,ie,Se){return{type:"class",parts:Z,inverted:ie,ignoreCase:Se}}function be(){return{type:"any"}}function _e(){return{type:"end"}}function Te(Z){return{type:"other",description:Z}}function Je(Z){var ie=De[Z],Se;if(ie)return ie;for(Se=Z-1;!De[Se];)Se--;for(ie=De[Se],ie={line:ie.line,column:ie.column};Sece&&(ce=g,ne=[]),ne.push(Z))}function w(Z,ie){return new cd(Z,null,null,ie)}function S(Z,ie,Se){return new cd(cd.buildMessage(Z,ie),Z,ie,Se)}function y(){var Z,ie,Se,Ne,ot,dt,jt,$t;if(Z=g,ie=F(),ie!==r){for(Se=[],Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&x(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&x(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&x(E)))),dt!==r?(jt=X(),jt!==r?($t=F(),$t!==r?(ot=[ot,dt,jt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Ne!==r;)Se.push(Ne),Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&x(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&x(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&x(E)))),dt!==r?(jt=X(),jt!==r?($t=F(),$t!==r?(ot=[ot,dt,jt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Se!==r?(Ee=Z,ie=I(ie,Se),Z=ie):(g=Z,Z=r)}else g=Z,Z=r;return Z}function F(){var Z,ie,Se,Ne,ot,dt;return Z=g,t.charCodeAt(g)===33?(ie=v,g++):(ie=r,ee===0&&x(b)),ie!==r?(Se=F(),Se!==r?(Ee=Z,ie=C(Se),Z=ie):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=g,t.charCodeAt(g)===40?(ie=T,g++):(ie=r,ee===0&&x(L)),ie!==r?(Se=X(),Se!==r?(Ne=y(),Ne!==r?(ot=X(),ot!==r?(t.charCodeAt(g)===41?(dt=U,g++):(dt=r,ee===0&&x(J)),dt!==r?(Ee=Z,ie=te(Ne),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=z())),Z}function z(){var Z,ie,Se,Ne,ot;if(Z=g,ie=X(),ie!==r){if(Se=g,Ne=[],le.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&x(pe)),ot!==r)for(;ot!==r;)Ne.push(ot),le.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&x(pe));else Ne=r;Ne!==r?Se=t.substring(Se,g):Se=Ne,Se!==r?(Ee=g,Ne=Ae(Se),Ne?Ne=void 0:Ne=r,Ne!==r?(Ee=Z,ie=ye(Se),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)}else g=Z,Z=r;return Z}function X(){var Z,ie;for(ee++,Z=[],we.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&x(Pe));ie!==r;)Z.push(ie),we.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&x(Pe));return ee--,Z===r&&(ie=r,ee===0&&x(ae)),Z}if(Ie=a(),Ie!==r&&g===t.length)return Ie;throw Ie!==r&&g{var{parse:C9e}=tX();PP.makeParser=(t=/[a-z]+/)=>(e,r)=>C9e(e,{queryPattern:t,checkFn:r});PP.parse=PP.makeParser()});var iX=_((SQt,nX)=>{"use strict";nX.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var pN=_((xQt,oX)=>{var BI=iX(),sX={};for(let t of Object.keys(BI))sX[BI[t]]=t;var Ar={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};oX.exports=Ar;for(let t of Object.keys(Ar)){if(!("channels"in Ar[t]))throw new Error("missing channels property: "+t);if(!("labels"in Ar[t]))throw new Error("missing channel labels property: "+t);if(Ar[t].labels.length!==Ar[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=Ar[t];delete Ar[t].channels,delete Ar[t].labels,Object.defineProperty(Ar[t],"channels",{value:e}),Object.defineProperty(Ar[t],"labels",{value:r})}Ar.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(e,r,o),n=Math.max(e,r,o),u=n-a,A,p;n===a?A=0:e===n?A=(r-o)/u:r===n?A=2+(o-e)/u:o===n&&(A=4+(e-r)/u),A=Math.min(A*60,360),A<0&&(A+=360);let h=(a+n)/2;return n===a?p=0:h<=.5?p=u/(n+a):p=u/(2-n-a),[A,p*100,h*100]};Ar.rgb.hsv=function(t){let e,r,o,a,n,u=t[0]/255,A=t[1]/255,p=t[2]/255,h=Math.max(u,A,p),E=h-Math.min(u,A,p),I=function(v){return(h-v)/6/E+1/2};return E===0?(a=0,n=0):(n=E/h,e=I(u),r=I(A),o=I(p),u===h?a=o-r:A===h?a=1/3+e-o:p===h&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[a*360,n*100,h*100]};Ar.rgb.hwb=function(t){let e=t[0],r=t[1],o=t[2],a=Ar.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,o));return o=1-1/255*Math.max(e,Math.max(r,o)),[a,n*100,o*100]};Ar.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(1-e,1-r,1-o),n=(1-e-a)/(1-a)||0,u=(1-r-a)/(1-a)||0,A=(1-o-a)/(1-a)||0;return[n*100,u*100,A*100,a*100]};function w9e(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}Ar.rgb.keyword=function(t){let e=sX[t];if(e)return e;let r=1/0,o;for(let a of Object.keys(BI)){let n=BI[a],u=w9e(t,n);u.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92;let a=e*.4124+r*.3576+o*.1805,n=e*.2126+r*.7152+o*.0722,u=e*.0193+r*.1192+o*.9505;return[a*100,n*100,u*100]};Ar.rgb.lab=function(t){let e=Ar.rgb.xyz(t),r=e[0],o=e[1],a=e[2];r/=95.047,o/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;let n=116*o-16,u=500*(r-o),A=200*(o-a);return[n,u,A]};Ar.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a,n,u;if(r===0)return u=o*255,[u,u,u];o<.5?a=o*(1+r):a=o+r-o*r;let A=2*o-a,p=[0,0,0];for(let h=0;h<3;h++)n=e+1/3*-(h-1),n<0&&n++,n>1&&n--,6*n<1?u=A+(a-A)*6*n:2*n<1?u=a:3*n<2?u=A+(a-A)*(2/3-n)*6:u=A,p[h]=u*255;return p};Ar.hsl.hsv=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=r,n=Math.max(o,.01);o*=2,r*=o<=1?o:2-o,a*=n<=1?n:2-n;let u=(o+r)/2,A=o===0?2*a/(n+a):2*r/(o+r);return[e,A*100,u*100]};Ar.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,o=t[2]/100,a=Math.floor(e)%6,n=e-Math.floor(e),u=255*o*(1-r),A=255*o*(1-r*n),p=255*o*(1-r*(1-n));switch(o*=255,a){case 0:return[o,p,u];case 1:return[A,o,u];case 2:return[u,o,p];case 3:return[u,A,o];case 4:return[p,u,o];case 5:return[o,u,A]}};Ar.hsv.hsl=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=Math.max(o,.01),n,u;u=(2-r)*o;let A=(2-r)*a;return n=r*a,n/=A<=1?A:2-A,n=n||0,u/=2,[e,n*100,u*100]};Ar.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a=r+o,n;a>1&&(r/=a,o/=a);let u=Math.floor(6*e),A=1-o;n=6*e-u,(u&1)!==0&&(n=1-n);let p=r+n*(A-r),h,E,I;switch(u){default:case 6:case 0:h=A,E=p,I=r;break;case 1:h=p,E=A,I=r;break;case 2:h=r,E=A,I=p;break;case 3:h=r,E=p,I=A;break;case 4:h=p,E=r,I=A;break;case 5:h=A,E=r,I=p;break}return[h*255,E*255,I*255]};Ar.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a=t[3]/100,n=1-Math.min(1,e*(1-a)+a),u=1-Math.min(1,r*(1-a)+a),A=1-Math.min(1,o*(1-a)+a);return[n*255,u*255,A*255]};Ar.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a,n,u;return a=e*3.2406+r*-1.5372+o*-.4986,n=e*-.9689+r*1.8758+o*.0415,u=e*.0557+r*-.204+o*1.057,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,u=u>.0031308?1.055*u**(1/2.4)-.055:u*12.92,a=Math.min(Math.max(0,a),1),n=Math.min(Math.max(0,n),1),u=Math.min(Math.max(0,u),1),[a*255,n*255,u*255]};Ar.xyz.lab=function(t){let e=t[0],r=t[1],o=t[2];e/=95.047,r/=100,o/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let a=116*r-16,n=500*(e-r),u=200*(r-o);return[a,n,u]};Ar.lab.xyz=function(t){let e=t[0],r=t[1],o=t[2],a,n,u;n=(e+16)/116,a=r/500+n,u=n-o/200;let A=n**3,p=a**3,h=u**3;return n=A>.008856?A:(n-16/116)/7.787,a=p>.008856?p:(a-16/116)/7.787,u=h>.008856?h:(u-16/116)/7.787,a*=95.047,n*=100,u*=108.883,[a,n,u]};Ar.lab.lch=function(t){let e=t[0],r=t[1],o=t[2],a;a=Math.atan2(o,r)*360/2/Math.PI,a<0&&(a+=360);let u=Math.sqrt(r*r+o*o);return[e,u,a]};Ar.lch.lab=function(t){let e=t[0],r=t[1],a=t[2]/360*2*Math.PI,n=r*Math.cos(a),u=r*Math.sin(a);return[e,n,u]};Ar.rgb.ansi16=function(t,e=null){let[r,o,a]=t,n=e===null?Ar.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let u=30+(Math.round(a/255)<<2|Math.round(o/255)<<1|Math.round(r/255));return n===2&&(u+=60),u};Ar.hsv.ansi16=function(t){return Ar.rgb.ansi16(Ar.hsv.rgb(t),t[2])};Ar.rgb.ansi256=function(t){let e=t[0],r=t[1],o=t[2];return e===r&&r===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)};Ar.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let r=(~~(t>50)+1)*.5,o=(e&1)*r*255,a=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[o,a,n]};Ar.ansi256.rgb=function(t){if(t>=232){let n=(t-232)*10+8;return[n,n,n]}t-=16;let e,r=Math.floor(t/36)/5*255,o=Math.floor((e=t%36)/6)/5*255,a=e%6/5*255;return[r,o,a]};Ar.rgb.hex=function(t){let r=(((Math.round(t[0])&255)<<16)+((Math.round(t[1])&255)<<8)+(Math.round(t[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};Ar.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];e[0].length===3&&(r=r.split("").map(A=>A+A).join(""));let o=parseInt(r,16),a=o>>16&255,n=o>>8&255,u=o&255;return[a,n,u]};Ar.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.max(Math.max(e,r),o),n=Math.min(Math.min(e,r),o),u=a-n,A,p;return u<1?A=n/(1-u):A=0,u<=0?p=0:a===e?p=(r-o)/u%6:a===r?p=2+(o-e)/u:p=4+(e-r)/u,p/=6,p%=1,[p*360,u*100,A*100]};Ar.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=r<.5?2*e*r:2*e*(1-r),a=0;return o<1&&(a=(r-.5*o)/(1-o)),[t[0],o*100,a*100]};Ar.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=e*r,a=0;return o<1&&(a=(r-o)/(1-o)),[t[0],o*100,a*100]};Ar.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100;if(r===0)return[o*255,o*255,o*255];let a=[0,0,0],n=e%1*6,u=n%1,A=1-u,p=0;switch(Math.floor(n)){case 0:a[0]=1,a[1]=u,a[2]=0;break;case 1:a[0]=A,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=u;break;case 3:a[0]=0,a[1]=A,a[2]=1;break;case 4:a[0]=u,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=A}return p=(1-r)*o,[(r*a[0]+p)*255,(r*a[1]+p)*255,(r*a[2]+p)*255]};Ar.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e),a=0;return o>0&&(a=e/o),[t[0],a*100,o*100]};Ar.hcg.hsl=function(t){let e=t[1]/100,o=t[2]/100*(1-e)+.5*e,a=0;return o>0&&o<.5?a=e/(2*o):o>=.5&&o<1&&(a=e/(2*(1-o))),[t[0],a*100,o*100]};Ar.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e);return[t[0],(o-e)*100,(1-o)*100]};Ar.hwb.hcg=function(t){let e=t[1]/100,o=1-t[2]/100,a=o-e,n=0;return a<1&&(n=(o-a)/(1-a)),[t[0],a*100,n*100]};Ar.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};Ar.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};Ar.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};Ar.gray.hsl=function(t){return[0,0,t[0]]};Ar.gray.hsv=Ar.gray.hsl;Ar.gray.hwb=function(t){return[0,100,t[0]]};Ar.gray.cmyk=function(t){return[0,0,0,t[0]]};Ar.gray.lab=function(t){return[t[0],0,0]};Ar.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,o=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(o.length)+o};Ar.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var lX=_((bQt,aX)=>{var SP=pN();function I9e(){let t={},e=Object.keys(SP);for(let r=e.length,o=0;o{var hN=pN(),P9e=lX(),xy={},S9e=Object.keys(hN);function x9e(t){let e=function(...r){let o=r[0];return o==null?o:(o.length>1&&(r=o),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function b9e(t){let e=function(...r){let o=r[0];if(o==null)return o;o.length>1&&(r=o);let a=t(r);if(typeof a=="object")for(let n=a.length,u=0;u{xy[t]={},Object.defineProperty(xy[t],"channels",{value:hN[t].channels}),Object.defineProperty(xy[t],"labels",{value:hN[t].labels});let e=P9e(t);Object.keys(e).forEach(o=>{let a=e[o];xy[t][o]=b9e(a),xy[t][o].raw=x9e(a)})});cX.exports=xy});var vI=_((QQt,gX)=>{"use strict";var AX=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,fX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};5;${o}m`},pX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};2;${o[0]};${o[1]};${o[2]}m`},xP=t=>t,hX=(t,e,r)=>[t,e,r],by=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let o=r();return Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0}),o},enumerable:!0,configurable:!0})},gN,ky=(t,e,r,o)=>{gN===void 0&&(gN=uX());let a=o?10:0,n={};for(let[u,A]of Object.entries(gN)){let p=u==="ansi16"?"ansi":u;u===e?n[p]=t(r,a):typeof A=="object"&&(n[p]=t(A[e],a))}return n};function k9e(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[r,o]of Object.entries(e)){for(let[a,n]of Object.entries(o))e[a]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},o[a]=e[a],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:o,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",by(e.color,"ansi",()=>ky(AX,"ansi16",xP,!1)),by(e.color,"ansi256",()=>ky(fX,"ansi256",xP,!1)),by(e.color,"ansi16m",()=>ky(pX,"rgb",hX,!1)),by(e.bgColor,"ansi",()=>ky(AX,"ansi16",xP,!0)),by(e.bgColor,"ansi256",()=>ky(fX,"ansi256",xP,!0)),by(e.bgColor,"ansi16m",()=>ky(pX,"rgb",hX,!0)),e}Object.defineProperty(gX,"exports",{enumerable:!0,get:k9e})});var mX=_((FQt,dX)=>{"use strict";dX.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",o=e.indexOf(r+t),a=e.indexOf("--");return o!==-1&&(a===-1||o{"use strict";var Q9e=Be("os"),yX=Be("tty"),Ol=mX(),{env:ls}=process,Kp;Ol("no-color")||Ol("no-colors")||Ol("color=false")||Ol("color=never")?Kp=0:(Ol("color")||Ol("colors")||Ol("color=true")||Ol("color=always"))&&(Kp=1);"FORCE_COLOR"in ls&&(ls.FORCE_COLOR==="true"?Kp=1:ls.FORCE_COLOR==="false"?Kp=0:Kp=ls.FORCE_COLOR.length===0?1:Math.min(parseInt(ls.FORCE_COLOR,10),3));function dN(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function mN(t,e){if(Kp===0)return 0;if(Ol("color=16m")||Ol("color=full")||Ol("color=truecolor"))return 3;if(Ol("color=256"))return 2;if(t&&!e&&Kp===void 0)return 0;let r=Kp||0;if(ls.TERM==="dumb")return r;if(process.platform==="win32"){let o=Q9e.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in ls)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(o=>o in ls)||ls.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in ls)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ls.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in ls)return 1;if(ls.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ls){let o=parseInt((ls.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ls.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ls.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ls.TERM)||"COLORTERM"in ls?1:r}function F9e(t){let e=mN(t,t&&t.isTTY);return dN(e)}EX.exports={supportsColor:F9e,stdout:dN(mN(!0,yX.isatty(1))),stderr:dN(mN(!0,yX.isatty(2)))}});var wX=_((RQt,CX)=>{"use strict";var T9e=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},R9e=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`:` +`)+r,a=o+1,o=t.indexOf(` +`,a)}while(o!==-1);return n+=t.substr(a),n};CX.exports={stringReplaceAll:T9e,stringEncaseCRLFWithFirstIndex:R9e}});var PX=_((NQt,DX)=>{"use strict";var N9e=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,IX=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,L9e=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,M9e=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,O9e=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function vX(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):O9e.get(t)||t}function U9e(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(L9e))r.push(a[2].replace(M9e,(A,p,h)=>p?vX(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function _9e(t){IX.lastIndex=0;let e=[],r;for(;(r=IX.exec(t))!==null;){let o=r[1];if(r[2]){let a=U9e(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function BX(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}DX.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(N9e,(n,u,A,p,h,E)=>{if(u)a.push(vX(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:BX(t,r)(I)),r.push({inverse:A,styles:_9e(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(BX(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var vN=_((LQt,kX)=>{"use strict";var DI=vI(),{stdout:CN,stderr:wN}=yN(),{stringReplaceAll:H9e,stringEncaseCRLFWithFirstIndex:j9e}=wX(),SX=["ansi","ansi","ansi256","ansi16m"],Qy=Object.create(null),q9e=(t,e={})=>{if(e.level>3||e.level<0)throw new Error("The `level` option should be an integer from 0 to 3");let r=CN?CN.level:0;t.level=e.level===void 0?r:e.level},IN=class{constructor(e){return xX(e)}},xX=t=>{let e={};return q9e(e,t),e.template=(...r)=>W9e(e.template,...r),Object.setPrototypeOf(e,bP.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=IN,e.template};function bP(t){return xX(t)}for(let[t,e]of Object.entries(DI))Qy[t]={get(){let r=kP(this,BN(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};Qy.visible={get(){let t=kP(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var bX=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of bX)Qy[t]={get(){let{level:e}=this;return function(...r){let o=BN(DI.color[SX[e]][t](...r),DI.color.close,this._styler);return kP(this,o,this._isEmpty)}}};for(let t of bX){let e="bg"+t[0].toUpperCase()+t.slice(1);Qy[e]={get(){let{level:r}=this;return function(...o){let a=BN(DI.bgColor[SX[r]][t](...o),DI.bgColor.close,this._styler);return kP(this,a,this._isEmpty)}}}}var G9e=Object.defineProperties(()=>{},{...Qy,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),BN=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},kP=(t,e,r)=>{let o=(...a)=>Y9e(o,a.length===1?""+a[0]:a.join(" "));return o.__proto__=G9e,o._generator=t,o._styler=e,o._isEmpty=r,o},Y9e=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=H9e(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=j9e(e,a,o,n)),o+e+a},EN,W9e=(t,...e)=>{let[r]=e;if(!Array.isArray(r))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";Ul.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Ul.find=(t,e)=>t.nodes.find(r=>r.type===e);Ul.exceedsLimit=(t,e,r=1,o)=>o===!1||!Ul.isInteger(t)||!Ul.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=o;Ul.escapeNode=(t,e=0,r)=>{let o=t.nodes[e];!o||(r&&o.type===r||o.type==="open"||o.type==="close")&&o.escaped!==!0&&(o.value="\\"+o.value,o.escaped=!0)};Ul.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;Ul.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:t.commas>>0+t.ranges>>0===0||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;Ul.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Ul.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Ul.flatten=(...t)=>{let e=[],r=o=>{for(let a=0;a{"use strict";var QX=QP();FX.exports=(t,e={})=>{let r=(o,a={})=>{let n=e.escapeInvalid&&QX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A="";if(o.value)return(n||u)&&QX.isOpenOrClose(o)?"\\"+o.value:o.value;if(o.value)return o.value;if(o.nodes)for(let p of o.nodes)A+=r(p);return A};return r(t)}});var RX=_((UQt,TX)=>{"use strict";TX.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var qX=_((_Qt,jX)=>{"use strict";var NX=RX(),ud=(t,e,r)=>{if(NX(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(NX(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let o={relaxZeros:!0,...r};typeof o.strictZeros=="boolean"&&(o.relaxZeros=o.strictZeros===!1);let a=String(o.relaxZeros),n=String(o.shorthand),u=String(o.capture),A=String(o.wrap),p=t+":"+e+"="+a+n+u+A;if(ud.cache.hasOwnProperty(p))return ud.cache[p].result;let h=Math.min(t,e),E=Math.max(t,e);if(Math.abs(h-E)===1){let T=t+"|"+e;return o.capture?`(${T})`:o.wrap===!1?T:`(?:${T})`}let I=HX(t)||HX(e),v={min:t,max:e,a:h,b:E},b=[],C=[];if(I&&(v.isPadded=I,v.maxLen=String(v.max).length),h<0){let T=E<0?Math.abs(E):1;C=LX(T,Math.abs(h),v,o),h=v.a=0}return E>=0&&(b=LX(h,E,v,o)),v.negatives=C,v.positives=b,v.result=V9e(C,b,o),o.capture===!0?v.result=`(${v.result})`:o.wrap!==!1&&b.length+C.length>1&&(v.result=`(?:${v.result})`),ud.cache[p]=v,v.result};function V9e(t,e,r){let o=DN(t,e,"-",!1,r)||[],a=DN(e,t,"",!1,r)||[],n=DN(t,e,"-?",!0,r)||[];return o.concat(n).concat(a).join("|")}function K9e(t,e){let r=1,o=1,a=OX(t,r),n=new Set([e]);for(;t<=a&&a<=e;)n.add(a),r+=1,a=OX(t,r);for(a=UX(e+1,o)-1;t1&&A.count.pop(),A.count.push(E.count[0]),A.string=A.pattern+_X(A.count),u=h+1;continue}r.isPadded&&(I=$9e(h,r,o)),E.string=I+E.pattern+_X(E.count),n.push(E),u=h+1,A=E}return n}function DN(t,e,r,o,a){let n=[];for(let u of t){let{string:A}=u;!o&&!MX(e,"string",A)&&n.push(r+A),o&&MX(e,"string",A)&&n.push(r+A)}return n}function z9e(t,e){let r=[];for(let o=0;oe?1:e>t?-1:0}function MX(t,e,r){return t.some(o=>o[e]===r)}function OX(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function UX(t,e){return t-t%Math.pow(10,e)}function _X(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function Z9e(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function HX(t){return/^-?(0+)\d/.test(t)}function $9e(t,e,r){if(!e.isPadded)return t;let o=Math.abs(e.maxLen-String(t).length),a=r.relaxZeros!==!1;switch(o){case 0:return"";case 1:return a?"0?":"0";case 2:return a?"0{0,2}":"00";default:return a?`0{0,${o}}`:`0{${o}}`}}ud.cache={};ud.clearCache=()=>ud.cache={};jX.exports=ud});var xN=_((HQt,XX)=>{"use strict";var e7e=Be("util"),WX=qX(),GX=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),t7e=t=>e=>t===!0?Number(e):String(e),PN=t=>typeof t=="number"||typeof t=="string"&&t!=="",SI=t=>Number.isInteger(+t),SN=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},r7e=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,n7e=(t,e,r)=>{if(e>0){let o=t[0]==="-"?"-":"";o&&(t=t.slice(1)),t=o+t.padStart(o?e-1:e,"0")}return r===!1?String(t):t},YX=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((u,A)=>uA?1:0),t.positives.sort((u,A)=>uA?1:0);let r=e.capture?"":"?:",o="",a="",n;return t.positives.length&&(o=t.positives.join("|")),t.negatives.length&&(a=`-(${r}${t.negatives.join("|")})`),o&&a?n=`${o}|${a}`:n=o||a,e.wrap?`(${r}${n})`:n},VX=(t,e,r,o)=>{if(r)return WX(t,e,{wrap:!1,...o});let a=String.fromCharCode(t);if(t===e)return a;let n=String.fromCharCode(e);return`[${a}-${n}]`},KX=(t,e,r)=>{if(Array.isArray(t)){let o=r.wrap===!0,a=r.capture?"":"?:";return o?`(${a}${t.join("|")})`:t.join("|")}return WX(t,e,r)},JX=(...t)=>new RangeError("Invalid range arguments: "+e7e.inspect(...t)),zX=(t,e,r)=>{if(r.strictRanges===!0)throw JX([t,e]);return[]},s7e=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},o7e=(t,e,r=1,o={})=>{let a=Number(t),n=Number(e);if(!Number.isInteger(a)||!Number.isInteger(n)){if(o.strictRanges===!0)throw JX([t,e]);return[]}a===0&&(a=0),n===0&&(n=0);let u=a>n,A=String(t),p=String(e),h=String(r);r=Math.max(Math.abs(r),1);let E=SN(A)||SN(p)||SN(h),I=E?Math.max(A.length,p.length,h.length):0,v=E===!1&&r7e(t,e,o)===!1,b=o.transform||t7e(v);if(o.toRegex&&r===1)return VX(YX(t,I),YX(e,I),!0,o);let C={negatives:[],positives:[]},T=J=>C[J<0?"negatives":"positives"].push(Math.abs(J)),L=[],U=0;for(;u?a>=n:a<=n;)o.toRegex===!0&&r>1?T(a):L.push(n7e(b(a,U),I,v)),a=u?a-r:a+r,U++;return o.toRegex===!0?r>1?i7e(C,o):KX(L,null,{wrap:!1,...o}):L},a7e=(t,e,r=1,o={})=>{if(!SI(t)&&t.length>1||!SI(e)&&e.length>1)return zX(t,e,o);let a=o.transform||(v=>String.fromCharCode(v)),n=`${t}`.charCodeAt(0),u=`${e}`.charCodeAt(0),A=n>u,p=Math.min(n,u),h=Math.max(n,u);if(o.toRegex&&r===1)return VX(p,h,!1,o);let E=[],I=0;for(;A?n>=u:n<=u;)E.push(a(n,I)),n=A?n-r:n+r,I++;return o.toRegex===!0?KX(E,null,{wrap:!1,options:o}):E},TP=(t,e,r,o={})=>{if(e==null&&PN(t))return[t];if(!PN(t)||!PN(e))return zX(t,e,o);if(typeof r=="function")return TP(t,e,1,{transform:r});if(GX(r))return TP(t,e,0,r);let a={...o};return a.capture===!0&&(a.wrap=!0),r=r||a.step||1,SI(r)?SI(t)&&SI(e)?o7e(t,e,r,a):a7e(t,e,Math.max(Math.abs(r),1),a):r!=null&&!GX(r)?s7e(r,a):TP(t,e,1,r)};XX.exports=TP});var eZ=_((jQt,$X)=>{"use strict";var l7e=xN(),ZX=QP(),c7e=(t,e={})=>{let r=(o,a={})=>{let n=ZX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A=n===!0||u===!0,p=e.escapeInvalid===!0?"\\":"",h="";if(o.isOpen===!0||o.isClose===!0)return p+o.value;if(o.type==="open")return A?p+o.value:"(";if(o.type==="close")return A?p+o.value:")";if(o.type==="comma")return o.prev.type==="comma"?"":A?o.value:"|";if(o.value)return o.value;if(o.nodes&&o.ranges>0){let E=ZX.reduce(o.nodes),I=l7e(...E,{...e,wrap:!1,toRegex:!0});if(I.length!==0)return E.length>1&&I.length>1?`(${I})`:I}if(o.nodes)for(let E of o.nodes)h+=r(E,o);return h};return r(t)};$X.exports=c7e});var nZ=_((qQt,rZ)=>{"use strict";var u7e=xN(),tZ=FP(),Fy=QP(),Ad=(t="",e="",r=!1)=>{let o=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Fy.flatten(e).map(a=>`{${a}}`):e;for(let a of t)if(Array.isArray(a))for(let n of a)o.push(Ad(n,e,r));else for(let n of e)r===!0&&typeof n=="string"&&(n=`{${n}}`),o.push(Array.isArray(n)?Ad(a,n,r):a+n);return Fy.flatten(o)},A7e=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,o=(a,n={})=>{a.queue=[];let u=n,A=n.queue;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,A=u.queue;if(a.invalid||a.dollar){A.push(Ad(A.pop(),tZ(a,e)));return}if(a.type==="brace"&&a.invalid!==!0&&a.nodes.length===2){A.push(Ad(A.pop(),["{}"]));return}if(a.nodes&&a.ranges>0){let I=Fy.reduce(a.nodes);if(Fy.exceedsLimit(...I,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let v=u7e(...I,e);v.length===0&&(v=tZ(a,e)),A.push(Ad(A.pop(),v)),a.nodes=[];return}let p=Fy.encloseBrace(a),h=a.queue,E=a;for(;E.type!=="brace"&&E.type!=="root"&&E.parent;)E=E.parent,h=E.queue;for(let I=0;I{"use strict";iZ.exports={MAX_LENGTH:1024*64,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:` +`,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var uZ=_((YQt,cZ)=>{"use strict";var f7e=FP(),{MAX_LENGTH:oZ,CHAR_BACKSLASH:bN,CHAR_BACKTICK:p7e,CHAR_COMMA:h7e,CHAR_DOT:g7e,CHAR_LEFT_PARENTHESES:d7e,CHAR_RIGHT_PARENTHESES:m7e,CHAR_LEFT_CURLY_BRACE:y7e,CHAR_RIGHT_CURLY_BRACE:E7e,CHAR_LEFT_SQUARE_BRACKET:aZ,CHAR_RIGHT_SQUARE_BRACKET:lZ,CHAR_DOUBLE_QUOTE:C7e,CHAR_SINGLE_QUOTE:w7e,CHAR_NO_BREAK_SPACE:I7e,CHAR_ZERO_WIDTH_NOBREAK_SPACE:B7e}=sZ(),v7e=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},o=typeof r.maxLength=="number"?Math.min(oZ,r.maxLength):oZ;if(t.length>o)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${o})`);let a={type:"root",input:t,nodes:[]},n=[a],u=a,A=a,p=0,h=t.length,E=0,I=0,v,b={},C=()=>t[E++],T=L=>{if(L.type==="text"&&A.type==="dot"&&(A.type="text"),A&&A.type==="text"&&L.type==="text"){A.value+=L.value;return}return u.nodes.push(L),L.parent=u,L.prev=A,A=L,L};for(T({type:"bos"});E0){if(u.ranges>0){u.ranges=0;let L=u.nodes.shift();u.nodes=[L,{type:"text",value:f7e(u)}]}T({type:"comma",value:v}),u.commas++;continue}if(v===g7e&&I>0&&u.commas===0){let L=u.nodes;if(I===0||L.length===0){T({type:"text",value:v});continue}if(A.type==="dot"){if(u.range=[],A.value+=v,A.type="range",u.nodes.length!==3&&u.nodes.length!==5){u.invalid=!0,u.ranges=0,A.type="text";continue}u.ranges++,u.args=[];continue}if(A.type==="range"){L.pop();let U=L[L.length-1];U.value+=A.value+v,A=U,u.ranges--;continue}T({type:"dot",value:v});continue}T({type:"text",value:v})}do if(u=n.pop(),u.type!=="root"){u.nodes.forEach(J=>{J.nodes||(J.type==="open"&&(J.isOpen=!0),J.type==="close"&&(J.isClose=!0),J.nodes||(J.type="text"),J.invalid=!0)});let L=n[n.length-1],U=L.nodes.indexOf(u);L.nodes.splice(U,1,...u.nodes)}while(n.length>0);return T({type:"eos"}),a};cZ.exports=v7e});var pZ=_((WQt,fZ)=>{"use strict";var AZ=FP(),D7e=eZ(),P7e=nZ(),S7e=uZ(),rl=(t,e={})=>{let r=[];if(Array.isArray(t))for(let o of t){let a=rl.create(o,e);Array.isArray(a)?r.push(...a):r.push(a)}else r=[].concat(rl.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};rl.parse=(t,e={})=>S7e(t,e);rl.stringify=(t,e={})=>AZ(typeof t=="string"?rl.parse(t,e):t,e);rl.compile=(t,e={})=>(typeof t=="string"&&(t=rl.parse(t,e)),D7e(t,e));rl.expand=(t,e={})=>{typeof t=="string"&&(t=rl.parse(t,e));let r=P7e(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};rl.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?rl.compile(t,e):rl.expand(t,e);fZ.exports=rl});var xI=_((VQt,yZ)=>{"use strict";var x7e=Be("path"),Vu="\\\\/",hZ=`[^${Vu}]`,Bf="\\.",b7e="\\+",k7e="\\?",RP="\\/",Q7e="(?=.)",gZ="[^/]",kN=`(?:${RP}|$)`,dZ=`(?:^|${RP})`,QN=`${Bf}{1,2}${kN}`,F7e=`(?!${Bf})`,T7e=`(?!${dZ}${QN})`,R7e=`(?!${Bf}{0,1}${kN})`,N7e=`(?!${QN})`,L7e=`[^.${RP}]`,M7e=`${gZ}*?`,mZ={DOT_LITERAL:Bf,PLUS_LITERAL:b7e,QMARK_LITERAL:k7e,SLASH_LITERAL:RP,ONE_CHAR:Q7e,QMARK:gZ,END_ANCHOR:kN,DOTS_SLASH:QN,NO_DOT:F7e,NO_DOTS:T7e,NO_DOT_SLASH:R7e,NO_DOTS_SLASH:N7e,QMARK_NO_DOT:L7e,STAR:M7e,START_ANCHOR:dZ},O7e={...mZ,SLASH_LITERAL:`[${Vu}]`,QMARK:hZ,STAR:`${hZ}*?`,DOTS_SLASH:`${Bf}{1,2}(?:[${Vu}]|$)`,NO_DOT:`(?!${Bf})`,NO_DOTS:`(?!(?:^|[${Vu}])${Bf}{1,2}(?:[${Vu}]|$))`,NO_DOT_SLASH:`(?!${Bf}{0,1}(?:[${Vu}]|$))`,NO_DOTS_SLASH:`(?!${Bf}{1,2}(?:[${Vu}]|$))`,QMARK_NO_DOT:`[^.${Vu}]`,START_ANCHOR:`(?:^|[${Vu}])`,END_ANCHOR:`(?:[${Vu}]|$)`},U7e={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};yZ.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:U7e,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:x7e.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?O7e:mZ}}});var bI=_(Pa=>{"use strict";var _7e=Be("path"),H7e=process.platform==="win32",{REGEX_BACKSLASH:j7e,REGEX_REMOVE_BACKSLASH:q7e,REGEX_SPECIAL_CHARS:G7e,REGEX_SPECIAL_CHARS_GLOBAL:Y7e}=xI();Pa.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);Pa.hasRegexChars=t=>G7e.test(t);Pa.isRegexChar=t=>t.length===1&&Pa.hasRegexChars(t);Pa.escapeRegex=t=>t.replace(Y7e,"\\$1");Pa.toPosixSlashes=t=>t.replace(j7e,"/");Pa.removeBackslashes=t=>t.replace(q7e,e=>e==="\\"?"":e);Pa.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};Pa.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:H7e===!0||_7e.sep==="\\";Pa.escapeLast=(t,e,r)=>{let o=t.lastIndexOf(e,r);return o===-1?t:t[o-1]==="\\"?Pa.escapeLast(t,e,o-1):`${t.slice(0,o)}\\${t.slice(o)}`};Pa.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};Pa.wrapOutput=(t,e={},r={})=>{let o=r.contains?"":"^",a=r.contains?"":"$",n=`${o}(?:${t})${a}`;return e.negated===!0&&(n=`(?:^(?!${n}).*$)`),n}});var PZ=_((JQt,DZ)=>{"use strict";var EZ=bI(),{CHAR_ASTERISK:FN,CHAR_AT:W7e,CHAR_BACKWARD_SLASH:kI,CHAR_COMMA:V7e,CHAR_DOT:TN,CHAR_EXCLAMATION_MARK:RN,CHAR_FORWARD_SLASH:vZ,CHAR_LEFT_CURLY_BRACE:NN,CHAR_LEFT_PARENTHESES:LN,CHAR_LEFT_SQUARE_BRACKET:K7e,CHAR_PLUS:J7e,CHAR_QUESTION_MARK:CZ,CHAR_RIGHT_CURLY_BRACE:z7e,CHAR_RIGHT_PARENTHESES:wZ,CHAR_RIGHT_SQUARE_BRACKET:X7e}=xI(),IZ=t=>t===vZ||t===kI,BZ=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},Z7e=(t,e)=>{let r=e||{},o=t.length-1,a=r.parts===!0||r.scanToEnd===!0,n=[],u=[],A=[],p=t,h=-1,E=0,I=0,v=!1,b=!1,C=!1,T=!1,L=!1,U=!1,J=!1,te=!1,le=!1,pe=!1,Ae=0,ye,ae,we={value:"",depth:0,isGlob:!1},Pe=()=>h>=o,g=()=>p.charCodeAt(h+1),Ee=()=>(ye=ae,p.charCodeAt(++h));for(;h0&&(ce=p.slice(0,E),p=p.slice(E),I-=E),De&&C===!0&&I>0?(De=p.slice(0,I),ne=p.slice(I)):C===!0?(De="",ne=p):De=p,De&&De!==""&&De!=="/"&&De!==p&&IZ(De.charCodeAt(De.length-1))&&(De=De.slice(0,-1)),r.unescape===!0&&(ne&&(ne=EZ.removeBackslashes(ne)),De&&J===!0&&(De=EZ.removeBackslashes(De)));let ee={prefix:ce,input:t,start:E,base:De,glob:ne,isBrace:v,isBracket:b,isGlob:C,isExtglob:T,isGlobstar:L,negated:te,negatedExtglob:le};if(r.tokens===!0&&(ee.maxDepth=0,IZ(ae)||u.push(we),ee.tokens=u),r.parts===!0||r.tokens===!0){let Ie;for(let ke=0;ke{"use strict";var NP=xI(),nl=bI(),{MAX_LENGTH:LP,POSIX_REGEX_SOURCE:$7e,REGEX_NON_SPECIAL_CHARS:eYe,REGEX_SPECIAL_CHARS_BACKREF:tYe,REPLACEMENTS:SZ}=NP,rYe=(t,e)=>{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();let r=`[${t.join("-")}]`;try{new RegExp(r)}catch{return t.map(a=>nl.escapeRegex(a)).join("..")}return r},Ty=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,MN=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=SZ[t]||t;let r={...e},o=typeof r.maxLength=="number"?Math.min(LP,r.maxLength):LP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);let n={type:"bos",value:"",output:r.prepend||""},u=[n],A=r.capture?"":"?:",p=nl.isWindows(e),h=NP.globChars(p),E=NP.extglobChars(h),{DOT_LITERAL:I,PLUS_LITERAL:v,SLASH_LITERAL:b,ONE_CHAR:C,DOTS_SLASH:T,NO_DOT:L,NO_DOT_SLASH:U,NO_DOTS_SLASH:J,QMARK:te,QMARK_NO_DOT:le,STAR:pe,START_ANCHOR:Ae}=h,ye=x=>`(${A}(?:(?!${Ae}${x.dot?T:I}).)*?)`,ae=r.dot?"":L,we=r.dot?te:le,Pe=r.bash===!0?ye(r):pe;r.capture&&(Pe=`(${Pe})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let g={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:u};t=nl.removePrefix(t,g),a=t.length;let Ee=[],De=[],ce=[],ne=n,ee,Ie=()=>g.index===a-1,ke=g.peek=(x=1)=>t[g.index+x],ht=g.advance=()=>t[++g.index]||"",H=()=>t.slice(g.index+1),lt=(x="",w=0)=>{g.consumed+=x,g.index+=w},Re=x=>{g.output+=x.output!=null?x.output:x.value,lt(x.value)},Qe=()=>{let x=1;for(;ke()==="!"&&(ke(2)!=="("||ke(3)==="?");)ht(),g.start++,x++;return x%2===0?!1:(g.negated=!0,g.start++,!0)},be=x=>{g[x]++,ce.push(x)},_e=x=>{g[x]--,ce.pop()},Te=x=>{if(ne.type==="globstar"){let w=g.braces>0&&(x.type==="comma"||x.type==="brace"),S=x.extglob===!0||Ee.length&&(x.type==="pipe"||x.type==="paren");x.type!=="slash"&&x.type!=="paren"&&!w&&!S&&(g.output=g.output.slice(0,-ne.output.length),ne.type="star",ne.value="*",ne.output=Pe,g.output+=ne.output)}if(Ee.length&&x.type!=="paren"&&(Ee[Ee.length-1].inner+=x.value),(x.value||x.output)&&Re(x),ne&&ne.type==="text"&&x.type==="text"){ne.value+=x.value,ne.output=(ne.output||"")+x.value;return}x.prev=ne,u.push(x),ne=x},Je=(x,w)=>{let S={...E[w],conditions:1,inner:""};S.prev=ne,S.parens=g.parens,S.output=g.output;let y=(r.capture?"(":"")+S.open;be("parens"),Te({type:x,value:w,output:g.output?"":C}),Te({type:"paren",extglob:!0,value:ht(),output:y}),Ee.push(S)},He=x=>{let w=x.close+(r.capture?")":""),S;if(x.type==="negate"){let y=Pe;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(y=ye(r)),(y!==Pe||Ie()||/^\)+$/.test(H()))&&(w=x.close=`)$))${y}`),x.inner.includes("*")&&(S=H())&&/^\.[^\\/.]+$/.test(S)){let F=MN(S,{...e,fastpaths:!1}).output;w=x.close=`)${F})${y})`}x.prev.type==="bos"&&(g.negatedExtglob=!0)}Te({type:"paren",extglob:!0,value:ee,output:w}),_e("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,w=t.replace(tYe,(S,y,F,z,X,Z)=>z==="\\"?(x=!0,S):z==="?"?y?y+z+(X?te.repeat(X.length):""):Z===0?we+(X?te.repeat(X.length):""):te.repeat(F.length):z==="."?I.repeat(F.length):z==="*"?y?y+z+(X?Pe:""):Pe:y?S:`\\${S}`);return x===!0&&(r.unescape===!0?w=w.replace(/\\/g,""):w=w.replace(/\\+/g,S=>S.length%2===0?"\\\\":S?"\\":"")),w===t&&r.contains===!0?(g.output=t,g):(g.output=nl.wrapOutput(w,g,e),g)}for(;!Ie();){if(ee=ht(),ee==="\0")continue;if(ee==="\\"){let S=ke();if(S==="/"&&r.bash!==!0||S==="."||S===";")continue;if(!S){ee+="\\",Te({type:"text",value:ee});continue}let y=/^\\+/.exec(H()),F=0;if(y&&y[0].length>2&&(F=y[0].length,g.index+=F,F%2!==0&&(ee+="\\")),r.unescape===!0?ee=ht():ee+=ht(),g.brackets===0){Te({type:"text",value:ee});continue}}if(g.brackets>0&&(ee!=="]"||ne.value==="["||ne.value==="[^")){if(r.posix!==!1&&ee===":"){let S=ne.value.slice(1);if(S.includes("[")&&(ne.posix=!0,S.includes(":"))){let y=ne.value.lastIndexOf("["),F=ne.value.slice(0,y),z=ne.value.slice(y+2),X=$7e[z];if(X){ne.value=F+X,g.backtrack=!0,ht(),!n.output&&u.indexOf(ne)===1&&(n.output=C);continue}}}(ee==="["&&ke()!==":"||ee==="-"&&ke()==="]")&&(ee=`\\${ee}`),ee==="]"&&(ne.value==="["||ne.value==="[^")&&(ee=`\\${ee}`),r.posix===!0&&ee==="!"&&ne.value==="["&&(ee="^"),ne.value+=ee,Re({value:ee});continue}if(g.quotes===1&&ee!=='"'){ee=nl.escapeRegex(ee),ne.value+=ee,Re({value:ee});continue}if(ee==='"'){g.quotes=g.quotes===1?0:1,r.keepQuotes===!0&&Te({type:"text",value:ee});continue}if(ee==="("){be("parens"),Te({type:"paren",value:ee});continue}if(ee===")"){if(g.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Ty("opening","("));let S=Ee[Ee.length-1];if(S&&g.parens===S.parens+1){He(Ee.pop());continue}Te({type:"paren",value:ee,output:g.parens?")":"\\)"}),_e("parens");continue}if(ee==="["){if(r.nobracket===!0||!H().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));ee=`\\${ee}`}else be("brackets");Te({type:"bracket",value:ee});continue}if(ee==="]"){if(r.nobracket===!0||ne&&ne.type==="bracket"&&ne.value.length===1){Te({type:"text",value:ee,output:`\\${ee}`});continue}if(g.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(Ty("opening","["));Te({type:"text",value:ee,output:`\\${ee}`});continue}_e("brackets");let S=ne.value.slice(1);if(ne.posix!==!0&&S[0]==="^"&&!S.includes("/")&&(ee=`/${ee}`),ne.value+=ee,Re({value:ee}),r.literalBrackets===!1||nl.hasRegexChars(S))continue;let y=nl.escapeRegex(ne.value);if(g.output=g.output.slice(0,-ne.value.length),r.literalBrackets===!0){g.output+=y,ne.value=y;continue}ne.value=`(${A}${y}|${ne.value})`,g.output+=ne.value;continue}if(ee==="{"&&r.nobrace!==!0){be("braces");let S={type:"brace",value:ee,output:"(",outputIndex:g.output.length,tokensIndex:g.tokens.length};De.push(S),Te(S);continue}if(ee==="}"){let S=De[De.length-1];if(r.nobrace===!0||!S){Te({type:"text",value:ee,output:ee});continue}let y=")";if(S.dots===!0){let F=u.slice(),z=[];for(let X=F.length-1;X>=0&&(u.pop(),F[X].type!=="brace");X--)F[X].type!=="dots"&&z.unshift(F[X].value);y=rYe(z,r),g.backtrack=!0}if(S.comma!==!0&&S.dots!==!0){let F=g.output.slice(0,S.outputIndex),z=g.tokens.slice(S.tokensIndex);S.value=S.output="\\{",ee=y="\\}",g.output=F;for(let X of z)g.output+=X.output||X.value}Te({type:"brace",value:ee,output:y}),_e("braces"),De.pop();continue}if(ee==="|"){Ee.length>0&&Ee[Ee.length-1].conditions++,Te({type:"text",value:ee});continue}if(ee===","){let S=ee,y=De[De.length-1];y&&ce[ce.length-1]==="braces"&&(y.comma=!0,S="|"),Te({type:"comma",value:ee,output:S});continue}if(ee==="/"){if(ne.type==="dot"&&g.index===g.start+1){g.start=g.index+1,g.consumed="",g.output="",u.pop(),ne=n;continue}Te({type:"slash",value:ee,output:b});continue}if(ee==="."){if(g.braces>0&&ne.type==="dot"){ne.value==="."&&(ne.output=I);let S=De[De.length-1];ne.type="dots",ne.output+=ee,ne.value+=ee,S.dots=!0;continue}if(g.braces+g.parens===0&&ne.type!=="bos"&&ne.type!=="slash"){Te({type:"text",value:ee,output:I});continue}Te({type:"dot",value:ee,output:I});continue}if(ee==="?"){if(!(ne&&ne.value==="(")&&r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Je("qmark",ee);continue}if(ne&&ne.type==="paren"){let y=ke(),F=ee;if(y==="<"&&!nl.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(ne.value==="("&&!/[!=<:]/.test(y)||y==="<"&&!/<([!=]|\w+>)/.test(H()))&&(F=`\\${ee}`),Te({type:"text",value:ee,output:F});continue}if(r.dot!==!0&&(ne.type==="slash"||ne.type==="bos")){Te({type:"qmark",value:ee,output:le});continue}Te({type:"qmark",value:ee,output:te});continue}if(ee==="!"){if(r.noextglob!==!0&&ke()==="("&&(ke(2)!=="?"||!/[!=<:]/.test(ke(3)))){Je("negate",ee);continue}if(r.nonegate!==!0&&g.index===0){Qe();continue}}if(ee==="+"){if(r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Je("plus",ee);continue}if(ne&&ne.value==="("||r.regex===!1){Te({type:"plus",value:ee,output:v});continue}if(ne&&(ne.type==="bracket"||ne.type==="paren"||ne.type==="brace")||g.parens>0){Te({type:"plus",value:ee});continue}Te({type:"plus",value:v});continue}if(ee==="@"){if(r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Te({type:"at",extglob:!0,value:ee,output:""});continue}Te({type:"text",value:ee});continue}if(ee!=="*"){(ee==="$"||ee==="^")&&(ee=`\\${ee}`);let S=eYe.exec(H());S&&(ee+=S[0],g.index+=S[0].length),Te({type:"text",value:ee});continue}if(ne&&(ne.type==="globstar"||ne.star===!0)){ne.type="star",ne.star=!0,ne.value+=ee,ne.output=Pe,g.backtrack=!0,g.globstar=!0,lt(ee);continue}let x=H();if(r.noextglob!==!0&&/^\([^?]/.test(x)){Je("star",ee);continue}if(ne.type==="star"){if(r.noglobstar===!0){lt(ee);continue}let S=ne.prev,y=S.prev,F=S.type==="slash"||S.type==="bos",z=y&&(y.type==="star"||y.type==="globstar");if(r.bash===!0&&(!F||x[0]&&x[0]!=="/")){Te({type:"star",value:ee,output:""});continue}let X=g.braces>0&&(S.type==="comma"||S.type==="brace"),Z=Ee.length&&(S.type==="pipe"||S.type==="paren");if(!F&&S.type!=="paren"&&!X&&!Z){Te({type:"star",value:ee,output:""});continue}for(;x.slice(0,3)==="/**";){let ie=t[g.index+4];if(ie&&ie!=="/")break;x=x.slice(3),lt("/**",3)}if(S.type==="bos"&&Ie()){ne.type="globstar",ne.value+=ee,ne.output=ye(r),g.output=ne.output,g.globstar=!0,lt(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&!z&&Ie()){g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=ye(r)+(r.strictSlashes?")":"|$)"),ne.value+=ee,g.globstar=!0,g.output+=S.output+ne.output,lt(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&x[0]==="/"){let ie=x[1]!==void 0?"|$":"";g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=`${ye(r)}${b}|${b}${ie})`,ne.value+=ee,g.output+=S.output+ne.output,g.globstar=!0,lt(ee+ht()),Te({type:"slash",value:"/",output:""});continue}if(S.type==="bos"&&x[0]==="/"){ne.type="globstar",ne.value+=ee,ne.output=`(?:^|${b}|${ye(r)}${b})`,g.output=ne.output,g.globstar=!0,lt(ee+ht()),Te({type:"slash",value:"/",output:""});continue}g.output=g.output.slice(0,-ne.output.length),ne.type="globstar",ne.output=ye(r),ne.value+=ee,g.output+=ne.output,g.globstar=!0,lt(ee);continue}let w={type:"star",value:ee,output:Pe};if(r.bash===!0){w.output=".*?",(ne.type==="bos"||ne.type==="slash")&&(w.output=ae+w.output),Te(w);continue}if(ne&&(ne.type==="bracket"||ne.type==="paren")&&r.regex===!0){w.output=ee,Te(w);continue}(g.index===g.start||ne.type==="slash"||ne.type==="dot")&&(ne.type==="dot"?(g.output+=U,ne.output+=U):r.dot===!0?(g.output+=J,ne.output+=J):(g.output+=ae,ne.output+=ae),ke()!=="*"&&(g.output+=C,ne.output+=C)),Te(w)}for(;g.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));g.output=nl.escapeLast(g.output,"["),_e("brackets")}for(;g.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing",")"));g.output=nl.escapeLast(g.output,"("),_e("parens")}for(;g.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","}"));g.output=nl.escapeLast(g.output,"{"),_e("braces")}if(r.strictSlashes!==!0&&(ne.type==="star"||ne.type==="bracket")&&Te({type:"maybe_slash",value:"",output:`${b}?`}),g.backtrack===!0){g.output="";for(let x of g.tokens)g.output+=x.output!=null?x.output:x.value,x.suffix&&(g.output+=x.suffix)}return g};MN.fastpaths=(t,e)=>{let r={...e},o=typeof r.maxLength=="number"?Math.min(LP,r.maxLength):LP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);t=SZ[t]||t;let n=nl.isWindows(e),{DOT_LITERAL:u,SLASH_LITERAL:A,ONE_CHAR:p,DOTS_SLASH:h,NO_DOT:E,NO_DOTS:I,NO_DOTS_SLASH:v,STAR:b,START_ANCHOR:C}=NP.globChars(n),T=r.dot?I:E,L=r.dot?v:E,U=r.capture?"":"?:",J={negated:!1,prefix:""},te=r.bash===!0?".*?":b;r.capture&&(te=`(${te})`);let le=ae=>ae.noglobstar===!0?te:`(${U}(?:(?!${C}${ae.dot?h:u}).)*?)`,pe=ae=>{switch(ae){case"*":return`${T}${p}${te}`;case".*":return`${u}${p}${te}`;case"*.*":return`${T}${te}${u}${p}${te}`;case"*/*":return`${T}${te}${A}${p}${L}${te}`;case"**":return T+le(r);case"**/*":return`(?:${T}${le(r)}${A})?${L}${p}${te}`;case"**/*.*":return`(?:${T}${le(r)}${A})?${L}${te}${u}${p}${te}`;case"**/.*":return`(?:${T}${le(r)}${A})?${u}${p}${te}`;default:{let we=/^(.*?)\.(\w+)$/.exec(ae);if(!we)return;let Pe=pe(we[1]);return Pe?Pe+u+we[2]:void 0}}},Ae=nl.removePrefix(t,J),ye=pe(Ae);return ye&&r.strictSlashes!==!0&&(ye+=`${A}?`),ye};xZ.exports=MN});var QZ=_((XQt,kZ)=>{"use strict";var nYe=Be("path"),iYe=PZ(),ON=bZ(),UN=bI(),sYe=xI(),oYe=t=>t&&typeof t=="object"&&!Array.isArray(t),Oi=(t,e,r=!1)=>{if(Array.isArray(t)){let E=t.map(v=>Oi(v,e,r));return v=>{for(let b of E){let C=b(v);if(C)return C}return!1}}let o=oYe(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!o)throw new TypeError("Expected pattern to be a non-empty string");let a=e||{},n=UN.isWindows(e),u=o?Oi.compileRe(t,e):Oi.makeRe(t,e,!1,!0),A=u.state;delete u.state;let p=()=>!1;if(a.ignore){let E={...e,ignore:null,onMatch:null,onResult:null};p=Oi(a.ignore,E,r)}let h=(E,I=!1)=>{let{isMatch:v,match:b,output:C}=Oi.test(E,u,e,{glob:t,posix:n}),T={glob:t,state:A,regex:u,posix:n,input:E,output:C,match:b,isMatch:v};return typeof a.onResult=="function"&&a.onResult(T),v===!1?(T.isMatch=!1,I?T:!1):p(E)?(typeof a.onIgnore=="function"&&a.onIgnore(T),T.isMatch=!1,I?T:!1):(typeof a.onMatch=="function"&&a.onMatch(T),I?T:!0)};return r&&(h.state=A),h};Oi.test=(t,e,r,{glob:o,posix:a}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let n=r||{},u=n.format||(a?UN.toPosixSlashes:null),A=t===o,p=A&&u?u(t):t;return A===!1&&(p=u?u(t):t,A=p===o),(A===!1||n.capture===!0)&&(n.matchBase===!0||n.basename===!0?A=Oi.matchBase(t,e,r,a):A=e.exec(p)),{isMatch:Boolean(A),match:A,output:p}};Oi.matchBase=(t,e,r,o=UN.isWindows(r))=>(e instanceof RegExp?e:Oi.makeRe(e,r)).test(nYe.basename(t));Oi.isMatch=(t,e,r)=>Oi(e,r)(t);Oi.parse=(t,e)=>Array.isArray(t)?t.map(r=>Oi.parse(r,e)):ON(t,{...e,fastpaths:!1});Oi.scan=(t,e)=>iYe(t,e);Oi.compileRe=(t,e,r=!1,o=!1)=>{if(r===!0)return t.output;let a=e||{},n=a.contains?"":"^",u=a.contains?"":"$",A=`${n}(?:${t.output})${u}`;t&&t.negated===!0&&(A=`^(?!${A}).*$`);let p=Oi.toRegex(A,e);return o===!0&&(p.state=t),p};Oi.makeRe=(t,e={},r=!1,o=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let a={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(a.output=ON.fastpaths(t,e)),a.output||(a=ON(t,e)),Oi.compileRe(a,e,r,o)};Oi.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};Oi.constants=sYe;kZ.exports=Oi});var TZ=_((ZQt,FZ)=>{"use strict";FZ.exports=QZ()});var Zo=_(($Qt,MZ)=>{"use strict";var NZ=Be("util"),LZ=pZ(),Ku=TZ(),_N=bI(),RZ=t=>t===""||t==="./",yi=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let o=new Set,a=new Set,n=new Set,u=0,A=E=>{n.add(E.output),r&&r.onResult&&r.onResult(E)};for(let E=0;E!o.has(E));if(r&&h.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(E=>E.replace(/\\/g,"")):e}return h};yi.match=yi;yi.matcher=(t,e)=>Ku(t,e);yi.isMatch=(t,e,r)=>Ku(e,r)(t);yi.any=yi.isMatch;yi.not=(t,e,r={})=>{e=[].concat(e).map(String);let o=new Set,a=[],n=A=>{r.onResult&&r.onResult(A),a.push(A.output)},u=new Set(yi(t,e,{...r,onResult:n}));for(let A of a)u.has(A)||o.add(A);return[...o]};yi.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${NZ.inspect(t)}"`);if(Array.isArray(e))return e.some(o=>yi.contains(t,o,r));if(typeof e=="string"){if(RZ(t)||RZ(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return yi.isMatch(t,e,{...r,contains:!0})};yi.matchKeys=(t,e,r)=>{if(!_N.isObject(t))throw new TypeError("Expected the first argument to be an object");let o=yi(Object.keys(t),e,r),a={};for(let n of o)a[n]=t[n];return a};yi.some=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Ku(String(a),r);if(o.some(u=>n(u)))return!0}return!1};yi.every=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Ku(String(a),r);if(!o.every(u=>n(u)))return!1}return!0};yi.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${NZ.inspect(t)}"`);return[].concat(e).every(o=>Ku(o,r)(t))};yi.capture=(t,e,r)=>{let o=_N.isWindows(r),n=Ku.makeRe(String(t),{...r,capture:!0}).exec(o?_N.toPosixSlashes(e):e);if(n)return n.slice(1).map(u=>u===void 0?"":u)};yi.makeRe=(...t)=>Ku.makeRe(...t);yi.scan=(...t)=>Ku.scan(...t);yi.parse=(t,e)=>{let r=[];for(let o of[].concat(t||[]))for(let a of LZ(String(o),e))r.push(Ku.parse(a,e));return r};yi.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:LZ(t,e)};yi.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return yi.braces(t,{...e,expand:!0})};MZ.exports=yi});var UZ=_((eFt,OZ)=>{"use strict";OZ.exports=({onlyFirst:t=!1}={})=>{let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}});var MP=_((tFt,_Z)=>{"use strict";var aYe=UZ();_Z.exports=t=>typeof t=="string"?t.replace(aYe(),""):t});var jZ=_((rFt,HZ)=>{function lYe(){this.__data__=[],this.size=0}HZ.exports=lYe});var Ry=_((nFt,qZ)=>{function cYe(t,e){return t===e||t!==t&&e!==e}qZ.exports=cYe});var QI=_((iFt,GZ)=>{var uYe=Ry();function AYe(t,e){for(var r=t.length;r--;)if(uYe(t[r][0],e))return r;return-1}GZ.exports=AYe});var WZ=_((sFt,YZ)=>{var fYe=QI(),pYe=Array.prototype,hYe=pYe.splice;function gYe(t){var e=this.__data__,r=fYe(e,t);if(r<0)return!1;var o=e.length-1;return r==o?e.pop():hYe.call(e,r,1),--this.size,!0}YZ.exports=gYe});var KZ=_((oFt,VZ)=>{var dYe=QI();function mYe(t){var e=this.__data__,r=dYe(e,t);return r<0?void 0:e[r][1]}VZ.exports=mYe});var zZ=_((aFt,JZ)=>{var yYe=QI();function EYe(t){return yYe(this.__data__,t)>-1}JZ.exports=EYe});var ZZ=_((lFt,XZ)=>{var CYe=QI();function wYe(t,e){var r=this.__data__,o=CYe(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}XZ.exports=wYe});var FI=_((cFt,$Z)=>{var IYe=jZ(),BYe=WZ(),vYe=KZ(),DYe=zZ(),PYe=ZZ();function Ny(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var SYe=FI();function xYe(){this.__data__=new SYe,this.size=0}e$.exports=xYe});var n$=_((AFt,r$)=>{function bYe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}r$.exports=bYe});var s$=_((fFt,i$)=>{function kYe(t){return this.__data__.get(t)}i$.exports=kYe});var a$=_((pFt,o$)=>{function QYe(t){return this.__data__.has(t)}o$.exports=QYe});var HN=_((hFt,l$)=>{var FYe=typeof global=="object"&&global&&global.Object===Object&&global;l$.exports=FYe});var _l=_((gFt,c$)=>{var TYe=HN(),RYe=typeof self=="object"&&self&&self.Object===Object&&self,NYe=TYe||RYe||Function("return this")();c$.exports=NYe});var fd=_((dFt,u$)=>{var LYe=_l(),MYe=LYe.Symbol;u$.exports=MYe});var h$=_((mFt,p$)=>{var A$=fd(),f$=Object.prototype,OYe=f$.hasOwnProperty,UYe=f$.toString,TI=A$?A$.toStringTag:void 0;function _Ye(t){var e=OYe.call(t,TI),r=t[TI];try{t[TI]=void 0;var o=!0}catch{}var a=UYe.call(t);return o&&(e?t[TI]=r:delete t[TI]),a}p$.exports=_Ye});var d$=_((yFt,g$)=>{var HYe=Object.prototype,jYe=HYe.toString;function qYe(t){return jYe.call(t)}g$.exports=qYe});var pd=_((EFt,E$)=>{var m$=fd(),GYe=h$(),YYe=d$(),WYe="[object Null]",VYe="[object Undefined]",y$=m$?m$.toStringTag:void 0;function KYe(t){return t==null?t===void 0?VYe:WYe:y$&&y$ in Object(t)?GYe(t):YYe(t)}E$.exports=KYe});var il=_((CFt,C$)=>{function JYe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}C$.exports=JYe});var OP=_((wFt,w$)=>{var zYe=pd(),XYe=il(),ZYe="[object AsyncFunction]",$Ye="[object Function]",eWe="[object GeneratorFunction]",tWe="[object Proxy]";function rWe(t){if(!XYe(t))return!1;var e=zYe(t);return e==$Ye||e==eWe||e==ZYe||e==tWe}w$.exports=rWe});var B$=_((IFt,I$)=>{var nWe=_l(),iWe=nWe["__core-js_shared__"];I$.exports=iWe});var P$=_((BFt,D$)=>{var jN=B$(),v$=function(){var t=/[^.]+$/.exec(jN&&jN.keys&&jN.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function sWe(t){return!!v$&&v$ in t}D$.exports=sWe});var qN=_((vFt,S$)=>{var oWe=Function.prototype,aWe=oWe.toString;function lWe(t){if(t!=null){try{return aWe.call(t)}catch{}try{return t+""}catch{}}return""}S$.exports=lWe});var b$=_((DFt,x$)=>{var cWe=OP(),uWe=P$(),AWe=il(),fWe=qN(),pWe=/[\\^$.*+?()[\]{}|]/g,hWe=/^\[object .+?Constructor\]$/,gWe=Function.prototype,dWe=Object.prototype,mWe=gWe.toString,yWe=dWe.hasOwnProperty,EWe=RegExp("^"+mWe.call(yWe).replace(pWe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function CWe(t){if(!AWe(t)||uWe(t))return!1;var e=cWe(t)?EWe:hWe;return e.test(fWe(t))}x$.exports=CWe});var Q$=_((PFt,k$)=>{function wWe(t,e){return t?.[e]}k$.exports=wWe});var Jp=_((SFt,F$)=>{var IWe=b$(),BWe=Q$();function vWe(t,e){var r=BWe(t,e);return IWe(r)?r:void 0}F$.exports=vWe});var UP=_((xFt,T$)=>{var DWe=Jp(),PWe=_l(),SWe=DWe(PWe,"Map");T$.exports=SWe});var RI=_((bFt,R$)=>{var xWe=Jp(),bWe=xWe(Object,"create");R$.exports=bWe});var M$=_((kFt,L$)=>{var N$=RI();function kWe(){this.__data__=N$?N$(null):{},this.size=0}L$.exports=kWe});var U$=_((QFt,O$)=>{function QWe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}O$.exports=QWe});var H$=_((FFt,_$)=>{var FWe=RI(),TWe="__lodash_hash_undefined__",RWe=Object.prototype,NWe=RWe.hasOwnProperty;function LWe(t){var e=this.__data__;if(FWe){var r=e[t];return r===TWe?void 0:r}return NWe.call(e,t)?e[t]:void 0}_$.exports=LWe});var q$=_((TFt,j$)=>{var MWe=RI(),OWe=Object.prototype,UWe=OWe.hasOwnProperty;function _We(t){var e=this.__data__;return MWe?e[t]!==void 0:UWe.call(e,t)}j$.exports=_We});var Y$=_((RFt,G$)=>{var HWe=RI(),jWe="__lodash_hash_undefined__";function qWe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=HWe&&e===void 0?jWe:e,this}G$.exports=qWe});var V$=_((NFt,W$)=>{var GWe=M$(),YWe=U$(),WWe=H$(),VWe=q$(),KWe=Y$();function Ly(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var K$=V$(),JWe=FI(),zWe=UP();function XWe(){this.size=0,this.__data__={hash:new K$,map:new(zWe||JWe),string:new K$}}J$.exports=XWe});var Z$=_((MFt,X$)=>{function ZWe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}X$.exports=ZWe});var NI=_((OFt,$$)=>{var $We=Z$();function eVe(t,e){var r=t.__data__;return $We(e)?r[typeof e=="string"?"string":"hash"]:r.map}$$.exports=eVe});var tee=_((UFt,eee)=>{var tVe=NI();function rVe(t){var e=tVe(this,t).delete(t);return this.size-=e?1:0,e}eee.exports=rVe});var nee=_((_Ft,ree)=>{var nVe=NI();function iVe(t){return nVe(this,t).get(t)}ree.exports=iVe});var see=_((HFt,iee)=>{var sVe=NI();function oVe(t){return sVe(this,t).has(t)}iee.exports=oVe});var aee=_((jFt,oee)=>{var aVe=NI();function lVe(t,e){var r=aVe(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}oee.exports=lVe});var _P=_((qFt,lee)=>{var cVe=z$(),uVe=tee(),AVe=nee(),fVe=see(),pVe=aee();function My(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var hVe=FI(),gVe=UP(),dVe=_P(),mVe=200;function yVe(t,e){var r=this.__data__;if(r instanceof hVe){var o=r.__data__;if(!gVe||o.length{var EVe=FI(),CVe=t$(),wVe=n$(),IVe=s$(),BVe=a$(),vVe=uee();function Oy(t){var e=this.__data__=new EVe(t);this.size=e.size}Oy.prototype.clear=CVe;Oy.prototype.delete=wVe;Oy.prototype.get=IVe;Oy.prototype.has=BVe;Oy.prototype.set=vVe;Aee.exports=Oy});var pee=_((WFt,fee)=>{var DVe="__lodash_hash_undefined__";function PVe(t){return this.__data__.set(t,DVe),this}fee.exports=PVe});var gee=_((VFt,hee)=>{function SVe(t){return this.__data__.has(t)}hee.exports=SVe});var mee=_((KFt,dee)=>{var xVe=_P(),bVe=pee(),kVe=gee();function jP(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new xVe;++e{function QVe(t,e){for(var r=-1,o=t==null?0:t.length;++r{function FVe(t,e){return t.has(e)}Cee.exports=FVe});var GN=_((XFt,Iee)=>{var TVe=mee(),RVe=Eee(),NVe=wee(),LVe=1,MVe=2;function OVe(t,e,r,o,a,n){var u=r&LVe,A=t.length,p=e.length;if(A!=p&&!(u&&p>A))return!1;var h=n.get(t),E=n.get(e);if(h&&E)return h==e&&E==t;var I=-1,v=!0,b=r&MVe?new TVe:void 0;for(n.set(t,e),n.set(e,t);++I{var UVe=_l(),_Ve=UVe.Uint8Array;Bee.exports=_Ve});var Dee=_(($Ft,vee)=>{function HVe(t){var e=-1,r=Array(t.size);return t.forEach(function(o,a){r[++e]=[a,o]}),r}vee.exports=HVe});var See=_((eTt,Pee)=>{function jVe(t){var e=-1,r=Array(t.size);return t.forEach(function(o){r[++e]=o}),r}Pee.exports=jVe});var Fee=_((tTt,Qee)=>{var xee=fd(),bee=YN(),qVe=Ry(),GVe=GN(),YVe=Dee(),WVe=See(),VVe=1,KVe=2,JVe="[object Boolean]",zVe="[object Date]",XVe="[object Error]",ZVe="[object Map]",$Ve="[object Number]",eKe="[object RegExp]",tKe="[object Set]",rKe="[object String]",nKe="[object Symbol]",iKe="[object ArrayBuffer]",sKe="[object DataView]",kee=xee?xee.prototype:void 0,WN=kee?kee.valueOf:void 0;function oKe(t,e,r,o,a,n,u){switch(r){case sKe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case iKe:return!(t.byteLength!=e.byteLength||!n(new bee(t),new bee(e)));case JVe:case zVe:case $Ve:return qVe(+t,+e);case XVe:return t.name==e.name&&t.message==e.message;case eKe:case rKe:return t==e+"";case ZVe:var A=YVe;case tKe:var p=o&VVe;if(A||(A=WVe),t.size!=e.size&&!p)return!1;var h=u.get(t);if(h)return h==e;o|=KVe,u.set(t,e);var E=GVe(A(t),A(e),o,a,n,u);return u.delete(t),E;case nKe:if(WN)return WN.call(t)==WN.call(e)}return!1}Qee.exports=oKe});var qP=_((rTt,Tee)=>{function aKe(t,e){for(var r=-1,o=e.length,a=t.length;++r{var lKe=Array.isArray;Ree.exports=lKe});var VN=_((iTt,Nee)=>{var cKe=qP(),uKe=Hl();function AKe(t,e,r){var o=e(t);return uKe(t)?o:cKe(o,r(t))}Nee.exports=AKe});var Mee=_((sTt,Lee)=>{function fKe(t,e){for(var r=-1,o=t==null?0:t.length,a=0,n=[];++r{function pKe(){return[]}Oee.exports=pKe});var GP=_((aTt,_ee)=>{var hKe=Mee(),gKe=KN(),dKe=Object.prototype,mKe=dKe.propertyIsEnumerable,Uee=Object.getOwnPropertySymbols,yKe=Uee?function(t){return t==null?[]:(t=Object(t),hKe(Uee(t),function(e){return mKe.call(t,e)}))}:gKe;_ee.exports=yKe});var jee=_((lTt,Hee)=>{function EKe(t,e){for(var r=-1,o=Array(t);++r{function CKe(t){return t!=null&&typeof t=="object"}qee.exports=CKe});var Yee=_((uTt,Gee)=>{var wKe=pd(),IKe=Ju(),BKe="[object Arguments]";function vKe(t){return IKe(t)&&wKe(t)==BKe}Gee.exports=vKe});var LI=_((ATt,Kee)=>{var Wee=Yee(),DKe=Ju(),Vee=Object.prototype,PKe=Vee.hasOwnProperty,SKe=Vee.propertyIsEnumerable,xKe=Wee(function(){return arguments}())?Wee:function(t){return DKe(t)&&PKe.call(t,"callee")&&!SKe.call(t,"callee")};Kee.exports=xKe});var zee=_((fTt,Jee)=>{function bKe(){return!1}Jee.exports=bKe});var OI=_((MI,Uy)=>{var kKe=_l(),QKe=zee(),$ee=typeof MI=="object"&&MI&&!MI.nodeType&&MI,Xee=$ee&&typeof Uy=="object"&&Uy&&!Uy.nodeType&&Uy,FKe=Xee&&Xee.exports===$ee,Zee=FKe?kKe.Buffer:void 0,TKe=Zee?Zee.isBuffer:void 0,RKe=TKe||QKe;Uy.exports=RKe});var UI=_((pTt,ete)=>{var NKe=9007199254740991,LKe=/^(?:0|[1-9]\d*)$/;function MKe(t,e){var r=typeof t;return e=e??NKe,!!e&&(r=="number"||r!="symbol"&&LKe.test(t))&&t>-1&&t%1==0&&t{var OKe=9007199254740991;function UKe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=OKe}tte.exports=UKe});var nte=_((gTt,rte)=>{var _Ke=pd(),HKe=YP(),jKe=Ju(),qKe="[object Arguments]",GKe="[object Array]",YKe="[object Boolean]",WKe="[object Date]",VKe="[object Error]",KKe="[object Function]",JKe="[object Map]",zKe="[object Number]",XKe="[object Object]",ZKe="[object RegExp]",$Ke="[object Set]",eJe="[object String]",tJe="[object WeakMap]",rJe="[object ArrayBuffer]",nJe="[object DataView]",iJe="[object Float32Array]",sJe="[object Float64Array]",oJe="[object Int8Array]",aJe="[object Int16Array]",lJe="[object Int32Array]",cJe="[object Uint8Array]",uJe="[object Uint8ClampedArray]",AJe="[object Uint16Array]",fJe="[object Uint32Array]",ui={};ui[iJe]=ui[sJe]=ui[oJe]=ui[aJe]=ui[lJe]=ui[cJe]=ui[uJe]=ui[AJe]=ui[fJe]=!0;ui[qKe]=ui[GKe]=ui[rJe]=ui[YKe]=ui[nJe]=ui[WKe]=ui[VKe]=ui[KKe]=ui[JKe]=ui[zKe]=ui[XKe]=ui[ZKe]=ui[$Ke]=ui[eJe]=ui[tJe]=!1;function pJe(t){return jKe(t)&&HKe(t.length)&&!!ui[_Ke(t)]}rte.exports=pJe});var WP=_((dTt,ite)=>{function hJe(t){return function(e){return t(e)}}ite.exports=hJe});var VP=_((_I,_y)=>{var gJe=HN(),ste=typeof _I=="object"&&_I&&!_I.nodeType&&_I,HI=ste&&typeof _y=="object"&&_y&&!_y.nodeType&&_y,dJe=HI&&HI.exports===ste,JN=dJe&&gJe.process,mJe=function(){try{var t=HI&&HI.require&&HI.require("util").types;return t||JN&&JN.binding&&JN.binding("util")}catch{}}();_y.exports=mJe});var KP=_((mTt,lte)=>{var yJe=nte(),EJe=WP(),ote=VP(),ate=ote&&ote.isTypedArray,CJe=ate?EJe(ate):yJe;lte.exports=CJe});var zN=_((yTt,cte)=>{var wJe=jee(),IJe=LI(),BJe=Hl(),vJe=OI(),DJe=UI(),PJe=KP(),SJe=Object.prototype,xJe=SJe.hasOwnProperty;function bJe(t,e){var r=BJe(t),o=!r&&IJe(t),a=!r&&!o&&vJe(t),n=!r&&!o&&!a&&PJe(t),u=r||o||a||n,A=u?wJe(t.length,String):[],p=A.length;for(var h in t)(e||xJe.call(t,h))&&!(u&&(h=="length"||a&&(h=="offset"||h=="parent")||n&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||DJe(h,p)))&&A.push(h);return A}cte.exports=bJe});var JP=_((ETt,ute)=>{var kJe=Object.prototype;function QJe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||kJe;return t===r}ute.exports=QJe});var XN=_((CTt,Ate)=>{function FJe(t,e){return function(r){return t(e(r))}}Ate.exports=FJe});var pte=_((wTt,fte)=>{var TJe=XN(),RJe=TJe(Object.keys,Object);fte.exports=RJe});var gte=_((ITt,hte)=>{var NJe=JP(),LJe=pte(),MJe=Object.prototype,OJe=MJe.hasOwnProperty;function UJe(t){if(!NJe(t))return LJe(t);var e=[];for(var r in Object(t))OJe.call(t,r)&&r!="constructor"&&e.push(r);return e}hte.exports=UJe});var jI=_((BTt,dte)=>{var _Je=OP(),HJe=YP();function jJe(t){return t!=null&&HJe(t.length)&&!_Je(t)}dte.exports=jJe});var zP=_((vTt,mte)=>{var qJe=zN(),GJe=gte(),YJe=jI();function WJe(t){return YJe(t)?qJe(t):GJe(t)}mte.exports=WJe});var ZN=_((DTt,yte)=>{var VJe=VN(),KJe=GP(),JJe=zP();function zJe(t){return VJe(t,JJe,KJe)}yte.exports=zJe});var wte=_((PTt,Cte)=>{var Ete=ZN(),XJe=1,ZJe=Object.prototype,$Je=ZJe.hasOwnProperty;function eze(t,e,r,o,a,n){var u=r&XJe,A=Ete(t),p=A.length,h=Ete(e),E=h.length;if(p!=E&&!u)return!1;for(var I=p;I--;){var v=A[I];if(!(u?v in e:$Je.call(e,v)))return!1}var b=n.get(t),C=n.get(e);if(b&&C)return b==e&&C==t;var T=!0;n.set(t,e),n.set(e,t);for(var L=u;++I{var tze=Jp(),rze=_l(),nze=tze(rze,"DataView");Ite.exports=nze});var Dte=_((xTt,vte)=>{var ize=Jp(),sze=_l(),oze=ize(sze,"Promise");vte.exports=oze});var Ste=_((bTt,Pte)=>{var aze=Jp(),lze=_l(),cze=aze(lze,"Set");Pte.exports=cze});var bte=_((kTt,xte)=>{var uze=Jp(),Aze=_l(),fze=uze(Aze,"WeakMap");xte.exports=fze});var qI=_((QTt,Lte)=>{var $N=Bte(),eL=UP(),tL=Dte(),rL=Ste(),nL=bte(),Nte=pd(),Hy=qN(),kte="[object Map]",pze="[object Object]",Qte="[object Promise]",Fte="[object Set]",Tte="[object WeakMap]",Rte="[object DataView]",hze=Hy($N),gze=Hy(eL),dze=Hy(tL),mze=Hy(rL),yze=Hy(nL),hd=Nte;($N&&hd(new $N(new ArrayBuffer(1)))!=Rte||eL&&hd(new eL)!=kte||tL&&hd(tL.resolve())!=Qte||rL&&hd(new rL)!=Fte||nL&&hd(new nL)!=Tte)&&(hd=function(t){var e=Nte(t),r=e==pze?t.constructor:void 0,o=r?Hy(r):"";if(o)switch(o){case hze:return Rte;case gze:return kte;case dze:return Qte;case mze:return Fte;case yze:return Tte}return e});Lte.exports=hd});var Gte=_((FTt,qte)=>{var iL=HP(),Eze=GN(),Cze=Fee(),wze=wte(),Mte=qI(),Ote=Hl(),Ute=OI(),Ize=KP(),Bze=1,_te="[object Arguments]",Hte="[object Array]",XP="[object Object]",vze=Object.prototype,jte=vze.hasOwnProperty;function Dze(t,e,r,o,a,n){var u=Ote(t),A=Ote(e),p=u?Hte:Mte(t),h=A?Hte:Mte(e);p=p==_te?XP:p,h=h==_te?XP:h;var E=p==XP,I=h==XP,v=p==h;if(v&&Ute(t)){if(!Ute(e))return!1;u=!0,E=!1}if(v&&!E)return n||(n=new iL),u||Ize(t)?Eze(t,e,r,o,a,n):Cze(t,e,p,r,o,a,n);if(!(r&Bze)){var b=E&&jte.call(t,"__wrapped__"),C=I&&jte.call(e,"__wrapped__");if(b||C){var T=b?t.value():t,L=C?e.value():e;return n||(n=new iL),a(T,L,r,o,n)}}return v?(n||(n=new iL),wze(t,e,r,o,a,n)):!1}qte.exports=Dze});var Kte=_((TTt,Vte)=>{var Pze=Gte(),Yte=Ju();function Wte(t,e,r,o,a){return t===e?!0:t==null||e==null||!Yte(t)&&!Yte(e)?t!==t&&e!==e:Pze(t,e,r,o,Wte,a)}Vte.exports=Wte});var zte=_((RTt,Jte)=>{var Sze=Kte();function xze(t,e){return Sze(t,e)}Jte.exports=xze});var sL=_((NTt,Xte)=>{var bze=Jp(),kze=function(){try{var t=bze(Object,"defineProperty");return t({},"",{}),t}catch{}}();Xte.exports=kze});var ZP=_((LTt,$te)=>{var Zte=sL();function Qze(t,e,r){e=="__proto__"&&Zte?Zte(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}$te.exports=Qze});var oL=_((MTt,ere)=>{var Fze=ZP(),Tze=Ry();function Rze(t,e,r){(r!==void 0&&!Tze(t[e],r)||r===void 0&&!(e in t))&&Fze(t,e,r)}ere.exports=Rze});var rre=_((OTt,tre)=>{function Nze(t){return function(e,r,o){for(var a=-1,n=Object(e),u=o(e),A=u.length;A--;){var p=u[t?A:++a];if(r(n[p],p,n)===!1)break}return e}}tre.exports=Nze});var ire=_((UTt,nre)=>{var Lze=rre(),Mze=Lze();nre.exports=Mze});var aL=_((GI,jy)=>{var Oze=_l(),lre=typeof GI=="object"&&GI&&!GI.nodeType&&GI,sre=lre&&typeof jy=="object"&&jy&&!jy.nodeType&&jy,Uze=sre&&sre.exports===lre,ore=Uze?Oze.Buffer:void 0,are=ore?ore.allocUnsafe:void 0;function _ze(t,e){if(e)return t.slice();var r=t.length,o=are?are(r):new t.constructor(r);return t.copy(o),o}jy.exports=_ze});var $P=_((_Tt,ure)=>{var cre=YN();function Hze(t){var e=new t.constructor(t.byteLength);return new cre(e).set(new cre(t)),e}ure.exports=Hze});var lL=_((HTt,Are)=>{var jze=$P();function qze(t,e){var r=e?jze(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}Are.exports=qze});var eS=_((jTt,fre)=>{function Gze(t,e){var r=-1,o=t.length;for(e||(e=Array(o));++r{var Yze=il(),pre=Object.create,Wze=function(){function t(){}return function(e){if(!Yze(e))return{};if(pre)return pre(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();hre.exports=Wze});var tS=_((GTt,dre)=>{var Vze=XN(),Kze=Vze(Object.getPrototypeOf,Object);dre.exports=Kze});var cL=_((YTt,mre)=>{var Jze=gre(),zze=tS(),Xze=JP();function Zze(t){return typeof t.constructor=="function"&&!Xze(t)?Jze(zze(t)):{}}mre.exports=Zze});var Ere=_((WTt,yre)=>{var $ze=jI(),eXe=Ju();function tXe(t){return eXe(t)&&$ze(t)}yre.exports=tXe});var uL=_((VTt,wre)=>{var rXe=pd(),nXe=tS(),iXe=Ju(),sXe="[object Object]",oXe=Function.prototype,aXe=Object.prototype,Cre=oXe.toString,lXe=aXe.hasOwnProperty,cXe=Cre.call(Object);function uXe(t){if(!iXe(t)||rXe(t)!=sXe)return!1;var e=nXe(t);if(e===null)return!0;var r=lXe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Cre.call(r)==cXe}wre.exports=uXe});var AL=_((KTt,Ire)=>{function AXe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}Ire.exports=AXe});var rS=_((JTt,Bre)=>{var fXe=ZP(),pXe=Ry(),hXe=Object.prototype,gXe=hXe.hasOwnProperty;function dXe(t,e,r){var o=t[e];(!(gXe.call(t,e)&&pXe(o,r))||r===void 0&&!(e in t))&&fXe(t,e,r)}Bre.exports=dXe});var gd=_((zTt,vre)=>{var mXe=rS(),yXe=ZP();function EXe(t,e,r,o){var a=!r;r||(r={});for(var n=-1,u=e.length;++n{function CXe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}Dre.exports=CXe});var xre=_((ZTt,Sre)=>{var wXe=il(),IXe=JP(),BXe=Pre(),vXe=Object.prototype,DXe=vXe.hasOwnProperty;function PXe(t){if(!wXe(t))return BXe(t);var e=IXe(t),r=[];for(var o in t)o=="constructor"&&(e||!DXe.call(t,o))||r.push(o);return r}Sre.exports=PXe});var qy=_(($Tt,bre)=>{var SXe=zN(),xXe=xre(),bXe=jI();function kXe(t){return bXe(t)?SXe(t,!0):xXe(t)}bre.exports=kXe});var Qre=_((eRt,kre)=>{var QXe=gd(),FXe=qy();function TXe(t){return QXe(t,FXe(t))}kre.exports=TXe});var Mre=_((tRt,Lre)=>{var Fre=oL(),RXe=aL(),NXe=lL(),LXe=eS(),MXe=cL(),Tre=LI(),Rre=Hl(),OXe=Ere(),UXe=OI(),_Xe=OP(),HXe=il(),jXe=uL(),qXe=KP(),Nre=AL(),GXe=Qre();function YXe(t,e,r,o,a,n,u){var A=Nre(t,r),p=Nre(e,r),h=u.get(p);if(h){Fre(t,r,h);return}var E=n?n(A,p,r+"",t,e,u):void 0,I=E===void 0;if(I){var v=Rre(p),b=!v&&UXe(p),C=!v&&!b&&qXe(p);E=p,v||b||C?Rre(A)?E=A:OXe(A)?E=LXe(A):b?(I=!1,E=RXe(p,!0)):C?(I=!1,E=NXe(p,!0)):E=[]:jXe(p)||Tre(p)?(E=A,Tre(A)?E=GXe(A):(!HXe(A)||_Xe(A))&&(E=MXe(p))):I=!1}I&&(u.set(p,E),a(E,p,o,n,u),u.delete(p)),Fre(t,r,E)}Lre.exports=YXe});var _re=_((rRt,Ure)=>{var WXe=HP(),VXe=oL(),KXe=ire(),JXe=Mre(),zXe=il(),XXe=qy(),ZXe=AL();function Ore(t,e,r,o,a){t!==e&&KXe(e,function(n,u){if(a||(a=new WXe),zXe(n))JXe(t,e,u,r,Ore,o,a);else{var A=o?o(ZXe(t,u),n,u+"",t,e,a):void 0;A===void 0&&(A=n),VXe(t,u,A)}},XXe)}Ure.exports=Ore});var fL=_((nRt,Hre)=>{function $Xe(t){return t}Hre.exports=$Xe});var qre=_((iRt,jre)=>{function eZe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}jre.exports=eZe});var pL=_((sRt,Yre)=>{var tZe=qre(),Gre=Math.max;function rZe(t,e,r){return e=Gre(e===void 0?t.length-1:e,0),function(){for(var o=arguments,a=-1,n=Gre(o.length-e,0),u=Array(n);++a{function nZe(t){return function(){return t}}Wre.exports=nZe});var zre=_((aRt,Jre)=>{var iZe=Vre(),Kre=sL(),sZe=fL(),oZe=Kre?function(t,e){return Kre(t,"toString",{configurable:!0,enumerable:!1,value:iZe(e),writable:!0})}:sZe;Jre.exports=oZe});var Zre=_((lRt,Xre)=>{var aZe=800,lZe=16,cZe=Date.now;function uZe(t){var e=0,r=0;return function(){var o=cZe(),a=lZe-(o-r);if(r=o,a>0){if(++e>=aZe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}Xre.exports=uZe});var hL=_((cRt,$re)=>{var AZe=zre(),fZe=Zre(),pZe=fZe(AZe);$re.exports=pZe});var tne=_((uRt,ene)=>{var hZe=fL(),gZe=pL(),dZe=hL();function mZe(t,e){return dZe(gZe(t,e,hZe),t+"")}ene.exports=mZe});var nne=_((ARt,rne)=>{var yZe=Ry(),EZe=jI(),CZe=UI(),wZe=il();function IZe(t,e,r){if(!wZe(r))return!1;var o=typeof e;return(o=="number"?EZe(r)&&CZe(e,r.length):o=="string"&&e in r)?yZe(r[e],t):!1}rne.exports=IZe});var sne=_((fRt,ine)=>{var BZe=tne(),vZe=nne();function DZe(t){return BZe(function(e,r){var o=-1,a=r.length,n=a>1?r[a-1]:void 0,u=a>2?r[2]:void 0;for(n=t.length>3&&typeof n=="function"?(a--,n):void 0,u&&vZe(r[0],r[1],u)&&(n=a<3?void 0:n,a=1),e=Object(e);++o{var PZe=_re(),SZe=sne(),xZe=SZe(function(t,e,r,o){PZe(t,e,r,o)});one.exports=xZe});var je={};Kt(je,{AsyncActions:()=>mL,BufferStream:()=>dL,CachingStrategy:()=>Ene,DefaultStream:()=>yL,allSettledSafe:()=>Uc,assertNever:()=>CL,bufferStream:()=>Vy,buildIgnorePattern:()=>NZe,convertMapsToIndexableObjects:()=>iS,dynamicRequire:()=>vf,escapeRegExp:()=>kZe,getArrayWithDefault:()=>Gy,getFactoryWithDefault:()=>ol,getMapWithDefault:()=>Yy,getSetWithDefault:()=>dd,groupBy:()=>BL,isIndexableObject:()=>gL,isPathLike:()=>LZe,isTaggedYarnVersion:()=>bZe,makeDeferred:()=>dne,mapAndFilter:()=>sl,mapAndFind:()=>WI,mergeIntoTarget:()=>wne,overrideType:()=>QZe,parseBoolean:()=>VI,parseInt:()=>Ky,parseOptionalBoolean:()=>Cne,plural:()=>nS,prettifyAsyncErrors:()=>Wy,prettifySyncErrors:()=>wL,releaseAfterUseAsync:()=>TZe,replaceEnvVariables:()=>sS,sortMap:()=>ks,toMerged:()=>MZe,tryParseOptionalBoolean:()=>IL,validateEnum:()=>FZe});function bZe(t){return!!(pne.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9]+)?$/))}function nS(t,{one:e,more:r,zero:o=r}){return t===0?o:t===1?e:r}function kZe(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function QZe(t){}function CL(t){throw new Error(`Assertion failed: Unexpected object '${t}'`)}function FZe(t,e){let r=Object.values(t);if(!r.includes(e))throw new it(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${r.map(o=>JSON.stringify(o)).join(", ")})`);return e}function sl(t,e){let r=[];for(let o of t){let a=e(o);a!==hne&&r.push(a)}return r}function WI(t,e){for(let r of t){let o=e(r);if(o!==gne)return o}}function gL(t){return typeof t=="object"&&t!==null}async function Uc(t){let e=await Promise.allSettled(t),r=[];for(let o of e){if(o.status==="rejected")throw o.reason;r.push(o.value)}return r}function iS(t){if(t instanceof Map&&(t=Object.fromEntries(t)),gL(t))for(let e of Object.keys(t)){let r=t[e];gL(r)&&(t[e]=iS(r))}return t}function ol(t,e,r){let o=t.get(e);return typeof o>"u"&&t.set(e,o=r()),o}function Gy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}function dd(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}function Yy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}async function TZe(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function Wy(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function wL(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function Vy(t){return await new Promise((e,r)=>{let o=[];t.on("error",a=>{r(a)}),t.on("data",a=>{o.push(a)}),t.on("end",()=>{e(Buffer.concat(o))})})}function dne(){let t,e;return{promise:new Promise((o,a)=>{t=o,e=a}),resolve:t,reject:e}}function mne(t){return YI(ue.fromPortablePath(t))}function yne(path){let physicalPath=ue.fromPortablePath(path),currentCacheEntry=YI.cache[physicalPath];delete YI.cache[physicalPath];let result;try{result=mne(physicalPath);let freshCacheEntry=YI.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{YI.cache[physicalPath]=currentCacheEntry}return result}function RZe(t){let e=lne.get(t),r=oe.statSync(t);if(e?.mtime===r.mtimeMs)return e.instance;let o=yne(t);return lne.set(t,{mtime:r.mtimeMs,instance:o}),o}function vf(t,{cachingStrategy:e=2}={}){switch(e){case 0:return yne(t);case 1:return RZe(t);case 2:return mne(t);default:throw new Error("Unsupported caching strategy")}}function ks(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function NZe(t){return t.length===0?null:t.map(e=>`(${Ane.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function sS(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...o)=>{let{variableName:a,colon:n,fallback:u}=o[o.length-1],A=Object.hasOwn(e,a),p=e[a];if(p||A&&!n)return p;if(u!=null)return u;throw new it(`Environment variable not found (${a})`)})}function VI(t){switch(t){case"true":case"1":case 1:case!0:return!0;case"false":case"0":case 0:case!1:return!1;default:throw new Error(`Couldn't parse "${t}" as a boolean`)}}function Cne(t){return typeof t>"u"?t:VI(t)}function IL(t){try{return Cne(t)}catch{return null}}function LZe(t){return!!(ue.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}function wne(t,...e){let r=u=>({value:u}),o=r(t),a=e.map(u=>r(u)),{value:n}=(0,une.default)(o,...a,(u,A)=>{if(Array.isArray(u)&&Array.isArray(A)){for(let p of A)u.find(h=>(0,cne.default)(h,p))||u.push(p);return u}});return n}function MZe(...t){return wne({},...t)}function BL(t,e){let r=Object.create(null);for(let o of t){let a=o[e];r[a]??=[],r[a].push(o)}return r}function Ky(t){return typeof t=="string"?Number.parseInt(t,10):t}var cne,une,Ane,fne,pne,EL,hne,gne,dL,mL,yL,YI,lne,Ene,jl=Et(()=>{Pt();qt();cne=$e(zte()),une=$e(ane()),Ane=$e(Zo()),fne=$e(nd()),pne=$e(zn()),EL=Be("stream");hne=Symbol();sl.skip=hne;gne=Symbol();WI.skip=gne;dL=class extends EL.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(r),a(null,null)}_flush(r){r(null,Buffer.concat(this.chunks))}};mL=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,fne.default)(e)}set(e,r){let o=this.deferred.get(e);typeof o>"u"&&this.deferred.set(e,o=dne());let a=this.limit(()=>r());return this.promises.set(e,a),a.then(()=>{this.promises.get(e)===a&&o.resolve()},n=>{this.promises.get(e)===a&&o.reject(n)}),o.promise}reduce(e,r){let o=this.promises.get(e)??Promise.resolve();this.set(e,()=>r(o))}async wait(){await Promise.all(this.promises.values())}},yL=class extends EL.Transform{constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,a(null,r)}_flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}},YI=eval("require");lne=new Map;Ene=(o=>(o[o.NoCache=0]="NoCache",o[o.FsTime=1]="FsTime",o[o.Node=2]="Node",o))(Ene||{})});var Jy,vL,DL,Ine=Et(()=>{Jy=(r=>(r.HARD="HARD",r.SOFT="SOFT",r))(Jy||{}),vL=(o=>(o.Dependency="Dependency",o.PeerDependency="PeerDependency",o.PeerDependencyMeta="PeerDependencyMeta",o))(vL||{}),DL=(o=>(o.Inactive="inactive",o.Redundant="redundant",o.Active="active",o))(DL||{})});var de={};Kt(de,{LogLevel:()=>uS,Style:()=>aS,Type:()=>yt,addLogFilterSupport:()=>zI,applyColor:()=>Ks,applyHyperlink:()=>Xy,applyStyle:()=>md,json:()=>yd,jsonOrPretty:()=>_Ze,mark:()=>kL,pretty:()=>Ot,prettyField:()=>zu,prettyList:()=>bL,prettyTruncatedLocatorList:()=>cS,stripAnsi:()=>zy.default,supportsColor:()=>lS,supportsHyperlinks:()=>xL,tuple:()=>_c});function Bne(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1024**r;)r-=1;let o=1024**r;return`${Math.floor(t*100/o)/100} ${e[r-1]}`}function _c(t,e){return[e,t]}function md(t,e,r){return t.get("enableColors")&&r&2&&(e=JI.default.bold(e)),e}function Ks(t,e,r){if(!t.get("enableColors"))return e;let o=OZe.get(r);if(o===null)return e;let a=typeof o>"u"?r:SL.level>=3?o[0]:o[1],n=typeof a=="number"?PL.ansi256(a):a.startsWith("#")?PL.hex(a):PL[a];if(typeof n!="function")throw new Error(`Invalid format type ${a}`);return n(e)}function Xy(t,e,r){return t.get("enableHyperlinks")?UZe?`\x1B]8;;${r}\x1B\\${e}\x1B]8;;\x1B\\`:`\x1B]8;;${r}\x07${e}\x1B]8;;\x07`:e}function Ot(t,e,r){if(e===null)return Ks(t,"null",yt.NULL);if(Object.hasOwn(oS,r))return oS[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Ks(t,e,r)}function bL(t,e,r,{separator:o=", "}={}){return[...e].map(a=>Ot(t,a,r)).join(o)}function yd(t,e){if(t===null)return null;if(Object.hasOwn(oS,e))return oS[e].json(t);if(typeof t!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof t}`);return t}function _Ze(t,e,[r,o]){return t?yd(r,o):Ot(e,r,o)}function kL(t){return{Check:Ks(t,"\u2713","green"),Cross:Ks(t,"\u2718","red"),Question:Ks(t,"?","cyan")}}function zu(t,{label:e,value:[r,o]}){return`${Ot(t,e,yt.CODE)}: ${Ot(t,r,o)}`}function cS(t,e,r){let o=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=`${jr(t,h)}, `,I=QL(h).length+2;if(o.length>0&&nh).join("").slice(0,-2);let u="X".repeat(a.length.toString().length),A=`and ${u} more.`,p=a.length;for(;o.length>1&&nh).join(""),A.replace(u,Ot(t,p,yt.NUMBER))].join("")}function zI(t,{configuration:e}){let r=e.get("logFilters"),o=new Map,a=new Map,n=[];for(let I of r){let v=I.get("level");if(typeof v>"u")continue;let b=I.get("code");typeof b<"u"&&o.set(b,v);let C=I.get("text");typeof C<"u"&&a.set(C,v);let T=I.get("pattern");typeof T<"u"&&n.push([vne.default.matcher(T,{contains:!0}),v])}n.reverse();let u=(I,v,b)=>{if(I===null||I===0)return b;let C=a.size>0||n.length>0?(0,zy.default)(v):v;if(a.size>0){let T=a.get(C);if(typeof T<"u")return T??b}if(n.length>0){for(let[T,L]of n)if(T(C))return L??b}if(o.size>0){let T=o.get(Wu(I));if(typeof T<"u")return T??b}return b},A=t.reportInfo,p=t.reportWarning,h=t.reportError,E=function(I,v,b,C){switch(u(v,b,C)){case"info":A.call(I,v,b);break;case"warning":p.call(I,v??0,b);break;case"error":h.call(I,v??0,b);break}};t.reportInfo=function(...I){return E(this,...I,"info")},t.reportWarning=function(...I){return E(this,...I,"warning")},t.reportError=function(...I){return E(this,...I,"error")}}var JI,KI,vne,zy,Dne,yt,aS,SL,lS,xL,PL,OZe,So,oS,UZe,uS,ql=Et(()=>{Pt();JI=$e(vN()),KI=$e(ed());qt();vne=$e(Zo()),zy=$e(MP()),Dne=Be("util");pP();xo();yt={NO_HINT:"NO_HINT",ID:"ID",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",INSPECT:"INSPECT",DURATION:"DURATION",SIZE:"SIZE",SIZE_DIFF:"SIZE_DIFF",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING",MARKDOWN:"MARKDOWN",MARKDOWN_INLINE:"MARKDOWN_INLINE"},aS=(e=>(e[e.BOLD=2]="BOLD",e))(aS||{}),SL=KI.default.GITHUB_ACTIONS?{level:2}:JI.default.supportsColor?{level:JI.default.supportsColor.level}:{level:0},lS=SL.level!==0,xL=lS&&!KI.default.GITHUB_ACTIONS&&!KI.default.CIRCLE&&!KI.default.GITLAB,PL=new JI.default.Instance(SL),OZe=new Map([[yt.NO_HINT,null],[yt.NULL,["#a853b5",129]],[yt.SCOPE,["#d75f00",166]],[yt.NAME,["#d7875f",173]],[yt.RANGE,["#00afaf",37]],[yt.REFERENCE,["#87afff",111]],[yt.NUMBER,["#ffd700",220]],[yt.PATH,["#d75fd7",170]],[yt.URL,["#d75fd7",170]],[yt.ADDED,["#5faf00",70]],[yt.REMOVED,["#ff3131",160]],[yt.CODE,["#87afff",111]],[yt.SIZE,["#ffd700",220]]]),So=t=>t;oS={[yt.ID]:So({pretty:(t,e)=>typeof e=="number"?Ks(t,`${e}`,yt.NUMBER):Ks(t,e,yt.CODE),json:t=>t}),[yt.INSPECT]:So({pretty:(t,e)=>(0,Dne.inspect)(e,{depth:1/0,colors:t.get("enableColors"),compact:!0,breakLength:1/0}),json:t=>t}),[yt.NUMBER]:So({pretty:(t,e)=>Ks(t,`${e}`,yt.NUMBER),json:t=>t}),[yt.IDENT]:So({pretty:(t,e)=>cs(t,e),json:t=>fn(t)}),[yt.LOCATOR]:So({pretty:(t,e)=>jr(t,e),json:t=>xa(t)}),[yt.DESCRIPTOR]:So({pretty:(t,e)=>qn(t,e),json:t=>Sa(t)}),[yt.RESOLUTION]:So({pretty:(t,{descriptor:e,locator:r})=>XI(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:Sa(t),locator:e!==null?xa(e):null})}),[yt.DEPENDENT]:So({pretty:(t,{locator:e,descriptor:r})=>FL(t,e,r),json:({locator:t,descriptor:e})=>({locator:xa(t),descriptor:Sa(e)})}),[yt.PACKAGE_EXTENSION]:So({pretty:(t,e)=>{switch(e.type){case"Dependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"dependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"peerDependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependencyMeta":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"peerDependenciesMeta",yt.CODE)} \u27A4 ${cs(t,Js(e.selector))} \u27A4 ${Ks(t,e.key,yt.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case"Dependency":return`${fn(t.parentDescriptor)} > ${fn(t.descriptor)}`;case"PeerDependency":return`${fn(t.parentDescriptor)} >> ${fn(t.descriptor)}`;case"PeerDependencyMeta":return`${fn(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[yt.SETTING]:So({pretty:(t,e)=>(t.get(e),Xy(t,Ks(t,e,yt.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[yt.DURATION]:So({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),o=Math.ceil((e-r*60*1e3)/1e3);return o===0?`${r}m`:`${r}m ${o}s`}else{let r=Math.floor(e/1e3),o=e-r*1e3;return o===0?`${r}s`:`${r}s ${o}ms`}},json:t=>t}),[yt.SIZE]:So({pretty:(t,e)=>Ks(t,Bne(e),yt.NUMBER),json:t=>t}),[yt.SIZE_DIFF]:So({pretty:(t,e)=>{let r=e>=0?"+":"-",o=r==="+"?yt.REMOVED:yt.ADDED;return Ks(t,`${r} ${Bne(Math.max(Math.abs(e),1))}`,o)},json:t=>t}),[yt.PATH]:So({pretty:(t,e)=>Ks(t,ue.fromPortablePath(e),yt.PATH),json:t=>ue.fromPortablePath(t)}),[yt.MARKDOWN]:So({pretty:(t,{text:e,format:r,paragraphs:o})=>Do(e,{format:r,paragraphs:o}),json:({text:t})=>t}),[yt.MARKDOWN_INLINE]:So({pretty:(t,e)=>(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(r,o,a)=>Ot(t,o+a+o,yt.CODE)),e=e.replace(/(\*\*)((?:.|[\n])*?)\1/g,(r,o,a)=>md(t,a,2)),e),json:t=>t})};UZe=!!process.env.KONSOLE_VERSION;uS=(a=>(a.Error="error",a.Warning="warning",a.Info="info",a.Discard="discard",a))(uS||{})});var Pne=_(Zy=>{"use strict";Object.defineProperty(Zy,"__esModule",{value:!0});Zy.splitWhen=Zy.flatten=void 0;function HZe(t){return t.reduce((e,r)=>[].concat(e,r),[])}Zy.flatten=HZe;function jZe(t,e){let r=[[]],o=0;for(let a of t)e(a)?(o++,r[o]=[]):r[o].push(a);return r}Zy.splitWhen=jZe});var Sne=_(AS=>{"use strict";Object.defineProperty(AS,"__esModule",{value:!0});AS.isEnoentCodeError=void 0;function qZe(t){return t.code==="ENOENT"}AS.isEnoentCodeError=qZe});var xne=_(fS=>{"use strict";Object.defineProperty(fS,"__esModule",{value:!0});fS.createDirentFromStats=void 0;var TL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function GZe(t,e){return new TL(t,e)}fS.createDirentFromStats=GZe});var bne=_(Xu=>{"use strict";Object.defineProperty(Xu,"__esModule",{value:!0});Xu.removeLeadingDotSegment=Xu.escape=Xu.makeAbsolute=Xu.unixify=void 0;var YZe=Be("path"),WZe=2,VZe=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;function KZe(t){return t.replace(/\\/g,"/")}Xu.unixify=KZe;function JZe(t,e){return YZe.resolve(t,e)}Xu.makeAbsolute=JZe;function zZe(t){return t.replace(VZe,"\\$2")}Xu.escape=zZe;function XZe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(WZe)}return t}Xu.removeLeadingDotSegment=XZe});var Qne=_((xRt,kne)=>{kne.exports=function(e){if(typeof e!="string"||e==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(r[2])return!0;e=e.slice(r.index+r[0].length)}return!1}});var Rne=_((bRt,Tne)=>{var ZZe=Qne(),Fne={"{":"}","(":")","[":"]"},$Ze=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,o=-2,a=-2,n=-2,u=-2;ee&&(u===-1||u>o||(u=t.indexOf("\\",e),u===-1||u>o)))||a!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(a=t.indexOf("}",e),a>e&&(u=t.indexOf("\\",e),u===-1||u>a))||n!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(n=t.indexOf(")",e),n>e&&(u=t.indexOf("\\",e),u===-1||u>n))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(rr&&(u=t.indexOf("\\",r),u===-1||u>n))))return!0;if(t[e]==="\\"){var A=t[e+1];e+=2;var p=Fne[A];if(p){var h=t.indexOf(p,e);h!==-1&&(e=h+1)}if(t[e]==="!")return!0}else e++}return!1},e$e=function(t){if(t[0]==="!")return!0;for(var e=0;e{"use strict";var t$e=Rne(),r$e=Be("path").posix.dirname,n$e=Be("os").platform()==="win32",RL="/",i$e=/\\/g,s$e=/[\{\[].*[\}\]]$/,o$e=/(^|[^\\])([\{\[]|\([^\)]+$)/,a$e=/\\([\!\*\?\|\[\]\(\)\{\}])/g;Nne.exports=function(e,r){var o=Object.assign({flipBackslashes:!0},r);o.flipBackslashes&&n$e&&e.indexOf(RL)<0&&(e=e.replace(i$e,RL)),s$e.test(e)&&(e+=RL),e+="a";do e=r$e(e);while(t$e(e)||o$e.test(e));return e.replace(a$e,"$1")}});var Gne=_(qr=>{"use strict";Object.defineProperty(qr,"__esModule",{value:!0});qr.matchAny=qr.convertPatternsToRe=qr.makeRe=qr.getPatternParts=qr.expandBraceExpansion=qr.expandPatternsWithBraceExpansion=qr.isAffectDepthOfReadingPattern=qr.endsWithSlashGlobStar=qr.hasGlobStar=qr.getBaseDirectory=qr.isPatternRelatedToParentDirectory=qr.getPatternsOutsideCurrentDirectory=qr.getPatternsInsideCurrentDirectory=qr.getPositivePatterns=qr.getNegativePatterns=qr.isPositivePattern=qr.isNegativePattern=qr.convertToNegativePattern=qr.convertToPositivePattern=qr.isDynamicPattern=qr.isStaticPattern=void 0;var l$e=Be("path"),c$e=Lne(),NL=Zo(),Mne="**",u$e="\\",A$e=/[*?]|^!/,f$e=/\[[^[]*]/,p$e=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,h$e=/[!*+?@]\([^(]*\)/,g$e=/,|\.\./;function One(t,e={}){return!Une(t,e)}qr.isStaticPattern=One;function Une(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(u$e)||A$e.test(t)||f$e.test(t)||p$e.test(t)||e.extglob!==!1&&h$e.test(t)||e.braceExpansion!==!1&&d$e(t))}qr.isDynamicPattern=Une;function d$e(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let o=t.slice(e,r);return g$e.test(o)}function m$e(t){return pS(t)?t.slice(1):t}qr.convertToPositivePattern=m$e;function y$e(t){return"!"+t}qr.convertToNegativePattern=y$e;function pS(t){return t.startsWith("!")&&t[1]!=="("}qr.isNegativePattern=pS;function _ne(t){return!pS(t)}qr.isPositivePattern=_ne;function E$e(t){return t.filter(pS)}qr.getNegativePatterns=E$e;function C$e(t){return t.filter(_ne)}qr.getPositivePatterns=C$e;function w$e(t){return t.filter(e=>!LL(e))}qr.getPatternsInsideCurrentDirectory=w$e;function I$e(t){return t.filter(LL)}qr.getPatternsOutsideCurrentDirectory=I$e;function LL(t){return t.startsWith("..")||t.startsWith("./..")}qr.isPatternRelatedToParentDirectory=LL;function B$e(t){return c$e(t,{flipBackslashes:!1})}qr.getBaseDirectory=B$e;function v$e(t){return t.includes(Mne)}qr.hasGlobStar=v$e;function Hne(t){return t.endsWith("/"+Mne)}qr.endsWithSlashGlobStar=Hne;function D$e(t){let e=l$e.basename(t);return Hne(t)||One(e)}qr.isAffectDepthOfReadingPattern=D$e;function P$e(t){return t.reduce((e,r)=>e.concat(jne(r)),[])}qr.expandPatternsWithBraceExpansion=P$e;function jne(t){return NL.braces(t,{expand:!0,nodupes:!0})}qr.expandBraceExpansion=jne;function S$e(t,e){let{parts:r}=NL.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.length===0&&(r=[t]),r[0].startsWith("/")&&(r[0]=r[0].slice(1),r.unshift("")),r}qr.getPatternParts=S$e;function qne(t,e){return NL.makeRe(t,e)}qr.makeRe=qne;function x$e(t,e){return t.map(r=>qne(r,e))}qr.convertPatternsToRe=x$e;function b$e(t,e){return e.some(r=>r.test(t))}qr.matchAny=b$e});var Kne=_((FRt,Vne)=>{"use strict";var k$e=Be("stream"),Yne=k$e.PassThrough,Q$e=Array.prototype.slice;Vne.exports=F$e;function F$e(){let t=[],e=Q$e.call(arguments),r=!1,o=e[e.length-1];o&&!Array.isArray(o)&&o.pipe==null?e.pop():o={};let a=o.end!==!1,n=o.pipeError===!0;o.objectMode==null&&(o.objectMode=!0),o.highWaterMark==null&&(o.highWaterMark=64*1024);let u=Yne(o);function A(){for(let E=0,I=arguments.length;E0||(r=!1,p())}function b(C){function T(){C.removeListener("merge2UnpipeEnd",T),C.removeListener("end",T),n&&C.removeListener("error",L),v()}function L(U){u.emit("error",U)}if(C._readableState.endEmitted)return v();C.on("merge2UnpipeEnd",T),C.on("end",T),n&&C.on("error",L),C.pipe(u,{end:!1}),C.resume()}for(let C=0;C{"use strict";Object.defineProperty(hS,"__esModule",{value:!0});hS.merge=void 0;var T$e=Kne();function R$e(t){let e=T$e(t);return t.forEach(r=>{r.once("error",o=>e.emit("error",o))}),e.once("close",()=>Jne(t)),e.once("end",()=>Jne(t)),e}hS.merge=R$e;function Jne(t){t.forEach(e=>e.emit("close"))}});var Xne=_($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.isEmpty=$y.isString=void 0;function N$e(t){return typeof t=="string"}$y.isString=N$e;function L$e(t){return t===""}$y.isEmpty=L$e});var Df=_(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.string=bo.stream=bo.pattern=bo.path=bo.fs=bo.errno=bo.array=void 0;var M$e=Pne();bo.array=M$e;var O$e=Sne();bo.errno=O$e;var U$e=xne();bo.fs=U$e;var _$e=bne();bo.path=_$e;var H$e=Gne();bo.pattern=H$e;var j$e=zne();bo.stream=j$e;var q$e=Xne();bo.string=q$e});var eie=_(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.convertPatternGroupToTask=ko.convertPatternGroupsToTasks=ko.groupPatternsByBaseDirectory=ko.getNegativePatternsAsPositive=ko.getPositivePatterns=ko.convertPatternsToTasks=ko.generate=void 0;var Pf=Df();function G$e(t,e){let r=Zne(t),o=$ne(t,e.ignore),a=r.filter(p=>Pf.pattern.isStaticPattern(p,e)),n=r.filter(p=>Pf.pattern.isDynamicPattern(p,e)),u=ML(a,o,!1),A=ML(n,o,!0);return u.concat(A)}ko.generate=G$e;function ML(t,e,r){let o=[],a=Pf.pattern.getPatternsOutsideCurrentDirectory(t),n=Pf.pattern.getPatternsInsideCurrentDirectory(t),u=OL(a),A=OL(n);return o.push(...UL(u,e,r)),"."in A?o.push(_L(".",n,e,r)):o.push(...UL(A,e,r)),o}ko.convertPatternsToTasks=ML;function Zne(t){return Pf.pattern.getPositivePatterns(t)}ko.getPositivePatterns=Zne;function $ne(t,e){return Pf.pattern.getNegativePatterns(t).concat(e).map(Pf.pattern.convertToPositivePattern)}ko.getNegativePatternsAsPositive=$ne;function OL(t){let e={};return t.reduce((r,o)=>{let a=Pf.pattern.getBaseDirectory(o);return a in r?r[a].push(o):r[a]=[o],r},e)}ko.groupPatternsByBaseDirectory=OL;function UL(t,e,r){return Object.keys(t).map(o=>_L(o,t[o],e,r))}ko.convertPatternGroupsToTasks=UL;function _L(t,e,r,o){return{dynamic:o,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Pf.pattern.convertToNegativePattern))}}ko.convertPatternGroupToTask=_L});var rie=_(eE=>{"use strict";Object.defineProperty(eE,"__esModule",{value:!0});eE.removeDuplicateSlashes=eE.transform=void 0;var Y$e=/(?!^)\/{2,}/g;function W$e(t){return t.map(e=>tie(e))}eE.transform=W$e;function tie(t){return t.replace(Y$e,"/")}eE.removeDuplicateSlashes=tie});var iie=_(gS=>{"use strict";Object.defineProperty(gS,"__esModule",{value:!0});gS.read=void 0;function V$e(t,e,r){e.fs.lstat(t,(o,a)=>{if(o!==null){nie(r,o);return}if(!a.isSymbolicLink()||!e.followSymbolicLink){HL(r,a);return}e.fs.stat(t,(n,u)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){nie(r,n);return}HL(r,a);return}e.markSymbolicLink&&(u.isSymbolicLink=()=>!0),HL(r,u)})})}gS.read=V$e;function nie(t,e){t(e)}function HL(t,e){t(null,e)}});var sie=_(dS=>{"use strict";Object.defineProperty(dS,"__esModule",{value:!0});dS.read=void 0;function K$e(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let o=e.fs.statSync(t);return e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),o}catch(o){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw o}}dS.read=K$e});var oie=_(zp=>{"use strict";Object.defineProperty(zp,"__esModule",{value:!0});zp.createFileSystemAdapter=zp.FILE_SYSTEM_ADAPTER=void 0;var mS=Be("fs");zp.FILE_SYSTEM_ADAPTER={lstat:mS.lstat,stat:mS.stat,lstatSync:mS.lstatSync,statSync:mS.statSync};function J$e(t){return t===void 0?zp.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},zp.FILE_SYSTEM_ADAPTER),t)}zp.createFileSystemAdapter=J$e});var aie=_(qL=>{"use strict";Object.defineProperty(qL,"__esModule",{value:!0});var z$e=oie(),jL=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=z$e.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e??r}};qL.default=jL});var Ed=_(Xp=>{"use strict";Object.defineProperty(Xp,"__esModule",{value:!0});Xp.statSync=Xp.stat=Xp.Settings=void 0;var lie=iie(),X$e=sie(),YL=aie();Xp.Settings=YL.default;function Z$e(t,e,r){if(typeof e=="function"){lie.read(t,WL(),e);return}lie.read(t,WL(e),r)}Xp.stat=Z$e;function $$e(t,e){let r=WL(e);return X$e.read(t,r)}Xp.statSync=$$e;function WL(t={}){return t instanceof YL.default?t:new YL.default(t)}});var uie=_((qRt,cie)=>{cie.exports=eet;function eet(t,e){var r,o,a,n=!0;Array.isArray(t)?(r=[],o=t.length):(a=Object.keys(t),r={},o=a.length);function u(p){function h(){e&&e(p,r),e=null}n?process.nextTick(h):h()}function A(p,h,E){r[p]=E,(--o===0||h)&&u(h)}o?a?a.forEach(function(p){t[p](function(h,E){A(p,h,E)})}):t.forEach(function(p,h){p(function(E,I){A(h,E,I)})}):u(null),n=!1}});var VL=_(ES=>{"use strict";Object.defineProperty(ES,"__esModule",{value:!0});ES.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var yS=process.versions.node.split(".");if(yS[0]===void 0||yS[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var Aie=Number.parseInt(yS[0],10),tet=Number.parseInt(yS[1],10),fie=10,ret=10,net=Aie>fie,iet=Aie===fie&&tet>=ret;ES.IS_SUPPORT_READDIR_WITH_FILE_TYPES=net||iet});var pie=_(CS=>{"use strict";Object.defineProperty(CS,"__esModule",{value:!0});CS.createDirentFromStats=void 0;var KL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function set(t,e){return new KL(t,e)}CS.createDirentFromStats=set});var JL=_(wS=>{"use strict";Object.defineProperty(wS,"__esModule",{value:!0});wS.fs=void 0;var oet=pie();wS.fs=oet});var zL=_(IS=>{"use strict";Object.defineProperty(IS,"__esModule",{value:!0});IS.joinPathSegments=void 0;function aet(t,e,r){return t.endsWith(r)?t+e:t+r+e}IS.joinPathSegments=aet});var Eie=_(Zp=>{"use strict";Object.defineProperty(Zp,"__esModule",{value:!0});Zp.readdir=Zp.readdirWithFileTypes=Zp.read=void 0;var cet=Ed(),hie=uie(),uet=VL(),gie=JL(),die=zL();function Aet(t,e,r){if(!e.stats&&uet.IS_SUPPORT_READDIR_WITH_FILE_TYPES){mie(t,e,r);return}yie(t,e,r)}Zp.read=Aet;function mie(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(o,a)=>{if(o!==null){BS(r,o);return}let n=a.map(A=>({dirent:A,name:A.name,path:die.joinPathSegments(t,A.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){XL(r,n);return}let u=n.map(A=>fet(A,e));hie(u,(A,p)=>{if(A!==null){BS(r,A);return}XL(r,p)})})}Zp.readdirWithFileTypes=mie;function fet(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(o,a)=>{if(o!==null){if(e.throwErrorOnBrokenSymbolicLink){r(o);return}r(null,t);return}t.dirent=gie.fs.createDirentFromStats(t.name,a),r(null,t)})}}function yie(t,e,r){e.fs.readdir(t,(o,a)=>{if(o!==null){BS(r,o);return}let n=a.map(u=>{let A=die.joinPathSegments(t,u,e.pathSegmentSeparator);return p=>{cet.stat(A,e.fsStatSettings,(h,E)=>{if(h!==null){p(h);return}let I={name:u,path:A,dirent:gie.fs.createDirentFromStats(u,E)};e.stats&&(I.stats=E),p(null,I)})}});hie(n,(u,A)=>{if(u!==null){BS(r,u);return}XL(r,A)})})}Zp.readdir=yie;function BS(t,e){t(e)}function XL(t,e){t(null,e)}});var vie=_($p=>{"use strict";Object.defineProperty($p,"__esModule",{value:!0});$p.readdir=$p.readdirWithFileTypes=$p.read=void 0;var pet=Ed(),het=VL(),Cie=JL(),wie=zL();function get(t,e){return!e.stats&&het.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Iie(t,e):Bie(t,e)}$p.read=get;function Iie(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(o=>{let a={dirent:o,name:o.name,path:wie.joinPathSegments(t,o.name,e.pathSegmentSeparator)};if(a.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let n=e.fs.statSync(a.path);a.dirent=Cie.fs.createDirentFromStats(a.name,n)}catch(n){if(e.throwErrorOnBrokenSymbolicLink)throw n}return a})}$p.readdirWithFileTypes=Iie;function Bie(t,e){return e.fs.readdirSync(t).map(o=>{let a=wie.joinPathSegments(t,o,e.pathSegmentSeparator),n=pet.statSync(a,e.fsStatSettings),u={name:o,path:a,dirent:Cie.fs.createDirentFromStats(o,n)};return e.stats&&(u.stats=n),u})}$p.readdir=Bie});var Die=_(eh=>{"use strict";Object.defineProperty(eh,"__esModule",{value:!0});eh.createFileSystemAdapter=eh.FILE_SYSTEM_ADAPTER=void 0;var tE=Be("fs");eh.FILE_SYSTEM_ADAPTER={lstat:tE.lstat,stat:tE.stat,lstatSync:tE.lstatSync,statSync:tE.statSync,readdir:tE.readdir,readdirSync:tE.readdirSync};function det(t){return t===void 0?eh.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},eh.FILE_SYSTEM_ADAPTER),t)}eh.createFileSystemAdapter=det});var Pie=_($L=>{"use strict";Object.defineProperty($L,"__esModule",{value:!0});var met=Be("path"),yet=Ed(),Eet=Die(),ZL=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Eet.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,met.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new yet.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};$L.default=ZL});var vS=_(th=>{"use strict";Object.defineProperty(th,"__esModule",{value:!0});th.Settings=th.scandirSync=th.scandir=void 0;var Sie=Eie(),Cet=vie(),eM=Pie();th.Settings=eM.default;function wet(t,e,r){if(typeof e=="function"){Sie.read(t,tM(),e);return}Sie.read(t,tM(e),r)}th.scandir=wet;function Iet(t,e){let r=tM(e);return Cet.read(t,r)}th.scandirSync=Iet;function tM(t={}){return t instanceof eM.default?t:new eM.default(t)}});var bie=_(($Rt,xie)=>{"use strict";function Bet(t){var e=new t,r=e;function o(){var n=e;return n.next?e=n.next:(e=new t,r=e),n.next=null,n}function a(n){r.next=n,r=n}return{get:o,release:a}}xie.exports=Bet});var Qie=_((eNt,rM)=>{"use strict";var vet=bie();function kie(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),r<1)throw new Error("fastqueue concurrency must be greater than 1");var o=vet(Det),a=null,n=null,u=0,A=null,p={push:T,drain:Gl,saturated:Gl,pause:E,paused:!1,concurrency:r,running:h,resume:b,idle:C,length:I,getQueue:v,unshift:L,empty:Gl,kill:J,killAndDrain:te,error:le};return p;function h(){return u}function E(){p.paused=!0}function I(){for(var pe=a,Ae=0;pe;)pe=pe.next,Ae++;return Ae}function v(){for(var pe=a,Ae=[];pe;)Ae.push(pe.value),pe=pe.next;return Ae}function b(){if(!!p.paused){p.paused=!1;for(var pe=0;pe{"use strict";Object.defineProperty(Zu,"__esModule",{value:!0});Zu.joinPathSegments=Zu.replacePathSegmentSeparator=Zu.isAppliedFilter=Zu.isFatalError=void 0;function xet(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Zu.isFatalError=xet;function bet(t,e){return t===null||t(e)}Zu.isAppliedFilter=bet;function ket(t,e){return t.split(/[/\\]/).join(e)}Zu.replacePathSegmentSeparator=ket;function Qet(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Zu.joinPathSegments=Qet});var sM=_(iM=>{"use strict";Object.defineProperty(iM,"__esModule",{value:!0});var Fet=DS(),nM=class{constructor(e,r){this._root=e,this._settings=r,this._root=Fet.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};iM.default=nM});var lM=_(aM=>{"use strict";Object.defineProperty(aM,"__esModule",{value:!0});var Tet=Be("events"),Ret=vS(),Net=Qie(),PS=DS(),Let=sM(),oM=class extends Let.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=Ret.scandir,this._emitter=new Tet.EventEmitter,this._queue=Net(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let o={directory:e,base:r};this._queue.push(o,a=>{a!==null&&this._handleError(a)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(o,a)=>{if(o!==null){r(o,void 0);return}for(let n of a)this._handleEntry(n,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!PS.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let o=e.path;r!==void 0&&(e.path=PS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),PS.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&PS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};aM.default=oM});var Fie=_(uM=>{"use strict";Object.defineProperty(uM,"__esModule",{value:!0});var Met=lM(),cM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Met.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{Oet(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{Uet(e,this._storage)}),this._reader.read()}};uM.default=cM;function Oet(t,e){t(e)}function Uet(t,e){t(null,e)}});var Tie=_(fM=>{"use strict";Object.defineProperty(fM,"__esModule",{value:!0});var _et=Be("stream"),Het=lM(),AM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Het.default(this._root,this._settings),this._stream=new _et.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};fM.default=AM});var Rie=_(hM=>{"use strict";Object.defineProperty(hM,"__esModule",{value:!0});var jet=vS(),SS=DS(),qet=sM(),pM=class extends qet.default{constructor(){super(...arguments),this._scandir=jet.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let o=this._scandir(e,this._settings.fsScandirSettings);for(let a of o)this._handleEntry(a,r)}catch(o){this._handleError(o)}}_handleError(e){if(!!SS.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let o=e.path;r!==void 0&&(e.path=SS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),SS.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&SS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};hM.default=pM});var Nie=_(dM=>{"use strict";Object.defineProperty(dM,"__esModule",{value:!0});var Get=Rie(),gM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Get.default(this._root,this._settings)}read(){return this._reader.read()}};dM.default=gM});var Lie=_(yM=>{"use strict";Object.defineProperty(yM,"__esModule",{value:!0});var Yet=Be("path"),Wet=vS(),mM=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Yet.sep),this.fsScandirSettings=new Wet.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};yM.default=mM});var bS=_($u=>{"use strict";Object.defineProperty($u,"__esModule",{value:!0});$u.Settings=$u.walkStream=$u.walkSync=$u.walk=void 0;var Mie=Fie(),Vet=Tie(),Ket=Nie(),EM=Lie();$u.Settings=EM.default;function Jet(t,e,r){if(typeof e=="function"){new Mie.default(t,xS()).read(e);return}new Mie.default(t,xS(e)).read(r)}$u.walk=Jet;function zet(t,e){let r=xS(e);return new Ket.default(t,r).read()}$u.walkSync=zet;function Xet(t,e){let r=xS(e);return new Vet.default(t,r).read()}$u.walkStream=Xet;function xS(t={}){return t instanceof EM.default?t:new EM.default(t)}});var kS=_(wM=>{"use strict";Object.defineProperty(wM,"__esModule",{value:!0});var Zet=Be("path"),$et=Ed(),Oie=Df(),CM=class{constructor(e){this._settings=e,this._fsStatSettings=new $et.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return Zet.resolve(this._settings.cwd,e)}_makeEntry(e,r){let o={name:r,path:r,dirent:Oie.fs.createDirentFromStats(r,e)};return this._settings.stats&&(o.stats=e),o}_isFatalError(e){return!Oie.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};wM.default=CM});var vM=_(BM=>{"use strict";Object.defineProperty(BM,"__esModule",{value:!0});var ett=Be("stream"),ttt=Ed(),rtt=bS(),ntt=kS(),IM=class extends ntt.default{constructor(){super(...arguments),this._walkStream=rtt.walkStream,this._stat=ttt.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let o=e.map(this._getFullEntryPath,this),a=new ett.PassThrough({objectMode:!0});a._write=(n,u,A)=>this._getEntry(o[n],e[n],r).then(p=>{p!==null&&r.entryFilter(p)&&a.push(p),n===o.length-1&&a.end(),A()}).catch(A);for(let n=0;nthis._makeEntry(a,r)).catch(a=>{if(o.errorFilter(a))return null;throw a})}_getStat(e){return new Promise((r,o)=>{this._stat(e,this._fsStatSettings,(a,n)=>a===null?r(n):o(a))})}};BM.default=IM});var Uie=_(PM=>{"use strict";Object.defineProperty(PM,"__esModule",{value:!0});var itt=bS(),stt=kS(),ott=vM(),DM=class extends stt.default{constructor(){super(...arguments),this._walkAsync=itt.walk,this._readerStream=new ott.default(this._settings)}dynamic(e,r){return new Promise((o,a)=>{this._walkAsync(e,r,(n,u)=>{n===null?o(u):a(n)})})}async static(e,r){let o=[],a=this._readerStream.static(e,r);return new Promise((n,u)=>{a.once("error",u),a.on("data",A=>o.push(A)),a.once("end",()=>n(o))})}};PM.default=DM});var _ie=_(xM=>{"use strict";Object.defineProperty(xM,"__esModule",{value:!0});var rE=Df(),SM=class{constructor(e,r,o){this._patterns=e,this._settings=r,this._micromatchOptions=o,this._storage=[],this._fillStorage()}_fillStorage(){let e=rE.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let r of e){let o=this._getPatternSegments(r),a=this._splitSegmentsIntoSections(o);this._storage.push({complete:a.length<=1,pattern:r,segments:o,sections:a})}}_getPatternSegments(e){return rE.pattern.getPatternParts(e,this._micromatchOptions).map(o=>rE.pattern.isDynamicPattern(o,this._settings)?{dynamic:!0,pattern:o,patternRe:rE.pattern.makeRe(o,this._micromatchOptions)}:{dynamic:!1,pattern:o})}_splitSegmentsIntoSections(e){return rE.array.splitWhen(e,r=>r.dynamic&&rE.pattern.hasGlobStar(r.pattern))}};xM.default=SM});var Hie=_(kM=>{"use strict";Object.defineProperty(kM,"__esModule",{value:!0});var att=_ie(),bM=class extends att.default{match(e){let r=e.split("/"),o=r.length,a=this._storage.filter(n=>!n.complete||n.segments.length>o);for(let n of a){let u=n.sections[0];if(!n.complete&&o>u.length||r.every((p,h)=>{let E=n.segments[h];return!!(E.dynamic&&E.patternRe.test(p)||!E.dynamic&&E.pattern===p)}))return!0}return!1}};kM.default=bM});var jie=_(FM=>{"use strict";Object.defineProperty(FM,"__esModule",{value:!0});var QS=Df(),ltt=Hie(),QM=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,o){let a=this._getMatcher(r),n=this._getNegativePatternsRe(o);return u=>this._filter(e,u,a,n)}_getMatcher(e){return new ltt.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(QS.pattern.isAffectDepthOfReadingPattern);return QS.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,o,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let n=QS.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(n,o)?!1:this._isSkippedByNegativePatterns(n,a)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let o=r.split("/").length;if(e==="")return o;let a=e.split("/").length;return o-a}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!QS.pattern.matchAny(e,r)}};FM.default=QM});var qie=_(RM=>{"use strict";Object.defineProperty(RM,"__esModule",{value:!0});var Cd=Df(),TM=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let o=Cd.pattern.convertPatternsToRe(e,this._micromatchOptions),a=Cd.pattern.convertPatternsToRe(r,this._micromatchOptions);return n=>this._filter(n,o,a)}_filter(e,r,o){if(this._settings.unique&&this._isDuplicateEntry(e)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e.path,o))return!1;let a=this._settings.baseNameMatch?e.name:e.path,n=e.dirent.isDirectory(),u=this._isMatchToPatterns(a,r,n)&&!this._isMatchToPatterns(e.path,o,n);return this._settings.unique&&u&&this._createIndexRecord(e),u}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)return!1;let o=Cd.path.makeAbsolute(this._settings.cwd,e);return Cd.pattern.matchAny(o,r)}_isMatchToPatterns(e,r,o){let a=Cd.path.removeLeadingDotSegment(e),n=Cd.pattern.matchAny(a,r);return!n&&o?Cd.pattern.matchAny(a+"/",r):n}};RM.default=TM});var Gie=_(LM=>{"use strict";Object.defineProperty(LM,"__esModule",{value:!0});var ctt=Df(),NM=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return ctt.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};LM.default=NM});var Wie=_(OM=>{"use strict";Object.defineProperty(OM,"__esModule",{value:!0});var Yie=Df(),MM=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=Yie.path.makeAbsolute(this._settings.cwd,r),r=Yie.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};OM.default=MM});var TS=_(_M=>{"use strict";Object.defineProperty(_M,"__esModule",{value:!0});var utt=Be("path"),Att=jie(),ftt=qie(),ptt=Gie(),htt=Wie(),UM=class{constructor(e){this._settings=e,this.errorFilter=new ptt.default(this._settings),this.entryFilter=new ftt.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new Att.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new htt.default(this._settings)}_getRootDirectory(e){return utt.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};_M.default=UM});var Vie=_(jM=>{"use strict";Object.defineProperty(jM,"__esModule",{value:!0});var gtt=Uie(),dtt=TS(),HM=class extends dtt.default{constructor(){super(...arguments),this._reader=new gtt.default(this._settings)}async read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return(await this.api(r,e,o)).map(n=>o.transform(n))}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};jM.default=HM});var Kie=_(GM=>{"use strict";Object.defineProperty(GM,"__esModule",{value:!0});var mtt=Be("stream"),ytt=vM(),Ett=TS(),qM=class extends Ett.default{constructor(){super(...arguments),this._reader=new ytt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e),a=this.api(r,e,o),n=new mtt.Readable({objectMode:!0,read:()=>{}});return a.once("error",u=>n.emit("error",u)).on("data",u=>n.emit("data",o.transform(u))).once("end",()=>n.emit("end")),n.once("close",()=>a.destroy()),n}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};GM.default=qM});var Jie=_(WM=>{"use strict";Object.defineProperty(WM,"__esModule",{value:!0});var Ctt=Ed(),wtt=bS(),Itt=kS(),YM=class extends Itt.default{constructor(){super(...arguments),this._walkSync=wtt.walkSync,this._statSync=Ctt.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let o=[];for(let a of e){let n=this._getFullEntryPath(a),u=this._getEntry(n,a,r);u===null||!r.entryFilter(u)||o.push(u)}return o}_getEntry(e,r,o){try{let a=this._getStat(e);return this._makeEntry(a,r)}catch(a){if(o.errorFilter(a))return null;throw a}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};WM.default=YM});var zie=_(KM=>{"use strict";Object.defineProperty(KM,"__esModule",{value:!0});var Btt=Jie(),vtt=TS(),VM=class extends vtt.default{constructor(){super(...arguments),this._reader=new Btt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return this.api(r,e,o).map(o.transform)}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};KM.default=VM});var Xie=_(iE=>{"use strict";Object.defineProperty(iE,"__esModule",{value:!0});iE.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var nE=Be("fs"),Dtt=Be("os"),Ptt=Math.max(Dtt.cpus().length,1);iE.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:nE.lstat,lstatSync:nE.lstatSync,stat:nE.stat,statSync:nE.statSync,readdir:nE.readdir,readdirSync:nE.readdirSync};var JM=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,Ptt),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},iE.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};iE.default=JM});var RS=_((DNt,ese)=>{"use strict";var Zie=eie(),$ie=rie(),Stt=Vie(),xtt=Kie(),btt=zie(),zM=Xie(),wd=Df();async function XM(t,e){sE(t);let r=ZM(t,Stt.default,e),o=await Promise.all(r);return wd.array.flatten(o)}(function(t){function e(u,A){sE(u);let p=ZM(u,btt.default,A);return wd.array.flatten(p)}t.sync=e;function r(u,A){sE(u);let p=ZM(u,xtt.default,A);return wd.stream.merge(p)}t.stream=r;function o(u,A){sE(u);let p=$ie.transform([].concat(u)),h=new zM.default(A);return Zie.generate(p,h)}t.generateTasks=o;function a(u,A){sE(u);let p=new zM.default(A);return wd.pattern.isDynamicPattern(u,p)}t.isDynamicPattern=a;function n(u){return sE(u),wd.path.escape(u)}t.escapePath=n})(XM||(XM={}));function ZM(t,e,r){let o=$ie.transform([].concat(t)),a=new zM.default(r),n=Zie.generate(o,a),u=new e(a);return n.map(u.read,u)}function sE(t){if(![].concat(t).every(o=>wd.string.isString(o)&&!wd.string.isEmpty(o)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}ese.exports=XM});var wn={};Kt(wn,{checksumFile:()=>LS,checksumPattern:()=>MS,makeHash:()=>zs});function zs(...t){let e=(0,NS.createHash)("sha512"),r="";for(let o of t)typeof o=="string"?r+=o:o&&(r&&(e.update(r),r=""),e.update(o));return r&&e.update(r),e.digest("hex")}async function LS(t,{baseFs:e,algorithm:r}={baseFs:oe,algorithm:"sha512"}){let o=await e.openPromise(t,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,NS.createHash)(r),A=0;for(;(A=await e.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await e.closePromise(o)}}async function MS(t,{cwd:e}){let o=(await(0,$M.default)(t,{cwd:ue.fromPortablePath(e),onlyDirectories:!0})).map(A=>`${A}/**/*`),a=await(0,$M.default)([t,...o],{cwd:ue.fromPortablePath(e),onlyFiles:!1});a.sort();let n=await Promise.all(a.map(async A=>{let p=[Buffer.from(A)],h=ue.toPortablePath(A),E=await oe.lstatPromise(h);return E.isSymbolicLink()?p.push(Buffer.from(await oe.readlinkPromise(h))):E.isFile()&&p.push(await oe.readFilePromise(h)),p.join("\0")})),u=(0,NS.createHash)("sha512");for(let A of n)u.update(A);return u.digest("hex")}var NS,$M,rh=Et(()=>{Pt();NS=Be("crypto"),$M=$e(RS())});var W={};Kt(W,{areDescriptorsEqual:()=>sse,areIdentsEqual:()=>r1,areLocatorsEqual:()=>n1,areVirtualPackagesEquivalent:()=>Ott,bindDescriptor:()=>Ltt,bindLocator:()=>Mtt,convertDescriptorToLocator:()=>OS,convertLocatorToDescriptor:()=>tO,convertPackageToLocator:()=>Ttt,convertToIdent:()=>Ftt,convertToManifestRange:()=>Ktt,copyPackage:()=>$I,devirtualizeDescriptor:()=>e1,devirtualizeLocator:()=>t1,ensureDevirtualizedDescriptor:()=>Rtt,ensureDevirtualizedLocator:()=>Ntt,getIdentVendorPath:()=>sO,isPackageCompatible:()=>qS,isVirtualDescriptor:()=>Sf,isVirtualLocator:()=>Hc,makeDescriptor:()=>In,makeIdent:()=>eA,makeLocator:()=>Qs,makeRange:()=>HS,parseDescriptor:()=>nh,parseFileStyleRange:()=>Wtt,parseIdent:()=>Js,parseLocator:()=>xf,parseRange:()=>Id,prettyDependent:()=>FL,prettyDescriptor:()=>qn,prettyIdent:()=>cs,prettyLocator:()=>jr,prettyLocatorNoColors:()=>QL,prettyRange:()=>lE,prettyReference:()=>s1,prettyResolution:()=>XI,prettyWorkspace:()=>o1,renamePackage:()=>rO,slugifyIdent:()=>eO,slugifyLocator:()=>aE,sortDescriptors:()=>cE,stringifyDescriptor:()=>Sa,stringifyIdent:()=>fn,stringifyLocator:()=>xa,tryParseDescriptor:()=>i1,tryParseIdent:()=>ose,tryParseLocator:()=>_S,tryParseRange:()=>Ytt,virtualizeDescriptor:()=>nO,virtualizePackage:()=>iO});function eA(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:zs(t,e),scope:t,name:e}}function In(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:zs(t.identHash,e),range:e}}function Qs(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:zs(t.identHash,e),reference:e}}function Ftt(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function OS(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function tO(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function Ttt(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function rO(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:t.version,languageName:t.languageName,linkType:t.linkType,conditions:t.conditions,dependencies:new Map(t.dependencies),peerDependencies:new Map(t.peerDependencies),dependenciesMeta:new Map(t.dependenciesMeta),peerDependenciesMeta:new Map(t.peerDependenciesMeta),bin:new Map(t.bin)}}function $I(t){return rO(t,t)}function nO(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return In(t,`virtual:${e}#${t.range}`)}function iO(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return rO(t,Qs(t,`virtual:${e}#${t.reference}`))}function Sf(t){return t.range.startsWith(ZI)}function Hc(t){return t.reference.startsWith(ZI)}function e1(t){if(!Sf(t))throw new Error("Not a virtual descriptor");return In(t,t.range.replace(US,""))}function t1(t){if(!Hc(t))throw new Error("Not a virtual descriptor");return Qs(t,t.reference.replace(US,""))}function Rtt(t){return Sf(t)?In(t,t.range.replace(US,"")):t}function Ntt(t){return Hc(t)?Qs(t,t.reference.replace(US,"")):t}function Ltt(t,e){return t.range.includes("::")?t:In(t,`${t.range}::${oE.default.stringify(e)}`)}function Mtt(t,e){return t.reference.includes("::")?t:Qs(t,`${t.reference}::${oE.default.stringify(e)}`)}function r1(t,e){return t.identHash===e.identHash}function sse(t,e){return t.descriptorHash===e.descriptorHash}function n1(t,e){return t.locatorHash===e.locatorHash}function Ott(t,e){if(!Hc(t))throw new Error("Invalid package type");if(!Hc(e))throw new Error("Invalid package type");if(!r1(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let o=e.dependencies.get(r.identHash);if(!o||!sse(r,o))return!1}return!0}function Js(t){let e=ose(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function ose(t){let e=t.match(Utt);if(!e)return null;let[,r,o]=e;return eA(typeof r<"u"?r:null,o)}function nh(t,e=!1){let r=i1(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function i1(t,e=!1){let r=e?t.match(_tt):t.match(Htt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid range (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return In(eA(u,a),A)}function xf(t,e=!1){let r=_S(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function _S(t,e=!1){let r=e?t.match(jtt):t.match(qtt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid reference (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return Qs(eA(u,a),A)}function Id(t,e){let r=t.match(Gtt);if(r===null)throw new Error(`Invalid range (${t})`);let o=typeof r[1]<"u"?r[1]:null;if(typeof e?.requireProtocol=="string"&&o!==e.requireProtocol)throw new Error(`Invalid protocol (${o})`);if(e?.requireProtocol&&o===null)throw new Error(`Missing protocol (${o})`);let a=typeof r[3]<"u"?decodeURIComponent(r[2]):null;if(e?.requireSource&&a===null)throw new Error(`Missing source (${t})`);let n=typeof r[3]<"u"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),u=e?.parseSelector?oE.default.parse(n):n,A=typeof r[4]<"u"?oE.default.parse(r[4]):null;return{protocol:o,source:a,selector:u,params:A}}function Ytt(t,e){try{return Id(t,e)}catch{return null}}function Wtt(t,{protocol:e}){let{selector:r,params:o}=Id(t,{requireProtocol:e,requireBindings:!0});if(typeof o.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:xf(o.locator,!0),path:r}}function tse(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A"),t=t.replaceAll("#","%23"),t}function Vtt(t){return t===null?!1:Object.entries(t).length>0}function HS({protocol:t,source:e,selector:r,params:o}){let a="";return t!==null&&(a+=`${t}`),e!==null&&(a+=`${tse(e)}#`),a+=tse(r),Vtt(o)&&(a+=`::${oE.default.stringify(o)}`),a}function Ktt(t){let{params:e,protocol:r,source:o,selector:a}=Id(t);for(let n in e)n.startsWith("__")&&delete e[n];return HS({protocol:r,source:o,params:e,selector:a})}function fn(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function Sa(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function xa(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function eO(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function aE(t){let{protocol:e,selector:r}=Id(t.reference),o=e!==null?e.replace(Jtt,""):"exotic",a=rse.default.valid(r),n=a!==null?`${o}-${a}`:`${o}`,u=10;return t.scope?`${eO(t)}-${n}-${t.locatorHash.slice(0,u)}`:`${eO(t)}-${n}-${t.locatorHash.slice(0,u)}`}function cs(t,e){return e.scope?`${Ot(t,`@${e.scope}/`,yt.SCOPE)}${Ot(t,e.name,yt.NAME)}`:`${Ot(t,e.name,yt.NAME)}`}function jS(t){if(t.startsWith(ZI)){let e=jS(t.substring(t.indexOf("#")+1)),r=t.substring(ZI.length,ZI.length+ktt);return`${e} [${r}]`}else return t.replace(ztt,"?[...]")}function lE(t,e){return`${Ot(t,jS(e),yt.RANGE)}`}function qn(t,e){return`${cs(t,e)}${Ot(t,"@",yt.RANGE)}${lE(t,e.range)}`}function s1(t,e){return`${Ot(t,jS(e),yt.REFERENCE)}`}function jr(t,e){return`${cs(t,e)}${Ot(t,"@",yt.REFERENCE)}${s1(t,e.reference)}`}function QL(t){return`${fn(t)}@${jS(t.reference)}`}function cE(t){return ks(t,[e=>fn(e),e=>e.range])}function o1(t,e){return cs(t,e.anchoredLocator)}function XI(t,e,r){let o=Sf(e)?e1(e):e;return r===null?`${qn(t,o)} \u2192 ${kL(t).Cross}`:o.identHash===r.identHash?`${qn(t,o)} \u2192 ${s1(t,r.reference)}`:`${qn(t,o)} \u2192 ${jr(t,r)}`}function FL(t,e,r){return r===null?`${jr(t,e)}`:`${jr(t,e)} (via ${lE(t,r.range)})`}function sO(t){return`node_modules/${fn(t)}`}function qS(t,e){return t.conditions?Qtt(t.conditions,r=>{let[,o,a]=r.match(ise),n=e[o];return n?n.includes(a):!0}):!0}var oE,rse,nse,ZI,ktt,ise,Qtt,US,Utt,_tt,Htt,jtt,qtt,Gtt,Jtt,ztt,xo=Et(()=>{oE=$e(Be("querystring")),rse=$e(zn()),nse=$e(rX());ql();rh();jl();xo();ZI="virtual:",ktt=5,ise=/(os|cpu|libc)=([a-z0-9_-]+)/,Qtt=(0,nse.makeParser)(ise);US=/^[^#]*#/;Utt=/^(?:@([^/]+?)\/)?([^@/]+)$/;_tt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Htt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;jtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,qtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Gtt=/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/;Jtt=/:$/;ztt=/\?.*/});var ase,lse=Et(()=>{xo();ase={hooks:{reduceDependency:(t,e,r,o,{resolver:a,resolveOptions:n})=>{for(let{pattern:u,reference:A}of e.topLevelWorkspace.manifest.resolutions){if(u.from&&(u.from.fullName!==fn(r)||e.configuration.normalizeLocator(Qs(Js(u.from.fullName),u.from.description??r.reference)).locatorHash!==r.locatorHash)||u.descriptor.fullName!==fn(t)||e.configuration.normalizeDependency(In(xf(u.descriptor.fullName),u.descriptor.description??t.range)).descriptorHash!==t.descriptorHash)continue;return a.bindDescriptor(e.configuration.normalizeDependency(In(t,A)),e.topLevelWorkspace.anchoredLocator,n)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let o=o1(t.configuration,r);await t.configuration.triggerHook(a=>a.validateWorkspace,r,{reportWarning:(a,n)=>e.reportWarning(a,`${o}: ${n}`),reportError:(a,n)=>e.reportError(a,`${o}: ${n}`)})}},validateWorkspace:async(t,e)=>{let{manifest:r}=t;r.resolutions.length&&t.cwd!==t.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(let o of r.errors)e.reportWarning(57,o.message)}}}});var a1,Xn,Bd=Et(()=>{a1=class{supportsDescriptor(e,r){return!!(e.range.startsWith(a1.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(a1.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[o.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.getWorkspaceByCwd(e.reference.slice(a1.protocol.length));return{...e,version:o.manifest.version||"0.0.0",languageName:"unknown",linkType:"SOFT",conditions:null,dependencies:r.project.configuration.normalizeDependencyMap(new Map([...o.manifest.dependencies,...o.manifest.devDependencies])),peerDependencies:new Map([...o.manifest.peerDependencies]),dependenciesMeta:o.manifest.dependenciesMeta,peerDependenciesMeta:o.manifest.peerDependenciesMeta,bin:o.manifest.bin}}},Xn=a1;Xn.protocol="workspace:"});var kr={};Kt(kr,{SemVer:()=>pse.SemVer,clean:()=>Ztt,getComparator:()=>Ase,mergeComparators:()=>oO,satisfiesWithPrereleases:()=>bf,simplifyRanges:()=>aO,stringifyComparator:()=>fse,validRange:()=>ba});function bf(t,e,r=!1){if(!t)return!1;let o=`${e}${r}`,a=cse.get(o);if(typeof a>"u")try{a=new ih.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{cse.set(o,a||null)}else if(a===null)return!1;let n;try{n=new ih.default.SemVer(t,a)}catch{return!1}return a.test(n)?!0:(n.prerelease&&(n.prerelease=[]),a.set.some(u=>{for(let A of u)A.semver.prerelease&&(A.semver.prerelease=[]);return u.every(A=>A.test(n))}))}function ba(t){if(t.indexOf(":")!==-1)return null;let e=use.get(t);if(typeof e<"u")return e;try{e=new ih.default.Range(t)}catch{e=null}return use.set(t,e),e}function Ztt(t){let e=Xtt.exec(t);return e?e[1]:null}function Ase(t){if(t.semver===ih.default.Comparator.ANY)return{gt:null,lt:null};switch(t.operator){case"":return{gt:[">=",t.semver],lt:["<=",t.semver]};case">":case">=":return{gt:[t.operator,t.semver],lt:null};case"<":case"<=":return{gt:null,lt:[t.operator,t.semver]};default:throw new Error(`Assertion failed: Unexpected comparator operator (${t.operator})`)}}function oO(t){if(t.length===0)return null;let e=null,r=null;for(let o of t){if(o.gt){let a=e!==null?ih.default.compare(o.gt[1],e[1]):null;(a===null||a>0||a===0&&o.gt[0]===">")&&(e=o.gt)}if(o.lt){let a=r!==null?ih.default.compare(o.lt[1],r[1]):null;(a===null||a<0||a===0&&o.lt[0]==="<")&&(r=o.lt)}}if(e&&r){let o=ih.default.compare(e[1],r[1]);if(o===0&&(e[0]===">"||r[0]==="<")||o>0)return null}return{gt:e,lt:r}}function fse(t){if(t.gt&&t.lt){if(t.gt[0]===">="&&t.lt[0]==="<="&&t.gt[1].version===t.lt[1].version)return t.gt[1].version;if(t.gt[0]===">="&&t.lt[0]==="<"){if(t.lt[1].version===`${t.gt[1].major+1}.0.0-0`)return`^${t.gt[1].version}`;if(t.lt[1].version===`${t.gt[1].major}.${t.gt[1].minor+1}.0-0`)return`~${t.gt[1].version}`}}let e=[];return t.gt&&e.push(t.gt[0]+t.gt[1].version),t.lt&&e.push(t.lt[0]+t.lt[1].version),e.length?e.join(" "):"*"}function aO(t){let e=t.map(o=>ba(o).set.map(a=>a.map(n=>Ase(n)))),r=e.shift().map(o=>oO(o)).filter(o=>o!==null);for(let o of e){let a=[];for(let n of r)for(let u of o){let A=oO([n,...u]);A!==null&&a.push(A)}r=a}return r.length===0?null:r.map(o=>fse(o)).join(" || ")}var ih,pse,cse,use,Xtt,kf=Et(()=>{ih=$e(zn()),pse=$e(zn()),cse=new Map;use=new Map;Xtt=/^(?:[\sv=]*?)((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(?:\s*)$/});function hse(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function gse(t){return t.charCodeAt(0)===65279?t.slice(1):t}function $o(t){return t.replace(/\\/g,"/")}function GS(t,{yamlCompatibilityMode:e}){return e?IL(t):typeof t>"u"||typeof t=="boolean"?t:null}function dse(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let o=r%2===0?"":"!",a=e.slice(r);return`${o}${t}=${a}`}function lO(t,e){return e.length===1?dse(t,e[0]):`(${e.map(r=>dse(t,r)).join(" | ")})`}var mse,uE,Mt,AE=Et(()=>{Pt();Nl();mse=$e(zn());Bd();jl();kf();xo();uE=class{constructor(){this.indent=" ";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:r=new Rn}={}){let o=K.join(e,"package.json");try{return await uE.fromFile(o,{baseFs:r})}catch(a){if(a.code==="ENOENT")return null;throw a}}static async find(e,{baseFs:r}={}){let o=await uE.tryFind(e,{baseFs:r});if(o===null)throw new Error("Manifest not found");return o}static async fromFile(e,{baseFs:r=new Rn}={}){let o=new uE;return await o.loadFile(e,{baseFs:r}),o}static fromText(e){let r=new uE;return r.loadFromText(e),r}loadFromText(e){let r;try{r=JSON.parse(gse(e)||"{}")}catch(o){throw o.message+=` (when parsing ${e})`,o}this.load(r),this.indent=hse(e)}async loadFile(e,{baseFs:r=new Rn}){let o=await r.readFilePromise(e,"utf8"),a;try{a=JSON.parse(gse(o)||"{}")}catch(n){throw n.message+=` (when parsing ${e})`,n}this.load(a),this.indent=hse(o)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let o=[];if(this.name=null,typeof e.name=="string")try{this.name=Js(e.name)}catch{o.push(new Error("Parsing failed for the 'name' field"))}if(typeof e.version=="string"?this.version=e.version:this.version=null,Array.isArray(e.os)){let n=[];this.os=n;for(let u of e.os)typeof u!="string"?o.push(new Error("Parsing failed for the 'os' field")):n.push(u)}else this.os=null;if(Array.isArray(e.cpu)){let n=[];this.cpu=n;for(let u of e.cpu)typeof u!="string"?o.push(new Error("Parsing failed for the 'cpu' field")):n.push(u)}else this.cpu=null;if(Array.isArray(e.libc)){let n=[];this.libc=n;for(let u of e.libc)typeof u!="string"?o.push(new Error("Parsing failed for the 'libc' field")):n.push(u)}else this.libc=null;if(typeof e.type=="string"?this.type=e.type:this.type=null,typeof e.packageManager=="string"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private=="boolean"?this.private=e.private:this.private=!1,typeof e.license=="string"?this.license=e.license:this.license=null,typeof e.languageName=="string"?this.languageName=e.languageName:this.languageName=null,typeof e.main=="string"?this.main=$o(e.main):this.main=null,typeof e.module=="string"?this.module=$o(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=$o(e.browser);else{this.browser=new Map;for(let[n,u]of Object.entries(e.browser))this.browser.set($o(n),typeof u=="string"?$o(u):u)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")e.bin.trim()===""?o.push(new Error("Invalid bin field")):this.name!==null?this.bin.set(this.name.name,$o(e.bin)):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[n,u]of Object.entries(e.bin)){if(typeof u!="string"||u.trim()===""){o.push(new Error(`Invalid bin definition for '${n}'`));continue}let A=Js(n);this.bin.set(A.name,$o(u))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[n,u]of Object.entries(e.scripts)){if(typeof u!="string"){o.push(new Error(`Invalid script definition for '${n}'`));continue}this.scripts.set(n,u)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[n,u]of Object.entries(e.dependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[n,u]of Object.entries(e.devDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.devDependencies.set(p.identHash,p)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[n,u]of Object.entries(e.peerDependencies)){let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}(typeof u!="string"||!u.startsWith(Xn.protocol)&&!ba(u))&&(o.push(new Error(`Invalid dependency range for '${n}'`)),u="*");let p=In(A,u);this.peerDependencies.set(p.identHash,p)}typeof e.workspaces=="object"&&e.workspaces!==null&&e.workspaces.nohoist&&o.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let a=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces=="object"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let n of a){if(typeof n!="string"){o.push(new Error(`Invalid workspace definition for '${n}'`));continue}this.workspaceDefinitions.push({pattern:n})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[n,u]of Object.entries(e.dependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}`));continue}let A=nh(n),p=this.ensureDependencyMeta(A),h=GS(u.built,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid built meta field for '${n}'`));continue}let E=GS(u.optional,{yamlCompatibilityMode:r});if(E===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}let I=GS(u.unplugged,{yamlCompatibilityMode:r});if(I===null){o.push(new Error(`Invalid unplugged meta field for '${n}'`));continue}Object.assign(p,{built:h,optional:E,unplugged:I})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[n,u]of Object.entries(e.peerDependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}'`));continue}let A=nh(n),p=this.ensurePeerDependencyMeta(A),h=GS(u.optional,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}Object.assign(p,{optional:h})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[n,u]of Object.entries(e.resolutions)){if(typeof u!="string"){o.push(new Error(`Invalid resolution entry for '${n}'`));continue}try{this.resolutions.push({pattern:UD(n),reference:u})}catch(A){o.push(A);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let n of e.files){if(typeof n!="string"){o.push(new Error(`Invalid files entry for '${n}'`));continue}this.files.add(n)}}else this.files=null;if(typeof e.publishConfig=="object"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access=="string"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main=="string"&&(this.publishConfig.main=$o(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=$o(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=$o(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[n,u]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set($o(n),typeof u=="string"?$o(u):u)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,$o(e.publishConfig.bin)]]):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.publishConfig.bin=="object"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[n,u]of Object.entries(e.publishConfig.bin)){if(typeof u!="string"){o.push(new Error(`Invalid bin definition for '${n}'`));continue}this.publishConfig.bin.set(n,$o(u))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let n of e.publishConfig.executableFiles){if(typeof n!="string"){o.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add($o(n))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let n of Object.keys(e.installConfig))n==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:o.push(new Error("Invalid hoisting limits definition")):n=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:o.push(new Error("Invalid selfReferences definition, must be a boolean value")):o.push(new Error(`Unrecognized installConfig key: ${n}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[n,u]of Object.entries(e.optionalDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p);let h=In(A,"unknown"),E=this.ensureDependencyMeta(h);Object.assign(E,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=o}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(lO("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(lO("cpu",this.cpu)),this.libc&&this.libc.length>0&&e.push(lO("libc",this.libc)),e.length>0?e.join(" & "):null}ensureDependencyMeta(e){if(e.range!=="unknown"&&!mse.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=fn(e),o=e.range!=="unknown"?e.range:null,a=this.dependenciesMeta.get(r);a||this.dependenciesMeta.set(r,a=new Map);let n=a.get(o);return n||a.set(o,n={}),n}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=fn(e),o=this.peerDependenciesMeta.get(r);return o||this.peerDependenciesMeta.set(r,o={}),o}setRawField(e,r,{after:o=[]}={}){let a=new Set(o.filter(n=>Object.hasOwn(this.raw,n)));if(a.size===0||Object.hasOwn(this.raw,e))this.raw[e]=r;else{let n=this.raw,u=this.raw={},A=!1;for(let p of Object.keys(n))u[p]=n[p],A||(a.delete(p),a.size===0&&(u[e]=r,A=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=fn(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let n=this.browser;typeof n=="string"?e.browser=n:n instanceof Map&&(e.browser=Object.assign({},...Array.from(n.keys()).sort().map(u=>({[u]:n.get(u)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(n=>({[n]:this.bin.get(n)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:n})=>n)}:e.workspaces=this.workspaceDefinitions.map(({pattern:n})=>n):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let o=[],a=[];for(let n of this.dependencies.values()){let u=this.dependenciesMeta.get(fn(n)),A=!1;if(r&&u){let p=u.get(null);p&&p.optional&&(A=!0)}A?a.push(n):o.push(n)}o.length>0?e.dependencies=Object.assign({},...cE(o).map(n=>({[fn(n)]:n.range}))):delete e.dependencies,a.length>0?e.optionalDependencies=Object.assign({},...cE(a).map(n=>({[fn(n)]:n.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...cE(this.devDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...cE(this.peerDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[n,u]of ks(this.dependenciesMeta.entries(),([A,p])=>A))for(let[A,p]of ks(u.entries(),([h,E])=>h!==null?`0${h}`:"1")){let h=A!==null?Sa(In(Js(n),A)):n,E={...p};r&&A===null&&delete E.optional,Object.keys(E).length!==0&&(e.dependenciesMeta[h]=E)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...ks(this.peerDependenciesMeta.entries(),([n,u])=>n).map(([n,u])=>({[n]:u}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:n,reference:u})=>({[_D(n)]:u}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){e.scripts??={};for(let n of Object.keys(e.scripts))this.scripts.has(n)||delete e.scripts[n];for(let[n,u]of this.scripts.entries())e.scripts[n]=u}else delete e.scripts;return e}},Mt=uE;Mt.fileName="package.json",Mt.allDependencies=["dependencies","devDependencies","peerDependencies"],Mt.hardDependencies=["dependencies","devDependencies"]});var Ese=_((_Nt,yse)=>{var $tt=_l(),ert=function(){return $tt.Date.now()};yse.exports=ert});var wse=_((HNt,Cse)=>{var trt=/\s/;function rrt(t){for(var e=t.length;e--&&trt.test(t.charAt(e)););return e}Cse.exports=rrt});var Bse=_((jNt,Ise)=>{var nrt=wse(),irt=/^\s+/;function srt(t){return t&&t.slice(0,nrt(t)+1).replace(irt,"")}Ise.exports=srt});var fE=_((qNt,vse)=>{var ort=pd(),art=Ju(),lrt="[object Symbol]";function crt(t){return typeof t=="symbol"||art(t)&&ort(t)==lrt}vse.exports=crt});var xse=_((GNt,Sse)=>{var urt=Bse(),Dse=il(),Art=fE(),Pse=0/0,frt=/^[-+]0x[0-9a-f]+$/i,prt=/^0b[01]+$/i,hrt=/^0o[0-7]+$/i,grt=parseInt;function drt(t){if(typeof t=="number")return t;if(Art(t))return Pse;if(Dse(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Dse(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=urt(t);var r=prt.test(t);return r||hrt.test(t)?grt(t.slice(2),r?2:8):frt.test(t)?Pse:+t}Sse.exports=drt});var Qse=_((YNt,kse)=>{var mrt=il(),cO=Ese(),bse=xse(),yrt="Expected a function",Ert=Math.max,Crt=Math.min;function wrt(t,e,r){var o,a,n,u,A,p,h=0,E=!1,I=!1,v=!0;if(typeof t!="function")throw new TypeError(yrt);e=bse(e)||0,mrt(r)&&(E=!!r.leading,I="maxWait"in r,n=I?Ert(bse(r.maxWait)||0,e):n,v="trailing"in r?!!r.trailing:v);function b(Ae){var ye=o,ae=a;return o=a=void 0,h=Ae,u=t.apply(ae,ye),u}function C(Ae){return h=Ae,A=setTimeout(U,e),E?b(Ae):u}function T(Ae){var ye=Ae-p,ae=Ae-h,we=e-ye;return I?Crt(we,n-ae):we}function L(Ae){var ye=Ae-p,ae=Ae-h;return p===void 0||ye>=e||ye<0||I&&ae>=n}function U(){var Ae=cO();if(L(Ae))return J(Ae);A=setTimeout(U,T(Ae))}function J(Ae){return A=void 0,v&&o?b(Ae):(o=a=void 0,u)}function te(){A!==void 0&&clearTimeout(A),h=0,o=p=a=A=void 0}function le(){return A===void 0?u:J(cO())}function pe(){var Ae=cO(),ye=L(Ae);if(o=arguments,a=this,p=Ae,ye){if(A===void 0)return C(p);if(I)return clearTimeout(A),A=setTimeout(U,e),b(p)}return A===void 0&&(A=setTimeout(U,e)),u}return pe.cancel=te,pe.flush=le,pe}kse.exports=wrt});var uO=_((WNt,Fse)=>{var Irt=Qse(),Brt=il(),vrt="Expected a function";function Drt(t,e,r){var o=!0,a=!0;if(typeof t!="function")throw new TypeError(vrt);return Brt(r)&&(o="leading"in r?!!r.leading:o,a="trailing"in r?!!r.trailing:a),Irt(t,e,{leading:o,maxWait:e,trailing:a})}Fse.exports=Drt});function Srt(t){return typeof t.reportCode<"u"}var Tse,Rse,Nse,Prt,zt,Xs,Yl=Et(()=>{Tse=$e(uO()),Rse=Be("stream"),Nse=Be("string_decoder"),Prt=15,zt=class extends Error{constructor(r,o,a){super(o);this.reportExtra=a;this.reportCode=r}};Xs=class{constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}getRecommendedLength(){return 180}reportCacheHit(e){this.cacheHits.add(e.locatorHash)}reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}static progressViaCounter(e){let r=0,o,a=new Promise(p=>{o=p}),n=p=>{let h=o;a=new Promise(E=>{o=E}),r=p,h()},u=(p=0)=>{n(r+1)},A=async function*(){for(;r{r=u}),a=(0,Tse.default)(u=>{let A=r;o=new Promise(p=>{r=p}),e=u,A()},1e3/Prt),n=async function*(){for(;;)await o,yield{title:e}}();return{[Symbol.asyncIterator](){return n},hasProgress:!1,hasTitle:!0,setTitle:a}}async startProgressPromise(e,r){let o=this.reportProgress(e);try{return await r(e)}finally{o.stop()}}startProgressSync(e,r){let o=this.reportProgress(e);try{return r(e)}finally{o.stop()}}reportInfoOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedInfos.has(a)||(this.reportedInfos.add(a),this.reportInfo(e,r),o?.reportExtra?.(this))}reportWarningOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedWarnings.has(a)||(this.reportedWarnings.add(a),this.reportWarning(e,r),o?.reportExtra?.(this))}reportErrorOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedErrors.has(a)||(this.reportedErrors.add(a),this.reportError(e,r),o?.reportExtra?.(this))}reportExceptionOnce(e){Srt(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let r=new Rse.PassThrough,o=new Nse.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",e!==null?this.reportInfo(null,`${e} ${p}`):this.reportInfo(null,p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&(e!==null?this.reportInfo(null,`${e} ${n}`):this.reportInfo(null,n))}),r}}});var pE,AO=Et(()=>{Yl();xo();pE=class{constructor(e){this.fetchers=e}supports(e,r){return!!this.tryFetcher(e,r)}getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}tryFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));return o||null}getFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));if(!o)throw new zt(11,`${jr(r.project.configuration,e)} isn't supported by any available fetcher`);return o}}});var vd,fO=Et(()=>{xo();vd=class{constructor(e){this.resolvers=e.filter(r=>r)}supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.getResolverByDescriptor(e,o).bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,o){return await this.getResolverByDescriptor(e,o).getCandidates(e,r,o)}async getSatisfying(e,r,o,a){return this.getResolverByDescriptor(e,a).getSatisfying(e,r,o,a)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));return o||null}getResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));if(!o)throw new Error(`${qn(r.project.configuration,e)} isn't supported by any available resolver`);return o}tryResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));return o||null}getResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));if(!o)throw new Error(`${jr(r.project.configuration,e)} isn't supported by any available resolver`);return o}}});var hE,pO=Et(()=>{Pt();xo();hE=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a);return r.fetcher.getLocalPath(n,r)}async fetch(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a),u=await r.fetcher.fetch(n,r);return await this.ensureVirtualLink(e,u,r)}getLocatorFilename(e){return aE(e)}async ensureVirtualLink(e,r,o){let a=r.packageFs.getRealPath(),n=o.project.configuration.get("virtualFolder"),u=this.getLocatorFilename(e),A=mi.makeVirtualPath(n,u,a),p=new Uu(A,{baseFs:r.packageFs,pathUtils:K});return{...r,packageFs:p}}}});var gE,l1,Lse=Et(()=>{gE=class{static isVirtualDescriptor(e){return!!e.range.startsWith(gE.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(gE.protocol)}supportsDescriptor(e,r){return gE.isVirtualDescriptor(e)}supportsLocator(e,r){return gE.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,r){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,r,o){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,o,a){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,r){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}},l1=gE;l1.protocol="virtual:"});var dE,hO=Et(()=>{Pt();Bd();dE=class{supports(e){return!!e.reference.startsWith(Xn.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let o=this.getWorkspace(e,r).cwd;return{packageFs:new gn(o),prefixPath:Bt.dot,localPath:o}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Xn.protocol.length))}}});function c1(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Mse(t){return typeof t>"u"?3:c1(t)?0:Array.isArray(t)?1:2}function mO(t,e){return Object.hasOwn(t,e)}function brt(t){return c1(t)&&mO(t,"onConflict")&&typeof t.onConflict=="string"}function krt(t){if(typeof t>"u")return{onConflict:"default",value:t};if(!brt(t))return{onConflict:"default",value:t};if(mO(t,"value"))return t;let{onConflict:e,...r}=t;return{onConflict:e,value:r}}function Ose(t,e){let r=c1(t)&&mO(t,e)?t[e]:void 0;return krt(r)}function mE(t,e){return[t,e,Use]}function yO(t){return Array.isArray(t)?t[2]===Use:!1}function gO(t,e){if(c1(t)){let r={};for(let o of Object.keys(t))r[o]=gO(t[o],e);return mE(e,r)}return Array.isArray(t)?mE(e,t.map(r=>gO(r,e))):mE(e,t)}function dO(t,e,r,o,a){let n,u=[],A=a,p=0;for(let E=a-1;E>=o;--E){let[I,v]=t[E],{onConflict:b,value:C}=Ose(v,r),T=Mse(C);if(T!==3){if(n??=T,T!==n||b==="hardReset"){p=A;break}if(T===2)return mE(I,C);if(u.unshift([I,C]),b==="reset"){p=E;break}b==="extend"&&E===o&&(o=0),A=E}}if(typeof n>"u")return null;let h=u.map(([E])=>E).join(", ");switch(n){case 1:return mE(h,new Array().concat(...u.map(([E,I])=>I.map(v=>gO(v,E)))));case 0:{let E=Object.assign({},...u.map(([,T])=>T)),I=Object.keys(E),v={},b=t.map(([T,L])=>[T,Ose(L,r).value]),C=xrt(b,([T,L])=>{let U=Mse(L);return U!==0&&U!==3});if(C!==-1){let T=b.slice(C+1);for(let L of I)v[L]=dO(T,e,L,0,T.length)}else for(let T of I)v[T]=dO(b,e,T,p,b.length);return mE(h,v)}default:throw new Error("Assertion failed: Non-extendable value type")}}function _se(t){return dO(t.map(([e,r])=>[e,{["."]:r}]),[],".",0,t.length)}function u1(t){return yO(t)?t[1]:t}function YS(t){let e=yO(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>YS(r));if(c1(e)){let r={};for(let[o,a]of Object.entries(e))r[o]=YS(a);return r}return e}function EO(t){return yO(t)?t[0]:null}var xrt,Use,Hse=Et(()=>{xrt=(t,e,r)=>{let o=[...t];return o.reverse(),o.findIndex(e,r)};Use=Symbol()});var WS={};Kt(WS,{getDefaultGlobalFolder:()=>wO,getHomeFolder:()=>yE,isFolderInside:()=>IO});function wO(){if(process.platform==="win32"){let t=ue.toPortablePath(process.env.LOCALAPPDATA||ue.join((0,CO.homedir)(),"AppData","Local"));return K.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=ue.toPortablePath(process.env.XDG_DATA_HOME);return K.resolve(t,"yarn/berry")}return K.resolve(yE(),".yarn/berry")}function yE(){return ue.toPortablePath((0,CO.homedir)()||"/usr/local/share")}function IO(t,e){let r=K.relative(e,t);return r&&!r.startsWith("..")&&!K.isAbsolute(r)}var CO,VS=Et(()=>{Pt();CO=Be("os")});var Yse=_(EE=>{"use strict";var sLt=Be("net"),Frt=Be("tls"),BO=Be("http"),jse=Be("https"),Trt=Be("events"),oLt=Be("assert"),Rrt=Be("util");EE.httpOverHttp=Nrt;EE.httpsOverHttp=Lrt;EE.httpOverHttps=Mrt;EE.httpsOverHttps=Ort;function Nrt(t){var e=new Qf(t);return e.request=BO.request,e}function Lrt(t){var e=new Qf(t);return e.request=BO.request,e.createSocket=qse,e.defaultPort=443,e}function Mrt(t){var e=new Qf(t);return e.request=jse.request,e}function Ort(t){var e=new Qf(t);return e.request=jse.request,e.createSocket=qse,e.defaultPort=443,e}function Qf(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||BO.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(o,a,n,u){for(var A=Gse(a,n,u),p=0,h=e.requests.length;p=this.maxSockets){n.requests.push(u);return}n.createSocket(u,function(A){A.on("free",p),A.on("close",h),A.on("agentRemove",h),e.onSocket(A);function p(){n.emit("free",A,u)}function h(E){n.removeSocket(A),A.removeListener("free",p),A.removeListener("close",h),A.removeListener("agentRemove",h)}})};Qf.prototype.createSocket=function(e,r){var o=this,a={};o.sockets.push(a);var n=vO({},o.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(n.localAddress=e.localAddress),n.proxyAuth&&(n.headers=n.headers||{},n.headers["Proxy-Authorization"]="Basic "+new Buffer(n.proxyAuth).toString("base64")),sh("making CONNECT request");var u=o.request(n);u.useChunkedEncodingByDefault=!1,u.once("response",A),u.once("upgrade",p),u.once("connect",h),u.once("error",E),u.end();function A(I){I.upgrade=!0}function p(I,v,b){process.nextTick(function(){h(I,v,b)})}function h(I,v,b){if(u.removeAllListeners(),v.removeAllListeners(),I.statusCode!==200){sh("tunneling socket could not be established, statusCode=%d",I.statusCode),v.destroy();var C=new Error("tunneling socket could not be established, statusCode="+I.statusCode);C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}if(b.length>0){sh("got illegal response body from proxy"),v.destroy();var C=new Error("got illegal response body from proxy");C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}return sh("tunneling connection has established"),o.sockets[o.sockets.indexOf(a)]=v,r(v)}function E(I){u.removeAllListeners(),sh(`tunneling socket could not be established, cause=%s +`,I.message,I.stack);var v=new Error("tunneling socket could not be established, cause="+I.message);v.code="ECONNRESET",e.request.emit("error",v),o.removeSocket(a)}};Qf.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var o=this.requests.shift();o&&this.createSocket(o,function(a){o.request.onSocket(a)})}};function qse(t,e){var r=this;Qf.prototype.createSocket.call(r,t,function(o){var a=t.request.getHeader("host"),n=vO({},r.options,{socket:o,servername:a?a.replace(/:.*$/,""):t.host}),u=Frt.connect(0,n);r.sockets[r.sockets.indexOf(o)]=u,e(u)})}function Gse(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function vO(t){for(var e=1,r=arguments.length;e{Wse.exports=Yse()});var Tf=_((Ff,KS)=>{"use strict";Object.defineProperty(Ff,"__esModule",{value:!0});var Kse=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Urt(t){return Kse.includes(t)}var _rt=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","FormData","URLSearchParams","HTMLElement",...Kse];function Hrt(t){return _rt.includes(t)}var jrt=["null","undefined","string","number","bigint","boolean","symbol"];function qrt(t){return jrt.includes(t)}function CE(t){return e=>typeof e===t}var{toString:Jse}=Object.prototype,A1=t=>{let e=Jse.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&xe.domElement(t))return"HTMLElement";if(Hrt(e))return e},ei=t=>e=>A1(e)===t;function xe(t){if(t===null)return"null";switch(typeof t){case"undefined":return"undefined";case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"function":return"Function";case"bigint":return"bigint";case"symbol":return"symbol";default:}if(xe.observable(t))return"Observable";if(xe.array(t))return"Array";if(xe.buffer(t))return"Buffer";let e=A1(t);if(e)return e;if(t instanceof String||t instanceof Boolean||t instanceof Number)throw new TypeError("Please don't use object wrappers for primitive types");return"Object"}xe.undefined=CE("undefined");xe.string=CE("string");var Grt=CE("number");xe.number=t=>Grt(t)&&!xe.nan(t);xe.bigint=CE("bigint");xe.function_=CE("function");xe.null_=t=>t===null;xe.class_=t=>xe.function_(t)&&t.toString().startsWith("class ");xe.boolean=t=>t===!0||t===!1;xe.symbol=CE("symbol");xe.numericString=t=>xe.string(t)&&!xe.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));xe.array=(t,e)=>Array.isArray(t)?xe.function_(e)?t.every(e):!0:!1;xe.buffer=t=>{var e,r,o,a;return(a=(o=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||o===void 0?void 0:o.call(r,t))!==null&&a!==void 0?a:!1};xe.nullOrUndefined=t=>xe.null_(t)||xe.undefined(t);xe.object=t=>!xe.null_(t)&&(typeof t=="object"||xe.function_(t));xe.iterable=t=>{var e;return xe.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};xe.asyncIterable=t=>{var e;return xe.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};xe.generator=t=>xe.iterable(t)&&xe.function_(t.next)&&xe.function_(t.throw);xe.asyncGenerator=t=>xe.asyncIterable(t)&&xe.function_(t.next)&&xe.function_(t.throw);xe.nativePromise=t=>ei("Promise")(t);var Yrt=t=>{var e,r;return xe.function_((e=t)===null||e===void 0?void 0:e.then)&&xe.function_((r=t)===null||r===void 0?void 0:r.catch)};xe.promise=t=>xe.nativePromise(t)||Yrt(t);xe.generatorFunction=ei("GeneratorFunction");xe.asyncGeneratorFunction=t=>A1(t)==="AsyncGeneratorFunction";xe.asyncFunction=t=>A1(t)==="AsyncFunction";xe.boundFunction=t=>xe.function_(t)&&!t.hasOwnProperty("prototype");xe.regExp=ei("RegExp");xe.date=ei("Date");xe.error=ei("Error");xe.map=t=>ei("Map")(t);xe.set=t=>ei("Set")(t);xe.weakMap=t=>ei("WeakMap")(t);xe.weakSet=t=>ei("WeakSet")(t);xe.int8Array=ei("Int8Array");xe.uint8Array=ei("Uint8Array");xe.uint8ClampedArray=ei("Uint8ClampedArray");xe.int16Array=ei("Int16Array");xe.uint16Array=ei("Uint16Array");xe.int32Array=ei("Int32Array");xe.uint32Array=ei("Uint32Array");xe.float32Array=ei("Float32Array");xe.float64Array=ei("Float64Array");xe.bigInt64Array=ei("BigInt64Array");xe.bigUint64Array=ei("BigUint64Array");xe.arrayBuffer=ei("ArrayBuffer");xe.sharedArrayBuffer=ei("SharedArrayBuffer");xe.dataView=ei("DataView");xe.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;xe.urlInstance=t=>ei("URL")(t);xe.urlString=t=>{if(!xe.string(t))return!1;try{return new URL(t),!0}catch{return!1}};xe.truthy=t=>Boolean(t);xe.falsy=t=>!t;xe.nan=t=>Number.isNaN(t);xe.primitive=t=>xe.null_(t)||qrt(typeof t);xe.integer=t=>Number.isInteger(t);xe.safeInteger=t=>Number.isSafeInteger(t);xe.plainObject=t=>{if(Jse.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};xe.typedArray=t=>Urt(A1(t));var Wrt=t=>xe.safeInteger(t)&&t>=0;xe.arrayLike=t=>!xe.nullOrUndefined(t)&&!xe.function_(t)&&Wrt(t.length);xe.inRange=(t,e)=>{if(xe.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(xe.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var Vrt=1,Krt=["innerHTML","ownerDocument","style","attributes","nodeValue"];xe.domElement=t=>xe.object(t)&&t.nodeType===Vrt&&xe.string(t.nodeName)&&!xe.plainObject(t)&&Krt.every(e=>e in t);xe.observable=t=>{var e,r,o,a;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((a=(o=t)["@@observable"])===null||a===void 0?void 0:a.call(o)):!1};xe.nodeStream=t=>xe.object(t)&&xe.function_(t.pipe)&&!xe.observable(t);xe.infinite=t=>t===1/0||t===-1/0;var zse=t=>e=>xe.integer(e)&&Math.abs(e%2)===t;xe.evenInteger=zse(0);xe.oddInteger=zse(1);xe.emptyArray=t=>xe.array(t)&&t.length===0;xe.nonEmptyArray=t=>xe.array(t)&&t.length>0;xe.emptyString=t=>xe.string(t)&&t.length===0;xe.nonEmptyString=t=>xe.string(t)&&t.length>0;var Jrt=t=>xe.string(t)&&!/\S/.test(t);xe.emptyStringOrWhitespace=t=>xe.emptyString(t)||Jrt(t);xe.emptyObject=t=>xe.object(t)&&!xe.map(t)&&!xe.set(t)&&Object.keys(t).length===0;xe.nonEmptyObject=t=>xe.object(t)&&!xe.map(t)&&!xe.set(t)&&Object.keys(t).length>0;xe.emptySet=t=>xe.set(t)&&t.size===0;xe.nonEmptySet=t=>xe.set(t)&&t.size>0;xe.emptyMap=t=>xe.map(t)&&t.size===0;xe.nonEmptyMap=t=>xe.map(t)&&t.size>0;xe.propertyKey=t=>xe.any([xe.string,xe.number,xe.symbol],t);xe.formData=t=>ei("FormData")(t);xe.urlSearchParams=t=>ei("URLSearchParams")(t);var Xse=(t,e,r)=>{if(!xe.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(r.length===0)throw new TypeError("Invalid number of values");return t.call(r,e)};xe.any=(t,...e)=>(xe.array(t)?t:[t]).some(o=>Xse(Array.prototype.some,o,e));xe.all=(t,...e)=>Xse(Array.prototype.every,t,e);var Ht=(t,e,r,o={})=>{if(!t){let{multipleValues:a}=o,n=a?`received values of types ${[...new Set(r.map(u=>`\`${xe(u)}\``))].join(", ")}`:`received value of type \`${xe(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${n}.`)}};Ff.assert={undefined:t=>Ht(xe.undefined(t),"undefined",t),string:t=>Ht(xe.string(t),"string",t),number:t=>Ht(xe.number(t),"number",t),bigint:t=>Ht(xe.bigint(t),"bigint",t),function_:t=>Ht(xe.function_(t),"Function",t),null_:t=>Ht(xe.null_(t),"null",t),class_:t=>Ht(xe.class_(t),"Class",t),boolean:t=>Ht(xe.boolean(t),"boolean",t),symbol:t=>Ht(xe.symbol(t),"symbol",t),numericString:t=>Ht(xe.numericString(t),"string with a number",t),array:(t,e)=>{Ht(xe.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>Ht(xe.buffer(t),"Buffer",t),nullOrUndefined:t=>Ht(xe.nullOrUndefined(t),"null or undefined",t),object:t=>Ht(xe.object(t),"Object",t),iterable:t=>Ht(xe.iterable(t),"Iterable",t),asyncIterable:t=>Ht(xe.asyncIterable(t),"AsyncIterable",t),generator:t=>Ht(xe.generator(t),"Generator",t),asyncGenerator:t=>Ht(xe.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>Ht(xe.nativePromise(t),"native Promise",t),promise:t=>Ht(xe.promise(t),"Promise",t),generatorFunction:t=>Ht(xe.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>Ht(xe.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>Ht(xe.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>Ht(xe.boundFunction(t),"Function",t),regExp:t=>Ht(xe.regExp(t),"RegExp",t),date:t=>Ht(xe.date(t),"Date",t),error:t=>Ht(xe.error(t),"Error",t),map:t=>Ht(xe.map(t),"Map",t),set:t=>Ht(xe.set(t),"Set",t),weakMap:t=>Ht(xe.weakMap(t),"WeakMap",t),weakSet:t=>Ht(xe.weakSet(t),"WeakSet",t),int8Array:t=>Ht(xe.int8Array(t),"Int8Array",t),uint8Array:t=>Ht(xe.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>Ht(xe.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>Ht(xe.int16Array(t),"Int16Array",t),uint16Array:t=>Ht(xe.uint16Array(t),"Uint16Array",t),int32Array:t=>Ht(xe.int32Array(t),"Int32Array",t),uint32Array:t=>Ht(xe.uint32Array(t),"Uint32Array",t),float32Array:t=>Ht(xe.float32Array(t),"Float32Array",t),float64Array:t=>Ht(xe.float64Array(t),"Float64Array",t),bigInt64Array:t=>Ht(xe.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>Ht(xe.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>Ht(xe.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>Ht(xe.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>Ht(xe.dataView(t),"DataView",t),urlInstance:t=>Ht(xe.urlInstance(t),"URL",t),urlString:t=>Ht(xe.urlString(t),"string with a URL",t),truthy:t=>Ht(xe.truthy(t),"truthy",t),falsy:t=>Ht(xe.falsy(t),"falsy",t),nan:t=>Ht(xe.nan(t),"NaN",t),primitive:t=>Ht(xe.primitive(t),"primitive",t),integer:t=>Ht(xe.integer(t),"integer",t),safeInteger:t=>Ht(xe.safeInteger(t),"integer",t),plainObject:t=>Ht(xe.plainObject(t),"plain object",t),typedArray:t=>Ht(xe.typedArray(t),"TypedArray",t),arrayLike:t=>Ht(xe.arrayLike(t),"array-like",t),domElement:t=>Ht(xe.domElement(t),"HTMLElement",t),observable:t=>Ht(xe.observable(t),"Observable",t),nodeStream:t=>Ht(xe.nodeStream(t),"Node.js Stream",t),infinite:t=>Ht(xe.infinite(t),"infinite number",t),emptyArray:t=>Ht(xe.emptyArray(t),"empty array",t),nonEmptyArray:t=>Ht(xe.nonEmptyArray(t),"non-empty array",t),emptyString:t=>Ht(xe.emptyString(t),"empty string",t),nonEmptyString:t=>Ht(xe.nonEmptyString(t),"non-empty string",t),emptyStringOrWhitespace:t=>Ht(xe.emptyStringOrWhitespace(t),"empty string or whitespace",t),emptyObject:t=>Ht(xe.emptyObject(t),"empty object",t),nonEmptyObject:t=>Ht(xe.nonEmptyObject(t),"non-empty object",t),emptySet:t=>Ht(xe.emptySet(t),"empty set",t),nonEmptySet:t=>Ht(xe.nonEmptySet(t),"non-empty set",t),emptyMap:t=>Ht(xe.emptyMap(t),"empty map",t),nonEmptyMap:t=>Ht(xe.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>Ht(xe.propertyKey(t),"PropertyKey",t),formData:t=>Ht(xe.formData(t),"FormData",t),urlSearchParams:t=>Ht(xe.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>Ht(xe.evenInteger(t),"even integer",t),oddInteger:t=>Ht(xe.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>Ht(xe.directInstanceOf(t,e),"T",t),inRange:(t,e)=>Ht(xe.inRange(t,e),"in range",t),any:(t,...e)=>Ht(xe.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>Ht(xe.all(t,...e),"predicate returns truthy for all values",e,{multipleValues:!0})};Object.defineProperties(xe,{class:{value:xe.class_},function:{value:xe.function_},null:{value:xe.null_}});Object.defineProperties(Ff.assert,{class:{value:Ff.assert.class_},function:{value:Ff.assert.function_},null:{value:Ff.assert.null_}});Ff.default=xe;KS.exports=xe;KS.exports.default=xe;KS.exports.assert=Ff.assert});var Zse=_((cLt,DO)=>{"use strict";var JS=class extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}},wE=class{static fn(e){return(...r)=>new wE((o,a,n)=>{r.push(n),e(...r).then(o,a)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,o)=>{this._reject=o;let a=A=>{this._isPending=!1,r(A)},n=A=>{this._isPending=!1,o(A)},u=A=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(A)};return Object.defineProperties(u,{shouldReject:{get:()=>this._rejectOnCancel,set:A=>{this._rejectOnCancel=A}}}),e(a,n,u)})}then(e,r){return this._promise.then(e,r)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let r of this._cancelHandlers)r()}catch(r){this._reject(r)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new JS(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(wE.prototype,Promise.prototype);DO.exports=wE;DO.exports.CancelError=JS});var $se=_((SO,xO)=>{"use strict";Object.defineProperty(SO,"__esModule",{value:!0});var zrt=Be("tls"),PO=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let o=typeof r.connect=="function",a=typeof r.secureConnect=="function",n=typeof r.close=="function",u=()=>{o&&r.connect(),t instanceof zrt.TLSSocket&&a&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),n&&t.once("close",r.close)};t.writable&&!t.connecting?u():t.connecting?t.once("connect",u):t.destroyed&&n&&r.close(t._hadError)};SO.default=PO;xO.exports=PO;xO.exports.default=PO});var eoe=_((kO,QO)=>{"use strict";Object.defineProperty(kO,"__esModule",{value:!0});var Xrt=$se(),Zrt=Number(process.versions.node.split(".")[0]),bO=t=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};t.timings=e;let r=u=>{let A=u.emit.bind(u);u.emit=(p,...h)=>(p==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,u.emit=A),A(p,...h))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||Zrt>=13)&&(e.phases.total=Date.now()-e.start)});let o=u=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let A=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};u.prependOnceListener("lookup",A),Xrt.default(u,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(u.removeListener("lookup",A),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};t.socket?o(t.socket):t.prependOnceListener("socket",o);let a=()=>{var u;e.upload=Date.now(),e.phases.request=e.upload-(u=e.secureConnect,u??e.connect)};return(()=>typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))()?a():t.prependOnceListener("finish",a),t.prependOnceListener("response",u=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,u.timings=e,r(u),u.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};kO.default=bO;QO.exports=bO;QO.exports.default=bO});var aoe=_((uLt,RO)=>{"use strict";var{V4MAPPED:$rt,ADDRCONFIG:ent,ALL:ooe,promises:{Resolver:toe},lookup:tnt}=Be("dns"),{promisify:FO}=Be("util"),rnt=Be("os"),IE=Symbol("cacheableLookupCreateConnection"),TO=Symbol("cacheableLookupInstance"),roe=Symbol("expires"),nnt=typeof ooe=="number",noe=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},int=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},ioe=()=>{let t=!1,e=!1;for(let r of Object.values(rnt.networkInterfaces()))for(let o of r)if(!o.internal&&(o.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},snt=t=>Symbol.iterator in t,soe={ttl:!0},ont={all:!0},zS=class{constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:o=3600,errorTtl:a=.15,resolver:n=new toe,lookup:u=tnt}={}){if(this.maxTtl=r,this.errorTtl=a,this._cache=e,this._resolver=n,this._dnsLookup=FO(u),this._resolver instanceof toe?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=FO(this._resolver.resolve4.bind(this._resolver)),this._resolve6=FO(this._resolver.resolve6.bind(this._resolver))),this._iface=ioe(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,o<1)this._fallback=!1;else{this._fallback=!0;let A=setInterval(()=>{this._hostnamesToFallback.clear()},o*1e3);A.unref&&A.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,r,o){if(typeof r=="function"?(o=r,r={}):typeof r=="number"&&(r={family:r}),!o)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(a=>{r.all?o(null,a):o(null,a.address,a.family,a.expires,a.ttl)},o)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let o=await this.query(e);if(r.family===6){let a=o.filter(n=>n.family===6);r.hints&$rt&&(nnt&&r.hints&ooe||a.length===0)?int(o):o=a}else r.family===4&&(o=o.filter(a=>a.family===4));if(r.hints&ent){let{_iface:a}=this;o=o.filter(n=>n.family===6?a.has6:a.has4)}if(o.length===0){let a=new Error(`cacheableLookup ENOTFOUND ${e}`);throw a.code="ENOTFOUND",a.hostname=e,a}return r.all?o:o[0]}async query(e){let r=await this._cache.get(e);if(!r){let o=this._pending[e];if(o)r=await o;else{let a=this.queryAndCache(e);this._pending[e]=a,r=await a}}return r=r.map(o=>({...o})),r}async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code==="ENODATA"||E.code==="ENOTFOUND")return[];throw E}},[o,a]=await Promise.all([this._resolve4(e,soe),this._resolve6(e,soe)].map(h=>r(h))),n=0,u=0,A=0,p=Date.now();for(let h of o)h.family=4,h.expires=p+h.ttl*1e3,n=Math.max(n,h.ttl);for(let h of a)h.family=6,h.expires=p+h.ttl*1e3,u=Math.max(u,h.ttl);return o.length>0?a.length>0?A=Math.min(n,u):A=n:A=u,{entries:[...o,...a],cacheTtl:A}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,r,o){if(this.maxTtl>0&&o>0){o=Math.min(o,this.maxTtl)*1e3,r[roe]=Date.now()+o;try{await this._cache.set(e,r,o)}catch(a){this.lookupAsync=async()=>{let n=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw n.cause=a,n}}snt(this._cache)&&this._tick(o)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,ont);try{let r=await this._resolve(e);r.entries.length===0&&this._fallback&&(r=await this._lookup(e),r.entries.length!==0&&this._hostnamesToFallback.add(e));let o=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,o),delete this._pending[e],r.entries}catch(r){throw delete this._pending[e],r}}_tick(e){let r=this._nextRemovalTime;(!r||e{this._nextRemovalTime=!1;let o=1/0,a=Date.now();for(let[n,u]of this._cache){let A=u[roe];a>=A?this._cache.delete(n):A("lookup"in r||(r.lookup=this.lookup),e[IE](r,o))}uninstall(e){if(noe(e),e[IE]){if(e[TO]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[IE],delete e[IE],delete e[TO]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=ioe(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};RO.exports=zS;RO.exports.default=zS});var uoe=_((ALt,NO)=>{"use strict";var ant=typeof URL>"u"?Be("url").URL:URL,lnt="text/plain",cnt="us-ascii",loe=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),unt=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let o=r[1].split(";"),a=r[2],n=e?"":r[3],u=!1;o[o.length-1]==="base64"&&(o.pop(),u=!0);let A=(o.shift()||"").toLowerCase(),h=[...o.map(E=>{let[I,v=""]=E.split("=").map(b=>b.trim());return I==="charset"&&(v=v.toLowerCase(),v===cnt)?"":`${I}${v?`=${v}`:""}`}).filter(Boolean)];return u&&h.push("base64"),(h.length!==0||A&&A!==lnt)&&h.unshift(A),`data:${h.join(";")},${u?a.trim():a}${n?`#${n}`:""}`},coe=(t,e)=>{if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,"normalizeHttps"))throw new Error("options.normalizeHttps is renamed to options.forceHttp");if(Reflect.has(e,"normalizeHttp"))throw new Error("options.normalizeHttp is renamed to options.forceHttps");if(Reflect.has(e,"stripFragment"))throw new Error("options.stripFragment is renamed to options.stripHash");if(t=t.trim(),/^data:/i.test(t))return unt(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new ant(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash&&(a.hash=""),a.pathname&&(a.pathname=a.pathname.replace(/((?!:).|^)\/{2,}/g,(n,u)=>/^(?!\/)/g.test(u)?`${u}/`:"/")),a.pathname&&(a.pathname=decodeURI(a.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let n=a.pathname.split("/"),u=n[n.length-1];loe(u,e.removeDirectoryIndex)&&(n=n.slice(0,n.length-1),a.pathname=n.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let n of[...a.searchParams.keys()])loe(n,e.removeQueryParameters)&&a.searchParams.delete(n);return e.sortQueryParameters&&a.searchParams.sort(),e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,"")),t=a.toString(),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t};NO.exports=coe;NO.exports.default=coe});var poe=_((fLt,foe)=>{foe.exports=Aoe;function Aoe(t,e){if(t&&e)return Aoe(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(o){r[o]=t[o]}),r;function r(){for(var o=new Array(arguments.length),a=0;a{var hoe=poe();LO.exports=hoe(XS);LO.exports.strict=hoe(goe);XS.proto=XS(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return XS(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return goe(this)},configurable:!0})});function XS(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function goe(t){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=t.apply(this,arguments)},r=t.name||"Function wrapped with `once`";return e.onceError=r+" shouldn't be called more than once",e.called=!1,e}});var OO=_((hLt,moe)=>{var Ant=MO(),fnt=function(){},pnt=function(t){return t.setHeader&&typeof t.abort=="function"},hnt=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},doe=function(t,e,r){if(typeof e=="function")return doe(t,null,e);e||(e={}),r=Ant(r||fnt);var o=t._writableState,a=t._readableState,n=e.readable||e.readable!==!1&&t.readable,u=e.writable||e.writable!==!1&&t.writable,A=function(){t.writable||p()},p=function(){u=!1,n||r.call(t)},h=function(){n=!1,u||r.call(t)},E=function(C){r.call(t,C?new Error("exited with error code: "+C):null)},I=function(C){r.call(t,C)},v=function(){if(n&&!(a&&a.ended))return r.call(t,new Error("premature close"));if(u&&!(o&&o.ended))return r.call(t,new Error("premature close"))},b=function(){t.req.on("finish",p)};return pnt(t)?(t.on("complete",p),t.on("abort",v),t.req?b():t.on("request",b)):u&&!o&&(t.on("end",A),t.on("close",A)),hnt(t)&&t.on("exit",E),t.on("end",h),t.on("finish",p),e.error!==!1&&t.on("error",I),t.on("close",v),function(){t.removeListener("complete",p),t.removeListener("abort",v),t.removeListener("request",b),t.req&&t.req.removeListener("finish",p),t.removeListener("end",A),t.removeListener("close",A),t.removeListener("finish",p),t.removeListener("exit",E),t.removeListener("end",h),t.removeListener("error",I),t.removeListener("close",v)}};moe.exports=doe});var Coe=_((gLt,Eoe)=>{var gnt=MO(),dnt=OO(),UO=Be("fs"),f1=function(){},mnt=/^v?\.0/.test(process.version),ZS=function(t){return typeof t=="function"},ynt=function(t){return!mnt||!UO?!1:(t instanceof(UO.ReadStream||f1)||t instanceof(UO.WriteStream||f1))&&ZS(t.close)},Ent=function(t){return t.setHeader&&ZS(t.abort)},Cnt=function(t,e,r,o){o=gnt(o);var a=!1;t.on("close",function(){a=!0}),dnt(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,ynt(t))return t.close(f1);if(Ent(t))return t.abort();if(ZS(t.destroy))return t.destroy();o(u||new Error("stream was destroyed"))}}},yoe=function(t){t()},wnt=function(t,e){return t.pipe(e)},Int=function(){var t=Array.prototype.slice.call(arguments),e=ZS(t[t.length-1]||f1)&&t.pop()||f1;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,o=t.map(function(a,n){var u=n0;return Cnt(a,u,A,function(p){r||(r=p),p&&o.forEach(yoe),!u&&(o.forEach(yoe),e(r))})});return t.reduce(wnt)};Eoe.exports=Int});var Ioe=_((dLt,woe)=>{"use strict";var{PassThrough:Bnt}=Be("stream");woe.exports=t=>{t={...t};let{array:e}=t,{encoding:r}=t,o=r==="buffer",a=!1;e?a=!(r||o):r=r||"utf8",o&&(r=null);let n=new Bnt({objectMode:a});r&&n.setEncoding(r);let u=0,A=[];return n.on("data",p=>{A.push(p),a?u=A.length:u+=p.length}),n.getBufferedValue=()=>e?A:o?Buffer.concat(A,u):A.join(""),n.getBufferedLength=()=>u,n}});var Boe=_((mLt,BE)=>{"use strict";var vnt=Coe(),Dnt=Ioe(),$S=class extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}};async function ex(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e={maxBuffer:1/0,...e};let{maxBuffer:r}=e,o;return await new Promise((a,n)=>{let u=A=>{A&&(A.bufferedData=o.getBufferedValue()),n(A)};o=vnt(t,Dnt(e),A=>{if(A){u(A);return}a()}),o.on("data",()=>{o.getBufferedLength()>r&&u(new $S)})}),o.getBufferedValue()}BE.exports=ex;BE.exports.default=ex;BE.exports.buffer=(t,e)=>ex(t,{...e,encoding:"buffer"});BE.exports.array=(t,e)=>ex(t,{...e,array:!0});BE.exports.MaxBufferError=$S});var Doe=_((ELt,voe)=>{"use strict";var Pnt=new Set([200,203,204,206,300,301,404,405,410,414,501]),Snt=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),xnt=new Set([500,502,503,504]),bnt={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},knt={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function Dd(t){let e=parseInt(t,10);return isFinite(e)?e:0}function Qnt(t){return t?xnt.has(t.status):!0}function _O(t){let e={};if(!t)return e;let r=t.trim().split(/\s*,\s*/);for(let o of r){let[a,n]=o.split(/\s*=\s*/,2);e[a]=n===void 0?!0:n.replace(/^"|"$/g,"")}return e}function Fnt(t){let e=[];for(let r in t){let o=t[r];e.push(o===!0?r:r+"="+o)}if(!!e.length)return e.join(", ")}voe.exports=class{constructor(e,r,{shared:o,cacheHeuristic:a,immutableMinTimeToLive:n,ignoreCargoCult:u,_fromObject:A}={}){if(A){this._fromObject(A);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=o!==!1,this._cacheHeuristic=a!==void 0?a:.1,this._immutableMinTtl=n!==void 0?n:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=_O(r.headers["cache-control"]),this._method="method"in e?e.method:"GET",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=r.headers.vary?e.headers:null,this._reqcc=_O(e.headers["cache-control"]),u&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":Fnt(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),r.headers["cache-control"]==null&&/no-cache/.test(r.headers.pragma)&&(this._rescc["no-cache"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc["no-store"]&&(this._method==="GET"||this._method==="HEAD"||this._method==="POST"&&this._hasExplicitExpiration())&&Snt.has(this._status)&&!this._rescc["no-store"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc["max-age"]||this._isShared&&this._rescc["s-maxage"]||this._rescc.public||Pnt.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]||this._rescc["max-age"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request headers missing")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let r=_O(e.headers["cache-control"]);return r["no-cache"]||/no-cache/.test(e.headers.pragma)||r["max-age"]&&this.age()>r["max-age"]||r["min-fresh"]&&this.timeToLive()<1e3*r["min-fresh"]||this.stale()&&!(r["max-stale"]&&!this._rescc["must-revalidate"]&&(r["max-stale"]===!0||r["max-stale"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||r&&e.method==="HEAD")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary==="*")return!1;let r=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(let o of r)if(e.headers[o]!==this._reqHeaders[o])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let o in e)bnt[o]||(r[o]=e[o]);if(e.connection){let o=e.connection.trim().split(/\s*,\s*/);for(let a of o)delete r[a]}if(r.warning){let o=r.warning.split(/,/).filter(a=>!/^\s*1[0-9][0-9]/.test(a));o.length?r.warning=o.join(",").trim():delete r.warning}return r}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),r=this.age();return r>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:"")+'113 - "rfc7234 5.5.4"'),e.age=`${Math.round(r)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){return Dd(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc["no-cache"]||this._isShared&&this._resHeaders["set-cookie"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary==="*")return 0;if(this._isShared){if(this._rescc["proxy-revalidate"])return 0;if(this._rescc["s-maxage"])return Dd(this._rescc["s-maxage"])}if(this._rescc["max-age"])return Dd(this._rescc["max-age"]);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this.date();if(this._resHeaders.expires){let o=Date.parse(this._resHeaders.expires);return Number.isNaN(o)||oo)return Math.max(e,(r-o)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),r=e+Dd(this._rescc["stale-if-error"]),o=e+Dd(this._rescc["stale-while-revalidate"]);return Math.max(0,e,r,o)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Dd(this._rescc["stale-if-error"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Dd(this._rescc["stale-while-revalidate"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e||e.v!==1)throw Error("Invalid serialization");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let r=this._copyWithoutHopByHopHeaders(e.headers);if(delete r["if-range"],!this._requestMatches(e,!0)||!this.storable())return delete r["if-none-match"],delete r["if-modified-since"],r;if(this._resHeaders.etag&&(r["if-none-match"]=r["if-none-match"]?`${r["if-none-match"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),r["accept-ranges"]||r["if-match"]||r["if-unmodified-since"]||this._method&&this._method!="GET"){if(delete r["if-modified-since"],r["if-none-match"]){let a=r["if-none-match"].split(/,/).filter(n=>!/^\s*W\//.test(n));a.length?r["if-none-match"]=a.join(",").trim():delete r["if-none-match"]}}else this._resHeaders["last-modified"]&&!r["if-modified-since"]&&(r["if-modified-since"]=this._resHeaders["last-modified"]);return r}revalidatedPolicy(e,r){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Qnt(r))return{modified:!1,matches:!1,policy:this};if(!r||!r.headers)throw Error("Response headers missing");let o=!1;if(r.status!==void 0&&r.status!=304?o=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?o=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?o=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?o=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(o=!0),!o)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let a={};for(let u in this._resHeaders)a[u]=u in r.headers&&!knt[u]?r.headers[u]:this._resHeaders[u];let n=Object.assign({},r,{status:this._status,method:this._method,headers:a});return{policy:new this.constructor(e,n,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var tx=_((CLt,Poe)=>{"use strict";Poe.exports=t=>{let e={};for(let[r,o]of Object.entries(t))e[r.toLowerCase()]=o;return e}});var xoe=_((wLt,Soe)=>{"use strict";var Tnt=Be("stream").Readable,Rnt=tx(),HO=class extends Tnt{constructor(e,r,o,a){if(typeof e!="number")throw new TypeError("Argument `statusCode` should be a number");if(typeof r!="object")throw new TypeError("Argument `headers` should be an object");if(!(o instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof a!="string")throw new TypeError("Argument `url` should be a string");super(),this.statusCode=e,this.headers=Rnt(r),this.body=o,this.url=a}_read(){this.push(this.body),this.push(null)}};Soe.exports=HO});var koe=_((ILt,boe)=>{"use strict";var Nnt=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];boe.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(Nnt));for(let o of r)o in e||(e[o]=typeof t[o]=="function"?t[o].bind(t):t[o])}});var Foe=_((BLt,Qoe)=>{"use strict";var Lnt=Be("stream").PassThrough,Mnt=koe(),Ont=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new Lnt;return Mnt(t,e),t.pipe(e)};Qoe.exports=Ont});var Toe=_(jO=>{jO.stringify=function t(e){if(typeof e>"u")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(":base64:"+e.toString("base64"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e=="object"){var r="",o=Array.isArray(e);r=o?"[":"{";var a=!0;for(var n in e){var u=typeof e[n]=="function"||!o&&typeof e[n]>"u";Object.hasOwnProperty.call(e,n)&&!u&&(a||(r+=","),a=!1,o?e[n]==null?r+="null":r+=t(e[n]):e[n]!==void 0&&(r+=t(n)+":"+t(e[n])))}return r+=o?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e>"u"?"null":JSON.stringify(e)};jO.parse=function(t){return JSON.parse(t,function(e,r){return typeof r=="string"?/^:base64:/.test(r)?Buffer.from(r.substring(8),"base64"):/^:/.test(r)?r.substring(1):r:r})}});var Loe=_((DLt,Noe)=>{"use strict";var Unt=Be("events"),Roe=Toe(),_nt=t=>{let e={redis:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql"};if(t.adapter||t.uri){let r=t.adapter||/^[^:]*/.exec(t.uri)[0];return new(Be(e[r]))(t)}return new Map},qO=class extends Unt{constructor(e,r){if(super(),this.opts=Object.assign({namespace:"keyv",serialize:Roe.stringify,deserialize:Roe.parse},typeof e=="string"?{uri:e}:e,r),!this.opts.store){let o=Object.assign({},this.opts);this.opts.store=_nt(o)}typeof this.opts.store.on=="function"&&this.opts.store.on("error",o=>this.emit("error",o)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,r){e=this._getKeyPrefix(e);let{store:o}=this.opts;return Promise.resolve().then(()=>o.get(e)).then(a=>typeof a=="string"?this.opts.deserialize(a):a).then(a=>{if(a!==void 0){if(typeof a.expires=="number"&&Date.now()>a.expires){this.delete(e);return}return r&&r.raw?a:a.value}})}set(e,r,o){e=this._getKeyPrefix(e),typeof o>"u"&&(o=this.opts.ttl),o===0&&(o=void 0);let{store:a}=this.opts;return Promise.resolve().then(()=>{let n=typeof o=="number"?Date.now()+o:null;return r={value:r,expires:n},this.opts.serialize(r)}).then(n=>a.set(e,n,o)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:r}=this.opts;return Promise.resolve().then(()=>r.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};Noe.exports=qO});var Uoe=_((SLt,Ooe)=>{"use strict";var Hnt=Be("events"),rx=Be("url"),jnt=uoe(),qnt=Boe(),GO=Doe(),Moe=xoe(),Gnt=tx(),Ynt=Foe(),Wnt=Loe(),jc=class{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new Wnt({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,o)=>{let a;if(typeof r=="string")a=YO(rx.parse(r)),r={};else if(r instanceof rx.URL)a=YO(rx.parse(r.toString())),r={};else{let[I,...v]=(r.path||"").split("?"),b=v.length>0?`?${v.join("?")}`:"";a=YO({...r,pathname:I,search:b})}r={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...r,...Vnt(a)},r.headers=Gnt(r.headers);let n=new Hnt,u=jnt(rx.format(a),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),A=`${r.method}:${u}`,p=!1,h=!1,E=I=>{h=!0;let v=!1,b,C=new Promise(L=>{b=()=>{v||(v=!0,L())}}),T=L=>{if(p&&!I.forceRefresh){L.status=L.statusCode;let J=GO.fromObject(p.cachePolicy).revalidatedPolicy(I,L);if(!J.modified){let te=J.policy.responseHeaders();L=new Moe(p.statusCode,te,p.body,p.url),L.cachePolicy=J.policy,L.fromCache=!0}}L.fromCache||(L.cachePolicy=new GO(I,L,I),L.fromCache=!1);let U;I.cache&&L.cachePolicy.storable()?(U=Ynt(L),(async()=>{try{let J=qnt.buffer(L);if(await Promise.race([C,new Promise(Ae=>L.once("end",Ae))]),v)return;let te=await J,le={cachePolicy:L.cachePolicy.toObject(),url:L.url,statusCode:L.fromCache?p.statusCode:L.statusCode,body:te},pe=I.strictTtl?L.cachePolicy.timeToLive():void 0;I.maxTtl&&(pe=pe?Math.min(pe,I.maxTtl):I.maxTtl),await this.cache.set(A,le,pe)}catch(J){n.emit("error",new jc.CacheError(J))}})()):I.cache&&p&&(async()=>{try{await this.cache.delete(A)}catch(J){n.emit("error",new jc.CacheError(J))}})(),n.emit("response",U||L),typeof o=="function"&&o(U||L)};try{let L=e(I,T);L.once("error",b),L.once("abort",b),n.emit("request",L)}catch(L){n.emit("error",new jc.RequestError(L))}};return(async()=>{let I=async b=>{await Promise.resolve();let C=b.cache?await this.cache.get(A):void 0;if(typeof C>"u")return E(b);let T=GO.fromObject(C.cachePolicy);if(T.satisfiesWithoutRevalidation(b)&&!b.forceRefresh){let L=T.responseHeaders(),U=new Moe(C.statusCode,L,C.body,C.url);U.cachePolicy=T,U.fromCache=!0,n.emit("response",U),typeof o=="function"&&o(U)}else p=C,b.headers=T.revalidationHeaders(b),E(b)},v=b=>n.emit("error",new jc.CacheError(b));this.cache.once("error",v),n.on("response",()=>this.cache.removeListener("error",v));try{await I(r)}catch(b){r.automaticFailover&&!h&&E(r),n.emit("error",new jc.CacheError(b))}})(),n}}};function Vnt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function YO(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}jc.RequestError=class extends Error{constructor(t){super(t.message),this.name="RequestError",Object.assign(this,t)}};jc.CacheError=class extends Error{constructor(t){super(t.message),this.name="CacheError",Object.assign(this,t)}};Ooe.exports=jc});var Hoe=_((kLt,_oe)=>{"use strict";var Knt=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];_oe.exports=(t,e)=>{if(e._readableState.autoDestroy)throw new Error("The second stream must have the `autoDestroy` option set to `false`");let r=new Set(Object.keys(t).concat(Knt)),o={};for(let a of r)a in e||(o[a]={get(){let n=t[a];return typeof n=="function"?n.bind(t):n},set(n){t[a]=n},enumerable:!0,configurable:!1});return Object.defineProperties(e,o),t.once("aborted",()=>{e.destroy(),e.emit("aborted")}),t.once("close",()=>{t.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var qoe=_((QLt,joe)=>{"use strict";var{Transform:Jnt,PassThrough:znt}=Be("stream"),WO=Be("zlib"),Xnt=Hoe();joe.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof WO.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let o=!0,a=new Jnt({transform(A,p,h){o=!1,h(null,A)},flush(A){A()}}),n=new znt({autoDestroy:!1,destroy(A,p){t.destroy(),p(A)}}),u=r?WO.createBrotliDecompress():WO.createUnzip();return u.once("error",A=>{if(o&&!t.readable){n.end();return}n.destroy(A)}),Xnt(t,n),t.pipe(a).pipe(u).pipe(n),n}});var KO=_((FLt,Goe)=>{"use strict";var VO=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction=="function")for(let[o,a]of this.oldCache.entries())this.onEviction(o,a);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let r=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,r),r}}set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCache.delete(e)||r}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[r]=e;this.cache.has(r)||(yield e)}}get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||e++;return Math.min(this._size+e,this.maxSize)}};Goe.exports=VO});var zO=_((TLt,Koe)=>{"use strict";var Znt=Be("events"),$nt=Be("tls"),eit=Be("http2"),tit=KO(),ea=Symbol("currentStreamsCount"),Yoe=Symbol("request"),Wl=Symbol("cachedOriginSet"),vE=Symbol("gracefullyClosing"),rit=["maxDeflateDynamicTableSize","maxSessionMemory","maxHeaderListPairs","maxOutstandingPings","maxReservedRemoteStreams","maxSendHeaderBlockLength","paddingStrategy","localAddress","path","rejectUnauthorized","minDHSize","ca","cert","clientCertEngine","ciphers","key","pfx","servername","minVersion","maxVersion","secureProtocol","crl","honorCipherOrder","ecdhCurve","dhparam","secureOptions","sessionIdContext"],nit=(t,e,r)=>{let o=0,a=t.length;for(;o>>1;r(t[n],e)?o=n+1:a=n}return o},iit=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,JO=(t,e)=>{for(let r of t)r[Wl].lengthe[Wl].includes(o))&&r[ea]+e[ea]<=e.remoteSettings.maxConcurrentStreams&&Voe(r)},sit=(t,e)=>{for(let r of t)e[Wl].lengthr[Wl].includes(o))&&e[ea]+r[ea]<=r.remoteSettings.maxConcurrentStreams&&Voe(e)},Woe=({agent:t,isFree:e})=>{let r={};for(let o in t.sessions){let n=t.sessions[o].filter(u=>{let A=u[tA.kCurrentStreamsCount]{t[vE]=!0,t[ea]===0&&t.close()},tA=class extends Znt{constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:o=10,maxCachedTlsSessions:a=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=o,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new tit({maxSize:a})}static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&&e.hostname!==r&&(e.hostname=r),e.origin}normalizeOptions(e){let r="";if(e)for(let o of rit)e[o]&&(r+=`:${e[o]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let o=this.queue[e][r];this._sessionsCount{Array.isArray(o)?(o=[...o],a()):o=[{resolve:a,reject:n}];let u=this.normalizeOptions(r),A=tA.normalizeOrigin(e,r&&r.servername);if(A===void 0){for(let{reject:E}of o)E(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(u in this.sessions){let E=this.sessions[u],I=-1,v=-1,b;for(let C of E){let T=C.remoteSettings.maxConcurrentStreams;if(T=T||C[vE]||C.destroyed)continue;b||(I=T),L>v&&(b=C,v=L)}}if(b){if(o.length!==1){for(let{reject:C}of o){let T=new Error(`Expected the length of listeners to be 1, got ${o.length}. +Please report this to https://github.com/szmarczak/http2-wrapper/`);C(T)}return}o[0].resolve(b);return}}if(u in this.queue){if(A in this.queue[u]){this.queue[u][A].listeners.push(...o),this._tryToCreateNewSession(u,A);return}}else this.queue[u]={};let p=()=>{u in this.queue&&this.queue[u][A]===h&&(delete this.queue[u][A],Object.keys(this.queue[u]).length===0&&delete this.queue[u])},h=()=>{let E=`${A}:${u}`,I=!1;try{let v=eit.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(E),...r});v[ea]=0,v[vE]=!1;let b=()=>v[ea]{this.tlsSessionCache.set(E,L)}),v.once("error",L=>{for(let{reject:U}of o)U(L);this.tlsSessionCache.delete(E)}),v.setTimeout(this.timeout,()=>{v.destroy()}),v.once("close",()=>{if(I){C&&this._freeSessionsCount--,this._sessionsCount--;let L=this.sessions[u];L.splice(L.indexOf(v),1),L.length===0&&delete this.sessions[u]}else{let L=new Error("Session closed without receiving a SETTINGS frame");L.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:U}of o)U(L);p()}this._tryToCreateNewSession(u,A)});let T=()=>{if(!(!(u in this.queue)||!b())){for(let L of v[Wl])if(L in this.queue[u]){let{listeners:U}=this.queue[u][L];for(;U.length!==0&&b();)U.shift().resolve(v);let J=this.queue[u];if(J[L].listeners.length===0&&(delete J[L],Object.keys(J).length===0)){delete this.queue[u];break}if(!b())break}}};v.on("origin",()=>{v[Wl]=v.originSet,b()&&(T(),JO(this.sessions[u],v))}),v.once("remoteSettings",()=>{if(v.ref(),v.unref(),this._sessionsCount++,h.destroyed){let L=new Error("Agent has been destroyed");for(let U of o)U.reject(L);v.destroy();return}v[Wl]=v.originSet;{let L=this.sessions;if(u in L){let U=L[u];U.splice(nit(U,v,iit),0,v)}else L[u]=[v]}this._freeSessionsCount+=1,I=!0,this.emit("session",v),T(),p(),v[ea]===0&&this._freeSessionsCount>this.maxFreeSessions&&v.close(),o.length!==0&&(this.getSession(A,r,o),o.length=0),v.on("remoteSettings",()=>{T(),JO(this.sessions[u],v)})}),v[Yoe]=v.request,v.request=(L,U)=>{if(v[vE])throw new Error("The session is gracefully closing. No new streams are allowed.");let J=v[Yoe](L,U);return v.ref(),++v[ea],v[ea]===v.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,J.once("close",()=>{if(C=b(),--v[ea],!v.destroyed&&!v.closed&&(sit(this.sessions[u],v),b()&&!v.closed)){C||(this._freeSessionsCount++,C=!0);let te=v[ea]===0;te&&v.unref(),te&&(this._freeSessionsCount>this.maxFreeSessions||v[vE])?v.close():(JO(this.sessions[u],v),T())}}),J}}catch(v){for(let b of o)b.reject(v);p()}};h.listeners=o,h.completed=!1,h.destroyed=!1,this.queue[u][A]=h,this._tryToCreateNewSession(u,A)})}request(e,r,o,a){return new Promise((n,u)=>{this.getSession(e,r,[{reject:u,resolve:A=>{try{n(A.request(o,a))}catch(p){u(p)}}}])})}createConnection(e,r){return tA.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let o=e.port||443,a=e.hostname||e.host;return typeof r.servername>"u"&&(r.servername=a),$nt.connect(o,a,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[ea]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let o of r)o.destroy(e);for(let r of Object.values(this.queue))for(let o of Object.values(r))o.destroyed=!0;this.queue={}}get freeSessions(){return Woe({agent:this,isFree:!0})}get busySessions(){return Woe({agent:this,isFree:!1})}};tA.kCurrentStreamsCount=ea;tA.kGracefullyClosing=vE;Koe.exports={Agent:tA,globalAgent:new tA}});var ZO=_((RLt,Joe)=>{"use strict";var{Readable:oit}=Be("stream"),XO=class extends oit{constructor(e,r){super({highWaterMark:r,autoDestroy:!1}),this.statusCode=null,this.statusMessage="",this.httpVersion="2.0",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,r){return this.req.setTimeout(e,r),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),this.resume())}_read(){this.req&&this.req._request.resume()}};Joe.exports=XO});var $O=_((NLt,zoe)=>{"use strict";zoe.exports=t=>{let e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return typeof t.port=="string"&&t.port.length!==0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var Zoe=_((LLt,Xoe)=>{"use strict";Xoe.exports=(t,e,r)=>{for(let o of r)t.on(o,(...a)=>e.emit(o,...a))}});var eae=_((MLt,$oe)=>{"use strict";$oe.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var rae=_((ULt,tae)=>{"use strict";var DE=(t,e,r)=>{tae.exports[e]=class extends t{constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.name} [${e}]`,this.code=e}}};DE(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],o=Array.isArray(r);return o&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${o?"one of":"of"} type ${r}. Received ${typeof t[2]}`});DE(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);DE(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);DE(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);DE(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);DE(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var i4=_((_Lt,cae)=>{"use strict";var ait=Be("http2"),{Writable:lit}=Be("stream"),{Agent:nae,globalAgent:cit}=zO(),uit=ZO(),Ait=$O(),fit=Zoe(),pit=eae(),{ERR_INVALID_ARG_TYPE:e4,ERR_INVALID_PROTOCOL:hit,ERR_HTTP_HEADERS_SENT:iae,ERR_INVALID_HTTP_TOKEN:git,ERR_HTTP_INVALID_HEADER_VALUE:dit,ERR_INVALID_CHAR:mit}=rae(),{HTTP2_HEADER_STATUS:sae,HTTP2_HEADER_METHOD:oae,HTTP2_HEADER_PATH:aae,HTTP2_METHOD_CONNECT:yit}=ait.constants,Qo=Symbol("headers"),t4=Symbol("origin"),r4=Symbol("session"),lae=Symbol("options"),nx=Symbol("flushedHeaders"),p1=Symbol("jobs"),Eit=/^[\^`\-\w!#$%&*+.|~]+$/,Cit=/[^\t\u0020-\u007E\u0080-\u00FF]/,n4=class extends lit{constructor(e,r,o){super({autoDestroy:!1});let a=typeof e=="string"||e instanceof URL;if(a&&(e=Ait(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(o=r,r=a?e:{...e}):r={...e,...r},r.h2session)this[r4]=r.h2session;else if(r.agent===!1)this.agent=new nae({maxFreeSessions:0});else if(typeof r.agent>"u"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new nae({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=cit;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new e4("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new hit(r.protocol,"https:");let n=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,u=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:A}=r;if(r.timeout=void 0,this[Qo]=Object.create(null),this[p1]=[],this.socket=null,this.connection=null,this.method=r.method||"GET",this.path=r.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,r.headers)for(let[p,h]of Object.entries(r.headers))this.setHeader(p,h);r.auth&&!("authorization"in this[Qo])&&(this[Qo].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[lae]=r,n===443?(this[t4]=`https://${u}`,":authority"in this[Qo]||(this[Qo][":authority"]=u)):(this[t4]=`https://${u}:${n}`,":authority"in this[Qo]||(this[Qo][":authority"]=`${u}:${n}`)),A&&this.setTimeout(A),o&&this.once("response",o),this[nx]=!1}get method(){return this[Qo][oae]}set method(e){e&&(this[Qo][oae]=e.toUpperCase())}get path(){return this[Qo][aae]}set path(e){e&&(this[Qo][aae]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,o){if(this._mustNotHaveABody){o(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let a=()=>this._request.write(e,r,o);this._request?a():this[p1].push(a)}_final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?r():this[p1].push(r)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit("abort")),this.aborted=!0,this.destroy())}_destroy(e,r){this.res&&this.res._dump(),this._request&&this._request.destroy(),r(e)}async flushHeaders(){if(this[nx]||this.destroyed)return;this[nx]=!0;let e=this.method===yit,r=o=>{if(this._request=o,this.destroyed){o.destroy();return}e||fit(o,this,["timeout","continue","close","error"]);let a=u=>(...A)=>{!this.writable&&!this.destroyed?u(...A):this.once("finish",()=>{u(...A)})};o.once("response",a((u,A,p)=>{let h=new uit(this.socket,o.readableHighWaterMark);this.res=h,h.req=this,h.statusCode=u[sae],h.headers=u,h.rawHeaders=p,h.once("end",()=>{this.aborted?(h.aborted=!0,h.emit("aborted")):(h.complete=!0,h.socket=null,h.connection=null)}),e?(h.upgrade=!0,this.emit("connect",h,o,Buffer.alloc(0))?this.emit("close"):o.destroy()):(o.on("data",E=>{!h._dumped&&!h.push(E)&&o.pause()}),o.once("end",()=>{h.push(null)}),this.emit("response",h)||h._dump())})),o.once("headers",a(u=>this.emit("information",{statusCode:u[sae]}))),o.once("trailers",a((u,A,p)=>{let{res:h}=this;h.trailers=u,h.rawTrailers=p}));let{socket:n}=o.session;this.socket=n,this.connection=n;for(let u of this[p1])u();this.emit("socket",this.socket)};if(this[r4])try{r(this[r4].request(this[Qo]))}catch(o){this.emit("error",o)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[t4],this[lae],this[Qo]))}catch(o){this.emit("error",o)}}}getHeader(e){if(typeof e!="string")throw new e4("name","string",e);return this[Qo][e.toLowerCase()]}get headersSent(){return this[nx]}removeHeader(e){if(typeof e!="string")throw new e4("name","string",e);if(this.headersSent)throw new iae("remove");delete this[Qo][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new iae("set");if(typeof e!="string"||!Eit.test(e)&&!pit(e))throw new git("Header name",e);if(typeof r>"u")throw new dit(r,e);if(Cit.test(r))throw new mit("header content",e);this[Qo][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let o=()=>this._request.setTimeout(e,r);return this._request?o():this[p1].push(o),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};cae.exports=n4});var Aae=_((HLt,uae)=>{"use strict";var wit=Be("tls");uae.exports=(t={})=>new Promise((e,r)=>{let o=wit.connect(t,()=>{t.resolveSocket?(o.off("error",r),e({alpnProtocol:o.alpnProtocol,socket:o})):(o.destroy(),e({alpnProtocol:o.alpnProtocol}))});o.on("error",r)})});var pae=_((jLt,fae)=>{"use strict";var Iit=Be("net");fae.exports=t=>{let e=t.host,r=t.headers&&t.headers.host;return r&&(r.startsWith("[")?r.indexOf("]")===-1?e=r:e=r.slice(1,-1):e=r.split(":",1)[0]),Iit.isIP(e)?"":e}});var dae=_((qLt,o4)=>{"use strict";var hae=Be("http"),s4=Be("https"),Bit=Aae(),vit=KO(),Dit=i4(),Pit=pae(),Sit=$O(),ix=new vit({maxSize:100}),h1=new Map,gae=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let o=()=>{t.emit("free",e,r)};e.on("free",o);let a=()=>{t.removeSocket(e,r)};e.on("close",a);let n=()=>{t.removeSocket(e,r),e.off("close",a),e.off("free",o),e.off("agentRemove",n)};e.on("agentRemove",n),t.emit("free",e,r)},xit=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!ix.has(e)){if(h1.has(e))return(await h1.get(e)).alpnProtocol;let{path:r,agent:o}=t;t.path=t.socketPath;let a=Bit(t);h1.set(e,a);try{let{socket:n,alpnProtocol:u}=await a;if(ix.set(e,u),t.path=r,u==="h2")n.destroy();else{let{globalAgent:A}=s4,p=s4.Agent.prototype.createConnection;o?o.createConnection===p?gae(o,n,t):n.destroy():A.createConnection===p?gae(A,n,t):n.destroy()}return h1.delete(e),u}catch(n){throw h1.delete(e),n}}return ix.get(e)};o4.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=Sit(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e={ALPNProtocols:["h2","http/1.1"],...t,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");e.protocol=e.protocol||"https:";let o=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||Pit(e),e.port=e.port||(o?443:80),e._defaultAgent=o?s4.globalAgent:hae.globalAgent;let a=e.agent;if(a){if(a.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=a[o?"https":"http"]}return o&&await xit(e)==="h2"?(a&&(e.agent=a.http2),new Dit(e,r)):hae.request(e,r)};o4.exports.protocolCache=ix});var yae=_((GLt,mae)=>{"use strict";var bit=Be("http2"),kit=zO(),a4=i4(),Qit=ZO(),Fit=dae(),Tit=(t,e,r)=>new a4(t,e,r),Rit=(t,e,r)=>{let o=new a4(t,e,r);return o.end(),o};mae.exports={...bit,ClientRequest:a4,IncomingMessage:Qit,...kit,request:Tit,get:Rit,auto:Fit}});var c4=_(l4=>{"use strict";Object.defineProperty(l4,"__esModule",{value:!0});var Eae=Tf();l4.default=t=>Eae.default.nodeStream(t)&&Eae.default.function_(t.getBoundary)});var Bae=_(u4=>{"use strict";Object.defineProperty(u4,"__esModule",{value:!0});var wae=Be("fs"),Iae=Be("util"),Cae=Tf(),Nit=c4(),Lit=Iae.promisify(wae.stat);u4.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(Cae.default.string(t))return Buffer.byteLength(t);if(Cae.default.buffer(t))return t.length;if(Nit.default(t))return Iae.promisify(t.getLength.bind(t))();if(t instanceof wae.ReadStream){let{size:r}=await Lit(t.path);return r===0?void 0:r}}});var f4=_(A4=>{"use strict";Object.defineProperty(A4,"__esModule",{value:!0});function Mit(t,e,r){let o={};for(let a of r)o[a]=(...n)=>{e.emit(a,...n)},t.on(a,o[a]);return()=>{for(let a of r)t.off(a,o[a])}}A4.default=Mit});var vae=_(p4=>{"use strict";Object.defineProperty(p4,"__esModule",{value:!0});p4.default=()=>{let t=[];return{once(e,r,o){e.once(r,o),t.push({origin:e,event:r,fn:o})},unhandleAll(){for(let e of t){let{origin:r,event:o,fn:a}=e;r.removeListener(o,a)}t.length=0}}}});var Pae=_(g1=>{"use strict";Object.defineProperty(g1,"__esModule",{value:!0});g1.TimeoutError=void 0;var Oit=Be("net"),Uit=vae(),Dae=Symbol("reentry"),_it=()=>{},sx=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};g1.TimeoutError=sx;g1.default=(t,e,r)=>{if(Dae in t)return _it;t[Dae]=!0;let o=[],{once:a,unhandleAll:n}=Uit.default(),u=(I,v,b)=>{var C;let T=setTimeout(v,I,I,b);(C=T.unref)===null||C===void 0||C.call(T);let L=()=>{clearTimeout(T)};return o.push(L),L},{host:A,hostname:p}=r,h=(I,v)=>{t.destroy(new sx(I,v))},E=()=>{for(let I of o)I();n()};if(t.once("error",I=>{if(E(),t.listenerCount("error")===0)throw I}),t.once("close",E),a(t,"response",I=>{a(I,"end",E)}),typeof e.request<"u"&&u(e.request,h,"request"),typeof e.socket<"u"){let I=()=>{h(e.socket,"socket")};t.setTimeout(e.socket,I),o.push(()=>{t.removeListener("timeout",I)})}return a(t,"socket",I=>{var v;let{socketPath:b}=t;if(I.connecting){let C=Boolean(b??Oit.isIP((v=p??A)!==null&&v!==void 0?v:"")!==0);if(typeof e.lookup<"u"&&!C&&typeof I.address().address>"u"){let T=u(e.lookup,h,"lookup");a(I,"lookup",T)}if(typeof e.connect<"u"){let T=()=>u(e.connect,h,"connect");C?a(I,"connect",T()):a(I,"lookup",L=>{L===null&&a(I,"connect",T())})}typeof e.secureConnect<"u"&&r.protocol==="https:"&&a(I,"connect",()=>{let T=u(e.secureConnect,h,"secureConnect");a(I,"secureConnect",T)})}if(typeof e.send<"u"){let C=()=>u(e.send,h,"send");I.connecting?a(I,"connect",()=>{a(t,"upload-complete",C())}):a(t,"upload-complete",C())}}),typeof e.response<"u"&&a(t,"upload-complete",()=>{let I=u(e.response,h,"response");a(t,"response",I)}),E}});var xae=_(h4=>{"use strict";Object.defineProperty(h4,"__esModule",{value:!0});var Sae=Tf();h4.default=t=>{t=t;let e={protocol:t.protocol,hostname:Sae.default.string(t.hostname)&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return Sae.default.string(t.port)&&t.port.length>0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var bae=_(g4=>{"use strict";Object.defineProperty(g4,"__esModule",{value:!0});var Hit=Be("url"),jit=["protocol","host","hostname","port","pathname","search"];g4.default=(t,e)=>{var r,o;if(e.path){if(e.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(e.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(e.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(e.search&&e.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!t){if(!e.protocol)throw new TypeError("No URL protocol specified");t=`${e.protocol}//${(o=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&o!==void 0?o:""}`}let a=new Hit.URL(t);if(e.path){let n=e.path.indexOf("?");n===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,n),e.search=e.path.slice(n+1)),delete e.path}for(let n of jit)e[n]&&(a[n]=e[n].toString());return a}});var kae=_(m4=>{"use strict";Object.defineProperty(m4,"__esModule",{value:!0});var d4=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,r){typeof e=="object"?this.weakMap.set(e,r):this.map.set(e,r)}get(e){return typeof e=="object"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e=="object"?this.weakMap.has(e):this.map.has(e)}};m4.default=d4});var E4=_(y4=>{"use strict";Object.defineProperty(y4,"__esModule",{value:!0});var qit=async t=>{let e=[],r=0;for await(let o of t)e.push(o),r+=Buffer.byteLength(o);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};y4.default=qit});var Fae=_(Pd=>{"use strict";Object.defineProperty(Pd,"__esModule",{value:!0});Pd.dnsLookupIpVersionToFamily=Pd.isDnsLookupIpVersion=void 0;var Qae={auto:0,ipv4:4,ipv6:6};Pd.isDnsLookupIpVersion=t=>t in Qae;Pd.dnsLookupIpVersionToFamily=t=>{if(Pd.isDnsLookupIpVersion(t))return Qae[t];throw new Error("Invalid DNS lookup IP version")}});var C4=_(ox=>{"use strict";Object.defineProperty(ox,"__esModule",{value:!0});ox.isResponseOk=void 0;ox.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var Rae=_(w4=>{"use strict";Object.defineProperty(w4,"__esModule",{value:!0});var Tae=new Set;w4.default=t=>{Tae.has(t)||(Tae.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var Nae=_(I4=>{"use strict";Object.defineProperty(I4,"__esModule",{value:!0});var Ai=Tf(),Git=(t,e)=>{if(Ai.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");Ai.assert.any([Ai.default.string,Ai.default.undefined],t.encoding),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.resolveBodyOnly),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.methodRewriting),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.isStream),Ai.assert.any([Ai.default.string,Ai.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry={...e.retry}:t.retry={calculateDelay:o=>o.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},Ai.default.object(r)?(t.retry={...t.retry,...r},t.retry.methods=[...new Set(t.retry.methods.map(o=>o.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):Ai.default.number(r)&&(t.retry.limit=r),Ai.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(Ai.default.number))),Ai.default.object(t.pagination)){e&&(t.pagination={...e.pagination,...t.pagination});let{pagination:o}=t;if(!Ai.default.function_(o.transform))throw new Error("`options.pagination.transform` must be implemented");if(!Ai.default.function_(o.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!Ai.default.function_(o.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!Ai.default.function_(o.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return t.responseType==="json"&&t.headers.accept===void 0&&(t.headers.accept="application/json"),t};I4.default=Git});var Lae=_(d1=>{"use strict";Object.defineProperty(d1,"__esModule",{value:!0});d1.retryAfterStatusCodes=void 0;d1.retryAfterStatusCodes=new Set([413,429,503]);var Yit=({attemptCount:t,retryOptions:e,error:r,retryAfter:o})=>{if(t>e.limit)return 0;let a=e.methods.includes(r.options.method),n=e.errorCodes.includes(r.code),u=r.response&&e.statusCodes.includes(r.response.statusCode);if(!a||!n&&!u)return 0;if(r.response){if(o)return e.maxRetryAfter===void 0||o>e.maxRetryAfter?0:o;if(r.response.statusCode===413)return 0}let A=Math.random()*100;return 2**(t-1)*1e3+A};d1.default=Yit});var E1=_(Bn=>{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});Bn.UnsupportedProtocolError=Bn.ReadError=Bn.TimeoutError=Bn.UploadError=Bn.CacheError=Bn.HTTPError=Bn.MaxRedirectsError=Bn.RequestError=Bn.setNonEnumerableProperties=Bn.knownHookEvents=Bn.withoutBody=Bn.kIsNormalizedAlready=void 0;var Mae=Be("util"),Oae=Be("stream"),Wit=Be("fs"),oh=Be("url"),Uae=Be("http"),B4=Be("http"),Vit=Be("https"),Kit=eoe(),Jit=aoe(),_ae=Uoe(),zit=qoe(),Xit=yae(),Zit=tx(),st=Tf(),$it=Bae(),Hae=c4(),est=f4(),jae=Pae(),tst=xae(),qae=bae(),rst=kae(),nst=E4(),Gae=Fae(),ist=C4(),ah=Rae(),sst=Nae(),ost=Lae(),v4,Zs=Symbol("request"),cx=Symbol("response"),PE=Symbol("responseSize"),SE=Symbol("downloadedSize"),xE=Symbol("bodySize"),bE=Symbol("uploadedSize"),ax=Symbol("serverResponsesPiped"),Yae=Symbol("unproxyEvents"),Wae=Symbol("isFromCache"),D4=Symbol("cancelTimeouts"),Vae=Symbol("startedReading"),kE=Symbol("stopReading"),lx=Symbol("triggerRead"),lh=Symbol("body"),m1=Symbol("jobs"),Kae=Symbol("originalResponse"),Jae=Symbol("retryTimeout");Bn.kIsNormalizedAlready=Symbol("isNormalizedAlready");var ast=st.default.string(process.versions.brotli);Bn.withoutBody=new Set(["GET","HEAD"]);Bn.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function lst(t){for(let e in t){let r=t[e];if(!st.default.string(r)&&!st.default.number(r)&&!st.default.boolean(r)&&!st.default.null_(r)&&!st.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function cst(t){return st.default.object(t)&&!("statusCode"in t)}var P4=new rst.default,ust=async t=>new Promise((e,r)=>{let o=a=>{r(a)};t.pending||e(),t.once("error",o),t.once("ready",()=>{t.off("error",o),e()})}),Ast=new Set([300,301,302,303,304,307,308]),fst=["context","body","json","form"];Bn.setNonEnumerableProperties=(t,e)=>{let r={};for(let o of t)if(!!o)for(let a of fst)a in o&&(r[a]={writable:!0,configurable:!0,enumerable:!1,value:o[a]});Object.defineProperties(e,r)};var Ki=class extends Error{constructor(e,r,o){var a;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,o instanceof dx?(Object.defineProperty(this,"request",{enumerable:!1,value:o}),Object.defineProperty(this,"response",{enumerable:!1,value:o[cx]}),Object.defineProperty(this,"options",{enumerable:!1,value:o.options})):Object.defineProperty(this,"options",{enumerable:!1,value:o}),this.timings=(a=this.request)===null||a===void 0?void 0:a.timings,st.default.string(r.stack)&&st.default.string(this.stack)){let n=this.stack.indexOf(this.message)+this.message.length,u=this.stack.slice(n).split(` +`).reverse(),A=r.stack.slice(r.stack.indexOf(r.message)+r.message.length).split(` +`).reverse();for(;A.length!==0&&A[0]===u[0];)u.shift();this.stack=`${this.stack.slice(0,n)}${u.reverse().join(` +`)}${A.reverse().join(` +`)}`}}};Bn.RequestError=Ki;var ux=class extends Ki{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}};Bn.MaxRedirectsError=ux;var Ax=class extends Ki{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}};Bn.HTTPError=Ax;var fx=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="CacheError"}};Bn.CacheError=fx;var px=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="UploadError"}};Bn.UploadError=px;var hx=class extends Ki{constructor(e,r,o){super(e.message,e,o),this.name="TimeoutError",this.event=e.event,this.timings=r}};Bn.TimeoutError=hx;var y1=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="ReadError"}};Bn.ReadError=y1;var gx=class extends Ki{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}};Bn.UnsupportedProtocolError=gx;var pst=["socket","connect","continue","information","upgrade","timeout"],dx=class extends Oae.Duplex{constructor(e,r={},o){super({autoDestroy:!1,highWaterMark:0}),this[SE]=0,this[bE]=0,this.requestInitialized=!1,this[ax]=new Set,this.redirects=[],this[kE]=!1,this[lx]=!1,this[m1]=[],this.retryCount=0,this._progressCallbacks=[];let a=()=>this._unlockWrite(),n=()=>this._lockWrite();this.on("pipe",h=>{h.prependListener("data",a),h.on("data",n),h.prependListener("end",a),h.on("end",n)}),this.on("unpipe",h=>{h.off("data",a),h.off("data",n),h.off("end",a),h.off("end",n)}),this.on("pipe",h=>{h instanceof B4.IncomingMessage&&(this.options.headers={...h.headers,...this.options.headers})});let{json:u,body:A,form:p}=r;if((u||A||p)&&this._lockWrite(),Bn.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,o)}catch(h){st.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(h);return}(async()=>{var h;try{this.options.body instanceof Wit.ReadStream&&await ust(this.options.body);let{url:E}=this.options;if(!E)throw new TypeError("Missing `url` property");if(this.requestUrl=E.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(h=this[Zs])===null||h===void 0||h.destroy();return}for(let I of this[m1])I();this[m1].length=0,this.requestInitialized=!0}catch(E){if(E instanceof Ki){this._beforeError(E);return}this.destroyed||this.destroy(E)}})()}static normalizeArguments(e,r,o){var a,n,u,A,p;let h=r;if(st.default.object(e)&&!st.default.urlInstance(e))r={...o,...e,...r};else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...o,...r},e!==void 0&&(r.url=e),st.default.urlInstance(r.url)&&(r.url=new oh.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),st.assert.any([st.default.string,st.default.undefined],r.method),st.assert.any([st.default.object,st.default.undefined],r.headers),st.assert.any([st.default.string,st.default.urlInstance,st.default.undefined],r.prefixUrl),st.assert.any([st.default.object,st.default.undefined],r.cookieJar),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.searchParams),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.cache),st.assert.any([st.default.object,st.default.number,st.default.undefined],r.timeout),st.assert.any([st.default.object,st.default.undefined],r.context),st.assert.any([st.default.object,st.default.undefined],r.hooks),st.assert.any([st.default.boolean,st.default.undefined],r.decompress),st.assert.any([st.default.boolean,st.default.undefined],r.ignoreInvalidCookies),st.assert.any([st.default.boolean,st.default.undefined],r.followRedirect),st.assert.any([st.default.number,st.default.undefined],r.maxRedirects),st.assert.any([st.default.boolean,st.default.undefined],r.throwHttpErrors),st.assert.any([st.default.boolean,st.default.undefined],r.http2),st.assert.any([st.default.boolean,st.default.undefined],r.allowGetBody),st.assert.any([st.default.string,st.default.undefined],r.localAddress),st.assert.any([Gae.isDnsLookupIpVersion,st.default.undefined],r.dnsLookupIpVersion),st.assert.any([st.default.object,st.default.undefined],r.https),st.assert.any([st.default.boolean,st.default.undefined],r.rejectUnauthorized),r.https&&(st.assert.any([st.default.boolean,st.default.undefined],r.https.rejectUnauthorized),st.assert.any([st.default.function_,st.default.undefined],r.https.checkServerIdentity),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificateAuthority),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.key),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificate),st.assert.any([st.default.string,st.default.undefined],r.https.passphrase),st.assert.any([st.default.string,st.default.buffer,st.default.array,st.default.undefined],r.https.pfx)),st.assert.any([st.default.object,st.default.undefined],r.cacheOptions),st.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===o?.headers?r.headers={...r.headers}:r.headers=Zit({...o?.headers,...r.headers}),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==o?.searchParams){let b;if(st.default.string(r.searchParams)||r.searchParams instanceof oh.URLSearchParams)b=new oh.URLSearchParams(r.searchParams);else{lst(r.searchParams),b=new oh.URLSearchParams;for(let C in r.searchParams){let T=r.searchParams[C];T===null?b.append(C,""):T!==void 0&&b.append(C,T)}}(a=o?.searchParams)===null||a===void 0||a.forEach((C,T)=>{b.has(T)||b.append(T,C)}),r.searchParams=b}if(r.username=(n=r.username)!==null&&n!==void 0?n:"",r.password=(u=r.password)!==null&&u!==void 0?u:"",st.default.undefined(r.prefixUrl)?r.prefixUrl=(A=o?.prefixUrl)!==null&&A!==void 0?A:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),st.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=qae.default(r.prefixUrl+r.url,r)}else(st.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=qae.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:b}=r;Object.defineProperty(r,"prefixUrl",{set:T=>{let L=r.url;if(!L.href.startsWith(T))throw new Error(`Cannot change \`prefixUrl\` from ${b} to ${T}: ${L.href}`);r.url=new oh.URL(T+L.href.slice(b.length)),b=T},get:()=>b});let{protocol:C}=r.url;if(C==="unix:"&&(C="http:",r.url=new oh.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),C!=="http:"&&C!=="https:")throw new gx(r);r.username===""?r.username=r.url.username:r.url.username=r.username,r.password===""?r.password=r.url.password:r.url.password=r.password}let{cookieJar:E}=r;if(E){let{setCookie:b,getCookieString:C}=E;st.assert.function_(b),st.assert.function_(C),b.length===4&&C.length===0&&(b=Mae.promisify(b.bind(r.cookieJar)),C=Mae.promisify(C.bind(r.cookieJar)),r.cookieJar={setCookie:b,getCookieString:C})}let{cache:I}=r;if(I&&(P4.has(I)||P4.set(I,new _ae((b,C)=>{let T=b[Zs](b,C);return st.default.promise(T)&&(T.once=(L,U)=>{if(L==="error")T.catch(U);else if(L==="abort")(async()=>{try{(await T).once("abort",U)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${L}`);return T}),T},I))),r.cacheOptions={...r.cacheOptions},r.dnsCache===!0)v4||(v4=new Jit.default),r.dnsCache=v4;else if(!st.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${st.default(r.dnsCache)}`);st.default.number(r.timeout)?r.timeout={request:r.timeout}:o&&r.timeout!==o.timeout?r.timeout={...o.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});let v=r.hooks===o?.hooks;r.hooks={...r.hooks};for(let b of Bn.knownHookEvents)if(b in r.hooks)if(st.default.array(r.hooks[b]))r.hooks[b]=[...r.hooks[b]];else throw new TypeError(`Parameter \`${b}\` must be an Array, got ${st.default(r.hooks[b])}`);else r.hooks[b]=[];if(o&&!v)for(let b of Bn.knownHookEvents)o.hooks[b].length>0&&(r.hooks[b]=[...o.hooks[b],...r.hooks[b]]);if("family"in r&&ah.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),o?.https&&(r.https={...o.https,...r.https}),"rejectUnauthorized"in r&&ah.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&ah.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&ah.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&ah.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&ah.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&ah.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&ah.default('"options.pfx" was never documented, please use "options.https.pfx"'),"followRedirects"in r)throw new TypeError("The `followRedirects` option does not exist. Use `followRedirect` instead.");if(r.agent){for(let b in r.agent)if(b!=="http"&&b!=="https"&&b!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${b}\``)}return r.maxRedirects=(p=r.maxRedirects)!==null&&p!==void 0?p:0,Bn.setNonEnumerableProperties([o,h],r),sst.default(r,o)}_lockWrite(){let e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:r}=e,o=!st.default.undefined(e.form),a=!st.default.undefined(e.json),n=!st.default.undefined(e.body),u=o||a||n,A=Bn.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=A,u){if(A)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([n,o,a].filter(p=>p).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(n&&!(e.body instanceof Oae.Readable)&&!st.default.string(e.body)&&!st.default.buffer(e.body)&&!Hae.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(o&&!st.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let p=!st.default.string(r["content-type"]);n?(Hae.default(e.body)&&p&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[lh]=e.body):o?(p&&(r["content-type"]="application/x-www-form-urlencoded"),this[lh]=new oh.URLSearchParams(e.form).toString()):(p&&(r["content-type"]="application/json"),this[lh]=e.stringifyJson(e.json));let h=await $it.default(this[lh],e.headers);st.default.undefined(r["content-length"])&&st.default.undefined(r["transfer-encoding"])&&!A&&!st.default.undefined(h)&&(r["content-length"]=String(h))}}else A?this._lockWrite():this._unlockWrite();this[xE]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:o}=r;this[Kae]=e,r.decompress&&(e=zit(e));let a=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:Uae.STATUS_CODES[a],n.url=r.url.toString(),n.requestUrl=this.requestUrl,n.redirectUrls=this.redirects,n.request=this,n.isFromCache=e.fromCache||!1,n.ip=this.ip,n.retryCount=this.retryCount,this[Wae]=n.isFromCache,this[PE]=Number(e.headers["content-length"])||void 0,this[cx]=e,e.once("end",()=>{this[PE]=this[SE],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",A=>{e.destroy(),this._beforeError(new y1(A,this))}),e.once("aborted",()=>{this._beforeError(new y1({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let u=e.headers["set-cookie"];if(st.default.object(r.cookieJar)&&u){let A=u.map(async p=>r.cookieJar.setCookie(p,o.toString()));r.ignoreInvalidCookies&&(A=A.map(async p=>p.catch(()=>{})));try{await Promise.all(A)}catch(p){this._beforeError(p);return}}if(r.followRedirect&&e.headers.location&&Ast.has(a)){if(e.resume(),this[Zs]&&(this[D4](),delete this[Zs],this[Yae]()),(a===303&&r.method!=="GET"&&r.method!=="HEAD"||!r.methodRewriting)&&(r.method="GET","body"in r&&delete r.body,"json"in r&&delete r.json,"form"in r&&delete r.form,this[lh]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new ux(this));return}try{let p=Buffer.from(e.headers.location,"binary").toString(),h=new oh.URL(p,o),E=h.toString();decodeURI(E),h.hostname!==o.hostname||h.port!==o.port?("host"in r.headers&&delete r.headers.host,"cookie"in r.headers&&delete r.headers.cookie,"authorization"in r.headers&&delete r.headers.authorization,(r.username||r.password)&&(r.username="",r.password="")):(h.username=r.username,h.password=r.password),this.redirects.push(E),r.url=h;for(let I of r.hooks.beforeRedirect)await I(r,n);this.emit("redirect",n,r),await this._makeRequest()}catch(p){this._beforeError(p);return}return}if(r.isStream&&r.throwHttpErrors&&!ist.isResponseOk(n)){this._beforeError(new Ax(n));return}e.on("readable",()=>{this[lx]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let A of this[ax])if(!A.headersSent){for(let p in e.headers){let h=r.decompress?p!=="content-encoding":!0,E=e.headers[p];h&&A.setHeader(p,E)}A.statusCode=a}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:o,url:a}=r;Kit.default(e),this[D4]=jae.default(e,o,a);let n=r.cache?"cacheableResponse":"response";e.once(n,p=>{this._onResponse(p)}),e.once("error",p=>{var h;e.destroy(),(h=e.res)===null||h===void 0||h.removeAllListeners("end"),p=p instanceof jae.TimeoutError?new hx(p,this.timings,this):new Ki(p.message,p,this),this._beforeError(p)}),this[Yae]=est.default(e,this,pst),this[Zs]=e,this.emit("uploadProgress",this.uploadProgress);let u=this[lh],A=this.redirects.length===0?this:e;st.default.nodeStream(u)?(u.pipe(A),u.once("error",p=>{this._beforeError(new px(p,this))})):(this._unlockWrite(),st.default.undefined(u)?(this._cannotHaveBody||this._noPipe)&&(A.end(),this._lockWrite()):(this._writeRequest(u,void 0,()=>{}),A.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((o,a)=>{Object.assign(r,tst.default(e)),delete r.url;let n,u=P4.get(r.cache)(r,async A=>{A._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",A),o(A)});r.url=e,u.once("error",a),u.once("request",async A=>{n=A,o(n)})})}async _makeRequest(){var e,r,o,a,n;let{options:u}=this,{headers:A}=u;for(let U in A)if(st.default.undefined(A[U]))delete A[U];else if(st.default.null_(A[U]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${U}\` header`);if(u.decompress&&st.default.undefined(A["accept-encoding"])&&(A["accept-encoding"]=ast?"gzip, deflate, br":"gzip, deflate"),u.cookieJar){let U=await u.cookieJar.getCookieString(u.url.toString());st.default.nonEmptyString(U)&&(u.headers.cookie=U)}for(let U of u.hooks.beforeRequest){let J=await U(u);if(!st.default.undefined(J)){u.request=()=>J;break}}u.body&&this[lh]!==u.body&&(this[lh]=u.body);let{agent:p,request:h,timeout:E,url:I}=u;if(u.dnsCache&&!("lookup"in u)&&(u.lookup=u.dnsCache.lookup),I.hostname==="unix"){let U=/(?.+?):(?.+)/.exec(`${I.pathname}${I.search}`);if(U?.groups){let{socketPath:J,path:te}=U.groups;Object.assign(u,{socketPath:J,path:te,host:""})}}let v=I.protocol==="https:",b;u.http2?b=Xit.auto:b=v?Vit.request:Uae.request;let C=(e=u.request)!==null&&e!==void 0?e:b,T=u.cache?this._createCacheableRequest:C;p&&!u.http2&&(u.agent=p[v?"https":"http"]),u[Zs]=C,delete u.request,delete u.timeout;let L=u;if(L.shared=(r=u.cacheOptions)===null||r===void 0?void 0:r.shared,L.cacheHeuristic=(o=u.cacheOptions)===null||o===void 0?void 0:o.cacheHeuristic,L.immutableMinTimeToLive=(a=u.cacheOptions)===null||a===void 0?void 0:a.immutableMinTimeToLive,L.ignoreCargoCult=(n=u.cacheOptions)===null||n===void 0?void 0:n.ignoreCargoCult,u.dnsLookupIpVersion!==void 0)try{L.family=Gae.dnsLookupIpVersionToFamily(u.dnsLookupIpVersion)}catch{throw new Error("Invalid `dnsLookupIpVersion` option value")}u.https&&("rejectUnauthorized"in u.https&&(L.rejectUnauthorized=u.https.rejectUnauthorized),u.https.checkServerIdentity&&(L.checkServerIdentity=u.https.checkServerIdentity),u.https.certificateAuthority&&(L.ca=u.https.certificateAuthority),u.https.certificate&&(L.cert=u.https.certificate),u.https.key&&(L.key=u.https.key),u.https.passphrase&&(L.passphrase=u.https.passphrase),u.https.pfx&&(L.pfx=u.https.pfx));try{let U=await T(I,L);st.default.undefined(U)&&(U=b(I,L)),u.request=h,u.timeout=E,u.agent=p,u.https&&("rejectUnauthorized"in u.https&&delete L.rejectUnauthorized,u.https.checkServerIdentity&&delete L.checkServerIdentity,u.https.certificateAuthority&&delete L.ca,u.https.certificate&&delete L.cert,u.https.key&&delete L.key,u.https.passphrase&&delete L.passphrase,u.https.pfx&&delete L.pfx),cst(U)?this._onRequest(U):this.writable?(this.once("finish",()=>{this._onResponse(U)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(U)}catch(U){throw U instanceof _ae.CacheError?new fx(U,this):new Ki(U.message,U,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new Ki(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[kE])return;let{options:r}=this,o=this.retryCount+1;this[kE]=!0,e instanceof Ki||(e=new Ki(e.message,e,this));let a=e,{response:n}=a;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await nst.default(n),n.body=n.rawBody.toString()}catch{}}if(this.listenerCount("retry")!==0){let u;try{let A;n&&"retry-after"in n.headers&&(A=Number(n.headers["retry-after"]),Number.isNaN(A)?(A=Date.parse(n.headers["retry-after"])-Date.now(),A<=0&&(A=1)):A*=1e3),u=await r.retry.calculateDelay({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:ost.default({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:0})})}catch(A){this._error(new Ki(A.message,A,this));return}if(u){let A=async()=>{try{for(let p of this.options.hooks.beforeRetry)await p(this.options,a,o)}catch(p){this._error(new Ki(p.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",o,e))};this[Jae]=setTimeout(A,u);return}}this._error(a)})()}_read(){this[lx]=!0;let e=this[cx];if(e&&!this[kE]){e.readableLength&&(this[lx]=!1);let r;for(;(r=e.read())!==null;){this[SE]+=r.length,this[Vae]=!0;let o=this.downloadProgress;o.percent<1&&this.emit("downloadProgress",o),this.push(r)}}}_write(e,r,o){let a=()=>{this._writeRequest(e,r,o)};this.requestInitialized?a():this[m1].push(a)}_writeRequest(e,r,o){this[Zs].destroyed||(this._progressCallbacks.push(()=>{this[bE]+=Buffer.byteLength(e,r);let a=this.uploadProgress;a.percent<1&&this.emit("uploadProgress",a)}),this[Zs].write(e,r,a=>{!a&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),o(a)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Zs in this)){e();return}if(this[Zs].destroyed){e();return}this[Zs].end(o=>{o||(this[xE]=this[bE],this.emit("uploadProgress",this.uploadProgress),this[Zs].emit("upload-complete")),e(o)})};this.requestInitialized?r():this[m1].push(r)}_destroy(e,r){var o;this[kE]=!0,clearTimeout(this[Jae]),Zs in this&&(this[D4](),!((o=this[cx])===null||o===void 0)&&o.complete||this[Zs].destroy()),e!==null&&!st.default.undefined(e)&&!(e instanceof Ki)&&(e=new Ki(e.message,e,this)),r(e)}get _isAboutToError(){return this[kE]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,o;return((r=(e=this[Zs])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!(!((o=this[Kae])===null||o===void 0)&&o.complete)}get socket(){var e,r;return(r=(e=this[Zs])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[PE]?e=this[SE]/this[PE]:this[PE]===this[SE]?e=1:e=0,{percent:e,transferred:this[SE],total:this[PE]}}get uploadProgress(){let e;return this[xE]?e=this[bE]/this[xE]:this[xE]===this[bE]?e=1:e=0,{percent:e,transferred:this[bE],total:this[xE]}}get timings(){var e;return(e=this[Zs])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[Wae]}pipe(e,r){if(this[Vae])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof B4.ServerResponse&&this[ax].add(e),super.pipe(e,r)}unpipe(e){return e instanceof B4.ServerResponse&&this[ax].delete(e),super.unpipe(e),this}};Bn.default=dx});var C1=_(qc=>{"use strict";var hst=qc&&qc.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),gst=qc&&qc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&hst(e,t,r)};Object.defineProperty(qc,"__esModule",{value:!0});qc.CancelError=qc.ParseError=void 0;var zae=E1(),S4=class extends zae.RequestError{constructor(e,r){let{options:o}=r.request;super(`${e.message} in "${o.url.toString()}"`,e,r.request),this.name="ParseError"}};qc.ParseError=S4;var x4=class extends zae.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}};qc.CancelError=x4;gst(E1(),qc)});var Zae=_(b4=>{"use strict";Object.defineProperty(b4,"__esModule",{value:!0});var Xae=C1(),dst=(t,e,r,o)=>{let{rawBody:a}=t;try{if(e==="text")return a.toString(o);if(e==="json")return a.length===0?"":r(a.toString());if(e==="buffer")return a;throw new Xae.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(n){throw new Xae.ParseError(n,t)}};b4.default=dst});var k4=_(ch=>{"use strict";var mst=ch&&ch.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),yst=ch&&ch.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&mst(e,t,r)};Object.defineProperty(ch,"__esModule",{value:!0});var Est=Be("events"),Cst=Tf(),wst=Zse(),mx=C1(),$ae=Zae(),ele=E1(),Ist=f4(),Bst=E4(),tle=C4(),vst=["request","response","redirect","uploadProgress","downloadProgress"];function rle(t){let e,r,o=new Est.EventEmitter,a=new wst((u,A,p)=>{let h=E=>{let I=new ele.default(void 0,t);I.retryCount=E,I._noPipe=!0,p(()=>I.destroy()),p.shouldReject=!1,p(()=>A(new mx.CancelError(I))),e=I,I.once("response",async C=>{var T;if(C.retryCount=E,C.request.aborted)return;let L;try{L=await Bst.default(I),C.rawBody=L}catch{return}if(I._isAboutToError)return;let U=((T=C.headers["content-encoding"])!==null&&T!==void 0?T:"").toLowerCase(),J=["gzip","deflate","br"].includes(U),{options:te}=I;if(J&&!te.decompress)C.body=L;else try{C.body=$ae.default(C,te.responseType,te.parseJson,te.encoding)}catch(le){if(C.body=L.toString(),tle.isResponseOk(C)){I._beforeError(le);return}}try{for(let[le,pe]of te.hooks.afterResponse.entries())C=await pe(C,async Ae=>{let ye=ele.default.normalizeArguments(void 0,{...Ae,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},te);ye.hooks.afterResponse=ye.hooks.afterResponse.slice(0,le);for(let we of ye.hooks.beforeRetry)await we(ye);let ae=rle(ye);return p(()=>{ae.catch(()=>{}),ae.cancel()}),ae})}catch(le){I._beforeError(new mx.RequestError(le.message,le,I));return}if(!tle.isResponseOk(C)){I._beforeError(new mx.HTTPError(C));return}r=C,u(I.options.resolveBodyOnly?C.body:C)});let v=C=>{if(a.isCanceled)return;let{options:T}=I;if(C instanceof mx.HTTPError&&!T.throwHttpErrors){let{response:L}=C;u(I.options.resolveBodyOnly?L.body:L);return}A(C)};I.once("error",v);let b=I.options.body;I.once("retry",(C,T)=>{var L,U;if(b===((L=T.request)===null||L===void 0?void 0:L.options.body)&&Cst.default.nodeStream((U=T.request)===null||U===void 0?void 0:U.options.body)){v(T);return}h(C)}),Ist.default(I,o,vst)};h(0)});a.on=(u,A)=>(o.on(u,A),a);let n=u=>{let A=(async()=>{await a;let{options:p}=r.request;return $ae.default(r,u,p.parseJson,p.encoding)})();return Object.defineProperties(A,Object.getOwnPropertyDescriptors(a)),A};return a.json=()=>{let{headers:u}=e.options;return!e.writableFinished&&u.accept===void 0&&(u.accept="application/json"),n("json")},a.buffer=()=>n("buffer"),a.text=()=>n("text"),a}ch.default=rle;yst(C1(),ch)});var nle=_(Q4=>{"use strict";Object.defineProperty(Q4,"__esModule",{value:!0});var Dst=C1();function Pst(t,...e){let r=(async()=>{if(t instanceof Dst.RequestError)try{for(let a of e)if(a)for(let n of a)t=await n(t)}catch(a){t=a}throw t})(),o=()=>r;return r.json=o,r.text=o,r.buffer=o,r.on=o,r}Q4.default=Pst});var ole=_(F4=>{"use strict";Object.defineProperty(F4,"__esModule",{value:!0});var ile=Tf();function sle(t){for(let e of Object.values(t))(ile.default.plainObject(e)||ile.default.array(e))&&sle(e);return Object.freeze(t)}F4.default=sle});var lle=_(ale=>{"use strict";Object.defineProperty(ale,"__esModule",{value:!0})});var T4=_(Kl=>{"use strict";var Sst=Kl&&Kl.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),xst=Kl&&Kl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Sst(e,t,r)};Object.defineProperty(Kl,"__esModule",{value:!0});Kl.defaultHandler=void 0;var cle=Tf(),Vl=k4(),bst=nle(),Ex=E1(),kst=ole(),Qst={RequestError:Vl.RequestError,CacheError:Vl.CacheError,ReadError:Vl.ReadError,HTTPError:Vl.HTTPError,MaxRedirectsError:Vl.MaxRedirectsError,TimeoutError:Vl.TimeoutError,ParseError:Vl.ParseError,CancelError:Vl.CancelError,UnsupportedProtocolError:Vl.UnsupportedProtocolError,UploadError:Vl.UploadError},Fst=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:yx}=Ex.default,ule=(...t)=>{let e;for(let r of t)e=yx(void 0,r,e);return e},Tst=t=>t.isStream?new Ex.default(void 0,t):Vl.default(t),Rst=t=>"defaults"in t&&"options"in t.defaults,Nst=["get","post","put","patch","head","delete"];Kl.defaultHandler=(t,e)=>e(t);var Ale=(t,e)=>{if(t)for(let r of t)r(e)},fle=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(o=>(a,n)=>{let u,A=o(a,p=>(u=n(p),u));if(A!==u&&!a.isStream&&u){let p=A,{then:h,catch:E,finally:I}=p;Object.setPrototypeOf(p,Object.getPrototypeOf(u)),Object.defineProperties(p,Object.getOwnPropertyDescriptors(u)),p.then=h,p.catch=E,p.finally=I}return A});let e=(o,a={},n)=>{var u,A;let p=0,h=E=>t.handlers[p++](E,p===t.handlers.length?Tst:h);if(cle.default.plainObject(o)){let E={...o,...a};Ex.setNonEnumerableProperties([o,a],E),a=E,o=void 0}try{let E;try{Ale(t.options.hooks.init,a),Ale((u=a.hooks)===null||u===void 0?void 0:u.init,a)}catch(v){E=v}let I=yx(o,a,n??t.options);if(I[Ex.kIsNormalizedAlready]=!0,E)throw new Vl.RequestError(E.message,E,I);return h(I)}catch(E){if(a.isStream)throw E;return bst.default(E,t.options.hooks.beforeError,(A=a.hooks)===null||A===void 0?void 0:A.beforeError)}};e.extend=(...o)=>{let a=[t.options],n=[...t._rawHandlers],u;for(let A of o)Rst(A)?(a.push(A.defaults.options),n.push(...A.defaults._rawHandlers),u=A.defaults.mutableDefaults):(a.push(A),"handlers"in A&&n.push(...A.handlers),u=A.mutableDefaults);return n=n.filter(A=>A!==Kl.defaultHandler),n.length===0&&n.push(Kl.defaultHandler),fle({options:ule(...a),handlers:n,mutableDefaults:Boolean(u)})};let r=async function*(o,a){let n=yx(o,a,t.options);n.resolveBodyOnly=!1;let u=n.pagination;if(!cle.default.object(u))throw new TypeError("`options.pagination` must be implemented");let A=[],{countLimit:p}=u,h=0;for(;h{let n=[];for await(let u of r(o,a))n.push(u);return n},e.paginate.each=r,e.stream=(o,a)=>e(o,{...a,isStream:!0});for(let o of Nst)e[o]=(a,n)=>e(a,{...n,method:o}),e.stream[o]=(a,n)=>e(a,{...n,method:o,isStream:!0});return Object.assign(e,Qst),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:kst.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=ule,e};Kl.default=fle;xst(lle(),Kl)});var gle=_((Rf,Cx)=>{"use strict";var Lst=Rf&&Rf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),ple=Rf&&Rf.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Lst(e,t,r)};Object.defineProperty(Rf,"__esModule",{value:!0});var Mst=Be("url"),hle=T4(),Ost={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:t})=>t},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:t=>t.request.options.responseType==="json"?t.body:JSON.parse(t.body),paginate:t=>{if(!Reflect.has(t.headers,"link"))return!1;let e=t.headers.link.split(","),r;for(let o of e){let a=o.split(";");if(a[1].includes("next")){r=a[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new Mst.URL(r)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:t=>JSON.parse(t),stringifyJson:t=>JSON.stringify(t),cacheOptions:{}},handlers:[hle.defaultHandler],mutableDefaults:!1},R4=hle.default(Ost);Rf.default=R4;Cx.exports=R4;Cx.exports.default=R4;Cx.exports.__esModule=!0;ple(T4(),Rf);ple(k4(),Rf)});var rn={};Kt(rn,{Method:()=>Ile,del:()=>qst,get:()=>O4,getNetworkSettings:()=>wle,post:()=>U4,put:()=>jst,request:()=>w1});function yle(t){let e=new wx.URL(t),r={host:e.hostname,headers:{}};return e.port&&(r.port=Number(e.port)),e.username&&e.password&&(r.proxyAuth=`${e.username}:${e.password}`),{proxy:r}}async function N4(t){return ol(mle,t,()=>oe.readFilePromise(t).then(e=>(mle.set(t,e),e)))}function Hst({statusCode:t,statusMessage:e},r){let o=Ot(r,t,yt.NUMBER),a=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return Xy(r,`${o}${e?` (${e})`:""}`,a)}async function Ix(t,{configuration:e,customErrorMessage:r}){try{return await t}catch(o){if(o.name!=="HTTPError")throw o;let a=r?.(o,e)??o.response.body?.error;a==null&&(o.message.startsWith("Response code")?a="The remote server failed to provide the requested resource":a=o.message),o.code==="ETIMEDOUT"&&o.event==="socket"&&(a+=`(can be increased via ${Ot(e,"httpTimeout",yt.SETTING)})`);let n=new zt(35,a,u=>{o.response&&u.reportError(35,` ${zu(e,{label:"Response Code",value:_c(yt.NO_HINT,Hst(o.response,e))})}`),o.request&&(u.reportError(35,` ${zu(e,{label:"Request Method",value:_c(yt.NO_HINT,o.request.options.method)})}`),u.reportError(35,` ${zu(e,{label:"Request URL",value:_c(yt.URL,o.request.requestUrl)})}`)),o.request.redirects.length>0&&u.reportError(35,` ${zu(e,{label:"Request Redirects",value:_c(yt.NO_HINT,bL(e,o.request.redirects,yt.URL))})}`),o.request.retryCount===o.request.options.retry.limit&&u.reportError(35,` ${zu(e,{label:"Request Retry Count",value:_c(yt.NO_HINT,`${Ot(e,o.request.retryCount,yt.NUMBER)} (can be increased via ${Ot(e,"httpRetry",yt.SETTING)})`)})}`)});throw n.originalError=o,n}}function wle(t,e){let r=[...e.configuration.get("networkSettings")].sort(([u],[A])=>A.length-u.length),o={enableNetwork:void 0,httpsCaFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},a=Object.keys(o),n=typeof t=="string"?new wx.URL(t):t;for(let[u,A]of r)if(M4.default.isMatch(n.hostname,u))for(let p of a){let h=A.get(p);h!==null&&typeof o[p]>"u"&&(o[p]=h)}for(let u of a)typeof o[u]>"u"&&(o[u]=e.configuration.get(u));return o}async function w1(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET",wrapNetworkRequest:A}){let p={target:t,body:e,configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u},h=async()=>await Gst(t,e,p),E=typeof A<"u"?await A(h,p):h;return await(await r.reduceHook(v=>v.wrapNetworkRequest,E,p))()}async function O4(t,{configuration:e,jsonResponse:r,customErrorMessage:o,wrapNetworkRequest:a,...n}){let u=()=>Ix(w1(t,null,{configuration:e,wrapNetworkRequest:a,...n}),{configuration:e,customErrorMessage:o}).then(p=>p.body),A=await(typeof a<"u"?u():ol(dle,t,()=>u().then(p=>(dle.set(t,p),p))));return r?JSON.parse(A.toString()):A}async function jst(t,e,{customErrorMessage:r,...o}){return(await Ix(w1(t,e,{...o,method:"PUT"}),{customErrorMessage:r,configuration:o.configuration})).body}async function U4(t,e,{customErrorMessage:r,...o}){return(await Ix(w1(t,e,{...o,method:"POST"}),{customErrorMessage:r,configuration:o.configuration})).body}async function qst(t,{customErrorMessage:e,...r}){return(await Ix(w1(t,null,{...r,method:"DELETE"}),{customErrorMessage:e,configuration:r.configuration})).body}async function Gst(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET"}){let A=typeof t=="string"?new wx.URL(t):t,p=wle(A,{configuration:r});if(p.enableNetwork===!1)throw new zt(80,`Request to '${A.href}' has been blocked because of your configuration settings`);if(A.protocol==="http:"&&!M4.default.isMatch(A.hostname,r.get("unsafeHttpWhitelist")))throw new zt(81,`Unsafe http requests must be explicitly whitelisted in your configuration (${A.hostname})`);let E={agent:{http:p.httpProxy?L4.default.httpOverHttp(yle(p.httpProxy)):Ust,https:p.httpsProxy?L4.default.httpsOverHttp(yle(p.httpsProxy)):_st},headers:o,method:u};E.responseType=n?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!a&&typeof e=="string"?E.body=e:E.json=e);let I=r.get("httpTimeout"),v=r.get("httpRetry"),b=r.get("enableStrictSsl"),C=p.httpsCaFilePath,T=p.httpsCertFilePath,L=p.httpsKeyFilePath,{default:U}=await Promise.resolve().then(()=>$e(gle())),J=C?await N4(C):void 0,te=T?await N4(T):void 0,le=L?await N4(L):void 0,pe=U.extend({timeout:{socket:I},retry:v,https:{rejectUnauthorized:b,certificateAuthority:J,certificate:te,key:le},...E});return r.getLimit("networkConcurrency")(()=>pe(A))}var Ele,Cle,M4,L4,wx,dle,mle,Ust,_st,Ile,Bx=Et(()=>{Pt();Ele=Be("https"),Cle=Be("http"),M4=$e(Zo()),L4=$e(Vse()),wx=Be("url");Yl();ql();jl();dle=new Map,mle=new Map,Ust=new Cle.Agent({keepAlive:!0}),_st=new Ele.Agent({keepAlive:!0});Ile=(a=>(a.GET="GET",a.PUT="PUT",a.POST="POST",a.DELETE="DELETE",a))(Ile||{})});var Ji={};Kt(Ji,{availableParallelism:()=>H4,getArchitecture:()=>I1,getArchitectureName:()=>Jst,getArchitectureSet:()=>_4,getCaller:()=>$st,major:()=>Yst,openUrl:()=>Wst});function Kst(){if(process.platform==="darwin"||process.platform==="win32")return null;let t;try{t=oe.readFileSync(Vst)}catch{}if(typeof t<"u"){if(t&&t.includes("GLIBC"))return"glibc";if(t&&t.includes("musl"))return"musl"}let r=(process.report?.getReport()??{}).sharedObjects??[],o=/\/(?:(ld-linux-|[^/]+-linux-gnu\/)|(libc.musl-|ld-musl-))/;return WI(r,a=>{let n=a.match(o);if(!n)return WI.skip;if(n[1])return"glibc";if(n[2])return"musl";throw new Error("Assertion failed: Expected the libc variant to have been detected")})??null}function I1(){return vle=vle??{os:process.platform,cpu:process.arch,libc:Kst()}}function Jst(t=I1()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}-${t.cpu}`}function _4(){let t=I1();return Dle=Dle??{os:[t.os],cpu:[t.cpu],libc:t.libc?[t.libc]:[]}}function Zst(t){let e=zst.exec(t);if(!e)return null;let r=e[2]&&e[2].indexOf("native")===0,o=e[2]&&e[2].indexOf("eval")===0,a=Xst.exec(e[2]);return o&&a!=null&&(e[2]=a[1],e[3]=a[2],e[4]=a[3]),{file:r?null:e[2],methodName:e[1]||"",arguments:r?[e[2]]:[],line:e[3]?+e[3]:null,column:e[4]?+e[4]:null}}function $st(){let e=new Error().stack.split(` +`)[3];return Zst(e)}function H4(){return typeof vx.default.availableParallelism<"u"?vx.default.availableParallelism():Math.max(1,vx.default.cpus().length)}var vx,Yst,Ble,Wst,Vst,vle,Dle,zst,Xst,Dx=Et(()=>{Pt();vx=$e(Be("os"));Px();jl();Yst=Number(process.versions.node.split(".")[0]),Ble=new Map([["darwin","open"],["linux","xdg-open"],["win32","explorer.exe"]]).get(process.platform),Wst=typeof Ble<"u"?async t=>{try{return await j4(Ble,[t],{cwd:K.cwd()}),!0}catch{return!1}}:void 0,Vst="/usr/bin/ldd";zst=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Xst=/\((\S*)(?::(\d+))(?::(\d+))\)/});function V4(t,e,r,o,a){let n=u1(r);if(o.isArray||o.type==="ANY"&&Array.isArray(n))return Array.isArray(n)?n.map((u,A)=>q4(t,`${e}[${A}]`,u,o,a)):String(n).split(/,/).map(u=>q4(t,e,u,o,a));if(Array.isArray(n))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return q4(t,e,r,o,a)}function q4(t,e,r,o,a){let n=u1(r);switch(o.type){case"ANY":return YS(n);case"SHAPE":return not(t,e,r,o,a);case"MAP":return iot(t,e,r,o,a)}if(n===null&&!o.isNullable&&o.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if(o.values?.includes(n))return n;let A=(()=>{if(o.type==="BOOLEAN"&&typeof n!="string")return VI(n);if(typeof n!="string")throw new Error(`Expected configuration setting "${e}" to be a string, got ${typeof n}`);let p=sS(n,{env:t.env});switch(o.type){case"ABSOLUTE_PATH":{let h=a,E=EO(r);return E&&E[0]!=="<"&&(h=K.dirname(E)),K.resolve(h,ue.toPortablePath(p))}case"LOCATOR_LOOSE":return xf(p,!1);case"NUMBER":return parseInt(p);case"LOCATOR":return xf(p);case"BOOLEAN":return VI(p);default:return p}})();if(o.values&&!o.values.includes(A))throw new Error(`Invalid value, expected one of ${o.values.join(", ")}`);return A}function not(t,e,r,o,a){let n=u1(r);if(typeof n!="object"||Array.isArray(n))throw new it(`Object configuration settings "${e}" must be an object`);let u=K4(t,o,{ignoreArrays:!0});if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=`${e}.${A}`;if(!o.properties[A])throw new it(`Unrecognized configuration settings found: ${e}.${A} - run "yarn config -v" to see the list of settings supported in Yarn`);u.set(A,V4(t,h,p,o.properties[A],a))}return u}function iot(t,e,r,o,a){let n=u1(r),u=new Map;if(typeof n!="object"||Array.isArray(n))throw new it(`Map configuration settings "${e}" must be an object`);if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=o.normalizeKeys?o.normalizeKeys(A):A,E=`${e}['${h}']`,I=o.valueDefinition;u.set(h,V4(t,E,p,I,a))}return u}function K4(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e.isArray&&!r)return[];let o=new Map;for(let[a,n]of Object.entries(e.properties))o.set(a,K4(t,n));return o}case"MAP":return e.isArray&&!r?[]:new Map;case"ABSOLUTE_PATH":return e.default===null?null:t.projectCwd===null?Array.isArray(e.default)?e.default.map(o=>K.normalize(o)):K.isAbsolute(e.default)?K.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(o=>K.resolve(t.projectCwd,o)):K.resolve(t.projectCwd,e.default);default:return e.default}}function xx(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecrets)return rot;if(e.type==="ABSOLUTE_PATH"&&typeof t=="string"&&r.getNativePaths)return ue.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let o=[];for(let a of t)o.push(xx(a,e,r));return o}if(e.type==="MAP"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=xx(n,e.valueDefinition,r);typeof u<"u"&&o.set(a,u)}return o}if(e.type==="SHAPE"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=e.properties[a],A=xx(n,u,r);typeof A<"u"&&o.set(a,A)}return o}return t}function sot(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(bx)&&(e=(0,Sle.default)(e.slice(bx.length)),t[e]=r);return t}function Y4(){let t=`${bx}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return W4}async function Ple(t){try{return await oe.readFilePromise(t)}catch{return Buffer.of()}}async function oot(t,e){return Buffer.compare(...await Promise.all([Ple(t),Ple(e)]))===0}async function aot(t,e){let[r,o]=await Promise.all([oe.statPromise(t),oe.statPromise(e)]);return r.dev===o.dev&&r.ino===o.ino}async function cot({configuration:t,selfPath:e}){let r=t.get("yarnPath");return t.get("ignorePath")||r===null||r===e||await lot(r,e)?null:r}var Sle,Nf,xle,ble,kle,G4,eot,B1,tot,QE,bx,W4,rot,v1,Qle,kx,Sx,lot,rA,Ve,D1=Et(()=>{Pt();Nl();Sle=$e(aK()),Nf=$e(ed());qt();xle=$e(eJ()),ble=Be("module"),kle=$e(nd()),G4=Be("stream");lse();AE();AO();fO();pO();Lse();hO();Bd();Hse();VS();ql();rh();Bx();jl();Dx();kf();xo();eot=function(){if(!Nf.GITHUB_ACTIONS||!process.env.GITHUB_EVENT_PATH)return!1;let t=ue.toPortablePath(process.env.GITHUB_EVENT_PATH),e;try{e=oe.readJsonSync(t)}catch{return!1}return!(!("repository"in e)||!e.repository||(e.repository.private??!0))}(),B1=new Set(["@yarnpkg/plugin-constraints","@yarnpkg/plugin-exec","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]),tot=new Set(["isTestEnv","injectNpmUser","injectNpmPassword","injectNpm2FaToken","cacheCheckpointOverride","cacheVersionOverride","lockfileVersionOverride","binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir","registry","ignoreCwd"]),QE=/^(?!v)[a-z0-9._-]+$/i,bx="yarn_",W4=".yarnrc.yml",rot="********",v1=(E=>(E.ANY="ANY",E.BOOLEAN="BOOLEAN",E.ABSOLUTE_PATH="ABSOLUTE_PATH",E.LOCATOR="LOCATOR",E.LOCATOR_LOOSE="LOCATOR_LOOSE",E.NUMBER="NUMBER",E.STRING="STRING",E.SECRET="SECRET",E.SHAPE="SHAPE",E.MAP="MAP",E))(v1||{}),Qle=yt,kx=(r=>(r.JUNCTIONS="junctions",r.SYMLINKS="symlinks",r))(kx||{}),Sx={lastUpdateCheck:{description:"Last timestamp we checked whether new Yarn versions were available",type:"STRING",default:null},yarnPath:{description:"Path to the local executable that must be used over the global one",type:"ABSOLUTE_PATH",default:null},ignorePath:{description:"If true, the local executable will be ignored when using the global one",type:"BOOLEAN",default:!1},globalFolder:{description:"Folder where all system-global files are stored",type:"ABSOLUTE_PATH",default:wO()},cacheFolder:{description:"Folder where the cache files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/cache"},compressionLevel:{description:"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)",type:"NUMBER",values:["mixed",0,1,2,3,4,5,6,7,8,9],default:0},virtualFolder:{description:"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)",type:"ABSOLUTE_PATH",default:"./.yarn/__virtual__"},installStatePath:{description:"Path of the file where the install state will be persisted",type:"ABSOLUTE_PATH",default:"./.yarn/install-state.gz"},immutablePatterns:{description:"Array of glob patterns; files matching them won't be allowed to change during immutable installs",type:"STRING",default:[],isArray:!0},rcFilename:{description:"Name of the files where the configuration can be found",type:"STRING",default:Y4()},enableGlobalCache:{description:"If true, the system-wide cache folder will be used regardless of `cache-folder`",type:"BOOLEAN",default:!0},cacheMigrationMode:{description:"Defines the conditions under which Yarn upgrades should cause the cache archives to be regenerated.",type:"STRING",values:["always","match-spec","required-only"],default:"always"},enableColors:{description:"If true, the CLI is allowed to use colors in its output",type:"BOOLEAN",default:lS,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:"BOOLEAN",default:xL,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:"BOOLEAN",default:Nf.isCI,defaultText:""},enableMessageNames:{description:"If true, the CLI will prefix most messages with codes suitable for search engines",type:"BOOLEAN",default:!0},enableProgressBars:{description:"If true, the CLI is allowed to show a progress bar for long-running events",type:"BOOLEAN",default:!Nf.isCI,defaultText:""},enableTimers:{description:"If true, the CLI is allowed to print the time spent executing commands",type:"BOOLEAN",default:!0},enableTips:{description:"If true, installs will print a helpful message every day of the week",type:"BOOLEAN",default:!Nf.isCI,defaultText:""},preferInteractive:{description:"If true, the CLI will automatically use the interactive mode when called from a TTY",type:"BOOLEAN",default:!1},preferTruncatedLines:{description:"If true, the CLI will truncate lines that would go beyond the size of the terminal",type:"BOOLEAN",default:!1},progressBarStyle:{description:"Which style of progress bar should be used (only when progress bars are enabled)",type:"STRING",default:void 0,defaultText:""},defaultLanguageName:{description:"Default language mode that should be used when a package doesn't offer any insight",type:"STRING",default:"node"},defaultProtocol:{description:"Default resolution protocol used when resolving pure semver and tag ranges",type:"STRING",default:"npm:"},enableTransparentWorkspaces:{description:"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol",type:"BOOLEAN",default:!0},supportedArchitectures:{description:"Architectures that Yarn will fetch and inject into the resolver",type:"SHAPE",properties:{os:{description:"Array of supported process.platform strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},cpu:{description:"Array of supported process.arch strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},libc:{description:"Array of supported libc libraries, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]}}},enableMirror:{description:"If true, the downloaded packages will be retrieved and stored in both the local and global folders",type:"BOOLEAN",default:!0},enableNetwork:{description:"If false, Yarn will refuse to use the network if required to",type:"BOOLEAN",default:!0},enableOfflineMode:{description:"If true, Yarn will attempt to retrieve files and metadata from the global cache rather than the network",type:"BOOLEAN",default:!1},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},unsafeHttpWhitelist:{description:"List of the hostnames for which http queries are allowed (glob patterns are supported)",type:"STRING",default:[],isArray:!0},httpTimeout:{description:"Timeout of each http request in milliseconds",type:"NUMBER",default:6e4},httpRetry:{description:"Retry times on http failure",type:"NUMBER",default:3},networkConcurrency:{description:"Maximal number of concurrent requests",type:"NUMBER",default:50},taskPoolConcurrency:{description:"Maximal amount of concurrent heavy task processing",type:"NUMBER",default:H4()},taskPoolMode:{description:"Execution strategy for heavy tasks",type:"STRING",values:["async","workers"],default:"workers"},networkSettings:{description:"Network settings per hostname (glob patterns are supported)",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{httpsCaFilePath:{description:"Path to file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:"BOOLEAN",default:null},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null}}}},httpsCaFilePath:{description:"A path to a file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null},enableStrictSsl:{description:"If false, SSL certificate errors will be ignored",type:"BOOLEAN",default:!0},logFilters:{description:"Overrides for log levels",type:"SHAPE",isArray:!0,concatenateValues:!0,properties:{code:{description:"Code of the messages covered by this override",type:"STRING",default:void 0},text:{description:"Code of the texts covered by this override",type:"STRING",default:void 0},pattern:{description:"Code of the patterns covered by this override",type:"STRING",default:void 0},level:{description:"Log level override, set to null to remove override",type:"STRING",values:Object.values(uS),isNullable:!0,default:void 0}}},enableTelemetry:{description:"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry",type:"BOOLEAN",default:!0},telemetryInterval:{description:"Minimal amount of time between two telemetry uploads, in days",type:"NUMBER",default:7},telemetryUserId:{description:"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.",type:"STRING",default:null},enableHardenedMode:{description:"If true, automatically enable --check-resolutions --refresh-lockfile on installs",type:"BOOLEAN",default:Nf.isPR&&eot,defaultText:""},enableScripts:{description:"If true, packages are allowed to have install scripts by default",type:"BOOLEAN",default:!0},enableStrictSettings:{description:"If true, unknown settings will cause Yarn to abort",type:"BOOLEAN",default:!0},enableImmutableCache:{description:"If true, the cache is reputed immutable and actions that would modify it will throw",type:"BOOLEAN",default:!1},checksumBehavior:{description:"Enumeration defining what to do when a checksum doesn't match expectations",type:"STRING",default:"throw"},injectEnvironmentFiles:{description:"List of all the environment files that Yarn should inject inside the process when it starts",type:"ABSOLUTE_PATH",default:[".env.yarn?"],isArray:!0},packageExtensions:{description:"Map of package corrections to apply on the dependency tree",type:"MAP",valueDefinition:{description:"The extension that will be applied to any package whose version matches the specified range",type:"SHAPE",properties:{dependencies:{description:"The set of dependencies that must be made available to the current package in order for it to work properly",type:"MAP",valueDefinition:{description:"A range",type:"STRING"}},peerDependencies:{description:"Inherited dependencies - the consumer of the package will be tasked to provide them",type:"MAP",valueDefinition:{description:"A semver range",type:"STRING"}},peerDependenciesMeta:{description:"Extra information related to the dependencies listed in the peerDependencies field",type:"MAP",valueDefinition:{description:"The peerDependency meta",type:"SHAPE",properties:{optional:{description:"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error",type:"BOOLEAN",default:!1}}}}}}}};lot=process.platform==="win32"?oot:aot;rA=class{constructor(e){this.isCI=Nf.isCI;this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.env={};this.limits=new Map;this.packageExtensions=null;this.startingCwd=e}static create(e,r,o){let a=new rA(e);typeof r<"u"&&!(r instanceof Map)&&(a.projectCwd=r),a.importSettings(Sx);let n=typeof o<"u"?o:r instanceof Map?r:new Map;for(let[u,A]of n)a.activatePlugin(u,A);return a}static async find(e,r,{strict:o=!0,usePathCheck:a=null,useRc:n=!0}={}){let u=sot();delete u.rcFilename;let A=new rA(e),p=await rA.findRcFiles(e),h=await rA.findFolderRcFile(yE());h&&(p.find(ye=>ye.path===h.path)||p.unshift(h));let E=_se(p.map(Ae=>[Ae.path,Ae.data])),I=Bt.dot,v=new Set(Object.keys(Sx)),b=({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae})=>({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae}),C=({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae,...we})=>{let Pe={};for(let[g,Ee]of Object.entries(we))v.has(g)&&(Pe[g]=Ee);return Pe},T=({yarnPath:Ae,ignorePath:ye,...ae})=>{let we={};for(let[Pe,g]of Object.entries(ae))v.has(Pe)||(we[Pe]=g);return we};if(A.importSettings(b(Sx)),A.useWithSource("",b(u),e,{strict:!1}),E){let[Ae,ye]=E;A.useWithSource(Ae,b(ye),I,{strict:!1})}if(a){if(await cot({configuration:A,selfPath:a})!==null)return A;A.useWithSource("",{ignorePath:!0},e,{strict:!1,overwrite:!0})}let L=await rA.findProjectCwd(e);A.startingCwd=e,A.projectCwd=L;let U=Object.assign(Object.create(null),process.env);A.env=U;let J=await Promise.all(A.get("injectEnvironmentFiles").map(async Ae=>{let ye=Ae.endsWith("?")?await oe.readFilePromise(Ae.slice(0,-1),"utf8").catch(()=>""):await oe.readFilePromise(Ae,"utf8");return(0,xle.parse)(ye)}));for(let Ae of J)for(let[ye,ae]of Object.entries(Ae))A.env[ye]=sS(ae,{env:U});if(A.importSettings(C(Sx)),A.useWithSource("",C(u),e,{strict:o}),E){let[Ae,ye]=E;A.useWithSource(Ae,C(ye),I,{strict:o})}let te=Ae=>"default"in Ae?Ae.default:Ae,le=new Map([["@@core",ase]]);if(r!==null)for(let Ae of r.plugins.keys())le.set(Ae,te(r.modules.get(Ae)));for(let[Ae,ye]of le)A.activatePlugin(Ae,ye);let pe=new Map([]);if(r!==null){let Ae=new Map;for(let we of ble.builtinModules)Ae.set(we,()=>vf(we));for(let[we,Pe]of r.modules)Ae.set(we,()=>Pe);let ye=new Set,ae=async(we,Pe)=>{let{factory:g,name:Ee}=vf(we);if(!g||ye.has(Ee))return;let De=new Map(Ae),ce=ee=>{if(De.has(ee))return De.get(ee)();throw new it(`This plugin cannot access the package referenced via ${ee} which is neither a builtin, nor an exposed entry`)},ne=await Wy(async()=>te(await g(ce)),ee=>`${ee} (when initializing ${Ee}, defined in ${Pe})`);Ae.set(Ee,()=>ne),ye.add(Ee),pe.set(Ee,ne)};if(u.plugins)for(let we of u.plugins.split(";")){let Pe=K.resolve(e,ue.toPortablePath(we));await ae(Pe,"")}for(let{path:we,cwd:Pe,data:g}of p)if(!!n&&!!Array.isArray(g.plugins))for(let Ee of g.plugins){let De=typeof Ee!="string"?Ee.path:Ee,ce=Ee?.spec??"",ne=Ee?.checksum??"";if(B1.has(ce))continue;let ee=K.resolve(Pe,ue.toPortablePath(De));if(!await oe.existsPromise(ee)){if(!ce){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,".gitignore",yt.NAME),lt=Ot(A,A.values.get("rcFilename"),yt.NAME),Re=Ot(A,"https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored",yt.URL);throw new it(`Missing source for the ${ht} plugin - please try to remove the plugin from ${lt} then reinstall it manually. This error usually occurs because ${H} is incorrect, check ${Re} to make sure your plugin folder isn't gitignored.`)}if(!ce.match(/^https?:/)){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,A.values.get("rcFilename"),yt.NAME);throw new it(`Failed to recognize the source for the ${ht} plugin - please try to delete the plugin from ${H} then reinstall it manually.`)}let Ie=await O4(ce,{configuration:A}),ke=zs(Ie);if(ne&&ne!==ke){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,A.values.get("rcFilename"),yt.NAME),lt=Ot(A,`yarn plugin import ${ce}`,yt.CODE);throw new it(`Failed to fetch the ${ht} plugin from its remote location: its checksum seems to have changed. If this is expected, please remove the plugin from ${H} then run ${lt} to reimport it.`)}await oe.mkdirPromise(K.dirname(ee),{recursive:!0}),await oe.writeFilePromise(ee,Ie)}await ae(ee,we)}}for(let[Ae,ye]of pe)A.activatePlugin(Ae,ye);if(A.useWithSource("",T(u),e,{strict:o}),E){let[Ae,ye]=E;A.useWithSource(Ae,T(ye),I,{strict:o})}return A.get("enableGlobalCache")&&(A.values.set("cacheFolder",`${A.get("globalFolder")}/cache`),A.sources.set("cacheFolder","")),A}static async findRcFiles(e){let r=Y4(),o=[],a=e,n=null;for(;a!==n;){n=a;let u=K.join(n,r);if(oe.existsSync(u)){let A=await oe.readFilePromise(u,"utf8"),p;try{p=Vi(A)}catch{let E="";throw A.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(E=" (in particular, make sure you list the colons after each key name)"),new it(`Parse error when loading ${u}; please check it's proper Yaml${E}`)}o.unshift({path:u,cwd:n,data:p})}a=K.dirname(n)}return o}static async findFolderRcFile(e){let r=K.join(e,dr.rc),o;try{o=await oe.readFilePromise(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let a=Vi(o);return{path:r,cwd:e,data:a}}static async findProjectCwd(e){let r=null,o=e,a=null;for(;o!==a;){if(a=o,oe.existsSync(K.join(a,dr.lockfile)))return a;oe.existsSync(K.join(a,dr.manifest))&&(r=a),o=K.dirname(a)}return r}static async updateConfiguration(e,r,o={}){let a=Y4(),n=K.join(e,a),u=oe.existsSync(n)?Vi(await oe.readFilePromise(n,"utf8")):{},A=!1,p;if(typeof r=="function"){try{p=r(u)}catch{p=r({})}if(p===u)return!1}else{p=u;for(let h of Object.keys(r)){let E=u[h],I=r[h],v;if(typeof I=="function")try{v=I(E)}catch{v=I(void 0)}else v=I;E!==v&&(v===rA.deleteProperty?delete p[h]:p[h]=v,A=!0)}if(!A)return!1}return await oe.changeFilePromise(n,Ba(p),{automaticNewlines:!0}),!0}static async addPlugin(e,r){r.length!==0&&await rA.updateConfiguration(e,o=>{let a=o.plugins??[];if(a.length===0)return{...o,plugins:r};let n=[],u=[...r];for(let A of a){let p=typeof A!="string"?A.path:A,h=u.find(E=>E.path===p);h?(n.push(h),u=u.filter(E=>E!==h)):n.push(A)}return n.push(...u),{...o,plugins:n}})}static async updateHomeConfiguration(e){let r=yE();return await rA.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,o]of Object.entries(e))if(o!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,o),this.values.set(r,K4(this,o))}}useWithSource(e,r,o,a){try{this.use(e,r,o,a)}catch(n){throw n.message+=` (in ${Ot(this,e,yt.PATH)})`,n}}use(e,r,o,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSettings");for(let u of["enableStrictSettings",...Object.keys(r)]){let A=r[u],p=EO(A);if(p&&(e=p),typeof A>"u"||u==="plugins"||e===""&&tot.has(u))continue;if(u==="rcFilename")throw new it(`The rcFilename settings can only be set via ${`${bx}RC_FILENAME`.toUpperCase()}, not via a rc file`);let h=this.settings.get(u);if(!h){let I=yE(),v=e[0]!=="<"?K.dirname(e):null;if(a&&!(v!==null?I===v:!1))throw new it(`Unrecognized or legacy configuration settings found: ${u} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(u,e);continue}if(this.sources.has(u)&&!(n||h.type==="MAP"||h.isArray&&h.concatenateValues))continue;let E;try{E=V4(this,u,A,h,o)}catch(I){throw I.message+=` in ${Ot(this,e,yt.PATH)}`,I}if(u==="enableStrictSettings"&&e!==""){a=E;continue}if(h.type==="MAP"){let I=this.values.get(u);this.values.set(u,new Map(n?[...I,...E]:[...E,...I])),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else if(h.isArray&&h.concatenateValues){let I=this.values.get(u);this.values.set(u,n?[...I,...E]:[...E,...I]),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else this.values.set(u,E),this.sources.set(u,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:r=!1,getNativePaths:o=!1}){let a=this.get(e),n=this.settings.get(e);if(typeof n>"u")throw new it(`Couldn't find a configuration settings named "${e}"`);return xx(a,n,{hideSecrets:r,getNativePaths:o})}getSubprocessStreams(e,{header:r,prefix:o,report:a}){let n,u,A=oe.createWriteStream(e);if(this.get("enableInlineBuilds")){let p=a.createStreamReporter(`${o} ${Ot(this,"STDOUT","green")}`),h=a.createStreamReporter(`${o} ${Ot(this,"STDERR","red")}`);n=new G4.PassThrough,n.pipe(p),n.pipe(A),u=new G4.PassThrough,u.pipe(h),u.pipe(A)}else n=A,u=A,typeof r<"u"&&n.write(`${r} +`);return{stdout:n,stderr:u}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let o of r.resolvers||[])e.push(new o);return new vd([new l1,new Xn,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let o of r.fetchers||[])e.push(new o);return new pE([new hE,new dE,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let o of r.linkers||[])e.push(new o);return e}getSupportedArchitectures(){let e=I1(),r=this.get("supportedArchitectures"),o=r.get("os");o!==null&&(o=o.map(u=>u==="current"?e.os:u));let a=r.get("cpu");a!==null&&(a=a.map(u=>u==="current"?e.cpu:u));let n=r.get("libc");return n!==null&&(n=sl(n,u=>u==="current"?e.libc??sl.skip:u)),{os:o,cpu:a,libc:n}}async getPackageExtensions(){if(this.packageExtensions!==null)return this.packageExtensions;this.packageExtensions=new Map;let e=this.packageExtensions,r=(o,a,{userProvided:n=!1}={})=>{if(!ba(o.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let u=new Mt;u.load(a,{yamlCompatibilityMode:!0});let A=Gy(e,o.identHash),p=[];A.push([o.range,p]);let h={status:"inactive",userProvided:n,parentDescriptor:o};for(let E of u.dependencies.values())p.push({...h,type:"Dependency",descriptor:E});for(let E of u.peerDependencies.values())p.push({...h,type:"PeerDependency",descriptor:E});for(let[E,I]of u.peerDependenciesMeta)for(let[v,b]of Object.entries(I))p.push({...h,type:"PeerDependencyMeta",selector:E,key:v,value:b})};await this.triggerHook(o=>o.registerPackageExtensions,this,r);for(let[o,a]of this.get("packageExtensions"))r(nh(o,!0),iS(a),{userProvided:!0});return e}normalizeLocator(e){return ba(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):QE.test(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):e}normalizeDependency(e){return ba(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):QE.test(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):e}normalizeDependencyMap(e){return new Map([...e].map(([r,o])=>[r,this.normalizeDependency(o)]))}normalizePackage(e,{packageExtensions:r}){let o=$I(e),a=r.get(e.identHash);if(typeof a<"u"){let u=e.version;if(u!==null){for(let[A,p]of a)if(!!bf(u,A))for(let h of p)switch(h.status==="inactive"&&(h.status="redundant"),h.type){case"Dependency":typeof o.dependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.dependencies.set(h.descriptor.identHash,this.normalizeDependency(h.descriptor)));break;case"PeerDependency":typeof o.peerDependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.peerDependencies.set(h.descriptor.identHash,h.descriptor));break;case"PeerDependencyMeta":{let E=o.peerDependenciesMeta.get(h.selector);(typeof E>"u"||!Object.hasOwn(E,h.key)||E[h.key]!==h.value)&&(h.status="active",ol(o.peerDependenciesMeta,h.selector,()=>({}))[h.key]=h.value)}break;default:CL(h)}}}let n=u=>u.scope?`${u.scope}__${u.name}`:`${u.name}`;for(let u of o.peerDependenciesMeta.keys()){let A=Js(u);o.peerDependencies.has(A.identHash)||o.peerDependencies.set(A.identHash,In(A,"*"))}for(let u of o.peerDependencies.values()){if(u.scope==="types")continue;let A=n(u),p=eA("types",A),h=fn(p);o.peerDependencies.has(p.identHash)||o.peerDependenciesMeta.has(h)||(o.peerDependencies.set(p.identHash,In(p,"*")),o.peerDependenciesMeta.set(h,{optional:!0}))}return o.dependencies=new Map(ks(o.dependencies,([,u])=>Sa(u))),o.peerDependencies=new Map(ks(o.peerDependencies,([,u])=>Sa(u))),o}getLimit(e){return ol(this.limits,e,()=>(0,kle.default)(this.get(e)))}async triggerHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);!n||await n(...r)}}async triggerMultipleHooks(e,r){for(let o of r)await this.triggerHook(e,...o)}async reduceHook(e,r,...o){let a=r;for(let n of this.plugins.values()){let u=n.hooks;if(!u)continue;let A=e(u);!A||(a=await A(a,...o))}return a}async firstHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);if(!n)continue;let u=await n(...r);if(typeof u<"u")return u}return null}},Ve=rA;Ve.deleteProperty=Symbol(),Ve.telemetry=null});var Ur={};Kt(Ur,{EndStrategy:()=>Z4,ExecError:()=>Qx,PipeError:()=>P1,execvp:()=>j4,pipevp:()=>Gc});function Sd(t){return t!==null&&typeof t.fd=="number"}function J4(){}function z4(){for(let t of xd)t.kill()}async function Gc(t,e,{cwd:r,env:o=process.env,strict:a=!1,stdin:n=null,stdout:u,stderr:A,end:p=2}){let h=["pipe","pipe","pipe"];n===null?h[0]="ignore":Sd(n)&&(h[0]=n),Sd(u)&&(h[1]=u),Sd(A)&&(h[2]=A);let E=(0,X4.default)(t,e,{cwd:ue.fromPortablePath(r),env:{...o,PWD:ue.fromPortablePath(r)},stdio:h});xd.add(E),xd.size===1&&(process.on("SIGINT",J4),process.on("SIGTERM",z4)),!Sd(n)&&n!==null&&n.pipe(E.stdin),Sd(u)||E.stdout.pipe(u,{end:!1}),Sd(A)||E.stderr.pipe(A,{end:!1});let I=()=>{for(let v of new Set([u,A]))Sd(v)||v.end()};return new Promise((v,b)=>{E.on("error",C=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",J4),process.off("SIGTERM",z4)),(p===2||p===1)&&I(),b(C)}),E.on("close",(C,T)=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",J4),process.off("SIGTERM",z4)),(p===2||p===1&&C!==0)&&I(),C===0||!a?v({code:$4(C,T)}):b(new P1({fileName:t,code:C,signal:T}))})})}async function j4(t,e,{cwd:r,env:o=process.env,encoding:a="utf8",strict:n=!1}){let u=["ignore","pipe","pipe"],A=[],p=[],h=ue.fromPortablePath(r);typeof o.PWD<"u"&&(o={...o,PWD:h});let E=(0,X4.default)(t,e,{cwd:h,env:o,stdio:u});return E.stdout.on("data",I=>{A.push(I)}),E.stderr.on("data",I=>{p.push(I)}),await new Promise((I,v)=>{E.on("error",b=>{let C=Ve.create(r),T=Ot(C,t,yt.PATH);v(new zt(1,`Process ${T} failed to spawn`,L=>{L.reportError(1,` ${zu(C,{label:"Thrown Error",value:_c(yt.NO_HINT,b.message)})}`)}))}),E.on("close",(b,C)=>{let T=a==="buffer"?Buffer.concat(A):Buffer.concat(A).toString(a),L=a==="buffer"?Buffer.concat(p):Buffer.concat(p).toString(a);b===0||!n?I({code:$4(b,C),stdout:T,stderr:L}):v(new Qx({fileName:t,code:b,signal:C,stdout:T,stderr:L}))})})}function $4(t,e){let r=uot.get(e);return typeof r<"u"?128+r:t??1}function Aot(t,e,{configuration:r,report:o}){o.reportError(1,` ${zu(r,t!==null?{label:"Exit Code",value:_c(yt.NUMBER,t)}:{label:"Exit Signal",value:_c(yt.CODE,e)})}`)}var X4,Z4,P1,Qx,xd,uot,Px=Et(()=>{Pt();X4=$e(aR());D1();Yl();ql();Z4=(o=>(o[o.Never=0]="Never",o[o.ErrorCode=1]="ErrorCode",o[o.Always=2]="Always",o))(Z4||{}),P1=class extends zt{constructor({fileName:r,code:o,signal:a}){let n=Ve.create(K.cwd()),u=Ot(n,r,yt.PATH);super(1,`Child ${u} reported an error`,A=>{Aot(o,a,{configuration:n,report:A})});this.code=$4(o,a)}},Qx=class extends P1{constructor({fileName:r,code:o,signal:a,stdout:n,stderr:u}){super({fileName:r,code:o,signal:a});this.stdout=n,this.stderr=u}};xd=new Set;uot=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]])});function Tle(t){Fle=t}function S1(){return typeof eU>"u"&&(eU=Fle()),eU}var eU,Fle,tU=Et(()=>{Fle=()=>{throw new Error("Assertion failed: No libzip instance is available, and no factory was configured")}});var Rle=_((Fx,nU)=>{var fot=Object.assign({},Be("fs")),rU=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(t=t||__filename),function(e){e=e||{};var r=typeof e<"u"?e:{},o,a;r.ready=new Promise(function(We,tt){o=We,a=tt});var n={},u;for(u in r)r.hasOwnProperty(u)&&(n[u]=r[u]);var A=[],p="./this.program",h=function(We,tt){throw tt},E=!1,I=!0,v="";function b(We){return r.locateFile?r.locateFile(We,v):v+We}var C,T,L,U;I&&(E?v=Be("path").dirname(v)+"/":v=__dirname+"/",C=function(tt,It){var nr=ii(tt);return nr?It?nr:nr.toString():(L||(L=fot),U||(U=Be("path")),tt=U.normalize(tt),L.readFileSync(tt,It?null:"utf8"))},T=function(tt){var It=C(tt,!0);return It.buffer||(It=new Uint8Array(It)),Ee(It.buffer),It},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),A=process.argv.slice(2),h=function(We){process.exit(We)},r.inspect=function(){return"[Emscripten Module object]"});var J=r.print||console.log.bind(console),te=r.printErr||console.warn.bind(console);for(u in n)n.hasOwnProperty(u)&&(r[u]=n[u]);n=null,r.arguments&&(A=r.arguments),r.thisProgram&&(p=r.thisProgram),r.quit&&(h=r.quit);var le=0,pe=function(We){le=We},Ae;r.wasmBinary&&(Ae=r.wasmBinary);var ye=r.noExitRuntime||!0;typeof WebAssembly!="object"&&Ri("no native wasm support detected");function ae(We,tt,It){switch(tt=tt||"i8",tt.charAt(tt.length-1)==="*"&&(tt="i32"),tt){case"i1":return _e[We>>0];case"i8":return _e[We>>0];case"i16":return lp((We>>1)*2);case"i32":return Ms((We>>2)*4);case"i64":return Ms((We>>2)*4);case"float":return cu((We>>2)*4);case"double":return ap((We>>3)*8);default:Ri("invalid type for getValue: "+tt)}return null}var we,Pe=!1,g;function Ee(We,tt){We||Ri("Assertion failed: "+tt)}function De(We){var tt=r["_"+We];return Ee(tt,"Cannot call unknown function "+We+", make sure it is exported"),tt}function ce(We,tt,It,nr,$){var me={string:function(es){var xi=0;if(es!=null&&es!==0){var jo=(es.length<<2)+1;xi=Un(jo),ht(es,xi,jo)}return xi},array:function(es){var xi=Un(es.length);return Re(es,xi),xi}};function Le(es){return tt==="string"?Ie(es):tt==="boolean"?Boolean(es):es}var ft=De(We),pt=[],Rt=0;if(nr)for(var er=0;er=It)&&Te[nr];)++nr;return ee.decode(Te.subarray(We,nr))}function ke(We,tt,It,nr){if(!(nr>0))return 0;for(var $=It,me=It+nr-1,Le=0;Le=55296&&ft<=57343){var pt=We.charCodeAt(++Le);ft=65536+((ft&1023)<<10)|pt&1023}if(ft<=127){if(It>=me)break;tt[It++]=ft}else if(ft<=2047){if(It+1>=me)break;tt[It++]=192|ft>>6,tt[It++]=128|ft&63}else if(ft<=65535){if(It+2>=me)break;tt[It++]=224|ft>>12,tt[It++]=128|ft>>6&63,tt[It++]=128|ft&63}else{if(It+3>=me)break;tt[It++]=240|ft>>18,tt[It++]=128|ft>>12&63,tt[It++]=128|ft>>6&63,tt[It++]=128|ft&63}}return tt[It]=0,It-$}function ht(We,tt,It){return ke(We,Te,tt,It)}function H(We){for(var tt=0,It=0;It=55296&&nr<=57343&&(nr=65536+((nr&1023)<<10)|We.charCodeAt(++It)&1023),nr<=127?++tt:nr<=2047?tt+=2:nr<=65535?tt+=3:tt+=4}return tt}function lt(We){var tt=H(We)+1,It=Li(tt);return It&&ke(We,_e,It,tt),It}function Re(We,tt){_e.set(We,tt)}function Qe(We,tt){return We%tt>0&&(We+=tt-We%tt),We}var be,_e,Te,Je,He,x,w,S,y,F;function z(We){be=We,r.HEAP_DATA_VIEW=F=new DataView(We),r.HEAP8=_e=new Int8Array(We),r.HEAP16=Je=new Int16Array(We),r.HEAP32=x=new Int32Array(We),r.HEAPU8=Te=new Uint8Array(We),r.HEAPU16=He=new Uint16Array(We),r.HEAPU32=w=new Uint32Array(We),r.HEAPF32=S=new Float32Array(We),r.HEAPF64=y=new Float64Array(We)}var X=r.INITIAL_MEMORY||16777216,Z,ie=[],Se=[],Ne=[],ot=!1;function dt(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)xt(r.preRun.shift());oo(ie)}function jt(){ot=!0,oo(Se)}function $t(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Qr(r.postRun.shift());oo(Ne)}function xt(We){ie.unshift(We)}function an(We){Se.unshift(We)}function Qr(We){Ne.unshift(We)}var mr=0,xr=null,Wr=null;function Vn(We){mr++,r.monitorRunDependencies&&r.monitorRunDependencies(mr)}function Ns(We){if(mr--,r.monitorRunDependencies&&r.monitorRunDependencies(mr),mr==0&&(xr!==null&&(clearInterval(xr),xr=null),Wr)){var tt=Wr;Wr=null,tt()}}r.preloadedImages={},r.preloadedAudios={};function Ri(We){r.onAbort&&r.onAbort(We),We+="",te(We),Pe=!0,g=1,We="abort("+We+"). Build with -s ASSERTIONS=1 for more info.";var tt=new WebAssembly.RuntimeError(We);throw a(tt),tt}var ps="data:application/octet-stream;base64,";function io(We){return We.startsWith(ps)}var Si="data:application/octet-stream;base64,AGFzbQEAAAAB/wEkYAN/f38Bf2ABfwF/YAJ/fwF/YAF/AGAEf39/fwF/YAN/f38AYAV/f39/fwF/YAJ/fwBgBH9/f38AYAABf2AFf39/fn8BfmAEf35/fwF/YAR/f35/AX5gAn9+AX9gA398fwBgA39/fgF/YAF/AX5gBn9/f39/fwF/YAN/fn8Bf2AEf39/fwF+YAV/f35/fwF/YAR/f35/AX9gA39/fgF+YAJ/fgBgAn9/AX5gBX9/f39/AGADf35/AX5gBX5+f35/AX5gA39/fwF+YAZ/fH9/f38Bf2AAAGAHf35/f39+fwF/YAV/fn9/fwF/YAV/f39/fwF+YAJ+fwF/YAJ/fAACJQYBYQFhAAMBYQFiAAEBYQFjAAABYQFkAAEBYQFlAAIBYQFmAAED5wHlAQMAAwEDAwEHDAgDFgcNEgEDDRcFAQ8DEAUQAwIBAhgECxkEAQMBBQsFAwMDARACBAMAAggLBwEAAwADGgQDGwYGABwBBgMTFBEHBwcVCx4ABAgHBAICAgAfAQICAgIGFSAAIQAiAAIBBgIHAg0LEw0FAQUCACMDAQAUAAAGBQECBQUDCwsSAgEDBQIHAQEICAACCQQEAQABCAEBCQoBAwkBAQEBBgEGBgYABAIEBAQGEQQEAAARAAEDCQEJAQAJCQkBAQECCgoAAAMPAQEBAwACAgICBQIABwAKBgwHAAADAgICBQEEBQFwAT8/BQcBAYACgIACBgkBfwFBgInBAgsH+gEzAWcCAAFoAFQBaQDqAQFqALsBAWsAwQEBbACpAQFtAKgBAW4ApwEBbwClAQFwAKMBAXEAoAEBcgCbAQFzAMABAXQAugEBdQC5AQF2AEsBdwDiAQF4AMgBAXkAxwEBegDCAQFBAMkBAUIAuAEBQwAGAUQACQFFAKYBAUYAtwEBRwC2AQFIALUBAUkAtAEBSgCzAQFLALIBAUwAsQEBTQCwAQFOAK8BAU8AvAEBUACuAQFRAK0BAVIArAEBUwAaAVQACwFVAKQBAVYAMgFXAQABWACrAQFZAKoBAVoAxgEBXwDFAQEkAMQBAmFhAL8BAmJhAL4BAmNhAL0BCXgBAEEBCz6iAeMBjgGQAVpbjwFYnwGdAVeeAV1coQFZVlWcAZoBmQGYAZcBlgGVAZQBkwGSAZEB6QHoAecB5gHlAeQB4QHfAeAB3gHdAdwB2gHbAYUB2QHYAdcB1gHVAdQB0wHSAdEB0AHPAc4BzQHMAcsBygE4wwEK1N8G5QHMDAEHfwJAIABFDQAgAEEIayIDIABBBGsoAgAiAUF4cSIAaiEFAkAgAUEBcQ0AIAFBA3FFDQEgAyADKAIAIgFrIgNBxIQBKAIASQ0BIAAgAWohACADQciEASgCAEcEQCABQf8BTQRAIAMoAggiAiABQQN2IgRBA3RB3IQBakYaIAIgAygCDCIBRgRAQbSEAUG0hAEoAgBBfiAEd3E2AgAMAwsgAiABNgIMIAEgAjYCCAwCCyADKAIYIQYCQCADIAMoAgwiAUcEQCADKAIIIgIgATYCDCABIAI2AggMAQsCQCADQRRqIgIoAgAiBA0AIANBEGoiAigCACIEDQBBACEBDAELA0AgAiEHIAQiAUEUaiICKAIAIgQNACABQRBqIQIgASgCECIEDQALIAdBADYCAAsgBkUNAQJAIAMgAygCHCICQQJ0QeSGAWoiBCgCAEYEQCAEIAE2AgAgAQ0BQbiEAUG4hAEoAgBBfiACd3E2AgAMAwsgBkEQQRQgBigCECADRhtqIAE2AgAgAUUNAgsgASAGNgIYIAMoAhAiAgRAIAEgAjYCECACIAE2AhgLIAMoAhQiAkUNASABIAI2AhQgAiABNgIYDAELIAUoAgQiAUEDcUEDRw0AQbyEASAANgIAIAUgAUF+cTYCBCADIABBAXI2AgQgACADaiAANgIADwsgAyAFTw0AIAUoAgQiAUEBcUUNAAJAIAFBAnFFBEAgBUHMhAEoAgBGBEBBzIQBIAM2AgBBwIQBQcCEASgCACAAaiIANgIAIAMgAEEBcjYCBCADQciEASgCAEcNA0G8hAFBADYCAEHIhAFBADYCAA8LIAVByIQBKAIARgRAQciEASADNgIAQbyEAUG8hAEoAgAgAGoiADYCACADIABBAXI2AgQgACADaiAANgIADwsgAUF4cSAAaiEAAkAgAUH/AU0EQCAFKAIIIgIgAUEDdiIEQQN0QdyEAWpGGiACIAUoAgwiAUYEQEG0hAFBtIQBKAIAQX4gBHdxNgIADAILIAIgATYCDCABIAI2AggMAQsgBSgCGCEGAkAgBSAFKAIMIgFHBEAgBSgCCCICQcSEASgCAEkaIAIgATYCDCABIAI2AggMAQsCQCAFQRRqIgIoAgAiBA0AIAVBEGoiAigCACIEDQBBACEBDAELA0AgAiEHIAQiAUEUaiICKAIAIgQNACABQRBqIQIgASgCECIEDQALIAdBADYCAAsgBkUNAAJAIAUgBSgCHCICQQJ0QeSGAWoiBCgCAEYEQCAEIAE2AgAgAQ0BQbiEAUG4hAEoAgBBfiACd3E2AgAMAgsgBkEQQRQgBigCECAFRhtqIAE2AgAgAUUNAQsgASAGNgIYIAUoAhAiAgRAIAEgAjYCECACIAE2AhgLIAUoAhQiAkUNACABIAI2AhQgAiABNgIYCyADIABBAXI2AgQgACADaiAANgIAIANByIQBKAIARw0BQbyEASAANgIADwsgBSABQX5xNgIEIAMgAEEBcjYCBCAAIANqIAA2AgALIABB/wFNBEAgAEEDdiIBQQN0QdyEAWohAAJ/QbSEASgCACICQQEgAXQiAXFFBEBBtIQBIAEgAnI2AgAgAAwBCyAAKAIICyECIAAgAzYCCCACIAM2AgwgAyAANgIMIAMgAjYCCA8LQR8hAiADQgA3AhAgAEH///8HTQRAIABBCHYiASABQYD+P2pBEHZBCHEiAXQiAiACQYDgH2pBEHZBBHEiAnQiBCAEQYCAD2pBEHZBAnEiBHRBD3YgASACciAEcmsiAUEBdCAAIAFBFWp2QQFxckEcaiECCyADIAI2AhwgAkECdEHkhgFqIQECQAJAAkBBuIQBKAIAIgRBASACdCIHcUUEQEG4hAEgBCAHcjYCACABIAM2AgAgAyABNgIYDAELIABBAEEZIAJBAXZrIAJBH0YbdCECIAEoAgAhAQNAIAEiBCgCBEF4cSAARg0CIAJBHXYhASACQQF0IQIgBCABQQRxaiIHQRBqKAIAIgENAAsgByADNgIQIAMgBDYCGAsgAyADNgIMIAMgAzYCCAwBCyAEKAIIIgAgAzYCDCAEIAM2AgggA0EANgIYIAMgBDYCDCADIAA2AggLQdSEAUHUhAEoAgBBAWsiAEF/IAAbNgIACwuDBAEDfyACQYAETwRAIAAgASACEAIaIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAEEDcUUEQCAAIQIMAQsgAkEBSARAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAkEDcUUNASACIANJDQALCwJAIANBfHEiBEHAAEkNACACIARBQGoiBUsNAANAIAIgASgCADYCACACIAEoAgQ2AgQgAiABKAIINgIIIAIgASgCDDYCDCACIAEoAhA2AhAgAiABKAIUNgIUIAIgASgCGDYCGCACIAEoAhw2AhwgAiABKAIgNgIgIAIgASgCJDYCJCACIAEoAig2AiggAiABKAIsNgIsIAIgASgCMDYCMCACIAEoAjQ2AjQgAiABKAI4NgI4IAIgASgCPDYCPCABQUBrIQEgAkFAayICIAVNDQALCyACIARPDQEDQCACIAEoAgA2AgAgAUEEaiEBIAJBBGoiAiAESQ0ACwwBCyADQQRJBEAgACECDAELIAAgA0EEayIESwRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAiABLQABOgABIAIgAS0AAjoAAiACIAEtAAM6AAMgAUEEaiEBIAJBBGoiAiAETQ0ACwsgAiADSQRAA0AgAiABLQAAOgAAIAFBAWohASACQQFqIgIgA0cNAAsLIAALGgAgAARAIAAtAAEEQCAAKAIEEAYLIAAQBgsLoi4BDH8jAEEQayIMJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAEH0AU0EQEG0hAEoAgAiBUEQIABBC2pBeHEgAEELSRsiCEEDdiICdiIBQQNxBEAgAUF/c0EBcSACaiIDQQN0IgFB5IQBaigCACIEQQhqIQACQCAEKAIIIgIgAUHchAFqIgFGBEBBtIQBIAVBfiADd3E2AgAMAQsgAiABNgIMIAEgAjYCCAsgBCADQQN0IgFBA3I2AgQgASAEaiIBIAEoAgRBAXI2AgQMDQsgCEG8hAEoAgAiCk0NASABBEACQEECIAJ0IgBBACAAa3IgASACdHEiAEEAIABrcUEBayIAIABBDHZBEHEiAnYiAUEFdkEIcSIAIAJyIAEgAHYiAUECdkEEcSIAciABIAB2IgFBAXZBAnEiAHIgASAAdiIBQQF2QQFxIgByIAEgAHZqIgNBA3QiAEHkhAFqKAIAIgQoAggiASAAQdyEAWoiAEYEQEG0hAEgBUF+IAN3cSIFNgIADAELIAEgADYCDCAAIAE2AggLIARBCGohACAEIAhBA3I2AgQgBCAIaiICIANBA3QiASAIayIDQQFyNgIEIAEgBGogAzYCACAKBEAgCkEDdiIBQQN0QdyEAWohB0HIhAEoAgAhBAJ/IAVBASABdCIBcUUEQEG0hAEgASAFcjYCACAHDAELIAcoAggLIQEgByAENgIIIAEgBDYCDCAEIAc2AgwgBCABNgIIC0HIhAEgAjYCAEG8hAEgAzYCAAwNC0G4hAEoAgAiBkUNASAGQQAgBmtxQQFrIgAgAEEMdkEQcSICdiIBQQV2QQhxIgAgAnIgASAAdiIBQQJ2QQRxIgByIAEgAHYiAUEBdkECcSIAciABIAB2IgFBAXZBAXEiAHIgASAAdmpBAnRB5IYBaigCACIBKAIEQXhxIAhrIQMgASECA0ACQCACKAIQIgBFBEAgAigCFCIARQ0BCyAAKAIEQXhxIAhrIgIgAyACIANJIgIbIQMgACABIAIbIQEgACECDAELCyABIAhqIgkgAU0NAiABKAIYIQsgASABKAIMIgRHBEAgASgCCCIAQcSEASgCAEkaIAAgBDYCDCAEIAA2AggMDAsgAUEUaiICKAIAIgBFBEAgASgCECIARQ0EIAFBEGohAgsDQCACIQcgACIEQRRqIgIoAgAiAA0AIARBEGohAiAEKAIQIgANAAsgB0EANgIADAsLQX8hCCAAQb9/Sw0AIABBC2oiAEF4cSEIQbiEASgCACIJRQ0AQQAgCGshAwJAAkACQAJ/QQAgCEGAAkkNABpBHyAIQf///wdLDQAaIABBCHYiACAAQYD+P2pBEHZBCHEiAnQiACAAQYDgH2pBEHZBBHEiAXQiACAAQYCAD2pBEHZBAnEiAHRBD3YgASACciAAcmsiAEEBdCAIIABBFWp2QQFxckEcagsiBUECdEHkhgFqKAIAIgJFBEBBACEADAELQQAhACAIQQBBGSAFQQF2ayAFQR9GG3QhAQNAAkAgAigCBEF4cSAIayIHIANPDQAgAiEEIAciAw0AQQAhAyACIQAMAwsgACACKAIUIgcgByACIAFBHXZBBHFqKAIQIgJGGyAAIAcbIQAgAUEBdCEBIAINAAsLIAAgBHJFBEBBAiAFdCIAQQAgAGtyIAlxIgBFDQMgAEEAIABrcUEBayIAIABBDHZBEHEiAnYiAUEFdkEIcSIAIAJyIAEgAHYiAUECdkEEcSIAciABIAB2IgFBAXZBAnEiAHIgASAAdiIBQQF2QQFxIgByIAEgAHZqQQJ0QeSGAWooAgAhAAsgAEUNAQsDQCAAKAIEQXhxIAhrIgEgA0khAiABIAMgAhshAyAAIAQgAhshBCAAKAIQIgEEfyABBSAAKAIUCyIADQALCyAERQ0AIANBvIQBKAIAIAhrTw0AIAQgCGoiBiAETQ0BIAQoAhghBSAEIAQoAgwiAUcEQCAEKAIIIgBBxIQBKAIASRogACABNgIMIAEgADYCCAwKCyAEQRRqIgIoAgAiAEUEQCAEKAIQIgBFDQQgBEEQaiECCwNAIAIhByAAIgFBFGoiAigCACIADQAgAUEQaiECIAEoAhAiAA0ACyAHQQA2AgAMCQsgCEG8hAEoAgAiAk0EQEHIhAEoAgAhAwJAIAIgCGsiAUEQTwRAQbyEASABNgIAQciEASADIAhqIgA2AgAgACABQQFyNgIEIAIgA2ogATYCACADIAhBA3I2AgQMAQtByIQBQQA2AgBBvIQBQQA2AgAgAyACQQNyNgIEIAIgA2oiACAAKAIEQQFyNgIECyADQQhqIQAMCwsgCEHAhAEoAgAiBkkEQEHAhAEgBiAIayIBNgIAQcyEAUHMhAEoAgAiAiAIaiIANgIAIAAgAUEBcjYCBCACIAhBA3I2AgQgAkEIaiEADAsLQQAhACAIQS9qIgkCf0GMiAEoAgAEQEGUiAEoAgAMAQtBmIgBQn83AgBBkIgBQoCggICAgAQ3AgBBjIgBIAxBDGpBcHFB2KrVqgVzNgIAQaCIAUEANgIAQfCHAUEANgIAQYAgCyIBaiIFQQAgAWsiB3EiAiAITQ0KQeyHASgCACIEBEBB5IcBKAIAIgMgAmoiASADTQ0LIAEgBEsNCwtB8IcBLQAAQQRxDQUCQAJAQcyEASgCACIDBEBB9IcBIQADQCADIAAoAgAiAU8EQCABIAAoAgRqIANLDQMLIAAoAggiAA0ACwtBABApIgFBf0YNBiACIQVBkIgBKAIAIgNBAWsiACABcQRAIAIgAWsgACABakEAIANrcWohBQsgBSAITQ0GIAVB/v///wdLDQZB7IcBKAIAIgQEQEHkhwEoAgAiAyAFaiIAIANNDQcgACAESw0HCyAFECkiACABRw0BDAgLIAUgBmsgB3EiBUH+////B0sNBSAFECkiASAAKAIAIAAoAgRqRg0EIAEhAAsCQCAAQX9GDQAgCEEwaiAFTQ0AQZSIASgCACIBIAkgBWtqQQAgAWtxIgFB/v///wdLBEAgACEBDAgLIAEQKUF/RwRAIAEgBWohBSAAIQEMCAtBACAFaxApGgwFCyAAIgFBf0cNBgwECwALQQAhBAwHC0EAIQEMBQsgAUF/Rw0CC0HwhwFB8IcBKAIAQQRyNgIACyACQf7///8HSw0BIAIQKSEBQQAQKSEAIAFBf0YNASAAQX9GDQEgACABTQ0BIAAgAWsiBSAIQShqTQ0BC0HkhwFB5IcBKAIAIAVqIgA2AgBB6IcBKAIAIABJBEBB6IcBIAA2AgALAkACQAJAQcyEASgCACIHBEBB9IcBIQADQCABIAAoAgAiAyAAKAIEIgJqRg0CIAAoAggiAA0ACwwCC0HEhAEoAgAiAEEAIAAgAU0bRQRAQcSEASABNgIAC0EAIQBB+IcBIAU2AgBB9IcBIAE2AgBB1IQBQX82AgBB2IQBQYyIASgCADYCAEGAiAFBADYCAANAIABBA3QiA0HkhAFqIANB3IQBaiICNgIAIANB6IQBaiACNgIAIABBAWoiAEEgRw0AC0HAhAEgBUEoayIDQXggAWtBB3FBACABQQhqQQdxGyIAayICNgIAQcyEASAAIAFqIgA2AgAgACACQQFyNgIEIAEgA2pBKDYCBEHQhAFBnIgBKAIANgIADAILIAAtAAxBCHENACADIAdLDQAgASAHTQ0AIAAgAiAFajYCBEHMhAEgB0F4IAdrQQdxQQAgB0EIakEHcRsiAGoiAjYCAEHAhAFBwIQBKAIAIAVqIgEgAGsiADYCACACIABBAXI2AgQgASAHakEoNgIEQdCEAUGciAEoAgA2AgAMAQtBxIQBKAIAIAFLBEBBxIQBIAE2AgALIAEgBWohAkH0hwEhAAJAAkACQAJAAkACQANAIAIgACgCAEcEQCAAKAIIIgANAQwCCwsgAC0ADEEIcUUNAQtB9IcBIQADQCAHIAAoAgAiAk8EQCACIAAoAgRqIgQgB0sNAwsgACgCCCEADAALAAsgACABNgIAIAAgACgCBCAFajYCBCABQXggAWtBB3FBACABQQhqQQdxG2oiCSAIQQNyNgIEIAJBeCACa0EHcUEAIAJBCGpBB3EbaiIFIAggCWoiBmshAiAFIAdGBEBBzIQBIAY2AgBBwIQBQcCEASgCACACaiIANgIAIAYgAEEBcjYCBAwDCyAFQciEASgCAEYEQEHIhAEgBjYCAEG8hAFBvIQBKAIAIAJqIgA2AgAgBiAAQQFyNgIEIAAgBmogADYCAAwDCyAFKAIEIgBBA3FBAUYEQCAAQXhxIQcCQCAAQf8BTQRAIAUoAggiAyAAQQN2IgBBA3RB3IQBakYaIAMgBSgCDCIBRgRAQbSEAUG0hAEoAgBBfiAAd3E2AgAMAgsgAyABNgIMIAEgAzYCCAwBCyAFKAIYIQgCQCAFIAUoAgwiAUcEQCAFKAIIIgAgATYCDCABIAA2AggMAQsCQCAFQRRqIgAoAgAiAw0AIAVBEGoiACgCACIDDQBBACEBDAELA0AgACEEIAMiAUEUaiIAKAIAIgMNACABQRBqIQAgASgCECIDDQALIARBADYCAAsgCEUNAAJAIAUgBSgCHCIDQQJ0QeSGAWoiACgCAEYEQCAAIAE2AgAgAQ0BQbiEAUG4hAEoAgBBfiADd3E2AgAMAgsgCEEQQRQgCCgCECAFRhtqIAE2AgAgAUUNAQsgASAINgIYIAUoAhAiAARAIAEgADYCECAAIAE2AhgLIAUoAhQiAEUNACABIAA2AhQgACABNgIYCyAFIAdqIQUgAiAHaiECCyAFIAUoAgRBfnE2AgQgBiACQQFyNgIEIAIgBmogAjYCACACQf8BTQRAIAJBA3YiAEEDdEHchAFqIQICf0G0hAEoAgAiAUEBIAB0IgBxRQRAQbSEASAAIAFyNgIAIAIMAQsgAigCCAshACACIAY2AgggACAGNgIMIAYgAjYCDCAGIAA2AggMAwtBHyEAIAJB////B00EQCACQQh2IgAgAEGA/j9qQRB2QQhxIgN0IgAgAEGA4B9qQRB2QQRxIgF0IgAgAEGAgA9qQRB2QQJxIgB0QQ92IAEgA3IgAHJrIgBBAXQgAiAAQRVqdkEBcXJBHGohAAsgBiAANgIcIAZCADcCECAAQQJ0QeSGAWohBAJAQbiEASgCACIDQQEgAHQiAXFFBEBBuIQBIAEgA3I2AgAgBCAGNgIAIAYgBDYCGAwBCyACQQBBGSAAQQF2ayAAQR9GG3QhACAEKAIAIQEDQCABIgMoAgRBeHEgAkYNAyAAQR12IQEgAEEBdCEAIAMgAUEEcWoiBCgCECIBDQALIAQgBjYCECAGIAM2AhgLIAYgBjYCDCAGIAY2AggMAgtBwIQBIAVBKGsiA0F4IAFrQQdxQQAgAUEIakEHcRsiAGsiAjYCAEHMhAEgACABaiIANgIAIAAgAkEBcjYCBCABIANqQSg2AgRB0IQBQZyIASgCADYCACAHIARBJyAEa0EHcUEAIARBJ2tBB3EbakEvayIAIAAgB0EQakkbIgJBGzYCBCACQfyHASkCADcCECACQfSHASkCADcCCEH8hwEgAkEIajYCAEH4hwEgBTYCAEH0hwEgATYCAEGAiAFBADYCACACQRhqIQADQCAAQQc2AgQgAEEIaiEBIABBBGohACABIARJDQALIAIgB0YNAyACIAIoAgRBfnE2AgQgByACIAdrIgRBAXI2AgQgAiAENgIAIARB/wFNBEAgBEEDdiIAQQN0QdyEAWohAgJ/QbSEASgCACIBQQEgAHQiAHFFBEBBtIQBIAAgAXI2AgAgAgwBCyACKAIICyEAIAIgBzYCCCAAIAc2AgwgByACNgIMIAcgADYCCAwEC0EfIQAgB0IANwIQIARB////B00EQCAEQQh2IgAgAEGA/j9qQRB2QQhxIgJ0IgAgAEGA4B9qQRB2QQRxIgF0IgAgAEGAgA9qQRB2QQJxIgB0QQ92IAEgAnIgAHJrIgBBAXQgBCAAQRVqdkEBcXJBHGohAAsgByAANgIcIABBAnRB5IYBaiEDAkBBuIQBKAIAIgJBASAAdCIBcUUEQEG4hAEgASACcjYCACADIAc2AgAgByADNgIYDAELIARBAEEZIABBAXZrIABBH0YbdCEAIAMoAgAhAQNAIAEiAigCBEF4cSAERg0EIABBHXYhASAAQQF0IQAgAiABQQRxaiIDKAIQIgENAAsgAyAHNgIQIAcgAjYCGAsgByAHNgIMIAcgBzYCCAwDCyADKAIIIgAgBjYCDCADIAY2AgggBkEANgIYIAYgAzYCDCAGIAA2AggLIAlBCGohAAwFCyACKAIIIgAgBzYCDCACIAc2AgggB0EANgIYIAcgAjYCDCAHIAA2AggLQcCEASgCACIAIAhNDQBBwIQBIAAgCGsiATYCAEHMhAFBzIQBKAIAIgIgCGoiADYCACAAIAFBAXI2AgQgAiAIQQNyNgIEIAJBCGohAAwDC0GEhAFBMDYCAEEAIQAMAgsCQCAFRQ0AAkAgBCgCHCICQQJ0QeSGAWoiACgCACAERgRAIAAgATYCACABDQFBuIQBIAlBfiACd3EiCTYCAAwCCyAFQRBBFCAFKAIQIARGG2ogATYCACABRQ0BCyABIAU2AhggBCgCECIABEAgASAANgIQIAAgATYCGAsgBCgCFCIARQ0AIAEgADYCFCAAIAE2AhgLAkAgA0EPTQRAIAQgAyAIaiIAQQNyNgIEIAAgBGoiACAAKAIEQQFyNgIEDAELIAQgCEEDcjYCBCAGIANBAXI2AgQgAyAGaiADNgIAIANB/wFNBEAgA0EDdiIAQQN0QdyEAWohAgJ/QbSEASgCACIBQQEgAHQiAHFFBEBBtIQBIAAgAXI2AgAgAgwBCyACKAIICyEAIAIgBjYCCCAAIAY2AgwgBiACNgIMIAYgADYCCAwBC0EfIQAgA0H///8HTQRAIANBCHYiACAAQYD+P2pBEHZBCHEiAnQiACAAQYDgH2pBEHZBBHEiAXQiACAAQYCAD2pBEHZBAnEiAHRBD3YgASACciAAcmsiAEEBdCADIABBFWp2QQFxckEcaiEACyAGIAA2AhwgBkIANwIQIABBAnRB5IYBaiECAkACQCAJQQEgAHQiAXFFBEBBuIQBIAEgCXI2AgAgAiAGNgIAIAYgAjYCGAwBCyADQQBBGSAAQQF2ayAAQR9GG3QhACACKAIAIQgDQCAIIgEoAgRBeHEgA0YNAiAAQR12IQIgAEEBdCEAIAEgAkEEcWoiAigCECIIDQALIAIgBjYCECAGIAE2AhgLIAYgBjYCDCAGIAY2AggMAQsgASgCCCIAIAY2AgwgASAGNgIIIAZBADYCGCAGIAE2AgwgBiAANgIICyAEQQhqIQAMAQsCQCALRQ0AAkAgASgCHCICQQJ0QeSGAWoiACgCACABRgRAIAAgBDYCACAEDQFBuIQBIAZBfiACd3E2AgAMAgsgC0EQQRQgCygCECABRhtqIAQ2AgAgBEUNAQsgBCALNgIYIAEoAhAiAARAIAQgADYCECAAIAQ2AhgLIAEoAhQiAEUNACAEIAA2AhQgACAENgIYCwJAIANBD00EQCABIAMgCGoiAEEDcjYCBCAAIAFqIgAgACgCBEEBcjYCBAwBCyABIAhBA3I2AgQgCSADQQFyNgIEIAMgCWogAzYCACAKBEAgCkEDdiIAQQN0QdyEAWohBEHIhAEoAgAhAgJ/QQEgAHQiACAFcUUEQEG0hAEgACAFcjYCACAEDAELIAQoAggLIQAgBCACNgIIIAAgAjYCDCACIAQ2AgwgAiAANgIIC0HIhAEgCTYCAEG8hAEgAzYCAAsgAUEIaiEACyAMQRBqJAAgAAuJAQEDfyAAKAIcIgEQMAJAIAAoAhAiAiABKAIQIgMgAiADSRsiAkUNACAAKAIMIAEoAgggAhAHGiAAIAAoAgwgAmo2AgwgASABKAIIIAJqNgIIIAAgACgCFCACajYCFCAAIAAoAhAgAms2AhAgASABKAIQIAJrIgA2AhAgAA0AIAEgASgCBDYCCAsLzgEBBX8CQCAARQ0AIAAoAjAiAQRAIAAgAUEBayIBNgIwIAENAQsgACgCIARAIABBATYCICAAEBoaCyAAKAIkQQFGBEAgABBDCwJAIAAoAiwiAUUNACAALQAoDQACQCABKAJEIgNFDQAgASgCTCEEA0AgACAEIAJBAnRqIgUoAgBHBEAgAyACQQFqIgJHDQEMAgsLIAUgBCADQQFrIgJBAnRqKAIANgIAIAEgAjYCRAsLIABBAEIAQQUQDhogACgCACIBBEAgARALCyAAEAYLC1oCAn4BfwJ/AkACQCAALQAARQ0AIAApAxAiAUJ9Vg0AIAFCAnwiAiAAKQMIWA0BCyAAQQA6AABBAAwBC0EAIAAoAgQiA0UNABogACACNwMQIAMgAadqLwAACwthAgJ+AX8CQAJAIAAtAABFDQAgACkDECICQn1WDQAgAkICfCIDIAApAwhYDQELIABBADoAAA8LIAAoAgQiBEUEQA8LIAAgAzcDECAEIAKnaiIAIAFBCHY6AAEgACABOgAAC8wCAQJ/IwBBEGsiBCQAAkAgACkDGCADrYinQQFxRQRAIABBDGoiAARAIABBADYCBCAAQRw2AgALQn8hAgwBCwJ+IAAoAgAiBUUEQCAAKAIIIAEgAiADIAAoAgQRDAAMAQsgBSAAKAIIIAEgAiADIAAoAgQRCgALIgJCf1UNAAJAIANBBGsOCwEAAAAAAAAAAAABAAsCQAJAIAAtABhBEHFFBEAgAEEMaiIBBEAgAUEANgIEIAFBHDYCAAsMAQsCfiAAKAIAIgFFBEAgACgCCCAEQQhqQghBBCAAKAIEEQwADAELIAEgACgCCCAEQQhqQghBBCAAKAIEEQoAC0J/VQ0BCyAAQQxqIgAEQCAAQQA2AgQgAEEUNgIACwwBCyAEKAIIIQEgBCgCDCEDIABBDGoiAARAIAAgAzYCBCAAIAE2AgALCyAEQRBqJAAgAguTFQIOfwN+AkACQAJAAkACQAJAAkACQAJAAkACQCAAKALwLQRAIAAoAogBQQFIDQEgACgCACIEKAIsQQJHDQQgAC8B5AENAyAALwHoAQ0DIAAvAewBDQMgAC8B8AENAyAALwH0AQ0DIAAvAfgBDQMgAC8B/AENAyAALwGcAg0DIAAvAaACDQMgAC8BpAINAyAALwGoAg0DIAAvAawCDQMgAC8BsAINAyAALwG0Ag0DIAAvAbgCDQMgAC8BvAINAyAALwHAAg0DIAAvAcQCDQMgAC8ByAINAyAALwHUAg0DIAAvAdgCDQMgAC8B3AINAyAALwHgAg0DIAAvAYgCDQIgAC8BjAINAiAALwGYAg0CQSAhBgNAIAAgBkECdCIFai8B5AENAyAAIAVBBHJqLwHkAQ0DIAAgBUEIcmovAeQBDQMgACAFQQxyai8B5AENAyAGQQRqIgZBgAJHDQALDAMLIABBBzYC/C0gAkF8Rw0FIAFFDQUMBgsgAkEFaiIEIQcMAwtBASEHCyAEIAc2AiwLIAAgAEHoFmoQUSAAIABB9BZqEFEgAC8B5gEhBCAAIABB7BZqKAIAIgxBAnRqQf//AzsB6gEgAEGQFmohECAAQZQWaiERIABBjBZqIQdBACEGIAxBAE4EQEEHQYoBIAQbIQ1BBEEDIAQbIQpBfyEJA0AgBCEIIAAgCyIOQQFqIgtBAnRqLwHmASEEAkACQCAGQQFqIgVB//8DcSIPIA1B//8DcU8NACAEIAhHDQAgBSEGDAELAn8gACAIQQJ0akHMFWogCkH//wNxIA9LDQAaIAgEQEEBIQUgByAIIAlGDQEaIAAgCEECdGpBzBVqIgYgBi8BAEEBajsBACAHDAELQQEhBSAQIBEgBkH//wNxQQpJGwsiBiAGLwEAIAVqOwEAQQAhBgJ/IARFBEBBAyEKQYoBDAELQQNBBCAEIAhGIgUbIQpBBkEHIAUbCyENIAghCQsgDCAORw0ACwsgAEHaE2ovAQAhBCAAIABB+BZqKAIAIgxBAnRqQd4TakH//wM7AQBBACEGIAxBAE4EQEEHQYoBIAQbIQ1BBEEDIAQbIQpBfyEJQQAhCwNAIAQhCCAAIAsiDkEBaiILQQJ0akHaE2ovAQAhBAJAAkAgBkEBaiIFQf//A3EiDyANQf//A3FPDQAgBCAIRw0AIAUhBgwBCwJ/IAAgCEECdGpBzBVqIApB//8DcSAPSw0AGiAIBEBBASEFIAcgCCAJRg0BGiAAIAhBAnRqQcwVaiIGIAYvAQBBAWo7AQAgBwwBC0EBIQUgECARIAZB//8DcUEKSRsLIgYgBi8BACAFajsBAEEAIQYCfyAERQRAQQMhCkGKAQwBC0EDQQQgBCAIRiIFGyEKQQZBByAFGwshDSAIIQkLIAwgDkcNAAsLIAAgAEGAF2oQUSAAIAAoAvgtAn9BEiAAQYoWai8BAA0AGkERIABB0hVqLwEADQAaQRAgAEGGFmovAQANABpBDyAAQdYVai8BAA0AGkEOIABBghZqLwEADQAaQQ0gAEHaFWovAQANABpBDCAAQf4Vai8BAA0AGkELIABB3hVqLwEADQAaQQogAEH6FWovAQANABpBCSAAQeIVai8BAA0AGkEIIABB9hVqLwEADQAaQQcgAEHmFWovAQANABpBBiAAQfIVai8BAA0AGkEFIABB6hVqLwEADQAaQQQgAEHuFWovAQANABpBA0ECIABBzhVqLwEAGwsiBkEDbGoiBEERajYC+C0gACgC/C1BCmpBA3YiByAEQRtqQQN2IgRNBEAgByEEDAELIAAoAowBQQRHDQAgByEECyAEIAJBBGpPQQAgARsNASAEIAdHDQQLIANBAmqtIRIgACkDmC4hFCAAKAKgLiIBQQNqIgdBP0sNASASIAGthiAUhCESDAILIAAgASACIAMQOQwDCyABQcAARgRAIAAoAgQgACgCEGogFDcAACAAIAAoAhBBCGo2AhBBAyEHDAELIAAoAgQgACgCEGogEiABrYYgFIQ3AAAgACAAKAIQQQhqNgIQIAFBPWshByASQcAAIAFrrYghEgsgACASNwOYLiAAIAc2AqAuIABBgMEAQYDKABCHAQwBCyADQQRqrSESIAApA5guIRQCQCAAKAKgLiIBQQNqIgRBP00EQCASIAGthiAUhCESDAELIAFBwABGBEAgACgCBCAAKAIQaiAUNwAAIAAgACgCEEEIajYCEEEDIQQMAQsgACgCBCAAKAIQaiASIAGthiAUhDcAACAAIAAoAhBBCGo2AhAgAUE9ayEEIBJBwAAgAWutiCESCyAAIBI3A5guIAAgBDYCoC4gAEHsFmooAgAiC6xCgAJ9IRMgAEH4FmooAgAhCQJAAkACfwJ+AkACfwJ/IARBOk0EQCATIASthiAShCETIARBBWoMAQsgBEHAAEYEQCAAKAIEIAAoAhBqIBI3AAAgACAAKAIQQQhqNgIQIAmsIRJCBSEUQQoMAgsgACgCBCAAKAIQaiATIASthiAShDcAACAAIAAoAhBBCGo2AhAgE0HAACAEa62IIRMgBEE7awshBSAJrCESIAVBOksNASAFrSEUIAVBBWoLIQcgEiAUhiAThAwBCyAFQcAARgRAIAAoAgQgACgCEGogEzcAACAAIAAoAhBBCGo2AhAgBq1CA30hE0IFIRRBCQwCCyAAKAIEIAAoAhBqIBIgBa2GIBOENwAAIAAgACgCEEEIajYCECAFQTtrIQcgEkHAACAFa62ICyESIAatQgN9IRMgB0E7Sw0BIAetIRQgB0EEagshBCATIBSGIBKEIRMMAQsgB0HAAEYEQCAAKAIEIAAoAhBqIBI3AAAgACAAKAIQQQhqNgIQQQQhBAwBCyAAKAIEIAAoAhBqIBMgB62GIBKENwAAIAAgACgCEEEIajYCECAHQTxrIQQgE0HAACAHa62IIRMLQQAhBQNAIAAgBSIBQZDWAGotAABBAnRqQc4VajMBACEUAn8gBEE8TQRAIBQgBK2GIBOEIRMgBEEDagwBCyAEQcAARgRAIAAoAgQgACgCEGogEzcAACAAIAAoAhBBCGo2AhAgFCETQQMMAQsgACgCBCAAKAIQaiAUIASthiAThDcAACAAIAAoAhBBCGo2AhAgFEHAACAEa62IIRMgBEE9awshBCABQQFqIQUgASAGRw0ACyAAIAQ2AqAuIAAgEzcDmC4gACAAQeQBaiICIAsQhgEgACAAQdgTaiIBIAkQhgEgACACIAEQhwELIAAQiAEgAwRAAkAgACgCoC4iBEE5TgRAIAAoAgQgACgCEGogACkDmC43AAAgACAAKAIQQQhqNgIQDAELIARBGU4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgQ2AqAuCyAEQQlOBH8gACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACgCoC5BEGsFIAQLQQFIDQAgACAAKAIQIgFBAWo2AhAgASAAKAIEaiAAKQOYLjwAAAsgAEEANgKgLiAAQgA3A5guCwsZACAABEAgACgCABAGIAAoAgwQBiAAEAYLC6wBAQJ+Qn8hAwJAIAAtACgNAAJAAkAgACgCIEUNACACQgBTDQAgAlANASABDQELIABBDGoiAARAIABBADYCBCAAQRI2AgALQn8PCyAALQA1DQBCACEDIAAtADQNACACUA0AA0AgACABIAOnaiACIAN9QQEQDiIEQn9XBEAgAEEBOgA1Qn8gAyADUBsPCyAEUEUEQCADIAR8IgMgAloNAgwBCwsgAEEBOgA0CyADC3UCAn4BfwJAAkAgAC0AAEUNACAAKQMQIgJCe1YNACACQgR8IgMgACkDCFgNAQsgAEEAOgAADwsgACgCBCIERQRADwsgACADNwMQIAQgAqdqIgAgAUEYdjoAAyAAIAFBEHY6AAIgACABQQh2OgABIAAgAToAAAtUAgF+AX8CQAJAIAAtAABFDQAgASAAKQMQIgF8IgIgAVQNACACIAApAwhYDQELIABBADoAAEEADwsgACgCBCIDRQRAQQAPCyAAIAI3AxAgAyABp2oLdwECfyMAQRBrIgMkAEF/IQQCQCAALQAoDQAgACgCIEEAIAJBA0kbRQRAIABBDGoiAARAIABBADYCBCAAQRI2AgALDAELIAMgAjYCCCADIAE3AwAgACADQhBBBhAOQgBTDQBBACEEIABBADoANAsgA0EQaiQAIAQLVwICfgF/AkACQCAALQAARQ0AIAApAxAiAUJ7Vg0AIAFCBHwiAiAAKQMIWA0BCyAAQQA6AABBAA8LIAAoAgQiA0UEQEEADwsgACACNwMQIAMgAadqKAAAC1UCAX4BfyAABEACQCAAKQMIUA0AQgEhAQNAIAAoAgAgAkEEdGoQPiABIAApAwhaDQEgAachAiABQgF8IQEMAAsACyAAKAIAEAYgACgCKBAQIAAQBgsLZAECfwJAAkACQCAARQRAIAGnEAkiA0UNAkEYEAkiAkUNAQwDCyAAIQNBGBAJIgINAkEADwsgAxAGC0EADwsgAkIANwMQIAIgATcDCCACIAM2AgQgAkEBOgAAIAIgAEU6AAEgAgudAQICfgF/AkACQCAALQAARQ0AIAApAxAiAkJ3Vg0AIAJCCHwiAyAAKQMIWA0BCyAAQQA6AAAPCyAAKAIEIgRFBEAPCyAAIAM3AxAgBCACp2oiACABQjiIPAAHIAAgAUIwiDwABiAAIAFCKIg8AAUgACABQiCIPAAEIAAgAUIYiDwAAyAAIAFCEIg8AAIgACABQgiIPAABIAAgATwAAAvwAgICfwF+AkAgAkUNACAAIAJqIgNBAWsgAToAACAAIAE6AAAgAkEDSQ0AIANBAmsgAToAACAAIAE6AAEgA0EDayABOgAAIAAgAToAAiACQQdJDQAgA0EEayABOgAAIAAgAToAAyACQQlJDQAgAEEAIABrQQNxIgRqIgMgAUH/AXFBgYKECGwiADYCACADIAIgBGtBfHEiAmoiAUEEayAANgIAIAJBCUkNACADIAA2AgggAyAANgIEIAFBCGsgADYCACABQQxrIAA2AgAgAkEZSQ0AIAMgADYCGCADIAA2AhQgAyAANgIQIAMgADYCDCABQRBrIAA2AgAgAUEUayAANgIAIAFBGGsgADYCACABQRxrIAA2AgAgAiADQQRxQRhyIgFrIgJBIEkNACAArUKBgICAEH4hBSABIANqIQEDQCABIAU3AxggASAFNwMQIAEgBTcDCCABIAU3AwAgAUEgaiEBIAJBIGsiAkEfSw0ACwsLbwEDfyAAQQxqIQICQAJ/IAAoAiAiAUUEQEF/IQFBEgwBCyAAIAFBAWsiAzYCIEEAIQEgAw0BIABBAEIAQQIQDhogACgCACIARQ0BIAAQGkF/Sg0BQRQLIQAgAgRAIAJBADYCBCACIAA2AgALCyABC58BAgF/AX4CfwJAAn4gACgCACIDKAIkQQFGQQAgAkJ/VRtFBEAgA0EMaiIBBEAgAUEANgIEIAFBEjYCAAtCfwwBCyADIAEgAkELEA4LIgRCf1cEQCAAKAIAIQEgAEEIaiIABEAgACABKAIMNgIAIAAgASgCEDYCBAsMAQtBACACIARRDQEaIABBCGoEQCAAQRs2AgwgAEEGNgIICwtBfwsLJAEBfyAABEADQCAAKAIAIQEgACgCDBAGIAAQBiABIgANAAsLC5gBAgJ+AX8CQAJAIAAtAABFDQAgACkDECIBQndWDQAgAUIIfCICIAApAwhYDQELIABBADoAAEIADwsgACgCBCIDRQRAQgAPCyAAIAI3AxAgAyABp2oiADEABkIwhiAAMQAHQjiGhCAAMQAFQiiGhCAAMQAEQiCGhCAAMQADQhiGhCAAMQACQhCGhCAAMQABQgiGhCAAMQAAfAsjACAAQShGBEAgAhAGDwsgAgRAIAEgAkEEaygCACAAEQcACwsyACAAKAIkQQFHBEAgAEEMaiIABEAgAEEANgIEIABBEjYCAAtCfw8LIABBAEIAQQ0QDgsPACAABEAgABA2IAAQBgsLgAEBAX8gAC0AKAR/QX8FIAFFBEAgAEEMagRAIABBADYCECAAQRI2AgwLQX8PCyABECoCQCAAKAIAIgJFDQAgAiABECFBf0oNACAAKAIAIQEgAEEMaiIABEAgACABKAIMNgIAIAAgASgCEDYCBAtBfw8LIAAgAUI4QQMQDkI/h6cLC38BA38gACEBAkAgAEEDcQRAA0AgAS0AAEUNAiABQQFqIgFBA3ENAAsLA0AgASICQQRqIQEgAigCACIDQX9zIANBgYKECGtxQYCBgoR4cUUNAAsgA0H/AXFFBEAgAiAAaw8LA0AgAi0AASEDIAJBAWoiASECIAMNAAsLIAEgAGsL3wIBCH8gAEUEQEEBDwsCQCAAKAIIIgINAEEBIQQgAC8BBCIHRQRAQQEhAgwBCyAAKAIAIQgDQAJAIAMgCGoiBS0AACICQSBPBEAgAkEYdEEYdUF/Sg0BCyACQQ1NQQBBASACdEGAzABxGw0AAn8CfyACQeABcUHAAUYEQEEBIQYgA0EBagwBCyACQfABcUHgAUYEQCADQQJqIQNBACEGQQEMAgsgAkH4AXFB8AFHBEBBBCECDAULQQAhBiADQQNqCyEDQQALIQlBBCECIAMgB08NAiAFLQABQcABcUGAAUcNAkEDIQQgBg0AIAUtAAJBwAFxQYABRw0CIAkNACAFLQADQcABcUGAAUcNAgsgBCECIANBAWoiAyAHSQ0ACwsgACACNgIIAn8CQCABRQ0AAkAgAUECRw0AIAJBA0cNAEECIQIgAEECNgIICyABIAJGDQBBBSACQQFHDQEaCyACCwtIAgJ+An8jAEEQayIEIAE2AgxCASAArYYhAgNAIAQgAUEEaiIANgIMIAIiA0IBIAEoAgAiBa2GhCECIAAhASAFQX9KDQALIAMLhwUBB38CQAJAIABFBEBBxRQhAiABRQ0BIAFBADYCAEHFFA8LIAJBwABxDQEgACgCCEUEQCAAQQAQIxoLIAAoAgghBAJAIAJBgAFxBEAgBEEBa0ECTw0BDAMLIARBBEcNAgsCQCAAKAIMIgINACAAAn8gACgCACEIIABBEGohCUEAIQICQAJAAkACQCAALwEEIgUEQEEBIQQgBUEBcSEHIAVBAUcNAQwCCyAJRQ0CIAlBADYCAEEADAQLIAVBfnEhBgNAIARBAUECQQMgAiAIai0AAEEBdEHQFGovAQAiCkGAEEkbIApBgAFJG2pBAUECQQMgCCACQQFyai0AAEEBdEHQFGovAQAiBEGAEEkbIARBgAFJG2ohBCACQQJqIQIgBkECayIGDQALCwJ/IAcEQCAEQQFBAkEDIAIgCGotAABBAXRB0BRqLwEAIgJBgBBJGyACQYABSRtqIQQLIAQLEAkiB0UNASAFQQEgBUEBSxshCkEAIQVBACEGA0AgBSAHaiEDAn8gBiAIai0AAEEBdEHQFGovAQAiAkH/AE0EQCADIAI6AAAgBUEBagwBCyACQf8PTQRAIAMgAkE/cUGAAXI6AAEgAyACQQZ2QcABcjoAACAFQQJqDAELIAMgAkE/cUGAAXI6AAIgAyACQQx2QeABcjoAACADIAJBBnZBP3FBgAFyOgABIAVBA2oLIQUgBkEBaiIGIApHDQALIAcgBEEBayICakEAOgAAIAlFDQAgCSACNgIACyAHDAELIAMEQCADQQA2AgQgA0EONgIAC0EACyICNgIMIAINAEEADwsgAUUNACABIAAoAhA2AgALIAIPCyABBEAgASAALwEENgIACyAAKAIAC4MBAQR/QRIhBQJAAkAgACkDMCABWA0AIAGnIQYgACgCQCEEIAJBCHEiB0UEQCAEIAZBBHRqKAIEIgINAgsgBCAGQQR0aiIEKAIAIgJFDQAgBC0ADEUNAUEXIQUgBw0BC0EAIQIgAyAAQQhqIAMbIgAEQCAAQQA2AgQgACAFNgIACwsgAgtuAQF/IwBBgAJrIgUkAAJAIARBgMAEcQ0AIAIgA0wNACAFIAFB/wFxIAIgA2siAkGAAiACQYACSSIBGxAZIAFFBEADQCAAIAVBgAIQLiACQYACayICQf8BSw0ACwsgACAFIAIQLgsgBUGAAmokAAuBAQEBfyMAQRBrIgQkACACIANsIQICQCAAQSdGBEAgBEEMaiACEIwBIQBBACAEKAIMIAAbIQAMAQsgAUEBIAJBxABqIAARAAAiAUUEQEEAIQAMAQtBwAAgAUE/cWsiACABakHAAEEAIABBBEkbaiIAQQRrIAE2AAALIARBEGokACAAC1IBAn9BhIEBKAIAIgEgAEEDakF8cSICaiEAAkAgAkEAIAAgAU0bDQAgAD8AQRB0SwRAIAAQA0UNAQtBhIEBIAA2AgAgAQ8LQYSEAUEwNgIAQX8LNwAgAEJ/NwMQIABBADYCCCAAQgA3AwAgAEEANgIwIABC/////w83AyggAEIANwMYIABCADcDIAulAQEBf0HYABAJIgFFBEBBAA8LAkAgAARAIAEgAEHYABAHGgwBCyABQgA3AyAgAUEANgIYIAFC/////w83AxAgAUEAOwEMIAFBv4YoNgIIIAFBAToABiABQQA6AAQgAUIANwNIIAFBgIDYjXg2AkQgAUIANwMoIAFCADcDMCABQgA3AzggAUFAa0EAOwEAIAFCADcDUAsgAUEBOgAFIAFBADYCACABC1gCAn4BfwJAAkAgAC0AAEUNACAAKQMQIgMgAq18IgQgA1QNACAEIAApAwhYDQELIABBADoAAA8LIAAoAgQiBUUEQA8LIAAgBDcDECAFIAOnaiABIAIQBxoLlgEBAn8CQAJAIAJFBEAgAacQCSIFRQ0BQRgQCSIEDQIgBRAGDAELIAIhBUEYEAkiBA0BCyADBEAgA0EANgIEIANBDjYCAAtBAA8LIARCADcDECAEIAE3AwggBCAFNgIEIARBAToAACAEIAJFOgABIAAgBSABIAMQZUEASAR/IAQtAAEEQCAEKAIEEAYLIAQQBkEABSAECwubAgEDfyAALQAAQSBxRQRAAkAgASEDAkAgAiAAIgEoAhAiAAR/IAAFAn8gASABLQBKIgBBAWsgAHI6AEogASgCACIAQQhxBEAgASAAQSByNgIAQX8MAQsgAUIANwIEIAEgASgCLCIANgIcIAEgADYCFCABIAAgASgCMGo2AhBBAAsNASABKAIQCyABKAIUIgVrSwRAIAEgAyACIAEoAiQRAAAaDAILAn8gASwAS0F/SgRAIAIhAANAIAIgACIERQ0CGiADIARBAWsiAGotAABBCkcNAAsgASADIAQgASgCJBEAACAESQ0CIAMgBGohAyABKAIUIQUgAiAEawwBCyACCyEAIAUgAyAAEAcaIAEgASgCFCAAajYCFAsLCwvNBQEGfyAAKAIwIgNBhgJrIQYgACgCPCECIAMhAQNAIAAoAkQgAiAAKAJoIgRqayECIAEgBmogBE0EQCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQIAEgACgCBGogACkDmC48AAAgACAAKQOYLkIIiDcDmC4gACgCoC5BCGsLNgKgLgsLEAAgACgCCBAGIABBADYCCAvwAQECf0F/IQECQCAALQAoDQAgACgCJEEDRgRAIABBDGoEQCAAQQA2AhAgAEEXNgIMC0F/DwsCQCAAKAIgBEAgACkDGELAAINCAFINASAAQQxqBEAgAEEANgIQIABBHTYCDAtBfw8LAkAgACgCACICRQ0AIAIQMkF/Sg0AIAAoAgAhASAAQQxqIgAEQCAAIAEoAgw2AgAgACABKAIQNgIEC0F/DwsgAEEAQgBBABAOQn9VDQAgACgCACIARQ0BIAAQGhpBfw8LQQAhASAAQQA7ATQgAEEMagRAIABCADcCDAsgACAAKAIgQQFqNgIgCyABCzsAIAAtACgEfkJ/BSAAKAIgRQRAIABBDGoiAARAIABBADYCBCAAQRI2AgALQn8PCyAAQQBCAEEHEA4LC5oIAQt/IABFBEAgARAJDwsgAUFATwRAQYSEAUEwNgIAQQAPCwJ/QRAgAUELakF4cSABQQtJGyEGIABBCGsiBSgCBCIJQXhxIQQCQCAJQQNxRQRAQQAgBkGAAkkNAhogBkEEaiAETQRAIAUhAiAEIAZrQZSIASgCAEEBdE0NAgtBAAwCCyAEIAVqIQcCQCAEIAZPBEAgBCAGayIDQRBJDQEgBSAJQQFxIAZyQQJyNgIEIAUgBmoiAiADQQNyNgIEIAcgBygCBEEBcjYCBCACIAMQOwwBCyAHQcyEASgCAEYEQEHAhAEoAgAgBGoiBCAGTQ0CIAUgCUEBcSAGckECcjYCBCAFIAZqIgMgBCAGayICQQFyNgIEQcCEASACNgIAQcyEASADNgIADAELIAdByIQBKAIARgRAQbyEASgCACAEaiIDIAZJDQICQCADIAZrIgJBEE8EQCAFIAlBAXEgBnJBAnI2AgQgBSAGaiIEIAJBAXI2AgQgAyAFaiIDIAI2AgAgAyADKAIEQX5xNgIEDAELIAUgCUEBcSADckECcjYCBCADIAVqIgIgAigCBEEBcjYCBEEAIQJBACEEC0HIhAEgBDYCAEG8hAEgAjYCAAwBCyAHKAIEIgNBAnENASADQXhxIARqIgogBkkNASAKIAZrIQwCQCADQf8BTQRAIAcoAggiBCADQQN2IgJBA3RB3IQBakYaIAQgBygCDCIDRgRAQbSEAUG0hAEoAgBBfiACd3E2AgAMAgsgBCADNgIMIAMgBDYCCAwBCyAHKAIYIQsCQCAHIAcoAgwiCEcEQCAHKAIIIgJBxIQBKAIASRogAiAINgIMIAggAjYCCAwBCwJAIAdBFGoiBCgCACICDQAgB0EQaiIEKAIAIgINAEEAIQgMAQsDQCAEIQMgAiIIQRRqIgQoAgAiAg0AIAhBEGohBCAIKAIQIgINAAsgA0EANgIACyALRQ0AAkAgByAHKAIcIgNBAnRB5IYBaiICKAIARgRAIAIgCDYCACAIDQFBuIQBQbiEASgCAEF+IAN3cTYCAAwCCyALQRBBFCALKAIQIAdGG2ogCDYCACAIRQ0BCyAIIAs2AhggBygCECICBEAgCCACNgIQIAIgCDYCGAsgBygCFCICRQ0AIAggAjYCFCACIAg2AhgLIAxBD00EQCAFIAlBAXEgCnJBAnI2AgQgBSAKaiICIAIoAgRBAXI2AgQMAQsgBSAJQQFxIAZyQQJyNgIEIAUgBmoiAyAMQQNyNgIEIAUgCmoiAiACKAIEQQFyNgIEIAMgDBA7CyAFIQILIAILIgIEQCACQQhqDwsgARAJIgVFBEBBAA8LIAUgAEF8QXggAEEEaygCACICQQNxGyACQXhxaiICIAEgASACSxsQBxogABAGIAUL6QEBA38CQCABRQ0AIAJBgDBxIgIEfwJ/IAJBgCBHBEBBAiACQYAQRg0BGiADBEAgA0EANgIEIANBEjYCAAtBAA8LQQQLIQJBAAVBAQshBkEUEAkiBEUEQCADBEAgA0EANgIEIANBDjYCAAtBAA8LIAQgAUEBahAJIgU2AgAgBUUEQCAEEAZBAA8LIAUgACABEAcgAWpBADoAACAEQQA2AhAgBEIANwMIIAQgATsBBCAGDQAgBCACECNBBUcNACAEKAIAEAYgBCgCDBAGIAQQBkEAIQQgAwRAIANBADYCBCADQRI2AgALCyAEC7UBAQJ/AkACQAJAAkACQAJAAkAgAC0ABQRAIAAtAABBAnFFDQELIAAoAjAQECAAQQA2AjAgAC0ABUUNAQsgAC0AAEEIcUUNAQsgACgCNBAcIABBADYCNCAALQAFRQ0BCyAALQAAQQRxRQ0BCyAAKAI4EBAgAEEANgI4IAAtAAVFDQELIAAtAABBgAFxRQ0BCyAAKAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASELIAMhBQsgBkIuEBciA0UEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyAFEBwMAgsgA0GjEkGoEiACQYACcSIHG0EEECwgB0UEQCADIAkEf0EtBSABLwEIC0H//wNxEA0LIAMgCQR/QS0FIAEvAQoLQf//A3EQDSADIAEvAQwQDSADIAsEf0HjAAUgASgCEAtB//8DcRANIAYgASgCFDYCPAJ/IAZBPGoQjQEiCEUEQEEAIQlBIQwBCwJ/IAgoAhQiBEHQAE4EQCAEQQl0DAELIAhB0AA2AhRBgMACCyEEIAgoAgRBBXQgCCgCCEELdGogCCgCAEEBdmohCSAIKAIMIAQgCCgCEEEFdGpqQaDAAWoLIQQgAyAJQf//A3EQDSADIARB//8DcRANIAMCfyALBEBBACABKQMoQhRUDQEaCyABKAIYCxASIAEpAyAhDCADAn8gAwJ/AkAgBwRAIAxC/v///w9YBEAgASkDKEL/////D1QNAgsgA0F/EBJBfwwDC0F/IAxC/v///w9WDQEaCyAMpwsQEiABKQMoIgxC/////w8gDEL/////D1QbpwsQEiADIAEoAjAiBAR/IAQvAQQFQQALQf//A3EQDSADIAEoAjQgAhBsIAVBgAYQbGpB//8DcRANIAdFBEAgAyABKAI4IgQEfyAELwEEBUEAC0H//wNxEA0gAyABLwE8EA0gAyABLwFAEA0gAyABKAJEEBIgAyABKQNIIgxC/////w8gDEL/////D1QbpxASCyADLQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAMQCCAFEBwMAgsgACAGIAMtAAAEfiADKQMQBUIACxAbIQQgAxAIIARBf0wNACABKAIwIgMEQCAAIAMQYUF/TA0BCyAFBEAgACAFQYAGEGtBf0wNAQsgBRAcIAEoAjQiBQRAIAAgBSACEGtBAEgNAgsgBw0CIAEoAjgiAUUNAiAAIAEQYUEATg0CDAELIAUQHAtBfyEKCyAGQUBrJAAgCgtNAQJ/IAEtAAAhAgJAIAAtAAAiA0UNACACIANHDQADQCABLQABIQIgAC0AASIDRQ0BIAFBAWohASAAQQFqIQAgAiADRg0ACwsgAyACawvcAwICfgF/IAOtIQQgACkDmC4hBQJAIAACfyAAAn4gACgCoC4iBkEDaiIDQT9NBEAgBCAGrYYgBYQMAQsgBkHAAEYEQCAAKAIEIAAoAhBqIAU3AAAgACgCEEEIagwCCyAAKAIEIAAoAhBqIAQgBq2GIAWENwAAIAAgACgCEEEIajYCECAGQT1rIQMgBEHAACAGa62ICyIENwOYLiAAIAM2AqAuIANBOU4EQCAAKAIEIAAoAhBqIAQ3AAAgACAAKAIQQQhqNgIQDAILIANBGU4EQCAAKAIEIAAoAhBqIAQ+AAAgACAAKAIQQQRqNgIQIAAgACkDmC5CIIgiBDcDmC4gACAAKAKgLkEgayIDNgKgLgsgA0EJTgR/IAAoAgQgACgCEGogBD0AACAAIAAoAhBBAmo2AhAgACkDmC5CEIghBCAAKAKgLkEQawUgAwtBAUgNASAAKAIQCyIDQQFqNgIQIAAoAgQgA2ogBDwAAAsgAEEANgKgLiAAQgA3A5guIAAoAgQgACgCEGogAjsAACAAIAAoAhBBAmoiAzYCECAAKAIEIANqIAJBf3M7AAAgACAAKAIQQQJqIgM2AhAgAgRAIAAoAgQgA2ogASACEAcaIAAgACgCECACajYCEAsLrAQCAX8BfgJAIAANACABUA0AIAMEQCADQQA2AgQgA0ESNgIAC0EADwsCQAJAIAAgASACIAMQiQEiBEUNAEEYEAkiAkUEQCADBEAgA0EANgIEIANBDjYCAAsCQCAEKAIoIgBFBEAgBCkDGCEBDAELIABBADYCKCAEKAIoQgA3AyAgBCAEKQMYIgUgBCkDICIBIAEgBVQbIgE3AxgLIAQpAwggAVYEQANAIAQoAgAgAadBBHRqKAIAEAYgAUIBfCIBIAQpAwhUDQALCyAEKAIAEAYgBCgCBBAGIAQQBgwBCyACQQA2AhQgAiAENgIQIAJBABABNgIMIAJBADYCCCACQgA3AgACf0E4EAkiAEUEQCADBEAgA0EANgIEIANBDjYCAAtBAAwBCyAAQQA2AgggAEIANwMAIABCADcDICAAQoCAgIAQNwIsIABBADoAKCAAQQA2AhQgAEIANwIMIABBADsBNCAAIAI2AgggAEEkNgIEIABCPyACQQBCAEEOQSQRDAAiASABQgBTGzcDGCAACyIADQEgAigCECIDBEACQCADKAIoIgBFBEAgAykDGCEBDAELIABBADYCKCADKAIoQgA3AyAgAyADKQMYIgUgAykDICIBIAEgBVQbIgE3AxgLIAMpAwggAVYEQANAIAMoAgAgAadBBHRqKAIAEAYgAUIBfCIBIAMpAwhUDQALCyADKAIAEAYgAygCBBAGIAMQBgsgAhAGC0EAIQALIAALiwwBBn8gACABaiEFAkACQCAAKAIEIgJBAXENACACQQNxRQ0BIAAoAgAiAiABaiEBAkAgACACayIAQciEASgCAEcEQCACQf8BTQRAIAAoAggiBCACQQN2IgJBA3RB3IQBakYaIAAoAgwiAyAERw0CQbSEAUG0hAEoAgBBfiACd3E2AgAMAwsgACgCGCEGAkAgACAAKAIMIgNHBEAgACgCCCICQcSEASgCAEkaIAIgAzYCDCADIAI2AggMAQsCQCAAQRRqIgIoAgAiBA0AIABBEGoiAigCACIEDQBBACEDDAELA0AgAiEHIAQiA0EUaiICKAIAIgQNACADQRBqIQIgAygCECIEDQALIAdBADYCAAsgBkUNAgJAIAAgACgCHCIEQQJ0QeSGAWoiAigCAEYEQCACIAM2AgAgAw0BQbiEAUG4hAEoAgBBfiAEd3E2AgAMBAsgBkEQQRQgBigCECAARhtqIAM2AgAgA0UNAwsgAyAGNgIYIAAoAhAiAgRAIAMgAjYCECACIAM2AhgLIAAoAhQiAkUNAiADIAI2AhQgAiADNgIYDAILIAUoAgQiAkEDcUEDRw0BQbyEASABNgIAIAUgAkF+cTYCBCAAIAFBAXI2AgQgBSABNgIADwsgBCADNgIMIAMgBDYCCAsCQCAFKAIEIgJBAnFFBEAgBUHMhAEoAgBGBEBBzIQBIAA2AgBBwIQBQcCEASgCACABaiIBNgIAIAAgAUEBcjYCBCAAQciEASgCAEcNA0G8hAFBADYCAEHIhAFBADYCAA8LIAVByIQBKAIARgRAQciEASAANgIAQbyEAUG8hAEoAgAgAWoiATYCACAAIAFBAXI2AgQgACABaiABNgIADwsgAkF4cSABaiEBAkAgAkH/AU0EQCAFKAIIIgQgAkEDdiICQQN0QdyEAWpGGiAEIAUoAgwiA0YEQEG0hAFBtIQBKAIAQX4gAndxNgIADAILIAQgAzYCDCADIAQ2AggMAQsgBSgCGCEGAkAgBSAFKAIMIgNHBEAgBSgCCCICQcSEASgCAEkaIAIgAzYCDCADIAI2AggMAQsCQCAFQRRqIgQoAgAiAg0AIAVBEGoiBCgCACICDQBBACEDDAELA0AgBCEHIAIiA0EUaiIEKAIAIgINACADQRBqIQQgAygCECICDQALIAdBADYCAAsgBkUNAAJAIAUgBSgCHCIEQQJ0QeSGAWoiAigCAEYEQCACIAM2AgAgAw0BQbiEAUG4hAEoAgBBfiAEd3E2AgAMAgsgBkEQQRQgBigCECAFRhtqIAM2AgAgA0UNAQsgAyAGNgIYIAUoAhAiAgRAIAMgAjYCECACIAM2AhgLIAUoAhQiAkUNACADIAI2AhQgAiADNgIYCyAAIAFBAXI2AgQgACABaiABNgIAIABByIQBKAIARw0BQbyEASABNgIADwsgBSACQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgALIAFB/wFNBEAgAUEDdiICQQN0QdyEAWohAQJ/QbSEASgCACIDQQEgAnQiAnFFBEBBtIQBIAIgA3I2AgAgAQwBCyABKAIICyECIAEgADYCCCACIAA2AgwgACABNgIMIAAgAjYCCA8LQR8hAiAAQgA3AhAgAUH///8HTQRAIAFBCHYiAiACQYD+P2pBEHZBCHEiBHQiAiACQYDgH2pBEHZBBHEiA3QiAiACQYCAD2pBEHZBAnEiAnRBD3YgAyAEciACcmsiAkEBdCABIAJBFWp2QQFxckEcaiECCyAAIAI2AhwgAkECdEHkhgFqIQcCQAJAQbiEASgCACIEQQEgAnQiA3FFBEBBuIQBIAMgBHI2AgAgByAANgIAIAAgBzYCGAwBCyABQQBBGSACQQF2ayACQR9GG3QhAiAHKAIAIQMDQCADIgQoAgRBeHEgAUYNAiACQR12IQMgAkEBdCECIAQgA0EEcWoiB0EQaigCACIDDQALIAcgADYCECAAIAQ2AhgLIAAgADYCDCAAIAA2AggPCyAEKAIIIgEgADYCDCAEIAA2AgggAEEANgIYIAAgBDYCDCAAIAE2AggLC1gCAX8BfgJAAn9BACAARQ0AGiAArUIChiICpyIBIABBBHJBgIAESQ0AGkF/IAEgAkIgiKcbCyIBEAkiAEUNACAAQQRrLQAAQQNxRQ0AIABBACABEBkLIAALQwEDfwJAIAJFDQADQCAALQAAIgQgAS0AACIFRgRAIAFBAWohASAAQQFqIQAgAkEBayICDQEMAgsLIAQgBWshAwsgAwsUACAAEEAgACgCABAgIAAoAgQQIAutBAIBfgV/IwBBEGsiBCQAIAAgAWshBgJAAkAgAUEBRgRAIAAgBi0AACACEBkMAQsgAUEJTwRAIAAgBikAADcAACAAIAJBAWtBB3FBAWoiBWohACACIAVrIgFFDQIgBSAGaiECA0AgACACKQAANwAAIAJBCGohAiAAQQhqIQAgAUEIayIBDQALDAILAkACQAJAAkAgAUEEaw4FAAICAgECCyAEIAYoAAAiATYCBCAEIAE2AgAMAgsgBCAGKQAANwMADAELQQghByAEQQhqIQgDQCAIIAYgByABIAEgB0sbIgUQByAFaiEIIAcgBWsiBw0ACyAEIAQpAwg3AwALAkAgBQ0AIAJBEEkNACAEKQMAIQMgAkEQayIGQQR2QQFqQQdxIgEEQANAIAAgAzcACCAAIAM3AAAgAkEQayECIABBEGohACABQQFrIgENAAsLIAZB8ABJDQADQCAAIAM3AHggACADNwBwIAAgAzcAaCAAIAM3AGAgACADNwBYIAAgAzcAUCAAIAM3AEggACADNwBAIAAgAzcAOCAAIAM3ADAgACADNwAoIAAgAzcAICAAIAM3ABggACADNwAQIAAgAzcACCAAIAM3AAAgAEGAAWohACACQYABayICQQ9LDQALCyACQQhPBEBBCCAFayEBA0AgACAEKQMANwAAIAAgAWohACACIAFrIgJBB0sNAAsLIAJFDQEgACAEIAIQBxoLIAAgAmohAAsgBEEQaiQAIAALXwECfyAAKAIIIgEEQCABEAsgAEEANgIICwJAIAAoAgQiAUUNACABKAIAIgJBAXFFDQAgASgCEEF+Rw0AIAEgAkF+cSICNgIAIAINACABECAgAEEANgIECyAAQQA6AAwL1wICBH8BfgJAAkAgACgCQCABp0EEdGooAgAiA0UEQCACBEAgAkEANgIEIAJBFDYCAAsMAQsgACgCACADKQNIIgdBABAUIQMgACgCACEAIANBf0wEQCACBEAgAiAAKAIMNgIAIAIgACgCEDYCBAsMAQtCACEBIwBBEGsiBiQAQX8hAwJAIABCGkEBEBRBf0wEQCACBEAgAiAAKAIMNgIAIAIgACgCEDYCBAsMAQsgAEIEIAZBCmogAhAtIgRFDQBBHiEAQQEhBQNAIAQQDCAAaiEAIAVBAkcEQCAFQQFqIQUMAQsLIAQtAAAEfyAEKQMQIAQpAwhRBUEAC0UEQCACBEAgAkEANgIEIAJBFDYCAAsgBBAIDAELIAQQCCAAIQMLIAZBEGokACADIgBBAEgNASAHIACtfCIBQn9VDQEgAgRAIAJBFjYCBCACQQQ2AgALC0IAIQELIAELYAIBfgF/AkAgAEUNACAAQQhqEF8iAEUNACABIAEoAjBBAWo2AjAgACADNgIIIAAgAjYCBCAAIAE2AgAgAEI/IAEgA0EAQgBBDiACEQoAIgQgBEIAUxs3AxggACEFCyAFCyIAIAAoAiRBAWtBAU0EQCAAQQBCAEEKEA4aIABBADYCJAsLbgACQAJAAkAgA0IQVA0AIAJFDQECfgJAAkACQCACKAIIDgMCAAEECyACKQMAIAB8DAILIAIpAwAgAXwMAQsgAikDAAsiA0IAUw0AIAEgA1oNAgsgBARAIARBADYCBCAEQRI2AgALC0J/IQMLIAMLggICAX8CfgJAQQEgAiADGwRAIAIgA2oQCSIFRQRAIAQEQCAEQQA2AgQgBEEONgIAC0EADwsgAq0hBgJAAkAgAARAIAAgBhATIgBFBEAgBARAIARBADYCBCAEQQ42AgALDAULIAUgACACEAcaIAMNAQwCCyABIAUgBhARIgdCf1cEQCAEBEAgBCABKAIMNgIAIAQgASgCEDYCBAsMBAsgBiAHVQRAIAQEQCAEQQA2AgQgBEERNgIACwwECyADRQ0BCyACIAVqIgBBADoAACACQQFIDQAgBSECA0AgAi0AAEUEQCACQSA6AAALIAJBAWoiAiAASQ0ACwsLIAUPCyAFEAZBAAuBAQEBfwJAIAAEQCADQYAGcSEFQQAhAwNAAkAgAC8BCCACRw0AIAUgACgCBHFFDQAgA0EATg0DIANBAWohAwsgACgCACIADQALCyAEBEAgBEEANgIEIARBCTYCAAtBAA8LIAEEQCABIAAvAQo7AQALIAAvAQpFBEBBwBQPCyAAKAIMC1cBAX9BEBAJIgNFBEBBAA8LIAMgATsBCiADIAA7AQggA0GABjYCBCADQQA2AgACQCABBEAgAyACIAEQYyIANgIMIAANASADEAZBAA8LIANBADYCDAsgAwvuBQIEfwV+IwBB4ABrIgQkACAEQQhqIgNCADcDICADQQA2AhggA0L/////DzcDECADQQA7AQwgA0G/hig2AgggA0EBOgAGIANBADsBBCADQQA2AgAgA0IANwNIIANBgIDYjXg2AkQgA0IANwMoIANCADcDMCADQgA3AzggA0FAa0EAOwEAIANCADcDUCABKQMIUCIDRQRAIAEoAgAoAgApA0ghBwsCfgJAIAMEQCAHIQkMAQsgByEJA0AgCqdBBHQiBSABKAIAaigCACIDKQNIIgggCSAIIAlUGyIJIAEpAyBWBEAgAgRAIAJBADYCBCACQRM2AgALQn8MAwsgAygCMCIGBH8gBi8BBAVBAAtB//8Dca0gCCADKQMgfHxCHnwiCCAHIAcgCFQbIgcgASkDIFYEQCACBEAgAkEANgIEIAJBEzYCAAtCfwwDCyAAKAIAIAEoAgAgBWooAgApA0hBABAUIQYgACgCACEDIAZBf0wEQCACBEAgAiADKAIMNgIAIAIgAygCEDYCBAtCfwwDCyAEQQhqIANBAEEBIAIQaEJ/UQRAIARBCGoQNkJ/DAMLAkACQCABKAIAIAVqKAIAIgMvAQogBC8BEkkNACADKAIQIAQoAhhHDQAgAygCFCAEKAIcRw0AIAMoAjAgBCgCOBBiRQ0AAkAgBCgCICIGIAMoAhhHBEAgBCkDKCEIDAELIAMpAyAiCyAEKQMoIghSDQAgCyEIIAMpAyggBCkDMFENAgsgBC0AFEEIcUUNACAGDQAgCEIAUg0AIAQpAzBQDQELIAIEQCACQQA2AgQgAkEVNgIACyAEQQhqEDZCfwwDCyABKAIAIAVqKAIAKAI0IAQoAjwQbyEDIAEoAgAgBWooAgAiBUEBOgAEIAUgAzYCNCAEQQA2AjwgBEEIahA2IApCAXwiCiABKQMIVA0ACwsgByAJfSIHQv///////////wAgB0L///////////8AVBsLIQcgBEHgAGokACAHC8YBAQJ/QdgAEAkiAUUEQCAABEAgAEEANgIEIABBDjYCAAtBAA8LIAECf0EYEAkiAkUEQCAABEAgAEEANgIEIABBDjYCAAtBAAwBCyACQQA2AhAgAkIANwMIIAJBADYCACACCyIANgJQIABFBEAgARAGQQAPCyABQgA3AwAgAUEANgIQIAFCADcCCCABQgA3AhQgAUEANgJUIAFCADcCHCABQgA3ACEgAUIANwMwIAFCADcDOCABQUBrQgA3AwAgAUIANwNIIAELgBMCD38CfiMAQdAAayIFJAAgBSABNgJMIAVBN2ohEyAFQThqIRBBACEBA0ACQCAOQQBIDQBB/////wcgDmsgAUgEQEGEhAFBPTYCAEF/IQ4MAQsgASAOaiEOCyAFKAJMIgchAQJAAkACQAJAAkACQAJAAkAgBQJ/AkAgBy0AACIGBEADQAJAAkAgBkH/AXEiBkUEQCABIQYMAQsgBkElRw0BIAEhBgNAIAEtAAFBJUcNASAFIAFBAmoiCDYCTCAGQQFqIQYgAS0AAiEMIAghASAMQSVGDQALCyAGIAdrIQEgAARAIAAgByABEC4LIAENDSAFKAJMIQEgBSgCTCwAAUEwa0EKTw0DIAEtAAJBJEcNAyABLAABQTBrIQ9BASERIAFBA2oMBAsgBSABQQFqIgg2AkwgAS0AASEGIAghAQwACwALIA4hDSAADQggEUUNAkEBIQEDQCAEIAFBAnRqKAIAIgAEQCADIAFBA3RqIAAgAhB4QQEhDSABQQFqIgFBCkcNAQwKCwtBASENIAFBCk8NCANAIAQgAUECdGooAgANCCABQQFqIgFBCkcNAAsMCAtBfyEPIAFBAWoLIgE2AkxBACEIAkAgASwAACIKQSBrIgZBH0sNAEEBIAZ0IgZBidEEcUUNAANAAkAgBSABQQFqIgg2AkwgASwAASIKQSBrIgFBIE8NAEEBIAF0IgFBidEEcUUNACABIAZyIQYgCCEBDAELCyAIIQEgBiEICwJAIApBKkYEQCAFAn8CQCABLAABQTBrQQpPDQAgBSgCTCIBLQACQSRHDQAgASwAAUECdCAEakHAAWtBCjYCACABLAABQQN0IANqQYADaygCACELQQEhESABQQNqDAELIBENCEEAIRFBACELIAAEQCACIAIoAgAiAUEEajYCACABKAIAIQsLIAUoAkxBAWoLIgE2AkwgC0F/Sg0BQQAgC2shCyAIQYDAAHIhCAwBCyAFQcwAahB3IgtBAEgNBiAFKAJMIQELQX8hCQJAIAEtAABBLkcNACABLQABQSpGBEACQCABLAACQTBrQQpPDQAgBSgCTCIBLQADQSRHDQAgASwAAkECdCAEakHAAWtBCjYCACABLAACQQN0IANqQYADaygCACEJIAUgAUEEaiIBNgJMDAILIBENByAABH8gAiACKAIAIgFBBGo2AgAgASgCAAVBAAshCSAFIAUoAkxBAmoiATYCTAwBCyAFIAFBAWo2AkwgBUHMAGoQdyEJIAUoAkwhAQtBACEGA0AgBiESQX8hDSABLAAAQcEAa0E5Sw0HIAUgAUEBaiIKNgJMIAEsAAAhBiAKIQEgBiASQTpsakGf7ABqLQAAIgZBAWtBCEkNAAsgBkETRg0CIAZFDQYgD0EATgRAIAQgD0ECdGogBjYCACAFIAMgD0EDdGopAwA3A0AMBAsgAA0BC0EAIQ0MBQsgBUFAayAGIAIQeCAFKAJMIQoMAgsgD0F/Sg0DC0EAIQEgAEUNBAsgCEH//3txIgwgCCAIQYDAAHEbIQZBACENQaQIIQ8gECEIAkACQAJAAn8CQAJAAkACQAJ/AkACQAJAAkACQAJAAkAgCkEBaywAACIBQV9xIAEgAUEPcUEDRhsgASASGyIBQdgAaw4hBBISEhISEhISDhIPBg4ODhIGEhISEgIFAxISCRIBEhIEAAsCQCABQcEAaw4HDhILEg4ODgALIAFB0wBGDQkMEQsgBSkDQCEUQaQIDAULQQAhAQJAAkACQAJAAkACQAJAIBJB/wFxDggAAQIDBBcFBhcLIAUoAkAgDjYCAAwWCyAFKAJAIA42AgAMFQsgBSgCQCAOrDcDAAwUCyAFKAJAIA47AQAMEwsgBSgCQCAOOgAADBILIAUoAkAgDjYCAAwRCyAFKAJAIA6sNwMADBALIAlBCCAJQQhLGyEJIAZBCHIhBkH4ACEBCyAQIQcgAUEgcSEMIAUpA0AiFFBFBEADQCAHQQFrIgcgFKdBD3FBsPAAai0AACAMcjoAACAUQg9WIQogFEIEiCEUIAoNAAsLIAUpA0BQDQMgBkEIcUUNAyABQQR2QaQIaiEPQQIhDQwDCyAQIQEgBSkDQCIUUEUEQANAIAFBAWsiASAUp0EHcUEwcjoAACAUQgdWIQcgFEIDiCEUIAcNAAsLIAEhByAGQQhxRQ0CIAkgECAHayIBQQFqIAEgCUgbIQkMAgsgBSkDQCIUQn9XBEAgBUIAIBR9IhQ3A0BBASENQaQIDAELIAZBgBBxBEBBASENQaUIDAELQaYIQaQIIAZBAXEiDRsLIQ8gECEBAkAgFEKAgICAEFQEQCAUIRUMAQsDQCABQQFrIgEgFCAUQgqAIhVCCn59p0EwcjoAACAUQv////+fAVYhByAVIRQgBw0ACwsgFaciBwRAA0AgAUEBayIBIAcgB0EKbiIMQQpsa0EwcjoAACAHQQlLIQogDCEHIAoNAAsLIAEhBwsgBkH//3txIAYgCUF/ShshBgJAIAUpA0AiFEIAUg0AIAkNAEEAIQkgECEHDAoLIAkgFFAgECAHa2oiASABIAlIGyEJDAkLIAUoAkAiAUGKEiABGyIHQQAgCRB6IgEgByAJaiABGyEIIAwhBiABIAdrIAkgARshCQwICyAJBEAgBSgCQAwCC0EAIQEgAEEgIAtBACAGECcMAgsgBUEANgIMIAUgBSkDQD4CCCAFIAVBCGo2AkBBfyEJIAVBCGoLIQhBACEBAkADQCAIKAIAIgdFDQECQCAFQQRqIAcQeSIHQQBIIgwNACAHIAkgAWtLDQAgCEEEaiEIIAkgASAHaiIBSw0BDAILC0F/IQ0gDA0FCyAAQSAgCyABIAYQJyABRQRAQQAhAQwBC0EAIQggBSgCQCEKA0AgCigCACIHRQ0BIAVBBGogBxB5IgcgCGoiCCABSg0BIAAgBUEEaiAHEC4gCkEEaiEKIAEgCEsNAAsLIABBICALIAEgBkGAwABzECcgCyABIAEgC0gbIQEMBQsgACAFKwNAIAsgCSAGIAFBABEdACEBDAQLIAUgBSkDQDwAN0EBIQkgEyEHIAwhBgwCC0F/IQ0LIAVB0ABqJAAgDQ8LIABBICANIAggB2siDCAJIAkgDEgbIgpqIgggCyAIIAtKGyIBIAggBhAnIAAgDyANEC4gAEEwIAEgCCAGQYCABHMQJyAAQTAgCiAMQQAQJyAAIAcgDBAuIABBICABIAggBkGAwABzECcMAAsAC54DAgR/AX4gAARAIAAoAgAiAQRAIAEQGhogACgCABALCyAAKAIcEAYgACgCIBAQIAAoAiQQECAAKAJQIgMEQCADKAIQIgIEQCADKAIAIgEEfwNAIAIgBEECdGooAgAiAgRAA0AgAigCGCEBIAIQBiABIgINAAsgAygCACEBCyABIARBAWoiBEsEQCADKAIQIQIMAQsLIAMoAhAFIAILEAYLIAMQBgsgACgCQCIBBEAgACkDMFAEfyABBSABED5CAiEFAkAgACkDMEICVA0AQQEhAgNAIAAoAkAgAkEEdGoQPiAFIAApAzBaDQEgBachAiAFQgF8IQUMAAsACyAAKAJACxAGCwJAIAAoAkRFDQBBACECQgEhBQNAIAAoAkwgAkECdGooAgAiAUEBOgAoIAFBDGoiASgCAEUEQCABBEAgAUEANgIEIAFBCDYCAAsLIAUgADUCRFoNASAFpyECIAVCAXwhBQwACwALIAAoAkwQBiAAKAJUIgIEQCACKAIIIgEEQCACKAIMIAERAwALIAIQBgsgAEEIahAxIAAQBgsL6gMCAX4EfwJAIAAEfiABRQRAIAMEQCADQQA2AgQgA0ESNgIAC0J/DwsgAkGDIHEEQAJAIAApAzBQDQBBPEE9IAJBAXEbIQcgAkECcUUEQANAIAAgBCACIAMQUyIFBEAgASAFIAcRAgBFDQYLIARCAXwiBCAAKQMwVA0ADAILAAsDQCAAIAQgAiADEFMiBQRAIAECfyAFECJBAWohBgNAQQAgBkUNARogBSAGQQFrIgZqIggtAABBL0cNAAsgCAsiBkEBaiAFIAYbIAcRAgBFDQULIARCAXwiBCAAKQMwVA0ACwsgAwRAIANBADYCBCADQQk2AgALQn8PC0ESIQYCQAJAIAAoAlAiBUUNACABRQ0AQQkhBiAFKQMIUA0AIAUoAhAgAS0AACIHBH9CpesKIQQgASEAA0AgBCAHrUL/AYN8IQQgAC0AASIHBEAgAEEBaiEAIARC/////w+DQiF+IQQMAQsLIASnBUGFKgsgBSgCAHBBAnRqKAIAIgBFDQADQCABIAAoAgAQOEUEQCACQQhxBEAgACkDCCIEQn9RDQMMBAsgACkDECIEQn9RDQIMAwsgACgCGCIADQALCyADBEAgA0EANgIEIAMgBjYCAAtCfyEECyAEBUJ/Cw8LIAMEQCADQgA3AgALIAQL3AQCB38BfgJAAkAgAEUNACABRQ0AIAJCf1UNAQsgBARAIARBADYCBCAEQRI2AgALQQAPCwJAIAAoAgAiB0UEQEGAAiEHQYACEDwiBkUNASAAKAIQEAYgAEGAAjYCACAAIAY2AhALAkACQCAAKAIQIAEtAAAiBQR/QqXrCiEMIAEhBgNAIAwgBa1C/wGDfCEMIAYtAAEiBQRAIAZBAWohBiAMQv////8Pg0IhfiEMDAELCyAMpwVBhSoLIgYgB3BBAnRqIggoAgAiBQRAA0ACQCAFKAIcIAZHDQAgASAFKAIAEDgNAAJAIANBCHEEQCAFKQMIQn9SDQELIAUpAxBCf1ENBAsgBARAIARBADYCBCAEQQo2AgALQQAPCyAFKAIYIgUNAAsLQSAQCSIFRQ0CIAUgATYCACAFIAgoAgA2AhggCCAFNgIAIAVCfzcDCCAFIAY2AhwgACAAKQMIQgF8Igw3AwggDLogB7hEAAAAAAAA6D+iZEUNACAHQQBIDQAgByAHQQF0IghGDQAgCBA8IgpFDQECQCAMQgAgBxtQBEAgACgCECEJDAELIAAoAhAhCUEAIQQDQCAJIARBAnRqKAIAIgYEQANAIAYoAhghASAGIAogBigCHCAIcEECdGoiCygCADYCGCALIAY2AgAgASIGDQALCyAEQQFqIgQgB0cNAAsLIAkQBiAAIAg2AgAgACAKNgIQCyADQQhxBEAgBSACNwMICyAFIAI3AxBBAQ8LIAQEQCAEQQA2AgQgBEEONgIAC0EADwsgBARAIARBADYCBCAEQQ42AgALQQAL3Q8BF38jAEFAaiIHQgA3AzAgB0IANwM4IAdCADcDICAHQgA3AygCQAJAAkACQAJAIAIEQCACQQNxIQggAkEBa0EDTwRAIAJBfHEhBgNAIAdBIGogASAJQQF0IgxqLwEAQQF0aiIKIAovAQBBAWo7AQAgB0EgaiABIAxBAnJqLwEAQQF0aiIKIAovAQBBAWo7AQAgB0EgaiABIAxBBHJqLwEAQQF0aiIKIAovAQBBAWo7AQAgB0EgaiABIAxBBnJqLwEAQQF0aiIKIAovAQBBAWo7AQAgCUEEaiEJIAZBBGsiBg0ACwsgCARAA0AgB0EgaiABIAlBAXRqLwEAQQF0aiIGIAYvAQBBAWo7AQAgCUEBaiEJIAhBAWsiCA0ACwsgBCgCACEJQQ8hCyAHLwE+IhENAgwBCyAEKAIAIQkLQQ4hC0EAIREgBy8BPA0AQQ0hCyAHLwE6DQBBDCELIAcvATgNAEELIQsgBy8BNg0AQQohCyAHLwE0DQBBCSELIAcvATINAEEIIQsgBy8BMA0AQQchCyAHLwEuDQBBBiELIAcvASwNAEEFIQsgBy8BKg0AQQQhCyAHLwEoDQBBAyELIAcvASYNAEECIQsgBy8BJA0AIAcvASJFBEAgAyADKAIAIgBBBGo2AgAgAEHAAjYBACADIAMoAgAiAEEEajYCACAAQcACNgEAQQEhDQwDCyAJQQBHIRtBASELQQEhCQwBCyALIAkgCSALSxshG0EBIQ5BASEJA0AgB0EgaiAJQQF0ai8BAA0BIAlBAWoiCSALRw0ACyALIQkLQX8hCCAHLwEiIg9BAksNAUEEIAcvASQiECAPQQF0amsiBkEASA0BIAZBAXQgBy8BJiISayIGQQBIDQEgBkEBdCAHLwEoIhNrIgZBAEgNASAGQQF0IAcvASoiFGsiBkEASA0BIAZBAXQgBy8BLCIVayIGQQBIDQEgBkEBdCAHLwEuIhZrIgZBAEgNASAGQQF0IAcvATAiF2siBkEASA0BIAZBAXQgBy8BMiIZayIGQQBIDQEgBkEBdCAHLwE0IhxrIgZBAEgNASAGQQF0IAcvATYiDWsiBkEASA0BIAZBAXQgBy8BOCIYayIGQQBIDQEgBkEBdCAHLwE6IgxrIgZBAEgNASAGQQF0IAcvATwiCmsiBkEASA0BIAZBAXQgEWsiBkEASA0BIAZBACAARSAOchsNASAJIBtLIRpBACEIIAdBADsBAiAHIA87AQQgByAPIBBqIgY7AQYgByAGIBJqIgY7AQggByAGIBNqIgY7AQogByAGIBRqIgY7AQwgByAGIBVqIgY7AQ4gByAGIBZqIgY7ARAgByAGIBdqIgY7ARIgByAGIBlqIgY7ARQgByAGIBxqIgY7ARYgByAGIA1qIgY7ARggByAGIBhqIgY7ARogByAGIAxqIgY7ARwgByAGIApqOwEeAkAgAkUNACACQQFHBEAgAkF+cSEGA0AgASAIQQF0ai8BACIKBEAgByAKQQF0aiIKIAovAQAiCkEBajsBACAFIApBAXRqIAg7AQALIAEgCEEBciIMQQF0ai8BACIKBEAgByAKQQF0aiIKIAovAQAiCkEBajsBACAFIApBAXRqIAw7AQALIAhBAmohCCAGQQJrIgYNAAsLIAJBAXFFDQAgASAIQQF0ai8BACICRQ0AIAcgAkEBdGoiAiACLwEAIgJBAWo7AQAgBSACQQF0aiAIOwEACyAJIBsgGhshDUEUIRBBACEWIAUiCiEYQQAhEgJAAkACQCAADgICAAELQQEhCCANQQpLDQNBgQIhEEHw2QAhGEGw2QAhCkEBIRIMAQsgAEECRiEWQQAhEEHw2gAhGEGw2gAhCiAAQQJHBEAMAQtBASEIIA1BCUsNAgtBASANdCITQQFrIRwgAygCACEUQQAhFSANIQZBACEPQQAhDkF/IQIDQEEBIAZ0IRoCQANAIAkgD2shFwJAIAUgFUEBdGovAQAiCCAQTwRAIAogCCAQa0EBdCIAai8BACERIAAgGGotAAAhAAwBC0EAQeAAIAhBAWogEEkiBhshACAIQQAgBhshEQsgDiAPdiEMQX8gF3QhBiAaIQgDQCAUIAYgCGoiCCAMakECdGoiGSAROwECIBkgFzoAASAZIAA6AAAgCA0AC0EBIAlBAWt0IQYDQCAGIgBBAXYhBiAAIA5xDQALIAdBIGogCUEBdGoiBiAGLwEAQQFrIgY7AQAgAEEBayAOcSAAakEAIAAbIQ4gFUEBaiEVIAZB//8DcUUEQCAJIAtGDQIgASAFIBVBAXRqLwEAQQF0ai8BACEJCyAJIA1NDQAgDiAccSIAIAJGDQALQQEgCSAPIA0gDxsiD2siBnQhAiAJIAtJBEAgCyAPayEMIAkhCAJAA0AgAiAHQSBqIAhBAXRqLwEAayICQQFIDQEgAkEBdCECIAZBAWoiBiAPaiIIIAtJDQALIAwhBgtBASAGdCECC0EBIQggEiACIBNqIhNBtApLcQ0DIBYgE0HQBEtxDQMgAygCACICIABBAnRqIgggDToAASAIIAY6AAAgCCAUIBpBAnRqIhQgAmtBAnY7AQIgACECDAELCyAOBEAgFCAOQQJ0aiIAQQA7AQIgACAXOgABIABBwAA6AAALIAMgAygCACATQQJ0ajYCAAsgBCANNgIAQQAhCAsgCAusAQICfgF/IAFBAmqtIQIgACkDmC4hAwJAIAAoAqAuIgFBA2oiBEE/TQRAIAIgAa2GIAOEIQIMAQsgAUHAAEYEQCAAKAIEIAAoAhBqIAM3AAAgACAAKAIQQQhqNgIQQQMhBAwBCyAAKAIEIAAoAhBqIAIgAa2GIAOENwAAIAAgACgCEEEIajYCECABQT1rIQQgAkHAACABa62IIQILIAAgAjcDmC4gACAENgKgLguXAwICfgN/QYDJADMBACECIAApA5guIQMCQCAAKAKgLiIFQYLJAC8BACIGaiIEQT9NBEAgAiAFrYYgA4QhAgwBCyAFQcAARgRAIAAoAgQgACgCEGogAzcAACAAIAAoAhBBCGo2AhAgBiEEDAELIAAoAgQgACgCEGogAiAFrYYgA4Q3AAAgACAAKAIQQQhqNgIQIARBQGohBCACQcAAIAVrrYghAgsgACACNwOYLiAAIAQ2AqAuIAEEQAJAIARBOU4EQCAAKAIEIAAoAhBqIAI3AAAgACAAKAIQQQhqNgIQDAELIARBGU4EQCAAKAIEIAAoAhBqIAI+AAAgACAAKAIQQQRqNgIQIAAgACkDmC5CIIgiAjcDmC4gACAAKAKgLkEgayIENgKgLgsgBEEJTgR/IAAoAgQgACgCEGogAj0AACAAIAAoAhBBAmo2AhAgACkDmC5CEIghAiAAKAKgLkEQawUgBAtBAUgNACAAIAAoAhAiAUEBajYCECABIAAoAgRqIAI8AAALIABBADYCoC4gAEIANwOYLgsL8hQBEn8gASgCCCICKAIAIQUgAigCDCEHIAEoAgAhCCAAQoCAgIDQxwA3A6ApQQAhAgJAAkAgB0EASgRAQX8hDANAAkAgCCACQQJ0aiIDLwEABEAgACAAKAKgKUEBaiIDNgKgKSAAIANBAnRqQawXaiACNgIAIAAgAmpBqClqQQA6AAAgAiEMDAELIANBADsBAgsgAkEBaiICIAdHDQALIABB/C1qIQ8gAEH4LWohESAAKAKgKSIEQQFKDQIMAQsgAEH8LWohDyAAQfgtaiERQX8hDAsDQCAAIARBAWoiAjYCoCkgACACQQJ0akGsF2ogDEEBaiIDQQAgDEECSCIGGyICNgIAIAggAkECdCIEakEBOwEAIAAgAmpBqClqQQA6AAAgACAAKAL4LUEBazYC+C0gBQRAIA8gDygCACAEIAVqLwECazYCAAsgAyAMIAYbIQwgACgCoCkiBEECSA0ACwsgASAMNgIEIARBAXYhBgNAIAAgBkECdGpBrBdqKAIAIQkCQCAGIgJBAXQiAyAESg0AIAggCUECdGohCiAAIAlqQagpaiENIAYhBQNAAkAgAyAETgRAIAMhAgwBCyAIIABBrBdqIgIgA0EBciIEQQJ0aigCACILQQJ0ai8BACIOIAggAiADQQJ0aigCACIQQQJ0ai8BACICTwRAIAIgDkcEQCADIQIMAgsgAyECIABBqClqIgMgC2otAAAgAyAQai0AAEsNAQsgBCECCyAKLwEAIgQgCCAAIAJBAnRqQawXaigCACIDQQJ0ai8BACILSQRAIAUhAgwCCwJAIAQgC0cNACANLQAAIAAgA2pBqClqLQAASw0AIAUhAgwCCyAAIAVBAnRqQawXaiADNgIAIAIhBSACQQF0IgMgACgCoCkiBEwNAAsLIAAgAkECdGpBrBdqIAk2AgAgBkECTgRAIAZBAWshBiAAKAKgKSEEDAELCyAAKAKgKSEDA0AgByEGIAAgA0EBayIENgKgKSAAKAKwFyEKIAAgACADQQJ0akGsF2ooAgAiCTYCsBdBASECAkAgA0EDSA0AIAggCUECdGohDSAAIAlqQagpaiELQQIhA0EBIQUDQAJAIAMgBE4EQCADIQIMAQsgCCAAQawXaiICIANBAXIiB0ECdGooAgAiBEECdGovAQAiDiAIIAIgA0ECdGooAgAiEEECdGovAQAiAk8EQCACIA5HBEAgAyECDAILIAMhAiAAQagpaiIDIARqLQAAIAMgEGotAABLDQELIAchAgsgDS8BACIHIAggACACQQJ0akGsF2ooAgAiA0ECdGovAQAiBEkEQCAFIQIMAgsCQCAEIAdHDQAgCy0AACAAIANqQagpai0AAEsNACAFIQIMAgsgACAFQQJ0akGsF2ogAzYCACACIQUgAkEBdCIDIAAoAqApIgRMDQALC0ECIQMgAEGsF2oiByACQQJ0aiAJNgIAIAAgACgCpClBAWsiBTYCpCkgACgCsBchAiAHIAVBAnRqIAo2AgAgACAAKAKkKUEBayIFNgKkKSAHIAVBAnRqIAI2AgAgCCAGQQJ0aiINIAggAkECdGoiBS8BACAIIApBAnRqIgQvAQBqOwEAIABBqClqIgkgBmoiCyACIAlqLQAAIgIgCSAKai0AACIKIAIgCksbQQFqOgAAIAUgBjsBAiAEIAY7AQIgACAGNgKwF0EBIQVBASECAkAgACgCoCkiBEECSA0AA0AgDS8BACIKIAggAAJ/IAMgAyAETg0AGiAIIAcgA0EBciICQQJ0aigCACIEQQJ0ai8BACIOIAggByADQQJ0aigCACIQQQJ0ai8BACISTwRAIAMgDiASRw0BGiADIAQgCWotAAAgCSAQai0AAEsNARoLIAILIgJBAnRqQawXaigCACIDQQJ0ai8BACIESQRAIAUhAgwCCwJAIAQgCkcNACALLQAAIAAgA2pBqClqLQAASw0AIAUhAgwCCyAAIAVBAnRqQawXaiADNgIAIAIhBSACQQF0IgMgACgCoCkiBEwNAAsLIAZBAWohByAAIAJBAnRqQawXaiAGNgIAIAAoAqApIgNBAUoNAAsgACAAKAKkKUEBayICNgKkKSAAQawXaiIDIAJBAnRqIAAoArAXNgIAIAEoAgQhCSABKAIIIgIoAhAhBiACKAIIIQogAigCBCEQIAIoAgAhDSABKAIAIQcgAEGkF2pCADcBACAAQZwXakIANwEAIABBlBdqQgA3AQAgAEGMF2oiAUIANwEAQQAhBSAHIAMgACgCpClBAnRqKAIAQQJ0akEAOwECAkAgACgCpCkiAkG7BEoNACACQQFqIQIDQCAHIAAgAkECdGpBrBdqKAIAIgRBAnQiEmoiCyAHIAsvAQJBAnRqLwECIgNBAWogBiADIAZJGyIOOwECIAMgBk8hEwJAIAQgCUoNACAAIA5BAXRqQYwXaiIDIAMvAQBBAWo7AQBBACEDIAQgCk4EQCAQIAQgCmtBAnRqKAIAIQMLIBEgESgCACALLwEAIgQgAyAOamxqNgIAIA1FDQAgDyAPKAIAIAMgDSASai8BAmogBGxqNgIACyAFIBNqIQUgAkEBaiICQb0ERw0ACyAFRQ0AIAAgBkEBdGpBjBdqIQQDQCAGIQIDQCAAIAIiA0EBayICQQF0akGMF2oiDy8BACIKRQ0ACyAPIApBAWs7AQAgACADQQF0akGMF2oiAiACLwEAQQJqOwEAIAQgBC8BAEEBayIDOwEAIAVBAkohAiAFQQJrIQUgAg0ACyAGRQ0AQb0EIQIDQCADQf//A3EiBQRAA0AgACACQQFrIgJBAnRqQawXaigCACIDIAlKDQAgByADQQJ0aiIDLwECIAZHBEAgESARKAIAIAYgAy8BAGxqIgQ2AgAgESAEIAMvAQAgAy8BAmxrNgIAIAMgBjsBAgsgBUEBayIFDQALCyAGQQFrIgZFDQEgACAGQQF0akGMF2ovAQAhAwwACwALIwBBIGsiAiABIgAvAQBBAXQiATsBAiACIAEgAC8BAmpBAXQiATsBBCACIAEgAC8BBGpBAXQiATsBBiACIAEgAC8BBmpBAXQiATsBCCACIAEgAC8BCGpBAXQiATsBCiACIAEgAC8BCmpBAXQiATsBDCACIAEgAC8BDGpBAXQiATsBDiACIAEgAC8BDmpBAXQiATsBECACIAEgAC8BEGpBAXQiATsBEiACIAEgAC8BEmpBAXQiATsBFCACIAEgAC8BFGpBAXQiATsBFiACIAEgAC8BFmpBAXQiATsBGCACIAEgAC8BGGpBAXQiATsBGiACIAEgAC8BGmpBAXQiATsBHCACIAAvARwgAWpBAXQ7AR5BACEAIAxBAE4EQANAIAggAEECdGoiAy8BAiIBBEAgAiABQQF0aiIFIAUvAQAiBUEBajsBACADIAWtQoD+A4NCCIhCgpCAgQh+QpDCiKKIAYNCgYKEiBB+QiCIp0H/AXEgBUH/AXGtQoKQgIEIfkKQwoiiiAGDQoGChIgQfkIYiKdBgP4DcXJBECABa3Y7AQALIAAgDEchASAAQQFqIQAgAQ0ACwsLcgEBfyMAQRBrIgQkAAJ/QQAgAEUNABogAEEIaiEAIAFFBEAgAlBFBEAgAARAIABBADYCBCAAQRI2AgALQQAMAgtBAEIAIAMgABA6DAELIAQgAjcDCCAEIAE2AgAgBEIBIAMgABA6CyEAIARBEGokACAACyIAIAAgASACIAMQJiIARQRAQQAPCyAAKAIwQQAgAiADECULAwABC8gFAQR/IABB//8DcSEDIABBEHYhBEEBIQAgAkEBRgRAIAMgAS0AAGpB8f8DcCIAIARqQfH/A3BBEHQgAHIPCwJAIAEEfyACQRBJDQECQCACQa8rSwRAA0AgAkGwK2shAkG1BSEFIAEhAANAIAMgAC0AAGoiAyAEaiADIAAtAAFqIgNqIAMgAC0AAmoiA2ogAyAALQADaiIDaiADIAAtAARqIgNqIAMgAC0ABWoiA2ogAyAALQAGaiIDaiADIAAtAAdqIgNqIQQgBQRAIABBCGohACAFQQFrIQUMAQsLIARB8f8DcCEEIANB8f8DcCEDIAFBsCtqIQEgAkGvK0sNAAsgAkEISQ0BCwNAIAMgAS0AAGoiACAEaiAAIAEtAAFqIgBqIAAgAS0AAmoiAGogACABLQADaiIAaiAAIAEtAARqIgBqIAAgAS0ABWoiAGogACABLQAGaiIAaiAAIAEtAAdqIgNqIQQgAUEIaiEBIAJBCGsiAkEHSw0ACwsCQCACRQ0AIAJBAWshBiACQQNxIgUEQCABIQADQCACQQFrIQIgAyAALQAAaiIDIARqIQQgAEEBaiIBIQAgBUEBayIFDQALCyAGQQNJDQADQCADIAEtAABqIgAgAS0AAWoiBSABLQACaiIGIAEtAANqIgMgBiAFIAAgBGpqamohBCABQQRqIQEgAkEEayICDQALCyADQfH/A3AgBEHx/wNwQRB0cgVBAQsPCwJAIAJFDQAgAkEBayEGIAJBA3EiBQRAIAEhAANAIAJBAWshAiADIAAtAABqIgMgBGohBCAAQQFqIgEhACAFQQFrIgUNAAsLIAZBA0kNAANAIAMgAS0AAGoiACABLQABaiIFIAEtAAJqIgYgAS0AA2oiAyAGIAUgACAEampqaiEEIAFBBGohASACQQRrIgINAAsLIANB8f8DcCAEQfH/A3BBEHRyCx8AIAAgAiADQcCAASgCABEAACEAIAEgAiADEAcaIAALIwAgACAAKAJAIAIgA0HUgAEoAgARAAA2AkAgASACIAMQBxoLzSoCGH8HfiAAKAIMIgIgACgCECIDaiEQIAMgAWshASAAKAIAIgUgACgCBGohA0F/IAAoAhwiBygCpAF0IQRBfyAHKAKgAXQhCyAHKAI4IQwCf0EAIAcoAiwiEUUNABpBACACIAxJDQAaIAJBhAJqIAwgEWpNCyEWIBBBgwJrIRMgASACaiEXIANBDmshFCAEQX9zIRggC0F/cyESIAcoApwBIRUgBygCmAEhDSAHKAKIASEIIAc1AoQBIR0gBygCNCEOIAcoAjAhGSAQQQFqIQ8DQCAIQThyIQYgBSAIQQN2QQdxayELAn8gAiANIAUpAAAgCK2GIB2EIh2nIBJxQQJ0IgFqIgMtAAAiBA0AGiACIAEgDWoiAS0AAjoAACAGIAEtAAEiAWshBiACQQFqIA0gHSABrYgiHacgEnFBAnQiAWoiAy0AACIEDQAaIAIgASANaiIDLQACOgABIAYgAy0AASIDayEGIA0gHSADrYgiHacgEnFBAnRqIgMtAAAhBCACQQJqCyEBIAtBB2ohBSAGIAMtAAEiAmshCCAdIAKtiCEdAkACQAJAIARB/wFxRQ0AAkACQAJAAkACQANAIARBEHEEQCAVIB0gBK1CD4OIIhqnIBhxQQJ0aiECAn8gCCAEQQ9xIgZrIgRBG0sEQCAEIQggBQwBCyAEQThyIQggBSkAACAErYYgGoQhGiAFIARBA3ZrQQdqCyELIAMzAQIhGyAIIAItAAEiA2shCCAaIAOtiCEaIAItAAAiBEEQcQ0CA0AgBEHAAHFFBEAgCCAVIAIvAQJBAnRqIBqnQX8gBHRBf3NxQQJ0aiICLQABIgNrIQggGiADrYghGiACLQAAIgRBEHFFDQEMBAsLIAdB0f4ANgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsiAw0ACwsgAUEHSQ0BA0AgACACLQAAOgAAIAAgAi0AAToAASAAIAItAAI6AAIgACACLQADOgADIAAgAi0ABDoABCAAIAItAAU6AAUgACACLQAGOgAGIAAgAi0ABzoAByAAQQhqIQAgAkEIaiECIARBCGsiBA0ACwwBCyAERQ0AIAAgASAEED8hAAsgAAvyCAEXfyAAKAJoIgwgACgCMEGGAmsiBWtBACAFIAxJGyENIAAoAnQhAiAAKAKQASEPIAAoAkgiDiAMaiIJIAAoAnAiBUECIAUbIgVBAWsiBmoiAy0AASESIAMtAAAhEyAGIA5qIQZBAyEDIAAoApQBIRYgACgCPCEUIAAoAkwhECAAKAI4IRECQAJ/IAVBA0kEQCANIQggDgwBCyAAIABBACAJLQABIAAoAnwRAAAgCS0AAiAAKAJ8EQAAIQoDQCAAIAogAyAJai0AACAAKAJ8EQAAIQogACgCUCAKQQF0ai8BACIIIAEgCCABQf//A3FJIggbIQEgA0ECayAHIAgbIQcgA0EBaiIDIAVNDQALIAFB//8DcSAHIA1qIghB//8DcU0NASAGIAdB//8DcSIDayEGIA4gA2sLIQMCQAJAIAwgAUH//wNxTQ0AIAIgAkECdiAFIA9JGyEKIA1B//8DcSEVIAlBAmohDyAJQQRrIRcDQAJAAkAgBiABQf//A3EiC2otAAAgE0cNACAGIAtBAWoiAWotAAAgEkcNACADIAtqIgItAAAgCS0AAEcNACABIANqLQAAIAktAAFGDQELIApBAWsiCkUNAiAQIAsgEXFBAXRqLwEAIgEgCEH//wNxSw0BDAILIAJBAmohAUEAIQQgDyECAkADQCACLQAAIAEtAABHDQEgAi0AASABLQABRwRAIARBAXIhBAwCCyACLQACIAEtAAJHBEAgBEECciEEDAILIAItAAMgAS0AA0cEQCAEQQNyIQQMAgsgAi0ABCABLQAERwRAIARBBHIhBAwCCyACLQAFIAEtAAVHBEAgBEEFciEEDAILIAItAAYgAS0ABkcEQCAEQQZyIQQMAgsgAi0AByABLQAHRwRAIARBB3IhBAwCCyABQQhqIQEgAkEIaiECIARB+AFJIRggBEEIaiEEIBgNAAtBgAIhBAsCQAJAIAUgBEECaiICSQRAIAAgCyAHQf//A3FrIgY2AmwgAiAUSwRAIBQPCyACIBZPBEAgAg8LIAkgBEEBaiIFaiIBLQABIRIgAS0AACETAkAgAkEESQ0AIAIgBmogDE8NACAGQf//A3EhCCAEQQFrIQtBACEDQQAhBwNAIBAgAyAIaiARcUEBdGovAQAiASAGQf//A3FJBEAgAyAVaiABTw0IIAMhByABIQYLIANBAWoiAyALTQ0ACyAAIAAgAEEAIAIgF2oiAS0AACAAKAJ8EQAAIAEtAAEgACgCfBEAACABLQACIAAoAnwRAAAhASAAKAJQIAFBAXRqLwEAIgEgBkH//wNxTwRAIAdB//8DcSEDIAYhAQwDCyAEQQJrIgdB//8DcSIDIBVqIAFPDQYMAgsgAyAFaiEGIAIhBQsgCkEBayIKRQ0DIBAgCyARcUEBdGovAQAiASAIQf//A3FNDQMMAQsgByANaiEIIA4gA2siAyAFaiEGIAIhBQsgDCABQf//A3FLDQALCyAFDwsgAiEFCyAFIAAoAjwiACAAIAVLGwuGBQETfyAAKAJ0IgMgA0ECdiAAKAJwIgNBAiADGyIDIAAoApABSRshByAAKAJoIgogACgCMEGGAmsiBWtB//8DcUEAIAUgCkkbIQwgACgCSCIIIApqIgkgA0EBayICaiIFLQABIQ0gBS0AACEOIAlBAmohBSACIAhqIQsgACgClAEhEiAAKAI8IQ8gACgCTCEQIAAoAjghESAAKAKIAUEFSCETA0ACQCAKIAFB//8DcU0NAANAAkACQCALIAFB//8DcSIGai0AACAORw0AIAsgBkEBaiIBai0AACANRw0AIAYgCGoiAi0AACAJLQAARw0AIAEgCGotAAAgCS0AAUYNAQsgB0EBayIHRQ0CIAwgECAGIBFxQQF0ai8BACIBSQ0BDAILCyACQQJqIQRBACECIAUhAQJAA0AgAS0AACAELQAARw0BIAEtAAEgBC0AAUcEQCACQQFyIQIMAgsgAS0AAiAELQACRwRAIAJBAnIhAgwCCyABLQADIAQtAANHBEAgAkEDciECDAILIAEtAAQgBC0ABEcEQCACQQRyIQIMAgsgAS0ABSAELQAFRwRAIAJBBXIhAgwCCyABLQAGIAQtAAZHBEAgAkEGciECDAILIAEtAAcgBC0AB0cEQCACQQdyIQIMAgsgBEEIaiEEIAFBCGohASACQfgBSSEUIAJBCGohAiAUDQALQYACIQILAkAgAyACQQJqIgFJBEAgACAGNgJsIAEgD0sEQCAPDwsgASASTwRAIAEPCyAIIAJBAWoiA2ohCyADIAlqIgMtAAEhDSADLQAAIQ4gASEDDAELIBMNAQsgB0EBayIHRQ0AIAwgECAGIBFxQQF0ai8BACIBSQ0BCwsgAwvLAQECfwJAA0AgAC0AACABLQAARw0BIAAtAAEgAS0AAUcEQCACQQFyDwsgAC0AAiABLQACRwRAIAJBAnIPCyAALQADIAEtAANHBEAgAkEDcg8LIAAtAAQgAS0ABEcEQCACQQRyDwsgAC0ABSABLQAFRwRAIAJBBXIPCyAALQAGIAEtAAZHBEAgAkEGcg8LIAAtAAcgAS0AB0cEQCACQQdyDwsgAUEIaiEBIABBCGohACACQfgBSSEDIAJBCGohAiADDQALQYACIQILIAIL5wwBB38gAEF/cyEAIAJBF08EQAJAIAFBA3FFDQAgAS0AACAAQf8BcXNBAnRB0BhqKAIAIABBCHZzIQAgAkEBayIEQQAgAUEBaiIDQQNxG0UEQCAEIQIgAyEBDAELIAEtAAEgAEH/AXFzQQJ0QdAYaigCACAAQQh2cyEAIAFBAmohAwJAIAJBAmsiBEUNACADQQNxRQ0AIAEtAAIgAEH/AXFzQQJ0QdAYaigCACAAQQh2cyEAIAFBA2ohAwJAIAJBA2siBEUNACADQQNxRQ0AIAEtAAMgAEH/AXFzQQJ0QdAYaigCACAAQQh2cyEAIAFBBGohASACQQRrIQIMAgsgBCECIAMhAQwBCyAEIQIgAyEBCyACQRRuIgNBbGwhCQJAIANBAWsiCEUEQEEAIQQMAQsgA0EUbCABakEUayEDQQAhBANAIAEoAhAgB3MiB0EWdkH8B3FB0DhqKAIAIAdBDnZB/AdxQdAwaigCACAHQQZ2QfwHcUHQKGooAgAgB0H/AXFBAnRB0CBqKAIAc3NzIQcgASgCDCAGcyIGQRZ2QfwHcUHQOGooAgAgBkEOdkH8B3FB0DBqKAIAIAZBBnZB/AdxQdAoaigCACAGQf8BcUECdEHQIGooAgBzc3MhBiABKAIIIAVzIgVBFnZB/AdxQdA4aigCACAFQQ52QfwHcUHQMGooAgAgBUEGdkH8B3FB0ChqKAIAIAVB/wFxQQJ0QdAgaigCAHNzcyEFIAEoAgQgBHMiBEEWdkH8B3FB0DhqKAIAIARBDnZB/AdxQdAwaigCACAEQQZ2QfwHcUHQKGooAgAgBEH/AXFBAnRB0CBqKAIAc3NzIQQgASgCACAAcyIAQRZ2QfwHcUHQOGooAgAgAEEOdkH8B3FB0DBqKAIAIABBBnZB/AdxQdAoaigCACAAQf8BcUECdEHQIGooAgBzc3MhACABQRRqIQEgCEEBayIIDQALIAMhAQsgAiAJaiECIAEoAhAgASgCDCABKAIIIAEoAgQgASgCACAAcyIAQQh2IABB/wFxQQJ0QdAYaigCAHMiAEEIdiAAQf8BcUECdEHQGGooAgBzIgBBCHYgAEH/AXFBAnRB0BhqKAIAcyIAQf8BcUECdEHQGGooAgAgBHNzIABBCHZzIgBBCHYgAEH/AXFBAnRB0BhqKAIAcyIAQQh2IABB/wFxQQJ0QdAYaigCAHMiAEEIdiAAQf8BcUECdEHQGGooAgBzIgBB/wFxQQJ0QdAYaigCACAFc3MgAEEIdnMiAEEIdiAAQf8BcUECdEHQGGooAgBzIgBBCHYgAEH/AXFBAnRB0BhqKAIAcyIAQQh2IABB/wFxQQJ0QdAYaigCAHMiAEH/AXFBAnRB0BhqKAIAIAZzcyAAQQh2cyIAQQh2IABB/wFxQQJ0QdAYaigCAHMiAEEIdiAAQf8BcUECdEHQGGooAgBzIgBBCHYgAEH/AXFBAnRB0BhqKAIAcyIAQf8BcUECdEHQGGooAgAgB3NzIABBCHZzIgBBCHYgAEH/AXFBAnRB0BhqKAIAcyIAQQh2IABB/wFxQQJ0QdAYaigCAHMiAEEIdiAAQf8BcUECdEHQGGooAgBzIgBBCHYgAEH/AXFBAnRB0BhqKAIAcyEAIAFBFGohAQsgAkEHSwRAA0AgAS0AByABLQAGIAEtAAUgAS0ABCABLQADIAEtAAIgAS0AASABLQAAIABB/wFxc0ECdEHQGGooAgAgAEEIdnMiAEH/AXFzQQJ0QdAYaigCACAAQQh2cyIAQf8BcXNBAnRB0BhqKAIAIABBCHZzIgBB/wFxc0ECdEHQGGooAgAgAEEIdnMiAEH/AXFzQQJ0QdAYaigCACAAQQh2cyIAQf8BcXNBAnRB0BhqKAIAIABBCHZzIgBB/wFxc0ECdEHQGGooAgAgAEEIdnMiAEH/AXFzQQJ0QdAYaigCACAAQQh2cyEAIAFBCGohASACQQhrIgJBB0sNAAsLAkAgAkUNACACQQFxBH8gAS0AACAAQf8BcXNBAnRB0BhqKAIAIABBCHZzIQAgAUEBaiEBIAJBAWsFIAILIQMgAkEBRg0AA0AgAS0AASABLQAAIABB/wFxc0ECdEHQGGooAgAgAEEIdnMiAEH/AXFzQQJ0QdAYaigCACAAQQh2cyEAIAFBAmohASADQQJrIgMNAAsLIABBf3MLwgIBA38jAEEQayIIJAACfwJAIAAEQCAEDQEgBVANAQsgBgRAIAZBADYCBCAGQRI2AgALQQAMAQtBgAEQCSIHRQRAIAYEQCAGQQA2AgQgBkEONgIAC0EADAELIAcgATcDCCAHQgA3AwAgB0EoaiIJECogByAFNwMYIAcgBDYCECAHIAM6AGAgB0EANgJsIAdCADcCZCAAKQMYIQEgCEF/NgIIIAhCjoCAgPAANwMAIAdBECAIECQgAUL/gQGDhCIBNwNwIAcgAadBBnZBAXE6AHgCQCACRQ0AIAkgAhBgQX9KDQAgBxAGQQAMAQsgBhBfIgIEQCAAIAAoAjBBAWo2AjAgAiAHNgIIIAJBATYCBCACIAA2AgAgAkI/IAAgB0EAQgBBDkEBEQoAIgEgAUIAUxs3AxgLIAILIQAgCEEQaiQAIAALYgEBf0E4EAkiAUUEQCAABEAgAEEANgIEIABBDjYCAAtBAA8LIAFBADYCCCABQgA3AwAgAUIANwMgIAFCgICAgBA3AiwgAUEAOgAoIAFBADYCFCABQgA3AgwgAUEAOwE0IAELuwEBAX4gASkDACICQgKDUEUEQCAAIAEpAxA3AxALIAJCBINQRQRAIAAgASkDGDcDGAsgAkIIg1BFBEAgACABKQMgNwMgCyACQhCDUEUEQCAAIAEoAig2AigLIAJCIINQRQRAIAAgASgCLDYCLAsgAkLAAINQRQRAIAAgAS8BMDsBMAsgAkKAAYNQRQRAIAAgAS8BMjsBMgsgAkKAAoNQRQRAIAAgASgCNDYCNAsgACAAKQMAIAKENwMAQQALGQAgAUUEQEEADwsgACABKAIAIAEzAQQQGws3AQJ/IABBACABG0UEQCAAIAFGDwsgAC8BBCIDIAEvAQRGBH8gACgCACABKAIAIAMQPQVBAQtFCyIBAX8gAUUEQEEADwsgARAJIgJFBEBBAA8LIAIgACABEAcLKQAgACABIAIgAyAEEEUiAEUEQEEADwsgACACQQAgBBA1IQEgABAGIAELcQEBfgJ/AkAgAkJ/VwRAIAMEQCADQQA2AgQgA0EUNgIACwwBCyAAIAEgAhARIgRCf1cEQCADBEAgAyAAKAIMNgIAIAMgACgCEDYCBAsMAQtBACACIARXDQEaIAMEQCADQQA2AgQgA0ERNgIACwtBfwsLNQAgACABIAJBABAmIgBFBEBBfw8LIAMEQCADIAAtAAk6AAALIAQEQCAEIAAoAkQ2AgALQQAL/AECAn8BfiMAQRBrIgMkAAJAIAAgA0EOaiABQYAGQQAQRiIARQRAIAIhAAwBCyADLwEOIgFBBUkEQCACIQAMAQsgAC0AAEEBRwRAIAIhAAwBCyAAIAGtQv//A4MQFyIBRQRAIAIhAAwBCyABEH0aAkAgARAVIAIEfwJ/IAIvAQQhAEEAIAIoAgAiBEUNABpBACAEIABB1IABKAIAEQAACwVBAAtHBEAgAiEADAELIAEgAS0AAAR+IAEpAwggASkDEH0FQgALIgVC//8DgxATIAWnQf//A3FBgBBBABA1IgBFBEAgAiEADAELIAIQEAsgARAICyADQRBqJAAgAAvmDwIIfwJ+IwBB4ABrIgckAEEeQS4gAxshCwJAAkAgAgRAIAIiBSIGLQAABH4gBikDCCAGKQMQfQVCAAsgC61aDQEgBARAIARBADYCBCAEQRM2AgALQn8hDQwCCyABIAutIAcgBBAtIgUNAEJ/IQ0MAQsgBUIEEBMoAABBoxJBqBIgAxsoAABHBEAgBARAIARBADYCBCAEQRM2AgALQn8hDSACDQEgBRAIDAELIABCADcDICAAQQA2AhggAEL/////DzcDECAAQQA7AQwgAEG/hig2AgggAEEBOgAGIABBADsBBCAAQQA2AgAgAEIANwNIIABBgIDYjXg2AkQgAEIANwMoIABCADcDMCAAQgA3AzggAEFAa0EAOwEAIABCADcDUCAAIAMEf0EABSAFEAwLOwEIIAAgBRAMOwEKIAAgBRAMOwEMIAAgBRAMNgIQIAUQDCEGIAUQDCEJIAdBADYCWCAHQgA3A1AgB0IANwNIIAcgCUEfcTYCPCAHIAZBC3Y2AjggByAGQQV2QT9xNgI0IAcgBkEBdEE+cTYCMCAHIAlBCXZB0ABqNgJEIAcgCUEFdkEPcUEBazYCQCAAIAdBMGoQBTYCFCAAIAUQFTYCGCAAIAUQFa03AyAgACAFEBWtNwMoIAUQDCEIIAUQDCEGIAACfiADBEBBACEJIABBADYCRCAAQQA7AUAgAEEANgI8QgAMAQsgBRAMIQkgACAFEAw2AjwgACAFEAw7AUAgACAFEBU2AkQgBRAVrQs3A0ggBS0AAEUEQCAEBEAgBEEANgIEIARBFDYCAAtCfyENIAINASAFEAgMAQsCQCAALwEMIgpBAXEEQCAKQcAAcQRAIABB//8DOwFSDAILIABBATsBUgwBCyAAQQA7AVILIABBADYCOCAAQgA3AzAgBiAIaiAJaiEKAkAgAgRAIAUtAAAEfiAFKQMIIAUpAxB9BUIACyAKrVoNASAEBEAgBEEANgIEIARBFTYCAAtCfyENDAILIAUQCCABIAqtQQAgBBAtIgUNAEJ/IQ0MAQsCQCAIRQ0AIAAgBSABIAhBASAEEGQiCDYCMCAIRQRAIAQoAgBBEUYEQCAEBEAgBEEANgIEIARBFTYCAAsLQn8hDSACDQIgBRAIDAILIAAtAA1BCHFFDQAgCEECECNBBUcNACAEBEAgBEEANgIEIARBFTYCAAtCfyENIAINASAFEAgMAQsgAEE0aiEIAkAgBkUNACAFIAEgBkEAIAQQRSIMRQRAQn8hDSACDQIgBRAIDAILIAwgBkGAAkGABCADGyAIIAQQbiEGIAwQBiAGRQRAQn8hDSACDQIgBRAIDAILIANFDQAgAEEBOgAECwJAIAlFDQAgACAFIAEgCUEAIAQQZCIBNgI4IAFFBEBCfyENIAINAiAFEAgMAgsgAC0ADUEIcUUNACABQQIQI0EFRw0AIAQEQCAEQQA2AgQgBEEVNgIAC0J/IQ0gAg0BIAUQCAwBCyAAIAAoAjRB9eABIAAoAjAQZzYCMCAAIAAoAjRB9cYBIAAoAjgQZzYCOAJAAkAgACkDKEL/////D1ENACAAKQMgQv////8PUQ0AIAApA0hC/////w9SDQELAkACQAJAIAgoAgAgB0EwakEBQYACQYAEIAMbIAQQRiIBRQRAIAJFDQEMAgsgASAHMwEwEBciAUUEQCAEBEAgBEEANgIEIARBDjYCAAsgAkUNAQwCCwJAIAApAyhC/////w9RBEAgACABEB03AygMAQsgA0UNAEEAIQYCQCABKQMQIg5CCHwiDSAOVA0AIAEpAwggDVQNACABIA03AxBBASEGCyABIAY6AAALIAApAyBC/////w9RBEAgACABEB03AyALAkAgAw0AIAApA0hC/////w9RBEAgACABEB03A0gLIAAoAjxB//8DRw0AIAAgARAVNgI8CyABLQAABH8gASkDECABKQMIUQVBAAsNAiAEBEAgBEEANgIEIARBFTYCAAsgARAIIAINAQsgBRAIC0J/IQ0MAgsgARAICyAFLQAARQRAIAQEQCAEQQA2AgQgBEEUNgIAC0J/IQ0gAg0BIAUQCAwBCyACRQRAIAUQCAtCfyENIAApA0hCf1cEQCAEBEAgBEEWNgIEIARBBDYCAAsMAQsjAEEQayIDJABBASEBAkAgACgCEEHjAEcNAEEAIQECQCAAKAI0IANBDmpBgbICQYAGQQAQRiICBEAgAy8BDiIFQQZLDQELIAQEQCAEQQA2AgQgBEEVNgIACwwBCyACIAWtQv//A4MQFyICRQRAIAQEQCAEQQA2AgQgBEEUNgIACwwBC0EBIQECQAJAAkAgAhAMQQFrDgICAQALQQAhASAEBEAgBEEANgIEIARBGDYCAAsgAhAIDAILIAApAyhCE1YhAQsgAkICEBMvAABBwYoBRwRAQQAhASAEBEAgBEEANgIEIARBGDYCAAsgAhAIDAELIAIQfUEBayIFQf8BcUEDTwRAQQAhASAEBEAgBEEANgIEIARBGDYCAAsgAhAIDAELIAMvAQ5BB0cEQEEAIQEgBARAIARBADYCBCAEQRU2AgALIAIQCAwBCyAAIAE6AAYgACAFQf8BcUGBAmo7AVIgACACEAw2AhAgAhAIQQEhAQsgA0EQaiQAIAFFDQAgCCAIKAIAEG02AgAgCiALaq0hDQsgB0HgAGokACANC4ECAQR/IwBBEGsiBCQAAkAgASAEQQxqQcAAQQAQJSIGRQ0AIAQoAgxBBWoiA0GAgARPBEAgAgRAIAJBADYCBCACQRI2AgALDAELQQAgA60QFyIDRQRAIAIEQCACQQA2AgQgAkEONgIACwwBCyADQQEQcCADIAEEfwJ/IAEvAQQhBUEAIAEoAgAiAUUNABpBACABIAVB1IABKAIAEQAACwVBAAsQEiADIAYgBCgCDBAsAn8gAy0AAEUEQCACBEAgAkEANgIEIAJBFDYCAAtBAAwBCyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYgABAGIAEiAA0ACwwDCwJAAkBBEBAJIgUEQCAFIAY7AQogBSAHOwEIIAUgAjYCBCAFQQA2AgAgBkUNASAFIAggBhBjIgY2AgwgBg0CIAUQBgtBACECIAQEQCAEQQA2AgQgBEEONgIACyABEAggAEUNBANAIAAoAgAhASAAKAIMEAYgABAGIAEiAA0ACwwECyAFQQA2AgwLAkAgAEUEQCAFIQAMAQsgCSAFNgIACyAFIQkgAS0AAA0ACwsCQCABLQAABH8gASkDECABKQMIUQVBAAsNACABIAEtAAAEfiABKQMIIAEpAxB9BUIACyIKQv////8PgxATIQICQCAKpyIFQQNLDQAgAkUNACACQcEUIAUQPUUNAQtBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAQNAIAAoAgAhASAAKAIMEAYgABAGIAEiAA0ACwwBCyABEAggAwRAIAMgADYCAEEBDwtBASECIABFDQADQCAAKAIAIQEgACgCDBAGIAAQBiABIgANAAsLIAILvgEBBX8gAAR/IAAhAgNAIAIiBCgCACICDQALIAEEQANAIAEiAy8BCCEGIAMoAgAhASAAIQICQAJAA0ACQCACLwEIIAZHDQAgAi8BCiIFIAMvAQpHDQAgBUUNAiACKAIMIAMoAgwgBRA9RQ0CCyACKAIAIgINAAsgA0EANgIAIAQgAzYCACADIQQMAQsgAiACKAIEIAMoAgRBgAZxcjYCBCADQQA2AgAgAygCDBAGIAMQBgsgAQ0ACwsgAAUgAQsLVQICfgF/AkACQCAALQAARQ0AIAApAxAiAkIBfCIDIAJUDQAgAyAAKQMIWA0BCyAAQQA6AAAPCyAAKAIEIgRFBEAPCyAAIAM3AxAgBCACp2ogAToAAAt9AQN/IwBBEGsiAiQAIAIgATYCDEF/IQMCQCAALQAoDQACQCAAKAIAIgRFDQAgBCABEHFBf0oNACAAKAIAIQEgAEEMaiIABEAgACABKAIMNgIAIAAgASgCEDYCBAsMAQsgACACQQxqQgRBExAOQj+HpyEDCyACQRBqJAAgAwvdAQEDfyABIAApAzBaBEAgAEEIagRAIABBADYCDCAAQRI2AggLQX8PCyAAQQhqIQIgAC0AGEECcQRAIAIEQCACQQA2AgQgAkEZNgIAC0F/DwtBfyEDAkAgACABQQAgAhBTIgRFDQAgACgCUCAEIAIQfkUNAAJ/IAEgACkDMFoEQCAAQQhqBEAgAEEANgIMIABBEjYCCAtBfwwBCyABp0EEdCICIAAoAkBqKAIEECAgACgCQCACaiICQQA2AgQgAhBAQQALDQAgACgCQCABp0EEdGpBAToADEEAIQMLIAMLpgIBBX9BfyEFAkAgACABQQBBABAmRQ0AIAAtABhBAnEEQCAAQQhqIgAEQCAAQQA2AgQgAEEZNgIAC0F/DwsCfyAAKAJAIgQgAaciBkEEdGooAgAiBUUEQCADQYCA2I14RyEHQQMMAQsgBSgCRCADRyEHIAUtAAkLIQggBCAGQQR0aiIEIQYgBCgCBCEEQQAgAiAIRiAHG0UEQAJAIAQNACAGIAUQKyIENgIEIAQNACAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0F/DwsgBCADNgJEIAQgAjoACSAEIAQoAgBBEHI2AgBBAA8LQQAhBSAERQ0AIAQgBCgCAEFvcSIANgIAIABFBEAgBBAgIAZBADYCBEEADwsgBCADNgJEIAQgCDoACQsgBQvjCAIFfwR+IAAtABhBAnEEQCAAQQhqBEAgAEEANgIMIABBGTYCCAtCfw8LIAApAzAhCwJAIANBgMAAcQRAIAAgASADQQAQTCIJQn9SDQELAn4CQAJAIAApAzAiCUIBfCIMIAApAzgiClQEQCAAKAJAIQQMAQsgCkIBhiIJQoAIIAlCgAhUGyIJQhAgCUIQVhsgCnwiCadBBHQiBK0gCkIEhkLw////D4NUDQEgACgCQCAEEDQiBEUNASAAIAk3AzggACAENgJAIAApAzAiCUIBfCEMCyAAIAw3AzAgBCAJp0EEdGoiBEIANwIAIARCADcABSAJDAELIABBCGoEQCAAQQA2AgwgAEEONgIIC0J/CyIJQgBZDQBCfw8LAkAgAUUNAAJ/QQAhBCAJIAApAzBaBEAgAEEIagRAIABBADYCDCAAQRI2AggLQX8MAQsgAC0AGEECcQRAIABBCGoEQCAAQQA2AgwgAEEZNgIIC0F/DAELAkAgAUUNACABLQAARQ0AQX8gASABECJB//8DcSADIABBCGoQNSIERQ0BGiADQYAwcQ0AIARBABAjQQNHDQAgBEECNgIICwJAIAAgAUEAQQAQTCIKQgBTIgENACAJIApRDQAgBBAQIABBCGoEQCAAQQA2AgwgAEEKNgIIC0F/DAELAkAgAUEBIAkgClEbRQ0AAkACfwJAIAAoAkAiASAJpyIFQQR0aiIGKAIAIgMEQCADKAIwIAQQYg0BCyAEIAYoAgQNARogBiAGKAIAECsiAzYCBCAEIAMNARogAEEIagRAIABBADYCDCAAQQ42AggLDAILQQEhByAGKAIAKAIwC0EAQQAgAEEIaiIDECUiCEUNAAJAAkAgASAFQQR0aiIFKAIEIgENACAGKAIAIgENAEEAIQEMAQsgASgCMCIBRQRAQQAhAQwBCyABQQBBACADECUiAUUNAQsgACgCUCAIIAlBACADEE1FDQAgAQRAIAAoAlAgAUEAEH4aCyAFKAIEIQMgBwRAIANFDQIgAy0AAEECcUUNAiADKAIwEBAgBSgCBCIBIAEoAgBBfXEiAzYCACADRQRAIAEQICAFQQA2AgQgBBAQQQAMBAsgASAGKAIAKAIwNgIwIAQQEEEADAMLIAMoAgAiAUECcQRAIAMoAjAQECAFKAIEIgMoAgAhAQsgAyAENgIwIAMgAUECcjYCAEEADAILIAQQEEF/DAELIAQQEEEAC0UNACALIAApAzBRBEBCfw8LIAAoAkAgCadBBHRqED4gACALNwMwQn8PCyAJpyIGQQR0IgEgACgCQGoQQAJAAkAgACgCQCIEIAFqIgMoAgAiBUUNAAJAIAMoAgQiAwRAIAMoAgAiAEEBcUUNAQwCCyAFECshAyAAKAJAIgQgBkEEdGogAzYCBCADRQ0CIAMoAgAhAAsgA0F+NgIQIAMgAEEBcjYCAAsgASAEaiACNgIIIAkPCyAAQQhqBEAgAEEANgIMIABBDjYCCAtCfwteAQF/IwBBEGsiAiQAAn8gACgCJEEBRwRAIABBDGoiAARAIABBADYCBCAAQRI2AgALQX8MAQsgAkEANgIIIAIgATcDACAAIAJCEEEMEA5CP4enCyEAIAJBEGokACAAC9oDAQZ/IwBBEGsiBSQAIAUgAjYCDCMAQaABayIEJAAgBEEIakHA8ABBkAEQBxogBCAANgI0IAQgADYCHCAEQX4gAGsiA0H/////ByADQf////8HSRsiBjYCOCAEIAAgBmoiADYCJCAEIAA2AhggBEEIaiEAIwBB0AFrIgMkACADIAI2AswBIANBoAFqQQBBKBAZIAMgAygCzAE2AsgBAkBBACABIANByAFqIANB0ABqIANBoAFqEEpBAEgNACAAKAJMQQBOIQcgACgCACECIAAsAEpBAEwEQCAAIAJBX3E2AgALIAJBIHEhCAJ/IAAoAjAEQCAAIAEgA0HIAWogA0HQAGogA0GgAWoQSgwBCyAAQdAANgIwIAAgA0HQAGo2AhAgACADNgIcIAAgAzYCFCAAKAIsIQIgACADNgIsIAAgASADQcgBaiADQdAAaiADQaABahBKIAJFDQAaIABBAEEAIAAoAiQRAAAaIABBADYCMCAAIAI2AiwgAEEANgIcIABBADYCECAAKAIUGiAAQQA2AhRBAAsaIAAgACgCACAIcjYCACAHRQ0ACyADQdABaiQAIAYEQCAEKAIcIgAgACAEKAIYRmtBADoAAAsgBEGgAWokACAFQRBqJAALUwEDfwJAIAAoAgAsAABBMGtBCk8NAANAIAAoAgAiAiwAACEDIAAgAkEBajYCACABIANqQTBrIQEgAiwAAUEwa0EKTw0BIAFBCmwhAQwACwALIAELuwIAAkAgAUEUSw0AAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4KAAECAwQFBgcICQoLIAIgAigCACIBQQRqNgIAIAAgASgCADYCAA8LIAIgAigCACIBQQRqNgIAIAAgATQCADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATUCADcDAA8LIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASkDADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASsDADkDAA8LIAAgAkEAEQcACwubAgAgAEUEQEEADwsCfwJAIAAEfyABQf8ATQ0BAkBB9IIBKAIAKAIARQRAIAFBgH9xQYC/A0YNAwwBCyABQf8PTQRAIAAgAUE/cUGAAXI6AAEgACABQQZ2QcABcjoAAEECDAQLIAFBgLADT0EAIAFBgEBxQYDAA0cbRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMMBAsgAUGAgARrQf//P00EQCAAIAFBP3FBgAFyOgADIAAgAUESdkHwAXI6AAAgACABQQZ2QT9xQYABcjoAAiAAIAFBDHZBP3FBgAFyOgABQQQMBAsLQYSEAUEZNgIAQX8FQQELDAELIAAgAToAAEEBCwvjAQECfyACQQBHIQMCQAJAAkAgAEEDcUUNACACRQ0AIAFB/wFxIQQDQCAALQAAIARGDQIgAkEBayICQQBHIQMgAEEBaiIAQQNxRQ0BIAINAAsLIANFDQELAkAgAC0AACABQf8BcUYNACACQQRJDQAgAUH/AXFBgYKECGwhAwNAIAAoAgAgA3MiBEF/cyAEQYGChAhrcUGAgYKEeHENASAAQQRqIQAgAkEEayICQQNLDQALCyACRQ0AIAFB/wFxIQEDQCABIAAtAABGBEAgAA8LIABBAWohACACQQFrIgINAAsLQQALeQEBfAJAIABFDQAgACsDECAAKwMgIgIgAUQAAAAAAAAAACABRAAAAAAAAAAAZBsiAUQAAAAAAADwPyABRAAAAAAAAPA/YxsgACsDKCACoaKgIgEgACsDGKFjRQ0AIAAoAgAgASAAKAIMIAAoAgQRDgAgACABOQMYCwtIAQF8AkAgAEUNACAAKwMQIAArAyAiASAAKwMoIAGhoCIBIAArAxihY0UNACAAKAIAIAEgACgCDCAAKAIEEQ4AIAAgATkDGAsLWgICfgF/An8CQAJAIAAtAABFDQAgACkDECIBQgF8IgIgAVQNACACIAApAwhYDQELIABBADoAAEEADAELQQAgACgCBCIDRQ0AGiAAIAI3AxAgAyABp2otAAALC4IEAgZ/AX4gAEEAIAEbRQRAIAIEQCACQQA2AgQgAkESNgIAC0EADwsCQAJAIAApAwhQDQAgACgCECABLQAAIgQEf0Kl6wohCSABIQMDQCAJIAStQv8Bg3whCSADLQABIgQEQCADQQFqIQMgCUL/////D4NCIX4hCQwBCwsgCacFQYUqCyIEIAAoAgBwQQJ0aiIGKAIAIgNFDQADQAJAIAMoAhwgBEcNACABIAMoAgAQOA0AAkAgAykDCEJ/UQRAIAMoAhghAQJAIAUEQCAFIAE2AhgMAQsgBiABNgIACyADEAYgACAAKQMIQgF9Igk3AwggCbogACgCACIBuER7FK5H4XqEP6JjRQ0BIAFBgQJJDQECf0EAIQMgACgCACIGIAFBAXYiBUcEQCAFEDwiB0UEQCACBEAgAkEANgIEIAJBDjYCAAtBAAwCCwJAIAApAwhCACAGG1AEQCAAKAIQIQQMAQsgACgCECEEA0AgBCADQQJ0aigCACIBBEADQCABKAIYIQIgASAHIAEoAhwgBXBBAnRqIggoAgA2AhggCCABNgIAIAIiAQ0ACwsgA0EBaiIDIAZHDQALCyAEEAYgACAFNgIAIAAgBzYCEAtBAQsNAQwFCyADQn83AxALQQEPCyADIgUoAhgiAw0ACwsgAgRAIAJBADYCBCACQQk2AgALC0EAC6UGAgl/AX4jAEHwAGsiBSQAAkACQCAARQ0AAkAgAQRAIAEpAzAgAlYNAQtBACEDIABBCGoEQCAAQQA2AgwgAEESNgIICwwCCwJAIANBCHENACABKAJAIAKnQQR0aiIGKAIIRQRAIAYtAAxFDQELQQAhAyAAQQhqBEAgAEEANgIMIABBDzYCCAsMAgsgASACIANBCHIgBUE4ahCKAUF/TARAQQAhAyAAQQhqBEAgAEEANgIMIABBFDYCCAsMAgsgA0EDdkEEcSADciIGQQRxIQcgBSkDUCEOIAUvAWghCQJAIANBIHFFIAUvAWpBAEdxIgtFDQAgBA0AIAAoAhwiBA0AQQAhAyAAQQhqBEAgAEEANgIMIABBGjYCCAsMAgsgBSkDWFAEQCAAQQBCAEEAEFIhAwwCCwJAIAdFIgwgCUEAR3EiDUEBckUEQEEAIQMgBUEAOwEwIAUgDjcDICAFIA43AxggBSAFKAJgNgIoIAVC3AA3AwAgASgCACAOIAVBACABIAIgAEEIahBeIgYNAQwDC0EAIQMgASACIAYgAEEIaiIGECYiB0UNAiABKAIAIAUpA1ggBUE4aiAHLwEMQQF2QQNxIAEgAiAGEF4iBkUNAgsCfyAGIAE2AiwCQCABKAJEIghBAWoiCiABKAJIIgdJBEAgASgCTCEHDAELIAEoAkwgB0EKaiIIQQJ0EDQiB0UEQCABQQhqBEAgAUEANgIMIAFBDjYCCAtBfwwCCyABIAc2AkwgASAINgJIIAEoAkQiCEEBaiEKCyABIAo2AkQgByAIQQJ0aiAGNgIAQQALQX9MBEAgBhALDAELAkAgC0UEQCAGIQEMAQtBJkEAIAUvAWpBAUYbIgFFBEAgAEEIagRAIABBADYCDCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcNAQsCfwJ/An8gASgCBCICBEAgBCAAKAIoIAIQHiAAKAIcIQELIAEoAlAiAgsEQCAAKAIkIAAoAiggAhAeIAAoAhwhAQsgASgCTCICCwRAIAAoAiQgACgCKCACEB4gACgCHCEBCyABKAJIIgILBEAgACgCJCAAKAIoIAIQHiAAKAIcIQELIAAoAiQgACgCKCABEB4gAEEANgIcQX1BACADQfEARhshAgsgAgvrCQEIfyAAKAIwIgMgACgCDEEFayICIAIgA0sbIQggACgCACIEKAIEIQkgAUEERiEHAkADQCAEKAIQIgMgACgCoC5BKmpBA3UiAkkEQEEBIQYMAgsgCCADIAJrIgMgACgCaCAAKAJYayICIAQoAgRqIgVB//8DIAVB//8DSRsiBiADIAZJGyIDSwRAQQEhBiADQQBHIAdyRQ0CIAFFDQIgAyAFRw0CCyAAQQBBACAHIAMgBUZxIgUQOSAAIAAoAhBBBGsiBDYCECAAKAIEIARqIAM7AAAgACAAKAIQQQJqIgQ2AhAgACgCBCAEaiADQX9zOwAAIAAgACgCEEECajYCECAAKAIAEAoCfyACBEAgACgCACgCDCAAKAJIIAAoAlhqIAMgAiACIANLGyICEAcaIAAoAgAiBCAEKAIMIAJqNgIMIAQgBCgCECACazYCECAEIAQoAhQgAmo2AhQgACAAKAJYIAJqNgJYIAMgAmshAwsgAwsEQCAAKAIAIgIgAigCDCADEIMBIAAoAgAiAiACKAIMIANqNgIMIAIgAigCECADazYCECACIAIoAhQgA2o2AhQLIAAoAgAhBCAFRQ0AC0EAIQYLAkAgCSAEKAIEayICRQRAIAAoAmghAwwBCwJAIAAoAjAiAyACTQRAIABBAjYCgC4gACgCSCAEKAIAIANrIAMQBxogACAAKAIwIgM2AoQuIAAgAzYCaAwBCyACIAAoAkQgACgCaCIFa08EQCAAIAUgA2siBDYCaCAAKAJIIgUgAyAFaiAEEAcaIAAoAoAuIgNBAU0EQCAAIANBAWo2AoAuCyAAIAAoAmgiBSAAKAKELiIDIAMgBUsbNgKELiAAKAIAIQQLIAAoAkggBWogBCgCACACayACEAcaIAAgACgCaCACaiIDNgJoIAAgACgCMCAAKAKELiIEayIFIAIgAiAFSxsgBGo2AoQuCyAAIAM2AlgLIAAgAyAAKAJAIgIgAiADSRs2AkBBAyECAkAgBkUNACAAKAIAIgUoAgQhAgJAAkAgAUF7cUUNACACDQBBASECIAMgACgCWEYNAiAAKAJEIANrIQRBACECDAELIAIgACgCRCADayIETQ0AIAAoAlgiByAAKAIwIgZIDQAgACADIAZrIgM2AmggACAHIAZrNgJYIAAoAkgiAiACIAZqIAMQBxogACgCgC4iA0EBTQRAIAAgA0EBajYCgC4LIAAgACgCaCIDIAAoAoQuIgIgAiADSxs2AoQuIAAoAjAgBGohBCAAKAIAIgUoAgQhAgsCQCACIAQgAiAESRsiAkUEQCAAKAIwIQUMAQsgBSAAKAJIIANqIAIQgwEgACAAKAJoIAJqIgM2AmggACAAKAIwIgUgACgChC4iBGsiBiACIAIgBksbIARqNgKELgsgACADIAAoAkAiAiACIANJGzYCQCADIAAoAlgiBmsiAyAFIAAoAgwgACgCoC5BKmpBA3VrIgJB//8DIAJB//8DSRsiBCAEIAVLG0kEQEEAIQIgAUEERiADQQBHckUNASABRQ0BIAAoAgAoAgQNASADIARLDQELQQAhAiABQQRGBEAgACgCACgCBEUgAyAETXEhAgsgACAAKAJIIAZqIAQgAyADIARLGyIBIAIQOSAAIAAoAlggAWo2AlggACgCABAKQQJBACACGw8LIAIL/woCCn8DfiAAKQOYLiENIAAoAqAuIQQgAkEATgRAQQRBAyABLwECIggbIQlBB0GKASAIGyEFQX8hCgNAIAghByABIAsiDEEBaiILQQJ0ai8BAiEIAkACQCAGQQFqIgMgBU4NACAHIAhHDQAgAyEGDAELAkAgAyAJSARAIAAgB0ECdGoiBkHOFWohCSAGQcwVaiEKA0AgCjMBACEPAn8gBCAJLwEAIgZqIgVBP00EQCAPIASthiANhCENIAUMAQsgBEHAAEYEQCAAKAIEIAAoAhBqIA03AAAgACAAKAIQQQhqNgIQIA8hDSAGDAELIAAoAgQgACgCEGogDyAErYYgDYQ3AAAgACAAKAIQQQhqNgIQIA9BwAAgBGutiCENIAVBQGoLIQQgA0EBayIDDQALDAELIAcEQAJAIAcgCkYEQCANIQ8gBCEFIAMhBgwBCyAAIAdBAnRqIgNBzBVqMwEAIQ8gBCADQc4Vai8BACIDaiIFQT9NBEAgDyAErYYgDYQhDwwBCyAEQcAARgRAIAAoAgQgACgCEGogDTcAACAAIAAoAhBBCGo2AhAgAyEFDAELIAAoAgQgACgCEGogDyAErYYgDYQ3AAAgACAAKAIQQQhqNgIQIAVBQGohBSAPQcAAIARrrYghDwsgADMBjBYhDgJAIAUgAC8BjhYiBGoiA0E/TQRAIA4gBa2GIA+EIQ4MAQsgBUHAAEYEQCAAKAIEIAAoAhBqIA83AAAgACAAKAIQQQhqNgIQIAQhAwwBCyAAKAIEIAAoAhBqIA4gBa2GIA+ENwAAIAAgACgCEEEIajYCECADQUBqIQMgDkHAACAFa62IIQ4LIAasQgN9IQ0gA0E9TQRAIANBAmohBCANIAOthiAOhCENDAILIANBwABGBEAgACgCBCAAKAIQaiAONwAAIAAgACgCEEEIajYCEEECIQQMAgsgACgCBCAAKAIQaiANIAOthiAOhDcAACAAIAAoAhBBCGo2AhAgA0E+ayEEIA1BwAAgA2utiCENDAELIAZBCUwEQCAAMwGQFiEOAkAgBCAALwGSFiIFaiIDQT9NBEAgDiAErYYgDYQhDgwBCyAEQcAARgRAIAAoAgQgACgCEGogDTcAACAAIAAoAhBBCGo2AhAgBSEDDAELIAAoAgQgACgCEGogDiAErYYgDYQ3AAAgACAAKAIQQQhqNgIQIANBQGohAyAOQcAAIARrrYghDgsgBqxCAn0hDSADQTxNBEAgA0EDaiEEIA0gA62GIA6EIQ0MAgsgA0HAAEYEQCAAKAIEIAAoAhBqIA43AAAgACAAKAIQQQhqNgIQQQMhBAwCCyAAKAIEIAAoAhBqIA0gA62GIA6ENwAAIAAgACgCEEEIajYCECADQT1rIQQgDUHAACADa62IIQ0MAQsgADMBlBYhDgJAIAQgAC8BlhYiBWoiA0E/TQRAIA4gBK2GIA2EIQ4MAQsgBEHAAEYEQCAAKAIEIAAoAhBqIA03AAAgACAAKAIQQQhqNgIQIAUhAwwBCyAAKAIEIAAoAhBqIA4gBK2GIA2ENwAAIAAgACgCEEEIajYCECADQUBqIQMgDkHAACAEa62IIQ4LIAatQgp9IQ0gA0E4TQRAIANBB2ohBCANIAOthiAOhCENDAELIANBwABGBEAgACgCBCAAKAIQaiAONwAAIAAgACgCEEEIajYCEEEHIQQMAQsgACgCBCAAKAIQaiANIAOthiAOhDcAACAAIAAoAhBBCGo2AhAgA0E5ayEEIA1BwAAgA2utiCENC0EAIQYCfyAIRQRAQYoBIQVBAwwBC0EGQQcgByAIRiIDGyEFQQNBBCADGwshCSAHIQoLIAIgDEcNAAsLIAAgBDYCoC4gACANNwOYLgv5BQIIfwJ+AkAgACgC8C1FBEAgACkDmC4hCyAAKAKgLiEDDAELA0AgCSIDQQNqIQkgAyAAKALsLWoiAy0AAiEFIAApA5guIQwgACgCoC4hBAJAIAMvAAAiB0UEQCABIAVBAnRqIgMzAQAhCyAEIAMvAQIiBWoiA0E/TQRAIAsgBK2GIAyEIQsMAgsgBEHAAEYEQCAAKAIEIAAoAhBqIAw3AAAgACAAKAIQQQhqNgIQIAUhAwwCCyAAKAIEIAAoAhBqIAsgBK2GIAyENwAAIAAgACgCEEEIajYCECADQUBqIQMgC0HAACAEa62IIQsMAQsgBUGAzwBqLQAAIghBAnQiBiABaiIDQYQIajMBACELIANBhghqLwEAIQMgCEEIa0ETTQRAIAUgBkGA0QBqKAIAa60gA62GIAuEIQsgBkHA0wBqKAIAIANqIQMLIAMgAiAHQQFrIgcgB0EHdkGAAmogB0GAAkkbQYDLAGotAAAiBUECdCIIaiIKLwECaiEGIAozAQAgA62GIAuEIQsgBCAFQQRJBH8gBgUgByAIQYDSAGooAgBrrSAGrYYgC4QhCyAIQcDUAGooAgAgBmoLIgVqIgNBP00EQCALIASthiAMhCELDAELIARBwABGBEAgACgCBCAAKAIQaiAMNwAAIAAgACgCEEEIajYCECAFIQMMAQsgACgCBCAAKAIQaiALIASthiAMhDcAACAAIAAoAhBBCGo2AhAgA0FAaiEDIAtBwAAgBGutiCELCyAAIAs3A5guIAAgAzYCoC4gCSAAKALwLUkNAAsLIAFBgAhqMwEAIQwCQCADIAFBgghqLwEAIgJqIgFBP00EQCAMIAOthiALhCEMDAELIANBwABGBEAgACgCBCAAKAIQaiALNwAAIAAgACgCEEEIajYCECACIQEMAQsgACgCBCAAKAIQaiAMIAOthiALhDcAACAAIAAoAhBBCGo2AhAgAUFAaiEBIAxBwAAgA2utiCEMCyAAIAw3A5guIAAgATYCoC4L8AQBA38gAEHkAWohAgNAIAIgAUECdCIDakEAOwEAIAIgA0EEcmpBADsBACABQQJqIgFBngJHDQALIABBADsBzBUgAEEAOwHYEyAAQZQWakEAOwEAIABBkBZqQQA7AQAgAEGMFmpBADsBACAAQYgWakEAOwEAIABBhBZqQQA7AQAgAEGAFmpBADsBACAAQfwVakEAOwEAIABB+BVqQQA7AQAgAEH0FWpBADsBACAAQfAVakEAOwEAIABB7BVqQQA7AQAgAEHoFWpBADsBACAAQeQVakEAOwEAIABB4BVqQQA7AQAgAEHcFWpBADsBACAAQdgVakEAOwEAIABB1BVqQQA7AQAgAEHQFWpBADsBACAAQcwUakEAOwEAIABByBRqQQA7AQAgAEHEFGpBADsBACAAQcAUakEAOwEAIABBvBRqQQA7AQAgAEG4FGpBADsBACAAQbQUakEAOwEAIABBsBRqQQA7AQAgAEGsFGpBADsBACAAQagUakEAOwEAIABBpBRqQQA7AQAgAEGgFGpBADsBACAAQZwUakEAOwEAIABBmBRqQQA7AQAgAEGUFGpBADsBACAAQZAUakEAOwEAIABBjBRqQQA7AQAgAEGIFGpBADsBACAAQYQUakEAOwEAIABBgBRqQQA7AQAgAEH8E2pBADsBACAAQfgTakEAOwEAIABB9BNqQQA7AQAgAEHwE2pBADsBACAAQewTakEAOwEAIABB6BNqQQA7AQAgAEHkE2pBADsBACAAQeATakEAOwEAIABB3BNqQQA7AQAgAEIANwL8LSAAQeQJakEBOwEAIABBADYC+C0gAEEANgLwLQuKAwIGfwR+QcgAEAkiBEUEQEEADwsgBEIANwMAIARCADcDMCAEQQA2AiggBEIANwMgIARCADcDGCAEQgA3AxAgBEIANwMIIARCADcDOCABUARAIARBCBAJIgA2AgQgAEUEQCAEEAYgAwRAIANBADYCBCADQQ42AgALQQAPCyAAQgA3AwAgBA8LAkAgAaciBUEEdBAJIgZFDQAgBCAGNgIAIAVBA3RBCGoQCSIFRQ0AIAQgATcDECAEIAU2AgQDQCAAIAynIghBBHRqIgcpAwgiDVBFBEAgBygCACIHRQRAIAMEQCADQQA2AgQgA0ESNgIACyAGEAYgBRAGIAQQBkEADwsgBiAKp0EEdGoiCSANNwMIIAkgBzYCACAFIAhBA3RqIAs3AwAgCyANfCELIApCAXwhCgsgDEIBfCIMIAFSDQALIAQgCjcDCCAEQgAgCiACGzcDGCAFIAqnQQN0aiALNwMAIAQgCzcDMCAEDwsgAwRAIANBADYCBCADQQ42AgALIAYQBiAEEAZBAAvlAQIDfwF+QX8hBQJAIAAgASACQQAQJiIERQ0AIAAgASACEIsBIgZFDQACfgJAIAJBCHENACAAKAJAIAGnQQR0aigCCCICRQ0AIAIgAxAhQQBOBEAgAykDAAwCCyAAQQhqIgAEQCAAQQA2AgQgAEEPNgIAC0F/DwsgAxAqIAMgBCgCGDYCLCADIAQpAyg3AxggAyAEKAIUNgIoIAMgBCkDIDcDICADIAQoAhA7ATAgAyAELwFSOwEyQvwBQtwBIAQtAAYbCyEHIAMgBjYCCCADIAE3AxAgAyAHQgOENwMAQQAhBQsgBQspAQF/IAAgASACIABBCGoiABAmIgNFBEBBAA8LIAMoAjBBACACIAAQJQuAAwEGfwJ/An9BMCABQYB/Sw0BGgJ/IAFBgH9PBEBBhIQBQTA2AgBBAAwBC0EAQRAgAUELakF4cSABQQtJGyIFQcwAahAJIgFFDQAaIAFBCGshAgJAIAFBP3FFBEAgAiEBDAELIAFBBGsiBigCACIHQXhxIAFBP2pBQHFBCGsiASABQUBrIAEgAmtBD0sbIgEgAmsiA2shBCAHQQNxRQRAIAIoAgAhAiABIAQ2AgQgASACIANqNgIADAELIAEgBCABKAIEQQFxckECcjYCBCABIARqIgQgBCgCBEEBcjYCBCAGIAMgBigCAEEBcXJBAnI2AgAgAiADaiIEIAQoAgRBAXI2AgQgAiADEDsLAkAgASgCBCICQQNxRQ0AIAJBeHEiAyAFQRBqTQ0AIAEgBSACQQFxckECcjYCBCABIAVqIgIgAyAFayIFQQNyNgIEIAEgA2oiAyADKAIEQQFyNgIEIAIgBRA7CyABQQhqCyIBRQsEQEEwDwsgACABNgIAQQALCwoAIABBiIQBEAQL6AIBBX8gACgCUCEBIAAvATAhBEEEIQUDQCABQQAgAS8BACICIARrIgMgAiADSRs7AQAgAUEAIAEvAQIiAiAEayIDIAIgA0kbOwECIAFBACABLwEEIgIgBGsiAyACIANJGzsBBCABQQAgAS8BBiICIARrIgMgAiADSRs7AQYgBUGAgARGRQRAIAFBCGohASAFQQRqIQUMAQsLAkAgBEUNACAEQQNxIQUgACgCTCEBIARBAWtBA08EQCAEIAVrIQADQCABQQAgAS8BACICIARrIgMgAiADSRs7AQAgAUEAIAEvAQIiAiAEayIDIAIgA0kbOwECIAFBACABLwEEIgIgBGsiAyACIANJGzsBBCABQQAgAS8BBiICIARrIgMgAiADSRs7AQYgAUEIaiEBIABBBGsiAA0ACwsgBUUNAANAIAFBACABLwEAIgAgBGsiAiAAIAJJGzsBACABQQJqIQEgBUEBayIFDQALCwuDAQEEfyACQQFOBEAgAiAAKAJIIAFqIgJqIQMgACgCUCEEA0AgBCACKAAAQbHz3fF5bEEPdkH+/wdxaiIFLwEAIgYgAUH//wNxRwRAIAAoAkwgASAAKAI4cUH//wNxQQF0aiAGOwEAIAUgATsBAAsgAUEBaiEBIAJBAWoiAiADSQ0ACwsLUAECfyABIAAoAlAgACgCSCABaigAAEGx893xeWxBD3ZB/v8HcWoiAy8BACICRwRAIAAoAkwgACgCOCABcUEBdGogAjsBACADIAE7AQALIAILugEBAX8jAEEQayICJAAgAkEAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgARBYIAJBEGokAAu9AQEBfyMAQRBrIgEkACABQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgAEEANgJAIAFBEGokAEEAC70BAQF/IwBBEGsiASQAIAFBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAKAJAIQAgAUEQaiQAIAALvgEBAX8jAEEQayIEJAAgBEEAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgASACIAMQVyAEQRBqJAALygEAIwBBEGsiAyQAIANBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAIAAoAkAgASACQdSAASgCABEAADYCQCADQRBqJAALwAEBAX8jAEEQayIDJAAgA0EAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgASACEF0hACADQRBqJAAgAAu+AQEBfyMAQRBrIgIkACACQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgACABEFwhACACQRBqJAAgAAu2AQEBfyMAQRBrIgAkACAAQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgAEEQaiQAQQgLwgEBAX8jAEEQayIEJAAgBEEAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgASACIAMQWSEAIARBEGokACAAC8IBAQF/IwBBEGsiBCQAIARBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAIAEgAiADEFYhACAEQRBqJAAgAAsHACAALwEwC8ABAQF/IwBBEGsiAyQAIANBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAIAEgAhBVIQAgA0EQaiQAIAALBwAgACgCQAsaACAAIAAoAkAgASACQdSAASgCABEAADYCQAsLACAAQQA2AkBBAAsHACAAKAIgCwQAQQgLzgUCA34BfyMAQYBAaiIIJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAEDhECAwwFAAEECAkJCQkJCQcJBgkLIANCCFoEfiACIAEoAmQ2AgAgAiABKAJoNgIEQggFQn8LIQYMCwsgARAGDAoLIAEoAhAiAgRAIAIgASkDGCABQeQAaiICEEEiA1ANCCABKQMIIgVCf4UgA1QEQCACBEAgAkEANgIEIAJBFTYCAAsMCQsgAUEANgIQIAEgAyAFfDcDCCABIAEpAwAgA3w3AwALIAEtAHgEQCABKQMAIQUMCQtCACEDIAEpAwAiBVAEQCABQgA3AyAMCgsDQCAAIAggBSADfSIFQoDAACAFQoDAAFQbEBEiB0J/VwRAIAFB5ABqIgEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwJCyAHUEUEQCABKQMAIgUgAyAHfCIDWA0KDAELCyABQeQAagRAIAFBADYCaCABQRE2AmQLDAcLIAEpAwggASkDICIFfSIHIAMgAyAHVhsiA1ANCAJAIAEtAHhFDQAgACAFQQAQFEF/Sg0AIAFB5ABqIgEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwHCyAAIAIgAxARIgZCf1cEQCABQeQAagRAIAFBADYCaCABQRE2AmQLDAcLIAEgASkDICAGfCIDNwMgIAZCAFINCEIAIQYgAyABKQMIWg0IIAFB5ABqBEAgAUEANgJoIAFBETYCZAsMBgsgASkDICABKQMAIgV9IAEpAwggBX0gAiADIAFB5ABqEEQiA0IAUw0FIAEgASkDACADfDcDIAwHCyACIAFBKGoQYEEfdawhBgwGCyABMABgIQYMBQsgASkDcCEGDAQLIAEpAyAgASkDAH0hBgwDCyABQeQAagRAIAFBADYCaCABQRw2AmQLC0J/IQYMAQsgASAFNwMgCyAIQYBAayQAIAYLBwAgACgCAAsPACAAIAAoAjBBAWo2AjALGABB+IMBQgA3AgBBgIQBQQA2AgBB+IMBCwcAIABBDGoLBwAgACgCLAsHACAAKAIoCwcAIAAoAhgLFQAgACABrSACrUIghoQgAyAEEIoBCxMBAX4gABAzIgFCIIinEAAgAacLbwEBfiABrSACrUIghoQhBSMAQRBrIgEkAAJ/IABFBEAgBVBFBEAgBARAIARBADYCBCAEQRI2AgALQQAMAgtBAEIAIAMgBBA6DAELIAEgBTcDCCABIAA2AgAgAUIBIAMgBBA6CyEAIAFBEGokACAACxQAIAAgASACrSADrUIghoQgBBBSC9oCAgJ/AX4CfyABrSACrUIghoQiByAAKQMwVEEAIARBCkkbRQRAIABBCGoEQCAAQQA2AgwgAEESNgIIC0F/DAELIAAtABhBAnEEQCAAQQhqBEAgAEEANgIMIABBGTYCCAtBfwwBCyADBH8gA0H//wNxQQhGIANBfUtyBUEBC0UEQCAAQQhqBEAgAEEANgIMIABBEDYCCAtBfwwBCyAAKAJAIgEgB6ciBUEEdGooAgAiAgR/IAIoAhAgA0YFIANBf0YLIQYgASAFQQR0aiIBIQUgASgCBCEBAkAgBgRAIAFFDQEgAUEAOwFQIAEgASgCAEF+cSIANgIAIAANASABECAgBUEANgIEQQAMAgsCQCABDQAgBSACECsiATYCBCABDQAgAEEIagRAIABBADYCDCAAQQ42AggLQX8MAgsgASAEOwFQIAEgAzYCECABIAEoAgBBAXI2AgALQQALCxwBAX4gACABIAIgAEEIahBMIgNCIIinEAAgA6cLHwEBfiAAIAEgAq0gA61CIIaEEBEiBEIgiKcQACAEpwteAQF+An5CfyAARQ0AGiAAKQMwIgIgAUEIcUUNABpCACACUA0AGiAAKAJAIQADQCACIAKnQQR0IABqQRBrKAIADQEaIAJCAX0iAkIAUg0AC0IACyICQiCIpxAAIAKnCxMAIAAgAa0gAq1CIIaEIAMQiwELnwEBAn4CfiACrSADrUIghoQhBUJ/IQQCQCAARQ0AIAAoAgQNACAAQQRqIQIgBUJ/VwRAIAIEQCACQQA2AgQgAkESNgIAC0J/DAILQgAhBCAALQAQDQAgBVANACAAKAIUIAEgBRARIgRCf1UNACAAKAIUIQAgAgRAIAIgACgCDDYCACACIAAoAhA2AgQLQn8hBAsgBAsiBEIgiKcQACAEpwueAQEBfwJ/IAAgACABrSACrUIghoQgAyAAKAIcEH8iAQRAIAEQMkF/TARAIABBCGoEQCAAIAEoAgw2AgggACABKAIQNgIMCyABEAtBAAwCC0EYEAkiBEUEQCAAQQhqBEAgAEEANgIMIABBDjYCCAsgARALQQAMAgsgBCAANgIAIARBADYCDCAEQgA3AgQgBCABNgIUIARBADoAEAsgBAsLsQICAX8BfgJ/QX8hBAJAIAAgAa0gAq1CIIaEIgZBAEEAECZFDQAgAC0AGEECcQRAIABBCGoEQCAAQQA2AgwgAEEZNgIIC0F/DAILIAAoAkAiASAGpyICQQR0aiIEKAIIIgUEQEEAIQQgBSADEHFBf0oNASAAQQhqBEAgAEEANgIMIABBDzYCCAtBfwwCCwJAIAQoAgAiBQRAIAUoAhQgA0YNAQsCQCABIAJBBHRqIgEoAgQiBA0AIAEgBRArIgQ2AgQgBA0AIABBCGoEQCAAQQA2AgwgAEEONgIIC0F/DAMLIAQgAzYCFCAEIAQoAgBBIHI2AgBBAAwCC0EAIQQgASACQQR0aiIBKAIEIgBFDQAgACAAKAIAQV9xIgI2AgAgAg0AIAAQICABQQA2AgQLIAQLCxQAIAAgAa0gAq1CIIaEIAQgBRBzCxIAIAAgAa0gAq1CIIaEIAMQFAtBAQF+An4gAUEAIAIbRQRAIABBCGoEQCAAQQA2AgwgAEESNgIIC0J/DAELIAAgASACIAMQdAsiBEIgiKcQACAEpwvGAwIFfwF+An4CQAJAIAAiBC0AGEECcQRAIARBCGoEQCAEQQA2AgwgBEEZNgIICwwBCyABRQRAIARBCGoEQCAEQQA2AgwgBEESNgIICwwBCyABECIiByABakEBay0AAEEvRwRAIAdBAmoQCSIARQRAIARBCGoEQCAEQQA2AgwgBEEONgIICwwCCwJAAkAgACIGIAEiBXNBA3ENACAFQQNxBEADQCAGIAUtAAAiAzoAACADRQ0DIAZBAWohBiAFQQFqIgVBA3ENAAsLIAUoAgAiA0F/cyADQYGChAhrcUGAgYKEeHENAANAIAYgAzYCACAFKAIEIQMgBkEEaiEGIAVBBGohBSADQYGChAhrIANBf3NxQYCBgoR4cUUNAAsLIAYgBS0AACIDOgAAIANFDQADQCAGIAUtAAEiAzoAASAGQQFqIQYgBUEBaiEFIAMNAAsLIAcgACIDakEvOwAACyAEQQBCAEEAEFIiAEUEQCADEAYMAQsgBCADIAEgAxsgACACEHQhCCADEAYgCEJ/VwRAIAAQCyAIDAMLIAQgCEEDQYCA/I8EEHNBf0oNASAEIAgQchoLQn8hCAsgCAsiCEIgiKcQACAIpwsQACAAIAGtIAKtQiCGhBByCxYAIAAgAa0gAq1CIIaEIAMgBCAFEGYL3iMDD38IfgF8IwBB8ABrIgkkAAJAIAFBAE5BACAAG0UEQCACBEAgAkEANgIEIAJBEjYCAAsMAQsgACkDGCISAn5BsIMBKQMAIhNCf1EEQCAJQoOAgIBwNwMwIAlChoCAgPAANwMoIAlCgYCAgCA3AyBBsIMBQQAgCUEgahAkNwMAIAlCj4CAgHA3AxAgCUKJgICAoAE3AwAgCUKMgICA0AE3AwhBuIMBQQggCRAkNwMAQbCDASkDACETCyATC4MgE1IEQCACBEAgAkEANgIEIAJBHDYCAAsMAQsgASABQRByQbiDASkDACITIBKDIBNRGyIKQRhxQRhGBEAgAgRAIAJBADYCBCACQRk2AgALDAELIAlBOGoQKgJAIAAgCUE4ahAhBEACQCAAKAIMQQVGBEAgACgCEEEsRg0BCyACBEAgAiAAKAIMNgIAIAIgACgCEDYCBAsMAgsgCkEBcUUEQCACBEAgAkEANgIEIAJBCTYCAAsMAwsgAhBJIgVFDQEgBSAKNgIEIAUgADYCACAKQRBxRQ0CIAUgBSgCFEECcjYCFCAFIAUoAhhBAnI2AhgMAgsgCkECcQRAIAIEQCACQQA2AgQgAkEKNgIACwwCCyAAEDJBf0wEQCACBEAgAiAAKAIMNgIAIAIgACgCEDYCBAsMAQsCfyAKQQhxBEACQCACEEkiAUUNACABIAo2AgQgASAANgIAIApBEHFFDQAgASABKAIUQQJyNgIUIAEgASgCGEECcjYCGAsgAQwBCyMAQUBqIg4kACAOQQhqECoCQCAAIA5BCGoQIUF/TARAIAIEQCACIAAoAgw2AgAgAiAAKAIQNgIECwwBCyAOLQAIQQRxRQRAIAIEQCACQYoBNgIEIAJBBDYCAAsMAQsgDikDICETIAIQSSIFRQRAQQAhBQwBCyAFIAo2AgQgBSAANgIAIApBEHEEQCAFIAUoAhRBAnI2AhQgBSAFKAIYQQJyNgIYCwJAAkACQCATUARAAn8gACEBAkADQCABKQMYQoCAEINCAFINASABKAIAIgENAAtBAQwBCyABQQBCAEESEA6nCw0EIAVBCGoEQCAFQQA2AgwgBUETNgIICwwBCyMAQdAAayIBJAACQCATQhVYBEAgBUEIagRAIAVBADYCDCAFQRM2AggLDAELAkACQCAFKAIAQgAgE0KqgAQgE0KqgARUGyISfUECEBRBf0oNACAFKAIAIgMoAgxBBEYEQCADKAIQQRZGDQELIAVBCGoEQCAFIAMoAgw2AgggBSADKAIQNgIMCwwBCyAFKAIAEDMiE0J/VwRAIAUoAgAhAyAFQQhqIggEQCAIIAMoAgw2AgAgCCADKAIQNgIECwwBCyAFKAIAIBJBACAFQQhqIg8QLSIERQ0BIBJCqoAEWgRAAkAgBCkDCEIUVARAIARBADoAAAwBCyAEQhQ3AxAgBEEBOgAACwsgAQRAIAFBADYCBCABQRM2AgALIARCABATIQwCQCAELQAABH4gBCkDCCAEKQMQfQVCAAunIgdBEmtBA0sEQEJ/IRcDQCAMQQFrIQMgByAMakEVayEGAkADQCADQQFqIgNB0AAgBiADaxB6IgNFDQEgA0EBaiIMQZ8SQQMQPQ0ACwJAIAMgBCgCBGusIhIgBCkDCFYEQCAEQQA6AAAMAQsgBCASNwMQIARBAToAAAsgBC0AAAR+IAQpAxAFQgALIRICQCAELQAABH4gBCkDCCAEKQMQfQVCAAtCFVgEQCABBEAgAUEANgIEIAFBEzYCAAsMAQsgBEIEEBMoAABB0JaVMEcEQCABBEAgAUEANgIEIAFBEzYCAAsMAQsCQAJAAkAgEkIUVA0AIAQoAgQgEqdqQRRrKAAAQdCWmThHDQACQCASQhR9IhQgBCIDKQMIVgRAIANBADoAAAwBCyADIBQ3AxAgA0EBOgAACyAFKAIUIRAgBSgCACEGIAMtAAAEfiAEKQMQBUIACyEWIARCBBATGiAEEAwhCyAEEAwhDSAEEB0iFEJ/VwRAIAEEQCABQRY2AgQgAUEENgIACwwECyAUQjh8IhUgEyAWfCIWVgRAIAEEQCABQQA2AgQgAUEVNgIACwwECwJAAkAgEyAUVg0AIBUgEyAEKQMIfFYNAAJAIBQgE30iFSAEKQMIVgRAIANBADoAAAwBCyADIBU3AxAgA0EBOgAAC0EAIQcMAQsgBiAUQQAQFEF/TARAIAEEQCABIAYoAgw2AgAgASAGKAIQNgIECwwFC0EBIQcgBkI4IAFBEGogARAtIgNFDQQLIANCBBATKAAAQdCWmTBHBEAgAQRAIAFBADYCBCABQRU2AgALIAdFDQQgAxAIDAQLIAMQHSEVAkAgEEEEcSIGRQ0AIBQgFXxCDHwgFlENACABBEAgAUEANgIEIAFBFTYCAAsgB0UNBCADEAgMBAsgA0IEEBMaIAMQFSIQIAsgC0H//wNGGyELIAMQFSIRIA0gDUH//wNGGyENAkAgBkUNACANIBFGQQAgCyAQRhsNACABBEAgAUEANgIEIAFBFTYCAAsgB0UNBCADEAgMBAsgCyANcgRAIAEEQCABQQA2AgQgAUEBNgIACyAHRQ0EIAMQCAwECyADEB0iGCADEB1SBEAgAQRAIAFBADYCBCABQQE2AgALIAdFDQQgAxAIDAQLIAMQHSEVIAMQHSEWIAMtAABFBEAgAQRAIAFBADYCBCABQRQ2AgALIAdFDQQgAxAIDAQLIAcEQCADEAgLAkAgFkIAWQRAIBUgFnwiGSAWWg0BCyABBEAgAUEWNgIEIAFBBDYCAAsMBAsgEyAUfCIUIBlUBEAgAQRAIAFBADYCBCABQRU2AgALDAQLAkAgBkUNACAUIBlRDQAgAQRAIAFBADYCBCABQRU2AgALDAQLIBggFUIugFgNASABBEAgAUEANgIEIAFBFTYCAAsMAwsCQCASIAQpAwhWBEAgBEEAOgAADAELIAQgEjcDECAEQQE6AAALIAUoAhQhAyAELQAABH4gBCkDCCAEKQMQfQVCAAtCFVgEQCABBEAgAUEANgIEIAFBFTYCAAsMAwsgBC0AAAR+IAQpAxAFQgALIRQgBEIEEBMaIAQQFQRAIAEEQCABQQA2AgQgAUEBNgIACwwDCyAEEAwgBBAMIgZHBEAgAQRAIAFBADYCBCABQRM2AgALDAMLIAQQFSEHIAQQFa0iFiAHrSIVfCIYIBMgFHwiFFYEQCABBEAgAUEANgIEIAFBFTYCAAsMAwsCQCADQQRxRQ0AIBQgGFENACABBEAgAUEANgIEIAFBFTYCAAsMAwsgBq0gARBqIgNFDQIgAyAWNwMgIAMgFTcDGCADQQA6ACwMAQsgGCABEGoiA0UNASADIBY3AyAgAyAVNwMYIANBAToALAsCQCASQhR8IhQgBCkDCFYEQCAEQQA6AAAMAQsgBCAUNwMQIARBAToAAAsgBBAMIQYCQCADKQMYIAMpAyB8IBIgE3xWDQACQCAGRQRAIAUtAARBBHFFDQELAkAgEkIWfCISIAQpAwhWBEAgBEEAOgAADAELIAQgEjcDECAEQQE6AAALIAQtAAAEfiAEKQMIIAQpAxB9BUIACyIUIAatIhJUDQEgBS0ABEEEcUEAIBIgFFIbDQEgBkUNACADIAQgEhATIAZBACABEDUiBjYCKCAGDQAgAxAWDAILAkAgEyADKQMgIhJYBEACQCASIBN9IhIgBCkDCFYEQCAEQQA6AAAMAQsgBCASNwMQIARBAToAAAsgBCADKQMYEBMiBkUNAiAGIAMpAxgQFyIHDQEgAQRAIAFBADYCBCABQQ42AgALIAMQFgwDCyAFKAIAIBJBABAUIQcgBSgCACEGIAdBf0wEQCABBEAgASAGKAIMNgIAIAEgBigCEDYCBAsgAxAWDAMLQQAhByAGEDMgAykDIFENACABBEAgAUEANgIEIAFBEzYCAAsgAxAWDAILQgAhFAJAAkAgAykDGCIWUEUEQANAIBQgAykDCFIiC0UEQCADLQAsDQMgFkIuVA0DAn8CQCADKQMQIhVCgIAEfCISIBVaQQAgEkKAgICAAVQbRQ0AIAMoAgAgEqdBBHQQNCIGRQ0AIAMgBjYCAAJAIAMpAwgiFSASWg0AIAYgFadBBHRqIgZCADcCACAGQgA3AAUgFUIBfCIVIBJRDQADQCADKAIAIBWnQQR0aiIGQgA3AgAgBkIANwAFIBVCAXwiFSASUg0ACwsgAyASNwMIIAMgEjcDEEEBDAELIAEEQCABQQA2AgQgAUEONgIAC0EAC0UNBAtB2AAQCSIGBH8gBkIANwMgIAZBADYCGCAGQv////8PNwMQIAZBADsBDCAGQb+GKDYCCCAGQQE6AAYgBkEAOwEEIAZBADYCACAGQgA3A0ggBkGAgNiNeDYCRCAGQgA3AyggBkIANwMwIAZCADcDOCAGQUBrQQA7AQAgBkIANwNQIAYFQQALIQYgAygCACAUp0EEdGogBjYCAAJAIAYEQCAGIAUoAgAgB0EAIAEQaCISQn9VDQELIAsNBCABKAIAQRNHDQQgAQRAIAFBADYCBCABQRU2AgALDAQLIBRCAXwhFCAWIBJ9IhZCAFINAAsLIBQgAykDCFINAAJAIAUtAARBBHFFDQAgBwRAIActAAAEfyAHKQMQIAcpAwhRBUEAC0UNAgwBCyAFKAIAEDMiEkJ/VwRAIAUoAgAhBiABBEAgASAGKAIMNgIAIAEgBigCEDYCBAsgAxAWDAULIBIgAykDGCADKQMgfFINAQsgBxAIAn4gCARAAn8gF0IAVwRAIAUgCCABEEghFwsgBSADIAEQSCISIBdVCwRAIAgQFiASDAILIAMQFgwFC0IAIAUtAARBBHFFDQAaIAUgAyABEEgLIRcgAyEIDAMLIAEEQCABQQA2AgQgAUEVNgIACyAHEAggAxAWDAILIAMQFiAHEAgMAQsgAQRAIAFBADYCBCABQRU2AgALIAMQFgsCQCAMIAQoAgRrrCISIAQpAwhWBEAgBEEAOgAADAELIAQgEjcDECAEQQE6AAALIAQtAAAEfiAEKQMIIAQpAxB9BUIAC6ciB0ESa0EDSw0BCwsgBBAIIBdCf1UNAwwBCyAEEAgLIA8iAwRAIAMgASgCADYCACADIAEoAgQ2AgQLIAgQFgtBACEICyABQdAAaiQAIAgNAQsgAgRAIAIgBSgCCDYCACACIAUoAgw2AgQLDAELIAUgCCgCADYCQCAFIAgpAwg3AzAgBSAIKQMQNwM4IAUgCCgCKDYCICAIEAYgBSgCUCEIIAVBCGoiBCEBQQAhBwJAIAUpAzAiE1ANAEGAgICAeCEGAn8gE7pEAAAAAAAA6D+jRAAA4P///+9BpCIaRAAAAAAAAPBBYyAaRAAAAAAAAAAAZnEEQCAaqwwBC0EACyIDQYCAgIB4TQRAIANBAWsiA0EBdiADciIDQQJ2IANyIgNBBHYgA3IiA0EIdiADciIDQRB2IANyQQFqIQYLIAYgCCgCACIMTQ0AIAYQPCILRQRAIAEEQCABQQA2AgQgAUEONgIACwwBCwJAIAgpAwhCACAMG1AEQCAIKAIQIQ8MAQsgCCgCECEPA0AgDyAHQQJ0aigCACIBBEADQCABKAIYIQMgASALIAEoAhwgBnBBAnRqIg0oAgA2AhggDSABNgIAIAMiAQ0ACwsgB0EBaiIHIAxHDQALCyAPEAYgCCAGNgIAIAggCzYCEAsCQCAFKQMwUA0AQgAhEwJAIApBBHFFBEADQCAFKAJAIBOnQQR0aigCACgCMEEAQQAgAhAlIgFFDQQgBSgCUCABIBNBCCAEEE1FBEAgBCgCAEEKRw0DCyATQgF8IhMgBSkDMFQNAAwDCwALA0AgBSgCQCATp0EEdGooAgAoAjBBAEEAIAIQJSIBRQ0DIAUoAlAgASATQQggBBBNRQ0BIBNCAXwiEyAFKQMwVA0ACwwBCyACBEAgAiAEKAIANgIAIAIgBCgCBDYCBAsMAQsgBSAFKAIUNgIYDAELIAAgACgCMEEBajYCMCAFEEtBACEFCyAOQUBrJAAgBQsiBQ0BIAAQGhoLQQAhBQsgCUHwAGokACAFCxAAIwAgAGtBcHEiACQAIAALBgAgACQACwQAIwAL4CoDEX8IfgN8IwBBwMAAayIHJABBfyECAkAgAEUNAAJ/IAAtAChFBEBBACAAKAIYIAAoAhRGDQEaC0EBCyEBAkACQCAAKQMwIhRQRQRAIAAoAkAhCgNAIAogEqdBBHRqIgMtAAwhCwJAAkAgAygCCA0AIAsNACADKAIEIgNFDQEgAygCAEUNAQtBASEBCyAXIAtBAXOtQv8Bg3whFyASQgF8IhIgFFINAAsgF0IAUg0BCyAAKAIEQQhxIAFyRQ0BAn8gACgCACIDKAIkIgFBA0cEQCADKAIgBH9BfyADEBpBAEgNAhogAygCJAUgAQsEQCADEEMLQX8gA0EAQgBBDxAOQgBTDQEaIANBAzYCJAtBAAtBf0oNASAAKAIAKAIMQRZGBEAgACgCACgCEEEsRg0CCyAAKAIAIQEgAEEIagRAIAAgASgCDDYCCCAAIAEoAhA2AgwLDAILIAFFDQAgFCAXVARAIABBCGoEQCAAQQA2AgwgAEEUNgIICwwCCyAXp0EDdBAJIgtFDQFCfyEWQgAhEgNAAkAgCiASp0EEdGoiBigCACIDRQ0AAkAgBigCCA0AIAYtAAwNACAGKAIEIgFFDQEgASgCAEUNAQsgFiADKQNIIhMgEyAWVhshFgsgBi0ADEUEQCAXIBlYBEAgCxAGIABBCGoEQCAAQQA2AgwgAEEUNgIICwwECyALIBmnQQN0aiASNwMAIBlCAXwhGQsgEkIBfCISIBRSDQALIBcgGVYEQCALEAYgAEEIagRAIABBADYCDCAAQRQ2AggLDAILAkACQCAAKAIAKQMYQoCACINQDQACQAJAIBZCf1INACAAKQMwIhNQDQIgE0IBgyEVIAAoAkAhAwJAIBNCAVEEQEJ/IRRCACESQgAhFgwBCyATQn6DIRlCfyEUQgAhEkIAIRYDQCADIBKnQQR0aigCACIBBEAgFiABKQNIIhMgEyAWVCIBGyEWIBQgEiABGyEUCyADIBJCAYQiGKdBBHRqKAIAIgEEQCAWIAEpA0giEyATIBZUIgEbIRYgFCAYIAEbIRQLIBJCAnwhEiAZQgJ9IhlQRQ0ACwsCQCAVUA0AIAMgEqdBBHRqKAIAIgFFDQAgFiABKQNIIhMgEyAWVCIBGyEWIBQgEiABGyEUCyAUQn9RDQBCACETIwBBEGsiBiQAAkAgACAUIABBCGoiCBBBIhVQDQAgFSAAKAJAIBSnQQR0aigCACIKKQMgIhh8IhQgGFpBACAUQn9VG0UEQCAIBEAgCEEWNgIEIAhBBDYCAAsMAQsgCi0ADEEIcUUEQCAUIRMMAQsgACgCACAUQQAQFCEBIAAoAgAhAyABQX9MBEAgCARAIAggAygCDDYCACAIIAMoAhA2AgQLDAELIAMgBkEMakIEEBFCBFIEQCAAKAIAIQEgCARAIAggASgCDDYCACAIIAEoAhA2AgQLDAELIBRCBHwgFCAGKAAMQdCWncAARhtCFEIMAn9BASEBAkAgCikDKEL+////D1YNACAKKQMgQv7///8PVg0AQQAhAQsgAQsbfCIUQn9XBEAgCARAIAhBFjYCBCAIQQQ2AgALDAELIBQhEwsgBkEQaiQAIBMiFkIAUg0BIAsQBgwFCyAWUA0BCwJ/IAAoAgAiASgCJEEBRgRAIAFBDGoEQCABQQA2AhAgAUESNgIMC0F/DAELQX8gAUEAIBZBERAOQgBTDQAaIAFBATYCJEEAC0F/Sg0BC0IAIRYCfyAAKAIAIgEoAiRBAUYEQCABQQxqBEAgAUEANgIQIAFBEjYCDAtBfwwBC0F/IAFBAEIAQQgQDkIAUw0AGiABQQE2AiRBAAtBf0oNACAAKAIAIQEgAEEIagRAIAAgASgCDDYCCCAAIAEoAhA2AgwLIAsQBgwCCyAAKAJUIgIEQCACQgA3AxggAigCAEQAAAAAAAAAACACKAIMIAIoAgQRDgALIABBCGohBCAXuiEcQgAhFAJAAkACQANAIBcgFCITUgRAIBO6IByjIRsgE0IBfCIUuiAcoyEaAkAgACgCVCICRQ0AIAIgGjkDKCACIBs5AyAgAisDECAaIBuhRAAAAAAAAAAAoiAboCIaIAIrAxihY0UNACACKAIAIBogAigCDCACKAIEEQ4AIAIgGjkDGAsCfwJAIAAoAkAgCyATp0EDdGopAwAiE6dBBHRqIg0oAgAiAQRAIAEpA0ggFlQNAQsgDSgCBCEFAkACfwJAIA0oAggiAkUEQCAFRQ0BQQEgBSgCACICQQFxDQIaIAJBwABxQQZ2DAILQQEgBQ0BGgsgDSABECsiBTYCBCAFRQ0BIAJBAEcLIQZBACEJIwBBEGsiDCQAAkAgEyAAKQMwWgRAIABBCGoEQCAAQQA2AgwgAEESNgIIC0F/IQkMAQsgACgCQCIKIBOnIgNBBHRqIg8oAgAiAkUNACACLQAEDQACQCACKQNIQhp8IhhCf1cEQCAAQQhqBEAgAEEWNgIMIABBBDYCCAsMAQtBfyEJIAAoAgAgGEEAEBRBf0wEQCAAKAIAIQIgAEEIagRAIAAgAigCDDYCCCAAIAIoAhA2AgwLDAILIAAoAgBCBCAMQQxqIABBCGoiDhAtIhBFDQEgEBAMIQEgEBAMIQggEC0AAAR/IBApAxAgECkDCFEFQQALIQIgEBAIIAJFBEAgDgRAIA5BADYCBCAOQRQ2AgALDAILAkAgCEUNACAAKAIAIAGtQQEQFEF/TARAQYSEASgCACECIA4EQCAOIAI2AgQgDkEENgIACwwDC0EAIAAoAgAgCEEAIA4QRSIBRQ0BIAEgCEGAAiAMQQhqIA4QbiECIAEQBiACRQ0BIAwoAggiAkUNACAMIAIQbSICNgIIIA8oAgAoAjQgAhBvIQIgDygCACACNgI0CyAPKAIAIgJBAToABEEAIQkgCiADQQR0aigCBCIBRQ0BIAEtAAQNASACKAI0IQIgAUEBOgAEIAEgAjYCNAwBC0F/IQkLIAxBEGokACAJQQBIDQUgACgCABAfIhhCAFMNBSAFIBg3A0ggBgRAQQAhDCANKAIIIg0hASANRQRAIAAgACATQQhBABB/IgwhASAMRQ0HCwJAAkAgASAHQQhqECFBf0wEQCAEBEAgBCABKAIMNgIAIAQgASgCEDYCBAsMAQsgBykDCCISQsAAg1AEQCAHQQA7ATggByASQsAAhCISNwMICwJAAkAgBSgCECICQX5PBEAgBy8BOCIDRQ0BIAUgAzYCECADIQIMAgsgAg0AIBJCBINQDQAgByAHKQMgNwMoIAcgEkIIhCISNwMIQQAhAgwBCyAHIBJC9////w+DIhI3AwgLIBJCgAGDUARAIAdBADsBOiAHIBJCgAGEIhI3AwgLAn8gEkIEg1AEQEJ/IRVBgAoMAQsgBSAHKQMgIhU3AyggEkIIg1AEQAJAAkACQAJAQQggAiACQX1LG0H//wNxDg0CAwMDAwMDAwEDAwMAAwtBgApBgAIgFUKUwuTzD1YbDAQLQYAKQYACIBVCg4Ow/w9WGwwDC0GACkGAAiAVQv////8PVhsMAgtBgApBgAIgFUIAUhsMAQsgBSAHKQMoNwMgQYACCyEPIAAoAgAQHyITQn9XBEAgACgCACECIAQEQCAEIAIoAgw2AgAgBCACKAIQNgIECwwBCyAFIAUvAQxB9/8DcTsBDCAAIAUgDxA3IgpBAEgNACAHLwE4IghBCCAFKAIQIgMgA0F9SxtB//8DcSICRyEGAkACQAJAAkACQAJAAkAgAiAIRwRAIANBAEchAwwBC0EAIQMgBS0AAEGAAXFFDQELIAUvAVIhCSAHLwE6IQIMAQsgBS8BUiIJIAcvAToiAkYNAQsgASABKAIwQQFqNgIwIAJB//8DcQ0BIAEhAgwCCyABIAEoAjBBAWo2AjBBACEJDAILQSZBACAHLwE6QQFGGyICRQRAIAQEQCAEQQA2AgQgBEEYNgIACyABEAsMAwsgACABIAcvATpBACAAKAIcIAIRBgAhAiABEAsgAkUNAgsgCUEARyEJIAhBAEcgBnFFBEAgAiEBDAELIAAgAiAHLwE4EIEBIQEgAhALIAFFDQELAkAgCEUgBnJFBEAgASECDAELIAAgAUEAEIABIQIgARALIAJFDQELAkAgA0UEQCACIQMMAQsgACACIAUoAhBBASAFLwFQEIIBIQMgAhALIANFDQELAkAgCUUEQCADIQEMAQsgBSgCVCIBRQRAIAAoAhwhAQsCfyAFLwFSGkEBCwRAIAQEQCAEQQA2AgQgBEEYNgIACyADEAsMAgsgACADIAUvAVJBASABQQARBgAhASADEAsgAUUNAQsgACgCABAfIhhCf1cEQCAAKAIAIQIgBARAIAQgAigCDDYCACAEIAIoAhA2AgQLDAELAkAgARAyQQBOBEACfwJAAkAgASAHQUBrQoDAABARIhJCAVMNAEIAIRkgFUIAVQRAIBW5IRoDQCAAIAdBQGsgEhAbQQBIDQMCQCASQoDAAFINACAAKAJUIgJFDQAgAiAZQoBAfSIZuSAaoxB7CyABIAdBQGtCgMAAEBEiEkIAVQ0ACwwBCwNAIAAgB0FAayASEBtBAEgNAiABIAdBQGtCgMAAEBEiEkIAVQ0ACwtBACASQn9VDQEaIAQEQCAEIAEoAgw2AgAgBCABKAIQNgIECwtBfwshAiABEBoaDAELIAQEQCAEIAEoAgw2AgAgBCABKAIQNgIEC0F/IQILIAEgB0EIahAhQX9MBEAgBARAIAQgASgCDDYCACAEIAEoAhA2AgQLQX8hAgsCf0EAIQkCQCABIgNFDQADQCADLQAaQQFxBEBB/wEhCSADQQBCAEEQEA4iFUIAUw0CIBVCBFkEQCADQQxqBEAgA0EANgIQIANBFDYCDAsMAwsgFachCQwCCyADKAIAIgMNAAsLIAlBGHRBGHUiA0F/TAsEQCAEBEAgBCABKAIMNgIAIAQgASgCEDYCBAsgARALDAELIAEQCyACQQBIDQAgACgCABAfIRUgACgCACECIBVCf1cEQCAEBEAgBCACKAIMNgIAIAQgAigCEDYCBAsMAQsgAiATEHVBf0wEQCAAKAIAIQIgBARAIAQgAigCDDYCACAEIAIoAhA2AgQLDAELIAcpAwgiE0LkAINC5ABSBEAgBARAIARBADYCBCAEQRQ2AgALDAELAkAgBS0AAEEgcQ0AIBNCEINQRQRAIAUgBygCMDYCFAwBCyAFQRRqEAEaCyAFIAcvATg2AhAgBSAHKAI0NgIYIAcpAyAhEyAFIBUgGH03AyAgBSATNwMoIAUgBS8BDEH5/wNxIANB/wFxQQF0cjsBDCAPQQp2IQNBPyEBAkACQAJAAkAgBSgCECICQQxrDgMAAQIBCyAFQS47AQoMAgtBLSEBIAMNACAFKQMoQv7///8PVg0AIAUpAyBC/v///w9WDQBBFCEBIAJBCEYNACAFLwFSQQFGDQAgBSgCMCICBH8gAi8BBAVBAAtB//8DcSICBEAgAiAFKAIwKAIAakEBay0AAEEvRg0BC0EKIQELIAUgATsBCgsgACAFIA8QNyICQQBIDQAgAiAKRwRAIAQEQCAEQQA2AgQgBEEUNgIACwwBCyAAKAIAIBUQdUF/Sg0BIAAoAgAhAiAEBEAgBCACKAIMNgIAIAQgAigCEDYCBAsLIA0NByAMEAsMBwsgDQ0CIAwQCwwCCyAFIAUvAQxB9/8DcTsBDCAAIAVBgAIQN0EASA0FIAAgEyAEEEEiE1ANBSAAKAIAIBNBABAUQX9MBEAgACgCACECIAQEQCAEIAIoAgw2AgAgBCACKAIQNgIECwwGCyAFKQMgIRIjAEGAQGoiAyQAAkAgElBFBEAgAEEIaiECIBK6IRoDQEF/IQEgACgCACADIBJCgMAAIBJCgMAAVBsiEyACEGVBAEgNAiAAIAMgExAbQQBIDQIgACgCVCAaIBIgE30iErqhIBqjEHsgEkIAUg0ACwtBACEBCyADQYBAayQAIAFBf0oNAUEBIREgAUEcdkEIcUEIRgwCCyAEBEAgBEEANgIEIARBDjYCAAsMBAtBAAtFDQELCyARDQBBfyECAkAgACgCABAfQgBTDQAgFyEUQQAhCkIAIRcjAEHwAGsiESQAAkAgACgCABAfIhVCAFkEQCAUUEUEQANAIAAgACgCQCALIBenQQN0aigCAEEEdGoiAygCBCIBBH8gAQUgAygCAAtBgAQQNyIBQQBIBEBCfyEXDAQLIAFBAEcgCnIhCiAXQgF8IhcgFFINAAsLQn8hFyAAKAIAEB8iGEJ/VwRAIAAoAgAhASAAQQhqBEAgACABKAIMNgIIIAAgASgCEDYCDAsMAgsgEULiABAXIgZFBEAgAEEIagRAIABBADYCDCAAQQ42AggLDAILIBggFX0hEyAVQv////8PViAUQv//A1ZyIApyQQFxBEAgBkGZEkEEECwgBkIsEBggBkEtEA0gBkEtEA0gBkEAEBIgBkEAEBIgBiAUEBggBiAUEBggBiATEBggBiAVEBggBkGUEkEEECwgBkEAEBIgBiAYEBggBkEBEBILIAZBnhJBBBAsIAZBABASIAYgFEL//wMgFEL//wNUG6dB//8DcSIBEA0gBiABEA0gBkF/IBOnIBNC/v///w9WGxASIAZBfyAVpyAVQv7///8PVhsQEiAGIABBJEEgIAAtACgbaigCACIDBH8gAy8BBAVBAAtB//8DcRANIAYtAABFBEAgAEEIagRAIABBADYCDCAAQRQ2AggLIAYQCAwCCyAAIAYoAgQgBi0AAAR+IAYpAxAFQgALEBshASAGEAggAUEASA0BIAMEQCAAIAMoAgAgAzMBBBAbQQBIDQILIBMhFwwBCyAAKAIAIQEgAEEIagRAIAAgASgCDDYCCCAAIAEoAhA2AgwLQn8hFwsgEUHwAGokACAXQgBTDQAgACgCABAfQj+HpyECCyALEAYgAkEASA0BAn8gACgCACIBKAIkQQFHBEAgAUEMagRAIAFBADYCECABQRI2AgwLQX8MAQsgASgCICICQQJPBEAgAUEMagRAIAFBADYCECABQR02AgwLQX8MAQsCQCACQQFHDQAgARAaQQBODQBBfwwBCyABQQBCAEEJEA5Cf1cEQCABQQI2AiRBfwwBCyABQQA2AiRBAAtFDQIgACgCACECIAQEQCAEIAIoAgw2AgAgBCACKAIQNgIECwwBCyALEAYLIAAoAlQQfCAAKAIAEENBfyECDAILIAAoAlQQfAsgABBLQQAhAgsgB0HAwABqJAAgAgtFAEHwgwFCADcDAEHogwFCADcDAEHggwFCADcDAEHYgwFCADcDAEHQgwFCADcDAEHIgwFCADcDAEHAgwFCADcDAEHAgwELoQMBCH8jAEGgAWsiAiQAIAAQMQJAAn8CQCAAKAIAIgFBAE4EQCABQbATKAIASA0BCyACIAE2AhAgAkEgakH2ESACQRBqEHZBASEGIAJBIGohBCACQSBqECIhA0EADAELIAFBAnQiAUGwEmooAgAhBQJ/AkACQCABQcATaigCAEEBaw4CAAEECyAAKAIEIQNB9IIBKAIAIQdBACEBAkACQANAIAMgAUHQ8QBqLQAARwRAQdcAIQQgAUEBaiIBQdcARw0BDAILCyABIgQNAEGw8gAhAwwBC0Gw8gAhAQNAIAEtAAAhCCABQQFqIgMhASAIDQAgAyEBIARBAWsiBA0ACwsgBygCFBogAwwBC0EAIAAoAgRrQQJ0QdjAAGooAgALIgRFDQEgBBAiIQMgBUUEQEEAIQVBASEGQQAMAQsgBRAiQQJqCyEBIAEgA2pBAWoQCSIBRQRAQegSKAIAIQUMAQsgAiAENgIIIAJBrBJBkRIgBhs2AgQgAkGsEiAFIAYbNgIAIAFBqwogAhB2IAAgATYCCCABIQULIAJBoAFqJAAgBQszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQBxogACAAKAIUIAFqNgIUIAILBgBBsIgBCwYAQayIAQsGAEGkiAELBwAgAEEEagsHACAAQQhqCyYBAX8gACgCFCIBBEAgARALCyAAKAIEIQEgAEEEahAxIAAQBiABC6kBAQN/AkAgAC0AACICRQ0AA0AgAS0AACIERQRAIAIhAwwCCwJAIAIgBEYNACACQSByIAIgAkHBAGtBGkkbIAEtAAAiAkEgciACIAJBwQBrQRpJG0YNACAALQAAIQMMAgsgAUEBaiEBIAAtAAEhAiAAQQFqIQAgAg0ACwsgA0H/AXEiAEEgciAAIABBwQBrQRpJGyABLQAAIgBBIHIgACAAQcEAa0EaSRtrC8sGAgJ+An8jAEHgAGsiByQAAkACQAJAAkACQAJAAkACQAJAAkACQCAEDg8AAQoCAwQGBwgICAgICAUICyABQgA3AyAMCQsgACACIAMQESIFQn9XBEAgAUEIaiIBBEAgASAAKAIMNgIAIAEgACgCEDYCBAsMCAsCQCAFUARAIAEpAygiAyABKQMgUg0BIAEgAzcDGCABQQE2AgQgASgCAEUNASAAIAdBKGoQIUF/TARAIAFBCGoiAQRAIAEgACgCDDYCACABIAAoAhA2AgQLDAoLAkAgBykDKCIDQiCDUA0AIAcoAlQgASgCMEYNACABQQhqBEAgAUEANgIMIAFBBzYCCAsMCgsgA0IEg1ANASAHKQNAIAEpAxhRDQEgAUEIagRAIAFBADYCDCABQRU2AggLDAkLIAEoAgQNACABKQMoIgMgASkDICIGVA0AIAUgAyAGfSIDWA0AIAEoAjAhBANAIAECfyAFIAN9IgZC/////w8gBkL/////D1QbIganIQBBACACIAOnaiIIRQ0AGiAEIAggAEHUgAEoAgARAAALIgQ2AjAgASABKQMoIAZ8NwMoIAUgAyAGfCIDVg0ACwsgASABKQMgIAV8NwMgDAgLIAEoAgRFDQcgAiABKQMYIgM3AxggASgCMCEAIAJBADYCMCACIAM3AyAgAiAANgIsIAIgAikDAELsAYQ3AwAMBwsgA0IIWgR+IAIgASgCCDYCACACIAEoAgw2AgRCCAVCfwshBQwGCyABEAYMBQtCfyEFIAApAxgiA0J/VwRAIAFBCGoiAQRAIAEgACgCDDYCACABIAAoAhA2AgQLDAULIAdBfzYCGCAHQo+AgICAAjcDECAHQoyAgIDQATcDCCAHQomAgICgATcDACADQQggBxAkQn+FgyEFDAQLIANCD1gEQCABQQhqBEAgAUEANgIMIAFBEjYCCAsMAwsgAkUNAgJAIAAgAikDACACKAIIEBRBAE4EQCAAEDMiA0J/VQ0BCyABQQhqIgEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwDCyABIAM3AyAMAwsgASkDICEFDAILIAFBCGoEQCABQQA2AgwgAUEcNgIICwtCfyEFCyAHQeAAaiQAIAULjAcCAn4CfyMAQRBrIgckAAJAAkACQAJAAkACQAJAAkACQAJAIAQOEQABAgMFBggICAgICAgIBwgECAsgAUJ/NwMgIAFBADoADyABQQA7AQwgAUIANwMYIAEoAqxAIAEoAqhAKAIMEQEArUIBfSEFDAgLQn8hBSABKAIADQdCACEFIANQDQcgAS0ADQ0HIAFBKGohBAJAA0ACQCAHIAMgBX03AwggASgCrEAgAiAFp2ogB0EIaiABKAKoQCgCHBEAACEIQgAgBykDCCAIQQJGGyAFfCEFAkACQAJAIAhBAWsOAwADAQILIAFBAToADSABKQMgIgNCf1cEQCABBEAgAUEANgIEIAFBFDYCAAsMBQsgAS0ADkUNBCADIAVWDQQgASADNwMYIAFBAToADyACIAQgA6cQBxogASkDGCEFDAwLIAEtAAwNAyAAIARCgMAAEBEiBkJ/VwRAIAEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwECyAGUARAIAFBAToADCABKAKsQCABKAKoQCgCGBEDACABKQMgQn9VDQEgAUIANwMgDAELAkAgASkDIEIAWQRAIAFBADoADgwBCyABIAY3AyALIAEoAqxAIAQgBiABKAKoQCgCFBEPABoLIAMgBVYNAQwCCwsgASgCAA0AIAEEQCABQQA2AgQgAUEUNgIACwsgBVBFBEAgAUEAOgAOIAEgASkDGCAFfDcDGAwIC0J/QgAgASgCABshBQwHCyABKAKsQCABKAKoQCgCEBEBAK1CAX0hBQwGCyABLQAQBEAgAS0ADQRAIAIgAS0ADwR/QQAFQQggASgCFCIAIABBfUsbCzsBMCACIAEpAxg3AyAgAiACKQMAQsgAhDcDAAwHCyACIAIpAwBCt////w+DNwMADAYLIAJBADsBMCACKQMAIQMgAS0ADQRAIAEpAxghBSACIANCxACENwMAIAIgBTcDGEIAIQUMBgsgAiADQrv///8Pg0LAAIQ3AwAMBQsgAS0ADw0EIAEoAqxAIAEoAqhAKAIIEQEArCEFDAQLIANCCFoEfiACIAEoAgA2AgAgAiABKAIENgIEQggFQn8LIQUMAwsgAUUNAiABKAKsQCABKAKoQCgCBBEDACABEDEgARAGDAILIAdBfzYCAEEQIAcQJEI/hCEFDAELIAEEQCABQQA2AgQgAUEUNgIAC0J/IQULIAdBEGokACAFC2MAQcgAEAkiAEUEQEGEhAEoAgAhASACBEAgAiABNgIEIAJBATYCAAsgAA8LIABBADoADCAAQQA6AAQgACACNgIAIABBADYCOCAAQgA3AzAgACABQQkgAUEBa0EJSRs2AgggAAu3fAIefwZ+IAIpAwAhIiAAIAE2AhwgACAiQv////8PICJC/////w9UGz4CICAAQRBqIQECfyAALQAEBEACfyAALQAMQQJ0IQpBfiEEAkACQAJAIAEiBUUNACAFKAIgRQ0AIAUoAiRFDQAgBSgCHCIDRQ0AIAMoAgAgBUcNAAJAAkAgAygCICIGQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyAGQZoFRg0AIAZBKkcNAQsgCkEFSw0AAkACQCAFKAIMRQ0AIAUoAgQiAQRAIAUoAgBFDQELIAZBmgVHDQEgCkEERg0BCyAFQeDAACgCADYCGEF+DAQLIAUoAhBFDQEgAygCJCEEIAMgCjYCJAJAIAMoAhAEQCADEDACQCAFKAIQIgYgAygCECIIIAYgCEkbIgFFDQAgBSgCDCADKAIIIAEQBxogBSAFKAIMIAFqNgIMIAMgAygCCCABajYCCCAFIAUoAhQgAWo2AhQgBSAFKAIQIAFrIgY2AhAgAyADKAIQIAFrIgg2AhAgCA0AIAMgAygCBDYCCEEAIQgLIAYEQCADKAIgIQYMAgsMBAsgAQ0AIApBAXRBd0EAIApBBEsbaiAEQQF0QXdBACAEQQRKG2pKDQAgCkEERg0ADAILAkACQAJAAkACQCAGQSpHBEAgBkGaBUcNASAFKAIERQ0DDAcLIAMoAhRFBEAgA0HxADYCIAwCCyADKAI0QQx0QYDwAWshBAJAIAMoAowBQQJODQAgAygCiAEiAUEBTA0AIAFBBUwEQCAEQcAAciEEDAELQYABQcABIAFBBkYbIARyIQQLIAMoAgQgCGogBEEgciAEIAMoAmgbIgFBH3AgAXJBH3NBCHQgAUGA/gNxQQh2cjsAACADIAMoAhBBAmoiATYCECADKAJoBEAgAygCBCABaiAFKAIwIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYAACADIAMoAhBBBGo2AhALIAVBATYCMCADQfEANgIgIAUQCiADKAIQDQcgAygCICEGCwJAAkACQAJAIAZBOUYEfyADQaABakHkgAEoAgARAQAaIAMgAygCECIBQQFqNgIQIAEgAygCBGpBHzoAACADIAMoAhAiAUEBajYCECABIAMoAgRqQYsBOgAAIAMgAygCECIBQQFqNgIQIAEgAygCBGpBCDoAAAJAIAMoAhwiAUUEQCADKAIEIAMoAhBqQQA2AAAgAyADKAIQIgFBBWo2AhAgASADKAIEakEAOgAEQQIhBCADKAKIASIBQQlHBEBBBCABQQJIQQJ0IAMoAowBQQFKGyEECyADIAMoAhAiAUEBajYCECABIAMoAgRqIAQ6AAAgAyADKAIQIgFBAWo2AhAgASADKAIEakEDOgAAIANB8QA2AiAgBRAKIAMoAhBFDQEMDQsgASgCJCELIAEoAhwhCSABKAIQIQggASgCLCENIAEoAgAhBiADIAMoAhAiAUEBajYCEEECIQQgASADKAIEaiANQQBHQQF0IAZBAEdyIAhBAEdBAnRyIAlBAEdBA3RyIAtBAEdBBHRyOgAAIAMoAgQgAygCEGogAygCHCgCBDYAACADIAMoAhAiDUEEaiIGNgIQIAMoAogBIgFBCUcEQEEEIAFBAkhBAnQgAygCjAFBAUobIQQLIAMgDUEFajYCECADKAIEIAZqIAQ6AAAgAygCHCgCDCEEIAMgAygCECIBQQFqNgIQIAEgAygCBGogBDoAACADKAIcIgEoAhAEfyADKAIEIAMoAhBqIAEoAhQ7AAAgAyADKAIQQQJqNgIQIAMoAhwFIAELKAIsBEAgBQJ/IAUoAjAhBiADKAIQIQRBACADKAIEIgFFDQAaIAYgASAEQdSAASgCABEAAAs2AjALIANBxQA2AiAgA0EANgIYDAILIAMoAiAFIAYLQcUAaw4jAAQEBAEEBAQEBAQEBAQEBAQEBAQEBAIEBAQEBAQEBAQEBAMECyADKAIcIgEoAhAiBgRAIAMoAgwiCCADKAIQIgQgAS8BFCADKAIYIg1rIglqSQRAA0AgAygCBCAEaiAGIA1qIAggBGsiCBAHGiADIAMoAgwiDTYCEAJAIAMoAhwoAixFDQAgBCANTw0AIAUCfyAFKAIwIQZBACADKAIEIARqIgFFDQAaIAYgASANIARrQdSAASgCABEAAAs2AjALIAMgAygCGCAIajYCGCAFKAIcIgYQMAJAIAUoAhAiBCAGKAIQIgEgASAESxsiAUUNACAFKAIMIAYoAgggARAHGiAFIAUoAgwgAWo2AgwgBiAGKAIIIAFqNgIIIAUgBSgCFCABajYCFCAFIAUoAhAgAWs2AhAgBiAGKAIQIAFrIgE2AhAgAQ0AIAYgBigCBDYCCAsgAygCEA0MIAMoAhghDSADKAIcKAIQIQZBACEEIAkgCGsiCSADKAIMIghLDQALCyADKAIEIARqIAYgDWogCRAHGiADIAMoAhAgCWoiDTYCEAJAIAMoAhwoAixFDQAgBCANTw0AIAUCfyAFKAIwIQZBACADKAIEIARqIgFFDQAaIAYgASANIARrQdSAASgCABEAAAs2AjALIANBADYCGAsgA0HJADYCIAsgAygCHCgCHARAIAMoAhAiBCEJA0ACQCAEIAMoAgxHDQACQCADKAIcKAIsRQ0AIAQgCU0NACAFAn8gBSgCMCEGQQAgAygCBCAJaiIBRQ0AGiAGIAEgBCAJa0HUgAEoAgARAAALNgIwCyAFKAIcIgYQMAJAIAUoAhAiBCAGKAIQIgEgASAESxsiAUUNACAFKAIMIAYoAgggARAHGiAFIAUoAgwgAWo2AgwgBiAGKAIIIAFqNgIIIAUgBSgCFCABajYCFCAFIAUoAhAgAWs2AhAgBiAGKAIQIAFrIgE2AhAgAQ0AIAYgBigCBDYCCAtBACEEQQAhCSADKAIQRQ0ADAsLIAMoAhwoAhwhBiADIAMoAhgiAUEBajYCGCABIAZqLQAAIQEgAyAEQQFqNgIQIAMoAgQgBGogAToAACABBEAgAygCECEEDAELCwJAIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0EANgIYCyADQdsANgIgCwJAIAMoAhwoAiRFDQAgAygCECIEIQkDQAJAIAQgAygCDEcNAAJAIAMoAhwoAixFDQAgBCAJTQ0AIAUCfyAFKAIwIQZBACADKAIEIAlqIgFFDQAaIAYgASAEIAlrQdSAASgCABEAAAs2AjALIAUoAhwiBhAwAkAgBSgCECIEIAYoAhAiASABIARLGyIBRQ0AIAUoAgwgBigCCCABEAcaIAUgBSgCDCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQLDAILAn8CQANAAkACQAJAAkACQCADKAI8Ig1BggJLDQAgAxAvAkAgAygCPCINQYICSw0AIAoNAEEADAgLIA1FDQQgDUECSw0AIAMoAmghCAwBCyADKAJoIghFBEBBACEIDAELIAMoAkggCGoiAUEBayIELQAAIgYgAS0AAEcNACAGIAQtAAJHDQAgBEEDaiEEQQAhCQJAA0AgBiAELQAARw0BIAQtAAEgBkcEQCAJQQFyIQkMAgsgBC0AAiAGRwRAIAlBAnIhCQwCCyAELQADIAZHBEAgCUEDciEJDAILIAQtAAQgBkcEQCAJQQRyIQkMAgsgBC0ABSAGRwRAIAlBBXIhCQwCCyAELQAGIAZHBEAgCUEGciEJDAILIAQtAAcgBkcEQCAJQQdyIQkMAgsgBEEIaiEEIAlB+AFJIQEgCUEIaiEJIAENAAtBgAIhCQtBggIhBCANIAlBAmoiASABIA1LGyIBQYECSw0BIAEiBEECSw0BCyADKAJIIAhqLQAAIQQgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtakEAOgAAIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qIAQ6AAAgAyAEQQJ0aiIBIAEvAeQBQQFqOwHkASADIAMoAjxBAWs2AjwgAyADKAJoQQFqIgQ2AmgMAQsgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtakEBOgAAIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qIARBA2s6AAAgAyADKAKALkEBajYCgC4gBEH9zgBqLQAAQQJ0IANqQegJaiIBIAEvAQBBAWo7AQAgA0GAywAtAABBAnRqQdgTaiIBIAEvAQBBAWo7AQAgAyADKAI8IARrNgI8IAMgAygCaCAEaiIENgJoCyADKALwLSADKAL0LUcNAUEAIQggAyADKAJYIgFBAE4EfyADKAJIIAFqBUEACyAEIAFrQQAQDyADIAMoAmg2AlggAygCABAKIAMoAgAoAhANAQwCCwsgA0EANgKELiAKQQRGBEAgAyADKAJYIgFBAE4EfyADKAJIIAFqBUEACyADKAJoIAFrQQEQDyADIAMoAmg2AlggAygCABAKQQNBAiADKAIAKAIQGwwCCyADKALwLQRAQQAhCCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEEUNAQtBASEICyAICwwBCyADIAogAUEMbEG42ABqKAIAEQIACyIBQX5xQQJGBEAgA0GaBTYCIAsgAUF9cUUEQEEAIQQgBSgCEA0CDAQLIAFBAUcNAAJAAkACQCAKQQFrDgUAAQEBAgELIAMpA5guISICfwJ+IAMoAqAuIgFBA2oiCUE/TQRAQgIgAa2GICKEDAELIAFBwABGBEAgAygCBCADKAIQaiAiNwAAIAMgAygCEEEIajYCEEICISJBCgwCCyADKAIEIAMoAhBqQgIgAa2GICKENwAAIAMgAygCEEEIajYCECABQT1rIQlCAkHAACABa62ICyEiIAlBB2ogCUE5SQ0AGiADKAIEIAMoAhBqICI3AAAgAyADKAIQQQhqNgIQQgAhIiAJQTlrCyEBIAMgIjcDmC4gAyABNgKgLiADEDAMAQsgA0EAQQBBABA5IApBA0cNACADKAJQQQBBgIAIEBkgAygCPA0AIANBADYChC4gA0EANgJYIANBADYCaAsgBRAKIAUoAhANAAwDC0EAIQQgCkEERw0AAkACfwJAAkAgAygCFEEBaw4CAQADCyAFIANBoAFqQeCAASgCABEBACIBNgIwIAMoAgQgAygCEGogATYAACADIAMoAhBBBGoiATYCECADKAIEIAFqIQQgBSgCCAwBCyADKAIEIAMoAhBqIQQgBSgCMCIBQRh0IAFBCHRBgID8B3FyIAFBCHZBgP4DcSABQRh2cnILIQEgBCABNgAAIAMgAygCEEEEajYCEAsgBRAKIAMoAhQiAUEBTgRAIANBACABazYCFAsgAygCEEUhBAsgBAwCCyAFQezAACgCADYCGEF7DAELIANBfzYCJEEACwwBCyMAQRBrIhQkAEF+IRcCQCABIgxFDQAgDCgCIEUNACAMKAIkRQ0AIAwoAhwiB0UNACAHKAIAIAxHDQAgBygCBCIIQbT+AGtBH0sNACAMKAIMIhBFDQAgDCgCACIBRQRAIAwoAgQNAQsgCEG//gBGBEAgB0HA/gA2AgRBwP4AIQgLIAdBpAFqIR8gB0G8BmohGSAHQbwBaiEcIAdBoAFqIR0gB0G4AWohGiAHQfwKaiEYIAdBQGshHiAHKAKIASEFIAwoAgQiICEGIAcoAoQBIQogDCgCECIPIRYCfwJAAkACQANAAkBBfSEEQQEhCQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAhBtP4Aaw4fBwYICQolJicoBSwtLQsZGgQMAjIzATUANw0OAzlISUwLIAcoApQBIQMgASEEIAYhCAw1CyAHKAKUASEDIAEhBCAGIQgMMgsgBygCtAEhCAwuCyAHKAIMIQgMQQsgBUEOTw0pIAZFDUEgBUEIaiEIIAFBAWohBCAGQQFrIQkgAS0AACAFdCAKaiEKIAVBBkkNDCAEIQEgCSEGIAghBQwpCyAFQSBPDSUgBkUNQCABQQFqIQQgBkEBayEIIAEtAAAgBXQgCmohCiAFQRhJDQ0gBCEBIAghBgwlCyAFQRBPDRUgBkUNPyAFQQhqIQggAUEBaiEEIAZBAWshCSABLQAAIAV0IApqIQogBUEISQ0NIAQhASAJIQYgCCEFDBULIAcoAgwiC0UNByAFQRBPDSIgBkUNPiAFQQhqIQggAUEBaiEEIAZBAWshCSABLQAAIAV0IApqIQogBUEISQ0NIAQhASAJIQYgCCEFDCILIAVBH0sNFQwUCyAFQQ9LDRYMFQsgBygCFCIEQYAIcUUEQCAFIQgMFwsgCiEIIAVBD0sNGAwXCyAKIAVBB3F2IQogBUF4cSIFQR9LDQwgBkUNOiAFQQhqIQggAUEBaiEEIAZBAWshCSABLQAAIAV0IApqIQogBUEYSQ0GIAQhASAJIQYgCCEFDAwLIAcoArQBIgggBygCqAEiC08NIwwiCyAPRQ0qIBAgBygCjAE6AAAgB0HI/gA2AgQgD0EBayEPIBBBAWohECAHKAIEIQgMOQsgBygCDCIDRQRAQQAhCAwJCyAFQR9LDQcgBkUNNyAFQQhqIQggAUEBaiEEIAZBAWshCSABLQAAIAV0IApqIQogBUEYSQ0BIAQhASAJIQYgCCEFDAcLIAdBwP4ANgIEDCoLIAlFBEAgBCEBQQAhBiAIIQUgDSEEDDgLIAVBEGohCSABQQJqIQQgBkECayELIAEtAAEgCHQgCmohCiAFQQ9LBEAgBCEBIAshBiAJIQUMBgsgC0UEQCAEIQFBACEGIAkhBSANIQQMOAsgBUEYaiEIIAFBA2ohBCAGQQNrIQsgAS0AAiAJdCAKaiEKIAVBB0sEQCAEIQEgCyEGIAghBQwGCyALRQRAIAQhAUEAIQYgCCEFIA0hBAw4CyAFQSBqIQUgBkEEayEGIAEtAAMgCHQgCmohCiABQQRqIQEMBQsgCUUEQCAEIQFBACEGIAghBSANIQQMNwsgBUEQaiEFIAZBAmshBiABLQABIAh0IApqIQogAUECaiEBDBwLIAlFBEAgBCEBQQAhBiAIIQUgDSEEDDYLIAVBEGohCSABQQJqIQQgBkECayELIAEtAAEgCHQgCmohCiAFQQ9LBEAgBCEBIAshBiAJIQUMBgsgC0UEQCAEIQFBACEGIAkhBSANIQQMNgsgBUEYaiEIIAFBA2ohBCAGQQNrIQsgAS0AAiAJdCAKaiEKIAUEQCAEIQEgCyEGIAghBQwGCyALRQRAIAQhAUEAIQYgCCEFIA0hBAw2CyAFQSBqIQUgBkEEayEGIAEtAAMgCHQgCmohCiABQQRqIQEMBQsgBUEIaiEJIAhFBEAgBCEBQQAhBiAJIQUgDSEEDDULIAFBAmohBCAGQQJrIQggAS0AASAJdCAKaiEKIAVBD0sEQCAEIQEgCCEGDBgLIAVBEGohCSAIRQRAIAQhAUEAIQYgCSEFIA0hBAw1CyABQQNqIQQgBkEDayEIIAEtAAIgCXQgCmohCiAFQQdLBEAgBCEBIAghBgwYCyAFQRhqIQUgCEUEQCAEIQFBACEGIA0hBAw1CyAGQQRrIQYgAS0AAyAFdCAKaiEKIAFBBGohAQwXCyAJDQYgBCEBQQAhBiAIIQUgDSEEDDMLIAlFBEAgBCEBQQAhBiAIIQUgDSEEDDMLIAVBEGohBSAGQQJrIQYgAS0AASAIdCAKaiEKIAFBAmohAQwUCyAMIBYgD2siCSAMKAIUajYCFCAHIAcoAiAgCWo2AiACQCADQQRxRQ0AIAkEQAJAIBAgCWshBCAMKAIcIggoAhQEQCAIQUBrIAQgCUEAQdiAASgCABEIAAwBCyAIIAgoAhwgBCAJQcCAASgCABEAACIENgIcIAwgBDYCMAsLIAcoAhRFDQAgByAeQeCAASgCABEBACIENgIcIAwgBDYCMAsCQCAHKAIMIghBBHFFDQAgBygCHCAKIApBCHRBgID8B3EgCkEYdHIgCkEIdkGA/gNxIApBGHZyciAHKAIUG0YNACAHQdH+ADYCBCAMQaQMNgIYIA8hFiAHKAIEIQgMMQtBACEKQQAhBSAPIRYLIAdBz/4ANgIEDC0LIApB//8DcSIEIApBf3NBEHZHBEAgB0HR/gA2AgQgDEGOCjYCGCAHKAIEIQgMLwsgB0HC/gA2AgQgByAENgKMAUEAIQpBACEFCyAHQcP+ADYCBAsgBygCjAEiBARAIA8gBiAEIAQgBksbIgQgBCAPSxsiCEUNHiAQIAEgCBAHIQQgByAHKAKMASAIazYCjAEgBCAIaiEQIA8gCGshDyABIAhqIQEgBiAIayEGIAcoAgQhCAwtCyAHQb/+ADYCBCAHKAIEIQgMLAsgBUEQaiEFIAZBAmshBiABLQABIAh0IApqIQogAUECaiEBCyAHIAo2AhQgCkH/AXFBCEcEQCAHQdH+ADYCBCAMQYIPNgIYIAcoAgQhCAwrCyAKQYDAA3EEQCAHQdH+ADYCBCAMQY0JNgIYIAcoAgQhCAwrCyAHKAIkIgQEQCAEIApBCHZBAXE2AgALAkAgCkGABHFFDQAgBy0ADEEEcUUNACAUIAo7AAwgBwJ/IAcoAhwhBUEAIBRBDGoiBEUNABogBSAEQQJB1IABKAIAEQAACzYCHAsgB0G2/gA2AgRBACEFQQAhCgsgBkUNKCABQQFqIQQgBkEBayEIIAEtAAAgBXQgCmohCiAFQRhPBEAgBCEBIAghBgwBCyAFQQhqIQkgCEUEQCAEIQFBACEGIAkhBSANIQQMKwsgAUECaiEEIAZBAmshCCABLQABIAl0IApqIQogBUEPSwRAIAQhASAIIQYMAQsgBUEQaiEJIAhFBEAgBCEBQQAhBiAJIQUgDSEEDCsLIAFBA2ohBCAGQQNrIQggAS0AAiAJdCAKaiEKIAVBB0sEQCAEIQEgCCEGDAELIAVBGGohBSAIRQRAIAQhAUEAIQYgDSEEDCsLIAZBBGshBiABLQADIAV0IApqIQogAUEEaiEBCyAHKAIkIgQEQCAEIAo2AgQLAkAgBy0AFUECcUUNACAHLQAMQQRxRQ0AIBQgCjYADCAHAn8gBygCHCEFQQAgFEEMaiIERQ0AGiAFIARBBEHUgAEoAgARAAALNgIcCyAHQbf+ADYCBEEAIQVBACEKCyAGRQ0mIAFBAWohBCAGQQFrIQggAS0AACAFdCAKaiEKIAVBCE8EQCAEIQEgCCEGDAELIAVBCGohBSAIRQRAIAQhAUEAIQYgDSEEDCkLIAZBAmshBiABLQABIAV0IApqIQogAUECaiEBCyAHKAIkIgQEQCAEIApBCHY2AgwgBCAKQf8BcTYCCAsCQCAHLQAVQQJxRQ0AIActAAxBBHFFDQAgFCAKOwAMIAcCfyAHKAIcIQVBACAUQQxqIgRFDQAaIAUgBEECQdSAASgCABEAAAs2AhwLIAdBuP4ANgIEQQAhCEEAIQVBACEKIAcoAhQiBEGACHENAQsgBygCJCIEBEAgBEEANgIQCyAIIQUMAgsgBkUEQEEAIQYgCCEKIA0hBAwmCyABQQFqIQkgBkEBayELIAEtAAAgBXQgCGohCiAFQQhPBEAgCSEBIAshBgwBCyAFQQhqIQUgC0UEQCAJIQFBACEGIA0hBAwmCyAGQQJrIQYgAS0AASAFdCAKaiEKIAFBAmohAQsgByAKQf//A3EiCDYCjAEgBygCJCIFBEAgBSAINgIUC0EAIQUCQCAEQYAEcUUNACAHLQAMQQRxRQ0AIBQgCjsADCAHAn8gBygCHCEIQQAgFEEMaiIERQ0AGiAIIARBAkHUgAEoAgARAAALNgIcC0EAIQoLIAdBuf4ANgIECyAHKAIUIglBgAhxBEAgBiAHKAKMASIIIAYgCEkbIg4EQAJAIAcoAiQiA0UNACADKAIQIgRFDQAgAygCGCILIAMoAhQgCGsiCE0NACAEIAhqIAEgCyAIayAOIAggDmogC0sbEAcaIAcoAhQhCQsCQCAJQYAEcUUNACAHLQAMQQRxRQ0AIAcCfyAHKAIcIQRBACABRQ0AGiAEIAEgDkHUgAEoAgARAAALNgIcCyAHIAcoAowBIA5rIgg2AowBIAYgDmshBiABIA5qIQELIAgNEwsgB0G6/gA2AgQgB0EANgKMAQsCQCAHLQAVQQhxBEBBACEIIAZFDQQDQCABIAhqLQAAIQMCQCAHKAIkIgtFDQAgCygCHCIERQ0AIAcoAowBIgkgCygCIE8NACAHIAlBAWo2AowBIAQgCWogAzoAAAsgA0EAIAYgCEEBaiIISxsNAAsCQCAHLQAVQQJxRQ0AIActAAxBBHFFDQAgBwJ/IAcoAhwhBEEAIAFFDQAaIAQgASAIQdSAASgCABEAAAs2AhwLIAEgCGohASAGIAhrIQYgA0UNAQwTCyAHKAIkIgRFDQAgBEEANgIcCyAHQbv+ADYCBCAHQQA2AowBCwJAIActABVBEHEEQEEAIQggBkUNAwNAIAEgCGotAAAhAwJAIAcoAiQiC0UNACALKAIkIgRFDQAgBygCjAEiCSALKAIoTw0AIAcgCUEBajYCjAEgBCAJaiADOgAACyADQQAgBiAIQQFqIghLGw0ACwJAIActABVBAnFFDQAgBy0ADEEEcUUNACAHAn8gBygCHCEEQQAgAUUNABogBCABIAhB1IABKAIAEQAACzYCHAsgASAIaiEBIAYgCGshBiADRQ0BDBILIAcoAiQiBEUNACAEQQA2AiQLIAdBvP4ANgIECyAHKAIUIgtBgARxBEACQCAFQQ9LDQAgBkUNHyAFQQhqIQggAUEBaiEEIAZBAWshCSABLQAAIAV0IApqIQogBUEITwRAIAQhASAJIQYgCCEFDAELIAlFBEAgBCEBQQAhBiAIIQUgDSEEDCILIAVBEGohBSAGQQJrIQYgAS0AASAIdCAKaiEKIAFBAmohAQsCQCAHLQAMQQRxRQ0AIAogBy8BHEYNACAHQdH+ADYCBCAMQdcMNgIYIAcoAgQhCAwgC0EAIQpBACEFCyAHKAIkIgQEQCAEQQE2AjAgBCALQQl2QQFxNgIsCwJAIActAAxBBHFFDQAgC0UNACAHIB5B5IABKAIAEQEAIgQ2AhwgDCAENgIwCyAHQb/+ADYCBCAHKAIEIQgMHgtBACEGDA4LAkAgC0ECcUUNACAKQZ+WAkcNACAHKAIoRQRAIAdBDzYCKAtBACEKIAdBADYCHCAUQZ+WAjsADCAHIBRBDGoiBAR/QQAgBEECQdSAASgCABEAAAVBAAs2AhwgB0G1/gA2AgRBACEFIAcoAgQhCAwdCyAHKAIkIgQEQCAEQX82AjALAkAgC0EBcQRAIApBCHRBgP4DcSAKQQh2akEfcEUNAQsgB0HR/gA2AgQgDEH2CzYCGCAHKAIEIQgMHQsgCkEPcUEIRwRAIAdB0f4ANgIEIAxBgg82AhggBygCBCEIDB0LIApBBHYiBEEPcSIJQQhqIQsgCUEHTUEAIAcoAigiCAR/IAgFIAcgCzYCKCALCyALTxtFBEAgBUEEayEFIAdB0f4ANgIEIAxB+gw2AhggBCEKIAcoAgQhCAwdCyAHQQE2AhxBACEFIAdBADYCFCAHQYACIAl0NgIYIAxBATYCMCAHQb3+AEG//gAgCkGAwABxGzYCBEEAIQogBygCBCEIDBwLIAcgCkEIdEGAgPwHcSAKQRh0ciAKQQh2QYD+A3EgCkEYdnJyIgQ2AhwgDCAENgIwIAdBvv4ANgIEQQAhCkEAIQULIAcoAhBFBEAgDCAPNgIQIAwgEDYCDCAMIAY2AgQgDCABNgIAIAcgBTYCiAEgByAKNgKEAUECIRcMIAsgB0EBNgIcIAxBATYCMCAHQb/+ADYCBAsCfwJAIAcoAghFBEAgBUEDSQ0BIAUMAgsgB0HO/gA2AgQgCiAFQQdxdiEKIAVBeHEhBSAHKAIEIQgMGwsgBkUNGSAGQQFrIQYgAS0AACAFdCAKaiEKIAFBAWohASAFQQhqCyEEIAcgCkEBcTYCCAJAAkACQAJAAkAgCkEBdkEDcUEBaw4DAQIDAAsgB0HB/gA2AgQMAwsgB0Gw2wA2ApgBIAdCiYCAgNAANwOgASAHQbDrADYCnAEgB0HH/gA2AgQMAgsgB0HE/gA2AgQMAQsgB0HR/gA2AgQgDEHXDTYCGAsgBEEDayEFIApBA3YhCiAHKAIEIQgMGQsgByAKQR9xIghBgQJqNgKsASAHIApBBXZBH3EiBEEBajYCsAEgByAKQQp2QQ9xQQRqIgs2AqgBIAVBDmshBSAKQQ52IQogCEEdTUEAIARBHkkbRQRAIAdB0f4ANgIEIAxB6gk2AhggBygCBCEIDBkLIAdBxf4ANgIEQQAhCCAHQQA2ArQBCyAIIQQDQCAFQQJNBEAgBkUNGCAGQQFrIQYgAS0AACAFdCAKaiEKIAVBCGohBSABQQFqIQELIAcgBEEBaiIINgK0ASAHIARBAXRBsOwAai8BAEEBdGogCkEHcTsBvAEgBUEDayEFIApBA3YhCiALIAgiBEsNAAsLIAhBEk0EQEESIAhrIQ1BAyAIa0EDcSIEBEADQCAHIAhBAXRBsOwAai8BAEEBdGpBADsBvAEgCEEBaiEIIARBAWsiBA0ACwsgDUEDTwRAA0AgB0G8AWoiDSAIQQF0IgRBsOwAai8BAEEBdGpBADsBACANIARBsuwAai8BAEEBdGpBADsBACANIARBtOwAai8BAEEBdGpBADsBACANIARBtuwAai8BAEEBdGpBADsBACAIQQRqIghBE0cNAAsLIAdBEzYCtAELIAdBBzYCoAEgByAYNgKYASAHIBg2ArgBQQAhCEEAIBxBEyAaIB0gGRBOIg0EQCAHQdH+ADYCBCAMQfQINgIYIAcoAgQhCAwXCyAHQcb+ADYCBCAHQQA2ArQBQQAhDQsgBygCrAEiFSAHKAKwAWoiESAISwRAQX8gBygCoAF0QX9zIRIgBygCmAEhGwNAIAYhCSABIQsCQCAFIgMgGyAKIBJxIhNBAnRqLQABIg5PBEAgBSEEDAELA0AgCUUNDSALLQAAIAN0IQ4gC0EBaiELIAlBAWshCSADQQhqIgQhAyAEIBsgCiAOaiIKIBJxIhNBAnRqLQABIg5JDQALIAshASAJIQYLAkAgGyATQQJ0ai8BAiIFQQ9NBEAgByAIQQFqIgk2ArQBIAcgCEEBdGogBTsBvAEgBCAOayEFIAogDnYhCiAJIQgMAQsCfwJ/AkACQAJAIAVBEGsOAgABAgsgDkECaiIFIARLBEADQCAGRQ0bIAZBAWshBiABLQAAIAR0IApqIQogAUEBaiEBIARBCGoiBCAFSQ0ACwsgBCAOayEFIAogDnYhBCAIRQRAIAdB0f4ANgIEIAxBvAk2AhggBCEKIAcoAgQhCAwdCyAFQQJrIQUgBEECdiEKIARBA3FBA2ohCSAIQQF0IAdqLwG6AQwDCyAOQQNqIgUgBEsEQANAIAZFDRogBkEBayEGIAEtAAAgBHQgCmohCiABQQFqIQEgBEEIaiIEIAVJDQALCyAEIA5rQQNrIQUgCiAOdiIEQQN2IQogBEEHcUEDagwBCyAOQQdqIgUgBEsEQANAIAZFDRkgBkEBayEGIAEtAAAgBHQgCmohCiABQQFqIQEgBEEIaiIEIAVJDQALCyAEIA5rQQdrIQUgCiAOdiIEQQd2IQogBEH/AHFBC2oLIQlBAAshAyAIIAlqIBFLDRMgCUEBayEEIAlBA3EiCwRAA0AgByAIQQF0aiADOwG8ASAIQQFqIQggCUEBayEJIAtBAWsiCw0ACwsgBEEDTwRAA0AgByAIQQF0aiIEIAM7Ab4BIAQgAzsBvAEgBCADOwHAASAEIAM7AcIBIAhBBGohCCAJQQRrIgkNAAsLIAcgCDYCtAELIAggEUkNAAsLIAcvAbwFRQRAIAdB0f4ANgIEIAxB0Qs2AhggBygCBCEIDBYLIAdBCjYCoAEgByAYNgKYASAHIBg2ArgBQQEgHCAVIBogHSAZEE4iDQRAIAdB0f4ANgIEIAxB2Ag2AhggBygCBCEIDBYLIAdBCTYCpAEgByAHKAK4ATYCnAFBAiAHIAcoAqwBQQF0akG8AWogBygCsAEgGiAfIBkQTiINBEAgB0HR/gA2AgQgDEGmCTYCGCAHKAIEIQgMFgsgB0HH/gA2AgRBACENCyAHQcj+ADYCBAsCQCAGQQ9JDQAgD0GEAkkNACAMIA82AhAgDCAQNgIMIAwgBjYCBCAMIAE2AgAgByAFNgKIASAHIAo2AoQBIAwgFkHogAEoAgARBwAgBygCiAEhBSAHKAKEASEKIAwoAgQhBiAMKAIAIQEgDCgCECEPIAwoAgwhECAHKAIEQb/+AEcNByAHQX82ApBHIAcoAgQhCAwUCyAHQQA2ApBHIAUhCSAGIQggASEEAkAgBygCmAEiEiAKQX8gBygCoAF0QX9zIhVxIg5BAnRqLQABIgsgBU0EQCAFIQMMAQsDQCAIRQ0PIAQtAAAgCXQhCyAEQQFqIQQgCEEBayEIIAlBCGoiAyEJIAMgEiAKIAtqIgogFXEiDkECdGotAAEiC0kNAAsLIBIgDkECdGoiAS8BAiETAkBBACABLQAAIhEgEUHwAXEbRQRAIAshBgwBCyAIIQYgBCEBAkAgAyIFIAsgEiAKQX8gCyARanRBf3MiFXEgC3YgE2oiEUECdGotAAEiDmpPBEAgAyEJDAELA0AgBkUNDyABLQAAIAV0IQ4gAUEBaiEBIAZBAWshBiAFQQhqIgkhBSALIBIgCiAOaiIKIBVxIAt2IBNqIhFBAnRqLQABIg5qIAlLDQALIAEhBCAGIQgLIBIgEUECdGoiAS0AACERIAEvAQIhEyAHIAs2ApBHIAsgDmohBiAJIAtrIQMgCiALdiEKIA4hCwsgByAGNgKQRyAHIBNB//8DcTYCjAEgAyALayEFIAogC3YhCiARRQRAIAdBzf4ANgIEDBALIBFBIHEEQCAHQb/+ADYCBCAHQX82ApBHDBALIBFBwABxBEAgB0HR/gA2AgQgDEHQDjYCGAwQCyAHQcn+ADYCBCAHIBFBD3EiAzYClAELAkAgA0UEQCAHKAKMASELIAQhASAIIQYMAQsgBSEJIAghBiAEIQsCQCADIAVNBEAgBCEBDAELA0AgBkUNDSAGQQFrIQYgCy0AACAJdCAKaiEKIAtBAWoiASELIAlBCGoiCSADSQ0ACwsgByAHKAKQRyADajYCkEcgByAHKAKMASAKQX8gA3RBf3NxaiILNgKMASAJIANrIQUgCiADdiEKCyAHQcr+ADYCBCAHIAs2ApRHCyAFIQkgBiEIIAEhBAJAIAcoApwBIhIgCkF/IAcoAqQBdEF/cyIVcSIOQQJ0ai0AASIDIAVNBEAgBSELDAELA0AgCEUNCiAELQAAIAl0IQMgBEEBaiEEIAhBAWshCCAJQQhqIgshCSALIBIgAyAKaiIKIBVxIg5BAnRqLQABIgNJDQALCyASIA5BAnRqIgEvAQIhEwJAIAEtAAAiEUHwAXEEQCAHKAKQRyEGIAMhCQwBCyAIIQYgBCEBAkAgCyIFIAMgEiAKQX8gAyARanRBf3MiFXEgA3YgE2oiEUECdGotAAEiCWpPBEAgCyEODAELA0AgBkUNCiABLQAAIAV0IQkgAUEBaiEBIAZBAWshBiAFQQhqIg4hBSADIBIgCSAKaiIKIBVxIAN2IBNqIhFBAnRqLQABIglqIA5LDQALIAEhBCAGIQgLIBIgEUECdGoiAS0AACERIAEvAQIhEyAHIAcoApBHIANqIgY2ApBHIA4gA2shCyAKIAN2IQoLIAcgBiAJajYCkEcgCyAJayEFIAogCXYhCiARQcAAcQRAIAdB0f4ANgIEIAxB7A42AhggBCEBIAghBiAHKAIEIQgMEgsgB0HL/gA2AgQgByARQQ9xIgM2ApQBIAcgE0H//wNxNgKQAQsCQCADRQRAIAQhASAIIQYMAQsgBSEJIAghBiAEIQsCQCADIAVNBEAgBCEBDAELA0AgBkUNCCAGQQFrIQYgCy0AACAJdCAKaiEKIAtBAWoiASELIAlBCGoiCSADSQ0ACwsgByAHKAKQRyADajYCkEcgByAHKAKQASAKQX8gA3RBf3NxajYCkAEgCSADayEFIAogA3YhCgsgB0HM/gA2AgQLIA9FDQACfyAHKAKQASIIIBYgD2siBEsEQAJAIAggBGsiCCAHKAIwTQ0AIAcoAoxHRQ0AIAdB0f4ANgIEIAxBuQw2AhggBygCBCEIDBILAn8CQAJ/IAcoAjQiBCAISQRAIAcoAjggBygCLCAIIARrIghragwBCyAHKAI4IAQgCGtqCyILIBAgDyAQaiAQa0EBaqwiISAPIAcoAowBIgQgCCAEIAhJGyIEIAQgD0sbIgitIiIgISAiVBsiIqciCWoiBEkgCyAQT3ENACALIBBNIAkgC2ogEEtxDQAgECALIAkQBxogBAwBCyAQIAsgCyAQayIEIARBH3UiBGogBHMiCRAHIAlqIQQgIiAJrSIkfSIjUEUEQCAJIAtqIQkDQAJAICMgJCAjICRUGyIiQiBUBEAgIiEhDAELICIiIUIgfSImQgWIQgF8QgODIiVQRQRAA0AgBCAJKQAANwAAIAQgCSkAGDcAGCAEIAkpABA3ABAgBCAJKQAINwAIICFCIH0hISAJQSBqIQkgBEEgaiEEICVCAX0iJUIAUg0ACwsgJkLgAFQNAANAIAQgCSkAADcAACAEIAkpABg3ABggBCAJKQAQNwAQIAQgCSkACDcACCAEIAkpADg3ADggBCAJKQAwNwAwIAQgCSkAKDcAKCAEIAkpACA3ACAgBCAJKQBYNwBYIAQgCSkAUDcAUCAEIAkpAEg3AEggBCAJKQBANwBAIAQgCSkAYDcAYCAEIAkpAGg3AGggBCAJKQBwNwBwIAQgCSkAeDcAeCAJQYABaiEJIARBgAFqIQQgIUKAAX0iIUIfVg0ACwsgIUIQWgRAIAQgCSkAADcAACAEIAkpAAg3AAggIUIQfSEhIAlBEGohCSAEQRBqIQQLICFCCFoEQCAEIAkpAAA3AAAgIUIIfSEhIAlBCGohCSAEQQhqIQQLICFCBFoEQCAEIAkoAAA2AAAgIUIEfSEhIAlBBGohCSAEQQRqIQQLICFCAloEQCAEIAkvAAA7AAAgIUICfSEhIAlBAmohCSAEQQJqIQQLICMgIn0hIyAhUEUEQCAEIAktAAA6AAAgCUEBaiEJIARBAWohBAsgI0IAUg0ACwsgBAsMAQsgECAIIA8gBygCjAEiBCAEIA9LGyIIIA9ByIABKAIAEQQACyEQIAcgBygCjAEgCGsiBDYCjAEgDyAIayEPIAQNAiAHQcj+ADYCBCAHKAIEIQgMDwsgDSEJCyAJIQQMDgsgBygCBCEIDAwLIAEgBmohASAFIAZBA3RqIQUMCgsgBCAIaiEBIAUgCEEDdGohBQwJCyAEIAhqIQEgCyAIQQN0aiEFDAgLIAEgBmohASAFIAZBA3RqIQUMBwsgBCAIaiEBIAUgCEEDdGohBQwGCyAEIAhqIQEgAyAIQQN0aiEFDAULIAEgBmohASAFIAZBA3RqIQUMBAsgB0HR/gA2AgQgDEG8CTYCGCAHKAIEIQgMBAsgBCEBIAghBiAHKAIEIQgMAwtBACEGIAQhBSANIQQMAwsCQAJAIAhFBEAgCiEJDAELIAcoAhRFBEAgCiEJDAELAkAgBUEfSw0AIAZFDQMgBUEIaiEJIAFBAWohBCAGQQFrIQsgAS0AACAFdCAKaiEKIAVBGE8EQCAEIQEgCyEGIAkhBQwBCyALRQRAIAQhAUEAIQYgCSEFIA0hBAwGCyAFQRBqIQsgAUECaiEEIAZBAmshAyABLQABIAl0IApqIQogBUEPSwRAIAQhASADIQYgCyEFDAELIANFBEAgBCEBQQAhBiALIQUgDSEEDAYLIAVBGGohCSABQQNqIQQgBkEDayEDIAEtAAIgC3QgCmohCiAFQQdLBEAgBCEBIAMhBiAJIQUMAQsgA0UEQCAEIQFBACEGIAkhBSANIQQMBgsgBUEgaiEFIAZBBGshBiABLQADIAl0IApqIQogAUEEaiEBC0EAIQkgCEEEcQRAIAogBygCIEcNAgtBACEFCyAHQdD+ADYCBEEBIQQgCSEKDAMLIAdB0f4ANgIEIAxBjQw2AhggBygCBCEIDAELC0EAIQYgDSEECyAMIA82AhAgDCAQNgIMIAwgBjYCBCAMIAE2AgAgByAFNgKIASAHIAo2AoQBAkAgBygCLA0AIA8gFkYNAiAHKAIEIgFB0P4ASw0CIAFBzv4ASQ0ACwJ/IBYgD2shCiAHKAIMQQRxIQkCQAJAAkAgDCgCHCIDKAI4Ig1FBEBBASEIIAMgAygCACIBKAIgIAEoAiggAygCmEdBASADKAIodGpBARAoIg02AjggDUUNAQsgAygCLCIGRQRAIANCADcDMCADQQEgAygCKHQiBjYCLAsgBiAKTQRAAkAgCQRAAkAgBiAKTw0AIAogBmshBSAQIAprIQEgDCgCHCIGKAIUBEAgBkFAayABIAVBAEHYgAEoAgARCAAMAQsgBiAGKAIcIAEgBUHAgAEoAgARAAAiATYCHCAMIAE2AjALIAMoAiwiDUUNASAQIA1rIQUgAygCOCEBIAwoAhwiBigCFARAIAZBQGsgASAFIA1B3IABKAIAEQgADAILIAYgBigCHCABIAUgDUHEgAEoAgARBAAiATYCHCAMIAE2AjAMAQsgDSAQIAZrIAYQBxoLIANBADYCNCADIAMoAiw2AjBBAAwECyAKIAYgAygCNCIFayIBIAEgCksbIQsgECAKayEGIAUgDWohBQJAIAkEQAJAIAtFDQAgDCgCHCIBKAIUBEAgAUFAayAFIAYgC0HcgAEoAgARCAAMAQsgASABKAIcIAUgBiALQcSAASgCABEEACIBNgIcIAwgATYCMAsgCiALayIFRQ0BIBAgBWshBiADKAI4IQEgDCgCHCINKAIUBEAgDUFAayABIAYgBUHcgAEoAgARCAAMBQsgDSANKAIcIAEgBiAFQcSAASgCABEEACIBNgIcIAwgATYCMAwECyAFIAYgCxAHGiAKIAtrIgUNAgtBACEIIANBACADKAI0IAtqIgUgBSADKAIsIgFGGzYCNCABIAMoAjAiAU0NACADIAEgC2o2AjALIAgMAgsgAygCOCAQIAVrIAUQBxoLIAMgBTYCNCADIAMoAiw2AjBBAAtFBEAgDCgCECEPIAwoAgQhFyAHKAKIAQwDCyAHQdL+ADYCBAtBfCEXDAILIAYhFyAFCyEFIAwgICAXayIBIAwoAghqNgIIIAwgFiAPayIGIAwoAhRqNgIUIAcgBygCICAGajYCICAMIAcoAghBAEdBBnQgBWogBygCBCIFQb/+AEZBB3RqQYACIAVBwv4ARkEIdCAFQcf+AEYbajYCLCAEIARBeyAEGyABIAZyGyEXCyAUQRBqJAAgFwshASACIAIpAwAgADUCIH03AwACQAJAAkACQCABQQVqDgcBAgICAgMAAgtBAQ8LIAAoAhQNAEEDDwsgACgCACIABEAgACABNgIEIABBDTYCAAtBAiEBCyABCwkAIABBAToADAtEAAJAIAJC/////w9YBEAgACgCFEUNAQsgACgCACIABEAgAEEANgIEIABBEjYCAAtBAA8LIAAgATYCECAAIAI+AhRBAQu5AQEEfyAAQRBqIQECfyAALQAEBEAgARCEAQwBC0F+IQMCQCABRQ0AIAEoAiBFDQAgASgCJCIERQ0AIAEoAhwiAkUNACACKAIAIAFHDQAgAigCBEG0/gBrQR9LDQAgAigCOCIDBEAgBCABKAIoIAMQHiABKAIkIQQgASgCHCECCyAEIAEoAiggAhAeQQAhAyABQQA2AhwLIAMLIgEEQCAAKAIAIgAEQCAAIAE2AgQgAEENNgIACwsgAUUL0gwBBn8gAEIANwIQIABCADcCHCAAQRBqIQICfyAALQAEBEAgACgCCCEBQesMLQAAQTFGBH8Cf0F+IQMCQCACRQ0AIAJBADYCGCACKAIgIgRFBEAgAkEANgIoIAJBJzYCIEEnIQQLIAIoAiRFBEAgAkEoNgIkC0EGIAEgAUF/RhsiBUEASA0AIAVBCUoNAEF8IQMgBCACKAIoQQFB0C4QKCIBRQ0AIAIgATYCHCABIAI2AgAgAUEPNgI0IAFCgICAgKAFNwIcIAFBADYCFCABQYCAAjYCMCABQf//ATYCOCABIAIoAiAgAigCKEGAgAJBAhAoNgJIIAEgAigCICACKAIoIAEoAjBBAhAoIgM2AkwgA0EAIAEoAjBBAXQQGSACKAIgIAIoAihBgIAEQQIQKCEDIAFBgIACNgLoLSABQQA2AkAgASADNgJQIAEgAigCICACKAIoQYCAAkEEECgiAzYCBCABIAEoAugtIgRBAnQ2AgwCQAJAIAEoAkhFDQAgASgCTEUNACABKAJQRQ0AIAMNAQsgAUGaBTYCICACQejAACgCADYCGCACEIQBGkF8DAILIAFBADYCjAEgASAFNgKIASABQgA3AyggASADIARqNgLsLSABIARBA2xBA2s2AvQtQX4hAwJAIAJFDQAgAigCIEUNACACKAIkRQ0AIAIoAhwiAUUNACABKAIAIAJHDQACQAJAIAEoAiAiBEE5aw45AQICAgICAgICAgICAQICAgECAgICAgICAgICAgICAgICAgECAgICAgICAgICAgECAgICAgICAgIBAAsgBEGaBUYNACAEQSpHDQELIAJBAjYCLCACQQA2AgggAkIANwIUIAFBADYCECABIAEoAgQ2AgggASgCFCIDQX9MBEAgAUEAIANrIgM2AhQLIAFBOUEqIANBAkYbNgIgIAIgA0ECRgR/IAFBoAFqQeSAASgCABEBAAVBAQs2AjAgAUF+NgIkIAFBADYCoC4gAUIANwOYLiABQYgXakGg0wA2AgAgASABQcwVajYCgBcgAUH8FmpBjNMANgIAIAEgAUHYE2o2AvQWIAFB8BZqQfjSADYCACABIAFB5AFqNgLoFiABEIgBQQAhAwsgAw0AIAIoAhwiAiACKAIwQQF0NgJEQQAhAyACKAJQQQBBgIAIEBkgAiACKAKIASIEQQxsIgFBtNgAai8BADYClAEgAiABQbDYAGovAQA2ApABIAIgAUGy2ABqLwEANgJ4IAIgAUG22ABqLwEANgJ0QfiAASgCACEFQeyAASgCACEGQYCBASgCACEBIAJCADcCbCACQgA3AmQgAkEANgI8IAJBADYChC4gAkIANwJUIAJBKSABIARBCUYiARs2AnwgAkEqIAYgARs2AoABIAJBKyAFIAEbNgKEAQsgAwsFQXoLDAELAn9BekHrDC0AAEExRw0AGkF+IAJFDQAaIAJBADYCGCACKAIgIgNFBEAgAkEANgIoIAJBJzYCIEEnIQMLIAIoAiRFBEAgAkEoNgIkC0F8IAMgAigCKEEBQaDHABAoIgRFDQAaIAIgBDYCHCAEQQA2AjggBCACNgIAIARBtP4ANgIEIARBzIABKAIAEQkANgKYR0F+IQMCQCACRQ0AIAIoAiBFDQAgAigCJCIFRQ0AIAIoAhwiAUUNACABKAIAIAJHDQAgASgCBEG0/gBrQR9LDQACQAJAIAEoAjgiBgRAIAEoAihBD0cNAQsgAUEPNgIoIAFBADYCDAwBCyAFIAIoAiggBhAeIAFBADYCOCACKAIgIQUgAUEPNgIoIAFBADYCDCAFRQ0BCyACKAIkRQ0AIAIoAhwiAUUNACABKAIAIAJHDQAgASgCBEG0/gBrQR9LDQBBACEDIAFBADYCNCABQgA3AiwgAUEANgIgIAJBADYCCCACQgA3AhQgASgCDCIFBEAgAiAFQQFxNgIwCyABQrT+ADcCBCABQgA3AoQBIAFBADYCJCABQoCAgoAQNwMYIAFCgICAgHA3AxAgAUKBgICAcDcCjEcgASABQfwKaiIFNgK4ASABIAU2ApwBIAEgBTYCmAELQQAgA0UNABogAigCJCACKAIoIAQQHiACQQA2AhwgAwsLIgIEQCAAKAIAIgAEQCAAIAI2AgQgAEENNgIACwsgAkULKQEBfyAALQAERQRAQQAPC0ECIQEgACgCCCIAQQNOBH8gAEEHSgVBAgsLBgAgABAGC2MAQcgAEAkiAEUEQEGEhAEoAgAhASACBEAgAiABNgIEIAJBATYCAAsgAA8LIABBADoADCAAQQE6AAQgACACNgIAIABBADYCOCAAQgA3AzAgACABQQkgAUEBa0EJSRs2AgggAAukCgIIfwF+QfCAAUH0gAEgACgCdEGBCEkbIQYCQANAAkACfwJAIAAoAjxBhQJLDQAgABAvAkAgACgCPCICQYUCSw0AIAENAEEADwsgAkUNAiACQQRPDQBBAAwBCyAAIAAoAmggACgChAERAgALIQMgACAAKAJsOwFgQQIhAgJAIAA1AmggA619IgpCAVMNACAKIAAoAjBBhgJrrVUNACAAKAJwIAAoAnhPDQAgA0UNACAAIAMgBigCABECACICQQVLDQBBAiACIAAoAowBQQFGGyECCwJAIAAoAnAiA0EDSQ0AIAIgA0sNACAAIAAoAvAtIgJBAWo2AvAtIAAoAjwhBCACIAAoAuwtaiAAKAJoIgcgAC8BYEF/c2oiAjoAACAAIAAoAvAtIgVBAWo2AvAtIAUgACgC7C1qIAJBCHY6AAAgACAAKALwLSIFQQFqNgLwLSAFIAAoAuwtaiADQQNrOgAAIAAgACgCgC5BAWo2AoAuIANB/c4Aai0AAEECdCAAakHoCWoiAyADLwEAQQFqOwEAIAAgAkEBayICIAJBB3ZBgAJqIAJBgAJJG0GAywBqLQAAQQJ0akHYE2oiAiACLwEAQQFqOwEAIAAgACgCcCIFQQFrIgM2AnAgACAAKAI8IANrNgI8IAAoAvQtIQggACgC8C0hCSAEIAdqQQNrIgQgACgCaCICSwRAIAAgAkEBaiAEIAJrIgIgBUECayIEIAIgBEkbIAAoAoABEQUAIAAoAmghAgsgAEEANgJkIABBADYCcCAAIAIgA2oiBDYCaCAIIAlHDQJBACECIAAgACgCWCIDQQBOBH8gACgCSCADagVBAAsgBCADa0EAEA8gACAAKAJoNgJYIAAoAgAQCiAAKAIAKAIQDQIMAwsgACgCZARAIAAoAmggACgCSGpBAWstAAAhAyAAIAAoAvAtIgRBAWo2AvAtIAQgACgC7C1qQQA6AAAgACAAKALwLSIEQQFqNgLwLSAEIAAoAuwtakEAOgAAIAAgACgC8C0iBEEBajYC8C0gBCAAKALsLWogAzoAACAAIANBAnRqIgMgAy8B5AFBAWo7AeQBIAAoAvAtIAAoAvQtRgRAIAAgACgCWCIDQQBOBH8gACgCSCADagVBAAsgACgCaCADa0EAEA8gACAAKAJoNgJYIAAoAgAQCgsgACACNgJwIAAgACgCaEEBajYCaCAAIAAoAjxBAWs2AjwgACgCACgCEA0CQQAPBSAAQQE2AmQgACACNgJwIAAgACgCaEEBajYCaCAAIAAoAjxBAWs2AjwMAgsACwsgACgCZARAIAAoAmggACgCSGpBAWstAAAhAiAAIAAoAvAtIgNBAWo2AvAtIAMgACgC7C1qQQA6AAAgACAAKALwLSIDQQFqNgLwLSADIAAoAuwtakEAOgAAIAAgACgC8C0iA0EBajYC8C0gAyAAKALsLWogAjoAACAAIAJBAnRqIgIgAi8B5AFBAWo7AeQBIAAoAvAtIAAoAvQtRhogAEEANgJkCyAAIAAoAmgiA0ECIANBAkkbNgKELiABQQRGBEAgACAAKAJYIgFBAE4EfyAAKAJIIAFqBUEACyADIAFrQQEQDyAAIAAoAmg2AlggACgCABAKQQNBAiAAKAIAKAIQGw8LIAAoAvAtBEBBACECIAAgACgCWCIBQQBOBH8gACgCSCABagVBAAsgAyABa0EAEA8gACAAKAJoNgJYIAAoAgAQCiAAKAIAKAIQRQ0BC0EBIQILIAIL2BACEH8BfiAAKAKIAUEFSCEOA0ACQAJ/AkACQAJAAn8CQAJAIAAoAjxBhQJNBEAgABAvIAAoAjwiA0GFAksNASABDQFBAA8LIA4NASAIIQMgBSEHIAohDSAGQf//A3FFDQEMAwsgA0UNA0EAIANBBEkNARoLIAAgACgCaEH4gAEoAgARAgALIQZBASECQQAhDSAAKAJoIgOtIAatfSISQgFTDQIgEiAAKAIwQYYCa61VDQIgBkUNAiAAIAZB8IABKAIAEQIAIgZBASAGQfz/A3EbQQEgACgCbCINQf//A3EgA0H//wNxSRshBiADIQcLAkAgACgCPCIEIAZB//8DcSICQQRqTQ0AIAZB//8DcUEDTQRAQQEgBkEBa0H//wNxIglFDQQaIANB//8DcSIEIAdBAWpB//8DcSIDSw0BIAAgAyAJIAQgA2tBAWogAyAJaiAESxtB7IABKAIAEQUADAELAkAgACgCeEEEdCACSQ0AIARBBEkNACAGQQFrQf//A3EiDCAHQQFqQf//A3EiBGohCSAEIANB//8DcSIDTwRAQeyAASgCACELIAMgCUkEQCAAIAQgDCALEQUADAMLIAAgBCADIARrQQFqIAsRBQAMAgsgAyAJTw0BIAAgAyAJIANrQeyAASgCABEFAAwBCyAGIAdqQf//A3EiA0UNACAAIANBAWtB+IABKAIAEQIAGgsgBgwCCyAAIAAoAmgiBUECIAVBAkkbNgKELiABQQRGBEBBACEDIAAgACgCWCIBQQBOBH8gACgCSCABagVBAAsgBSABa0EBEA8gACAAKAJoNgJYIAAoAgAQCkEDQQIgACgCACgCEBsPCyAAKALwLQRAQQAhAkEAIQMgACAAKAJYIgFBAE4EfyAAKAJIIAFqBUEACyAFIAFrQQAQDyAAIAAoAmg2AlggACgCABAKIAAoAgAoAhBFDQMLQQEhAgwCCyADIQdBAQshBEEAIQYCQCAODQAgACgCPEGHAkkNACACIAdB//8DcSIQaiIDIAAoAkRBhgJrTw0AIAAgAzYCaEEAIQogACADQfiAASgCABECACEFAn8CQCAAKAJoIgitIAWtfSISQgFTDQAgEiAAKAIwQYYCa61VDQAgBUUNACAAIAVB8IABKAIAEQIAIQYgAC8BbCIKIAhB//8DcSIFTw0AIAZB//8DcSIDQQRJDQAgCCAEQf//A3FBAkkNARogCCACIApBAWpLDQEaIAggAiAFQQFqSw0BGiAIIAAoAkgiCSACa0EBaiICIApqLQAAIAIgBWotAABHDQEaIAggCUEBayICIApqIgwtAAAgAiAFaiIPLQAARw0BGiAIIAUgCCAAKAIwQYYCayICa0H//wNxQQAgAiAFSRsiEU0NARogCCADQf8BSw0BGiAGIQUgCCECIAQhAyAIIAoiCUECSQ0BGgNAAkAgA0EBayEDIAVBAWohCyAJQQFrIQkgAkEBayECIAxBAWsiDC0AACAPQQFrIg8tAABHDQAgA0H//wNxRQ0AIBEgAkH//wNxTw0AIAVB//8DcUH+AUsNACALIQUgCUH//wNxQQFLDQELCyAIIANB//8DcUEBSw0BGiAIIAtB//8DcUECRg0BGiAIQQFqIQggAyEEIAshBiAJIQogAgwBC0EBIQYgCAshBSAAIBA2AmgLAn8gBEH//wNxIgNBA00EQCAEQf//A3EiA0UNAyAAKAJIIAdB//8DcWotAAAhBCAAIAAoAvAtIgJBAWo2AvAtIAIgACgC7C1qQQA6AAAgACAAKALwLSICQQFqNgLwLSACIAAoAuwtakEAOgAAIAAgACgC8C0iAkEBajYC8C0gAiAAKALsLWogBDoAACAAIARBAnRqIgRB5AFqIAQvAeQBQQFqOwEAIAAgACgCPEEBazYCPCAAKALwLSICIAAoAvQtRiIEIANBAUYNARogACgCSCAHQQFqQf//A3FqLQAAIQkgACACQQFqNgLwLSAAKALsLSACakEAOgAAIAAgACgC8C0iAkEBajYC8C0gAiAAKALsLWpBADoAACAAIAAoAvAtIgJBAWo2AvAtIAIgACgC7C1qIAk6AAAgACAJQQJ0aiICQeQBaiACLwHkAUEBajsBACAAIAAoAjxBAWs2AjwgBCAAKALwLSICIAAoAvQtRmoiBCADQQJGDQEaIAAoAkggB0ECakH//wNxai0AACEHIAAgAkEBajYC8C0gACgC7C0gAmpBADoAACAAIAAoAvAtIgJBAWo2AvAtIAIgACgC7C1qQQA6AAAgACAAKALwLSICQQFqNgLwLSACIAAoAuwtaiAHOgAAIAAgB0ECdGoiB0HkAWogBy8B5AFBAWo7AQAgACAAKAI8QQFrNgI8IAQgACgC8C0gACgC9C1GagwBCyAAIAAoAvAtIgJBAWo2AvAtIAIgACgC7C1qIAdB//8DcSANQf//A3FrIgc6AAAgACAAKALwLSICQQFqNgLwLSACIAAoAuwtaiAHQQh2OgAAIAAgACgC8C0iAkEBajYC8C0gAiAAKALsLWogBEEDazoAACAAIAAoAoAuQQFqNgKALiADQf3OAGotAABBAnQgAGpB6AlqIgQgBC8BAEEBajsBACAAIAdBAWsiBCAEQQd2QYACaiAEQYACSRtBgMsAai0AAEECdGpB2BNqIgQgBC8BAEEBajsBACAAIAAoAjwgA2s2AjwgACgC8C0gACgC9C1GCyEEIAAgACgCaCADaiIHNgJoIARFDQFBACECQQAhBCAAIAAoAlgiA0EATgR/IAAoAkggA2oFQQALIAcgA2tBABAPIAAgACgCaDYCWCAAKAIAEAogACgCACgCEA0BCwsgAgu0BwIEfwF+AkADQAJAAkACQAJAIAAoAjxBhQJNBEAgABAvAkAgACgCPCICQYUCSw0AIAENAEEADwsgAkUNBCACQQRJDQELIAAgACgCaEH4gAEoAgARAgAhAiAANQJoIAKtfSIGQgFTDQAgBiAAKAIwQYYCa61VDQAgAkUNACAAIAJB8IABKAIAEQIAIgJBBEkNACAAIAAoAvAtIgNBAWo2AvAtIAMgACgC7C1qIAAoAmggACgCbGsiAzoAACAAIAAoAvAtIgRBAWo2AvAtIAQgACgC7C1qIANBCHY6AAAgACAAKALwLSIEQQFqNgLwLSAEIAAoAuwtaiACQQNrOgAAIAAgACgCgC5BAWo2AoAuIAJB/c4Aai0AAEECdCAAakHoCWoiBCAELwEAQQFqOwEAIAAgA0EBayIDIANBB3ZBgAJqIANBgAJJG0GAywBqLQAAQQJ0akHYE2oiAyADLwEAQQFqOwEAIAAgACgCPCACayIFNgI8IAAoAvQtIQMgACgC8C0hBCAAKAJ4IAJPQQAgBUEDSxsNASAAIAAoAmggAmoiAjYCaCAAIAJBAWtB+IABKAIAEQIAGiADIARHDQQMAgsgACgCSCAAKAJoai0AACECIAAgACgC8C0iA0EBajYC8C0gAyAAKALsLWpBADoAACAAIAAoAvAtIgNBAWo2AvAtIAMgACgC7C1qQQA6AAAgACAAKALwLSIDQQFqNgLwLSADIAAoAuwtaiACOgAAIAAgAkECdGoiAkHkAWogAi8B5AFBAWo7AQAgACAAKAI8QQFrNgI8IAAgACgCaEEBajYCaCAAKALwLSAAKAL0LUcNAwwBCyAAIAAoAmhBAWoiBTYCaCAAIAUgAkEBayICQeyAASgCABEFACAAIAAoAmggAmo2AmggAyAERw0CC0EAIQNBACECIAAgACgCWCIEQQBOBH8gACgCSCAEagVBAAsgACgCaCAEa0EAEA8gACAAKAJoNgJYIAAoAgAQCiAAKAIAKAIQDQEMAgsLIAAgACgCaCIEQQIgBEECSRs2AoQuIAFBBEYEQEEAIQIgACAAKAJYIgFBAE4EfyAAKAJIIAFqBUEACyAEIAFrQQEQDyAAIAAoAmg2AlggACgCABAKQQNBAiAAKAIAKAIQGw8LIAAoAvAtBEBBACEDQQAhAiAAIAAoAlgiAUEATgR/IAAoAkggAWoFQQALIAQgAWtBABAPIAAgACgCaDYCWCAAKAIAEAogACgCACgCEEUNAQtBASEDCyADC80JAgl/An4gAUEERiEGIAAoAiwhAgJAAkACQCABQQRGBEAgAkECRg0CIAIEQCAAQQAQUCAAQQA2AiwgACAAKAJoNgJYIAAoAgAQCiAAKAIAKAIQRQ0ECyAAIAYQTyAAQQI2AiwMAQsgAg0BIAAoAjxFDQEgACAGEE8gAEEBNgIsCyAAIAAoAmg2AlgLQQJBASABQQRGGyEKA0ACQCAAKAIMIAAoAhBBCGpLDQAgACgCABAKIAAoAgAiAigCEA0AQQAhAyABQQRHDQIgAigCBA0CIAAoAqAuDQIgACgCLEVBAXQPCwJAAkAgACgCPEGFAk0EQCAAEC8CQCAAKAI8IgNBhQJLDQAgAQ0AQQAPCyADRQ0CIAAoAiwEfyADBSAAIAYQTyAAIAo2AiwgACAAKAJoNgJYIAAoAjwLQQRJDQELIAAgACgCaEH4gAEoAgARAgAhBCAAKAJoIgKtIAStfSILQgFTDQAgCyAAKAIwQYYCa61VDQAgAiAAKAJIIgJqIgMvAAAgAiAEaiICLwAARw0AIANBAmogAkECakHQgAEoAgARAgBBAmoiA0EESQ0AIAAoAjwiAiADIAIgA0kbIgJBggIgAkGCAkkbIgdB/c4Aai0AACICQQJ0IgRBhMkAajMBACEMIARBhskAai8BACEDIAJBCGtBE00EQCAHQQNrIARBgNEAaigCAGutIAOthiAMhCEMIARBsNYAaigCACADaiEDCyAAKAKgLiEFIAMgC6dBAWsiCCAIQQd2QYACaiAIQYACSRtBgMsAai0AACICQQJ0IglBgsoAai8BAGohBCAJQYDKAGozAQAgA62GIAyEIQsgACkDmC4hDAJAIAUgAkEESQR/IAQFIAggCUGA0gBqKAIAa60gBK2GIAuEIQsgCUGw1wBqKAIAIARqCyICaiIDQT9NBEAgCyAFrYYgDIQhCwwBCyAFQcAARgRAIAAoAgQgACgCEGogDDcAACAAIAAoAhBBCGo2AhAgAiEDDAELIAAoAgQgACgCEGogCyAFrYYgDIQ3AAAgACAAKAIQQQhqNgIQIANBQGohAyALQcAAIAVrrYghCwsgACALNwOYLiAAIAM2AqAuIAAgACgCPCAHazYCPCAAIAAoAmggB2o2AmgMAgsgACgCSCAAKAJoai0AAEECdCICQYDBAGozAQAhCyAAKQOYLiEMAkAgACgCoC4iBCACQYLBAGovAQAiAmoiA0E/TQRAIAsgBK2GIAyEIQsMAQsgBEHAAEYEQCAAKAIEIAAoAhBqIAw3AAAgACAAKAIQQQhqNgIQIAIhAwwBCyAAKAIEIAAoAhBqIAsgBK2GIAyENwAAIAAgACgCEEEIajYCECADQUBqIQMgC0HAACAEa62IIQsLIAAgCzcDmC4gACADNgKgLiAAIAAoAmhBAWo2AmggACAAKAI8QQFrNgI8DAELCyAAIAAoAmgiAkECIAJBAkkbNgKELiAAKAIsIQIgAUEERgRAAkAgAkUNACAAQQEQUCAAQQA2AiwgACAAKAJoNgJYIAAoAgAQCiAAKAIAKAIQDQBBAg8LQQMPCyACBEBBACEDIABBABBQIABBADYCLCAAIAAoAmg2AlggACgCABAKIAAoAgAoAhBFDQELQQEhAwsgAwucAQEFfyACQQFOBEAgAiAAKAJIIAFqIgNqQQJqIQQgA0ECaiECIAAoAlQhAyAAKAJQIQUDQCAAIAItAAAgA0EFdEHg/wFxcyIDNgJUIAUgA0EBdGoiBi8BACIHIAFB//8DcUcEQCAAKAJMIAEgACgCOHFB//8DcUEBdGogBzsBACAGIAE7AQALIAFBAWohASACQQFqIgIgBEkNAAsLC1sBAn8gACAAKAJIIAFqLQACIAAoAlRBBXRB4P8BcXMiAjYCVCABIAAoAlAgAkEBdGoiAy8BACICRwRAIAAoAkwgACgCOCABcUEBdGogAjsBACADIAE7AQALIAILEwAgAUEFdEHg/wFxIAJB/wFxcwsGACABEAYLLwAjAEEQayIAJAAgAEEMaiABIAJsEIwBIQEgACgCDCECIABBEGokAEEAIAIgARsLjAoCAX4CfyMAQfAAayIGJAACQAJAAkACQAJAAkACQAJAIAQODwABBwIEBQYGBgYGBgYGAwYLQn8hBQJAIAAgBkHkAGpCDBARIgNCf1cEQCABBEAgASAAKAIMNgIAIAEgACgCEDYCBAsMAQsCQCADQgxSBEAgAQRAIAFBADYCBCABQRE2AgALDAELIAEoAhQhBEEAIQJCASEFA0AgBkHkAGogAmoiAiACLQAAIARB/f8DcSICQQJyIAJBA3NsQQh2cyICOgAAIAYgAjoAKCABAn8gASgCDEF/cyECQQAgBkEoaiIERQ0AGiACIARBAUHUgAEoAgARAAALQX9zIgI2AgwgASABKAIQIAJB/wFxakGFiKLAAGxBAWoiAjYCECAGIAJBGHY6ACggAQJ/IAEoAhRBf3MhAkEAIAZBKGoiBEUNABogAiAEQQFB1IABKAIAEQAAC0F/cyIENgIUIAVCDFIEQCAFpyECIAVCAXwhBQwBCwtCACEFIAAgBkEoahAhQQBIDQEgBigCUCEAIwBBEGsiAiQAIAIgADYCDCAGAn8gAkEMahCNASIARQRAIAZBITsBJEEADAELAn8gACgCFCIEQdAATgRAIARBCXQMAQsgAEHQADYCFEGAwAILIQQgBiAAKAIMIAQgACgCEEEFdGpqQaDAAWo7ASQgACgCBEEFdCAAKAIIQQt0aiAAKAIAQQF2ags7ASYgAkEQaiQAIAYtAG8iACAGLQBXRg0BIAYtACcgAEYNASABBEAgAUEANgIEIAFBGzYCAAsLQn8hBQsgBkHwAGokACAFDwtCfyEFIAAgAiADEBEiA0J/VwRAIAEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwGCyMAQRBrIgAkAAJAIANQDQAgASgCFCEEIAJFBEBCASEFA0AgACACIAdqLQAAIARB/f8DcSIEQQJyIARBA3NsQQh2czoADyABAn8gASgCDEF/cyEEQQAgAEEPaiIHRQ0AGiAEIAdBAUHUgAEoAgARAAALQX9zIgQ2AgwgASABKAIQIARB/wFxakGFiKLAAGxBAWoiBDYCECAAIARBGHY6AA8gAQJ/IAEoAhRBf3MhBEEAIABBD2oiB0UNABogBCAHQQFB1IABKAIAEQAAC0F/cyIENgIUIAMgBVENAiAFpyEHIAVCAXwhBQwACwALQgEhBQNAIAAgAiAHai0AACAEQf3/A3EiBEECciAEQQNzbEEIdnMiBDoADyACIAdqIAQ6AAAgAQJ/IAEoAgxBf3MhBEEAIABBD2oiB0UNABogBCAHQQFB1IABKAIAEQAAC0F/cyIENgIMIAEgASgCECAEQf8BcWpBhYiiwABsQQFqIgQ2AhAgACAEQRh2OgAPIAECfyABKAIUQX9zIQRBACAAQQ9qIgdFDQAaIAQgB0EBQdSAASgCABEAAAtBf3MiBDYCFCADIAVRDQEgBachByAFQgF8IQUMAAsACyAAQRBqJAAgAyEFDAULIAJBADsBMiACIAIpAwAiA0KAAYQ3AwAgA0IIg1ANBCACIAIpAyBCDH03AyAMBAsgBkKFgICAcDcDECAGQoOAgIDAADcDCCAGQoGAgIAgNwMAQQAgBhAkIQUMAwsgA0IIWgR+IAIgASgCADYCACACIAEoAgQ2AgRCCAVCfwshBQwCCyABEAYMAQsgAQRAIAFBADYCBCABQRI2AgALQn8hBQsgBkHwAGokACAFC60DAgJ/An4jAEEQayIGJAACQAJAAkAgBEUNACABRQ0AIAJBAUYNAQtBACEDIABBCGoiAARAIABBADYCBCAAQRI2AgALDAELIANBAXEEQEEAIQMgAEEIaiIABEAgAEEANgIEIABBGDYCAAsMAQtBGBAJIgVFBEBBACEDIABBCGoiAARAIABBADYCBCAAQQ42AgALDAELIAVBADYCCCAFQgA3AgAgBUGQ8dmiAzYCFCAFQvis0ZGR8dmiIzcCDAJAIAQQIiICRQ0AIAKtIQhBACEDQYfTru5+IQJCASEHA0AgBiADIARqLQAAOgAPIAUgBkEPaiIDBH8gAiADQQFB1IABKAIAEQAABUEAC0F/cyICNgIMIAUgBSgCECACQf8BcWpBhYiiwABsQQFqIgI2AhAgBiACQRh2OgAPIAUCfyAFKAIUQX9zIQJBACAGQQ9qIgNFDQAaIAIgA0EBQdSAASgCABEAAAtBf3M2AhQgByAIUQ0BIAUoAgxBf3MhAiAHpyEDIAdCAXwhBwwACwALIAAgAUElIAUQQiIDDQAgBRAGQQAhAwsgBkEQaiQAIAMLnRoCBn4FfyMAQdAAayILJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDhQFBhULAwQJDgACCBAKDw0HEQERDBELAkBByAAQCSIBBEAgAUIANwMAIAFCADcDMCABQQA2AiggAUIANwMgIAFCADcDGCABQgA3AxAgAUIANwMIIAFCADcDOCABQQgQCSIDNgIEIAMNASABEAYgAARAIABBADYCBCAAQQ42AgALCyAAQQA2AhQMFAsgA0IANwMAIAAgATYCFCABQUBrQgA3AwAgAUIANwM4DBQLAkACQCACUARAQcgAEAkiA0UNFCADQgA3AwAgA0IANwMwIANBADYCKCADQgA3AyAgA0IANwMYIANCADcDECADQgA3AwggA0IANwM4IANBCBAJIgE2AgQgAQ0BIAMQBiAABEAgAEEANgIEIABBDjYCAAsMFAsgAiAAKAIQIgEpAzBWBEAgAARAIABBADYCBCAAQRI2AgALDBQLIAEoAigEQCAABEAgAEEANgIEIABBHTYCAAsMFAsgASgCBCEDAkAgASkDCCIGQgF9IgdQDQADQAJAIAIgAyAHIAR9QgGIIAR8IgWnQQN0aikDAFQEQCAFQgF9IQcMAQsgBSAGUQRAIAYhBQwDCyADIAVCAXwiBKdBA3RqKQMAIAJWDQILIAQhBSAEIAdUDQALCwJAIAIgAyAFpyIKQQN0aikDAH0iBFBFBEAgASgCACIDIApBBHRqKQMIIQcMAQsgASgCACIDIAVCAX0iBadBBHRqKQMIIgchBAsgAiAHIAR9VARAIAAEQCAAQQA2AgQgAEEcNgIACwwUCyADIAVCAXwiBUEAIAAQiQEiA0UNEyADKAIAIAMoAggiCkEEdGpBCGsgBDcDACADKAIEIApBA3RqIAI3AwAgAyACNwMwIAMgASkDGCIGIAMpAwgiBEIBfSIHIAYgB1QbNwMYIAEgAzYCKCADIAE2AiggASAENwMgIAMgBTcDIAwBCyABQgA3AwALIAAgAzYCFCADIAQ3A0AgAyACNwM4QgAhBAwTCyAAKAIQIgEEQAJAIAEoAigiA0UEQCABKQMYIQIMAQsgA0EANgIoIAEoAihCADcDICABIAEpAxgiAiABKQMgIgUgAiAFVhsiAjcDGAsgASkDCCACVgRAA0AgASgCACACp0EEdGooAgAQBiACQgF8IgIgASkDCFQNAAsLIAEoAgAQBiABKAIEEAYgARAGCyAAKAIUIQEgAEEANgIUIAAgATYCEAwSCyACQghaBH4gASAAKAIANgIAIAEgACgCBDYCBEIIBUJ/CyEEDBELIAAoAhAiAQRAAkAgASgCKCIDRQRAIAEpAxghAgwBCyADQQA2AiggASgCKEIANwMgIAEgASkDGCICIAEpAyAiBSACIAVWGyICNwMYCyABKQMIIAJWBEADQCABKAIAIAKnQQR0aigCABAGIAJCAXwiAiABKQMIVA0ACwsgASgCABAGIAEoAgQQBiABEAYLIAAoAhQiAQRAAkAgASgCKCIDRQRAIAEpAxghAgwBCyADQQA2AiggASgCKEIANwMgIAEgASkDGCICIAEpAyAiBSACIAVWGyICNwMYCyABKQMIIAJWBEADQCABKAIAIAKnQQR0aigCABAGIAJCAXwiAiABKQMIVA0ACwsgASgCABAGIAEoAgQQBiABEAYLIAAQBgwQCyAAKAIQIgBCADcDOCAAQUBrQgA3AwAMDwsgAkJ/VwRAIAAEQCAAQQA2AgQgAEESNgIACwwOCyACIAAoAhAiAykDMCADKQM4IgZ9IgUgAiAFVBsiBVANDiABIAMpA0AiB6ciAEEEdCIBIAMoAgBqIgooAgAgBiADKAIEIABBA3RqKQMAfSICp2ogBSAKKQMIIAJ9IgYgBSAGVBsiBKcQByEKIAcgBCADKAIAIgAgAWopAwggAn1RrXwhAiAFIAZWBEADQCAKIASnaiAAIAKnQQR0IgFqIgAoAgAgBSAEfSIGIAApAwgiByAGIAdUGyIGpxAHGiACIAYgAygCACIAIAFqKQMIUa18IQIgBSAEIAZ8IgRWDQALCyADIAI3A0AgAyADKQM4IAR8NwM4DA4LQn8hBEHIABAJIgNFDQ0gA0IANwMAIANCADcDMCADQQA2AiggA0IANwMgIANCADcDGCADQgA3AxAgA0IANwMIIANCADcDOCADQQgQCSIBNgIEIAFFBEAgAxAGIAAEQCAAQQA2AgQgAEEONgIACwwOCyABQgA3AwAgACgCECIBBEACQCABKAIoIgpFBEAgASkDGCEEDAELIApBADYCKCABKAIoQgA3AyAgASABKQMYIgIgASkDICIFIAIgBVYbIgQ3AxgLIAEpAwggBFYEQANAIAEoAgAgBKdBBHRqKAIAEAYgBEIBfCIEIAEpAwhUDQALCyABKAIAEAYgASgCBBAGIAEQBgsgACADNgIQQgAhBAwNCyAAKAIUIgEEQAJAIAEoAigiA0UEQCABKQMYIQIMAQsgA0EANgIoIAEoAihCADcDICABIAEpAxgiAiABKQMgIgUgAiAFVhsiAjcDGAsgASkDCCACVgRAA0AgASgCACACp0EEdGooAgAQBiACQgF8IgIgASkDCFQNAAsLIAEoAgAQBiABKAIEEAYgARAGCyAAQQA2AhQMDAsgACgCECIDKQM4IAMpAzAgASACIAAQRCIHQgBTDQogAyAHNwM4AkAgAykDCCIGQgF9IgJQDQAgAygCBCEAA0ACQCAHIAAgAiAEfUIBiCAEfCIFp0EDdGopAwBUBEAgBUIBfSECDAELIAUgBlEEQCAGIQUMAwsgACAFQgF8IgSnQQN0aikDACAHVg0CCyAEIQUgAiAEVg0ACwsgAyAFNwNAQgAhBAwLCyAAKAIUIgMpAzggAykDMCABIAIgABBEIgdCAFMNCSADIAc3AzgCQCADKQMIIgZCAX0iAlANACADKAIEIQADQAJAIAcgACACIAR9QgGIIAR8IgWnQQN0aikDAFQEQCAFQgF9IQIMAQsgBSAGUQRAIAYhBQwDCyAAIAVCAXwiBKdBA3RqKQMAIAdWDQILIAQhBSACIARWDQALCyADIAU3A0BCACEEDAoLIAJCN1gEQCAABEAgAEEANgIEIABBEjYCAAsMCQsgARAqIAEgACgCDDYCKCAAKAIQKQMwIQIgAUEANgIwIAEgAjcDICABIAI3AxggAULcATcDAEI4IQQMCQsgACABKAIANgIMDAgLIAtBQGtBfzYCACALQouAgICwAjcDOCALQoyAgIDQATcDMCALQo+AgICgATcDKCALQpGAgICQATcDICALQoeAgICAATcDGCALQoWAgIDgADcDECALQoOAgIDAADcDCCALQoGAgIAgNwMAQQAgCxAkIQQMBwsgACgCECkDOCIEQn9VDQYgAARAIABBPTYCBCAAQR42AgALDAULIAAoAhQpAzgiBEJ/VQ0FIAAEQCAAQT02AgQgAEEeNgIACwwEC0J/IQQgAkJ/VwRAIAAEQCAAQQA2AgQgAEESNgIACwwFCyACIAAoAhQiAykDOCACfCIFQv//A3wiBFYEQCAABEAgAEEANgIEIABBEjYCAAsMBAsCQCAFIAMoAgQiCiADKQMIIganQQN0aikDACIHWA0AAkAgBCAHfUIQiCAGfCIIIAMpAxAiCVgNAEIQIAkgCVAbIQUDQCAFIgRCAYYhBSAEIAhUDQALIAQgCVQNACADKAIAIASnIgpBBHQQNCIMRQ0DIAMgDDYCACADKAIEIApBA3RBCGoQNCIKRQ0DIAMgBDcDECADIAo2AgQgAykDCCEGCyAGIAhaDQAgAygCACEMA0AgDCAGp0EEdGoiDUGAgAQQCSIONgIAIA5FBEAgAARAIABBADYCBCAAQQ42AgALDAYLIA1CgIAENwMIIAMgBkIBfCIFNwMIIAogBadBA3RqIAdCgIAEfCIHNwMAIAMpAwgiBiAIVA0ACwsgAykDQCEFIAMpAzghBwJAIAJQBEBCACEEDAELIAWnIgBBBHQiDCADKAIAaiINKAIAIAcgCiAAQQN0aikDAH0iBqdqIAEgAiANKQMIIAZ9IgcgAiAHVBsiBKcQBxogBSAEIAMoAgAiACAMaikDCCAGfVGtfCEFIAIgB1YEQANAIAAgBadBBHQiCmoiACgCACABIASnaiACIAR9IgYgACkDCCIHIAYgB1QbIganEAcaIAUgBiADKAIAIgAgCmopAwhRrXwhBSAEIAZ8IgQgAlQNAAsLIAMpAzghBwsgAyAFNwNAIAMgBCAHfCICNwM4IAIgAykDMFgNBCADIAI3AzAMBAsgAARAIABBADYCBCAAQRw2AgALDAILIAAEQCAAQQA2AgQgAEEONgIACyAABEAgAEEANgIEIABBDjYCAAsMAQsgAEEANgIUC0J/IQQLIAtB0ABqJAAgBAtIAQF/IABCADcCBCAAIAE2AgACQCABQQBIDQBBsBMoAgAgAUwNACABQQJ0QcATaigCAEEBRw0AQYSEASgCACECCyAAIAI2AgQLDgAgAkGx893xeWxBEHYLvgEAIwBBEGsiACQAIABBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAQRBqJAAgAkGx893xeWxBEHYLuQEBAX8jAEEQayIBJAAgAUEAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAQjgEgAUEQaiQAC78BAQF/IwBBEGsiAiQAIAJBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAIAEQkAEhACACQRBqJAAgAAu+AQEBfyMAQRBrIgIkACACQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgACABEFohACACQRBqJAAgAAu+AQEBfyMAQRBrIgIkACACQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgACABEFshACACQRBqJAAgAAu9AQEBfyMAQRBrIgMkACADQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgACABIAIQjwEgA0EQaiQAC4UBAgR/AX4jAEEQayIBJAACQCAAKQMwUARADAELA0ACQCAAIAVBACABQQ9qIAFBCGoQZiIEQX9GDQAgAS0AD0EDRw0AIAIgASgCCEGAgICAf3FBgICAgHpGaiECC0F/IQMgBEF/Rg0BIAIhAyAFQgF8IgUgACkDMFQNAAsLIAFBEGokACADCwuMdSUAQYAIC7ELaW5zdWZmaWNpZW50IG1lbW9yeQBuZWVkIGRpY3Rpb25hcnkALSsgICAwWDB4AFppcCBhcmNoaXZlIGluY29uc2lzdGVudABJbnZhbGlkIGFyZ3VtZW50AGludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRlZABPcGVyYXRpb24gbm90IHN1cHBvcnRlZABFbmNyeXB0aW9uIG1ldGhvZCBub3Qgc3VwcG9ydGVkAENvbXByZXNzaW9uIG1ldGhvZCBub3Qgc3VwcG9ydGVkAEVudHJ5IGhhcyBiZWVuIGRlbGV0ZWQAQ29udGFpbmluZyB6aXAgYXJjaGl2ZSB3YXMgY2xvc2VkAENsb3NpbmcgemlwIGFyY2hpdmUgZmFpbGVkAFJlbmFtaW5nIHRlbXBvcmFyeSBmaWxlIGZhaWxlZABFbnRyeSBoYXMgYmVlbiBjaGFuZ2VkAE5vIHBhc3N3b3JkIHByb3ZpZGVkAFdyb25nIHBhc3N3b3JkIHByb3ZpZGVkAFVua25vd24gZXJyb3IgJWQAQUUAKG51bGwpADogAFBLBgcAUEsGBgBQSwUGAFBLAwQAUEsBAgAAAAA/BQAAwAcAAJMIAAB4CAAAbwUAAJEFAAB6BQAAsgUAAFYIAAAbBwAA1gQAAAsHAADqBgAAnAUAAMgGAACyCAAAHggAACgHAABHBAAAoAYAAGAFAAAuBAAAPgcAAD8IAAD+BwAAjgYAAMkIAADeCAAA5gcAALIGAABVBQAAqAcAACAAQcgTCxEBAAAAAQAAAAEAAAABAAAAAQBB7BMLCQEAAAABAAAAAgBBmBQLAQEAQbgUCwEBAEHSFAukLDomOyZlJmYmYyZgJiIg2CXLJdklQiZAJmomayY8JrolxCWVITwgtgCnAKwlqCGRIZMhkiGQIR8ilCGyJbwlIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AAIjxwD8AOkA4gDkAOAA5QDnAOoA6wDoAO8A7gDsAMQAxQDJAOYAxgD0APYA8gD7APkA/wDWANwAogCjAKUApyCSAeEA7QDzAPoA8QDRAKoAugC/ABAjrAC9ALwAoQCrALsAkSWSJZMlAiUkJWElYiVWJVUlYyVRJVclXSVcJVslECUUJTQlLCUcJQAlPCVeJV8lWiVUJWklZiVgJVAlbCVnJWglZCVlJVklWCVSJVMlayVqJRglDCWIJYQljCWQJYAlsQPfAJMDwAOjA8MDtQDEA6YDmAOpA7QDHiLGA7UDKSJhIrEAZSJkIiAjISP3AEgisAAZIrcAGiJ/ILIAoCWgAAAAAACWMAd3LGEO7rpRCZkZxG0Hj/RqcDWlY+mjlWSeMojbDqS43Hke6dXgiNnSlytMtgm9fLF+By2455Edv5BkELcd8iCwakhxufPeQb6EfdTaGuvk3W1RtdT0x4XTg1aYbBPAqGtkevli/ezJZYpPXAEU2WwGY2M9D/r1DQiNyCBuO14QaUzkQWDVcnFnotHkAzxH1ARL/YUN0mu1CqX6qLU1bJiyQtbJu9tA+bys42zYMnVc30XPDdbcWT3Rq6ww2SY6AN5RgFHXyBZh0L+19LQhI8SzVpmVus8Ppb24nrgCKAiIBV+y2QzGJOkLsYd8by8RTGhYqx1hwT0tZraQQdx2BnHbAbwg0pgqENXviYWxcR+1tgal5L+fM9S46KLJB3g0+QAPjqgJlhiYDuG7DWp/LT1tCJdsZJEBXGPm9FFra2JhbBzYMGWFTgBi8u2VBmx7pQEbwfQIglfED/XG2bBlUOm3Euq4vot8iLn83x3dYkkt2hXzfNOMZUzU+1hhsk3OUbU6dAC8o+Iwu9RBpd9K15XYPW3E0aT79NbTaulpQ/zZbjRGiGet0Lhg2nMtBETlHQMzX0wKqsl8Dd08cQVQqkECJxAQC76GIAzJJbVoV7OFbyAJ1Ga5n+Rhzg753l6YydkpIpjQsLSo18cXPbNZgQ20LjtcvbetbLrAIIO47bazv5oM4rYDmtKxdDlH1eqvd9KdFSbbBIMW3HMSC2PjhDtklD5qbQ2oWmp6C88O5J3/CZMnrgAKsZ4HfUSTD/DSowiHaPIBHv7CBmldV2L3y2dlgHE2bBnnBmtudhvU/uAr04laetoQzErdZ2/fufn5776OQ763F9WOsGDoo9bWfpPRocTC2DhS8t9P8We70WdXvKbdBrU/SzaySNorDdhMGwqv9koDNmB6BEHD72DfVd9nqO+ObjF5vmlGjLNhyxqDZryg0m8lNuJoUpV3DMwDRwu7uRYCIi8mBVW+O7rFKAu9spJatCsEarNcp//XwjHP0LWLntksHa7eW7DCZJsm8mPsnKNqdQqTbQKpBgmcPzYO64VnB3ITVwAFgkq/lRR6uOKuK7F7OBu2DJuO0pINvtXlt+/cfCHf2wvU0tOGQuLU8fiz3Whug9ofzRa+gVsmufbhd7Bvd0e3GOZaCIhwag//yjsGZlwLARH/nmWPaa5i+NP/a2FFz2wWeOIKoO7SDddUgwROwrMDOWEmZ6f3FmDQTUdpSdt3bj5KatGu3FrW2WYL30DwO9g3U668qcWeu95/z7JH6f+1MBzyvb2KwrrKMJOzU6ajtCQFNtC6kwbXzSlX3lS/Z9kjLnpms7hKYcQCG2hdlCtvKje+C7ShjgzDG98FWo3vAi0AAAAARjtnZYx2zsrKTamvWevtTh/QiivVnSOEk6ZE4bLW25307bz4PqAVV3ibcjLrPTbTrQZRtmdL+BkhcJ98JavG4GOQoYWp3Qgq7+ZvT3xAK646e0zL8DblZLYNggGXfR190UZ6GBsL07ddMLTSzpbwM4itl1ZC4D75BNtZnAtQ/BpNa5t/hyYy0MEdVbVSuxFUFIB2Md7N356Y9rj7uYYnh/+9QOI18OlNc8uOKOBtysmmVq2sbBsEAyogY2Yu+zr6aMBdn6KN9DDktpNVdxDXtDErsNH7Zhl+vV1+G5wt4WfaFoYCEFsvrVZgSMjFxgwpg/1rTEmwwuMPi6WGFqD4NVCbn1Ca1jb/3O1Rmk9LFXsJcHIewz3bsYUGvNSkdiOo4k1EzSgA7WJuO4oH/Z3O5rumqYNx6wAsN9BnSTMLPtV1MFmwv33wH/lGl3pq4NObLNu0/uaWHVGgrXo0gd3lSMfmgi0NqyuCS5BM59g2CAaeDW9jVEDGzBJ7oakd8AQvW8tjSpGGyuXXva2ARBvpYQIgjgTIbSerjlZAzq8m37LpHbjXI1AReGVrdh32zTL8sPZVmXq7/DY8gJtTOFvCz35gpaq0LQwF8hZrYGGwL4Eni0jk7cbhS6v9hi6KjRlSzLZ+Nwb715hAwLD902b0HJVdk3lfEDrWGStdsyxA8Wtqe5YOoDY/oeYNWMR1qxwlM5B7QPnd0u+/5rWKnpYq9titTZMS4OQ8VNuDWcd9x7iBRqDdSwsJcg0wbhcJ6zeLT9BQ7oWd+UHDpp4kUADaxRY7vaDcdhQPmk1zars97Bb9BotzN0si3HFwRbni1gFYpO1mPW6gz5Iom6j3JxANcWErahSrZsO77V2k3n774D84wIda8o0u9bS2SZCVxtbs0/2xiRmwGCZfi39DzC07oooWXMdAW/VoBmCSDQK7y5FEgKz0js0FW8j2Yj5bUCbfHWtButcm6BWRHY9wsG0QDPZWd2k8G97GeiC5o+mG/UKvvZonZfAziCPLVO064AlefNtuO7aWx5TwraDxYwvkECUwg3XvfSraqUZNv4g20sPODbWmBEAcCUJ7e2zR3T+Nl+ZY6F2r8UcbkJYiH0vPvllwqNuTPQF01QZmEUagIvAAm0WVytbsOozti1+tnRQj66ZzRiHr2uln0L2M9Hb5bbJNngh4ADenPjtQwjGw9UR3i5IhvcY7jvv9XOtoWxgKLmB/b+Qt1sCiFrGlg2Yu2cVdSbwPEOATSSuHdtqNw5ectqTyVvsNXRDAajgUGzOkUiBUwZht/W7eVpoLTfDe6gvLuY/BhhAgh713RabN6Dng9o9cKrsm82yAQZb/JgV3uR1iEnNQy701a6zYAAAAAFiA4tfxBrR0qYZWo+INaOm6jYo+EwvcnUuLPkqFHaEJ3Z1D3nQbFX0sm/eqZxDJ4D+QKzeWFn2UzpafQwo7QhNSu6DE+z32Z6O9FLDoNir6sLbILRkwno5BsHxZjybjGtemAc1+IFduJqC1uW0ri/M1q2kknC0/h8St3VAUdoQmTPZm8eVwMFK98NKF9nvsz677DhgHfVi7X/26bJFrJS/J68f4YG2RWzjtc4xzZk3GK+avEYJg+bLa4BtlHk3GNUbNJOLvS3JBt8uQlvxArtykwEwLDUYaqFXG+H+bUGc8w9CF62pW00gy1jGfeV0P1SHd7QKIW7uh0NtZdijsCE1wbOqa2eq8OYFqXu7K4WCkkmGCczvn1NBjZzYHrfGpRPVxS5Nc9x0wBHf/50/8wa0XfCN6vvp12eZ6lw4i10peeleoidPR/iqLURz9wNoit5hawGAx3JbDaVx0FKfK61f/SgmAVsxfIw5MvfRFx4O+HUdhabTBN8rsQdUdPJqMa2QabrzNnDgflRzayN6X5IKGFwZVL5FQ9ncRsiG5hy1i4QfPtUiBmRYQAXvBW4pFiwMKp1yqjPH/8gwTKDahznhuISyvx6d6DJ8nmNvUrKaRjCxERiWqEuV9KvAys7xvces8jaZCutsFGjo50lGxB5gJMeVPoLez7Pg3UTtQ2BGaCFjzTaHepe75Xkc5stV5c+pVm6RD080HG1Mv0NXFsJONRVJEJMME53xD5jA3yNh6b0g6rcbObA6eTo7ZWuNTiQJjsV6r5ef982UFKrjuO2Dgbtm3SeiPFBFobcPf/vKAh34QVy74RvR2eKQjPfOaaWVzeL7M9S4dlHXMykSulbwcLndrtaghyO0owx+mo/1V/iMfglelSSEPJav2wbM0tZkz1mIwtYDBaDViFiO+XFx7Pr6L0rjoKIo4Cv9OldevFhU1eL+TY9vnE4EMrJi/RvQYXZFdngsyBR7p5cuIdqaTCJRxOo7C0mIOIAUphR5PcQX8mNiDqjuAA0jseDQZ1yC0+wCJMq2j0bJPdJo5cT7CuZPpaz/FSjO/J539KbjepalaCQwvDKpUr+59HyTQN0ekMuDuImRDtqKGlHIPW8Qqj7kTgwnvsNuJDWeQAjMtyILR+mEEh1k5hGWO9xL6za+SGBoGFE65XpSsbhUfkiRNn3Dz5BkmULyZxIdsQp3xNMJ/Jp1EKYXFxMtSjk/1GNbPF89/SUFsJ8mju+lfPPix394vGFmIjEDZalsLUlQRU9K2xvpU4GWi1AKyZnnf4j75PTWXf2uWz/+JQYR0twvc9FXcdXIDfy3y4ajjZH7ru+ScPBJiyp9K4ihIAWkWAlnp9NXwb6J2qO9AoQAAAADhtlLvg2vUBWLdhuoG16gL52H65IW8fA5kCi7hDK5RF+0YA/iPxYUSbnPX/Qp5+Rzrz6vziRItGWikf/YYXKMu+erxwZs3dyt6gSXEHosLJf89Wcqd4N8gfFaNzxTy8jn1RKDWl5kmPHYvdNMSJVoy85MI3ZFOjjdw+NzYMLhGXdEOFLKz05JYUmXAtzZv7lbX2by5tQQ6U1SyaLw8FhdK3aBFpb99w09ey5GgOsG/Qdt37a65qmtEWBw5qyjk5XPJUrecq48xdko5Y5kuM014z4Ufl61YmX1M7suSJEq0ZMX85ounIWBhRpcyjiKdHG/DK06AofbIakBAmoVgcI26gcbfVeMbWb8CrQtQZqclsYcRd17lzPG0BHqjW2ze3K2NaI5C77UIqA4DWkdqCXSmi78mSelioKMI1PJMeCwulJmafHv7R/qRGvGofn77hp+fTdRw/ZBSmhwmAHV0gn+DlTQtbPfpq4YWX/lpclXXiJPjhWfxPgONEIhRYlDIy+exfpkI06Mf4jIVTQ1WH2Pst6kxA9V0t+k0wuUGXGaa8L3QyB/fDU71PrscGlqxMvu7B2AU2drm/jhstBFIlGjJqSI6Jsv/vMwqSe4jTkPAwq/1ki3NKBTHLJ5GKEQ6Od6ljGsxx1Ht2ybnvzRC7ZHVo1vDOsGGRdAgMBc/geZrrmBQOUECjb+r4zvtRIcxw6Vmh5FKBFoXoOXsRU+NSDq5bP5oVg4j7rzvlbxTi5+SsmopwF0I9Ea36UIUWJm6yIB4DJpvGtEchftnTmqfbWCLftsyZBwGtI79sOZhlRSZl3Siy3gWf02S98kffZPDMZxydWNzEKjlmfEet3axXi3zUOh/HDI1+fbTg6sZt4mF+FY/1xc04lH91VQDEr3wfORcRi4LPpuo4d8t+g67J9TvWpGGADhMAOrZ+lIFqQKO3Ui03DIqaVrYy98IN6/VJtZOY3Q5LL7y080IoDylrN/KRBqNJSbHC8/HcVkgo3t3wULNJS4gEKPEwabxK+GW5hQAILT7Yv0yEYNLYP7nQU4fBvcc8GQqmhqFnMj17Ti3AwyO5exuU2MGj+Ux6evvHwgKWU3naITLDYkymeL5ykU6GHwX1XqhkT+bF8PQ/x3tMR6rv958djk0ncBr2/VkFC0U0kbCdg/AKJe5ksfzs7wmEgXuyXDYaCORbjrM0S6gSTCY8qZSRXRMs/Mmo9f5CEI2T1qtVJLcR7UkjqjdgPFePDajsV7rJVu/XXe021dZVTrhC7pYPI1QuYrfv8lyA2coxFGIShnXYquvhY3PpatsLhP5g0zOf2mteC2GxdxScCRqAJ9Gt4Z1pwHUmsML+nsivaiUQGAufqHWfJEAAAAAQ8umh8eQPNSEW5pTzycIc4zsrvQItzSnS3ySIJ5PEObdhLZhWd8sMhoUirVRaBiVEqO+Epb4JEHVM4LGfZlRFz5S95C6CW3D+cLLRLK+WWTxdf/jdS5lsDblwzfj1kHxoB3ndiRGfSVnjduiLPFJgm867wXrYXVWqKrT0foyoy65+QWpPaKf+n5pOX01Fatddt4N2vKFl4mxTjEOZH2zyCe2FU+j7Y8c4CYpm6tau7vokR08bMqHby8BIeiHq/I5xGBUvkA7zu0D8GhqSIz6SgtHXM2PHMaezNdgGRnk4t9aL0RY3nTeC52/eIzWw+qslQhMKxFT1nhSmHD/9GVGXbeu4Noz9XqJcD7cDjtCTi54ieip/NJy+r8Z1H1qKla7KeHwPK26am/ucczopQ1eyObG+E9inWIcIVbEm4n8F0rKN7HNTmwrng2njRlG2x85BRC5voFLI+3CgIVqF7MHrFR4oSvQIzt4k+id/9iUD9+bX6lYHwQzC1zPlYwOV+VzTZxD9MnH2aeKDH8gwXDtAIK7S4cG4NHURSt3U5AY9ZXT01MSV4jJQRRDb8ZfP/3mHPRbYZivwTLbZGe1c860ZDAFEuO0Xoiw95UuN7zpvBf/IhqQe3mAwziyJkTtgaSCrkoCBSoRmFZp2j7RIqas8WFtCnblNpAlpv02oujLjLqrACo9L1uwbmyQFukn7ITJZCciTuB8uB2jtx6adoScXDVPOtuxFKCI8t8GD7mjlC/6aDKofjOo+z34DnyVUt2t1pl7KlLC4XkRCUf+WnXV3hm+c1md5ekK3i5PjQsdzUtI1mvMzI3xn49GVxjEOsU4h/FjvwOq+exAYV9rEvkvlFEyiRPVaRNAlqK1x93eJ+eeFYFgGk4bM1mFvbSMtj9yz32Z9UsmA6YI7aUhQ5E3AQBakYaEAQvVx8qtUm9gfoMsq9gEqPBCV+s75NCgR3bw44zQd2fXSiQkHOyj8S9uZbLkyOI2v1KxdXT0Nj4IZhZ9w8CR+ZhawrpT/EUcrsrnX2VsYNs+9jOY9VC004nClJBCZBMUGf5AV9JYx4Lh2gHBKnyGRXHm1Qa6QFJNxtJyDg109YpW7qbJnUghYTeb8CL8PXemp6ck5WwBo64Qk4Pt2zUEaYCvVypLCdD/eIsWvLMtkTjot8J7IxFFMF+DZXOUJeL3z7+xtAQZNuacacmlV89OIQxVHWLH85opu2G6anDHPe4rXW6t4PvpeNN5LzsY36i/Q0X7/IjjfLf0cVz0P9fbcGRNiDOv6w+bBTje2M6eWVyVBAofXqKNVCIwrRfpliqTsgx50Hmq/gVKKDhGgY6/wtoU7IERsmvKbSBLiaaGzA39HJ9ONroYFAQAAJ0HAAAsCQAAhgUAAEgFAACnBQAAAAQAADIFAAC8BQAALAkAQYDBAAv3CQwACACMAAgATAAIAMwACAAsAAgArAAIAGwACADsAAgAHAAIAJwACABcAAgA3AAIADwACAC8AAgAfAAIAPwACAACAAgAggAIAEIACADCAAgAIgAIAKIACABiAAgA4gAIABIACACSAAgAUgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkAvwEJAH8ACQB/AQkA/wAJAP8BCQAAAAcAQAAHACAABwBgAAcAEAAHAFAABwAwAAcAcAAHAAgABwBIAAcAKAAHAGgABwAYAAcAWAAHADgABwB4AAcABAAHAEQABwAkAAcAZAAHABQABwBUAAcANAAHAHQABwADAAgAgwAIAEMACADDAAgAIwAIAKMACABjAAgA4wAIAAAABQAQAAUACAAFABgABQAEAAUAFAAFAAwABQAcAAUAAgAFABIABQAKAAUAGgAFAAYABQAWAAUADgAFAB4ABQABAAUAEQAFAAkABQAZAAUABQAFABUABQANAAUAHQAFAAMABQATAAUACwAFABsABQAHAAUAFwAFAEGBywAL7AYBAgMEBAUFBgYGBgcHBwcICAgICAgICAkJCQkJCQkJCgoKCgoKCgoKCgoKCgoKCgsLCwsLCwsLCwsLCwsLCwsMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8AABAREhITExQUFBQVFRUVFhYWFhYWFhYXFxcXFxcXFxgYGBgYGBgYGBgYGBgYGBgZGRkZGRkZGRkZGRkZGRkZGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhobGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAAECAwQFBgcICAkJCgoLCwwMDAwNDQ0NDg4ODg8PDw8QEBAQEBAQEBEREREREREREhISEhISEhITExMTExMTExQUFBQUFBQUFBQUFBQUFBQVFRUVFRUVFRUVFRUVFRUVFhYWFhYWFhYWFhYWFhYWFhcXFxcXFxcXFxcXFxcXFxcYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhobGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbHAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAQYTSAAutAQEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAgCAAAMApAAABAQAAHgEAAA8AAAAAJQAAQCoAAAAAAAAeAAAADwAAAAAAAADAKgAAAAAAABMAAAAHAEHg0wALTQEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAMAAAADAAAAAwAAAAQAAAAEAAAABAAAAAQAAAAFAAAABQAAAAUAAAAFAEHQ1AALZQEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAUAAAAGAAAABgAAAAcAAAAHAAAACAAAAAgAAAAJAAAACQAAAAoAAAAKAAAACwAAAAsAAAAMAAAADAAAAA0AAAANAEGA1gALIwIAAAADAAAABwAAAAAAAAAQERIACAcJBgoFCwQMAw0CDgEPAEHQ1gALTQEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAMAAAADAAAAAwAAAAQAAAAEAAAABAAAAAQAAAAFAAAABQAAAAUAAAAFAEHA1wALZQEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAUAAAAGAAAABgAAAAcAAAAHAAAACAAAAAgAAAAJAAAACQAAAAoAAAAKAAAACwAAAAsAAAAMAAAADAAAAA0AAAANAEG42AALASwAQcTYAAthLQAAAAQABAAIAAQALgAAAAQABgAQAAYALwAAAAQADAAgABgALwAAAAgAEAAgACAALwAAAAgAEACAAIAALwAAAAgAIACAAAABMAAAACAAgAACAQAEMAAAACAAAgECAQAQMABBsNkAC6UTAwAEAAUABgAHAAgACQAKAAsADQAPABEAEwAXABsAHwAjACsAMwA7AEMAUwBjAHMAgwCjAMMA4wACAQAAAAAAABAAEAAQABAAEAAQABAAEAARABEAEQARABIAEgASABIAEwATABMAEwAUABQAFAAUABUAFQAVABUAEABNAMoAAAABAAIAAwAEAAUABwAJAA0AEQAZACEAMQBBAGEAgQDBAAEBgQEBAgEDAQQBBgEIAQwBEAEYASABMAFAAWAAAAAAEAAQABAAEAARABEAEgASABMAEwAUABQAFQAVABYAFgAXABcAGAAYABkAGQAaABoAGwAbABwAHAAdAB0AQABAAGAHAAAACFAAAAgQABQIcwASBx8AAAhwAAAIMAAACcAAEAcKAAAIYAAACCAAAAmgAAAIAAAACIAAAAhAAAAJ4AAQBwYAAAhYAAAIGAAACZAAEwc7AAAIeAAACDgAAAnQABEHEQAACGgAAAgoAAAJsAAACAgAAAiIAAAISAAACfAAEAcEAAAIVAAACBQAFQjjABMHKwAACHQAAAg0AAAJyAARBw0AAAhkAAAIJAAACagAAAgEAAAIhAAACEQAAAnoABAHCAAACFwAAAgcAAAJmAAUB1MAAAh8AAAIPAAACdgAEgcXAAAIbAAACCwAAAm4AAAIDAAACIwAAAhMAAAJ+AAQBwMAAAhSAAAIEgAVCKMAEwcjAAAIcgAACDIAAAnEABEHCwAACGIAAAgiAAAJpAAACAIAAAiCAAAIQgAACeQAEAcHAAAIWgAACBoAAAmUABQHQwAACHoAAAg6AAAJ1AASBxMAAAhqAAAIKgAACbQAAAgKAAAIigAACEoAAAn0ABAHBQAACFYAAAgWAEAIAAATBzMAAAh2AAAINgAACcwAEQcPAAAIZgAACCYAAAmsAAAIBgAACIYAAAhGAAAJ7AAQBwkAAAheAAAIHgAACZwAFAdjAAAIfgAACD4AAAncABIHGwAACG4AAAguAAAJvAAACA4AAAiOAAAITgAACfwAYAcAAAAIUQAACBEAFQiDABIHHwAACHEAAAgxAAAJwgAQBwoAAAhhAAAIIQAACaIAAAgBAAAIgQAACEEAAAniABAHBgAACFkAAAgZAAAJkgATBzsAAAh5AAAIOQAACdIAEQcRAAAIaQAACCkAAAmyAAAICQAACIkAAAhJAAAJ8gAQBwQAAAhVAAAIFQAQCAIBEwcrAAAIdQAACDUAAAnKABEHDQAACGUAAAglAAAJqgAACAUAAAiFAAAIRQAACeoAEAcIAAAIXQAACB0AAAmaABQHUwAACH0AAAg9AAAJ2gASBxcAAAhtAAAILQAACboAAAgNAAAIjQAACE0AAAn6ABAHAwAACFMAAAgTABUIwwATByMAAAhzAAAIMwAACcYAEQcLAAAIYwAACCMAAAmmAAAIAwAACIMAAAhDAAAJ5gAQBwcAAAhbAAAIGwAACZYAFAdDAAAIewAACDsAAAnWABIHEwAACGsAAAgrAAAJtgAACAsAAAiLAAAISwAACfYAEAcFAAAIVwAACBcAQAgAABMHMwAACHcAAAg3AAAJzgARBw8AAAhnAAAIJwAACa4AAAgHAAAIhwAACEcAAAnuABAHCQAACF8AAAgfAAAJngAUB2MAAAh/AAAIPwAACd4AEgcbAAAIbwAACC8AAAm+AAAIDwAACI8AAAhPAAAJ/gBgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnBABAHCgAACGAAAAggAAAJoQAACAAAAAiAAAAIQAAACeEAEAcGAAAIWAAACBgAAAmRABMHOwAACHgAAAg4AAAJ0QARBxEAAAhoAAAIKAAACbEAAAgIAAAIiAAACEgAAAnxABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACckAEQcNAAAIZAAACCQAAAmpAAAIBAAACIQAAAhEAAAJ6QAQBwgAAAhcAAAIHAAACZkAFAdTAAAIfAAACDwAAAnZABIHFwAACGwAAAgsAAAJuQAACAwAAAiMAAAITAAACfkAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxQARBwsAAAhiAAAIIgAACaUAAAgCAAAIggAACEIAAAnlABAHBwAACFoAAAgaAAAJlQAUB0MAAAh6AAAIOgAACdUAEgcTAAAIagAACCoAAAm1AAAICgAACIoAAAhKAAAJ9QAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnNABEHDwAACGYAAAgmAAAJrQAACAYAAAiGAAAIRgAACe0AEAcJAAAIXgAACB4AAAmdABQHYwAACH4AAAg+AAAJ3QASBxsAAAhuAAAILgAACb0AAAgOAAAIjgAACE4AAAn9AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcMAEAcKAAAIYQAACCEAAAmjAAAIAQAACIEAAAhBAAAJ4wAQBwYAAAhZAAAIGQAACZMAEwc7AAAIeQAACDkAAAnTABEHEQAACGkAAAgpAAAJswAACAkAAAiJAAAISQAACfMAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJywARBw0AAAhlAAAIJQAACasAAAgFAAAIhQAACEUAAAnrABAHCAAACF0AAAgdAAAJmwAUB1MAAAh9AAAIPQAACdsAEgcXAAAIbQAACC0AAAm7AAAIDQAACI0AAAhNAAAJ+wAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnHABEHCwAACGMAAAgjAAAJpwAACAMAAAiDAAAIQwAACecAEAcHAAAIWwAACBsAAAmXABQHQwAACHsAAAg7AAAJ1wASBxMAAAhrAAAIKwAACbcAAAgLAAAIiwAACEsAAAn3ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc8AEQcPAAAIZwAACCcAAAmvAAAIBwAACIcAAAhHAAAJ7wAQBwkAAAhfAAAIHwAACZ8AFAdjAAAIfwAACD8AAAnfABIHGwAACG8AAAgvAAAJvwAACA8AAAiPAAAITwAACf8AEAUBABcFAQETBREAGwUBEBEFBQAZBQEEFQVBAB0FAUAQBQMAGAUBAhQFIQAcBQEgEgUJABoFAQgWBYEAQAUAABAFAgAXBYEBEwUZABsFARgRBQcAGQUBBhUFYQAdBQFgEAUEABgFAQMUBTEAHAUBMBIFDQAaBQEMFgXBAEAFAAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEHg7AALQREACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABAAkLCwAACQYLAAALAAYRAAAAERERAEGx7QALIQsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwBB6+0ACwEMAEH37QALFQwAAAAADAAAAAAJDAAAAAAADAAADABBpe4ACwEOAEGx7gALFQ0AAAAEDQAAAAAJDgAAAAAADgAADgBB3+4ACwEQAEHr7gALHg8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgBBou8ACw4SAAAAEhISAAAAAAAACQBB0+8ACwELAEHf7wALFQoAAAAACgAAAAAJCwAAAAAACwAACwBBjfAACwEMAEGZ8AALJwwAAAAADAAAAAAJDAAAAAAADAAADAAAMDEyMzQ1Njc4OUFCQ0RFRgBB5PAACwE+AEGL8QALBf//////AEHQ8QALVxkSRDsCPyxHFD0zMAobBkZLRTcPSQ6OFwNAHTxpKzYfSi0cASAlKSEIDBUWIi4QOD4LNDEYZHR1di9BCX85ESNDMkKJiosFBCYoJw0qHjWMBxpIkxOUlQBBsPIAC4oOSWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==";io(Si)||(Si=b(Si));function Ls(We){try{if(We==Si&&Ae)return new Uint8Array(Ae);var tt=ii(We);if(tt)return tt;if(T)return T(We);throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}catch(It){Ri(It)}}function so(We,tt){var It,nr,$;try{$=Ls(We),nr=new WebAssembly.Module($),It=new WebAssembly.Instance(nr,tt)}catch(Le){var me=Le.toString();throw te("failed to compile wasm module: "+me),(me.includes("imported Memory")||me.includes("memory import"))&&te("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),Le}return[It,nr]}function cc(){var We={a:Oa};function tt($,me){var Le=$.exports;r.asm=Le,we=r.asm.g,z(we.buffer),Z=r.asm.W,an(r.asm.h),Ns("wasm-instantiate")}if(Vn("wasm-instantiate"),r.instantiateWasm)try{var It=r.instantiateWasm(We,tt);return It}catch($){return te("Module.instantiateWasm callback failed with error: "+$),!1}var nr=so(Si,We);return tt(nr[0]),r.asm}function cu(We){return F.getFloat32(We,!0)}function ap(We){return F.getFloat64(We,!0)}function lp(We){return F.getInt16(We,!0)}function Ms(We){return F.getInt32(We,!0)}function Dn(We,tt){F.setInt32(We,tt,!0)}function oo(We){for(;We.length>0;){var tt=We.shift();if(typeof tt=="function"){tt(r);continue}var It=tt.func;typeof It=="number"?tt.arg===void 0?Z.get(It)():Z.get(It)(tt.arg):It(tt.arg===void 0?null:tt.arg)}}function Os(We,tt){var It=new Date(Ms((We>>2)*4)*1e3);Dn((tt>>2)*4,It.getUTCSeconds()),Dn((tt+4>>2)*4,It.getUTCMinutes()),Dn((tt+8>>2)*4,It.getUTCHours()),Dn((tt+12>>2)*4,It.getUTCDate()),Dn((tt+16>>2)*4,It.getUTCMonth()),Dn((tt+20>>2)*4,It.getUTCFullYear()-1900),Dn((tt+24>>2)*4,It.getUTCDay()),Dn((tt+36>>2)*4,0),Dn((tt+32>>2)*4,0);var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((tt+28>>2)*4,$),Os.GMTString||(Os.GMTString=lt("GMT")),Dn((tt+40>>2)*4,Os.GMTString),tt}function ml(We,tt){return Os(We,tt)}function yl(We,tt,It){Te.copyWithin(We,tt,tt+It)}function ao(We){try{return we.grow(We-be.byteLength+65535>>>16),z(we.buffer),1}catch{}}function Kn(We){var tt=Te.length;We=We>>>0;var It=2147483648;if(We>It)return!1;for(var nr=1;nr<=4;nr*=2){var $=tt*(1+.2/nr);$=Math.min($,We+100663296);var me=Math.min(It,Qe(Math.max(We,$),65536)),Le=ao(me);if(Le)return!0}return!1}function Mn(We){pe(We)}function Ni(We){var tt=Date.now()/1e3|0;return We&&Dn((We>>2)*4,tt),tt}function On(){if(On.called)return;On.called=!0;var We=new Date().getFullYear(),tt=new Date(We,0,1),It=new Date(We,6,1),nr=tt.getTimezoneOffset(),$=It.getTimezoneOffset(),me=Math.max(nr,$);Dn((ds()>>2)*4,me*60),Dn((gs()>>2)*4,Number(nr!=$));function Le(Zr){var qi=Zr.toTimeString().match(/\(([A-Za-z ]+)\)$/);return qi?qi[1]:"GMT"}var ft=Le(tt),pt=Le(It),Rt=lt(ft),er=lt(pt);$>2)*4,Rt),Dn((wi()+4>>2)*4,er)):(Dn((wi()>>2)*4,er),Dn((wi()+4>>2)*4,Rt))}function _i(We){On();var tt=Date.UTC(Ms((We+20>>2)*4)+1900,Ms((We+16>>2)*4),Ms((We+12>>2)*4),Ms((We+8>>2)*4),Ms((We+4>>2)*4),Ms((We>>2)*4),0),It=new Date(tt);Dn((We+24>>2)*4,It.getUTCDay());var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((We+28>>2)*4,$),It.getTime()/1e3|0}var tr=typeof atob=="function"?atob:function(We){var tt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",It="",nr,$,me,Le,ft,pt,Rt,er=0;We=We.replace(/[^A-Za-z0-9\+\/\=]/g,"");do Le=tt.indexOf(We.charAt(er++)),ft=tt.indexOf(We.charAt(er++)),pt=tt.indexOf(We.charAt(er++)),Rt=tt.indexOf(We.charAt(er++)),nr=Le<<2|ft>>4,$=(ft&15)<<4|pt>>2,me=(pt&3)<<6|Rt,It=It+String.fromCharCode(nr),pt!==64&&(It=It+String.fromCharCode($)),Rt!==64&&(It=It+String.fromCharCode(me));while(er0||(dt(),mr>0))return;function tt(){Pn||(Pn=!0,r.calledRun=!0,!Pe&&(jt(),o(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),$t()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),tt()},1)):tt()}if(r.run=ys,r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return ys(),e}}();typeof Fx=="object"&&typeof nU=="object"?nU.exports=rU:typeof define=="function"&&define.amd?define([],function(){return rU}):typeof Fx=="object"&&(Fx.createModule=rU)});var Lf,Nle,Lle,Mle=Et(()=>{Lf=["number","number"],Nle=(ee=>(ee[ee.ZIP_ER_OK=0]="ZIP_ER_OK",ee[ee.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",ee[ee.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",ee[ee.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",ee[ee.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",ee[ee.ZIP_ER_READ=5]="ZIP_ER_READ",ee[ee.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",ee[ee.ZIP_ER_CRC=7]="ZIP_ER_CRC",ee[ee.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",ee[ee.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",ee[ee.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",ee[ee.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",ee[ee.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",ee[ee.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",ee[ee.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",ee[ee.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",ee[ee.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",ee[ee.ZIP_ER_EOF=17]="ZIP_ER_EOF",ee[ee.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",ee[ee.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",ee[ee.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",ee[ee.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",ee[ee.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",ee[ee.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",ee[ee.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",ee[ee.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",ee[ee.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",ee[ee.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",ee[ee.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",ee[ee.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",ee[ee.ZIP_ER_TELL=30]="ZIP_ER_TELL",ee[ee.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA",ee))(Nle||{}),Lle=t=>({get HEAPU8(){return t.HEAPU8},errors:Nle,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_EXCL:2,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:t._malloc(1),uint32S:t._malloc(4),malloc:t._malloc,free:t._free,getValue:t.getValue,openFromSource:t.cwrap("zip_open_from_source","number",["number","number","number"]),close:t.cwrap("zip_close","number",["number"]),discard:t.cwrap("zip_discard",null,["number"]),getError:t.cwrap("zip_get_error","number",["number"]),getName:t.cwrap("zip_get_name","string",["number","number","number"]),getNumEntries:t.cwrap("zip_get_num_entries","number",["number","number"]),delete:t.cwrap("zip_delete","number",["number","number"]),statIndex:t.cwrap("zip_stat_index","number",["number",...Lf,"number","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...Lf,"number"]),fread:t.cwrap("zip_fread","number",["number","number","number","number"]),fclose:t.cwrap("zip_fclose","number",["number"]),dir:{add:t.cwrap("zip_dir_add","number",["number","string"])},file:{add:t.cwrap("zip_file_add","number",["number","string","number","number"]),getError:t.cwrap("zip_file_get_error","number",["number"]),getExternalAttributes:t.cwrap("zip_file_get_external_attributes","number",["number",...Lf,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...Lf,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...Lf,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...Lf,"number","number"])},ext:{countSymlinks:t.cwrap("zip_ext_count_symlinks","number",["number"])},error:{initWithCode:t.cwrap("zip_error_init_with_code",null,["number","number"]),strerror:t.cwrap("zip_error_strerror","string",["number"])},name:{locate:t.cwrap("zip_name_locate","number",["number","string","number"])},source:{fromUnattachedBuffer:t.cwrap("zip_source_buffer_create","number",["number",...Lf,"number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...Lf,"number"]),free:t.cwrap("zip_source_free",null,["number"]),keep:t.cwrap("zip_source_keep",null,["number"]),open:t.cwrap("zip_source_open","number",["number"]),close:t.cwrap("zip_source_close","number",["number"]),seek:t.cwrap("zip_source_seek","number",["number",...Lf,"number"]),tell:t.cwrap("zip_source_tell","number",["number"]),read:t.cwrap("zip_source_read","number",["number","number","number"]),error:t.cwrap("zip_source_error","number",["number"])},struct:{statS:t.cwrap("zipstruct_statS","number",[]),statSize:t.cwrap("zipstruct_stat_size","number",["number"]),statCompSize:t.cwrap("zipstruct_stat_comp_size","number",["number"]),statCompMethod:t.cwrap("zipstruct_stat_comp_method","number",["number"]),statMtime:t.cwrap("zipstruct_stat_mtime","number",["number"]),statCrc:t.cwrap("zipstruct_stat_crc","number",["number"]),errorS:t.cwrap("zipstruct_errorS","number",[]),errorCodeZip:t.cwrap("zipstruct_error_code_zip","number",["number"])}})});function iU(t,e){let r=t.indexOf(e);if(r<=0)return null;let o=r;for(;r>=0&&(o=r+e.length,t[o]!==K.sep);){if(t[r-1]===K.sep)return null;r=t.indexOf(e,o)}return t.length>o&&t[o]!==K.sep?null:t.slice(0,o)}var Jl,Ole=Et(()=>{Pt();Pt();nA();Jl=class extends _p{static async openPromise(e,r){let o=new Jl(r);try{return await e(o)}finally{o.saveAndClose()}}constructor(e={}){let r=e.fileExtensions,o=e.readOnlyArchives,a=typeof r>"u"?A=>iU(A,".zip"):A=>{for(let p of r){let h=iU(A,p);if(h)return h}return null},n=(A,p)=>new zi(p,{baseFs:A,readOnly:o,stats:A.statSync(p)}),u=async(A,p)=>{let h={baseFs:A,readOnly:o,stats:await A.statPromise(p)};return()=>new zi(p,h)};super({...e,factorySync:n,factoryPromise:u,getMountPoint:a})}}});function pot(t){if(typeof t=="string"&&String(+t)===t)return+t;if(typeof t=="number"&&Number.isFinite(t))return t<0?Date.now()/1e3:t;if(Ule.types.isDate(t))return t.getTime()/1e3;throw new Error("Invalid time")}function Tx(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var ta,sU,Ule,oU,_le,Rx,zi,aU=Et(()=>{Pt();Pt();Pt();Pt();Pt();Pt();ta=Be("fs"),sU=Be("stream"),Ule=Be("util"),oU=$e(Be("zlib"));tU();_le="mixed";Rx=class extends Error{constructor(r,o){super(r);this.name="Libzip Error",this.code=o}},zi=class extends Ou{constructor(r,o={}){super();this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;let a=o;if(this.level=typeof a.level<"u"?a.level:_le,r??=Tx(),typeof r=="string"){let{baseFs:A=new Rn}=a;this.baseFs=A,this.path=r}else this.path=null,this.baseFs=null;if(o.stats)this.stats=o.stats;else if(typeof r=="string")try{this.stats=this.baseFs.statSync(r)}catch(A){if(A.code==="ENOENT"&&a.create)this.stats=Ea.makeDefaultStats();else throw A}else this.stats=Ea.makeDefaultStats();this.libzip=S1();let n=this.libzip.malloc(4);try{let A=0;o.readOnly&&(A|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof r=="string"&&(r=a.create?Tx():this.baseFs.readFileSync(r));let p=this.allocateUnattachedSource(r);try{this.zip=this.libzip.openFromSource(p,A,n),this.lzSource=p}catch(h){throw this.libzip.source.free(p),h}if(this.zip===0){let h=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(h,this.libzip.getValue(n,"i32")),this.makeLibzipError(h)}}finally{this.libzip.free(n)}this.listings.set(Bt.root,new Set);let u=this.libzip.getNumEntries(this.zip,0);for(let A=0;Ar)throw new Error("Overread");let n=this.libzip.HEAPU8.subarray(o,o+r);return Buffer.from(n)}finally{this.libzip.free(o)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.readOnly){this.discardAndClose();return}let r=this.baseFs.existsSync(this.path)||this.stats.mode===Ea.DEFAULT_MODE?void 0:this.stats.mode;this.baseFs.writeFileSync(this.path,this.getBufferAndClose(),{mode:r}),this.ready=!1}resolve(r){return K.resolve(Bt.root,r)}async openPromise(r,o,a){return this.openSync(r,o,a)}openSync(r,o,a){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:r}),n}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(r,o){return this.opendirSync(r,o)}opendirSync(r,o={}){let a=this.resolveFilename(`opendir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`opendir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`opendir '${r}'`);let u=[...n],A=this.openSync(a,"r");return SD(this,a,u,{onClose:()=>{this.closeSync(A)}})}async readPromise(r,o,a,n,u){return this.readSync(r,o,a,n,u)}readSync(r,o,a=0,n=o.byteLength,u=-1){let A=this.fds.get(r);if(typeof A>"u")throw ar.EBADF("read");let p=u===-1||u===null?A.cursor:u,h=this.readFileSync(A.p);h.copy(o,a,p,p+n);let E=Math.max(0,Math.min(h.length-p,n));return(u===-1||u===null)&&(A.cursor+=E),E}async writePromise(r,o,a,n,u){return typeof o=="string"?this.writeSync(r,o,u):this.writeSync(r,o,a,n,u)}writeSync(r,o,a,n,u){throw typeof this.fds.get(r)>"u"?ar.EBADF("read"):new Error("Unimplemented")}async closePromise(r){return this.closeSync(r)}closeSync(r){if(typeof this.fds.get(r)>"u")throw ar.EBADF("read");this.fds.delete(r)}createReadStream(r,{encoding:o}={}){if(r===null)throw new Error("Unimplemented");let a=this.openSync(r,"r"),n=Object.assign(new sU.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(A,p)=>{clearImmediate(u),this.closeSync(a),p(A)}}),{close(){n.destroy()},bytesRead:0,path:r,pending:!1}),u=setImmediate(async()=>{try{let A=await this.readFilePromise(r,o);n.bytesRead=A.length,n.end(A)}catch(A){n.destroy(A)}});return n}createWriteStream(r,{encoding:o}={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);if(r===null)throw new Error("Unimplemented");let a=[],n=this.openSync(r,"w"),u=Object.assign(new sU.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(A,p)=>{try{A?p(A):(this.writeFileSync(r,Buffer.concat(a),o),p(null))}catch(h){p(h)}finally{this.closeSync(n)}}}),{close(){u.destroy()},bytesWritten:0,path:r,pending:!1});return u.on("data",A=>{let p=Buffer.from(A);u.bytesWritten+=p.length,a.push(p)}),u}async realpathPromise(r){return this.realpathSync(r)}realpathSync(r){let o=this.resolveFilename(`lstat '${r}'`,r);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`lstat '${r}'`);return o}async existsPromise(r){return this.existsSync(r)}existsSync(r){if(!this.ready)throw ar.EBUSY(`archive closed, existsSync '${r}'`);if(this.symlinkCount===0){let a=K.resolve(Bt.root,r);return this.entries.has(a)||this.listings.has(a)}let o;try{o=this.resolveFilename(`stat '${r}'`,r,void 0,!1)}catch{return!1}return o===void 0?!1:this.entries.has(o)||this.listings.has(o)}async accessPromise(r,o){return this.accessSync(r,o)}accessSync(r,o=ta.constants.F_OK){let a=this.resolveFilename(`access '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`access '${r}'`);if(this.readOnly&&o&ta.constants.W_OK)throw ar.EROFS(`access '${r}'`)}async statPromise(r,o={bigint:!1}){return o.bigint?this.statSync(r,{bigint:!0}):this.statSync(r)}statSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`stat '${r}'`,r,void 0,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`stat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`stat '${r}'`);return this.statImpl(`stat '${r}'`,a,o)}}async fstatPromise(r,o){return this.fstatSync(r,o)}fstatSync(r,o){let a=this.fds.get(r);if(typeof a>"u")throw ar.EBADF("fstatSync");let{p:n}=a,u=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(u)&&!this.listings.has(u))throw ar.ENOENT(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(u))throw ar.ENOTDIR(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,u,o)}async lstatPromise(r,o={bigint:!1}){return o.bigint?this.lstatSync(r,{bigint:!0}):this.lstatSync(r)}lstatSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`lstat '${r}'`,r,!1,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`lstat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`lstat '${r}'`);return this.statImpl(`lstat '${r}'`,a,o)}}statImpl(r,o,a={}){let n=this.entries.get(o);if(typeof n<"u"){let u=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,n,0,0,u)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let p=this.stats.uid,h=this.stats.gid,E=this.libzip.struct.statSize(u)>>>0,I=512,v=Math.ceil(E/I),b=(this.libzip.struct.statMtime(u)>>>0)*1e3,C=b,T=b,L=b,U=new Date(C),J=new Date(T),te=new Date(L),le=new Date(b),pe=this.listings.has(o)?ta.constants.S_IFDIR:this.isSymbolicLink(n)?ta.constants.S_IFLNK:ta.constants.S_IFREG,Ae=pe===ta.constants.S_IFDIR?493:420,ye=pe|this.getUnixMode(n,Ae)&511,ae=this.libzip.struct.statCrc(u),we=Object.assign(new Ea.StatEntry,{uid:p,gid:h,size:E,blksize:I,blocks:v,atime:U,birthtime:J,ctime:te,mtime:le,atimeMs:C,birthtimeMs:T,ctimeMs:L,mtimeMs:b,mode:ye,crc:ae});return a.bigint===!0?Ea.convertToBigIntStats(we):we}if(this.listings.has(o)){let u=this.stats.uid,A=this.stats.gid,p=0,h=512,E=0,I=this.stats.mtimeMs,v=this.stats.mtimeMs,b=this.stats.mtimeMs,C=this.stats.mtimeMs,T=new Date(I),L=new Date(v),U=new Date(b),J=new Date(C),te=ta.constants.S_IFDIR|493,le=0,pe=Object.assign(new Ea.StatEntry,{uid:u,gid:A,size:p,blksize:h,blocks:E,atime:T,birthtime:L,ctime:U,mtime:J,atimeMs:I,birthtimeMs:v,ctimeMs:b,mtimeMs:C,mode:te,crc:le});return a.bigint===!0?Ea.convertToBigIntStats(pe):pe}throw new Error("Unreachable")}getUnixMode(r,o){if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?o:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(r){let o=this.listings.get(r);if(o)return o;this.registerListing(K.dirname(r)).add(K.basename(r));let n=new Set;return this.listings.set(r,n),n}registerEntry(r,o){this.registerListing(K.dirname(r)).add(K.basename(r)),this.entries.set(r,o)}unregisterListing(r){this.listings.delete(r),this.listings.get(K.dirname(r))?.delete(K.basename(r))}unregisterEntry(r){this.unregisterListing(r);let o=this.entries.get(r);this.entries.delete(r),!(typeof o>"u")&&(this.fileSources.delete(o),this.isSymbolicLink(o)&&this.symlinkCount--)}deleteEntry(r,o){if(this.unregisterEntry(r),this.libzip.delete(this.zip,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(r,o,a=!0,n=!0){if(!this.ready)throw ar.EBUSY(`archive closed, ${r}`);let u=K.resolve(Bt.root,o);if(u==="/")return Bt.root;let A=this.entries.get(u);if(a&&A!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(A)){let p=this.getFileSource(A).toString();return this.resolveFilename(r,K.resolve(K.dirname(u),p),!0,n)}else return u;for(;;){let p=this.resolveFilename(r,K.dirname(u),!0,n);if(p===void 0)return p;let h=this.listings.has(p),E=this.entries.has(p);if(!h&&!E){if(n===!1)return;throw ar.ENOENT(r)}if(!h)throw ar.ENOTDIR(r);if(u=K.resolve(p,K.basename(u)),!a||this.symlinkCount===0)break;let I=this.libzip.name.locate(this.zip,u.slice(1),0);if(I===-1)break;if(this.isSymbolicLink(I)){let v=this.getFileSource(I).toString();u=K.resolve(K.dirname(u),v)}else break}return u}allocateBuffer(r){Buffer.isBuffer(r)||(r=Buffer.from(r));let o=this.libzip.malloc(r.byteLength);if(!o)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,o,r.byteLength).set(r),{buffer:o,byteLength:r.byteLength}}allocateUnattachedSource(r){let o=this.libzip.struct.errorS(),{buffer:a,byteLength:n}=this.allocateBuffer(r),u=this.libzip.source.fromUnattachedBuffer(a,n,0,1,o);if(u===0)throw this.libzip.free(o),this.makeLibzipError(o);return u}allocateSource(r){let{buffer:o,byteLength:a}=this.allocateBuffer(r),n=this.libzip.source.fromBuffer(this.zip,o,a,0,1);if(n===0)throw this.libzip.free(o),this.makeLibzipError(this.libzip.getError(this.zip));return n}setFileSource(r,o){let a=Buffer.isBuffer(o)?o:Buffer.from(o),n=K.relative(Bt.root,r),u=this.allocateSource(o);try{let A=this.libzip.file.add(this.zip,n,u,this.libzip.ZIP_FL_OVERWRITE);if(A===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!=="mixed"){let p=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,A,0,p,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(A,a),A}catch(A){throw this.libzip.source.free(u),A}}isSymbolicLink(r){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,"i32")>>>16&ta.constants.S_IFMT)===ta.constants.S_IFLNK}getFileSource(r,o={asyncDecompress:!1}){let a=this.fileSources.get(r);if(typeof a<"u")return a;let n=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,r,0,0,n)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let A=this.libzip.struct.statCompSize(n),p=this.libzip.struct.statCompMethod(n),h=this.libzip.malloc(A);try{let E=this.libzip.fopenIndex(this.zip,r,0,this.libzip.ZIP_FL_COMPRESSED);if(E===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let I=this.libzip.fread(E,h,A,0);if(I===-1)throw this.makeLibzipError(this.libzip.file.getError(E));if(IA)throw new Error("Overread");let v=this.libzip.HEAPU8.subarray(h,h+A),b=Buffer.from(v);if(p===0)return this.fileSources.set(r,b),b;if(o.asyncDecompress)return new Promise((C,T)=>{oU.default.inflateRaw(b,(L,U)=>{L?T(L):(this.fileSources.set(r,U),C(U))})});{let C=oU.default.inflateRawSync(b);return this.fileSources.set(r,C),C}}finally{this.libzip.fclose(E)}}finally{this.libzip.free(h)}}async fchmodPromise(r,o){return this.chmodPromise(this.fdToPath(r,"fchmod"),o)}fchmodSync(r,o){return this.chmodSync(this.fdToPath(r,"fchmodSync"),o)}async chmodPromise(r,o){return this.chmodSync(r,o)}chmodSync(r,o){if(this.readOnly)throw ar.EROFS(`chmod '${r}'`);o&=493;let a=this.resolveFilename(`chmod '${r}'`,r,!1),n=this.entries.get(a);if(typeof n>"u")throw new Error(`Assertion failed: The entry should have been registered (${a})`);let A=this.getUnixMode(n,ta.constants.S_IFREG|0)&-512|o;if(this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,A<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(r,o,a){return this.chownPromise(this.fdToPath(r,"fchown"),o,a)}fchownSync(r,o,a){return this.chownSync(this.fdToPath(r,"fchownSync"),o,a)}async chownPromise(r,o,a){return this.chownSync(r,o,a)}chownSync(r,o,a){throw new Error("Unimplemented")}async renamePromise(r,o){return this.renameSync(r,o)}renameSync(r,o){throw new Error("Unimplemented")}async copyFilePromise(r,o,a){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=await this.getFileSource(n,{asyncDecompress:!0}),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}copyFileSync(r,o,a=0){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=this.getFileSource(n),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}prepareCopyFile(r,o,a=0){if(this.readOnly)throw ar.EROFS(`copyfile '${r} -> '${o}'`);if((a&ta.constants.COPYFILE_FICLONE_FORCE)!==0)throw ar.ENOSYS("unsupported clone operation",`copyfile '${r}' -> ${o}'`);let n=this.resolveFilename(`copyfile '${r} -> ${o}'`,r),u=this.entries.get(n);if(typeof u>"u")throw ar.EINVAL(`copyfile '${r}' -> '${o}'`);let A=this.resolveFilename(`copyfile '${r}' -> ${o}'`,o),p=this.entries.get(A);if((a&(ta.constants.COPYFILE_EXCL|ta.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof p<"u")throw ar.EEXIST(`copyfile '${r}' -> '${o}'`);return{indexSource:u,resolvedDestP:A,indexDest:p}}async appendFilePromise(r,o,a){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFilePromise(r,o,a)}appendFileSync(r,o,a={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFileSync(r,o,a)}fdToPath(r,o){let a=this.fds.get(r)?.p;if(typeof a>"u")throw ar.EBADF(o);return a}async writeFilePromise(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([await this.getFileSource(A,{asyncDecompress:!0}),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&await this.chmodPromise(p,u)}writeFileSync(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([this.getFileSource(A),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&this.chmodSync(p,u)}prepareWriteFile(r,o){if(typeof r=="number"&&(r=this.fdToPath(r,"read")),this.readOnly)throw ar.EROFS(`open '${r}'`);let a=this.resolveFilename(`open '${r}'`,r);if(this.listings.has(a))throw ar.EISDIR(`open '${r}'`);let n=null,u=null;typeof o=="string"?n=o:typeof o=="object"&&({encoding:n=null,mode:u=null}=o);let A=this.entries.get(a);return{encoding:n,mode:u,resolvedP:a,index:A}}async unlinkPromise(r){return this.unlinkSync(r)}unlinkSync(r){if(this.readOnly)throw ar.EROFS(`unlink '${r}'`);let o=this.resolveFilename(`unlink '${r}'`,r);if(this.listings.has(o))throw ar.EISDIR(`unlink '${r}'`);let a=this.entries.get(o);if(typeof a>"u")throw ar.EINVAL(`unlink '${r}'`);this.deleteEntry(o,a)}async utimesPromise(r,o,a){return this.utimesSync(r,o,a)}utimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`utimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r);this.utimesImpl(n,a)}async lutimesPromise(r,o,a){return this.lutimesSync(r,o,a)}lutimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`lutimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r,!1);this.utimesImpl(n,a)}utimesImpl(r,o){this.listings.has(r)&&(this.entries.has(r)||this.hydrateDirectory(r));let a=this.entries.get(r);if(a===void 0)throw new Error("Unreachable");if(this.libzip.file.setMtime(this.zip,a,0,pot(o),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(r,o){return this.mkdirSync(r,o)}mkdirSync(r,{mode:o=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(r,{chmod:o});if(this.readOnly)throw ar.EROFS(`mkdir '${r}'`);let n=this.resolveFilename(`mkdir '${r}'`,r);if(this.entries.has(n)||this.listings.has(n))throw ar.EEXIST(`mkdir '${r}'`);this.hydrateDirectory(n),this.chmodSync(n,o)}async rmdirPromise(r,o){return this.rmdirSync(r,o)}rmdirSync(r,{recursive:o=!1}={}){if(this.readOnly)throw ar.EROFS(`rmdir '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rmdir '${r}'`,r),n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`rmdir '${r}'`);if(n.size>0)throw ar.ENOTEMPTY(`rmdir '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw ar.EINVAL(`rmdir '${r}'`);this.deleteEntry(r,u)}hydrateDirectory(r){let o=this.libzip.dir.add(this.zip,K.relative(Bt.root,r));if(o===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(r),this.registerEntry(r,o),o}async linkPromise(r,o){return this.linkSync(r,o)}linkSync(r,o){throw ar.EOPNOTSUPP(`link '${r}' -> '${o}'`)}async symlinkPromise(r,o){return this.symlinkSync(r,o)}symlinkSync(r,o){if(this.readOnly)throw ar.EROFS(`symlink '${r}' -> '${o}'`);let a=this.resolveFilename(`symlink '${r}' -> '${o}'`,o);if(this.listings.has(a))throw ar.EISDIR(`symlink '${r}' -> '${o}'`);if(this.entries.has(a))throw ar.EEXIST(`symlink '${r}' -> '${o}'`);let n=this.setFileSource(a,r);if(this.registerEntry(a,n),this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,(ta.constants.S_IFLNK|511)<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=await this.readFileBuffer(r,{asyncDecompress:!0});return o?a.toString(o):a}readFileSync(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=this.readFileBuffer(r);return o?a.toString(o):a}readFileBuffer(r,o={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdToPath(r,"read"));let a=this.resolveFilename(`open '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`open '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(a))throw ar.EISDIR("read");let n=this.entries.get(a);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,o)}async readdirPromise(r,o){return this.readdirSync(r,o)}readdirSync(r,o){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`scandir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`scandir '${r}'`);if(o?.recursive)if(o?.withFileTypes){let u=Array.from(n,A=>Object.assign(this.statImpl("lstat",K.join(r,A)),{name:A,path:Bt.dot}));for(let A of u){if(!A.isDirectory())continue;let p=K.join(A.path,A.name),h=this.listings.get(K.join(a,p));for(let E of h)u.push(Object.assign(this.statImpl("lstat",K.join(r,p,E)),{name:E,path:p}))}return u}else{let u=[...n];for(let A of u){let p=this.listings.get(K.join(a,A));if(!(typeof p>"u"))for(let h of p)u.push(K.join(A,h))}return u}else return o?.withFileTypes?Array.from(n,u=>Object.assign(this.statImpl("lstat",K.join(r,u)),{name:u,path:void 0})):[...n]}async readlinkPromise(r){let o=this.prepareReadlink(r);return(await this.getFileSource(o,{asyncDecompress:!0})).toString()}readlinkSync(r){let o=this.prepareReadlink(r);return this.getFileSource(o).toString()}prepareReadlink(r){let o=this.resolveFilename(`readlink '${r}'`,r,!1);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`readlink '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(o))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(o))throw ar.EINVAL(`readlink '${r}'`);let a=this.entries.get(o);if(a===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(a))throw ar.EINVAL(`readlink '${r}'`);return a}async truncatePromise(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=await this.getFileSource(n,{asyncDecompress:!0}),A=Buffer.alloc(o,0);return u.copy(A),await this.writeFilePromise(r,A)}truncateSync(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=this.getFileSource(n),A=Buffer.alloc(o,0);return u.copy(A),this.writeFileSync(r,A)}async ftruncatePromise(r,o){return this.truncatePromise(this.fdToPath(r,"ftruncate"),o)}ftruncateSync(r,o){return this.truncateSync(this.fdToPath(r,"ftruncateSync"),o)}watch(r,o,a){let n;switch(typeof o){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=o);break}if(!n)return{on:()=>{},close:()=>{}};let u=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(u)}}}watchFile(r,o,a){let n=K.resolve(Bt.root,r);return ry(this,n,o,a)}unwatchFile(r,o){let a=K.resolve(Bt.root,r);return Mg(this,a,o)}}});function jle(t,e,r=Buffer.alloc(0),o){let a=new zi(r),n=I=>I===e||I.startsWith(`${e}/`)?I.slice(0,e.length):null,u=async(I,v)=>()=>a,A=(I,v)=>a,p={...t},h=new Rn(p),E=new _p({baseFs:h,getMountPoint:n,factoryPromise:u,factorySync:A,magicByte:21,maxAge:1/0,typeCheck:o?.typeCheck});return Ww(Hle.default,new Hp(E)),a}var Hle,qle=Et(()=>{Pt();Hle=$e(Be("fs"));aU()});var Gle=Et(()=>{Ole();aU();qle()});var x1={};Kt(x1,{DEFAULT_COMPRESSION_LEVEL:()=>_le,LibzipError:()=>Rx,ZipFS:()=>zi,ZipOpenFS:()=>Jl,getArchivePart:()=>iU,getLibzipPromise:()=>got,getLibzipSync:()=>hot,makeEmptyArchive:()=>Tx,mountMemoryDrive:()=>jle});function hot(){return S1()}async function got(){return S1()}var Yle,nA=Et(()=>{tU();Yle=$e(Rle());Mle();Gle();Tle(()=>{let t=(0,Yle.default)();return Lle(t)})});var FE,Wle=Et(()=>{Pt();qt();b1();FE=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",process.cwd(),{description:"The directory to run the command in"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=this.args.length>0?`${this.commandName} ${this.args.join(" ")}`:this.commandName;return await TE(r,[],{cwd:ue.toPortablePath(this.cwd),stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}};FE.usage={description:"run a command using yarn's portable shell",details:` + This command will run a command using Yarn's portable shell. + + Make sure to escape glob patterns, redirections, and other features that might be expanded by your own shell. + + Note: To escape something from Yarn's shell, you might have to escape it twice, the first time from your own shell. + + Note: Don't use this command in Yarn scripts, as Yarn's shell is automatically used. + + For a list of features, visit: https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-shell/README.md. + `,examples:[["Run a simple command","$0 echo Hello"],["Run a command with a glob pattern","$0 echo '*.js'"],["Run a command with a redirection","$0 echo Hello World '>' hello.txt"],["Run a command with an escaped glob pattern (The double escape is needed in Unix shells)",`$0 echo '"*.js"'`],["Run a command with a variable (Double quotes are needed in Unix shells, to prevent them from expanding the variable)",'$0 "GREETING=Hello echo $GREETING World"']]}});var al,Vle=Et(()=>{al=class extends Error{constructor(e){super(e),this.name="ShellError"}}});var Mx={};Kt(Mx,{fastGlobOptions:()=>zle,isBraceExpansion:()=>lU,isGlobPattern:()=>dot,match:()=>mot,micromatchOptions:()=>Lx});function dot(t){if(!Nx.default.scan(t,Lx).isGlob)return!1;try{Nx.default.parse(t,Lx)}catch{return!1}return!0}function mot(t,{cwd:e,baseFs:r}){return(0,Kle.default)(t,{...zle,cwd:ue.fromPortablePath(e),fs:TD(Jle.default,new Hp(r))})}function lU(t){return Nx.default.scan(t,Lx).isBrace}var Kle,Jle,Nx,Lx,zle,Xle=Et(()=>{Pt();Kle=$e(RS()),Jle=$e(Be("fs")),Nx=$e(Zo()),Lx={strictBrackets:!0},zle={onlyDirectories:!1,onlyFiles:!1}});function cU(){}function uU(){for(let t of bd)t.kill()}function tce(t,e,r,o){return a=>{let n=a[0]instanceof iA.Transform?"pipe":a[0],u=a[1]instanceof iA.Transform?"pipe":a[1],A=a[2]instanceof iA.Transform?"pipe":a[2],p=(0,$le.default)(t,e,{...o,stdio:[n,u,A]});return bd.add(p),bd.size===1&&(process.on("SIGINT",cU),process.on("SIGTERM",uU)),a[0]instanceof iA.Transform&&a[0].pipe(p.stdin),a[1]instanceof iA.Transform&&p.stdout.pipe(a[1],{end:!1}),a[2]instanceof iA.Transform&&p.stderr.pipe(a[2],{end:!1}),{stdin:p.stdin,promise:new Promise(h=>{p.on("error",E=>{switch(bd.delete(p),bd.size===0&&(process.off("SIGINT",cU),process.off("SIGTERM",uU)),E.code){case"ENOENT":a[2].write(`command not found: ${t} +`),h(127);break;case"EACCES":a[2].write(`permission denied: ${t} +`),h(128);break;default:a[2].write(`uncaught error: ${E.message} +`),h(1);break}}),p.on("close",E=>{bd.delete(p),bd.size===0&&(process.off("SIGINT",cU),process.off("SIGTERM",uU)),h(E!==null?E:129)})})}}}function rce(t){return e=>{let r=e[0]==="pipe"?new iA.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}function Ox(t,e){return RE.start(t,e)}function Zle(t,e=null){let r=new iA.PassThrough,o=new ece.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",t(e!==null?`${e} ${p}`:p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&t(e!==null?`${e} ${n}`:n)}),r}function nce(t,{prefix:e}){return{stdout:Zle(r=>t.stdout.write(`${r} +`),t.stdout.isTTY?e:null),stderr:Zle(r=>t.stderr.write(`${r} +`),t.stderr.isTTY?e:null)}}var $le,iA,ece,bd,zl,AU,RE,fU=Et(()=>{$le=$e(aR()),iA=Be("stream"),ece=Be("string_decoder"),bd=new Set;zl=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},AU=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");return this.stream}},RE=class{constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=r}static start(e,{stdin:r,stdout:o,stderr:a}){let n=new RE(null,e);return n.stdin=r,n.stdout=o,n.stderr=a,n}pipeTo(e,r=1){let o=new RE(this,e),a=new AU;return o.pipe=a,o.stdout=this.stdout,o.stderr=this.stderr,(r&1)===1?this.stdout=a:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)===2?this.stderr=a:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),o}async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(this.stdin===null)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let r;if(this.stdout===null)throw new Error("Assertion failed: No output stream registered");r=this.stdout,e[1]=r.get();let o;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");o=this.stderr,e[2]=o.get();let a=this.implementation(e);return this.pipe&&this.pipe.attach(a.stdin),await a.promise.then(n=>(r.close(),o.close(),n))}async run(){let e=[];for(let o=this;o;o=o.ancestor)e.push(o.exec());return(await Promise.all(e))[0]}}});var T1={};Kt(T1,{EntryCommand:()=>FE,ShellError:()=>al,execute:()=>TE,globUtils:()=>Mx});function ice(t,e,r){let o=new ll.PassThrough({autoDestroy:!0});switch(t){case 0:(e&1)===1&&r.stdin.pipe(o,{end:!1}),(e&2)===2&&r.stdin instanceof ll.Writable&&o.pipe(r.stdin,{end:!1});break;case 1:(e&1)===1&&r.stdout.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stdout,{end:!1});break;case 2:(e&1)===1&&r.stderr.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stderr,{end:!1});break;default:throw new al(`Bad file descriptor: "${t}"`)}return o}function _x(t,e={}){let r={...t,...e};return r.environment={...t.environment,...e.environment},r.variables={...t.variables,...e.variables},r}async function Eot(t,e,r){let o=[],a=new ll.PassThrough;return a.on("data",n=>o.push(n)),await Hx(t,e,_x(r,{stdout:a})),Buffer.concat(o).toString().replace(/[\r\n]+$/,"")}async function sce(t,e,r){let o=t.map(async n=>{let u=await kd(n.args,e,r);return{name:n.name,value:u.join(" ")}});return(await Promise.all(o)).reduce((n,u)=>(n[u.name]=u.value,n),{})}function Ux(t){return t.match(/[^ \r\n\t]+/g)||[]}async function Ace(t,e,r,o,a=o){switch(t.name){case"$":o(String(process.pid));break;case"#":o(String(e.args.length));break;case"@":if(t.quoted)for(let n of e.args)a(n);else for(let n of e.args){let u=Ux(n);for(let A=0;A=0&&n"u"&&(t.defaultValue?u=(await kd(t.defaultValue,e,r)).join(" "):t.alternativeValue&&(u="")),typeof u>"u")throw A?new al(`Unbound argument #${n}`):new al(`Unbound variable "${t.name}"`);if(t.quoted)o(u);else{let p=Ux(u);for(let E=0;Eo.push(n));let a=Number(o.join(" "));return Number.isNaN(a)?k1({type:"variable",name:o.join(" ")},e,r):k1({type:"number",value:a},e,r)}else return Cot[t.type](await k1(t.left,e,r),await k1(t.right,e,r))}async function kd(t,e,r){let o=new Map,a=[],n=[],u=E=>{n.push(E)},A=()=>{n.length>0&&a.push(n.join("")),n=[]},p=E=>{u(E),A()},h=(E,I,v)=>{let b=JSON.stringify({type:E,fd:I}),C=o.get(b);typeof C>"u"&&o.set(b,C=[]),C.push(v)};for(let E of t){let I=!1;switch(E.type){case"redirection":{let v=await kd(E.args,e,r);for(let b of v)h(E.subtype,E.fd,b)}break;case"argument":for(let v of E.segments)switch(v.type){case"text":u(v.text);break;case"glob":u(v.pattern),I=!0;break;case"shell":{let b=await Eot(v.shell,e,r);if(v.quoted)u(b);else{let C=Ux(b);for(let T=0;T"u")throw new Error("Assertion failed: Expected a glob pattern to have been set");let b=await e.glob.match(v,{cwd:r.cwd,baseFs:e.baseFs});if(b.length===0){let C=lU(v)?". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22":"";throw new al(`No matches found: "${v}"${C}`)}for(let C of b.sort())p(C)}}if(o.size>0){let E=[];for(let[I,v]of o.entries())E.splice(E.length,0,I,String(v.length),...v);a.splice(0,0,"__ysh_set_redirects",...E,"--")}return a}function Q1(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let o=ue.fromPortablePath(r.cwd),a=r.environment;typeof a.PWD<"u"&&(a={...a,PWD:o});let[n,...u]=t;if(n==="command")return tce(u[0],u.slice(1),e,{cwd:o,env:a});let A=e.builtins.get(n);if(typeof A>"u")throw new Error(`Assertion failed: A builtin should exist for "${n}"`);return rce(async({stdin:p,stdout:h,stderr:E})=>{let{stdin:I,stdout:v,stderr:b}=r;r.stdin=p,r.stdout=h,r.stderr=E;try{return await A(u,e,r)}finally{r.stdin=I,r.stdout=v,r.stderr=b}})}function wot(t,e,r){return o=>{let a=new ll.PassThrough,n=Hx(t,e,_x(r,{stdin:a}));return{stdin:a,promise:n}}}function Iot(t,e,r){return o=>{let a=new ll.PassThrough,n=Hx(t,e,r);return{stdin:a,promise:n}}}function oce(t,e,r,o){if(e.length===0)return t;{let a;do a=String(Math.random());while(Object.hasOwn(o.procedures,a));return o.procedures={...o.procedures},o.procedures[a]=t,Q1([...e,"__ysh_run_procedure",a],r,o)}}async function ace(t,e,r){let o=t,a=null,n=null;for(;o;){let u=o.then?{...r}:r,A;switch(o.type){case"command":{let p=await kd(o.args,e,r),h=await sce(o.envs,e,r);A=o.envs.length?Q1(p,e,_x(u,{environment:h})):Q1(p,e,u)}break;case"subshell":{let p=await kd(o.args,e,r),h=wot(o.subshell,e,u);A=oce(h,p,e,u)}break;case"group":{let p=await kd(o.args,e,r),h=Iot(o.group,e,u);A=oce(h,p,e,u)}break;case"envs":{let p=await sce(o.envs,e,r);u.environment={...u.environment,...p},A=Q1(["true"],e,u)}break}if(typeof A>"u")throw new Error("Assertion failed: An action should have been generated");if(a===null)n=Ox(A,{stdin:new zl(u.stdin),stdout:new zl(u.stdout),stderr:new zl(u.stderr)});else{if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(a){case"|":n=n.pipeTo(A,1);break;case"|&":n=n.pipeTo(A,3);break}}o.then?(a=o.then.type,o=o.then.chain):o=null}if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await n.run()}async function Bot(t,e,r,{background:o=!1}={}){function a(n){let u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[n%u.length];return lce.default.hex(A)}if(o){let n=r.nextBackgroundJobIndex++,u=a(n),A=`[${n}]`,p=u(A),{stdout:h,stderr:E}=nce(r,{prefix:p});return r.backgroundJobs.push(ace(t,e,_x(r,{stdout:h,stderr:E})).catch(I=>E.write(`${I.message} +`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${p}, '${u(cy(t))}' has ended +`)})),0}return await ace(t,e,r)}async function vot(t,e,r,{background:o=!1}={}){let a,n=A=>{a=A,r.variables["?"]=String(A)},u=async A=>{try{return await Bot(A.chain,e,r,{background:o&&typeof A.then>"u"})}catch(p){if(!(p instanceof al))throw p;return r.stderr.write(`${p.message} +`),1}};for(n(await u(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":a===0&&n(await u(t.then.line));break;case"||":a!==0&&n(await u(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return a}async function Hx(t,e,r){let o=r.backgroundJobs;r.backgroundJobs=[];let a=0;for(let{command:n,type:u}of t){if(a=await vot(n,e,r,{background:u==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(a)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=o,a}function fce(t){switch(t.type){case"variable":return t.name==="@"||t.name==="#"||t.name==="*"||Number.isFinite(parseInt(t.name,10))||"defaultValue"in t&&!!t.defaultValue&&t.defaultValue.some(e=>F1(e))||"alternativeValue"in t&&!!t.alternativeValue&&t.alternativeValue.some(e=>F1(e));case"arithmetic":return pU(t.arithmetic);case"shell":return hU(t.shell);default:return!1}}function F1(t){switch(t.type){case"redirection":return t.args.some(e=>F1(e));case"argument":return t.segments.some(e=>fce(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function pU(t){switch(t.type){case"variable":return fce(t);case"number":return!1;default:return pU(t.left)||pU(t.right)}}function hU(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let o;switch(r.type){case"subshell":o=hU(r.subshell);break;case"command":o=r.envs.some(a=>a.args.some(n=>F1(n)))||r.args.some(a=>F1(a));break}if(o)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function TE(t,e=[],{baseFs:r=new Rn,builtins:o={},cwd:a=ue.toPortablePath(process.cwd()),env:n=process.env,stdin:u=process.stdin,stdout:A=process.stdout,stderr:p=process.stderr,variables:h={},glob:E=Mx}={}){let I={};for(let[C,T]of Object.entries(n))typeof T<"u"&&(I[C]=T);let v=new Map(yot);for(let[C,T]of Object.entries(o))v.set(C,T);u===null&&(u=new ll.PassThrough,u.end());let b=LD(t,E);if(!hU(b)&&b.length>0&&e.length>0){let{command:C}=b[b.length-1];for(;C.then;)C=C.then.line;let T=C.chain;for(;T.then;)T=T.then.chain;T.type==="command"&&(T.args=T.args.concat(e.map(L=>({type:"argument",segments:[{type:"text",text:L}]}))))}return await Hx(b,{args:e,baseFs:r,builtins:v,initialStdin:u,initialStdout:A,initialStderr:p,glob:E},{cwd:a,environment:I,exitCode:null,procedures:{},stdin:u,stdout:A,stderr:p,variables:Object.assign({},h,{["?"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var lce,cce,ll,uce,yot,Cot,b1=Et(()=>{Pt();Nl();lce=$e(vN()),cce=Be("os"),ll=Be("stream"),uce=Be("timers/promises");Wle();Vle();Xle();fU();fU();yot=new Map([["cd",async([t=(0,cce.homedir)(),...e],r,o)=>{let a=K.resolve(o.cwd,ue.toPortablePath(t));if(!(await r.baseFs.statPromise(a).catch(u=>{throw u.code==="ENOENT"?new al(`cd: no such file or directory: ${t}`):u})).isDirectory())throw new al(`cd: not a directory: ${t}`);return o.cwd=a,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${ue.fromPortablePath(r.cwd)} +`),0)],[":",async(t,e,r)=>0],["true",async(t,e,r)=>0],["false",async(t,e,r)=>1],["exit",async([t,...e],r,o)=>o.exitCode=parseInt(t??o.variables["?"],10)],["echo",async(t,e,r)=>(r.stdout.write(`${t.join(" ")} +`),0)],["sleep",async([t],e,r)=>{if(typeof t>"u")throw new al("sleep: missing operand");let o=Number(t);if(Number.isNaN(o))throw new al(`sleep: invalid time interval '${t}'`);return await(0,uce.setTimeout)(1e3*o,0)}],["__ysh_run_procedure",async(t,e,r)=>{let o=r.procedures[t[0]];return await Ox(o,{stdin:new zl(r.stdin),stdout:new zl(r.stdout),stderr:new zl(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let o=r.stdin,a=r.stdout,n=r.stderr,u=[],A=[],p=[],h=0;for(;t[h]!=="--";){let I=t[h++],{type:v,fd:b}=JSON.parse(I),C=J=>{switch(b){case null:case 0:u.push(J);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},T=J=>{switch(b){case null:case 1:A.push(J);break;case 2:p.push(J);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},L=Number(t[h++]),U=h+L;for(let J=h;Je.baseFs.createReadStream(K.resolve(r.cwd,ue.toPortablePath(t[J]))));break;case"<<<":C(()=>{let te=new ll.PassThrough;return process.nextTick(()=>{te.write(`${t[J]} +`),te.end()}),te});break;case"<&":C(()=>ice(Number(t[J]),1,r));break;case">":case">>":{let te=K.resolve(r.cwd,ue.toPortablePath(t[J]));T(te==="/dev/null"?new ll.Writable({autoDestroy:!0,emitClose:!0,write(le,pe,Ae){setImmediate(Ae)}}):e.baseFs.createWriteStream(te,v===">>"?{flags:"a"}:void 0))}break;case">&":T(ice(Number(t[J]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${v}"`)}}if(u.length>0){let I=new ll.PassThrough;o=I;let v=b=>{if(b===u.length)I.end();else{let C=u[b]();C.pipe(I,{end:!1}),C.on("end",()=>{v(b+1)})}};v(0)}if(A.length>0){let I=new ll.PassThrough;a=I;for(let v of A)I.pipe(v)}if(p.length>0){let I=new ll.PassThrough;n=I;for(let v of p)I.pipe(v)}let E=await Ox(Q1(t.slice(h+1),e,r),{stdin:new zl(o),stdout:new zl(a),stderr:new zl(n)}).run();return await Promise.all(A.map(I=>new Promise((v,b)=>{I.on("error",C=>{b(C)}),I.on("close",()=>{v()}),I.end()}))),await Promise.all(p.map(I=>new Promise((v,b)=>{I.on("error",C=>{b(C)}),I.on("close",()=>{v()}),I.end()}))),E}]]);Cot={addition:(t,e)=>t+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)}});var jx=_((n4t,pce)=>{function Dot(t,e){for(var r=-1,o=t==null?0:t.length,a=Array(o);++r{var hce=fd(),Pot=jx(),Sot=Hl(),xot=fE(),bot=1/0,gce=hce?hce.prototype:void 0,dce=gce?gce.toString:void 0;function mce(t){if(typeof t=="string")return t;if(Sot(t))return Pot(t,mce)+"";if(xot(t))return dce?dce.call(t):"";var e=t+"";return e=="0"&&1/t==-bot?"-0":e}yce.exports=mce});var R1=_((s4t,Cce)=>{var kot=Ece();function Qot(t){return t==null?"":kot(t)}Cce.exports=Qot});var gU=_((o4t,wce)=>{function Fot(t,e,r){var o=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<0&&(r+=a),a=e>r?0:r-e>>>0,e>>>=0;for(var n=Array(a);++o{var Tot=gU();function Rot(t,e,r){var o=t.length;return r=r===void 0?o:r,!e&&r>=o?t:Tot(t,e,r)}Ice.exports=Rot});var dU=_((l4t,vce)=>{var Not="\\ud800-\\udfff",Lot="\\u0300-\\u036f",Mot="\\ufe20-\\ufe2f",Oot="\\u20d0-\\u20ff",Uot=Lot+Mot+Oot,_ot="\\ufe0e\\ufe0f",Hot="\\u200d",jot=RegExp("["+Hot+Not+Uot+_ot+"]");function qot(t){return jot.test(t)}vce.exports=qot});var Pce=_((c4t,Dce)=>{function Got(t){return t.split("")}Dce.exports=Got});var Rce=_((u4t,Tce)=>{var Sce="\\ud800-\\udfff",Yot="\\u0300-\\u036f",Wot="\\ufe20-\\ufe2f",Vot="\\u20d0-\\u20ff",Kot=Yot+Wot+Vot,Jot="\\ufe0e\\ufe0f",zot="["+Sce+"]",mU="["+Kot+"]",yU="\\ud83c[\\udffb-\\udfff]",Xot="(?:"+mU+"|"+yU+")",xce="[^"+Sce+"]",bce="(?:\\ud83c[\\udde6-\\uddff]){2}",kce="[\\ud800-\\udbff][\\udc00-\\udfff]",Zot="\\u200d",Qce=Xot+"?",Fce="["+Jot+"]?",$ot="(?:"+Zot+"(?:"+[xce,bce,kce].join("|")+")"+Fce+Qce+")*",eat=Fce+Qce+$ot,tat="(?:"+[xce+mU+"?",mU,bce,kce,zot].join("|")+")",rat=RegExp(yU+"(?="+yU+")|"+tat+eat,"g");function nat(t){return t.match(rat)||[]}Tce.exports=nat});var Lce=_((A4t,Nce)=>{var iat=Pce(),sat=dU(),oat=Rce();function aat(t){return sat(t)?oat(t):iat(t)}Nce.exports=aat});var Oce=_((f4t,Mce)=>{var lat=Bce(),cat=dU(),uat=Lce(),Aat=R1();function fat(t){return function(e){e=Aat(e);var r=cat(e)?uat(e):void 0,o=r?r[0]:e.charAt(0),a=r?lat(r,1).join(""):e.slice(1);return o[t]()+a}}Mce.exports=fat});var _ce=_((p4t,Uce)=>{var pat=Oce(),hat=pat("toUpperCase");Uce.exports=hat});var EU=_((h4t,Hce)=>{var gat=R1(),dat=_ce();function mat(t){return dat(gat(t).toLowerCase())}Hce.exports=mat});var jce=_((g4t,qx)=>{function yat(){var t=0,e=1,r=2,o=3,a=4,n=5,u=6,A=7,p=8,h=9,E=10,I=11,v=12,b=13,C=14,T=15,L=16,U=17,J=0,te=1,le=2,pe=3,Ae=4;function ye(g,Ee){return 55296<=g.charCodeAt(Ee)&&g.charCodeAt(Ee)<=56319&&56320<=g.charCodeAt(Ee+1)&&g.charCodeAt(Ee+1)<=57343}function ae(g,Ee){Ee===void 0&&(Ee=0);var De=g.charCodeAt(Ee);if(55296<=De&&De<=56319&&Ee=1){var ce=g.charCodeAt(Ee-1),ne=De;return 55296<=ce&&ce<=56319?(ce-55296)*1024+(ne-56320)+65536:ne}return De}function we(g,Ee,De){var ce=[g].concat(Ee).concat([De]),ne=ce[ce.length-2],ee=De,Ie=ce.lastIndexOf(C);if(Ie>1&&ce.slice(1,Ie).every(function(H){return H==o})&&[o,b,U].indexOf(g)==-1)return le;var ke=ce.lastIndexOf(a);if(ke>0&&ce.slice(1,ke).every(function(H){return H==a})&&[v,a].indexOf(ne)==-1)return ce.filter(function(H){return H==a}).length%2==1?pe:Ae;if(ne==t&&ee==e)return J;if(ne==r||ne==t||ne==e)return ee==C&&Ee.every(function(H){return H==o})?le:te;if(ee==r||ee==t||ee==e)return te;if(ne==u&&(ee==u||ee==A||ee==h||ee==E))return J;if((ne==h||ne==A)&&(ee==A||ee==p))return J;if((ne==E||ne==p)&&ee==p)return J;if(ee==o||ee==T)return J;if(ee==n)return J;if(ne==v)return J;var ht=ce.indexOf(o)!=-1?ce.lastIndexOf(o)-1:ce.length-2;return[b,U].indexOf(ce[ht])!=-1&&ce.slice(ht+1,-1).every(function(H){return H==o})&&ee==C||ne==T&&[L,U].indexOf(ee)!=-1?J:Ee.indexOf(a)!=-1?le:ne==a&&ee==a?J:te}this.nextBreak=function(g,Ee){if(Ee===void 0&&(Ee=0),Ee<0)return 0;if(Ee>=g.length-1)return g.length;for(var De=Pe(ae(g,Ee)),ce=[],ne=Ee+1;ne{var Eat=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,Gx;function Cat(){if(Gx)return Gx;if(typeof Intl.Segmenter<"u"){let t=new Intl.Segmenter("en",{granularity:"grapheme"});return Gx=e=>Array.from(t.segment(e),({segment:r})=>r)}else{let t=jce(),e=new t;return Gx=r=>e.splitGraphemes(r)}}qce.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let o=r-e,a="",n=0,u=0;for(;t.length>0;){let A=t.match(Eat)||[t,t,void 0],p=Cat()(A[1]),h=Math.min(e-n,p.length);p=p.slice(h);let E=Math.min(o-u,p.length);a+=p.slice(0,E).join(""),n+=h,u+=E,typeof A[2]<"u"&&(a+=A[2]),t=t.slice(A[0].length)}return a}});var tn,N1=Et(()=>{tn=process.env.YARN_IS_TEST_ENV?"0.0.0":"4.0.2"});function zce(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let a=Wu(t===null?0:t);return!r&&t===null?Ot(e,a,"grey"):a}function CU(t,{configuration:e,json:r}){let o=zce(t,{configuration:e,json:r});if(!o||t===null||t===0)return o;let a=wr[t],n=`https://yarnpkg.com/advanced/error-codes#${o}---${a}`.toLowerCase();return Xy(e,o,n)}async function NE({configuration:t,stdout:e,forceError:r},o){let a=await Nt.start({configuration:t,stdout:e,includeFooter:!1},async n=>{let u=!1,A=!1;for(let p of o)typeof p.option<"u"&&(p.error||r?(A=!0,n.reportError(50,p.message)):(u=!0,n.reportWarning(50,p.message)),p.callback?.());u&&!A&&n.reportSeparator()});return a.hasErrors()?a.exitCode():null}var Kce,Yx,wat,Yce,Wce,uh,Jce,Vce,Iat,Bat,Wx,vat,Nt,L1=Et(()=>{Kce=$e(Gce()),Yx=$e(ed());pP();Yl();N1();ql();wat="\xB7",Yce=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Wce=80,uh=Yx.default.GITHUB_ACTIONS?{start:t=>`::group::${t} +`,end:t=>`::endgroup:: +`}:Yx.default.TRAVIS?{start:t=>`travis_fold:start:${t} +`,end:t=>`travis_fold:end:${t} +`}:Yx.default.GITLAB?{start:t=>`section_start:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}[collapsed=true]\r\x1B[0K${t} +`,end:t=>`section_end:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}\r\x1B[0K`}:null,Jce=uh!==null,Vce=new Date,Iat=["iTerm.app","Apple_Terminal","WarpTerminal","vscode"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,Bat=t=>t,Wx=Bat({patrick:{date:[17,3],chars:["\u{1F340}","\u{1F331}"],size:40},simba:{date:[19,7],chars:["\u{1F981}","\u{1F334}"],size:40},jack:{date:[31,10],chars:["\u{1F383}","\u{1F987}"],size:40},hogsfather:{date:[31,12],chars:["\u{1F389}","\u{1F384}"],size:40},default:{chars:["=","-"],size:80}}),vat=Iat&&Object.keys(Wx).find(t=>{let e=Wx[t];return!(e.date&&(e.date[0]!==Vce.getDate()||e.date[1]!==Vce.getMonth()+1))})||"default";Nt=class extends Xs{constructor({configuration:r,stdout:o,json:a=!1,forceSectionAlignment:n=!1,includeNames:u=!0,includePrefix:A=!0,includeFooter:p=!0,includeLogs:h=!a,includeInfos:E=h,includeWarnings:I=h}){super();this.uncommitted=new Set;this.warningCount=0;this.errorCount=0;this.timerFooter=[];this.startTime=Date.now();this.indent=0;this.level=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;if(zI(this,{configuration:r}),this.configuration=r,this.forceSectionAlignment=n,this.includeNames=u,this.includePrefix=A,this.includeFooter=p,this.includeInfos=E,this.includeWarnings=I,this.json=a,this.stdout=o,r.get("enableProgressBars")&&!a&&o.isTTY&&o.columns>22){let v=r.get("progressBarStyle")||vat;if(!Object.hasOwn(Wx,v))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=Wx[v];let b=Math.min(this.getRecommendedLength(),80);this.progressMaxScaledSize=Math.floor(this.progressStyle.size*b/80)}}static async start(r,o){let a=new this(r),n=process.emitWarning;process.emitWarning=(u,A)=>{if(typeof u!="string"){let h=u;u=h.message,A=A??h.name}let p=typeof A<"u"?`${A}: ${u}`:u;a.reportWarning(0,p)},r.includeVersion&&a.reportInfo(0,md(r.configuration,`Yarn ${tn}`,2));try{await o(a)}catch(u){a.reportExceptionOnce(u)}finally{await a.finalize(),process.emitWarning=n}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}getRecommendedLength(){let o=this.progressStyle!==null?this.stdout.columns-1:super.getRecommendedLength();return Math.max(40,o-12-this.indent*2)}startSectionSync({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}async startSectionPromise({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return await n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}startTimerImpl(r,o,a){return{cb:typeof o=="function"?o:a,reportHeader:()=>{this.level+=1,this.reportInfo(null,`\u250C ${r}`),this.indent+=1,uh!==null&&!this.json&&this.includeInfos&&this.stdout.write(uh.start(r))},reportFooter:A=>{if(this.indent-=1,uh!==null&&!this.json&&this.includeInfos){this.stdout.write(uh.end(r));for(let p of this.timerFooter)p()}this.configuration.get("enableTimers")&&A>200?this.reportInfo(null,`\u2514 Completed in ${Ot(this.configuration,A,yt.DURATION)}`):this.reportInfo(null,"\u2514 Completed"),this.level-=1},skipIfEmpty:(typeof o=="function"?{}:o).skipIfEmpty}}startTimerSync(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionSync(u,n)}async startTimerPromise(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionPromise(u,n)}reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(null,"")}reportInfo(r,o){if(!this.includeInfos)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"",u=`${this.formatPrefix(n,"blueBright")}${o}`;this.json?this.reportJson({type:"info",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(u)}reportWarning(r,o){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"warning",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"yellowBright")}${o}`)}reportError(r,o){this.errorCount+=1,this.timerFooter.push(()=>this.reportErrorImpl(r,o)),this.reportErrorImpl(r,o)}reportErrorImpl(r,o){this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"error",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"redBright")}${o}`,{truncate:!1})}reportFold(r,o){if(!uh)return;let a=`${uh.start(r)}${o}${uh.end(r)}`;this.timerFooter.push(()=>this.stdout.write(a))}reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(r.hasProgress&&r.hasTitle)throw new Error("Unimplemented: Progress bars can't have both progress and titles.");let o=!1,a=Promise.resolve().then(async()=>{let u={progress:r.hasProgress?0:void 0,title:r.hasTitle?"":void 0};this.progress.set(r,{definition:u,lastScaledSize:r.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:A,title:p}of r)o||u.progress===A&&u.title===p||(u.progress=A,u.title=p,this.refreshProgress());n()}),n=()=>{o||(o=!0,this.progress.delete(r),this.refreshProgress({delta:1}))};return{...a,stop:n}}reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>0?r="Failed with errors":this.warningCount>0?r="Done with warnings":r="Done";let o=Ot(this.configuration,Date.now()-this.startTime,yt.DURATION),a=this.configuration.get("enableTimers")?`${r} in ${o}`:r;this.errorCount>0?this.reportError(0,a):this.warningCount>0?this.reportWarning(0,a):this.reportInfo(0,a)}writeLine(r,{truncate:o}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(r,{truncate:o})} +`),this.writeProgress()}writeLines(r,{truncate:o}={}){this.clearProgress({delta:r.length});for(let a of r)this.stdout.write(`${this.truncate(a,{truncate:o})} +`);this.writeProgress()}commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let o of r)o.committed=!0,o.action()}clearProgress({delta:r=0,clear:o=!1}){this.progressStyle!==null&&this.progress.size+r>0&&(this.stdout.write(`\x1B[${this.progress.size+r}A`),(r>0||o)&&this.stdout.write("\x1B[0J"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let r=Date.now();r-this.progressTime>Wce&&(this.progressFrame=(this.progressFrame+1)%Yce.length,this.progressTime=r);let o=Yce[this.progressFrame];for(let a of this.progress.values()){let n="";if(typeof a.lastScaledSize<"u"){let h=this.progressStyle.chars[0].repeat(a.lastScaledSize),E=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-a.lastScaledSize);n=` ${h}${E}`}let u=this.formatName(null),A=u?`${u}: `:"",p=a.definition.title?` ${a.definition.title}`:"";this.stdout.write(`${Ot(this.configuration,"\u27A4","blueBright")} ${A}${o}${n}${p} +`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},Wce)}refreshProgress({delta:r=0,force:o=!1}={}){let a=!1,n=!1;if(o||this.progress.size===0)a=!0;else for(let u of this.progress.values()){let A=typeof u.definition.progress<"u"?Math.trunc(this.progressMaxScaledSize*u.definition.progress):void 0,p=u.lastScaledSize;u.lastScaledSize=A;let h=u.lastTitle;if(u.lastTitle=u.definition.title,A!==p||(n=h!==u.definition.title)){a=!0;break}}a&&(this.clearProgress({delta:r,clear:n}),this.writeProgress())}truncate(r,{truncate:o}={}){return this.progressStyle===null&&(o=!1),typeof o>"u"&&(o=this.configuration.get("preferTruncatedLines")),o&&(r=(0,Kce.default)(r,0,this.stdout.columns-1)),r}formatName(r){return this.includeNames?zce(r,{configuration:this.configuration,json:this.json}):""}formatPrefix(r,o){return this.includePrefix?`${Ot(this.configuration,"\u27A4",o)} ${r}${this.formatIndent()}`:""}formatNameWithHyperlink(r){return this.includeNames?CU(r,{configuration:this.configuration,json:this.json}):""}formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ".repeat(this.indent):`${wat} `}}});var un={};Kt(un,{PackageManager:()=>$ce,detectPackageManager:()=>eue,executePackageAccessibleBinary:()=>sue,executePackageScript:()=>Vx,executePackageShellcode:()=>wU,executeWorkspaceAccessibleBinary:()=>Qat,executeWorkspaceLifecycleScript:()=>nue,executeWorkspaceScript:()=>rue,getPackageAccessibleBinaries:()=>Kx,getWorkspaceAccessibleBinaries:()=>iue,hasPackageScript:()=>xat,hasWorkspaceScript:()=>IU,isNodeScript:()=>BU,makeScriptEnv:()=>M1,maybeExecuteWorkspaceLifecycleScript:()=>kat,prepareExternalProject:()=>Sat});async function Ah(t,e,r,o=[]){if(process.platform==="win32"){let a=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${o.map(n=>`"${n.replace('"','""')}"`).join(" ")} %*`;await oe.writeFilePromise(K.format({dir:t,name:e,ext:".cmd"}),a)}await oe.writeFilePromise(K.join(t,e),`#!/bin/sh +exec "${r}" ${o.map(a=>`'${a.replace(/'/g,`'"'"'`)}'`).join(" ")} "$@" +`,{mode:493})}async function eue(t){let e=await Mt.tryFind(t);if(e?.packageManager){let o=_S(e.packageManager);if(o?.name){let a=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[n]=o.reference.split(".");switch(o.name){case"yarn":return{packageManagerField:!0,packageManager:Number(n)===1?"Yarn Classic":"Yarn",reason:a};case"npm":return{packageManagerField:!0,packageManager:"npm",reason:a};case"pnpm":return{packageManagerField:!0,packageManager:"pnpm",reason:a}}}}let r;try{r=await oe.readFilePromise(K.join(t,dr.lockfile),"utf8")}catch{}return r!==void 0?r.match(/^__metadata:$/m)?{packageManager:"Yarn",reason:'"__metadata" key found in yarn.lock'}:{packageManager:"Yarn Classic",reason:'"__metadata" key not found in yarn.lock, must be a Yarn classic lockfile'}:oe.existsSync(K.join(t,"package-lock.json"))?{packageManager:"npm",reason:`found npm's "package-lock.json" lockfile`}:oe.existsSync(K.join(t,"pnpm-lock.yaml"))?{packageManager:"pnpm",reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function M1({project:t,locator:e,binFolder:r,ignoreCorepack:o,lifecycleScript:a,baseEnv:n=t?.configuration.env??process.env}){let u={};for(let[E,I]of Object.entries(n))typeof I<"u"&&(u[E.toLowerCase()!=="path"?E:"PATH"]=I);let A=ue.fromPortablePath(r);u.BERRY_BIN_FOLDER=ue.fromPortablePath(A);let p=process.env.COREPACK_ROOT&&!o?ue.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([Ah(r,"node",process.execPath),...tn!==null?[Ah(r,"run",process.execPath,[p,"run"]),Ah(r,"yarn",process.execPath,[p]),Ah(r,"yarnpkg",process.execPath,[p]),Ah(r,"node-gyp",process.execPath,[p,"run","--top-level","node-gyp"])]:[]]),t&&(u.INIT_CWD=ue.fromPortablePath(t.configuration.startingCwd),u.PROJECT_CWD=ue.fromPortablePath(t.cwd)),u.PATH=u.PATH?`${A}${ue.delimiter}${u.PATH}`:`${A}`,u.npm_execpath=`${A}${ue.sep}yarn`,u.npm_node_execpath=`${A}${ue.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let E=t.tryWorkspaceByLocator(e),I=E?E.manifest.version??"":t.storedPackages.get(e.locatorHash).version??"";u.npm_package_name=fn(e),u.npm_package_version=I;let v;if(E)v=E.cwd;else{let b=t.storedPackages.get(e.locatorHash);if(!b)throw new Error(`Package for ${jr(t.configuration,e)} not found in the project`);let C=t.configuration.getLinkers(),T={project:t,report:new Nt({stdout:new fh.PassThrough,configuration:t.configuration})},L=C.find(U=>U.supportsPackage(b,T));if(!L)throw new Error(`The package ${jr(t.configuration,b)} isn't supported by any of the available linkers`);v=await L.findPackageLocation(b,T)}u.npm_package_json=ue.fromPortablePath(K.join(v,dr.manifest))}let h=tn!==null?`yarn/${tn}`:`yarn/${vf("@yarnpkg/core").version}-core`;return u.npm_config_user_agent=`${h} npm/? node/${process.version} ${process.platform} ${process.arch}`,a&&(u.npm_lifecycle_event=a),t&&await t.configuration.triggerHook(E=>E.setupScriptEnvironment,t,u,async(E,I,v)=>await Ah(r,E,I,v)),u}async function Sat(t,e,{configuration:r,report:o,workspace:a=null,locator:n=null}){await Pat(async()=>{await oe.mktempPromise(async u=>{let A=K.join(u,"pack.log"),p=null,{stdout:h,stderr:E}=r.getSubprocessStreams(A,{prefix:ue.fromPortablePath(t),report:o}),I=n&&Hc(n)?t1(n):n,v=I?xa(I):"an external project";h.write(`Packing ${v} from sources +`);let b=await eue(t),C;b!==null?(h.write(`Using ${b.packageManager} for bootstrap. Reason: ${b.reason} + +`),C=b.packageManager):(h.write(`No package manager configuration detected; defaulting to Yarn + +`),C="Yarn");let T=C==="Yarn"&&!b?.packageManagerField;await oe.mktempPromise(async L=>{let U=await M1({binFolder:L,ignoreCorepack:T}),te=new Map([["Yarn Classic",async()=>{let pe=a!==null?["workspace",a]:[],Ae=K.join(t,dr.manifest),ye=await oe.readFilePromise(Ae),ae=await Gc(process.execPath,[process.argv[1],"set","version","classic","--only-if-needed","--yarn-path"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(ae.code!==0)return ae.code;await oe.writeFilePromise(Ae,ye),await oe.appendFilePromise(K.join(t,".npmignore"),`/.yarn +`),h.write(` +`),delete U.NODE_ENV;let we=await Gc("yarn",["install"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(we.code!==0)return we.code;h.write(` +`);let Pe=await Gc("yarn",[...pe,"pack","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return Pe.code!==0?Pe.code:0}],["Yarn",async()=>{let pe=a!==null?["workspace",a]:[];U.YARN_ENABLE_INLINE_BUILDS="1";let Ae=K.join(t,dr.lockfile);await oe.existsPromise(Ae)||await oe.writeFilePromise(Ae,"");let ye=await Gc("yarn",[...pe,"pack","--install-if-needed","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return ye.code!==0?ye.code:0}],["npm",async()=>{if(a!==null){let Ee=new fh.PassThrough,De=Vy(Ee);Ee.pipe(h,{end:!1});let ce=await Gc("npm",["--version"],{cwd:t,env:U,stdin:p,stdout:Ee,stderr:E,end:0});if(Ee.end(),ce.code!==0)return h.end(),E.end(),ce.code;let ne=(await De).toString().trim();if(!bf(ne,">=7.x")){let ee=eA(null,"npm"),Ie=In(ee,ne),ke=In(ee,">=7.x");throw new Error(`Workspaces aren't supported by ${qn(r,Ie)}; please upgrade to ${qn(r,ke)} (npm has been detected as the primary package manager for ${Ot(r,t,yt.PATH)})`)}}let pe=a!==null?["--workspace",a]:[];delete U.npm_config_user_agent,delete U.npm_config_production,delete U.NPM_CONFIG_PRODUCTION,delete U.NODE_ENV;let Ae=await Gc("npm",["install","--legacy-peer-deps"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(Ae.code!==0)return Ae.code;let ye=new fh.PassThrough,ae=Vy(ye);ye.pipe(h);let we=await Gc("npm",["pack","--silent",...pe],{cwd:t,env:U,stdin:p,stdout:ye,stderr:E});if(we.code!==0)return we.code;let Pe=(await ae).toString().trim().replace(/^.*\n/s,""),g=K.resolve(t,ue.toPortablePath(Pe));return await oe.renamePromise(g,e),0}]]).get(C);if(typeof te>"u")throw new Error("Assertion failed: Unsupported workflow");let le=await te();if(!(le===0||typeof le>"u"))throw oe.detachTemp(u),new zt(58,`Packing the package failed (exit code ${le}, logs can be found here: ${Ot(r,A,yt.PATH)})`)})})})}async function xat(t,e,{project:r}){let o=r.tryWorkspaceByLocator(t);if(o!==null)return IU(o,e);let a=r.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r.configuration,t)} not found in the project`);return await Jl.openPromise(async n=>{let u=r.configuration,A=r.configuration.getLinkers(),p={project:r,report:new Nt({stdout:new fh.PassThrough,configuration:u})},h=A.find(b=>b.supportsPackage(a,p));if(!h)throw new Error(`The package ${jr(r.configuration,a)} isn't supported by any of the available linkers`);let E=await h.findPackageLocation(a,p),I=new gn(E,{baseFs:n});return(await Mt.find(Bt.dot,{baseFs:I})).scripts.has(e)})}async function Vx(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{manifest:h,env:E,cwd:I}=await tue(t,{project:a,binFolder:p,cwd:o,lifecycleScript:e}),v=h.scripts.get(e);if(typeof v>"u")return 1;let b=async()=>await TE(v,r,{cwd:I,env:E,stdin:n,stdout:u,stderr:A});return await(await a.configuration.reduceHook(T=>T.wrapScriptExecution,b,a,t,e,{script:v,args:r,cwd:I,env:E,stdin:n,stdout:u,stderr:A}))()})}async function wU(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{env:h,cwd:E}=await tue(t,{project:a,binFolder:p,cwd:o});return await TE(e,r,{cwd:E,env:h,stdin:n,stdout:u,stderr:A})})}async function bat(t,{binFolder:e,cwd:r,lifecycleScript:o}){let a=await M1({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:o});return await vU(e,await iue(t)),typeof r>"u"&&(r=K.dirname(await oe.realpathPromise(K.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:a,cwd:r}}async function tue(t,{project:e,binFolder:r,cwd:o,lifecycleScript:a}){let n=e.tryWorkspaceByLocator(t);if(n!==null)return bat(n,{binFolder:r,cwd:o,lifecycleScript:a});let u=e.storedPackages.get(t.locatorHash);if(!u)throw new Error(`Package for ${jr(e.configuration,t)} not found in the project`);return await Jl.openPromise(async A=>{let p=e.configuration,h=e.configuration.getLinkers(),E={project:e,report:new Nt({stdout:new fh.PassThrough,configuration:p})},I=h.find(L=>L.supportsPackage(u,E));if(!I)throw new Error(`The package ${jr(e.configuration,u)} isn't supported by any of the available linkers`);let v=await M1({project:e,locator:t,binFolder:r,lifecycleScript:a});await vU(r,await Kx(t,{project:e}));let b=await I.findPackageLocation(u,E),C=new gn(b,{baseFs:A}),T=await Mt.find(Bt.dot,{baseFs:C});return typeof o>"u"&&(o=b),{manifest:T,binFolder:r,env:v,cwd:o}})}async function rue(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u}){return await Vx(t.anchoredLocator,e,r,{cwd:o,project:t.project,stdin:a,stdout:n,stderr:u})}function IU(t,e){return t.manifest.scripts.has(e)}async function nue(t,e,{cwd:r,report:o}){let{configuration:a}=t.project,n=null;await oe.mktempPromise(async u=>{let A=K.join(u,`${e}.log`),p=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${ue.fromPortablePath(t.cwd)}") +`,{stdout:h,stderr:E}=a.getSubprocessStreams(A,{report:o,prefix:jr(a,t.anchoredLocator),header:p});o.reportInfo(36,`Calling the "${e}" lifecycle script`);let I=await rue(t,e,[],{cwd:r,stdin:n,stdout:h,stderr:E});if(h.end(),E.end(),I!==0)throw oe.detachTemp(u),new zt(36,`${(0,Xce.default)(e)} script failed (exit code ${Ot(a,I,yt.NUMBER)}, logs can be found here: ${Ot(a,A,yt.PATH)}); run ${Ot(a,`yarn ${e}`,yt.CODE)} to investigate`)})}async function kat(t,e,r){IU(t,e)&&await nue(t,e,r)}function BU(t){let e=K.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0;if(e===".exe"||e===".bin")return!1;let r=Buffer.alloc(4),o;try{o=oe.openSync(t,"r")}catch{return!0}try{oe.readSync(o,r,0,r.length,0)}finally{oe.closeSync(o)}let a=r.readUint32BE();return!(a===3405691582||a===3489328638||a===2135247942||(a&4294901760)===1297743872)}async function Kx(t,{project:e}){let r=e.configuration,o=new Map,a=e.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r,t)} not found in the project`);let n=new fh.Writable,u=r.getLinkers(),A={project:e,report:new Nt({configuration:r,stdout:n})},p=new Set([t.locatorHash]);for(let E of a.dependencies.values()){let I=e.storedResolutions.get(E.descriptorHash);if(!I)throw new Error(`Assertion failed: The resolution (${qn(r,E)}) should have been registered`);p.add(I)}let h=await Promise.all(Array.from(p,async E=>{let I=e.storedPackages.get(E);if(!I)throw new Error(`Assertion failed: The package (${E}) should have been registered`);if(I.bin.size===0)return sl.skip;let v=u.find(C=>C.supportsPackage(I,A));if(!v)return sl.skip;let b=null;try{b=await v.findPackageLocation(I,A)}catch(C){if(C.code==="LOCATOR_NOT_INSTALLED")return sl.skip;throw C}return{dependency:I,packageLocation:b}}));for(let E of h){if(E===sl.skip)continue;let{dependency:I,packageLocation:v}=E;for(let[b,C]of I.bin){let T=K.resolve(v,C);o.set(b,[I,ue.fromPortablePath(T),BU(T)])}}return o}async function iue(t){return await Kx(t.anchoredLocator,{project:t.project})}async function vU(t,e){await Promise.all(Array.from(e,([r,[,o,a]])=>a?Ah(t,r,process.execPath,[o]):Ah(t,r,o,[])))}async function sue(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A,nodeArgs:p=[],packageAccessibleBinaries:h}){h??=await Kx(t,{project:a});let E=h.get(e);if(!E)throw new Error(`Binary not found (${e}) for ${jr(a.configuration,t)}`);return await oe.mktempPromise(async I=>{let[,v]=E,b=await M1({project:a,locator:t,binFolder:I});await vU(b.BERRY_BIN_FOLDER,h);let C=BU(ue.toPortablePath(v))?Gc(process.execPath,[...p,v,...r],{cwd:o,env:b,stdin:n,stdout:u,stderr:A}):Gc(v,r,{cwd:o,env:b,stdin:n,stdout:u,stderr:A}),T;try{T=await C}finally{await oe.removePromise(b.BERRY_BIN_FOLDER)}return T.code})}async function Qat(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A}){return await sue(t.anchoredLocator,e,r,{project:t.project,cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A})}var Xce,Zce,fh,$ce,Dat,Pat,DU=Et(()=>{Pt();Pt();nA();b1();Xce=$e(EU()),Zce=$e(nd()),fh=Be("stream");AE();Yl();L1();N1();Px();ql();jl();kf();xo();$ce=(a=>(a.Yarn1="Yarn Classic",a.Yarn2="Yarn",a.Npm="npm",a.Pnpm="pnpm",a))($ce||{});Dat=2,Pat=(0,Zce.default)(Dat)});var LE=_((M4t,aue)=>{"use strict";var oue=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"]]);aue.exports=t=>t?Object.keys(t).map(e=>[oue.has(e)?oue.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var OE=_((O4t,due)=>{"use strict";var lue=typeof process=="object"&&process?process:{stdout:null,stderr:null},Fat=Be("events"),cue=Be("stream"),uue=Be("string_decoder").StringDecoder,Mf=Symbol("EOF"),Of=Symbol("maybeEmitEnd"),ph=Symbol("emittedEnd"),Jx=Symbol("emittingEnd"),O1=Symbol("emittedError"),zx=Symbol("closed"),Aue=Symbol("read"),Xx=Symbol("flush"),fue=Symbol("flushChunk"),ka=Symbol("encoding"),Uf=Symbol("decoder"),Zx=Symbol("flowing"),U1=Symbol("paused"),ME=Symbol("resume"),Fs=Symbol("bufferLength"),PU=Symbol("bufferPush"),SU=Symbol("bufferShift"),Fo=Symbol("objectMode"),To=Symbol("destroyed"),xU=Symbol("emitData"),pue=Symbol("emitEnd"),bU=Symbol("emitEnd2"),_f=Symbol("async"),_1=t=>Promise.resolve().then(t),hue=global._MP_NO_ITERATOR_SYMBOLS_!=="1",Tat=hue&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),Rat=hue&&Symbol.iterator||Symbol("iterator not implemented"),Nat=t=>t==="end"||t==="finish"||t==="prefinish",Lat=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Mat=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),$x=class{constructor(e,r,o){this.src=e,this.dest=r,this.opts=o,this.ondrain=()=>e[ME](),r.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},kU=class extends $x{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,o){super(e,r,o),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}};due.exports=class gue extends cue{constructor(e){super(),this[Zx]=!1,this[U1]=!1,this.pipes=[],this.buffer=[],this[Fo]=e&&e.objectMode||!1,this[Fo]?this[ka]=null:this[ka]=e&&e.encoding||null,this[ka]==="buffer"&&(this[ka]=null),this[_f]=e&&!!e.async||!1,this[Uf]=this[ka]?new uue(this[ka]):null,this[Mf]=!1,this[ph]=!1,this[Jx]=!1,this[zx]=!1,this[O1]=null,this.writable=!0,this.readable=!0,this[Fs]=0,this[To]=!1}get bufferLength(){return this[Fs]}get encoding(){return this[ka]}set encoding(e){if(this[Fo])throw new Error("cannot set encoding in objectMode");if(this[ka]&&e!==this[ka]&&(this[Uf]&&this[Uf].lastNeed||this[Fs]))throw new Error("cannot change encoding");this[ka]!==e&&(this[Uf]=e?new uue(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[Uf].write(r)))),this[ka]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Fo]}set objectMode(e){this[Fo]=this[Fo]||!!e}get async(){return this[_f]}set async(e){this[_f]=this[_f]||!!e}write(e,r,o){if(this[Mf])throw new Error("write after end");if(this[To])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(o=r,r="utf8"),r||(r="utf8");let a=this[_f]?_1:n=>n();return!this[Fo]&&!Buffer.isBuffer(e)&&(Mat(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):Lat(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),this[Fo]?(this.flowing&&this[Fs]!==0&&this[Xx](!0),this.flowing?this.emit("data",e):this[PU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):e.length?(typeof e=="string"&&!(r===this[ka]&&!this[Uf].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[ka]&&(e=this[Uf].write(e)),this.flowing&&this[Fs]!==0&&this[Xx](!0),this.flowing?this.emit("data",e):this[PU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):(this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing)}read(e){if(this[To])return null;if(this[Fs]===0||e===0||e>this[Fs])return this[Of](),null;this[Fo]&&(e=null),this.buffer.length>1&&!this[Fo]&&(this.encoding?this.buffer=[this.buffer.join("")]:this.buffer=[Buffer.concat(this.buffer,this[Fs])]);let r=this[Aue](e||null,this.buffer[0]);return this[Of](),r}[Aue](e,r){return e===r.length||e===null?this[SU]():(this.buffer[0]=r.slice(e),r=r.slice(0,e),this[Fs]-=e),this.emit("data",r),!this.buffer.length&&!this[Mf]&&this.emit("drain"),r}end(e,r,o){return typeof e=="function"&&(o=e,e=null),typeof r=="function"&&(o=r,r="utf8"),e&&this.write(e,r),o&&this.once("end",o),this[Mf]=!0,this.writable=!1,(this.flowing||!this[U1])&&this[Of](),this}[ME](){this[To]||(this[U1]=!1,this[Zx]=!0,this.emit("resume"),this.buffer.length?this[Xx]():this[Mf]?this[Of]():this.emit("drain"))}resume(){return this[ME]()}pause(){this[Zx]=!1,this[U1]=!0}get destroyed(){return this[To]}get flowing(){return this[Zx]}get paused(){return this[U1]}[PU](e){this[Fo]?this[Fs]+=1:this[Fs]+=e.length,this.buffer.push(e)}[SU](){return this.buffer.length&&(this[Fo]?this[Fs]-=1:this[Fs]-=this.buffer[0].length),this.buffer.shift()}[Xx](e){do;while(this[fue](this[SU]()));!e&&!this.buffer.length&&!this[Mf]&&this.emit("drain")}[fue](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[To])return;let o=this[ph];return r=r||{},e===lue.stdout||e===lue.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,o?r.end&&e.end():(this.pipes.push(r.proxyErrors?new kU(this,e,r):new $x(this,e,r)),this[_f]?_1(()=>this[ME]()):this[ME]()),e}unpipe(e){let r=this.pipes.find(o=>o.dest===e);r&&(this.pipes.splice(this.pipes.indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let o=super.on(e,r);return e==="data"&&!this.pipes.length&&!this.flowing?this[ME]():e==="readable"&&this[Fs]!==0?super.emit("readable"):Nat(e)&&this[ph]?(super.emit(e),this.removeAllListeners(e)):e==="error"&&this[O1]&&(this[_f]?_1(()=>r.call(this,this[O1])):r.call(this,this[O1])),o}get emittedEnd(){return this[ph]}[Of](){!this[Jx]&&!this[ph]&&!this[To]&&this.buffer.length===0&&this[Mf]&&(this[Jx]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[zx]&&this.emit("close"),this[Jx]=!1)}emit(e,r,...o){if(e!=="error"&&e!=="close"&&e!==To&&this[To])return;if(e==="data")return r?this[_f]?_1(()=>this[xU](r)):this[xU](r):!1;if(e==="end")return this[pue]();if(e==="close"){if(this[zx]=!0,!this[ph]&&!this[To])return;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[O1]=r;let n=super.emit("error",r);return this[Of](),n}else if(e==="resume"){let n=super.emit("resume");return this[Of](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,r,...o);return this[Of](),a}[xU](e){for(let o of this.pipes)o.dest.write(e)===!1&&this.pause();let r=super.emit("data",e);return this[Of](),r}[pue](){this[ph]||(this[ph]=!0,this.readable=!1,this[_f]?_1(()=>this[bU]()):this[bU]())}[bU](){if(this[Uf]){let r=this[Uf].end();if(r){for(let o of this.pipes)o.dest.write(r);super.emit("data",r)}}for(let r of this.pipes)r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}collect(){let e=[];this[Fo]||(e.dataLength=0);let r=this.promise();return this.on("data",o=>{e.push(o),this[Fo]||(e.dataLength+=o.length)}),r.then(()=>e)}concat(){return this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this[ka]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(To,()=>r(new Error("stream destroyed"))),this.on("error",o=>r(o)),this.on("end",()=>e())})}[Tat](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[Mf])return Promise.resolve({done:!0});let o=null,a=null,n=h=>{this.removeListener("data",u),this.removeListener("end",A),a(h)},u=h=>{this.removeListener("error",n),this.removeListener("end",A),this.pause(),o({value:h,done:!!this[Mf]})},A=()=>{this.removeListener("error",n),this.removeListener("data",u),o({done:!0})},p=()=>n(new Error("stream destroyed"));return new Promise((h,E)=>{a=E,o=h,this.once(To,p),this.once("error",n),this.once("end",A),this.once("data",u)})}}}[Rat](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[To]?(e?this.emit("error",e):this.emit(To),this):(this[To]=!0,this.buffer.length=0,this[Fs]=0,typeof this.close=="function"&&!this[zx]&&this.close(),e?this.emit("error",e):this.emit(To),this)}static isStream(e){return!!e&&(e instanceof gue||e instanceof cue||e instanceof Fat&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var yue=_((U4t,mue)=>{var Oat=Be("zlib").constants||{ZLIB_VERNUM:4736};mue.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},Oat))});var WU=_(cl=>{"use strict";var NU=Be("assert"),hh=Be("buffer").Buffer,wue=Be("zlib"),Qd=cl.constants=yue(),Uat=OE(),Eue=hh.concat,Fd=Symbol("_superWrite"),_E=class extends Error{constructor(e){super("zlib: "+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return"ZlibError"}},_at=Symbol("opts"),H1=Symbol("flushFlag"),Cue=Symbol("finishFlushFlag"),YU=Symbol("fullFlushFlag"),ti=Symbol("handle"),eb=Symbol("onError"),UE=Symbol("sawError"),QU=Symbol("level"),FU=Symbol("strategy"),TU=Symbol("ended"),_4t=Symbol("_defaultFullFlush"),tb=class extends Uat{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[UE]=!1,this[TU]=!1,this[_at]=e,this[H1]=e.flush,this[Cue]=e.finishFlush;try{this[ti]=new wue[r](e)}catch(o){throw new _E(o)}this[eb]=o=>{this[UE]||(this[UE]=!0,this.close(),this.emit("error",o))},this[ti].on("error",o=>this[eb](new _E(o))),this.once("end",()=>this.close)}close(){this[ti]&&(this[ti].close(),this[ti]=null,this.emit("close"))}reset(){if(!this[UE])return NU(this[ti],"zlib binding closed"),this[ti].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[YU]),this.write(Object.assign(hh.alloc(0),{[H1]:e})))}end(e,r,o){return e&&this.write(e,r),this.flush(this[Cue]),this[TU]=!0,super.end(null,null,o)}get ended(){return this[TU]}write(e,r,o){if(typeof r=="function"&&(o=r,r="utf8"),typeof e=="string"&&(e=hh.from(e,r)),this[UE])return;NU(this[ti],"zlib binding closed");let a=this[ti]._handle,n=a.close;a.close=()=>{};let u=this[ti].close;this[ti].close=()=>{},hh.concat=h=>h;let A;try{let h=typeof e[H1]=="number"?e[H1]:this[H1];A=this[ti]._processChunk(e,h),hh.concat=Eue}catch(h){hh.concat=Eue,this[eb](new _E(h))}finally{this[ti]&&(this[ti]._handle=a,a.close=n,this[ti].close=u,this[ti].removeAllListeners("error"))}this[ti]&&this[ti].on("error",h=>this[eb](new _E(h)));let p;if(A)if(Array.isArray(A)&&A.length>0){p=this[Fd](hh.from(A[0]));for(let h=1;h{this.flush(a),n()};try{this[ti].params(e,r)}finally{this[ti].flush=o}this[ti]&&(this[QU]=e,this[FU]=r)}}}},LU=class extends Hf{constructor(e){super(e,"Deflate")}},MU=class extends Hf{constructor(e){super(e,"Inflate")}},RU=Symbol("_portable"),OU=class extends Hf{constructor(e){super(e,"Gzip"),this[RU]=e&&!!e.portable}[Fd](e){return this[RU]?(this[RU]=!1,e[9]=255,super[Fd](e)):super[Fd](e)}},UU=class extends Hf{constructor(e){super(e,"Gunzip")}},_U=class extends Hf{constructor(e){super(e,"DeflateRaw")}},HU=class extends Hf{constructor(e){super(e,"InflateRaw")}},jU=class extends Hf{constructor(e){super(e,"Unzip")}},rb=class extends tb{constructor(e,r){e=e||{},e.flush=e.flush||Qd.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Qd.BROTLI_OPERATION_FINISH,super(e,r),this[YU]=Qd.BROTLI_OPERATION_FLUSH}},qU=class extends rb{constructor(e){super(e,"BrotliCompress")}},GU=class extends rb{constructor(e){super(e,"BrotliDecompress")}};cl.Deflate=LU;cl.Inflate=MU;cl.Gzip=OU;cl.Gunzip=UU;cl.DeflateRaw=_U;cl.InflateRaw=HU;cl.Unzip=jU;typeof wue.BrotliCompress=="function"?(cl.BrotliCompress=qU,cl.BrotliDecompress=GU):cl.BrotliCompress=cl.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var HE=_((q4t,Iue)=>{var Hat=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;Iue.exports=Hat!=="win32"?t=>t:t=>t&&t.replace(/\\/g,"/")});var nb=_((Y4t,Bue)=>{"use strict";var jat=OE(),VU=HE(),KU=Symbol("slurp");Bue.exports=class extends jat{constructor(e,r,o){switch(super(),this.pause(),this.extended=r,this.globalExtended=o,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=VU(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=VU(e.linkpath),this.uname=e.uname,this.gname=e.gname,r&&this[KU](r),o&&this[KU](o,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let o=this.remain,a=this.blockRemain;return this.remain=Math.max(0,o-r),this.blockRemain=Math.max(0,a-r),this.ignore?!0:o>=r?super.write(e):super.write(e.slice(0,o))}[KU](e,r){for(let o in e)e[o]!==null&&e[o]!==void 0&&!(r&&o==="path")&&(this[o]=o==="path"||o==="linkpath"?VU(e[o]):e[o])}}});var JU=_(ib=>{"use strict";ib.name=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]);ib.code=new Map(Array.from(ib.name).map(t=>[t[1],t[0]]))});var Sue=_((V4t,Pue)=>{"use strict";var qat=(t,e)=>{if(Number.isSafeInteger(t))t<0?Yat(t,e):Gat(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},Gat=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},Yat=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var o=e.length;o>1;o--){var a=t&255;t=Math.floor(t/256),r?e[o-1]=vue(a):a===0?e[o-1]=0:(r=!0,e[o-1]=Due(a))}},Wat=t=>{let e=t[0],r=e===128?Kat(t.slice(1,t.length)):e===255?Vat(t):null;if(r===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(r))throw Error("parsed number outside of javascript safe integer range");return r},Vat=t=>{for(var e=t.length,r=0,o=!1,a=e-1;a>-1;a--){var n=t[a],u;o?u=vue(n):n===0?u=n:(o=!0,u=Due(n)),u!==0&&(r-=u*Math.pow(256,e-a-1))}return r},Kat=t=>{for(var e=t.length,r=0,o=e-1;o>-1;o--){var a=t[o];a!==0&&(r+=a*Math.pow(256,e-o-1))}return r},vue=t=>(255^t)&255,Due=t=>(255^t)+1&255;Pue.exports={encode:qat,parse:Wat}});var qE=_((K4t,bue)=>{"use strict";var zU=JU(),jE=Be("path").posix,xue=Sue(),XU=Symbol("slurp"),ul=Symbol("type"),e3=class{constructor(e,r,o,a){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[ul]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,r||0,o,a):e&&this.set(e)}decode(e,r,o,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=Td(e,r,100),this.mode=gh(e,r+100,8),this.uid=gh(e,r+108,8),this.gid=gh(e,r+116,8),this.size=gh(e,r+124,12),this.mtime=ZU(e,r+136,12),this.cksum=gh(e,r+148,12),this[XU](o),this[XU](a,!0),this[ul]=Td(e,r+156,1),this[ul]===""&&(this[ul]="0"),this[ul]==="0"&&this.path.substr(-1)==="/"&&(this[ul]="5"),this[ul]==="5"&&(this.size=0),this.linkpath=Td(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=Td(e,r+265,32),this.gname=Td(e,r+297,32),this.devmaj=gh(e,r+329,8),this.devmin=gh(e,r+337,8),e[r+475]!==0){let u=Td(e,r+345,155);this.path=u+"/"+this.path}else{let u=Td(e,r+345,130);u&&(this.path=u+"/"+this.path),this.atime=ZU(e,r+476,12),this.ctime=ZU(e,r+488,12)}let n=8*32;for(let u=r;u=r+512))throw new Error("need 512 bytes for header");let o=this.ctime||this.atime?130:155,a=Jat(this.path||"",o),n=a[0],u=a[1];this.needPax=a[2],this.needPax=Rd(e,r,100,n)||this.needPax,this.needPax=dh(e,r+100,8,this.mode)||this.needPax,this.needPax=dh(e,r+108,8,this.uid)||this.needPax,this.needPax=dh(e,r+116,8,this.gid)||this.needPax,this.needPax=dh(e,r+124,12,this.size)||this.needPax,this.needPax=$U(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[ul].charCodeAt(0),this.needPax=Rd(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=Rd(e,r+265,32,this.uname)||this.needPax,this.needPax=Rd(e,r+297,32,this.gname)||this.needPax,this.needPax=dh(e,r+329,8,this.devmaj)||this.needPax,this.needPax=dh(e,r+337,8,this.devmin)||this.needPax,this.needPax=Rd(e,r+345,o,u)||this.needPax,e[r+475]!==0?this.needPax=Rd(e,r+345,155,u)||this.needPax:(this.needPax=Rd(e,r+345,130,u)||this.needPax,this.needPax=$U(e,r+476,12,this.atime)||this.needPax,this.needPax=$U(e,r+488,12,this.ctime)||this.needPax);let A=8*32;for(let p=r;p{let o=t,a="",n,u=jE.parse(t).root||".";if(Buffer.byteLength(o)<100)n=[o,a,!1];else{a=jE.dirname(o),o=jE.basename(o);do Buffer.byteLength(o)<=100&&Buffer.byteLength(a)<=e?n=[o,a,!1]:Buffer.byteLength(o)>100&&Buffer.byteLength(a)<=e?n=[o.substr(0,100-1),a,!0]:(o=jE.join(jE.basename(a),o),a=jE.dirname(a));while(a!==u&&!n);n||(n=[t.substr(0,100-1),"",!0])}return n},Td=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),ZU=(t,e,r)=>zat(gh(t,e,r)),zat=t=>t===null?null:new Date(t*1e3),gh=(t,e,r)=>t[e]&128?xue.parse(t.slice(e,e+r)):Zat(t,e,r),Xat=t=>isNaN(t)?null:t,Zat=(t,e,r)=>Xat(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),$at={12:8589934591,8:2097151},dh=(t,e,r,o)=>o===null?!1:o>$at[r]||o<0?(xue.encode(o,t.slice(e,e+r)),!0):(elt(t,e,r,o),!1),elt=(t,e,r,o)=>t.write(tlt(o,r),e,r,"ascii"),tlt=(t,e)=>rlt(Math.floor(t).toString(8),e),rlt=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",$U=(t,e,r,o)=>o===null?!1:dh(t,e,r,o.getTime()/1e3),nlt=new Array(156).join("\0"),Rd=(t,e,r,o)=>o===null?!1:(t.write(o+nlt,e,r,"utf8"),o.length!==Buffer.byteLength(o)||o.length>r);bue.exports=e3});var sb=_((J4t,kue)=>{"use strict";var ilt=qE(),slt=Be("path"),j1=class{constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=r||!1}encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byteLength(e),o=512*Math.ceil(1+r/512),a=Buffer.allocUnsafe(o);for(let n=0;n<512;n++)a[n]=0;new ilt({path:("PaxHeader/"+slt.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:r,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(a),a.write(e,512,r,"utf8");for(let n=r+512;n=Math.pow(10,n)&&(n+=1),n+a+o}};j1.parse=(t,e,r)=>new j1(olt(alt(t),e),r);var olt=(t,e)=>e?Object.keys(t).reduce((r,o)=>(r[o]=t[o],r),e):t,alt=t=>t.replace(/\n$/,"").split(` +`).reduce(llt,Object.create(null)),llt=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let o=e.split("="),a=o.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!a)return t;let n=o.join("=");return t[a]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(a)?new Date(n*1e3):/^[0-9]+$/.test(n)?+n:n,t};kue.exports=j1});var GE=_((z4t,Que)=>{Que.exports=t=>{let e=t.length-1,r=-1;for(;e>-1&&t.charAt(e)==="/";)r=e,e--;return r===-1?t:t.slice(0,r)}});var ob=_((X4t,Fue)=>{"use strict";Fue.exports=t=>class extends t{warn(e,r,o={}){this.file&&(o.file=this.file),this.cwd&&(o.cwd=this.cwd),o.code=r instanceof Error&&r.code||e,o.tarCode=e,!this.strict&&o.recoverable!==!1?(r instanceof Error&&(o=Object.assign(r,o),r=r.message),this.emit("warn",o.tarCode,r,o)):r instanceof Error?this.emit("error",Object.assign(r,o)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),o))}}});var r3=_(($4t,Tue)=>{"use strict";var ab=["|","<",">","?",":"],t3=ab.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),clt=new Map(ab.map((t,e)=>[t,t3[e]])),ult=new Map(t3.map((t,e)=>[t,ab[e]]));Tue.exports={encode:t=>ab.reduce((e,r)=>e.split(r).join(clt.get(r)),t),decode:t=>t3.reduce((e,r)=>e.split(r).join(ult.get(r)),t)}});var n3=_((eUt,Nue)=>{var{isAbsolute:Alt,parse:Rue}=Be("path").win32;Nue.exports=t=>{let e="",r=Rue(t);for(;Alt(t)||r.root;){let o=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.substr(o.length),e+=o,r=Rue(t)}return[e,t]}});var Mue=_((tUt,Lue)=>{"use strict";Lue.exports=(t,e,r)=>(t&=4095,r&&(t=(t|384)&-19),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t)});var p3=_((iUt,Xue)=>{"use strict";var Gue=OE(),Yue=sb(),Wue=qE(),oA=Be("fs"),Oue=Be("path"),sA=HE(),flt=GE(),Vue=(t,e)=>e?(t=sA(t).replace(/^\.(\/|$)/,""),flt(e)+"/"+t):sA(t),plt=16*1024*1024,Uue=Symbol("process"),_ue=Symbol("file"),Hue=Symbol("directory"),s3=Symbol("symlink"),jue=Symbol("hardlink"),q1=Symbol("header"),lb=Symbol("read"),o3=Symbol("lstat"),ub=Symbol("onlstat"),a3=Symbol("onread"),l3=Symbol("onreadlink"),c3=Symbol("openfile"),u3=Symbol("onopenfile"),mh=Symbol("close"),Ab=Symbol("mode"),A3=Symbol("awaitDrain"),i3=Symbol("ondrain"),aA=Symbol("prefix"),que=Symbol("hadError"),Kue=ob(),hlt=r3(),Jue=n3(),zue=Mue(),fb=Kue(class extends Gue{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=sA(e),this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||plt,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=sA(r.cwd||process.cwd()),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime||null,this.prefix=r.prefix?sA(r.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Jue(this.path);a&&(this.path=n,o=a)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=hlt.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=sA(r.absolute||Oue.resolve(this.cwd,e)),this.path===""&&(this.path="./"),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.statCache.has(this.absolute)?this[ub](this.statCache.get(this.absolute)):this[o3]()}emit(e,...r){return e==="error"&&(this[que]=!0),super.emit(e,...r)}[o3](){oA.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[ub](r)})}[ub](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=dlt(e),this.emit("stat",e),this[Uue]()}[Uue](){switch(this.type){case"File":return this[_ue]();case"Directory":return this[Hue]();case"SymbolicLink":return this[s3]();default:return this.end()}}[Ab](e){return zue(e,this.type==="Directory",this.portable)}[aA](e){return Vue(e,this.prefix)}[q1](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new Wue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this[Ab](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new Yue({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[Hue](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[q1](),this.end()}[s3](){oA.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[l3](r)})}[l3](e){this.linkpath=sA(e),this[q1](),this.end()}[jue](e){this.type="Link",this.linkpath=sA(Oue.relative(this.cwd,e)),this.stat.size=0,this[q1](),this.end()}[_ue](){if(this.stat.nlink>1){let e=this.stat.dev+":"+this.stat.ino;if(this.linkCache.has(e)){let r=this.linkCache.get(e);if(r.indexOf(this.cwd)===0)return this[jue](r)}this.linkCache.set(e,this.absolute)}if(this[q1](),this.stat.size===0)return this.end();this[c3]()}[c3](){oA.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[u3](r)})}[u3](e){if(this.fd=e,this[que])return this[mh]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let r=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(r),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[lb]()}[lb](){let{fd:e,buf:r,offset:o,length:a,pos:n}=this;oA.read(e,r,o,a,n,(u,A)=>{if(u)return this[mh](()=>this.emit("error",u));this[a3](A)})}[mh](e){oA.close(this.fd,e)}[a3](e){if(e<=0&&this.remain>0){let a=new Error("encountered unexpected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[mh](()=>this.emit("error",a))}if(e>this.remain){let a=new Error("did not encounter expected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[mh](()=>this.emit("error",a))}if(e===this.remain)for(let a=e;athis[i3]())}[A3](e){this.once("drain",e)}write(e){if(this.blockRemaine?this.emit("error",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[lb]()}}),f3=class extends fb{[o3](){this[ub](oA.lstatSync(this.absolute))}[s3](){this[l3](oA.readlinkSync(this.absolute))}[c3](){this[u3](oA.openSync(this.absolute,"r"))}[lb](){let e=!0;try{let{fd:r,buf:o,offset:a,length:n,pos:u}=this,A=oA.readSync(r,o,a,n,u);this[a3](A),e=!1}finally{if(e)try{this[mh](()=>{})}catch{}}}[A3](e){e()}[mh](e){oA.closeSync(this.fd),e()}},glt=Kue(class extends Gue{constructor(e,r){r=r||{},super(r),this.preservePaths=!!r.preservePaths,this.portable=!!r.portable,this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.readEntry=e,this.type=e.type,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=r.prefix||null,this.path=sA(e.path),this.mode=this[Ab](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:r.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=sA(e.linkpath),typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Jue(this.path);a&&(this.path=n,o=a)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new Wue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.header.encode()&&!this.noPax&&super.write(new Yue({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[aA](e){return Vue(e,this.prefix)}[Ab](e){return zue(e,this.type==="Directory",this.portable)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=r,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});fb.Sync=f3;fb.Tar=glt;var dlt=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";Xue.exports=fb});var wb=_((oUt,iAe)=>{"use strict";var Eb=class{constructor(e,r){this.path=e||"./",this.absolute=r,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},mlt=OE(),ylt=WU(),Elt=nb(),I3=p3(),Clt=I3.Sync,wlt=I3.Tar,Ilt=BP(),Zue=Buffer.alloc(1024),gb=Symbol("onStat"),pb=Symbol("ended"),lA=Symbol("queue"),YE=Symbol("current"),Nd=Symbol("process"),hb=Symbol("processing"),$ue=Symbol("processJob"),cA=Symbol("jobs"),h3=Symbol("jobDone"),db=Symbol("addFSEntry"),eAe=Symbol("addTarEntry"),y3=Symbol("stat"),E3=Symbol("readdir"),mb=Symbol("onreaddir"),yb=Symbol("pipe"),tAe=Symbol("entry"),g3=Symbol("entryOpt"),C3=Symbol("writeEntryClass"),nAe=Symbol("write"),d3=Symbol("ondrain"),Cb=Be("fs"),rAe=Be("path"),Blt=ob(),m3=HE(),B3=Blt(class extends mlt{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||"",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=m3(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[C3]=I3,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!="object"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new ylt.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[d3]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[d3]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter=="function"?e.filter:r=>!0,this[lA]=new Ilt,this[cA]=0,this.jobs=+e.jobs||4,this[hb]=!1,this[pb]=!1}[nAe](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[pb]=!0,this[Nd](),this}write(e){if(this[pb])throw new Error("write after end");return e instanceof Elt?this[eAe](e):this[db](e),this.flowing}[eAe](e){let r=m3(rAe.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let o=new Eb(e.path,r,!1);o.entry=new wlt(e,this[g3](o)),o.entry.on("end",a=>this[h3](o)),this[cA]+=1,this[lA].push(o)}this[Nd]()}[db](e){let r=m3(rAe.resolve(this.cwd,e));this[lA].push(new Eb(e,r)),this[Nd]()}[y3](e){e.pending=!0,this[cA]+=1;let r=this.follow?"stat":"lstat";Cb[r](e.absolute,(o,a)=>{e.pending=!1,this[cA]-=1,o?this.emit("error",o):this[gb](e,a)})}[gb](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[Nd]()}[E3](e){e.pending=!0,this[cA]+=1,Cb.readdir(e.absolute,(r,o)=>{if(e.pending=!1,this[cA]-=1,r)return this.emit("error",r);this[mb](e,o)})}[mb](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[Nd]()}[Nd](){if(!this[hb]){this[hb]=!0;for(let e=this[lA].head;e!==null&&this[cA]this.warn(r,o,a),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[tAe](e){this[cA]+=1;try{return new this[C3](e.path,this[g3](e)).on("end",()=>this[h3](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[d3](){this[YE]&&this[YE].entry&&this[YE].entry.resume()}[yb](e){e.piped=!0,e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[db](u+a)});let r=e.entry,o=this.zip;o?r.on("data",a=>{o.write(a)||r.pause()}):r.on("data",a=>{super.write(a)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),w3=class extends B3{constructor(e){super(e),this[C3]=Clt}pause(){}resume(){}[y3](e){let r=this.follow?"statSync":"lstatSync";this[gb](e,Cb[r](e.absolute))}[E3](e,r){this[mb](e,Cb.readdirSync(e.absolute))}[yb](e){let r=e.entry,o=this.zip;e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[db](u+a)}),o?r.on("data",a=>{o.write(a)}):r.on("data",a=>{super[nAe](a)})}};B3.Sync=w3;iAe.exports=B3});var $E=_(Y1=>{"use strict";var vlt=OE(),Dlt=Be("events").EventEmitter,Qa=Be("fs"),P3=Qa.writev;if(!P3){let t=process.binding("fs"),e=t.FSReqWrap||t.FSReqCallback;P3=(r,o,a,n)=>{let u=(p,h)=>n(p,h,o),A=new e;A.oncomplete=u,t.writeBuffers(r,o,a,A)}}var XE=Symbol("_autoClose"),Yc=Symbol("_close"),G1=Symbol("_ended"),Gn=Symbol("_fd"),sAe=Symbol("_finished"),Eh=Symbol("_flags"),v3=Symbol("_flush"),S3=Symbol("_handleChunk"),x3=Symbol("_makeBuf"),Pb=Symbol("_mode"),Ib=Symbol("_needDrain"),JE=Symbol("_onerror"),ZE=Symbol("_onopen"),D3=Symbol("_onread"),VE=Symbol("_onwrite"),Ch=Symbol("_open"),jf=Symbol("_path"),Ld=Symbol("_pos"),uA=Symbol("_queue"),KE=Symbol("_read"),oAe=Symbol("_readSize"),yh=Symbol("_reading"),Bb=Symbol("_remain"),aAe=Symbol("_size"),vb=Symbol("_write"),WE=Symbol("_writing"),Db=Symbol("_defaultFlag"),zE=Symbol("_errored"),Sb=class extends vlt{constructor(e,r){if(r=r||{},super(r),this.readable=!0,this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[zE]=!1,this[Gn]=typeof r.fd=="number"?r.fd:null,this[jf]=e,this[oAe]=r.readSize||16*1024*1024,this[yh]=!1,this[aAe]=typeof r.size=="number"?r.size:1/0,this[Bb]=this[aAe],this[XE]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[Gn]=="number"?this[KE]():this[Ch]()}get fd(){return this[Gn]}get path(){return this[jf]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[Ch](){Qa.open(this[jf],"r",(e,r)=>this[ZE](e,r))}[ZE](e,r){e?this[JE](e):(this[Gn]=r,this.emit("open",r),this[KE]())}[x3](){return Buffer.allocUnsafe(Math.min(this[oAe],this[Bb]))}[KE](){if(!this[yh]){this[yh]=!0;let e=this[x3]();if(e.length===0)return process.nextTick(()=>this[D3](null,0,e));Qa.read(this[Gn],e,0,e.length,null,(r,o,a)=>this[D3](r,o,a))}}[D3](e,r,o){this[yh]=!1,e?this[JE](e):this[S3](r,o)&&this[KE]()}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}[JE](e){this[yh]=!0,this[Yc](),this.emit("error",e)}[S3](e,r){let o=!1;return this[Bb]-=e,e>0&&(o=super.write(ethis[ZE](e,r))}[ZE](e,r){this[Db]&&this[Eh]==="r+"&&e&&e.code==="ENOENT"?(this[Eh]="w",this[Ch]()):e?this[JE](e):(this[Gn]=r,this.emit("open",r),this[v3]())}end(e,r){return e&&this.write(e,r),this[G1]=!0,!this[WE]&&!this[uA].length&&typeof this[Gn]=="number"&&this[VE](null,0),this}write(e,r){return typeof e=="string"&&(e=Buffer.from(e,r)),this[G1]?(this.emit("error",new Error("write() after end()")),!1):this[Gn]===null||this[WE]||this[uA].length?(this[uA].push(e),this[Ib]=!0,!1):(this[WE]=!0,this[vb](e),!0)}[vb](e){Qa.write(this[Gn],e,0,e.length,this[Ld],(r,o)=>this[VE](r,o))}[VE](e,r){e?this[JE](e):(this[Ld]!==null&&(this[Ld]+=r),this[uA].length?this[v3]():(this[WE]=!1,this[G1]&&!this[sAe]?(this[sAe]=!0,this[Yc](),this.emit("finish")):this[Ib]&&(this[Ib]=!1,this.emit("drain"))))}[v3](){if(this[uA].length===0)this[G1]&&this[VE](null,0);else if(this[uA].length===1)this[vb](this[uA].pop());else{let e=this[uA];this[uA]=[],P3(this[Gn],e,this[Ld],(r,o)=>this[VE](r,o))}}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}},k3=class extends xb{[Ch](){let e;if(this[Db]&&this[Eh]==="r+")try{e=Qa.openSync(this[jf],this[Eh],this[Pb])}catch(r){if(r.code==="ENOENT")return this[Eh]="w",this[Ch]();throw r}else e=Qa.openSync(this[jf],this[Eh],this[Pb]);this[ZE](null,e)}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.closeSync(e),this.emit("close")}}[vb](e){let r=!0;try{this[VE](null,Qa.writeSync(this[Gn],e,0,e.length,this[Ld])),r=!1}finally{if(r)try{this[Yc]()}catch{}}}};Y1.ReadStream=Sb;Y1.ReadStreamSync=b3;Y1.WriteStream=xb;Y1.WriteStreamSync=k3});var Nb=_((cUt,hAe)=>{"use strict";var Plt=ob(),Slt=qE(),xlt=Be("events"),blt=BP(),klt=1024*1024,Qlt=nb(),lAe=sb(),Flt=WU(),Q3=Buffer.from([31,139]),Xl=Symbol("state"),Md=Symbol("writeEntry"),qf=Symbol("readEntry"),F3=Symbol("nextEntry"),cAe=Symbol("processEntry"),Zl=Symbol("extendedHeader"),W1=Symbol("globalExtendedHeader"),wh=Symbol("meta"),uAe=Symbol("emitMeta"),fi=Symbol("buffer"),Gf=Symbol("queue"),Od=Symbol("ended"),AAe=Symbol("emittedEnd"),Ud=Symbol("emit"),Fa=Symbol("unzip"),bb=Symbol("consumeChunk"),kb=Symbol("consumeChunkSub"),T3=Symbol("consumeBody"),fAe=Symbol("consumeMeta"),pAe=Symbol("consumeHeader"),Qb=Symbol("consuming"),R3=Symbol("bufferConcat"),N3=Symbol("maybeEnd"),V1=Symbol("writing"),Ih=Symbol("aborted"),Fb=Symbol("onDone"),_d=Symbol("sawValidEntry"),Tb=Symbol("sawNullBlock"),Rb=Symbol("sawEOF"),Tlt=t=>!0;hAe.exports=Plt(class extends xlt{constructor(e){e=e||{},super(e),this.file=e.file||"",this[_d]=null,this.on(Fb,r=>{(this[Xl]==="begin"||this[_d]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(Fb,e.ondone):this.on(Fb,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||klt,this.filter=typeof e.filter=="function"?e.filter:Tlt,this.writable=!0,this.readable=!1,this[Gf]=new blt,this[fi]=null,this[qf]=null,this[Md]=null,this[Xl]="begin",this[wh]="",this[Zl]=null,this[W1]=null,this[Od]=!1,this[Fa]=null,this[Ih]=!1,this[Tb]=!1,this[Rb]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[pAe](e,r){this[_d]===null&&(this[_d]=!1);let o;try{o=new Slt(e,r,this[Zl],this[W1])}catch(a){return this.warn("TAR_ENTRY_INVALID",a)}if(o.nullBlock)this[Tb]?(this[Rb]=!0,this[Xl]==="begin"&&(this[Xl]="header"),this[Ud]("eof")):(this[Tb]=!0,this[Ud]("nullBlock"));else if(this[Tb]=!1,!o.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:o});else if(!o.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:o});else{let a=o.type;if(/^(Symbolic)?Link$/.test(a)&&!o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:o});else if(!/^(Symbolic)?Link$/.test(a)&&o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:o});else{let n=this[Md]=new Qlt(o,this[Zl],this[W1]);if(!this[_d])if(n.remain){let u=()=>{n.invalid||(this[_d]=!0)};n.on("end",u)}else this[_d]=!0;n.meta?n.size>this.maxMetaEntrySize?(n.ignore=!0,this[Ud]("ignoredEntry",n),this[Xl]="ignore",n.resume()):n.size>0&&(this[wh]="",n.on("data",u=>this[wh]+=u),this[Xl]="meta"):(this[Zl]=null,n.ignore=n.ignore||!this.filter(n.path,n),n.ignore?(this[Ud]("ignoredEntry",n),this[Xl]=n.remain?"ignore":"header",n.resume()):(n.remain?this[Xl]="body":(this[Xl]="header",n.end()),this[qf]?this[Gf].push(n):(this[Gf].push(n),this[F3]())))}}}[cAe](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[qf]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",o=>this[F3]()),r=!1)):(this[qf]=null,r=!1),r}[F3](){do;while(this[cAe](this[Gf].shift()));if(!this[Gf].length){let e=this[qf];!e||e.flowing||e.size===e.remain?this[V1]||this.emit("drain"):e.once("drain",o=>this.emit("drain"))}}[T3](e,r){let o=this[Md],a=o.blockRemain,n=a>=e.length&&r===0?e:e.slice(r,r+a);return o.write(n),o.blockRemain||(this[Xl]="header",this[Md]=null,o.end()),n.length}[fAe](e,r){let o=this[Md],a=this[T3](e,r);return this[Md]||this[uAe](o),a}[Ud](e,r,o){!this[Gf].length&&!this[qf]?this.emit(e,r,o):this[Gf].push([e,r,o])}[uAe](e){switch(this[Ud]("meta",this[wh]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[Zl]=lAe.parse(this[wh],this[Zl],!1);break;case"GlobalExtendedHeader":this[W1]=lAe.parse(this[wh],this[W1],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[Zl]=this[Zl]||Object.create(null),this[Zl].path=this[wh].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[Zl]=this[Zl]||Object.create(null),this[Zl].linkpath=this[wh].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[Ih]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[Ih])return;if(this[Fa]===null&&e){if(this[fi]&&(e=Buffer.concat([this[fi],e]),this[fi]=null),e.lengththis[bb](n)),this[Fa].on("error",n=>this.abort(n)),this[Fa].on("end",n=>{this[Od]=!0,this[bb]()}),this[V1]=!0;let a=this[Fa][o?"end":"write"](e);return this[V1]=!1,a}}this[V1]=!0,this[Fa]?this[Fa].write(e):this[bb](e),this[V1]=!1;let r=this[Gf].length?!1:this[qf]?this[qf].flowing:!0;return!r&&!this[Gf].length&&this[qf].once("drain",o=>this.emit("drain")),r}[R3](e){e&&!this[Ih]&&(this[fi]=this[fi]?Buffer.concat([this[fi],e]):e)}[N3](){if(this[Od]&&!this[AAe]&&!this[Ih]&&!this[Qb]){this[AAe]=!0;let e=this[Md];if(e&&e.blockRemain){let r=this[fi]?this[fi].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[fi]&&e.write(this[fi]),e.end()}this[Ud](Fb)}}[bb](e){if(this[Qb])this[R3](e);else if(!e&&!this[fi])this[N3]();else{if(this[Qb]=!0,this[fi]){this[R3](e);let r=this[fi];this[fi]=null,this[kb](r)}else this[kb](e);for(;this[fi]&&this[fi].length>=512&&!this[Ih]&&!this[Rb];){let r=this[fi];this[fi]=null,this[kb](r)}this[Qb]=!1}(!this[fi]||this[Od])&&this[N3]()}[kb](e){let r=0,o=e.length;for(;r+512<=o&&!this[Ih]&&!this[Rb];)switch(this[Xl]){case"begin":case"header":this[pAe](e,r),r+=512;break;case"ignore":case"body":r+=this[T3](e,r);break;case"meta":r+=this[fAe](e,r);break;default:throw new Error("invalid state: "+this[Xl])}r{"use strict";var Rlt=LE(),dAe=Nb(),eC=Be("fs"),Nlt=$E(),gAe=Be("path"),L3=GE();yAe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Rlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Mlt(o,e),o.noResume||Llt(o),o.file&&o.sync?Olt(o):o.file?Ult(o,r):mAe(o)};var Llt=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},Mlt=(t,e)=>{let r=new Map(e.map(n=>[L3(n),!0])),o=t.filter,a=(n,u)=>{let A=u||gAe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(gAe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(L3(n)):n=>a(L3(n))},Olt=t=>{let e=mAe(t),r=t.file,o=!0,a;try{let n=eC.statSync(r),u=t.maxReadSize||16*1024*1024;if(n.size{let r=new dAe(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("end",u),eC.stat(a,(p,h)=>{if(p)A(p);else{let E=new Nlt.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},mAe=t=>new dAe(t)});var vAe=_((AUt,BAe)=>{"use strict";var _lt=LE(),Mb=wb(),EAe=$E(),CAe=Lb(),wAe=Be("path");BAe.exports=(t,e,r)=>{if(typeof e=="function"&&(r=e),Array.isArray(t)&&(e=t,t={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let o=_lt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return o.file&&o.sync?Hlt(o,e):o.file?jlt(o,e,r):o.sync?qlt(o,e):Glt(o,e)};var Hlt=(t,e)=>{let r=new Mb.Sync(t),o=new EAe.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(o),IAe(r,e)},jlt=(t,e,r)=>{let o=new Mb(t),a=new EAe.WriteStream(t.file,{mode:t.mode||438});o.pipe(a);let n=new Promise((u,A)=>{a.on("error",A),a.on("close",u),o.on("error",A)});return M3(o,e),r?n.then(r,r):n},IAe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?CAe({file:wAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},M3=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return CAe({file:wAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>M3(t,e));t.add(r)}t.end()},qlt=(t,e)=>{let r=new Mb.Sync(t);return IAe(r,e),r},Glt=(t,e)=>{let r=new Mb(t);return M3(r,e),r}});var O3=_((fUt,QAe)=>{"use strict";var Ylt=LE(),DAe=wb(),Al=Be("fs"),PAe=$E(),SAe=Lb(),xAe=Be("path"),bAe=qE();QAe.exports=(t,e,r)=>{let o=Ylt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),o.sync?Wlt(o,e):Klt(o,e,r)};var Wlt=(t,e)=>{let r=new DAe.Sync(t),o=!0,a,n;try{try{a=Al.openSync(t.file,"r+")}catch(p){if(p.code==="ENOENT")a=Al.openSync(t.file,"w+");else throw p}let u=Al.fstatSync(a),A=Buffer.alloc(512);e:for(n=0;nu.size)break;n+=h,t.mtimeCache&&t.mtimeCache.set(p.path,p.mtime)}o=!1,Vlt(t,r,n,a,e)}finally{if(o)try{Al.closeSync(a)}catch{}}},Vlt=(t,e,r,o,a)=>{let n=new PAe.WriteStreamSync(t.file,{fd:o,start:r});e.pipe(n),Jlt(e,a)},Klt=(t,e,r)=>{e=Array.from(e);let o=new DAe(t),a=(u,A,p)=>{let h=(C,T)=>{C?Al.close(u,L=>p(C)):p(null,T)},E=0;if(A===0)return h(null,0);let I=0,v=Buffer.alloc(512),b=(C,T)=>{if(C)return h(C);if(I+=T,I<512&&T)return Al.read(u,v,I,v.length-I,E+I,b);if(E===0&&v[0]===31&&v[1]===139)return h(new Error("cannot append to compressed archives"));if(I<512)return h(null,E);let L=new bAe(v);if(!L.cksumValid)return h(null,E);let U=512*Math.ceil(L.size/512);if(E+U+512>A||(E+=U+512,E>=A))return h(null,E);t.mtimeCache&&t.mtimeCache.set(L.path,L.mtime),I=0,Al.read(u,v,0,512,E,b)};Al.read(u,v,0,512,E,b)},n=new Promise((u,A)=>{o.on("error",A);let p="r+",h=(E,I)=>{if(E&&E.code==="ENOENT"&&p==="r+")return p="w+",Al.open(t.file,p,h);if(E)return A(E);Al.fstat(I,(v,b)=>{if(v)return Al.close(I,()=>A(v));a(I,b.size,(C,T)=>{if(C)return A(C);let L=new PAe.WriteStream(t.file,{fd:I,start:T});o.pipe(L),L.on("error",A),L.on("close",u),kAe(o,e)})})};Al.open(t.file,p,h)});return r?n.then(r,r):n},Jlt=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?SAe({file:xAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},kAe=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return SAe({file:xAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>kAe(t,e));t.add(r)}t.end()}});var TAe=_((pUt,FAe)=>{"use strict";var zlt=LE(),Xlt=O3();FAe.exports=(t,e,r)=>{let o=zlt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),Zlt(o),Xlt(o,e,r)};var Zlt=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,o)=>e(r,o)&&!(t.mtimeCache.get(r)>o.mtime):(r,o)=>!(t.mtimeCache.get(r)>o.mtime)}});var LAe=_((hUt,NAe)=>{var{promisify:RAe}=Be("util"),Bh=Be("fs"),$lt=t=>{if(!t)t={mode:511,fs:Bh};else if(typeof t=="object")t={mode:511,fs:Bh,...t};else if(typeof t=="number")t={mode:t,fs:Bh};else if(typeof t=="string")t={mode:parseInt(t,8),fs:Bh};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||Bh.mkdir,t.mkdirAsync=RAe(t.mkdir),t.stat=t.stat||t.fs.stat||Bh.stat,t.statAsync=RAe(t.stat),t.statSync=t.statSync||t.fs.statSync||Bh.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||Bh.mkdirSync,t};NAe.exports=$lt});var OAe=_((gUt,MAe)=>{var ect=process.platform,{resolve:tct,parse:rct}=Be("path"),nct=t=>{if(/\0/.test(t))throw Object.assign(new TypeError("path must be a string without null bytes"),{path:t,code:"ERR_INVALID_ARG_VALUE"});if(t=tct(t),ect==="win32"){let e=/[*|"<>?:]/,{root:r}=rct(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};MAe.exports=nct});var qAe=_((dUt,jAe)=>{var{dirname:UAe}=Be("path"),_Ae=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(o=>o.isDirectory()?r:void 0,o=>o.code==="ENOENT"?_Ae(t,UAe(e),e):void 0),HAe=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(o){return o.code==="ENOENT"?HAe(t,UAe(e),e):void 0}};jAe.exports={findMade:_Ae,findMadeSync:HAe}});var H3=_((mUt,YAe)=>{var{dirname:GAe}=Be("path"),U3=(t,e,r)=>{e.recursive=!1;let o=GAe(t);return o===t?e.mkdirAsync(t,e).catch(a=>{if(a.code!=="EISDIR")throw a}):e.mkdirAsync(t,e).then(()=>r||t,a=>{if(a.code==="ENOENT")return U3(o,e).then(n=>U3(t,e,n));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;return e.statAsync(t).then(n=>{if(n.isDirectory())return r;throw a},()=>{throw a})})},_3=(t,e,r)=>{let o=GAe(t);if(e.recursive=!1,o===t)try{return e.mkdirSync(t,e)}catch(a){if(a.code!=="EISDIR")throw a;return}try{return e.mkdirSync(t,e),r||t}catch(a){if(a.code==="ENOENT")return _3(t,e,_3(o,e,r));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;try{if(!e.statSync(t).isDirectory())throw a}catch{throw a}}};YAe.exports={mkdirpManual:U3,mkdirpManualSync:_3}});var KAe=_((yUt,VAe)=>{var{dirname:WAe}=Be("path"),{findMade:ict,findMadeSync:sct}=qAe(),{mkdirpManual:oct,mkdirpManualSync:act}=H3(),lct=(t,e)=>(e.recursive=!0,WAe(t)===t?e.mkdirAsync(t,e):ict(e,t).then(o=>e.mkdirAsync(t,e).then(()=>o).catch(a=>{if(a.code==="ENOENT")return oct(t,e);throw a}))),cct=(t,e)=>{if(e.recursive=!0,WAe(t)===t)return e.mkdirSync(t,e);let o=sct(e,t);try{return e.mkdirSync(t,e),o}catch(a){if(a.code==="ENOENT")return act(t,e);throw a}};VAe.exports={mkdirpNative:lct,mkdirpNativeSync:cct}});var ZAe=_((EUt,XAe)=>{var JAe=Be("fs"),uct=process.version,j3=uct.replace(/^v/,"").split("."),zAe=+j3[0]>10||+j3[0]==10&&+j3[1]>=12,Act=zAe?t=>t.mkdir===JAe.mkdir:()=>!1,fct=zAe?t=>t.mkdirSync===JAe.mkdirSync:()=>!1;XAe.exports={useNative:Act,useNativeSync:fct}});var ife=_((CUt,nfe)=>{var tC=LAe(),rC=OAe(),{mkdirpNative:$Ae,mkdirpNativeSync:efe}=KAe(),{mkdirpManual:tfe,mkdirpManualSync:rfe}=H3(),{useNative:pct,useNativeSync:hct}=ZAe(),nC=(t,e)=>(t=rC(t),e=tC(e),pct(e)?$Ae(t,e):tfe(t,e)),gct=(t,e)=>(t=rC(t),e=tC(e),hct(e)?efe(t,e):rfe(t,e));nC.sync=gct;nC.native=(t,e)=>$Ae(rC(t),tC(e));nC.manual=(t,e)=>tfe(rC(t),tC(e));nC.nativeSync=(t,e)=>efe(rC(t),tC(e));nC.manualSync=(t,e)=>rfe(rC(t),tC(e));nfe.exports=nC});var Afe=_((wUt,ufe)=>{"use strict";var $l=Be("fs"),Hd=Be("path"),dct=$l.lchown?"lchown":"chown",mct=$l.lchownSync?"lchownSync":"chownSync",ofe=$l.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),sfe=(t,e,r)=>{try{return $l[mct](t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},yct=(t,e,r)=>{try{return $l.chownSync(t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},Ect=ofe?(t,e,r,o)=>a=>{!a||a.code!=="EISDIR"?o(a):$l.chown(t,e,r,o)}:(t,e,r,o)=>o,q3=ofe?(t,e,r)=>{try{return sfe(t,e,r)}catch(o){if(o.code!=="EISDIR")throw o;yct(t,e,r)}}:(t,e,r)=>sfe(t,e,r),Cct=process.version,afe=(t,e,r)=>$l.readdir(t,e,r),wct=(t,e)=>$l.readdirSync(t,e);/^v4\./.test(Cct)&&(afe=(t,e,r)=>$l.readdir(t,r));var Ob=(t,e,r,o)=>{$l[dct](t,e,r,Ect(t,e,r,a=>{o(a&&a.code!=="ENOENT"?a:null)}))},lfe=(t,e,r,o,a)=>{if(typeof e=="string")return $l.lstat(Hd.resolve(t,e),(n,u)=>{if(n)return a(n.code!=="ENOENT"?n:null);u.name=e,lfe(t,u,r,o,a)});if(e.isDirectory())G3(Hd.resolve(t,e.name),r,o,n=>{if(n)return a(n);let u=Hd.resolve(t,e.name);Ob(u,r,o,a)});else{let n=Hd.resolve(t,e.name);Ob(n,r,o,a)}},G3=(t,e,r,o)=>{afe(t,{withFileTypes:!0},(a,n)=>{if(a){if(a.code==="ENOENT")return o();if(a.code!=="ENOTDIR"&&a.code!=="ENOTSUP")return o(a)}if(a||!n.length)return Ob(t,e,r,o);let u=n.length,A=null,p=h=>{if(!A){if(h)return o(A=h);if(--u===0)return Ob(t,e,r,o)}};n.forEach(h=>lfe(t,h,e,r,p))})},Ict=(t,e,r,o)=>{if(typeof e=="string")try{let a=$l.lstatSync(Hd.resolve(t,e));a.name=e,e=a}catch(a){if(a.code==="ENOENT")return;throw a}e.isDirectory()&&cfe(Hd.resolve(t,e.name),r,o),q3(Hd.resolve(t,e.name),r,o)},cfe=(t,e,r)=>{let o;try{o=wct(t,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")return;if(a.code==="ENOTDIR"||a.code==="ENOTSUP")return q3(t,e,r);throw a}return o&&o.length&&o.forEach(a=>Ict(t,a,e,r)),q3(t,e,r)};ufe.exports=G3;G3.sync=cfe});var gfe=_((IUt,Y3)=>{"use strict";var ffe=ife(),ec=Be("fs"),Ub=Be("path"),pfe=Afe(),Wc=HE(),_b=class extends Error{constructor(e,r){super("Cannot extract through symbolic link"),this.path=r,this.symlink=e}get name(){return"SylinkError"}},Hb=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'"),this.path=e,this.code=r}get name(){return"CwdError"}},jb=(t,e)=>t.get(Wc(e)),K1=(t,e,r)=>t.set(Wc(e),r),Bct=(t,e)=>{ec.stat(t,(r,o)=>{(r||!o.isDirectory())&&(r=new Hb(t,r&&r.code||"ENOTDIR")),e(r)})};Y3.exports=(t,e,r)=>{t=Wc(t);let o=e.umask,a=e.mode|448,n=(a&o)!==0,u=e.uid,A=e.gid,p=typeof u=="number"&&typeof A=="number"&&(u!==e.processUid||A!==e.processGid),h=e.preserve,E=e.unlink,I=e.cache,v=Wc(e.cwd),b=(L,U)=>{L?r(L):(K1(I,t,!0),U&&p?pfe(U,u,A,J=>b(J)):n?ec.chmod(t,a,r):r())};if(I&&jb(I,t)===!0)return b();if(t===v)return Bct(t,b);if(h)return ffe(t,{mode:a}).then(L=>b(null,L),b);let T=Wc(Ub.relative(v,t)).split("/");qb(v,T,a,I,E,v,null,b)};var qb=(t,e,r,o,a,n,u,A)=>{if(!e.length)return A(null,u);let p=e.shift(),h=Wc(Ub.resolve(t+"/"+p));if(jb(o,h))return qb(h,e,r,o,a,n,u,A);ec.mkdir(h,r,hfe(h,e,r,o,a,n,u,A))},hfe=(t,e,r,o,a,n,u,A)=>p=>{p?ec.lstat(t,(h,E)=>{if(h)h.path=h.path&&Wc(h.path),A(h);else if(E.isDirectory())qb(t,e,r,o,a,n,u,A);else if(a)ec.unlink(t,I=>{if(I)return A(I);ec.mkdir(t,r,hfe(t,e,r,o,a,n,u,A))});else{if(E.isSymbolicLink())return A(new _b(t,t+"/"+e.join("/")));A(p)}}):(u=u||t,qb(t,e,r,o,a,n,u,A))},vct=t=>{let e=!1,r="ENOTDIR";try{e=ec.statSync(t).isDirectory()}catch(o){r=o.code}finally{if(!e)throw new Hb(t,r)}};Y3.exports.sync=(t,e)=>{t=Wc(t);let r=e.umask,o=e.mode|448,a=(o&r)!==0,n=e.uid,u=e.gid,A=typeof n=="number"&&typeof u=="number"&&(n!==e.processUid||u!==e.processGid),p=e.preserve,h=e.unlink,E=e.cache,I=Wc(e.cwd),v=L=>{K1(E,t,!0),L&&A&&pfe.sync(L,n,u),a&&ec.chmodSync(t,o)};if(E&&jb(E,t)===!0)return v();if(t===I)return vct(I),v();if(p)return v(ffe.sync(t,o));let C=Wc(Ub.relative(I,t)).split("/"),T=null;for(let L=C.shift(),U=I;L&&(U+="/"+L);L=C.shift())if(U=Wc(Ub.resolve(U)),!jb(E,U))try{ec.mkdirSync(U,o),T=T||U,K1(E,U,!0)}catch{let te=ec.lstatSync(U);if(te.isDirectory()){K1(E,U,!0);continue}else if(h){ec.unlinkSync(U),ec.mkdirSync(U,o),T=T||U,K1(E,U,!0);continue}else if(te.isSymbolicLink())return new _b(U,U+"/"+C.join("/"))}return v(T)}});var V3=_((BUt,dfe)=>{var W3=Object.create(null),{hasOwnProperty:Dct}=Object.prototype;dfe.exports=t=>(Dct.call(W3,t)||(W3[t]=t.normalize("NFKD")),W3[t])});var Cfe=_((vUt,Efe)=>{var mfe=Be("assert"),Pct=V3(),Sct=GE(),{join:yfe}=Be("path"),xct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,bct=xct==="win32";Efe.exports=()=>{let t=new Map,e=new Map,r=h=>h.split("/").slice(0,-1).reduce((I,v)=>(I.length&&(v=yfe(I[I.length-1],v)),I.push(v||"/"),I),[]),o=new Set,a=h=>{let E=e.get(h);if(!E)throw new Error("function does not have any path reservations");return{paths:E.paths.map(I=>t.get(I)),dirs:[...E.dirs].map(I=>t.get(I))}},n=h=>{let{paths:E,dirs:I}=a(h);return E.every(v=>v[0]===h)&&I.every(v=>v[0]instanceof Set&&v[0].has(h))},u=h=>o.has(h)||!n(h)?!1:(o.add(h),h(()=>A(h)),!0),A=h=>{if(!o.has(h))return!1;let{paths:E,dirs:I}=e.get(h),v=new Set;return E.forEach(b=>{let C=t.get(b);mfe.equal(C[0],h),C.length===1?t.delete(b):(C.shift(),typeof C[0]=="function"?v.add(C[0]):C[0].forEach(T=>v.add(T)))}),I.forEach(b=>{let C=t.get(b);mfe(C[0]instanceof Set),C[0].size===1&&C.length===1?t.delete(b):C[0].size===1?(C.shift(),v.add(C[0])):C[0].delete(h)}),o.delete(h),v.forEach(b=>u(b)),!0};return{check:n,reserve:(h,E)=>{h=bct?["win32 parallelization disabled"]:h.map(v=>Pct(Sct(yfe(v))).toLowerCase());let I=new Set(h.map(v=>r(v)).reduce((v,b)=>v.concat(b)));return e.set(E,{dirs:I,paths:h}),h.forEach(v=>{let b=t.get(v);b?b.push(E):t.set(v,[E])}),I.forEach(v=>{let b=t.get(v);b?b[b.length-1]instanceof Set?b[b.length-1].add(E):b.push(new Set([E])):t.set(v,[new Set([E])])}),u(E)}}}});var Bfe=_((DUt,Ife)=>{var kct=process.platform,Qct=kct==="win32",Fct=global.__FAKE_TESTING_FS__||Be("fs"),{O_CREAT:Tct,O_TRUNC:Rct,O_WRONLY:Nct,UV_FS_O_FILEMAP:wfe=0}=Fct.constants,Lct=Qct&&!!wfe,Mct=512*1024,Oct=wfe|Rct|Tct|Nct;Ife.exports=Lct?t=>t"w"});var r_=_((PUt,Mfe)=>{"use strict";var Uct=Be("assert"),_ct=Nb(),vn=Be("fs"),Hct=$E(),Yf=Be("path"),Rfe=gfe(),vfe=r3(),jct=Cfe(),qct=n3(),fl=HE(),Gct=GE(),Yct=V3(),Dfe=Symbol("onEntry"),z3=Symbol("checkFs"),Pfe=Symbol("checkFs2"),Wb=Symbol("pruneCache"),X3=Symbol("isReusable"),tc=Symbol("makeFs"),Z3=Symbol("file"),$3=Symbol("directory"),Vb=Symbol("link"),Sfe=Symbol("symlink"),xfe=Symbol("hardlink"),bfe=Symbol("unsupported"),kfe=Symbol("checkPath"),vh=Symbol("mkdir"),Ro=Symbol("onError"),Gb=Symbol("pending"),Qfe=Symbol("pend"),iC=Symbol("unpend"),K3=Symbol("ended"),J3=Symbol("maybeClose"),e_=Symbol("skip"),J1=Symbol("doChown"),z1=Symbol("uid"),X1=Symbol("gid"),Z1=Symbol("checkedCwd"),Nfe=Be("crypto"),Lfe=Bfe(),Wct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,$1=Wct==="win32",Vct=(t,e)=>{if(!$1)return vn.unlink(t,e);let r=t+".DELETE."+Nfe.randomBytes(16).toString("hex");vn.rename(t,r,o=>{if(o)return e(o);vn.unlink(r,e)})},Kct=t=>{if(!$1)return vn.unlinkSync(t);let e=t+".DELETE."+Nfe.randomBytes(16).toString("hex");vn.renameSync(t,e),vn.unlinkSync(e)},Ffe=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,Tfe=t=>Yct(Gct(fl(t))).toLowerCase(),Jct=(t,e)=>{e=Tfe(e);for(let r of t.keys()){let o=Tfe(r);(o===e||o.indexOf(e+"/")===0)&&t.delete(r)}},zct=t=>{for(let e of t.keys())t.delete(e)},e2=class extends _ct{constructor(e){if(e||(e={}),e.ondone=r=>{this[K3]=!0,this[J3]()},super(e),this[Z1]=!1,this.reservations=jct(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[Gb]=0,this[K3]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid=="number"||typeof e.gid=="number"){if(typeof e.uid!="number"||typeof e.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(e.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!="number"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||$1,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=fl(Yf.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask=="number"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on("entry",r=>this[Dfe](r))}warn(e,r,o={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(o.recoverable=!1),super.warn(e,r,o)}[J3](){this[K3]&&this[Gb]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[kfe](e){if(this.strip){let r=fl(e.path).split("/");if(r.length=this.strip)e.linkpath=o.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let r=fl(e.path),o=r.split("/");if(o.includes("..")||$1&&/^[a-z]:\.\.$/i.test(o[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;let[a,n]=qct(r);a&&(e.path=n,this.warn("TAR_ENTRY_INFO",`stripping ${a} from absolute path`,{entry:e,path:r}))}if(Yf.isAbsolute(e.path)?e.absolute=fl(Yf.resolve(e.path)):e.absolute=fl(Yf.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+"/")!==0&&e.absolute!==this.cwd)return this.warn("TAR_ENTRY_ERROR","path escaped extraction target",{entry:e,path:fl(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!=="Directory"&&e.type!=="GNUDumpDir")return!1;if(this.win32){let{root:r}=Yf.win32.parse(e.absolute);e.absolute=r+vfe.encode(e.absolute.substr(r.length));let{root:o}=Yf.win32.parse(e.path);e.path=o+vfe.encode(e.path.substr(o.length))}return!0}[Dfe](e){if(!this[kfe](e))return e.resume();switch(Uct.equal(typeof e.absolute,"string"),e.type){case"Directory":case"GNUDumpDir":e.mode&&(e.mode=e.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[z3](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[bfe](e)}}[Ro](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[iC](),r.resume())}[vh](e,r,o){Rfe(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r,noChmod:this.noChmod},o)}[J1](e){return this.forceChown||this.preserveOwner&&(typeof e.uid=="number"&&e.uid!==this.processUid||typeof e.gid=="number"&&e.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[z1](e){return Ffe(this.uid,e.uid,this.processUid)}[X1](e){return Ffe(this.gid,e.gid,this.processGid)}[Z3](e,r){let o=e.mode&4095||this.fmode,a=new Hct.WriteStream(e.absolute,{flags:Lfe(e.size),mode:o,autoClose:!1});a.on("error",p=>{a.fd&&vn.close(a.fd,()=>{}),a.write=()=>!0,this[Ro](p,e),r()});let n=1,u=p=>{if(p){a.fd&&vn.close(a.fd,()=>{}),this[Ro](p,e),r();return}--n===0&&vn.close(a.fd,h=>{h?this[Ro](h,e):this[iC](),r()})};a.on("finish",p=>{let h=e.absolute,E=a.fd;if(e.mtime&&!this.noMtime){n++;let I=e.atime||new Date,v=e.mtime;vn.futimes(E,I,v,b=>b?vn.utimes(h,I,v,C=>u(C&&b)):u())}if(this[J1](e)){n++;let I=this[z1](e),v=this[X1](e);vn.fchown(E,I,v,b=>b?vn.chown(h,I,v,C=>u(C&&b)):u())}u()});let A=this.transform&&this.transform(e)||e;A!==e&&(A.on("error",p=>{this[Ro](p,e),r()}),e.pipe(A)),A.pipe(a)}[$3](e,r){let o=e.mode&4095||this.dmode;this[vh](e.absolute,o,a=>{if(a){this[Ro](a,e),r();return}let n=1,u=A=>{--n===0&&(r(),this[iC](),e.resume())};e.mtime&&!this.noMtime&&(n++,vn.utimes(e.absolute,e.atime||new Date,e.mtime,u)),this[J1](e)&&(n++,vn.chown(e.absolute,this[z1](e),this[X1](e),u)),u()})}[bfe](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[Sfe](e,r){this[Vb](e,e.linkpath,"symlink",r)}[xfe](e,r){let o=fl(Yf.resolve(this.cwd,e.linkpath));this[Vb](e,o,"link",r)}[Qfe](){this[Gb]++}[iC](){this[Gb]--,this[J3]()}[e_](e){this[iC](),e.resume()}[X3](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&!$1}[z3](e){this[Qfe]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,o=>this[Pfe](e,o))}[Wb](e){e.type==="SymbolicLink"?zct(this.dirCache):e.type!=="Directory"&&Jct(this.dirCache,e.absolute)}[Pfe](e,r){this[Wb](e);let o=A=>{this[Wb](e),r(A)},a=()=>{this[vh](this.cwd,this.dmode,A=>{if(A){this[Ro](A,e),o();return}this[Z1]=!0,n()})},n=()=>{if(e.absolute!==this.cwd){let A=fl(Yf.dirname(e.absolute));if(A!==this.cwd)return this[vh](A,this.dmode,p=>{if(p){this[Ro](p,e),o();return}u()})}u()},u=()=>{vn.lstat(e.absolute,(A,p)=>{if(p&&(this.keep||this.newer&&p.mtime>e.mtime)){this[e_](e),o();return}if(A||this[X3](e,p))return this[tc](null,e,o);if(p.isDirectory()){if(e.type==="Directory"){let h=!this.noChmod&&e.mode&&(p.mode&4095)!==e.mode,E=I=>this[tc](I,e,o);return h?vn.chmod(e.absolute,e.mode,E):E()}if(e.absolute!==this.cwd)return vn.rmdir(e.absolute,h=>this[tc](h,e,o))}if(e.absolute===this.cwd)return this[tc](null,e,o);Vct(e.absolute,h=>this[tc](h,e,o))})};this[Z1]?n():a()}[tc](e,r,o){if(e){this[Ro](e,r),o();return}switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[Z3](r,o);case"Link":return this[xfe](r,o);case"SymbolicLink":return this[Sfe](r,o);case"Directory":case"GNUDumpDir":return this[$3](r,o)}}[Vb](e,r,o,a){vn[o](r,e.absolute,n=>{n?this[Ro](n,e):(this[iC](),e.resume()),a()})}},Yb=t=>{try{return[null,t()]}catch(e){return[e,null]}},t_=class extends e2{[tc](e,r){return super[tc](e,r,()=>{})}[z3](e){if(this[Wb](e),!this[Z1]){let n=this[vh](this.cwd,this.dmode);if(n)return this[Ro](n,e);this[Z1]=!0}if(e.absolute!==this.cwd){let n=fl(Yf.dirname(e.absolute));if(n!==this.cwd){let u=this[vh](n,this.dmode);if(u)return this[Ro](u,e)}}let[r,o]=Yb(()=>vn.lstatSync(e.absolute));if(o&&(this.keep||this.newer&&o.mtime>e.mtime))return this[e_](e);if(r||this[X3](e,o))return this[tc](null,e);if(o.isDirectory()){if(e.type==="Directory"){let u=!this.noChmod&&e.mode&&(o.mode&4095)!==e.mode,[A]=u?Yb(()=>{vn.chmodSync(e.absolute,e.mode)}):[];return this[tc](A,e)}let[n]=Yb(()=>vn.rmdirSync(e.absolute));this[tc](n,e)}let[a]=e.absolute===this.cwd?[]:Yb(()=>Kct(e.absolute));this[tc](a,e)}[Z3](e,r){let o=e.mode&4095||this.fmode,a=A=>{let p;try{vn.closeSync(n)}catch(h){p=h}(A||p)&&this[Ro](A||p,e),r()},n;try{n=vn.openSync(e.absolute,Lfe(e.size),o)}catch(A){return a(A)}let u=this.transform&&this.transform(e)||e;u!==e&&(u.on("error",A=>this[Ro](A,e)),e.pipe(u)),u.on("data",A=>{try{vn.writeSync(n,A,0,A.length)}catch(p){a(p)}}),u.on("end",A=>{let p=null;if(e.mtime&&!this.noMtime){let h=e.atime||new Date,E=e.mtime;try{vn.futimesSync(n,h,E)}catch(I){try{vn.utimesSync(e.absolute,h,E)}catch{p=I}}}if(this[J1](e)){let h=this[z1](e),E=this[X1](e);try{vn.fchownSync(n,h,E)}catch(I){try{vn.chownSync(e.absolute,h,E)}catch{p=p||I}}}a(p)})}[$3](e,r){let o=e.mode&4095||this.dmode,a=this[vh](e.absolute,o);if(a){this[Ro](a,e),r();return}if(e.mtime&&!this.noMtime)try{vn.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[J1](e))try{vn.chownSync(e.absolute,this[z1](e),this[X1](e))}catch{}r(),e.resume()}[vh](e,r){try{return Rfe.sync(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r})}catch(o){return o}}[Vb](e,r,o,a){try{vn[o+"Sync"](r,e.absolute),a(),e.resume()}catch(n){return this[Ro](n,e)}}};e2.Sync=t_;Mfe.exports=e2});var jfe=_((SUt,Hfe)=>{"use strict";var Xct=LE(),Kb=r_(),Ufe=Be("fs"),_fe=$E(),Ofe=Be("path"),n_=GE();Hfe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Xct(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Zct(o,e),o.file&&o.sync?$ct(o):o.file?eut(o,r):o.sync?tut(o):rut(o)};var Zct=(t,e)=>{let r=new Map(e.map(n=>[n_(n),!0])),o=t.filter,a=(n,u)=>{let A=u||Ofe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(Ofe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(n_(n)):n=>a(n_(n))},$ct=t=>{let e=new Kb.Sync(t),r=t.file,o=Ufe.statSync(r),a=t.maxReadSize||16*1024*1024;new _fe.ReadStreamSync(r,{readSize:a,size:o.size}).pipe(e)},eut=(t,e)=>{let r=new Kb(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("close",u),Ufe.stat(a,(p,h)=>{if(p)A(p);else{let E=new _fe.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},tut=t=>new Kb.Sync(t),rut=t=>new Kb(t)});var qfe=_(us=>{"use strict";us.c=us.create=vAe();us.r=us.replace=O3();us.t=us.list=Lb();us.u=us.update=TAe();us.x=us.extract=jfe();us.Pack=wb();us.Unpack=r_();us.Parse=Nb();us.ReadEntry=nb();us.WriteEntry=p3();us.Header=qE();us.Pax=sb();us.types=JU()});var i_,Gfe,Dh,t2,r2,Yfe=Et(()=>{i_=$e(nd()),Gfe=Be("worker_threads"),Dh=Symbol("kTaskInfo"),t2=class{constructor(e,r){this.fn=e;this.limit=(0,i_.default)(r.poolSize)}run(e){return this.limit(()=>this.fn(e))}},r2=class{constructor(e,r){this.source=e;this.workers=[];this.limit=(0,i_.default)(r.poolSize),this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let o=this.workers.pop();o?o.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new Gfe.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return e.on("message",r=>{if(!e[Dh])throw new Error("Assertion failed: Worker sent a result without having a task assigned");e[Dh].resolve(r),e[Dh]=null,e.unref(),this.workers.push(e)}),e.on("error",r=>{e[Dh]?.reject(r),e[Dh]=null}),e.on("exit",r=>{r!==0&&e[Dh]?.reject(new Error(`Worker exited with code ${r}`)),e[Dh]=null}),e}run(e){return this.limit(()=>{let r=this.workers.pop()??this.createWorker();return r.ref(),new Promise((o,a)=>{r[Dh]={resolve:o,reject:a},r.postMessage(e)})})}}});var Vfe=_((QUt,Wfe)=>{var s_;Wfe.exports.getContent=()=>(typeof s_>"u"&&(s_=Be("zlib").brotliDecompressSync(Buffer.from("WxhAdoB5WIOfuqt43L3v7Mn2JcoY21Esu4ZXedHKEhgnjHY7+QTdhgBVWvNP2Zx1VFXNSw6GONAGqJvu/q+qauSkoQ+clPRCLja5Twq1hTGwxoRXQ2sh1d5ddBX9KBirmXanlPSB+xojuO+tVnBns9gPMkbfJMw+ExvZiStPXEM0abHRoKhsiIawWkaDKMmchuueeNU+i6+6N+XzC4bQvyn9ePmh30nmhKTqeYA/SCSIRJfqF911L35XzhP2hk1dIqVW/0d8DDDlssChiSKhM5iERXCLJZ6LKR7h069+aX79Yooi3VGLHPfgpylWlhxlraOOnETFsjCSiWSgmPEVwWpm+fouvKexmT2yNwuhoCXKUSNRLinlagX2/PXbX+Jrzc/TtbRxMOx9Po9JKZ0tsYKV9TZHA6MfIvC/fz9n/z8/X+jMS7ouB8kYxqlETC2JE9i8Fefdw2039mJ7hXa3R2d3PERlv/ya9vUbqSjVm8wA3YCdU+tqyLCrnBfE5GrLyoGrGO1JZ62Vlq/3CdPMbq7qniDDYOS8T7/zhjkhZyw592VTe33tPd2ElYSEfZ0IFNLLNS0Y7J7SsGNPgNjnq+nXr+nCwRorpHQQy+dWdSmdw8koJ16ss40rdA8e/P/XN19H04+WjeuYDQLb6c5VUeulZ5yhPu6JworcK22981iKvb779vp1zGEwEhskFjCjZ6qWVW1sBIa4O1Eo6vnAuCr2dL+bKqY6jDYu99gkado+OOgiziIPT/luv1y8X5U+qMszyZRGiHqRqmUHQUaJWqXqBX0/nY5rwu14ZZXArv6mL92zgwXHFwBLN633464VmEGCUfjxja3joYOU1uLxzWfAQaEGpKIbYQxkGybufsmihlrPx91dsK3sys+qnh5oDNiDghL5J8ubhigJlpEz0vrRj+Y/fX7s7t6Jmjzzeaq6uikG0AIbZf4mzLUgqOMNk6CxsNh8PnyYorX2ObvZ5AIcmAsR6Q9t3QsRUW17RHhEU/1x+O2s9PEBhCS4M+mjKwgzXfdD0z9rr3U8Dmrs1iP4q68jrViBuP8ks6I+olujBjeb2fOblVOfNhNkrhi6hH/txtuU0jh4+O/FaZ8f7e4mXbLh986TZM1gY49BCc4fMckIfDDpuo3aDmw3R0OYgB9g///7MvWr6gNNAta3l9X8rtOvppuMkEhQv29GNRkiTnM38714L5iBACACyEwpk0namZRoJSnT7s859wXyvRdIKgAkXQDIr0Wm7FqWVI2q13LNJNmurp3VbPCbYXXtbEj/P3Ez+qNZ/f99qVbb+/6PCAQIigIpZhqynE65RjNdp05Op7cdACin6GHqSTn0NC82wrv3/pf8770fVvwfgVT8H4EyIgJsIwCyExEAswiA+h8AmQGIUoOUMxuS7Tz0kKfpIfvQ41ENkwjR1ZJon5OS7Brkmp09DJPcmTVPu2nV03D2NcyrXPbpVS7WvdnXetG7Xi57tazFsq3e1M8UIPn507uTwoAGPEUmUpbsm9n+BoSMM7FL37g3wAILnDE2k3wSqBSE+ZInF/791v59m5lkkgKBkBUmM7sltH3K9NxNt3ChxIpIVT+gvUVydaD4eFRVjoRRH8nIb+Fa2szBbL6Qr5DAxsXa4wKxcABgTI0GYJ7oL8b3Fha/nUW+E1BIAcWQCEaEQUGX6t3O/qeBlE4aoZB/qRiw0sESkBjmfqrvO3OALEByVTNIFFF/0ocxy54B3PbP/5+BXosX591zjoIiAiMWxILYyLERG0MiQ0rauPH+G/ptfTfqrO8xCp+XNpEDFhiEgaB9Z9RGWW/3RcXXDeC2nn/4dHqE/r6QOCRzIAijaqMcG9ESJVIbUXf3oxb67ge8yT3mevDjgw+Fg2Z5UMEJbqf9w+y70d/nDTd0uKFglSBFAgbJEDBChQwVC1atcsMNN2S44cCnf1/d84/2/tdutKxtH7iaLgi4ICAgmwICAgwCDAw8ydIOsDQDg1g6i9of7973DRgwICA6BRgEGARYJwPrZGDQoEHrVKBAgQaB9/m59f/P97hHmPeb7xFbbNGiBaIFAkEyCDJBkAkCQfJKIEqUKFFiZVKi/XT/9eT0PLosnwEDGjRo0OCCC6zIigysyMCggKUUsCIDAycyqJUKVKQCB3g/xP/c/rGQZCUYjFZhwgtr1WiRBX/KzW+x0iXQPX7DipYSAT5SQYtqoIK0XbPLJTaTeW9W5ns3g/9DW1gWKdfX8Aax4B4ohGAWocUqWAu0K+//IZmZlfTA5JX3lAajzDV2Lap1BqWM2z4IXwgeEG16Fa0eLbxzmMi+3t+wkIoH4Q3zzjhbl/wlg/zeuoa098ae8bTK2zBjk5CGD/15U31OpidO0B6JxxxkN3Wpng5/w4m+druEhPsn+FiOR9PJU5QM1nmP2l5tWhFBI0StAfR06YNfKVpVfYwsn3qsnXrfx45JXk5OKXh5pwdZhhVc9+X3AqZOCPskPex0HffJsv+PMPh0RHES/aVoyNCOPKEGzD+VVN7Ppekn4Shi+rrYB00NgdCsQHXr4a75WXr8+qnrIhhUKimYeCqXEBks3af1lBcO8S+3rPNgRbCeVtVNf7pMcRYF/yoTGQ2At9Ifw/8JEaxS7tP8tdu7yMOATinQIHZTNsTGvHqgUn96V8igW8IhwmHhSOle4PMVcfbTXYUkO+jkilzuA1jINAqEIti1IW8BXtGrL0E0dEtq/8nMuaVYmgvskjGxOiRxiNbn31JodeJkv3Hmo3Nd6ncMI1lLhZw7s4fi9T3QSnGNe7LXBJlWZX/tTdmp5sRLYM90MTrC/eDFlf5lw7JZo1NwhQPm8nyn6/UN5GVy0Cn9cRMhUNzWQc0+SxFDOFFzjoyMj+MxnzDnR5lT7bDU+bM3YUlEE+DDuIMhhjB9qq9/ljIXXb4aTTajPo5tJW6QMqdEZe9Z7dmNFe7vL7cY5MM/jxaSQKVh9P6dt1H1jPYmDU2ThvRcCF6S+wzY/I1g3pBkDoErqicZZPGRC/88pEYFnD6UBKV4yh0QXJ0j563GL4+8UVhZhgof7SQvqHIqb9WN/3y0b1sIHMML3s9ItJMQy9r5LWIhif3vGZmH7jXdFf/ElOGUkiU/zxJZ3GF65eixSRe2+PMvuFPhWyiUP+XtdN0T3M57fE2yP2o6amZy/E3lUIJwvwE5X6Hnl6pX5z8Kl0b7weW4SdoEOJHpHiuKGu/cu9cSqrzSjUFR55Xv+OXFvDuxNveUMO7ApUSp4KTxFCzTFv2ccn3cgu2+friR0TAhSKMVN4rYu56lQdMhbUyFGYV9+oO59/2dYek58xex4lD7/RkVfFJo/bexczgbF5YH+5xURYp8BlU6aUwfcZvHBsMFO9Y5uYXCCev3Yrz6EhB8Kkupb4VgC+mG4H0un8cWVltYbXG16eoC0/dt5Aofl/Fcuz0SHr8+w57juksaFnz0ADBPsCdwDuyO3TnHctcYN8O4Qu4q+5xhXPVjmY+27WZRpdM47kGmryd3xWBs+HiFLOwvgppVzzp1WvbpZmfXAyWa0trnpwRk4lxpGY1V23awnP4O93ak/uFU1S6MGp/v5Qo/P6DDKK5u+CiwDRC1foklUQuV0dNC070HUDItFWOEw0srLvfWYj2WdKN4WdaCVLUXrmWxKMAGjdlv1Do8XfvyLd31i2CIOW6c1uGG4EcTjclyGgcfbi6N+fg2MnYHXmMnHRduqr41ezgvp1UDGDUhy6x9NAf174BJBwch+K+IaENecyEfEmakhn5GqZ/CQ0lABD4Va0NABKL+SRiDxFgoHrRU0GfkhTGkQQqxsYCOXkqv/8hw/Q4joyAGiIAEl97iUXzrhZnq8AqhIeZzDEq/wpfWM2+YJEbhW/4d3dbi3nPkHIyWu6yKX7iuQOht8zglLS9uRUA9Ens97AsFgU46aXDMGlQ1UEDqntSc1E6dTqnX4wTHdzd8mLSXVz8HSopUh9s2PWjYlTNGhVu54oJUmPRVZG611dFc6Q/fuCx6GMH7EiVVWp5KT0aEVF7+Cn55qL+TXX2vLhXBFlrvqbcz+3UJ1qL86IQiPQoFFmplwmPAV0olpWdam/XS5JiSs7247kpngeqNpxsOTZDl7B2yATZWnYQNV+KkVG7v5q3wBkhGAuCIkuNpKauSPYr6T9ehMIjHh1cQ1pz/FvWAJc7+qUvLq4GxPuwQi90SkPvEqDuxVNFldtiFnlW8E9ixiN/rT5+UpKEQBXXfZurXb9XKetTxhW3XY2RHOP9/FU5DnXmu2Lwn/m1YcWRa3my9Ad+TNGmPFGm03kXafkl8mYXcTMvhogL0C8Mn+wMlVNRpwDFnccF9lKa4dT9iE+Y84zaV1GllTXo4K9GoNo2qTIr/a7wfz7WBuFirKab+fKKcbj+WVXPXpQPU9hBCgObJaydp8nSQqTz5EtJ6IiFrc/7PHm4XsN0lLxG8ZXqgARFruJEj93GbKNessulVyUM7ZnVRwmeoyA3qzw4jT+h+vj2CTBsg+CIrNI5McnYtRq1CRfecHRLA49veIa1JGnwZ4n2o70NKBIsDX20CIT9KsItxDGVHAhpRI3ikwU0FUXefiUvvVHd9f5TE1mbAKKOalosjXH7G1FTbgLS1q+37G0xIVM1RtFQxuJyL20f+btXF8q4PTVFVBi3JWn1g/qGXmLOlRt5IewbvltR6EiOrNaRJJdUZ+frgTfOFB6OheuCITQrqxXlI6WVZde15Buupi0yjS4LD5bBN0FWrkcMcAQEp8H0Xqb1Q5kwqfL/C5SulDnh1KGcxwUEKrlUVmfIUy3HFT7wMIoKAEd8+ZeReXWhOaddSzWIPhOa2c6jPlqu7OToL/StZdsgQYbQ5WDHvP6TXT1KRhHwis1TsYJR6LIcnvJ5LZR5ESjRtvq7ybEU0m2DsMKdS93iS0+p57bGyos4XJ2euqxLYxFBqIWUqDZfHsRuZANXgzAFDnxKODSGlikbdcNbiq1cdsfeqFrRqAT21lblfs+Ockr01CGRx3TTSBZlEI1DwQBUkeCYlPU7DapQ6Z7gfinUpGn9LPTXrLfVY6eApKfXWIMeablBsGDmfKV/1mdNb00R+PXHAf5I4coDEpIoIdvn8Te1z8/XHIRx92nyn93IrByIwQHoLXgTmxmpW1PRnxN2OUZmXUlmf8tMUdD2z7hJth0yhOGHcO6COmUuDzn1mzplWtefAznIpD8XxdHFYFiA3ajA5gArWZiPZ5tqMDOfk2B0TURQcbo2oklwJ8/oBha2toktElKFjsWyjdpT9FBzOBGo1B9VAF1iy4IhZ9HF4JEaKa5RQDdxe+OoIrQVFcZu+OfIgmhQWsW3+WnAQf6ATmgUDjZRj68cLE3XFcHxee41OPf9yMQEd3QLFIc/F6S+WSzExLttGEk9zav65MghFP+bZkze7iBim5SiKWB4Dm5Tc6h/9nEZGh3+YC+EZrnuJIw/dhZuzHNjnJ93wmH0u6+x9PJUv8m92d6/YKuU450VOHVRDkv5eixOqsPwRgx+GO8eYJ8evbIaGO78m+6He61NzbHS8l573afcMzqDV068Hffb78HhppHWSOd1rH86ntAPjWlGLnppJDFj5Wuuyl1RKXI/99U/56EisjQQwvXx1L5eWsc8mRuqhrOYNSdO7rQoFOxGuQ9RPCabS4MkJy6e6xGVz3mK/M6UnVxej4+QHdmxY9H1Opadeqjy3P9oGBToWst6u0OF5V+6txKozpGBHvnQ5f8sDmG02JhHtM3/ZC9o0Y60XMSCLjbyr3RMNcIoCx4do73/2UGjYddzLg4lg7SmdZS9+2Z4cwqXLdvEvjs6MindiElc/atjKEdCcLvViGz6cSzNjYKUV9dNZ62ttcRzXmRK97uGtzGUv7ocP5Ahh056p4kAvMccsscxHgnVDdnry7HH7M5EjFyLThu60zWXzWC0kFYPPj+3KJtacorvRnsLx5OQjJSjduHyjFeodcT81oMBtIS/SqlFpwXrpzqRGVOxMwl1qRrkkr5IKt4PlzTnjK7WD3lED3inqg9Tj34djC5iHizCVLYlOVp2G26j9gHrD9MvXiewykpssrDHCK013aCk6igxLZIuqb3ygrtmVjGHpL0+NqvnfwVxKD96YM1ESmNynJtFiq3QAp9w5v0a41C2maIXOjonHPxDCtNWyOU5PQjduGWrkGiE1j6gJVj3QywqCsB88MhKFpUBD42nC9Z2uKuzq/Tk8r011f9SGdb+sUr3+BszzQSLriONQqgcDx690IX2gRSGNrQnKK01IixyRon3ccKtAYrF0NrxnYFmT90REMFJGHbrC4rCDtBqVCThN9RIVxfcjC1altlWkg4f8m5pu6O5a9V0q/tlq67GP5IPs7mGA03kTlhwM7Sfo2u/x8mr/HcxS5ZwJdqOlcnOiIgxxEOT2zcmT5G+Ji9+ALDfS0limcz00nS2juftGsrbdzvVmYT4j0reE3dnMxzCt4XtVhYQUno9oZ+s1a8Ak/yp9qLRIXwuZ1fuZgJgeohIeOxJpX6AG+e/u9Cxr5WsS0UHXWJGzq22MLX5zRnrIMXKx/4Kz/HZe7S3168pRWtNF5DLRI2LBwSNqx97cXmqD8Fa3DJKyzDH2l0LBPqHEqk7CXi8v1D70lm3xyi7lkR1dSBrcgEEts/QOGWhf+W9Vz9UV5V3VfuCAk6YGaahSJ5btjqQ4YdMBZ14B5SG9ceUylzJEzH2e0K1JM/lmjWUTg3tbmBfxr6xbZiq1M0dq0g+gOw2TbLL4wztuXz6zps1HUH5LpIsjSDxliDQytYFlItEURlaK9ul5o5dwmEN0c5m9LD3yJMRZPth8B+RdkdDlj++zFBVlZiHSHvbtNHrZ1L5fI//YWWPUo7LQuVb2cHI0L5sdH+7GQRc7S9LaLhPYtscNTfX6W81CtgrfvGc/zPOwWH4SqTTc7oWl5OqC4k6tS05L1YumTinqrRO4bSfzOF1UMTyX9F2KTpgrsqI0pKbQzerMpv9ZSzo6ANF5YD3K2ktlS8+dgXvgnwYazFlQZfV6jrqkjOFwxAxlTFoBVTkWnsRxTDuKj2Cf+y5mYw7IsRTrJImdLmUutraXN71q0hPbM5w+ivoau0I+GYQEUC3rItwNzBj4BYSdUrB6Rls4+WYBLF2QIJxaiqr2UACmgtXYyocJXXZgew0vlCpAbHnectQM3QE960hECTKXLoJQQypxF5JJeGxc6n3Ou7a1TC1SaylM3FNMRaFh2dEGc8ZhHPX39VTTg3Rru84u+CLjqwCV74IRjL6ocFSpM6dKd55Kp42rO35VzzJrFYGO3vKE6ho+xSzxFfWdTTkezclmiwSvw4S6+PAPQXZqOdtQHsAYjhKn16slNYpyq5/kHAukZZcOWYo62xS/c1dAeVjgPvK2qW4vHFLlUYYbhvfEQb7it1m5Cd0zX2a+6y2QrzOXQ3VzpWGBckN3S1Z55b5DaPxPzZI/nIx1lKbLm69sIIypQbuUP4eLpWVnfqJ6MSQQ797s3haO9bpVoRPqkW1KUefZJP/jy7HQiaIWkCKHVPI+zM1TTcKYgbEx02UrBlc5oOpzDo38l2YqRUr8gXyJK/cfiiZLzHEQN421HSad1xKt8vJW104zKLtbCKUXQ65I7zZLlKRxuFHkXI5uE/pvAjvmRwQmIcEQFZW/DSA258Rt7FDjmuZciYVQXYrQMZM3jqCre6DaRkpEkZvXUl0NAAw2h7ODZqif48p1Any57bYiL1ePwh7ED3WejTx51xCDzPXuPcAK2NqqN+5HfLu6jPd7NrjXp6GTibGetO3CUSvbAUw3nwIDX0aujLKcYVd0z3Noeqq/LnYCP728rnQQ2dXs62Zn0ZdqlE626v1lywdOgnExEBJTm8DDmNpFsxW5NoU+1oq5/qRJDRAPbKpJd9RWsgPyDifnG6fmHsEO+/se0rQETXvCpHEBwXWkbRClaVTraGzmbEqGuM0bWHt9uOGmWPbQoPaj+agQ3Viqr3eUigkGnVoylaCDtVh2V70+VaXxmmOKa2/3trJFB2BYb830N/4muhn+30BQEHKVZ6uCW9BcNMUo/o0IXK1Dp2nhpXvrLnXLClw/Ync4e1v2kTU8it0gcI7jenLBZyihq1rlQ7vqy3No3V/w1ty8YLo7Yuxwel8T6RSkQVzDUetWGktZ9Zy01/pYtq7QvdxYWzB887b4l9DZwn9L5npn+yy08oSauryDVS12Fwf0QglHPOnr4m0iAKzAC7QxWUl9cY++A5bxk9f37DC/fc35v06Jp3H9g7fIskqIS7KXcxbMRW+Q8UcoRkMs3eTRjpmpn59fTS3NVNEyslRxnzJXJfoDYnhNJP71+VaULY4ver504+WRShrFKx3eZ48wqGBAVWmZEuh//PaJmBZvjj/v5fAmjulqmwXlW3roOb/ULVldzmeKg3Wx97LlXSgMVWK/THEFVuAia5atEW9Y99J0hBGvcbO/kM1sFtxu3HJ5w03peibXrF0GNCdaqVKyOb9hph15saZCHUvvxDh6L2z4Z6BTVua66ETCzMWJBct/vRkOCxJN4HvAyZKip8dy519JYnkcsSIXbJuN8CkKB3jkgslhDHLv01b6DAYP2F8pEddW5d6Co/6aVJTw4StXmMMwzbaGdEKmRsFY8q33pTxmtjoLbWpNB4J6CLYV24CC7pCt1BYPcMeGRpTkizoG8dVY/vMbnXB0JVeHHhrozbKgd4IqOWn9Mzfh91Z9ryfXj1ctz/r2oP7izc7xTNECS1qbkSRpqLGqPkCFw79dIz6dORN9ufhf/1G0LHXIExOCiXHeaDJ0zxvV8Z1WLd4PrDykUMNWlwsMxTCkolFRzPs14ISWdsm/RkzkSipnjSk8vuwoPqgvBCy3XHDdyckHo3pxbXckKDD8KH3Z0UOEhiPcNeNnT95sdQH2mXSNaFUHq7NVyUgzvZqO46ScrHmUR03/Iq8umauhROLr7/e/VrEctj+uuwxfntVCtbXbE0jOJ2TFVNMyuDtILGkL3Zd0CZL/C9t73QYjh7UaWYzULrgLi5AEiwbmO6MFPL7DOAZ3cjXdNKTQXFsa5MvQtQ2B9J9yfbp/gqub8bAOr07rd9HT5ic93B7Sm/3JmBpX4YlRrt62X6O1o9x7ccSjzmTR8uJDeRs5A70L5eHh9bvdTf5ovCTQWzm9DG7ZKN33hqnZlwhY9rBtXD1GedW6Zrzv1OIdqpjp+GOmqkxapHATd24bke0oMyKV1GxQPYZm8YRnZN3Kn5wPDTeFrpO+4QdtsWcw/wL8Rd28xC79atzfn57f3EaZPLiWw5s24zMeCm8A5vs3mjJCxIkp/wFtuSiFm0BrSwvFmPa+Nt8XiUQ4wTX122kCTkZFrdOKwNCQ4Cx3xkBTc6Ocg7TgT6XNJZ8KlqnO6pj5CrH5VWxFRvtzKKPKS9iZaINEXJ4PgYMOxA2GhJsGjxG4w+Vock6Dq5LUgeGIL+vDKybCPZjITOQ2g/PM5D7qEsem9deTbGjTEEFe/uUWev78TcfMJlc6F64ndLapaFE/ENgEVoM6scfxwuFoJwgdeS7PaXQxf9x9blas4wgv8EFGrVBjBmQk6n3eALBoZKhSgqGBo2cjy+vOYdHAlTRxibRhljKEMvJIbYmZsQ9rYS9kTRqrx4aRn5L6TppBWBYdF9xoM69ng/n7PePcmRPDHkSyjGdL/midAzGuEXqKC0LrzIrkOOidbpoKi2dd7n1CxeAADeJpYr1kiUiBZ15bTJ4abE4i+ldKkfLsFOkjNUR/0xvhHzK2bTrLCw2jyb38MJlokraMGg0zW0eHxUGiDN4WM8J0ftAf8Wy/WUQZajooSeN6XJbbJJ1uvXGNYsaArlMDGx72E3wY4HiYCwJuq4z9O5RcVjbKpe/Dbkt6eGopByI49hXumeC+CPJV7py+g+SIoFlaYvT3eRrJBqaGKJQxrAULjpA7l9rZL2LzuhwjnOdFWHcRZySqk2xocohCOcvGcAmqUHzdyKf8k9yJ5HiRJ3V39gOk2O9lFVvzArADcLuetkJqW7uM1VyfSLOzclCiiJYeOVap/EK8T4C6ZcJH/YURfckTmJpvxuBeGfCcybvFjuZ1W5WZZRSncdOLD/xjjTCTXPLeUNOzDnFCSoUJpp8aAeWCcNOB4CsvKWs7wnBG3KtrkvauC5guDvg8ftrYRDhJiEiBjCwajUuH3pbroARHvMI9EuTdqFljbVGRsmArpB+AKQx4E3TWMqMoSQWsqD0o4n6rgCkMeDBJqWEG05lFdWj9EabLi/AmtLzuympcQIY5QN8/TjuadgkwQcWWRVLRQu0kcEP4QT19MynHl0+uQVKdPg8ynsGgRmVvUwws+kr0sxC0aS5WvtlS74bnGsrIhA/aGlc708vceaQ44tuGt6VM9rtvAf1NtErYMnKXFFf5JpkFuhMxbc+BKsRIppCdiLeFBbTDgw5iZLY3tEfYWqsILXmJV4bivs2skGBjGgNs0A/g8h8t8nNd5K78okeSkrbq7/xSoTJeJJZtPaCJlUHG7WGofZjurd54lEAiqWP0kPVDY7AQRK3vsg2IU793CJoJmKD4g9Rc7/eMIKR5fTlQo39pjxI9ulOpLXTmxrP4lOV2NWo+Y2XqG1Gi27g0vRnt/tESRhzZg6fG/Ikf5smowKn02KRVWHFX5u+ipO6TcFjNErN2lfXpnCTYteXe4+v7Ng7nN1kOpZvmLb1X8q6NJt6gtkdsBV7o1W2VOR2qsuCemmWJPaZq7EZlx4IrYlDN/3FicYfoTkeobd9JpW7CO9ePS32//XF2x1mguxJ66N5mCm5u+qDLZWh3R3B6u/ukzrORehf7dkVvhGEpebQYDEj0ynzAI7mduFqRJcf2O8+NnecupZLtRz1WJT+OJ+yfefAVqc8a14EIdXrOYQ8szNS1FF9g5gGQopaeYiTFJ9KD2vimGoCT2KpvQbTfnqR/SkvYh5Mo/hRKhHechbIdy47mtnz9DW1+p5YX83RF3mx6P+Fhui2BfSi8Zz4ZnstmNPcyvZ+CyxOnvmU+Rvr1Hqf8VkX4u/T4i0a3lDPuI8rgEw/68Z1vzc7GetMKK7OPU9jsZtcBM/CNwu+Qt/Nhrl93lZdUG/MlTOvRucpDT/x28ArkvOEovLVOjkmgrx+0ERHobeBeS6I8IMJXymd26vo59Ae/UTVStwklJwpsw0MxmYMerVcaBWkmQ8Z8EVLQw7l9L9t0ulobHQXbSpU6jutlnLi3k/O2G9ZW3zfX1HlShoqOYmNhdBZHLIz13WJ8S+9aPz6XMQlefYcNEzowcfCj7gXWI6AsfYLjx6ksD+517Uv/OWnhPHffn67keDdjG13jcsnqsKJkkilPierstufdfAlNZO+eM+rNyOY5khnza7fINJBfb02PVS6snQlTYhNguvPgEHPnoU2TbS1W1sZioghsKhkf2AuZ1P41VVzhq/ACdncdc9S8+A/NDngsWDNKQ5QibGofZvPOD4ys8jDVrEzroX0n7RJlbj54sYmWaQuN9/hii/MEw09rT5PMJo/XOM26BUrm6it3bTdM2EtI8wZ4Ot7+CnahbzaNWwNi7ZEubU+2nn2wuymcPEfRcUGojXWXR8E3/ypLM9eDqc31/KQi8AUVIfdIS/OZdTuolP7DX9ZvScEiVM23A4azhbdhVJFmMCULuvKcruk2kRs7y9yKnO+Smlx7unyWGl/pLBTfvCaFsNpDjynYZvTtbk62BuM2WzpIMYwcJSlhjcDSfkLQzsPeJZ1vFSE3HGE+GekeJ0RY2B0Bm4wMfYLNFxC6Gp5KXCUuiEJh9veYaHfiGTxpmpnYF51jOEfzSFbjLjxntW67Aablg/sluI3ggV7hWILbCfJO6kzEsnIRUU6EnIAoPg9BSW7h/f4INolK0nSAVBoHLCRBSUwALO4G4JLA3mueEdWxOHoVXSCiAB4z+qmGTNuxi23saeVgNakkU/5KcHYjfDd9tnfqau3oOUmpY/n32sfdVMpQo6fqGU+khNYoPz/c6hp3pwsapq/LAI/W4VpiyFfTzqg8D2Fpncvx8rO6D9eJjb31qw9hbQ+m2SycvMRvpeljCMkZHkm8ZWOKGChFREPwpGVMc4MuEy1FqlQ8pcoSQthOnhV0f2CTO3Ffp/pr1svbcH149GydVlIkzhpZ6bZo2A/a91PHUXU/HUXh/53ElMnWC58rk63X4ml26LyLMyqIPaM2J6XgvXTUiWU+13qavOuWDHTA2bvVCaHf1//pR7GL8uOz4S9DXW2L3CpXsjjTb38tKOiaR/fmkY7SqN5jtHPMTr45C3ay+pkz4cHZ7LgJBGJhwaetIY+Qrh34b4SKUfLMaoT9jbmogKRiffkY4jNkQP8h0GjBfBK07OUy8IfTfof0upo2rAj6Cr65Tls+iP59TuCMBp79tRkmu2hy/GstJLI7dO9/xEEwPX42uKzEnxfRF6SUwOQ22RNwPGGmDi4DwBSBJNLRMLsQE9Bb5gd07XXqHMopWQMJx587UDWfSFamTw267Vh1WwKSOsGpOQTjRwlm1gn7sF+yvYTc8AUD5pOA4psDFnYDZpPAPiyYHGXZ7fyGeXWS0lJIKPCTzGqS/39bM+2f4C4ED/gK90FwO0H7MGOylaTS+FlFFpKgJCYAFncD5tLBIzXfWuRzKrdSiMHn5+fbz1JuwQXgvxEy5zhCkxtaQQyRbxaew5DxmZYQthdYGze2WbhvjEw2iak4aBUISko/DNnQOgaGbSNwgoreCNm+7TBmQwq8kurTMigo8FP6YUhpnUmNKqy2rYUabAdm5iSH+QMg2oEpzfokbjyqi8G/UhZ+kHZHJe3uPDCXbBnIbuZbzKt2PE7LAFDgB2A1AO7llnm1GqqSKVA+CkySQkoeBVmZFCg/JbMcslsMG3qD4LenuMx0Iln+HRHbmyghcFUJlPiNUPRS76fY0DIVAgNQwq1g7h6yTDqoAhSzSRV26Rtkn3bPCEx1wAwxZJOlYdYpurRQVP7EyGOr2njc09SL1x2+d73xllrDTcWrvjdbki5606ZRRcy+B6HEk0yNBEdmYXD0fHK2/ug4lmzqHcgERnd3oafWIvsYE0oQa7v/XQzFyckia08DcxCQt1lOE0wP0v5m/nF2cbBYztR7IPUmZFHJM4B0CnKSH1FPbmUDi1RdLHkxcBQlqQPQyRKKZvq5xfy+4IigTyKtACzfMGmHmNCqUQm1rvwuRnkGT3I+4falnb1Ezv1qadRqzsAoIE2a3eZcKNfaNe8m1Lc46F+q/kBbimc7GvrpCHs5c03Y1QHGjqAzIjU7fwwaCGky8T3jYei9WGJV53nkrkosFp71eFz3jzR3awzvJ8s3gVxx2R941qStdydW78E+6zj2Qi89Nc82oE3tVozlOXC2WSkVMY1AmbL14qO2hnKLfX+nQ7H0/m1LztqZHG/z5zcBtqGsc+Nqvn4MZ9E3n/dB8z7IMQgTSJXcD6JumKgd8QXCfpQOyllHZ5DN+kWbNDizqjPV5Lo5+3qK4ZeNIU+IxQ3U8IskJO3thpaWSdG8n2yeQnHH6HPH4AwsXYDebAgCbIjzIW0vGtzec1S7WYN2o7GTnUAIhgZjmakQkfc7UtPzvdUaM51ZUVAg3uNeUU+SDdT0yO3CPu0B4Q3d9TcD/p/3NHjNDDZznjGrLxRZfJAsp3n6n/1HIccqok1apXRl2s5XS9/PU+p13uAj/ecJFTpFlVdHi4ou9I9Harnndv1iDwLoshTroTWkL3/OM5vUWLEdvRnCj1ZSBO/aDlfCvrKkO9I5gn5FvQs0u1ks3XgRNByQNrVJm6x49aLwenHUxaeTWx/1Kt8lV0aKuHA493vB7a4+vBbHbfNHEaofrHcdF71X64T5D1sTzG4FL8oD8N1qA6F08qcE5bLmBjby4XJeFlUfeCFJ74Qqg0LjohV+WpaQP9DCknzl5foU9qEPWbAnFUTFYXxUoM8wfQhFv0fOywKuJVDVyxyZX3lbuV0WdqSYqPGjhwhfy90rfzaCbK+8wAKb5Zrn0vThWQNjFqXfr3o+KycSe7Ehb7sF/b26/ov/svNNcrG/PIs3vWA9yUWW5+OmfyEdRy/munOu4fPH7naLua7o/IdyqonnVoCA/XlWIxZdd8kH6JwUHRYvfjD9O7wo7eCdD90qHevBF5mes7m/82D1YwCUkJQTe6J7+lnONEJ6lShlTG4DFk2t0eAyptkccMLAXvN2bvJlu+8ecLV/YYwH9nRLuqbQPX/54bpq9YmX8vLRrw5UV6GtQ3xNQ/lFScLui8z/gGh/HcjuzZa+vgrT7efRPL2Y7t/LyZS3aaB5bx5LVdTdoI1pagFB9gknqtEO3freuRHPRgbF97JZzSOREyyXdnXuK0Jc8AtXLLPXvHtqAw6jYxTMe5BDAqCuw6s4miWL+0qnt3LOXMnFpRhP2jkKrKGhMWGAwnwNf2Uf/B/+AFnIOSAq1yOdFBiKg/6L3WxO5RP/8ueXKsITiQrGJO+HEUq8390omcG8uGjlMuX5BOQid1AFcsrFQePANhFrncSXDhB1F3zrgTbfvl2fNBM5gNyaJfOHDvjqbPrUiCVFjnJECTTm2AMLE1jxzlVgB2QT/TfK+lNIp72QJJ8CcUsx+SQH/I8JQf1bx/+RvqchB5S07MXD+DB1TZxXGa/I0ajlt7sDVl24Dul5cIKJu8wwSguZu9qN7+R8YgS/Moohzk11b5Yncyj2k6VUBzMCePO8P8+GhR/VqVm7NsdGBaE+Hz1OLaq08ivstYN3ePa+iRS8GjkqZ500h5NayJwzaVLCZcdDjrc9sWF7RzPcs+JKBCGULR2DBtWind6+t2VMfnr6ZqF1v+10UHQitG1lDw2jakhGWWZSTCiEgyuZtP2S3VtEVKY8R2bM5Ktpee2caZDm5dB/l72W2wR4ng1NHaONLHb/b/ZXkFdPnOXOW1b13/vvNCLEahpi5IVju2iDAhtohPDJcWSasw/hTbzHOnLpZzSSWV1hnngk5w2zGm7dgvzANhmSNj/yrUSlBH92fmaGgkdblcQPCJ/LapeVPj9M0Xvr+IjKuvhnQhuuGY5T/1BaniBD4h4M2oH/P8bUUg6vteHXex9x6+Yk2qF0wo3sMUIIPi7djsjlPT5KMSNfb2dU/7cL/CHW+ZjgFK8ib1EUQInZ+RFEtf6IR6HGpqoywEl5oHwe0G4ZbmaDLMlzQFU0BkynIM/fHFDy8t81FGxV/GyON4Q9H1mdyclLx31vnvDOm9WAebVNarSx/ZSJzurEyffZnn26+7b963Yg7pDQFColtyv8H40YRrw8Ti7r2lAxszTHVzafB1fxNXUT42lUQc+3n5SY5HjkY/SBLZzE0f+8GGCpzhiOUft+zoX+qP2LSUN93rLJBX6kHEIqsNBPjSQHwtGDNSuUi7JM9skroR9Ge61kGPLU2wLn0Aa6UYjazta7thl3VyFD5ZyTQ3JFBoWr2PL6G75DVeDh+ab9uLUGRtcFFowW3yDpLdWxMp0tH6JLFJ6pwVSHdQaSb7EkcXok00l/pyMhdaQAanh+6zjcL3XFdjy0PF4TBgoffY3OmMlIkiyOvGwAtndXmM9ZtMxVKLIWBlnkMXOEyO3PnmXvmWUtR0ue8W/v36yBImIcROssFHh8l95GlucI7XZ7pzno/1uZ9IdKcH+GouEzKJMop1djM4X7zRGGLnab2ewt6PvK6QNtLkPHb602RSNQFb9wK/ut8EUidbkg2XrcfOEhlkCnKKro6ARHm7/ptKO1sTl+3EnsCPHIH9SKPTAvZuOBDYzTv5ogu5af9t+8vvVYP+HtT6tikqlLTicrNNPF7Ikz64CvSk1I5CRzkj8xy7Gm7xWbViis6Artr26+2MjzxdpP+JVSj7qd5q67+tNIraOA9UkF+p68DobLpWYTHC0QRmV/wOprJ1xiRsDSI+ibMwkcC7dpOP+2xW8tscrk+yP/RHFojv5P1+o/mdVqnUaAapgJYJUWeD360zUujJeTQtqxnH3AOfJSADSCOfFbUzt3dCRDnSsVe88p2KJBhJk7vM4W4HCoVl7Fm5B5DNE/XuOHxaqyJvnXIt9r8su3hVGb0kIsjPvuDQe5H7Q6UfCq4csOIw2nUqcKuC+O6Gh8bjVz6RUTSEtndnrGwwJe8iRWQySqNfNRAK4iNV0fqQvQXN/1DBVEpmuZ4jfzQrGeg5t8Z6et8cIB53SAZWP2vqQ9QqWtABLh9NdgMMLyAKFQbqzcjSY4T94hfxOLg7B5Sie0yOOngp/vj1cD/X6rGWgGqH+ZCk5glfHGB5+EA5r5v3OcPFM3m47BS5vobni26h2nucohaWlb+1ee+oqgvZxyHnsg3ynuNs9rj8N1fnYtmgGecyTLoexpxxLxDjK6vQstxq7qrMdS7Rp/J7W7R616Kq+Dmi6exGXepSDa1JlU5u+VNGrdG/vrMqNHODN1WCfInHUKbZzcaV/Z7TZ63h9tkiJMD7Z/Wg40jPszXtWzo2e9jQHAEfV8OyNq1NeV2S2ahL7jN0KdXlGrY/dDecLIhnCizWKNoOEDgJR3Th9fO1LUY47XYvWdYzOP1c7qnHyryJvBZNpWOahWqBB+KwUNHu1i9O714ti8zIwTqX93OrQxOkdX77bK/VECnrPDkqJrSHg/YzvC0uUx4mZWp7TM/CUfj8vY29msjSKMoPc0J2q8wpt3bScdz/Asju08UgZNMc6nd54odaKe+pQs9eZJ2wVebQ8vBk6d4i0rEnOZz6OLFqvJA8hp8zG3h0tzCvslEqOsK9l/SasMy7jOOVBSdSpvBNhsjuINXUBzNEhNIVfj07U2IeySoqL5lVG9aJOhqi5OgErrH6kBrxFVaa5NH02bNEgufxqcq3hpNTIkbZKaMVlo1xzJvg79co9WcLqqzX4xX25TKsTlQYyJEilyu72qKeGaZwcs+FFQVkIZz15akqT8RhSxiOEMQeF5YL3w+6D9qQQYFM3vpjf3UZ7ofv/H2e52NjLYhEGmJgVesnb7gmoRQJJG+YhT8YP4mTCJUvAKQ04ib5l/88y7tzQQSa3WOJopaWx6kV/sufrcsDKUTK6/Wc9+b2mbOecgF4TJBb9jKWzgBVMsrQoR5zybG+89h42r9PxhT0sU/bvoacrBMyonLokpz3d92rc+GDHK0cdR730UVenXSa2jn6q8SPGexMP4qdi9MmJOUcx+Av8hMS2lvOT3Hf1kBGMUsOXlD1id0juCB5+wlADFyaUwxIPI9QcZ/RmK5WtrV9Zsasm6TXmNFx0Zk9FQqFiA1i9/KlZfu/yg1d9vtYIArJ25gnmwemY6BvznEFTMe+V6Mo5q5p5LyZ8vnlO9paMTbQ9PiCzboGEV13r18N3g0uGDai71g0i9wKcuUc4xCwsZC4VKpoS9s7hwZlltILmCkwqup4zweJbaoJH8jb2GLj1451wws8ZpReod9yBzcaG91opbmZ0X6GYka6NR2YXbY4n+RRXDsg8Mq8VoFsO91KmLJl1RDAU+eAZVrMCCRI1JRssLFD2qa9jei5PCMKo1S9LhICqyuW2Kd2iG/zK4YFQz5N/jZt5YCt/UWuw5VYndOR+jhaMj9RG5MQ+2N9BrefVpeUtABDamv4YXQTYLQO3KyaVf4kX+4J31IpK5Md7c0Y3csF0Xi915qcEo0DWTzTUlrQ3VHQ4LKxpFr9e8zGt67Wllu3F7ixc920CqyIZzEYe465OhN7lJTkMots9WtivbO5e3rWP0iQt19X+Nr6vvU9i5sm8csI0rLWczTEvx5wSCz07K8uzXU6d8vdvuRP/0O/Jiu+04VDYVBJlsR4/GY4CcNSCMJJvag/Uy2EZBA67bIgmf22haa5K2PE/nS9Qk2ycvb1v2zIDP9uSMQB1jS1c5uMLN7IuXbrpC3DfNNmzIw1iYQVWvlEJy7pHesCMleiPuBXoPDukhmzeD3Z0u22mRLPFwIOJvvtjYt3fZHYdv4TOidSW8XtXF67scFKNlZmoUTz2q9P4eV/PWgF/ANrQBcrq5h8p7Elhs9yW1BYRr3fCzdvIUMYzpMVdXmnW+RAbGI6pLXc1kewXqw7vuYnsvxeHnWx+t1Xywy1w7vf1lx9egePMgS759D1/ksunLKX792Q42EojHU4eta0rPTq4VcqwBUNrCBsfSkOdmQ0dSXXqeFTwq5vSAMrj3Qh8W7Fwg8/zGzMEj/96jWiPhlYoTuMdIqvDFVjTRX6OmtW7K8qZCVT89jlZDVJsGIa4W0qC+3a6VrFE0FZty3qlQoUoJx9V6atYjCrbrBwlY4ZDkNIpnCjy21AsKP0K3uwLPac2ig1AsISBxNBXzGPLYGlwLr2hg/JSUF8yOAJDt9Y5WNDjobjnM3N9F4YsBAyhSvuQThscAkyHP8ycCR2MiKVzgQhHLYKwJvZfVZBjSAiZm4gVxq6JvAUgL9GauRYnhGy8gLKNdIo9SiFtoVt0MqAxnDMDchSekwI9KnmKBxyY0WWVsm1TnncgIrJ9mccvW0fLVTBmc/CvFbUNZHugYtnLqjw+GqUjQKj+1NBX83WEANgVj8yrfxOE7ROwqV9qGhqCx79Hz9OCk7MMK8CmhEqukpc5d2HWg4YKA8gqq4mC+00s5L3+ttBLuWpq83hL5aZ15j0AJ6BjFZyybcFwkKbIE2HmEB2VrAFAJrs7aQyKVhncKcXYAOjygdFWArSSAalEgBXg8HNuJ2/5rEqdLuAH/CAoHYLXWLZFugDW9uecfN6C6n5j0QvbWePYw61lCBGQlwknIoWRUsQ8ZH2lpRYSMsfIY10EbYaiJ54BKnlSFlgDIxoAai98SSeDRWJ+YUDtW5B8bqRp741ZeJZzQ4wSFeUXDXJqHXNraxCQ22yIulh3ppky/WOe2iJMqjyC2mluuh/s2OxFqyyG4uzYI+lPf7NjFGgCLqO7WAlsv0ToBLKN2NyOsNFvtyqkvGUcgqUyxoxLTzHRPiTwWoEAWUOs9CYAaHc3qBT71eA7kLHsa5oMOb1iVSG4LpaXA7s1IUqo8CcI8tWYHxAVnAHQvRyOiGBNPk2xa9xed6A3cEhm0NGhCVl4aRys15q1n097v7+58fwjYFlTHGUcUIX+pB4pdMLWUKY157iIETVrmTrPTA9I8VeATMwPQ8sSBWMQb2fgkL0o+ocGyFJqdVXbM9w4mH0Oyn2UNbTL9mRhewyGc3wVSAzGp9Z50cmCi10+AHPXC5oCnyhZwtd5UIUcKE5zFk6c2oXQ6VnImNYaCGZGKTTCvRAALwZul9aIiIr/pBggK9Xloj0jIWH+GiEXm2hj7yJusD6Ug6ju8yHyC9XmQZa51SfyMzNVMYqepa6nH/b3U2ZzSaTEmAoUGI8XSBBDzMAQPsrysdcdKwe5f/5ZGfnjenCYccR1ogJHkYJfyfucHjiA9hTd6IcOUXmKVK+x5sZMiddmKgdk1dFlaDgvdLuunj5DXg6vB+D2V7J7iqUUknAT/RcbolfY+ifP7piLEpgptJogysybSSEJCy2OSyEiZeo225OpseSK4n/mlaqh3181131a6vIPP26Kn0UdzRGZBzkn5iPrlN3XgGLkFhP8USg/y5oMW/lAQCkL6uK2S7HvuhhVpemwqVDxfCBkW+BtThYzai32ZNOK204u7KTY+Oo48Th6S5ZUEFf8Jni10q5r5fLjyvPF2bX+cbU+29mLWwJJHv7uYX/MnNXKvs+32cKHqltzn5wdT5avGxB9MwGOskhL6N9C6w+Rh6e+0noUHEgT3Wc9OqhfzYG/5gwdfSV1O7r3edg8zAFjSpBD63nIjb1uZvgeaPaLfNFjP8CTpWutYcTvJf77nbUupBKZk5X1P21d3Xo+3yq8opUTqy9I3yWV06V3+pPFlxihatjZNHQL6U3+wMHrR6Fq3TzPMY8rxleUIMr5Qv7Ctpo6t/dkE9Zo5U+UGjpVrJ/W2FA5jI1n9UIyIGOEifq7cJTexlNQF/ovxZi0RxwgQsAsA/sdTuNXknb7qUsQY692/+c2ktJ7LHlui5RCn8HfzYj6a1kAL42ZCJ2GY8bRvUDnxF1DAi3Ukh76/BPWPmXx19ht159zV6QSxhB7FMORbRGjonxFUrZ/WKr0G4WFYaPL8z+3g9m61TbyqHkUB0uklhcNGFu02JD8LbNeky8jHu2DM09I56uTs7pwpb57VmQcXVbQTADwCUyiFA5Wo6meHZvOyUssWGfSpbwwDiteoIqRdTrKbF5iAmPQdjWVI1cQAXzUHZNssTSigWZEW9WsS99tRvPIYtbO+odJIpTuF2ultgBM/QeqvKQt6qGXDdyxmK8NxLNoay8nxMH3iuo/M/6/Jvi1PrbVh16NNWcUMU5vGmjw6fo7E7P0Rg8CEWUBffB0FPk91bcbp3LKnDxfI8vfzkMsfLBzcm2mLWP6PFx/zFFW9o/GKMgvuNqP0VU5c50P8lByU0jo/jz87AJG6b2NknrIvR1d6cT6nr5jYkDc2h2aMGQ1hQaxnsJMgplRaGcbZozPNBLfmqxB9AT91qDgLFF63bZMvavm1AwNTDE2EJnOJV5sQ/fkdpXYCeOFFo5peJWSGVmcNOCy0QUFKXUGuCYQkYtxUot/1AKIDM+bETGQX3iYT2i3H3hy+i/BT0e2C8FOS/9sGtSTHz0tY/vP5Uc1ZzRLzJrnE+PkQz2rwLgxctw+IDGmqOHTJnMaMeZRXf883l2LKjQZsBXgLhVZFtG26Iurd+1oXrN+IeINpyssmkORAqS3Xijb38dA2OmD4xBCU1yHxMD/m5zpp4RwA4altUkDFZY71/hLDINeCsAOnkMGqW+reqgVv/Ex8lY3STps0p/4ldSX1pSyjLTYoBZNLrg49Qc+0tU78HgLMzdnyBaGxgZYg7gbcXHucokrYj1Wy70R8ZtbUbOfVzz9hjCK4o5fuvlaoOMS2OrkyAQqDbqYgK+r2hlhmwND/huCoMmhzuPER0xpC8wG/hIo17Jyj2zSg3taGgGnJZRmxWB2FHyDizj4GjwFb6PiwrM/7jCssoWXHaxZUhaC/QpN+YVxCpqlRHwknnrsSyrfdoqtetWbkn21ayLXQ001C1MG1uCys6ZPcDCI4o21OpZ4EnxVGRlo/8TtFG1kaRFsHHW7zcza7Rm5bHc/7wvWug8tID5tDIaT484kO9rCjh/Y0CnsS0H1GB6L3Zo/HYWeuDIw65qR0TuJH3wirFeY+6CxHiD9S4yzUQgiutSf8lz3cDtWh6fkzaBkCky5VfTHV1o2f79gtmDLo0XKGlExTVqRUSoKeHjdugqit/oTu1AwxYaQDOAAdKl7A91WZmtQ59XgBAiVdSrtBdrRTWz/2SL2/Ynz1CfrRzfeICN9LTVXR6PHUx2yM5PoXyprwbGp3GiG9wZ424xLwrmkAX5uhgGfCU/ix+KBet0CSH1cAKpwnm6isW7NohuGeJZShWk/Pq+4UHM3wrd9t1s6HSQgDBXk2KjWVvkhyZ9BRGoHGDFnCmeqHZDp3WPnUqI1Sf8B4PX+D7mr7pLltKUEsHa4HEIMjD5qsM89Bh/nBkFfnD0aqsqgNCB3mVMNrGVaN0eqQaVmErDwLPB41TAAdpywLsDIAXVtYjQij3TpjVjI8Mu7lbkWQj5gARfGkAawyEIoaiOmSw4P3uOHKnIHpk0XTWT4h3aZyTWGzPiUMROLN0oADiTR626Onbc1y7O5muQ3oqYsdcvaIxEeZYzojoJBvIF4hKVmNUQiQqRxoQXvlkM24leCC4ejHKY96MGM1VjfWxldfk2gS3pb1TZyJed2MXfpMdeYdLs+v8JptkF0eFSB2961qP8EJ/qjv5zuIn3xfd2KVPVZrhihj8zNt0bQpVlDWL0/CSOrlYYCz3hoHpP8YZbgZcVBLkrD50U343VL8+Aybpsy2V6Itm0VRBVU2U4xAhJDXJg00kEOEPGG4d5yAdMYV0a8eoD776uttdympUnyTcCel8k2VxJXd9X3otV6MweU4tKWRTuJ4jBOWnEOb/Lsm/is4gfK1OFKKhUvUNeAkSzxix/oOBiFDkKHsw8MH0/ovY9pRv5IUWjjuZTXumfdfyAdIprRVjcg/QjU2Nl2zo5SdlspeGg4u+fIHmzeIIW9wqYHhan4jMZmw6ba4QIfh2oX4YjF1RUEcieZh3EqKvRuEQDlXCK7Lv/xXeF2u/F4A8KHURZKifEpXdHqg9S/XftNGmvkV1f3erdxsvBXeJabJ+vm0KiJVp48lLh7xUOMumhhZzMedSCQ4BfBJE0++FlzXW9JNzFIX0MB12cMSOFOFxoN4OCBB+LCsg4vf+uiqxLAvvbXr60e1gvnf8rfK62z7NRBJSWZYWCoiWfDELI4G97zb7Fvu0dCPT5jvz/MV3TmNtWRBw1SFOMO2GpSizI+qA5cem9eqvjwANQBi1qfMWd63kbwB4BRoJJ1s7u9O51PX67x/0E28K7B5BmEAx8laP7DrenL6vJ8oXSvztoVIbjUwGJLrtdRzW20efrswkHNlBgbFmCs/O2Y+nRbOUBtKaWQsZUjyWpqTi7uQ5IXGZ5NHx3R2yTa+cCn47FcxeWFEjKAxyKvZ89tMRB+AJL7fOMQoeHzdI8twW6McoGlY6b/MOuFZI8Fot+lMtyYKufaxQ3VIlUoYaGYJI+bFH8CPDhihNCYMZia+0jzQ9LM/dPL4rQbbXjmnBSnW2mruzS9riQPUVOc+RBhrjJkIv40oqy30nbS/kd0vl8hRw8QFJ5GSZw+QC5J7UKYtJ4MfXfpGF52ZofEBwmJVlSwcQ7Cpq6qiX/IPrH4/W5P9y8ajrpFB3nK5NPlD3Y0krWoVjkqd/wZTevfA9SDWAtF69gZqcKMslMk80hjFgwHuk1xbFjJUNL/KejFZpEMZ1/Cglvrc+y1Axtt3/04yyCQb7tGfdmKsEB0bfsySa6rBUHUjggHC9I6kdRE8EBYe5KVf70Zh+vFo6tJAXry+EtNG04ty9NC15a3bG1n158Xwo5jE5Esbd5fgznaPnvE41vbiHNvmKALiHIirwEhZl6W4Gy36KUqOpahqX9IAyD7rNJ9DoMyrhSUzmAP/waZJ7mKBkaHhTFw25Vv6pe31VQDJkNKerHLFqibcdcwUGq9Zfm8rGSlFH3+/1XLNAAPIla0b5N8GttcXszZmWoI5tHYnlGlbO+zq93qeD1wdmCl9Y1hPaaXeocSb0Gh8Yz9isVb6PN1SJsye44qijnUoYCYdM+KxR5BLs33L8zR9IW8rx5epH3p7pD91xHfYybimIy6xdMWVToJYbsj6WcTT7xcLg97RT8+hho0rQertYtZwxAclQT8orpLozasnEe+e8CuPuly3Bz1c6cQkOjVeqm7fti6hfLbUF9R3pSRKZ8NdLAaIAzIW5b34zm1yjwB0LAUuLzTKLxqXgFsKeGdzJAXQZi3iciGqUSmXVZkv6+r3PXakH8O1F3qvWhqcRWGoJLI1oDts7X2ANheXqtOd1OCr7+G6EiVzxLMXek8qdTqst4VXVCx4FIS5qHoaEgPBHV2HIvrXumM1UVMJuaelV1/ESJ7NiYohnQHKls2ayYkgdoHg8XY6Mk6p8qKVq1FeWW+2qXCy41xKUqZTKfVsSo9horlDGpjymYm3agax/EeaLhRlWS40acLf+UPPkn7IEJZsRrZGqQORSDQQFk6uRQ0UpUqvVO5aPyqFfvvGjkSUjvBBik9VByUhm0Y8FUOYVmYDMo25ZIxRRwvSqmCxEO40XTs2WVItV752L9NsMK7wsxUwOjCTN22Q+SfhQFk9RsHVTIv11t1vv1vVp0G/sHxP6Zk7sj9XXBe9ZBw0P7tmj3f4Ar7ZbO00ppzVvV7G3DUFQ24t4TmQMD7XJ8xJVuY5RR7jyR9k/knoApvoWvqzavUf1TTz2Y30j7caJ1lgE65GGuVphUQNnU7BcK2+ulUfK6TRdYAfjUetkTq3m9Bobky1uvQsr40zzLkrHbwnqHLp4HIb25oJ0KoWt2HKrlwcqUaPSSjkaz4QjzGkOnrVaBxHOJcp2tNtAOGzb3NMWuqKxi0zxqzzTyNLYfQn2t0M8oXC9dfkFjZdDt1cFfClMttud2BXBcQBaWIM2ImHe6IWG6+mZtX41bgbsPFmhyG8ZnHU0QsNlwwyxzSeH14zTjzLY+OvogFIVZcIRdbLtQeNxxWV8VkXoGaE3L4GG0d1WPn1cMH2CqnXS2wdTANIv8YmLRX8MjbaEmQ8tA24htIfVlw/KAihDRtgofACnOc4dIQWgy7eGig9boXfnJiIOYQDh1soMAgmWdF/ORdzeW4ibavba37NV8yaaT6SWPnPiWz0nyzi3rVdGo+hCu7PJpOmweW9+GENB2S2zsgu0FY5Q1B00MNAvlZ/+wiuxsqwL9MAX71jhwyfUxlxtxBXUc98aDfuYouKJQfDQ+GE6c+xiYY9GW6/jTCWQC7K6xNF4ocTIJrrIbgRDpdzsyfduYDlbl09U7FNus+0vw3bkAMs6TJgJLoO/Lx6FGBIqBFGpHG69DdSbOlJxefCwp0uOoQmlif20lEOP+lTxzoimBuxhe0q1s3KlgEvUK7RZO4cQnVj1SztFrt8vMw2KmvtyKhGYTg6Y1Rq/HCHfACjsrY4BCOjNJ/dY95762GdCN4nJ9C4xA7Guc5E93nRjmRQQBI0Hgx40oFfJROgOJsLuyg24uVyXhKeornEuYDQ4/pQel9kks2kzZ8CORDPglY/GyrtP99sLl3sS9+uoTboXlVxEeWAe41lqfjkindP3jMuUW3jdDHxli11TgxP7n2p1Zzx/VA4qi31/1SqAMR0vK7mSGXvdoy1P/wj0v3ZKtwrY1P4uKKN18N8MMcGjPH5TcC4+1jm+bgslJ84/3wDrIAZqdC+hZyFvLcnnBaKD8+g5DMkg9if7pgdUQdkNImLTqkmJbWpbnGN3rpp+pxoqTjaNk0FUHbx1U3W7aQEkdBdBhJ+fVcIDfWwxJGtlGxwGTfIpJaYPk7YnSfYOjdV5ynzop6isfV7lIqnGkxUvHJmGVzOoiAHAxqXxha+KiTc94ApUPfVZqxDCQT/+EiftI9x0/vP725DFWCxzk3Nzog9gXvxAVd9pNWqqFXFj2k7tnBZL/etD9kF9gsCz56z2LXyXxQYrizdEQIly+mgjsg6g3bXcOXH695hCH1DMClFBCXGEZw5DGpkUliyK8TgRK5jczcmLqtkxUve8LIQ2tYn+fDhhOodvufWYr1nc7m6hNITySWLDZotpS2na+lePIWBqedO9UPCMmuuE8z0TFNrcIrp7Ipfa1Jay+kxYdgbYB33ZMTo07HqTU1hLl5sMjWxHbMKsBFeok5pbZNuULO0tgHAdwzoG24m2Fj9abEfu0Qnh8clTMnDZBU9u4NLMCOlwlq3iEOTDyZ2ux7sr8ml/qhPW5u2Nq1PK9NsnqtAaxZAcrU6Lx1u4ArpRA68MD9VSV3O6754wuxF/SWepEilWGW1VZWUeQ+Nm0vrunTz01g8q7JPbh+86lrVPJFU0pbIXMMa7TD2P2M8npJV2oDVpg1ioNDH9DaCqh8RIlbK8ri5uaGR1DTH+FTiqikovUsH1nfWVguQ0WS0q81HJUedCgXsxLPBJLQ6vHWPzSYj5Qxp2pcK07PQ7Cs0q4lOYTLCmzRGCAP8P1KiRnLfb7VwOp/6SSZauDdJyNx0DM+AeSKFHkyV4CdByM40MMJI/ivYxSy351ORBkto0Px2HBMekrEZBr5lhn6XQnsd7HuEP327Yyfh1GxYxOIlvhy7D8XcQZF1F3Li6k4NTgCkNKcry7IlVfrmHxTcBPliyu4yBZa6QWezpR1kJmtkBQVtktO8gHL0IDP+efCpLaeXNBfnHePueX7lJB7EL7TEcfycaOIrr2GOnHNgpD0S5Impd+8Jb1X8s4JyurwdxfVzgnBb7HgUnR17LG80UjYy++bRka+E5JqPIcR6RZY7yKv5vDIu0xKVhjSWp1qvQuhJ/Fhdb60/FMaUdh44mjsruyK66YY3kk11n6HtuIg+p1SyRlOxu0Dsiawe72lKh7FwkL03pH6hfHNKbb2DWoOnfaSaVsqpiy1omIPCfwGP4UcUhrq8Bwauaca1guyhJrXKPsQF9pyqEjJjUcV7J2TIKyvU3Q+5sdXkof+bLFgBxeHp+w69xU7Ox6eU3NLDofbtsOLSKYdgy5T9hmaiCPi7G1wsdWojJh5oeKZR2c1FRp63eLCRvdPrZFzLsEPO6J2oiy3pnOeFdbCWR+rpFDTeFJC3pqmMAoCt424y+8kDyncmLR1iokSHSlEp+KjZ1Vi6IDl1I/waQf8EMP/i6kMAGN98NW0cpBey/OWqrYttByaDrF0H7Qz8CJPm+usR3InrT2o0d7MOHR+kiNZumPqCFueay2uaajnvGDJUDE/cY41tw+P4+g5CBn8Sm2bUg7ew6Tbf0RC7y/XuG7nLWMX1n/S45nK7NsupkWDWd6BAfmR2Fz8QX3dRUI5wYFmJAwNNKx7+5fwBxYFnI4X839OBy3QKcmcb7Pt3OnKvEsXjvOmxMszlpyHpGM/M6nCpgtdarm1mK0GLmSm6LUWR2+Tx5RhqwxTB7Gnz1MqsFLoilA9uzckQmrOXKdSfH8iOzcHzesVqX+EkL+pVFR5dTUPWZe7PPj625qPzquli71PqiuJrMGi4oNbQWEJrm8eaWCuQyuKtEFTOV4QN7u6cWfHReKnedOxOthKBfldA7vxUNHTAnRnRISa5JLaOMWoeeAetqCXIglueGH5iaCVMwz4ZqHgnUFPkRluB5uJdhbPnjFamlWTguIJuN4BccJR7iDLl7ThqvFI+9LDKvvusP6sqXnFJ/+ClD20z/oAuU+yw+z0rxPglRKuA/Pf9H+uJHyHGS9CCbzsHBo8mRLfbWTN+ejjDaCw7fVlPTOx0WdGg52Mw1rYDfGCWwhGeo5PPrDsWDL88v03wiX2WNQ/V8+dCKh2umyi2G44ozXp5VTcfIN/TOiraNyZ6JXokeovHwA/7QkOF5E5b4l/f86f/Lro/epNcGSqfQhTjK0FeQtT4Lr13KZs40+z+0V7QH/3gQU3EX4TjwmasarwaHaUp6gl9zJWnuEnC3MvuL41lLtu4P1pXkumcwnmsifSMmnhCRBK3nJ9sqyzyiPX6rFBkL3r0e1r0PPozN/rCZ2MyEvLTYx1inIeh5JfJ6spMq0i55xS3S2t5Mb0XNQ12IqXJfrH5P6RQAb/xrQs35TrSYUDcnTQSo9crtH14e//8Az/ePfxF7Rc+/f8KQjrxd+d67j/Opu97gysGDZCwTbHZL791+YGUFCzwwSSth9Qcvg9qI0l6HCz/WSzbMkUOoEJ3sUEM0VadM0oYIOxJrfUoknAl+967NgDK+JUm8b3ETBdD74mbzHtlzZWhN2ahFARnYh9Sc/7u9iWTfZH+VRBdP/3aMUPKgS8tPMTybf5rG8CtiiC/QP9DLBIFAGPTZbC28ZlV8ESFZO3+Qd1BNT1CwZNbSdwV3Cb/HUZeM9ki6I/UIJX+032XfL2WAFSIfmivSvC2QyMxGSzSVoqEKX9b/4emm6KUB7EEYbyrSSgyaav6wK+d1CSDoBXEOreYGaJ2EzFa1QOlkmpz9T6gidcGkyQtQSWNDxoukMy/MgD+TgbswlHp+wlAFCFCVv3ZG4nknyzAJeNql++R5tzzRxvEpslWOviSeym5hR/cUuUem15KZ1Xfk8eW1PbhAuyoNN7lgfGZISjUvHEkyt1JMlNwT100aoRDr6viEd/sJ6u7ePnSOTiDvs8nHP58XdDRiebPlndrnDvp5oHlj9c3zi/eSMqHxbc560rupmvJoDYkgcyBfvJoCdxLnY9wfS/AbjlNHnYHNbqTvc+OmOOCbNtiyFA/2TyHcNI4CrgzZYlnTqQIeb69NpqL/E7pjn7AiVwjvUWQM1daa9pkP0R7XJ5K3pL1ZrFbRfNG6yVoe0BW0YpnL4EY1B4GhqWniGbi+RlBNF33ijLXsI+NuMRGKP8OaPW2uxH7aCzoQKW+lKGq6Fjd59qTqXE3GsqthLo5UVa0xldXpd2Al71NvWBRS2p4WGpqp93tz+po9SBafoKy4/5Hlbn/wnP/+rabSjL0eKk77NhcTvePNR1M6UHfm/Jae63/wlVj/ftIVVSoolYrGeSTs9IBxo/Qy8y9t1WbfzlkpEKx5tnwXzXTDPPfYrINr3HOwNApKJE/5r67fNaQlpEdsv0vf/mIfOIdKSfaW+7PBoGst2+t/YrSHme0VJjlyS58CSRWMyGM0H/nBvkCPEmySEhLLYkEe8dHHn6QMp9W5+OyiF8O2PjLOkt2ThaNUvwkWWJO/j8m14GPVhd1X55WUCCNcXrWfKQXIiUJG558s992845bolBQ/IJ2lT6hK0sKK9BeUYMG/1YA6osJpnk7i+nBdlDv7pwTHL6TuQGgsSo8vzR7ONg9MKeLR6dVwUs+sNdiM4T9CHwDfxGHOjuAUTeK5HPCV77vz5BickUvhK/oApjISKWpvuoo2pZ5wHdeGePUwSxGthSTFL2NO+J4HKFTOZ/QISKnH+QFLrEJc4766tyrXV7Hmx6OzrKriel5+90iEsg7kAkxfGH4Hb+KqrkBgh6H8R3gzCkOSg9g+pPZsBjtaIQ32ES312sxxMmSLuCo9UadtkK21/hQjl7Opr3/QDjM7gEZfQjCUZDuFc4ImaUrHuN9qSs0867XFbw8iYZia68prCdOeuWYEUuS5bM25kkhXsd/iz5F09b8TonNmyAK3JnRRkkgFFoNxPbFmmQCsMDqg2s00DzfB5omt33Ivk009jUs1gToUy8Vkbz20IZOC2dBVZOh+b+WMuXFORXILZYsFJ8mZEsNjA6gRWbMKOqSk7q5ocKyikxvzVW/aR9io8GPFKW/1oFxLVxi5fQrRgfRkQXI4wKAON8YLLDcLlml6bYWL38yWsjpuwjlSRUlZqd9/ysEWZC1iS3ce1zaAFsW+hwEHjss6HQhlP8JzZdnhSxSeDEolu31jnZ7rdf5hnai32M+WsPa4AgQBM1O1qcj6bhNvRL42cg/mcr6toYGBSXWVnViDY53d4MzpjZ6vngt9vhwLwe9GuhJGkayZ8ECKX2phLMCGKpM8VUp85PKyV7+SBjW5y8GVxCtoTGMRpPz7cig24STkGSJ0vthGQ1hcSamZ+Xq95S7rToGwifdbsGwP34Gk+0VBxMnUT3XXLNgGvHYonMqjoSFFdi6Dcd7T7xBn8XPe8p6b1y3u9fjQ3IWZXKoENrfWObRJS5cp3GYsWefwIpgc0tu0jVNTpE+iO3dw4NcZK1XUf/4bBgLXDgx3hq3zoOPYmMjum5HyqSoVvRw9tFhUymce5TlZ4TyZM/TfGNfI2A4B7UgCKRwbkNQB/gZklNGfj/I4QS5RTeRNmctakRonN1wM4uXtBAwqSsBoLdh+qIpUWORLiTVXWJpzN6DCsgnwXdweJDGi1CAJqvmsmsNQ7+21mLTgX39bW7e3i+K9/LbxNEnGdgLdERFg7Uf5l6cztnVhuu7VE/yrdsMIZHv1L5ym8gSegIHvjXESMR+LdHeKD/22/hYLG/Cz8/vvVJvd/nK+OOYHTvy9uEDPmWtuQOdbbywYN9ZbsSed/n3R51QH1zs/Yeb/5/MZ4xXBWBUL4TywIfwFctOoq3RDR/WVu82zMMXDodSd+OI/PiSC/6C/ZywKqXCeUK5PLRlF8Es3NxhtxDKA4WOEU6T3hZQsL8RgbZHdU0jBllDCj/D0erIib9p+EE0b58oa2gY8XveFsCFCDQxgwX/IKKH53VGVxA7JTNbsLgNpjhFZZcxKACnMEHtugiYtaeh5iQy62JfsfDtqR5u/rM9H014e4Yqnu8179cPjzn1TRf63NVNJ6+db8PQd3+VVNu0VqO6bDcWP5hS/kbwcdN6yfvKHxtgHWES5PqyWWHi5ZuJjWDXb0Ap88Ii8awQtRm2ydGJixcHASp6Hhoc98sq+JF84Gf4d2zc36JZPwtdFWW54uzlxDhGxdmXmccoBUT7gGCFURmbYyU31zk7OA6h2MLYvqN8UMfPUBYQc2z0AZoFpPhkFh8NdcqC56O8wjlGgZwMtKC9C+O82WPRg1NvvpLUydn/dOuXJuMgS3dewQ+YKQ4W7RgPFNniWnjwtfgt3+Q5MFU/chpuIbm0a9DDqYTKDWhHhJr+ks895pFNo/PibSgHKkjqtPRAdwDttCo4KEdf+aBZ1tTD6Tkf6b4AnrPcZ1iBtg0TAnMbZFc1m7e7DYlbTxCNAh3mWg/GlavMmoKAgd+BUYFzbMJC6iDH9o/BQYmIn9Tb/fAyt48oqyxhxvGm51NPl3M/1+fNckCXxmV61MQ+cERi8DZpQ9nG0Eop0NXRLi3EMxVfHgADnQ8JSliFnyE1N4Nz7NMl17k+bT39Jf4qqtYLiBufjfPYZqHlxuZqWzGqws/opDnTNJYENpmhXDLm7s4oVDw2aHSIxTo7Yuwy5s6gEdaBMkrFYQxcWgilJsi2JQTZ0FQLKySOqIVmyelqsSAZZxy+9IIuP5oljGJMXLxorBar6vV8InPbQsbPqGg1nJIBKtWNAkNSN4LGEg8sb4sMN5JiEIqs/fHrvdeNtDXI2F9mL7SLxXKetYVNGrZJpiTEi7cZPSXalwN8NPgXb2QfzHcp8YOPOo0dLtf5fKI2YZfMoTZ7Vxk5PPF/zNZJPqJ1vZ1rbk/c8rnO2zgQDGFyGyS08AyqgoTB4VJy3qZj1/0IfIDAh6c1r18PdXo8ycmpD/3ZAxUJecaiDsxtQ2ZRVW3GhzOxojOcZiTzZbjNo8QAdS/Mcvi9AIbFvPZmjb6w12pv4yEw+gVAxX4WWIMvFrba23jwpzNIYj5trlXC6/Ngitt6Zh21u4PwlhA67XUDfmxN68LkHgS+ICz2iXdG3tsRJ3eu3xFncS60Jp2dLs+/qzcKH10eDqMyfDygQl71XM/cDW57kBkbqOxpmKcB0FZ44PVJfQv6rJDfFCscixQo/o8lrxNZyeRnwau9WNzInTDXksySlKBu825YR0sI3trudZQVXnduKwNChGSMn/qnt1Udaln+CEftOT9OG8fw9VtqTV5PedPAo2c20CR71/jl6OsktpKstT4XpRRyrIwocqBJv+Uxh5Z0IifjnVofTIrzK3fXsFaPI+ywrq0aoMTsb+2Q0dTvK+Vyt22sZ8tpaDc1ZzmgVhjgcAaroF4yvdfs0Y8Hdj+3zqAhafh5yz9dkPVDB5pTof46JF0grT2SCi1jdzimG6tnMRQZ6S40XYeal3rFzzc5q+Qnl6SquqCYhb+zDl36FjDEB0dCNiEIuk/UFsV9/6MXGXr2CvsCVRtwM0Xt9NV24rqBE9y0nGPoTjvbwqFyheubK0DPMIVFy7fpsSXo+Mzk2zQsgYKyf00HpnBe3uE01Pd7bxFcySHshxm9UBfqCxy2mfp86QuL18fN4q7c/rq70Cd7HB/pympaFNnqT0Q1q6wyTWbSy280tEbDwJpqRP8VDW2XKjaL9HPHmPlnZjGOQTuxgwYbWKnGgcNtb35tGS7e2nn+/O9Ti+JK9n0oEhfjwW0EAq85FTaLkr4DmN7KWmqX0HLfHfBA6V3xboq3UT4tLPA6d4nn1ojT2hCuAuUxsuqSuj16JSpI3R+g/U72psrbXgFtsRcv3PhM1m1wcNEzCUTaQ+a9f9/eHEPx9drxCW6htBjQOcJ8VnEzuLEky86hmV6OcYpN/mtDFN2ScxIpqaXtsPJ5Gff83rmBTqu7UjIUitEYmPXCxNimzjay6AC6Tn4h0ws6Y3lvbwmTk2AyNyboTvRdT4CxHtUdCI6TUCDmJdIqMVBD8kOXsrP+ajTkboeKVtPggZvP9OHAG+Xw10WWN5WaWQml4AOeTYmsIZBAnOoFy7fxQykkSTdQyj4ci7mpdLcFcmFjCFcVdVl+4tyYnkbwoDyPH8Lo7kPkjCRHP6ckU0o7iu2pGWK5Iv8+AxFW9SxtKOTLJz7jO5pLEhkvsf0JfjQJJECJE0/eNN2SZ3yTIMkbBAMAbKT/oB5zIQS/4ZP/5KndgmCTwaP6eFaH2gcIOof2YsYcnvJB5Oi/+/gzXUO0QtOz8GLMKV7pcbm00s7Ikmddw2Fq8dxDT/+T/mhq2phUM2VRE00nOuC5+slzNMtvfIDUqz6idHiJCW4X+WSDsiw66sQZvvtkGeYaQR2SMslKxEQajOIgUIxsJI4iEgdTJCaA4qBGVFT3ZfSufX0OkhrMHwSM5/zO0gUJpFNsc/vhR0tRYagNGBOskyX0DmI+rZRP8/iWg/OU1vmLmSQpoFYCSG1V/zEM23JI39w0gS0bQZ92MdJ79/kXZL/XMfnVTrPUlH5oaXefDLh2C4utSUANCpzBUCRIPcXeE7tZSyhsXHosNzFqVvZIk7r9UMA70RjISN4xRDHWJveS8tlsnBUiMpwefQuZxPH63CW4rw844cL69QWjRUqUFcJkaSUpNspp670na5MgyjO9MLveTmb1eCzGKP6gz8UVFGHBUbLuhKIa1MVYXZRWbOKKstqT79acxw2DbYCwKIneX7U0T80yZ5Xk1Ii1dEgzXhT97Rn5GRaKNBoPU55XMB06PmWX7o+82oCLYnjiawS+IsnKx5xedaU/2HSSIQODjE8JIRpox10kWrWyozUUMQTf/GE3ykxEh4Udj4UPq9nTvA+u7z15c3UJ93qjIFKd46AMc4OmPe24t1F2J2CJbxkzTvdOgBbfW/O6MBs40Qcuup3IH+6J+fF1MTSSVPWOgcC1lNoU4gM2p2BIUFZFJjsusElafYLIGal1FQ6eZqmB2rYK6bdmJtc0JYBpdgKjR1qaDDRpoCYi6aEFQxvQr+Zco66Ny1+t6oCqhq70fgxtG9BPM67h8rkx5KscYOgSYip0ZZUb0AuEKtFchYe6gm2iLwmp3o+hBy5J8NMDF9GvQh1Fj/SesKeT/RfGbAL03mVDrwNa1lmJpJx8Ds7n0m6E0S0u/lrxw7WX+JxYLPE5rLkoAQi1DdNW1QlokRMWZKOsJnahmkjPqoMrF+SA7Ak7e00OyZ6onUhtvzdtXsTEdnoEVTwfZKPEj2zes6DVjixuIoV2ejfGoxBzi019EKuDfaAW8tisJCFWmvAVW9EDJE/Aby/qcOrV6jNWbzyZSnuUDq6UMG6MvATqDrSonuM6J29HyRjN7wbULuKNXLK0E52YodLhmGc4JS3B1lKyjDUru3i1pABV6kIZlaoI1co0/pQUoErpkzk1zmYG65JEKCIRx3P8Ft4oXZhPS8MAmuoFBs1SAH4SwnJPArlIriDNfAZrrb2wPMToLKiuIPdSJutql5aVtS4JyLaz4H0XDpH2nrKsvXc54sDgI3/IXgj2xN4HckvPaY+LiKR+kNgL+TOpWqnT8qbkuy8sVU5Gb7Ku2R9eSiqS/sJhNfR/YLXVXuE7IWilhRrrIYojQsvmAAODnTTVpCMmGszzeUjtRY9KpmWrPF0mRw9f6M/9rJV3FrnvNbPdd5tRelifj9o07w9Zzf3jwfv5jHnjorKqDvhzsYXHrA9E9kBNoGVPPmq8XsnvqvIYmnaw3uq+8NXZsr0anz/B/G5Uri9LWu+M+8SrijZj6omRJdCoi5mFDwSd36kq4pU0h5hrruedthpQNl0/JfXnd67hqRNkgVE2yCEbcjZUs377unIV0BmCFpDyFcCPNDrjRm7CtX56cQdQY6LQ7DkgpR9gsc7ILi6/5vzDWTTtbB3+tcc+h40yvnCBkbJPmAuvhuHIdLFOg+IfcseQQFQDu5wijaNZsWJ4KpwPtHy7iVcCVgnUbZhi+mSsGzLk2g7Vf9UCDpBoiWujJTjgJrT+e5ET9Vr6Xea4XSBeYk1FaHBPaQKRFnJ0i+AKFGvY1qnS8DiKV5zBvQNr1MippTwbJedsTjDl4CpyBafmaB342SVmfdEDJG2YbwkJjDsNPb0sWl/ikc8p36uVm7KS4OJEfW4ubp5hF3uHy9o/MI73xnAj+c4YkaW9IAPFRajiglxY+7UZ8tleUdWwUmAF3tJclhc9AXPwbQbKS7ynejfydokkJjOVkaAb0lM1khdAI2kmuV43JatwWR+YgR6yyt7OY/gTDDpP0WCNO+4AZFxxqFqb5H7YSdE5KwGZHfjcvTmG89CKqR19O7E1tSyYpyVEucKhQaCxmj7JuMBzg3rvVMpZ6hLKVf6JE+UU/Rf35QnmPaw91qOuIXIutO5MXCWba5YMsWj6MKkFY1gUp2RvjBV4pns6lLlezy3CEaDJWNcgM0TMFNc5xvA83QcabjYRPV08nazs5a5uBE0iO7UdPHfXIdViSRA1g/2xkm1JPd+u6maDs637hX4WHm1fKODsebdzWxLRD7M4edHvd5BNIfo8gx9fzAzG4M5+V7EPMEPd84QZnjsUR/R+tjeP0eTRJAGUd+u9Z1ntysKltfsLTuHJVllt11I0S/NdwNOyys8KSnc4yB3IuOTHRnWvPy/pCjIP3bHzbJLr0ExCtHbO4dMvv0sdPO3MMq4t6VzqQZRM9FvWmYA4KDSIfdyAag2Fcok6JtBYtLaZXL1x2PegRL67Pm+LVgvFx+HXw3JL+RncNqxxUbcmKryJJa2UrmWL9FUt8KhreULaBrNaxq0EJKl2OJ0d/npSzAyKPcIFkjTJIIR5hKqNXDZEavi0I1nObDZLVLnqxUiWra3KuO+VxFaY/HJVdg0kThKmfDKJIVunl5egRiGsvlCa9TAcW2r2Idr0NYGhROMzorfed8Vj+uBrQbBlr6GvJ0lSd4z5KeJVtGkyv/YsG+4QRuxSQpOkXXFkDyftEY+L3kPI/pDfx48bkUTVzT0mKGJ8hgkX/gDXTNjUNhqAEuar9qo+1TBKeXd3BXdVuSgx+2cGzLwBuKrtExI/vwn1yjl7Kimiv2LQ2HubzCnCkAMVHslUCp3btGenwhkvqr5+wOqD3bSgd+6yDDg8fN3AgMygQoj3OiLGMM8ZLtdZTShPftwachew7EAynoUtSEW6dXzPmQfGwiAza6U3aRVWpOckeGE91NN5rumDPxqh9Xm5Po+R5YRBKo1K5VI9YkZgogk+G6FiKok5hAlIchzvuP0IE8fZrkRcILKhL7kQRWf8NlLOO7P92kwM7bu0J5SR3yzcmsnGmUBQ5qSMksgHyEyekcLDHEvTLOX3yHIvGrJPFs6VXKKPvMp4k0u8pG8c5WOkEvqTMqXUoRa6+RMKJhfEu3GlNx5rLcNea6Sa8xihoL+3e8HHXa0qNj/Bblirui0+4qVn2DW7MaEtSuzykwpWGOFGFDShdH8pI47g7Yokb5XZH9iqOmtjXBjobVPXXrM8yMngrhPnVm5s37VhJKXIFlktFCypSmFV4WefSMV5y78HmliUTBCQTKqy5iNGXAy4+qexFWyVuZD/KBSigq5GY09y+E42rvHLsg1GzG9QPm4Zic+TjiEY7TXuW9AQ1ZOEkrFwoWHJUVYIMdjZIUYCvR1dXgzyor2hHSB9bvkZqk2usRLORf6+/mQhJvUsrHHsB86v4MW6/X+84b47Y5b78hcbZNcVP9lezZESAH9RxN118QazOvlz2uklwm6AeYsalSx65QnaTJk7iPu08Sjm3jhqdezY9c1dHGhKZJmCcEwLEdY09gZ4YqqE9Rj4x97XC5qNRSsQnJbi3Umpj3R/kFkP0L1WcJKTgOPh/zsCxcEMohITKUBiwWuCSapg/IQZKshG0Gw6YNJsdSxxyc8gP5HaiDkJ0oyZJN5U68dRKM2xHkCI+bzZWRQDYY3VHAj9Fmy3hAUZVvL+/XpLwjbFApgMjVs1cmFEGcUVI1pEnDpDQGAvcB7DmUCxPtEXIYnq8zTb32OuEzr7ziSmxIUEcsvmxUlbrTo8nXUEbNRUDY9Ln9QnEhbC+44Nbs7/dMMmP9tTsM24c0LFzmdt0KLYjN+m+UWHlUdjgvwsZ1NHsMKRxPzdUqx8pIhZr/7Wcx8kkJmiU4W5Uj2gTS8oZVIsNuXVJ1ojSOFnW5E6H90NsVn32dBPLD9BGhSTv5X+EWtse54XJCDPqYmCXmnvVqfmwaiW/i4H7TPsVTbtkQR/4SD5r6NXdQsJrMtN7PfE1rKsgUIrUCQ9ZpN/D9/lF/2nU5Ipzc2HJtNvny9jyMfbFXmUrKPpqCb/9y39Kg+4mdna5/+rtpzV/fPb6D+phX5RZf4kUhpt8ZxuXC+uXXU4iCeERHWx18vJJUw0jiSNpxbN3hbI9gM5LeQ1AGPmE+vR9v5nrF2+zNIB41ADjBl2RJk2mF9H5VV2Df6P1tmFXY6GSEaUX1hc/kym/Q0Pbq8I5eNRlNhyz5uH5OW+THr6Hexs7TLQIYX5OevKDHac+24wryBheJXhUohWUmugLym9n3V7iV7MBYt2IuLBhPXugNeL0df3OTerYr7zcqCJb5GaLTGO0vy7N67H3jBCYMgtNv8yPxeh4dvJDNA/7tKIrLVH9q2al+iVa8k0yqVYKOPUOmGuhQ1qsSdE7qmDOqrQrnnjwqvu8vQiYAcnp0SbCsp8PpxAN6YQoGUOTmz7yoyTrq/4U379rbumpv4nban2tVA3mzJPYbXX+5rpj8hPuwugsuJrX7bhnjtouTCT/If+c7pF52CKv3ihX5ZtpVRltQvtlHkoUvJdP43c0OBP5zycHhvEPn2wNu88U7eTJRf4keyz0dyW8eFRx9sZvvOzqT6H7WEorxYuJx8okBDpp2o8vFK3OhNdR82la1RZBWHLr4lmr0RdMW2rElpaW3b5Vjalnhey2kuqrWpt/R3O0tf21E/nCAjDyiT6b29NXxAP/yYULGQYR/cdmTrP8vxS21Ato+pkWLfdFuDLBNc1Atp+92w2/MHbb09IjGkC6+bVMjpUstDje8LtN4tYszGyFDPHZjOOd4XbFiDkqFDZ5d3yN8toq0LLJNkL+Kw5QvZYtQ03R31/vJ3zYzFOkanFbz/URz8exguDRmVJ8VvkfTMHn+8Dado2VkwSFuNfmGSjkuBnhhxnAl+esDkx6b4zembA/MTbeqgaQtEDRLX3Y0MFjT2VWPyZlHm12bUF/fSm+fBvEzoc9gVTT8r28/GatIk9HpE8N49lpGJrknazn/+2dFBvbHGjL3zHB57LLd+IH7kb6frOiGpHgizll7dfbbxIkrjrSO8eml7DRg87opqqrq5pZ2lRfRUMlz4ObX1JN3Vvkty39Knnkcf+OEsvR+hL/7jGFEt4cPK5Z32i7lji0ePp245plcmikehjkfcFEklsR9e9DdlDY05RbT70PFM85MYJJ9ArV7g4v+ty9+P513jyCaTdp/GAgqTZfD0xj5xI2n2Sc0T63o/T+AdBm0RHEpc2gs/XFyT1wtlUgPOd31Wf+EDwKaxtdZsvvOw35Y25OoFEqMuSMoGOt4jqau3ZtpoZq7yqc86GXPyqcz5OecdsA3Yj+uzw361dS061d3OCTznW+e4P1heAljZnuNm9pKG9XtDZnaNB9VSSNcXf9e656kybuq59LCf3rxudHPokb+g7fmD/rodYPnvLaB/rx8O56ed4uvG1iQD3G974+l5f06EfDcL/R3cY+9/FA2Mu/3vR6b/94bzufkaLN3FtShCc/PEbYD60q0nlnQvlXprb2gXEFa/51z1HW1AqnuOrKcTDN6XHTbKcc2x38IuSzD73IdV1bx+WdSaaW28WmImGbfSqpmxDFVhLJhY/hfT1ZtBX9KOvDyjffJRWwI9gLCx11tPIP21TH56v99uxM248Z9f8OJuz90fD4CHb9p/2AFAynJmZyTJDeTGQ/haRxL8vSQCAFp7rDs2iW67Z3YK6HC9rlIsJ8lwbF0ggz3f3ESUXMaBfxJxepLJbb32AdEzMf6/Z/QLkP0M75WfE673j9f4/eF07ru7XYRhX2koxAUyXmAZWvsUxFxgbgoM1SF+ggRXxisDcQwsJQhrj6fv/ICkwHJAGC0+iiELmzX/KoJd43qqytkxA+QwAp1pTrXEP1E8YHIFPB/YYwZej4u9YuM/V30pnzIBNLTbtInhwdujE1UZFG2FhYGTDZoTJla9HhWVEOkVsrUULJtSAe0NegQ02sWQTv/MgT7J2ExMX5A9bvq5A8IqgDMczojDcfFwCapiBEpl18KLhrYiwisFZBEMGkEiZSavg/LKBqyWVAsbKADtVhoEchJyOgu1IGBOZerIdCCoES9iUAbSABKdcwlA6PRLG7GwGqJ9gTNjAcGNSAXksyHIFIMCNSVlIY49N+Im0JQawGZjsyOccyeyV8KW6MP7CthUgjjilptofxPgHy4l4nDAloXfwCTG+YGHE4wrvWek9ywti7LHICE+MM0KtyyNi/IsehCfF71A6JL6HxXeQlb9zKMR4hdqIpyPOWekjAsNiQn0ksuI3QurhkQ2scYx9TcgDLlmp8DKDxYKqIuQFfyFUmnwhxjtUQsgbPpPQXp1HjB+xD4l8iz8QqsD/iHGBfUD0gl8QqjbsuVewj/fYK6GvUVt8gIFewGfE+A37UdCPnF3p1QcH4wW9El7jiGVIvNYjlivitRuxDOhejRAh9/vXxJ8z+vQyoj+9/Mhx953L37j/uOP+9jBX9/b89fUJv0Y5Jl/j0PLFy3sclI65TDgwPaTNyJ8bfvfqBX8qrdKmwx9o6dVv/M6cefWIXUV3aVPjdOA3r+5xShTkKuGkFKB4wrjib+oyjAub63XOurjtwvI+bbIIUnS5hoLiSOEQ0eM0KyCiZJpRFHJcHTYBxzSHBYos1CYDRSRcxzhSdjTYLRTq8cO0o6tF2kLRaUABHNuxgRG0nQydCWTU6EDarbnXAop6RH2iQKr5nXlPuO5paUZN3+0d6mgu1gkV1sPeN4KcghFyRkndhJzu9AqOHtviKFBu1gvEcdixwyY8w26hg1jt1CEI6hHNE3nU6BC2UFU3xaZ2kQMJ9AruLWyS6BC0KH5M7YSiCHZQNMRpTEoIWCQoEZgpglTYwVGsE9hAlnxM5y0U6mkFBmlBPxbFkUyERYKiEpyIUDtgddZhBUuhqA3NpXPCqmmQPt55PI4pbAIZ2BxEIVdwKGJAfZ8MOa3YjOMviVWjFmosIcIIRX8+AZ4t5wa+OBJSbrZjVBzR1B4sW8zgTDJ5k4AkcW3HrDYl/sVdNEWQhf4vaZbQDhIKX8Der4oOaMygyI4cb9r9zpFDEBDhSa7gScEITYLGDMEvjga39wWgQAu5AUod4W0dMZy5yBi8YE9M9GuRBPUdnOQtkrai4TIGjukoUP80EWp/ZFVd02FXhiOcnBkpZF2H20bQ06w7qonZeYTcjFTKyIV1KHSRy4UsVDkHOcwXC1Q72eWo6QvNEg6Ti2kepMNV8Xgq/QDzEXl2YOOKNBxdEFfZ68rZHS5FHxtaCXR/Nmcy8Y4TFihTKdTd2BFju5ydsLYbRh/esnfUZpL413D/hgOdUb//w8Q+cRxn9ySX5En4PXSzHnsUjW4NX7BKSp2lTCB9vRe8kygt87M/BmA/21JAtPDxihgOUalAaOqfA+VC3zfI8Rx2POjAQ8U0KYV00astLwUbeQb2UOVZWQDH146dA1evLzsaYOR8/RJuGy3CEQWrhitMUEixWCzCTSPcTeQ2tUjPVkc3T3dvlOKN3IZnnAcLHLdZ5RC8jglDvsYhFPH2W1y6gqLlzpDA7YSMv5aJLHQQQBEpfjndJo2vh6M+7dNYghQD+UVX5YN2x9Hju0VmRQkspH8isKlu3IEPEop2yGKs0ryTUfAHsH0+AIpmxt/iRBA5CErC09vZUNIm2L2/irBAzihGxBwKmYVNiK3Qaq2Q9Et9rXsksGocmImTQarFdZ/eaUE/eKGuqqGbkfzIv0h7Mrk5iJ5kkURHYnU82pGD4IMfMQqC4BaCg3oTD218qKj+fYvHaULiQoAfnRrYfxSChO4K1hry4Hso4Ehghh4duHczoCh/LGZOHaCIvynm1z4WwAKFSGAsH6GJqXpQlUrA6hOUAJcoaOX6LwC+AZ2l1aQR7+7jmFSYbC3g3iaNFJXrQV/BhrpKZpECkKUDgwUtaTKm5LUDGijUkUxM/niJrOYU6hZoC9XWkIRlpEeYCcjM8JIgM8OpmDPVJcwcWPmJnpk+JPMz4YbXuFNP/yOt6GyRHTXiOI0Ffc6maeaw4ClSDkoMRGwpXnaYktUF6TQAexn7W9UiJYaDmbX3odJnTo7TpPPiEPlb7RT06KDzAuDnDOakqB++RnEfxhZHgXIG2AEFAH7UwauRTMdI6v9IUphDB6xNAKrEoEALBS6AiDlgDxXBsBPAyJbmlM8ZbcIfELFmWp8CrCiB5Q/knA5kHrC+9qBIFmPe1O7/Zy8Okaospkn5bJnR+jrnl5Xjog2U2g24SbeqeWAe6d6MGqm+LNP+ZBGsDqIMs0U7Yuiu6Dnu97Ibsg9r6nxmdTKaqrgW02iCRE5EBL2wzu4jnVxEe1pFa6GH/z4lBisLC8rAnAQGjs/MkcCHSmZEoKDzYRBqpkFBFG3eiAueed0VssTDUcO4CVCUs0Ec3UOwI2PjBIV019U88T+kazGYUcesb5iyovL2YyvzuE4DnAewcpCNNBIgxblEhtX2d+Z4I2iWh02IOiUExLUAR/yGH+DCBpaWp/nuJEOBuT1MsK62ajzLuytOP3IY8KnsieFSRd2hqWTq+ZEoF4uuQwc6SCAZOcHXISGaom84zh0rxnIQAkGIx30x6iwV+TTchEQYrEv9zsbWcVCuSCYT+HVJqnAez5cU47MpFCL14aix3dDc83yXtL88t70uJNKhghcWNDmXPt3k1xvx1tO9DVuQvPuKi732F8P0bjEzJGbswOrAW6iJ0xHDUUKcE7QaqEz6tahmmiha4vZYhVKX3zLz7V1uBhU4wbGRdx1vo0H00JBGu30OE2AQC2hcH2CxugqrzpBy4ivLhjlFujD0E1nrYBH1dnFaaBEy3kAPSOwvDAFrE1/DURiw9/tPpS/ApXhO9OO0qL1PWviFykIDmMLFTyMmzunF/ddHErAcO9CJ3Yxg3afFwh8aqziq3TtmQLy+YwbgAZgQE+DCFdAJ6JpYJsk6R5OKGg3EwbtVMaEXTe9MSsQb3u0nnBbrMlkmJfu5sEBRcLu9naB5itReQGDU0zx6IscaSBB1kOsH52MekTavA7GPsNAnGlQcX0hbDhwkUCk1nF3nY2fcQQL+n6XDX66Gl4spXaSZsTRtWqSvXawOsaMnDNHtCrRljiOaemvDuIwYr+1bJNMsoyrPMVF5W8w8G7QkkVYBxv5XcVlNOFA3E2UjDbgxBTYy+sgE+abAJycDxKprizHAAtRWjZ2H7KZqkiuMTT+qRm32cNh3mJ/YgAkHYtsF4LJYZCXEffbyjE4VEt7JCRTYo8as11BVX7fnT3VSp9kEBSmAIB5hLY5KyUX+C8x6cw0GMbV62MUwqc8M6f9Xg4OPU81rasmyXI/aR/pRr50fcqjAEalHgdhZtsOd4arApo7CU6EMYChvY4keRlW53ZK1Uq4Z3CfPRZkNlVKCtvriwNGj6ZHv9Z1/vFqjqv9Pv4538fm8Aj5okxOfKkd3D+ftu2+/+o42GkLB5xWddM+zhkszatKdKhzbaZIrHbPuQYMH/ZgVO9cJMdG9jfb4W7ZVHOckIew1aATilLVjf+atjVwqYFpcQ6xYUc5FVU4Q63YwBMwUEHBuDd326d8NzS7SbHfTTpxseLEgvJtG6opdTgMs9kxH026ms7geBrVp+Ewdxw83XevN+aAgiEU4cmUp6Gnxn/Uzb/Tnqicx7tq88JEG11U0eSSrf1MgnS8qN8MxHycYVPiCEbwJyM7j4rzSWXJxs1gsFhQsHZVlYkOAsV+xXgtVyASsEh1gr+syUriIbPvE7TWAvZUy41oSLM7t5bTamcvFNI5gc+Eua8S2VVwUHnV8jn8pCVDj2uFCMGLziLdSc+QZmBYOPZaVPQjtJbaKA32T02lUri7EBZUfc1z8yAIq9yTQYu3+BpGx0hc8V21bMqnijwSK9WrohmpeiLjHFB6boFb2pzpdsMJApK+KnhEzpId7m1Lim4dFT4gF9E1UDBHrU129XmMHoc7PY8u89arIxmd3L32EU2fjEE0VE910EZkbQ8j3dW/NSF9D5y6q51URaF+RMBcbGNJsYxQ/MTReoZnOqKYfbnkiIuVfJ95PBTjg1uEs51mrr0bLKGlJbF3dn1I8XMpm5qy4Jgm5DJHDJSxk7I2LaD1xoT0cfe8vhbP74AJ8kDfcsBoVat6RUJBs1JBj1zzU6KznUhNXhtN7J9TwGxnVY9eu7T8nfBYH5PC1jrxFEk6rwk84PZ6PTSiarqe7xQ4izdROCMBcLZ/runFHTDcG0mC5mV941MqMWUeYMaNKmb2QBUJ1VzAvFt/LAQKLos1ldqFvqNCVfUNc16S80KiITVjzTqMCVskDNJ5VclO+bw608PVmc2qCSvBP/ZI+FNwsWrSDQFGSS06kpf7YpzuBu2zHlOMyouAEJx8x6VDCJUMdW+CjchJooiOFKCMbdCpULqm7Dws4Fs7jHLCopb3WSRgb5mF+1LQ4tvJVfm5nKE9oQIodr41J4FxaN3ysu8sbxChT1IhAETGMiXrkdBjDLFwTdMugIO2tRVxDFBQLg8iOEFlx4VgD0KbBQmC2A1K5/mSxchQ6+ObpF3rqfitWbCvsMkoRYcIAE3KyVLgbfIJVaKpEUTGFXICgbmDOM/Pd9xiKegEGqL4QxjqyyAz4nDASMTDow5VP/S22M7t5g6QIfvH56aza3z6NJPzzuT6lgdCh1pnHyA35KsfrkEOk/wtJk3R9axDHlTm69GxKwpMaCrDi+ef1qNR+m9MmGRuwOgtozJ4MB4fQijBAiMSaQdi0Do6lpCv8y10ZTiDAgI+bsWyqeQyB7KQNNRb0sLemx8VW3a1Q7ru9NWM35oZAIVWPrgzJz1FiRo91VxLU2EUtkRvA7YSK/lYmKKOheAJyYYKM1CWr/UMV6DXNT0r2pD0FZqRvskcBrGgpnSEsxlt0d76Srv8tGGUItur4YlpT8ltfZ+3U3BxXwtvQpp+5CMespkF9/dVPyM3XCQSyyiFrGkV/klMbpq1EExEFaodM22TUphODarPKB2GB7g/vh0/vpoScFGSqcuvxCBJjxIrkuqgDhAfUwIAJ6gTgCCRujnb8aeVAny3CaQyNt9ityxZzymKqE68rQuZWJRy8hVmH52uHiGYigSHgCFQ2tIGYAHE9muIElIkwG46y2W7T/B2Auhmj4wCkbsLodIGt7TMEGomzXsjQoS9C6oN40bCXMtdQEdiMV8HA6B4KRUpjEGI6nVXiwRG4BJu9zzj6nX6PqQQRgJK4vaiW13E+cFByjZ+9FUUWDDVcASQI9WCBkoU8MR/DkNZ60giBRqQxb4MX7x/PulEkR7paEMX6gWTvShI4sYTFZCiNyZ2bBkAbAasB8psyI7MSdmks+7dh9F6obTM0CElNMQrnxuhCNI6aiQ3cFInnxCrwEZYb1knzd4T5hQ80cOGBeROM8//ZNzBMofvlAB6xh5Vl3bkBXHMHV1TKeoQ8LIEyGoe8ltgbqFJneNYCQnU4hVRrTtljk4col7KABcKOA12NpMZWdDgeeIZf3KjezWp7K4bENJxWCR66a3Aw2IjQRlBmkFFp0RYsEi0o5v3rkayOkqDmUrmn0uILU+xiZY5tBJIPSoLDW39tso2hZAi0pOthRryESYIBJjC4CTYDO0Hb9e1QwBuSDTkmqzvwe/MZrrEGv49hHDrQgfEYjRlK0ORJgSRlWsdeK6agScN14Sjf/9nqkoFX7FQ7zrQdoS2my5/+d7KJk7pVjd3b8AhYDk0Q1j6b4m7B01YyIb48/dp8uRK9hqIOvH0ozhxQiAUoMz63JoMQJdt1oGiMCA9COkLjlQ/sLinGCTcXiSLnpyiWYfLohUpxLs4dqFhyo3ORQbY3jsU4BWZLwpupisHQBwYtQPhmdRcp13CbvXsxPtObh0Ps5otccES0r8K0sqifA8xurNaDK7k1BMPO3c6KtxW7XF+ybAaVTnT4Hef5XK63dnup0eEtTxSw10wesaObAVN8A4jAcJqhqEkYn9p/TcC5b6OgNuxvT80EsD+P0PoCixBBtQtC4xvxMQgL6/fN19tYNe506NQ3jTurPDAJI6ElNXZFsthNRkp3HIJE+29U9qNEqg+wipfw6ACHWWDpQjyJ0zQJK7B0OMc7hPOufJeB7aOz0SgZPRogkF5qj1mJfq+DlcTXF50AIhP5QnET3LczREBQuYXCTZxhKV5zdwMKfhNdX/vIXvH7VQSsE7aopwiZ3HrU5OLsI7S4RYIK2X6HPE8J1N8Iw4jlp5OOpLClZj5k2GrpvBEO6sWzUuFf+WjEdgowOfpKB2XHGDvZLuMwM61I1x0KkW+KRT9R9eO9U7l7zt1FVGN4gaTyzc5veuYUjBpLUN6F7FJfU9zZr70aOOQ9pMEnUPnqRAyCAH/wZ9BqVvjoE9acZ+/iUT5B7z18nxDm1DFTzXn0/j8VzlOaufn89llW7SI+zUq64XK3RrTERO1ELaPHMxJik1MhqK2jTfrTTFWd5GmdWXT8Nf/BnzrNdRFVr9fXuldl3uwzGebvoopQb1saxld44QJHjbe9L6IgxpFWNdniqOqadFFrW2xnouPCzWFKNI/9v0Apxu1xrrkDFERrvv2o43UXXEfyQ/yhDegLS2WM8B8Y/C68cVVI0vjv3JQBe9OXJm0QEH3y14/FA8GcBB+E3KixFFqPEmDvFm9JLOH7Ak98vuocOziZVQGXZmuu++dWOdviEYmFVpOe+29psQj7dhPuBV++1eFWVfxprq4zcQLL4bd1BapXd+971cdPG1Kry4XPz4bvYYXvPX/sSaxyNgTFS2mVjw64iPChfOMX739Md8rymhCh5mFhFPT0qjwxwYTYWf9sKZ5q75dJCn7n1Re8pMdJYYqJWl8K2piYCJ+60HqUqiQnGtEqgw8TfRl01E6Qf0jTlcBHiZMHxl3rI73PIUVjs/kPIpab8Kb1e/Wl6fYvXvYDRuvIzuTm77ReeD+sU6lKTfpy1nQHDvUMC9oR07/UuTSsvmF8WqfN0DZHiCZKYefLuat4X/lB3JfcSgNhshfYcRSMLoyysILJABTT0CVPebtP13X9/5p9HF+hUTLVBAuPKaO1B2rOkn1ZTM2yRxiRDDmuXRdL3LCAadZLLRewqnZQ1RGzg7tkwS9e34hmuMQvY0hQtWMTsHmoUSShTC3e7e4l4cx/P+P1njwDq8dP+3xNYId03NLzDMbtezMpguJYBzgkJfHfqTEOAnst7LC7f3XWb2Pj83AM7ls0261wJ3QrZ/m2y3HrjOMehrk84cOdMH7ttOP+DtMwvnPc+AdHx/2bxU65mP/FPc1Wte+BSl2k1d34xgWS6r10t3R/3yBdiwSrl1MKRcgXNdV/FJwYxWJDD+Qjxq//up+eosIxTB06iOJUWdWdoCG8ns42iIOP4SjXY2Rgj701xUk1/zF95V3wCt3TpMs4kSeRzkcaj6VbtT4aNp1H2gKt9SqIIx4qaYxoW0DhX0NyyYicQNZs+HJrLdB5t7MYbAnAEf9I/SBE+YpEenqZRjYkbQFFPL/vdFRdHIwu94+73YCU8X/4R9DnbgVWR1uQ28Bi5O7P+0Y6xfyF/u4fPqjTGUT/HRZqTsiKSB6UaJSlrmc3SW48fOKdIqLyj3YQU9vOvqTrN58LdW7s+37q86WUPODY/lsnlc7NgJJcD2Cjro96TV57isc5uH2Km4so5mtrs0d+lYwSdand5friD2R4TI/LYHhwOpH8h0dML2N/iuHLQwDNffV7l80X+13+utiQOio5m45n8AlU25au/3CoqQCGHF/emraZUeR/+7GMTCjPIp2gp8dl6dAhnjeSFT3Ry3garHUt5Gli03vFLZH6RvXrD3ko328E18WoxqK0BTn1wvP4X3TnflMKPcr6vYyo+8t7J13HOLHCc/+e45q0+zkMDMUd7/x3PY7GcowAbt8HoTIR2rK22RKvRyP/ZKjY6GU2M970P64tFOIK6hpbLEEhi42aeIskpG/RC9K4AiQvWC19aAnMWVtaFLnFvQVS42IyXjQJTRjCRV3oU43MD6rZtiA73XFtrhyFLPc7BXLkQ+OEpCYUJDJXfHSS7Bx2RPYRkPQL1jS63g8f/AtQYZkCEJ25N2YDUp16+/Rtu1ICj/X1y3jm9ObLev7hiZPqhgaPb9VL/TyNpLY5zkdwcEOtnRdslyP7aqKz6WCCvo/69UibcOZfIPb6OOw+i4kP4rUKLnSPFocyGY/1v9v3QgywnZmlhoXiKYaHPAID0gT5XKwOETTG6gawMWM6Lc81gMkdEBI0NRIN8NH7kAlLb8zdTgYdstm2t4QJONhlNW66hS9IFhggtgICBcF06YaV4ktQcmAOLaHV2k6FHfAH6EXeve0TFjTrpGzR4GLf999M/hnp0fEtfa8dDbaiqTqSHJreHQRt2NcqXuZzgAiWN9/IremWA/DwsDsCABFnnYrX/HG0G8p135KPgWPrYAJNBL8rLdpItwgBdsDg3Vj6szAcfsyYYRyJ0cVV6fwo2QEUN+OnAZcBHhEoSB3XxFtzU9xPt/nPZSI/TqiZpmNtvcZHYvcn5nQ7n/7Oyt21hRV0Nm0rJC5E1SnW8foUDsTYHSO0C1qc9scJIy7TlWtsmGmN9iTqsSYJDSWQ/n+kXmF1GLUmKxS2e/bGnUeMK/x5E2mTgbFhDM+04c/wA/a/HRhPK3ZXgLhZ1kJuw0x9Jdahgz9WTuWp3g20hthPaenNiALpYsuNa2CFYOTmcNa5BcESqfYvCFNJjTTzQvpWLHAYL7r7ikpq+ZRQyykhlOJWoEGLZ3gXfJJqGAe6Z9OGzBSSrrvQeEaSIfBHoh+3iJMfrfXVkdK5Sds07mXqu/l69Ln1nWSwzh287ufkd0CxOus2lQk07OVbua34GsiVQYt5cYaD+HQ5p8M2ebsSvvgnV4zPVXDzjO8S1Dnexf3RvSXfgFUXbKkBbGDDAgiYRjMxocGF8c/8obaKa2JxPp0vlR7IVE1bgGfadP1lvsZkuwVz4vP3rjr9JbfEAFrnegbu65XkqqVDYiq3rXCz45LJqxZI9fpewoG5X7ouBEnFoSkF8elH7/cqqJkld5At45LSQheT6L+mob+a4nwo0rcfv4YFmf1fkYgpXFEBTg/yNT48xSJ6j4qTnnrrEXjGOCpp+ulVnzfTiuYxq+3ANYyS2pCHcAjFGNeMiXPKCDHgjr52nLuesWMq6AzGidyD4Iux5BgvSyuohe7E4NC4KwgBfgCkXULufk3sKnpd7bz2tqoMgjcZVl1e68vn4hK98+ZgfYB/Ni7ynI6y4/xcS8ZNI95zdxOG0hgMaqzLn/IqWo8uXzojgCcX4j9pCgxDHcS6xIrJR4Ui7lNG8Suf89LMIZzcHlrbbGI1Y9FogBKqH0nD907PAZR7PZxVtyK4SXRye76JZdDRpnECtaLQz2k3yvcVUQeQgr46aD8BF+TVpDYdg2d8/kBiZW+68Qjfa1p77/wlHKcLGBBrwX65gj3Z4MZLuCjIIK08uHZXEMzY8qRyTcKVPEBbhKdQZ3r3aBf6GiKxahkISQ+xnzM2OdsZYh51wcjrRUYLJMN5mDcg6h7W0YX9XwuOrDeQfSlHu+wfDg0v18T12sFMubqXHdukY2a2DMpotdJDhVAYyWUXW4LAZa/rfw0NO29wuaSdI5vfXgfQqBPIVs4XF8BxrOtWlgXoOKTuUwa2NeCB3NhPzVU2cpvQIcogyJsKdLmtIELiSdrkpFCtMqfaKlZoooQz92Wk9Hk/raQn4nfp7qAfMzCFYsWF206VzhKeUT3+gq7lVABva+kK/R9QO3Q4LpE9oG4YJVOMWbuPa+hH5VmAziHYqDudd9TqWjiVEDSuJSLHHCGbK/L7xvmPNLWqqMS+CnLEM9CsO8y4nYK0bSp6tMYOC+L82hq1gCJfgJI83DXtQIUvRLB04NdxQfahetMsMdfQlUk6O/sQb57aIT5VOsKFh1Km6A0Rjj7whYKD/jKJlIiydX/DNTlPy/mzcaj8naPzwcmtL4IO+LXb9dAOCsvlrZ9xzOmMybgrKKih++77YEJC1Nf1Q1hyXr3r80C05FxIcejf38ceBRKIOsgJ41hN5Vw1unq4JnN2hXMmH3OShOAuyx2Du8aMPdQsyvsMSNStlohn9Uh16wqDHpYOQi4mrnXJ8o+sH+yrvIo68biozMp6N1IIelqMkEdmrR0RvAx5jSDA/D7IZD821hJyWzWzVC1cEOV0tdM4gd8vadZaQmR5MbxT4dLk7u3NSgay6eshkXzbNzcymHQtXq7TTPNnFXBpx8AyjInUOagLxvQ8FRSwQOe16jUZKU3ON/4PECqLy8mi7gS2YyyTmKFBh6jKzixUXpdRqkLtmcCcsIMzoWjSLN7WzuHLqdUleGesWrXzMuYN23XcBnVc9XIv/lPRSgQRvt3tSJplnRGHK+PKvuQVrkMfyL2l9P1MT8s4oZktdLYnXMFgUDmdBS94r6g2I23907jpCrXVL6LoSAJnWLbrgcOU577D6N1ooKga76ncWGo5R/dw9k53tIoJL5OoxBrm6hfiVUuwYqGFTIxppAB9i16wM6fIomUl0XEYWdnwgnxoJKM4DEWKoswhdLB+4FMzItRManpygyxP8yRTwewK59WIvJ4Y9bvfP8qIqxeHnj+IcVihLcqJh4o9Q5u0kIO4rjpM5mRdEONDc85HYenWEpipXM9lKZRc8UvwSVDnnBcNwXYluZRMDliLtdfKghwq6Xg5r3MHfguMyf4haUYXPXEB9cY9aEr/aWDWjcGIovnFWoAfgVviyEoeXoFrzRZQ7khQMhegn83yT/uDiWS1gg0tEPHyEnGGxZnJDaBK8WW3/cG3Rni7Z29CC2nVh4c0Pd4eNoEPwAZqLocqs9yGsIKCE5XYsEujsErZykuJYaN1yciydWqw17DJPRRSLiyE9MlxkeEiZRNTxS1+f6cPY/jT0bphN0YOoRXw++vU/UVVg1DGJQQS2NnLUrQUoiLhgKYm8elm2JVE8/G4827TfoH+r3ZjHLZPJDyM0ACZ+KwZcifdPW9iZuvPb3qL5THcnrBrtXetw3+9FXFcGgIUooyVo0cn1LO+98fdOqjt3yreb9bmSfEtefsLCpdK8gitjSgIdFM1us6nL66EN8mK0ge6zCcuJV51Ley7VoKKc0DiU1snZkgxAhbW2hbr99GGoiMEktahgxHAGnWnieVqSzDgy8eDPDLam9f6Vgk6tAuBneKUCNj+RwWVEPYf11BrxYx5V0lHTpDwjzMFqAecsAgRhb4mgXZKWzmSOt/RyTfIOQJzmQ8QR7HaznTzZjHeDSQKbCydJAAquA5I64PeTTaxdnGhpJROGqLtx75QTny2JP8dfTgWaNV11iMFiiuL0zqdQyGerg0kGbCC1sRZzMb5dOOJvrFDp32IAYZ0GuiojN25C+dZkRzN2HBkrTOn5wTjfmjLOSCclEa63P/pSDnFm7Ct6Kj3+kMecCebFPjhdvxSLpbjbP++nwUtqZem0PEJorW7jMllO66o2xMmjsop2emeO60/6SRmRPKYXWKLLKw01Rle/W7rt2AXn82N8r2unM3tQTgfQv7r0n9GMWDDGDpcgNrLQG3CaxV+mpxqt6FOCDidJrOx23DTcDmuck2aE0jRb6K0dGTGp1yYRn05joWasRIY2M0Qa6AmcQLB01r11DVyiJqZsM5myCT7OFB0UScWOk3m61QVxrOpd4tYNsDqli/jtHj9LUtEN4PT5s4tFsx59vVEAjcAWMQZfHE7jYjzLX/tydL4NDuTAY6BOfqeBd4pqHzT3AO4wkvqYbqj0Ilal0FaOALa9p6roSfGrOfnw9m0d5ESo+1NqKa7uk7KT8gBilztNPZ0xaUvVp8+Udcw6RNPogLpzhdA2K2KDZQLOvAt2u8OGHDzarg9wRGd2Wo7B4tLh4Ss0cYE+LwwIDGvM2ptzq5wM7IQpUgqHaoZUR+8/IbEuyzTEeKzhSaWWyxYuvtCYFit+qKHHNQAYXMv5xyUI9ssSAjQ+SediD8s6BhpQW9tBgcaulqt5IGrZ2fRDjv2wlzFxgGCkeaUS4V1tmHH4CfB2aa+2kjtKSYkTZLgXozsF9C6M7skmM+EwhxSSpuPnaAQeXqgdz2NLQ2nRMj7cwVo4xClQYe8aTxzYnGzh8iht+02WJh1sVoGt2oXwVjlKTxxBSNmD7iEWemFbTc1I4FwZ9/322FZHA77tw411YYz+B8eFOM83g/ZqvoqWsG49rs42H59PtaXVJa434S3Cw+tL9KUHEQKxk3j7meHXT4JVKzGgFLP1VBxMuu3rrgfzaEWKzOums7x1pLqpfazejecTJNMiCkZvKNBqVAWTausslVlmgclSBUh8vGEYmHBWRghQ15mOviZpMyXA0ri9fgaBxeokyxxo4LSSNmZUOpKy3CYU0xJiZ8bOUo8Fj/CONhYinVAi9bCB3TaXsWAAAqxoCyd3WsgYC0+ZBlSe1TeBVEfAg6XUwScqN82KBcDQcDb4SQh196vsoGQPis4pJGFyRXjSZflVu3g3S/EEy++1oQ3Je9wQgLZVnI24/ZhMzx1PBD1loqos0oDBNFfbYpSG5rcipTALEzm3rTOgSols17SEd50RY4t8bHrkjr4x1jvTwujPzPF4/WoJ7xKGGGiGsxtxxPG8S6y3Ho7reneOhMU7jiikit2qKWro4UA7h4Mp1Of1KoRYYeLNMojkCcGVK3VvUJRJxZ5UBhyyVFnencjQ7trFMMt/IciZIZn6LFmRe+qzo3C32/E0AIlZIrRWxEZU3wzv8xVzknt4LcQcqvbHL5LGMwH8a3bcgzuHoBdRzHq8qBo8wQi9sDbVcsEXEDnDzf06tGRuMCtT3OzViD8bz1qU73nKnFTEPRpFP1hpA9tJawFiaF2EkjUqQjbbrZsYL2xMFPoenldBqoJZPOQXD0kJlw7bHK49UDXYnlYiA+hkIdnz2MNOm9sp6XcUtVdJ2+EnmDTyKrZbP9RSRZzxniX32jNQAZN9mNC1Ol9DGKMK88E2/Xm2tB16LBv+WYiOSTsfXNmzomqsQNDwEPAKMj2i+EEl2TQzFgh/Li7GcJ/BoKlCxm2xQFoMCxAHaYVbEXYapFXhf35mkQQ/LkMHYcW+NyKME6pyDuVIrY+gCqW1i5nbpQWh7kuYPrjXGavwW3UykrmI2xcw7xk/Xtxi1gTDWWf4iUt3Tq38J+74l/YH5CIY7qXckkpvgUJhJ+mW8LyTEtF3wQD/dn4apLILiHyi6vENH1MlsMUuaGVQ9u1edp57RXstj8W2uGCLPP8PLpP/3Gl/4NdCeYoaLrSXv8DFeMsxnzjmykbEAwWYo5Mwwl8mEYAjyxe+POw21PqYec2RweMQk2tSmxDqeG/P/U4UshKlQtpc0KmNcoV9ck72ihymVmH5p50DEEqMS2I4FejhqjXS2iruVimuwjfPOOyK53WzM1CP8I8JTBXNg/1iZSvqiX4O5Jhuuags12WXLi19UdntSeldrsMypukYu7dPjMsk29Jp+rahgEcb228qQyVpin7357ZtBUTrFFjOKk6u9M2Q3tBGAoNjEFw7IUG41SFBTfcPbpexJvU5dnEe7T0S9ScsP48kZN6ymWi2JIvlAb9IjHfeA0DrZBuEsNgVTgtlQJ6PLlzdYXA1LkZMZfSe5/zRXEAoL0R2AlnODUsTysux6DFrO7dxoN6dAFMZdwzbczsui07OLriIXwimjfz/G5kVrrZ381iwuqPen+pv+Zznb4AeeJ0HROSCc2HfwGo4bY4qhO06zqtkxlVu0F5G4TTuAQdj6nEiUrn35uPcdwwfJ0pP7WWJ3MR+7ebUCSBirB31u0TBIs+F3rhhquBp44Vu4374naergyiQP4gjqdZ0YJFJcLd+u/yVZ+L6hNQlAgumU9Pj0YwfOQM+gkGbnqgp2SshySzipeY+2KwHEl7/r4gUiiMf0FMvwpexRNNHIW+RsIiiHY9iej1gKqXWapDefoC1tLh19wkQT0JlUAg9r6d0r4AAT5q+g7zgYPtCL/2/XgS5+2tXcc+u2w6TD7lrki7DRne0SBdDpVyDT54d3RHDIvcAhKu9iuKC6aUupwDO/1mv7Z9sv0pL0nmze8JPdTZ95K1IoiK4PeT/kfUWBVLep++pBj56a+u3el7+TbenOimobM35kmiTy6VV6FKQA2WpmLg9nso4tgtShaSLEc26X/3BcnNF4klok6TT4dPvwUuAOR5wm41U6oUfMWjRTWcERQtdY7PEDbbFhyW11pXcbGXC8Pimqg1EqfLmzFW8HS26M+8M4FLoxAXfnQqxHgw5B7mp1WI1ZXgwQqxvh8r2+DC56su3AyvFZ1rwEXPHSxdCOQCYIICLQOASnGwuokkS/SckcmqSjoJ/kOlAlyw16sWFiLl7NoZfw5AvWcL7i4WlVqFjEel+ozkGP/HVa3g39yvOxcgT6Gq3JnBpVTyMYKs/N7DBVEpwsT7m4RHSOL2rswoubTLhFTl6/fe0CM3uBQjCkJFs/nWBDdu0RCgsk/lu4j6JA5Q6JD9ZI2We+sv6cRj0/pFtR/4spFeMR6DEuNqdnebqDmJn4vxAX8G3yJH2LDIO8RhQYxpuRLK8XwSJXV37Z+3cko2bem92qMA51KckQ5xANifsTYfiA5PIbuGYyc/VIUd4EKhmw5eFVC8rzVUmZWVQGD2ls0rWBMTcKbp9jlpsof3RsZuX3nx12fUo1ktPmzoIPGCfIXu9d1Ur/DhTYCdMLnjvmZDA4WNKBT7W+TA4Lw/K3US6H1tHHTwjKEVyIMoVlHw0YLMlQQSKYMyirvc6+Cu0Js6LsxC8YCLskfzITwXAzYq3GC5t8+KiiO8dduUJIqg0YmrDhS6syrLElp0TzPYh36Zd1ZqEQEzCaTGTfJ7CN4BPBsCKhTC6H9buNgbRxsXXo0G+yahTVTfk3pcXbCH0EStF4BKMEUjy7IwjEzi8NLLlHNKHZbTC446eduBQCbWZUNQrGBMshNShCUcwNlNyvQCmYAvR4Bbfw/bLnBObc+dAQawWxEwfqVCBjIpHdJGQt7mfTocHMloCjDV2RPLsgkEqp1xGzcNXYdaYc0Z6+0DETRBKDVQSCpAYoOvbhu8ey3kubJ9fc8PZsIREUDy4kQ23BY3gCg6EsLqCClZIWFNsUgOsxReqzYDql+NhfxdCeo9YFoCHS4cmMMwMigaEm8UQLEtBA9+ZXoPPYfIFiZ3D92Dhd71KEImaVIMiLKLQVTEHHMcMbjX6BU0XGFUBMKWMIFBSQiiTHGdBV4R6epXmx7DSF7HNggyVqDMMgdc290d3BI+bVdhZm3sJjQAIF+BAgtPKHQ+g6CSyxNmGDKswGBkCuQViorLGbLtTeWrIpXlUXlKD4KyJbAwACjWzPCtL195SGmhvv2bkgbwawjcT86nq5GAiDYpmUE6DZCO8VIgjmo6nTy9SDNaecUGCDbJlTs5GXMPg5iOS6StXm022SmDwApxHIlD+NHIm9ujqeg4pb2ByWMcad8nmZYBDAhrzvlXn6Lg90oodb7VzDj30Bip73ZlERcZ7zSZjqC1We79M3RF5adLUu+lSImNHVrfn02ji1SCLCa0DjgSBeyShVZbvJqnPZspSEvbZ0PHLbLIcawioAzXMN4dRoCJAgLJBk+Tjtk209SwkRKlUjP7MBgblumwWeIhUiwuWvBHxtEkrN+KXczeYQNaVRmw5A/YBnZi0XA/HtzXVYuKYgYgMdWFS/pcA+wIKIA2asoUgYgixFVVgtN3oBCUNoY3q4UR6xqnvW/AvUrJM3fMRpzgujjA4MRgyE6OZ7DbkQRcv601KP7X1k0KUisSGyVyi7GZSm0AyWczcLSHiGRCwVIB9kXzhgde8a09as2BEOm7Ub165aQs1n7Kgdi+d1lAf0FSGFOa8/RTrC+2ReINqzGy8oIy+6F1axezY05R33Vb8y0b02ZYaguQVkyngkbP/UDhki2TpwBaMXtqJVQATHB1618JQlbLngwnR3cVeZcphsAlwbOcEf+YVf+h1OxVNvili1xyVGIqdkqmWunAGvd3Doz4C/PWE20GgylrH23TyOWoZxR95GIxI65hI0au8MgVwkZuere51aqUzw8kZMj6YV8YybeDOH3gfh0KAV++SyCkVGaiejD+PKqq84FBDRpLVY8mgzo18Gf6k7owj6ACZPVxDKyXIaiq2yjlEInOhzFo6oVEA8w2EjwpRZE/Fu67D3N0M5ybra1heTuytKYVZhL7YG/f102xNo8+lsuN2TN26I/hRqqEYUuDtX8yijzjcDVAYdp73TsmKB58VmG0B6yYMIbciejb7FjlJHwILYgr0vVI15ivd+bWtI5EpoplJ/E9UmAM1GVkLDSwc7ovRe6ucrwXU2UxRc0RGyexcZkRXTUj5HjPHiyo2dYsCTIEhuCVCmvZl6WcpWZWE/0wCt1zadsKlkKtDd+GAVFANABcjUXpKzO/NNL2h2iJbwAqitkogABKEn0fmGZwILJCg0a+7hY1UruRqIoJUzdAoyGdZXGOgKPdDJ02LtwGbjjVvOFRuTyqRIW0D2jJ7eFEIMmw+A+iNmeqn/VpVTY9o3xwg9rdHoinNZl9DHWxoAYThnXTff4HM4cpQf1hB4nNDUi9RY8fzBRRA1UpqEGAgjDh55/+fEgUec7bC/GkFWgPr4Cqdo6ND/lTOYcQ6YjFJ4nl+LlFP0TSWi7GH9s9sWhTYYjJthING24kRIYaFQdFrqpk0s24W3646g3GR05Lr9jVJoXYUrMUJSvyPqE1dBAEzuuaJ6XlLkl6XBj8bPNo9iG4Jab7TS0ySEleClpv7yTRJlQDTxN6Qmzs7hcX9n772PfqLN13nhSV1V1cMIe4/dixHvZp/sv5y4EMs4cA8vl2nMNCDWHCw3hbaGo/NgAveCsREqg1Nl9UWiC9u76ujvVlhHo3mip5xbkfqXxvkEPysv5kobFkJAqceNQ4h23G/ukahPwCyCZroiE7AEFOl7jt+XBY5HRJfUJDwabgWBk3BW1pGp61bzT6mOleM0BEPYyQtPwVWFhgXpMvxjCv9a1y/Eeq3nv1NNS+1ZU9X0qBHVjlkH+U38leKCrCouQXRb8S5AN54Gd+Lj02zAzvgic/aWl51COIARfm3SYU8IE/tz2UveS33VBPk9i2QCkMc98tXLgjBxAfHEZGgGszaJAdsCZ3RbC4oI1MBAigyQShLwLajdLuOsJinQCxR9iGNhEpF2Pd821TOlTnQjfMjAft9LYa1un11G5veF68VMbeRcu1dNMZ7AAcp7kU8JKVuu9jx+R3c9NW3PdmSFxx4njtnSlJUKILzLYejgPQ92nOYf+pBVAOCVYgauHumLZOcf1iKDPxw4iYMa8yBnndbPdMIkZ4Ltaq/cqzXKNDYnXQjPWlB1oep14tFyBSWo0EORbEUFZUG+yV3CjWRn2r2XqBj0iotXxOpk37PM6uyGsC5Yd1q0YgTVSe0jJ2SuzP4YEs237R/d4XoQCUwBjZXyBAuqezxTXRcSuIhKt5LQRJb5BNYHKpOzpOX070YI+l4GYMCQhqrjk3WJQEGJByVNwZnejwCNef2wDHyOukPIVDJnKxtvkHFpDrjWA5te4cKL9lG3milXObbawtB3F75yH0KdHQC3IzSvH6PMCy5xsLz7QJFv2hjkMQJcOtgjGDFbJJDcJ7O35mJJFbEUtihQH1Z5mBEJ14RrhMtZjNtd65OE6KjTKCukiS4kncxSuuEtopWEv9FEtgFbFA6O3s44Vcd29HrHlAcZIdAnIl6VjrOUx4noq4cSzQNqYELzHGugY6Ee8lP4YrTp/rVNV2sovRc5YqXGbLSPlQqyOgkEk0yjUZ+8Yrc+AwTUNLKb9djWk3xoh2RzxF6IryVBKjmuPh8eH4lsl4rhRkHQIHJo6g9bRoBshco8CSfD9RMm7glo1YF9CRhFgNdnmYDZ/OLZSsMJDUkcZf+Jr5xjV5RLxoA/ViiUcYUtmnh7WK46JfN76oSgpyFvsKZAUwsbBo1HOQdH9a9r18/hv04+XCZ6pATjwUoMwmT9p7iCOtLSxoxnna9IrSigTjZCyCHFTHXmGHmhCAzOsALvo8L8ZB6qh96FVZPzWhGSZsaLZQCfHl3o3zlz8vptmF2/KHKP+w+EZgbrSpQS10ZVb0yQ+bQ2ItjhH7fWPS5/XFII4s9/FL90P/QrpkNtKDYz9WI0k6nr6G6N13ZKvHV/vHW7k5fFhyhRBPJtF/lrTV/JIq6m3JGXb7q4NMH+mxlZAzegzRzySssGw+KbFSKgPcKqgDJoGojdQfehZB57u6fZ2mGAorDPv4iLa5e9Jf4SkA2/Bq9G/YvXhD4fCKJLtL+vDb4hkjQhYL+U/cN76pcv6vy0THzK8jM7kZUax1ZPHDRmpBfofBvHUkGJjC/z3XwePiQLuMND0BRydra7XiBWWz+69iY0RRmVWy4uzLcOc6aqSZsS5BdPeV4o7p2DHtLpEpqHkQLVceSlYjd6FRwNoJ+T2PN7AdFq9Omwv50Zd5VXg5fYOMLq7topk2/r0Ql+wvpgLuHfUky2djVigVa5vSFXacLmqAFq+zwkhXypP7oaXNl9B2g5sOOmWYmuYL2qUR3q5jc8jaVvREOdZQ41kv64Qwbdl9f75/K86lJTp/0+G+plt2L60aFYmXEfc3k0w9sEvDoDO+qdH9++S96mnZ78OrvryvJtgYgbkQnGvD23q400UM0n1kei+v2qEWvF0IjeQrvdjivLB4dKhbb0jqPAleTL9mhKW1v5aFnLY8Q8lsnSpcBnowV2XDvHm6gQbFNrJA66iI5WbDNEr0xjPmEfWqiE0GKRG3jHU7MbeXpYULvclXTqKVQGHTa7rhQlmfH/pOg/XExdDJ01ToV29FvhCKeYzpzzv0G5Co5w6MomBje2ky3SChhUcUZxpOJUhGxPnlaOABu+hmwEq4NJBg0HQGEb3OhOiH2Vr3Q96bNJmzX8w5EhtoVfDM7+YHwerGyqDSCgrgnMFVdMwrl1pKL5ofiMvuEAmnjfepJTbQr3JbSCZnjL9kvmUb/InwHRSrS0ISRALxCcwUwXYV93isAqVWQMMrNjTL6Rj6owBZlGaIYQlowP/LMlumwigFiwfxF9O3k6m7NATF5cHPRgJ3jng1wEPDinnlENkM4sJIWjvQJtN0BmwPl0KvCktnQDF6IPx+DzTOSQFdcr8K8P7Mw1vjtJ7Ie9Qs0QY7hMplpTwxNBf6zpQameTPqXh7k5Mw72dAV+U5d5+mKQu4UdAeH1NCvGOrSp9jkWPlGLqSaSPXtKxH+KYYvmmpD06glWoBNQvmQUwroakHuE2hjzjcCzASPS9j5Wfs1DRPWciqqq4b+WKOOVdaXacEX+E5O/n51wEzq/EThWJVB9k7nExktY1k4iY3lheLLuLJWeWwFRfxaGNPf7oqC3qHJz/ScPhYkmhgQHwZwUK9n3tqgbTYMFofOYPgLPuN3XjLtZV6z+h56vAWsWKxXiAPKVoZFQNXCLGP6InlOxOV/Um3dcy0Qw51Ho1Nqk8zelyqNx57OF2k9U7Quow7hQHHY7SsYg11BCQaHDOkjHEqdsx+F202MQUACdsxlNI0yTNa42teBNICGgkIFiN2De9FJqtopjYmZbv0yKLjQLt7tixa0nlBEeuiGz38YxsETvplIOJF6ucuaLOW0z+Hh2BqSAwEc3MU52G5QJ2HZoqhPd0RaNGgaNH5+ptIh+2FqHZoTffNnOKtLa89KMh88dTszQC1+OjMm9pf+hWyk7FbfaTZ2pbxkAwIqlOOe0OUebQ2VuU5j3E2VeXC+bXkxbgTFbTrLmGOlrFvQCqsKvJcl2ihhHm5Gj1kIbfgBMzWaQ3m4G9jweFzTSYkppfKrE3wlALWwLpU7skW+vPtQ4r17uTFbc79kSx8YjuRWjBcAGmnObRyukCP1llh0/fJevNe05/ylvrNKRlTvWKSTjge7AA7wDZMWLNR4sMpSLBUme/qaFy7+u37fhMpL9dftDO5u9GGUNvtOqrke+jDtCaxREhims5YDSKWQ7dvRSCTdprt/j2EiCpsZIdojUMaepaN1oflGPwxKj4vfAs3Ay6MS4QSKrjWIQjH8t0Kwq3523o5v1aD8nxOYPOUMJcpk+oIcdBXtaEcbBvvYVg93CACgKTPkAu6SMcJW0xtLmKxqXKcAoF4LiPeZSYp7xPSywg3FS46jO5z4/s7mCWiAO4HzqTHxiQshy0Huk0vVlidVy1TyHi5ZpymCx9e+rnYXgenEEPPV/h001O+Wp4RCkPpEQLFilpXNbx1Ykjg3ZSX0RfJUK5y+D+B4JxG8o07WSAvRT069eu3FG3uwbeRG5RgLg6NaRIeEgo6pfYRD99WvAU/4ZAjPRlcpHgbkV3NLVXDURq6ndcL6XUls+ak59hEXY0ruNjyTdqaT9jBNNh63jdBiSLHlWD8g411EKnEptcHciuMjjnkSkcKeiBDoXX+3UbDgeQL8cDWCuqcDuHTqQtcTEFPLKCp2/IG6J4qUhgUyLvjDlAWV9cPa8G5IQa25P3mqrSR9kJ0HtAIHET7mpWEyn2pyxXu36cGystREzn/JCXigpQ5SoUge+X7efDEseJ6378sHbLIOT06GON+l/62AhbQYUfrNXp6PHgCRzhMwAjsqLK6j12n8CCEn0C0+8MYc+t3fld2Tnr4dxzPxQ2OY/ZdyQb/BeZ4Lt+Feijb78ojy/B36sb8O/GTHnfUI6sZaEvcjaPutn8pdGlCeyKYFe1+ZSZiphPc/g1TY8OdEP2Y7n7AamODF0of8pbP82O+yPv8c36Ve7utRf6Ql/xXXvPXXH0bvngFcn2+DbCR9/77db7BP0kAyyo34ydyrKeQoI3usuyJCw4uxo0lW5UIbEXB+3A1DA4EesVFhFpP8v2yL7/VJ+K8FKOPdIna3dQpzLVhaZY4zIhQ6eavgLVbNeD3txy/SMLdpuAZc6HJy3EZQ5YczH4HHgV51mI7VUwKbJYjmDEwFr8WjEb11FjNyVKYVAp/mzCVkr6XhA1pBVWtFS4G26riZd6F71uAabohRg2uvUYVX+iqVQrq7dAcJDwYRG3w5upnWDsmNH5Yzn8AecQ6pxI02lTbsTYapmTN4mG2jHHi0cOYS6IqEoZNrjztvRPWLIkEFNvLrQBe6gprmEy/bfsAc7R+DJVlknFBMlXg64vWOHko3B0m6/U19HiVehb2fKbIHmWJ6marfkVyl9A+bspCR49fM+hwEOAbABfswIEO7fylMKtBJmEP/Bp+PhRfLyGiWgtGcipTJRaIfeTdEk+sQYXQSfGarDxO7cC9STHKsuIWLqVV2YqX0/Nkc1G6bFOIL0q5Tig8YZpwtT2zKrsk3At2Hs7LVIzafU0jSjxSuFtJw10ztRcso6CkFw+l05J+DNNT1i/hQLqoCq98kfN3TXqAUhnJNrJFkCJhWyRYXODxeuFjRxe8NU/JBKHa1FRKfLmECIwUmBZsgtjDphrQ3CBlRnS6OHdMiuOZeOO8TRBcqH7T8YCO0kB/a3EV4UkpOkfkwUh5z0M83HgKgQajUXeFk2znud8HRMHWRJvhUGQOMqXKG8PVnE35Z48XktfaAAqOd0lZrr2U2qY2eZaJ30oAcm9HUF2yZlUsH0RXI3Lrs358xmbceXepdZQi/JTZWnhCzL7bEew0jyLqsjyZ+JUouM8ArlMPNeEdF95bMTE2ZuK3EpKWVPtkOLh9DiWcN4/qXEorGj/aakJ75BreOIeCvAmUNxOHN4ByG6FuidZxU9Jgp9foLYAZIhgeQ0VxN7GluR0T8dsacKD5J7SKfoINCjxiWYTTW1m9ZlzhG95TxATSsYpG0VmPs5VP/o4wuLu+NdAMMcoxD8erb0P/QwIUjfVvz358wxPtC8fxje/yckpx0C3og8faGRieBRk2lDJI8hh3e7IYritWzcvYND3WSf8TbaP+yoQToj12tPNzZEMOJnZMeCsc+EH1cq3t5WeczREkS10V6zounaRktgzgeJyL8DGVHjfNxaUcqVaNebK4EoFJbj0MWiwK66vPCYZ86J76VaPXAECVCB7payTUjCZNXcbGvbx84wd/n3aekUkUtVYRlfSPvjehYFwaL0Dxckr7eNunrQRDz1izzNDhHdTj0AoKekAIQlx2ICIdDjHVLw6Nvitpb8FelJrhhZGoB1Zch9EVTnIEFnkD01ZlNq9AIhONAmYlbaR6NYtFlyQVQUW1jZ+WhlpVahirmpXALTMxDIVoqMbcDJqr0PnihuzmmTbnbE2nFSmRU7UNbEbkdD2hgcxiZbW90TgxeU2OWGZSfeiwMxtNPYzRIeoYXr3Tx3QXexmhxa0fKKAi6yb+JjpmPMgThBJNODGkvqWqTLBIK4PLHspNVWBtYaCIqjMkZGYWczBga71FmZQCdDJ9MWQZlJP9il2oKSuG2iggWdetoK1GIhnVZbN6SI/TEYZU9QctBN5pljFST4+ILCY2jzQFPDRNlzbctimFm6du6LRLPVCIiw6LVSusGsLagLfZvo/0WH5YOTbIXTOlDellzKFR8Zu8UB3p/IpPUj/DTx5AQdfCyEA5eHjd4+FpDmrm0lUQm0Y7WA0YrmEsrQjl1VbRNDWhwT3VRX1UDRLjTv1YpW4qCftyft1Z9gJ1qctLivHPowKK7DwsxIwoFmAvUm4PU2xX8NzKjYeuiR3qFHtWHNt6lMiQ3lSMI1TKE8qbxpbroF4opMKrB3EUzHZ07i2p2o7axK2PzOTi1r8mq78ooo8R40rXqybOd4R8zm3YnByrXgc2Cu/jDzwEXA2QPJhH6Ea3qywHX2jjwgACc9WE61moterD8cW8CUJLMGBv/tu+G5q2tb74+0SFK4YFsmhO3pUxAdjsoO6JoujUReTqVaPE20pq+YN8phz2Bw+6YzHKCujafkvFmg5da/2DWAJONBkT5TSv0dTOJrOtC3Ec5+p61Lr9/MD9iRutlnaFDtQEl4VyagcOq7bf2vGciwSnNrGrBiCopm45GtbHbxfNu/5CPlqh4e5O6gwJ2yjd/MZfym6P+246Vquqo++Fkkm5T/FWhEPiwGeFTaUBqjrPDxET0yuKSuuqhMjBikMSPU67ei8jXCsC0zBNB0YbWx9Con27kDz2yrmhDKfn2KHxvi+R6JzKBrWWd0hZr/phzz3tCF4ejpxBu1593l/dTQxXaBlkI6n8NJ210gz+baRCg9B8vbxjkCMe1qrlANMho85dT2YcTEVIUGPCdJhHG02OZAvEluBi05vxBJYAWUqw9fa1BLklKdFD1xvN2mnWTlsdaasjLZq1aNZOx9rpWHudaK8T7BbAHwzese38B+09wQwMxC40S94Otlq1G62ThwtEJ8FhHi0Zwmd7vKRTucCqc04m0TeBp/E/ego8nCwEQ+5st+BZ6EYHDe9FtcArO/Pz2ySXdDqJZqLPx4fo58zERzruuDdNz0fbDSe/qU/Xof02J2ZQ82xHQZ8BDzKK4iaM3erJjUaG7NwFgbcYLqsFO+KuF/5Hn3TqOxVYr12Qph8D4ZuAWSMSVcYxH6coXT0us8JedPNs+qjH0sFhZeYM7IPNgPAMzFWFDeRCj7BBbQlGQSCU87ioe4qQIG+KjUKswrvTibffeV4CFDd8QOUvc4tq6OR8RyWtZY265qNxrnn9vuH7XmAtp4fZMqKW31hyFMgENE8EY1Okq1wQ4wL0z3T3fiFeZR8khS6q21LX49sT6WWClDtdFdWo5YsahNqSs21zF0WC5helgdFJ/lYiU7X/P5hl9tdXDZ0GdD7kk8uAvAgC8kn4r2HQAK7HtyfSS2nKhjlkUYttzuU7rIW5Ct5GfAYHKoo0EXToa1EKtNgI9ID2u0xvNsxBLtez3CF3OpRBIJSUXrDxF6JJWiWTtc7pT6f9txkDIArPeFo1fmJs+75YOKW4fvL5lAYKDr4l2PTESgileQjV5+Up49apAspohaEkSM14AHap/uzSYQ1+1N2xA2rGbIJyTpRmF8QVnkNh9jas/vZ22qeJguNn/PBwcaYnqm27IF1bU8xyXkPR56a2Yq4xGF4tX6ynm6tkg9mHDXDTVWXuOQNcYRkN1ACs/9qc1G/CqpPVQZi1kNUJLeaVzHS6ALiDDBp6TwM7D7TVb3CBWUGdTn7Z3vCgvR4fbl7Hy3OhgIKSTkCml+ijRrTUS+oZPk9srttTx7NuhYgs1x82ZMmnxn9g9Zro7zJGtLWGgwkgrXbW9GDpW2ZoK8cKjxB7JJKRw+fd4w3OFdygtXJ8d9d/wFgm2ATokKWNbd+LM4bwRP/OQ1HdTxBMXFgxNy3ABdcAd0un299G6bUL1c2jWsQSNbHDrPqhzh6k+Sgj1WTuJSZ4Hth5lUDnnU77/Y3ra1zRRbYG6ctIYXiU6GZ19Sv40UFLixSa2AOKmyAEfTpluTxXmpLgQrp8aZJ+FJPB8abCOBn2l0nlxJQwgE4eqm8GikxaYkbphfVCgXNxK9HqUXU6/TbqL0uxYsySoEOt9cXUTNSmJFiMim0zJydgpAphS44AQybwbnmqYzke57aE6+dzigcKWPbWv4gylWTNaHBncHTuzPELacotrE1GsINTCgB25Av6NHSrvNNo5H5tObuCursug3ErU927D7ywLCVLLLkBSA6okW/VhPUsmzHfV1Kk/+eUwp+ykf3WNVOhkam5lbjMrntIWNT0NOb3W+8qZaB+dBhWFlcueDQozeL91hT32tJpNajoV1usJE5pmSkXCwMy86MzR/CUuYAvYKzQbb2/JH9Qt2gfboPQZW3Tx3eLVZXpQs6VX0O4t5WPOreEDu/DuPTQEmb2TA/g6pzHi99df5veuR2I9UTu6FudVe5p66C/4++MqYrUbUn3wRCBCdcI1pHRxynQX6uEAO3c4bxPTfxPGyzUYn0tuHEezyclPV7jReO4TF+xMZlaLCCsSo2OYFhJ9eXi1rH9d7BxDr4X065h73QZ/Gz7n1fzFC/ctTGiXpgDeY2IlirnyQ1BvfpZjGvYBQ+vmLqkxfpmUFYj/ppapHkIPy8JjYH3Ytq/FtPeQalLmxzlnnO9V4Uno3usGz+mIpkYXjbdF/LrRdO0q6bfN8GTfg1m8TbZo5XpPhUG7Yxu6EsWR+nwUQvvQAJ9B+EadCl0VVA6SSiCPlS1VB0mWTz1nWvBU8cYMqvVb1IZnM4rP3kGAAGMBmuNl2AyrARsnLDgQjOKGZpqwx0ysxY34gCBHXfwkuA54U/rH6XPUBobyzScipNlfQCPql21523g5qir36kIQCFMDXUbmcwEFZ2gOUOpC0/C8WjxDnDAQJfX3iKc/SuKkBR5vOCP/z+ywauf1vZeXhVjNXv8IPkelxTJkJUU6+hOTV5JU1aHYl6wjVDedacSdNLMUV1NPrH/baDmZZ52BX/ehB9GY5Tf0vv89OjPkyXcvSsk4k5XOUc0P3W1Sb6GGWNP4o9hK5CdliHL8+smUHakvZrNJMr66d6RLjZ+vrfpkqzC2JhJ4XeMRiuvGP9+rJ4ya7ZooTSNhtahRxu78/7konGwQJ2GYFd7LivDz8etSELWjyhkQamkMx1rkZ/WjsiFKHXpc9L4c+ZeEFfoXCa3AlVrHpy1KHmCgTtIm1zC6bjhNXr2YGE4FVtutUNxhCYxDIiM8JIw8oQnPnV3pv1qyaqtw6mbJXSSkEfFm3S3uzBulm7sWEQ2dhQpHHvGzdhXHfcid4ADstHeUqsHPBNiYYnUeueL7jaDN6Y+P/FkdLm31ntJLbYC7VGmHfZj7PK1Kd4sGqA/5Xg2zDcT3hgIwRHPZGplbsmq2j/VYQcudygbIgudENNPNUWCzGg6IRVI1LP3eFQRiM5vMAhhyMjTuiIbIc+TUBiDYT4s3gIa2GMHepig3P3BVZLqulam1TIScgc7z6vj1RGy3jfm6L9J5LBGgUAlAbPYZc+BCBhrfh6cAbI/9seCBVBJwCwWLFiwACxiwYFhAZjFggULFgIBhTK39FrEgAbgRSrAi1SAF4sAL4QccRRrJvu2jNP7tOTxhb3cix2VJgmfjrRZDoP4I4GHbGBAIdVZ11u++t/7TRgH7Gh+bZ3x8NEER/1rfLHA8FmC2Kx+OGOjY0aT+f4sTHUveLoKbtph/20kD2QWQ/6eNsf5PZTW8aOVMeo24TkpE+26Rpr+gR67rieXWHMNKwFnnhDawvTCaFBGJCaICIyKveyBLGB15HoJz6KWWFGD9QSPqmMd778GPp4zuv3KccdQVcZCTlHHtu9umDM6MljOEphfs6dYZDFCf2JNLsLrFxXjx/eNjEanNOg9gkx1l043aXaQ3AAT4zlpqTm+cjPmRRVT+7qYcedgM820ylp4shu1+Y7Mi3m7eQx0NE+jYjROzOzsJzIxuEeI3N0fEoYEnvK/HCmM2U4IRbIgAzhM3q+d6zKim9zxqGgNS8ZKmCCXVIYgcg97VuzaF+cSX1Aw9EiIYplJ4jTNp8mIpQ23522sAtrlzIZRXya3NOXBzhPoGZ8Zm7GbHbPFUEOb2Bx6u8EkZk8ork2I3J/SaBFvuUwU2Z6YtExeFg/tGSDj81BQe2RGa6jKbC3sMCOOhz9DCunk4Z5cOZ+FfFJ5Myg5QK5QTB7vyYtTFp4nT/fkrzMU3iYv7smdMxcOQst2MsupoQjI1NKAVp4wzUJnIcamTmHBuaXYhvT1BDJOyju8ZVQcOHuCs5jQFqf6hS/aTRBiBLIExkt8Ih49hIqVtWEcuGpnjpG5lA8NyFABGlK+FFKQIu0PUSmGwiCKHboinZ5LJpU/ayzZqjrNvK17GIFDyGleJU0dseJ0wJwVN3sS5ZYSVyinLFe2A3CSw/R0pjRNlYN86IOgPKdd5tABISnQvmn/zkhuP4SvhClmOAcDRq9yuRDwZTzWl33d32Cs5G5a/iCpDRA36XcCwYHkJgKZpXQWUsLDocpBTydc1PQVjG/ltGVQWjiO2U6ZGk+AbRgbCG76RikuvUEx4wA2yGMmD/fkyvksFJPKm0HJAXKF58njPXlxysLb5Ome/HWGwmHy4p7cObPonUwoiKEwAb+STTFLRrLKY5F+ToI3hm0yn9g8LHbuybTnlJZ2AoUt+WcMTPxciqqJlhxLKGQWBHtfELOBi+CDlhowRhVFghh3RGiglyIUrKF2cBC5kEUa8vq3eAEvWS6YFmdQhltSWSqLE2SAAHcDf67SfOqumBESLeZ7Tgn2atXtRUD1P+4+MCvMRpBEna6i4/vPsepT6fZN+jzAK8gaFuQfpluGOzienm3uBEe2VtYi/HqSNHHsH4Izb4mkhZfYrNE5Miqv1BtrmdXdp7I7hrMaMfMAOQN6IkaJ71hwSQGSry9DNUBt5Dnt+VSYgvGMKa7OjL1Ia1UBZQm2Gqfi+ipePkV0MhItLTHPC6opiLBVU4jKZvxIBtOpLswpKA7Av+lvnSZYdt63N0c2ntLBaZTdxUPd/y4IFsEXTgx6/bJZq6Etml1Dq5wNSoaazlKJUfmjnQQXGchuv9wqgtzFlP+WqeUPkG1EhL7lDMRkper32o1axiCeWV0fYkmzT11VJI+nLFOEi/Qgixaash7N8AMhRdrwlBOftECF7yEAgSBkAG9yjOIwTkW7nUweNfUCHijYgaC6+WxRx0TCR8gV5ETa5GKhnyC6wyE6TvDmzkNFYakIYrbL/TeIU2ltVEWeS9YBFyqynpHSzwngyHk3oDBru5bCeX43w2sOldwVk6I+YSFQxVLouhEsEEHyZggstyot2WgyPyi5TNc+PMZNWCc2tak2yZyTnlQHVn3Z1EEJOPe9DK1cLdX3usTqitX3TUJ7X9hhINpeq3cosOHlnrruAfpi9agAzHSYG8OwkbFnCjAM8ijYCZ4CukE7D7KSFDF4Yi+rQ48uNCLee98QEK8rb901dd1k0wG/qBPjpBlFPtwPTEA2LCOv03k0Y/JQqGphDHacYgfCEAW7NYzqL1NMGox2gQllivW7xH/sSPlh8CEwrYhEw4jwHTRVVGcb47NBZTGNnIiJZwb1YgtnpB5lPZ3GUr8LMx4vL/XCZr3KAmdwN1Sap5GY9BRx+gUyKYImtPCzvXFsuQKXHdcLssTS8cMxBfuBOKxVNGdzZoCjkMaeMMVFBUO3LH25DUv4mk+cFIMfR1JDGOVBwqOcpiMBL3NzZSSh+DofDSpVzxjM595YQWDcUyZK7dxkKw8DhjY5gNsHgchYvqIbdwa2vfRiTaIhVpVsM7ZRW7TVttOOp3jXDhGPL0aoLMQT6TWXCocJfG4sBIWDGrTslrp+50wlZxIh99qHK62tHRZeeUZHg0SqsP5kCYhFi+4jYsFSky+2C4JZRO4WCExoX5i6UCZmC2cfVt6WvSJl1R43QufNG3c3MGau0+UScvEGkDCx5ionIomvUeMbgOBoa1R4IhJHYn0TkApuylSnQm4sBLmDokQ5KnNlpWGcnRdodX+BViy18J6YJImDNf1WPpzcfHZoidpvoJE4YC8A4dO9m7dfG9ycmIKsaYvwYNQZsdCkTVczoAX/p3/tkskBOxEGl7O5TcV0P5lqLBGmZsDKaIdxrwctvTquq3tcZ7lj1R8FksLVq3LjsNSL4p/Jk/dy0qPTTlHgAQUsbhvNP/yUGvk45xrAjgBfjPKqHcTo4+FY3XIZKQh13OJE+/1MCxwu6Tem1LrAyK3pcvU0dLoVW2OlyUh1jgi1xrvudyGj/8yTILVX81rcFx73VF0/z9PbHIjyJ51aQ65iocqf8/h1uGt7FjT/9fpf0y3F9/nrU1H1/k8he0WWdJv0uuc9uS5Xe4v893BVV1pRk+gmlUnbyeW4xFWAwKR4o5BJ6bhAgE/i+Uf294oILQdpHLMg7bmPl1YpRWsRLim3+ZKBylvd/RKyARE9TWmuJTum3mupJ24QJDq++zIou/x3LBpHPNlk8c+bGbG9a+325L9/ntxP9udzisPvruDXVuF/lK6e/I+OZBWfuSLPGETmmFbKkozy54pbDSv6/ehqJDzjUGRFtc0H+ylsvn5T0vizFDTbWygjPdq/Sld24Vx7j8xy0kQnE+60MFbiSVcQTzkocRYDhXz6dDvC2TvvRrgGX14bSoBNclqoYHSP5cdKCpYBxycwXz/NlNjPumIAlJMmtKSyP6IH7w0Kc9EsjZ4nszXMY7DBYQH1aOwFhqJVPyBdGixc1IVG8kvbauqBjuLCurh+ksOs8CcACl7aicJQYTXkamHqo14C5b6bDCMyQH/bA67+hsJEs2WLY6QiNmPnORft0cbIZ4X1B4EC9sejhe6ukvAAnINTvxbOo0elr1dFNk079sLFanqqNiVMwoWbrYKIUXCptsEgJZTBM1MxPI9IoP2mu0Js/Xt0U9Mj1b+hpGl/unQMYGG1B3sqC8hbYUav8LFcUDqShgnRuOn6qA1eNkwsOI8UOMhGYuFi291LpHIUxVAiGMRS78LjG+D7dUNm0cQeHiYaxGfedjjHipWTU7PmodizRl1TVEmPM0hmnHqBtX8RVRO/3GFByPZcS4IsUUxuEMTKYJdakSDyUlH71/qkzwS7RJ4NL+s9VAin0jpQjNJ0s8DQgf6CG0Qkz0jap2VVOAlfzBjiNCpVK93VcMnQ3of1KvWskwWdqmjMLPROuA8aAPXDM6TXfd3kidsyore8yrS6JBBeTZl9sNNw00Y7s/wFQE3MaDulHQ4XkLT2spsw1x5a45ZG744JaY2kCisEZMIYSloUlxbW6pG4JPZxTKGZmLiqm3ko0sWdXceq/dnEThTZJi4C+ODCgF6AnSJRq6o9wWNNjpILQdpEt9aSY8QA9hEuezUoowoSJLAPSDh572IpArjPrPiWJ591dsFG8PhNymbJSIzdL9nIlhqjdb6yUE4dr40/v8JkYbC2acLhHJF/a1o57j/10JNa8/9Za5YkaacAbVbO0gM7pK1m2qV7B6wuNzf7ElmRrqyT02OwtYa/12mICRextU/KhWgwyi8hqwhlIyAaH2v6YXCclxkQnd7ygziBU5jBJpxBdygr6AKxCLSwMAlYEsTCJIiEqdbTtz4XCioRGVsDELaAYHNtveC+UNhdlC1ynP6jWQIUmi9z7L+osrykS0aXLM+3TcATFHcfyC135qdSFj1MK/v1zQZgzKgJqav8n4ybwUv4+mYeaXdaSyT6Y1bvWvUZDeR5J/bJWGnvbvNgttiFJGoWSEg/IzK9XMrCDAOa6UbgbsISEyGbS0FRVTlPZXybrMdYSiJ2jA6x2Sn5l27woa5q+jwc0J/T5x127kym3k3MuNNxZA7QK0s4VpQCePiVkC/G34gnFnPYawuMaYDSoPG4RWeGfiI8TMxHHuVo9lJlKz+2xABUS1t0YNG9IMN7hLOi1v/d9ZOVgmcsztvTOboMJXtKEmWT0z76f+cU0T3OFuihCiSvoZ4OIkltjDq7sAXCJSExwHgrzwfXTuZE+QyKL0TI9ogIqGzzuK1VsdYhstunBdskHfhk4zH6/9BYL6VG3kISuyH+dPm/JEm6iem72PVxJhrw97pJzyNxStjXYFwvxUHJ7TcnhClDmEMqS3627jWYr3xe+sRkp5HMb6zqz/VYXdehBeulaeIVa3u0mIM4vv3Wl/q+7bBzvfwIT8sAmkAfxwCy60BlADCM1XI2KRHbOiFbo9u+K2mNDUNAbgXWzII8iznT+B93FJnXSamdyH1UmCzGwWspXKIMtaBfoRUmy3BDmmZo/EeMLtSWin+GvZ9XEu567DCzJoDzgczOktDoOJmlcJnQw+OhwaYcmAra/DLZeVO8vowEVUwrQhpNFtLEmnD2PWv0/RL0vnSYO8ITj4EG0WpDoFXz7zv4Vuzsl5pbpfkOP6iLnJNXo0pVeBwg+IC3S8FiqQHpux4UKdKOFTnMNmLdqIeu1hfjRZcwsZqpPxrcqb5xo5v3Qy1c4G2PK+7SOb/yahlg6359RL/7/WZBjWGoNh3bahLVACMGbmdDvuwIzo2NmbL/AJHfndbmhcfxgrOd4oRJ0g9W2EeQ1iq85/FBZW+2oNxqr0CHxAgfWGU89v0MIdtLxpqnVk8lQTCcVbkN8LizAS6RFCgKVxWWza9iDAeUsj3f3biV8sMUbk4vMkFMr6f0BJjC0lJSocEE6QtH9osBU8IxPNnOXWGn31nHTaGCazcxZrtr5aydsLUKGV73rhxgduV2MtBkvYcGU0DAcIXbg1oem2IYsoikzeFdwcNBT+jJWGSETX8AzgjeTH2M/x3RD2CF7mGu7IEjBboc2f6yuQ07VCMC3rfY8bLmUOQqdMjl4UZ5Oo7o7Sz+TrEInA8UfoZs1WgyA3j+ibVTqQYMDGlsALgN27L14aLtAFp+lHVqTh3WBYET4wG4xcyhUIvB/wJQ/XFlXO/MfPJbT9ppIcITdkB3zLiR4TexeacMv65KVSSzCmdA4KYxzcTcbAw0m0KxcR5QYICV6GenkI7Q/Lr9xcDR2UtKbUaSx6GQxfywbch7DUQWubeClXFgVZngZbB5HnisOAUYQaJlsR57tHoC86PY3KRvdR9kqAJWYRmVYE/ycLmyBHoKZGZVlsr3TFg+xaRpCWMY2IBLcQ+xiVwEK2ByQipmzI99B39pmHWclqmj8V38B/ApzHzARe4EhxBWYQAaZveuXy+zbTLQyVGuq7RAWMs9x7MBz744eWKCyjDHgbQBFxD1c+UFQIPsNbh1G5O5r4RYc2+fjyCV0P4XoVhzdCDGxiB9HohFTtK5x4P46D99aTyrev4fS7q53VsHjCVa1GQMNIqrjHIgCJZICDugONmckiQUezfIsA4Tn/KadzrwxZEHU4dArUawD8vIzmknvHvzCU3lOYHJvbaSmElRWxJivIztkdIopdkFLDfNhXtDbmjLlUrNFisbyQ7hWF/u/nQ1p5rvIj0r4lazsMIOtBentntuZd6xOpcB9BFF9nnL74G4cCcGaQXz38POOuyaTZjbFJVKA00nPWoatSMB5TqtQty7O8HlYKQ7WcrhwZ20Cn4ayks+U1LU02TngO+9BuKpuCMAqh5CSkDxBBSTE90P/A4HyAa9IiIDFfNw/3Vkb6VHdu8ccoxRJyHoKtP3U/A8W07dw/I1VaSotywg8mBbhhZOuzG4/TD526JQ2JkQvNy+FO2JP7C2z/9sTle1bgYTyMb059UtMCALqpq1tNPDUFTwMsSUXwwcILFwu+jcXwgbxjk0dn8wVrQ5cpObmWgta5vwVrCwYngtj0jI9NQGvcuE7wJ2h1E4iQSm18gqJCL8wESv31TCcOQZAdFGqJzKG0UyUBRnY+zkRv6aosRpIurYJvbBe1/xpqDJTCFTcq6i7E+K/c0kVtqMy94XDFo7XNmXVT9rp5qhvGYHhxATnfrIpQlmwPyqGriu4VjUn+eFdqBLgkEOZi47zrZV3Ucmn1tLP3SnAGZRLarSsRkuFZVC8BStBVZKW9kNmGo5JP4/bELvGRszSvDc4QlZ8GRYbEWnTn33D4HGK/UXpW/ekOFkz64b1PIaRtfIM9YC42GFg7Lc9k5K/aYqI28rvo2KgulM/QFee0kgc8U/PR+pRv3kcx0JihdRjCCUF6E9VLLac7+4vOZJ95iUyiLIdWU6NhP1WbHqqqDcyLZI0AMDl7dZSDYaajZMFkk9SLC5f5PyVKz4QyKFlq2ZyNylqy5kpBe+Qz/b+CtScthpk/spxcqSizUcWNAGg7F5AueATdsFedpk0HCjLu6sBGJOdxjH9ddVKdKqZr6tNTY5XbeY2STFfJ72ijBcCU9Zrr++V7NSrCvkC9/7m/eFYGkn2YdCFsPmiz7qEMudNboPhYRyVWBXjR9+Zdh+6GYwra0gxCrSZDIOC9cd4WnyNATR9ffmxY/oKrFQnzzTImRJKCazt18WLXM1ezR7u99LKJyVQjhtoMRIuYtCn7G+K9RYDEb8IBjeMHM36NuIWj0A9M+81HFKitXeiTqyDBqKxNfKdo+E5WgqraMEx2LXSOBuzW8yrwne3EWTQlxGgqkCIgZSOVGnNRDQHMefSYPX2qAGAHM5tJIY/ibEThuanHUxChRjqSneA8M73FY9goG6xm2pqoANZ9WuPCnvVSF8N7bI8VXzsfiIZKwRQKqWiEI7ypNCFVMmSFiqsnVqKpSOwes65mnEPPE02WgeC+mcXeCwiTduvEOEqFgrNiII/oK++Ugfij4/4vwPMV5OyivEzA/iC8SJ89Aw0QmCmxIA8BylY5Ga8VWeVv9812iXlGet5wJ7S1CU5O2j3shlsAZGOCkBzvwGvcItiI4QkHOdjNLA+K/CRgu0T9KEpvoX6YhmpT66xHeLaZLDAeU5gTtZTv1YlZzjAysOEE93hcX7YtbMgIZG3E+KRFvCweL24BcEVjuxkMC4FLN8jgYgvk1U3ikDTdl5mSo9qrUQIOAYK64ObxpBm/S63NlnlyQFT4K4t/hzrjhMJXgcn0cU6YHSTq2mEy45AH0JcDWzwYS9cp/gy8QLGNZAvsufk720de4TC5NPrKjRuFA/2+NbNwBlOCN4rRHZsKI2jzYGT9+GnzZzGg7rMz0BK/YTEOgLH8jIgCmAgspsGcFzJ1D8tofi7xkrhcQGy5AibVzj1apCzPFGXPUJEGXJBRnjQOEpVwyAObhZi6YAu3kbxvaCqwGeieT+ZhwN8UdVw2T9MHLnizdZ/DpkKZuxegCEsSVHdjDW8TRAPXlQN5XZI4xi3OLV8EbfjDZMUskzYvwj04Ued/8FRv4Aha7uafZmAsAXJ72Y3CNXuwCxFu4WAfyAHCiogb6+6wWgg5531qY0Y3ww3SqSVT8vaecWCHY5NlLK/QUwUX57BhmhlxjX1yDsA40eVipGeO+Hlz7kNesFA5g4BgoL0PlE8M92RO9DuslcW/voZ3SHYzUNILW/p+VnufkNRhtHPReT/KEVVfmgoOowe4uc//N/etPhTu1Gls28P6TagG9UPi27ouIDV6BNIhWpxIvxtPkDQJEq3buNj1wl99Dpw2BsrY7iG3p8DY4ksKI4rUAZ5ikgVieux/guRaYb/+7FaSAohG4jyWwu+G2UR2kvAJ7rgoUvVPlRvFe6+s8dFdVHFeowhzpXiembAnvfqqlNG/76D2BQgasONE0X9w3+qfXc45/6ukTC4k4er060frT9Nv5MziUwWVPet8Za8jkfLaudPxssDmEJlO5GUYBfaCikDzj1pH7WQF+L56ntzPU0lKSXrYetXXV+3TF4rM3WaNOlfjtoXQzHOnWaKQ8tVMdv+LPvCqByKxP4M/pjWOQ9kR8n28boXE4AiZ5Z2VuIYr5F8fD1V56bJJBYBis4t7uk/2vaXd6YoD63iUPUsS67I7labNp+J0+rUaIr3zeS/U2MdfVfZFLTtZxSTPeQ6eimt1ZPjdkphJsaKlHFzp6YHAMjw/jaukcHkWP2riZqMlMg4PhlGIAK8NM97pJHb+PP+8+GP3F7X62+/ejdQ/2JT+63NE8jZXtBzbIbk0TfRj3IiwQQGrEFbF+aLU6zFDAtByMlt6AKh9SwFnZXBmZMawEpbsg54JXiSEaKCx4Mwlm0Q46mdSalSilQO2ygC1zStgjW9Bm7YtNQELFl9XvNKM+q8n1UFx8kKG3FxmfwiB6lflfxw5Ag8knhsbjVIcP72WqQU8ec4mVH3C8lbHK3C3yxQfOyBUMGjN377+1tlbFvXYCP8cUNu6Wd4vwGKzNjOP5G4sxys2+yALD6PW4Rc+84SoyGF28UEXDPta4WW4CMzvLymfwHWxPt2lLE8afs49KxY860eAY7WDfec+wS3J584qPHbWPgB8+CRJlQXniKGKabZ0G71LlkofYo+iWZkWWHqZU9HE7osSi4qX44FHbf0jq1k6N3SzDzLG917hT9LgkUYg9/zM47kLrFJQcDpQDv15XyXjlCkJ/om1egEypg+ld4QE4WlLbnuMJ+aKet5FC+ex5u2GbEI+jyATL3WhO7YnuOrCBhzQghaCCcTgMN2u8yFV3IQdy0QI+1tSPSqw/aWB1ik1QUcGIWV+LsKZRqaWAVrJiO2pusW2I4RyxJk5EEJpGYsy6cHxUNGc3D+3sYHZVzjQiHhnXn9M7H93Q+9FgNNX5ILImWpyMhl0ndnDAo7GtJk0xoIAb3xTzjsrIoUbdwaUWN6GRvmUGEGrxzs5KkE1Wo3Ru58JwKhOJAEL/niOd71mNB7z2NLjmgy7NnbjDDBT14IBjzAWKhpvRIA3vfBW9/rtLPsZ8cZ7LzazMXHQarnIP9O0DX5aVTso1RKwsldcPnImTu/H12PFD77Tb3Y5x8lkwYR+xREr+nMIJC/8KDIKcxkjjOyy3+GylIK3aI8pAgklzgTvTJRPv9vAw1/tzM5tsvJ+yAU7U+lhPs/hdhxpzEk6MfExLU78zOQ9Rthv8u4Ex14Mjft+TmjKV3XPzYGBxC8Z1kMEat/ZT4P2B8EhMiDuAHsmYN94B2lXVx4e8ec3yRk0ztwH65J6c12vuyg6DS6bxHuAK+UA9vlWKF5SWjZI0Msi8PrW3PW6ggIaFV2B0VpcCmikgc5MYgxrrfe9cb/nNgu5r6ulJuqcNtOsiy3bYccZ3OCcnklGi3jHQYcYUvP+j+6z0cjoQb/4M+XNskXLIFoyQleRu3fEjS0NYdAv14LSzrghiUKbD87FDbDDXYONjrXlDQRWM+LEWUxog/cxmM9Bo2o+w8XZnqzbnMgZlWZcwxuXkiRmwJfGnzBNkoQYowjaaHWzRqLijafrHwX0//vEtkdYSiVamtti0ybiEsl0XzJ9fCQCzPIu1gnc7Iige+cunRW4fl08NMPXr8kdc/OboF52u7d3+ih4gMVk7ckeA/kFamrKyJLb2LoIxx3yY4XcmwjaTex/G0kf4mRBAPP5cxH66mQ3zsjP2EdNlmQe6i3RTj7iTuKNJl9DPc4RF7AKziWhCcd7xXXWq/RaWcDlcYTxrCwGDvRM7ZRY2dn4L+xLTiJlVlPj7DMfUO/4MLpTv5wOFgVLBqZgAHmvOsQ2Ct6WmKnbBNoEshHIBz6s7s8r46UqFHS8rUa0GnHFU5MrjsHSX7nkPl5d9s4HcfSeNHJj0wqQRAtTmb4qakGnt6hnP9R2xtwyyzPMYN64bYLOvsSh170rJXRdUHrdE0Un54QjfBQFcOlXGzaWpDjuYkyVEqctuw2fWl04hLtlZOpfolCKzPwQ4TcC/2BCrYXZ9GmeOxPOOqOAdXXhenx8nXhfoOLz7I6jgJ7B0DCDQDlFmSUA1ADLlCIMwhxz9kqREp8T7UU3/b9HqO11wFK36YUcYrf1Bkbpo8EJFTLz7JsJhn11/l/BO03l9+EWFTqShsICp9Vd2+6YBmYmoI6zepJQNNiVEI9UH1CoArflDL2Ky44Q8ZKRl3ZeWFBQfF7Gbi3O30uVppULOsfXNGlUu1szx4d+HIhIVBLbLKoHzGEkbIn0fSpIlQVQ5FmqMmi7nEjUZWb8V2GsySMmaIHksHAwwwMto8mrZ91VUaR0+HL7laBLtdytrqbcmIJcTZ1B6/8vTDfaLqfNtiDIHTBnRw4xf3LtmXSbkhYa+aEhicnI8302rhR+Xvdeg8sZqDrUAfhOcgpGHHtCA/CsO6wmf5IgXlFh00zeoQPsibaWce0fV9SEhz9ASzBRd7WWNzA5Jj9/oRNE/TlMxLtBBIdv1urdbxhVKZ5OzO0Djyn3bvE0apYdPP88aU2d57StdXvVA+guzZ/aZgh4LSwyagxytDg7xJYbfqOz3g9F7hJ5sJSRF3RnuW1f7akd9ZHF3qTlEp6UKOWjulqrQn8qM79/l2Oyku5d6MXd3R6Fl1hxTJJI37MIXjkjchbP4FQFNXgunD0YR7tx0O0xqb0Sd3fcD70bsE6uOuOHABRqXcceMU/8ddHR8nv/2nKbAek4rfUmgFrYh6mhByUazC48EvfMwCR/D9tRYGZtvZRnCnn7NmqW1LXmmXsvZad3liV/FbC3cY/T8H8cWdBQ0OMXLV4buu9mWMB1ur4/tQ+TLFKseybU9p+TbQ75yJwz0qbvPt0bAGfW2+XwRvxVkJQffXV2uQHm5257gRO/1NJa0teZ2/KbgB+ywp3eL7EiDg7fCQfaglqVvr5QvNf6W2foFXgzBcV5aDxQ9I0AIrv/HNculukQsWi94yv+51wXsGMHi5qB7hFHoLkKB1m7DgID/iEECgECNoTrI++AmjwcK0/3ymyv4ep3P2rdxGYsB5atIwOSkPgliSuNLi5sOLZjU15t89szmMjrdK7LXtTJ67lUEqFVTD14u4PsoYW7CTNCu/ik+YjtuPe5tEVPyFhRPE2GnU5xL+ZkgqjH1vqUhB1ZfUKr7z1Kq491G7inGyIFn0ISPkhVpilzRm98vrq/+beCqhymVcmsQA7zEURGgPjRaHo+fon3GCpgSW40vaRTukcQUwSxY+SNBj+mLnlZs0Lzg/IeIZYSx1Cn9u66BEykYlFFXJx/vGQyaR6wSYTdqQv5EXki4KnHleM/lK9LwYLqnt1+T9KCNOmqn4LYbXijim2cHLovGsAgOrt6D56kZV0psoqnnpzWIkw7hWDnuJ+AlOy03UhQi1cyeWj6QeksmXowyelFX81oLOeYG2fQRTh5LN3fQ2IYxwjekpHuEJGJGjKTagOuizx6iMv96oKiAh1ezNb69xPvi95IvZIdlOtePPl0moqD6iI3/9aDUY+aFip/jE2ibox+Pturx92xt6/nZFEF/GY4I/48cTP+oEq/HtiQef4Ha8vl2bh7ebObwdx2Q8xv8/Ma1OfE8TTOOnE5uY4DTeTnzzE/ydoBqPCT7Hy4m1jrf7FqFevV3nX95uzXy8P/FjTPAwwXE8Q0tP4dJqbpuyDWJeoAgBcUTkVP4tOZb8O8Fm/uj/lLYODzlPFFB+N24b9CJWbY7vggrPIq0XCgHWDaoAFkdhzjsaPHe5hxsAmNnzqAwNG/vXotghsgQiVCTzQp52T7jGkTO2ESDMc4L1MwLbBORVdD0ywXXTgzMBJpYnbAO1bhnuWZ/hCWocHOm4vGZhIQq0NaEpRC+Hf8oC4/ftjdnWScOqE6nA4StH0cWDiBG1WL6pxwpew5h0btmFZ20U/Pc7xTwY5rDFNXyJXiJtqeAVgkFp8Mdb8ucnooSzajkz7GJ0J0JJ/fDgoj47rCvLZ+B7ULIBOeQTIa7oHnTlGWOK9Ojn8+ECm5xRg/eCjFyQLEfkd7LBDkLXTmh+kn8zNMgemuny5zyGENoQvsXIiB94wEupfEyPm7b0PzNeMgPsAgzv0pSqZ14gQGzQXKf2qFsj57IkTm8HF5WiTscnIrzi8VHBx2zSWkv1H9jUnzAv4p6ZA2lNi9IXTKy+ZA3RRWJ5b5F0D/mHwXKbe15aw1cXMTeR1yWffKShzP55Gq0cRZEoHrVdvooQL7t3b4yb+8ZEep2bQOt4pvXPkKte0AfAoHDI9OA8RZSmwN7rZJm6D8KqZMnxcPDqMAkk2vsmJZOnl7aUMg6+eSceA0XBgowz/Ao56DDVwZXSOa8p6WMvM40VJrJrBNO3cSLRGyPpkrFyVbxTHLN30GDH1Dl4dggtirUVk0aW7Uz1GITn4/xMANHgkRi2e4AKpSR0GPYV6N1goojI957gR7gk4N3t+T0xNAGkccANQgbo1OFK4J9WJDBdBLnalN7X9erfhfTkjdKQ1Eau1CSVKxUpxHLhSzGNxS5lBMMZVEYAIPaEoPMCRF5U+hsCMmbV6Rjh4TQZip5+AshhtAC3BHjG3yzgRP6N8O6CsUQaD2BQCDNEX3M2a4Bi014abwHYe/V19z1+f1G5Pxyri4U/XPbpLkV5Z5op9463QT62qzeHb4YiOp7wqR99IrC+Dg/LYJhNlMFUKJGIjqup8nwDkHRd399d/vl0pl0+0+J/WLU7mipMpaE/sguwQWM6gNGxgsN5iFb/QglPulfBocNb/N8k+5eENyELvyVsdEUffjVZtHGUkMYf04XSqncupezHh6srTa61cSPhbtxefa/Jpo1bSewKNdKRakkmc/re8yZq6YL9NVFNSFX+nC4E1GW/3KCsqQip+UPLA8Y9R1aMLJm4w3NLQMCKX0LNkwJcYXyUgikq5ijL/18E/KegoBRSrnn9HGFO8OSO09yP+eQIf3+1mlBEwB6f32gyabTT0U5mp9ZOtSNVjqSOlDmSmMVmIXK1jPIhq7S5P/+bX4lQy/suEgxFU3nW+VyoZlfUTsvft98czZfR0Ji6dXCj9jiuDiGRmz0K4e1/FJivJzgGIxJ4hgO//yKit98e/LWPQeO95sTG47cHvkyy9H/L1JqJhLd6KY2zbg6tDYcJ//Zov0qrph2xroCSQ2sFEe3RSW6RyHebhjg5iR/xyHtGKDFV8vvz9w/rvkkaWBta0EKK0+zbQ12mqvV/+cC4XhGmXhMO8C8UdfHfFFYHCb0ythwBEcZSsx5r1rYmOzYBjXPxaM8TLJAzx9TTcelJuG5LzWP8XjdHk0XnNRz/xXlQvN6MyviXOJB+VMR9mEVmvqFxj58Qor7lbjU4viXZoNmLOoHTLitauny1Cygdd0De21f5Dhvevgs603jHx5g1zknKhvetIvd4w+6Izd6ZkSduNPYN3SZEHQvA+Dk/6rsSz2LE9XGkexsu5SSU8hZ/RQIe9LmeU10lORAv+tZ2nYTwgt2DbRKnZOK6wQKQaBu/pqVRUlq2PhtY4stlYkF9LXnul2QTlEig3Mt++1RhMXuXX6zgouKhTzr4C88XHJRDVpAoaWCGw/5RGscKtdrQCjD3aIWFSm1FGvXJ69X/hrUlWy6qBGvbn2nEfAjo411pqpg7VBCDAPygSxgQC/glR9omY92xPL/ux0jNJc+gDGQW64z0Zv+TSIpgyY801FEEmUsMmbleOmIkzEUVUTuhQ1WRfuWBCAB42ljvUV8m6AOQHTFcHTaLAvTSdP4gfFDXBpakMOc33wxnRm+c/rcWdN6Az0Pwca6KBhE9C19bwtPKQfhrGll0/q6AY3/TPGalbvq4d2TquNMovdbfA967UW3J5q7ALDCJxuMg8hBL4u3XNHfeIETaj0SlW88Kr6FHtl+DN4o0W30jbS2vZl5iL9oZ110kmZKSbWkr21Oeyr/n9WVAQ93w98os5ILh0r05qMVsW5U3c0naJcFcLp0BsdnFNyrFzsoZSU2DxESf7KnRoPYCXMvKleEYA/cTT8mnDISMZd7D7BJDLKtSZC6N0h2x4ectCndYdCR8JkFu02pbyWmm8VSYduWuuZwbbOKgH+iKCjdux+37kt4Lx82NiB5NiGcR9enkKYEh7xKV2Rt8f1aEHfyoGAyVGukozRXS4ApvmihhfedtJWcN9FOF9gMUqhFdGuHcRtWBOFGzfWH9AmQTObflXdgvjveQ6LP61Q9dfmclvK2km4p9amQuQWhSe25PRsa2PyY30xY3zWG9kB0VDbTDx2/ULrHQA6sYDLqVgeFlxuCNbhgJ1EUOoSeRPln077QmLj4iJkHxphRix4rpLnSwiLLjXlRVM4sCMM5NL4PkvTC7NY2IbFWmg8xiqzJ7YhpFLRERdf20FZTLyYjEnGs+U/A51JczG2DDbMkKvS0QnjYvotxrt1ZSLJHyLARUaSWRWZQQ8dK6jS5TRRmhKo8Cdq2UFvG2iR0SlHOqURCKBnYoCPyiSYieN49ScifqwGQ1SoKXE86O/gC8mIJAdtPh+2g44ljtnMgze2AiTZZF5V07ZCv2i27GgX7lbPVrx7iQCnY1TTxSbYZCrXrgzofyv9afEps5vO7JBC6fpQiFtiAFspTkEou347oeZpmlqUWBlheAyJ9epR3idUa/VFzL3wWi1aHtfr/M8pATTINshB1FK1NWf/TNfM1AfDUYvB6sg8PCz2xBxQa8KOGY3JKHAotO05IzMsgB7/a7mC5g813xroNn8RsQY690wqNDkpYJn5OBzuHKcEYBZ+sryehYIcF/C18xtQlXrr1VhjsWzSGJ4ywZXeBCe3nTNBFKr4C5GaEesYiILFf+I6FKkVd5lSg8PY0zXYUIKVHQxpIgZ24Z9hdAmU+RNMt5V3Rc1P26cap3y+nMRsu1PXu8tY0Ugs6mxyPUwL9Y5CvBQBI0OKxEqnLgrZUOb585Wc/olal7VYXMry11vIAbeZewPS8y6vL8UzSsO19GmOYFo14J7/Z9QyUHw4eVqPyPbf8+NWOcMYNk5GTuLh757wqYGS607V1sD/jx5wc3Y+NWrek3i3avTUQmeYs0p8fpzx8h5EFoGwnlRTLbQov+koa+lPoPHVcLXrhOY13MJRhP3JwaKQBimVF9XuYtiMjaCw4v0IsRPJQqp9s80m1uL7ZwJKoAoy2Y/bsgw/HA3pBHETvB+s5QvGumhjDjXF+b/PaWpLbugheuP2QSUs9H2cvswg3D59xVLMsElGLOdxTGr323RlTgbjajFASZaa2P0kiw+reGLVa0S3V1BOOuLT18m1jxdW1kgqxCxcv25PFFsLuuFIoUkEmkWY+SxSAV6/OG0kNgfhColaVEMWSOgYs5njMs9iffB8k51w6xB3fO+J2HCq0cULkOyXpep9ZRIYATAwRvu/tCOeXndRDpGN9+y1Soom+Mobgny0P7KO83IArQ0X6729FzHyj0d0UtMtotKYeTp4UZVM3DjyP++IMf9rzUDcJMhfDZjZG3ig1aXovQNi3eLCjSgRuCOj8adviR6z1XlEY22De31MKIBrdkcnxAL309VHicrFBKCfyxsU472epUtNzPjCEVbUXOPgZmzX1X7owA25CoT+s7UjeRKMaJhWgoQQMPmwbhYRFcFvWdyyXygn9/N32lvJ6J3aKRy4UUbYhOH4MNq5vzwOJ9M9UXxoQGf46OAsBZsM0jbwREAUtx9u/1LdyoZvqkAdiSVl0VSm4aMxaG/AutiMK9pjQd7Aojnjw2VgSA90daifexL+KezRlohP/SzQFR9n2mgrr52PP4SQnNKlpleVqXF5lU319PaSjODwDsINu/X8ZKVB532jtldZUswTUQy7+tyfmoFToIwwVqZW1B38eB2Wd+SOqzbqULmk0G5FICCP4Mh9ShYNpyhlKKHCrqQXHF/MM52+e4tmlQbdh2Eh6fTbtS7j9Zn0axQZimzxKvLc9xJ0/9iUhqelVM2wSJP74i/g9aCZXNYyUT2Bspxw2lyUQl0rLWWe16JOoGBlyKSphkmFgqL1I0blKrfNU4ReuMT+NfT62bkvv4cyIyKn5+t5BafLiK3XiPL7pCmZT6Srp5+skhMFzmp00ZddM/lpdigtWd+hd9MuvyBdqv33nIg6uNdNIIgSV99klDLPolwMchDas2c5f0LO40qlAht1Cpl7+DvHe63ST4pivzT/lRD7N5DsejyajxDy7SemM1PGpRwtXxNU+7hMcXblIpFB699i0SpL5jzxLye/w1lECWptOWme96bxW/G4XMY9bfEbVDl4fiMSQFe8ear3qsjGrnlWZ6OATBVhoe08UmYfb+lig7p0YpJdilajkaPgfq/GJxEmrx50q5GfecrsYlFz/Pu1mmbaE7b0LfSRiEMoudn7YtcUHJEWiUV8EfUem4QWQ5B1YGajJPvGG2k0S7trgRE2EzjbCHkjzV2ZiqKVS7xZt7rZRuGguWHvHF7ZabbuLcINTKPxFM7dX5NLw1Etery9c24WVmnC8woSFgC24kae2LWaJt1igfIArTu6zNiuNqY507Qj0A2a4+CLDGopMfAVdChxuNERt/mRZxqETNZuv/KasLW6NhdYvZbzbWO+KWHBXKLyofcFotpmwIEs/45PrOntxsdjobU8ldIVH3Wg6sxk6ng23jBqeHS2+TkF4tzmLXiAyM1tfgOWS++aqQm3MFfwQFM5Ev8HHKO3m0Fg1JnzscyzwTfFFhp1hDzCxW+/cRu4C3dXlWq0xbNoMUYp6emxoVIQ+9GL1K9j3H/QP63lHNXYsp/6xqCS9+2d5J92IWLjYK1pumzwIsnYbRNrJH3cPpXigtTKYp3eBFIkjvqw6kSHRUAaf9nXIFkoB5QzB1aY0s2resRPO50dq4cCbrQr053bmsVRBIT1k0Fbl4ZKJ91/t/ki05zqhG0HCLE8gFFdfsHOLe7V05/xOFwvlkR9JDODiJdzz8ptjFaIixMYLaIcXmXUk6g+rAw5SnKF0PhVijoXNIXqwEa7e4r8OKaw2PRFsJPc2KY3zIo1C6tunZSDRdNOK3LGk8vIhgdGXOdePGqdmoR01Qf1BY6rSYKyGpA/vc2qgKhbOcZq102k40hjv7uDCIxcdoOOsHZqLsCh22/O58T24gRVAKfNDIgcX1j7ARtDVNaFtH03FuS0zcM6NjeHh1XQ/PSLCt5MIhsDlsvXX4SfPxTnK5I+wa7ZrF/BSFsv0kqNJh0mFxxUqBNwG3moMMEHVp0MsESWWmdRhIDsCaRXs+3ixUZBpiyCOaFXCL4RugEH03DWlY6gmqFjp58VuxAGmpYLjcycza6RdSmMlsiV0V4avXvqGBJOLN/quSNHmc/njzKFv6WQC4efrdGq+zLicJR3HyJySqZ+xFyzTxRsdf+3bZjjjONtxor8/mYV2jdJjkpGCfOb0zNLNpR7SpDVeWGNKRgnhkxmH6TmETU+9WPu2DPjmp1JdKRhW4DBcl1KQYkvj7DoaGzmdS8asUo0KSmggdf/g7EEoKmjvcpbqKc5vxaGsWfgr6vXoUhn02p+lxY0aWS5FAgVXEi4hWy3A3SChfcBAROQApk35sZF/4IrgZG7V4a1OrTMfQx5oDW2CPJXbw6xx4cCOnxQXbEMjrrYIgmLyT2C/hQdWcRPmQo/MGu8oanPfetjzWCilAsEBgPNgNZJTTCB6ZZFE9mUNkqZyIwRoG4wzjNAlsTm0+3a0NiPzzxUR3BXSDwl/4VMkMr84cm1ewT4mly5WMRZ7mf7cLfTvcQUfKUCX/Jm1F8wJWL04pAHKC7rEW16hRcrPSiMcz+szYR4latUJwZM/84ZmUD2zmBkubC2OHdgOIYGVkwlcMQ/5RkvVDHgQX4ulRsN2ODSn3xDS2G7bE7uw40o5W4ixRGiIDf3aWaSTsQN3rzu6KWQeWSf0RTnMQM9fl4ds6S33IkPIqD66Qcl0+Opr1op+iVnGZczAIjf23F2/pwR9kIzC0gTDFEDZwM7gZFZDUPNTWn7bIeHrGZOlkHuQXHk6Fhr2tOPvxtWy9radVr56ZQlJjmZKUcocOSl7+IFEKy6VcLKTO5LG4xIdTOzLt/9wvY9TFWRaE2Wz+Sehr9/jhyBk+vNC5pdDffaybQvpinHoZp1HkUkTFzrZLrZf3XPXhVIxB9JvXbeo0GGAoB25qpO6v8gBuxhoUXW5vIq7GyK56X/gWphqkqPY8tPYUDswd9xMznbPR77+CtF/83dxXDdrWPgABSbgVtSXP8dRyQont/byaFlaTx7UnSR0GHXYLyApe+sHjr5G8w/hkDRuht0pdH22oLTIGwSI741jq8PYNtPBL7dTPNKhC1PZIG1RnvkH5X5yQJrsx+sRl24MfPmsDg7y9XaVEJNM2Xk8S0BSlZST7bqnHDt5TuhPBN+x2unS0LNr3cdOMS0EaZldXJ+Nq8hBJ+01vEghINK2lbqfc0dYwoEM10R1n66+6b7qJUOwoFhQ4dWVcmkBmqXA0MWLVKqgnzC/0fQDa/iyOtcbbvbL+o0jpYYEoY/ZmBO7f0bPJz4lRm9PLdxdaFSmY3PQLSiEa2ivEPfLfAmXDthJ2QbAmMpltbyvsIFcUbhRrqRxzYoptDkwQne0XdkRUyD+X0htxKwBRPDRZ4K0cuqAyHrqAADnrV/NwZ9tVOu5EwbnIJ0jGhPoGJokQvJKHzF3zW3o/ikxmTgUk6x7KenLrqpus6oNlpoEqOYKl6Rew+/Qv7YkeGWeAP+Wp9cjyUHkPpcdvRvMPGyZXY9RJyL+Tp3nqngoFm9zv9uPycNSE/EERmj7jE4pyCMI4Ov1rLPzVnJPHWcPRoZoPl4s0uqXAdB0fGaWfr8YbOHkpN4vdsEC58G5lOrU8vqT2MGGtKCJfk+nApZeEy1VVHm+07L3nQpQj4pq8eMNqv6XOGDAxaAV0qOgIX5GZDmRsXOWCkkgHC1tdjP4Av+pKlH3oPb2cv++1DdMurrv2FMmdnUJGPp+tucL6t7VNtgrZBVfhMSA9QtUuPrs+Hme0FAGkgSrrBDKuDKlamS1VMjnU1fEIPFZG/NVs9jNKqOUHjEbkVy6EEKoOeZZHDl+SgYKA6RAi+NqH4c5VbyAcEMk2Gc1MR56AUEVEAx0wOurAHYkBaqFOWqxF4ESELChuUsHzQCPA4/WZnq3cmneLrgWjAX5nt4JhmGItkb3jK0DA/Dwsmbn/FsWbSyZqRrx3Iq/hx9iXeE4Ktq2AvDC9F8BydNXRu6yUvzwBLomcCzXXBHysnk2pww8qKan/rEyMmOFiJ0I2VBldE7QDo1kJrihGJDQaKnKXO7cniBZieQv1dFDxeJJQLCJMXKgLxSkYhskpaY2TTifAe6kpwKXQ3gVf4knC0Mf3sL6OrHi9fyKGZ6MJSZm8Cs44eeHsSKZHngsp2xx9r5NjdJV3J62897ucXfu/9spkV9icdc4z+KhCC8dGseaXgN/imLCsmvgNeG7xmQynPkcBXtfG4Qqfjm/TexuW+59mfb1tBP9rghaCrbX/IrTY4jVnKt5+cwWPeV9tH++/wrfde4DttMZea7DQs7PV4/bJr78mpW+V4GOxy/eoPx/RLy38Wl2R41Rgf5xJJbDjZr2rzem4mW3DA0ptqCyHyjq/3ocMxoTZTad+5c9Ls+TtQybxi2dcmfcocqWE67NGskMUsa8wcb25nu0QPzYXs3rF3lwhtOKbSEYpI6lQ2JCmnYCniQQDLd7LJMnPMjJJgHCKzNzNsjUmde2qsMMYUQYmUwaiyrJx4YboDmR+gy3jl+1B9xD9aIsWH+5AGhAPWd1QoODUsWFsaEvilYCNUiJfVDN2di39qDI6XwUwcqWkW6pCzKIUJQHTdqrm6lck5sUsEMXE8YfcUOnBUaS1JoLJJU93apR1kVVJLLtZ0mzPahOsvb3X4SrVAK6+8NKnPyVHJefTc63rJuQ9mhLapIrkNlSmKGKqhlUtGRL3VEMCSkQkTqEx4FN0tJs7WuLY/2NzKgChlalm9FkOUWh79JgVvRZQerm31nj1ISfGZHId7SZwEsMrtSjCpcEKgPBZf+koeN6Ew793OP54pJCGLj3lRbQFhHi2WsZjlPUudmebiONEsqS45Pnj6TPBmBoGjvUfJwVicyoqaUSjgf+FfKJWE2IE+rvZMHYqlcW4NCTywB41RbVCnfICUqHxRKaPhmxPJ0QLz6MkhBUbWOtm2mbGR4rGFB9LqXpCwdzZUBxxPTtxfzNiigo7AKO11S/0m4KSTbVkfr/3WJsSq8XT1oK5GVyAARR011DR94r0jEMxnktKEQZob7h4bu2LWXCadX4P8MlMc0Ro3D2o3HG5yrVg8obiCvFTlDu2IiOXnJN9NfHqB2FbZhVyXNnlFnsgtlIDuoN6RkQjX1Pfkiovu+AOn/bBwgkp3o64uFfl2MZoL4wDbCh0ll15ujXL6WmU3Am8sY9e34O2gEkwv3x5vR5bs7UsmVbfNFoPjt2Z5obdjShHEdE4YEvFEBFMNoCHHAA9wb1tCBZR24SxWLjR7QHZxb5WX3/Y17iS+xgmHsRrblM+W3l+JIVF4Y1x7PzdpMqAE9Wo8chKwc5tAnYdzejNWyRvgmWpSYPi5gygMPzCPPCchYh9qiUiMtnUqAyl8ymeSXDR+MMpkcFWDfITkmBuN9zdtr3Yp/QYC20fKIx2EZZv0WAmvyG8H/nSkJXWwJyeqUmDV3AmtpbPcA9HLWu3/e3jNBr9/NBuch1GmKiGLW3U5pM3Ot0sJO32To+w+e1BtOWMLVklRS2NyTZaaM8MkY71iiAeCKkfZ0VQV8qtPjBn6UZMtgwapj38lelDpxL6GFvbIZBBuEgD0lTseqw8kqGuiGo6xAZRwYMad1/I6PJqoxQehvrCAbcNNhZ0USicdutF9cjsmVJ0hTAEGzFBV3M1YD8jnh8RtP+02Lr2IRi1MbQZHPzX4PZ5NrxfWwUh1Rq/eEGU+p2o9qlkzqp/Fbuf+0BIRgt5nOU34l5CCzn9yd2NViUtovlzvseaiLCuLRC6ZYa8garqs5+ZPCfbnjBQmKjwHdd4OURMU06v2eSKBOt2V9yf4uf+XuiXJPMQ30lZHL8teHGXw9yDRrMs9JRa9G15ZF8MGNQJItncoKksa7Shoc40iV+ZGO7InsR+/VBLllF8tWWqZV8llPWRdhdtrKMCXjUtrlOafaqSqgqbgQDzlGBqqPSUtJ1AMSFnduEuK+xLZYUA4eNk1fTp07igKdEhSiKTOsexoETZ1T6UA1+3+qHKmJl6p/FENHn0pO9xAjQYLb6k2El1q9JY/Azoaz8+HUS7Lk4YtLUNSMrhOQo8TEbFmJrB8bfUSutSLZUJ0KvLsfbkTo6YS4atXUoHlilIAwfH6e+A3MyTvmMTS7HKkiea4Hqy0KuZdlIfRNJpdpyccCKyl8YZZZlgHMn+WZ2cvGLmAp0F3oOWqMowfw2IFBeknKvKGfRY00dlndQuNEyCdzS0ahwOcFkDqjhF04M3HX5aEk8rSPJrR2/m32bMgUyVwrjw2+oRWwRN7uiZjDMq2wyN0b9DYMFCRpjVHxCvN5bihucxYe7obJXIrpUpq8nmgNmli4Hx5aNRubSlqH/E5sEiSg/AyQlPd+acjn1wjsvuqFF+qqe+h2I6+pPn5siZaFySkvOMLs0OeFpv/ovoZYZ+qmXaJZEuisLpKkrNqL3irBgMIL80rchIkynZ72DNNNhUQtJxQsQMP0NEjkEy0caOIAjd5gCsVRE0f1IQAT0D5B6OpklKgc6jfspcORJh8IymNlYno2JR9Rzv6WpFSBf64/GlBF/0TFU9TLCgJJ/onIZT7YMdFraB7XtGMHkMLoBMKTN3b9FHnoHxjFwFlBDboxndAM84GMxi/fHdcHmX26WE4ZTdxbGitAuT2US2/n/IPb0lT/6vTbw6K8+CFzVeLKuVO4mDF0tCA1+qlSK7T/MAlaoVJotG80liUrSBikISZ17DD6RJ3HT9v7zYlynhqjeBZLb14yiJcO5cugGeLQQd1E6x7XHm5Y7pc95ct2tJzeywNmNm2GAMtLlFZ3XsRRDbtIXcyFbMBAstw9LoaEErojFpH+PnEPtuI7UxGMyU2TCOPGcLmrX5MwDYvVg7pvvvsJWGoSGrHuQMRhwZs2527Uo86WRtCpTgEHZFDgLCLjreOzCnb2uAR0JatVpHedOuxduZDjtcmXedJisOLcFnCjgu5FlLD5Bqwk6X2NBTBdCfxb3ILuPysqRnh95NKBGjeKaHMWSk5nKua599YpN2sYoS5mrFrP9dv96g0PEvmDGwIJSRmGNW8eCy+HaADaDD0mnVGTW9/ic2VZWwj69x0a2rnF3mMTMFMEXJEEPMqVDRtLgSLQOyTVcvVEQkgqUM8B4VT2KCUkLp1ZyTxQiBUkUj9+BjvdiTq088iWhDifngsFVp1u+gwh7FQPDWkf2VrqPeVZoRkTIDlZ2esjPI2DLINmp9cub9gh89kua52Bi/hkDdRmIEl2jwLrMT9CDAc1pLujwFCBpU8qJao22Upw5deAjusJXXfgwMyel2HtuaCel9oQMsspphugmhMHXSqbVHJMY2k663u8HCkibrI69OkXasuekGIxcVSTG4OW6QFgT9SyR6MCEVvuo5QoU3h5aVgl0vNiNrI+wO5Xa8LMva+MIKJNR4cvPNhgNpjwvkeorHQ6iXn9XRi4pnZH+k8g4MVx23IgPLrPeaMXlw7XvQuAyp3ddnIVBLPCZ2y89cDhaxkmdOC2srKZEELfbYhBSJGi5qogtUm0QFeQhhfyt4CgjUv1MYMfJKe/V8o+D7S1VEKtYXdE6gIOqGzxf5WugoJs4HPgFM/83mj71cCbeW6zsm8mWKIxylaNgRli4xZJIKwZfZTr6vcVcwCwG0yqIiz3w4Qtaxev4DyNBuACWyKuB784VW0FUjtNtYendvxRtQOVLVIMuejVO2VKYGBxbjlZXON4aICcY0Z/2nv7/p3iFju0hkD2Tp2bxroflwmU6M8l5OS1S1Px/Bg7LTwNIqCWlgwK8PC9tPjVDmyH6tRcsSIRd8P/x+9h3h3/v8fJFvgtHkSx5uQzCPKjPCKRreuvS7EmHA8coyuOecEOPXrwcFQnjvmUxoFAgUhYkIj4xDYYqWe4QpF9z63sxu+2sxfZX4wuGMS1VnDkPBh+pIU6Pjr+awJ/Pf8K9vu0jZigRimdOPAizoWwnHm7LKrDvSOjVyjDh/6rDj1AzDYK1aDgFaJr77MCYsCoMv19vLMcXAnkrkGfuYFJz7TtDb88TssFgWTsmDLtuOUoKGCfwX7ISioJ5dnxPscBHXLdgTcShSa1xWctNuthEDYAy06FDo762I15d9IqZxkF4PTivnF9vk7u3BKpLcBtQppVNtlKdq3NP7slBwXw7AUWKIKTIgX91UVwHTgklo9S7ptUh15B1FKHWG7h5OHzFaXJD/ARjtIV40pI3UYuLKzvKh1qOApjf7HHePhna2qAG0nkMSBfuUlufK0aWN0mb5IB7S94YduY0acsI/JpqLbg+gbxBKancDYaEcRZC8FMlThITq5NL+oif18KepevoWnszxesWQ+si3+fBjd8OQ+gvFC7JIZKF2TADazuaG70akbR0/gJPzjLXuQI954OerpdBMryrvJ4ZjUTaD03Ta6RO73znQZq7ybh2n3bQ5v6BrwxypGiGavVdIK5HH3lPEIIp9lUciFGo3kPJgrZjKREZwKpWl9gt714cuWoinypPE2wSBY+txPqjBHgJMAk96VKEQGeYOB+xjoN3qgUiRIN4WxPOqrpq0/tjScRPIpmvjYKxZTd3uS1aqhJTRjwNBTtfVAmp3p5x7ca7dS5E2nA/pTd2GP6bbUWQzNgX+BnxkMb0XHAweyVWjRhZRRMIyEm/X/EPUyOfranUtZInhVbbBIVV194dhHUtZjoxBumJHHFYsceYPJXtZ+pHZ/eum9G44x/5qC10pWEGJIPdnrg7pzPmyUgKh5HG7iINDrOJQKd298sStcNmgpqHsD6udtgOOY/UDMCaIEOxfdtKnD6yZ58idItpnN5cn5UISlKGJn2Co3Ly/JpKO7VH0AWE4iBCuXzlPCUUyYC/6xVqpOs7NlEdFmG2OdcJhgTToA28pPRHan6Q+diNoz2lxzrPeQbWAxMSIdnciwE8lL4WRgu4SpLuSHT0wBOfs7ZIFT6xESwcO1OQPtvmnqjnRMeJtMJZv16GSNrFrLW+ikHLCz7RuPUYUi4vR17lafDQbUqlJcDdsx5AYqnLvVJk/9/Pw1GZhgiHRT1cQVcs7O7TgTKpcdmAjhbEXCYuKH6zKuAXJuw5YQzzP4xDtFRHKqtPYBD4Uf95hGZz+b2puNkkrh77k3zHFlL1vpKcC1ibL3WMm+5CbBMKIdLLImjUIBT1SyzCCTUBcEQmzzZWdLwu/+YWSJHjprNKuIYLLWDgyl71jDJ4c7vaLvaw8M4RMEY4sw/xl3UHvj3u7KGrHMOrgM2mJNy/23+lyrxO+gBzPi8kGOntHTIsUI9gmwygB2QionoDFIN6eY4z7UuQtRDYVi4tU9o0hPwrZEXiy/IkfHhfOUKSFMrJoryoMGgZKZrgKtbM6XjV3nOipGtLZRTyiXLCpAfNJlvyGHoOCWuPqn9ulIbrkv7PE8Eq82zq2il7fFMSKnxKsAMcbED09jibTDqjHt8259oraOFlVFBiNzUCCfRFWlHx4hx6kul8lyHiBgVaUijNZdfmJTEZxMEhMfLeYIQvPjyc5xaVyVErdSmrdRdS3faqhBY0A8dumPkHuNileat5KQBG5MhvOVFMDGMq0af7HX3bFX2ar+g+57dgl3+Yq36SCyYVZeOW/cd4nwvUMfYB1wtMH2JW9+R3CXnA7HJ+D27CdvQkBMgWnUPTTSn/7KXI0MTBZTpDZg758qlRXHXcPVPqzzgTh/jqZrjMWoXvGSamMibZjVWF/EbyL7NS9N0A+iC0+OccP60K0Nwlzn8cQqa3/WOrF/AAKUW56W2FDgO6U7xpqYkvAel1G84tCkKDs0YiDbnjlDVBgknKRkJcBgnHG3qCHUy7rzG9oXi/FMeX/JVzmpNFa8HTNGas5gTfYAKBRlldKhNCiOFzaFpcMozlFnFJI5VeUipR7yqnKc+oJSgvKRmiyPdkR6DIWPyDX2DcKShG7xyK5jRm/ztMvXkBLGy6RpJAm7ZTsBERzsvJiXCxB5dL0qlMi6ZEO3R2A6i+eU/ONXfLsuUC2S3zB1YQdMhpfJG4r90uodQ7Atswiv/zoiGLih0eoVT7aFX9uUCTTk60YlK0igfzBnxrCf7SETZfiw4VsNf0zF1ymcGY0r1KPC43x1xh9XdsSrhYaTj3lo1nKKqcU63+dSUtKtBxs/Ik6bhZq5nowJT4z8PPf+2//8pZp+Q4M7WGFOFLWNPCnEzTVaIMcWIJBvbApPxdiMf4wC2reynhOERYNHdHRjUtyLU2u1FTSMApzGbuwPbnAe5wn3Tw+vlY1J1DsVOKzxGRB66MpdL7wNkjJDYROBwZFh/N+Wep39atb0A/DgISzHWaWpJgmsGjKRjY96SNyXB8GKTy2TVmWmGoQJ18rskYvDmgxwSlJpgxxEnZuuBw1UMlBzbeZPTFv+WgCt+VDrkA9rq1Rli4lZylnxpLM9c0/K6CSE76kxbMWMuo7XJXo66bPZa9/EGO5HmHcPlSbL/z5foDWSM3aDFqk0UB4mnOWA/yNLMx2218N7/jhxEO+bs42gwodWcrrtY1erktcq3fPjYZPtszlAIZnRsfrwBuyKj7LgC6LUHaGm+U/rvtAfBjIhoPajpvhNjMMsxEpl4cbNZOiel3TOyEt+gIecZ+CzGzIZZyfzBsaQmWD1Lrbw29birFKIZurKyoFUZs0mHviUO4ujRjrJ5s1E9Em88i4J/gjRDdTG6S8gOeZvzimZRJvpGg3JM5llwfTK6dm3yzqbNq8iMJCeBM5V9A3VXv/coHkwi5YPp+qZeLVMrZO5Y3jKyKviI/IO8UfrPCtevJP11Dz3yQUh/BHY8qQf+dWJhT6nrlPe0q4Jyc4vMKjKIe7/GB3G6OZsSoO/zYGCIt3ttXjzKmS2BgSZO5e2rpgzGmzpG7TfQR7L3+B/fnXTTHx79M1jmP1ndMusI5f63IzS/LnJk7P3lKPn/aFTYXGF4/4+9NStTUpwRvN0fMsiqFfwg2mKioIVvwW29b2to6s/4Ukcx8VrbfDUXuz3D344g1wrF2Jk7UgYOvjJWljZey9hBEPAqGwuFVPdDx21kHU2AVxDWjeNixdeorKSsxIEzJXmEAPbFj4PX/ng5oc5yYFp0VfWw2czHTtDs0/RZErgif5dS3a6i8QIJKyOAOFfeAZF8Yx1linQbfMeiSUeGqnY0RVhTuM0j7v1sFSYPjbf9iJ7uvYcuqHSKO6bk7VWawgwnNiNYQffhRknFOpH/IiutNj+0bJJ8t4dxeNRFdFLdZNpD746/lRDBOXFoUTH6F70O/7DpnVrDtZMa25KzQ4GcHt/xtAvgEoiAmen3fdCZFRYvlCaNfxB+wBBVJTUXMkt33L5/MkFKM+EQ2Bk4fdqF9mVCVvu1UhqFUeEkuIrEHOxFtN1bTAgnPLV4tLR9l6F48I1mC+BCmLi5qND/e48TIyoRHT7BFrcFW/wpXIc9Pbz8xfHSwah5ooUdaGCXxtFqwT7EZiW9XzyI9FdBQ1Pk5prRy0TS3z2jD8kI/kXpjvxBTxOsICVJiUr/r7E5FP/q+P+ustmtujnlN/vd+W2Xt3nNIqmYvqZJQXXKQ526ErzLgI+PKICr6zRhhK4maOVPMshM0F0HEPQwcmeG6n+/hXFMlD3bDem5XCv+ITTnlZIwE/nHmkdXEeSVasoQzIaRXqIeVEDWjd2wvVFmbzlKhtnj2ggBGKL+P4CjMC6AiL7VWRQJ6opp5nEJJ3QcxBbSe07eebdpgYuakAJI1M6zz2bwBFEYkYDx/enDqbTMTIi6PHNfxh7s0+4DKTp7aUVBXH82uxF7yzMy5+ZneHKjzTa4vcu54u2bzIXyz0UF3schdqbWo/ul91O8ZCftNbgNq9XbrseUjmQ1+fRBC878Z8Wfue7zriYkjKwDFAOPzIn+lmqS/9kio4OmUueuiLHZwEhu1O26ewNawNlswCeJx+FkRhtmmkWvPvd2dFlXgzMLW3hFBUgvgLsgegfwIJ4lPqKhZhp8VPYzg0LoiHnTHzVjS1nj4HOvj+KRPnUQRdJSgSrJ0iqba5Hlx1Np+jtdyrEOJdL8yAH+taP7yRoMagdrGHNVIc9Afzzg67RqWWKBhKzYQcaDCL8ytoSQD7NPdJSSEVlthWUEYYz3jjuURsOjTlXVfBbJEjjAKiPkpb7tzpiVouHS0cN2+Q4tZz+oFkdEh46AW4eF/6HlwiNMpA+XtmRTdt3E4Fyz4mpBGISCahukHYWqpcEMb1Bclkzjog3oAsKxAr4XxNsZZUMnx5/NdFcChmbmjQOdFELwJfkh4AxpWJ523zVJHc9zKD+ts9eMvD/Oosk9t7d3yb0PE7OG5cv0n6zSvB7hUxY2+EbL9gx1JK0Dspy6zLHzTePzL2jxt6wSjPl80YO0LGKEfaB0fH142n3XDKVD347xKrkU6OKteTikiCTQ3zOMwzW28dm6htVY1azYgx3+T38MurWuE4fpn3OT0gaaIVKtcMlerGxm09YaQI01j46xpLYo7lxsMJeiZzoABOeB9rSGknXCZTJ7wRLHTLjFnk7rkkkDs/qQAmC0qDZJavZsUQyBl8DJGaflOrAfCmepi0oKnILqmlbQAHpBWx3sc9HOcQs7xM9liA6iimr1tLIltApxig7dOHIR5qXWnMgRHh66oWfxuDhRqR37FUJfZOGvv28uEOo9hmVan1l9kMxwqytR6gKSfIuCZY7Hq15EZZqUChH1/iILdxGSCMA1o7mqk247aBmdAU+xkN3XXpUN9sowkJsMRw7GG1ruwPy7Bpeio75t40/4UsXvYSmqJi+Q830GSLkzqFWkbPxAXXVlsrPg5b5yq7Z8JUspwOVvcUG4WaXsx5TdUYXeYj5h0oNYtOno6Rc2im+gRj432BUI+JNybIVs2RDRYTDz8xQIjEWliuEfEoaZuLSKpowyLKKkrXSr7B/0/i7AwNVjfQMETdo70ZnL7jB9/jBwDpKG9JJ1zGbGX1WVb3WBtm8uHDIctxj3cxXJxtsNiUd4y9ZFSqX7C2c53aZ56Z0nN5ziqE7nmfVcSwPm1nD+xXsCXW7XZ2JhrZ3hgSK544b69vNy9YDmO3Obe0PmmDYUuNxv5usNH5A9Nb8aTGXmiztqz2VEO5jLtNJ7XzazoHXkMvLB27x92JJ4bRverivuvzQTq9QXf5Doo7+S12asQJjoVyGcCTn/ZB9TWP/G3WQF3pe9GmHkRqvAllUSVoLEux53pDoD9M6LG+kp1268q55f56tglmV/UN7h69MI8pb5AIFiSaLmlxBhAj1J3sv1Q2+7G6l+LhDmcG6gYrNtC1/GK6wTEaeIk6UNf+mOhC0ReHKVn5t+QN0E+f8HfdioY1H/zDP061VVcOCIoiRxDEZHPdFbdrwZCRMu3WIyh5PCCMIfe8+yALS9u2AcoBaeNMVFVwls1ScsGYtAnjJHNV01SPpeABpXp55dX6x15MoAoSed9taknJuZPVyovfxD1/VSVN5s9NgCP1AfMYpzsILQlAsDxFPRr6sL/Nz+vdGXCS8oXhHdD4R8UMVAkf1PVvSL6w4ZgBP21WhcOv0X43Vud6PG5oby8lvsd4fnFlOx6pK/XKw2c51mDd6xttljqLrsBOmUnvVivp+jKs+XoTc9EZ9sQiWFN9P6S3ReRUmaSljXnBxhV8Rzd+hOOUxFkVzWvi5Fcifo40apSFNCdGhsftVB9RUB/yYckh7cYeTGzd7o2S6XECRzNivIToA90vn/yPOWfDRM9aCnwSfMV9JspSqLF03FG/JTrj3kUDvgAUDzfda78R4RabcO8YpBw2uJbF2GEy9HGozfhs74H5RY01z1Qe58elXj4ex8VoAWZGCvyePqmv4gvkV5AZS9Pd5fawS/lsslv8cvanPwzoSvnE3inwcqBH9WIoeUddCubb2JR7SRUEL9vQvRY+IPMWNsf3rISFnQcFw+/2CRfg6JQFQkeXPGcHu3sSQDyHeKtlw0IovdqICkaG9yyynUksdpKnc26iElyq2wRmqzYLm2QVj3FM2MKT4u/HU2lyKayP6XcYTy1Y2Uc2pEQqb4xh5d2qOQUyJ+pjIkgqLnLAEh9l3N11jvDqz42gzKKZZsRO8n7rA6B2qMqIP1G7KzIOBcELux1iKbRpgYhtlT5VREOtjYN8SDKUEiP/sWljKqinNkWY8u2WcD3sBFINH//vr2p545MO62L+I3NmlaDJ8VMrxq495LMzghPzkk647rOhdZP46ucomCWfHosUBBaLFs8kovuTHb4tjxMdnAP5LcNGu4NBbvBFYB3REJbsqyneRUVmkm/LoNnzPbo0GoJ1GNhOeYuuWLVon2CuL3Q6qNMhSuZC6GIunfxY0QrBK6EED1egN8Oj6WmWCAQFYlqPSv6aWLKcctf88jH/4DHH0jyRSVOzuPV7zJ9Uei32itH/eI1RJRxYbqZy/e/EDA5794TUeWCFs+wbjjD3d3jHVHQnN1743fYJ8bLwbHRMm8FXY/w7+CubEWeDG7Y2DRFzP6pY7YH9tSrrPJiSsRxF57LzIqsJc/oiDy4Jwfzk3/NrJEAOeVHP2jzW6mRhbnyXhcJMtWzP6Hi/PkHgRU/MZoOiil7LebJGrqvz2DFD/t/7zq7iYoDO4kVnm2EaIXEr7lH7o89WWFD9OuP2bPqZpDhLDu7w86tTcMuEJ221M4JxFMjAfUjEvAhZsPSV2goJaKB/jvjAcwENC1dM+VzOBom/xEmyOoZNhwSmZDSphC548JJQ41016BwnKf82aOYEqy+VhqH53r+w+Hdk2D6wy9XOdDan5RBxOb41k0T2HsOsR2eQ2ys6pwhu3DeO8Rgj9Q3PCS63UHfbYkO1ToaXbVl6JYOfORRjAVS5tb+LJkXu4mz9dUajcT7ERU0uexXRPLoZRWSIN1aJRTaifMYyX4aSOTQsW8QIkwXDI/9VCUSTxCRa/UxfVsXz3skBtUkN7yw0+kywparlfmMfhtgs3You/4JAmwfIK3M1UfhJJd+prXAGwiV4I0Y2t3Q3GZFWUjoXk3eopNOaDPCYRJicbzv84476NK0N7IGJ/O4mvXiZ28tMKWgzsJEtYhfeOb9a33nHabKqlV084zL1T6ZS4yX54kQHD5NFu283AV6PAJZU9K9NXBVF2m5Ayipe7sqMAuJOrxJGOWV+fD0aFtn6B11jisTaOy5jc6ohReNKNsVccrh5ei+9xGq6MlRPhMlwULcg49YnuOF4j87KDW+TsJ+sET9f318PjjNiImI9GMTAjEspZBvqUM3CvFgg5XkVcw8oPdikQRXskpoH073USLsN7qZmM6AptdsZ3pnWqlpBWsGiQlT776eq/eRz7mtCxTd1iAO8xIZxRdHzWXsp+G7nqS7VRFcTxI9QejtqatTp7cso7z9ec984+Sf6Vyd28bY6PK7XD6n0cNHRE71vLx3UtjEa31mWwar+VICZ+MtJmi2F4KEhNklsFqXmV5484X4mgEQzirx3c0EUZjaaz2darbhawvyRpsnfD5Pil8q9QhURu6ZbCVG+aV6YzaGCU+TrJsIiLtEIRmp9iYJ3dItgUxRfZOeqeBlVMzEXy8zPQWANy6e96GrOrGb8NDaSCAqyy11WbPzpLLPn8a+3zx/vQ0b5NmYCUli4xV02wvGrLKG86+iUu0T5+V7H+fa6qjMCQxDmmsJNcI4ZY4QxRhhjjDEBFwphjDGWL2Geb1+lZvlenkcsbzqEMmIZJvflVZIgoIc45iMBBwUt8O3alxBiBRmioeJ2vCBW4EN4zac/LzN79XXWMIIMLU3JMhIqErvMTMU7jukArX0euMU5+N7/ft51VlB85xwaWgqe5SrvNcZQKxG4FRoCQj0DyzHbRzZA+Haysunv0fhO0wOmxscg0I3wSBDHXN8himMYcISCrCUnJo8CoeYQm4sklpOmt6Wdbxr5ceV4HGcGbGRpE4X0arOJa2A7h/iygRcAOxdy2pGU5c4ALfuI5mPy/16Kom05Q42bgI3Jp0KiwKWzTM6h5JZOsQnQefPQREj/HVZ2bKLd0HIEg0hANkSSQ/a4rso1Vi3Cjhc5Ev4wDuxM8mKD3NeYiIwUBzF+w7jLzxDu4CHw//SoLYn3ifENZnnCwzWQygVQ5p8nnq3ds2T5vY6s/elYdyu08YV4pOBphc4XIoj0+2eFRVOtL5eGFwswhM5YPAaOKLC+hisg8ht6Cx1RHyWkW7/axbEenztH/U1hkD6PyD0tzq6F73cQ1D3IG0YsGDKA2bx/n11sdCCPdrA0tvvDdoz80LP1ky3NEXeb4P094NAiYZNrnsg8DNIkHs8cYgPGcgQzYt/UCrzxENhhI2pPKINgZ07Bu/CFdQmn1sy0L1ooIQ7QAW1NJifLw31xYAkGhFUk1u6Q/Vc2DkCBdbgNhwqGTqTEKvJryQFJY5VgU5bXw/fcykmUXjtCLeHv50i8L42yK6brWxTJqxIElOgIsu/AH1RM1T5ehQSC/PjC8lycJgutaUewIS/jaJq2sU1wdiEqXSrTQnMwZInwBpgFQcg1jhy/w5Q4TvuMLhl84D0Yaj6nikYMAjtxCQbbnL7VNPoEJduSH2FUENLokHQ0m4tDrt1cFPmAvoqc4XdaGzc0L28wqiVpjF1hQWA+ECjXLMeFzyJPxZJJ31lY0raM8ZQ/XsF9pB82d8bCnesPjH2QWWA2MNKI6QijnmFJ6NX5TspRs01O4rjXdyBa9j/z9Y+yJ/9nhfao4SSI2n7/D3h4h8EOpLeljwlJOd7kMJdNH9yMbBYZxQm6SsGhV2zVlR9/h00wsI5Un3+CHoSPYYvMahYeMXDdFURCBFDuqUYUcEF+T+vDNeT8EQEkkW3hoqiBElwGO42NcYsEdXnLDkaeoN6wnhP+T19PsH8vDIM3lWXif80xw1SR9maZlXLSCcpZbbQ2VC/TY1aQ0qbRjcMo/ZyCT0YfuyB6ltcYldYKXW6cWhAsVg/U9EDsy+KQw45VQBbLq2vrnbh6vSgPQs8M221IqNqoAj9NoSzHdjJMt5fGeOGzbP8AkH4c2qUCto8T2oTSpSNYybxFgo20V3tnTOWcTHpAmXmTV5zSM+WdOMVVzCxDZ/i2+2USRQkg7AncMJYYDlR053Oca4wpkFXaOgNV1YkdEIgjG4eWDZLCJ35AzL094SjIbxg0BCB0FAkRjxSSMptfcIJTNiacPKrwxYYwrDDEN4lr61w1YxQvC0+qSZkOXZY3qg5DqrbF3NvHDJxbczpNGXuIVR80tzrexNCouAnMyVPTvca/OCMnysPd1KEq03UsbnPD2UvMqtSVKmXz5v06DNaPh/3vczgwq1FyjLcB+uB+Mo3EQwGZe7CYSHocdOnzEy3h6kJcLbf4k/76IPmJSimeLc+iVpiJfOntUrF+IhSKiHzdj9Vnkayrm/zLJesTilkCyn/qDPGZkkQ2KQkULfOxE069zLJeJmV5ocTO5aDhMhkHDEsSTinN5DELXLpeFBuBIlrqQoJg4wZ96B0fIkOCfp39N6EORCDQfPYHvc+3b/teapEh7/bplSooubgVnxy5COPfNx66HmoGGc/WfDXL8rdgP7zRv/P8YwMxPtlgoqRj9LQtc6xOZ67dmPJrFFj/CUG1FnrtyHt+eis12l/E9LqYRrp0uoTQYeyXqT7S97ADKkzjCu86kZ6c5luQpwE09vq59G7RpG5CdTwX9WP+/syktSNLPuOH5LH2muglbpVkgDIXdaOkbbmPcdUwMFTecg5Ff/gUn6G3yDha3ICwan3TEuPrOMKvebvnR68+AkIDfDxQQMGFR+YmZD3e7niyYgxtTbJvJKRN6UCpFT4orQ8Zdh1ciasbLV3+yLX8y9CVI/a6OxdNMKAt6ZZLjZWmx4QpcwSNdQmmFmpGNhBAM9nLJ6WGwgXX2paC3mvwmN5jxOpj4M6wYfpc3LCMPMkXId9DahAXVOmNjuSwk46Tl/0GNn/2ujC9k/T8BVrvWvNc6YaTyjvvDs9Eu2s2ZXAHcKh/DE9y0KfKo8DAd1M71y1BvpqOQgj72r+uh3zeKGWnms23bmKZOe50TMtkNolCndsqE1MoEEYE8rTMF/KLmFyO9f+GiBSlbQm+NGRQEJKQ/duM7+6iFqJ4YUzcLgJHhNZv9bR5GI2126Fx7l08XDgm+VaeXAbOVznxNB+Ydlg8FWsvNvpGZc6UmluKZd5F502PU9QU5dAU/eV9383NvfmbNjdh7AMBl3v98b7NzWftX+LX8SmkMQ9lkV8lNgAwz0UfneEAMmWRqMOthnnVZh1q4Q3G1ywkTEO1OuPK8EWWzTHEjjjUQ9Z7zORuTjiozKXS7Vx2sMzJlmefOrCQSZVGiDkwkpMCTDqLTVS+O16h/jRpV0ABRTh1geikUD/G4mbm49SJDxKjl5bPZJgH6hrmaSKGSkmkwn1vV2zHjS912eRJQhMjBG9xZAuZRhiFSUCqRvN40cF4LQ+vcBlVVu8tw4MgBzyciDlDikXCs01dnfpirtdAbJWfV00XC/Wg1gVa7+QBz6Hr5qp4qaymBGaOAdtyEN65XAg+V0929zYMFFBABnj68b/QViFMCcQR7UC2tYKU9kP2hCmiHKUyJEqWBsjxvUReRQZ4a8N+YOw3gxrH5B5R+NX8t1IwL7sfbq89kuIcLyQtD9FWW5XpE4fVzfcOkK+VWZL4jUUV91QCwD9or+mSnFJ+wOBsxpXS7rjr0nDc4V6Ye6MVDvkS7J6U6XEufJq6ssQwn5uj21nWh+tKgCBtQqTlaIASjOcS8ICiRJLZao2n7OMHDnpkJZJCvmqt7gjmImQ3wROJuywsPE/YmXY7mhMrkKNlpoyxLKdJ2niE8W8io0YBiKW+qwUgJYKggA0biPD02kS8YKyqQla71dDIDYi6yFlWBYzb44U8/jUc1++b0KnFTaTiGv3cLe1q17y82cZsOIbjcDlkWiM49BhM/NvQH4lT4NE0YctqHBxthpH0arG2afayABLzkX+0FOBneVAOmpjyCpWvvVzTn9GqNo5GGnD6RDyeHiaIIMlBDMmmZ0sJD43Ql1sPyj/inKkQIMHW/DGRk4Db2bTp8nSlDk0lpPjg58mbUtOhcHGa7lByfrrLJC/y0Q6M6j67XWoeAvwzeLlh7Ukxwj4e832k6eb83SCO7AO+fAqU4hNpkr0XXmTXSba4FYpRWd1hktO91Wqhw3CmfPSco1pVIWtx1GUbxIZbsd256owW5PJBJPFtFkbLG9mUQYOxBy3tmUZiZzTughazwWmzSh1kjKtFa9ItJjqyIU067NLHu6YOGKFDMxMGjPLPtRNT6eNkAIjs8AR9aDXzrXyXsBdM4UwMo+oUBAfhjjCEHDFhoYSMDcNcRafGsCDwXhX9bMBng+CXV9RkGssqmUM2Y6TBxRWgzQVeXtO706b5jIPF6+l3OdteZlMyFVkuXrWjFB/yNXaJ5V1YPoOLg2m//kPKW1uMowxS1jViYo2UBkNze7nnZ6kZ86dQbGg9DQkx4/5NVdexApCL9+FlBnagpHN9e+hu4Pipq2ApJw6CLTw8I/D7XULpBpfno1yYt2C/Ck1FaDQ3BhRZo16bbNYmQAlXeDUCqVGo2OgIp1FnKcDVUUXG7N43TOwbl6y8UcrHz6W1pByizbe6H8eaBpPhZhk/umMslcGnEIpDwuLEjZGHshCRMmS2cS/uHx+Z8BTohyiBHyzKvdDkvtawBCU2J51eehksA384cOfDMmrjOKdLMJpucT3HnEa5mCw+hwKQikCh5MMev/+cyf5rk075/Y2Z6ojLgmxv7VpWeg4G7IVs/5TbcsF3oQkrKu9CA9v16BxCy5PSi1FY2ikOPCUnPxddnvrmD3badfd44mpvUvgTb3QMCvE2nbc5beZCxhYGjxmsJ/K8XllcqO1nj75u+cYZ80sbluau7JhtnCTtQJUrpQi5LmnjaGliWSZ/FxQ4hHFxCLNXj44ZYIiHUMLkkrzkY6E3mYDSMv8t8fCFDz0j5CC9FOZc6lCVRkn9fcMW0mQ8hDpBWfWa+S6wj2W6XOOx/DSPvsB+zWddX4SO/X4kPL4cX/kdC0NcA7a0Od5m8xGHM/PR4Du4oWUoM+Se5StD+aS6h9bXvqN6MErcVXfeueRVPgJw9yZyJ3ST0j08Mu656vHnSsd+RcK2Pkyl35uBsulowALzIWzbxkxyX67JJqlyHtGyXWA7J6s3P3y0ES23dsw78kSykwwqj5KMT8C7fKknXqejAWpl4RV6OhLx4Nd5wZz/z7UMAnuD6riSFaZPhJPmC6ZdVpYuQte6sKgduWvfK9db7f+cKmMEXEh6DNGV/06JQI+9DCqbK5gvdJSwai9R1/2cdYQWTQ0tSFoFLRyyTAaahB4bpNlsolrr+MVMvWeBnQ12yqdOjoUd0a/oQO+UyzYfK8xH0TWxExdRfAZes+Se8KRPGhjVuSCOC7W/KCsGuB3oJgEd79j7U1mspIuS/V1UJvE+KM4Jvl+H3DRImT1NPDhdoXoj0pRn07DXUfu/9wwjd/DOew6ZcaDy2kC8ySpMYyDd1CC0u+CybOrzBAt14JX2ZGyB2/pO31b4FEINbW05oqQzyFhyofQDv2gTmTpsnSwLQfq3OvRV+/5CMnW7V+SH3WZdF3FbFMkNy4CW6sRBhVz4SV3mUGQqocuDibclz0LnU/k1NgNK0tWl07pGFnfNqxJ27oN4OxdyO+1vHn57/rGN3TfvkgYHYUSm43PHYd84Sub6BT1yS7enYfgxUB3HpVrWFh1I0X2Esy00Iog+sJQf8WZ/SOUGu70/0BfNwJs7AjzcpR7dIl/v5qjLb3tgfQfkTGATlAiZpsR0Nm5dKS07VDu1tFRwDUTwvdYDPAvw6DGhcQJ8Ob5uVLMnN4OHtBVEINKZCHYXOl45zIuRT+PHDSJH369a9y5QHoZppLEJiYdEYdT7TOEcymQ3HrQzcC08Coz+T54aDAw8A3IrUDnPXKpWZhYItXXxykIHchYLkovXpv9kJO6gLA2+XQxWUlEaTUTwG/dErwWtnkK233pehGdDrxaI9d9PfmCGD2lRCUgtMInPk5cSDGIMu52HP5AAw57gWuXMpGEj6ErZHVgUdJC8p8EwNQecFE+GB7oz3AS/RbuDYvD7kDchrROyf7kOtt1Sv/35fPbN6/uTWEJrP3Bh5hgjsI8jqF02psx59jS8No2k56UOHUfs7puR3z0wX0Bt0Q35UTrjHVe7CS2MeVkPcxMsAnIENxYDrs6q4N16Ei26PEHGDf1lakeoB5bbfvteuuFkCaTrLlKd+V4vKRlcRbYkpotouInFwRlV6WkB7QGUCWI/QI1MFsdJ7yKDxg3PngDasykDR5ppGJH+dTGI3RnQLMLGDimV+xv0M7KCH8PLOJA8TJyz4MxuVggsHoAHc2iovSrwuq/Am8WcsCFUYtqBTd1DNz4eLnmF7sUhIidocin2H+l0+QdiQajJvJGsO4/4cFq1U3otrODzp8ytQwbr7JHkl4pM/qbKGNVGdhQelPJnDRPPGKsGKD17ChdkKiEgeUUsBoBlKjGP+zudyotEotr6vwYVPRXWy1SI3IcOJM8plbLb4WIB1C4bt8MoU4miOzIdJqMQV2T5AKznR2kHqGF5iAanrzuWwCHZvSM0w+WIaf77AnBWE2tKUT7pzVTYt4peqFEgaQnwO75m+/WN467kAE0pxl7pLYgVQ565MzrBizonnsSCWvvM+mT6KuP8DmiU/AsqJm/iDXZQnMrxRtiUS5RpOzxlDFEe1v/frGAegEHRvmSZ36Ah96bdyJFJGJ85Vn1w67OFIIzkJ/GgBY7LYleFu0F2nSNqoM3MTsZjwlSQLRghu7JpNZe6hyLA62HLLZhtrysoD794YkJGX9j6IcwyNPHEUAlbQyIoJ7akpy70dMjiBdy6t66CflXoRLJyWJY0fP01+aCcG/X/dCiekyJu+9dBesicqczGmt39xWJ/d53W3ZePjxf/aUa3mC5gvFMxW9lZKUHGUk9YsOVvUiUVyLHS5F4CP1y7Dwvs5BLnpLmU7/5OqINMGdoNIYsKVYVjFBByEsGJGO7kWfrd9MWQTQe3kQJm4LIJdqY3Qr377k9K36vIP+6hZHmxf77CDiHqk6N+WGJL88jAjrCPfFGxcRsRV1hIM2CulBbynFMLsUCHkAuxQIeQh2KkCpRAxbQ1ENF7NFj5pjaHVupjVJfC8Nbm4eMTg5a114F0F3mOK7SrTpz15JekPrgmmHZ1wfZ16LO8w1JSHwsurtmfNadYgo+rVho4qJCilMs/M4uP+w1f3KKJSxre5WwO9za92V/23JBEYJSjSBL6xa7XBI3x4tTR0AnadbIyKNrQ/KshWrcHROUz/Oj5HLQTUgVIIY0ogrVN2JpkcdhQE3pbX/kSqVQ7aGx1M3hWerdli07b4t41RTCJ+6elATBB0ooXAwnAr3wXAtird6/xw0iYEovsiTd2VnXHx/s8hMeNRBs21MnXsCbPxYL6pBXIJ+ZkOk42pQy3766wrgIMF4lMioT3LNzfJaI0fhHa/JbeS0WuTLAVgep0NEHGauNmd8BxtUQO/OTGp2yJ3e3Z62Q45YYvqlhlWbVDoa00mxFNm+gP8Q++CxqulCVbFzuZFIHpYVmAXmLmADFH5ToP/Gw9sMtvN9jGejHSAON/0IdarKfVeG8sHTiLZi0cfjCjOAW56vsytg3PYLVxD86E77ehpzkUs+rhJmdmlUBHiZwqxAJ0QSwGCysZtgu1lmr0LmCyBZIpMEixASfRJf1LMhvLtM5/TOqftvJOA2x4B4HrsnQ7cVpThPSGknFTgzGE/xty+rrGyHIqZMAWGASxUSTBeHSb1jbficeA85S3xef6Myvz558FBVol92iiAapf3WB+ZdcwkkigWrf4bvoH1KtzmQjWet4ENi1qJOyTaa3NdwTEG91Fm2iWVeJ/FKZFB9eRz9stXm/687dpRMEJDqni/3I0971PkmUgcYMg9QTZuSYCEIPWaNJPE/nTTjngXTegBUUkXysfj9b/eZG0Kw6heb+1gABhQnBSMdqwGSPcsGq/FAJCyTiDQbOqfb4qFb8WVHjV8gVTaPIhR2w2+t7O8BkX7tKkU6e6eqcj0WmAuTc35aTwPp6OJhCYmyAKFXU+uXKIzpU3wMUIBWScDFEhucJoNzYSOd/9jTh/Kf6CyMuGC2VqpBJahyxY4aSw7dMjX0jdSHKY4RColalFmY2nuDsfI89DoOGqZwnRMpnkTIZmVQFb6Cd8UccCr9NZ7py7fMMybUbxbGMeyJm9A72rArhqh6xKGkkGjpTh3V8PEau/GvqCGwuCcfqvA3vF6s9csocXWK8r3oLx7wYGH5ccB8adgDMEEDmmQ13E+cMoXX7LkAf55zDr4wb8ZyZmt7MEWpLXogxSenpHECZ3kUBbyFVrINYnemOmFxsMamrTi3wWLozJxZ7pqRiVjv+jxh4G622V2Zjun8p/PfxFOHAqHXXCgfHOgevFpzFrsK5kR4EJqwNyHtWMuOB9x7BmEWusVDe57WmfK5oRckNLZeJJxISsHCl3aB/k/zVqAPWItfFKoptg7XM10GgyXuaJXFvN05LhnAdgVNNS1sF9ReakeMGJYP0ouiHY4Hlo1MfjRaDovXUQNcHico8f88e6KN4zhprz3elBgVGgNfDRek3TN08NUTuhGOxGLC0nCJkq7C07F2uzmCQRp6V2bdo/AKIuegiS6fzSkhMcsYXEHcD9usWBQwytL2LG4G4gA3kTn+Bs9tVrGk6OHtJyZXB+rcBFGBaiiZS07rgwVypxJYXMP36bkk91KIm1j+mr5D7h6FJAT4reX6uZFFZsIg760HvUgyyfygKdVGfUAJ+l9m395btIEwbfWs8HGYbYpcd/Mg/MK8C65Z8KGJLqMFIjZTEyUDjogBz1yEApLmknxUvTqETSBMa0DzMKwXBtlL6LsXXkWMb8Hfw26cg5Pwzd0pmiW+ziRZjXNbieSCjv7KQ2cTGjROTXzBFzyCbeyWHViSabgMN56zyj2wIzyIcLX9hvd4EHPpCWUbZSnZ2fkqLe/Xfv9fzbg75sEO45gZv/VedYT/89kL9O2Kerd/Ij+M/aq9WX3yTl11E7Qhx7v5s5Bv+WGxNITok3vv1NEr64dbZA7TOrVy6C39CRVRn6KR8POWWT2JiePVgenCrInHGh/hpc/kmesAGgCf7Z8yiDSfZraT/fRRI56LdjFeUehWTcUVzM0XM6ofUqO8CkeU2u/E3/sx+c/zj7vcmwGsp/tJLL/q3DU1BrjfgMFQ4EvTUpOuaerVByFMSswftMCFt/uei7Xppm061O2CnV82+qmHFxk3GLAvarf9474CmjXEMPXLbeEHHVkDkE1WPulpxM+PNlqRejqstvOmg1GFZR9/NvA82pkWMvmf/byTfkTSHKFcH75Ls5oCua6/Cf8hRwYSaobIQuCuzh6IOnzkEWVZBjfaxsVb8qWIQ5Kobwo+yaJMsOlZH07GdiU1Q9j2E+jwwz6AvYkubbqAhey5cL2qwQHZmB/0sYikORh6xhY3lXqMPRvvvXx+zoL+sIVXVqDz+r35H9+m7693057nVJ13tlYSsnSOfy5FLuyvoHSk58sxiODP3l1+bFNF49u/Tha5/3UOr4SyxHqKXxGhxVoZfgfg5somu8XX96oF8Tp/LXzF2gIn2fPCM6lzSXp60k/QO/JHh71WJWe7g2tugvbiacEocp+hUKlE12gvfrCsYkFf+NV48q2jwqWBL+nZS63tFlGaKS3K9+u179ruwbK3BQnAh+WVHyzb+XbDCUg21mprjNX36hBm8dttoq+VlhS8XG3VgtqdibZKo0Du4H3D8Z4LWBfEpX+v3UT55PbvrCW1z8UeFWuX9bArD3eTQWy+cs85qlMoi9Qvl/V2Dm1G9/s8xrsudEMC1ZrtuGMu86qOSpfxWv4I8K9ybQqQnmmHJoic+y4l5fYZcZsFypdV62uPcVy1OSsC5wnYsE5xAob08F1faLAlMMyVOetlGxzVGuQgUk5p+ZzjpXcrCKWaPnWpc5KK8NKx1qhpS+I5whmOqUkHmT4V55/ip6StVe6kM1z2iy32jMiapwiVqZ55WUq0FYAk6N+uc7t4D6TJ2HkCSx22hVD0LbRfukj9BrVAsjvM6lk5ZL4LgzxI8u7ObFvmlRDYMhjlpddhT0jJZ7fsc2fxkQ1Hxe8UMtijdLPHV22TiXmRGro96orxVoio/rVBXLPzrujtExUI4pbiMzB82P9JSe2kIoaNq0mx5KUFFgSxIo0v8G+8Bsply/PcmNaxaoLjv1DyVBcbSwdln1SFb9Zmbhzysg/Y0eRuFWFGuZbS61y6MGsw2teSJxZTts9FQybyvkqWr1bEWZNNfzkhlXPOAYRpE5qnbGMns7RijYUkIJ9wxTKfe0N25m/TsPh7zdf0Wj+wH5mc9Lm0z95TS1Ut/mdhUfscTfVBQN/KcEiyNlHEjLDl9zS6kD6bgEl7Zl2A34Whbet8BlQ/ejNM4mNu2UeOowtka0DWlT8ObAyoA/C3ZtolsNdH+V5KXt2MwD3ccOH9rEeliR3pXgd0eCOrXLeKwJVOghetJSTsp43kWA9pqvpZ77m85607aRNenHt2suW8dlMtl1axHs2Z5d20FfqB/6J9zGl9i3FOyU9tPuFb4nOrOSxdfe/VW+08WO75yLoi3NWDaqQrz2yLmDy/4SSJ9ZDPLiJLZKcxbNTfhdHKz5Qyyt06KrNs0/unAbftNNtnzQ7W0X17qFXfMflRql02/spbX+YJ8l60/uWlnrF/dRXuuvTdKFYTAtZTJsfWrlwdB8jnJtOHiQbg1LD1naW/guBbyMhi//v7/iq9XkUfputfeY5WK18LWVn0aOkZ6MoyfpmXHnKcuVcfatlY/G9D3SX+SXx+yvbU+uWn+y5UP032zf/C/7N9trH1t/sQl/RffS9uCv1r+z27lu/Ue72X+yfHab3lr34mbrx1N351v1Mfo/dnvX0V+42fuzdf9RvDyIF9bpLcKQ33S50FqrGtoSaWkqqBTPvVQgGzw7KUBe8aGWV5ALCjcNfFX4M26uUFH8jOUvkK+oetmAGvFXLzuQFC8s76A6/BVLBDniNpY1yBL/ne7/B9GhjVUB5woHVhWcKS7x8z86L5Odrgd6WyaPKknpyzmxdD3TH1Xy1v/M6W9N8l6DKT5StDWMRaGHIn0GNO16Bdri+wrfww/NBZ1i1VFQSmmsSuqTzRLVJcEi99Xl0iF9JUjuQXcr+GhMgKkfI68ylj7nNw9D5aEiyrjpzNkbv9M4m4mudRFgPwTDcaG8cXYQ9KKkOu7Jhva9artyckKoSz+TrntAI9g9Sx96sdhv4CzJWZvZpHOo7rEDq19Nk9WOGSFAokdKEIPmwR3mnc78OPayYMzJgn9wIj4sZnFeTnlg/leGGVcHk8CEpgvmtpjY9ADO1e5zzly96JMB8u/AkD8x5rBAodjmy7yIfNTdiOdBvIRgTNxtRDn+2LSFdACmdadVKO8P1ym8DspecwSb94bTmE5hQ+BDnF9SrUE/kpLKP8r1pTbZXrh9fOhM98xxyhdhZzln8qeB1mYTzPjukugtXAA+m2zEdaA2aA8jNF1l0QYCHMbut0Yd2y7hL4nkoxXUffjk1PJIVYGNJXuiRXHPELXN2T8xpEj0G7ajLiRkp5dcHSF/akdpxlrgwVhCcnYMrAkVrg27l5Pq9JlCX7RMhuFE2vivTctIgz8A4LY9BtQK8oAoGY5aAOW5aJddS1qD8TixI1SAMp+kzdzPrnF1wD/Ne1fqpOqE9LZBZuNkBX+UHeOPoUfbjpHiS4gqnNDZBoFTX8bhSEJSmF9V83AJSUvMP0aFpQyfAbf9GxJHRyL5ymFV1t45dG+BqSK2czNtHATS+7O48+rM9Z1RFAsj8+y/8cXA9oSfTu0t+VGGq+0uaa0UvTxnFSNCZcPjELtv+XMYeXzLHWSJppXgKMrCVRTkUmPeG0Y7UkyuA8/nQd5bnk7ObIWVb5Jjp7EMER39kHJsZAHJ2Xlmp/Mq2zsAL2aHsDGrzsX5hb1MEbC+6hknScJySAIV6cg6JH5Z6DyqV9tdCp9D+NajTtqmooqEojK+tbxk9wD0/uzzzGXny9aQnu2mh4U3J5ZgBZknEb4OS3reLMDKexG/p1HqdbP93o1P96+BJmo0L3UJ1hDljYd3n4u83IRTOmpiwwiwyF3UmIs+VjU7uUPIdrNYQVA/vWxDeqTP53DIGVlFJM+l6jFRk33MmrmVzubnjrayzVTYf2IRWDizqOKHDyM2wwaOrktclnZppEha7IXw6mVBq2LeZzyeAHitOblGnjuATktyLj2g6u5Ho/Zq6KX+3QxowmO66rwtSfYuoQqVrDTjlPbJGhB0/SGl46MzrgzOU2RnGd4Bpg1miCj+yBNVlqItFunxZRk0j2s9u8FbkTClRI2KE+/4Qbl65YnmPa5lp3Sh4h4hUaKjEP9YdIMGBEFtRVRdNA7+pCoTNQAb7P/dOaI9+64ZqvUHRNafnCOaJ0cMTx7/3hijowem9NDr8zodZKslhcNJSFuO3HlrfQVwpNf2zc9LNCVGC3ozHcQwDMO4/TmnyYv8x6752XRH1X36Leh03R3OniUMRCpguR4hOAqR+Y/ZGxOGaJcXvb7bfu7vTuqeU6kD7NAWKk2p2S1hkuUsSbSiTrORQHr76MtoBEZU0K9TfD6memI2jRTXLkxDQUpI7KFDZFkauu/9a/4YWHeOcMphPImz5pnOzOmA7Gpm+Am2X/JBhlCGeehdrxiICosYJWmiOJHQe09eSTK3IBA5lgJT1mgW1GVpFnt+xzSFG3Lk7CEw39IkSHIB/05kBlvOhGbSPD+cqxmWLx+fvLAfpkym7QjcIQxI+HNiUZ2JS8IJ4nHvYdp4Ri++zbM2ILz7wvQ8l2F3RCSJG4+ZIZfPMJfBfQ6iFuxOA62L8aEWslI9P5ofSSDdpjeUnbVgAyz8XsOQkXpZ2CKDKWrh+zVtifkSD3OYNDt7vqHbZwgb4vTcKPrI4CiN6LphppXr5gWBVxbJodTs8QI1JTp6Rj01HWRu38V5OGvgdINwTFbxEd2HAi/9rEou2VBSjHNH1Nl7qyR9VxzfGcK47L0mjtL0ja/kXrX3Y8r8GzWhpL7KeR8rMONWUriXLYr8vk4ddhpO8UaCfEI16ulb4s39KN6s2QbpziNSbbonkvTomDB3UD+QRd56xE23HaH17uj9egqYT07CeMs8Ok9DSA7JalgO6FgL/B5J3lke38tQ0blVeGItfAIuVWJGhgtv7zMaOEs69lxCFwCGe6TNa7LRZ3f6qeFhlkOF5sVHRUm/ZMe6G196z6EWDfTkbaESf6X7NOuQS1QCgcyvKzYEDJ+9bkLeGV+UrWNPA/xn+0GTbE6zy/mb0NGhsvi4+dzBjZisFjzZEdH8uLJMRI+qL2MWkbBnrbenh0WSITKgM0liPIU9SplRC3TRuYd4KRe+Z35AIPJ27vRIXFp3KM3/HEQuyxLFRslEYLiwE+fxjkZ+uCg02g/1ByRGVI8kPZ4HXF7L0cleZzERbOTKCf0cEuTwdhqVyEBJNClVHYcvwCSBgXbf6TKnNfN3nK2HFkRgzFjV5nlZZBa9uP/sGf8mzz0IXPA0aHzX3p5tQWreWINAh23xeTSxAlNwgUpWyO+iPmCOQJoQIrJTQZEPatLJ0G3f4/hs5uXbjgjBTjoJQdYoN8NMUBR+Z35Yy392MHDOrtMTRPq7nbwj1zhDOmLQco7nuWrOTYsxfDXb/ek8vfTQgYt2uNLeRUL2903H1rlEb6PpEwvmgHPCB9eJuzQ2SHIhRVh6+WMLFuN73iWX52Y+eFWcm/+F92HGLs9kfRNIvzUEHRs8aXuCEVmF66L7NV8Rza1fCci2LdO0JIy6WW4S/NzQC11o+zFRyMc4aQ6qTYheLtwJs+l8JARnxJ8wDMMwYsdgZ/2yuwttSRotgGJm1kT0yQIIz13MwaXbwybKmaCiKcyjs5OLMXRMYLWlL69iPOBofxWJMxL8a1Y7z0I6reldBC8AP4qkhEWLOr+Y3U4ceq7o7vDMC84e8pv2X95LZzUxBQwoYnmpGwdfEbR3oAFvyDDMHAS2lHeiIROUizP5djpRVfgYokZTpibS8338BEnybSPXYUfGIELkqrirHqgSVI0lEuJGf38W2PunAyppQHYLidoAuZ5h7DnKAyqZQW6qln57qMqe1OWM98vs5zc8wqPzQZJtYiwBMpAHUkE9NCcSyBpBUPPBvVRXIWTDnlySjqZE5NVC5pmWXX9wAvzk1pYh1UZZibjFF6lhETcMk8QV/z3DJtunfyLvtbS6dvh6uFnQL/Swcg3iEEg9GRTXnEnc9wojVUqMD9bB0FpVY7V0pe2C3aYH7k8/5tKdeJs9EvOias5n4QuJWq0RcA16zcSEx1srD27ctSu+mAXIQdlmuc+a1H44ZVDa6mZkiJPl+2/OfFOP7p99JhHjiiaJTxrquOjQc+EenYS3H9xhTm2fQcdObuIw8c1G2Cp2j6Gt8Lf1tgxSzeNrfNb+c3sp3ne/REnwKjVP5h3sWub23Cu4XbQJV0hrN/Md5HsX1UH1Wcpd5yFK/YJDo/SyeKMaVWgvevWTdoMG/ukgrJRxYv/7mVytFYnHQ4EfZ4gXwBpOhMtDFCRLsHFDZiweqmW6oSqohiHg6MvjPYN+ZkvkUEPsRW7lDFH5C5lGl+l3jtofIbHjVU1TSCBqe39ZCN/k54R6VWeLrLjkhV2Dt8a0KOaEH4m5t4tUmtPbtZVlUfhXOmnQHlaOcmx8g3eN+VPoc7mfWdN+FrQ8LzAtIByCnVE3YzV6nmCr2Y08uQGd6fDDk/KcCc9mfNiJnQXE4kvaO6FDe79oyoJxN22NZXWLbQBXOuAn9D0LmGDsage6t5PEqVjOzfGxLrnixaWUW+ZzqvtaC8lBk2IpTLC2Lm4XTkxNZsdv/cUwUH9UvJPCHwcBD6caG9JDuWqX6oIXPsldqb1mPyh6vQWqOEpreV+t2ZhxznPz2hrsAE7Ln++YUDUYF38pk8ufmyaNsmJHlLP15OA3z3wf5qXyUeUwvXF+iu4CkyC08IC3UmTRr078GeBJ7CKJAoHHq3fkbVAPnWvOKP/j7DAF+pe+Snk4K/qahgqqKyxoSSy+xun1AwhLZm6LFA16gXio1NRfwFjbdveiNHZL4qT0Ap9m46EHo+MGtIa89xpgUtTBjPal81xjPYnbfhTXyBX9IABO4kLncxe0GBdlrPD1h35Y1vepTO4X4BU2q3bfSmtY1ypMNETMOK+0GT85oSKbRTOLwzAMw7fnqN8NcgdspJfttUgw0eg4IhO4ElE1gw9cR7a8hrsiACUM2NlvEnj5bMegs+KA++8/cf+dq5xS1A01mCSxZlxAtb9PeqDldxKNFwvycuhqTdFRsZWYSTW1mJn/639UP8OuxkcjPky2nNylaXhquHwUbihoKlp9Xz6A+SeG3kpxKViirv0QribBFDPnn97kmMdI/uGn4xAB7H2Z/lBiW2poxoprTtMPRFcfLjXWIYFOeaJkRuDbdAoR++Db1w94bKvBXhUbRr3lsOAJPlwGBGM/FtQjASdTDBvkcXmqsEGpEVP4cs1KxLbuWnx9p5WyBPIaRDBLnSvZwDLTEjaFghBNkddhZeRRTnG7czrpVoxHUrglTI6/LUGsvPUR8leohpiZgnMkGSgbg/HRUG5c7E0dSU1eNXaLZiiwrRoV91yjOmW1fJMuuLnSLS31TJLtCtR+6T5gynpT+0yMHELNDPCj75y5Xa8blkQxOK7FGMedavdtVL92Y5mC0rrJyCsfUL31OigQYdRYr4S+A0cyYh8nMbwMHUInMEDPFUixlGWUjjofC9Z8QML2fhTSuL3GfZEswgRIuU9g3x4nKyqj1KubpxDqcYO38WxehfX+YDPPBsJDh5oa68u6ikua4BBWSYy9dLwvLJ/Il8/373JkKocLfPPWIUluyTQGW4BNle77xDpWIHB9DuzYf5+uUrwPEU4tLmqsuMSLFR9uAJgev+G5jS9hg/Xk/t9j/vodDnjHtKyPCCm0kKFEoASROhGfwmK8ut7SKRRtfc7+tNV5xOn1eXwp+0inQtKHlbaj66Uj6nUf2kQ1hHg0NdR1avNG+n5lZP6C1o9TLVQnmr1xh/6B1YIyr8BAnfsNcaQnNomAmIDwW0DYKNNw6PDCjj615RZuh+n2ei1YSZ1AQ5Aq7d/RKkkM3xqMtafAqIibo1lo0EEor2xZuCcfTSkmAYbqmVoJ6uC6Tn4QBSkL/427CWouu5mql8scBcpFODQLeqJPoJuqhzWCZgtPlr8aIEV46zCK7pPJDX1CYuqJTc5OgNXsXRSU5GxTu4mz0cOk36HM81l49V4BYkg9ELxEdd/y02hRgM6Z4ut8MnxTpePfEBCS/MRwvLWDD+QiZTvgi56GS+w3jVNlP0Bzwe4IGA4iBwXQkHNlAzKaWuHDUf8H+UxCE19fzCcZZ7l5vxuQRzSezyXUlnpu7BoHaEwLXeOcoCA+vJ2hqhcuGQz91peNLVY2n/VHSO5qeIFxXEEIXKahv7ccuSa2AjtXstc3NX4MUiyvKCleO8fJdt1tgtprdh56a+MN9Fs1Mp0Vh0hv+XoF526MSksnlsLrIwfTYejAfHR31gWOxFz1Jke1KjAMwzAOdU0tVTm26QkRvvr/VygF9h/77Sjn780e+nmKituClZetnrZRSR1GuwTdHroZ24XCZgHCmmOqIIcGpkt1Orrij3s0zhFchPJAoeuurgFR5L9lDfalh48Hn4/PX/fwIL8Li85l50q1F859eXW6LarNRBHkE+9JHEabtvtQvXzLR+CAE612ptXAjK9WDMFidpbliZnIrYkjNr1+L1ipjPwfVyFiAPRkQhUYl6wTcWYXeS+DC1G5scn5R7FK1ckbqOCvxAb3wJD/BfGU1G6e8hNec8qxgdiykVW/WTaSOw/YSWc65Cbo7FccjoCV8kcPsB2j0xraK/rw3HqTzIO0FEpxXl2Yufx0vKkFTxZ8f3J+h2Nd1a2gqX7ATqWwDG/amJFaJT+2hhDZBF5F8S+rA1eflUuAQHdzpBRKmAsTNlMitGsmKZv+9Oxzg8y9O0rIS+Gsy+H3IuoKgHKNEm4iaci76GKLdzvKf2ID0JUg3QU8DeQxMSby4/wc/Ntj8lghEP5++vK0MctIVmm8TDVPzJ+MopEeVkiYKQeud6IBziR0GvsQbHgh1quO6/I5ldY2iE6y7eZJ2t2Pr+epVMEFRUApz4jCZUHx0j00Hlwm+a83W4NKuzkVOjHP333q4J9N5nH7sHCst7iTmK5IT7rKlh1UJJ7cnI/myozrDSHL1eu9vu0Mt9A6fD359DniNcyk4qspV3T+xVIXi/TnS2Tl4hUxH9rWeb2ixinUSUk8OfUjBxIZry11by3Aj2L8/IXBiZzwOpLaqHNYPLhcUAPRHIdoOwEFPJV4NWhoh9u9c5R/cCrwdBu/gr4zRkvh2wvWEWAtKPb3Y21A9TJJSO/CPdyjKHyda4eZazLjpsEvjVYqUFViIjbSgOUGPIl37hlnT38/iqR0cEwMkShkFrQOLqCMw2ZDkgmMc4cvtZ3BRDf1Yhwb3QibzXIhcJC4yTUumj8Y9jslUsde5wyy9fWUR19prg+fpSA3rL1l7ENmjylpm9IPxblA2mbPvvqgEBT7sc8xEh6JeQB0byV0yEEQNnOjynIpawRSjTMhrSYvprdII7Pa/EluLE+wkxGOqJrvqX58A0N0skbklqtz0LSJX+UUp1N2XE0rUQx49LALgTkDZp/IHwhZwt3ht+pcyYOVckS3bpyD3y8npZLKK4qGCPBpbAVqpaM/Cbwn46TmlRVZMY0hRVuK84ZypMsUvqwXIhHZzMt2he1xRJyYfa+VaeL6fyQo0YEOFJOg0ve1XkNF+EM2XeeF5Jodb93EA+Ss31eIQVRR+IUss9Txppkhpzy7W69jt/lH8+KQPG1gE2oa30pNQoDPuQSkIrjHdGu5x+pdlkk/g9KySlvmviTif4ihUhYbXLrK3Lb0bU18KxUq3TAQqxKsndRdX/h5FJFCjDT3ZJsUXGj+T7ZKoTvQjGQlhTTR/JesSyFWNN/JdikImtZkfRa6jiY32c0gpM80V02WBiHe0kxNdjsI/qa5NNk4CN0TTTRZfhPSGc3fTRZ7IX7QPDbZ9k3wSPPaZMNe6K5ptk223gvpmOaXRuYgxCnNvsk2O8ErzY8mW+2E7ivN0GRlJ6T3NO+brNsJ8Zzmqcl2O8GW5qXJ+iuhe02zbrKbpZB+0XxssrQU4iPNQ5PdLgW/0PxssnEpdH/RqLLcC6nQLCGLKsQnmkPItr1gT3MK2VCF7oJmE7J1FdIjzXXInIR4SXMXss0s+EHze8hWs9B9p1mFrMxCuqL5LWTdLMT/NN9CtpsFA80csn4SujVNCdnNVkhfaD6ELG2FeEfzKWS3W8F7mj9CNm6F7hlNF7L8TkivaP4JWSyE+EnzNWTbd4InmnPIhoXQ3dLsQrZeCOkFzX9ClkYR7tXZKRVlLF2US06mpRa3o4j+Up1tUtGNpYvuDyeXrMU4iih/1Nl1KnZj6cKak8ha5IuI7lyd3aWiv5SI/pyTv7MWcRDh/+rs91TcHEpEeeDkMWuxvYjoH9TZKhXpUCK6G05esxbDQUS5UWe/peL2UCJ85GS71GJ9ENGdqLNvqRgPJaI/4eSXtMJRhFGdzanIxxJRNpzssxabSUS/UWclFTGViO4bJz+yFqtJRPmmzj6kYnssER44GbIWZRLRfVBnn1IxTCWi/8DJ+6xFN4nwX3X2RyrWU4koR5w8ZS12k4j+SJ11qXBduujecPKSteivRZQ36uyfVGxWpQs/OVlnLW5WIrrf6uxrKlar0kX/m5OPWYu0EuG7OjunoqxKF+WOk4esxe1KRH+nznap6Fali+4/Tn5mLcaViPKfmP0nKXar0gUcVUZBytI46hkNpLRwdGSkSVkyRzeMVk1KB44+M+qalOWKo8Sor1I6cfSFUQopy8TRLaMxpNTRtJT1G6HrafIiuxmFdE9zlTKkUJkEg9Sk0DMZGFikcGSiGaRBCjdMVs3AQQqfmXTNIC2lkJj01cBJCl+YpDBIWyncMhnDwEYK90wiDdJBCiOTIQ36VXlK6xOHoo19Mg2l7ValTZuU03NMWq6G+t9B2599x4fzyL8vxs7y98W7V338n6wtt/VTa7Xrs148yb7Ow339K6ahxLv1xfbT+tPuc33dw/pxwstv6Du5Wl3Mf3d82l//fXFz+tdB593/XPJT63azX1R2/VdtkvXzSI3cJR2afqtiuu43/mswxeixU1CGCstSgRvzIrPIhXvYOfvPjwns3bA89hjKHwObzYhO+AfAGXXQDr1Nd03YmZzVdEplzo3THXDlVD0EnOYcnawjAYOwvVHdXb7lz59qpXEpJY/+KklV1UbQyboDrosXHG7dkY0f+G/Jb+QeuPYNS1C7vTD8je5CJK9x0xTJjM49rx/bYrG+3O+pSlHSDzST5aiG2KjsG8oaGJrTTAlP2o/xjPVVniqPzVVmVey0qsedxoK6xYnymycciNzpUnDxjt5d/nXeN+thMcBNVJLnXfeDcHyZ2n4dGRvLIvpWd3f/+mmO+78O7/O30eVzz+Eu1enywB+fzmsQkp9PquuW8FpN5eAmTWeqqYEjTX/vcJ8gQ1atllaiY0L1Ake0CnXfVA6vTuJ4e29Z8ESpLch0LHD+7bvowk6q+sWDdDCmF3GwSR/1G9NSXoyjlt2LzegqhaoTO/0Gv+u9Sr8C9CA7CEYX987IUyUgWxNDyJPlvfTKZq94OpvXImMn9t8B//vki6g2UYpV1aIr9KlFn7TaqVFKq1nN0usP7qTRwGdAJDSFxChf8Z2heZAmKw7SbBUepb1V+iqlkSdpoUqs1HHX//KHFMMx3ZXHFeZE3iAmescz5AOig9f2LeEMzlwsy9lacheJXSWvEnA12y/TSXC+4Xf8vwW0c0h1rJU4bWh7lANCw/OAfIe4o3esyJ8QJQxxfy+Nm7MkNoG2QHliX3KBeUYuiOuGVpFnRK047yVjh1gn2oTylSk9GzGvkHeI26Zv0wfkr4gu8bpE7hDDgnlE+YtacsT8FrlvPnVno36Z7pGPjegHnKtUxy6J0wHtM8p3hIznDrk24mPoHTfInxtR9njdSrGJJDZ7tGOUZ9yVxxHzD+SbRtwE2hnycyPqG84LyViCWO/Q3utl3Jc/I+bnyLeNmFJfpzfIXxrR7fB6QE6NGA6YT1FOqCVnzB+Rx0ZcpcHTPfL3RvRLnCdpGE+TOF2i/UL5jXCF59fI9424SwdHyFMlSjXE514axk0Sm4r2iJJNLbnH/Ak5V+J6QCvILYja4/xZMpZGrGe0K5S5uS9/Dpj/R95W4nbQ1+kC+TGIbsbrE3IEMZwwv0RZNbVkYH6HPITayaku0wPyUxD9FuczqY59EKdbtC8oPxphwvMaeR/Ex73ecUB+CKIs8HotxWa7EJsF2guU581deZww/0ReB3GzR3uF/BJEfYfzsWS0EOsR7VLa5iXdl6cR8x/kTRLTTl+nc+RDEt2I16/IFmLYYO5R/m9qyQnzDfIqiaudwVOP/C2J/oDze2kY60KcHtAeUH42wgXP58h3Sdzt9I5r5E9JlEnVSONmTGIzoR2h/Gn2JVeYvyGXJK6XaBvkOYl6xPmXZOyCWK/Q7lC+NVN6PmL+D3mXxO1S36Yb5K9JdCu8/oXcJTFcY36D8l+TVhaYA7lnis2ob9Md8hHRw7lIxq4Rp9Aayj4I8Ay5Ij5WveMp8mdEaXi9kMbN64XYNLQlyiLsy2PFvEe+QdxUtAH5GVEbzo+SsSDWgbaVtvkq3ZenA+YF8i1imvV1eoX8BdEFXr8jJ8RQMVeU41BLNswT8oi4mg2eLpG/I/rE+UoaxnUSp4l2QPkVhAXPI/I94m7WO/bIUyPKYIjP99K4GRZiM6A9oTyGfckD5s/IuRHXW7QOuTWiZpy/SMaSxHqPdo3yJUxpMWI+Rt424narb9Ml8mMjuj1enyFHI4Y3zGcoL0ItucX8HnloRaBfpj/IT43odzi/kurYJ3G6Q/uK8hCEA55PkfeN+LjQO75EfmhEWeL1VorNLonNEu0vlKNwVx4PmH8hrxtxs0B7jfzSiHqF84sO4FS4+D582eaWRzGjUHOv6lOauRIzCvNcmvNdOuWlmFF8tv4SAu9gm2fNfBEOWQvTPFjktpkXYg7CIifCu7xq5vJadpTG2RhzL23Sy5mkw3xwyEkzD9KUc+kyR6ZnH3IkZyVN+S0ds2nmTs5KWs2dVX5L13kj/zArvSlJ01qt9+WiWuU21VSHEr6UqP0Q74q0WJvUEqOVKZljGKpjqbXVti3Sfq2292lXVRPJoHkou5rqsv0iHdb27SLFZBXbVD5th114KnXdqqmX2lodt+myGk1pLMPQh8dS62bdPiS9AVWq+gZNSoWDaAYuEhs2uhBcUe30YzthHRdVNPu6rwbf5etkwPEz+mrXfar7WsezkhKn80gidudYc7iAfl/3+tXjSbUe6uGz+Iefypw9/dxkoSldBgQ9U5Z0/NdCZN3oxyPAHetIp2tQno6lnVS+f1xm9LbQb8FZfE3fRb6JBm3k6C+oB8aHZNNWCZMhqLTeh9DeLQ13tR/e/1pVlneLnOK8r2xpRCmLv1Zgsa7fnSwozp5IC4Z8zf2dsdXVypv8Mn+t2PQVd5/xO7DZF5gViJwDuaLbsCxugwQwqlNOzNbge3JekNH/Rw7fwXP5g7O/VxZ56DeYJWeHVHf9wvYcwhIfk5H9d9X+pPY6qGA8ZtQ8QeHZIFI6zLF4TDd5IUllFy47muViChc8kzcGTe2WQ2S5ZFEfaJP7yGDfVRleKxgdlj1sheGwxfIeV6hn59WtjRXrMwsUOTpLpDhMGTZSNvPkdVimuce76my9DugfVkCeju/piT6C7xVWhKmuTTnMJ/avjVyuRrKep72zY1kglng6VZe+iTrhINDJ9zLuqd80Xon65qdzfuli+Ij3zV8uToH53eVpOIH3fBt1aONkOO9IbQ2t9DLAcj7cUTNLVfgcFkn+Zlg4v6vi6IHo+Ptbhwz+MEd/6DToRX/xgPIQMn6FJXqvjty7SvyB1bzndwI9HWOZOQHS9W8Wan4fuQXD4E74AyvXz38j87ipfVXYrQoWVN4TrXdjbTrB/eaqfGAh6gf7jfLphSAGoSt/SveRMszuiwWMjnlkLYvjsOO5v88tSZAOgQqGBp/cyHYo6STNEqs9qg+xBVf5RLWeF+A397EkVXXGZYc8GrMxRRxzIoinRrm6LEb9tl3t4apTj/AqDJZeivlfjvA4/w93E3PqUian37kf8WiOID55Czoh17MaCwa5cAqQ9yOdmIpK5qnzWKCAesU+uFxBa72e+NVlvOLL5Sku3QVPCZ6Px/Ros16dUmfgobpymAyMDope45IPl9plU2ZrvWKLm8JTUzoMqqmulwbiUu65JWJUXE9eKl0KUp06R6+bbo/9olk/grI1j76N75GHrOiXhj4WyJ6c0GX4Rg7cGTNyEjCr3Vx8VlXlbjZC88HlumV0xyzwyejpV6gAF1envXW8KJEVOuQV5ifOHPwvvXhuHsQ+YDhZipNLx51qDwRp4dcm3WjoG4ebqBJCZ72VXD7V6hpULpoKUVslhMUTIvj9wST16rqpyQ2ioR/NFhCu7bGJefTgBiEHxQP5zRkj+VZRg76hBKrCXkrycMjuC0BykhX7UY2iCP220aMSyJdhhl2Xsr9EFisl7arc4SNsqAiYbRSacGeQSYOh6kVFSLJ6509BRQSjjThKTnHZuYna1ZGizrMHzA4BEOrUOEgfFZBsznsiHPGNVa1IuiJ7LxXLVdFFRX2VbWQ/kjJqxM+n/m6d9aRec2J1yHfkUUtuiR2WrA5SDh6V1w38r+I/Kp4VYR/M96ASm/rnnej0UK5vFNhzV+QphKdTyINEj3tHMDMtS/wZM5wvDSSB59wr/R/eFA+93xqSsXvXpDNaCe/Jec8pxn+zTu+rkixsgdGSsKejxCjxPN+J/jZytw57K0k+rXrvw2vhOpnzHR66jXJnLW5cAm+zlP73ibKQGEVH20xyGYU9FPfLTLMeTzSHNwqN6C1RfFWSoIRUaRMIK5WkYvz29ThD4XEAFVrjpg2IpfDArCSEzo/j3FnURajtyzuz7pYkTZltQhECG/mzk6mGjdHmJ1XhqlqvPUv1oBIbtEtL3OrISVXJ2LiBaIyTD8/OQUTFWY+b3ns1u1FSbRZHY/nQCflxAxSLUSsQHjkgz+rXGzqUv7I5UFfOeYB/heOMOkTO7uxOPmB3lg2EvxUq20/anZ89roMivDn8ieHaHwg6/AWVxhandW4O3Jkj+m/CgVPpq+D4P1wNsdswbJIHNti7WNiULt+72odn0Kev32x/LWuwnhGNnQyyumUpB1Co2PXGN1+H8AkavbtLG+2HFe3tdDrNWzBkbTY6QDnyNS70y9UVj1V9QtgQmecmTGxT2adldMuzLaWoAC56zbmQ/lMnOKdfzKgOOri8C9FFHufroojyjLyWgyv3eHSLxBI4VxJwGIlPV6rA3C0XX+5m82cvf7RfPrVJxsioKaUsTEWNOB6mCNoVofbEWDfb0GZPqY/XvF1I7MRiAYP6jwtm67/tg0lkonYaswik/OV/hswlrJZCQOIiSX+KD23DPqTUzLYs/5BnLRXh8hiDaSzFxVaCm0tgdpaPnskbbzbqSnYFrBq04w1PSB72VfmRWrONDGHalIV5k2V3U0uj5a1q/utasI0udNJD4Vx+LtSVwsHaxYDYj9KnqqWr3soHQODdki3Xepwx4aBowmz/wCaBKfr/aZKOXgyd7bMN2kNv/TetzDz1DVj4QQZKB/4s+bOgl75FSpBliBFjqKuvJ3d50lRsfSOoNf7Ml5/DjpBezB2UXcqzCtSVWyl/+928EECw4z/hJZ0+gPH8CUn1ImiZE6LQ27+f+v/WY9uRVU5H8wqgn1ya6wshvcc5T0M8VBHnvL4w7/VY5x9PJnT1EKqOJ83eMstNyr70Ne3JvaqtNnhVZMZTMCAMm3PeFPR5WnRPPoOha6acV5pkFKbh+O+wL3i8WdL104l4lzaWbaK42DtCPo9PIWF7qmW5U5vOmwvo4L3XBvlij0DZi9j8a6TB5UhTN1/8ur39VIjvaK+9oq1uArOdZPqK9Mlz9IC5WPd4fqqgt7vnQ1CQsTXTYq8qUE8yhyJ0+ckdidVDaGORf0xkQiy/bNzYNd71AYnWOw9/osb74Ak/co1Vf4Yr/SteVVfNbvOmGHSeeHsaxKdnfAplafxJGWVFFhRc+/nOTERoN3/OyHK6zcfBbBqxHhaFFdJdpYUBYDI4Qr2if8PP2vkQm/fNB9OedEhr1mxDvcE2z+FLgqf93ERxUwJ8Ja/yNflPgbDueQQmI9ds75BNkOaSlD5ZAzWgYsc5JdSE4Ta72h1OM27i1kcrZz34C60Nfra73nWAPs4KKK+vmxsZHfTLEjixp5F4W7fiN/8DC7O2vMqc9txwGU1ctDyYS7FwohRHvsy4nJ/kyqRFWwebJPsOJyHV1GJJbRanefHfxrm3dL4QaUUW/e/VTW/70+n36onEn16gm6F7TrrYOahKD2Ym5fgvQ2TmUqL0Qryny7/IWNfs6z8FLKQPEab6ua2SBZc9qtuNIMsEytFn5zSb27vyno+364li9aMe+fru1O9eQx/+WAMmcKo5zScFe69IFcTMKMuGzscT7abfCpHfzwVh10v3pvu6hZx128mj4sCfjzn9yU3ZLwyIS/X2AQv/69NSvd8KWjb5j3X7fT0NLUj/U2JLbn2C+B3VewXdjZBm5eo2/PaFxKe7Db+1oKxBRBSUKz6T4ExZ8fV/WtvCd5pNXZq6qIwN5fIOfaZm1Kufj+RR37j9Jn5D47kibIwnTXL4s1FtKmMo2G9f5c78KfrEC1WcgOsrY4Ew05BU8fCahLkZAQIva2QrbacHYkll83j4ldYdwNHIXK2kQdgPLT3sdmp4kcnbya7E9/j8/5qG7bf+Z23WPjhWg6kygvNSkrX4M+/tYrJRXcaJL/0Z7Hwo7bUn0QDfMrNj2aF3g7bINslD/0ZEuEwg4Ubp5Wsu2CbMDUC5zeviHmZXL835MDMvS6VNdCrRiZ5dAhKYIb8mZOy8hb2u1mDW0FwS1u2hddl5n3GtiMWrU/i1Xov6cKqVy5qUykyS1obdUW9mqHrHtsDlnknmnXnqHOOXbKnc3SVJUsrl5YOLbNKUKxPLrf/CTNwARrW+uxpnE26EwVcP1nzc52c1Z+yuF3KyudP0bqRFBxhvXn7krakzC+UbDutbB9nkxe9sN9TOV8ne3Ym8XZ4ygs4OSd9uhVXStT2WUmYrMolb2+dKkFohWSn+2gGVXO7Asm7MkPcd5icz3VDNP4oWo40l8T3HadDd+k7itMX6Tn2/95OadpMzvo0hbHb+exe9XK5dcq9HlZdXneHgd/7Zy1W6u/yv57vX8mfU4U3euTFmyC88dD+llw0tBT650P0mBrA+kT70VbeTXzyKMKvhdVDt4banSnrfIsjqUtyeKhH2nxOhmb8vjt9REWy7frAt7Lh5HTz6G94yxxmkGaZqrqWGMYneRxmKq00LDrsLA4bc8LxgFSinP7RItBDKFftYfb57UHlg30/7iyLTi/M+r5e9ERb474zhb3jNaY2UfxLbpB/le9Zs3JJGfPRZfOITn7i8T8Lhu+H3y9+XnDHlU5QnNzo66IjSpTCJPp1OWDuvdbfSJMYrIqxI8EvVKHw8lKNeuBaugG1nn3Vek40/WQfubD7ImqKQOKc959+oh0saVy/a51smKn6+8TkAdqgC6K+rN6/cu1jSr35kCrSyVywXSmgL98jPvu+gh6ofSCzQ8t5oB/yY0uwr7m6h481Lhy+ofBx8r+X4aXc9xvNxVaJxij6UTjaYd07E4c/v+yY5yRWkXGXuf2seuyuVlGw85EiRe7LhPIp5UhwuhUoEvH+ze37wR1s5G3wKquC0fqRzJKHILFU5qUPJVgocvQpeG3iD2WMVN3Ve4iHeAGi1N0upwdsfRgFNC41GFhKJIF9YEJ8I4rInZYgUskMYy53i4pyC63j4wIxm1oIfUnilEBWxhRTpypF05ld/NF3165ofhZKxgqasEraN9d0xIWmBtBmJ1SPziyBkcSIBo6PxsyFpbgMQ5VPvCDF6Y8VzhLoLQQXI1MmHYO8jzm3ccXYjIsrtPgbXZ3B6PzNP48ddRAgqck+8mzOEef9w4uJdCG4TIsqnZh7BmLpLiWCfSjBXvudQ1wj3SQk3jdtMXAj2yY5a2b5dJiLj7z53y2m5rAjB/kIOnbfVsl24Dyh2y7fpcvvIQNirBT0x+w517+OCBnmpxm55EOEvmGzU22J1ERrV/XDZdRDg8o7EOY4Ljl5ERck/5ysrW4YL936x84xtWKZzeYfAz/zFQJflI4OauMNeau7jtIsLSvDpUDlfl9uFe8eXct1Q9UzXgygvMBAe0xXLE8dFfRQlXl9cCmv/s12pWz2E+gvixcepU+sgOOxbiq10NpLY7cIy8vHDL49sQ22aY5PQ1YkTDOxRH+n89Prii/OMINYs5MlHSKGxQTlGSfNl/pG2rBbhAurzz/BdAEuIA/ApEXLQo+wwMfg5Ty4+x3IzxYD46zEbWh5xSjoNi+NF6oZYzsutm17VQlWoiOtjSSsCvHL0v/NUoqWU8IXcDXK/61TMY0b6V4ENJZk2aJHXqu3fOa8X9BCBvFoPMIHoZpx4vhvW+06/HUpOYV7lE3GLCijRJ096KUZPSqX8qtFXYZOkHnAvHxGxAdwKEpAkubQfXKiapflnNeRAhe8wd/09n6tggv3uC3Gv4YsBK6YJLziQiSCpeThRJWOzosm4n/6wf/D1DN2VdqkjDgEZ0EUNTuWT8TGlJSiMPoxlSzPGVpKp9EHMSiL/owlGUH+3SfYl1Sz+fewG/MagklV+eGUcHojBNXqKEQQkSpkvxF1Dd8IjKciC04s4J2QkqH2Gbua8LxCyseHtQdK2pgzj5ZTFxwOuLFlpcsATyJHImTLTU3WxcDsR7nE7L+bOV0qpc/nb44ORnGyOOx4BMvlAJZDG4cfQj7wz16We4t7z9Z1aNnsPTs+y2dAB7l0V9l9yMihmJsHGN+6xUDhzv02oYBone115RfkjsWPuC76nHUcRfj3O31xeTtWIjU/1jjMfiLcoa/IX+ZO3486JbVHm0Kll77vauV1+2VPx0A9p3HuK5UD35p94c4peXv7AFxNnthp0PzcrSeNdt/ZFotlyu5c9TafAH3TONkwgk5eWoaJV5qzfGbpT8i7VF5Df3zz+HkCFzZZLXvqsk958o5Sic0sZHazms5Ar56CZOO8gV67UWIvzVzaeQ+nQPe+k6GNbB+g4OC+OXE2KgJUjdMy8gOAC3TwWkj8/4ORNzbYgobOT4b8H5Xy6IhMPPDl3/Hoqm69k5xmpsQL2zSxK2CmsqRfvnpoG4qk3fp3WvCzPmIsKnHdZZEaLZRtcHF5I19BkeMY/Nozyr+qatPfpyAIV6oSSzlNxAbVTEwP2KiV629Wlb4l6OZUs0pAtw06sQH8hNgube0zzJva33wmGPviU/Vtjig1Wj/ayff4tErIAPyR35b0X6fIDa2NY5kktDh05+M0ySXAA1AIAtiDZ+lYORQMeFRQLy6uS897QUpa3CDoLeO7i1HKPFgxac81/lYIqqGhODAml7fIhK5K+TZ+tp202Saq5b8lh72QYEpNjfG1f/ARux493lR0LiDI13YS3C2ARVVwzVCtAs8ceWPkdFWOCVn5re9FnRkgwgAWyO7NobiozR5t8UpyYVcZVTDpPwEkGjDaOCKQ6FuyXpf2DimA0lznN4Sb0SgFo3CcD5WL1h7O+/EjQ+x7+k4xIsQnb6AGtn83PYz0HpT1/wqYYkixT1DjA3fjMwU+Z9E5dbIad0PJ81iM+w2HOkdKuYhzuh8B+5OqM8a+M+1/mE7T1Gojl6/11LgVGIodkSGQnnU9J6SUsCiwyJNPIj+Z3+wvqA31mZB6goJhJVBSJwBGyDfSJ1kfxwJV9gzD6/L0FyMEKqSY1g6aE0sEp2JC9DJZRx1wJZGnpJa5KfziZ6sLfZAc7iw9zDl1Wp4c05NrkD4QPPXoMQDpYUgCPRX4cGMEZ/jqAzVfzSJ1YjpfPFcLLWE5DunnZTFb8U0XQIVnr7vTuzFAdWOqwSjPgzsF9NUwlYuQ1UQd6BO0IcY9kdbQ3JSvGYMtEiByz5elNV7dlMvubYR/ppQcIaylMtzpHt/oJTTXwPoB5gMt7IXfmUUS6OL2ixgOhO3dlDg7PfhQ5jRpNo09RZyLbUbsTI2opMQJy4e/rQJpXyTMtX10ULAN5FKlH3DKRYontRE+NlwhMBLptTMU3wRZiC3auoq6Gpd0qkFJfFjJz0Pv1nL1eq8HUe2JoQ5w/UKvp3i9KS9gfWWo7hvuRLuXo0Z4RcQi2K3vIwDfOdrIx43iu28jdwohdH5hIYXx8/+IgAApvykRbGJ949FAztDNKk5o+7TNxDf1dfLj+4KLTAtzQDmOXMbEMHdf5pouqSKIglu8Jk/GZZBLyNY2O59RvXqTmqO+lUwTz20C+hP3MRJZCVItEl5kk0avDDAQ/Yo2DNpAUE3npZxrvjKbg6WFtrnmeuDshhrEJVkOw0Qp2yIHlatMDpXVbnxpqcBIhVF2xGI158aPHVBzwYwJUEP7BcfFlK+IRoiC/coBSxTU2SjuFyeDYADm4lhdQo1F64kkpYWns3c2VfRE0FqRXA3KKZKOvBaN3iaCYDJqmYlYWjkZOwC/IAkGB70h2XB4fCnL3PmcQog/1AsDqoLwxiBTmsFgkInVn5meCyLKf1TEqTXq+IzPKntQABSlpM+XhFSdyzJ4fpMiYioTmhdKJT+Dgja1Lnt5bfgQqgzUv46Bjo8Bhyv8bH9Uhb3U/Mo553FQ1ZY4V4EBEtzTChY6CSkk5x9QVV4ZHb3SnF0nUzkeiod8jCu7AAPCJT/sk+Y1G4lEsSZVXP+W9u9Eeavp9lfcaUC9zzyjscAZEgsz9YeA7xwlQ8fIp8TI0z2DJkJvvvHLNhOkjlOv2YcJVgZ4PzOa4ySIBFl1ibuJK1sWoJXhGUy4a0oRele+woXHn52c3B6CYzTAMg+cV4YGgbgSeEGxqJEh6wpgw9VAu9ZlbiJQdSgaIajyPUJDmW8tZWRWEC4mwydCXCOwbeQg1ROhpKO3ZVeLCtWWHLW7v4xw5ncRbZK8rKkFW1dmYlwFl9qBi6EuwY5QWTxBzKgfvmqqLTIlHZapuyvMLvahQSuhyvIBojHZqeSyOFQaTBrLLbwJLYaMiBcxU1EgojbCA32A242qvi8G0aVIJSkXGBzQuHDsjRMs2QuIdlRlYmsFXex4GIIg03AXifr1QMQYSMdPC09ozP+1OCwjjI7Trok+3Ladu9l7GDDqSt3jKqKx3/VTkLxaWOMlszb+yt9/id/nq/FPLCzMtglHIlgb6LN60PuW/M6oEEcyzKMPsDAMSQnzhSoMvzYYZBjRg2Lj5Go1n4MWbijW4Joy94DuCBwyICzreIiGd/CxKE2CB1AuaYse0CnXtCO8KuCc8fQfjZgWxJoiTIodjpFv+0NZ/lDGvL3xdudFEDH9z+61ruAOOwqqrzzheJ1vtAAueX2Wg8Q4D3PQXI5bLtVP/GWEdNGEUFbY6pqrFS00NKoCzPcW/DVNZXD4h++ronc8AIBPa1o7TVxmTNC903ODZzgSlk3Kb59ksNhfyrebXZ3lwgqgjmfTM+fG38NfYfEAPeWn5mbOoZdHq3nnH6HX9H9osB4NrmJh4DTHnZj8EfoNtrt+rPEA19PzM4DvJ5qa8AJf/Fi3Va4ZtLnUX/bI5/cS/UzoemUi+2ruPsMfIu8OwwyDtrSnSdBFFoBIN1mYmEPts/i1wU3qJqJunIWMtZADN0klI81OITS9MZt/b57dHbqii2TZ3uKFc45y7mvu1vC7uzw00aILAPeK8/n5ZsQXIOb6meUdQmVlRucAZJYXZ6gURjViS4he0/s+Tp1tAkfZR8IUyMy8lzxYKEd6LixK7mTES2QSgC5VQQ0NjHlVXk/Fs8EyijYUrBtTnBI4HF7ziCvjG2Vn5gTSLQN0eWyc6g0maVQGFcZqOsfElC6mGoXhwYIxrIl80PigXG5C/iwm/rnaSVVi4Tc/PKGhQhnRP0AhF9NzGPCcCMZzE9HYfhrqHinXsqFz49PU2y98NrQmXdRINiy3YpgaR7EfV/+Vo0tZsq+pe3IAD/8Ixj52Tk6dDnl8nr56+H55/oCu++PXyw/PUPzzzfniQBFbBhj0Je/vgygdXTSfX9za59U4QDmTxw+/mjV+p/divGPbe8UKPO2fgK50SD17Ck5UKi8a0/3Ln8/mIrMdB8EL7HWGpLlQ+ewZG/WGweRCDH7xTgW3M8Ban59Kmtf/bLR8YwC5kMG24Hmw2XA7Gc7da408yFjxFkJIMpwjuMCdXxl9I5iOwIsbkmR4hZsj/O/+86HGcCuOLfjTOhUl7cfSzR8Ty7f8uic/AXStMpnnsn8fhEQNcovPjZTkcSmX098QJ7ttHhR9fnT8NMjM80pGaiaCh/T158ei+2vEyUF2z0dDoMt2D5agGr4SUU4A+/c4NbwYjHRy+/QsvLwt19xIg1vuU5rg8TJTuHeDDEM82J0ZR2HE3o4ArhfqlUATRpdBynis5apHMOXOsDJ0PSmUKgaw2MLfve+kb2GnR49033uDuWoTLlkUQRWzB9RCmsJF9XCQnZ9wtsmu4ZOe8S3+RZixOEXfkLSo1VAu+dDSyJJHAbi//kIipIFfgLOrTZF5TJU+qGkX9kZ9qkg0CrTTAFK9nC1vwxOHfzM+aHUUYdDoLL87XZ1Mx/AA35vzGC7HmJ3NI/88CWQ2dEzjR4VGFJAUbRCe/IH6s1+4E1Xd9dolk+JPzhZ+5p661yId3fMx4n4UoVZGPsdgvd4pmPhMcuI0IqijrJ1zGrYgBvCZ828dA189OhMkBc7Ub0yziwf4r410Tq2GWZCKT76aot7j+irFk9aZDqodX+mWCXsdI99BjfyiT8Wad+4SuZW23R2xU0+0GXhkIKowllUr3M30Jk30YzWbQaUfRZafH8xQeJtz6wK6oZZLNhzki4tJYgRSvLYCjDQAAAEFo6jQcU7HvARrKghjLNumpdva0Ghns8VmdM8OE+eoZHAIxHXXxpZCGGX4WebsOrOCgIOdpYPL/13gNQzcXdrJDlpu0uX5sJyRrgbaUVBkX+TWb5oMsWGjd5LL9+vxuTFl7AUimpnkRwmYlchSBMY0cXMEecGFnmY1hx9ae1NSMBguFZqY1YOnQLl2Xav4ILEYGyog6yvAzDpnrisLeeL4pPLkupnJbcTyfi000yT7wp0i+U3VVT9mKJD4zczOaTFgdtm946imuhdGOp90iAguJjNXV/FcYYYBoUaW1sV4u/6VMSDaUxV9snqo5R3c+WKnUeKHkAhmnxeQmQZ5H74x2bRIxMN+0Tqa6VIWYv5U4Y46fV6GmhR8dqHL000hvbGgn5cILujZWYIBv9VArjxMrLe854aekcKJR0js3aEXuBdPMj0wDAKnOom/kAyv03m59kM6fU+p/qOdYb+80FImA7MCsB5grm48GkLiZhYX6jTt9TL1wTFENqIRiQvCPcVhNs1lxx/iMy/YTnpQlQGfazTHxJGwn31pq7h1tJiRWwdDCJ0zpy+ug4k+cmo9AXSCal/k2FlqHarS8k2WVdKm8vBEqNgPzC9V4WTx3k33efgJz++qLOeGeh6Oam83L+YEqjfh7m/YJM5D8MGsVfQJwKv6h2cpAM3nsyVdlMDq1S+2LmZVO8jIgHIDmJeRJGYN4HTMqgjPuwkdteJap+0GcWQkhsIvFh3z4jtXX9w4rT+D3FxaMX0iHoG9dQ0q4yG/Rq2p8TaqFJqoUM5X0K+wZiiPmeA5sQfBsxJjF2ThS9KmTr768BJZAgrKwCpnrKj4Udl2jLw6qu3c9PgnC7X4e7U1bf43zqg3zFfSM7MbvH2pn5duuUPMoVL0QbpgwcyZ4/oUJ5Re2Y57ciZuMj/0YvpITcHVfhOfv+fnUhQ3dOopGzC0/1FWw6OF1NQFe5uuroko3ter7ylhOHpRqH99E9z77nJ1lO59GmcEmuicd0RqyGWF8QZr5LWdB5Zmc1hN2r8GZgYFiWhEyQ5MVbM0rKELUjHnlBClYcsQDFuhRMOpwPTUtwNiH+BsF0KhwiADw9RAnTNsUVZqvrjCMVCjrBbpjjG5cVkC6L0K6qEvLkM54SVn3pB0dUJpin/c0qFmfqxLWsjhrQEAVg8zjer6u8/zzKA4OFO1meupg9vGbsEVHGDV+l1RczTn3kya+yCTTl4Qbz4N00dHnK8PlZCjTYxQuGJ1QAYQCswxuy1CJpgM1knva0Gsdk+ePa2xLiinuviofYVhqrHJphPNN5ZevsImFRK7+tJfWRqk498/ay5kDp8TgT2JDva8VV1cYVybc7raqPRZxhXn1zavgQuqhPKjhIuiLGj7a5PvThbzcZwX4dzTUHlqVaf/I4Fst3s3kvpkJq3T4KU6thNiZx1dZb9/RMPSFEVQh+PSRJvbOoiJE+VLd0Q/d5rb4YZN3nqQ5nWdcR14iZ4iYGEiHQAqMHFfntOvIfVbfZkQQvsKEBiOhEqLAZFqN88sJeUh+AV1u7R5Tz0BW0eEwnCpOiLu/GCyAH1g4pYQlpKpqKAbJhipYRJBBUAekzMxbUxjGbYVbSLjXV+FBfggxHPcoKg0iE0YheVZgnvsp/ljzsexyZ0Cc6LkChHMx/PN1/H1xmtmH3vc81OW0PmyCdrBt8xoLXBcDVT9TqNFzrQ9IQ/kikOYFSP1DKS/pdDYqHL0OV+WRYrGBDGZk5aBn8JEkMZCO7HLrrtu5ohv2abXUWPFwGQrB5uvEhZoOJEmj+fGrgkNKh/nktIRnoUCzBnsh3RsPv0o7xFGoXB0NA4jEIJepbPUEFw6JyybNj4FmFWv7DvYr+EN3ZzI6Alpd/l9wRpwx3WkbrSZiBnuR4QJOdhhVvoNKRTMSgC724MKE0eO0+K+F7R1d1gpNOZSryYrpC3/u9Zp/ATq2z9ze22RlIKhHNPhb1TV+LUGsG/WICmzbDjKxRtwjigedGbsSRo96hH5wQ9SF3c39CgVrMmjH9of63vmMLCZl2L3F+lW/1dHnKBC4JZHpIslXdmBCbsO4d9y2YV+nWQ8mf+GESpz3kInEFy++2mIDzcdoZCcN2WXSfOOgSgMikI29phx7Cu9ROc4Xt4CTWQLgkV2ONYMcmq/xVJbIQlM1tvXKZF8RediPMlVfeZDoOF37jTD41FMP2FQnlPXyO/gzN5wd0SNRwAYqFHTSV/ebG9xbanGXryjJMYVAJlNt4eVBc/soVn50a9qG9IfG+HASLzXX2fDArCpaU8Q4/p6MNUoBn1F72EoLyaeERVh9GRk8bqz/omb8/5tOc/Jtl81LR96JSBmcJJKDdr01WlHk3YjRuADFnFKJNhmNvLXdlE5r1oPP2/e+kX3kxMfu4Wx7yv5kE2bRve8u2nNv4j1xe2rxuAgG0tKJ/BkYe2xSA8fnFcig2ZzKPdsd1wFHeKV1btG+tOV3Xo8DNFtS4EXjBseCGfkWYXXweKU4atgU6xLLnqHA0gdGEeMPNsKA1znMoVEQPaOwlvtz1sodxn7zVmwm+tBqxHJmWYUY1d1DI9rhaF2vEY6qmOi4zBsBL4zvX/eVJ0jQ60RYaZVUsviw1XfvxYb/z5kKj4QQq/JWHT5o0dB4dkbo8ZUQwNngRiN76aFnHLEVDWyuxCtU8TiKskWg5HWHgJOh8qmQTuz4wOby9AS5Nd+RVqu0dZVp8L70eZPEzfGHeogsXXr//ZNPVbt0rjCTxL4trc7SjTC2SY1zw0I75k+VI9QNxgmmV7Tu6Ytj75OvpuNPEMxZXcFMMQ7uCay1OXP9oUFGjF2JT8KF2vNmV8WDc+UZi5Xl9x/Pxl+UAr32c1LdXg+150vHAs5vLGhP1eQgrhCC7zFUBx6ts4OABmnxyLK7+wDfnBo9p2N6xFpUtB47MHmQg66+Smdocxi8NLWc0XqMuE7zAIW3PZlQmCdQzAgTFJX+RC+weaVsnh1I2gw/v9103b/jgXz/xQxmktY4knWj8pgbtHUPa32WRAJ+8XrOTl6TfBTPgOAtSgYfxvNf9ZTPLP1bSvH1t3CCwbDv9aVrx97k9RYlE5e/0uTjqEbjEiu7uuC5kApM4AwDMXL4gbsTQyUv4IWBBDhsbyBEk+CnoenbiLmp37S+GOifjsJvEL81/F3/h9msXDMJzZMhSkyHofxYoFYaQMP34PQPjMTinZ4GW5c2bIL9u7Irf7huylSBZHTI/20tPctScdbS5ZkYeRgGpq78bGrRhbucR1ERw3tyJGTIr5+Cv8kQWoYTAim4B0v3fgGcJ0MMHn8pKfbhgA2zinhlvdz0Ga2EAt3evfDmt5T5jjLEDEGYDEtkcshDY6TkEl50cROpl31hdJI6j5dEp87w4OHR5jBSHqZf6TAGV/bbKTIyN5PeyOE5NxTQ6jrVe7BwyTv58VP8TgTO/ujYCWd2/QStMx4q+xhtPjQzwus1Rh6afkWFqKVVDIv2iDeRZX8Kge3NYTskUeEJ1LoYijfHXjgj3Dsna+bZrCsmvfUHHV4U8suczbN7w7qYVG1S7BGONzEhi2HmlHKnE1r3Si6AK8qPWf7l9VO6WnZ5VYM/xkkZezRaA5dy45td3zC1QIinmbM3Yn+Mvlp5m3yWBOU1wcNvePX+VktnkqMmgLQu4EIorrCZhSTarY2d2BqGkyM5h3iIfdgevWrGBmuH2TQGPpqXuGVDqhTbQ1lY3lB1C97UOMs1jbzdTU5u7luqNrcWURwjXFJrBVkcbG5TpaSUzpeYKEv1CUkRhallEblBcr2qtVKqtjM6YUMmB4o9xCyHcqL4rXFO9KGpTqVaQFZRvSupXz4CCzLCHeLV6DHVYXuPnJNqxvhNm5a+cVmO1Qn67hyW4zMuAm62TZLZ2jjSGpYDqTSmRsM3weJ/DM64tb2Iansgp9xJ6y2cYXWtRcQTPg7qrhlzitARNpOSPcJGTJzKL5iY9eJTOUOT0AWzyXaC7UrkFmVThBl7nnSZ7VJveHBXApEChEaH5/QexRMpaII4fabV0VNu04uDQvf3OvLKGLkD5cMjdQKKjf2G0yDsnU3QwCTHVTssFZT47dkViVFOBOicbLy6VPQZJHKDTfK4LIfKQzFy7vBtZF1AOROn+Vrxogjab2KfRNXNnEG5yqQUm2E40aPGGcRiC7ufhuEpaCNUVvGnqMZ5MtognaOHkT7w2Bbmy3Hyd2gytiCMJmQQO8E8O2IF6s5d6jzNlBy2KlHxIzlIpnJ0wJZUaxkyZ9Il/4R+3C6g2bPRc/taCP0xswoem+8aV4zHnevV9S7leUNcwm/O4iZAjGp7HcDQEN2yentz32Ey2iZXzmJbp7asFHsRsF3ldvk+AVyAE6lqLX2eJnBFCeHZmM+I3jk6hPy9mmmTdAJXMcUrKAjXP9tliynfs0DU4jdT4vQrXdsF9BnLVQbxKcLNuimreXwzNJOxtnClLuiPU8eWHY9ytqQTOh6g9OaA7sxzlnwl3tXdK6uk56P3w4BXGwtmNFv9eRKpnuuM01Haf7+9GlpYFgefPaQZEmGfbk98UjdxYO09AOW008HxNxitce1q3Y9HJ9EUoURrF+ZCtLuPep5ou4x/+MU2LqIkZnWAQZGhoYFnquYq8hXsgdk8O7mvUKhR53Ge1l7NbmGOZ9AZQZ3KXuoAXsGoSrnrpEu0cplEeq2hR9aZJYVtzkF73w8GWpTIYJRkBR1duSw2js4JRuDmOC12FFfClgvCUISBQwZmGbCU1ElBze1w+jhgo5qkXgYXRMYeB7jgZickMtuScgUfhxb+3G7opHrGJTAO81BQehCcfIdz1mAs73M6QbFUvD7V0/sJlbmWkB9d+ZU3SIjnhtZ3zmglnyYsfLXRrKR24rg7NpFoe/g6LGwwuE/+fkHKMd4a9+pSdah8JmEXnFDSUcRK3j5CLNxknjBFSG5Wj8+HW+w/nBYO909XTmMqYVkGv2VJKtEDlzzhbfAQJOJkGMQ2qW3AqJ8tWppyvyYocldJVt4DdBt/f16Ch4NYO2B5Y7YMYYCyyCIw9WCDOlVs4c17TRqTcbKogP5YbiOdqm6f01NnFgn7RXU05SRXlF1jb9xH3vMtIdP2oFA0ak+Vw6O4q1KbiYg2nC9EiwNWAxjJupDQDciIPQDk/ov4JMclkITNZqUcfD5J9Zx5St9ZjMXZv0OQQ9xZcCQxDOmcVPdzJjNE4h7moR7UUZoCcVXRdcJ+eBDWXtxrdMrg4gZ6EDtaje+W6raMDbg7EwomoD2AqxrNypVOcKjSTZkQYnEpR5YIDxMwl6lE9pa1aUlO9wm21ZhCr0lOc8JA4rJTMo5Mib9FThEysSMx3V9lpLR0G1avFUqpS1LX3szfFkj6fXiyqs+yHLT59E4svguyayveoMUj0gxOYM0uaXwfAR5cx6dDshTouIrljQIBzuS7BTlRZLdzBbkseVlFqdjR79RbQztlcyocaIhnCsoqQS1iytAPQY4henJu2NIIGOSBejsqIHT0tQ0BeD1qoKWoNI/BKOnmVjwtJE5sBu0I5PP10J2t/IhBkulfGhmiREfLKcNUOgBS0PQE0fW0g0b9y2T0HrvNepZYY/Odp8EDs2GPgkgbjS5K1tHauNK3bUjLbI27k8V/4cvQdsWRkNWsfRDEioGgpI+MO35EYSy9+B4P2k+BsUL7a0Miz5+rN30KZEp6VLWjXRvABVK4mJaDCbZyeJ6giDih708M1GQJwaJy4sduzTCkuAK6uZ/wY6GEDedFyTY14ZjyB5crr4+SVY1n5dDMz2J+jwxiMYSR4U7d80AaY/E9PMm172nAgMTDTe/L8I5qjXAhLp9GUkcx78IAtlgSCdeuGQXeTb4SjauImEkicnSlPM2dQE5SRLeS345MCqRh2By4WEgPgXQyxAdkCC4XsK9u8ixWTJ+cOGqTwxteAdeIC/A1BmD3DDpgUcCM+F97ZXAGdVLUVj0JxuhyO/Qlk+kYA7tWlqiI7leVGvwLuGHb1brNnQyj0I4EEj8kWrbTEGuRFs2OGpaz9C9usM7tXV9qwPzhr+LhLuUAPizQtF4c5v7xy9puiutm1v45rQbryeE5Ltp/GL1tGx0I218i9wIe5TTr9oGfgQSjQ7lJZqnVWW5TWZD+IHeeZe1vvYZVBSRl5GvBZuzZgNC7YuK0CSPv234AGsN6dI7vIsXE4brC9EZl9eSbRHZnz3CFF0xSG/d+U1C23TyZ0HQhI+herUcJtHeCjD11iIxW+r0w0E8S0bdfY7oRsVrWlLjN3imDAkm/2TNs/ZxDj7Eg204lMDoNyRQj5rLTMmWfx8e4m1DPfr5aeH75y1T7XT+3tGH9p/PnwKYWBM/QH0kpymNo7TzfUltO1larwWocIMZoNEriXZJJ2OauwKqfgJfdaH+Kcn9DcTAb6ghi66p2ER8frIomw3GgmKVs4rfvmAKsQtnHL7SqvRRx/RJmxMDSyAJEuSv7I6U5G0ofBBzLtMD2Uyot93uFGubAPRAWdZUq+3uwEfegQyjOLd7gmvhct3HBbUgN2xx2/XOpsVofx8uZgD2xrk3rkWWfc8xf/iAtB4YyNFHLckQUl4B0kWGsW8q5ursxzkjoMfNYbySD00TEAsWtvI6IS2hJFdMj+edCUuQ1ncXgyv6Oa9jDb5QTrxCQH6HpRnYgf36D1hjSyPfkZsF82/AbxXSBuSH/djamJGoPamR/8TVKlk5SBvTfvwZxEMoZEr1ft1KF4hjx0hT7oPYm3ExRjBXC2KH6m53Zwwxn3nFgs8kTB/hZuIa2WThnjNys0WKX5UT7/m+JzejSFxLkZpyWJRPZyNtI8OtNTc7MTgt1gAtbl/xe3KCpYL74/dmFWvMz5s8pFmptvXd8Pva9w+zWA2fFzNYH5egIN/stvNmubX2l7CuMGLz4sfIZusH+2VFCIOv3ML51GFAAH9It01WCQ7F16b9vDoXu3cOypf3WO4EG+BBvHBuiifHxHaMCNB+xq/uYvJuCgQ34dvpPgcW3vKeUZGbLIKgKLw24wOlyq3TEM4SttidFNz+qz0iW9lsdKWB8eKAp8BTFPwXVTmdeFD7Ccn01KLWNljmeuxfEjmvy9MS64ZAnlh9FmQ69YMG1Bi3/danRe2hF6rbLv4c3s2Krm8+1gICiuFZOWTE1AqasmR1Zc9p46TVMjreaOBTyFMjZ3lhJRQLkiPzO0OkdW9q8U6US/yfKb60vu7oBpMaU0ETVRpF6PJJVelciOTwHrpUSMP3rT+Cjura3z/AokFxBoIU3KfCji5gTgfDW/ttRFetJ1ogjUqIDasjPdBCwcEIXqmRE6N/9c0zcsMbfq1wuItWBTECwECZEjbR3rmqQIVUNkl4xyKtQlEXKW1LgmlXoOqGtIi6SMikYThXtozCs4fMK7TgKkpQ3AwVOBBeeF5gJmRewI1sFUne4aV0AjEWlCTVIBDONIoXEqHI6g1cumMwd7suklLSRgjBi1bFDpCrNLgEjhXSbX04579fJRBVERybUV6Pqc3DkbGj0FvGRWyFwUbKiywo+DLmjgeu9zXfnSIwuufuAS2Jniy98QqSRXGggoF5HGJvxSCTgZkEKTRR+ZZuiYg5cKyETCjCVeJrLY4JHNnB62wnHZTmRMQMeDWaSYlB624dnjUO2S6p6gbZpp1gKGtGET0tTtESWm1nFYglug7zZL0LfJdxTSUAYI4ktFJCNRiMQsB1PYZ51QlizN7RCTNg5oQ2y9DMXgwseZK1+Zj4mwMar+JPQnsf3i0nncijT2wko5+KbwNFDcyrPh9rXd5xDLezjsr07VHpNfc6sEiF9qpOfI+Q4jP2RbfQN2ZnZwlNJRYAXUMxwm+vnOxCT/VxjYva5Tn50T2otvD+VdfuJkrVvUOh+QgcbuSyQVGBO5n6VM8K0jM44tNxclImkbqdaS13Cw3z3Iitliey2bFZPuoTOH18fGrLbsOx/1sFoLPYFR8VHJag/Mw0zjjuaVDKpCdzem2XEDL24u2sAfY3oLSUGsVREQrzZKrTbrYHDLKalw0KNLn8WLbRYSJG+jQae98heZZsNaIF4mj3KI3BtyY7KW1GhAlrQ+jG2d3SwlHGaxACrV7IaIECl2OvCjold9pq0LhKzQTAJ6Bj2P+czJHWTEHfmxZpd3K1NzSj/2oFMq6h9yBxUJlm7z4+1ikFOiAmAlmZIhX3nmXnxjlc06K/cBpOZsX+7/FxZdeDjB1V7DAmcIdFJhio6yuXznYjN7AEZTl0WOIWH/JJyM2oQ2Txj4IJbwT8F09ern+RcREPHzpX1kFxfnefPHB0yTfIorb4aWxk+woZTHKMzuLCCd+jHSPTcXP3/wNC5u1QVa6ORjVmr2bwTx0x1G4yfBNFNrzlEtEWvWawFFsP4++reKTgJm5CDPqK5pMKnsWj/wFYVgRVQCSvwP0Zd8mqJ/7N6Jge28NW5AyO4sILyzFn+39wjFegn9kQJtq+DPYF2D9SMV2EC9UL5mdh4GzrD6ebTJfcqIrFIzWK2llMAdFWe5cFQYYHlg9LZl74UmIKVjf6rDf0K9jIRWydHMuBU37ub0WSZ74HjtMLp+Yl2gFu41MEt2jvodMnHKzqLOoYSMKZhLG0WAqWtkTfk9HsGph5+Szl/6LJxSD5d3jx3LQeRJnTwCrD65LqKrFcurqP9/Esp8HNsVElwjQ1UWwgM5dQzndUQOKBcBOB/j4FCkRHU9LXHQR5vKaEIlXjzK8tBIqMg/u084BDMkZgQOwxPzNoB/i9x7vZd/qy9gh4x1MigLmRFiwTpulUXj14NKrSSm15jeTejHiGYoio4oF4Vi0WqjOBJMeGhtSN/8em5ebZuf+nDVQ//p7aZTq0+CwjgS2XPXA/1wfnkGwaYtbnZAOUQE6mr7u+KVvdhygkvpFT96AJ2hQrEc2Z9L5vkdG13rAmC3nFQdfy0scT/QZkH+sCIduaUez5E0ww0Ovr4X1JzsYC67GDU4BMbYvUhRALK5iX60R4Gn0g970pcHlxQh2F17Dis0Hkn2GcV+5p6e5drxmeoWcYvSUjDrt7J0y6ET7yE5anBI+DUHSeQuJVtBAmJ5i1SVPqOOorglSJ5g76jMeh22HV11K2ce6xlLVQuFzF3/jldpw00u1bDU418yP+RUNIiilGvMU1nuzPF2Tm/hBrNqOJb66aGRP+8FGddq/KZKhrtlObkzI78vwcJlYwc/vRundjsEovOuMXXBoGQIpJOQUpVPuiInASDLuTQGnwJ5awYfE1yaC59g5xlg+8iJ6XBj0jOeoNJvtJgjKVV7mIp+S5XDeVdZZOVrD7YdiSOBEsHrxxUL70aHDWidFhALZbrzfok8Dv1c88W8sEpqkFrY+mqvDqw7jC89JvQPlWgWtdGZ/QXTxjWo6sYYUJ22rVqJa11ybYllFhzjVZfo5xatTyixUvWyAjAZQJvqEsIlmpO0LqUZM85UBwC794GdDANzGveLnLkV+JyTtIXUbveFWcS0qSyf0bWTIiWmrYK6EEBvx9yag/HnD1ydTWp0mF0J9iiKG/vn0z9wF98CCEe5PVl+GyWC7mAoDgBW5XlDPkY53dunkfClrxb0kD6vUlEcKOBHg2cTAoQQfMldU/pHb749RBJ+7Ad9VtPqNqd2DYmqZRzARKgpjGkmI/VHyUE7xv57ne3ZKrVnTfMR/JJzliEN611Yt957FpEo1L05gyXvo1lTZVmhWWzYD9/hcqcchArEg6zxr2tefSN78rq5M0+3GDa+D8pLR46F+BgGF6QjXG+Wm6W470Sa8V2y5N5UCq2JXsdUVfvNt7L/kp8pufbcHPaMCk+fJrbKw7YstakZ3ed3Fq2v2BVbbMphYA8o/w1TN7LPwWJgxu7p6eo2uZa+c51klZHFguRCwFVKielPgqThwoUgter1h9IMhsYN5biUgeeSS8hFBXMU4AWeQZukVRv5wYGrRQqYgjvY365ihb121lNuZFRgwoxNz6siiYf993c+wujZWfVhtJK1hGtNlyKTKXwoxEUaWQnozeyvqXmXJQG2cgjjW/j9eUp/w+t6Aerutf5ARe55UeqYU9VvF3NYXNK2EUDhC0uADGEA6Ena9sQmtgJyGPqmMFBZxw4Zdp3hBqcQ58RGkzuYUu/TKoMkwlHV1osm8keXuyY2+WEIQWJBEtxAWft71i63m6Avy0UpGIoPZSEASDSlbDofX1E9vFYJJVDJz6emnQAt1k31OQX4jiiQPjFkTJ/rznwIgTBJKrgc9Iw1hsIZTFzJKpCBNHz6JgJx/K3Tb+1EDPqS+TUWDGq6TRJi34xHY/1kv2Umpjt1BKH71MlLwRPI08mvzu7xfQdPJLUy2J9vFctD1EaHKn0FEYJCbG+L1apzt+OidFqfgSwL9z8dpoyupypiLSIEyg4Fho8jtXYgY9F1qTNO6KB7XcF7Y+zmjFSNJm8Nx21LdoFhAeWSQWReffCziUOKZwJymdkioqtF4TVamUFRDT5/rmXfTqUWS7SZEUkt6Y+0EdGJEMaabQw0iV83MNSd780OnNzuEA78vXkxCnVTfYs9J6R300j8uhyhnQyyuXkjxsioFNELYDVwqeLeOL40K3mqxZKLED1LNbqkcG+wBkLbcQU05DUWS17Gara2c1DlgSfIUQVDAo9k4/DytlU3bHlHUz5v72onjuafiJxzuckAWmM3VFGgL8YkRqe8MwDUD/TEpgt4nHFqMk9s+2wynRV6qwXnpo6ajvLRVhBXhXsljxlPtnAAeocy9+Vqs1+PPIsRAVSbKn0rJZxDcGNQJ5oPXmpvF/gLzAFbhfaJs8tzPqhfdZxOZtpR19PAssdjnxv4PINjVCLAGpSWS9zidMX7UlgnhWryPvcywsxUBolllQJ5i981OmjNXHtF/Kl4KVGIR1AaNveAYZ4eRGwoMb9a0uuYySiOOyYU+xXEU2gI8Hbv5p+EQDUgbZLIPpcqU6fq9RHdtXF/wIyPAXdtTI6VyA12XbH3O6N2nbD7VWJYOYmj59OCGtGe8kXaC7Pte2nOV+l7uTDFl93cmpAndqX8gR81tcTpweW45CKfuI5Nzu+iwIEj1xBiXcqnLGCp5MEQgyAB0Kry/C5AHRA+adZmtanztCzd72OyL9D8RntWBlnHn1fnvZ+O6PzqDc/LtKxcV+CfO8I/8NX7wqwwzh+7yTtKB7FGBqj0PhAT+Sw0Vu6ePd/mJ3Uqz+ka+FnNVNAsAia826qfEzwDnp8MVSMhOBHGjtnBBwk/99wL27pZJzl1ntMuQecjRPuNeRgZMchZIJ9tfpUIx7u5PHZRZek0C7dWaKCjwDopZo1gnCcUb6jC4b3OjXHr++PXX4JLW+lzFhlOvf3F31wnYr/vR+lXOt0iEtn46w82y1XMpgsolM5Qc/dUTDi0J862tpsLpXQoGEQ0GEpvNmaJp5aClKDNIg/xG66Cn7cw2QFVOovqHP3dpeLa+SCJBRCmkufFGM7io6xsTSttSWofImrCH4BccKqJgCQoGOuiYWjFaaqTVWNMEPpmYOemZRWrn9uPgYUqsjfEXOrXMa8R7bGF4ehSCm97ETgBYp3U8B9PWiFo2ZOG0PnMb7CSHh3z2mrLW/D3x/0Mtx59FoarI0FYMJZ4H/d5SdibUgAASCDc4RP0MZd9hLLvqehWPQehqJDCE+ri0z5Zajs4h3zWKCIhhmNy0+7pzgPpIdnUvxMAmofLeHz9wmzTuUiEd+OW16593qdzvNR8+irThREU2OZwXmlCkkaIN4iHIOobaSdOh4eDqW6TYfaBWso72Oo6E0pN13a80Fxtsl7Ej0qHo5u1SQsgicJzmxxSNN+aG3wdZS2/o5qP3+sqluboG10rUu9DbA/qMKmyiHNkqc3a6xYabhUkdbqGGfx0aUPmnLkmqizp+4xStgmHj46Z6fNfsxLt1a891BfRH/xWW24LOQvlMLk5SrJC957YuUNTq+8PGV5XnGyh8hSHsxLT7Lwx+qiE62YjzgtpKDdQNWcckg8CXDYmkSc69poHMv6VZJVjqH997iaHlK+vpsLU8N4M2qq3XZ9EqolK60X1IPVQwnVqIP9vKhcau5Mwjbs/PXt5CcKehT+ih2TdjyjmsY+BjO0BCIa3lCsHRHvm+JSNU8tJS26ANptWHvH3RyfTDYy/fgVKNoM//xijNSN6L29YgtbZomz43ZQZ4cNcuq2Qaepa+jmdBX7DhyAuoNiBg6qJYKEv/yWW22w4h4RupNEi6oJUXqycX7mjvk+aakfZJla9jt1tIEwEpl+M2WYPSYL0XrkzZGccvD7xKvHqNbifDThx9NHruOPvcnb2w51hVrRCCKNADI/1CTxd91tJziwupHisO55s+4h3XSZE/QBXTaMVv6VmQyOQD/TabQ5OgPpdHbekA9KvFaO0Tv3YlWfjm++ABiNBdSRPcSd5J1veL6cdXNS/HzNQ1TzxNGpze604n8o0pAnn3yncCddvbSxqj0KZt1N8D+GfZ8YvJMV9eH58xjqiVYw2ZYY9KmG8tCXSQduBSFhoG6LSp9nvSmnI2OymTl497qqcF0I8r/+8ajQvOw52rGn0ps9cN9svg3OyNNI2fbcOgpXI+CVLFuOR3uttxSrLT+8MljELE8Cjoj7q1R7PulwK8XPJfvjwpRyZzUimJshnXSet1FNOZMlIT/p6afQK+WhxNf8T+MpH8ClxXbyDDfo1Xti+ndvZRjaoWD4Aypg4h3GyEueNiQNAc0aJW+il/hVy61bsc/BPpOt/8hr6QsrDvJ4FgEH1Qk0GVvXH7DiR6ufnXY3mufAcqj4Nkx4eJpUm8WwSPWGOnrkgAvjqeyjg+g7Dp5QotI5aemWfWl6dl1qo0i+fErjvAodGANCpfZJYjoAlT4I6YfGf4IEdz2vmNvILx/KfiIi8+aZ/8bQMfcDj1q6BYK94CSXQ/R/RotPEvFIVF49I05FZRfL4ZzfDZy8z11+cCtv0oWuOXj7BXwagwtIB0ofb8vFzCnegnK2UYVJhrJUdCTnoZ/MmHr0QoDsZzmaEEJJpPtTGzX1o/fg0BH35i4LbIegWeOOK6cL//Su1FolFDyhYGc7K5rVT8BemKw2VaPDAb8fAlYfQAP9EJz/Xf4+A+xH3WPCUD7vRSJBSDCemi5PzXDTREklfWljKPpnXu8aNryc/Dng3fbGwlP9AIdEInKRcLCimyqgX01JSWEMHJ6bWk62cWEEkOtLKP0V6fitFEcPL1H8VfAHphYEEwt5U+fybjl5co8xFl+wpCol8k+rBbEUJE5ubJIJCTbIpIqebwXUsLVUlS2QzTmgNudBKVAq22OU8RJPGSmcmNTq5kncpPm5XFtAZssDJnHeAeDNSIZXHh0x3Lh3cFvIDX2USla3VyXRn6SZK6HFgqj5cHdGKEJCFZAxWblsTff8A/2bDNBgVbDcbdihymLvV4brIofte8xvw2zI9ylrZwqXkcC/Vlii6VTRLXKJU1BwRu8oCuraPeSUfAXcm9DIEenwF5Hoi3tFLt8c3ehGlDsXFT93dbBE021eVoc5TLhnfsWDsjomRPuXxlgVOSvOMdDTWOWL2e1lW3Dml4mcdJXgsW1Kalcl7cSvLBS6GzLZtMAT3SRyRa4N2s7pwowMagnr8hPSYaD4ly/PehtUDRhzHqdWBZheBd0sxH9+bSDIhBuj4fA5DTrT3utZLJabCuVtAWYPwXvvT+UfAprcPBgo0qNG/G9QUNifwdYOLxLxflvVJ5RE1B+1ou4X3tXhp+3yGzJBItnJQjtmxvSovMnYnA+bjtNpDXTWaDb+QqhOx+5UktbiJxFWPfWbKpQQgqzTchAVCZ31cRwtZttG9tAeeH5KasTbafgSustARUshjdBoXAXMiG6qi4LE+xBAwJNnD6ZnpaMjXO63VVuoL5ZwNo6ZlYCzkM85EQyzajAUybW8Uq7N2vpqLJFXCFwHyqMhS/5OCz7C14Khk5fmcy2eMQA3vlfzzQsE2oeCHm7xORX5tWT7zhSDP54iwNNhQfAqglATKyQOgSdhDpk337rBZ7Ye+hpJCexmYJRt1GWIObPnaF1Jw2m2QqgZdrXGH/KVTAEC6xrhkLuJMCp7f59JtoSUK606qYHTjXhxlrUBgzVRtrRw+gKW9gyBlDjSTkdbdyiIKQ7GdkM8bOxdyiU2C7pDyiZGOO89A3X6tuaeB0pswPcLt/gJeGeUw7jIkUkNsVk+c6o4WyL/qBdU5CF1X+RPeQjboKCQNMdmTLrfMUMqD89+AaLaXA6hFKbjDEbZmLlXMmhcobA+lM7WWZyKc2cmNkKTebzQK0Z0CFtjuDMWbyqxNlWpqXJR56We25NUYEgIhVWHglzL9Coa+9oMfuGQ1H2S905G3OgeyS6nnPQYEw0NHyVGlM0hT1sBMTE8qviCQ9fwMdpFHk6XAiN2H2a8g25sowUGrMsYF1uUDpFzyxq0LLGokI06uRYkTz/XyJrqOoinLgWUkLOoTx/lqq9yet27gP0QGHWPalzPGwC2+eAF1tunboYf9kR3mhH+mR4Dhz0Y6cJPNfJG4gFsCsK55TiWfZoYXrXaoVS3FQdB9QOw5IFqjGUTUM4q/axvalh8+rkAn/xYjuLukQq2OlF6gOlQmTtZxpmaA+9EZGY2sbFAXrwYn6caSF+1WiEfMesnpfC+oEpJGT9B+YmpNm4WJsfSaOdxW8SaNTwD92I+iuNBMjCK2uL3ks72d+5HfnBthTU5yfo7wPByKVvE6Ne8KEEILYL7G88LqpR/yA1idyzBgxfOmVJKhoAAj+bAiyljQb55oJcQ23yceGAWdqYNM0CpJpeXa60xVtrCXbfm3e1TjciINrmptwmGILYvNRxExFFgkq6djHIgloLEuyvUeP4dlZJPHhypVp8D8g++08tS+KF35INZ8kA2Q+fkwffW+OlD70evD4rTGakjbq0iWmfNxhtWqoTnqB6i66Cr7CrEOBbPYBXkF4FNXpSCukoqGgT/9KQX4BOjIgY1DwPSJ4TZxxT7xFQZt8fGg4q5zvOO4P7yz6vdD0D3dbTh1jfNImA2GPYFORAxT8L2X9xt853BvD2+po8baNT9sO3r/zZqIJkatFPRCmmoj+7KY57GqY7txH8oBR+Ka718yJuV3y8EVPE6a1RTdV7W13hPH3kIzPUS/xwQaii5h6EfMvh1v3WGvQl7EVa+Io4zpWOM+Xw2dLWQzxYsdJPHLtEZ2YLOrbXwrSVbanbHINZlsa61lVqsa3X5FtOUvnaKLQ+v8WL0z1cU66u/2C7pS8LYBiOLxJzTW4tVL5dcMrrpQ1il6aaz45Bf3dyNGO1NctyC7LbmzLViIMA+CzOqQDeb8L2GTKZcfkhD6ebPpJvGbIux2YLctShtDfVFjLkGw1EWG+RtuWxfAdvXEWvphi0CuU0QN2l6LLarge4PEn2ndfXko+kKZ7xmXQq1Dmst/G0vCrhdKHveaS7AnbScqC1c3MEVrWHVaKOKaHNsZzRNZdhibN9ojmon2qw58ju+wREdOBBDUb4ZnH/z6hpZ1QGatbBGbbiposb6U5g21ZAQA2GN9k73zNfkrYEco8ty66RRN64NoIktVYK+7cv3aBySkw2MGp7gpaIQ5BC13OCGghO0/GcMRvdDJ5Lh1bQQEY/tpWk60eSj0e6K/7Uoznwx22zj65h+pz7BiiGmmoT6u8OGa/Cf6hrTtWIRdN1bZRkgE4eJv+Avdfnkb14NbYOb+COvaNI/LYX7eHDn7M9HuBeiNn5QPCr25fxTzImJqxuK8M5eROjja1SKaMBzNyQRaCHCNC3cFAnki+8Xy+78tmfrwXvOsUnnirq1j5N19gP/hBHGuugzJrPJSwwX5Go4MGHmaGVENMPwBZ+3nrX/1caMLXR3T8Bph1TOh2Gy3GjYtgnsL1Xn9Y5z8+qxYyntP8lU6xJime2kF+cBM4kyk6GuQ4N+4g0FA8EbywZBv8wk266DJvm7F6ddvVBsDZpD1SjUMoq+lPDaowLK9ly2hDXEw+fN5M6LtbCUdBM/Z+uweY9o08xa/kxT6wOHoW+9WiDygMIpJJvXZlYzBiv6qZRBfd6VSaaYKkHDHF9zaRO5Y32yCK8J13cggFHBIVqELS1N56R3rlYOu39nsn2bUoljpyzGZO95jCFfQ3rEujR+gBL8rTBfEORmrT8Lb7QQf2vtEgCozyqI3A+leEEXhziST5d7X8yw8ftV0UaMlEdGtE1fVXHVV/ty8XrcZAdle5xGW+P0wt0uBSzd1QwZ1bA0+36csnCNhTaFDEVsMzYeKy1w7QdNv2eTvsESusiO6khVn5voJn0kXUQM6a/cocsC/D93kFpwyciIO+2Wbhlj+VZNgg+fVAfSGl5DKlaCUsYmtelnSVt554pd7AqYnnhwff3JGKWpr1KtTtIde/wIDTx02ccFXkDkvcVEtRa6nz0UIdy9sSV3pDskVZ5UXgx1OG/5ZWjB6Rk25/hGHuzPA2n7A2qlosHbZdwNhvJczqtz3r/IYQTxeWR+GXFyHRaJziWNdqZmUXDbJdVe2RigstdY0fC++DoRGMQHNJ1C/dJQoViq8GHGN4zo+EpO3AmqvTY99OuJz0N7kFAuDff4iaLuxkCgppqrJtP5BuAKAdh+NLVwW6jtKN97hGQCijM9nVfYyjyCfRg34tFKhCAxJ6lFkD5zQ/st81GcXVfwrNqlKWaoTKvSQUv0pj9wXRPLJ2VGEwCbhEqIiNQbTI9SBjkum/ZIdk/oXETKmtSnnboh+NshM1awEzcaWHDlr1DUOvw6NxW4H2KU55y0F2JUVKlkc+cKK3TH7Y7v651NBjSD7RFFQS0mtab+9eXNiRsH2VizxU94sq02Qaa5EczjTXJHwSif2dqrhmx0bfOO1XNk4Myqaknnf0Xx1zfkcluqhiVFrK2oie9liHGv7h6hEiOu7yK9ELmhPRJtIUfMx1p6F3oDarUUFjsLVbSv3vlSHq/BoE+Qiap8q4bkY7Gn8CG/vcoPR7RmCdsQA/h9d4QdhyVkNnHLz9bAiGV+/B8j8iTyhUdICNSEyPJaaJmMk8uqWfCGvSHibYav4N0sHnI5NTlKPXYgoH9zCcIAQMjBddl2JO4s7ihODkKHQ8vFHQlUuc+LI7W+0f4M8e3VdLMQwtVvw6DSOQtVvvouOQ/w0hc1o+Qd1hcjdiGxysA8EM5CI8bBbENbcg5+M/vosu22Zh0zsi6dM/3WN1S7mTYbkZFMt8KTQN/dIVrR6MgIhJ+mIfhrJzydmAjTNJqg/CYkjEhISr128msd7X9UnMG7i0/jktRnLfcjbAEQEbIvgD0rhCVvf4q+UYybYNldkxdoGPl7bo8Vbj+zcg6dBU9pnDGF1C+3vpN/n//M0vYulCiaYxWb3q7Z6o6jqD4TDvUBunsuTB5RvdCLlzQ9ptQFV1avVlk+jja5/YHpjVsexHm+5+4XWRHD3MwA5IJkWhc3w49ZmNqpEVG9e+0mP9lPIoblrnEhF2ZRap6VFArcd6Tq4KecHxsqkjDLLnjpJhJhLk2/yINY8dCIy5LX1xvhC0/G0oKvEiJN8Qwc/VM4HDDgJWHmeQMTQKkRfBZhqZb7HgkRn+vowREx4gTOSUB1wA3Ag6gqoPAKbhIWbufJ00SCb7uDidVgWuRqANrWFkirLZrK/Fzl+E657B8+Noow3mhvNhAfNyrPOqA3v0JQv4a8Yxzx23dDw8hSGpocbhcJv3mhxbP6PmQKg/4HSzIpxwgsUolAHALbX0buYiy9yNXANFayf+UF9P1I/xOTYyJaJMS3ldVDpQFHtkf855Ld6oyEksXehfrFfHhEa4CNnqQcP4aGkJtn21WhkaXJc5wAHqYNc9uYDyx9F+wk/1fCNWu/Gfd4tQrY2mV/rYeTPF9dOarXyiDqAuHdCa9RZCSlQBNzfE9V0goiDuGZZKwiR1ssnqGLpo9iQXhgE9V4NGIgpikfEsx3IzmsczAGAx15A9ZqytUL9EE5W6xrLxPbOWGM2n7v7N30wHjOBMhRk0tR062LaDBMpQgNCflzZjLKBolc2iyqPDRKndqGoKBLzlkVcmEyesZtiB+mcAHxVkUDfkSCAthH6Cxdef1M+Hh8PFF8q8gAbmjQPTrwBnfANYZt5Prw9GgfQRyU3elAqWFcmEaNI2KyNHW10zVnev3ovGz4FukcwHWNQ/sEgXFZdismBRadCU+E/Mx88hLmhDmgohBvl27xqjoHPZ4DGu4BISfHzrAPh4cjeSMlWKjY5Ie2uOQetK5ple83HCAlRC70QA7Tsz50CE41kQiEVmCGtyyPPKihM4NAMDFQ5u4S1OVdfRzpgQU5nyZgfu1M8q1BMQXiNOAp7ZE/+qk8sXTTTIJGNLDHc4BbKhllsKEZbjblZyLgMorWhSRRWAAot5VkWuYPUpiB5xwrfkQMur/dz1aRhF/XFtv4lqw4162h0rW10p9h8hMp6PTFzG/U2H4w/OsgxmpZX+AKut4FXEpSR/D9OYeu7s6oUTEmkPQICUndpn/hGgCbIaY4TZpvac+Twc+yeQ9SUByr5tLFbDiX90YXWY4PFct4/2QbQlI8HTYwfSKIaXPsaR0C8sNpucfg+VdIxvOk2Mw8JfKiOeDjZh9B+dRq8RLkQsaEasB+qi4VbRNe5prFHVjNybeIADhUPDAI+LA9fYGa61eoeUAm14R4AZBndbNYie90/ag5BFaSLfPqsAoe1f0JLWyyEhJRmdsoh0JmkYmlYhR4EG1aXojhEBWWILS/i1Ej8AkfwdzjZpE8WvdQ7yMh54RnwCRFKQj/M9CGg+PnR7wC2iEH2Nhxbu7pehj8fCw2dK3r5J1eqtbJkxOSy9DXWFz01rNPav9clDimWPD3qpKFL4zEBVLIZHnS92T2TFfp5o8vqM6eDRwDO6V9Ci/zBvst4yhz/A6ZV3j3P+hAYdKnXTJkWfH3bLJBxibGzpa50ds0o5GEGwgP8GMIW2kCaEWVmRa+zRd53KwQiDn5Nia2cZ9TBj0jCS3wSedW2ylWR0PVmNzzXeT7LyVS/24Ab76Rt6Va3lYlE2X+EKeWK0Y9zWlCUQK4V7oBqKujOMPntD9l9Sigi331fO7SVdf0Ps51PdbO0VACQeL+Dd7OLo3qcoSDzt+4c4J0t5//5HRHE/MPw/bzK5AkECgjQsrA23/QrT0kGfAIuthyRLTZiNQnPgDQhX5zVgJLm+8jw0sPj0x0H3i6ko17jGsmHDfY50ViV+x67VW9t/bl04VdqT4RfaqOuLwogFEECFkO34GDCVG9QHweAvT6hyLhilcPc5c8Nt/GGnHSjj0ym/XY5SFsqum4Ff63wJ0qjdTuFf/+NxrvRwzsPtXLV86Ts61nLIiIh6W8ztYlPFFJC7bIir+c0nq1EKNyL/VHUYnsP+TRzpsWXWENY0bDsOUIOD/fb8HGCj8adm3vS10kcB79jMkbpNm1TJRkP2GDnPiHgglrzut31mrjC19aJr7+/ycGrVrE0K5qpUvd8n4KwX86+URSZkc7B1LnsB15jCQG58kTxp04o3HX/Dhz7Yf4mb1fHnNfaIoKs21HwXVm9T2lHRGcNnjHaTrsvkPGDZ4J7KrHAJGk1D7sVeRU/lNHz3OeZngG62fY5RRpCjScIP5YGUkuLHz84wkaadQeN+CxBPPk4WXOczrmaqiVJmvlUwGKIJEMuUIPbcqNei5gNKBqvDRzVJ5Nhu6yNVyzQVifmfN1LkP2rAFgQBLKfUrlXcQEwUccEc6PjZZGZ8ci2AnqEOyS6tYjAjRlpWb+b+dBLNllhBFbLJXHdZYxNYyrMYpwwuPa0MU4KmOa8bczeGCdVJpXLk+5PPUFFau9T17ZeMyXlPmVn1m9f3wBF8dJFSy+6lyK8ING6jgSkm/2YfIjJSELdLzmmXqPwESd9ex/2v4Ve8030jBkhEtN9bAzx3wa2tE9vX2MESnNWy8TSJtUwTAww19Gtknah1yaFf+3+m8UPG8XAcMF+9NYDdgGUE3P1vlulAMUS3yb3UUpUGrttjonOf+E41plgKQJJxMnQxJGoCkryANaI/tAnZUa479T9UDRqd4QVIt3lmgeT2Hu+TMbkuiBr1LKeM9BD2mxny9xgg1bhQwCxjRE6H84+iRRy9O7Z2QXKAOCbgEJQ+ee2H7wSexhWmZFJhllwyLnEnS1MWn3/kmtX6Evea1ED+l4iqsIhKLI3atl4A99E3oD0tNHMy1A51eGf9qYdgs+4BVKY5MtUnQH4fAxcqNVo7gbWnbo8tjR659YSpVblNIy0QStJb1swCAgtSCBNMKAUqqpzGo8BqcbM3FEPHQ3nBlx3arcxYpxEAmOPgUZ/xWNzeN1udKjfVbTpka2Y2YXE06rxZIOWqyPoj7eRH1Ma8ABEr39Ph/nVjWmmmfXqYqbvrHUXs60p3h+VT6/WqdjJHwHIKcv+XHDcLhO/wZH5JaxfZpan8+xWw00o7n1MzFt5jrRLgAK7ELdSgjvJCVhihoOTw/b0lgucjILx1nH0F7kMouUsPNEP9gRpgerrgdejQrD/jZoQoUGbUDBlqKh4vlgVjHIUkq01m0DV9SJyKv9MFgRnTTKgjhH9QRDFLuwib0cXYgbuqUykH9qg5v50tTJq2JFoWuIu3IPs/iPawiS4Q5OU37og4SPvHLkgX3TkQPKWIhSNnIY09+rEz5x+EwzvsoTFJB9Y0SKYWNnrjHVObU97g2ZQDkQ+wGYEZa5bJYZ2FqAjOP0OeW0eISKymZA6rPnsIw/uEYyGR6izWtIZRr9ELud0NOM5FS4ZSHVs0FgQzqZaeoz5wwntJ1vY9ii08WcRsWeqlhXt8vakVQCFzkhhe77Vu1slNq9eLnFwbKkiOKjmrWLn/7b1dxymO5HiI8gColPs9YZmlgw5smxzoAjIXK8RDwnVQtDbyUL5oYt4E0magLyzheZE0YAlFelzxsszBqChAJVDYzNevdJqpEpamTeH62smFWA2d0CiDkRrAxjyHLhy9dpuI5fx+7cAWIotdgNLiVEYHddqhDoOy1zYiZKLSYN7IKe1PFSvUxAwEwuByqHgq7ga1K/o4We9gt8Klu7dQCjL1vMBRVSFpLi5rMwFnKtTilEQnmIQc+EoWA9Q9y+RDiKe7wyLHb4ZEj4IX6AykKQKrVwDI1QKh1jYjxIihL5bEW0nO86D0SeQ+WhlJwm1zfUkcNt5rAUZjtPLX9a70/to09RBhgNU0SmnGl1lNfwbDm5efbmcxY/IUjoQ2Zdxq6Xso2opW3NZ4WlHJ9in4vdsvv7EnKa791H9OIZPd1+XgsyVQ7MVstet+ew3+vLc12sb34WFgSWPpiB+H2eIONo/5Oghu06f21Z2k6O3SLJJvBXAIX0VKJxWz5GAHyClNCUaqWrGR6IZvQ+ZN/WAu32XjcNCutwp+lMwIniJYUOOMM4KaewEjxgYgsKiwxP0lC4yGBPrBTqw8fx1+E/RIp0HD9Gpt60ZcW6uCdcshjLnra4Ai4XNaUTFC+Tuie1i5wlZlSh3qcS7nNrvXggXUJKwThWoZFWnLFrQSeOC4dZL2tIk1FKp5aHyR6/E8WqO6WbOCsF0AtBIiN1KviP92YSMOqprXRY14b2mxDOxAETLHUAvQTKlFNuEA/F3NLrdO7fFtwyJ9YjYFKR2ggvfWeQDc21V3DXhX6csVHhWaLtoJjpmMQXBBIV/wtpbFEIFGIMsqrGrcttN7fCUN+lgwfRZQ++Y72ZK7yglwc8OR/dUvrKQd3I53ZhwfA+xLX5C1cxoizFFIHuAvjTiOZjWPf6hpr5t81z+m27nAyb5eJrckpEfCPey6fk663H5Jl8wGL20y6NVSXeZHRqhwzFuNArCJn26jNoB87ATnF+tlynN8OVfEHymS1HzkakBsMLmq/Y99lB/sG0FCxQVJJVDDVliV5MLxIYHjkqD36z2uGjsvBhFfXM8Te/tdA/omxDAsoI9slr8zAx4lmny+oQCbrHcyUwOp8qJcqNPZP5Rdzo1Z5TFSVNPeO6tNqHt8RmqogPjwQ2ewQ3stOZCkWCbeGULL2yA5/ssQVrbIdV1RZrmmQcm5lI6DGXkvu9Cpek01MVic+nQkEdqfxTwYhcDw/v4dj9adqgwzuYHXsy6qTL9Igjlazx6qoSNyALgBalJnvQwaYllITuVTBRzP2Vhj4uyN9MGbePx4EzpaSjydhRGjF3tO4C/oZAnd0Mj7ExZrS/7kZmEKHXK5u2E+WDgMsQH2aN5AjVMKYyNwmampQz5nSiVwzbb8AEvNsglyi6RPwe2LJpx0UFOBfQmmnPczB2hcj4GiA5kvZNiZohU+1qVhPWPCgHtUGTM6e1o5pORwp3P5LPFfhXlL9UwFHxHMsTYc1oAUtVqvltAhLmuEe/FvpZTAGfsDbAU+oRDbYtHB7S5grV/c/EwZjlpU42IcpweGRyTiUxwV/KUJvoqDWPrBS8sbRqB0PjsAZYBNeMMooOLGmJwypfywRPYO+nDLQooCV7rJyf6RFTMZ9Djv3e723yuKOKjO3b9fDYbXbh2aWsynVacaeSFK6dZcz5zFj9gcVa1TP68hTRTJCpgykm8/RJ+6GIgNmA6evyEqsV5gns2iXr5CP9oyjmMOrab7aYrUERDeRzeR3DjGb59fTTnkkmTzvX5C+5ZY/n1UyXpUBFtSyiaIKVIeLjme1pZ+yy+Sy1NsYaRpEeJEI18y5kzuntfxp35WY1WuBBt1CFZVkmAe/piKEAL2ZLIdPOiNSfTZrJtIDJyxkepO5Q0VRXvwTPWnauWeCPhAQCu2EagZoVz6m+aQWC2dmNiqWbBWFuYINSUJEoZMVmKXM5syCOjh6QIVrhtLfEOrKUxtdgJUclSWTsEQMlOYqibzXT48z5CHUapUhYdLx3fMX2ih659vAyb0ihG5eNdPZNyXXjoNoOvXqVZPffTI9Hrj1WqQ/Dx/5plmS8OqwOwkC5EK4MhHdamD7hXIt4opJ9PWozEUmDWEiRDhEhn4hdAr42L5VVDXI3JzCRADY7CFc4keebVlCzCckVdi9GOqG2m9hxAQ74DWF/zALcUDdQ80f4iosfAOsS7HET7M9C4xijE3re1uT2t1b4g1OtVHMS2tM3o3BWiWvwQ41mJ0YI3JnMiIGxTI+pfxyo5BXF7TN1b/WadBf7u+d7elL5Fbc5hQOuvCmF0ZPz+YhYv2Q6/jvOYb92dXwfSg8b47sJUhGDNjXB7PME9CmN+qNmtmd9hEWV7cnj0A5SKOOZ9UOOvXkT49gyamsAosFTBMzj3NRF+m2d2FNZYMg2u8szskzaCHMOb9lSkezRFT5z97t6vSfFwqmEL7AFflDRA0ybLP8kBsk34RJHVYXGiFTiSk00volhEBMDwUmgqVrcO5dYrZBIq+5R/x9kiAYhod3X697D7vptj56GJBtn285cTGXJKJUImXx49UtUuFhInabQhTtP20ZnnqYr0X99evZLDwHas7AesiJ2Lux2Q1Pau5ZT9ty2CFGiTLvCCXiR6e7wPaeb/zNvno7bHx47pkc+DX9hqBlwRRelHAMU8KKhG9V9yoL/zTvggRc7z7gIbHFUw7kGN8kVjnwFp7q+aKnU51nIxCmFVmYuiGeQgDrNBY1p5m6g8fbY2475i8TN5YVLEo0rG5KkPNKWAlaipa0fIhxMSH+P0D6WPSm85+xaTSKcOvw1BPxpCzcBDf/cFlRt3omwvKkzRx4oScNQ1Mt9S7nTP0mPMv4kFnwvAHIIK/LOpXCM/K89qYWu6Vi1LxntKBYQk6DVVoQoNCxLPEiZoCLYJnuG+X9fLVkPu81BSj9fBbUZBSh3bRR34Bp6xlvcKpIDWnIV0F7m2kqWwkDZVRTgjg3FsGF4FXBrEI4dJdcSU2qn56hwUINb3j41OF1diuTSgIMfpFSJ1HCFuMUqPkSYwqapohE96WBfQcqogwObXYHQ8VVOb6S0Oc4rrDXV0mK7GZJpkwRJWYqf9ykVQafRo3JQ7P85KjJRkZyhFOJ29yV8Yegk4aQI0gsEVQM+lMkWgHaFszUs+ng2w9x5b1DcURl9kEgUveZFe4wqoj+K9xajhEyL1CCop+3CBCqfDxcRV3B5EuRysARdtnAUT14lQ8WbxtYjjBhyJgQqgIYIkI5xIngTvp4glsXTxD6A/uCCGbp6xA8u8bP5bHdP7WC7HiTSQcPipHVEdf8irY3Qlr3rHf33qVqtxOKSvu/El5hVcm8bhITmJb0hOKwmJsMo6viSMPlJ7F0tQjuqZmhSqhbQyaunh0kPCKs+HEKil95CqKXsFdkE6chfFN0eA/tOhV/GzUTUh4GNojDDXYRwI0YScZpgXLAuIh93gB0mju012FO2o61PQOgNtA61znCewA0nkJoONYMuZhV4uzprIBlbBcGe6km4jacF88fyfZeJVfdPYB1lgJa0l8lCcCwYM3BgsYNC6LbjACE0Br7QkGPhzp0MaqJBGk9tywluXR9/ffdQz+z03PF0Al5T3X3+Hb6TqqL9xziV5HRRLfeiQzkFPcAFm9GP/IbTLlTvxmVM6Ycemfz1BRW2IeL1nlk3Cl/ks1vuyXjhsQEMi5/ZPIFsbr3coYPCstMQ5elg+dNixdirOla+TIEpntXvfK2tyRqlwvaLNiQcERctbQ9o+NZWMMQGtO+WSaaZszD/hCfZPl2vMNbrdLYGrclJQxabyhRiJjE+q8jvuQUmLewEY9jlKpX0UjGEllPqMYkve3j+19c/JjUX1nrqMTWTZeOYwYMfxbPMLxvdNKp5f1ZxKZq0wxsL17tqYJ7rXIhic57TfTTfjpg/m+9FIkbqep8kDfAsQ7tR24YFZ5vkNDbqiLorCtIGDKWe4oFLhmzDXZSfFwAMNrBkI56x9haWZyrQLuGrRWD4voFP5TrXfC+A6oPR+Hd3OSAZ2ozsa9S19UucpZg1UnMFmBu9rzTJ8Q1BALWcdMl0pphbwdg6n8hTu2SSe0ryznF3Z5TN96seuq9bCVk7L/jw8XgwA9HgsVDeRDSQC3QuC0obmo+evpW7ocCdyJ2JpKRHNqLeUUXE+ypSlfpuR7Fxug1Xzrq8oAMkOaMW+EKQO3iG0O0ynmyMQnoauu46+agEOXu9cyAJTvw4AqJCaSxSkw3deKOv+cBXIxJ1KD0Jxkv5SDTeyaCJq55fBLUznibhVbEbBcpsyMZTK1azdYpVNUAyyyPfGLqIhR7O9jEd4TnO4EHpxb8yEf+qTG9SeSsHjKnt+EitOw+yWcHJ3z4+hIAd99Uat6XDvsDYhQ84k8uBkfuX/2ReG901O3XklNFzt2Kx3Mozr/WM7bmVy4sw473C5j8MXVdjZZsqZdX8Roq7021ZJUB+Lx2/l6CIhCmQTTi7nbBoMkBkh0CIgyYJJJMDiK7ddClFC8OIP21KXYDAc7RF+z9HU3md27OYTlO7p7D+ni7aYm19AYWSw08lM/X4c2Se1HpeeU0ksXkToT3xWsApfn9LTKcXHdx/gBm1BpIHMojn9XVLpo1/Gyc7G/uPSLLoa3uBTAWZxvwUdXC8QhPBlByPejkg/bKjkKDy1q/RD51hdtz8IdHn5oHJDyXysVQ1sams6eVDI1F7OtrncTcR1hvJFLhDLPcKesbaFZxGVm1N7OIQnXrzjtgHRWf3lJLoDdFTFzYEWa0DLX59Mwu+y47GiQM3NHa8b04WRb2VlZ+DwuBF+e0oO6ouDmrNHRDOY3QcsgkmtnJ0wIsYar9bHNWhfaMzygoCljPE+8F9vY9V7ikPs09S/Iy9SGCOKTV9auTAgTH6Q9yXf1oM5VFE/GUmR9FG3DcU6vQRNgN07BhslwhLvNFsfmv21e7s3o3YFEDtBJyQEXHDWLqzGTcZJqGgRJsPN3qhQLYXadbIuuRnamguzAhyEqzGkFH6McdAMHqQv4Bd+dptW6utBRX0IXTHiBnCtLMRpDWO+seA+3gnEQltjPoleCgZOctdSXt6iGY1ypA17dioD1INXoUB2OzRtprrt1JHpxobxysRVYmXFLfRoAe1SU2StBhzewKqWrMuSa/IDmJL8ugT79OlTSehduyeRaDdhfaw5HXq2YCfKUjWZzouBcrqTRsiGs5tq8rFA1KMNClLq8VLnSXtg+ZKH14moqbDxjfqexLFusKdKYYdoHLaItZ79gr7tIAUG3aySOgx8NtJbrwaJwTHO9gPfE/6BOV3yB1Q6JE5AxvO8dsQ0/eTAGUOPU2znEpCYOlEgLUEkpdTzFR3/mE6fXAMhZZYabQ52RcCmDAcQyfbIct/cmMnskBzhmYx9Kb4inBHZ7WwwCpaj22un8aYfSDKbWZS56zCzm+jPZHNMOZXw5aM70hVMXe4OLBK7ftM9tmpOga++oOziju3YwCZ/wgJHG7quxMXvfkKPdyStWX6jEMEGi+E/7Jz5CykivRtzkEVPass7YBxtLyOtj3EPZRp4Gwk4+mVY2V0pUzPFSttAr/ejOOlXn1VYUZMwrRTXwFAK2D5ghoyTL7tKjiS6HRsEc1BedUHhb1Whi9ExyN7Il8CVdxeV0TnvyaHZVAnI6Ez7nUsjDAezvuVbpGZZgf7CYU3I9fRt4n8jwaMAao/uV3p1do7URx4tgvfFruSDPccfrZQnO1VtrUrLLh6pWpHmuoHYqTcuaS++FltkZCfcbeVmCWPFXNGbiv1Tc/NVfvtr2RVeqcPpHfaiTJUJDbLIpeOgyclIWCyR8BW7Xo0nI/gvtGz23py2lwTY5nPO+bzNHIs0lCsdmdaxa1VenQHVBysNfv5crTMsZRjQ+NHyyQXkvyMhnSi5hy+p86YzsdAOEt42Q9jSjE7hkGPyJXmkHxK170whct8VItktfdxVWKbmXyabq3N7oE4orBoldmk3/XosYx8e9dccENwbU4/z1VI9E+5xiSqYIYanx87q3khbLv5jzTp7HfO8hMSTP5P+hR19/Y/gQpuEbvWuq1mL81fkE9vJP+Gm7ThZNpoZaQHKxc6G/amx5KkNWGeFzVSXN2dUt2dVt+dlNiWDg8HYM3WAdyGPS5m1doCWoyK26+Hs8/zmwP6qpNOB7xQbI6tQyqbUYXkktz9Jgo5zLL7IJwnHDkPJJx3tlVTbwHQmsGAznh3wzzh/F7HU83zTzCzn9XSnIYuuIXT61+V/lIKVzQ8ZfiGzMYBqxW2b/goqUib3bhDxcOow68VxhLngwXfU7NpUT3mUixrRmJ1HqAbAHyDVVc3BbLAfuf3LRfu7KlSJm8h2nsf8CiIhoK7oBh31e2KfZTsaPATd7S9d2nB05U5qLS/YRCFC/uJQGaFCAFZzAAEVxtBmnWbPqxdAO5rW/KCBfIiHF496VZKomR7O90U8aa9ii6j+M6/jTT5m8/J9b2+KaacbuXJx5TAJLkbzKe+LMPsYAlQ7ycM5ICRlN3Omhu7DYQu265Yo37H98R6RaJX/8PONJ0TT6mUbb740I37InVlgyFCk9PL0lOppHWNFlFHcCX3xHbWVjEKyjoZ9TQzcSJWb/xEBaZfWWjLbSK/2I2tBaemKjqJ2M+fkvlZ4ZHmoKcsr33UaYW4XGGrQ2keatFz+FaLjAeBeDZlRsCmzJejDz9zwjxpHMRIJ28sjJosrdaUy+B3cTUUl6qvXufqsmnBCX6mjy6thK4B69qua9kO0Med5HE5hpcIhpaIxSx6MGmmAUwmQPweVqVgk6yZ1ezEkpeNSDN+B47ys1AYJW19j1ktZ16IQjNGIc0HboNd7WqSMitJihvwdAclOZkBhlQUMa/t+k3zMWaHRd0HhwKjOcSUI+9w+HUBhkNiv3H+0L6aG5wUq/H7qkue4BeyM+ab3/eWd6vaveawzmDQAptcnT3j1uigqcUsfCZiFKU86CjiTY698XhH6YQz3FX6HNvETqigKgLDqj0HsHi692j08vur92v3EXqwfI/b8U1Om50+Ec46rnFLcHLbUO3KDsbXBGQ/fben0WuiyBfRutcupr3iz7PsvGn2XWZJdc8C+Zp5X3Zh1q5jLnbPboWvtGjlc9o5PNKRWPrMLLw1vZS39XFoC71fKJIq5b6XuGhX+lO/clyxD0yRPaHKn2V/Kt/V/0ZD1bUwDm/tyXCw8IsnvArzClwlZWcWklfHE8kKMT3mLdgkTOk+tlOhyBJk8cHgMxC47/IFiVsexlLD10dnyaO7yjOGjDfNIqAzK13S+S58uwHV/KcJto1uf0zDohHnS2QVmvrwMSsqLHGTtQMEoT3G1fXipF+ZK2ifhfesCamUeWg8j5CC1I5DEKUfA8zG/3uhTM9ZT+vnZv9ncq8ZXXSVRrTGs/1whUSX1kjvuoc3/pnUGrx5WAhXLDhpWocptG1cduUXJnu9hMzPSSJRkFsX7CGr2FXY4jZuIVBrDfJUmqRDUP5u5auYDK15BKKghDAwQ8Izo4gL26Bo2EiyxxQ8SvfTpH8N41r6Hs6KvCqOSeqiovzOutyv+4eDVxIVvMaAuhjKmgtbG4ai5rbWigc+npo8S8O7jDEdUKAtsmmyTdi+yOWUVzX+PiYAEg8w9YJhhrXtMmcroWsO1YUWoH96mBnkaqhnnEPiWDWAR3SIb5i2FMzJTmqytEofWROCI/URjBbFgMfntmlcY7/C8oVfdK/Iu+DaYnJ+A8gQNF7JvTYCbcv5uGqnjSZ0wesU4rCsC5ygG5UgZKpANljE98R1iqgQ7hkuqc31dgQ58H7KBakeBgueMMdVHuUg1WOSTLlADNxRJSGBh5vdL903QjFShpFdO5NgTyIt91IZ7qoyjo+zstrUKYkPqYwKlcPzX6tw3FrkIuxS0NQQVz8BSk3bdvrNHvBP16g8Jeo2x8H9PL5KgSBvaJ/dPGhdx7yVXzc8//g4eIVUS4yd39vykOG/yM0tPl/BzXDlnqotg8V8ZBPR6TWPphBpp6e8DgbJDYFnaa5UQ5juCiFtUGvMJZjlp1bw01TJgMXDFPZdRSpM+UTCtayIGNu6KnCRagqQYneDG9yvdYTmlqY16mj0lObNYl7WcC4vUgbJXbD7kwHiinPCbrtO9MmZZXwAeGofzUqA6qTIAvvxK5CJ71EeusjT1q2N/abplpAo4FSnNIJVgYp03yr0dVly5uvlagxYvNDnfulhuBCacz5wiTWwnRVoBNYFoFLEVNul23rMlQcNueWLp2FoQVCTo3EKEvxy/LYM5cjU+ktYaxRx8Erhm2VbLR2tgX+2pLLsueoC8NyE5JXBOiI2jGgSide1Yhz5BuVqMOQlG3GCiiy8R6zFTRfgzomZyKPAVCxe+MCHaQhCy/XhwQF8MbIkEOa/FydSkwVq2MJc1Wgk6iBrNenaYym9FWakR1/bw3wkzpew7my3SokkYYpJY2l9WYSr/g/Cw6z4OPS9zCrrLgSTFRqc3VnRnexa78o/PHc/bigtnttH2FMzkQReYNq4/OmJcSEMFU/EIMnqt3vzMUCge/5ucts3yaJSNx7QLthDAMukbgV3bR8qomD3btazMtW6KpTeAugwvNZ+XQ+meY8dEWCHcN1Y13Z3CXV5BnbZAY30kY62FAP6ApJCwAvQ8gJ45FVo1/cHSGjOyZfDUvTbnBiFD63SmTlbjHMZVZs1Stuwyi1wnUuhCZr+aYo5nGGDdGOOVpt4TZSJoZYP2w8tXnE6fX3XdLJ89rUBiN5wAD+d6BPF6h5plhe2st4CMCO8LIu2NzEg2wCjMQ9GjnijpS5XsN0PpczD2cVKKTlWEV9zP1LuvErkTIWUsrdZOHBNZdsiJOuxAah9MnEjZoCWeWk3s1WC4sRNNa+PEhoXslzkS454MuEwNo/yj5Ei5pLgQHNcHnNhMssDB2XhmpHg2Iqp8f5kOJEpLy6q4tkChTPvTQZqmpe8vXaHzciIXmRHMvqPk+/kFQq8f8vAlNgvntE1KqJ8jD1S2vV7GjI8eZSGtStDc13me5qCUex1087oV6+HlsfOdygHpKw6aeD4Jr1GdW+GczZV5DIZwSyR+F1wReB82P31aGk+cJVYAJCbo6YSispOcevun9Lb1KT38Vr7xOCG8P6F1qYZ/JaDgc9sNIfjm1TuF3hFp/lIayJ28Dxyp1RB8zllnV/It/UyBoDsc5zoDgYNlBc8R7/+YCsMkp+JM9Cx1hx066haU3ZmXsfetPBQ4i0Yh70AiIr8XSquSRGfTZuYrjExu4N4WA/RDpswXHsA1BLMXLS85tf7gJlkbsqUS97vJB6qd0i1hnA8uScOMlw9CYNkrtElOuZT2rCOYOb6AXUQLlQwTCWnDAwCXDpvd2qWUGgasKttNxqEGwzINlwEnARlbu53a/NPNLK0bdme7GkLCJ90ZKAbKtp7A8ry3XgRvR6Bbnu44Uvx4rowevOWvYtGagoGMTqSxl19Uqi13uJpxzAwJ0TGn7widsCAX4gqKJHwRSw64SokdN28uYDD65QnEZB1+dVDve5VVXMqKsDyR6WzP2nxkyCgdjJusYiiE6AWwNvn7hMQ0ANyySsOmIoHgKWJBwCaeg0kJpZQrK1tuNRhSyABmApgAgTA94w7f2IoSJLkeO2WOyxkhhk/s+HWTNth7Kx5osvOnLdq1yQFkR46MBNI4HzkZghknE8Fx3nxUQbgNcnfciGlipICQCqksUP4MUnuX1v+8y8Ch/lVIw7idevzQ/Et47//VfDXK2SEvadklcxOcrjObtRjBc/Gr1gnA2Bp3oNqq1N+drrcPy+2y6KsXmkcx/PoTt1yY0T0mVrBGiU9Nt+09zeFvl/y6NfDuwI6NMovU+neXjwBieBhSBcdyv5NSOhXJTIHGkfcpj8yES+sgz5sWRJqByB2QMXIGwiBjapSnoMyJmtZZokQ5fRNFuwWn/KHZ+fYlL281wPafMnfF8+KoSw0gio6+9sPqhDtKPRqJR3DMnfMg8GF+TyOj1hq3alvFdjQkzpTH4JyM96dTnON5sKdMk5K6r8lZ2q4v1o3tyv7cCgsuw19tsvVFvzsl6/B9JnPM1LzyrsyOZJ6sXtgOFrRazgsNHNclrXuRFe7bj5/5l0WNlH0KhbCNYBBi8A1/6mkff2veMBrcyePCDKfw9yq9X1Egx4xHZ7KePc2XxpkPaZxOuHx9MGBwO8zxHj39UMj4vW4VZ6QpZxlRL3ycgZgdvJMA6Z8+4g4Eoc6rCBJmuJpkNHPveMR4irSj4rD/Ul6t7wlsMiyT0dgmoN5pvIYIbsd0D/KooZpNtgCkqVIp3m/9LPKrhjPW0v/oFIrRWegkX9imZUx5VP6WXVh7kMWCYoEQMYYh0iiuX14sEy8Fw8I/JKHLKorKuP74JQ2eqp35Yd9989Ron9aZsNGYI7FRqve8ja3T1ZmcOauf8nXLKtVPuHU9M/kM+uWJYXhfBYv6EXxFw==","base64")).toString()),s_)});var Xi={};Kt(Xi,{convertToZip:()=>out,convertToZipWorker:()=>l_,extractArchiveTo:()=>Zfe,getDefaultTaskPool:()=>zfe,getTaskPoolForConfiguration:()=>Xfe,makeArchiveFromDirectory:()=>sut});function nut(t,e){switch(t){case"async":return new t2(l_,{poolSize:e});case"workers":return new r2((0,a_.getContent)(),{poolSize:e});default:throw new Error(`Assertion failed: Unknown value ${t} for taskPoolMode`)}}function zfe(){return typeof o_>"u"&&(o_=nut("workers",Ji.availableParallelism())),o_}function Xfe(t){return typeof t>"u"?zfe():ol(iut,t,()=>{let e=t.get("taskPoolMode"),r=t.get("taskPoolConcurrency");switch(e){case"async":return new t2(l_,{poolSize:r});case"workers":return new r2((0,a_.getContent)(),{poolSize:r});default:throw new Error(`Assertion failed: Unknown value ${e} for taskPoolMode`)}})}async function l_(t){let{tmpFile:e,tgz:r,compressionLevel:o,extractBufferOpts:a}=t,n=new zi(e,{create:!0,level:o,stats:Ea.makeDefaultStats()}),u=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return await Zfe(u,n,a),n.saveAndClose(),e}async function sut(t,{baseFs:e=new Rn,prefixPath:r=Bt.root,compressionLevel:o,inMemory:a=!1}={}){let n;if(a)n=new zi(null,{level:o});else{let A=await oe.mktempPromise(),p=K.join(A,"archive.zip");n=new zi(p,{create:!0,level:o})}let u=K.resolve(Bt.root,r);return await n.copyPromise(u,t,{baseFs:e,stableTime:!0,stableSort:!0}),n}async function out(t,e={}){let r=await oe.mktempPromise(),o=K.join(r,"archive.zip"),a=e.compressionLevel??e.configuration?.get("compressionLevel")??"mixed",n={prefixPath:e.prefixPath,stripComponents:e.stripComponents};return await(e.taskPool??Xfe(e.configuration)).run({tmpFile:o,tgz:t,compressionLevel:a,extractBufferOpts:n}),new zi(o,{level:e.compressionLevel})}async function*aut(t){let e=new Jfe.default.Parse,r=new Kfe.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",o=>{r.write(o)}),e.on("error",o=>{r.destroy(o)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let o of r){let a=o;yield a,a.resume()}}async function Zfe(t,e,{stripComponents:r=0,prefixPath:o=Bt.dot}={}){function a(n){if(n.path[0]==="/")return!0;let u=n.path.split(/\//g);return!!(u.some(A=>A==="..")||u.length<=r)}for await(let n of aut(t)){if(a(n))continue;let u=K.normalize(ue.toPortablePath(n.path)).replace(/\/$/,"").split(/\//g);if(u.length<=r)continue;let A=u.slice(r).join("/"),p=K.join(o,A),h=420;switch((n.type==="Directory"||((n.mode??0)&73)!==0)&&(h|=73),n.type){case"Directory":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.mkdirSync(p,{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.writeFileSync(p,await Vy(n),{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.symlinkSync(n.linkpath,p),e.lutimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break}}return e}var Kfe,Jfe,a_,o_,iut,$fe=Et(()=>{Ye();Pt();nA();Kfe=Be("stream"),Jfe=$e(qfe());Yfe();jl();a_=$e(Vfe());iut=new WeakMap});var tpe=_((c_,epe)=>{(function(t,e){typeof c_=="object"?epe.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(c_,function(){function t(a,n){var u=n?"\u2514":"\u251C";return a?u+="\u2500 ":u+="\u2500\u2500\u2510",u}function e(a,n){var u=[];for(var A in a)!a.hasOwnProperty(A)||n&&typeof a[A]=="function"||u.push(A);return u}function r(a,n,u,A,p,h,E){var I="",v=0,b,C,T=A.slice(0);if(T.push([n,u])&&A.length>0&&(A.forEach(function(U,J){J>0&&(I+=(U[1]?" ":"\u2502")+" "),!C&&U[0]===n&&(C=!0)}),I+=t(a,u)+a,p&&(typeof n!="object"||n instanceof Date)&&(I+=": "+n),C&&(I+=" (circular ref.)"),E(I)),!C&&typeof n=="object"){var L=e(n,h);L.forEach(function(U){b=++v===L.length,r(U,n[U],b,T,p,h,E)})}}var o={};return o.asLines=function(a,n,u,A){var p=typeof u!="function"?u:!1;r(".",a,!1,[],n,p,A||u)},o.asTree=function(a,n,u){var A="";return r(".",a,!1,[],n,u,function(p){A+=p+` +`}),A},o})});var $s={};Kt($s,{emitList:()=>lut,emitTree:()=>spe,treeNodeToJson:()=>ipe,treeNodeToTreeify:()=>npe});function npe(t,{configuration:e}){let r={},o=0,a=(n,u)=>{let A=Array.isArray(n)?n.entries():Object.entries(n);for(let[p,h]of A){if(!h)continue;let{label:E,value:I,children:v}=h,b=[];typeof E<"u"&&b.push(md(e,E,2)),typeof I<"u"&&b.push(Ot(e,I[0],I[1])),b.length===0&&b.push(md(e,`${p}`,2));let C=b.join(": ").trim(),T=`\0${o++}\0`,L=u[`${T}${C}`]={};typeof v<"u"&&a(v,L)}};if(typeof t.children>"u")throw new Error("The root node must only contain children");return a(t.children,r),r}function ipe(t){let e=r=>{if(typeof r.children>"u"){if(typeof r.value>"u")throw new Error("Assertion failed: Expected a value to be set if the children are missing");return yd(r.value[0],r.value[1])}let o=Array.isArray(r.children)?r.children.entries():Object.entries(r.children??{}),a=Array.isArray(r.children)?[]:{};for(let[n,u]of o)u&&(a[cut(n)]=e(u));return typeof r.value>"u"?a:{value:yd(r.value[0],r.value[1]),children:a}};return e(t)}function lut(t,{configuration:e,stdout:r,json:o}){let a=t.map(n=>({value:n}));spe({children:a},{configuration:e,stdout:r,json:o})}function spe(t,{configuration:e,stdout:r,json:o,separators:a=0}){if(o){let u=Array.isArray(t.children)?t.children.values():Object.values(t.children??{});for(let A of u)A&&r.write(`${JSON.stringify(ipe(A))} +`);return}let n=(0,rpe.asTree)(npe(t,{configuration:e}),!1,!1);if(n=n.replace(/\0[0-9]+\0/g,""),a>=1&&(n=n.replace(/^([├└]─)/gm,`\u2502 +$1`).replace(/^│\n/,"")),a>=2)for(let u=0;u<2;++u)n=n.replace(/^([│ ].{2}[├│ ].{2}[^\n]+\n)(([│ ]).{2}[├└].{2}[^\n]*\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3 \u2502 +$2`).replace(/^│\n/,"");if(a>=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(n)}function cut(t){return typeof t=="string"?t.replace(/^\0[0-9]+\0/,""):t}var rpe,ope=Et(()=>{rpe=$e(tpe());ql()});function n2(t){let e=t.match(uut);if(!e?.groups)throw new Error("Assertion failed: Expected the checksum to match the requested pattern");let r=e.groups.cacheVersion?parseInt(e.groups.cacheVersion):null;return{cacheKey:e.groups.cacheKey??null,cacheVersion:r,cacheSpec:e.groups.cacheSpec??null,hash:e.groups.hash}}var ape,u_,A_,Jb,Lr,uut,f_=Et(()=>{Ye();Pt();Pt();nA();ape=Be("crypto"),u_=$e(Be("fs"));Yl();rh();jl();xo();A_=Ky(process.env.YARN_CACHE_CHECKPOINT_OVERRIDE??process.env.YARN_CACHE_VERSION_OVERRIDE??9),Jb=Ky(process.env.YARN_CACHE_VERSION_OVERRIDE??10),Lr=class{constructor(e,{configuration:r,immutable:o=r.get("enableImmutableCache"),check:a=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,ape.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=o,this.check=a;let{cacheSpec:n,cacheKey:u}=Lr.getCacheKey(r);this.cacheSpec=n,this.cacheKey=u}static async find(e,{immutable:r,check:o}={}){let a=new Lr(e.get("cacheFolder"),{configuration:e,immutable:r,check:o});return await a.setup(),a}static getCacheKey(e){let r=e.get("compressionLevel"),o=r!=="mixed"?`c${r}`:"";return{cacheKey:[Jb,o].join(""),cacheSpec:o}}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;let e=`${this.configuration.get("globalFolder")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${aE(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let a=n2(r).hash.slice(0,10);return`${aE(e)}-${a}.zip`}isChecksumCompatible(e){if(e===null)return!1;let{cacheVersion:r,cacheSpec:o}=n2(e);if(r===null||r{let ae=new zi,we=K.join(Bt.root,sO(e));return ae.mkdirSync(we,{recursive:!0}),ae.writeJsonSync(K.join(we,dr.manifest),{name:fn(e),mocked:!0}),ae},E=async(ae,{isColdHit:we,controlPath:Pe=null})=>{if(Pe===null&&u.unstablePackages?.has(e.locatorHash))return{isValid:!0,hash:null};let g=r&&!we?n2(r).cacheKey:this.cacheKey,Ee=!u.skipIntegrityCheck||!r?`${g}/${await LS(ae)}`:r;if(Pe!==null){let ce=!u.skipIntegrityCheck||!r?`${this.cacheKey}/${await LS(Pe)}`:r;if(Ee!==ce)throw new zt(18,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}let De=null;switch(r!==null&&Ee!==r&&(this.check?De="throw":n2(r).cacheKey!==n2(Ee).cacheKey?De="update":De=this.configuration.get("checksumBehavior")),De){case null:case"update":return{isValid:!0,hash:Ee};case"ignore":return{isValid:!0,hash:r};case"reset":return{isValid:!1,hash:r};default:case"throw":throw new zt(18,"The remote archive doesn't match the expected checksum")}},I=async ae=>{if(!n)throw new Error(`Cache check required but no loader configured for ${jr(this.configuration,e)}`);let we=await n(),Pe=we.getRealPath();we.saveAndClose(),await oe.chmodPromise(Pe,420);let g=await E(ae,{controlPath:Pe,isColdHit:!1});if(!g.isValid)throw new Error("Assertion failed: Expected a valid checksum");return g.hash},v=async()=>{if(A===null||!await oe.existsPromise(A)){let ae=await n(),we=ae.getRealPath();return ae.saveAndClose(),{source:"loader",path:we}}return{source:"mirror",path:A}},b=async()=>{if(!n)throw new Error(`Cache entry required but missing for ${jr(this.configuration,e)}`);if(this.immutable)throw new zt(56,`Cache entry required but missing for ${jr(this.configuration,e)}`);let{path:ae,source:we}=await v(),{hash:Pe}=await E(ae,{isColdHit:!0}),g=this.getLocatorPath(e,Pe),Ee=[];we!=="mirror"&&A!==null&&Ee.push(async()=>{let ce=`${A}${this.cacheId}`;await oe.copyFilePromise(ae,ce,u_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(ce,420),await oe.renamePromise(ce,A)}),(!u.mirrorWriteOnly||A===null)&&Ee.push(async()=>{let ce=`${g}${this.cacheId}`;await oe.copyFilePromise(ae,ce,u_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(ce,420),await oe.renamePromise(ce,g)});let De=u.mirrorWriteOnly?A??g:g;return await Promise.all(Ee.map(ce=>ce())),[!1,De,Pe]},C=async()=>{let we=(async()=>{let Pe=u.unstablePackages?.has(e.locatorHash),g=Pe||!r||this.isChecksumCompatible(r)?this.getLocatorPath(e,r):null,Ee=g!==null?this.markedFiles.has(g)||await p.existsPromise(g):!1,De=!!u.mockedPackages?.has(e.locatorHash)&&(!this.check||!Ee),ce=De||Ee,ne=ce?o:a;if(ne&&ne(),ce){let ee=null,Ie=g;if(!De)if(this.check)ee=await I(Ie);else{let ke=await E(Ie,{isColdHit:!1});if(ke.isValid)ee=ke.hash;else return b()}return[De,Ie,ee]}else{if(this.immutable&&Pe)throw new zt(56,`Cache entry required but missing for ${jr(this.configuration,e)}; consider defining ${de.pretty(this.configuration,"supportedArchitectures",de.Type.CODE)} to cache packages for multiple systems`);return b()}})();this.mutexes.set(e.locatorHash,we);try{return await we}finally{this.mutexes.delete(e.locatorHash)}};for(let ae;ae=this.mutexes.get(e.locatorHash);)await ae;let[T,L,U]=await C();T||this.markedFiles.add(L);let J,te=T?()=>h():()=>new zi(L,{baseFs:p,readOnly:!0}),le=new ny(()=>wL(()=>J=te(),ae=>`Failed to open the cache entry for ${jr(this.configuration,e)}: ${ae}`),K),pe=new Uu(L,{baseFs:le,pathUtils:K}),Ae=()=>{J?.discardAndClose()},ye=u.unstablePackages?.has(e.locatorHash)?null:U;return[pe,Ae,ye]}},uut=/^(?:(?(?[0-9]+)(?.*))\/)?(?.*)$/});var zb,lpe=Et(()=>{zb=(r=>(r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE",r))(zb||{})});var Aut,sC,p_=Et(()=>{Pt();Nl();kf();xo();Aut=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,o)=>`${r}#commit=${o}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@.+(?:\/|(?:%2f)))?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,t=>`npm:${t}`],[/^https?:\/\/[^/]+\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>HS({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],sC=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:r}){let o=K.join(e.cwd,dr.lockfile);if(!oe.existsSync(o))return;let a=await oe.readFilePromise(o,"utf8"),n=Vi(a);if(Object.hasOwn(n,"__metadata"))return;let u=this.resolutions=new Map;for(let A of Object.keys(n)){let p=i1(A);if(!p){r.reportWarning(14,`Failed to parse the string "${A}" into a proper descriptor`);continue}let h=ba(p.range)?In(p,`npm:${p.range}`):p,{version:E,resolved:I}=n[A];if(!I)continue;let v;for(let[C,T]of Aut){let L=I.match(C);if(L){v=T(E,...L);break}}if(!v){r.reportWarning(14,`${qn(e.configuration,h)}: Only some patterns can be imported from legacy lockfiles (not "${I}")`);continue}let b=h;try{let C=Id(h.range),T=i1(C.selector,!0);T&&(b=T)}catch{}u.set(h.descriptorHash,Qs(b,v))}}supportsDescriptor(e,r){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let a=this.resolutions.get(e.descriptorHash);if(!a)throw new Error("Assertion failed: The resolution should have been registered");let n=tO(a),u=o.project.configuration.normalizeDependency(n);return await this.resolver.getCandidates(u,r,o)}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}});var AA,cpe=Et(()=>{Yl();L1();ql();AA=class extends Xs{constructor({configuration:r,stdout:o,suggestInstall:a=!0}){super();this.errorCount=0;zI(this,{configuration:r}),this.configuration=r,this.stdout=o,this.suggestInstall=a}static async start(r,o){let a=new this(r);try{await o(a)}catch(n){a.reportExceptionOnce(n)}finally{await a.finalize()}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(r){}reportCacheMiss(r){}startSectionSync(r,o){return o()}async startSectionPromise(r,o){return await o()}startTimerSync(r,o,a){return(typeof o=="function"?o:a)()}async startTimerPromise(r,o,a){return await(typeof o=="function"?o:a)()}reportSeparator(){}reportInfo(r,o){}reportWarning(r,o){}reportError(r,o){this.errorCount+=1,this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(r)}: ${o} +`)}reportProgress(r){return{...Promise.resolve().then(async()=>{for await(let{}of r);}),stop:()=>{}}}reportJson(r){}reportFold(r,o){}async finalize(){this.errorCount>0&&(this.stdout.write(` +`),this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. +`),this.suggestInstall&&this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help. +`))}formatNameWithHyperlink(r){return CU(r,{configuration:this.configuration,json:!1})}}});var oC,h_=Et(()=>{xo();oC=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(OS(e).locatorHash))}supportsLocator(e,r){return!!(r.project.originalPackages.has(e.locatorHash)&&!r.project.lockfileNeedsRefresh)}shouldPersistResolution(e,r){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){let a=o.project.storedResolutions.get(e.descriptorHash);if(a){let u=o.project.originalPackages.get(a);if(u)return[u]}let n=o.project.originalPackages.get(OS(e).locatorHash);if(n)return[n];throw new Error("Resolution expected from the lockfile data")}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.originalPackages.get(e.locatorHash);if(!o)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return o}}});function Wf(){}function fut(t,e,r,o,a){for(var n=0,u=e.length,A=0,p=0;nb.length?T:b}),h.value=t.join(E)}else h.value=t.join(r.slice(A,A+h.count));A+=h.count,h.added||(p+=h.count)}}var v=e[u-1];return u>1&&typeof v.value=="string"&&(v.added||v.removed)&&t.equals("",v.value)&&(e[u-2].value+=v.value,e.pop()),e}function put(t){return{newPos:t.newPos,components:t.components.slice(0)}}function hut(t,e){if(typeof t=="function")e.callback=t;else if(t)for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}function fpe(t,e,r){return r=hut(r,{ignoreWhitespace:!0}),E_.diff(t,e,r)}function gut(t,e,r){return C_.diff(t,e,r)}function Xb(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Xb=function(e){return typeof e}:Xb=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xb(t)}function g_(t){return yut(t)||Eut(t)||Cut(t)||wut()}function yut(t){if(Array.isArray(t))return d_(t)}function Eut(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function Cut(t,e){if(!!t){if(typeof t=="string")return d_(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return d_(t,e)}}function d_(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r"u"&&(u.context=4);var A=gut(r,o,u);if(!A)return;A.push({value:"",lines:[]});function p(U){return U.map(function(J){return" "+J})}for(var h=[],E=0,I=0,v=[],b=1,C=1,T=function(J){var te=A[J],le=te.lines||te.value.replace(/\n$/,"").split(` +`);if(te.lines=le,te.added||te.removed){var pe;if(!E){var Ae=A[J-1];E=b,I=C,Ae&&(v=u.context>0?p(Ae.lines.slice(-u.context)):[],E-=v.length,I-=v.length)}(pe=v).push.apply(pe,g_(le.map(function(ce){return(te.added?"+":"-")+ce}))),te.added?C+=le.length:b+=le.length}else{if(E)if(le.length<=u.context*2&&J=A.length-2&&le.length<=u.context){var g=/\n$/.test(r),Ee=/\n$/.test(o),De=le.length==0&&v.length>Pe.oldLines;!g&&De&&r.length>0&&v.splice(Pe.oldLines,0,"\\ No newline at end of file"),(!g&&!De||!Ee)&&v.push("\\ No newline at end of file")}h.push(Pe),E=0,I=0,v=[]}b+=le.length,C+=le.length}},L=0;L{Wf.prototype={diff:function(e,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=o.callback;typeof o=="function"&&(a=o,o={}),this.options=o;var n=this;function u(T){return a?(setTimeout(function(){a(void 0,T)},0),!0):T}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var A=r.length,p=e.length,h=1,E=A+p;o.maxEditLength&&(E=Math.min(E,o.maxEditLength));var I=[{newPos:-1,components:[]}],v=this.extractCommon(I[0],r,e,0);if(I[0].newPos+1>=A&&v+1>=p)return u([{value:this.join(r),count:r.length}]);function b(){for(var T=-1*h;T<=h;T+=2){var L=void 0,U=I[T-1],J=I[T+1],te=(J?J.newPos:0)-T;U&&(I[T-1]=void 0);var le=U&&U.newPos+1=A&&te+1>=p)return u(fut(n,L.components,r,e,n.useLongestToken));I[T]=L}h++}if(a)(function T(){setTimeout(function(){if(h>E)return a();b()||T()},0)})();else for(;h<=E;){var C=b();if(C)return C}},pushComponent:function(e,r,o){var a=e[e.length-1];a&&a.added===r&&a.removed===o?e[e.length-1]={count:a.count+1,added:r,removed:o}:e.push({count:1,added:r,removed:o})},extractCommon:function(e,r,o,a){for(var n=r.length,u=o.length,A=e.newPos,p=A-a,h=0;A+1"u"?r:u}:o;return typeof t=="string"?t:JSON.stringify(m_(t,null,null,a),a," ")};i2.equals=function(t,e){return Wf.prototype.equals.call(i2,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};y_=new Wf;y_.tokenize=function(t){return t.slice()};y_.join=y_.removeEmpty=function(t){return t}});var gpe=_((o3t,hpe)=>{var But=Hl(),vut=fE(),Dut=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Put=/^\w*$/;function Sut(t,e){if(But(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||vut(t)?!0:Put.test(t)||!Dut.test(t)||e!=null&&t in Object(e)}hpe.exports=Sut});var ype=_((a3t,mpe)=>{var dpe=_P(),xut="Expected a function";function I_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(xut);var r=function(){var o=arguments,a=e?e.apply(this,o):o[0],n=r.cache;if(n.has(a))return n.get(a);var u=t.apply(this,o);return r.cache=n.set(a,u)||n,u};return r.cache=new(I_.Cache||dpe),r}I_.Cache=dpe;mpe.exports=I_});var Cpe=_((l3t,Epe)=>{var but=ype(),kut=500;function Qut(t){var e=but(t,function(o){return r.size===kut&&r.clear(),o}),r=e.cache;return e}Epe.exports=Qut});var B_=_((c3t,wpe)=>{var Fut=Cpe(),Tut=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Rut=/\\(\\)?/g,Nut=Fut(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(Tut,function(r,o,a,n){e.push(a?n.replace(Rut,"$1"):o||r)}),e});wpe.exports=Nut});var jd=_((u3t,Ipe)=>{var Lut=Hl(),Mut=gpe(),Out=B_(),Uut=R1();function _ut(t,e){return Lut(t)?t:Mut(t,e)?[t]:Out(Uut(t))}Ipe.exports=_ut});var aC=_((A3t,Bpe)=>{var Hut=fE(),jut=1/0;function qut(t){if(typeof t=="string"||Hut(t))return t;var e=t+"";return e=="0"&&1/t==-jut?"-0":e}Bpe.exports=qut});var Zb=_((f3t,vpe)=>{var Gut=jd(),Yut=aC();function Wut(t,e){e=Gut(e,t);for(var r=0,o=e.length;t!=null&&r{var Vut=rS(),Kut=jd(),Jut=UI(),Dpe=il(),zut=aC();function Xut(t,e,r,o){if(!Dpe(t))return t;e=Kut(e,t);for(var a=-1,n=e.length,u=n-1,A=t;A!=null&&++a{var Zut=Zb(),$ut=v_(),eAt=jd();function tAt(t,e,r){for(var o=-1,a=e.length,n={};++o{function rAt(t,e){return t!=null&&e in Object(t)}bpe.exports=rAt});var D_=_((d3t,Qpe)=>{var nAt=jd(),iAt=LI(),sAt=Hl(),oAt=UI(),aAt=YP(),lAt=aC();function cAt(t,e,r){e=nAt(e,t);for(var o=-1,a=e.length,n=!1;++o{var uAt=kpe(),AAt=D_();function fAt(t,e){return t!=null&&AAt(t,e,uAt)}Fpe.exports=fAt});var Npe=_((y3t,Rpe)=>{var pAt=xpe(),hAt=Tpe();function gAt(t,e){return pAt(t,e,function(r,o){return hAt(t,o)})}Rpe.exports=gAt});var Upe=_((E3t,Ope)=>{var Lpe=fd(),dAt=LI(),mAt=Hl(),Mpe=Lpe?Lpe.isConcatSpreadable:void 0;function yAt(t){return mAt(t)||dAt(t)||!!(Mpe&&t&&t[Mpe])}Ope.exports=yAt});var jpe=_((C3t,Hpe)=>{var EAt=qP(),CAt=Upe();function _pe(t,e,r,o,a){var n=-1,u=t.length;for(r||(r=CAt),a||(a=[]);++n0&&r(A)?e>1?_pe(A,e-1,r,o,a):EAt(a,A):o||(a[a.length]=A)}return a}Hpe.exports=_pe});var Gpe=_((w3t,qpe)=>{var wAt=jpe();function IAt(t){var e=t==null?0:t.length;return e?wAt(t,1):[]}qpe.exports=IAt});var P_=_((I3t,Ype)=>{var BAt=Gpe(),vAt=pL(),DAt=hL();function PAt(t){return DAt(vAt(t,void 0,BAt),t+"")}Ype.exports=PAt});var S_=_((B3t,Wpe)=>{var SAt=Npe(),xAt=P_(),bAt=xAt(function(t,e){return t==null?{}:SAt(t,e)});Wpe.exports=bAt});var $b,Vpe=Et(()=>{Yl();$b=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return this.resolver.supportsDescriptor(e,r)}supportsLocator(e,r){return this.resolver.supportsLocator(e,r)}shouldPersistResolution(e,r){return this.resolver.shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.resolver.bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,o,a){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}}});var Qi,x_=Et(()=>{Yl();Qi=class extends Xs{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,r){return r()}async startSectionPromise(e,r){return await r()}startTimerSync(e,r,o){return(typeof r=="function"?r:o)()}async startTimerPromise(e,r,o){return await(typeof r=="function"?r:o)()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}reportFold(e,r){}async finalize(){}}});var Kpe,lC,b_=Et(()=>{Pt();Kpe=$e(RS());AE();Bd();ql();rh();kf();xo();lC=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.project=r,this.cwd=e}async setup(){this.manifest=await Mt.tryFind(this.cwd)??new Mt,this.relativeCwd=K.relative(this.project.cwd,this.cwd)||Bt.dot;let e=this.manifest.name?this.manifest.name:eA(null,`${this.computeCandidateName()}-${zs(this.relativeCwd).substring(0,6)}`);this.anchoredDescriptor=In(e,`${Xn.protocol}${this.relativeCwd}`),this.anchoredLocator=Qs(e,`${Xn.protocol}${this.relativeCwd}`);let r=this.manifest.workspaceDefinitions.map(({pattern:a})=>a);if(r.length===0)return;let o=await(0,Kpe.default)(r,{cwd:ue.fromPortablePath(this.cwd),onlyDirectories:!0,ignore:["**/node_modules","**/.git","**/.yarn"]});o.sort(),await o.reduce(async(a,n)=>{let u=K.resolve(this.cwd,ue.toPortablePath(n)),A=await oe.existsPromise(K.join(u,"package.json"));await a,A&&this.workspacesCwds.add(u)},Promise.resolve())}get anchoredPackage(){let e=this.project.storedPackages.get(this.anchoredLocator.locatorHash);if(!e)throw new Error(`Assertion failed: Expected workspace ${o1(this.project.configuration,this)} (${Ot(this.project.configuration,K.join(this.cwd,dr.manifest),yt.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);return e}accepts(e){let r=e.indexOf(":"),o=r!==-1?e.slice(0,r+1):null,a=r!==-1?e.slice(r+1):e;if(o===Xn.protocol&&K.normalize(a)===this.relativeCwd||o===Xn.protocol&&(a==="*"||a==="^"||a==="~"))return!0;let n=ba(a);return n?o===Xn.protocol?n.test(this.manifest.version??"0.0.0"):this.project.configuration.get("enableTransparentWorkspaces")&&this.manifest.version!==null?n.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?"root-workspace":`${K.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=Mt.hardDependencies}={}){let r=new Set,o=a=>{for(let n of e)for(let u of a.manifest[n].values()){let A=this.project.tryWorkspaceByDescriptor(u);A===null||r.has(A)||(r.add(A),o(A))}};return o(this),r}getRecursiveWorkspaceDependents({dependencies:e=Mt.hardDependencies}={}){let r=new Set,o=a=>{for(let n of this.project.workspaces)e.some(A=>[...n.manifest[A].values()].some(p=>{let h=this.project.tryWorkspaceByDescriptor(p);return h!==null&&n1(h.anchoredLocator,a.anchoredLocator)}))&&!r.has(n)&&(r.add(n),o(n))};return o(this),r}getRecursiveWorkspaceChildren(){let e=new Set([this]);for(let r of e)for(let o of r.workspacesCwds){let a=this.project.workspacesByCwd.get(o);a&&e.add(a)}return e.delete(this),Array.from(e)}async persistManifest(){let e={};this.manifest.exportTo(e);let r=K.join(this.cwd,Mt.fileName),o=`${JSON.stringify(e,null,this.manifest.indent)} +`;await oe.changeFilePromise(r,o,{automaticNewlines:!0}),this.manifest.raw=e}}});function NAt({project:t,allDescriptors:e,allResolutions:r,allPackages:o,accessibleLocators:a=new Set,optionalBuilds:n=new Set,peerRequirements:u=new Map,peerWarnings:A=[],volatileDescriptors:p=new Set}){let h=new Map,E=[],I=new Map,v=new Map,b=new Map,C=new Map,T=new Map,L=new Map(t.workspaces.map(Ae=>{let ye=Ae.anchoredLocator.locatorHash,ae=o.get(ye);if(typeof ae>"u")throw new Error("Assertion failed: The workspace should have an associated package");return[ye,$I(ae)]})),U=()=>{let Ae=oe.mktempSync(),ye=K.join(Ae,"stacktrace.log"),ae=String(E.length+1).length,we=E.map((Pe,g)=>`${`${g+1}.`.padStart(ae," ")} ${xa(Pe)} +`).join("");throw oe.writeFileSync(ye,we),oe.detachTemp(Ae),new zt(45,`Encountered a stack overflow when resolving peer dependencies; cf ${ue.fromPortablePath(ye)}`)},J=Ae=>{let ye=r.get(Ae.descriptorHash);if(typeof ye>"u")throw new Error("Assertion failed: The resolution should have been registered");let ae=o.get(ye);if(!ae)throw new Error("Assertion failed: The package could not be found");return ae},te=(Ae,ye,ae,{top:we,optional:Pe})=>{E.length>1e3&&U(),E.push(ye);let g=le(Ae,ye,ae,{top:we,optional:Pe});return E.pop(),g},le=(Ae,ye,ae,{top:we,optional:Pe})=>{if(a.has(ye.locatorHash))return;a.add(ye.locatorHash),Pe||n.delete(ye.locatorHash);let g=o.get(ye.locatorHash);if(!g)throw new Error(`Assertion failed: The package (${jr(t.configuration,ye)}) should have been registered`);let Ee=[],De=[],ce=[],ne=[],ee=[];for(let ke of Array.from(g.dependencies.values())){if(g.peerDependencies.has(ke.identHash)&&g.locatorHash!==we)continue;if(Sf(ke))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");p.delete(ke.descriptorHash);let ht=Pe;if(!ht){let Te=g.dependenciesMeta.get(fn(ke));if(typeof Te<"u"){let Je=Te.get(null);typeof Je<"u"&&Je.optional&&(ht=!0)}}let H=r.get(ke.descriptorHash);if(!H)throw new Error(`Assertion failed: The resolution (${qn(t.configuration,ke)}) should have been registered`);let lt=L.get(H)||o.get(H);if(!lt)throw new Error(`Assertion failed: The package (${H}, resolved from ${qn(t.configuration,ke)}) should have been registered`);if(lt.peerDependencies.size===0){te(ke,lt,new Map,{top:we,optional:ht});continue}let Re,Qe,be=new Set,_e;De.push(()=>{Re=nO(ke,ye.locatorHash),Qe=iO(lt,ye.locatorHash),g.dependencies.delete(ke.identHash),g.dependencies.set(Re.identHash,Re),r.set(Re.descriptorHash,Qe.locatorHash),e.set(Re.descriptorHash,Re),o.set(Qe.locatorHash,Qe),Ee.push([lt,Re,Qe])}),ce.push(()=>{_e=new Map;for(let Te of Qe.peerDependencies.values()){let Je=g.dependencies.get(Te.identHash);if(!Je&&r1(ye,Te)&&(Ae.identHash===ye.identHash?Je=Ae:(Je=In(ye,Ae.range),e.set(Je.descriptorHash,Je),r.set(Je.descriptorHash,ye.locatorHash),p.delete(Je.descriptorHash))),(!Je||Je.range==="missing:")&&Qe.dependencies.has(Te.identHash)){Qe.peerDependencies.delete(Te.identHash);continue}Je||(Je=In(Te,"missing:")),Qe.dependencies.set(Je.identHash,Je),Sf(Je)&&dd(b,Je.descriptorHash).add(Qe.locatorHash),I.set(Je.identHash,Je),Je.range==="missing:"&&be.add(Je.identHash),_e.set(Te.identHash,ae.get(Te.identHash)??Qe.locatorHash)}Qe.dependencies=new Map(ks(Qe.dependencies,([Te,Je])=>fn(Je)))}),ne.push(()=>{if(!o.has(Qe.locatorHash))return;let Te=h.get(lt.locatorHash);typeof Te=="number"&&Te>=2&&U();let Je=h.get(lt.locatorHash),He=typeof Je<"u"?Je+1:1;h.set(lt.locatorHash,He),te(Re,Qe,_e,{top:we,optional:ht}),h.set(lt.locatorHash,He-1)}),ee.push(()=>{let Te=g.dependencies.get(ke.identHash);if(typeof Te>"u")throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");let Je=r.get(Te.descriptorHash);if(typeof Je>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");if(dd(T,Je).add(ye.locatorHash),!!o.has(Qe.locatorHash)){for(let He of Qe.peerDependencies.values()){let x=_e.get(He.identHash);if(typeof x>"u")throw new Error("Assertion failed: Expected the peer dependency ident to be registered");Gy(Yy(C,x),fn(He)).push(Qe.locatorHash)}for(let He of be)Qe.dependencies.delete(He)}})}for(let ke of[...De,...ce])ke();let Ie;do{Ie=!0;for(let[ke,ht,H]of Ee){let lt=Yy(v,ke.locatorHash),Re=zs(...[...H.dependencies.values()].map(Te=>{let Je=Te.range!=="missing:"?r.get(Te.descriptorHash):"missing:";if(typeof Je>"u")throw new Error(`Assertion failed: Expected the resolution for ${qn(t.configuration,Te)} to have been registered`);return Je===we?`${Je} (top)`:Je}),ht.identHash),Qe=lt.get(Re);if(typeof Qe>"u"){lt.set(Re,ht);continue}if(Qe===ht)continue;o.delete(H.locatorHash),e.delete(ht.descriptorHash),r.delete(ht.descriptorHash),a.delete(H.locatorHash);let be=b.get(ht.descriptorHash)||[],_e=[g.locatorHash,...be];b.delete(ht.descriptorHash);for(let Te of _e){let Je=o.get(Te);typeof Je>"u"||(Je.dependencies.get(ht.identHash).descriptorHash!==Qe.descriptorHash&&(Ie=!1),Je.dependencies.set(ht.identHash,Qe))}}}while(!Ie);for(let ke of[...ne,...ee])ke()};for(let Ae of t.workspaces){let ye=Ae.anchoredLocator;p.delete(Ae.anchoredDescriptor.descriptorHash),te(Ae.anchoredDescriptor,ye,new Map,{top:ye.locatorHash,optional:!1})}let pe=new Map;for(let[Ae,ye]of T){let ae=o.get(Ae);if(typeof ae>"u")throw new Error("Assertion failed: Expected the root to be registered");let we=C.get(Ae);if(!(typeof we>"u"))for(let Pe of ye){let g=o.get(Pe);if(!(typeof g>"u")&&!!t.tryWorkspaceByLocator(g))for(let[Ee,De]of we){let ce=Js(Ee);if(g.peerDependencies.has(ce.identHash))continue;let ne=`p${zs(Pe,Ee,Ae).slice(0,5)}`;u.set(ne,{subject:Pe,requested:ce,rootRequester:Ae,allRequesters:De});let ee=ae.dependencies.get(ce.identHash);if(typeof ee<"u"){let Ie=J(ee),ke=Ie.version??"0.0.0",ht=new Set;for(let lt of De){let Re=o.get(lt);if(typeof Re>"u")throw new Error("Assertion failed: Expected the link to be registered");let Qe=Re.peerDependencies.get(ce.identHash);if(typeof Qe>"u")throw new Error("Assertion failed: Expected the ident to be registered");ht.add(Qe.range)}if(![...ht].every(lt=>{if(lt.startsWith(Xn.protocol)){if(!t.tryWorkspaceByLocator(Ie))return!1;lt=lt.slice(Xn.protocol.length),(lt==="^"||lt==="~")&&(lt="*")}return bf(ke,lt)})){let lt=ol(pe,Ie.locatorHash,()=>({type:2,requested:ce,subject:Ie,dependents:new Map,requesters:new Map,links:new Map,version:ke,hash:`p${Ie.locatorHash.slice(0,5)}`}));lt.dependents.set(g.locatorHash,g),lt.requesters.set(ae.locatorHash,ae);for(let Re of De)lt.links.set(Re,o.get(Re));A.push({type:1,subject:g,requested:ce,requester:ae,version:ke,hash:ne,requirementCount:De.length})}}else ae.peerDependenciesMeta.get(Ee)?.optional||A.push({type:0,subject:g,requested:ce,requester:ae,hash:ne})}}}A.push(...pe.values())}function LAt(t,e){let r=BL(t.peerWarnings,"type"),o=r[2]?.map(n=>{let u=Array.from(n.links.values(),E=>{let I=t.storedPackages.get(E.locatorHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the package to be registered");let v=I.peerDependencies.get(n.requested.identHash);if(typeof v>"u")throw new Error("Assertion failed: Expected the ident to be registered");return v.range}),A=n.links.size>1?"and other dependencies request":"requests",p=aO(u),h=p?lE(t.configuration,p):Ot(t.configuration,"but they have non-overlapping ranges!","redBright");return`${cs(t.configuration,n.requested)} is listed by your project with version ${s1(t.configuration,n.version)}, which doesn't satisfy what ${cs(t.configuration,n.requesters.values().next().value)} (${Ot(t.configuration,n.hash,yt.CODE)}) ${A} (${h}).`})??[],a=r[0]?.map(n=>`${jr(t.configuration,n.subject)} doesn't provide ${cs(t.configuration,n.requested)} (${Ot(t.configuration,n.hash,yt.CODE)}), requested by ${cs(t.configuration,n.requester)}.`)??[];e.startSectionSync({reportFooter:()=>{e.reportWarning(86,`Some peer dependencies are incorrectly met; run ${Ot(t.configuration,"yarn explain peer-requirements ",yt.CODE)} for details, where ${Ot(t.configuration,"",yt.CODE)} is the six-letter p-prefixed code.`)},skipIfEmpty:!0},()=>{for(let n of ks(o,u=>zy.default(u)))e.reportWarning(60,n);for(let n of ks(a,u=>zy.default(u)))e.reportWarning(2,n)})}var ek,tk,rk,Xpe,F_,Q_,T_,nk,kAt,QAt,Jpe,FAt,TAt,RAt,pl,k_,ik,zpe,St,Zpe=Et(()=>{Pt();Pt();Nl();qt();ek=Be("crypto");w_();tk=$e(S_()),rk=$e(nd()),Xpe=$e(zn()),F_=Be("util"),Q_=$e(Be("v8")),T_=$e(Be("zlib"));f_();D1();p_();h_();AE();fO();Yl();Vpe();L1();x_();Bd();b_();VS();ql();rh();jl();Dx();DU();kf();xo();nk=Ky(process.env.YARN_LOCKFILE_VERSION_OVERRIDE??8),kAt=3,QAt=/ *, */g,Jpe=/\/$/,FAt=32,TAt=(0,F_.promisify)(T_.default.gzip),RAt=(0,F_.promisify)(T_.default.gunzip),pl=(r=>(r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build",r))(pl||{}),k_={restoreLinkersCustomData:["linkersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["skippedBuilds","storedBuildState"]},ik=(o=>(o[o.NotProvided=0]="NotProvided",o[o.NotCompatible=1]="NotCompatible",o[o.NotCompatibleAggregate=2]="NotCompatibleAggregate",o))(ik||{}),zpe=t=>zs(`${kAt}`,t),St=class{constructor(e,{configuration:r}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.skippedBuilds=new Set;this.lockfileLastVersion=null;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.peerWarnings=[];this.linkersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){if(!e.projectCwd)throw new it(`No project found in ${r}`);let o=e.projectCwd,a=r,n=null;for(;n!==e.projectCwd;){if(n=a,oe.existsSync(K.join(n,dr.manifest))){o=n;break}a=K.dirname(n)}let u=new St(e.projectCwd,{configuration:e});Ve.telemetry?.reportProject(u.cwd),await u.setupResolutions(),await u.setupWorkspaces(),Ve.telemetry?.reportWorkspaceCount(u.workspaces.length),Ve.telemetry?.reportDependencyCount(u.workspaces.reduce((C,T)=>C+T.manifest.dependencies.size+T.manifest.devDependencies.size,0));let A=u.tryWorkspaceByCwd(o);if(A)return{project:u,workspace:A,locator:A.anchoredLocator};let p=await u.findLocatorForLocation(`${o}/`,{strict:!0});if(p)return{project:u,locator:p,workspace:null};let h=Ot(e,u.cwd,yt.PATH),E=Ot(e,K.relative(u.cwd,o),yt.PATH),I=`- If ${h} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,v=`- If ${h} is intended to be a project, it might be that you forgot to list ${E} in its workspace configuration.`,b=`- Finally, if ${h} is fine and you intend ${E} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new it(`The nearest package directory (${Ot(e,o,yt.PATH)}) doesn't seem to be part of the project declared in ${Ot(e,u.cwd,yt.PATH)}. + +${[I,v,b].join(` +`)}`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=K.join(this.cwd,dr.lockfile),r=this.configuration.get("defaultLanguageName");if(oe.existsSync(e)){let o=await oe.readFilePromise(e,"utf8");this.lockFileChecksum=zpe(o);let a=Vi(o);if(a.__metadata){let n=a.__metadata.version,u=a.__metadata.cacheKey;this.lockfileLastVersion=n,this.lockfileNeedsRefresh=n"u")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${A})`);let h=xf(p.resolution,!0),E=new Mt;E.load(p,{yamlCompatibilityMode:!0});let I=E.version,v=E.languageName||r,b=p.linkType.toUpperCase(),C=p.conditions??null,T=E.dependencies,L=E.peerDependencies,U=E.dependenciesMeta,J=E.peerDependenciesMeta,te=E.bin;if(p.checksum!=null){let pe=typeof u<"u"&&!p.checksum.includes("/")?`${u}/${p.checksum}`:p.checksum;this.storedChecksums.set(h.locatorHash,pe)}let le={...h,version:I,languageName:v,linkType:b,conditions:C,dependencies:T,peerDependencies:L,dependenciesMeta:U,peerDependenciesMeta:J,bin:te};this.originalPackages.set(le.locatorHash,le);for(let pe of A.split(QAt)){let Ae=nh(pe);n<=6&&(Ae=this.configuration.normalizeDependency(Ae),Ae=In(Ae,Ae.range.replace(/^patch:[^@]+@(?!npm(:|%3A))/,"$1npm%3A"))),this.storedDescriptors.set(Ae.descriptorHash,Ae),this.storedResolutions.set(Ae.descriptorHash,h.locatorHash)}}}else o.includes("yarn lockfile v1")&&(this.lockfileLastVersion=-1)}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,r=(0,rk.default)(4),o=async(a,n)=>{if(e.has(n))return a;e.add(n);let u=new lC(n,{project:this});await r(()=>u.setup());let A=a.then(()=>{this.addWorkspace(u)});return Array.from(u.workspacesCwds).reduce(o,A)};await o(Promise.resolve(),this.cwd)}addWorkspace(e){let r=this.workspacesByIdent.get(e.anchoredLocator.identHash);if(typeof r<"u")throw new Error(`Duplicate workspace name ${cs(this.configuration,e.anchoredLocator)}: ${ue.fromPortablePath(e.cwd)} conflicts with ${ue.fromPortablePath(r.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.anchoredLocator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){K.isAbsolute(e)||(e=K.resolve(this.cwd,e)),e=K.normalize(e).replace(/\/+$/,"");let r=this.workspacesByCwd.get(e);return r||null}getWorkspaceByCwd(e){let r=this.tryWorkspaceByCwd(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByFilePath(e){let r=null;for(let o of this.workspaces)K.relative(o.cwd,e).startsWith("../")||r&&r.cwd.length>=o.cwd.length||(r=o);return r||null}getWorkspaceByFilePath(e){let r=this.tryWorkspaceByFilePath(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByIdent(e){let r=this.workspacesByIdent.get(e.identHash);return typeof r>"u"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${cs(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){if(e.range.startsWith(Xn.protocol)){let o=e.range.slice(Xn.protocol.length);if(o!=="^"&&o!=="~"&&o!=="*"&&!ba(o))return this.tryWorkspaceByCwd(o)}let r=this.tryWorkspaceByIdent(e);return r===null||(Sf(e)&&(e=e1(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${qn(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(Hc(e)&&(e=t1(e)),r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${jr(this.configuration,e)})`);return r}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if("descriptorHash"in e){let r=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let o=new Set(this.storedResolutions.values());typeof r<"u"&&!o.has(r)&&this.deleteLocator(r)}if("locatorHash"in e){this.deleteLocator(e.locatorHash);for(let[r,o]of this.storedResolutions)o===e.locatorHash&&this.deleteDescriptor(r)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),r=new Map;for(let[o,a]of this.storedResolutions.entries()){let n=r.get(a);n||r.set(a,n=new Set),n.add(o)}for(let o of this.originalPackages.values()){let a;try{a=e.shouldPersistResolution(o,{project:this,resolver:e})}catch{a=!1}if(!a){this.deleteLocator(o.locatorHash);let n=r.get(o.locatorHash);if(n){r.delete(o.locatorHash);for(let u of n)this.deleteDescriptor(u)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,o]of e.dependencies)Sf(o)&&e.dependencies.set(r,e1(o))}getDependencyMeta(e,r){let o={},n=this.topLevelWorkspace.manifest.dependenciesMeta.get(fn(e));if(!n)return o;let u=n.get(null);if(u&&Object.assign(o,u),r===null||!Xpe.default.valid(r))return o;for(let[A,p]of n)A!==null&&A===r&&Object.assign(o,p);return o}async findLocatorForLocation(e,{strict:r=!1}={}){let o=new Qi,a=this.configuration.getLinkers(),n={project:this,report:o};for(let u of a){let A=await u.findPackageLocator(e,n);if(A){if(r&&(await u.findPackageLocation(A,n)).replace(Jpe,"")!==e.replace(Jpe,""))continue;return A}}return null}async loadUserConfig(){let e=K.join(this.cwd,".pnp.cjs");await oe.existsPromise(e)&&vf(e).setup();let r=K.join(this.cwd,"yarn.config.cjs");return await oe.existsPromise(r)?vf(r):null}async preparePackage(e,{resolver:r,resolveOptions:o}){let a=await this.configuration.getPackageExtensions(),n=this.configuration.normalizePackage(e,{packageExtensions:a});for(let[u,A]of n.dependencies){let p=await this.configuration.reduceHook(E=>E.reduceDependency,A,this,n,A,{resolver:r,resolveOptions:o});if(!r1(A,p))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let h=r.bindDescriptor(p,n,o);n.dependencies.set(u,h)}return n}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions();let r=new Map(this.originalPackages),o=[];e.lockfileOnly||this.forgetTransientResolutions();let a=e.resolver||this.configuration.makeResolver(),n=new sC(a);await n.setup(this,{report:e.report});let u=e.lockfileOnly?[new $b(a)]:[n,a],A=new vd([new oC(a),...u]),p=new vd([...u]),h=this.configuration.makeFetcher(),E=e.lockfileOnly?{project:this,report:e.report,resolver:A}:{project:this,report:e.report,resolver:A,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:h,cacheOptions:{mirrorWriteOnly:!0}}},I=new Map,v=new Map,b=new Map,C=new Map,T=new Map,L=new Map,U=this.topLevelWorkspace.anchoredLocator,J=new Set,te=[],le=_4(),pe=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(Xs.progressViaTitle(),async ce=>{let ne=async H=>{let lt=await Wy(async()=>await A.resolve(H,E),_e=>`${jr(this.configuration,H)}: ${_e}`);if(!n1(H,lt))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${jr(this.configuration,H)} to ${jr(this.configuration,lt)})`);C.set(lt.locatorHash,lt),!r.delete(lt.locatorHash)&&!this.tryWorkspaceByLocator(lt)&&o.push(lt);let Qe=await this.preparePackage(lt,{resolver:A,resolveOptions:E}),be=Uc([...Qe.dependencies.values()].map(_e=>ht(_e)));return te.push(be),be.catch(()=>{}),v.set(Qe.locatorHash,Qe),Qe},ee=async H=>{let lt=T.get(H.locatorHash);if(typeof lt<"u")return lt;let Re=Promise.resolve().then(()=>ne(H));return T.set(H.locatorHash,Re),Re},Ie=async(H,lt)=>{let Re=await ht(lt);return I.set(H.descriptorHash,H),b.set(H.descriptorHash,Re.locatorHash),Re},ke=async H=>{ce.setTitle(qn(this.configuration,H));let lt=this.resolutionAliases.get(H.descriptorHash);if(typeof lt<"u")return Ie(H,this.storedDescriptors.get(lt));let Re=A.getResolutionDependencies(H,E),Qe=Object.fromEntries(await Uc(Object.entries(Re).map(async([Te,Je])=>{let He=A.bindDescriptor(Je,U,E),x=await ht(He);return J.add(x.locatorHash),[Te,x]}))),_e=(await Wy(async()=>await A.getCandidates(H,Qe,E),Te=>`${qn(this.configuration,H)}: ${Te}`))[0];if(typeof _e>"u")throw new zt(82,`${qn(this.configuration,H)}: No candidates found`);if(e.checkResolutions){let{locators:Te}=await p.getSatisfying(H,Qe,[_e],{...E,resolver:p});if(!Te.find(Je=>Je.locatorHash===_e.locatorHash))throw new zt(78,`Invalid resolution ${XI(this.configuration,H,_e)}`)}return I.set(H.descriptorHash,H),b.set(H.descriptorHash,_e.locatorHash),ee(_e)},ht=H=>{let lt=L.get(H.descriptorHash);if(typeof lt<"u")return lt;I.set(H.descriptorHash,H);let Re=Promise.resolve().then(()=>ke(H));return L.set(H.descriptorHash,Re),Re};for(let H of this.workspaces){let lt=H.anchoredDescriptor;te.push(ht(lt))}for(;te.length>0;){let H=[...te];te.length=0,await Uc(H)}});let Ae=sl(r.values(),ce=>this.tryWorkspaceByLocator(ce)?sl.skip:ce);if(o.length>0||Ae.length>0){let ce=new Set(this.workspaces.flatMap(H=>{let lt=v.get(H.anchoredLocator.locatorHash);if(!lt)throw new Error("Assertion failed: The workspace should have been resolved");return Array.from(lt.dependencies.values(),Re=>{let Qe=b.get(Re.descriptorHash);if(!Qe)throw new Error("Assertion failed: The resolution should have been registered");return Qe})})),ne=H=>ce.has(H.locatorHash)?"0":"1",ee=H=>xa(H),Ie=ks(o,[ne,ee]),ke=ks(Ae,[ne,ee]),ht=e.report.getRecommendedLength();Ie.length>0&&e.report.reportInfo(85,`${Ot(this.configuration,"+",yt.ADDED)} ${cS(this.configuration,Ie,ht)}`),ke.length>0&&e.report.reportInfo(85,`${Ot(this.configuration,"-",yt.REMOVED)} ${cS(this.configuration,ke,ht)}`)}let ye=new Set(this.resolutionAliases.values()),ae=new Set(v.keys()),we=new Set,Pe=new Map,g=[];NAt({project:this,accessibleLocators:we,volatileDescriptors:ye,optionalBuilds:ae,peerRequirements:Pe,peerWarnings:g,allDescriptors:I,allResolutions:b,allPackages:v});for(let ce of J)ae.delete(ce);for(let ce of ye)I.delete(ce),b.delete(ce);let Ee=new Set,De=new Set;for(let ce of v.values())ce.conditions!=null&&(!ae.has(ce.locatorHash)||(qS(ce,pe)||(qS(ce,le)&&e.report.reportWarningOnce(77,`${jr(this.configuration,ce)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${Ot(this.configuration,"supportedArchitectures",yt.SETTING)} setting`),De.add(ce.locatorHash)),Ee.add(ce.locatorHash)));this.storedResolutions=b,this.storedDescriptors=I,this.storedPackages=v,this.accessibleLocators=we,this.conditionalLocators=Ee,this.disabledLocators=De,this.originalPackages=C,this.optionalBuilds=ae,this.peerRequirements=Pe,this.peerWarnings=g}async fetchEverything({cache:e,report:r,fetcher:o,mode:a,persistProject:n=!0}){let u={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},A=o||this.configuration.makeFetcher(),p={checksums:this.storedChecksums,project:this,cache:e,fetcher:A,report:r,cacheOptions:u},h=Array.from(new Set(ks(this.storedResolutions.values(),[C=>{let T=this.storedPackages.get(C);if(!T)throw new Error("Assertion failed: The locator should have been registered");return xa(T)}])));a==="update-lockfile"&&(h=h.filter(C=>!this.storedChecksums.has(C)));let E=!1,I=Xs.progressViaCounter(h.length);await r.reportProgress(I);let v=(0,rk.default)(FAt);if(await Uc(h.map(C=>v(async()=>{let T=this.storedPackages.get(C);if(!T)throw new Error("Assertion failed: The locator should have been registered");if(Hc(T))return;let L;try{L=await A.fetch(T,p)}catch(U){U.message=`${jr(this.configuration,T)}: ${U.message}`,r.reportExceptionOnce(U),E=U;return}L.checksum!=null?this.storedChecksums.set(T.locatorHash,L.checksum):this.storedChecksums.delete(T.locatorHash),L.releaseFs&&L.releaseFs()}).finally(()=>{I.tick()}))),E)throw E;let b=n&&a!=="update-lockfile"?await this.cacheCleanup({cache:e,report:r}):null;if(r.cacheMisses.size>0||b){let T=(await Promise.all([...r.cacheMisses].map(async Ae=>{let ye=this.storedPackages.get(Ae),ae=this.storedChecksums.get(Ae)??null,we=e.getLocatorPath(ye,ae);return(await oe.statPromise(we)).size}))).reduce((Ae,ye)=>Ae+ye,0)-(b?.size??0),L=r.cacheMisses.size,U=b?.count??0,J=`${nS(L,{zero:"No new packages",one:"A package was",more:`${Ot(this.configuration,L,yt.NUMBER)} packages were`})} added to the project`,te=`${nS(U,{zero:"none were",one:"one was",more:`${Ot(this.configuration,U,yt.NUMBER)} were`})} removed`,le=T!==0?` (${Ot(this.configuration,T,yt.SIZE_DIFF)})`:"",pe=U>0?L>0?`${J}, and ${te}${le}.`:`${J}, but ${te}${le}.`:`${J}${le}.`;r.reportInfo(13,pe)}}async linkEverything({cache:e,report:r,fetcher:o,mode:a}){let n={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},u=o||this.configuration.makeFetcher(),A={checksums:this.storedChecksums,project:this,cache:e,fetcher:u,report:r,cacheOptions:n},p=this.configuration.getLinkers(),h={project:this,report:r},E=new Map(p.map(ce=>{let ne=ce.makeInstaller(h),ee=ce.getCustomDataKey(),Ie=this.linkersCustomData.get(ee);return typeof Ie<"u"&&ne.attachCustomData(Ie),[ce,ne]})),I=new Map,v=new Map,b=new Map,C=new Map(await Uc([...this.accessibleLocators].map(async ce=>{let ne=this.storedPackages.get(ce);if(!ne)throw new Error("Assertion failed: The locator should have been registered");return[ce,await u.fetch(ne,A)]}))),T=[],L=new Set,U=[];for(let ce of this.accessibleLocators){let ne=this.storedPackages.get(ce);if(typeof ne>"u")throw new Error("Assertion failed: The locator should have been registered");let ee=C.get(ne.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The fetch result should have been registered");let Ie=[],ke=H=>{Ie.push(H)},ht=this.tryWorkspaceByLocator(ne);if(ht!==null){let H=[],{scripts:lt}=ht.manifest;for(let Qe of["preinstall","install","postinstall"])lt.has(Qe)&&H.push({type:0,script:Qe});try{for(let[Qe,be]of E)if(Qe.supportsPackage(ne,h)&&(await be.installPackage(ne,ee,{holdFetchResult:ke})).buildRequest!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{Ie.length===0?ee.releaseFs?.():T.push(Uc(Ie).catch(()=>{}).then(()=>{ee.releaseFs?.()}))}let Re=K.join(ee.packageFs.getRealPath(),ee.prefixPath);v.set(ne.locatorHash,Re),!Hc(ne)&&H.length>0&&b.set(ne.locatorHash,{buildDirectives:H,buildLocations:[Re]})}else{let H=p.find(Qe=>Qe.supportsPackage(ne,h));if(!H)throw new zt(12,`${jr(this.configuration,ne)} isn't supported by any available linker`);let lt=E.get(H);if(!lt)throw new Error("Assertion failed: The installer should have been registered");let Re;try{Re=await lt.installPackage(ne,ee,{holdFetchResult:ke})}finally{Ie.length===0?ee.releaseFs?.():T.push(Uc(Ie).then(()=>{}).then(()=>{ee.releaseFs?.()}))}I.set(ne.locatorHash,H),v.set(ne.locatorHash,Re.packageLocation),Re.buildRequest&&Re.packageLocation&&(Re.buildRequest.skipped?(L.add(ne.locatorHash),this.skippedBuilds.has(ne.locatorHash)||U.push([ne,Re.buildRequest.explain])):b.set(ne.locatorHash,{buildDirectives:Re.buildRequest.directives,buildLocations:[Re.packageLocation]}))}}let J=new Map;for(let ce of this.accessibleLocators){let ne=this.storedPackages.get(ce);if(!ne)throw new Error("Assertion failed: The locator should have been registered");let ee=this.tryWorkspaceByLocator(ne)!==null,Ie=async(ke,ht)=>{let H=v.get(ne.locatorHash);if(typeof H>"u")throw new Error(`Assertion failed: The package (${jr(this.configuration,ne)}) should have been registered`);let lt=[];for(let Re of ne.dependencies.values()){let Qe=this.storedResolutions.get(Re.descriptorHash);if(typeof Qe>"u")throw new Error(`Assertion failed: The resolution (${qn(this.configuration,Re)}, from ${jr(this.configuration,ne)})should have been registered`);let be=this.storedPackages.get(Qe);if(typeof be>"u")throw new Error(`Assertion failed: The package (${Qe}, resolved from ${qn(this.configuration,Re)}) should have been registered`);let _e=this.tryWorkspaceByLocator(be)===null?I.get(Qe):null;if(typeof _e>"u")throw new Error(`Assertion failed: The package (${Qe}, resolved from ${qn(this.configuration,Re)}) should have been registered`);_e===ke||_e===null?v.get(be.locatorHash)!==null&<.push([Re,be]):!ee&&H!==null&&Gy(J,Qe).push(H)}H!==null&&await ht.attachInternalDependencies(ne,lt)};if(ee)for(let[ke,ht]of E)ke.supportsPackage(ne,h)&&await Ie(ke,ht);else{let ke=I.get(ne.locatorHash);if(!ke)throw new Error("Assertion failed: The linker should have been found");let ht=E.get(ke);if(!ht)throw new Error("Assertion failed: The installer should have been registered");await Ie(ke,ht)}}for(let[ce,ne]of J){let ee=this.storedPackages.get(ce);if(!ee)throw new Error("Assertion failed: The package should have been registered");let Ie=I.get(ee.locatorHash);if(!Ie)throw new Error("Assertion failed: The linker should have been found");let ke=E.get(Ie);if(!ke)throw new Error("Assertion failed: The installer should have been registered");await ke.attachExternalDependents(ee,ne)}let te=new Map;for(let[ce,ne]of E){let ee=await ne.finalizeInstall();for(let Ie of ee?.records??[])Ie.buildRequest.skipped?(L.add(Ie.locator.locatorHash),this.skippedBuilds.has(Ie.locator.locatorHash)||U.push([Ie.locator,Ie.buildRequest.explain])):b.set(Ie.locator.locatorHash,{buildDirectives:Ie.buildRequest.directives,buildLocations:Ie.buildLocations});typeof ee?.customData<"u"&&te.set(ce.getCustomDataKey(),ee.customData)}if(this.linkersCustomData=te,await Uc(T),a==="skip-build")return;for(let[,ce]of ks(U,([ne])=>xa(ne)))ce(r);let le=new Set(this.storedPackages.keys()),pe=new Set(b.keys());for(let ce of pe)le.delete(ce);let Ae=(0,ek.createHash)("sha512");Ae.update(process.versions.node),await this.configuration.triggerHook(ce=>ce.globalHashGeneration,this,ce=>{Ae.update("\0"),Ae.update(ce)});let ye=Ae.digest("hex"),ae=new Map,we=ce=>{let ne=ae.get(ce.locatorHash);if(typeof ne<"u")return ne;let ee=this.storedPackages.get(ce.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The package should have been registered");let Ie=(0,ek.createHash)("sha512");Ie.update(ce.locatorHash),ae.set(ce.locatorHash,"");for(let ke of ee.dependencies.values()){let ht=this.storedResolutions.get(ke.descriptorHash);if(typeof ht>"u")throw new Error(`Assertion failed: The resolution (${qn(this.configuration,ke)}) should have been registered`);let H=this.storedPackages.get(ht);if(typeof H>"u")throw new Error("Assertion failed: The package should have been registered");Ie.update(we(H))}return ne=Ie.digest("hex"),ae.set(ce.locatorHash,ne),ne},Pe=(ce,ne)=>{let ee=(0,ek.createHash)("sha512");ee.update(ye),ee.update(we(ce));for(let Ie of ne)ee.update(Ie);return ee.digest("hex")},g=new Map,Ee=!1,De=ce=>{let ne=new Set([ce.locatorHash]);for(let ee of ne){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");for(let ke of Ie.dependencies.values()){let ht=this.storedResolutions.get(ke.descriptorHash);if(!ht)throw new Error(`Assertion failed: The resolution (${qn(this.configuration,ke)}) should have been registered`);if(ht!==ce.locatorHash&&pe.has(ht))return!1;let H=this.storedPackages.get(ht);if(!H)throw new Error("Assertion failed: The package should have been registered");let lt=this.tryWorkspaceByLocator(H);if(lt){if(lt.anchoredLocator.locatorHash!==ce.locatorHash&&pe.has(lt.anchoredLocator.locatorHash))return!1;ne.add(lt.anchoredLocator.locatorHash)}ne.add(ht)}}return!0};for(;pe.size>0;){let ce=pe.size,ne=[];for(let ee of pe){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");if(!De(Ie))continue;let ke=b.get(Ie.locatorHash);if(!ke)throw new Error("Assertion failed: The build directive should have been registered");let ht=Pe(Ie,ke.buildLocations);if(this.storedBuildState.get(Ie.locatorHash)===ht){g.set(Ie.locatorHash,ht),pe.delete(ee);continue}Ee||(await this.persistInstallStateFile(),Ee=!0),this.storedBuildState.has(Ie.locatorHash)?r.reportInfo(8,`${jr(this.configuration,Ie)} must be rebuilt because its dependency tree changed`):r.reportInfo(7,`${jr(this.configuration,Ie)} must be built because it never has been before or the last one failed`);let H=ke.buildLocations.map(async lt=>{if(!K.isAbsolute(lt))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${lt})`);for(let Re of ke.buildDirectives){let Qe=`# This file contains the result of Yarn building a package (${xa(Ie)}) +`;switch(Re.type){case 0:Qe+=`# Script name: ${Re.script} +`;break;case 1:Qe+=`# Script code: ${Re.script} +`;break}let be=null;if(!await oe.mktempPromise(async Te=>{let Je=K.join(Te,"build.log"),{stdout:He,stderr:x}=this.configuration.getSubprocessStreams(Je,{header:Qe,prefix:jr(this.configuration,Ie),report:r}),w;try{switch(Re.type){case 0:w=await Vx(Ie,Re.script,[],{cwd:lt,project:this,stdin:be,stdout:He,stderr:x});break;case 1:w=await wU(Ie,Re.script,[],{cwd:lt,project:this,stdin:be,stdout:He,stderr:x});break}}catch(F){x.write(F.stack),w=1}if(He.end(),x.end(),w===0)return!0;oe.detachTemp(Te);let S=`${jr(this.configuration,Ie)} couldn't be built successfully (exit code ${Ot(this.configuration,w,yt.NUMBER)}, logs can be found here: ${Ot(this.configuration,Je,yt.PATH)})`,y=this.optionalBuilds.has(Ie.locatorHash);return y?r.reportInfo(9,S):r.reportError(9,S),Jce&&r.reportFold(ue.fromPortablePath(Je),oe.readFileSync(Je,"utf8")),y}))return!1}return!0});ne.push(...H,Promise.allSettled(H).then(lt=>{pe.delete(ee),lt.every(Re=>Re.status==="fulfilled"&&Re.value===!0)&&g.set(Ie.locatorHash,ht)}))}if(await Uc(ne),ce===pe.size){let ee=Array.from(pe).map(Ie=>{let ke=this.storedPackages.get(Ie);if(!ke)throw new Error("Assertion failed: The package should have been registered");return jr(this.configuration,ke)}).join(", ");r.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ee})`);break}}this.storedBuildState=g,this.skippedBuilds=L}async installWithNewReport(e,r){return(await Nt.start({configuration:this.configuration,json:e.json,stdout:e.stdout,forceSectionAlignment:!0,includeLogs:!e.json&&!e.quiet,includeVersion:!0},async a=>{await this.install({...r,report:a})})).exitCode()}async install(e){let r=this.configuration.get("nodeLinker");Ve.telemetry?.reportInstall(r);let o=!1;if(await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{this.configuration.get("enableOfflineMode")&&e.report.reportWarning(90,"Offline work is enabled; Yarn won't fetch packages from the remote registry if it can avoid it"),await this.configuration.triggerHook(E=>E.validateProject,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),o=!0}})}),o)return;let a=await this.configuration.getPackageExtensions();for(let E of a.values())for(let[,I]of E)for(let v of I)v.status="inactive";let n=K.join(this.cwd,dr.lockfile),u=null;if(e.immutable)try{u=await oe.readFilePromise(n,"utf8")}catch(E){throw E.code==="ENOENT"?new zt(28,"The lockfile would have been created by this install, which is explicitly forbidden."):E}await e.report.startTimerPromise("Resolution step",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise("Post-resolution validation",{skipIfEmpty:!0},async()=>{LAt(this,e.report);for(let[,E]of a)for(let[,I]of E)for(let v of I)if(v.userProvided){let b=Ot(this.configuration,v,yt.PACKAGE_EXTENSION);switch(v.status){case"inactive":e.report.reportWarning(68,`${b}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case"redundant":e.report.reportWarning(69,`${b}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(u!==null){let E=Ug(u,this.generateLockfile());if(E!==u){let I=ppe(n,n,u,E,void 0,void 0,{maxEditLength:100});if(I){e.report.reportSeparator();for(let v of I.hunks){e.report.reportInfo(null,`@@ -${v.oldStart},${v.oldLines} +${v.newStart},${v.newLines} @@`);for(let b of v.lines)b.startsWith("+")?e.report.reportError(28,Ot(this.configuration,b,yt.ADDED)):b.startsWith("-")?e.report.reportError(28,Ot(this.configuration,b,yt.REMOVED)):e.report.reportInfo(null,Ot(this.configuration,b,"grey"))}e.report.reportSeparator()}throw new zt(28,"The lockfile would have been modified by this install, which is explicitly forbidden.")}}});for(let E of a.values())for(let[,I]of E)for(let v of I)v.userProvided&&v.status==="active"&&Ve.telemetry?.reportPackageExtension(yd(v,yt.PACKAGE_EXTENSION));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e)});let A=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],p=await Promise.all(A.map(async E=>MS(E,{cwd:this.cwd})));(typeof e.persistProject>"u"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode==="update-lockfile"){e.report.reportWarning(73,`Skipped due to ${Ot(this.configuration,"mode=update-lockfile",yt.CODE)}`);return}await this.linkEverything(e);let E=await Promise.all(A.map(async I=>MS(I,{cwd:this.cwd})));for(let I=0;I{await this.configuration.triggerHook(E=>E.validateProjectAfterInstall,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),h=!0}})}),!h&&await this.configuration.triggerHook(E=>E.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,u]of this.storedResolutions.entries()){let A=e.get(u);A||e.set(u,A=new Set),A.add(n)}let r={},{cacheKey:o}=Lr.getCacheKey(this.configuration);r.__metadata={version:nk,cacheKey:o};for(let[n,u]of e.entries()){let A=this.originalPackages.get(n);if(!A)continue;let p=[];for(let b of u){let C=this.storedDescriptors.get(b);if(!C)throw new Error("Assertion failed: The descriptor should have been registered");p.push(C)}let h=p.map(b=>Sa(b)).sort().join(", "),E=new Mt;E.version=A.linkType==="HARD"?A.version:"0.0.0-use.local",E.languageName=A.languageName,E.dependencies=new Map(A.dependencies),E.peerDependencies=new Map(A.peerDependencies),E.dependenciesMeta=new Map(A.dependenciesMeta),E.peerDependenciesMeta=new Map(A.peerDependenciesMeta),E.bin=new Map(A.bin);let I,v=this.storedChecksums.get(A.locatorHash);if(typeof v<"u"){let b=v.indexOf("/");if(b===-1)throw new Error("Assertion failed: Expected the checksum to reference its cache key");let C=v.slice(0,b),T=v.slice(b+1);C===o?I=T:I=v}r[h]={...E.exportTo({},{compatibilityMode:!1}),linkType:A.linkType.toLowerCase(),resolution:xa(A),checksum:I,conditions:A.conditions||void 0}}return`${[`# This file is generated by running "yarn install" inside your project. +`,`# Manual changes might be lost - proceed with caution! +`].join("")} +`+Ba(r)}async persistLockfile(){let e=K.join(this.cwd,dr.lockfile),r="";try{r=await oe.readFilePromise(e,"utf8")}catch{}let o=this.generateLockfile(),a=Ug(r,o);a!==r&&(await oe.writeFilePromise(e,a),this.lockFileChecksum=zpe(a),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let u of Object.values(k_))e.push(...u);let r=(0,tk.default)(this,e),o=Q_.default.serialize(r),a=zs(o);if(this.installStateChecksum===a)return;let n=this.configuration.get("installStatePath");await oe.mkdirPromise(K.dirname(n),{recursive:!0}),await oe.writeFilePromise(n,await TAt(o)),this.installStateChecksum=a}async restoreInstallState({restoreLinkersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:o=!0}={}){let a=this.configuration.get("installStatePath"),n;try{let u=await RAt(await oe.readFilePromise(a));n=Q_.default.deserialize(u),this.installStateChecksum=zs(u)}catch{r&&await this.applyLightResolution();return}e&&typeof n.linkersCustomData<"u"&&(this.linkersCustomData=n.linkersCustomData),o&&Object.assign(this,(0,tk.default)(n,k_.restoreBuildState)),r&&(n.lockFileChecksum===this.lockFileChecksum?Object.assign(this,(0,tk.default)(n,k_.restoreResolutions)):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new Qi}),await this.persistInstallStateFile()}async persist(){let e=(0,rk.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(r=>e(()=>r.persistManifest()))])}async cacheCleanup({cache:e,report:r}){if(this.configuration.get("enableGlobalCache"))return null;let o=new Set([".gitignore"]);if(!IO(e.cwd,this.cwd)||!await oe.existsPromise(e.cwd))return null;let a=[];for(let u of await oe.readdirPromise(e.cwd)){if(o.has(u))continue;let A=K.resolve(e.cwd,u);e.markedFiles.has(A)||(e.immutable?r.reportError(56,`${Ot(this.configuration,K.basename(A),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):a.push(oe.lstatPromise(A).then(async p=>(await oe.removePromise(A),p.size))))}if(a.length===0)return null;let n=await Promise.all(a);return{count:a.length,size:n.reduce((u,A)=>u+A,0)}}}});function MAt(t){let o=Math.floor(t.timeNow/864e5),a=t.updateInterval*864e5,n=t.state.lastUpdate??t.timeNow+a+Math.floor(a*t.randomInitialInterval),u=n+a,A=t.state.lastTips??o*864e5,p=A+864e5+8*36e5-t.timeZone,h=u<=t.timeNow,E=p<=t.timeNow,I=null;return(h||E||!t.state.lastUpdate||!t.state.lastTips)&&(I={},I.lastUpdate=h?t.timeNow:n,I.lastTips=A,I.blocks=h?{}:t.state.blocks,I.displayedTips=t.state.displayedTips),{nextState:I,triggerUpdate:h,triggerTips:E,nextTips:E?o*864e5:A}}var cC,$pe=Et(()=>{Pt();N1();rh();Bx();jl();kf();cC=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.nextTips=0;this.displayedTips=[];this.shouldCommitTips=!1;this.configuration=e;let o=this.getRegistryPath();this.isNew=!oe.existsSync(o),this.shouldShowTips=!1,this.sendReport(r),this.startBuffer()}commitTips(){this.shouldShowTips&&(this.shouldCommitTips=!0)}selectTip(e){let r=new Set(this.displayedTips),o=A=>A&&tn?bf(tn,A):!1,a=e.map((A,p)=>p).filter(A=>e[A]&&o(e[A]?.selector));if(a.length===0)return null;let n=a.filter(A=>!r.has(A));if(n.length===0){let A=Math.floor(a.length*.2);this.displayedTips=A>0?this.displayedTips.slice(-A):[],n=a.filter(p=>!r.has(p))}let u=n[Math.floor(Math.random()*n.length)];return this.displayedTips.push(u),this.commitTips(),e[u]}reportVersion(e){this.reportValue("version",e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue("commandName",e||"")}reportPluginName(e){this.reportValue("pluginName",e)}reportProject(e){this.reportEnumerator("projectCount",e)}reportInstall(e){this.reportHit("installCount",e)}reportPackageExtension(e){this.reportValue("packageExtension",e)}reportWorkspaceCount(e){this.reportValue("workspaceCount",String(e))}reportDependencyCount(e){this.reportValue("dependencyCount",String(e))}reportValue(e,r){dd(this.values,e).add(r)}reportEnumerator(e,r){dd(this.enumerators,e).add(zs(r))}reportHit(e,r="*"){let o=Yy(this.hits,e),a=ol(o,r,()=>0);o.set(r,a+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return K.join(e,"telemetry.json")}sendReport(e){let r=this.getRegistryPath(),o;try{o=oe.readJsonSync(r)}catch{o={}}let{nextState:a,triggerUpdate:n,triggerTips:u,nextTips:A}=MAt({state:o,timeNow:Date.now(),timeZone:new Date().getTimezoneOffset()*60*1e3,randomInitialInterval:Math.random(),updateInterval:this.configuration.get("telemetryInterval")});if(this.nextTips=A,this.displayedTips=o.displayedTips??[],a!==null)try{oe.mkdirSync(K.dirname(r),{recursive:!0}),oe.writeJsonSync(r,a)}catch{return!1}if(u&&this.configuration.get("enableTips")&&(this.shouldShowTips=!0),n){let p=o.blocks??{};if(Object.keys(p).length===0){let h=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,E=I=>U4(h,I,{configuration:this.configuration}).catch(()=>{});for(let[I,v]of Object.entries(o.blocks??{})){if(Object.keys(v).length===0)continue;let b=v;b.userId=I,b.reportType="primary";for(let L of Object.keys(b.enumerators??{}))b.enumerators[L]=b.enumerators[L].length;E(b);let C=new Map,T=20;for(let[L,U]of Object.entries(b.values))U.length>0&&C.set(L,U.slice(0,T));for(;C.size>0;){let L={};L.userId=I,L.reportType="secondary",L.metrics={};for(let[U,J]of C)L.metrics[U]=J.shift(),J.length===0&&C.delete(U);E(L)}}}}return!0}applyChanges(){let e=this.getRegistryPath(),r;try{r=oe.readJsonSync(e)}catch{r={}}let o=this.configuration.get("telemetryUserId")??"*",a=r.blocks=r.blocks??{},n=a[o]=a[o]??{};for(let u of this.hits.keys()){let A=n.hits=n.hits??{},p=A[u]=A[u]??{};for(let[h,E]of this.hits.get(u))p[h]=(p[h]??0)+E}for(let u of["values","enumerators"])for(let A of this[u].keys()){let p=n[u]=n[u]??{};p[A]=[...new Set([...p[A]??[],...this[u].get(A)??[]])]}this.shouldCommitTips&&(r.lastTips=this.nextTips,r.displayedTips=this.displayedTips),oe.mkdirSync(K.dirname(e),{recursive:!0}),oe.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}}});var s2={};Kt(s2,{BuildDirectiveType:()=>zb,CACHE_CHECKPOINT:()=>A_,CACHE_VERSION:()=>Jb,Cache:()=>Lr,Configuration:()=>Ve,DEFAULT_RC_FILENAME:()=>W4,FormatType:()=>Qle,InstallMode:()=>pl,LEGACY_PLUGINS:()=>B1,LOCKFILE_VERSION:()=>nk,LegacyMigrationResolver:()=>sC,LightReport:()=>AA,LinkType:()=>Jy,LockfileResolver:()=>oC,Manifest:()=>Mt,MessageName:()=>wr,MultiFetcher:()=>pE,PackageExtensionStatus:()=>DL,PackageExtensionType:()=>vL,PeerWarningType:()=>ik,Project:()=>St,Report:()=>Xs,ReportError:()=>zt,SettingsType:()=>v1,StreamReport:()=>Nt,TAG_REGEXP:()=>QE,TelemetryManager:()=>cC,ThrowReport:()=>Qi,VirtualFetcher:()=>hE,WindowsLinkType:()=>kx,Workspace:()=>lC,WorkspaceFetcher:()=>dE,WorkspaceResolver:()=>Xn,YarnVersion:()=>tn,execUtils:()=>Ur,folderUtils:()=>WS,formatUtils:()=>de,hashUtils:()=>wn,httpUtils:()=>rn,miscUtils:()=>je,nodeUtils:()=>Ji,parseMessageName:()=>fP,reportOptionDeprecations:()=>NE,scriptUtils:()=>un,semverUtils:()=>kr,stringifyMessageName:()=>Wu,structUtils:()=>W,tgzUtils:()=>Xi,treeUtils:()=>$s});var Ye=Et(()=>{Px();VS();ql();rh();Bx();jl();Dx();DU();kf();xo();$fe();ope();f_();D1();D1();lpe();p_();cpe();h_();AE();pP();AO();Zpe();Yl();L1();$pe();x_();pO();hO();Bd();b_();N1();Ine()});var she=_((K_t,a2)=>{"use strict";var UAt=process.env.TERM_PROGRAM==="Hyper",_At=process.platform==="win32",rhe=process.platform==="linux",R_={ballotDisabled:"\u2612",ballotOff:"\u2610",ballotOn:"\u2611",bullet:"\u2022",bulletWhite:"\u25E6",fullBlock:"\u2588",heart:"\u2764",identicalTo:"\u2261",line:"\u2500",mark:"\u203B",middot:"\xB7",minus:"\uFF0D",multiplication:"\xD7",obelus:"\xF7",pencilDownRight:"\u270E",pencilRight:"\u270F",pencilUpRight:"\u2710",percent:"%",pilcrow2:"\u2761",pilcrow:"\xB6",plusMinus:"\xB1",section:"\xA7",starsOff:"\u2606",starsOn:"\u2605",upDownArrow:"\u2195"},nhe=Object.assign({},R_,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),ihe=Object.assign({},R_,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:rhe?"\u25B8":"\u276F",pointerSmall:rhe?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});a2.exports=_At&&!UAt?nhe:ihe;Reflect.defineProperty(a2.exports,"common",{enumerable:!1,value:R_});Reflect.defineProperty(a2.exports,"windows",{enumerable:!1,value:nhe});Reflect.defineProperty(a2.exports,"other",{enumerable:!1,value:ihe})});var Vc=_((J_t,N_)=>{"use strict";var HAt=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),jAt=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,ohe=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=n=>{let u=n.open=`\x1B[${n.codes[0]}m`,A=n.close=`\x1B[${n.codes[1]}m`,p=n.regex=new RegExp(`\\u001b\\[${n.codes[1]}m`,"g");return n.wrap=(h,E)=>{h.includes(A)&&(h=h.replace(p,A+u));let I=u+h+A;return E?I.replace(/\r*\n/g,`${A}$&${u}`):I},n},r=(n,u,A)=>typeof n=="function"?n(u):n.wrap(u,A),o=(n,u)=>{if(n===""||n==null)return"";if(t.enabled===!1)return n;if(t.visible===!1)return"";let A=""+n,p=A.includes(` +`),h=u.length;for(h>0&&u.includes("unstyle")&&(u=[...new Set(["unstyle",...u])].reverse());h-- >0;)A=r(t.styles[u[h]],A,p);return A},a=(n,u,A)=>{t.styles[n]=e({name:n,codes:u}),(t.keys[A]||(t.keys[A]=[])).push(n),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(h){t.alias(n,h)},get(){let h=E=>o(E,h.stack);return Reflect.setPrototypeOf(h,t),h.stack=this.stack?this.stack.concat(n):[n],h}})};return a("reset",[0,0],"modifier"),a("bold",[1,22],"modifier"),a("dim",[2,22],"modifier"),a("italic",[3,23],"modifier"),a("underline",[4,24],"modifier"),a("inverse",[7,27],"modifier"),a("hidden",[8,28],"modifier"),a("strikethrough",[9,29],"modifier"),a("black",[30,39],"color"),a("red",[31,39],"color"),a("green",[32,39],"color"),a("yellow",[33,39],"color"),a("blue",[34,39],"color"),a("magenta",[35,39],"color"),a("cyan",[36,39],"color"),a("white",[37,39],"color"),a("gray",[90,39],"color"),a("grey",[90,39],"color"),a("bgBlack",[40,49],"bg"),a("bgRed",[41,49],"bg"),a("bgGreen",[42,49],"bg"),a("bgYellow",[43,49],"bg"),a("bgBlue",[44,49],"bg"),a("bgMagenta",[45,49],"bg"),a("bgCyan",[46,49],"bg"),a("bgWhite",[47,49],"bg"),a("blackBright",[90,39],"bright"),a("redBright",[91,39],"bright"),a("greenBright",[92,39],"bright"),a("yellowBright",[93,39],"bright"),a("blueBright",[94,39],"bright"),a("magentaBright",[95,39],"bright"),a("cyanBright",[96,39],"bright"),a("whiteBright",[97,39],"bright"),a("bgBlackBright",[100,49],"bgBright"),a("bgRedBright",[101,49],"bgBright"),a("bgGreenBright",[102,49],"bgBright"),a("bgYellowBright",[103,49],"bgBright"),a("bgBlueBright",[104,49],"bgBright"),a("bgMagentaBright",[105,49],"bgBright"),a("bgCyanBright",[106,49],"bgBright"),a("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=jAt,t.hasColor=t.hasAnsi=n=>(t.ansiRegex.lastIndex=0,typeof n=="string"&&n!==""&&t.ansiRegex.test(n)),t.alias=(n,u)=>{let A=typeof u=="string"?t[u]:u;if(typeof A!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");A.stack||(Reflect.defineProperty(A,"name",{value:n}),t.styles[n]=A,A.stack=[n]),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(p){t.alias(n,p)},get(){let p=h=>o(h,p.stack);return Reflect.setPrototypeOf(p,t),p.stack=this.stack?this.stack.concat(A.stack):A.stack,p}})},t.theme=n=>{if(!HAt(n))throw new TypeError("Expected theme to be an object");for(let u of Object.keys(n))t.alias(u,n[u]);return t},t.alias("unstyle",n=>typeof n=="string"&&n!==""?(t.ansiRegex.lastIndex=0,n.replace(t.ansiRegex,"")):""),t.alias("noop",n=>n),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=she(),t.define=a,t};N_.exports=ohe();N_.exports.create=ohe});var No=_(nn=>{"use strict";var qAt=Object.prototype.toString,rc=Vc(),ahe=!1,L_=[],lhe={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};nn.longest=(t,e)=>t.reduce((r,o)=>Math.max(r,e?o[e].length:o.length),0);nn.hasColor=t=>!!t&&rc.hasColor(t);var ok=nn.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);nn.nativeType=t=>qAt.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");nn.isAsyncFn=t=>nn.nativeType(t)==="asyncfunction";nn.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";nn.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;nn.scrollDown=(t=[])=>[...t.slice(1),t[0]];nn.scrollUp=(t=[])=>[t.pop(),...t];nn.reorder=(t=[])=>{let e=t.slice();return e.sort((r,o)=>r.index>o.index?1:r.index{let o=t.length,a=r===o?0:r<0?o-1:r,n=t[e];t[e]=t[a],t[a]=n};nn.width=(t,e=80)=>{let r=t&&t.columns?t.columns:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[0]),process.platform==="win32"?r-1:r};nn.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};nn.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:o=` +`+r,width:a=80}=e,n=(o+r).match(/[^\S\n]/g)||[];a-=n.length;let u=`.{1,${a}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,A=t.trim(),p=new RegExp(u,"g"),h=A.match(p)||[];return h=h.map(E=>E.replace(/\n$/,"")),e.padEnd&&(h=h.map(E=>E.padEnd(a," "))),e.padStart&&(h=h.map(E=>E.padStart(a," "))),r+h.join(o)};nn.unmute=t=>{let e=t.stack.find(o=>rc.keys.color.includes(o));return e?rc[e]:t.stack.find(o=>o.slice(2)==="bg")?rc[e.slice(2)]:o=>o};nn.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";nn.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o));if(e){let o=rc["bg"+nn.pascal(e)];return o?o.black:t}let r=t.stack.find(o=>o.slice(0,2)==="bg");return r?rc[r.slice(2).toLowerCase()]||t:rc.none};nn.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o)),r=t.stack.find(o=>o.slice(0,2)==="bg");if(e&&!r)return rc[lhe[e]||e];if(r){let o=r.slice(2).toLowerCase(),a=lhe[o];return a&&rc["bg"+nn.pascal(a)]||t}return rc.none};nn.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),o=e>=12?"pm":"am";e=e%12;let a=e===0?12:e,n=r<10?"0"+r:r;return a+":"+n+" "+o};nn.set=(t={},e="",r)=>e.split(".").reduce((o,a,n,u)=>{let A=u.length-1>n?o[a]||{}:r;return!nn.isObject(A)&&n{let o=t[e]==null?e.split(".").reduce((a,n)=>a&&a[n],t):t[e];return o??r};nn.mixin=(t,e)=>{if(!ok(t))return e;if(!ok(e))return t;for(let r of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,r);if(o.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&ok(o.value)){let a=Object.getOwnPropertyDescriptor(t,r);ok(a.value)?t[r]=nn.merge({},t[r],e[r]):Reflect.defineProperty(t,r,o)}else Reflect.defineProperty(t,r,o);else Reflect.defineProperty(t,r,o)}return t};nn.merge=(...t)=>{let e={};for(let r of t)nn.mixin(e,r);return e};nn.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let o of Object.keys(r)){let a=r[o];typeof a=="function"?nn.define(t,o,a.bind(e)):nn.define(t,o,a)}};nn.onExit=t=>{let e=(r,o)=>{ahe||(ahe=!0,L_.forEach(a=>a()),r===!0&&process.exit(128+o))};L_.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),L_.push(t)};nn.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};nn.defineExport=(t,e,r)=>{let o;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(a){o=a},get(){return o?o():r()}})}});var che=_(pC=>{"use strict";pC.ctrl={a:"first",b:"backward",c:"cancel",d:"deleteForward",e:"last",f:"forward",g:"reset",i:"tab",k:"cutForward",l:"reset",n:"newItem",m:"cancel",j:"submit",p:"search",r:"remove",s:"save",u:"undo",w:"cutLeft",x:"toggleCursor",v:"paste"};pC.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};pC.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};pC.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};pC.keys={pageup:"pageUp",pagedown:"pageDown",home:"home",end:"end",cancel:"cancel",delete:"deleteForward",backspace:"delete",down:"down",enter:"submit",escape:"cancel",left:"left",space:"space",number:"number",return:"submit",right:"right",tab:"next",up:"up"}});var fhe=_((Z_t,Ahe)=>{"use strict";var uhe=Be("readline"),GAt=che(),YAt=/^(?:\x1b)([a-zA-Z0-9])$/,WAt=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,VAt={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"};function KAt(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function JAt(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var ak=(t="",e={})=>{let r,o={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:t,raw:t,...e};if(Buffer.isBuffer(t)?t[0]>127&&t[1]===void 0?(t[0]-=128,t="\x1B"+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=o.sequence||""),o.sequence=o.sequence||t||o.name,t==="\r")o.raw=void 0,o.name="return";else if(t===` +`)o.name="enter";else if(t===" ")o.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x1B\x7F"||t==="\x1B\b")o.name="backspace",o.meta=t.charAt(0)==="\x1B";else if(t==="\x1B"||t==="\x1B\x1B")o.name="escape",o.meta=t.length===2;else if(t===" "||t==="\x1B ")o.name="space",o.meta=t.length===2;else if(t<="")o.name=String.fromCharCode(t.charCodeAt(0)+"a".charCodeAt(0)-1),o.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")o.name="number";else if(t.length===1&&t>="a"&&t<="z")o.name=t;else if(t.length===1&&t>="A"&&t<="Z")o.name=t.toLowerCase(),o.shift=!0;else if(r=YAt.exec(t))o.meta=!0,o.shift=/^[A-Z]$/.test(r[1]);else if(r=WAt.exec(t)){let a=[...t];a[0]==="\x1B"&&a[1]==="\x1B"&&(o.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),u=(r[3]||r[5]||1)-1;o.ctrl=!!(u&4),o.meta=!!(u&10),o.shift=!!(u&1),o.code=n,o.name=VAt[n],o.shift=KAt(n)||o.shift,o.ctrl=JAt(n)||o.ctrl}return o};ak.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let o=uhe.createInterface({terminal:!0,input:r});uhe.emitKeypressEvents(r,o);let a=(A,p)=>e(A,ak(A,p),o),n=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",a),o.resume(),()=>{r.isTTY&&r.setRawMode(n),r.removeListener("keypress",a),o.pause(),o.close()}};ak.action=(t,e,r)=>{let o={...GAt,...r};return e.ctrl?(e.action=o.ctrl[e.name],e):e.option&&o.option?(e.action=o.option[e.name],e):e.shift?(e.action=o.shift[e.name],e):(e.action=o.keys[e.name],e)};Ahe.exports=ak});var hhe=_(($_t,phe)=>{"use strict";phe.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(!!e)for(let r of Object.keys(e)){let o=e[r];typeof o=="number"&&(o={interval:o}),zAt(t,r,o)}};function zAt(t,e,r={}){let o=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},a=r.interval||120;o.frames=r.frames||[],o.loading=!0;let n=setInterval(()=>{o.ms=Date.now()-o.start,o.tick++,t.render()},a);return o.stop=()=>{o.loading=!1,clearInterval(n)},Reflect.defineProperty(o,"interval",{value:n}),t.once("close",()=>o.stop()),o.stop}});var dhe=_((e8t,ghe)=>{"use strict";var{define:XAt,width:ZAt}=No(),M_=class{constructor(e){let r=e.options;XAt(this,"_prompt",e),this.type=e.type,this.name=e.name,this.message="",this.header="",this.footer="",this.error="",this.hint="",this.input="",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt="",this.buffer="",this.width=ZAt(r.stdout||process.stdout),Object.assign(this,r),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let r=this._color||e[this.status];return typeof r=="function"?r:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading=="boolean"?this._loading:this.loadingChoices?"choices":!1}get status(){return this.cancelled?"cancelled":this.submitted?"submitted":"pending"}};ghe.exports=M_});var yhe=_((t8t,mhe)=>{"use strict";var O_=No(),eo=Vc(),U_={default:eo.noop,noop:eo.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||O_.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||O_.complement(this.primary)},primary:eo.cyan,success:eo.green,danger:eo.magenta,strong:eo.bold,warning:eo.yellow,muted:eo.dim,disabled:eo.gray,dark:eo.dim.gray,underline:eo.underline,set info(t){this._info=t},get info(){return this._info||this.primary},set em(t){this._em=t},get em(){return this._em||this.primary.underline},set heading(t){this._heading=t},get heading(){return this._heading||this.muted.underline},set pending(t){this._pending=t},get pending(){return this._pending||this.primary},set submitted(t){this._submitted=t},get submitted(){return this._submitted||this.success},set cancelled(t){this._cancelled=t},get cancelled(){return this._cancelled||this.danger},set typing(t){this._typing=t},get typing(){return this._typing||this.dim},set placeholder(t){this._placeholder=t},get placeholder(){return this._placeholder||this.primary.dim},set highlight(t){this._highlight=t},get highlight(){return this._highlight||this.inverse}};U_.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(eo.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(eo.visible=t.styles.visible);let e=O_.merge({},U_,t.styles);delete e.merge;for(let r of Object.keys(eo))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});for(let r of Object.keys(eo.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});return e};mhe.exports=U_});var Che=_((r8t,Ehe)=>{"use strict";var __=process.platform==="win32",Vf=Vc(),$At=No(),H_={...Vf.symbols,upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:Vf.symbols.check,leftAngle:"\u2039",mark:"\u203B",minus:"\u2212",multiplication:"\xD7",obelus:"\xF7",percent:"%",pilcrow:"\xB6",pilcrow2:"\u2761",pencilUpRight:"\u2710",pencilDownRight:"\u270E",pencilRight:"\u270F",plus:"+",plusMinus:"\xB1",pointRight:"\u261E",rightAngle:"\u203A",section:"\xA7",hexagon:{off:"\u2B21",on:"\u2B22",disabled:"\u2B22"},ballot:{on:"\u2611",off:"\u2610",disabled:"\u2612"},stars:{on:"\u2605",off:"\u2606",disabled:"\u2606"},folder:{on:"\u25BC",off:"\u25B6",disabled:"\u25B6"},prefix:{pending:Vf.symbols.question,submitted:Vf.symbols.check,cancelled:Vf.symbols.cross},separator:{pending:Vf.symbols.pointerSmall,submitted:Vf.symbols.middot,cancelled:Vf.symbols.middot},radio:{off:__?"( )":"\u25EF",on:__?"(*)":"\u25C9",disabled:__?"(|)":"\u24BE"},numbers:["\u24EA","\u2460","\u2461","\u2462","\u2463","\u2464","\u2465","\u2466","\u2467","\u2468","\u2469","\u246A","\u246B","\u246C","\u246D","\u246E","\u246F","\u2470","\u2471","\u2472","\u2473","\u3251","\u3252","\u3253","\u3254","\u3255","\u3256","\u3257","\u3258","\u3259","\u325A","\u325B","\u325C","\u325D","\u325E","\u325F","\u32B1","\u32B2","\u32B3","\u32B4","\u32B5","\u32B6","\u32B7","\u32B8","\u32B9","\u32BA","\u32BB","\u32BC","\u32BD","\u32BE","\u32BF"]};H_.merge=t=>{let e=$At.merge({},Vf.symbols,H_,t.symbols);return delete e.merge,e};Ehe.exports=H_});var Ihe=_((n8t,whe)=>{"use strict";var eft=yhe(),tft=Che(),rft=No();whe.exports=t=>{t.options=rft.merge({},t.options.theme,t.options),t.symbols=tft.merge(t.options),t.styles=eft.merge(t.options)}});var She=_((Dhe,Phe)=>{"use strict";var Bhe=process.env.TERM_PROGRAM==="Apple_Terminal",nft=Vc(),j_=No(),Kc=Phe.exports=Dhe,Di="\x1B[",vhe="\x07",q_=!1,Ph=Kc.code={bell:vhe,beep:vhe,beginning:`${Di}G`,down:`${Di}J`,esc:Di,getPosition:`${Di}6n`,hide:`${Di}?25l`,line:`${Di}2K`,lineEnd:`${Di}K`,lineStart:`${Di}1K`,restorePosition:Di+(Bhe?"8":"u"),savePosition:Di+(Bhe?"7":"s"),screen:`${Di}2J`,show:`${Di}?25h`,up:`${Di}1J`},qd=Kc.cursor={get hidden(){return q_},hide(){return q_=!0,Ph.hide},show(){return q_=!1,Ph.show},forward:(t=1)=>`${Di}${t}C`,backward:(t=1)=>`${Di}${t}D`,nextLine:(t=1)=>`${Di}E`.repeat(t),prevLine:(t=1)=>`${Di}F`.repeat(t),up:(t=1)=>t?`${Di}${t}A`:"",down:(t=1)=>t?`${Di}${t}B`:"",right:(t=1)=>t?`${Di}${t}C`:"",left:(t=1)=>t?`${Di}${t}D`:"",to(t,e){return e?`${Di}${e+1};${t+1}H`:`${Di}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?qd.left(-t):t>0?qd.right(t):"",r+=e<0?qd.up(-e):e>0?qd.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:o,input:a,prompt:n,size:u,value:A}=t;if(o=j_.isPrimitive(o)?String(o):"",a=j_.isPrimitive(a)?String(a):"",A=j_.isPrimitive(A)?String(A):"",u){let p=Kc.cursor.up(u)+Kc.cursor.to(n.length),h=a.length-r;return h>0&&(p+=Kc.cursor.left(h)),p}if(A||e){let p=!a&&!!o?-o.length:-a.length+r;return e&&(p-=e.length),a===""&&o&&!n.includes(o)&&(p+=o.length),Kc.cursor.move(p)}}},G_=Kc.erase={screen:Ph.screen,up:Ph.up,down:Ph.down,line:Ph.line,lineEnd:Ph.lineEnd,lineStart:Ph.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return G_.line+qd.to(0);let r=n=>[...nft.unstyle(n)].length,o=t.split(/\r?\n/),a=0;for(let n of o)a+=1+Math.floor(Math.max(r(n)-1,0)/e);return(G_.line+qd.prevLine()).repeat(a-1)+G_.line+qd.to(0)}});var hC=_((i8t,bhe)=>{"use strict";var ift=Be("events"),xhe=Vc(),Y_=fhe(),sft=hhe(),oft=dhe(),aft=Ihe(),Ta=No(),Gd=She(),l2=class extends ift{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,aft(this),sft(this),this.state=new oft(this),this.initial=[e.initial,e.default].find(r=>r!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=cft(this.options.margin),this.setMaxListeners(0),lft(this)}async keypress(e,r={}){this.keypressed=!0;let o=Y_.action(e,Y_(e,r),this.options.actions);this.state.keypress=o,this.emit("keypress",e,o),this.emit("state",this.state.clone());let a=this.options[o.action]||this[o.action]||this.dispatch;if(typeof a=="function")return await a.call(this,e,o);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(Gd.code.beep)}cursorHide(){this.stdout.write(Gd.cursor.hide()),Ta.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(Gd.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let r=this.state.buffer;this.state.buffer="",!(!r&&!e||this.options.show===!1)&&this.stdout.write(Gd.cursor.down(e)+Gd.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:o}=this.sections(),{cursor:a,initial:n="",input:u="",value:A=""}=this,p=this.state.size=o.length,h={after:r,cursor:a,initial:n,input:u,prompt:e,size:p,value:A},E=Gd.cursor.restore(h);E&&this.stdout.write(E)}sections(){let{buffer:e,input:r,prompt:o}=this.state;o=xhe.unstyle(o);let a=xhe.unstyle(e),n=a.indexOf(o),u=a.slice(0,n),p=a.slice(n).split(` +`),h=p[0],E=p[p.length-1],v=(o+(r?" "+r:"")).length,b=ve.call(this,this.value),this.result=()=>o.call(this,this.value),typeof r.initial=="function"&&(this.initial=await r.initial.call(this,this)),typeof r.onRun=="function"&&await r.onRun.call(this,this),typeof r.onSubmit=="function"){let a=r.onSubmit.bind(this),n=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await a(this.name,this.value,this),n())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,r)=>{if(this.once("submit",e),this.once("cancel",r),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,r,o){let{options:a,state:n,symbols:u,timers:A}=this,p=A&&A[e];n.timer=p;let h=a[e]||n[e]||u[e],E=r&&r[e]!=null?r[e]:await h;if(E==="")return E;let I=await this.resolve(E,n,r,o);return!I&&r&&r[e]?this.resolve(h,n,r,o):I}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,o=this.state;return o.timer=r,Ta.isObject(e)&&(e=e[o.status]||e.pending),Ta.hasColor(e)?e:(this.styles[o.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return Ta.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,o=this.state;o.timer=r;let a=e[o.status]||e.pending||o.separator,n=await this.resolve(a,o);return Ta.isObject(n)&&(n=n[o.status]||n.pending),Ta.hasColor(n)?n:this.styles.muted(n)}async pointer(e,r){let o=await this.element("pointer",e,r);if(typeof o=="string"&&Ta.hasColor(o))return o;if(o){let a=this.styles,n=this.index===r,u=n?a.primary:h=>h,A=await this.resolve(o[n?"on":"off"]||o,this.state),p=Ta.hasColor(A)?A:u(A);return n?p:" ".repeat(A.length)}}async indicator(e,r){let o=await this.element("indicator",e,r);if(typeof o=="string"&&Ta.hasColor(o))return o;if(o){let a=this.styles,n=e.enabled===!0,u=n?a.success:a.dark,A=o[n?"on":"off"]||o;return Ta.hasColor(A)?A:u(A)}return""}body(){return null}footer(){if(this.state.status==="pending")return this.element("footer")}header(){if(this.state.status==="pending")return this.element("header")}async hint(){if(this.state.status==="pending"&&!this.isValue(this.state.input)){let e=await this.element("hint");return Ta.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?"":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==""}resolve(e,...r){return Ta.resolve(this,e,...r)}get base(){return l2.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||Ta.height(this.stdout,25)}get width(){return this.options.columns||Ta.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:r}=this.state,o=[r,e].find(this.isValue.bind(this));return this.isValue(o)?o:this.initial}static get prompt(){return e=>new this(e).run()}};function lft(t){let e=a=>t[a]===void 0||typeof t[a]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],o=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let a of Object.keys(t.options)){if(r.includes(a)||/^on[A-Z]/.test(a))continue;let n=t.options[a];typeof n=="function"&&e(a)?o.includes(a)||(t[a]=n.bind(t)):typeof t[a]!="function"&&(t[a]=n)}}function cft(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=a=>a%2===0?` +`:" ",o=[];for(let a=0;a<4;a++){let n=r(a);e[a]?o.push(n.repeat(e[a])):o.push("")}return o}bhe.exports=l2});var Fhe=_((s8t,Qhe)=>{"use strict";var uft=No(),khe={default(t,e){return e},checkbox(t,e){throw new Error("checkbox role is not implemented yet")},editable(t,e){throw new Error("editable role is not implemented yet")},expandable(t,e){throw new Error("expandable role is not implemented yet")},heading(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||"",e},input(t,e){throw new Error("input role is not implemented yet")},option(t,e){return khe.default(t,e)},radio(t,e){throw new Error("radio role is not implemented yet")},separator(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||t.symbols.line.repeat(5),e},spacer(t,e){return e}};Qhe.exports=(t,e={})=>{let r=uft.merge({},khe,e.roles);return r[t]||r.default}});var c2=_((o8t,Nhe)=>{"use strict";var Aft=Vc(),fft=hC(),pft=Fhe(),lk=No(),{reorder:W_,scrollUp:hft,scrollDown:gft,isObject:The,swap:dft}=lk,V_=class extends fft{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){typeof this.options.initial=="function"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:r,autofocus:o,suggest:a}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(n=>n.enabled=!1),typeof a!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");The(r)&&(r=Object.keys(r)),Array.isArray(r)?(o!=null&&(this.index=this.findIndex(o)),r.forEach(n=>this.enable(this.find(n))),await this.render()):(o!=null&&(r=o),typeof r=="string"&&(r=this.findIndex(r)),typeof r=="number"&&r>-1&&(this.index=Math.max(0,Math.min(r,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,r){this.state.loadingChoices=!0;let o=[],a=0,n=async(u,A)=>{typeof u=="function"&&(u=await u.call(this)),u instanceof Promise&&(u=await u);for(let p=0;p(this.state.loadingChoices=!1,u))}async toChoice(e,r,o){if(typeof e=="function"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e=="string"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let a=e.value;if(e=pft(e.role,this.options)(this,e),typeof e.disabled=="string"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint="(disabled)"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||"",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input="",e.index=r,e.cursor=0,lk.define(e,"parent",o),e.level=o?o.level+1:1,e.indent==null&&(e.indent=o?o.indent+" ":e.indent||""),e.path=o?o.path+"."+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,Aft.unstyle(e.message).length));let u={...e};return e.reset=(A=u.input,p=u.value)=>{for(let h of Object.keys(u))e[h]=u[h];e.input=A,e.value=p},a==null&&typeof e.initial=="function"&&(e.input=await e.initial.call(this,this.state,e,r)),e}async onChoice(e,r){this.emit("choice",e,r,this),typeof e.onChoice=="function"&&await e.onChoice.call(this,this.state,e,r)}async addChoice(e,r,o){let a=await this.toChoice(e,r,o);return this.choices.push(a),this.index=this.choices.length-1,this.limit=this.choices.length,a}async newItem(e,r,o){let a={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(a,r,o);return n.updateChoice=()=>{delete n.newChoice,n.name=n.message=n.input,n.input="",n.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,r){if(this.multiple&&this[r.name])return this[r.name]();this.alert()}focus(e,r){return typeof r!="boolean"&&(r=e.enabled),r&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=r&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectedr.enabled);return this.choices.forEach(r=>r.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(r=>!!r.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,r){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof r!="boolean"&&(r=!e.enabled),e.enabled=r,e.choices&&e.choices.forEach(a=>this.toggle(a,r));let o=e.parent;for(;o;){let a=o.choices.filter(n=>this.isDisabled(n));o.enabled=a.every(n=>n.enabled===!0),o=o.parent}return Rhe(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let r=o=>{let a=Number(o);if(a>this.choices.length-1)return this.alert();let n=this.focused,u=this.choices.find(A=>a===A.index);if(!u.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(u)===-1){let A=W_(this.choices),p=A.indexOf(u);if(n.index>p){let h=A.slice(p,p+this.limit),E=A.filter(I=>!h.includes(I));this.choices=h.concat(E)}else{let h=p-this.limit+1;this.choices=A.slice(h).concat(A.slice(0,h))}}return this.index=this.choices.indexOf(u),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(o=>{let a=this.choices.length,n=this.num,u=(A=!1,p)=>{clearTimeout(this.numberTimeout),A&&(p=r(n)),this.num="",o(p)};if(n==="0"||n.length===1&&Number(n+"0")>a)return u(!0);if(Number(n)>a)return u(!1,this.alert());this.numberTimeout=setTimeout(()=>u(!0),this.delay)})}home(){return this.choices=W_(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=W_(this.choices);return this.choices=r.slice(e).concat(r.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===0?this.alert():e>r&&o===0?this.scrollUp():(this.index=(o-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===r-1?this.alert():e>r&&o===r-1?this.scrollDown():(this.index=(o+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=hft(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=gft(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){dft(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(o=>e[o]===!0)?!0:e&&e.role==="heading"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(r=>this.isEnabled(r));if(e.choices){let r=e.choices.filter(o=>!this.isDisabled(o));return e.enabled&&r.every(o=>this.isEnabled(o))}return e.enabled&&!this.isDisabled(e)}isChoice(e,r){return e.name===r||e.index===Number(r)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(r=>this.isChoice(e,r)):this.isChoice(e,this.initial)}map(e=[],r="value"){return[].concat(e||[]).reduce((o,a)=>(o[a]=this.find(a,r),o),{})}filter(e,r){let a=typeof e=="function"?e:(A,p)=>[A.name,p].includes(e),u=(this.options.multiple?this.state._choices:this.choices).filter(a);return r?u.map(A=>A[r]):u}find(e,r){if(The(e))return r?e[r]:e;let a=typeof e=="function"?e:(u,A)=>[u.name,A].includes(e),n=this.choices.find(a);if(n)return r?n[r]:n}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(u=>u.newChoice))return this.alert();let{reorder:r,sort:o}=this.options,a=this.multiple===!0,n=this.selected;return n===void 0?this.alert():(Array.isArray(n)&&r!==!1&&o!==!0&&(n=lk.reorder(n)),this.value=a?n.map(u=>u.name):n.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let r of e)this.state._choices.some(o=>o.name===r.name)||this.state._choices.push(r);if(!this._initial&&this.options.initial){this._initial=!0;let r=this.initial;if(typeof r=="string"||typeof r=="number"){let o=this.find(r);o&&(this.initial=o.index,this.focus(o,!0))}}}get choices(){return Rhe(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:r,choices:o}=this,a=e.limit||this._limit||r.limit||o.length;return Math.min(a,this.height)}set value(e){super.value=e}get value(){return typeof super.value!="string"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function Rhe(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(lk.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let o=r.choices.filter(a=>!t.isDisabled(a));r.enabled=o.every(a=>a.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}Nhe.exports=V_});var Sh=_((a8t,Lhe)=>{"use strict";var mft=c2(),K_=No(),J_=class extends mft{constructor(e){super(e),this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,r){if(this.multiple)return this[r.name]?await this[r.name](e,r):await super.dispatch(e,r);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,r){return!this.multiple||this.options.pointer?super.pointer(e,r):""}indicator(e,r){return this.multiple?super.indicator(e,r):""}choiceMessage(e,r){let o=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!K_.hasColor(o)&&(o=this.styles.strong(o)),this.resolve(o,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await this.indicator(e,r)+(e.pad||""),u=await this.resolve(e.hint,this.state,e,r);u&&!K_.hasColor(u)&&(u=this.styles.muted(u));let A=this.indent(e),p=await this.choiceMessage(e,r),h=()=>[this.margin[3],A+a+n,p,this.margin[1],u].filter(Boolean).join(" ");return e.role==="heading"?h():e.disabled?(K_.hasColor(p)||(p=this.styles.disabled(p)),h()):(o&&(p=this.styles.em(p)),h())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(n,u)=>await this.renderChoice(n,u)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let o=this.margin[0]+r.join(` +`),a;return this.options.choicesHeader&&(a=await this.resolve(this.options.choicesHeader,this.state)),[a,o].filter(Boolean).join(` +`)}format(){return!this.state.submitted||this.state.cancelled?"":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(", "):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:r}=this.state,o="",a=await this.header(),n=await this.prefix(),u=await this.separator(),A=await this.message();this.options.promptLine!==!1&&(o=[n,A,u,""].join(" "),this.state.prompt=o);let p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();p&&(o+=p),h&&!o.includes(h)&&(o+=" "+h),e&&!p&&!E.trim()&&this.multiple&&this.emptyError!=null&&(o+=this.styles.danger(this.emptyError)),this.clear(r),this.write([a,o,E,I].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};Lhe.exports=J_});var Ohe=_((l8t,Mhe)=>{"use strict";var yft=Sh(),Eft=(t,e)=>{let r=t.toLowerCase();return o=>{let n=o.toLowerCase().indexOf(r),u=e(o.slice(n,n+r.length));return n>=0?o.slice(0,n)+u+o.slice(n+r.length):o}},z_=class extends yft{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:r,input:o}=this.state;return this.input=o.slice(0,r)+e+o.slice(r),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:r}=this.state;return r?(this.input=r.slice(0,e-1)+r.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:r}=this.state;return r[e]===void 0?this.alert():(this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,r=this.state._choices){if(typeof this.options.suggest=="function")return this.options.suggest.call(this,e,r);let o=e.toLowerCase();return r.filter(a=>a.message.toLowerCase().includes(o))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!=="pending")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,r=Eft(this.input,e),o=this.choices;this.choices=o.map(a=>({...a,message:r(a.message)})),await super.render(),this.choices=o}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Mhe.exports=z_});var Z_=_((c8t,Uhe)=>{"use strict";var X_=No();Uhe.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:o="",pos:a,showCursor:n=!0,color:u}=e,A=u||t.styles.placeholder,p=X_.inverse(t.styles.primary),h=T=>p(t.styles.black(T)),E=r,I=" ",v=h(I);if(t.blink&&t.blink.off===!0&&(h=T=>T,v=""),n&&a===0&&o===""&&r==="")return h(I);if(n&&a===0&&(r===o||r===""))return h(o[0])+A(o.slice(1));o=X_.isPrimitive(o)?`${o}`:"",r=X_.isPrimitive(r)?`${r}`:"";let b=o&&o.startsWith(r)&&o!==r,C=b?h(o[r.length]):v;if(a!==r.length&&n===!0&&(E=r.slice(0,a)+h(r[a])+r.slice(a+1),C=""),n===!1&&(C=""),b){let T=t.styles.unstyle(E+C);return E+C+A(o.slice(T.length))}return E+C}});var ck=_((u8t,_he)=>{"use strict";var Cft=Vc(),wft=Sh(),Ift=Z_(),$_=class extends wft{constructor(e){super({...e,multiple:!0}),this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(r=>r!=null),this.emptyError="",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(r=>r.reset&&r.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let r=this.focused;if(!r)return this.alert();let{cursor:o,input:a}=r;return r.value=r.input=a.slice(0,o)+e+a.slice(o),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:o}=e;return e.value=e.input=o.slice(0,r-1)+o.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:o}=e;if(o[r]===void 0)return this.alert();let a=`${o}`.slice(0,r)+`${o}`.slice(r+1);return e.value=e.input=a,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,r){return this.dispatch(e,r)}number(e,r){return this.dispatch(e,r)}next(){let e=this.focused;if(!e)return this.alert();let{initial:r,input:o}=e;return r&&r.startsWith(o)&&o!==r?(e.value=e.input=r,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"\u29BF":"\u2299"}async choiceSeparator(e,r){let o=await this.resolve(e.separator,this.state,e,r)||":";return o?" "+this.styles.disabled(o):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:o,styles:a}=this,{cursor:n,initial:u="",name:A,hint:p,input:h=""}=e,{muted:E,submitted:I,primary:v,danger:b}=a,C=p,T=this.index===r,L=e.validate||(()=>!0),U=await this.choiceSeparator(e,r),J=e.message;this.align==="right"&&(J=J.padStart(this.longest+1," ")),this.align==="left"&&(J=J.padEnd(this.longest+1," "));let te=this.values[A]=h||u,le=h?"success":"dark";await L.call(e,te,this.state)!==!0&&(le="danger");let pe=a[le],Ae=pe(await this.indicator(e,r))+(e.pad||""),ye=this.indent(e),ae=()=>[ye,Ae,J+U,h,C].filter(Boolean).join(" ");if(o.submitted)return J=Cft.unstyle(J),h=I(h),C="",ae();if(e.format)h=await e.format.call(this,h,e,r);else{let we=this.styles.muted;h=Ift(this,{input:h,initial:u,pos:n,showCursor:T,color:we})}return this.isValue(h)||(h=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[A]=await e.result.call(this,te,e,r)),T&&(J=v(J)),e.error?h+=(h?" ":"")+b(e.error.trim()):e.hint&&(h+=(h?" ":"")+E(e.hint.trim())),ae()}async submit(){return this.value=this.values,super.base.submit.call(this)}};_he.exports=$_});var e8=_((A8t,jhe)=>{"use strict";var Bft=ck(),vft=()=>{throw new Error("expected prompt to have a custom authenticate method")},Hhe=(t=vft)=>{class e extends Bft{constructor(o){super(o)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(o){return Hhe(o)}}return e};jhe.exports=Hhe()});var Yhe=_((f8t,Ghe)=>{"use strict";var Dft=e8();function Pft(t,e){return t.username===this.options.username&&t.password===this.options.password}var qhe=(t=Pft)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(o){return this.options.showPassword?o:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(o.length))}}];class r extends Dft.create(t){constructor(a){super({...a,choices:e})}static create(a){return qhe(a)}}return r};Ghe.exports=qhe()});var uk=_((p8t,Whe)=>{"use strict";var Sft=hC(),{isPrimitive:xft,hasColor:bft}=No(),t8=class extends Sft{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:r,state:o}=this;return o.submitted?r.success(e):r.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return xft(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return bft(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=this.styles.muted(this.default),A=[o,n,u,a].filter(Boolean).join(" ");this.state.prompt=A;let p=await this.header(),h=this.value=this.cast(e),E=await this.format(h),I=await this.error()||await this.hint(),v=await this.footer();I&&!A.includes(I)&&(E+=" "+I),A+=" "+E,this.clear(r),this.write([p,A,v].filter(Boolean).join(` +`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Whe.exports=t8});var Khe=_((h8t,Vhe)=>{"use strict";var kft=uk(),r8=class extends kft{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};Vhe.exports=r8});var zhe=_((g8t,Jhe)=>{"use strict";var Qft=Sh(),Fft=ck(),gC=Fft.prototype,n8=class extends Qft{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let o=this.focused,a=o.parent||{};return!o.editable&&!a.editable&&(e==="a"||e==="i")?super[e]():gC.dispatch.call(this,e,r)}append(e,r){return gC.append.call(this,e,r)}delete(e,r){return gC.delete.call(this,e,r)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?gC.next.call(this):super.next()}prev(){return this.focused.editable?gC.prev.call(this):super.prev()}async indicator(e,r){let o=e.indicator||"",a=e.editable?o:super.indicator(e,r);return await this.resolve(a,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?gC.renderChoice.call(this,e,r):super.renderChoice(e,r)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let r of this.choices){if(typeof r.validate!="function"||r.role==="heading")continue;let o=r.parent?this.value[r.parent.name]:this.value;if(r.editable?o=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(o=r.enabled===!0),e=await r.validate(o,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e=="string"?e:"Invalid Input"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let r=e.parent?this.value[e.parent.name]:this.value;if(e.role==="heading"){this.value[e.name]={};continue}e.editable?r[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(r[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Jhe.exports=n8});var Yd=_((d8t,Xhe)=>{"use strict";var Tft=hC(),Rft=Z_(),{isPrimitive:Nft}=No(),i8=class extends Tft{constructor(e){super(e),this.initial=Nft(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let o=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!o||o.name!=="return")?this.append(` +`,r):super.keypress(e,r)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,r){if(!e||r.ctrl||r.code)return this.alert();this.append(e)}append(e){let{cursor:r,input:o}=this.state;this.input=`${o}`.slice(0,r)+e+`${o}`.slice(r),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:r}=this.state;if(e<=0)return this.alert();this.input=`${r}`.slice(0,e-1)+`${r}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:r}=this.state;if(r[e]===void 0)return this.alert();this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let r=this.input.slice(0,e),o=this.input.slice(e),a=r.split(" ");this.state.clipboard.push(a.pop()),this.input=a.join(" "),this.cursor=this.input.length,this.input+=o,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let r=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||r):Rft(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),o=await this.separator(),a=await this.message(),n=[r,a,o].filter(Boolean).join(" ");this.state.prompt=n;let u=await this.header(),A=await this.format(),p=await this.error()||await this.hint(),h=await this.footer();p&&!A.includes(p)&&(A+=" "+p),n+=" "+A,this.clear(e),this.write([u,n,h].filter(Boolean).join(` +`)),this.restore()}};Xhe.exports=i8});var $he=_((m8t,Zhe)=>{"use strict";var Lft=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),Ak=t=>Lft(t).filter(Boolean);Zhe.exports=(t,e={},r="")=>{let{past:o=[],present:a=""}=e,n,u;switch(t){case"prev":case"undo":return n=o.slice(0,o.length-1),u=o[o.length-1]||"",{past:Ak([r,...n]),present:u};case"next":case"redo":return n=o.slice(1),u=o[0]||"",{past:Ak([...n,r]),present:u};case"save":return{past:Ak([...o,r]),present:""};case"remove":return u=Ak(o.filter(A=>A!==r)),a="",u.length&&(a=u.pop()),{past:u,present:a};default:throw new Error(`Invalid action: "${t}"`)}}});var o8=_((y8t,t0e)=>{"use strict";var Mft=Yd(),e0e=$he(),s8=class extends Mft{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let o=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:o},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=e0e(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion("prev")}altDown(){return this.completion("next")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=e0e("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};t0e.exports=s8});var n0e=_((E8t,r0e)=>{"use strict";var Oft=Yd(),a8=class extends Oft{format(){return""}};r0e.exports=a8});var s0e=_((C8t,i0e)=>{"use strict";var Uft=Yd(),l8=class extends Uft{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||""}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:r=>r;return this.list.map(e).join(", ")}async submit(e){let r=this.state.error||await this.validate(this.list,this.state);return r!==!0?(this.state.error=r,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};i0e.exports=l8});var a0e=_((w8t,o0e)=>{"use strict";var _ft=Sh(),c8=class extends _ft{constructor(e){super({...e,multiple:!0})}};o0e.exports=c8});var A8=_((I8t,l0e)=>{"use strict";var Hft=Yd(),u8=class extends Hft{constructor(e={}){super({style:"number",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e==="."&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let r=e||this.minor,o=this.toNumber(this.input);return o>this.max+r?this.alert():(this.input=`${o+r}`,this.render())}down(e){let r=e||this.minor,o=this.toNumber(this.input);return othis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};l0e.exports=u8});var u0e=_((B8t,c0e)=>{c0e.exports=A8()});var f0e=_((v8t,A0e)=>{"use strict";var jft=Yd(),f8=class extends jft{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):""}};A0e.exports=f8});var g0e=_((D8t,h0e)=>{"use strict";var qft=Vc(),Gft=c2(),p0e=No(),p8=class extends Gft{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||"left"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||` + `;let r=e.startNumber||1;typeof this.scale=="number"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((o,a)=>({name:a+r})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let r of this.choices){e=Math.max(e,r.message.length),r.scaleIndex=r.initial||2,r.scale=[];for(let o=0;o=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return""}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.index)).join(", "):""}pointer(){return""}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?"":["",...this.scale.map(o=>` ${o.name} - ${o.message}`)].map(o=>this.styles.muted(o)).join(` +`)}renderScaleHeading(e){let r=this.scale.map(p=>p.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let o=this.scaleLength-r.join("").length,a=Math.round(o/(r.length-1)),u=r.map(p=>this.styles.strong(p)).join(" ".repeat(a)),A=" ".repeat(this.widths[0]);return this.margin[3]+A+this.margin[1]+u}scaleIndicator(e,r,o){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,o);let a=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):a?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let o=e.scale.map(n=>this.scaleIndicator(e,n,r)),a=this.term==="Hyper"?"":" ";return o.join(a+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await e.hint;n&&!p0e.hasColor(n)&&(n=this.styles.muted(n));let u=C=>this.margin[3]+C.replace(/\s+$/,"").padEnd(this.widths[0]," "),A=this.newline,p=this.indent(e),h=await this.resolve(e.message,this.state,e,r),E=await this.renderScale(e,r),I=this.margin[1]+this.margin[3];this.scaleLength=qft.unstyle(E).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-I.length);let b=p0e.wordWrap(h,{width:this.widths[0],newline:A}).split(` +`).map(C=>u(C)+this.margin[1]);return o&&(E=this.styles.info(E),b=b.map(C=>this.styles.info(C))),b[0]+=E,this.linebreak&&b.push(""),[p+a,b.join(` +`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return"";this.tableize();let e=this.visible.map(async(a,n)=>await this.renderChoice(a,n)),r=await Promise.all(e),o=await this.renderScaleHeading();return this.margin[0]+[o,...r.map(a=>a.join(" "))].join(` +`)}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u="";this.options.promptLine!==!1&&(u=[o,n,a,""].join(" "),this.state.prompt=u);let A=await this.header(),p=await this.format(),h=await this.renderScaleKey(),E=await this.error()||await this.hint(),I=await this.renderChoices(),v=await this.footer(),b=this.emptyError;p&&(u+=p),E&&!u.includes(E)&&(u+=" "+E),e&&!p&&!I.trim()&&this.multiple&&b!=null&&(u+=this.styles.danger(b)),this.clear(r),this.write([A,u,h,I,v].filter(Boolean).join(` +`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};h0e.exports=p8});var y0e=_((P8t,m0e)=>{"use strict";var d0e=Vc(),Yft=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",g8=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=Yft(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},Wft=async(t={},e={},r=o=>o)=>{let o=new Set,a=t.fields||[],n=t.template,u=[],A=[],p=[],h=1;typeof n=="function"&&(n=await n());let E=-1,I=()=>n[++E],v=()=>n[E+1],b=C=>{C.line=h,u.push(C)};for(b({type:"bos",value:""});Ele.name===U.key);U.field=a.find(le=>le.name===U.key),te||(te=new g8(U),A.push(te)),te.lines.push(U.line-1);continue}let T=u[u.length-1];T.type==="text"&&T.line===h?T.value+=C:b({type:"text",value:C})}return b({type:"eos",value:""}),{input:n,tabstops:u,unique:o,keys:p,items:A}};m0e.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),o={...e.values,...e.initial},{tabstops:a,items:n,keys:u}=await Wft(e,o),A=h8("result",t,e),p=h8("format",t,e),h=h8("validate",t,e,!0),E=t.isValue.bind(t);return async(I={},v=!1)=>{let b=0;I.required=r,I.items=n,I.keys=u,I.output="";let C=async(J,te,le,pe)=>{let Ae=await h(J,te,le,pe);return Ae===!1?"Invalid field "+le.name:Ae};for(let J of a){let te=J.value,le=J.key;if(J.type!=="template"){te&&(I.output+=te);continue}if(J.type==="template"){let pe=n.find(Pe=>Pe.name===le);e.required===!0&&I.required.add(pe.name);let Ae=[pe.input,I.values[pe.value],pe.value,te].find(E),ae=(pe.field||{}).message||J.inner;if(v){let Pe=await C(I.values[le],I,pe,b);if(Pe&&typeof Pe=="string"||Pe===!1){I.invalid.set(le,Pe);continue}I.invalid.delete(le);let g=await A(I.values[le],I,pe,b);I.output+=d0e.unstyle(g);continue}pe.placeholder=!1;let we=te;te=await p(te,I,pe,b),Ae!==te?(I.values[le]=Ae,te=t.styles.typing(Ae),I.missing.delete(ae)):(I.values[le]=void 0,Ae=`<${ae}>`,te=t.styles.primary(Ae),pe.placeholder=!0,I.required.has(le)&&I.missing.add(ae)),I.missing.has(ae)&&I.validating&&(te=t.styles.warning(Ae)),I.invalid.has(le)&&I.validating&&(te=t.styles.danger(Ae)),b===I.index&&(we!==te?te=t.styles.underline(te):te=t.styles.heading(d0e.unstyle(te))),b++}te&&(I.output+=te)}let T=I.output.split(` +`).map(J=>" "+J),L=n.length,U=0;for(let J of n)I.invalid.has(J.name)&&J.lines.forEach(te=>{T[te][0]===" "&&(T[te]=I.styles.danger(I.symbols.bullet)+T[te].slice(1))}),t.isValue(I.values[J.name])&&U++;return I.completed=(U/L*100).toFixed(0),I.output=T.join(` +`),I.output}};function h8(t,e,r,o){return(a,n,u,A)=>typeof u.field[t]=="function"?u.field[t].call(e,a,n,u,A):[o,a].find(p=>e.isValue(p))}});var C0e=_((S8t,E0e)=>{"use strict";var Vft=Vc(),Kft=y0e(),Jft=hC(),d8=class extends Jft{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await Kft(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let r=this.getItem();this.cursor+=e,r.cursor+=e}dispatch(e,r){if(!r.code&&!r.ctrl&&e!=null&&this.getItem()){this.append(e,r);return}this.alert()}append(e,r){let o=this.getItem(),a=o.input.slice(0,this.cursor),n=o.input.slice(this.cursor);this.input=o.input=`${a}${e}${n}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let r=e.input.slice(this.cursor),o=e.input.slice(0,this.cursor-1);this.input=e.input=`${o}${r}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let r=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(r=this.styles.danger),r(`${this.state.completed}% completed`)}async render(){let{index:e,keys:r=[],submitted:o,size:a}=this.state,n=[this.options.newline,` +`].find(J=>J!=null),u=await this.prefix(),A=await this.separator(),p=await this.message(),h=[u,p,A].filter(Boolean).join(" ");this.state.prompt=h;let E=await this.header(),I=await this.error()||"",v=await this.hint()||"",b=o?"":await this.interpolate(this.state),C=this.state.key=r[e]||"",T=await this.format(C),L=await this.footer();T&&(h+=" "+T),v&&!T&&this.state.completed===0&&(h+=" "+v),this.clear(a);let U=[E,h,b,L,I.trim()];this.write(U.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:r,keys:o,index:a}=this.state,n=r.find(u=>u.name===o[a]);return n&&n.input!=null&&(this.input=n.input,this.cursor=n.cursor),n}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:o,values:a}=this.state;if(e.size){let A="";for(let[p,h]of e)A+=`Invalid ${p}: ${h} +`;return this.state.error=A,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let u=Vft.unstyle(o).split(` +`).map(A=>A.slice(1)).join(` +`);return this.value={values:a,result:u},super.submit()}};E0e.exports=d8});var I0e=_((x8t,w0e)=>{"use strict";var zft="(Use + to sort)",Xft=Sh(),m8=class extends Xft{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,zft].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let o=await super.renderChoice(e,r),a=this.symbols.identicalTo+" ",n=this.index===r&&this.sorting?this.styles.muted(a):" ";return this.options.drag===!1&&(n=""),this.options.numbered===!0?n+`${r+1} - `+o:n+o}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};w0e.exports=m8});var v0e=_((b8t,B0e)=>{"use strict";var Zft=c2(),y8=class extends Zft{constructor(e={}){if(super(e),this.emptyError=e.emptyError||"No items were selected",this.term=process.env.TERM_PROGRAM,!this.options.header){let r=["","4 - Strongly Agree","3 - Agree","2 - Neutral","1 - Disagree","0 - Strongly Disagree",""];r=r.map(o=>this.styles.muted(o)),this.state.header=r.join(` + `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let o of r)o.scale=$ft(5,this.options),o.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],o=r.selected;return e.scale.forEach(a=>a.selected=!1),r.selected=!o,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=this.term==="Hyper",n=a?9:8,u=a?"":" ",A=this.symbols.line.repeat(n),p=" ".repeat(n+(a?0:1)),h=te=>(te?this.styles.success("\u25C9"):"\u25EF")+u,E=r+1+".",I=o?this.styles.heading:this.styles.noop,v=await this.resolve(e.message,this.state,e,r),b=this.indent(e),C=b+e.scale.map((te,le)=>h(le===e.scaleIdx)).join(A),T=te=>te===e.scaleIdx?I(te):te,L=b+e.scale.map((te,le)=>T(le)).join(p),U=()=>[E,v].filter(Boolean).join(" "),J=()=>[U(),C,L," "].filter(Boolean).join(` +`);return o&&(C=this.styles.cyan(C),L=this.styles.cyan(L)),J()}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(o,a)=>await this.renderChoice(o,a)),r=await Promise.all(e);return r.length||r.push(this.styles.danger("No matching choices")),r.join(` +`)}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.scaleIdx)).join(", "):""}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=[o,n,a].filter(Boolean).join(" ");this.state.prompt=u;let A=await this.header(),p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();(p||!h)&&(u+=" "+p),h&&!u.includes(h)&&(u+=" "+h),e&&!p&&!E&&this.multiple&&this.type!=="form"&&(u+=this.styles.danger(this.emptyError)),this.clear(r),this.write([u,A,E,I].filter(Boolean).join(` +`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function $ft(t,e={}){if(Array.isArray(e.scale))return e.scale.map(o=>({...o}));let r=[];for(let o=1;o{D0e.exports=o8()});var x0e=_((Q8t,S0e)=>{"use strict";var ept=uk(),E8=class extends ept{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",r){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=o=>this.styles.primary.underline(o);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,r=await this.header(),o=await this.prefix(),a=await this.separator(),n=await this.message(),u=await this.format(),A=await this.error()||await this.hint(),p=await this.footer(),h=[o,n,a,u].join(" ");this.state.prompt=h,A&&!h.includes(A)&&(h+=" "+A),this.clear(e),this.write([r,h,p].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};S0e.exports=E8});var k0e=_((F8t,b0e)=>{"use strict";var tpt=Sh(),C8=class extends tpt{constructor(e){if(super(e),typeof this.options.correctChoice!="number"||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,r){let o=await super.toChoices(e,r);if(o.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>o.length)throw new Error("Please specify the index of the correct answer from the list of choices");return o}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};b0e.exports=C8});var F0e=_(w8=>{"use strict";var Q0e=No(),As=(t,e)=>{Q0e.defineExport(w8,t,e),Q0e.defineExport(w8,t.toLowerCase(),e)};As("AutoComplete",()=>Ohe());As("BasicAuth",()=>Yhe());As("Confirm",()=>Khe());As("Editable",()=>zhe());As("Form",()=>ck());As("Input",()=>o8());As("Invisible",()=>n0e());As("List",()=>s0e());As("MultiSelect",()=>a0e());As("Numeral",()=>u0e());As("Password",()=>f0e());As("Scale",()=>g0e());As("Select",()=>Sh());As("Snippet",()=>C0e());As("Sort",()=>I0e());As("Survey",()=>v0e());As("Text",()=>P0e());As("Toggle",()=>x0e());As("Quiz",()=>k0e())});var R0e=_((R8t,T0e)=>{T0e.exports={ArrayPrompt:c2(),AuthPrompt:e8(),BooleanPrompt:uk(),NumberPrompt:A8(),StringPrompt:Yd()}});var A2=_((N8t,L0e)=>{"use strict";var N0e=Be("assert"),B8=Be("events"),xh=No(),Jc=class extends B8{constructor(e,r){super(),this.options=xh.merge({},e),this.answers={...r}}register(e,r){if(xh.isObject(e)){for(let a of Object.keys(e))this.register(a,e[a]);return this}N0e.equal(typeof r,"function","expected a function");let o=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[o]=r:this.prompts[o]=r(this.Prompt,this),this}async prompt(e=[]){for(let r of[].concat(e))try{typeof r=="function"&&(r=await r.call(this)),await this.ask(xh.merge({},this.options,r))}catch(o){return Promise.reject(o)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=xh.merge({},this.options,e),{type:o,name:a}=e,{set:n,get:u}=xh;if(typeof o=="function"&&(o=await o.call(this,e,this.answers)),!o)return this.answers[a];N0e(this.prompts[o],`Prompt "${o}" is not registered`);let A=new this.prompts[o](r),p=u(this.answers,a);A.state.answers=this.answers,A.enquirer=this,a&&A.on("submit",E=>{this.emit("answer",a,E,A),n(this.answers,a,E)});let h=A.emit.bind(A);return A.emit=(...E)=>(this.emit.call(this,...E),h(...E)),this.emit("prompt",A,this),r.autofill&&p!=null?(A.value=A.input=p,r.autofill==="show"&&await A.submit()):p=A.value=await A.run(),p}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||hC()}static get prompts(){return F0e()}static get types(){return R0e()}static get prompt(){let e=(r,...o)=>{let a=new this(...o),n=a.emit.bind(a);return a.emit=(...u)=>(e.emit(...u),n(...u)),a.prompt(r)};return xh.mixinEmitter(e,new B8),e}};xh.mixinEmitter(Jc,new B8);var I8=Jc.prompts;for(let t of Object.keys(I8)){let e=t.toLowerCase(),r=o=>new I8[t](o).run();Jc.prompt[e]=r,Jc[e]=r,Jc[t]||Reflect.defineProperty(Jc,t,{get:()=>I8[t]})}var u2=t=>{xh.defineExport(Jc,t,()=>Jc.types[t])};u2("ArrayPrompt");u2("AuthPrompt");u2("BooleanPrompt");u2("NumberPrompt");u2("StringPrompt");L0e.exports=Jc});var g2=_((mHt,q0e)=>{var apt=Zb();function lpt(t,e,r){var o=t==null?void 0:apt(t,e);return o===void 0?r:o}q0e.exports=lpt});var W0e=_((BHt,Y0e)=>{function cpt(t,e){for(var r=-1,o=t==null?0:t.length;++r{var upt=gd(),Apt=zP();function fpt(t,e){return t&&upt(e,Apt(e),t)}V0e.exports=fpt});var z0e=_((DHt,J0e)=>{var ppt=gd(),hpt=qy();function gpt(t,e){return t&&ppt(e,hpt(e),t)}J0e.exports=gpt});var Z0e=_((PHt,X0e)=>{var dpt=gd(),mpt=GP();function ypt(t,e){return dpt(t,mpt(t),e)}X0e.exports=ypt});var b8=_((SHt,$0e)=>{var Ept=qP(),Cpt=tS(),wpt=GP(),Ipt=KN(),Bpt=Object.getOwnPropertySymbols,vpt=Bpt?function(t){for(var e=[];t;)Ept(e,wpt(t)),t=Cpt(t);return e}:Ipt;$0e.exports=vpt});var tge=_((xHt,ege)=>{var Dpt=gd(),Ppt=b8();function Spt(t,e){return Dpt(t,Ppt(t),e)}ege.exports=Spt});var k8=_((bHt,rge)=>{var xpt=VN(),bpt=b8(),kpt=qy();function Qpt(t){return xpt(t,kpt,bpt)}rge.exports=Qpt});var ige=_((kHt,nge)=>{var Fpt=Object.prototype,Tpt=Fpt.hasOwnProperty;function Rpt(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&Tpt.call(t,"index")&&(r.index=t.index,r.input=t.input),r}nge.exports=Rpt});var oge=_((QHt,sge)=>{var Npt=$P();function Lpt(t,e){var r=e?Npt(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}sge.exports=Lpt});var lge=_((FHt,age)=>{var Mpt=/\w*$/;function Opt(t){var e=new t.constructor(t.source,Mpt.exec(t));return e.lastIndex=t.lastIndex,e}age.exports=Opt});var pge=_((THt,fge)=>{var cge=fd(),uge=cge?cge.prototype:void 0,Age=uge?uge.valueOf:void 0;function Upt(t){return Age?Object(Age.call(t)):{}}fge.exports=Upt});var gge=_((RHt,hge)=>{var _pt=$P(),Hpt=oge(),jpt=lge(),qpt=pge(),Gpt=lL(),Ypt="[object Boolean]",Wpt="[object Date]",Vpt="[object Map]",Kpt="[object Number]",Jpt="[object RegExp]",zpt="[object Set]",Xpt="[object String]",Zpt="[object Symbol]",$pt="[object ArrayBuffer]",eht="[object DataView]",tht="[object Float32Array]",rht="[object Float64Array]",nht="[object Int8Array]",iht="[object Int16Array]",sht="[object Int32Array]",oht="[object Uint8Array]",aht="[object Uint8ClampedArray]",lht="[object Uint16Array]",cht="[object Uint32Array]";function uht(t,e,r){var o=t.constructor;switch(e){case $pt:return _pt(t);case Ypt:case Wpt:return new o(+t);case eht:return Hpt(t,r);case tht:case rht:case nht:case iht:case sht:case oht:case aht:case lht:case cht:return Gpt(t,r);case Vpt:return new o;case Kpt:case Xpt:return new o(t);case Jpt:return jpt(t);case zpt:return new o;case Zpt:return qpt(t)}}hge.exports=uht});var mge=_((NHt,dge)=>{var Aht=qI(),fht=Ju(),pht="[object Map]";function hht(t){return fht(t)&&Aht(t)==pht}dge.exports=hht});var wge=_((LHt,Cge)=>{var ght=mge(),dht=WP(),yge=VP(),Ege=yge&&yge.isMap,mht=Ege?dht(Ege):ght;Cge.exports=mht});var Bge=_((MHt,Ige)=>{var yht=qI(),Eht=Ju(),Cht="[object Set]";function wht(t){return Eht(t)&&yht(t)==Cht}Ige.exports=wht});var Sge=_((OHt,Pge)=>{var Iht=Bge(),Bht=WP(),vge=VP(),Dge=vge&&vge.isSet,vht=Dge?Bht(Dge):Iht;Pge.exports=vht});var Q8=_((UHt,Qge)=>{var Dht=HP(),Pht=W0e(),Sht=rS(),xht=K0e(),bht=z0e(),kht=aL(),Qht=eS(),Fht=Z0e(),Tht=tge(),Rht=ZN(),Nht=k8(),Lht=qI(),Mht=ige(),Oht=gge(),Uht=cL(),_ht=Hl(),Hht=OI(),jht=wge(),qht=il(),Ght=Sge(),Yht=zP(),Wht=qy(),Vht=1,Kht=2,Jht=4,xge="[object Arguments]",zht="[object Array]",Xht="[object Boolean]",Zht="[object Date]",$ht="[object Error]",bge="[object Function]",e0t="[object GeneratorFunction]",t0t="[object Map]",r0t="[object Number]",kge="[object Object]",n0t="[object RegExp]",i0t="[object Set]",s0t="[object String]",o0t="[object Symbol]",a0t="[object WeakMap]",l0t="[object ArrayBuffer]",c0t="[object DataView]",u0t="[object Float32Array]",A0t="[object Float64Array]",f0t="[object Int8Array]",p0t="[object Int16Array]",h0t="[object Int32Array]",g0t="[object Uint8Array]",d0t="[object Uint8ClampedArray]",m0t="[object Uint16Array]",y0t="[object Uint32Array]",ri={};ri[xge]=ri[zht]=ri[l0t]=ri[c0t]=ri[Xht]=ri[Zht]=ri[u0t]=ri[A0t]=ri[f0t]=ri[p0t]=ri[h0t]=ri[t0t]=ri[r0t]=ri[kge]=ri[n0t]=ri[i0t]=ri[s0t]=ri[o0t]=ri[g0t]=ri[d0t]=ri[m0t]=ri[y0t]=!0;ri[$ht]=ri[bge]=ri[a0t]=!1;function pk(t,e,r,o,a,n){var u,A=e&Vht,p=e&Kht,h=e&Jht;if(r&&(u=a?r(t,o,a,n):r(t)),u!==void 0)return u;if(!qht(t))return t;var E=_ht(t);if(E){if(u=Mht(t),!A)return Qht(t,u)}else{var I=Lht(t),v=I==bge||I==e0t;if(Hht(t))return kht(t,A);if(I==kge||I==xge||v&&!a){if(u=p||v?{}:Uht(t),!A)return p?Tht(t,bht(u,t)):Fht(t,xht(u,t))}else{if(!ri[I])return a?t:{};u=Oht(t,I,A)}}n||(n=new Dht);var b=n.get(t);if(b)return b;n.set(t,u),Ght(t)?t.forEach(function(L){u.add(pk(L,e,r,L,t,n))}):jht(t)&&t.forEach(function(L,U){u.set(U,pk(L,e,r,U,t,n))});var C=h?p?Nht:Rht:p?Wht:Yht,T=E?void 0:C(t);return Pht(T||t,function(L,U){T&&(U=L,L=t[U]),Sht(u,U,pk(L,e,r,U,t,n))}),u}Qge.exports=pk});var F8=_((_Ht,Fge)=>{var E0t=Q8(),C0t=1,w0t=4;function I0t(t){return E0t(t,C0t|w0t)}Fge.exports=I0t});var T8=_((HHt,Tge)=>{var B0t=v_();function v0t(t,e,r){return t==null?t:B0t(t,e,r)}Tge.exports=v0t});var Oge=_((VHt,Mge)=>{var D0t=Object.prototype,P0t=D0t.hasOwnProperty;function S0t(t,e){return t!=null&&P0t.call(t,e)}Mge.exports=S0t});var _ge=_((KHt,Uge)=>{var x0t=Oge(),b0t=D_();function k0t(t,e){return t!=null&&b0t(t,e,x0t)}Uge.exports=k0t});var jge=_((JHt,Hge)=>{function Q0t(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}Hge.exports=Q0t});var Gge=_((zHt,qge)=>{var F0t=Zb(),T0t=gU();function R0t(t,e){return e.length<2?t:F0t(t,T0t(e,0,-1))}qge.exports=R0t});var N8=_((XHt,Yge)=>{var N0t=jd(),L0t=jge(),M0t=Gge(),O0t=aC();function U0t(t,e){return e=N0t(e,t),t=M0t(t,e),t==null||delete t[O0t(L0t(e))]}Yge.exports=U0t});var L8=_((ZHt,Wge)=>{var _0t=N8();function H0t(t,e){return t==null?!0:_0t(t,e)}Wge.exports=H0t});var Xge=_((S6t,G0t)=>{G0t.exports={name:"@yarnpkg/cli",version:"4.0.2",license:"BSD-2-Clause",main:"./sources/index.ts",exports:{".":"./sources/index.ts","./polyfills":"./sources/polyfills.ts","./package.json":"./package.json"},dependencies:{"@yarnpkg/core":"workspace:^","@yarnpkg/fslib":"workspace:^","@yarnpkg/libzip":"workspace:^","@yarnpkg/parsers":"workspace:^","@yarnpkg/plugin-compat":"workspace:^","@yarnpkg/plugin-constraints":"workspace:^","@yarnpkg/plugin-dlx":"workspace:^","@yarnpkg/plugin-essentials":"workspace:^","@yarnpkg/plugin-exec":"workspace:^","@yarnpkg/plugin-file":"workspace:^","@yarnpkg/plugin-git":"workspace:^","@yarnpkg/plugin-github":"workspace:^","@yarnpkg/plugin-http":"workspace:^","@yarnpkg/plugin-init":"workspace:^","@yarnpkg/plugin-interactive-tools":"workspace:^","@yarnpkg/plugin-link":"workspace:^","@yarnpkg/plugin-nm":"workspace:^","@yarnpkg/plugin-npm":"workspace:^","@yarnpkg/plugin-npm-cli":"workspace:^","@yarnpkg/plugin-pack":"workspace:^","@yarnpkg/plugin-patch":"workspace:^","@yarnpkg/plugin-pnp":"workspace:^","@yarnpkg/plugin-pnpm":"workspace:^","@yarnpkg/plugin-stage":"workspace:^","@yarnpkg/plugin-typescript":"workspace:^","@yarnpkg/plugin-version":"workspace:^","@yarnpkg/plugin-workspace-tools":"workspace:^","@yarnpkg/shell":"workspace:^","ci-info":"^3.2.0",clipanion:"^4.0.0-rc.2",semver:"^7.1.2",tslib:"^2.4.0",typanion:"^3.14.0"},devDependencies:{"@types/semver":"^7.1.0","@yarnpkg/builder":"workspace:^","@yarnpkg/monorepo":"workspace:^","@yarnpkg/pnpify":"workspace:^"},peerDependencies:{"@yarnpkg/core":"workspace:^"},scripts:{postpack:"rm -rf lib",prepack:'run build:compile "$(pwd)"',"build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},publishConfig:{main:"./lib/index.js",bin:null,exports:{".":"./lib/index.js","./package.json":"./package.json"}},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]}},repository:{type:"git",url:"ssh://git@github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=18.12.0"}}});var Y8=_((n5t,ude)=>{"use strict";ude.exports=function(e,r){r===!0&&(r=0);var o="";if(typeof e=="string")try{o=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(o=e.protocol);var a=o.split(/\:|\+/).filter(Boolean);return typeof r=="number"?a[r]:a}});var fde=_((i5t,Ade)=>{"use strict";var cgt=Y8();function ugt(t){var e={protocols:[],protocol:null,port:null,resource:"",host:"",user:"",password:"",pathname:"",hash:"",search:"",href:t,query:{},parse_failed:!1};try{var r=new URL(t);e.protocols=cgt(r),e.protocol=e.protocols[0],e.port=r.port,e.resource=r.hostname,e.host=r.host,e.user=r.username||"",e.password=r.password||"",e.pathname=r.pathname,e.hash=r.hash.slice(1),e.search=r.search.slice(1),e.href=r.href,e.query=Object.fromEntries(r.searchParams)}catch{e.protocols=["file"],e.protocol=e.protocols[0],e.port="",e.resource="",e.user="",e.pathname="",e.hash="",e.search="",e.href=t,e.query={},e.parse_failed=!0}return e}Ade.exports=ugt});var gde=_((s5t,hde)=>{"use strict";var Agt=fde();function fgt(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var pgt=fgt(Agt),hgt="text/plain",ggt="us-ascii",pde=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),dgt=(t,{stripHash:e})=>{let r=/^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(t);if(!r)throw new Error(`Invalid URL: ${t}`);let{type:o,data:a,hash:n}=r.groups,u=o.split(";");n=e?"":n;let A=!1;u[u.length-1]==="base64"&&(u.pop(),A=!0);let p=(u.shift()||"").toLowerCase(),E=[...u.map(I=>{let[v,b=""]=I.split("=").map(C=>C.trim());return v==="charset"&&(b=b.toLowerCase(),b===ggt)?"":`${v}${b?`=${b}`:""}`}).filter(Boolean)];return A&&E.push("base64"),(E.length>0||p&&p!==hgt)&&E.unshift(p),`data:${E.join(";")},${A?a.trim():a}${n?`#${n}`:""}`};function mgt(t,e){if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},t=t.trim(),/^data:/i.test(t))return dgt(t,e);if(/^view-source:/i.test(t))throw new Error("`view-source:` is not supported as it is a non-standard protocol");let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new URL(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash?a.hash="":e.stripTextFragment&&(a.hash=a.hash.replace(/#?:~:text.*?$/i,"")),a.pathname){let u=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,A=0,p="";for(;;){let E=u.exec(a.pathname);if(!E)break;let I=E[0],v=E.index,b=a.pathname.slice(A,v);p+=b.replace(/\/{2,}/g,"/"),p+=I,A=v+I.length}let h=a.pathname.slice(A,a.pathname.length);p+=h.replace(/\/{2,}/g,"/"),a.pathname=p}if(a.pathname)try{a.pathname=decodeURI(a.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let u=a.pathname.split("/"),A=u[u.length-1];pde(A,e.removeDirectoryIndex)&&(u=u.slice(0,-1),a.pathname=u.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let u of[...a.searchParams.keys()])pde(u,e.removeQueryParameters)&&a.searchParams.delete(u);if(e.removeQueryParameters===!0&&(a.search=""),e.sortQueryParameters){a.searchParams.sort();try{a.search=decodeURIComponent(a.search)}catch{}}e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,""));let n=t;return t=a.toString(),!e.removeSingleSlash&&a.pathname==="/"&&!n.endsWith("/")&&a.hash===""&&(t=t.replace(/\/$/,"")),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&e.removeSingleSlash&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t}var W8=(t,e=!1)=>{let r=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:]([\~,\.\w,\-,\_,\/]+?(?:\.git|\/)?)$/,o=n=>{let u=new Error(n);throw u.subject_url=t,u};(typeof t!="string"||!t.trim())&&o("Invalid url."),t.length>W8.MAX_INPUT_LENGTH&&o("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH."),e&&(typeof e!="object"&&(e={stripHash:!1}),t=mgt(t,e));let a=pgt.default(t);if(a.parse_failed){let n=a.href.match(r);n?(a.protocols=["ssh"],a.protocol="ssh",a.resource=n[2],a.host=n[2],a.user=n[1],a.pathname=`/${n[3]}`,a.parse_failed=!1):o("URL parsing failed.")}return a};W8.MAX_INPUT_LENGTH=2048;hde.exports=W8});var yde=_((o5t,mde)=>{"use strict";var ygt=Y8();function dde(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=ygt(t);if(t=t.substring(t.indexOf("://")+3),dde(e))return!0;var r=new RegExp(".([a-zA-Z\\d]+):(\\d+)/");return!t.match(r)&&t.indexOf("@"){"use strict";var Egt=gde(),Ede=yde();function Cgt(t){var e=Egt(t);return e.token="",e.password==="x-oauth-basic"?e.token=e.user:e.user==="x-token-auth"&&(e.token=e.password),Ede(e.protocols)||e.protocols.length===0&&Ede(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol="file",e.protocols=["file"]),e.href=e.href.replace(/\/$/,""),e}Cde.exports=Cgt});var Bde=_((l5t,Ide)=>{"use strict";var wgt=wde();function V8(t){if(typeof t!="string")throw new Error("The url must be a string.");var e=/^([a-z\d-]{1,39})\/([-\.\w]{1,100})$/i;e.test(t)&&(t="https://github.com/"+t);var r=wgt(t),o=r.resource.split("."),a=null;switch(r.toString=function(L){return V8.stringify(this,L)},r.source=o.length>2?o.slice(1-o.length).join("."):r.source=r.resource,r.git_suffix=/\.git$/.test(r.pathname),r.name=decodeURIComponent((r.pathname||r.href).replace(/(^\/)|(\/$)/g,"").replace(/\.git$/,"")),r.owner=decodeURIComponent(r.user),r.source){case"git.cloudforge.com":r.owner=r.user,r.organization=o[0],r.source="cloudforge.com";break;case"visualstudio.com":if(r.resource==="vs-ssh.visualstudio.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3],r.full_name=a[2]+"/"+a[3]);break}else{a=r.name.split("/"),a.length===2?(r.owner=a[1],r.name=a[1],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name);break}case"dev.azure.com":case"azure.com":if(r.resource==="ssh.dev.azure.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3]);break}else{a=r.name.split("/"),a.length===5?(r.organization=a[0],r.owner=a[1],r.name=a[4],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name),r.query&&r.query.path&&(r.filepath=r.query.path.replace(/^\/+/g,"")),r.query&&r.query.version&&(r.ref=r.query.version.replace(/^GB/,""));break}default:a=r.name.split("/");var n=a.length-1;if(a.length>=2){var u=a.indexOf("-",2),A=a.indexOf("blob",2),p=a.indexOf("tree",2),h=a.indexOf("commit",2),E=a.indexOf("src",2),I=a.indexOf("raw",2),v=a.indexOf("edit",2);n=u>0?u-1:A>0?A-1:p>0?p-1:h>0?h-1:E>0?E-1:I>0?I-1:v>0?v-1:n,r.owner=a.slice(0,n).join("/"),r.name=a[n],h&&(r.commit=a[n+2])}r.ref="",r.filepathtype="",r.filepath="";var b=a.length>n&&a[n+1]==="-"?n+1:n;a.length>b+2&&["raw","src","blob","tree","edit"].indexOf(a[b+1])>=0&&(r.filepathtype=a[b+1],r.ref=a[b+2],a.length>b+3&&(r.filepath=a.slice(b+3).join("/"))),r.organization=r.owner;break}r.full_name||(r.full_name=r.owner,r.name&&(r.full_name&&(r.full_name+="/"),r.full_name+=r.name)),r.owner.startsWith("scm/")&&(r.source="bitbucket-server",r.owner=r.owner.replace("scm/",""),r.organization=r.owner,r.full_name=r.owner+"/"+r.name);var C=/(projects|users)\/(.*?)\/repos\/(.*?)((\/.*$)|$)/,T=C.exec(r.pathname);return T!=null&&(r.source="bitbucket-server",T[1]==="users"?r.owner="~"+T[2]:r.owner=T[2],r.organization=r.owner,r.name=T[3],a=T[4].split("/"),a.length>1&&(["raw","browse"].indexOf(a[1])>=0?(r.filepathtype=a[1],a.length>2&&(r.filepath=a.slice(2).join("/"))):a[1]==="commits"&&a.length>2&&(r.commit=a[2])),r.full_name=r.owner+"/"+r.name,r.query.at?r.ref=r.query.at:r.ref=""),r}V8.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",o=t.user||"git",a=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+o+"@"+t.resource+r+"/"+t.full_name+a:o+"@"+t.resource+":"+t.full_name+a;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+o+"@"+t.resource+r+"/"+t.full_name+a;case"http":case"https":var n=t.token?Igt(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+n+t.resource+r+"/"+Bgt(t)+a;default:return t.href}};function Igt(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}function Bgt(t){switch(t.source){case"bitbucket-server":return"scm/"+t.full_name;default:return""+t.full_name}}Ide.exports=V8});var Ude=_((H9t,Ode)=>{var Rgt=jx(),Ngt=eS(),Lgt=Hl(),Mgt=fE(),Ogt=B_(),Ugt=aC(),_gt=R1();function Hgt(t){return Lgt(t)?Rgt(t,Ugt):Mgt(t)?[t]:Ngt(Ogt(_gt(t)))}Ode.exports=Hgt});function Ygt(t,e){return e===1&&Ggt.has(t[0])}function I2(t){let e=Array.isArray(t)?t:(0,jde.default)(t);return e.map((o,a)=>jgt.test(o)?`[${o}]`:qgt.test(o)&&!Ygt(e,a)?`.${o}`:`[${JSON.stringify(o)}]`).join("").replace(/^\./,"")}function Wgt(t,e){let r=[];if(e.methodName!==null&&r.push(de.pretty(t,e.methodName,de.Type.CODE)),e.file!==null){let o=[];o.push(de.pretty(t,e.file,de.Type.PATH)),e.line!==null&&(o.push(de.pretty(t,e.line,de.Type.NUMBER)),e.column!==null&&o.push(de.pretty(t,e.column,de.Type.NUMBER))),r.push(`(${o.join(de.pretty(t,":","grey"))})`)}return r.join(" ")}function mk(t,{manifestUpdates:e,reportedErrors:r},{fix:o}={}){let a=new Map,n=new Map,u=[...r.keys()].map(A=>[A,new Map]);for(let[A,p]of[...u,...e]){let h=r.get(A)?.map(b=>({text:b,fixable:!1}))??[],E=!1,I=t.getWorkspaceByCwd(A),v=I.manifest.exportTo({});for(let[b,C]of p){if(C.size>1){let T=[...C].map(([L,U])=>{let J=de.pretty(t.configuration,L,de.Type.INSPECT),te=U.size>0?Wgt(t.configuration,U.values().next().value):null;return te!==null?` +${J} at ${te}`:` +${J}`}).join("");h.push({text:`Conflict detected in constraint targeting ${de.pretty(t.configuration,b,de.Type.CODE)}; conflicting values are:${T}`,fixable:!1})}else{let[[T]]=C,L=(0,_de.default)(v,b);if(JSON.stringify(L)===JSON.stringify(T))continue;if(!o){let U=typeof L>"u"?`Missing field ${de.pretty(t.configuration,b,de.Type.CODE)}; expected ${de.pretty(t.configuration,T,de.Type.INSPECT)}`:typeof T>"u"?`Extraneous field ${de.pretty(t.configuration,b,de.Type.CODE)} currently set to ${de.pretty(t.configuration,L,de.Type.INSPECT)}`:`Invalid field ${de.pretty(t.configuration,b,de.Type.CODE)}; expected ${de.pretty(t.configuration,T,de.Type.INSPECT)}, found ${de.pretty(t.configuration,L,de.Type.INSPECT)}`;h.push({text:U,fixable:!0});continue}typeof T>"u"?(0,qde.default)(v,b):(0,Hde.default)(v,b,T),E=!0}E&&a.set(I,v)}h.length>0&&n.set(I,h)}return{changedWorkspaces:a,remainingErrors:n}}function Gde(t,{configuration:e}){let r={children:[]};for(let[o,a]of t){let n=[];for(let A of a){let p=A.text.split(/\n/);A.fixable&&(p[0]=`${de.pretty(e,"\u2699","gray")} ${p[0]}`),n.push({value:de.tuple(de.Type.NO_HINT,p[0]),children:p.slice(1).map(h=>({value:de.tuple(de.Type.NO_HINT,h)}))})}let u={value:de.tuple(de.Type.LOCATOR,o.anchoredLocator),children:je.sortMap(n,A=>A.value[1])};r.children.push(u)}return r.children=je.sortMap(r.children,o=>o.value[1]),r}var _de,Hde,jde,qde,CC,jgt,qgt,Ggt,B2=Et(()=>{Ye();_de=$e(g2()),Hde=$e(T8()),jde=$e(Ude()),qde=$e(L8()),CC=class{constructor(e){this.indexedFields=e;this.items=[];this.indexes={};this.clear()}clear(){this.items=[];for(let e of this.indexedFields)this.indexes[e]=new Map}insert(e){this.items.push(e);for(let r of this.indexedFields){let o=Object.hasOwn(e,r)?e[r]:void 0;if(typeof o>"u")continue;je.getArrayWithDefault(this.indexes[r],o).push(e)}return e}find(e){if(typeof e>"u")return this.items;let r=Object.entries(e);if(r.length===0)return this.items;let o=[],a;for(let[u,A]of r){let p=u,h=Object.hasOwn(this.indexes,p)?this.indexes[p]:void 0;if(typeof h>"u"){o.push([p,A]);continue}let E=new Set(h.get(A)??[]);if(E.size===0)return[];if(typeof a>"u")a=E;else for(let I of a)E.has(I)||a.delete(I);if(a.size===0)break}let n=[...a??[]];return o.length>0&&(n=n.filter(u=>{for(let[A,p]of o)if(!(typeof p<"u"?Object.hasOwn(u,A)&&u[A]===p:Object.hasOwn(u,A)===!1))return!1;return!0})),n}},jgt=/^[0-9]+$/,qgt=/^[a-zA-Z0-9_]+$/,Ggt=new Set(["scripts",...Mt.allDependencies])});var Yde=_(($9t,aH)=>{var Vgt;(function(t){var e=function(){return{"append/2":[new t.type.Rule(new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("L")]),new t.type.Term("foldl",[new t.type.Term("append",[]),new t.type.Var("X"),new t.type.Term("[]",[]),new t.type.Var("L")]))],"append/3":[new t.type.Rule(new t.type.Term("append",[new t.type.Term("[]",[]),new t.type.Var("X"),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("append",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("append",[new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("S")]))],"member/2":[new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("_")])]),null),new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")])]),new t.type.Term("member",[new t.type.Var("X"),new t.type.Var("Xs")]))],"permutation/2":[new t.type.Rule(new t.type.Term("permutation",[new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("permutation",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("permutation",[new t.type.Var("T"),new t.type.Var("P")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("P")]),new t.type.Term("append",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("Y")]),new t.type.Var("S")])])]))],"maplist/2":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("X")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("Xs")])]))],"maplist/3":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs")])]))],"maplist/4":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs")])]))],"maplist/5":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds")])]))],"maplist/6":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es")])]))],"maplist/7":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs")])]))],"maplist/8":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")]),new t.type.Term(".",[new t.type.Var("G"),new t.type.Var("Gs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F"),new t.type.Var("G")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs"),new t.type.Var("Gs")])]))],"include/3":[new t.type.Rule(new t.type.Term("include",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("include",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("A")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("A"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("F"),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("F")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("L"),new t.type.Var("S")])]),new t.type.Term("include",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("S")])])])])]))],"exclude/3":[new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("E")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("Q")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("R"),new t.type.Var("Q")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("!",[]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("E")])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("E")])])])])])])]))],"foldl/4":[new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Var("I"),new t.type.Var("I")]),null),new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("I"),new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("I"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])])])]),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P2"),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P2")]),new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("R")])])])])]))],"select/3":[new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Xs")]),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term("select",[new t.type.Var("E"),new t.type.Var("Xs"),new t.type.Var("Ys")]))],"sum_list/2":[new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term("[]",[]),new t.type.Num(0,!1)]),null),new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("sum_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("+",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"max_list/2":[new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("max_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"min_list/2":[new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("min_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("=<",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"prod_list/2":[new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term("[]",[]),new t.type.Num(1,!1)]),null),new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("prod_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("*",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"last/2":[new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")]),new t.type.Var("X")]),new t.type.Term("last",[new t.type.Var("Xs"),new t.type.Var("X")]))],"prefix/2":[new t.type.Rule(new t.type.Term("prefix",[new t.type.Var("Part"),new t.type.Var("Whole")]),new t.type.Term("append",[new t.type.Var("Part"),new t.type.Var("_"),new t.type.Var("Whole")]))],"nth0/3":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth1/3":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth0/4":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth1/4":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth/5":[new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("N"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("X"),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("O"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("Y"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term(",",[new t.type.Term("is",[new t.type.Var("M"),new t.type.Term("+",[new t.type.Var("N"),new t.type.Num(1,!1)])]),new t.type.Term("nth",[new t.type.Var("M"),new t.type.Var("O"),new t.type.Var("Xs"),new t.type.Var("Y"),new t.type.Var("Ys")])]))],"length/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(!t.type.is_variable(A)&&!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(t.type.is_integer(A)&&A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else{var p=new t.type.Term("length",[u,new t.type.Num(0,!1),A]);t.type.is_integer(A)&&(p=new t.type.Term(",",[p,new t.type.Term("!",[])])),o.prepend([new t.type.State(a.goal.replace(p),a.substitution,a)])}},"length/3":[new t.type.Rule(new t.type.Term("length",[new t.type.Term("[]",[]),new t.type.Var("N"),new t.type.Var("N")]),null),new t.type.Rule(new t.type.Term("length",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("X")]),new t.type.Var("A"),new t.type.Var("N")]),new t.type.Term(",",[new t.type.Term("succ",[new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("length",[new t.type.Var("X"),new t.type.Var("B"),new t.type.Var("N")])]))],"replicate/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=new t.type.Term("[]"),E=0;E0;I--)E[I].equals(E[I-1])&&E.splice(I,1);for(var v=new t.type.Term("[]"),I=E.length-1;I>=0;I--)v=new t.type.Term(".",[E[I],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"msort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h=u;h.indicator==="./2";)p.push(h.args[0]),h=h.args[1];if(t.type.is_variable(h))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(h))o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=p.sort(t.compare),I=new t.type.Term("[]"),v=E.length-1;v>=0;v--)I=new t.type.Term(".",[E[v],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,A])),a.substitution,a)])}}},"keysort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h,E=u;E.indicator==="./2";){if(h=E.args[0],t.type.is_variable(h)){o.throw_error(t.error.instantiation(n.indicator));return}else if(!t.type.is_term(h)||h.indicator!=="-/2"){o.throw_error(t.error.type("pair",h,n.indicator));return}h.args[0].pair=h.args[1],p.push(h.args[0]),E=E.args[1]}if(t.type.is_variable(E))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(E))o.throw_error(t.error.type("list",u,n.indicator));else{for(var I=p.sort(t.compare),v=new t.type.Term("[]"),b=I.length-1;b>=0;b--)v=new t.type.Term(".",[new t.type.Term("-",[I[b],I[b].pair]),v]),delete I[b].pair;o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"take/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;if(h===0){for(var v=new t.type.Term("[]"),h=E.length-1;h>=0;h--)v=new t.type.Term(".",[E[h],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,p])),a.substitution,a)])}}},"drop/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;h===0&&o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p])),a.substitution,a)])}},"reverse/2":function(o,a,n){var u=n.args[0],A=n.args[1],p=t.type.is_instantiated_list(u),h=t.type.is_instantiated_list(A);if(t.type.is_variable(u)&&t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(u)&&!t.type.is_fully_list(u))o.throw_error(t.error.type("list",u,n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!p&&!h)o.throw_error(t.error.instantiation(n.indicator));else{for(var E=p?u:A,I=new t.type.Term("[]",[]);E.indicator==="./2";)I=new t.type.Term(".",[E.args[0],I]),E=E.args[1];o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p?A:u])),a.substitution,a)])}},"list_to_set/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else{for(var p=u,h=[];p.indicator==="./2";)h.push(p.args[0]),p=p.args[1];if(t.type.is_variable(p))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_term(p)||p.indicator!=="[]/0")o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=[],I=new t.type.Term("[]",[]),v,b=0;b=0;b--)I=new t.type.Term(".",[E[b],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[A,I])),a.substitution,a)])}}}}},r=["append/2","append/3","member/2","permutation/2","maplist/2","maplist/3","maplist/4","maplist/5","maplist/6","maplist/7","maplist/8","include/3","exclude/3","foldl/4","sum_list/2","max_list/2","min_list/2","prod_list/2","last/2","prefix/2","nth0/3","nth1/3","nth0/4","nth1/4","length/2","replicate/3","select/3","sort/2","msort/2","keysort/2","take/3","drop/3","reverse/2","list_to_set/2"];typeof aH<"u"?aH.exports=function(o){t=o,new t.type.Module("lists",e(),r)}:new t.type.Module("lists",e(),r)})(Vgt)});var ome=_(Yr=>{"use strict";var Zd=process.platform==="win32",lH="aes-256-cbc",Kgt="sha256",Kde="The current environment doesn't support interactive reading from TTY.",Yn=Be("fs"),Wde=process.binding("tty_wrap").TTY,uH=Be("child_process"),l0=Be("path"),AH={prompt:"> ",hideEchoBack:!1,mask:"*",limit:[],limitMessage:"Input another, please.$<( [)limit(])>",defaultInput:"",trueValue:[],falseValue:[],caseSensitive:!1,keepWhitespace:!1,encoding:"utf8",bufferSize:1024,print:void 0,history:!0,cd:!1,phContent:void 0,preCheck:void 0},Jf="none",Xc,IC,Vde=!1,a0,Ek,cH,Jgt=0,dH="",Xd=[],Ck,Jde=!1,fH=!1,v2=!1;function zde(t){function e(r){return r.replace(/[^\w\u0080-\uFFFF]/g,function(o){return"#"+o.charCodeAt(0)+";"})}return Ek.concat(function(r){var o=[];return Object.keys(r).forEach(function(a){r[a]==="boolean"?t[a]&&o.push("--"+a):r[a]==="string"&&t[a]&&o.push("--"+a,e(t[a]))}),o}({display:"string",displayOnly:"boolean",keyIn:"boolean",hideEchoBack:"boolean",mask:"string",limit:"string",caseSensitive:"boolean"}))}function zgt(t,e){function r(U){var J,te="",le;for(cH=cH||Be("os").tmpdir();;){J=l0.join(cH,U+te);try{le=Yn.openSync(J,"wx")}catch(pe){if(pe.code==="EEXIST"){te++;continue}else throw pe}Yn.closeSync(le);break}return J}var o,a,n,u={},A,p,h=r("readline-sync.stdout"),E=r("readline-sync.stderr"),I=r("readline-sync.exit"),v=r("readline-sync.done"),b=Be("crypto"),C,T,L;C=b.createHash(Kgt),C.update(""+process.pid+Jgt+++Math.random()),L=C.digest("hex"),T=b.createDecipher(lH,L),o=zde(t),Zd?(a=process.env.ComSpec||"cmd.exe",process.env.Q='"',n=["/V:ON","/S","/C","(%Q%"+a+"%Q% /V:ON /S /C %Q%%Q%"+a0+"%Q%"+o.map(function(U){return" %Q%"+U+"%Q%"}).join("")+" & (echo !ERRORLEVEL!)>%Q%"+I+"%Q%%Q%) 2>%Q%"+E+"%Q% |%Q%"+process.execPath+"%Q% %Q%"+__dirname+"\\encrypt.js%Q% %Q%"+lH+"%Q% %Q%"+L+"%Q% >%Q%"+h+"%Q% & (echo 1)>%Q%"+v+"%Q%"]):(a="/bin/sh",n=["-c",'("'+a0+'"'+o.map(function(U){return" '"+U.replace(/'/g,"'\\''")+"'"}).join("")+'; echo $?>"'+I+'") 2>"'+E+'" |"'+process.execPath+'" "'+__dirname+'/encrypt.js" "'+lH+'" "'+L+'" >"'+h+'"; echo 1 >"'+v+'"']),v2&&v2("_execFileSync",o);try{uH.spawn(a,n,e)}catch(U){u.error=new Error(U.message),u.error.method="_execFileSync - spawn",u.error.program=a,u.error.args=n}for(;Yn.readFileSync(v,{encoding:t.encoding}).trim()!=="1";);return(A=Yn.readFileSync(I,{encoding:t.encoding}).trim())==="0"?u.input=T.update(Yn.readFileSync(h,{encoding:"binary"}),"hex",t.encoding)+T.final(t.encoding):(p=Yn.readFileSync(E,{encoding:t.encoding}).trim(),u.error=new Error(Kde+(p?` +`+p:"")),u.error.method="_execFileSync",u.error.program=a,u.error.args=n,u.error.extMessage=p,u.error.exitCode=+A),Yn.unlinkSync(h),Yn.unlinkSync(E),Yn.unlinkSync(I),Yn.unlinkSync(v),u}function Xgt(t){var e,r={},o,a={env:process.env,encoding:t.encoding};if(a0||(Zd?process.env.PSModulePath?(a0="powershell.exe",Ek=["-ExecutionPolicy","Bypass","-File",__dirname+"\\read.ps1"]):(a0="cscript.exe",Ek=["//nologo",__dirname+"\\read.cs.js"]):(a0="/bin/sh",Ek=[__dirname+"/read.sh"])),Zd&&!process.env.PSModulePath&&(a.stdio=[process.stdin]),uH.execFileSync){e=zde(t),v2&&v2("execFileSync",e);try{r.input=uH.execFileSync(a0,e,a)}catch(n){o=n.stderr?(n.stderr+"").trim():"",r.error=new Error(Kde+(o?` +`+o:"")),r.error.method="execFileSync",r.error.program=a0,r.error.args=e,r.error.extMessage=o,r.error.exitCode=n.status,r.error.code=n.code,r.error.signal=n.signal}}else r=zgt(t,a);return r.error||(r.input=r.input.replace(/^\s*'|'\s*$/g,""),t.display=""),r}function pH(t){var e="",r=t.display,o=!t.display&&t.keyIn&&t.hideEchoBack&&!t.mask;function a(){var n=Xgt(t);if(n.error)throw n.error;return n.input}return fH&&fH(t),function(){var n,u,A;function p(){return n||(n=process.binding("fs"),u=process.binding("constants")),n}if(typeof Jf=="string")if(Jf=null,Zd){if(A=function(h){var E=h.replace(/^\D+/,"").split("."),I=0;return(E[0]=+E[0])&&(I+=E[0]*1e4),(E[1]=+E[1])&&(I+=E[1]*100),(E[2]=+E[2])&&(I+=E[2]),I}(process.version),!(A>=20302&&A<40204||A>=5e4&&A<50100||A>=50600&&A<60200)&&process.stdin.isTTY)process.stdin.pause(),Jf=process.stdin.fd,IC=process.stdin._handle;else try{Jf=p().open("CONIN$",u.O_RDWR,parseInt("0666",8)),IC=new Wde(Jf,!0)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else{try{Xc=Yn.openSync("\\\\.\\CON","w")}catch{}if(typeof Xc!="number")try{Xc=p().open("CONOUT$",u.O_RDWR,parseInt("0666",8))}catch{}}}else{if(process.stdin.isTTY){process.stdin.pause();try{Jf=Yn.openSync("/dev/tty","r"),IC=process.stdin._handle}catch{}}else try{Jf=Yn.openSync("/dev/tty","r"),IC=new Wde(Jf,!1)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else try{Xc=Yn.openSync("/dev/tty","w")}catch{}}}(),function(){var n,u,A=!t.hideEchoBack&&!t.keyIn,p,h,E,I,v;Ck="";function b(C){return C===Vde?!0:IC.setRawMode(C)!==0?!1:(Vde=C,!0)}if(Jde||!IC||typeof Xc!="number"&&(t.display||!A)){e=a();return}if(t.display&&(Yn.writeSync(Xc,t.display),t.display=""),!t.displayOnly){if(!b(!A)){e=a();return}for(h=t.keyIn?1:t.bufferSize,p=Buffer.allocUnsafe&&Buffer.alloc?Buffer.alloc(h):new Buffer(h),t.keyIn&&t.limit&&(u=new RegExp("[^"+t.limit+"]","g"+(t.caseSensitive?"":"i")));;){E=0;try{E=Yn.readSync(Jf,p,0,h)}catch(C){if(C.code!=="EOF"){b(!1),e+=a();return}}if(E>0?(I=p.toString(t.encoding,0,E),Ck+=I):(I=` +`,Ck+=String.fromCharCode(0)),I&&typeof(v=(I.match(/^(.*?)[\r\n]/)||[])[1])=="string"&&(I=v,n=!0),I&&(I=I.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")),I&&u&&(I=I.replace(u,"")),I&&(A||(t.hideEchoBack?t.mask&&Yn.writeSync(Xc,new Array(I.length+1).join(t.mask)):Yn.writeSync(Xc,I)),e+=I),!t.keyIn&&n||t.keyIn&&e.length>=h)break}!A&&!o&&Yn.writeSync(Xc,` +`),b(!1)}}(),t.print&&!o&&t.print(r+(t.displayOnly?"":(t.hideEchoBack?new Array(e.length+1).join(t.mask):e)+` +`),t.encoding),t.displayOnly?"":dH=t.keepWhitespace||t.keyIn?e:e.trim()}function Zgt(t,e){var r=[];function o(a){a!=null&&(Array.isArray(a)?a.forEach(o):(!e||e(a))&&r.push(a))}return o(t),r}function mH(t){return t.replace(/[\x00-\x7f]/g,function(e){return"\\x"+("00"+e.charCodeAt().toString(16)).substr(-2)})}function Ts(){var t=Array.prototype.slice.call(arguments),e,r;return t.length&&typeof t[0]=="boolean"&&(r=t.shift(),r&&(e=Object.keys(AH),t.unshift(AH))),t.reduce(function(o,a){return a==null||(a.hasOwnProperty("noEchoBack")&&!a.hasOwnProperty("hideEchoBack")&&(a.hideEchoBack=a.noEchoBack,delete a.noEchoBack),a.hasOwnProperty("noTrim")&&!a.hasOwnProperty("keepWhitespace")&&(a.keepWhitespace=a.noTrim,delete a.noTrim),r||(e=Object.keys(a)),e.forEach(function(n){var u;if(!!a.hasOwnProperty(n))switch(u=a[n],n){case"mask":case"limitMessage":case"defaultInput":case"encoding":u=u!=null?u+"":"",u&&n!=="limitMessage"&&(u=u.replace(/[\r\n]/g,"")),o[n]=u;break;case"bufferSize":!isNaN(u=parseInt(u,10))&&typeof u=="number"&&(o[n]=u);break;case"displayOnly":case"keyIn":case"hideEchoBack":case"caseSensitive":case"keepWhitespace":case"history":case"cd":o[n]=!!u;break;case"limit":case"trueValue":case"falseValue":o[n]=Zgt(u,function(A){var p=typeof A;return p==="string"||p==="number"||p==="function"||A instanceof RegExp}).map(function(A){return typeof A=="string"?A.replace(/[\r\n]/g,""):A});break;case"print":case"phContent":case"preCheck":o[n]=typeof u=="function"?u:void 0;break;case"prompt":case"display":o[n]=u??"";break}})),o},{})}function hH(t,e,r){return e.some(function(o){var a=typeof o;return a==="string"?r?t===o:t.toLowerCase()===o.toLowerCase():a==="number"?parseFloat(t)===o:a==="function"?o(t):o instanceof RegExp?o.test(t):!1})}function yH(t,e){var r=l0.normalize(Zd?(process.env.HOMEDRIVE||"")+(process.env.HOMEPATH||""):process.env.HOME||"").replace(/[\/\\]+$/,"");return t=l0.normalize(t),e?t.replace(/^~(?=\/|\\|$)/,r):t.replace(new RegExp("^"+mH(r)+"(?=\\/|\\\\|$)",Zd?"i":""),"~")}function BC(t,e){var r="(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?",o=new RegExp("(\\$)?(\\$<"+r+">)","g"),a=new RegExp("(\\$)?(\\$\\{"+r+"\\})","g");function n(u,A,p,h,E,I){var v;return A||typeof(v=e(E))!="string"?p:v?(h||"")+v+(I||""):""}return t.replace(o,n).replace(a,n)}function Xde(t,e,r){var o,a=[],n=-1,u=0,A="",p;function h(E,I){return I.length>3?(E.push(I[0]+"..."+I[I.length-1]),p=!0):I.length&&(E=E.concat(I)),E}return o=t.reduce(function(E,I){return E.concat((I+"").split(""))},[]).reduce(function(E,I){var v,b;return e||(I=I.toLowerCase()),v=/^\d$/.test(I)?1:/^[A-Z]$/.test(I)?2:/^[a-z]$/.test(I)?3:0,r&&v===0?A+=I:(b=I.charCodeAt(0),v&&v===n&&b===u+1?a.push(I):(E=h(E,a),a=[I],n=v),u=b),E},[]),o=h(o,a),A&&(o.push(A),p=!0),{values:o,suppressed:p}}function Zde(t,e){return t.join(t.length>2?", ":e?" / ":"/")}function $de(t,e){var r,o,a={},n;if(e.phContent&&(r=e.phContent(t,e)),typeof r!="string")switch(t){case"hideEchoBack":case"mask":case"defaultInput":case"caseSensitive":case"keepWhitespace":case"encoding":case"bufferSize":case"history":case"cd":r=e.hasOwnProperty(t)?typeof e[t]=="boolean"?e[t]?"on":"off":e[t]+"":"";break;case"limit":case"trueValue":case"falseValue":o=e[e.hasOwnProperty(t+"Src")?t+"Src":t],e.keyIn?(a=Xde(o,e.caseSensitive),o=a.values):o=o.filter(function(u){var A=typeof u;return A==="string"||A==="number"}),r=Zde(o,a.suppressed);break;case"limitCount":case"limitCountNotZero":r=e[e.hasOwnProperty("limitSrc")?"limitSrc":"limit"].length,r=r||t!=="limitCountNotZero"?r+"":"";break;case"lastInput":r=dH;break;case"cwd":case"CWD":case"cwdHome":r=process.cwd(),t==="CWD"?r=l0.basename(r):t==="cwdHome"&&(r=yH(r));break;case"date":case"time":case"localeDate":case"localeTime":r=new Date()["to"+t.replace(/^./,function(u){return u.toUpperCase()})+"String"]();break;default:typeof(n=(t.match(/^history_m(\d+)$/)||[])[1])=="string"&&(r=Xd[Xd.length-n]||"")}return r}function eme(t){var e=/^(.)-(.)$/.exec(t),r="",o,a,n,u;if(!e)return null;for(o=e[1].charCodeAt(0),a=e[2].charCodeAt(0),u=o +And the length must be: $`,trueValue:null,falseValue:null,caseSensitive:!0},e,{history:!1,cd:!1,phContent:function(b){return b==="charlist"?r.text:b==="length"?o+"..."+a:null}}),u,A,p,h,E,I,v;for(e=e||{},u=BC(e.charlist?e.charlist+"":"$",eme),(isNaN(o=parseInt(e.min,10))||typeof o!="number")&&(o=12),(isNaN(a=parseInt(e.max,10))||typeof a!="number")&&(a=24),h=new RegExp("^["+mH(u)+"]{"+o+","+a+"}$"),r=Xde([u],n.caseSensitive,!0),r.text=Zde(r.values,r.suppressed),A=e.confirmMessage!=null?e.confirmMessage:"Reinput a same one to confirm it: ",p=e.unmatchMessage!=null?e.unmatchMessage:"It differs from first one. Hit only the Enter key if you want to retry from first one.",t==null&&(t="Input new password: "),E=n.limitMessage;!v;)n.limit=h,n.limitMessage=E,I=Yr.question(t,n),n.limit=[I,""],n.limitMessage=p,v=Yr.question(A,n);return I};function nme(t,e,r){var o;function a(n){return o=r(n),!isNaN(o)&&typeof o=="number"}return Yr.question(t,Ts({limitMessage:"Input valid number, please."},e,{limit:a,cd:!1})),o}Yr.questionInt=function(t,e){return nme(t,e,function(r){return parseInt(r,10)})};Yr.questionFloat=function(t,e){return nme(t,e,parseFloat)};Yr.questionPath=function(t,e){var r,o="",a=Ts({hideEchoBack:!1,limitMessage:`$Input valid path, please.$<( Min:)min>$<( Max:)max>`,history:!0,cd:!0},e,{keepWhitespace:!1,limit:function(n){var u,A,p;n=yH(n,!0),o="";function h(E){E.split(/\/|\\/).reduce(function(I,v){var b=l0.resolve(I+=v+l0.sep);if(!Yn.existsSync(b))Yn.mkdirSync(b);else if(!Yn.statSync(b).isDirectory())throw new Error("Non directory already exists: "+b);return I},"")}try{if(u=Yn.existsSync(n),r=u?Yn.realpathSync(n):l0.resolve(n),!e.hasOwnProperty("exists")&&!u||typeof e.exists=="boolean"&&e.exists!==u)return o=(u?"Already exists":"No such file or directory")+": "+r,!1;if(!u&&e.create&&(e.isDirectory?h(r):(h(l0.dirname(r)),Yn.closeSync(Yn.openSync(r,"w"))),r=Yn.realpathSync(r)),u&&(e.min||e.max||e.isFile||e.isDirectory)){if(A=Yn.statSync(r),e.isFile&&!A.isFile())return o="Not file: "+r,!1;if(e.isDirectory&&!A.isDirectory())return o="Not directory: "+r,!1;if(e.min&&A.size<+e.min||e.max&&A.size>+e.max)return o="Size "+A.size+" is out of range: "+r,!1}if(typeof e.validate=="function"&&(p=e.validate(r))!==!0)return typeof p=="string"&&(o=p),!1}catch(E){return o=E+"",!1}return!0},phContent:function(n){return n==="error"?o:n!=="min"&&n!=="max"?null:e.hasOwnProperty(n)?e[n]+"":""}});return e=e||{},t==null&&(t='Input path (you can "cd" and "pwd"): '),Yr.question(t,a),r};function ime(t,e){var r={},o={};return typeof t=="object"?(Object.keys(t).forEach(function(a){typeof t[a]=="function"&&(o[e.caseSensitive?a:a.toLowerCase()]=t[a])}),r.preCheck=function(a){var n;return r.args=gH(a),n=r.args[0]||"",e.caseSensitive||(n=n.toLowerCase()),r.hRes=n!=="_"&&o.hasOwnProperty(n)?o[n].apply(a,r.args.slice(1)):o.hasOwnProperty("_")?o._.apply(a,r.args):null,{res:a,forceNext:!1}},o.hasOwnProperty("_")||(r.limit=function(){var a=r.args[0]||"";return e.caseSensitive||(a=a.toLowerCase()),o.hasOwnProperty(a)})):r.preCheck=function(a){return r.args=gH(a),r.hRes=typeof t=="function"?t.apply(a,r.args):!0,{res:a,forceNext:!1}},r}Yr.promptCL=function(t,e){var r=Ts({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=ime(t,r);return r.limit=o.limit,r.preCheck=o.preCheck,Yr.prompt(r),o.args};Yr.promptLoop=function(t,e){for(var r=Ts({hideEchoBack:!1,trueValue:null,falseValue:null,caseSensitive:!1,history:!0},e);!t(Yr.prompt(r)););};Yr.promptCLLoop=function(t,e){var r=Ts({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=ime(t,r);for(r.limit=o.limit,r.preCheck=o.preCheck;Yr.prompt(r),!o.hRes;);};Yr.promptSimShell=function(t){return Yr.prompt(Ts({hideEchoBack:!1,history:!0},t,{prompt:function(){return Zd?"$>":(process.env.USER||"")+(process.env.HOSTNAME?"@"+process.env.HOSTNAME.replace(/\..*$/,""):"")+":$$ "}()}))};function sme(t,e,r){var o;return t==null&&(t="Are you sure? "),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s*:?\s*$/,"")+" [y/n]: "),o=Yr.keyIn(t,Ts(e,{hideEchoBack:!1,limit:r,trueValue:"y",falseValue:"n",caseSensitive:!1})),typeof o=="boolean"?o:""}Yr.keyInYN=function(t,e){return sme(t,e)};Yr.keyInYNStrict=function(t,e){return sme(t,e,"yn")};Yr.keyInPause=function(t,e){t==null&&(t="Continue..."),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s+$/,"")+" (Hit any key)"),Yr.keyIn(t,Ts({limit:null},e,{hideEchoBack:!0,mask:""}))};Yr.keyInSelect=function(t,e,r){var o=Ts({hideEchoBack:!1},r,{trueValue:null,falseValue:null,caseSensitive:!1,phContent:function(p){return p==="itemsCount"?t.length+"":p==="firstItem"?(t[0]+"").trim():p==="lastItem"?(t[t.length-1]+"").trim():null}}),a="",n={},u=49,A=` +`;if(!Array.isArray(t)||!t.length||t.length>35)throw"`items` must be Array (max length: 35).";return t.forEach(function(p,h){var E=String.fromCharCode(u);a+=E,n[E]=h,A+="["+E+"] "+(p+"").trim()+` +`,u=u===57?97:u+1}),(!r||r.cancel!==!1)&&(a+="0",n[0]=-1,A+="[0] "+(r&&r.cancel!=null&&typeof r.cancel!="boolean"?(r.cancel+"").trim():"CANCEL")+` +`),o.limit=a,A+=` +`,e==null&&(e="Choose one from list: "),(e+="")&&((!r||r.guide!==!1)&&(e=e.replace(/\s*:?\s*$/,"")+" [$]: "),A+=e),n[Yr.keyIn(A,o).toLowerCase()]};Yr.getRawInput=function(){return Ck};function D2(t,e){var r;return e.length&&(r={},r[t]=e[0]),Yr.setDefaultOptions(r)[t]}Yr.setPrint=function(){return D2("print",arguments)};Yr.setPrompt=function(){return D2("prompt",arguments)};Yr.setEncoding=function(){return D2("encoding",arguments)};Yr.setMask=function(){return D2("mask",arguments)};Yr.setBufferSize=function(){return D2("bufferSize",arguments)}});var EH=_((t7t,hl)=>{(function(){var t={major:0,minor:2,patch:66,status:"beta"};tau_file_system={files:{},open:function(w,S,y){var F=tau_file_system.files[w];if(!F){if(y==="read")return null;F={path:w,text:"",type:S,get:function(z,X){return X===this.text.length||X>this.text.length?"end_of_file":this.text.substring(X,X+z)},put:function(z,X){return X==="end_of_file"?(this.text+=z,!0):X==="past_end_of_file"?null:(this.text=this.text.substring(0,X)+z+this.text.substring(X+z.length),!0)},get_byte:function(z){if(z==="end_of_stream")return-1;var X=Math.floor(z/2);if(this.text.length<=X)return-1;var Z=n(this.text[Math.floor(z/2)],0);return z%2===0?Z&255:Z/256>>>0},put_byte:function(z,X){var Z=X==="end_of_stream"?this.text.length:Math.floor(X/2);if(this.text.length>>0,ie=(ie&255)<<8|z&255):(ie=ie&255,ie=(z&255)<<8|ie&255),this.text.length===Z?this.text+=u(ie):this.text=this.text.substring(0,Z)+u(ie)+this.text.substring(Z+1),!0},flush:function(){return!0},close:function(){var z=tau_file_system.files[this.path];return z?!0:null}},tau_file_system.files[w]=F}return y==="write"&&(F.text=""),F}},tau_user_input={buffer:"",get:function(w,S){for(var y;tau_user_input.buffer.length\?\@\^\~\\]+|'(?:[^']*?(?:\\(?:x?\d+)?\\)*(?:'')*(?:\\')*)*')/,number:/^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abfnrtv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/,string:/^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/,l_brace:/^(?:\[)/,r_brace:/^(?:\])/,l_bracket:/^(?:\{)/,r_bracket:/^(?:\})/,bar:/^(?:\|)/,l_paren:/^(?:\()/,r_paren:/^(?:\))/};function L(w,S){return w.get_flag("char_conversion").id==="on"?S.replace(/./g,function(y){return w.get_char_conversion(y)}):S}function U(w){this.thread=w,this.text="",this.tokens=[]}U.prototype.set_last_tokens=function(w){return this.tokens=w},U.prototype.new_text=function(w){this.text=w,this.tokens=[]},U.prototype.get_tokens=function(w){var S,y=0,F=0,z=0,X=[],Z=!1;if(w){var ie=this.tokens[w-1];y=ie.len,S=L(this.thread,this.text.substr(ie.len)),F=ie.line,z=ie.start}else S=this.text;if(/^\s*$/.test(S))return null;for(;S!=="";){var Se=[],Ne=!1;if(/^\n/.exec(S)!==null){F++,z=0,y++,S=S.replace(/\n/,""),Z=!0;continue}for(var ot in T)if(T.hasOwnProperty(ot)){var dt=T[ot].exec(S);dt&&Se.push({value:dt[0],name:ot,matches:dt})}if(!Se.length)return this.set_last_tokens([{value:S,matches:[],name:"lexical",line:F,start:z}]);var ie=r(Se,function(Qr,mr){return Qr.value.length>=mr.value.length?Qr:mr});switch(ie.start=z,ie.line=F,S=S.replace(ie.value,""),z+=ie.value.length,y+=ie.value.length,ie.name){case"atom":ie.raw=ie.value,ie.value.charAt(0)==="'"&&(ie.value=v(ie.value.substr(1,ie.value.length-2),"'"),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence"));break;case"number":ie.float=ie.value.substring(0,2)!=="0x"&&ie.value.match(/[.eE]/)!==null&&ie.value!=="0'.",ie.value=C(ie.value),ie.blank=Ne;break;case"string":var jt=ie.value.charAt(0);ie.value=v(ie.value.substr(1,ie.value.length-2),jt),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence");break;case"whitespace":var $t=X[X.length-1];$t&&($t.space=!0),Ne=!0;continue;case"r_bracket":X.length>0&&X[X.length-1].name==="l_bracket"&&(ie=X.pop(),ie.name="atom",ie.value="{}",ie.raw="{}",ie.space=!1);break;case"r_brace":X.length>0&&X[X.length-1].name==="l_brace"&&(ie=X.pop(),ie.name="atom",ie.value="[]",ie.raw="[]",ie.space=!1);break}ie.len=y,X.push(ie),Ne=!1}var xt=this.set_last_tokens(X);return xt.length===0?null:xt};function J(w,S,y,F,z){if(!S[y])return{type:A,value:x.error.syntax(S[y-1],"expression expected",!0)};var X;if(F==="0"){var Z=S[y];switch(Z.name){case"number":return{type:p,len:y+1,value:new x.type.Num(Z.value,Z.float)};case"variable":return{type:p,len:y+1,value:new x.type.Var(Z.value)};case"string":var ie;switch(w.get_flag("double_quotes").id){case"atom":ie=new H(Z.value,[]);break;case"codes":ie=new H("[]",[]);for(var Se=Z.value.length-1;Se>=0;Se--)ie=new H(".",[new x.type.Num(n(Z.value,Se),!1),ie]);break;case"chars":ie=new H("[]",[]);for(var Se=Z.value.length-1;Se>=0;Se--)ie=new H(".",[new x.type.Term(Z.value.charAt(Se),[]),ie]);break}return{type:p,len:y+1,value:ie};case"l_paren":var xt=J(w,S,y+1,w.__get_max_priority(),!0);return xt.type!==p?xt:S[xt.len]&&S[xt.len].name==="r_paren"?(xt.len++,xt):{type:A,derived:!0,value:x.error.syntax(S[xt.len]?S[xt.len]:S[xt.len-1],") or operator expected",!S[xt.len])};case"l_bracket":var xt=J(w,S,y+1,w.__get_max_priority(),!0);return xt.type!==p?xt:S[xt.len]&&S[xt.len].name==="r_bracket"?(xt.len++,xt.value=new H("{}",[xt.value]),xt):{type:A,derived:!0,value:x.error.syntax(S[xt.len]?S[xt.len]:S[xt.len-1],"} or operator expected",!S[xt.len])}}var Ne=te(w,S,y,z);return Ne.type===p||Ne.derived||(Ne=le(w,S,y),Ne.type===p||Ne.derived)?Ne:{type:A,derived:!1,value:x.error.syntax(S[y],"unexpected token")}}var ot=w.__get_max_priority(),dt=w.__get_next_priority(F),jt=y;if(S[y].name==="atom"&&S[y+1]&&(S[y].space||S[y+1].name!=="l_paren")){var Z=S[y++],$t=w.__lookup_operator_classes(F,Z.value);if($t&&$t.indexOf("fy")>-1){var xt=J(w,S,y,F,z);if(xt.type!==A)return Z.value==="-"&&!Z.space&&x.type.is_number(xt.value)?{value:new x.type.Num(-xt.value.value,xt.value.is_float),len:xt.len,type:p}:{value:new x.type.Term(Z.value,[xt.value]),len:xt.len,type:p};X=xt}else if($t&&$t.indexOf("fx")>-1){var xt=J(w,S,y,dt,z);if(xt.type!==A)return{value:new x.type.Term(Z.value,[xt.value]),len:xt.len,type:p};X=xt}}y=jt;var xt=J(w,S,y,dt,z);if(xt.type===p){y=xt.len;var Z=S[y];if(S[y]&&(S[y].name==="atom"&&w.__lookup_operator_classes(F,Z.value)||S[y].name==="bar"&&w.__lookup_operator_classes(F,"|"))){var an=dt,Qr=F,$t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("xf")>-1)return{value:new x.type.Term(Z.value,[xt.value]),len:++xt.len,type:p};if($t.indexOf("xfx")>-1){var mr=J(w,S,y+1,an,z);return mr.type===p?{value:new x.type.Term(Z.value,[xt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if($t.indexOf("xfy")>-1){var mr=J(w,S,y+1,Qr,z);return mr.type===p?{value:new x.type.Term(Z.value,[xt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if(xt.type!==A)for(;;){y=xt.len;var Z=S[y];if(Z&&Z.name==="atom"&&w.__lookup_operator_classes(F,Z.value)){var $t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("yf")>-1)xt={value:new x.type.Term(Z.value,[xt.value]),len:++y,type:p};else if($t.indexOf("yfx")>-1){var mr=J(w,S,++y,an,z);if(mr.type===A)return mr.derived=!0,mr;y=mr.len,xt={value:new x.type.Term(Z.value,[xt.value,mr.value]),len:y,type:p}}else break}else break}}else X={type:A,value:x.error.syntax(S[xt.len-1],"operator expected")};return xt}return xt}function te(w,S,y,F){if(!S[y]||S[y].name==="atom"&&S[y].raw==="."&&!F&&(S[y].space||!S[y+1]||S[y+1].name!=="l_paren"))return{type:A,derived:!1,value:x.error.syntax(S[y-1],"unfounded token")};var z=S[y],X=[];if(S[y].name==="atom"&&S[y].raw!==","){if(y++,S[y-1].space)return{type:p,len:y,value:new x.type.Term(z.value,X)};if(S[y]&&S[y].name==="l_paren"){if(S[y+1]&&S[y+1].name==="r_paren")return{type:A,derived:!0,value:x.error.syntax(S[y+1],"argument expected")};var Z=J(w,S,++y,"999",!0);if(Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],"argument expected",!S[y])};for(X.push(Z.value),y=Z.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(Z=J(w,S,y+1,"999",!0),Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X.push(Z.value),y=Z.len}if(S[y]&&S[y].name==="r_paren")y++;else return{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],", or ) expected",!S[y])}}return{type:p,len:y,value:new x.type.Term(z.value,X)}}return{type:A,derived:!1,value:x.error.syntax(S[y],"term expected")}}function le(w,S,y){if(!S[y])return{type:A,derived:!1,value:x.error.syntax(S[y-1],"[ expected")};if(S[y]&&S[y].name==="l_brace"){var F=J(w,S,++y,"999",!0),z=[F.value],X=void 0;if(F.type===A)return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:new x.type.Term("[]",[])}:{type:A,derived:!0,value:x.error.syntax(S[y],"] expected")};for(y=F.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(F=J(w,S,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};z.push(F.value),y=F.len}var Z=!1;if(S[y]&&S[y].name==="bar"){if(Z=!0,F=J(w,S,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X=F.value,y=F.len}return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:g(z,X)}:{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],Z?"] expected":", or | or ] expected",!S[y])}}return{type:A,derived:!1,value:x.error.syntax(S[y],"list expected")}}function pe(w,S,y){var F=S[y].line,z=J(w,S,y,w.__get_max_priority(),!1),X=null,Z;if(z.type!==A)if(y=z.len,S[y]&&S[y].name==="atom"&&S[y].raw===".")if(y++,x.type.is_term(z.value)){if(z.value.indicator===":-/2"?(X=new x.type.Rule(z.value.args[0],Pe(z.value.args[1])),Z={value:X,len:y,type:p}):z.value.indicator==="-->/2"?(X=ae(new x.type.Rule(z.value.args[0],z.value.args[1]),w),X.body=Pe(X.body),Z={value:X,len:y,type:x.type.is_rule(X)?p:A}):(X=new x.type.Rule(z.value,null),Z={value:X,len:y,type:p}),X){var ie=X.singleton_variables();ie.length>0&&w.throw_warning(x.warning.singleton(ie,X.head.indicator,F))}return Z}else return{type:A,value:x.error.syntax(S[y],"callable expected")};else return{type:A,value:x.error.syntax(S[y]?S[y]:S[y-1],". or operator expected")};return z}function Ae(w,S,y){y=y||{},y.from=y.from?y.from:"$tau-js",y.reconsult=y.reconsult!==void 0?y.reconsult:!0;var F=new U(w),z={},X;F.new_text(S);var Z=0,ie=F.get_tokens(Z);do{if(ie===null||!ie[Z])break;var Se=pe(w,ie,Z);if(Se.type===A)return new H("throw",[Se.value]);if(Se.value.body===null&&Se.value.head.indicator==="?-/1"){var Ne=new Je(w.session);Ne.add_goal(Se.value.head.args[0]),Ne.answer(function(dt){x.type.is_error(dt)?w.throw_warning(dt.args[0]):(dt===!1||dt===null)&&w.throw_warning(x.warning.failed_goal(Se.value.head.args[0],Se.len))}),Z=Se.len;var ot=!0}else if(Se.value.body===null&&Se.value.head.indicator===":-/1"){var ot=w.run_directive(Se.value.head.args[0]);Z=Se.len,Se.value.head.args[0].indicator==="char_conversion/2"&&(ie=F.get_tokens(Z),Z=0)}else{X=Se.value.head.indicator,y.reconsult!==!1&&z[X]!==!0&&!w.is_multifile_predicate(X)&&(w.session.rules[X]=a(w.session.rules[X]||[],function(jt){return jt.dynamic}),z[X]=!0);var ot=w.add_rule(Se.value,y);Z=Se.len}if(!ot)return ot}while(!0);return!0}function ye(w,S){var y=new U(w);y.new_text(S);var F=0;do{var z=y.get_tokens(F);if(z===null)break;var X=J(w,z,0,w.__get_max_priority(),!1);if(X.type!==A){var Z=X.len,ie=Z;if(z[Z]&&z[Z].name==="atom"&&z[Z].raw===".")w.add_goal(Pe(X.value));else{var Se=z[Z];return new H("throw",[x.error.syntax(Se||z[Z-1],". or operator expected",!Se)])}F=X.len+1}else return new H("throw",[X.value])}while(!0);return!0}function ae(w,S){w=w.rename(S);var y=S.next_free_variable(),F=we(w.body,y,S);return F.error?F.value:(w.body=F.value,w.head.args=w.head.args.concat([y,F.variable]),w.head=new H(w.head.id,w.head.args),w)}function we(w,S,y){var F;if(x.type.is_term(w)&&w.indicator==="!/0")return{value:w,variable:S,error:!1};if(x.type.is_term(w)&&w.indicator===",/2"){var z=we(w.args[0],S,y);if(z.error)return z;var X=we(w.args[1],z.variable,y);return X.error?X:{value:new H(",",[z.value,X.value]),variable:X.variable,error:!1}}else{if(x.type.is_term(w)&&w.indicator==="{}/1")return{value:w.args[0],variable:S,error:!1};if(x.type.is_empty_list(w))return{value:new H("true",[]),variable:S,error:!1};if(x.type.is_list(w)){F=y.next_free_variable();for(var Z=w,ie;Z.indicator==="./2";)ie=Z,Z=Z.args[1];return x.type.is_variable(Z)?{value:x.error.instantiation("DCG"),variable:S,error:!0}:x.type.is_empty_list(Z)?(ie.args[1]=F,{value:new H("=",[S,w]),variable:F,error:!1}):{value:x.error.type("list",w,"DCG"),variable:S,error:!0}}else return x.type.is_callable(w)?(F=y.next_free_variable(),w.args=w.args.concat([S,F]),w=new H(w.id,w.args),{value:w,variable:F,error:!1}):{value:x.error.type("callable",w,"DCG"),variable:S,error:!0}}}function Pe(w){return x.type.is_variable(w)?new H("call",[w]):x.type.is_term(w)&&[",/2",";/2","->/2"].indexOf(w.indicator)!==-1?new H(w.id,[Pe(w.args[0]),Pe(w.args[1])]):w}function g(w,S){for(var y=S||new x.type.Term("[]",[]),F=w.length-1;F>=0;F--)y=new x.type.Term(".",[w[F],y]);return y}function Ee(w,S){for(var y=w.length-1;y>=0;y--)w[y]===S&&w.splice(y,1)}function De(w){for(var S={},y=[],F=0;F=0;S--)if(w.charAt(S)==="/")return new H("/",[new H(w.substring(0,S)),new ke(parseInt(w.substring(S+1)),!1)])}function Ie(w){this.id=w}function ke(w,S){this.is_float=S!==void 0?S:parseInt(w)!==w,this.value=this.is_float?w:parseInt(w)}var ht=0;function H(w,S,y){this.ref=y||++ht,this.id=w,this.args=S||[],this.indicator=w+"/"+this.args.length}var lt=0;function Re(w,S,y,F,z,X){this.id=lt++,this.stream=w,this.mode=S,this.alias=y,this.type=F!==void 0?F:"text",this.reposition=z!==void 0?z:!0,this.eof_action=X!==void 0?X:"eof_code",this.position=this.mode==="append"?"end_of_stream":0,this.output=this.mode==="write"||this.mode==="append",this.input=this.mode==="read"}function Qe(w){w=w||{},this.links=w}function be(w,S,y){S=S||new Qe,y=y||null,this.goal=w,this.substitution=S,this.parent=y}function _e(w,S,y){this.head=w,this.body=S,this.dynamic=y||!1}function Te(w){w=w===void 0||w<=0?1e3:w,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new Je(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=w,this.streams={user_input:new Re(typeof hl<"u"&&hl.exports?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Re(typeof hl<"u"&&hl.exports?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=typeof hl<"u"&&hl.exports?nodejs_file_system:tau_file_system,this.standard_input=this.streams.user_input,this.standard_output=this.streams.user_output,this.current_input=this.streams.user_input,this.current_output=this.streams.user_output,this.format_success=function(S){return S.substitution},this.format_error=function(S){return S.goal},this.flag={bounded:x.flag.bounded.value,max_integer:x.flag.max_integer.value,min_integer:x.flag.min_integer.value,integer_rounding_function:x.flag.integer_rounding_function.value,char_conversion:x.flag.char_conversion.value,debug:x.flag.debug.value,max_arity:x.flag.max_arity.value,unknown:x.flag.unknown.value,double_quotes:x.flag.double_quotes.value,occurs_check:x.flag.occurs_check.value,dialect:x.flag.dialect.value,version_data:x.flag.version_data.value,nodejs:x.flag.nodejs.value},this.__loaded_modules=[],this.__char_conversion={},this.__operators={1200:{":-":["fx","xfx"],"-->":["xfx"],"?-":["fx"]},1100:{";":["xfy"]},1050:{"->":["xfy"]},1e3:{",":["xfy"]},900:{"\\+":["fy"]},700:{"=":["xfx"],"\\=":["xfx"],"==":["xfx"],"\\==":["xfx"],"@<":["xfx"],"@=<":["xfx"],"@>":["xfx"],"@>=":["xfx"],"=..":["xfx"],is:["xfx"],"=:=":["xfx"],"=\\=":["xfx"],"<":["xfx"],"=<":["xfx"],">":["xfx"],">=":["xfx"]},600:{":":["xfy"]},500:{"+":["yfx"],"-":["yfx"],"/\\":["yfx"],"\\/":["yfx"]},400:{"*":["yfx"],"/":["yfx"],"//":["yfx"],rem:["yfx"],mod:["yfx"],"<<":["yfx"],">>":["yfx"]},200:{"**":["xfx"],"^":["xfy"],"-":["fy"],"+":["fy"],"\\":["fy"]}}}function Je(w){this.epoch=Date.now(),this.session=w,this.session.total_threads++,this.total_steps=0,this.cpu_time=0,this.cpu_time_last=0,this.points=[],this.debugger=!1,this.debugger_states=[],this.level="top_level/0",this.__calls=[],this.current_limit=this.session.limit,this.warnings=[]}function He(w,S,y){this.id=w,this.rules=S,this.exports=y,x.module[w]=this}He.prototype.exports_predicate=function(w){return this.exports.indexOf(w)!==-1},Ie.prototype.unify=function(w,S){if(S&&e(w.variables(),this.id)!==-1&&!x.type.is_variable(w))return null;var y={};return y[this.id]=w,new Qe(y)},ke.prototype.unify=function(w,S){return x.type.is_number(w)&&this.value===w.value&&this.is_float===w.is_float?new Qe:null},H.prototype.unify=function(w,S){if(x.type.is_term(w)&&this.indicator===w.indicator){for(var y=new Qe,F=0;F=0){var F=this.args[0].value,z=Math.floor(F/26),X=F%26;return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[X]+(z!==0?z:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(w)+"}";case"./2":for(var Z="["+this.args[0].toString(w),ie=this.args[1];ie.indicator==="./2";)Z+=", "+ie.args[0].toString(w),ie=ie.args[1];return ie.indicator!=="[]/0"&&(Z+="|"+ie.toString(w)),Z+="]",Z;case",/2":return"("+this.args[0].toString(w)+", "+this.args[1].toString(w)+")";default:var Se=this.id,Ne=w.session?w.session.lookup_operator(this.id,this.args.length):null;if(w.session===void 0||w.ignore_ops||Ne===null)return w.quoted&&!/^(!|,|;|[a-z][0-9a-zA-Z_]*)$/.test(Se)&&Se!=="{}"&&Se!=="[]"&&(Se="'"+b(Se)+"'"),Se+(this.args.length?"("+o(this.args,function($t){return $t.toString(w)}).join(", ")+")":"");var ot=Ne.priority>S.priority||Ne.priority===S.priority&&(Ne.class==="xfy"&&this.indicator!==S.indicator||Ne.class==="yfx"&&this.indicator!==S.indicator||this.indicator===S.indicator&&Ne.class==="yfx"&&y==="right"||this.indicator===S.indicator&&Ne.class==="xfy"&&y==="left");Ne.indicator=this.indicator;var dt=ot?"(":"",jt=ot?")":"";return this.args.length===0?"("+this.id+")":["fy","fx"].indexOf(Ne.class)!==-1?dt+Se+" "+this.args[0].toString(w,Ne)+jt:["yf","xf"].indexOf(Ne.class)!==-1?dt+this.args[0].toString(w,Ne)+" "+Se+jt:dt+this.args[0].toString(w,Ne,"left")+" "+this.id+" "+this.args[1].toString(w,Ne,"right")+jt}},Re.prototype.toString=function(w){return"("+this.id+")"},Qe.prototype.toString=function(w){var S="{";for(var y in this.links)!this.links.hasOwnProperty(y)||(S!=="{"&&(S+=", "),S+=y+"/"+this.links[y].toString(w));return S+="}",S},be.prototype.toString=function(w){return this.goal===null?"<"+this.substitution.toString(w)+">":"<"+this.goal.toString(w)+", "+this.substitution.toString(w)+">"},_e.prototype.toString=function(w){return this.body?this.head.toString(w)+" :- "+this.body.toString(w)+".":this.head.toString(w)+"."},Te.prototype.toString=function(w){for(var S="",y=0;y=0;z--)F=new H(".",[S[z],F]);return F}return new H(this.id,o(this.args,function(X){return X.apply(w)}),this.ref)},Re.prototype.apply=function(w){return this},_e.prototype.apply=function(w){return new _e(this.head.apply(w),this.body!==null?this.body.apply(w):null)},Qe.prototype.apply=function(w){var S,y={};for(S in this.links)!this.links.hasOwnProperty(S)||(y[S]=this.links[S].apply(w));return new Qe(y)},H.prototype.select=function(){for(var w=this;w.indicator===",/2";)w=w.args[0];return w},H.prototype.replace=function(w){return this.indicator===",/2"?this.args[0].indicator===",/2"?new H(",",[this.args[0].replace(w),this.args[1]]):w===null?this.args[1]:new H(",",[w,this.args[1]]):w},H.prototype.search=function(w){if(x.type.is_term(w)&&w.ref!==void 0&&this.ref===w.ref)return!0;for(var S=0;SS&&F0&&(S=this.head_point().substitution.domain());e(S,x.format_variable(this.session.rename))!==-1;)this.session.rename++;if(w.id==="_")return new Ie(x.format_variable(this.session.rename));this.session.renamed_variables[w.id]=x.format_variable(this.session.rename)}return new Ie(this.session.renamed_variables[w.id])},Te.prototype.next_free_variable=function(){return this.thread.next_free_variable()},Je.prototype.next_free_variable=function(){this.session.rename++;var w=[];for(this.points.length>0&&(w=this.head_point().substitution.domain());e(w,x.format_variable(this.session.rename))!==-1;)this.session.rename++;return new Ie(x.format_variable(this.session.rename))},Te.prototype.is_public_predicate=function(w){return!this.public_predicates.hasOwnProperty(w)||this.public_predicates[w]===!0},Je.prototype.is_public_predicate=function(w){return this.session.is_public_predicate(w)},Te.prototype.is_multifile_predicate=function(w){return this.multifile_predicates.hasOwnProperty(w)&&this.multifile_predicates[w]===!0},Je.prototype.is_multifile_predicate=function(w){return this.session.is_multifile_predicate(w)},Te.prototype.prepend=function(w){return this.thread.prepend(w)},Je.prototype.prepend=function(w){for(var S=w.length-1;S>=0;S--)this.points.push(w[S])},Te.prototype.success=function(w,S){return this.thread.success(w,S)},Je.prototype.success=function(w,y){var y=typeof y>"u"?w:y;this.prepend([new be(w.goal.replace(null),w.substitution,y)])},Te.prototype.throw_error=function(w){return this.thread.throw_error(w)},Je.prototype.throw_error=function(w){this.prepend([new be(new H("throw",[w]),new Qe,null,null)])},Te.prototype.step_rule=function(w,S){return this.thread.step_rule(w,S)},Je.prototype.step_rule=function(w,S){var y=S.indicator;if(w==="user"&&(w=null),w===null&&this.session.rules.hasOwnProperty(y))return this.session.rules[y];for(var F=w===null?this.session.modules:e(this.session.modules,w)===-1?[]:[w],z=0;z1)&&this.again()},Te.prototype.answers=function(w,S,y){return this.thread.answers(w,S,y)},Je.prototype.answers=function(w,S,y){var F=S||1e3,z=this;if(S<=0){y&&y();return}this.answer(function(X){w(X),X!==!1?setTimeout(function(){z.answers(w,S-1,y)},1):y&&y()})},Te.prototype.again=function(w){return this.thread.again(w)},Je.prototype.again=function(w){for(var S,y=Date.now();this.__calls.length>0;){for(this.warnings=[],w!==!1&&(this.current_limit=this.session.limit);this.current_limit>0&&this.points.length>0&&this.head_point().goal!==null&&!x.type.is_error(this.head_point().goal);)if(this.current_limit--,this.step()===!0)return;var F=Date.now();this.cpu_time_last=F-y,this.cpu_time+=this.cpu_time_last;var z=this.__calls.shift();this.current_limit<=0?z(null):this.points.length===0?z(!1):x.type.is_error(this.head_point().goal)?(S=this.session.format_error(this.points.pop()),this.points=[],z(S)):(this.debugger&&this.debugger_states.push(this.head_point()),S=this.session.format_success(this.points.pop()),z(S))}},Te.prototype.unfold=function(w){if(w.body===null)return!1;var S=w.head,y=w.body,F=y.select(),z=new Je(this),X=[];z.add_goal(F),z.step();for(var Z=z.points.length-1;Z>=0;Z--){var ie=z.points[Z],Se=S.apply(ie.substitution),Ne=y.replace(ie.goal);Ne!==null&&(Ne=Ne.apply(ie.substitution)),X.push(new _e(Se,Ne))}var ot=this.rules[S.indicator],dt=e(ot,w);return X.length>0&&dt!==-1?(ot.splice.apply(ot,[dt,1].concat(X)),!0):!1},Je.prototype.unfold=function(w){return this.session.unfold(w)},Ie.prototype.interpret=function(w){return x.error.instantiation(w.level)},ke.prototype.interpret=function(w){return this},H.prototype.interpret=function(w){return x.type.is_unitary_list(this)?this.args[0].interpret(w):x.operate(w,this)},Ie.prototype.compare=function(w){return this.idw.id?1:0},ke.prototype.compare=function(w){if(this.value===w.value&&this.is_float===w.is_float)return 0;if(this.valuew.value)return 1},H.prototype.compare=function(w){if(this.args.lengthw.args.length||this.args.length===w.args.length&&this.id>w.id)return 1;for(var S=0;SF)return 1;if(w.constructor===ke){if(w.is_float&&S.is_float)return 0;if(w.is_float)return-1;if(S.is_float)return 1}return 0},is_substitution:function(w){return w instanceof Qe},is_state:function(w){return w instanceof be},is_rule:function(w){return w instanceof _e},is_variable:function(w){return w instanceof Ie},is_stream:function(w){return w instanceof Re},is_anonymous_var:function(w){return w instanceof Ie&&w.id==="_"},is_callable:function(w){return w instanceof H},is_number:function(w){return w instanceof ke},is_integer:function(w){return w instanceof ke&&!w.is_float},is_float:function(w){return w instanceof ke&&w.is_float},is_term:function(w){return w instanceof H},is_atom:function(w){return w instanceof H&&w.args.length===0},is_ground:function(w){if(w instanceof Ie)return!1;if(w instanceof H){for(var S=0;S0},is_list:function(w){return w instanceof H&&(w.indicator==="[]/0"||w.indicator==="./2")},is_empty_list:function(w){return w instanceof H&&w.indicator==="[]/0"},is_non_empty_list:function(w){return w instanceof H&&w.indicator==="./2"},is_fully_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof Ie||w instanceof H&&w.indicator==="[]/0"},is_instantiated_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof H&&w.indicator==="[]/0"},is_unitary_list:function(w){return w instanceof H&&w.indicator==="./2"&&w.args[1]instanceof H&&w.args[1].indicator==="[]/0"},is_character:function(w){return w instanceof H&&(w.id.length===1||w.id.length>0&&w.id.length<=2&&n(w.id,0)>=65536)},is_character_code:function(w){return w instanceof ke&&!w.is_float&&w.value>=0&&w.value<=1114111},is_byte:function(w){return w instanceof ke&&!w.is_float&&w.value>=0&&w.value<=255},is_operator:function(w){return w instanceof H&&x.arithmetic.evaluation[w.indicator]},is_directive:function(w){return w instanceof H&&x.directive[w.indicator]!==void 0},is_builtin:function(w){return w instanceof H&&x.predicate[w.indicator]!==void 0},is_error:function(w){return w instanceof H&&w.indicator==="throw/1"},is_predicate_indicator:function(w){return w instanceof H&&w.indicator==="//2"&&w.args[0]instanceof H&&w.args[0].args.length===0&&w.args[1]instanceof ke&&w.args[1].is_float===!1},is_flag:function(w){return w instanceof H&&w.args.length===0&&x.flag[w.id]!==void 0},is_value_flag:function(w,S){if(!x.type.is_flag(w))return!1;for(var y in x.flag[w.id].allowed)if(!!x.flag[w.id].allowed.hasOwnProperty(y)&&x.flag[w.id].allowed[y].equals(S))return!0;return!1},is_io_mode:function(w){return x.type.is_atom(w)&&["read","write","append"].indexOf(w.id)!==-1},is_stream_option:function(w){return x.type.is_term(w)&&(w.indicator==="alias/1"&&x.type.is_atom(w.args[0])||w.indicator==="reposition/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="type/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary")||w.indicator==="eof_action/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))},is_stream_position:function(w){return x.type.is_integer(w)&&w.value>=0||x.type.is_atom(w)&&(w.id==="end_of_stream"||w.id==="past_end_of_stream")},is_stream_property:function(w){return x.type.is_term(w)&&(w.indicator==="input/0"||w.indicator==="output/0"||w.indicator==="alias/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="file_name/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="position/1"&&(x.type.is_variable(w.args[0])||x.type.is_stream_position(w.args[0]))||w.indicator==="reposition/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))||w.indicator==="type/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary"))||w.indicator==="mode/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="read"||w.args[0].id==="write"||w.args[0].id==="append"))||w.indicator==="eof_action/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))||w.indicator==="end_of_stream/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="at"||w.args[0].id==="past"||w.args[0].id==="not")))},is_streamable:function(w){return w.__proto__.stream!==void 0},is_read_option:function(w){return x.type.is_term(w)&&["variables/1","variable_names/1","singletons/1"].indexOf(w.indicator)!==-1},is_write_option:function(w){return x.type.is_term(w)&&(w.indicator==="quoted/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="ignore_ops/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="numbervars/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))},is_close_option:function(w){return x.type.is_term(w)&&w.indicator==="force/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")},is_modifiable_flag:function(w){return x.type.is_flag(w)&&x.flag[w.id].changeable},is_module:function(w){return w instanceof H&&w.indicator==="library/1"&&w.args[0]instanceof H&&w.args[0].args.length===0&&x.module[w.args[0].id]!==void 0}},arithmetic:{evaluation:{"e/0":{type_args:null,type_result:!0,fn:function(w){return Math.E}},"pi/0":{type_args:null,type_result:!0,fn:function(w){return Math.PI}},"tau/0":{type_args:null,type_result:!0,fn:function(w){return 2*Math.PI}},"epsilon/0":{type_args:null,type_result:!0,fn:function(w){return Number.EPSILON}},"+/1":{type_args:null,type_result:null,fn:function(w,S){return w}},"-/1":{type_args:null,type_result:null,fn:function(w,S){return-w}},"\\/1":{type_args:!1,type_result:!1,fn:function(w,S){return~w}},"abs/1":{type_args:null,type_result:null,fn:function(w,S){return Math.abs(w)}},"sign/1":{type_args:null,type_result:null,fn:function(w,S){return Math.sign(w)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(w,S){return w-parseInt(w)}},"float/1":{type_args:null,type_result:!0,fn:function(w,S){return parseFloat(w)}},"floor/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.floor(w)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"round/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.round(w)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.ceil(w)}},"sin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sin(w)}},"cos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.cos(w)}},"tan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.tan(w)}},"asin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.asin(w)}},"acos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.acos(w)}},"atan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.atan(w)}},"atan2/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.atan2(w,S)}},"exp/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.exp(w)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sqrt(w)}},"log/1":{type_args:null,type_result:!0,fn:function(w,S){return w>0?Math.log(w):x.error.evaluation("undefined",S.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(w,S,y){return w+S}},"-/2":{type_args:null,type_result:null,fn:function(w,S,y){return w-S}},"*/2":{type_args:null,type_result:null,fn:function(w,S,y){return w*S}},"//2":{type_args:null,type_result:!0,fn:function(w,S,y){return S?w/S:x.error.evaluation("zero_division",y.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?parseInt(w/S):x.error.evaluation("zero_division",y.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.pow(w,S)}},"^/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.pow(w,S)}},"<>/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w>>S}},"/\\/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w&S}},"\\//2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w|S}},"xor/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w^S}},"rem/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w%S:x.error.evaluation("zero_division",y.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w-parseInt(w/S)*S:x.error.evaluation("zero_division",y.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.max(w,S)}},"min/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.min(w,S)}}}},directive:{"dynamic/1":function(w,S){var y=S.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_compound(y)||y.indicator!=="//2")w.throw_error(x.error.type("predicate_indicator",y,S.indicator));else if(x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1]))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],S.indicator));else if(!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],S.indicator));else{var F=S.args[0].args[0].id+"/"+S.args[0].args[1].value;w.session.public_predicates[F]=!0,w.session.rules[F]||(w.session.rules[F]=[])}},"multifile/1":function(w,S){var y=S.args[0];x.type.is_variable(y)?w.throw_error(x.error.instantiation(S.indicator)):!x.type.is_compound(y)||y.indicator!=="//2"?w.throw_error(x.error.type("predicate_indicator",y,S.indicator)):x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1])?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_atom(y.args[0])?x.type.is_integer(y.args[1])?w.session.multifile_predicates[S.args[0].args[0].id+"/"+S.args[0].args[1].value]=!0:w.throw_error(x.error.type("integer",y.args[1],S.indicator)):w.throw_error(x.error.type("atom",y.args[0],S.indicator))},"set_prolog_flag/2":function(w,S){var y=S.args[0],F=S.args[1];x.type.is_variable(y)||x.type.is_variable(F)?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_atom(y)?x.type.is_flag(y)?x.type.is_value_flag(y,F)?x.type.is_modifiable_flag(y)?w.session.flag[y.id]=F:w.throw_error(x.error.permission("modify","flag",y)):w.throw_error(x.error.domain("flag_value",new H("+",[y,F]),S.indicator)):w.throw_error(x.error.domain("prolog_flag",y,S.indicator)):w.throw_error(x.error.type("atom",y,S.indicator))},"use_module/1":function(w,S){var y=S.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_term(y))w.throw_error(x.error.type("term",y,S.indicator));else if(x.type.is_module(y)){var F=y.args[0].id;e(w.session.modules,F)===-1&&w.session.modules.push(F)}},"char_conversion/2":function(w,S){var y=S.args[0],F=S.args[1];x.type.is_variable(y)||x.type.is_variable(F)?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_character(y)?x.type.is_character(F)?y.id===F.id?delete w.session.__char_conversion[y.id]:w.session.__char_conversion[y.id]=F.id:w.throw_error(x.error.type("character",F,S.indicator)):w.throw_error(x.error.type("character",y,S.indicator))},"op/3":function(w,S){var y=S.args[0],F=S.args[1],z=S.args[2];if(x.type.is_variable(y)||x.type.is_variable(F)||x.type.is_variable(z))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_integer(y))w.throw_error(x.error.type("integer",y,S.indicator));else if(!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,S.indicator));else if(!x.type.is_atom(z))w.throw_error(x.error.type("atom",z,S.indicator));else if(y.value<0||y.value>1200)w.throw_error(x.error.domain("operator_priority",y,S.indicator));else if(z.id===",")w.throw_error(x.error.permission("modify","operator",z,S.indicator));else if(z.id==="|"&&(y.value<1001||F.id.length!==3))w.throw_error(x.error.permission("modify","operator",z,S.indicator));else if(["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(F.id)===-1)w.throw_error(x.error.domain("operator_specifier",F,S.indicator));else{var X={prefix:null,infix:null,postfix:null};for(var Z in w.session.__operators)if(!!w.session.__operators.hasOwnProperty(Z)){var ie=w.session.__operators[Z][z.id];ie&&(e(ie,"fx")!==-1&&(X.prefix={priority:Z,type:"fx"}),e(ie,"fy")!==-1&&(X.prefix={priority:Z,type:"fy"}),e(ie,"xf")!==-1&&(X.postfix={priority:Z,type:"xf"}),e(ie,"yf")!==-1&&(X.postfix={priority:Z,type:"yf"}),e(ie,"xfx")!==-1&&(X.infix={priority:Z,type:"xfx"}),e(ie,"xfy")!==-1&&(X.infix={priority:Z,type:"xfy"}),e(ie,"yfx")!==-1&&(X.infix={priority:Z,type:"yfx"}))}var Se;switch(F.id){case"fy":case"fx":Se="prefix";break;case"yf":case"xf":Se="postfix";break;default:Se="infix";break}if(((X.prefix&&Se==="prefix"||X.postfix&&Se==="postfix"||X.infix&&Se==="infix")&&X[Se].type!==F.id||X.infix&&Se==="postfix"||X.postfix&&Se==="infix")&&y.value!==0)w.throw_error(x.error.permission("create","operator",z,S.indicator));else return X[Se]&&(Ee(w.session.__operators[X[Se].priority][z.id],F.id),w.session.__operators[X[Se].priority][z.id].length===0&&delete w.session.__operators[X[Se].priority][z.id]),y.value>0&&(w.session.__operators[y.value]||(w.session.__operators[y.value.toString()]={}),w.session.__operators[y.value][z.id]||(w.session.__operators[y.value][z.id]=[]),w.session.__operators[y.value][z.id].push(F.id)),!0}}},predicate:{"op/3":function(w,S,y){x.directive["op/3"](w,y)&&w.success(S)},"current_op/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=[];for(var ie in w.session.__operators)for(var Se in w.session.__operators[ie])for(var Ne=0;Ne/2"){var F=w.points,z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(Ne){return Ne.substitution},w.session.format_error=function(Ne){return Ne.goal},w.points=[new be(y.args[0].args[0],S.substitution,S)];var Z=function(Ne){w.points=F,w.session.format_success=z,w.session.format_error=X,Ne===!1?w.prepend([new be(S.goal.replace(y.args[1]),S.substitution,S)]):x.type.is_error(Ne)?w.throw_error(Ne.args[0]):Ne===null?(w.prepend([S]),w.__calls.shift()(null)):w.prepend([new be(S.goal.replace(y.args[0].args[1]).apply(Ne),S.substitution.apply(Ne),S)])};w.__calls.unshift(Z)}else{var ie=new be(S.goal.replace(y.args[0]),S.substitution,S),Se=new be(S.goal.replace(y.args[1]),S.substitution,S);w.prepend([ie,Se])}},"!/0":function(w,S,y){var F,z,X=[];for(F=S,z=null;F.parent!==null&&F.parent.goal.search(y);)if(z=F,F=F.parent,F.goal!==null){var Z=F.goal.select();if(Z&&Z.id==="call"&&Z.search(y)){F=z;break}}for(var ie=w.points.length-1;ie>=0;ie--){for(var Se=w.points[ie],Ne=Se.parent;Ne!==null&&Ne!==F.parent;)Ne=Ne.parent;Ne===null&&Ne!==F.parent&&X.push(Se)}w.points=X.reverse(),w.success(S)},"\\+/1":function(w,S,y){var F=y.args[0];x.type.is_variable(F)?w.throw_error(x.error.instantiation(w.level)):x.type.is_callable(F)?w.prepend([new be(S.goal.replace(new H(",",[new H(",",[new H("call",[F]),new H("!",[])]),new H("fail",[])])),S.substitution,S),new be(S.goal.replace(null),S.substitution,S)]):w.throw_error(x.error.type("callable",F,w.level))},"->/2":function(w,S,y){var F=S.goal.replace(new H(",",[y.args[0],new H(",",[new H("!"),y.args[1]])]));w.prepend([new be(F,S.substitution,S)])},"fail/0":function(w,S,y){},"false/0":function(w,S,y){},"true/0":function(w,S,y){w.success(S)},"call/1":ne(1),"call/2":ne(2),"call/3":ne(3),"call/4":ne(4),"call/5":ne(5),"call/6":ne(6),"call/7":ne(7),"call/8":ne(8),"once/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("call",[F]),new H("!",[])])),S.substitution,S)])},"forall/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("\\+",[new H(",",[new H("call",[F]),new H("\\+",[new H("call",[z])])])])),S.substitution,S)])},"repeat/0":function(w,S,y){w.prepend([new be(S.goal.replace(null),S.substitution,S),S])},"throw/1":function(w,S,y){x.type.is_variable(y.args[0])?w.throw_error(x.error.instantiation(w.level)):w.throw_error(y.args[0])},"catch/3":function(w,S,y){var F=w.points;w.points=[],w.prepend([new be(y.args[0],S.substitution,S)]);var z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(ie){return ie.substitution},w.session.format_error=function(ie){return ie.goal};var Z=function(ie){var Se=w.points;if(w.points=F,w.session.format_success=z,w.session.format_error=X,x.type.is_error(ie)){for(var Ne=[],ot=w.points.length-1;ot>=0;ot--){for(var $t=w.points[ot],dt=$t.parent;dt!==null&&dt!==S.parent;)dt=dt.parent;dt===null&&dt!==S.parent&&Ne.push($t)}w.points=Ne;var jt=w.get_flag("occurs_check").indicator==="true/0",$t=new be,xt=x.unify(ie.args[0],y.args[1],jt);xt!==null?($t.substitution=S.substitution.apply(xt),$t.goal=S.goal.replace(y.args[2]).apply(xt),$t.parent=S,w.prepend([$t])):w.throw_error(ie.args[0])}else if(ie!==!1){for(var an=ie===null?[]:[new be(S.goal.apply(ie).replace(null),S.substitution.apply(ie),S)],Qr=[],ot=Se.length-1;ot>=0;ot--){Qr.push(Se[ot]);var mr=Se[ot].goal!==null?Se[ot].goal.select():null;if(x.type.is_term(mr)&&mr.indicator==="!/0")break}var xr=o(Qr,function(Wr){return Wr.goal===null&&(Wr.goal=new H("true",[])),Wr=new be(S.goal.replace(new H("catch",[Wr.goal,y.args[1],y.args[2]])),S.substitution.apply(Wr.substitution),Wr.parent),Wr.exclude=y.args[0].variables(),Wr}).reverse();w.prepend(xr),w.prepend(an),ie===null&&(this.current_limit=0,w.__calls.shift()(null))}};w.__calls.unshift(Z)},"=/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=new be,X=x.unify(y.args[0],y.args[1],F);X!==null&&(z.goal=S.goal.apply(X).replace(null),z.substitution=S.substitution.apply(X),z.parent=S,w.prepend([z]))},"unify_with_occurs_check/2":function(w,S,y){var F=new be,z=x.unify(y.args[0],y.args[1],!0);z!==null&&(F.goal=S.goal.apply(z).replace(null),F.substitution=S.substitution.apply(z),F.parent=S,w.prepend([F]))},"\\=/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[0],y.args[1],F);z===null&&w.success(S)},"subsumes_term/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[1],y.args[0],F);z!==null&&y.args[1].apply(z).equals(y.args[1])&&w.success(S)},"findall/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(z))w.throw_error(x.error.type("callable",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=w.next_free_variable(),ie=new H(",",[z,new H("=",[Z,F])]),Se=w.points,Ne=w.session.limit,ot=w.session.format_success;w.session.format_success=function($t){return $t.substitution},w.add_goal(ie,!0,S);var dt=[],jt=function($t){if($t!==!1&&$t!==null&&!x.type.is_error($t))w.__calls.unshift(jt),dt.push($t.links[Z.id]),w.session.limit=w.current_limit;else if(w.points=Se,w.session.limit=Ne,w.session.format_success=ot,x.type.is_error($t))w.throw_error($t.args[0]);else if(w.current_limit>0){for(var xt=new H("[]"),an=dt.length-1;an>=0;an--)xt=new H(".",[dt[an],xt]);w.prepend([new be(S.goal.replace(new H("=",[X,xt])),S.substitution,S)])}};w.__calls.unshift(jt)}},"bagof/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(X))w.throw_error(x.error.type("callable",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Se;X.indicator==="^/2"?(Se=X.args[0].variables(),X=X.args[1]):Se=[],Se=Se.concat(z.variables());for(var Ne=X.variables().filter(function(xr){return e(Se,xr)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,xt=w.session.limit,an=w.session.format_success;w.session.format_success=function(xr){return xr.substitution},w.add_goal(jt,!0,S);var Qr=[],mr=function(xr){if(xr!==!1&&xr!==null&&!x.type.is_error(xr)){w.__calls.unshift(mr);var Wr=!1,Vn=xr.links[ie.id].args[0],Ns=xr.links[ie.id].args[1];for(var Ri in Qr)if(!!Qr.hasOwnProperty(Ri)){var ps=Qr[Ri];if(ps.variables.equals(Vn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Vn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=xt,w.session.format_success=an,x.type.is_error(xr))w.throw_error(xr.args[0]);else if(w.current_limit>0){for(var io=[],Si=0;Si=0;so--)Ls=new H(".",[xr[so],Ls]);io.push(new be(S.goal.replace(new H(",",[new H("=",[ot,Qr[Si].variables]),new H("=",[Z,Ls])])),S.substitution,S))}w.prepend(io)}};w.__calls.unshift(mr)}},"setof/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(X))w.throw_error(x.error.type("callable",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Se;X.indicator==="^/2"?(Se=X.args[0].variables(),X=X.args[1]):Se=[],Se=Se.concat(z.variables());for(var Ne=X.variables().filter(function(xr){return e(Se,xr)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,xt=w.session.limit,an=w.session.format_success;w.session.format_success=function(xr){return xr.substitution},w.add_goal(jt,!0,S);var Qr=[],mr=function(xr){if(xr!==!1&&xr!==null&&!x.type.is_error(xr)){w.__calls.unshift(mr);var Wr=!1,Vn=xr.links[ie.id].args[0],Ns=xr.links[ie.id].args[1];for(var Ri in Qr)if(!!Qr.hasOwnProperty(Ri)){var ps=Qr[Ri];if(ps.variables.equals(Vn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Vn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=xt,w.session.format_success=an,x.type.is_error(xr))w.throw_error(xr.args[0]);else if(w.current_limit>0){for(var io=[],Si=0;Si=0;so--)Ls=new H(".",[xr[so],Ls]);io.push(new be(S.goal.replace(new H(",",[new H("=",[ot,Qr[Si].variables]),new H("=",[Z,Ls])])),S.substitution,S))}w.prepend(io)}};w.__calls.unshift(mr)}},"functor/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(z)&&(x.type.is_variable(X)||x.type.is_variable(Z)))w.throw_error(x.error.instantiation("functor/3"));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",y.args[2],"functor/3"));else if(!x.type.is_variable(X)&&!x.type.is_atomic(X))w.throw_error(x.error.type("atomic",y.args[1],"functor/3"));else if(x.type.is_integer(X)&&x.type.is_integer(Z)&&Z.value!==0)w.throw_error(x.error.type("atom",y.args[1],"functor/3"));else if(x.type.is_variable(z)){if(y.args[2].value>=0){for(var ie=[],Se=0;Se0&&F<=y.args[1].args.length){var z=new H("=",[y.args[1].args[F-1],y.args[2]]);w.prepend([new be(S.goal.replace(z),S.substitution,S)])}}},"=../2":function(w,S,y){var F;if(x.type.is_variable(y.args[0])&&(x.type.is_variable(y.args[1])||x.type.is_non_empty_list(y.args[1])&&x.type.is_variable(y.args[1].args[0])))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_fully_list(y.args[1]))w.throw_error(x.error.type("list",y.args[1],y.indicator));else if(x.type.is_variable(y.args[0])){if(!x.type.is_variable(y.args[1])){var X=[];for(F=y.args[1].args[1];F.indicator==="./2";)X.push(F.args[0]),F=F.args[1];x.type.is_variable(y.args[0])&&x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):X.length===0&&x.type.is_compound(y.args[1].args[0])?w.throw_error(x.error.type("atomic",y.args[1].args[0],y.indicator)):X.length>0&&(x.type.is_compound(y.args[1].args[0])||x.type.is_number(y.args[1].args[0]))?w.throw_error(x.error.type("atom",y.args[1].args[0],y.indicator)):X.length===0?w.prepend([new be(S.goal.replace(new H("=",[y.args[1].args[0],y.args[0]],S)),S.substitution,S)]):w.prepend([new be(S.goal.replace(new H("=",[new H(y.args[1].args[0].id,X),y.args[0]])),S.substitution,S)])}}else{if(x.type.is_atomic(y.args[0]))F=new H(".",[y.args[0],new H("[]")]);else{F=new H("[]");for(var z=y.args[0].args.length-1;z>=0;z--)F=new H(".",[y.args[0].args[z],F]);F=new H(".",[new H(y.args[0].id),F])}w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S)])}},"copy_term/2":function(w,S,y){var F=y.args[0].rename(w);w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S.parent)])},"term_variables/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(!x.type.is_fully_list(z))w.throw_error(x.error.type("list",z,y.indicator));else{var X=g(o(De(F.variables()),function(Z){return new Ie(Z)}));w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"clause/2":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_callable(y.args[1]))w.throw_error(x.error.type("callable",y.args[1],y.indicator));else if(w.session.rules[y.args[0].indicator]!==void 0)if(w.is_public_predicate(y.args[0].indicator)){var F=[];for(var z in w.session.rules[y.args[0].indicator])if(!!w.session.rules[y.args[0].indicator].hasOwnProperty(z)){var X=w.session.rules[y.args[0].indicator][z];w.session.renamed_variables={},X=X.rename(w),X.body===null&&(X.body=new H("true"));var Z=new H(",",[new H("=",[X.head,y.args[0]]),new H("=",[X.body,y.args[1]])]);F.push(new be(S.goal.replace(Z),S.substitution,S))}w.prepend(F)}else w.throw_error(x.error.permission("access","private_procedure",y.args[0].indicator,y.indicator))},"current_predicate/1":function(w,S,y){var F=y.args[0];if(!x.type.is_variable(F)&&(!x.type.is_compound(F)||F.indicator!=="//2"))w.throw_error(x.error.type("predicate_indicator",F,y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_variable(F.args[0])&&!x.type.is_atom(F.args[0]))w.throw_error(x.error.type("atom",F.args[0],y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_variable(F.args[1])&&!x.type.is_integer(F.args[1]))w.throw_error(x.error.type("integer",F.args[1],y.indicator));else{var z=[];for(var X in w.session.rules)if(!!w.session.rules.hasOwnProperty(X)){var Z=X.lastIndexOf("/"),ie=X.substr(0,Z),Se=parseInt(X.substr(Z+1,X.length-(Z+1))),Ne=new H("/",[new H(ie),new ke(Se,!1)]),ot=new H("=",[Ne,F]);z.push(new be(S.goal.replace(ot),S.substitution,S))}w.prepend(z)}},"asserta/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=Pe(y.args[0].args[1])):(F=y.args[0],z=null),x.type.is_callable(F)?z!==null&&!x.type.is_callable(z)?w.throw_error(x.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator]=[new _e(F,z,!0)].concat(w.session.rules[F.indicator]),w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(x.error.type("callable",F,y.indicator))}},"assertz/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=Pe(y.args[0].args[1])):(F=y.args[0],z=null),x.type.is_callable(F)?z!==null&&!x.type.is_callable(z)?w.throw_error(x.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator].push(new _e(F,z,!0)),w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(x.error.type("callable",F,y.indicator))}},"retract/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;if(y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=y.args[0].args[1]):(F=y.args[0],z=new H("true")),typeof S.retract>"u")if(w.is_public_predicate(F.indicator)){if(w.session.rules[F.indicator]!==void 0){for(var X=[],Z=0;Zw.get_flag("max_arity").value)w.throw_error(x.error.representation("max_arity",y.indicator));else{var F=y.args[0].args[0].id+"/"+y.args[0].args[1].value;w.is_public_predicate(F)?(delete w.session.rules[F],w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F,y.indicator))}},"atom_length/2":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],y.indicator));else if(x.type.is_integer(y.args[1])&&y.args[1].value<0)w.throw_error(x.error.domain("not_less_than_zero",y.args[1],y.indicator));else{var F=new ke(y.args[0].id.length,!1);w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S)])}},"atom_concat/3":function(w,S,y){var F,z,X=y.args[0],Z=y.args[1],ie=y.args[2];if(x.type.is_variable(ie)&&(x.type.is_variable(X)||x.type.is_variable(Z)))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_atom(X))w.throw_error(x.error.type("atom",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_atom(Z))w.throw_error(x.error.type("atom",Z,y.indicator));else if(!x.type.is_variable(ie)&&!x.type.is_atom(ie))w.throw_error(x.error.type("atom",ie,y.indicator));else{var Se=x.type.is_variable(X),Ne=x.type.is_variable(Z);if(!Se&&!Ne)z=new H("=",[ie,new H(X.id+Z.id)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]);else if(Se&&!Ne)F=ie.id.substr(0,ie.id.length-Z.id.length),F+Z.id===ie.id&&(z=new H("=",[X,new H(F)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]));else if(Ne&&!Se)F=ie.id.substr(X.id.length),X.id+F===ie.id&&(z=new H("=",[Z,new H(F)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]));else{for(var ot=[],dt=0;dt<=ie.id.length;dt++){var jt=new H(ie.id.substr(0,dt)),$t=new H(ie.id.substr(dt));z=new H(",",[new H("=",[jt,X]),new H("=",[$t,Z])]),ot.push(new be(S.goal.replace(z),S.substitution,S))}w.prepend(ot)}}},"sub_atom/5":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2],ie=y.args[3],Se=y.args[4];if(x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_integer(X))w.throw_error(x.error.type("integer",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",Z,y.indicator));else if(!x.type.is_variable(ie)&&!x.type.is_integer(ie))w.throw_error(x.error.type("integer",ie,y.indicator));else if(x.type.is_integer(X)&&X.value<0)w.throw_error(x.error.domain("not_less_than_zero",X,y.indicator));else if(x.type.is_integer(Z)&&Z.value<0)w.throw_error(x.error.domain("not_less_than_zero",Z,y.indicator));else if(x.type.is_integer(ie)&&ie.value<0)w.throw_error(x.error.domain("not_less_than_zero",ie,y.indicator));else{var Ne=[],ot=[],dt=[];if(x.type.is_variable(X))for(F=0;F<=z.id.length;F++)Ne.push(F);else Ne.push(X.value);if(x.type.is_variable(Z))for(F=0;F<=z.id.length;F++)ot.push(F);else ot.push(Z.value);if(x.type.is_variable(ie))for(F=0;F<=z.id.length;F++)dt.push(F);else dt.push(ie.value);var jt=[];for(var $t in Ne)if(!!Ne.hasOwnProperty($t)){F=Ne[$t];for(var xt in ot)if(!!ot.hasOwnProperty(xt)){var an=ot[xt],Qr=z.id.length-F-an;if(e(dt,Qr)!==-1&&F+an+Qr===z.id.length){var mr=z.id.substr(F,an);if(z.id===z.id.substr(0,F)+mr+z.id.substr(F+an,Qr)){var xr=new H("=",[new H(mr),Se]),Wr=new H("=",[X,new ke(F)]),Vn=new H("=",[Z,new ke(an)]),Ns=new H("=",[ie,new ke(Qr)]),Ri=new H(",",[new H(",",[new H(",",[Wr,Vn]),Ns]),xr]);jt.push(new be(S.goal.replace(Ri),S.substitution,S))}}}}w.prepend(jt)}},"atom_chars/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_variable(F)){for(var ie=z,Se=x.type.is_variable(F),Ne="";ie.indicator==="./2";){if(x.type.is_character(ie.args[0]))Ne+=ie.args[0].id;else if(x.type.is_variable(ie.args[0])&&Se){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}x.type.is_variable(ie)&&Se?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)?w.throw_error(x.error.type("list",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[new H(Ne),F])),S.substitution,S)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new H(F.id.charAt(Z)),X]);w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"atom_codes/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_variable(F)){for(var ie=z,Se=x.type.is_variable(F),Ne="";ie.indicator==="./2";){if(x.type.is_character_code(ie.args[0]))Ne+=u(ie.args[0].value);else if(x.type.is_variable(ie.args[0])&&Se){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.representation("character_code",y.indicator));return}ie=ie.args[1]}x.type.is_variable(ie)&&Se?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)?w.throw_error(x.error.type("list",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[new H(Ne),F])),S.substitution,S)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new ke(n(F.id,Z),!1),X]);w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"char_code/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_character(F))w.throw_error(x.error.type("character",F,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_integer(z))w.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_character_code(z))w.throw_error(x.error.representation("character_code",y.indicator));else if(x.type.is_variable(z)){var X=new ke(n(F.id,0),!1);w.prepend([new be(S.goal.replace(new H("=",[X,z])),S.substitution,S)])}else{var Z=new H(u(z.value));w.prepend([new be(S.goal.replace(new H("=",[Z,F])),S.substitution,S)])}},"number_chars/2":function(w,S,y){var F,z=y.args[0],X=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))w.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=x.type.is_variable(z);if(!x.type.is_variable(X)){var ie=X,Se=!0;for(F="";ie.indicator==="./2";){if(x.type.is_character(ie.args[0]))F+=ie.args[0].id;else if(x.type.is_variable(ie.args[0]))Se=!1;else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Se=Se&&x.type.is_empty_list(ie),!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)){w.throw_error(x.error.type("list",X,y.indicator));return}if(!Se&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else if(Se)if(x.type.is_variable(ie)&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!x.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,ot])),S.substitution,S)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),jt=F.length-1;jt>=0;jt--)dt=new H(".",[new H(F.charAt(jt)),dt]);w.prepend([new be(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"number_codes/2":function(w,S,y){var F,z=y.args[0],X=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))w.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=x.type.is_variable(z);if(!x.type.is_variable(X)){var ie=X,Se=!0;for(F="";ie.indicator==="./2";){if(x.type.is_character_code(ie.args[0]))F+=u(ie.args[0].value);else if(x.type.is_variable(ie.args[0]))Se=!1;else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character_code",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Se=Se&&x.type.is_empty_list(ie),!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)){w.throw_error(x.error.type("list",X,y.indicator));return}if(!Se&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else if(Se)if(x.type.is_variable(ie)&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!x.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,ot])),S.substitution,S)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),jt=F.length-1;jt>=0;jt--)dt=new H(".",[new ke(n(F,jt),!1),dt]);w.prepend([new be(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"upcase_atom/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?!x.type.is_variable(z)&&!x.type.is_atom(z)?w.throw_error(x.error.type("atom",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,new H(F.id.toUpperCase(),[])])),S.substitution,S)]):w.throw_error(x.error.type("atom",F,y.indicator))},"downcase_atom/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?!x.type.is_variable(z)&&!x.type.is_atom(z)?w.throw_error(x.error.type("atom",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,new H(F.id.toLowerCase(),[])])),S.substitution,S)]):w.throw_error(x.error.type("atom",F,y.indicator))},"atomic_list_concat/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("atomic_list_concat",[F,new H("",[]),z])),S.substitution,S)])},"atomic_list_concat/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(z)||x.type.is_variable(F)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_list(F))w.throw_error(x.error.type("list",F,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_atom(X))w.throw_error(x.error.type("atom",X,y.indicator));else if(x.type.is_variable(X)){for(var ie="",Se=F;x.type.is_term(Se)&&Se.indicator==="./2";){if(!x.type.is_atom(Se.args[0])&&!x.type.is_number(Se.args[0])){w.throw_error(x.error.type("atomic",Se.args[0],y.indicator));return}ie!==""&&(ie+=z.id),x.type.is_atom(Se.args[0])?ie+=Se.args[0].id:ie+=""+Se.args[0].value,Se=Se.args[1]}ie=new H(ie,[]),x.type.is_variable(Se)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_term(Se)||Se.indicator!=="[]/0"?w.throw_error(x.error.type("list",F,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[ie,X])),S.substitution,S)])}else{var Z=g(o(X.id.split(z.id),function(Ne){return new H(Ne,[])}));w.prepend([new be(S.goal.replace(new H("=",[Z,F])),S.substitution,S)])}},"@=/2":function(w,S,y){x.compare(y.args[0],y.args[1])>0&&w.success(S)},"@>=/2":function(w,S,y){x.compare(y.args[0],y.args[1])>=0&&w.success(S)},"compare/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_atom(F)&&["<",">","="].indexOf(F.id)===-1)w.throw_error(x.type.domain("order",F,y.indicator));else{var Z=x.compare(z,X);Z=Z===0?"=":Z===-1?"<":">",w.prepend([new be(S.goal.replace(new H("=",[F,new H(Z,[])])),S.substitution,S)])}},"is/2":function(w,S,y){var F=y.args[1].interpret(w);x.type.is_number(F)?w.prepend([new be(S.goal.replace(new H("=",[y.args[0],F],w.level)),S.substitution,S)]):w.throw_error(F)},"between/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(F)||x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_integer(F))w.throw_error(x.error.type("integer",F,y.indicator));else if(!x.type.is_integer(z))w.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_integer(X))w.throw_error(x.error.type("integer",X,y.indicator));else if(x.type.is_variable(X)){var Z=[new be(S.goal.replace(new H("=",[X,F])),S.substitution,S)];F.value=X.value&&w.success(S)},"succ/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)&&x.type.is_variable(z)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_variable(F)&&!x.type.is_integer(F)?w.throw_error(x.error.type("integer",F,y.indicator)):!x.type.is_variable(z)&&!x.type.is_integer(z)?w.throw_error(x.error.type("integer",z,y.indicator)):!x.type.is_variable(F)&&F.value<0?w.throw_error(x.error.domain("not_less_than_zero",F,y.indicator)):!x.type.is_variable(z)&&z.value<0?w.throw_error(x.error.domain("not_less_than_zero",z,y.indicator)):(x.type.is_variable(z)||z.value>0)&&(x.type.is_variable(F)?w.prepend([new be(S.goal.replace(new H("=",[F,new ke(z.value-1,!1)])),S.substitution,S)]):w.prepend([new be(S.goal.replace(new H("=",[z,new ke(F.value+1,!1)])),S.substitution,S)]))},"=:=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F===0&&w.success(S)},"=\\=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F!==0&&w.success(S)},"/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F>0&&w.success(S)},">=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F>=0&&w.success(S)},"var/1":function(w,S,y){x.type.is_variable(y.args[0])&&w.success(S)},"atom/1":function(w,S,y){x.type.is_atom(y.args[0])&&w.success(S)},"atomic/1":function(w,S,y){x.type.is_atomic(y.args[0])&&w.success(S)},"compound/1":function(w,S,y){x.type.is_compound(y.args[0])&&w.success(S)},"integer/1":function(w,S,y){x.type.is_integer(y.args[0])&&w.success(S)},"float/1":function(w,S,y){x.type.is_float(y.args[0])&&w.success(S)},"number/1":function(w,S,y){x.type.is_number(y.args[0])&&w.success(S)},"nonvar/1":function(w,S,y){x.type.is_variable(y.args[0])||w.success(S)},"ground/1":function(w,S,y){y.variables().length===0&&w.success(S)},"acyclic_term/1":function(w,S,y){for(var F=S.substitution.apply(S.substitution),z=y.args[0].variables(),X=0;X0?xt[xt.length-1]:null,xt!==null&&(jt=J(w,xt,0,w.__get_max_priority(),!1))}if(jt.type===p&&jt.len===xt.length-1&&an.value==="."){jt=jt.value.rename(w);var Qr=new H("=",[z,jt]);if(ie.variables){var mr=g(o(De(jt.variables()),function(xr){return new Ie(xr)}));Qr=new H(",",[Qr,new H("=",[ie.variables,mr])])}if(ie.variable_names){var mr=g(o(De(jt.variables()),function(Wr){var Vn;for(Vn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Vn)&&w.session.renamed_variables[Vn]===Wr)break;return new H("=",[new H(Vn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.variable_names,mr])])}if(ie.singletons){var mr=g(o(new _e(jt,null).singleton_variables(),function(Wr){var Vn;for(Vn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Vn)&&w.session.renamed_variables[Vn]===Wr)break;return new H("=",[new H(Vn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.singletons,mr])])}w.prepend([new be(S.goal.replace(Qr),S.substitution,S)])}else jt.type===p?w.throw_error(x.error.syntax(xt[jt.len],"unexpected token",!1)):w.throw_error(jt.value)}}},"write/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write",[new Ie("S"),F])])),S.substitution,S)])},"write/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("false",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"writeq/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("writeq",[new Ie("S"),F])])),S.substitution,S)])},"writeq/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"write_canonical/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_canonical",[new Ie("S"),F])])),S.substitution,S)])},"write_canonical/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("true")]),new H(".",[new H("numbervars",[new H("false")]),new H("[]",[])])])])])),S.substitution,S)])},"write_term/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_term",[new Ie("S"),F,z])])),S.substitution,S)])},"write_term/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=x.type.is_stream(F)?F:w.get_stream_by_alias(F.id);if(x.type.is_variable(F)||x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else if(!x.type.is_stream(F)&&!x.type.is_atom(F))w.throw_error(x.error.domain("stream_or_alias",F,y.indicator));else if(!x.type.is_stream(Z)||Z.stream===null)w.throw_error(x.error.existence("stream",F,y.indicator));else if(Z.input)w.throw_error(x.error.permission("output","stream",F,y.indicator));else if(Z.type==="binary")w.throw_error(x.error.permission("output","binary_stream",F,y.indicator));else if(Z.position==="past_end_of_stream"&&Z.eof_action==="error")w.throw_error(x.error.permission("output","past_end_of_stream",F,y.indicator));else{for(var ie={},Se=X,Ne;x.type.is_term(Se)&&Se.indicator==="./2";){if(Ne=Se.args[0],x.type.is_variable(Ne)){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_write_option(Ne)){w.throw_error(x.error.domain("write_option",Ne,y.indicator));return}ie[Ne.id]=Ne.args[0].id==="true",Se=Se.args[1]}if(Se.indicator!=="[]/0"){x.type.is_variable(Se)?w.throw_error(x.error.instantiation(y.indicator)):w.throw_error(x.error.type("list",X,y.indicator));return}else{ie.session=w.session;var ot=z.toString(ie);Z.stream.put(ot,Z.position),typeof Z.position=="number"&&(Z.position+=ot.length),w.success(S)}}},"halt/0":function(w,S,y){w.points=[]},"halt/1":function(w,S,y){var F=y.args[0];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_integer(F)?w.points=[]:w.throw_error(x.error.type("integer",F,y.indicator))},"current_prolog_flag/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_flag(F))w.throw_error(x.error.domain("prolog_flag",F,y.indicator));else{var X=[];for(var Z in x.flag)if(!!x.flag.hasOwnProperty(Z)){var ie=new H(",",[new H("=",[new H(Z),F]),new H("=",[w.get_flag(Z),z])]);X.push(new be(S.goal.replace(ie),S.substitution,S))}w.prepend(X)}},"set_prolog_flag/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)||x.type.is_variable(z)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?x.type.is_flag(F)?x.type.is_value_flag(F,z)?x.type.is_modifiable_flag(F)?(w.session.flag[F.id]=z,w.success(S)):w.throw_error(x.error.permission("modify","flag",F)):w.throw_error(x.error.domain("flag_value",new H("+",[F,z]),y.indicator)):w.throw_error(x.error.domain("prolog_flag",F,y.indicator)):w.throw_error(x.error.type("atom",F,y.indicator))}},flag:{bounded:{allowed:[new H("true"),new H("false")],value:new H("true"),changeable:!1},max_integer:{allowed:[new ke(Number.MAX_SAFE_INTEGER)],value:new ke(Number.MAX_SAFE_INTEGER),changeable:!1},min_integer:{allowed:[new ke(Number.MIN_SAFE_INTEGER)],value:new ke(Number.MIN_SAFE_INTEGER),changeable:!1},integer_rounding_function:{allowed:[new H("down"),new H("toward_zero")],value:new H("toward_zero"),changeable:!1},char_conversion:{allowed:[new H("on"),new H("off")],value:new H("on"),changeable:!0},debug:{allowed:[new H("on"),new H("off")],value:new H("off"),changeable:!0},max_arity:{allowed:[new H("unbounded")],value:new H("unbounded"),changeable:!1},unknown:{allowed:[new H("error"),new H("fail"),new H("warning")],value:new H("error"),changeable:!0},double_quotes:{allowed:[new H("chars"),new H("codes"),new H("atom")],value:new H("codes"),changeable:!0},occurs_check:{allowed:[new H("false"),new H("true")],value:new H("false"),changeable:!0},dialect:{allowed:[new H("tau")],value:new H("tau"),changeable:!1},version_data:{allowed:[new H("tau",[new ke(t.major,!1),new ke(t.minor,!1),new ke(t.patch,!1),new H(t.status)])],value:new H("tau",[new ke(t.major,!1),new ke(t.minor,!1),new ke(t.patch,!1),new H(t.status)]),changeable:!1},nodejs:{allowed:[new H("yes"),new H("no")],value:new H(typeof hl<"u"&&hl.exports?"yes":"no"),changeable:!1}},unify:function(w,S,y){y=y===void 0?!1:y;for(var F=[{left:w,right:S}],z={};F.length!==0;){var X=F.pop();if(w=X.left,S=X.right,x.type.is_term(w)&&x.type.is_term(S)){if(w.indicator!==S.indicator)return null;for(var Z=0;Zz.value?1:0:z}else return F},operate:function(w,S){if(x.type.is_operator(S)){for(var y=x.type.is_operator(S),F=[],z,X=!1,Z=0;Zw.get_flag("max_integer").value||z0?w.start+w.matches[0].length:w.start,z=y?new H("token_not_found"):new H("found",[new H(w.value.toString())]),X=new H(".",[new H("line",[new ke(w.line+1)]),new H(".",[new H("column",[new ke(F+1)]),new H(".",[z,new H("[]",[])])])]);return new H("error",[new H("syntax_error",[new H(S)]),X])},syntax_by_predicate:function(w,S){return new H("error",[new H("syntax_error",[new H(w)]),ee(S)])}},warning:{singleton:function(w,S,y){for(var F=new H("[]"),z=w.length-1;z>=0;z--)F=new H(".",[new Ie(w[z]),F]);return new H("warning",[new H("singleton_variables",[F,ee(S)]),new H(".",[new H("line",[new ke(y,!1)]),new H("[]")])])},failed_goal:function(w,S){return new H("warning",[new H("failed_goal",[w]),new H(".",[new H("line",[new ke(S,!1)]),new H("[]")])])}},format_variable:function(w){return"_"+w},format_answer:function(w,S,F){S instanceof Te&&(S=S.thread);var F=F||{};if(F.session=S?S.session:void 0,x.type.is_error(w))return"uncaught exception: "+w.args[0].toString();if(w===!1)return"false.";if(w===null)return"limit exceeded ;";var z=0,X="";if(x.type.is_substitution(w)){var Z=w.domain(!0);w=w.filter(function(Ne,ot){return!x.type.is_variable(ot)||Z.indexOf(ot.id)!==-1&&Ne!==ot.id})}for(var ie in w.links)!w.links.hasOwnProperty(ie)||(z++,X!==""&&(X+=", "),X+=ie.toString(F)+" = "+w.links[ie].toString(F));var Se=typeof S>"u"||S.points.length>0?" ;":".";return z===0?"true"+Se:X+Se},flatten_error:function(w){if(!x.type.is_error(w))return null;w=w.args[0];var S={};return S.type=w.args[0].id,S.thrown=S.type==="syntax_error"?null:w.args[1].id,S.expected=null,S.found=null,S.representation=null,S.existence=null,S.existence_type=null,S.line=null,S.column=null,S.permission_operation=null,S.permission_type=null,S.evaluation_type=null,S.type==="type_error"||S.type==="domain_error"?(S.expected=w.args[0].args[0].id,S.found=w.args[0].args[1].toString()):S.type==="syntax_error"?w.args[1].indicator==="./2"?(S.expected=w.args[0].args[0].id,S.found=w.args[1].args[1].args[1].args[0],S.found=S.found.id==="token_not_found"?S.found.id:S.found.args[0].id,S.line=w.args[1].args[0].args[0].value,S.column=w.args[1].args[1].args[0].args[0].value):S.thrown=w.args[1].id:S.type==="permission_error"?(S.found=w.args[0].args[2].toString(),S.permission_operation=w.args[0].args[0].id,S.permission_type=w.args[0].args[1].id):S.type==="evaluation_error"?S.evaluation_type=w.args[0].args[0].id:S.type==="representation_error"?S.representation=w.args[0].args[0].id:S.type==="existence_error"&&(S.existence=w.args[0].args[1].toString(),S.existence_type=w.args[0].args[0].id),S},create:function(w){return new x.type.Session(w)}};typeof hl<"u"?hl.exports=x:window.pl=x})()});function ame(t,e,r){t.prepend(r.map(o=>new Ra.default.type.State(e.goal.replace(o),e.substitution,e)))}function CH(t){let e=cme.get(t.session);if(e==null)throw new Error("Assertion failed: A project should have been registered for the active session");return e}function ume(t,e){cme.set(t,e),t.consult(`:- use_module(library(${tdt.id})).`)}var wH,Ra,lme,c0,$gt,edt,cme,tdt,Ame=Et(()=>{Ye();wH=$e(g2()),Ra=$e(EH()),lme=$e(Be("vm")),{is_atom:c0,is_variable:$gt,is_instantiated_list:edt}=Ra.default.type;cme=new WeakMap;tdt=new Ra.default.type.Module("constraints",{["project_workspaces_by_descriptor/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!c0(o)||!c0(a)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let u=W.parseIdent(o.id),A=W.makeDescriptor(u,a.id),h=CH(t).tryWorkspaceByDescriptor(A);$gt(n)&&h!==null&&ame(t,e,[new Ra.default.type.Term("=",[n,new Ra.default.type.Term(String(h.relativeCwd))])]),c0(n)&&h!==null&&h.relativeCwd===n.id&&t.success(e)},["workspace_field/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!c0(o)||!c0(a)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let A=CH(t).tryWorkspaceByCwd(o.id);if(A==null)return;let p=(0,wH.default)(A.manifest.raw,a.id);typeof p>"u"||ame(t,e,[new Ra.default.type.Term("=",[n,new Ra.default.type.Term(typeof p=="object"?JSON.stringify(p):p)])])},["workspace_field_test/3"]:(t,e,r)=>{let[o,a,n]=r.args;t.prepend([new Ra.default.type.State(e.goal.replace(new Ra.default.type.Term("workspace_field_test",[o,a,n,new Ra.default.type.Term("[]",[])])),e.substitution,e)])},["workspace_field_test/4"]:(t,e,r)=>{let[o,a,n,u]=r.args;if(!c0(o)||!c0(a)||!c0(n)||!edt(u)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let p=CH(t).tryWorkspaceByCwd(o.id);if(p==null)return;let h=(0,wH.default)(p.manifest.raw,a.id);if(typeof h>"u")return;let E={$$:h};for(let[v,b]of u.toJavaScript().entries())E[`$${v}`]=b;lme.default.runInNewContext(n.id,E)&&t.success(e)}},["project_workspaces_by_descriptor/3","workspace_field/3","workspace_field_test/3","workspace_field_test/4"])});var S2={};Kt(S2,{Constraints:()=>P2,DependencyType:()=>gme});function to(t){if(t instanceof vC.default.type.Num)return t.value;if(t instanceof vC.default.type.Term)switch(t.indicator){case"throw/1":return to(t.args[0]);case"error/1":return to(t.args[0]);case"error/2":if(t.args[0]instanceof vC.default.type.Term&&t.args[0].indicator==="syntax_error/1")return Object.assign(to(t.args[0]),...to(t.args[1]));{let e=to(t.args[0]);return e.message+=` (in ${to(t.args[1])})`,e}case"syntax_error/1":return new zt(43,`Syntax error: ${to(t.args[0])}`);case"existence_error/2":return new zt(44,`Existence error: ${to(t.args[0])} ${to(t.args[1])} not found`);case"instantiation_error/0":return new zt(75,"Instantiation error: an argument is variable when an instantiated argument was expected");case"line/1":return{line:to(t.args[0])};case"column/1":return{column:to(t.args[0])};case"found/1":return{found:to(t.args[0])};case"./2":return[to(t.args[0])].concat(to(t.args[1]));case"//2":return`${to(t.args[0])}/${to(t.args[1])}`;default:return t.id}throw`couldn't pretty print because of unsupported node ${t}`}function pme(t){let e;try{e=to(t)}catch(r){throw typeof r=="string"?new zt(42,`Unknown error: ${t} (note: ${r})`):r}return typeof e.line<"u"&&typeof e.column<"u"&&(e.message+=` at line ${e.line}, column ${e.column}`),e}function $d(t){return t.id==="null"?null:`${t.toJavaScript()}`}function rdt(t){if(t.id==="null")return null;{let e=t.toJavaScript();if(typeof e!="string")return JSON.stringify(e);try{return JSON.stringify(JSON.parse(e))}catch{return JSON.stringify(e)}}}function u0(t){return typeof t=="string"?`'${t}'`:"[]"}var hme,vC,gme,fme,IH,P2,x2=Et(()=>{Ye();Ye();Pt();hme=$e(Yde()),vC=$e(EH());B2();Ame();(0,hme.default)(vC.default);gme=(o=>(o.Dependencies="dependencies",o.DevDependencies="devDependencies",o.PeerDependencies="peerDependencies",o))(gme||{}),fme=["dependencies","devDependencies","peerDependencies"];IH=class{constructor(e,r){let o=1e3*e.workspaces.length;this.session=vC.default.create(o),ume(this.session,e),this.session.consult(":- use_module(library(lists))."),this.session.consult(r)}fetchNextAnswer(){return new Promise(e=>{this.session.answer(r=>{e(r)})})}async*makeQuery(e){let r=this.session.query(e);if(r!==!0)throw pme(r);for(;;){let o=await this.fetchNextAnswer();if(o===null)throw new zt(79,"Resolution limit exceeded");if(!o)break;if(o.id==="throw")throw pme(o);yield o}}};P2=class{constructor(e){this.source="";this.project=e;let r=e.configuration.get("constraintsPath");oe.existsSync(r)&&(this.source=oe.readFileSync(r,"utf8"))}static async find(e){return new P2(e)}getProjectDatabase(){let e="";for(let r of fme)e+=`dependency_type(${r}). +`;for(let r of this.project.workspacesByCwd.values()){let o=r.relativeCwd;e+=`workspace(${u0(o)}). +`,e+=`workspace_ident(${u0(o)}, ${u0(W.stringifyIdent(r.anchoredLocator))}). +`,e+=`workspace_version(${u0(o)}, ${u0(r.manifest.version)}). +`;for(let a of fme)for(let n of r.manifest[a].values())e+=`workspace_has_dependency(${u0(o)}, ${u0(W.stringifyIdent(n))}, ${u0(n.range)}, ${a}). +`}return e+=`workspace(_) :- false. +`,e+=`workspace_ident(_, _) :- false. +`,e+=`workspace_version(_, _) :- false. +`,e+=`workspace_has_dependency(_, _, _, _) :- false. +`,e}getDeclarations(){let e="";return e+=`gen_enforced_dependency(_, _, _, _) :- false. +`,e+=`gen_enforced_field(_, _, _) :- false. +`,e}get fullSource(){return`${this.getProjectDatabase()} +${this.source} +${this.getDeclarations()}`}createSession(){return new IH(this.project,this.fullSource)}async processClassic(){let e=this.createSession();return{enforcedDependencies:await this.genEnforcedDependencies(e),enforcedFields:await this.genEnforcedFields(e)}}async process(){let{enforcedDependencies:e,enforcedFields:r}=await this.processClassic(),o=new Map;for(let{workspace:a,dependencyIdent:n,dependencyRange:u,dependencyType:A}of e){let p=I2([A,W.stringifyIdent(n)]),h=je.getMapWithDefault(o,a.cwd);je.getMapWithDefault(h,p).set(u??void 0,new Set)}for(let{workspace:a,fieldPath:n,fieldValue:u}of r){let A=I2(n),p=je.getMapWithDefault(o,a.cwd);je.getMapWithDefault(p,A).set(JSON.parse(u)??void 0,new Set)}return{manifestUpdates:o,reportedErrors:new Map}}async genEnforcedDependencies(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), dependency_type(DependencyType), gen_enforced_dependency(WorkspaceCwd, DependencyIdent, DependencyRange, DependencyType).")){let a=K.resolve(this.project.cwd,$d(o.links.WorkspaceCwd)),n=$d(o.links.DependencyIdent),u=$d(o.links.DependencyRange),A=$d(o.links.DependencyType);if(a===null||n===null)throw new Error("Invalid rule");let p=this.project.getWorkspaceByCwd(a),h=W.parseIdent(n);r.push({workspace:p,dependencyIdent:h,dependencyRange:u,dependencyType:A})}return je.sortMap(r,[({dependencyRange:o})=>o!==null?"0":"1",({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({dependencyIdent:o})=>W.stringifyIdent(o)])}async genEnforcedFields(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), gen_enforced_field(WorkspaceCwd, FieldPath, FieldValue).")){let a=K.resolve(this.project.cwd,$d(o.links.WorkspaceCwd)),n=$d(o.links.FieldPath),u=rdt(o.links.FieldValue);if(a===null||n===null)throw new Error("Invalid rule");let A=this.project.getWorkspaceByCwd(a);r.push({workspace:A,fieldPath:n,fieldValue:u})}return je.sortMap(r,[({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({fieldPath:o})=>o])}async*query(e){let r=this.createSession();for await(let o of r.makeQuery(e)){let a={};for(let[n,u]of Object.entries(o.links))n!=="_"&&(a[n]=$d(u));yield a}}}});var vme=_(vk=>{"use strict";Object.defineProperty(vk,"__esModule",{value:!0});function q2(t){let e=[...t.caches],r=e.shift();return r===void 0?Bme():{get(o,a,n={miss:()=>Promise.resolve()}){return r.get(o,a,n).catch(()=>q2({caches:e}).get(o,a,n))},set(o,a){return r.set(o,a).catch(()=>q2({caches:e}).set(o,a))},delete(o){return r.delete(o).catch(()=>q2({caches:e}).delete(o))},clear(){return r.clear().catch(()=>q2({caches:e}).clear())}}}function Bme(){return{get(t,e,r={miss:()=>Promise.resolve()}){return e().then(a=>Promise.all([a,r.miss(a)])).then(([a])=>a)},set(t,e){return Promise.resolve(e)},delete(t){return Promise.resolve()},clear(){return Promise.resolve()}}}vk.createFallbackableCache=q2;vk.createNullCache=Bme});var Pme=_((QWt,Dme)=>{Dme.exports=vme()});var Sme=_(LH=>{"use strict";Object.defineProperty(LH,"__esModule",{value:!0});function wdt(t={serializable:!0}){let e={};return{get(r,o,a={miss:()=>Promise.resolve()}){let n=JSON.stringify(r);if(n in e)return Promise.resolve(t.serializable?JSON.parse(e[n]):e[n]);let u=o(),A=a&&a.miss||(()=>Promise.resolve());return u.then(p=>A(p)).then(()=>u)},set(r,o){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete(r){return delete e[JSON.stringify(r)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}LH.createInMemoryCache=wdt});var bme=_((TWt,xme)=>{xme.exports=Sme()});var Qme=_(Zc=>{"use strict";Object.defineProperty(Zc,"__esModule",{value:!0});function Idt(t,e,r){let o={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t===MH.WithinHeaders?o:{}},queryParameters(){return t===MH.WithinQueryParameters?o:{}}}}function Bdt(t){let e=0,r=()=>(e++,new Promise(o=>{setTimeout(()=>{o(t(r))},Math.min(100*e,1e3))}));return t(r)}function kme(t,e=(r,o)=>Promise.resolve()){return Object.assign(t,{wait(r){return kme(t.then(o=>Promise.all([e(o,r),o])).then(o=>o[1]))}})}function vdt(t){let e=t.length-1;for(e;e>0;e--){let r=Math.floor(Math.random()*(e+1)),o=t[e];t[e]=t[r],t[r]=o}return t}function Ddt(t,e){return e&&Object.keys(e).forEach(r=>{t[r]=e[r](t)}),t}function Pdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}var Sdt="4.14.2",xdt=t=>()=>t.transporter.requester.destroy(),MH={WithinQueryParameters:0,WithinHeaders:1};Zc.AuthMode=MH;Zc.addMethods=Ddt;Zc.createAuth=Idt;Zc.createRetryablePromise=Bdt;Zc.createWaitablePromise=kme;Zc.destroy=xdt;Zc.encode=Pdt;Zc.shuffle=vdt;Zc.version=Sdt});var G2=_((NWt,Fme)=>{Fme.exports=Qme()});var Tme=_(OH=>{"use strict";Object.defineProperty(OH,"__esModule",{value:!0});var bdt={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};OH.MethodEnum=bdt});var Y2=_((MWt,Rme)=>{Rme.exports=Tme()});var Jme=_(Fi=>{"use strict";Object.defineProperty(Fi,"__esModule",{value:!0});var Lme=Y2();function UH(t,e){let r=t||{},o=r.data||{};return Object.keys(r).forEach(a=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(a)===-1&&(o[a]=r[a])}),{data:Object.entries(o).length>0?o:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var W2={Read:1,Write:2,Any:3},xC={Up:1,Down:2,Timeouted:3},Mme=2*60*1e3;function HH(t,e=xC.Up){return{...t,status:e,lastUpdate:Date.now()}}function Ome(t){return t.status===xC.Up||Date.now()-t.lastUpdate>Mme}function Ume(t){return t.status===xC.Timeouted&&Date.now()-t.lastUpdate<=Mme}function jH(t){return typeof t=="string"?{protocol:"https",url:t,accept:W2.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||W2.Any}}function kdt(t,e){return Promise.all(e.map(r=>t.get(r,()=>Promise.resolve(HH(r))))).then(r=>{let o=r.filter(A=>Ome(A)),a=r.filter(A=>Ume(A)),n=[...o,...a],u=n.length>0?n.map(A=>jH(A)):e;return{getTimeout(A,p){return(a.length===0&&A===0?1:a.length+3+A)*p},statelessHosts:u}})}var Qdt=({isTimedOut:t,status:e})=>!t&&~~e===0,Fdt=t=>{let e=t.status;return t.isTimedOut||Qdt(t)||~~(e/100)!==2&&~~(e/100)!==4},Tdt=({status:t})=>~~(t/100)===2,Rdt=(t,e)=>Fdt(t)?e.onRetry(t):Tdt(t)?e.onSuccess(t):e.onFail(t);function Nme(t,e,r,o){let a=[],n=Gme(r,o),u=Yme(t,o),A=r.method,p=r.method!==Lme.MethodEnum.Get?{}:{...r.data,...o.data},h={"x-algolia-agent":t.userAgent.value,...t.queryParameters,...p,...o.queryParameters},E=0,I=(v,b)=>{let C=v.pop();if(C===void 0)throw Kme(_H(a));let T={data:n,headers:u,method:A,url:jme(C,r.path,h),connectTimeout:b(E,t.timeouts.connect),responseTimeout:b(E,o.timeout)},L=J=>{let te={request:T,response:J,host:C,triesLeft:v.length};return a.push(te),te},U={onSuccess:J=>_me(J),onRetry(J){let te=L(J);return J.isTimedOut&&E++,Promise.all([t.logger.info("Retryable failure",qH(te)),t.hostsCache.set(C,HH(C,J.isTimedOut?xC.Timeouted:xC.Down))]).then(()=>I(v,b))},onFail(J){throw L(J),Hme(J,_H(a))}};return t.requester.send(T).then(J=>Rdt(J,U))};return kdt(t.hostsCache,e).then(v=>I([...v.statelessHosts].reverse(),v.getTimeout))}function Ndt(t){let{hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,hosts:p,queryParameters:h,headers:E}=t,I={hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,headers:E,queryParameters:h,hosts:p.map(v=>jH(v)),read(v,b){let C=UH(b,I.timeouts.read),T=()=>Nme(I,I.hosts.filter(J=>(J.accept&W2.Read)!==0),v,C);if((C.cacheable!==void 0?C.cacheable:v.cacheable)!==!0)return T();let U={request:v,mappedRequestOptions:C,transporter:{queryParameters:I.queryParameters,headers:I.headers}};return I.responsesCache.get(U,()=>I.requestsCache.get(U,()=>I.requestsCache.set(U,T()).then(J=>Promise.all([I.requestsCache.delete(U),J]),J=>Promise.all([I.requestsCache.delete(U),Promise.reject(J)])).then(([J,te])=>te)),{miss:J=>I.responsesCache.set(U,J)})},write(v,b){return Nme(I,I.hosts.filter(C=>(C.accept&W2.Write)!==0),v,UH(b,I.timeouts.write))}};return I}function Ldt(t){let e={value:`Algolia for JavaScript (${t})`,add(r){let o=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return e.value.indexOf(o)===-1&&(e.value=`${e.value}${o}`),e}};return e}function _me(t){try{return JSON.parse(t.content)}catch(e){throw Vme(e.message,t)}}function Hme({content:t,status:e},r){let o=t;try{o=JSON.parse(t).message}catch{}return Wme(o,e,r)}function Mdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}function jme(t,e,r){let o=qme(r),a=`${t.protocol}://${t.url}/${e.charAt(0)==="/"?e.substr(1):e}`;return o.length&&(a+=`?${o}`),a}function qme(t){let e=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(t).map(r=>Mdt("%s=%s",r,e(t[r])?JSON.stringify(t[r]):t[r])).join("&")}function Gme(t,e){if(t.method===Lme.MethodEnum.Get||t.data===void 0&&e.data===void 0)return;let r=Array.isArray(t.data)?t.data:{...t.data,...e.data};return JSON.stringify(r)}function Yme(t,e){let r={...t.headers,...e.headers},o={};return Object.keys(r).forEach(a=>{let n=r[a];o[a.toLowerCase()]=n}),o}function _H(t){return t.map(e=>qH(e))}function qH(t){let e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...t,request:{...t.request,headers:{...t.request.headers,...e}}}}function Wme(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}function Vme(t,e){return{name:"DeserializationError",message:t,response:e}}function Kme(t){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:t}}Fi.CallEnum=W2;Fi.HostStatusEnum=xC;Fi.createApiError=Wme;Fi.createDeserializationError=Vme;Fi.createMappedRequestOptions=UH;Fi.createRetryError=Kme;Fi.createStatefulHost=HH;Fi.createStatelessHost=jH;Fi.createTransporter=Ndt;Fi.createUserAgent=Ldt;Fi.deserializeFailure=Hme;Fi.deserializeSuccess=_me;Fi.isStatefulHostTimeouted=Ume;Fi.isStatefulHostUp=Ome;Fi.serializeData=Gme;Fi.serializeHeaders=Yme;Fi.serializeQueryParameters=qme;Fi.serializeUrl=jme;Fi.stackFrameWithoutCredentials=qH;Fi.stackTraceWithoutCredentials=_H});var V2=_((UWt,zme)=>{zme.exports=Jme()});var Xme=_(d0=>{"use strict";Object.defineProperty(d0,"__esModule",{value:!0});var bC=G2(),Odt=V2(),K2=Y2(),Udt=t=>{let e=t.region||"us",r=bC.createAuth(bC.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Odt.createTransporter({hosts:[{url:`analytics.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a=t.appId;return bC.addMethods({appId:a,transporter:o},t.methods)},_dt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Post,path:"2/abtests",data:e},r),Hdt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Delete,path:bC.encode("2/abtests/%s",e)},r),jdt=t=>(e,r)=>t.transporter.read({method:K2.MethodEnum.Get,path:bC.encode("2/abtests/%s",e)},r),qdt=t=>e=>t.transporter.read({method:K2.MethodEnum.Get,path:"2/abtests"},e),Gdt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Post,path:bC.encode("2/abtests/%s/stop",e)},r);d0.addABTest=_dt;d0.createAnalyticsClient=Udt;d0.deleteABTest=Hdt;d0.getABTest=jdt;d0.getABTests=qdt;d0.stopABTest=Gdt});var $me=_((HWt,Zme)=>{Zme.exports=Xme()});var tye=_(J2=>{"use strict";Object.defineProperty(J2,"__esModule",{value:!0});var GH=G2(),Ydt=V2(),eye=Y2(),Wdt=t=>{let e=t.region||"us",r=GH.createAuth(GH.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Ydt.createTransporter({hosts:[{url:`personalization.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}});return GH.addMethods({appId:t.appId,transporter:o},t.methods)},Vdt=t=>e=>t.transporter.read({method:eye.MethodEnum.Get,path:"1/strategies/personalization"},e),Kdt=t=>(e,r)=>t.transporter.write({method:eye.MethodEnum.Post,path:"1/strategies/personalization",data:e},r);J2.createPersonalizationClient=Wdt;J2.getPersonalizationStrategy=Vdt;J2.setPersonalizationStrategy=Kdt});var nye=_((qWt,rye)=>{rye.exports=tye()});var mye=_(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});var Gt=G2(),Na=V2(),Ir=Y2(),Jdt=Be("crypto");function Dk(t){let e=r=>t.request(r).then(o=>{if(t.batch!==void 0&&t.batch(o.hits),!t.shouldStop(o))return o.cursor?e({cursor:o.cursor}):e({page:(r.page||0)+1})});return e({})}var zdt=t=>{let e=t.appId,r=Gt.createAuth(t.authMode!==void 0?t.authMode:Gt.AuthMode.WithinHeaders,e,t.apiKey),o=Na.createTransporter({hosts:[{url:`${e}-dsn.algolia.net`,accept:Na.CallEnum.Read},{url:`${e}.algolia.net`,accept:Na.CallEnum.Write}].concat(Gt.shuffle([{url:`${e}-1.algolianet.com`},{url:`${e}-2.algolianet.com`},{url:`${e}-3.algolianet.com`}])),...t,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a={transporter:o,appId:e,addAlgoliaAgent(n,u){o.userAgent.add({segment:n,version:u})},clearCache(){return Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(()=>{})}};return Gt.addMethods(a,t.methods)};function iye(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function sye(){return{name:"ObjectNotFoundError",message:"Object not found."}}function oye(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Xdt=t=>(e,r)=>{let{queryParameters:o,...a}=r||{},n={acl:e,...o!==void 0?{queryParameters:o}:{}},u=(A,p)=>Gt.createRetryablePromise(h=>z2(t)(A.key,p).catch(E=>{if(E.status!==404)throw E;return h()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/keys",data:n},a),u)},Zdt=t=>(e,r,o)=>{let a=Na.createMappedRequestOptions(o);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},a)},$dt=t=>(e,r,o)=>t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},o),emt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(o,a)=>kC(t)(o.taskID,a)),Pk=t=>(e,r,o)=>{let a=(n,u)=>X2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},o),a)},tmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Rules]}),rmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Settings]}),nmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Synonyms]}),imt=t=>(e,r)=>e.method===Ir.MethodEnum.Get?t.transporter.read(e,r):t.transporter.write(e,r),smt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>z2(t)(e,n).then(u).catch(A=>{if(A.status!==404)throw A}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/keys/%s",e)},r),o)},omt=t=>(e,r,o)=>{let a=r.map(n=>({action:"deleteEntry",body:{objectID:n}}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},amt=()=>(t,e)=>{let r=Na.serializeQueryParameters(e),o=Jdt.createHmac("sha256",t).update(r).digest("hex");return Buffer.from(o+r).toString("base64")},z2=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/keys/%s",e)},r),aye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/task/%s",e.toString())},r),lmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"/1/dictionaries/*/settings"},e),cmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/logs"},e),umt=()=>t=>{let e=Buffer.from(t,"base64").toString("ascii"),r=/validUntil=(\d+)/,o=e.match(r);if(o===null)throw oye();return parseInt(o[1],10)-Math.round(new Date().getTime()/1e3)},Amt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/top"},e),fmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/clusters/mapping/%s",e)},r),pmt=t=>e=>{let{retrieveMappings:r,...o}=e||{};return r===!0&&(o.getClusters=!0),t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/pending"},o)},X2=t=>(e,r={})=>{let o={transporter:t.transporter,appId:t.appId,indexName:e};return Gt.addMethods(o,r.methods)},hmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/keys"},e),gmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters"},e),dmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/indexes"},e),mmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping"},e),ymt=t=>(e,r,o)=>{let a=(n,u)=>X2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},o),a)},Emt=t=>(e,r)=>{let o=(a,n)=>Promise.all(Object.keys(a.taskID).map(u=>X2(t)(u,{methods:{waitTask:Zi}}).waitTask(a.taskID[u],n)));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:e}},r),o)},Cmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:e}},r),wmt=t=>(e,r)=>{let o=e.map(a=>({...a,params:Na.serializeQueryParameters(a.params||{})}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},r)},Imt=t=>(e,r)=>Promise.all(e.map(o=>{let{facetName:a,facetQuery:n,...u}=o.params;return X2(t)(o.indexName,{methods:{searchForFacetValues:hye}}).searchForFacetValues(a,n,{...r,...u})})),Bmt=t=>(e,r)=>{let o=Na.createMappedRequestOptions(r);return o.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Delete,path:"1/clusters/mapping"},o)},vmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},Dmt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>z2(t)(e,n).catch(A=>{if(A.status!==404)throw A;return u()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/keys/%s/restore",e)},r),o)},Pmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},Smt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},o),xmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:e}},r),bmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:"/1/dictionaries/*/settings",data:e},r),(o,a)=>kC(t)(o.taskID,a)),kmt=t=>(e,r)=>{let o=Object.assign({},r),{queryParameters:a,...n}=r||{},u=a?{queryParameters:a}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],p=E=>Object.keys(o).filter(I=>A.indexOf(I)!==-1).every(I=>E[I]===o[I]),h=(E,I)=>Gt.createRetryablePromise(v=>z2(t)(e,I).then(b=>p(b)?Promise.resolve():v()));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/keys/%s",e),data:u},n),h)},kC=t=>(e,r)=>Gt.createRetryablePromise(o=>aye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),lye=t=>(e,r)=>{let o=(a,n)=>Zi(t)(a.taskID,n);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),o)},Qmt=t=>e=>Dk({shouldStop:r=>r.cursor===void 0,...e,request:r=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/browse",t.indexName),data:r},e)}),Fmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Dk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Tmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Dk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Sk=t=>(e,r,o)=>{let{batchSize:a,...n}=o||{},u={taskIDs:[],objectIDs:[]},A=(p=0)=>{let h=[],E;for(E=p;E({action:r,body:I})),n).then(I=>(u.objectIDs=u.objectIDs.concat(I.objectIDs),u.taskIDs.push(I.taskID),E++,A(E)))};return Gt.createWaitablePromise(A(),(p,h)=>Promise.all(p.taskIDs.map(E=>Zi(t)(E,h))))},Rmt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/clear",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Nmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Lmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Mmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/deleteByQuery",t.indexName),data:e},r),(o,a)=>Zi(t)(o.taskID,a)),Omt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Umt=t=>(e,r)=>Gt.createWaitablePromise(cye(t)([e],r).then(o=>({taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),cye=t=>(e,r)=>{let o=e.map(a=>({objectID:a}));return Sk(t)(o,rm.DeleteObject,r)},_mt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Hmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},jmt=t=>e=>uye(t)(e).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),qmt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},o),Gmt=t=>(e,r)=>{let{query:o,paginate:a,...n}=r||{},u=0,A=()=>pye(t)(o||"",{...n,page:u}).then(p=>{for(let[h,E]of Object.entries(p.hits))if(e(E))return{object:E,position:parseInt(h,10),page:u};if(u++,a===!1||u>=p.nbPages)throw sye();return A()});return A()},Ymt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/%s",t.indexName,e)},r),Wmt=()=>(t,e)=>{for(let[r,o]of Object.entries(t.hits))if(o.objectID===e)return parseInt(r,10);return-1},Vmt=t=>(e,r)=>{let{attributesToRetrieve:o,...a}=r||{},n=e.map(u=>({indexName:t.indexName,objectID:u,...o?{attributesToRetrieve:o}:{}}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:n}},a)},Kmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},r),uye=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:{getVersion:2}},e),Jmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},r),Aye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/task/%s",t.indexName,e.toString())},r),zmt=t=>(e,r)=>Gt.createWaitablePromise(fye(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),fye=t=>(e,r)=>{let{createIfNotExists:o,...a}=r||{},n=o?rm.PartialUpdateObject:rm.PartialUpdateObjectNoCreate;return Sk(t)(e,n,a)},Xmt=t=>(e,r)=>{let{safe:o,autoGenerateObjectIDIfNotExist:a,batchSize:n,...u}=r||{},A=(C,T,L,U)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",C),data:{operation:L,destination:T}},U),(J,te)=>Zi(t)(J.taskID,te)),p=Math.random().toString(36).substring(7),h=`${t.indexName}_tmp_${p}`,E=YH({appId:t.appId,transporter:t.transporter,indexName:h}),I=[],v=A(t.indexName,h,"copy",{...u,scope:["settings","synonyms","rules"]});I.push(v);let b=(o?v.wait(u):v).then(()=>{let C=E(e,{...u,autoGenerateObjectIDIfNotExist:a,batchSize:n});return I.push(C),o?C.wait(u):C}).then(()=>{let C=A(h,t.indexName,"move",u);return I.push(C),o?C.wait(u):C}).then(()=>Promise.all(I)).then(([C,T,L])=>({objectIDs:T.objectIDs,taskIDs:[C.taskID,...T.taskIDs,L.taskID]}));return Gt.createWaitablePromise(b,(C,T)=>Promise.all(I.map(L=>L.wait(T))))},Zmt=t=>(e,r)=>WH(t)(e,{...r,clearExistingRules:!0}),$mt=t=>(e,r)=>VH(t)(e,{...r,clearExistingSynonyms:!0}),eyt=t=>(e,r)=>Gt.createWaitablePromise(YH(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),YH=t=>(e,r)=>{let{autoGenerateObjectIDIfNotExist:o,...a}=r||{},n=o?rm.AddObject:rm.UpdateObject;if(n===rm.UpdateObject){for(let u of e)if(u.objectID===void 0)return Gt.createWaitablePromise(Promise.reject(iye()))}return Sk(t)(e,n,a)},tyt=t=>(e,r)=>WH(t)([e],r),WH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingRules:a,...n}=r||{},u=Na.createMappedRequestOptions(n);return o&&(u.queryParameters.forwardToReplicas=1),a&&(u.queryParameters.clearExistingRules=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/batch",t.indexName),data:e},u),(A,p)=>Zi(t)(A.taskID,p))},ryt=t=>(e,r)=>VH(t)([e],r),VH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingSynonyms:a,replaceExistingSynonyms:n,...u}=r||{},A=Na.createMappedRequestOptions(u);return o&&(A.queryParameters.forwardToReplicas=1),(n||a)&&(A.queryParameters.replaceExistingSynonyms=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/batch",t.indexName),data:e},A),(p,h)=>Zi(t)(p.taskID,h))},pye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},r),hye=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:r},cacheable:!0},o),gye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/search",t.indexName),data:{query:e}},r),dye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/search",t.indexName),data:{query:e}},r),nyt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:e},n),(u,A)=>Zi(t)(u.taskID,A))},Zi=t=>(e,r)=>Gt.createRetryablePromise(o=>Aye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),iyt={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Personalization:"personalization",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},rm={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject",DeleteIndex:"delete",ClearIndex:"clear"},xk={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},syt={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},oyt={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};Ft.ApiKeyACLEnum=iyt;Ft.BatchActionEnum=rm;Ft.ScopeEnum=xk;Ft.StrategyEnum=syt;Ft.SynonymEnum=oyt;Ft.addApiKey=Xdt;Ft.assignUserID=Zdt;Ft.assignUserIDs=$dt;Ft.batch=lye;Ft.browseObjects=Qmt;Ft.browseRules=Fmt;Ft.browseSynonyms=Tmt;Ft.chunkedBatch=Sk;Ft.clearDictionaryEntries=emt;Ft.clearObjects=Rmt;Ft.clearRules=Nmt;Ft.clearSynonyms=Lmt;Ft.copyIndex=Pk;Ft.copyRules=tmt;Ft.copySettings=rmt;Ft.copySynonyms=nmt;Ft.createBrowsablePromise=Dk;Ft.createMissingObjectIDError=iye;Ft.createObjectNotFoundError=sye;Ft.createSearchClient=zdt;Ft.createValidUntilNotFoundError=oye;Ft.customRequest=imt;Ft.deleteApiKey=smt;Ft.deleteBy=Mmt;Ft.deleteDictionaryEntries=omt;Ft.deleteIndex=Omt;Ft.deleteObject=Umt;Ft.deleteObjects=cye;Ft.deleteRule=_mt;Ft.deleteSynonym=Hmt;Ft.exists=jmt;Ft.findAnswers=qmt;Ft.findObject=Gmt;Ft.generateSecuredApiKey=amt;Ft.getApiKey=z2;Ft.getAppTask=aye;Ft.getDictionarySettings=lmt;Ft.getLogs=cmt;Ft.getObject=Ymt;Ft.getObjectPosition=Wmt;Ft.getObjects=Vmt;Ft.getRule=Kmt;Ft.getSecuredApiKeyRemainingValidity=umt;Ft.getSettings=uye;Ft.getSynonym=Jmt;Ft.getTask=Aye;Ft.getTopUserIDs=Amt;Ft.getUserID=fmt;Ft.hasPendingMappings=pmt;Ft.initIndex=X2;Ft.listApiKeys=hmt;Ft.listClusters=gmt;Ft.listIndices=dmt;Ft.listUserIDs=mmt;Ft.moveIndex=ymt;Ft.multipleBatch=Emt;Ft.multipleGetObjects=Cmt;Ft.multipleQueries=wmt;Ft.multipleSearchForFacetValues=Imt;Ft.partialUpdateObject=zmt;Ft.partialUpdateObjects=fye;Ft.removeUserID=Bmt;Ft.replaceAllObjects=Xmt;Ft.replaceAllRules=Zmt;Ft.replaceAllSynonyms=$mt;Ft.replaceDictionaryEntries=vmt;Ft.restoreApiKey=Dmt;Ft.saveDictionaryEntries=Pmt;Ft.saveObject=eyt;Ft.saveObjects=YH;Ft.saveRule=tyt;Ft.saveRules=WH;Ft.saveSynonym=ryt;Ft.saveSynonyms=VH;Ft.search=pye;Ft.searchDictionaryEntries=Smt;Ft.searchForFacetValues=hye;Ft.searchRules=gye;Ft.searchSynonyms=dye;Ft.searchUserIDs=xmt;Ft.setDictionarySettings=bmt;Ft.setSettings=nyt;Ft.updateApiKey=kmt;Ft.waitAppTask=kC;Ft.waitTask=Zi});var Eye=_((YWt,yye)=>{yye.exports=mye()});var Cye=_(bk=>{"use strict";Object.defineProperty(bk,"__esModule",{value:!0});function ayt(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var lyt={Debug:1,Info:2,Error:3};bk.LogLevelEnum=lyt;bk.createNullLogger=ayt});var Iye=_((VWt,wye)=>{wye.exports=Cye()});var Pye=_(KH=>{"use strict";Object.defineProperty(KH,"__esModule",{value:!0});var Bye=Be("http"),vye=Be("https"),cyt=Be("url"),Dye={keepAlive:!0},uyt=new Bye.Agent(Dye),Ayt=new vye.Agent(Dye);function fyt({agent:t,httpAgent:e,httpsAgent:r,requesterOptions:o={}}={}){let a=e||t||uyt,n=r||t||Ayt;return{send(u){return new Promise(A=>{let p=cyt.parse(u.url),h=p.query===null?p.pathname:`${p.pathname}?${p.query}`,E={...o,agent:p.protocol==="https:"?n:a,hostname:p.hostname,path:h,method:u.method,headers:{...o&&o.headers?o.headers:{},...u.headers},...p.port!==void 0?{port:p.port||""}:{}},I=(p.protocol==="https:"?vye:Bye).request(E,T=>{let L=[];T.on("data",U=>{L=L.concat(U)}),T.on("end",()=>{clearTimeout(b),clearTimeout(C),A({status:T.statusCode||0,content:Buffer.concat(L).toString(),isTimedOut:!1})})}),v=(T,L)=>setTimeout(()=>{I.abort(),A({status:0,content:L,isTimedOut:!0})},T*1e3),b=v(u.connectTimeout,"Connection timeout"),C;I.on("error",T=>{clearTimeout(b),clearTimeout(C),A({status:0,content:T.message,isTimedOut:!1})}),I.once("response",()=>{clearTimeout(b),C=v(u.responseTimeout,"Socket timeout")}),u.data!==void 0&&I.write(u.data),I.end()})},destroy(){return a.destroy(),n.destroy(),Promise.resolve()}}}KH.createNodeHttpRequester=fyt});var xye=_((JWt,Sye)=>{Sye.exports=Pye()});var Fye=_((zWt,Qye)=>{"use strict";var bye=Pme(),pyt=bme(),QC=$me(),zH=G2(),JH=nye(),Ut=Eye(),hyt=Iye(),gyt=xye(),dyt=V2();function kye(t,e,r){let o={appId:t,apiKey:e,timeouts:{connect:2,read:5,write:30},requester:gyt.createNodeHttpRequester(),logger:hyt.createNullLogger(),responsesCache:bye.createNullCache(),requestsCache:bye.createNullCache(),hostsCache:pyt.createInMemoryCache(),userAgent:dyt.createUserAgent(zH.version).add({segment:"Node.js",version:process.versions.node})},a={...o,...r},n=()=>u=>JH.createPersonalizationClient({...o,...u,methods:{getPersonalizationStrategy:JH.getPersonalizationStrategy,setPersonalizationStrategy:JH.setPersonalizationStrategy}});return Ut.createSearchClient({...a,methods:{search:Ut.multipleQueries,searchForFacetValues:Ut.multipleSearchForFacetValues,multipleBatch:Ut.multipleBatch,multipleGetObjects:Ut.multipleGetObjects,multipleQueries:Ut.multipleQueries,copyIndex:Ut.copyIndex,copySettings:Ut.copySettings,copyRules:Ut.copyRules,copySynonyms:Ut.copySynonyms,moveIndex:Ut.moveIndex,listIndices:Ut.listIndices,getLogs:Ut.getLogs,listClusters:Ut.listClusters,multipleSearchForFacetValues:Ut.multipleSearchForFacetValues,getApiKey:Ut.getApiKey,addApiKey:Ut.addApiKey,listApiKeys:Ut.listApiKeys,updateApiKey:Ut.updateApiKey,deleteApiKey:Ut.deleteApiKey,restoreApiKey:Ut.restoreApiKey,assignUserID:Ut.assignUserID,assignUserIDs:Ut.assignUserIDs,getUserID:Ut.getUserID,searchUserIDs:Ut.searchUserIDs,listUserIDs:Ut.listUserIDs,getTopUserIDs:Ut.getTopUserIDs,removeUserID:Ut.removeUserID,hasPendingMappings:Ut.hasPendingMappings,generateSecuredApiKey:Ut.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:Ut.getSecuredApiKeyRemainingValidity,destroy:zH.destroy,clearDictionaryEntries:Ut.clearDictionaryEntries,deleteDictionaryEntries:Ut.deleteDictionaryEntries,getDictionarySettings:Ut.getDictionarySettings,getAppTask:Ut.getAppTask,replaceDictionaryEntries:Ut.replaceDictionaryEntries,saveDictionaryEntries:Ut.saveDictionaryEntries,searchDictionaryEntries:Ut.searchDictionaryEntries,setDictionarySettings:Ut.setDictionarySettings,waitAppTask:Ut.waitAppTask,customRequest:Ut.customRequest,initIndex:u=>A=>Ut.initIndex(u)(A,{methods:{batch:Ut.batch,delete:Ut.deleteIndex,findAnswers:Ut.findAnswers,getObject:Ut.getObject,getObjects:Ut.getObjects,saveObject:Ut.saveObject,saveObjects:Ut.saveObjects,search:Ut.search,searchForFacetValues:Ut.searchForFacetValues,waitTask:Ut.waitTask,setSettings:Ut.setSettings,getSettings:Ut.getSettings,partialUpdateObject:Ut.partialUpdateObject,partialUpdateObjects:Ut.partialUpdateObjects,deleteObject:Ut.deleteObject,deleteObjects:Ut.deleteObjects,deleteBy:Ut.deleteBy,clearObjects:Ut.clearObjects,browseObjects:Ut.browseObjects,getObjectPosition:Ut.getObjectPosition,findObject:Ut.findObject,exists:Ut.exists,saveSynonym:Ut.saveSynonym,saveSynonyms:Ut.saveSynonyms,getSynonym:Ut.getSynonym,searchSynonyms:Ut.searchSynonyms,browseSynonyms:Ut.browseSynonyms,deleteSynonym:Ut.deleteSynonym,clearSynonyms:Ut.clearSynonyms,replaceAllObjects:Ut.replaceAllObjects,replaceAllSynonyms:Ut.replaceAllSynonyms,searchRules:Ut.searchRules,getRule:Ut.getRule,deleteRule:Ut.deleteRule,saveRule:Ut.saveRule,saveRules:Ut.saveRules,replaceAllRules:Ut.replaceAllRules,browseRules:Ut.browseRules,clearRules:Ut.clearRules}}),initAnalytics:()=>u=>QC.createAnalyticsClient({...o,...u,methods:{addABTest:QC.addABTest,getABTest:QC.getABTest,getABTests:QC.getABTests,stopABTest:QC.stopABTest,deleteABTest:QC.deleteABTest}}),initPersonalization:n,initRecommendation:()=>u=>(a.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),n()(u))}})}kye.version=zH.version;Qye.exports=kye});var ZH=_((XWt,XH)=>{var Tye=Fye();XH.exports=Tye;XH.exports.default=Tye});var t6=_(($Wt,Lye)=>{"use strict";var Nye=Object.getOwnPropertySymbols,yyt=Object.prototype.hasOwnProperty,Eyt=Object.prototype.propertyIsEnumerable;function Cyt(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function wyt(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de",Object.getOwnPropertyNames(t)[0]==="5")return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;var o=Object.getOwnPropertyNames(e).map(function(n){return e[n]});if(o.join("")!=="0123456789")return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(n){a[n]=n}),Object.keys(Object.assign({},a)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Lye.exports=wyt()?Object.assign:function(t,e){for(var r,o=Cyt(t),a,n=1;n{"use strict";var o6=t6(),$c=typeof Symbol=="function"&&Symbol.for,Z2=$c?Symbol.for("react.element"):60103,Iyt=$c?Symbol.for("react.portal"):60106,Byt=$c?Symbol.for("react.fragment"):60107,vyt=$c?Symbol.for("react.strict_mode"):60108,Dyt=$c?Symbol.for("react.profiler"):60114,Pyt=$c?Symbol.for("react.provider"):60109,Syt=$c?Symbol.for("react.context"):60110,xyt=$c?Symbol.for("react.forward_ref"):60112,byt=$c?Symbol.for("react.suspense"):60113,kyt=$c?Symbol.for("react.memo"):60115,Qyt=$c?Symbol.for("react.lazy"):60116,Mye=typeof Symbol=="function"&&Symbol.iterator;function $2(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;rkk.length&&kk.push(t)}function n6(t,e,r,o){var a=typeof t;(a==="undefined"||a==="boolean")&&(t=null);var n=!1;if(t===null)n=!0;else switch(a){case"string":case"number":n=!0;break;case"object":switch(t.$$typeof){case Z2:case Iyt:n=!0}}if(n)return r(o,t,e===""?"."+r6(t,0):e),1;if(n=0,e=e===""?".":e+":",Array.isArray(t))for(var u=0;u{"use strict";Jye.exports=Kye()});var f6=_((rVt,A6)=>{"use strict";var An=A6.exports;A6.exports.default=An;var Ln="\x1B[",eB="\x1B]",TC="\x07",Qk=";",zye=process.env.TERM_PROGRAM==="Apple_Terminal";An.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?Ln+(t+1)+"G":Ln+(e+1)+";"+(t+1)+"H"};An.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=Ln+-t+"D":t>0&&(r+=Ln+t+"C"),e<0?r+=Ln+-e+"A":e>0&&(r+=Ln+e+"B"),r};An.cursorUp=(t=1)=>Ln+t+"A";An.cursorDown=(t=1)=>Ln+t+"B";An.cursorForward=(t=1)=>Ln+t+"C";An.cursorBackward=(t=1)=>Ln+t+"D";An.cursorLeft=Ln+"G";An.cursorSavePosition=zye?"\x1B7":Ln+"s";An.cursorRestorePosition=zye?"\x1B8":Ln+"u";An.cursorGetPosition=Ln+"6n";An.cursorNextLine=Ln+"E";An.cursorPrevLine=Ln+"F";An.cursorHide=Ln+"?25l";An.cursorShow=Ln+"?25h";An.eraseLines=t=>{let e="";for(let r=0;r[eB,"8",Qk,Qk,e,TC,t,eB,"8",Qk,Qk,TC].join("");An.image=(t,e={})=>{let r=`${eB}1337;File=inline=1`;return e.width&&(r+=`;width=${e.width}`),e.height&&(r+=`;height=${e.height}`),e.preserveAspectRatio===!1&&(r+=";preserveAspectRatio=0"),r+":"+t.toString("base64")+TC};An.iTerm={setCwd:(t=process.cwd())=>`${eB}50;CurrentDir=${t}${TC}`,annotation:(t,e={})=>{let r=`${eB}1337;`,o=typeof e.x<"u",a=typeof e.y<"u";if((o||a)&&!(o&&a&&typeof e.length<"u"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return t=t.replace(/\|/g,""),r+=e.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",e.length>0?r+=(o?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+TC}}});var Zye=_((nVt,p6)=>{"use strict";var Xye=(t,e)=>{for(let r of Reflect.ownKeys(e))Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t};p6.exports=Xye;p6.exports.default=Xye});var eEe=_((iVt,Tk)=>{"use strict";var Myt=Zye(),Fk=new WeakMap,$ye=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,o=0,a=t.displayName||t.name||"",n=function(...u){if(Fk.set(n,++o),o===1)r=t.apply(this,u),t=null;else if(e.throw===!0)throw new Error(`Function \`${a}\` can only be called once`);return r};return Myt(n,t),Fk.set(n,o),n};Tk.exports=$ye;Tk.exports.default=$ye;Tk.exports.callCount=t=>{if(!Fk.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return Fk.get(t)}});var tEe=_((sVt,Rk)=>{Rk.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&Rk.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Rk.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var d6=_((oVt,LC)=>{var Ei=global.process,nm=function(t){return t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function"};nm(Ei)?(rEe=Be("assert"),RC=tEe(),nEe=/^win/i.test(Ei.platform),tB=Be("events"),typeof tB!="function"&&(tB=tB.EventEmitter),Ei.__signal_exit_emitter__?Rs=Ei.__signal_exit_emitter__:(Rs=Ei.__signal_exit_emitter__=new tB,Rs.count=0,Rs.emitted={}),Rs.infinite||(Rs.setMaxListeners(1/0),Rs.infinite=!0),LC.exports=function(t,e){if(!nm(global.process))return function(){};rEe.equal(typeof t,"function","a callback must be provided for exit handler"),NC===!1&&h6();var r="exit";e&&e.alwaysLast&&(r="afterexit");var o=function(){Rs.removeListener(r,t),Rs.listeners("exit").length===0&&Rs.listeners("afterexit").length===0&&Nk()};return Rs.on(r,t),o},Nk=function(){!NC||!nm(global.process)||(NC=!1,RC.forEach(function(e){try{Ei.removeListener(e,Lk[e])}catch{}}),Ei.emit=Mk,Ei.reallyExit=g6,Rs.count-=1)},LC.exports.unload=Nk,im=function(e,r,o){Rs.emitted[e]||(Rs.emitted[e]=!0,Rs.emit(e,r,o))},Lk={},RC.forEach(function(t){Lk[t]=function(){if(!!nm(global.process)){var r=Ei.listeners(t);r.length===Rs.count&&(Nk(),im("exit",null,t),im("afterexit",null,t),nEe&&t==="SIGHUP"&&(t="SIGINT"),Ei.kill(Ei.pid,t))}}}),LC.exports.signals=function(){return RC},NC=!1,h6=function(){NC||!nm(global.process)||(NC=!0,Rs.count+=1,RC=RC.filter(function(e){try{return Ei.on(e,Lk[e]),!0}catch{return!1}}),Ei.emit=sEe,Ei.reallyExit=iEe)},LC.exports.load=h6,g6=Ei.reallyExit,iEe=function(e){!nm(global.process)||(Ei.exitCode=e||0,im("exit",Ei.exitCode,null),im("afterexit",Ei.exitCode,null),g6.call(Ei,Ei.exitCode))},Mk=Ei.emit,sEe=function(e,r){if(e==="exit"&&nm(global.process)){r!==void 0&&(Ei.exitCode=r);var o=Mk.apply(this,arguments);return im("exit",Ei.exitCode,null),im("afterexit",Ei.exitCode,null),o}else return Mk.apply(this,arguments)}):LC.exports=function(){return function(){}};var rEe,RC,nEe,tB,Rs,Nk,im,Lk,NC,h6,g6,iEe,Mk,sEe});var aEe=_((aVt,oEe)=>{"use strict";var Oyt=eEe(),Uyt=d6();oEe.exports=Oyt(()=>{Uyt(()=>{process.stderr.write("\x1B[?25h")},{alwaysLast:!0})})});var m6=_(MC=>{"use strict";var _yt=aEe(),Ok=!1;MC.show=(t=process.stderr)=>{!t.isTTY||(Ok=!1,t.write("\x1B[?25h"))};MC.hide=(t=process.stderr)=>{!t.isTTY||(_yt(),Ok=!0,t.write("\x1B[?25l"))};MC.toggle=(t,e)=>{t!==void 0&&(Ok=t),Ok?MC.show(e):MC.hide(e)}});var AEe=_(rB=>{"use strict";var uEe=rB&&rB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(rB,"__esModule",{value:!0});var lEe=uEe(f6()),cEe=uEe(m6()),Hyt=(t,{showCursor:e=!1}={})=>{let r=0,o="",a=!1,n=u=>{!e&&!a&&(cEe.default.hide(),a=!0);let A=u+` +`;A!==o&&(o=A,t.write(lEe.default.eraseLines(r)+A),r=A.split(` +`).length)};return n.clear=()=>{t.write(lEe.default.eraseLines(r)),o="",r=0},n.done=()=>{o="",r=0,e||(cEe.default.show(),a=!1)},n};rB.default={create:Hyt}});var fEe=_((uVt,jyt)=>{jyt.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var gEe=_(gl=>{"use strict";var hEe=fEe(),pA=process.env;Object.defineProperty(gl,"_vendors",{value:hEe.map(function(t){return t.constant})});gl.name=null;gl.isPR=null;hEe.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(o){return pEe(o)});if(gl[t.constant]=r,r)switch(gl.name=t.name,typeof t.pr){case"string":gl.isPR=!!pA[t.pr];break;case"object":"env"in t.pr?gl.isPR=t.pr.env in pA&&pA[t.pr.env]!==t.pr.ne:"any"in t.pr?gl.isPR=t.pr.any.some(function(o){return!!pA[o]}):gl.isPR=pEe(t.pr);break;default:gl.isPR=null}});gl.isCI=!!(pA.CI||pA.CONTINUOUS_INTEGRATION||pA.BUILD_NUMBER||pA.RUN_ID||gl.name);function pEe(t){return typeof t=="string"?!!pA[t]:Object.keys(t).every(function(e){return pA[e]===t[e]})}});var mEe=_((fVt,dEe)=>{"use strict";dEe.exports=gEe().isCI});var EEe=_((pVt,yEe)=>{"use strict";var qyt=t=>{let e=new Set;do for(let r of Reflect.ownKeys(t))e.add([t,r]);while((t=Reflect.getPrototypeOf(t))&&t!==Object.prototype);return e};yEe.exports=(t,{include:e,exclude:r}={})=>{let o=a=>{let n=u=>typeof u=="string"?a===u:u.test(a);return e?e.some(n):r?!r.some(n):!0};for(let[a,n]of qyt(t.constructor.prototype)){if(n==="constructor"||!o(n))continue;let u=Reflect.getOwnPropertyDescriptor(a,n);u&&typeof u.value=="function"&&(t[n]=t[n].bind(t))}return t}});var PEe=_(kn=>{"use strict";Object.defineProperty(kn,"__esModule",{value:!0});var UC,sB,qk,Gk,v6;typeof window>"u"||typeof MessageChannel!="function"?(OC=null,y6=null,E6=function(){if(OC!==null)try{var t=kn.unstable_now();OC(!0,t),OC=null}catch(e){throw setTimeout(E6,0),e}},CEe=Date.now(),kn.unstable_now=function(){return Date.now()-CEe},UC=function(t){OC!==null?setTimeout(UC,0,t):(OC=t,setTimeout(E6,0))},sB=function(t,e){y6=setTimeout(t,e)},qk=function(){clearTimeout(y6)},Gk=function(){return!1},v6=kn.unstable_forceFrameRate=function(){}):(Uk=window.performance,C6=window.Date,wEe=window.setTimeout,IEe=window.clearTimeout,typeof console<"u"&&(BEe=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof BEe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Uk=="object"&&typeof Uk.now=="function"?kn.unstable_now=function(){return Uk.now()}:(vEe=C6.now(),kn.unstable_now=function(){return C6.now()-vEe}),nB=!1,iB=null,_k=-1,w6=5,I6=0,Gk=function(){return kn.unstable_now()>=I6},v6=function(){},kn.unstable_forceFrameRate=function(t){0>t||125jk(u,r))p!==void 0&&0>jk(p,u)?(t[o]=p,t[A]=r,o=A):(t[o]=u,t[n]=r,o=n);else if(p!==void 0&&0>jk(p,r))t[o]=p,t[A]=r,o=A;else break e}}return e}return null}function jk(t,e){var r=t.sortIndex-e.sortIndex;return r!==0?r:t.id-e.id}var eu=[],m0=[],Gyt=1,na=null,Lo=3,Wk=!1,sm=!1,oB=!1;function Vk(t){for(var e=nc(m0);e!==null;){if(e.callback===null)Yk(m0);else if(e.startTime<=t)Yk(m0),e.sortIndex=e.expirationTime,D6(eu,e);else break;e=nc(m0)}}function P6(t){if(oB=!1,Vk(t),!sm)if(nc(eu)!==null)sm=!0,UC(S6);else{var e=nc(m0);e!==null&&sB(P6,e.startTime-t)}}function S6(t,e){sm=!1,oB&&(oB=!1,qk()),Wk=!0;var r=Lo;try{for(Vk(e),na=nc(eu);na!==null&&(!(na.expirationTime>e)||t&&!Gk());){var o=na.callback;if(o!==null){na.callback=null,Lo=na.priorityLevel;var a=o(na.expirationTime<=e);e=kn.unstable_now(),typeof a=="function"?na.callback=a:na===nc(eu)&&Yk(eu),Vk(e)}else Yk(eu);na=nc(eu)}if(na!==null)var n=!0;else{var u=nc(m0);u!==null&&sB(P6,u.startTime-e),n=!1}return n}finally{na=null,Lo=r,Wk=!1}}function DEe(t){switch(t){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var Yyt=v6;kn.unstable_ImmediatePriority=1;kn.unstable_UserBlockingPriority=2;kn.unstable_NormalPriority=3;kn.unstable_IdlePriority=5;kn.unstable_LowPriority=4;kn.unstable_runWithPriority=function(t,e){switch(t){case 1:case 2:case 3:case 4:case 5:break;default:t=3}var r=Lo;Lo=t;try{return e()}finally{Lo=r}};kn.unstable_next=function(t){switch(Lo){case 1:case 2:case 3:var e=3;break;default:e=Lo}var r=Lo;Lo=e;try{return t()}finally{Lo=r}};kn.unstable_scheduleCallback=function(t,e,r){var o=kn.unstable_now();if(typeof r=="object"&&r!==null){var a=r.delay;a=typeof a=="number"&&0o?(t.sortIndex=a,D6(m0,t),nc(eu)===null&&t===nc(m0)&&(oB?qk():oB=!0,sB(P6,a-o))):(t.sortIndex=r,D6(eu,t),sm||Wk||(sm=!0,UC(S6))),t};kn.unstable_cancelCallback=function(t){t.callback=null};kn.unstable_wrapCallback=function(t){var e=Lo;return function(){var r=Lo;Lo=e;try{return t.apply(this,arguments)}finally{Lo=r}}};kn.unstable_getCurrentPriorityLevel=function(){return Lo};kn.unstable_shouldYield=function(){var t=kn.unstable_now();Vk(t);var e=nc(eu);return e!==na&&na!==null&&e!==null&&e.callback!==null&&e.startTime<=t&&e.expirationTime{"use strict";SEe.exports=PEe()});var xEe=_((dVt,aB)=>{aB.exports=function t(e){"use strict";var r=t6(),o=sn(),a=x6();function n(P){for(var D="https://reactjs.org/docs/error-decoder.html?invariant="+P,R=1;Rao||(P.current=yl[ao],yl[ao]=null,ao--)}function Mn(P,D){ao++,yl[ao]=P.current,P.current=D}var Ni={},On={current:Ni},_i={current:!1},tr=Ni;function Me(P,D){var R=P.type.contextTypes;if(!R)return Ni;var j=P.stateNode;if(j&&j.__reactInternalMemoizedUnmaskedChildContext===D)return j.__reactInternalMemoizedMaskedChildContext;var Y={},fe;for(fe in R)Y[fe]=D[fe];return j&&(P=P.stateNode,P.__reactInternalMemoizedUnmaskedChildContext=D,P.__reactInternalMemoizedMaskedChildContext=Y),Y}function ii(P){return P=P.childContextTypes,P!=null}function Oa(P){Kn(_i,P),Kn(On,P)}function hr(P){Kn(_i,P),Kn(On,P)}function uc(P,D,R){if(On.current!==Ni)throw Error(n(168));Mn(On,D,P),Mn(_i,R,P)}function uu(P,D,R){var j=P.stateNode;if(P=D.childContextTypes,typeof j.getChildContext!="function")return R;j=j.getChildContext();for(var Y in j)if(!(Y in P))throw Error(n(108,ae(D)||"Unknown",Y));return r({},R,{},j)}function Ac(P){var D=P.stateNode;return D=D&&D.__reactInternalMemoizedMergedChildContext||Ni,tr=On.current,Mn(On,D,P),Mn(_i,_i.current,P),!0}function El(P,D,R){var j=P.stateNode;if(!j)throw Error(n(169));R?(D=uu(P,D,tr),j.__reactInternalMemoizedMergedChildContext=D,Kn(_i,P),Kn(On,P),Mn(On,D,P)):Kn(_i,P),Mn(_i,R,P)}var vA=a.unstable_runWithPriority,Au=a.unstable_scheduleCallback,Ce=a.unstable_cancelCallback,Tt=a.unstable_shouldYield,fc=a.unstable_requestPaint,Hi=a.unstable_now,fu=a.unstable_getCurrentPriorityLevel,Yt=a.unstable_ImmediatePriority,Cl=a.unstable_UserBlockingPriority,DA=a.unstable_NormalPriority,cp=a.unstable_LowPriority,pc=a.unstable_IdlePriority,PA={},Qn=fc!==void 0?fc:function(){},hi=null,hc=null,SA=!1,sa=Hi(),Li=1e4>sa?Hi:function(){return Hi()-sa};function _o(){switch(fu()){case Yt:return 99;case Cl:return 98;case DA:return 97;case cp:return 96;case pc:return 95;default:throw Error(n(332))}}function Ze(P){switch(P){case 99:return Yt;case 98:return Cl;case 97:return DA;case 96:return cp;case 95:return pc;default:throw Error(n(332))}}function lo(P,D){return P=Ze(P),vA(P,D)}function gc(P,D,R){return P=Ze(P),Au(P,D,R)}function pu(P){return hi===null?(hi=[P],hc=Au(Yt,hu)):hi.push(P),PA}function ji(){if(hc!==null){var P=hc;hc=null,Ce(P)}hu()}function hu(){if(!SA&&hi!==null){SA=!0;var P=0;try{var D=hi;lo(99,function(){for(;P=D&&(qo=!0),P.firstContext=null)}function ms(P,D){if(aa!==P&&D!==!1&&D!==0)if((typeof D!="number"||D===1073741823)&&(aa=P,D=1073741823),D={context:P,observedBits:D,next:null},Us===null){if(co===null)throw Error(n(308));Us=D,co.dependencies={expirationTime:0,firstContext:D,responders:null}}else Us=Us.next=D;return x?P._currentValue:P._currentValue2}var _s=!1;function Un(P){return{baseState:P,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Pn(P){return{baseState:P.baseState,firstUpdate:P.firstUpdate,lastUpdate:P.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function ys(P,D){return{expirationTime:P,suspenseConfig:D,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function We(P,D){P.lastUpdate===null?P.firstUpdate=P.lastUpdate=D:(P.lastUpdate.next=D,P.lastUpdate=D)}function tt(P,D){var R=P.alternate;if(R===null){var j=P.updateQueue,Y=null;j===null&&(j=P.updateQueue=Un(P.memoizedState))}else j=P.updateQueue,Y=R.updateQueue,j===null?Y===null?(j=P.updateQueue=Un(P.memoizedState),Y=R.updateQueue=Un(R.memoizedState)):j=P.updateQueue=Pn(Y):Y===null&&(Y=R.updateQueue=Pn(j));Y===null||j===Y?We(j,D):j.lastUpdate===null||Y.lastUpdate===null?(We(j,D),We(Y,D)):(We(j,D),Y.lastUpdate=D)}function It(P,D){var R=P.updateQueue;R=R===null?P.updateQueue=Un(P.memoizedState):nr(P,R),R.lastCapturedUpdate===null?R.firstCapturedUpdate=R.lastCapturedUpdate=D:(R.lastCapturedUpdate.next=D,R.lastCapturedUpdate=D)}function nr(P,D){var R=P.alternate;return R!==null&&D===R.updateQueue&&(D=P.updateQueue=Pn(D)),D}function $(P,D,R,j,Y,fe){switch(R.tag){case 1:return P=R.payload,typeof P=="function"?P.call(fe,j,Y):P;case 3:P.effectTag=P.effectTag&-4097|64;case 0:if(P=R.payload,Y=typeof P=="function"?P.call(fe,j,Y):P,Y==null)break;return r({},j,Y);case 2:_s=!0}return j}function me(P,D,R,j,Y){_s=!1,D=nr(P,D);for(var fe=D.baseState,ve=null,vt=0,wt=D.firstUpdate,bt=fe;wt!==null;){var _r=wt.expirationTime;_rxn?(ai=Fr,Fr=null):ai=Fr.sibling;var en=di(rt,Fr,At[xn],Wt);if(en===null){Fr===null&&(Fr=ai);break}P&&Fr&&en.alternate===null&&D(rt,Fr),Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en,Fr=ai}if(xn===At.length)return R(rt,Fr),vr;if(Fr===null){for(;xnxn?(ai=Fr,Fr=null):ai=Fr.sibling;var ho=di(rt,Fr,en.value,Wt);if(ho===null){Fr===null&&(Fr=ai);break}P&&Fr&&ho.alternate===null&&D(rt,Fr),Ke=fe(ho,Ke,xn),Sn===null?vr=ho:Sn.sibling=ho,Sn=ho,Fr=ai}if(en.done)return R(rt,Fr),vr;if(Fr===null){for(;!en.done;xn++,en=At.next())en=is(rt,en.value,Wt),en!==null&&(Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en);return vr}for(Fr=j(rt,Fr);!en.done;xn++,en=At.next())en=po(Fr,rt,xn,en.value,Wt),en!==null&&(P&&en.alternate!==null&&Fr.delete(en.key===null?xn:en.key),Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en);return P&&Fr.forEach(function(PF){return D(rt,PF)}),vr}return function(rt,Ke,At,Wt){var vr=typeof At=="object"&&At!==null&&At.type===E&&At.key===null;vr&&(At=At.props.children);var Sn=typeof At=="object"&&At!==null;if(Sn)switch(At.$$typeof){case p:e:{for(Sn=At.key,vr=Ke;vr!==null;){if(vr.key===Sn)if(vr.tag===7?At.type===E:vr.elementType===At.type){R(rt,vr.sibling),Ke=Y(vr,At.type===E?At.props.children:At.props,Wt),Ke.ref=kA(rt,vr,At),Ke.return=rt,rt=Ke;break e}else{R(rt,vr);break}else D(rt,vr);vr=vr.sibling}At.type===E?(Ke=xu(At.props.children,rt.mode,Wt,At.key),Ke.return=rt,rt=Ke):(Wt=Hm(At.type,At.key,At.props,null,rt.mode,Wt),Wt.ref=kA(rt,Ke,At),Wt.return=rt,rt=Wt)}return ve(rt);case h:e:{for(vr=At.key;Ke!==null;){if(Ke.key===vr)if(Ke.tag===4&&Ke.stateNode.containerInfo===At.containerInfo&&Ke.stateNode.implementation===At.implementation){R(rt,Ke.sibling),Ke=Y(Ke,At.children||[],Wt),Ke.return=rt,rt=Ke;break e}else{R(rt,Ke);break}else D(rt,Ke);Ke=Ke.sibling}Ke=Fw(At,rt.mode,Wt),Ke.return=rt,rt=Ke}return ve(rt)}if(typeof At=="string"||typeof At=="number")return At=""+At,Ke!==null&&Ke.tag===6?(R(rt,Ke.sibling),Ke=Y(Ke,At,Wt),Ke.return=rt,rt=Ke):(R(rt,Ke),Ke=Qw(At,rt.mode,Wt),Ke.return=rt,rt=Ke),ve(rt);if(bA(At))return VA(rt,Ke,At,Wt);if(Ae(At))return Yo(rt,Ke,At,Wt);if(Sn&&up(rt,At),typeof At>"u"&&!vr)switch(rt.tag){case 1:case 0:throw rt=rt.type,Error(n(152,rt.displayName||rt.name||"Component"))}return R(rt,Ke)}}var gu=ng(!0),ig=ng(!1),du={},uo={current:du},QA={current:du},mc={current:du};function ca(P){if(P===du)throw Error(n(174));return P}function sg(P,D){Mn(mc,D,P),Mn(QA,P,P),Mn(uo,du,P),D=ne(D),Kn(uo,P),Mn(uo,D,P)}function yc(P){Kn(uo,P),Kn(QA,P),Kn(mc,P)}function Pm(P){var D=ca(mc.current),R=ca(uo.current);D=ee(R,P.type,D),R!==D&&(Mn(QA,P,P),Mn(uo,D,P))}function og(P){QA.current===P&&(Kn(uo,P),Kn(QA,P))}var $n={current:0};function Ap(P){for(var D=P;D!==null;){if(D.tag===13){var R=D.memoizedState;if(R!==null&&(R=R.dehydrated,R===null||Ls(R)||so(R)))return D}else if(D.tag===19&&D.memoizedProps.revealOrder!==void 0){if((D.effectTag&64)!==0)return D}else if(D.child!==null){D.child.return=D,D=D.child;continue}if(D===P)break;for(;D.sibling===null;){if(D.return===null||D.return===P)return null;D=D.return}D.sibling.return=D.return,D=D.sibling}return null}function ag(P,D){return{responder:P,props:D}}var FA=u.ReactCurrentDispatcher,Hs=u.ReactCurrentBatchConfig,mu=0,Ha=null,Gi=null,ua=null,yu=null,Es=null,Ec=null,Cc=0,G=null,Dt=0,wl=!1,bi=null,wc=0;function ct(){throw Error(n(321))}function Eu(P,D){if(D===null)return!1;for(var R=0;RCc&&(Cc=_r,_m(Cc))):(Pw(_r,wt.suspenseConfig),fe=wt.eagerReducer===P?wt.eagerState:P(fe,wt.action)),ve=wt,wt=wt.next}while(wt!==null&&wt!==j);bt||(vt=ve,Y=fe),hs(fe,D.memoizedState)||(qo=!0),D.memoizedState=fe,D.baseUpdate=vt,D.baseState=Y,R.lastRenderedState=fe}return[D.memoizedState,R.dispatch]}function cg(P){var D=TA();return typeof P=="function"&&(P=P()),D.memoizedState=D.baseState=P,P=D.queue={last:null,dispatch:null,lastRenderedReducer:Br,lastRenderedState:P},P=P.dispatch=hg.bind(null,Ha,P),[D.memoizedState,P]}function ug(P){return Cs(Br,P)}function Ag(P,D,R,j){return P={tag:P,create:D,destroy:R,deps:j,next:null},G===null?(G={lastEffect:null},G.lastEffect=P.next=P):(D=G.lastEffect,D===null?G.lastEffect=P.next=P:(R=D.next,D.next=P,P.next=R,G.lastEffect=P)),P}function pp(P,D,R,j){var Y=TA();Dt|=P,Y.memoizedState=Ag(D,R,void 0,j===void 0?null:j)}function Ic(P,D,R,j){var Y=fp();j=j===void 0?null:j;var fe=void 0;if(Gi!==null){var ve=Gi.memoizedState;if(fe=ve.destroy,j!==null&&Eu(j,ve.deps)){Ag(0,R,fe,j);return}}Dt|=P,Y.memoizedState=Ag(D,R,fe,j)}function Ct(P,D){return pp(516,192,P,D)}function Sm(P,D){return Ic(516,192,P,D)}function fg(P,D){if(typeof D=="function")return P=P(),D(P),function(){D(null)};if(D!=null)return P=P(),D.current=P,function(){D.current=null}}function pg(){}function Cu(P,D){return TA().memoizedState=[P,D===void 0?null:D],P}function xm(P,D){var R=fp();D=D===void 0?null:D;var j=R.memoizedState;return j!==null&&D!==null&&Eu(D,j[1])?j[0]:(R.memoizedState=[P,D],P)}function hg(P,D,R){if(!(25>wc))throw Error(n(301));var j=P.alternate;if(P===Ha||j!==null&&j===Ha)if(wl=!0,P={expirationTime:mu,suspenseConfig:null,action:R,eagerReducer:null,eagerState:null,next:null},bi===null&&(bi=new Map),R=bi.get(D),R===void 0)bi.set(D,P);else{for(D=R;D.next!==null;)D=D.next;D.next=P}else{var Y=ga(),fe=pt.suspense;Y=HA(Y,P,fe),fe={expirationTime:Y,suspenseConfig:fe,action:R,eagerReducer:null,eagerState:null,next:null};var ve=D.last;if(ve===null)fe.next=fe;else{var vt=ve.next;vt!==null&&(fe.next=vt),ve.next=fe}if(D.last=fe,P.expirationTime===0&&(j===null||j.expirationTime===0)&&(j=D.lastRenderedReducer,j!==null))try{var wt=D.lastRenderedState,bt=j(wt,R);if(fe.eagerReducer=j,fe.eagerState=bt,hs(bt,wt))return}catch{}finally{}Sc(P,Y)}}var wu={readContext:ms,useCallback:ct,useContext:ct,useEffect:ct,useImperativeHandle:ct,useLayoutEffect:ct,useMemo:ct,useReducer:ct,useRef:ct,useState:ct,useDebugValue:ct,useResponder:ct,useDeferredValue:ct,useTransition:ct},yw={readContext:ms,useCallback:Cu,useContext:ms,useEffect:Ct,useImperativeHandle:function(P,D,R){return R=R!=null?R.concat([P]):null,pp(4,36,fg.bind(null,D,P),R)},useLayoutEffect:function(P,D){return pp(4,36,P,D)},useMemo:function(P,D){var R=TA();return D=D===void 0?null:D,P=P(),R.memoizedState=[P,D],P},useReducer:function(P,D,R){var j=TA();return D=R!==void 0?R(D):D,j.memoizedState=j.baseState=D,P=j.queue={last:null,dispatch:null,lastRenderedReducer:P,lastRenderedState:D},P=P.dispatch=hg.bind(null,Ha,P),[j.memoizedState,P]},useRef:function(P){var D=TA();return P={current:P},D.memoizedState=P},useState:cg,useDebugValue:pg,useResponder:ag,useDeferredValue:function(P,D){var R=cg(P),j=R[0],Y=R[1];return Ct(function(){a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(P)}finally{Hs.suspense=fe}})},[P,D]),j},useTransition:function(P){var D=cg(!1),R=D[0],j=D[1];return[Cu(function(Y){j(!0),a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=P===void 0?null:P;try{j(!1),Y()}finally{Hs.suspense=fe}})},[P,R]),R]}},bm={readContext:ms,useCallback:xm,useContext:ms,useEffect:Sm,useImperativeHandle:function(P,D,R){return R=R!=null?R.concat([P]):null,Ic(4,36,fg.bind(null,D,P),R)},useLayoutEffect:function(P,D){return Ic(4,36,P,D)},useMemo:function(P,D){var R=fp();D=D===void 0?null:D;var j=R.memoizedState;return j!==null&&D!==null&&Eu(D,j[1])?j[0]:(P=P(),R.memoizedState=[P,D],P)},useReducer:Cs,useRef:function(){return fp().memoizedState},useState:ug,useDebugValue:pg,useResponder:ag,useDeferredValue:function(P,D){var R=ug(P),j=R[0],Y=R[1];return Sm(function(){a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(P)}finally{Hs.suspense=fe}})},[P,D]),j},useTransition:function(P){var D=ug(!1),R=D[0],j=D[1];return[xm(function(Y){j(!0),a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=P===void 0?null:P;try{j(!1),Y()}finally{Hs.suspense=fe}})},[P,R]),R]}},Aa=null,Bc=null,Il=!1;function Iu(P,D){var R=Dl(5,null,null,0);R.elementType="DELETED",R.type="DELETED",R.stateNode=D,R.return=P,R.effectTag=8,P.lastEffect!==null?(P.lastEffect.nextEffect=R,P.lastEffect=R):P.firstEffect=P.lastEffect=R}function gg(P,D){switch(P.tag){case 5:return D=io(D,P.type,P.pendingProps),D!==null?(P.stateNode=D,!0):!1;case 6:return D=Si(D,P.pendingProps),D!==null?(P.stateNode=D,!0):!1;case 13:return!1;default:return!1}}function RA(P){if(Il){var D=Bc;if(D){var R=D;if(!gg(P,D)){if(D=cc(R),!D||!gg(P,D)){P.effectTag=P.effectTag&-1025|2,Il=!1,Aa=P;return}Iu(Aa,R)}Aa=P,Bc=cu(D)}else P.effectTag=P.effectTag&-1025|2,Il=!1,Aa=P}}function hp(P){for(P=P.return;P!==null&&P.tag!==5&&P.tag!==3&&P.tag!==13;)P=P.return;Aa=P}function ja(P){if(!y||P!==Aa)return!1;if(!Il)return hp(P),Il=!0,!1;var D=P.type;if(P.tag!==5||D!=="head"&&D!=="body"&&!Qe(D,P.memoizedProps))for(D=Bc;D;)Iu(P,D),D=cc(D);if(hp(P),P.tag===13){if(!y)throw Error(n(316));if(P=P.memoizedState,P=P!==null?P.dehydrated:null,!P)throw Error(n(317));Bc=Ms(P)}else Bc=Aa?cc(P.stateNode):null;return!0}function dg(){y&&(Bc=Aa=null,Il=!1)}var gp=u.ReactCurrentOwner,qo=!1;function ws(P,D,R,j){D.child=P===null?ig(D,null,R,j):gu(D,P.child,R,j)}function Ii(P,D,R,j,Y){R=R.render;var fe=D.ref;return ds(D,Y),j=lg(P,D,R,j,fe,Y),P!==null&&!qo?(D.updateQueue=P.updateQueue,D.effectTag&=-517,P.expirationTime<=Y&&(P.expirationTime=0),si(P,D,Y)):(D.effectTag|=1,ws(P,D,j,Y),D.child)}function km(P,D,R,j,Y,fe){if(P===null){var ve=R.type;return typeof ve=="function"&&!kw(ve)&&ve.defaultProps===void 0&&R.compare===null&&R.defaultProps===void 0?(D.tag=15,D.type=ve,Qm(P,D,ve,j,Y,fe)):(P=Hm(R.type,null,j,null,D.mode,fe),P.ref=D.ref,P.return=D,D.child=P)}return ve=P.child,YD)&&_A.set(P,D)))}}function vg(P,D){P.expirationTimeP?D:P)}function fo(P){if(P.lastExpiredTime!==0)P.callbackExpirationTime=1073741823,P.callbackPriority=99,P.callbackNode=pu(Dw.bind(null,P));else{var D=Um(P),R=P.callbackNode;if(D===0)R!==null&&(P.callbackNode=null,P.callbackExpirationTime=0,P.callbackPriority=90);else{var j=ga();if(D===1073741823?j=99:D===1||D===2?j=95:(j=10*(1073741821-D)-10*(1073741821-j),j=0>=j?99:250>=j?98:5250>=j?97:95),R!==null){var Y=P.callbackPriority;if(P.callbackExpirationTime===D&&Y>=j)return;R!==PA&&Ce(R)}P.callbackExpirationTime=D,P.callbackPriority=j,D=D===1073741823?pu(Dw.bind(null,P)):gc(j,Wv.bind(null,P),{timeout:10*(1073741821-D)-Li()}),P.callbackNode=D}}}function Wv(P,D){if(Om=0,D)return D=ga(),jm(P,D),fo(P),null;var R=Um(P);if(R!==0){if(D=P.callbackNode,(yr&(rs|js))!==En)throw Error(n(327));if(Ip(),P===gi&&R===ns||Pu(P,R),Mr!==null){var j=yr;yr|=rs;var Y=qA(P);do try{gF();break}catch(vt){jA(P,vt)}while(1);if(la(),yr=j,Ep.current=Y,Yi===Rm)throw D=Nm,Pu(P,R),WA(P,R),fo(P),D;if(Mr===null)switch(Y=P.finishedWork=P.current.alternate,P.finishedExpirationTime=R,j=Yi,gi=null,j){case Bu:case Rm:throw Error(n(345));case Bi:jm(P,2=R){P.lastPingedTime=R,Pu(P,R);break}}if(fe=Um(P),fe!==0&&fe!==R)break;if(j!==0&&j!==R){P.lastPingedTime=j;break}P.timeoutHandle=Te(Su.bind(null,P),Y);break}Su(P);break;case vl:if(WA(P,R),j=P.lastSuspendedTime,R===j&&(P.nextKnownPendingLevel=Sw(Y)),OA&&(Y=P.lastPingedTime,Y===0||Y>=R)){P.lastPingedTime=R,Pu(P,R);break}if(Y=Um(P),Y!==0&&Y!==R)break;if(j!==0&&j!==R){P.lastPingedTime=j;break}if(MA!==1073741823?j=10*(1073741821-MA)-Li():Ya===1073741823?j=0:(j=10*(1073741821-Ya)-5e3,Y=Li(),R=10*(1073741821-R)-Y,j=Y-j,0>j&&(j=0),j=(120>j?120:480>j?480:1080>j?1080:1920>j?1920:3e3>j?3e3:4320>j?4320:1960*Cw(j/1960))-j,R=j?j=0:(Y=ve.busyDelayMs|0,fe=Li()-(10*(1073741821-fe)-(ve.timeoutMs|0||5e3)),j=fe<=Y?0:Y+j-fe),10 component higher in the tree to provide a loading indicator or placeholder to display.`+ml(Y))}Yi!==Pc&&(Yi=Bi),fe=yg(fe,Y),wt=j;do{switch(wt.tag){case 3:ve=fe,wt.effectTag|=4096,wt.expirationTime=D;var Ke=Gv(wt,ve,D);It(wt,Ke);break e;case 1:ve=fe;var At=wt.type,Wt=wt.stateNode;if((wt.effectTag&64)===0&&(typeof At.getDerivedStateFromError=="function"||Wt!==null&&typeof Wt.componentDidCatch=="function"&&(Du===null||!Du.has(Wt)))){wt.effectTag|=4096,wt.expirationTime=D;var vr=Yv(wt,ve,D);It(wt,vr);break e}}wt=wt.return}while(wt!==null)}Mr=zv(Mr)}catch(Sn){D=Sn;continue}break}while(1)}function qA(){var P=Ep.current;return Ep.current=wu,P===null?wu:P}function Pw(P,D){PCp&&(Cp=P)}function hF(){for(;Mr!==null;)Mr=Jv(Mr)}function gF(){for(;Mr!==null&&!Tt();)Mr=Jv(Mr)}function Jv(P){var D=Zv(P.alternate,P,ns);return P.memoizedProps=P.pendingProps,D===null&&(D=zv(P)),ww.current=null,D}function zv(P){Mr=P;do{var D=Mr.alternate;if(P=Mr.return,(Mr.effectTag&2048)===0){e:{var R=D;D=Mr;var j=ns,Y=D.pendingProps;switch(D.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:ii(D.type)&&Oa(D);break;case 3:yc(D),hr(D),Y=D.stateNode,Y.pendingContext&&(Y.context=Y.pendingContext,Y.pendingContext=null),(R===null||R.child===null)&&ja(D)&&pa(D),Bl(D);break;case 5:og(D);var fe=ca(mc.current);if(j=D.type,R!==null&&D.stateNode!=null)ts(R,D,j,Y,fe),R.ref!==D.ref&&(D.effectTag|=128);else if(Y){if(R=ca(uo.current),ja(D)){if(Y=D,!y)throw Error(n(175));R=ap(Y.stateNode,Y.type,Y.memoizedProps,fe,R,Y),Y.updateQueue=R,R=R!==null,R&&pa(D)}else{var ve=ht(j,Y,fe,R,D);vc(ve,D,!1,!1),D.stateNode=ve,lt(ve,j,Y,fe,R)&&pa(D)}D.ref!==null&&(D.effectTag|=128)}else if(D.stateNode===null)throw Error(n(166));break;case 6:if(R&&D.stateNode!=null)Gr(R,D,R.memoizedProps,Y);else{if(typeof Y!="string"&&D.stateNode===null)throw Error(n(166));if(R=ca(mc.current),fe=ca(uo.current),ja(D)){if(R=D,!y)throw Error(n(176));(R=lp(R.stateNode,R.memoizedProps,R))&&pa(D)}else D.stateNode=_e(Y,R,fe,D)}break;case 11:break;case 13:if(Kn($n,D),Y=D.memoizedState,(D.effectTag&64)!==0){D.expirationTime=j;break e}Y=Y!==null,fe=!1,R===null?D.memoizedProps.fallback!==void 0&&ja(D):(j=R.memoizedState,fe=j!==null,Y||j===null||(j=R.child.sibling,j!==null&&(ve=D.firstEffect,ve!==null?(D.firstEffect=j,j.nextEffect=ve):(D.firstEffect=D.lastEffect=j,j.nextEffect=null),j.effectTag=8))),Y&&!fe&&(D.mode&2)!==0&&(R===null&&D.memoizedProps.unstable_avoidThisFallback!==!0||($n.current&1)!==0?Yi===Bu&&(Yi=ha):((Yi===Bu||Yi===ha)&&(Yi=vl),Cp!==0&&gi!==null&&(WA(gi,ns),eD(gi,Cp)))),S&&Y&&(D.effectTag|=4),w&&(Y||fe)&&(D.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:yc(D),Bl(D);break;case 10:wi(D);break;case 9:break;case 14:break;case 17:ii(D.type)&&Oa(D);break;case 19:if(Kn($n,D),Y=D.memoizedState,Y===null)break;if(fe=(D.effectTag&64)!==0,ve=Y.rendering,ve===null){if(fe)Dc(Y,!1);else if(Yi!==Bu||R!==null&&(R.effectTag&64)!==0)for(R=D.child;R!==null;){if(ve=Ap(R),ve!==null){for(D.effectTag|=64,Dc(Y,!1),R=ve.updateQueue,R!==null&&(D.updateQueue=R,D.effectTag|=4),Y.lastEffect===null&&(D.firstEffect=null),D.lastEffect=Y.lastEffect,R=j,Y=D.child;Y!==null;)fe=Y,j=R,fe.effectTag&=2,fe.nextEffect=null,fe.firstEffect=null,fe.lastEffect=null,ve=fe.alternate,ve===null?(fe.childExpirationTime=0,fe.expirationTime=j,fe.child=null,fe.memoizedProps=null,fe.memoizedState=null,fe.updateQueue=null,fe.dependencies=null):(fe.childExpirationTime=ve.childExpirationTime,fe.expirationTime=ve.expirationTime,fe.child=ve.child,fe.memoizedProps=ve.memoizedProps,fe.memoizedState=ve.memoizedState,fe.updateQueue=ve.updateQueue,j=ve.dependencies,fe.dependencies=j===null?null:{expirationTime:j.expirationTime,firstContext:j.firstContext,responders:j.responders}),Y=Y.sibling;Mn($n,$n.current&1|2,D),D=D.child;break e}R=R.sibling}}else{if(!fe)if(R=Ap(ve),R!==null){if(D.effectTag|=64,fe=!0,R=R.updateQueue,R!==null&&(D.updateQueue=R,D.effectTag|=4),Dc(Y,!0),Y.tail===null&&Y.tailMode==="hidden"&&!ve.alternate){D=D.lastEffect=Y.lastEffect,D!==null&&(D.nextEffect=null);break}}else Li()>Y.tailExpiration&&1Y&&(Y=j),ve>Y&&(Y=ve),fe=fe.sibling;R.childExpirationTime=Y}if(D!==null)return D;P!==null&&(P.effectTag&2048)===0&&(P.firstEffect===null&&(P.firstEffect=Mr.firstEffect),Mr.lastEffect!==null&&(P.lastEffect!==null&&(P.lastEffect.nextEffect=Mr.firstEffect),P.lastEffect=Mr.lastEffect),1P?D:P}function Su(P){var D=_o();return lo(99,dF.bind(null,P,D)),null}function dF(P,D){do Ip();while(Ig!==null);if((yr&(rs|js))!==En)throw Error(n(327));var R=P.finishedWork,j=P.finishedExpirationTime;if(R===null)return null;if(P.finishedWork=null,P.finishedExpirationTime=0,R===P.current)throw Error(n(177));P.callbackNode=null,P.callbackExpirationTime=0,P.callbackPriority=90,P.nextKnownPendingLevel=0;var Y=Sw(R);if(P.firstPendingTime=Y,j<=P.lastSuspendedTime?P.firstSuspendedTime=P.lastSuspendedTime=P.nextKnownPendingLevel=0:j<=P.firstSuspendedTime&&(P.firstSuspendedTime=j-1),j<=P.lastPingedTime&&(P.lastPingedTime=0),j<=P.lastExpiredTime&&(P.lastExpiredTime=0),P===gi&&(Mr=gi=null,ns=0),1=R?ln(P,D,R):(Mn($n,$n.current&1,D),D=si(P,D,R),D!==null?D.sibling:null);Mn($n,$n.current&1,D);break;case 19:if(j=D.childExpirationTime>=R,(P.effectTag&64)!==0){if(j)return qa(P,D,R);D.effectTag|=64}if(Y=D.memoizedState,Y!==null&&(Y.rendering=null,Y.tail=null),Mn($n,$n.current,D),!j)return null}return si(P,D,R)}qo=!1}}else qo=!1;switch(D.expirationTime=0,D.tag){case 2:if(j=D.type,P!==null&&(P.alternate=null,D.alternate=null,D.effectTag|=2),P=D.pendingProps,Y=Me(D,On.current),ds(D,R),Y=lg(null,D,j,P,Y,R),D.effectTag|=1,typeof Y=="object"&&Y!==null&&typeof Y.render=="function"&&Y.$$typeof===void 0){if(D.tag=1,mw(),ii(j)){var fe=!0;Ac(D)}else fe=!1;D.memoizedState=Y.state!==null&&Y.state!==void 0?Y.state:null;var ve=j.getDerivedStateFromProps;typeof ve=="function"&&er(D,j,ve,P),Y.updater=Zr,D.stateNode=Y,Y._reactInternalFiber=D,jo(D,j,P,R),D=mp(null,D,j,!0,fe,R)}else D.tag=0,ws(null,D,Y,R),D=D.child;return D;case 16:if(Y=D.elementType,P!==null&&(P.alternate=null,D.alternate=null,D.effectTag|=2),P=D.pendingProps,ye(Y),Y._status!==1)throw Y._result;switch(Y=Y._result,D.type=Y,fe=D.tag=BF(Y),P=Ci(Y,P),fe){case 0:D=NA(null,D,Y,P,R);break;case 1:D=dp(null,D,Y,P,R);break;case 11:D=Ii(null,D,Y,P,R);break;case 14:D=km(null,D,Y,Ci(Y.type,P),j,R);break;default:throw Error(n(306,Y,""))}return D;case 0:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),NA(P,D,j,Y,R);case 1:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),dp(P,D,j,Y,R);case 3:if(mg(D),j=D.updateQueue,j===null)throw Error(n(282));if(Y=D.memoizedState,Y=Y!==null?Y.element:null,me(D,j,D.pendingProps,null,R),j=D.memoizedState.element,j===Y)dg(),D=si(P,D,R);else{if((Y=D.stateNode.hydrate)&&(y?(Bc=cu(D.stateNode.containerInfo),Aa=D,Y=Il=!0):Y=!1),Y)for(R=ig(D,null,j,R),D.child=R;R;)R.effectTag=R.effectTag&-3|1024,R=R.sibling;else ws(P,D,j,R),dg();D=D.child}return D;case 5:return Pm(D),P===null&&RA(D),j=D.type,Y=D.pendingProps,fe=P!==null?P.memoizedProps:null,ve=Y.children,Qe(j,Y)?ve=null:fe!==null&&Qe(j,fe)&&(D.effectTag|=16),Go(P,D),D.mode&4&&R!==1&&be(j,Y)?(D.expirationTime=D.childExpirationTime=1,D=null):(ws(P,D,ve,R),D=D.child),D;case 6:return P===null&&RA(D),null;case 13:return ln(P,D,R);case 4:return sg(D,D.stateNode.containerInfo),j=D.pendingProps,P===null?D.child=gu(D,null,j,R):ws(P,D,j,R),D.child;case 11:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),Ii(P,D,j,Y,R);case 7:return ws(P,D,D.pendingProps,R),D.child;case 8:return ws(P,D,D.pendingProps.children,R),D.child;case 12:return ws(P,D,D.pendingProps.children,R),D.child;case 10:e:{if(j=D.type._context,Y=D.pendingProps,ve=D.memoizedProps,fe=Y.value,Ho(D,fe),ve!==null){var vt=ve.value;if(fe=hs(vt,fe)?0:(typeof j._calculateChangedBits=="function"?j._calculateChangedBits(vt,fe):1073741823)|0,fe===0){if(ve.children===Y.children&&!_i.current){D=si(P,D,R);break e}}else for(vt=D.child,vt!==null&&(vt.return=D);vt!==null;){var wt=vt.dependencies;if(wt!==null){ve=vt.child;for(var bt=wt.firstContext;bt!==null;){if(bt.context===j&&(bt.observedBits&fe)!==0){vt.tag===1&&(bt=ys(R,null),bt.tag=2,tt(vt,bt)),vt.expirationTime"u")return!1;var D=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(D.isDisabled||!D.supportsFiber)return!0;try{var R=D.inject(P);xw=function(j){try{D.onCommitFiberRoot(R,j,void 0,(j.current.effectTag&64)===64)}catch{}},bw=function(j){try{D.onCommitFiberUnmount(R,j)}catch{}}}catch{}return!0}function IF(P,D,R,j){this.tag=P,this.key=R,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=D,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=j,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Dl(P,D,R,j){return new IF(P,D,R,j)}function kw(P){return P=P.prototype,!(!P||!P.isReactComponent)}function BF(P){if(typeof P=="function")return kw(P)?1:0;if(P!=null){if(P=P.$$typeof,P===L)return 11;if(P===te)return 14}return 2}function YA(P,D){var R=P.alternate;return R===null?(R=Dl(P.tag,D,P.key,P.mode),R.elementType=P.elementType,R.type=P.type,R.stateNode=P.stateNode,R.alternate=P,P.alternate=R):(R.pendingProps=D,R.effectTag=0,R.nextEffect=null,R.firstEffect=null,R.lastEffect=null),R.childExpirationTime=P.childExpirationTime,R.expirationTime=P.expirationTime,R.child=P.child,R.memoizedProps=P.memoizedProps,R.memoizedState=P.memoizedState,R.updateQueue=P.updateQueue,D=P.dependencies,R.dependencies=D===null?null:{expirationTime:D.expirationTime,firstContext:D.firstContext,responders:D.responders},R.sibling=P.sibling,R.index=P.index,R.ref=P.ref,R}function Hm(P,D,R,j,Y,fe){var ve=2;if(j=P,typeof P=="function")kw(P)&&(ve=1);else if(typeof P=="string")ve=5;else e:switch(P){case E:return xu(R.children,Y,fe,D);case T:ve=8,Y|=7;break;case I:ve=8,Y|=1;break;case v:return P=Dl(12,R,D,Y|8),P.elementType=v,P.type=v,P.expirationTime=fe,P;case U:return P=Dl(13,R,D,Y),P.type=U,P.elementType=U,P.expirationTime=fe,P;case J:return P=Dl(19,R,D,Y),P.elementType=J,P.expirationTime=fe,P;default:if(typeof P=="object"&&P!==null)switch(P.$$typeof){case b:ve=10;break e;case C:ve=9;break e;case L:ve=11;break e;case te:ve=14;break e;case le:ve=16,j=null;break e}throw Error(n(130,P==null?P:typeof P,""))}return D=Dl(ve,R,D,Y),D.elementType=P,D.type=j,D.expirationTime=fe,D}function xu(P,D,R,j){return P=Dl(7,P,j,D),P.expirationTime=R,P}function Qw(P,D,R){return P=Dl(6,P,null,D),P.expirationTime=R,P}function Fw(P,D,R){return D=Dl(4,P.children!==null?P.children:[],P.key,D),D.expirationTime=R,D.stateNode={containerInfo:P.containerInfo,pendingChildren:null,implementation:P.implementation},D}function vF(P,D,R){this.tag=D,this.current=null,this.containerInfo=P,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=He,this.pendingContext=this.context=null,this.hydrate=R,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function $v(P,D){var R=P.firstSuspendedTime;return P=P.lastSuspendedTime,R!==0&&R>=D&&P<=D}function WA(P,D){var R=P.firstSuspendedTime,j=P.lastSuspendedTime;RD||R===0)&&(P.lastSuspendedTime=D),D<=P.lastPingedTime&&(P.lastPingedTime=0),D<=P.lastExpiredTime&&(P.lastExpiredTime=0)}function eD(P,D){D>P.firstPendingTime&&(P.firstPendingTime=D);var R=P.firstSuspendedTime;R!==0&&(D>=R?P.firstSuspendedTime=P.lastSuspendedTime=P.nextKnownPendingLevel=0:D>=P.lastSuspendedTime&&(P.lastSuspendedTime=D+1),D>P.nextKnownPendingLevel&&(P.nextKnownPendingLevel=D))}function jm(P,D){var R=P.lastExpiredTime;(R===0||R>D)&&(P.lastExpiredTime=D)}function tD(P){var D=P._reactInternalFiber;if(D===void 0)throw typeof P.render=="function"?Error(n(188)):Error(n(268,Object.keys(P)));return P=Ee(D),P===null?null:P.stateNode}function rD(P,D){P=P.memoizedState,P!==null&&P.dehydrated!==null&&P.retryTime{"use strict";bEe.exports=xEe()});var FEe=_((yVt,QEe)=>{"use strict";var Wyt={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};QEe.exports=Wyt});var LEe=_((EVt,NEe)=>{"use strict";var Vyt=Object.assign||function(t){for(var e=1;e"}}]),t}(),TEe=function(){Kk(t,null,[{key:"fromJS",value:function(r){var o=r.width,a=r.height;return new t(o,a)}}]);function t(e,r){k6(this,t),this.width=e,this.height=r}return Kk(t,[{key:"fromJS",value:function(r){r(this.width,this.height)}},{key:"toString",value:function(){return""}}]),t}(),REe=function(){function t(e,r){k6(this,t),this.unit=e,this.value=r}return Kk(t,[{key:"fromJS",value:function(r){r(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case tu.UNIT_POINT:return String(this.value);case tu.UNIT_PERCENT:return this.value+"%";case tu.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),t}();NEe.exports=function(t,e){function r(u,A,p){var h=u[A];u[A]=function(){for(var E=arguments.length,I=Array(E),v=0;v1?I-1:0),b=1;b1&&arguments[1]!==void 0?arguments[1]:NaN,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,h=arguments.length>3&&arguments[3]!==void 0?arguments[3]:tu.DIRECTION_LTR;return u.call(this,A,p,h)}),Vyt({Config:e.Config,Node:e.Node,Layout:t("Layout",Kyt),Size:t("Size",TEe),Value:t("Value",REe),getInstanceCount:function(){return e.getInstanceCount.apply(e,arguments)}},tu)}});var MEe=_((exports,module)=>{(function(t,e){typeof define=="function"&&define.amd?define([],function(){return e}):typeof module=="object"&&module.exports?module.exports=e:(t.nbind=t.nbind||{}).init=e})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(t,e){return function(){t&&t.apply(this,arguments);try{Module.ccall("nbind_init")}catch(r){e(r);return}e(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module<"u"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof Be=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(e,r){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),e=nodePath.normalize(e);var o=nodeFS.readFileSync(e);return r?o:o.toString()},Module.readBinary=function(e){var r=Module.read(e,!0);return r.buffer||(r=new Uint8Array(r)),assert(r.buffer),r},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module<"u"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr<"u"&&(Module.printErr=printErr),typeof read<"u"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(e));var r=read(e,"binary");return assert(typeof r=="object"),r},typeof scriptArgs<"u"?Module.arguments=scriptArgs:typeof arguments<"u"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(t,e){quit(t)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),Module.readAsync=function(e,r,o){var a=new XMLHttpRequest;a.open("GET",e,!0),a.responseType="arraybuffer",a.onload=function(){a.status==200||a.status==0&&a.response?r(a.response):o()},a.onerror=o,a.send(null)},typeof arguments<"u"&&(Module.arguments=arguments),typeof console<"u")Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump<"u"?function(t){dump(t)}:function(t){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle>"u"&&(Module.setWindowTitle=function(t){document.title=t})}else throw"Unknown runtime environment. Where are we?";function globalEval(t){eval.call(null,t)}!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(t,e){throw e}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(t){return tempRet0=t,t},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(t){STACKTOP=t},getNativeTypeSize:function(t){switch(t){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(t[t.length-1]==="*")return Runtime.QUANTUM_SIZE;if(t[0]==="i"){var e=parseInt(t.substr(1));return assert(e%8===0),e/8}else return 0}}},getNativeFieldSize:function(t){return Math.max(Runtime.getNativeTypeSize(t),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(t,e){return e==="double"||e==="i64"?t&7&&(assert((t&7)===4),t+=4):assert((t&3)===0),t},getAlignSize:function(t,e,r){return!r&&(t=="i64"||t=="double")?8:t?Math.min(e||(t?Runtime.getNativeFieldSize(t):0),Runtime.QUANTUM_SIZE):Math.min(e,8)},dynCall:function(t,e,r){return r&&r.length?Module["dynCall_"+t].apply(null,[e].concat(r)):Module["dynCall_"+t].call(null,e)},functionPointers:[],addFunction:function(t){for(var e=0;e>2],r=(e+t+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=r,r>=TOTAL_MEMORY){var o=enlargeMemory();if(!o)return HEAP32[DYNAMICTOP_PTR>>2]=e,0}return e},alignMemory:function(t,e){var r=t=Math.ceil(t/(e||16))*(e||16);return r},makeBigInt:function(t,e,r){var o=r?+(t>>>0)+ +(e>>>0)*4294967296:+(t>>>0)+ +(e|0)*4294967296;return o},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(t,e){t||abort("Assertion failed: "+e)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(t){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(t){var e=Runtime.stackAlloc(t.length);return writeArrayToMemory(t,e),e},stringToC:function(t){var e=0;if(t!=null&&t!==0){var r=(t.length<<2)+1;e=Runtime.stackAlloc(r),stringToUTF8(t,e,r)}return e}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,o,a,n){var u=getCFunc(e),A=[],p=0;if(a)for(var h=0;h>0]=e;break;case"i8":HEAP8[t>>0]=e;break;case"i16":HEAP16[t>>1]=e;break;case"i32":HEAP32[t>>2]=e;break;case"i64":tempI64=[e>>>0,(tempDouble=e,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[t>>2]=tempI64[0],HEAP32[t+4>>2]=tempI64[1];break;case"float":HEAPF32[t>>2]=e;break;case"double":HEAPF64[t>>3]=e;break;default:abort("invalid type for setValue: "+r)}}Module.setValue=setValue;function getValue(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return HEAP8[t>>0];case"i8":return HEAP8[t>>0];case"i16":return HEAP16[t>>1];case"i32":return HEAP32[t>>2];case"i64":return HEAP32[t>>2];case"float":return HEAPF32[t>>2];case"double":return HEAPF64[t>>3];default:abort("invalid type for setValue: "+e)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(t,e,r,o){var a,n;typeof t=="number"?(a=!0,n=t):(a=!1,n=t.length);var u=typeof e=="string"?e:null,A;if(r==ALLOC_NONE?A=o:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][r===void 0?ALLOC_STATIC:r](Math.max(n,u?1:e.length)),a){var o=A,p;for(assert((A&3)==0),p=A+(n&-4);o>2]=0;for(p=A+n;o>0]=0;return A}if(u==="i8")return t.subarray||t.slice?HEAPU8.set(t,A):HEAPU8.set(new Uint8Array(t),A),A;for(var h=0,E,I,v;h>0],r|=o,!(o==0&&!e||(a++,e&&a==e)););e||(e=a);var n="";if(r<128){for(var u=1024,A;e>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(t,t+Math.min(e,u))),n=n?n+A:A,t+=u,e-=u;return n}return Module.UTF8ToString(t)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(t){for(var e="";;){var r=HEAP8[t++>>0];if(!r)return e;e+=String.fromCharCode(r)}}Module.AsciiToString=AsciiToString;function stringToAscii(t,e){return writeAsciiToMemory(t,e,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(t,e){for(var r=e;t[r];)++r;if(r-e>16&&t.subarray&&UTF8Decoder)return UTF8Decoder.decode(t.subarray(e,r));for(var o,a,n,u,A,p,h="";;){if(o=t[e++],!o)return h;if(!(o&128)){h+=String.fromCharCode(o);continue}if(a=t[e++]&63,(o&224)==192){h+=String.fromCharCode((o&31)<<6|a);continue}if(n=t[e++]&63,(o&240)==224?o=(o&15)<<12|a<<6|n:(u=t[e++]&63,(o&248)==240?o=(o&7)<<18|a<<12|n<<6|u:(A=t[e++]&63,(o&252)==248?o=(o&3)<<24|a<<18|n<<12|u<<6|A:(p=t[e++]&63,o=(o&1)<<30|a<<24|n<<18|u<<12|A<<6|p))),o<65536)h+=String.fromCharCode(o);else{var E=o-65536;h+=String.fromCharCode(55296|E>>10,56320|E&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(t){return UTF8ArrayToString(HEAPU8,t)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(t,e,r,o){if(!(o>0))return 0;for(var a=r,n=r+o-1,u=0;u=55296&&A<=57343&&(A=65536+((A&1023)<<10)|t.charCodeAt(++u)&1023),A<=127){if(r>=n)break;e[r++]=A}else if(A<=2047){if(r+1>=n)break;e[r++]=192|A>>6,e[r++]=128|A&63}else if(A<=65535){if(r+2>=n)break;e[r++]=224|A>>12,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=2097151){if(r+3>=n)break;e[r++]=240|A>>18,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=67108863){if(r+4>=n)break;e[r++]=248|A>>24,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else{if(r+5>=n)break;e[r++]=252|A>>30,e[r++]=128|A>>24&63,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}}return e[r]=0,r-a}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(t,e,r){return stringToUTF8Array(t,HEAPU8,e,r)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(t){for(var e=0,r=0;r=55296&&o<=57343&&(o=65536+((o&1023)<<10)|t.charCodeAt(++r)&1023),o<=127?++e:o<=2047?e+=2:o<=65535?e+=3:o<=2097151?e+=4:o<=67108863?e+=5:e+=6}return e}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function demangle(t){var e=Module.___cxa_demangle||Module.__cxa_demangle;if(e){try{var r=t.substr(1),o=lengthBytesUTF8(r)+1,a=_malloc(o);stringToUTF8(r,a,o);var n=_malloc(4),u=e(a,0,0,n);if(getValue(n,"i32")===0&&u)return Pointer_stringify(u)}catch{}finally{a&&_free(a),n&&_free(n),u&&_free(u)}return t}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),t}function demangleAll(t){var e=/__Z[\w\d_]+/g;return t.replace(e,function(r){var o=demangle(r);return r===o?r:r+" ["+o+"]"})}function jsStackTrace(){var t=new Error;if(!t.stack){try{throw new Error(0)}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function stackTrace(){var t=jsStackTrace();return Module.extraStackTrace&&(t+=` +`+Module.extraStackTrace()),demangleAll(t)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var e=t.shift();if(typeof e=="function"){e();continue}var r=e.func;typeof r=="number"?e.arg===void 0?Module.dynCall_v(r):Module.dynCall_vi(r,e.arg):r(e.arg===void 0?null:e.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(t){__ATPRERUN__.unshift(t)}Module.addOnPreRun=addOnPreRun;function addOnInit(t){__ATINIT__.unshift(t)}Module.addOnInit=addOnInit;function addOnPreMain(t){__ATMAIN__.unshift(t)}Module.addOnPreMain=addOnPreMain;function addOnExit(t){__ATEXIT__.unshift(t)}Module.addOnExit=addOnExit;function addOnPostRun(t){__ATPOSTRUN__.unshift(t)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(t,e,r){var o=r>0?r:lengthBytesUTF8(t)+1,a=new Array(o),n=stringToUTF8Array(t,a,0,a.length);return e&&(a.length=n),a}Module.intArrayFromString=intArrayFromString;function intArrayToString(t){for(var e=[],r=0;r255&&(o&=255),e.push(String.fromCharCode(o))}return e.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(t,e,r){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var o,a;r&&(a=e+lengthBytesUTF8(t),o=HEAP8[a]),stringToUTF8(t,e,1/0),r&&(HEAP8[a]=o)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(t,e){HEAP8.set(t,e)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(t,e,r){for(var o=0;o>0]=t.charCodeAt(o);r||(HEAP8[e>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function t(e,r){var o=e>>>16,a=e&65535,n=r>>>16,u=r&65535;return a*u+(o*u+a*n<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(t){return froundBuffer[0]=t,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(t){t=t>>>0;for(var e=0;e<32;e++)if(t&1<<31-e)return e;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(t){return t<0?Math.ceil(t):Math.floor(t)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(t){return t}function addRunDependency(t){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(t){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var e=dependenciesFulfilled;dependenciesFulfilled=null,e()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(t,e,r,o,a,n,u,A){return _nbind.callbackSignatureList[t].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(t,e,r,o,a,n,u,A){return ASM_CONSTS[t](e,r,o,a,n,u,A)}function _emscripten_asm_const_iiiii(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiidddddd(t,e,r,o,a,n,u,A,p){return ASM_CONSTS[t](e,r,o,a,n,u,A,p)}function _emscripten_asm_const_iiididi(t,e,r,o,a,n,u){return ASM_CONSTS[t](e,r,o,a,n,u)}function _emscripten_asm_const_iiii(t,e,r,o){return ASM_CONSTS[t](e,r,o)}function _emscripten_asm_const_iiiid(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiiiii(t,e,r,o,a,n){return ASM_CONSTS[t](e,r,o,a,n)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(t,e){__ATEXIT__.unshift({func:t,arg:e})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(t,e,r,o){var a=arguments.length,n=a<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,r):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(t,e,r,o);else for(var A=t.length-1;A>=0;A--)(u=t[A])&&(n=(a<3?u(n):a>3?u(e,r,n):u(e,r))||n);return a>3&&n&&Object.defineProperty(e,r,n),n}function _defineHidden(t){return function(e,r){Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:t,writable:!0})}}var _nbind={};function __nbind_free_external(t){_nbind.externalList[t].dereference(t)}function __nbind_reference_external(t){_nbind.externalList[t].reference()}function _llvm_stackrestore(t){var e=_llvm_stacksave,r=e.LLVM_SAVEDSTACKS[t];e.LLVM_SAVEDSTACKS.splice(t,1),Runtime.stackRestore(r)}function __nbind_register_pool(t,e,r,o){_nbind.Pool.pageSize=t,_nbind.Pool.usedPtr=e/4,_nbind.Pool.rootPtr=r,_nbind.Pool.pagePtr=o/4,HEAP32[e/4]=16909060,HEAP8[e]==1&&(_nbind.bigEndian=!0),HEAP32[e/4]=0,_nbind.makeTypeKindTbl=(n={},n[1024]=_nbind.PrimitiveType,n[64]=_nbind.Int64Type,n[2048]=_nbind.BindClass,n[3072]=_nbind.BindClassPtr,n[4096]=_nbind.SharedClassPtr,n[5120]=_nbind.ArrayType,n[6144]=_nbind.ArrayType,n[7168]=_nbind.CStringType,n[9216]=_nbind.CallbackType,n[10240]=_nbind.BindType,n),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var a=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});a.proto=Module,_nbind.BindClass.list.push(a);var n}function _emscripten_set_main_loop_timing(t,e){if(Browser.mainLoop.timingMode=t,Browser.mainLoop.timingValue=e,!Browser.mainLoop.func)return 1;if(t==0)Browser.mainLoop.scheduler=function(){var u=Math.max(0,Browser.mainLoop.tickStartTime+e-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,u)},Browser.mainLoop.method="timeout";else if(t==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(t==2){if(!window.setImmediate){let n=function(u){u.source===window&&u.data===o&&(u.stopPropagation(),r.shift()())};var a=n,r=[],o="setimmediate";window.addEventListener("message",n,!0),window.setImmediate=function(A){r.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:o})):window.postMessage(o,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(t,e,r,o,a){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=t,Browser.mainLoop.arg=o;var n;typeof o<"u"?n=function(){Module.dynCall_vi(t,o)}:n=function(){Module.dynCall_v(t)};var u=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var p=Date.now(),h=Browser.mainLoop.queue.shift();if(h.func(h.arg),Browser.mainLoop.remainingBlockers){var E=Browser.mainLoop.remainingBlockers,I=E%1==0?E-1:Math.floor(E);h.counted?Browser.mainLoop.remainingBlockers=I:(I=I+.5,Browser.mainLoop.remainingBlockers=(8*E+I)/9)}if(console.log('main loop blocker "'+h.name+'" took '+(Date.now()-p)+" ms"),Browser.mainLoop.updateStatus(),u1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(n),!(u0?_emscripten_set_main_loop_timing(0,1e3/e):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),r)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var t=Browser.mainLoop.timingMode,e=Browser.mainLoop.timingValue,r=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(r,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(t,e),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var t=Module.statusMessage||"Please wait...",e=Browser.mainLoop.remainingBlockers,r=Browser.mainLoop.expectedBlockers;e?e"u"&&(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var t={};t.canHandle=function(n){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(n)},t.handle=function(n,u,A,p){var h=null;if(Browser.hasBlobConstructor)try{h=new Blob([n],{type:Browser.getMimetype(u)}),h.size!==n.length&&(h=new Blob([new Uint8Array(n).buffer],{type:Browser.getMimetype(u)}))}catch(b){Runtime.warnOnce("Blob constructor present but fails: "+b+"; falling back to blob builder")}if(!h){var E=new Browser.BlobBuilder;E.append(new Uint8Array(n).buffer),h=E.getBlob()}var I=Browser.URLObject.createObjectURL(h),v=new Image;v.onload=function(){assert(v.complete,"Image "+u+" could not be decoded");var C=document.createElement("canvas");C.width=v.width,C.height=v.height;var T=C.getContext("2d");T.drawImage(v,0,0),Module.preloadedImages[u]=C,Browser.URLObject.revokeObjectURL(I),A&&A(n)},v.onerror=function(C){console.log("Image "+I+" could not be decoded"),p&&p()},v.src=I},Module.preloadPlugins.push(t);var e={};e.canHandle=function(n){return!Module.noAudioDecoding&&n.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},e.handle=function(n,u,A,p){var h=!1;function E(T){h||(h=!0,Module.preloadedAudios[u]=T,A&&A(n))}function I(){h||(h=!0,Module.preloadedAudios[u]=new Audio,p&&p())}if(Browser.hasBlobConstructor){try{var v=new Blob([n],{type:Browser.getMimetype(u)})}catch{return I()}var b=Browser.URLObject.createObjectURL(v),C=new Audio;C.addEventListener("canplaythrough",function(){E(C)},!1),C.onerror=function(L){if(h)return;console.log("warning: browser could not fully decode audio "+u+", trying slower base64 approach");function U(J){for(var te="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",le="=",pe="",Ae=0,ye=0,ae=0;ae=6;){var we=Ae>>ye-6&63;ye-=6,pe+=te[we]}return ye==2?(pe+=te[(Ae&3)<<4],pe+=le+le):ye==4&&(pe+=te[(Ae&15)<<2],pe+=le),pe}C.src="data:audio/x-"+u.substr(-3)+";base64,"+U(n),E(C)},C.src=b,Browser.safeSetTimeout(function(){E(C)},1e4)}else return I()},Module.preloadPlugins.push(e);function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var o=Module.canvas;o&&(o.requestPointerLock=o.requestPointerLock||o.mozRequestPointerLock||o.webkitRequestPointerLock||o.msRequestPointerLock||function(){},o.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},o.exitPointerLock=o.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&o.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))},createContext:function(t,e,r,o){if(e&&Module.ctx&&t==Module.canvas)return Module.ctx;var a,n;if(e){var u={antialias:!1,alpha:!1};if(o)for(var A in o)u[A]=o[A];n=GL.createContext(t,u),n&&(a=GL.getContext(n).GLctx)}else a=t.getContext("2d");return a?(r&&(e||assert(typeof GLctx>"u","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=a,e&&GL.makeContextCurrent(n),Module.useWebGL=e,Browser.moduleContextCreatedCallbacks.forEach(function(p){p()}),Browser.init()),a):null},destroyContext:function(t,e,r){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(t,e,r){Browser.lockPointer=t,Browser.resizeCanvas=e,Browser.vrDevice=r,typeof Browser.lockPointer>"u"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas>"u"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice>"u"&&(Browser.vrDevice=null);var o=Module.canvas;function a(){Browser.isFullscreen=!1;var u=o.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===u?(o.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},o.exitFullscreen=o.exitFullscreen.bind(document),Browser.lockPointer&&o.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(u.parentNode.insertBefore(o,u),u.parentNode.removeChild(u),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(o)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",a,!1),document.addEventListener("mozfullscreenchange",a,!1),document.addEventListener("webkitfullscreenchange",a,!1),document.addEventListener("MSFullscreenChange",a,!1));var n=document.createElement("div");o.parentNode.insertBefore(n,o),n.appendChild(o),n.requestFullscreen=n.requestFullscreen||n.mozRequestFullScreen||n.msRequestFullscreen||(n.webkitRequestFullscreen?function(){n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(n.webkitRequestFullScreen?function(){n.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),r?n.requestFullscreen({vrDisplay:r}):n.requestFullscreen()},requestFullScreen:function(t,e,r){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(o,a,n){return Browser.requestFullscreen(o,a,n)},Browser.requestFullscreen(t,e,r)},nextRAF:0,fakeRequestAnimationFrame:function(t){var e=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=e+1e3/60;else for(;e+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var r=Math.max(Browser.nextRAF-e,0);setTimeout(t,r)},requestAnimationFrame:function t(e){typeof window>"u"?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(t){return function(){if(!ABORT)return t.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var t=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],t.forEach(function(e){e()})}},safeRequestAnimationFrame:function(t){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))})},safeSetTimeout:function(t,e){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))},e)},safeSetInterval:function(t,e){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&t()},e)},getMimetype:function(t){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[t.substr(t.lastIndexOf(".")+1)]},getUserMedia:function(t){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(t)},getMovementX:function(t){return t.movementX||t.mozMovementX||t.webkitMovementX||0},getMovementY:function(t){return t.movementY||t.mozMovementY||t.webkitMovementY||0},getMouseWheelDelta:function(t){var e=0;switch(t.type){case"DOMMouseScroll":e=t.detail;break;case"mousewheel":e=t.wheelDelta;break;case"wheel":e=t.deltaY;break;default:throw"unrecognized mouse wheel event: "+t.type}return e},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(t){if(Browser.pointerLock)t.type!="mousemove"&&"mozMovementX"in t?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(t),Browser.mouseMovementY=Browser.getMovementY(t)),typeof SDL<"u"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var e=Module.canvas.getBoundingClientRect(),r=Module.canvas.width,o=Module.canvas.height,a=typeof window.scrollX<"u"?window.scrollX:window.pageXOffset,n=typeof window.scrollY<"u"?window.scrollY:window.pageYOffset;if(t.type==="touchstart"||t.type==="touchend"||t.type==="touchmove"){var u=t.touch;if(u===void 0)return;var A=u.pageX-(a+e.left),p=u.pageY-(n+e.top);A=A*(r/e.width),p=p*(o/e.height);var h={x:A,y:p};if(t.type==="touchstart")Browser.lastTouches[u.identifier]=h,Browser.touches[u.identifier]=h;else if(t.type==="touchend"||t.type==="touchmove"){var E=Browser.touches[u.identifier];E||(E=h),Browser.lastTouches[u.identifier]=E,Browser.touches[u.identifier]=h}return}var I=t.pageX-(a+e.left),v=t.pageY-(n+e.top);I=I*(r/e.width),v=v*(o/e.height),Browser.mouseMovementX=I-Browser.mouseX,Browser.mouseMovementY=v-Browser.mouseY,Browser.mouseX=I,Browser.mouseY=v}},asyncLoad:function(t,e,r,o){var a=o?"":"al "+t;Module.readAsync(t,function(n){assert(n,'Loading data file "'+t+'" failed (no arrayBuffer).'),e(new Uint8Array(n)),a&&removeRunDependency(a)},function(n){if(r)r();else throw'Loading data file "'+t+'" failed.'}),a&&addRunDependency(a)},resizeListeners:[],updateResizeListeners:function(){var t=Module.canvas;Browser.resizeListeners.forEach(function(e){e(t.width,t.height)})},setCanvasSize:function(t,e,r){var o=Module.canvas;Browser.updateCanvasDimensions(o,t,e),r||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t&-8388609,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},updateCanvasDimensions:function(t,e,r){e&&r?(t.widthNative=e,t.heightNative=r):(e=t.widthNative,r=t.heightNative);var o=e,a=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(o/a>2];return e},getStr:function(){var t=Pointer_stringify(SYSCALLS.get());return t},get64:function(){var t=SYSCALLS.get(),e=SYSCALLS.get();return t>=0?assert(e===0):assert(e===-1),t},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD();return FS.close(r),0}catch(o){return(typeof FS>"u"||!(o instanceof FS.ErrnoError))&&abort(o),-o.errno}}function ___syscall54(t,e){SYSCALLS.varargs=e;try{return 0}catch(r){return(typeof FS>"u"||!(r instanceof FS.ErrnoError))&&abort(r),-r.errno}}function _typeModule(t){var e=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function r(p,h,E,I,v,b){if(h==1){var C=I&896;(C==128||C==256||C==384)&&(p="X const")}var T;return b?T=E.replace("X",p).replace("Y",v):T=p.replace("X",E).replace("Y",v),T.replace(/([*&]) (?=[*&])/g,"$1")}function o(p,h,E,I,v){throw new Error(p+" type "+E.replace("X",h+"?")+(I?" with flag "+I:"")+" in "+v)}function a(p,h,E,I,v,b,C,T){b===void 0&&(b="X"),T===void 0&&(T=1);var L=E(p);if(L)return L;var U=I(p),J=U.placeholderFlag,te=e[J];C&&te&&(b=r(C[2],C[0],b,te[0],"?",!0));var le;J==0&&(le="Unbound"),J>=10&&(le="Corrupt"),T>20&&(le="Deeply nested"),le&&o(le,p,b,J,v||"?");var pe=U.paramList[0],Ae=a(pe,h,E,I,v,b,te,T+1),ye,ae={flags:te[0],id:p,name:"",paramList:[Ae]},we=[],Pe="?";switch(U.placeholderFlag){case 1:ye=Ae.spec;break;case 2:if((Ae.flags&15360)==1024&&Ae.spec.ptrSize==1){ae.flags=7168;break}case 3:case 6:case 5:ye=Ae.spec,Ae.flags&15360;break;case 8:Pe=""+U.paramList[1],ae.paramList.push(U.paramList[1]);break;case 9:for(var g=0,Ee=U.paramList[1];g>2]=t),t}function _llvm_stacksave(){var t=_llvm_stacksave;return t.LLVM_SAVEDSTACKS||(t.LLVM_SAVEDSTACKS=[]),t.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),t.LLVM_SAVEDSTACKS.length-1}function ___syscall140(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=SYSCALLS.get(),u=SYSCALLS.get(),A=a;return FS.llseek(r,A,u),HEAP32[n>>2]=r.position,r.getdents&&A===0&&u===0&&(r.getdents=null),0}catch(p){return(typeof FS>"u"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall146(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.get(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(E,I){var v=___syscall146.buffers[E];assert(v),I===0||I===10?((E===1?Module.print:Module.printErr)(UTF8ArrayToString(v,0)),v.length=0):v.push(I)});for(var u=0;u>2],p=HEAP32[o+(u*8+4)>>2],h=0;h"u"||!(E instanceof FS.ErrnoError))&&abort(E),-E.errno}}function __nbind_finish(){for(var t=0,e=_nbind.BindClass.list;tt.pageSize/2||e>t.pageSize-r){var o=_nbind.typeNameTbl.NBind.proto;return o.lalloc(e)}else return HEAPU32[t.usedPtr]=r+e,t.rootPtr+r},t.lreset=function(e,r){var o=HEAPU32[t.pagePtr];if(o){var a=_nbind.typeNameTbl.NBind.proto;a.lreset(e,r)}else HEAPU32[t.usedPtr]=e},t}();_nbind.Pool=Pool;function constructType(t,e){var r=t==10240?_nbind.makeTypeNameTbl[e.name]||_nbind.BindType:_nbind.makeTypeKindTbl[t],o=new r(e);return typeIdTbl[e.id]=o,_nbind.typeNameTbl[e.name]=o,o}_nbind.constructType=constructType;function getType(t){return typeIdTbl[t]}_nbind.getType=getType;function queryType(t){var e=HEAPU8[t],r=_nbind.structureList[e][1];t/=4,r<0&&(++t,r=HEAPU32[t]+1);var o=Array.prototype.slice.call(HEAPU32.subarray(t+1,t+1+r));return e==9&&(o=[o[0],o.slice(1)]),{paramList:o,placeholderFlag:e}}_nbind.queryType=queryType;function getTypes(t,e){return t.map(function(r){return typeof r=="number"?_nbind.getComplexType(r,constructType,getType,queryType,e):_nbind.typeNameTbl[r]})}_nbind.getTypes=getTypes;function readTypeIdList(t,e){return Array.prototype.slice.call(HEAPU32,t/4,t/4+e)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(t){for(var e=t;HEAPU8[e++];);return String.fromCharCode.apply("",HEAPU8.subarray(t,e-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(t){var e={};if(t)for(;;){var r=HEAPU32[t/4];if(!r)break;e[readAsciiString(r)]=!0,t+=4}return e}_nbind.readPolicyList=readPolicyList;function getDynCall(t,e){var r={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},o=t.map(function(n){return r[n.name]||"i"}).join(""),a=Module["dynCall_"+o];if(!a)throw new Error("dynCall_"+o+" not found for "+e+"("+t.map(function(n){return n.name}).join(", ")+")");return a}_nbind.getDynCall=getDynCall;function addMethod(t,e,r,o){var a=t[e];t.hasOwnProperty(e)&&a?((a.arity||a.arity===0)&&(a=_nbind.makeOverloader(a,a.arity),t[e]=a),a.addMethod(r,o)):(r.arity=o,t[e]=r)}_nbind.addMethod=addMethod;function throwError(t){throw new Error(t)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.heap=HEAPU32,r.ptrSize=4,r}return e.prototype.needsWireRead=function(r){return!!this.wireRead||!!this.makeWireRead},e.prototype.needsWireWrite=function(r){return!!this.wireWrite||!!this.makeWireWrite},e}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(t){__extends(e,t);function e(r){var o=t.call(this,r)||this,a=r.flags&32?{32:HEAPF32,64:HEAPF64}:r.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return o.heap=a[r.ptrSize*8],o.ptrSize=r.ptrSize,o}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="number")return a;throw new Error("Type mismatch")}},e}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(t,e){if(t==null){if(e&&e.Nullable)return 0;throw new Error("Type mismatch")}if(e&&e.Strict){if(typeof t!="string")throw new Error("Type mismatch")}else t=t.toString();var r=Module.lengthBytesUTF8(t)+1,o=_nbind.Pool.lalloc(r);return Module.stringToUTF8Array(t,HEAPU8,o,r),o}_nbind.pushCString=pushCString;function popCString(t){return t===0?null:Module.Pointer_stringify(t)}_nbind.popCString=popCString;var CStringType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=popCString,r.wireWrite=pushCString,r.readResources=[_nbind.resources.pool],r.writeResources=[_nbind.resources.pool],r}return e.prototype.makeWireWrite=function(r,o){return function(a){return pushCString(a,o)}},e}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=function(o){return!!o},r}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireRead=function(r){return"!!("+r+")"},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="boolean")return a;throw new Error("Type mismatch")}||r},e}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function t(){}return t.prototype.persist=function(){this.__nbindState|=1},t}();_nbind.Wrapper=Wrapper;function makeBound(t,e){var r=function(o){__extends(a,o);function a(n,u,A,p){var h=o.call(this)||this;if(!(h instanceof a))return new(Function.prototype.bind.apply(a,Array.prototype.concat.apply([null],arguments)));var E=u,I=A,v=p;if(n!==_nbind.ptrMarker){var b=h.__nbindConstructor.apply(h,arguments);E=4608,v=HEAPU32[b/4],I=HEAPU32[b/4+1]}var C={configurable:!0,enumerable:!1,value:null,writable:!1},T={__nbindFlags:E,__nbindPtr:I};v&&(T.__nbindShared=v,_nbind.mark(h));for(var L=0,U=Object.keys(T);L>=1;var r=_nbind.valueList[t];return _nbind.valueList[t]=firstFreeValue,firstFreeValue=t,r}else{if(e)return _nbind.popShared(t,e);throw new Error("Invalid value slot "+t)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(t){return typeof t=="number"?t:pushValue(t)*4096+valueBase}function pop64(t){return t=3?u=Buffer.from(n):u=new Buffer(n),u.copy(o)}else getBuffer(o).set(n)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var t=0,e=dirtyList;t>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(t,e,r,o,a,n){try{Module.dynCall_viiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_vif(t,e,r){try{Module.dynCall_vif(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_vid(t,e,r){try{Module.dynCall_vid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_fiff(t,e,r,o){try{return Module.dynCall_fiff(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vi(t,e){try{Module.dynCall_vi(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_vii(t,e,r){try{Module.dynCall_vii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_ii(t,e){try{return Module.dynCall_ii(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_viddi(t,e,r,o,a){try{Module.dynCall_viddi(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_vidd(t,e,r,o){try{Module.dynCall_vidd(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iiii(t,e,r,o){try{return Module.dynCall_iiii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_diii(t,e,r,o){try{return Module.dynCall_diii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_di(t,e){try{return Module.dynCall_di(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_iid(t,e,r){try{return Module.dynCall_iid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iii(t,e,r){try{return Module.dynCall_iii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiddi(t,e,r,o,a,n){try{Module.dynCall_viiddi(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiiiii(t,e,r,o,a,n,u){try{Module.dynCall_viiiiii(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(t,e,r){try{return Module.dynCall_dii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_i(t){try{return Module.dynCall_i(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_iiiiii(t,e,r,o,a,n){try{return Module.dynCall_iiiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiid(t,e,r,o,a){try{Module.dynCall_viiid(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_viififi(t,e,r,o,a,n,u){try{Module.dynCall_viififi(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(t,e,r,o){try{Module.dynCall_viii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_v(t){try{Module.dynCall_v(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_viid(t,e,r,o){try{Module.dynCall_viid(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_idd(t,e,r){try{return Module.dynCall_idd(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiii(t,e,r,o,a){try{Module.dynCall_viiii(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(t,e,r){var o=new t.Int8Array(r),a=new t.Int16Array(r),n=new t.Int32Array(r),u=new t.Uint8Array(r),A=new t.Uint16Array(r),p=new t.Uint32Array(r),h=new t.Float32Array(r),E=new t.Float64Array(r),I=e.DYNAMICTOP_PTR|0,v=e.tempDoublePtr|0,b=e.ABORT|0,C=e.STACKTOP|0,T=e.STACK_MAX|0,L=e.cttz_i8|0,U=e.___dso_handle|0,J=0,te=0,le=0,pe=0,Ae=t.NaN,ye=t.Infinity,ae=0,we=0,Pe=0,g=0,Ee=0,De=0,ce=t.Math.floor,ne=t.Math.abs,ee=t.Math.sqrt,Ie=t.Math.pow,ke=t.Math.cos,ht=t.Math.sin,H=t.Math.tan,lt=t.Math.acos,Re=t.Math.asin,Qe=t.Math.atan,be=t.Math.atan2,_e=t.Math.exp,Te=t.Math.log,Je=t.Math.ceil,He=t.Math.imul,x=t.Math.min,w=t.Math.max,S=t.Math.clz32,y=t.Math.fround,F=e.abort,z=e.assert,X=e.enlargeMemory,Z=e.getTotalMemory,ie=e.abortOnCannotGrowMemory,Se=e.invoke_viiiii,Ne=e.invoke_vif,ot=e.invoke_vid,dt=e.invoke_fiff,jt=e.invoke_vi,$t=e.invoke_vii,xt=e.invoke_ii,an=e.invoke_viddi,Qr=e.invoke_vidd,mr=e.invoke_iiii,xr=e.invoke_diii,Wr=e.invoke_di,Vn=e.invoke_iid,Ns=e.invoke_iii,Ri=e.invoke_viiddi,ps=e.invoke_viiiiii,io=e.invoke_dii,Si=e.invoke_i,Ls=e.invoke_iiiiii,so=e.invoke_viiid,cc=e.invoke_viififi,cu=e.invoke_viii,ap=e.invoke_v,lp=e.invoke_viid,Ms=e.invoke_idd,Dn=e.invoke_viiii,oo=e._emscripten_asm_const_iiiii,Os=e._emscripten_asm_const_iiidddddd,ml=e._emscripten_asm_const_iiiid,yl=e.__nbind_reference_external,ao=e._emscripten_asm_const_iiiiiiii,Kn=e._removeAccessorPrefix,Mn=e._typeModule,Ni=e.__nbind_register_pool,On=e.__decorate,_i=e._llvm_stackrestore,tr=e.___cxa_atexit,Me=e.__extends,ii=e.__nbind_get_value_object,Oa=e.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,hr=e._emscripten_set_main_loop_timing,uc=e.__nbind_register_primitive,uu=e.__nbind_register_type,Ac=e._emscripten_memcpy_big,El=e.__nbind_register_function,vA=e.___setErrNo,Au=e.__nbind_register_class,Ce=e.__nbind_finish,Tt=e._abort,fc=e._nbind_value,Hi=e._llvm_stacksave,fu=e.___syscall54,Yt=e._defineHidden,Cl=e._emscripten_set_main_loop,DA=e._emscripten_get_now,cp=e.__nbind_register_callback_signature,pc=e._emscripten_asm_const_iiiiii,PA=e.__nbind_free_external,Qn=e._emscripten_asm_const_iiii,hi=e._emscripten_asm_const_iiididi,hc=e.___syscall6,SA=e._atexit,sa=e.___syscall140,Li=e.___syscall146,_o=y(0);let Ze=y(0);function lo(s){s=s|0;var l=0;return l=C,C=C+s|0,C=C+15&-16,l|0}function gc(){return C|0}function pu(s){s=s|0,C=s}function ji(s,l){s=s|0,l=l|0,C=s,T=l}function hu(s,l){s=s|0,l=l|0,J||(J=s,te=l)}function xA(s){s=s|0,De=s}function Ua(){return De|0}function dc(){var s=0,l=0;Dr(8104,8,400)|0,Dr(8504,408,540)|0,s=9044,l=s+44|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o[9088]=0,o[9089]=1,n[2273]=0,n[2274]=948,n[2275]=948,tr(17,8104,U|0)|0}function hs(s){s=s|0,ft(s+948|0)}function _t(s){return s=y(s),((Du(s)|0)&2147483647)>>>0>2139095040|0}function Fn(s,l,c){s=s|0,l=l|0,c=c|0;e:do if(n[s+(l<<3)+4>>2]|0)s=s+(l<<3)|0;else{if((l|2|0)==3&&n[s+60>>2]|0){s=s+56|0;break}switch(l|0){case 0:case 2:case 4:case 5:{if(n[s+52>>2]|0){s=s+48|0;break e}break}default:}if(n[s+68>>2]|0){s=s+64|0;break}else{s=(l|1|0)==5?948:c;break}}while(0);return s|0}function Ci(s){s=s|0;var l=0;return l=pD(1e3)|0,oa(s,(l|0)!=0,2456),n[2276]=(n[2276]|0)+1,Dr(l|0,8104,1e3)|0,o[s+2>>0]|0&&(n[l+4>>2]=2,n[l+12>>2]=4),n[l+976>>2]=s,l|0}function oa(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,yg(s,5,3197,f)),C=d}function co(){return Ci(956)|0}function Us(s){s=s|0;var l=0;return l=Vt(1e3)|0,aa(l,s),oa(n[s+976>>2]|0,1,2456),n[2276]=(n[2276]|0)+1,n[l+944>>2]=0,l|0}function aa(s,l){s=s|0,l=l|0;var c=0;Dr(s|0,l|0,948)|0,Fm(s+948|0,l+948|0),c=s+960|0,s=l+960|0,l=c+40|0;do n[c>>2]=n[s>>2],c=c+4|0,s=s+4|0;while((c|0)<(l|0))}function la(s){s=s|0;var l=0,c=0,f=0,d=0;if(l=s+944|0,c=n[l>>2]|0,c|0&&(Ho(c+948|0,s)|0,n[l>>2]=0),c=wi(s)|0,c|0){l=0;do n[(gs(s,l)|0)+944>>2]=0,l=l+1|0;while((l|0)!=(c|0))}c=s+948|0,f=n[c>>2]|0,d=s+952|0,l=n[d>>2]|0,(l|0)!=(f|0)&&(n[d>>2]=l+(~((l+-4-f|0)>>>2)<<2)),ds(c),hD(s),n[2276]=(n[2276]|0)+-1}function Ho(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0;f=n[s>>2]|0,k=s+4|0,c=n[k>>2]|0,m=c;e:do if((f|0)==(c|0))d=f,B=4;else for(s=f;;){if((n[s>>2]|0)==(l|0)){d=s,B=4;break e}if(s=s+4|0,(s|0)==(c|0)){s=0;break}}while(0);return(B|0)==4&&((d|0)!=(c|0)?(f=d+4|0,s=m-f|0,l=s>>2,l&&(Mw(d|0,f|0,s|0)|0,c=n[k>>2]|0),s=d+(l<<2)|0,(c|0)==(s|0)||(n[k>>2]=c+(~((c+-4-s|0)>>>2)<<2)),s=1):s=0),s|0}function wi(s){return s=s|0,(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2|0}function gs(s,l){s=s|0,l=l|0;var c=0;return c=n[s+948>>2]|0,(n[s+952>>2]|0)-c>>2>>>0>l>>>0?s=n[c+(l<<2)>>2]|0:s=0,s|0}function ds(s){s=s|0;var l=0,c=0,f=0,d=0;f=C,C=C+32|0,l=f,d=n[s>>2]|0,c=(n[s+4>>2]|0)-d|0,((n[s+8>>2]|0)-d|0)>>>0>c>>>0&&(d=c>>2,wp(l,d,d,s+8|0),Ig(s,l),UA(l)),C=f}function ms(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;O=wi(s)|0;do if(O|0){if((n[(gs(s,0)|0)+944>>2]|0)==(s|0)){if(!(Ho(s+948|0,l)|0))break;Dr(l+400|0,8504,540)|0,n[l+944>>2]=0,Le(s);break}B=n[(n[s+976>>2]|0)+12>>2]|0,k=s+948|0,Q=(B|0)==0,c=0,m=0;do f=n[(n[k>>2]|0)+(m<<2)>>2]|0,(f|0)==(l|0)?Le(s):(d=Us(f)|0,n[(n[k>>2]|0)+(c<<2)>>2]=d,n[d+944>>2]=s,Q||LT[B&15](f,d,s,c),c=c+1|0),m=m+1|0;while((m|0)!=(O|0));if(c>>>0>>0){Q=s+948|0,k=s+952|0,B=c,c=n[k>>2]|0;do m=(n[Q>>2]|0)+(B<<2)|0,f=m+4|0,d=c-f|0,l=d>>2,l&&(Mw(m|0,f|0,d|0)|0,c=n[k>>2]|0),d=c,f=m+(l<<2)|0,(d|0)!=(f|0)&&(c=d+(~((d+-4-f|0)>>>2)<<2)|0,n[k>>2]=c),B=B+1|0;while((B|0)!=(O|0))}}while(0)}function _s(s){s=s|0;var l=0,c=0,f=0,d=0;Un(s,(wi(s)|0)==0,2491),Un(s,(n[s+944>>2]|0)==0,2545),l=s+948|0,c=n[l>>2]|0,f=s+952|0,d=n[f>>2]|0,(d|0)!=(c|0)&&(n[f>>2]=d+(~((d+-4-c|0)>>>2)<<2)),ds(l),l=s+976|0,c=n[l>>2]|0,Dr(s|0,8104,1e3)|0,o[c+2>>0]|0&&(n[s+4>>2]=2,n[s+12>>2]=4),n[l>>2]=c}function Un(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,Ao(s,5,3197,f)),C=d}function Pn(){return n[2276]|0}function ys(){var s=0;return s=pD(20)|0,We((s|0)!=0,2592),n[2277]=(n[2277]|0)+1,n[s>>2]=n[239],n[s+4>>2]=n[240],n[s+8>>2]=n[241],n[s+12>>2]=n[242],n[s+16>>2]=n[243],s|0}function We(s,l){s=s|0,l=l|0;var c=0,f=0;f=C,C=C+16|0,c=f,s||(n[c>>2]=l,Ao(0,5,3197,c)),C=f}function tt(s){s=s|0,hD(s),n[2277]=(n[2277]|0)+-1}function It(s,l){s=s|0,l=l|0;var c=0;l?(Un(s,(wi(s)|0)==0,2629),c=1):(c=0,l=0),n[s+964>>2]=l,n[s+988>>2]=c}function nr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+8|0,d=f+4|0,B=f,n[d>>2]=l,Un(s,(n[l+944>>2]|0)==0,2709),Un(s,(n[s+964>>2]|0)==0,2763),$(s),l=s+948|0,n[B>>2]=(n[l>>2]|0)+(c<<2),n[m>>2]=n[B>>2],me(l,m,d)|0,n[(n[d>>2]|0)+944>>2]=s,Le(s),C=f}function $(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;if(c=wi(s)|0,c|0&&(n[(gs(s,0)|0)+944>>2]|0)!=(s|0)){f=n[(n[s+976>>2]|0)+12>>2]|0,d=s+948|0,m=(f|0)==0,l=0;do B=n[(n[d>>2]|0)+(l<<2)>>2]|0,k=Us(B)|0,n[(n[d>>2]|0)+(l<<2)>>2]=k,n[k+944>>2]=s,m||LT[f&15](B,k,s,l),l=l+1|0;while((l|0)!=(c|0))}}function me(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0;et=C,C=C+64|0,q=et+52|0,k=et+48|0,se=et+28|0,Ge=et+24|0,Oe=et+20|0,Fe=et,f=n[s>>2]|0,m=f,l=f+((n[l>>2]|0)-m>>2<<2)|0,f=s+4|0,d=n[f>>2]|0,B=s+8|0;do if(d>>>0<(n[B>>2]|0)>>>0){if((l|0)==(d|0)){n[l>>2]=n[c>>2],n[f>>2]=(n[f>>2]|0)+4;break}_A(s,l,d,l+4|0),l>>>0<=c>>>0&&(c=(n[f>>2]|0)>>>0>c>>>0?c+4|0:c),n[l>>2]=n[c>>2]}else{f=(d-m>>2)+1|0,d=N(s)|0,d>>>0>>0&&zr(s),M=n[s>>2]|0,O=(n[B>>2]|0)-M|0,m=O>>1,wp(Fe,O>>2>>>0>>1>>>0?m>>>0>>0?f:m:d,l-M>>2,s+8|0),M=Fe+8|0,f=n[M>>2]|0,m=Fe+12|0,O=n[m>>2]|0,B=O,Q=f;do if((f|0)==(O|0)){if(O=Fe+4|0,f=n[O>>2]|0,Xe=n[Fe>>2]|0,d=Xe,f>>>0<=Xe>>>0){f=B-d>>1,f=(f|0)==0?1:f,wp(se,f,f>>>2,n[Fe+16>>2]|0),n[Ge>>2]=n[O>>2],n[Oe>>2]=n[M>>2],n[k>>2]=n[Ge>>2],n[q>>2]=n[Oe>>2],vw(se,k,q),f=n[Fe>>2]|0,n[Fe>>2]=n[se>>2],n[se>>2]=f,f=se+4|0,Xe=n[O>>2]|0,n[O>>2]=n[f>>2],n[f>>2]=Xe,f=se+8|0,Xe=n[M>>2]|0,n[M>>2]=n[f>>2],n[f>>2]=Xe,f=se+12|0,Xe=n[m>>2]|0,n[m>>2]=n[f>>2],n[f>>2]=Xe,UA(se),f=n[M>>2]|0;break}m=f,B=((m-d>>2)+1|0)/-2|0,k=f+(B<<2)|0,d=Q-m|0,m=d>>2,m&&(Mw(k|0,f|0,d|0)|0,f=n[O>>2]|0),Xe=k+(m<<2)|0,n[M>>2]=Xe,n[O>>2]=f+(B<<2),f=Xe}while(0);n[f>>2]=n[c>>2],n[M>>2]=(n[M>>2]|0)+4,l=Bg(s,Fe,l)|0,UA(Fe)}while(0);return C=et,l|0}function Le(s){s=s|0;var l=0;do{if(l=s+984|0,o[l>>0]|0)break;o[l>>0]=1,h[s+504>>2]=y(Ae),s=n[s+944>>2]|0}while((s|0)!=0)}function ft(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function pt(s){return s=s|0,n[s+944>>2]|0}function Rt(s){s=s|0,Un(s,(n[s+964>>2]|0)!=0,2832),Le(s)}function er(s){return s=s|0,(o[s+984>>0]|0)!=0|0}function Zr(s,l){s=s|0,l=l|0,LUe(s,l,400)|0&&(Dr(s|0,l|0,400)|0,Le(s))}function qi(s){s=s|0;var l=Ze;return l=y(h[s+44>>2]),s=_t(l)|0,y(s?y(0):l)}function es(s){s=s|0;var l=Ze;return l=y(h[s+48>>2]),_t(l)|0&&(l=o[(n[s+976>>2]|0)+2>>0]|0?y(1):y(0)),y(l)}function xi(s,l){s=s|0,l=l|0,n[s+980>>2]=l}function jo(s){return s=s|0,n[s+980>>2]|0}function bA(s,l){s=s|0,l=l|0;var c=0;c=s+4|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function kA(s){return s=s|0,n[s+4>>2]|0}function up(s,l){s=s|0,l=l|0;var c=0;c=s+8|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ng(s){return s=s|0,n[s+8>>2]|0}function gu(s,l){s=s|0,l=l|0;var c=0;c=s+12|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ig(s){return s=s|0,n[s+12>>2]|0}function du(s,l){s=s|0,l=l|0;var c=0;c=s+16|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function uo(s){return s=s|0,n[s+16>>2]|0}function QA(s,l){s=s|0,l=l|0;var c=0;c=s+20|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function mc(s){return s=s|0,n[s+20>>2]|0}function ca(s,l){s=s|0,l=l|0;var c=0;c=s+24|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function sg(s){return s=s|0,n[s+24>>2]|0}function yc(s,l){s=s|0,l=l|0;var c=0;c=s+28|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function Pm(s){return s=s|0,n[s+28>>2]|0}function og(s,l){s=s|0,l=l|0;var c=0;c=s+32|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function $n(s){return s=s|0,n[s+32>>2]|0}function Ap(s,l){s=s|0,l=l|0;var c=0;c=s+36|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ag(s){return s=s|0,n[s+36>>2]|0}function FA(s,l){s=s|0,l=y(l);var c=0;c=s+40|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Hs(s,l){s=s|0,l=y(l);var c=0;c=s+44|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function mu(s,l){s=s|0,l=y(l);var c=0;c=s+48|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Ha(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+52|0,d=s+56|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Gi(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+52|0,c=s+56|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function ua(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+52|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function yu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Es(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Ec(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+132+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Cc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function G(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Dt(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+60+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function wl(s,l){s=s|0,l=l|0;var c=0;c=s+60+(l<<3)+4|0,(n[c>>2]|0)!=3&&(h[s+60+(l<<3)>>2]=y(Ae),n[c>>2]=3,Le(s))}function bi(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function wc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function ct(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+204+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Eu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+276+(l<<3)|0,l=s+276+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function lg(s,l){return s=s|0,l=l|0,y(h[s+276+(l<<3)>>2])}function mw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+348|0,d=s+352|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function TA(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+348|0,c=s+352|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function fp(s){s=s|0;var l=0;l=s+352|0,(n[l>>2]|0)!=3&&(h[s+348>>2]=y(Ae),n[l>>2]=3,Le(s))}function Br(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+348|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cs(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+356|0,d=s+360|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function cg(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+356|0,c=s+360|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function ug(s){s=s|0;var l=0;l=s+360|0,(n[l>>2]|0)!=3&&(h[s+356>>2]=y(Ae),n[l>>2]=3,Le(s))}function Ag(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+356|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function pp(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ic(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ct(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+364|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Sm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function fg(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function pg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+372|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function xm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function hg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+380|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function wu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function yw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function bm(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+388|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Aa(s,l){s=s|0,l=y(l);var c=0;c=s+396|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Bc(s){return s=s|0,y(h[s+396>>2])}function Il(s){return s=s|0,y(h[s+400>>2])}function Iu(s){return s=s|0,y(h[s+404>>2])}function gg(s){return s=s|0,y(h[s+408>>2])}function RA(s){return s=s|0,y(h[s+412>>2])}function hp(s){return s=s|0,y(h[s+416>>2])}function ja(s){return s=s|0,y(h[s+420>>2])}function dg(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+424+(l<<2)>>2])}function gp(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+448+(l<<2)>>2])}function qo(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+472+(l<<2)>>2])}function ws(s,l){s=s|0,l=l|0;var c=0,f=Ze;return c=n[s+4>>2]|0,(c|0)==(n[l+4>>2]|0)?c?(f=y(h[s>>2]),s=y(ne(y(f-y(h[l>>2]))))>2]=0,n[f+4>>2]=0,n[f+8>>2]=0,Oa(f|0,s|0,l|0,0),Ao(s,3,(o[f+11>>0]|0)<0?n[f>>2]|0:f,c),s3e(f),C=c}function Go(s,l,c,f){s=y(s),l=y(l),c=c|0,f=f|0;var d=Ze;s=y(s*l),d=y(kT(s,y(1)));do if(Ii(d,y(0))|0)s=y(s-d);else{if(s=y(s-d),Ii(d,y(1))|0){s=y(s+y(1));break}if(c){s=y(s+y(1));break}f||(d>y(.5)?d=y(1):(f=Ii(d,y(.5))|0,d=y(f?1:0)),s=y(s+d))}while(0);return y(s/l)}function NA(s,l,c,f,d,m,B,k,Q,O,M,q,se){s=s|0,l=y(l),c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,k=y(k),Q=y(Q),O=y(O),M=y(M),q=y(q),se=se|0;var Ge=0,Oe=Ze,Fe=Ze,et=Ze,Xe=Ze,at=Ze,Ue=Ze;return Q>2]),Oe!=y(0))?(et=y(Go(l,Oe,0,0)),Xe=y(Go(f,Oe,0,0)),Fe=y(Go(m,Oe,0,0)),Oe=y(Go(k,Oe,0,0))):(Fe=m,et=l,Oe=k,Xe=f),(d|0)==(s|0)?Ge=Ii(Fe,et)|0:Ge=0,(B|0)==(c|0)?se=Ii(Oe,Xe)|0:se=0,!Ge&&(at=y(l-M),!(dp(s,at,Q)|0))&&!(mp(s,at,d,Q)|0)?Ge=mg(s,at,d,m,Q)|0:Ge=1,!se&&(Ue=y(f-q),!(dp(c,Ue,O)|0))&&!(mp(c,Ue,B,O)|0)?se=mg(c,Ue,B,k,O)|0:se=1,se=Ge&se),se|0}function dp(s,l,c){return s=s|0,l=y(l),c=y(c),(s|0)==1?s=Ii(l,c)|0:s=0,s|0}function mp(s,l,c,f){return s=s|0,l=y(l),c=c|0,f=y(f),(s|0)==2&(c|0)==0?l>=f?s=1:s=Ii(l,f)|0:s=0,s|0}function mg(s,l,c,f,d){return s=s|0,l=y(l),c=c|0,f=y(f),d=y(d),(s|0)==2&(c|0)==2&f>l?d<=l?s=1:s=Ii(l,d)|0:s=0,s|0}function fa(s,l,c,f,d,m,B,k,Q,O,M){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,O=O|0,M=M|0;var q=0,se=0,Ge=0,Oe=0,Fe=Ze,et=Ze,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=Ze,go=Ze,mo=Ze,yo=0,ya=0;ir=C,C=C+160|0,Xt=ir+152|0,or=ir+120|0,Or=ir+104|0,Ue=ir+72|0,Oe=ir+56|0,Lt=ir+8|0,at=ir,qe=(n[2279]|0)+1|0,n[2279]=qe,Pr=s+984|0,(o[Pr>>0]|0)!=0&&(n[s+512>>2]|0)!=(n[2278]|0)?Xe=4:(n[s+516>>2]|0)==(f|0)?Nr=0:Xe=4,(Xe|0)==4&&(n[s+520>>2]=0,n[s+924>>2]=-1,n[s+928>>2]=-1,h[s+932>>2]=y(-1),h[s+936>>2]=y(-1),Nr=1);e:do if(n[s+964>>2]|0)if(Fe=y(ln(s,2,B)),et=y(ln(s,0,B)),q=s+916|0,mo=y(h[q>>2]),go=y(h[s+920>>2]),bn=y(h[s+932>>2]),NA(d,l,m,c,n[s+924>>2]|0,mo,n[s+928>>2]|0,go,bn,y(h[s+936>>2]),Fe,et,M)|0)Xe=22;else if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(q=s+524+(se*24|0)|0,bn=y(h[q>>2]),go=y(h[s+524+(se*24|0)+4>>2]),mo=y(h[s+524+(se*24|0)+16>>2]),NA(d,l,m,c,n[s+524+(se*24|0)+8>>2]|0,bn,n[s+524+(se*24|0)+12>>2]|0,go,mo,y(h[s+524+(se*24|0)+20>>2]),Fe,et,M)|0){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}else{if(Q){if(q=s+916|0,!(Ii(y(h[q>>2]),l)|0)){Xe=21;break}if(!(Ii(y(h[s+920>>2]),c)|0)){Xe=21;break}if((n[s+924>>2]|0)!=(d|0)){Xe=21;break}q=(n[s+928>>2]|0)==(m|0)?q:0,Xe=22;break}if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(q=s+524+(se*24|0)|0,Ii(y(h[q>>2]),l)|0&&Ii(y(h[s+524+(se*24|0)+4>>2]),c)|0&&(n[s+524+(se*24|0)+8>>2]|0)==(d|0)&&(n[s+524+(se*24|0)+12>>2]|0)==(m|0)){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}}while(0);do if((Xe|0)==21)o[11697]|0?(q=0,Xe=28):(q=0,Xe=31);else if((Xe|0)==22){if(se=(o[11697]|0)!=0,!((q|0)!=0&(Nr^1)))if(se){Xe=28;break}else{Xe=31;break}Oe=q+16|0,n[s+908>>2]=n[Oe>>2],Ge=q+20|0,n[s+912>>2]=n[Ge>>2],(o[11698]|0)==0|se^1||(n[at>>2]=LA(qe)|0,n[at+4>>2]=qe,Ao(s,4,2972,at),se=n[s+972>>2]|0,se|0&&ef[se&127](s),d=qa(d,Q)|0,m=qa(m,Q)|0,ya=+y(h[Oe>>2]),yo=+y(h[Ge>>2]),n[Lt>>2]=d,n[Lt+4>>2]=m,E[Lt+8>>3]=+l,E[Lt+16>>3]=+c,E[Lt+24>>3]=ya,E[Lt+32>>3]=yo,n[Lt+40>>2]=O,Ao(s,4,2989,Lt))}while(0);return(Xe|0)==28&&(se=LA(qe)|0,n[Oe>>2]=se,n[Oe+4>>2]=qe,n[Oe+8>>2]=Nr?3047:11699,Ao(s,4,3038,Oe),se=n[s+972>>2]|0,se|0&&ef[se&127](s),Lt=qa(d,Q)|0,Xe=qa(m,Q)|0,n[Ue>>2]=Lt,n[Ue+4>>2]=Xe,E[Ue+8>>3]=+l,E[Ue+16>>3]=+c,n[Ue+24>>2]=O,Ao(s,4,3049,Ue),Xe=31),(Xe|0)==31&&(si(s,l,c,f,d,m,B,k,Q,M),o[11697]|0&&(se=n[2279]|0,Lt=LA(se)|0,n[Or>>2]=Lt,n[Or+4>>2]=se,n[Or+8>>2]=Nr?3047:11699,Ao(s,4,3083,Or),se=n[s+972>>2]|0,se|0&&ef[se&127](s),Lt=qa(d,Q)|0,Or=qa(m,Q)|0,yo=+y(h[s+908>>2]),ya=+y(h[s+912>>2]),n[or>>2]=Lt,n[or+4>>2]=Or,E[or+8>>3]=yo,E[or+16>>3]=ya,n[or+24>>2]=O,Ao(s,4,3092,or)),n[s+516>>2]=f,q||(se=s+520|0,q=n[se>>2]|0,(q|0)==16&&(o[11697]|0&&Ao(s,4,3124,Xt),n[se>>2]=0,q=0),Q?q=s+916|0:(n[se>>2]=q+1,q=s+524+(q*24|0)|0),h[q>>2]=l,h[q+4>>2]=c,n[q+8>>2]=d,n[q+12>>2]=m,n[q+16>>2]=n[s+908>>2],n[q+20>>2]=n[s+912>>2],q=0)),Q&&(n[s+416>>2]=n[s+908>>2],n[s+420>>2]=n[s+912>>2],o[s+985>>0]=1,o[Pr>>0]=0),n[2279]=(n[2279]|0)+-1,n[s+512>>2]=n[2278],C=ir,Nr|(q|0)==0|0}function ln(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(V(s,l,c)),y(f+y(re(s,l,c)))}function Ao(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=C,C=C+16|0,d=m,n[d>>2]=f,s?f=n[s+976>>2]|0:f=0,Eg(f,s,l,c,d),C=m}function LA(s){return s=s|0,(s>>>0>60?3201:3201+(60-s)|0)|0}function qa(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+32|0,c=d+12|0,f=d,n[c>>2]=n[254],n[c+4>>2]=n[255],n[c+8>>2]=n[256],n[f>>2]=n[257],n[f+4>>2]=n[258],n[f+8>>2]=n[259],(s|0)>2?s=11699:s=n[(l?f:c)+(s<<2)>>2]|0,C=d,s|0}function si(s,l,c,f,d,m,B,k,Q,O){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,O=O|0;var M=0,q=0,se=0,Ge=0,Oe=Ze,Fe=Ze,et=Ze,Xe=Ze,at=Ze,Ue=Ze,qe=Ze,Lt=0,Or=0,or=0,Xt=Ze,Pr=Ze,Nr=0,ir=Ze,bn=0,go=0,mo=0,yo=0,ya=0,Qp=0,Fp=0,xl=0,Tp=0,Fu=0,Tu=0,Rp=0,Np=0,Lp=0,Xr=0,bl=0,Mp=0,bc=0,Op=Ze,Up=Ze,Ru=Ze,Nu=Ze,kc=Ze,qs=0,za=0,Wo=0,kl=0,rf=0,nf=Ze,Lu=Ze,sf=Ze,of=Ze,Gs=Ze,vs=Ze,Ql=0,Tn=Ze,af=Ze,Eo=Ze,Qc=Ze,Co=Ze,Fc=Ze,lf=0,cf=0,Tc=Ze,Ys=Ze,Fl=0,uf=0,Af=0,ff=0,br=Ze,Jn=0,Ds=0,wo=0,Ws=0,Tr=0,ur=0,Tl=0,Jt=Ze,pf=0,li=0;Tl=C,C=C+16|0,qs=Tl+12|0,za=Tl+8|0,Wo=Tl+4|0,kl=Tl,Un(s,(d|0)==0|(_t(l)|0)^1,3326),Un(s,(m|0)==0|(_t(c)|0)^1,3406),Ds=mt(s,f)|0,n[s+496>>2]=Ds,Tr=fr(2,Ds)|0,ur=fr(0,Ds)|0,h[s+440>>2]=y(V(s,Tr,B)),h[s+444>>2]=y(re(s,Tr,B)),h[s+428>>2]=y(V(s,ur,B)),h[s+436>>2]=y(re(s,ur,B)),h[s+464>>2]=y(Cr(s,Tr)),h[s+468>>2]=y(yn(s,Tr)),h[s+452>>2]=y(Cr(s,ur)),h[s+460>>2]=y(yn(s,ur)),h[s+488>>2]=y(oi(s,Tr,B)),h[s+492>>2]=y(Mi(s,Tr,B)),h[s+476>>2]=y(oi(s,ur,B)),h[s+484>>2]=y(Mi(s,ur,B));do if(n[s+964>>2]|0)wg(s,l,c,d,m,B,k);else{if(wo=s+948|0,Ws=(n[s+952>>2]|0)-(n[wo>>2]|0)>>2,!Ws){Gv(s,l,c,d,m,B,k);break}if(!Q&&Yv(s,l,c,d,m,B,k)|0)break;$(s),bl=s+508|0,o[bl>>0]=0,Tr=fr(n[s+4>>2]|0,Ds)|0,ur=Cw(Tr,Ds)|0,Jn=he(Tr)|0,Mp=n[s+8>>2]|0,uf=s+28|0,bc=(n[uf>>2]|0)!=0,Co=Jn?B:k,Tc=Jn?k:B,Op=y(Ep(s,Tr,B)),Up=y(ww(s,Tr,B)),Oe=y(Ep(s,ur,B)),Fc=y(En(s,Tr,B)),Ys=y(En(s,ur,B)),or=Jn?d:m,Fl=Jn?m:d,br=Jn?Fc:Ys,at=Jn?Ys:Fc,Qc=y(ln(s,2,B)),Xe=y(ln(s,0,B)),Fe=y(y(Gr(s+364|0,B))-br),et=y(y(Gr(s+380|0,B))-br),Ue=y(y(Gr(s+372|0,k))-at),qe=y(y(Gr(s+388|0,k))-at),Ru=Jn?Fe:Ue,Nu=Jn?et:qe,Qc=y(l-Qc),l=y(Qc-br),_t(l)|0?br=l:br=y(_n(y(Tg(l,et)),Fe)),af=y(c-Xe),l=y(af-at),_t(l)|0?Eo=l:Eo=y(_n(y(Tg(l,qe)),Ue)),Fe=Jn?br:Eo,Tn=Jn?Eo:br;e:do if((or|0)==1)for(f=0,q=0;;){if(M=gs(s,q)|0,!f)y(rs(M))>y(0)&&y(js(M))>y(0)?f=M:f=0;else if(Tm(M)|0){Ge=0;break e}if(q=q+1|0,q>>>0>=Ws>>>0){Ge=f;break}}else Ge=0;while(0);Lt=Ge+500|0,Or=Ge+504|0,f=0,M=0,l=y(0),se=0;do{if(q=n[(n[wo>>2]|0)+(se<<2)>>2]|0,(n[q+36>>2]|0)==1)Bu(q),o[q+985>>0]=1,o[q+984>>0]=0;else{Bl(q),Q&&yp(q,mt(q,Ds)|0,Fe,Tn,br);do if((n[q+24>>2]|0)!=1)if((q|0)==(Ge|0)){n[Lt>>2]=n[2278],h[Or>>2]=y(0);break}else{Rm(s,q,br,d,Eo,br,Eo,m,Ds,O);break}else M|0&&(n[M+960>>2]=q),n[q+960>>2]=0,M=q,f=(f|0)==0?q:f;while(0);vs=y(h[q+504>>2]),l=y(l+y(vs+y(ln(q,Tr,br))))}se=se+1|0}while((se|0)!=(Ws|0));for(mo=l>Fe,Ql=bc&((or|0)==2&mo)?1:or,bn=(Fl|0)==1,ya=bn&(Q^1),Qp=(Ql|0)==1,Fp=(Ql|0)==2,xl=976+(Tr<<2)|0,Tp=(Fl|2|0)==2,Lp=bn&(bc^1),Fu=1040+(ur<<2)|0,Tu=1040+(Tr<<2)|0,Rp=976+(ur<<2)|0,Np=(Fl|0)!=1,mo=bc&((or|0)!=0&mo),go=s+976|0,bn=bn^1,l=Fe,Nr=0,yo=0,vs=y(0),kc=y(0);;){e:do if(Nr>>>0>>0)for(Or=n[wo>>2]|0,se=0,qe=y(0),Ue=y(0),et=y(0),Fe=y(0),q=0,M=0,Ge=Nr;;){if(Lt=n[Or+(Ge<<2)>>2]|0,(n[Lt+36>>2]|0)!=1&&(n[Lt+940>>2]=yo,(n[Lt+24>>2]|0)!=1)){if(Xe=y(ln(Lt,Tr,br)),Xr=n[xl>>2]|0,c=y(Gr(Lt+380+(Xr<<3)|0,Co)),at=y(h[Lt+504>>2]),c=y(Tg(c,at)),c=y(_n(y(Gr(Lt+364+(Xr<<3)|0,Co)),c)),bc&(se|0)!=0&y(Xe+y(Ue+c))>l){m=se,Xe=qe,or=Ge;break e}Xe=y(Xe+c),c=y(Ue+Xe),Xe=y(qe+Xe),Tm(Lt)|0&&(et=y(et+y(rs(Lt))),Fe=y(Fe-y(at*y(js(Lt))))),M|0&&(n[M+960>>2]=Lt),n[Lt+960>>2]=0,se=se+1|0,M=Lt,q=(q|0)==0?Lt:q}else Xe=qe,c=Ue;if(Ge=Ge+1|0,Ge>>>0>>0)qe=Xe,Ue=c;else{m=se,or=Ge;break}}else m=0,Xe=y(0),et=y(0),Fe=y(0),q=0,or=Nr;while(0);Xr=et>y(0)&ety(0)&FeNu&((_t(Nu)|0)^1))l=Nu,Xr=51;else if(o[(n[go>>2]|0)+3>>0]|0)Xr=51;else{if(Xt!=y(0)&&y(rs(s))!=y(0)){Xr=53;break}l=Xe,Xr=53}while(0);if((Xr|0)==51&&(Xr=0,_t(l)|0?Xr=53:(Pr=y(l-Xe),ir=l)),(Xr|0)==53&&(Xr=0,Xe>2]|0,Ge=Pry(0),Ue=y(Pr/Xt),et=y(0),Xe=y(0),l=y(0),M=q;do c=y(Gr(M+380+(se<<3)|0,Co)),Fe=y(Gr(M+364+(se<<3)|0,Co)),Fe=y(Tg(c,y(_n(Fe,y(h[M+504>>2]))))),Ge?(c=y(Fe*y(js(M))),c!=y(-0)&&(Jt=y(Fe-y(at*c)),nf=y(Bi(M,Tr,Jt,ir,br)),Jt!=nf)&&(et=y(et-y(nf-Fe)),l=y(l+c))):Lt&&(Lu=y(rs(M)),Lu!=y(0))&&(Jt=y(Fe+y(Ue*Lu)),sf=y(Bi(M,Tr,Jt,ir,br)),Jt!=sf)&&(et=y(et-y(sf-Fe)),Xe=y(Xe-Lu)),M=n[M+960>>2]|0;while((M|0)!=0);if(l=y(qe+l),Fe=y(Pr+et),rf)l=y(0);else{at=y(Xt+Xe),Ge=n[xl>>2]|0,Lt=Fey(0),at=y(Fe/at),l=y(0);do{Jt=y(Gr(q+380+(Ge<<3)|0,Co)),et=y(Gr(q+364+(Ge<<3)|0,Co)),et=y(Tg(Jt,y(_n(et,y(h[q+504>>2]))))),Lt?(Jt=y(et*y(js(q))),Fe=y(-Jt),Jt!=y(-0)?(Jt=y(Ue*Fe),Fe=y(Bi(q,Tr,y(et+(Or?Fe:Jt)),ir,br))):Fe=et):se&&(of=y(rs(q)),of!=y(0))?Fe=y(Bi(q,Tr,y(et+y(at*of)),ir,br)):Fe=et,l=y(l-y(Fe-et)),Xe=y(ln(q,Tr,br)),c=y(ln(q,ur,br)),Fe=y(Fe+Xe),h[za>>2]=Fe,n[kl>>2]=1,et=y(h[q+396>>2]);e:do if(_t(et)|0){M=_t(Tn)|0;do if(!M){if(mo|(ts(q,ur,Tn)|0|bn)||(ha(s,q)|0)!=4||(n[(vl(q,ur)|0)+4>>2]|0)==3||(n[(Pc(q,ur)|0)+4>>2]|0)==3)break;h[qs>>2]=Tn,n[Wo>>2]=1;break e}while(0);if(ts(q,ur,Tn)|0){M=n[q+992+(n[Rp>>2]<<2)>>2]|0,Jt=y(c+y(Gr(M,Tn))),h[qs>>2]=Jt,M=Np&(n[M+4>>2]|0)==2,n[Wo>>2]=((_t(Jt)|0|M)^1)&1;break}else{h[qs>>2]=Tn,n[Wo>>2]=M?0:2;break}}else Jt=y(Fe-Xe),Xt=y(Jt/et),Jt=y(et*Jt),n[Wo>>2]=1,h[qs>>2]=y(c+(Jn?Xt:Jt));while(0);yr(q,Tr,ir,br,kl,za),yr(q,ur,Tn,br,Wo,qs);do if(!(ts(q,ur,Tn)|0)&&(ha(s,q)|0)==4){if((n[(vl(q,ur)|0)+4>>2]|0)==3){M=0;break}M=(n[(Pc(q,ur)|0)+4>>2]|0)!=3}else M=0;while(0);Jt=y(h[za>>2]),Xt=y(h[qs>>2]),pf=n[kl>>2]|0,li=n[Wo>>2]|0,fa(q,Jn?Jt:Xt,Jn?Xt:Jt,Ds,Jn?pf:li,Jn?li:pf,br,Eo,Q&(M^1),3488,O)|0,o[bl>>0]=o[bl>>0]|o[q+508>>0],q=n[q+960>>2]|0}while((q|0)!=0)}}else l=y(0);if(l=y(Pr+l),li=l>0]=li|u[bl>>0],Fp&l>y(0)?(M=n[xl>>2]|0,(n[s+364+(M<<3)+4>>2]|0)!=0&&(Gs=y(Gr(s+364+(M<<3)|0,Co)),Gs>=y(0))?Fe=y(_n(y(0),y(Gs-y(ir-l)))):Fe=y(0)):Fe=l,Lt=Nr>>>0>>0,Lt){Ge=n[wo>>2]|0,se=Nr,M=0;do q=n[Ge+(se<<2)>>2]|0,n[q+24>>2]|0||(M=((n[(vl(q,Tr)|0)+4>>2]|0)==3&1)+M|0,M=M+((n[(Pc(q,Tr)|0)+4>>2]|0)==3&1)|0),se=se+1|0;while((se|0)!=(or|0));M?(Xe=y(0),c=y(0)):Xr=101}else Xr=101;e:do if((Xr|0)==101)switch(Xr=0,Mp|0){case 1:{M=0,Xe=y(Fe*y(.5)),c=y(0);break e}case 2:{M=0,Xe=Fe,c=y(0);break e}case 3:{if(m>>>0<=1){M=0,Xe=y(0),c=y(0);break e}c=y((m+-1|0)>>>0),M=0,Xe=y(0),c=y(y(_n(Fe,y(0)))/c);break e}case 5:{c=y(Fe/y((m+1|0)>>>0)),M=0,Xe=c;break e}case 4:{c=y(Fe/y(m>>>0)),M=0,Xe=y(c*y(.5));break e}default:{M=0,Xe=y(0),c=y(0);break e}}while(0);if(l=y(Op+Xe),Lt){et=y(Fe/y(M|0)),se=n[wo>>2]|0,q=Nr,Fe=y(0);do{M=n[se+(q<<2)>>2]|0;e:do if((n[M+36>>2]|0)!=1){switch(n[M+24>>2]|0){case 1:{if(gi(M,Tr)|0){if(!Q)break e;Jt=y(Mr(M,Tr,ir)),Jt=y(Jt+y(Cr(s,Tr))),Jt=y(Jt+y(V(M,Tr,br))),h[M+400+(n[Tu>>2]<<2)>>2]=Jt;break e}break}case 0:if(li=(n[(vl(M,Tr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,Q&&(li=M+400+(n[Tu>>2]<<2)|0,h[li>>2]=y(l+y(h[li>>2]))),li=(n[(Pc(M,Tr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,ya){Jt=y(c+y(ln(M,Tr,br))),Fe=Tn,l=y(l+y(Jt+y(h[M+504>>2])));break e}else{l=y(l+y(c+y(ns(M,Tr,br)))),Fe=y(_n(Fe,y(ns(M,ur,br))));break e}default:}Q&&(Jt=y(Xe+y(Cr(s,Tr))),li=M+400+(n[Tu>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2])))}while(0);q=q+1|0}while((q|0)!=(or|0))}else Fe=y(0);if(c=y(Up+l),Tp?Xe=y(y(Bi(s,ur,y(Ys+Fe),Tc,B))-Ys):Xe=Tn,et=y(y(Bi(s,ur,y(Ys+(Lp?Tn:Fe)),Tc,B))-Ys),Lt&Q){q=Nr;do{se=n[(n[wo>>2]|0)+(q<<2)>>2]|0;do if((n[se+36>>2]|0)!=1){if((n[se+24>>2]|0)==1){if(gi(se,ur)|0){if(Jt=y(Mr(se,ur,Tn)),Jt=y(Jt+y(Cr(s,ur))),Jt=y(Jt+y(V(se,ur,br))),M=n[Fu>>2]|0,h[se+400+(M<<2)>>2]=Jt,!(_t(Jt)|0))break}else M=n[Fu>>2]|0;Jt=y(Cr(s,ur)),h[se+400+(M<<2)>>2]=y(Jt+y(V(se,ur,br)));break}M=ha(s,se)|0;do if((M|0)==4){if((n[(vl(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if((n[(Pc(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if(ts(se,ur,Tn)|0){l=Oe;break}pf=n[se+908+(n[xl>>2]<<2)>>2]|0,n[qs>>2]=pf,l=y(h[se+396>>2]),li=_t(l)|0,Fe=(n[v>>2]=pf,y(h[v>>2])),li?l=et:(Pr=y(ln(se,ur,br)),Jt=y(Fe/l),l=y(l*Fe),l=y(Pr+(Jn?Jt:l))),h[za>>2]=l,h[qs>>2]=y(y(ln(se,Tr,br))+Fe),n[Wo>>2]=1,n[kl>>2]=1,yr(se,Tr,ir,br,Wo,qs),yr(se,ur,Tn,br,kl,za),l=y(h[qs>>2]),Pr=y(h[za>>2]),Jt=Jn?l:Pr,l=Jn?Pr:l,li=((_t(Jt)|0)^1)&1,fa(se,Jt,l,Ds,li,((_t(l)|0)^1)&1,br,Eo,1,3493,O)|0,l=Oe}else Xr=139;while(0);e:do if((Xr|0)==139){Xr=0,l=y(Xe-y(ns(se,ur,br)));do if((n[(vl(se,ur)|0)+4>>2]|0)==3){if((n[(Pc(se,ur)|0)+4>>2]|0)!=3)break;l=y(Oe+y(_n(y(0),y(l*y(.5)))));break e}while(0);if((n[(Pc(se,ur)|0)+4>>2]|0)==3){l=Oe;break}if((n[(vl(se,ur)|0)+4>>2]|0)==3){l=y(Oe+y(_n(y(0),l)));break}switch(M|0){case 1:{l=Oe;break e}case 2:{l=y(Oe+y(l*y(.5)));break e}default:{l=y(Oe+l);break e}}}while(0);Jt=y(vs+l),li=se+400+(n[Fu>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2]))}while(0);q=q+1|0}while((q|0)!=(or|0))}if(vs=y(vs+et),kc=y(_n(kc,c)),m=yo+1|0,or>>>0>=Ws>>>0)break;l=ir,Nr=or,yo=m}do if(Q){if(M=m>>>0>1,!M&&!(Yi(s)|0))break;if(!(_t(Tn)|0)){l=y(Tn-vs);e:do switch(n[s+12>>2]|0){case 3:{Oe=y(Oe+l),Ue=y(0);break}case 2:{Oe=y(Oe+y(l*y(.5))),Ue=y(0);break}case 4:{Tn>vs?Ue=y(l/y(m>>>0)):Ue=y(0);break}case 7:if(Tn>vs){Oe=y(Oe+y(l/y(m<<1>>>0))),Ue=y(l/y(m>>>0)),Ue=M?Ue:y(0);break e}else{Oe=y(Oe+y(l*y(.5))),Ue=y(0);break e}case 6:{Ue=y(l/y(yo>>>0)),Ue=Tn>vs&M?Ue:y(0);break}default:Ue=y(0)}while(0);if(m|0)for(Lt=1040+(ur<<2)|0,Or=976+(ur<<2)|0,Ge=0,q=0;;){e:do if(q>>>0>>0)for(Fe=y(0),et=y(0),l=y(0),se=q;;){M=n[(n[wo>>2]|0)+(se<<2)>>2]|0;do if((n[M+36>>2]|0)!=1&&(n[M+24>>2]|0)==0){if((n[M+940>>2]|0)!=(Ge|0))break e;if(Nm(M,ur)|0&&(Jt=y(h[M+908+(n[Or>>2]<<2)>>2]),l=y(_n(l,y(Jt+y(ln(M,ur,br)))))),(ha(s,M)|0)!=5)break;Gs=y(Ya(M)),Gs=y(Gs+y(V(M,0,br))),Jt=y(h[M+912>>2]),Jt=y(y(Jt+y(ln(M,0,br)))-Gs),Gs=y(_n(et,Gs)),Jt=y(_n(Fe,Jt)),Fe=Jt,et=Gs,l=y(_n(l,y(Gs+Jt)))}while(0);if(M=se+1|0,M>>>0>>0)se=M;else{se=M;break}}else et=y(0),l=y(0),se=q;while(0);if(at=y(Ue+l),c=Oe,Oe=y(Oe+at),q>>>0>>0){Xe=y(c+et),M=q;do{q=n[(n[wo>>2]|0)+(M<<2)>>2]|0;e:do if((n[q+36>>2]|0)!=1&&(n[q+24>>2]|0)==0)switch(ha(s,q)|0){case 1:{Jt=y(c+y(V(q,ur,br))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 3:{Jt=y(y(Oe-y(re(q,ur,br)))-y(h[q+908+(n[Or>>2]<<2)>>2])),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 2:{Jt=y(c+y(y(at-y(h[q+908+(n[Or>>2]<<2)>>2]))*y(.5))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 4:{if(Jt=y(c+y(V(q,ur,br))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt,ts(q,ur,Tn)|0||(Jn?(Fe=y(h[q+908>>2]),l=y(Fe+y(ln(q,Tr,br))),et=at):(et=y(h[q+912>>2]),et=y(et+y(ln(q,ur,br))),l=at,Fe=y(h[q+908>>2])),Ii(l,Fe)|0&&Ii(et,y(h[q+912>>2]))|0))break e;fa(q,l,et,Ds,1,1,br,Eo,1,3501,O)|0;break e}case 5:{h[q+404>>2]=y(y(Xe-y(Ya(q)))+y(Mr(q,0,Tn)));break e}default:break e}while(0);M=M+1|0}while((M|0)!=(se|0))}if(Ge=Ge+1|0,(Ge|0)==(m|0))break;q=se}}}while(0);if(h[s+908>>2]=y(Bi(s,2,Qc,B,B)),h[s+912>>2]=y(Bi(s,0,af,k,B)),(Ql|0)!=0&&(lf=n[s+32>>2]|0,cf=(Ql|0)==2,!(cf&(lf|0)!=2))?cf&(lf|0)==2&&(l=y(Fc+ir),l=y(_n(y(Tg(l,y(MA(s,Tr,kc,Co)))),Fc)),Xr=198):(l=y(Bi(s,Tr,kc,Co,B)),Xr=198),(Xr|0)==198&&(h[s+908+(n[976+(Tr<<2)>>2]<<2)>>2]=l),(Fl|0)!=0&&(Af=n[s+32>>2]|0,ff=(Fl|0)==2,!(ff&(Af|0)!=2))?ff&(Af|0)==2&&(l=y(Ys+Tn),l=y(_n(y(Tg(l,y(MA(s,ur,y(Ys+vs),Tc)))),Ys)),Xr=204):(l=y(Bi(s,ur,y(Ys+vs),Tc,B)),Xr=204),(Xr|0)==204&&(h[s+908+(n[976+(ur<<2)>>2]<<2)>>2]=l),Q){if((n[uf>>2]|0)==2){q=976+(ur<<2)|0,se=1040+(ur<<2)|0,M=0;do Ge=gs(s,M)|0,n[Ge+24>>2]|0||(pf=n[q>>2]|0,Jt=y(h[s+908+(pf<<2)>>2]),li=Ge+400+(n[se>>2]<<2)|0,Jt=y(Jt-y(h[li>>2])),h[li>>2]=y(Jt-y(h[Ge+908+(pf<<2)>>2]))),M=M+1|0;while((M|0)!=(Ws|0))}if(f|0){M=Jn?Ql:d;do Lm(s,f,br,M,Eo,Ds,O),f=n[f+960>>2]|0;while((f|0)!=0)}if(M=(Tr|2|0)==3,q=(ur|2|0)==3,M|q){f=0;do se=n[(n[wo>>2]|0)+(f<<2)>>2]|0,(n[se+36>>2]|0)!=1&&(M&&Cp(s,se,Tr),q&&Cp(s,se,ur)),f=f+1|0;while((f|0)!=(Ws|0))}}}while(0);C=Tl}function pa(s,l){s=s|0,l=y(l);var c=0;oa(s,l>=y(0),3147),c=l==y(0),h[s+4>>2]=c?y(0):l}function vc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=f|0;var d=Ze,m=Ze,B=0,k=0,Q=0;n[2278]=(n[2278]|0)+1,Bl(s),ts(s,2,l)|0?(d=y(Gr(n[s+992>>2]|0,l)),Q=1,d=y(d+y(ln(s,2,l)))):(d=y(Gr(s+380|0,l)),d>=y(0)?Q=2:(Q=((_t(l)|0)^1)&1,d=l)),ts(s,0,c)|0?(m=y(Gr(n[s+996>>2]|0,c)),k=1,m=y(m+y(ln(s,0,l)))):(m=y(Gr(s+388|0,c)),m>=y(0)?k=2:(k=((_t(c)|0)^1)&1,m=c)),B=s+976|0,fa(s,d,m,f,Q,k,l,c,1,3189,n[B>>2]|0)|0&&(yp(s,n[s+496>>2]|0,l,c,l),Dc(s,y(h[(n[B>>2]|0)+4>>2]),y(0),y(0)),o[11696]|0)&&km(s,7)}function Bl(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;k=C,C=C+32|0,B=k+24|0,m=k+16|0,f=k+8|0,d=k,c=0;do l=s+380+(c<<3)|0,(n[s+380+(c<<3)+4>>2]|0)!=0&&(Q=l,O=n[Q+4>>2]|0,M=f,n[M>>2]=n[Q>>2],n[M+4>>2]=O,M=s+364+(c<<3)|0,O=n[M+4>>2]|0,Q=d,n[Q>>2]=n[M>>2],n[Q+4>>2]=O,n[m>>2]=n[f>>2],n[m+4>>2]=n[f+4>>2],n[B>>2]=n[d>>2],n[B+4>>2]=n[d+4>>2],ws(m,B)|0)||(l=s+348+(c<<3)|0),n[s+992+(c<<2)>>2]=l,c=c+1|0;while((c|0)!=2);C=k}function ts(s,l,c){s=s|0,l=l|0,c=y(c);var f=0;switch(s=n[s+992+(n[976+(l<<2)>>2]<<2)>>2]|0,n[s+4>>2]|0){case 0:case 3:{s=0;break}case 1:{y(h[s>>2])>2])>2]|0){case 2:{l=y(y(y(h[s>>2])*l)/y(100));break}case 1:{l=y(h[s>>2]);break}default:l=y(Ae)}return y(l)}function yp(s,l,c,f,d){s=s|0,l=l|0,c=y(c),f=y(f),d=y(d);var m=0,B=Ze;l=n[s+944>>2]|0?l:1,m=fr(n[s+4>>2]|0,l)|0,l=Cw(m,l)|0,c=y(Mm(s,m,c)),f=y(Mm(s,l,f)),B=y(c+y(V(s,m,d))),h[s+400+(n[1040+(m<<2)>>2]<<2)>>2]=B,c=y(c+y(re(s,m,d))),h[s+400+(n[1e3+(m<<2)>>2]<<2)>>2]=c,c=y(f+y(V(s,l,d))),h[s+400+(n[1040+(l<<2)>>2]<<2)>>2]=c,d=y(f+y(re(s,l,d))),h[s+400+(n[1e3+(l<<2)>>2]<<2)>>2]=d}function Dc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=y(f);var d=0,m=0,B=Ze,k=Ze,Q=0,O=0,M=Ze,q=0,se=Ze,Ge=Ze,Oe=Ze,Fe=Ze;if(l!=y(0)&&(d=s+400|0,Fe=y(h[d>>2]),m=s+404|0,Oe=y(h[m>>2]),q=s+416|0,Ge=y(h[q>>2]),O=s+420|0,B=y(h[O>>2]),se=y(Fe+c),M=y(Oe+f),f=y(se+Ge),k=y(M+B),Q=(n[s+988>>2]|0)==1,h[d>>2]=y(Go(Fe,l,0,Q)),h[m>>2]=y(Go(Oe,l,0,Q)),c=y(kT(y(Ge*l),y(1))),Ii(c,y(0))|0?m=0:m=(Ii(c,y(1))|0)^1,c=y(kT(y(B*l),y(1))),Ii(c,y(0))|0?d=0:d=(Ii(c,y(1))|0)^1,Fe=y(Go(f,l,Q&m,Q&(m^1))),h[q>>2]=y(Fe-y(Go(se,l,0,Q))),Fe=y(Go(k,l,Q&d,Q&(d^1))),h[O>>2]=y(Fe-y(Go(M,l,0,Q))),m=(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2,m|0)){d=0;do Dc(gs(s,d)|0,l,se,M),d=d+1|0;while((d|0)!=(m|0))}}function Ew(s,l,c,f,d){switch(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,c|0){case 5:case 0:{s=a7(n[489]|0,f,d)|0;break}default:s=t3e(f,d)|0}return s|0}function yg(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;d=C,C=C+16|0,m=d,n[m>>2]=f,Eg(s,0,l,c,m),C=d}function Eg(s,l,c,f,d){if(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,s=s|0?s:956,x7[n[s+8>>2]&1](s,l,c,f,d)|0,(c|0)==5)Tt();else return}function Ga(s,l,c){s=s|0,l=l|0,c=c|0,o[s+l>>0]=c&1}function Fm(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(Cg(s,f),Qt(s,n[l>>2]|0,n[c>>2]|0,f))}function Cg(s,l){s=s|0,l=l|0;var c=0;if((N(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function Qt(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function N(s){return s=s|0,1073741823}function V(s,l,c){return s=s|0,l=l|0,c=y(c),he(l)|0&&(n[s+96>>2]|0)!=0?s=s+92|0:s=Fn(s+60|0,n[1040+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function re(s,l,c){return s=s|0,l=l|0,c=y(c),he(l)|0&&(n[s+104>>2]|0)!=0?s=s+100|0:s=Fn(s+60|0,n[1e3+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function he(s){return s=s|0,(s|1|0)==3|0}function ze(s,l){return s=s|0,l=y(l),(n[s+4>>2]|0)==3?l=y(0):l=y(Gr(s,l)),y(l)}function mt(s,l){return s=s|0,l=l|0,s=n[s>>2]|0,((s|0)==0?(l|0)>1?l:1:s)|0}function fr(s,l){s=s|0,l=l|0;var c=0;e:do if((l|0)==2){switch(s|0){case 2:{s=3;break e}case 3:break;default:{c=4;break e}}s=2}else c=4;while(0);return s|0}function Cr(s,l){s=s|0,l=l|0;var c=Ze;return he(l)|0&&(n[s+312>>2]|0)!=0&&(c=y(h[s+308>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1040+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function yn(s,l){s=s|0,l=l|0;var c=Ze;return he(l)|0&&(n[s+320>>2]|0)!=0&&(c=y(h[s+316>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1e3+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return he(l)|0&&(n[s+240>>2]|0)!=0&&(f=y(Gr(s+236|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1040+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Mi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return he(l)|0&&(n[s+248>>2]|0)!=0&&(f=y(Gr(s+244|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1e3+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function wg(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,O=Ze,M=Ze,q=Ze,se=Ze,Ge=0,Oe=0,Fe=0;Fe=C,C=C+16|0,Ge=Fe,Oe=s+964|0,Un(s,(n[Oe>>2]|0)!=0,3519),k=y(En(s,2,l)),Q=y(En(s,0,l)),O=y(ln(s,2,l)),M=y(ln(s,0,l)),_t(l)|0?q=l:q=y(_n(y(0),y(y(l-O)-k))),_t(c)|0?se=c:se=y(_n(y(0),y(y(c-M)-Q))),(f|0)==1&(d|0)==1?(h[s+908>>2]=y(Bi(s,2,y(l-O),m,m)),l=y(Bi(s,0,y(c-M),B,m))):(b7[n[Oe>>2]&1](Ge,s,q,f,se,d),q=y(k+y(h[Ge>>2])),se=y(l-O),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?q:se,m,m)),se=y(Q+y(h[Ge+4>>2])),l=y(c-M),l=y(Bi(s,0,(d|2|0)==2?se:l,B,m))),h[s+912>>2]=l,C=Fe}function Gv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,O=Ze,M=Ze;O=y(En(s,2,m)),k=y(En(s,0,m)),M=y(ln(s,2,m)),Q=y(ln(s,0,m)),l=y(l-M),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?O:l,m,m)),c=y(c-Q),h[s+912>>2]=y(Bi(s,0,(d|2|0)==2?k:c,B,m))}function Yv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=0,Q=Ze,O=Ze;return k=(f|0)==2,!(l<=y(0)&k)&&!(c<=y(0)&(d|0)==2)&&!((f|0)==1&(d|0)==1)?s=0:(Q=y(ln(s,0,m)),O=y(ln(s,2,m)),k=l>2]=y(Bi(s,2,k?y(0):l,m,m)),l=y(c-Q),k=c>2]=y(Bi(s,0,k?y(0):l,B,m)),s=1),s|0}function Cw(s,l){return s=s|0,l=l|0,OA(s)|0?s=fr(2,l)|0:s=0,s|0}function Ep(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(oi(s,l,c)),y(c+y(Cr(s,l)))}function ww(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(Mi(s,l,c)),y(c+y(yn(s,l)))}function En(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(Ep(s,l,c)),y(f+y(ww(s,l,c)))}function Tm(s){return s=s|0,n[s+24>>2]|0?s=0:y(rs(s))!=y(0)?s=1:s=y(js(s))!=y(0),s|0}function rs(s){s=s|0;var l=Ze;if(n[s+944>>2]|0){if(l=y(h[s+44>>2]),_t(l)|0)return l=y(h[s+40>>2]),s=l>y(0)&((_t(l)|0)^1),y(s?l:y(0))}else l=y(0);return y(l)}function js(s){s=s|0;var l=Ze,c=0,f=Ze;do if(n[s+944>>2]|0){if(l=y(h[s+48>>2]),_t(l)|0){if(c=o[(n[s+976>>2]|0)+2>>0]|0,c<<24>>24==0&&(f=y(h[s+40>>2]),f>24?y(1):y(0)}}else l=y(0);while(0);return y(l)}function Bu(s){s=s|0;var l=0,c=0;if(zm(s+400|0,0,540)|0,o[s+985>>0]=1,$(s),c=wi(s)|0,c|0){l=s+948|0,s=0;do Bu(n[(n[l>>2]|0)+(s<<2)>>2]|0),s=s+1|0;while((s|0)!=(c|0))}}function Rm(s,l,c,f,d,m,B,k,Q,O){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=y(m),B=y(B),k=k|0,Q=Q|0,O=O|0;var M=0,q=Ze,se=0,Ge=0,Oe=Ze,Fe=Ze,et=0,Xe=Ze,at=0,Ue=Ze,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0,go=0;bn=C,C=C+16|0,Or=bn+12|0,or=bn+8|0,Xt=bn+4|0,Pr=bn,ir=fr(n[s+4>>2]|0,Q)|0,qe=he(ir)|0,q=y(Gr(Iw(l)|0,qe?m:B)),Lt=ts(l,2,m)|0,Nr=ts(l,0,B)|0;do if(!(_t(q)|0)&&!(_t(qe?c:d)|0)){if(M=l+504|0,!(_t(y(h[M>>2]))|0)&&(!(Bw(n[l+976>>2]|0,0)|0)||(n[l+500>>2]|0)==(n[2278]|0)))break;h[M>>2]=y(_n(q,y(En(l,ir,m))))}else se=7;while(0);do if((se|0)==7){if(at=qe^1,!(at|Lt^1)){B=y(Gr(n[l+992>>2]|0,m)),h[l+504>>2]=y(_n(B,y(En(l,2,m))));break}if(!(qe|Nr^1)){B=y(Gr(n[l+996>>2]|0,B)),h[l+504>>2]=y(_n(B,y(En(l,0,m))));break}h[Or>>2]=y(Ae),h[or>>2]=y(Ae),n[Xt>>2]=0,n[Pr>>2]=0,Xe=y(ln(l,2,m)),Ue=y(ln(l,0,m)),Lt?(Oe=y(Xe+y(Gr(n[l+992>>2]|0,m))),h[Or>>2]=Oe,n[Xt>>2]=1,Ge=1):(Ge=0,Oe=y(Ae)),Nr?(q=y(Ue+y(Gr(n[l+996>>2]|0,B))),h[or>>2]=q,n[Pr>>2]=1,M=1):(M=0,q=y(Ae)),se=n[s+32>>2]|0,qe&(se|0)==2?se=2:_t(Oe)|0&&!(_t(c)|0)&&(h[Or>>2]=c,n[Xt>>2]=2,Ge=2,Oe=c),!((se|0)==2&at)&&_t(q)|0&&!(_t(d)|0)&&(h[or>>2]=d,n[Pr>>2]=2,M=2,q=d),Fe=y(h[l+396>>2]),et=_t(Fe)|0;do if(et)se=Ge;else{if((Ge|0)==1&at){h[or>>2]=y(y(Oe-Xe)/Fe),n[Pr>>2]=1,M=1,se=1;break}qe&(M|0)==1?(h[Or>>2]=y(Fe*y(q-Ue)),n[Xt>>2]=1,M=1,se=1):se=Ge}while(0);go=_t(c)|0,Ge=(ha(s,l)|0)!=4,!(qe|Lt|((f|0)!=1|go)|(Ge|(se|0)==1))&&(h[Or>>2]=c,n[Xt>>2]=1,!et)&&(h[or>>2]=y(y(c-Xe)/Fe),n[Pr>>2]=1,M=1),!(Nr|at|((k|0)!=1|(_t(d)|0))|(Ge|(M|0)==1))&&(h[or>>2]=d,n[Pr>>2]=1,!et)&&(h[Or>>2]=y(Fe*y(d-Ue)),n[Xt>>2]=1),yr(l,2,m,m,Xt,Or),yr(l,0,B,m,Pr,or),c=y(h[Or>>2]),d=y(h[or>>2]),fa(l,c,d,Q,n[Xt>>2]|0,n[Pr>>2]|0,m,B,0,3565,O)|0,B=y(h[l+908+(n[976+(ir<<2)>>2]<<2)>>2]),h[l+504>>2]=y(_n(B,y(En(l,ir,m))))}while(0);n[l+500>>2]=n[2278],C=bn}function Bi(s,l,c,f,d){return s=s|0,l=l|0,c=y(c),f=y(f),d=y(d),f=y(MA(s,l,c,f)),y(_n(f,y(En(s,l,d))))}function ha(s,l){return s=s|0,l=l|0,l=l+20|0,l=n[((n[l>>2]|0)==0?s+16|0:l)>>2]|0,(l|0)==5&&OA(n[s+4>>2]|0)|0&&(l=1),l|0}function vl(s,l){return s=s|0,l=l|0,he(l)|0&&(n[s+96>>2]|0)!=0?l=4:l=n[1040+(l<<2)>>2]|0,s+60+(l<<3)|0}function Pc(s,l){return s=s|0,l=l|0,he(l)|0&&(n[s+104>>2]|0)!=0?l=5:l=n[1e3+(l<<2)>>2]|0,s+60+(l<<3)|0}function yr(s,l,c,f,d,m){switch(s=s|0,l=l|0,c=y(c),f=y(f),d=d|0,m=m|0,c=y(Gr(s+380+(n[976+(l<<2)>>2]<<3)|0,c)),c=y(c+y(ln(s,l,f))),n[d>>2]|0){case 2:case 1:{d=_t(c)|0,f=y(h[m>>2]),h[m>>2]=d|f>2]=2,h[m>>2]=c);break}default:}}function gi(s,l){return s=s|0,l=l|0,s=s+132|0,he(l)|0&&(n[(Fn(s,4,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1040+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function Mr(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,he(l)|0&&(f=Fn(s,4,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1040+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function ns(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),f=y(f+y(V(s,l,c))),y(f+y(re(s,l,c)))}function Yi(s){s=s|0;var l=0,c=0,f=0;e:do if(OA(n[s+4>>2]|0)|0)l=0;else if((n[s+16>>2]|0)!=5)if(c=wi(s)|0,!c)l=0;else for(l=0;;){if(f=gs(s,l)|0,(n[f+24>>2]|0)==0&&(n[f+20>>2]|0)==5){l=1;break e}if(l=l+1|0,l>>>0>=c>>>0){l=0;break}}else l=1;while(0);return l|0}function Nm(s,l){s=s|0,l=l|0;var c=Ze;return c=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),c>=y(0)&((_t(c)|0)^1)|0}function Ya(s){s=s|0;var l=Ze,c=0,f=0,d=0,m=0,B=0,k=0,Q=Ze;if(c=n[s+968>>2]|0,c)Q=y(h[s+908>>2]),l=y(h[s+912>>2]),l=y(v7[c&0](s,Q,l)),Un(s,(_t(l)|0)^1,3573);else{m=wi(s)|0;do if(m|0){for(c=0,d=0;;){if(f=gs(s,d)|0,n[f+940>>2]|0){B=8;break}if((n[f+24>>2]|0)!=1)if(k=(ha(s,f)|0)==5,k){c=f;break}else c=(c|0)==0?f:c;if(d=d+1|0,d>>>0>=m>>>0){B=8;break}}if((B|0)==8&&!c)break;return l=y(Ya(c)),y(l+y(h[c+404>>2]))}while(0);l=y(h[s+912>>2])}return y(l)}function MA(s,l,c,f){s=s|0,l=l|0,c=y(c),f=y(f);var d=Ze,m=0;return OA(l)|0?(l=1,m=3):he(l)|0?(l=0,m=3):(f=y(Ae),d=y(Ae)),(m|0)==3&&(d=y(Gr(s+364+(l<<3)|0,f)),f=y(Gr(s+380+(l<<3)|0,f))),m=f=y(0)&((_t(f)|0)^1)),c=m?f:c,m=d>=y(0)&((_t(d)|0)^1)&c>2]|0,m)|0,Oe=Cw(et,m)|0,Fe=he(et)|0,q=y(ln(l,2,c)),se=y(ln(l,0,c)),ts(l,2,c)|0?k=y(q+y(Gr(n[l+992>>2]|0,c))):gi(l,2)|0&&sr(l,2)|0?(k=y(h[s+908>>2]),Q=y(Cr(s,2)),Q=y(k-y(Q+y(yn(s,2)))),k=y(Mr(l,2,c)),k=y(Bi(l,2,y(Q-y(k+y(vu(l,2,c)))),c,c))):k=y(Ae),ts(l,0,d)|0?Q=y(se+y(Gr(n[l+996>>2]|0,d))):gi(l,0)|0&&sr(l,0)|0?(Q=y(h[s+912>>2]),at=y(Cr(s,0)),at=y(Q-y(at+y(yn(s,0)))),Q=y(Mr(l,0,d)),Q=y(Bi(l,0,y(at-y(Q+y(vu(l,0,d)))),d,c))):Q=y(Ae),O=_t(k)|0,M=_t(Q)|0;do if(O^M&&(Ge=y(h[l+396>>2]),!(_t(Ge)|0)))if(O){k=y(q+y(y(Q-se)*Ge));break}else{at=y(se+y(y(k-q)/Ge)),Q=M?at:Q;break}while(0);M=_t(k)|0,O=_t(Q)|0,M|O&&(Ue=(M^1)&1,f=c>y(0)&((f|0)!=0&M),k=Fe?k:f?c:k,fa(l,k,Q,m,Fe?Ue:f?2:Ue,M&(O^1)&1,k,Q,0,3623,B)|0,k=y(h[l+908>>2]),k=y(k+y(ln(l,2,c))),Q=y(h[l+912>>2]),Q=y(Q+y(ln(l,0,c)))),fa(l,k,Q,m,1,1,k,Q,1,3635,B)|0,sr(l,et)|0&&!(gi(l,et)|0)?(Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),at=y(at-y(yn(s,et))),at=y(at-y(re(l,et,c))),at=y(at-y(vu(l,et,Fe?c:d))),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at):Xe=21;do if((Xe|0)==21){if(!(gi(l,et)|0)&&(n[s+8>>2]|0)==1){Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(y(at-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at;break}!(gi(l,et)|0)&&(n[s+8>>2]|0)==2&&(Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at)}while(0);sr(l,Oe)|0&&!(gi(l,Oe)|0)?(Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),at=y(at-y(yn(s,Oe))),at=y(at-y(re(l,Oe,c))),at=y(at-y(vu(l,Oe,Fe?d:c))),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at):Xe=30;do if((Xe|0)==30&&!(gi(l,Oe)|0)){if((ha(s,l)|0)==2){Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(y(at-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at;break}Ue=(ha(s,l)|0)==3,Ue^(n[s+28>>2]|0)==2&&(Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at)}while(0)}function Cp(s,l,c){s=s|0,l=l|0,c=c|0;var f=Ze,d=0;d=n[976+(c<<2)>>2]|0,f=y(h[l+908+(d<<2)>>2]),f=y(y(h[s+908+(d<<2)>>2])-f),f=y(f-y(h[l+400+(n[1040+(c<<2)>>2]<<2)>>2])),h[l+400+(n[1e3+(c<<2)>>2]<<2)>>2]=f}function OA(s){return s=s|0,(s|1|0)==1|0}function Iw(s){s=s|0;var l=Ze;switch(n[s+56>>2]|0){case 0:case 3:{l=y(h[s+40>>2]),l>y(0)&((_t(l)|0)^1)?s=o[(n[s+976>>2]|0)+2>>0]|0?1056:992:s=1056;break}default:s=s+52|0}return s|0}function Bw(s,l){return s=s|0,l=l|0,(o[s+l>>0]|0)!=0|0}function sr(s,l){return s=s|0,l=l|0,s=s+132|0,he(l)|0&&(n[(Fn(s,5,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1e3+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function vu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,he(l)|0&&(f=Fn(s,5,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1e3+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function Mm(s,l,c){return s=s|0,l=l|0,c=y(c),gi(s,l)|0?c=y(Mr(s,l,c)):c=y(-y(vu(s,l,c))),y(c)}function Du(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function wp(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function Ig(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function UA(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function _A(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;if(B=s+4|0,k=n[B>>2]|0,d=k-f|0,m=d>>2,s=l+(m<<2)|0,s>>>0>>0){f=k;do n[f>>2]=n[s>>2],s=s+4|0,f=(n[B>>2]|0)+4|0,n[B>>2]=f;while(s>>>0>>0)}m|0&&Mw(k+(0-m<<2)|0,l|0,d|0)|0}function Bg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return k=l+4|0,Q=n[k>>2]|0,d=n[s>>2]|0,B=c,m=B-d|0,f=Q+(0-(m>>2)<<2)|0,n[k>>2]=f,(m|0)>0&&Dr(f|0,d|0,m|0)|0,d=s+4|0,m=l+8|0,f=(n[d>>2]|0)-B|0,(f|0)>0&&(Dr(n[m>>2]|0,c|0,f|0)|0,n[m>>2]=(n[m>>2]|0)+(f>>>2<<2)),B=n[s>>2]|0,n[s>>2]=n[k>>2],n[k>>2]=B,B=n[d>>2]|0,n[d>>2]=n[m>>2],n[m>>2]=B,B=s+8|0,c=l+12|0,s=n[B>>2]|0,n[B>>2]=n[c>>2],n[c>>2]=s,n[l>>2]=n[k>>2],Q|0}function vw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(B=n[l>>2]|0,m=n[c>>2]|0,(B|0)!=(m|0)){d=s+8|0,c=((m+-4-B|0)>>>2)+1|0,s=B,f=n[d>>2]|0;do n[f>>2]=n[s>>2],f=(n[d>>2]|0)+4|0,n[d>>2]=f,s=s+4|0;while((s|0)!=(m|0));n[l>>2]=B+(c<<2)}}function Om(){dc()}function ga(){var s=0;return s=Vt(4)|0,HA(s),s|0}function HA(s){s=s|0,n[s>>2]=ys()|0}function Sc(s){s=s|0,s|0&&(vg(s),gt(s))}function vg(s){s=s|0,tt(n[s>>2]|0)}function Um(s,l,c){s=s|0,l=l|0,c=c|0,Ga(n[s>>2]|0,l,c)}function fo(s,l){s=s|0,l=y(l),pa(n[s>>2]|0,l)}function Wv(s,l){return s=s|0,l=l|0,Bw(n[s>>2]|0,l)|0}function Dw(){var s=0;return s=Vt(8)|0,Vv(s,0),s|0}function Vv(s,l){s=s|0,l=l|0,l?l=Ci(n[l>>2]|0)|0:l=co()|0,n[s>>2]=l,n[s+4>>2]=0,xi(l,s)}function pF(s){s=s|0;var l=0;return l=Vt(8)|0,Vv(l,s),l|0}function Kv(s){s=s|0,s|0&&(Pu(s),gt(s))}function Pu(s){s=s|0;var l=0;la(n[s>>2]|0),l=s+4|0,s=n[l>>2]|0,n[l>>2]=0,s|0&&(jA(s),gt(s))}function jA(s){s=s|0,qA(s)}function qA(s){s=s|0,s=n[s>>2]|0,s|0&&PA(s|0)}function Pw(s){return s=s|0,jo(s)|0}function _m(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),_s(n[s>>2]|0)}function hF(s,l){s=s|0,l=l|0,Zr(n[s>>2]|0,n[l>>2]|0)}function gF(s,l){s=s|0,l=l|0,ca(n[s>>2]|0,l)}function Jv(s,l,c){s=s|0,l=l|0,c=+c,yu(n[s>>2]|0,l,y(c))}function zv(s,l,c){s=s|0,l=l|0,c=+c,Es(n[s>>2]|0,l,y(c))}function Sw(s,l){s=s|0,l=l|0,gu(n[s>>2]|0,l)}function Su(s,l){s=s|0,l=l|0,du(n[s>>2]|0,l)}function dF(s,l){s=s|0,l=l|0,QA(n[s>>2]|0,l)}function mF(s,l){s=s|0,l=l|0,bA(n[s>>2]|0,l)}function Ip(s,l){s=s|0,l=l|0,yc(n[s>>2]|0,l)}function yF(s,l){s=s|0,l=l|0,up(n[s>>2]|0,l)}function Xv(s,l,c){s=s|0,l=l|0,c=+c,Cc(n[s>>2]|0,l,y(c))}function GA(s,l,c){s=s|0,l=l|0,c=+c,G(n[s>>2]|0,l,y(c))}function EF(s,l){s=s|0,l=l|0,wl(n[s>>2]|0,l)}function CF(s,l){s=s|0,l=l|0,og(n[s>>2]|0,l)}function Zv(s,l){s=s|0,l=l|0,Ap(n[s>>2]|0,l)}function xw(s,l){s=s|0,l=+l,FA(n[s>>2]|0,y(l))}function bw(s,l){s=s|0,l=+l,Ha(n[s>>2]|0,y(l))}function wF(s,l){s=s|0,l=+l,Gi(n[s>>2]|0,y(l))}function IF(s,l){s=s|0,l=+l,Hs(n[s>>2]|0,y(l))}function Dl(s,l){s=s|0,l=+l,mu(n[s>>2]|0,y(l))}function kw(s,l){s=s|0,l=+l,mw(n[s>>2]|0,y(l))}function BF(s,l){s=s|0,l=+l,TA(n[s>>2]|0,y(l))}function YA(s){s=s|0,fp(n[s>>2]|0)}function Hm(s,l){s=s|0,l=+l,Cs(n[s>>2]|0,y(l))}function xu(s,l){s=s|0,l=+l,cg(n[s>>2]|0,y(l))}function Qw(s){s=s|0,ug(n[s>>2]|0)}function Fw(s,l){s=s|0,l=+l,pp(n[s>>2]|0,y(l))}function vF(s,l){s=s|0,l=+l,Ic(n[s>>2]|0,y(l))}function $v(s,l){s=s|0,l=+l,Sm(n[s>>2]|0,y(l))}function WA(s,l){s=s|0,l=+l,fg(n[s>>2]|0,y(l))}function eD(s,l){s=s|0,l=+l,Cu(n[s>>2]|0,y(l))}function jm(s,l){s=s|0,l=+l,xm(n[s>>2]|0,y(l))}function tD(s,l){s=s|0,l=+l,wu(n[s>>2]|0,y(l))}function rD(s,l){s=s|0,l=+l,yw(n[s>>2]|0,y(l))}function qm(s,l){s=s|0,l=+l,Aa(n[s>>2]|0,y(l))}function nD(s,l,c){s=s|0,l=l|0,c=+c,Eu(n[s>>2]|0,l,y(c))}function DF(s,l,c){s=s|0,l=l|0,c=+c,bi(n[s>>2]|0,l,y(c))}function P(s,l,c){s=s|0,l=l|0,c=+c,wc(n[s>>2]|0,l,y(c))}function D(s){return s=s|0,sg(n[s>>2]|0)|0}function R(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Ec(d,n[l>>2]|0,c),j(s,d),C=f}function j(s,l){s=s|0,l=l|0,Y(s,n[l+4>>2]|0,+y(h[l>>2]))}function Y(s,l,c){s=s|0,l=l|0,c=+c,n[s>>2]=l,E[s+8>>3]=c}function fe(s){return s=s|0,ig(n[s>>2]|0)|0}function ve(s){return s=s|0,uo(n[s>>2]|0)|0}function vt(s){return s=s|0,mc(n[s>>2]|0)|0}function wt(s){return s=s|0,kA(n[s>>2]|0)|0}function bt(s){return s=s|0,Pm(n[s>>2]|0)|0}function _r(s){return s=s|0,ng(n[s>>2]|0)|0}function is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Dt(d,n[l>>2]|0,c),j(s,d),C=f}function di(s){return s=s|0,$n(n[s>>2]|0)|0}function po(s){return s=s|0,ag(n[s>>2]|0)|0}function VA(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,ua(f,n[l>>2]|0),j(s,f),C=c}function Yo(s){return s=s|0,+ +y(qi(n[s>>2]|0))}function rt(s){return s=s|0,+ +y(es(n[s>>2]|0))}function Ke(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Br(f,n[l>>2]|0),j(s,f),C=c}function At(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ag(f,n[l>>2]|0),j(s,f),C=c}function Wt(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ct(f,n[l>>2]|0),j(s,f),C=c}function vr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,pg(f,n[l>>2]|0),j(s,f),C=c}function Sn(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,hg(f,n[l>>2]|0),j(s,f),C=c}function Fr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,bm(f,n[l>>2]|0),j(s,f),C=c}function xn(s){return s=s|0,+ +y(Bc(n[s>>2]|0))}function ai(s,l){return s=s|0,l=l|0,+ +y(lg(n[s>>2]|0,l))}function en(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,ct(d,n[l>>2]|0,c),j(s,d),C=f}function ho(s,l,c){s=s|0,l=l|0,c=c|0,nr(n[s>>2]|0,n[l>>2]|0,c)}function PF(s,l){s=s|0,l=l|0,ms(n[s>>2]|0,n[l>>2]|0)}function sve(s){return s=s|0,wi(n[s>>2]|0)|0}function ove(s){return s=s|0,s=pt(n[s>>2]|0)|0,s?s=Pw(s)|0:s=0,s|0}function ave(s,l){return s=s|0,l=l|0,s=gs(n[s>>2]|0,l)|0,s?s=Pw(s)|0:s=0,s|0}function lve(s,l){s=s|0,l=l|0;var c=0,f=0;f=Vt(4)|0,$G(f,l),c=s+4|0,l=n[c>>2]|0,n[c>>2]=f,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,1)}function $G(s,l){s=s|0,l=l|0,Cve(s,l)}function cve(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,uve(k,jo(l)|0,+c,f,+d,m),h[s>>2]=y(+E[k>>3]),h[s+4>>2]=y(+E[k+8>>3]),C=B}function uve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0,k=0,Q=0,O=0,M=0;B=C,C=C+32|0,M=B+8|0,O=B+20|0,Q=B,k=B+16|0,E[M>>3]=c,n[O>>2]=f,E[Q>>3]=d,n[k>>2]=m,Ave(s,n[l+4>>2]|0,M,O,Q,k),C=B}function Ave(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,Va(k),l=da(l)|0,fve(s,l,+E[c>>3],n[f>>2]|0,+E[d>>3],n[m>>2]|0),Ka(k),C=B}function da(s){return s=s|0,n[s>>2]|0}function fve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0;B=Pl(pve()|0)|0,c=+KA(c),f=SF(f)|0,d=+KA(d),hve(s,hi(0,B|0,l|0,+c,f|0,+d,SF(m)|0)|0)}function pve(){var s=0;return o[7608]|0||(yve(9120),s=7608,n[s>>2]=1,n[s+4>>2]=0),9120}function Pl(s){return s=s|0,n[s+8>>2]|0}function KA(s){return s=+s,+ +xF(s)}function SF(s){return s=s|0,t5(s)|0}function hve(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=l,f&1?(gve(c,0),ii(f|0,c|0)|0,dve(s,c),mve(c)):(n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]),C=d}function gve(s,l){s=s|0,l=l|0,e5(s,l),n[s+8>>2]=0,o[s+24>>0]=0}function dve(s,l){s=s|0,l=l|0,l=l+8|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]}function mve(s){s=s|0,o[s+24>>0]=0}function e5(s,l){s=s|0,l=l|0,n[s>>2]=l}function t5(s){return s=s|0,s|0}function xF(s){return s=+s,+s}function yve(s){s=s|0,Sl(s,Eve()|0,4)}function Eve(){return 1064}function Sl(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=cp(l|0,c+1|0)|0}function Cve(s,l){s=s|0,l=l|0,l=n[l>>2]|0,n[s>>2]=l,yl(l|0)}function wve(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,0)}function Ive(s){s=s|0,Rt(n[s>>2]|0)}function Bve(s){return s=s|0,er(n[s>>2]|0)|0}function vve(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,vc(n[s>>2]|0,y(l),y(c),f)}function Dve(s){return s=s|0,+ +y(Il(n[s>>2]|0))}function Pve(s){return s=s|0,+ +y(gg(n[s>>2]|0))}function Sve(s){return s=s|0,+ +y(Iu(n[s>>2]|0))}function xve(s){return s=s|0,+ +y(RA(n[s>>2]|0))}function bve(s){return s=s|0,+ +y(hp(n[s>>2]|0))}function kve(s){return s=s|0,+ +y(ja(n[s>>2]|0))}function Qve(s,l){s=s|0,l=l|0,E[s>>3]=+y(Il(n[l>>2]|0)),E[s+8>>3]=+y(gg(n[l>>2]|0)),E[s+16>>3]=+y(Iu(n[l>>2]|0)),E[s+24>>3]=+y(RA(n[l>>2]|0)),E[s+32>>3]=+y(hp(n[l>>2]|0)),E[s+40>>3]=+y(ja(n[l>>2]|0))}function Fve(s,l){return s=s|0,l=l|0,+ +y(dg(n[s>>2]|0,l))}function Tve(s,l){return s=s|0,l=l|0,+ +y(gp(n[s>>2]|0,l))}function Rve(s,l){return s=s|0,l=l|0,+ +y(qo(n[s>>2]|0,l))}function Nve(){return Pn()|0}function Lve(){Mve(),Ove(),Uve(),_ve(),Hve(),jve()}function Mve(){HNe(11713,4938,1)}function Ove(){oNe(10448)}function Uve(){HRe(10408)}function _ve(){uRe(10324)}function Hve(){yFe(10096)}function jve(){qve(9132)}function qve(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0,go=0,mo=0,yo=0,ya=0,Qp=0,Fp=0,xl=0,Tp=0,Fu=0,Tu=0,Rp=0,Np=0,Lp=0,Xr=0,bl=0,Mp=0,bc=0,Op=0,Up=0,Ru=0,Nu=0,kc=0,qs=0,za=0,Wo=0,kl=0,rf=0,nf=0,Lu=0,sf=0,of=0,Gs=0,vs=0,Ql=0,Tn=0,af=0,Eo=0,Qc=0,Co=0,Fc=0,lf=0,cf=0,Tc=0,Ys=0,Fl=0,uf=0,Af=0,ff=0,br=0,Jn=0,Ds=0,wo=0,Ws=0,Tr=0,ur=0,Tl=0;l=C,C=C+672|0,c=l+656|0,Tl=l+648|0,ur=l+640|0,Tr=l+632|0,Ws=l+624|0,wo=l+616|0,Ds=l+608|0,Jn=l+600|0,br=l+592|0,ff=l+584|0,Af=l+576|0,uf=l+568|0,Fl=l+560|0,Ys=l+552|0,Tc=l+544|0,cf=l+536|0,lf=l+528|0,Fc=l+520|0,Co=l+512|0,Qc=l+504|0,Eo=l+496|0,af=l+488|0,Tn=l+480|0,Ql=l+472|0,vs=l+464|0,Gs=l+456|0,of=l+448|0,sf=l+440|0,Lu=l+432|0,nf=l+424|0,rf=l+416|0,kl=l+408|0,Wo=l+400|0,za=l+392|0,qs=l+384|0,kc=l+376|0,Nu=l+368|0,Ru=l+360|0,Up=l+352|0,Op=l+344|0,bc=l+336|0,Mp=l+328|0,bl=l+320|0,Xr=l+312|0,Lp=l+304|0,Np=l+296|0,Rp=l+288|0,Tu=l+280|0,Fu=l+272|0,Tp=l+264|0,xl=l+256|0,Fp=l+248|0,Qp=l+240|0,ya=l+232|0,yo=l+224|0,mo=l+216|0,go=l+208|0,bn=l+200|0,ir=l+192|0,Nr=l+184|0,Pr=l+176|0,Xt=l+168|0,or=l+160|0,Or=l+152|0,Lt=l+144|0,qe=l+136|0,Ue=l+128|0,at=l+120|0,Xe=l+112|0,et=l+104|0,Fe=l+96|0,Oe=l+88|0,Ge=l+80|0,se=l+72|0,q=l+64|0,M=l+56|0,O=l+48|0,Q=l+40|0,k=l+32|0,B=l+24|0,m=l+16|0,d=l+8|0,f=l,Gve(s,3646),Yve(s,3651,2)|0,Wve(s,3665,2)|0,Vve(s,3682,18)|0,n[Tl>>2]=19,n[Tl+4>>2]=0,n[c>>2]=n[Tl>>2],n[c+4>>2]=n[Tl+4>>2],Tw(s,3690,c)|0,n[ur>>2]=1,n[ur+4>>2]=0,n[c>>2]=n[ur>>2],n[c+4>>2]=n[ur+4>>2],Kve(s,3696,c)|0,n[Tr>>2]=2,n[Tr+4>>2]=0,n[c>>2]=n[Tr>>2],n[c+4>>2]=n[Tr+4>>2],bu(s,3706,c)|0,n[Ws>>2]=1,n[Ws+4>>2]=0,n[c>>2]=n[Ws>>2],n[c+4>>2]=n[Ws+4>>2],Dg(s,3722,c)|0,n[wo>>2]=2,n[wo+4>>2]=0,n[c>>2]=n[wo>>2],n[c+4>>2]=n[wo+4>>2],Dg(s,3734,c)|0,n[Ds>>2]=3,n[Ds+4>>2]=0,n[c>>2]=n[Ds>>2],n[c+4>>2]=n[Ds+4>>2],bu(s,3753,c)|0,n[Jn>>2]=4,n[Jn+4>>2]=0,n[c>>2]=n[Jn>>2],n[c+4>>2]=n[Jn+4>>2],bu(s,3769,c)|0,n[br>>2]=5,n[br+4>>2]=0,n[c>>2]=n[br>>2],n[c+4>>2]=n[br+4>>2],bu(s,3783,c)|0,n[ff>>2]=6,n[ff+4>>2]=0,n[c>>2]=n[ff>>2],n[c+4>>2]=n[ff+4>>2],bu(s,3796,c)|0,n[Af>>2]=7,n[Af+4>>2]=0,n[c>>2]=n[Af>>2],n[c+4>>2]=n[Af+4>>2],bu(s,3813,c)|0,n[uf>>2]=8,n[uf+4>>2]=0,n[c>>2]=n[uf>>2],n[c+4>>2]=n[uf+4>>2],bu(s,3825,c)|0,n[Fl>>2]=3,n[Fl+4>>2]=0,n[c>>2]=n[Fl>>2],n[c+4>>2]=n[Fl+4>>2],Dg(s,3843,c)|0,n[Ys>>2]=4,n[Ys+4>>2]=0,n[c>>2]=n[Ys>>2],n[c+4>>2]=n[Ys+4>>2],Dg(s,3853,c)|0,n[Tc>>2]=9,n[Tc+4>>2]=0,n[c>>2]=n[Tc>>2],n[c+4>>2]=n[Tc+4>>2],bu(s,3870,c)|0,n[cf>>2]=10,n[cf+4>>2]=0,n[c>>2]=n[cf>>2],n[c+4>>2]=n[cf+4>>2],bu(s,3884,c)|0,n[lf>>2]=11,n[lf+4>>2]=0,n[c>>2]=n[lf>>2],n[c+4>>2]=n[lf+4>>2],bu(s,3896,c)|0,n[Fc>>2]=1,n[Fc+4>>2]=0,n[c>>2]=n[Fc>>2],n[c+4>>2]=n[Fc+4>>2],Is(s,3907,c)|0,n[Co>>2]=2,n[Co+4>>2]=0,n[c>>2]=n[Co>>2],n[c+4>>2]=n[Co+4>>2],Is(s,3915,c)|0,n[Qc>>2]=3,n[Qc+4>>2]=0,n[c>>2]=n[Qc>>2],n[c+4>>2]=n[Qc+4>>2],Is(s,3928,c)|0,n[Eo>>2]=4,n[Eo+4>>2]=0,n[c>>2]=n[Eo>>2],n[c+4>>2]=n[Eo+4>>2],Is(s,3948,c)|0,n[af>>2]=5,n[af+4>>2]=0,n[c>>2]=n[af>>2],n[c+4>>2]=n[af+4>>2],Is(s,3960,c)|0,n[Tn>>2]=6,n[Tn+4>>2]=0,n[c>>2]=n[Tn>>2],n[c+4>>2]=n[Tn+4>>2],Is(s,3974,c)|0,n[Ql>>2]=7,n[Ql+4>>2]=0,n[c>>2]=n[Ql>>2],n[c+4>>2]=n[Ql+4>>2],Is(s,3983,c)|0,n[vs>>2]=20,n[vs+4>>2]=0,n[c>>2]=n[vs>>2],n[c+4>>2]=n[vs+4>>2],Tw(s,3999,c)|0,n[Gs>>2]=8,n[Gs+4>>2]=0,n[c>>2]=n[Gs>>2],n[c+4>>2]=n[Gs+4>>2],Is(s,4012,c)|0,n[of>>2]=9,n[of+4>>2]=0,n[c>>2]=n[of>>2],n[c+4>>2]=n[of+4>>2],Is(s,4022,c)|0,n[sf>>2]=21,n[sf+4>>2]=0,n[c>>2]=n[sf>>2],n[c+4>>2]=n[sf+4>>2],Tw(s,4039,c)|0,n[Lu>>2]=10,n[Lu+4>>2]=0,n[c>>2]=n[Lu>>2],n[c+4>>2]=n[Lu+4>>2],Is(s,4053,c)|0,n[nf>>2]=11,n[nf+4>>2]=0,n[c>>2]=n[nf>>2],n[c+4>>2]=n[nf+4>>2],Is(s,4065,c)|0,n[rf>>2]=12,n[rf+4>>2]=0,n[c>>2]=n[rf>>2],n[c+4>>2]=n[rf+4>>2],Is(s,4084,c)|0,n[kl>>2]=13,n[kl+4>>2]=0,n[c>>2]=n[kl>>2],n[c+4>>2]=n[kl+4>>2],Is(s,4097,c)|0,n[Wo>>2]=14,n[Wo+4>>2]=0,n[c>>2]=n[Wo>>2],n[c+4>>2]=n[Wo+4>>2],Is(s,4117,c)|0,n[za>>2]=15,n[za+4>>2]=0,n[c>>2]=n[za>>2],n[c+4>>2]=n[za+4>>2],Is(s,4129,c)|0,n[qs>>2]=16,n[qs+4>>2]=0,n[c>>2]=n[qs>>2],n[c+4>>2]=n[qs+4>>2],Is(s,4148,c)|0,n[kc>>2]=17,n[kc+4>>2]=0,n[c>>2]=n[kc>>2],n[c+4>>2]=n[kc+4>>2],Is(s,4161,c)|0,n[Nu>>2]=18,n[Nu+4>>2]=0,n[c>>2]=n[Nu>>2],n[c+4>>2]=n[Nu+4>>2],Is(s,4181,c)|0,n[Ru>>2]=5,n[Ru+4>>2]=0,n[c>>2]=n[Ru>>2],n[c+4>>2]=n[Ru+4>>2],Dg(s,4196,c)|0,n[Up>>2]=6,n[Up+4>>2]=0,n[c>>2]=n[Up>>2],n[c+4>>2]=n[Up+4>>2],Dg(s,4206,c)|0,n[Op>>2]=7,n[Op+4>>2]=0,n[c>>2]=n[Op>>2],n[c+4>>2]=n[Op+4>>2],Dg(s,4217,c)|0,n[bc>>2]=3,n[bc+4>>2]=0,n[c>>2]=n[bc>>2],n[c+4>>2]=n[bc+4>>2],JA(s,4235,c)|0,n[Mp>>2]=1,n[Mp+4>>2]=0,n[c>>2]=n[Mp>>2],n[c+4>>2]=n[Mp+4>>2],bF(s,4251,c)|0,n[bl>>2]=4,n[bl+4>>2]=0,n[c>>2]=n[bl>>2],n[c+4>>2]=n[bl+4>>2],JA(s,4263,c)|0,n[Xr>>2]=5,n[Xr+4>>2]=0,n[c>>2]=n[Xr>>2],n[c+4>>2]=n[Xr+4>>2],JA(s,4279,c)|0,n[Lp>>2]=6,n[Lp+4>>2]=0,n[c>>2]=n[Lp>>2],n[c+4>>2]=n[Lp+4>>2],JA(s,4293,c)|0,n[Np>>2]=7,n[Np+4>>2]=0,n[c>>2]=n[Np>>2],n[c+4>>2]=n[Np+4>>2],JA(s,4306,c)|0,n[Rp>>2]=8,n[Rp+4>>2]=0,n[c>>2]=n[Rp>>2],n[c+4>>2]=n[Rp+4>>2],JA(s,4323,c)|0,n[Tu>>2]=9,n[Tu+4>>2]=0,n[c>>2]=n[Tu>>2],n[c+4>>2]=n[Tu+4>>2],JA(s,4335,c)|0,n[Fu>>2]=2,n[Fu+4>>2]=0,n[c>>2]=n[Fu>>2],n[c+4>>2]=n[Fu+4>>2],bF(s,4353,c)|0,n[Tp>>2]=12,n[Tp+4>>2]=0,n[c>>2]=n[Tp>>2],n[c+4>>2]=n[Tp+4>>2],Pg(s,4363,c)|0,n[xl>>2]=1,n[xl+4>>2]=0,n[c>>2]=n[xl>>2],n[c+4>>2]=n[xl+4>>2],zA(s,4376,c)|0,n[Fp>>2]=2,n[Fp+4>>2]=0,n[c>>2]=n[Fp>>2],n[c+4>>2]=n[Fp+4>>2],zA(s,4388,c)|0,n[Qp>>2]=13,n[Qp+4>>2]=0,n[c>>2]=n[Qp>>2],n[c+4>>2]=n[Qp+4>>2],Pg(s,4402,c)|0,n[ya>>2]=14,n[ya+4>>2]=0,n[c>>2]=n[ya>>2],n[c+4>>2]=n[ya+4>>2],Pg(s,4411,c)|0,n[yo>>2]=15,n[yo+4>>2]=0,n[c>>2]=n[yo>>2],n[c+4>>2]=n[yo+4>>2],Pg(s,4421,c)|0,n[mo>>2]=16,n[mo+4>>2]=0,n[c>>2]=n[mo>>2],n[c+4>>2]=n[mo+4>>2],Pg(s,4433,c)|0,n[go>>2]=17,n[go+4>>2]=0,n[c>>2]=n[go>>2],n[c+4>>2]=n[go+4>>2],Pg(s,4446,c)|0,n[bn>>2]=18,n[bn+4>>2]=0,n[c>>2]=n[bn>>2],n[c+4>>2]=n[bn+4>>2],Pg(s,4458,c)|0,n[ir>>2]=3,n[ir+4>>2]=0,n[c>>2]=n[ir>>2],n[c+4>>2]=n[ir+4>>2],zA(s,4471,c)|0,n[Nr>>2]=1,n[Nr+4>>2]=0,n[c>>2]=n[Nr>>2],n[c+4>>2]=n[Nr+4>>2],iD(s,4486,c)|0,n[Pr>>2]=10,n[Pr+4>>2]=0,n[c>>2]=n[Pr>>2],n[c+4>>2]=n[Pr+4>>2],JA(s,4496,c)|0,n[Xt>>2]=11,n[Xt+4>>2]=0,n[c>>2]=n[Xt>>2],n[c+4>>2]=n[Xt+4>>2],JA(s,4508,c)|0,n[or>>2]=3,n[or+4>>2]=0,n[c>>2]=n[or>>2],n[c+4>>2]=n[or+4>>2],bF(s,4519,c)|0,n[Or>>2]=4,n[Or+4>>2]=0,n[c>>2]=n[Or>>2],n[c+4>>2]=n[Or+4>>2],Jve(s,4530,c)|0,n[Lt>>2]=19,n[Lt+4>>2]=0,n[c>>2]=n[Lt>>2],n[c+4>>2]=n[Lt+4>>2],zve(s,4542,c)|0,n[qe>>2]=12,n[qe+4>>2]=0,n[c>>2]=n[qe>>2],n[c+4>>2]=n[qe+4>>2],Xve(s,4554,c)|0,n[Ue>>2]=13,n[Ue+4>>2]=0,n[c>>2]=n[Ue>>2],n[c+4>>2]=n[Ue+4>>2],Zve(s,4568,c)|0,n[at>>2]=2,n[at+4>>2]=0,n[c>>2]=n[at>>2],n[c+4>>2]=n[at+4>>2],$ve(s,4578,c)|0,n[Xe>>2]=20,n[Xe+4>>2]=0,n[c>>2]=n[Xe>>2],n[c+4>>2]=n[Xe+4>>2],eDe(s,4587,c)|0,n[et>>2]=22,n[et+4>>2]=0,n[c>>2]=n[et>>2],n[c+4>>2]=n[et+4>>2],Tw(s,4602,c)|0,n[Fe>>2]=23,n[Fe+4>>2]=0,n[c>>2]=n[Fe>>2],n[c+4>>2]=n[Fe+4>>2],Tw(s,4619,c)|0,n[Oe>>2]=14,n[Oe+4>>2]=0,n[c>>2]=n[Oe>>2],n[c+4>>2]=n[Oe+4>>2],tDe(s,4629,c)|0,n[Ge>>2]=1,n[Ge+4>>2]=0,n[c>>2]=n[Ge>>2],n[c+4>>2]=n[Ge+4>>2],rDe(s,4637,c)|0,n[se>>2]=4,n[se+4>>2]=0,n[c>>2]=n[se>>2],n[c+4>>2]=n[se+4>>2],zA(s,4653,c)|0,n[q>>2]=5,n[q+4>>2]=0,n[c>>2]=n[q>>2],n[c+4>>2]=n[q+4>>2],zA(s,4669,c)|0,n[M>>2]=6,n[M+4>>2]=0,n[c>>2]=n[M>>2],n[c+4>>2]=n[M+4>>2],zA(s,4686,c)|0,n[O>>2]=7,n[O+4>>2]=0,n[c>>2]=n[O>>2],n[c+4>>2]=n[O+4>>2],zA(s,4701,c)|0,n[Q>>2]=8,n[Q+4>>2]=0,n[c>>2]=n[Q>>2],n[c+4>>2]=n[Q+4>>2],zA(s,4719,c)|0,n[k>>2]=9,n[k+4>>2]=0,n[c>>2]=n[k>>2],n[c+4>>2]=n[k+4>>2],zA(s,4736,c)|0,n[B>>2]=21,n[B+4>>2]=0,n[c>>2]=n[B>>2],n[c+4>>2]=n[B+4>>2],nDe(s,4754,c)|0,n[m>>2]=2,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],iD(s,4772,c)|0,n[d>>2]=3,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],iD(s,4790,c)|0,n[f>>2]=4,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],iD(s,4808,c)|0,C=l}function Gve(s,l){s=s|0,l=l|0;var c=0;c=cFe()|0,n[s>>2]=c,uFe(c,l),xp(n[s>>2]|0)}function Yve(s,l,c){return s=s|0,l=l|0,c=c|0,JQe(s,pn(l)|0,c,0),s|0}function Wve(s,l,c){return s=s|0,l=l|0,c=c|0,TQe(s,pn(l)|0,c,0),s|0}function Vve(s,l,c){return s=s|0,l=l|0,c=c|0,EQe(s,pn(l)|0,c,0),s|0}function Tw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],nQe(s,l,d),C=f,s|0}function Kve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Oke(s,l,d),C=f,s|0}function bu(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ike(s,l,d),C=f,s|0}function Dg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oke(s,l,d),C=f,s|0}function Is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Gbe(s,l,d),C=f,s|0}function JA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xbe(s,l,d),C=f,s|0}function bF(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],fbe(s,l,d),C=f,s|0}function Pg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Oxe(s,l,d),C=f,s|0}function zA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ixe(s,l,d),C=f,s|0}function iD(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oxe(s,l,d),C=f,s|0}function Jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],GSe(s,l,d),C=f,s|0}function zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xSe(s,l,d),C=f,s|0}function Xve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pSe(s,l,d),C=f,s|0}function Zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZPe(s,l,d),C=f,s|0}function $ve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],NPe(s,l,d),C=f,s|0}function eDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],yPe(s,l,d),C=f,s|0}function tDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rPe(s,l,d),C=f,s|0}function rDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ODe(s,l,d),C=f,s|0}function nDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],iDe(s,l,d),C=f,s|0}function iDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],sDe(s,c,d,1),C=f}function pn(s){return s=s|0,s|0}function sDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=kF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=oDe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,aDe(m,f)|0,f),C=d}function kF(){var s=0,l=0;if(o[7616]|0||(i5(9136),tr(24,9136,U|0)|0,l=7616,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9136)|0)){s=9136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));i5(9136)}return 9136}function oDe(s){return s=s|0,0}function aDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=kF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],n5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uDe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function hn(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0;B=C,C=C+32|0,se=B+24|0,q=B+20|0,Q=B+16|0,M=B+12|0,O=B+8|0,k=B+4|0,Ge=B,n[q>>2]=l,n[Q>>2]=c,n[M>>2]=f,n[O>>2]=d,n[k>>2]=m,m=s+28|0,n[Ge>>2]=n[m>>2],n[se>>2]=n[Ge>>2],lDe(s+24|0,se,q,M,O,Q,k)|0,n[m>>2]=n[n[m>>2]>>2],C=B}function lDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,s=cDe(l)|0,l=Vt(24)|0,r5(l+4|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0,n[B>>2]|0),n[l>>2]=n[s>>2],n[s>>2]=l,l|0}function cDe(s){return s=s|0,n[s>>2]|0}function r5(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function gr(s,l){return s=s|0,l=l|0,l|s|0}function n5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ADe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fDe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],n5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pDe(s,k),hDe(k),C=O;return}}function ADe(s){return s=s|0,357913941}function fDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function i5(s){s=s|0,mDe(s)}function gDe(s){s=s|0,dDe(s+24|0)}function Rr(s){return s=s|0,n[s>>2]|0}function dDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mDe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,3,l,yDe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Vr(){return 9228}function yDe(){return 1140}function EDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=CDe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=wDe(l,f)|0,C=c,l|0}function Kr(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function CDe(s){return s=s|0,(n[(kF()|0)+24>>2]|0)+(s*12|0)|0}function wDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+48|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&31](f,s),f=IDe(f)|0,C=d,f|0}function IDe(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(s5()|0)|0,f?(FF(l,f),TF(c,l),BDe(s,c),s=RF(l)|0):s=vDe(s)|0,C=d,s|0}function s5(){var s=0;return o[7632]|0||(RDe(9184),tr(25,9184,U|0)|0,s=7632,n[s>>2]=1,n[s+4>>2]=0),9184}function QF(s){return s=s|0,n[s+36>>2]|0}function FF(s,l){s=s|0,l=l|0,n[s>>2]=l,n[s+4>>2]=s,n[s+8>>2]=0}function TF(s,l){s=s|0,l=l|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=0}function BDe(s,l){s=s|0,l=l|0,xDe(l,s,s+8|0,s+16|0,s+24|0,s+32|0,s+40|0)|0}function RF(s){return s=s|0,n[(n[s+4>>2]|0)+8>>2]|0}function vDe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;Q=C,C=C+16|0,c=Q+4|0,f=Q,d=Wa(8)|0,m=d,B=Vt(48)|0,k=B,l=k+48|0;do n[k>>2]=n[s>>2],k=k+4|0,s=s+4|0;while((k|0)<(l|0));return l=m+4|0,n[l>>2]=B,k=Vt(8)|0,B=n[l>>2]|0,n[f>>2]=0,n[c>>2]=n[f>>2],o5(k,B,c),n[d>>2]=k,C=Q,m|0}function o5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1092,n[c+12>>2]=l,n[s+4>>2]=c}function DDe(s){s=s|0,Jm(s),gt(s)}function PDe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function SDe(s){s=s|0,gt(s)}function xDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,m=bDe(n[s>>2]|0,l,c,f,d,m,B)|0,B=s+4|0,n[(n[B>>2]|0)+8>>2]=m,n[(n[B>>2]|0)+8>>2]|0}function bDe(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0;var k=0,Q=0;return k=C,C=C+16|0,Q=k,Va(Q),s=da(s)|0,B=kDe(s,+E[l>>3],+E[c>>3],+E[f>>3],+E[d>>3],+E[m>>3],+E[B>>3])|0,Ka(Q),C=k,B|0}function kDe(s,l,c,f,d,m,B){s=s|0,l=+l,c=+c,f=+f,d=+d,m=+m,B=+B;var k=0;return k=Pl(QDe()|0)|0,l=+KA(l),c=+KA(c),f=+KA(f),d=+KA(d),m=+KA(m),Os(0,k|0,s|0,+l,+c,+f,+d,+m,+ +KA(B))|0}function QDe(){var s=0;return o[7624]|0||(FDe(9172),s=7624,n[s>>2]=1,n[s+4>>2]=0),9172}function FDe(s){s=s|0,Sl(s,TDe()|0,6)}function TDe(){return 1112}function RDe(s){s=s|0,Bp(s)}function NDe(s){s=s|0,a5(s+24|0),l5(s+16|0)}function a5(s){s=s|0,MDe(s)}function l5(s){s=s|0,LDe(s)}function LDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function MDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function Bp(s){s=s|0;var l=0;n[s+16>>2]=0,n[s+20>>2]=0,l=s+24|0,n[l>>2]=0,n[s+28>>2]=l,n[s+36>>2]=0,o[s+40>>0]=0,o[s+41>>0]=0}function ODe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],UDe(s,c,d,0),C=f}function UDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=NF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_De(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,HDe(m,f)|0,f),C=d}function NF(){var s=0,l=0;if(o[7640]|0||(u5(9232),tr(26,9232,U|0)|0,l=7640,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9232)|0)){s=9232,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));u5(9232)}return 9232}function _De(s){return s=s|0,0}function HDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=NF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],c5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jDe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function c5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qDe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,GDe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],c5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,YDe(s,k),WDe(k),C=O;return}}function qDe(s){return s=s|0,357913941}function GDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function YDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function WDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function u5(s){s=s|0,JDe(s)}function VDe(s){s=s|0,KDe(s+24|0)}function KDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function JDe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,zDe()|0,3),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zDe(){return 1144}function XDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,B=m+8|0,k=m,Q=ZDe(s)|0,s=n[Q+4>>2]|0,n[k>>2]=n[Q>>2],n[k+4>>2]=s,n[B>>2]=n[k>>2],n[B+4>>2]=n[k+4>>2],$De(l,B,c,f,d),C=m}function ZDe(s){return s=s|0,(n[(NF()|0)+24>>2]|0)+(s*12|0)|0}function $De(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0,O=0;O=C,C=C+16|0,B=O+2|0,k=O+1|0,Q=O,m=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(m=n[(n[s>>2]|0)+m>>2]|0),ku(B,c),c=+Qu(B,c),ku(k,f),f=+Qu(k,f),XA(Q,d),Q=ZA(Q,d)|0,D7[m&1](s,c,f,Q),C=O}function ku(s,l){s=s|0,l=+l}function Qu(s,l){return s=s|0,l=+l,+ +tPe(l)}function XA(s,l){s=s|0,l=l|0}function ZA(s,l){return s=s|0,l=l|0,ePe(l)|0}function ePe(s){return s=s|0,s|0}function tPe(s){return s=+s,+s}function rPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],nPe(s,c,d,1),C=f}function nPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=LF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=iPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,sPe(m,f)|0,f),C=d}function LF(){var s=0,l=0;if(o[7648]|0||(f5(9268),tr(27,9268,U|0)|0,l=7648,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9268)|0)){s=9268,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f5(9268)}return 9268}function iPe(s){return s=s|0,0}function sPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=LF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],A5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(oPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function A5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function oPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=aPe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,lPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],A5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,cPe(s,k),uPe(k),C=O;return}}function aPe(s){return s=s|0,357913941}function lPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function cPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function uPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function f5(s){s=s|0,pPe(s)}function APe(s){s=s|0,fPe(s+24|0)}function fPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function pPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,4,l,hPe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hPe(){return 1160}function gPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=dPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=mPe(l,f)|0,C=c,l|0}function dPe(s){return s=s|0,(n[(LF()|0)+24>>2]|0)+(s*12|0)|0}function mPe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),p5(Ng[c&31](s)|0)|0}function p5(s){return s=s|0,s&1|0}function yPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],EPe(s,c,d,0),C=f}function EPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=MF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=CPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,wPe(m,f)|0,f),C=d}function MF(){var s=0,l=0;if(o[7656]|0||(g5(9304),tr(28,9304,U|0)|0,l=7656,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9304)|0)){s=9304,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));g5(9304)}return 9304}function CPe(s){return s=s|0,0}function wPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=MF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],h5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(IPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function h5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function IPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=BPe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,vPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],h5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,DPe(s,k),PPe(k),C=O;return}}function BPe(s){return s=s|0,357913941}function vPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function DPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function PPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function g5(s){s=s|0,bPe(s)}function SPe(s){s=s|0,xPe(s+24|0)}function xPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function bPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,kPe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kPe(){return 1164}function QPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=FPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],TPe(l,d,c),C=f}function FPe(s){return s=s|0,(n[(MF()|0)+24>>2]|0)+(s*12|0)|0}function TPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),vp(d,c),c=Dp(d,c)|0,tf[f&31](s,c),Pp(d),C=m}function vp(s,l){s=s|0,l=l|0,RPe(s,l)}function Dp(s,l){return s=s|0,l=l|0,s|0}function Pp(s){s=s|0,jA(s)}function RPe(s,l){s=s|0,l=l|0,OF(s,l)}function OF(s,l){s=s|0,l=l|0,n[s>>2]=l}function NPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],LPe(s,c,d,0),C=f}function LPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=UF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=MPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,OPe(m,f)|0,f),C=d}function UF(){var s=0,l=0;if(o[7664]|0||(m5(9340),tr(29,9340,U|0)|0,l=7664,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9340)|0)){s=9340,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));m5(9340)}return 9340}function MPe(s){return s=s|0,0}function OPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=UF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],d5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(UPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function d5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function UPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=_Pe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,HPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],d5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,jPe(s,k),qPe(k),C=O;return}}function _Pe(s){return s=s|0,357913941}function HPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function jPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function m5(s){s=s|0,WPe(s)}function GPe(s){s=s|0,YPe(s+24|0)}function YPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function WPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,4,l,VPe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VPe(){return 1180}function KPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=JPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=zPe(l,d,c)|0,C=f,c|0}function JPe(s){return s=s|0,(n[(UF()|0)+24>>2]|0)+(s*12|0)|0}function zPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Sg(d,c),d=xg(d,c)|0,d=sD(NT[f&15](s,d)|0)|0,C=m,d|0}function Sg(s,l){s=s|0,l=l|0}function xg(s,l){return s=s|0,l=l|0,XPe(l)|0}function sD(s){return s=s|0,s|0}function XPe(s){return s=s|0,s|0}function ZPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$Pe(s,c,d,0),C=f}function $Pe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=_F()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=eSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,tSe(m,f)|0,f),C=d}function _F(){var s=0,l=0;if(o[7672]|0||(E5(9376),tr(30,9376,U|0)|0,l=7672,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9376)|0)){s=9376,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));E5(9376)}return 9376}function eSe(s){return s=s|0,0}function tSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=_F()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],y5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(rSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function y5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function rSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=nSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,iSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],y5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,sSe(s,k),oSe(k),C=O;return}}function nSe(s){return s=s|0,357913941}function iSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function sSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function oSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function E5(s){s=s|0,cSe(s)}function aSe(s){s=s|0,lSe(s+24|0)}function lSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function cSe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,C5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function C5(){return 1196}function uSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=ASe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=fSe(l,f)|0,C=c,l|0}function ASe(s){return s=s|0,(n[(_F()|0)+24>>2]|0)+(s*12|0)|0}function fSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),sD(Ng[c&31](s)|0)|0}function pSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],hSe(s,c,d,1),C=f}function hSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=HF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=gSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,dSe(m,f)|0,f),C=d}function HF(){var s=0,l=0;if(o[7680]|0||(I5(9412),tr(31,9412,U|0)|0,l=7680,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9412)|0)){s=9412,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));I5(9412)}return 9412}function gSe(s){return s=s|0,0}function dSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=HF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],w5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(mSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function w5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function mSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ySe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,ESe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],w5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,CSe(s,k),wSe(k),C=O;return}}function ySe(s){return s=s|0,357913941}function ESe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function CSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function wSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function I5(s){s=s|0,vSe(s)}function ISe(s){s=s|0,BSe(s+24|0)}function BSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function vSe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,B5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function B5(){return 1200}function DSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=PSe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=SSe(l,f)|0,C=c,l|0}function PSe(s){return s=s|0,(n[(HF()|0)+24>>2]|0)+(s*12|0)|0}function SSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),oD(Ng[c&31](s)|0)|0}function oD(s){return s=s|0,s|0}function xSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],bSe(s,c,d,0),C=f}function bSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=jF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=kSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,QSe(m,f)|0,f),C=d}function jF(){var s=0,l=0;if(o[7688]|0||(D5(9448),tr(32,9448,U|0)|0,l=7688,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9448)|0)){s=9448,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));D5(9448)}return 9448}function kSe(s){return s=s|0,0}function QSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=jF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],v5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(FSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function v5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function FSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=TSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,RSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],v5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,NSe(s,k),LSe(k),C=O;return}}function TSe(s){return s=s|0,357913941}function RSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function NSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function LSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function D5(s){s=s|0,USe(s)}function MSe(s){s=s|0,OSe(s+24|0)}function OSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function USe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,P5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function P5(){return 1204}function _Se(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=HSe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jSe(l,d,c),C=f}function HSe(s){return s=s|0,(n[(jF()|0)+24>>2]|0)+(s*12|0)|0}function jSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),qF(d,c),d=GF(d,c)|0,tf[f&31](s,d),C=m}function qF(s,l){s=s|0,l=l|0}function GF(s,l){return s=s|0,l=l|0,qSe(l)|0}function qSe(s){return s=s|0,s|0}function GSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],YSe(s,c,d,0),C=f}function YSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=YF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=WSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,VSe(m,f)|0,f),C=d}function YF(){var s=0,l=0;if(o[7696]|0||(x5(9484),tr(33,9484,U|0)|0,l=7696,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9484)|0)){s=9484,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));x5(9484)}return 9484}function WSe(s){return s=s|0,0}function VSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=YF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],S5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(KSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function S5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function KSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=JSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,zSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],S5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,XSe(s,k),ZSe(k),C=O;return}}function JSe(s){return s=s|0,357913941}function zSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function XSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ZSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function x5(s){s=s|0,txe(s)}function $Se(s){s=s|0,exe(s+24|0)}function exe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function txe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,rxe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function rxe(){return 1212}function nxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=ixe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],sxe(l,m,c,f),C=d}function ixe(s){return s=s|0,(n[(YF()|0)+24>>2]|0)+(s*12|0)|0}function sxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),qF(m,c),m=GF(m,c)|0,Sg(B,f),B=xg(B,f)|0,_w[d&15](s,m,B),C=k}function oxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],axe(s,c,d,1),C=f}function axe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=WF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lxe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cxe(m,f)|0,f),C=d}function WF(){var s=0,l=0;if(o[7704]|0||(k5(9520),tr(34,9520,U|0)|0,l=7704,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9520)|0)){s=9520,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));k5(9520)}return 9520}function lxe(s){return s=s|0,0}function cxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=WF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],b5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function b5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Axe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],b5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pxe(s,k),hxe(k),C=O;return}}function Axe(s){return s=s|0,357913941}function fxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function k5(s){s=s|0,mxe(s)}function gxe(s){s=s|0,dxe(s+24|0)}function dxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mxe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,yxe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yxe(){return 1224}function Exe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;return d=C,C=C+16|0,m=d+8|0,B=d,k=Cxe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],f=+wxe(l,m,c),C=d,+f}function Cxe(s){return s=s|0,(n[(WF()|0)+24>>2]|0)+(s*12|0)|0}function wxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,B=+xF(+S7[f&7](s,d)),C=m,+B}function Ixe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Bxe(s,c,d,1),C=f}function Bxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=VF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=vxe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Dxe(m,f)|0,f),C=d}function VF(){var s=0,l=0;if(o[7712]|0||(F5(9556),tr(35,9556,U|0)|0,l=7712,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9556)|0)){s=9556,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));F5(9556)}return 9556}function vxe(s){return s=s|0,0}function Dxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=VF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Q5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Pxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function Q5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Pxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Sxe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,xxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],Q5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,bxe(s,k),kxe(k),C=O;return}}function Sxe(s){return s=s|0,357913941}function xxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function bxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function kxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function F5(s){s=s|0,Txe(s)}function Qxe(s){s=s|0,Fxe(s+24|0)}function Fxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Txe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,Rxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Rxe(){return 1232}function Nxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Lxe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=+Mxe(l,d),C=f,+c}function Lxe(s){return s=s|0,(n[(VF()|0)+24>>2]|0)+(s*12|0)|0}function Mxe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),+ +xF(+P7[c&15](s))}function Oxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Uxe(s,c,d,1),C=f}function Uxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=KF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_xe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Hxe(m,f)|0,f),C=d}function KF(){var s=0,l=0;if(o[7720]|0||(R5(9592),tr(36,9592,U|0)|0,l=7720,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9592)|0)){s=9592,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));R5(9592)}return 9592}function _xe(s){return s=s|0,0}function Hxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=KF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],T5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function T5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qxe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Gxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],T5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Yxe(s,k),Wxe(k),C=O;return}}function qxe(s){return s=s|0,357913941}function Gxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Yxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Wxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function R5(s){s=s|0,Jxe(s)}function Vxe(s){s=s|0,Kxe(s+24|0)}function Kxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Jxe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,7,l,zxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zxe(){return 1276}function Xxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=Zxe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=$xe(l,f)|0,C=c,l|0}function Zxe(s){return s=s|0,(n[(KF()|0)+24>>2]|0)+(s*12|0)|0}function $xe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+16|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&31](f,s),f=N5(f)|0,C=d,f|0}function N5(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(L5()|0)|0,f?(FF(l,f),TF(c,l),ebe(s,c),s=RF(l)|0):s=tbe(s)|0,C=d,s|0}function L5(){var s=0;return o[7736]|0||(Abe(9640),tr(25,9640,U|0)|0,s=7736,n[s>>2]=1,n[s+4>>2]=0),9640}function ebe(s,l){s=s|0,l=l|0,sbe(l,s,s+8|0)|0}function tbe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(16)|0,n[k>>2]=n[s>>2],n[k+4>>2]=n[s+4>>2],n[k+8>>2]=n[s+8>>2],n[k+12>>2]=n[s+12>>2],m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],JF(s,m,d),n[f>>2]=s,C=c,l|0}function JF(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1244,n[c+12>>2]=l,n[s+4>>2]=c}function rbe(s){s=s|0,Jm(s),gt(s)}function nbe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function ibe(s){s=s|0,gt(s)}function sbe(s,l,c){return s=s|0,l=l|0,c=c|0,l=obe(n[s>>2]|0,l,c)|0,c=s+4|0,n[(n[c>>2]|0)+8>>2]=l,n[(n[c>>2]|0)+8>>2]|0}function obe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return f=C,C=C+16|0,d=f,Va(d),s=da(s)|0,c=abe(s,n[l>>2]|0,+E[c>>3])|0,Ka(d),C=f,c|0}function abe(s,l,c){s=s|0,l=l|0,c=+c;var f=0;return f=Pl(lbe()|0)|0,l=SF(l)|0,ml(0,f|0,s|0,l|0,+ +KA(c))|0}function lbe(){var s=0;return o[7728]|0||(cbe(9628),s=7728,n[s>>2]=1,n[s+4>>2]=0),9628}function cbe(s){s=s|0,Sl(s,ube()|0,2)}function ube(){return 1264}function Abe(s){s=s|0,Bp(s)}function fbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pbe(s,c,d,1),C=f}function pbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=zF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=hbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,gbe(m,f)|0,f),C=d}function zF(){var s=0,l=0;if(o[7744]|0||(O5(9684),tr(37,9684,U|0)|0,l=7744,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9684)|0)){s=9684,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));O5(9684)}return 9684}function hbe(s){return s=s|0,0}function gbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=zF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],M5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(dbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function M5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function dbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=mbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,ybe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],M5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Ebe(s,k),Cbe(k),C=O;return}}function mbe(s){return s=s|0,357913941}function ybe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Ebe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Cbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function O5(s){s=s|0,Bbe(s)}function wbe(s){s=s|0,Ibe(s+24|0)}function Ibe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Bbe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,vbe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function vbe(){return 1280}function Dbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Pbe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=Sbe(l,d,c)|0,C=f,c|0}function Pbe(s){return s=s|0,(n[(zF()|0)+24>>2]|0)+(s*12|0)|0}function Sbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return B=C,C=C+32|0,d=B,m=B+16|0,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(m,c),m=ZA(m,c)|0,_w[f&15](d,s,m),m=N5(d)|0,C=B,m|0}function xbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],bbe(s,c,d,1),C=f}function bbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=XF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=kbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Qbe(m,f)|0,f),C=d}function XF(){var s=0,l=0;if(o[7752]|0||(_5(9720),tr(38,9720,U|0)|0,l=7752,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9720)|0)){s=9720,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));_5(9720)}return 9720}function kbe(s){return s=s|0,0}function Qbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=XF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],U5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Fbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function U5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Fbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Tbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Rbe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],U5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Nbe(s,k),Lbe(k),C=O;return}}function Tbe(s){return s=s|0,357913941}function Rbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Nbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Lbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function _5(s){s=s|0,Ube(s)}function Mbe(s){s=s|0,Obe(s+24|0)}function Obe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Ube(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,_be()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function _be(){return 1288}function Hbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=jbe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=qbe(l,f)|0,C=c,l|0}function jbe(s){return s=s|0,(n[(XF()|0)+24>>2]|0)+(s*12|0)|0}function qbe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),t5(Ng[c&31](s)|0)|0}function Gbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ybe(s,c,d,0),C=f}function Ybe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=ZF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=Wbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Vbe(m,f)|0,f),C=d}function ZF(){var s=0,l=0;if(o[7760]|0||(j5(9756),tr(39,9756,U|0)|0,l=7760,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9756)|0)){s=9756,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));j5(9756)}return 9756}function Wbe(s){return s=s|0,0}function Vbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=ZF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],H5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Kbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function H5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Kbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Jbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,zbe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],H5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Xbe(s,k),Zbe(k),C=O;return}}function Jbe(s){return s=s|0,357913941}function zbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Xbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Zbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function j5(s){s=s|0,tke(s)}function $be(s){s=s|0,eke(s+24|0)}function eke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function tke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,rke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function rke(){return 1292}function nke(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=ike(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ske(l,d,c),C=f}function ike(s){return s=s|0,(n[(ZF()|0)+24>>2]|0)+(s*12|0)|0}function ske(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ku(d,c),c=+Qu(d,c),B7[f&31](s,c),C=m}function oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ake(s,c,d,0),C=f}function ake(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=$F()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cke(m,f)|0,f),C=d}function $F(){var s=0,l=0;if(o[7768]|0||(G5(9792),tr(40,9792,U|0)|0,l=7768,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9792)|0)){s=9792,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));G5(9792)}return 9792}function lke(s){return s=s|0,0}function cke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=$F()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],q5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function q5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ake(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],q5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pke(s,k),hke(k),C=O;return}}function Ake(s){return s=s|0,357913941}function fke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function G5(s){s=s|0,mke(s)}function gke(s){s=s|0,dke(s+24|0)}function dke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,yke()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yke(){return 1300}function Eke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=Cke(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],wke(l,m,c,f),C=d}function Cke(s){return s=s|0,(n[($F()|0)+24>>2]|0)+(s*12|0)|0}function wke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),XA(m,c),m=ZA(m,c)|0,ku(B,f),f=+Qu(B,f),Q7[d&15](s,m,f),C=k}function Ike(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Bke(s,c,d,0),C=f}function Bke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=eT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=vke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Dke(m,f)|0,f),C=d}function eT(){var s=0,l=0;if(o[7776]|0||(W5(9828),tr(41,9828,U|0)|0,l=7776,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9828)|0)){s=9828,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));W5(9828)}return 9828}function vke(s){return s=s|0,0}function Dke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=eT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Y5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Pke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function Y5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Pke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ske(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,xke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],Y5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,bke(s,k),kke(k),C=O;return}}function Ske(s){return s=s|0,357913941}function xke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function bke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function kke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function W5(s){s=s|0,Tke(s)}function Qke(s){s=s|0,Fke(s+24|0)}function Fke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Tke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,7,l,Rke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Rke(){return 1312}function Nke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Lke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Mke(l,d,c),C=f}function Lke(s){return s=s|0,(n[(eT()|0)+24>>2]|0)+(s*12|0)|0}function Mke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,tf[f&31](s,d),C=m}function Oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Uke(s,c,d,0),C=f}function Uke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=tT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_ke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Hke(m,f)|0,f),C=d}function tT(){var s=0,l=0;if(o[7784]|0||(K5(9864),tr(42,9864,U|0)|0,l=7784,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9864)|0)){s=9864,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));K5(9864)}return 9864}function _ke(s){return s=s|0,0}function Hke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=tT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],V5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function V5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qke(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Gke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],V5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Yke(s,k),Wke(k),C=O;return}}function qke(s){return s=s|0,357913941}function Gke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Yke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Wke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function K5(s){s=s|0,Jke(s)}function Vke(s){s=s|0,Kke(s+24|0)}function Kke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Jke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,zke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zke(){return 1320}function Xke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Zke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$ke(l,d,c),C=f}function Zke(s){return s=s|0,(n[(tT()|0)+24>>2]|0)+(s*12|0)|0}function $ke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),eQe(d,c),d=tQe(d,c)|0,tf[f&31](s,d),C=m}function eQe(s,l){s=s|0,l=l|0}function tQe(s,l){return s=s|0,l=l|0,rQe(l)|0}function rQe(s){return s=s|0,s|0}function nQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],iQe(s,c,d,0),C=f}function iQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=rT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=sQe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,oQe(m,f)|0,f),C=d}function rT(){var s=0,l=0;if(o[7792]|0||(z5(9900),tr(43,9900,U|0)|0,l=7792,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9900)|0)){s=9900,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));z5(9900)}return 9900}function sQe(s){return s=s|0,0}function oQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=rT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],J5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(aQe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function J5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function aQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=lQe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,cQe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],J5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,uQe(s,k),AQe(k),C=O;return}}function lQe(s){return s=s|0,357913941}function cQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function uQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function AQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function z5(s){s=s|0,hQe(s)}function fQe(s){s=s|0,pQe(s+24|0)}function pQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function hQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,22,l,gQe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function gQe(){return 1344}function dQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;c=C,C=C+16|0,f=c+8|0,d=c,m=mQe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],yQe(l,f),C=c}function mQe(s){return s=s|0,(n[(rT()|0)+24>>2]|0)+(s*12|0)|0}function yQe(s,l){s=s|0,l=l|0;var c=0;c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),ef[c&127](s)}function EQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=nT()|0,s=CQe(c)|0,hn(m,l,d,s,wQe(c,f)|0,f)}function nT(){var s=0,l=0;if(o[7800]|0||(Z5(9936),tr(44,9936,U|0)|0,l=7800,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9936)|0)){s=9936,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Z5(9936)}return 9936}function CQe(s){return s=s|0,s|0}function wQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=nT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(X5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(IQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function X5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function IQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=BQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,vQe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,X5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,DQe(s,d),PQe(d),C=k;return}}function BQe(s){return s=s|0,536870911}function vQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function DQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function PQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function Z5(s){s=s|0,bQe(s)}function SQe(s){s=s|0,xQe(s+24|0)}function xQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function bQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,23,l,P5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kQe(s,l){s=s|0,l=l|0,FQe(n[(QQe(s)|0)>>2]|0,l)}function QQe(s){return s=s|0,(n[(nT()|0)+24>>2]|0)+(s<<3)|0}function FQe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,qF(f,l),l=GF(f,l)|0,ef[s&127](l),C=c}function TQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=iT()|0,s=RQe(c)|0,hn(m,l,d,s,NQe(c,f)|0,f)}function iT(){var s=0,l=0;if(o[7808]|0||(e9(9972),tr(45,9972,U|0)|0,l=7808,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9972)|0)){s=9972,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));e9(9972)}return 9972}function RQe(s){return s=s|0,s|0}function NQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=iT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?($5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(LQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function $5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function LQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=MQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,OQe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,$5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,UQe(s,d),_Qe(d),C=k;return}}function MQe(s){return s=s|0,536870911}function OQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function UQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function _Qe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function e9(s){s=s|0,qQe(s)}function HQe(s){s=s|0,jQe(s+24|0)}function jQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function qQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,9,l,GQe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function GQe(){return 1348}function YQe(s,l){return s=s|0,l=l|0,VQe(n[(WQe(s)|0)>>2]|0,l)|0}function WQe(s){return s=s|0,(n[(iT()|0)+24>>2]|0)+(s<<3)|0}function VQe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,t9(f,l),l=r9(f,l)|0,l=sD(Ng[s&31](l)|0)|0,C=c,l|0}function t9(s,l){s=s|0,l=l|0}function r9(s,l){return s=s|0,l=l|0,KQe(l)|0}function KQe(s){return s=s|0,s|0}function JQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=sT()|0,s=zQe(c)|0,hn(m,l,d,s,XQe(c,f)|0,f)}function sT(){var s=0,l=0;if(o[7816]|0||(i9(10008),tr(46,10008,U|0)|0,l=7816,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10008)|0)){s=10008,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));i9(10008)}return 10008}function zQe(s){return s=s|0,s|0}function XQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=sT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(n9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(ZQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function n9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function ZQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=$Qe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,eFe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,n9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,tFe(s,d),rFe(d),C=k;return}}function $Qe(s){return s=s|0,536870911}function eFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function tFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function rFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function i9(s){s=s|0,sFe(s)}function nFe(s){s=s|0,iFe(s+24|0)}function iFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function sFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,15,l,C5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function oFe(s){return s=s|0,lFe(n[(aFe(s)|0)>>2]|0)|0}function aFe(s){return s=s|0,(n[(sT()|0)+24>>2]|0)+(s<<3)|0}function lFe(s){return s=s|0,sD(CD[s&7]()|0)|0}function cFe(){var s=0;return o[7832]|0||(mFe(10052),tr(25,10052,U|0)|0,s=7832,n[s>>2]=1,n[s+4>>2]=0),10052}function uFe(s,l){s=s|0,l=l|0,n[s>>2]=AFe()|0,n[s+4>>2]=fFe()|0,n[s+12>>2]=l,n[s+8>>2]=pFe()|0,n[s+32>>2]=2}function AFe(){return 11709}function fFe(){return 1188}function pFe(){return aD()|0}function hFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(gFe(c),gt(c)):l|0&&(Pu(l),gt(l))}function Sp(s,l){return s=s|0,l=l|0,l&s|0}function gFe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function aD(){var s=0;return o[7824]|0||(n[2511]=dFe()|0,n[2512]=0,s=7824,n[s>>2]=1,n[s+4>>2]=0),10044}function dFe(){return 0}function mFe(s){s=s|0,Bp(s)}function yFe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0;l=C,C=C+32|0,c=l+24|0,m=l+16|0,d=l+8|0,f=l,EFe(s,4827),CFe(s,4834,3)|0,wFe(s,3682,47)|0,n[m>>2]=9,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],IFe(s,4841,c)|0,n[d>>2]=1,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],BFe(s,4871,c)|0,n[f>>2]=10,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],vFe(s,4891,c)|0,C=l}function EFe(s,l){s=s|0,l=l|0;var c=0;c=rRe()|0,n[s>>2]=c,nRe(c,l),xp(n[s>>2]|0)}function CFe(s,l,c){return s=s|0,l=l|0,c=c|0,_Te(s,pn(l)|0,c,0),s|0}function wFe(s,l,c){return s=s|0,l=l|0,c=c|0,DTe(s,pn(l)|0,c,0),s|0}function IFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oTe(s,l,d),C=f,s|0}function BFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],HFe(s,l,d),C=f,s|0}function vFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],DFe(s,l,d),C=f,s|0}function DFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],PFe(s,c,d,1),C=f}function PFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=oT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=SFe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,xFe(m,f)|0,f),C=d}function oT(){var s=0,l=0;if(o[7840]|0||(o9(10100),tr(48,10100,U|0)|0,l=7840,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10100)|0)){s=10100,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o9(10100)}return 10100}function SFe(s){return s=s|0,0}function xFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=oT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],s9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(bFe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function s9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function bFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=kFe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,QFe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],s9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,FFe(s,k),TFe(k),C=O;return}}function kFe(s){return s=s|0,357913941}function QFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function FFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function TFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function o9(s){s=s|0,LFe(s)}function RFe(s){s=s|0,NFe(s+24|0)}function NFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function LFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,MFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function MFe(){return 1364}function OFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=UFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=_Fe(l,d,c)|0,C=f,c|0}function UFe(s){return s=s|0,(n[(oT()|0)+24>>2]|0)+(s*12|0)|0}function _Fe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,d=p5(NT[f&15](s,d)|0)|0,C=m,d|0}function HFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jFe(s,c,d,0),C=f}function jFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=aT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=qFe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,GFe(m,f)|0,f),C=d}function aT(){var s=0,l=0;if(o[7848]|0||(l9(10136),tr(49,10136,U|0)|0,l=7848,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10136)|0)){s=10136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));l9(10136)}return 10136}function qFe(s){return s=s|0,0}function GFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=aT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],a9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(YFe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function a9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function YFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=WFe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,VFe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],a9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,KFe(s,k),JFe(k),C=O;return}}function WFe(s){return s=s|0,357913941}function VFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function KFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function l9(s){s=s|0,ZFe(s)}function zFe(s){s=s|0,XFe(s+24|0)}function XFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function ZFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,9,l,$Fe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function $Fe(){return 1372}function eTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=tTe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rTe(l,d,c),C=f}function tTe(s){return s=s|0,(n[(aT()|0)+24>>2]|0)+(s*12|0)|0}function rTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=Ze;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),nTe(d,c),B=y(iTe(d,c)),I7[f&1](s,B),C=m}function nTe(s,l){s=s|0,l=+l}function iTe(s,l){return s=s|0,l=+l,y(sTe(l))}function sTe(s){return s=+s,y(s)}function oTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],aTe(s,c,d,0),C=f}function aTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=lT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lTe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cTe(m,f)|0,f),C=d}function lT(){var s=0,l=0;if(o[7856]|0||(u9(10172),tr(50,10172,U|0)|0,l=7856,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10172)|0)){s=10172,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));u9(10172)}return 10172}function lTe(s){return s=s|0,0}function cTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=lT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],c9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uTe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function c9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ATe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fTe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],c9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pTe(s,k),hTe(k),C=O;return}}function ATe(s){return s=s|0,357913941}function fTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function u9(s){s=s|0,mTe(s)}function gTe(s){s=s|0,dTe(s+24|0)}function dTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,3,l,yTe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yTe(){return 1380}function ETe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=CTe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],wTe(l,m,c,f),C=d}function CTe(s){return s=s|0,(n[(lT()|0)+24>>2]|0)+(s*12|0)|0}function wTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),XA(m,c),m=ZA(m,c)|0,ITe(B,f),B=BTe(B,f)|0,_w[d&15](s,m,B),C=k}function ITe(s,l){s=s|0,l=l|0}function BTe(s,l){return s=s|0,l=l|0,vTe(l)|0}function vTe(s){return s=s|0,(s|0)!=0|0}function DTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=cT()|0,s=PTe(c)|0,hn(m,l,d,s,STe(c,f)|0,f)}function cT(){var s=0,l=0;if(o[7864]|0||(f9(10208),tr(51,10208,U|0)|0,l=7864,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10208)|0)){s=10208,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f9(10208)}return 10208}function PTe(s){return s=s|0,s|0}function STe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=cT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(A9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(xTe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function A9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function xTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=bTe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,kTe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,A9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,QTe(s,d),FTe(d),C=k;return}}function bTe(s){return s=s|0,536870911}function kTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function QTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function FTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function f9(s){s=s|0,NTe(s)}function TTe(s){s=s|0,RTe(s+24|0)}function RTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function NTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,24,l,LTe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function LTe(){return 1392}function MTe(s,l){s=s|0,l=l|0,UTe(n[(OTe(s)|0)>>2]|0,l)}function OTe(s){return s=s|0,(n[(cT()|0)+24>>2]|0)+(s<<3)|0}function UTe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,t9(f,l),l=r9(f,l)|0,ef[s&127](l),C=c}function _Te(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=uT()|0,s=HTe(c)|0,hn(m,l,d,s,jTe(c,f)|0,f)}function uT(){var s=0,l=0;if(o[7872]|0||(h9(10244),tr(52,10244,U|0)|0,l=7872,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10244)|0)){s=10244,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));h9(10244)}return 10244}function HTe(s){return s=s|0,s|0}function jTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=uT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(p9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(qTe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function p9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function qTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=GTe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,YTe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,p9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,WTe(s,d),VTe(d),C=k;return}}function GTe(s){return s=s|0,536870911}function YTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function WTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function VTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function h9(s){s=s|0,zTe(s)}function KTe(s){s=s|0,JTe(s+24|0)}function JTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function zTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,16,l,XTe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function XTe(){return 1400}function ZTe(s){return s=s|0,eRe(n[($Te(s)|0)>>2]|0)|0}function $Te(s){return s=s|0,(n[(uT()|0)+24>>2]|0)+(s<<3)|0}function eRe(s){return s=s|0,tRe(CD[s&7]()|0)|0}function tRe(s){return s=s|0,s|0}function rRe(){var s=0;return o[7880]|0||(cRe(10280),tr(25,10280,U|0)|0,s=7880,n[s>>2]=1,n[s+4>>2]=0),10280}function nRe(s,l){s=s|0,l=l|0,n[s>>2]=iRe()|0,n[s+4>>2]=sRe()|0,n[s+12>>2]=l,n[s+8>>2]=oRe()|0,n[s+32>>2]=4}function iRe(){return 11711}function sRe(){return 1356}function oRe(){return aD()|0}function aRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(lRe(c),gt(c)):l|0&&(vg(l),gt(l))}function lRe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function cRe(s){s=s|0,Bp(s)}function uRe(s){s=s|0,ARe(s,4920),fRe(s)|0,pRe(s)|0}function ARe(s,l){s=s|0,l=l|0;var c=0;c=L5()|0,n[s>>2]=c,RRe(c,l),xp(n[s>>2]|0)}function fRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,vRe()|0),s|0}function pRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,hRe()|0),s|0}function hRe(){var s=0;return o[7888]|0||(g9(10328),tr(53,10328,U|0)|0,s=7888,n[s>>2]=1,n[s+4>>2]=0),Rr(10328)|0||g9(10328),10328}function bg(s,l){s=s|0,l=l|0,hn(s,0,l,0,0,0)}function g9(s){s=s|0,mRe(s),kg(s,10)}function gRe(s){s=s|0,dRe(s+24|0)}function dRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function mRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,1,l,wRe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yRe(s,l,c){s=s|0,l=l|0,c=+c,ERe(s,l,c)}function kg(s,l){s=s|0,l=l|0,n[s+20>>2]=l}function ERe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,m=f+8|0,k=f+13|0,d=f,B=f+12|0,XA(k,l),n[m>>2]=ZA(k,l)|0,ku(B,c),E[d>>3]=+Qu(B,c),CRe(s,m,d),C=f}function CRe(s,l,c){s=s|0,l=l|0,c=c|0,Y(s+8|0,n[l>>2]|0,+E[c>>3]),o[s+24>>0]=1}function wRe(){return 1404}function IRe(s,l){return s=s|0,l=+l,BRe(s,l)|0}function BRe(s,l){s=s|0,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,m=f+4|0,B=f+8|0,k=f,d=Wa(8)|0,c=d,Q=Vt(16)|0,XA(m,s),s=ZA(m,s)|0,ku(B,l),Y(Q,s,+Qu(B,l)),B=c+4|0,n[B>>2]=Q,s=Vt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],JF(s,B,m),n[d>>2]=s,C=f,c|0}function vRe(){var s=0;return o[7896]|0||(d9(10364),tr(54,10364,U|0)|0,s=7896,n[s>>2]=1,n[s+4>>2]=0),Rr(10364)|0||d9(10364),10364}function d9(s){s=s|0,SRe(s),kg(s,55)}function DRe(s){s=s|0,PRe(s+24|0)}function PRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function SRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,4,l,QRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function xRe(s){s=s|0,bRe(s)}function bRe(s){s=s|0,kRe(s)}function kRe(s){s=s|0,m9(s+8|0),o[s+24>>0]=1}function m9(s){s=s|0,n[s>>2]=0,E[s+8>>3]=0}function QRe(){return 1424}function FRe(){return TRe()|0}function TRe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Vt(16)|0,m9(f),m=s+4|0,n[m>>2]=f,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],JF(f,m,d),n[c>>2]=f,C=l,s|0}function RRe(s,l){s=s|0,l=l|0,n[s>>2]=NRe()|0,n[s+4>>2]=LRe()|0,n[s+12>>2]=l,n[s+8>>2]=MRe()|0,n[s+32>>2]=5}function NRe(){return 11710}function LRe(){return 1416}function MRe(){return lD()|0}function ORe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(URe(c),gt(c)):l|0&>(l)}function URe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function lD(){var s=0;return o[7904]|0||(n[2600]=_Re()|0,n[2601]=0,s=7904,n[s>>2]=1,n[s+4>>2]=0),10400}function _Re(){return n[357]|0}function HRe(s){s=s|0,jRe(s,4926),qRe(s)|0}function jRe(s,l){s=s|0,l=l|0;var c=0;c=s5()|0,n[s>>2]=c,eNe(c,l),xp(n[s>>2]|0)}function qRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,GRe()|0),s|0}function GRe(){var s=0;return o[7912]|0||(y9(10412),tr(56,10412,U|0)|0,s=7912,n[s>>2]=1,n[s+4>>2]=0),Rr(10412)|0||y9(10412),10412}function y9(s){s=s|0,VRe(s),kg(s,57)}function YRe(s){s=s|0,WRe(s+24|0)}function WRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function VRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,5,l,XRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function KRe(s){s=s|0,JRe(s)}function JRe(s){s=s|0,zRe(s)}function zRe(s){s=s|0;var l=0,c=0;l=s+8|0,c=l+48|0;do n[l>>2]=0,l=l+4|0;while((l|0)<(c|0));o[s+56>>0]=1}function XRe(){return 1432}function ZRe(){return $Re()|0}function $Re(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0;B=C,C=C+16|0,s=B+4|0,l=B,c=Wa(8)|0,f=c,d=Vt(48)|0,m=d,k=m+48|0;do n[m>>2]=0,m=m+4|0;while((m|0)<(k|0));return m=f+4|0,n[m>>2]=d,k=Vt(8)|0,m=n[m>>2]|0,n[l>>2]=0,n[s>>2]=n[l>>2],o5(k,m,s),n[c>>2]=k,C=B,f|0}function eNe(s,l){s=s|0,l=l|0,n[s>>2]=tNe()|0,n[s+4>>2]=rNe()|0,n[s+12>>2]=l,n[s+8>>2]=nNe()|0,n[s+32>>2]=6}function tNe(){return 11704}function rNe(){return 1436}function nNe(){return lD()|0}function iNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(sNe(c),gt(c)):l|0&>(l)}function sNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function oNe(s){s=s|0,aNe(s,4933),lNe(s)|0,cNe(s)|0}function aNe(s,l){s=s|0,l=l|0;var c=0;c=TNe()|0,n[s>>2]=c,RNe(c,l),xp(n[s>>2]|0)}function lNe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,BNe()|0),s|0}function cNe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,uNe()|0),s|0}function uNe(){var s=0;return o[7920]|0||(E9(10452),tr(58,10452,U|0)|0,s=7920,n[s>>2]=1,n[s+4>>2]=0),Rr(10452)|0||E9(10452),10452}function E9(s){s=s|0,pNe(s),kg(s,1)}function ANe(s){s=s|0,fNe(s+24|0)}function fNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function pNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,1,l,mNe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hNe(s,l,c){s=s|0,l=+l,c=+c,gNe(s,l,c)}function gNe(s,l,c){s=s|0,l=+l,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,m=f+8|0,k=f+17|0,d=f,B=f+16|0,ku(k,l),E[m>>3]=+Qu(k,l),ku(B,c),E[d>>3]=+Qu(B,c),dNe(s,m,d),C=f}function dNe(s,l,c){s=s|0,l=l|0,c=c|0,C9(s+8|0,+E[l>>3],+E[c>>3]),o[s+24>>0]=1}function C9(s,l,c){s=s|0,l=+l,c=+c,E[s>>3]=l,E[s+8>>3]=c}function mNe(){return 1472}function yNe(s,l){return s=+s,l=+l,ENe(s,l)|0}function ENe(s,l){s=+s,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,B=f+4|0,k=f+8|0,Q=f,d=Wa(8)|0,c=d,m=Vt(16)|0,ku(B,s),s=+Qu(B,s),ku(k,l),C9(m,s,+Qu(k,l)),k=c+4|0,n[k>>2]=m,m=Vt(8)|0,k=n[k>>2]|0,n[Q>>2]=0,n[B>>2]=n[Q>>2],w9(m,k,B),n[d>>2]=m,C=f,c|0}function w9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1452,n[c+12>>2]=l,n[s+4>>2]=c}function CNe(s){s=s|0,Jm(s),gt(s)}function wNe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function INe(s){s=s|0,gt(s)}function BNe(){var s=0;return o[7928]|0||(I9(10488),tr(59,10488,U|0)|0,s=7928,n[s>>2]=1,n[s+4>>2]=0),Rr(10488)|0||I9(10488),10488}function I9(s){s=s|0,PNe(s),kg(s,60)}function vNe(s){s=s|0,DNe(s+24|0)}function DNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function PNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,6,l,kNe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function SNe(s){s=s|0,xNe(s)}function xNe(s){s=s|0,bNe(s)}function bNe(s){s=s|0,B9(s+8|0),o[s+24>>0]=1}function B9(s){s=s|0,n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,n[s+12>>2]=0}function kNe(){return 1492}function QNe(){return FNe()|0}function FNe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Vt(16)|0,B9(f),m=s+4|0,n[m>>2]=f,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],w9(f,m,d),n[c>>2]=f,C=l,s|0}function TNe(){var s=0;return o[7936]|0||(_Ne(10524),tr(25,10524,U|0)|0,s=7936,n[s>>2]=1,n[s+4>>2]=0),10524}function RNe(s,l){s=s|0,l=l|0,n[s>>2]=NNe()|0,n[s+4>>2]=LNe()|0,n[s+12>>2]=l,n[s+8>>2]=MNe()|0,n[s+32>>2]=7}function NNe(){return 11700}function LNe(){return 1484}function MNe(){return lD()|0}function ONe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(UNe(c),gt(c)):l|0&>(l)}function UNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function _Ne(s){s=s|0,Bp(s)}function HNe(s,l,c){s=s|0,l=l|0,c=c|0,s=pn(l)|0,l=jNe(c)|0,c=qNe(c,0)|0,ELe(s,l,c,AT()|0,0)}function jNe(s){return s=s|0,s|0}function qNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=AT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(D9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(zNe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function AT(){var s=0,l=0;if(o[7944]|0||(v9(10568),tr(61,10568,U|0)|0,l=7944,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10568)|0)){s=10568,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));v9(10568)}return 10568}function v9(s){s=s|0,WNe(s)}function GNe(s){s=s|0,YNe(s+24|0)}function YNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function WNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,17,l,B5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VNe(s){return s=s|0,JNe(n[(KNe(s)|0)>>2]|0)|0}function KNe(s){return s=s|0,(n[(AT()|0)+24>>2]|0)+(s<<3)|0}function JNe(s){return s=s|0,oD(CD[s&7]()|0)|0}function D9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function zNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=XNe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,ZNe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,D9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,$Ne(s,d),eLe(d),C=k;return}}function XNe(s){return s=s|0,536870911}function ZNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function $Ne(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function eLe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function tLe(){rLe()}function rLe(){nLe(10604)}function nLe(s){s=s|0,iLe(s,4955)}function iLe(s,l){s=s|0,l=l|0;var c=0;c=sLe()|0,n[s>>2]=c,oLe(c,l),xp(n[s>>2]|0)}function sLe(){var s=0;return o[7952]|0||(gLe(10612),tr(25,10612,U|0)|0,s=7952,n[s>>2]=1,n[s+4>>2]=0),10612}function oLe(s,l){s=s|0,l=l|0,n[s>>2]=uLe()|0,n[s+4>>2]=ALe()|0,n[s+12>>2]=l,n[s+8>>2]=fLe()|0,n[s+32>>2]=8}function xp(s){s=s|0;var l=0,c=0;l=C,C=C+16|0,c=l,Gm()|0,n[c>>2]=s,aLe(10608,c),C=l}function Gm(){return o[11714]|0||(n[2652]=0,tr(62,10608,U|0)|0,o[11714]=1),10608}function aLe(s,l){s=s|0,l=l|0;var c=0;c=Vt(8)|0,n[c+4>>2]=n[l>>2],n[c>>2]=n[s>>2],n[s>>2]=c}function lLe(s){s=s|0,cLe(s)}function cLe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function uLe(){return 11715}function ALe(){return 1496}function fLe(){return aD()|0}function pLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(hLe(c),gt(c)):l|0&>(l)}function hLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function gLe(s){s=s|0,Bp(s)}function dLe(s,l){s=s|0,l=l|0;var c=0,f=0;Gm()|0,c=n[2652]|0;e:do if(c|0){for(;f=n[c+4>>2]|0,!(f|0&&(o7(fT(f)|0,s)|0)==0);)if(c=n[c>>2]|0,!c)break e;mLe(f,l)}while(0)}function fT(s){return s=s|0,n[s+12>>2]|0}function mLe(s,l){s=s|0,l=l|0;var c=0;s=s+36|0,c=n[s>>2]|0,c|0&&(jA(c),gt(c)),c=Vt(4)|0,$G(c,l),n[s>>2]=c}function pT(){return o[11716]|0||(n[2664]=0,tr(63,10656,U|0)|0,o[11716]=1),10656}function P9(){var s=0;return o[11717]|0?s=n[2665]|0:(yLe(),n[2665]=1504,o[11717]=1,s=1504),s|0}function yLe(){o[11740]|0||(o[11718]=gr(gr(8,0)|0,0)|0,o[11719]=gr(gr(0,0)|0,0)|0,o[11720]=gr(gr(0,16)|0,0)|0,o[11721]=gr(gr(8,0)|0,0)|0,o[11722]=gr(gr(0,0)|0,0)|0,o[11723]=gr(gr(8,0)|0,0)|0,o[11724]=gr(gr(0,0)|0,0)|0,o[11725]=gr(gr(8,0)|0,0)|0,o[11726]=gr(gr(0,0)|0,0)|0,o[11727]=gr(gr(8,0)|0,0)|0,o[11728]=gr(gr(0,0)|0,0)|0,o[11729]=gr(gr(0,0)|0,32)|0,o[11730]=gr(gr(0,0)|0,32)|0,o[11740]=1)}function S9(){return 1572}function ELe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0;m=C,C=C+32|0,M=m+16|0,O=m+12|0,Q=m+8|0,k=m+4|0,B=m,n[M>>2]=s,n[O>>2]=l,n[Q>>2]=c,n[k>>2]=f,n[B>>2]=d,pT()|0,CLe(10656,M,O,Q,k,B),C=m}function CLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0;B=Vt(24)|0,r5(B+4|0,n[l>>2]|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0),n[B>>2]=n[s>>2],n[s>>2]=B}function x9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0;if(at=C,C=C+32|0,Oe=at+20|0,Fe=at+8|0,et=at+4|0,Xe=at,l=n[l>>2]|0,l|0){Ge=Oe+4|0,Q=Oe+8|0,O=Fe+4|0,M=Fe+8|0,q=Fe+8|0,se=Oe+8|0;do{if(B=l+4|0,k=hT(B)|0,k|0){if(d=Rw(k)|0,n[Oe>>2]=0,n[Ge>>2]=0,n[Q>>2]=0,f=(Nw(k)|0)+1|0,wLe(Oe,f),f|0)for(;f=f+-1|0,xc(Fe,n[d>>2]|0),m=n[Ge>>2]|0,m>>>0<(n[se>>2]|0)>>>0?(n[m>>2]=n[Fe>>2],n[Ge>>2]=(n[Ge>>2]|0)+4):gT(Oe,Fe),f;)d=d+4|0;f=Lw(k)|0,n[Fe>>2]=0,n[O>>2]=0,n[M>>2]=0;e:do if(n[f>>2]|0)for(d=0,m=0;;){if((d|0)==(m|0)?ILe(Fe,f):(n[d>>2]=n[f>>2],n[O>>2]=(n[O>>2]|0)+4),f=f+4|0,!(n[f>>2]|0))break e;d=n[O>>2]|0,m=n[q>>2]|0}while(0);n[et>>2]=cD(B)|0,n[Xe>>2]=Rr(k)|0,BLe(c,s,et,Xe,Oe,Fe),dT(Fe),$A(Oe)}l=n[l>>2]|0}while((l|0)!=0)}C=at}function hT(s){return s=s|0,n[s+12>>2]|0}function Rw(s){return s=s|0,n[s+12>>2]|0}function Nw(s){return s=s|0,n[s+16>>2]|0}function wLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=n[s>>2]|0,(n[s+8>>2]|0)-f>>2>>>0>>0&&(L9(c,l,(n[s+4>>2]|0)-f>>2,s+8|0),M9(s,c),O9(c)),C=d}function gT(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=N9(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,O=(n[s+8>>2]|0)-k|0,Q=O>>1,L9(c,O>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,M9(s,c),O9(c),C=B;return}}function Lw(s){return s=s|0,n[s+8>>2]|0}function ILe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=R9(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,O=(n[s+8>>2]|0)-k|0,Q=O>>1,jLe(c,O>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,qLe(s,c),GLe(c),C=B;return}}function cD(s){return s=s|0,n[s>>2]|0}function BLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,vLe(s,l,c,f,d,m)}function dT(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function $A(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function vLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+48|0,M=B+40|0,k=B+32|0,q=B+24|0,Q=B+12|0,O=B,Va(k),s=da(s)|0,n[q>>2]=n[l>>2],c=n[c>>2]|0,f=n[f>>2]|0,mT(Q,d),DLe(O,m),n[M>>2]=n[q>>2],PLe(s,M,c,f,Q,O),dT(O),$A(Q),Ka(k),C=B}function mT(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(_Le(s,f),HLe(s,n[l>>2]|0,n[c>>2]|0,f))}function DLe(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(OLe(s,f),ULe(s,n[l>>2]|0,n[c>>2]|0,f))}function PLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+32|0,M=B+28|0,q=B+24|0,k=B+12|0,Q=B,O=Pl(SLe()|0)|0,n[q>>2]=n[l>>2],n[M>>2]=n[q>>2],l=Qg(M)|0,c=b9(c)|0,f=yT(f)|0,n[k>>2]=n[d>>2],M=d+4|0,n[k+4>>2]=n[M>>2],q=d+8|0,n[k+8>>2]=n[q>>2],n[q>>2]=0,n[M>>2]=0,n[d>>2]=0,d=ET(k)|0,n[Q>>2]=n[m>>2],M=m+4|0,n[Q+4>>2]=n[M>>2],q=m+8|0,n[Q+8>>2]=n[q>>2],n[q>>2]=0,n[M>>2]=0,n[m>>2]=0,ao(0,O|0,s|0,l|0,c|0,f|0,d|0,xLe(Q)|0)|0,dT(Q),$A(k),C=B}function SLe(){var s=0;return o[7968]|0||(LLe(10708),s=7968,n[s>>2]=1,n[s+4>>2]=0),10708}function Qg(s){return s=s|0,Q9(s)|0}function b9(s){return s=s|0,k9(s)|0}function yT(s){return s=s|0,oD(s)|0}function ET(s){return s=s|0,kLe(s)|0}function xLe(s){return s=s|0,bLe(s)|0}function bLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=k9(n[(n[s>>2]|0)+(l<<2)>>2]|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function k9(s){return s=s|0,s|0}function kLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=Q9((n[s>>2]|0)+(l<<2)|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function Q9(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(F9()|0)|0,f?(FF(l,f),TF(c,l),fUe(s,c),s=RF(l)|0):s=QLe(s)|0,C=d,s|0}function F9(){var s=0;return o[7960]|0||(NLe(10664),tr(25,10664,U|0)|0,s=7960,n[s>>2]=1,n[s+4>>2]=0),10664}function QLe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(4)|0,n[k>>2]=n[s>>2],m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],T9(s,m,d),n[f>>2]=s,C=c,l|0}function T9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1656,n[c+12>>2]=l,n[s+4>>2]=c}function FLe(s){s=s|0,Jm(s),gt(s)}function TLe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function RLe(s){s=s|0,gt(s)}function NLe(s){s=s|0,Bp(s)}function LLe(s){s=s|0,Sl(s,MLe()|0,5)}function MLe(){return 1676}function OLe(s,l){s=s|0,l=l|0;var c=0;if((R9(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function ULe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function R9(s){return s=s|0,1073741823}function _Le(s,l){s=s|0,l=l|0;var c=0;if((N9(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function HLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function N9(s){return s=s|0,1073741823}function jLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function qLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function GLe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function L9(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function M9(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function O9(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function YLe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;if(Fe=C,C=C+32|0,M=Fe+20|0,q=Fe+12|0,O=Fe+16|0,se=Fe+4|0,Ge=Fe,Oe=Fe+8|0,k=P9()|0,m=n[k>>2]|0,B=n[m>>2]|0,B|0)for(Q=n[k+8>>2]|0,k=n[k+4>>2]|0;xc(M,B),WLe(s,M,k,Q),m=m+4|0,B=n[m>>2]|0,B;)Q=Q+1|0,k=k+1|0;if(m=S9()|0,B=n[m>>2]|0,B|0)do xc(M,B),n[q>>2]=n[m+4>>2],VLe(l,M,q),m=m+8|0,B=n[m>>2]|0;while((B|0)!=0);if(m=n[(Gm()|0)>>2]|0,m|0)do l=n[m+4>>2]|0,xc(M,n[(Ym(l)|0)>>2]|0),n[q>>2]=fT(l)|0,KLe(c,M,q),m=n[m>>2]|0;while((m|0)!=0);if(xc(O,0),m=pT()|0,n[M>>2]=n[O>>2],x9(M,m,d),m=n[(Gm()|0)>>2]|0,m|0){s=M+4|0,l=M+8|0,c=M+8|0;do{if(Q=n[m+4>>2]|0,xc(q,n[(Ym(Q)|0)>>2]|0),JLe(se,U9(Q)|0),B=n[se>>2]|0,B|0){n[M>>2]=0,n[s>>2]=0,n[l>>2]=0;do xc(Ge,n[(Ym(n[B+4>>2]|0)|0)>>2]|0),k=n[s>>2]|0,k>>>0<(n[c>>2]|0)>>>0?(n[k>>2]=n[Ge>>2],n[s>>2]=(n[s>>2]|0)+4):gT(M,Ge),B=n[B>>2]|0;while((B|0)!=0);zLe(f,q,M),$A(M)}n[Oe>>2]=n[q>>2],O=_9(Q)|0,n[M>>2]=n[Oe>>2],x9(M,O,d),l5(se),m=n[m>>2]|0}while((m|0)!=0)}C=Fe}function WLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,lMe(s,l,c,f)}function VLe(s,l,c){s=s|0,l=l|0,c=c|0,aMe(s,l,c)}function Ym(s){return s=s|0,s|0}function KLe(s,l,c){s=s|0,l=l|0,c=c|0,nMe(s,l,c)}function U9(s){return s=s|0,s+16|0}function JLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(m=C,C=C+16|0,d=m+8|0,c=m,n[s>>2]=0,f=n[l>>2]|0,n[d>>2]=f,n[c>>2]=s,c=rMe(c)|0,f|0){if(f=Vt(12)|0,B=(H9(d)|0)+4|0,s=n[B+4>>2]|0,l=f+4|0,n[l>>2]=n[B>>2],n[l+4>>2]=s,l=n[n[d>>2]>>2]|0,n[d>>2]=l,!l)s=f;else for(l=f;s=Vt(12)|0,Q=(H9(d)|0)+4|0,k=n[Q+4>>2]|0,B=s+4|0,n[B>>2]=n[Q>>2],n[B+4>>2]=k,n[l>>2]=s,B=n[n[d>>2]>>2]|0,n[d>>2]=B,B;)l=s;n[s>>2]=n[c>>2],n[c>>2]=f}C=m}function zLe(s,l,c){s=s|0,l=l|0,c=c|0,XLe(s,l,c)}function _9(s){return s=s|0,s+24|0}function XLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+24|0,d=f+16|0,k=f+12|0,m=f,Va(d),s=da(s)|0,n[k>>2]=n[l>>2],mT(m,c),n[B>>2]=n[k>>2],ZLe(s,B,m),$A(m),Ka(d),C=f}function ZLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+16|0,k=f+12|0,d=f,m=Pl($Le()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Qg(B)|0,n[d>>2]=n[c>>2],B=c+4|0,n[d+4>>2]=n[B>>2],k=c+8|0,n[d+8>>2]=n[k>>2],n[k>>2]=0,n[B>>2]=0,n[c>>2]=0,oo(0,m|0,s|0,l|0,ET(d)|0)|0,$A(d),C=f}function $Le(){var s=0;return o[7976]|0||(eMe(10720),s=7976,n[s>>2]=1,n[s+4>>2]=0),10720}function eMe(s){s=s|0,Sl(s,tMe()|0,2)}function tMe(){return 1732}function rMe(s){return s=s|0,n[s>>2]|0}function H9(s){return s=s|0,n[s>>2]|0}function nMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Va(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],j9(s,m,c),Ka(d),C=f}function j9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+4|0,B=f,d=Pl(iMe()|0)|0,n[B>>2]=n[l>>2],n[m>>2]=n[B>>2],l=Qg(m)|0,oo(0,d|0,s|0,l|0,b9(c)|0)|0,C=f}function iMe(){var s=0;return o[7984]|0||(sMe(10732),s=7984,n[s>>2]=1,n[s+4>>2]=0),10732}function sMe(s){s=s|0,Sl(s,oMe()|0,2)}function oMe(){return 1744}function aMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Va(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],j9(s,m,c),Ka(d),C=f}function lMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Va(m),s=da(s)|0,n[k>>2]=n[l>>2],c=o[c>>0]|0,f=o[f>>0]|0,n[B>>2]=n[k>>2],cMe(s,B,c,f),Ka(m),C=d}function cMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,B=d+4|0,k=d,m=Pl(uMe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Qg(B)|0,c=Wm(c)|0,pc(0,m|0,s|0,l|0,c|0,Wm(f)|0)|0,C=d}function uMe(){var s=0;return o[7992]|0||(fMe(10744),s=7992,n[s>>2]=1,n[s+4>>2]=0),10744}function Wm(s){return s=s|0,AMe(s)|0}function AMe(s){return s=s|0,s&255|0}function fMe(s){s=s|0,Sl(s,pMe()|0,3)}function pMe(){return 1756}function hMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;switch(se=C,C=C+32|0,k=se+8|0,Q=se+4|0,O=se+20|0,M=se,OF(s,0),f=AUe(l)|0,n[k>>2]=0,q=k+4|0,n[q>>2]=0,n[k+8>>2]=0,f<<24>>24){case 0:{o[O>>0]=0,gMe(Q,c,O),uD(s,Q)|0,qA(Q);break}case 8:{q=DT(l)|0,o[O>>0]=8,xc(M,n[q+4>>2]|0),dMe(Q,c,O,M,q+8|0),uD(s,Q)|0,qA(Q);break}case 9:{if(m=DT(l)|0,l=n[m+4>>2]|0,l|0)for(B=k+8|0,d=m+12|0;l=l+-1|0,xc(Q,n[d>>2]|0),f=n[q>>2]|0,f>>>0<(n[B>>2]|0)>>>0?(n[f>>2]=n[Q>>2],n[q>>2]=(n[q>>2]|0)+4):gT(k,Q),l;)d=d+4|0;o[O>>0]=9,xc(M,n[m+8>>2]|0),mMe(Q,c,O,M,k),uD(s,Q)|0,qA(Q);break}default:q=DT(l)|0,o[O>>0]=f,xc(M,n[q+4>>2]|0),yMe(Q,c,O,M),uD(s,Q)|0,qA(Q)}$A(k),C=se}function gMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Va(d),l=da(l)|0,QMe(s,l,o[c>>0]|0),Ka(d),C=f}function uD(s,l){s=s|0,l=l|0;var c=0;return c=n[s>>2]|0,c|0&&PA(c|0),n[s>>2]=n[l>>2],n[l>>2]=0,s|0}function dMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+32|0,k=m+16|0,B=m+8|0,Q=m,Va(B),l=da(l)|0,c=o[c>>0]|0,n[Q>>2]=n[f>>2],d=n[d>>2]|0,n[k>>2]=n[Q>>2],SMe(s,l,c,k,d),Ka(B),C=m}function mMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0;m=C,C=C+32|0,Q=m+24|0,B=m+16|0,O=m+12|0,k=m,Va(B),l=da(l)|0,c=o[c>>0]|0,n[O>>2]=n[f>>2],mT(k,d),n[Q>>2]=n[O>>2],BMe(s,l,c,Q,k),$A(k),Ka(B),C=m}function yMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Va(m),l=da(l)|0,c=o[c>>0]|0,n[k>>2]=n[f>>2],n[B>>2]=n[k>>2],EMe(s,l,c,B),Ka(m),C=d}function EMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+4|0,k=d,B=Pl(CMe()|0)|0,c=Wm(c)|0,n[k>>2]=n[f>>2],n[m>>2]=n[k>>2],AD(s,oo(0,B|0,l|0,c|0,Qg(m)|0)|0),C=d}function CMe(){var s=0;return o[8e3]|0||(wMe(10756),s=8e3,n[s>>2]=1,n[s+4>>2]=0),10756}function AD(s,l){s=s|0,l=l|0,OF(s,l)}function wMe(s){s=s|0,Sl(s,IMe()|0,2)}function IMe(){return 1772}function BMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0;m=C,C=C+32|0,Q=m+16|0,O=m+12|0,B=m,k=Pl(vMe()|0)|0,c=Wm(c)|0,n[O>>2]=n[f>>2],n[Q>>2]=n[O>>2],f=Qg(Q)|0,n[B>>2]=n[d>>2],Q=d+4|0,n[B+4>>2]=n[Q>>2],O=d+8|0,n[B+8>>2]=n[O>>2],n[O>>2]=0,n[Q>>2]=0,n[d>>2]=0,AD(s,pc(0,k|0,l|0,c|0,f|0,ET(B)|0)|0),$A(B),C=m}function vMe(){var s=0;return o[8008]|0||(DMe(10768),s=8008,n[s>>2]=1,n[s+4>>2]=0),10768}function DMe(s){s=s|0,Sl(s,PMe()|0,3)}function PMe(){return 1784}function SMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,k=m+4|0,Q=m,B=Pl(xMe()|0)|0,c=Wm(c)|0,n[Q>>2]=n[f>>2],n[k>>2]=n[Q>>2],f=Qg(k)|0,AD(s,pc(0,B|0,l|0,c|0,f|0,yT(d)|0)|0),C=m}function xMe(){var s=0;return o[8016]|0||(bMe(10780),s=8016,n[s>>2]=1,n[s+4>>2]=0),10780}function bMe(s){s=s|0,Sl(s,kMe()|0,3)}function kMe(){return 1800}function QMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=Pl(FMe()|0)|0,AD(s,Qn(0,f|0,l|0,Wm(c)|0)|0)}function FMe(){var s=0;return o[8024]|0||(TMe(10792),s=8024,n[s>>2]=1,n[s+4>>2]=0),10792}function TMe(s){s=s|0,Sl(s,RMe()|0,1)}function RMe(){return 1816}function NMe(){LMe(),MMe(),OMe()}function LMe(){n[2702]=d7(65536)|0}function MMe(){iOe(10856)}function OMe(){UMe(10816)}function UMe(s){s=s|0,_Me(s,5044),HMe(s)|0}function _Me(s,l){s=s|0,l=l|0;var c=0;c=F9()|0,n[s>>2]=c,ZMe(c,l),xp(n[s>>2]|0)}function HMe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,jMe()|0),s|0}function jMe(){var s=0;return o[8032]|0||(q9(10820),tr(64,10820,U|0)|0,s=8032,n[s>>2]=1,n[s+4>>2]=0),Rr(10820)|0||q9(10820),10820}function q9(s){s=s|0,YMe(s),kg(s,25)}function qMe(s){s=s|0,GMe(s+24|0)}function GMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function YMe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,18,l,JMe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function WMe(s,l){s=s|0,l=l|0,VMe(s,l)}function VMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;c=C,C=C+16|0,f=c,d=c+4|0,Sg(d,l),n[f>>2]=xg(d,l)|0,KMe(s,f),C=c}function KMe(s,l){s=s|0,l=l|0,G9(s+4|0,n[l>>2]|0),o[s+8>>0]=1}function G9(s,l){s=s|0,l=l|0,n[s>>2]=l}function JMe(){return 1824}function zMe(s){return s=s|0,XMe(s)|0}function XMe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(4)|0,Sg(d,s),G9(k,xg(d,s)|0),m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],T9(s,m,d),n[f>>2]=s,C=c,l|0}function Wa(s){s=s|0;var l=0,c=0;return s=s+7&-8,s>>>0<=32768&&(l=n[2701]|0,s>>>0<=(65536-l|0)>>>0)?(c=(n[2702]|0)+l|0,n[2701]=l+s,s=c):(s=d7(s+8|0)|0,n[s>>2]=n[2703],n[2703]=s,s=s+8|0),s|0}function ZMe(s,l){s=s|0,l=l|0,n[s>>2]=$Me()|0,n[s+4>>2]=eOe()|0,n[s+12>>2]=l,n[s+8>>2]=tOe()|0,n[s+32>>2]=9}function $Me(){return 11744}function eOe(){return 1832}function tOe(){return lD()|0}function rOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(nOe(c),gt(c)):l|0&>(l)}function nOe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function iOe(s){s=s|0,sOe(s,5052),oOe(s)|0,aOe(s,5058,26)|0,lOe(s,5069,1)|0,cOe(s,5077,10)|0,uOe(s,5087,19)|0,AOe(s,5094,27)|0}function sOe(s,l){s=s|0,l=l|0;var c=0;c=nUe()|0,n[s>>2]=c,iUe(c,l),xp(n[s>>2]|0)}function oOe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,q4e()|0),s|0}function aOe(s,l,c){return s=s|0,l=l|0,c=c|0,D4e(s,pn(l)|0,c,0),s|0}function lOe(s,l,c){return s=s|0,l=l|0,c=c|0,u4e(s,pn(l)|0,c,0),s|0}function cOe(s,l,c){return s=s|0,l=l|0,c=c|0,jOe(s,pn(l)|0,c,0),s|0}function uOe(s,l,c){return s=s|0,l=l|0,c=c|0,SOe(s,pn(l)|0,c,0),s|0}function Y9(s,l){s=s|0,l=l|0;var c=0,f=0;e:for(;;){for(c=n[2703]|0;;){if((c|0)==(l|0))break e;if(f=n[c>>2]|0,n[2703]=f,!c)c=f;else break}gt(c)}n[2701]=s}function AOe(s,l,c){return s=s|0,l=l|0,c=c|0,fOe(s,pn(l)|0,c,0),s|0}function fOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=CT()|0,s=pOe(c)|0,hn(m,l,d,s,hOe(c,f)|0,f)}function CT(){var s=0,l=0;if(o[8040]|0||(V9(10860),tr(65,10860,U|0)|0,l=8040,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10860)|0)){s=10860,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));V9(10860)}return 10860}function pOe(s){return s=s|0,s|0}function hOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=CT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(W9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(gOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function W9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function gOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=dOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,mOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,W9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,yOe(s,d),EOe(d),C=k;return}}function dOe(s){return s=s|0,536870911}function mOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function yOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function EOe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function V9(s){s=s|0,IOe(s)}function COe(s){s=s|0,wOe(s+24|0)}function wOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function IOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,11,l,BOe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function BOe(){return 1840}function vOe(s,l,c){s=s|0,l=l|0,c=c|0,POe(n[(DOe(s)|0)>>2]|0,l,c)}function DOe(s){return s=s|0,(n[(CT()|0)+24>>2]|0)+(s<<3)|0}function POe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+1|0,d=f,Sg(m,l),l=xg(m,l)|0,Sg(d,c),c=xg(d,c)|0,tf[s&31](l,c),C=f}function SOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=wT()|0,s=xOe(c)|0,hn(m,l,d,s,bOe(c,f)|0,f)}function wT(){var s=0,l=0;if(o[8048]|0||(J9(10896),tr(66,10896,U|0)|0,l=8048,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10896)|0)){s=10896,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));J9(10896)}return 10896}function xOe(s){return s=s|0,s|0}function bOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=wT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(K9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(kOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function K9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function kOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=QOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,FOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,K9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,TOe(s,d),ROe(d),C=k;return}}function QOe(s){return s=s|0,536870911}function FOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function TOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ROe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function J9(s){s=s|0,MOe(s)}function NOe(s){s=s|0,LOe(s+24|0)}function LOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function MOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,11,l,OOe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function OOe(){return 1852}function UOe(s,l){return s=s|0,l=l|0,HOe(n[(_Oe(s)|0)>>2]|0,l)|0}function _Oe(s){return s=s|0,(n[(wT()|0)+24>>2]|0)+(s<<3)|0}function HOe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Sg(f,l),l=xg(f,l)|0,l=oD(Ng[s&31](l)|0)|0,C=c,l|0}function jOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=IT()|0,s=qOe(c)|0,hn(m,l,d,s,GOe(c,f)|0,f)}function IT(){var s=0,l=0;if(o[8056]|0||(X9(10932),tr(67,10932,U|0)|0,l=8056,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10932)|0)){s=10932,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));X9(10932)}return 10932}function qOe(s){return s=s|0,s|0}function GOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=IT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(z9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(YOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function YOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=WOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,VOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,z9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,KOe(s,d),JOe(d),C=k;return}}function WOe(s){return s=s|0,536870911}function VOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function KOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JOe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function X9(s){s=s|0,ZOe(s)}function zOe(s){s=s|0,XOe(s+24|0)}function XOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function ZOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,7,l,$Oe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function $Oe(){return 1860}function e4e(s,l,c){return s=s|0,l=l|0,c=c|0,r4e(n[(t4e(s)|0)>>2]|0,l,c)|0}function t4e(s){return s=s|0,(n[(IT()|0)+24>>2]|0)+(s<<3)|0}function r4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+32|0,B=f+12|0,m=f+8|0,k=f,Q=f+16|0,d=f+4|0,n4e(Q,l),i4e(k,Q,l),vp(d,c),c=Dp(d,c)|0,n[B>>2]=n[k>>2],_w[s&15](m,B,c),c=s4e(m)|0,qA(m),Pp(d),C=f,c|0}function n4e(s,l){s=s|0,l=l|0}function i4e(s,l,c){s=s|0,l=l|0,c=c|0,o4e(s,c)}function s4e(s){return s=s|0,da(s)|0}function o4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+16|0,c=d,f=l,f&1?(a4e(c,0),ii(f|0,c|0)|0,l4e(s,c),c4e(c)):n[s>>2]=n[l>>2],C=d}function a4e(s,l){s=s|0,l=l|0,e5(s,l),n[s+4>>2]=0,o[s+8>>0]=0}function l4e(s,l){s=s|0,l=l|0,n[s>>2]=n[l+4>>2]}function c4e(s){s=s|0,o[s+8>>0]=0}function u4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=BT()|0,s=A4e(c)|0,hn(m,l,d,s,f4e(c,f)|0,f)}function BT(){var s=0,l=0;if(o[8064]|0||($9(10968),tr(68,10968,U|0)|0,l=8064,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10968)|0)){s=10968,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));$9(10968)}return 10968}function A4e(s){return s=s|0,s|0}function f4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=BT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(Z9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(p4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function Z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function p4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=h4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,g4e(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,Z9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,d4e(s,d),m4e(d),C=k;return}}function h4e(s){return s=s|0,536870911}function g4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function d4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function m4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function $9(s){s=s|0,C4e(s)}function y4e(s){s=s|0,E4e(s+24|0)}function E4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function C4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,1,l,w4e()|0,5),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function w4e(){return 1872}function I4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,v4e(n[(B4e(s)|0)>>2]|0,l,c,f,d,m)}function B4e(s){return s=s|0,(n[(BT()|0)+24>>2]|0)+(s<<3)|0}function v4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+32|0,k=B+16|0,Q=B+12|0,O=B+8|0,M=B+4|0,q=B,vp(k,l),l=Dp(k,l)|0,vp(Q,c),c=Dp(Q,c)|0,vp(O,f),f=Dp(O,f)|0,vp(M,d),d=Dp(M,d)|0,vp(q,m),m=Dp(q,m)|0,w7[s&1](l,c,f,d,m),Pp(q),Pp(M),Pp(O),Pp(Q),Pp(k),C=B}function D4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=vT()|0,s=P4e(c)|0,hn(m,l,d,s,S4e(c,f)|0,f)}function vT(){var s=0,l=0;if(o[8072]|0||(t7(11004),tr(69,11004,U|0)|0,l=8072,n[l>>2]=1,n[l+4>>2]=0),!(Rr(11004)|0)){s=11004,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t7(11004)}return 11004}function P4e(s){return s=s|0,s|0}function S4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=vT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(e7(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(x4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function e7(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function x4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=b4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,k4e(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,e7(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,Q4e(s,d),F4e(d),C=k;return}}function b4e(s){return s=s|0,536870911}function k4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function Q4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function F4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function t7(s){s=s|0,N4e(s)}function T4e(s){s=s|0,R4e(s+24|0)}function R4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function N4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,12,l,L4e()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function L4e(){return 1896}function M4e(s,l,c){s=s|0,l=l|0,c=c|0,U4e(n[(O4e(s)|0)>>2]|0,l,c)}function O4e(s){return s=s|0,(n[(vT()|0)+24>>2]|0)+(s<<3)|0}function U4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+4|0,d=f,_4e(m,l),l=H4e(m,l)|0,vp(d,c),c=Dp(d,c)|0,tf[s&31](l,c),Pp(d),C=f}function _4e(s,l){s=s|0,l=l|0}function H4e(s,l){return s=s|0,l=l|0,j4e(l)|0}function j4e(s){return s=s|0,s|0}function q4e(){var s=0;return o[8080]|0||(r7(11040),tr(70,11040,U|0)|0,s=8080,n[s>>2]=1,n[s+4>>2]=0),Rr(11040)|0||r7(11040),11040}function r7(s){s=s|0,W4e(s),kg(s,71)}function G4e(s){s=s|0,Y4e(s+24|0)}function Y4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function W4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,7,l,z4e()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function V4e(s){s=s|0,K4e(s)}function K4e(s){s=s|0,J4e(s)}function J4e(s){s=s|0,o[s+8>>0]=1}function z4e(){return 1936}function X4e(){return Z4e()|0}function Z4e(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,m=s+4|0,n[m>>2]=Vt(1)|0,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],$4e(f,m,d),n[c>>2]=f,C=l,s|0}function $4e(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1916,n[c+12>>2]=l,n[s+4>>2]=c}function eUe(s){s=s|0,Jm(s),gt(s)}function tUe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function rUe(s){s=s|0,gt(s)}function nUe(){var s=0;return o[8088]|0||(uUe(11076),tr(25,11076,U|0)|0,s=8088,n[s>>2]=1,n[s+4>>2]=0),11076}function iUe(s,l){s=s|0,l=l|0,n[s>>2]=sUe()|0,n[s+4>>2]=oUe()|0,n[s+12>>2]=l,n[s+8>>2]=aUe()|0,n[s+32>>2]=10}function sUe(){return 11745}function oUe(){return 1940}function aUe(){return aD()|0}function lUe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(cUe(c),gt(c)):l|0&>(l)}function cUe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function uUe(s){s=s|0,Bp(s)}function xc(s,l){s=s|0,l=l|0,n[s>>2]=l}function DT(s){return s=s|0,n[s>>2]|0}function AUe(s){return s=s|0,o[n[s>>2]>>0]|0}function fUe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,n[f>>2]=n[s>>2],pUe(l,f)|0,C=c}function pUe(s,l){s=s|0,l=l|0;var c=0;return c=hUe(n[s>>2]|0,l)|0,l=s+4|0,n[(n[l>>2]|0)+8>>2]=c,n[(n[l>>2]|0)+8>>2]|0}function hUe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Va(f),s=da(s)|0,l=gUe(s,n[l>>2]|0)|0,Ka(f),C=c,l|0}function Va(s){s=s|0,n[s>>2]=n[2701],n[s+4>>2]=n[2703]}function gUe(s,l){s=s|0,l=l|0;var c=0;return c=Pl(dUe()|0)|0,Qn(0,c|0,s|0,yT(l)|0)|0}function Ka(s){s=s|0,Y9(n[s>>2]|0,n[s+4>>2]|0)}function dUe(){var s=0;return o[8096]|0||(mUe(11120),s=8096,n[s>>2]=1,n[s+4>>2]=0),11120}function mUe(s){s=s|0,Sl(s,yUe()|0,1)}function yUe(){return 1948}function EUe(){CUe()}function CUe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;if(Oe=C,C=C+16|0,M=Oe+4|0,q=Oe,Ni(65536,10804,n[2702]|0,10812),c=P9()|0,l=n[c>>2]|0,s=n[l>>2]|0,s|0)for(f=n[c+8>>2]|0,c=n[c+4>>2]|0;uc(s|0,u[c>>0]|0|0,o[f>>0]|0),l=l+4|0,s=n[l>>2]|0,s;)f=f+1|0,c=c+1|0;if(s=S9()|0,l=n[s>>2]|0,l|0)do uu(l|0,n[s+4>>2]|0),s=s+8|0,l=n[s>>2]|0;while((l|0)!=0);uu(wUe()|0,5167),O=Gm()|0,s=n[O>>2]|0;e:do if(s|0){do IUe(n[s+4>>2]|0),s=n[s>>2]|0;while((s|0)!=0);if(s=n[O>>2]|0,s|0){Q=O;do{for(;d=s,s=n[s>>2]|0,d=n[d+4>>2]|0,!!(BUe(d)|0);)if(n[q>>2]=Q,n[M>>2]=n[q>>2],vUe(O,M)|0,!s)break e;if(DUe(d),Q=n[Q>>2]|0,l=n7(d)|0,m=Hi()|0,B=C,C=C+((1*(l<<2)|0)+15&-16)|0,k=C,C=C+((1*(l<<2)|0)+15&-16)|0,l=n[(U9(d)|0)>>2]|0,l|0)for(c=B,f=k;n[c>>2]=n[(Ym(n[l+4>>2]|0)|0)>>2],n[f>>2]=n[l+8>>2],l=n[l>>2]|0,l;)c=c+4|0,f=f+4|0;Fe=Ym(d)|0,l=PUe(d)|0,c=n7(d)|0,f=SUe(d)|0,Au(Fe|0,l|0,B|0,k|0,c|0,f|0,fT(d)|0),_i(m|0)}while((s|0)!=0)}}while(0);if(s=n[(pT()|0)>>2]|0,s|0)do Fe=s+4|0,O=hT(Fe)|0,d=Lw(O)|0,m=Rw(O)|0,B=(Nw(O)|0)+1|0,k=fD(O)|0,Q=i7(Fe)|0,O=Rr(O)|0,M=cD(Fe)|0,q=PT(Fe)|0,El(0,d|0,m|0,B|0,k|0,Q|0,O|0,M|0,q|0,ST(Fe)|0),s=n[s>>2]|0;while((s|0)!=0);s=n[(Gm()|0)>>2]|0;e:do if(s|0){t:for(;;){if(l=n[s+4>>2]|0,l|0&&(se=n[(Ym(l)|0)>>2]|0,Ge=n[(_9(l)|0)>>2]|0,Ge|0)){c=Ge;do{l=c+4|0,f=hT(l)|0;r:do if(f|0)switch(Rr(f)|0){case 0:break t;case 4:case 3:case 2:{k=Lw(f)|0,Q=Rw(f)|0,O=(Nw(f)|0)+1|0,M=fD(f)|0,q=Rr(f)|0,Fe=cD(l)|0,El(se|0,k|0,Q|0,O|0,M|0,0,q|0,Fe|0,PT(l)|0,ST(l)|0);break r}case 1:{B=Lw(f)|0,k=Rw(f)|0,Q=(Nw(f)|0)+1|0,O=fD(f)|0,M=i7(l)|0,q=Rr(f)|0,Fe=cD(l)|0,El(se|0,B|0,k|0,Q|0,O|0,M|0,q|0,Fe|0,PT(l)|0,ST(l)|0);break r}case 5:{O=Lw(f)|0,M=Rw(f)|0,q=(Nw(f)|0)+1|0,Fe=fD(f)|0,El(se|0,O|0,M|0,q|0,Fe|0,xUe(f)|0,Rr(f)|0,0,0,0);break r}default:break r}while(0);c=n[c>>2]|0}while((c|0)!=0)}if(s=n[s>>2]|0,!s)break e}Tt()}while(0);Ce(),C=Oe}function wUe(){return 11703}function IUe(s){s=s|0,o[s+40>>0]=0}function BUe(s){return s=s|0,(o[s+40>>0]|0)!=0|0}function vUe(s,l){return s=s|0,l=l|0,l=bUe(l)|0,s=n[l>>2]|0,n[l>>2]=n[s>>2],gt(s),n[l>>2]|0}function DUe(s){s=s|0,o[s+40>>0]=1}function n7(s){return s=s|0,n[s+20>>2]|0}function PUe(s){return s=s|0,n[s+8>>2]|0}function SUe(s){return s=s|0,n[s+32>>2]|0}function fD(s){return s=s|0,n[s+4>>2]|0}function i7(s){return s=s|0,n[s+4>>2]|0}function PT(s){return s=s|0,n[s+8>>2]|0}function ST(s){return s=s|0,n[s+16>>2]|0}function xUe(s){return s=s|0,n[s+20>>2]|0}function bUe(s){return s=s|0,n[s>>2]|0}function pD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0;Lt=C,C=C+16|0,se=Lt;do if(s>>>0<245){if(O=s>>>0<11?16:s+11&-8,s=O>>>3,q=n[2783]|0,c=q>>>s,c&3|0)return l=(c&1^1)+s|0,s=11172+(l<<1<<2)|0,c=s+8|0,f=n[c>>2]|0,d=f+8|0,m=n[d>>2]|0,(s|0)==(m|0)?n[2783]=q&~(1<>2]=s,n[c>>2]=m),qe=l<<3,n[f+4>>2]=qe|3,qe=f+qe+4|0,n[qe>>2]=n[qe>>2]|1,qe=d,C=Lt,qe|0;if(M=n[2785]|0,O>>>0>M>>>0){if(c|0)return l=2<>>12&16,l=l>>>B,c=l>>>5&8,l=l>>>c,d=l>>>2&4,l=l>>>d,s=l>>>1&2,l=l>>>s,f=l>>>1&1,f=(c|B|d|s|f)+(l>>>f)|0,l=11172+(f<<1<<2)|0,s=l+8|0,d=n[s>>2]|0,B=d+8|0,c=n[B>>2]|0,(l|0)==(c|0)?(s=q&~(1<>2]=l,n[s>>2]=c,s=q),m=(f<<3)-O|0,n[d+4>>2]=O|3,f=d+O|0,n[f+4>>2]=m|1,n[f+m>>2]=m,M|0&&(d=n[2788]|0,l=M>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=d,n[l+12>>2]=d,n[d+8>>2]=l,n[d+12>>2]=c),n[2785]=m,n[2788]=f,qe=B,C=Lt,qe|0;if(k=n[2784]|0,k){if(c=(k&0-k)+-1|0,B=c>>>12&16,c=c>>>B,m=c>>>5&8,c=c>>>m,Q=c>>>2&4,c=c>>>Q,f=c>>>1&2,c=c>>>f,s=c>>>1&1,s=n[11436+((m|B|Q|f|s)+(c>>>s)<<2)>>2]|0,c=(n[s+4>>2]&-8)-O|0,f=n[s+16+(((n[s+16>>2]|0)==0&1)<<2)>>2]|0,!f)Q=s,m=c;else{do B=(n[f+4>>2]&-8)-O|0,Q=B>>>0>>0,c=Q?B:c,s=Q?f:s,f=n[f+16+(((n[f+16>>2]|0)==0&1)<<2)>>2]|0;while((f|0)!=0);Q=s,m=c}if(B=Q+O|0,Q>>>0>>0){d=n[Q+24>>2]|0,l=n[Q+12>>2]|0;do if((l|0)==(Q|0)){if(s=Q+20|0,l=n[s>>2]|0,!l&&(s=Q+16|0,l=n[s>>2]|0,!l)){c=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0,c=l}else c=n[Q+8>>2]|0,n[c+12>>2]=l,n[l+8>>2]=c,c=l;while(0);do if(d|0){if(l=n[Q+28>>2]|0,s=11436+(l<<2)|0,(Q|0)==(n[s>>2]|0)){if(n[s>>2]=c,!c){n[2784]=k&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=d,l=n[Q+16>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),l=n[Q+20>>2]|0,l|0&&(n[c+20>>2]=l,n[l+24>>2]=c)}while(0);return m>>>0<16?(qe=m+O|0,n[Q+4>>2]=qe|3,qe=Q+qe+4|0,n[qe>>2]=n[qe>>2]|1):(n[Q+4>>2]=O|3,n[B+4>>2]=m|1,n[B+m>>2]=m,M|0&&(f=n[2788]|0,l=M>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=q|l,l=c,s=c+8|0),n[s>>2]=f,n[l+12>>2]=f,n[f+8>>2]=l,n[f+12>>2]=c),n[2785]=m,n[2788]=B),qe=Q+8|0,C=Lt,qe|0}else q=O}else q=O}else q=O}else if(s>>>0<=4294967231)if(s=s+11|0,O=s&-8,Q=n[2784]|0,Q){f=0-O|0,s=s>>>8,s?O>>>0>16777215?k=31:(q=(s+1048320|0)>>>16&8,Ue=s<>>16&4,Ue=Ue<>>16&2,k=14-(M|q|k)+(Ue<>>15)|0,k=O>>>(k+7|0)&1|k<<1):k=0,c=n[11436+(k<<2)>>2]|0;e:do if(!c)c=0,s=0,Ue=57;else for(s=0,B=O<<((k|0)==31?0:25-(k>>>1)|0),m=0;;){if(d=(n[c+4>>2]&-8)-O|0,d>>>0>>0)if(d)s=c,f=d;else{s=c,f=0,d=c,Ue=61;break e}if(d=n[c+20>>2]|0,c=n[c+16+(B>>>31<<2)>>2]|0,m=(d|0)==0|(d|0)==(c|0)?m:d,d=(c|0)==0,d){c=m,Ue=57;break}else B=B<<((d^1)&1)}while(0);if((Ue|0)==57){if((c|0)==0&(s|0)==0){if(s=2<>>12&16,q=q>>>B,m=q>>>5&8,q=q>>>m,k=q>>>2&4,q=q>>>k,M=q>>>1&2,q=q>>>M,c=q>>>1&1,s=0,c=n[11436+((m|B|k|M|c)+(q>>>c)<<2)>>2]|0}c?(d=c,Ue=61):(k=s,B=f)}if((Ue|0)==61)for(;;)if(Ue=0,c=(n[d+4>>2]&-8)-O|0,q=c>>>0>>0,c=q?c:f,s=q?d:s,d=n[d+16+(((n[d+16>>2]|0)==0&1)<<2)>>2]|0,d)f=c,Ue=61;else{k=s,B=c;break}if((k|0)!=0&&B>>>0<((n[2785]|0)-O|0)>>>0){if(m=k+O|0,k>>>0>=m>>>0)return qe=0,C=Lt,qe|0;d=n[k+24>>2]|0,l=n[k+12>>2]|0;do if((l|0)==(k|0)){if(s=k+20|0,l=n[s>>2]|0,!l&&(s=k+16|0,l=n[s>>2]|0,!l)){l=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0}else qe=n[k+8>>2]|0,n[qe+12>>2]=l,n[l+8>>2]=qe;while(0);do if(d){if(s=n[k+28>>2]|0,c=11436+(s<<2)|0,(k|0)==(n[c>>2]|0)){if(n[c>>2]=l,!l){f=Q&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=l,!l){f=Q;break}n[l+24>>2]=d,s=n[k+16>>2]|0,s|0&&(n[l+16>>2]=s,n[s+24>>2]=l),s=n[k+20>>2]|0,s&&(n[l+20>>2]=s,n[s+24>>2]=l),f=Q}else f=Q;while(0);do if(B>>>0>=16){if(n[k+4>>2]=O|3,n[m+4>>2]=B|1,n[m+B>>2]=B,l=B>>>3,B>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=m,n[l+12>>2]=m,n[m+8>>2]=l,n[m+12>>2]=c;break}if(l=B>>>8,l?B>>>0>16777215?l=31:(Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,l=14-(at|Ue|l)+(qe<>>15)|0,l=B>>>(l+7|0)&1|l<<1):l=0,c=11436+(l<<2)|0,n[m+28>>2]=l,s=m+16|0,n[s+4>>2]=0,n[s>>2]=0,s=1<>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}for(s=B<<((l|0)==31?0:25-(l>>>1)|0),c=n[c>>2]|0;;){if((n[c+4>>2]&-8|0)==(B|0)){Ue=97;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=96;break}}if((Ue|0)==96){n[f>>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}else if((Ue|0)==97){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=m,n[Ue>>2]=m,n[m+8>>2]=qe,n[m+12>>2]=c,n[m+24>>2]=0;break}}else qe=B+O|0,n[k+4>>2]=qe|3,qe=k+qe+4|0,n[qe>>2]=n[qe>>2]|1;while(0);return qe=k+8|0,C=Lt,qe|0}else q=O}else q=O;else q=-1;while(0);if(c=n[2785]|0,c>>>0>=q>>>0)return l=c-q|0,s=n[2788]|0,l>>>0>15?(qe=s+q|0,n[2788]=qe,n[2785]=l,n[qe+4>>2]=l|1,n[qe+l>>2]=l,n[s+4>>2]=q|3):(n[2785]=0,n[2788]=0,n[s+4>>2]=c|3,qe=s+c+4|0,n[qe>>2]=n[qe>>2]|1),qe=s+8|0,C=Lt,qe|0;if(B=n[2786]|0,B>>>0>q>>>0)return at=B-q|0,n[2786]=at,qe=n[2789]|0,Ue=qe+q|0,n[2789]=Ue,n[Ue+4>>2]=at|1,n[qe+4>>2]=q|3,qe=qe+8|0,C=Lt,qe|0;if(n[2901]|0?s=n[2903]|0:(n[2903]=4096,n[2902]=4096,n[2904]=-1,n[2905]=-1,n[2906]=0,n[2894]=0,s=se&-16^1431655768,n[se>>2]=s,n[2901]=s,s=4096),k=q+48|0,Q=q+47|0,m=s+Q|0,d=0-s|0,O=m&d,O>>>0<=q>>>0||(s=n[2893]|0,s|0&&(M=n[2891]|0,se=M+O|0,se>>>0<=M>>>0|se>>>0>s>>>0)))return qe=0,C=Lt,qe|0;e:do if(n[2894]&4)l=0,Ue=133;else{c=n[2789]|0;t:do if(c){for(f=11580;s=n[f>>2]|0,!(s>>>0<=c>>>0&&(Fe=f+4|0,(s+(n[Fe>>2]|0)|0)>>>0>c>>>0));)if(s=n[f+8>>2]|0,s)f=s;else{Ue=118;break t}if(l=m-B&d,l>>>0<2147483647)if(s=kp(l|0)|0,(s|0)==((n[f>>2]|0)+(n[Fe>>2]|0)|0)){if((s|0)!=-1){B=l,m=s,Ue=135;break e}}else f=s,Ue=126;else l=0}else Ue=118;while(0);do if((Ue|0)==118)if(c=kp(0)|0,(c|0)!=-1&&(l=c,Ge=n[2902]|0,Oe=Ge+-1|0,l=((Oe&l|0)==0?0:(Oe+l&0-Ge)-l|0)+O|0,Ge=n[2891]|0,Oe=l+Ge|0,l>>>0>q>>>0&l>>>0<2147483647)){if(Fe=n[2893]|0,Fe|0&&Oe>>>0<=Ge>>>0|Oe>>>0>Fe>>>0){l=0;break}if(s=kp(l|0)|0,(s|0)==(c|0)){B=l,m=c,Ue=135;break e}else f=s,Ue=126}else l=0;while(0);do if((Ue|0)==126){if(c=0-l|0,!(k>>>0>l>>>0&(l>>>0<2147483647&(f|0)!=-1)))if((f|0)==-1){l=0;break}else{B=l,m=f,Ue=135;break e}if(s=n[2903]|0,s=Q-l+s&0-s,s>>>0>=2147483647){B=l,m=f,Ue=135;break e}if((kp(s|0)|0)==-1){kp(c|0)|0,l=0;break}else{B=s+l|0,m=f,Ue=135;break e}}while(0);n[2894]=n[2894]|4,Ue=133}while(0);if((Ue|0)==133&&O>>>0<2147483647&&(at=kp(O|0)|0,Fe=kp(0)|0,et=Fe-at|0,Xe=et>>>0>(q+40|0)>>>0,!((at|0)==-1|Xe^1|at>>>0>>0&((at|0)!=-1&(Fe|0)!=-1)^1))&&(B=Xe?et:l,m=at,Ue=135),(Ue|0)==135){l=(n[2891]|0)+B|0,n[2891]=l,l>>>0>(n[2892]|0)>>>0&&(n[2892]=l),Q=n[2789]|0;do if(Q){for(l=11580;;){if(s=n[l>>2]|0,c=l+4|0,f=n[c>>2]|0,(m|0)==(s+f|0)){Ue=145;break}if(d=n[l+8>>2]|0,d)l=d;else break}if((Ue|0)==145&&(n[l+12>>2]&8|0)==0&&Q>>>0>>0&Q>>>0>=s>>>0){n[c>>2]=f+B,qe=Q+8|0,qe=(qe&7|0)==0?0:0-qe&7,Ue=Q+qe|0,qe=(n[2786]|0)+(B-qe)|0,n[2789]=Ue,n[2786]=qe,n[Ue+4>>2]=qe|1,n[Ue+qe+4>>2]=40,n[2790]=n[2905];break}for(m>>>0<(n[2787]|0)>>>0&&(n[2787]=m),c=m+B|0,l=11580;;){if((n[l>>2]|0)==(c|0)){Ue=153;break}if(s=n[l+8>>2]|0,s)l=s;else break}if((Ue|0)==153&&(n[l+12>>2]&8|0)==0){n[l>>2]=m,M=l+4|0,n[M>>2]=(n[M>>2]|0)+B,M=m+8|0,M=m+((M&7|0)==0?0:0-M&7)|0,l=c+8|0,l=c+((l&7|0)==0?0:0-l&7)|0,O=M+q|0,k=l-M-q|0,n[M+4>>2]=q|3;do if((l|0)!=(Q|0)){if((l|0)==(n[2788]|0)){qe=(n[2785]|0)+k|0,n[2785]=qe,n[2788]=O,n[O+4>>2]=qe|1,n[O+qe>>2]=qe;break}if(s=n[l+4>>2]|0,(s&3|0)==1){B=s&-8,f=s>>>3;e:do if(s>>>0<256)if(s=n[l+8>>2]|0,c=n[l+12>>2]|0,(c|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=c,n[c+8>>2]=s;break}else{m=n[l+24>>2]|0,s=n[l+12>>2]|0;do if((s|0)==(l|0)){if(f=l+16|0,c=f+4|0,s=n[c>>2]|0,!s)if(s=n[f>>2]|0,s)c=f;else{s=0;break}for(;;){if(f=s+20|0,d=n[f>>2]|0,d|0){s=d,c=f;continue}if(f=s+16|0,d=n[f>>2]|0,d)s=d,c=f;else break}n[c>>2]=0}else qe=n[l+8>>2]|0,n[qe+12>>2]=s,n[s+8>>2]=qe;while(0);if(!m)break;c=n[l+28>>2]|0,f=11436+(c<<2)|0;do if((l|0)!=(n[f>>2]|0)){if(n[m+16+(((n[m+16>>2]|0)!=(l|0)&1)<<2)>>2]=s,!s)break e}else{if(n[f>>2]=s,s|0)break;n[2784]=n[2784]&~(1<>2]=m,c=l+16|0,f=n[c>>2]|0,f|0&&(n[s+16>>2]=f,n[f+24>>2]=s),c=n[c+4>>2]|0,!c)break;n[s+20>>2]=c,n[c+24>>2]=s}while(0);l=l+B|0,d=B+k|0}else d=k;if(l=l+4|0,n[l>>2]=n[l>>2]&-2,n[O+4>>2]=d|1,n[O+d>>2]=d,l=d>>>3,d>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=O,n[l+12>>2]=O,n[O+8>>2]=l,n[O+12>>2]=c;break}l=d>>>8;do if(!l)l=0;else{if(d>>>0>16777215){l=31;break}Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,l=14-(at|Ue|l)+(qe<>>15)|0,l=d>>>(l+7|0)&1|l<<1}while(0);if(f=11436+(l<<2)|0,n[O+28>>2]=l,s=O+16|0,n[s+4>>2]=0,n[s>>2]=0,s=n[2784]|0,c=1<>2]=O,n[O+24>>2]=f,n[O+12>>2]=O,n[O+8>>2]=O;break}for(s=d<<((l|0)==31?0:25-(l>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){Ue=194;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=193;break}}if((Ue|0)==193){n[f>>2]=O,n[O+24>>2]=c,n[O+12>>2]=O,n[O+8>>2]=O;break}else if((Ue|0)==194){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=O,n[Ue>>2]=O,n[O+8>>2]=qe,n[O+12>>2]=c,n[O+24>>2]=0;break}}else qe=(n[2786]|0)+k|0,n[2786]=qe,n[2789]=O,n[O+4>>2]=qe|1;while(0);return qe=M+8|0,C=Lt,qe|0}for(l=11580;s=n[l>>2]|0,!(s>>>0<=Q>>>0&&(qe=s+(n[l+4>>2]|0)|0,qe>>>0>Q>>>0));)l=n[l+8>>2]|0;d=qe+-47|0,s=d+8|0,s=d+((s&7|0)==0?0:0-s&7)|0,d=Q+16|0,s=s>>>0>>0?Q:s,l=s+8|0,c=m+8|0,c=(c&7|0)==0?0:0-c&7,Ue=m+c|0,c=B+-40-c|0,n[2789]=Ue,n[2786]=c,n[Ue+4>>2]=c|1,n[Ue+c+4>>2]=40,n[2790]=n[2905],c=s+4|0,n[c>>2]=27,n[l>>2]=n[2895],n[l+4>>2]=n[2896],n[l+8>>2]=n[2897],n[l+12>>2]=n[2898],n[2895]=m,n[2896]=B,n[2898]=0,n[2897]=l,l=s+24|0;do Ue=l,l=l+4|0,n[l>>2]=7;while((Ue+8|0)>>>0>>0);if((s|0)!=(Q|0)){if(m=s-Q|0,n[c>>2]=n[c>>2]&-2,n[Q+4>>2]=m|1,n[s>>2]=m,l=m>>>3,m>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=Q,n[l+12>>2]=Q,n[Q+8>>2]=l,n[Q+12>>2]=c;break}if(l=m>>>8,l?m>>>0>16777215?c=31:(Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,c=14-(at|Ue|c)+(qe<>>15)|0,c=m>>>(c+7|0)&1|c<<1):c=0,f=11436+(c<<2)|0,n[Q+28>>2]=c,n[Q+20>>2]=0,n[d>>2]=0,l=n[2784]|0,s=1<>2]=Q,n[Q+24>>2]=f,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}for(s=m<<((c|0)==31?0:25-(c>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(m|0)){Ue=216;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=215;break}}if((Ue|0)==215){n[f>>2]=Q,n[Q+24>>2]=c,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}else if((Ue|0)==216){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=Q,n[Ue>>2]=Q,n[Q+8>>2]=qe,n[Q+12>>2]=c,n[Q+24>>2]=0;break}}}else{qe=n[2787]|0,(qe|0)==0|m>>>0>>0&&(n[2787]=m),n[2895]=m,n[2896]=B,n[2898]=0,n[2792]=n[2901],n[2791]=-1,l=0;do qe=11172+(l<<1<<2)|0,n[qe+12>>2]=qe,n[qe+8>>2]=qe,l=l+1|0;while((l|0)!=32);qe=m+8|0,qe=(qe&7|0)==0?0:0-qe&7,Ue=m+qe|0,qe=B+-40-qe|0,n[2789]=Ue,n[2786]=qe,n[Ue+4>>2]=qe|1,n[Ue+qe+4>>2]=40,n[2790]=n[2905]}while(0);if(l=n[2786]|0,l>>>0>q>>>0)return at=l-q|0,n[2786]=at,qe=n[2789]|0,Ue=qe+q|0,n[2789]=Ue,n[Ue+4>>2]=at|1,n[qe+4>>2]=q|3,qe=qe+8|0,C=Lt,qe|0}return n[(Vm()|0)>>2]=12,qe=0,C=Lt,qe|0}function hD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(!!s){c=s+-8|0,d=n[2787]|0,s=n[s+-4>>2]|0,l=s&-8,Q=c+l|0;do if(s&1)k=c,B=c;else{if(f=n[c>>2]|0,!(s&3)||(B=c+(0-f)|0,m=f+l|0,B>>>0>>0))return;if((B|0)==(n[2788]|0)){if(s=Q+4|0,l=n[s>>2]|0,(l&3|0)!=3){k=B,l=m;break}n[2785]=m,n[s>>2]=l&-2,n[B+4>>2]=m|1,n[B+m>>2]=m;return}if(c=f>>>3,f>>>0<256)if(s=n[B+8>>2]|0,l=n[B+12>>2]|0,(l|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=l,n[l+8>>2]=s,k=B,l=m;break}d=n[B+24>>2]|0,s=n[B+12>>2]|0;do if((s|0)==(B|0)){if(c=B+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{s=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0}else k=n[B+8>>2]|0,n[k+12>>2]=s,n[s+8>>2]=k;while(0);if(d){if(l=n[B+28>>2]|0,c=11436+(l<<2)|0,(B|0)==(n[c>>2]|0)){if(n[c>>2]=s,!s){n[2784]=n[2784]&~(1<>2]|0)!=(B|0)&1)<<2)>>2]=s,!s){k=B,l=m;break}n[s+24>>2]=d,l=B+16|0,c=n[l>>2]|0,c|0&&(n[s+16>>2]=c,n[c+24>>2]=s),l=n[l+4>>2]|0,l?(n[s+20>>2]=l,n[l+24>>2]=s,k=B,l=m):(k=B,l=m)}else k=B,l=m}while(0);if(!(B>>>0>=Q>>>0)&&(s=Q+4|0,f=n[s>>2]|0,!!(f&1))){if(f&2)n[s>>2]=f&-2,n[k+4>>2]=l|1,n[B+l>>2]=l,d=l;else{if(s=n[2788]|0,(Q|0)==(n[2789]|0)){if(Q=(n[2786]|0)+l|0,n[2786]=Q,n[2789]=k,n[k+4>>2]=Q|1,(k|0)!=(s|0))return;n[2788]=0,n[2785]=0;return}if((Q|0)==(s|0)){Q=(n[2785]|0)+l|0,n[2785]=Q,n[2788]=B,n[k+4>>2]=Q|1,n[B+Q>>2]=Q;return}d=(f&-8)+l|0,c=f>>>3;do if(f>>>0<256)if(l=n[Q+8>>2]|0,s=n[Q+12>>2]|0,(s|0)==(l|0)){n[2783]=n[2783]&~(1<>2]=s,n[s+8>>2]=l;break}else{m=n[Q+24>>2]|0,s=n[Q+12>>2]|0;do if((s|0)==(Q|0)){if(c=Q+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{c=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0,c=s}else c=n[Q+8>>2]|0,n[c+12>>2]=s,n[s+8>>2]=c,c=s;while(0);if(m|0){if(s=n[Q+28>>2]|0,l=11436+(s<<2)|0,(Q|0)==(n[l>>2]|0)){if(n[l>>2]=c,!c){n[2784]=n[2784]&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=m,s=Q+16|0,l=n[s>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),s=n[s+4>>2]|0,s|0&&(n[c+20>>2]=s,n[s+24>>2]=c)}}while(0);if(n[k+4>>2]=d|1,n[B+d>>2]=d,(k|0)==(n[2788]|0)){n[2785]=d;return}}if(s=d>>>3,d>>>0<256){c=11172+(s<<1<<2)|0,l=n[2783]|0,s=1<>2]|0):(n[2783]=l|s,s=c,l=c+8|0),n[l>>2]=k,n[s+12>>2]=k,n[k+8>>2]=s,n[k+12>>2]=c;return}s=d>>>8,s?d>>>0>16777215?s=31:(B=(s+1048320|0)>>>16&8,Q=s<>>16&4,Q=Q<>>16&2,s=14-(m|B|s)+(Q<>>15)|0,s=d>>>(s+7|0)&1|s<<1):s=0,f=11436+(s<<2)|0,n[k+28>>2]=s,n[k+20>>2]=0,n[k+16>>2]=0,l=n[2784]|0,c=1<>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){s=73;break}if(f=c+16+(l>>>31<<2)|0,s=n[f>>2]|0,s)l=l<<1,c=s;else{s=72;break}}if((s|0)==72){n[f>>2]=k,n[k+24>>2]=c,n[k+12>>2]=k,n[k+8>>2]=k;break}else if((s|0)==73){B=c+8|0,Q=n[B>>2]|0,n[Q+12>>2]=k,n[B>>2]=k,n[k+8>>2]=Q,n[k+12>>2]=c,n[k+24>>2]=0;break}}else n[2784]=l|c,n[f>>2]=k,n[k+24>>2]=f,n[k+12>>2]=k,n[k+8>>2]=k;while(0);if(Q=(n[2791]|0)+-1|0,n[2791]=Q,!Q)s=11588;else return;for(;s=n[s>>2]|0,s;)s=s+8|0;n[2791]=-1}}}function kUe(){return 11628}function QUe(s){s=s|0;var l=0,c=0;return l=C,C=C+16|0,c=l,n[c>>2]=RUe(n[s+60>>2]|0)|0,s=gD(hc(6,c|0)|0)|0,C=l,s|0}function s7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0;q=C,C=C+48|0,O=q+16|0,m=q,d=q+32|0,k=s+28|0,f=n[k>>2]|0,n[d>>2]=f,Q=s+20|0,f=(n[Q>>2]|0)-f|0,n[d+4>>2]=f,n[d+8>>2]=l,n[d+12>>2]=c,f=f+c|0,B=s+60|0,n[m>>2]=n[B>>2],n[m+4>>2]=d,n[m+8>>2]=2,m=gD(Li(146,m|0)|0)|0;e:do if((f|0)!=(m|0)){for(l=2;!((m|0)<0);)if(f=f-m|0,Ge=n[d+4>>2]|0,se=m>>>0>Ge>>>0,d=se?d+8|0:d,l=(se<<31>>31)+l|0,Ge=m-(se?Ge:0)|0,n[d>>2]=(n[d>>2]|0)+Ge,se=d+4|0,n[se>>2]=(n[se>>2]|0)-Ge,n[O>>2]=n[B>>2],n[O+4>>2]=d,n[O+8>>2]=l,m=gD(Li(146,O|0)|0)|0,(f|0)==(m|0)){M=3;break e}n[s+16>>2]=0,n[k>>2]=0,n[Q>>2]=0,n[s>>2]=n[s>>2]|32,(l|0)==2?c=0:c=c-(n[d+4>>2]|0)|0}else M=3;while(0);return(M|0)==3&&(Ge=n[s+44>>2]|0,n[s+16>>2]=Ge+(n[s+48>>2]|0),n[k>>2]=Ge,n[Q>>2]=Ge),C=q,c|0}function FUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return d=C,C=C+32|0,m=d,f=d+20|0,n[m>>2]=n[s+60>>2],n[m+4>>2]=0,n[m+8>>2]=l,n[m+12>>2]=f,n[m+16>>2]=c,(gD(sa(140,m|0)|0)|0)<0?(n[f>>2]=-1,s=-1):s=n[f>>2]|0,C=d,s|0}function gD(s){return s=s|0,s>>>0>4294963200&&(n[(Vm()|0)>>2]=0-s,s=-1),s|0}function Vm(){return(TUe()|0)+64|0}function TUe(){return xT()|0}function xT(){return 2084}function RUe(s){return s=s|0,s|0}function NUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return d=C,C=C+32|0,f=d,n[s+36>>2]=1,(n[s>>2]&64|0)==0&&(n[f>>2]=n[s+60>>2],n[f+4>>2]=21523,n[f+8>>2]=d+16,fu(54,f|0)|0)&&(o[s+75>>0]=-1),f=s7(s,l,c)|0,C=d,f|0}function o7(s,l){s=s|0,l=l|0;var c=0,f=0;if(c=o[s>>0]|0,f=o[l>>0]|0,c<<24>>24==0||c<<24>>24!=f<<24>>24)s=f;else{do s=s+1|0,l=l+1|0,c=o[s>>0]|0,f=o[l>>0]|0;while(!(c<<24>>24==0||c<<24>>24!=f<<24>>24));s=f}return(c&255)-(s&255)|0}function LUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;e:do if(!c)s=0;else{for(;f=o[s>>0]|0,d=o[l>>0]|0,f<<24>>24==d<<24>>24;)if(c=c+-1|0,c)s=s+1|0,l=l+1|0;else{s=0;break e}s=(f&255)-(d&255)|0}while(0);return s|0}function a7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;Fe=C,C=C+224|0,M=Fe+120|0,q=Fe+80|0,Ge=Fe,Oe=Fe+136|0,f=q,d=f+40|0;do n[f>>2]=0,f=f+4|0;while((f|0)<(d|0));return n[M>>2]=n[c>>2],(bT(0,l,M,Ge,q)|0)<0?c=-1:((n[s+76>>2]|0)>-1?se=MUe(s)|0:se=0,c=n[s>>2]|0,O=c&32,(o[s+74>>0]|0)<1&&(n[s>>2]=c&-33),f=s+48|0,n[f>>2]|0?c=bT(s,l,M,Ge,q)|0:(d=s+44|0,m=n[d>>2]|0,n[d>>2]=Oe,B=s+28|0,n[B>>2]=Oe,k=s+20|0,n[k>>2]=Oe,n[f>>2]=80,Q=s+16|0,n[Q>>2]=Oe+80,c=bT(s,l,M,Ge,q)|0,m&&(ED[n[s+36>>2]&7](s,0,0)|0,c=(n[k>>2]|0)==0?-1:c,n[d>>2]=m,n[f>>2]=0,n[Q>>2]=0,n[B>>2]=0,n[k>>2]=0)),f=n[s>>2]|0,n[s>>2]=f|O,se|0&&OUe(s),c=(f&32|0)==0?c:-1),C=Fe,c|0}function bT(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0;ir=C,C=C+64|0,or=ir+16|0,Xt=ir,Lt=ir+24|0,Pr=ir+8|0,Nr=ir+20|0,n[or>>2]=l,at=(s|0)!=0,Ue=Lt+40|0,qe=Ue,Lt=Lt+39|0,Or=Pr+4|0,B=0,m=0,M=0;e:for(;;){do if((m|0)>-1)if((B|0)>(2147483647-m|0)){n[(Vm()|0)>>2]=75,m=-1;break}else{m=B+m|0;break}while(0);if(B=o[l>>0]|0,B<<24>>24)k=l;else{Xe=87;break}t:for(;;){switch(B<<24>>24){case 37:{B=k,Xe=9;break t}case 0:{B=k;break t}default:}et=k+1|0,n[or>>2]=et,B=o[et>>0]|0,k=et}t:do if((Xe|0)==9)for(;;){if(Xe=0,(o[k+1>>0]|0)!=37)break t;if(B=B+1|0,k=k+2|0,n[or>>2]=k,(o[k>>0]|0)==37)Xe=9;else break}while(0);if(B=B-l|0,at&&ss(s,l,B),B|0){l=k;continue}Q=k+1|0,B=(o[Q>>0]|0)+-48|0,B>>>0<10?(et=(o[k+2>>0]|0)==36,Fe=et?B:-1,M=et?1:M,Q=et?k+3|0:Q):Fe=-1,n[or>>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0;t:do if(k>>>0<32)for(O=0,q=B;;){if(B=1<>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0,k>>>0>=32)break;q=B}else O=0;while(0);if(B<<24>>24==42){if(k=Q+1|0,B=(o[k>>0]|0)+-48|0,B>>>0<10&&(o[Q+2>>0]|0)==36)n[d+(B<<2)>>2]=10,B=n[f+((o[k>>0]|0)+-48<<3)>>2]|0,M=1,Q=Q+3|0;else{if(M|0){m=-1;break}at?(M=(n[c>>2]|0)+(4-1)&~(4-1),B=n[M>>2]|0,n[c>>2]=M+4,M=0,Q=k):(B=0,M=0,Q=k)}n[or>>2]=Q,et=(B|0)<0,B=et?0-B|0:B,O=et?O|8192:O}else{if(B=l7(or)|0,(B|0)<0){m=-1;break}Q=n[or>>2]|0}do if((o[Q>>0]|0)==46){if((o[Q+1>>0]|0)!=42){n[or>>2]=Q+1,k=l7(or)|0,Q=n[or>>2]|0;break}if(q=Q+2|0,k=(o[q>>0]|0)+-48|0,k>>>0<10&&(o[Q+3>>0]|0)==36){n[d+(k<<2)>>2]=10,k=n[f+((o[q>>0]|0)+-48<<3)>>2]|0,Q=Q+4|0,n[or>>2]=Q;break}if(M|0){m=-1;break e}at?(et=(n[c>>2]|0)+(4-1)&~(4-1),k=n[et>>2]|0,n[c>>2]=et+4):k=0,n[or>>2]=q,Q=q}else k=-1;while(0);for(Oe=0;;){if(((o[Q>>0]|0)+-65|0)>>>0>57){m=-1;break e}if(et=Q+1|0,n[or>>2]=et,q=o[(o[Q>>0]|0)+-65+(5178+(Oe*58|0))>>0]|0,se=q&255,(se+-1|0)>>>0<8)Oe=se,Q=et;else break}if(!(q<<24>>24)){m=-1;break}Ge=(Fe|0)>-1;do if(q<<24>>24==19)if(Ge){m=-1;break e}else Xe=49;else{if(Ge){n[d+(Fe<<2)>>2]=se,Ge=f+(Fe<<3)|0,Fe=n[Ge+4>>2]|0,Xe=Xt,n[Xe>>2]=n[Ge>>2],n[Xe+4>>2]=Fe,Xe=49;break}if(!at){m=0;break e}c7(Xt,se,c)}while(0);if((Xe|0)==49&&(Xe=0,!at)){B=0,l=et;continue}Q=o[Q>>0]|0,Q=(Oe|0)!=0&(Q&15|0)==3?Q&-33:Q,Ge=O&-65537,Fe=(O&8192|0)==0?O:Ge;t:do switch(Q|0){case 110:switch((Oe&255)<<24>>24){case 0:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 1:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 2:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}case 3:{a[n[Xt>>2]>>1]=m,B=0,l=et;continue e}case 4:{o[n[Xt>>2]>>0]=m,B=0,l=et;continue e}case 6:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 7:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}default:{B=0,l=et;continue e}}case 112:{Q=120,k=k>>>0>8?k:8,l=Fe|8,Xe=61;break}case 88:case 120:{l=Fe,Xe=61;break}case 111:{Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,se=_Ue(l,Q,Ue)|0,Ge=qe-se|0,O=0,q=5642,k=(Fe&8|0)==0|(k|0)>(Ge|0)?k:Ge+1|0,Ge=Fe,Xe=67;break}case 105:case 100:if(Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,(Q|0)<0){l=dD(0,0,l|0,Q|0)|0,Q=De,O=Xt,n[O>>2]=l,n[O+4>>2]=Q,O=1,q=5642,Xe=66;break t}else{O=(Fe&2049|0)!=0&1,q=(Fe&2048|0)==0?(Fe&1|0)==0?5642:5644:5643,Xe=66;break t}case 117:{Q=Xt,O=0,q=5642,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,Xe=66;break}case 99:{o[Lt>>0]=n[Xt>>2],l=Lt,O=0,q=5642,se=Ue,Q=1,k=Ge;break}case 109:{Q=HUe(n[(Vm()|0)>>2]|0)|0,Xe=71;break}case 115:{Q=n[Xt>>2]|0,Q=Q|0?Q:5652,Xe=71;break}case 67:{n[Pr>>2]=n[Xt>>2],n[Or>>2]=0,n[Xt>>2]=Pr,se=-1,Q=Pr,Xe=75;break}case 83:{l=n[Xt>>2]|0,k?(se=k,Q=l,Xe=75):(Bs(s,32,B,0,Fe),l=0,Xe=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{B=qUe(s,+E[Xt>>3],B,k,Fe,Q)|0,l=et;continue e}default:O=0,q=5642,se=Ue,Q=k,k=Fe}while(0);t:do if((Xe|0)==61)Fe=Xt,Oe=n[Fe>>2]|0,Fe=n[Fe+4>>2]|0,se=UUe(Oe,Fe,Ue,Q&32)|0,q=(l&8|0)==0|(Oe|0)==0&(Fe|0)==0,O=q?0:2,q=q?5642:5642+(Q>>4)|0,Ge=l,l=Oe,Q=Fe,Xe=67;else if((Xe|0)==66)se=Km(l,Q,Ue)|0,Ge=Fe,Xe=67;else if((Xe|0)==71)Xe=0,Fe=jUe(Q,0,k)|0,Oe=(Fe|0)==0,l=Q,O=0,q=5642,se=Oe?Q+k|0:Fe,Q=Oe?k:Fe-Q|0,k=Ge;else if((Xe|0)==75){for(Xe=0,q=Q,l=0,k=0;O=n[q>>2]|0,!(!O||(k=u7(Nr,O)|0,(k|0)<0|k>>>0>(se-l|0)>>>0));)if(l=k+l|0,se>>>0>l>>>0)q=q+4|0;else break;if((k|0)<0){m=-1;break e}if(Bs(s,32,B,l,Fe),!l)l=0,Xe=84;else for(O=0;;){if(k=n[Q>>2]|0,!k){Xe=84;break t}if(k=u7(Nr,k)|0,O=k+O|0,(O|0)>(l|0)){Xe=84;break t}if(ss(s,Nr,k),O>>>0>=l>>>0){Xe=84;break}else Q=Q+4|0}}while(0);if((Xe|0)==67)Xe=0,Q=(l|0)!=0|(Q|0)!=0,Fe=(k|0)!=0|Q,Q=((Q^1)&1)+(qe-se)|0,l=Fe?se:Ue,se=Ue,Q=Fe?(k|0)>(Q|0)?k:Q:k,k=(k|0)>-1?Ge&-65537:Ge;else if((Xe|0)==84){Xe=0,Bs(s,32,B,l,Fe^8192),B=(B|0)>(l|0)?B:l,l=et;continue}Oe=se-l|0,Ge=(Q|0)<(Oe|0)?Oe:Q,Fe=Ge+O|0,B=(B|0)<(Fe|0)?Fe:B,Bs(s,32,B,Fe,k),ss(s,q,O),Bs(s,48,B,Fe,k^65536),Bs(s,48,Ge,Oe,0),ss(s,l,Oe),Bs(s,32,B,Fe,k^8192),l=et}e:do if((Xe|0)==87&&!s)if(!M)m=0;else{for(m=1;l=n[d+(m<<2)>>2]|0,!!l;)if(c7(f+(m<<3)|0,l,c),m=m+1|0,(m|0)>=10){m=1;break e}for(;;){if(n[d+(m<<2)>>2]|0){m=-1;break e}if(m=m+1|0,(m|0)>=10){m=1;break}}}while(0);return C=ir,m|0}function MUe(s){return s=s|0,0}function OUe(s){s=s|0}function ss(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]&32||ZUe(l,c,s)|0}function l7(s){s=s|0;var l=0,c=0,f=0;if(c=n[s>>2]|0,f=(o[c>>0]|0)+-48|0,f>>>0<10){l=0;do l=f+(l*10|0)|0,c=c+1|0,n[s>>2]=c,f=(o[c>>0]|0)+-48|0;while(f>>>0<10)}else l=0;return l|0}function c7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;e:do if(l>>>0<=20)do switch(l|0){case 9:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,n[s>>2]=l;break e}case 10:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=((l|0)<0)<<31>>31;break e}case 11:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=0;break e}case 12:{f=(n[c>>2]|0)+(8-1)&~(8-1),l=f,d=n[l>>2]|0,l=n[l+4>>2]|0,n[c>>2]=f+8,f=s,n[f>>2]=d,n[f+4>>2]=l;break e}case 13:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&65535)<<16>>16,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 14:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&65535,n[d+4>>2]=0;break e}case 15:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&255)<<24>>24,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 16:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&255,n[d+4>>2]=0;break e}case 17:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}case 18:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}default:break e}while(0);while(0)}function UUe(s,l,c,f){if(s=s|0,l=l|0,c=c|0,f=f|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=u[5694+(s&15)>>0]|0|f,s=mD(s|0,l|0,4)|0,l=De;while(!((s|0)==0&(l|0)==0));return c|0}function _Ue(s,l,c){if(s=s|0,l=l|0,c=c|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=s&7|48,s=mD(s|0,l|0,3)|0,l=De;while(!((s|0)==0&(l|0)==0));return c|0}function Km(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if(l>>>0>0|(l|0)==0&s>>>0>4294967295){for(;f=TT(s|0,l|0,10,0)|0,c=c+-1|0,o[c>>0]=f&255|48,f=s,s=FT(s|0,l|0,10,0)|0,l>>>0>9|(l|0)==9&f>>>0>4294967295;)l=De;l=s}else l=s;if(l)for(;c=c+-1|0,o[c>>0]=(l>>>0)%10|0|48,!(l>>>0<10);)l=(l>>>0)/10|0;return c|0}function HUe(s){return s=s|0,KUe(s,n[(VUe()|0)+188>>2]|0)|0}function jUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;m=l&255,f=(c|0)!=0;e:do if(f&(s&3|0)!=0)for(d=l&255;;){if((o[s>>0]|0)==d<<24>>24){B=6;break e}if(s=s+1|0,c=c+-1|0,f=(c|0)!=0,!(f&(s&3|0)!=0)){B=5;break}}else B=5;while(0);(B|0)==5&&(f?B=6:c=0);e:do if((B|0)==6&&(d=l&255,(o[s>>0]|0)!=d<<24>>24)){f=He(m,16843009)|0;t:do if(c>>>0>3){for(;m=n[s>>2]^f,!((m&-2139062144^-2139062144)&m+-16843009|0);)if(s=s+4|0,c=c+-4|0,c>>>0<=3){B=11;break t}}else B=11;while(0);if((B|0)==11&&!c){c=0;break}for(;;){if((o[s>>0]|0)==d<<24>>24)break e;if(s=s+1|0,c=c+-1|0,!c){c=0;break}}}while(0);return(c|0?s:0)|0}function Bs(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0;if(B=C,C=C+256|0,m=B,(c|0)>(f|0)&(d&73728|0)==0){if(d=c-f|0,zm(m|0,l|0,(d>>>0<256?d:256)|0)|0,d>>>0>255){l=c-f|0;do ss(s,m,256),d=d+-256|0;while(d>>>0>255);d=l&255}ss(s,m,d)}C=B}function u7(s,l){return s=s|0,l=l|0,s?s=YUe(s,l,0)|0:s=0,s|0}function qUe(s,l,c,f,d,m){s=s|0,l=+l,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0;bn=C,C=C+560|0,Q=bn+8|0,et=bn,ir=bn+524|0,Nr=ir,O=bn+512|0,n[et>>2]=0,Pr=O+12|0,A7(l)|0,(De|0)<0?(l=-l,or=1,Or=5659):(or=(d&2049|0)!=0&1,Or=(d&2048|0)==0?(d&1|0)==0?5660:5665:5662),A7(l)|0,Xt=De&2146435072;do if(Xt>>>0<2146435072|(Xt|0)==2146435072&0<0){if(Ge=+GUe(l,et)*2,B=Ge!=0,B&&(n[et>>2]=(n[et>>2]|0)+-1),at=m|32,(at|0)==97){Oe=m&32,se=(Oe|0)==0?Or:Or+9|0,q=or|2,B=12-f|0;do if(f>>>0>11|(B|0)==0)l=Ge;else{l=8;do B=B+-1|0,l=l*16;while((B|0)!=0);if((o[se>>0]|0)==45){l=-(l+(-Ge-l));break}else{l=Ge+l-l;break}}while(0);k=n[et>>2]|0,B=(k|0)<0?0-k|0:k,B=Km(B,((B|0)<0)<<31>>31,Pr)|0,(B|0)==(Pr|0)&&(B=O+11|0,o[B>>0]=48),o[B+-1>>0]=(k>>31&2)+43,M=B+-2|0,o[M>>0]=m+15,O=(f|0)<1,Q=(d&8|0)==0,B=ir;do Xt=~~l,k=B+1|0,o[B>>0]=u[5694+Xt>>0]|Oe,l=(l-+(Xt|0))*16,(k-Nr|0)==1&&!(Q&(O&l==0))?(o[k>>0]=46,B=B+2|0):B=k;while(l!=0);Xt=B-Nr|0,Nr=Pr-M|0,Pr=(f|0)!=0&(Xt+-2|0)<(f|0)?f+2|0:Xt,B=Nr+q+Pr|0,Bs(s,32,c,B,d),ss(s,se,q),Bs(s,48,c,B,d^65536),ss(s,ir,Xt),Bs(s,48,Pr-Xt|0,0,0),ss(s,M,Nr),Bs(s,32,c,B,d^8192);break}k=(f|0)<0?6:f,B?(B=(n[et>>2]|0)+-28|0,n[et>>2]=B,l=Ge*268435456):(l=Ge,B=n[et>>2]|0),Xt=(B|0)<0?Q:Q+288|0,Q=Xt;do qe=~~l>>>0,n[Q>>2]=qe,Q=Q+4|0,l=(l-+(qe>>>0))*1e9;while(l!=0);if((B|0)>0)for(O=Xt,q=Q;;){if(M=(B|0)<29?B:29,B=q+-4|0,B>>>0>=O>>>0){Q=0;do Ue=m7(n[B>>2]|0,0,M|0)|0,Ue=QT(Ue|0,De|0,Q|0,0)|0,qe=De,Xe=TT(Ue|0,qe|0,1e9,0)|0,n[B>>2]=Xe,Q=FT(Ue|0,qe|0,1e9,0)|0,B=B+-4|0;while(B>>>0>=O>>>0);Q&&(O=O+-4|0,n[O>>2]=Q)}for(Q=q;!(Q>>>0<=O>>>0);)if(B=Q+-4|0,!(n[B>>2]|0))Q=B;else break;if(B=(n[et>>2]|0)-M|0,n[et>>2]=B,(B|0)>0)q=Q;else break}else O=Xt;if((B|0)<0){f=((k+25|0)/9|0)+1|0,Fe=(at|0)==102;do{if(Oe=0-B|0,Oe=(Oe|0)<9?Oe:9,O>>>0>>0){M=(1<>>Oe,se=0,B=O;do qe=n[B>>2]|0,n[B>>2]=(qe>>>Oe)+se,se=He(qe&M,q)|0,B=B+4|0;while(B>>>0>>0);B=(n[O>>2]|0)==0?O+4|0:O,se?(n[Q>>2]=se,O=B,B=Q+4|0):(O=B,B=Q)}else O=(n[O>>2]|0)==0?O+4|0:O,B=Q;Q=Fe?Xt:O,Q=(B-Q>>2|0)>(f|0)?Q+(f<<2)|0:B,B=(n[et>>2]|0)+Oe|0,n[et>>2]=B}while((B|0)<0);B=O,f=Q}else B=O,f=Q;if(qe=Xt,B>>>0>>0){if(Q=(qe-B>>2)*9|0,M=n[B>>2]|0,M>>>0>=10){O=10;do O=O*10|0,Q=Q+1|0;while(M>>>0>=O>>>0)}}else Q=0;if(Fe=(at|0)==103,Xe=(k|0)!=0,O=k-((at|0)!=102?Q:0)+((Xe&Fe)<<31>>31)|0,(O|0)<(((f-qe>>2)*9|0)+-9|0)){if(O=O+9216|0,Oe=Xt+4+(((O|0)/9|0)+-1024<<2)|0,O=((O|0)%9|0)+1|0,(O|0)<9){M=10;do M=M*10|0,O=O+1|0;while((O|0)!=9)}else M=10;if(q=n[Oe>>2]|0,se=(q>>>0)%(M>>>0)|0,O=(Oe+4|0)==(f|0),O&(se|0)==0)O=Oe;else if(Ge=(((q>>>0)/(M>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,Ue=(M|0)/2|0,l=se>>>0>>0?.5:O&(se|0)==(Ue|0)?1:1.5,or&&(Ue=(o[Or>>0]|0)==45,l=Ue?-l:l,Ge=Ue?-Ge:Ge),O=q-se|0,n[Oe>>2]=O,Ge+l!=Ge){if(Ue=O+M|0,n[Oe>>2]=Ue,Ue>>>0>999999999)for(Q=Oe;O=Q+-4|0,n[Q>>2]=0,O>>>0>>0&&(B=B+-4|0,n[B>>2]=0),Ue=(n[O>>2]|0)+1|0,n[O>>2]=Ue,Ue>>>0>999999999;)Q=O;else O=Oe;if(Q=(qe-B>>2)*9|0,q=n[B>>2]|0,q>>>0>=10){M=10;do M=M*10|0,Q=Q+1|0;while(q>>>0>=M>>>0)}}else O=Oe;O=O+4|0,O=f>>>0>O>>>0?O:f,Ue=B}else O=f,Ue=B;for(at=O;;){if(at>>>0<=Ue>>>0){et=0;break}if(B=at+-4|0,!(n[B>>2]|0))at=B;else{et=1;break}}f=0-Q|0;do if(Fe)if(B=((Xe^1)&1)+k|0,(B|0)>(Q|0)&(Q|0)>-5?(M=m+-1|0,k=B+-1-Q|0):(M=m+-2|0,k=B+-1|0),B=d&8,B)Oe=B;else{if(et&&(Lt=n[at+-4>>2]|0,(Lt|0)!=0))if((Lt>>>0)%10|0)O=0;else{O=0,B=10;do B=B*10|0,O=O+1|0;while(!((Lt>>>0)%(B>>>0)|0|0))}else O=9;if(B=((at-qe>>2)*9|0)+-9|0,(M|32|0)==102){Oe=B-O|0,Oe=(Oe|0)>0?Oe:0,k=(k|0)<(Oe|0)?k:Oe,Oe=0;break}else{Oe=B+Q-O|0,Oe=(Oe|0)>0?Oe:0,k=(k|0)<(Oe|0)?k:Oe,Oe=0;break}}else M=m,Oe=d&8;while(0);if(Fe=k|Oe,q=(Fe|0)!=0&1,se=(M|32|0)==102,se)Xe=0,B=(Q|0)>0?Q:0;else{if(B=(Q|0)<0?f:Q,B=Km(B,((B|0)<0)<<31>>31,Pr)|0,O=Pr,(O-B|0)<2)do B=B+-1|0,o[B>>0]=48;while((O-B|0)<2);o[B+-1>>0]=(Q>>31&2)+43,B=B+-2|0,o[B>>0]=M,Xe=B,B=O-B|0}if(B=or+1+k+q+B|0,Bs(s,32,c,B,d),ss(s,Or,or),Bs(s,48,c,B,d^65536),se){M=Ue>>>0>Xt>>>0?Xt:Ue,Oe=ir+9|0,q=Oe,se=ir+8|0,O=M;do{if(Q=Km(n[O>>2]|0,0,Oe)|0,(O|0)==(M|0))(Q|0)==(Oe|0)&&(o[se>>0]=48,Q=se);else if(Q>>>0>ir>>>0){zm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}ss(s,Q,q-Q|0),O=O+4|0}while(O>>>0<=Xt>>>0);if(Fe|0&&ss(s,5710,1),O>>>0>>0&(k|0)>0)for(;;){if(Q=Km(n[O>>2]|0,0,Oe)|0,Q>>>0>ir>>>0){zm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}if(ss(s,Q,(k|0)<9?k:9),O=O+4|0,Q=k+-9|0,O>>>0>>0&(k|0)>9)k=Q;else{k=Q;break}}Bs(s,48,k+9|0,9,0)}else{if(Fe=et?at:Ue+4|0,(k|0)>-1){et=ir+9|0,Oe=(Oe|0)==0,f=et,q=0-Nr|0,se=ir+8|0,M=Ue;do{Q=Km(n[M>>2]|0,0,et)|0,(Q|0)==(et|0)&&(o[se>>0]=48,Q=se);do if((M|0)==(Ue|0)){if(O=Q+1|0,ss(s,Q,1),Oe&(k|0)<1){Q=O;break}ss(s,5710,1),Q=O}else{if(Q>>>0<=ir>>>0)break;zm(ir|0,48,Q+q|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}while(0);Nr=f-Q|0,ss(s,Q,(k|0)>(Nr|0)?Nr:k),k=k-Nr|0,M=M+4|0}while(M>>>0>>0&(k|0)>-1)}Bs(s,48,k+18|0,18,0),ss(s,Xe,Pr-Xe|0)}Bs(s,32,c,B,d^8192)}else ir=(m&32|0)!=0,B=or+3|0,Bs(s,32,c,B,d&-65537),ss(s,Or,or),ss(s,l!=l|!1?ir?5686:5690:ir?5678:5682,3),Bs(s,32,c,B,d^8192);while(0);return C=bn,((B|0)<(c|0)?c:B)|0}function A7(s){s=+s;var l=0;return E[v>>3]=s,l=n[v>>2]|0,De=n[v+4>>2]|0,l|0}function GUe(s,l){return s=+s,l=l|0,+ +f7(s,l)}function f7(s,l){s=+s,l=l|0;var c=0,f=0,d=0;switch(E[v>>3]=s,c=n[v>>2]|0,f=n[v+4>>2]|0,d=mD(c|0,f|0,52)|0,d&2047){case 0:{s!=0?(s=+f7(s*18446744073709552e3,l),c=(n[l>>2]|0)+-64|0):c=0,n[l>>2]=c;break}case 2047:break;default:n[l>>2]=(d&2047)+-1022,n[v>>2]=c,n[v+4>>2]=f&-2146435073|1071644672,s=+E[v>>3]}return+s}function YUe(s,l,c){s=s|0,l=l|0,c=c|0;do if(s){if(l>>>0<128){o[s>>0]=l,s=1;break}if(!(n[n[(WUe()|0)+188>>2]>>2]|0))if((l&-128|0)==57216){o[s>>0]=l,s=1;break}else{n[(Vm()|0)>>2]=84,s=-1;break}if(l>>>0<2048){o[s>>0]=l>>>6|192,o[s+1>>0]=l&63|128,s=2;break}if(l>>>0<55296|(l&-8192|0)==57344){o[s>>0]=l>>>12|224,o[s+1>>0]=l>>>6&63|128,o[s+2>>0]=l&63|128,s=3;break}if((l+-65536|0)>>>0<1048576){o[s>>0]=l>>>18|240,o[s+1>>0]=l>>>12&63|128,o[s+2>>0]=l>>>6&63|128,o[s+3>>0]=l&63|128,s=4;break}else{n[(Vm()|0)>>2]=84,s=-1;break}}else s=1;while(0);return s|0}function WUe(){return xT()|0}function VUe(){return xT()|0}function KUe(s,l){s=s|0,l=l|0;var c=0,f=0;for(f=0;;){if((u[5712+f>>0]|0)==(s|0)){s=2;break}if(c=f+1|0,(c|0)==87){c=5800,f=87,s=5;break}else f=c}if((s|0)==2&&(f?(c=5800,s=5):c=5800),(s|0)==5)for(;;){do s=c,c=c+1|0;while((o[s>>0]|0)!=0);if(f=f+-1|0,f)s=5;else break}return JUe(c,n[l+20>>2]|0)|0}function JUe(s,l){return s=s|0,l=l|0,zUe(s,l)|0}function zUe(s,l){return s=s|0,l=l|0,l?l=XUe(n[l>>2]|0,n[l+4>>2]|0,s)|0:l=0,(l|0?l:s)|0}function XUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;se=(n[s>>2]|0)+1794895138|0,m=Fg(n[s+8>>2]|0,se)|0,f=Fg(n[s+12>>2]|0,se)|0,d=Fg(n[s+16>>2]|0,se)|0;e:do if(m>>>0>>2>>>0&&(q=l-(m<<2)|0,f>>>0>>0&d>>>0>>0)&&((d|f)&3|0)==0){for(q=f>>>2,M=d>>>2,O=0;;){if(k=m>>>1,Q=O+k|0,B=Q<<1,d=B+q|0,f=Fg(n[s+(d<<2)>>2]|0,se)|0,d=Fg(n[s+(d+1<<2)>>2]|0,se)|0,!(d>>>0>>0&f>>>0<(l-d|0)>>>0)){f=0;break e}if(o[s+(d+f)>>0]|0){f=0;break e}if(f=o7(c,s+d|0)|0,!f)break;if(f=(f|0)<0,(m|0)==1){f=0;break e}else O=f?O:Q,m=f?k:m-k|0}f=B+M|0,d=Fg(n[s+(f<<2)>>2]|0,se)|0,f=Fg(n[s+(f+1<<2)>>2]|0,se)|0,f>>>0>>0&d>>>0<(l-f|0)>>>0?f=(o[s+(f+d)>>0]|0)==0?s+f|0:0:f=0}else f=0;while(0);return f|0}function Fg(s,l){s=s|0,l=l|0;var c=0;return c=C7(s|0)|0,((l|0)==0?s:c)|0}function ZUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=c+16|0,d=n[f>>2]|0,d?m=5:$Ue(c)|0?f=0:(d=n[f>>2]|0,m=5);e:do if((m|0)==5){if(k=c+20|0,B=n[k>>2]|0,f=B,(d-B|0)>>>0>>0){f=ED[n[c+36>>2]&7](c,s,l)|0;break}t:do if((o[c+75>>0]|0)>-1){for(B=l;;){if(!B){m=0,d=s;break t}if(d=B+-1|0,(o[s+d>>0]|0)==10)break;B=d}if(f=ED[n[c+36>>2]&7](c,s,B)|0,f>>>0>>0)break e;m=B,d=s+B|0,l=l-B|0,f=n[k>>2]|0}else m=0,d=s;while(0);Dr(f|0,d|0,l|0)|0,n[k>>2]=(n[k>>2]|0)+l,f=m+l|0}while(0);return f|0}function $Ue(s){s=s|0;var l=0,c=0;return l=s+74|0,c=o[l>>0]|0,o[l>>0]=c+255|c,l=n[s>>2]|0,l&8?(n[s>>2]=l|32,s=-1):(n[s+8>>2]=0,n[s+4>>2]=0,c=n[s+44>>2]|0,n[s+28>>2]=c,n[s+20>>2]=c,n[s+16>>2]=c+(n[s+48>>2]|0),s=0),s|0}function _n(s,l){s=y(s),l=y(l);var c=0,f=0;c=p7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=p7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?l:s;break}else{s=s>2]=s,n[v>>2]|0|0}function Tg(s,l){s=y(s),l=y(l);var c=0,f=0;c=h7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=h7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?s:l;break}else{s=s>2]=s,n[v>>2]|0|0}function kT(s,l){s=y(s),l=y(l);var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;m=(h[v>>2]=s,n[v>>2]|0),k=(h[v>>2]=l,n[v>>2]|0),c=m>>>23&255,B=k>>>23&255,Q=m&-2147483648,d=k<<1;e:do if((d|0)!=0&&!((c|0)==255|((e3e(l)|0)&2147483647)>>>0>2139095040)){if(f=m<<1,f>>>0<=d>>>0)return l=y(s*y(0)),y((f|0)==(d|0)?l:s);if(c)f=m&8388607|8388608;else{if(c=m<<9,(c|0)>-1){f=c,c=0;do c=c+-1|0,f=f<<1;while((f|0)>-1)}else c=0;f=m<<1-c}if(B)k=k&8388607|8388608;else{if(m=k<<9,(m|0)>-1){d=0;do d=d+-1|0,m=m<<1;while((m|0)>-1)}else d=0;B=d,k=k<<1-d}d=f-k|0,m=(d|0)>-1;t:do if((c|0)>(B|0)){for(;;){if(m)if(d)f=d;else break;if(f=f<<1,c=c+-1|0,d=f-k|0,m=(d|0)>-1,(c|0)<=(B|0))break t}l=y(s*y(0));break e}while(0);if(m)if(d)f=d;else{l=y(s*y(0));break}if(f>>>0<8388608)do f=f<<1,c=c+-1|0;while(f>>>0<8388608);(c|0)>0?c=f+-8388608|c<<23:c=f>>>(1-c|0),l=(n[v>>2]=c|Q,y(h[v>>2]))}else O=3;while(0);return(O|0)==3&&(l=y(s*l),l=y(l/l)),y(l)}function e3e(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function t3e(s,l){return s=s|0,l=l|0,a7(n[582]|0,s,l)|0}function zr(s){s=s|0,Tt()}function Jm(s){s=s|0}function r3e(s,l){return s=s|0,l=l|0,0}function n3e(s){return s=s|0,(g7(s+4|0)|0)==-1?(ef[n[(n[s>>2]|0)+8>>2]&127](s),s=1):s=0,s|0}function g7(s){s=s|0;var l=0;return l=n[s>>2]|0,n[s>>2]=l+-1,l+-1|0}function bp(s){s=s|0,n3e(s)|0&&i3e(s)}function i3e(s){s=s|0;var l=0;l=s+8|0,(n[l>>2]|0)!=0&&(g7(l)|0)!=-1||ef[n[(n[s>>2]|0)+16>>2]&127](s)}function Vt(s){s=s|0;var l=0;for(l=(s|0)==0?1:s;s=pD(l)|0,!(s|0);){if(s=o3e()|0,!s){s=0;break}k7[s&0]()}return s|0}function d7(s){return s=s|0,Vt(s)|0}function gt(s){s=s|0,hD(s)}function s3e(s){s=s|0,(o[s+11>>0]|0)<0&>(n[s>>2]|0)}function o3e(){var s=0;return s=n[2923]|0,n[2923]=s+0,s|0}function a3e(){}function dD(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,f=l-f-(c>>>0>s>>>0|0)>>>0,De=f,s-c>>>0|0|0}function QT(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,c=s+c>>>0,De=l+f+(c>>>0>>0|0)>>>0,c|0|0}function zm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(m=s+c|0,l=l&255,(c|0)>=67){for(;s&3;)o[s>>0]=l,s=s+1|0;for(f=m&-4|0,d=f-64|0,B=l|l<<8|l<<16|l<<24;(s|0)<=(d|0);)n[s>>2]=B,n[s+4>>2]=B,n[s+8>>2]=B,n[s+12>>2]=B,n[s+16>>2]=B,n[s+20>>2]=B,n[s+24>>2]=B,n[s+28>>2]=B,n[s+32>>2]=B,n[s+36>>2]=B,n[s+40>>2]=B,n[s+44>>2]=B,n[s+48>>2]=B,n[s+52>>2]=B,n[s+56>>2]=B,n[s+60>>2]=B,s=s+64|0;for(;(s|0)<(f|0);)n[s>>2]=B,s=s+4|0}for(;(s|0)<(m|0);)o[s>>0]=l,s=s+1|0;return m-c|0}function m7(s,l,c){return s=s|0,l=l|0,c=c|0,(c|0)<32?(De=l<>>32-c,s<>>c,s>>>c|(l&(1<>>c-32|0)}function Dr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;if((c|0)>=8192)return Ac(s|0,l|0,c|0)|0;if(m=s|0,d=s+c|0,(s&3)==(l&3)){for(;s&3;){if(!c)return m|0;o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0,c=c-1|0}for(c=d&-4|0,f=c-64|0;(s|0)<=(f|0);)n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2],n[s+16>>2]=n[l+16>>2],n[s+20>>2]=n[l+20>>2],n[s+24>>2]=n[l+24>>2],n[s+28>>2]=n[l+28>>2],n[s+32>>2]=n[l+32>>2],n[s+36>>2]=n[l+36>>2],n[s+40>>2]=n[l+40>>2],n[s+44>>2]=n[l+44>>2],n[s+48>>2]=n[l+48>>2],n[s+52>>2]=n[l+52>>2],n[s+56>>2]=n[l+56>>2],n[s+60>>2]=n[l+60>>2],s=s+64|0,l=l+64|0;for(;(s|0)<(c|0);)n[s>>2]=n[l>>2],s=s+4|0,l=l+4|0}else for(c=d-4|0;(s|0)<(c|0);)o[s>>0]=o[l>>0]|0,o[s+1>>0]=o[l+1>>0]|0,o[s+2>>0]=o[l+2>>0]|0,o[s+3>>0]=o[l+3>>0]|0,s=s+4|0,l=l+4|0;for(;(s|0)<(d|0);)o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0;return m|0}function y7(s){s=s|0;var l=0;return l=o[L+(s&255)>>0]|0,(l|0)<8?l|0:(l=o[L+(s>>8&255)>>0]|0,(l|0)<8?l+8|0:(l=o[L+(s>>16&255)>>0]|0,(l|0)<8?l+16|0:(o[L+(s>>>24)>>0]|0)+24|0))}function E7(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0;if(M=s,Q=l,O=Q,B=c,se=f,k=se,!O)return m=(d|0)!=0,k?m?(n[d>>2]=s|0,n[d+4>>2]=l&0,se=0,d=0,De=se,d|0):(se=0,d=0,De=se,d|0):(m&&(n[d>>2]=(M>>>0)%(B>>>0),n[d+4>>2]=0),se=0,d=(M>>>0)/(B>>>0)>>>0,De=se,d|0);m=(k|0)==0;do if(B){if(!m){if(m=(S(k|0)|0)-(S(O|0)|0)|0,m>>>0<=31){q=m+1|0,k=31-m|0,l=m-31>>31,B=q,s=M>>>(q>>>0)&l|O<>>(q>>>0)&l,m=0,k=M<>2]=s|0,n[d+4>>2]=Q|l&0,se=0,d=0,De=se,d|0):(se=0,d=0,De=se,d|0)}if(m=B-1|0,m&B|0){k=(S(B|0)|0)+33-(S(O|0)|0)|0,Oe=64-k|0,q=32-k|0,Q=q>>31,Ge=k-32|0,l=Ge>>31,B=k,s=q-1>>31&O>>>(Ge>>>0)|(O<>>(k>>>0))&l,l=l&O>>>(k>>>0),m=M<>>(Ge>>>0))&Q|M<>31;break}return d|0&&(n[d>>2]=m&M,n[d+4>>2]=0),(B|0)==1?(Ge=Q|l&0,Oe=s|0|0,De=Ge,Oe|0):(Oe=y7(B|0)|0,Ge=O>>>(Oe>>>0)|0,Oe=O<<32-Oe|M>>>(Oe>>>0)|0,De=Ge,Oe|0)}else{if(m)return d|0&&(n[d>>2]=(O>>>0)%(B>>>0),n[d+4>>2]=0),Ge=0,Oe=(O>>>0)/(B>>>0)>>>0,De=Ge,Oe|0;if(!M)return d|0&&(n[d>>2]=0,n[d+4>>2]=(O>>>0)%(k>>>0)),Ge=0,Oe=(O>>>0)/(k>>>0)>>>0,De=Ge,Oe|0;if(m=k-1|0,!(m&k))return d|0&&(n[d>>2]=s|0,n[d+4>>2]=m&O|l&0),Ge=0,Oe=O>>>((y7(k|0)|0)>>>0),De=Ge,Oe|0;if(m=(S(k|0)|0)-(S(O|0)|0)|0,m>>>0<=30){l=m+1|0,k=31-m|0,B=l,s=O<>>(l>>>0),l=O>>>(l>>>0),m=0,k=M<>2]=s|0,n[d+4>>2]=Q|l&0,Ge=0,Oe=0,De=Ge,Oe|0):(Ge=0,Oe=0,De=Ge,Oe|0)}while(0);if(!B)O=k,Q=0,k=0;else{q=c|0|0,M=se|f&0,O=QT(q|0,M|0,-1,-1)|0,c=De,Q=k,k=0;do f=Q,Q=m>>>31|Q<<1,m=k|m<<1,f=s<<1|f>>>31|0,se=s>>>31|l<<1|0,dD(O|0,c|0,f|0,se|0)|0,Oe=De,Ge=Oe>>31|((Oe|0)<0?-1:0)<<1,k=Ge&1,s=dD(f|0,se|0,Ge&q|0,(((Oe|0)<0?-1:0)>>31|((Oe|0)<0?-1:0)<<1)&M|0)|0,l=De,B=B-1|0;while((B|0)!=0);O=Q,Q=0}return B=0,d|0&&(n[d>>2]=s,n[d+4>>2]=l),Ge=(m|0)>>>31|(O|B)<<1|(B<<1|m>>>31)&0|Q,Oe=(m<<1|0>>>31)&-2|k,De=Ge,Oe|0}function FT(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,E7(s,l,c,f,0)|0}function kp(s){s=s|0;var l=0,c=0;return c=s+15&-16|0,l=n[I>>2]|0,s=l+c|0,(c|0)>0&(s|0)<(l|0)|(s|0)<0?(ie()|0,vA(12),-1):(n[I>>2]=s,(s|0)>(Z()|0)&&(X()|0)==0?(n[I>>2]=l,vA(12),-1):l|0)}function Mw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if((l|0)<(s|0)&(s|0)<(l+c|0)){for(f=s,l=l+c|0,s=s+c|0;(c|0)>0;)s=s-1|0,l=l-1|0,c=c-1|0,o[s>>0]=o[l>>0]|0;s=f}else Dr(s,l,c)|0;return s|0}function TT(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;return m=C,C=C+16|0,d=m|0,E7(s,l,c,f,d)|0,C=m,De=n[d+4>>2]|0,n[d>>2]|0|0}function C7(s){return s=s|0,(s&255)<<24|(s>>8&255)<<16|(s>>16&255)<<8|s>>>24|0}function l3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,w7[s&1](l|0,c|0,f|0,d|0,m|0)}function c3e(s,l,c){s=s|0,l=l|0,c=y(c),I7[s&1](l|0,y(c))}function u3e(s,l,c){s=s|0,l=l|0,c=+c,B7[s&31](l|0,+c)}function A3e(s,l,c,f){return s=s|0,l=l|0,c=y(c),f=y(f),y(v7[s&0](l|0,y(c),y(f)))}function f3e(s,l){s=s|0,l=l|0,ef[s&127](l|0)}function p3e(s,l,c){s=s|0,l=l|0,c=c|0,tf[s&31](l|0,c|0)}function h3e(s,l){return s=s|0,l=l|0,Ng[s&31](l|0)|0}function g3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,D7[s&1](l|0,+c,+f,d|0)}function d3e(s,l,c,f){s=s|0,l=l|0,c=+c,f=+f,z3e[s&1](l|0,+c,+f)}function m3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,ED[s&7](l|0,c|0,f|0)|0}function y3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,+X3e[s&1](l|0,c|0,f|0)}function E3e(s,l){return s=s|0,l=l|0,+P7[s&15](l|0)}function C3e(s,l,c){return s=s|0,l=l|0,c=+c,Z3e[s&1](l|0,+c)|0}function w3e(s,l,c){return s=s|0,l=l|0,c=c|0,NT[s&15](l|0,c|0)|0}function I3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=+f,d=+d,m=m|0,$3e[s&1](l|0,c|0,+f,+d,m|0)}function B3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,e_e[s&1](l|0,c|0,f|0,d|0,m|0,B|0)}function v3e(s,l,c){return s=s|0,l=l|0,c=c|0,+S7[s&7](l|0,c|0)}function D3e(s){return s=s|0,CD[s&7]()|0}function P3e(s,l,c,f,d,m){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,x7[s&1](l|0,c|0,f|0,d|0,m|0)|0}function S3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=+d,t_e[s&1](l|0,c|0,f|0,+d)}function x3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,b7[s&1](l|0,c|0,y(f),d|0,y(m),B|0)}function b3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,_w[s&15](l|0,c|0,f|0)}function k3e(s){s=s|0,k7[s&0]()}function Q3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,Q7[s&15](l|0,c|0,+f)}function F3e(s,l,c){return s=s|0,l=+l,c=+c,r_e[s&1](+l,+c)|0}function T3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,LT[s&15](l|0,c|0,f|0,d|0)}function R3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(0)}function N3e(s,l){s=s|0,l=y(l),F(1)}function ma(s,l){s=s|0,l=+l,F(2)}function L3e(s,l,c){return s=s|0,l=y(l),c=y(c),F(3),Ze}function Er(s){s=s|0,F(4)}function Ow(s,l){s=s|0,l=l|0,F(5)}function Ja(s){return s=s|0,F(6),0}function M3e(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,F(7)}function O3e(s,l,c){s=s|0,l=+l,c=+c,F(8)}function U3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(9),0}function _3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(10),0}function Rg(s){return s=s|0,F(11),0}function H3e(s,l){return s=s|0,l=+l,F(12),0}function Uw(s,l){return s=s|0,l=l|0,F(13),0}function j3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,F(14)}function q3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,F(15)}function RT(s,l){return s=s|0,l=l|0,F(16),0}function G3e(){return F(17),0}function Y3e(s,l,c,f,d){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(18),0}function W3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,F(19)}function V3e(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0,F(20)}function yD(s,l,c){s=s|0,l=l|0,c=c|0,F(21)}function K3e(){F(22)}function Xm(s,l,c){s=s|0,l=l|0,c=+c,F(23)}function J3e(s,l){return s=+s,l=+l,F(24),0}function Zm(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,F(25)}var w7=[R3e,YLe],I7=[N3e,fo],B7=[ma,xw,bw,wF,IF,Dl,kw,BF,Hm,xu,Fw,vF,$v,WA,eD,jm,tD,rD,qm,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma],v7=[L3e],ef=[Er,Jm,DDe,PDe,SDe,rbe,nbe,ibe,CNe,wNe,INe,FLe,TLe,RLe,eUe,tUe,rUe,hs,Kv,_m,YA,Qw,wve,Ive,gDe,NDe,VDe,APe,SPe,GPe,aSe,ISe,MSe,$Se,gxe,Qxe,Vxe,wbe,Mbe,$be,gke,Qke,Vke,fQe,SQe,HQe,nFe,Sc,RFe,zFe,gTe,TTe,KTe,gRe,DRe,xRe,YRe,KRe,ANe,vNe,SNe,GNe,lLe,a5,qMe,COe,NOe,zOe,y4e,T4e,G4e,V4e,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er],tf=[Ow,hF,gF,Sw,Su,dF,mF,Ip,yF,EF,CF,Zv,VA,Ke,At,Wt,vr,Sn,Fr,PF,lve,Qve,dQe,kQe,MTe,WMe,dLe,Y9,Ow,Ow,Ow,Ow],Ng=[Ja,QUe,pF,D,fe,ve,vt,wt,bt,_r,di,po,sve,ove,Bve,oFe,ZTe,VNe,zMe,Wa,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja],D7=[M3e,vve],z3e=[O3e,hNe],ED=[U3e,s7,FUe,NUe,KPe,Dbe,OFe,e4e],X3e=[_3e,Exe],P7=[Rg,Yo,rt,xn,Dve,Pve,Sve,xve,bve,kve,Rg,Rg,Rg,Rg,Rg,Rg],Z3e=[H3e,IRe],NT=[Uw,r3e,ave,EDe,gPe,uSe,DSe,Xxe,Hbe,YQe,Wv,UOe,Uw,Uw,Uw,Uw],$3e=[j3e,XDe],e_e=[q3e,I4e],S7=[RT,ai,Fve,Tve,Rve,Nxe,RT,RT],CD=[G3e,Nve,Dw,ga,FRe,ZRe,QNe,X4e],x7=[Y3e,Ew],t_e=[W3e,Eke],b7=[V3e,cve],_w=[yD,R,is,en,ho,QPe,_Se,Nke,Xke,Um,hMe,vOe,M4e,yD,yD,yD],k7=[K3e],Q7=[Xm,Jv,zv,Xv,GA,nD,DF,P,nke,eTe,yRe,Xm,Xm,Xm,Xm,Xm],r_e=[J3e,yNe],LT=[Zm,nxe,hFe,ETe,aRe,ORe,iNe,ONe,pLe,rOe,lUe,Zm,Zm,Zm,Zm,Zm];return{_llvm_bswap_i32:C7,dynCall_idd:F3e,dynCall_i:D3e,_i64Subtract:dD,___udivdi3:FT,dynCall_vif:c3e,setThrew:hu,dynCall_viii:b3e,_bitshift64Lshr:mD,_bitshift64Shl:m7,dynCall_vi:f3e,dynCall_viiddi:I3e,dynCall_diii:y3e,dynCall_iii:w3e,_memset:zm,_sbrk:kp,_memcpy:Dr,__GLOBAL__sub_I_Yoga_cpp:Om,dynCall_vii:p3e,___uremdi3:TT,dynCall_vid:u3e,stackAlloc:lo,_nbind_init:EUe,getTempRet0:Ua,dynCall_di:E3e,dynCall_iid:C3e,setTempRet0:xA,_i64Add:QT,dynCall_fiff:A3e,dynCall_iiii:m3e,_emscripten_get_global_libc:kUe,dynCall_viid:Q3e,dynCall_viiid:S3e,dynCall_viififi:x3e,dynCall_ii:h3e,__GLOBAL__sub_I_Binding_cc:NMe,dynCall_viiii:T3e,dynCall_iiiiii:P3e,stackSave:gc,dynCall_viiiii:l3e,__GLOBAL__sub_I_nbind_cc:Lve,dynCall_vidd:d3e,_free:hD,runPostSets:a3e,dynCall_viiiiii:B3e,establishStackSpace:ji,_memmove:Mw,stackRestore:pu,_malloc:pD,__GLOBAL__sub_I_common_cc:tLe,dynCall_viddi:g3e,dynCall_dii:v3e,dynCall_v:k3e}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function t(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=t)},Module.callMain=Module.callMain=function t(e){e=e||[],ensureInitRuntime();var r=e.length+1;function o(){for(var p=0;p<4-1;p++)a.push(0)}var a=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];o();for(var n=0;n0||(preRun(),runDependencies>0)||Module.calledRun)return;function e(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(t),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),e()},1)):e()}Module.run=Module.run=run;function exit(t,e){e&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=t,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(t)),ENVIRONMENT_IS_NODE&&process.exit(t),Module.quit(t,new ExitStatus(t)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(t){Module.onAbort&&Module.onAbort(t),t!==void 0?(Module.print(t),Module.printErr(t),t=JSON.stringify(t)):t="",ABORT=!0,EXITSTATUS=1;var e=` +If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,r="abort("+t+") at "+stackTrace()+e;throw abortDecorators&&abortDecorators.forEach(function(o){r=o(r,t)}),r}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var om=_((wVt,OEe)=>{"use strict";var Jyt=LEe(),zyt=MEe(),Q6=!1,F6=null;zyt({},function(t,e){if(!Q6){if(Q6=!0,t)throw t;F6=e}});if(!Q6)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");OEe.exports=Jyt(F6.bind,F6.lib)});var R6=_((IVt,T6)=>{"use strict";var UEe=t=>Number.isNaN(t)?!1:t>=4352&&(t<=4447||t===9001||t===9002||11904<=t&&t<=12871&&t!==12351||12880<=t&&t<=19903||19968<=t&&t<=42182||43360<=t&&t<=43388||44032<=t&&t<=55203||63744<=t&&t<=64255||65040<=t&&t<=65049||65072<=t&&t<=65131||65281<=t&&t<=65376||65504<=t&&t<=65510||110592<=t&&t<=110593||127488<=t&&t<=127569||131072<=t&&t<=262141);T6.exports=UEe;T6.exports.default=UEe});var HEe=_((BVt,_Ee)=>{"use strict";_Ee.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var Jk=_((vVt,N6)=>{"use strict";var Xyt=MP(),Zyt=R6(),$yt=HEe(),jEe=t=>{if(typeof t!="string"||t.length===0||(t=Xyt(t),t.length===0))return 0;t=t.replace($yt()," ");let e=0;for(let r=0;r=127&&o<=159||o>=768&&o<=879||(o>65535&&r++,e+=Zyt(o)?2:1)}return e};N6.exports=jEe;N6.exports.default=jEe});var M6=_((DVt,L6)=>{"use strict";var eEt=Jk(),qEe=t=>{let e=0;for(let r of t.split(` +`))e=Math.max(e,eEt(r));return e};L6.exports=qEe;L6.exports.default=qEe});var GEe=_(lB=>{"use strict";var tEt=lB&&lB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(lB,"__esModule",{value:!0});var rEt=tEt(M6()),O6={};lB.default=t=>{if(t.length===0)return{width:0,height:0};if(O6[t])return O6[t];let e=rEt.default(t),r=t.split(` +`).length;return O6[t]={width:e,height:r},{width:e,height:r}}});var YEe=_(cB=>{"use strict";var nEt=cB&&cB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(cB,"__esModule",{value:!0});var dn=nEt(om()),iEt=(t,e)=>{"position"in e&&t.setPositionType(e.position==="absolute"?dn.default.POSITION_TYPE_ABSOLUTE:dn.default.POSITION_TYPE_RELATIVE)},sEt=(t,e)=>{"marginLeft"in e&&t.setMargin(dn.default.EDGE_START,e.marginLeft||0),"marginRight"in e&&t.setMargin(dn.default.EDGE_END,e.marginRight||0),"marginTop"in e&&t.setMargin(dn.default.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&t.setMargin(dn.default.EDGE_BOTTOM,e.marginBottom||0)},oEt=(t,e)=>{"paddingLeft"in e&&t.setPadding(dn.default.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&t.setPadding(dn.default.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&t.setPadding(dn.default.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&t.setPadding(dn.default.EDGE_BOTTOM,e.paddingBottom||0)},aEt=(t,e)=>{var r;"flexGrow"in e&&t.setFlexGrow((r=e.flexGrow)!==null&&r!==void 0?r:0),"flexShrink"in e&&t.setFlexShrink(typeof e.flexShrink=="number"?e.flexShrink:1),"flexDirection"in e&&(e.flexDirection==="row"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in e&&(typeof e.flexBasis=="number"?t.setFlexBasis(e.flexBasis):typeof e.flexBasis=="string"?t.setFlexBasisPercent(Number.parseInt(e.flexBasis,10)):t.setFlexBasis(NaN)),"alignItems"in e&&((e.alignItems==="stretch"||!e.alignItems)&&t.setAlignItems(dn.default.ALIGN_STRETCH),e.alignItems==="flex-start"&&t.setAlignItems(dn.default.ALIGN_FLEX_START),e.alignItems==="center"&&t.setAlignItems(dn.default.ALIGN_CENTER),e.alignItems==="flex-end"&&t.setAlignItems(dn.default.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&t.setAlignSelf(dn.default.ALIGN_AUTO),e.alignSelf==="flex-start"&&t.setAlignSelf(dn.default.ALIGN_FLEX_START),e.alignSelf==="center"&&t.setAlignSelf(dn.default.ALIGN_CENTER),e.alignSelf==="flex-end"&&t.setAlignSelf(dn.default.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_START),e.justifyContent==="center"&&t.setJustifyContent(dn.default.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_AROUND))},lEt=(t,e)=>{var r,o;"width"in e&&(typeof e.width=="number"?t.setWidth(e.width):typeof e.width=="string"?t.setWidthPercent(Number.parseInt(e.width,10)):t.setWidthAuto()),"height"in e&&(typeof e.height=="number"?t.setHeight(e.height):typeof e.height=="string"?t.setHeightPercent(Number.parseInt(e.height,10)):t.setHeightAuto()),"minWidth"in e&&(typeof e.minWidth=="string"?t.setMinWidthPercent(Number.parseInt(e.minWidth,10)):t.setMinWidth((r=e.minWidth)!==null&&r!==void 0?r:0)),"minHeight"in e&&(typeof e.minHeight=="string"?t.setMinHeightPercent(Number.parseInt(e.minHeight,10)):t.setMinHeight((o=e.minHeight)!==null&&o!==void 0?o:0))},cEt=(t,e)=>{"display"in e&&t.setDisplay(e.display==="flex"?dn.default.DISPLAY_FLEX:dn.default.DISPLAY_NONE)},uEt=(t,e)=>{if("borderStyle"in e){let r=typeof e.borderStyle=="string"?1:0;t.setBorder(dn.default.EDGE_TOP,r),t.setBorder(dn.default.EDGE_BOTTOM,r),t.setBorder(dn.default.EDGE_LEFT,r),t.setBorder(dn.default.EDGE_RIGHT,r)}};cB.default=(t,e={})=>{iEt(t,e),sEt(t,e),oEt(t,e),aEt(t,e),lEt(t,e),cEt(t,e),uEt(t,e)}});var KEe=_((xVt,VEe)=>{"use strict";var uB=Jk(),AEt=MP(),fEt=vI(),_6=new Set(["\x1B","\x9B"]),pEt=39,WEe=t=>`${_6.values().next().value}[${t}m`,hEt=t=>t.split(" ").map(e=>uB(e)),U6=(t,e,r)=>{let o=[...e],a=!1,n=uB(AEt(t[t.length-1]));for(let[u,A]of o.entries()){let p=uB(A);if(n+p<=r?t[t.length-1]+=A:(t.push(A),n=0),_6.has(A))a=!0;else if(a&&A==="m"){a=!1;continue}a||(n+=p,n===r&&u0&&t.length>1&&(t[t.length-2]+=t.pop())},gEt=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(uB(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},dEt=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",a="",n,u=hEt(t),A=[""];for(let[p,h]of t.split(" ").entries()){r.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let E=uB(A[A.length-1]);if(p!==0&&(E>=e&&(r.wordWrap===!1||r.trim===!1)&&(A.push(""),E=0),(E>0||r.trim===!1)&&(A[A.length-1]+=" ",E++)),r.hard&&u[p]>e){let I=e-E,v=1+Math.floor((u[p]-I-1)/e);Math.floor((u[p]-1)/e)e&&E>0&&u[p]>0){if(r.wordWrap===!1&&Ee&&r.wordWrap===!1){U6(A,h,e);continue}A[A.length-1]+=h}r.trim!==!1&&(A=A.map(gEt)),o=A.join(` +`);for(let[p,h]of[...o].entries()){if(a+=h,_6.has(h)){let I=parseFloat(/\d[^m]*/.exec(o.slice(p,p+4)));n=I===pEt?null:I}let E=fEt.codes.get(Number(n));n&&E&&(o[p+1]===` +`?a+=WEe(E):h===` +`&&(a+=WEe(n)))}return a};VEe.exports=(t,e,r)=>String(t).normalize().replace(/\r\n/g,` +`).split(` +`).map(o=>dEt(o,e,r)).join(` +`)});var XEe=_((bVt,zEe)=>{"use strict";var JEe="[\uD800-\uDBFF][\uDC00-\uDFFF]",mEt=t=>t&&t.exact?new RegExp(`^${JEe}$`):new RegExp(JEe,"g");zEe.exports=mEt});var H6=_((kVt,tCe)=>{"use strict";var yEt=R6(),EEt=XEe(),ZEe=vI(),eCe=["\x1B","\x9B"],zk=t=>`${eCe[0]}[${t}m`,$Ee=(t,e,r)=>{let o=[];t=[...t];for(let a of t){let n=a;a.match(";")&&(a=a.split(";")[0][0]+"0");let u=ZEe.codes.get(parseInt(a,10));if(u){let A=t.indexOf(u.toString());A>=0?t.splice(A,1):o.push(zk(e?u:n))}else if(e){o.push(zk(0));break}else o.push(zk(n))}if(e&&(o=o.filter((a,n)=>o.indexOf(a)===n),r!==void 0)){let a=zk(ZEe.codes.get(parseInt(r,10)));o=o.reduce((n,u)=>u===a?[u,...n]:[...n,u],[])}return o.join("")};tCe.exports=(t,e,r)=>{let o=[...t.normalize()],a=[];r=typeof r=="number"?r:o.length;let n=!1,u,A=0,p="";for(let[h,E]of o.entries()){let I=!1;if(eCe.includes(E)){let v=/\d[^m]*/.exec(t.slice(h,h+18));u=v&&v.length>0?v[0]:void 0,Ae&&A<=r)p+=E;else if(A===e&&!n&&u!==void 0)p=$Ee(a);else if(A>=r){p+=$Ee(a,!0,u);break}}return p}});var nCe=_((QVt,rCe)=>{"use strict";var y0=H6(),CEt=Jk();function Xk(t,e,r){if(t.charAt(e)===" ")return e;for(let o=1;o<=3;o++)if(r){if(t.charAt(e+o)===" ")return e+o}else if(t.charAt(e-o)===" ")return e-o;return e}rCe.exports=(t,e,r)=>{r={position:"end",preferTruncationOnSpace:!1,...r};let{position:o,space:a,preferTruncationOnSpace:n}=r,u="\u2026",A=1;if(typeof t!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof t}`);if(typeof e!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof e}`);if(e<1)return"";if(e===1)return u;let p=CEt(t);if(p<=e)return t;if(o==="start"){if(n){let h=Xk(t,p-e+1,!0);return u+y0(t,h,p).trim()}return a===!0&&(u+=" ",A=2),u+y0(t,p-e+A,p)}if(o==="middle"){a===!0&&(u=" "+u+" ",A=3);let h=Math.floor(e/2);if(n){let E=Xk(t,h),I=Xk(t,p-(e-h)+1,!0);return y0(t,0,E)+u+y0(t,I,p).trim()}return y0(t,0,h)+u+y0(t,p-(e-h)+A,p)}if(o==="end"){if(n){let h=Xk(t,e-1);return y0(t,0,h)+u}return a===!0&&(u=" "+u,A=2),y0(t,0,e-A)+u}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${o}`)}});var q6=_(AB=>{"use strict";var iCe=AB&&AB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(AB,"__esModule",{value:!0});var wEt=iCe(KEe()),IEt=iCe(nCe()),j6={};AB.default=(t,e,r)=>{let o=t+String(e)+String(r);if(j6[o])return j6[o];let a=t;if(r==="wrap"&&(a=wEt.default(t,e,{trim:!1,hard:!0})),r.startsWith("truncate")){let n="end";r==="truncate-middle"&&(n="middle"),r==="truncate-start"&&(n="start"),a=IEt.default(t,e,{position:n})}return j6[o]=a,a}});var Y6=_(G6=>{"use strict";Object.defineProperty(G6,"__esModule",{value:!0});var sCe=t=>{let e="";if(t.childNodes.length>0)for(let r of t.childNodes){let o="";r.nodeName==="#text"?o=r.nodeValue:((r.nodeName==="ink-text"||r.nodeName==="ink-virtual-text")&&(o=sCe(r)),o.length>0&&typeof r.internal_transform=="function"&&(o=r.internal_transform(o))),e+=o}return e};G6.default=sCe});var W6=_(pi=>{"use strict";var fB=pi&&pi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pi,"__esModule",{value:!0});pi.setTextNodeValue=pi.createTextNode=pi.setStyle=pi.setAttribute=pi.removeChildNode=pi.insertBeforeNode=pi.appendChildNode=pi.createNode=pi.TEXT_NAME=void 0;var BEt=fB(om()),oCe=fB(GEe()),vEt=fB(YEe()),DEt=fB(q6()),PEt=fB(Y6());pi.TEXT_NAME="#text";pi.createNode=t=>{var e;let r={nodeName:t,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:t==="ink-virtual-text"?void 0:BEt.default.Node.create()};return t==="ink-text"&&((e=r.yogaNode)===null||e===void 0||e.setMeasureFunc(SEt.bind(null,r))),r};pi.appendChildNode=(t,e)=>{var r;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t,t.childNodes.push(e),e.yogaNode&&((r=t.yogaNode)===null||r===void 0||r.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.insertBeforeNode=(t,e,r)=>{var o,a;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t;let n=t.childNodes.indexOf(r);if(n>=0){t.childNodes.splice(n,0,e),e.yogaNode&&((o=t.yogaNode)===null||o===void 0||o.insertChild(e.yogaNode,n));return}t.childNodes.push(e),e.yogaNode&&((a=t.yogaNode)===null||a===void 0||a.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.removeChildNode=(t,e)=>{var r,o;e.yogaNode&&((o=(r=e.parentNode)===null||r===void 0?void 0:r.yogaNode)===null||o===void 0||o.removeChild(e.yogaNode)),e.parentNode=null;let a=t.childNodes.indexOf(e);a>=0&&t.childNodes.splice(a,1),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.setAttribute=(t,e,r)=>{t.attributes[e]=r};pi.setStyle=(t,e)=>{t.style=e,t.yogaNode&&vEt.default(t.yogaNode,e)};pi.createTextNode=t=>{let e={nodeName:"#text",nodeValue:t,yogaNode:void 0,parentNode:null,style:{}};return pi.setTextNodeValue(e,t),e};var SEt=function(t,e){var r,o;let a=t.nodeName==="#text"?t.nodeValue:PEt.default(t),n=oCe.default(a);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let u=(o=(r=t.style)===null||r===void 0?void 0:r.textWrap)!==null&&o!==void 0?o:"wrap",A=DEt.default(a,e,u);return oCe.default(A)},aCe=t=>{var e;if(!(!t||!t.parentNode))return(e=t.yogaNode)!==null&&e!==void 0?e:aCe(t.parentNode)},Zk=t=>{let e=aCe(t);e?.markDirty()};pi.setTextNodeValue=(t,e)=>{typeof e!="string"&&(e=String(e)),t.nodeValue=e,Zk(t)}});var fCe=_(pB=>{"use strict";var ACe=pB&&pB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pB,"__esModule",{value:!0});var lCe=x6(),xEt=ACe(kEe()),cCe=ACe(om()),Mo=W6(),uCe=t=>{t?.unsetMeasureFunc(),t?.freeRecursive()};pB.default=xEt.default({schedulePassiveEffects:lCe.unstable_scheduleCallback,cancelPassiveEffects:lCe.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:t=>{if(t.isStaticDirty){t.isStaticDirty=!1,typeof t.onImmediateRender=="function"&&t.onImmediateRender();return}typeof t.onRender=="function"&&t.onRender()},getChildHostContext:(t,e)=>{let r=t.isInsideText,o=e==="ink-text"||e==="ink-virtual-text";return r===o?t:{isInsideText:o}},shouldSetTextContent:()=>!1,createInstance:(t,e,r,o)=>{if(o.isInsideText&&t==="ink-box")throw new Error(" can\u2019t be nested inside component");let a=t==="ink-text"&&o.isInsideText?"ink-virtual-text":t,n=Mo.createNode(a);for(let[u,A]of Object.entries(e))u!=="children"&&(u==="style"?Mo.setStyle(n,A):u==="internal_transform"?n.internal_transform=A:u==="internal_static"?n.internal_static=!0:Mo.setAttribute(n,u,A));return n},createTextInstance:(t,e,r)=>{if(!r.isInsideText)throw new Error(`Text string "${t}" must be rendered inside component`);return Mo.createTextNode(t)},resetTextContent:()=>{},hideTextInstance:t=>{Mo.setTextNodeValue(t,"")},unhideTextInstance:(t,e)=>{Mo.setTextNodeValue(t,e)},getPublicInstance:t=>t,hideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(cCe.default.DISPLAY_NONE)},unhideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(cCe.default.DISPLAY_FLEX)},appendInitialChild:Mo.appendChildNode,appendChild:Mo.appendChildNode,insertBefore:Mo.insertBeforeNode,finalizeInitialChildren:(t,e,r,o)=>(t.internal_static&&(o.isStaticDirty=!0,o.staticNode=t),!1),supportsMutation:!0,appendChildToContainer:Mo.appendChildNode,insertInContainerBefore:Mo.insertBeforeNode,removeChildFromContainer:(t,e)=>{Mo.removeChildNode(t,e),uCe(e.yogaNode)},prepareUpdate:(t,e,r,o,a)=>{t.internal_static&&(a.isStaticDirty=!0);let n={},u=Object.keys(o);for(let A of u)if(o[A]!==r[A]){if(A==="style"&&typeof o.style=="object"&&typeof r.style=="object"){let h=o.style,E=r.style,I=Object.keys(h);for(let v of I){if(v==="borderStyle"||v==="borderColor"){if(typeof n.style!="object"){let b={};n.style=b}n.style.borderStyle=h.borderStyle,n.style.borderColor=h.borderColor}if(h[v]!==E[v]){if(typeof n.style!="object"){let b={};n.style=b}n.style[v]=h[v]}}continue}n[A]=o[A]}return n},commitUpdate:(t,e)=>{for(let[r,o]of Object.entries(e))r!=="children"&&(r==="style"?Mo.setStyle(t,o):r==="internal_transform"?t.internal_transform=o:r==="internal_static"?t.internal_static=!0:Mo.setAttribute(t,r,o))},commitTextUpdate:(t,e,r)=>{Mo.setTextNodeValue(t,r)},removeChild:(t,e)=>{Mo.removeChildNode(t,e),uCe(e.yogaNode)}})});var hCe=_((LVt,pCe)=>{"use strict";pCe.exports=(t,e=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(e===0)return t;let o=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(o,r.indent.repeat(e))}});var gCe=_(hB=>{"use strict";var bEt=hB&&hB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(hB,"__esModule",{value:!0});var $k=bEt(om());hB.default=t=>t.getComputedWidth()-t.getComputedPadding($k.default.EDGE_LEFT)-t.getComputedPadding($k.default.EDGE_RIGHT)-t.getComputedBorder($k.default.EDGE_LEFT)-t.getComputedBorder($k.default.EDGE_RIGHT)});var dCe=_((OVt,kEt)=>{kEt.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var yCe=_((UVt,V6)=>{"use strict";var mCe=dCe();V6.exports=mCe;V6.exports.default=mCe});var CCe=_((_Vt,ECe)=>{"use strict";var QEt=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},FEt=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`:` +`)+r,a=o+1,o=t.indexOf(` +`,a)}while(o!==-1);return n+=t.substr(a),n};ECe.exports={stringReplaceAll:QEt,stringEncaseCRLFWithFirstIndex:FEt}});var DCe=_((HVt,vCe)=>{"use strict";var TEt=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,wCe=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,REt=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,NEt=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,LEt=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function BCe(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):LEt.get(t)||t}function MEt(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(REt))r.push(a[2].replace(NEt,(A,p,h)=>p?BCe(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function OEt(t){wCe.lastIndex=0;let e=[],r;for(;(r=wCe.exec(t))!==null;){let o=r[1];if(r[2]){let a=MEt(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function ICe(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}vCe.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(TEt,(n,u,A,p,h,E)=>{if(u)a.push(BCe(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:ICe(t,r)(I)),r.push({inverse:A,styles:OEt(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(ICe(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var iQ=_((jVt,QCe)=>{"use strict";var gB=vI(),{stdout:J6,stderr:z6}=yN(),{stringReplaceAll:UEt,stringEncaseCRLFWithFirstIndex:_Et}=CCe(),{isArray:eQ}=Array,SCe=["ansi","ansi","ansi256","ansi16m"],_C=Object.create(null),HEt=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=J6?J6.level:0;t.level=e.level===void 0?r:e.level},X6=class{constructor(e){return xCe(e)}},xCe=t=>{let e={};return HEt(e,t),e.template=(...r)=>kCe(e.template,...r),Object.setPrototypeOf(e,tQ.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=X6,e.template};function tQ(t){return xCe(t)}for(let[t,e]of Object.entries(gB))_C[t]={get(){let r=rQ(this,Z6(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};_C.visible={get(){let t=rQ(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var bCe=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of bCe)_C[t]={get(){let{level:e}=this;return function(...r){let o=Z6(gB.color[SCe[e]][t](...r),gB.color.close,this._styler);return rQ(this,o,this._isEmpty)}}};for(let t of bCe){let e="bg"+t[0].toUpperCase()+t.slice(1);_C[e]={get(){let{level:r}=this;return function(...o){let a=Z6(gB.bgColor[SCe[r]][t](...o),gB.bgColor.close,this._styler);return rQ(this,a,this._isEmpty)}}}}var jEt=Object.defineProperties(()=>{},{..._C,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),Z6=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},rQ=(t,e,r)=>{let o=(...a)=>eQ(a[0])&&eQ(a[0].raw)?PCe(o,kCe(o,...a)):PCe(o,a.length===1?""+a[0]:a.join(" "));return Object.setPrototypeOf(o,jEt),o._generator=t,o._styler=e,o._isEmpty=r,o},PCe=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=UEt(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=_Et(e,a,o,n)),o+e+a},K6,kCe=(t,...e)=>{let[r]=e;if(!eQ(r)||!eQ(r.raw))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";var qEt=mB&&mB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(mB,"__esModule",{value:!0});var dB=qEt(iQ()),GEt=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,YEt=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,sQ=(t,e)=>e==="foreground"?t:"bg"+t[0].toUpperCase()+t.slice(1);mB.default=(t,e,r)=>{if(!e)return t;if(e in dB.default){let a=sQ(e,r);return dB.default[a](t)}if(e.startsWith("#")){let a=sQ("hex",r);return dB.default[a](e)(t)}if(e.startsWith("ansi")){let a=YEt.exec(e);if(!a)return t;let n=sQ(a[1],r),u=Number(a[2]);return dB.default[n](u)(t)}if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("hsv")||e.startsWith("hwb")){let a=GEt.exec(e);if(!a)return t;let n=sQ(a[1],r),u=Number(a[2]),A=Number(a[3]),p=Number(a[4]);return dB.default[n](u,A,p)(t)}return t}});var TCe=_(yB=>{"use strict";var FCe=yB&&yB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(yB,"__esModule",{value:!0});var WEt=FCe(yCe()),ej=FCe($6());yB.default=(t,e,r,o)=>{if(typeof r.style.borderStyle=="string"){let a=r.yogaNode.getComputedWidth(),n=r.yogaNode.getComputedHeight(),u=r.style.borderColor,A=WEt.default[r.style.borderStyle],p=ej.default(A.topLeft+A.horizontal.repeat(a-2)+A.topRight,u,"foreground"),h=(ej.default(A.vertical,u,"foreground")+` +`).repeat(n-2),E=ej.default(A.bottomLeft+A.horizontal.repeat(a-2)+A.bottomRight,u,"foreground");o.write(t,e,p,{transformers:[]}),o.write(t,e+1,h,{transformers:[]}),o.write(t+a-1,e+1,h,{transformers:[]}),o.write(t,e+n-1,E,{transformers:[]})}}});var NCe=_(EB=>{"use strict";var am=EB&&EB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(EB,"__esModule",{value:!0});var VEt=am(om()),KEt=am(M6()),JEt=am(hCe()),zEt=am(q6()),XEt=am(gCe()),ZEt=am(Y6()),$Et=am(TCe()),eCt=(t,e)=>{var r;let o=(r=t.childNodes[0])===null||r===void 0?void 0:r.yogaNode;if(o){let a=o.getComputedLeft(),n=o.getComputedTop();e=` +`.repeat(n)+JEt.default(e,a)}return e},RCe=(t,e,r)=>{var o;let{offsetX:a=0,offsetY:n=0,transformers:u=[],skipStaticElements:A}=r;if(A&&t.internal_static)return;let{yogaNode:p}=t;if(p){if(p.getDisplay()===VEt.default.DISPLAY_NONE)return;let h=a+p.getComputedLeft(),E=n+p.getComputedTop(),I=u;if(typeof t.internal_transform=="function"&&(I=[t.internal_transform,...u]),t.nodeName==="ink-text"){let v=ZEt.default(t);if(v.length>0){let b=KEt.default(v),C=XEt.default(p);if(b>C){let T=(o=t.style.textWrap)!==null&&o!==void 0?o:"wrap";v=zEt.default(v,C,T)}v=eCt(t,v),e.write(h,E,v,{transformers:I})}return}if(t.nodeName==="ink-box"&&$Et.default(h,E,t,e),t.nodeName==="ink-root"||t.nodeName==="ink-box")for(let v of t.childNodes)RCe(v,e,{offsetX:h,offsetY:E,transformers:I,skipStaticElements:A})}};EB.default=RCe});var MCe=_((WVt,LCe)=>{"use strict";LCe.exports=t=>{t=Object.assign({onlyFirst:!1},t);let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t.onlyFirst?void 0:"g")}});var UCe=_((VVt,tj)=>{"use strict";var tCt=MCe(),OCe=t=>typeof t=="string"?t.replace(tCt(),""):t;tj.exports=OCe;tj.exports.default=OCe});var jCe=_((KVt,HCe)=>{"use strict";var _Ce="[\uD800-\uDBFF][\uDC00-\uDFFF]";HCe.exports=t=>t&&t.exact?new RegExp(`^${_Ce}$`):new RegExp(_Ce,"g")});var GCe=_((JVt,rj)=>{"use strict";var rCt=UCe(),nCt=jCe(),qCe=t=>rCt(t).replace(nCt()," ").length;rj.exports=qCe;rj.exports.default=qCe});var VCe=_(CB=>{"use strict";var WCe=CB&&CB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(CB,"__esModule",{value:!0});var YCe=WCe(H6()),iCt=WCe(GCe()),nj=class{constructor(e){this.writes=[];let{width:r,height:o}=e;this.width=r,this.height=o}write(e,r,o,a){let{transformers:n}=a;!o||this.writes.push({x:e,y:r,text:o,transformers:n})}get(){let e=[];for(let o=0;oo.trimRight()).join(` +`),height:e.length}}};CB.default=nj});var zCe=_(wB=>{"use strict";var ij=wB&&wB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(wB,"__esModule",{value:!0});var sCt=ij(om()),KCe=ij(NCe()),JCe=ij(VCe());wB.default=(t,e)=>{var r;if(t.yogaNode.setWidth(e),t.yogaNode){t.yogaNode.calculateLayout(void 0,void 0,sCt.default.DIRECTION_LTR);let o=new JCe.default({width:t.yogaNode.getComputedWidth(),height:t.yogaNode.getComputedHeight()});KCe.default(t,o,{skipStaticElements:!0});let a;!((r=t.staticNode)===null||r===void 0)&&r.yogaNode&&(a=new JCe.default({width:t.staticNode.yogaNode.getComputedWidth(),height:t.staticNode.yogaNode.getComputedHeight()}),KCe.default(t.staticNode,a,{skipStaticElements:!1}));let{output:n,height:u}=o.get();return{output:n,outputHeight:u,staticOutput:a?`${a.get().output} +`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var ewe=_((ZVt,$Ce)=>{"use strict";var XCe=Be("stream"),ZCe=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],sj={},oCt=t=>{let e=new XCe.PassThrough,r=new XCe.PassThrough;e.write=a=>t("stdout",a),r.write=a=>t("stderr",a);let o=new console.Console(e,r);for(let a of ZCe)sj[a]=console[a],console[a]=o[a];return()=>{for(let a of ZCe)console[a]=sj[a];sj={}}};$Ce.exports=oCt});var aj=_(oj=>{"use strict";Object.defineProperty(oj,"__esModule",{value:!0});oj.default=new WeakMap});var cj=_(lj=>{"use strict";Object.defineProperty(lj,"__esModule",{value:!0});var aCt=sn(),twe=aCt.createContext({exit:()=>{}});twe.displayName="InternalAppContext";lj.default=twe});var Aj=_(uj=>{"use strict";Object.defineProperty(uj,"__esModule",{value:!0});var lCt=sn(),rwe=lCt.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});rwe.displayName="InternalStdinContext";uj.default=rwe});var pj=_(fj=>{"use strict";Object.defineProperty(fj,"__esModule",{value:!0});var cCt=sn(),nwe=cCt.createContext({stdout:void 0,write:()=>{}});nwe.displayName="InternalStdoutContext";fj.default=nwe});var gj=_(hj=>{"use strict";Object.defineProperty(hj,"__esModule",{value:!0});var uCt=sn(),iwe=uCt.createContext({stderr:void 0,write:()=>{}});iwe.displayName="InternalStderrContext";hj.default=iwe});var oQ=_(dj=>{"use strict";Object.defineProperty(dj,"__esModule",{value:!0});var ACt=sn(),swe=ACt.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});swe.displayName="InternalFocusContext";dj.default=swe});var awe=_((sKt,owe)=>{"use strict";var fCt=/[|\\{}()[\]^$+*?.-]/g;owe.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(fCt,"\\$&")}});var Awe=_((oKt,uwe)=>{"use strict";var pCt=awe(),hCt=typeof process=="object"&&process&&typeof process.cwd=="function"?process.cwd():".",cwe=[].concat(Be("module").builtinModules,"bootstrap_node","node").map(t=>new RegExp(`(?:\\((?:node:)?${t}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${t}(?:\\.js)?:\\d+:\\d+$)`));cwe.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var IB=class{constructor(e){e={ignoredPackages:[],...e},"internals"in e||(e.internals=IB.nodeInternals()),"cwd"in e||(e.cwd=hCt),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,gCt(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...cwe]}clean(e,r=0){r=" ".repeat(r),Array.isArray(e)||(e=e.split(` +`)),!/^\s*at /.test(e[0])&&/^\s*at /.test(e[1])&&(e=e.slice(1));let o=!1,a=null,n=[];return e.forEach(u=>{if(u=u.replace(/\\/g,"/"),this._internals.some(p=>p.test(u)))return;let A=/^\s*at /.test(u);o?u=u.trimEnd().replace(/^(\s+)at /,"$1"):(u=u.trim(),A&&(u=u.slice(3))),u=u.replace(`${this._cwd}/`,""),u&&(A?(a&&(n.push(a),a=null),n.push(u)):(o=!0,a=u))}),n.map(u=>`${r}${u} +`).join("")}captureString(e,r=this.captureString){typeof e=="function"&&(r=e,e=1/0);let{stackTraceLimit:o}=Error;e&&(Error.stackTraceLimit=e);let a={};Error.captureStackTrace(a,r);let{stack:n}=a;return Error.stackTraceLimit=o,this.clean(n)}capture(e,r=this.capture){typeof e=="function"&&(r=e,e=1/0);let{prepareStackTrace:o,stackTraceLimit:a}=Error;Error.prepareStackTrace=(A,p)=>this._wrapCallSite?p.map(this._wrapCallSite):p,e&&(Error.stackTraceLimit=e);let n={};Error.captureStackTrace(n,r);let{stack:u}=n;return Object.assign(Error,{prepareStackTrace:o,stackTraceLimit:a}),u}at(e=this.at){let[r]=this.capture(1,e);if(!r)return{};let o={line:r.getLineNumber(),column:r.getColumnNumber()};lwe(o,r.getFileName(),this._cwd),r.isConstructor()&&(o.constructor=!0),r.isEval()&&(o.evalOrigin=r.getEvalOrigin()),r.isNative()&&(o.native=!0);let a;try{a=r.getTypeName()}catch{}a&&a!=="Object"&&a!=="[object Object]"&&(o.type=a);let n=r.getFunctionName();n&&(o.function=n);let u=r.getMethodName();return u&&n!==u&&(o.method=u),o}parseLine(e){let r=e&&e.match(dCt);if(!r)return null;let o=r[1]==="new",a=r[2],n=r[3],u=r[4],A=Number(r[5]),p=Number(r[6]),h=r[7],E=r[8],I=r[9],v=r[10]==="native",b=r[11]===")",C,T={};if(E&&(T.line=Number(E)),I&&(T.column=Number(I)),b&&h){let L=0;for(let U=h.length-1;U>0;U--)if(h.charAt(U)===")")L++;else if(h.charAt(U)==="("&&h.charAt(U-1)===" "&&(L--,L===-1&&h.charAt(U-1)===" ")){let J=h.slice(0,U-1);h=h.slice(U+1),a+=` (${J}`;break}}if(a){let L=a.match(mCt);L&&(a=L[1],C=L[2])}return lwe(T,h,this._cwd),o&&(T.constructor=!0),n&&(T.evalOrigin=n,T.evalLine=A,T.evalColumn=p,T.evalFile=u&&u.replace(/\\/g,"/")),v&&(T.native=!0),a&&(T.function=a),C&&a!==C&&(T.method=C),T}};function lwe(t,e,r){e&&(e=e.replace(/\\/g,"/"),e.startsWith(`${r}/`)&&(e=e.slice(r.length+1)),t.file=e)}function gCt(t){if(t.length===0)return[];let e=t.map(r=>pCt(r));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${e.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var dCt=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),mCt=/^(.*?) \[as (.*?)\]$/;uwe.exports=IB});var pwe=_((aKt,fwe)=>{"use strict";fwe.exports=(t,e)=>t.replace(/^\t+/gm,r=>" ".repeat(r.length*(e||2)))});var gwe=_((lKt,hwe)=>{"use strict";var yCt=pwe(),ECt=(t,e)=>{let r=[],o=t-e,a=t+e;for(let n=o;n<=a;n++)r.push(n);return r};hwe.exports=(t,e,r)=>{if(typeof t!="string")throw new TypeError("Source code is missing.");if(!e||e<1)throw new TypeError("Line number must start from `1`.");if(t=yCt(t).split(/\r?\n/),!(e>t.length))return r={around:3,...r},ECt(e,r.around).filter(o=>t[o-1]!==void 0).map(o=>({line:o,value:t[o-1]}))}});var aQ=_(ru=>{"use strict";var CCt=ru&&ru.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),wCt=ru&&ru.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),ICt=ru&&ru.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&CCt(e,t,r);return wCt(e,t),e},BCt=ru&&ru.__rest||function(t,e){var r={};for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.indexOf(o)<0&&(r[o]=t[o]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(t);a{var{children:r}=t,o=BCt(t,["children"]);let a=Object.assign(Object.assign({},o),{marginLeft:o.marginLeft||o.marginX||o.margin||0,marginRight:o.marginRight||o.marginX||o.margin||0,marginTop:o.marginTop||o.marginY||o.margin||0,marginBottom:o.marginBottom||o.marginY||o.margin||0,paddingLeft:o.paddingLeft||o.paddingX||o.padding||0,paddingRight:o.paddingRight||o.paddingX||o.padding||0,paddingTop:o.paddingTop||o.paddingY||o.padding||0,paddingBottom:o.paddingBottom||o.paddingY||o.padding||0});return dwe.default.createElement("ink-box",{ref:e,style:a},r)});mj.displayName="Box";mj.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};ru.default=mj});var Cj=_(BB=>{"use strict";var yj=BB&&BB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(BB,"__esModule",{value:!0});var vCt=yj(sn()),HC=yj(iQ()),mwe=yj($6()),Ej=({color:t,backgroundColor:e,dimColor:r,bold:o,italic:a,underline:n,strikethrough:u,inverse:A,wrap:p,children:h})=>{if(h==null)return null;let E=I=>(r&&(I=HC.default.dim(I)),t&&(I=mwe.default(I,t,"foreground")),e&&(I=mwe.default(I,e,"background")),o&&(I=HC.default.bold(I)),a&&(I=HC.default.italic(I)),n&&(I=HC.default.underline(I)),u&&(I=HC.default.strikethrough(I)),A&&(I=HC.default.inverse(I)),I);return vCt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:p},internal_transform:E},h)};Ej.displayName="Text";Ej.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};BB.default=Ej});var wwe=_(nu=>{"use strict";var DCt=nu&&nu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),PCt=nu&&nu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),SCt=nu&&nu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&DCt(e,t,r);return PCt(e,t),e},vB=nu&&nu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nu,"__esModule",{value:!0});var ywe=SCt(Be("fs")),fs=vB(sn()),Ewe=vB(Awe()),xCt=vB(gwe()),Xf=vB(aQ()),hA=vB(Cj()),Cwe=new Ewe.default({cwd:process.cwd(),internals:Ewe.default.nodeInternals()}),bCt=({error:t})=>{let e=t.stack?t.stack.split(` +`).slice(1):void 0,r=e?Cwe.parseLine(e[0]):void 0,o,a=0;if(r?.file&&r?.line&&ywe.existsSync(r.file)){let n=ywe.readFileSync(r.file,"utf8");if(o=xCt.default(n,r.line),o)for(let{line:u}of o)a=Math.max(a,String(u).length)}return fs.default.createElement(Xf.default,{flexDirection:"column",padding:1},fs.default.createElement(Xf.default,null,fs.default.createElement(hA.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),fs.default.createElement(hA.default,null," ",t.message)),r&&fs.default.createElement(Xf.default,{marginTop:1},fs.default.createElement(hA.default,{dimColor:!0},r.file,":",r.line,":",r.column)),r&&o&&fs.default.createElement(Xf.default,{marginTop:1,flexDirection:"column"},o.map(({line:n,value:u})=>fs.default.createElement(Xf.default,{key:n},fs.default.createElement(Xf.default,{width:a+1},fs.default.createElement(hA.default,{dimColor:n!==r.line,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0},String(n).padStart(a," "),":")),fs.default.createElement(hA.default,{key:n,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0}," "+u)))),t.stack&&fs.default.createElement(Xf.default,{marginTop:1,flexDirection:"column"},t.stack.split(` +`).slice(1).map(n=>{let u=Cwe.parseLine(n);return u?fs.default.createElement(Xf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},u.function),fs.default.createElement(hA.default,{dimColor:!0,color:"gray"}," ","(",u.file,":",u.line,":",u.column,")")):fs.default.createElement(Xf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},n))})))};nu.default=bCt});var Bwe=_(iu=>{"use strict";var kCt=iu&&iu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),QCt=iu&&iu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),FCt=iu&&iu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&kCt(e,t,r);return QCt(e,t),e},cm=iu&&iu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(iu,"__esModule",{value:!0});var lm=FCt(sn()),Iwe=cm(m6()),TCt=cm(cj()),RCt=cm(Aj()),NCt=cm(pj()),LCt=cm(gj()),MCt=cm(oQ()),OCt=cm(wwe()),UCt=" ",_Ct="\x1B[Z",HCt="\x1B",lQ=class extends lm.PureComponent{constructor(){super(...arguments),this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=e=>{let{stdin:r}=this.props;if(!this.isRawModeSupported())throw r===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(r.setEncoding("utf8"),e){this.rawModeEnabledCount===0&&(r.addListener("data",this.handleInput),r.resume(),r.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount===0&&(r.setRawMode(!1),r.removeListener("data",this.handleInput),r.pause())},this.handleInput=e=>{e===""&&this.props.exitOnCtrlC&&this.handleExit(),e===HCt&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===UCt&&this.focusNext(),e===_Ct&&this.focusPrevious())},this.handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(e)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(e=>{let r=e.focusables[0].id;return{activeFocusId:this.findNextFocusable(e)||r}})},this.focusPrevious=()=>{this.setState(e=>{let r=e.focusables[e.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(e)||r}})},this.addFocusable=(e,{autoFocus:r})=>{this.setState(o=>{let a=o.activeFocusId;return!a&&r&&(a=e),{activeFocusId:a,focusables:[...o.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.filter(o=>o.id!==e)}))},this.activateFocusable=e=>{this.setState(r=>({focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r+1;o{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r-1;o>=0;o--)if(e.focusables[o].isActive)return e.focusables[o].id}}static getDerivedStateFromError(e){return{error:e}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return lm.default.createElement(TCt.default.Provider,{value:{exit:this.handleExit}},lm.default.createElement(RCt.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},lm.default.createElement(NCt.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},lm.default.createElement(LCt.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},lm.default.createElement(MCt.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?lm.default.createElement(OCt.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){Iwe.default.hide(this.props.stdout)}componentWillUnmount(){Iwe.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}};iu.default=lQ;lQ.displayName="InternalApp"});var Pwe=_(su=>{"use strict";var jCt=su&&su.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),qCt=su&&su.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),GCt=su&&su.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&jCt(e,t,r);return qCt(e,t),e},ou=su&&su.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(su,"__esModule",{value:!0});var YCt=ou(sn()),vwe=uO(),WCt=ou(AEe()),VCt=ou(f6()),KCt=ou(mEe()),JCt=ou(EEe()),wj=ou(fCe()),zCt=ou(zCe()),XCt=ou(d6()),ZCt=ou(ewe()),$Ct=GCt(W6()),ewt=ou(aj()),twt=ou(Bwe()),jC=process.env.CI==="false"?!1:KCt.default,Dwe=()=>{},Ij=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:r,outputHeight:o,staticOutput:a}=zCt.default(this.rootNode,this.options.stdout.columns||80),n=a&&a!==` +`;if(this.options.debug){n&&(this.fullStaticOutput+=a),this.options.stdout.write(this.fullStaticOutput+r);return}if(jC){n&&this.options.stdout.write(a),this.lastOutput=r;return}if(n&&(this.fullStaticOutput+=a),o>=this.options.stdout.rows){this.options.stdout.write(VCt.default.clearTerminal+this.fullStaticOutput+r),this.lastOutput=r;return}n&&(this.log.clear(),this.options.stdout.write(a),this.log(r)),!n&&r!==this.lastOutput&&this.throttledLog(r),this.lastOutput=r},JCt.default(this),this.options=e,this.rootNode=$Ct.createNode("ink-root"),this.rootNode.onRender=e.debug?this.onRender:vwe(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=WCt.default.create(e.stdout),this.throttledLog=e.debug?this.log:vwe(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=wj.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=XCt.default(this.unmount,{alwaysLast:!1}),e.patchConsole&&this.patchConsole(),jC||(e.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{e.stdout.off("resize",this.onRender)})}render(e){let r=YCt.default.createElement(twt.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},e);wj.default.updateContainer(r,this.container,null,Dwe)}writeToStdout(e){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stdout.write(e);return}this.log.clear(),this.options.stdout.write(e),this.log(this.lastOutput)}}writeToStderr(e){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(e),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stderr.write(e);return}this.log.clear(),this.options.stderr.write(e),this.log(this.lastOutput)}}unmount(e){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),jC?this.options.stdout.write(this.lastOutput+` +`):this.options.debug||this.log.done(),this.isUnmounted=!0,wj.default.updateContainer(null,this.container,null,Dwe),ewt.default.delete(this.options.stdout),e instanceof Error?this.rejectExitPromise(e):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((e,r)=>{this.resolveExitPromise=e,this.rejectExitPromise=r})),this.exitPromise}clear(){!jC&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=ZCt.default((e,r)=>{e==="stdout"&&this.writeToStdout(r),e==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};su.default=Ij});var xwe=_(DB=>{"use strict";var Swe=DB&&DB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(DB,"__esModule",{value:!0});var rwt=Swe(Pwe()),cQ=Swe(aj()),nwt=Be("stream"),iwt=(t,e)=>{let r=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},swt(e)),o=owt(r.stdout,()=>new rwt.default(r));return o.render(t),{rerender:o.render,unmount:()=>o.unmount(),waitUntilExit:o.waitUntilExit,cleanup:()=>cQ.default.delete(r.stdout),clear:o.clear}};DB.default=iwt;var swt=(t={})=>t instanceof nwt.Stream?{stdout:t,stdin:process.stdin}:t,owt=(t,e)=>{let r;return cQ.default.has(t)?r=cQ.default.get(t):(r=e(),cQ.default.set(t,r)),r}});var kwe=_(Zf=>{"use strict";var awt=Zf&&Zf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),lwt=Zf&&Zf.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),cwt=Zf&&Zf.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&awt(e,t,r);return lwt(e,t),e};Object.defineProperty(Zf,"__esModule",{value:!0});var PB=cwt(sn()),bwe=t=>{let{items:e,children:r,style:o}=t,[a,n]=PB.useState(0),u=PB.useMemo(()=>e.slice(a),[e,a]);PB.useLayoutEffect(()=>{n(e.length)},[e.length]);let A=u.map((h,E)=>r(h,a+E)),p=PB.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},o),[o]);return PB.default.createElement("ink-box",{internal_static:!0,style:p},A)};bwe.displayName="Static";Zf.default=bwe});var Fwe=_(SB=>{"use strict";var uwt=SB&&SB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(SB,"__esModule",{value:!0});var Awt=uwt(sn()),Qwe=({children:t,transform:e})=>t==null?null:Awt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:e},t);Qwe.displayName="Transform";SB.default=Qwe});var Rwe=_(xB=>{"use strict";var fwt=xB&&xB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xB,"__esModule",{value:!0});var pwt=fwt(sn()),Twe=({count:t=1})=>pwt.default.createElement("ink-text",null,` +`.repeat(t));Twe.displayName="Newline";xB.default=Twe});var Mwe=_(bB=>{"use strict";var Nwe=bB&&bB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(bB,"__esModule",{value:!0});var hwt=Nwe(sn()),gwt=Nwe(aQ()),Lwe=()=>hwt.default.createElement(gwt.default,{flexGrow:1});Lwe.displayName="Spacer";bB.default=Lwe});var uQ=_(kB=>{"use strict";var dwt=kB&&kB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kB,"__esModule",{value:!0});var mwt=sn(),ywt=dwt(Aj()),Ewt=()=>mwt.useContext(ywt.default);kB.default=Ewt});var Uwe=_(QB=>{"use strict";var Cwt=QB&&QB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(QB,"__esModule",{value:!0});var Owe=sn(),wwt=Cwt(uQ()),Iwt=(t,e={})=>{let{stdin:r,setRawMode:o,internal_exitOnCtrlC:a}=wwt.default();Owe.useEffect(()=>{if(e.isActive!==!1)return o(!0),()=>{o(!1)}},[e.isActive,o]),Owe.useEffect(()=>{if(e.isActive===!1)return;let n=u=>{let A=String(u),p={upArrow:A==="\x1B[A",downArrow:A==="\x1B[B",leftArrow:A==="\x1B[D",rightArrow:A==="\x1B[C",pageDown:A==="\x1B[6~",pageUp:A==="\x1B[5~",return:A==="\r",escape:A==="\x1B",ctrl:!1,shift:!1,tab:A===" "||A==="\x1B[Z",backspace:A==="\b",delete:A==="\x7F"||A==="\x1B[3~",meta:!1};A<=""&&!p.return&&(A=String.fromCharCode(A.charCodeAt(0)+"a".charCodeAt(0)-1),p.ctrl=!0),A.startsWith("\x1B")&&(A=A.slice(1),p.meta=!0);let h=A>="A"&&A<="Z",E=A>="\u0410"&&A<="\u042F";A.length===1&&(h||E)&&(p.shift=!0),p.tab&&A==="[Z"&&(p.shift=!0),(p.tab||p.backspace||p.delete)&&(A=""),(!(A==="c"&&p.ctrl)||!a)&&t(A,p)};return r?.on("data",n),()=>{r?.off("data",n)}},[e.isActive,r,a,t])};QB.default=Iwt});var _we=_(FB=>{"use strict";var Bwt=FB&&FB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(FB,"__esModule",{value:!0});var vwt=sn(),Dwt=Bwt(cj()),Pwt=()=>vwt.useContext(Dwt.default);FB.default=Pwt});var Hwe=_(TB=>{"use strict";var Swt=TB&&TB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(TB,"__esModule",{value:!0});var xwt=sn(),bwt=Swt(pj()),kwt=()=>xwt.useContext(bwt.default);TB.default=kwt});var jwe=_(RB=>{"use strict";var Qwt=RB&&RB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(RB,"__esModule",{value:!0});var Fwt=sn(),Twt=Qwt(gj()),Rwt=()=>Fwt.useContext(Twt.default);RB.default=Rwt});var Gwe=_(LB=>{"use strict";var qwe=LB&&LB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(LB,"__esModule",{value:!0});var NB=sn(),Nwt=qwe(oQ()),Lwt=qwe(uQ()),Mwt=({isActive:t=!0,autoFocus:e=!1}={})=>{let{isRawModeSupported:r,setRawMode:o}=Lwt.default(),{activeId:a,add:n,remove:u,activate:A,deactivate:p}=NB.useContext(Nwt.default),h=NB.useMemo(()=>Math.random().toString().slice(2,7),[]);return NB.useEffect(()=>(n(h,{autoFocus:e}),()=>{u(h)}),[h,e]),NB.useEffect(()=>{t?A(h):p(h)},[t,h]),NB.useEffect(()=>{if(!(!r||!t))return o(!0),()=>{o(!1)}},[t]),{isFocused:Boolean(h)&&a===h}};LB.default=Mwt});var Ywe=_(MB=>{"use strict";var Owt=MB&&MB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(MB,"__esModule",{value:!0});var Uwt=sn(),_wt=Owt(oQ()),Hwt=()=>{let t=Uwt.useContext(_wt.default);return{enableFocus:t.enableFocus,disableFocus:t.disableFocus,focusNext:t.focusNext,focusPrevious:t.focusPrevious}};MB.default=Hwt});var Wwe=_(Bj=>{"use strict";Object.defineProperty(Bj,"__esModule",{value:!0});Bj.default=t=>{var e,r,o,a;return{width:(r=(e=t.yogaNode)===null||e===void 0?void 0:e.getComputedWidth())!==null&&r!==void 0?r:0,height:(a=(o=t.yogaNode)===null||o===void 0?void 0:o.getComputedHeight())!==null&&a!==void 0?a:0}}});var ic=_(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});var jwt=xwe();Object.defineProperty(ro,"render",{enumerable:!0,get:function(){return jwt.default}});var qwt=aQ();Object.defineProperty(ro,"Box",{enumerable:!0,get:function(){return qwt.default}});var Gwt=Cj();Object.defineProperty(ro,"Text",{enumerable:!0,get:function(){return Gwt.default}});var Ywt=kwe();Object.defineProperty(ro,"Static",{enumerable:!0,get:function(){return Ywt.default}});var Wwt=Fwe();Object.defineProperty(ro,"Transform",{enumerable:!0,get:function(){return Wwt.default}});var Vwt=Rwe();Object.defineProperty(ro,"Newline",{enumerable:!0,get:function(){return Vwt.default}});var Kwt=Mwe();Object.defineProperty(ro,"Spacer",{enumerable:!0,get:function(){return Kwt.default}});var Jwt=Uwe();Object.defineProperty(ro,"useInput",{enumerable:!0,get:function(){return Jwt.default}});var zwt=_we();Object.defineProperty(ro,"useApp",{enumerable:!0,get:function(){return zwt.default}});var Xwt=uQ();Object.defineProperty(ro,"useStdin",{enumerable:!0,get:function(){return Xwt.default}});var Zwt=Hwe();Object.defineProperty(ro,"useStdout",{enumerable:!0,get:function(){return Zwt.default}});var $wt=jwe();Object.defineProperty(ro,"useStderr",{enumerable:!0,get:function(){return $wt.default}});var eIt=Gwe();Object.defineProperty(ro,"useFocus",{enumerable:!0,get:function(){return eIt.default}});var tIt=Ywe();Object.defineProperty(ro,"useFocusManager",{enumerable:!0,get:function(){return tIt.default}});var rIt=Wwe();Object.defineProperty(ro,"measureElement",{enumerable:!0,get:function(){return rIt.default}})});var Dj={};Kt(Dj,{Gem:()=>vj});var Vwe,um,vj,AQ=Et(()=>{Vwe=$e(ic()),um=$e(sn()),vj=(0,um.memo)(({active:t})=>{let e=(0,um.useMemo)(()=>t?"\u25C9":"\u25EF",[t]),r=(0,um.useMemo)(()=>t?"green":"yellow",[t]);return um.default.createElement(Vwe.Text,{color:r},e)})});var Jwe={};Kt(Jwe,{useKeypress:()=>Am});function Am({active:t},e,r){let{stdin:o}=(0,Kwe.useStdin)(),a=(0,fQ.useCallback)((n,u)=>e(n,u),r);(0,fQ.useEffect)(()=>{if(!(!t||!o))return o.on("keypress",a),()=>{o.off("keypress",a)}},[t,a,o])}var Kwe,fQ,OB=Et(()=>{Kwe=$e(ic()),fQ=$e(sn())});var Xwe={};Kt(Xwe,{FocusRequest:()=>zwe,useFocusRequest:()=>Pj});var zwe,Pj,Sj=Et(()=>{OB();zwe=(r=>(r.BEFORE="before",r.AFTER="after",r))(zwe||{}),Pj=function({active:t},e,r){Am({active:t},(o,a)=>{a.name==="tab"&&(a.shift?e("before"):e("after"))},r)}});var Zwe={};Kt(Zwe,{useListInput:()=>UB});var UB,pQ=Et(()=>{OB();UB=function(t,e,{active:r,minus:o,plus:a,set:n,loop:u=!0}){Am({active:r},(A,p)=>{let h=e.indexOf(t);switch(p.name){case o:{let E=h-1;if(u){n(e[(e.length+E)%e.length]);return}if(E<0)return;n(e[E])}break;case a:{let E=h+1;if(u){n(e[E%e.length]);return}if(E>=e.length)return;n(e[E])}break}},[e,t,a,n,u])}});var hQ={};Kt(hQ,{ScrollableItems:()=>nIt});var E0,La,nIt,gQ=Et(()=>{E0=$e(ic()),La=$e(sn());Sj();pQ();nIt=({active:t=!0,children:e=[],radius:r=10,size:o=1,loop:a=!0,onFocusRequest:n,willReachEnd:u})=>{let A=L=>{if(L.key===null)throw new Error("Expected all children to have a key");return L.key},p=La.default.Children.map(e,L=>A(L)),h=p[0],[E,I]=(0,La.useState)(h),v=p.indexOf(E);(0,La.useEffect)(()=>{p.includes(E)||I(h)},[e]),(0,La.useEffect)(()=>{u&&v>=p.length-2&&u()},[v]),Pj({active:t&&!!n},L=>{n?.(L)},[n]),UB(E,p,{active:t,minus:"up",plus:"down",set:I,loop:a});let b=v-r,C=v+r;C>p.length&&(b-=C-p.length,C=p.length),b<0&&(C+=-b,b=0),C>=p.length&&(C=p.length-1);let T=[];for(let L=b;L<=C;++L){let U=p[L],J=t&&U===E;T.push(La.default.createElement(E0.Box,{key:U,height:o},La.default.createElement(E0.Box,{marginLeft:1,marginRight:1},La.default.createElement(E0.Text,null,J?La.default.createElement(E0.Text,{color:"cyan",bold:!0},">"):" ")),La.default.createElement(E0.Box,null,La.default.cloneElement(e[L],{active:J}))))}return La.default.createElement(E0.Box,{flexDirection:"column",width:"100%"},T)}});var $we,$f,eIe,xj,tIe,bj=Et(()=>{$we=$e(ic()),$f=$e(sn()),eIe=Be("readline"),xj=$f.default.createContext(null),tIe=({children:t})=>{let{stdin:e,setRawMode:r}=(0,$we.useStdin)();(0,$f.useEffect)(()=>{r&&r(!0),e&&(0,eIe.emitKeypressEvents)(e)},[e,r]);let[o,a]=(0,$f.useState)(new Map),n=(0,$f.useMemo)(()=>({getAll:()=>o,get:u=>o.get(u),set:(u,A)=>a(new Map([...o,[u,A]]))}),[o,a]);return $f.default.createElement(xj.Provider,{value:n,children:t})}});var kj={};Kt(kj,{useMinistore:()=>iIt});function iIt(t,e){let r=(0,dQ.useContext)(xj);if(r===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof t>"u")return r.getAll();let o=(0,dQ.useCallback)(n=>{r.set(t,n)},[t,r.set]),a=r.get(t);return typeof a>"u"&&(a=e),[a,o]}var dQ,Qj=Et(()=>{dQ=$e(sn());bj()});var yQ={};Kt(yQ,{renderForm:()=>sIt});async function sIt(t,e,{stdin:r,stdout:o,stderr:a}){let n,u=p=>{let{exit:h}=(0,mQ.useApp)();Am({active:!0},(E,I)=>{I.name==="return"&&(n=p,h())},[h,p])},{waitUntilExit:A}=(0,mQ.render)(Fj.default.createElement(tIe,null,Fj.default.createElement(t,{...e,useSubmit:u})),{stdin:r,stdout:o,stderr:a});return await A(),n}var mQ,Fj,EQ=Et(()=>{mQ=$e(ic()),Fj=$e(sn());bj();OB()});var sIe=_(_B=>{"use strict";Object.defineProperty(_B,"__esModule",{value:!0});_B.UncontrolledTextInput=void 0;var nIe=sn(),Tj=sn(),rIe=ic(),fm=iQ(),iIe=({value:t,placeholder:e="",focus:r=!0,mask:o,highlightPastedText:a=!1,showCursor:n=!0,onChange:u,onSubmit:A})=>{let[{cursorOffset:p,cursorWidth:h},E]=Tj.useState({cursorOffset:(t||"").length,cursorWidth:0});Tj.useEffect(()=>{E(T=>{if(!r||!n)return T;let L=t||"";return T.cursorOffset>L.length-1?{cursorOffset:L.length,cursorWidth:0}:T})},[t,r,n]);let I=a?h:0,v=o?o.repeat(t.length):t,b=v,C=e?fm.grey(e):void 0;if(n&&r){C=e.length>0?fm.inverse(e[0])+fm.grey(e.slice(1)):fm.inverse(" "),b=v.length>0?"":fm.inverse(" ");let T=0;for(let L of v)T>=p-I&&T<=p?b+=fm.inverse(L):b+=L,T++;v.length>0&&p===v.length&&(b+=fm.inverse(" "))}return rIe.useInput((T,L)=>{if(L.upArrow||L.downArrow||L.ctrl&&T==="c"||L.tab||L.shift&&L.tab)return;if(L.return){A&&A(t);return}let U=p,J=t,te=0;L.leftArrow?n&&U--:L.rightArrow?n&&U++:L.backspace||L.delete?p>0&&(J=t.slice(0,p-1)+t.slice(p,t.length),U--):(J=t.slice(0,p)+T+t.slice(p,t.length),U+=T.length,T.length>1&&(te=T.length)),p<0&&(U=0),p>t.length&&(U=t.length),E({cursorOffset:U,cursorWidth:te}),J!==t&&u(J)},{isActive:r}),nIe.createElement(rIe.Text,null,e?v.length>0?b:C:b)};_B.default=iIe;_B.UncontrolledTextInput=t=>{let[e,r]=Tj.useState("");return nIe.createElement(iIe,Object.assign({},t,{value:e,onChange:r}))}});var lIe={};Kt(lIe,{Pad:()=>Rj});var oIe,aIe,Rj,Nj=Et(()=>{oIe=$e(ic()),aIe=$e(sn()),Rj=({length:t,active:e})=>{if(t===0)return null;let r=t>1?` ${"-".repeat(t-1)}`:" ";return aIe.default.createElement(oIe.Text,{dimColor:!e},r)}});var cIe={};Kt(cIe,{ItemOptions:()=>oIt});var jB,w0,oIt,uIe=Et(()=>{jB=$e(ic()),w0=$e(sn());pQ();AQ();Nj();oIt=function({active:t,skewer:e,options:r,value:o,onChange:a,sizes:n=[]}){let u=r.filter(({label:p})=>!!p).map(({value:p})=>p),A=r.findIndex(p=>p.value===o&&p.label!="");return UB(o,u,{active:t,minus:"left",plus:"right",set:a}),w0.default.createElement(w0.default.Fragment,null,r.map(({label:p},h)=>{let E=h===A,I=n[h]-1||0,v=p.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),b=Math.max(0,I-v.length-2);return p?w0.default.createElement(jB.Box,{key:p,width:I,marginLeft:1},w0.default.createElement(jB.Text,{wrap:"truncate"},w0.default.createElement(vj,{active:E})," ",p),e?w0.default.createElement(Rj,{active:t,length:b}):null):w0.default.createElement(jB.Box,{key:`spacer-${h}`,width:I,marginLeft:1})}))}});var PIe=_((zJt,DIe)=>{var Gj;DIe.exports=()=>(typeof Gj>"u"&&(Gj=Be("zlib").brotliDecompressSync(Buffer.from("W7N0VsO4vY64HWDyXqed+oAyZJiyif46DqkVeS70D7uBnPuR2kjnWVorAtyjDFXVvATfM+Tuqr1+1bYAIEUNta6ugea03UJD4TsodKjGeUw/bGGX6mhltUQrTQIbJEj0XK5lyMNud6t6GAbPXF6Urk5rakLjbZ+5ve/P+mnVIwyyz39xSCEMtNeaHeUXus5lJMLIZm3xMYCOW39JEISQMya1gqvZY3yMrzHNIF4o/YdN9W1/XoeiNhLjznRsSvd8IcYOHpiZUeHCvzU1bBH0kv5jZc2tNMJjZXTDS4O3iNP5GVWLhORyhwLWVqqDSpJIKDSanski+rpbTfPvz+tQCsLXpKWE7BWSyavV16ZowXC3rhob0tYTq6X6eiM3RoxSvoyWSynddpITuOAm3FLF/lLfey4nuuOu6XYTEImeQeJJ2BkdSrrW35e/V/vPz9f26dV0LXece4qZejCYPG1Tg9u7MIxEQMFqCOIQzpWbw9fWN2WbUzvJcGlf37TTrAKEBLeZ+wKOIBS+35z+lBmB8N0skCzkbmn2fkp/eK1ZPb87zSWfQJ2NG9DcyC9dMcHekDz98qf59at0mMjcpTSc5tTCOenuC6RIz5q3ewZuBkvVsv+m4kdbNh3LmNoPlePqOIBWYQcMC5sHCJ6nxOt4cGhoEcf3J5NmMNYvWeLG0I8gVnb3Fyh107od3zuBGSRkRuBLP9To8+Pubt0k7WY/nzSaQRhwBBli/OfiRlCSOLt2S1ILi83nw4cpWmufs5tNLsCBuRCR/tDWvRAR1bZH9KOGWn887P4fbCs78vG96mooBNiNghL5JsuTaqJMsIwSpPHjG1vHwx6ksl07vvkMOCjUA6noZrh8yN0wcfdL8Ihl84+H3wbSj0+yZld0J/1IlYXTmR9jBraboyFMwA+w76fTcU24Ha+sEtjV3/Sle3aw4PgChy3N57MCTBqeEhjKNChBLCOZn+20CBjZ+AILHr7qnf5ykfwfKXt7+s6M5jYS0IBs5J0Rdg+okJOQZF7i/7/vp/37jQwJtpMxPlQQydPKuugHoUZed+0192xc+1gOj4UC8ASaNx75PLu/sXuZfc51hUYV0Pwg2M+xv2HLusiaMJZiBZmyqAqUYcu6INTf96Xat/tx7nuJRIKQKJBi2aDlQf6jWP41jOsEQNlzDaN7nBcb8d5z7m29e+9LG+9lopz5MlFGvkyEkQmyi5kJ/BYA8j0kQCdASg1KcgVI2xWUSxVND/WDtsu/hlkEqQhLlCNM0vqD7OrBdg/DJP9hnFY9TbGfhlUte/kX617se9nrRe96uezVshfL9qu900K0Yrj7ERpl2XILKbXaZt+totxPUwQXF6OLC/z//95qlpAk0g5tkQL+f6fuTFYk5+qmt6d6NQXZYZR/n1gt8f9/P/9fu9Zc66ydcU5e8iCf8z4XfIXZ5ySPUH02/id7Z4/xQh8ulAACD/JuAUGhqkSWqDoqZIWpcCx0VYVlcBW2xpqiCgfS4AD1+EQCCmDAYBcnqW921lkZBJThu739d//TzshiIGEg8trZbj/70WIaBTT3zQWvZbnEApRcakqo2G/y338T6Pl/MfuMurt7ywghiwo7opXEmB3oQO1dKoPo+GPo3ay/aQncIeG8K1AgRIUkRBANFCsUabshQaxi2+72ntjXI5rcrggfmz9gQ99m9dsRMoeEexZtvAVoI0CjFsQCHiQTNDMJyWTvfVpLyci8v+3/gHlF9EVK1AC70RuVXz8LlbG9cO9fq+AAg/YXBE/gdlqBMTt5/ylcCGKCChMUEEGFICpcqDCc4czhYgoXLnSwxcA97879/z/fXefA0++/xRYVS1SUoQwVERVhqAhDRQYiIsJMREQGKmrp/P/Hm3cB6f+AAwICDAIMAizVwKoMrMrAwFIXGBgsWLBgVA2In1vfw3fnXvvcfkaMaDGiRQsEAkE2CEQJki1BNggEmyDqJSVKlDiC/Qzgtv//h5fwKhzfr1NCL4AVMRggjByRBi1sREq0nvh9F8QPKLex1Ay6YFkVDKHc/2B1gvKfg34FfNTIZ+lTTTkKJu4btZg1+n8WW8ZusGo1bvSbpSuvtuoVo1Z5Ixea/I1fzIQfdfOujUrD0VyocaP/DX+r2crEjLpq5VMX+ca2hl+j1rR1GCLyNul0sXQsC2UD/ek1G9+vU/E5hTdPKNW4kUlMy/Uztqt5o8fSMUamxqKDcvkxcfyJTbmUdlL53aB3+PQpGUWCyfi9Xkl5WCRv+AQxES3Yp8HbjuT7WgSQ28I/E8MSUnVV0nDZj+Yv63Pimta63/odfZHHpXoXu1It8mHg272pRt4fB6x30X/NGpInnbAgBtzlO5JW5NlYyJpIs5ztgghUjVKSRELJMM8tUdi+a73okhvxd1pi7624wJ8JEcv+L3k7bjfK0QLlHBAsIkpkxpCf3sSAp0tqJ5Kpjqm6gDJPZn+tfiUrmHlo+wMG7eU/7JqB+kiVBPPkzc7E7vKyfO+QMYrvuTTPZnyb2Q90HtskG7kQh1r9zyQm7rhPFX4g99uiAYpx2pJDDLYSDymQOI5q+ZAYGzSJxmBI3JaIbRKGxasovOZgSGJ61NQZqb7PvRnDVNqbK4aRuid5R0SBv4mFTx4QWP5NHBnzQKbhEmoFyjmZwLabzfUfbUTO+hYNCC/MhLdqGWvgvbsNTacOCqvwOkVe3t5UPTywyD6HwrXye8aZNsW/dyzpGX/K1bFmKKYf1+Fi1O2cUZojLQiFfXw9YjliXyHjVwIamUStWSe4Jtz+hDNUAldNdfQvEtLk85yEIghw1ODCpXYZsnT+8BY+pkDJIJqzTOS1xso5x2z8nxwxUIMUQbSHLWtDCrU7Jb1A8qE/vBZRIGTRyK/cgJl8/6iBE9QAxrb4dPUD0C33ev43TBEEKNrCJJJ2MbOhPzzhpKBkEJ04MZ2/EIqLuCjKG6M8GXtvCJlEz3d8WbrXWWZvc3V/mDrWGiCSyPhNV7KXntbad4hFFPsfPJn9yaYTd3l+olchz79FFwJvqPYY79l6avzCWaEe/UcrKPCvLGMC+Koc5fKg+IQjvRNL7mb4ch2+/z7ATG7w49dXeSzwoJj3Vq3PSbyy9P/G3tepfWoR5zX9khGTY1a+6PFOakmP3o9WyMA8n/x5EQfOnmewH0vVzSbM1CadNk9wUvi1n+8YaJRzrrnLogO1s1LXct3OlWa0IzNm4lqM/oy0PTfLmlRs0WzPZ91gHh14gy/yhxJ9T0yRj2A5c+S+hcDyE5Jw96wthJviTpvdk+uZo3so02B77Tlp71d7gyEZ4R6Jg5DdKTn7aTKUIUbi6sV4WM1i8Ob9jSWufkkhbjn+Q/yHah+CH8KP3wTEHKopyJOp2FnENQz3d5AhXHCqBw48WFPhCRy+yRB7qmwD0udqQK7bQQh5NSg32EF1PsYMDcyyg+zQREdN2tTYPkIpiuy4N7FvUVxwNXuZlNWImbQ4xKBmwhrDKOcvr0X3XTl1SpArNoOBIL78m4PY7Wx9kY8dNNcNES+yz2Xab11Nh7Soagsnat4+MEfwH8FMW4OBFSIiHM4KzIq7ohyZVmzQ3YfRsg4gnipBfikKayJMoB+n5NY9hpZV1pIQlFtEGv7FY1rIEeUNsIxqnjxd5hNisakMFtNm+Umqw/tC6jyD79uhVJqzO5777VPL/RaR2ZYwThbjQ/FEVt9O7zJ1gvK2Qn+d99qx02WqmTKuuWw/2skaSKQnX0TBj/No2LfBsX6UTY+WDmH9IB3eFBYvJuzJrV3Tyq/pdH+2qohlaX+2wYo0T68jNQA8jTRYdAgnILW6Qe2Jnd6o7ALCURw+UJC3x1EdAmJ5gcduyPy1T7aHcwIZnbw3PdGrB7mYt7Mz8a25nv2prD+n5bUhaC8yJNqdrSu9egf4m3rjPvAXPgTwilvFqgVdftjvqmsWhN5p/zr+Vv115C0KD1L0gMK0FxNjNpmytqWuUWv+qbVSslN519OHhJKWl1ny5yuoLbFicgCn615ZLUwvBSJQ/QUFo37lv9wztenqti7F6Hh1UBar/rDriUdzs6zX77dK7iEVbBP18EbYbj6vXKDNxcScxPGfB159+tC626qYqPv8Wc3vBLNyTZQyi0NVSosuPKEWzzf6spROBde19S8c1+HjYEl8+LG+5P+tUZ6leAWZ9FpSzWd1wV4TnW0qqo1UTV3SQPBLvhON2/2d4uYZl3+P59pEhnprMZcHsbUvy7RWW7f1Qen3uVJc4uYaXJdGxpNNxPwpYd06sBJH0y7ofVp9g24cQvQJIk+CZs79pkRYrdQuFAdrU2oMVXSnptOFEEa6n6iTbTrIRl71kL2QFMMy39B4i0eVXFc6zqBoJ+lQFbVHhh1MKMjKQ+aU3kTyaGQAi9FkizaVL0EPzZnOgOLa07wIfjqyNVggNZo2x9u6pPaqmxq2Za2EIizZBvk9It1jFKX+dlkBeJUdTdw+oSrEHmOKK3KW9j7FImK8+NhGB1RSr40nT9J+Q8klhl1hqGpphjANWZEkutG8riL2II2Dqb1TUhVjUkbgjYfPGYkgnfx7P9l9nJsptyTbg/ikHikY8tsUVRT/qkKhInkXsfrcUNGPWZpZDHdnlHQ/VdB+qjZYJDa1fvo99R5vCn1RMAgJy3dzMXmzNU5Si4GPKCwKj66QZ9jY9ObAxSPzzK8xDIMAKVpQS5re26LKY67R+qS3fBtNnPCjk4AlyQnh4Wb14tC9MDZbykI92bgqfaiI6ugD72rK06xoAGXbYHtFTUmh5oFfmBOAH5sfQNowjIKa0tu3yVdUVMU3mNYhF6lwD0Vh1tniCATdsLDxYhELszBMQ7DJ9VTe1xaGBjoT7YcUsKh+tvb0M0DmbAxNXATcTyuSL6fz4XZvSqe06+rWtorbHd3jVuR24s7LUmQrAkTRDSQ2twLFCdt+KDrTbek0deP+8DMp8PeNfedHTOabz+4WihNS5ineym0unKTxX1Vm6893O7LtJ1UfYkUf+euKXZrt4pn1MQnRFIFaCjv5mbhNXmqyS1hXWSzARwajJmzRnYeiVyxM0TGXKaRLYwyd/YNftUCvLdyOThbqntFoxSJLSrMqdY3M9nPFdWb59uCUYYpquap6qyikQHpHe7+dL5VhhyOl2cm6PHGYlMVnZTa9svUlTslvL6ChXUrDL9zErkH1zSnHcNIpITbf48LiSjn5Iin6yaIn5wuVO1aWDenUjU05MxOhZvECedTmUUVg8nWUCjn2TlGGgtL8DtwlIaZnr5qV2iN6ZFXJoNLkVTZeRTKIUoNXi6GjuhMghcuc8ek7qGwZlkwHfUQlCVbAKF1KUauuazVphapnb3g7i4muLZpKWkEPWYYhNRicqatX5nXGloEZYqvNzyIv66Hz0zVVZNyWTxjambaesR/LTk8pzIwNIlPJ9qKJ2um2QUSbnEuN2E1XDIU1kAFflfPxDlwET//+9wWCP5uM8HlGck27TCJ+elTFFo6WaiQkqBuCzlaXSsq01VTG9RRbMt5m2ZHzpxQcFxMVHHONCFoWR56G5qsxt7VHXYLCsCRoAjGaN0xfx3OMoTWhrn7QKROn45rjzBS1bJvU2Eh27JUeTNJVvWrQ41/KY8X5SdDchPUL3PPSTCo0eV6qIaV7W6YncTSm1CWmvfaI04OWybQGMlJD2B/DpOq5QpRa7TSD0+DPVCgsvIEnfDi94PNyw+pW5TM0/teFVIWtJyDoLKqsrIwybKWsuWmPIRnCqoGoCGDlYwQ1+e1yrcHsbBpmpW2heElNoWHifC2AZNkgjmE7OJntikYBKd8JlwLcIm+WG7CQnbIPaX6UT0+5fOFS56YijW2CJ1sgDBXxBKiGlWrlbgxWzPsDH+mmCjnj3o8MepJZeuJeWVjwnhZowKtmLL0gsVmt2XapZOzsaDFK2dgVUsnbddO2ERp8QJ87T5N+YdbsKswOVmMDHJqCmalSCh5azlrXnem0Jp0dsej+srtwDoAsBYb9K1+mArzgVAdnoE5FzR2pQzh+eITjB0VaRJHzY7Y4HHTe/aqbbskNcPoTzvSTzDmTZpKpofyaXRY2nrlzlLOMcyTK967wnWScimu3ugQMytJHTBflLW7YXHEM6wQwff8Rdaatz2hOm04tapyslM0vn5rdJusCckVfBNeXBdhLtvX4bArCJyzeV/KTfvIIAs/s8EVlib3C+FAvij0WSy/L+7TcHGwlMV/L4sR7smlC4NylhIA8QCvZNcSl1vdhLaEWGFr2MQ1PrQPrO1pCdwCclEbdC6j756Jp+HGU7u9tsACbU64K+bqpVou0uXIlsBN5TQPQJZVzRvAoi+dt4ZXhxPrYF6Zp9i13i4SeShQZeMxuje/Aca1sOOHjXtk1C+VDfigOUWo70JD++mhENpLS5at4a2vEITQ5RS3kk3Awatdj23X0la8/hwLFikRFe6OWjCudyHdStLbuZHPrek0B+e5EjSO35TYZpkfZ11uEZSmjk4+BuNaOLiC7mcV3oYbbRjXssbJq1Z1C4p6d2w4gkmaplD4SsFxVpiAWraOFTvryXRij5glUNL58/UGwEYY5FEiHJB27RF3HnO75+6E3h10UW/Zg8iw/8Y0QhYzLezzcYIihuLGLWqJeddqiZtIYT4hyEl2tgcpplhdMvsRxnn3sB00XlFotIx/PUFDB4Oah1LbJzfZGdUj/Yph1ePFOKuTr/lEdU79Tak+1cVsqUP1z4RtjE/mx2zcBO6Z2Uy+mfBkyXkQ3ssxlJxlxfeC/yqj6YfWd0wg1auZIZC6Qd1KTAWIGbKrAJBsALMfUXaaeHypXYYondNJE4u4CRUtHo2aJpsDA888sviOByVrzQZtcMRcSbRLdhXEDC8cwkDi+af6D5po2okVBWBH9NeKOCdVix2nwLzy4gMMba6o+t8zp2V6cDvbXnURz/gdPzEUSNupFOBHx1kuZPavh51/40TpURO0gCNtD286/1ZOrUGF4RTdeoJM98vVe0tsSj12gdGzHGWJumXWQOR3dXTviNmHAD2xIiGJID1SmBp8UwJQcx6oWvVuMVohXtUCZW92MKWZePE+QfqWQTHsuM4DTRwhRBg6+/UWMMrPXxytDHOS/g9cqiTHKwLPB1Lioy7Hq+8dXfOXVagL1tUhpHbbdo3YKHefpKrw7q6fSVFpgI94ZBoSkorXonUxOmdeM8j5niLluyyS8lZExZpdb1y/U5dms/2TDl2rodI4YraJb7ei/sl48on3db469mHpaKXwmHn+5vfi46Ytcodz98URzanklUH0ALa5P/vLpQNzRTMHwICxVG28bdIMdW0nrK+JOs99+ahONBbfRd4vdIi57myhcV7HOv+yKZ0u2iiI1m+Ue2srFufw6CS2Cbl2n9wd2V9PtdXQKz6DJWcmx514eEqkTDrumsm/OpCoFC+GFvDaKUurv22QPILqClBLSEejm/lgOYXLPVM8aWlvmC9wL/fwKiSlvLSpVheMsTUpyqggQxhbg1lg7KZDIV+wyqCE9yVhoonaXQuOMuqyJkXZrVn3voqUhIMxrLgTfkaIxhMJVWJ69+PMkbLNN637mrnF91snz/Pu0SaWxqnJqxXadv3X++SSA5oSfW1H3wezfGaSHAHm9Q3GrStGRRyjCUh92h2yL7TbbJYFTn2yI2of62ZnIWtqQrUT15iCbQLcPrey+Gruy3wjuxkjLGVCVzQPqP2RGUL0X/jS1faazEcTQYIcNi81SNxYlZO3WVBZntbFhtIUwwq+9yQkcBc4OYdLtr2ZpLqBaXBhXzdlmTE9r9n5eIw2v9J9/B/5Gr5tmuN4EbTPoSE5w/XvriLGbyalUCCmpKqb9WGslo4nWjKKeHtgMeZYA5GOGX8xKDRn3C2Usw6vV7/ERU6qnbF8IpWZMa0z31OVPUe58jh+aAMUu9MWo6MQQkhUOJKNTYLDPBF6V/+xCVCjabCxEWfUrwwAbG93VKENV50DZvVfUACwDDFqBjF6vE3ngT8SkSOz3ax66dY9uAfvc9ONk6Xb05dibnn5jKROLzsCn7pigQ2z0zPAR64v6MUWo0WplM58ZJX2T5zQvP9narlxPvR4vL1O0vLjXSEw1/OlSNRORPakNGNwNdt7/c8jmN3wUQsI41lxqEQJ350K/uRbz42xRmGyHBaPUP2roEm2CHqaw/onRf5NrlLhn9FAgj3svUNgWVsxG/QDyzJ4e9OyxSjozrOIgyHL2dVplTZeMpPraw7X4OoW0C+UhGkGYmYenWqO2Lrog6oXrXCg4cCHj8S0aM/MmjfqK6QV4p8blmEkczo9SqcUFzyZ92FZFxVGEWR3aGFpmqmqXzX7mh+bHQqEbl+e2M5NF8Rn2W/6czUJZTmwrvxGM8Sk7GGMSs3B9izdV/MtqIC3FMgftPIZDY6mPrqWpSRNq93D3PBJOcGCPKMwgl9PaPQa8c6OyOlVT29k7OwlnxqDjOejGw3GP0WfbnwtqSPjuvIgx1OjEEA68bPddQnqkous1lcKFO664iFiN55GaLvZDiKfiNr5tMMslJMQZBDFxvzu4KqHEhP6R4hcbPQJAP/yW4VZorugnC0i1sIP6VAb2OUInpn+T/dVIgynuYCLwP38MDztEPZ7O2yGWLcilN+9DuztiaQ05f5sGl1fg5kOXUL0tBDo8OTMcKoj06Nc97IPWiibsT2e/MGHCIF7FPh8S8f3rCXURcVVlRee7hU19E8aGzGSj1cqCdDDXJxoXUmbexqYOlMG/XdRW64BygV773ddpGmXiL50cX4SpxpP67En3zUEP7Oob1Dg9oExuKUsMBzp+aShJ0s1CfiyGbkTrNoT9vi1gUx6XG9S6QjDlv7jXuHAEIebOuE6qx389mrvuXgxay7n1E64WMb7JPNksxLqxuAyWGjLpPZ57Vp+Mjx9a8mfnjwHsswXtqCNp+Nj4LwvsnC/dkfxk3BGcGHPW97ekfDzkUhtCFLM46irfArVcrNSOM+O5y6bjyPynU20RaIbIZqlTulExYqsvym6Z5ozhIStpWzuV+AsWRjBeP2OjEJfpOftF7Q5TttrCTw0GUhvLAiF0xGalP0BZX7igVfyeeZc3A5LTdmJt1pmnHAXbBEAPtBS+oDRjeuWQKSmD4gZ0HtZjgrTaGW74RGtpMjYvL69fMi9PyoB3JzvA7fN4+7FvL90Cia3jQdAuV8SVe+nGXrEB+kfAGjK74o1Ehm++0r6u9ZCvgdxUL2JD2zHIB0C+p1mnd1wKGB66bg+mk5LaA3Mqmd5AW22VuFO5rAg+9nKKjFHGP5/yIhfnEO21Tvo7ra/pYSSqAg1MqJ/rlrqujLYf67rl3FrF9lwzqjiaWJsCib//1QncNABA/vIEt2UfmhgBNpXIQTt+eWc1L0z64LyA179qo3NPbbHUeMYu4uJ8FXmiOZ+coy9/XIefSymUwC73wnV29h+CTQEsn8qHYRc8GrYZN/wZvjx+lnHsuNAthhhBG6kZLKGM4ml7sUrBXp3UxgFR4yisW2p3/1OxsdEOAb0dK4wHcYLQ7JMGsbgf66P1XU+o6vJR9+JksJVfkEwLmfyxy6C8C6qd4/YkqKdV/zJ4NFgsgdQaSHbRY737Cxdsjou3wgjocIUC4jGcF93ueXPDckAPXbeBUhmTAD7eJWpgpxgtiI7vtx0PYwfcJ0d3La4ro09G30jibfqb12izyHG9Dny9Wmnyq63tuOXKlsOGKxq0nZ1n9LLHt+O89Xq1nTZF4QhdzguMMcxj098vsSTtlp9SQ04RUzTtuWUPVnnrtq6glbiTJWzzEU4rwO3Gm7p9ItJEMJD8KTLkdu9M4FbrHLd0pvcra64uRHWGumaNkuMA0vKHpSOf66t470l3d+gembhPk5+0JOoDH/8iymxPf9zU6O+ouAzqzoD/x4CyyBvd6csh7HJqX9o/sxWtaUqe+JSHziOPWGwq5BMa9GtdacFsRBgo83DIxnWtpra4KdPrXDnjzjhfLvM5GtdE9pPHq5Gxpl78VTE2hsHTU0eaaxFlz9tpnNk2nKdr6zV5dAtwDD7+/MEmwhRwGdqRzjE/7VYOioFwvlyPfBjD1t84iMvrx6gGGceH41FCqA5/0DlqLqCAmL0d6tMe6E/1ngPseZ1mLdO/MiVGzazxWXWwRWKuqcx+/COyCZWeSk/ziRdJ5f10ww6nrfFltrta6D2vfriK4i+UROQ8qBy5M0m3d9yOvN3+S2+rRVUU4UTIlNVWjMc5l26a96AjypA3brMtomL+HVSFEA92uWWXUPk9UKzLiJDXLg/wOcy6EUBV6kpwcvUfygvYP/3GizHlAPlthmuhwD3X42y+pqf5QnnWlxD0Gp2EDDl7OK503++xr1jSi7pzqwx/lFcexfT9dvYXvjNl2fXEGj/cTdkteCG/1cADqqrESG6wuTIlN/Njc36v0nhuyE6v9F4aft40I7oyI6l4l/pIdsKsviXp1JwL4un1v+gubv1OI66HWQ/xHCu9t0P/CCPSkWq2fLPXwN/TcWnFxT3h3FZuAd+y4s/VdbfLyUdGh5KUsLRXIdzbW7v5UsFgpajayDTyymIRH7U977uHh11gtn92AhLN+Mx3XGDJHderHcqOLqou5O7n3dZzzuGf1rhmcNQtHZpn6Nr85RTK+HQbd5ej97snIa3e1zhDT7DjSmWkDlew4NI9kvvDYO7Rw+jqcIkCJ295VmGoL4JjP49YybEltIop3R6Yd9y+f1B9KAb8ZbFYOOU966z83UPdi3+3AWyDat88V7G6N3jxiHdLNCq4KcsfcKmGt6p9UrsT13Ts9dglZB8qzzg7qk+s8nbzZJFd/z2M3sV27ZSPt+vg5SfVcOLrvAgSMUEkPIIMe+M1r+SmBm5OBGXll4OO9aCPR5T1KWTqeZ7c31eBhkiuPYU32ana2Yw57GLXOydoHkup5If3pharCkq8ZtYvuVYMeN/a6RY9YZo7RGT5qO4wxSZ8YsW3TqbokbNMNCQqgZrmKGVQV/cqJeVaNntcpswHO7IEvLJsvWin8U0uMXGY1YdB4fK/OaAkZXGMcjkISWTuh61iZg4gF0Am91VgY0g+gDInL0hIIaQ7K6zr5ARQQfROXlw2QGRAGKrwfIXx4CVz+jt00eflr0/C47EZqGVQ9P72JoPzZNkhwX446O4Mqxl7BgKy1pvaF8C5Xl6DPVzYGdtRMcc6sX2/ApCj1xK27JN8lx5GQNkpP+zBuwDKFjkvU7S1DXH5BJCSMNwypPu8Pu8am4SsID5yc0OBKwmaBamABXGPhfK03sNByD5KhA5oGvInNsE9Z6oIJr5UhO0YKWtzO1i7aLBkqUFC/XI8HwUDmymI8Kid/5HHTYQsrE9Z9UrS17IibRyLO1RNz3A/OWYdIm5GPJ22y4whI6+AcrgxAI2EjuJCP+/zRKfcRSvOSuLLjJNuvFFaLkYeUKuPDNCjEvRIAdHVt0Z+Wzeiz5n0jNDPoht1lNET1AYupgEGYh171MjKIGR4nIYJ/j62a6dTbfxT32lnmERBSno61ddPIs7sCW4DF9cAA7HeI6pkazByCf3nFHKuL767C1U8zN03PgJyFAG2SeElKdjJRXMZbxjyyDosbF1Lg014559cthbxhZqM5MoKBGKxFog/ihd69WLQunly+m4c3oBuRBj6Mt9nftqVK8tZgEr3lbpct0XS4qYgQAXRBucBWPphf/g1hvxKZIQwwMBhwKOEvWVyWbLI1Ndb1GgfQDgPIKw7xmsPuEvTswT8uEeQinD6dUC6QNEL26v9o4j6PQD06AU9ekBclDfQAI+I3YDLTgYhM9TRJ7fYFCBiN+B6x34yAx6Z2lofJLKzfU1WcqLs62BZtYfiAcijwFDe22xb35/JkUaPaeeaznRaWJxIHCcZu/zTXQjAh4CoTLD+M1aOrMWqpV84BAK/2yNQqc/mAZ/3eK1CbrUq/dEjsg45d2lD/VsXi08lM8gGMV1ZwEOn6gx/vr5gfeOBf8PNDq6+9MLQWjeMch7Nr6gPOtox/t43ACVBHhn3h8HIAnkoeMBWhun7Y4gOEkN4oFhdITPalCnwdQMgDQ2ApR9Ih74l3rIoY2WiPpuLTJ9SRtFVihVRFeomxYx5mGMnFIzxLpI5ZI6bGJ560cdZCZe/fsdcN4bMYtQsaH4DPSDRMvz9LAo4FCV59lNFtnEoX34jtHcHzLFPthCpFGxzEl3V2hnuMcs+GEj+UpXlwlx/Mhvj4zCIZXp/Fbjxg/X9WITTeDiBnu7sGIcEpVVxLsWVoCHGDDs9csY6ojXbHjrYVp5LzDNXR+IG4/rHxEdSz6I7zW+vD1+T3BufGPT3yFNvfkb8lGy93hEmN0QQXr7LhvMj7luHScdwm8jOhz3x3jIKXby9XJHjqks8XojrAdHuuFxfnsmnWe11aJcMcEeQ4XAE14yRdGfLdkHtu4chnatl8JWNF9wDaZhNxijkB6QLo8q57EnaZg7ZRd+yiZ/yKlXipDYxwJd5tFuTHXPhhfjHlS1j2SZZmoH5sX2fCv593+qsXJOiKuLuI+cKgGj3nBqKLiXzZKF4IjSW6bFtkH3EFg/E7TDKWEE/GAfjIILZ4GBziuSVevXF0JPVH2NC/ws5dxtG8VK/H8iCPKXNvoUkgTok3EAF7Gg8vy0IOw+SC3fnoON99o67RJlaDgb4pro+hyhXWLEMZhroPtm6auY32I8o3LCkIAiEclmA1Q079j0yeQCUz+kyUgiwe9h+FRp770dV6DDkTzXimRli5idafdev9VkVCz4y3T8Ms40TnXKr/vvFU7FRN2vD7SJiPR9ijbQndH1XtRxnIqUw1SXtuq71c76W4wN9OSpspo1589REU6CqODBfjS1tg1ZLuGlH7TmBcX501NScXwef2R3GUGWb8we5uPIwD9fnD6a5kRvNUHXU4s/GIPoT3rKr4vL2sNM3przZPQMsj72n5eyYx5XnZx9PbrbHNam2jwjQrQL64QTdFqDrA6p7wvKd2WBkZKa3XH3vWlEnAS79CNQMAumk77nrOaqWDMKDl1fXYOZJESWk7xVsXPCAV8cI1IwE6qjvcRxzVi01jOcxHxvUSnzKfbiSdOdquj773s0GPAC4hr2d+ZwX/VJM/FTj3jN5mhFgj2op4wGiEOlhDebP6bkyxveGookUu5LsJuW64yr9btqZdBcZDyYh00sjGFORvh/6ciqPg3lQLObHWf+PIfowtvPKX4YSLPEWD/dpw+P2fyY2LOHgsPBODucrHfh2b5Dhh4rX8SoKL0S1owJWU9AqGjSrwAsA6KuxliFnr6o1eq0Gr8ZbB3RFQdcH1F8Iwmtvj60yNXQ9LzLxHFX11V9ssv5U2k79EEDwiqC/nMYEAvKrtayGL83VFsVYWO98tb90x8cNQIIjS3l4rYthJS4B3JM0f2dxgi+sZMsL0WB5rjH6a1ryuMOwjlTMYozjD/rjK+3ZUNHkmG+68lqRxaTLS4HjpyJnZsnlzzj2eFd2O8ltkdHmU7rHhLaDsm3B3V/A36VOzU2c2V7ha7XtEkpqfT7uHBvOhd/SUFBE3JnwiCynbhme7f4ewTz7eXlq33i7zwfffRCl1tU3smD3g9WyPqXbkhfYsicoTz0vfnWT80KUbpsEMsknDjY0K8ZEpxo7ouuXBCSAMFUBsPKO0/sJFMFOflruT1zVF3NV1RWwuo9WmVETHUA37RWDFoOBMHpQ0zG+ctCoG6hzwK8gNOBBjbxfSVg3pCe7039kwUuafTop7unNI5MRB9UO677IEubg0VvHHKE4IZe6Fa+H0DsFOa1U527LhPh8z2B/vsQymCJt4GDAcJ4JUBN7EWs68H593QdNBDfzehFLcGpzPKWX/6W9wfe+VplU7yI7+eYG035rEpXfN56dxI41xehByTHmouPvyyQmehYhElLcHP/Y6ygSLc2mScq3K2y1mxcl4bo9BpqUjWwTVLauM+XyCv+WlcL/CTGyaXHB8z8/td0y+ATvuA0pJd6l4wP56+Ad7KB7fftUnuQKdRf9dX4A209SB8W/nLrfAAxrgjuM0nsKthaOTKmYwfb3c//NPjGaw9oFfJBNipWDhJJhctsVIz3qz62s7Ai1bkxKwElrexIxV2Kdc9hpopy/rT3SGi5hZC5rItGfWzDDxBJia9bCKDNtIA7++mdgCM70oz9bMJsGjUlrx7ilCseTte4bfxP0/l3K423JGZD3R707Q3U/eETlPoyLoLSbkPhFpGKxd7Fdtp8ypLy46s9FFWLek4GLC3/JbHubnopjxYW196yXsFfvKWPiO6acJap7aH2haYA8jx6Pl2LHRYap2263zFpxlJD2NHrvlq1p1YvuilIaxdZB/vpPFhwrnutsy1MGNUSeJY7aZr6Aso2Mt0zc9hlJwD5ybufu4FnmGGwSPcVbxcdb2BVJKi1X5+ADn1gegNqy8mweW31u+hFirpX8ZgEldaB6UNwYNuSH1sHzhaPAGCkYWQlIHkwiomf49FypT0923u30xOnttd586YgZzC4ZyuIwQznAH9ig1mCb8+7t5khgdHPPHN27bKnDHeInKnKO9F39+SHduueElIY1sNaLmu7P53mhaJ474/28blvicBAeadLC6hUcGPiDK3jTtA65OL5BxNt0oyiNyefzA1+1zpsFWK2O3enDh1YMWV9raXvZ2Z0H93We12zTTT3ifeBYzPgNVdYvptgNWHwICR3bLsXpqrZpdmSk26URQIlusMD3ESImi3c8O3nBjorOJxXHegcmn0VKt/jhO3bDv74mjfJC2vQ56Ypvf4sM//hHdqPCKTc/sp47fE4QM6kPC/RM8aOrXxghRC/gLlQxw/xi4RUEbLO+/KpEvmttymX4QGaiJCnT7ULwfBNWPlInhZ7D5cTzUdz8nUv4UXtMNx+y9wuq3SF+w//KRxolLpi2353POVHR901RTKy4y16M1JQ55+ReeP4MXhLVZILRVJ5WpQiPrtZmWzjHu0b6GbBMLquVzZ1g4NoS4LdS86dbYGoK/nnaihURL00M55v1rN7UhGT56UBPwcL1XW74suDRI52D70icoRzIFkO81XLauPFiJgKi1t29CTdkRgOxpkedi0bsi8RbNCPNRz2VzoBm21trZl0kcNjw5vCEOy7yo7acyeIXbzsP2EyrV2Ck799ZkteeyBwKRmenDaVF0oVLx3EaNwroSoBuT9CtAPqegPr7KuGRnNTikSEAF5EUPtI/QBWPGJVj6Q91IMJoEXJjKx7klHmQ33OjyDU3xcKPYwoUMNYhWpaqvwEXXyGK5BYvG0OIqFz8oX+agvvpkRQj68wbBPOaFKWDwWID1KWvU/At0Pi6pUSdr19EKwZGsr+FGl/P5FS4ukaEixJSW7blVlb2fjwmsrmagrqt1Pi38bYcv1Wm2nvsePH2UbFevHjLXS/nb4Jn+4Ks7C27nL3bjq9K2S/2D39Ystm399Br8fuX+/yl9be+uLmYd+6e3MnhmVb2xvaES6VudWX6iyq907hvX/ROJnzjFU5XTEIbCFpzYkhZPI9t6APQvNt6XpYOXYWmlp+6bo5YWf6K1JKwgoyzDgAT21pqYwatiTu7N7Xw61QdJPz0nFgxqkS3f74ozghS2zTXe/ETxnweCTNYwpCZwBJLgCcYPxNm6Rv4EHa10EBTbrAnvkscKcUD+L1w/pwFDwHXidfnnw9Irk7gE9hso8msjYmvnogNW2DWLnaforbsmzEpK/eAFBJuF/lGuI+t/OniZj2HmbgpPzhYPwf0na/8/AvBydKLqG9A4q8Kl96HwEAd75J3jei5iVUgLk7mRvplvjjQuDN8J6zyYvWF3UZWzYTYMCqGuzmQuzN5J1lTm6aMsWMcXERdS6dkbvoW6Ynko3CisKnKJ3fH7k8KkjEyCipM6RkI3FA4bnv++nY44f0E/5mfaeJWRsr9icK+Y5FIfdjXaU4L/WGKUexHmmXV1XlAR4G3E73Ogc4l6kywbiuwXvN/wusLA9Ho87uz81OaTSHw8c2crFDFtIHt0bkxzxoz8pJsTKWvvF/bdcAiIj5WJnVYDGeHRWDZcEKPD4sMEG5vLs6XhJAsb3hRaPlDjgyrAKEngXCmgN35nLdegwfemMbMg5Rqf/903tBFWpjVjURfZHOLOmIxuHlAVwd0y4JuD9BVACG7z/MFIKfMW110+m5xO9JaQBR4YET74H+z2KyZU+aB6PTBjrQWEAUefP5h47bS71/R7hu2KgCex0VqwsZtuh9fp+yau8QIMrrhr8oK7+fP1+KGAHj+F0kKAHv8U7W7ygixfk4hBsxdAnizl2nzcExNeAKG/bsD8BYvkYJgj78lq7f4cTrmnPEq1l5oRzBhXwtkDMhCsN7RESZGYrp8TAy6MWVZJib8cExo8xi0DTtvwgpj3ooxKQHRa+7hzhs0YwCZ1WOuKdbfMp53Yy/RWjxiHJcLbDlMLMtAMeuJt3hdisnRYHY1kaG1eHnzfr58+V3+X3PvQLa5voX2Y6baxQwV61MuHybAq0MUJqskZ2KE9TWVJLRJ1j+kgAExhQ7nc9rMyhgwxPVh1Fph++c5/Vt02hb7N8FLMfmPW7YhtlkLOyOQxMbS/lcU2R2/WhzTYffp0ycbFdEvlv8wgC2xtjlYGZn7OANw5JeeN8S3KEq9OpWLk7g2ld0tvhqhoWX2OvHa+5L/ilIN1VThRlqa25S6a27kF4J1r5FhY4s6xiyaTsA2H7vNxxxwnmKuvfWAfgMOzWf6/ioPduOvIc+vHTLXrWzwojH8+hz2zebQLEItEcG2rBdr7ktWvopf8y1RVsLmbUBZs/I2CNGdEXYho5Xn13mZvgYvFA1D64B425966jrx6TA0t8+QfcYSeSu7TRlvnREhIRi/kgfnwfmoeYsG+x3C7IEL7EkaLxkV3EblpLTelmUS3xWQMk1kAy4Yrw3nP58cScWWssjQeshGvI9Ty6StZjqH0fY/6I8VloZoQ6d84V5KKGdPTudQk/dwIz2cO6ghs9ee01zu070sjMxngL8NlamfrsTehrpDCCO6t+X0qTf0riCE8cwTAZ94butpZlf0+VtJlJf6V4GkFDxvqA50dwnkVsWivrgyJw8YSaKqGta/5ZYHukJM1i7jb/nt13Vgrvxewzt5bJDj8+w7EewU0liliN8QeylfJ75901OxSoMvMMoa0y9vfzAO2q/alL6pj6nHID0/zBXDuSkOAsvnuhfth0EjxVbNbO60thFx1fmq/f13JUojNe9DAQNxx3LTLKUu2GuDxzv5uv2/pfbKepyJhlnpZQkk7TKUuyYF6fEC0E57Z3H4Lw+LrUNPX1RiXP4T3UHJcfFtGD5ihMyHYuJMZWvBdiHOQbHp6Vi2DmiTktWmTTSms4vmwvbWLP4Y2lNwB6cfNAOusngO7i1RH0xvk6y4uLZl8TqOGAsb6LlqAKK+C87KdhTioES+gFX3WXXyPLyc5Q8sRR+TxeHRYDFdqFL2iwdyeXmQOnC68W2PzGjh5lf9fNVi0L8dmqdhVrMwGAcZ/FJRrWBX3bUjtnE9XYAu/edLNHjpLpNI3V2Y21dpEeG5McpXa4luKalB5+FP59s+R/bQP42YB9MNnqcltYc2SBHf5ZTB/lv8ejfa1AC3DwfXcGftnyHYvDxfIy/X8OnuGuv/ekKR8J88IwpHfEee/NFPLLyC4OvW/+eC3ZnU0eLBYVV+3JH3IJ1U7s2ltXLxkjxwCvc2msN1EfMLPmO0zzlBlRYxiMf1nD8RktH3Lwsa87ri4hrL4BGFVj7CW+VaCMTKn0nv4yNzSnVJsOuGlATQJ10rUrzcgp2zl1yKkHVq6ic4XyPkCPpcg4JkSooQe9cTFy4xVfHkEUXiF+ydfbwb86g77xF/Yyina/7dDBiiL0QEXA7gDa+6B7FUojmLsZpgK9JKyUJtg6fyv25CihG7Lq5CbFN14YUw9y0OlYJczkEIeFrbRp7flTPUU90pohLItfxBwjTzWiWeA0ruxbggMAER3p+3zFUjQ6sAfFbTQ10qRhX9nXXe1vi5V/HYGq80YXAPhrVtyl83J/MwbKb2ZH7aApxl+SKl/nlVuV7x7RlogNdcsbzExklcpTVsK7TA7OxN7p32HK3NG7X6Efisk8VhlnjGJxUor8VH2zIATvhaXBjnmJIvxCtiguWyCruGXQkoOKRHYpgJbr0bfWQZdt6qvliSO6imJTr4qqn5VPNk/Lsem3xeaNpx9ITqS5p1CJfKNYxuH8boXzvx+407313cgY+4/gIPHAV7Lq0cns6ZeOWQn5UkQN31wau1op9MfYqXumFxKvws3xMowpVkbRXwD4805sojjC/8sHcLYOP5NXKxiLbM9VxcDvYuVqGkyo1aF1w3+uFcFPmHcNuKGL/Nto8YCERWBZ9/uG+4TPw5/CoZvoBINf6Ee7wdFe1z71uq+XuwwA8EnNDs/Bb4WMj99NGe/hBGxKpn6piDBoeY7/wOy31Bij3N++ges30srQt+6imH6yRceYovuYg+XzQiJOb2fERLFOoB7y4JH5XDx2q103nLnWXheOPPdM/1IksfjQt8//x0ca+I2ypCrLXs2UdvIVcB5PC85K3ns9zwSRoplZ/Q6z3YQMq7rTcKvRH+0myByBYVR7z7NwQljQVXNxsfB2PI4v36T2MtXhMaFaStDVkXeRHo809+pL55OXs5XxYvYafjDylH/+etF2IsYQHrl74kq49/SdbWP65QZiCMDdfhvMpQXADyCJAZMVwNrLSaT12jCVIxc6x6ilb+6Tv0Mvlb9ZplNa06bv5UunUxj2KW9H72M10ImpbGtzIeDp9W3kT+xgWiSmwpAQaYfYF/fEjltMkkKKEBLjUDAg4GCF5Epw5bOs0ic57fXRo8TlN6FUX5EsmlXsHbEg+tLPWvj62wO/1p45MlVYZhOOV2HrNMBy2sVyiCRat/FS6iqXvx/iRJAmWSPfIGEl2bIydT7SVjsX9RFkROZGyDR+1YftANZ0pzfDfxxW4/UOz5QHFzcML9pepMXKW3PIJcBKUFDIITVFxllfxaZbxHWn1uSOeBYlBtYdWlih0ovp3pKaKV23F7hnnNoR1Hw2R79YNnzed77n3ft0psnoYEvZ1USV2yZRSvpOMSY1vSPVvloPZrscGLc6S6UHNuNjl19nRcBOXctOgh1BEutSTl4BXZBXkiQC2Jy1vbWzd1pGgkr9YEXchZsb6Q21fiDGGJOA0JVTRn9NQArreRP+7Ussa61ZeCUWiovoybUFhoWFFihFlLYSZf1z8Pbex7quhpqqAaJ2fl+rOGupcC/obr4KlIR8yDk0lcKKedkshPyTlv5KT8plKrU4Uj4sg/c4UCYrUc6LKcgstKbOYlt7qWIOq/WQLZfwcUKF9TXBwW8EftSALtJrzC9hNfL30/iNODa7CVQTNZw4h3J4zFNEI5FVhuhCakNnzTWTodi13K1YSzqL9KKWsK2VqCIj0Z3pHlu8kSxA6fUzmQpCsjlucSwSR6P9vHKajsiYjryfqbaKjeMMbmNsoivns7s96qbuEuEN5yEQ5686prTVReL/+nnB0kWDOBrvXfiLS2OJTOHqErByoeo3fJs4NWaKVryf1x2N6eiEVWxiA52GjRAG2pDp/beBcBXVJ88uOVbVtsg3NJee5scFsGHki7Yf3tlF3rCBjTrxdy1+fKRjvjXkU0SikjYtKRCh89pIGpAG4rWmbdIUZRpTnJZdHY12Ju60kErpiYon6Dy88OelpxSumWtzC2tsd5VST+AUhICBAxl/LfqmDRospvnxoj9u6TW92VKI2lf1NjLjJUKBYA8LunDgpG1civ9OyI/o3dy0PA51mqXchYR21/x07EqUONqFT6yp8GarL8Rg4PCPCNAl6fEboTltIT3ptpwmNDeZ2PG4h0V6YlpoDFAddwLW+Bc+kG7IzdETEp1CdyTPr++2BD5Saa09EKG2Yd8O31T1n5RIQt20VMsMvjD/W2W9c/xv2Wgh0D67664a3bzqwFKw4fKduMNaWNuft0Bb2t1aKWK9OpybZKWWosrVUrKyRqZJzIl3pMZAAN+g4RtWPCceKqXmcZo1y3PWQ01irHTrDG9BqBPgTsFkBAGLjVbG7YHD9x4p0K1BezNgICU06FyUsOm4XWi6Rilb8be3YyVJrC6TvrrDP5Hu2yIlKEa4AVQ1fW1FeAtawskJlkaFmOFmhwnBKDYz0wtlMwtgxIWTX4GgsBpgrMbTsJh0F7UdnJTAxt0pQGq/FDDAYlYAxOGIYgYFV7GYWj+4wc0yKbYWeBhY8q/jHT/boMX5P0TxRGTQcDI74kjdPlVBWm0WMIe00V4bK1x23jc9dNdufN3oXTDFYLBmMs2hafO4FDAZ5ZYdDwPOsi4J5pxu8/KffkY9zII5vduJhWWaEgL7gEdQyV57KQwpmy6XaOSgZSyHKNaC1Y+gLBLq8Q5Kdm5+Vzvt02QrryRFZEfBb9EYH+uOPb0JnyGfxjRHUgA5rkk/V1YEArwdoSsI1KteI5XuG9ahMuY/yCpMMyYZLRQO7NPh/fAE3QovMv8Ch98fauf+gxW0WBuNlGk/Tj+2aOq/GVGOtYYjRQ+OGhrgt3WvIKuki7WbyvMbEotVgnEjbzvOy+ek4gUZ2ObbaBHau3PNeCv2JORsJprx8tCQpaZC5WKbrZ31ITzZFLYqGQTfm8EfqpkiDQ251TDZY0h9/IF1Iu63K6Ak+okAz1wFU5hGrVULAzdduqmsO+nYZVXIrCtbV3mwK9AJpmC8cgGbZxHNWcMTNZZii3L6YKigf70islikRwp+Sx3TzzUCTedMIN6R5O0mYP5HTj313GU0M9VJIjVcqnggmBZRXXKv1Gb9gZa8zGOdMsG6sdDAmDKsJ7EBlx6aPM1kQQit149R/Rfhds4Ym8r5xRHvikrAG/ZvuI2cIcnbrH4LxF/+0Y3hxR3zZ5wE4YNswY20H9a/u1baDpzNLtGLm6SR2Wlx/INELbYuxhhPuOyzfTwwdetI1xvvYTt3zlnhg99TQGckNyDQJS2kYBMjOKNm5TMS26BDe/bUWmF5B1gUoJa3apcRisOACYYqGe6/Kt6QV1IVhgauPh3vjLxjcEq8iNXtF+1kSIdd8IjEVX7oY8+1rgyx8u3qCKPR8+oCrHMHMjJRbkmBJl9Y7WcqiRlNOisCJi7sVkFCTFi0h1ALxvsstkUGaLtNhTPM8EaP2/E5hGhmD2GtXxG4ODFsjrqIVLA2vRLJk31Kr5ZlaDOjx/NjVvpMaCkww2YprsHkr7B747chPd/mdSGjPftAbOnh7nJPXgW3QfjZBiRVN5JowOHy0QWhNp6GVY3uYJ/IKTkbj9HjxKxLmXbzvwxDoOb/AccgSDkgcb2V3E/0aYM/F0lCnOmSvq53IA8JdYwfSxfrFnGtWEzuKacri6cLens8CgDSGz9/gNt9w1XMrICpWwx7OhshXPUuvOR8xpy5fFN+GVtxZd+5eU/RosbXiRIEMo+aFiLVwlMGN5Uv1Cf8LbFtI1XEVjc1PjlSxkPipZz+hZYHMriFj8Ek6k2+LLwGa2Lr0Tp/1m34iQVqeqJigah0TCend7I9mK8eulMUTwhSNEUD85M4OpOc4QgfvidLRbcRoSOQDyYuS9sJAosspSp98FiCKYl5A0vtxjTD82qGs0NBBPOp8vTaEefcc8z2Rmu3PlENU8YsDS0FyyzD/DWlFwjPzZbLYGx4x7LKXnGYiITCc/45Hk/5ycAiBGtPqiTeCHsDz/nJnsAU9+cx5pvcjIYgiUI4Oz8RgG/8CZhmLFlwpxeBNDTQ7DohGcOgLCPdW/BCP36Hn2llcymVka1VhChRzPG5uqUtGFx1QDMYfxic0IFLQiOM1gOlOhk4AE8C+I1DRf6xpb6JUnh86ydqZBv8Ptp9cWLbOY69eArJba+KZp1Lc+KBOGeiSTG6EFvx91yKw+evyF4Y/2kuXmRtcLfMRcQ7x+GMlvfkhbPvb/K2RQsH59m2Li+xqr2rPzvKe7uDUv8d4k0RAFZqHgktRM/BgGeZAHtz4bmveS4O2/5LfUWQc+07Em0bVJn84VCViXqg18UkDnYPv0ib+bLBptSyye52zY/8BHfBUoba7tZr5O/uhZ7MrIX9kg/3ZdSclcGE7V52bSlPo124wFENJtBNItSuvLuYhamyDxe9+iLykogG9sEQ1gkRBDKKeA/91bPu+NHRytvhprkvL8RtH7z9+2p6io5Q6lp7W3YX8YbvkGeA4tj7xMCIDkw+46GG+DwPhQmYfY8v0a3tfW79HkC1ueSJNbFBCUhMTL96G5y8jUi6iZzunbn00F9CvtGMwHOoP4fWhuAKXlViS9QCD4wyTNtdN8i7jBCfjaH9p6MDcorJMIXut3H/NaKMsXYD+uZZl9NHwQG6LzmDfKlFOkML6FN3DXIzhmiuKb/TbxoyTYnPp+JpS+0SaVdz2lk2dr5+cKetKycl2sX75QhMqkf1UJ4DRTpHL5OcqkrKeX3STvX9hdsDTeVto0UW9PPFZckSKSJ1gvgsKGCYn7tFqCoAgJZBLj28GX0QMM8t7gIL5AtBnLVKIvDsjECAKM9AorAr6j+fqA1rby4HTU6AmilmKgnLOsSIuqCK5IXxIlE3GWTrBPW3HuMrVX1qAtCPI87d3rK/kZjT8Y9GP9/+kVn85SqP1MWqk2cUYB70FmbVkDz5gTSDvLNszwOGr0m+QE1LNJ53tBieytbNheZgZk5TvDZ7kUSePMb1RvhgY5gfplKb/MU499RihMPyITX9xi0caybrZhQilvtWH1d8bTEioO4D/riVIxNJ1hP06ZjESnPgZU2otuuc2VbMDsgELvOwW7V2Pa0I3ePzT8UIhYIiQyl5+PA/BoGu1Zxj3PmEPtfM8aUcaBhcpNoW4yXg/Fz9n3rB1//wmisQG6tXVe/qANsdsc51ZbLzb3zp7Wu+YI89Jy/MHIpz9S3f0sLLxD1wlnMcIifMtmKlcIkZWt5MsPd+J7IYG4Pino3jF686794FhUgO/mZCFpHqVyVJprnfHj3ftLQCRYE4ChxuuIYgFSO1dwwBvWSeSN0mDcAdhskTYmWH+XMphDW+XsnRaG7ghTPsTb6gu3eMVe8kwo+q0Mud01rHuzQzi2KWxdJFYja2Alo209WxaysH6mr/wUFd/v889c/YUPHh8at7ziQ8lhcIRNeKwVjn/BeAOfv0mYzZW0OP1wI/36dflxyg44tiwx4d2WX1RTgSDBNI+nKJp0tinUFYq5xXkPlf6hJxF/nZgrujK+upTP3hn7I/ZMHhDx9siaOvHYhMURj3/MM1SyakK555Sgiuu72WOFLexmr9C3Dmf32CzJ+COndiM/SVV6zXvabcJq4f5msr4cueuUVzlQcI8WNaKMDpQ1zi2zu3qcB0voWq4hfrOBW7N1xjjrX4LkpEk/d2YYRNcnN+fDcqBCVUSR+EGZzm4NBvGOa0px32SIy7cIM/9DRAGK2TWBFd7KKB+yNo4I1TxVQ7ac9zvir06i1BKvawQyBkIBSs6I4XmmOPxk5d/bp7pJuv2DGaVSilYjEXDGBRLIc8cFKqg/CfMPqQmVE61U3ndo/xYyf64Bv0+GEqGDz8fwZ9Jff0vlfxr1rU4EH9prTQEWJD4GUbkTPIAyqyxH6cvmNIOb6Gn8R5yz0a1U/og8Ookx9pDmSQWmEgW37bPLjyPlbUNlWWGWxxwszrhUhYJsfd+3Nsx0WtVco3ObtBem/Qj6dfLA8h5FkUV0cVQec2gtSlxC2krh9eajp33oPf55aL8tSGp0sTmFqiwjzvoy04w8MUSJNn5RFKPaC6B5utOrYQ3PFjwTVr+fadtjwj/xjDmdh4T716EBpuWDNg5Pv28MLMq93cBlomzbTzEQHiWZNKU2NUillutfPfrmbUJYayv/+vXo3GZrnHd9VOdaK/2u6Wk7BZHbtOA4VxoYHNNG+h7T4ipFESJc9XgWvePlabNMTnv0IJSAPJgk2YT2DR7hLbjE6NjjZaqhaDMYyHfkcHNaMyoJdpPawQR4R1Wlm9O+kad8vd/YtyWH/s0xjP3/ZGBV/0+AIzNh0dggpJWbMP05PuKXrQrISF3z4VWCsSZuxDqRep2LoBkY9l7RlT9FBa3datG0dNumCNfBlOdAuGJrV3x74inXHJ7kuPKBlwB44tz8SKo9YvAAGlygTQlNEm3BUe9Se7hfckj2RB51x6OlBlRMI0YsxbrCyfTkzQBoWkuYfi0N1NJCXkvrea0C1vG414VxOdZaenisG/UmSu/iDGLEchKhSFnYqngT+3WMCNfAwMQG3skfOkKMdD3XKLn2ukZpet2BnUcejqoRzaG+p9YPWJ8ZMdQ6uE7qoH83/kEqfVsOcA47dgHbjq7m6z0gONZhgoBpCG4WAOf96zYBN6XG0ec/5ZtBNrF988KTjw9hP6w8vzhtBq1HA6gfVNYiu3HFtsspH39D7TVFw5dI4y+Rr51Z+OAO4FtUZG4MiIVjUG23OOWFdcTmvNpsTgwTg3q5Yzg1fkkdySZ9/MNvbZn++Bh2VUF6w3/m65OcQexmUSOHI48xdfELnodp+1QQmOpOt8QiNsflcLOFuesVpZ9mggRE/t4oTy/wu467Qdt8xw8ynvFzb7N3aNvue1f5L6PVkjntH0sIM6ygHURv5m2TzswlVXt+XhI/SfvzkAQAaOGyDGgW26tatgfQ1uPlQLn4WB0XgDwvT77wZZGBfvFNb4tU6U5KHpA6Fhde17J9Rw0dQnvMf27OofF2ssc5MQR1mUrWaDsHQZJtpqktHPQyF33WbfBPKvVFR9Acb6I689AEQp95eTjc66Ya4ICjePGDmKzgGLPXCj2nlJ+qwpZFKD8JwKc6yKDtM6gv8OIIvDqA0RF4cxTe/z94Sjj07gXLYI2BNRYN3jgrnXgMzaa0sLqJyMaaiMmUd6PCsojOLdZsaWGhBm4NeQRWwtrUrn3wkAtZ3rQSC/Gy490KwjtCGecZS4yn1F4BNWagJJYKvDqPa9ViPcO5wcgAkmhk0T4En7fwGERTgUVlwEE1wqCAUNBJsI6ERRKLSWwAoULYOppGAC2QEDSWGGXQUWCRg00A9SUWiRXGE4smkLMV8wpAwBOLRiFtncd6IVoEA2wJLDby2SNZehP4XF2Y/OGpBCBORJV7tX+w9g/VLHiaWVXoAf7E2r9sTfC04t2VHlxesNbZZmEfcUaomDxi7Q81xF75ZUqPyodYe4Bc5LeHgrUrahPsRz5c6ckCY61Qj4Ks+IWQOolssLYt20HIA1dX2niYYW1C1RN54YrQlYUvrD2nSkReuajQtQbH2l/Y1kK+5zdCPfgf1m7YVkKf8B9C/cqRXmFv79mq0A/U1j5g0A38hbV3bCdBP/FhSrfeOCwu1Cq8tiNVLbyejlQr4fVipKok3JpAhMLP0Qs/Mr1aGek/H34scffh5W/6pyf6/TKpu/v9dvPEYZKj+oFDkRcr7zmojF4mDpGOtJv4Ufjduhd+KK202/IDWlr3m5NzZt0jQ08H2g2cCr9Zd89JqfIucYpUUVwyruRHu8w4s5neuet2/6JeH2qXG6TYeg0FtY3i+Jw/ACJ6nGYNJJJOE4pCjsvjNuCY5rBAkYXaZKCIgtuYxFRHg91AoR4/TDu6WpQNFB0jGuDYjg2MwHY0dF4go0YHYrfmjiUU9Yj6SIHI4ta8J9z2cmcm+77fO9TRXKwzKn0Pe98Kcooy5IySuhE5PegNHD3W2VGgwltvEMdhzw6r8Ay7gQ5mjaNDMNQjuozkUaND2EBV3RSbxsUOZNAbuLewSaJDYFl+mdoJRRFsoGhE05iUELBJoAhYKYZU2MBRrDPYQJZ8TOcNFOppBQaxlC+L5khehE0CURlORGgccHHWYQXLoKg9mkvnjMksSr/feTyNKewFMqg5iEJu4FDEiHwfDTktAU3g58WqkSU9S4gwQtlfzlXPlHMDnx0JqfC2A5UbUdMeQOvK4Ndo8qYIiVPbDlxpSjPkdvGxDpnpf55mCe0goQwF7P2m6IDGGxTZkeOP1t85cQgGEuztBp4UjLBP0HhDCLOjwe1CgXqgdm6AEkt4WyMKZy5yELfsRUm+LYqhvoWTgkVhKzj2MHBM7wT1LxWh9kca2VUdNuUqw800K4V9rsF9Y+hlxp4bihULCIU3Zq4lsypDYQ0/N/OLy3OQwdMUC/QbNYeI661mCYfRxVhE6XBTPJ1KP8CQ2DI3qGlVqk4uXVfY69LZHa6NHx5aGbB/Jmfy4p0mLFCmdqhbsRNFqZedMdstqCe3HBzrmSL+L7j/40Dnzu/+Z3KfPE6w+5Pz8hT8ON2MyS5Fg101FFyUQuhkJhBf71VvJ2hzzNyXAfTPtDSQLIK4EoVDkMqSIPavhnLB962A+RB1PHDgoWqa0BIjw1f7fSFYyTOwhSrPygY4vvbsHHiBXYujAWQeql/AfcNylVGw9LjCBIUUi8WirrbhXhK3blh6pib+8XT7TinexK117vWOApc7feUIvI4LQ77MIeTw9nmXrpT4bu+RwO2IjP/MI1noIIAiSvJyuk9MrseTPh3SeA6uCJbbrsoH7Y7Z47tFZaIEFtK/ScRmXb0DHyQU7ZDFFKkFJ6PQACAKPQGKRsjPOwlEDoZSsH87G0pZR/v3NxE2yBnFiFhAIbOwF1I61FtfyNsLfW16JDCZRGbmZBBZXg/pHUv56hnoaiG6kcmLGnK0D6aZAetxNpzTkYo6fuLYQUaAHzQKrBMlCA7KTTy08v6i/pcsnqYRiQsD3zs1cPhdCBK6G5gN5DH0UMCRwAo9OvDgZkBRflnMHR2giN8pFtc+lsAChUgAzV+BGbE6UJUq1FYm6BB+hoHL674C+Aawy/g+jaBsPY1JreXtBfzPUJPFROVCDUUjXSWzSAHI0oHBhlaYjin50gENFOpIXogOzPlNeo4s0Aaqq5iEF7YW10Y0JnC2zN6lvNjCbspzy2olGnPwxT65t7x2SI2fie/smu/o6Rsj1nS2qI4acZzGhr4ANJxhPMNTTA0czugDNnGMI5KuLEjHCBxm2duSZSYKByvj78GoT5wcp0kXJhTdv96WoEcHnRIBPycwv7D67HUn93F8dhSoZoFNNQPAi1bINY19mf7XSDDHDrg0AahSDwVaKHAFRMwBW6gIhq0BJn5uTvmc8Xr1AyK2n9ZnABMlsHwI2ulo133l2A4UyWLkO6a9/+zFIVJV5TQqpS2TWl+hflY5LlpIqd2C9+mWLCLzSPdmst/XF2XszxbBdBB2mCvaDOYd0dPc61tv2J7VGPrExcloLOJ2o8YSJHRCw++3a3kfc3IR/vmXetFadOhAomCqsKGMzElg4PjMHAl8qGRGBAo6Hweh/TQoSOL1m2ihM6/7QpZ4OGkYtwGKcjaIoyswdmR8HKGAbjub/Q4EdG0GMHVC/Kopq57q7cu0I9ymAd8DiD1QSqoJ2MdmIsN8eztz/GE0d8dtiFzFBMS1AEe8xiPgggaiFiaIh8lQYOoRJMhXTCbzjrfE6UcaAz6erShc6mY3aCoDfuORKBdGL+hABwm0S070CiREU/QOxqnrtGlLMIHARNKfjUcsTgYFgRsRDYOZsedyrB1H5RJpFILPJZFwHi/XFJOzKRQi9eGksd1i3fF8m9hfS1tep2LZcElTM5qa8/fX+eedeOvp3oZF/AeXNlCx1/5qmD4s5h5JGRswHXgDNXM6UThKiHOGlhHdDFTk1EzbjDlze0TivvNrQSn3TjeDJpzhVM2bjrrhYJxoiKfdPoNJMIgpNJ4nWFyciVV3SBnx1GkjmkKdSfrRrHWwCYO7OC20EIFgwAm48beGgEsTX1dZGLD3x09VKECnypRwyHFRex/58FOVJSMY4eKnjIl2evH9C5EELKcOdGI3I1j3abHwsrHEkfG+bQbY67fNADwAk2ISXLgCOgkdj3mUzHVy8fXaiYqIg3eRmHDJGQ+nFeLt3h4mHMuHMr1LPWIBLFAUNsMFd3aG5immxIDAqCdIekLImppA/CBXjk605qKsX1lFL2aBT3koN74iv+w7iK/7VHV23Y+ccQcJ+L+XDn+5GV6upnQxc0/UpHAhx7ZwcYgkXTREty7QujllNHbWHuOcAUHbZ46McMZUnisk1ddi5tnAJ5G0VDH2P5PzAtQEZfPS3ZAHfpdosJHRMxNEYeonIwPUVpeXY4C3UFtGdjbpZZUkVxmbYIye2iTiQOiwMLEBIgcS6QVwxfiCzIcr7eQZHYk93s5tKbBLTYmvwayeVtAbsbxXkxAyUioCqSTqxbjEzoyrYzaKzWDYqHoPu4gm9pol/f/UoOEFZFFXSiamFsF/yCHl2gWm/QUOSj0xVJxlQdQdbkrdlFGAlJ4BDOctvKcHUJVXOO8yXT24uEueizIfqnkb2vpTDB07mh78XD94x+Mqo6obwxG/2cdNBXzQpic+VU5uN+fdu+++eo/tNQSCn5d20t1kA5dmtE93JBzbaZQrHbXmkdGGv2dF0DVCSnJvo0R+flvFcUoSwo5RYxCnXDoOF97ayCUBY3kNsWaihIaVTmAPcTAErcnA4Nwb+tqjfzc025j59o929HjR7YLwbhqpK/aFDLDZsxxNO5pO5joY1Kbh91g4fmDftdycj11EaCMxdmlp6GXxn/izb/LrKScx/9pl6oMNrqVoini3/hmBdKGo3AynfBxhUBkKxvAmIDuPs/NKZ8nFj8VisZBo7qh6Q0L4GP0F67VQhUzARaID7PWhjAkXkfWQuB0j2FtlMFeTYXFuL+f5TlyupnEMCQx1WiW2qeOiDHrHo4QXkgA1rR2uBCPuH/FW6hJ5BgDDscMvygGodhJrxZG+c4Ea1SsLcVEV8hKnP7iA8lox1JndX2pkvAoFH6q2qZRIXCIoZiyhG6x1KqQf4XhkglrVn8t0kY6BiGERPSlmST+/Y8pEv6Q2uigWYDhZMUzEUWX1Wss2gp+3cBd08UWRpc9tXvs4oTpbhxBYReRHJ5apOYB8vuaNmfB15dwGzTwvqtqXJsy5BoZ42xjWjwyNXails17TP7+GCEnYf414PxXgiF4HspznLF+9NWOkOyTsyv6c4uFaNhNoRbeP0gGKSOM8ZjL+zkW8VrRgDyefK0xo2mfEFfggr7UBIxhY6mYcCcWOERRwFNz+vk7nfU82cWk4fZAJHn82o3rs2rX954gfk+VzBS53EiwicVwVftLUE/nIhGLf9XSv2EGkltpRBxBdC+faVtyK0hepUn+5nJ84amXyoiMEmfRKge2QhY5qrWBBZL6TIwQV1Tfn2QXD4UJXAg5zWZN6Q6Oq4oV5L0YFEE1tzSJ7IQf0fXOgqa80m1ITdA//4i/lt4L3ixbtIFCU4tIT6U6/H9KdwV22Y8pxzig4w8lKTDnkcd6wFGvgGc5MoJCOFqbEbNAxUaHE761YwJFwHqeART2utkwCt86KXIPXKrGVT03J0mluNaCKN732TA7srs1pyJF74CmWskYfJWgU5EzaC1eH7axitcJvDRpc+4pFjEMpeOwJSrYucvjCZc0gthomCmOPCzzXni3WjkKnwGmCdk/dL9UWWwrBjOKEWmGAUbm3FNzuF0XCQZXTZdG4K3QXwKgVmfNMfve9AkULA6moPUIYlwwGL6bLHYyEDgzewYS7kNrrhd28RGQFrzh/GZP9/TUk4a8P+pwG0Q+lzhRG70hPIT77HSz7z0maxId7gziuzNFlZ1MS9vQowMrnr7eTUvttLut0bMDFWUDj7clwcAitCAOoXN6IElKtg2nJ67L/MleGIBhQ5eNyLAvrEIaBkhJDTbd6xFvTa8Z63a/w1nVzb6YuzlWBKlUzGjNegQxF5mmzILm16KQmyQzgdtKL3qZVxC4NxzdAzk6QI8Ok+X+4Ar26+UrJ/5g9RWbCt90XW7CklWyGEFl8hbeXJ+r6X4bFLoKtOL2a1pR+t5SZXUc3x7nE1/C2m7VY5UWFA3t7y1fAzacTMaTZg+OqZX/eqRjGdk8jEVXVDpm2zLDNQINqM88HYIOuUHwfOH2Y2uaoIMAKrc1jpSyjrELclTpC9iCaMaGlToKMROXJKMlfWDnSZ4twGkMTLHacWWSXso/qitfDIVtbJU34CsyaPNSMEu1GAlOQkejZrM3IiFCumxQWUiPFFXCUx9sN1CweQbv26DgQtWuNTg5m40qzcF9nffokdV9BV9fxMoTETLkuvBCPxscMjXKwQpcEzwgl0+gshQoH4eJvVj/r5HuCXabiRgDy4tbCXLLrQuCoVJyX53MibUMNZ4GrlIyABUre5sn5CIa0vkeeYKjGTKjrv9j/yqwbVnKkxVIk4RCB+I40VSiWtDGKSnVyp6eBqg2B+QBDmwLrZrXd+QnniGH0YVtj82hKJAFkDM719QtiOWZebKAnSwRVVIIPsfQw0jX/jDB/7KCDFRuMLwdj/v/oG0XMYeHDIC/YYCXaPD2IP0pgOpS7XZeH/VCaOHRrleFJPWVjs28kWguKqq9dyoZNNiJNFl0WCncc5BindXFOxsMDz7CMAwafVAs8PCSjgtYTOczzcGakKYnVKW0yKl98y6wkvohE+z+Kd+uhZKjplFaVZD4I44ycMc8jNfm6kmDybrz2si3Dkxo0Yfb6jPg4VsmM0GLwBIQmHtpzPRRwMNnwi6bJ6hq8fgCN1FiFX0cwDZ3agfEIjTlKIPioQHtlWtNeKie3ScN4iXGefxx36UAFJysdJ+wO0gYz5deIw+zF8d5VTNz7yAiY909gFp9N8W1B1XryQpS59qX5ciV5XQkdqHs6zhxQiKVaJg0dTwaRqzp7CTiNk+CRWUNovLSCN1pSTFJROEhiF4DkyjB5fLsizsW8A+VKrXYuFsl441TEk2GuFLwNVjYYWkG/uQhfq+5iag232b7nkjO+S01Ehj7HJflE11AYa4v7KaRXU4MejMmNIRi27mZSvK3YLfUl0WZREdSBd5wXcvmw88kLjQ5vy0gBW+b2hA3dDBjxDSAByRFGThMzHlF8scBFaKOh9tjfnJsJ4HDJ0PoCtyshSihwhXN8NT4GYWN+3n39Gq/GnQ7duqa8t9ShS8MIcN80t0Sy2C9fK919DBJuP/WyF9uk+BNy8QIeHeDVIrBsYU7SNI3CBJYu1/YO4bwv31NMrr1/Nhano8QCAnKmDlor4ufaXYlCfdENwDIugKlYBvVuDDHgVm6geB3nsTSvubtTCy+yEUmnJw6Kv15CwAVknXrKNqNhD/c5PVkJLYYRlQWnuFuexwjq76jFkOjHk2aS41Ky4DRstHzKCEf14pl4eFdPGpGeLEz2v5Ju2RGmTvbnaYCNc+Ij1SHPKyL91qq/3zva7nnpLvwaw1NEVWjWft0zp2BkYoG6Dk5UvqRYt990evCK95AGn0AVqhMxCgb8xp9By7wI91bONJ/dLXaXT9AL9/CFJwTv5IY3OdN8dPe/WaH5lLzZ5eZv9+6cYieGD8wy8Ui5WyWsMFG7zT69Kh8kxH0CE2ptjayzr2aqKphrOrPo+M/0B38qoCsiktdbRdmT7pt7IQ8NLVQx6oXzofEFXrjIUeNtH4poiEnMuhY/O6q6fbqotS3WC9Fp4WZHJZwHBW5RinE9TjV3gILkgW9f6nTmtutILrBfuAR9JSpfJfzLhp+ZN64KSUz+Tk0ZsDe+7NMGA8kHf31ZPBCsyfBByJ2aSsFmlAB7t3hDUQmft3ji803n2MDJqgq4NFvT3buUc3mLRyQVbE0q7b2jxaIO7TY8GL58FodbZvEmaS1n0qQuR97W09Cede+hV31yzZBaXS7cPBv+cSw8p/3ik1ntbAiKl9JSjw64iPChfOMX779M98rymhCh/f1MP+japE5MMCN1tnzeUzzVPsyjFPw2KBT919OkMGKi1pdGm4iS4FMXbEapjAqRMfUy+ADqs6Cjdob8XZquDJ4lTh4Yuzb4ek8jxd5m0x9ETDjpj/rv1Zd9x197xg+YzMTJ0dAftl54L1zGUpX26Uu4yS7k7BkWtUOne6lzaVh9BvFpppihbZQQTtyH7S+hF/E+9+cHD1UokAYCKQk6jYbRhVGWvmA6AMU0+KSnZbdP7+36/7PyaXwFg3PaYDH1uDJae8BnmWyrcmomvpsRb14Eao3rbpCWJYx5L7VcwCrjQHLM3OAuVfmZ801khkvDnEOCqh2bgNVD9SNRz5Ti7fpeEM789wteH6kzsGb8tM/XBDZIx0XdZJR3782kCMSxDnBISpO/wIUnBPZy2GF/X+Gsv4XPLyMxeutiv26Ze4Nu5Sy/5V3eOeOEnyNcvcFvd8LEB6ed8HeEhomd4yb+dDjh3xw2ypmhb7Gquar2falSFml77zP9cJGDvVy6G7q/70pdyx4WL+cgCnVf0FQCcOvYyJVrLCAlv0Ypkp6eI/+pG6YOHURxqiy5NTSC1/PFBnPwMRzlOkcGttj6pjiRxZfpG++iCuieI13ySJ5Euhhaedtfw1Dz0UI4hdgCre+ZUIw5XdIY0bYAy7+a5NJR0EIQZ93XG2uBzvudj8HuADg8IN5DUKd8QaI8vUyZDYktoIjnj71m1dnB6IrwtNsOuvL5/Yt/DhLfCqyJNyC3hnnJra+PrXSs+RP+7r99oCMM1v/VFmqOyZIoAZTylKXOy/dJbgKs4stERLtVJJhRutOvyZb+0ATXjf9zmHqzlEkAHNt/26jSuRlQstshJNblUa8NjKd4nNzbp7i5imL+YG0ODC2jUSI3xd1SX3wIklfkcRkOj07HkvcIVORlHIFefGFwoam3fu/Uf7rf7a+zDZmTSrNxPIWDUK0bev5rJTUVwJDjy3vTNvcU+fsw5syE8izSGXp5XOYOHeJ5K1nRi7yMJ8Fa10KeRjY9JvIMh+yb1K8/7KF8vxPcFlmNRWtLcQzCM4SfvHN/WBo9CgadjMjd5aObrqOcOM0zR8dxS9r9HAgGPY+3/djCYUWO4cLt+WhUpUYb1Taf5LVo+A9JWaz3Opd73nAc1QYKdgW6xhaToNNiIy/eIBnxLX5BGjeAdgxWJ9+3BNbcX+oUudd8baLnAhxNG4V9iMIZnerjjayPZL4wyE53VJtHj4KY+w+6cmhFj0xIZSgAsEYXD2TcoSOO0H67JN2GSxpdvw8c/AtQdjlWQfRCvzU2II6pl1DPV/jjGkXk6xcIROv+E0sLcfG0vsNCUq54ob/XkNQ2x+kADnqo2YdE9OC8XTXJ2XQ4Kr8P+eeJ1ivYPy62fBy2HwXoO/BaBBdbR4tDAUejve8jvB0DbCtoiYGBeZAhdQ/DgDTC8lBcHCJovLOrwEaN6zS/lAAyN0BIyqmaaFAgnT8XwrIfAm8nkV7GvgPKSUzQhC2m56Zj9wtW6EAqYkNqIGsiYLpqRXwJFAfW0BZY1jdqbKCBgG5z93ZI2NA8JKrFg4t9Pn4T+i86PTq+pc+1o8HWND3zDMmSxRyCoV2Zt4qX6Qy+kMP8foqRGdbdDaqHBh6KAD7nrKF5zb8P9oOp9uvyMXDiOxhDDSGsSxs/4leIoHjA4N1YANQeDj8mBLESRfWLq/z2h+EOILcZfwRwHeBRB/mp66p4a26Ke4D9f84T+XFCyRiQxXqLj9DuT87pfjr5vSh3txZWytm0rZC4MKWjtiMM0CGoYHPy0TY1Pa6QQkYxUUtusQLWKvYk6bFGSoiKLyP+aL3CxWHU9lmhsO1zMO48arnsrzdT1ilFNoIhWOv+jGyw983A2C/Z3QDSDhwPOYZ5tZai9gZQVJVTeap3AzQLOxzDydcZBaK6XtMauGBr6hAMcJsLgYVS8S8I44nNCLudPhWLQqwsuvtkFRnzKaFWSCoozQ3EYYtneBf9RtUwEnTXpg2xKSRd16FRCiUrwR+O/r5BBH+o1lcHS+embDN42NXj3jtRDN36MBmscw2v+TH6HVCszLqOZQINq/l6bmO+BvL0oJkhcYY78OlqRkf8KNfFQu73Mm0cWRHLJw3Pp3XyeMUK8dtIVNdd1VaMIAXrFkHAVPcTIA0e4QEtHGpLHJOL8+n8UQEC36xpc/FMG7C/yNtE/H6hnIYIvqVOf4kuhQutcwup7iuV4uqlQ2jKK640Z8Olk1e2ibx+lMXQzC9dF/20av+U/FjyYszrlVLLkrvwsglpfqmLUHRf09DfTDV9YNK7G/8NC/H2f4yETA6LcnE6kG/x4UEWYnxInFjSax/fY8YxS9Mvq/q8nZY0j4vaTr0G0YIbtBEOgRjpaoloVBkiutzh1552VzJ1TAXNwQTjtWC8HUuP8bLyBVlyawaHel5+cPF96NqTyN2viXqFt8u1l95W1X6wJyNkb60vn8tLtM/91fU+/Vm9ynNASqbz6ZaKu8a85+7OERWj0K2xzgEYWeGM+HhCHuDiqRr855pSiwkuDCzSnU2txSFiQK/H4cLnZW7mEFpuDe0xe7G8sWgyQCHVD6fhe6ftAMq8HciqG9m6KXRqf7OJVdDRpjyCmij4Me5G+Xxp5ACS1VcG9iNwVl5J9OMReMbnD0RW9cJbGeH7zWhvn5/HcbqAAbEWHOYb2JYNru2Ei6wM0tyDa4MF0ayfn5muRrjZEdA6Yb/imhe5Rbvg6yoaDMhA7PWwesuejcs7QcqjThl6Pc1YgfiCHqZ10LqfdXjliPvAkfUO8udztMueODZ8tyZu1w5WitZlfGwTl5lZNjCm1YoRFgNjXc6JbHEDe14f/jU0BL3K5Zp2Tvz09tqFFlwhCEsRYxscx7p2eVmATkPw3pOUDbXKA7m6n5qrxcitVw5hB0YSGGivrSBCZkticVYwV0GDbeUt1FDCnHvCy+96v7SSJ9FVujuoDIeBLOgttm86UrIJn6V6/AFdy6kA3tbS3cD8DbVDB+RBafc0HkZJGCvMruh6YUn3yr4sFgLWRIN6y45aXWOfyApxLUoiTjlGFlhB8asXX9LUkqjM/hQ5z38h0Kw7zLgtQWxB7eCBPHZY1JrRUwso8hUoJcBd0w5UhkIMSwdG3BKhglNhi2kmaTZ0VZhO5j7Am612iPJKB7kMUPJNelWE/Q/xiu5Bd5nGFJF43Vv7jUuqu3AxGhU+onRKndz4KuiA//a7HtpBYdG89SxHU2dMzD2NMm/ofsAemJAQ+fqwcUxOqbf9MpDc0S6gxPnv7mOPAm2JSuUEScKoXFqJrjauxpqNYdPsYwqThHrnuYaHu3qNHbRflHcxEKvrrYjClci69TTDItofVLp861qWLB+lLWFvFVTUB8TG6ZlXtFspDL1Mh7qH71sbYngZ9GpBgHn9MpMs2XgryDGZ+2AtWODntLRjkirg5zVrLSGyvBreqXBZevv+biUG6VuxX2So7ZoaGYy8NjvX2E/z2Qq4tKNrGSSCbBPqomU69qVELPXzavWaPClLMxz/NQhV5eVskVuDbRXLKGZo0CGS6sxC1XXOUhVqzwLWhA2cCcU+zeJt7QTQS60uETfiqpU/z2Nesl17blBXql6uxttnrPgQwdvtmvjALDOiACVe6dchhevwb0G/PeXzhZ7uoni4WUZP7QU300mw2uy0veG9wtuM2HVP431XMK5+2YyGJHCMZbs+YqCy3Xcb3Y1FiqLxqgqNrBayfw9nmd/RulHiMQlPbEO6fipetgIrFyxtYsx8Bejr9IKNQIUWZSuKTh3J6bWqpLQRX8cJZyQnSjQSJvaDokO6bKJmWNORG2TZQ4qmgvGVgKzhe10c9bvlP8SIK2eHXn4TE8dCez+nMlSsGtqohaTiWuowCy1XGaIsgniOSGFu1RKY8VzLVWWUXvFr66NAZ54XPYJty1wZ3x4QH2uv5yBn5pa8mNepA78EpqQBIGnWL3qig+Ac96C5/9eAVVcGE/HnF2sDvrtukSOzeXCFZqu1AHuHgrK5qPq5LH+1LxFKFitIUVtEl1efMyjPZK4CVZDPCfcG3xjh7ZG9CU2llSNO2/d4e9wGToEN1GhOME2vXcFKiXIqFcMmkBKVSlpeSFw1bCpFlrVTg72umiJAIeVCRpCjHBd6PMhubJp2i29WOvWAT3eIfMNunBxCPeDXV+DdRdWAUHomqCZEdxmnaCmGRUoDTY3s082wy4vmo3B4t2rflv+r/eiJ7REFjyM0QEI+Zx6ZTHel63izzcc3vcdSGGlPonOxd+0jf7wecVyafBTDjLnDR0dVyt/7425cre3dKt7v1uZJ8S3Z+005THl5lNZGPQh0XTW5TicvroS3vWWlh/llIXFl8Siz9NfVEmjOAYlSsU7MSsWIurBWuojDDzUSHyQQtQ5djKisMXea+FZsRRF4ckqlh2J7/ZpvtaBDuzAsj5MnYHsfFVRBOPy+gsqriJl3VJJ0giQ+ThSg7nLCIkDc9lUJtKVsLCm11tHZN8g5/GRA2F9pKhrsjDktV3i8vviB1aWzEEC51z7xvd8byhounWfIbcVcQ7j7WBnuFGaX+G/ThWOBVp3nAlLUdXlmRqdMlNCoqyNJB6yhFXLaaOOsuvFQ31jaaQ9RgCEdIy5t+LGhE0VakRzHnqJvrTOtm4LxMLjuHOBQ8mHaG/50RE0eJ6xLOuq9/tgRuOOFSv2JBXkllyvHlf37YSobJPgy3HYOgWkdwFflnELMqVsJJvLLMdxpnTutPzFFcnTLIz4d3MbBpaY6w6t/2+bd33lozVG+19Vzhd+I7wPI/8B0n1EMWLUMphegljGoTRpbOaBmCbZjqFMJHM/S2dhwuGmkHFe4fZozyIu3X6clfTPKc33Wo7AXp0L7sRIY2M0Q20P7xBlEo5aqp86hg99MqDVWQ0baQ0jRRZlULA1yzC0r0aNN1Fh4sz7mt/wYx8dr71khuhkcODdusQDq8uuRBN6rwBzO4IvbKSNC7H3tyafxGT4hAi5c8z0WgMFbgt6uu/QAbvCSehj3KP2E7T2QFg6XNt5qNfQVXuup+XA27V1MdLS9MzXyLZ8H5SecRSGsHc82aq7CoHnFidqqlz70RDwE5kMFEHSrF6nRgsPyHu53KQZcvgRgTwoJs7baZ8IqpUNIVm1jqvqkIxB5r2Pqtik6dMvhYJgisphWM8JA4vEaI++xSkeIzxT2Md9jwdLdFwLT1qq3sJGD6iL0t3POUZmyfm6Cj+6/6EwsYlbHiaV8cyvI1dBVbrkXXF2eRTts2E9znoZcBCMdEkYV1ummbYOlBGeblmIj9fMsSLzEp/dcVK+YXLdXowTz2VB6k5Tg5yMnKET2b+/dJaldqk7xkffWCtDGIVqDTvcmNZoTc+sdxA7lwmOwMfEitVzhynX4Y6VkeaSL8Jml6mJmpZ9o/T1hngTCzj4fdzGhiYP+vUuJbDqBv/FILSepP2yL6vNoVcel79nEduvzqb6UqkwGbvPG9TaN4iBSKO4adz857PIpkceqDigzuhp5nBQHl4mH8XwVlnBkqfY9yltN5KX2s3pFHE2jbIkpY3iHfpmjzBmLrImr6WkaliBFJJSvTCgy5p9TIyjKPaaDXxiWebKkxMhevAnyAnVKTFytlCymOhPKzFIPDnOKWVji5WYOE51F3zAOtjjFOlcLueGSju0tHaCSPBiTgQRpxx6V7KJFepDak3IlRH0wOdRTheAY/G1B7mIgpPC2OSWR7XsXzclAsNEhi2WMX4VFaancqzXf+0LsdfG1Jrzl8g4kJJAtZdRmXK1ARObHfcnfYic1Lj9AYP2lpijwhNAtyQSsEsu8Pq1zQLAo2Ht0hDddoUPIWuXaL26Fd0r1dmAQw9hEJK/HjAKrtjBCVU0mrZtQ4pchJ1ybtKPuwUSFjIWKFlvUyatWIZDLYcQNHZ7yVYUwuEaTdELQxYR132a+7hRVY2secgyaoJge1cjQi1iw4mNokBSSjThmNMIeBHjrzmj1/yNGImoTDclSTD+WNONMxJkttcIpVcWHgl6kgS8TBofm8EhTJpcDsfj9Az5isoR1hfCW2FFu1WwmYBPLP9DQq29HKgXGPxmd1QPhb468jlll0Mrccgj6TEdvGOvDO46tQ+Iqe+KL3Zk29t5c2cCWY3cMosvVdR6qJnyb03L1MynhVmWjyi0HuhIIx5AnFaF1M6ocY85zH0nN1zrJ7TKvhl5gU2bVLLh/mySLOWORl9e4zRAOmqzJmCgAXQxSjLxngvTK3TZUHjrU9m4mkkPyvq/PyoVIPXZgiPvg0w6SBLfU6MGUfrNn2fBb3M0Q/jUQLFskYmOOQCELuXXiYMFWIVspKl/Yn2+YBhGfBWRykMWbK8G4qaxoVETE30deLJm9nL1TYg9z3cX0PajXbg/3WirrRB96xyXMTOvdK1zEJdHQ+yle0tI9LC385834J/oDEnFM98lczBXfgATCT9MdYXkhZum8S4TZJ/rFNE28BMjFS8SYfUfLcbTd0PLB7doz0DZozwbW/phpCQZ5qnQT3af/zJX+DbsSrNHQLCZ++BvqSOcYC41vpoLAhLlgcxFrOIE6CBpg2+KFP4/7unwPOlcxNmBkauq8xBb0G/nrU4cjrVjn5QJZD0nho5RRl7yjZUmYGdo4d6RjCFKl0/zGAas2kPz1SbRhYZZtLernZ0y81LFR3i8BSFBkIcyjWygJ3FfUEvwZyWv1PdQpEqpKC8O29uis9qTULpjUcp9gzN3tMcMqhZY4NZTWqsLFV4w3lcF8cHKOu3I/4wsQq9QYTqqzd9pgxAvBUKxiDFtHdmgwAssuqOne0fUqEqyrz5Z0CzeGRBaCy3MxZzXQHlGsyRfzQ/jiY+WuQBjcPEeykQ2D1e9xqQhw8tTO5RKD0TmYIpr6HLakOjkC0P4w7IQzHD2Wpzl7MbCc1dXYmKoXRoDwrPRMSzPbjj0HJ1c8OFCIdT/b78bmgjlZvDlMWF3K/bW+wqc2Ox7nidNzxIpKaJ78BaCmO5O4TFDiNWzSGVW7YUPWD/m4CJ2Omo6Tnc6/txzjuBH4GlN+aC1PZiT2brehSCMV4eCs3SMYFn0u9MolFwMDryg2S7+hxHLBKooG+Y04nsRFbYsrhG8bPnsv+lxUH1BGkeAa+3T0aAzDL5ehnxTBdQ/ylI71kGRWsRPNPwwWJWmP4NsiBSH+bTH+KahVmWg8KWFtWuxmlde29iSvKapOVqkO5ekTsJoO/0xNEtSWYBkEYufbOe0L4OILXt9mPnSwHePVd//jS1GS1cV17LPRxnTyvLsirTdg2EeDgDlQ7qz/Qb1De1FYZBaQxHw/X1yoZNItS2BPvtuvrR9rf1rmJPPyd1Eeau172dpNCIto8B/zPyITEpPK366kGPlpsS7f8b18g2BOmOPguTvz1KY/tlRBhWoBPqJ8rAzcfu6POHKDUoWMaLKhEfdekdx8hojC6uQCMP30ebgAkOcRu2FOqRV8xaNFepwRFK10ps+Qdrateuit2dRxsdsZUoyrIhskTZd3Y8QggLZw0IIzgeExiDM/NBViPLyH+ZoKsaYWPPpC5O+LZWtc+XzThZvhWdO5Blz00sGyhSFXABPU1TJwUdESFtdx0lLoztCMr6LOggZRhwEuSO8VS28k+fzaGH+O8HuXG7urRQZXAWM7rwD5chQBVKralH9t99ApAb6JKnInCOdSw49RZKX5zhahSg7G3t8sPEFiN/fknpJJO0zCqqH6vTfyGB2ci4UKTFnT/32SH25ZNQDcx/NdTH0UFch02H6sRsud7y8Disem1YyqBfS8TL1YGYOGxsXsCjdSc0l+6khN3qxkg1HCup2+TRxm4WVaBYOnPB9DKd1D++vhk7Jp++/WHl3oNAVGmvUeYfCeuDQfiA77FTvUxTJ/sBobOAzZbiaEvICK/OpDlTm34oujvWEB8y9HE3DGDfc4bZKOl7Sxm7K0wPclQ7bMAx9ev9CBjQzivOe7qV7hw5sAO2Fyx32jhgYKG1Eo9je+A7nn3Vmpk0A/xTxkwtOiliXppFj6wYcK0iwFlKb0SzvucqeDu0LvoGxORkWTi4Lb82E8GwM2KtxgRbBPULkRer9zSpyI0djEVQMKrS7KwkSL7mkGa9HPcmcVyxiYSSB6btLvY/AO4NkQ/EIm5P9vCdO9abQJ4ZVosG8W2mT1/akn1Fm7H43VenZR0VHZC5UB1TAWUhRv6ZSwwLTxfDLUSnfUtwNRoliXV0Y5xYfi/TQcEuaxD3U3JWNRxAKerAE3/gvrDvCpmonbYEC6wwHLV1XogI5UHaqNC902+GVwcEmaFGKtO08mBxcotGbDqzUffp3VHo6fsbCvE0OPCF3N6MhVgotjll9pCAo2JOgShqd/QtgRTEoEl/clOoO3siGUIpMjqUxClZWS1Cp20oU5AK+rhvyLY0/3Xapc/kjaDy2EM7aQk0nFqMA0EKXtCZ/75Sx/Fj4l25M8/8w/8VmOSXg6kk8eE0qZYyZelFzmcpTAr6VX0uxKokckZhUtBlXCoZQ1nrTAhyPd6Kqw8NnG644GEZZK1LHsAtzOJ4RF6PUArnbXnl2rAQT3lVHGjluFDjkFL3FuzTDlUonJ1ARjFCaMvu2yPN8qDrOAlecDQlKzChMDQUTQs3zjDMwXlRb5t39G0gD+GwL3o/PpZmQgkXUm3iAdI6RjvDTEUU3H46dXaUa8l2sg3E1U5k6B4vxsDFI6NgGoGNSeJzulH+JCQUmMIky0V/0k0lT/OJF9A+OrHO7hH2OaBzAgcXPGv/QUDb82QqnzXdaMTh+qmfqzI0t6kTyemtLRba2Vu1CCroL5mVLy91wpp+dfXAP92TS6mGZmxZHWPsdyAk0AUq226DWZfTYzJc29nzYeN8gix7GKgDJcDXlrGAG2CgQkbT5NarXtWVPVZyYpVT6zC4NnA6OOmLkyRLHGOQveKDocJe63IhlzD1hBWFSaLP4nbQNJsUDdi8v7MllWVZwBRKbKupihq4JdCArA15JykIChIiRF1RCn6yArUIYOVRQLH1qXONVn95ColN1l837xLLLrOwP245QN+8mfPY5pSAIwiNmAPIDSQ3MIqemLjZG4xbifSliADOWzcGCEoWRFohkErkbrq3RfxWOP2WZfQul7Ub0GpWNZAX/egVTCd1jw//yUY0xknWf2SYYxFok/4hojvOd75x9a33coq+ZE8Ltmbb4txrImTGmBr1WhUxFIN3+gUMqWwycf2WLS1SpVATBB2a19IwhZLS8YPR7dUSyVpogC9QVPR43iv2pFASgle00c/Mwilx6VlMpqLlZrQLDK/Z0CI/46emtF1oPBqNmP2Bi7U+pZRW+7KJ1RqWE0Q2V48AYhMTe94tw4MNL6vhgNXkOxGvLl42BOLbhXh8LAl+8SyFcqaKh6R/JxiORCZFDDV6Rq6ElunSL9if6sbnWSoExk8Wk0rech5FW3yKFDKLojxvhTtxIPsNpI8KQURf6Yo99bZY1uhnOzQYEz5S3h6UKuVl4T2/oHCX97Bg06NXuN2TM2WJFhNNWRYV2Db//bkeNZEKwKWh18r3nHBMVDOFcY6wFLRowhLyP8NqlWPg3vRwviGg8+4iwL9da7Na4joTFn2UhDj0MwctV5Ysw4kHp6a4rsLnG8F5tlsUnVERs10afXKJe1GNnikw7z63hrjgwZB4P/FgxrqU0HnflmLkL6JArdc3/bpiyZWmvADbtEPv0B4GJiub4CR5hGsD+NFb4BqILMagEhIGfSD6ZpFgcJV5BsqO1u0CC1W4kkJkwdicZWdJbTc+g62jXxtFHiNkSHtYaJQOo0D8Eoo/aEVtzOofDlOKzyGzE7Z6pPfeLLWmBMIFyldjdHYv9AjT+Gu4qhdicMZ073+BvmHaYErYhUpEDYp/yt0Pn+HCRq+FXK2UCXAr3C557+/JZo8rzsLsxJSwQ+xANF7VQbNXoTBRkRkYrlAKdzQnPRd3FszU/jW3dO7FxTmNBEraIxY40LJaONW4+2q2g57K4qxF9eiTcYz5zmdZGyjQozZrNMS07L+5RW5SA+OHE2bUvdXVLysT342eb27AfhVjTgr7HMnUrUU9A6e2dJ1qt84HFBL7COrcPiwvpvD/+9Okv3uYzql5Vd3GGOlvuxY0P4Gf0T9RdCOEw6AkgQbN7FbANh0sNEm22qBVG4HTQCETKo7W2+qLXEAe/aujrWlzHqLT3V8RWd/nDzO4O8oi4cyIuNHUdiipOXG6eyzbhCXbshPw7Zy5pkOB+AwCdMUSO1OCwy2l2f0FB0KxdG17wtiqVpKGn/rfaJBny1CNHvIR9Jy/8OFhTY2eiL0dBrfZTqP1j1XkKqqn2DlobA9cAGbPqw/Jl+OztVWCSOAtFZs/gFKff9XJ5Njw0zw7tgH0YtuIc9zBiwPe+2oXAg6K+xM8p10tOq0cuUbmtTCo/dbxVutRcVUDk4xAxdro04B4pkNe4Kc7Gp15QN8JGV8cNqGLSj0846OsYnEomHkG14ZRFPY6wr3Tml/XXOdiOsotlOTzGsD9gTDZJAty+VZ+/iu7V04ynsABynuQzQk9N138uOKG6npi23681wdEVHx6t3RrFAkSkeWng4zo7sE52j8dOucYkkf+lGtXfHtPUh109BmZsfM+KZeZHRzOsmvSeSKEIpV6v4VmeZpUFmjdms6Evvasmo+pnlCkTJ6rFDh2iIxiyn1t/lcsPYiPWNZusNnpFQs3pON077k5wdUblCJCDWLBuDNHE1qG7qTLI/SwCyrIdFt7tQhC5QMn0Bn6AtQNzJ2eID0WlriIKbiRv8lHHgjWCWfnd3mj6bGMABS8NdDgkI9K45N1iUUjAghZhzJ/9Eh2+4fXoDHCOvE3UKjSZGY7GFDaeQy43hnF93DkG/ZSm52Mq5ihiXls24vdMR+iTUuJXlSrAqFihSANi2EUf7hdbRnIEo4xAl0XCj7pgBj/SBwYKs+hWRTO5ZzIvTDLw3a/Ul1KnMCBMVi0ld/Z2L47bYmEhQ0/SmeHq2xJyrjLYEs8qgchoBpCKQAHfu6UKuvayqsIiCnGiH4Lti8ljrKAp5noq0cSrQNhGQmIy8XYNMEdWjJhM8p89QFeDG4mIyOs+LcJnNWRqCNTFQ2CRZylUL9o1X5q7DDA244gl3MWYLGSfZHsUgxiXVqSQFoKPhieHolqm4WRpyJkKQphJDIdVlBsK5aoGT8jFJOjJTnLzA/1zMkhABiUWPsCEAhCMXJkzJKqSx/r7p/PWyJSNesgPlYklKEFLva8NaxXHRr9tQVH0ZOYs9DXIBMLGwQOtZSNyd5kMvn/8Cfem54IVA8KkHTZTZnJR2HpKYjQ8sTZ6eNuvCg0V05HjKAh9WR15hg1rgI5zXkcPYYo44kqmh9lvnpQyqCYiY8KpVRjnOk6c3Tl1erqaLC2Pzh6l+t/gmYG24r0Ft5cqq/id99XeKtahGsfKrE58frgZxZHmwYLon/q106WzEg2M/VplknU7/gHjlnfjVU+jNf9/IzeHDkiuNdDKx/3PEVjEnVXFvS82S4l8ZLfQxj60YnbFjiF5mohxL/22pKGWJgBsFdcAsiLSR+uPaQuiOF9evG1WBQg6DPmnTfvd+zP/CUwDWoTz2F+z1dBWpw0cVa8jrg2+zbgwF51giAqr0jUeW3wHKNjE08zmykpsRzVpHFj9upTbkdxjMq5OUgSk04LMdPS4OtHdRpmfgqGZtna+4pWz+8avZGFFUZpWsOGszUb2GjJl7ViasfIK05J77Go5pd6RNIZ8H0Sr4wHI+cgeaHFickN9P8gbWDuzNaTNhaPRkZmWeT+AgY4trXOyn7UAnxCX7q7CAy3aZtHwmZoVS+WBTusKGG4YoaNE7SzzpSim4H+rcfwnYG1w7aJRhahbAaIdGB3eNmkPWtg5QlGoNNI57UWeEacfu8/PjezEamXRhb8vcN5w999bSMyfxIuL+epSpBzYHMUIdX9fo9n30njzNh1ox74v70wQbI7AWhjM8cbGHlp3DwANIptfzChPF8nYJabhkHsdm5/bi0QG6PgxTF8jwYhbWYiz4/iYWctroDKWzdSRcBvlprsqG+b5wFQ2KNbNAnJTDcr1hyhKD8Yy5Tb0kYhUyReJ2Zh0n5XZiZF3oTZ47ipfiDJs+qxssTOzTV9dJsJ6YTqh53Az9pq9QG0K5gDH9ecdwG2LqSwdGYVgc20tz1g0SWPgW6ZmqU+UmC5/zs9HIAzbRzYBVcGkgw8BsBoV6jQkxENp6AnTrFhu4CPRCUTIiPciK4JnfzY8pq6srgypf0ADnHq6gU1661H6waIqLKO0GifHB8TVqiRX0rdx2WyYuxl/Pvnkr/MkIHRQXl4RkiALSE1gphm1BdwSsIiU8oIk5q7oIAGH8wwjnKLUQV32gAf93ymweC6M0LB7EX03fz6bu0hAU142fjQzuHPFqgIeGlfLSIbIaxIWR2DjQOmc2A7aDS6EnYdkMKEYPhF+/QBMcc6An3a8CvN97SC5HjkL9UbI0O9ggVO5cSqZDM6HrTKlRw/wmzdtrTszkJ6Cl8rx0f5mhsHC1oGs+ooR4p1ZzfcxQfRDBYzK0tmtGLm10LYauLXXBGbTKW0BNKXM/HiwJYfdxUaGLNNwLvCQs9ajyMzb5NJlbSOdVXTf6xQwzLr++Qgm+wkftqOlfA6xMTwU0xgoKSjycTIxrq8mLolw/wZhzMW3PCoetuUxGKbv26aZs6B32IVN0qDVKNMRANBFjpvKzozZIi1ejEFEd+OfE3/iNt1xaqv4Mn8clb9BbzNULEYnkrI2JgUBC7BJ5UvknFuU9SrdQZtshGzsZyFbrT7vR8cyIhrGH08VstoZWaRwWBpzQG6AVcPlFV6KqMfeVhaWqOGXNK6Q2MsIFCdrRmOJG8T2tca5nUQsXFxxBUDpix/Deaaoa92r9sGwHj3F0JdLu1pYFLo0XFJEvvOrhHVvBd8lfckWkrf5NL2T9IKe/HzbB6JEU2MDJKM7DcoGhWBXQi5aZR6BFg6L1z9cCDYf1wpRLWtV9Mqdk4xlsFwoRYDE4fR2gFB/VeY39dWUBu0R2vY+ZczdPh2XA/Dqlutf1Mw/VnkV5PslYTnW5cGGd9CLPU+TQrngHc3Jn/QYEZFFx0nWOZkwoMlf0E3HIDTQBs3VswBrCRRZBQNc4yGnlYWZpgq5ksOauc/N+rAW/vn1IsV6h3N7q3B/IIki2E6kNwwUQTM0Bz5lCgLTGFzZ9H60X8FX9adlRvz0dxxSveEzHXDQ3gA0cN3FkTWIpvuYhwR+Wea6WxmHWbZ+P25jKsD+5M7m700YA7y6O6vg98GFjo1jBKFGgTt4aRE6Jit9IsgjQ2bvu32Pgohm8GUpbC6IGviSOloflGPyR/99q7W/hx+CnFkyCRyqC2yEKcvmzhHBv/s4xp9b0UJ4vyd2cF9by0KQ4Ij3o0XAoB1v0pRerhysiAEj67HRBF+q4ZYupzSVdbKpTTgbfdFdDjMmtAcnreqFxTeFph7Ft4emGB8WJIgXuBdmYka2QwBAbNnV9p8suT6nu0orJ3TrmNJ0BkQfQufbaPxkZLD3Kpwuf0tZ8T8i8SD5CQGtR6irU6yeG5L6bciJ9TRryK58ALmI4HyR5JqDM+LXzQbzVb99UtN5Mg5ErSjBnh+o0SiQSCJalajES31I+4CcdMqQnkQsVT0hWNjckV1kaum3QC3vWVaI1Ix3HJnKZeTjX6nXamk/YwBi93/RNoEjstDKMf7DxHUQqs+ltX+Gzo2P2u8qxrO7LkW2df3fKsC+FbNy38Vk6p/34dJos5zJggVJo6mLeABXUtBQuBZJ37gAFUXbXhbXgwiuMKsudc1LW1mpVoQONOIRCwuYkoQpg6pLHvXs4aqCcUJDUEyjSySxJeTkM4fhVb/TwUNLx4vrYvcwdssioDg7GeKjU33igjQ4byq8hgPLgaXmEhAJFX1CAK/vYdQvpRHgJiQ1PYszVV/+12Trr4d9RvOQ2OIrZX5t88F9gjub616IZyvavzSPb8B26Mf9rCKMet9W2f4Uw0FbYjXnu0KE0ujShPRGsqjgRYSJmOsP9XzB6NtwZyZfp/ges8WzwRtnXC/IKo1LwbNnbWjgwf9C1ZvhyXeq1j1fBsXjv7/QN/jkGsJznJg8KVes8EhTtFttWtOvggnKUtFVHgfVoeCdY1eCuQKe4iFCrS94ttUNreSJ2psL+LGZn0/3mKa9r3f6U5DCjj4rXv3zO3iqSP7AzfJuE3argGXOjyctxziFLNme/E0+GPGuxHYlJXZteBG8MUOM3gdGQp8ayEJ/CpFKE+4SplPTBWavWml+1WrgcbEviZciZ71mAMVuLoka0vUoVX+jqSzKos0NzkPAoEqUhCKyXsXFMaDQxnwEBfM3aVAu0N8V2vFWyavEwm3OcvPQgZlg4ScSw7eUb38Ow/RJJAOBObQ3wMltYwnT4G9tvsEtrx1BZRhnnu0zT8Otta5w8FO4Oo/V8XXm8Sj0Le0+TZalbwnovrF+Q3CW0j6uy0dHj1wQ6HAz4BsAFG3CkxF24FGYN0qTbB15TcioUX68houIGI2PVYSUXiaskealMrK8VQsfUa7T0uLkD94eKYRaea19LSxPG8+l5uwmYLrEK8CUt1wiFp1tNgt8+OakuCQ+GjYfzPBa3tl7TiNIidNyNpOFuP7U3LFlQaozT6VjJl2FqpwyTIKWLojDvs1y426cHPEKJ1kycIIXCp5HgKwWm2K2PHV3w1jwlE4war6ai6PUa4tVIhhmDGFQ8bCYCzQxca0in4kPHpDheiDfZW+wOl0jA6WiiwyzK4FqUQ+zTok2SAFdK9gjw+CpTAlVGk/AKJhHo5q8HxNDWxFPD4ShPnlQybxw3U9bkr92NIf5uG0BdyDunHNmeS32qNnWeatnIA+TejKK6ZO1csXAIXo1Ers/4+zNW4867SzZxhvBb4PPCN4h5p2OzzcB0FNksGRW/DAX3CcB16qGHeEeF91ZMjhtTLRt5olaYfzL8uH0GeTxkUu+cSxscP9J6iPbw9XnTHLLyZlDeQhzeCMqdhKpAbYfIpK47vVrvAcyS4OgxUAC8jp+b25xI39ZXDjT/BlZrULB+cSOxIOHpjSyvC67wDe8pYoLyWEGj6HwP60q2vyEMXrBnXTRLCkhmY2A9e3RvEqBozv927ce3G0V7wnF857u8nFMku4WGkM6dwdEzI8NHpXRN8gh3c7a4WlMsm5exaeqgUwYo3MQr5qCzEieyY51fQhvGkLoj1TvNQSJUOW51Lz/jbIogg8okrmu4cpbS2YaAC4POwodVelx1HME5WC0b83TmiiomuvdAtooozl89BunSh+71XzGGHABUTiKVXzWhdjVx81Kn3L3lGz/4+yx7RraR1ZpBKmYgPW9ExrkmtwLFyznt4/2QtjIMPePcPIvm268pUQ8KasI7hILxQFg2EmKqT0EcvYO1u2CL+WaYNSL14IzrQF/mGEkIoB2mrcqMOdqOhngsYC7KDZOvZsF2UVIJVRR21J4fSlWVYyzqkgaumxfjUrAG58zMoLkEXShe8eQ8hXXGlnTiSU6emG9gPUZOzhQYFK2YrrTzWo5NEulQZS/Vlw6yWW3qLzI6hEsT5VaITRel3YyAc/0Hissiayb+JjrlGyEXCRWQeMOQupakTTiTVkcuuyh3k4HFwgCQovOlkNlZjGkQ+Eq2jErh8mSyOGype0726+2FknJqKEYBHVtuDe1EnMxoNpsSRHrckCCkyT9gYfBlU5SRaD8ostiI4KJEByFOzaUR3DZw6Fe9or1LNKk7Fw02q3msGAJ3wNtc38dczY8oVzzkvZbSiHoe88tRlTd50Ts8/FU5Sf0OPmmC/A7H0KA7iMDu8cA0BzX14iqITfT2VyQTXCzg5aDEbx2a/iPKkXtikfqUHETXHVeyQt1UEraQPne2rUFd6vyaYvL1pIAiOw8zMSMKFuxEKvxmipj5z3iuT7waNpiVbSl1bGs64VF6TTHSaGGfK+Xw2LSj+rGFVIYEYZ8Ooy199pe03o75xNOnTWeR+kda/Ylqv19VKsUnJB/dEfI5vxAh5bRu7nxbKWrKH3g4kB8gyYsegZvmLrKYvsBG1gACc9WEtzmotRWA4+28C0JLMGBv4du+Gxrs6n/4+6yHpw0n5OGU3ivdChCI+/ValE7HRQq/XqHF3pZSyx/Us+6wXzdCty3orK66xm+pGPLQxZc/iDB4U+NxIp/oNbnauXS2dbGgZLOus86u8w8foULUSmkHdqBWuRSWIyaCsNo+S8fLOAydYlLXHIBfbV4vGtbHb9fcu/6iQOqh4e6dWw1JYMkD/ca/8I4vJG8m1nzV4HuhipLfVSRPOMQOZC1sggco6rxDqE5MnyosbbFByVp9R5TwaZLr3YzwplRM1ZiRRptjH0AaPHtiRPayqaGMZOeKQ1s8X8YZqJ8NiS1ppqxPftbzWhuGl43RGbQc6/Ed615RuEJL12w4n5cmtHqawUtGpjR4aq/Xj1vIIQ/cakliNDPK8sqocTAB4cjqhMmchysPHfE0kNuC7KY3FAXmKF5eeC98eMhVUoe/yjpZpzXWGiuqoupMdCZ6U72pDbrd18FvDMGxPf0X2nuCFbcgQjRMT6ZNTCzPJ6sF0pTg3HyXZAj/pD1d0qlcYNU5Z5Pou8DT+B89BR6OF4ahcH6/0FnoBwcN70W1wK068+WfmfSSTsfRm+jzaRPDlJn4mOOOe9P0fLLdcPyb+nwd2m9zUQbtn+116IeABxmDcQrHHu3Jj43obmcIueBCN7MKOEkMX/ixoax6QNz2CiHIN0D4FmIKNTHIN5mbFKXyE2VWnBidP1tG6gnZ4Dhnhq2/HiHcjnJdYQW5lUdYuTDoIgVeQzlFi6anCIXyphQVdBbelU68/b4WJEDxyAdU3jK/SI/OLLxI01rOqWs2js3964+t53eLtZw2szmjlt9YaTTIBDRtjAUyPFjOqOCK+z8z3XuRvfJeiCldkXBLvE1s35BeJkmZ0yWRnnm+sCGszTvbdnxOxG8+RTwwNsnf6ah88f+Nmfd/bdXQMaILz1ByGTAkjIChxPyXMWgAbxPbN6SX/JR+msiiZ7YZN9SJecivIEEiK+xrMFJDIPFL0UA6iAxtE0o8z/UjtF9E9hR58NsODmEIJI1gbHyRNVGrdLPWOP3pfPg23QJgpTw+LRq3GYvhZwqnFNdPbk5pkOjoO4JNz5yGULmHQP1o2jSFH4EoAA9DnVCfIQl2qP7u0IELP+Tm1AFzi4GMMo6VZv+wm2qDj2ifS47f3s+HNFFEkfQG8Uh5xjaF3Q7I4laVs5zXUKy6xlYObAwIrKVAmbpmZSsOfugIbqaqD3xOADdY6CFyAGu/tif161XVRetg5FzwCgUWR3NxOhUB7sAPjcynwUkPtJVvcJFZKV1Wvmfr8cA+kw93rxHkuVBAEbGOT4cv4Ud9p6VcSi/yJrG6bk8dz7o1EvFL/WFDPuAY4OEqjcR/5xwZctoaDD4EqbefpqaT3xaGtna64IjAh5MZMz/vGu9wrtWN6iunu/fuA8YywbZAr5zaiu36gMbwgqJ3G6MoHuY1mEph5d7UAZebDXB78nT/yyi7dqKyeTQMnaIaNthXL9RaXmo+xEglmdcputwENl4l0Hmv435/7foaeTrH1hB/GQEnjIlu+Kub4EcHMRemNMUasHaS4Pc91dnlQ6UpGa6kNzBNypCKjnC8rjBOhu1lVDm5JXSFji/W+12LjFpRV+nWeqPIubiRePmkOp1/GfVXZpw2FoqXh+oPV9ODojlKoxkxLmoefQEjkzD/G3cEGPLffufLUx3LgjO0gtuXc4oHHljuXX8j2lQ2BIX+cWdwdHbmWBBa5QbWJiPYwCkFcPHIE4YZqLC8zQj8ztbLrpTuoRti/Jyp7N0HZVAW2JyOAwAuQ+Tkg1pWfuJE830VR570C3f3mBCB/c42E9jQ9MAV/cyWe0hga2yv8Pt9fdNlVIHwOPAWTc94LCjN4f3eTJfYNFpGlQaLxSrxlXpMuVgYczfzQyvH8L6ZiIowTtNNzZ+XP6hbtMR9MLqsbfr93WI9aRLMb5z8N4QHv/JcJZDR4cN0rzi0hJm92H24uv7T1R9uv0z7u5h2fsJv9fXOUtdaP+jv+DlrqrJ/LOk+HEWIrqsMl8wY4ibor5NCgLZ5OB8yF/9LBx9qsbY23DmPl3OaHt84WD3OY6HimQ5bLC6xqkS6uA7L+T5b3Du2/x5snILvxbhr2DtdBj/b/ufNvM4Ltm0dq9tTIF+qOu+0AYMKeNmryWYahdpAYDa2iOXDHVlWIn6bWpSZiM9JRmPgvRj3r8W4d0jroph/EpRQCl4Vnozu6a7+mIpkUnjZdA/mF0TTuKum37fBk34N5uNt8k/WpsdUHmmnskPPWxylw8ctvAMZ9B2EW9AL0xVB6SShiFZRZJU8jLJ4/8MPgn3DGLKz1W1SeTjuLLXt1AwH9ubZJvGF2ZitC7zaxAtb1BjbGDVpGtxxtlwTb4gzDLyzHXuXONjEfyZ/0j73SePjshocxQeXdQMpd9lVe97d6qOYrV8GhEHowffptrKd8V50vM/Z0/uMJ+FktPjOACyYa7L3iM/ZjYkTVzbxwr+zv40beM2yuw9eXhW5evjxg+Qavg7uMiRYIUv3NpNXgsxzh2LesGak74ZJNGJm4Js2NIVBPDTQ/uUy7gr+vA3fjcYov6X3HVrXn7ald4MnxIDnzmquGj0tdiiF+yrGtYSv+1pD9PRsyPL8tg2EuF97s1OT/uAvuXeki42fH226JkscN6Y4/OOMRkuvGD8+VpDM8+zQQmnKR633ebRxQV94dNE4WKBOQ/A3e4aWbtAHPOIzWEl40kPq0sd0rEV+WjveXej3v/I5afz5sEdB5NGnZXFLUM31zAmn2MaD7Vim8sJuznd2zb31zI7ZTXlr25rDtoiaWIOBo0X2LvFoJ36yp7XO57/GObm1mha6nU7Sk3LNu3Q3+146koUsBZKoZ+JK2GdwM/ZV80HknQEYN9h76vUM9Y6s9MTVtW2o79YG3izLmMfrPBldHq0NXuqL9FV7VsolDyWFKzJyHw3uf/IRbdhzxhvHQAiOyENTK7uL56rdUx02YMjD2fBuoRMq9NNcgWE4Hp5gEiTsuX5hrPAandfQ4B1DuntaVmQ3DPEU9LVjUPTSFe94xF5xoOYI5fZH8Eli8ZEuwdxoI8Q6O+0oI5fz93Zu+EUSteq+RYFAhxNwViisL0Ogbj16fve8iIaGENDhBJwVpIAOJ+CsSAxZEOCsIAV0OA0R0FB51Na35IwCfq0K8GtVgF8nAnw/pOYkeSSCbXJjA3ny/eRyNB495o7QYkm68EKU9d0wjK8ReMgHBhSWIVV+9Y+7bRgHbOiA9SdEvOhiUUPvxQfRRYLiDN+d0XNa0Z03noWl6QX7q+CuHfbfNPN3Qz9yDRk1sYcH0ki+ZmWMum14TsokvX4WafoHemwqTxd68trWbF3gs504TEMHszfPtMjJEosT9qa8d3tGOnh53vUgfjhqiTF173pCyl2OdXz8eqtvzT5dPHZk7BlrsdDUr9riCvfyDc0WPOcJ+6yx3sQTj3mVTVYb1/H6ZSrG9+9bGY1OaWAIR8l4N+hwo4cPkhtoohWxV2yz5/ul5pkXKOrbppyR54yG+hpyq93taQNumYbzej35RFPmjgRmjROVp10c7hEiVfgHhCEHdfr/GOkYt62RUMr8DOEwecY2rnNGRanqYdG6lozVMUHOqTRC6B74rDZsn5lLQ0HD0CMhmuVekqaOPk5GrLy4PW+5Cmi3XkZIIbunedkjqi9gz3jX2Efb2TGbXTX6c7eB9V2nG9NrFOXHhN9Rsb1wd9kjimxP27TU06Qg2jNExuPBoGbJrNYwltma3AFGnAhvxmWzqcP9uXE+s8WU8hZIuo9ctpw63p8Xp8o+T53uz19nyL5NXdyfW2fOHpgWbHcWUlEFJFNLEep5wtQPjYWZOjuZ+eeyXphjvZpEJkhhi7gMy8PeHgEtJpTGqX/iRbsNQoogmMDI6G+IJ4lRsTI6jINXba9hPJ9g0YAMF6CsygsmWcnRbj9VbMgOrNimS9TpKW00+pPNkvyqM8oT+3eGETSsMnR2aerEFcUEpofFdI+i3MviaSp4C5X3ABw1MT2tKjVT3UOe/mgoz2mXO3xAQITa1+zfCcvtheMLYYoZzsGA0atcLgy+5FN92Sf9D0yV3I92hxDVHiA3HnkCEU1JhQQyd/pZQDnOhkwHvaRwUdI3OL6V9ZZgacGYH5w3eq4BW9A6ENzsTVJceqNiJgCsX4RNHe7PjfOZLaeUt0DSfeSyz1PH+/PiVNm3qdP9+esM2cPUxf25dWbWOzlTEEPHJPwyNsUcGckvjyX8ngJvCutUPrlJNHZmb9qVSktJgYJWGBoD044uIddYi9QSPFJDgvgXuN0Qw+ADVowYphJDVYyqgmad6AUHszWKG+Q4W+bk/PA7A4ZHZcRMGG/FpfsEuMyq7CoJ0kSAe4HfN6ntuxtqBJWLhV5TivtacXtRUbs+aj/rCrXhJ2WnRXT68D1efSytfp8+P+AVZBUb8nfT3ZbbP66fsXaGRVvr5qLz69nim6D1T8OZt0TWAkxstukczMpL9c5aZRJ+pjenY1lj5j2AzoAuxigRHm2XFOGBteVKDVAbd532vC4cqxNZxLk0M7ZKrVUTlCXgaiUzt1jRAMqh4wlrcZBJHlTNEIGrplCWTf6KBtMZL8zpUHsA767HNZpg+Yofr47sPsWl0+iGVyzr3j+qYOF/2YtBr1+mazG0YbNjaM2zfnmkpLNeYlQDiZPhqgXZ7YlbWeA3mcLfVLX8AbKNktC1XICYjlX9nr9R3xjEExfXh0TX7FJXFXlKmsuU6EJLyKIPTdmSZvgWkxytqdNxp9SmMvRQgcAQNMCzGRYKseiMuB1Nbtb0il2Qv4FBtYrZIluFl+AKciYHylqj9RVRhgYdK95kdoXdJZE4X2luu3+gzaz17cryoeQ74EoFQropvQwCh87zoQcuDV1Z4XzvfobXZa6QOwI01UdsBKs4GbpuDAuOUd3t01MuWis4aqyPZq5mxwi8BRNGik2lKk3S62gp1WGz3jN1UALSfTdDq1nzCshKkcFi5f0+oV0obDlgbbc1WxzYyHKHlZeQvop6NAGmq0zF0VLnjmcKwMcgt4OdACrAdUp6ByvqEYOnDWZx6PGFRhT8RH2F1aAL8Slmkzt6dcAv6sQ42UbFTrwSjLJaN5UhnSniPuOLoaKFVth2DB8IjeRvR7EwgJni1CC8C4w3ABT9Ng2/d0R9bH6ITKskYUMKAE8vZmw6WysvB1XllNkVk07UZlrKOCv1pO3p1Jr6XZ2Ru3lumSjYyy1y+rvG0lyP2KSnoOMvkEkxNIGtvuONU3vOd+1xrSFLrJw+LlSwHYgNW0SzOqeaOAip9QlVnFMQeMvSiduQjm/45s1i8OtIohHDPOh4+KzphMCLXF0ZySi59kiVKloa/Xnls6W2HOcJUW+nQlu57fOIyRGIHwgjIw0LL90Z2Pb6izWdBjer6J2xjeEiVtuOcx7v4MQapOWyoMrigfKqyQ4VXkeL7JCabX5SAa7cOVOlWUgI92kPG7DZciFTNNoeqFR1158G8bBJCx9icUF6kyfeKwTHiJ5ZexrW8LKtC2Tabon+h6WctFSvkPKMu8adLjg4rmxgyjFXYY8EB0HqRx9yplXU4xgiz4NA+u09RJYHIsXgfo4VlA5JcxmmQ0eL9JBkkdKUs/NDyT7aoNX9W7R8R6Rl9ykiRUm0luCKxUkVIEpL2H6DjVQi9iqQuL97/fbthWuKEYJNW4wH4c5wE432dNUHWhCA+tszGR2wU2LEgDb38UjyR1ONQULyDFi67TA0bha09SbqpnKd74+tRgaTkpGfnueG+aMs/7l29F5OlnSZKwYfMGgxm9ho/s5Uqubj7G0AUQE+E+VVO4jRp8OpuuVdlCjkcoMT7ecLLfB4Tb8xxdcFSm5Vt1RPQ8eN4lpRmkcx11GR+vjQfQ9lwaD5MZDam3mWIdnHXVXXMYbkWxxEhk46lQfJYgHtzyn8Oj60PQue/0r9t+mOkpCh6/lI3v/J5i/Nku6UXve7T8rN1c6i+D7e1KWX08S6KWXKdmo5KnEJYJgSbxIyJR0VEPKJu/7DIkJOwOKJTcjgnOVFmWLimEg6sij1BQZKMbP7CeQDInoaYw2lgSl/TdYl1Qx4Y/3rHii74rs1ppoOGjei//txRmwfWh+w/6/f8X7D31U8UHH4luBXK/l9dHXuf2NbjpNVN2g0M5jMKY0VllH+FqdBtEA3QdSXPxYPp4zPoLlfDOuxP0t65xUppPa8j3KRJe09dGW36u15TuZwskUPnLhrpd9MnOssFnd6ksXnHb6CPj16IGH5NrgRbuGXl4cSYKecFjkY3mMAkpmCtMCJCczTnzcV+vM0xaDmkGyheZUYiRLg6xcOozkaPU9nq5THYINDA+rR3QsKRb3+iXShMXTRGhrKL3uraZo6jAv/4tpJDpPCnwEp+E0/URgqTI9cLbzj414CFaGbDKNjf9MPV8Zev6HwylnP4hipmM2K8/wcztLqyGeT9QeAAh7IQ4XunlLwCJyBU18C56Gj0qtUkU1Tkt1w8ZvON14JlbB5x5UfUQoulVa4pJgSfKaNW8wDUFhznK6zifWzsVXNbUr1byhhv3SkYwAb02/suszAH4YZu8JHr6F0Ys02RONybx+3wePiqBZ8l+Q7zIbTieG2s5dgRRUVR56Jgy319riwAc5ec8U8ntjDZrKBfQz5bc7hbOUUWLAFKLZq04s0okoJR8YyY+czrP6DSKZhfkCDnEICBqXRQ0FMLxHGSnCXUpli8hKBe9d84rPALpFnQ8zK2wrjlF/7ilKaaRYoOtAfv0FE8ozEviaTcBK+mCnI6YBUbdC5EwbBvWcNRvU0zQLXVeHOzPZOeCs0AOqzM6jXfe1zz20J01tYPbayFBBeTZnAYGfjxql2YvkfAEMx4e2UfThYQNfazW5EXUu8xg2N7o4JsUEiYaWKjChDzi0UpsW1eqR9ErIcE3imC6kMlwtQpEtAu8yq/QuK7Sg4Ji0iAGF7QG9AT6GyVWQv8siWozRDkJjkxspyhBjAIcR1tvqlXUH8BPcBCSavX0WKCPAzZ77j6WeNv2JjePoUZnPiSaLdL+ngupqifJ4KUbSO++L3P2GyMFh7NeH4EJEfNS0dT6BK/KTWFP6yPUuytCVA66Wz9MAOacOcXbp3wMXl5u5Qolqkk/7JmRy8rcGvrSMqhKvi2iXlwjRq5z9HZBWhfAQk42NNXwyO8zwBWoviViWB44BGg1d4Dt+R/KBlcfDFxMjBpIJMjBxKYtSv68/1uVBQhahYm/WqQQHngPpx1cWn9RIamux6ssVO04dfQhT8l152vsjIJ40uWZ4fnIAnKO49iLvbm59mWcExnd49PG4Axoy2kEAFRKHzS3gJXt8cJHGntQQLRmbxrjWgYVOecmKfjpV2hJt3ZEs8m4b7BRTSyYhKL5fU8JEBfexq4G7EipLgQZf8MrNC7szKbfJ1FulEZscbAVZPJX2KS7yt67yegwP6c/p8wMadydnbx5E7k8QOgY6VQRtklYB4eJWaz8Tfib2KOWzZAmMaYDaoPq6RztBNgseJedHDZ2q9VQ8WHstiAKvFSTqwqKCfAT7MWTPs/576yVrBMxbn3ekM3SN5O4wUZtPUPvS/lxRRQXrQ12UViLyhlR1EEge1pTDaiN02oiSFGG8kxuClmhlTrEH2BUXZLhGBlfUP3Vgmcw6RHa8J3klc8tHLY/T/0liurCbfQCS7Yv50+R8Tdd3I+K54fYSJBnyIbp6gtpgXDjUcV8a5Q3L85oxQZQLokHhoaLbOGxyqPT67zGyjUdCvb+zP9CLDlkML5owdRWPW9ngxB5X49p1j4uzO4971wiNALQVpAr2AAWzXvtoAYAit5WwTSrZ1UbZK10NXYoMOE5DcaVhDM5I+c5Lyv8VR5EEnpXYk11KhsggJHwuHOtJw8/sxOq3kGypKzQwNg8RwqNZp/hn4fkpJ2PXYoG9NgOcDmY0vodppckyJgYK3j4YG03JgSqr/RbTxJgN9bQvMGscEdxsvxq41q/6X/ugHyOR96TBXhbpeHNiMVosCrRoBnivZiKf9XHO5DF/zBCtJz9J4VPGyTwMCIJDzFKxI1yeLV69I8QEZs3KUvMS6MRBdqq/Gwy5iUUNTdzy4I9/2o/1rooYu8JanMXfunILitQyof788or8Bf62gxjBUfVu3mMZ5wIgHlrQqX/Yi5+rGSvl/gCTsT6Nz86E05GxnOiGh9P0VdkFotwruuYBg6v2GlFvvNmijGNkJFhkRPD9H8BbjqebO1VNaEIw+rIgD1PLkgoskRabCFYXl/leRwxKlvM/3Nm6pfJaS6HSbCWK8ntMTYIRllaWSURfp657spwBTwjE8ec9dI9rvnOOmMMK1fdzZ7lrRtSO11iRDI9+Vfcyu3EUGmqqXeDAFBQwuID6oAdIXxZDGJPUHePk/l3rET1ZERuD0E3BG4DN1Mf53RCbAEu5grqqDI1k6H9kD09+LHdCLAXnGdjSw6chxHTg8J5Gj1CEH0ftl/JliGdEPFIIGvdXCaQaQDMXSqTQE+oY1vjVQBSjaShTORZuRIN406Z9qqsOSECi6WAI3+HggVGbwPw6qX66M27k5lLw2lnZcSLBHD+huO26kA0ws4LzHr6tZVQhahTRAeNM4czM3GwPOxiPXOAkVGFAz+vK0ohM0n25/JpB09hpXm5vkAhQeMt+9G/xpA5aH7v1gBSxZRSWAGaySg0emU4AxLFoa7bFLqyc4v1Cca/SpBEICK4hMLOMS7FkjLlS+QGlCps3Ki5XvC2HFwiBpQigGcuFi6Gl+JBfRCqicgMo+03H08Cs2tI4dcyw0znJ/UwgIxldCTbcDJYSMGICq2b9b2AvsnfS1exR5FYcI2bmbPBsQ7YuTJxawDO45UDqIIYQ1XXoF0CDzBjfuZTIP2eDmXM70UaQ82vsqlLBAB1KsW6TngFjsLJ17PJpnBvW5cb/q+d8YrXM71w4ai9KophikFGUaLkEkWGIh7IDjJIdKlFDMXj8DO0y8T6Pe6cAXRx5MKYFa3WBPysRfYk+6e8sFNeU5ilnqbSU6CaN5SYjGzaIdZY0ym21iwGlOXja6oUmXLyVbjG0heBDJ+mK3p5s5stjGXC0qrWZ1hSi0Zya/+28FXpNBlyD0IcUeestvgtg8jYH7wfzn2FkHXpMTc4viUrGpca0XtkbthEChjq0w9+6GcSG46R4s88DgjvtFfBtqTB7zYuA1FueAf3pGwlXcFhBViZFiULsCDMuI7pt+myNoA18SkQKL2dhmZWRvp4d3Tw85wqiTEHT92LvpkNyW+UdYMapyFPWeBYE92JLjhZNEBrcfIb8uCoWeCcAD7vloT/qBtX38pzvd1LoZLCKr0583YqBPPlTZbynaw3Cc9QIUlZ8CjpBUuB12zi8EDoteNHaGEFq0NnLzPG2jtYxuRFzBworrtTBiIZOd6/ekCc8dWCHE4UQSWGKLzUIkwrdM5P0mogYjVwmI18PlTL9RadOqAN8CpzmS1weePKdFrGOpkIX3vuJNYZOpZI7RubGyOyn216P4aVOkvU8Z2Djc2JdVP2tH5jivucEhpCipPnhpgnloflENXld1KgbQU0I70KXRoAnTPruSbWO8D02+N/bE8E5BzMJajKXjE1wpOSXgUzgayCxtZT6IeL2Q+P+4DfUndMwYwTOHi6rg3ojYaU7d+t4fAo07+4v0N1aUkXRH5A0sewkjOfKEb4FxuRLN0ms7ZyU/5cro24oCwqJwOlN/gZdeEsxc7aBuRqpRP/qcI0HxIooRhnIb7KGS1Z772eV1GXWPSpleRPmWTKdmkj9Lll0dqMWMRQKXDDHA9SK00VWzbsRQ6maC1f0TladizO8Xybboz0xRTPYTbCckhucYlnv+iikOPW1yTbliXnamGkQktU5z9I/iHEThdkDu1xjU4MIatyyBlLM5RqHddVWZtLTNx2ywauqrWwHhZ4pFT+0WYcCSWGepBOUtvZ8qusKTwXt/+b4QLPYU20DIZ1h+0ceDmF/SQd0qJJTjAitrfAco1/bpq8HY+IIgq1CT0zgoXDWEp5FrCKLrs/4ZjHIZWSgrz7QgXhaIeVzOmEWrXM+cZjn/ZVTmrCRDsX0VR4owCn3K/65wYxUw7gyC4g0yVwTPjBjWfYD/zEsu81IsDzTqwHJwKIpfaxM+FNakMb2GEhyNXSIDvNW+yTwqaHrnzLKxhwQjIREDKaWw0zwQas5qWwsHWV6/hgBTSjiWCADHxE5TGum6IhBUhGNh5C3Dc9xWdYIBK0elKarADefULj3Dn1ZBhLcok+OL5q3xQelYI6BUdROFfZS6BbPGxyCJdJW3U1OyuBBe0SlPGT1FHWWjgKSmUwIMB0z84ca7RQgTtuIlguAtDP3ben/88UGXv4nJgFK8EDNfijeJFKfGIbHjB6ISAPAspVORWvFVnpZ/f7dp55XLHqYCe4uSkyRnUmfsctierXBUAnvzq/QK9yA5QmDOMRlY8pDBCmst4D7OFZjqf6YDmc36SIpvldMohyVK0sCdLGRMVqXpeKCLIsT1XaLxPpPLwoBGRtxXiiIbwcHn9kxfkBtcnFhIYFywmV/GIhAFRCrvsgE77ZSclEe1FgQEXMEF5wdWjaA1eb2b28tLsUInwdxb/HmoOExleBovB4n09tJHqaY1LjoAtfFxPnuICX3lPsGXSYYwXHw7K3x298mtc59YLL+IrKqNCwO0Pb53A1AAHUGWh+UjitI8Suk/nRm9X8tpWK5P9ARc0J8AX1/5gG4GEQfIr9stI4juCIrPxlD+vXAk6henpMKV2jjKT1T1qrYzrqL4BEjy9IKNcaAQlUsGwBqI1myfhd28D2NrQdYAT0RxfxckDe6Qiobu+iHkLhTvsvgcspT7sdoAwliTE3805ngSoFweYZ1KzRLCMW7wfGTDt6ANU9R1kWJ/8Fy2F/N/k8HvodH5/c3fQgD0zDzBJvdIGbch1oJw4YMJ5ECBDfTtbS8AHdW98WBKfUZL042i+OrnNe3cAtW+wFRKEGAAk+VvzSAjElOEdjUIu0hvjCjlYrz342t/uLoeDwYwefQJDNB5TfDOnkT+IV4mr6y9+cu7w6maBhDf23HT3cz8RuO1Q0kyGTrUI6lLBWYoEqiTC3/+yzcd8tSutdnUG0SKDXaOitWyIxIhuARtGtP0Ehkm7fkDwJEq67tNFl2l+eD6Q3BsTar4upyvwSwEpxUbC6HFPAXEmtT1GD/08Fz1x15oA36pdhuJaAvVb72nlP0CIMkLFmyowpOCr6z1Tx+J6ncV6jCH0qvY9DWBbWjV1GYMf/kqDCqBSw4yjadvHcJz63jAX811DobFYR4vj7V+xX6TfDxAaZBgU/xbbOOnp0fLGxcuBktWwASMebVowH9oKKQvOHWkftJAJ4vnse3N1QxUqBcsx9Yuq7/mGDwuzdZLp6H2/aBoDUGt43pGjlYxyLu//7YbgMotTeAv+I8/QeRp5Pva5uNzu2AUBZJC7VqCNN5QnovNn/8tU5MEMsuBBQ/tLun/mv5hAUwwoNu0R9SJNbshuVpM225n+2WWSObbU/bXMTb1v9JM8rqcU4rZLDKd5JSjdX5cnGq4qcESRWw8itEpMDaMrqxzOkggI78a5clsgaDj52GAKsBP97RDHvnGz/nPhl9xc18tv33p3c/6A6Hc7dM8i6keg5LllyYpv9VmkFcJCHDEBtB9yY1xclMBUy8YKb2BXNivhvkgYRmYcq75ZLpBesDLzJGMJOg/uITTeIcMzegsTJVZoHhYt4KVtLZEuKan9NM2DQYW65af663yHKkPyVLz4cTo9oo+q/Aoj9zCS/jnkEDyUREwvJNMPcobZxyfPJqKl714P5cwzd3ODwn7zesWDLkwdm4/J7jVrX39Any0sJiyG5orzrd/2c4YvnM1c2a5OzRZAFr9uFuEvX4SR0bDqzdyCGLW1a8WW4iMzhrzifwbW6/cxVYkyffciZDQjrlI41ls4N94/NhEuSv9EDcv2CZAEC6DRJuQ4md0isEXlyxo73QuWag9KX9R7rlph6mePRzW6PFouCt+OBh2z9J3aidH7+6wnSeNq7FT9PPEV5A9/DF7fiBWjNL2B1kB3muqJV86gqCf8JtnoRMsYPqXeECBPpTYa1yiP7RLV6SU75wHEdtkRIIuX2DNt5qUjC2prCBBXTBCsIdwPIs0sOYFSjyb/ThtgXJza0esVxe08XUIj1JRyIlZnLOzNCmVssgv+JxGVHx9aEXhHLEUTkaimCRkll04PyqKMpaH98cZnZxzPYoODf/O8W2I72mF6LAGanobNyXa7o+GXCCDc8SgY0+fNMmEBlLsv2jX2FOWFeoWMK3kEa7tdfMQtUZcu1np0hEJw3s1F2GvAiE3ECSPn7jCpzkLesc1OueAL0+vuv4MGJQAQTDaCbCF6tSDDSzPst7+HKdPs5scZ7ILa0cXLgcrnIP9e4COzHOniOvjVtqldMPnMKT9+fvsdJD3W633xzWFhYshJLGUJV7PYwSH/qkHQU5jJHGc53v8m2VIPXGIGhEj1F3gjvXRRHt2Ux41/tzO5tsvJ+yAI30tCyl6/zMwz5zMk5MvEzLU79ud09Rthn+v2JvqsCd/35KbH83fUQbjY3AIzOeSQSvVt1PiDxh/DC8kGsC3eN2q7idKVtDhJT53mdOrpmRqCvv5nmhrOPt5FxFmp1Oe4Ar4LD/kOBVZFu62StYLQsnmOQ4ygC+UlUBQLqyQDFRwUyUm7uC9QZh15nvLG/513HjV+Lo0b6nlbSbIwN2yLHKNzhlp5Rhtp4yS+A+il8AWuPvzEQ4nwo3/jl+u9TnO2Q6jQiV6G9edSNTIhhAhmLwWvnVGBMtk6D071NZDHjY295oXFHTW+KRIh5XqiD+96WeJDZsxdgHPTeVz9jiw0jKVppKbu2LUlsDnNo+SDmSkRNNYergRbs22ou1nH/+V9M+HRFUqFI5Lbe1toXEZYT4veka5li1EbxZpB+usRlY4+IrUozeU5ePDTD1x/pD3j1Q3/3xl9wQovC2wwYrGHRo+hLRM+FkF1ahqVNJfl6wNp5sgtlHYe1hRG6lxJAIF8ek88+FqOsTHzt2PWJctFubO2r4odzdhVYVkFkzDbZ7QB8AqtA7Bec7LDBMzLixtfXiUfLYR+gZ8R4FOJDWiP/n9mmmFKFVUXkCDMdVPfFCyeM1fokEIF6wK6oNCc4p1CKq13E9sKGxz4AUTOoAz6s7sMqQ40qSHg8o0oyFIKI89bnGJH8V7n0PF819s4B37CH6GXupgUhqAYnN2xs0GuLjHZzjXf+LW7rfLpJFR0Voh7pd1AsogW7JNARumPtiNZpAcghPWCYK60jE9HgI1bXimNkqiSoVuizZ3ee00obStpdRR3bkdc3SwzYTcsz3CCnbWp3amOyJF4zJ5CK66zk5PNVTb9S1evJnVguLbWwYE1AxQYF1CFUGgyBUGoYkcfwmmakzZ/WBdG1sdCtuc1kzI9ENbZXHuDaY0p8mjGJl/8VEaxryQfxX9x2/5X16RYGHRvAdoNvuq3D1vhXAUY1HIwollGWjSDEPIEapMAq7iC8tGjsV1f9FNScgrK68suEPMrk7OnU7W1VKDml+0ds6onlMlLQz8LtE2QaFZc6z8UKyxiBFSGELUZKlaVQiJmqMti/aJ67Wt3inu2Jx5ZYUhliwdNTHAWHtTe9r2ZVdJJD0uv0i28LfzlOzVW9I2i0izs73yqtMv1QozjM2jhSE8bUCbt/LiXin70i1XJWzJTMDgdIW8nlaLsCh/rkPHxaoNtoJ9IKIDsYYNYylMCsPWwmf4Q4rKDTpomtVhfHq0g8K3j+FlhD8kMQsXmS2Q7Hmd7R1MTgJQZ9Qv7e2GeYUyAtGz36rVOr7IKpPo7gSOQwa1+xAxShubfuk5ks32gStdXvXC+zAyt/vNwUaoSmdNUI+XhQZ5s8Luav8wAE7/bxvjVHoh5s6wbmn7rx13PIujS92bKjlnoNFup4yV9iSAdEegj9tJcdFAYEt2F27PojusSCpypQ/TcVTyZoTNPwho6tIw/XEo4cFtR8K0yubywV0fEH/4NoFy3pcQLkC4lLvvnOx/3OXRcer7v4cG6zGpOxs66oE1yU8Tjkxky+D4wAwft8jh//NiCwPH7Vxj2Fm4vbGOettp8dJelDVvXbja053TO3YZ/Z86vshs0iAR11y9/D5PHcqYDLY2yD8VqlCmxOg4tSXyyz7QG2fSsEdFmuujYU1693y/Ct6KZ0gI3F1frhEscQ/eOG4Ub35TXeu0eOeHgzvklTJ353QOCnJThIzQjzSy8rs/YvhTtcVCbs5Bg71o+Yh3zsrhC232bneHlNu9LlLsfev4ddNFbxqQsNaMgAoO9XpAgtZtzIKD4qBDAIGCjaAZSbPwI0aDhon/fCa1f7nXWX4rN1EUgJ6SNFROgkNQkWRkWjH9xGmtmhoH8K7ZHEpHjhN77T3ju7cChKUCa5yk7RciSgldsJ0VbOjCPmE6aj/qdQpRdzZ3vIEYO7V7M+HPAkqF3PWWihSMfVFDY89juSq9Z/uqCOVF0aKPj0Ju1xKbZDN7gLK21V8WyC/hZjlDJ00x305FhQn9DzSNFodTCbxOQVMCy+k17eIt0rgBmCULHyToMX2xDcr7NG84PyHC7yLKUmcA6FgHJVY2rGCqij4+thyZSK4TZDZqQz4TuyEepBB9T6NmqGI9DYdzams2dT/GiFPm6s4Gj/tEHNPs4HXYSL/AwIUvaL4qUpT0LopiXuqzGMVjHC0HgkTxDY4DjtXZCLWzY8uHUzfK1MsxBk+p6s7GDp2fBtrycZj6yFvdTWezggluUT25I6SKEToKYwOuA787jMr4z7tcBUREJjD76TXS50iEiV/MHNGodvr5OgkV2EVy5K8vu4aDHXkS/kRY469+HaQnqlt26w95PooovhDyi2P+rrJkmweXG7LaZaiZQ2lMCf7PtMz3JBOn3Iec6PMtyF+pCfmgZUP6vVjpTXX+pR5YMOTvIT/lSHj3UTShuW2qUoz5pIeAOboC9aeZmvjvGKv59b/F59k6OHJSGVDMG7f1eyWrNMdZVpknpVYe2QDrKtWAi88LSvOMS8Lc2QYIZnpFKsDGhgxbVDxYjogSLJJ6JU/cC26R5IRuBDCTNFgvk5BXoPX5yzRvg8umx3ACjKRRmAZr3TjgszzDs5Q4UOkoxVphoQzEmtAko5flP+GD8foWFw+ukYZVJ1LBw5dm0dmDKBKlWL2rxwpiw5h+bpnEszoa/v2VYhE1dNDiCr5Yz8k2lPQSw0AZGHkn/f6JaGFfzeeGHYyEIqGrHxhc1HdD9cIcCPrulxuBDIYSYq4wBHTpGWOK8sj0ebLAKqvU4IMqw08hmEPyW9lgC6FlJzRfy78WGmQLzXjxqx9DCG0IX2dkxA884oVUIabHVVv6vzBeFgbYBRjepalcT71CADdCzY7+ybqG9LIoTu9LF6aj1seLEV4R+Wjiw43Sasv4D6zq15jbeGTuQGxkUYWCqa8vN4eCJPEieovCHW7gL0rZAPfSGsI6h7mJu11k5QspShtAadPKUBhF5mHpBf2RZ1q374zrkOpIeqEbQ/14oWVo8Kue8QdAv6BkSkBPDqVmsDc7WZbvg/ArWaIeDl4pk0CsfeukZOR6aR+Xp/43fuIRUBQsyAQTJ0UNVkxauhJW51Wl/N7LTNsMo+A1gupbPxrrjQl1LlqRFQ+LY/ZtNNhxdQ7SE6HFtLZk0qiyrqpyi3AzLkwEkAweRWHbn1C1FNUOo2yB624wUUTU6kDVD5FJwDvb85tisAvQ5iCmCLqgE8srwn/qUcCSEeRSU3q266XfM+nem5Qhajz3pSbNXhlJIRZKNsUMFs+UERSnX7sBgIgLgSsGCH9b6X8T8GjaoC6CJFKTwOjJe4AMxgpwS4B0/6YhJ/zfCu8emErIpAn9Ipohepq3eRHURu2F8QaAvVdfD9/j91eVh8Opulh4eT2kuziFvXOm0FNv/WXhLt4dzwiM6HhEqH7oicDlhXgiFQLahBnbCqUU4YJ1bN5sAJKu68eH69+fzrR3L7L4T1XtnMYsE7HwT2PNIJfGTAClYwWJc5pW/0IJe+sr49DBF18drHGCLPyesJEbTPjcGTCqYKsRIin/PbVAquKdllDZ5oebVhi1xlYbiOzy9qYPGNWw1RbCXTQkrUmjy/Rp3xVvWAck7OeaqCZEaqAXLwwa5p/yQygPUstKGvklrfwUL/dylKWMcieT3EqQG4kkkqV8ywpzUUKuohLY4rYo9FJI4UOLgH8VVJUoBdvrc46wJnhyC2pgMj/ECf58YllILJHsJIRLTCoY1eGoDl4dWnVoNEatMagxco1hqlBVgDUNpNBoyZ573v8KJCXqN5Ej4mhWnq0+T6hmV5QA7S+O5ie2YhzW0wORGng4HUIyLx9QDNj/UGB+3kdjlJHEB3Dg11/NCPvLg3/uySAg+FxxCPzlgZ9oW/pfy+ibqRFf0UsFz3r5lfViLvyXR/uTcE13xKYKnkg+0aWCkTae5BbJ/PebrqDjiiPvzWAebKCSoKG/f7gcOqWKS9MauJWiVLu2UJepct1fPjBuV01TbgRL/M2+d/GfEaaDhF4Z6xIBEcZSM481s63Jn5qAxrlktOcRNsiZY5rrYvOJb3bb03uMn+vGrMmdOd4kJsCg8N6MWvlPciD+rqR7sIrMfEPjjt8qTH3H3WpwfEvWQbMzdgInSStaJn2xC+/puBvyHl8tD1B5u67ovMZ7HkatcTQpG67qRe5xSoTEWu88zFOoGnuGbhsixwIwPk6NfFfSWYzB/rQo96AvU5pQgi/+0gS8Iyw15rtacjTa9q3uOgnhBZsNOonSMnHHYAuIrVt5TUtYUtK6PhfY4t9hhsAXcffczwlHKJFEobf+dpGwRPnlZ+oBVpHw4yH+7MumI1PcaSReFM1w2Dta41Sh1ni0IjSffGHxEspItT55zbrfcGnJz8EqydLuZyoVPkQtJMNqKkaI8mMkgBesCQKeA37BUTbpWHcqz2+HkalLyTMoB3mLTS683f0kkmJYBqMNZRRR9hxDdm7goRiOdVFE9E/oIDVVWUHBwkAGADyvr/koL1P0AsgHPa4OeIsMeFFz4Sh+UHcHlsQw58uvhTOjN47/gQWdt+DzEDxPVdEgomfha0vYLx2EP6aRTefvCjj2183jotSNN3aPTF13BqXf+uPgvSPVhqzuskxDk2i87kAeZl6865qa5y1CtL1IUrmHSeE1+MjWW4RqkWatb6S1+fuZ59gLdyZ0Z0iqpKRb2kr3lK/y7319GdBIN/y9MQu5aLj5+hrUcjZW5c1sknRKMJeLZ0DF7JNH08XezylZTZXMhJ/kq1Gl9iJcq+qVkRh99xRPSKgMxIwF3sXsEMMsK1JsMC3kO2xDnxsU75DwiPlsggTA9baS1MxgX5y4ctelpOts46Af6AoLN25HLfyC3gvHzZ2YHk1IZxH18fgpgSHvMpW5H/j4bAq5+GFBCCw11FGey6TKNS5rKGF/JzeTcwb6qkS8gUI5oksznDupOhIoarYwLF8BRCTntsTt/eJ4Dyu8Vr/0ocvPRQlvK+nGgs+PzCUMTWLXLaVkZP1jckNtcNsc1AvpUc4D9/jit8Z7LK91rqQ/aFcGhotZgze7YSxQFxkEnoT6aNO/3SV59jtUEhX3pRG5Vsx0KxeLMD/uRlVF0zgAE9z0UkjaDZNj06jIRqU6gl1sVWopqFH0YjHS10sQo0yORiRus/lMwetQX85tgHUzRjv0WCA8cZ5ByddOreRYLA0xE1CllxTsosSI59ZtdYkuygxV+RSQcyX3idwoNshQzqpGYSiq2KAo8B9OQ/jZP1LejtW+SWuUDC9jlCH+AWRcRiA76RB+NFxxrHZPwTWzMJMnIxaIaol01X7y5jnIt5ythnGCK+lgVxPFw9WGyNaqD25/qMF9/pRYzYknUipw/iyFyLZZyZLkJOdYfpnQdSjbLE0xCtRbACK/e6V2gNc5/Vxxd2jni14HN/zdMstDITAOshF4FO1MUQHSNfM1AQHWYPB7sA4QS0GyoHspg5BxTG3RR4GEp0nZGZrkgHf7HUy3RAM+6kMH0OI1SEJfaYRHhywtFSMjA53LleGcAs7W96LRsUaC/xbeYmobrpx7iwqHLJxFIsdZNtrWgr1c1rwIrZfA3IxQk4qICC2X/mW1SlFUeoUoPD3libJMmOQpaHVOkDTXDdsLpMzHSZrlvC/8fwzxZERNzfZuPLXx3dqePd7aSlqBzqanE1BCEQXylWAgiRocVUJVPvRWW4e3z5ysZ/Xpqfv7VXDM6pLjOdwoOIXtepFRm+edkhHdezLGNG8Z+iW8yw8NtTsYOaxY5X1AV91m3hhn5Bbrh5O7m0rmv3vgzXArtnexfeC3vD66GRu3bL1+s4ivt47RKG9R5vQ4/v1Rwh6NNrFRUaazLVj21zT0pdx/+PgMhheu01gXvoYiJrubHymAYpklnxd6LRG59KLDzfoxggdSJXX9o93pdmwNRuIKEN6C2V77GZAHtkZ8isgN1nOuon0zNoXJs31x8gAbk9u6C1q6/oBJyHwfeT+zC0eMMaa7RGUZoVLM+ZlC+bXv9ogK3s1mnAI/s631kaopLh6uQYs17cm6OoGxa02JcFNRfF0dmSCtUDHTfXliYWytK0KxAlLJ1JpRMhmUgj1nKD0E1keDWlVZFERm6Lu4EzmrYn9DvZ/cc+0Qf3Dnjt94rNFKApXzEK/pFRqOCoGcKJC8cjeulFQ+p4NIp/j2S6ZCFX1zDMddWR5bSPm/AWGQmP1ut6eXvSDb3xNZ5rhfUi4n14R5qJrNlyO+XX+o02ypG4SVSvGzG0NvVRu4wGYhNpZvNhTJ4FVDnSMOPPTK9NIZpZoP9ktt1R7R4BZNjg/ozVdBhSfIEqVMwDeq67SVrnYaZe5rwpQKNyPLj4FVc9+ZGyPARiTs0woPFU4ojHFiNhpK0sDHpkp4XAYXRIHncp7c8q/vpm+U1wuxmTVqubBNG6LTyIim1c19YPF+P9UXx4Qmf5aOIsBZsPtH3oiIfJXj7N3zbbUlcz4xAmPiumua0sfGjIVCD0MrwnDZmKYDXiHMk8fGBQPg/bHWYn74q7hn7w40qn/w8YCo+z5RUb3/2Ov4XYnNprVqk3qX20yq72/nNJTnDQA7yPbvl7ESllc69m5ZLSVbcA70/XJP5X3IGt0BQ0WqZ21B4QvA6jU/LOVZt/qZ7JEOiGDN0t5GQmpQNK68odQi+8tmUJwx/0jO9pHXNg2qDdtOwtOz168U+u82pJJrYF7THU4Z23PcSVR/ayR6vSrGNUFSmFhjD/BbGZXNoyWRmMbKN8CQn0xUI/W0zmrXY1ErMOBaWEQlE8klckNVY596DdXVU7Tu+DgCdtRcV9qn0BSRUfXze4To48NV7Dp4fNEVSqUUWDzQ0y0OQeFSP21Kqfc9pLcyM1zcrX/Rp7MuL6B91cZDHlxtpaPGCC7p1z1piGU/B/kIpGHVZu+SngWeRlUq6BjKLfN2uPdON9sk33wqvRWeNDH98zgaRqPGP7FM64zV8MSyjKvj6zLuEp5e+EmmkX2SLZwjcIvHnyXkx/1nKAMvT6bOs9+J3vL3oJH3mPVXRO3Q5aK4TBCD/GPNV01WSrnzMvN62A8R7TQypncDERMhNkTbJj2lnGDnypJUwxLo81PiJNTmL9Vyc+o7LSaVFm83vV/GtdCdt6HvJAxGuY9dGNe22FSCCBslq/jDKp02iM5nwelBGk0KOMx2mohrHzeCItFQoxygRF91MqeqGTWO8eZeL6Wb5oKlJD+73XDjTZ6rhFr9x4Jp/DqvwVsjc726fm0VWmh25yvQiljS2qqZuL/PZJm2WLM8wRSmeVmdFcfNxjp3hZuIQCoyDgIl8+js+4Vy8u4xryM2HjN10lALm+3GA7SJM7ZWZYG2uN3exnon2pZjRsUZ5QRKra6UD4EqMz7BrrMnN5ulzvp0cpZI1t1+CcxGbqeDbfP6p5dL3yIhvVKcxV6iEjRaV4PXkHvnUzH784W6AQreRM4Qr3nv7MleNCB+NjixeS74jMKWuISY+1jt30dsAt7WJVpJm3bsDVKMBXre12gK+uhV0FO2L1339+l7gyxcmykPrWIJP37e4lH34m1cbBSt10xfRFg6DaQxskftw/HeKCuNpjFl/0UmiN+KDqxI4aoCTodnhRomQeQOwdTlNbJs37AazeNmi3HlTNolNOf47LxWYSCluuhYycSDE+073/+z3nTHGeoEDTc5vtxSsc3GJe5d3pWzPyVbOp/kSrofBzfhnocuc11sDQmJiYZcUmzelySzKA46UElV6VooxPYaOpfkxcpw6Zb3Py2wsljHZDsJX7Ncjqc9GWUPNr2YiSYLhxyXJo5EjPBHZ+ZMN2E8hvX61CT1+4WlVou5MrJakNetjcpQOPOJ1kq3bURjeLaHC4NUPEfTWS+IY1XL6LDj61M9uYEUQ2nwASNHFts7YkfRVjWhbR1NR7oNsXHPjE7hMeiJHj4FyTaSD4URDWLrzcMvmo8PovNbYctot18MUDVX710EVTpMOySwWCrwJuBed5CCos4PepkkKs3ayjNIKN+qUHhOch7KMQ0z5FFdFHSL4UdAiJ47B3Us5QQ1DN288AtbgNVVMDxoZFbt9u0UVjJcImdF+Pqk9g0NJMGN8UMl2XKB/nj3KTv5wwVw9/w3bLzCCU8SjgLljyrSzNgLl3HqDY+/du518GwjbdWNdvtkINYySodRUgr2k2e3hmY27UjWjceVgcM6WgqNzWKgPizsxdT7FeBHfeCTs0qBmaRUE5fiZrWqrFTwcBNDQ4fcVfbqikZIrlZSZx+4I9Eknx90FwlPEDEPeGsWngr6vYIYirw2Z+hxa4a2S6FAhZXDC4uWpbgXZFS0HUREEoDqpC+ObMtQBDdjQx9vbWqV6Rj6hAWwBg5YYgPPzoFHR3JcXpAVAX/HlREEk/cSeyU8kt5JUgw6umiyS6zB+e9tWUZbJlkwZgmMhruBjHMawqOjNKojd4gq1WPRXwNhnGCcRgHOKU0n+7UBkYDeTnRXQFco/IVPlczw+szxCwSHBJ68XMpYZH8HcLsgtAMedKgOVRJw1FfUrmAFYxPYAjtB92iLq9QouVlpzKM5fXbso0ytWCE6smcOkUblA6vBwcnNhbFBywFYsDI2iSsRCj2kuPDTHgxXYv8o2o5jQ8o/Mo0tJ9piZ3YkaYfTcdbJXZECQFtmGgkbWPeys3vPrAGrpAAJpimQmWvzxJeySr1oSPiV+1dQuZYeHc2K0cuIi7jOOiIQjv53lW/J4R9kPTi0gTDGYNZ3c7gZVZDYQNjaP2KRsX/GdOlmHObbD6dCw+6WXToS1910W1Orfj2zhaTIMiUx5RDtl9y8QSdXl0mZmE2NyWNxig+mdmza+7mfc9TZWRaE+ey3nb3Rnz0pXM7wMZg2l0Z/d7JuCugP65TLOI0jl0Iq97Ytar2856snUykG4e8QfR2kHcjBHLjGmA6wfAk3aw0Kz6HrmKsx8je9L34dUw1iFHsdXDtKB9aO/5GdHrLh5/+CtX80uLmrGrRtvAB8knErenOpE6nujFLr+wV6LVxNHtl+jMxh4LBbgFbQ4g+efqPkHcZHa9gYvdXq+mhD4yNjMJy8O45nDm9fTgu/6Od/poEqUdtjbVCt8RGW4MyENdmR8aOIA+ujJz7pA/28wV2hJGLTLj6JEtAY+VVo246pcxfvKN2J4Ed2N2E6WhD9+4Rp1qVgDZOzq5NTRWmQxB2nnAZ8Ek5rqd28O9oqBjRbK4C931VW7ffdRChxkhgOnLo3IU0ic1Q6mRpF5aZRT5mf6vMItP1FnGqNt0d1/YeQ0sMCU8ZsDQncv8JnL0FHVq1Nr9+daFU0f3LUzyqGqbJXkHvBgW3Kh7WStm24JDKajbc1NqArCjmK9FSOd2KCcfZNYJ3tl3ZIVshfSelNtGWAyB5rKvBXDlxUHYkvwIDu+sU8PNtylY87kWkm9ojkKeK+gedsCF+Jg+aO+S3FH0EmNKUDknYQJU25deVNWvlBUlNf1Rz+0vgL2Nr/S3uiSMod4C96aj2yPdbeQ+nxm9H8w4bJ1Rh1EvKv5GmauqdCwV7u9/uV8nDShfwhMZo+4xOK8hCEcXT615j4Szknj5OGo0N1Hy7naHRLlvGJeKXUfp66b+Dkp1wrdsMEhcK/lShV9/iSWsSE1SKLdJfnfJdfIjJXkTriaNt9N0O0I+Yaf/uGFH8nO2PE1OOnQYtFV/AezzYgY+Ms55dkuqOw1eXoe/hV16LSi540c96231ZNu9juWqqSG1tCxj6P/bnE+ve1TdYK6SVX9mlEYrKcQa9dD68TWooA1ECVdhKbUIZVrc1OVrI41BWSJB4vI/5qNvwJJdT2Bh7H5JctTBCoDnpWxw7PMr7CgOkQxv/ai2HnUg6FAyLbRrOZmahTkFAS4VAHLFx1YIeCgFKo0xbpESgZJm3FXSq5HmgEerw80wvmkHm36WqbDPC1vxYtt0JXbVB7R1iAIHKUaDLN/xbNn4uDJSP+O6HXAGTkTdyUgm0tIBmq8wpYga5CepOZ8phHyCVWULGaTcDH+tmUWny/lpN6z+bshZgXUiEa+cHK6KogDoxmLbikyEhodFToMPfQniBZmC0Q1DNRxeVRQrGMMEmxNotUMALjk9IqZx0nwPupKeClWt7ZcFGZJAx+9FTU2JElr/fPovBtNCExk9fBKTcvMT+i8ZF0IiWro+9zcoyulM+S6nuvy9sHD9hOm+wKqzPPKR4+rtHCtZGt6cLXL2JUKFcTPuS6xWfxOPU6DPKaNg5X+HSeSe1uSPJ/nPl604j+VwUtBGtr/4VprsWrL1S8/XMUPOZtvf5+/xW+7d8DbMsGWzZgo2fnV0/rJ6e/pmEJHJXgYwnM3OP+eP06KHX3gxR5moN741zK0Q036119jsf1bBsuUIpDZTtU0Bn2rchgkTQ56pSv/PnmLPr7oFH84hlX5n0KnSnhelkmO0Qh+xITH7bXiyXih+dyVq/aaxZCK8AJZJQzkhKFTGniBOynEhFs8d4mSZ6WoVkSiFRk5o6W9TGpq1eFHkaYMjCRPherS+aF6+I7oAGOaBuvahF8KvCPNmjz4Q6oA5HY6oaC+aeuDWNVWxGw+GqWEvqsnLGzc+mHlNH5KoLhV0y8rirELkpV4it1jx0y9UuT8mIWiKLieEN+uJSAFEm9CWN0ytOdImVNVFUyyx/nNVuz4kTU395rcZPKgYo8327+yKf0qORCiq513YTcxzJBTCQSXFedosipmla1ZUA8VU0JyBOWKI3qgE/h0U7uqClG/39uTgUgtDbVjD4vIAptjx6zomcJpZd7a8cSHaA4MaaT62g5gXMix5WiiZcGawjCZ/zFUfC8DYd/73D88UgxDd58yotoCwjpbLWURqli6CTQyyKOE8mW4pznG8cvBGNyGDhSYIJkiQyqsKwhjSb+m/mO7cbMCPh3rWHsViqTCWlY+NJe6IpKhbrl+aREo6lMH03ZriUkiyCMkhDWbGD1u3HNrC9oWpHkWE7VF7LmcCNJTDVtxP11RhVldgBmaytf6NelpOt60fx+73BpTFExmrja5mZwEQZQ1B1DTeFHpWckiomcV3IwQLzR4rm9z2TRQ4M07bcKM80RoXH3oGrP5ZLqQQQOxFXi81Q4tSNDp5xWHzcuWf8gcMucQo5XcrolubHw3rEbsGeBaeQp/HWp9rKLHvBpH22cBM3jWIt7ZY5tzPaCJEKHEu6yS0/3ZoU8jZPbgTv24PUjaAuYBfSqv4O9HtuzvqyU1t84Xg+OHRpnh52NOEehyEhgS9UQkow3gcQOgB4B39aFiyhtw2jM3Ni6QXq5r9XbH7YlrSQ/hskH8bL7VMxWoh9OYVEGcxw7/9aoNuhENW48vFK0hzYBm05m9A7OUTDBttSkYbE/CygUv6CIfGchroRrg4jIdFOSKpwuJnkiwhnjEKcULLZisJ+QBHO8oQ635cVCpcPYaPOTxsIywupDHM6avgXe+N85ZKk1sKZneuLw5Z/Jre0O3MNR2+ptb/s4Z6OvH9pNrgMJkdWorY3aftJW56pZyFp1ZBnfvPkj0ZY3NmSXFLY0Kttooz07xBztFUkkDKkX50WgK4VWI5ixZDNGOwYVkz7+yvihURn9Hl3jEMgwnKMBaSp4Odae8KOsiIY6RCZR/oMid0/I6PJqoxQeBvvsUWwcbCzqotBq3K0Y1Su1a0pQFsIwbMwGLc3VgAUNe3lY0P/jcuvyhyhrY2kzuPivYv9lNrzf2kWAqlV/6YIp9btQ7VPJO6v+VWze3gpCNlbIE/zQht1zfDYnv7u7saqkTTj/2XzmmkRwMRwEhM4w+CjVYuHG36yZk3VPEChUWPit1Hg5SMxQQbG59IqEbXU33J9SyPzV7uck8yDfyFQcwc1/dZgT+fuNamnwKbXs2/DYvhgw0IkiyeCgpiyrtOEhUPIZWZoU7si+xF79UouWMXy1BalnV2WU95F6Z2y0wyJeMs2uk5rdV0pVhgxBgGlSMDVcclLaSrCYkFP7cFcV+qWyQ4DwETKZPX2fENUkOkxJwabOcTxQJL3eh3Lg62Y/oI2aiWuND6TKI2q9j3zz1+DMS4qdVLgojc3PgF5149NBsu3kiEJbWoGlHFyiyMMsuBjHMDi+5/v8Jp/5Ngk6dTnWXtzZEc3ksbVMacBywjRQBDEB7pO7BeI7NilXrGx5wgnOJ+1ezbST+wgsnVqnyQ0nJPtpnFC2CeaR5KHVyCkoai7QWYin0CJdCeivCpECgxQKZTnBHmu6oeyT4oKrJHoXplbVwxFOa0DTTsnMEIyHr0nmaQVJYe3oz/ReiwWwqRIoF15bQWQMv0kepdE44bLNyhg9PACWLGiGWfwBAXt1aW56XiHMXZ3sEsm5MmE3WRswO3URND5/VStX1hTl37F9kZBSQjg54VpnzuXYB+c474+q5af66ksc07GvZaqNnAnHOTO6z+jS8IAm9tq/iH5my1KhgfZJqI3CkLoKU1OKr0pWDAeQX5hW4kmTKTnsYftpsKmEpOOICBp+uYgcA6Wi1T1BFLrFQVirQhj9LkECOgbI/TwZJykVOo37CYPl0ITFU7rasjq7KhZWzzGvVStCutAfT69luNmZqnocYUMpIdE5DafaRzfaqAhYv6dEk0fgCsiUMHSXyz70DazMyH1AHpFFmtEt8KyD4SzWHt8Nlw+5nUsgTt5hHJ+TtjmpzfX9GrBRsSYv4Z9PvDQrz6IXNWL01NTO4vBFslDfF2sTcBfYbyGVijWmi2rzUWaS8wMWBmXOtIofSNO46UaAwmJnpsSrcgpJbewnUGeM8wkWjK2waAcOaifZeJx4eWb6vPtrd60omh3WZtQMGoyCpohUPedeCLFF28iNbc1OsOBCLImP5rdCGpN2Ml4+Kr7bym0MhjNlOCzGnuWG5sH8BQLs9VgbpofvwJWGwSGLHiQNRlwZ0452cWWetLI2BYtwWHVGCgQinXToGrzTxxrg0QS16q2jXMaNeTvXiS5X0H2nyQuEi/DZAg4MecbSA6SasOMdVvRSBeHR4l6kF3JDclLPDr2bUkJGAU2HYsiFBnOui88+sk07U4UJcrVm1v+uYK9ScPwLMwaWhDxhc9wSjy6zb/vYA549kN55Rk2v/2n9TR3Lf2SNi29c6ewqjZoJiClMCFmiqUJl44q1aAGYbby/WSERC5aywKeigJwWFJNKruechY0QMF1h5u7/XjF25OoDTyLcUII+OG5UnvU7qbBHMRC8deL/adex4ModKbAyfZWeztsZZG7pZyu1LjnzfsWbzsR5NjXFf0Ogbisxhss0aJ/ZCDwI9JxmWXtThMCokhiVGq2jpEK0/RA9YC2x/RgaotP9NLrVEtL8QgdYVDWPCSeAAtVdaYbrRGJ8M2l7WyssLHG0P5K1CrVjzr5bjEycI4oI5rhFahv6l1j4YEI6dF+6QgU3x7blql3PViOrI9EhCu2IWZDV8eaKxNR4gtPjqgPpj7PkeoxJg6jM0er4hQU0skNSufseWV1sRgaWme82zwzAxQ+gcSFSum9OQ8C2eExsFqCZ7M+CJWlQC2sraaEMreKxiikietzWRBmo+kQGOY2wvRHsIxJ1bwkTRW5Jv56eEPpLUletE7c8PRQk3fD5Kl8zXcXYed8ngPE/3byxnyvxVq++YyJfJjlEUgqHLWnxJoEmqTD0gCzluxp3BasYQKs0KvTKiaPiG5bnP5AMcQMomVUR31sotIquGqHe+vK711e8EZWDdQ207Vk/bUulqmpQQV5BKX11iJhhTHPVv/oQfXcPKetFJLwvi8/abQvdh8tMUpz3Qlqkqh36KB6lpQaWV8lIfYN+PSusP5EvzJEBK4uW2tZnc3fg17PvCD/ulpeLnCOMJmGSyA3+PK7MGmd4eGvS90qMAdcry/CeTSHFu1cPCwHivWs0oZIvYBQmYjwSEoUpem5kwaRB6v2Zpf0xph/P2+EJLlWdQUyI4GprBJqaHd81Bz6O+fJ/fdfFVCsyiB7H3wVY0tdTjT9KyxHuiCvVp3UqitrLYc+ZIYbBarUQgtTNfP91XNgUhkAWIwKZpm/PJZLmPiZFoN7j9xY9FXZYLjOnJELnbUc5QdUMHgx2wlFQn643BRvcFisX0RfFYKRWuaTmxv1sNUZAGajLodD3z5X08npIxJhE6fVAMMRYbtLb940lEt0C3CmlVa1Wp2rk0/vSYARPluAoMxTqeiTw6aa6wjbOMA2t3CRei9TEwVUE0yfw7pHsUUSsFOS/BIY7CBiN6CN7xFpgdJcP2IwDmi73OO4fDe1skUFWaVLxY7BXafmcPrq+z53Wd3A8ZLK+68St6ZET/vLmOcX+/vhjBjqDgn1zNxDichQJukgOtJ8kOF6nN/cWPamHP0/V07fwYU5Ppg3wB7/Nxx/7R0YUYELAwAtZHrBjA9A4mxt+qzHbWj5BkwusteYgj3nQ55ut0GyvKvdHhmNh+gFqOu34id33FKyfs7xbV9Ju2p5v6u4Ix6pOAs9eFtNK9PH3FDGIgl/ikQSH2g2oPlgtRpvICG6lvNz+Qd/1YI028qkSRckmxeDYeKwPaLCfQaaAlB9Ny4oc5gYHbOMIy9V9MQVJ5CZE+lUXzdp/fOm0sbLtWjeg0q0mAnQlK1KwMrpxEMjptl4Q+t1jnnlxbt1rjtaUE2pO3SbeTLenSGdtCgAO+NBiirccDB7J1aNGFVFEwZKJt7veIanm81XFWj5kiTFUxv4hXfX8h2CdSmkOjkG8Z0ckVlHm1B8mfF76kd0DcjO8Hllid7WBXihoQZGRezRVCLXm9ECpgYTscasIhANcBKJc/9D1EhgFMhvUOJj9EbVlO+A4Vj8AU4IIwf6Fab49sVaeozeKaJ9hcxmVi4lghib5gGH67uPvFYkH9ygKgRAgRADXsJyihCIdsLe94q9ELZsT5VEVZpuDnarc3Ui2I76ldTG0X4l9+MbQnlOjvOe8g9oBqYlR7f5MAKDktjAS6VUJ0l0la9RBBnKaddtmwUtMwqXrONA+vGQbvqcGFc0RxTA/eJZfLGsNm9b2JgwpL3EHV65HiGJxMXrVrM2z4ZBKjxe0wnYMiaOqJw4C+W9BLrVG4KtaNlV2BVP1PNyhBWVT1LILGymOvcpYVAr+RR3XlrzpgDZEM70YpGUhoSw6jU7gA/HPbZbh6f+gFt4maSXR1xI0jJgK4BnzfMClyXTnuBB+2E0KYoRaWcGcJQgNJbH5MYqNT3wRCjPOo7tQGrr8CVkyvHSW1KuK4IEoHhrMHhiD/LxQtheLWb43hFyRDm3D9Mwf64SY8LYtasfwwpZAPXH/gn+Hyx0nfQE5mheTTXR2j5iWKUbQTUZQfLISkH0BC4Lc3VSMh3IMWYhtKhgVquBbQ3plsyPwZPU7vSQfzlLMYhlZthcVJg0DJTtcgtr5Wl4yd5ooqprS2YU84lyQsQFxSroBDL0GBbfG5X+zy4OUGfpMk0OWead1jBW+vquIFUdFWAGQ1yeKSp5G4w6oJ7b+fPuo2nhZVRUYjM1Qgr0RVphBcIc+pDrgdJARAwOuKRVvkvLyo3kZxcFAMcX1Yo4sPEOG7NAilatS4mFUcxtV3/eqqhY0AxS/NvUKdLhJcFPtViKa8Csx4mw1NZChRJ3af/xlWPFuEK/8Q266dt63ZhWaVDR+EhMv/Tcuh0T43tKlHXE6w6qGOT7zO4TB4H4kOfu3oRt7E4Jk8k/h8K2d/vZTsTvH4Gg7gYYP+vJjurrxYv+A5V92IQgPT9B4ndAI2Zm2nwVMtQ1LwgLDfxfaqadvhHwHtuLDOT6pC9E+lqj7pt4xlEc8lsu4T6CQ5Ke3VTYC6Y45r6J97Ai4POHJwqIQgFgANOMQj2SJfRQZ5Vwo5iWIYDFnr9PHMZ815nf0Xi8FMoX/Zexx1rAxRF1zRmuO4A06ADDIckXJEF4UhlTWuAq2C9MUkwoq/XJSoXpPuVVJtx6/tKGshn22KLkCncfiCQQVi95RVHIixxr5oZjxK73hix9QIVElyJPulOwGpHO1dLtc7kfVgfTqp4rkj3pwk9IuQObFd+qXmbrkV80N8naJBt4go/FGotZyvwRs8gDGMou806thiokjHiYrfagr/ptBk1RftmJStoIM8ht/aph7n6aqwg2Vw5WMNfNzKTqHxdxoXuUem43zvzD6ubwV3MxUPPYVjoYpK5xSPPzrTJzzCtvB6p+oY6fBZq4EU+JzAYL+e//tX74QNb8NQ3tAIY4UNBXx1oiaerRC9n2SfrO0KTwXYzF+MQtu3jXiOUVYPMNWGc1LMi1JsMRkUjUKgxm7sD7Z5FPKFR8fnV5OFgKazadhkbgkan0khdKbb4WE5IDpTGBYdDjvlaV+V7+8B32xDFgw23FmUYpZEoum3MumL31Qjg/HQQ4vWqcgi0w1jKO3Fdqj5wbUleC0RGOGSjJ2bzifGqrkDs13mr84b/RwArcNhUyBekJbpWxdJs6nnRpNUk/631FQJW/wR+o8ayHkqtspJMvXba9LP/kAxnY7xrh9QD9jePM7Aa6SarU3cJFqAyFqNq0GeBxZGO7GXw3vCOLIRR6B5d6gQkemkv222st1mUv17rO655MxM9mH6ZnhiO0HU1bFaSnYZRYKznSz8Md5HwiPA1l/WNt2M+CmBmIyI6USqWZNpUlXq3pnxLIvABL3KMWbXfEuzh/mDQ9hegt4zf3xly3NVKmQztcVlQarTRrOpUCUOkw1weW7zbqJcJWZZMIT/GKim8kNMlrC09yfG1OPxB+2abckznWHB+MrpybvLOxu2lywwkJ8EzrX0NdVe/9ygfWFXTTfma9t4v0CNk+FleenRf4+8VibmKaCp/tiT+H5egYpn/imIzesPh1Trvh3amVCwfeF+7Qn0D050YElnlg50C0bu9sazeaquPzbGCQo3t1WjhOnSmZjWJDmg7VN0YjX5kjdtgMxlRf/Hfv2T5li4t/naxzH6junfWCOX+tyPUkKlyZOL96nHj/tC5saTSie8OenpXpt0oI3nKUXVBRDz4Q7kS6rIVjxXIx92/uVZPkvJJP5Pa01NBLZmWX3GIp3yLG4FidzQRDtL25yLytz75MY8SBQC4sb9SLHU2cdRE1dMNeA5n3L0pKnuKoFjTglU5UR9sCGpd/NOx/o5Tg1KTiWfW0ZOVnp7t26/GRlpvSfJNil6Nd/vkCRFMQdKOgj37ggjvHGO0Zdj/VIKBHVjsdY6gp5WMj75MM7KoPhdc4RZ7qvZd0xDNHG+NDMN3lCGOGmWAPxhxdVGedW6gUMiw97rN8wg+gu3j4XZqIrIsuHJmaI8Fp+ZMPkpUXx2EfgHvjXfIfMatadiY2r7kpGZyM4/n85yDcAWTPB9/OeOyMxSi5PWO06hQF7RAG3ldUUzW2/6Yt5CrJRn8gmoJNH3Khf5lQlcbtRIajVHpJKiH2DnSke1sisyIwzy1eKS4cZy9sHDRd/vggpiJOaTY73uPqSmdCYMX/EJYKqYfaGFZnpW8/MXxnNGocbK1HaxkW8JAvWGDaZWFc1PfhlUbiKGh8rv1Yu2qaWeq0bY9hHi8DMc4pyeB1lAcpOylv9/YklZPC/jubnm7Twj3hO/7V+X2D/3XZKLW/Oaj4Jyggsy/htuuJMiIHPj6Xo22uU4cTuDhNZOGQ2E0BTJFfu8OqV2es+hUcVyUU9st6fFWO89BNO+VkLEj6ZecymQA8nL9hwDqTUss2wUrIG1O7sjRofZjMVq22eP6CAEcqYbMdHmRFBR1hU0BXBxRfV1DONAOVtizmo9cSp5iUL7DCyck0BUBrjEsSLMEowitDEfPjA6tT5dMJGWh5d0PCHvft9FQtNmtwSclUxol+OreGdocXyZ253qMIlubrIvOvxps3L/MWCh+pin9uuua/9+H7JfY6lAUxvA2q3lum87wlC7//6xCL/fT/mybXr+aETLQalFCADhAOP/JFsmPIyzHDW4Tlz4aYvuH8SGcYd2+fQJVyaLJoFADndLIjCrNNQueY93NByKlddD0SDuBCKaiCHQb4APT7tkXRO3bRF7HHxUw7HxvnxuDNi305No2C9BLvj/VMq1iMIynJkaFg9hVKtcyVgdTqnQ409qDDs4ye1YBMDt/r1TUW16WSFuNXCAgmPMHl62GUqtUTRhNyMyb4Gczi/gp0IsY+zH9cVUGmLbQVnhBCN159N2LpBU952FpGx4AmjkKiP0IY/t3uml0uH2WP/JsltAuXgS1b7hYdfgIsPVejBJ0zDHLS/f5Zz0/otlfXp16QyCmHpFFSPEF1LlQzChD4rqexJC0RbkJ4CsRbO2RSrSSXF5yvAFoJDMXdDg86JJvoReJKREBiPLjpzm6eqZL4XFNbfbuFbzvJPd5nav3en90kdvYPj+jWcou9fDXKwqDC2Zsj2C3ospgW9m6HUuvBB5b0jY/u4ojeM8vzAjPFDZJTyQi+J/sAU4Yk3mBa63vHvQlQkmSBWryMVkQSrGuJymKc23zo2Umx1jXrNiinnYLMt/TOonB3Ly8wrc0lVF6rFuDI9WtzaldGdxCgzWHjsGktkiufGAwl6InOkgE54HxtIeSedp1InvAks+NCMmWTuqCyQGz+pgCbzS5OkFrB6xRLIG3QQkZqAE+sB8KZ6mbSk0bIq0dI6gH3ScljfwD0cpxAzvyrGQxGKoxi/biyRdBGdcoA2UE9CPNTa4qgDI8DXdS2+Vwcf6oSex9yYinfS3HeVP+82ii1WmVJ/nc/EaIHW1gM06fg53/iLZa+W/DAzFSzw00UlyH1sggijoNYOZypNOG6IbHCS/YSG7jp3qHG62Zj4WGQ4dg5aWy2VQfdjM5We669Z+EIYLADVVNGx8IcfcLrFaV2E66Fn0ULrq307XoC1c5bdNWEqW0YHq6eKkQJNF+a8qqqOLjMScQ+UmmUnTciCd3Cu+ii58aFAuMfEGxukK+fIOsuJs08sECAxlyjZqHht1wo1sSriqAjZRelazTf6/5ldnKHKdEMNgdQ90uvh6a/+MfR4DyBd5ZvSGZUyXV19ltY91lrZ/M7DUfHchS6Gj9NNVjHqnrGTjIr8A2zb7NQ+c02Vn0q0rDC6531mocL+NF48sGfBhpjXdEL/RopxZ0qsuOKULd9+vGA5jt7m3Nb6pA+GDTUberzBWuevRHHFlRq7oX6tWeyljvyccJNMbPu3lPa9rmRoOngPOxRNDWNbcvHQ9fkon16nw/zVFLfynetoxA2OxHIpyJNf+kH1NY39sWqQzvR9aN0MIofKNpSF5cjxLMWOag4hPGICjzXmArVbWTaXu+vFKpic1dd5fujCPyLtdZIRRbET+DhlAYkAu+M9GEtnP9b33AB4EHMDdoQlK+hafrHd4BgRAiceqKt/kWy77IvjmDD/N+X10VMv+qtuhRN1H/zDQU61dWf2CYvCxxDEaHXdF8e1YchKGXfrEZa8MiCswe+9eyALW9u2AeoB7uVUZFV0JZ2FsaQ5cRNGSuKrmqkey0FDSvH6xq3l33txgipK6EPHKaUV707VKD9+E3f9RZVUiUP7QEeaA+oxv+FBqFsAAg5J2KOpD4T75abenQEnKV8Y3gFNeFLMQdPhg7/8CcFk1xTX149+lSi9xueOKfd6ceDQ7l5KCpL1vPK97UqmrtWnN58Uog5rXt9kfaezaAvslB2Pb8WJD9cDnfhjzDln0AuTiLrq+0E9FpFTdaJW1gYG61fx27rxExyPkZ1V4WQjR/8l4uiQcbO0s0IUWR61U71EgX3wlyWPxI3fmPi63R1F09MEj2bEfEngD7S+fPI/Zp11k122NPgoCIt7TJSlUFPp+KN8Q3TH3YsGhAEozjY9jd+I8JCMuLcNcg4bnMsq2GA69LDYJoS2x2F+ew6MBvk4p99X53q5cRQXo0WYzRQAPn1SYFUukHdGZixPa1f4zS7t5eTv8Z+zR/0RQFfKJ/ZOkZeDPKoXg8m31aVgvo1OmddEUcQDGzpY+wMyr8A5XhDGLOgCLJj4jU+4CEmnYCA6uuQ6O1jeowjiWcxbLRsWRtnVRlwwNL0noe1sUrGUPJ5zE1fwUiuayGzpYnKFpf/COiZs4lH191tSaXIprI/pzwhRzb8wkGjK+bJhYw7Ln1fNEEi8qE/JCGJRoX2W+RBjd885wuvxuZlvDaMl1ZCh+BPX+0BxqMqYP2G7LbQYDPxXhtvPkm2TIhHbqn2KiKZa6wf6QclQWoz+R9/mVGBPMUWY9nEruB14fKmIh//3r2J545UO61zxxfP2IkM7fkjicuzcwz49JzgJLeqY6z4jXDmxr7oIxJXS+bGChsBc0YpTiTDEVIfX5XGyg3NAz2XotDsa5Cp/CFwyGsKifSUl27jMveQA/NDs+5Iy1YZgHwa2Ud6iK1gp+u8w11dK3aHTfkrqVuBiMB19X9EOQZaRF4xUwMuR0fQ0T/iCAzGjJzV/SSxh5t01X3zYP3hcYnkuZtLUMG7zuPmDTvdRrxj9b6kxqoSDyt1YnnwHZnDYuSdBn7cvET2fcIK5x8O7SEd3gotbv8c+IV4Wno2OaTP4apT/Nv7KZtT5wTVjm4aMmR/YrW+YyIc6JjyYUrGchOe8+wpmY+b0OR5cYSJy5P+uX6MBfNCzumz1WKuTjXkQEAUKsVXPVtHpdoUioBeloM0GVRVeFZbpWvBdOY6dONEDdr+zqzoboLO40NlqGMdIsRmX9P7QsxUWdL/iuDubfiYqn4gHNwj6xSk4ZsKztvoZQTnyZejeL2JexCyi/NO1L0aoge4p4oPOBTYs2DDpU0kbZB7Awxyqs20cZJCW4aQyOv/BT0KNeMWgsxzn/UZo5gwX/5MgDcP+e0/dQzusD+pytfc6m9JymEo5vjcUJ5evEdZDM8jtE5RWJDfuV4zyIk7iF54jXO/B7rbEpqqfDS8bs+RaRtyhcIQGUNTWAi+cFLuLMvYucxqO9AGuivJYCkuqh3dZSCYQx6ZjiQipmLPMl8GkiYZlmxhhM394DX1NB+GKEjG9fqo3qwLKaz6k+tTxcMH4I8KaKpf5JXoxJObOsej8PxBp0xD56FpNFV4yaswzrfCGAEyQY0Y6v2RHGZWWVzpXk8+wrDOaTPCISCJBz3b5C476NLENbKGJvO4xvcqy8BezpaHVwIa2iJ/9oBxLfecfp8msVvbxhMzUPZlKjZcErCQ6+Jgs2n27DQB7CLGkEnhJ0ionErsBKS17uSf3FBB3erkwymNOr1ehYZGmgN81J0ukv6NS1qYacjSqZk3MJSi2T4A30kusqIirq9AJdd2SlNYHuKHbI1YSjkvYdmr4597+Wh8nNgIVEeuKMAYmL6YE42CXqhXmBQMpzCuZeRDygz5NqoCX1EyY7KdGWm5wOzmbAU8pbmd4Z1urigXuB4sqYf3fTZX7xefcz6QUl2WIo2RyI7jCBIbyeGn4x9JT3SyZrieQI6GUe2ps1pn1yzjvPb7rvn4GF/tXJ4aRmx0a2cuHVPo46/ADv8VLB7VuDPMH0xJc1V8MMC/+cpZmSyN4aIj7JO4Xpf2vZfSEh7kAEs4pq2s/myjMW2nezLhZcbWE+SNNo78fR0Uw7VlcGiJ6zbNVRlIYFpfZFCpIRZ4CIRaBiUZAVOxzIvFMtxg2OfE5dgaL8st2euM5Lw/4OQiw4fS8G31Ozn3N+GlsJjEp2C6XWbHxGrbZc/m1OX+8DhnlceaFxJZYlhAVnLQtobzs6JTLRPl5v6PcrGu6MRzYi0/iMhsHURRFJLYEURRFUcQQJEEURVGUlTTP2ja95f08F5aXliSFZZrkpS0JQmxwEjMhB0yNm+w9CQITR65s4iUIjBt4zbIH5t5e7baGkcQthDXJ0iXkiB1m+N8URioEtNZ64H6lI/68f3Zey4LiH86TQ53gWWAlv4lZ1MocXA8NYY16AlZg7iHpKcKz05VNKI1XMOaxnylkMNWN8oiLHHNrIyqo6PMcBVmLVoyvA9lQHSdZjUFcHqR6p3X78CSUyjK6zIRFfa1yVSMsbbr7Yb1M8lNbvhDi8BKG7TUpDB+XaPOf/Q40ygdMhfl2mq8blyw3Ok+WpuUlls50SUqUS5Y6R4bGYRZjZctmvnPLAgOnJAvXks52dTWtV6s1WLdQYX8hbrnT4WUcab8uFpExzoRXugQZX8Yvi7iNQ1jYEF1MLymoxhe0c+XhfSCVixYzryWe+7sQZV+eW2KD+h+Pdb9CKW/FI0XPS3ShEEOU7z8rsE2xvmQOORuISXTW4nHqCANL2AQPhH63wYUONz9KlG7dtV58No76m+IgfR6TO1qcXQvvbz8ofAR3GLNhSEFm0w5+brHmICDcwtbY7o7bMfKGnzZMtzhL3GuG9w9fw7MkGl3zTOYRkBYBeeoYGzCSJJgR/aZU4FJisMOa1VIsI+DOnCKewxfSJsyvWWln1C4hDuABMdPJCXOWLy4sJPbQ3evS7CF7sKwfBIPrEAAO0xi6kRKs8N8pBUWdVYRVmV4Pv82Vsyi/dgTbQm9HSU7B3bIjZitcIZRXZfAp2VFkcH83By+mal+OBIJ8YWF5Mk6NjVa1o9ign3E4Td8YE5ydCMuXyDbb3BEyJ3kjzEwgZBpHjt5hWhgrPqNLhx/48Ie6N1XRCEJgw67+YJ3TdTGNPsXJtuRJGBbENDokXpxNBULDIiwMf0FfRM7yr7H23ODMvM64FqUxdoa2wUIgUabpxZXPIvuC8YznfMy5Y2PsS8BxYifpBeBwLNy5ft/Y+5kJ5gIjjZmGMeo5FsVejc+kHDdjchZHvq6DyF3/NWN/mr2EPyu0Rw0nQWT7/T/E4R0LW5DOVn5PSMrzOoe5bPrgZmTDyDBO4FUKEH3a1p35wgesooE1RD5/BT2KH4MW2VlzSfwxx7SCSIghyqVyREEXDO1whbiKXDghgGSydVwVdVCiS3+vs7FumUAPNu5iJEX1RjWd8D9dPcH+vTAN7ivNFP9RG0UkLsYfC62Em45fTmvD1aG6mBkXFSluG904gtKtKfrk2Y99EH7ydxml3gqdbpyaESyWR2pKGPuCuOSQaxWQxQLr8nprrn4vyodQGmK7DYpVq1Xk5ykU5OBOAuqWqUw0Os32DwLx90O7JGC7JJX1SrqUGCupN0tFM+3W3plTOSeTHVFm3iQW83qmXLNTpYqZZ/AU37ifR1GVAIJe4A2XSFyZ5RqNpznXmEgky7RxByqqk9snGEcyDy0YLIWPvkEsgj0hKfA/HGEKgPgoHMceMSxmt7DQBOetTjj5VIkLG0KRylBcRq6te9WsUVy092RapYQP+KOqI5CibVD39vAGLnxzOklZS8yqD1j4Oj4W4YXqxvdunpqeVv/FBTuRL3gTx6rM1Fzg2kazn5il3BWrZfP2/QoM5u/7HfCzOLCqSXqMtwH6op4yg8RFPhl8kKCIxxxw+vkFWsHNlbiZ7/E7/fVCwqSlK+CYa6iXZCWUM/F+GApFRL4exuqzUFZUzuvzL+esH0sIuDglQGWGRE1RJhuVApqSmRdzUaktWTOTsL1QgudC0HHZjARW1Nahpx3lMQtgul5UG75iWupShmDjFn34HR0jg6J+nT04oQ5EKNCh7A2Wn+q/7XupxQKJtyZfFR67uBGfHLlYxb/vPHQ9FA08nWv0ZtLmbQvWrvj2lZ5/bCHIRytMIesYO62lqep059qJKcdqgTWgEBVrodi2vOvHL9ymvU2M19k00qXTRYQOoz+Hu4jvYQdcmOoN3rUiHTnN9yBfA2js9Wf+bdWkbqe0hDXy93z/FYmNE0te4/vlsfSaKMZulWwAs2d1tZRNyY9w9TAwTL8teSH8Ex+VM/RFsI4WRyBRua5pjvF1HOM/07dH/u7VR+AIEPnopwLpGC98MvsQ9mi7o8lzcWVron01Ie5LB0qs8UFxhUjA6+BKYF1t5fLHr4Vvlp4+4r67fdkIA9qWbjnXWG18TZLSdc8dvKh99eNGG4mgifCFk1pDIYNrbU1GeeU/pvgYsb7hu1NsiEJnNjRhT9JtKHYRPcgFVnu9QznspOWkhb+B1Z+9Lk0PE89foJV3a+dKj5yMP3t3YCLaXcMpkzuAI51jeJKDPlUfRQaeO9u5rhvyzYQUQBjY/nU+pBNHMUPVcD3G9QCzx2HHNE9lUyjU5oZKbKFgGGuRsjKwm53BWEiy/p8QkaLyO4LPDXkoCEnM/jrTe7uohTBemBPHReSIUv+tXrYPY7Fx2zTuvYuHK8ck4Roil4GH6oxI3YdIPSifCrYbK72jUqdKNZdmuX/RKdPTFDVFOzZFf/nWdXP3aP6uz40Y22DAXq8/Pna5uaPDReU1P4c15qVs8oukJgDmufBjM+xDqsxSdbzVCK/zRkN1+JgzAyxkTMO1OuXK8G2SzhHIDjuWV2zumR8LMiWHiZv5u2Z2sNTJlqefOrCQSuVHiBkQlpOCTFrGXlS+u14JDWq1xXBw2h58EODYq5OC/RiLnDmUJM584DSdcvciHvNgLY95lgqiEjKp4NBbVrTk+jdb7OVJwiMr+G+xeBvpRhyFiUAqRu/zoqMRmy+wON+Mqf+W4WGQgh5IxJxBxULh+aasTotFvpdBarWnV0lnG3W/1gZaefaAdOm6vipeKstMwMpxYFsI4juXs2GejCC9+xYMZJFFCnr6wl9oKxGkFOQI9yBbWlHy+2G7aIooSb4Mi5KmATL8eiL3kAG5uSFPMPKcETrH6B5R/FX7USmgzPCH2muPxCjPzaQmMW21rzR+p9B2X5+0hK3AssSvLiQepAJAv99e000+qbzH4IwmlPzuqOv8cNTh9TCvj5Y9DJVg96fMjFPxk/TlZYY53Zwcz9JeXI8GiNImRVKSBsjDRM4DDSlKKJmu2ERKv95z0Cstk2T2JWt1S7AWK3YjQBHbpYHhacpOtdyhQlTBHPWYMsEynydpkzHGu0uMmgUINPUdLUApIQgFrKKJEFEvFtEFZVUVs9gtB0dqQqGNnGMSWGqRW3n6azhu37eho4+bmOaawEPXtGvc/uXdLiXTMcDsQVZsawyJXgRk/1b1e+IVeDRN6IKaB4fbYSy91KxtGr4gkMR06B8uBuiTL8uBkVHXqHT3xZr+jJbcOxp5wPET8XR6mSCERBcxQTg9W0xIPEJPHj4o/Ih1okaABFz1x0ROAm5p06ZME5Y6NhWx4v2vDzmpJsOJ5WmyS/EZ6h4veeGvODCqEOR4qXkQ8M4FvYZLT8QYeyHmu2gzzfm3ShoZCHzhFCzBKdwpuy+8yPDHSX526iIV3id58p7qdb/DKNPR0RWOakkjLB52uQWCwxDVqGGz1Mi4owMFIHH0fL4lTRqMPWpp15SJnlHdBRa0qmm9TgVWWuOG7dMd5HTPiDjtkFMf7ZtiMEKXlmzoK84/1Y+N+U9TAcCyw5P0gTXst/RdwtYwhTQxlKqVH1yEG8IQglQECy14ahjoKjw1pgW+96vwaws/6wfPvJwms7et4nnBaIQ1iBhXeIsW2Hh93HS54GjxavqdrJYeXJJdODrPy4qHKb7438susrwJTadwUUDtV4CoC6bluJBC8tqGTO2RknBobs/v/SQ3Iw5lKppaj4NCxHjgSbuO54NgtBMvKLQDJp7p46H7AddPXQVMuHEgcOGBGYG+7RBK2b9+HuLSyyX7JWgqYqPmGFBsjXLjBVidACXc4NUMpEShY7UjnEedpgFVSBVaZPi+YWLvOGfljnw+es6veWU/7VCr+5GsZjApbpr1wztFUxl8CqN4JChO3gryUBokU4rQJhaXG7CTEYOC/QAl8IuEuZtN8CWGxS/ROfH80vNgKfjZwJ9nZeTqcUqnYGG8RTUddxqlgpIAHQpAIgqG4y97/P1vTAFeknTK82/cVEecF2R8a3fT8nMwYBk2/ik35ZJvs0krOu9AA9z1yBzD823pmSgu7hUHnhLkvxAfHHtfacCye3g6c7UzKfyJN1oGiXmbyt2ctnMBYxPzByM14H0i1oCr8kJtP/v0x1m+ccbiJpXnnsUxWz9R3IMqZ0oWMl3UJvHixLJU/h4osB/jYj9mrxwdM8AwDyOP0Sn5pN8Lg8kUlJT6b4iLNz/4jIqD7FyUd7FLTTdk9rZNm01TcT/qJGXRa/bbZC9LdbrqY/lpIL3Jnk2nXZ+Brv1+JDzCHF35Vy8McQ3Y/OZom/5jDmXnocm3cYPLcG7IP71LQ/lE7qL1tfeoPixk7qpDb19yKx0CuHMdOxS6SWkfHh73XfX6b0rXfmnCtr5MpeBbgNJ3PCCR+TC2rKMmOjCXZJNYIY9p6U6wlRPWh290uBEuuLYtuvJkkhWiyCMkIxToDp9rKp7g4QClqvQLPR5FdPDs3DTv/wMtw8BsIEeW9cTpk+FB801TLy1NZ6Fl3aqoXblLHyvnW+3/5svIAAxJjiK6cuC8GPTgS7+2uoJ5s+OEVYuJMnczwjFcNlW1IHEVuHCgMh1oEnusk2qtibTX8cq5etcCGyvshFcdHw3bomfhkd4Jp206WJgOo6thI06i4hN41VJ7wZ5POhjVvSCpFGr/UHYMcD/QTQM6PrMP57JYSVnI9ndIlcj7oDgn+X4dlqZJCuxrbON02epNSFO+TSNeh+3//jOC3M3bIF0yK4HKbQPxMSkxjQF1U8PQzoLTsqlPFMzWgTfqo7mF2Ng3+rbCqxBqaEvzCSedYMbiC2WzY+etwuEDvpOeEKR/m0tfse9vRVO3uxIcsdOs86LYGIVywzSg+Tp5UGHbP6nzFA6NJXR5NPGW5FvofCrPxlpASbyydKxtaEnnvCRh416Id3HBoZlw9/LaHcgWduC8RxochFGZjs4dhX3TKKknm3pllm6PA/FjoDqQS7WtLbqQovwoZxtoRhB9YKpiLEnPTtIcYbf2R/qewmA2WwFA3LkeHSNf6+aoy9c9RI0H5FRgE9QIqcYUKa3fvlxferB2an6pABuQ5Lt9D/gswCOnpP6diikCXzdk/uRm8KC2hAQknItgu9kRy1VcjvwI/r5G1Oj9VereRcojMNU0NiKRWBSG/mcK6ZBnWvGgnYfX0je/YsiQfQMET5DcClZOGkyVytwGobQurkjsgO5ifnLy6vv/jsTdlKXKN7PJSiJStYmIcPWe5LWU5fOK7beeG+HZ0JUFZv27yRPM6DEtKgluh0jkOZa5BIMUw3Yb4BHEQMAnTwMZyknDStiVgjuyyO8wedfAMDUHnBR70wPdmW6C36DlQS6EPSSYEJtU/L9cAet+yU+PPo+988r+JFbQWhBsziBjFPYRBPrr1ph5SKWO16ax9JTModOITQgzcryE8wWUFt2gH2Yz4nGxm/DCiJv1MDvBwidXcGNR4MpMFuzUk3DR5Umy2NKfp3aIum/57XXopRuOl0C67iPVqe/lUtLhlWMfxWwRUWxj+fSMyvSkiHYfyiSJFxGHJsvjqHexSeO6p08A7cWYgaLNNoxY/7qYxG4PcBZmKw4pnQc29LOygifDiziIPU6cq+DUblIJLB6AR+/SUHol9LpH9PUSTVgRKjN2YVP30fUPiIteobtwCAkKGl2Kww08X/7tMQ9o0MAR7TsP+tW4Ykt5LX3Bz4+bW4cM9tmj6TcWGj1OlTmqjS0pJJjyrzNKOmPsGqCUFhUu0FjCYlkYqpgAFqjMNPJvdy5xRvJa869JxXrFdeQwRB4wWUfSzakqdW4LsQRtD477nHIJSXyr5iaTUdgW2j6A6vmV3wFKWB6jQTmYjuP4pOw+IJ5hL2Isvl8hzkpijSkKJ82ZCv3NoldsFkhagvzOr9l+feO4LzlAU4qJX3odYuWgZ+7MTsRtnZNHgelpMD6cTd+knH81NErelVhkYJIttl+ey/Em2JRTlGl7PGUOURh2AF+rYDbAwIrC2PhVG3GXcSPHRmF06lhx41Zo7SCM5CnxDguEy2xXhDtCtpwjarB+hicTMWnKygbMkF3rW9GT3c8iwOuBS22YbrFHUR5/cTFBxl/Y3DHMxxvBXsESNoZFUEitSecv9HLM4iYevj6Xfr8udOO1HMqcuHr7Z/RCeWjk//GheEnLNPavo/SRptFmc83W9mKxf76GTffl4/eL/zSkW8wUUN6xoPXsrLRAc6mLFmwNalRLFTKsdLnnwC/X3ooFdnKec7JMGuq+A+pAY4a4IWRhoapyBQWMnMhwIoc7SVu/674YsnFwGxNAA+dNsDS9GurtZ39S+lxFDnIPecsz/fYFdghxn5z0wxJrmsce7ATbOBSVmraxaIWFNAPmKmsj6Z6ajVnaj5yNWdqPPBxDEioBC2prKKLHNfgSHlMG9dQnqDCGos3N2ZMzg3ra6yDcRm9yjXbdKeY9/qupr67xp32dv7ka/izs0JTUjayza/Jozagow0dUUwaOKsRI1QJ04x/xG764xRPnXLTP6Q/4NrPePZCOSCwQzlFoCf9ix1sCx7g9dTR0hvYh+TIo2pX5V1O0Vg+I5DRxQ3odxAmphqTgbmTB2kasj7I4bKkRv62rfIlp1R5atLsZfCtlAN6mM7Z4elkRjeL+H9MAmCBrFbd9C0JX9Bwi2KvrV/sxE6bEQ4vi9d1V3fHCsAwxVmeBAjbU6deoLs9FW33UCuVT4XQ6UDahDrfvzrCuAgwXCo2KmJc27u8UUYJXHDG/pfdyoTMTbFjAWh1KkPHac7Mz4MBaJIj47ibzdodNgLnr5LHphi+qYAVZt0PBzTQZEs2YaRD5idd+Q5ayZO1iR6Mi8HpYGAg/MXMAmcOSnQJ+9j2wyXEn2Mp6McoAI4Dg11LC82rkpaUjZ4VhC8UYzDhOfq78nop1yzOYPh/gmcS3LehrDlVU9XiTE7NKkMNE5guxhF1gi8HSToYsQ62lG14rp15fsgUGyTWIafSk/iWdjbVa50HGa5C0805CbMijwHVZvu04rylEusSE3FRVDDH+Nzn9XGbil1RMn20wCHILoQQh0vWt71DHnnzOlT8Yn+lPLM1ffhYVZIXco4kHqIZlg/nv2zWCRBKo3nW+m/6ByloXiGT1521g46Jqwjah+oP5noTiUWvRJpqllVUnUwOPrkOvtxu83vXnb1NGwRkO6Yr/9qj5eUgSJihxg0DlBLm9RgaQA1dpPFIT+tNe2ed9N2AOikj9tSwfD9ZmdqooDivzfmsDAUakoMQqaFcNGeKOWbulMBBK1vGjZkvt9FW56IrOlH1qezPWZEEpGo6+sTN81rabJV4613VwPlI4D1DfJanYe5laCUQmiSIrN1kSadCJHISLgkJSEkeWRNgS3o2NZB7q/rc4/ygOg1hmRMUyNVYJrkTaVjorrPv0yBncOpQdpngEamVsUVDzKerQR8jzEGi45FlCtE1GSZOhYZXPNvoRX9S1QHY7y91zh2+ZJmYUz1bmvpzaO9A7K4Ardsgsr+GM4Egb3P91kKj6m6kvuPFgGGf+OLRXRf2FT3bxAvt1xV0wfhcw+KjsKDDhBJwiAcsVOtSGnZ9E6YoblrxDf44wLxjwr6GY3cwTwpa8FG2Y0tM1gpjcQwatI1etiViX6J0Zb1cZ1NimF/q0r4zpxaLpqRgVx/9R44CF9ZbKcEz3H4W/Xt7iwOSnEkTIx1tAPH+62HpYkflxoLLK5byduXBJRe86hjWb2GMlOsqdT7tMWYuRm5qbUxlFjMgKkXb7d9HQD6MmUA+bzZcX3QRrjysizCYry2Uk2EZztWQ6JyGMSlpKO3ioStOKF5wJ1o2iG4INvodGvTxuA0XvfQdRMywu9/g+g6yJ5j1jaHjfnZYazMs96+Ch/Wqm774arHZCLtj1mJpPERzObi27F+mziCihpsV2aTq8AKzOefCT8fzJJSc4YhuxHcD9usGhgw31L+KNxd2AJvImfsDZ7CtYM5xcPbjvCuD9UoGPRGiIJtLSuutCs6RoNZksPH2aUlJxKMnFx/RVgh91dCmgL4XvbxWNCitGYQd97D/qhbZPBQFPKjNqlMd6u3b+8l2kEf1v7acRkdPs0OP/Ow/ELcC65SA6yEd1GW6TshkZKDy0T446s1CCT+KkeGkclUySxCL1A4yCMVwbpfBi4jtyTGP+DH99unImjEA3dKroBjt5DiY7B9VUkEqenhQTVzNLFBybPGQOGUWeHVacaLRZzWvnG70lMoS8sAyFBXcCIPjHSMvYQ1HdnWHvJ0Wz/e/gC/7Lg37SMLwoiZf/V91jQf95IP88wj5c/ZPfAP9a+7Wi/EVS/vT+Ov/k2vsbmGvwX3JjEpVTxRu0f5GEH3MuN6h9LOqXy//tb+jQqhQFlZcHn7RRcIyfEpiH3yzIoLFdfw0u/2+ekAmgif7/51Emk+TZEj8/RBE66LeDFfk9BaXcYVzM0jWdMOcVfQBKk42uPE7/zR9c+H36e5thDZR/aaXIHev4FNQ5IzlDxwPBYE1KjrkXL2icBDVr9D4T4tafb/JuHk2z+F5nYpfq+TdpYZ3t1VxHAvVreN470CkjvkI2nLbeEmnVkHtE1dMeZQ+m8ffLXD+M6r59zUFnwFIn3YvbBtpTo6SQPWP+gykXFG0h4gvR+9UPtcHUPNfxP7mKuFBX6HyCKQvc4eyjp94BC6dR0H24/KVhVbQIc2hB8mn2TeJlhc5Z+utnYltUv4/HQh4FZeSnMBXPt0kRgpbPN8I5ITmKA/+LypItiTJmDQtNxUMdj1S/f30qtsDkCF336g7fa9gx/kJ3+fuxbPem4uulcnCVF9A7Vz7lZ7n+wVIy3yyWoyB/vl+8qNbrd5c7sPV5F7lOn+dIgn403oCnKOUS3c+BbXKZd+sPj/Ya9gTmsrkLVObeqsiZNrP29gRx5j/4S0KwV6NmdYetsSN/tjNhl2Qc6z+vIllsJwS/Luo4p+K/+upRJ5tHDY9I3pNZVzo6L2No3d0atus17Eq/ugAPLZngZxU53x0vxWiIo+1qJtvFn+9Jo7eeXkHKgrS6k9XCQzktm3Y3mUR5Jbofqf9UQNAGymu69l9Pw+T95KcfvKXFo4635v1zEkC9L5KxGDlnnmvmyiINCvn/zxJzr2H7m3muyZ0zwX3JvO0AZt+5UWCUv4pX8dPCtQm0a8JJSjm1xHdZqa+sqcsOiEIZtiYb2vtaFLBgLQvS6hzDQxh0sKeAinvFhGMLsqfcbUOLxRFfQhU47V+eznoXOJoWzui9liM8dNCGQY9GELnvCQecgBsleAZS8qffv6Y2Va+lBlT3lC1/n8mcZIpoicacm0riyyAuAbtGw/OdGyCLjsVpJGR2m6xqgoQ7eJ/xCH+ZGmVF2kP5ZPAROO1c8Y90ONSHffOiBkZDGnWm6skVEyMDvxOLPw8Ern7Ot+jVKIK+4FPnp4312QlmddK79T6Btvi0TFEL/WPj6pgcA3FKsQud8DByyx3jUxuIBW2bDjVAq8opqiODZv7N2AfmM3n78kxXb0Skpuo1PJQEBMUH65cyELWVb2YW3/oAkeunUbwVFdGJxbn2ebRhrqGzF8E+vR0AfS1bcBXxUrlK/kLpzf4sorAuZMQxTKLwFN2M19zvMULRhkClXrpmutxzX72d5UMRD3m7/jqOIZP2lT/5uVixH9/WxaRdeb8xP8iq/5dCdOAnUawcUXOirAI8+p4aJ5QjUbzZnmlIeJQVv5jirWP4Ix1n9uxsTXwHzGaEdZRO4BsHbJjgb8GNFYY6MeyJ48UO7MbE8BTwmxW2aYPyWxR/cESgFbuPXSxAAyN89mOKHEs+Dwqgv/pd2jn/fwejPdg+PBbG+arlb1HTV3Z1360jcAd38F0PQ6mhNl/wO1E9dBzclY/H4bO8X7d3qrH8s/bPPr3wxUq3tFBlV9lpwLpUnzOlhYfTSmVEABOcoCsL3KM03mBjq/wLz1TgCq+onJUQURt/CEqj3BAKO+ArYWK3ck+oeDD+IoCpBKSmhVpkoHUJkIXOZImsPKr8gtyTQRtiQl4lI/boTR6IxpPKPXFmDz0SV+xdlBQxmBxIykHlnVQ4Qp+kiaPzk1Tx3fifAoxK3xSZE7RPMXByXlOM/DD+oHCelfYo/blbwi27hTtrKjvgqzYf7M588+bE7p6/rfmkVj7UnrIb+LBgeBi4t+YHDyN/ud3SOGeTA9se79+S+BHxtzY/PEzca7NhO/HL5JLm5xf4hMo5Kz3TO18+eG10A11FvLQV9J4OA2rAlg4eFeCZTINnwAftuW3hT01faXuGmtNPiv8Bfr7oAVvQE3UD9oCcTileQPfUpUiAE+kUG8CKjgfeQPWUpbqEQ01jqms4cHrUP//zeZWtfD3y2zp71tmefwyZ4+uZ/7Dsn+Gr4H/n7N8GbPmxR9fAVBZ+KNNPhH0/fHB05f3M/QB/Nbnk11T3HJxznuqKe7JZorokWOS+ulw6pK8EyT3obgUfjQkw9WPkVcbS5/zmYag8VEQZN505e+N3Gmcz0bUuAuyHYDgulDfODoJelFTHPdnQvldtV05OCHXpZ9J1D2gEu2fpQy8W+w2cJTlrM5t0DtU9dmD1q2my2jEjBEj0SAli0Dy4w7zTmR/HXhaMOVnwD07Eh8UszsspD8z/yjDj6mASmNB0wdwWE5sewLnafc6Zqxd9MkD+HRjyJ8YcFigU23yZF5GPuhvxPIiXEIyJu40oxx+btpAOwLTutArl/eE6hddB2WuOYPPecBrTKWwIfIjzS6o16EdSUvlHub7UJtsLt48PnemeOU75Iuws50z+NNDabIIZ310SvYULwGeTjbgO1AbtYYSmqyzaQIDD2P3WqGPbJfwlkXy0groPn5xaHqkqsLFkT7Qo7hmitjn7J4YUiX7DdtSFhOz0kqsj5E/tKM1YCzwYS0jOjoE1ocK1YfdyUp0+U+iLlskwnEgb/7VpGWnwBwDctseAWkEeECXDUQugPBftsmtJazAeJ3aEClDmk7SZ+9k1rg74p3nvSp1UnZDeNshsnKzgj7Jj/DH0aNsxUnwJUYUTOtsgcOrLOBxJSArzq2oeLiFpifnHqLCU4TPgtn9D4uhIJF85rMraO4fuLTBVxHZupo2DQHp/Fndenbm+M4piYWSe/Te+GNie8NOpvSU/ynC13SWtlaKX56xiRKhseBxi9y1/DiOPb7mDLNG0EhxFWbiKglxqzHvDaEeKyXXg+TzIe8vTyZmtsPJNcuw0liGiox9Sjo0sIDk7z+x0XmV7B+DF7BA2ZtW5OL+wlykC1lc94yRJWA5JoCIdWYfELwudR/Vqu0vhcwjfetRJ21RUkVBUxreWl+wegN6ffZ657HzZGtKz3fSw8ObEEqwg8yTC12FJz5sFWHkv4vc0Sr1utt+78en+NdBEjealLsEaorzx8O5zkZebcEpHTWwYARa5ixpz0ceqZid3CNluFisIuqeXbUiP9PkcDjkjq4jkuVQ9Jmqyj1kzt9LZ/NzRVraZCvtPLAILZxZV/PBhxGbYwNF1icvSLo0USYu9EF69LGhVzPuMxxMAU83JNfLcAXRaknPpAVV3Pxq1V0Mv9e9mQBMe01XnbUmydwlVqGSlGae0T9aA4NEfUjo+OuPK4DxFdpbhHWDaYIaI4o88UWUp2mKRHl+WQfO41rMbvBUJU0rUqDjxjh+Uq1eeaN7jWnZKFyruERIlOgrxj0U3aEAQ1FZE1UXj4E+qMlEDsMH+350j2rPvmqFaf0Bk/ck5onlyxPDk8e+NMTp6YEoPvT6v00G2WlI4nIS05cidt9ZXAEd6bd/8vERTYrSgN9NBDMMwjNufc5q8yH/smp9Nd1Tdp9+CTtfd4exZwkCkApbrEYKjEJn/mL0xYYh2edHru+3n/u6k7jmVOsAObaHSlJrdEiZZzpJEK+o0Gwmkt4++jEZgRAX9OsXnY6onZtNIce3CNBSkhMQeOkSWpaH73r/mj4F15winHMaTOGue6cycDsiuZoafYPslH2QIZZiH3vWKgaiwiFGSJooTCb335JUkcwsClWMpMGWNZkFdlmax53dMU7ghR84eAvMtTYIkF/DvRGaw5UxoJs3zw7maYfny8ckL+2HKZNqOwB3CgIQ/JxbVmbgknCAe9x6mjWf04ts8awPCuy9Mz3MZdkdEkrjxmBly+QxzGdznIGrB7jTQuhgfaiEr1fOj+ZEE0m16Q9lZCzbAwu81DBmpl4UtMpiiFr5f05aYL/Ewh0mzs+cbun2GsCFOz42ijwyO0oiuG2ZauW5eEHhlkRxKzR4vUFOio2fUU9NB5vZdnIezBk43CMdkFR/RfSjw0s+q5JINJcU4d0SdvbdK0nfF8Z0hjMvea+IoTd/4Su5Vez+mzL9RE0rqq5z3sQIzbiWFe9miyO/r1GGn4RRvJMgnVKOeviXe3I/izZptkO48ItWmeyJJj44Jcwf1A1nkrUfcdNsRWu+O3q+ngPnkJIy3zKPzNITkkKyG5YCOtcDvkeSd5fG9DBWdW4Un1sIn4FIlZmS48PY+o4GzpGPPJXQB4M890uY12eizO/3U8DDLoULz4qOipF+yY92NL73nUIsGevK2UIm/0n2adcglKoFA5tcVGwKGz143Ie+ML8rWsacB/rP9oEk2p9nl/E3o6FBZfNx87uBGTFYLnuyIaH5cWSaiR9WXMYtI2LPW29PDIskQGdCZJDGewh6lzKgFuujcQ7yUC98zPyAQeTt3eiQurTuU5n8OIpdliWKjZCIwXNiJ83hHIz9cFBrth/oDEiOqR5IezwMur+XoZK+zmAg2cuWEfg4Jcng7jUpkoCSalKqOwxdgksBAu+90mdOa+TvO1kMLIjBmrGrzvCwyi17cf/aMf5PnHgQueBo0vmtvz7YgNW+sQaDDtvg8mliBKbhAJSvkd1EfMEcgTQgR2amgyAc16WTotu9xfDbz8m1HhGAnnYQga5SbYSYoCr8zP6zlPzsYOGfX6Qki/d1O3pFrnCEdMWg5x/NcNeemxRi+mu3+dJ5eeujARTtcae8iIfv7pmPrXKK30fSJBXPAOeGD68RdGhskuZAiLL38sQWL8T3vkstzMx+8Ks7N/8L7MGOXZ7K+CaTfGoKODZ60PcGIrMJ10f2ar4jm1q8EZNuWaVoSRt0sNwl+buiFLrT9mCjkY5w0B9UmRC8X7oTZdD4SgjPiTxiGYRixY7CzftndhbYkjRZAMTNrIvpkAYTnLubg0u1hE+VMUNEU5tHZycUYOiaw2tKXVzEecLS/isQZCf41q51nIZ3W9C6CF4AfRVLCokWdX8xuJw49V3R3eOYFZw/5Tfsv76WzmpgCBhSxvNSNg68I2jvQgDdkGGYOAlvKO9GQCcrFmXw7nagqfAxRoylTE+n5Pn6CJPm2keuwI2MQIXJV3FUPVAmqxhIJcaO/Pwvs/dMBlTQgu4VEbYBczzD2HOUBlcwgN1VLvz1UZU/qcsb7ZfbzGx7h0fkgyTYxlgAZyAOpoB6aEwlkjSCo+eBeqqsQsmFPLklHUyLyaiHzTMuuPzgBfnJry5Bqo6xE3OKL1LCIG4ZJ4or/nmGT7dM/kfdaWl07fD3cLOgXeli5BnEIpJ4MimvOJO57hZEqJcYH62BoraqxWrrSdsFu0wP3px9z6U68zR6JeVE157PwhUSt1gi4Br1mYsLjrZUHN+7aFV/MAuSgbLPcZ01qP5wyKG11MzLEyfL9N2e+qUf3zz6TiHFFk8QnDXVcdOi5cI9OwtsP7jCnts+gYyc3cZj4ZiNsFbvH0Fb423pbBqnm8TU+a/+5vRTvu1+iJHiVmifzDnYtc3vuFdwu2oQrpLWb+Q7yvYvqoPos5a7zEKV+waFRelm8UY0qtBe9+km7QQP/dBBWyjix//1MrtaKxOOhwI8zxAtgDSfC5SEKkiXYuCEzFg/VMt1QFVTDEHD05fGeQT+zJXKoIfYit3KGqPyFTKPL9DtH7Y+Q2PGqpikkELW9vyyEb/JzQr2qs0VWXPLCrsFbY1oUc8KPxNzbRSrN6e3ayrIo/CudNGgPK0c5Nr7Bu8b8KfS53M+saT8LWp4XmBYQDsHOqJuxGj1PsNXsRp7cgM50+OFJec6EZzM+7MTOAmLxJe2d0KG9XzRlwbibtsayusU2gCsd8BP6ngVMMHa1A93bSeJULOfm+FiXXPHiUsot8znVfa2F5KBJsRQmWFsXtwsnpiaz47f+YhioPyreSeGPg4CHU40N6aFctUt1wQuf5K7UXrMfFL3eAlUcpbW8r9ZszDjnuXltDXYAp+XPd0yoGoyLv5TJ5c9Nk0ZZsSPK2Xpy8Jtnvg/zUvmocpjeOD9Fd4FJEFp4wFspsuhXJ/4M8CR2kUSBwOPVO/I2qIfONWeU/3F2mAL9S1+lPJwVfU1DBdUVFrQkFl/j9PoBhCUzt0WKBr1APFRq6i9grG27e1EauyVxUnqBT7Px0IPRcQNaQ957DTAp6mBG+9J5rrGexG0/imvkin4QuHcSFzqfu6DFuChjha8/9MOyvk9lcr8Ar7BZtftWWsO6VmGiIWLGeaXN+MkJFdksmlkchmEYvj1H/W6QO2AjvWyvRYKJRscRmcCViKoZfOA6suU13BUBKGHAzn6TwMtnOwadFQfcf/+J++9c5ZSibqjBJIk14wKq/X3SAy2/k2i8WJCXQ1drio6KrcRMqqnFzPxf/6P6GXY1PhrxYbLl5C5Nw1PD5aNwQ0FT0er78gHMPzH0VopLwRJ17YdwNQmmmDn/9CbHPEbyDz8dhwhg78v0hxLbUkMzVlxzmn4guvpwqbEOCXTKEyUzAt+mU4jYB9++fsBjWw32qtgw6i2HBU/w4TIgGPuxoB4JOJli2CCPy1OFDUqNmMKXa1YitnXX4us7rZQlkNcgglnqXMkGlpmWsCkUhGiKvA4rI49yitud00m3YjySwi1hcvxtCWLlrY+Qv0I1xMwUnCPJQNkYjI+GcuNib+pIavKqsVs0Q4Ft1ai45xrVKavlm3TBzZVuaalnkmxXoPZL9wFT1pvaZ2LkEGpmgB9958ztet2wJIrBcS3GOO5Uu2+j+rUbyxSU1k1GXvmA6q3XQYEIo8Z6JfQdOJIR+ziJ4WXoEDqBAXquQIqlLKN01PlYsOYDErb3o5DG7TXui2QRJkDKfQL79jhZURmlXt08hVCPG7yNZ/MqrPcHm3k2EB461NRYX9ZVXNIEh7BKYuyl431h+US+fL5/lyNTOVzgm7cOSXJLpjHYAmyqdN8n1rECgetzYMf++3SV4n2IcGpxUWPFJV6s+HADwPT4Dc9tfAkbrCf3/x7z1+9wwDumZX1ESKGFDCUCJYjUifgUFuPV9ZZOoWjrc/anrc4jTq/P40vZRzoVkj6stB1dLx1Rr/vQJqohxKOpoa5TmzfS9ysj8xe0fpxqoTrR7I079A+sFpR5BQbq3G+IIz2xSQTEBITfAsJGmYZDhxd29Kktt3A7TLfXa8FK6gQaglRp/45WSWL41mCsPQVGRdwczUKDDkJ5ZcvCPfloSjEJMFTP1EpQB9d18oMoSFn4b9xNUHPZzVS9XOYoUC7CoVnQE30C3VQ9rBE0W3iy/NUAKcJbh1F0n0xu6BMSU09scnYCrGbvoqAkZ5vaTZyNHib9DmWez8Kr9woQQ+qB4CWq+5afRosCdM4UX+eT4ZsqHf+GgJDkJ4bjrR18IBcp2wFf9DRcYr9pnCr7AZoLdkfAcBA5KICGnCsbkNHUCh+O+j/IZxKa+PpiPsk4y8373YA8ovF8LqG21HNj1zhAY1roGucEBfHh7QxVvXDJYOi3vmxssbL5rD9CclfDC4zjCkLgMg39veXINbEV2LmSvb6p8WOQYnlFSfHaOU62624T1F6z89BbG2+g36qR6aw4RHrL1ys4d2NUWjqxFF4fOZgOQwfmo7uzLnAk5qo3OapVgWEYhnGoa2qpyrFNT4jw1f+/Qimw/9hvRzl/b/bQz1NU3BasvGz1tI1K6jDaJej20M3YLhQ2CxDWHFMFOTQwXarT0RV/3KNxjuAilAcKXXd1DYgi/y1rsC89fDz4fHz+uocH+V1YdC47V6q9cO7Lq9NtUW0miiCfeE/iMNq03Yfq5Vs+AgecaLUzrQZmfLViCBazsyxPzERuTRyx6fV7wUpl5P+4ChEDoCcTqsC4ZJ2IM7vIexlciMqNTc4/ilWqTt5ABX8lNrgHhvwviKekdvOUn/CaU44NxJaNrPrNspHcecBOOtMhN0Fnv+JwBKyUP3qA7Rid1tBe0Yfn1ptkHqSlUIrz6sLM5afjTS14suD7k/M7HOuqbgVN9QN2KoVleNPGjNQq+bE1hMgm8CqKf1kduPqsXAIEupsjpVDCXJiwmRKhXTNJ2fSnZ58bZO7dUUJeCmddDr8XUVcAlGuUcBNJQ95FF1u821H+ExuArgTpLuBpII+JMZEf5+fg3x6TxwqB8PfTl6eNWUaySuNlqnli/mQUjfSwQsJMOXC9Ew1wJqHT2IdgwwuxXnVcl8+ptLZBdJJtN0/S7n58PU+lCi4oAkp5RhQuC4qX7qHx4DLJf73ZGlTazanQiXn+7lMH/2wyj9uHhWO9xZ3EdEV60lW27KAi8eTmfDRXZlxvCFmuXu/1bWe4hdbh68mnzxGvYSYVX025ovMvlrpYpD9fIisXr4j50LbO6xU1TqFOSuLJqR85kMh4bal7awF+FOPnLwxO5ITXkdRGncPiweWCGojmOETbCSjgqcSrQUM73O6do/yDU4Gn2/gV9J0xWgrfXrCOAGtBsb8fawOql0lCehfu4R5F4etcO8xckxk3DX5ptFKBqhITsZEGLDfgSbxzzzh7+vtRJKWDY2KIRCGzoHVwAWUcNhuSTGCcO3yp7QwmuqkX49joRthslguBg8RNrnHR/MGw3ymROvY6Z5Ctr6c8+kpzffgsBblh7S1jHzJ7TEnblH4ozgXSNnv21QeFoNiPfY6R8EjMA6B7K6FDDoKwmRtVlktZI5BqnAlpNXkxvUUamdXmT3JjeYKdjHBE1XxP9eMbGKKTNSK3XJ2Dpk38Kqc4nbLjalqJYsCjh10IzBkw+0T+QMgS7g6/VedKHqyUI7p14xz8fjkplVReUTREgE9jK1ArHf1J4D0ZJzWvrMiKaQwp2lKcN5QjXabwZb0QichmXrYrbI8j4sTse61ME9f/I0GJDnSgmASVvq/1GirCH7LpOi8k1+x46yYeIGf9vkIMoorCL2SZpY43zQw55dndeh27zT+aF4fkaQObUNP4VmoSAnzOJSAVwT2mW8s9Vu+yTPoZlJZV2jL3JRHP+qehVh28hYbF9oy9JT6kgYYhTYhaFFtOtKER/LMMdYLI6Nwj7ZzAGzp/Im2cYJjRmZGqE5SCzv+QBieIGp2vSDdOINDpJo0pGAI62UmXSVBe0LkwUkmCuEJn30lXSeBfdN5MmpNg+EYnjJTfCMoZOv+aFBNB/EHns0nX3wh8RufVpGkiGO7Rue6k7URQjtD5zkgOBLFG59ZIu4HAKzq/m7QZCIZ3dCYj1YGg3KDzi5GGgSAO0Hky6WYgcE3nxaTxgmD4RWdrpMsVQfmHzjsjlRVBPKHzYKSrFYHv0PnHpHlFMOyho5FyFBRBZ1UpoiCe0Tko6XoUuEXnpNIUBcMGnZ2StlFQdui8V5ITQZyic6ek3Ujgd3T+UGkzEgyf6GyUVEeCcofOr0oaRoI4ROeLSjcjgQmdRaVxLxhadKqSLntBeUPnNyWVXhC/0fmgpKte4Bd0/lJp7gXDPjqDkvJngnKBzn8qRUUQf9F5VOn6ZwJP6JxVmiqC4RGdGyVtK4Jygs5PSiqZUO5pIydXqVmCyjVO7NdYucqENte0kZ1TGbIEDT848eZjZc6Eyg9t5L1TuckSlC1OhMdKvhEazmkjd05lfJPQ5hwn/vWxEjOh/Ekb+cNVLmcJlS+c+Oxj5fqN0OaLNrJxKmWW0PCAE68+VqaZUHmgjfzqVK5mCeUdTlyvsbKdCQ3HtJEvrjLPEtoc48R3bhVHQplpI4ur5FFCpcOJW4+VXSG06Wgj1alEkdDwgRO/+1jZFELlgzbym1O5PkooDzgxeazUQmi4pY18cCpTkdDmFid+8VgZCqH8jzbyl6tsi4TKEieefKzcFEKbJW1kcCreS9BwiRMvPlbG94TKJW3kP1fZ1RKUf3Bi67FyWRMa/tNGHl1lU0vQ5j9OvPNYKTWhfKWNnF2l1hJUtjjx4LFyVRPabGkjN05lqCVoWODEPz5W5ppQWdBGfnIqN7UEBUcaZgLFpePIyMyE4qw4csSMTnFJjlxiZmMU54AjHzEzGMXlAkcKZsZGcU448gkzRSkue45cYWZWijOg010adwRDg06upMtMUF7RuXASitKwF5goRlFG9iZMWCnKEXs6EyUpyiX2NsaEA0X5iL3BmCgrilKwNzYmnCjKJ+wVZaL0inKFvVmZsKMo99gLZ6LMFGXG3uRMjBv5dttjDkLPY2E/iQ0bsTIXL4dk4juswd++HZsu/+rnbfhfH7uB9a+Pny8a/d+Zra5/+Curvmn8h9uncBuXdB//r/tJ9He76T+0z8PHH17x0O6KyIN1wV/D3WYzflc8T5//+njc/H/Wnv//TQJ/ZT3Ot9UP6fcAqymZ5W14fHLXgVrLts9XcSfe/oJ/3GC10Cz/BksZQMsZQEv6oFrUAoBuQEsbcDNKwi7wujO+hu8Ddm6J0MccAMIwgu7b5mBYsMdmszhWXGLIXaANpyMYjsg8DOsXuKYN11f4+68WEzomjebZTxA4H8cxcjwc3XI43EMP2PH7L42G2SLeA1XRwgTgCxgcwMClAZQMZsbZqpXttd9nFHZWFys95xzBJItUkFDOq3+qJvs0E+Os+9jeMZ5jtJzwPKGtNsbcamZZKnT6rUjk4Vu9iYCf+6+Z/0F+MbZpFURKEOkbjrdJcDwtNk3humOtorF489Ofjunwvwe/+A/bVwd8Ae6cVq4P+Ot52457MuT61j7bbjQ6iIduzXoxsLMz7h9cJ5DIUHjjkPRiQRsc7dQjtR/cIvPFiTjq71kZ2SvGjE4ol3hjUG4o0bjyQJmZnRdiZue8Y9yxX+WFOdM9XthlLpygUZkxLjgxvCV8qgFhu50+2L5yjxy7TKTXrZi0J3vaUblgN1HYTIL3B8anfsb9i/wTEe1UhE3UdRCMxXQs9DjQVMRiai6j8cAdJTPhIxA0CpgEiwJ9zwcm44FS2OBAGdkonykTG+eR4sx4olQ0CjYlSNrvvyqaju5OdjUWR+4gCkbHM+QBIoBXKxtIWP6/trpCEx+wDMgNxB3GtbxDfoFoDM6qxDk2xNqgT6gzBB2eE/IOYovRMSI/QIgy6eurkrszR3QKvUL9xq14hWVEVoh7Q4/IBSI2OE8Kc4BoHXpBfce+7GdYauQNxKMZe3lAPkIEh9cVcoBIKywZdQ9NPGO5Qo6dD+EsM67lBXk0okk4RyXOwRHrhP6C+glB4jkgmyGe1OjYIT8aQiZ47RXt1BHdBP0IdR93sstY/iAvDfGg6GfIZyPiNzhXCrMooh2g3xgl7uUnYzlAXhmiuLGVS+QnQ4QBXmdkMUQ6wLJGPUYTH7E8IWdD3DkTT6/Ir0Y0KzgXJc1rR6xX0P+h/ofgAp5/Ie8NsXUHjiD3DSHRpC+NkubOEV1E36G6aeITlmdkNsR9QhdkVyKOOL8ozGKIdoR+hzqae/mZsRwirxviMRlb2SA/KxFGeP1GhiLSCZZT1Npo4orlN3JSWiBLXMufyCclmh7nMyXOjSLWPfob6h8j2OO5Rd4q4mkyOibkgyKkgtd7Rbt+RXQV9BPUA+NOdgXLX+RWEQ8T+gXyRYn4M5yPFGZWRJuhXyt9ru5evjOWH+TOEWUwtnKOPDgiZHh9R1oRaQdLg3poNPGC5QG5ccTdwMRTg/ziRDPD+UZJc1wR6xn6F+pfI3iD53PknSO2g9GxRX5whBQaHSV32RFdgb5E/TG34jWWD2R1xP0KvUMuTsQjnP8pzEERbQ19i/ph9uUgw7JA3jjicWXs5RH56ESo4XUPOTgivYflEnVh0mUFiyJH9tFlxl6+Io8QDTiLwhwMsQbdUCclgGeQDeIpGh3XyI8QYvC6UXL3a0V0Bn2FWim3sotYJuQlxENET8hniNjhvFOYBaJV6L3S54VzL98zlgp5BVFGYysXyE8QQeH1E1kgUoMloh4pTdywFOQMcTcy8XSN/ArROJzvlDS3jlg79Bn1nxKs8JyR9xDb0ejYIPcdIcmkL69K7tKK6BL6N+pO3YrPWF6Q2RH3PXpAdiNi4vymMIsj2gn6Peqb2pcqw3KEvO6Ix97Yyz3ysxFhgtd9ZBgifYPlDPVEaeI9lhvkZCJgXMt/yCcjmgHOF0qcG0esB+jvqF9KcIDnNfLWEE+V0fEU+WAIWcHro6Ld4IhuBX0PdancyW7G8g+5NcRDhf4L+WJEvIBzvJ8MBBBpc1yvLjuol6GI8gqDiDiXO6iXoRi9a4zyCccip1AvQ9d6fCcCA4Be9p3LGxSztFBk7wuVPDqXE6g3Q1HJMRQbuXAu17z6GY7sdcjyCkctDdwrcMzeLWY5di5fcBQ5h+PiLVGqbmUJ92o4ivyHY5TOuWzhXg1H7W1Ry3847uUSfmL/P9kaQSaotLD4KJuI5D1FilGUg2iUqL8FqloyTDSTyMSkLhmjxOjR+xKaWpjd0BBhZICIOHsZIsW1P0Bzi9Y2pIWkPclzHwflJLG1iCwga2G5p+uIgkxZUmyUo8RYt3ZLCCKADdQbAPxC4J+DATYiuECgBjVBYXAHjAeksGNQ6SaCjTa2ERd+Irxj4ULOwb9vIMZDeI5ttHwmDoHlnB2wDucAFRg2AJA2tkjaHStVshmdR+46E06etJ0yOBAEP5kLHe1Vkj3WSLHEdXer7oQqUJ5wcHKA5PNpBat3jD0DnOrLJOiQMQMbXe6B7Su+os7qlMaBH5WWv3Fc76TUxTcHpn91sLpKWZtSJ+PJrCLVXu0Gq8rbY/eRM6HCWQzjy163GE93NW/2qf8mAXUTv+Rn/A5s9gVmBSLnQK7oNiyL2wQZMKZTToWtwZ+Pac8x+3/J4Tt4Ln9w9vfKIg/9BrPk7JDqrl/YnkNY4mMysv+u2p/UXgcVjMeMmicoPBtESoc5Fo/pJi8kqezCZUezXEzhgmfyxqCp3XKILJcs6gNtch8Z7Lsqw2sFo8Oyh60wHLZYXvQeqxFe/7ZRiyE7RaIkd0hkSynDQspnXlgz7tBjZMC7er8eAG3kpwE35LsGYpTgumFUnGpBzqd5a39fFPgywnKqfbijJ5BKvGzWj0T0JBrQ9rtHBho2TVyivPhl18+DDB/0vvjzLSywsDpX4xZeRjfKMDbMcMqWprM0GGeAx6lwQSMcRRl1WGT5W1DxwqpaUgyi4S9vPTmEXMh9q2FcigVzT+iAJB1ZOEkv1Zb7YIk3CFsI/E5RrGM8O8mAtcKbB6XED17CwRhQ+DR4+/g3ioCbOlRN3aoheDAM2vjGyrSj+8VF9aRD4g/0G/kjDoEiAhcRldYzZZgDGG1MjnkUzgkqYabdv0cIdfCQwDSFDR/bKFZo9LrmmNUB3w+yhKsxke6COMA/2ueSRN2bq3oUyZiNKuNYMkE6NeLLebEatu3qDptMPSGuMFjFKRbuPeEZAQhWUzR/K5O38KHf8ai2IHmNFzSCt6shbYtCeRMw/pEEj5XpPDDoscBR5Vp8y3kUbSy7+GuqdMlX4C4uAwZPCYGPp/QYu169WSfgqaYOmQyMIYpO65xPpzpoUxDXshaPQIU0lIcMimmCL1WkpeaHlohJcdlFOQ8qcIPKHH0CrR7rRXv9IMpfeYxufA9uItZ3xj5WxF6AYODHV3OQ3pxgD8JI29dMD7qu3vUmGDk6b3vGgExbXo3ekYVpkArLvHehF6V0mg8YRfvRc4/wSy6xm3dQH0YwOZ4Hl17p1cQg0A5vvNJKhr6x1JFqpXbO35Ipju2yRlWQZpqptyLiEgthsrh4pnJ93tTlKZKhH9USEK890s9BegyEYIji7cWvp9zkWVUNRoci6Jr+ZMLNIb+cAC6LV+3TmkQV+20rR62Iz8MMty6niAknUGbal3kHtjCBZgXkpcBGQAOd6g+Vz6kCwgqeOkUVE0w2EiqZd1XvToqrLcWgZw6YbwIQ9K5xwBBV4IJOqRhHcqGuF+pXjO+lFoUxuqyqp9qNCkZTxqz4XBru1ln23hvJrI4lq3qKtggcCiunnGIqbYvwq0SQvHdVRBTmOhRq0fC8E8MeQu6JAnfuC9M8KDVlUgpJlsxt4YRzhc41M5wvDZCV9A2wbP8dT0nj650luXvbVyblNo34yWO9pzSfXq+XVUkGlsBkSVjT1mrS+Vh+sH0J+bkO81sSf/h17tsbFTw5y/1YsAv5p79E8/KCEKb8diIvLEbJ0XaVnUZxDy0jM0E+UJLtKh6lmjHtC+9PNTmek1ltBBRGukhRGmrHWrKUMnTsjwddUYr50TCDjDUVyUkFtHgn4a2vL+K27hluqxAcIvKSN4eZSti6beGqOl5V7L4zV08KtU7L1NVvnYSppjM2r6+a48Gnz81BzMi5gJs+fjW3kFN9Fidz+LRKSKQmyBXDdkBKDEEu61+BWrT5oOmjG3AeFcPK/lEOxuFRAYfjlBe2Uj8dmtotd/x8Co+tEqTv6hMAtQMEBcAXADQGEMpL01O70zyk4R9DgB43eeM/qoZtrxibw0M07CFYbNbLT2+3z0a9xhrl9nP/SLRJByKTDe5pfeRMGpTpOkY5OM6qfsHzZBzK0qjZrKpoa0t/vHn79xBOuS4GOxtLH0qWRMdn0c1BOVd9sJp7ZvVQPa9MghCluAmgRpc16ArZ6HkS6hXfDStPBjUVFcndE6OxYJAXYN/ytwNvsCJeLdfSrjqeJeUO/Yc0I9kRerEsedeB6+XM0cFhl1AX/GupvOEosNiykOz78uvPtFs3JSJl8vYlumRVI42uTDAq0dKsOwoJs5lHtqW6hkC4BCuwQXXv+vVCTloUiJwe7txlCyt4BKNL7ec6Y2jNOkYSSRWMEtDC7dGLmmZnQO75rX2a0MJcAe26tJFTFVOlVKi4oxV2fijfL3v6kp3D/zGA/j3SFKLXO/rKmzBqtfZ2z8EGaQFS8yaoEoL0sgd9syin0TRstQXW7KpRHsaBHeh3OzZYOKLVjEMvREfc8yXl3a9nmieu4Tw3JucWj4U/Xk4YtUKTFpIHwB5zFi20ksJLcZ8ErDYmasU0ESlQPNUhEefP5o31UXCQ4oJPwXx02abNJATQ7rX/BXK3P0/0BReNhqTEz0TwJRZU2vIZPmuMy4Jhizhr/Ua48xSkG75/KeD2XSibdhPuukf6QsTNCkDtFua2k9zaHvS+XVuapVFK2vgLsNhLiIoGZb36e4usT8/ipVPjOUaAp93Dwa+nHZLAs933zb5VGoZXe9T7Ly9z/qZHkDJ2RzYiPi1dUy/eJ3G3o6VvK+INNDyVG3aB7nspicJ6eEwcEKJhluE07R4ivIsRZ7fqT2l1eZrRaLI2ZrLjBeYjS7fgkFoZXMolJ6eHdFP5n99fMVlqAIhE4L5K/+5+SorDCf8w4oMo+DodPvt36yMMPJAlKh96klIxGUp3hVcY2qfFGAaky+77WjSxSUotnwUAYoyF0taJCAAu9ynQ3CKpNIa3NXZBBI03RwWTBiO49Dblt8JqqZlBYi0bQysC3i1ZS0DpOrPerruEBYNw4DpoMKfNnS5s8QOtiEIxpRrdYJc4qMQm44vcs496Szn3VsP9EH68cosx1Cp1naGmDn9HKl5aePuSsjrUX7AkZlhiYz3rWZHZveM8/PenXTAD+0EUFID4M0v7G/5m6sKOzf3Jp2EkSu8NIL6ZKNTe3C/+nTEqAD4kgN0sGgcueu3X73o/NvERDPHX5hcn+zcGEWnLFeTww68tzFtbsLI94++QtoBnv6lo38EP2E2DazH8Q8YloOaRv5zWb/7FNmwcgfrPBFUp11n3ANz23nu8L+06asWSkeoVAHLD3ob84pcXiZkVYSnuWUgB2e3tL9bi1D9nf9z5a8dMXz0BuioRe/xfAnlALLtRZtriAjqQQynJ1uPh8Wjs19aP/nux0ap8cwTKMS63jR8N6M25PBtXUseGd4Lsxb8Ahi7Wc4YPaexjUPiWPRTz/1/tH8xolwbs093bl+H5fblttkiOCAl5kjBaz9zXkrSdO8JRGVRIHFicB9R60A1MrKI0fxvBavf9a2yS6X8OY0xOD84l4Hkzzt0o2baIq/24dQvZtSENwF++ncOripdS9xKxbND5L1wV27VVZ7f8u6aAriig81Y2AdtJ8r2AxpzedwUKscPSq7o9LCX/H6Aa4agwRumovtS82UrZm7ZEon1W7a+QfhR2+Poe5T6tnyZanVq6x9kXSwx1904PW1fhbchyQRtesESBES+E/7gRliJ2B9jn7ZeEygKb6VTer/Qch+30QpFietmCwQGf7bEe4r3vlu6shpAH9lslFxLZt6ej8iAMqyrKELYpXl0wJpZFK9BZhIy7NJATNuTpoebwaaw1WphZ09afHmWt42/r0uPLrSqoSBnHaIGCekwWPLNRvR1YJAFQ0CectkqXbrhITJ02qaL0ofa747iGyamES1kWAH7Z5VQi65rjizLuFjJwqM1fkybY3A+mA88B4aUQZ+WcbmD5m+lDAKShcveUWLcNer53+GKI6j1ebpjx/2KECF7e2R0m/0J3lIvc0rFMPZ4SrIeGu1gXLtw2/IAAMrpNQ1XNnwuxk4oUnAqkQ+SdSTWqcUWxcyPaszo7PzfzOc6ezk+pzzu2RUzaTrDkXkDvssg2z10fi0NXlf5HFthiX8jtxZ/TvuAlKg+cZjLFlblKYEP9K9f40kkElh7SRbuPvzVHv/nfnHiUdfxvtiJ22jY/iMS3ASS6x7+BfPFf3XEfaOtgzynil4qz4UlxDQGIZ29zu0dn99HEM294G15ISTB2wehfwYaIWeZ954nfBK6MpS+dZPhLebqAPfJ23B9ncGH4/LfparynGaryOutAMp4/SGSxj80O8yMDVz24AonP3sKRI2BdPRkG77Nc6yge7me9R14r1OVSWl5p1z56mvjFdXNVv5XEl4H3NUlqhNmZctJpRsQ1JRuZHmyl+kOReA94mudA2nZPxnH39heZS2hk3izzxICfUnmmD/9pkmU/8AHPooT1PFqHDUU6H1cSw+wMSP4NMz/BH7IpHuYlxu3BrsrznIxSsK3U8ASCVOllIi9lMrblx1bYjFrW6U7mFE0CzrW6mtHssNf6+v/EhDoQLRXs5yUtiJlJ2EkURLRExPBdKVMpPXzWlQUDcvBVu++ugTE5Rcj9CM7hfzdrdDuYFf8MXt+ydKzXtLH1QsF/lXj9W+jXJu+59uvJqmifM4HuBhL5ifGlrv4OjuPDBshapHIHoHjjRNBBZvHCqG21xl1C8ZUff9EWXFveM2nIiDhm6YgbWj4FJmW3wfOulQYU3jkcepSRXtHE4vtBdGoT3HJNFlY3NWAX3vEgUJtCKwLH4J5kLH2NXEpmqeK4FXq+YHLNr6YL8rAEztEHb5spTZy8ZVGcZjp2qFPskXsWhOhvHRNCE/xL9sPeNB36ewFnV1+4jDMdcNP+wR5CuLKpgdxe2u0RV7AYCK3vDe7UGYgpwfmjYpMwolDnedPBfOBxlL+nU5U8/2EpCSYZNavz945qQtM259MvUAe5U7d58FNOPjI4BG7ffjpzBO6vIp7VEpT3BsUTb4hjk3TpLNZAZN02yCLoOoZvMN8eSJ9bEyXH39MAZVWPHME1S9F2ReBWUzSxt0/N8FK7SJRZZkFKcLo8i29j5kLYoJvXIULEB8Nlw2JTn5K3WYsOK5MnSY7N4LrFnzhwDobzBlike3JkfwB9l5Z4+RizoBC99mnni2eZ2hbeZ9YtzA8WUtu9ExbbxsgeXvSzYbnfiR14J5dBpxQmaZGTojxjVGGMSV89ep0nLknRhh/3AXctnN4O3tYR0Tam3XH5CJMfWHooX5fjBi3tK8YOPy6c2ZtYBaWVvr5z+BvDZkI1tLDX7Z+P1omQduWS3WgFEByj0GtWthgUy+On/wzwgNVAjIeIWtIq9w37whabf+dTQER1A8v1fLAvAfIF0g1h4OYYUTyYgauOn5kK0HBQNCr1vvuYxBDRz+7Wgg0hUqWjdwlJpKjY2aXXu4O1xsz1fLDObg8dCKU6Pggpep4BMeaTqPl+Dui5yWTEQsf28dNK3QJSLX/QZsaFCBcdOzc+QqfcGGq+PNiJngmMVMuXXlxo2ofuEKua/qg9OKWRomHn+sYko4SpBpX5tbTpBqUxXzhGgk4eKGKGiV7F1zswabJZqPlZUjo9/TSE6AuMavW3mICnWv5E/VGQEd+CmabfkX1kyts2Qq0yep/qVdfNQaR6vtQjiKd4Q65pVvYQ2iOYqVEpkJ6jjidKDfzMpnEGNg+dynId7InfX2mmN5ilDWgRRQ9gcPOs/qxQoeeqX2Dk25g3bCPwMYwVLOODpsP8AvkGAO82uZuMpJgtOemsQfBy/QOaQANq49d5lbjcFNoLlBsLowzzGFB0DD8XtOrJi9UDy6FChJFaQp8Cr/kCR7acsuGmpzgeXuGF2gpayYFKel/JVbdqkbWaKWXLF1z6hqZk3gi8fSq7kxiONqAPmEnyualYOFmv5JN884KmxWrblUV9j9pDP0n1axYfkBrriiZ5Eu6MGu4fcJPUbw91OfGp/11kRpp/TdSSvsBa5HQi8Tr9zqQgvdy/gQ8sZIIa1tyOv5N8Y7wMWfQTJXpdcLYAPvakh81TvMurOfvrnceqK68/b28su+BeKEYXPwfqb3Xu6vPIOvQ0EwQBRZ/+Pu+/GD7PjxezvJJV+5Sb6t/+JV4p9BcvI19kQIxZuSJm3NagGhQlL2NdMjtWeF+G2grH8p0yyDyy+Nja7sw/hrsYnMxCsctoXsShOIgokwpmAyILbC0VxBAYKhr0UjZEdDiyb/iIWMnTDcERx4QnCHXu6IsO0j/xiP9tMQc7huzzGnuhky8RbSUbgKKMTU5vTlyWdtwyxfb+BWJPLxkWZWA+xa2QDmqiP2UgP/KhOOgKj6zwqex70ep0Scg/ujoUMTkZlrIwg52Gqu5klL6DudjuNWUDb4pP7FdvLiJDTPSs/JOAfX5mePCUF4fukT15+4qPfz1/20wZE8xyDe+75dhiYlfgc/zoZxTuTLH30344KfMEFsmJK0k8lyCVuWx7T/3SsVlZT/BZASVa4+lht8GIIxCTuDnmIDdFK+Zd6opq1Jk7n7md2uvNwT63Ui3TIo30VUeAA5kuB/K5x1NyY2U7CjEA55S3sTUknlLX/olNP7nJRmb9koTYTBHaVEoScpyvGONOkDvV2UFPZtiTRrHpGvvDVx5bJgmx2SEiG+CYGK4m5rkpipGJ5nSlofNdqqk8PeTTt4uLHKOKBSpX61ki+suNclayLGVzH9tiHIq66pxIaInn+/RZ4kYqWi7VLer3U0oJn7KUNJkqckmoRGQiE6knJiGwxkuu0plL4IDPaq8BNWJzScwFIRY9NTAkcs/LT1UIaCDYjC4IVQliLDruFAF4DfUb6sNgKnhDW9gLGSaQhNItg3Tve3oMFJ9cIWZ0bWE9cy/TW9CSoILSGQHeiJCG+EMtmbCuozvaH7ls0B1U9VSgr5wSMy5kG6cgIK+X+HzhhhqJUxpWEOp2/N23X0ltkmiluuiu/pVbKFJs2ScOpgvR8z/KVCIOejWbe+qBtIYHfUNqOSttU2ORImxXsdqFY+BWwgP4lOXzZCKG1jg2PG38mQpeiCF/0LXnwFpc1b/FdKsrhq+o7tRE4ERhPBQs0s9IrLNQ7WuZDrcCdyZgALcLPSWAN/WvNOLn5dSesXT9b9pv5OioXK6BEByGmudId1+MbuYahYLneouxuVUkauu4QAjudsquuRwCsqekRiGh5jWEAbD5hmpKMb70FkRx7AkD4j0LsJISJiOWEgf/h9wbZeUFRWLLjd4wccqbNuyq1eYao78PAZQwtRCoOjMgz74LAmJSl9RTYP4RmCoj+LtLo+6rYIOQWE2FkXsvVpLNTl2LzeLGVrjF0R5TtqxqhVCAFKUGUxWzioQzhU8INnD0z/2qZ17zxCEYK0IH4I4MrB1BHHtnFix16HcSf1eKCTgIZBHs6X7shoxqQSPJrvqYOTEWqyf8j5fjEk6+tvhxnP81MeuHenJ2MeejhAWrSr3mqrAPkfBJmlxGuYZoz1iw7HEunJT5mnII3U4pbGtxYKM9oBoHGyTv6cAiFkDx9CA6/Ith3P4jrWF18H0Y159ocvoO/GoqS9eo0wN0wKrbWI2ie/H+7MHrS4EMStbmxhPs+epmHzneU5do6q8mXVElHT9/+TpsBpeh4sIydFndfTKSqj9pvQu24NACIaL7k3XDRt73x9XNAgs0Op4CbOttodCQ+0IMJSfbGo18jNVdVKmPhr0dZW5OqSJMFtERKjKKJIvweGl0oO6IafULYZfhsaBopbYFKk/R5jURTFcrtx6XfLYvekh4SdQNRbvDgW2CGzmqyy2Vb83Etpr8csFHeJ3+lFUNJI3i+AmOcjQ1Sb8LDDgYhceTYylaLXzem8Oh6tDQ8rO7GjS+jKycidFlxpUK7asxCBNZtuLhYidsV1gRVGxBYG6cMxBxRrYJxFD5Kl3CdLfVnmjtOOejKiY/GSdafM3gOxSYxLqgZjRoWAkUSonOQvshoYKntW0KRFCnNuHQbw0zmyQ7XIXL7nuRTosl1fc40Jo2qIuYlcI+0mUScD1ziM0kLWX5n4n/1mR7nFdJ5yWmolu/FuM/GP8+YiD9Ye2lY3rjIdneIjhAGF5C1dRWhAwVBUQX4c18ET6IqkdFJaoYUpcaftsg99QSFDNDYTz8xtQPfJKJEWXaBC5FqtdNX5b0YkNJ6B9OTavK4pZPnMadoRYOUuZyJccwmUOsDjYxT/u5tZJGLNYmPKL1Y0SuVHaQF3dcJpzRYSqSFDkHNLbwJ0IH0vKrBkLwlP4rILrU1AZoxQG9ypnr3trvVUkqqwMi9zToM9OsDzDChaNJgRqlTSJlr4zK1uQX5aMCgGYz/FSUI21yJ3qePcRYnzTEC1Adkj2irH3XB84omDl9q+JaJAY5l6TaHTt0hBiMs6Ec8NVP3Au8oSmyui94KzYvGekjzMCMOYxpWv6YG60JIG61EAVIU8z1pg7tZlVHmZHB3d6sBBDUCseC4chYJnJMfUxavi4rOyNQuYecLe4Mxp0HwZNw2yKxadG4LhHTlHCmpBz5jL4H0pYWlkOMwQvp673PmvoEkllTh6i7kRindanoNRWW9xVNPWEMy0xsllAqL6TwxELca06gYvEsKZ0fmBsuKVoaKzXQu1DQpsMW/7tVr4Idut2HRC1ll0M02kNipMWZMGQEXq8zanYB/J3l4pAIw6jB/7IyxZ+h+xaNaKsGmZloRFR7UenqVQPCsKaALUqW8Sirckhp+1j8kAE/h3o4YRKworV5ON/1i13Gw3exckT3N1quKKBkO9Ix91j7pOOOgmrnV9uj7+g4EArFCsDMVZ0Og6hPr6UjQWnsKMaADbAPTSPC93xrZahSOGIjd9+ME51ybx9bdMeqioJ0pWhPKkVSHSXpLe6zUUeFcE7EIFwsJmo/tB/EuiA3FixiGD2EHh77MNBs9xVX2hkqV6yPmaYI8uCbr6jaUTWyE71MXzydios60ifC8EqbesPqLzQjIta451jLn+PH9EjCQEnwKk5FnWTCUpRy84NuP6j4Y65lh1X7IKS+HBTmjuMoLrlTrHUE1+eMLzk8NTHelbTdEEZil46VgnC/lTc1MzKf6xCR+pPzSF9MjRSQEPlCl4BgHat/K8yKRrmNYxXmhPjQOb7WT0guGRi+XSvQyrDAvTMySGUMrCg0RrGLYr0E/Go5NYkmuBNQGoqGjpaU5uYm1MFOfZ/z8uQOaPvGG63OYyTzUFoohnAmCIHuRb8V1Ll2AiqCQTNQZyrugvsY9d2l4TWVSsR6V+m38u6Omip3G0aPKY83m91p46bBjIZFJg8/89KXeMYsZnXNcUTjphSOWHXBWl1l4slAuKARI8KBIbk5QaUfugqqC6UOrJJ2se6NlT65Oyx7qpgdWrXMlmJd/d5VIRg9Fq5w/DY/cPgDVmr6MA/TaKzmcOFloQBVCbAq0bW3TOxgSocvnLENG5Ebh7/NAMvwX2HJV4OxKvHEWlMDISmEUZQnsmSk4Sc4zrBlQJuSyOrZHHCgo72qwElGvWNsxbOxxeADpnXqjS5EViI12Vi0B8BDYu2bYtBN6S+UUc5Hrh4mVGi7R3154rCNZ+Js65meYzX26s9ftstmrQpOYNq6M1/GLZTEKRpql0hXfv3qXP2Vz5XMyYMfhZkvRvCFfLHMz59IQs4JMQTlZ1EWhuHtApFETh2BXD54LQYio/hOaIiHaPpLqa+6yyXq/s2oVvr/sAVKcT9f2yQA04eX9TW+nJ2l1bUyN2eeUlYZal7Zo/GueGrTugDzTOkxLAJ2hIr1llfrt/5+smpc080wW5+dcCKTYVG0Q+17MjIkYz0ya1kyCB2z63zcFcXJRZ8vOOA5A5xMkOXzUbcU4ajLxuOCVP6cqt6U451QZ7O0uOZhpyT+zhuGK8UwrymMWfRHUdfJCGjlEaokM+kG9lzdZP8jujMe8qr6cDNM1u/csLJ4FaoQ4vIe2KA9E3tzIatc8x0Atu8Qb56qdzxXh4GWZ1n1YyZLg89UObe+UjQn+Vt6zCw62nFOEDmZWB8tn5XQOtyYRN1FCCTXIgPZJ2kjKUUilROM/lmcCm0d4ZYUn9H9UB1U+v4o4T0eLHW5xhlCdF3ITR5yGA3aP/I4/BHYG3rEYHw1aZ7+PyagdlIOnaqv/73LTdSbnXoeWdUa6Cs2qf8eJaBdgH5MBG3dQ6D1Zejox2Z/9Gj20CPYQ0yv/5+XepfrYgfGPFEntpcGXkeEqxVeRIl2o6KL7bdzbVE4wlPDUqxogH2nWOe06/1KHVqHEVMVtmZtc/hk7Oh+3cErGreciskzYWeZ6/CGUzvBbBp0NntOabAH6BLD7MpHgr8B3S03KXjBauDabBeKxU0VjAmv03ZYfpNB37FL6ANL2r+APfLB1wy+78G8te5I4rvdao92d25ed/qGGypMj1/sP0cHmmY4oMgMiypcPKcp6Tz2/KdnGmIFyqdYBoq3sBSEej8TS/NxgqJcNGSnORHQ0lpV8zhkDa5wUIE3yN9ljn00NrqZs6O0dh6U0rBfgJ2RP3zpYZqRNKCEcIYC24xI+QtfNKgLr0wXn/Y6fDhA2qJtvbLs/vMrGyIxhgTPh7iLttaXaNfadj+C5zKGVFIxfMh85p5hwqLFpvZ6NU6DO509yClY2h1NRH/GR2MzveH0RdzEsErGtfhWFda8/95J5Ssm48xLAUo5GdxrppBNmVd2fLEEcmKq3SLoqBnvIdh2YuBDsPQYu6k6JNhFFeHltXTGN1Cxrg7daIjXxsUifyDN3VuThYIqQ2kfGouz/a/TFzBRbdu9sVBRNNUVe3gFfo3X4NktG5NVY1+zi7xs+9fz6IXGs6kMDKbseH76vFq9TmQiWTZFhzY97WSkKy4BhbVXv/9t0G9xPVKzPZDWgRvRWo7ULM7ovimRYB9abhG8GdhFilJGIBOrkpLxHcVZpv98ufIqDhJFtmFszUGAeNzfjbNk5G2wsSlmjHgnCLIv1AyHXJsXIQ2/QnnF3BmBVi5uyosjCk5ojittZe1W0GGFCx9HtjBU3jiL6aLDniDjITG7TxtCd1AHdsZ6dGbBAy6Yfep/FBaP+sQqNhrDtIfdvas88EfpOV5sG8pNxl4axwG6TcyjJflK8JYQQCHdEjhpN/irfOTT0iqKGS2McGVSNs3LBQ8bEJbhtNRpeOdOHGb6/hrsCTbqsxn/10NqU0ihmR4HxS7IYk5/o21+NSJV0G+Lvyot3OJnc5h1xWbPOWvlrVw2KAbmGenUNqnqIxx3CriuKshYFahA0cZPfZwI3KlS9IBk4zicq4HGbMrcOqQIYyFf50b17eF/1qCW/215qXSZ1Fr7sLWJNTHDCIhXchtXQOGCgQcopHOmRx0i+94hopPqg0boOOrSTV5sTbNnsB+gw3d2bM6R4007UOKex40DHdB0dmaExZa9HlBsx8axlMRIJh4P/qvTifrlsTceblL4FvAlj+mQgP99dBEogewSgOsfTwXjvZiAGnTsE5q1uBGPCisTNqK+AXFP0HCc7h2IGAskUFe0D1xBgjmkR0YhhP6RV4I4oda6n3wPvzFeCChNqpa6GpZy7PA5fnE176mbz4TwszXSMEVIJTN3aBjMG+pOQF/ZNZOt0vQuS3GGCJZYsU/Npqk31lN6pYxXYFMtV0db5+43Ldm6i15e060MuJkd99QM6jvdYVsJONc0eKVQqPitQE9w2h6/HQg89YyYOS96aOTLZJD8AV7X6YShjXtsY0dmvMVt2PctdUQjuM2XLE7VYXLhXf92Wn04jxN2bHCSnwsZL+EzA+b/rxt6N+QJPr4kWGNZU46UbOiRT7MDcEM/pTKwL93Es4y1wo86u81TA7ow5jTEq1fsEzAMIXSVrGGIO7U56SVVn/zhqIBRHrSwfLfKepi5CAMamMpJXPNR+vz8Ab6ggROrNLTfkKMvXOigqI5pGW6fkrhGlYT3GPBlWnHkWnf+qwhtTadcWJmNKvv8zihblwGiLow5m6Ggb2qtj355au+5akuuZTZC+YosT3/Ml6f2GbR4QxQb2UGKt+3nbD2ODCjeRu/gWBz4H5/KOWZeqRjumD+YjhaK2cKB35JfIhK9vq8r6dS7UTsRPh459H+dKoZCk6ylW54UyljyQOfgNLd4jQ5JhDza7MKkONcSZp2uMC1zJ5n4vXfqeRlnG99xG4pBtu/RFVsiTe9R3CUcCXdAiilUSUzo2qcwoILaj4DDNXSR9EcXOY8HzjVkSSeV8G0N+IxnYeSYCs1zaHpLMgZaVkvKLjHA1B79Gm4ar38Ty/MvPzU7xYrFBv42W910E6BZozRX7dpm5F6otm2OePFYvJRNDqjkTmkrTTD+PZrw/76ZVPK/mDcf4y3QziXNNuWXtyUSNZb66sc04fCIbmOcRjmNemE/Isbb0FXSPxTlcYHfxvr8SBXdbfp3ihgexm1iVX8n69jmCDz2K3i6N5qpTWqMR+kVWb3dPEKZhmw4xMl91uBvgls44MlNAeLJEYoT9hu5yiE56OYMODIUKh13RDfDaXzsy9DTGu0A7TKv9FgkB9Nq9JuZGD0x8cKTdxgWsXXABjvS8fON3cCafDxNUqcBaCn4mMzKcwp9USeow322shFwejg1RNSe0BjLNStiDs4JNfHccDKpNt3eUNtBs8Oyyrc9APiCyfDYMz1lisqZu6MYqct6xSwdhoUVIsw2+6K6rl+8Slc4beDJsBVufxGx5SM+hiECXbM08VgtNvCVhPxpDh5UCdDH3j3FIv9LKs1xjFJi6iNB0rXUHN/waXIDrux5syHITNhMM59yGsMIqt9rS/bh5l1WxkPDfg6f8foSnxiM4vjctoQJ5IPeq6eidcDPvWP3D7jrNMJPI30hhtfDdHZeGOVYmq+lQNN+Cdouy2++mc1AzXwcT+Ha/JSg6ixX1kkyIe2V5lDtP5Ck62Up3MbnAq5tmm6W7vaZaPvCCMiKSuUWCIb/yiVB9Dx0i2wVx1z+/IKsKWabYWQqiW2RNCwPwVSGslFM1VCv1b/sZLlUevtSmKG84bietJSK8y4gr7EocGRHJYQet1UcpRYcdtvixJdh1n8Dmw8tWzM3m+lIDRqpuBLX2YlNRsmS34TozW5k8lJLz2zf6PBIwvDKEXD1PgLPqIv7hd+s+vxgqQhqcDu1TodWxRgWzXvUvrf9giEZsL2ldIbPdLSOb0mL1R9Hcc+wv1sYC6Fczdc9SKDBGBPlfKzetQ8MZj7DxbmyHIWwlEiYAGFLB9C9Fkjpc1HI6yuh06/M/pRTKYNGWuw4CFrnviPdO5iokZKe1b1CKysq5aCf074nnhaCU7t2ov+rsH2zK9gaInqk4r+cW8N0krrOEyjD4+dP8RC/zMDaAvxElam+jQ50XDHsMMWgwGUFCHE2ayUgLmqovFToDm8mm7hKGWmnvnC8KpK4Pyf0dyiD52iGhySg4iFOF2qLRF9a6I/Fv71hi+HdK8bIqL311S/92YCikLgxr7xIhoXLiPpC7bEkNjPScpPaMeQjbwxWIWfTPhI+uSbqOVG58Lx3SXzjl9t3vk7LFON13RQkdJLs5DGV682xgDooqeXv/XoGz3AyUN24lPYrnXPgXVjA2Kvk76HosZK68zy2OWAFBGZiUSMDMmx1kqM8fg+ly6f+qiuumoYLk4v7sRalOVSaH3UJC1h2E7txF6lZhf972bkt18Bg07hRNuvBVCLe3q9pzxmkCAY5aF7RxRW/vdLthu6XHFQlMu5Z0sBibaQQH6IRvSOsrVAl4m9yVMRyGDmolnH3aoKRhwEHH8y7Oa8cu947oVofxyuZGbU3qlvKFBgMvqsPObwVGqAHAFexJXI07D7R/6s5FN9lR843j4h54Zz5K1fYz7GkMeqjRN+FZ14E7kp4RjAB/AXxMfpChfuoLlQTm2B6VhhXZI2jyaBqnPk+DFfJm/vUjDQPr30RllyFEIWW1tryENbGzN0qa301p14ugY9ppdNQy5ypyQMujSjwBUhSG58c65JI0Zd1DJuUFGdOXBmv3tm8tMvEtWdg5j2r4Jwm30sfgYn3dBjqRY+RLCGhk3quZSzaWtl4EXSd47Q5elYwvHtJPErc2EmwfKVEdsPei8Y3hIYA1edinVtNf09gLu31I7xK3DTg4/tF5d5rSRo1Do8b9myT2+y0EmoY/lgi5iQLuftMB20j1AAEkxjXt61ACV5orVAOuvni38QmKZMm3sVuqGAw9ampW8/0+QT0qP2a6z9MasUYfPXAEF8dYNhtFS2WLZi8sou+t5auHxlDqizSiJVi/0tJcqXi6jolRn7pJZ2OhdtINCdXR5GxWIfHciTjIe8bviLVpQv6IcjH5VA8Lj6jHS4EcsxMLbQuod0F8XF7eD8yfNXWZ4ylQ4GVsBuX9cZCnV9Dz5ldLd827us7Lg5M4juo8377MasOdC8Z/kgX/oi4JD+xIY8ddJQyqSH7DMLQW3Rm9VqfbOFt/mh8cehPZCne8u3gWq1MZZSqJPo+jN4bvlsNSbXv5qxfgCX6eD93fsBObFWjteLmxw7wKxrW4Jf3iV7Jjav2L50VCMM/QzJ8yV8zdMKf269BlNLqcOwzx09LVIp2bDemil+cqH87i1CBIlDY0gsc5Jj80AogrEiapvj7fx19xoQQkcYxDlmXC98P+47iS7nmuzk50m+t1PYYmNheRI2ImF8Z8KpBN0d61vfI5g3Hqn9Y9R8ZcTPsy9fU1aU0wl2pTSh1GAVG7SYUpY1CKTDSeZzgpEFHAZN8OmAQAmNsCWKVVs9Iq6MrwcQ/zh9BtS6AZU/dGqTM9Wjf/k7+qx7iLZN4pYcDtrLZ3VbxIGDJBYfUtOAKaK6AV38eGjFEeiQa7G0LwaDaq3TAfS9GnyQ5+FXTDUIEcPBBcQ+iPfyhkXaT4CmpeNIqTckQ0iEYwa2xlmQY4rh4snAe6Gnmq/wLahdsLHSv2/bjRgupWAtZ+1GiapKHYVw85yYd7WmAONQFDBc9W3+1ZwNS82WRnDZ/31ExkDPsUgQeF0Lo6RPeTqikhr0XkQhIWkchrKq7U+1U8zg+ww9vnLUBALhAJ3ULjpAVwpjlsIlVOdhfQoWHuJIIhSCuj+LvAH3A2iq4gtj75QApC/sDnvqPslFBzYv4rTrgRbQ39Xb9vl4TuU5IYqFI9y0w24zN185NRllQ6YMDBZHLzxrQvW7SoBbWNieklTJNxnQ+KMxyTQVd8YCnq+2HmBI97SwFsXGa8OCFSdYtfOhH7NdwYV3zw04dH9puID217y12h2ufNicQr7yQ3ItuGiD3dAMR2fj2ABRwaIUpnt3RUtxgjlZf3FeH0xRpXH/Nj17U7jIxGCL3YJwp6o8OdM9FSiTD+rZDaz1uI9CzbJDJLlKLWfOC6+rVnuwgrxYExCLGnJi3FiKLWAD0n/iFrvr1Blp0uRU7fDcfbmiiQ4z65pLGA95nMBCuuqVfuqlgj9PGF6khK5NPxmkvm6rzbFrr1leFgtJpNqFweqga1npa1+6/PfYbAaRe1rfvMTYWE1JNOrp6fsID/J8C88/wq+d5Wteifs5IAHWFghmAkKr+YivOMvhTNWBrfM6h+VXyuHd74wqtqrJ7QlGg725qHSVGM6C9FGCaoi/1vKIhglWIxFVN6J8RUu7Ot5RInythYOLyvYRXXqrrT7RV07b6FIKC/M0DAruwFLbHgEtafyCB1JpppHIKuR6rcX3TyJrFjh1VECsuG4R3MQL8uTQA4ubnczDCxynRR7d9HW1k9ntJSmYCJ4MvUUW3Sefx2NEXrCuSmaOgVgXRU4U4nS+84v6/G8oJavjDzvrSmOVQ1sviZ0vuGbaq6CGVLp9/VotFmtJAJWatW4X0gf/Y2Do/GQe45/7/OY0u+prDrKQosYyrSCfYn+BID9g9nzYtO7vv6kkyPkp44jcFpYg98ehsraFobUojkxjiA8pNz9cyJ9A1va8w315lbn5AMRiT0ZKHR5EW9VtFaGtKjHI2cE9ApEGVa9qWqBSmJ5+bZNvJbDO15Hj/DHs4RLxJDdvSuLryyECgwwvZWT90qhduWDBOq4XOFhs6thYLsY4V2Gq1WhCEiTUpd3528E6R753QyZiMVs8CU8IV0sJ/NOhW/n7UDexrWB4HNFHtsV4qBfEsjBdgQMkZiyNETbQYCmTBVvty9EYkhuXIKtkFJQLK6n8RsGuYYIpiZMDg8Uwe6+Yu8B/ayaH+Ev2nwaMg4XqYl6hECtpbpGfFYNZBAg7iS275nX1VKViZ8kTjiVJBmRCh30rGqP9Sng9fLSJdVZKqLhY70deGVxhRippvEUsMMqVUtMMiNvbj3iBeZxDILsDdArxnkHJoq3S1Izuo8AWY1LXe2jJbmAr6l9uRNTa3s6i4L93eVJ8DxUGApYwUrfOgKQL7+RB4BpsthUBsi+6bXULGcaShbpGi8FCCs7uLkmo13hnAEqXDmpE3zKhZeRtheCEUvI8aIymasH6pscq0yJiudfKVMRwHGhRa7zQzJir6Bsk6tZwxXtp6pWVNM2NR4ShaVew/YsY34FzzpKdSFP4Dk+YDrQ7Um37/ivofLly7//0HFADo+3/+eyW0TIHmosH/smqiztpSTRIngudNJQvbThe9DZrRD3PmxtaXI1MQ9l0Zau6IAuy0Syb8JqnnOi+L/oYmDkkjDK5LhYmLgoHuv6HtmuJbuPzDFNNJ2SII8NJ6rmXPzugFc7xdeNwS55DLtY0MV+z0IQGz/QVLuLJ1I07tFCiuXWF2AgPO8laepELB6L75psiZ5On9lX0mEN1AQrrjmkEfGjjaoX6StY901guDmWO3GeCwN1KB4pR8M/gg8XFp9gdNsr/85n8cfmH74zZzBo3EwI+8u2KDIXP5TwplDcqWCDOiSeeoEPejFpb1IL2jVPuGzU+3g4u/tbepHFesHxS3eI12CeP6clVNA1zvt1F1rs4agl0Yw6nCzeuyan2Dojk8rtqTbhEuXglaQh8RpTj+5zlj8bOiIaI8s9txiat8NvF88W7ByoeceHcDPUDsT4vP96cG0T7sxoHbIH1S00Xp0DQ7w8XyblSTiFrn8TJ6N9cQ6haO6Vaj+crwnGvxfIpdEzCLvwUNlPDa9AjnOq4BDiZtDdHb93vpuf/uF+SciJtW4scAvNasjaRumwJGcoX9SLl5b5oSoZKb7rNLGg6EDLLFeAWfdvljF5AKViG0hxW9H8gRG07G/5OrpTVbG1QTCV1vH9amvscBV4Rb8ZQFCYW2MmkCHCY021t0ETUY8YhNapgnDURYDJAcetowJhJh5Wam47P4zJvBNX5q8Jy6iITp7cJAyR00dFuso0A/q/JM5PyKY0NX6+ODFTFtrTmVxgfMTscbVqpt4J+4cihIs7yuw9R8qJ5XUe3wQ4FAFzHqi6iNv6hsCousKW77lw7AIENY4ePCgVv5vLPOfGoFtd3Epn5P1/gNrw1p5bF2Fz/PJUm4eejMcCQ51w6m5F+IFgLyoDLqqUXiVwr9YQfr/FGANoSmdVP48OpwMg+ttmmSHZcmzaDRypXV+/rqh2+Yyih1q5qY/dCZaupOH1lesg9ZWQ9XTgfpKb4H8B2qT29v4I43rgwaKKj9KBPc1vTd78GUEItN9NlPkoah3m6WFRRW/mFD/vSw1MFyCzK3Y9fTZb9NcV9Qu9SAlaSK1Y6Y28nP5Iw2ByNNH4MSpO/TkgHCj5CP4jGdUJoqdQGrH7WZOD8K1/n3zaDgLF4Vk2MyMefppz2e2nH9L6MWgsrlVKBut3QmP2putxhyRsVx7XpN0oJD5bscp+Qm+OvYmm+nGcw0GbPKQ78VC1FnsneD1Y/ALds1tU9soeESurdBw8CgDfL6d2Yz9IA2SLuN7LOOU7qez6HodKbuhZkjxa3djw61uAuXlx0AyLmhCvB0PoAL6ZBtVq5QhmGVpVGDYCYEVUU9modSNsWpCLCgrzyjunPbR9TY4gg/9LX89kpp8ugnSgBWKiIYBENDGKenSqdI7YwEGA/+UnRycdgAAtABTsd4D0lLcjv0pp8kstBfJPiE0wDUQjfDDO19t+4getv3r92wrCoSl+vsMZyoMJ5dsegs2SKwpVrJjSsFZ5PF8Y4FzIha5/TSUAm8IghU43qLA7iWI6uD1szeo6Ldp8uedpneB3lhVUEs5uWCMnGgGHvmnuwI2dCwt009ksH7Ncugyux+Yv1pAAHeUbi7RH6RTGQLWd6LdecmESg9HNjI2R3BDDGZ4rC6OxEEQ4OHfbV7DJhGOcvtbx7KvWC+prdN0N9F8t8vHnwA+xREMZayVe7rLomnytS+Q4SH5Y6Q+AmQGJ3yD9DhhI/dtZnFMihqQayYT1JeiaKbTxDrmVUy6b//CTWZ7n8fv3RKdrqFmvzef6RyTCWn+yBuGnuXc+Qd94cXU26pCC4o0JlyZPe+CKuTT4Lkn6h3wWnTB1LCNakLbSkfbvqyOTcp5ev2buUeO8lamGIurCYmsqWTlVpgtDkSl45a9/x863+XMS26rrg3V8dG9sgCM1F350zgzLyIvKpMEjbFap4yZhtjIk2iFkeRIHqe4KLHcZLQyKjQ67ZVoKZk6UmHph6v8LKK0/Lo6OhGL3C3m7ndwqL6smB4oTh0J04sMN3RpON8m1dQn4sJO6KAbkDq0CK4Nm+80vFr4f4RHrc/aNVKSYmgTjAe36yda9+jscBHNLFI8GdUh1w0cGKBm5a4nYjsaclY9Jl94H44/UJ/JDZVnLvEH4WHtqSVRfnigGNuExJ0n6Es0tZLeDIBgkV9UmuaqFDp/Dec3YxBiBbToPv/YVY0DGIdjtMjNC5M6m4CsTwI8atyshrDrxZXY6Ai5g7hFT0mfTs/NBo4lCbO3zGJRxF5xuvobWA6zWg/2pLXlrTbkUi6OAdOl71B2+uorFuK25Wi4SK3u5TyyjXszqloJ00ww403S+VvsuoO11iU+/dGnJDUfWIWL28t5Uw4I93mdpy6lT56uASdt4M6k0cXCACUzX+v+lLdeslsWzOnkmkFmfaf/PlDpbkxQf00JFx/9dG0hqCdFNB1/2ANSNi34TTA7k2ndWPqu4LeDrAaWxBAf4Y7Y20+WNxeyLC6CGZye4wk5CLQo/GhVgh9NPcR0qXNq5rVtzqllVKL/2mYB6TjzsS0xkq8C9AmHy5gSV2mJArdDJIM4nL6vl4kb2l1bFzV591S08QzKwxLBZmGaQcMPzUMPcPW9c0CDtyiFsD621tbJrbIV2oYrzmKzlyixJGFPyVIo9+c7zAgW8NKW1cI8+JYXSYRZLcC2MBXF8npyCASfRlYT8iWdoDiKetRYfLn43QjQ8Pk5AE83Ib/IWhDaElJLeYWT/GCKJYoR4nB+wkSM89EJnKmhNNKEQGueMwcGLj/B1Kn9bV6HHSWr1pSHPU5zOJP7jC4G+8pNl71xik9buL+BlvjkDFVZU6VTDEiL5LrhiLoaYjTGNHVwD65WUdh29vtBXCKdmCXDEMHZ0jlMvs3LW9cTlAonCTipIPxF0ZKlPw8QMaur/p2FBVNVBspOB0B86IoswNhEo7xuYTlNovTlnREcVSCwoBi8QcSuwmPLOgOr4MVldTainpJPTss/VrcjOAGZhcZQ16lixYfIuXdBrdS3hbHUHhtjdF8t8zw38zU0VyVrlxdlGsh2JrSY9snheyljFKUddJRAWlrYtjarkpXlwoj5yis7MQg79pdri9FFtHE5eHtkCDAL0o6dT7oLHoDP87rtptbeRI5XlUnvhkyMiFeX/5Nj8vbs7mb4jkTXQvsLH4pha7u2YjbGBu2BIAWYgp4n14JFBLX3eUy2jGfauGH79e5je7MLo33HLUwZ2moix0ubzCWOw79D/PJatEkvB3qz9Ycu+ZreJb9EsFpNWu5oJXBZzBO1wkWFjJqyPMnMgdVQG2ATTQs/+U+ozgFBgpIvOmGVuH9pY2gu7e5o0WTJhJ42mRbLwv9SgiHxfnPVWSx4SrMjnLCisDKVZaRtraWd2nvoXUxHhJbbUOXcIQDfyEwCfsyHstcQm21xhtslCx5XiI9JPQ4Q8C1/glElE4xSRQDiu/8cLYEqtwJiH64ChMBykMllWwLp3RDvFceabWoocuQU59aB4rIRR4qg/FD2G4Dull1HiXWQfQ/HU/LiOUcoLvEKYNeezuUV0EvWi2en9aIR0qi6iAr3OpCuiZHzFS7bUW4n+pg4AsHXeaWzjBzWWYfZHSAFTAYxzX8RErjnmXiHvXBfEgCBzOMLEH3JFLtwH3nE9ErouqTXwFkfd1VeJYM8bG/au5KrAKDGX/Sf4ppaGL6fORRRXS2NjFi2/Q8UAbKQBkrI2WeARhch0wMruNTI9MkOLm4/p3+GAD9pveujiRxhwEu5A8t3W8qUheX3C9m1UQwgN3yNa/gO725Hf+cmAhgr+V3BAB+w40WRoT+FsgEp2bcGjtMoV/ix8ktAUJvA0gj52DfrPsxzMkH36UEXNzn5Cd/EObWJvSLE2nCLmoPXLpdZL62M4Qkf2JEESU/Owxz62YsQSB5Qh17ujSPgOoffAACEzj30CTMRe307xZHXgAnzYYj0yqsuCCOgiA3GmksBCHKtN3ZnK8j7M+dY19PmsY3R7ckDos72GEBP3UuFJfr25+wym4IqSwYC4+Ieq/xrfYYjJunFXBw3C1vU2cBHCQ0WntovWyBmS++V83WCiDLoaVwu8lLja3LDmeu+/5RPLWtu05ul7bn2KnCyF69FuoEGJkQcNq2PJB0ju91ew9BVcnJEGWcRxFTJdf+dMRi2psCzP5nl6K7YkJKgrTsievqS0qGM8e06MjqgxkkyiOMjdHb/ImhIX+p2wN3gX6RIdZpS/xUZMzjAzYwZH1mJbU65w6E/HCXXDv6tq6TzqdfvrA0jqjqHt/azNF4qqLpzV8nwcYQfiD/ifTTveNHhTwdaXRnSEvdVoEwTGav74YT5Tskfy/VYIc7mmBxZ+/XkJNh4879a+/PV7trltzIopxMCn5BetFkb0Gahtw7fnwoLcvtaEtKNCqdIFhMau1L4Fp097cO54aOdOSthZxahsrHi4s9rEExJ1JSqWQE6In8Orz8liX+iWxEoPbBcV+uqVUn9I185T/UiqaqUZ3POnoGxJCeipKCirc7UpaV590U5hOErSrn4wwrx9228jS5U1V03U79E4DxLVQCWcq0ciiLCjw3fl2g6uFDrvURJUJl9KTBAgfskhoo4Isdpak8Fa8GK4to6fd+PZJHoXC5he88xD++976IFt4W382DjDx47LMf+GEFI5CVbMCA+MERZQf2dU5fjmFmycaDe4Y9tz6RPjjGmb/NG3BgGk/eEX/n1EjzZO4dyi2XKpPqciyxopBug58GAV6TFks32EQitvQITdBssuGGPgFYn0QLTS4SMA19zrPPzGQManFBNbnJWAN8B1Cz8qu3WeglwFMUNBWquKAfligGMdoirSN0ynhP7EwfdqupMcZbNekSOKGYYeSdXURrMd4Q4lTAUATo1QDcn7hONrKwSF/CmOAaNFTq5qodS3XfHTDAYuJ1WLhW4YNlKRGbjiZYUSqhzCZsQcEAnpmrJvG9Tm5wxyVvX2IT8CLL+nLJ7/iU6r9Mwlg6lSag3hhnCLHsA18p5mFRExHkHovlvl6QCMMCQ7aXudK7kc8x0SjByQP3yX8p/FG0KVq9m7hIBuuHC/3A06lboJ8jBg4V9xmsRPo/uw4ztcw+UhhpoDkFJ7AG6tIJpRGoyNmgNNsJbJDbp10EqIwKqwYOp/ItMZIXNsEAuDBzE8J3a7m4h90YhMU5qpfXbIKsm1+G//Vnq9mCnq0gpivzuX0xY4pPfsFqBcqRDroTMnUMdbN9qCmWmXykuMi0/USiZdNdmzfgfAY7/uL5j4XKP0pKcb0L6ydpl6ehCrpF8mMv8BUbKk1rd/A6ijijdvQ/BSDs0GTg1dTW4sZP7sNLPkDXz0J/s35n7jdBkrc9+1BpHwak17NZkWGzafA94QWBtO31VO0/EEkitb7h13Vae7ph2eQ+djiDaBoJQ7O9cyd+8WyhO6RJyjUUj8hpjbSZh6eNkXSkJ0kyYzbUhazYJs86GMdAWgWVn04QzJANrv31HekotupVSmBbpBCg3PhL0OeUB+r0/UbDIV0zDxNtxX+VdU0bNxnXdVY6S0pCp5HjIjAwJpDksjBmr0cKGKDxQkgKe1ObXFKWZwZxZ3pAd+MtIyyjZiwtdtOF6n1mHsiCQvyg4jIXv6wL3n3vDoPAx6fUQ2bXVnQmwawBGRb6I/RF5IvhU8wLFDDatYzzs3eA74BHtvhkGkY4HX07nu7pChhmcx3RtrSBVkKRYbZsgOcF1ZGZqZa1P42v9SkPnZi4euMsxqRSR2T4PEVwY+p1PGX8cttWMX8tiPUYQftbW/muxNuCmLpma9JNWgaTpqBckj2bB4URO0UBK04s4LhdCA1QFr1gDJNJAjBn2rAeU7zDVAkxZ7Ccd18bve7yzS5vLY1IYt15gwZzECGDfHOSUS3d48iGornyqpVvj10U2+ivxCmAUmyPNbwZMNvvV8bK/QLlt5bUgLdC//rbLS3Njmpwsj3lrycZnpTGlOUY/bUfFHASAn1LYCtVZJdKGlF2I/SXZg5W6uzVrAiAf4y+CKXbOjIIgKDpAlH17o52Qs0BvwHrumKu35HrBoau/p/3RJgRskiMdrG/2zoIyVMAFXGxPjn/+WQt9DROwvtIve7Tq+U82v7CUshOQZNs5QEYrNKK0deCXAP291AAC4NTQMUmeAIxA+0fXCmVOx4JAGjgLQKx479wXiAN9vCgQ1gqaqkAEjFemvUKgtNp3ZKB8asIK250e7ENe7b9/5S7EhD3dEeYTJiobacX7aSuYBOrSmD6Q49y+jsQpLt587aURcG52AY8KLR8q+ufO9T7NsYprwQnIWLVdw4mQcQteIUlNXLRMZkyhdY1Z49j5bAIQQ0H5jQm/kvxtbLv9LXbJjLPSXETSb0Q6xxLWqSj8bhtnJWxYSVcRj3Q25LJmSkO+TjjemNc1vb0TVbDxoeJftfxV9a/yczDlxG/yiJOwolVmpFHfX4sUsMtLGJMG8L0GH+99FYHrB2+gDR+DwMmvf0vEZMr1MDD7dVMFJ4lfCbrO9IPP25AUgwuUydWY6Q3167h4gTzMd1ZV/+TdRwBSNfBc7P1h4JNmREhSY1t+vLkDLBmCeTLR/H7tuPfENTycCwpTvAcyzCt/U/0bXy0Me5ZzvCkJo3rTHWLiUN4jeFpA9YZ8vX7n8XEGoipui0jEa6yZVdsWKITepJiWriWTDimpmsgTo7/v/RVzvKxbIuLKH87r6O25leStR7istGvQyFETOsz5OxMkUwyC5LJgXBNWA1jMP8I03mylG0BVjJWV7GrRtPbnDwVeBAOMMWEPbczhUvTf8Yjfa51dqarQtiLjM8DFpppKx9ytS+mlufnKV9g70FicdoZiJbdWxyTMNBEA/2auHQXD2FeuxR15AsRBF4xr2eVM9BTqcxBbczHxfMQseog1WCiMlrF8lZxk2YI+XdfEhfXQkNkmtQMUXRjsCCQ4fJwfY0Z4+XnRDVekS4OD0NrSAMOBcYvLBnYTI4HLSgVADe7dJQvJI1UUoofZqyJLfcXlChL747aj7lxKSqzDaMnh1iYGj6V7FKFpauOQlZU0gqZZ5xcxnexiqp+VZcq9qe4sBu392f8CQpaVkB/n69Fy0HVSA6Xd9OCtbbbM4LiB9g9rfdlZ3OQP1brt/MfDavhhXSW3MnEDBe0TGGvZrrs+EKTCPr1P0Zk3ycfm+GeK6hmZCaxzZui9WdZ42w4GKHpgNlkvP46oLGoKUombvuqdr0xy0kUHb/v2GzyLabWXFVDB0ZXmjgzV4u6ClIGuWJJrn7603E2LM+H/bV8oxwV5+0xuDJzi/deyrKx4K4R5wNv31hRd8Mfmn1E+uURfj7BhbVh1dAvcDAb5QkW0ALxN64KseSIFGyp3jQzRxUnFoU6eRLRm9QVFQoZDRNal1AkWbm+ClP3WkVZSuJDG2CrKQpRKBrt655fSeqc4/OaxB03RWB9BK0bnGZJHMllh0Lvp4iJXVJu2oY9OtbwMuEoXKq/u4OiPoeCuIr+RlLF4MyDnUM7If8H9gXsCnIxIIVQEz4CByDUwGBjaRqfKtsAbZCSlMhcU/rKUIQOO18TAiWBaQdTLDhKmi665EtLVRiAK8qYgAtS1+guzoZTMCT7YWVqMVpcAGzrSgiQOB4WzRCWbsxO8VS5r1PfPmEwk7NMb9sfQJ6vBAJScNFbvp6d/kVDCW0TBX4GUSZeeMyylFeddjIWLzasT3S/d63XtI36jUbu92h6aLbYAKmXflLyWbaiJN+Cb0uJn96CbDB9OPloJ1BPJnJ/k8Hl2tTdX8jErCJgzk0Eu+dASll0CAT0f6Zh704aLOKB1/2vNA+Kz96WC6xHUgI5unuex7R0EBJVRqCZG1MAkWGRJ9jOiwcWKCROqPRVnkdED59DELaLwI+/N2NtsbyAgIpuBiUaPVVr1nLv/DpVXXfgxkhdPHWbIS5CGNfe38bfGrSK5gAGRFCeCrqQ0AlacK96yACIwr8LmdBrYzDM+Yt/lfryhTf9z7RtsrAQJhHmOKmgIHKfIdCJ7Jss0cnDrtzMjPEPVj44nfP829UTs6KWK26Crt7gfMZbza50UOFZyow+EofrdJeH1p1PW0IusojbInC22/5CgNRiggRsYFo5MRozy/YkBsc+hWuHADlM2vw01GlbUkpOG4Nw/uGlJyWrDyc7VotwkX7AmiTavIZrzT7mjGSCns2KFUaxqCZOPUo41XlrK2A1R8O36i4NeSjJGJg1OqOkA/1NvpB6SPclyxBo6nteWrllldwm/yx/VtFP8VhJnkaP6SSFQXmkAbPinzhOL+f2//0vMLSUBJEMfKhOSnXKjVcYj2sopmYkXk6XkTlNa/Sy0OmQqwur0KFnCq7vY97jTegQVPBOar8f8yDK63Jn6mkDpKn5hAOltsvgoW5W19DX6TnIcGUMFY0HGiE8E2qDSdM1ypQYQvq3QQ4OaNOFiZdkU5ZXAq1zkQVIQGxZKWUNFq32lmm2sqVhrbVU39Pxf2jk+Kp4IBQK31uKQd+ccMqjgRjmOVTYtBNTSbm2Uar80aRFP3xqjget4gmNSRRyIAh/NR9AUpX8AJGq/hVjnvVfwjtJ31WorS9hyqEVBV2j/0OC9HzcwCPAJKPUCp7Utc7Cq0vzETgfpkM6PZhWQhliUwopavDKROl0CDVhpS+o/saVZTU0mw/+CM6dmoX9M1rhJpzM7JGPKn96H6tsMpcsZP4o4t7HyvLqXuGZSsA66pu0+LhnRJfAWHHITEGXY1RoAtWWe4iXRXwOUFdWwaoLGTDfq3icmbUSjNokdVozPcccpHJE7au0Minq57qiKUHhWLqobPXGf8FQIPcusUk8+ttydLmzgWHOZD7wDPjpHj9p/w87/PfY6wHkBUJjH2f3Z7X8/6+4MLKxYYryfwEXlAD+4F+g+D9zXED9LyGYeNoZ5wMYdMbM9LqWveVOAAqVEelV16ZbvNm8vH87G0zzZLuVriltG1QLScGjjNTOWL/9ugdvzzQd5wKYkMrMdpq6YsO/24z1K97BdhTb7m7wquPJmYyyhehZr3dfb2HiT4QOoOmSqZpB9TUx14aJHNbayCOEw+Dt14xjAsuosjAFabXMlw4rHCj9dpqxR6iXmw2J1oMIoRY1NsEyFKgD7dPfhMvKKfMSw5Hdf1gtr5xhA1/363e1WAoRrdHSDRAbV6SwKGMEImQQIdwGV0wl2eg8rWV8TzaQlZhuV4SPvjU0ssz3oWzRwWHRwTQAo772hPbPL+WAlZHCFKLXSgTYiTKWZpnudqhgHB7+kVJ9FA3RngSGrk2lxWKES3OzwJO0UEVhzFEuTxDrg0tpUIXB++fnS3u2tmGSOTXFV+BmUAUaf6WmJMMcRlSJZemAcvumxTY9SNkMsBsmrP0Z2PSzAC0iIJWwDBqS0rdsQiIx9yEus39uKpLLIYgE747O9cBhw8HpjOPNpOTVFCaCg1rpq7d1Ecj+hVky2X7iyEgAaat0gpe25Xf2mC6qPibaVOW9A1U7zUA/ZmsvZEuF+3jOCx+GThgRE34RHfFlGqgk2HK+JOkHeysuG3VuIBLSfzXKuS8R5K7XJL9qkB6ciDW3XFVai8+EyusD6wCu573AxH1dg9gD3xpbrGbG8ictLM3JZrpCSPPbYAoxQHHSCHY06e9igqBqaCQzKxhfOWiua4lhkPYcSEQS7OyRGDHfbmVFo1wodN/rPJ9O28ll/LGYizV5mdPF71OLucdRhVdUmhk1P+XAge5snmXYc38SZQMsI8ZreOoGGIvufn/RCpr2O9AON/nmFUYn3cT6jHF3QbWHcbH/sc1lg+QTiuJS4JxOOmZqYwB0TeAmV54/Cmo2STt/x/bt6eoIznYUrIjtU5kJFpxizo5DrrEM36PswixSyFc+WJVivrqWM1TF3nzbFuHjbJVmv5Kaw8XQ2QrFHHKMdhHMzj9qmt5uO0dKecmsfeOavkr4N1TXz97eP9Tt/n6hI7Pp3rP0qwCo0/iGTi6KwaxJEkqIoRE1/Lthd1/u2r4R7F9ZzdfTQuoa3nI1UHsrxEc+ah9PaRRLKsu+R28l5OUQfdOfUX8/K14AykiAYfEt09AVww9E5crkgXxq4CWAfChw0tbYfS3f+fgfskMrwYIbi1igUr+xiA95SVLstS6QVijhOsa8u8XQGf0Enn+/MMWbgbW6H9sdFvvDbcpzlLX7tQz5P134z7wXnMo341OqN3ZvU1PC8srljyMxQZwng/VBSJ3+Ao9Akle/59zffuTt9i1daRKnkADV5vHN7RO2CcnVg300kMKVUaRdv79x9KaCkpbdw0hsij5OR5pWW1lhYbDAgQzPeaFqMUkBnw6QJO4Zh7tDOwGTYam0aiAeBBfM4yBOwwiYzEi+6D1gHSSrFVYq93EeaSKyvjXups7wnjF8AF0Q78uTqv8gAsNoQmeHc+/aHr+VV04zSSfdjt4wYM1PKIbqQTTLfA7UsDKcV1CgrAtObT5x0+o4ySJK6nZuUGcUKLNuZ619G1YgKRSPiKS6eJzCmdgKwv3HGP09lEairu5U+o71A0KeLfxpdAN/IPUcXeC8jAdm4pO4TYG3O6uFIdtSc6BfM1dgE+htMIowldqDyDzznyEMagUBkfvivayze/GBTkoND/rvmOPrHPGLrn2tuSoX/U6qIr1y1g2pEbyj5DQyzhICpZwMaDXFoHs44VJJWRkeeWtQTrllQYvOcSJl89b0aLl6nJA7Qs4VsZX5Z9xyM5wcLm4Ou8iYOkL91mdTjKsJf1UxIJLBddSoLk1sBT5E+v8HZde6Ebs9xx5P66WjHFt5YdK2oXpeQoQMYZSIz0ciE6Ip0mKSjBaOMt2hKO7Tg90D+BP+c0U+1bICZQV9yLugjV1JCUbFxYfMbvu7mXlzGgTsM+Zo7Jw5iR1AczakrgUdXhIEjpIjkdADqnh00KoJ7zqERs9WHNkCOLYePFxHCmN2TGudGbTcumVOKiGWYIoPuIIR5RpNCRhKu107Sq+mQBPKjRwRd+XYIToApuZFa2nSXy0B+flWMPAaJ3nxaMsZQGdZzoHvERF+YLKnonYg7hPClK5PfCkGHTcdr96fvQek/pCaW340HeJMt9bo2foXeXaJ5e668WvpTHhJfsGxZiNIDJk2l9sW8SwdRKKBguIslQuEyWqaC8BnLUrx/16eeEw4qCULGAwiGYVzuS9spAPL/ZK0VyCVaB4JIGEb9IiCL+CXYjSsVZHcjgIPP45HmB0wY8gWQcIcjDlHP//LNeK6asvRKkAy6Y+QAZ/LUcbD/KULK5zjSuAQC9XYHd0JHr4eMHXPmrjPMRdolI8NBovuGEEn9CyLK6+iKj2QqD3ct5YYyyGfHV+U7pHQIxlaUNw7mNIO6cGLXC6K1Rau9cVEockzHpU5WO3R43d/LBzf83Iq0rYe2+HzeLDQbhBHE9RC9lBaP8KypTBD0EB3w6vyqpj+olJkvIxKrrrPl1FrTlaKI2bBbrBsVwmqSzJ2DQ62cMqdumBK6K4y+8Pu6PzAyBQ4FzH7zGhXNue9Z03I1JB98oBF72XRYtq7IspUqQsEX8U8oLpKaTz4pHb1kM0mlqJyFgGFZ1pfSjbZuquoMsWWNcRbu7HPJ7Y8RfKkyDmcbJmQ8nbH+KK0r8CMuJyEnDHKVpsMyCO84eC6MOHyevrs0Kq9Ivekb5TsNTneG2Zt0pvMnyDxVfeVgGbvi3llkWEDZddtbQDO1/uyCjIGFT6adlV+ZqAWHOiUDiLCqwFrE00lEC/PiQs6D105S+5yg9G5hNqVXTzjcJFKWu4DcOpCLEwbFQKunhwx+XkxURYRSqKocsG7+MWqYDE2Lazoj3B+QB5t8iqCX0pmDMQ0milqsyI2cvtASAiqth9oTKIQ4YSYRq/hZgmIcTfQE2fwLSZxBNAz1ERWTGQ8vPXaBZ12Gogp3r55KCTV1zd3LKgq/4bDGWjSxWnDxFGFtfTtAimwh4FFtBdv/hEYsZ2rz/EAbS9YWhxCy4CtDeQcL8b2QPx9SqlwGyYicULkOjeK5jzpJxrw8K/Q5jai5StZaTyKci5Qu+qmQrUmKHnFVPpnZF3cAudUoLdZMqCKoT2kCgTLAA03AUWA+RsX0etzzYNN07DFiaYLfTSwnYwuLqqrtsYLvVi5PeRYtpOfLZE1rGyjyXExWmEtU3BPQxlzb8XAmDr7d+vgmGedYsRqjfspV7yYcC7fy2uC4WglueaX7I44bSGYVuoAaI4mXxOP7U4Gc7yq2lIFYNreloBcwGh74rTEpD/4eKBM2zXwtFPZFz/7xPZEysWk4JoThlwZGoEbqnR/NAZh088utWyvJGwgOKTc6163wvjrauo6zfyTxCMj3WR/XppOdUNMR2QXe6YybkLBtVGbQPgUmn3qf39VxkN1JMULWFZUdOeqMeOKfQJP8v9jX0wbhzxSunvvyyZ3MpXiiMWPz1n155YBiKyetgdYTvSejteM4U5XvYRYc+ss00o1xEaqbe7BjGMQ4aJ40uHD6kDsrEgYYjWkcYAUH1SLTRVIi8Alg8Sd/Byre57+YKZp4HgCoNGDgA0Y9Rl7wy2ORNDUUOusxqhN1asxl8fFpFZsKqlKkAVRb9w+2RmCqr/SKd7Dbnf5153zhbaqaCs1cXMXOQTmxUMuvVxMVXoj5K7vfMtxaIHzsQNuW+npAGaSr5SVVkWPD3gONNwP1kHZ4OlOod5SrGyOWZ/3dRjhDAxVW6X+9oTZymmJx1S0Z/DD3gGpBQUmvdHdYPacyYoqa3/g/ev64HaIsHqB+BvA5eNoRoJaskSxdd1gE75Uy0tkHYMxtxjqNu2PwDhRJCe3Usg9rA8yu3ohiLhnFTFTyg4f7LmhpSB8x8yfOQM/dqseF5Z1TGJFj5d0hQr4q8K2sM6xZsW5Xl57mvLnlz17DctvggsZDLQgfLT9ccyD7VaZukqHoGYJ2v4z3kj22Y+O5Fm/yRT9YuI6Dnl5Zay82crxlVRSCeVVbZvJcK2NMt5ElIyEC8/e976VHenVDSBC+K8KsldwW+G4u7hU4ELC+LnXA9v5KfPgcved5i3TVTr9MvHJD7+DVJY5dGveNhxXdNOmzhsnohl72B3NqN2Fvse48C5KHwzbcX4+zsveciMr674ty4jnJVkcF9hJB9pX8O8fVb8AOHX9lx3EUij3vtdyWmuTX7tGh3vWGcfaFgVfWz3/i0PnP96+PG77cpDY9pZQBqEt195lJh2efFvo3BbdcWgs1+kSciqjSgofUtgR2r+LwzPR8OwombgPrnFWvwbDK6aG+B6mL68J9P6YJ4+ikdPj6Bb7d3TL+X32PNxYZYfaHukB8S6+RyWV6cXHshNmf5KWUYSdQbzE2rqfKPQ9Z2R2Buc9dpQzCqU9pyfKySeDj5F5YBx/+1cewdQF1AzXRyyGlkIxEBc4cntkSxTRUFa4+Bc8x1XaS1ZMfyrHL7BzOHiQeJlekmDM2rn0vB0lofZr5BBBli1v8FMJ5ZwoHSzYCvRuQinBLb7aEJl/PLHNKQuf2pIbdTaWsqgc5w9Ir549EHc7S3yw5VVmTNPUTXrOq4b/gyoEks21vwdjyOYJ5CGK9iif2PYbdRAHeI6rMGir8Pf5PTk+mva8P9Wh1r61xv/6TxGkI0/b+tDBlHQ22hbGgp+QRdyg8sAlKQEXvdqr4XqxeJQLmUyIo2WroYFIc2q1y4+JZYwcV2W9ZLvgy0Zu1AkePT2NjdVUOaoXf0R54M0l+P+9zn36kq9ITTYVF7biRSWylmbYZiKCG77ENnCcdjdQSfWYpbZ6GrdovERDR3NUXjgXYcyDqyN5rTKnjI+1NAt/tMPouVP4jzEj5t+aX3BktJRLJ0RPYQiA19kv8HoElwGmTzyYDE+mC//0Hzn0wM/h2zb/nU0pjl+kvM6qOCO61iE4Vn/ZouOYIv979eBC9tjZT39mw0jx4k/9t3hhLc9I/wdJ72/JIFGK7Obmy9zdizTZYt54hCaUZO0uN1RkekaEIxCJsQG2nnTMMC0y7msXN6CUrxx3Cfb7ZKCHex1OKTNu3a26ldES4OBfemtWcMbTVA5xmBKWWjPEacTLjlxQf14pVWNtvMqJ5IfOhtLloEG4cpeyH4aOBznNgKOR3iKoxRl3EvqPeIkhM4K0tNwFCq3DIwcN2cqfXuDVx8fA3fUlDMtCEezK2XJSrL90UzneUMAm8Vjh9d8PYHCaOJU5muj/2I+Us8BjVRybQAs+g0wAqDnVOT5yOMDX8CKdybLDLK0un2HGMF54THz8Z6esLKDDTpYUa7mG9P4gC9imA2kvC5uW/wQYsC2M16YtDz6AmOyx5beGioamiLmaqaxjpDRspmOPlwVymv4GGDgn0x44zba4dY03KDbCiF8keBXy2Dq4qdfTLYiwD3DevRe0bwUus8NMbGKK2fxumYxki4vGMQg+trgXTq/H+DCtX1DZ7wdUpj0+v/tfoogKYt5Lb9i3MeJ+HGGPBD3s655JB25z8a0gS47Z4WKA1WN9NT13nJHTAuhmVQFG0pfvW3iBHjuBeOKS0yNqML72v3XV6cO/JZHe1rxilf1xfCQUYDoqIOVq6ad+sVY+m8kEzDytV7SA80yrZKH4MApG0P/ZyQb5CuYPevby/mDIypSQmrxR11bhn3ub5E3gEaVkZC6eEQ0IHGydcfh0YuHDyUxkijc+PVDm6zKNInwyAVT2VRP4fkTx6UKqtcLRs3KxbxulNr0T8m81Fh7tjfO92r64eJi2u5s6oxkjZHxYa1kkxf7GV6iNnoFzr1bO+dvzqQwXfY6y9+peKIip9tJ54iRerFrVYurzHUg7KVrnymlawsvlqTDTdwVKoIHjg+eItVIjr7NYz19KZ7f3xqhTzRbtRjUvqoHLIekfWXKbSPpWz8cVyUjwOMZfeVpP1TieiKM4Y6jE4feBIS/n2esnWDxt+98fl7alEt3Qwn+HjFHEEj1WdGmV8WNwB7mHJ/Vp8BNNbb+OxgBTm3H+G+4YOrSrfq476dMfmvsEOolj8lY4lrCZajEnnpujyh/GZFudN7gn345mtY8DqTXpNABTPrZPXWBQZMRZSuLtSI8dFEsGjPHPbcv5ofZJ8OT5f9BmRQWmU1e+E2KwetXUEmTsmgHgKNxiqMlhB5gMlnUzF56zdv5DMvXcI068kvUN0f/VH4WXjm63882F17KQG5f4hxzc8jJTEZvuNCEqLi5bghP9UWMVFtGl2cOVJUJBc5ylWNZEhAqfCgzBwMu9zceCnvDPFx5TKu3viUuCh4xwtlQfdQ02Md0ZqPOYG2hWHlQSjNEnmTTR2yU4/+gavTj7A2yFPXxtx4nZjYoDL2D+sOoOszG5uCfuFdh8vRWJr0At4j4p/QE6bjHSr8VUZpAZsebkDnFETN48YzAudF+k0yOdxsfVxqJf9yjW/GnCvVP9plX22Noea/iyXbFZ3tfd6ZrOsE0c6TjPYdCqDE72ea9gvjdpnCMlN3tIKxIfgF/DbIPFinSZbch7u/niUG8ljeE4bfzl5VgdugWHPXm+0dOO85zGB2MqFMdvzF5pxml8sPpKo4NfcRlDT0HzZ8Sge4PX+0t3eCDRoc10zZKASivaZQbI24oDnG5MZm8LRz4rztPxMuIx1romKFModWoyTylWWclMZbpaQGGVF9TEYZZ8NG6pE5fxrMSbAsKRsCYnqYohQjBpgxofJjNwn6lzUkK1WOM3J1m4kP5Xs9fYqBiVEwA7fE2XQ7UWhtFE1W7+bxJGeJHRuCinsDaEMM7S18R0SfHAHz+YssnrE1V365Hs8h1ktTHRTLuCB2ge2zL5khg6MwyDos1DxaMj9wevvLTsa0FXv9iUokPpKf3c3sr6Mesv+LvWLpkidA+Lw75bqOtFQ0Mk8gUafFhQ8ElPXSIzSUc4xItjui/5sIO8xF1u8+5TIH188TW8UBqErDs8qy3+dzRGnyECNYad465/49ADULuLJKU+nWAYaFH4SOqZFRBPCxDb7hBobPjlnMx7WFH4zY5JOXPyLTuIfIsPX/pPSmSCDL9mmucM1akriz464GJiKZeYZPtTmamf7MipjmTNre/7yby2vV3PsFdINgLmN0ErBo6dGKdjjG7aYofqBohpQWir3ylMO79XalBXraSJ12q88FocJ5dTxSMQLIaIQ1XnKgO1lVNfJfx6LCrfc+aXwMEOV50Nn5bsxLR9V++POWN3qwfuzrRfOpHgX87yJVCg6EwByFX8sj0Fmma8hnupWnp/ao+jJujBbsUQLa+IOkOPESvrjkPqpSfi66R1e4OmM8+GqQ08IwjVOr/mzSNmbypMjJcbF7EdKZAQ4r3+r0ZBgEmYu8Nynlf5WpxvMQLH1R5YJpT2XP/3lYuDbGg8n1plxREcUXemi2vXfo31d+WHAbYCAOoopfl3Z6gO9s2wIq9I6Ks6D3t/gfFh7glt2ZoArmLcMZ6cDcbKNs3v4K2YQxSAxQnuaJfFHM5FBeDgU62EDbFAp1cNbLHDH5WrLWzIx3K/eM5VPao59M5PnOODk2Cu084tkOfgjXp9MLr5ZkrTeOI2YT/z9D4xvXvEYYm0XIqA2CEozVqcmt+CajvnLeEe3OVGqo/x73y+7h21vr/+hm/lbNcda9MFbLOv8bz6jpR4ZwOXqPj+7rOVhOulDbbMCy+duwW2GTQ6QRV/sgRlOU49YyAAZSz4xssrD4ETJ2LuIMqsQOJ6UhOf01uDN+NY5E6GlvAsuCETIwLLeFcaAWvTaW/5zuAkj2GgERbfqPrp4CQ/svTXrH+FNGqPIwqP4Ry8S3EU1fXMrHajhTR4+qcOD6WrFQAx+z1THrg4TC85shPzFLbBOUIzsznfkSyxm728X5L4RTnXg0v2GoWpqKu2lHyaySYYv5LDmH7x85BJLKEYN7eyhx/9BED29XW1jAZm9xIfuD2f8Wt6qNBcVro7swtpTjtdBcDJ0PToHememspAL6+L4nyUNUGejD+wEy1M6049dpYeVeDci9/KiaDXxbQ0vsMD0GOVbPyP8cTrbtT4TGuKrRpzLs0ZtrvOuQNbfM1/uAiWWPFtYoZWr2qFcbY5bAkXZ8ZAIPAfdQjFvYEyKvS0NnsHWHGlo8Ji/h1XxER/k0zjrE9WLeHrtZjaqnYI1Pvt0yQruppS5/0Q1SaFaKPwoublJ+P/CIGA5R4JIdwuvMbdo4f8rG6c2f+uLURbindhbYtH374MEP5o1tJRVM+eIxDIl5zCYaO/U9aG+BUroYsquFDJZgSO4lL8von+z/aomZh46kuiNAzEaZTVz7cHh5CwiJ5rk/ybkG3IhxM3hPBSuMHK6DCJ5xIJ8T4RvIcwCf4PDVEXARPRxboXSnTbBBri7e6w63uJsHF+YcGF1QfY+jBir9mWHXkhXYA8UPEB+LdqkR86wApQSpaxevEAjIho+r8wYmdUWXlQksREFLZJSH0QHl6svcUVV44UuteqRMVtl5YLt7M8RjakaPevR7QJC0oTXFw06BzrI0tCm+Ew8wKOccQwoyj5QvomAGHFZUCZvkE1GToLMElP/H2bsV/Lgc+8MTQONlaXy8q34NoicA9sQT+MSfoj/BzxvES47RewxYIC5uQ/KZPIak12wVjNm0YM7UFC7v8d+SFZNb7uzS0F4nIvEJ7zn+U0wDx2Mf+xlkvS+W2BE47wow3UeQ1NCJa3Q2ix/QBsmIDfgEginJZ1FvN1DOwObr2eCbnNQ0HrJL3TL0nahmupwo4dCZTkkwnQeFb2bW2st+STMLdId0BB93ooJy9lVdpi9aPaO5vhHYuwNSv+hK2xfiTHqwI3bzE1NXyd/D1r+27AfW5Gq3//Mi+uyXH+hWvF4kvIs80ZL/XYl7InVGRVjclsbf2NZjlfb+Z8UY9wLU8ZbCVCJbJxK/nG7DFuEyQ6Vq8yMUu+78fgZ14CSifKIwCUhimFbR+9vUOSA7C6c3RWgHT9FghU0QbOCYY3PIQrtZoI6ATP2I6wIGkv1k0REXXy2c38x1LBPVALfsPwJkk5nAY=","base64")).toString()),Gj)});var VIe=_((wzt,WIe)=>{var $j=Symbol("arg flag"),Ma=class extends Error{constructor(e,r){super(e),this.name="ArgError",this.code=r,Object.setPrototypeOf(this,Ma.prototype)}};function iv(t,{argv:e=process.argv.slice(2),permissive:r=!1,stopAtPositional:o=!1}={}){if(!t)throw new Ma("argument specification object is required","ARG_CONFIG_NO_SPEC");let a={_:[]},n={},u={};for(let A of Object.keys(t)){if(!A)throw new Ma("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(A[0]!=="-")throw new Ma(`argument key must start with '-' but found: '${A}'`,"ARG_CONFIG_NONOPT_KEY");if(A.length===1)throw new Ma(`argument key must have a name; singular '-' keys are not allowed: ${A}`,"ARG_CONFIG_NONAME_KEY");if(typeof t[A]=="string"){n[A]=t[A];continue}let p=t[A],h=!1;if(Array.isArray(p)&&p.length===1&&typeof p[0]=="function"){let[E]=p;p=(I,v,b=[])=>(b.push(E(I,v,b[b.length-1])),b),h=E===Boolean||E[$j]===!0}else if(typeof p=="function")h=p===Boolean||p[$j]===!0;else throw new Ma(`type missing or not a function or valid array type: ${A}`,"ARG_CONFIG_VAD_TYPE");if(A[1]!=="-"&&A.length>2)throw new Ma(`short argument keys (with a single hyphen) must have only one character: ${A}`,"ARG_CONFIG_SHORTOPT_TOOLONG");u[A]=[p,h]}for(let A=0,p=e.length;A0){a._=a._.concat(e.slice(A));break}if(h==="--"){a._=a._.concat(e.slice(A+1));break}if(h.length>1&&h[0]==="-"){let E=h[1]==="-"||h.length===2?[h]:h.slice(1).split("").map(I=>`-${I}`);for(let I=0;I1&&e[A+1][0]==="-"&&!(e[A+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(L===Number||typeof BigInt<"u"&&L===BigInt))){let J=b===T?"":` (alias for ${T})`;throw new Ma(`option requires argument: ${b}${J}`,"ARG_MISSING_REQUIRED_LONGARG")}a[T]=L(e[A+1],T,a[T]),++A}else a[T]=L(C,T,a[T])}}else a._.push(h)}return a}iv.flag=t=>(t[$j]=!0,t);iv.COUNT=iv.flag((t,e,r)=>(r||0)+1);iv.ArgError=Ma;WIe.exports=iv});var t1e=_((Kzt,e1e)=>{var nq;e1e.exports=()=>(typeof nq>"u"&&(nq=Be("zlib").brotliDecompressSync(Buffer.from("W6EUYSRCcB6YgvD+v1KjooaTVuyA9QBvOEf1l4M7DOvkimVXbsQ220/1dKQ/RD7GnAHusCKm9mZqWs+m2iiMwpUZIGrF8fD+txJ8RnX/R8pPf5b//Hy927RxNHJKX9ILKRWh4MPm4qzPWOUKUYaidv5Cq69pcxF3TdXdyxSRhuQzPHbHhZS6Z0PnPLi1vxOk4cDzr5s/zQSo+Mzh8qoyfZNATVKbIL69bvtfpmBWGblOlhZNueQXsYeuYJtK0+pYwT4XoybSaXyEQJuuP0xvpqq7l4mbG325PX3Y2twg820hAQEfXkq6/71vWioax1pFqlyhlMTrbLoKN4qm7z3vnmL/bvQSDaMBiMU4zshy1pp3733/twGW1QC5JXA4ayiOqihjfeiyeOINFUYgZbNYFi37n1df2A94lGG3boocFUbhrrurq4n7SFkhTDJC7EE2Dp7end4DxhP7W54H2JZz8O/WkHQRZsa2vd/h0r4s9w/d2Dzm1A9NmqYn5UoK/sfw3/y/tP+7LVGDgoiINtptf5i+j9R2txx4Wxp0ILgtcJo/FKLG69mGn5Nf80IJI7ZTxIVtzeeL3Vi4cXRs+78yokLS9S/x/GWXLJLjZ4arGivj5J8OPWiVKiQD/02SXFNdDG4818iXL9TBVeWwkr6UsOHyUfs+gsBYBVb2sFIMYMCobTVbZpdWYh2jPUT+HrQ9xsx9zYAtACcu/5cBqQFyLHUL1XMA7L+vCLxa3n5WYJCLZed8AodH4izNkBFbytgHZj5Fn6L4U1gx/e16/2kBrjB+8FMZfpWg90gcbcn/307BPxqv6SKD40wI960SyrsIbcd2O1GuGXM34g7oKKmcEHukhYixXbFXDG4DCG2UpTAHEUhVgGVPuTQdzUrqPOVnqT6uuGQW+3tXIBgveoGTiw+iPAPXiwNIqg5/swTJz0qT/tO+Tj4UFsRjHoJuHXIMmEGTHLzo/zkarbbcSQ1T8xCvwjng2i7kS8FFEgjN2HjvKlJCSFvhVUhfJpICBCb8erYMU/YyryE7BC5imj7ADdJqTqcGik8qrY7n1kvOouP3RoJzzcMZZ5iEExvZkdmKmwjn/aHfN8HfSls0jyFP9QTn2Mm/B/JVsm73/3Z3vi1SMCrIm3qRHGCfbGqaSnHuZk0Pk5g7u7da1Qp5+Msn6+6aR32zgKcudbF5/D1S7hx0fTigwhhQvXRH+rXdGPP+GESCZinPpKSWgHWPVLBN9rDQIVAofmd39gQ32q25hvaax4YssfDjMNBT8jvj0NA3o680a3PKXEDVCGD/rnLpnzLVN9Xuzotu5P2dPKIHsQ7LFRvrBd5SCkXBpRTi4gsBkneG0Pz9FdTYENTPs5vfvO35ex+bJJR2l16IK3q/MY966Zaa5Tt9gEltxOl++VvqMz9DAZ6yTYt2iDeD4fZQ+QNJW9LF4GY8dl4wsI7mZSpA82qU6Ja63AYlPHnFo/AxMqtOUruzzxXCM9O0JAbEb8q1FCFlynaLVv2uClS/nRLUvsYF5L53BMMO9RG/S0lGp9Vrx++m9ZTiqwuzV59bPcj4MHvOkTEvwIUbaGCWumxnip0F5hN1Flybup0qOFHHOIOQHBMM1Eium3T1dd8LO4y7d5R6PUjhNtoxPvz6EqyxQ+eavqV+sSUGZ1seG5QbDhQHmqsJIek3jdVUjjs3knoABWz7vP5ufU6gTSwdccLz6or/EPG9ixMWO8PG78KA/1MqHbz2qqdAqbbMCXUOow2P7JxKwtgJKAciEEP+XJ+rHbBVe2OUn+0HiHRezkCH09wRNLBFAE5XyxSbklDPabHNWHyB7pKIe6KszNwchTeXzYpJbmlPqcXlIOelzOzEyC9IsV1IXFVdMn7ruDXjHito0RAnAgA4Ryt9Mj9d1uxRw2PFdqnryy4o1scFAjHJWCrhtc9jrZzA9DxfnM1QD9lCiJuA0LvnOoahkRiiKMNqDR4wjIpN2Q4BGCOepo2P1PUHiYq6f+x8YEzmbT8pTgaJ0EgnKp1H/NuoNAG9zBOlOymEddEnj/HlT0UtmmlRcF8snG0pIuqru4V+0qnInJp9JObWG27+QEIZO0KR9GiT49LTTPuj/bZGnDsyillmjb8krziPkmb+QHLh0gNBQM+lB6qn3PP7de/tCMgyUAfdHxQhQZk1sSIpK9BWmcsIFw7opsxoxNITt5h1zovvSZScA6Lls5BDp7XYFFYXHR8yVtf2ozz/yM/QM3IzkTLNWVIguULg0Esh+1I7UtWwK+CQ3eAy4PQdwVNand9Iwa3VCjEIjxhDBXgp1n/Q+Zi5EZkvJxBOnQtFZ6sK5/rxTLonRD1FPdS82XOF5BBa3HK1mdcvO2pwheM+cNRO/4hR+w2PjmDuFBBAcxLfTpihY0zqU/vtqGsv8wYk6G65Si7wve7m1DyKnjNgvSMYYVrK8J9xtjw3zUR4KfYiscwjmn5GL/sUlb8YqebSWEpxdwqRdYE+lX7EjeGxFqSk1zgSwUvD2quxxEYuLo0EXbbBZfm2ypm0iHh0A44TVF5NvOIYfTElCXOKM4/XUMfpUYkfr4DOlSch+Be3+lWIHuA4yn/MpZimC+oihuYsFWS1m+a82qGxxAcSfLEFDeXNw29qhJFHgd+fYeJRXVGCazRsxXlaW/UOytEh0MzYrIJy0qF/MPwxmiuL/vO7NvsVNVE7rh1wM+1zme+L2v4tgGhyBsZ2+CGRuVQtpYz9sOenEQbkyDlEt+WrlBsdXfvdN2Zrr/RTB4zBP+DtFhTv2/rVHujnFVV2oj4cAabSVbT7NSRh5N5bS8AvU33C0xFK6hQJj8KrX82WyX0aVQCCUojTZWonTKbed3bbBxAoN4+ePlc3HIMccm/m+KPUF9yvttDoSc2inM4pm8/fsRj0Grwq5/eKTVAURGcUqD3VSls6fuaRY8kxzp4BISL9MKd8pDAT8u7SRDYc3Lk0dsm29i3e8o2x9TKGWKoU7rGS0VWcsmvLC9swLILU/b0iV80YwRuR/N0F2pqWMTSDV5Prqkocktj1WPiD+wIv12hz1c9GAJQ6RoyTJHtKicApoxYgL4mkJ55vhsKl2IrYU81NU0mVWcrs5HKJDtw/fm8GROmOfj00dr4qHCfdurTohWyhCEMEU2bR0ep/w8nzN9YAmjfJv2F4IU9ulvjj7QPjJJArJZd2QG87+0b48kye1zK4ccu5XFYA9U1FT2LOoTOB0H+HgDVU5vQg5FqX/JvFjt9RCZ5MTq3yRBhCzIdHC2PrWW2rFIqa/ONB3/D41Sa0M/yF8qT+/Kh24r89PSDbN749OoTQrLD9APCKtEe1HhWD3mY+9AhmtDbtIpsF/isjy6fZdsLUtw9nGdFSNz6RWQXC8ferpJTGnN81Nvyf0dc79/wRWppmHy+ZTm05Ta2wecSZ+IHGfgj49NIbxC9prKLJkuRHn2wkqOBMPt6BrdY65ihOP23aAdbvZEhw/KbY9XBta1k8c7tuCkHo8smRuTs1X2G6iFamq3fKoFOs2u1YZ+YDptoz/sSWqCJvCygkT3v1GX8gwiA+PXukStmlGtptmdJXXLDlDXGvPvpXbLMxMN6S229vVRcsTJWOtJJqkiQC/mMOnh98o+milnPWLe3FKDwIcA+/A005nCF8WmfYyBqrz/dbQde9B8X8aDIexV2ZZe0/4bIWC8v01YuZ3XI9V+8RpXVb1VltHD6jSNH1Px9QEX9XVz7BWAAOVsQ+IwcJddnL9WVjOB9mIEBCw9seME4UKiyYlwv8TKXDVCI9Cf650rHRVyEkckSE/eVND1yphG/LZROXioW/vbpoqNF+9WzePIUE4tqYCMMuUK/zBtnarermQU4/IQeudogEiSzZOyYAPdKTD/ia1mzZ+LG6PHwMqVmQSonmw2c0DatJxXO60raGjYmyYMbUQ8UfKvd9LBG+x1nEjcwwnd+rqrbvn8kJVaeieeNhoYT38H2zFba7aGcVbH9/mn7zJgmNGM+xfsX5qayx06PG5o+CHjo/6Ub/muPd0Ye+XawljC3DcJFT5mzRmvLkVfzU/WTKxVn+6YdSggKYdW8AE2fbsJ65ju5BAG/i83eccuuQubPOlwj3MfvFW9bE6D9KJCtPUzhhsg6ToWqqZ9IlsXU4hdOcB3trSNyrCcaULR0jtG4lzBHCWr0xArq2zJDS4k8cSQf55YZ2X/uiH4F6qkahzYkTFuIqPcOIJxwlW3n6+VTz6Yiw2Y/x2bn2l0B5dJ/3lc5wzkJxHtcSVhM0VB2pG3Sj0/Qugd4CxcG8VQD9D8622tWB1hlwID3eN7Ns64GJVyB1n6SBOKyUVX460ylUWqi76H7OjkTCNQiUlgNlk3DhNMaqL8kaWny6r4pILhhG0p/fxfq5auGWhiTAkOXan9uaKrTH/E+h2tWmzuE7JeIUA0fIAiTc/teJrVI+wP4TZesETxEMbl3qCZAtPpEzeSv+gWzO2+VP0ijXmwahVL2H06S/WDy6xzrc2exKenH4cyl+0vgD4qUjndWGRG/Sswfynkmw5pjl7thy7ERs7NqVh5LTEBheDG2dVsITgNe1V995D+fIFUDC5xG+3653tRNYmFunhsMezJYZ+8kvq6LhI6++xsiMIX5TwvqTvvpbxky7zhbDxgWKP1ActaVOKArczJxLKGxkHV2oNglnjRXzWN75sWYvaCEnvQE9j+JwT227h/2wgEfM45icyS+aCpsMu8H17mwQfaaMPu7azluvAw4lkH/ubWmP7UrWtb0Gv7TdKz2Q5f7ytu6MvV51OhdQ9EU7nXRsvpzzYgUHqyrfxpkufT8pYwUO8TBLsrAsPZY7yidTgkhmHQA7JAKQJlK+QdkHm+yfp9fmfdqXEShCp90JNulK0Fd7W4KuXzhPusYg5N59gOtE1uX//K6Cv0qz0NUJWrjuMG6Q9pu9ncaLdmHP0gT1h+9xcmr1fiL8OUGX2p9ihb+m+faSXjzqdPYkw4zZ3oC4lX0/4V3knFSkvaWfsvA0hxoQMcWBAybCkwcRAoc5+aVOraCzSEtErTYlflmTp49moHeZU2VeDrcnxnZB5mmQ1ePFpcVcRI//JJiHggPvkzG6QxA6LcDNKkQnACdOn5nJBFsCOnin833HgveLo+WbOC9FV+2glPAVe+eWrzuu8W/W39rl4iRCiEXbvHkQSiGvby7W84gZTv3V5oXD3zYxmW/MKQy6fWWpYYPCPl4a2BgLhM36+hah9jWqo4uHnrAETWM5opnf63FC3dW767Z7vId8ZEdPMh1d3B5s1LYDy36ZPqkdSmvZ5eYT5kdcW75dAq2Z30TDV6+F6ACIUpY4EYm0KdkXkFoGpL1CyiD85GriXkPkzNyG56WcNWsNUEK/owz/fI1yGrTbDe0wUEYg+6Zpymufw3A+MJu791JvrFxdIc/0OVhviwS7XUyNstgjlUxM7pYl/Lx5p6dsvREv/CwfrZgIR7SkZ4EePyj//MKxGnhNgmjCDacao0Js75CLa5NOZUMEQsQkjjf9vJJNKBJ9T2LVyPeU2YeplmtaOPC+ehcDR7M4LbRmvmHmcz6t1V8HbFrksoFI9ROAK2j7lFlIsWXi6H+uvIfg3uE1+qeDJ6FN/9FnWkrltn8t7VH3DUJKo6i/jatGXdN0Sp52Zb2nTk85uv9DBUCB5tXJ2962kqw2ShdgQqdlBZFX1RbGGh/ZhnAvl80qo4OzChm7D1hUO6Xr/exsYK2/UhIBMPspv3eTIUeoJluHO6ikcB7YHyjbUSq4ilu/HMbA+6w6MFGeP9Mb/Qqp5TbX78j9t2ifeT+BXB87FaVY2R21zRtWFGQx+W+bvqx5VmfLxaSNxEuV67eyQX3m9sPhrcZkXqErp4LahYMycd03SPt+bZ/P3ozJNMes7dQxWLY1O0vQfl6SYQbY8f/M2yE/WmG8c7RKy037vvhUhSC83+BgjirWSp0YRMaR+Yng+s2gYRiL3/N2pE1WbC07ydTLczf5W/2SzUJImaxWqYZYNxTVnKUs8uBT72xgCqbyZhS/5qXGSmuNwxKibKH0bacgTBGmAaOxIMNz0CWtwiChbIUQG6w5nH+JTVFNSAHcyi7htZ98sIuHjVKvV5od1x0+lu7CVjk4wJDt1TUiUhQwpMSBCAGqv/V+cmp/pVPLk7Lpie3XC8GsDiF5Isq9CcSS80hrNt2PivUt1bD6shATB/yQFhIIFYQ73yk24c/ZGL9Ri02YHTGXSGNQpORJgNUrzda2akww4vqAUsMxiySWOwBDZonyn607VXQd6rGjdgqjLgt8s9oEQZ5TEJFpErX6v0Zk9zYiQdbwUaNa5pqRaX8NjBBFhKUb2qUNsy0zj3fEyaxA5SEHu5px6dMF2cFb0PBmhPc39eBcCWe/Me95PKRLzHo7RVRlA5r6xtKLFJHN2krDAF1TiT7DQXH1TtzRdXHj5VrlQ0dJp6rFyRiAr1egEqB61GUpgHjtEyGMYw/tnGaEJURJI4uZbGIYUOtlbuT7E1ivX2zZ1hqGeJ+ZOWijywFoDwziPMzWo8J6qK1Lu5e3h3uQslOAeKNyRRthCZHwGJePRguXWrYZFTJgQc4v2dI8ZDmJv3VUy1ZaDoqApABnlFofcQ2V8RyXj04Ll1reFTUyYyMiyF3zS3JM8e2T2a51+2G7C8DqG7A8srNXdqykfnXkzkQUMF4btUmLSQqe7LS0nuraaD8VAF5SPIE00VY87WSeWq9Rs5N9dkMsAcmkhZzCZx4pa2+pHBUIdhffPPBdVIwoyQMQ0EN20oDu27zVNeFtwruvMO4r7Mw1GxqnEoPrZi0R957htTaRz7RXN04ALJOJsPme4aIf2OdqJQfAvqX/7uS43oGtx4f1eFs5Es9UtyNI2+x3h8HVZL68W+f9fmW/T7nfx+whna7TDTZLVTF1E1GvbGWS9pEGmN/S39lkJPgl+16gqiedHMd5/JRJvGS7ncjjkM9U+5/nQFv4P6dixw8ZqiVKZfALLxc2378si+oTX5ac5XqAgjZGlUroFbGESDqcYX00+7UT0rl46bPX2Qsg3ZVYYKuQE8I96N3fenCDmz++FuLqWyTuSqVinQ610eneq3sSFy9B48FHDGAu6ypccHc9AGJ54Gp7rHExc12lQNM3cO43gO6bn3vkUZxMjWufe4/jOilQTgVIFqUFAr+0CRBCt+wwWWBhbxDSLuwsCax0kdYwtHx6hlxx/pt1lV/htmS7yaW8uGWedPtLQEliZV9qdL8YimeP/PvUM+O+YmIKb5h9NpIdzZqYA1k4f/DbObU5QBVSt6+i7MFVB0q+EuuX+PMme7255n1qXu6eLrsATrDWHOMFLUyCA3C6OTx0eaJT8i0TMjcbXIBl1mrB3DW/WM2XQCkmv8jMFR04e86SCjHLuUJOEh3iCcItV8JYj6D329WCCH7e1GPP9TKyv3AOVrqY0I1QNV5fYr94IJW4M2FsB7BBONtiqunA2vzLO/eO+nJSK07a9S7AFY3OmV//wi+zmH53hLkCGBwX4gU76r6jNImWOcMIUSM5rISmHKsJicIUjB/YLTs11vdXKBYhJzE0RdEEwrI/WLUQ7oAh0Ztj9pp+upLHqP7U/47t4iScStBeR/db9Zr5IZwrLqSNe230FWfo4e8LxIbPhAmTVoQGsYM1ODzZCg3/Vm/1Vm/cxM2mOLRVnS+VCzxf77bhf4LGnCNupPTVPZ5idegwNyERM+OoJkkBE9j1mT9YbpBIAMni+d2L3hOlcXvGH4guRaHar3hU1p8z+4nlEvHn1P+lomsFv00aIDqtGcsQdqz7zVz3qRW3SMBvmNtvWC65fFSXUsoKqE1hr8Sf010kuvpd52eQhOPNrgY2FiEWerkw/7KSRBdWrjac8QaG64YUABaSvj5ajaryHTDoPuzqp/UFrgkaSOX7wkIxuJTRSApG9bNZKW0+noFEiy/bpa34lwdCRzpNJbrhIj1gSiW1WXoj7apo562uJFgKoQ4tIuhIIxbDg0gXOlkf8fSRYCdLevPBHXGPBWzUqHQ/Iop+INbgdXD9t47J9T9k67/V1rsL67/L1uNt1TVe58sx0CByf4HV16IF1UEz72ssYtjOyKKvoRs50eOEX1N3XkqgEwnYZOLW/gX1eTMvBSxi6Phl49UsjhzJ8WVEw3j+ASoKe0tHWHGxc+OXY1+LmSYYP7fTWs3zAl9kpQfYUPeogWyT/rTmdPQHzLBf/JrUY4HCUwk9yV8l8NKDEg4Yszeu25nSr5xd+eo9RJo+m6qd+WlO3frq5ieTdL7VGxmrv6pq3wy+D6emV/nDEHfpqfNfQfKMV+K/9Wv08/wV6MzXekTDfGkH5PMtxGNktESkr5ZR9lET85IBKdVE2mY59UdkFEyp4poekjEvvX+7rQeG9Xhb++M95sW2P87SJXScjCWJnMhyao8pOX8X2k71NgzsGc2O3xFI9z17f/DMcDxWCxISPk0j1T9ABzvNHM/+ATvz4gYtbQft8NbiXttFHZ/T6aUXac2oOxT6Q1eqPUCezDf+MRe3X9/PNY6KujbZtweZPiTkZL6qwz+woXivCsOzFzX8+bv0qTJ/YG7Em5LMcWzyc27O3H8rl+CuDOaJIu0p/l47d59dfHv5Oc4Pmyq8f6pi1AhF4C0yWipjaMwWyoHTTPcTUX1abSP5+UoDKLSOuk3G6P6mJnBLZaWOqboK6DjVOtrpQT1PXzo10iD+usdggz7jA+j1xy0qfIG3EQMMqjGOsJuX9zKi2YnahG4cvZdzo8rIPopvXlKkstDbZdIfGcjHqCGmaDTZjo8QJFUanfL8SEH5NN40EnUjBttD0BPTMQVzttnlirCUp+PdO9c1QJ/2UUklTLpBJEXUxOkO4aRp/YIVznntRG8tf25cztg/mkpNZlmnetiZcqqJGxYtSkh99P94vD/bnyMTMJLY9TMvWFe3e23PhKP1/hR3WM1fkyJeIhHa5sQztEExrjFChflhM6WAAK5pyA01ZysYVvvl1AiMNRT3hvlW3vMNcDMSExz/cAsBzv0UCgo5GkjE4Ixb0m0zRPEHNghazCuXbqJWRqpZekfOPRF2VwU2ftkvEecNk7FijrWUd0WhVrHiooXCvDk8tr2wbo8YEj1VGw6PvORWj8gi3uqpbYL5udqxxamRbFwlgQCJ8R4hQSy3kYBBF5pmHiqfHbyJK7wLUJVdv5vcsbip/NaUncJ6jDk3hFTG+7nxq+vNTYZS6b4IHwP495b3FEHYycbsM1UFE/cHr4CrCujiHEKoMjZg+xNxEMPeJYEKwhp7S/2qXCH6KDgjVbFnuIeKdSdxaINEwwUvmL6edfzroG8VB/G4Z6e40nTu8fRpgD+lvEVAXz/Xtj+AMtg/0i8Rjw5Bmgg5vw2Ps0hBGolmOIIenB4PzUn+ILK4a4jZkX5g2+j7XmKAK8kYpi68GwU9konf2sDTGFRYy2X2bzF+FhDD81uu765ZLW1Kvl4HYjLcqduLSWwK0O2wuTD8WMAGgRWfy3INhvCXM8L1M9lSx2oy8yzrbVV5jHdNG87MxIA85MlIydnTJd2tFEH4iH7sjFFdB8XA2Orgcjog8308+A0VPLhFVdhvYXePGR5mvI7qJbZJhRENqSLTuXmYbOsJURG1+9I1WhtppxZB2YSll3bYs5z8KYFgKbqWs3ZUIRaDX2MKLG+xtg72GC2UPcXpvjFGm2J3aN7sl4xAwE8hotJNGHJA3bZzI11i4sdK873nnup2fvWwZdik5xNOs44Ozdx9c5P6Wu9A8hFNvPEQXfs3WtcWQrQioTTngh6cdRWGx6RWY3j4O2Opn5FMNnXJ0vTRdKUpLaZ1jokkFuDqHVDG7NkoJTfirLUgDvEuwaSDojwcEeY6naH5SojzY4zNhrEEjMlvAeffTBlJybq41RTRHGIFFla2HKMM3DUVCheuIFBPiMnRowD2GY/A/jWI3ibO6mowK3BGPD0p8rhU+rI8OExJyv3wLvSB/3ClxXsHc8SwfYDlsjFShHa/apnhu42i/KnpvsjWLOekEAd3aDami0LRsm48cv0EOT8716Wd/qrIrLtrHmfBykqA+h2n5btCaxf/BX3oVL9fNEvMnANUn0xpGPHr1ZQlFGh4yJQUdAqoTDtqG6V83Q2QqkDVGIAPF0Mk5v476rPHDVpq+IjhZfS6dn9Twkq0poRCr0tha776KqzLZRRqR6NONOTR9O+/1X85vJVxiVeT/7i8NMYUwrz/GZQ2GJWzx41vKYfXdLqVsXU66oMo1FPHlk5h6TZCLOx5zWm74sAnKGsRdxJKdVQOwp5p1APeD0AC7xnLEthIgCDayBaOFOzSzIWQh+02Uhno5SoOaqd8cNHqClKFSxRML7G7YNx9Id5aEMrpGpwlJ0ni9Dccw9iz8xEztCxbUT0CEqGK6qIulozYsyBRILQlsjJ060EjJSqHx3g9s/2pLG3oYf2sXASNxW6nrITgcEY1hp8PYjwwVDkBDA9PFrDgor6FaCElnAKCY9fIuqRZEbLZAIIpnaNV5ro8md1XaqJ+Zn1WxVlw8mlIzVibJX6Mpmef4gw62bkt7b93rLxG+FwGtXfu0g4NKUykcaVmrChhFRolZJS+l83rHrmGlZCdFhEvw491QXWujO4tF7xjKVjyJdv8UGl4R8+PonuGaOS1BkU0+lSeM6q0TSrkc6QYPCyu4fexatRIvDuCJ3Q5BDaH6ARc/pY2S7n8gsC67uIA7VY/UyQqlSGkoTCGM/1rRehjVN+FERTpTikoR9DFfAK9ahZSmqOEm01aFoHwVXHa+Sv+ugMG7Wi9likFLSkhGG772aDfPyg/sP2nz3uB+uEzXlTLMarIccLRQICBOtFefCnF9JcBfBn+8isk9y9I2YYyqyOQtLpkfTOb0DonT/LYNxI/HKUPGK27q1jEy0fLA+KJFHVtzYptEbQ8ZX6d9GC2cFY3ND0lYPVutsEnKjeUyQ2x6KPLlIt555DyCMAGPOVuKbh270/pq6W7VkW5/xam3CxPnx0HKn76cbdbnmvpfpTP5vsfi+Z7KgfisIAwoi3v1LN7JwnwQqJh77QwsQkms+q6AWzoB5miHHMxadmEso/ncvZ+bi3M+F2lYr6azU2jOe2C22cLIVweFAzVrDNvFU0G4oVZ1im/+nEyBQGhCWi7Dv9xge0CcW85uOopkgeXM9vF8uIbUnucvu7r4csvoAaMgKq/zIzU8T/KbOoYmQGm6EK9BKb/JVwrRhCDlDc4YNQ+Z0Oco2rXv3m24f98CBAbt3IVBlZlEh36YxQLl1xrbn2W17wU9zUWd7CENGsClxZZJjJ7D2fDy8dhz+9IviyXrAxrBsNnaV0/7C4ffNoFuWzGsPndn35Rs1ORrKAZ3TtX7TkRJ4ExqVvBiGGcTE/HKQDT/JkDyadOeyAo3NxhZTNaHt7wVU8yLeVc8DW1XbCaS60WbH7RVZXk1bDLAJirZ0meLkuMOAvoLhQ54/doh3XGZb0YHYq8S+SQaTe8ZH43VW1YLZqXwcLR8sWaQsee2gL8EXZ+DmqUTVKOpIWxPpgPEQL2YuOnGJ8UcmyWszb37g1VkwMY05LcdXte44UghfVdgS7ufkPjNtzBsWJCB1QM0GZM/v+F13ZY5ZwbiD59ow5OCZp3FYBKx+STWVJj0pCxRu41L1CBWs6ZsfBRrJH3fbkYdCpxustGsZPzquB75F1ZA13jvdcEA2cQ3/cPcsLd8fikUQZQqPZKUg2hEYpy5FVKWClmfuKgMVS9xlo1d6HfPEXm9sK9I3qm4jo/r/al2aCjiQ5JxU0nTDVtY74jQV91QMekuBVZ7qa81CGWfBGNyVPCAfNDCxKuivic517HSGmzQrtlukeRso6BAPvOPun1QYwovdT5hRHnAVoCC8xg/Ok5A7ceXyW4vpWqvDENazMJUKdeBM23EXIQi4oV9i6loLATLz/YYs1+ZF1JnkLjZ30f5QQeiZn6Nq5jF/k5g9F44+bZgNCxktR2u5EbRDm28LW1bp71tq1JkiW7jsNblFQEpS+km5IM/BJMjVCvGgPccdZxv63KclIgYXdu30o53bEvduxvWL/nwbDGaUrNlsMpi3e6wVS8dbzBZ/8WrNYJ7oc2ARgq8iwEfAtgkj+wmtn4XYTxp60Ao4WcaJ8ChVaNahPWuOPCPBsXys/Crka5KmiVd/hCy5QXeIxs/FJ2px1emzpAoSnItWzFEVZFRGSoYS4xDi95xOcl7dlzq9sILiR3xvYZDEKVY+Kkib7D9HpJ+3BGj6uahynO8E8T6DjGd009d5mZdd+QBbL8srRZXkCJQubtlYWJMxfhoCSkgT26EIYwrMoHW6pu1hK+uwSbVxwQyTzSS3R6aknh49wNOKJUJXACv8jfMsyn2hHP9b0uwQfUlFmzcENjOh276ego5cUIjBkOwFaPDq+ReUd37pPIT0FNbqbJZ3wkJHQ+tyMka7DY67Hflifjzvu4j/u8j/v2GO9IHDLyf02j0xSAh0foY4nm2wfzi/XSVTQU2tGSy9EUHjFb5WDZX1g0aHCbr90RW2S3vx6aaNGtHy0I+iMhoB3qeUJbQimwdXoTUnsNsVa30DoPlX6GXs9X1Th0dH3CQbUrli4JPDJpZyExYRdTWzxqV4pQK3/e6sbIVBTXG2hv6JeedEzxHmtxPPm9gwNL857WbRKiS1wWRo/ZPX/PpS/ZQEEIGqQ7KmFS7GJT8hV2qe2iTbaZ/2ewYwPznKMvfxzkQ8vAPZpgJVCVsDrGWeKD8y/bBpWidpRoXjH1jpnxZRutini+Xgw0xMX3NmActpxK0UeaetIRnaZjb8jnYkt9GNWfUy3L7bXlXLMZUX+lpuJPtCipJacz2LP8rQjcWKjzHwAMjw5K+avWq46iiVpbEI5+rsnDjpBJ+X84ZnfwN9yoxx3FHc6S8qev98+0pKD5QpZS6lKqU4n12rvk9Vxz0QOWIhbuOH+DikIpz0OXbnj0TD7dqN2j6UjBN3lR5+kJ/IiTYkiuevLbzB3DoLP8ZS6Kvc/q8PerKA6yM/Pxvo+F+vMitJzxSNvOOfFZTmaiboGqOiomynjvP2JMhh2/GKOVcxnn05ZSmYPCgbwaLC5qIQMFedSpHL2P2qhYcf0qU2q3wAynAfrU8yILrtCm+dd5uTGDqLKzJANDfp1NJMxVyJLXihNRdTH5vIz1DlW/x84z/eidQ7mkLJZOm2JdqFUVz3VBz2XD3UFo1FpTw7gBmYDYgC7bX9gGavWEO/daHomqETK+vbYYn4UwfMIZ+Lc4EWwfkIsoD5TdWZKXrGnty1MW9H21KidWWJMaKwhAiBPVY5qcRptMiWbvgTH/Av8ulUwJR/O6ZXwOKywU6hGAc+OeKTMIOkrfCKCh9BzR5tTJJyDTtJt1UyZeyvlMt/rnqT0dxxn7/5ltlU6nN685i1nweD7rgIPn6fGWaPDuK+77DqwVpK/OTODtHqnvtJdOSpljKOPwPTbpG8WUSeCe2IBwe2Hiwpy8gUlt8bkcIVbFbEWOJUDUMJUEp5nvihzX9Lr9l6tQ5WenPthXNGYTgDnIx7Q89Ww6UEWxn4WTBSeg9w9DngfxUJ+vTDim44ReIW83XKycZRMEVPWMp//syuD4vSKGZ+qpgiHQrPAH9xrqTi+2CStEg0QOLsKOnXB2oQ/uobw/vK45D0HUufNS0QUVJJkpBxhUxh/AYdJGdqK2a3KZitleJtjDXg91HbUhnMwf6o7cxRpoXF8sjpt5MwPom9UcDL6J+f+WSinPiq7gLfkMnNO2hJDSACk6Lk2ReBBmfO5psfeweN2LlYbcog6it1z0wkkHpPoC3snKMNtUOwPleSaoGsSFEXL64/h8xWEVTCApFfMxzEtDWnb0ia1E3ftujVfrUUGl9JTAsbk4ksRf/mNRsc8CmkdNPdZ2LYWT2VlxmPKydC0lflyqFkcFa0MWp7Fk5zW/jF57Oa9OncgUS1MzAJoeYfxwj0jQFaKCXYyQExrl0VkHWgHmClsvEGhU2eCUWTVPpT8zNHtcDhU4SBsccYrskxtcyfIOTNnB1kecriQyllAuL6EDZ3cAaIY+8iTGaw0SjmR4a8RdiKkUWx5jbn9FiHzPLmXQCQ8eD78EsDj/kZJVJ5NTsjoBSLr1ehzXykVsplMd8khIGi998P3DUMJrjTAJszl8UrH/DmcKGIVO+OUhPg7Y/BmC77rUSA4icy6o5kgu/AYLMNd1gupgdgDtG7a4cKDv4VpRB2rEyHPV0gWjIC76aFkgCVu20j0/zcpeY3vS8gGEcMlSSQ4qRm2S7Jvnnr/FzDlOPARLh/smVAWATdpNOC+XhO/FJ38ssL++PKadfeUcoPFy1BFsmFeBDmb/pn5yzZL0qWophxOkasQmBUuo1LJkPnqD9X/oNI52VIhlR985s260DSbWc3JicV1zuQWx3/ft/6hS3FvER4XTf31pzCRwv9fGyNXrl6HCevrxB+Dfw78/rzgkRLMoUC+drq26fo/H7/2IT2nMGh5S2FsgsHSR+/KvTbBWrs1j+MD3lQa9GJmVxZ8s/ze0TZJhgEbcycNhk/wGrITMdtU5c5lcY/1Twx+hoqPBZ9aQzkeqZ2J19Rqmpmb2oNVHZQbNKeoNo2MWXzQpThWYzg4nyq1tjb0tFg+5KZrh1wcTtLpHpw67YEXe2cTshmyoLWQCH+VY1ZSOnTx9X0NA8warJOrj0u4ohvArpctZtBWgxv3TynDwzEbtESfN5Rgb4cu9avsWVYLlc0DIi6u+w28+FW4iRqlTx34DTCXHS9GDz6HEyZKQ5X1Qiamf1ORMX3oXOKNPVJ8umf1D5zBbIcNG3oQwcjpoUjcCgrMg8DophCSdR08XtOnNugxOsI5KMh/Xiv2yFNBErc3021lsBIzm00SEINnAphcDhMhTY/cvogY+XETCVFkFyUKLlDoh1TYlGb2meOSrhydx4dJzXTWJyrHIX4SU08ssM4A0xirNGSZikmPRB/LJgvhj++YE0GYMtLjgIc81czaZf+cbt2G29q3/xP3wd245wHyTGQ14M/Wd+kdti0Ek983JTPM/aS1ND92RpsPPkARy/mNR7vQ4gqX8qkevbY22rgx72dW3P5CmUxJFH69yb8c1k7rxCQfufCXga6ZoOp4JuxS3vEcDptBL00Am0a3fjZUq/5BP740ILCsQUVbAwVlv6NIrrMv9/oscC+DCRpommbc2n6vOwVrWuq1shXNDJ+Fsm9Ab4WhVCaglfRweIjlvZYseSQcKfoTa1tfhwjKjnZC9zn8pxAxbvX/WPVxuXloITuTWluAN4qkPtVkWThS27LsX/5W3gFtVCyTyszvGCz9XKQ6kE2bM/bMzFC1obKQNhMFL5p19xls/evi+pFhqtJ2nRycPa7x+DWw9qx1uZH1JG5Kz+qGI3PcwAHLcK3P7+oD/U7ajerhcETKGs3rKNp9QMHDUvxAxaa02s083KAiSjbvahghZdPyXcGsbL2RZcEjgXe1UZ2evOC3nYqIVTrEBPIv44hKRBzdGNbLvwXkwoNFTtDIPK2Tn+xt7MskDmjPmcQhTU1bDpgOmhM3FvTKZQHiLpjaEyfs89+Msi2TBdWJwsfK6qQ5hsh7DKmNFVgWnZQpwECzhaQk5mdV0HHygLzjvi0HY4gn93HPAGLqqzlvcgha0O2zgBbkB2GF31qzUgaup3nvjS3z15fI+8M62kwYBnxXtaG3prMkSsu6e00P1A5nRb1QbLV8MMRw9qfG6zvGVYkp8syvPjNaZZqkLbXuU1SidlP1hYrbSJPy2lM5xqbwB/CJrswi5oVp27AB1L0moLrlRfAoFjVE8+swRG8cqdwYiE5RQalmqv18+cNhsuJ/QcfMIP5O9BERwcZGOWMrnSr6v2pVz2Y9Ela8j8aEod9c5rvw0VDzhaFqe0F9ZZZtrIMqOda2zo1HKTf/Vx4wsGN/ZSHOeYzNg6O3ckD0UouAI770G2VE4WkfZdCJHWd+SekjRsvc+wtdMVOPjlmn3gH9K5b/Z12m+TVk/RoHSkjwMqqS/+Vvbu+m0OsytmkY0vobLjq2VBfGms5JynMR+b72lBuH1aNfM1NTrWVWz5m02miMMYVwwlglm3qQhI7BM+vW4OfXV53CbzBcAT//dZ6dz/R/zc7TDNrU1oa1jtgQmHOl/liN/E3qwsI6hjoKQW7HC8k0vSuCA7jGE25VtngSZ4twVGa/RsiEHHVQyBEV4EYOphl4YlSTIuOU+Iwp/dfTjAnp+MRnnASZOn90/LqbeNEuUZetugtBkFtUn8CGdjVD6rj8kN32/56z29gEcT5On/m0Ptiv+3+uz9n6XJi+6MCizslln2pzyueV5gHTZ46tSTsxuZTSrUaZRkCWP6fhHOTBpCvA50i/ahUmWAg==","base64")).toString()),nq)});var o1e=_((cq,uq)=>{(function(t){cq&&typeof cq=="object"&&typeof uq<"u"?uq.exports=t():typeof define=="function"&&define.amd?define([],t):typeof window<"u"?window.isWindows=t():typeof global<"u"?global.isWindows=t():typeof self<"u"?self.isWindows=t():this.isWindows=t()})(function(){"use strict";return function(){return process&&(process.platform==="win32"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var u1e=_((WXt,c1e)=>{"use strict";Aq.ifExists=n1t;var GC=Be("util"),sc=Be("path"),a1e=o1e(),e1t=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,t1t={createPwshFile:!0,createCmdFile:a1e(),fs:Be("fs")},r1t=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function l1e(t){let e={...t1t,...t},r=e.fs;return e.fs_={chmod:r.chmod?GC.promisify(r.chmod):async()=>{},mkdir:GC.promisify(r.mkdir),readFile:GC.promisify(r.readFile),stat:GC.promisify(r.stat),unlink:GC.promisify(r.unlink),writeFile:GC.promisify(r.writeFile)},e}async function Aq(t,e,r){let o=l1e(r);await o.fs_.stat(t),await s1t(t,e,o)}function n1t(t,e,r){return Aq(t,e,r).catch(()=>{})}function i1t(t,e){return e.fs_.unlink(t).catch(()=>{})}async function s1t(t,e,r){let o=await u1t(t,r);return await o1t(e,r),a1t(t,e,o,r)}function o1t(t,e){return e.fs_.mkdir(sc.dirname(t),{recursive:!0})}function a1t(t,e,r,o){let a=l1e(o),n=[{generator:p1t,extension:""}];return a.createCmdFile&&n.push({generator:f1t,extension:".cmd"}),a.createPwshFile&&n.push({generator:h1t,extension:".ps1"}),Promise.all(n.map(u=>A1t(t,e+u.extension,r,u.generator,a)))}function l1t(t,e){return i1t(t,e)}function c1t(t,e){return g1t(t,e)}async function u1t(t,e){let a=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(e1t);if(!a){let n=sc.extname(t).toLowerCase();return{program:r1t.get(n)||null,additionalArgs:""}}return{program:a[1],additionalArgs:a[2]}}async function A1t(t,e,r,o,a){let n=a.preserveSymlinks?"--preserve-symlinks":"",u=[r.additionalArgs,n].filter(A=>A).join(" ");return a=Object.assign({},a,{prog:r.program,args:u}),await l1t(e,a),await a.fs_.writeFile(e,o(t,e,a),"utf8"),c1t(e,a)}function f1t(t,e,r){let a=sc.relative(sc.dirname(e),t).split("/").join("\\"),n=sc.isAbsolute(a)?`"${a}"`:`"%~dp0\\${a}"`,u,A=r.prog,p=r.args||"",h=fq(r.nodePath).win32;A?(u=`"%~dp0\\${A}.exe"`,a=n):(A=n,p="",a="");let E=r.progArgs?`${r.progArgs.join(" ")} `:"",I=h?`@SET NODE_PATH=${h}\r +`:"";return u?I+=`@IF EXIST ${u} (\r + ${u} ${p} ${a} ${E}%*\r +) ELSE (\r + @SETLOCAL\r + @SET PATHEXT=%PATHEXT:;.JS;=;%\r + ${A} ${p} ${a} ${E}%*\r +)\r +`:I+=`@${A} ${p} ${a} ${E}%*\r +`,I}function p1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n;o=o.split("\\").join("/");let u=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,A=r.args||"",p=fq(r.nodePath).posix;a?(n=`"$basedir/${r.prog}"`,o=u):(a=u,A="",o="");let h=r.progArgs?`${r.progArgs.join(" ")} `:"",E=`#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')") + +case \`uname\` in + *CYGWIN*) basedir=\`cygpath -w "$basedir"\`;; +esac + +`,I=r.nodePath?`export NODE_PATH="${p}" +`:"";return n?E+=`${I}if [ -x ${n} ]; then + exec ${n} ${A} ${o} ${h}"$@" +else + exec ${a} ${A} ${o} ${h}"$@" +fi +`:E+=`${I}${a} ${A} ${o} ${h}"$@" +exit $? +`,E}function h1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n=a&&`"${a}$exe"`,u;o=o.split("\\").join("/");let A=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,p=r.args||"",h=fq(r.nodePath),E=h.win32,I=h.posix;n?(u=`"$basedir/${r.prog}$exe"`,o=A):(n=A,p="",o="");let v=r.progArgs?`${r.progArgs.join(" ")} `:"",b=`#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +${r.nodePath?`$env_node_path=$env:NODE_PATH +$env:NODE_PATH="${E}" +`:""}if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +}`;return r.nodePath&&(b+=` else { + $env:NODE_PATH="${I}" +}`),u?b+=` +$ret=0 +if (Test-Path ${u}) { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${u} ${p} ${o} ${v}$args + } else { + & ${u} ${p} ${o} ${v}$args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${n} ${p} ${o} ${v}$args + } else { + & ${n} ${p} ${o} ${v}$args + } + $ret=$LASTEXITCODE +} +${r.nodePath?`$env:NODE_PATH=$env_node_path +`:""}exit $ret +`:b+=` +# Support pipeline input +if ($MyInvocation.ExpectingInput) { + $input | & ${n} ${p} ${o} ${v}$args +} else { + & ${n} ${p} ${o} ${v}$args +} +${r.nodePath?`$env:NODE_PATH=$env_node_path +`:""}exit $LASTEXITCODE +`,b}function g1t(t,e){return e.fs_.chmod(t,493)}function fq(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(sc.delimiter):Array.from(t),r={};for(let o=0;o`/mnt/${A.toLowerCase()}`):e[o];r.win32=r.win32?`${r.win32};${a}`:a,r.posix=r.posix?`${r.posix}:${n}`:n,r[o]={win32:a,posix:n}}return r}c1e.exports=Aq});var Sq=_((h$t,F1e)=>{F1e.exports=Be("stream")});var L1e=_((g$t,N1e)=>{"use strict";function T1e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function U1t(t){for(var e=1;e0?this.tail.next=o:this.head=o,this.tail=o,++this.length}},{key:"unshift",value:function(r){var o={data:r,next:this.head};this.length===0&&(this.tail=o),this.head=o,++this.length}},{key:"shift",value:function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(r){if(this.length===0)return"";for(var o=this.head,a=""+o.data;o=o.next;)a+=r+o.data;return a}},{key:"concat",value:function(r){if(this.length===0)return QQ.alloc(0);for(var o=QQ.allocUnsafe(r>>>0),a=this.head,n=0;a;)W1t(a.data,o,n),n+=a.data.length,a=a.next;return o}},{key:"consume",value:function(r,o){var a;return ru.length?u.length:r;if(A===u.length?n+=u:n+=u.slice(0,r),r-=A,r===0){A===u.length?(++a,o.next?this.head=o.next:this.head=this.tail=null):(this.head=o,o.data=u.slice(A));break}++a}return this.length-=a,n}},{key:"_getBuffer",value:function(r){var o=QQ.allocUnsafe(r),a=this.head,n=1;for(a.data.copy(o),r-=a.data.length;a=a.next;){var u=a.data,A=r>u.length?u.length:r;if(u.copy(o,o.length-r,0,A),r-=A,r===0){A===u.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=u.slice(A));break}++n}return this.length-=n,o}},{key:Y1t,value:function(r,o){return xq(this,U1t({},o,{depth:0,customInspect:!1}))}}]),t}()});var kq=_((d$t,O1e)=>{"use strict";function V1t(t,e){var r=this,o=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return o||a?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(bq,this,t)):process.nextTick(bq,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(n){!e&&n?r._writableState?r._writableState.errorEmitted?process.nextTick(FQ,r):(r._writableState.errorEmitted=!0,process.nextTick(M1e,r,n)):process.nextTick(M1e,r,n):e?(process.nextTick(FQ,r),e(n)):process.nextTick(FQ,r)}),this)}function M1e(t,e){bq(t,e),FQ(t)}function FQ(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function K1t(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function bq(t,e){t.emit("error",e)}function J1t(t,e){var r=t._readableState,o=t._writableState;r&&r.autoDestroy||o&&o.autoDestroy?t.destroy(e):t.emit("error",e)}O1e.exports={destroy:V1t,undestroy:K1t,errorOrDestroy:J1t}});var k0=_((m$t,H1e)=>{"use strict";var _1e={};function ac(t,e,r){r||(r=Error);function o(n,u,A){return typeof e=="string"?e:e(n,u,A)}class a extends r{constructor(u,A,p){super(o(u,A,p))}}a.prototype.name=r.name,a.prototype.code=t,_1e[t]=a}function U1e(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(o=>String(o)),r>2?`one of ${e} ${t.slice(0,r-1).join(", ")}, or `+t[r-1]:r===2?`one of ${e} ${t[0]} or ${t[1]}`:`of ${e} ${t[0]}`}else return`of ${e} ${String(t)}`}function z1t(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function X1t(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function Z1t(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}ac("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);ac("ERR_INVALID_ARG_TYPE",function(t,e,r){let o;typeof e=="string"&&z1t(e,"not ")?(o="must not be",e=e.replace(/^not /,"")):o="must be";let a;if(X1t(t," argument"))a=`The ${t} ${o} ${U1e(e,"type")}`;else{let n=Z1t(t,".")?"property":"argument";a=`The "${t}" ${n} ${o} ${U1e(e,"type")}`}return a+=`. Received type ${typeof r}`,a},TypeError);ac("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");ac("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});ac("ERR_STREAM_PREMATURE_CLOSE","Premature close");ac("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});ac("ERR_MULTIPLE_CALLBACK","Callback called multiple times");ac("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");ac("ERR_STREAM_WRITE_AFTER_END","write after end");ac("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);ac("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);ac("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");H1e.exports.codes=_1e});var Qq=_((y$t,j1e)=>{"use strict";var $1t=k0().codes.ERR_INVALID_OPT_VALUE;function e2t(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function t2t(t,e,r,o){var a=e2t(e,o,r);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var n=o?r:"highWaterMark";throw new $1t(n,a)}return Math.floor(a)}return t.objectMode?16:16*1024}j1e.exports={getHighWaterMark:t2t}});var q1e=_((E$t,Fq)=>{typeof Object.create=="function"?Fq.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:Fq.exports=function(e,r){if(r){e.super_=r;var o=function(){};o.prototype=r.prototype,e.prototype=new o,e.prototype.constructor=e}}});var Q0=_((C$t,Rq)=>{try{if(Tq=Be("util"),typeof Tq.inherits!="function")throw"";Rq.exports=Tq.inherits}catch{Rq.exports=q1e()}var Tq});var Y1e=_((w$t,G1e)=>{G1e.exports=Be("util").deprecate});var Mq=_((I$t,X1e)=>{"use strict";X1e.exports=Ti;function V1e(t){var e=this;this.next=null,this.entry=null,this.finish=function(){x2t(e,t)}}var JC;Ti.WritableState=mv;var r2t={deprecate:Y1e()},K1e=Sq(),RQ=Be("buffer").Buffer,n2t=global.Uint8Array||function(){};function i2t(t){return RQ.from(t)}function s2t(t){return RQ.isBuffer(t)||t instanceof n2t}var Lq=kq(),o2t=Qq(),a2t=o2t.getHighWaterMark,F0=k0().codes,l2t=F0.ERR_INVALID_ARG_TYPE,c2t=F0.ERR_METHOD_NOT_IMPLEMENTED,u2t=F0.ERR_MULTIPLE_CALLBACK,A2t=F0.ERR_STREAM_CANNOT_PIPE,f2t=F0.ERR_STREAM_DESTROYED,p2t=F0.ERR_STREAM_NULL_VALUES,h2t=F0.ERR_STREAM_WRITE_AFTER_END,g2t=F0.ERR_UNKNOWN_ENCODING,zC=Lq.errorOrDestroy;Q0()(Ti,K1e);function d2t(){}function mv(t,e,r){JC=JC||Em(),t=t||{},typeof r!="boolean"&&(r=e instanceof JC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=a2t(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var o=t.decodeStrings===!1;this.decodeStrings=!o,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){B2t(e,a)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new V1e(this)}mv.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(mv.prototype,"buffer",{get:r2t.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var TQ;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(TQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Ti,Symbol.hasInstance,{value:function(e){return TQ.call(this,e)?!0:this!==Ti?!1:e&&e._writableState instanceof mv}})):TQ=function(e){return e instanceof this};function Ti(t){JC=JC||Em();var e=this instanceof JC;if(!e&&!TQ.call(Ti,this))return new Ti(t);this._writableState=new mv(t,this,e),this.writable=!0,t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.final=="function"&&(this._final=t.final)),K1e.call(this)}Ti.prototype.pipe=function(){zC(this,new A2t)};function m2t(t,e){var r=new h2t;zC(t,r),process.nextTick(e,r)}function y2t(t,e,r,o){var a;return r===null?a=new p2t:typeof r!="string"&&!e.objectMode&&(a=new l2t("chunk",["string","Buffer"],r)),a?(zC(t,a),process.nextTick(o,a),!1):!0}Ti.prototype.write=function(t,e,r){var o=this._writableState,a=!1,n=!o.objectMode&&s2t(t);return n&&!RQ.isBuffer(t)&&(t=i2t(t)),typeof e=="function"&&(r=e,e=null),n?e="buffer":e||(e=o.defaultEncoding),typeof r!="function"&&(r=d2t),o.ending?m2t(this,r):(n||y2t(this,o,t,r))&&(o.pendingcb++,a=C2t(this,o,n,t,e,r)),a};Ti.prototype.cork=function(){this._writableState.corked++};Ti.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&J1e(this,t))};Ti.prototype.setDefaultEncoding=function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new g2t(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Ti.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function E2t(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=RQ.from(e,r)),e}Object.defineProperty(Ti.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function C2t(t,e,r,o,a,n){if(!r){var u=E2t(e,o,a);o!==u&&(r=!0,a="buffer",o=u)}var A=e.objectMode?1:o.length;e.length+=A;var p=e.length{"use strict";var b2t=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};$1e.exports=yA;var Z1e=_q(),Uq=Mq();Q0()(yA,Z1e);for(Oq=b2t(Uq.prototype),NQ=0;NQ{var MQ=Be("buffer"),np=MQ.Buffer;function e2e(t,e){for(var r in t)e[r]=t[r]}np.from&&np.alloc&&np.allocUnsafe&&np.allocUnsafeSlow?t2e.exports=MQ:(e2e(MQ,Hq),Hq.Buffer=XC);function XC(t,e,r){return np(t,e,r)}e2e(np,XC);XC.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return np(t,e,r)};XC.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var o=np(t);return e!==void 0?typeof r=="string"?o.fill(e,r):o.fill(e):o.fill(0),o};XC.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return np(t)};XC.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return MQ.SlowBuffer(t)}});var Gq=_(i2e=>{"use strict";var qq=r2e().Buffer,n2e=qq.isEncoding||function(t){switch(t=""+t,t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function F2t(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}function T2t(t){var e=F2t(t);if(typeof e!="string"&&(qq.isEncoding===n2e||!n2e(t)))throw new Error("Unknown encoding: "+t);return e||t}i2e.StringDecoder=yv;function yv(t){this.encoding=T2t(t);var e;switch(this.encoding){case"utf16le":this.text=U2t,this.end=_2t,e=4;break;case"utf8":this.fillLast=L2t,e=4;break;case"base64":this.text=H2t,this.end=j2t,e=3;break;default:this.write=q2t,this.end=G2t;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=qq.allocUnsafe(e)}yv.prototype.write=function(t){if(t.length===0)return"";var e,r;if(this.lastNeed){if(e=this.fillLast(t),e===void 0)return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r>5===6?2:t>>4===14?3:t>>3===30?4:t>>6===2?-1:-2}function R2t(t,e,r){var o=e.length-1;if(o=0?(a>0&&(t.lastNeed=a-1),a):--o=0?(a>0&&(t.lastNeed=a-2),a):--o=0?(a>0&&(a===2?a=0:t.lastNeed=a-3),a):0))}function N2t(t,e,r){if((e[0]&192)!==128)return t.lastNeed=0,"\uFFFD";if(t.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return t.lastNeed=1,"\uFFFD";if(t.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return t.lastNeed=2,"\uFFFD"}}function L2t(t){var e=this.lastTotal-this.lastNeed,r=N2t(this,t,e);if(r!==void 0)return r;if(this.lastNeed<=t.length)return t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length}function M2t(t,e){var r=R2t(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var o=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,o),t.toString("utf8",e,o)}function O2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function U2t(t,e){if((t.length-e)%2===0){var r=t.toString("utf16le",e);if(r){var o=r.charCodeAt(r.length-1);if(o>=55296&&o<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function _2t(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function H2t(t,e){var r=(t.length-e)%3;return r===0?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function j2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function q2t(t){return t.toString(this.encoding)}function G2t(t){return t&&t.length?this.write(t):""}});var OQ=_((D$t,a2e)=>{"use strict";var s2e=k0().codes.ERR_STREAM_PREMATURE_CLOSE;function Y2t(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,o=new Array(r),a=0;a{"use strict";var UQ;function T0(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var K2t=OQ(),R0=Symbol("lastResolve"),Cm=Symbol("lastReject"),Ev=Symbol("error"),_Q=Symbol("ended"),wm=Symbol("lastPromise"),Yq=Symbol("handlePromise"),Im=Symbol("stream");function N0(t,e){return{value:t,done:e}}function J2t(t){var e=t[R0];if(e!==null){var r=t[Im].read();r!==null&&(t[wm]=null,t[R0]=null,t[Cm]=null,e(N0(r,!1)))}}function z2t(t){process.nextTick(J2t,t)}function X2t(t,e){return function(r,o){t.then(function(){if(e[_Q]){r(N0(void 0,!0));return}e[Yq](r,o)},o)}}var Z2t=Object.getPrototypeOf(function(){}),$2t=Object.setPrototypeOf((UQ={get stream(){return this[Im]},next:function(){var e=this,r=this[Ev];if(r!==null)return Promise.reject(r);if(this[_Q])return Promise.resolve(N0(void 0,!0));if(this[Im].destroyed)return new Promise(function(u,A){process.nextTick(function(){e[Ev]?A(e[Ev]):u(N0(void 0,!0))})});var o=this[wm],a;if(o)a=new Promise(X2t(o,this));else{var n=this[Im].read();if(n!==null)return Promise.resolve(N0(n,!1));a=new Promise(this[Yq])}return this[wm]=a,a}},T0(UQ,Symbol.asyncIterator,function(){return this}),T0(UQ,"return",function(){var e=this;return new Promise(function(r,o){e[Im].destroy(null,function(a){if(a){o(a);return}r(N0(void 0,!0))})})}),UQ),Z2t),eBt=function(e){var r,o=Object.create($2t,(r={},T0(r,Im,{value:e,writable:!0}),T0(r,R0,{value:null,writable:!0}),T0(r,Cm,{value:null,writable:!0}),T0(r,Ev,{value:null,writable:!0}),T0(r,_Q,{value:e._readableState.endEmitted,writable:!0}),T0(r,Yq,{value:function(n,u){var A=o[Im].read();A?(o[wm]=null,o[R0]=null,o[Cm]=null,n(N0(A,!1))):(o[R0]=n,o[Cm]=u)},writable:!0}),r));return o[wm]=null,K2t(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var n=o[Cm];n!==null&&(o[wm]=null,o[R0]=null,o[Cm]=null,n(a)),o[Ev]=a;return}var u=o[R0];u!==null&&(o[wm]=null,o[R0]=null,o[Cm]=null,u(N0(void 0,!0))),o[_Q]=!0}),e.on("readable",z2t.bind(null,o)),o};l2e.exports=eBt});var p2e=_((S$t,f2e)=>{"use strict";function u2e(t,e,r,o,a,n,u){try{var A=t[n](u),p=A.value}catch(h){r(h);return}A.done?e(p):Promise.resolve(p).then(o,a)}function tBt(t){return function(){var e=this,r=arguments;return new Promise(function(o,a){var n=t.apply(e,r);function u(p){u2e(n,o,a,u,A,"next",p)}function A(p){u2e(n,o,a,u,A,"throw",p)}u(void 0)})}}function A2e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function rBt(t){for(var e=1;e{"use strict";B2e.exports=mn;var ZC;mn.ReadableState=m2e;var x$t=Be("events").EventEmitter,d2e=function(e,r){return e.listeners(r).length},wv=Sq(),HQ=Be("buffer").Buffer,oBt=global.Uint8Array||function(){};function aBt(t){return HQ.from(t)}function lBt(t){return HQ.isBuffer(t)||t instanceof oBt}var Wq=Be("util"),$r;Wq&&Wq.debuglog?$r=Wq.debuglog("stream"):$r=function(){};var cBt=L1e(),$q=kq(),uBt=Qq(),ABt=uBt.getHighWaterMark,jQ=k0().codes,fBt=jQ.ERR_INVALID_ARG_TYPE,pBt=jQ.ERR_STREAM_PUSH_AFTER_EOF,hBt=jQ.ERR_METHOD_NOT_IMPLEMENTED,gBt=jQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,$C,Vq,Kq;Q0()(mn,wv);var Cv=$q.errorOrDestroy,Jq=["error","close","destroy","pause","resume"];function dBt(t,e,r){if(typeof t.prependListener=="function")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]}function m2e(t,e,r){ZC=ZC||Em(),t=t||{},typeof r!="boolean"&&(r=e instanceof ZC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=ABt(this,t,"readableHighWaterMark",r),this.buffer=new cBt,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&($C||($C=Gq().StringDecoder),this.decoder=new $C(t.encoding),this.encoding=t.encoding)}function mn(t){if(ZC=ZC||Em(),!(this instanceof mn))return new mn(t);var e=this instanceof ZC;this._readableState=new m2e(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),wv.call(this)}Object.defineProperty(mn.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});mn.prototype.destroy=$q.destroy;mn.prototype._undestroy=$q.undestroy;mn.prototype._destroy=function(t,e){e(t)};mn.prototype.push=function(t,e){var r=this._readableState,o;return r.objectMode?o=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=HQ.from(t,e),e=""),o=!0),y2e(this,t,e,!1,o)};mn.prototype.unshift=function(t){return y2e(this,t,null,!0,!1)};function y2e(t,e,r,o,a){$r("readableAddChunk",e);var n=t._readableState;if(e===null)n.reading=!1,EBt(t,n);else{var u;if(a||(u=mBt(n,e)),u)Cv(t,u);else if(n.objectMode||e&&e.length>0)if(typeof e!="string"&&!n.objectMode&&Object.getPrototypeOf(e)!==HQ.prototype&&(e=aBt(e)),o)n.endEmitted?Cv(t,new gBt):zq(t,n,e,!0);else if(n.ended)Cv(t,new pBt);else{if(n.destroyed)return!1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?zq(t,n,e,!1):Zq(t,n)):zq(t,n,e,!1)}else o||(n.reading=!1,Zq(t,n))}return!n.ended&&(n.length=h2e?t=h2e:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function g2e(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=yBt(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}mn.prototype.read=function(t){$r("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return $r("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?Xq(this):qQ(this),null;if(t=g2e(t,e),t===0&&e.ended)return e.length===0&&Xq(this),null;var o=e.needReadable;$r("need readable",o),(e.length===0||e.length-t0?a=w2e(t,e):a=null,a===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&Xq(this)),a!==null&&this.emit("data",a),a};function EBt(t,e){if($r("onEofChunk"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?qQ(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,E2e(t)))}}function qQ(t){var e=t._readableState;$r("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||($r("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(E2e,t))}function E2e(t){var e=t._readableState;$r("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,eG(t)}function Zq(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(CBt,t,e))}function CBt(t,e){for(;!e.reading&&!e.ended&&(e.length1&&I2e(o.pipes,t)!==-1)&&!h&&($r("false write response, pause",o.awaitDrain),o.awaitDrain++),r.pause())}function v(L){$r("onerror",L),T(),t.removeListener("error",v),d2e(t,"error")===0&&Cv(t,L)}dBt(t,"error",v);function b(){t.removeListener("finish",C),T()}t.once("close",b);function C(){$r("onfinish"),t.removeListener("close",b),T()}t.once("finish",C);function T(){$r("unpipe"),r.unpipe(t)}return t.emit("pipe",r),o.flowing||($r("pipe resume"),r.resume()),t};function wBt(t){return function(){var r=t._readableState;$r("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&d2e(t,"data")&&(r.flowing=!0,eG(t))}}mn.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var o=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var n=0;n0,o.flowing!==!1&&this.resume()):t==="readable"&&!o.endEmitted&&!o.readableListening&&(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,$r("on readable",o.length,o.reading),o.length?qQ(this):o.reading||process.nextTick(IBt,this)),r};mn.prototype.addListener=mn.prototype.on;mn.prototype.removeListener=function(t,e){var r=wv.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(C2e,this),r};mn.prototype.removeAllListeners=function(t){var e=wv.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(C2e,this),e};function C2e(t){var e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function IBt(t){$r("readable nexttick read 0"),t.read(0)}mn.prototype.resume=function(){var t=this._readableState;return t.flowing||($r("resume"),t.flowing=!t.readableListening,BBt(this,t)),t.paused=!1,this};function BBt(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(vBt,t,e))}function vBt(t,e){$r("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),eG(t),e.flowing&&!e.reading&&t.read(0)}mn.prototype.pause=function(){return $r("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&($r("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function eG(t){var e=t._readableState;for($r("flow",e.flowing);e.flowing&&t.read()!==null;);}mn.prototype.wrap=function(t){var e=this,r=this._readableState,o=!1;t.on("end",function(){if($r("wrapped end"),r.decoder&&!r.ended){var u=r.decoder.end();u&&u.length&&e.push(u)}e.push(null)}),t.on("data",function(u){if($r("wrapped data"),r.decoder&&(u=r.decoder.write(u)),!(r.objectMode&&u==null)&&!(!r.objectMode&&(!u||!u.length))){var A=e.push(u);A||(o=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(A){return function(){return t[A].apply(t,arguments)}}(a));for(var n=0;n=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function Xq(t){var e=t._readableState;$r("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(DBt,e,t))}function DBt(t,e){if($r("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&t.length===0&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}typeof Symbol=="function"&&(mn.from=function(t,e){return Kq===void 0&&(Kq=p2e()),Kq(mn,t,e)});function I2e(t,e){for(var r=0,o=t.length;r{"use strict";D2e.exports=ip;var GQ=k0().codes,PBt=GQ.ERR_METHOD_NOT_IMPLEMENTED,SBt=GQ.ERR_MULTIPLE_CALLBACK,xBt=GQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,bBt=GQ.ERR_TRANSFORM_WITH_LENGTH_0,YQ=Em();Q0()(ip,YQ);function kBt(t,e){var r=this._transformState;r.transforming=!1;var o=r.writecb;if(o===null)return this.emit("error",new SBt);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),o(t);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";S2e.exports=Iv;var P2e=tG();Q0()(Iv,P2e);function Iv(t){if(!(this instanceof Iv))return new Iv(t);P2e.call(this,t)}Iv.prototype._transform=function(t,e,r){r(null,t)}});var T2e=_((F$t,F2e)=>{"use strict";var rG;function FBt(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var Q2e=k0().codes,TBt=Q2e.ERR_MISSING_ARGS,RBt=Q2e.ERR_STREAM_DESTROYED;function b2e(t){if(t)throw t}function NBt(t){return t.setHeader&&typeof t.abort=="function"}function LBt(t,e,r,o){o=FBt(o);var a=!1;t.on("close",function(){a=!0}),rG===void 0&&(rG=OQ()),rG(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,NBt(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();o(u||new RBt("pipe"))}}}function k2e(t){t()}function MBt(t,e){return t.pipe(e)}function OBt(t){return!t.length||typeof t[t.length-1]!="function"?b2e:t.pop()}function UBt(){for(var t=arguments.length,e=new Array(t),r=0;r0;return LBt(u,p,h,function(E){a||(a=E),E&&n.forEach(k2e),!p&&(n.forEach(k2e),o(a))})});return e.reduce(MBt)}F2e.exports=UBt});var ew=_((lc,vv)=>{var Bv=Be("stream");process.env.READABLE_STREAM==="disable"&&Bv?(vv.exports=Bv.Readable,Object.assign(vv.exports,Bv),vv.exports.Stream=Bv):(lc=vv.exports=_q(),lc.Stream=Bv||lc,lc.Readable=lc,lc.Writable=Mq(),lc.Duplex=Em(),lc.Transform=tG(),lc.PassThrough=x2e(),lc.finished=OQ(),lc.pipeline=T2e())});var L2e=_((T$t,N2e)=>{"use strict";var{Buffer:lu}=Be("buffer"),R2e=Symbol.for("BufferList");function ni(t){if(!(this instanceof ni))return new ni(t);ni._init.call(this,t)}ni._init=function(e){Object.defineProperty(this,R2e,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};ni.prototype._new=function(e){return new ni(e)};ni.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let o=0;othis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ni.prototype.slice=function(e,r){return typeof e=="number"&&e<0&&(e+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};ni.prototype.copy=function(e,r,o,a){if((typeof o!="number"||o<0)&&(o=0),(typeof a!="number"||a>this.length)&&(a=this.length),o>=this.length||a<=0)return e||lu.alloc(0);let n=!!e,u=this._offset(o),A=a-o,p=A,h=n&&r||0,E=u[1];if(o===0&&a===this.length){if(!n)return this._bufs.length===1?this._bufs[0]:lu.concat(this._bufs,this.length);for(let I=0;Iv)this._bufs[I].copy(e,h,E),h+=v;else{this._bufs[I].copy(e,h,E,E+p),h+=v;break}p-=v,E&&(E=0)}return e.length>h?e.slice(0,h):e};ni.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let o=this._offset(e),a=this._offset(r),n=this._bufs.slice(o[0],a[0]+1);return a[1]===0?n.pop():n[n.length-1]=n[n.length-1].slice(0,a[1]),o[1]!==0&&(n[0]=n[0].slice(o[1])),this._new(n)};ni.prototype.toString=function(e,r,o){return this.slice(r,o).toString(e)};ni.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};ni.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let o=this._offset(e),a=o[0],n=o[1];for(;a=t.length){let p=u.indexOf(t,n);if(p!==-1)return this._reverseOffset([a,p]);n=u.length-t.length+1}else{let p=this._reverseOffset([a,n]);if(this._match(p,t))return p;n++}n=0}return-1};ni.prototype._match=function(t,e){if(this.length-t{"use strict";var nG=ew().Duplex,_Bt=Q0(),Dv=L2e();function Uo(t){if(!(this instanceof Uo))return new Uo(t);if(typeof t=="function"){this._callback=t;let e=function(o){this._callback&&(this._callback(o),this._callback=null)}.bind(this);this.on("pipe",function(o){o.on("error",e)}),this.on("unpipe",function(o){o.removeListener("error",e)}),t=null}Dv._init.call(this,t),nG.call(this)}_Bt(Uo,nG);Object.assign(Uo.prototype,Dv.prototype);Uo.prototype._new=function(e){return new Uo(e)};Uo.prototype._write=function(e,r,o){this._appendBuffer(e),typeof o=="function"&&o()};Uo.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Uo.prototype.end=function(e){nG.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Uo.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};Uo.prototype._isBufferList=function(e){return e instanceof Uo||e instanceof Dv||Uo.isBufferList(e)};Uo.isBufferList=Dv.isBufferList;WQ.exports=Uo;WQ.exports.BufferListStream=Uo;WQ.exports.BufferList=Dv});var oG=_(rw=>{var HBt=Buffer.alloc,jBt="0000000000000000000",qBt="7777777777777777777",O2e="0".charCodeAt(0),U2e=Buffer.from("ustar\0","binary"),GBt=Buffer.from("00","binary"),YBt=Buffer.from("ustar ","binary"),WBt=Buffer.from(" \0","binary"),VBt=parseInt("7777",8),Pv=257,sG=263,KBt=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},JBt=function(t){switch(t){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null},zBt=function(t){switch(t){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0},_2e=function(t,e,r,o){for(;re?qBt.slice(0,e)+" ":jBt.slice(0,e-t.length)+t+" "};function XBt(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],o=t.length-1;o>0;o--){var a=t[o];e?r.push(a):r.push(255-a)}var n=0,u=r.length;for(o=0;o=Math.pow(10,r)&&r++,e+r+t};rw.decodeLongPath=function(t,e){return tw(t,0,t.length,e)};rw.encodePax=function(t){var e="";t.name&&(e+=iG(" path="+t.name+` +`)),t.linkname&&(e+=iG(" linkpath="+t.linkname+` +`));var r=t.pax;if(r)for(var o in r)e+=iG(" "+o+"="+r[o]+` +`);return Buffer.from(e)};rw.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var a=r.indexOf("/");if(a===-1)return null;o+=o?"/"+r.slice(0,a):r.slice(0,a),r=r.slice(a+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(o)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(L0(t.mode&VBt,6),100),e.write(L0(t.uid,6),108),e.write(L0(t.gid,6),116),e.write(L0(t.size,11),124),e.write(L0(t.mtime.getTime()/1e3|0,11),136),e[156]=O2e+zBt(t.type),t.linkname&&e.write(t.linkname,157),U2e.copy(e,Pv),GBt.copy(e,sG),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(L0(t.devmajor||0,6),329),e.write(L0(t.devminor||0,6),337),o&&e.write(o,345),e.write(L0(H2e(e),6),148),e)};rw.decode=function(t,e,r){var o=t[156]===0?0:t[156]-O2e,a=tw(t,0,100,e),n=M0(t,100,8),u=M0(t,108,8),A=M0(t,116,8),p=M0(t,124,12),h=M0(t,136,12),E=JBt(o),I=t[157]===0?null:tw(t,157,100,e),v=tw(t,265,32),b=tw(t,297,32),C=M0(t,329,8),T=M0(t,337,8),L=H2e(t);if(L===8*32)return null;if(L!==M0(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(U2e.compare(t,Pv,Pv+6)===0)t[345]&&(a=tw(t,345,155,e)+"/"+a);else if(!(YBt.compare(t,Pv,Pv+6)===0&&WBt.compare(t,sG,sG+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return o===0&&a&&a[a.length-1]==="/"&&(o=5),{name:a,mode:n,uid:u,gid:A,size:p,mtime:new Date(1e3*h),type:E,linkname:I,uname:v,gname:b,devmajor:C,devminor:T}}});var K2e=_((L$t,V2e)=>{var q2e=Be("util"),ZBt=M2e(),Sv=oG(),G2e=ew().Writable,Y2e=ew().PassThrough,W2e=function(){},j2e=function(t){return t&=511,t&&512-t},$Bt=function(t,e){var r=new VQ(t,e);return r.end(),r},evt=function(t,e){return e.path&&(t.name=e.path),e.linkpath&&(t.linkname=e.linkpath),e.size&&(t.size=parseInt(e.size,10)),t.pax=e,t},VQ=function(t,e){this._parent=t,this.offset=e,Y2e.call(this,{autoDestroy:!1})};q2e.inherits(VQ,Y2e);VQ.prototype.destroy=function(t){this._parent.destroy(t)};var sp=function(t){if(!(this instanceof sp))return new sp(t);G2e.call(this,t),t=t||{},this._offset=0,this._buffer=ZBt(),this._missing=0,this._partial=!1,this._onparse=W2e,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,r=e._buffer,o=function(){e._continue()},a=function(v){if(e._locked=!1,v)return e.destroy(v);e._stream||o()},n=function(){e._stream=null;var v=j2e(e._header.size);v?e._parse(v,u):e._parse(512,I),e._locked||o()},u=function(){e._buffer.consume(j2e(e._header.size)),e._parse(512,I),o()},A=function(){var v=e._header.size;e._paxGlobal=Sv.decodePax(r.slice(0,v)),r.consume(v),n()},p=function(){var v=e._header.size;e._pax=Sv.decodePax(r.slice(0,v)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(v),n()},h=function(){var v=e._header.size;this._gnuLongPath=Sv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},E=function(){var v=e._header.size;this._gnuLongLinkPath=Sv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},I=function(){var v=e._offset,b;try{b=e._header=Sv.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(C){e.emit("error",C)}if(r.consume(512),!b){e._parse(512,I),o();return}if(b.type==="gnu-long-path"){e._parse(b.size,h),o();return}if(b.type==="gnu-long-link-path"){e._parse(b.size,E),o();return}if(b.type==="pax-global-header"){e._parse(b.size,A),o();return}if(b.type==="pax-header"){e._parse(b.size,p),o();return}if(e._gnuLongPath&&(b.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(b.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=b=evt(b,e._pax),e._pax=null),e._locked=!0,!b.size||b.type==="directory"){e._parse(512,I),e.emit("entry",b,$Bt(e,v),a);return}e._stream=new VQ(e,v),e.emit("entry",b,e._stream,a),e._parse(b.size,n),o()};this._onheader=I,this._parse(512,I)};q2e.inherits(sp,G2e);sp.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};sp.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};sp.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=W2e,this._overflow?this._write(this._overflow,void 0,t):t()}};sp.prototype._write=function(t,e,r){if(!this._destroyed){var o=this._stream,a=this._buffer,n=this._missing;if(t.length&&(this._partial=!0),t.lengthn&&(u=t.slice(n),t=t.slice(0,n)),o?o.end(t):a.append(t),this._overflow=u,this._onparse()}};sp.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};V2e.exports=sp});var z2e=_((M$t,J2e)=>{J2e.exports=Be("fs").constants||Be("constants")});var tBe=_((O$t,eBe)=>{var nw=z2e(),X2e=OO(),JQ=Q0(),tvt=Buffer.alloc,Z2e=ew().Readable,iw=ew().Writable,rvt=Be("string_decoder").StringDecoder,KQ=oG(),nvt=parseInt("755",8),ivt=parseInt("644",8),$2e=tvt(1024),lG=function(){},aG=function(t,e){e&=511,e&&t.push($2e.slice(0,512-e))};function svt(t){switch(t&nw.S_IFMT){case nw.S_IFBLK:return"block-device";case nw.S_IFCHR:return"character-device";case nw.S_IFDIR:return"directory";case nw.S_IFIFO:return"fifo";case nw.S_IFLNK:return"symlink"}return"file"}var zQ=function(t){iw.call(this),this.written=0,this._to=t,this._destroyed=!1};JQ(zQ,iw);zQ.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};zQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var XQ=function(){iw.call(this),this.linkname="",this._decoder=new rvt("utf-8"),this._destroyed=!1};JQ(XQ,iw);XQ.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};XQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var xv=function(){iw.call(this),this._destroyed=!1};JQ(xv,iw);xv.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};xv.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var EA=function(t){if(!(this instanceof EA))return new EA(t);Z2e.call(this,t),this._drain=lG,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};JQ(EA,Z2e);EA.prototype.entry=function(t,e,r){if(this._stream)throw new Error("already piping an entry");if(!(this._finalized||this._destroyed)){typeof e=="function"&&(r=e,e=null),r||(r=lG);var o=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=svt(t.mode)),t.mode||(t.mode=t.type==="directory"?nvt:ivt),t.uid||(t.uid=0),t.gid||(t.gid=0),t.mtime||(t.mtime=new Date),typeof e=="string"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){t.size=e.length,this._encode(t);var a=this.push(e);return aG(o,t.size),a?process.nextTick(r):this._drain=r,new xv}if(t.type==="symlink"&&!t.linkname){var n=new XQ;return X2e(n,function(A){if(A)return o.destroy(),r(A);t.linkname=n.linkname,o._encode(t),r()}),n}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new xv;var u=new zQ(this);return this._stream=u,X2e(u,function(A){if(o._stream=null,A)return o.destroy(),r(A);if(u.written!==t.size)return o.destroy(),r(new Error("size mismatch"));aG(o,t.size),o._finalizing&&o.finalize(),r()}),u}};EA.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push($2e),this.push(null))};EA.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.destroy&&this._stream.destroy())};EA.prototype._encode=function(t){if(!t.pax){var e=KQ.encode(t);if(e){this.push(e);return}}this._encodePax(t)};EA.prototype._encodePax=function(t){var e=KQ.encodePax({name:t.name,linkname:t.linkname,pax:t.pax}),r={name:"PaxHeader",mode:t.mode,uid:t.uid,gid:t.gid,size:e.length,mtime:t.mtime,type:"pax-header",linkname:t.linkname&&"PaxHeader",uname:t.uname,gname:t.gname,devmajor:t.devmajor,devminor:t.devminor};this.push(KQ.encode(r)),this.push(e),aG(this,e.length),r.size=t.size,r.type=t.type,this.push(KQ.encode(r))};EA.prototype._read=function(t){var e=this._drain;this._drain=lG,e()};eBe.exports=EA});var rBe=_(cG=>{cG.extract=K2e();cG.pack=tBe()});var hBe=_((ier,pBe)=>{"use strict";var Bm=class{constructor(e,r,o){this.__specs=e||{},Object.keys(this.__specs).forEach(a=>{if(typeof this.__specs[a]=="string"){let n=this.__specs[a],u=this.__specs[n];if(u){let A=u.aliases||[];A.push(a,n),u.aliases=[...new Set(A)],this.__specs[a]=u}else throw new Error(`Alias refers to invalid key: ${n} -> ${a}`)}}),this.__opts=r||{},this.__providers=ABe(o.filter(a=>a!=null&&typeof a=="object")),this.__isFiggyPudding=!0}get(e){return gG(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,r=this){for(let[o,a]of this.entries())e.call(r,a,o,this)}toJSON(){let e={};return this.forEach((r,o)=>{e[o]=r}),e}*entries(e){for(let o of Object.keys(this.__specs))yield[o,this.get(o)];let r=e||this.__opts.other;if(r){let o=new Set;for(let a of this.__providers){let n=a.entries?a.entries(r):Cvt(a);for(let[u,A]of n)r(u)&&!o.has(u)&&(o.add(u),yield[u,A])}}}*[Symbol.iterator](){for(let[e,r]of this.entries())yield[e,r]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Bm(this.__specs,this.__opts,ABe(this.__providers).concat(e)),fBe)}};try{let t=Be("util");Bm.prototype[t.inspect.custom]=function(e,r){return this[Symbol.toStringTag]+" "+t.inspect(this.toJSON(),r)}}catch{}function yvt(t){throw Object.assign(new Error(`invalid config key requested: ${t}`),{code:"EBADKEY"})}function gG(t,e,r){let o=t.__specs[e];if(r&&!o&&(!t.__opts.other||!t.__opts.other(e)))yvt(e);else{o||(o={});let a;for(let n of t.__providers){if(a=uBe(e,n),a===void 0&&o.aliases&&o.aliases.length){for(let u of o.aliases)if(u!==e&&(a=uBe(u,n),a!==void 0))break}if(a!==void 0)break}return a===void 0&&o.default!==void 0?typeof o.default=="function"?o.default(t):o.default:a}}function uBe(t,e){let r;return e.__isFiggyPudding?r=gG(e,t,!1):typeof e.get=="function"?r=e.get(t):r=e[t],r}var fBe={has(t,e){return e in t.__specs&&gG(t,e,!1)!==void 0},ownKeys(t){return Object.keys(t.__specs)},get(t,e){return typeof e=="symbol"||e.slice(0,2)==="__"||e in Bm.prototype?t[e]:t.get(e)},set(t,e,r){if(typeof e=="symbol"||e.slice(0,2)==="__")return t[e]=r,!0;throw new Error("figgyPudding options cannot be modified. Use .concat() instead.")},deleteProperty(){throw new Error("figgyPudding options cannot be deleted. Use .concat() and shadow them instead.")}};pBe.exports=Evt;function Evt(t,e){function r(...o){return new Proxy(new Bm(t,e,o),fBe)}return r}function ABe(t){let e=[];return t.forEach(r=>e.unshift(r)),e}function Cvt(t){return Object.keys(t).map(e=>[e,t[e]])}});var mBe=_((ser,IA)=>{"use strict";var kv=Be("crypto"),wvt=hBe(),Ivt=Be("stream").Transform,gBe=["sha256","sha384","sha512"],Bvt=/^[a-z0-9+/]+(?:=?=?)$/i,vvt=/^([^-]+)-([^?]+)([?\S*]*)$/,Dvt=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,Pvt=/^[\x21-\x7E]+$/,ia=wvt({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>Rvt},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}}),U0=class{get isHash(){return!0}constructor(e,r){r=ia(r);let o=!!r.strict;this.source=e.trim();let a=this.source.match(o?Dvt:vvt);if(!a||o&&!gBe.some(u=>u===a[1]))return;this.algorithm=a[1],this.digest=a[2];let n=a[3];this.options=n?n.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if(e=ia(e),e.strict&&!(gBe.some(o=>o===this.algorithm)&&this.digest.match(Bvt)&&(this.options||[]).every(o=>o.match(Pvt))))return"";let r=this.options&&this.options.length?`?${this.options.join("?")}`:"";return`${this.algorithm}-${this.digest}${r}`}},vm=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=ia(e);let r=e.sep||" ";return e.strict&&(r=r.replace(/\S+/g," ")),Object.keys(this).map(o=>this[o].map(a=>U0.prototype.toString.call(a,e)).filter(a=>a.length).join(r)).filter(o=>o.length).join(r)}concat(e,r){r=ia(r);let o=typeof e=="string"?e:bv(e,r);return wA(`${this.toString(r)} ${o}`,r)}hexDigest(){return wA(this,{single:!0}).hexDigest()}match(e,r){r=ia(r);let o=wA(e,r),a=o.pickAlgorithm(r);return this[a]&&o[a]&&this[a].find(n=>o[a].find(u=>n.digest===u.digest))||!1}pickAlgorithm(e){e=ia(e);let r=e.pickAlgorithm,o=Object.keys(this);if(!o.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return o.reduce((a,n)=>r(a,n)||a)}};IA.exports.parse=wA;function wA(t,e){if(e=ia(e),typeof t=="string")return dG(t,e);if(t.algorithm&&t.digest){let r=new vm;return r[t.algorithm]=[t],dG(bv(r,e),e)}else return dG(bv(t,e),e)}function dG(t,e){return e.single?new U0(t,e):t.trim().split(/\s+/).reduce((r,o)=>{let a=new U0(o,e);if(a.algorithm&&a.digest){let n=a.algorithm;r[n]||(r[n]=[]),r[n].push(a)}return r},new vm)}IA.exports.stringify=bv;function bv(t,e){return e=ia(e),t.algorithm&&t.digest?U0.prototype.toString.call(t,e):typeof t=="string"?bv(wA(t,e),e):vm.prototype.toString.call(t,e)}IA.exports.fromHex=Svt;function Svt(t,e,r){r=ia(r);let o=r.options&&r.options.length?`?${r.options.join("?")}`:"";return wA(`${e}-${Buffer.from(t,"hex").toString("base64")}${o}`,r)}IA.exports.fromData=xvt;function xvt(t,e){e=ia(e);let r=e.algorithms,o=e.options&&e.options.length?`?${e.options.join("?")}`:"";return r.reduce((a,n)=>{let u=kv.createHash(n).update(t).digest("base64"),A=new U0(`${n}-${u}${o}`,e);if(A.algorithm&&A.digest){let p=A.algorithm;a[p]||(a[p]=[]),a[p].push(A)}return a},new vm)}IA.exports.fromStream=bvt;function bvt(t,e){e=ia(e);let r=e.Promise||Promise,o=mG(e);return new r((a,n)=>{t.pipe(o),t.on("error",n),o.on("error",n);let u;o.on("integrity",A=>{u=A}),o.on("end",()=>a(u)),o.on("data",()=>{})})}IA.exports.checkData=kvt;function kvt(t,e,r){if(r=ia(r),e=wA(e,r),!Object.keys(e).length){if(r.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let o=e.pickAlgorithm(r),a=kv.createHash(o).update(t).digest("base64"),n=wA({algorithm:o,digest:a}),u=n.match(e,r);if(u||!r.error)return u;if(typeof r.size=="number"&&t.length!==r.size){let A=new Error(`data size mismatch when checking ${e}. + Wanted: ${r.size} + Found: ${t.length}`);throw A.code="EBADSIZE",A.found=t.length,A.expected=r.size,A.sri=e,A}else{let A=new Error(`Integrity checksum failed when using ${o}: Wanted ${e}, but got ${n}. (${t.length} bytes)`);throw A.code="EINTEGRITY",A.found=n,A.expected=e,A.algorithm=o,A.sri=e,A}}IA.exports.checkStream=Qvt;function Qvt(t,e,r){r=ia(r);let o=r.Promise||Promise,a=mG(r.concat({integrity:e}));return new o((n,u)=>{t.pipe(a),t.on("error",u),a.on("error",u);let A;a.on("verified",p=>{A=p}),a.on("end",()=>n(A)),a.on("data",()=>{})})}IA.exports.integrityStream=mG;function mG(t){t=ia(t);let e=t.integrity&&wA(t.integrity,t),r=e&&Object.keys(e).length,o=r&&e.pickAlgorithm(t),a=r&&e[o],n=Array.from(new Set(t.algorithms.concat(o?[o]:[]))),u=n.map(kv.createHash),A=0,p=new Ivt({transform(h,E,I){A+=h.length,u.forEach(v=>v.update(h,E)),I(null,h,E)}}).on("end",()=>{let h=t.options&&t.options.length?`?${t.options.join("?")}`:"",E=wA(u.map((v,b)=>`${n[b]}-${v.digest("base64")}${h}`).join(" "),t),I=r&&E.match(e,t);if(typeof t.size=="number"&&A!==t.size){let v=new Error(`stream size mismatch when checking ${e}. + Wanted: ${t.size} + Found: ${A}`);v.code="EBADSIZE",v.found=A,v.expected=t.size,v.sri=e,p.emit("error",v)}else if(t.integrity&&!I){let v=new Error(`${e} integrity checksum failed when using ${o}: wanted ${a} but got ${E}. (${A} bytes)`);v.code="EINTEGRITY",v.found=E,v.expected=a,v.algorithm=o,v.sri=e,p.emit("error",v)}else p.emit("size",A),p.emit("integrity",E),I&&p.emit("verified",I)});return p}IA.exports.create=Fvt;function Fvt(t){t=ia(t);let e=t.algorithms,r=t.options.length?`?${t.options.join("?")}`:"",o=e.map(kv.createHash);return{update:function(a,n){return o.forEach(u=>u.update(a,n)),this},digest:function(a){return e.reduce((u,A)=>{let p=o.shift().digest("base64"),h=new U0(`${A}-${p}${r}`,t);if(h.algorithm&&h.digest){let E=h.algorithm;u[E]||(u[E]=[]),u[E].push(h)}return u},new vm)}}}var Tvt=new Set(kv.getHashes()),dBe=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>Tvt.has(t));function Rvt(t,e){return dBe.indexOf(t.toLowerCase())>=dBe.indexOf(e.toLowerCase())?t:e}});var VBe=_((lir,WBe)=>{var TDt=uL();function RDt(t){return TDt(t)?void 0:t}WBe.exports=RDt});var JBe=_((cir,KBe)=>{var NDt=jx(),LDt=Q8(),MDt=N8(),ODt=jd(),UDt=gd(),_Dt=VBe(),HDt=P_(),jDt=k8(),qDt=1,GDt=2,YDt=4,WDt=HDt(function(t,e){var r={};if(t==null)return r;var o=!1;e=NDt(e,function(n){return n=ODt(n,t),o||(o=n.length>1),n}),UDt(t,jDt(t),r),o&&(r=LDt(r,qDt|GDt|YDt,_Dt));for(var a=e.length;a--;)MDt(r,e[a]);return r});KBe.exports=WDt});Pt();Ye();Pt();var eve=Be("child_process"),tve=$e(ed());qt();var uC=new Map([]);var o2={};Kt(o2,{BaseCommand:()=>ut,WorkspaceRequiredError:()=>rr,getCli:()=>the,getDynamicLibs:()=>ehe,getPluginConfiguration:()=>fC,openWorkspace:()=>AC,pluginCommands:()=>uC,runExit:()=>sk});qt();var ut=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",{hidden:!0})}validateAndExecute(){if(typeof this.cwd<"u")throw new it("The --cwd option is ambiguous when used anywhere else than the very first parameter provided in the command line, before even the command path");return super.validateAndExecute()}};Ye();Pt();qt();var rr=class extends it{constructor(e,r){let o=K.relative(e,r),a=K.join(e,Mt.fileName);super(`This command can only be run from within a workspace of your project (${o} isn't a workspace of ${a}).`)}};Ye();Pt();nA();Nl();b1();qt();var OAt=$e(zn());Za();var ehe=()=>new Map([["@yarnpkg/cli",o2],["@yarnpkg/core",s2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",tI],["@yarnpkg/shell",T1],["clipanion",pI],["semver",OAt],["typanion",Ko]]);Ye();async function AC(t,e){let{project:r,workspace:o}=await St.find(t,e);if(!o)throw new rr(r.cwd,e);return o}Ye();Pt();nA();Nl();b1();qt();var tPt=$e(zn());Za();var tH={};Kt(tH,{AddCommand:()=>bh,BinCommand:()=>kh,CacheCleanCommand:()=>Qh,ClipanionCommand:()=>Wd,ConfigCommand:()=>Nh,ConfigGetCommand:()=>Fh,ConfigSetCommand:()=>Th,ConfigUnsetCommand:()=>Rh,DedupeCommand:()=>Lh,EntryCommand:()=>dC,ExecCommand:()=>Mh,ExplainCommand:()=>_h,ExplainPeerRequirementsCommand:()=>Oh,HelpCommand:()=>Vd,InfoCommand:()=>Hh,LinkCommand:()=>qh,NodeCommand:()=>Gh,PluginCheckCommand:()=>Yh,PluginImportCommand:()=>Kh,PluginImportSourcesCommand:()=>Jh,PluginListCommand:()=>Wh,PluginRemoveCommand:()=>zh,PluginRuntimeCommand:()=>Xh,RebuildCommand:()=>Zh,RemoveCommand:()=>$h,RunCommand:()=>e0,RunIndexCommand:()=>zd,SetResolutionCommand:()=>t0,SetVersionCommand:()=>Uh,SetVersionSourcesCommand:()=>Vh,UnlinkCommand:()=>r0,UpCommand:()=>Kf,VersionCommand:()=>Kd,WhyCommand:()=>n0,WorkspaceCommand:()=>o0,WorkspacesListCommand:()=>s0,YarnCommand:()=>jh,dedupeUtils:()=>gk,default:()=>Qgt,suggestUtils:()=>zc});var Tde=$e(ed());Ye();Ye();Ye();qt();var j0e=$e(A2());Za();var zc={};Kt(zc,{Modifier:()=>D8,Strategy:()=>fk,Target:()=>f2,WorkspaceModifier:()=>M0e,applyModifier:()=>ipt,extractDescriptorFromPath:()=>P8,extractRangeModifier:()=>O0e,fetchDescriptorFrom:()=>S8,findProjectDescriptors:()=>H0e,getModifier:()=>p2,getSuggestedDescriptors:()=>h2,makeWorkspaceDescriptor:()=>_0e,toWorkspaceModifier:()=>U0e});Ye();Ye();Pt();var v8=$e(zn()),rpt="workspace:",f2=(o=>(o.REGULAR="dependencies",o.DEVELOPMENT="devDependencies",o.PEER="peerDependencies",o))(f2||{}),D8=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="",o))(D8||{}),M0e=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="*",o))(M0e||{}),fk=(n=>(n.KEEP="keep",n.REUSE="reuse",n.PROJECT="project",n.LATEST="latest",n.CACHE="cache",n))(fk||{});function p2(t,e){return t.exact?"":t.caret?"^":t.tilde?"~":e.configuration.get("defaultSemverRangePrefix")}var npt=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function O0e(t,{project:e}){let r=t.match(npt);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function ipt(t,e){let{protocol:r,source:o,params:a,selector:n}=W.parseRange(t.range);return v8.default.valid(n)&&(n=`${e}${t.range}`),W.makeDescriptor(t,W.makeRange({protocol:r,source:o,params:a,selector:n}))}function U0e(t){switch(t){case"^":return"^";case"~":return"~";case"":return"*";default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function _0e(t,e){return W.makeDescriptor(t.anchoredDescriptor,`${rpt}${U0e(e)}`)}async function H0e(t,{project:e,target:r}){let o=new Map,a=n=>{let u=o.get(n.descriptorHash);return u||o.set(n.descriptorHash,u={descriptor:n,locators:[]}),u};for(let n of e.workspaces)if(r==="peerDependencies"){let u=n.manifest.peerDependencies.get(t.identHash);u!==void 0&&a(u).locators.push(n.anchoredLocator)}else{let u=n.manifest.dependencies.get(t.identHash),A=n.manifest.devDependencies.get(t.identHash);r==="devDependencies"?A!==void 0?a(A).locators.push(n.anchoredLocator):u!==void 0&&a(u).locators.push(n.anchoredLocator):u!==void 0?a(u).locators.push(n.anchoredLocator):A!==void 0&&a(A).locators.push(n.anchoredLocator)}return o}async function P8(t,{cwd:e,workspace:r}){return await spt(async o=>{K.isAbsolute(t)||(t=K.relative(r.cwd,K.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:a}=r,n=await S8(W.makeIdent(null,"archive"),t,{project:r.project,cache:o,workspace:r});if(!n)throw new Error("Assertion failed: The descriptor should have been found");let u=new Qi,A=a.configuration.makeResolver(),p=a.configuration.makeFetcher(),h={checksums:a.storedChecksums,project:a,cache:o,fetcher:p,report:u,resolver:A},E=A.bindDescriptor(n,r.anchoredLocator,h),I=W.convertDescriptorToLocator(E),v=await p.fetch(I,h),b=await Mt.find(v.prefixPath,{baseFs:v.packageFs});if(!b.name)throw new Error("Target path doesn't have a name");return W.makeDescriptor(b.name,t)})}async function h2(t,{project:e,workspace:r,cache:o,target:a,fixed:n,modifier:u,strategies:A,maxResults:p=1/0}){if(!(p>=0))throw new Error(`Invalid maxResults (${p})`);let[h,E]=t.range!=="unknown"?n||kr.validRange(t.range)||!t.range.match(/^[a-z0-9._-]+$/i)?[t.range,"latest"]:["unknown",t.range]:["unknown","latest"];if(h!=="unknown")return{suggestions:[{descriptor:t,name:`Use ${W.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let I=typeof r<"u"&&r!==null&&r.manifest[a].get(t.identHash)||null,v=[],b=[],C=async T=>{try{await T()}catch(L){b.push(L)}};for(let T of A){if(v.length>=p)break;switch(T){case"keep":await C(async()=>{I&&v.push({descriptor:I,name:`Keep ${W.prettyDescriptor(e.configuration,I)}`,reason:"(no changes)"})});break;case"reuse":await C(async()=>{for(let{descriptor:L,locators:U}of(await H0e(t,{project:e,target:a})).values()){if(U.length===1&&U[0].locatorHash===r.anchoredLocator.locatorHash&&A.includes("keep"))continue;let J=`(originally used by ${W.prettyLocator(e.configuration,U[0])}`;J+=U.length>1?` and ${U.length-1} other${U.length>2?"s":""})`:")",v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:J})}});break;case"cache":await C(async()=>{for(let L of e.storedDescriptors.values())L.identHash===t.identHash&&v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:"(already used somewhere in the lockfile)"})});break;case"project":await C(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let L=e.tryWorkspaceByIdent(t);if(L===null)return;let U=_0e(L,u);v.push({descriptor:U,name:`Attach ${W.prettyDescriptor(e.configuration,U)}`,reason:`(local workspace at ${de.pretty(e.configuration,L.relativeCwd,de.Type.PATH)})`})});break;case"latest":{let L=e.configuration.get("enableNetwork"),U=e.configuration.get("enableOfflineMode");await C(async()=>{if(a==="peerDependencies")v.push({descriptor:W.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!L&&!U)v.push({descriptor:null,name:"Resolve from latest",reason:de.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let J=await S8(t,E,{project:e,cache:o,workspace:r,modifier:u});J&&v.push({descriptor:J,name:`Use ${W.prettyDescriptor(e.configuration,J)}`,reason:`(resolved from ${U?"the cache":"latest"})`})}})}break}}return{suggestions:v.slice(0,p),rejections:b.slice(0,p)}}async function S8(t,e,{project:r,cache:o,workspace:a,preserveModifier:n=!0,modifier:u}){let A=r.configuration.normalizeDependency(W.makeDescriptor(t,e)),p=new Qi,h=r.configuration.makeFetcher(),E=r.configuration.makeResolver(),I={project:r,fetcher:h,cache:o,checksums:r.storedChecksums,report:p,cacheOptions:{skipIntegrityCheck:!0}},v={...I,resolver:E,fetchOptions:I},b=E.bindDescriptor(A,a.anchoredLocator,v),C=await E.getCandidates(b,{},v);if(C.length===0)return null;let T=C[0],{protocol:L,source:U,params:J,selector:te}=W.parseRange(W.convertToManifestRange(T.reference));if(L===r.configuration.get("defaultProtocol")&&(L=null),v8.default.valid(te)){let le=te;if(typeof u<"u")te=u+te;else if(n!==!1){let ye=typeof n=="string"?n:A.range;te=O0e(ye,{project:r})+te}let pe=W.makeDescriptor(T,W.makeRange({protocol:L,source:U,params:J,selector:te}));(await E.getCandidates(r.configuration.normalizeDependency(pe),{},v)).length!==1&&(te=le)}return W.makeDescriptor(T,W.makeRange({protocol:L,source:U,params:J,selector:te}))}async function spt(t){return await oe.mktempPromise(async e=>{let r=Ve.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Lr(e,{configuration:r,check:!1,immutable:!1}))})}var bh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.dev=ge.Boolean("-D,--dev",!1,{description:"Add a package as a dev dependency"});this.peer=ge.Boolean("-P,--peer",!1,{description:"Add a package as a peer dependency"});this.optional=ge.Boolean("-O,--optional",!1,{description:"Add / upgrade a package to an optional regular / peer dependency"});this.preferDev=ge.Boolean("--prefer-dev",!1,{description:"Add / upgrade a package to a dev dependency"});this.interactive=ge.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"});this.cached=ge.Boolean("--cached",!1,{description:"Reuse the highest version already used somewhere within the project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.silent=ge.Boolean("--silent",{hidden:!0});this.packages=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=A||r.get("preferReuse"),h=p2(this,o),E=[p?"reuse":void 0,"project",this.cached?"cache":void 0,"latest"].filter(U=>typeof U<"u"),I=A?1/0:1,v=await Promise.all(this.packages.map(async U=>{let J=U.match(/^\.{0,2}\//)?await P8(U,{cwd:this.context.cwd,workspace:a}):W.tryParseDescriptor(U),te=U.match(/^(https?:|git@github)/);if(te)throw new it(`It seems you are trying to add a package using a ${de.pretty(r,`${te[0]}...`,de.Type.RANGE)} url; we now require package names to be explicitly specified. +Try running the command again with the package name prefixed: ${de.pretty(r,"yarn add",de.Type.CODE)} ${de.pretty(r,W.makeDescriptor(W.makeIdent(null,"my-package"),`${te[0]}...`),de.Type.DESCRIPTOR)}`);if(!J)throw new it(`The ${de.pretty(r,U,de.Type.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let le=opt(a,J,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(le.map(async Ae=>{let ye=await h2(J,{project:o,workspace:a,cache:n,fixed:u,target:Ae,modifier:h,strategies:E,maxResults:I});return{request:J,suggestedDescriptors:ye,target:Ae}}))})).then(U=>U.flat()),b=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async U=>{for(let{request:J,suggestedDescriptors:{suggestions:te,rejections:le}}of v)if(te.filter(Ae=>Ae.descriptor!==null).length===0){let[Ae]=le;if(typeof Ae>"u")throw new Error("Assertion failed: Expected an error to have been set");o.configuration.get("enableNetwork")?U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range`):U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),U.reportSeparator(),U.reportExceptionOnce(Ae)}});if(b.hasErrors())return b.exitCode();let C=!1,T=[],L=[];for(let{suggestedDescriptors:{suggestions:U},target:J}of v){let te,le=U.filter(ae=>ae.descriptor!==null),pe=le[0].descriptor,Ae=le.every(ae=>W.areDescriptorsEqual(ae.descriptor,pe));le.length===1||Ae?te=pe:(C=!0,{answer:te}=await(0,j0e.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:U.map(({descriptor:ae,name:we,reason:Pe})=>ae?{name:we,hint:Pe,descriptor:ae}:{name:we,hint:Pe,disabled:!0}),onCancel:()=>process.exit(130),result(ae){return this.find(ae,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let ye=a.manifest[J].get(te.identHash);(typeof ye>"u"||ye.descriptorHash!==te.descriptorHash)&&(a.manifest[J].set(te.identHash,te),this.optional&&(J==="dependencies"?a.manifest.ensureDependencyMeta({...te,range:"unknown"}).optional=!0:J==="peerDependencies"&&(a.manifest.ensurePeerDependencyMeta({...te,range:"unknown"}).optional=!0)),typeof ye>"u"?T.push([a,J,te,E]):L.push([a,J,ye,te]))}return await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyAddition,T),await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyReplacement,L),C&&this.context.stdout.write(` +`),await o.installWithNewReport({json:this.json,stdout:this.context.stdout,quiet:this.context.quiet},{cache:n,mode:this.mode})}};bh.paths=[["add"]],bh.usage=nt.Usage({description:"add dependencies to the project",details:"\n This command adds a package to the package.json for the nearest workspace.\n\n - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\n\n - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\n\n - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\n\n - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\"peerDependenciesMeta\": { \"\": { \"optional\": true } }`\n\n - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\n\n - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\n\n If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\n\n If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/protocols.\n ",examples:[["Add a regular package to the current workspace","$0 add lodash"],["Add a specific version for a package to the current workspace","$0 add lodash@1.2.3"],["Add a package from a GitHub repository (the master branch) to the current workspace using a URL","$0 add lodash@https://github.com/lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol","$0 add lodash@github:lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)","$0 add lodash@lodash/lodash"],["Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)","$0 add lodash-es@lodash/lodash#es"]]});function opt(t,e,{dev:r,peer:o,preferDev:a,optional:n}){let u=t.manifest["dependencies"].has(e.identHash),A=t.manifest["devDependencies"].has(e.identHash),p=t.manifest["peerDependencies"].has(e.identHash);if((r||o)&&u)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(n&&A)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(n&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||a)&&n)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);let h=[];return o&&h.push("peerDependencies"),(r||a)&&h.push("devDependencies"),n&&h.push("dependencies"),h.length>0?h:A?["devDependencies"]:p?["peerDependencies"]:["dependencies"]}Ye();Ye();qt();var kh=class extends ut{constructor(){super(...arguments);this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Print both the binary name and the locator of the package that provides the binary"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.name=ge.String({required:!1})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);if(await o.restoreInstallState(),this.name){let A=(await un.getPackageAccessibleBinaries(a,{project:o})).get(this.name);if(!A)throw new it(`Couldn't find a binary named "${this.name}" for package "${W.prettyLocator(r,a)}"`);let[,p]=A;return this.context.stdout.write(`${p} +`),0}return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async u=>{let A=await un.getPackageAccessibleBinaries(a,{project:o}),h=Array.from(A.keys()).reduce((E,I)=>Math.max(E,I.length),0);for(let[E,[I,v]]of A)u.reportJson({name:E,source:W.stringifyIdent(I),path:v});if(this.verbose)for(let[E,[I]]of A)u.reportInfo(null,`${E.padEnd(h," ")} ${W.prettyLocator(r,I)}`);else for(let E of A.keys())u.reportInfo(null,E)})).exitCode()}};kh.paths=[["bin"]],kh.usage=nt.Usage({description:"get the path to a binary script",details:` + When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \`-v,--verbose\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary. + + When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive. + `,examples:[["List all the available binaries","$0 bin"],["Print the path to a specific binary","$0 bin eslint"]]});Ye();Pt();qt();var Qh=class extends ut{constructor(){super(...arguments);this.mirror=ge.Boolean("--mirror",!1,{description:"Remove the global cache files instead of the local cache files"});this.all=ge.Boolean("--all",!1,{description:"Remove both the global cache files and the local cache files of the current project"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await Lr.find(r);return(await Nt.start({configuration:r,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&o.mirrorCwd!==null,u=!this.mirror;n&&(await oe.removePromise(o.mirrorCwd),await r.triggerHook(A=>A.cleanGlobalArtifacts,r)),u&&await oe.removePromise(o.cwd)})).exitCode()}};Qh.paths=[["cache","clean"],["cache","clear"]],Qh.usage=nt.Usage({description:"remove the shared cache files",details:` + This command will remove all the files from the cache. + `,examples:[["Remove all the local archives","$0 cache clean"],["Remove all the archives stored in the ~/.yarn directory","$0 cache clean --mirror"]]});Ye();qt();var G0e=$e(g2()),x8=Be("util"),Fh=class extends ut{constructor(){super(...arguments);this.why=ge.Boolean("--why",!1,{description:"Print the explanation for why a setting has its value"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.unsafe=ge.Boolean("--no-redacted",!1,{description:"Don't redact secrets (such as tokens) from the output"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=this.name.replace(/[.[].*$/,""),a=this.name.replace(/^[^.[]*/,"");if(typeof r.settings.get(o)>"u")throw new it(`Couldn't find a configuration settings named "${o}"`);let u=r.getSpecial(o,{hideSecrets:!this.unsafe,getNativePaths:!0}),A=je.convertMapsToIndexableObjects(u),p=a?(0,G0e.default)(A,a):A,h=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async E=>{E.reportJson(p)});if(!this.json){if(typeof p=="string")return this.context.stdout.write(`${p} +`),h.exitCode();x8.inspect.styles.name="cyan",this.context.stdout.write(`${(0,x8.inspect)(p,{depth:1/0,colors:r.get("enableColors"),compact:!1})} +`)}return h.exitCode()}};Fh.paths=[["config","get"]],Fh.usage=nt.Usage({description:"read a configuration settings",details:` + This command will print a configuration setting. + + Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \`--no-redacted\` to get the untransformed value. + `,examples:[["Print a simple configuration setting","yarn config get yarnPath"],["Print a complex configuration setting","yarn config get packageExtensions"],["Print a nested field from the configuration",`yarn config get 'npmScopes["my-company"].npmRegistryServer'`],["Print a token from the configuration","yarn config get npmAuthToken --no-redacted"],["Print a configuration setting as JSON","yarn config get packageExtensions --json"]]});Ye();qt();var Rge=$e(F8()),Nge=$e(g2()),Lge=$e(T8()),R8=Be("util"),Th=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Set complex configuration settings to JSON values"});this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String();this.value=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);if(a==="enableStrictSettings")throw new it("This setting only affects the file it's in, and thus cannot be set from the CLI");let A=this.json?JSON.parse(this.value):this.value;await(this.home?C=>Ve.updateHomeConfiguration(C):C=>Ve.updateConfiguration(o(),C))(C=>{if(n){let T=(0,Rge.default)(C);return(0,Lge.default)(T,this.name,A),T}else return{...C,[a]:A}});let E=(await Ve.find(this.context.cwd,this.context.plugins)).getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),I=je.convertMapsToIndexableObjects(E),v=n?(0,Nge.default)(I,n):I;return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async C=>{R8.inspect.styles.name="cyan",C.reportInfo(0,`Successfully set ${this.name} to ${(0,R8.inspect)(v,{depth:1/0,colors:r.get("enableColors"),compact:!1})}`)})).exitCode()}};Th.paths=[["config","set"]],Th.usage=nt.Usage({description:"change a configuration settings",details:` + This command will set a configuration setting. + + When used without the \`--json\` flag, it can only set a simple configuration setting (a string, a number, or a boolean). + + When used with the \`--json\` flag, it can set both simple and complex configuration settings, including Arrays and Objects. + `,examples:[["Set a simple configuration setting (a string, a number, or a boolean)","yarn config set initScope myScope"],["Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag",'yarn config set initScope --json \\"myScope\\"'],["Set a complex configuration setting (an Array) using the `--json` flag",`yarn config set unsafeHttpWhitelist --json '["*.example.com", "example.com"]'`],["Set a complex configuration setting (an Object) using the `--json` flag",`yarn config set packageExtensions --json '{ "@babel/parser@*": { "dependencies": { "@babel/types": "*" } } }'`],["Set a nested configuration setting",'yarn config set npmScopes.company.npmRegistryServer "https://npm.example.com"'],["Set a nested configuration setting using indexed access for non-simple keys",`yarn config set 'npmRegistries["//npm.example.com"].npmAuthToken' "ffffffff-ffff-ffff-ffff-ffffffffffff"`]]});Ye();qt();var Vge=$e(F8()),Kge=$e(_ge()),Jge=$e(L8()),Rh=class extends ut{constructor(){super(...arguments);this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);let A=this.home?h=>Ve.updateHomeConfiguration(h):h=>Ve.updateConfiguration(o(),h);return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async h=>{let E=!1;await A(I=>{if(!(0,Kge.default)(I,this.name))return h.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),E=!0,I;let v=n?(0,Vge.default)(I):{...I};return(0,Jge.default)(v,this.name),v}),E||h.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};Rh.paths=[["config","unset"]],Rh.usage=nt.Usage({description:"unset a configuration setting",details:` + This command will unset a configuration setting. + `,examples:[["Unset a simple configuration setting","yarn config unset initScope"],["Unset a complex configuration setting","yarn config unset packageExtensions"],["Unset a nested configuration setting","yarn config unset npmScopes.company.npmRegistryServer"]]});Ye();Pt();qt();var hk=Be("util"),Nh=class extends ut{constructor(){super(...arguments);this.noDefaults=ge.Boolean("--no-defaults",!1,{description:"Omit the default values from the display"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.verbose=ge.Boolean("-v,--verbose",{hidden:!0});this.why=ge.Boolean("--why",{hidden:!0});this.names=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins,{strict:!1}),o=await NE({configuration:r,stdout:this.context.stdout,forceError:this.json},[{option:this.verbose,message:"The --verbose option is deprecated, the settings' descriptions are now always displayed"},{option:this.why,message:"The --why option is deprecated, the settings' sources are now always displayed"}]);if(o!==null)return o;let a=this.names.length>0?[...new Set(this.names)].sort():[...r.settings.keys()].sort(),n,u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async A=>{if(r.invalid.size>0&&!this.json){for(let[p,h]of r.invalid)A.reportError(34,`Invalid configuration key "${p}" in ${h}`);A.reportSeparator()}if(this.json)for(let p of a){let h=r.settings.get(p);typeof h>"u"&&A.reportError(34,`No configuration key named "${p}"`);let E=r.getSpecial(p,{hideSecrets:!0,getNativePaths:!0}),I=r.sources.get(p)??"",v=I&&I[0]!=="<"?ue.fromPortablePath(I):I;A.reportJson({key:p,effective:E,source:v,...h})}else{let p={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},h={},E={children:h};for(let I of a){if(this.noDefaults&&!r.sources.has(I))continue;let v=r.settings.get(I),b=r.sources.get(I)??"",C=r.getSpecial(I,{hideSecrets:!0,getNativePaths:!0}),T={Description:{label:"Description",value:de.tuple(de.Type.MARKDOWN,{text:v.description,format:this.cli.format(),paragraphs:!1})},Source:{label:"Source",value:de.tuple(b[0]==="<"?de.Type.CODE:de.Type.PATH,b)}};h[I]={value:de.tuple(de.Type.CODE,I),children:T};let L=(U,J)=>{for(let[te,le]of J)if(le instanceof Map){let pe={};U[te]={children:pe},L(pe,le)}else U[te]={label:te,value:de.tuple(de.Type.NO_HINT,(0,hk.inspect)(le,p))}};C instanceof Map?L(T,C):T.Value={label:"Value",value:de.tuple(de.Type.NO_HINT,(0,hk.inspect)(C,p))}}a.length!==1&&(n=void 0),$s.emitTree(E,{configuration:r,json:this.json,stdout:this.context.stdout,separators:2})}});if(!this.json&&typeof n<"u"){let A=a[0],p=(0,hk.inspect)(r.getSpecial(A,{hideSecrets:!0,getNativePaths:!0}),{colors:r.get("enableColors")});this.context.stdout.write(` +`),this.context.stdout.write(`${p} +`)}return u.exitCode()}};Nh.paths=[["config"]],Nh.usage=nt.Usage({description:"display the current configuration",details:` + This command prints the current active configuration settings. + `,examples:[["Print the active configuration settings","$0 config"]]});Ye();qt();Za();var gk={};Kt(gk,{Strategy:()=>d2,acceptedStrategies:()=>j0t,dedupe:()=>M8});Ye();Ye();var zge=$e(Zo()),d2=(e=>(e.HIGHEST="highest",e))(d2||{}),j0t=new Set(Object.values(d2)),q0t={highest:async(t,e,{resolver:r,fetcher:o,resolveOptions:a,fetchOptions:n})=>{let u=new Map;for(let[p,h]of t.storedResolutions){let E=t.storedDescriptors.get(p);if(typeof E>"u")throw new Error(`Assertion failed: The descriptor (${p}) should have been registered`);je.getSetWithDefault(u,E.identHash).add(h)}let A=new Map(je.mapAndFilter(t.storedDescriptors.values(),p=>W.isVirtualDescriptor(p)?je.mapAndFilter.skip:[p.descriptorHash,je.makeDeferred()]));for(let p of t.storedDescriptors.values()){let h=A.get(p.descriptorHash);if(typeof h>"u")throw new Error(`Assertion failed: The descriptor (${p.descriptorHash}) should have been registered`);let E=t.storedResolutions.get(p.descriptorHash);if(typeof E>"u")throw new Error(`Assertion failed: The resolution (${p.descriptorHash}) should have been registered`);let I=t.originalPackages.get(E);if(typeof I>"u")throw new Error(`Assertion failed: The package (${E}) should have been registered`);Promise.resolve().then(async()=>{let v=r.getResolutionDependencies(p,a),b=Object.fromEntries(await je.allSettledSafe(Object.entries(v).map(async([te,le])=>{let pe=A.get(le.descriptorHash);if(typeof pe>"u")throw new Error(`Assertion failed: The descriptor (${le.descriptorHash}) should have been registered`);let Ae=await pe.promise;if(!Ae)throw new Error("Assertion failed: Expected the dependency to have been through the dedupe process itself");return[te,Ae.updatedPackage]})));if(e.length&&!zge.default.isMatch(W.stringifyIdent(p),e)||!r.shouldPersistResolution(I,a))return I;let C=u.get(p.identHash);if(typeof C>"u")throw new Error(`Assertion failed: The resolutions (${p.identHash}) should have been registered`);if(C.size===1)return I;let T=[...C].map(te=>{let le=t.originalPackages.get(te);if(typeof le>"u")throw new Error(`Assertion failed: The package (${te}) should have been registered`);return le}),L=await r.getSatisfying(p,b,T,a),U=L.locators?.[0];if(typeof U>"u"||!L.sorted)return I;let J=t.originalPackages.get(U.locatorHash);if(typeof J>"u")throw new Error(`Assertion failed: The package (${U.locatorHash}) should have been registered`);return J}).then(async v=>{let b=await t.preparePackage(v,{resolver:r,resolveOptions:a});h.resolve({descriptor:p,currentPackage:I,updatedPackage:v,resolvedPackage:b})}).catch(v=>{h.reject(v)})}return[...A.values()].map(p=>p.promise)}};async function M8(t,{strategy:e,patterns:r,cache:o,report:a}){let{configuration:n}=t,u=new Qi,A=n.makeResolver(),p=n.makeFetcher(),h={cache:o,checksums:t.storedChecksums,fetcher:p,project:t,report:u,cacheOptions:{skipIntegrityCheck:!0}},E={project:t,resolver:A,report:u,fetchOptions:h};return await a.startTimerPromise("Deduplication step",async()=>{let I=q0t[e],v=await I(t,r,{resolver:A,resolveOptions:E,fetcher:p,fetchOptions:h}),b=Xs.progressViaCounter(v.length);await a.reportProgress(b);let C=0;await Promise.all(v.map(U=>U.then(J=>{if(J===null||J.currentPackage.locatorHash===J.updatedPackage.locatorHash)return;C++;let{descriptor:te,currentPackage:le,updatedPackage:pe}=J;a.reportInfo(0,`${W.prettyDescriptor(n,te)} can be deduped from ${W.prettyLocator(n,le)} to ${W.prettyLocator(n,pe)}`),a.reportJson({descriptor:W.stringifyDescriptor(te),currentResolution:W.stringifyLocator(le),updatedResolution:W.stringifyLocator(pe)}),t.storedResolutions.set(te.descriptorHash,pe.locatorHash)}).finally(()=>b.tick())));let T;switch(C){case 0:T="No packages";break;case 1:T="One package";break;default:T=`${C} packages`}let L=de.pretty(n,e,de.Type.CODE);return a.reportInfo(0,`${T} can be deduped using the ${L} strategy`),C})}var Lh=class extends ut{constructor(){super(...arguments);this.strategy=ge.String("-s,--strategy","highest",{description:"The strategy to use when deduping dependencies",validator:Vs(d2)});this.check=ge.Boolean("-c,--check",!1,{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let n=0,u=await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout,json:this.json},async A=>{n=await M8(o,{strategy:this.strategy,patterns:this.patterns,cache:a,report:A})});return u.hasErrors()?u.exitCode():this.check?n?1:0:await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:a,mode:this.mode})}};Lh.paths=[["dedupe"]],Lh.usage=nt.Usage({description:"deduplicate dependencies with overlapping ranges",details:"\n Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\n\n This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\n\n - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\n\n **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\n\n If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n ### In-depth explanation:\n\n Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\n\n Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\n ",examples:[["Dedupe all packages","$0 dedupe"],["Dedupe all packages using a specific strategy","$0 dedupe --strategy highest"],["Dedupe a specific package","$0 dedupe lodash"],["Dedupe all packages with the `@babel/*` scope","$0 dedupe '@babel/*'"],["Check for duplicates (can be used as a CI step)","$0 dedupe --check"]]});Ye();qt();var Wd=class extends ut{async execute(){let{plugins:e}=await Ve.find(this.context.cwd,this.context.plugins),r=[];for(let u of e){let{commands:A}=u[1];if(A){let h=as.from(A).definitions();r.push([u[0],h])}}let o=this.cli.definitions(),a=(u,A)=>u.split(" ").slice(1).join()===A.split(" ").slice(1).join(),n=Xge()["@yarnpkg/builder"].bundles.standard;for(let u of r){let A=u[1];for(let p of A)o.find(h=>a(h.path,p.path)).plugin={name:u[0],isDefault:n.includes(u[0])}}this.context.stdout.write(`${JSON.stringify(o,null,2)} +`)}};Wd.paths=[["--clipanion=definitions"]];var Vd=class extends ut{async execute(){this.context.stdout.write(this.cli.usage(null))}};Vd.paths=[["help"],["--help"],["-h"]];Ye();Pt();qt();var dC=class extends ut{constructor(){super(...arguments);this.leadingArgument=ge.String();this.args=ge.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!W.tryParseIdent(this.leadingArgument)){let r=K.resolve(this.context.cwd,ue.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:r})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}};Ye();var Kd=class extends ut{async execute(){this.context.stdout.write(`${tn||""} +`)}};Kd.paths=[["-v"],["--version"]];Ye();Ye();qt();var Mh=class extends ut{constructor(){super(...arguments);this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);return await o.restoreInstallState(),await un.executePackageShellcode(a,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:o})}};Mh.paths=[["exec"]],Mh.usage=nt.Usage({description:"execute a shell script",details:` + This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell. + + It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). + `,examples:[["Execute a single shell command","$0 exec echo Hello World"],["Execute a shell script",'$0 exec "tsc & babel src --out-dir lib"']]});Ye();qt();Za();var Oh=class extends ut{constructor(){super(...arguments);this.hash=ge.String({validator:aP(Ey(),[sI(/^p[0-9a-f]{5}$/)])})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return await o.restoreInstallState({restoreResolutions:!1}),await o.applyLightResolution(),await Y0t(this.hash,o,{stdout:this.context.stdout})}};Oh.paths=[["explain","peer-requirements"]],Oh.usage=nt.Usage({description:"explain a set of peer requirements",details:` + A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants. + + When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not. + + When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set. + + **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\`yarn explain peer-requirements\`). + `,examples:[["Explain the corresponding set of peer requirements for a hash","$0 explain peer-requirements p1a4ed"],["List all sets of peer requirements","$0 explain peer-requirements"]]});async function Y0t(t,e,r){let o=e.peerWarnings.find(n=>n.hash===t);if(typeof o>"u")throw new Error(`No peerDependency requirements found for hash: "${t}"`);return(await Nt.start({configuration:e.configuration,stdout:r.stdout,includeFooter:!1,includePrefix:!1},async n=>{let u=de.mark(e.configuration);switch(o.type){case 2:{n.reportInfo(0,`We have a problem with ${de.pretty(e.configuration,o.requested,de.Type.IDENT)}, which is provided with version ${W.prettyReference(e.configuration,o.version)}.`),n.reportInfo(0,"It is needed by the following direct dependencies of workspaces in your project:"),n.reportSeparator();for(let h of o.requesters.values()){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}let A=[...o.links.values()].filter(h=>!o.requesters.has(h.locatorHash));if(A.length>0){n.reportSeparator(),n.reportInfo(0,`However, those packages themselves have more dependencies listing ${W.prettyIdent(e.configuration,o.requested)} as peer dependency:`),n.reportSeparator();for(let h of A){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}}let p=Array.from(o.links.values(),h=>{let E=e.storedPackages.get(h.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: Expected the package to be registered");let I=E.peerDependencies.get(o.requested.identHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the ident to be registered");return I.range});if(p.length>1){let h=kr.simplifyRanges(p);n.reportSeparator(),h===null?(n.reportInfo(0,"Unfortunately, put together, we found no single range that can satisfy all those peer requirements."),n.reportInfo(0,`Your best option may be to try to upgrade some dependencies with ${de.pretty(e.configuration,"yarn up",de.Type.CODE)}, or silence the warning via ${de.pretty(e.configuration,"logFilters",de.Type.CODE)}.`)):n.reportInfo(0,`Put together, the final range we computed is ${de.pretty(e.configuration,h,de.Type.RANGE)}`)}}break;default:n.reportInfo(0,`The ${de.pretty(e.configuration,"yarn explain peer-requirements",de.Type.CODE)} command doesn't support this warning type yet.`);break}})).exitCode()}Ye();qt();Za();Ye();Ye();Pt();qt();var Zge=$e(zn()),Uh=class extends ut{constructor(){super(...arguments);this.useYarnPath=ge.Boolean("--yarn-path",{description:"Set the yarnPath setting even if the version can be accessed by Corepack"});this.onlyIfNeeded=ge.Boolean("--only-if-needed",!1,{description:"Only lock the Yarn version if it isn't already locked"});this.version=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&r.get("yarnPath")){let A=r.sources.get("yarnPath");if(!A)throw new Error("Assertion failed: Expected 'yarnPath' to have a source");let p=r.projectCwd??r.startingCwd;if(K.contains(p,A))return 0}let o=()=>{if(typeof tn>"u")throw new it("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},a,n=(A,p)=>({version:p,url:A.replace(/\{\}/g,p)});if(this.version==="self")a={url:o(),version:tn??"self"};else if(this.version==="latest"||this.version==="berry"||this.version==="stable")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await m2(r,"stable"));else if(this.version==="canary")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await m2(r,"canary"));else if(this.version==="classic")a={url:"https://classic.yarnpkg.com/latest.js",version:"classic"};else if(this.version.match(/^https?:/))a={url:this.version,version:"remote"};else if(this.version.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.version))a={url:`file://${K.resolve(ue.toPortablePath(this.version))}`,version:"file"};else if(kr.satisfiesWithPrereleases(this.version,">=2.0.0"))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",this.version);else if(kr.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))a=n("https://github.com/yarnpkg/yarn/releases/download/v{}/yarn-{}.js",this.version);else if(kr.validRange(this.version))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await W0t(r,this.version));else throw new it(`Invalid version descriptor "${this.version}"`);return(await Nt.start({configuration:r,stdout:this.context.stdout,includeLogs:!this.context.quiet},async A=>{let p=async()=>{let h="file://";return a.url.startsWith(h)?(A.reportInfo(0,`Retrieving ${de.pretty(r,a.url,de.Type.PATH)}`),await oe.readFilePromise(a.url.slice(h.length))):(A.reportInfo(0,`Downloading ${de.pretty(r,a.url,de.Type.URL)}`),await rn.get(a.url,{configuration:r}))};await O8(r,a.version,p,{report:A,useYarnPath:this.useYarnPath})})).exitCode()}};Uh.paths=[["set","version"]],Uh.usage=nt.Usage({description:"lock the Yarn version used by the project",details:"\n This command will set a specific release of Yarn to be used by Corepack: https://nodejs.org/api/corepack.html.\n\n By default it only will set the `packageManager` field at the root of your project, but if the referenced release cannot be represented this way, if you already have `yarnPath` configured, or if you set the `--yarn-path` command line flag, then the release will also be downloaded from the Yarn GitHub repository, stored inside your project, and referenced via the `yarnPath` settings from your project `.yarnrc.yml` file.\n\n A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\n\n The version specifier can be:\n\n - a tag:\n - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\n - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\n - `classic` -> the most recent classic (`^0.x || ^1.x`) release\n\n - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\n\n - a semver version (e.g. `2.4.1`, `1.22.1`)\n\n - a local file referenced through either a relative or absolute path\n\n - `self` -> the version used to invoke the command\n ",examples:[["Download the latest release from the Yarn repository","$0 set version latest"],["Download the latest canary release from the Yarn repository","$0 set version canary"],["Download the latest classic release from the Yarn repository","$0 set version classic"],["Download the most recent Yarn 3 build","$0 set version 3.x"],["Download a specific Yarn 2 build","$0 set version 2.0.0-rc.30"],["Switch back to a specific Yarn 1 release","$0 set version 1.22.1"],["Use a release from the local filesystem","$0 set version ./yarn.cjs"],["Use a release from a URL","$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js"],["Download the version used to invoke the command","$0 set version self"]]});async function W0t(t,e){let o=(await rn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(a=>kr.satisfiesWithPrereleases(a,e));if(o.length===0)throw new it(`No matching release found for range ${de.pretty(t,e,de.Type.RANGE)}.`);return o[0]}async function m2(t,e){let r=await rn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new it(`Tag ${de.pretty(t,e,de.Type.RANGE)} not found`);return r.latest[e]}async function O8(t,e,r,{report:o,useYarnPath:a}){let n,u=async()=>(typeof n>"u"&&(n=await r()),n);if(e===null){let te=await u();await oe.mktempPromise(async le=>{let pe=K.join(le,"yarn.cjs");await oe.writeFilePromise(pe,te);let{stdout:Ae}=await Ur.execvp(process.execPath,[ue.fromPortablePath(pe),"--version"],{cwd:le,env:{...t.env,YARN_IGNORE_PATH:"1"}});if(e=Ae.trim(),!Zge.default.valid(e))throw new Error(`Invalid semver version. ${de.pretty(t,"yarn --version",de.Type.CODE)} returned: +${e}`)})}let A=t.projectCwd??t.startingCwd,p=K.resolve(A,".yarn/releases"),h=K.resolve(p,`yarn-${e}.cjs`),E=K.relative(t.startingCwd,h),I=je.isTaggedYarnVersion(e),v=t.get("yarnPath"),b=!I,C=b||!!v||!!a;if(a===!1){if(b)throw new zt(0,"You explicitly opted out of yarnPath usage in your command line, but the version you specified cannot be represented by Corepack");C=!1}else!C&&!process.env.COREPACK_ROOT&&(o.reportWarning(0,`You don't seem to have ${de.applyHyperlink(t,"Corepack","https://nodejs.org/api/corepack.html")} enabled; we'll have to rely on ${de.applyHyperlink(t,"yarnPath","https://yarnpkg.com/configuration/yarnrc#yarnPath")} instead`),C=!0);if(C){let te=await u();o.reportInfo(0,`Saving the new release in ${de.pretty(t,E,"magenta")}`),await oe.removePromise(K.dirname(h)),await oe.mkdirPromise(K.dirname(h),{recursive:!0}),await oe.writeFilePromise(h,te,{mode:493}),await Ve.updateConfiguration(A,{yarnPath:K.relative(A,h)})}else await oe.removePromise(K.dirname(h)),await Ve.updateConfiguration(A,{yarnPath:Ve.deleteProperty});let T=await Mt.tryFind(A)||new Mt;T.packageManager=`yarn@${I?e:await m2(t,"stable")}`;let L={};T.exportTo(L);let U=K.join(A,Mt.fileName),J=`${JSON.stringify(L,null,T.indent)} +`;return await oe.changeFilePromise(U,J,{automaticNewlines:!0}),{bundleVersion:e}}function $ge(t){return wr[fP(t)]}var V0t=/## (?YN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?
    (?:.(?!##))+)/gs;async function K0t(t){let r=`https://repo.yarnpkg.com/${je.isTaggedYarnVersion(tn)?tn:await m2(t,"canary")}/packages/gatsby/content/advanced/error-codes.md`,o=await rn.get(r,{configuration:t});return new Map(Array.from(o.toString().matchAll(V0t),({groups:a})=>{if(!a)throw new Error("Assertion failed: Expected the match to have been successful");let n=$ge(a.code);if(a.name!==n)throw new Error(`Assertion failed: Invalid error code data: Expected "${a.name}" to be named "${n}"`);return[a.code,a.details]}))}var _h=class extends ut{constructor(){super(...arguments);this.code=ge.String({required:!1,validator:oI(Ey(),[sI(/^YN[0-9]{4}$/)])});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);if(typeof this.code<"u"){let o=$ge(this.code),a=de.pretty(r,o,de.Type.CODE),n=this.cli.format().header(`${this.code} - ${a}`),A=(await K0t(r)).get(this.code),p=typeof A<"u"?de.jsonOrPretty(this.json,r,de.tuple(de.Type.MARKDOWN,{text:A,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description. + +You can help us by editing this page on GitHub \u{1F642}: +${de.jsonOrPretty(this.json,r,de.tuple(de.Type.URL,"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md"))} +`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:o,details:p})} +`):this.context.stdout.write(`${n} + +${p} +`)}else{let o={children:je.mapAndFilter(Object.entries(wr),([a,n])=>Number.isNaN(Number(a))?je.mapAndFilter.skip:{label:Wu(Number(a)),value:de.tuple(de.Type.CODE,n)})};$s.emitTree(o,{configuration:r,stdout:this.context.stdout,json:this.json})}}};_h.paths=[["explain"]],_h.usage=nt.Usage({description:"explain an error code",details:` + When the code argument is specified, this command prints its name and its details. + + When used without arguments, this command lists all error codes and their names. + `,examples:[["Explain an error code","$0 explain YN0006"],["List all error codes","$0 explain"]]});Ye();Pt();qt();var ede=$e(Zo()),Hh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=ge.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=ge.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=ge.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=ge.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=ge.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=ge.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a&&!this.all)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=new Set(this.extra);this.cache&&u.add("cache"),this.dependents&&u.add("dependents"),this.manifest&&u.add("manifest");let A=(le,{recursive:pe})=>{let Ae=le.anchoredLocator.locatorHash,ye=new Map,ae=[Ae];for(;ae.length>0;){let we=ae.shift();if(ye.has(we))continue;let Pe=o.storedPackages.get(we);if(typeof Pe>"u")throw new Error("Assertion failed: Expected the package to be registered");if(ye.set(we,Pe),W.isVirtualLocator(Pe)&&ae.push(W.devirtualizeLocator(Pe).locatorHash),!(!pe&&we!==Ae))for(let g of Pe.dependencies.values()){let Ee=o.storedResolutions.get(g.descriptorHash);if(typeof Ee>"u")throw new Error("Assertion failed: Expected the resolution to be registered");ae.push(Ee)}}return ye.values()},p=({recursive:le})=>{let pe=new Map;for(let Ae of o.workspaces)for(let ye of A(Ae,{recursive:le}))pe.set(ye.locatorHash,ye);return pe.values()},h=({all:le,recursive:pe})=>le&&pe?o.storedPackages.values():le?p({recursive:pe}):A(a,{recursive:pe}),E=({all:le,recursive:pe})=>{let Ae=h({all:le,recursive:pe}),ye=this.patterns.map(Pe=>{let g=W.parseLocator(Pe),Ee=ede.default.makeRe(W.stringifyIdent(g)),De=W.isVirtualLocator(g),ce=De?W.devirtualizeLocator(g):g;return ne=>{let ee=W.stringifyIdent(ne);if(!Ee.test(ee))return!1;if(g.reference==="unknown")return!0;let Ie=W.isVirtualLocator(ne),ke=Ie?W.devirtualizeLocator(ne):ne;return!(De&&Ie&&g.reference!==ne.reference||ce.reference!==ke.reference)}}),ae=je.sortMap([...Ae],Pe=>W.stringifyLocator(Pe));return{selection:ae.filter(Pe=>ye.length===0||ye.some(g=>g(Pe))),sortedLookup:ae}},{selection:I,sortedLookup:v}=E({all:this.all,recursive:this.recursive});if(I.length===0)throw new it("No package matched your request");let b=new Map;if(this.dependents)for(let le of v)for(let pe of le.dependencies.values()){let Ae=o.storedResolutions.get(pe.descriptorHash);if(typeof Ae>"u")throw new Error("Assertion failed: Expected the resolution to be registered");je.getArrayWithDefault(b,Ae).push(le)}let C=new Map;for(let le of v){if(!W.isVirtualLocator(le))continue;let pe=W.devirtualizeLocator(le);je.getArrayWithDefault(C,pe.locatorHash).push(le)}let T={},L={children:T},U=r.makeFetcher(),J={project:o,fetcher:U,cache:n,checksums:o.storedChecksums,report:new Qi,cacheOptions:{skipIntegrityCheck:!0}},te=[async(le,pe,Ae)=>{if(!pe.has("manifest"))return;let ye=await U.fetch(le,J),ae;try{ae=await Mt.find(ye.prefixPath,{baseFs:ye.packageFs})}finally{ye.releaseFs?.()}Ae("Manifest",{License:de.tuple(de.Type.NO_HINT,ae.license),Homepage:de.tuple(de.Type.URL,ae.raw.homepage??null)})},async(le,pe,Ae)=>{if(!pe.has("cache"))return;let ye=o.storedChecksums.get(le.locatorHash)??null,ae=n.getLocatorPath(le,ye),we;if(ae!==null)try{we=await oe.statPromise(ae)}catch{}let Pe=typeof we<"u"?[we.size,de.Type.SIZE]:void 0;Ae("Cache",{Checksum:de.tuple(de.Type.NO_HINT,ye),Path:de.tuple(de.Type.PATH,ae),Size:Pe})}];for(let le of I){let pe=W.isVirtualLocator(le);if(!this.virtuals&&pe)continue;let Ae={},ye={value:[le,de.Type.LOCATOR],children:Ae};if(T[W.stringifyLocator(le)]=ye,this.nameOnly){delete ye.children;continue}let ae=C.get(le.locatorHash);typeof ae<"u"&&(Ae.Instances={label:"Instances",value:de.tuple(de.Type.NUMBER,ae.length)}),Ae.Version={label:"Version",value:de.tuple(de.Type.NO_HINT,le.version)};let we=(g,Ee)=>{let De={};if(Ae[g]=De,Array.isArray(Ee))De.children=Ee.map(ce=>({value:ce}));else{let ce={};De.children=ce;for(let[ne,ee]of Object.entries(Ee))typeof ee>"u"||(ce[ne]={label:ne,value:ee})}};if(!pe){for(let g of te)await g(le,u,we);await r.triggerHook(g=>g.fetchPackageInfo,le,u,we)}le.bin.size>0&&!pe&&we("Exported Binaries",[...le.bin.keys()].map(g=>de.tuple(de.Type.PATH,g)));let Pe=b.get(le.locatorHash);typeof Pe<"u"&&Pe.length>0&&we("Dependents",Pe.map(g=>de.tuple(de.Type.LOCATOR,g))),le.dependencies.size>0&&!pe&&we("Dependencies",[...le.dependencies.values()].map(g=>{let Ee=o.storedResolutions.get(g.descriptorHash),De=typeof Ee<"u"?o.storedPackages.get(Ee)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:De})})),le.peerDependencies.size>0&&pe&&we("Peer dependencies",[...le.peerDependencies.values()].map(g=>{let Ee=le.dependencies.get(g.identHash),De=typeof Ee<"u"?o.storedResolutions.get(Ee.descriptorHash)??null:null,ce=De!==null?o.storedPackages.get(De)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:ce})}))}$s.emitTree(L,{configuration:r,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Hh.paths=[["info"]],Hh.usage=nt.Usage({description:"see information related to packages",details:"\n This command prints various information related to the specified packages, accepting glob patterns.\n\n By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\n\n Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\n\n Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\n ",examples:[["Show information about Lodash","$0 info lodash"]]});Ye();Pt();Nl();var dk=$e(ed());qt();var U8=$e(zn());Za();var J0t=[{selector:t=>t===-1,name:"nodeLinker",value:"node-modules"},{selector:t=>t!==-1&&t<8,name:"enableGlobalCache",value:!1},{selector:t=>t!==-1&&t<8,name:"compressionLevel",value:"mixed"}],jh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=ge.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=ge.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.refreshLockfile=ge.Boolean("--refresh-lockfile",{description:"Refresh the package metadata stored in the lockfile"});this.checkCache=ge.Boolean("--check-cache",{description:"Always refetch the packages and ensure that their checksums are consistent"});this.checkResolutions=ge.Boolean("--check-resolutions",{description:"Validates that the package resolutions are coherent"});this.inlineBuilds=ge.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.cacheFolder=ge.String("--cache-folder",{hidden:!0});this.frozenLockfile=ge.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=ge.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=ge.Boolean("--non-interactive",{hidden:!0});this.preferOffline=ge.Boolean("--prefer-offline",{hidden:!0});this.production=ge.Boolean("--production",{hidden:!0});this.registry=ge.String("--registry",{hidden:!0});this.silent=ge.Boolean("--silent",{hidden:!0});this.networkTimeout=ge.String("--network-timeout",{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<"u"&&r.useWithSource("",{enableInlineBuilds:this.inlineBuilds},r.startingCwd,{overwrite:!0});let o=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=await NE({configuration:r,stdout:this.context.stdout},[{option:this.ignoreEngines,message:"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",error:!dk.default.VERCEL},{option:this.registry,message:"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file"},{option:this.preferOffline,message:"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",error:!dk.default.VERCEL},{option:this.production,message:"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",error:!0},{option:this.nonInteractive,message:"The --non-interactive option is deprecated",error:!o},{option:this.frozenLockfile,message:"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",callback:()=>this.immutable=this.frozenLockfile},{option:this.cacheFolder,message:"The cache-folder option has been deprecated; use rc settings instead",error:!dk.default.NETLIFY}]);if(a!==null)return a;let n=this.mode==="update-lockfile";if(n&&(this.immutable||this.immutableCache))throw new it(`${de.pretty(r,"--immutable",de.Type.CODE)} and ${de.pretty(r,"--immutable-cache",de.Type.CODE)} cannot be used with ${de.pretty(r,"--mode=update-lockfile",de.Type.CODE)}`);let u=(this.immutable??r.get("enableImmutableInstalls"))&&!n,A=this.immutableCache&&!n;if(r.projectCwd!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U=!1;await Z0t(r,u)&&(L.reportInfo(48,"Automatically removed core plugins that are now builtins \u{1F44D}"),U=!0),await X0t(r,u)&&(L.reportInfo(48,"Automatically fixed merge conflicts \u{1F44D}"),U=!0),U&&L.reportSeparator()});if(T.hasErrors())return T.exitCode()}if(r.projectCwd!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{if(Ve.telemetry?.isNew)Ve.telemetry.commitTips(),L.reportInfo(65,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),L.reportInfo(65,`Run ${de.pretty(r,"yarn config set --home enableTelemetry 0",de.Type.CODE)} to disable`),L.reportSeparator();else if(Ve.telemetry?.shouldShowTips){let U=await rn.get("https://repo.yarnpkg.com/tags",{configuration:r,jsonResponse:!0}).catch(()=>null);if(U!==null){let J=null;if(tn!==null){let le=U8.default.prerelease(tn)?"canary":"stable",pe=U.latest[le];U8.default.gt(pe,tn)&&(J=[le,pe])}if(J)Ve.telemetry.commitTips(),L.reportInfo(88,`${de.applyStyle(r,`A new ${J[0]} version of Yarn is available:`,de.Style.BOLD)} ${W.prettyReference(r,J[1])}!`),L.reportInfo(88,`Upgrade now by running ${de.pretty(r,`yarn set version ${J[1]}`,de.Type.CODE)}`),L.reportSeparator();else{let te=Ve.telemetry.selectTip(U.tips);te&&(L.reportInfo(89,de.pretty(r,te.message,de.Type.MARKDOWN_INLINE)),te.url&&L.reportInfo(89,`Learn more at ${te.url}`),L.reportSeparator())}}}});if(T.hasErrors())return T.exitCode()}let{project:p,workspace:h}=await St.find(r,this.context.cwd),E=p.lockfileLastVersion;if(E!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U={};for(let J of J0t)J.selector(E)&&typeof r.sources.get(J.name)>"u"&&(r.use("",{[J.name]:J.value},p.cwd,{overwrite:!0}),U[J.name]=J.value);Object.keys(U).length>0&&(await Ve.updateConfiguration(p.cwd,U),L.reportInfo(87,"Migrated your project to the latest Yarn version \u{1F680}"),L.reportSeparator())});if(T.hasErrors())return T.exitCode()}let I=await Lr.find(r,{immutable:A,check:this.checkCache});if(!h)throw new rr(p.cwd,this.context.cwd);await p.restoreInstallState({restoreResolutions:!1});let v=r.get("enableHardenedMode");v&&typeof r.sources.get("enableHardenedMode")>"u"&&await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async T=>{T.reportWarning(0,"Yarn detected that the current workflow is executed from a public pull request. For safety the hardened mode has been enabled."),T.reportWarning(0,`It will prevent malicious lockfile manipulations, in exchange for a slower install time. You can opt-out if necessary; check our ${de.applyHyperlink(r,"documentation","https://yarnpkg.com/features/security#hardened-mode")} for more details.`),T.reportSeparator()}),(this.refreshLockfile??v)&&(p.lockfileNeedsRefresh=!0);let b=this.checkResolutions??v;return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,forceSectionAlignment:!0,includeLogs:!0,includeVersion:!0},async T=>{await p.install({cache:I,report:T,immutable:u,checkResolutions:b,mode:this.mode})})).exitCode()}};jh.paths=[["install"],nt.Default],jh.usage=nt.Usage({description:"install the project dependencies",details:"\n This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of `cacheFolder` in `yarn config` to see where the cache files are stored).\n\n - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n If the `--immutable` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the `immutablePatterns` configuration setting). For backward compatibility we offer an alias under the name of `--frozen-lockfile`, but it will be removed in a later release.\n\n If the `--immutable-cache` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n If the `--refresh-lockfile` option is set, Yarn will keep the same resolution for the packages currently in the lockfile but will refresh their metadata. If used together with `--immutable`, it can validate that the lockfile information are consistent. This flag is enabled by default when Yarn detects it runs within a pull request context.\n\n If the `--check-cache` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n If the `--inline-builds` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n ",examples:[["Install the project","$0 install"],["Validate a project when using Zero-Installs","$0 install --immutable --immutable-cache"],["Validate a project when using Zero-Installs (slightly safer if you accept external PRs)","$0 install --immutable --immutable-cache --check-cache"]]});var z0t="<<<<<<<";async function X0t(t,e){if(!t.projectCwd)return!1;let r=K.join(t.projectCwd,dr.lockfile);if(!await oe.existsPromise(r)||!(await oe.readFilePromise(r,"utf8")).includes(z0t))return!1;if(e)throw new zt(47,"Cannot autofix a lockfile when running an immutable install");let a=await Ur.execvp("git",["rev-parse","MERGE_HEAD","HEAD"],{cwd:t.projectCwd});if(a.code!==0&&(a=await Ur.execvp("git",["rev-parse","REBASE_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0&&(a=await Ur.execvp("git",["rev-parse","CHERRY_PICK_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0)throw new zt(83,"Git returned an error when trying to find the commits pertaining to the conflict");let n=await Promise.all(a.stdout.trim().split(/\n/).map(async A=>{let p=await Ur.execvp("git",["show",`${A}:./${dr.lockfile}`],{cwd:t.projectCwd});if(p.code!==0)throw new zt(83,`Git returned an error when trying to access the lockfile content in ${A}`);try{return Vi(p.stdout)}catch{throw new zt(46,"A variant of the conflicting lockfile failed to parse")}}));n=n.filter(A=>!!A.__metadata);for(let A of n){if(A.__metadata.version<7)for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=W.parseDescriptor(p,!0),E=t.normalizeDependency(h),I=W.stringifyDescriptor(E);I!==p&&(A[I]=A[p],delete A[p])}for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=A[p].checksum;typeof h=="string"&&h.includes("/")||(A[p].checksum=`${A.__metadata.cacheKey}/${h}`)}}let u=Object.assign({},...n);u.__metadata.version=`${Math.min(...n.map(A=>parseInt(A.__metadata.version??0)))}`,u.__metadata.cacheKey="merged";for(let[A,p]of Object.entries(u))typeof p=="string"&&delete u[A];return await oe.changeFilePromise(r,Ba(u),{automaticNewlines:!0}),!0}async function Z0t(t,e){if(!t.projectCwd)return!1;let r=[],o=K.join(t.projectCwd,".yarn/plugins/@yarnpkg");return await Ve.updateConfiguration(t.projectCwd,{plugins:n=>{if(!Array.isArray(n))return n;let u=n.filter(A=>{if(!A.path)return!0;let p=K.resolve(t.projectCwd,A.path),h=B1.has(A.spec)&&K.contains(o,p);return h&&r.push(p),!h});return u.length===0?Ve.deleteProperty:u.length===n.length?n:u}},{immutable:e})?(await Promise.all(r.map(async n=>{await oe.removePromise(n)})),!0):!1}Ye();Pt();qt();var qh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target projects to the current one"});this.private=ge.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target projects to the current one"});this.relative=ge.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destinations=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=o.topLevelWorkspace,A=[];for(let p of this.destinations){let h=K.resolve(this.context.cwd,ue.toPortablePath(p)),E=await Ve.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(E,h);if(o.cwd===I.cwd)throw new it(`Invalid destination '${p}'; Can't link the project to itself`);if(!v)throw new rr(I.cwd,h);if(this.all){let b=!1;for(let C of I.workspaces)C.manifest.name&&(!C.manifest.private||this.private)&&(A.push(C),b=!0);if(!b)throw new it(`No workspace found to be linked in the target project: ${p}`)}else{if(!v.manifest.name)throw new it(`The target workspace at '${p}' doesn't have a name and thus cannot be linked`);if(v.manifest.private&&!this.private)throw new it(`The target workspace at '${p}' is marked private - use the --private flag to link it anyway`);A.push(v)}}for(let p of A){let h=W.stringifyIdent(p.anchoredLocator),E=this.relative?K.relative(o.cwd,p.cwd):p.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${E}`})}return await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};qh.paths=[["link"]],qh.usage=nt.Usage({description:"connect the local project to another one",details:"\n This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\n ",examples:[["Register one or more remote workspaces for use in the current project","$0 link ~/ts-loader ~/jest"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]});qt();var Gh=class extends ut{constructor(){super(...arguments);this.args=ge.Proxy()}async execute(){return this.cli.run(["exec","node",...this.args])}};Gh.paths=[["node"]],Gh.usage=nt.Usage({description:"run node with the hook already setup",details:` + This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). + + The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version. + `,examples:[["Run a Node script","$0 node ./my-script.js"]]});Ye();qt();var Yh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await Ve.findRcFiles(this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{for(let u of o)if(!!u.data?.plugins)for(let A of u.data.plugins){if(!A.checksum||!A.spec.match(/^https?:/))continue;let p=await rn.get(A.spec,{configuration:r}),h=wn.makeHash(p);if(A.checksum===h)continue;let E=de.pretty(r,A.path,de.Type.PATH),I=de.pretty(r,A.spec,de.Type.URL),v=`${E} is different from the file provided by ${I}`;n.reportJson({...A,newChecksum:h}),n.reportError(0,v)}})).exitCode()}};Yh.paths=[["plugin","check"]],Yh.usage=nt.Usage({category:"Plugin-related commands",description:"find all third-party plugins that differ from their own spec",details:` + Check only the plugins from https. + + If this command detects any plugin differences in the CI environment, it will throw an error. + `,examples:[["find all third-party plugins that differ from their own spec","$0 plugin check"]]});Ye();Ye();Pt();qt();var ode=Be("os");Ye();Pt();qt();var tde=Be("os");Ye();Nl();qt();var $0t="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function Jd(t,e){let r=await rn.get($0t,{configuration:t}),o=Vi(r.toString());return Object.fromEntries(Object.entries(o).filter(([a,n])=>!e||kr.satisfiesWithPrereleases(e,n.range??"<4.0.0-rc.1")))}var Wh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{let n=await Jd(r,tn);for(let[u,{experimental:A,...p}]of Object.entries(n)){let h=u;A&&(h+=" [experimental]"),a.reportJson({name:u,experimental:A,...p}),a.reportInfo(null,h)}})).exitCode()}};Wh.paths=[["plugin","list"]],Wh.usage=nt.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]});var egt=/^[0-9]+$/,tgt=process.platform==="win32";function rde(t){return egt.test(t)?`pull/${t}/head`:t}var rgt=({repository:t,branch:e},r)=>[["git","init",ue.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",rde(e)],["git","reset","--hard","FETCH_HEAD"]],ngt=({branch:t})=>[["git","fetch","origin","--depth=1",rde(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx","-e","packages/yarnpkg-cli/bundles"]],igt=({plugins:t,noMinify:e},r,o)=>[["yarn","build:cli",...new Array().concat(...t.map(a=>["--plugin",K.resolve(o,a)])),...e?["--no-minify"]:[],"|"],[tgt?"move":"mv","packages/yarnpkg-cli/bundles/yarn.js",ue.fromPortablePath(r),"|"]],Vh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=ge.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"If set, the bundle will be built but not added to the project"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=ge.Boolean("--skip-plugins",!1,{description:"Skip updating the contrib plugins"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.installPath<"u"?K.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):K.resolve(ue.toPortablePath((0,tde.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{await _8(this,{configuration:r,report:u,target:a}),u.reportSeparator(),u.reportInfo(0,"Building a fresh bundle"),u.reportSeparator();let A=await Ur.execvp("git",["rev-parse","--short","HEAD"],{cwd:a,strict:!0}),p=K.join(a,`packages/yarnpkg-cli/bundles/yarn-${A.stdout.trim()}.js`);oe.existsSync(p)||(await y2(igt(this,p,a),{configuration:r,context:this.context,target:a}),u.reportSeparator());let h=await oe.readFilePromise(p);if(!this.dryRun){let{bundleVersion:E}=await O8(r,null,async()=>h,{report:u});this.skipPlugins||await sgt(this,E,{project:o,report:u,target:a})}})).exitCode()}};Vh.paths=[["set","version","from","sources"]],Vh.usage=nt.Usage({description:"build Yarn from master",details:` + This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project. + + By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \`--skip-plugins\` flag. + `,examples:[["Build Yarn from master","$0 set version from sources"]]});async function y2(t,{configuration:e,context:r,target:o}){for(let[a,...n]of t){let u=n[n.length-1]==="|";if(u&&n.pop(),u)await Ur.pipevp(a,n,{cwd:o,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${de.pretty(e,` $ ${[a,...n].join(" ")}`,"grey")} +`);try{await Ur.execvp(a,n,{cwd:o,strict:!0})}catch(A){throw r.stdout.write(A.stdout||A.stack),A}}}}async function _8(t,{configuration:e,report:r,target:o}){let a=!1;if(!t.force&&oe.existsSync(K.join(o,".git"))){r.reportInfo(0,"Fetching the latest commits"),r.reportSeparator();try{await y2(ngt(t),{configuration:e,context:t.context,target:o}),a=!0}catch{r.reportSeparator(),r.reportWarning(0,"Repository update failed; we'll try to regenerate it")}}a||(r.reportInfo(0,"Cloning the remote repository"),r.reportSeparator(),await oe.removePromise(o),await oe.mkdirPromise(o,{recursive:!0}),await y2(rgt(t,o),{configuration:e,context:t.context,target:o}))}async function sgt(t,e,{project:r,report:o,target:a}){let n=await Jd(r.configuration,e),u=new Set(Object.keys(n));for(let A of r.configuration.plugins.keys())!u.has(A)||await H8(A,t,{project:r,report:o,target:a})}Ye();Ye();Pt();qt();var nde=$e(zn()),ide=Be("url"),sde=Be("vm");var Kh=class extends ut{constructor(){super(...arguments);this.name=ge.String();this.checksum=ge.Boolean("--checksum",!0,{description:"Whether to care if this plugin is modified"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,stdout:this.context.stdout},async a=>{let{project:n}=await St.find(r,this.context.cwd),u,A;if(this.name.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.name)){let p=K.resolve(this.context.cwd,ue.toPortablePath(this.name));a.reportInfo(0,`Reading ${de.pretty(r,p,de.Type.PATH)}`),u=K.relative(n.cwd,p),A=await oe.readFilePromise(p)}else{let p;if(this.name.match(/^https?:/)){try{new ide.URL(this.name)}catch{throw new zt(52,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}u=this.name,p=this.name}else{let h=W.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(h.reference!=="unknown"&&!nde.default.valid(h.reference))throw new zt(0,"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.");let E=W.stringifyIdent(h),I=await Jd(r,tn);if(!Object.hasOwn(I,E)){let v=`Couldn't find a plugin named ${W.prettyIdent(r,h)} on the remote registry. +`;throw r.plugins.has(E)?v+=`A plugin named ${W.prettyIdent(r,h)} is already installed; possibly attempting to import a built-in plugin.`:v+=`Note that only the plugins referenced on our website (${de.pretty(r,"https://github.com/yarnpkg/berry/blob/master/plugins.yml",de.Type.URL)}) can be referenced by their name; any other plugin will have to be referenced through its public url (for example ${de.pretty(r,"https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js",de.Type.URL)}).`,new zt(51,v)}u=E,p=I[E].url,h.reference!=="unknown"?p=p.replace(/\/master\//,`/${E}/${h.reference}/`):tn!==null&&(p=p.replace(/\/master\//,`/@yarnpkg/cli/${tn}/`))}a.reportInfo(0,`Downloading ${de.pretty(r,p,"green")}`),A=await rn.get(p,{configuration:r})}await j8(u,A,{checksum:this.checksum,project:n,report:a})})).exitCode()}};Kh.paths=[["plugin","import"]],Kh.usage=nt.Usage({category:"Plugin-related commands",description:"download a plugin",details:` + This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations. + + Three types of plugin references are accepted: + + - If the plugin is stored within the Yarn repository, it can be referenced by name. + - Third-party plugins can be referenced directly through their public urls. + - Local plugins can be referenced by their path on the disk. + + If the \`--no-checksum\` option is set, Yarn will no longer care if the plugin is modified. + + Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \`@yarnpkg/builder\` package). + `,examples:[['Download and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import @yarnpkg/plugin-exec"],['Download and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import exec"],["Download and activate a community plugin","$0 plugin import https://example.org/path/to/plugin.js"],["Activate a local plugin","$0 plugin import ./path/to/plugin.js"]]});async function j8(t,e,{checksum:r=!0,project:o,report:a}){let{configuration:n}=o,u={},A={exports:u};(0,sde.runInNewContext)(e.toString(),{module:A,exports:u});let h=`.yarn/plugins/${A.exports.name}.cjs`,E=K.resolve(o.cwd,h);a.reportInfo(0,`Saving the new plugin in ${de.pretty(n,h,"magenta")}`),await oe.mkdirPromise(K.dirname(E),{recursive:!0}),await oe.writeFilePromise(E,e);let I={path:h,spec:t};r&&(I.checksum=wn.makeHash(e)),await Ve.addPlugin(o.cwd,[I])}var ogt=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],Jh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=typeof this.installPath<"u"?K.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):K.resolve(ue.toPortablePath((0,ode.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let{project:u}=await St.find(r,this.context.cwd),A=W.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),p=W.stringifyIdent(A),h=await Jd(r,tn);if(!Object.hasOwn(h,p))throw new zt(51,`Couldn't find a plugin named "${p}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let E=p;await _8(this,{configuration:r,report:n,target:o}),await H8(E,this,{project:u,report:n,target:o})})).exitCode()}};Jh.paths=[["plugin","import","from","sources"]],Jh.usage=nt.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:` + This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations. + + The plugins can be referenced by their short name if sourced from the official Yarn repository. + `,examples:[['Build and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import from sources @yarnpkg/plugin-exec"],['Build and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import from sources exec"]]});async function H8(t,{context:e,noMinify:r},{project:o,report:a,target:n}){let u=t.replace(/@yarnpkg\//,""),{configuration:A}=o;a.reportSeparator(),a.reportInfo(0,`Building a fresh ${u}`),a.reportSeparator(),await y2(ogt({pluginName:u,noMinify:r},n),{configuration:A,context:e,target:n}),a.reportSeparator();let p=K.resolve(n,`packages/${u}/bundles/${t}.js`),h=await oe.readFilePromise(p);await j8(t,h,{project:o,report:a})}Ye();Pt();qt();var zh=class extends ut{constructor(){super(...arguments);this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u=this.name,A=W.parseIdent(u);if(!r.plugins.has(u))throw new it(`${W.prettyIdent(r,A)} isn't referenced by the current configuration`);let p=`.yarn/plugins/${u}.cjs`,h=K.resolve(o.cwd,p);oe.existsSync(h)&&(n.reportInfo(0,`Removing ${de.pretty(r,p,de.Type.PATH)}...`),await oe.removePromise(h)),n.reportInfo(0,"Updating the configuration..."),await Ve.updateConfiguration(o.cwd,{plugins:E=>{if(!Array.isArray(E))return E;let I=E.filter(v=>v.path!==p);return I.length===0?Ve.deleteProperty:I.length===E.length?E:I}})})).exitCode()}};zh.paths=[["plugin","remove"]],zh.usage=nt.Usage({category:"Plugin-related commands",description:"remove a plugin",details:` + This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration. + + **Note:** The plugins have to be referenced by their name property, which can be obtained using the \`yarn plugin runtime\` command. Shorthands are not allowed. + `,examples:[["Remove a plugin imported from the Yarn repository","$0 plugin remove @yarnpkg/plugin-typescript"],["Remove a plugin imported from a local file","$0 plugin remove my-local-plugin"]]});Ye();qt();var Xh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{for(let n of r.plugins.keys()){let u=this.context.plugins.plugins.has(n),A=n;u&&(A+=" [builtin]"),a.reportJson({name:n,builtin:u}),a.reportInfo(null,`${A}`)}})).exitCode()}};Xh.paths=[["plugin","runtime"]],Xh.usage=nt.Usage({category:"Plugin-related commands",description:"list the active plugins",details:` + This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins. + `,examples:[["List the currently active plugins","$0 plugin runtime"]]});Ye();Ye();qt();var Zh=class extends ut{constructor(){super(...arguments);this.idents=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=new Set;for(let A of this.idents)u.add(W.parseIdent(A).identHash);if(await o.restoreInstallState({restoreResolutions:!1}),await o.resolveEverything({cache:n,report:new Qi}),u.size>0)for(let A of o.storedPackages.values())u.has(A.identHash)&&(o.storedBuildState.delete(A.locatorHash),o.skippedBuilds.delete(A.locatorHash));else o.storedBuildState.clear(),o.skippedBuilds.clear();return await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};Zh.paths=[["rebuild"]],Zh.usage=nt.Usage({description:"rebuild the project's native packages",details:` + This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again. + + Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future). + + By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory. + `,examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]});Ye();Ye();Ye();qt();var q8=$e(Zo());Za();var $h=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.all?o.workspaces:[a],A=["dependencies","devDependencies","peerDependencies"],p=[],h=!1,E=[];for(let C of this.patterns){let T=!1,L=W.parseIdent(C);for(let U of u){let J=[...U.manifest.peerDependenciesMeta.keys()];for(let te of(0,q8.default)(J,C))U.manifest.peerDependenciesMeta.delete(te),h=!0,T=!0;for(let te of A){let le=U.manifest.getForScope(te),pe=[...le.values()].map(Ae=>W.stringifyIdent(Ae));for(let Ae of(0,q8.default)(pe,W.stringifyIdent(L))){let{identHash:ye}=W.parseIdent(Ae),ae=le.get(ye);if(typeof ae>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");U.manifest[te].delete(ye),E.push([U,te,ae]),h=!0,T=!0}}}T||p.push(C)}let I=p.length>1?"Patterns":"Pattern",v=p.length>1?"don't":"doesn't",b=this.all?"any":"this";if(p.length>0)throw new it(`${I} ${de.prettyList(r,p,de.Type.CODE)} ${v} match any packages referenced by ${b} workspace`);return h?(await r.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,E),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})):0}};$h.paths=[["remove"]],$h.usage=nt.Usage({description:"remove dependencies from the project",details:` + This command will remove the packages matching the specified patterns from the current workspace. + + If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are: + + - \`skip-build\` will not run the build scripts at all. Note that this is different from setting \`enableScripts\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run. + + - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost. + + This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them. + `,examples:[["Remove a dependency from the current project","$0 remove lodash"],["Remove a dependency from all workspaces at once","$0 remove lodash --all"],["Remove all dependencies starting with `eslint-`","$0 remove 'eslint-*'"],["Remove all dependencies with the `@babel` scope","$0 remove '@babel/*'"],["Remove all dependencies matching `react-dom` or `react-helmet`","$0 remove 'react-{dom,helmet}'"]]});Ye();Ye();var ade=Be("util"),zd=class extends ut{async execute(){let e=await Ve.find(this.context.cwd,this.context.plugins),{project:r,workspace:o}=await St.find(e,this.context.cwd);if(!o)throw new rr(r.cwd,this.context.cwd);return(await Nt.start({configuration:e,stdout:this.context.stdout},async n=>{let u=o.manifest.scripts,A=je.sortMap(u.keys(),E=>E),p={breakLength:1/0,colors:e.get("enableColors"),maxArrayLength:2},h=A.reduce((E,I)=>Math.max(E,I.length),0);for(let[E,I]of u.entries())n.reportInfo(null,`${E.padEnd(h," ")} ${(0,ade.inspect)(I,p)}`)})).exitCode()}};zd.paths=[["run"]];Ye();Ye();qt();var e0=class extends ut{constructor(){super(...arguments);this.inspect=ge.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=ge.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=ge.Boolean("-T,--top-level",!1,{description:"Check the root workspace for scripts and/or binaries instead of the current one"});this.binariesOnly=ge.Boolean("-B,--binaries-only",!1,{description:"Ignore any user defined scripts and only check for binaries"});this.require=ge.String("--require",{description:"Forwarded to the underlying Node process when executing a binary"});this.silent=ge.Boolean("--silent",{hidden:!0});this.scriptName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a,locator:n}=await St.find(r,this.context.cwd);await o.restoreInstallState();let u=this.topLevel?o.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await un.hasPackageScript(u,this.scriptName,{project:o}))return await un.executePackageScript(u,this.scriptName,this.args,{project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let A=await un.getPackageAccessibleBinaries(u,{project:o});if(A.get(this.scriptName)){let h=[];return this.inspect&&(typeof this.inspect=="string"?h.push(`--inspect=${this.inspect}`):h.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?h.push(`--inspect-brk=${this.inspectBrk}`):h.push("--inspect-brk")),this.require&&h.push(`--require=${this.require}`),await un.executePackageAccessibleBinary(u,this.scriptName,this.args,{cwd:this.context.cwd,project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:h,packageAccessibleBinaries:A})}if(!this.topLevel&&!this.binariesOnly&&a&&this.scriptName.includes(":")){let E=(await Promise.all(o.workspaces.map(async I=>I.manifest.scripts.has(this.scriptName)?I:null))).filter(I=>I!==null);if(E.length===1)return await un.executeWorkspaceScript(E[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}).`);{if(this.scriptName==="global")throw new it("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let h=[this.scriptName].concat(this.args);for(let[E,I]of uC)for(let v of I)if(h.length>=v.length&&JSON.stringify(h.slice(0,v.length))===JSON.stringify(v))throw new it(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${E} plugin. You can install it with "yarn plugin import ${E}".`);throw new it(`Couldn't find a script named "${this.scriptName}".`)}}};e0.paths=[["run"]],e0.usage=nt.Usage({description:"run a script defined in the package.json",details:` + This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace: + + - If the \`scripts\` field from your local package.json contains a matching script name, its definition will get executed. + + - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed. + + - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed. + + Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax). + `,examples:[["Run the tests from the local workspace","$0 run test"],['Same thing, but without the "run" keyword',"$0 test"],["Inspect Webpack while running","$0 run --inspect-brk webpack"]]});Ye();Ye();qt();var t0=class extends ut{constructor(){super(...arguments);this.descriptor=ge.String();this.resolution=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(await o.restoreInstallState({restoreResolutions:!1}),!a)throw new rr(o.cwd,this.context.cwd);let u=W.parseDescriptor(this.descriptor,!0),A=W.makeDescriptor(u,this.resolution);return o.storedDescriptors.set(u.descriptorHash,u),o.storedDescriptors.set(A.descriptorHash,A),o.resolutionAliases.set(u.descriptorHash,A.descriptorHash),await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};t0.paths=[["set","resolution"]],t0.usage=nt.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, edit the `resolutions` field in your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]});Ye();Pt();qt();var lde=$e(Zo()),r0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=o.topLevelWorkspace,A=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:p,reference:h}of u.manifest.resolutions)h.startsWith("portal:")&&A.add(p.descriptor.fullName);if(this.leadingArguments.length>0)for(let p of this.leadingArguments){let h=K.resolve(this.context.cwd,ue.toPortablePath(p));if(je.isPathLike(p)){let E=await Ve.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(E,h);if(!v)throw new rr(I.cwd,h);if(this.all){for(let b of I.workspaces)b.manifest.name&&A.add(W.stringifyIdent(b.anchoredLocator));if(A.size===0)throw new it("No workspace found to be unlinked in the target project")}else{if(!v.manifest.name)throw new it("The target workspace doesn't have a name and thus cannot be unlinked");A.add(W.stringifyIdent(v.anchoredLocator))}}else{let E=[...u.manifest.resolutions.map(({pattern:I})=>I.descriptor.fullName)];for(let I of(0,lde.default)(E,p))A.add(I)}}return u.manifest.resolutions=u.manifest.resolutions.filter(({pattern:p})=>!A.has(p.descriptor.fullName)),await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};r0.paths=[["unlink"]],r0.usage=nt.Usage({description:"disconnect the local project from another one",details:` + This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments. + `,examples:[["Unregister a remote workspace in the current project","$0 unlink ~/ts-loader"],["Unregister all workspaces from a remote project in the current project","$0 unlink ~/jest --all"],["Unregister all previously linked workspaces","$0 unlink --all"],["Unregister all workspaces matching a glob","$0 unlink '@babel/*' 'pkg-{a,b}'"]]});Ye();Ye();Ye();qt();var cde=$e(A2()),G8=$e(Zo());Za();var Kf=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=[...o.storedDescriptors.values()],A=u.map(E=>W.stringifyIdent(E)),p=new Set;for(let E of this.patterns){if(W.parseDescriptor(E).range!=="unknown")throw new it("Ranges aren't allowed when using --recursive");for(let I of(0,G8.default)(A,E)){let v=W.parseIdent(I);p.add(v.identHash)}}let h=u.filter(E=>p.has(E.identHash));for(let E of h)o.storedDescriptors.delete(E.descriptorHash),o.storedResolutions.delete(E.descriptorHash);return await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}async executeUpClassic(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=p2(this,o),h=A?["keep","reuse","project","latest"]:["project","latest"],E=[],I=[];for(let L of this.patterns){let U=!1,J=W.parseDescriptor(L),te=W.stringifyIdent(J);for(let le of o.workspaces)for(let pe of["dependencies","devDependencies"]){let ye=[...le.manifest.getForScope(pe).values()].map(we=>W.stringifyIdent(we)),ae=te==="*"?ye:(0,G8.default)(ye,te);for(let we of ae){let Pe=W.parseIdent(we),g=le.manifest[pe].get(Pe.identHash);if(typeof g>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let Ee=W.makeDescriptor(Pe,J.range);E.push(Promise.resolve().then(async()=>[le,pe,g,await h2(Ee,{project:o,workspace:le,cache:n,target:pe,fixed:u,modifier:p,strategies:h})])),U=!0}}U||I.push(L)}if(I.length>1)throw new it(`Patterns ${de.prettyList(r,I,de.Type.CODE)} don't match any packages referenced by any workspace`);if(I.length>0)throw new it(`Pattern ${de.prettyList(r,I,de.Type.CODE)} doesn't match any packages referenced by any workspace`);let v=await Promise.all(E),b=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async L=>{for(let[,,U,{suggestions:J,rejections:te}]of v){let le=J.filter(pe=>pe.descriptor!==null);if(le.length===0){let[pe]=te;if(typeof pe>"u")throw new Error("Assertion failed: Expected an error to have been set");let Ae=this.cli.error(pe);o.configuration.get("enableNetwork")?L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range + +${Ae}`):L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range (note: network resolution has been disabled) + +${Ae}`)}else le.length>1&&!A&&L.reportError(27,`${W.prettyDescriptor(r,U)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(b.hasErrors())return b.exitCode();let C=!1,T=[];for(let[L,U,,{suggestions:J}]of v){let te,le=J.filter(ae=>ae.descriptor!==null),pe=le[0].descriptor,Ae=le.every(ae=>W.areDescriptorsEqual(ae.descriptor,pe));le.length===1||Ae?te=pe:(C=!0,{answer:te}=await(0,cde.prompt)({type:"select",name:"answer",message:`Which range do you want to use in ${W.prettyWorkspace(r,L)} \u276F ${U}?`,choices:J.map(({descriptor:ae,name:we,reason:Pe})=>ae?{name:we,hint:Pe,descriptor:ae}:{name:we,hint:Pe,disabled:!0}),onCancel:()=>process.exit(130),result(ae){return this.find(ae,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let ye=L.manifest[U].get(te.identHash);if(typeof ye>"u")throw new Error("Assertion failed: This descriptor should have a matching entry");if(ye.descriptorHash!==te.descriptorHash)L.manifest[U].set(te.identHash,te),T.push([L,U,ye,te]);else{let ae=r.makeResolver(),we={project:o,resolver:ae},Pe=r.normalizeDependency(ye),g=ae.bindDescriptor(Pe,L.anchoredLocator,we);o.forgetResolution(g)}}return await r.triggerMultipleHooks(L=>L.afterWorkspaceDependencyReplacement,T),C&&this.context.stdout.write(` +`),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}};Kf.paths=[["up"]],Kf.usage=nt.Usage({description:"upgrade dependencies across the project",details:"\n This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\n\n If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\n\n If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\n\n The, `-C,--caret`, `-E,--exact` and `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\n\n This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\n ",examples:[["Upgrade all instances of lodash to the latest release","$0 up lodash"],["Upgrade all instances of lodash to the latest release, but ask confirmation for each","$0 up lodash -i"],["Upgrade all instances of lodash to 1.2.3","$0 up lodash@1.2.3"],["Upgrade all instances of packages with the `@babel` scope to the latest release","$0 up '@babel/*'"],["Upgrade all instances of packages containing the word `jest` to the latest release","$0 up '*jest*'"],["Upgrade all instances of packages with the `@babel` scope to 7.0.0","$0 up '@babel/*@7.0.0'"]]}),Kf.schema=[lI("recursive",Gu.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})];Ye();Ye();Ye();qt();var n0=class extends ut{constructor(){super(...arguments);this.recursive=ge.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=ge.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=W.parseIdent(this.package).identHash,u=this.recursive?lgt(o,n,{configuration:r,peers:this.peers}):agt(o,n,{configuration:r,peers:this.peers});$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1})}};n0.paths=[["why"]],n0.usage=nt.Usage({description:"display the reason why a package is needed",details:` + This command prints the exact reasons why a package appears in the dependency tree. + + If \`-R,--recursive\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named "Foo" when looking for "Bar", it means that "Foo" already got printed higher in the tree. + `,examples:[["Explain why lodash is used in your project","$0 why lodash"]]});function agt(t,e,{configuration:r,peers:o}){let a=je.sortMap(t.storedPackages.values(),A=>W.stringifyLocator(A)),n={},u={children:n};for(let A of a){let p={};for(let E of A.dependencies.values()){if(!o&&A.peerDependencies.has(E.identHash))continue;let I=t.storedResolutions.get(E.descriptorHash);if(!I)throw new Error("Assertion failed: The resolution should have been registered");let v=t.storedPackages.get(I);if(!v)throw new Error("Assertion failed: The package should have been registered");if(v.identHash!==e)continue;{let C=W.stringifyLocator(A);n[C]={value:[A,de.Type.LOCATOR],children:p}}let b=W.stringifyLocator(v);p[b]={value:[{descriptor:E,locator:v},de.Type.DEPENDENT]}}}return u}function lgt(t,e,{configuration:r,peers:o}){let a=je.sortMap(t.workspaces,v=>W.stringifyLocator(v.anchoredLocator)),n=new Set,u=new Set,A=v=>{if(n.has(v.locatorHash))return u.has(v.locatorHash);if(n.add(v.locatorHash),v.identHash===e)return u.add(v.locatorHash),!0;let b=!1;v.identHash===e&&(b=!0);for(let C of v.dependencies.values()){if(!o&&v.peerDependencies.has(C.identHash))continue;let T=t.storedResolutions.get(C.descriptorHash);if(!T)throw new Error("Assertion failed: The resolution should have been registered");let L=t.storedPackages.get(T);if(!L)throw new Error("Assertion failed: The package should have been registered");A(L)&&(b=!0)}return b&&u.add(v.locatorHash),b};for(let v of a)A(v.anchoredPackage);let p=new Set,h={},E={children:h},I=(v,b,C)=>{if(!u.has(v.locatorHash))return;let T=C!==null?de.tuple(de.Type.DEPENDENT,{locator:v,descriptor:C}):de.tuple(de.Type.LOCATOR,v),L={},U={value:T,children:L},J=W.stringifyLocator(v);if(b[J]=U,!p.has(v.locatorHash)&&(p.add(v.locatorHash),!(C!==null&&t.tryWorkspaceByLocator(v))))for(let te of v.dependencies.values()){if(!o&&v.peerDependencies.has(te.identHash))continue;let le=t.storedResolutions.get(te.descriptorHash);if(!le)throw new Error("Assertion failed: The resolution should have been registered");let pe=t.storedPackages.get(le);if(!pe)throw new Error("Assertion failed: The package should have been registered");I(pe,L,te)}};for(let v of a)I(v.anchoredPackage,h,null);return E}Ye();var eH={};Kt(eH,{GitFetcher:()=>C2,GitResolver:()=>w2,default:()=>bgt,gitUtils:()=>ra});Ye();Pt();var ra={};Kt(ra,{TreeishProtocols:()=>E2,clone:()=>$8,fetchBase:()=>Qde,fetchChangedFiles:()=>Fde,fetchChangedWorkspaces:()=>Sgt,fetchRoot:()=>kde,isGitUrl:()=>EC,lsRemote:()=>bde,normalizeLocator:()=>Pgt,normalizeRepoUrl:()=>mC,resolveUrl:()=>Z8,splitRepoUrl:()=>i0,validateRepoUrl:()=>X8});Ye();Pt();qt();var Pde=$e(Bde()),Sde=$e(EU()),yC=$e(Be("querystring")),J8=$e(zn());function K8(t,e,r){let o=t.indexOf(r);return t.lastIndexOf(e,o>-1?o:1/0)}function vde(t){try{return new URL(t)}catch{return}}function vgt(t){let e=K8(t,"@","#"),r=K8(t,":","#");return r>e&&(t=`${t.slice(0,r)}/${t.slice(r+1)}`),K8(t,":","#")===-1&&t.indexOf("//")===-1&&(t=`ssh://${t}`),t}function Dde(t){return vde(t)||vde(vgt(t))}function mC(t,{git:e=!1}={}){if(t=t.replace(/^git\+https:/,"https:"),t=t.replace(/^(?:github:|https:\/\/github\.com\/|git:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\.git)?(#.*)?$/,"https://github.com/$1/$2.git$3"),t=t.replace(/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/,"https://github.com/$1/$2.git#$3"),e){let r=Dde(t);r&&(t=r.href),t=t.replace(/^git\+([^:]+):/,"$1:")}return t}function xde(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`}}var Dgt=[/^ssh:/,/^git(?:\+[^:]+)?:/,/^(?:git\+)?https?:[^#]+\/[^#]+(?:\.git)(?:#.*)?$/,/^git@[^#]+\/[^#]+\.git(?:#.*)?$/,/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z._0-9-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\.git)?(?:#.*)?$/,/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/],E2=(a=>(a.Commit="commit",a.Head="head",a.Tag="tag",a.Semver="semver",a))(E2||{});function EC(t){return t?Dgt.some(e=>!!t.match(e)):!1}function i0(t){t=mC(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:"head",request:"HEAD"},extra:{}};let r=t.slice(0,e),o=t.slice(e+1);if(o.match(/^[a-z]+=/)){let a=yC.default.parse(o);for(let[p,h]of Object.entries(a))if(typeof h!="string")throw new Error(`Assertion failed: The ${p} parameter must be a literal string`);let n=Object.values(E2).find(p=>Object.hasOwn(a,p)),[u,A]=typeof n<"u"?[n,a[n]]:["head","HEAD"];for(let p of Object.values(E2))delete a[p];return{repo:r,treeish:{protocol:u,request:A},extra:a}}else{let a=o.indexOf(":"),[n,u]=a===-1?[null,o]:[o.slice(0,a),o.slice(a+1)];return{repo:r,treeish:{protocol:n,request:u},extra:{}}}}function Pgt(t){return W.makeLocator(t,mC(t.reference))}function X8(t,{configuration:e}){let r=mC(t,{git:!0});if(!rn.getNetworkSettings(`https://${(0,Pde.default)(r).resource}`,{configuration:e}).enableNetwork)throw new zt(80,`Request to '${r}' has been blocked because of your configuration settings`);return r}async function bde(t,e){let r=X8(t,{configuration:e}),o=await z8("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:xde()},{configuration:e,normalizedRepoUrl:r}),a=new Map,n=/^([a-f0-9]{40})\t([^\n]+)/gm,u;for(;(u=n.exec(o.stdout))!==null;)a.set(u[2],u[1]);return a}async function Z8(t,e){let{repo:r,treeish:{protocol:o,request:a},extra:n}=i0(t),u=await bde(r,e),A=(h,E)=>{switch(h){case"commit":{if(!E.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return yC.default.stringify({...n,commit:E})}case"head":{let I=u.get(E==="HEAD"?E:`refs/heads/${E}`);if(typeof I>"u")throw new Error(`Unknown head ("${E}")`);return yC.default.stringify({...n,commit:I})}case"tag":{let I=u.get(`refs/tags/${E}`);if(typeof I>"u")throw new Error(`Unknown tag ("${E}")`);return yC.default.stringify({...n,commit:I})}case"semver":{let I=kr.validRange(E);if(!I)throw new Error(`Invalid range ("${E}")`);let v=new Map([...u.entries()].filter(([C])=>C.startsWith("refs/tags/")).map(([C,T])=>[J8.default.parse(C.slice(10)),T]).filter(C=>C[0]!==null)),b=J8.default.maxSatisfying([...v.keys()],I);if(b===null)throw new Error(`No matching range ("${E}")`);return yC.default.stringify({...n,commit:v.get(b)})}case null:{let I;if((I=p("commit",E))!==null||(I=p("tag",E))!==null||(I=p("head",E))!==null)return I;throw E.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${h}")`)}},p=(h,E)=>{try{return A(h,E)}catch{return null}};return mC(`${r}#${A(o,a)}`)}async function $8(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:o,request:a}}=i0(t);if(o!=="commit")throw new Error("Invalid treeish protocol when cloning");let n=X8(r,{configuration:e}),u=await oe.mktempPromise(),A={cwd:u,env:xde()};return await z8("cloning the repository",["clone","-c core.autocrlf=false",n,ue.fromPortablePath(u)],A,{configuration:e,normalizedRepoUrl:n}),await z8("switching branch",["checkout",`${a}`],A,{configuration:e,normalizedRepoUrl:n}),u})}async function kde(t){let e,r=t;do{if(e=r,await oe.existsPromise(K.join(e,".git")))return e;r=K.dirname(e)}while(r!==e);return null}async function Qde(t,{baseRefs:e}){if(e.length===0)throw new it("Can't run this command with zero base refs specified.");let r=[];for(let A of e){let{code:p}=await Ur.execvp("git",["merge-base",A,"HEAD"],{cwd:t});p===0&&r.push(A)}if(r.length===0)throw new it(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:o}=await Ur.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),a=o.trim(),{stdout:n}=await Ur.execvp("git",["show","--quiet","--pretty=format:%s",a],{cwd:t,strict:!0}),u=n.trim();return{hash:a,title:u}}async function Fde(t,{base:e,project:r}){let o=je.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:a}=await Ur.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),n=a.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>K.resolve(t,ue.toPortablePath(h))),{stdout:u}=await Ur.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),A=u.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>K.resolve(t,ue.toPortablePath(h))),p=[...new Set([...n,...A].sort())];return o?p.filter(h=>!K.relative(r.cwd,h).match(o)):p}async function Sgt({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let r=[K.resolve(e.cwd,dr.lockfile),K.resolve(e.cwd,e.configuration.get("cacheFolder")),K.resolve(e.cwd,e.configuration.get("installStatePath")),K.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(u=>u.populateYarnPaths,e,u=>{u!=null&&r.push(u)});let o=await kde(e.configuration.projectCwd);if(o==null)throw new it("This command can only be run on Git repositories");let a=await Qde(o,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),n=await Fde(o,{base:a.hash,project:e});return new Set(je.mapAndFilter(n,u=>{let A=e.tryWorkspaceByFilePath(u);return A===null?je.mapAndFilter.skip:r.some(p=>u.startsWith(p))?je.mapAndFilter.skip:A}))}async function z8(t,e,r,{configuration:o,normalizedRepoUrl:a}){try{return await Ur.execvp("git",e,{...r,strict:!0})}catch(n){if(!(n instanceof Ur.ExecError))throw n;let u=n.reportExtra,A=n.stderr.toString();throw new zt(1,`Failed ${t}`,p=>{p.reportError(1,` ${de.prettyField(o,{label:"Repository URL",value:de.tuple(de.Type.URL,a)})}`);for(let h of A.matchAll(/^(.+?): (.*)$/gm)){let[,E,I]=h;E=E.toLowerCase();let v=E==="error"?"Error":`${(0,Sde.default)(E)} Error`;p.reportError(1,` ${de.prettyField(o,{label:v,value:de.tuple(de.Type.NO_HINT,I)})}`)}u?.(p)})}}var C2=class{supports(e,r){return EC(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,a=new Map(r.checksums);a.set(e.locatorHash,o);let n={...r,checksums:a},u=await this.downloadHosted(e,n);if(u!==null)return u;let[A,p,h]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(e,n),...r.cacheOptions});return{packageFs:A,releaseFs:p,prefixPath:W.getIdentVendorPath(e),checksum:h}}async downloadHosted(e,r){return r.project.configuration.reduceHook(o=>o.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let o=await $8(e.reference,r.project.configuration),a=i0(e.reference),n=K.join(o,"package.tgz");await un.prepareExternalProject(o,n,{configuration:r.project.configuration,report:r.report,workspace:a.extra.workspace,locator:e});let u=await oe.readFilePromise(n);return await je.releaseAfterUseAsync(async()=>await Xi.convertToZip(u,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1}))}};Ye();Ye();var w2=class{supportsDescriptor(e,r){return EC(e.range)}supportsLocator(e,r){return EC(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=await Z8(e.range,o.project.configuration);return[W.makeLocator(e,a)]}async getSatisfying(e,r,o,a){let n=i0(e.range);return{locators:o.filter(A=>{if(A.identHash!==e.identHash)return!1;let p=i0(A.reference);return!(n.repo!==p.repo||n.treeish.protocol==="commit"&&n.treeish.request!==p.treeish.request)}),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var xgt={configuration:{changesetBaseRefs:{description:"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.",type:"STRING",isArray:!0,isNullable:!1,default:["master","origin/master","upstream/master","main","origin/main","upstream/main"]},changesetIgnorePatterns:{description:"Array of glob patterns; files matching them will be ignored when fetching the changed files",type:"STRING",default:[],isArray:!0},cloneConcurrency:{description:"Maximal number of concurrent clones",type:"NUMBER",default:2}},fetchers:[C2],resolvers:[w2]};var bgt=xgt;qt();var s0=class extends ut{constructor(){super(...arguments);this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.noPrivate=ge.Boolean("--no-private",{description:"Exclude workspaces that have the private field set to true"});this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{let u=this.since?await ra.fetchChangedWorkspaces({ref:this.since,project:o}):o.workspaces,A=new Set(u);if(this.recursive)for(let p of[...u].map(h=>h.getRecursiveWorkspaceDependents()))for(let h of p)A.add(h);for(let p of A){let{manifest:h}=p;if(h.private&&this.noPrivate)continue;let E;if(this.verbose){let I=new Set,v=new Set;for(let b of Mt.hardDependencies)for(let[C,T]of h.getForScope(b)){let L=o.tryWorkspaceByDescriptor(T);L===null?o.workspacesByIdent.has(C)&&v.add(T):I.add(L)}E={workspaceDependencies:Array.from(I).map(b=>b.relativeCwd),mismatchedWorkspaceDependencies:Array.from(v).map(b=>W.stringifyDescriptor(b))}}n.reportInfo(null,`${p.relativeCwd}`),n.reportJson({location:p.relativeCwd,name:h.name?W.stringifyIdent(h.name):null,...E})}})).exitCode()}};s0.paths=[["workspaces","list"]],s0.usage=nt.Usage({category:"Workspace-related commands",description:"list all available workspaces",details:"\n This command will print the list of all workspaces in the project.\n\n - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\n\n - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\n "});Ye();Ye();qt();var o0=class extends ut{constructor(){super(...arguments);this.workspaceName=ge.String();this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=o.workspaces,u=new Map(n.map(p=>[W.stringifyIdent(p.anchoredLocator),p])),A=u.get(this.workspaceName);if(A===void 0){let p=Array.from(u.keys()).sort();throw new it(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: + - ${p.join(` + - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:A.cwd})}};o0.paths=[["workspace"]],o0.usage=nt.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:` + This command will run a given sub-command on a single workspace. + `,examples:[["Add a package to a single workspace","yarn workspace components add -D react"],["Run build script on a single workspace","yarn workspace components run build"]]});var kgt={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:"BOOLEAN",default:Tde.isCI},defaultSemverRangePrefix:{description:"The default save prefix: '^', '~' or ''",type:"STRING",values:["^","~",""],default:"^"},preferReuse:{description:"If true, `yarn add` will attempt to reuse the most common dependency range in other workspaces.",type:"BOOLEAN",default:!1}},commands:[Qh,Fh,Th,Rh,t0,Vh,Uh,s0,Wd,Vd,dC,Kd,bh,kh,Nh,Lh,Mh,Oh,_h,Hh,jh,qh,r0,Gh,Yh,Jh,Kh,zh,Wh,Xh,Zh,$h,zd,e0,Kf,n0,o0]},Qgt=kgt;var oH={};Kt(oH,{default:()=>Tgt});Ye();var kt={optional:!0},rH=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{["supports-color"]:kt}}],["got@<11",{dependencies:{["@types/responselike"]:"^1.0.0",["@types/keyv"]:"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{["@types/keyv"]:"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{["vscode-jsonrpc"]:"^5.0.1",["vscode-languageserver-protocol"]:"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{["postcss-html"]:kt,["postcss-jsx"]:kt,["postcss-less"]:kt,["postcss-markdown"]:kt,["postcss-scss"]:kt}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{["tiny-warning"]:"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:kt}}],["snowpack@>=3.3.0",{dependencies:{["node-gyp"]:"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:kt}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@<=0.5.2",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@<=6.3.4",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:kt,"vue-template-compiler":kt}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:kt,"utf-8-validate":kt}}],["react-portal@<4.2.2",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{["babel-polyfill"]:"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{["cross-spawn"]:"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@<=4.6.0-next.3",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@<=5.6.0-next.0",{dependencies:{["prop-types"]:"^15.7.2"}}],["@rebass/forms@*",{dependencies:{["@styled-system/should-forward-prop"]:"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt,"vuetify-loader":kt}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["vue-cli-plugin-vuetify@>=2.4.3",{peerDependencies:{vue:"*"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":kt}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":kt}}],["consolidate@<0.16.0",{peerDependencies:{mustache:"^3.0.0"},peerDependenciesMeta:{mustache:kt}}],["consolidate@<=0.16.0",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:kt,tinyliquid:kt,"liquid-node":kt,jade:kt,"then-jade":kt,dust:kt,"dustjs-helpers":kt,"dustjs-linkedin":kt,swig:kt,"swig-templates":kt,"razor-tmpl":kt,atpl:kt,liquor:kt,twig:kt,ejs:kt,eco:kt,jazz:kt,jqtpl:kt,hamljs:kt,hamlet:kt,whiskers:kt,"haml-coffee":kt,"hogan.js":kt,templayed:kt,handlebars:kt,underscore:kt,lodash:kt,pug:kt,"then-pug":kt,qejs:kt,walrus:kt,mustache:kt,just:kt,ect:kt,mote:kt,toffee:kt,dot:kt,"bracket-template":kt,ractive:kt,nunjucks:kt,htmling:kt,"babel-core":kt,plates:kt,"react-dom":kt,react:kt,"arc-templates":kt,vash:kt,slm:kt,marko:kt,teacup:kt,"coffee-script":kt,squirrelly:kt,twing:kt}}],["vue-loader@<=16.3.3",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"},peerDependenciesMeta:{"@vue/compiler-sfc":kt}}],["vue-loader@^16.7.0",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",vue:"^3.2.13"},peerDependenciesMeta:{"@vue/compiler-sfc":kt,vue:kt}}],["scss-parser@<=1.0.5",{dependencies:{lodash:"^4.17.21"}}],["query-ast@<1.0.5",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}],["skypack@<=0.3.2",{dependencies:{tar:"^6.1.0"}}],["@npmcli/metavuln-calculator@<2.0.0",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@<2.3.0",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@<=0.8.0",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@<3.8.6",{dependencies:{"magic-string":"^0.25.7"}}],["elm-webpack-loader@*",{dependencies:{temp:"^0.9.4"}}],["winston-transport@<=4.4.0",{dependencies:{logform:"^2.2.0"}}],["jest-vue-preprocessor@*",{dependencies:{"@babel/core":"7.8.7","@babel/template":"7.8.6"},peerDependencies:{pug:"^2.0.4"},peerDependenciesMeta:{pug:kt}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:kt}}],["sodium@>=3",{dependencies:{"node-gyp":"^3.8.0"}}],["babel-plugin-graphql-tag@<=3.1.0",{peerDependencies:{graphql:"^14.0.0 || ^15.0.0"}}],["@playwright/test@<=1.14.1",{dependencies:{"jest-matcher-utils":"^26.4.2"}}],...["babel-plugin-remove-graphql-queries@<3.14.0-next.1","babel-preset-gatsby-package@<1.14.0-next.1","create-gatsby@<1.14.0-next.1","gatsby-admin@<0.24.0-next.1","gatsby-cli@<3.14.0-next.1","gatsby-core-utils@<2.14.0-next.1","gatsby-design-tokens@<3.14.0-next.1","gatsby-legacy-polyfills@<1.14.0-next.1","gatsby-plugin-benchmark-reporting@<1.14.0-next.1","gatsby-plugin-graphql-config@<0.23.0-next.1","gatsby-plugin-image@<1.14.0-next.1","gatsby-plugin-mdx@<2.14.0-next.1","gatsby-plugin-netlify-cms@<5.14.0-next.1","gatsby-plugin-no-sourcemaps@<3.14.0-next.1","gatsby-plugin-page-creator@<3.14.0-next.1","gatsby-plugin-preact@<5.14.0-next.1","gatsby-plugin-preload-fonts@<2.14.0-next.1","gatsby-plugin-schema-snapshot@<2.14.0-next.1","gatsby-plugin-styletron@<6.14.0-next.1","gatsby-plugin-subfont@<3.14.0-next.1","gatsby-plugin-utils@<1.14.0-next.1","gatsby-recipes@<0.25.0-next.1","gatsby-source-shopify@<5.6.0-next.1","gatsby-source-wikipedia@<3.14.0-next.1","gatsby-transformer-screenshot@<3.14.0-next.1","gatsby-worker@<0.5.0-next.1"].map(t=>[t,{dependencies:{"@babel/runtime":"^7.14.8"}}]),["gatsby-core-utils@<2.14.0-next.1",{dependencies:{got:"8.3.2"}}],["gatsby-plugin-gatsby-cloud@<=3.1.0-next.0",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["gatsby-plugin-gatsby-cloud@<=3.2.0-next.1",{peerDependencies:{webpack:"*"}}],["babel-plugin-remove-graphql-queries@<=3.14.0-next.1",{dependencies:{"gatsby-core-utils":"^2.8.0-next.1"}}],["gatsby-plugin-netlify@3.13.0-next.1",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["clipanion-v3-codemod@<=0.2.0",{peerDependencies:{jscodeshift:"^0.11.0"}}],["react-live@*",{peerDependencies:{"react-dom":"*",react:"*"}}],["webpack@<4.44.1",{peerDependenciesMeta:{"webpack-cli":kt,"webpack-command":kt}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":kt}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":kt}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:kt,jimp:kt}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":kt,"eslint-import-resolver-typescript":kt,"eslint-import-resolver-webpack":kt,"@typescript-eslint/parser":kt}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":kt}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":kt}}],["terser@<=5.10.0",{dependencies:{acorn:"^8.5.0"}}],["babel-preset-react-app@10.0.x",{dependencies:{"@babel/plugin-proposal-private-property-in-object":"^7.16.0"}}],["eslint-config-react-app@*",{peerDependenciesMeta:{typescript:kt}}],["@vue/eslint-config-typescript@<11.0.0",{peerDependenciesMeta:{typescript:kt}}],["unplugin-vue2-script-setup@<0.9.1",{peerDependencies:{"@vue/composition-api":"^1.4.3","@vue/runtime-dom":"^3.2.26"}}],["@cypress/snapshot@*",{dependencies:{debug:"^3.2.7"}}],["auto-relay@<=0.14.0",{peerDependencies:{"reflect-metadata":"^0.1.13"}}],["vue-template-babel-compiler@<1.2.0",{peerDependencies:{["vue-template-compiler"]:"^2.6.0"}}],["@parcel/transformer-image@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["@parcel/transformer-js@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["parcel@*",{peerDependenciesMeta:{["@parcel/core"]:kt}}],["react-scripts@*",{peerDependencies:{eslint:"*"}}],["focus-trap-react@^8.0.0",{dependencies:{tabbable:"^5.3.2"}}],["react-rnd@<10.3.7",{peerDependencies:{react:">=16.3.0","react-dom":">=16.3.0"}}],["connect-mongo@*",{peerDependencies:{"express-session":"^1.17.1"}}],["vue-i18n@<9",{peerDependencies:{vue:"^2"}}],["vue-router@<4",{peerDependencies:{vue:"^2"}}],["unified@<10",{dependencies:{"@types/unist":"^2.0.0"}}],["react-github-btn@<=1.3.0",{peerDependencies:{react:">=16.3.0"}}],["react-dev-utils@*",{peerDependencies:{typescript:">=2.7",webpack:">=4"},peerDependenciesMeta:{typescript:kt}}],["@asyncapi/react-component@<=1.0.0-next.39",{peerDependencies:{react:">=16.8.0","react-dom":">=16.8.0"}}],["xo@*",{peerDependencies:{webpack:">=1.11.0"},peerDependenciesMeta:{webpack:kt}}],["babel-plugin-remove-graphql-queries@<=4.20.0-next.0",{dependencies:{"@babel/types":"^7.15.4"}}],["gatsby-plugin-page-creator@<=4.20.0-next.1",{dependencies:{"fs-extra":"^10.1.0"}}],["gatsby-plugin-utils@<=3.14.0-next.1",{dependencies:{fastq:"^1.13.0"},peerDependencies:{graphql:"^15.0.0"}}],["gatsby-plugin-mdx@<3.1.0-next.1",{dependencies:{mkdirp:"^1.0.4"}}],["gatsby-plugin-mdx@^2",{peerDependencies:{gatsby:"^3.0.0-next"}}],["fdir@<=5.2.0",{peerDependencies:{picomatch:"2.x"},peerDependenciesMeta:{picomatch:kt}}],["babel-plugin-transform-typescript-metadata@<=0.3.2",{peerDependencies:{"@babel/core":"^7","@babel/traverse":"^7"},peerDependenciesMeta:{"@babel/traverse":kt}}],["graphql-compose@>=9.0.10",{peerDependencies:{graphql:"^14.2.0 || ^15.0.0 || ^16.0.0"}}]];var nH;function Rde(){return typeof nH>"u"&&(nH=Be("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),nH}var iH;function Nde(){return typeof iH>"u"&&(iH=Be("zlib").brotliDecompressSync(Buffer.from("G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=","base64")).toString()),iH}var sH;function Lde(){return typeof sH>"u"&&(sH=Be("zlib").brotliDecompressSync(Buffer.from("m6PPN5NNGa6n57aNhksKPWgJ25WHbiLSmKh2KhvnP6kTyLl/kJKdo2UHRD79AwZUj8eNMfAhq4sLwQNNE0v9oGXzxif4zMFNd2xIkMSCykO7rfR0BlZhxBw6FzN7fNT9e5bXFEmqfkokrd8mVVtV8AsnMCvda38yC5HhW4VCk+8Dv+qHbwGmXF8HICI2ozSTsLYckoucF1f5RXzXH71TdkFPtH09g8TIr3pKSEaugLT4n9myO5fTay5IjCzPODs9m3tbqUBmYyixSDZKG6H6/9OEVEVFs+1ZJn1ocd6cOGKqadNQ+lT6dsj/Vqqn8347CRPcKuO3JaU19iNWMiqggsIBc03NejfVHk4IhSVcip3t/8pzXUIg0KWAHBJUqlrV2p9j/UXN7vNKWEDnwAF4TiSanCd04PG3xMvsR7zKTdCfoLR99Uh7aKUpovadhLCqJWmWVTTERyy7MvZZS3LktLb+d3gopE3R1YYyN1IW4ZjeLg1Rr3z62GSV0jQNzAc4uff5/+9PP9v/PVQFCKtflA5SHW6z+om17zn3eCQ9ObFle40MA0jn3HvekyzJ/4/9PUDYBYCaKk3LfbirNURVUiHX+XtbZqkWZi1Xrdag0VL/NajNkYLQJO8BQRDRVs28/qCSZrQuCww67QFSfxaZkOP4kuCyvFFLI+PIOH3YPXuE0ZWDIDn/P39Z5Wo005nDIDmqofK6DW+AwAX2SBkR97+eLMgmUtUCQrx4lMI+pQEGa8Fc217Xi5/qJTz+nLYW2Nz/XX57u2co7SWUeVsvNSvMXWPmCUc1lnAmoSlsqaoWiXrsYRIU0r1BaLtlHqGFUJIJbd7C///tyt8sl8tK7DDdn9Tzadbp1gkFpAXskOsBMmJXJc1/5n4j16OEnABLq2FvZgINDWcBQWb8grRy6JbAjkZoz8gmyFeqlen/S2eqBECG3ZBBj8xCNuMHmeSDxKU2SK9qiDPykXPRUpb3QexB+SCUT+K9IE7JBcB9A97KTIOl3e5B1REDyhm1Tg+XJjTMRBqkyASH0BfVl15B/kb8Z2POhnwaUtGaB3q4VC26Jke0B2YfwGOYmW69fV8bA4qoRNAmGQf/n+SsPxeawYndqu+QGNbfbowkv6CWEwVQ2wBzzKRq9c1ZjGXGXnN97RsVlldAXBFOHHvGflV7trbf7m4TEREQUEdon5X6LMZUzOwaCSIRxFEfuUesy2RMq/25lGkiBBlW2j9NxgZFBDgRkGE8P2NyQoikZjNSSlNq8TnJlzUkESSINVEz0QRC5pOXoaXQWsgSBe8pfrY/+YmmwX66CgGX+1iVVa7t14T52ehh/a7Avq8Pcv+858+fpxf7edSvKnBcNdIn9vY1EIYe/BSjHFGf92d+3Lz5nE9FmmK4nN46jrF8nasx7Es489Af8tHu2o9ayI/DY55Wf6xR+ecJ/tK2Fiso0B1mXlfEgHUANnYkJwJy4ZVPhaKoDD9Ffl2vRu7ZHrZyNMXSqhmGJAT8Wz9ZIwe/QPNG2ZCzQDfp0m/JK4YAU7Asoh4fn0adovOyvqFd8SOiq6LKYOv2A/yGEandaSDjsk6d1rX5FOHfTdUnFpuJ36OYvrf0+LUpkWxJsIlEk+N/voCPw7v0yl1ROXufVWYbRGDn4x89jQSXc/cLgiBtszojQhHqqZt8SYa298HKZql6TMbJ5hLW5J5ApN9p0uRJWSch2+7wdkjfoD8nKOQ0WR6/kOOaeVtKhXD1hzfcklxcvCIKlU4umGtnPXqYxEIpWOLOl83BwWApNj7NsuZljkAiLrfOUQULY6RqaS2mDXC0FDxdXPNhfRrV7YYEKglC2vB7unAOyYe0joEhIxL0TZ8mKkdge3ra3l8iJUC4QtgIVdeJPebR+9AGePF6XAGSHHx2TZBOZLntbjeBCCSXrzc/xVkWkGyytWDvmd7Mh5vWKu1uv7ijxl22ebOiV0RTOAPb0YV5wLXrCxzHpKEZ+IL4ZAB2qkEsESRSyYi1bNKKY45ZuvPzAbuNqcnAXEbGZr5UJiZjINkpUEpWD9R4CYMF5k4BaumbLS3y0Fk17GhnGarXwEX/USXpWrModVCxrniqbB9zpViAlaqI+uSdoxHF1k6No9qcgNpVrvqprbXsF8pTi2FOGTADdPXFtbBQkSss/JK9Bfp+w/E1qGoVZr1QIi5OKJlFOaIU2DnK2AJE2lHJcIiabCN6bXA8fbJQQIX0trQ6ULCAdvCkXu43PJd393wbJ7EjBVQdvXkDjjamhuTwKm1kK3ViIhAoWux7aZhv1yUKJDO3PkcEQjdhgMk8xhusCcy3SsJRVx6yc7Hh02d2ZyTL8rEo73EF2ePD5n9xn82oXGWjH87RWcQA/VB4rmSykk2wfEn/0bmEGKFIhTB2oda+itQdI+HeiD5onuZT9i5cbzMLDZ55LhyXTfmihN5oLpUvxRLf1ZQbH7zGd5QuUzugtLzKQsCmqnK+UUx7Ecs27Vjimu3csyw+dhz/LmyscBLljCt3kptun3N3V0ajyIlZJ0jKOaByrGf2sn6DjQ4DZ36uZS8+70Rp3sVLnFJVr26cwrw5Yc/fUf1ihzJbi6kYgsP9SShfcsuX2qoT6EH3gD2l6mvEMq9/T2oAhnq14xE0CqEUz3zE9DXmmA10rNFF7nRZmPRtdw0Ku4WPJ1dWb/HwkyADSvLyYmqtoRA/Ct9HgUKIKCjYol5kffF8bd58wO57ssgv545M6qcdlI6c0DqshLAuGrPFBvK3YhTkOQWK7LJakTNZBIDvleFjV44vI7KUa87iJETZ7csCY3/dbpLfG+nrXygDtZjFZl3OWEr38blBjEKblzNtTFuTwLjEl/S6thchBo9L9keXjWzEHcYHLsXE2tLtF9vNDjrc8wpnoju8aAFhtlv0kMR7idteuc+iZ/zBIBms3zxZOHK1ZWpvh3a5Qye6ibUAxDedhLAXvdISDbUqrcIjR8eCinYt6RJfOhBgjKhFkkacYN/GZQ+Tou3sWZfKA3ZD13SvUxo6kaCtnV+lcUDndapdsnXIQDV3ah8wn8Lk/p4AkKSnNnKUn+aLCYRO8LWBhAAKRiYNAnY9XWFFUM33ugyMRe6cBErk8IkszRH5iBgw5Tkjk+oMh8ivarnEzynCFoLEzRp59vBtXL5vBugjQEeHQ7rFlU3y/QzLstY3PZOY7QudRKopT8wdRLqEnH6HlERKySPPiqZny6iy2ezbOXbNkPkm2D0CWdQ9dg0JJqfuXDF40Id8tMb43g0Nz1iLZOzBIejwyeMlMIl+UMubnZdm2SE2hWMRhrq+YJWHCnB+tjcGYUHkvFG5Lqdgo/OQDNVPlC/7IHSJRLNOLOrDhKf/hyaybzdWXTVNnMt77ksZNojxvtG0CFUOxgZPMvC8cN/DlV7v9UWIMHAXkxQTMdYL64x6YYfV8RS6raL89z21FGZGTmu0xrDNbKbdcydS9fuhFetgH460jD9i8gYxvWzZ7v71jGlVtYimoRK8Wcce0hVjJeZw8UVUJtAeoDqzQjmeE0EvU1sc8j+WeHAQ2D2YPnatxXB3Hv6F4zwRE06poblOgsrNE8fdkyoul5gDlhHs3dSnGfIbrJB1WjephlTWGcvJMKvznGW2yL6qXZzdzJ579ST3LCDOldgY/P7qshSFMTfH/VDHswj+P4p6WYSKQ+3O5Rp0ngs8+h9s4sEVMx4HwwfgnfU2DWFZIU5W2OKednInw3sBqW38DYzPangEnI4I6dyq2noSA2lcA+/IzyfDO9ySBhI1PVgS+/hHW8fdnnGQjR0bfhMeBpg4Xkz5SKMEmFaS2tOI2CB5QIftr038Y/TxLYwyEIDAaYLVshYjxxDPiGVeTxu22oEM8dmthXra4xKhrbI4qqS7W9S3nA889+T/EhFYlLu9ZNMaQe+e0/hOH7J6ml6cnF8f/bw8RDUfAkazBmYbTH79m+chKoi7xlR3NfXJNdqVLQmXOnUyxh+SVrm9kpTLl68yyG8eouCdoRcviAhCQDpmOQCpmkX0FMMFAE5L+kpCsYXnRoyg3V7SKwi4GgEA3waiSytYBoqW2TwvCuYtlfe9ZVN3vcE3hh9FgS265fQ6USvfmXBVXAAAtyiyFE4vqqds1yyqXXsEALRLOTpCM0m9TOtJzXz5CcpbL+CdB74wNf1dhEOjbqYwfyFYAaB2/tHXH15+PRk9eg1mcS2pnC/fLQ8tZLyj9jJcZ10bA/2QQ9APg3QmhgsAzLiTdnebwr2GMEE7j/RtRHA1AgCnp2vCMV7lJLsRH/+erMM3RiJWz2UvATaPXmdkAAB0ohHI/8+tP34I+7bRdGNANMOfyAhgdYbZWTJApZavpw7gEcndV7LcrtD3Aj+Gp/glrMtHrzNvAQCa7YiyaqLJxrCp+zGx4UdO018haO0Ns7f7gHpnpUwAoEGBeSE4z6sysMmfNt+Ryhov5VbMAipVbQGAErBiOMAG7U01tprkLgGAFjwqyZG4pxSknk9VlEOr4RJWx6PXGWwBgKOTR30TCsOQGau9KjHNkbGrEQAo6WiiMQb8AY1/VAYL78Lm0cv6Lk1eBcDRzWqbZjzCt9iaOa7lIwCfmfSW1XTZfTSzZ1TMFgAoHJt8YhjAhO2msjJguGBuBAD0VE0yxnR074mfw90GI2OXeR/ZvGdSYPGOXmdkAAC0KDWocbvJ5menuERXy4zDdhNyrrG/BRfS86heUt5Zc0n2A0f0FL+C1vTR68xbAIAqFnsat3vcDEaRS40baBy0Z0lfWwRnJgBwwvUIF+DTa/uTide845b1mtOY1sRwAYAa2u1pCBdF2lhsVvsqfW3BcQkArGaiPVx8TT3+eYX+wz5+WccFLcdwAYAyaTtis4RPaSPBah+lryU4NgGAEe4Jm0Px63mF1ph29af6LoxgBcCxzmo1o8kroekezO2EfR6F/+i2pXFaKamZcQGAErPXJBjuY60s92GtXI0AwFA4FCr4HGpdJZc0k8vOkZt2SYCsRPtOMD5LP+ti3gd4NPVEIOX0TdR/LzR8T4IztoODJMWugQGupMPeEZ74jl0uw6QXC026AZ+JF6/tw6nQMSzUcTXgyK+/lQ6R3tAfmSped7Heyx92vWDvI++6kDmfRZuCe+6FICOyrzV9NU2+AKqZHxZV3gLE82kcgHN5Ug2KHPpXcn7ze7NFul1F7L91wg2ZWYhFAuukD8nVdpSUFq4n6D4mqyVvAqv4zfPmDBcgPJTbvVer3TcXOad26SRhbLzwRJ2861X99BiWq/imrvkLv2vm/TRH5BQgs2jgg6ftFf4NajeGgwcKCZJ01+rPjaE/EYZQjOTbjPNcW/zu5PiaR2LSYzKHqOPKe1wbWY11x/hrYVqwj7TJicV/b0aWHUDWNEjX1oz3ijFJAQcXrcBEkym6hhpCj0ZmGfw82IsBCh93dF4vy7t2+wIrMCHqkxNXvEAC0n0BaIBY54PSRXr8M2X8Z7vAHFJI4Vk0euy6Y7XpiGPPH7H8w5QgdfBjjtcBz+79h7dZFXaQy788ZUr2ISz/4NwzB7J0JkUpv3fTjPD3ThI1i0D0ShkU55nP0GrCzVEqYoE5mlgO6ryf+4QwAvDyNCkCmbPGL3IsCyWFFUQkslOpN5uWoiZSpkNk6SaVgyI/Cb74L/eod/sEJBxvdh2h4xH8OKzfln8jdh76t4lG5XwSvH8/5XSbfNwuEb5M4Xzyas5p4mCA13gRgIgACC1ow2ZOApHw7EeGvliLfO6DKQxKYzFnZiXbBVujyHzgo8OPYeQlmTO/mcfgQOB9TvXRmODpeKU2bovke5bOzoLIXSLSimyeyetZAsJrb+es/Z9I50b9uszaxHJRbLd4m/7gnGcsXi4/9+6myX7ocwu4FxU+rr4ez9yY0L7GxCICvTuOxumHay0BQBr2Oq65NcbvWheF68blZ9uBJq/bt4ETL5qk9Qez4fGPMe37uL+3cGLt1w4hwstmZ2/JMZyQUOcne7/lwcmDblUE4NFk2lOVo5vUsTc7Akz/IzbtTJ7HZCRH8nFWbk2XcN40LkHKkuUurAGeZCy9k5hOwddB6cyW2dmQ2ZXCEJFYAwaNbqhdfiUT4EWv+0MKqMKHdRWqwWom5KUeR8vJYEasX2SkcpF9hJG5GK38I1RPpbdcX4mseeChjEAPS/ahlMfp7GLR3C4sPr76k/xmP5QTZ60/D6Ovb4uFQ0tis+hgYsHF9eAI+gVXUNw4r7T4promnYOkW3blvNMdI+/BewRIMuxV3bgFiR+hTxYJINGyHfl3XgDi+IZKEEGF8n4MqJC6hSVbJS44GYgjaZpPm+0dZVmTGvjhhmvQTaeoXpgS3DAuPZaTUdZGbOr9RxIS06fGuBTLcMsamfnIbnSPM7EAq0Ni5zZhWLaMBoLYVzdEd1mZGJNfE/bBGm730tPC5Fs/uzV2e2Jjss/Om/tju9DKp3hSM2xsaIlN3q32lOyvQX8ocVLjGqdWnbZU4uV7RlZ2/9Djmu9UUFoWcU9hTUETPO5DX/vXs1ERXhHOex35hPh2Y9xVI2c2W3rba9GoqU2VNNdV9Uthh1VTT0EY8hK3BQCLM2UlHFVykj+fq7qpa7gp1dWG52ldo03rv26mLGm20uofdt7WZhgp/PVY4hsKfWzknoVSuRbvj712ilc5/vStD0lGsOxSIc4Z/23TnDBqc/SLAFDT+ZLrqNsoZleb5WgLk5037LwS8uJccvQYPsWA33j7lE7Sjp0cStMiPCuhAU/E+IyRGQBQd9DQ2MKrLlntUbccmgBARHK+fA4yrBNYsFPaGdDnDTukuwFNaaM4kI34EPI24TuTZn1ybzOtOs9aB8XFmQEAiq6gSLKOD6vdxuTrVkQTAHDWZMeXb0HQtQK9bJ7U9o2hu3VPJfQE6hafsUx+b7qknTsjpgJwshptgQjHJ6/hb/tp0s7cyZPTtMaedQydiTIDALM8EdRy/cI6qaBdpS5FNAGAKxHTl4cQTz1Agirbssxk7S/z/JwL2AcvkCO3N/gzU7gg5SpEoJsTKWoGACwEruGPCXf5nbk6F7HCdgvwbpbN90FcWFUlPz2W34G9qxWhR42Mia4Yk5Sxor3nZmazkyYKtcbypLD8njRHrZYsR2KbaWb5w9lRiUFFeaHDzs8PUq8WohiiqYvJSFLjXHDNHLHK3Jp69lLTsoaGVBVRztEvsgg6ZdVX7BS9G+qjUyFRKxfw8vzsIxULkV3UqlFVoy/1uuOQRoQ647J94GpKKehYstavZvVYoBomtEImx11T0bChdb/nkmzLU+D7q4JS9uXo264ywAfB+uju1Lrubj7HAKdEzc31r+a1UfO3Bz+Ocp8pWcvKw2glZ4heHm2U/aIuMI+9GjCzrF7PSWf6yk4igpo0y7IcTtYVTdOrMPClS0TnDvYIl2bt9bfcPYRbsjsefQpVK6c1mDMkjNONrhu1O506GeQwjUjAHWVV68i+tbcXoCKxKQc/2+EvdbmN8rjB8OJ9pI25c+13pfnFGefWAM7cBYQ50bNv6fRrqTGIS6AWNYTCz12VAyNcR/6qeBDxATpDQvBASGPXOBItuam6Do73Vv42BY/aek0zF3KbYTfurwirA73IiZwytHPxteTeMcigW+d2kS0N4UGQBE6YSg+e311mwi9yBNE/cPEsXUOsK9UMTgX5k4sZAJgMzpWG8FlML5662xlmZwp+bTJGq7/LBAAYw+LqGi35w2/ca7R39J4+UxhhpBFjxDRW70/TfAKPOVmK4aWB8ZwwUmIdvuCFjgrXzATBYJh18G0Q/4pSypysXv50YD2lWNx6ZLjhlm58O6lfiloSDuN/Q4so+o9RIn9uSLp/5f16ZEmvEk+UJknywiJmr6SuPLAbExA59b3zf88mqe51AY6mUAGPwv/dmdf7IUXpvA/3HkDPobePXZHkkNnggPDX0wRCAVJbKa7F8KY3NiHZzyZTFDtRyy2piCQ5CqKzu3QdDqc3OaOeCgBaiZhAkRUOWiexUUw+g9Jbpy+BC3OcuWJVuBfwbRmhAebFlReMG15K9NGZJWf0X16bzzoWeklvMhZ1Dyvn1tKw9Z1AP+D8fI1UzB1WquvhLBnuxTpABZzsRdVlzYZeuMHXWfNg79//Vr0MoKQIrUpfwbO+KjeC2nFmAMCGxJZwHKV0lWkqbO+BhDFNACADPQ+6dwl6uzRKAOAuxkY1YHIHjI4xoOmqUWFdPjwBhTe2lA9ev6yku7SI4jJWOQBlRCg0pSZO81/NHes9Urr5zCgzQp/MUw5AGRJq7YaLp86TKXu9j1/eNiKXH6FZ21Yt5WrVnhGjvF6SGQDghVGdLWGGimKOTML2FmQY0QQAWozPue5+l81I3CQA0KDKmtW4nO51bDn8gvjw89nmZzLBtlVLuQLRNONIpi4zAGDEmHjFrCiCjLsyXzFQWNEC9lAMaDo3MN91uiCU019Ea8Z7sIyFv3JePkpGp4IbQEitgq19uQTbwR04UzAnsN39U3PA0S9lVAemAxQA88tdjzG2h68Ep93pvH6SRqXPp7eKk8+wJeunbAp8kYiqfi3ZumpVYAj9R8UtTHIrkCEHUPbLutMCmQHIHkAkubRQggN40QeNWtCMqe1/tKM9FqYnpsVnKnAVUmh3Xcm6ve3F1dr2cl4xHEnVMwTVHggY10mFX6+gwxRC3y1xBJUu6pzr30OwD8fVBr7SXjY66PrY1dnaf72DcuzRTyTH/UXdyPk0b+o/88KuzUhKh9kk9zZc9pF3rmsbukj9u5/7yJrEo8XdTs5dqFteAaKI9Qilw6LQlxbIWImkQxcIwMk2jGZg00oY0zLA4GaTxKH1l6eO6bpWe5gCAL5WBzO5L+6D0mAdwiidvk7vPKxNrmlHpkq1dCs9yIZ7fc/pw9geuMod4RlhQ73R+BrHfsZuzWc8sIQhtMqg93waQn+mDUaxXyxsi3Egn+wl/UudKr6hBUFCOphk6IMamodari0wMYbP6ZpxrY5xWuw8wSu3JovTSMMU53rywZS1gAfX2NaKyPVPOO07vbL8rB0AHJ0dU2ox8CZO0mJlgpHykiMrSzqnlGL7WS7FFThsYgNC2O2/XpKPFDcQQyoMHLRpdWXpUVk7WJXcrN223edmVjoNSviFCfqM4ctkwuB9NcXuGF3ImLuHURvMCBABNxtIKWSPxFgwF/85/0wHLgAb/uSu1culTU9oTbnme3DFqikOsEM2U3cb1Tuca75NsEk20G8XyqsFohNjwRcWZLdirp+Q4pQAxHAneKBVZOJWNJ3N0AibpGzgEWW4Xs/afm4AKZEKbQl42zluDpVMkF7QcuUZZaCVOWPnvPPVi6W8uCrUzyemxnvVKwLW3Go+mvy7pFUc8g5zo+kw9caBIEFRT+JF/o5jL9Zie3kw1y2hAU3AmDR7f8myO0IG5JbBuiODXBQL+vNFfJk3gnHG707V2aHDGd+HqYzziQJ+eIglbUcVzbFBcTOFN2a5m3cb+0uZqtfmT4tWkxNMK7oKziSDlDZQIs6JVJlE/tPGgCljoCLlDNXFQHmf8dLxcte6NxcaUyXattpPLkfd5s0kDEkKeHT08yyza9c+iYjDynxA1DjHfWTF73yrgS+9mG8jPteBGZtVZgakxbJsjg/rQ83pEFcSXiymoytgyNwiTTGfX51SB2HaXzBVsUs/ddnx4NkZVzD6Ps5ZCiq3HIzmtRx2V976NiRZdg7lzxR/PWp0lraFKxYfTpJNzQNta6Gjtc16qqGy/YgSNPttDJOhnyLaMEpxQP651IABG12ojO5jo+p9ZiJPQ/NhPzMxf8uKB1eqavughT38SuODEE2curR+f0iHZ5GWTprHt2Nz8Xd75PS+Rg5p/ezVXBUP6bG86vHWbbZ9zED+ZWIGAAYYE4hZUfy/xvVVnNlYlEWz2lWpGjaFXCwTABDvHpmrU/VQT/prryud2n/lewisBYBrK2gt3rm6QK++ATcUCxL3JUQdTojnmIsn1eU8k6+7ruPPPVGB6vI8OOJE0xQAW3Vcyt+cZ0xpRhV+EA0H7wSgPiDggpUrzhiGmJQMFN0GgJIEC6cKxTf/KmauH7uav0hOD2gLAOqWpTY3l3g8iQ+6DHeNRc8TsGGcgYYg0usSxvoHkhV7sO05uhE7Y257CxBpjKE30bg2US8A8ymqOyael3aC1SBGaq4343cKPiUYLXGkfnpw/iu1MNZD/ftrmXvd7ZPw8leS12zJJAn0YefaXKF830O4lSenhRIgKVK9NIUzH8Abq9xnvPthMnFx/snqXfaYDya5vZYxIIqEdj3G4PzAKU7+GzD5Ng6JnbSoIuy0ZyLok0lBbdrkM3OtH6opQzA7b8BhXaOWdyofHu98lRTYn4ztJenUCVF0WyT67uSFv65Op6ulm6wGnG+wa6AlzOcLLQjWPY+wT+zykIYxZe2GRJuPC63FAD6MKwfrFh5oD14Fk/MUWJeQsjaoRjnT/EX+mJli+R/JcKOxwdDmOKtrNepGs854J8kwGi44m0tXD8iZgYeBTdZfOq+XdYuOpnFYspUrnjQR0/FNjDhf4O6rG3YzJh77a2vkQ4cta8QsMmxab165JbV8JWzWtat5RqcpwsoGm32NJsNDAtPYkC9vzF9gFUrhgQMOuIKesFUwzGJuRXMdYZq2jKmfdxLOcA3P7Bei8vLmHtMM2OzaLoWRbUUgWhT5cbbkNOPH9+p1wdT0rFNQMT2ACwamiRDnYd8NsY1ZcwZEoUcls8FzTZ1LFERobuTxtMHiarTMGukdfT1/om1shoLTYKJbGbOX05f3O3u6/9jTa2Rd92U9BztaGv+Vp9QfF/VHrv38tWMql3uYCauZM2Ffpks6o6JZ7QsstMDZfFPpLJrYAqoaF8OTmhJbImxjeb0L8wprCQmeQb55f/W99S+kulgG3iqlsDEDb4wGlr1/T8nZVV3whJCf4vVZhDvGpuwOQR6OR6ggzlWNzVG5tq632cmgr1w3yJVL+JeP+kB8pKd1tDXNQ9HCLhunTzTe8ZtQqw2qZJsScx/NH7upm95tlPDZJxxUX00gRtLPRLsvEsiULUsJvA/wZWLxebK1aVwFsVwEb31oI3Ze4VUyUq+4HzO29slDmRoj6eJKXBbUt3kj9zWJK5RngZNGwGDF5SuMXasy8w4DBrlITkyTHqWXwxyfEc5uaGDdCfnnLLPaewi/WBWb3lxF6olOSOaID4pbVal1zElYERrYMZTwkzhvLTDtul6XMN2wHJdllqd4vrdvG038mdfLuRFOWgYgxCZw42WzO1cQhqbCk4PZRYNVRu/CPXCIiavdmhaHDK+m11JaFEmHECBgFWL/q4rD+HniMDxh3978qPw6lFDA2Iq5KdYuXFQVGbqNXCh/J0+YzB9bXkn49Yn/fvupcrjQr/UvhDb8rRUTjR/ySsLHQsdOd4ff8c44J4o0e+i8MfiaTFiLnIUQQLy0D4suDIyh8YrkYvhVjlhw/JGEjhhDFozB2NEJHZ1d6l4mKopc/U/VatAoDUicyVjeO/nH8cpxLB1UxHsBL9POjtSBFSDFlznZJZVabo/IIJM6YFrOoZDYsNyAdxbrR0ESXF+BvdStCS9mBvk73oBPir9e2ACPyN+r1F1Zmqbbkh8OZgDgaCNGr1fMj7QT7jeFGha1PgDvOLuYY3sW7GVnJgBwjGfkGdyTsrkdcK48ersm3XZfPwBwNChFQ3kIuk/44gZNSXGmQMvqLwtwRE6w25zNGRyv+77a3Rbe1bikmgOpCmNK6gTMrpjtAORKLJwDVa2zvQMKI99pgpR9RSahlQrHt2FfXh1MK2H5wj6Ceh6Ky2ggAZTcPzfSY+IxM/3eHLxkNrlbrx7+O30yLkgARSSqdVsqRuv3VnKXoKVMbFv0WLPS6/Oq16kOs52mRHIxAwAtoNNi2sES4/UpF7KDi0eOu7xcW/g4ogkAEIxlL7RZQNd1elts7or2AwAsqDqIykJbvk+B4rxxDFWFfzNQbmAwhpg/vHNBlVeOcZhr8kHkc4bvBzsjQRac0guxrkLyy2k7gMTpNAMALACUmPbniIHpCAG7Wwy2T6jNv9FFZ9wcPOTi0XrlGG6iX+tWRK4SX3z44liOXB9EajwpPN245OYC5guiO+/Ntd+ND3m7N0udUKcezIeXiwnyTnAxy0lJNDwxp9ZL9b10fPRVrPnbdJhbPUw5eWg8KfDNMesRRnSfR4r1SMj9ELahaz3yISMYC8V6gs1Dg2B4utsT8fAVJqSE+1l3GL/dsO8ez/l9YtfimqrxvWOtJIWd5qkhNRMzABColsBzi2kJW3BVlbPZmbaLjNNtbulMAMC89WnSuL/EwxrKXXs/HWboOFivE/tXxzr7i8nSLEu/rlX0w3F1LXXhsTXHStqNV50wz9XsziwGAHx1vOZllMzX3NXLaks/VVyHf46qbltOr1VOSTFLCflLO5xdwY2Ew/xGdfjnKNC2FAEHKhiWuJz3UTcPO3dlI/4aGJd0hpDN7UjydMdNN5Wn1/lHWVAqiPYMFRwBokdBNicFMVWDN2cDycBYkaYLDPUeOsbqnfm+Mz75FqSnPwk6zm3rkXJlJdzD+xPaeTFfxit0DifFNVU0pU1GrSp6qdhzFzMA0K3sTZdMvFFz+JoVyq5PW+73URs+dC/CQ3eGJgAQk0VEG4ENI9f9gJr2yjkhdXV/QQAQNG9CNcGg4MgsshBlt0fKQqAcMS0LweZ+jCwUjhU4slCSK/cqTZ1nMhCYLo9SEO4G5ZKYgQLHLRbHgJPV2WeBc5Lv2wKn4yu6EuSp8NMxzluFsvPjxCU+vSxBdjQgSADl988Nbx1jzfDmV5KP7tvl9U4SdI6GBgmgoETFi3UIFI/I084lPq02prERgvrLKzVayx97Vi202sUMAFSa4QqkbAdLd3m3J6sd8VmeIzsxTQAAC9WENipoUiuXZhyXqEEA0IFigigLWuX7CGjbG7uhSPgXQqHAIA3lee8Fqjx3PLMf67vnOJekdcxOwkzUWviRBaNz3DIXa5ZEUlnWSGj5xbcGcKIQLJZIkkE7KiY8yy+JC/hLW2d4EbI6RtzpPy1Y1AzqlS2zG1fn0zvtjX9c3k1z4sDzwtrABwf0yEgguF1EAiy/6FXAVDU07K7PxPe5atk+vKmDu+Jmr4JdH1LBe69lTynA0yr41YB2S/yeYr4jYUqVeFPsiBD8IZjbcTwklTTz+YhSMNIKLztmbdzUe6e63eZOzeeMIi3BhWRMTyllEcCQ0ammK+3pXuv404dC+I70WdaXch8bEXUxESGoW6WP4zd+PfHFjORLHWrwHGi3LKxeqtPqTxOWlTyHq8hqRiBqGeA4hYIqlwbQ5PpZJnA9cyUFftcjR+/eu+mm0E5EwPjwRr8TNjV5jwLRJFRU4GBITIdTSK5+iVVfAIB0h34RsGnJjofpdO1QllIfBXnJrdf+ckWXX6yTrxBOXj7gqvhxI+GJkd5aUfeyKO/JJxvvf5kadYNGcCLuUt1IfT6JEvks3dO8DuGEYeByC2IrNSL90QUxT5jRL2hK7OglcBXb7bmqOSuz4LttSIUiObel+OPfd8wnADIhs1BKzrHtNeddktvNL1Rs97alaZaWu2HLKvrASksQV052hMgDxbyp7BkdfrZOMhEj5cZc4UNRHy9hMMc7TDwY3O1RjAXjecG4Hwnbbd9T2ejl30FwLWsQl9s+2xlZ+fJYfmBYNEOxlcqM5ydMRSoYBO9GhiM0V+yNYRGozg56nUKrCMj1zcIzFIsjTVvqhMdqLz5Odcke/c2ebTFwrcAdSRguNvKdvxi4yMtyhAnBZdXL2qmzyW3s+NiGx9cBAEYOfXmOchrF1GKMKe7VThzs1GjFsdoOE/2+yVmhMH9KK9mhVe5VnujQ0j8KD0LmSm2HWebD3Bq2MHfIWDzWK4ebKxLwTjjcVTFB1aav4UBaom2adHmuQT5LeQxrJdVcpUBX7LVXzGMhLDbLcglR60uS4UJhkrolYU0iVppMHG+XSfmazbrrAcNGslOSzQ5yv7sidC59zbvLYGIjZVHWjXMnFITvVowwJvIzQBM+AGqQ7o/hzRI88j4eb6BPI/7c4O+vLNmVVlTO/WRdZIx0iG+11nn3l/R6VYW7DWnAwEGa8uk+HKOJqMGEv4MmbPi4NgmQe1DfLk7xxOELefAxBiGRly8hEAjeDLGbqwsBW1S4YRQ/6xHgIB3AdT4EGJ59HZvtyhM6up9qOYCkJFiCuveveHDyIRoC0GGe4tgy7QHvaW29updOFqJTxWBK1FkspRKgSUkqkSuTTvmVkFWTJbC71dq/Y6GM0IDdG7prGtkDQ3amj1P5Xb5Inev8AyByDSfWWGiwdCE5kGfPqfXkPxE7O4/FyCkg3UliGv5sIQ/oTt1+3ataSK3H/OHXpHbY27r9gIarii0YhlmcZpGWEBzna0gPXzgwRHR6aQrzRlhHjZftxmI/dyGWELaYJcDpI3MHbNiq3vmmh08ybpDDGqz7rcyILvWBrNYzD9ZjT+0NCUz1EUwOIhYa2kc23HUAWlkG3fXYXYjUEYqbZR4RhQt7IIiG9AlJ+VfiizbDs0LFRYzoncKlxlykm7xbTGuZUgASqW3UqBTF5NNrTESS6FCBAZTybDBQLf/fGGNom6iAPC3X+4U6QJbCTqW03EE8U5i2mtOzYtnI7/lcoo0sJDNhS03ppyTWVuKZM28vcfD1fhyRumgIkvpD5PW9miSmFUubW65+/yHUXvV2FTuZuLIW2uwzRFiz9rS7qf8sYZosMWy1uUKLSxJ+vyoer7x4bRgr/OwJqLBJ4IS0UCd/DAotzB4GNQgDufGAxqCQVbH/UGk9e+EhJnfFoloeCXiWtE95Z4/sprzVjMoNmXHcxuVnNDbtdgqjAdp17Ld4/bxJvMd5ltdO0rcR/l5WZ/NHwXfa5fG2GLDQ1ZklbI5iGPvUnpL/mcxFGwPs7iuzQ1kHl7+5h2krvNmuEt07udeVH3Pj/I7utWiT3+zcC34E3O3ZZSf3E/D+2rq6LqUbJ6tpykji0PqybBpJg1z19eYVOr/lLJfyHoXrZ+6HStnVQ64RkM5P2nH/PjJZI7Mj70N5j0drR1yTie9t5cl6MUQMXHEISpmf4v947bZlj7ggnP3XQHNwT/NMXZDPr5atWxAbuEYbR+AmCZpOg9dN5A9x7ywheoAAXcsMVhcjZSWAiyBMVqiaaS5QdiuokS56fr0YxEJAM9+R6DoLi0Lo7ug7hcMlvazNHorvj+Lz5/Su57j4n/+ZWHzFbNl7+H+77D7+3kXW0ufY2S0u1nOMLv8zGfkYGZ36b7SJ+ug/GzI4/4BQhqaw7mLE+qNo9BqPNaac0GJmFZO2XYDWvWfiq+/hC2vjmetikl9T3p5tMQbUabzlCzmQkM5Y3/IFGyitiZqgjOZ13Q/hob8pNYqVftQ8FXcu3vxsZWZ5dS6p53FXxc2llxzvZFtzciO4chszmiu48bq/khtzZ7qiK2/aYqu6HDxana74ao4NzPGSTd7Rcz5Rzs3e47skYN6k/VlVgIXGgB4PD80wJNZ1poAmsaDdGnzXKKsigrRNQ8So2nQR2FlaPtGndNhUDc+doSygAy0+4dMpwJGoGNuLKnOkQFzexiE1iYaY6bFUeN3PG599fc8oKhha1Ag32Q06EZv2mY0ugHBdCVoWXfXIRreJCaFDEhwVYE70SKBXFEOKIVt4+R4rtzuhZSfTtF4YApOavUYv+5Xk3hFPGjPj7I5m7DL5bxBB2mQ3G98iUC0y5OU8Ve/HiyBkWKE925g3jCMUJloxN0qREiu6MITOmaNUNM5SsdwJebEL4rpLi8O5wxVabuKr2n3pIoxn0zmoHENd+bM8FBBYF6Sl9SV/SpWuaKk/XDndm4C+S+ooh71BhMc1ldh3UfZX3HiCbIWpTRZ/bAm8zjggnja8l2TRLviHdhW+Mq5AVsuHYb7wRRp8Vzn7q1sQo/TcvbrK1cadA2jXXUEnXTbVcJtHkNi6xO235xV/2uGwK66m3X1m6IfCdWDY2bMGr04EHSfPcx7eUmurK1Kf5qvz4y3dHTN2Ry+lp6XFf4ex5XDJ7+c8IIuGFHOJqIoW3sr1dXW2/Ih38JL8nN2IVYcrngF02fD1rEPiheksqA9euqZb4BSlHwX2gh9MqUpO48FB/TGb9Jl7dYOkaTSQ9T5x4stToxwdwj5+zJz4X/SY3popy9RGXhu64qd3g/3skqZZmJp5pGdLqUudPt0KVvo35dtVwtnLHv1p5IZH+m4GBzGB5KqASSKn0zlIA5TtjUXM+wj8h3TZpQNN9wl7GFMA4bkjHELwPP0RMN0VWcMF5riMyvJ5gaG0sOqj3UYhCLiw7ZugpFEAtkwYpSTGQJhMPnHnIsD7TaBQk2sppz5C3h7u9xr7ABdvMfRWkhkojyh01CWm1Wlg76mMQNNdB/aRVhqN9YkbNVxrZyPFIcNGd2B4Jg2dk9jCT+Ke07AJi5wh18J8f7XRjQXIP0MKSftLIZak/NDc3iVatkHQC9wMOC2zYmOZ+QIUS4JqA+PzJGJ5Imbc+KRtKedaZRbdPoFRWIPZ4vzsAUa8Ok/Y06tzpkOkJODtI1hYl9imd3TkpJ+FpKOMTY4WMiZowiHZjAKI+OGM6GBKLr1wm8HAU80tY3KsoKgjfWCYd6SVQfruywaMENuZnbgg8vudH750hXo6E2YgTtkxP1IYkqjJXzfu20huHRs/sjTbxJqS4lCwqSxHtvJilzkN+Fev1qSUOwX4vJyc5SibrB6FlyhJYVIXYm51zGuLW9pP0UD5xhnYV0jxYMuEEljN+UwzTHGvsa9Re6vMeuFnMp13earNBgGUlQJEXEv03xYNYxd/3D2CCMaKndKhWxUrZBgthvDGDPBPu62OXsyPmHxtu1VWoRYdKB5CXAL6h6wvXVbAypHjXfyT7pxsswSQy99W6TyBMlbMEKfLCBxFc9Is44UVmarRwOOGFm3ihWU2rWLHXTT28bTbAthzMEvzwjLG4+isnCslYvs0ADCJVbs7ZA2R37Z0+sM2dx7bznk03M4DDVvP13EeELIz07MBmLnu//lF40R/CHA0VvoZvUI5oMXx3Vq7nsJ4kHWCAPbZfOq2sl0wi9xJQ2eCcncOach+5G1woFE7AgJ8a4+7SIwMjEWz0a8CpEk7UwDPd3aHVXWlQ4S3oJ73L0/g61ewgq88JPW18hWtXVBK1hB5Hz99vV2St1+z/8EWpbObl11mgfAWHK9XNnihm5F9giqGt8JjcT03fjF5Gjcqql0kADSxESdZ0NgmTcIA/bvpqx0HHdqjAx+aolxoIODEjAMyN9bHqa04YQ70Y3A0G5Gdha6AueankwQfFtTd/ZzY6R7i3iLTxfiqGN8feptgFQNtBcEAfmNral+tH9EpeciSYDH5IcDmKQJJ129yA70o30BWIzv1fp91AGmbVHGbR/+DcKQ2NV+1u6QIHp7jMhocbou9aIw1HAmqAK4fkkzn1JZJgiTnKB9VkN5D5lSVWwDY7QAdUQXig2ek72X9/Ybm99vYNPM//o1VeFzKja319dHAvxUH8EvOmspkPpOxvFK56en0XOjIY0Y7FzryfEnvCuSg/cjA6WaLIp0YLU4QFckv5E55FiHF+u3wuU8TjQvny5pHK999Tgxva69PvVgg+ZrIcqsWdIAPdQMAB1bjxYA4R8eEE0l9Ltims1snh0GzQkdOM7PQWTGrNzrtduqoD8uv0SBgN4tgugi5je7CVHGCqbBrWW/hDr1/twVe8eA/AICiwJzUz7LByYnbdYGz64aPPfZWwY3kjv3JK7iboIAtQqxGIMCOwAWF9+bApfXYHYB1/9t2AIBVtUwu/Ecfq7lMbrqYqd12GplD7fjl8QAdUCNNJxRwSqgynWBcN715AAB7wEEk7rZARTIzfaAWOns4oGt1w4SgdjxQIzGUO96oLsDvydY0kulXWu24Xl39/1noNsB+YR+6I7AG7lHQNKYqQupqyyG8n8dvPvlzZcqs8UHcr/tU2wCawVQ6uPkupN+TramFeUtOwSfT2geTso5T+7WPxR/ifGv3J9TKrDC+/3Ar8NcVPT4yfV8mvhJ2Tsa3DaDWZsULcxd0CRF6ywy/Yb/mu+pq1UdaaYv0qyRwhZKaqxsAsH8N3gUNtXU95NOszwWpbe8yHNRsVuiIO/YsdFYMdcSdMtMlcRF0hUW0e8SEje5CnjmBK6hd11uYrPdvxmBuD/4DAL04UHvqJwjoSNymDHopxYMFfVJ/owLmEBTguBC2ZujH+Sgr8F3x4vF+wuN9OBVnzS1NlI3X3DuRA+iN1FxdAMDpWBSxz4/4d21zat9xFH49d/UhPncLaqU5r17PejIknwi28GlxswZpOOQsowClsUIBAKAEwBX5F/41xPEj3ubmJdjQcitOh+22e2UdAMAJgWCr4RJe6SVaBKH7T2Q0TXFr3lR+W4SFsoZ8N/IsDumuNQHGKkq555XjhQ3z3RZfRxAIuiFc+uI4Tl5J6LVjjs5evPrztXKUQy1ftm8vqhYOQFc7nv/TDAly2Vp/p+PN4ct/T1+pj55XrF7YEz98prSG9UuJMnYq7rtVNZRp2qmi1NzcAMAKnKYI7ximlJsK3pATc7KkHOZk/ZedM1iW4vVXiIkiRHh/xQTOK4iS8D6JUxuonAsRAIiep2WtJlj1IphorUXKeexPW8Bo4EP/AIDWgWxI/TiJPwtyCsOlRyxUrpjhRP2lLZ4ge0VHQu85nkGZcxWvlU3klXWB73JHiLwpOUk1lSWCLebsZtxxDnoqGzsQO2lVx5X1XiXUzL4ng2HUGyWxx9fJmx9xc5ItcarvquqjARkcBTCY+4bXLXDVbkEFjwZQ8OoDEzy62SuojW7p1TQ7vcV8/ugABCdnIQw4sBk0cDhg4FCwwK796plBAhsAAiftDY/N/M5iMt8ZEHBqn47dVDMI4BgAwDIlhEHleDdd6xdYcr7jxuHvb856qmsNCRk7SgjbznVZNWNdSC+xGDASi8VQlNSBxIoFCBbD400BAHAAcXa+x044kLiwrR17zKdTcm0C1ZRVyTh0KtC1vas8AOA4xrkJcrit6phvdbe9+UvM9qr52nZKfxOLsX3q3Q4LFgkWM6zlLlLTDmqxCZ0KLDT0FHwmFGjSU6yavaVvw/NH9Z5NA7/pi2vWUm10d7cLZGvCdpcKY+i34icgoYsA1z7b/b3TsWlmXM8x1lJtVHeH+BqnGg6DJ3Knb/5dNwDgoNAALyBWNzMGdq69u3EVcNNCAMRjgSwAdZcELvhbAao+RAAAMrQuaIJNLQ2/1nuFu9f5d5e1Rqmue/8BAJchT2/w47WFcxHN44CLbYlvsS47g8tz9LeB4lppRSmeKkhvd+t9FylL7gSlCqN0qv1z6wGn6XvYNYZcya4nGPKixrzHa6lGXzsAkDKGhoRvaF5LE367kaAuKFhpSCB1vXkAgHPgOQ4OHbesFsyWyKCYcEUWzK3KRlkWLKQaUCMLtnoEiuVFcV3csrK7Pi8pzpMWnM/QQpluDM07qohiVm7oZ8h+z4O/HSLpF5TnAWMDaMrRPrG3+qRh/ij0Y/mu9LX3QEp3iJqFK3vZSoqfDeBLPPYzDaVfQjoPHRtAzcPFvfQpedemXuHZjqBiFqQ13qyEEVVhyO4OhXZeNwAw1vmHBnVzp4CMnN30aLykaSEodHdFJXRULSimS6JWgL4+RAAAELS40QSrWnZ5rvcKs/L+zTU4rYP/AIBWBt1UP3GBvhbNIcCArngSZqroUOg9S6UVeSle4Bv0PtyFV6cWpVQ9FNPg2A69D5OfwZKHiZn+kL37PcWlPiWi9dYLcgIiF/EK0se3AQAYfKq43zZlIahKb+g9SQSqWSCqZnK3MMjyFGZjQHCWnr8rMiMzlmFWyIztwNnEklloG3YTAADTOmpUYaZlvpGg0umxyjZZ78pOOmBW3FzPDgCwW2QVSynVEtQlmQ2AmkLcGKgFTSoCxRYct0ocePXX8809xTIFau2fpFqmUerrEr6qWQejCbpewAT+oDuC5Ls7Vx7rxW15l+FlHuv14OUPTk7Yh9WGGF5mlyEAcGMEiadTqE290GanDHUrDGiWk9MkUYaYeh65gI//gawqjVewBDJWe0SCFQPs6UEEAAiQo9xnSxEFEk3tdf9NR9PES6d3/wMAA2gO4j9boayabLnNbZItZ7xNsvUHuk2zpNS6U6ClT7QwdMHyUswHFxH/VXP7Y5DPs/uXD1/pL02rcIMg5vL/C66B8kiqSm3UTc0oRq1Iw4xNIHCMRmVE8ropbZeyYun49+yslw/Yctg9Vg51mOdrRkNEYfjvTsvNW1Zqt3tpuoN+TYcsYvRbllU750tqBUwOUjYWYpYzvHv4LdmXuMxrNtxuvBKEgbqG5qL0XXBgdWKX7Dpr9DRZltPuDcboKd5Em9IQnubsKQBg0KaSowifV76JjuW385pFuG7DFFVAceutfKlxVh4AMEmv5ktkbRI4N6/kRg0yZgK5uUG2uYLcUdBgdUFp71hUVCFvF85iPrgrtbGWrnJaMav3x+Bl6Am90P0Fh+W56nuTnjFoU1kvsYeiTEHzrXewNLGmpmatdZ1z0elCO8sQAJhr8OuRsLMAB91MHLAaPr+7tG5Y0CcuDN69u8ohoM4nAR/AKRYhrLnCG93FaWqi7QWx7PzjTYIl6bB7/wGAkaDtXv6zGMCpybbbXJIsnPGSZHF92Si9oBRO4LsTlTOotDtJ36qLJEwFXRICCbOjgRIFpXaH3WAaSlcFY8EKk+4cagcAwioowA58EQsTMON2EQ8jkVsrGaqoFqzSlwcAsDy9qlqoQOKmBmRLZpwCSehsz4L06oaUQBrqf1CpeeF+3YUlCh+WZzyniG+sN5yZxhDUUMVQRWVhBTf8eaZiniQunJexWgMIYGifAXrKwSurpLcHvyf4HRlYmQ7x9nQLZYJHr5W+Hl3Y/X4B6zJqawBvb7d2WJqywRrOPOhpPrb2BhYnrKNqgSd3zpmlXeAAQPrxx4fa0c0NARGcXbbWL2tYSLg9j0WxgSr5JMoCOmYR6BX/f6O76NqtoszcXjQ16/2b3pkNNZ2u3n8AYEBorsl/toaoaTLnNrdJtpzxNsnW9e1G6RWh1gXcAeFIv2rxXDWwTdlNUF9/8qQXvrt7f/nQz9mYHJEJt1H3jq+drwdtiVJgErvYj09PvSk++PBx4Mrzv7Ff/1VkzwDMGcnj4cQMqYoFVEg64QgQgYVGPVeDGrrCZHfTYTgidfXZUPVVEwOiB6Q4t5ps+O7oawZOKBXxkxZPx2p/RXhcBvsI49wkMr+KyhQeqlv8ocrT8s40Ga4ohD7WHfU1xTCVgcVEWj0dk4hq9d2QFM1LVJHsqQ5tM0RBlg3khtkyepq+RQ5UC0mLcCOsaVoSOaidgcXHCduqQ7mgNy9IrqGtL03tikN5G9DXj1Dme0C7S0V2ngi0dT9Kwc30jVTU0dNpfUX+onTj1MPQQ6IKfUaYbrWyoUv2A3UztCDOJofrMWr83XBt6+KEgdfBbxxU1ybZYl0uBCjJNw0sbXhndsUsSJywa1MzqmIEjIDJkc1SLyDapAH0m68uzbt0emsVfy5RpOdTx71qBRh8LgXgi8wH24Qj8KMeC4u1mlQS3KZBf34F0Dwg/YOqfy0xgL9S1erEd7E40zMi8ZhuUB2krsCC3B2cdTov3xkcfH5xXJ/IH562oSBUtFPzK8A2fTiaA7KlWibRPOkag0TgwzlOZ5ROOTgnopV59sE5zbaGz/e8NOKzJ6eYjGziFF6cm3G10gSP9Nmwyo63vJon25+R/BsuNE9DqH3dAwx/0eojHecvwt8Ihzej/9XtdkvV7cMhm9evF37qmIW9cyR3E1FdzT/jOk9A76lYQ30TJsmNTDnA+BAgojVDa328nwhPOVbSDBw0Hwb9SpSNyXh45mAwUVZ2gZBib9qzKPU6lJL6g0rqDaxdDc3Gu+ModjQSoRsvhrsBUfEXTOk02N10oc5KQX40xdHuW2k6fmMyRX1CtED5ZGPmCwD+gJvuW85d6UZ1GAzOA5tvMoaoQIgCHDCyt2kmhOor3mzjgQNiw/s5dVM3f/3sS4vyUNBPkyQKYnSAAgDxBkUVuq0SA7awZcCEeuPlszGlIXPvTqxoPHFjKY0PfiUj2+z+vI1rG4NBzOatCeva2lYJ/pTaIDdVh8XLtLHujtsrMUIgSxrogWJ+DdAynXR+IeiSJcIUWauiY3U24tQ0RqGDkZb+faZfckAfeR39LHsAQJDir3CAVCZiQIqTMyqV3/+1ZUax9KWT5i8w1KshNjF34hC5KORyYpQwkjPrwPjVYWMRKXflolxVKECNQlzVRbldEEDNgKaQQtf0GjRF51vTR6QnkZjfIthVUdZq8W4RlJ3Jjm2ZDdnFXluz0OFYaBQEPKQoIiOCVa1Hr6rxyFUNYdSq6lsFgxqlnt673cBoBYTf7hh0HpGBUE418tzBJrEQwCol+l+Av3xneG6vP0XCk2feYhpRH8mr1uOlImUSAxUod8r5FtVs2Cq0t1t0gdLlokqIBvnotnvTbhTewS4o0VCh81jiVFxUjGIfBwrAcfg+0YYcOgP49nFfv+6F9/dkXgdk7M7hZqtBq2Ius2OBVuhC9k4AWim/H+/cQl+5NT2SBjgFfYoXcnNS75ebUyNmMN3QBMshV7G81vqnYBkI1zPFxDgiB3BHbO038m7Do7HwIl07elg7aseR4ZfxNWwGoKKz71elr98JO4DVGZJpWN+tzqgfQH8DBmeVhunpWTMOyv7hm8btalAO20nMQCJAM0RTv3KaFW/foTvJrvyK6MXt+Cp/N2ldu9pPSU+tb3rdqi8l7CsgNT0mAEC6gUFtfUzSUtdRAu7qP7HIVLqxM9WRTBWEBeoWmWoUIqmxAEjWhrWo10ZtYa450VzUsNLpPCJ4KSk1uWsPAEh6XvvaWUif+tEtKI5oegvU0BEHnz8VWKiVKg0B5sQKVhHEauHUMYGNKKkLuzIZYXo8hDPGrBjHG8QSK620emxDvr2K1P8QAMSFWU+kb5akXnnu5gBmR6tcEZPGde9RPZ998104ssTdGfSNzKwWTFtnbwJGrSD2AIb2iO0ulzvQp64OGnhSL6Fxwu+uUjw3w2j9XTx0A2h80fEIQFXdq7Cino0Ub77Uhk5zdr+Lm24ANfK6jdlWXVE/9od17PwPM3X8auN1v7uR0qSa+jRM7CvBrRDDKIXXqELNBACooNrSwz0ymJeSWpaAMEqaP9tFeUqDOlSuSAJRWNG2XYvFdm2pjSjw5959J1sdrs4T5B0ttgYQAKRR1v4PjhAxbY6hLBP3J/gkFs0VpRgW2hMFDClYi0qSwloNXp/R7iMh10/X5jv7wX8twk+lN3iQbUc4SgOY60rSZFcDHOghP4TMxRIGV4K6v+Eg8I0CDAng7BxJ53o2+wSsqAIaAHuknDEgu+cDAHCJTNoKWOQp4KQ4n6NnAohiw5KfCz5BKJ9dL71XqEuXkRxsz2meCez8bJE1nXQkd9J4QcG6ofd/2agQZFyK82Qe0wLhwIJZ7yHZzJTvl53dKeZy4indaqwFFNRsZIlcJB9YkAEnvB3qwxLVLyF6nO9u+kNLsH7X0vXwb5quOXgYPfNCNozDMUPD6HjXnUwjvlQn+n2dtmcvyfI4SfT0ojpKcJdyL6/Zr1ZW96ubfhJg/Sa8amF4iVO7TACAFDA9On08gLr0nwwydTB2JlTI1OOQQMBQMCze4UhqgUqPKACgapCCIqJJzqLyBpbsevGYYsv/5pkfkKwpH4BXzuJqFvu0AQD3uJpHLczZoK6zGz9BdGGzRbNlsCkpbh3YtJZqF6UfuTBnezK4sgdVLXCJFqRJrtsTlarA1SWTdmn6oruGnuVZaVASrmHYvDFoLvAKwnto8Ip67ADSK/dABAAHgdeRvuOQXo/n7rjQro+tXJUKAfnONsf3dgurlW3j/UIr3PC2mSNvYfsfMS0TPNbC3V8Jju0ybxG2ST14Yt5mn+UR88Bbr+UpfQnhoqlh8EqRE/JlaKbXJcb9Ok8+/fDDeX7hcJX/zWQK7eq0VxSsZIYLzxLP7TIBALaA6+Ye54rWpI4SUmKAUW4bZaIzeiZVCcy5SiGlIddS4LZGEg1YxSJ8DdSFsxAAAJGBIuKAX2FZmZtyv8QLjiv17E5tAGD6kelaVVFY5uLcnc9nKroimtGBFhxxtsQ4sdAml5qam/GXIM6Uc71OJqNyxVkzgWN+GOFs6a65gLPtI5wb5heOwrsAGJ0eW5o0cQ9EALBucGak71aks/bb3RFzmuIq2dKDlXarPHy7qJmkm+8XDOjgduZvfAs1djIDLdSRZY+00H0KYqZANz1ik7CcntHkisH2mQ4fKXPRcbaNF81Q8W/MchtADENzpLeXh/SD8dGbMjdHf2kN3pCt+nHZar7bAN6wreIuIiHC32tLjzLJt+XSoN+ord7hzTq1e/NjdfcmpNbL8BgKeyC+mAkA4AMMU2Hqo9lTDHinAaUefhWR23/WZ+KIG3SIJyyJRUSzNl69aXj8dm2pI4gwvFktomcTJdphVhsAqInY4thKoHDJFsFobal62pQgzmS8Qmn323SBYnbtjRSDY2mL/bk3YnA1RFjj/KXC/phiin+vvLUzJ/+E9QfkR/p5/jtYlv4x8roltUIkgSRdgUwycKTZSngG5bRTTRS6Wx7xg089K8fgXqg8QRWJwbPWxlgB85BBKUVqxU/IQUMLBumTr3pfpd3Nup5vkQA9qvGel4Mh/81gGR7ex4Eowt/BCWEvJZqZe2/1d/ACNtGe/B/wQ0LhYwzYH3n0SzkNAFBN+VnTZTy1ksGW+tfjktvatu2x0pqlXfovvU+/pgU79M5cN7ArV3mchhPXULhqIT8d2RbvwAcAsLVL5hjhikfgsTWVHf+efpoZ3oqFyM/3fDmLvSwAwGK/pHZRuXR6LtFZjtQeSWbnSjvMfDpdUjw9WxCP70wHLxvsS7pSb6uF7Tqnt1SpF9emdOnSW52cbvguGDCeNP5VfuOaH+mm5NvkrpzqXRvA5AcSgYW2HTxmxGoWXvCtj+thxG8kn/tcnzAuUpvpKcKbqWsCQLUO2HPn2fECulIFulAw7CoY0sLMtaMi3NoV2J+FAABIWlAR6Vi1Refsbf2LRPaBEXyZXqNvDwDo2yrdpI6UMAXtg1XtHrAgZkvJxMEFsR2FGJf1kSYnFhNKETeUL7Ek98pe2HBLlVg+LkCsVbi0WQdduyK0OY4P7rrHiEWuMmmT6E6vucqyJfnDFgav6jKEjwGmmMHwzsLehrcL4WVVepXG/oth101kq8laG1Pmn9HwL7eID/iJt+FdpRsCJ3MRSCGLYwTftyAYXeJYMovPOwTpM5c3Vz52oQ9rWon4MpD6jMLjtBa9PjiPlACuoqpPOdmuctLeYZUQzWXCu2bpf8KtbxcF0Fj9nKotP4StI05J6xdnTb59vQSE0SLtwoJcf6exiImkinMU5jTtvqO8lOREnixPpqnB24sMlT8XmfilkbSS5/4V2GxXxeGRAOzn+G00N3WED5j5uKm9/ODzId2PI5f1kA4HYQzTN/p7Cy9slVeug9QUxoAsXjqYuaOdfZmb/4ezVZuLm+BGMztdnif1//buBlkSTUApAUIJi58ImI1w9X6S/2oH2NoO7r231I3Em7ziZeRBC/DvPwWxErVgjaE6Vxi7dpHJKSE/0CVOyznBR6pdIzVoQNDoyUUu0JDEpH7uAEs8Xo5EjgW87BkudGY/AkCDK9QKmqA551/Rszyx+T6rU6IPGikB3t2zyUeSqChr1HeCHJtTo8oMYYiya8UB6bSuIXjt7UE0ErzqDARu/oduQ8S6BNvO+1DygWYrvqJM7pAg/+0BinC+hQ8vkCH1nEF/aDJHaCp0jYk4ly0BkPRKuw9JQBTN4fBp/ja+fiYDY+838vfD87EkDmtD+57qlf7QvnJgLKlYOS4C5iZiGJG/xDv+IzpE2l3aKup5e1MNmdBSCtOQ4Cs4fvPyebIv3fWU7LRsEsVtOnQjldhG/S9li0wpVxqEVn5sSKO3DLwngEBrzP3ienczW0/xcFE257+iZH3Nwa/dtdLt99w2n3x7BCKuTmZ76VodGmFbs9XIHVEr7ka64qvHSE2V4TKQl5h81pE8xWQv3mLyiHmMyU79oMj3yUYfPDmY7fCzr5m2TXFHHYQTiACfhp7WVvfI1Uz25m4mB6XLJ0dyO2MhyM79TO6JC/rH79C6/fNFk7vhjyaH8EmTPaORcfNNk8fPP01eIXzU5DB+anJnfJVXH6xlIJ7Pcg2XTibHz3f1GcIdlXlPI7Obpx7llECO3FwTUkdRWjP8z0pj9cxRxdKYhlroh+GECgyqxXT9uRjb8HTJemJViqv3Ar/tf3QNxXA0UnLcrutN2Gk0JRfaE9QmgtOKmB7IiUITPSQOpQRI9eoalVTlt1kmDRpNl5JV4zfWHJHMUSSuZ+CF3zLZsWNfhKfC2C4za3sgpvc7lOH48j3yNyupBmeT7J1hrhrO7Ndrd2nzrROCle2epao4u1P9O0IAoNUD85YdmwRuAQnqFhlkJna3vBDONpadMy9kW/xhYF5KZ3WJTXvrtTytiiHc5jhOjWkThnx7XqZDKflQ30l732Z6j2sYwku9TbByq9gUqSfKCYSpdFDCoNl+FABACyAlxxDdp/FGkMBq/kdlmGlxGiuvXP1oo/yauQvKwO2pWzdzAyGSeyJgm0WQ3Zi7sxAAAMnVw4nc9YVLTlTtv0gkukeDUvr2AAD0rMtStaSwF+3DYmWHYMGNJJPd5mR1CTHZFW5QwY0EzdpyVwS3fWWXsqdcEWaLosZjT3WRDhfmdcrmruTYRXhioW5J2W1iQTMgddsmp09ZXa6FeUkGjMcrda8OngQAzSlMo3DQbgBoQVBTJXztJM5drqa2mKn3txvfsG2zsLnKrG9oNVWgnxAAYAKMq5XrYtzbwpTdzM6VEFBnYw9CdAoC1xAj+sR4zVkDzTTHWmO8UT/3W7R/HM/w0zXkboSAx6BDgNhRj0kTT1jzL/g9YWNnvGbQKQEEuR+Z+bHqECCgILf5MLEyKa+NJZtD9yHWqyqYIPc3X21yc071Zgtqv5BwO0sN4cmIEoiZhfNRAIB5NiuBd9xDLIn16iihLvqvuWTalfdMh3n/G7SnDHQi0/VoJN3MS5Tgmj5RAMBNSNsIiHR9UG9xJLGvgelV9+0BAH1T3ezVkRJyrX2wrBM4FsTklExcuyC2rCPG9SaGnmzY9W2z6UIsUlzZu0dbKlViacWfqG3XUmn1ZfHUWOCBfm/M+/PNuQ0/8o51eDMHyErJkIlJXCISF3hZTXbTwO30lwAAd0WWbriGdIKKNRyEafC/0RHyjlh75JF16og1+i7ZOussN0va8bpZ8CteuXJCGG3PBwAwN2TbSMiy6ECgPVYDKRjw+iALAAAXIKIUKJF9EDGRTPKm7Fsasmxyw2IZwlFw41pvFelWfoZMEF0j3QyPgbMYGlBOGFudfDRn9Ql/5T3wo1PVnw53U15NwDGBtl1Fb+5jIZdrIMwVY/mCTfWjAAAbceW4uop4wAAngDPeM08DzioDDwFPqSRPgD1tt13luL5JWwo9mijKqBQjWulMZOYXcEOvD8MDAJxeUIr6UQqSRbep1P8bJI+lWIMryqvaNIQ0N+Kq03ZvqVRJ29ABuuzglm4NRu8XhXXtLsjrpBqOKan2eOLUo1z69A1RyvExb40Ujd/lMe/XdDArGvnE3xYIgR0vtq37kAvhyL6wVJlBJEaIGWJgeTwLgJD44EkAgHVjkOVBuwEAV4awiPCx1MuXuCsspd+OZRdL7hqqMCgIZg4SAgCYLMS2BI7ChjJqUVe3jsbIaonExbQNEheHMKH01dhY5CN/OOaf4B6B8O3Hvg84mk/XTmsl8id677VKtLfDo6EDl5/aEhMJblXa2NsdqwiVsIq5Ngwq96MAACqTqY9hukACh2KAl0UKJ/NmxdHXpZhWs/wKu60MjgSumiOd52L2LLXLI9K99c+zEAAAMbYmSkzC6UzkYjhzvdoAAK8LEKQVFRWrH81BGo7b1JYcIqTJSbGuiwgk1KyW0oHyL6S7dq/u7gVbqZKr4lDcLQm2ymKupmCT5nKVuZouy//m2kCCM4Jrya5AiXAFbBQDEUnAQxlkxKzVexIAKNIQl4N2AwDdi6F4ri9JjeGUkueOGUhVrVUE1jsotuGwdhMCAJfLnNQqcWmBKLc0ykSJxGDaFonBIWwoXI3BJSbT7Nufg4G3knuBVNmRn5afjhITkU5VbOGZLFSB0sgmKbzxniq5kgIA6FCr4KMewfRSqm4J6BEkqNbzZ1eondLggNorkU4Yai4nCgCwnpQzSJBEevLHjZadTiywavEAQBHSCZedFr7WlrA+c5+4fVsoT3zrQdOirdOY12gX3nUXIuTUpe5mOml30lHPMipyz0vXKPV5cLqDcFNvC1IXbRjIU/SIUK6CEgDYtDu1uwGgDijuc/ZIGC03cRef8Q4KFEyDNsfjoptLPu792pz3v8IrV7ugf9ynkEQkOAQIAshtxkfo4fWW4seb6Jh8fJQDAHJf39HcAHZaBepPhwNu794wF8NFD5RLAQAEjFRvmgoBB7aw1XgGLQdEGjSUDZJKUQcDJmzbtJRt1xYpiwQinUgw1XgAIAeoAPKCYM6A5uMCI9waHP4G7Rz7C1dpH6HbYgapcXS1oq3oy/sDObzz1UvxZ83yyOIjlLoJyNJVZOnOLJxjAgCcALVjwFRaSA0HYXn8b6cGQrIgc96Z6QFy5SqHC2vOGgpTceXjShT8eHfK//Gu789Dyf8nsbIP0FWbHyvsfmqqTmmyNRS0bHrySgKvyltzJ/CYwywAAMsFzoC57OVW1pLE1bjMy2pXb8HOCbGqykAQGu7+RY2qY43YpFV/Hn15uJx8VOPBdYSqiUxLtCBNctWeYPJRP5UfCefyM0RimvDpSAmdNPwTfIc878g4ZfcY4SJ3q+q+MP5c3jzXb0qYNwDvZuGsFADAK2TqPeD6tgBr9fOyolL32Srir3ibG2yIlxxpD0jhZalhDwMaMscL23RXnYJT5syJcj3rrpzquX+RSOE6rjAj9PbEAwCiU0mV3Ij6MfKMwqFRoml6jfUiQyXF5hWrumS4/2ysohmw1WwuP0Iwsnzi7fRzA2esERcIQVXrLgeg6rJ+T0/tTCzJxpswT0P2jw/iRcpKILL39yq6Dpj056aHVcQQRdty88CXlOG/ibjDIDyihp6mPMm34g9nYlFRnaZZzYn83gux3jaEsf/UfXG59P6murjsQfWbnyKCkOr1qOWOwmdvkIKkp7dCb2ew7R0eiKuhPjhpgK0ylydotP8AzsGnIQMMqawIcYk+EiCorcdnksmTPmTqf0Lnhs6KDGj0VD0kR/SgvTOglg0EvhhnadLghjwvf4HSPkDdTAhnWZISUEATbEfjhf0gcAGCscK8mO3Ey/L08mk08Dv3EHTdGM4eriSqsnrPO4f6C1L2Hf+zLk0X/uB9ksObYczYM4UVclxuJw4GkpCiuBhzxCLYOb2PtWUUfPI+lkTueMEVYDEOQQwPdHkH0/OeJEpADDbUIWkXuN3Zzse5O7AnjYKpXkBUYiF0uIReeUIclowfuJZe9HMMzJfL7LJBO9d1LoY0IUUxSOlCPCGcuD83nbg/Eyfu6W9j6uu56cS9yuVlIEH8Dk9vSQZIAVPgnWu85OYzfdzE/25A9S9fdPGLoAEqCRTq0xklCYQVx6SEwrngxH1keTEbsvcxyfEkPcrIwVR52gRTg8z7sAy/hD2ZmPUqdIWwvwrJSgKUm4PQaZOl15GYpw9JgWkgrAs+dXftGysS1fJp4AnO0XoOArq8Azo+31MsgYDotMYZCWNVuKj6Osq6zBKIoyAdTIk6HnrhoVCjoulJh/Kxu8KhqLIyC19yt5S1S0IAoMwVNxNuVYMcrqLKZN+v1IczlwmKIJ+mkB2gQb5h8SHQgKZr1w5XO+vHyft0dyYEeRWg9rYT8K8sgI0jVfJ7mrqugcndx9Xs99TKziKx/9pc6/dX+Mrd7F75kfze2akEyA28RomRuaiA1DVrpcZOADH/gm77BZzmZEJwX7gbKWqhy2kmoULf8axa6/NI8ypfpoeiE7XcUpQrOVnd1CrwDKkzNvHggZl67zAKAKA+xioKxKp0Zslcpv5z3R0wtiZ36z1LKf8UINXKIBUgRZWUWmJ0/y4AgKFwe5po6kY+2Fwc2pWoffwDvy013BEPAFiSieI/1lowO7cKF9G0FhTVGluy5Ot2Q0qM6by3CmqvuZOVByxcCNVSdaGnbshZCAU4moheAscOCNQAcKIbVhcmOVXUL58/uDBGWbjc2LY6Dd7uYTIBQH2G1PRwKsYYtagIxNnZ7jfAhSuzFfcGhdLCaLv3dm2+i0hcnFmdjM3ToCLDG0xarbLVxqQzCkJqkAXr/mTrkppdv1MyDbHNk1cu715HE2Ji+YkuMDEjq2bA9loN4ae7GNQ7m2ejAACi2Dyd5jUuaaYBuMJx2za5ve6z1Fr9Fae4QYo4xZJSZEHdIV4AIIgCS7x9WCHREoVrUDSbOKEtRvcAgF1alp+UusWPn1TjzjyDM/nE3lgEM/FoEVNK7aCkyXvu6TE2yMf+7T2pLLqyKcK1qDmfOIKAkqAJUSyMtG09k0pS0cgANbtt0M7VygSADYRMqQ4tJQjS6DIKwF3sRTJxFTbQa8ZhV6ex676NVp6QQtwbz/4AQgxxO1LnPzm8P2U6Nr3cNEbhhQzeAcRr2rcO2y20GDYwuRQAYICW6qZhCbgLzW4/W5cFlMcIDTSggyQNqBwvAGBgyqJd0MnE4Za+6B4A0I1K9ZNiyR/R9jInQfjic3MrFpDr6SkrcAL3gWb/xtWgnv9d6/z2fEb+f6yTn+gXeOTgf1X3wX9DfbPbG10dku2qOg2FSilDz2ITZtgahSZ0UEnyb/dYZZZasyMM/WzCtCoF4+9VznPHc3zPq8ZEmuL+S9bP/DrQ55tUcgAAGKULW0orowMc/N81rD7bdKUFABijbgqX61LAYChpwJl3dB1jcSUmpsbiWiWRmkVXsTcKyvhn6rZCQer8HjiK2oc5fsU5BL+j5Xj1oT4PI4R3CC1Zd62kAABV3GwVN/RhiMKgC8Xh3y761VKN5Jnry3hDwcJgNEiWPcdPOhjVvQDCFFHfBQB26BZXFB3H0hKhZxMJWrgWDwBwoU75w4KgaZMLYSZjAcKWUiKkm74jyKWbCSRQqyfoas9CLXg0sb0BSAUENAxQsTtj4/pl+oMLY9QKHIxt0xHI68NkAgB9C9Hc4ZSTxdCKIuBMq8ikAS6wVqvIav5EW6ipnYQAwFSVX29h7To4ZqMbWtza5K+6nmm4+N6tL7xuZ8O79e35SWhAiA35yVQF0r0xP09hIRdAYJGHZcVViA/FKGleqhgHKurvb+10ILz8jBp0jKMAABqKCtSzk1O5SkA3T1MVk2eu/Out5oTBaDUnfG7LGbRO2KJmApDeXQAA29AUqImmWQZazqUauxLdE9z/tyXFHfEAgFcyLe5idcswn+kFxThN72o3SlZWiJ1u2C7ZhppTUmGB2Wlft3MPWq44hfZ/m/GgtyQUi3mhpy9VQnGvozcmCqcJCNRc4HwirHbNCVdFLW6T8Fe3wSjcemRbPYNRlQ6TCQBCN6R2D6fiNkbtUwTibbWXG+DCodWKO0vkFDFRTyEAwKs05UywLs4mTdPNqEnT5tkiaXo5hAz9iT1T5mOY4T+vB5zeS7ExNjRXe85oE337jYJQuHLItBpFUgAAjStw+NGqffRSKpcEvBUN6su7kR1V3qwG5qourszzmXIyVSzhszsm+LViTFQ9FV4AYIBqhUV1QVsnnrUtcVLdN1pOJh4AGA2Sxc8uoFAGYVhzCpVMg3xcXBtZDwuqlEJDs+yKRpKAW9/I0Z90hwTOMhJadu00+GG0uO2JqqMhCaAB5YdLiLazqVCS0Vd1YyS3I90ZmTIBoDRIYNTRwkoOruraECj2mJzxHNbEX4B4x1ggwYvSowvx/WOBPqr1AUQb4njqntcsSf3RHmPyJVTqizTE6w8LehgxnCG+9foYuRQAYG0QfjS3A72UjUrAXWgugUagxIEBCKcBOscLAASosKgy9HmiPtOJxSFm4wGAACqAsCCYM6D5uMCIqQbHf+87EZ9Yq//XWY3no4m/yBEdTWWHN9S7N+6Dz+o+vL7LXvYhHsTVZVk8ROjBWRMAwEDEbVCLEnBB4rXey56KtW3gyJcosJkRirK32+Q2lE2TbpdqEVy5UzAbqlq+vV3z13JRXxWTnAO7e6rlGJ2jMaVZdnAgxyILDW8Z00ho9vVHZ7uPYIgAyCpcDTkV1cvIi5t0eUGPidQmsDvKOwL1J6v9Bb6q7bUw9PD1SwI4s1P79rw6HK1ZMSuamwwjMQBmMemM0T19V/HUjhwAoIQkqwuSX9+J15bV1nAXnTU3BbOP4fX2swAAKkIaF3fRzvbLy5G0WMnUeZvmvRhtSiHW7fLRT6Odh+aPwY0/37BB91Nj1wXK6AiiE5OiDrtVgjbTSkujHcocieMy5L3rUq/4C1pAX+qVJ5NWv/1/vPVTHnMpttXDQAT5wp+0Y5x93S8Ni3HUmlUqsdVtCIevdrXqiyIlxJpIQLPOgtFCQuhFFFAdM0+9iNASVGlUmTtq7yXnkDwFezztvE6uhKcUSytN4iqBbMKmPHIkrEH72tsfW0qlJXtyJVzB2KjYMt34h6Ni4uT2aD7kaq8iK5VNTvZXrl29A1F9n6S/HawjUep+FABA8gG8UOkDHDKxwgHFNe6BtzHMt0OqcQHGajrd2kVPcuUL6sdftNUXsDMTeX2Y5FbDAn2NPUfyIJv05pZo7QKspCd5O9vssXaQMPtlyUSthq/Nppcj3E6Xf5FHDhnWWNdSBUe3tWHkUyuRNMLVOiVlphOumQF8dhRmqmh0eBcAMAb3zOVHnD1WtDX91pOx8CWat71RMSa6Jx4AsLyzfKUA5j/hBjqRwu5PRq1Zj2BTKH4y6uINEgGF5idju11H38wZZ+SbmT2EIsULJpAhF6wKvISpQQGVWJ2JUxjJpwfiwkjTTjgp2X8qqEba1osZYqQb33b2SN3pKRMABgQTCuoeSTPNCK4WNMPmt8bRspXdcYxP2mY/IQDgcrkbQRZb4jwFDXZlZhxoWNHZ44WGhIKYFLTKjJntiJJRDuLsEmS5gzyPwzRAi1/LPbltKm9+SZCsy/wmK16dn1m5QXV5KvUqhbWkWiqpkgIASBzI22V6sFeS+9y0BDR5Fhghs6bmAlZiEABzvADAAgqJ+ihDPbC3Je4nXiys6B4A0Ahv95Sigp+hoG9hec0V8NJq4I33iO49EPKdYHx30tP3wPYnSlYY4bxhF7sPuGQ0kY0BdkYRuDKG9lG7is21oPYUo+tAXXu33UVy7CkTANwCXSuoZpO61jdoAkolCiWsmc6UOfcvgDghANDbKuqB5eP2L7kWjpdpFsD3AIvssQe2iDCYNBkY6AQmvMYj3PNi3AXxyxHzinTS/Tmjvivb3LoPByiWGG6AuRQAgMAI9YZwIpCAUnMLTmIQQHK8AEDT7H7R3IGTTlwOdTYeABDYAshgMadA8vECKt91oBm8wJEC4Obp9rvYXcaeHeA8puYTe+ObpKwg8Kiqs6AE22hBCcbVUJW57TqNFs6UCQDUoAGjlhZWarA1lKdAwe3NxI/J3sZ3pdTVH/LRgn1ZP88iWxluCPfH9ECASFfc5g6ATq4HNC/aTOsvoD7MUa64/6YZZp3HcaXlieECkEsBAABEqhewIhAAU3MDJjHYgHO8AECBExRNzfoGJp04YFXjAQARLPkjWpzXbBr0WghfrIWU7wuIX9M6f3Ysxv93w5+d9fNuNGppeL93NC8fA2y2uw9f2p1zvWnai7zDzsCz2ElZgaLMhxpXTACAWW5ONTdMYzY7cPAmCwKQG3YJo2v3zM8eanSuD1DcpBH4xlQt+Hc37/3JvvCBBs7o+2P0gODfFL4fqpvzs+GnZ8zsWMcab0XfotXQSttUawxXhI1qRbhO1mmqlm4Vdv+kLo7VqG8wap4HTPBJFZymnaSb1kquhVw6p+kufSkX49rWFRvSuO6f28foPcRSPsZSvMeq8k0eG+P2haZG8VQe4wPl56rA9Grxnn70Hphp/Jj5aEolnf7BiYotaxUwqaiREtYcoEs/CgDgKiAcnp7ppt9kZswBrRmP/zhExTXnl2MEUusVVBVgF6S8Lgc7O7MTAAhojra5mmihooKabLU30fGAu3qpd1c8ADBNom3+nFtZshKP25wmSbXGs8Mw+VbSsvcJycJ935CsuMAd8bbywg3xwp+IW+KhJtCBeKTZdCIea0adiWe827rw0rkdZQJAFalODrWHV+rUOdhL2j1bKH5Sym5pzHI/IQBgCTh4iEvfArOSmS3vUIZptqCztwaaxSqI7YL2wnGyA8/bI+0fphLGpcr5KQBnBHmBh+lqpf5G9z1TIo0vVmCs5ddz/leqZm2m6ZA05MJS7V8WS7tSAAAJCMPTM11PhcyMFKBV65P4yc/CvjBZU3OkmfMFeQfpsroAgMAJiE767PTA2pa4CYcybpmLxAMA+9t3Cxm4rCN7a9vmfOZO46cHtC8+AWfbA1u+A7R3PWeB5Vosf3IiAkuuukgEo7vI27+sECGNJVJlyW2HA6YCuTMibPrkzE7ltDAu14Yv5iT3cWTbXPNao9FPJgCoD2P65NR7vNbM0LIg8O1gUgJwO9NiZTbx7T1QcUIAYE73t1AerjGF3gPpZ8o5Hgs7zNbCCSC0ENvmXNFXL7fsJigfKr2E6CadeYPHqZX3sH9ixHBotpYCAOgASPXQuAjkAZ2aM8CZQR6NqroAgA+ELCLIdKLAycUDANNt+zBwBFCD4c2i9fGxwJLvBpvBA1IILAcEZr+L3GW1tCN4biJ5HLiVfxOYnJgmW68XPtMrdia1zUrGglaz2xNuKWbLBIACi1OL1isIthXOH4JLiEBJjp0el1NhPx/9Guax2oSN5MoEi2bFdQoKRPFAgOhW3OaegF4z9SXg2qRMop2uRLbiPu0Eriy5dR+vFbQYNjC5FABggQ7Um52EBigEXLECDKjUnEAkBhdgVhcAWLCDot57nIFIJxJMNR4AyIERQAV44syBy8ak9cl3gcXgBsH+g6t8E1gZ8JyV6dHR4DWy3Zt4pdto7MhnFgIf/iIjASDFCexk0LKy76zYKVGlIQTmJ86NjxhIlJX8vDUn/KNZjeiugLdXapO0AxHgvrflHb/xtEKY6oCxCpiq3L/P3piFX6bB6nvZ7l9Y1h0QtAyjb6h68NSMFl9Nj1+UGNdoUWpEMOZLhN94NYwJ/UVjGiZoa1FrGij8SQf6OE9vSVcPa1RRuuu1MS7NnGTvWrTci6pz3vtgYO8GBdWh4jh7JajqyoBgVHpvFmHPBMtSgz8LOH98137fIFQBOxPEpnoDADRoxMz9rjsWp4uNZmtQFeTPc7XKPAsAEK1GsqS37ax3f/FB89OADM7c4YDQA8TE8OEASR86eG6HNFddESI1ELBn0clKo0s4CJk12TT2sqfzKRbE5BSODIgRPXNRc5km6HDN3lpz24yOFUaRZyd1o0h943SM+jj7FO7B3SK2AkACHFxUXpkLmh89Nt9eCPr96U94B9AuT3TQvu9l04L867Sy+p6zdWNmCrup6QIAHUgtiHIG6qoHKJWYrnOLhcztAQA88U3kKYUTJVqVqdzm0UJjv3mi6apHM97YHjCzDnNHBu6vgjkY9r41v1uNsoYWmAKwOO7FWkIOYDkdiixwtFsFB05qq+3AmdpqPHA2998+cMs7ywQAF3CGU3WDl+ocNMA0QpVwFmN2zikEANyzZyEf4+SCLVcwzZxFZmtPjNGw6qvONv9KiOzzq87yxiBYCQFBo3myNPfSdIF6CjkMFBZ5c+hYjO94mjFu50zETgC/0VwB4HZBuRfOr/QPoCDwkVd93Oe2Ob/QuGXQxzqjugCApBJEeceEgd5CbkssGa8tRHQPADhVKewphQ1LOtpZbkV5zNOaD7fF+OETo2S3xYQ+E9CB5xPiwacPFgPa/3vHJaERXlreEpaEnU4US3ciCcjSPSvZyNK9KxnJ0iglt8W7BpgtEwBExylWDQvOpgcDWRJlpoDb+xd0lBAAaPLS9wBzXO8MASwQy8zpg/oeiCDbh4UbQFS0bRZyS5kDlYdDHyfd/Qy9AJ/Yf8HxojCN3AoACQVxUXll9v2VexhlwSKwgE7NBWRisABldQGAAimLDDKdaA5NNh4AADiih2B4E7Q+PjZYyYeA8N7rX7eF8iieXVwSXOGlpXdhSSjpRLF0eyQBWbpzko0s3XOSkSzd5+Q2eddoZcsEANExzaphwVx6MJApUWYVnj0e6tNr8zF6xqiha97eUfdEdgWAxKeIk3MAUfg4Pg8HpXFq62uNEdJvHjmKwCeiKwAkaMYF5e7j3yP9l0ZFIA+o1JwBzAzyaFjVBQB8IGSRQKQTxaFk4wGABiN6ANpvNvmGDFw2Fq0v+WCwGXxAsn/hKo08VoiHc3j6g37bY053U6yOG1yOIezVRh165ANt/n7yT7tUNp0BQhkwyD0HOpgTn/OK+z740vsP1+WRIz7hZZKPS9f8pWhEtbP1uQvQwweqTndX8cUaNs94YNovFnWLWfEkhQTmm1O1vHkstKV19G579917aERktrxnHuv6KxLCgAjC3KCs0NnxewtE2LR16Y34gy7PNVvJ3nr5PI0YRMUy+IRon4TG8omCjLGM9i1lqqs1AQKXtzERwS353Y96f+wH86hx+/61FeZ4gTYbJtWdV6f66ZHQh6wOQCOuN8xMgs874lhTrRAhFkXSahFivqpeZVMsH8OSWp/UO9s9M/gIbSyjrRgz9yjR7wvHykTHEfE/bdtAX6Ec8d6A8snXqWM1ZUOHM2SvUVI0TJOcncazpXxa1KyFBJLhKLN7KSL2/r1U23+O5ggNiGdpKQ1Y5rX5uHwvy3yRvIeKVfS48bSomzpJgwiNuthuerrI6Jc+53PqvvKysDG7d+xN7lc1aQSYimfn5JxNUcHqwCHMsM+lSmmdwtG60ZrEj1hHYRd6aX+4T2Wr2y8Oe+zCbzSUQIbZD0xzkQ747TL5lIQt/CNWAHOyoSFPsQDRo3vU1PUbn6Zee1j8/DOgc2MZ9CcFk5leTXlMhW71smskKRmOpwvoWVzWKCGPc7Yo6wxRin3YBmJru29wpS1A1NVGHlSAnkSVpQVUVMk1CKm8DivnQQLiRLm0dsDcuT8uQDwqx/pUuYVDY0TbEvceoQnTAzKXEaTysVALGVyVf0py3m8ACtRRS76oUlMAOXVzWmgAFfK8ju/ni9wFwnE3Ah0tPtWPFCAbeteNJGaVmumTJK3Mc9LSIYI0z6b1+OTve4jLeB5JJBZfDaavuHGOoE6FNaJ8YtVBPUkZYpBOEMpCeGuUE1k1zA0x+seK5QeN67jr8hdqO0w2mr2DmQk/tmQvQ4lPxPxQZrOChumMBQvQhi1/GT2bhrZyLAZjLVsJV+Inx6+73vgW/FS2Tm6F5PsQNujFCcxuXvcC1CtUHzltP79sodR2wcAse9qqTQGL7CgulAJIT0Qf2b5VBR/qMK49q1MxFqRRkBvkfrk7sqczB49vo0GQbChpcmpAWkfk2gbKctBkcn+5AmpHDa9cSDOE1Zze+N3dB4PV8ivZ2lA2m0Og9n1992NK36e61x/yw608jEhEP6V5x87elwqPDccfbmVa3BUckgfymzgBhyikQsykkFLo4v2s9SgaorLvLPQhWm5EWTq0dn0rnGSYPhf7Xr8g9lKPCpnF5djwu5nUxvgZrZ2PYruTSLQ1ib6e5cdmmwqxpqvLNKHjilb9m71ZsGYXs0bV+sozoZk+h+WHSoj5lasO/LDcU8gMrXg3iHmthykZHTvVAbRTb/B1uuh39dMmpO32ptWPaDtTqwwZmbHd9xzx4ufeqM3fd/8F51OcRuj1tmISb7htgpYwIVUu23IkBOO18EDcI7uLPpfqkDxNwRBHADeSfN/xsEYpDp/qZhc7mBEu7oj65wVnD1eTD+YZIXJPYP91ojNYHui1IPsIMrp1EUqKRdJQxydZ4gKGRWw9uxSlDdztsoXCVpITcc7wdM5WO21gt2K9nLb2Qzz48NCu+wHKWD0N7bwYX2EaxqPt8fXjQetJA4ChT53aY7dQ7/vyzTU0p89oZAdmjXawIclGAttwDCh8V95vzHgJkLYZeWTf72pEAxVLDc13L5gBqQNS/A9XW8zKbZYRK6CJDmBDA4Bq159p0n8uvOvp/EOn6/eYjv/HcsyjYg8Fc3dlD/Q2FC7KT92VDq91+j/2mq9zsE28b/8cCT0goKljy0oOJmPv8tzvWeiIQePRjKu7rxlluWZll+vE8kMBssX9PkvN455LyBzLU1SGNvMhgoG5CENiHVRgxvECDZT+0FfQZM7B+YmJ3iLFix7Wo9EQLwc+3e5MTNSds8k1iHDjSG95B5WsIpXHKCrbU72Gr9A72tdNegXv/DKNG3rcZb0UqWhvTTS3R1Kdb5F/3HHSc7O8DwmMz8rsnFoQJOJa3kJQWzm6rblMKZkfaZULHDs1ee1ydRCnbN9xj3Bd1cG8AVrF5an0xdwipTHgU3EdIQegS99EuACLeZ+dnbQyc+aCXUW0o6yBM5UHlrTHTaBURFvSri0q0+x4PvktGNmIWV1Y943ZWA+Z3q9JXC/mYMSVEp8Wx9FUYU1/4wZpxhmTPNI2IXzY/377bMQk5/0stao0WR4bRV7T52AI92U9zwYe0E1oUAyLayhjS97iVPAxkIh6P0GbVHrbxJyNOznt5mCgQxT/b/be2F8lGBhz2etIoLq5L0gDvgs4Z24LyzVWIBt6G7YPXa8rZq5J8U8x1OxcwWjIIDSYW+hP/wZTvK/77ntHy2oyLgL+1QRwDaI3kLqJJX5tJGkonIZNdF4hIV8NRyY76Xt1GwrDHqeOhC2EZq2/TQH6p+tvir380Y3e/d1j6s03eRw88jg76f938NCubUUxnT7+5RU9T+a3MK+6S/VfYPuAVP8lDRvk77aUYXNGnS14PnhNoWX3Q5a6VaFEMHIPP8weo6Y83Iry+L8goqZPbEV59T8RRA1X/ExUbhya09b30I3uxMQCxUqNi54PZKD/BFSYQ4NHGZrupHAKHPuloCGv5CUlBayZ9xUrX0sufff/Kvfn7z8oT3WAUvAq9F2f3jRJVIDkZG2zfGSrMLxAS0LfuZUuG83I09wYOGOgVQy/4CKnDin/p2T3Bqz7q/PAIHTGbsCrv38GAAQmJXoDa/21ZODmBEw5IKMvHsEgrAPH3Tmmw9/dtb4w0CZ3sIpxotXxoSLkpdgfW9THKBq3V880BJqiTje9RadGObQt8jYX1Zwuei+oeTbkR4bCArm0TZU1gnljU32lsNfYO5oJUA1xr5Tf7y75+1Oydh78GX0k7Ikna6pa6RjVo+sMyKjJ5V3Qxl9gwFSEC3r1FxYwovga6BtDaOLZmQtuoRNstLVwwe10go1SCM8KuOyLb49o5d1JvAkBny1R4HqdwsHrLVqqwBVEwvZE5ckbY/8DHOJmSwb++0plAsBwhOpsApjvBSx/b+WrUzM2UCxPy6on8fzXuqDNk/fwkLZqKHWZxFEFPNWGKBeLvMhNIcLIBQPdJI28uFIU/1TtAPrz6IVefvLusauv6NlgQ1gW/sFZVCCrVXDIYWqg36ypKODhvTYaE4a2Kb6S1dN1CceWDXyL1G3xWdo8/aVH3mYU1ErE00HYpqGKCSjReR1I0wOMWeEJj49fKx7cs8u1nSNKzMvrs7MZ+Xm0EEA3H3+G+srvaJp8Q4ZgU/irgJCQZ9kyNG7OJbaVvatVtnBdLQPYbu+toglIYdkFRitbFukiw4PeS6RU8tqOz9jKPevWHr0GpBklj+sVay4+NaCdeX0MReJXHjkGxqcrmCs+4uFW6R+v4R4bBhcUiOSZK07dhtwjzYCM12+iaeDvUE+i7+NYH+oVbxGxjvZ0EQQC13DoNEMp9EnA6Ot+OTLj2SK/wY6ht7ow10wxAAHZP4/GVCleO1aeQp2eGaKPAsWwP98OtJYKddzMnwlv6QHmCGurYmGASTX/6/n9IPvV4539S1oLmTCWfxoQxBpdVfs0XABlyjoVQnIF/hrvKk9R8V0BvAZdbBBdDVHlYG6anT5ml3X6mBqtp/s1Xk9vNWJPtzdmo3JzRD/riHFWsFmwdujQa2jqn6Zr8p/Gm/6nc+4RApjefShgujkkQDAELfD8G27Z08mBMGVUAvqLcoor1shmeSMapqbGwppIfoUnkeAmeB+fzHW5t+7tKgLupJKYUsNkQrtzBAfbrbV/unI27/zu5yy0QBB6ypZtOtaps0icbbnAX0N4zTVrsdA2kpt7+1MjjPdxRuTZznKwPIHyc8R5feeMt/JYW1I3fcna2UzKgVCrqxbT6NLcrAdr+Zo+yzXuJbc9QgZKw7JMii27mpO6ZEhaC+11HMK51IydlWHuqF1UPK8siYlCP9AiTYL7YLwCJkHpqkGnox1jjWbSVkZ9MKT42oPGr8qhATk4JsKxmmlmgRP7sSXe02lnw5JOMTGol7zxkrz1msmh7aw/cw1qqrXVSxb8bK0dC0usOvwCPF4xn7zpTjlPYwgDRxptCrnJHRuv6J0L5J2BQl7BNzzb4vquocukncf/3PCmlrBXclHMlJjhQX0ZfHoUuCoPvkzelN4wyR56zdCVXBSKp6RZv7wXI/ylJU2G1BL5XIrPv9DFZFriyFhacrwK6y1ZcxafTEggcWRsKOGGCwCvem5qQmLKza22NikXbrlksK4ng/Vtl3oUF+BEQpiRUDAxk82emqqVpoh8piXEW1qyNktLkTyrJpkttITcIDdW0BIjD2iJTAEZ5zVKxv+V45p5q90mqqlwpJKKI6tO8nyyVVRR0aaCiqfi/n19t1Ay8RHpFS6xgWyJUVgom0Kw39I8X5jbt+Hgdnzrm+rQgCzLoUkpgG9mRIErnPpCvrPsKuWeq5OMzeexuvg6SAF5Wf97z+btEtcUX4dx05viufc/8QTpqlYJX9EqvZG/BPXNjSQu4UfUErv07rjm9bqQJv/J+6kPdvznJzBWsVpCEi/OTK1UpzkPSIZyUoMEJCgJXbUjHrpDQEmYsCUn/2ygL4nKLz40LN3yGEUx5M6f2mrdl9oSOC54xVOfm8ZgKSwA1fRJDgMLOTypiGiE+fniW6x6/MYXd0uNv+R58Vl2vifhXTLzlvWD1zw5BVYKXmcv4cJ7ILQO8Hrs3UIJwct/r9tNaNb1XY/R/em8OutDOP2ihldGX0pdFEyD3xRtVBR4SYL10fjM3npkhmldtIo0Sx00m7kJ3t3L1K2I8n4NR6jjiWpl6NoYxXHdb7/d/nI2a2p+hadt5yDGU1KCDuFAfsBNSQR+lBL084xUBHwtfe83yFtqcWYjeu3W9fIt5CeRtv64yRfeT9Kb+RH587WVPVDt/P/5vf+au2Wl5If9XPV/cqm7jzxxfYNBjMrQd1DUkG3kMpRd8apUyrMz4onxe9T21Sys8eDslvkz24SkeFXi+94LgKcIwoHOQYCKXYYNY0l+Db0QCKA9OHIt0c+XSAARemLQBL3R6k+4eD2KAyDDx/1DkXwEimIhg1i98HQ1QO6980TrjD4o/Wr6LvCBfu/71WPfLjJe+Km6Z48JwoV1RVoUvmJqdY3jSXqtFZdopgNClK2xXJ4aK1EzFogq/bCYQ9Q69gOfxiIQ45EHr2pzNa344a62ig97NIf3E0AHYgTwYSbj53JbNZlMJ05RtsZO89TYWeh6m7zRfwjTSuFOwo1YT8xkdpwZkUkAOhOuR48qGp9FiTPccMpbAruOOTMaPyd2sAJBH8KtJHYbxc1mKWfpCU4OkUrFHP65AfBlMGYGFgB+Vig+HVuFgUuyDsXqykp0NcA/LYBuhJHZcVyDgYARyb+RW4HRTDKlXp18/dIaz+saDL4VkjzQK4OpmMM/DgBm1YgkyfLGyFdsG5nM1KuVAbDM/pAx2DJGL1LNJQZeDpI8Ppdx8cMMiYZw1G5/oinis+WjAZPC8MF6OOWTSaiHBls+dV1Tz8VyV7/gX0p5V3ug/UzyaDRLRohXCOeztnqU4N4U1xrnz1WTfCoZ+PKkILPrjL/O+DCAcHYSP346F88bISCSkQ1hb1MS5d7EbTWb5teoAqrGaqWThRih8Vr5ZAT616PV4MSgZytJIFm8nwrJHurm7qGD9YiQEjdGHuFw4YWbiH/hk2cAvRR7CM2Pyl2jdPaZSFdrplvx38Xyv433X9qacVKe+FS3cLhZdiwT8kZr/lHDJmo6/Xdgsnf3HKrv5TrW2DcQ6HjTGDEYF3eBNnp8m72Aqnnay0m1AwMTK+iHlSPsjI3rl/fCe9Sxl5Qab2DXBR92RtgJD03xuUjZS0olZKxWIE7L5BT66raAyhj2qKGkVBvw4sPEiQm4svOHvXlf6PrLXXGPLS3VjrPqjIUnGZFx0QzQGDaB9seA5wlmHvOVf/MJNswt608OnVYaZpr0F4Ksi3nz0J4BwhDsNYe/pGDjD1aHcThZ+FlseR9soD8GECxnHucmg3llyCfJegIt7VJG4ZEW9AnrxcimaDw5SF8JwTfq5eUl8vPzvGrgko/MwXWLZFMG2Nx9+ez52LgvAgYLN0+yWW+6E8afLJwZeBqjSJyJnR0nGxU7YsLJuP4ZxbOLtVmubFZ6DF1yb8Fm/fEXz5+sN6Lx65dEBpE48CbrXzy7eGbc2FiBSTh3dn3rXxyIMX6jFU9mR9zEk9nZyez6ZxeIs5PZESvCRSKcIB6EAnCzUeP7zGt3T15iz0nzBvH65c8oiD9oitc5fwCiYKdckb4GrsvBj84uY0bW/UZDlHa7lvhobX71sm5CLWL+agp+ttXae0RQtPmpJIXHJsfFuK2FIdD5p/7u0aUDs2WjaksB+zXVVDDQF/IPq0Hbmpg5nTKeHmLkD1Z99+eKb15v0/J0ja2nqw+fsgyZPrSB+3XB3lGdokF03+m73NHf1GsO8wmrqJZIXxInIthXeJE3w/on/MDAkPMT1lJ0k/brNPAHvQI9EIAWNBCGxAOZfU5Dl+La065DgfQzuA6uyuKcDpypbVSJn9NicWVFXDns437nXd/2X5KGFgkuf+fEfBqxyL/V75bz0SEGepF9avq49DB7PEj9HFPU2bDnlw/wz2k4dd/c00urFQfMH3cDyenwIbBeHm67NRnBTdaTxIkwJ1cVG7PebKDcd1awObq9UG+UpixzyTFpSiSZUp+FR5BtoM53TtAZgd34m4+wskAgMJB7/sJK2garcqcl0l1IfG95CU4uRWIs9iLjI3NyO5Ivoxr2uWCuSRaSogn8QBTohDy92buTrvVJsUHpX6Js9ih1VcrCTaGWED7tyQuPaZZyZTYeh0HFMio0gwOT47VLDP6MzXlnozyq3G59xd8cgCrtFldd9iygYFf1sHBh5mlDi654BAAsVLjHdwXIu+McGd4ph3pTrb9xvD3eh99jXWEXoz7sv29H5F72PLZL+3B/c0w6xBcwrwXXu/Rpp3yDMwUqwmm9GuIlGSStiPpe++p4o2DMtB2m3EyVm1Cb7dkpSIXzgtcSS+4o5P7+GQAwitX0jtJeJWQlrZJRaw8bc45A3w5/LdWrE5tOPqvD/hkWNrqFpI4ZumbWK81mj8n6kAblsZdWZcstCe9S9ijrMRWgWyXsjATHd3KS8m+5U3xQRckv8q1DipyNnOmat39jk6K6QnxHS7BXA5PhwSQ8IxjEFQJTSVw8ER68UVXMAGTQVxarV3xWNABAJ8qpybbmLBwUeaFoMh5lYNJmt4ILVoR++2VcCVLdhujmZNciNIoJTolBU7yb4zH6euMaq2/jDD57w9VnZK7rPCff41BnXAlNo+61oMbo2oX8vXh+c6jE+q2Kg2MK1q8XbvmrNLkyLsV1YS9/1cboWa5aI1CwKIYr9P0YboSPPLaxdMn18SpJPNeZmOL7XEi1d0F/8p9OLh8Ef3oIxpL0TYqugwVmLSU8nVaTfhnr/v6rzU+FKpsnAt7MX+fUkWkgdVn5LAsMLuXbi7fCeE0mCrGL7AvsUjUuedFettqwUN7LsS1/FVNSeYkq3ccwT0XL4YyHwqtFM2+q7ZThtnAQPHFeDtz4/spdD69urWVD30lMB2hHDk6wKOfYUbZUpCzP+FfD0zpHx1DSXqlQBVAnXzlRZcIdi1BOhinJr3LJ4+zTlrm0RVFW7S4U4jsqQ6MN9q5r3It8JjD852BQjYDfwP0JQXcLfx6zDizfNQb8WWLfnaTJkdp2ITGM7THCayCKL/UQnMy1SfEOItpoPC3SNlu8Xn5fhHtPOFnkWKJamqwqWU6rh6SYhzq4DSuMg63q3C3MiykHIO0ibFjRgTeQ/R4maIuZO7wPh5ZlukSxGeLojCvm/o0d7bnKXfRANjVprJbgdaPVTqFM4O8tucwdWueVn/rWtc2NBQUpYZ2/y50XlhtADr3OtOyG5KFVatoPiOlMmY5DtLIpN5enZEgrRnugB1albiFLYvuu5ERxog9B7nwVUxQQgMp4oR9C6Jx61A3DP5lLLyVujYn3kYGGRLKhMs89K6qCLATx32hRSxfHTB6Dc+PieJe34GxcnLrzPJyDi0tP7oabwcWFyE1xc5h3PkVfgncpzs8fubsWoh/mEgFMa2V106ea8uhOGCPM+yj8Lk7cewxbsrgQV2EDvQut90litW/gx679bklBfIckdXdKSg7d7O817E656D5fLoEC6b7ZwiFKKPECeEEpSljkPPZIRfeZBXSVmvLt7gINAFCtcARfZlJcrzcGR+WoMnAzU+qNs0u0zdubAe1OtWFv6XB2r9rttKZByV3RJbvl9BQkVLIg4voH1aWQyWMoGZfCXd5C6XApdud5lAuXck/uRk3hUiZyU2qAp8PybvGXO1e9+Wu7h5Wrt7C+PZxVntgGx2DkBJ5PYRVvKRT3MyBqxg0WFWbMTq0rrtxLOEPXN+Ozfu0J8FncT/Bl8mfxwxOfAA9kULehrfjBqPxjuq4ttrdW7gtXxv6oPJVsb1GsGsiQd61xtTuW9mZ18xAeruGvf8/gds383xJ1Y8+/AoDVDk31Dfe+oNKwIFVZgUCwfRPMYQMo7DohAIC3QNCpeIgxQARY+Kd2QJxT3qHaZoN93brYOTY4dAv5QFCsKehmOaCuKP9rzoAak7y+faSvaXyd87VH7mAMXxTvGl8tq4RGHeiKO+PHIA0KFdGaXgoRCPqCS45hCF5sE3aFTHl9LYPDUd6ZzMdpsNzuc/vbIG3Hrj2OU7y+3vIDTHm52ewjKO9wV20AwNyYSbReGfwEMLJg3ogNgS/+EJijaAVyKm/PEn1uJ/dmBfUPhmvlLxa+d1dz13QVDXOM6YUKZuelH7HiOSGke50ij/JwN7xXJ4QLbiOlCttJuhPEhRKxi9cnT7J4AbqmZ1T4BBGrEojjtQVw0b1gEQiJv+46D5nJ99W64OYSQnyH8tXX2ZrL372Gt/q73qroDzAePRuzHq1kq5jeCUu8HX0B2VLio0nTNZdWdxPFz/AnPfG5tuS6G/SNXQg8hSPwCoLsoQZxQdDO0IJsIOhuyENuMZiy2F0Jg0FJ7cEQq/l+E0C2vz0Y9ybi6VwM/vKHwNX6r70RS7fC7fuvIzkUmjdZR+K50SPxtIrenOKa+hpwx1Jrnxz8kE33Z4ESA781TA7dbS8Gyfn1v+MypUAuADs7udmS2g/LfNStN5LAw2sIGEmf5btBzxViIDe43T310IBavX6njvy9hC0e7ggA0lmwvXqv12BnLkd9gtanqO/x3Sm2hxBXs6jtDTBfA3xnNp/1UjPiaSbpV4+8nzGF9MBS+RjUYGy8oMc/o5NNEwdS+eW94K6D9WKfvYy35c4lvA9t6Na1quTyr1L5lByJ0FK+qzyfOFC+QrsKocIJupS8N0q+4xV/mB8frV3cnaIEEUCd4rQphO4g7e6ShfpKHhXvXhV2VgQi0k52uJkJJ+SudwQAU+o6tb/XOxi0+7c40gGeK33zGXH0eZXevLUzsMST7EhPdsh6fQNcD+Aox2V4nuOFPXaeU+8BNAAgJ3GUCy4IzmU1DQju3uLGPH91HkwnPBU+kyzBgPYeC2RzEk16k+4U76YuVVNBRDSZmdLSU5frSXDETvLRWEg7GmgTv8HG7ffKUVak16E/nNnGmGkaH3r9nfiDsTPmkrMVbFAEm1lKA0Y7KTNM+DDfWAKthkXnw2ORXZ6cv2HAcwdwUsx5OQNOfEjJmUptd8uPwlpjOrtnf542g40ssVqR2vZI4tteNovnWNwW8XR33hYp6+4T5vjgrzO1QhMS17kzAietQq4CLiAyN2Cy1j9cWFXLtzb5S3B4KJH9Q6wa/LW2/VhAGmUHfnqAf36mo7Jlk0wkSkT2trSovmB+AgoVq++0kZgny3zqBi1TgqwchU0uRZIkAI+6JoVrrR7sj8qoSUp0KYnlFRIEJTPNnbvL+RrVYiX2d7V9zzLwA6rt73qHfhaQn23zdsYtyZrQX7/N/JfNH3H3ZyDjRtV0Rv8+FcC9aY9bEaTrb+jP5x/kpb6sAIqdH2zymT8CvP5+a2CHOcm5L1avKiU9cmsNKPMbWBaGf7Cr2Lg4icb1RMUPW7DVorAlmq8lWzQM/zGobpczLq/lSBQ0VIjaDA+qUTUXiJvmFBLVTmSrgukMlKnQ4bm6DlI5B8EAALVRMhMoDldKk7FAdaFWxz9sMCSH2ymvKduD/XmtgfZCD3tbZHtL70470PRO8DLMXuB0q5A9gjMQmfOBWxKXOwPbGfJcNXzLhQLGQh2jSepiEGvQ3HH9Gp3/wpfunBwHt1FT3Ze/UIna4xQsiTjGxEyzaTV3oWJveMgVIS06JHStqVZ5C0Xm4YHvzPF8RhuaPjzoR1s8UafFRAPmgTiGWOpUeSfa1rDdlWfjCBkPf7hdCLsz1BMlpmFw6Drh5Hps5O5VQfFSNZHs7KQ1ZFckcq0nn8qZNk9P8c3vTYaeIvM6Ci9dIlrXL24728ZviWTv6oaBd3P+j1tqAkgVRrjus1FeZDImMO+hqqe/4+LDlvbmPFR8UP8oUBSN8HSHKop1zXSoSlmP8xyAXt8TItoujWu2pDRUpXRnHATWY5MDtsf7dzlg7THqlJqVmiY7HotJhVAKvJDQDXog+5MGdjsgYU0DJww2bA5wo8GFPQRuM+Sx1+C4wL4Kth9BXt/RtnrPwsLr+Chs9PT0LPr3UKI+C6rZyvtax0f379leTAT1Kn9D9y6719V99E+vjfSjG14KRxQlspH6sjvozCGJSv+uSD/e4cWJVNDNQFfIvnJQMIdbzeM+zGn7kjplCLoZdcIAGLgzooSJ2RCcr2GEZIM9HAfCmPsQC0ve6vBvYEs8H969i/7u9bdjQqcCYIhDtc2eMIKlBy5W8t/du9fft0wYz77D8vJ8TBuSPfuK1sdT6fSaSKl+4OqKnDjo5AWmzu5zK7yNjuVQLxzQXueJpwxSgf76igBHANXm02whdA2pdpYUCzbKHhI676p9LNw988TQsiodAcActCj43FBmxxEY3k19+rxifUnLiAvlTfwaH0cNLFHkuB8HKEbiikf2XAnPn1HQs/ogGADwHJqz9Shv5oarvKUn+mIlevLsC8UusdksYIXXPfK6/zoNh0wEh/qsym8/+r4zwiuNzn2FvERDnuYrdWOnQY7P7cKldFzDXZCy7EQLppcLponW/Nz0Va6VGnU/g9XGJMH2KtarAVrScJABMh49ycQjH7t7iE6eHfPIWSzbpEDkUs5i1hIY9+pNLFUJiy3KPIal5svbmdmafX08s9lHuFh6F78D/t3utXPrD7wVdf6P7MD/riLluB3/th5v2kql5yc/ugLg4Gf0skL94MfwNCi1MyPSMHp5LkxXD6sz6uSuonwvt5I2aj7F5m4AAMAhCoWnMUQTJdgqkCjOfCRebJ9P5UEWds9uMAAALQvUrrPyRbueVnRWcUcQ7XjzmsC0YP86SlBL9u4AARVql0iQYYQgFgWZbYmxK8gW3khTIy02eSPNVLhgu4s/M3Ym1PF4MfYyiPVscct3eS/ryouiljDlpT/T3lVScwdd48abjiLmWnsYIQA4bqBjVXh49mKckurfLJQeP/CjgFNtgpsbKhYZaAscjpfdwCWB7sGB6Nrhj4uGOM2hXsVimujLnDfavZCOqsOk9uTl6Qpqu9TDg+H04AAAo9LklAHmqsNLvCHhFRZEgVdvMzlXoI2SSNY7zQCAHeLF7Gdjj6KVIlssL5mM/qWw4LV86F0FHOWPaYB494/SBFh50E9RGKpPj6SOlFpnkyGl27lMY2jMBzrI0ljkfd9xx+mtilhVXpE9BNOh1NGRpONSwWdDKvUDRjChI6GDzkoDPrrAe8utrMnehDyq7i4fMlfV1t+pKpagVel1G5zdP/fzt7oe7vxuzkMxyW55KulF/dUX19ZnR5b6f657hkizAmkzKPMl90ajDiRyQ7BDAmk9pl2pzDd4GnR9TCRtUrRHL/G/udPfVoO33RsIe9hnurPAKRqYQHryVVsRydorGRaGFi87K3EaT2hKjByB5sm9c1BIjVUkXM6vD7vKo1ubg4dXdeWv5QHrK3oeAbQ3gDSFUApS7SwpFtcIenwvaNH5jKoe1DePJdFy6yYBwA50VT76oPFu6GJ4vxCu6Bn8fHYD8sX7CrruvUHVtO/pZt4sFUxzMUCRbnByYQDAQVsiNugV8Ou+rUeD3xsTns+9+a9evbUrL/sAo7HTGQMZdy1l1vGu4zkQ73HBEzAZfr6d5zYWbmE3GACwUfGIXXC1GpFaxhqEcDijt7M7ZnrVnTcQMY4fm3OskCCTrp3FxYK9MwpBUADUpxpiUFdQ32BoQSNQ3zpcQPMw6GOoA2owQF24DOaYDlSk/H73wvtWZEO8S9ooUdHK9azI0MosnAsAAJyAjuwIBTCnBEUCaSrmbADOKHTFoBo9YQCAa4HpclfLfuG3jlbWLgRwBQ8qTv488UASHnZ3AzR8OyahK1focmBDWZ0GmWLPBrxgriGRmbrcCMScxGWaUM4TLkxrZaZjtTN0Wjib6W0dOxxuiZAoWMJmIfaGS5GZG5hvl8YmZYC0otIutU1lmYs+p/e79NGCJe2A7Ur+Nv02S64ftPKac0p7uZHmbqO3krKHmghN0tn+OeRfIFrQ794aEN4ufnh7kOSzCvxx3sb/nUz0gSff9I7UVSuYDJ6CxKFFbJM+DdcRkuUjWWdpWXhAKIjz9WD+qtY2STGHyl8X1lK67BXZk+HPuwd5tof61C2PikJ6ScO98JLvNNC3RuSlKXIcnQNcVQ8OAHDV4KHdCxY8gBXiiDW82oYAgGezkzEwBbzTDACgSezOniyTywZj6QbH6ZR8f2xg0rcedK6goNcbowrAwUXkFDQCZH/SIldFkbhvGeaGrgw1RgS6a2gxqyB3K1wwmytjAurIRt4LpCZ1sC3QwQXjFceqg4IgdRNSo/cVtYhRa1VPT4GduaT2HvkWQZsUgrVaSh2aTa2FfNwbtyj8OwEAYMvXJhZcymvlDf1lo06+pZNNynFCKwrmW56zLodr6Y4XA+O+S0yfPTZIum0NbHhRHldtRWa8VzoxZG/vsd4FK9QYhmfuBMLbf1PfHK6/BsVosuCIcj9DcDknnVuxGXTtbOejuUGYufNTFstbX9HzCKDNAMQRQZZFrJ3FxcIF0QN1ne366gwq4s5GhZDnnz4CgFRYuK58nIVOu2GO4b0uqJdteve3b4L9bJatETXoDSiVaN367JJZ77jgSOSgAqa5hT7jYwMLR3tfg9HGJE1uoxevmIRlq6JpA3jhdPcbN0uCDl53fN96RSXpSlqdANPjWRoUeJhWZ2xlb+Gpom+Lqx02bWq0Sdj9LtizdQvPs2C6quqSnsngSvMnaaX8VgTF7lVxLgj3pYEv8vKvdvB4Y53ZLbWz9ToMn5g7o3uPZB7Nt9XHj+/KJv3VyT5xp/hkF6mpY7Jtu42wa7QgblKJcDzRPHoLyCtmE6fSkc1lhZQMNu5c5ETZFgtBpRIholtkgIBoiwtYzNGBFAM7pJxiO4ZScBUzLKbjbbPcm24Mfn1Vre81vo/04q1/evLmWYuvdgIAAEdQDbczAQUzwb3icGZnlFPMIwAy+LkVcSozyc75YADAaibaVfDXLPhqZXKhMGsvNVyJ/kCUypkOPUOJuovdRyx27qShg4u/nPxeaKZSLAQK+QeaBkVm2NC0LS5DQdMZzTC0XsrhOw4v5bFaL7ATvcTaNVHVoRTTEArrN4pAKk1/QACQNZiiPtw0tLUT9i/dYNLCclpQGbEYG3S3HM8dKEvpjgSlmsNfiGCCXqk3zXRvgTe/1b0YvRf4R7tK5/J1xXVdByRqXdW5OACAibICQy7R1oeSrudx2mwZ0AYMKesUiY88ewckts8MABALDPYDGF+JH8/Fab/dkOK4Q5OSt8e2BxWdBzx1/l2DmOnWUgbgJrW84pvOmDUg94UUHphe2d8aEE1FoiKIidhoGmStuLgGJEoxuI/UWHU0GFJLOnh0wNIPmJQG083SQRRBIZeWKGBut3qufxdF9aLQFVQ4Vb6og0mnr+8jALgssGP22J1mhbh1l8ttMCcZXWLSwJh3XpRMgFnul6klcHfDVFgFbHkw2q4BVjfcb7uBOXgrrq77GD1a15f+ShVuToHoCkLzB9ZX/EICaPQAyYWQF1LvLGkW0yx7KOiys6Kg9myUipaqfgQAS+gqeMz1QovGXkG6I+RzxJ+jKaXncmJpXeOzRESb2mccu2cB0iKHCBgOPx+7nMnCGewGAwDm9INcNaXWr6JFc8VxijhXWe+byEn+npWrn5X7atepuFpar6OFrGp21syh2PmV7Cr9erfffvz9N+5HRnmNvw/K43a6fKgIrdGD7WZypj6/qhzkseB2+8EAgCvJAuz5CzgLeMniskNqF5iRP2+X4DY87GcLlvDu3AxoSoVkDvSNixldWBjCucza4Z0QSTFgDoM11A6rMNisjmWB8jUN+Errr/XyEfrFzj6lhpStKGp/knaHQMgHTwwrUjLOkbAy6Ig0R8K+UFAEHItty98EzNiVOxXjFEfPkYS7wgCAIdHRu+AKgPNWnLqVUqo2/rywQUMdYVODc9H6XGDJuzPwOsnwlzVogYUMhJMSmZljPlFJXJYNxlAMK4KbCna23OBOAtqtIYacunR4xJM+gDu/iMVW5Ye0ME9//11/BypePT6lBqvab4Q2aaH6AwIAeMGeMERxoGlJcxtVuDBVS9f8PmNxryW4c/1TJC/BrdueYvl7iApcxXhBSmihK854TsV1mXgNW7sgUbWAHvlZWonsiAPKMOPhtJOmND8+4Zj6QKs0wb58XWFrR6BXfScAQO/wtOqZLn17xKk8C+5l7MJEUI8u1A6QnK4eLSBFZ1sFarvPDADwEpxtT9s1gE7pMZYAur1/LoLc86F7DKjOG+MbwOFFNG5oKy37C4+bMhMnIPHuCictNueAcxGXOwNbGy6kajCpTmgUtDEpIggOOGCICycmGMxFuCqefpXaNcPYMuaZ799rbcNDOHBfQYsQUK15IIy4/u4KXOmymloQOY6g6+XJmndKsbtTAAAwO3KyzQuZhnhNW5DNNbygLAzRvsToGmMcvSieAsYb+PtIygu9Lf011DL/y/3yra/xYLMXAMRNYYBQ8ZysST2Fs/oQ5jIgbd06CPFqOXyBZNPBcEXJI8fBRw3jW/glJxbJr3JYSwPqxV6hDYh2MoS1UFfkw2Y+ytu68DxvMSp5yPNWmqXzwQCA6ChXaxu0ejMfZ+qqGA51ejm9IOm9boD/43T5ernGQo18bsdHfOhuOoPd53YCsAkuOMZcoZvoQ2uL5GpXGABwzfExJX+BdEAiFjdJtgxYu0PvMvYejPf82CqyQppcUzOofNHoGWYP5sSFQQjZNYaLIxYyxLAnECstLkR3SEfEGioGAstnJ0NsA9+DFE2Lgo1I0ac65gs/YEUNP/hZpcOB8wM/4yExLgMBQ9wEsZSHJeRYxhRvFBTD9ZOPPyjzW5ZdUKNx2zNJLzcT59qFGckSbnoVprbVmUJwLAx6W3A1Ew0+CCc/fhZrY2YUdl4Jhy0XkGALffr1UAtzc04YADD6ga5qqXU3qm5ayUzLAGY5nKssrOPap+68KVF942HvDMdNjzpt5kRVA7znLXi0oc633PMHRehWEqn+oO7LJMz6ub1Gt/hCvU8/T7lUSeTvAlV1KfISjBdBibmn2qqYZ+Sp+JWy71RwZ2Qx7bR8YRFkWxZoC8ljFk2BttJ5y8IQaGtYXFhEYsNiuwC0GnizdrgtxK5OgvA4FEc3FRyRFFEV+HdqRJyWskqguQxjnPgxGkm8Ok3t6e6fS+gYze0JeRtOkyPeJGoMdFn1T07Q9Xh/OwV8OYXbEYvGpC8M7KIgN5u9wM1oXSCDmwuKEwHMTp/ahpmR4qmltJ89tp7axRHyNvKHD99KhHtDRcYxemQ/M//vg674N+w4fmT3epx/Q8IOv2bop/jklyY3BuBzexp9f7FOtrF0Xn4P+Nu6BrN/FTCTPJTPokrSqonhJ/bz2PfE17avC78vBpJmKeLYfviJfqHUzOLsZriG/3BIrean6dm2P3vVp3cxHf8M3rbkNpwbHlpz8IPefnRRBl69Qvfy4vT2ihd/m6HjFunvlwWttut83QC4nh0AAIRRV6OMezEHxBdwmrDwrBMMS1dvHbGLaadIrJ1mAEBEulJH2xgEycdmQEGdfxNQgRc9WqKFnGeKppABVyHMhbQQqPADigHso6r32dH3+eyIPvd8WAGmWJUuhzvUVgTfhdlVyaR0HycJF+lPSdrdhFDQIy5Rjx4MMUDAEGFXqTgfUJg79YafwrrzHNQSevKPn6Wk7epvTWSGwYnXAqs4ygVzXgjlBDpADgMalxYPwLBUz7qBbe6rLA6wNWFGF0GDq093w0UOLAAAXWOa+/23G9widGy4oa7MPtkUII61x6hYkLc9hpI6QMHWfhVvWVbVxHWX3e3CLNFSFBCzjMU+Gcyx24+RNm89ap/NvBHwHvMHZVfEmqrRwP0MOAzxM3GXenykpuX5Rqyi0V2lDgYAHGR0rRXrZ4i2tQQ=","base64")).toString()),sH}var Mde=new Map([[W.makeIdent(null,"fsevents").identHash,Rde],[W.makeIdent(null,"resolve").identHash,Nde],[W.makeIdent(null,"typescript").identHash,Lde]]),Fgt={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,o]of rH)e(W.parseDescriptor(r,!0),o)},getBuiltinPatch:async(t,e)=>{let r="compat/";if(!e.startsWith(r))return;let o=W.parseIdent(e.slice(r.length)),a=Mde.get(o.identHash)?.();return typeof a<"u"?a:null},reduceDependency:async(t,e,r,o)=>typeof Mde.get(t.identHash)>"u"?t:W.makeDescriptor(t,W.makeRange({protocol:"patch:",source:W.stringifyDescriptor(t),selector:`optional!builtin`,params:null}))}},Tgt=Fgt;var BH={};Kt(BH,{ConstraintsCheckCommand:()=>p0,ConstraintsQueryCommand:()=>A0,ConstraintsSourceCommand:()=>f0,default:()=>odt});Ye();Ye();B2();var wC=class{constructor(e){this.project=e}createEnvironment(){let e=new CC(["cwd","ident"]),r=new CC(["workspace","type","ident"]),o=new CC(["ident"]),a={manifestUpdates:new Map,reportedErrors:new Map},n=new Map,u=new Map;for(let A of this.project.storedPackages.values()){let p=Array.from(A.peerDependencies.values(),h=>[W.stringifyIdent(h),h.range]);n.set(A.locatorHash,{workspace:null,ident:W.stringifyIdent(A),version:A.version,dependencies:new Map,peerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional!==!0)),optionalPeerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional===!0))})}for(let A of this.project.storedPackages.values()){let p=n.get(A.locatorHash);p.dependencies=new Map(Array.from(A.dependencies.values(),h=>{let E=this.project.storedResolutions.get(h.descriptorHash);if(typeof E>"u")throw new Error("Assertion failed: The resolution should have been registered");let I=n.get(E);if(typeof I>"u")throw new Error("Assertion failed: The package should have been registered");return[W.stringifyIdent(h),I]})),p.dependencies.delete(p.ident)}for(let A of this.project.workspaces){let p=W.stringifyIdent(A.anchoredLocator),h=A.manifest.exportTo({}),E=n.get(A.anchoredLocator.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");let I=(T,L,{caller:U=Ji.getCaller()}={})=>{let J=I2(T),te=je.getMapWithDefault(a.manifestUpdates,A.cwd),le=je.getMapWithDefault(te,J),pe=je.getSetWithDefault(le,L);U!==null&&pe.add(U)},v=T=>I(T,void 0,{caller:Ji.getCaller()}),b=T=>{je.getArrayWithDefault(a.reportedErrors,A.cwd).push(T)},C=e.insert({cwd:A.relativeCwd,ident:p,manifest:h,pkg:E,set:I,unset:v,error:b});u.set(A,C);for(let T of Mt.allDependencies)for(let L of A.manifest[T].values()){let U=W.stringifyIdent(L),J=()=>{I([T,U],void 0,{caller:Ji.getCaller()})},te=pe=>{I([T,U],pe,{caller:Ji.getCaller()})},le=null;if(T!=="peerDependencies"&&(T!=="dependencies"||!A.manifest.devDependencies.has(L.identHash))){let pe=A.anchoredPackage.dependencies.get(L.identHash);if(pe){if(typeof pe>"u")throw new Error("Assertion failed: The dependency should have been registered");let Ae=this.project.storedResolutions.get(pe.descriptorHash);if(typeof Ae>"u")throw new Error("Assertion failed: The resolution should have been registered");let ye=n.get(Ae);if(typeof ye>"u")throw new Error("Assertion failed: The package should have been registered");le=ye}}r.insert({workspace:C,ident:U,range:L.range,type:T,resolution:le,update:te,delete:J,error:b})}}for(let A of this.project.storedPackages.values()){let p=this.project.tryWorkspaceByLocator(A);if(!p)continue;let h=u.get(p);if(typeof h>"u")throw new Error("Assertion failed: The workspace should have been registered");let E=n.get(A.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");E.workspace=h}return{workspaces:e,dependencies:r,packages:o,result:a}}async process(){let e=this.createEnvironment(),r={Yarn:{workspace:a=>e.workspaces.find(a)[0]??null,workspaces:a=>e.workspaces.find(a),dependency:a=>e.dependencies.find(a)[0]??null,dependencies:a=>e.dependencies.find(a),package:a=>e.packages.find(a)[0]??null,packages:a=>e.packages.find(a)}},o=await this.project.loadUserConfig();return o?.constraints?(await o.constraints(r),e.result):null}};Ye();Ye();qt();var A0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.query=ge.String()}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(x2(),S2)),o=await Ve.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a),u=this.query;return u.endsWith(".")||(u=`${u}.`),(await Nt.start({configuration:o,json:this.json,stdout:this.context.stdout},async p=>{for await(let h of n.query(u)){let E=Array.from(Object.entries(h)),I=E.length,v=E.reduce((b,[C])=>Math.max(b,C.length),0);for(let b=0;b(x2(),S2)),o=await Ve.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a);this.context.stdout.write(this.verbose?n.fullSource:n.source)}};f0.paths=[["constraints","source"]],f0.usage=nt.Usage({category:"Constraints-related commands",description:"print the source code for the constraints",details:"\n This command will print the Prolog source code used by the constraints engine. Adding the `-v,--verbose` flag will print the *full* source code, including the fact database automatically compiled from the workspace manifests.\n ",examples:[["Prints the source code","yarn constraints source"],["Print the source code and the fact database","yarn constraints source -v"]]});Ye();Ye();qt();B2();var p0=class extends ut{constructor(){super(...arguments);this.fix=ge.Boolean("--fix",!1,{description:"Attempt to automatically fix unambiguous issues, following a multi-pass process"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);await o.restoreInstallState();let a=await o.loadUserConfig(),n;if(a?.constraints)n=new wC(o);else{let{Constraints:h}=await Promise.resolve().then(()=>(x2(),S2));n=await h.find(o)}let u,A=!1,p=!1;for(let h=this.fix?10:1;h>0;--h){let E=await n.process();if(!E)break;let{changedWorkspaces:I,remainingErrors:v}=mk(o,E,{fix:this.fix}),b=[];for(let[C,T]of I){let L=C.manifest.indent;C.manifest=new Mt,C.manifest.indent=L,C.manifest.load(T),b.push(C.persistManifest())}if(await Promise.all(b),!(I.size>0&&h>1)){u=Gde(v,{configuration:r}),A=!1,p=!0;for(let[,C]of v)for(let T of C)T.fixable?A=!0:p=!1}}if(u.children.length===0)return 0;if(A){let h=p?`Those errors can all be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`:`Errors prefixed by '\u2699' can be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`;await Nt.start({configuration:r,stdout:this.context.stdout,includeNames:!1,includeFooter:!1},async E=>{E.reportInfo(0,h),E.reportSeparator()})}return u.children=je.sortMap(u.children,h=>h.value[1]),$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1}),1}};p0.paths=[["constraints"]],p0.usage=nt.Usage({category:"Constraints-related commands",description:"check that the project constraints are met",details:` + This command will run constraints on your project and emit errors for each one that is found but isn't met. If any error is emitted the process will exit with a non-zero exit code. + + If the \`--fix\` flag is used, Yarn will attempt to automatically fix the issues the best it can, following a multi-pass process (with a maximum of 10 iterations). Some ambiguous patterns cannot be autofixed, in which case you'll have to manually specify the right resolution. + + For more information as to how to write constraints, please consult our dedicated page on our website: https://yarnpkg.com/features/constraints. + `,examples:[["Check that all constraints are satisfied","yarn constraints"],["Autofix all unmet constraints","yarn constraints --fix"]]});B2();var sdt={configuration:{enableConstraintsChecks:{description:"If true, constraints will run during installs",type:"BOOLEAN",default:!1},constraintsPath:{description:"The path of the constraints file.",type:"ABSOLUTE_PATH",default:"./constraints.pro"}},commands:[A0,f0,p0],hooks:{async validateProjectAfterInstall(t,{reportError:e}){if(!t.configuration.get("enableConstraintsChecks"))return;let r=await t.loadUserConfig(),o;if(r?.constraints)o=new wC(t);else{let{Constraints:u}=await Promise.resolve().then(()=>(x2(),S2));o=await u.find(t)}let a=await o.process();if(!a)return;let{remainingErrors:n}=mk(t,a);if(n.size!==0)if(t.configuration.isCI)for(let[u,A]of n)for(let p of A)e(84,`${de.pretty(t.configuration,u.anchoredLocator,de.Type.IDENT)}: ${p.text}`);else e(84,`Constraint check failed; run ${de.pretty(t.configuration,"yarn constraints",de.Type.CODE)} for more details`)}}},odt=sdt;var vH={};Kt(vH,{CreateCommand:()=>em,DlxCommand:()=>h0,default:()=>ldt});Ye();qt();var em=class extends ut{constructor(){super(...arguments);this.pkg=ge.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){let r=[];this.pkg&&r.push("--package",this.pkg),this.quiet&&r.push("--quiet");let o=this.command.replace(/^(@[^@/]+)(@|$)/,"$1/create$2"),a=W.parseDescriptor(o),n=a.name.match(/^create(-|$)/)?a:a.scope?W.makeIdent(a.scope,`create-${a.name}`):W.makeIdent(null,`create-${a.name}`),u=W.stringifyIdent(n);return a.range!=="unknown"&&(u+=`@${a.range}`),this.cli.run(["dlx",...r,u,...this.args])}};em.paths=[["create"]];Ye();Ye();Pt();qt();var h0=class extends ut{constructor(){super(...arguments);this.packages=ge.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){return Ve.telemetry=null,await oe.mktempPromise(async r=>{let o=K.join(r,`dlx-${process.pid}`);await oe.mkdirPromise(o),await oe.writeFilePromise(K.join(o,"package.json"),`{} +`),await oe.writeFilePromise(K.join(o,"yarn.lock"),"");let a=K.join(o,".yarnrc.yml"),n=await Ve.findProjectCwd(this.context.cwd),A={enableGlobalCache:!(await Ve.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),enableTelemetry:!1,logFilters:[{code:Wu(68),level:de.LogLevel.Discard}]},p=n!==null?K.join(n,".yarnrc.yml"):null;p!==null&&oe.existsSync(p)?(await oe.copyFilePromise(p,a),await Ve.updateConfiguration(o,L=>{let U=je.toMerged(L,A);return Array.isArray(L.plugins)&&(U.plugins=L.plugins.map(J=>{let te=typeof J=="string"?J:J.path,le=ue.isAbsolute(te)?te:ue.resolve(ue.fromPortablePath(n),te);return typeof J=="string"?le:{path:le,spec:J.spec}})),U})):await oe.writeJsonPromise(a,A);let h=this.packages??[this.command],E=W.parseDescriptor(this.command).name,I=await this.cli.run(["add","--fixed","--",...h],{cwd:o,quiet:this.quiet});if(I!==0)return I;this.quiet||this.context.stdout.write(` +`);let v=await Ve.find(o,this.context.plugins),{project:b,workspace:C}=await St.find(v,o);if(C===null)throw new rr(b.cwd,o);await b.restoreInstallState();let T=await un.getWorkspaceAccessibleBinaries(C);return T.has(E)===!1&&T.size===1&&typeof this.packages>"u"&&(E=Array.from(T)[0][0]),await un.executeWorkspaceAccessibleBinary(C,E,this.args,{packageAccessibleBinaries:T,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};h0.paths=[["dlx"]],h0.usage=nt.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"],["Install multiple packages for a single command",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e "console.log('hello!')"`]]});var adt={commands:[em,h0]},ldt=adt;var SH={};Kt(SH,{ExecFetcher:()=>k2,ExecResolver:()=>Q2,default:()=>Adt,execUtils:()=>wk});Ye();Ye();Pt();var fA="exec:";var wk={};Kt(wk,{loadGeneratorFile:()=>b2,makeLocator:()=>PH,makeSpec:()=>dme,parseSpec:()=>DH});Ye();Pt();function DH(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function dme({parentLocator:t,path:e,generatorHash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PH(t,{parentLocator:e,path:r,generatorHash:o,protocol:a}){return W.makeLocator(t,dme({parentLocator:e,path:r,generatorHash:o,protocol:a}))}async function b2(t,e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(t,{protocol:e}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath)}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.join(u.prefixPath,a);return await A.readFilePromise(p,"utf8")}var k2=class{supports(e,r){return!!e.reference.startsWith(fA)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:fA});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){let o=await b2(e.reference,fA,r);return oe.mktempPromise(async a=>{let n=K.join(a,"generator.js");return await oe.writeFilePromise(n,o),oe.mktempPromise(async u=>{if(await this.generatePackage(u,e,n,r),!oe.existsSync(K.join(u,"build")))throw new Error("The script should have generated a build directory");return await Xi.makeArchiveFromDirectory(K.join(u,"build"),{prefixPath:W.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel")})})})}async generatePackage(e,r,o,a){return await oe.mktempPromise(async n=>{let u=await un.makeScriptEnv({project:a.project,binFolder:n}),A=K.join(e,"runtime.js");return await oe.mktempPromise(async p=>{let h=K.join(p,"buildfile.log"),E=K.join(e,"generator"),I=K.join(e,"build");await oe.mkdirPromise(E),await oe.mkdirPromise(I);let v={tempDir:ue.fromPortablePath(E),buildDir:ue.fromPortablePath(I),locator:W.stringifyLocator(r)};await oe.writeFilePromise(A,` + // Expose 'Module' as a global variable + Object.defineProperty(global, 'Module', { + get: () => require('module'), + configurable: true, + enumerable: false, + }); + + // Expose non-hidden built-in modules as global variables + for (const name of Module.builtinModules.filter((name) => name !== 'module' && !name.startsWith('_'))) { + Object.defineProperty(global, name, { + get: () => require(name), + configurable: true, + enumerable: false, + }); + } + + // Expose the 'execEnv' global variable + Object.defineProperty(global, 'execEnv', { + value: { + ...${JSON.stringify(v)}, + }, + enumerable: true, + }); + `);let b=u.NODE_OPTIONS||"",C=/\s*--require\s+\S*\.pnp\.c?js\s*/g;b=b.replace(C," ").trim(),u.NODE_OPTIONS=b;let{stdout:T,stderr:L}=a.project.configuration.getSubprocessStreams(h,{header:`# This file contains the result of Yarn generating a package (${W.stringifyLocator(r)}) +`,prefix:W.prettyLocator(a.project.configuration,r),report:a.report}),{code:U}=await Ur.pipevp(process.execPath,["--require",ue.fromPortablePath(A),ue.fromPortablePath(o),W.stringifyIdent(r)],{cwd:e,env:u,stdin:null,stdout:T,stderr:L});if(U!==0)throw oe.detachTemp(p),new Error(`Package generation failed (exit code ${U}, logs can be found here: ${de.pretty(a.project.configuration,h,de.Type.PATH)})`)})})}};Ye();Ye();var cdt=2,Q2=class{supportsDescriptor(e,r){return!!e.range.startsWith(fA)}supportsLocator(e,r){return!!e.reference.startsWith(fA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=DH(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await b2(W.makeRange({protocol:fA,source:a,selector:a,params:{locator:W.stringifyLocator(n)}}),fA,o.fetchOptions),A=wn.makeHash(`${cdt}`,u).slice(0,6);return[PH(e,{parentLocator:n,path:a,generatorHash:A,protocol:fA})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var udt={fetchers:[k2],resolvers:[Q2]},Adt=udt;var bH={};Kt(bH,{FileFetcher:()=>N2,FileResolver:()=>L2,TarballFileFetcher:()=>M2,TarballFileResolver:()=>O2,default:()=>hdt,fileUtils:()=>tm});Ye();Pt();var DC=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,F2=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,Ui="file:";var tm={};Kt(tm,{fetchArchiveFromLocator:()=>R2,makeArchiveFromLocator:()=>Ik,makeBufferFromLocator:()=>xH,makeLocator:()=>PC,makeSpec:()=>mme,parseSpec:()=>T2});Ye();Pt();function T2(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function mme({parentLocator:t,path:e,hash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PC(t,{parentLocator:e,path:r,hash:o,protocol:a}){return W.makeLocator(t,mme({parentLocator:e,path:r,hash:o,protocol:a}))}async function R2(t,e){let{parentLocator:r,path:o}=W.parseFileStyleRange(t.reference,{protocol:Ui}),a=K.isAbsolute(o)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await e.fetcher.fetch(r,e),n=a.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,a.localPath)}:a;a!==n&&a.releaseFs&&a.releaseFs();let u=n.packageFs,A=K.join(n.prefixPath,o);return await je.releaseAfterUseAsync(async()=>await u.readFilePromise(A),n.releaseFs)}async function Ik(t,{protocol:e,fetchOptions:r,inMemory:o=!1}){let{parentLocator:a,path:n}=W.parseFileStyleRange(t.reference,{protocol:e}),u=K.isAbsolute(n)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(a,r),A=u.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,u.localPath)}:u;u!==A&&u.releaseFs&&u.releaseFs();let p=A.packageFs,h=K.join(A.prefixPath,n);return await je.releaseAfterUseAsync(async()=>await Xi.makeArchiveFromDirectory(h,{baseFs:p,prefixPath:W.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:o}),A.releaseFs)}async function xH(t,{protocol:e,fetchOptions:r}){return(await Ik(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var N2=class{supports(e,r){return!!e.reference.startsWith(Ui)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:Ui});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){return Ik(e,{protocol:Ui,fetchOptions:r})}};Ye();Ye();var fdt=2,L2=class{supportsDescriptor(e,r){return e.range.match(DC)?!0:!!e.range.startsWith(Ui)}supportsLocator(e,r){return!!e.reference.startsWith(Ui)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return DC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await xH(W.makeLocator(e,W.makeRange({protocol:Ui,source:a,selector:a,params:{locator:W.stringifyLocator(n)}})),{protocol:Ui,fetchOptions:o.fetchOptions}),A=wn.makeHash(`${fdt}`,u).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:A,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};Ye();var M2=class{supports(e,r){return F2.test(e.reference)?!!e.reference.startsWith(Ui):!1}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromDisk(e,r){let o=await R2(e,r);return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();Ye();var O2=class{supportsDescriptor(e,r){return F2.test(e.range)?!!(e.range.startsWith(Ui)||DC.test(e.range)):!1}supportsLocator(e,r){return F2.test(e.reference)?!!e.reference.startsWith(Ui):!1}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return DC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=PC(e,{parentLocator:n,path:a,hash:"",protocol:Ui}),A=await R2(u,o.fetchOptions),p=wn.makeHash(A).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:p,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var pdt={fetchers:[M2,N2],resolvers:[O2,L2]},hdt=pdt;var FH={};Kt(FH,{GithubFetcher:()=>U2,default:()=>ddt,githubUtils:()=>Bk});Ye();Pt();var Bk={};Kt(Bk,{invalidGithubUrlMessage:()=>Cme,isGithubUrl:()=>kH,parseGithubUrl:()=>QH});var yme=$e(Be("querystring")),Eme=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function kH(t){return t?Eme.some(e=>!!t.match(e)):!1}function QH(t){let e;for(let A of Eme)if(e=t.match(A),e)break;if(!e)throw new Error(Cme(t));let[,r,o,a,n="master"]=e,{commit:u}=yme.default.parse(n);return n=u||n.replace(/[^:]*:/,""),{auth:r,username:o,reponame:a,treeish:n}}function Cme(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var U2=class{supports(e,r){return!!kH(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await rn.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await oe.mktempPromise(async a=>{let n=new gn(a);await Xi.extractArchiveTo(o,n,{stripComponents:1});let u=ra.splitRepoUrl(e.reference),A=K.join(a,"package.tgz");await un.prepareExternalProject(a,A,{configuration:r.project.configuration,report:r.report,workspace:u.extra.workspace,locator:e});let p=await oe.readFilePromise(A);return await Xi.convertToZip(p,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:o,username:a,reponame:n,treeish:u}=QH(e.reference);return`https://${o?`${o}@`:""}github.com/${a}/${n}/archive/${u}.tar.gz`}};var gdt={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let o=new U2;if(!o.supports(e,r))return null;try{return await o.fetch(e,r)}catch{return null}}}},ddt=gdt;var TH={};Kt(TH,{TarballHttpFetcher:()=>H2,TarballHttpResolver:()=>j2,default:()=>ydt});Ye();function _2(t){let e;try{e=new URL(t)}catch{return!1}return!(e.protocol!=="http:"&&e.protocol!=="https:"||!e.pathname.match(/(\.tar\.gz|\.tgz|\/[^.]+)$/))}var H2=class{supports(e,r){return _2(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await rn.get(e.reference,{configuration:r.project.configuration});return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();var j2=class{supportsDescriptor(e,r){return _2(e.range)}supportsLocator(e,r){return _2(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[W.convertDescriptorToLocator(e)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var mdt={fetchers:[H2],resolvers:[j2]},ydt=mdt;var RH={};Kt(RH,{InitCommand:()=>g0,default:()=>Cdt});Ye();Ye();Pt();qt();var g0=class extends ut{constructor(){super(...arguments);this.private=ge.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=ge.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=ge.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.name=ge.String("-n,--name",{description:"Initialize a package with the given name"});this.usev2=ge.Boolean("-2",!1,{hidden:!0});this.yes=ge.Boolean("-y,--yes",{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return o!==null?await this.executeProxy(r,o):await this.executeRegular(r)}async executeProxy(r,o){if(r.projectCwd!==null&&r.projectCwd!==this.context.cwd)throw new it("Cannot use the --install flag from within a project subdirectory");oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=K.join(this.context.cwd,dr.lockfile);oe.existsSync(a)||await oe.writeFilePromise(a,"");let n=await this.cli.run(["set","version",o],{quiet:!0});if(n!==0)return n;let u=[];return this.private&&u.push("-p"),this.workspace&&u.push("-w"),this.name&&u.push(`-n=${this.name}`),this.yes&&u.push("-y"),await oe.mktempPromise(async A=>{let{code:p}=await Ur.pipevp("yarn",["init",...u],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await un.makeScriptEnv({binFolder:A})});return p})}async executeRegular(r){let o=null;try{o=(await St.find(r,this.context.cwd)).project}catch{o=null}oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=await Mt.tryFind(this.context.cwd),n=a??new Mt,u=Object.fromEntries(r.get("initFields").entries());n.load(u),n.name=n.name??W.makeIdent(r.get("initScope"),this.name??K.basename(this.context.cwd)),n.packageManager=tn&&je.isTaggedYarnVersion(tn)?`yarn@${tn}`:null,(!a&&this.workspace||this.private)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await oe.mkdirPromise(K.join(this.context.cwd,"packages"),{recursive:!0}),n.workspaceDefinitions=[{pattern:"packages/*"}]);let A={};n.exportTo(A);let p=K.join(this.context.cwd,Mt.fileName);await oe.changeFilePromise(p,`${JSON.stringify(A,null,2)} +`,{automaticNewlines:!0});let h=[p],E=K.join(this.context.cwd,"README.md");if(oe.existsSync(E)||(await oe.writeFilePromise(E,`# ${W.stringifyIdent(n.name)} +`),h.push(E)),!o||o.cwd===this.context.cwd){let I=K.join(this.context.cwd,dr.lockfile);oe.existsSync(I)||(await oe.writeFilePromise(I,""),h.push(I));let b=[".yarn/*","!.yarn/patches","!.yarn/plugins","!.yarn/releases","!.yarn/sdks","!.yarn/versions","","# Swap the comments on the following lines if you wish to use zero-installs","# In that case, don't forget to run `yarn config set enableGlobalCache false`!","# Documentation here: https://yarnpkg.com/features/caching#zero-installs","","#!.yarn/cache",".pnp.*"].map(pe=>`${pe} +`).join(""),C=K.join(this.context.cwd,".gitignore");oe.existsSync(C)||(await oe.writeFilePromise(C,b),h.push(C));let L=["/.yarn/** linguist-vendored","/.yarn/releases/* binary","/.yarn/plugins/**/* binary","/.pnp.* binary linguist-generated"].map(pe=>`${pe} +`).join(""),U=K.join(this.context.cwd,".gitattributes");oe.existsSync(U)||(await oe.writeFilePromise(U,L),h.push(U));let J={["*"]:{endOfLine:"lf",insertFinalNewline:!0},["*.{js,json,yml}"]:{charset:"utf-8",indentStyle:"space",indentSize:2}};je.mergeIntoTarget(J,r.get("initEditorConfig"));let te=`root = true +`;for(let[pe,Ae]of Object.entries(J)){te+=` +[${pe}] +`;for(let[ye,ae]of Object.entries(Ae)){let we=ye.replace(/[A-Z]/g,Pe=>`_${Pe.toLowerCase()}`);te+=`${we} = ${ae} +`}}let le=K.join(this.context.cwd,".editorconfig");oe.existsSync(le)||(await oe.writeFilePromise(le,te),h.push(le)),await this.cli.run(["install"],{quiet:!0}),oe.existsSync(K.join(this.context.cwd,".git"))||(await Ur.execvp("git",["init"],{cwd:this.context.cwd}),await Ur.execvp("git",["add","--",...h],{cwd:this.context.cwd}),await Ur.execvp("git",["commit","--allow-empty","-m","First commit"],{cwd:this.context.cwd}))}}};g0.paths=[["init"]],g0.usage=nt.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]});var Edt={configuration:{initScope:{description:"Scope used when creating packages via the init command",type:"STRING",default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:"MAP",valueDefinition:{description:"",type:"ANY"}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:"MAP",valueDefinition:{description:"",type:"ANY"}}},commands:[g0]},Cdt=Edt;var Lj={};Kt(Lj,{SearchCommand:()=>C0,UpgradeInteractiveCommand:()=>I0,default:()=>lIt});Ye();var Ime=$e(Be("os"));function SC({stdout:t}){if(Ime.default.endianness()==="BE")throw new Error("Interactive commands cannot be used on big-endian systems because ink depends on yoga-layout-prebuilt which only supports little-endian architectures");if(!t.isTTY)throw new Error("Interactive commands can only be used inside a TTY environment")}qt();var Rye=$e(ZH()),$H={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},myt=(0,Rye.default)($H.appId,$H.apiKey).initIndex($H.indexName),e6=async(t,e=0)=>await myt.search(t,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:e,hitsPerPage:10});var HB=["regular","dev","peer"],C0=class extends ut{async execute(){SC(this.context);let{Gem:e}=await Promise.resolve().then(()=>(AQ(),Dj)),{ScrollableItems:r}=await Promise.resolve().then(()=>(gQ(),hQ)),{useKeypress:o}=await Promise.resolve().then(()=>(OB(),Jwe)),{useMinistore:a}=await Promise.resolve().then(()=>(Qj(),kj)),{renderForm:n}=await Promise.resolve().then(()=>(EQ(),yQ)),{default:u}=await Promise.resolve().then(()=>$e(sIe())),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useEffect:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),b=()=>h.createElement(A,{flexDirection:"row"},h.createElement(A,{flexDirection:"column",width:48},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move between packages.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select a package.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," again to change the target."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),C=()=>h.createElement(h.Fragment,null,h.createElement(A,{width:15},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Owner")),h.createElement(A,{width:11},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Version")),h.createElement(A,{width:10},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Downloads"))),T=()=>h.createElement(A,{width:17},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Target")),L=({hit:ae,active:we})=>{let[Pe,g]=a(ae.name,null);o({active:we},(ce,ne)=>{if(ne.name!=="space")return;if(!Pe){g(HB[0]);return}let ee=HB.indexOf(Pe)+1;ee===HB.length?g(null):g(HB[ee])},[Pe,g]);let Ee=W.parseIdent(ae.name),De=W.prettyIdent(v,Ee);return h.createElement(A,null,h.createElement(A,{width:45},h.createElement(p,{bold:!0,wrap:"wrap"},De)),h.createElement(A,{width:14,marginLeft:1},h.createElement(p,{bold:!0,wrap:"truncate"},ae.owner.name)),h.createElement(A,{width:10,marginLeft:1},h.createElement(p,{italic:!0,wrap:"truncate"},ae.version)),h.createElement(A,{width:16,marginLeft:1},h.createElement(p,null,ae.humanDownloadsLast30Days)))},U=({name:ae,active:we})=>{let[Pe]=a(ae,null),g=W.parseIdent(ae);return h.createElement(A,null,h.createElement(A,{width:47},h.createElement(p,{bold:!0}," - ",W.prettyIdent(v,g))),HB.map(Ee=>h.createElement(A,{key:Ee,width:14,marginLeft:1},h.createElement(p,null," ",h.createElement(e,{active:Pe===Ee})," ",h.createElement(p,{bold:!0},Ee)))))},J=()=>h.createElement(A,{marginTop:1},h.createElement(p,null,"Powered by Algolia.")),le=await n(({useSubmit:ae})=>{let we=a();ae(we);let Pe=Array.from(we.keys()).filter(H=>we.get(H)!==null),[g,Ee]=I(""),[De,ce]=I(0),[ne,ee]=I([]),Ie=H=>{H.match(/\t| /)||Ee(H)},ke=async()=>{ce(0);let H=await e6(g);H.query===g&&ee(H.hits)},ht=async()=>{let H=await e6(g,De+1);H.query===g&&H.page-1===De&&(ce(H.page),ee([...ne,...H.hits]))};return E(()=>{g?ke():ee([])},[g]),h.createElement(A,{flexDirection:"column"},h.createElement(b,null),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(p,{bold:!0},"Search: "),h.createElement(A,{width:41},h.createElement(u,{value:g,onChange:Ie,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),h.createElement(C,null)),ne.length?h.createElement(r,{radius:2,loop:!1,children:ne.map(H=>h.createElement(L,{key:H.name,hit:H,active:!1})),willReachEnd:ht}):h.createElement(p,{color:"gray"},"Start typing..."),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(A,{width:49},h.createElement(p,{bold:!0},"Selected:")),h.createElement(T,null)),Pe.length?Pe.map(H=>h.createElement(U,{key:H,name:H,active:!1})):h.createElement(p,{color:"gray"},"No selected packages..."),h.createElement(J,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof le>"u")return 1;let pe=Array.from(le.keys()).filter(ae=>le.get(ae)==="regular"),Ae=Array.from(le.keys()).filter(ae=>le.get(ae)==="dev"),ye=Array.from(le.keys()).filter(ae=>le.get(ae)==="peer");return pe.length&&await this.cli.run(["add",...pe]),Ae.length&&await this.cli.run(["add","--dev",...Ae]),ye&&await this.cli.run(["add","--peer",...ye]),0}};C0.paths=[["search"]],C0.usage=nt.Usage({category:"Interactive commands",description:"open the search interface",details:` + This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. + `,examples:[["Open the search window","yarn search"]]});Ye();qt();w_();var fIe=$e(zn()),AIe=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,pIe=(t,e)=>t.length>0?[t.slice(0,e)].concat(pIe(t.slice(e),e)):[],I0=class extends ut{async execute(){SC(this.context);let{ItemOptions:e}=await Promise.resolve().then(()=>(uIe(),cIe)),{Pad:r}=await Promise.resolve().then(()=>(Nj(),lIe)),{ScrollableItems:o}=await Promise.resolve().then(()=>(gQ(),hQ)),{useMinistore:a}=await Promise.resolve().then(()=>(Qj(),kj)),{renderForm:n}=await Promise.resolve().then(()=>(EQ(),yQ)),{Box:u,Text:A}=await Promise.resolve().then(()=>$e(ic())),{default:p,useEffect:h,useRef:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),{project:b,workspace:C}=await St.find(v,this.context.cwd),T=await Lr.find(v);if(!C)throw new rr(b.cwd,this.context.cwd);await b.restoreInstallState({restoreResolutions:!1});let L=this.context.stdout.rows-7,U=(Ee,De)=>{let ce=fpe(Ee,De),ne="";for(let ee of ce)ee.added?ne+=de.pretty(v,ee.value,"green"):ee.removed||(ne+=ee.value);return ne},J=(Ee,De)=>{if(Ee===De)return De;let ce=W.parseRange(Ee),ne=W.parseRange(De),ee=ce.selector.match(AIe),Ie=ne.selector.match(AIe);if(!ee||!Ie)return U(Ee,De);let ke=["gray","red","yellow","green","magenta"],ht=null,H="";for(let lt=1;lt{let ne=await zc.fetchDescriptorFrom(Ee,ce,{project:b,cache:T,preserveModifier:De,workspace:C});return ne!==null?ne.range:Ee.range},le=async Ee=>{let De=fIe.default.valid(Ee.range)?`^${Ee.range}`:Ee.range,[ce,ne]=await Promise.all([te(Ee,Ee.range,De).catch(()=>null),te(Ee,Ee.range,"latest").catch(()=>null)]),ee=[{value:null,label:Ee.range}];return ce&&ce!==Ee.range?ee.push({value:ce,label:J(Ee.range,ce)}):ee.push({value:null,label:""}),ne&&ne!==ce&&ne!==Ee.range?ee.push({value:ne,label:J(Ee.range,ne)}):ee.push({value:null,label:""}),ee},pe=()=>p.createElement(u,{flexDirection:"row"},p.createElement(u,{flexDirection:"column",width:49},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select packages.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select versions."))),p.createElement(u,{flexDirection:"column"},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to install.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to abort.")))),Ae=()=>p.createElement(u,{flexDirection:"row",paddingTop:1,paddingBottom:1},p.createElement(u,{width:50},p.createElement(A,{bold:!0},p.createElement(A,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Current")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Range")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Latest"))),ye=({active:Ee,descriptor:De,suggestions:ce})=>{let[ne,ee]=a(De.descriptorHash,null),Ie=W.stringifyIdent(De),ke=Math.max(0,45-Ie.length);return p.createElement(p.Fragment,null,p.createElement(u,null,p.createElement(u,{width:45},p.createElement(A,{bold:!0},W.prettyIdent(v,De)),p.createElement(r,{active:Ee,length:ke})),p.createElement(e,{active:Ee,options:ce,value:ne,skewer:!0,onChange:ee,sizes:[17,17,17]})))},ae=({dependencies:Ee})=>{let[De,ce]=I(Ee.map(()=>null)),ne=E(!0),ee=async Ie=>{let ke=await le(Ie);return ke.filter(ht=>ht.label!=="").length<=1?null:{descriptor:Ie,suggestions:ke}};return h(()=>()=>{ne.current=!1},[]),h(()=>{let Ie=Math.trunc(L*1.75),ke=Ee.slice(0,Ie),ht=Ee.slice(Ie),H=pIe(ht,L),lt=ke.map(ee).reduce(async(Re,Qe)=>{await Re;let be=await Qe;be!==null&&(!ne.current||ce(_e=>{let Te=_e.findIndex(He=>He===null),Je=[..._e];return Je[Te]=be,Je}))},Promise.resolve());H.reduce((Re,Qe)=>Promise.all(Qe.map(be=>Promise.resolve().then(()=>ee(be)))).then(async be=>{be=be.filter(_e=>_e!==null),await Re,ne.current&&ce(_e=>{let Te=_e.findIndex(Je=>Je===null);return _e.slice(0,Te).concat(be).concat(_e.slice(Te+be.length))})}),lt).then(()=>{ne.current&&ce(Re=>Re.filter(Qe=>Qe!==null))})},[]),De.length?p.createElement(o,{radius:L>>1,children:De.map((Ie,ke)=>Ie!==null?p.createElement(ye,{key:ke,active:!1,descriptor:Ie.descriptor,suggestions:Ie.suggestions}):p.createElement(A,{key:ke},"Loading..."))}):p.createElement(A,null,"No upgrades found")},Pe=await n(({useSubmit:Ee})=>{Ee(a());let De=new Map;for(let ne of b.workspaces)for(let ee of["dependencies","devDependencies"])for(let Ie of ne.manifest[ee].values())b.tryWorkspaceByDescriptor(Ie)===null&&(Ie.range.startsWith("link:")||De.set(Ie.descriptorHash,Ie));let ce=je.sortMap(De.values(),ne=>W.stringifyDescriptor(ne));return p.createElement(u,{flexDirection:"column"},p.createElement(pe,null),p.createElement(Ae,null),p.createElement(ae,{dependencies:ce}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Pe>"u")return 1;let g=!1;for(let Ee of b.workspaces)for(let De of["dependencies","devDependencies"]){let ce=Ee.manifest[De];for(let ne of ce.values()){let ee=Pe.get(ne.descriptorHash);typeof ee<"u"&&ee!==null&&(ce.set(ne.identHash,W.makeDescriptor(ne,ee)),g=!0)}}return g?await b.installWithNewReport({quiet:this.context.quiet,stdout:this.context.stdout},{cache:T}):0}};I0.paths=[["upgrade-interactive"]],I0.usage=nt.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` + This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. + `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var aIt={commands:[C0,I0]},lIt=aIt;var Mj={};Kt(Mj,{LinkFetcher:()=>qB,LinkResolver:()=>GB,PortalFetcher:()=>YB,PortalResolver:()=>WB,default:()=>uIt});Ye();Pt();var ep="portal:",tp="link:";var qB=class{supports(e,r){return!!e.reference.startsWith(tp)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0}}};Ye();Pt();var GB=class{supportsDescriptor(e,r){return!!e.range.startsWith(tp)}supportsLocator(e,r){return!!e.reference.startsWith(tp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(tp.length);return[W.makeLocator(e,`${tp}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){return{...e,version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};Ye();Pt();var YB=class{supports(e,r){return!!e.reference.startsWith(ep)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:ep});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:ep}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot}}};Ye();Ye();Pt();var WB=class{supportsDescriptor(e,r){return!!e.range.startsWith(ep)}supportsLocator(e,r){return!!e.reference.startsWith(ep)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(ep.length);return[W.makeLocator(e,`${ep}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var cIt={fetchers:[qB,YB],resolvers:[GB,WB]},uIt=cIt;var Cq={};Kt(Cq,{NodeModulesLinker:()=>lv,NodeModulesMode:()=>dq,PnpLooseLinker:()=>cv,default:()=>P1t});Pt();Ye();Pt();Pt();var Uj=(t,e)=>`${t}@${e}`,hIe=(t,e)=>{let r=e.indexOf("#"),o=r>=0?e.substring(r+1):e;return Uj(t,o)};var mIe=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),o=e.check||r>=9,a=e.hoistingLimits||new Map,n={check:o,debugLevel:r,hoistingLimits:a,fastLookupPossible:!0},u;n.debugLevel>=0&&(u=Date.now());let A=mIt(t,n),p=!1,h=0;do p=_j(A,[A],new Set([A.locator]),new Map,n).anotherRoundNeeded,n.fastLookupPossible=!1,h++;while(p);if(n.debugLevel>=0&&console.log(`hoist time: ${Date.now()-u}ms, rounds: ${h}`),n.debugLevel>=1){let E=VB(A);if(_j(A,[A],new Set([A.locator]),new Map,n).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: +${E}, next tree: +${VB(A)}`);let v=yIe(A);if(v)throw new Error(`${v}, after hoisting finished: +${VB(A)}`)}return n.debugLevel>=2&&console.log(VB(A)),yIt(A)},AIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=n=>{if(!o.has(n)){o.add(n);for(let u of n.hoistedDependencies.values())r.set(u.name,u);for(let u of n.dependencies.values())n.peerNames.has(u.name)||a(u)}};return a(e),r},fIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=new Set,n=(u,A)=>{if(o.has(u))return;o.add(u);for(let h of u.hoistedDependencies.values())if(!A.has(h.name)){let E;for(let I of t)E=I.dependencies.get(h.name),E&&r.set(E.name,E)}let p=new Set;for(let h of u.dependencies.values())p.add(h.name);for(let h of u.dependencies.values())u.peerNames.has(h.name)||n(h,p)};return n(e,a),r},gIe=(t,e)=>{if(e.decoupled)return e;let{name:r,references:o,ident:a,locator:n,dependencies:u,originalDependencies:A,hoistedDependencies:p,peerNames:h,reasons:E,isHoistBorder:I,hoistPriority:v,dependencyKind:b,hoistedFrom:C,hoistedTo:T}=e,L={name:r,references:new Set(o),ident:a,locator:n,dependencies:new Map(u),originalDependencies:new Map(A),hoistedDependencies:new Map(p),peerNames:new Set(h),reasons:new Map(E),decoupled:!0,isHoistBorder:I,hoistPriority:v,dependencyKind:b,hoistedFrom:new Map(C),hoistedTo:new Map(T)},U=L.dependencies.get(r);return U&&U.ident==L.ident&&L.dependencies.set(r,L),t.dependencies.set(L.name,L),L},pIt=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let a of t.dependencies.values())t.peerNames.has(a.name)||r.set(a.name,[a.ident]);let o=Array.from(e.keys());o.sort((a,n)=>{let u=e.get(a),A=e.get(n);return A.hoistPriority!==u.hoistPriority?A.hoistPriority-u.hoistPriority:A.peerDependents.size!==u.peerDependents.size?A.peerDependents.size-u.peerDependents.size:A.dependents.size-u.dependents.size});for(let a of o){let n=a.substring(0,a.indexOf("@",1)),u=a.substring(n.length+1);if(!t.peerNames.has(n)){let A=r.get(n);A||(A=[],r.set(n,A)),A.indexOf(u)<0&&A.push(u)}}return r},Oj=t=>{let e=new Set,r=(o,a=new Set)=>{if(!a.has(o)){a.add(o);for(let n of o.peerNames)if(!t.peerNames.has(n)){let u=t.dependencies.get(n);u&&!e.has(u)&&r(u,a)}e.add(o)}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||r(o);return e},_j=(t,e,r,o,a,n=new Set)=>{let u=e[e.length-1];if(n.has(u))return{anotherRoundNeeded:!1,isGraphChanged:!1};n.add(u);let A=EIt(u),p=pIt(u,A),h=t==u?new Map:a.fastLookupPossible?AIt(e):fIt(e),E,I=!1,v=!1,b=new Map(Array.from(p.entries()).map(([T,L])=>[T,L[0]])),C=new Map;do{let T=dIt(t,e,r,h,b,p,o,C,a);T.isGraphChanged&&(v=!0),T.anotherRoundNeeded&&(I=!0),E=!1;for(let[L,U]of p)U.length>1&&!u.dependencies.has(L)&&(b.delete(L),U.shift(),b.set(L,U[0]),E=!0)}while(E);for(let T of u.dependencies.values())if(!u.peerNames.has(T.name)&&!r.has(T.locator)){r.add(T.locator);let L=_j(t,[...e,T],r,C,a);L.isGraphChanged&&(v=!0),L.anotherRoundNeeded&&(I=!0),r.delete(T.locator)}return{anotherRoundNeeded:I,isGraphChanged:v}},hIt=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},gIt=(t,e,r,o,a,n,u,A,{outputReason:p,fastLookupPossible:h})=>{let E,I=null,v=new Set;p&&(E=`${Array.from(e).map(L=>no(L)).join("\u2192")}`);let b=r[r.length-1],T=!(o.ident===b.ident);if(p&&!T&&(I="- self-reference"),T&&(T=o.dependencyKind!==1,p&&!T&&(I="- workspace")),T&&o.dependencyKind===2&&(T=!hIt(o),p&&!T&&(I="- external soft link with unhoisted dependencies")),T&&(T=b.dependencyKind!==1||b.hoistedFrom.has(o.name)||e.size===1,p&&!T&&(I=b.reasons.get(o.name))),T&&(T=!t.peerNames.has(o.name),p&&!T&&(I=`- cannot shadow peer: ${no(t.originalDependencies.get(o.name).locator)} at ${E}`)),T){let L=!1,U=a.get(o.name);if(L=!U||U.ident===o.ident,p&&!L&&(I=`- filled by: ${no(U.locator)} at ${E}`),L)for(let J=r.length-1;J>=1;J--){let le=r[J].dependencies.get(o.name);if(le&&le.ident!==o.ident){L=!1;let pe=A.get(b);pe||(pe=new Set,A.set(b,pe)),pe.add(o.name),p&&(I=`- filled by ${no(le.locator)} at ${r.slice(0,J).map(Ae=>no(Ae.locator)).join("\u2192")}`);break}}T=L}if(T&&(T=n.get(o.name)===o.ident,p&&!T&&(I=`- filled by: ${no(u.get(o.name)[0])} at ${E}`)),T){let L=!0,U=new Set(o.peerNames);for(let J=r.length-1;J>=1;J--){let te=r[J];for(let le of U){if(te.peerNames.has(le)&&te.originalDependencies.has(le))continue;let pe=te.dependencies.get(le);pe&&t.dependencies.get(le)!==pe&&(J===r.length-1?v.add(pe):(v=null,L=!1,p&&(I=`- peer dependency ${no(pe.locator)} from parent ${no(te.locator)} was not hoisted to ${E}`))),U.delete(le)}if(!L)break}T=L}if(T&&!h)for(let L of o.hoistedDependencies.values()){let U=a.get(L.name)||t.dependencies.get(L.name);if(!U||L.ident!==U.ident){T=!1,p&&(I=`- previously hoisted dependency mismatch, needed: ${no(L.locator)}, available: ${no(U?.locator)}`);break}}return v!==null&&v.size>0?{isHoistable:2,dependsOn:v,reason:I}:{isHoistable:T?0:1,reason:I}},CQ=t=>`${t.name}@${t.locator}`,dIt=(t,e,r,o,a,n,u,A,p)=>{let h=e[e.length-1],E=new Set,I=!1,v=!1,b=(U,J,te,le,pe)=>{if(E.has(le))return;let Ae=[...J,CQ(le)],ye=[...te,CQ(le)],ae=new Map,we=new Map;for(let ce of Oj(le)){let ne=gIt(h,r,[h,...U,le],ce,o,a,n,A,{outputReason:p.debugLevel>=2,fastLookupPossible:p.fastLookupPossible});if(we.set(ce,ne),ne.isHoistable===2)for(let ee of ne.dependsOn){let Ie=ae.get(ee.name)||new Set;Ie.add(ce.name),ae.set(ee.name,Ie)}}let Pe=new Set,g=(ce,ne,ee)=>{if(!Pe.has(ce)){Pe.add(ce),we.set(ce,{isHoistable:1,reason:ee});for(let Ie of ae.get(ce.name)||[])g(le.dependencies.get(Ie),ne,p.debugLevel>=2?`- peer dependency ${no(ce.locator)} from parent ${no(le.locator)} was not hoisted`:"")}};for(let[ce,ne]of we)ne.isHoistable===1&&g(ce,ne,ne.reason);let Ee=!1;for(let ce of we.keys())if(!Pe.has(ce)){v=!0;let ne=u.get(le);ne&&ne.has(ce.name)&&(I=!0),Ee=!0,le.dependencies.delete(ce.name),le.hoistedDependencies.set(ce.name,ce),le.reasons.delete(ce.name);let ee=h.dependencies.get(ce.name);if(p.debugLevel>=2){let Ie=Array.from(J).concat([le.locator]).map(ht=>no(ht)).join("\u2192"),ke=h.hoistedFrom.get(ce.name);ke||(ke=[],h.hoistedFrom.set(ce.name,ke)),ke.push(Ie),le.hoistedTo.set(ce.name,Array.from(e).map(ht=>no(ht.locator)).join("\u2192"))}if(!ee)h.ident!==ce.ident&&(h.dependencies.set(ce.name,ce),pe.add(ce));else for(let Ie of ce.references)ee.references.add(Ie)}if(le.dependencyKind===2&&Ee&&(I=!0),p.check){let ce=yIe(t);if(ce)throw new Error(`${ce}, after hoisting dependencies of ${[h,...U,le].map(ne=>no(ne.locator)).join("\u2192")}: +${VB(t)}`)}let De=Oj(le);for(let ce of De)if(Pe.has(ce)){let ne=we.get(ce);if((a.get(ce.name)===ce.ident||!le.reasons.has(ce.name))&&ne.isHoistable!==0&&le.reasons.set(ce.name,ne.reason),!ce.isHoistBorder&&ye.indexOf(CQ(ce))<0){E.add(le);let Ie=gIe(le,ce);b([...U,le],Ae,ye,Ie,T),E.delete(le)}}},C,T=new Set(Oj(h)),L=Array.from(e).map(U=>CQ(U));do{C=T,T=new Set;for(let U of C){if(U.locator===h.locator||U.isHoistBorder)continue;let J=gIe(h,U);b([],Array.from(r),L,J,T)}}while(T.size>0);return{anotherRoundNeeded:I,isGraphChanged:v}},yIe=t=>{let e=[],r=new Set,o=new Set,a=(n,u,A)=>{if(r.has(n)||(r.add(n),o.has(n)))return;let p=new Map(u);for(let h of n.dependencies.values())n.peerNames.has(h.name)||p.set(h.name,h);for(let h of n.originalDependencies.values()){let E=p.get(h.name),I=()=>`${Array.from(o).concat([n]).map(v=>no(v.locator)).join("\u2192")}`;if(n.peerNames.has(h.name)){let v=u.get(h.name);(v!==E||!v||v.ident!==h.ident)&&e.push(`${I()} - broken peer promise: expected ${h.ident} but found ${v&&v.ident}`)}else{let v=A.hoistedFrom.get(n.name),b=n.hoistedTo.get(h.name),C=`${v?` hoisted from ${v.join(", ")}`:""}`,T=`${b?` hoisted to ${b}`:""}`,L=`${I()}${C}`;E?E.ident!==h.ident&&e.push(`${L} - broken require promise for ${h.name}${T}: expected ${h.ident}, but found: ${E.ident}`):e.push(`${L} - broken require promise: no required dependency ${h.name}${T} found`)}}o.add(n);for(let h of n.dependencies.values())n.peerNames.has(h.name)||a(h,p,n);o.delete(n)};return a(t,t.dependencies,t),e.join(` +`)},mIt=(t,e)=>{let{identName:r,name:o,reference:a,peerNames:n}=t,u={name:o,references:new Set([a]),locator:Uj(r,a),ident:hIe(r,a),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(n),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},A=new Map([[t,u]]),p=(h,E)=>{let I=A.get(h),v=!!I;if(!I){let{name:b,identName:C,reference:T,peerNames:L,hoistPriority:U,dependencyKind:J}=h,te=e.hoistingLimits.get(E.locator);I={name:b,references:new Set([T]),locator:Uj(C,T),ident:hIe(C,T),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(L),reasons:new Map,decoupled:!0,isHoistBorder:te?te.has(b):!1,hoistPriority:U||0,dependencyKind:J||0,hoistedFrom:new Map,hoistedTo:new Map},A.set(h,I)}if(E.dependencies.set(h.name,I),E.originalDependencies.set(h.name,I),v){let b=new Set,C=T=>{if(!b.has(T)){b.add(T),T.decoupled=!1;for(let L of T.dependencies.values())T.peerNames.has(L.name)||C(L)}};C(I)}else for(let b of h.dependencies)p(b,I)};for(let h of t.dependencies)p(h,u);return u},Hj=t=>t.substring(0,t.indexOf("@",1)),yIt=t=>{let e={name:t.name,identName:Hj(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),o=(a,n,u)=>{let A=r.has(a),p;if(n===a)p=u;else{let{name:h,references:E,locator:I}=a;p={name:h,identName:Hj(I),references:E,dependencies:new Set}}if(u.dependencies.add(p),!A){r.add(a);for(let h of a.dependencies.values())a.peerNames.has(h.name)||o(h,a,p);r.delete(a)}};for(let a of t.dependencies.values())o(a,t,e);return e},EIt=t=>{let e=new Map,r=new Set([t]),o=u=>`${u.name}@${u.ident}`,a=u=>{let A=o(u),p=e.get(A);return p||(p={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(A,p)),p},n=(u,A)=>{let p=!!r.has(A);if(a(A).dependents.add(u.ident),!p){r.add(A);for(let E of A.dependencies.values()){let I=a(E);I.hoistPriority=Math.max(I.hoistPriority,E.hoistPriority),A.peerNames.has(E.name)?I.peerDependents.add(A.ident):n(A,E)}}};for(let u of t.dependencies.values())t.peerNames.has(u.name)||n(t,u);return e},no=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let o=t.substring(e+1);if(o==="workspace:.")return".";if(o){let a=(o.indexOf("#")>0?o.split("#")[1]:o).replace("npm:","");return o.startsWith("virtual")&&(r=`v:${r}`),a.startsWith("workspace")&&(r=`w:${r}`,a=""),`${r}${a?`@${a}`:""}`}else return`${r}`},dIe=5e4,VB=t=>{let e=0,r=(a,n,u="")=>{if(e>dIe||n.has(a))return"";e++;let A=Array.from(a.dependencies.values()).sort((h,E)=>h.name===E.name?0:h.name>E.name?1:-1),p="";n.add(a);for(let h=0;h":"")+(v!==E.name?`a:${E.name}:`:"")+no(E.locator)+(I?` ${I}`:"")} +`,p+=r(E,n,`${u}${hdIe?` +Tree is too large, part of the tree has been dunped +`:"")};var KB=(o=>(o.WORKSPACES="workspaces",o.DEPENDENCIES="dependencies",o.NONE="none",o))(KB||{}),EIe="node_modules",B0="$wsroot$";var JB=(t,e)=>{let{packageTree:r,hoistingLimits:o,errors:a,preserveSymlinksRequired:n}=wIt(t,e),u=null;if(a.length===0){let A=mIe(r,{hoistingLimits:o});u=BIt(t,A,e)}return{tree:u,errors:a,preserveSymlinksRequired:n}},gA=t=>`${t.name}@${t.reference}`,qj=t=>{let e=new Map;for(let[r,o]of t.entries())if(!o.dirList){let a=e.get(o.locator);a||(a={target:o.target,linkType:o.linkType,locations:[],aliases:o.aliases},e.set(o.locator,a)),a.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((o,a)=>{let n=o.split(K.delimiter).length,u=a.split(K.delimiter).length;return a===o?0:n!==u?u-n:a>o?1:-1});return e},CIe=(t,e)=>{let r=W.isVirtualLocator(t)?W.devirtualizeLocator(t):t,o=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e;return W.areLocatorsEqual(r,o)},jj=(t,e,r,o)=>{if(t.linkType!=="SOFT")return!1;let a=ue.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return K.contains(o,a)===null},CIt=t=>{let e=t.getPackageInformation(t.topLevel);if(e===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");if(t.findPackageLocator(e.packageLocation)===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let o=ue.toPortablePath(e.packageLocation.slice(0,-1)),a=new Map,n={children:new Map},u=t.getDependencyTreeRoots(),A=new Map,p=new Set,h=(v,b)=>{let C=gA(v);if(p.has(C))return;p.add(C);let T=t.getPackageInformation(v);if(T){let L=b?gA(b):"";if(gA(v)!==L&&T.linkType==="SOFT"&&!jj(T,v,t,o)){let U=wIe(T,v,t);(!A.get(U)||v.reference.startsWith("workspace:"))&&A.set(U,v)}for(let[U,J]of T.packageDependencies)J!==null&&(T.packagePeers.has(U)||h(t.getLocator(U,J),v))}};for(let v of u)h(v,null);let E=o.split(K.sep);for(let v of A.values()){let b=t.getPackageInformation(v),T=ue.toPortablePath(b.packageLocation.slice(0,-1)).split(K.sep).slice(E.length),L=n;for(let U of T){let J=L.children.get(U);J||(J={children:new Map},L.children.set(U,J)),L=J}L.workspaceLocator=v}let I=(v,b)=>{if(v.workspaceLocator){let C=gA(b),T=a.get(C);T||(T=new Set,a.set(C,T)),T.add(v.workspaceLocator)}for(let C of v.children.values())I(C,v.workspaceLocator||b)};for(let v of n.children.values())I(v,n.workspaceLocator);return a},wIt=(t,e)=>{let r=[],o=!1,a=new Map,n=CIt(t),u=t.getPackageInformation(t.topLevel);if(u===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let A=t.findPackageLocator(u.packageLocation);if(A===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let p=ue.toPortablePath(u.packageLocation.slice(0,-1)),h={name:A.name,identName:A.name,reference:A.reference,peerNames:u.packagePeers,dependencies:new Set,dependencyKind:1},E=new Map,I=(b,C)=>`${gA(C)}:${b}`,v=(b,C,T,L,U,J,te,le)=>{let pe=I(b,T),Ae=E.get(pe),ye=!!Ae;!ye&&T.name===A.name&&T.reference===A.reference&&(Ae=h,E.set(pe,h));let ae=jj(C,T,t,p);if(!Ae){let ce=0;ae?ce=2:C.linkType==="SOFT"&&T.name.endsWith(B0)&&(ce=1),Ae={name:b,identName:T.name,reference:T.reference,dependencies:new Set,peerNames:ce===1?new Set:C.packagePeers,dependencyKind:ce},E.set(pe,Ae)}let we;if(ae?we=2:U.linkType==="SOFT"?we=1:we=0,Ae.hoistPriority=Math.max(Ae.hoistPriority||0,we),le&&!ae){let ce=gA({name:L.identName,reference:L.reference}),ne=a.get(ce)||new Set;a.set(ce,ne),ne.add(Ae.name)}let Pe=new Map(C.packageDependencies);if(e.project){let ce=e.project.workspacesByCwd.get(ue.toPortablePath(C.packageLocation.slice(0,-1)));if(ce){let ne=new Set([...Array.from(ce.manifest.peerDependencies.values(),ee=>W.stringifyIdent(ee)),...Array.from(ce.manifest.peerDependenciesMeta.keys())]);for(let ee of ne)Pe.has(ee)||(Pe.set(ee,J.get(ee)||null),Ae.peerNames.add(ee))}}let g=gA({name:T.name.replace(B0,""),reference:T.reference}),Ee=n.get(g);if(Ee)for(let ce of Ee)Pe.set(`${ce.name}${B0}`,ce.reference);(C!==U||C.linkType!=="SOFT"||!ae&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(te)))&&L.dependencies.add(Ae);let De=T!==A&&C.linkType==="SOFT"&&!T.name.endsWith(B0)&&!ae;if(!ye&&!De){let ce=new Map;for(let[ne,ee]of Pe)if(ee!==null){let Ie=t.getLocator(ne,ee),ke=t.getLocator(ne.replace(B0,""),ee),ht=t.getPackageInformation(ke);if(ht===null)throw new Error("Assertion failed: Expected the package to have been registered");let H=jj(ht,Ie,t,p);if(e.validateExternalSoftLinks&&e.project&&H){ht.packageDependencies.size>0&&(o=!0);for(let[_e,Te]of ht.packageDependencies)if(Te!==null){let Je=W.parseLocator(Array.isArray(Te)?`${Te[0]}@${Te[1]}`:`${_e}@${Te}`);if(gA(Je)!==gA(Ie)){let He=Pe.get(_e);if(He){let x=W.parseLocator(Array.isArray(He)?`${He[0]}@${He[1]}`:`${_e}@${He}`);CIe(x,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${T.name}@${T.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with parent dependency ${W.prettyLocator(e.project.configuration,x)}`})}else{let x=ce.get(_e);if(x){let w=x.target,S=W.parseLocator(Array.isArray(w)?`${w[0]}@${w[1]}`:`${_e}@${w}`);CIe(S,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${T.name}@${T.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with dependency ${W.prettyLocator(e.project.configuration,S)} from sibling portal ${W.prettyIdent(e.project.configuration,W.parseIdent(x.portal.name))}`})}else ce.set(_e,{target:Je.reference,portal:Ie})}}}}let lt=e.hoistingLimitsByCwd?.get(te),Re=H?te:K.relative(p,ue.toPortablePath(ht.packageLocation))||Bt.dot,Qe=e.hoistingLimitsByCwd?.get(Re);v(ne,ht,Ie,Ae,C,Pe,Re,lt==="dependencies"||Qe==="dependencies"||Qe==="workspaces")}}};return v(A.name,u,A,h,u,u.packageDependencies,Bt.dot,!1),{packageTree:h,hoistingLimits:a,errors:r,preserveSymlinksRequired:o}};function wIe(t,e,r){let o=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return ue.toPortablePath(o||t.packageLocation)}function IIt(t,e,r){let o=e.getLocator(t.name.replace(B0,""),t.reference),a=e.getPackageInformation(o);if(a===null)throw new Error("Assertion failed: Expected the package to be registered");return r.pnpifyFs?{linkType:"SOFT",target:ue.toPortablePath(a.packageLocation)}:{linkType:a.linkType,target:wIe(a,t,e)}}var BIt=(t,e,r)=>{let o=new Map,a=(E,I,v)=>{let{linkType:b,target:C}=IIt(E,t,r);return{locator:gA(E),nodePath:I,target:C,linkType:b,aliases:v}},n=E=>{let[I,v]=E.split("/");return v?{scope:I,name:v}:{scope:null,name:I}},u=new Set,A=(E,I,v)=>{if(u.has(E))return;u.add(E);let b=Array.from(E.references).sort().join("#");for(let C of E.dependencies){let T=Array.from(C.references).sort().join("#");if(C.identName===E.identName.replace(B0,"")&&T===b)continue;let L=Array.from(C.references).sort(),U={name:C.identName,reference:L[0]},{name:J,scope:te}=n(C.name),le=te?[te,J]:[J],pe=K.join(I,EIe),Ae=K.join(pe,...le),ye=`${v}/${U.name}`,ae=a(U,v,L.slice(1)),we=!1;if(ae.linkType==="SOFT"&&r.project){let Pe=r.project.workspacesByCwd.get(ae.target.slice(0,-1));we=!!(Pe&&!Pe.manifest.name)}if(!C.name.endsWith(B0)&&!we){let Pe=o.get(Ae);if(Pe){if(Pe.dirList)throw new Error(`Assertion failed: ${Ae} cannot merge dir node with leaf node`);{let De=W.parseLocator(Pe.locator),ce=W.parseLocator(ae.locator);if(Pe.linkType!==ae.linkType)throw new Error(`Assertion failed: ${Ae} cannot merge nodes with different link types ${Pe.nodePath}/${W.stringifyLocator(De)} and ${v}/${W.stringifyLocator(ce)}`);if(De.identHash!==ce.identHash)throw new Error(`Assertion failed: ${Ae} cannot merge nodes with different idents ${Pe.nodePath}/${W.stringifyLocator(De)} and ${v}/s${W.stringifyLocator(ce)}`);ae.aliases=[...ae.aliases,...Pe.aliases,W.parseLocator(Pe.locator).reference]}}o.set(Ae,ae);let g=Ae.split("/"),Ee=g.indexOf(EIe);for(let De=g.length-1;Ee>=0&&De>Ee;De--){let ce=ue.toPortablePath(g.slice(0,De).join(K.sep)),ne=g[De],ee=o.get(ce);if(!ee)o.set(ce,{dirList:new Set([ne])});else if(ee.dirList){if(ee.dirList.has(ne))break;ee.dirList.add(ne)}}}A(C,ae.linkType==="SOFT"?ae.target:Ae,ye)}},p=a({name:e.name,reference:Array.from(e.references)[0]},"",[]),h=p.target;return o.set(h,p),A(e,h,""),o};Ye();Ye();Pt();Pt();nA();Nl();var lq={};Kt(lq,{PnpInstaller:()=>dm,PnpLinker:()=>P0,UnplugCommand:()=>x0,default:()=>$It,getPnpPath:()=>S0,jsInstallUtils:()=>mA,pnpUtils:()=>av,quotePathIfNeeded:()=>s1e});Pt();var i1e=Be("url");Ye();Ye();Pt();Pt();var IIe={["DEFAULT"]:{collapsed:!1,next:{["*"]:"DEFAULT"}},["TOP_LEVEL"]:{collapsed:!1,next:{fallbackExclusionList:"FALLBACK_EXCLUSION_LIST",packageRegistryData:"PACKAGE_REGISTRY_DATA",["*"]:"DEFAULT"}},["FALLBACK_EXCLUSION_LIST"]:{collapsed:!1,next:{["*"]:"FALLBACK_EXCLUSION_ENTRIES"}},["FALLBACK_EXCLUSION_ENTRIES"]:{collapsed:!0,next:{["*"]:"FALLBACK_EXCLUSION_DATA"}},["FALLBACK_EXCLUSION_DATA"]:{collapsed:!0,next:{["*"]:"DEFAULT"}},["PACKAGE_REGISTRY_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_REGISTRY_ENTRIES"}},["PACKAGE_REGISTRY_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_STORE_DATA"}},["PACKAGE_STORE_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_STORE_ENTRIES"}},["PACKAGE_STORE_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_INFORMATION_DATA"}},["PACKAGE_INFORMATION_DATA"]:{collapsed:!1,next:{packageDependencies:"PACKAGE_DEPENDENCIES",["*"]:"DEFAULT"}},["PACKAGE_DEPENDENCIES"]:{collapsed:!1,next:{["*"]:"PACKAGE_DEPENDENCY"}},["PACKAGE_DEPENDENCY"]:{collapsed:!0,next:{["*"]:"DEFAULT"}}};function vIt(t,e,r){let o="";o+="[";for(let a=0,n=t.length;a"u"||(A!==0&&(a+=", "),a+=JSON.stringify(p),a+=": ",a+=wQ(p,h,e,r).replace(/^ +/g,""),A+=1)}return a+="}",a}function SIt(t,e,r){let o=Object.keys(t),a=`${r} `,n="";n+=r,n+=`{ +`;let u=0;for(let A=0,p=o.length;A"u"||(u!==0&&(n+=",",n+=` +`),n+=a,n+=JSON.stringify(h),n+=": ",n+=wQ(h,E,e,a).replace(/^ +/g,""),u+=1)}return u!==0&&(n+=` +`),n+=r,n+="}",n}function wQ(t,e,r,o){let{next:a}=IIe[r],n=a[t]||a["*"];return BIe(e,n,o)}function BIe(t,e,r){let{collapsed:o}=IIe[e];return Array.isArray(t)?o?vIt(t,e,r):DIt(t,e,r):typeof t=="object"&&t!==null?o?PIt(t,e,r):SIt(t,e,r):JSON.stringify(t)}function vIe(t){return BIe(t,"TOP_LEVEL","")}function zB(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function xIt(t){let e=new Map,r=zB(t.fallbackExclusionList||[],[({name:o,reference:a})=>o,({name:o,reference:a})=>a]);for(let{name:o,reference:a}of r){let n=e.get(o);typeof n>"u"&&e.set(o,n=new Set),n.add(a)}return Array.from(e).map(([o,a])=>[o,Array.from(a)])}function bIt(t){return zB(t.fallbackPool||[],([e])=>e)}function kIt(t){let e=[];for(let[r,o]of zB(t.packageRegistry,([a])=>a===null?"0":`1${a}`)){let a=[];e.push([r,a]);for(let[n,{packageLocation:u,packageDependencies:A,packagePeers:p,linkType:h,discardFromLookup:E}]of zB(o,([I])=>I===null?"0":`1${I}`)){let I=[];r!==null&&n!==null&&!A.has(r)&&I.push([r,n]);for(let[C,T]of zB(A.entries(),([L])=>L))I.push([C,T]);let v=p&&p.size>0?Array.from(p):void 0,b=E||void 0;a.push([n,{packageLocation:u,packageDependencies:I,packagePeers:v,linkType:h,discardFromLookup:b}])}}return e}function XB(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:xIt(t),fallbackPool:bIt(t),packageRegistryData:kIt(t)}}var SIe=$e(PIe());function xIe(t,e){return[t?`${t} +`:"",`/* eslint-disable */ +`,`"use strict"; +`,` +`,e,` +`,(0,SIe.default)()].join("")}function QIt(t){return JSON.stringify(t,null,2)}function FIt(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\ +`)}'`}function TIt(t){return[`const RAW_RUNTIME_STATE = +`,`${FIt(vIe(t))}; + +`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`,` return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); +`,`} +`].join("")}function RIt(){return[`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`,` const fs = require('fs'); +`,` const path = require('path'); +`,` const pnpDataFilepath = path.resolve(__dirname, ${JSON.stringify(dr.pnpData)}); +`,` return hydrateRuntimeState(JSON.parse(fs.readFileSync(pnpDataFilepath, 'utf8')), {basePath: basePath || __dirname}); +`,`} +`].join("")}function bIe(t){let e=XB(t),r=TIt(e);return xIe(t.shebang,r)}function kIe(t){let e=XB(t),r=RIt(),o=xIe(t.shebang,r);return{dataFile:QIt(e),loaderFile:o}}Pt();function Yj(t,{basePath:e}){let r=ue.toPortablePath(e),o=K.resolve(r),a=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,n=new Map,u=new Map(t.packageRegistryData.map(([I,v])=>[I,new Map(v.map(([b,C])=>{if(I===null!=(b===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let T=C.discardFromLookup??!1,L={name:I,reference:b},U=n.get(C.packageLocation);U?(U.discardFromLookup=U.discardFromLookup&&T,T||(U.locator=L)):n.set(C.packageLocation,{locator:L,discardFromLookup:T});let J=null;return[b,{packageDependencies:new Map(C.packageDependencies),packagePeers:new Set(C.packagePeers),linkType:C.linkType,discardFromLookup:T,get packageLocation(){return J||(J=K.join(o,C.packageLocation))}}]}))])),A=new Map(t.fallbackExclusionList.map(([I,v])=>[I,new Set(v)])),p=new Map(t.fallbackPool),h=t.dependencyTreeRoots,E=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:h,enableTopLevelFallback:E,fallbackExclusionList:A,fallbackPool:p,ignorePattern:a,packageLocatorsByLocations:n,packageRegistry:u}}Pt();Pt();var rp=Be("module"),gm=Be("url"),tq=Be("util");var Oo=Be("url");var RIe=$e(Be("assert"));var Wj=Array.isArray,ZB=JSON.stringify,$B=Object.getOwnPropertyNames,pm=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Vj=(t,e)=>RegExp.prototype.exec.call(t,e),Kj=(t,...e)=>RegExp.prototype[Symbol.replace].apply(t,e),v0=(t,...e)=>String.prototype.endsWith.apply(t,e),Jj=(t,...e)=>String.prototype.includes.apply(t,e),zj=(t,...e)=>String.prototype.lastIndexOf.apply(t,e),ev=(t,...e)=>String.prototype.indexOf.apply(t,e),QIe=(t,...e)=>String.prototype.replace.apply(t,e),D0=(t,...e)=>String.prototype.slice.apply(t,e),dA=(t,...e)=>String.prototype.startsWith.apply(t,e),FIe=Map,TIe=JSON.parse;function tv(t,e,r){return class extends r{constructor(...o){super(e(...o)),this.code=t,this.name=`${r.name} [${t}]`}}}var NIe=tv("ERR_PACKAGE_IMPORT_NOT_DEFINED",(t,e,r)=>`Package import specifier "${t}" is not defined${e?` in package ${e}package.json`:""} imported from ${r}`,TypeError),Xj=tv("ERR_INVALID_MODULE_SPECIFIER",(t,e,r=void 0)=>`Invalid module "${t}" ${e}${r?` imported from ${r}`:""}`,TypeError),LIe=tv("ERR_INVALID_PACKAGE_TARGET",(t,e,r,o=!1,a=void 0)=>{let n=typeof r=="string"&&!o&&r.length&&!dA(r,"./");return e==="."?((0,RIe.default)(o===!1),`Invalid "exports" main target ${ZB(r)} defined in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`):`Invalid "${o?"imports":"exports"}" target ${ZB(r)} defined for '${e}' in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`},Error),rv=tv("ERR_INVALID_PACKAGE_CONFIG",(t,e,r)=>`Invalid package config ${t}${e?` while importing ${e}`:""}${r?`. ${r}`:""}`,Error),MIe=tv("ERR_PACKAGE_PATH_NOT_EXPORTED",(t,e,r=void 0)=>e==="."?`No "exports" main defined in ${t}package.json${r?` imported from ${r}`:""}`:`Package subpath '${e}' is not defined by "exports" in ${t}package.json${r?` imported from ${r}`:""}`,Error);var BQ=Be("url");function OIe(t,e){let r=Object.create(null);for(let o=0;oe):t+e}nv(r,t,o,u,a)}Vj(_Ie,D0(t,2))!==null&&nv(r,t,o,u,a);let p=new URL(t,o),h=p.pathname,E=new URL(".",o).pathname;if(dA(h,E)||nv(r,t,o,u,a),e==="")return p;if(Vj(_Ie,e)!==null){let I=n?QIe(r,"*",()=>e):r+e;MIt(I,o,u,a)}return n?new URL(Kj(HIe,p.href,()=>e)):new URL(e,p)}function UIt(t){let e=+t;return`${e}`!==t?!1:e>=0&&e<4294967295}function qC(t,e,r,o,a,n,u,A){if(typeof e=="string")return OIt(e,r,o,t,a,n,u,A);if(Wj(e)){if(e.length===0)return null;let p;for(let h=0;hn?-1:n>a||r===-1?1:o===-1||t.length>e.length?-1:e.length>t.length?1:0}function _It(t,e,r){if(typeof t=="string"||Wj(t))return!0;if(typeof t!="object"||t===null)return!1;let o=$B(t),a=!1,n=0;for(let u=0;u=h.length&&v0(e,I)&&qIe(n,h)===1&&zj(h,"*")===E&&(n=h,u=D0(e,E,e.length-I.length))}}if(n){let p=r[n],h=qC(t,p,u,n,o,!0,!1,a);return h==null&&Zj(e,t,o),h}Zj(e,t,o)}function YIe({name:t,base:e,conditions:r,readFileSyncFn:o}){if(t==="#"||dA(t,"#/")||v0(t,"/")){let u="is not a valid internal imports specifier name";throw new Xj(t,u,(0,Oo.fileURLToPath)(e))}let a,n=UIe(e,o);if(n.exists){a=(0,Oo.pathToFileURL)(n.pjsonPath);let u=n.imports;if(u)if(pm(u,t)&&!Jj(t,"*")){let A=qC(a,u[t],"",t,e,!1,!0,r);if(A!=null)return A}else{let A="",p,h=$B(u);for(let E=0;E=I.length&&v0(t,b)&&qIe(A,I)===1&&zj(I,"*")===v&&(A=I,p=D0(t,v,t.length-b.length))}}if(A){let E=u[A],I=qC(a,E,p,A,e,!0,!0,r);if(I!=null)return I}}}LIt(t,a,e)}Pt();var jIt=new Set(["BUILTIN_NODE_RESOLUTION_FAILED","MISSING_DEPENDENCY","MISSING_PEER_DEPENDENCY","QUALIFIED_PATH_RESOLUTION_FAILED","UNDECLARED_DEPENDENCY"]);function $i(t,e,r={},o){o??=jIt.has(t)?"MODULE_NOT_FOUND":t;let a={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...a,value:o},pnpCode:{...a,value:t},data:{...a,value:r}})}function au(t){return ue.normalize(ue.fromPortablePath(t))}var JIe=$e(VIe());function zIe(t){return qIt(),eq[t]}var eq;function qIt(){eq||(eq={"--conditions":[],...KIe(GIt()),...KIe(process.execArgv)})}function KIe(t){return(0,JIe.default)({"--conditions":[String],"-C":"--conditions"},{argv:t,permissive:!0})}function GIt(){let t=[],e=YIt(process.env.NODE_OPTIONS||"",t);return t.length,e}function YIt(t,e){let r=[],o=!1,a=!0;for(let n=0;nparseInt(t,10)),XIe=hm>19||hm===19&&sv>=2||hm===18&&sv>=13,Bzt=hm===20&&sv<6||hm===19&&sv>=3,vzt=hm>19||hm===19&&sv>=6;function ZIe(t){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(t=t.map(e=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(e)))),XIe)process.send({"watch:require":t});else for(let e of t)process.send({"watch:require":e})}function rq(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,o=Number(process.env.PNP_DEBUG_LEVEL),a=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,n=/^(\/|\.{1,2}(\/|$))/,u=/\/$/,A=/^\.{0,2}\//,p={name:null,reference:null},h=[],E=new Set;if(t.enableTopLevelFallback===!0&&h.push(p),e.compatibilityMode!==!1)for(let Re of["react-scripts","gatsby"]){let Qe=t.packageRegistry.get(Re);if(Qe)for(let be of Qe.keys()){if(be===null)throw new Error("Assertion failed: This reference shouldn't be null");h.push({name:Re,reference:be})}}let{ignorePattern:I,packageRegistry:v,packageLocatorsByLocations:b}=t;function C(Re,Qe){return{fn:Re,args:Qe,error:null,result:null}}function T(Re){let Qe=process.stderr?.hasColors?.()??process.stdout.isTTY,be=(Je,He)=>`\x1B[${Je}m${He}\x1B[0m`,_e=Re.error;console.error(_e?be("31;1",`\u2716 ${Re.error?.message.replace(/\n.*/s,"")}`):be("33;1","\u203C Resolution")),Re.args.length>0&&console.error();for(let Je of Re.args)console.error(` ${be("37;1","In \u2190")} ${(0,tq.inspect)(Je,{colors:Qe,compact:!0})}`);Re.result&&(console.error(),console.error(` ${be("37;1","Out \u2192")} ${(0,tq.inspect)(Re.result,{colors:Qe,compact:!0})}`));let Te=new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2)??[];if(Te.length>0){console.error();for(let Je of Te)console.error(` ${be("38;5;244",Je)}`)}console.error()}function L(Re,Qe){if(e.allowDebug===!1)return Qe;if(Number.isFinite(o)){if(o>=2)return(...be)=>{let _e=C(Re,be);try{return _e.result=Qe(...be)}catch(Te){throw _e.error=Te}finally{T(_e)}};if(o>=1)return(...be)=>{try{return Qe(...be)}catch(_e){let Te=C(Re,be);throw Te.error=_e,T(Te),_e}}}return Qe}function U(Re){let Qe=g(Re);if(!Qe)throw $i("INTERNAL","Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return Qe}function J(Re){if(Re.name===null)return!0;for(let Qe of t.dependencyTreeRoots)if(Qe.name===Re.name&&Qe.reference===Re.reference)return!0;return!1}let te=new Set(["node","require",...zIe("--conditions")]);function le(Re,Qe=te,be){let _e=ce(K.join(Re,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(_e===null)throw $i("INTERNAL",`The locator that owns the "${Re}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:Te}=U(_e),Je=K.join(Te,dr.manifest);if(!e.fakeFs.existsSync(Je))return null;let He=JSON.parse(e.fakeFs.readFileSync(Je,"utf8"));if(He.exports==null)return null;let x=K.contains(Te,Re);if(x===null)throw $i("INTERNAL","unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");x!=="."&&!A.test(x)&&(x=`./${x}`);try{let w=GIe({packageJSONUrl:(0,gm.pathToFileURL)(ue.fromPortablePath(Je)),packageSubpath:x,exports:He.exports,base:be?(0,gm.pathToFileURL)(ue.fromPortablePath(be)):null,conditions:Qe});return ue.toPortablePath((0,gm.fileURLToPath)(w))}catch(w){throw $i("EXPORTS_RESOLUTION_FAILED",w.message,{unqualifiedPath:au(Re),locator:_e,pkgJson:He,subpath:au(x),conditions:Qe},w.code)}}function pe(Re,Qe,{extensions:be}){let _e;try{Qe.push(Re),_e=e.fakeFs.statSync(Re)}catch{}if(_e&&!_e.isDirectory())return e.fakeFs.realpathSync(Re);if(_e&&_e.isDirectory()){let Te;try{Te=JSON.parse(e.fakeFs.readFileSync(K.join(Re,dr.manifest),"utf8"))}catch{}let Je;if(Te&&Te.main&&(Je=K.resolve(Re,Te.main)),Je&&Je!==Re){let He=pe(Je,Qe,{extensions:be});if(He!==null)return He}}for(let Te=0,Je=be.length;Te{let x=JSON.stringify(He.name);if(_e.has(x))return;_e.add(x);let w=Ee(He);for(let S of w)if(U(S).packagePeers.has(Re))Te(S);else{let F=be.get(S.name);typeof F>"u"&&be.set(S.name,F=new Set),F.add(S.reference)}};Te(Qe);let Je=[];for(let He of[...be.keys()].sort())for(let x of[...be.get(He)].sort())Je.push({name:He,reference:x});return Je}function ce(Re,{resolveIgnored:Qe=!1,includeDiscardFromLookup:be=!1}={}){if(ae(Re)&&!Qe)return null;let _e=K.relative(t.basePath,Re);_e.match(n)||(_e=`./${_e}`),_e.endsWith("/")||(_e=`${_e}/`);do{let Te=b.get(_e);if(typeof Te>"u"||Te.discardFromLookup&&!be){_e=_e.substring(0,_e.lastIndexOf("/",_e.length-2)+1);continue}return Te.locator}while(_e!=="");return null}function ne(Re){try{return e.fakeFs.readFileSync(ue.toPortablePath(Re),"utf8")}catch(Qe){if(Qe.code==="ENOENT")return;throw Qe}}function ee(Re,Qe,{considerBuiltins:be=!0}={}){if(Re.startsWith("#"))throw new Error("resolveToUnqualified can not handle private import mappings");if(Re==="pnpapi")return ue.toPortablePath(e.pnpapiResolution);if(be&&(0,rp.isBuiltin)(Re))return null;let _e=au(Re),Te=Qe&&au(Qe);if(Qe&&ae(Qe)&&(!K.isAbsolute(Re)||ce(Re)===null)){let x=ye(Re,Qe);if(x===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) + +Require request: "${_e}" +Required by: ${Te} +`,{request:_e,issuer:Te});return ue.toPortablePath(x)}let Je,He=Re.match(a);if(He){if(!Qe)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:_e,issuer:Te});let[,x,w]=He,S=ce(Qe);if(!S){let Ne=ye(Re,Qe);if(Ne===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). + +Require path: "${_e}" +Required by: ${Te} +`,{request:_e,issuer:Te});return ue.toPortablePath(Ne)}let F=U(S).packageDependencies.get(x),z=null;if(F==null&&S.name!==null){let Ne=t.fallbackExclusionList.get(S.name);if(!Ne||!Ne.has(S.reference)){for(let dt=0,jt=h.length;dtJ(ot))?X=$i("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${x} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${S.name}@${S.reference} (via ${Te}) +${Ne.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} +`).join("")} +`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x,brokenAncestors:Ne}):X=$i("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${x} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${S.name}@${S.reference} (via ${Te}) + +${Ne.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} +`).join("")} +`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x,brokenAncestors:Ne})}else F===void 0&&(!be&&(0,rp.isBuiltin)(Re)?J(S)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${x} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${Te} +`,{request:_e,issuer:Te,dependencyName:x}):X=$i("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${x}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${x} isn't otherwise declared in ${S.name}'s dependencies, this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${Te} +`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x}):J(S)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${Te} +`,{request:_e,issuer:Te,dependencyName:x}):X=$i("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${x}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${S.name}@${S.reference} (via ${Te}) +`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x}));if(F==null){if(z===null||X===null)throw X||new Error("Assertion failed: Expected an error to have been set");F=z;let Ne=X.message.replace(/\n.*/g,"");X.message=Ne,!E.has(Ne)&&o!==0&&(E.add(Ne),process.emitWarning(X))}let Z=Array.isArray(F)?{name:F[0],reference:F[1]}:{name:x,reference:F},ie=U(Z);if(!ie.packageLocation)throw $i("MISSING_DEPENDENCY",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. + +Required package: ${Z.name}@${Z.reference}${Z.name!==_e?` (via "${_e}")`:""} +Required by: ${S.name}@${S.reference} (via ${Te}) +`,{request:_e,issuer:Te,dependencyLocator:Object.assign({},Z)});let Se=ie.packageLocation;w?Je=K.join(Se,w):Je=Se}else if(K.isAbsolute(Re))Je=K.normalize(Re);else{if(!Qe)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:_e,issuer:Te});let x=K.resolve(Qe);Qe.match(u)?Je=K.normalize(K.join(x,Re)):Je=K.normalize(K.join(K.dirname(x),Re))}return K.normalize(Je)}function Ie(Re,Qe,be=te,_e){if(n.test(Re))return Qe;let Te=le(Qe,be,_e);return Te?K.normalize(Te):Qe}function ke(Re,{extensions:Qe=Object.keys(rp.Module._extensions)}={}){let be=[],_e=pe(Re,be,{extensions:Qe});if(_e)return K.normalize(_e);{ZIe(be.map(He=>ue.fromPortablePath(He)));let Te=au(Re),Je=ce(Re);if(Je){let{packageLocation:He}=U(Je),x=!0;try{e.fakeFs.accessSync(He)}catch(w){if(w?.code==="ENOENT")x=!1;else{let S=(w?.message??w??"empty exception thrown").replace(/^[A-Z]/,y=>y.toLowerCase());throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Required package exists but could not be accessed (${S}). + +Missing package: ${Je.name}@${Je.reference} +Expected package location: ${au(He)} +`,{unqualifiedPath:Te,extensions:Qe})}}if(!x){let w=He.includes("/unplugged/")?"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).":"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.";throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`${w} + +Missing package: ${Je.name}@${Je.reference} +Expected package location: ${au(He)} +`,{unqualifiedPath:Te,extensions:Qe})}}throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Qualified path resolution failed: we looked for the following paths, but none could be accessed. + +Source path: ${Te} +${be.map(He=>`Not found: ${au(He)} +`).join("")}`,{unqualifiedPath:Te,extensions:Qe})}}function ht(Re,Qe,be){if(!Qe)throw new Error("Assertion failed: An issuer is required to resolve private import mappings");let _e=YIe({name:Re,base:(0,gm.pathToFileURL)(ue.fromPortablePath(Qe)),conditions:be.conditions??te,readFileSyncFn:ne});if(_e instanceof URL)return ke(ue.toPortablePath((0,gm.fileURLToPath)(_e)),{extensions:be.extensions});if(_e.startsWith("#"))throw new Error("Mapping from one private import to another isn't allowed");return H(_e,Qe,be)}function H(Re,Qe,be={}){try{if(Re.startsWith("#"))return ht(Re,Qe,be);let{considerBuiltins:_e,extensions:Te,conditions:Je}=be,He=ee(Re,Qe,{considerBuiltins:_e});if(Re==="pnpapi")return He;if(He===null)return null;let x=()=>Qe!==null?ae(Qe):!1,w=(!_e||!(0,rp.isBuiltin)(Re))&&!x()?Ie(Re,He,Je,Qe):He;return ke(w,{extensions:Te})}catch(_e){throw Object.hasOwn(_e,"pnpCode")&&Object.assign(_e.data,{request:au(Re),issuer:Qe&&au(Qe)}),_e}}function lt(Re){let Qe=K.normalize(Re),be=mi.resolveVirtual(Qe);return be!==Qe?be:null}return{VERSIONS:we,topLevel:Pe,getLocator:(Re,Qe)=>Array.isArray(Qe)?{name:Qe[0],reference:Qe[1]}:{name:Re,reference:Qe},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let Re=[];for(let[Qe,be]of v)for(let _e of be.keys())Qe!==null&&_e!==null&&Re.push({name:Qe,reference:_e});return Re},getPackageInformation:Re=>{let Qe=g(Re);if(Qe===null)return null;let be=ue.fromPortablePath(Qe.packageLocation);return{...Qe,packageLocation:be}},findPackageLocator:Re=>ce(ue.toPortablePath(Re)),resolveToUnqualified:L("resolveToUnqualified",(Re,Qe,be)=>{let _e=Qe!==null?ue.toPortablePath(Qe):null,Te=ee(ue.toPortablePath(Re),_e,be);return Te===null?null:ue.fromPortablePath(Te)}),resolveUnqualified:L("resolveUnqualified",(Re,Qe)=>ue.fromPortablePath(ke(ue.toPortablePath(Re),Qe))),resolveRequest:L("resolveRequest",(Re,Qe,be)=>{let _e=Qe!==null?ue.toPortablePath(Qe):null,Te=H(ue.toPortablePath(Re),_e,be);return Te===null?null:ue.fromPortablePath(Te)}),resolveVirtual:L("resolveVirtual",Re=>{let Qe=lt(ue.toPortablePath(Re));return Qe!==null?ue.fromPortablePath(Qe):null})}}Pt();var $Ie=(t,e,r)=>{let o=XB(t),a=Yj(o,{basePath:e}),n=ue.join(e,dr.pnpCjs);return rq(a,{fakeFs:r,pnpapiResolution:n})};var iq=$e(t1e());qt();var mA={};Kt(mA,{checkManifestCompatibility:()=>r1e,extractBuildRequest:()=>vQ,getExtractHint:()=>sq,hasBindingGyp:()=>oq});Ye();Pt();function r1e(t){return W.isPackageCompatible(t,Ji.getArchitectureSet())}function vQ(t,e,r,{configuration:o}){let a=[];for(let n of["preinstall","install","postinstall"])e.manifest.scripts.has(n)&&a.push({type:0,script:n});return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&a.push({type:1,script:"node-gyp rebuild"}),a.length===0?null:t.linkType!=="HARD"?{skipped:!0,explain:n=>n.reportWarningOnce(6,`${W.prettyLocator(o,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`)}:r&&r.built===!1?{skipped:!0,explain:n=>n.reportInfoOnce(5,`${W.prettyLocator(o,t)} lists build scripts, but its build has been explicitly disabled through configuration.`)}:!o.get("enableScripts")&&!r.built?{skipped:!0,explain:n=>n.reportWarningOnce(4,`${W.prettyLocator(o,t)} lists build scripts, but all build scripts have been disabled.`)}:r1e(t)?{skipped:!1,directives:a}:{skipped:!0,explain:n=>n.reportWarningOnce(76,`${W.prettyLocator(o,t)} The ${Ji.getArchitectureName()} architecture is incompatible with this package, build skipped.`)}}var VIt=new Set([".exe",".bin",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function sq(t){return t.packageFs.getExtractHint({relevantExtensions:VIt})}function oq(t){let e=K.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var av={};Kt(av,{getUnpluggedPath:()=>ov});Ye();Pt();function ov(t,{configuration:e}){return K.resolve(e.get("pnpUnpluggedFolder"),W.slugifyLocator(t))}var KIt=new Set([W.makeIdent(null,"open").identHash,W.makeIdent(null,"opn").identHash]),P0=class{constructor(){this.mode="strict";this.pnpCache=new Map}getCustomDataKey(){return JSON.stringify({name:"PnpLinker",version:2})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the PnP linker to be enabled");let o=S0(r.project).cjs;if(!oe.existsSync(o))throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let a=je.getFactoryWithDefault(this.pnpCache,o,()=>je.dynamicRequire(o,{cachingStrategy:je.CachingStrategy.FsTime})),n={name:W.stringifyIdent(e),reference:e.reference},u=a.getPackageInformation(n);if(!u)throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return ue.toPortablePath(u.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=S0(r.project).cjs;if(!oe.existsSync(o))return null;let n=je.getFactoryWithDefault(this.pnpCache,o,()=>je.dynamicRequire(o,{cachingStrategy:je.CachingStrategy.FsTime})).findPackageLocator(ue.fromPortablePath(e));return n?W.makeLocator(W.parseIdent(n.name),n.reference):null}makeInstaller(e){return new dm(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},dm=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new je.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}attachCustomData(e){this.customData=e}async installPackage(e,r,o){let a=W.stringifyIdent(e),n=e.reference,u=!!this.opts.project.tryWorkspaceByLocator(e),A=W.isVirtualLocator(e),p=e.peerDependencies.size>0&&!A,h=!p&&!u,E=!p&&e.linkType!=="SOFT",I,v;if(h||E){let te=A?W.devirtualizeLocator(e):e;I=this.customData.store.get(te.locatorHash),typeof I>"u"&&(I=await JIt(r),e.linkType==="HARD"&&this.customData.store.set(te.locatorHash,I)),I.manifest.type==="module"&&(this.isESMLoaderRequired=!0),v=this.opts.project.getDependencyMeta(te,e.version)}let b=h?vQ(e,I,v,{configuration:this.opts.project.configuration}):null,C=E?await this.unplugPackageIfNeeded(e,I,r,v,o):r.packageFs;if(K.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let T=K.resolve(C.getRealPath(),r.prefixPath),L=aq(this.opts.project.cwd,T),U=new Map,J=new Set;if(A){for(let te of e.peerDependencies.values())U.set(W.stringifyIdent(te),null),J.add(W.stringifyIdent(te));if(!u){let te=W.devirtualizeLocator(e);this.virtualTemplates.set(te.locatorHash,{location:aq(this.opts.project.cwd,mi.resolveVirtual(T)),locator:te})}}return je.getMapWithDefault(this.packageRegistry,a).set(n,{packageLocation:L,packageDependencies:U,packagePeers:J,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:T,buildRequest:b}}async attachInternalDependencies(e,r){let o=this.getPackageInformation(e);for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){for(let o of r)this.getDiskInformation(o).packageDependencies.set(W.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=S0(this.opts.project);if(this.isEsmEnabled()||await oe.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await oe.removePromise(e.cjs),await oe.removePromise(e.data),await oe.removePromise(e.esmLoader),await oe.removePromise(this.opts.project.configuration.get("pnpUnpluggedFolder"));return}for(let{locator:E,location:I}of this.virtualTemplates.values())je.getMapWithDefault(this.packageRegistry,W.stringifyIdent(E)).set(E.reference,{packageLocation:I,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let r=this.opts.project.configuration.get("pnpFallbackMode"),o=this.opts.project.workspaces.map(({anchoredLocator:E})=>({name:W.stringifyIdent(E),reference:E.reference})),a=r!=="none",n=[],u=new Map,A=je.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),p=this.packageRegistry,h=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let E of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(E)&&n.push({name:W.stringifyIdent(E),reference:E.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:o,enableTopLevelFallback:a,fallbackExclusionList:n,fallbackPool:u,ignorePattern:A,packageRegistry:p,shebang:h}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has("pnpEnableEsmLoader"))return this.opts.project.configuration.get("pnpEnableEsmLoader");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type==="module")return!0;return!1}async finalizeInstallWithPnp(e){let r=S0(this.opts.project),o=await this.locateNodeModules(e.ignorePattern);if(o.length>0){this.opts.report.reportWarning(31,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let n of o)await oe.removePromise(n)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let n=bIe(e);await oe.changeFilePromise(r.cjs,n,{automaticNewlines:!0,mode:493}),await oe.removePromise(r.data)}else{let{dataFile:n,loaderFile:u}=kIe(e);await oe.changeFilePromise(r.cjs,u,{automaticNewlines:!0,mode:493}),await oe.changeFilePromise(r.data,n,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,"ESM support for PnP uses the experimental loader API and is therefore experimental"),await oe.changeFilePromise(r.esmLoader,(0,iq.default)(),{automaticNewlines:!0,mode:420}));let a=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await oe.removePromise(a);else for(let n of await oe.readdirPromise(a)){let u=K.resolve(a,n);this.unpluggedPaths.has(u)||await oe.removePromise(u)}}async locateNodeModules(e){let r=[],o=e?new RegExp(e):null;for(let a of this.opts.project.workspaces){let n=K.join(a.cwd,"node_modules");if(o&&o.test(K.relative(this.opts.project.cwd,a.cwd))||!oe.existsSync(n))continue;let u=await oe.readdirPromise(n,{withFileTypes:!0}),A=u.filter(p=>!p.isDirectory()||p.name===".bin"||!p.name.startsWith("."));if(A.length===u.length)r.push(n);else for(let p of A)r.push(K.join(n,p.name))}return r}async unplugPackageIfNeeded(e,r,o,a,n){return this.shouldBeUnplugged(e,r,a)?this.unplugPackage(e,o,n):o.packageFs}shouldBeUnplugged(e,r,o){return typeof o.unplugged<"u"?o.unplugged:KIt.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(vQ(e,r,o,{configuration:this.opts.project.configuration})?.skipped===!1||r.misc.extractHint)}async unplugPackage(e,r,o){let a=ov(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new Uu(a,{baseFs:r.packageFs,pathUtils:K}):(this.unpluggedPaths.add(a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let n=K.join(a,r.prefixPath,".ready");await oe.existsPromise(n)||(this.opts.project.storedBuildState.delete(e.locatorHash),await oe.mkdirPromise(a,{recursive:!0}),await oe.copyPromise(a,Bt.dot,{baseFs:r.packageFs,overwrite:!1}),await oe.writeFilePromise(n,""))})),new gn(a))}getPackageInformation(e){let r=W.stringifyIdent(e),o=e.reference,a=this.packageRegistry.get(r);if(!a)throw new Error(`Assertion failed: The package information store should have been available (for ${W.prettyIdent(this.opts.project.configuration,e)})`);let n=a.get(o);if(!n)throw new Error(`Assertion failed: The package information should have been available (for ${W.prettyLocator(this.opts.project.configuration,e)})`);return n}getDiskInformation(e){let r=je.getMapWithDefault(this.packageRegistry,"@@disk"),o=aq(this.opts.project.cwd,e);return je.getFactoryWithDefault(r,o,()=>({packageLocation:o,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1}))}};function aq(t,e){let r=K.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function JIt(t){let e=await Mt.tryFind(t.prefixPath,{baseFs:t.packageFs})??new Mt,r=new Set(["preinstall","install","postinstall"]);for(let o of e.scripts.keys())r.has(o)||e.scripts.delete(o);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:sq(t),hasBindingGyp:oq(t)}}}Ye();Ye();qt();var n1e=$e(Zo());var x0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);if(r.get("nodeLinker")!=="pnp")throw new it("This command can only be used if the `nodeLinker` option is set to `pnp`");await o.restoreInstallState();let u=new Set(this.patterns),A=this.patterns.map(b=>{let C=W.parseDescriptor(b),T=C.range!=="unknown"?C:W.makeDescriptor(C,"*");if(!kr.validRange(T.range))throw new it(`The range of the descriptor patterns must be a valid semver range (${W.prettyDescriptor(r,T)})`);return L=>{let U=W.stringifyIdent(L);return!n1e.default.isMatch(U,W.stringifyIdent(T))||L.version&&!kr.satisfiesWithPrereleases(L.version,T.range)?!1:(u.delete(b),!0)}}),p=()=>{let b=[];for(let C of o.storedPackages.values())!o.tryWorkspaceByLocator(C)&&!W.isVirtualLocator(C)&&A.some(T=>T(C))&&b.push(C);return b},h=b=>{let C=new Set,T=[],L=(U,J)=>{if(C.has(U.locatorHash))return;let te=!!o.tryWorkspaceByLocator(U);if(!(J>0&&!this.recursive&&te)&&(C.add(U.locatorHash),!o.tryWorkspaceByLocator(U)&&A.some(le=>le(U))&&T.push(U),!(J>0&&!this.recursive)))for(let le of U.dependencies.values()){let pe=o.storedResolutions.get(le.descriptorHash);if(!pe)throw new Error("Assertion failed: The resolution should have been registered");let Ae=o.storedPackages.get(pe);if(!Ae)throw new Error("Assertion failed: The package should have been registered");L(Ae,J+1)}};for(let U of b)L(U.anchoredPackage,0);return T},E,I;if(this.all&&this.recursive?(E=p(),I="the project"):this.all?(E=h(o.workspaces),I="any workspace"):(E=h([a]),I="this workspace"),u.size>1)throw new it(`Patterns ${de.prettyList(r,u,de.Type.CODE)} don't match any packages referenced by ${I}`);if(u.size>0)throw new it(`Pattern ${de.prettyList(r,u,de.Type.CODE)} doesn't match any packages referenced by ${I}`);E=je.sortMap(E,b=>W.stringifyLocator(b));let v=await Nt.start({configuration:r,stdout:this.context.stdout,json:this.json},async b=>{for(let C of E){let T=C.version??"unknown",L=o.topLevelWorkspace.manifest.ensureDependencyMeta(W.makeDescriptor(C,T));L.unplugged=!0,b.reportInfo(0,`Will unpack ${W.prettyLocator(r,C)} to ${de.pretty(r,ov(C,{configuration:r}),de.Type.PATH)}`),b.reportJson({locator:W.stringifyLocator(C),version:T})}await o.topLevelWorkspace.persistManifest(),this.json||b.reportSeparator()});return v.hasErrors()?v.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};x0.paths=[["unplug"]],x0.usage=nt.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]});var S0=t=>({cjs:K.join(t.cwd,dr.pnpCjs),data:K.join(t.cwd,dr.pnpData),esmLoader:K.join(t.cwd,dr.pnpEsmLoader)}),s1e=t=>/\s/.test(t)?JSON.stringify(t):t;async function zIt(t,e,r){let o=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/,n=(e.NODE_OPTIONS??"").replace(o," ").replace(a," ").trim();if(t.configuration.get("nodeLinker")!=="pnp"){e.NODE_OPTIONS=n;return}let u=S0(t),A=`--require ${s1e(ue.fromPortablePath(u.cjs))}`;oe.existsSync(u.esmLoader)&&(A=`${A} --experimental-loader ${(0,i1e.pathToFileURL)(ue.fromPortablePath(u.esmLoader)).href}`),oe.existsSync(u.cjs)&&(e.NODE_OPTIONS=n?`${A} ${n}`:A)}async function XIt(t,e){let r=S0(t);e(r.cjs),e(r.data),e(r.esmLoader),e(t.configuration.get("pnpUnpluggedFolder"))}var ZIt={hooks:{populateYarnPaths:XIt,setupScriptEnvironment:zIt},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "pnpm", or "node-modules"',type:"STRING",default:"pnp"},winLinkType:{description:"Whether Yarn should use Windows Junctions or symlinks when creating links on Windows.",type:"STRING",values:["junctions","symlinks"],default:"junctions"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:"STRING",default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:"STRING",default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:"STRING",default:[],isArray:!0},pnpEnableEsmLoader:{description:"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.",type:"BOOLEAN",default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:"BOOLEAN",default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:"STRING",default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:"ABSOLUTE_PATH",default:"./.yarn/unplugged"}},linkers:[P0],commands:[x0]},$It=ZIt;var p1e=$e(u1e());qt();var gq=$e(Be("crypto")),h1e=$e(Be("fs")),g1e=1,Pi="node_modules",DQ=".bin",d1e=".yarn-state.yml",d1t=1e3,dq=(o=>(o.CLASSIC="classic",o.HARDLINKS_LOCAL="hardlinks-local",o.HARDLINKS_GLOBAL="hardlinks-global",o))(dq||{}),lv=class{constructor(){this.installStateCache=new Map}getCustomDataKey(){return JSON.stringify({name:"NodeModulesLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the node-modules linker to be enabled");let o=r.project.tryWorkspaceByLocator(e);if(o)return o.cwd;let a=await je.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await hq(r.project,{unrollAliases:!0}));if(a===null)throw new it("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let n=a.locatorMap.get(W.stringifyLocator(e));if(!n){let p=new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw p.code="LOCATOR_NOT_INSTALLED",p}let u=n.locations.sort((p,h)=>p.split(K.sep).length-h.split(K.sep).length),A=K.join(r.project.configuration.startingCwd,Pi);return u.find(p=>K.contains(A,p))||n.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=await je.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await hq(r.project,{unrollAliases:!0}));if(o===null)return null;let{locationRoot:a,segments:n}=PQ(K.resolve(e),{skipPrefix:r.project.cwd}),u=o.locationTree.get(a);if(!u)return null;let A=u.locator;for(let p of n){if(u=u.children.get(p),!u)break;A=u.locator||A}return W.parseLocator(A)}makeInstaller(e){return new pq(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},pq=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}attachCustomData(e){this.customData=e}async installPackage(e,r){let o=K.resolve(r.packageFs.getRealPath(),r.prefixPath),a=this.customData.store.get(e.locatorHash);if(typeof a>"u"&&(a=await m1t(e,r),e.linkType==="HARD"&&this.customData.store.set(e.locatorHash,a)),!W.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildRequest:null};let n=new Map,u=new Set;n.has(W.stringifyIdent(e))||n.set(W.stringifyIdent(e),e.reference);let A=e;if(W.isVirtualLocator(e)){A=W.devirtualizeLocator(e);for(let E of e.peerDependencies.values())n.set(W.stringifyIdent(E),null),u.add(W.stringifyIdent(E))}let p={packageLocation:`${ue.fromPortablePath(o)}/`,packageDependencies:n,packagePeers:u,linkType:e.linkType,discardFromLookup:r.discardFromLookup??!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:a,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:p});let h=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(A.locatorHash,h),{packageLocation:o,buildRequest:null}}async attachInternalDependencies(e,r){let o=this.localStore.get(e.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected information object to have been registered");for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.pnpNode.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),r=await hq(this.opts.project),o=this.opts.project.configuration.get("nmMode");(r===null||o!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:o,mtimeMs:0});let a=new Map(this.opts.project.workspaces.map(v=>{let b=this.opts.project.configuration.get("nmHoistingLimits");try{b=je.validateEnum(KB,v.manifest.installConfig?.hoistingLimits??b)}catch{let T=W.prettyWorkspace(this.opts.project.configuration,v);this.opts.report.reportWarning(57,`${T}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(KB).join(", ")}, using default: "${b}"`)}return[v.relativeCwd,b]})),n=new Map(this.opts.project.workspaces.map(v=>{let b=this.opts.project.configuration.get("nmSelfReferences");return b=v.manifest.installConfig?.selfReferences??b,[v.relativeCwd,b]})),u={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(v,b)=>Array.isArray(b)?{name:b[0],reference:b[1]}:{name:v,reference:b},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(v=>{let b=v.anchoredLocator;return{name:W.stringifyIdent(b),reference:b.reference}}),getPackageInformation:v=>{let b=v.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:W.makeLocator(W.parseIdent(v.name),v.reference),C=this.localStore.get(b.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the package reference to have been registered");return C.pnpNode},findPackageLocator:v=>{let b=this.opts.project.tryWorkspaceByCwd(ue.toPortablePath(v));if(b!==null){let C=b.anchoredLocator;return{name:W.stringifyIdent(C),reference:C.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:v=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(v)))},{tree:A,errors:p,preserveSymlinksRequired:h}=JB(u,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:a,project:this.opts.project,selfReferencesByCwd:n});if(!A){for(let{messageName:v,text:b}of p)this.opts.report.reportError(v,b);return}let E=qj(A);await B1t(r,E,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async v=>{let b=W.parseLocator(v),C=this.localStore.get(b.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the slot to exist");return C.customPackageData.manifest}});let I=[];for(let[v,b]of E.entries()){if(C1e(v))continue;let C=W.parseLocator(v),T=this.localStore.get(C.locatorHash);if(typeof T>"u")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(T.pkg))continue;let L=mA.extractBuildRequest(T.pkg,T.customPackageData,T.dependencyMeta,{configuration:this.opts.project.configuration});!L||I.push({buildLocations:b.locations,locator:C,buildRequest:L})}return h&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${de.pretty(this.opts.project.configuration,"--preserve-symlinks",de.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:I}}};async function m1t(t,e){let r=await Mt.tryFind(e.prefixPath,{baseFs:e.packageFs})??new Mt,o=new Set(["preinstall","install","postinstall"]);for(let a of r.scripts.keys())o.has(a)||r.scripts.delete(a);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{hasBindingGyp:mA.hasBindingGyp(e)}}}async function y1t(t,e,r,o,{installChangedByUser:a}){let n="";n+=`# Warning: This file is automatically generated. Removing it is fine, but will +`,n+=`# cause your node_modules installation to become invalidated. +`,n+=` +`,n+=`__metadata: +`,n+=` version: ${g1e} +`,n+=` nmMode: ${o.value} +`;let u=Array.from(e.keys()).sort(),A=W.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let E of u){let I=e.get(E);n+=` +`,n+=`${JSON.stringify(E)}: +`,n+=` locations: +`;for(let v of I.locations){let b=K.contains(t.cwd,v);if(b===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` - ${JSON.stringify(b)} +`}if(I.aliases.length>0){n+=` aliases: +`;for(let v of I.aliases)n+=` - ${JSON.stringify(v)} +`}if(E===A&&r.size>0){n+=` bin: +`;for(let[v,b]of r){let C=K.contains(t.cwd,v);if(C===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` ${JSON.stringify(C)}: +`;for(let[T,L]of b){let U=K.relative(K.join(v,Pi),L);n+=` ${JSON.stringify(T)}: ${JSON.stringify(U)} +`}}}}let p=t.cwd,h=K.join(p,Pi,d1e);a&&await oe.removePromise(h),await oe.changeFilePromise(h,n,{automaticNewlines:!0})}async function hq(t,{unrollAliases:e=!1}={}){let r=t.cwd,o=K.join(r,Pi,d1e),a;try{a=await oe.statPromise(o)}catch{}if(!a)return null;let n=Vi(await oe.readFilePromise(o,"utf8"));if(n.__metadata.version>g1e)return null;let u=n.__metadata.nmMode||"classic",A=new Map,p=new Map;delete n.__metadata;for(let[h,E]of Object.entries(n)){let I=E.locations.map(b=>K.join(r,b)),v=E.bin;if(v)for(let[b,C]of Object.entries(v)){let T=K.join(r,ue.toPortablePath(b)),L=je.getMapWithDefault(p,T);for(let[U,J]of Object.entries(C))L.set(U,ue.toPortablePath([T,Pi,J].join(K.sep)))}if(A.set(h,{target:Bt.dot,linkType:"HARD",locations:I,aliases:E.aliases||[]}),e&&E.aliases)for(let b of E.aliases){let{scope:C,name:T}=W.parseLocator(h),L=W.makeLocator(W.makeIdent(C,T),b),U=W.stringifyLocator(L);A.set(U,{target:Bt.dot,linkType:"HARD",locations:I,aliases:[]})}}return{locatorMap:A,binSymlinks:p,locationTree:m1e(A,{skipPrefix:t.cwd}),nmMode:u,mtimeMs:a.mtimeMs}}var YC=async(t,e)=>{if(t.split(K.sep).indexOf(Pi)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{if(!e.innerLoop){let o=e.allowSymlink?await oe.statPromise(t):await oe.lstatPromise(t);if(e.allowSymlink&&!o.isDirectory()||!e.allowSymlink&&o.isSymbolicLink()){await oe.unlinkPromise(t);return}}let r=await oe.readdirPromise(t,{withFileTypes:!0});for(let o of r){let a=K.join(t,o.name);o.isDirectory()?(o.name!==Pi||e&&e.innerLoop)&&await YC(a,{innerLoop:!0,contentsOnly:!1}):await oe.unlinkPromise(a)}e.contentsOnly||await oe.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},A1e=4,PQ=(t,{skipPrefix:e})=>{let r=K.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let o=r.split(K.sep).filter(p=>p!==""),a=o.indexOf(Pi),n=o.slice(0,a).join(K.sep),u=K.join(e,n),A=o.slice(a);return{locationRoot:u,segments:A}},m1e=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let o=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&K.contains(e,n.target)!==null){let A=je.getFactoryWithDefault(r,n.target,o);A.locator=a,A.linkType=n.linkType}for(let u of n.locations){let{locationRoot:A,segments:p}=PQ(u,{skipPrefix:e}),h=je.getFactoryWithDefault(r,A,o);for(let E=0;E{if(process.platform==="win32"&&r==="junctions"){let o;try{o=await oe.lstatPromise(t)}catch{}if(!o||o.isDirectory()){await oe.symlinkPromise(t,e,"junction");return}}await oe.symlinkPromise(K.relative(K.dirname(e),t),e)};async function y1e(t,e,r){let o=K.join(t,`${gq.default.randomBytes(16).toString("hex")}.tmp`);try{await oe.writeFilePromise(o,r);try{await oe.linkPromise(o,e)}catch{}}finally{await oe.unlinkPromise(o)}}async function E1t({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:o,baseFs:a,nmMode:n}){if(r.kind===E1e.FILE){if(n.value==="hardlinks-global"&&o&&r.digest){let A=K.join(o,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await oe.statPromise(A);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs(o.FILE="file",o.DIRECTORY="directory",o.SYMLINK="symlink",o))(E1e||{}),C1t=async(t,e,{baseFs:r,globalHardlinksStore:o,nmMode:a,windowsLinkType:n,packageChecksum:u})=>{await oe.mkdirPromise(t,{recursive:!0});let A=async(E=Bt.dot)=>{let I=K.join(e,E),v=await r.readdirPromise(I,{withFileTypes:!0}),b=new Map;for(let C of v){let T=K.join(E,C.name),L,U=K.join(I,C.name);if(C.isFile()){if(L={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let J=await wn.checksumFile(U,{baseFs:r,algorithm:"sha1"});L.digest=J}}else if(C.isDirectory())L={kind:"directory"};else if(C.isSymbolicLink())L={kind:"symlink",symlinkTo:await r.readlinkPromise(U)};else throw new Error(`Unsupported file type (file: ${U}, mode: 0o${await r.statSync(U).mode.toString(8).padStart(6,"0")})`);if(b.set(T,L),C.isDirectory()&&T!==Pi){let J=await A(T);for(let[te,le]of J)b.set(te,le)}}return b},p;if(a.value==="hardlinks-global"&&o&&u){let E=K.join(o,u.substring(0,2),`${u.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await oe.readFilePromise(E,"utf8"))))}catch{p=await A()}}else p=await A();let h=!1;for(let[E,I]of p){let v=K.join(e,E),b=K.join(t,E);if(I.kind==="directory")await oe.mkdirPromise(b,{recursive:!0});else if(I.kind==="file"){let C=I.mtimeMs;await E1t({srcPath:v,dstPath:b,entry:I,nmMode:a,baseFs:r,globalHardlinksStore:o}),I.mtimeMs!==C&&(h=!0)}else I.kind==="symlink"&&await mq(K.resolve(K.dirname(b),I.symlinkTo),b,n)}if(a.value==="hardlinks-global"&&o&&h&&u){let E=K.join(o,u.substring(0,2),`${u.substring(2)}.json`);await oe.removePromise(E),await y1e(o,E,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function w1t(t,e,r,o){let a=new Map,n=new Map,u=new Map,A=!1,p=(h,E,I,v,b)=>{let C=!0,T=K.join(h,E),L=new Set;if(E===Pi||E.startsWith("@")){let J;try{J=oe.statSync(T)}catch{}C=!!J,J?J.mtimeMs>r?(A=!0,L=new Set(oe.readdirSync(T))):L=new Set(I.children.get(E).children.keys()):A=!0;let te=e.get(h);if(te){let le=K.join(h,Pi,DQ),pe;try{pe=oe.statSync(le)}catch{}if(!pe)A=!0;else if(pe.mtimeMs>r){A=!0;let Ae=new Set(oe.readdirSync(le)),ye=new Map;n.set(h,ye);for(let[ae,we]of te)Ae.has(ae)&&ye.set(ae,we)}else n.set(h,te)}}else C=b.has(E);let U=I.children.get(E);if(C){let{linkType:J,locator:te}=U,le={children:new Map,linkType:J,locator:te};if(v.children.set(E,le),te){let pe=je.getSetWithDefault(u,te);pe.add(T),u.set(te,pe)}for(let pe of U.children.keys())p(T,pe,U,le,L)}else U.locator&&o.storedBuildState.delete(W.parseLocator(U.locator).locatorHash)};for(let[h,E]of t){let{linkType:I,locator:v}=E,b={children:new Map,linkType:I,locator:v};if(a.set(h,b),v){let C=je.getSetWithDefault(u,E.locator);C.add(h),u.set(E.locator,C)}E.children.has(Pi)&&p(h,Pi,E,b,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:u,installChangedByUser:A}}function C1e(t){let e=W.parseDescriptor(t);return W.isVirtualDescriptor(e)&&(e=W.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function I1t(t,e,r,{loadManifest:o}){let a=new Map;for(let[A,{locations:p}]of t){let h=C1e(A)?null:await o(A,p[0]),E=new Map;if(h)for(let[I,v]of h.bin){let b=K.join(p[0],v);v!==""&&oe.existsSync(b)&&E.set(I,v)}a.set(A,E)}let n=new Map,u=(A,p,h)=>{let E=new Map,I=K.contains(r,A);if(h.locator&&I!==null){let v=a.get(h.locator);for(let[b,C]of v){let T=K.join(A,ue.toPortablePath(C));E.set(b,T)}for(let[b,C]of h.children){let T=K.join(A,b),L=u(T,T,C);L.size>0&&n.set(A,new Map([...n.get(A)||new Map,...L]))}}else for(let[v,b]of h.children){let C=u(K.join(A,v),p,b);for(let[T,L]of C)E.set(T,L)}return E};for(let[A,p]of e){let h=u(A,A,p);h.size>0&&n.set(A,new Map([...n.get(A)||new Map,...h]))}return n}var f1e=(t,e)=>{if(!t||!e)return t===e;let r=W.parseLocator(t);W.isVirtualLocator(r)&&(r=W.devirtualizeLocator(r));let o=W.parseLocator(e);return W.isVirtualLocator(o)&&(o=W.devirtualizeLocator(o)),W.areLocatorsEqual(r,o)};function yq(t){return K.join(t.get("globalFolder"),"store")}async function B1t(t,e,{baseFs:r,project:o,report:a,loadManifest:n,realLocatorChecksums:u}){let A=K.join(o.cwd,Pi),{locationTree:p,binSymlinks:h,locatorLocations:E,installChangedByUser:I}=w1t(t.locationTree,t.binSymlinks,t.mtimeMs,o),v=m1e(e,{skipPrefix:o.cwd}),b=[],C=async({srcDir:we,dstDir:Pe,linkType:g,globalHardlinksStore:Ee,nmMode:De,windowsLinkType:ce,packageChecksum:ne})=>{let ee=(async()=>{try{g==="SOFT"?(await oe.mkdirPromise(K.dirname(Pe),{recursive:!0}),await mq(K.resolve(we),Pe,ce)):await C1t(Pe,we,{baseFs:r,globalHardlinksStore:Ee,nmMode:De,windowsLinkType:ce,packageChecksum:ne})}catch(Ie){throw Ie.message=`While persisting ${we} -> ${Pe} ${Ie.message}`,Ie}finally{le.tick()}})().then(()=>b.splice(b.indexOf(ee),1));b.push(ee),b.length>A1e&&await Promise.race(b)},T=async(we,Pe,g)=>{let Ee=(async()=>{let De=async(ce,ne,ee)=>{try{ee.innerLoop||await oe.mkdirPromise(ne,{recursive:!0});let Ie=await oe.readdirPromise(ce,{withFileTypes:!0});for(let ke of Ie){if(!ee.innerLoop&&ke.name===DQ)continue;let ht=K.join(ce,ke.name),H=K.join(ne,ke.name);ke.isDirectory()?(ke.name!==Pi||ee&&ee.innerLoop)&&(await oe.mkdirPromise(H,{recursive:!0}),await De(ht,H,{...ee,innerLoop:!0})):ye.value==="hardlinks-local"||ye.value==="hardlinks-global"?await oe.linkPromise(ht,H):await oe.copyFilePromise(ht,H,h1e.default.constants.COPYFILE_FICLONE)}}catch(Ie){throw ee.innerLoop||(Ie.message=`While cloning ${ce} -> ${ne} ${Ie.message}`),Ie}finally{ee.innerLoop||le.tick()}};await De(we,Pe,g)})().then(()=>b.splice(b.indexOf(Ee),1));b.push(Ee),b.length>A1e&&await Promise.race(b)},L=async(we,Pe,g)=>{if(g)for(let[Ee,De]of Pe.children){let ce=g.children.get(Ee);await L(K.join(we,Ee),De,ce)}else{Pe.children.has(Pi)&&await YC(K.join(we,Pi),{contentsOnly:!1});let Ee=K.basename(we)===Pi&&v.has(K.join(K.dirname(we),K.sep));await YC(we,{contentsOnly:we===A,allowSymlink:Ee})}};for(let[we,Pe]of p){let g=v.get(we);for(let[Ee,De]of Pe.children){if(Ee===".")continue;let ce=g&&g.children.get(Ee),ne=K.join(we,Ee);await L(ne,De,ce)}}let U=async(we,Pe,g)=>{if(g){f1e(Pe.locator,g.locator)||await YC(we,{contentsOnly:Pe.linkType==="HARD"});for(let[Ee,De]of Pe.children){let ce=g.children.get(Ee);await U(K.join(we,Ee),De,ce)}}else{Pe.children.has(Pi)&&await YC(K.join(we,Pi),{contentsOnly:!0});let Ee=K.basename(we)===Pi&&v.has(K.join(K.dirname(we),K.sep));await YC(we,{contentsOnly:Pe.linkType==="HARD",allowSymlink:Ee})}};for(let[we,Pe]of v){let g=p.get(we);for(let[Ee,De]of Pe.children){if(Ee===".")continue;let ce=g&&g.children.get(Ee);await U(K.join(we,Ee),De,ce)}}let J=new Map,te=[];for(let[we,Pe]of E)for(let g of Pe){let{locationRoot:Ee,segments:De}=PQ(g,{skipPrefix:o.cwd}),ce=v.get(Ee),ne=Ee;if(ce){for(let ee of De)if(ne=K.join(ne,ee),ce=ce.children.get(ee),!ce)break;if(ce){let ee=f1e(ce.locator,we),Ie=e.get(ce.locator),ke=Ie.target,ht=ne,H=Ie.linkType;if(ee)J.has(ke)||J.set(ke,ht);else if(ke!==ht){let lt=W.parseLocator(ce.locator);W.isVirtualLocator(lt)&&(lt=W.devirtualizeLocator(lt)),te.push({srcDir:ke,dstDir:ht,linkType:H,realLocatorHash:lt.locatorHash})}}}}for(let[we,{locations:Pe}]of e.entries())for(let g of Pe){let{locationRoot:Ee,segments:De}=PQ(g,{skipPrefix:o.cwd}),ce=p.get(Ee),ne=v.get(Ee),ee=Ee,Ie=e.get(we),ke=W.parseLocator(we);W.isVirtualLocator(ke)&&(ke=W.devirtualizeLocator(ke));let ht=ke.locatorHash,H=Ie.target,lt=g;if(H===lt)continue;let Re=Ie.linkType;for(let Qe of De)ne=ne.children.get(Qe);if(!ce)te.push({srcDir:H,dstDir:lt,linkType:Re,realLocatorHash:ht});else for(let Qe of De)if(ee=K.join(ee,Qe),ce=ce.children.get(Qe),!ce){te.push({srcDir:H,dstDir:lt,linkType:Re,realLocatorHash:ht});break}}let le=Xs.progressViaCounter(te.length),pe=a.reportProgress(le),Ae=o.configuration.get("nmMode"),ye={value:Ae},ae=o.configuration.get("winLinkType");try{let we=ye.value==="hardlinks-global"?`${yq(o.configuration)}/v1`:null;if(we&&!await oe.existsPromise(we)){await oe.mkdirpPromise(we);for(let g=0;g<256;g++)await oe.mkdirPromise(K.join(we,g.toString(16).padStart(2,"0")))}for(let g of te)(g.linkType==="SOFT"||!J.has(g.srcDir))&&(J.set(g.srcDir,g.dstDir),await C({...g,globalHardlinksStore:we,nmMode:ye,windowsLinkType:ae,packageChecksum:u.get(g.realLocatorHash)||null}));await Promise.all(b),b.length=0;for(let g of te){let Ee=J.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==Ee&&await T(Ee,g.dstDir,{nmMode:ye})}await Promise.all(b),await oe.mkdirPromise(A,{recursive:!0});let Pe=await I1t(e,v,o.cwd,{loadManifest:n});await v1t(h,Pe,o.cwd,ae),await y1t(o,e,Pe,ye,{installChangedByUser:I}),Ae=="hardlinks-global"&&ye.value=="hardlinks-local"&&a.reportWarningOnce(74,"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices")}finally{pe.stop()}}async function v1t(t,e,r,o){for(let a of t.keys()){if(K.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);if(!e.has(a)){let n=K.join(a,Pi,DQ);await oe.removePromise(n)}}for(let[a,n]of e){if(K.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let u=K.join(a,Pi,DQ),A=t.get(a)||new Map;await oe.mkdirPromise(u,{recursive:!0});for(let p of A.keys())n.has(p)||(await oe.removePromise(K.join(u,p)),process.platform==="win32"&&await oe.removePromise(K.join(u,`${p}.cmd`)));for(let[p,h]of n){let E=A.get(p),I=K.join(u,p);E!==h&&(process.platform==="win32"?await(0,p1e.default)(ue.fromPortablePath(h),ue.fromPortablePath(I),{createPwshFile:!1}):(await oe.removePromise(I),await mq(h,I,o),K.contains(r,await oe.realpathPromise(h))!==null&&await oe.chmodPromise(h,493)))}}}Ye();Pt();nA();var cv=class extends P0{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new Eq(r)}},Eq=class extends dm{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let o=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),a=$Ie(r,this.opts.project.cwd,o),{tree:n,errors:u}=JB(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:I,text:v}of u)this.opts.report.reportError(I,v);return}let A=new Map;r.fallbackPool=A;let p=(I,v)=>{let b=W.parseLocator(v.locator),C=W.stringifyIdent(b);C===I?A.set(I,b.reference):A.set(I,[C,b.reference])},h=K.join(this.opts.project.cwd,dr.nodeModules),E=n.get(h);if(!(typeof E>"u")){if("target"in E)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let I of E.dirList){let v=K.join(h,I),b=n.get(v);if(typeof b>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in b)p(I,b);else for(let C of b.dirList){let T=K.join(v,C),L=n.get(T);if(typeof L>"u")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in L)p(`${I}/${C}`,L);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var D1t={hooks:{cleanGlobalArtifacts:async t=>{let e=yq(t);await oe.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevents packages to be hoisted past specific levels",type:"STRING",values:["workspaces","dependencies","none"],default:"none"},nmMode:{description:"Defines in which measure Yarn must use hardlinks and symlinks when generated `node_modules` directories.",type:"STRING",values:["classic","hardlinks-local","hardlinks-global"],default:"classic"},nmSelfReferences:{description:"Defines whether the linker should generate self-referencing symlinks for workspaces.",type:"BOOLEAN",default:!0}},linkers:[lv,cv]},P1t=D1t;var EG={};Kt(EG,{NpmHttpFetcher:()=>fv,NpmRemapResolver:()=>pv,NpmSemverFetcher:()=>dl,NpmSemverResolver:()=>hv,NpmTagResolver:()=>gv,default:()=>Ovt,npmConfigUtils:()=>Zn,npmHttpUtils:()=>on,npmPublishUtils:()=>sw});Ye();var x1e=$e(zn());var Wn="npm:";var on={};Kt(on,{AuthType:()=>P1e,customPackageError:()=>mm,del:()=>N1t,get:()=>ym,getIdentUrl:()=>SQ,getPackageMetadata:()=>KC,handleInvalidAuthenticationError:()=>b0,post:()=>T1t,put:()=>R1t});Ye();Ye();Pt();var Bq=$e(A2()),v1e=$e(S_()),D1e=$e(zn()),vq=Be("url");var Zn={};Kt(Zn,{RegistryType:()=>w1e,getAuditRegistry:()=>S1t,getAuthConfiguration:()=>Iq,getDefaultRegistry:()=>uv,getPublishRegistry:()=>x1t,getRegistryConfiguration:()=>I1e,getScopeConfiguration:()=>wq,getScopeRegistry:()=>WC,normalizeRegistry:()=>oc});var w1e=(o=>(o.AUDIT_REGISTRY="npmAuditRegistry",o.FETCH_REGISTRY="npmRegistryServer",o.PUBLISH_REGISTRY="npmPublishRegistry",o))(w1e||{});function oc(t){return t.replace(/\/$/,"")}function S1t({configuration:t}){return uv({configuration:t,type:"npmAuditRegistry"})}function x1t(t,{configuration:e}){return t.publishConfig?.registry?oc(t.publishConfig.registry):t.name?WC(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):uv({configuration:e,type:"npmPublishRegistry"})}function WC(t,{configuration:e,type:r="npmRegistryServer"}){let o=wq(t,{configuration:e});if(o===null)return uv({configuration:e,type:r});let a=o.get(r);return a===null?uv({configuration:e,type:r}):oc(a)}function uv({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return oc(r!==null?r:t.get("npmRegistryServer"))}function I1e(t,{configuration:e}){let r=e.get("npmRegistries"),o=oc(t),a=r.get(o);if(typeof a<"u")return a;let n=r.get(o.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}function wq(t,{configuration:e}){if(t===null)return null;let o=e.get("npmScopes").get(t);return o||null}function Iq(t,{configuration:e,ident:r}){let o=r&&wq(r.scope,{configuration:e});return o?.get("npmAuthIdent")||o?.get("npmAuthToken")?o:I1e(t,{configuration:e})||e}var P1e=(a=>(a[a.NO_AUTH=0]="NO_AUTH",a[a.BEST_EFFORT=1]="BEST_EFFORT",a[a.CONFIGURATION=2]="CONFIGURATION",a[a.ALWAYS_AUTH=3]="ALWAYS_AUTH",a))(P1e||{});async function b0(t,{attemptedAs:e,registry:r,headers:o,configuration:a}){if(bQ(t))throw new zt(41,"Invalid OTP token");if(t.originalError?.name==="HTTPError"&&t.originalError?.response.statusCode===401)throw new zt(41,`Invalid authentication (${typeof e!="string"?`as ${await M1t(r,o,{configuration:a})}`:`attempted as ${e}`})`)}function mm(t,e){let r=t.response?.statusCode;return r?r===404?"Package not found":r>=500&&r<600?`The registry appears to be down (using a ${de.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function SQ(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var B1e=new Map;async function KC(t,{cache:e,project:r,registry:o,headers:a,version:n,...u}){return await je.getFactoryWithDefault(B1e,t.identHash,async()=>{let{configuration:A}=r;o=Av(A,{ident:t,registry:o});let p=Q1t(A,o),h=K.join(p,`${W.slugifyIdent(t)}.json`),E=null;if(!r.lockfileNeedsRefresh){try{E=await oe.readJsonPromise(h)}catch{}if(E){if(typeof n<"u"&&typeof E.metadata.versions[n]<"u")return E.metadata;if(A.get("enableOfflineMode")){let I=structuredClone(E.metadata),v=new Set;if(e){for(let C of Object.keys(I.versions)){let T=W.makeLocator(t,`npm:${C}`),L=e.getLocatorMirrorPath(T);(!L||!oe.existsSync(L))&&(delete I.versions[C],v.add(C))}let b=I["dist-tags"].latest;if(v.has(b)){let C=Object.keys(E.metadata.versions).sort(D1e.default.compare),T=C.indexOf(b);for(;v.has(C[T])&&T>=0;)T-=1;T>=0?I["dist-tags"].latest=C[T]:delete I["dist-tags"].latest}}return I}}}return await ym(SQ(t),{...u,customErrorMessage:mm,configuration:A,registry:o,ident:t,headers:{...a,["If-None-Match"]:E?.etag,["If-Modified-Since"]:E?.lastModified},wrapNetworkRequest:async I=>async()=>{let v=await I();if(v.statusCode===304){if(E===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...v,body:E.metadata}}let b=b1t(JSON.parse(v.body.toString()));B1e.set(t.identHash,b);let C={metadata:b,etag:v.headers.etag,lastModified:v.headers["last-modified"]},T=`${h}-${process.pid}.tmp`;return await oe.mkdirPromise(p,{recursive:!0}),await oe.writeJsonPromise(T,C,{compact:!0}),await oe.renamePromise(T,h),{...v,body:b}}})})}var S1e=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function b1t(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,(0,v1e.default)(r,S1e)]))}}var k1t=wn.makeHash(...S1e).slice(0,6);function Q1t(t,e){let r=F1t(t),o=new vq.URL(e);return K.join(r,k1t,o.hostname)}function F1t(t){return K.join(t.get("globalFolder"),"metadata/npm")}async function ym(t,{configuration:e,headers:r,ident:o,authType:a,registry:n,...u}){n=Av(e,{ident:o,registry:n}),o&&o.scope&&typeof a>"u"&&(a=1);let A=await xQ(n,{authType:a,configuration:e,ident:o});A&&(r={...r,authorization:A});try{return await rn.get(t.charAt(0)==="/"?`${n}${t}`:t,{configuration:e,headers:r,...u})}catch(p){throw await b0(p,{registry:n,configuration:e,headers:r}),p}}async function T1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await xQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await rn.post(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!bQ(I)||p)throw await b0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await Dq(I,{configuration:o});let v={...a,...VC(p)};try{return await rn.post(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(b){throw await b0(b,{attemptedAs:r,registry:A,configuration:o,headers:a}),b}}}async function R1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await xQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await rn.put(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!bQ(I))throw await b0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await Dq(I,{configuration:o});let v={...a,...VC(p)};try{return await rn.put(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(b){throw await b0(b,{attemptedAs:r,registry:A,configuration:o,headers:a}),b}}}async function N1t(t,{attemptedAs:e,configuration:r,headers:o,ident:a,authType:n=3,registry:u,otp:A,...p}){u=Av(r,{ident:a,registry:u});let h=await xQ(u,{authType:n,configuration:r,ident:a});h&&(o={...o,authorization:h}),A&&(o={...o,...VC(A)});try{return await rn.del(u+t,{configuration:r,headers:o,...p})}catch(E){if(!bQ(E)||A)throw await b0(E,{attemptedAs:e,registry:u,configuration:r,headers:o}),E;A=await Dq(E,{configuration:r});let I={...o,...VC(A)};try{return await rn.del(`${u}${t}`,{configuration:r,headers:I,...p})}catch(v){throw await b0(v,{attemptedAs:e,registry:u,configuration:r,headers:o}),v}}}function Av(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return WC(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return oc(r)}async function xQ(t,{authType:e=2,configuration:r,ident:o}){let a=Iq(t,{configuration:r,ident:o}),n=L1t(a,e);if(!n)return null;let u=await r.reduceHook(A=>A.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:o});if(u)return u;if(a.get("npmAuthToken"))return`Bearer ${a.get("npmAuthToken")}`;if(a.get("npmAuthIdent")){let A=a.get("npmAuthIdent");return A.includes(":")?`Basic ${Buffer.from(A).toString("base64")}`:`Basic ${A}`}if(n&&e!==1)throw new zt(33,"No authentication configured for request");return null}function L1t(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function M1t(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await rn.get(new vq.URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function Dq(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Nt.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,de.pretty(e,"$1",de.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&Ji.openUrl){let{openNow:u}=await(0,Bq.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});u&&(await Ji.openUrl(n[1])||(a.reportSeparator(),a.reportWarning(0,"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.")))}}}),process.stdout.write(` +`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||"";let{otp:o}=await(0,Bq.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(` +`),o}function bQ(t){if(t.originalError?.name!=="HTTPError")return!1;try{return(t.originalError?.response.headers["www-authenticate"].split(/,\s*/).map(r=>r.toLowerCase())).includes("otp")}catch{return!1}}function VC(t){return{["npm-otp"]:t}}var fv=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o,params:a}=W.parseRange(e.reference);return!(!x1e.default.valid(o)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let{params:o}=W.parseRange(e.reference);if(o===null||typeof o.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await ym(o.__archiveUrl,{customErrorMessage:mm,configuration:r.project.configuration,ident:e});return await Xi.convertToZip(a,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();var pv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!W.tryParseDescriptor(e.range.slice(Wn.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){let o=r.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return r.resolver.getResolutionDependencies(o,r)}async getCandidates(e,r,o){let a=o.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return await o.resolver.getCandidates(a,r,o)}async getSatisfying(e,r,o,a){let n=a.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return a.resolver.getSatisfying(n,r,o,a)}resolve(e,r){throw new Error("Unreachable")}};Ye();Ye();var b1e=$e(zn()),k1e=Be("url");var dl=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let o=new k1e.URL(e.reference);return!(!b1e.default.valid(o.pathname)||o.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o;try{o=await ym(dl.getLocatorUrl(e),{customErrorMessage:mm,configuration:r.project.configuration,ident:e})}catch{o=await ym(dl.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:mm,configuration:r.project.configuration,ident:e})}return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:o}){let a=WC(e.scope,{configuration:o}),n=dl.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),a=a.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===a+n||r===a+n.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=kr.clean(e.reference.slice(Wn.length));if(r===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");return`${SQ(e)}/-/${e.name}-${r}.tgz`}};Ye();Ye();Ye();var Pq=$e(zn());var kQ=W.makeIdent(null,"node-gyp"),O1t=/\b(node-gyp|prebuild-install)\b/,hv=class{supportsDescriptor(e,r){return e.range.startsWith(Wn)?!!kr.validRange(e.range.slice(Wn.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o}=W.parseRange(e.reference);return!!Pq.default.valid(o)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=kr.validRange(e.range.slice(Wn.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);let n=await KC(e,{cache:o.fetchOptions?.cache,project:o.project,version:Pq.default.valid(a.raw)?a.raw:void 0}),u=je.mapAndFilter(Object.keys(n.versions),h=>{try{let E=new kr.SemVer(h);if(a.test(E))return E}catch{}return je.mapAndFilter.skip}),A=u.filter(h=>!n.versions[h.raw].deprecated),p=A.length>0?A:u;return p.sort((h,E)=>-h.compare(E)),p.map(h=>{let E=W.makeLocator(e,`${Wn}${h.raw}`),I=n.versions[h.raw].dist.tarball;return dl.isConventionalTarballUrl(E,I,{configuration:o.project.configuration})?E:W.bindLocator(E,{__archiveUrl:I})})}async getSatisfying(e,r,o,a){let n=kr.validRange(e.range.slice(Wn.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);return{locators:je.mapAndFilter(o,p=>{if(p.identHash!==e.identHash)return je.mapAndFilter.skip;let h=W.tryParseRange(p.reference,{requireProtocol:Wn});if(!h)return je.mapAndFilter.skip;let E=new kr.SemVer(h.selector);return n.test(E)?{locator:p,version:E}:je.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:o}=W.parseRange(e.reference),a=kr.clean(o);if(a===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await KC(e,{cache:r.fetchOptions?.cache,project:r.project,version:a});if(!Object.hasOwn(n,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(!Object.hasOwn(n.versions,a))throw new zt(16,`Registry failed to return reference "${a}"`);let u=new Mt;if(u.load(n.versions[a]),!u.dependencies.has(kQ.identHash)&&!u.peerDependencies.has(kQ.identHash)){for(let A of u.scripts.values())if(A.match(O1t)){u.dependencies.set(kQ.identHash,W.makeDescriptor(kQ,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:u.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(u.dependencies),peerDependencies:u.peerDependencies,dependenciesMeta:u.dependenciesMeta,peerDependenciesMeta:u.peerDependenciesMeta,bin:u.bin}}};Ye();Ye();var Q1e=$e(zn());var gv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!QE.test(e.range.slice(Wn.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(Wn.length),n=await KC(e,{cache:o.fetchOptions?.cache,project:o.project});if(!Object.hasOwn(n,"dist-tags"))throw new zt(15,'Registry returned invalid data - missing "dist-tags" field');let u=n["dist-tags"];if(!Object.hasOwn(u,a))throw new zt(16,`Registry failed to return tag "${a}"`);let A=u[a],p=W.makeLocator(e,`${Wn}${A}`),h=n.versions[A].dist.tarball;return dl.isConventionalTarballUrl(p,h,{configuration:o.project.configuration})?[p]:[W.bindLocator(p,{__archiveUrl:h})]}async getSatisfying(e,r,o,a){let n=[];for(let u of o){if(u.identHash!==e.identHash)continue;let A=W.tryParseRange(u.reference,{requireProtocol:Wn});if(!(!A||!Q1e.default.valid(A.selector))){if(A.params?.__archiveUrl){let p=W.makeRange({protocol:Wn,selector:A.selector,source:null,params:null}),[h]=await a.resolver.getCandidates(W.makeDescriptor(e,p),r,a);if(u.reference!==h.reference)continue}n.push(u)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var sw={};Kt(sw,{getGitHead:()=>Lvt,getPublishAccess:()=>wBe,getReadmeContent:()=>IBe,makePublishBody:()=>Nvt});Ye();Ye();Pt();var hG={};Kt(hG,{PackCommand:()=>O0,default:()=>mvt,packUtils:()=>CA});Ye();Ye();Ye();Pt();qt();var CA={};Kt(CA,{genPackList:()=>$Q,genPackStream:()=>pG,genPackageManifest:()=>lBe,hasPackScripts:()=>AG,prepareForPack:()=>fG});Ye();Pt();var uG=$e(Zo()),oBe=$e(rBe()),aBe=Be("zlib"),ovt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],avt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function AG(t){return!!(un.hasWorkspaceScript(t,"prepack")||un.hasWorkspaceScript(t,"postpack"))}async function fG(t,{report:e},r){await un.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let o=K.join(t.cwd,Mt.fileName);await oe.existsPromise(o)&&await t.manifest.loadFile(o,{baseFs:oe}),await r()}finally{await un.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function pG(t,e){typeof e>"u"&&(e=await $Q(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(K.normalize(n));for(let n of t.manifest.bin.values())r.add(K.normalize(n));let o=oBe.default.pack();process.nextTick(async()=>{for(let n of e){let u=K.normalize(n),A=K.resolve(t.cwd,u),p=K.join("package",u),h=await oe.lstatPromise(A),E={name:p,mtime:new Date(vi.SAFE_TIME*1e3)},I=r.has(u)?493:420,v,b,C=new Promise((L,U)=>{v=L,b=U}),T=L=>{L?b(L):v()};if(h.isFile()){let L;u==="package.json"?L=Buffer.from(JSON.stringify(await lBe(t),null,2)):L=await oe.readFilePromise(A),o.entry({...E,mode:I,type:"file"},L,T)}else h.isSymbolicLink()?o.entry({...E,mode:I,type:"symlink",linkname:await oe.readlinkPromise(A)},T):T(new Error(`Unsupported file type ${h.mode} for ${ue.fromPortablePath(u)}`));await C}o.finalize()});let a=(0,aBe.createGzip)();return o.pipe(a),a}async function lBe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function $Q(t){let e=t.project,r=e.configuration,o={accept:[],reject:[]};for(let I of avt)o.reject.push(I);for(let I of ovt)o.accept.push(I);o.reject.push(r.get("rcFilename"));let a=I=>{if(I===null||!I.startsWith(`${t.cwd}/`))return;let v=K.relative(t.cwd,I),b=K.resolve(Bt.root,v);o.reject.push(b)};a(K.resolve(e.cwd,dr.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(I=>I.populateYarnPaths,e,I=>{a(I)});for(let I of e.workspaces){let v=K.relative(t.cwd,I.cwd);v!==""&&!v.match(/^(\.\.)?\//)&&o.reject.push(`/${v}`)}let n={accept:[],reject:[]},u=t.manifest.publishConfig?.main??t.manifest.main,A=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;u!=null&&n.accept.push(K.resolve(Bt.root,u)),A!=null&&n.accept.push(K.resolve(Bt.root,A)),typeof p=="string"&&n.accept.push(K.resolve(Bt.root,p));for(let I of h.values())n.accept.push(K.resolve(Bt.root,I));if(p instanceof Map)for(let[I,v]of p.entries())n.accept.push(K.resolve(Bt.root,I)),typeof v=="string"&&n.accept.push(K.resolve(Bt.root,v));let E=t.manifest.files!==null;if(E){n.reject.push("/*");for(let I of t.manifest.files)cBe(n.accept,I,{cwd:Bt.root})}return await lvt(t.cwd,{hasExplicitFileList:E,globalList:o,ignoreList:n})}async function lvt(t,{hasExplicitFileList:e,globalList:r,ignoreList:o}){let a=[],n=new _u(t),u=[[Bt.root,[o]]];for(;u.length>0;){let[A,p]=u.pop(),h=await n.lstatPromise(A);if(!iBe(A,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let E=await n.readdirPromise(A),I=!1,v=!1;if(!e||A!==Bt.root)for(let T of E)I=I||T===".gitignore",v=v||T===".npmignore";let b=v?await nBe(n,A,".npmignore"):I?await nBe(n,A,".gitignore"):null,C=b!==null?[b].concat(p):p;iBe(A,{globalList:r,ignoreLists:p})&&(C=[...p,{accept:[],reject:["**/*"]}]);for(let T of E)u.push([K.resolve(A,T),C])}else(h.isFile()||h.isSymbolicLink())&&a.push(K.relative(Bt.root,A))}return a.sort()}async function nBe(t,e,r){let o={accept:[],reject:[]},a=await t.readFilePromise(K.join(e,r),"utf8");for(let n of a.split(/\n/g))cBe(o.reject,n,{cwd:e});return o}function cvt(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=K.resolve(e,t)),r&&(t=`!${t}`),t}function cBe(t,e,{cwd:r}){let o=e.trim();o===""||o[0]==="#"||t.push(cvt(o,{cwd:r}))}function iBe(t,{globalList:e,ignoreLists:r}){let o=ZQ(t,e.accept);if(o!==0)return o===2;let a=ZQ(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let u=ZQ(t,n.accept);if(u!==0)return u===2;let A=ZQ(t,n.reject);if(A!==0)return A===1}return!1}function ZQ(t,e){let r=e,o=[];for(let a=0;a{await fG(a,{report:p},async()=>{p.reportJson({base:ue.fromPortablePath(a.cwd)});let h=await $Q(a);for(let E of h)p.reportInfo(null,ue.fromPortablePath(E)),p.reportJson({location:ue.fromPortablePath(E)});if(!this.dryRun){let E=await pG(a,h),I=oe.createWriteStream(u);E.pipe(I),await new Promise(v=>{I.on("finish",v)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${de.pretty(r,u,de.Type.PATH)}`),p.reportJson({output:ue.fromPortablePath(u)}))})).exitCode()}};O0.paths=[["pack"]],O0.usage=nt.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]});function uvt(t,{workspace:e}){let r=t.replace("%s",Avt(e)).replace("%v",fvt(e));return ue.toPortablePath(r)}function Avt(t){return t.manifest.name!==null?W.slugifyIdent(t.manifest.name):"package"}function fvt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var pvt=["dependencies","devDependencies","peerDependencies"],hvt="workspace:",gvt=(t,e)=>{e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let o of pvt)for(let a of t.manifest.getForScope(o).values()){let n=r.tryWorkspaceByDescriptor(a),u=W.parseRange(a.range);if(u.protocol===hvt)if(n===null){if(r.tryWorkspaceByIdent(a)===null)throw new zt(21,`${W.prettyDescriptor(r.configuration,a)}: No local workspace found for this range`)}else{let A;W.areDescriptorsEqual(a,n.anchoredDescriptor)||u.selector==="*"?A=n.manifest.version??"0.0.0":u.selector==="~"||u.selector==="^"?A=`${u.selector}${n.manifest.version??"0.0.0"}`:A=u.selector;let p=o==="dependencies"?W.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":o;e[h][W.stringifyIdent(a)]=A}}},dvt={hooks:{beforeWorkspacePacking:gvt},commands:[O0]},mvt=dvt;var yBe=Be("crypto"),EBe=$e(mBe()),CBe=Be("url");async function Nvt(t,e,{access:r,tag:o,registry:a,gitHead:n}){let u=t.manifest.name,A=t.manifest.version,p=W.stringifyIdent(u),h=(0,yBe.createHash)("sha1").update(e).digest("hex"),E=EBe.default.fromData(e).toString(),I=r??wBe(t,u),v=await IBe(t),b=await CA.genPackageManifest(t),C=`${p}-${A}.tgz`,T=new CBe.URL(`${oc(a)}/${p}/-/${C}`);return{_id:p,_attachments:{[C]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:p,access:I,["dist-tags"]:{[o]:A},versions:{[A]:{...b,_id:`${p}@${A}`,name:p,version:A,gitHead:n,dist:{shasum:h,integrity:E,tarball:T.toString()}}},readme:v}}async function Lvt(t){try{let{stdout:e}=await Ur.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}function wBe(t,e){let r=t.project.configuration;return t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?t.manifest.publishConfig.access:r.get("npmPublishAccess")!==null?r.get("npmPublishAccess"):e.scope?"restricted":"public"}async function IBe(t){let e=ue.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${W.stringifyIdent(r)} +`;try{a=await oe.readFilePromise(e,"utf8")}catch(n){if(n.code==="ENOENT")return a;throw n}return a}var yG={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"BOOLEAN",default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:"SECRET",default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:"SECRET",default:null}},BBe={npmAuditRegistry:{description:"Registry to query for audit reports",type:"STRING",default:null},npmPublishRegistry:{description:"Registry to push packages to",type:"STRING",default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"STRING",default:"https://registry.yarnpkg.com"}},Mvt={configuration:{...yG,...BBe,npmScopes:{description:"Settings per package scope",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{...yG,...BBe}}},npmRegistries:{description:"Settings per registry",type:"MAP",normalizeKeys:oc,valueDefinition:{description:"",type:"SHAPE",properties:{...yG}}}},fetchers:[fv,dl],resolvers:[pv,hv,gv]},Ovt=Mvt;var xG={};Kt(xG,{NpmAuditCommand:()=>_0,NpmInfoCommand:()=>H0,NpmLoginCommand:()=>j0,NpmLogoutCommand:()=>q0,NpmPublishCommand:()=>G0,NpmTagAddCommand:()=>W0,NpmTagListCommand:()=>Y0,NpmTagRemoveCommand:()=>V0,NpmWhoamiCommand:()=>K0,default:()=>Gvt,npmAuditTypes:()=>Tv,npmAuditUtils:()=>eF});Ye();Ye();qt();var vG=$e(Zo());Za();var Tv={};Kt(Tv,{Environment:()=>Qv,Severity:()=>Fv});var Qv=(o=>(o.All="all",o.Production="production",o.Development="development",o))(Qv||{}),Fv=(n=>(n.Info="info",n.Low="low",n.Moderate="moderate",n.High="high",n.Critical="critical",n))(Fv||{});var eF={};Kt(eF,{allSeverities:()=>ow,getPackages:()=>BG,getReportTree:()=>wG,getSeverityInclusions:()=>CG,getTopLevelDependencies:()=>IG});Ye();var vBe=$e(zn());var ow=["info","low","moderate","high","critical"];function CG(t){if(typeof t>"u")return new Set(ow);let e=ow.indexOf(t),r=ow.slice(e);return new Set(r)}function wG(t){let e={},r={children:e};for(let[o,a]of je.sortMap(Object.entries(t),n=>n[0]))for(let n of je.sortMap(a,u=>`${u.id}`))e[`${o}/${n.id}`]={value:de.tuple(de.Type.IDENT,W.parseIdent(o)),children:{ID:typeof n.id<"u"&&{label:"ID",value:de.tuple(de.Type.ID,n.id)},Issue:{label:"Issue",value:de.tuple(de.Type.NO_HINT,n.title)},URL:typeof n.url<"u"&&{label:"URL",value:de.tuple(de.Type.URL,n.url)},Severity:{label:"Severity",value:de.tuple(de.Type.NO_HINT,n.severity)},["Vulnerable Versions"]:{label:"Vulnerable Versions",value:de.tuple(de.Type.RANGE,n.vulnerable_versions)},["Tree Versions"]:{label:"Tree Versions",children:[...n.versions].sort(vBe.default.compare).map(u=>({value:de.tuple(de.Type.REFERENCE,u)}))},Dependents:{label:"Dependents",children:je.sortMap(n.dependents,u=>W.stringifyLocator(u)).map(u=>({value:de.tuple(de.Type.LOCATOR,u)}))}}};return r}function IG(t,e,{all:r,environment:o}){let a=[],n=r?t.workspaces:[e],u=["all","production"].includes(o),A=["all","development"].includes(o);for(let p of n)for(let h of p.anchoredPackage.dependencies.values())(p.manifest.devDependencies.has(h.identHash)?!A:!u)||a.push({workspace:p,dependency:h});return a}function BG(t,e,{recursive:r}){let o=new Map,a=new Set,n=[],u=(A,p)=>{let h=t.storedResolutions.get(p.descriptorHash);if(typeof h>"u")throw new Error("Assertion failed: The resolution should have been registered");if(!a.has(h))a.add(h);else return;let E=t.storedPackages.get(h);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");if(W.ensureDevirtualizedLocator(E).reference.startsWith("npm:")&&E.version!==null){let v=W.stringifyIdent(E),b=je.getMapWithDefault(o,v);je.getArrayWithDefault(b,E.version).push(A)}if(r)for(let v of E.dependencies.values())n.push([E,v])};for(let{workspace:A,dependency:p}of e)n.push([A.anchoredLocator,p]);for(;n.length>0;){let[A,p]=n.shift();u(A,p)}return o}var _0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=ge.String("--environment","all",{description:"Which environments to cover",validator:Vs(Qv)});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.noDeprecations=ge.Boolean("--no-deprecations",!1,{description:"Don't warn about deprecated packages"});this.severity=ge.String("--severity","info",{description:"Minimal severity requested for packages to be displayed",validator:Vs(Fv)});this.excludes=ge.Array("--exclude",[],{description:"Array of glob patterns of packages to exclude from audit"});this.ignores=ge.Array("--ignore",[],{description:"Array of glob patterns of advisory ID's to ignore in the audit report"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=IG(o,a,{all:this.all,environment:this.environment}),u=BG(o,n,{recursive:this.recursive}),A=Array.from(new Set([...r.get("npmAuditExcludePackages"),...this.excludes])),p=Object.create(null);for(let[L,U]of u)A.some(J=>vG.default.isMatch(L,J))||(p[L]=[...U.keys()]);let h=Zn.getAuditRegistry({configuration:r}),E,I=await AA.start({configuration:r,stdout:this.context.stdout},async()=>{let L=on.post("/-/npm/v1/security/advisories/bulk",p,{authType:on.AuthType.BEST_EFFORT,configuration:r,jsonResponse:!0,registry:h}),U=this.noDeprecations?[]:await Promise.all(Array.from(Object.entries(p),async([te,le])=>{let pe=await on.getPackageMetadata(W.parseIdent(te),{project:o});return je.mapAndFilter(le,Ae=>{let{deprecated:ye}=pe.versions[Ae];return ye?[te,Ae,ye]:je.mapAndFilter.skip})})),J=await L;for(let[te,le,pe]of U.flat(1))Object.hasOwn(J,te)&&J[te].some(Ae=>kr.satisfiesWithPrereleases(le,Ae.vulnerable_versions))||(J[te]??=[],J[te].push({id:`${te} (deprecation)`,title:pe.trim()||"This package has been deprecated.",severity:"moderate",vulnerable_versions:le}));E=J});if(I.hasErrors())return I.exitCode();let v=CG(this.severity),b=Array.from(new Set([...r.get("npmAuditIgnoreAdvisories"),...this.ignores])),C=Object.create(null);for(let[L,U]of Object.entries(E)){let J=U.filter(te=>!vG.default.isMatch(`${te.id}`,b)&&v.has(te.severity));J.length>0&&(C[L]=J.map(te=>{let le=u.get(L);if(typeof le>"u")throw new Error("Assertion failed: Expected the registry to only return packages that were requested");let pe=[...le.keys()].filter(ye=>kr.satisfiesWithPrereleases(ye,te.vulnerable_versions)),Ae=new Map;for(let ye of pe)for(let ae of le.get(ye))Ae.set(ae.locatorHash,ae);return{...te,versions:pe,dependents:[...Ae.values()]}}))}let T=Object.keys(C).length>0;return T?($s.emitTree(wG(C),{configuration:r,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async L=>{L.reportInfo(1,"No audit suggestions")}),T?1:0)}};_0.paths=[["npm","audit"]],_0.usage=nt.Usage({description:"perform a vulnerability audit against the installed packages",details:` + This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths). + + For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \`-A,--all\`. To extend this search to both direct and transitive dependencies, use \`-R,--recursive\`. + + Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${ow.map(r=>`\`${r}\``).join(", ")}. + + If the \`--json\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages. + + If certain packages produce false positives for a particular environment, the \`--exclude\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \`npmAuditExcludePackages\` option. + + If particular advisories are needed to be ignored, the \`--ignore\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \`npmAuditIgnoreAdvisories\` option. + + To understand the dependency tree requiring vulnerable packages, check the raw report with the \`--json\` flag or use \`yarn why package\` to get more information as to who depends on them. + `,examples:[["Checks for known security issues with the installed packages. The output is a list of known issues.","yarn npm audit"],["Audit dependencies in all workspaces","yarn npm audit --all"],["Limit auditing to `dependencies` (excludes `devDependencies`)","yarn npm audit --environment production"],["Show audit report as valid JSON","yarn npm audit --json"],["Audit all direct and transitive dependencies","yarn npm audit --recursive"],["Output moderate (or more severe) vulnerabilities","yarn npm audit --severity moderate"],["Exclude certain packages","yarn npm audit --exclude package1 --exclude package2"],["Ignore specific advisories","yarn npm audit --ignore 1234567 --ignore 7654321"]]});Ye();Ye();Pt();qt();var DG=$e(zn()),PG=Be("util"),H0=class extends ut{constructor(){super(...arguments);this.fields=ge.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.fields<"u"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],u=!1,A=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async p=>{for(let h of this.packages){let E;if(h==="."){let le=o.topLevelWorkspace;if(!le.manifest.name)throw new it(`Missing ${de.pretty(r,"name",de.Type.CODE)} field in ${ue.fromPortablePath(K.join(le.cwd,dr.manifest))}`);E=W.makeDescriptor(le.manifest.name,"unknown")}else E=W.parseDescriptor(h);let I=on.getIdentUrl(E),v=SG(await on.get(I,{configuration:r,ident:E,jsonResponse:!0,customErrorMessage:on.customPackageError})),b=Object.keys(v.versions).sort(DG.default.compareLoose),T=v["dist-tags"].latest||b[b.length-1],L=kr.validRange(E.range);if(L){let le=DG.default.maxSatisfying(b,L);le!==null?T=le:(p.reportWarning(0,`Unmet range ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0)}else Object.hasOwn(v["dist-tags"],E.range)?T=v["dist-tags"][E.range]:E.range!=="unknown"&&(p.reportWarning(0,`Unknown tag ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0);let U=v.versions[T],J={...v,...U,version:T,versions:b},te;if(a!==null){te={};for(let le of a){let pe=J[le];if(typeof pe<"u")te[le]=pe;else{p.reportWarning(1,`The ${de.pretty(r,le,de.Type.CODE)} field doesn't exist inside ${W.prettyIdent(r,E)}'s information`),u=!0;continue}}}else this.json||(delete J.dist,delete J.readme,delete J.users),te=J;p.reportJson(te),this.json||n.push(te)}});PG.inspect.styles.name="cyan";for(let p of n)(p!==n[0]||u)&&this.context.stdout.write(` +`),this.context.stdout.write(`${(0,PG.inspect)(p,{depth:1/0,colors:!0,compact:!1})} +`);return A.exitCode()}};H0.paths=[["npm","info"]],H0.usage=nt.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command fetches information about a package from the npm registry and prints it in a tree format.\n\n The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\n\n Append `@` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\n\n If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\n\n By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\n ",examples:[["Show all available information about react (except the `dist`, `readme`, and `users` fields)","yarn npm info react"],["Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)","yarn npm info react --json"],["Show all available information about react@16.12.0","yarn npm info react@16.12.0"],["Show all available information about react@next","yarn npm info react@next"],["Show the description of react","yarn npm info react --fields description"],["Show all available versions of react","yarn npm info react --fields versions"],["Show the readme of react","yarn npm info react --fields readme"],["Show a few fields of react","yarn npm info react --fields homepage,repository"]]});function SG(t){if(Array.isArray(t)){let e=[];for(let r of t)r=SG(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let o=SG(t[r]);o&&(e[r]=o)}return e}else return t||null}Ye();Ye();qt();var DBe=$e(A2()),j0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Login to the publish registry"});this.alwaysAuth=ge.Boolean("--always-auth",{description:"Set the npmAlwaysAuth configuration"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Nt.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let u=await _vt({configuration:r,registry:o,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),A=`/-/user/org.couchdb.user:${encodeURIComponent(u.name)}`,p=await on.put(A,u,{attemptedAs:u.name,configuration:r,registry:o,jsonResponse:!0,authType:on.AuthType.NO_AUTH});return await Uvt(o,p.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),n.reportInfo(0,"Successfully logged in")})).exitCode()}};j0.paths=[["npm","login"]],j0.usage=nt.Usage({category:"Npm-related commands",description:"store new login info to access the npm registry",details:"\n This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\n\n Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n ",examples:[["Login to the default registry","yarn npm login"],["Login to the registry linked to the @my-scope registry","yarn npm login --scope my-scope"],["Login to the publish registry for the current package","yarn npm login --publish"]]});async function tF({scope:t,publish:e,configuration:r,cwd:o}){return t&&e?Zn.getScopeRegistry(t,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):t?Zn.getScopeRegistry(t,{configuration:r}):e?Zn.getPublishRegistry((await AC(r,o)).manifest,{configuration:r}):Zn.getDefaultRegistry({configuration:r})}async function Uvt(t,e,{alwaysAuth:r,scope:o}){let a=u=>A=>{let p=je.isIndexableObject(A)?A:{},h=p[u],E=je.isIndexableObject(h)?h:{};return{...p,[u]:{...E,...r!==void 0?{npmAlwaysAuth:r}:{},npmAuthToken:e}}},n=o?{npmScopes:a(o)}:{npmRegistries:a(t)};return await Ve.updateHomeConfiguration(n)}async function _vt({configuration:t,registry:e,report:r,stdin:o,stdout:a}){r.reportInfo(0,`Logging in to ${de.pretty(t,e,de.Type.URL)}`);let n=!1;if(e.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(r.reportInfo(0,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),r.reportSeparator(),t.env.YARN_IS_TEST_ENV)return{name:t.env.YARN_INJECT_NPM_USER||"",password:t.env.YARN_INJECT_NPM_PASSWORD||""};let{username:u,password:A}=await(0,DBe.prompt)([{type:"input",name:"username",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a}]);return r.reportSeparator(),{name:u,password:A}}Ye();Ye();qt();var aw=new Set(["npmAuthIdent","npmAuthToken"]),q0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=ge.Boolean("-A,--all",!1,{description:"Logout of all registries"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=async()=>{let n=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),u=await Ve.find(this.context.cwd,this.context.plugins),A=W.makeIdent(this.scope??null,"pkg");return!Zn.getAuthConfiguration(n,{configuration:u,ident:A}).get("npmAuthToken")};return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{if(this.all&&(await jvt(),n.reportInfo(0,"Successfully logged out from everything")),this.scope){await PBe("npmScopes",this.scope),await o()?n.reportInfo(0,`Successfully logged out from ${this.scope}`):n.reportWarning(0,"Scope authentication settings removed, but some other ones settings still apply to it");return}let u=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish});await PBe("npmRegistries",u),await o()?n.reportInfo(0,`Successfully logged out from ${u}`):n.reportWarning(0,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};q0.paths=[["npm","logout"]],q0.usage=nt.Usage({category:"Npm-related commands",description:"logout of the npm registry",details:"\n This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\n\n Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n\n Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\n ",examples:[["Logout of the default registry","yarn npm logout"],["Logout of the @my-scope scope","yarn npm logout --scope my-scope"],["Logout of the publish registry for the current package","yarn npm logout --publish"],["Logout of all registries","yarn npm logout --all"]]});function Hvt(t,e){let r=t[e];if(!je.isIndexableObject(r))return!1;let o=new Set(Object.keys(r));if([...aw].every(n=>!o.has(n)))return!1;for(let n of aw)o.delete(n);if(o.size===0)return t[e]=void 0,!0;let a={...r};for(let n of aw)delete a[n];return t[e]=a,!0}async function jvt(){let t=e=>{let r=!1,o=je.isIndexableObject(e)?{...e}:{};o.npmAuthToken&&(delete o.npmAuthToken,r=!0);for(let a of Object.keys(o))Hvt(o,a)&&(r=!0);if(Object.keys(o).length!==0)return r?o:e};return await Ve.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function PBe(t,e){return await Ve.updateHomeConfiguration({[t]:r=>{let o=je.isIndexableObject(r)?r:{};if(!Object.hasOwn(o,e))return r;let a=o[e],n=je.isIndexableObject(a)?a:{},u=new Set(Object.keys(n));if([...aw].every(p=>!u.has(p)))return r;for(let p of aw)u.delete(p);if(u.size===0)return Object.keys(o).length===1?void 0:{...o,[e]:void 0};let A={};for(let p of aw)A[p]=void 0;return{...o,[e]:{...n,...A}}}})}Ye();qt();var G0=class extends ut{constructor(){super(...arguments);this.access=ge.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=ge.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=ge.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"});this.otp=ge.String("--otp",{description:"The OTP token to use with the command"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);if(a.manifest.private)throw new it("Private workspaces cannot be published");if(a.manifest.name===null||a.manifest.version===null)throw new it("Workspaces must have valid names and versions to be published on an external registry");await o.restoreInstallState();let n=a.manifest.name,u=a.manifest.version,A=Zn.getPublishRegistry(a.manifest,{configuration:r});return(await Nt.start({configuration:r,stdout:this.context.stdout},async h=>{if(this.tolerateRepublish)try{let E=await on.get(on.getIdentUrl(n),{configuration:r,registry:A,ident:n,jsonResponse:!0});if(!Object.hasOwn(E,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(Object.hasOwn(E.versions,u)){h.reportWarning(0,`Registry already knows about version ${u}; skipping.`);return}}catch(E){if(E.originalError?.response?.statusCode!==404)throw E}await un.maybeExecuteWorkspaceLifecycleScript(a,"prepublish",{report:h}),await CA.prepareForPack(a,{report:h},async()=>{let E=await CA.genPackList(a);for(let T of E)h.reportInfo(null,T);let I=await CA.genPackStream(a,E),v=await je.bufferStream(I),b=await sw.getGitHead(a.cwd),C=await sw.makePublishBody(a,v,{access:this.access,tag:this.tag,registry:A,gitHead:b});await on.put(on.getIdentUrl(n),C,{configuration:r,registry:A,ident:n,otp:this.otp,jsonResponse:!0})}),h.reportInfo(0,"Package archive published")})).exitCode()}};G0.paths=[["npm","publish"]],G0.usage=nt.Usage({category:"Npm-related commands",description:"publish the active workspace to the npm registry",details:'\n This command will pack the active workspace into a fresh archive and upload it to the npm registry.\n\n The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\n\n Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka "private packages"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\n ',examples:[["Publish the active workspace","yarn npm publish"]]});Ye();qt();var SBe=$e(zn());Ye();Pt();qt();var Y0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String({required:!1})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n;if(typeof this.package<"u")n=W.parseIdent(this.package);else{if(!a)throw new rr(o.cwd,this.context.cwd);if(!a.manifest.name)throw new it(`Missing 'name' field in ${ue.fromPortablePath(K.join(a.cwd,dr.manifest))}`);n=a.manifest.name}let u=await Rv(n,r),p={children:je.sortMap(Object.entries(u),([h])=>h).map(([h,E])=>({value:de.tuple(de.Type.RESOLUTION,{descriptor:W.makeDescriptor(n,h),locator:W.makeLocator(n,E)})}))};return $s.emitTree(p,{configuration:r,json:this.json,stdout:this.context.stdout})}};Y0.paths=[["npm","tag","list"]],Y0.usage=nt.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:` + This command will list all tags of a package from the npm registry. + + If the package is not specified, Yarn will default to the current workspace. + `,examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]});async function Rv(t,e){let r=`/-/package${on.getIdentUrl(t)}/dist-tags`;return on.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:on.customPackageError})}var W0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseDescriptor(this.package,!0),u=n.range;if(!SBe.default.valid(u))throw new it(`The range ${de.pretty(r,n.range,de.Type.RANGE)} must be a valid semver version`);let A=Zn.getPublishRegistry(a.manifest,{configuration:r}),p=de.pretty(r,n,de.Type.IDENT),h=de.pretty(r,u,de.Type.RANGE),E=de.pretty(r,this.tag,de.Type.CODE);return(await Nt.start({configuration:r,stdout:this.context.stdout},async v=>{let b=await Rv(n,r);Object.hasOwn(b,this.tag)&&b[this.tag]===u&&v.reportWarning(0,`Tag ${E} is already set to version ${h}`);let C=`/-/package${on.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await on.put(C,u,{configuration:r,registry:A,ident:n,jsonRequest:!0,jsonResponse:!0}),v.reportInfo(0,`Tag ${E} added to version ${h} of package ${p}`)})).exitCode()}};W0.paths=[["npm","tag","add"]],W0.usage=nt.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:` + This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten. + `,examples:[["Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`","yarn npm tag add my-pkg@2.3.4-beta.4 beta"]]});Ye();qt();var V0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){if(this.tag==="latest")throw new it("The 'latest' tag cannot be removed.");let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseIdent(this.package),u=Zn.getPublishRegistry(a.manifest,{configuration:r}),A=de.pretty(r,this.tag,de.Type.CODE),p=de.pretty(r,n,de.Type.IDENT),h=await Rv(n,r);if(!Object.hasOwn(h,this.tag))throw new it(`${A} is not a tag of package ${p}`);return(await Nt.start({configuration:r,stdout:this.context.stdout},async I=>{let v=`/-/package${on.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await on.del(v,{configuration:r,registry:u,ident:n,jsonResponse:!0}),I.reportInfo(0,`Tag ${A} removed from package ${p}`)})).exitCode()}};V0.paths=[["npm","tag","remove"]],V0.usage=nt.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:` + This command will remove a tag from a package from the npm registry. + `,examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]});Ye();Ye();qt();var K0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Print username for the publish registry"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o;return this.scope&&this.publish?o=Zn.getScopeRegistry(this.scope,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):this.scope?o=Zn.getScopeRegistry(this.scope,{configuration:r}):this.publish?o=Zn.getPublishRegistry((await AC(r,this.context.cwd)).manifest,{configuration:r}):o=Zn.getDefaultRegistry({configuration:r}),(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u;try{u=await on.get("/-/whoami",{configuration:r,registry:o,authType:on.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?W.makeIdent(this.scope,""):void 0})}catch(A){if(A.response?.statusCode===401||A.response?.statusCode===403){n.reportError(41,"Authentication failed - your credentials may have expired");return}else throw A}n.reportInfo(0,u.username)})).exitCode()}};K0.paths=[["npm","whoami"]],K0.usage=nt.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]});var qvt={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:"STRING",default:null},npmAuditExcludePackages:{description:"Array of glob patterns of packages to exclude from npm audit",type:"STRING",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:"Array of glob patterns of advisory IDs to exclude from npm audit",type:"STRING",default:[],isArray:!0}},commands:[_0,H0,j0,q0,G0,W0,Y0,V0,K0]},Gvt=qvt;var NG={};Kt(NG,{PatchCommand:()=>X0,PatchCommitCommand:()=>z0,PatchFetcher:()=>Uv,PatchResolver:()=>_v,default:()=>lDt,patchUtils:()=>Dm});Ye();Ye();Pt();nA();var Dm={};Kt(Dm,{applyPatchFile:()=>nF,diffFolders:()=>TG,ensureUnpatchedDescriptor:()=>bG,ensureUnpatchedLocator:()=>sF,extractPackageToDisk:()=>FG,extractPatchFlags:()=>RBe,isParentRequired:()=>QG,isPatchDescriptor:()=>iF,isPatchLocator:()=>J0,loadPatchFiles:()=>Ov,makeDescriptor:()=>oF,makeLocator:()=>kG,makePatchHash:()=>RG,parseDescriptor:()=>Lv,parseLocator:()=>Mv,parsePatchFile:()=>Nv,unpatchDescriptor:()=>sDt,unpatchLocator:()=>oDt});Ye();Pt();Ye();Pt();var Yvt=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function lw(t){return K.relative(Bt.root,K.resolve(Bt.root,ue.toPortablePath(t)))}function Wvt(t){let e=t.trim().match(Yvt);if(!e)throw new Error(`Bad header line: '${t}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var Vvt=420,Kvt=493;var xBe=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),Jvt=t=>({header:Wvt(t),parts:[]}),zvt={["@"]:"header",["-"]:"deletion",["+"]:"insertion",[" "]:"context",["\\"]:"pragma",undefined:"context"};function Xvt(t){let e=[],r=xBe(),o="parsing header",a=null,n=null;function u(){a&&(n&&(a.parts.push(n),n=null),r.hunks.push(a),a=null)}function A(){u(),e.push(r),r=xBe()}for(let p=0;p0?"patch":"mode change",J=null;switch(U){case"rename":{if(!E||!I)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:o,fromPath:lw(E),toPath:lw(I)}),J=I}break;case"file deletion":{let te=a||C;if(!te)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:o,hunk:L&&L[0]||null,path:lw(te),mode:rF(p),hash:v})}break;case"file creation":{let te=n||T;if(!te)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:o,hunk:L&&L[0]||null,path:lw(te),mode:rF(h),hash:b})}break;case"patch":case"mode change":J=T||n;break;default:je.assertNever(U);break}J&&u&&A&&u!==A&&e.push({type:"mode change",semverExclusivity:o,path:lw(J),oldMode:rF(u),newMode:rF(A)}),J&&L&&L.length&&e.push({type:"patch",semverExclusivity:o,path:lw(J),hunks:L,beforeHash:v,afterHash:b})}if(e.length===0)throw new Error("Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string");return e}function rF(t){let e=parseInt(t,8)&511;if(e!==Vvt&&e!==Kvt)throw new Error(`Unexpected file mode string: ${t}`);return e}function Nv(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),Zvt(Xvt(e))}function $vt(t){let e=0,r=0;for(let{type:o,lines:a}of t.parts)switch(o){case"context":r+=a.length,e+=a.length;break;case"deletion":e+=a.length;break;case"insertion":r+=a.length;break;default:je.assertNever(o);break}if(e!==t.header.original.length||r!==t.header.patched.length){let o=a=>a<0?a:`+${a}`;throw new Error(`hunk header integrity check failed (expected @@ ${o(t.header.original.length)} ${o(t.header.patched.length)} @@, got @@ ${o(e)} ${o(r)} @@)`)}}Ye();Pt();var cw=class extends Error{constructor(r,o){super(`Cannot apply hunk #${r+1}`);this.hunk=o}};async function uw(t,e,r){let o=await t.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await t.lutimesPromise(e,o.atime,o.mtime)}async function nF(t,{baseFs:e=new Rn,dryRun:r=!1,version:o=null}={}){for(let a of t)if(!(a.semverExclusivity!==null&&o!==null&&!kr.satisfiesWithPrereleases(o,a.semverExclusivity)))switch(a.type){case"file deletion":if(r){if(!e.existsSync(a.path))throw new Error(`Trying to delete a file that doesn't exist: ${a.path}`)}else await uw(e,K.dirname(a.path),async()=>{await e.unlinkPromise(a.path)});break;case"rename":if(r){if(!e.existsSync(a.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${a.fromPath}`)}else await uw(e,K.dirname(a.fromPath),async()=>{await uw(e,K.dirname(a.toPath),async()=>{await uw(e,a.fromPath,async()=>(await e.movePromise(a.fromPath,a.toPath),a.toPath))})});break;case"file creation":if(r){if(e.existsSync(a.path))throw new Error(`Trying to create a file that already exists: ${a.path}`)}else{let n=a.hunk?a.hunk.parts[0].lines.join(` +`)+(a.hunk.parts[0].noNewlineAtEndOfFile?"":` +`):"";await e.mkdirpPromise(K.dirname(a.path),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),await e.writeFilePromise(a.path,n,{mode:a.mode}),await e.utimesPromise(a.path,vi.SAFE_TIME,vi.SAFE_TIME)}break;case"patch":await uw(e,a.path,async()=>{await rDt(a,{baseFs:e,dryRun:r})});break;case"mode change":{let u=(await e.statPromise(a.path)).mode;if(bBe(a.newMode)!==bBe(u))continue;await uw(e,a.path,async()=>{await e.chmodPromise(a.path,a.newMode)})}break;default:je.assertNever(a);break}}function bBe(t){return(t&64)>0}function kBe(t){return t.replace(/\s+$/,"")}function tDt(t,e){return kBe(t)===kBe(e)}async function rDt({hunks:t,path:e},{baseFs:r,dryRun:o=!1}){let a=await r.statSync(e).mode,u=(await r.readFileSync(e,"utf8")).split(/\n/),A=[],p=0,h=0;for(let I of t){let v=Math.max(h,I.header.patched.start+p),b=Math.max(0,v-h),C=Math.max(0,u.length-v-I.header.original.length),T=Math.max(b,C),L=0,U=0,J=null;for(;L<=T;){if(L<=b&&(U=v-L,J=QBe(I,u,U),J!==null)){L=-L;break}if(L<=C&&(U=v+L,J=QBe(I,u,U),J!==null))break;L+=1}if(J===null)throw new cw(t.indexOf(I),I);A.push(J),p+=L,h=U+I.header.original.length}if(o)return;let E=0;for(let I of A)for(let v of I)switch(v.type){case"splice":{let b=v.index+E;u.splice(b,v.numToDelete,...v.linesToInsert),E+=v.linesToInsert.length-v.numToDelete}break;case"pop":u.pop();break;case"push":u.push(v.line);break;default:je.assertNever(v);break}await r.writeFilePromise(e,u.join(` +`),{mode:a})}function QBe(t,e,r){let o=[];for(let a of t.parts)switch(a.type){case"context":case"deletion":{for(let n of a.lines){let u=e[r];if(u==null||!tDt(u,n))return null;r+=1}a.type==="deletion"&&(o.push({type:"splice",index:r-a.lines.length,numToDelete:a.lines.length,linesToInsert:[]}),a.noNewlineAtEndOfFile&&o.push({type:"push",line:""}))}break;case"insertion":o.push({type:"splice",index:r,numToDelete:0,linesToInsert:a.lines}),a.noNewlineAtEndOfFile&&o.push({type:"pop"});break;default:je.assertNever(a.type);break}return o}var iDt=/^builtin<([^>]+)>$/;function Aw(t,e){let{protocol:r,source:o,selector:a,params:n}=W.parseRange(t);if(r!=="patch:")throw new Error("Invalid patch range");if(o===null)throw new Error("Patch locators must explicitly define their source");let u=a?a.split(/&/).map(E=>ue.toPortablePath(E)):[],A=n&&typeof n.locator=="string"?W.parseLocator(n.locator):null,p=n&&typeof n.version=="string"?n.version:null,h=e(o);return{parentLocator:A,sourceItem:h,patchPaths:u,sourceVersion:p}}function iF(t){return t.range.startsWith("patch:")}function J0(t){return t.reference.startsWith("patch:")}function Lv(t){let{sourceItem:e,...r}=Aw(t.range,W.parseDescriptor);return{...r,sourceDescriptor:e}}function Mv(t){let{sourceItem:e,...r}=Aw(t.reference,W.parseLocator);return{...r,sourceLocator:e}}function sDt(t){let{sourceItem:e}=Aw(t.range,W.parseDescriptor);return e}function oDt(t){let{sourceItem:e}=Aw(t.reference,W.parseLocator);return e}function bG(t){if(!iF(t))return t;let{sourceItem:e}=Aw(t.range,W.parseDescriptor);return e}function sF(t){if(!J0(t))return t;let{sourceItem:e}=Aw(t.reference,W.parseLocator);return e}function FBe({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:o,patchHash:a},n){let u=t!==null?{locator:W.stringifyLocator(t)}:{},A=typeof o<"u"?{version:o}:{},p=typeof a<"u"?{hash:a}:{};return W.makeRange({protocol:"patch:",source:n(e),selector:r.join("&"),params:{...A,...p,...u}})}function oF(t,{parentLocator:e,sourceDescriptor:r,patchPaths:o}){return W.makeDescriptor(t,FBe({parentLocator:e,sourceItem:r,patchPaths:o},W.stringifyDescriptor))}function kG(t,{parentLocator:e,sourcePackage:r,patchPaths:o,patchHash:a}){return W.makeLocator(t,FBe({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:o,patchHash:a},W.stringifyLocator))}function TBe({onAbsolute:t,onRelative:e,onProject:r,onBuiltin:o},a){let n=a.lastIndexOf("!");n!==-1&&(a=a.slice(n+1));let u=a.match(iDt);return u!==null?o(u[1]):a.startsWith("~/")?r(a.slice(2)):K.isAbsolute(a)?t(a):e(a)}function RBe(t){let e=t.lastIndexOf("!");return{optional:(e!==-1?new Set(t.slice(0,e).split(/!/)):new Set).has("optional")}}function QG(t){return TBe({onAbsolute:()=>!1,onRelative:()=>!0,onProject:()=>!1,onBuiltin:()=>!1},t)}async function Ov(t,e,r){let o=t!==null?await r.fetcher.fetch(t,r):null,a=o&&o.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,o.localPath)}:o;o&&o!==a&&o.releaseFs&&o.releaseFs();let n=await je.releaseAfterUseAsync(async()=>await Promise.all(e.map(async u=>{let A=RBe(u),p=await TBe({onAbsolute:async h=>await oe.readFilePromise(h,"utf8"),onRelative:async h=>{if(a===null)throw new Error("Assertion failed: The parent locator should have been fetched");return await a.packageFs.readFilePromise(K.join(a.prefixPath,h),"utf8")},onProject:async h=>await oe.readFilePromise(K.join(r.project.cwd,h),"utf8"),onBuiltin:async h=>await r.project.configuration.firstHook(E=>E.getBuiltinPatch,r.project,h)},u);return{...A,source:p}})));for(let u of n)typeof u.source=="string"&&(u.source=u.source.replace(/\r\n?/g,` +`));return n}async function FG(t,{cache:e,project:r}){let o=r.storedPackages.get(t.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected the package to be registered");let a=sF(t),n=r.storedChecksums,u=new Qi,A=await oe.mktempPromise(),p=K.join(A,"source"),h=K.join(A,"user"),E=K.join(A,".yarn-patch.json"),I=r.configuration.makeFetcher(),v=[];try{let b,C;if(t.locatorHash===a.locatorHash){let T=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u});v.push(()=>T.releaseFs?.()),b=T,C=T}else b=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>b.releaseFs?.()),C=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>C.releaseFs?.());await Promise.all([oe.copyPromise(p,b.prefixPath,{baseFs:b.packageFs}),oe.copyPromise(h,C.prefixPath,{baseFs:C.packageFs}),oe.writeJsonPromise(E,{locator:W.stringifyLocator(t),version:o.version})])}finally{for(let b of v)b()}return oe.detachTemp(A),h}async function TG(t,e){let r=ue.fromPortablePath(t).replace(/\\/g,"/"),o=ue.fromPortablePath(e).replace(/\\/g,"/"),{stdout:a,stderr:n}=await Ur.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--no-renames","--text",r,o],{cwd:ue.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""}});if(n.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH. +The following error was reported by 'git': +${n}`);let u=r.startsWith("/")?A=>A.slice(1):A=>A;return a.replace(new RegExp(`(a|b)(${je.escapeRegExp(`/${u(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${je.escapeRegExp(`/${u(o)}/`)}`,"g"),"$1/").replace(new RegExp(je.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(je.escapeRegExp(`${o}/`),"g"),"")}function RG(t,e){let r=[];for(let{source:o}of t){if(o===null)continue;let a=Nv(o);for(let n of a){let{semverExclusivity:u,...A}=n;u!==null&&e!==null&&!kr.satisfiesWithPrereleases(e,u)||r.push(JSON.stringify(A))}}return wn.makeHash(`${3}`,...r).slice(0,6)}Ye();function NBe(t,{configuration:e,report:r}){for(let o of t.parts)for(let a of o.lines)switch(o.type){case"context":r.reportInfo(null,` ${de.pretty(e,a,"grey")}`);break;case"deletion":r.reportError(28,`- ${de.pretty(e,a,de.Type.REMOVED)}`);break;case"insertion":r.reportError(28,`+ ${de.pretty(e,a,de.Type.ADDED)}`);break;default:je.assertNever(o.type)}}var Uv=class{supports(e,r){return!!J0(e)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async patchPackage(e,r){let{parentLocator:o,sourceLocator:a,sourceVersion:n,patchPaths:u}=Mv(e),A=await Ov(o,u,r),p=await oe.mktempPromise(),h=K.join(p,"current.zip"),E=await r.fetcher.fetch(a,r),I=W.getIdentVendorPath(e),v=new zi(h,{create:!0,level:r.project.configuration.get("compressionLevel")});await je.releaseAfterUseAsync(async()=>{await v.copyPromise(I,E.prefixPath,{baseFs:E.packageFs,stableSort:!0})},E.releaseFs),v.saveAndClose();for(let{source:b,optional:C}of A){if(b===null)continue;let T=new zi(h,{level:r.project.configuration.get("compressionLevel")}),L=new gn(K.resolve(Bt.root,I),{baseFs:T});try{await nF(Nv(b),{baseFs:L,version:n})}catch(U){if(!(U instanceof cw))throw U;let J=r.project.configuration.get("enableInlineHunks"),te=!J&&!C?" (set enableInlineHunks for details)":"",le=`${W.prettyLocator(r.project.configuration,e)}: ${U.message}${te}`,pe=Ae=>{!J||NBe(U.hunk,{configuration:r.project.configuration,report:Ae})};if(T.discardAndClose(),C){r.report.reportWarningOnce(66,le,{reportExtra:pe});continue}else throw new zt(66,le,pe)}T.saveAndClose()}return new zi(h,{level:r.project.configuration.get("compressionLevel")})}};Ye();var _v=class{supportsDescriptor(e,r){return!!iF(e)}supportsLocator(e,r){return!!J0(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){let{patchPaths:a}=Lv(e);return a.every(n=>!QG(n))?e:W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:o}=Lv(e);return{sourceDescriptor:r.project.configuration.normalizeDependency(o)}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:a,patchPaths:n}=Lv(e),u=await Ov(a,n,o.fetchOptions),A=r.sourceDescriptor;if(typeof A>"u")throw new Error("Assertion failed: The dependency should have been resolved");let p=RG(u,A.version);return[kG(e,{parentLocator:a,sourcePackage:A,patchPaths:n,patchHash:p})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let{sourceLocator:o}=Mv(e);return{...await r.resolver.resolve(o,r),...e}}};Ye();Pt();qt();var z0=class extends ut{constructor(){super(...arguments);this.save=ge.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=K.resolve(this.context.cwd,ue.toPortablePath(this.patchFolder)),u=K.join(n,"../source"),A=K.join(n,"../.yarn-patch.json");if(!oe.existsSync(u))throw new it("The argument folder didn't get created by 'yarn patch'");let p=await TG(u,n),h=await oe.readJsonPromise(A),E=W.parseLocator(h.locator,!0);if(!o.storedPackages.has(E.locatorHash))throw new it("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(p);return}let I=r.get("patchFolder"),v=K.join(I,`${W.slugifyLocator(E)}.patch`);await oe.mkdirPromise(I,{recursive:!0}),await oe.writeFilePromise(v,p);let b=[],C=new Map;for(let T of o.storedPackages.values()){if(W.isVirtualLocator(T))continue;let L=T.dependencies.get(E.identHash);if(!L)continue;let U=W.ensureDevirtualizedDescriptor(L),J=bG(U),te=o.storedResolutions.get(J.descriptorHash);if(!te)throw new Error("Assertion failed: Expected the resolution to have been registered");if(!o.storedPackages.get(te))throw new Error("Assertion failed: Expected the package to have been registered");let pe=o.tryWorkspaceByLocator(T);if(pe)b.push(pe);else{let Ae=o.originalPackages.get(T.locatorHash);if(!Ae)throw new Error("Assertion failed: Expected the original package to have been registered");let ye=Ae.dependencies.get(L.identHash);if(!ye)throw new Error("Assertion failed: Expected the original dependency to have been registered");C.set(ye.descriptorHash,ye)}}for(let T of b)for(let L of Mt.hardDependencies){let U=T.manifest[L].get(E.identHash);if(!U)continue;let J=oF(U,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[K.join(dr.home,K.relative(o.cwd,v))]});T.manifest[L].set(U.identHash,J)}for(let T of C.values()){let L=oF(T,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[K.join(dr.home,K.relative(o.cwd,v))]});o.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:W.stringifyIdent(L),description:T.range}},reference:L.range})}await o.persist()}};z0.paths=[["patch-commit"]],z0.usage=nt.Usage({description:"generate a patch out of a directory",details:"\n By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\n\n With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\n\n Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "});Ye();Pt();qt();var X0=class extends ut{constructor(){super(...arguments);this.update=ge.Boolean("-u,--update",!1,{description:"Reapply local patches that already apply to this packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=W.parseLocator(this.package);if(u.reference==="unknown"){let A=je.mapAndFilter([...o.storedPackages.values()],p=>p.identHash!==u.identHash?je.mapAndFilter.skip:W.isVirtualLocator(p)?je.mapAndFilter.skip:J0(p)!==this.update?je.mapAndFilter.skip:p);if(A.length===0)throw new it("No package found in the project for the given locator");if(A.length>1)throw new it(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): +${A.map(p=>` +- ${W.prettyLocator(r,p)}`).join("")}`);u=A[0]}if(!o.storedPackages.has(u.locatorHash))throw new it("No package found in the project for the given locator");await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=sF(u),h=await FG(u,{cache:n,project:o});A.reportJson({locator:W.stringifyLocator(p),path:ue.fromPortablePath(h)});let E=this.update?" along with its current modifications":"";A.reportInfo(0,`Package ${W.prettyLocator(r,p)} got extracted with success${E}!`),A.reportInfo(0,`You can now edit the following folder: ${de.pretty(r,ue.fromPortablePath(h),"magenta")}`),A.reportInfo(0,`Once you are done run ${de.pretty(r,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${ue.fromPortablePath(h)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};X0.paths=[["patch"]],X0.usage=nt.Usage({description:"prepare a package for patching",details:"\n This command will cause a package to be extracted in a temporary directory intended to be editable at will.\n\n Once you're done with your changes, run `yarn patch-commit -s path` (with `path` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\n\n Calling the command when you already have a patch won't import it by default (in other words, the default behavior is to reset existing patches). However, adding the `-u,--update` flag will import any current patch.\n "});var aDt={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:"BOOLEAN",default:!1},patchFolder:{description:"Folder where the patch files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/patches"}},commands:[z0,X0],fetchers:[Uv],resolvers:[_v]},lDt=aDt;var OG={};Kt(OG,{PnpmLinker:()=>Hv,default:()=>pDt});Ye();Pt();qt();var Hv=class{getCustomDataKey(){return JSON.stringify({name:"PnpmLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the pnpm linker to be enabled");let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=a.pathsByLocator.get(e.locatorHash);if(typeof n>"u")throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return n.packageLocation}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(n){let p=a.locatorByPath.get(n[1]);if(p)return p}let u=e,A=e;do{A=u,u=K.dirname(A);let p=a.locatorByPath.get(A);if(p)return p}while(u!==A);return null}makeInstaller(e){return new LG(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},LG=class{constructor(e){this.opts=e;this.asyncActions=new je.AsyncActions(10);this.customData={pathsByLocator:new Map,locatorByPath:new Map};this.indexFolderPromise=PD(oe,{indexPath:K.join(e.project.configuration.get("globalFolder"),"index")})}attachCustomData(e){}async installPackage(e,r,o){switch(e.linkType){case"SOFT":return this.installPackageSoft(e,r,o);case"HARD":return this.installPackageHard(e,r,o)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,o){let a=K.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.opts.project.tryWorkspaceByLocator(e)?K.join(a,dr.nodeModules):null;return this.customData.pathsByLocator.set(e.locatorHash,{packageLocation:a,dependenciesLocation:n}),{packageLocation:a,buildRequest:null}}async installPackageHard(e,r,o){let a=cDt(e,{project:this.opts.project}),n=a.packageLocation;this.customData.locatorByPath.set(n,W.stringifyLocator(e)),this.customData.pathsByLocator.set(e.locatorHash,a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await oe.mkdirPromise(n,{recursive:!0}),await oe.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1,linkStrategy:{type:"HardlinkFromIndex",indexPath:await this.indexFolderPromise,autoRepair:!0}})}));let A=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e,p={manifest:await Mt.tryFind(r.prefixPath,{baseFs:r.packageFs})??new Mt,misc:{hasBindingGyp:mA.hasBindingGyp(r)}},h=this.opts.project.getDependencyMeta(A,e.version),E=mA.extractBuildRequest(e,p,h,{configuration:this.opts.project.configuration});return{packageLocation:n,buildRequest:E}}async attachInternalDependencies(e,r){if(this.opts.project.configuration.get("nodeLinker")!=="pnpm"||!LBe(e,{project:this.opts.project}))return;let o=this.customData.pathsByLocator.get(e.locatorHash);if(typeof o>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(e)})`);let{dependenciesLocation:a}=o;!a||this.asyncActions.reduce(e.locatorHash,async n=>{await oe.mkdirPromise(a,{recursive:!0});let u=await uDt(a),A=new Map(u),p=[n],h=(I,v)=>{let b=v;LBe(v,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),b=W.devirtualizeLocator(v));let C=this.customData.pathsByLocator.get(b.locatorHash);if(typeof C>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(v)})`);let T=W.stringifyIdent(I),L=K.join(a,T),U=K.relative(K.dirname(L),C.packageLocation),J=A.get(T);A.delete(T),p.push(Promise.resolve().then(async()=>{if(J){if(J.isSymbolicLink()&&await oe.readlinkPromise(L)===U)return;await oe.removePromise(L)}await oe.mkdirpPromise(K.dirname(L)),process.platform=="win32"&&this.opts.project.configuration.get("winLinkType")==="junctions"?await oe.symlinkPromise(C.packageLocation,L,"junction"):await oe.symlinkPromise(U,L)}))},E=!1;for(let[I,v]of r)I.identHash===e.identHash&&(E=!0),h(I,v);!E&&!this.opts.project.tryWorkspaceByLocator(e)&&h(W.convertLocatorToDescriptor(e),e),p.push(ADt(a,A)),await Promise.all(p)})}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=OBe(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await oe.removePromise(e);else{let r;try{r=new Set(await oe.readdirPromise(e))}catch{r=new Set}for(let{dependenciesLocation:o}of this.customData.pathsByLocator.values()){if(!o)continue;let a=K.contains(e,o);if(a===null)continue;let[n]=a.split(K.sep);r.delete(n)}await Promise.all([...r].map(async o=>{await oe.removePromise(K.join(e,o))}))}return await this.asyncActions.wait(),await MG(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await MG(MBe(this.opts.project)),{customData:this.customData}}};function MBe(t){return K.join(t.cwd,dr.nodeModules)}function OBe(t){return K.join(MBe(t),".store")}function cDt(t,{project:e}){let r=W.slugifyLocator(t),o=OBe(e),a=K.join(o,r,"package"),n=K.join(o,r,dr.nodeModules);return{packageLocation:a,dependenciesLocation:n}}function LBe(t,{project:e}){return!W.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function uDt(t){let e=new Map,r=[];try{r=await oe.readdirPromise(t,{withFileTypes:!0})}catch(o){if(o.code!=="ENOENT")throw o}try{for(let o of r)if(!o.name.startsWith("."))if(o.name.startsWith("@")){let a=await oe.readdirPromise(K.join(t,o.name),{withFileTypes:!0});if(a.length===0)e.set(o.name,o);else for(let n of a)e.set(`${o.name}/${n.name}`,n)}else e.set(o.name,o)}catch(o){if(o.code!=="ENOENT")throw o}return e}async function ADt(t,e){let r=[],o=new Set;for(let a of e.keys()){r.push(oe.removePromise(K.join(t,a)));let n=W.tryParseIdent(a)?.scope;n&&o.add(`@${n}`)}return Promise.all(r).then(()=>Promise.all([...o].map(a=>MG(K.join(t,a)))))}async function MG(t){try{await oe.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY")throw e}}var fDt={linkers:[Hv]},pDt=fDt;var YG={};Kt(YG,{StageCommand:()=>Z0,default:()=>vDt,stageUtils:()=>lF});Ye();Pt();qt();Ye();Pt();var lF={};Kt(lF,{ActionType:()=>UG,checkConsensus:()=>aF,expandDirectory:()=>jG,findConsensus:()=>qG,findVcsRoot:()=>_G,genCommitMessage:()=>GG,getCommitPrefix:()=>UBe,isYarnFile:()=>HG});Pt();var UG=(n=>(n[n.CREATE=0]="CREATE",n[n.DELETE=1]="DELETE",n[n.ADD=2]="ADD",n[n.REMOVE=3]="REMOVE",n[n.MODIFY=4]="MODIFY",n))(UG||{});async function _G(t,{marker:e}){do if(!oe.existsSync(K.join(t,e)))t=K.dirname(t);else return t;while(t!=="/");return null}function HG(t,{roots:e,names:r}){if(r.has(K.basename(t)))return!0;do if(!e.has(t))t=K.dirname(t);else return!0;while(t!=="/");return!1}function jG(t){let e=[],r=[t];for(;r.length>0;){let o=r.pop(),a=oe.readdirSync(o);for(let n of a){let u=K.resolve(o,n);oe.lstatSync(u).isDirectory()?r.push(u):e.push(u)}}return e}function aF(t,e){let r=0,o=0;for(let a of t)a!=="wip"&&(e.test(a)?r+=1:o+=1);return r>=o}function qG(t){let e=aF(t,/^(\w\(\w+\):\s*)?\w+s/),r=aF(t,/^(\w\(\w+\):\s*)?[A-Z]/),o=aF(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:r,useComponent:o}}function UBe(t){return t.useComponent?"chore(yarn): ":""}var hDt=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function GG(t,e){let r=UBe(t),o=[],a=e.slice().sort((n,u)=>n[0]-u[0]);for(;a.length>0;){let[n,u]=a.shift(),A=hDt.get(n);t.useUpperCase&&o.length===0&&(A=`${A[0].toUpperCase()}${A.slice(1)}`),t.useThirdPerson&&(A+="s");let p=[u];for(;a.length>0&&a[0][0]===n;){let[,E]=a.shift();p.push(E)}p.sort();let h=p.shift();p.length===1?h+=" (and one other)":p.length>1&&(h+=` (and ${p.length} others)`),o.push(`${A} ${h}`)}return`${r}${o.join(", ")}`}var gDt="Commit generated via `yarn stage`",dDt=11;async function _Be(t){let{code:e,stdout:r}=await Ur.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?r.trim():null}async function mDt(t,e){let r=[],o=e.filter(h=>K.basename(h.path)==="package.json");for(let{action:h,path:E}of o){let I=K.relative(t,E);if(h===4){let v=await _Be(t),{stdout:b}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Mt.fromText(b),T=await Mt.fromFile(E),L=new Map([...T.dependencies,...T.devDependencies]),U=new Map([...C.dependencies,...C.devDependencies]);for(let[J,te]of U){let le=W.stringifyIdent(te),pe=L.get(J);pe?pe.range!==te.range&&r.push([4,`${le} to ${pe.range}`]):r.push([3,le])}for(let[J,te]of L)U.has(J)||r.push([2,W.stringifyIdent(te)])}else if(h===0){let v=await Mt.fromFile(E);v.name?r.push([0,W.stringifyIdent(v.name)]):r.push([0,"a package"])}else if(h===1){let v=await _Be(t),{stdout:b}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Mt.fromText(b);C.name?r.push([1,W.stringifyIdent(C.name)]):r.push([1,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:a,stdout:n}=await Ur.execvp("git",["log",`-${dDt}`,"--pretty=format:%s"],{cwd:t}),u=a===0?n.split(/\n/g).filter(h=>h!==""):[],A=qG(u);return GG(A,r)}var yDt={[0]:[" A ","?? "],[4]:[" M "],[1]:[" D "]},EDt={[0]:["A "],[4]:["M "],[1]:["D "]},HBe={async findRoot(t){return await _G(t,{marker:".git"})},async filterChanges(t,e,r,o){let{stdout:a}=await Ur.execvp("git",["status","-s"],{cwd:t,strict:!0}),n=a.toString().split(/\n/g),u=o?.staged?EDt:yDt;return[].concat(...n.map(p=>{if(p==="")return[];let h=p.slice(0,3),E=K.resolve(t,p.slice(3));if(!o?.staged&&h==="?? "&&p.endsWith("/"))return jG(E).map(I=>({action:0,path:I}));{let v=[0,4,1].find(b=>u[b].includes(h));return v!==void 0?[{action:v,path:E}]:[]}})).filter(p=>HG(p.path,{roots:e,names:r}))},async genCommitMessage(t,e){return await mDt(t,e)},async makeStage(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["add","--",...r],{cwd:t,strict:!0})},async makeCommit(t,e,r){let o=e.map(a=>ue.fromPortablePath(a.path));await Ur.execvp("git",["add","-N","--",...o],{cwd:t,strict:!0}),await Ur.execvp("git",["commit","-m",`${r} + +${gDt} +`,"--",...o],{cwd:t,strict:!0})},async makeReset(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["reset","HEAD","--",...r],{cwd:t,strict:!0})}};var CDt=[HBe],Z0=class extends ut{constructor(){super(...arguments);this.commit=ge.Boolean("-c,--commit",!1,{description:"Commit the staged files"});this.reset=ge.Boolean("-r,--reset",!1,{description:"Remove all files from the staging area"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"Print the commit message and the list of modified files without staging / committing"});this.update=ge.Boolean("-u,--update",!1,{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),{driver:a,root:n}=await wDt(o.cwd),u=[r.get("cacheFolder"),r.get("globalFolder"),r.get("virtualFolder"),r.get("yarnPath")];await r.triggerHook(I=>I.populateYarnPaths,o,I=>{u.push(I)});let A=new Set;for(let I of u)for(let v of IDt(n,I))A.add(v);let p=new Set([r.get("rcFilename"),dr.lockfile,dr.manifest]),h=await a.filterChanges(n,A,p),E=await a.genCommitMessage(n,h);if(this.dryRun)if(this.commit)this.context.stdout.write(`${E} +`);else for(let I of h)this.context.stdout.write(`${ue.fromPortablePath(I.path)} +`);else if(this.reset){let I=await a.filterChanges(n,A,p,{staged:!0});I.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,I)}else h.length===0?this.context.stdout.write("No changes found!"):this.commit?await a.makeCommit(n,h,E):(await a.makeStage(n,h),this.context.stdout.write(E))}};Z0.paths=[["stage"]],Z0.usage=nt.Usage({description:"add all yarn files to your vcs",details:"\n This command will add to your staging area the files belonging to Yarn (typically any modified `package.json` and `.yarnrc.yml` files, but also linker-generated files, cache data, etc). It will take your ignore list into account, so the cache files won't be added if the cache is ignored in a `.gitignore` file (assuming you use Git).\n\n Running `--reset` will instead remove them from the staging area (the changes will still be there, but won't be committed until you stage them back).\n\n Since the staging area is a non-existent concept in Mercurial, Yarn will always create a new commit when running this command on Mercurial repositories. You can get this behavior when using Git by using the `--commit` flag which will directly create a commit.\n ",examples:[["Adds all modified project files to the staging area","yarn stage"],["Creates a new commit containing all modified project files","yarn stage --commit"]]});async function wDt(t){let e=null,r=null;for(let o of CDt)if((r=await o.findRoot(t))!==null){e=o;break}if(e===null||r===null)throw new it("No stage driver has been found for your current project");return{driver:e,root:r}}function IDt(t,e){let r=[];if(e===null)return r;for(;;){(e===t||e.startsWith(`${t}/`))&&r.push(e);let o;try{o=oe.statSync(e)}catch{break}if(o.isSymbolicLink())e=K.resolve(K.dirname(e),oe.readlinkSync(e));else break}return r}var BDt={commands:[Z0]},vDt=BDt;var WG={};Kt(WG,{default:()=>FDt});Ye();Ye();Pt();var GBe=$e(zn());Ye();var jBe=$e(ZH()),DDt="e8e1bd300d860104bb8c58453ffa1eb4",PDt="OFCNCOG2CU",qBe=async(t,e)=>{let r=W.stringifyIdent(t),a=SDt(e).initIndex("npm-search");try{return(await a.getObject(r,{attributesToRetrieve:["types"]})).types?.ts==="definitely-typed"}catch{return!1}},SDt=t=>(0,jBe.default)(PDt,DDt,{requester:{async send(r){try{let o=await rn.request(r.url,r.data||null,{configuration:t,headers:r.headers});return{content:o.body,isTimedOut:!1,status:o.statusCode}}catch(o){return{content:o.response.body,isTimedOut:!1,status:o.response.statusCode}}}}});var YBe=t=>t.scope?`${t.scope}__${t.name}`:`${t.name}`,xDt=async(t,e,r,o)=>{if(r.scope==="types")return;let{project:a}=t,{configuration:n}=a;if(!(n.get("tsEnableAutoTypes")??oe.existsSync(K.join(a.cwd,"tsconfig.json"))))return;let A=n.makeResolver(),p={project:a,resolver:A,report:new Qi};if(!await qBe(r,n))return;let E=YBe(r),I=W.parseRange(r.range).selector;if(!kr.validRange(I)){let L=n.normalizeDependency(r),U=await A.getCandidates(L,{},p);I=W.parseRange(U[0].reference).selector}let v=GBe.default.coerce(I);if(v===null)return;let b=`${zc.Modifier.CARET}${v.major}`,C=W.makeDescriptor(W.makeIdent("types",E),b),T=je.mapAndFind(a.workspaces,L=>{let U=L.manifest.dependencies.get(r.identHash)?.descriptorHash,J=L.manifest.devDependencies.get(r.identHash)?.descriptorHash;if(U!==r.descriptorHash&&J!==r.descriptorHash)return je.mapAndFind.skip;let te=[];for(let le of Mt.allDependencies){let pe=L.manifest[le].get(C.identHash);typeof pe>"u"||te.push([le,pe])}return te.length===0?je.mapAndFind.skip:te});if(typeof T<"u")for(let[L,U]of T)t.manifest[L].set(U.identHash,U);else{try{let L=n.normalizeDependency(C);if((await A.getCandidates(L,{},p)).length===0)return}catch{return}t.manifest[zc.Target.DEVELOPMENT].set(C.identHash,C)}},bDt=async(t,e,r)=>{if(r.scope==="types")return;let{project:o}=t,{configuration:a}=o;if(!(a.get("tsEnableAutoTypes")??oe.existsSync(K.join(o.cwd,"tsconfig.json"))))return;let u=YBe(r),A=W.makeIdent("types",u);for(let p of Mt.allDependencies)typeof t.manifest[p].get(A.identHash)>"u"||t.manifest[p].delete(A.identHash)},kDt=(t,e)=>{e.publishConfig&&e.publishConfig.typings&&(e.typings=e.publishConfig.typings),e.publishConfig&&e.publishConfig.types&&(e.types=e.publishConfig.types)},QDt={configuration:{tsEnableAutoTypes:{description:"Whether Yarn should auto-install @types/ dependencies on 'yarn add'",type:"BOOLEAN",isNullable:!0,default:null}},hooks:{afterWorkspaceDependencyAddition:xDt,afterWorkspaceDependencyRemoval:bDt,beforeWorkspacePacking:kDt}},FDt=QDt;var XG={};Kt(XG,{VersionApplyCommand:()=>$0,VersionCheckCommand:()=>eg,VersionCommand:()=>tg,default:()=>XDt,versionUtils:()=>gw});Ye();Ye();qt();var gw={};Kt(gw,{Decision:()=>pw,applyPrerelease:()=>XBe,applyReleases:()=>zG,applyStrategy:()=>uF,clearVersionFiles:()=>VG,getUndecidedDependentWorkspaces:()=>qv,getUndecidedWorkspaces:()=>cF,openVersionFile:()=>hw,requireMoreDecisions:()=>KDt,resolveVersionFiles:()=>jv,suggestStrategy:()=>JG,updateVersionFiles:()=>KG,validateReleaseDecision:()=>fw});Ye();Pt();Nl();qt();var zBe=$e(JBe()),BA=$e(zn()),VDt=/^(>=|[~^]|)(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/,pw=(u=>(u.UNDECIDED="undecided",u.DECLINE="decline",u.MAJOR="major",u.MINOR="minor",u.PATCH="patch",u.PRERELEASE="prerelease",u))(pw||{});function fw(t){let e=BA.default.valid(t);return e||je.validateEnum((0,zBe.default)(pw,"UNDECIDED"),t)}async function jv(t,{prerelease:e=null}={}){let r=new Map,o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return r;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=K.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Vi(A);for(let[h,E]of Object.entries(p.releases||{})){if(E==="decline")continue;let I=W.parseIdent(h),v=t.tryWorkspaceByIdent(I);if(v===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${K.basename(u)} references ${h})`);if(v.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${W.prettyLocator(t.configuration,v.anchoredLocator)})`);let b=v.manifest.raw.stableVersion??v.manifest.version,C=r.get(v),T=uF(b,fw(E));if(T===null)throw new Error(`Assertion failed: Expected ${b} to support being bumped via strategy ${E}`);let L=typeof C<"u"?BA.default.gt(T,C)?T:C:T;r.set(v,L)}}return e&&(r=new Map([...r].map(([n,u])=>[n,XBe(u,{current:n.manifest.version,prerelease:e})]))),r}async function VG(t){let e=t.configuration.get("deferredVersionFolder");!oe.existsSync(e)||await oe.removePromise(e)}async function KG(t,e){let r=new Set(e),o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=K.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Vi(A),h=p?.releases;if(!!h){for(let E of Object.keys(h)){let I=W.parseIdent(E),v=t.tryWorkspaceByIdent(I);(v===null||r.has(v))&&delete p.releases[E]}Object.keys(p.releases).length>0?await oe.changeFilePromise(u,Ba(new Ba.PreserveOrdering(p))):await oe.unlinkPromise(u)}}}async function hw(t,{allowEmpty:e=!1}={}){let r=t.configuration;if(r.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let o=await ra.fetchRoot(r.projectCwd),a=o!==null?await ra.fetchBase(o,{baseRefs:r.get("changesetBaseRefs")}):null,n=o!==null?await ra.fetchChangedFiles(o,{base:a.hash,project:t}):[],u=r.get("deferredVersionFolder"),A=n.filter(b=>K.contains(u,b)!==null);if(A.length>1)throw new it(`Your current branch contains multiple versioning files; this isn't supported: +- ${A.map(b=>ue.fromPortablePath(b)).join(` +- `)}`);let p=new Set(je.mapAndFilter(n,b=>{let C=t.tryWorkspaceByFilePath(b);return C===null?je.mapAndFilter.skip:C}));if(A.length===0&&p.size===0&&!e)return null;let h=A.length===1?A[0]:K.join(u,`${wn.makeHash(Math.random().toString()).slice(0,8)}.yml`),E=oe.existsSync(h)?await oe.readFilePromise(h,"utf8"):"{}",I=Vi(E),v=new Map;for(let b of I.declined||[]){let C=W.parseIdent(b),T=t.getWorkspaceByIdent(C);v.set(T,"decline")}for(let[b,C]of Object.entries(I.releases||{})){let T=W.parseIdent(b),L=t.getWorkspaceByIdent(T);v.set(L,fw(C))}return{project:t,root:o,baseHash:a!==null?a.hash:null,baseTitle:a!==null?a.title:null,changedFiles:new Set(n),changedWorkspaces:p,releaseRoots:new Set([...p].filter(b=>b.manifest.version!==null)),releases:v,async saveAll(){let b={},C=[],T=[];for(let L of t.workspaces){if(L.manifest.version===null)continue;let U=W.stringifyIdent(L.anchoredLocator),J=v.get(L);J==="decline"?C.push(U):typeof J<"u"?b[U]=fw(J):p.has(L)&&T.push(U)}await oe.mkdirPromise(K.dirname(h),{recursive:!0}),await oe.changeFilePromise(h,Ba(new Ba.PreserveOrdering({releases:Object.keys(b).length>0?b:void 0,declined:C.length>0?C:void 0,undecided:T.length>0?T:void 0})))}}}function KDt(t){return cF(t).size>0||qv(t).length>0}function cF(t){let e=new Set;for(let r of t.changedWorkspaces)r.manifest.version!==null&&(t.releases.has(r)||e.add(r));return e}function qv(t,{include:e=new Set}={}){let r=[],o=new Map(je.mapAndFilter([...t.releases],([n,u])=>u==="decline"?je.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n])),a=new Map(je.mapAndFilter([...t.releases],([n,u])=>u!=="decline"?je.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n]));for(let n of t.project.workspaces)if(!(!e.has(n)&&(a.has(n.anchoredLocator.locatorHash)||o.has(n.anchoredLocator.locatorHash)))&&n.manifest.version!==null)for(let u of Mt.hardDependencies)for(let A of n.manifest.getForScope(u).values()){let p=t.project.tryWorkspaceByDescriptor(A);p!==null&&o.has(p.anchoredLocator.locatorHash)&&r.push([n,p])}return r}function JG(t,e){let r=BA.default.clean(e);for(let o of Object.values(pw))if(o!=="undecided"&&o!=="decline"&&BA.default.inc(t,o)===r)return o;return null}function uF(t,e){if(BA.default.valid(e))return e;if(t===null)throw new it(`Cannot apply the release strategy "${e}" unless the workspace already has a valid version`);if(!BA.default.valid(t))throw new it(`Cannot apply the release strategy "${e}" on a non-semver version (${t})`);let r=BA.default.inc(t,e);if(r===null)throw new it(`Cannot apply the release strategy "${e}" on the specified version (${t})`);return r}function zG(t,e,{report:r}){let o=new Map;for(let a of t.workspaces)for(let n of Mt.allDependencies)for(let u of a.manifest[n].values()){let A=t.tryWorkspaceByDescriptor(u);if(A===null||!e.has(A))continue;je.getArrayWithDefault(o,A).push([a,n,u.identHash])}for(let[a,n]of e){let u=a.manifest.version;a.manifest.version=n,BA.default.prerelease(n)===null?delete a.manifest.raw.stableVersion:a.manifest.raw.stableVersion||(a.manifest.raw.stableVersion=u);let A=a.manifest.name!==null?W.stringifyIdent(a.manifest.name):null;r.reportInfo(0,`${W.prettyLocator(t.configuration,a.anchoredLocator)}: Bumped to ${n}`),r.reportJson({cwd:ue.fromPortablePath(a.cwd),ident:A,oldVersion:u,newVersion:n});let p=o.get(a);if(!(typeof p>"u"))for(let[h,E,I]of p){let v=h.manifest[E].get(I);if(typeof v>"u")throw new Error("Assertion failed: The dependency should have existed");let b=v.range,C=!1;if(b.startsWith(Xn.protocol)&&(b=b.slice(Xn.protocol.length),C=!0,b===a.relativeCwd))continue;let T=b.match(VDt);if(!T){r.reportWarning(0,`Couldn't auto-upgrade range ${b} (in ${W.prettyLocator(t.configuration,h.anchoredLocator)})`);continue}let L=`${T[1]}${n}`;C&&(L=`${Xn.protocol}${L}`);let U=W.makeDescriptor(v,L);h.manifest[E].set(I,U)}}}var JDt=new Map([["%n",{extract:t=>t.length>=1?[t[0],t.slice(1)]:null,generate:(t=0)=>`${t+1}`}]]);function XBe(t,{current:e,prerelease:r}){let o=new BA.default.SemVer(e),a=o.prerelease.slice(),n=[];o.prerelease=[],o.format()!==t&&(a.length=0);let u=!0,A=r.split(/\./g);for(let p of A){let h=JDt.get(p);if(typeof h>"u")n.push(p),a[0]===p?a.shift():u=!1;else{let E=u?h.extract(a):null;E!==null&&typeof E[0]=="number"?(n.push(h.generate(E[0])),a=E[1]):(n.push(h.generate()),u=!1)}}return o.prerelease&&(o.prerelease=[]),`${t}-${n.join(".")}`}var $0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("--all",!1,{description:"Apply the deferred version changes on all workspaces"});this.dryRun=ge.Boolean("--dry-run",!1,{description:"Print the versions without actually generating the package archive"});this.prerelease=ge.String("--prerelease",{description:"Add a prerelease identifier to new versions",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",{description:"Release the transitive workspaces as well"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,h=await jv(o,{prerelease:p}),E=new Map;if(this.all)E=h;else{let I=this.recursive?a.getRecursiveWorkspaceDependencies():[a];for(let v of I){let b=h.get(v);typeof b<"u"&&E.set(v,b)}}if(E.size===0){let I=h.size>0?" Did you want to add --all?":"";A.reportWarning(0,`The current workspace doesn't seem to require a version bump.${I}`);return}zG(o,E,{report:A}),this.dryRun||(p||(this.all?await VG(o):await KG(o,[...E.keys()])),A.reportSeparator())});return u.hasErrors()?u.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};$0.paths=[["version","apply"]],$0.usage=nt.Usage({category:"Release-related commands",description:"apply all the deferred version bumps at once",details:` + This command will apply the deferred version changes and remove their definitions from the repository. + + Note that if \`--prerelease\` is set, the given prerelease identifier (by default \`rc.%d\`) will be used on all new versions and the version definitions will be kept as-is. + + By default only the current workspace will be bumped, but you can configure this behavior by using one of: + + - \`--recursive\` to also apply the version bump on its dependencies + - \`--all\` to apply the version bump on all packages in the repository + + Note that this command will also update the \`workspace:\` references across all your local workspaces, thus ensuring that they keep referring to the same workspaces even after the version bump. + `,examples:[["Apply the version change to the local workspace","yarn version apply"],["Apply the version change to all the workspaces in the local workspace","yarn version apply --all"]]});Ye();Pt();qt();var AF=$e(zn());var eg=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Open an interactive interface used to set version bumps"})}async execute(){return this.interactive?await this.executeInteractive():await this.executeStandard()}async executeInteractive(){SC(this.context);let{Gem:r}=await Promise.resolve().then(()=>(AQ(),Dj)),{ScrollableItems:o}=await Promise.resolve().then(()=>(gQ(),hQ)),{FocusRequest:a}=await Promise.resolve().then(()=>(Sj(),Xwe)),{useListInput:n}=await Promise.resolve().then(()=>(pQ(),Zwe)),{renderForm:u}=await Promise.resolve().then(()=>(EQ(),yQ)),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useCallback:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),{project:b,workspace:C}=await St.find(v,this.context.cwd);if(!C)throw new rr(b.cwd,this.context.cwd);await b.restoreInstallState();let T=await hw(b);if(T===null||T.releaseRoots.size===0)return 0;if(T.root===null)throw new it("This command can only be run on Git repositories");let L=()=>h.createElement(A,{flexDirection:"row",paddingBottom:1},h.createElement(A,{flexDirection:"column",width:60},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select workspaces.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select release strategies."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to save.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),U=({workspace:ye,active:ae,decision:we,setDecision:Pe})=>{let g=ye.manifest.raw.stableVersion??ye.manifest.version;if(g===null)throw new Error(`Assertion failed: The version should have been set (${W.prettyLocator(v,ye.anchoredLocator)})`);if(AF.default.prerelease(g)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${g})`);let Ee=["undecided","decline","patch","minor","major"];n(we,Ee,{active:ae,minus:"left",plus:"right",set:Pe});let De=we==="undecided"?h.createElement(p,{color:"yellow"},g):we==="decline"?h.createElement(p,{color:"green"},g):h.createElement(p,null,h.createElement(p,{color:"magenta"},g)," \u2192 ",h.createElement(p,{color:"green"},AF.default.valid(we)?we:AF.default.inc(g,we)));return h.createElement(A,{flexDirection:"column"},h.createElement(A,null,h.createElement(p,null,W.prettyLocator(v,ye.anchoredLocator)," - ",De)),h.createElement(A,null,Ee.map(ce=>h.createElement(A,{key:ce,paddingLeft:2},h.createElement(p,null,h.createElement(r,{active:ce===we})," ",ce)))))},J=ye=>{let ae=new Set(T.releaseRoots),we=new Map([...ye].filter(([Pe])=>ae.has(Pe)));for(;;){let Pe=qv({project:T.project,releases:we}),g=!1;if(Pe.length>0){for(let[Ee]of Pe)if(!ae.has(Ee)){ae.add(Ee),g=!0;let De=ye.get(Ee);typeof De<"u"&&we.set(Ee,De)}}if(!g)break}return{relevantWorkspaces:ae,relevantReleases:we}},te=()=>{let[ye,ae]=I(()=>new Map(T.releases)),we=E((Pe,g)=>{let Ee=new Map(ye);g!=="undecided"?Ee.set(Pe,g):Ee.delete(Pe);let{relevantReleases:De}=J(Ee);ae(De)},[ye,ae]);return[ye,we]},le=({workspaces:ye,releases:ae})=>{let we=[];we.push(`${ye.size} total`);let Pe=0,g=0;for(let Ee of ye){let De=ae.get(Ee);typeof De>"u"?g+=1:De!=="decline"&&(Pe+=1)}return we.push(`${Pe} release${Pe===1?"":"s"}`),we.push(`${g} remaining`),h.createElement(p,{color:"yellow"},we.join(", "))},Ae=await u(({useSubmit:ye})=>{let[ae,we]=te();ye(ae);let{relevantWorkspaces:Pe}=J(ae),g=new Set([...Pe].filter(ne=>!T.releaseRoots.has(ne))),[Ee,De]=I(0),ce=E(ne=>{switch(ne){case a.BEFORE:De(Ee-1);break;case a.AFTER:De(Ee+1);break}},[Ee,De]);return h.createElement(A,{flexDirection:"column"},h.createElement(L,null),h.createElement(A,null,h.createElement(p,{wrap:"wrap"},"The following files have been modified in your local checkout.")),h.createElement(A,{flexDirection:"column",marginTop:1,paddingLeft:2},[...T.changedFiles].map(ne=>h.createElement(A,{key:ne},h.createElement(p,null,h.createElement(p,{color:"grey"},ue.fromPortablePath(T.root)),ue.sep,ue.relative(ue.fromPortablePath(T.root),ue.fromPortablePath(ne)))))),T.releaseRoots.size>0&&h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"Because of those files having been modified, the following workspaces may need to be released again (note that private workspaces are also shown here, because even though they won't be published, releasing them will allow us to flag their dependents for potential re-release):")),g.size>3?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:T.releaseRoots,releases:ae})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===0,radius:1,size:2,onFocusRequest:ce},[...T.releaseRoots].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:ae.get(ne)||"undecided",setDecision:ee=>we(ne,ee)}))))),g.size>0?h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"The following workspaces depend on other workspaces that have been marked for release, and thus may need to be released as well:")),h.createElement(A,null,h.createElement(p,null,"(Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move the focus between the workspace groups.)")),g.size>5?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:g,releases:ae})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===1,radius:2,size:2,onFocusRequest:ce},[...g].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:ae.get(ne)||"undecided",setDecision:ee=>we(ne,ee)}))))):null)},{versionFile:T},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Ae>"u")return 1;T.releases.clear();for(let[ye,ae]of Ae)T.releases.set(ye,ae);await T.saveAll()}async executeStandard(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);return await o.restoreInstallState(),(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{let A=await hw(o);if(A===null||A.releaseRoots.size===0)return;if(A.root===null)throw new it("This command can only be run on Git repositories");if(u.reportInfo(0,`Your PR was started right after ${de.pretty(r,A.baseHash.slice(0,7),"yellow")} ${de.pretty(r,A.baseTitle,"magenta")}`),A.changedFiles.size>0){u.reportInfo(0,"You have changed the following files since then:"),u.reportSeparator();for(let v of A.changedFiles)u.reportInfo(null,`${de.pretty(r,ue.fromPortablePath(A.root),"gray")}${ue.sep}${ue.relative(ue.fromPortablePath(A.root),ue.fromPortablePath(v))}`)}let p=!1,h=!1,E=cF(A);if(E.size>0){p||u.reportSeparator();for(let v of E)u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} has been modified but doesn't have a release strategy attached`);p=!0}let I=qv(A);for(let[v,b]of I)h||u.reportSeparator(),u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} doesn't have a release strategy attached, but depends on ${W.prettyWorkspace(r,b)} which is planned for release.`),h=!0;(p||h)&&(u.reportSeparator(),u.reportInfo(0,"This command detected that at least some workspaces have received modifications without explicit instructions as to how they had to be released (if needed)."),u.reportInfo(0,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};eg.paths=[["version","check"]],eg.usage=nt.Usage({category:"Release-related commands",description:"check that all the relevant packages have been bumped",details:"\n **Warning:** This command currently requires Git.\n\n This command will check that all the packages covered by the files listed in argument have been properly bumped or declined to bump.\n\n In the case of a bump, the check will also cover transitive packages - meaning that should `Foo` be bumped, a package `Bar` depending on `Foo` will require a decision as to whether `Bar` will need to be bumped. This check doesn't cross packages that have declined to bump.\n\n In case no arguments are passed to the function, the list of modified files will be generated by comparing the HEAD against `master`.\n ",examples:[["Check whether the modified packages need a bump","yarn version check"]]});Ye();qt();var fF=$e(zn());var tg=class extends ut{constructor(){super(...arguments);this.deferred=ge.Boolean("-d,--deferred",{description:"Prepare the version to be bumped during the next release cycle"});this.immediate=ge.Boolean("-i,--immediate",{description:"Bump the version immediately"});this.strategy=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=r.get("preferDeferredVersions");this.deferred&&(n=!0),this.immediate&&(n=!1);let u=fF.default.valid(this.strategy),A=this.strategy==="decline",p;if(u)if(a.manifest.version!==null){let E=JG(a.manifest.version,this.strategy);E!==null?p=E:p=this.strategy}else p=this.strategy;else{let E=a.manifest.version;if(!A){if(E===null)throw new it("Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.");if(typeof E!="string"||!fF.default.valid(E))throw new it(`Can't bump the version (${E}) if it's not valid semver`)}p=fw(this.strategy)}if(!n){let I=(await jv(o)).get(a);if(typeof I<"u"&&p!=="decline"){let v=uF(a.manifest.version,p);if(fF.default.lt(v,I))throw new it(`Can't bump the version to one that would be lower than the current deferred one (${I})`)}}let h=await hw(o,{allowEmpty:!0});return h.releases.set(a,p),await h.saveAll(),n?0:await this.cli.run(["version","apply"])}};tg.paths=[["version"]],tg.usage=nt.Usage({category:"Release-related commands",description:"apply a new version to the current package",details:"\n This command will bump the version number for the given package, following the specified strategy:\n\n - If `major`, the first number from the semver range will be increased (`X.0.0`).\n - If `minor`, the second number from the semver range will be increased (`0.X.0`).\n - If `patch`, the third number from the semver range will be increased (`0.0.X`).\n - If prefixed by `pre` (`premajor`, ...), a `-0` suffix will be set (`0.0.0-0`).\n - If `prerelease`, the suffix will be increased (`0.0.0-X`); the third number from the semver range will also be increased if there was no suffix in the previous version.\n - If `decline`, the nonce will be increased for `yarn version check` to pass without version bump.\n - If a valid semver range, it will be used as new version.\n - If unspecified, Yarn will ask you for guidance.\n\n For more information about the `--deferred` flag, consult our documentation (https://yarnpkg.com/features/release-workflow#deferred-versioning).\n ",examples:[["Immediately bump the version to the next major","yarn version major"],["Prepare the version to be bumped to the next major","yarn version major --deferred"]]});var zDt={configuration:{deferredVersionFolder:{description:"Folder where are stored the versioning files",type:"ABSOLUTE_PATH",default:"./.yarn/versions"},preferDeferredVersions:{description:"If true, running `yarn version` will assume the `--deferred` flag unless `--immediate` is set",type:"BOOLEAN",default:!1}},commands:[$0,eg,tg]},XDt=zDt;var ZG={};Kt(ZG,{WorkspacesFocusCommand:()=>rg,WorkspacesForeachCommand:()=>op,default:()=>ePt});Ye();Ye();qt();var rg=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.production=ge.Boolean("--production",!1,{description:"Only install regular dependencies by omitting dev dependencies"});this.all=ge.Boolean("-A,--all",!1,{description:"Install the entire project"});this.workspaces=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let u;if(this.all)u=new Set(o.workspaces);else if(this.workspaces.length===0){if(!a)throw new rr(o.cwd,this.context.cwd);u=new Set([a])}else u=new Set(this.workspaces.map(A=>o.getWorkspaceByIdent(W.parseIdent(A))));for(let A of u)for(let p of this.production?["dependencies"]:Mt.hardDependencies)for(let h of A.manifest.getForScope(p).values()){let E=o.tryWorkspaceByDescriptor(h);E!==null&&u.add(E)}for(let A of o.workspaces)u.has(A)?this.production&&A.manifest.devDependencies.clear():(A.manifest.installConfig=A.manifest.installConfig||{},A.manifest.installConfig.selfReferences=!1,A.manifest.dependencies.clear(),A.manifest.devDependencies.clear(),A.manifest.peerDependencies.clear(),A.manifest.scripts.clear());return await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n,persistProject:!1})}};rg.paths=[["workspaces","focus"]],rg.usage=nt.Usage({category:"Workspace-related commands",description:"install a single workspace and its dependencies",details:"\n This command will run an install as if the specified workspaces (and all other workspaces they depend on) were the only ones in the project. If no workspaces are explicitly listed, the active one will be assumed.\n\n Note that this command is only very moderately useful when using zero-installs, since the cache will contain all the packages anyway - meaning that the only difference between a full install and a focused install would just be a few extra lines in the `.pnp.cjs` file, at the cost of introducing an extra complexity.\n\n If the `-A,--all` flag is set, the entire project will be installed. Combine with `--production` to replicate the old `yarn install --production`.\n "});Ye();Ye();Ye();qt();var dw=$e(Zo()),$Be=$e(nd());Za();var op=class extends ut{constructor(){super(...arguments);this.from=ge.Array("--from",{description:"An array of glob pattern idents or paths from which to base any recursion"});this.all=ge.Boolean("-A,--all",{description:"Run the command on all workspaces of a project"});this.recursive=ge.Boolean("-R,--recursive",{description:"Run the command on the current workspace and all of its recursive dependencies"});this.worktree=ge.Boolean("-W,--worktree",{description:"Run the command on all workspaces of the current worktree"});this.verbose=ge.Boolean("-v,--verbose",{description:"Prefix each output line with the name of the originating workspace"});this.parallel=ge.Boolean("-p,--parallel",!1,{description:"Run the commands in parallel"});this.interlaced=ge.Boolean("-i,--interlaced",!1,{description:"Print the output of commands in real-time instead of buffering it"});this.jobs=ge.String("-j,--jobs",{description:"The maximum number of parallel tasks that the execution will be limited to; or `unlimited`",validator:LR([Vs(["unlimited"]),oI(NR(),[OR(),MR(1)])])});this.topological=ge.Boolean("-t,--topological",!1,{description:"Run the command after all workspaces it depends on (regular) have finished"});this.topologicalDev=ge.Boolean("--topological-dev",!1,{description:"Run the command after all workspaces it depends on (regular + dev) have finished"});this.include=ge.Array("--include",[],{description:"An array of glob pattern idents or paths; only matching workspaces will be traversed"});this.exclude=ge.Array("--exclude",[],{description:"An array of glob pattern idents or paths; matching workspaces won't be traversed"});this.publicOnly=ge.Boolean("--no-private",{description:"Avoid running the command on private workspaces"});this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.dryRun=ge.Boolean("-n,--dry-run",{description:"Print the commands that would be run, without actually running them"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!this.all&&!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=this.cli.process([this.commandName,...this.args]),u=n.path.length===1&&n.path[0]==="run"&&typeof n.scriptName<"u"?n.scriptName:null;if(n.path.length===0)throw new it("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let A=ae=>{!this.dryRun||this.context.stdout.write(`${ae} +`)},p=()=>{let ae=this.from.map(we=>dw.default.matcher(we));return o.workspaces.filter(we=>{let Pe=W.stringifyIdent(we.anchoredLocator),g=we.relativeCwd;return ae.some(Ee=>Ee(Pe)||Ee(g))})},h=[];if(this.since?(A("Option --since is set; selecting the changed workspaces as root for workspace selection"),h=Array.from(await ra.fetchChangedWorkspaces({ref:this.since,project:o}))):this.from?(A("Option --from is set; selecting the specified workspaces"),h=[...p()]):this.worktree?(A("Option --worktree is set; selecting the current workspace"),h=[a]):this.recursive?(A("Option --recursive is set; selecting the current workspace"),h=[a]):this.all&&(A("Option --all is set; selecting all workspaces"),h=[...o.workspaces]),this.dryRun&&!this.all){for(let ae of h)A(` +- ${ae.relativeCwd} + ${W.prettyLocator(r,ae.anchoredLocator)}`);h.length>0&&A("")}let E;if(this.recursive?this.since?(A("Option --recursive --since is set; recursively selecting all dependent workspaces"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceDependents()]).flat())):(A("Option --recursive is set; recursively selecting all transitive dependencies"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceDependencies()]).flat())):this.worktree?(A("Option --worktree is set; recursively selecting all nested workspaces"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceChildren()]).flat())):E=null,E!==null&&(h=[...new Set([...h,...E])],this.dryRun))for(let ae of E)A(` +- ${ae.relativeCwd} + ${W.prettyLocator(r,ae.anchoredLocator)}`);let I=[],v=!1;if(u?.includes(":")){for(let ae of o.workspaces)if(ae.manifest.scripts.has(u)&&(v=!v,v===!1))break}for(let ae of h){if(u&&!ae.manifest.scripts.has(u)&&!v&&!(await un.getWorkspaceAccessibleBinaries(ae)).has(u)){A(`Excluding ${ae.relativeCwd} because it doesn't have a "${u}" script`);continue}if(!(u===r.env.npm_lifecycle_event&&ae.cwd===a.cwd)){if(this.include.length>0&&!dw.default.isMatch(W.stringifyIdent(ae.anchoredLocator),this.include)&&!dw.default.isMatch(ae.relativeCwd,this.include)){A(`Excluding ${ae.relativeCwd} because it doesn't match the --include filter`);continue}if(this.exclude.length>0&&(dw.default.isMatch(W.stringifyIdent(ae.anchoredLocator),this.exclude)||dw.default.isMatch(ae.relativeCwd,this.exclude))){A(`Excluding ${ae.relativeCwd} because it matches the --include filter`);continue}if(this.publicOnly&&ae.manifest.private===!0){A(`Excluding ${ae.relativeCwd} because it's a private workspace and --no-private was set`);continue}I.push(ae)}}if(this.dryRun)return 0;let b=this.verbose??this.context.stdout.isTTY,C=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.ceil(Ji.availableParallelism()/2):1,T=C===1?!1:this.parallel,L=T?this.interlaced:!0,U=(0,$Be.default)(C),J=new Map,te=new Set,le=0,pe=null,Ae=!1,ye=await Nt.start({configuration:r,stdout:this.context.stdout,includePrefix:!1},async ae=>{let we=async(Pe,{commandIndex:g})=>{if(Ae)return-1;!T&&b&&g>1&&ae.reportSeparator();let Ee=ZDt(Pe,{configuration:r,verbose:b,commandIndex:g}),[De,ce]=ZBe(ae,{prefix:Ee,interlaced:L}),[ne,ee]=ZBe(ae,{prefix:Ee,interlaced:L});try{b&&ae.reportInfo(null,`${Ee} Process started`);let Ie=Date.now(),ke=await this.cli.run([this.commandName,...this.args],{cwd:Pe.cwd,stdout:De,stderr:ne})||0;De.end(),ne.end(),await ce,await ee;let ht=Date.now();if(b){let H=r.get("enableTimers")?`, completed in ${de.pretty(r,ht-Ie,de.Type.DURATION)}`:"";ae.reportInfo(null,`${Ee} Process exited (exit code ${ke})${H}`)}return ke===130&&(Ae=!0,pe=ke),ke}catch(Ie){throw De.end(),ne.end(),await ce,await ee,Ie}};for(let Pe of I)J.set(Pe.anchoredLocator.locatorHash,Pe);for(;J.size>0&&!ae.hasErrors();){let Pe=[];for(let[De,ce]of J){if(te.has(ce.anchoredDescriptor.descriptorHash))continue;let ne=!0;if(this.topological||this.topologicalDev){let ee=this.topologicalDev?new Map([...ce.manifest.dependencies,...ce.manifest.devDependencies]):ce.manifest.dependencies;for(let Ie of ee.values()){let ke=o.tryWorkspaceByDescriptor(Ie);if(ne=ke===null||!J.has(ke.anchoredLocator.locatorHash),!ne)break}}if(!!ne&&(te.add(ce.anchoredDescriptor.descriptorHash),Pe.push(U(async()=>{let ee=await we(ce,{commandIndex:++le});return J.delete(De),te.delete(ce.anchoredDescriptor.descriptorHash),ee})),!T))break}if(Pe.length===0){let De=Array.from(J.values()).map(ce=>W.prettyLocator(r,ce.anchoredLocator)).join(", ");ae.reportError(3,`Dependency cycle detected (${De})`);return}let Ee=(await Promise.all(Pe)).find(De=>De!==0);pe===null&&(pe=typeof Ee<"u"?1:pe),(this.topological||this.topologicalDev)&&typeof Ee<"u"&&ae.reportError(0,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return pe!==null?pe:ye.exitCode()}};op.paths=[["workspaces","foreach"]],op.usage=nt.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`, or disabled by setting `-j unlimited`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `-W,--worktree` is set, Yarn will find workspaces to run the command on by looking at the current worktree.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - If `--since` is set, Yarn will only run the command on workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `--dry-run` is set, Yarn will explain what it would do without actually doing anything.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n Adding the `-v,--verbose` flag (automatically enabled in interactive terminal environments) will cause Yarn to print more information; in particular the name of the workspace that generated the output will be printed at the front of each line.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish all packages","yarn workspaces foreach -A npm publish --tolerate-republish"],["Run the build script on all descendant packages","yarn workspaces foreach -A run build"],["Run the build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -Apt run build"],["Run the build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -Rpt --from '{workspace-a,workspace-b}' run build"]]}),op.schema=[lI("all",Gu.Forbids,["from","recursive","since","worktree"],{missingIf:"undefined"}),UR(["all","recursive","since","worktree"],{missingIf:"undefined"})];function ZBe(t,{prefix:e,interlaced:r}){let o=t.createStreamReporter(e),a=new je.DefaultStream;a.pipe(o,{end:!1}),a.on("finish",()=>{o.end()});let n=new Promise(A=>{o.on("finish",()=>{A(a.active)})});if(r)return[a,n];let u=new je.BufferStream;return u.pipe(a,{end:!1}),u.on("finish",()=>{a.end()}),[u,n]}function ZDt(t,{configuration:e,commandIndex:r,verbose:o}){if(!o)return null;let n=`[${W.stringifyIdent(t.anchoredLocator)}]:`,u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[r%u.length];return de.pretty(e,n,A)}var $Dt={commands:[rg,op]},ePt=$Dt;var fC=()=>({modules:new Map([["@yarnpkg/cli",o2],["@yarnpkg/core",s2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",tI],["@yarnpkg/shell",T1],["clipanion",pI],["semver",tPt],["typanion",Ko],["@yarnpkg/plugin-essentials",tH],["@yarnpkg/plugin-compat",oH],["@yarnpkg/plugin-constraints",BH],["@yarnpkg/plugin-dlx",vH],["@yarnpkg/plugin-exec",SH],["@yarnpkg/plugin-file",bH],["@yarnpkg/plugin-git",eH],["@yarnpkg/plugin-github",FH],["@yarnpkg/plugin-http",TH],["@yarnpkg/plugin-init",RH],["@yarnpkg/plugin-interactive-tools",Lj],["@yarnpkg/plugin-link",Mj],["@yarnpkg/plugin-nm",Cq],["@yarnpkg/plugin-npm",EG],["@yarnpkg/plugin-npm-cli",xG],["@yarnpkg/plugin-pack",hG],["@yarnpkg/plugin-patch",NG],["@yarnpkg/plugin-pnp",lq],["@yarnpkg/plugin-pnpm",OG],["@yarnpkg/plugin-stage",YG],["@yarnpkg/plugin-typescript",WG],["@yarnpkg/plugin-version",XG],["@yarnpkg/plugin-workspace-tools",ZG]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"])});function rve({cwd:t,pluginConfiguration:e}){let r=new as({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:tn??""});return Object.assign(r,{defaultContext:{...as.defaultContext,cwd:t,plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr}})}function rPt(t){if(je.parseOptionalBoolean(process.env.YARN_IGNORE_NODE))return!0;let r=process.versions.node,o=">=18.12.0";if(kr.satisfiesWithPrereleases(r,o))return!0;let a=new it(`This tool requires a Node version compatible with ${o} (got ${r}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);return as.defaultContext.stdout.write(t.error(a)),!1}async function nve({selfPath:t,pluginConfiguration:e}){return await Ve.find(ue.toPortablePath(process.cwd()),e,{strict:!1,usePathCheck:t})}function nPt(t,e,{yarnPath:r}){if(!oe.existsSync(r))return t.error(new Error(`The "yarn-path" option has been set, but the specified location doesn't exist (${r}).`)),1;process.on("SIGINT",()=>{});let o={stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1"}};try{(0,eve.execFileSync)(process.execPath,[ue.fromPortablePath(r),...e],o)}catch(a){return a.status??1}return 0}function iPt(t,e){let r=null,o=e;return e.length>=2&&e[0]==="--cwd"?(r=ue.toPortablePath(e[1]),o=e.slice(2)):e.length>=1&&e[0].startsWith("--cwd=")?(r=ue.toPortablePath(e[0].slice(6)),o=e.slice(1)):e[0]==="add"&&e[e.length-2]==="--cwd"&&(r=ue.toPortablePath(e[e.length-1]),o=e.slice(0,e.length-2)),t.defaultContext.cwd=r!==null?K.resolve(r):K.cwd(),o}function sPt(t,{configuration:e}){if(!e.get("enableTelemetry")||tve.isCI||!process.stdout.isTTY)return;Ve.telemetry=new cC(e,"puba9cdc10ec5790a2cf4969dd413a47270");let o=/^@yarnpkg\/plugin-(.*)$/;for(let a of e.plugins.keys())uC.has(a.match(o)?.[1]??"")&&Ve.telemetry?.reportPluginName(a);t.binaryVersion&&Ve.telemetry.reportVersion(t.binaryVersion)}function ive(t,{configuration:e}){for(let r of e.plugins.values())for(let o of r.commands||[])t.register(o)}async function oPt(t,e,{selfPath:r,pluginConfiguration:o}){if(!rPt(t))return 1;let a=await nve({selfPath:r,pluginConfiguration:o}),n=a.get("yarnPath"),u=a.get("ignorePath");if(n&&!u)return nPt(t,e,{yarnPath:n});delete process.env.YARN_IGNORE_PATH;let A=iPt(t,e);sPt(t,{configuration:a}),ive(t,{configuration:a});let p=t.process(A,t.defaultContext);return p.help||Ve.telemetry?.reportCommandName(p.path.join(" ")),await t.run(p,t.defaultContext)}async function the({cwd:t=K.cwd(),pluginConfiguration:e=fC()}={}){let r=rve({cwd:t,pluginConfiguration:e}),o=await nve({pluginConfiguration:e,selfPath:null});return ive(r,{configuration:o}),r}async function sk(t,{cwd:e=K.cwd(),selfPath:r,pluginConfiguration:o}){let a=rve({cwd:e,pluginConfiguration:o});try{process.exitCode=await oPt(a,t,{selfPath:r,pluginConfiguration:o})}catch(n){as.defaultContext.stdout.write(a.error(n)),process.exitCode=1}finally{await oe.rmtempPromise()}}sk(process.argv.slice(2),{cwd:K.cwd(),selfPath:ue.toPortablePath(ue.resolve(process.argv[1])),pluginConfiguration:fC()});})(); +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ +/*! + * buildToken + * Builds OAuth token prefix (helper function) + * + * @name buildToken + * @function + * @param {GitUrl} obj The parsed Git url object. + * @return {String} token prefix + */ +/*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + */ +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * is-windows + * + * Copyright © 2015-2018, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + */ +/** + @license + Copyright (c) 2015, Rebecca Turner + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + */ +/** + @license + Copyright Joyent, Inc. and other Node contributors. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to permit + persons to whom the Software is furnished to do so, subject to the + following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** + @license + Copyright Node.js contributors. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. +*/ +/** + @license + The MIT License (MIT) + + Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ +/** @license React v0.18.0 + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/** @license React v0.24.0 + * react-reconciler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/** @license React v16.13.1 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/tgui/.yarn/sdks/eslint/bin/eslint.js b/tgui/.yarn/sdks/eslint/bin/eslint.js new file mode 100644 index 0000000000000..f0557a07767ea --- /dev/null +++ b/tgui/.yarn/sdks/eslint/bin/eslint.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const { existsSync } = require(`fs`); +const { createRequire } = require(`module`); +const { resolve } = require(`path`); + +const relPnpApiPath = '../../../../.pnp.cjs'; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require eslint/bin/eslint.js + require(absPnpApiPath).setup(); + } +} + +// Defer to the real eslint/bin/eslint.js your application uses +module.exports = absRequire(`eslint/bin/eslint.js`); diff --git a/tgui/.yarn/sdks/eslint/lib/api.js b/tgui/.yarn/sdks/eslint/lib/api.js new file mode 100644 index 0000000000000..93f1f0c282476 --- /dev/null +++ b/tgui/.yarn/sdks/eslint/lib/api.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const { existsSync } = require(`fs`); +const { createRequire } = require(`module`); +const { resolve } = require(`path`); + +const relPnpApiPath = '../../../../.pnp.cjs'; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require eslint + require(absPnpApiPath).setup(); + } +} + +// Defer to the real eslint your application uses +module.exports = absRequire(`eslint`); diff --git a/tgui/.yarn/sdks/eslint/lib/unsupported-api.js b/tgui/.yarn/sdks/eslint/lib/unsupported-api.js new file mode 100644 index 0000000000000..01e7653dcc92b --- /dev/null +++ b/tgui/.yarn/sdks/eslint/lib/unsupported-api.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const { existsSync } = require(`fs`); +const { createRequire } = require(`module`); +const { resolve } = require(`path`); + +const relPnpApiPath = '../../../../.pnp.cjs'; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require eslint/use-at-your-own-risk + require(absPnpApiPath).setup(); + } +} + +// Defer to the real eslint/use-at-your-own-risk your application uses +module.exports = absRequire(`eslint/use-at-your-own-risk`); diff --git a/tgui/.yarn/sdks/eslint/package.json b/tgui/.yarn/sdks/eslint/package.json new file mode 100644 index 0000000000000..f9672f35449d6 --- /dev/null +++ b/tgui/.yarn/sdks/eslint/package.json @@ -0,0 +1,14 @@ +{ + "name": "eslint", + "version": "8.56.0-sdk", + "main": "./lib/api.js", + "type": "commonjs", + "bin": { + "eslint": "./bin/eslint.js" + }, + "exports": { + "./package.json": "./package.json", + ".": "./lib/api.js", + "./use-at-your-own-risk": "./lib/unsupported-api.js" + } +} diff --git a/tgui/.yarn/sdks/integrations.yml b/tgui/.yarn/sdks/integrations.yml new file mode 100644 index 0000000000000..aa9d0d0ad81a4 --- /dev/null +++ b/tgui/.yarn/sdks/integrations.yml @@ -0,0 +1,5 @@ +# This file is automatically generated by @yarnpkg/sdks. +# Manual changes might be lost! + +integrations: + - vscode diff --git a/tgui/.yarn/sdks/prettier/bin/prettier.cjs b/tgui/.yarn/sdks/prettier/bin/prettier.cjs new file mode 100644 index 0000000000000..5efad688e7391 --- /dev/null +++ b/tgui/.yarn/sdks/prettier/bin/prettier.cjs @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require prettier/bin/prettier.cjs + require(absPnpApiPath).setup(); + } +} + +// Defer to the real prettier/bin/prettier.cjs your application uses +module.exports = absRequire(`prettier/bin/prettier.cjs`); diff --git a/tgui/.yarn/sdks/prettier/index.cjs b/tgui/.yarn/sdks/prettier/index.cjs new file mode 100644 index 0000000000000..8758e367a725a --- /dev/null +++ b/tgui/.yarn/sdks/prettier/index.cjs @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require prettier + require(absPnpApiPath).setup(); + } +} + +// Defer to the real prettier your application uses +module.exports = absRequire(`prettier`); diff --git a/tgui/.yarn/sdks/prettier/package.json b/tgui/.yarn/sdks/prettier/package.json new file mode 100644 index 0000000000000..d2b89e5f34b16 --- /dev/null +++ b/tgui/.yarn/sdks/prettier/package.json @@ -0,0 +1,7 @@ +{ + "name": "prettier", + "version": "3.1.1-sdk", + "main": "./index.cjs", + "type": "commonjs", + "bin": "./bin/prettier.cjs" +} diff --git a/tgui/.yarn/sdks/typescript/bin/tsc b/tgui/.yarn/sdks/typescript/bin/tsc new file mode 100644 index 0000000000000..815aedd29d3e3 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/bin/tsc @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const { existsSync } = require(`fs`); +const { createRequire } = require(`module`); +const { resolve } = require(`path`); + +const relPnpApiPath = '../../../../.pnp.cjs'; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/bin/tsc + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/bin/tsc your application uses +module.exports = absRequire(`typescript/bin/tsc`); diff --git a/tgui/.yarn/sdks/typescript/bin/tsserver b/tgui/.yarn/sdks/typescript/bin/tsserver new file mode 100644 index 0000000000000..7d9de68016227 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/bin/tsserver @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const { existsSync } = require(`fs`); +const { createRequire } = require(`module`); +const { resolve } = require(`path`); + +const relPnpApiPath = '../../../../.pnp.cjs'; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/bin/tsserver + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/bin/tsserver your application uses +module.exports = absRequire(`typescript/bin/tsserver`); diff --git a/tgui/.yarn/sdks/typescript/lib/tsc.js b/tgui/.yarn/sdks/typescript/lib/tsc.js new file mode 100644 index 0000000000000..1d3e2a83cf2d9 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/lib/tsc.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const { existsSync } = require(`fs`); +const { createRequire } = require(`module`); +const { resolve } = require(`path`); + +const relPnpApiPath = '../../../../.pnp.cjs'; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/lib/tsc.js + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/lib/tsc.js your application uses +module.exports = absRequire(`typescript/lib/tsc.js`); diff --git a/tgui/.yarn/sdks/typescript/lib/tsserver.js b/tgui/.yarn/sdks/typescript/lib/tsserver.js new file mode 100644 index 0000000000000..9088abf5e3443 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/lib/tsserver.js @@ -0,0 +1,272 @@ +#!/usr/bin/env node + +const { existsSync } = require(`fs`); +const { createRequire } = require(`module`); +const { resolve } = require(`path`); + +const relPnpApiPath = '../../../../.pnp.cjs'; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +const moduleWrapper = (tsserver) => { + if (!process.versions.pnp) { + return tsserver; + } + + const { isAbsolute } = require(`path`); + const pnpApi = require(`pnpapi`); + + const isVirtual = (str) => str.match(/\/(\$\$virtual|__virtual__)\//); + const isPortal = (str) => str.startsWith('portal:/'); + const normalize = (str) => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); + + const dependencyTreeRoots = new Set( + pnpApi.getDependencyTreeRoots().map((locator) => { + return `${locator.name}@${locator.reference}`; + }) + ); + + // VSCode sends the zip paths to TS using the "zip://" prefix, that TS + // doesn't understand. This layer makes sure to remove the protocol + // before forwarding it to TS, and to add it back on all returned paths. + + function toEditorPath(str) { + // We add the `zip:` prefix to both `.zip/` paths and virtual paths + if ( + isAbsolute(str) && + !str.match(/^\^?(zip:|\/zip\/)/) && + (str.match(/\.zip\//) || isVirtual(str)) + ) { + // We also take the opportunity to turn virtual paths into physical ones; + // this makes it much easier to work with workspaces that list peer + // dependencies, since otherwise Ctrl+Click would bring us to the virtual + // file instances instead of the real ones. + // + // We only do this to modules owned by the the dependency tree roots. + // This avoids breaking the resolution when jumping inside a vendor + // with peer dep (otherwise jumping into react-dom would show resolution + // errors on react). + // + const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str; + if (resolved) { + const locator = pnpApi.findPackageLocator(resolved); + if ( + locator && + (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || + isPortal(locator.reference)) + ) { + str = resolved; + } + } + + str = normalize(str); + + if (str.match(/\.zip\//)) { + switch (hostInfo) { + // Absolute VSCode `Uri.fsPath`s need to start with a slash. + // VSCode only adds it automatically for supported schemes, + // so we have to do it manually for the `zip` scheme. + // The path needs to start with a caret otherwise VSCode doesn't handle the protocol + // + // Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910 + // + // 2021-10-08: VSCode changed the format in 1.61. + // Before | ^zip:/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + // 2022-04-06: VSCode changed the format in 1.66. + // Before | ^/zip//c:/foo/bar.zip/package.json + // After | ^/zip/c:/foo/bar.zip/package.json + // + // 2022-05-06: VSCode changed the format in 1.68 + // Before | ^/zip/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + case `vscode <1.61`: + { + str = `^zip:${str}`; + } + break; + + case `vscode <1.66`: + { + str = `^/zip/${str}`; + } + break; + + case `vscode <1.68`: + { + str = `^/zip${str}`; + } + break; + + case `vscode`: + { + str = `^/zip/${str}`; + } + break; + + // To make "go to definition" work, + // We have to resolve the actual file system path from virtual path + // and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip) + case `coc-nvim`: + { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = resolve(`zipfile:${str}`); + } + break; + + // Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server) + // We have to resolve the actual file system path from virtual path, + // everything else is up to neovim + case `neovim`: + { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = `zipfile://${str}`; + } + break; + + default: + { + str = `zip:${str}`; + } + break; + } + } else { + str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); + } + } + + return str; + } + + function fromEditorPath(str) { + switch (hostInfo) { + case `coc-nvim`: + { + str = str.replace(/\.zip::/, `.zip/`); + // The path for coc-nvim is in format of //zipfile://.yarn/... + // So in order to convert it back, we use .* to match all the thing + // before `zipfile:` + return process.platform === `win32` + ? str.replace(/^.*zipfile:\//, ``) + : str.replace(/^.*zipfile:/, ``); + } + break; + + case `neovim`: + { + str = str.replace(/\.zip::/, `.zip/`); + // The path for neovim is in format of zipfile:////.yarn/... + return str.replace(/^zipfile:\/\//, ``); + } + break; + + case `vscode`: + default: + { + return str.replace( + /^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, + process.platform === `win32` ? `` : `/` + ); + } + break; + } + } + + // Force enable 'allowLocalPluginLoads' + // TypeScript tries to resolve plugins using a path relative to itself + // which doesn't work when using the global cache + // https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238 + // VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but + // TypeScript already does local loads and if this code is running the user trusts the workspace + // https://github.com/microsoft/vscode/issues/45856 + const ConfiguredProject = tsserver.server.ConfiguredProject; + const { enablePluginsWithOptions: originalEnablePluginsWithOptions } = + ConfiguredProject.prototype; + ConfiguredProject.prototype.enablePluginsWithOptions = function () { + this.projectService.allowLocalPluginLoads = true; + return originalEnablePluginsWithOptions.apply(this, arguments); + }; + + // And here is the point where we hijack the VSCode <-> TS communications + // by adding ourselves in the middle. We locate everything that looks + // like an absolute path of ours and normalize it. + + const Session = tsserver.server.Session; + const { onMessage: originalOnMessage, send: originalSend } = + Session.prototype; + let hostInfo = `unknown`; + + Object.assign(Session.prototype, { + onMessage(/** @type {string | object} */ message) { + const isStringMessage = typeof message === 'string'; + const parsedMessage = isStringMessage ? JSON.parse(message) : message; + + if ( + parsedMessage != null && + typeof parsedMessage === `object` && + parsedMessage.arguments && + typeof parsedMessage.arguments.hostInfo === `string` + ) { + hostInfo = parsedMessage.arguments.hostInfo; + if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) { + const [, major, minor] = ( + process.env.VSCODE_IPC_HOOK.match( + // The RegExp from https://semver.org/ but without the caret at the start + /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ + ) ?? [] + ).map(Number); + + if (major === 1) { + if (minor < 61) { + hostInfo += ` <1.61`; + } else if (minor < 66) { + hostInfo += ` <1.66`; + } else if (minor < 68) { + hostInfo += ` <1.68`; + } + } + } + } + + const processedMessageJSON = JSON.stringify( + parsedMessage, + (key, value) => { + return typeof value === 'string' ? fromEditorPath(value) : value; + } + ); + + return originalOnMessage.call( + this, + isStringMessage + ? processedMessageJSON + : JSON.parse(processedMessageJSON) + ); + }, + + send(/** @type {any} */ msg) { + return originalSend.call( + this, + JSON.parse( + JSON.stringify(msg, (key, value) => { + return typeof value === `string` ? toEditorPath(value) : value; + }) + ) + ); + }, + }); + + return tsserver; +}; + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/lib/tsserver.js + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/lib/tsserver.js your application uses +module.exports = moduleWrapper(absRequire(`typescript/lib/tsserver.js`)); diff --git a/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js b/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js new file mode 100644 index 0000000000000..9878a83b1f9a5 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js @@ -0,0 +1,272 @@ +#!/usr/bin/env node + +const { existsSync } = require(`fs`); +const { createRequire } = require(`module`); +const { resolve } = require(`path`); + +const relPnpApiPath = '../../../../.pnp.cjs'; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +const moduleWrapper = (tsserver) => { + if (!process.versions.pnp) { + return tsserver; + } + + const { isAbsolute } = require(`path`); + const pnpApi = require(`pnpapi`); + + const isVirtual = (str) => str.match(/\/(\$\$virtual|__virtual__)\//); + const isPortal = (str) => str.startsWith('portal:/'); + const normalize = (str) => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); + + const dependencyTreeRoots = new Set( + pnpApi.getDependencyTreeRoots().map((locator) => { + return `${locator.name}@${locator.reference}`; + }) + ); + + // VSCode sends the zip paths to TS using the "zip://" prefix, that TS + // doesn't understand. This layer makes sure to remove the protocol + // before forwarding it to TS, and to add it back on all returned paths. + + function toEditorPath(str) { + // We add the `zip:` prefix to both `.zip/` paths and virtual paths + if ( + isAbsolute(str) && + !str.match(/^\^?(zip:|\/zip\/)/) && + (str.match(/\.zip\//) || isVirtual(str)) + ) { + // We also take the opportunity to turn virtual paths into physical ones; + // this makes it much easier to work with workspaces that list peer + // dependencies, since otherwise Ctrl+Click would bring us to the virtual + // file instances instead of the real ones. + // + // We only do this to modules owned by the the dependency tree roots. + // This avoids breaking the resolution when jumping inside a vendor + // with peer dep (otherwise jumping into react-dom would show resolution + // errors on react). + // + const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str; + if (resolved) { + const locator = pnpApi.findPackageLocator(resolved); + if ( + locator && + (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || + isPortal(locator.reference)) + ) { + str = resolved; + } + } + + str = normalize(str); + + if (str.match(/\.zip\//)) { + switch (hostInfo) { + // Absolute VSCode `Uri.fsPath`s need to start with a slash. + // VSCode only adds it automatically for supported schemes, + // so we have to do it manually for the `zip` scheme. + // The path needs to start with a caret otherwise VSCode doesn't handle the protocol + // + // Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910 + // + // 2021-10-08: VSCode changed the format in 1.61. + // Before | ^zip:/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + // 2022-04-06: VSCode changed the format in 1.66. + // Before | ^/zip//c:/foo/bar.zip/package.json + // After | ^/zip/c:/foo/bar.zip/package.json + // + // 2022-05-06: VSCode changed the format in 1.68 + // Before | ^/zip/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + case `vscode <1.61`: + { + str = `^zip:${str}`; + } + break; + + case `vscode <1.66`: + { + str = `^/zip/${str}`; + } + break; + + case `vscode <1.68`: + { + str = `^/zip${str}`; + } + break; + + case `vscode`: + { + str = `^/zip/${str}`; + } + break; + + // To make "go to definition" work, + // We have to resolve the actual file system path from virtual path + // and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip) + case `coc-nvim`: + { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = resolve(`zipfile:${str}`); + } + break; + + // Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server) + // We have to resolve the actual file system path from virtual path, + // everything else is up to neovim + case `neovim`: + { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = `zipfile://${str}`; + } + break; + + default: + { + str = `zip:${str}`; + } + break; + } + } else { + str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); + } + } + + return str; + } + + function fromEditorPath(str) { + switch (hostInfo) { + case `coc-nvim`: + { + str = str.replace(/\.zip::/, `.zip/`); + // The path for coc-nvim is in format of //zipfile://.yarn/... + // So in order to convert it back, we use .* to match all the thing + // before `zipfile:` + return process.platform === `win32` + ? str.replace(/^.*zipfile:\//, ``) + : str.replace(/^.*zipfile:/, ``); + } + break; + + case `neovim`: + { + str = str.replace(/\.zip::/, `.zip/`); + // The path for neovim is in format of zipfile:////.yarn/... + return str.replace(/^zipfile:\/\//, ``); + } + break; + + case `vscode`: + default: + { + return str.replace( + /^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, + process.platform === `win32` ? `` : `/` + ); + } + break; + } + } + + // Force enable 'allowLocalPluginLoads' + // TypeScript tries to resolve plugins using a path relative to itself + // which doesn't work when using the global cache + // https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238 + // VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but + // TypeScript already does local loads and if this code is running the user trusts the workspace + // https://github.com/microsoft/vscode/issues/45856 + const ConfiguredProject = tsserver.server.ConfiguredProject; + const { enablePluginsWithOptions: originalEnablePluginsWithOptions } = + ConfiguredProject.prototype; + ConfiguredProject.prototype.enablePluginsWithOptions = function () { + this.projectService.allowLocalPluginLoads = true; + return originalEnablePluginsWithOptions.apply(this, arguments); + }; + + // And here is the point where we hijack the VSCode <-> TS communications + // by adding ourselves in the middle. We locate everything that looks + // like an absolute path of ours and normalize it. + + const Session = tsserver.server.Session; + const { onMessage: originalOnMessage, send: originalSend } = + Session.prototype; + let hostInfo = `unknown`; + + Object.assign(Session.prototype, { + onMessage(/** @type {string | object} */ message) { + const isStringMessage = typeof message === 'string'; + const parsedMessage = isStringMessage ? JSON.parse(message) : message; + + if ( + parsedMessage != null && + typeof parsedMessage === `object` && + parsedMessage.arguments && + typeof parsedMessage.arguments.hostInfo === `string` + ) { + hostInfo = parsedMessage.arguments.hostInfo; + if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) { + const [, major, minor] = ( + process.env.VSCODE_IPC_HOOK.match( + // The RegExp from https://semver.org/ but without the caret at the start + /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ + ) ?? [] + ).map(Number); + + if (major === 1) { + if (minor < 61) { + hostInfo += ` <1.61`; + } else if (minor < 66) { + hostInfo += ` <1.66`; + } else if (minor < 68) { + hostInfo += ` <1.68`; + } + } + } + } + + const processedMessageJSON = JSON.stringify( + parsedMessage, + (key, value) => { + return typeof value === 'string' ? fromEditorPath(value) : value; + } + ); + + return originalOnMessage.call( + this, + isStringMessage + ? processedMessageJSON + : JSON.parse(processedMessageJSON) + ); + }, + + send(/** @type {any} */ msg) { + return originalSend.call( + this, + JSON.parse( + JSON.stringify(msg, (key, value) => { + return typeof value === `string` ? toEditorPath(value) : value; + }) + ) + ); + }, + }); + + return tsserver; +}; + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/lib/tsserverlibrary.js + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/lib/tsserverlibrary.js your application uses +module.exports = moduleWrapper(absRequire(`typescript/lib/tsserverlibrary.js`)); diff --git a/tgui/.yarn/sdks/typescript/lib/typescript.js b/tgui/.yarn/sdks/typescript/lib/typescript.js new file mode 100644 index 0000000000000..3ebd073e31c9a --- /dev/null +++ b/tgui/.yarn/sdks/typescript/lib/typescript.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const { existsSync } = require(`fs`); +const { createRequire } = require(`module`); +const { resolve } = require(`path`); + +const relPnpApiPath = '../../../../.pnp.cjs'; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript your application uses +module.exports = absRequire(`typescript`); diff --git a/tgui/.yarn/sdks/typescript/package.json b/tgui/.yarn/sdks/typescript/package.json new file mode 100644 index 0000000000000..eb7dd745bc83d --- /dev/null +++ b/tgui/.yarn/sdks/typescript/package.json @@ -0,0 +1,10 @@ +{ + "name": "typescript", + "version": "5.3.3-sdk", + "main": "./lib/typescript.js", + "type": "commonjs", + "bin": { + "tsc": "./bin/tsc", + "tsserver": "./bin/tsserver" + } +} diff --git a/tgui/.yarnrc.yml b/tgui/.yarnrc.yml new file mode 100644 index 0000000000000..a71b9ff6f43b6 --- /dev/null +++ b/tgui/.yarnrc.yml @@ -0,0 +1,22 @@ +compressionLevel: mixed + +enableGlobalCache: false + +enableScripts: false + +logFilters: + - code: YN0004 + level: discard + - code: YN0062 + level: discard + +packageExtensions: + babel-plugin-inferno@*: + dependencies: + '@babel/core': '*' + +pnpEnableEsmLoader: false + +preferInteractive: true + +yarnPath: .yarn/releases/yarn-4.0.2.cjs diff --git a/tgui/README.md b/tgui/README.md new file mode 100644 index 0000000000000..c9153cfa95923 --- /dev/null +++ b/tgui/README.md @@ -0,0 +1,197 @@ +# tgui + +## Introduction + +tgui is a robust user interface framework of /tg/station. + +tgui is very different from most UIs you will encounter in BYOND programming. +It is heavily reliant on Javascript and web technologies as opposed to DM. +If you are familiar with NanoUI (a library which can be found on almost +every other SS13 codebase), tgui should be fairly easy to pick up. + +## Learn tgui + +People come to tgui from different backgrounds and with different +learning styles. Whether you prefer a more theoretical or a practical +approach, we hope you’ll find this section helpful. + +### Practical Tutorial + +If you are completely new to frontend and prefer to **learn by doing**, +start with our [practical tutorial](docs/tutorial-and-examples.md). + +### Guides + +This project uses **Inferno** - a very fast UI rendering engine with a similar +API to React. Take your time to read these guides: + +- [React guide](https://reactjs.org/docs/hello-world.html) +- [Inferno documentation](https://infernojs.org/docs/guides/components) - + highlights differences with React. + +If you were already familiar with an older, Ractive-based tgui, and want +to translate concepts between old and new tgui, read this +[interface conversion guide](docs/converting-old-tgui-interfaces.md). + +## Pre-requisites + +You will need these programs to start developing in tgui: + +- [Node v20](https://nodejs.org/en/download/) +- [Yarn v1.19+](https://yarnpkg.com/en/docs/install) (optional) +- [Git Bash](https://git-scm.com/downloads) + or [MSys2](https://www.msys2.org/) (optional) + +**DO NOT install Chocolatey if Node installer asks you to!** + +## Usage + +**Via provided cmd scripts (Windows)**: + +- `bin/tgui-build` - Build tgui in production mode and run a full suite of code checks. +- `bin/tgui-dev` - Launch a development server. + - `bin/tgui-dev --reload` - Reload byond cache once. + - `bin/tgui-dev --debug` - Run server with debug logging enabled. + - `bin/tgui-dev --no-hot` - Disable hot module replacement (helps when doing development on IE8). +- `bin/tgui-sonar` - Analyze code with SonarQube. +- `bin/tgui-bench` - Run benchmarks. + +> To open a CMD or PowerShell window in any open folder, right click **while holding Shift** on any free space in the folder, then click on either `Open command window here` or `Open PowerShell window here`. + +**Via Juke Build (cross-platform)**: + +- `tools/build/build tgui` - Build tgui in production mode. +- `tools/build/build tgui-dev` - Build tgui in production mode. + - `tools/build/build tgui-dev --reload` - Reload byond cache once. + - `tools/build/build tgui-dev --debug` - Run server with debug logging enabled. + - `tools/build/build tgui-dev --no-hot` - Disable hot module replacement (helps when doing development on IE8). +- `tools/build/build tgui-lint` - Show (and auto-fix) problems with the code. +- `tools/build/build tgui-sonar` - Analyze code with SonarQube. +- `tools/build/build tgui-test` - Run unit and integration tests. +- `tools/build/build tgui-analyze` - Run a bundle analyzer. +- `tools/build/build tgui-bench` - Run benchmarks. +- `tools/build/build tgui-clean` - Clean up tgui folder. + +> With Juke Build, you can run multiple targets together, e.g.: +> +> ``` +> tools/build/build tgui tgui-lint tgui-tsc tgui-test +> ``` + +**Via Yarn (cross-platform)**: + +Run `yarn install` once to install tgui dependencies. + +- `yarn tgui:build` - Build tgui in production mode. + - `yarn tgui:build [options]` - Build tgui with custom webpack options. +- `yarn tgui:dev` - Launch a development server. + - `yarn tgui:dev --reload` - Reload byond cache once. + - `yarn tgui:dev --debug` - Run server with debug logging enabled. + - `yarn tgui:dev --no-hot` - Disable hot module replacement (helps when doing development on IE8). +- `yarn tgui:lint` - Show (and auto-fix) problems with the code. +- `yarn tgui:sonar` - Analyze code with SonarQube. +- `yarn tgui:tsc` - Check code with TypeScript compiler. +- `yarn tgui:test` - Run unit and integration tests. +- `yarn tgui:analyze` - Run a bundle analyzer. +- `yarn tgui:bench` - Run benchmarks. +- `yarn tgfont:build` - Build icon fonts. +- `yarn tgui-polyfill:build` - Build polyfills. You need to run it when updating any of the static (numbered) polyfills. + +## Troubleshooting + +**Development server is crashing** + +Make sure path to your working directory does not contain spaces, special unicode +characters, exclamation marks or any other special symbols. If so, move codebase +to a location which does not contain these characters. + +This is a known issue with Yarn (and some other tools, like Webpack), and fix is +going to happen eventually. + +**Development server doesn't find my BYOND cache!** + +This happens if your Documents folder in Windows has a custom location, for +example in `E:\Libraries\Documents`. Development server tries its best to find +this non-standard location (searches for a Windows Registry key), but it can +fail. You have to run the dev server with an additional environmental +variable, with a full path to BYOND cache. + +``` +BYOND_CACHE="E:/Libraries/Documents/BYOND/cache" +``` + +**Webpack errors out with some cryptic messages!** + +> Example: `No template for dependency: PureExpressionDependency` +> Webpack stores its cache on disk since tgui 4.3, and it is very sensitive +> to build configuration. So if you update webpack, or share the same cache +> directory between development and production build, it will start +> hallucinating. + +To fix this kind of problem, run `bin/tgui --clean` and try again. + +## Developer Tools + +When developing with `tgui-dev-server`, you will have access to certain +development only features. + +**Debug Logs.** +When running server via `bin/tgui --dev --debug`, server will print debug +logs and time spent on rendering. Use this information to optimize your +code, and try to keep re-renders below 16ms. + +**Kitchen Sink.** +Press `F12` to open the KitchenSink interface. This interface is a +playground to test various tgui components. + +**Layout Debugger.** +Press `F11` to toggle the _layout debugger_. It will show outlines of +all tgui elements, which makes it easy to understand how everything comes +together, and can reveal certain layout bugs which are not normally visible. + +## Project Structure + +- `/packages` - Each folder here represents a self-contained Node module. +- `/packages/common` - Helper functions +- `/packages/tgui/index.js` - Application entry point. +- `/packages/tgui/components` - Basic UI building blocks. +- `/packages/tgui/interfaces` - Actual in-game interfaces. + Interface takes data via the `state` prop and outputs an html-like stucture, + which you can build using existing UI components. +- `/packages/tgui/layouts` - Root level UI components, that affect the final + look and feel of the browser window. They usually hold various window + elements, like the titlebar and resize handlers, and control the UI theme. +- `/packages/tgui/routes.js` - This is where tgui decides which interface to + pull and render. +- `/packages/tgui/layout.js` - A root-level component, holding the + window elements, like the titlebar, buttons, resize handlers. Calls + `routes.js` to decide which component to render. +- `/packages/tgui/styles/main.scss` - CSS entry point. +- `/packages/tgui/styles/functions.scss` - Useful SASS functions. + Stuff like `lighten`, `darken`, `luminance` are defined here. +- `/packages/tgui/styles/atomic` - Atomic CSS classes. + These are very simple, tiny, reusable CSS classes which you can use and + combine to change appearance of your elements. Keep them small. +- `/packages/tgui/styles/components` - CSS classes which are used + in UI components. These stylesheets closely follow the + [BEM](https://en.bem.info/methodology/) methodology. +- `/packages/tgui/styles/interfaces` - Custom stylesheets for your interfaces. + Add stylesheets here if you really need a fine control over your UI styles. +- `/packages/tgui/styles/layouts` - Layout-related styles. +- `/packages/tgui/styles/themes` - Contains all the various themes you can + use in tgui. Each theme must be registered in `webpack.config.js` file. + +## Component Reference + +See: [Component Reference](docs/component-reference.md). + +## License + +Source code is covered by /tg/station's parent license - **AGPL-3.0** +(see the main [README](../README.md)), unless otherwise indicated. + +Some files are annotated with a copyright header, which explicitly states +the copyright holder and license of the file. Most of the core tgui +source code is available under the **MIT** license. + +The Authors retain all copyright to their respective work here submitted. diff --git a/tgui/babel.config.js b/tgui/babel.config.js new file mode 100644 index 0000000000000..209084aae42e4 --- /dev/null +++ b/tgui/babel.config.js @@ -0,0 +1,52 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +const createBabelConfig = (options) => { + const { mode, presets = [], plugins = [] } = options; + return { + presets: [ + [ + require.resolve('@babel/preset-typescript'), + { + allowDeclareFields: true, + }, + ], + [ + require.resolve('@babel/preset-env'), + { + modules: 'commonjs', + useBuiltIns: 'entry', + corejs: '3', + spec: false, + loose: true, + targets: [], + }, + ], + ...presets, + ], + plugins: [ + [ + require.resolve('@babel/plugin-transform-class-properties'), + { + loose: true, + }, + ], + require.resolve('@babel/plugin-transform-jscript'), + require.resolve('babel-plugin-inferno'), + require.resolve('babel-plugin-transform-remove-console'), + require.resolve('common/string.babel-plugin.cjs'), + ...plugins, + ], + }; +}; + +module.exports = (api) => { + api.cache(true); + const mode = process.env.NODE_ENV; + return createBabelConfig({ mode }); +}; + +module.exports.createBabelConfig = createBabelConfig; diff --git a/tgui/bin/tgui-prettier.bat b/tgui/bin/tgui-prettier.bat new file mode 100644 index 0000000000000..d3c8ff675295c --- /dev/null +++ b/tgui/bin/tgui-prettier.bat @@ -0,0 +1,9 @@ +@echo off +rem Copyright (c) 2020 Aleksej Komarov +rem SPDX-License-Identifier: MIT +call powershell.exe -NoLogo -ExecutionPolicy Bypass -File "%~dp0\tgui_.ps1" --prettier %* +rem Pause if launched in a separate shell unless initiated from powershell +echo %PSModulePath% | findstr %USERPROFILE% >NUL +if %errorlevel% equ 0 exit 0 +echo %cmdcmdline% | find /i "/c" +if %errorlevel% equ 0 pause diff --git a/tgui/docs/component-reference.md b/tgui/docs/component-reference.md new file mode 100644 index 0000000000000..7769a64797c4e --- /dev/null +++ b/tgui/docs/component-reference.md @@ -0,0 +1,1162 @@ +# Component Reference + +> Notice: This documentation might be out of date, so always check the source +> code to see the most up-to-date information. + + + +- [General Concepts](#general-concepts) +- [`tgui/components`](#tguicomponents) + - [`AnimatedNumber`](#animatednumber) + - [`BlockQuote`](#blockquote) + - [`Box`](#box) + - [`Button`](#button) + - [`Button.Checkbox`](#buttoncheckbox) + - [`Button.Confirm`](#buttonconfirm) + - [`Button.Input`](#buttoninput) + - [`ByondUi`](#byondui) + - [`Collapsible`](#collapsible) + - [`ColorBox`](#colorbox) + - [`Dimmer`](#dimmer) + - [`Divider`](#divider) + - [`Dropdown`](#dropdown) + - [`Flex`](#flex) + - [`Flex.Item`](#flexitem) + - [`Grid`](#grid) + - [`Grid.Column`](#gridcolumn) + - [`Icon`](#icon) + - [`Icon.Stack`](#iconstack) + - [`ImageButton`](#imagebutton) + - [`ImageButton.Item`](#imagebuttonitem) + - [`Input`](#input) + - [`Knob`](#knob) + - [`LabeledControls`](#labeledcontrols) + - [`LabeledControls.Item`](#labeledcontrolsitem) + - [`LabeledList`](#labeledlist) + - [`LabeledList.Item`](#labeledlistitem) + - [`LabeledList.Divider`](#labeledlistdivider) + - [`Modal`](#modal) + - [`NoticeBox`](#noticebox) + - [`NumberInput`](#numberinput) + - [`ProgressBar`](#progressbar) + - [`RoundGauge`](#roundgauge) + - [`Section`](#section) + - [`Slider`](#slider) + - [`Stack`](#stack) + - [`Table`](#table) + - [`Table.Row`](#tablerow) + - [`Table.Cell`](#tablecell) + - [`Tabs`](#tabs) + - [`Tabs.Tab`](#tabstab) + - [`Tooltip`](#tooltip) +- [`tgui/layouts`](#tguilayouts) + - [`Window`](#window) + - [`Window.Content`](#windowcontent) + +## General Concepts + +These are the components which you can use for interface construction. +If you have trouble finding the exact prop you need on a component, +please note, that most of these components inherit from other basic +components, such as [Box](#box). This component in particular provides a lot +of styling options for all components, e.g. `color` and `opacity`, thus +it is used a lot in this framework. + +**Event handlers.** +Event handlers are callbacks that you can attack to various element to +listen for browser events. Inferno supports camelcase (`onClick`) and +lowercase (`onclick`) event names. + +- Camel case names are what's called _synthetic_ events, and are the + **preferred way** of handling events in React, for efficiency and + performance reasons. Please read + [Inferno Event Handling](https://infernojs.org/docs/guides/event-handling) + to understand what this is about. +- Lower case names are native browser events and should be used sparingly, + for example when you need an explicit IE8 support. **DO NOT** use + lowercase event handlers unless you really know what you are doing. +- [Button](#button) component does not support the lowercase `onclick` event. + Use the camel case `onClick` instead. + +## `tgui/components` + +### `AnimatedNumber` + +This component provides animations for numeric values. + +**Props:** + +- `value: number` - Value to animate. +- `initial: number` - Initial value to use in animation when element + first appears. If you set initial to `0` for example, number will always + animate starting from `0`, and if omitted, it will not play an initial + animation. +- `format: value => value` - Output formatter. + - Example: `value => Math.round(value)`. +- `children: (formattedValue, rawValue) => any` - Pull the animated number to + animate more complex things deeper in the DOM tree. + - Example: `(_, value) => ` + +### `BlockQuote` + +Just a block quote, just like this example in markdown: + +> Here's an example of a block quote. + +**Props:** + +- See inherited props: [Box](#box) + +### `Box` + +The Box component serves as a wrapper component for most of the CSS utility +needs. It creates a new DOM element, a `
    ` by default that can be changed +with the `as` property. Let's say you want to use a `` instead: + +```jsx + + + + +``` + +Flex item with `grow` property will grow to take all available empty space, +while flex items without grow will take the minimum amount of space. This +effectively places the last flex item to the very end of the flex container. + +**Props:** + +- See inherited props: [Box](#box) +- ~~`spacing: number`~~ - **Removed in tgui 4.3**, + use [Stack](#stack) instead. +- `inline: boolean` - Makes flexbox container inline, with similar behavior + to an `inline` property on a `Box`. +- `direction: string` - This establishes the main-axis, thus defining the + direction flex items are placed in the flex container. + - `row` (default) - left to right. + - `row-reverse` - right to left. + - `column` - top to bottom. + - `column-reverse` - bottom to top. +- `wrap: string` - By default, flex items will all try to fit onto one line. + You can change that and allow the items to wrap as needed with this property. + - `nowrap` (default) - all flex items will be on one line + - `wrap` - flex items will wrap onto multiple lines, from top to bottom. + - `wrap-reverse` - flex items will wrap onto multiple lines from bottom to top. +- `align: string` - Default alignment of all children. + - `stretch` (default) - stretch to fill the container. + - `start` - items are placed at the start of the cross axis. + - `end` - items are placed at the end of the cross axis. + - `center` - items are centered on the cross axis. + - `baseline` - items are aligned such as their baselines align. +- `justify: string` - This defines the alignment along the main axis. + It helps distribute extra free space leftover when either all the flex + items on a line are inflexible, or are flexible but have reached their + maximum size. It also exerts some control over the alignment of items + when they overflow the line. + - `flex-start` (default) - items are packed toward the start of the + flex-direction. + - `flex-end` - items are packed toward the end of the flex-direction. + - `space-between` - items are evenly distributed in the line; first item is + on the start line, last item on the end line + - `space-around` - items are evenly distributed in the line with equal space + around them. Note that visually the spaces aren't equal, since all the items + have equal space on both sides. The first item will have one unit of space + against the container edge, but two units of space between the next item + because that next item has its own spacing that applies. + - `space-evenly` - items are distributed so that the spacing between any two + items (and the space to the edges) is equal. + - TBD (not all properties are supported in IE11). + +### `Flex.Item` + +**Props:** + +- See inherited props: [Box](#box) +- `order: number` - By default, flex items are laid out in the source order. + However, the order property controls the order in which they appear in the + flex container. +- `grow: number | boolean` - This defines the ability for a flex item to grow + if necessary. It accepts a unitless value that serves as a proportion. It + dictates what amount of the available space inside the flex container the + item should take up. This number is unit-less and is relative to other + siblings. +- `shrink: number | boolean` - This defines the ability for a flex item to + shrink if necessary. Inverse of `grow`. +- `basis: number | string` - This defines the default size of an element + before any flex-related calculations are done. Has to be a length + (e.g. `20%`, `5rem`), an `auto` or `content` keyword. + - **Important:** IE11 flex is buggy, and auto width/height calculations + can sometimes end up in a circular dependency. This usually happens, when + working with tables inside flex (they have wacky internal widths and such). + Setting basis to `0` breaks the loop and fixes all of the problems. +- `align: string` - This allows the default alignment (or the one specified by + align-items) to be overridden for individual flex items. See: [Flex](#flex). + +### `Grid` + +> **Deprecated:** This component is no longer recommended due to the variety +> of bugs that come with table-based layouts. +> We recommend using [Flex](#flex) instead. + +Helps you to divide horizontal space into two or more equal sections. +It is essentially a single-row `Table`, but with some extra features. + +Example: + +```jsx + + +
    Hello world!
    +
    + +
    Hello world!
    +
    +
    +``` + +**Props:** + +- See inherited props: [Table](#table) + +### `Grid.Column` + +**Props:** + +- See inherited props: [Table.Cell](#tablecell) +- `size: number` (default: 1) - Size of the column relative to other columns. + +### `Icon` + +Renders one of the FontAwesome icons of your choice. + +```jsx + +``` + +To smoothen the transition from v4 to v5, we have added a v4 semantic to +transform names with `-o` suffixes to FA Regular icons. For example: + +- `square` will get transformed to `fas square` +- `square-o` will get transformed to `far square` + +**Props:** + +- See inherited props: [Box](#box) +- `name: string` - Icon name. +- `size: number` - Icon size. `1` is normal size, `2` is two times bigger. + Fractional numbers are supported. +- `rotation: number` - Icon rotation, in degrees. +- `spin: boolean` - Whether an icon should be spinning. Good for load + indicators. + +### `Icon.Stack` + +Renders children icons on top of each other in order to make your own icon. + +```jsx + + + + +``` + +**Props:** + +- See inherited props: [Box](#box) +- `children: Icon` - Icons to stack. + +### `ImageButton` + +A Robust button is specifically for sticking a picture in it. +Has support for base64, spritesheets and URLs. + +**Props:** + +- See inherited props: [Box](#box) +- `asset: boolean` - Enables spritesheets support. +- `vertical: boolean` - Makes the button a inlined vertical rectangle. +- `color: string` - By default, the button is semi-transparent. You can change the overall colour, + all colours are available in KitchenSink in the corresponding section. +- `title: string` - The top text, it will always be bold, and also adds a divider between title and content. + Disabled if there is no content. +- `content: string|any` - All main content, usually text, but you can put in other components if you like. + Makes the vertical button square if empty. +- `selected: boolean` - Makes button selected (green) if true. +- `disabled: boolean` - Makes button disabled (red) if true. Also disables onClick. +- `disabledContent: string` - If button disabled and disabledContent filled, it will be used instead content. +- `image: string` - Base64 image, simple. Disabled if asset support enabled. +- `imageUrl: string` - PNG image or other asset. Make sure you use existing simple asset! Example: imageUrl={'image.png'} +- `imageAsset: string` - If you have enabled asset support, write here which spritesheet to use. + Example: imageAsset={'spritesheet_name64x64'} +- `imageSize: string` - Sets the size of the image and adjusts the size of the button itself accordingly. + Example: imageSize={'64px'} +- `tooltip: string` - A fancy, boxy tooltip, which appears when hovering + over the button. +- `tooltipPosition: string` - Position of the tooltip. See [`Popper`](#Popper) for valid options. +- `ellipsis: boolean` - If button width is constrained, button text will + be truncated with an ellipsis. Be careful however, because this prop breaks + the baseline alignment. +- `children: ImageButton.Item|any` - Items that are added to the right of the horizontal button. +- `onClick: function` - Called when element is clicked. Also enables hover effects. + +### `ImageButton.Item` + +Additional button/s for ImageButton. + +> Try not to add ImageButton.Item in large quantities. They reduce rendering speed very much +> Available only in horizontal mode, if you try add it to vertical, you're gonna be disappointed + +**Props:** + +- See inherited props: [Box](#box) +- `color: string` - By default, the button is semi-transparent. You can change the overall colour, + all colours are available in KitchenSink in the corresponding section. +- `content: string|any` - All main content, usually text, but you can put in other components if you like. + Try to not make it too long. +- `selected: boolean` - Makes button selected (green) if true. +- `disabled: boolean` - Makes button disabled (red) if true. Also disables onClick. +- `disabledContent: string` - If button disabled and disabledContent filled, it will be used instead content. +- `tooltip: string` - A fancy, boxy tooltip, which appears when hovering + over the button. +- `tooltipPosition: string` - Position of the tooltip. See [`Popper`](#Popper) for valid options. +- `icon: string` - Adds an icon to the button. By default it will be under content. +- `iconColor: string` - Paints icon if it used. +- `iconPosition: string` - You can make an icon above the content. + Example: iconPosition={'top'} +- `iconSize: number` - Adjusts the size of the icon. +- `children: any` - Similar to content. +- `onClick: function` - Called when element is clicked. + +### `Input` + +A basic text input, which allow users to enter text into a UI. + +> Input does not support custom font size and height due to the way +> it's implemented in CSS. Eventually, this needs to be fixed. + +**Props:** + +- See inherited props: [Box](#box) +- `value: string` - Value of an input. +- `placeholder: string` - Text placed into Input box when it's empty, + otherwise nothing. Clears automatically when focused. +- `fluid: boolean` - Fill all available horizontal space. +- `selfClear: boolean` - Clear after hitting enter, as well as remain focused + when this happens. Useful for things like chat inputs. +- `onChange: (e, value) => void` - An event, which fires when you commit + the text by either unfocusing the input box, or by pressing the Enter key. +- `onInput: (e, value) => void` - An event, which fires on every keypress. + +### `Knob` + +A radial control, which allows dialing in precise values by dragging it +up and down. + +Single click opens an input box to manually type in a number. + +**Props:** + +- See inherited props: [Box](#box) +- `animated: boolean` - Animates the value if it was changed externally. +- `bipolar: boolean` - Knob can be bipolar or unipolar. +- `size: number` - Relative size of the knob. `1` is normal size, `2` is two + times bigger. Fractional numbers are supported. +- `color: string` - Color of the outer ring around the knob. +- `value: number` - Value itself, controls the position of the cursor. +- `unit: string` - Unit to display to the right of value. +- `minValue: number` - Lowest possible value. +- `maxValue: number` - Highest possible value. +- `fillValue: number` - If set, this value will be used to set the fill + percentage of the outer ring independently of the main value. +- `ranges: { color: [from, to] }` - Applies a `color` to the outer ring around + the knob based on whether the value lands in the range between `from` and `to`. + See an example of this prop in [ProgressBar](#progressbar). +- `step: number` (default: 1) - Adjust value by this amount when + dragging the input. +- `stepPixelSize: number` (default: 1) - Screen distance mouse needs + to travel to adjust value by one `step`. +- `format: value => value` - Format value using this function before + displaying it. +- `suppressFlicker: number` - A number in milliseconds, for which the input + will hold off from updating while events propagate through the backend. + Default is about 250ms, increase it if you still see flickering. +- `onChange: (e, value) => void` - An event, which fires when you release + the input, or successfully enter a number. +- `onDrag: (e, value) => void` - An event, which fires about every 500ms + when you drag the input up and down, on release and on manual editing. + +### `Popper` + +Popper lets you position elements so that they don't go out of the bounds of the window. See [popper.js](https://popper.js.org/) for more information. + +**Props:** + +- `popperContent: InfernoNode` - The content that will be put inside the popper. +- `options?: { ... }` - An object of options to pass to `createPopper`. See [https://popper.js.org/docs/v2/constructors/#options], but the one you want most is `placement`. Valid placements are "bottom", "top", "left", and "right". You can affix "-start" and "-end" to achieve something like top left or top right respectively. You can also use "auto" (with an optional "-start" or "-end"), where a best fit will be chosen. +- `additionalStyles: { ... }` - A map of CSS styles to add to the element that will contain the popper. + +### `LabeledControls` + +LabeledControls is a horizontal grid, that is designed to hold various +controls, like [Knobs](#knob) or small [Buttons](#button). Every item in +this grid is labeled at the bottom. + +**Props:** + +- See inherited props: [Box](#box) +- `children: LabeledControls.Item` - Items to render. + +### `LabeledControls.Item` + +**Props:** + +- See inherited props: [Box](#box) +- `label: string` - Item label. + +### `LabeledList` + +LabeledList is a continuous, vertical list of text and other content, where +every item is labeled. It works just like a two column table, where first +column is labels, and second column is content. + +```jsx + + Content + +``` + +If you want to have a button on the right side of an item (for example, +to perform some sort of action), there is a way to do that: + +```jsx + + Click me!}> + Content + + +``` + +**Props:** + +- `children: LabeledList.Item` - Items to render. + +### `LabeledList.Item` + +**Props:** + +- `label: string` - Item label. +- `color: string` - Sets the color of the text. +- `buttons: any` - Buttons to render aside the content. +- `children: any` - Content of this labeled item. + +### `LabeledList.Divider` + +Adds some empty space between LabeledList items. + +Example: + +```jsx + + Content + + +``` + +**Props:** + +- `size: number` - Size of the divider. + +### `Modal` + +A modal window. Uses a [Dimmer](#dimmer) under the hood, and dynamically +adjusts its own size to fit the content you're trying to display. + +Must be a direct child of a layout component (e.g. [Window](#window)). + +**Props:** + +- See inherited props: [Box](#box) + +### `NoticeBox` + +A notice box, which warns you about something very important. + +**Props:** + +- See inherited props: [Box](#box) +- `info: boolean` - Info box +- `success: boolean` - Success box +- `warning: bolean` - Warning box +- `danger: boolean` - Danger box + +### `NumberInput` + +A fancy, interactive number input, which you can either drag up and down +to fine tune the value, or single click it to manually type a number. + +**Props:** + +- `animated: boolean` - Animates the value if it was changed externally. +- `fluid: boolean` - Fill all available horizontal space. +- `value: number` - Value itself. +- `unit: string` - Unit to display to the right of value. +- `minValue: number` - Lowest possible value. +- `maxValue: number` - Highest possible value. +- `step: number` (default: 1) - Adjust value by this amount when + dragging the input. +- `stepPixelSize: number` (default: 1) - Screen distance mouse needs + to travel to adjust value by one `step`. +- `width: string|number` - Width of the element, in `Box` units or pixels. +- `height: string|numer` - Height of the element, in `Box` units or pixels. +- `lineHeight: string|number` - lineHeight of the element, in `Box` units or pixels. +- `fontSize: string|number` - fontSize of the element, in `Box` units or pixels. +- `format: value => value` - Format value using this function before + displaying it. +- `suppressFlicker: number` - A number in milliseconds, for which the input + will hold off from updating while events propagate through the backend. + Default is about 250ms, increase it if you still see flickering. +- `onChange: (e, value) => void` - An event, which fires when you release + the input, or successfully enter a number. +- `onDrag: (e, value) => void` - An event, which fires about every 500ms + when you drag the input up and down, on release and on manual editing. + +### `ProgressBar` + +Progress indicators inform users about the status of ongoing processes. + +```jsx + +``` + +Usage of `ranges` prop: + +```jsx + +``` + +**Props:** + +- `value: number` - Current progress as a floating point number between + `minValue` (default: 0) and `maxValue` (default: 1). Determines the + percentage and how filled the bar is. +- `minValue: number` - Lowest possible value. +- `maxValue: number` - Highest possible value. +- `ranges: { color: [from, to] }` - Applies a `color` to the progress bar + based on whether the value lands in the range between `from` and `to`. +- `color: string` - Color of the progress bar. +- `children: any` - Content to render inside the progress bar. + +### `RoundGauge` + +The RoundGauge component provides a visual representation of a single metric, as well as being capable of showing informational or cautionary boundaries related to that metric. + +```jsx + +``` + +The alert on the gauge is optional, and will only be shown if the `alertAfter` prop is defined. When defined, the alert will begin to flash the respective color upon which the needle currently rests, as defined in the `ranges` prop. + +**Props:** + +- See inherited props: [Box](#box) +- `value: number` - The current value of the metric. +- `minValue: number` (default: 0) - The lower bound of the guage. +- `maxValue: number` (default: 1) - The upper bound of the guage. +- `ranges: { color: [from, to] }` (default: `{ "good": [0, 1] }`) - Provide regions of the guage to color between two specified values of the metric. +- `alertAfter: number` (optional) - When provided, will cause an alert symbol on the gauge to begin flashing in the color upon which the needle currently rest, as defined in `ranges`. +- `format: function(value) => string` (optional) - When provided, will be used to format the value of the metric for display. +- `size: number` (default: 1) - When provided scales the gauge. + +### `Section` + +Section is a surface that displays content and actions on a single topic. + +They should be easy to scan for relevant and actionable information. +Elements, like text and images, should be placed in them in a way that +clearly indicates hierarchy. + +Section can also be titled to clearly define its purpose. + +```jsx +
    Here you can order supply crates.
    +``` + +If you want to have a button on the right side of an section title +(for example, to perform some sort of action), there is a way to do that: + +```jsx +
    Send shuttle}> + Here you can order supply crates. +
    +``` + +- See inherited props: [Box](#box) +- `title: string` - Title of the section. +- `level: number` - Section level in hierarchy. Default is 1, higher number + means deeper level of nesting. Must be an integer number. +- `buttons: any` - Buttons to render aside the section title. +- `fill: boolean` - If true, fills all available vertical space. +- `fitted: boolean` - If true, removes all section padding. +- `scrollable: boolean` - Shows or hides the scrollbar. +- `children: any` - Content of this section. + +### `Slider` + +A horizontal, [ProgressBar](#progressbar)-like control, which allows dialing +in precise values by dragging it left and right. + +Single click opens an input box to manually type in a number. + +**Props:** + +- See inherited props: [Box](#box) +- `animated: boolean` - Animates the value if it was changed externally. +- `color: string` - Color of the slider. +- `value: number` - Value itself, controls the position of the cursor. +- `unit: string` - Unit to display to the right of value. +- `minValue: number` - Lowest possible value. +- `maxValue: number` - Highest possible value. +- `fillValue: number` - If set, this value will be used to set the fill + percentage of the progress bar filler independently of the main value. +- `ranges: { color: [from, to] }` - Applies a `color` to the slider + based on whether the value lands in the range between `from` and `to`. + See an example of this prop in [ProgressBar](#progressbar). +- `step: number` (default: 1) - Adjust value by this amount when + dragging the input. +- `stepPixelSize: number` (default: 1) - Screen distance mouse needs + to travel to adjust value by one `step`. +- `format: value => value` - Format value using this function before + displaying it. +- `suppressFlicker: number` - A number in milliseconds, for which the input + will hold off from updating while events propagate through the backend. + Default is about 250ms, increase it if you still see flickering. +- `onChange: (e, value) => void` - An event, which fires when you release + the input, or successfully enter a number. +- `onDrag: (e, value) => void` - An event, which fires about every 500ms + when you drag the input up and down, on release and on manual editing. + +### `Stack` + +A higher-level component, that is based on [Flex](#flex). The main difference +from `Flex`, is that this component automatically adds spacing between +all stack items, reducing the boilerplate that you have to write! + +Consists of two elements: `` and ``. + +Stacks can be vertical by adding a `vertical` property. + +**Example:** + +```jsx + + Button description + + + + +``` + +**Example of a high-level window layout:** + +Stacks can be used for high level window layout. +Make sure to use the `fill` property. + +```jsx + + + + +
    Sidebar
    +
    + + + +
    + Main content +
    +
    + +
    Bottom pane
    +
    +
    +
    +
    +
    +
    +``` + +**Props:** + +- See inherited props: [Flex](#flex) +- `fill: boolean` - If set, stack will fill all available height. +- `vertical: boolean` - If set, stack will work in vertical mode. + +### `Stack.Item` + +**Props:** + +- See inherited props: [Flex.Item](#flexitem) + +### `Table` + +A straight forward mapping to a standard html table, which is slightly +simplified (does not need a `` tag) and with sane default styles +(e.g. table width is 100% by default). + +Example: + +```jsx + + + Hello world! + + Label + + +
    +``` + +**Props:** + +- See inherited props: [Box](#box) +- `collapsing: boolean` - Collapses table to the smallest possible size. + +### `Table.Row` + +A straight forward mapping to `` element. + +**Props:** + +- See inherited props: [Box](#box) + +### `Table.Cell` + +A straight forward mapping to `` element. + +**Props:** + +- See inherited props: [Box](#box) +- `collapsing: boolean` - Collapses table cell to the smallest possible size, + and stops any text inside from wrapping. + +### `Tabs` + +Tabs make it easy to explore and switch between different views. + +Here is an example of how you would construct a simple tabbed view: + +```jsx + + setTabIndex(1)}> + Tab one + + setTabIndex(2)}> + Tab two + + + + Tab selected: {tabIndex} + +``` + +Notice that tabs do not contain state. It is your job to track the selected +tab, handle clicks and place tab content where you need it. In return, you get +a lot of flexibility in regards to how you can layout your tabs. + +Tabs also support a vertical configuration. This is usually paired with a +[Flex](#flex) component to render tab content to the right. + +```jsx + + + ... + + + Tab content. + + +``` + +**Props:** + +- See inherited props: [Box](#box) +- `vertical: boolean` - Use a vertical configuration, where tabs will be + stacked vertically. +- `children: Tab[]` - This component only accepts tabs as its children. + +### `Tabs.Tab` + +An individual tab element. Tabs function like buttons, so they inherit +a lot of `Button` props. + +**Props:** + +- See inherited props: [Button](#button) +- `altSelection` - Whether the tab buttons select via standard select (color + change) or by adding a white indicator to the selected tab. + Intended for usage on interfaces where tab color has relevance. +- `icon: string` - Tab icon. +- `children: any` - Tab text. +- `onClick: function` - Called when element is clicked. + +### `Tooltip` + +A boxy tooltip from tgui 1. It is very hacky in its current state, and +requires setting `position: relative` on the container. + +Please note, that [Button](#button) component has a `tooltip` prop, and +it is recommended to use that prop instead. + +Usage: + +```jsx + + Sample text. + +``` + +**Props:** + +- `position?: string` - Tooltip position. See [`Popper`](#Popper) for valid options. Defaults to "auto". +- `content: string` - Content of the tooltip. Must be a plain string. + Fragments or other elements are **not** supported. + +## `tgui/layouts` + +### `Window` + +A root-level component, which draws the window chrome, titlebar, resize +handlers, and controls the UI theme. All tgui interfaces must implement +it in one way or another. + +Example: + +```jsx + + Hello, world! + +``` + +**Props:** + +- See inherited props: [Box](#box) +- `className: string` - Applies a CSS class to the element. +- `theme: string` - A name of the theme. + - For a list of themes, see `packages/tgui/styles/themes`. +- `title: string` - Window title. +- `width: number` - Window width. +- `height: number` - Window height. +- `noClose: boolean` - Controls the ability to close the window. +- `children: any` - Child elements, which are rendered directly inside the + window. If you use a [Dimmer](#dimmer) or [Modal](#modal) in your UI, + they should be put as direct childs of a Window, otherwise you should be + putting your content into [Window.Content](#windowcontent). + +### `Window.Content` + +Canonical window content, which is usually the main target of window focus. +Can be scrollable. + +**Props:** + +- See inherited props: [Box](#box) +- `className: string` - Applies a CSS class to the element. +- `fitted: boolean` - If true, removes all padding. +- `scrollable: boolean` - Shows or hides the scrollbar. +- `children: any` - Main content of your window. diff --git a/tgui/docs/migration-to-v4-from-v3.md b/tgui/docs/migration-to-v4-from-v3.md new file mode 100644 index 0000000000000..6f047a6cc7ef8 --- /dev/null +++ b/tgui/docs/migration-to-v4-from-v3.md @@ -0,0 +1,91 @@ +# tgui Migration Guide to v4 from v3 + +## The Easy Part + +- Copy and replace the following files in bulk: + - `code/__DEFINES/tgui.dm` + - `code/controllers/subsystem/tgui.dm` + - `code/modules/tgui/**` + - `tgui/**` + - Except: `tgui/packages/tgui/interfaces` + - Manually resolve conflicts for files that were touched outside the + `interfaces` folder. +- Copy the updated `log_tgui` proc from: + - `code/__HELPERS/_logging.dm` + +If you have a dual nano/tgui setup, then make sure to rename all ui procs +on `/datum`, such as `ui_interact` to `tgui_interact`, to avoid namespace +clashing. Usual stuff. + +## Update `ui_interact` proc signatures + +First of all, tgui states need to move from `ui_interact` to `ui_state`. + +One way of doing it, is to just cherry pick those procs from upstream. + +If you want to search and replace manually, search for `state = GLOB`, and +extract those things into `ui_state` procs like so: + +```dm +.../ui_state(mob/user) + return GLOB.default_state +``` + +Then reduce `ui_interact` until you finish with something like this: + +```dm +.../ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "FooBar", "Foo Bar UI", 600, 400) + ui.open() +``` + +## Update asset delivery code + +Remove all asset code that injects stylesheets by modifying tgui's `basehtml`. +You no longer need to do that. + +Find all occurences of `asset.send(user)` in `ui_interact`, and refactor those +snippets to the following proc: + +```dm +.../ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/foobar), + ) +``` + +## Check `ui_act` for new bugs + +Code behind `ui_act` was recently refactored to use JSON-encoded payloads +instead of just strings. Since it can now carry numbers and other complex +types, you should check that the code is type agnostic and does not break +due to an assumption that every parameter is a string. + +One of such offenders is the personal crafting interface, where it needlessly +compares parameters to `""` and `"0"`. You can now replace this code with +simple assignments, because an empty category will now be properly `null` +instead of an empty string. + +## Backend data changes + +Interfaces that relied on `config.window.id`, must now use +`window.__windowId__`, which is a global constant unique for the page +the script is running on (so you can be sure it never changes). + +In case of `ByondUi`, this parameter can be completely omitted, because +parent will always default to the current window id. + +Affected interfaces: + +- `CameraConsole` +- Any interface that uses the `ByondUi` component + +--- + +That's all folks! + +There is a lot of stuff that was refactored under the hood, but normal UI +stuff wouldn't and shouldn't touch it, so you should be good with just +going through the checklist above. diff --git a/tgui/docs/tutorial-and-examples.md b/tgui/docs/tutorial-and-examples.md new file mode 100644 index 0000000000000..d20f4f5bb63d9 --- /dev/null +++ b/tgui/docs/tutorial-and-examples.md @@ -0,0 +1,329 @@ +# Tutorial and Examples + +## Main concepts + +Basic tgui backend code consists of the following vars and procs: + +``` +ui_interact(mob/user, datum/tgui/ui) +ui_data(mob/user) +ui_act(action, params) +ui_state() +``` + +- `src_object` - The atom, which UI corresponds to in the game world. +- `ui_interact` - The proc where you will handle a request to open an + interface. Typically, you would update an existing UI (if it exists), + or set up a new instance of UI by calling the `SStgui` subsystem. +- `ui_data` - In this proc you munges whatever complex data your `src_object` + has into an associative list, which will then be sent to UI as a JSON string. +- `ui_act` - This proc receives user actions and reacts to them by changing + the state of the game. +- `ui_state` - This proc dictates under what conditions a UI may be interacted + with. This may be the standard checks that check if you are in range and + conscious, or more. + +Once backend is complete, you create an new interface component on the +frontend, which will receive this JSON data and render it on screen. + +States are easy to write and extend, and what make tgui interactions so +powerful. Because states can be overridden from other procs, you can build +powerful interactions for embedded objects or remote access. + +## Using It + +### Backend + +Let's start with a very basic hello world. + +```dm +/obj/machinery/my_machine/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MyMachine") + ui.open() +``` + +This is the proc that defines our interface. There's a bit going on here, so +let's break it down. First, we override the ui_interact proc on our object. This +will be called by `interact` for you, which is in turn called by `attack_hand` +(or `attack_self` for items). `ui_interact` is also called to update a UI (hence +the `try_update_ui`), so we accept an existing UI to update. + +Inside the `if(!ui)` block (which means we are creating a new UI), we choose our +template, title, and size; we can also set various options like `style` (for +themes), or autoupdate. These options will be elaborated on later (as will +`ui_state`s). + +After `ui_interact`, we need to define `ui_data`. This just returns a list of +data for our object to use. Let's imagine our object has a few vars: + +```dm +/obj/machinery/my_machine/ui_data(mob/user) + var/list/data = list() + data["health"] = health + data["color"] = color + + return data +``` + +The `ui_data` proc is what people often find the hardest about tgui, but its +really quite simple! You just need to represent your object as numbers, strings, +and lists, instead of atoms and datums. + +Finally, the `ui_act` proc is called by the interface whenever the user used an +input. The input's `action` and `params` are passed to the proc. + +```dm +/obj/machinery/my_machine/ui_act(action, params) + if(..()) + return + if(action == "change_color") + var/new_color = params["color"] + if(!(color in allowed_coors)) + return FALSE + color = new_color + . = TRUE + update_icon() +``` + +The `..()` (parent call) is very important here, as it is how we check that the +user is allowed to use this interface (to avoid so-called href exploits). It is +also very important to clamp and sanitize all input here. Always assume the user +is attempting to exploit the game. + +Also note the use of `. = TRUE` (or `FALSE`), which is used to notify the UI +that this input caused an update. This is especially important for UIs that do +not auto-update, as otherwise the user will never see their change. + +### Frontend + +Finally, let's make a React Component for your interface. This is also +a source of confusion for new developers. If you got some basic javascript +and HTML knowledge, that should ease the learning process, although we +recommend getting yourself introduced to +[React and JSX](https://reactjs.org/docs/introducing-jsx.html). + +A React component is not a regular HTML template. A component is a +javascript function, which accepts a `props` object (that contains +properties passed to a component) and a `context` object (which is +necessary to access UI data) as arguments, and outputs an HTML-like +structure. + +So let's create our first React Component. Create a file with a name +`SampleInterface.js` (or any other name you want), and copy this code +snippet (make sure component name matches the file name): + +```jsx +import { useBackend } from '../backend'; +import { Button, LabeledList, Section } from '../components'; +import { Window } from '../layouts'; + +export const SampleInterface = (props, context) => { + const { act, data } = useBackend(context); + // Extract `health` and `color` variables from the `data` object. + const { health, color } = data; + return ( + + +
    + + {health} + {color} + +
    +
    +
    + ); +}; +``` + +Here are the key variables you get from a `useBackend(context)` function: + +- `config` is part of core tgui. It contains meta-information about the + interface and who uses it, BYOND refs to various objects, and so forth. + You are rarely going to use it, but sometimes it can be used to your + advantage when doing complex UIs. +- `data` is the data returned from `ui_data` and `ui_static_data` procs in + your DM code. Pretty straight forward. + - Note, that javascript doesn't have associative arrays, so when you + return an associative list from DM, it will be available in `data` as a + javascript object instead of an array. You can use it normally + like so: `object.key`, so it's not a problem if it's representing a + data structure, but common `Array` methods, such as `array.map(item => ...)`, + are not available on it. Always prefer returning clean arrays from your + code, since arrays are easier to work with in javascript! +- `act(name, params)` is a function, which you can call to dispatch an action + to your DM code. It will be processed in `ui_act` proc. Action name will be + available in `params["action"]`, mixed together with the rest of parameters + you have passed in `params` object. + +**Let's talk about the syntax.** + +The syntax you're seeing here is called JSX - a very simple extension of the +core javascript language. It's basically a pre-processor, that takes +expressions that look like html, and turns them into function calls. + +Take a look at this example: + +```jsx +
    You are in {status} condition!
    +``` + +After compiling the code above, this is what it becomes: + +```js +createElement( + 'div', + { className: 'color-' + status }, + 'You are in ', + status, + ' condition!' +); +``` + +It is very important to remember, that JSX is just a javascript expression +made out of `createElement` function calls. Naturally, this allows doing +all sorts of stuff on these expressions, just like you would with anything +else in javascript. + +Take a look at these examples: + +**Render an element inside of another element if `showProgress` is true.** + +This example uses the `&&` operator (the logical AND). It returns +the first operand if it evaluates to `false`, and returns the second operand +if it evaluates to `true`. + +If `showProgress` is `true`, the whole expression evaluates +to a `` element. If `showProgress` is `false`, the whole +expression evaluates to `false`, and `false` is not rendered by React. + +```jsx +{showProgress && } +``` + +You can also use the `||` operator (the logical OR), which works the same way, +except it will return the second operand on `false` instead of `true`. + +**Loop over the array to map every item to a corresponding React element.** + +`Array.map()` is a method, that calls a function on every item in the array, +and builds a new array based on what was returned by that function. + +```jsx + + {items.map((item) => ( + + {item.content} + + ))} + +``` + +If you need more examples of what you can do with React, see the +[interface conversion guide](docs/converting-old-tgui-interfaces.md). + +#### Splitting UIs into smaller, modular components + +You interface will eventually get really, really big. The easiest thing +you can do in this situation, is divide and conquer. Grab a chunk of your +JSX code, and wrap it into a second, smaller React component: + +```jsx +import { useBackend } from '../backend'; +import { Button, LabeledList, Section } from '../components'; +import { Window } from '../layouts'; + +export const SampleInterface = (props, context) => { + return ( + + + + + + ); +}; + +const HealthStatus = (props, context) => { + const { act, data } = useBackend(context); + const { user } = props; + const { health, color } = data; + return ( +
    + + {health} + {color} + +
    + ); +}; +``` + +## Copypasta + +We all do it, even the best of us. If you just want to make a tgui **fast**, +here's what you need (note that you'll probably be forced to clean your shit up +upon code review): + +```dm +/obj/copypasta/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "copypasta") + ui.open() + +/obj/copypasta/ui_data(mob/user) + var/list/data = list() + data["var"] = var + return data + +/obj/copypasta/ui_act(action, params) + if(..()) + return + switch(action) + if("copypasta") + var/newvar = params["var"] + // A demo of proper input sanitation. + var = CLAMP(newvar, min_val, max_val) + . = TRUE + update_icon() // Not applicable to all objects. +``` + +And the template: + +```jsx +import { useBackend } from '../backend'; +import { Button, LabeledList, Section } from '../components'; +import { Window } from '../layouts'; + +export const SampleInterface = (props, context) => { + const { act, data } = useBackend(context); + // Extract `health` and `color` variables from the `data` object. + const { health, color } = data; + return ( + + +
    + + {health} + {color} + +
    +
    +
    + ); +}; +``` diff --git a/tgui/docs/writing-tests.md b/tgui/docs/writing-tests.md new file mode 100644 index 0000000000000..99cb39e158a9d --- /dev/null +++ b/tgui/docs/writing-tests.md @@ -0,0 +1,23 @@ +## Jest + +You can now write and run unit tests in tgui. + +It's quite simple: create a file ending in `.test.ts` or `.spec.ts` (usually with the same filename as the file you're testing), and create a test case: + +```js +test('something', () => { + expect('a').toBe('a'); +}); +``` + +To run the tests, type the following into the terminal: + +``` +bin/tgui --test +``` + +There is an example test in `packages/common/react.spec.ts`. + +You can read more about Jest here: https://jestjs.io/docs/en/getting-started + +Note, that there is still no real solution to test UIs for now, even though a lot of the support is here (jest + jsdom). That will come later. diff --git a/tgui/global.d.ts b/tgui/global.d.ts new file mode 100644 index 0000000000000..542788717ab64 --- /dev/null +++ b/tgui/global.d.ts @@ -0,0 +1,203 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +// Webpack asset modules. +// Should match extensions used in webpack config. +declare module '*.png' { + const content: string; + export default content; +} + +declare module '*.jpg' { + const content: string; + export default content; +} + +declare module '*.svg' { + const content: string; + export default content; +} + +namespace JSX { + interface IntrinsicElements { + marquee: any; + blink: any; + } +} + +type TguiMessage = { + type: string; + payload?: any; + [key: string]: any; +}; + +type ByondType = { + /** + * ID of the Byond window this script is running on. + * Can be used as a parameter to winget/winset. + */ + windowId: string; + + /** + * True if javascript is running in BYOND. + */ + IS_BYOND: boolean; + + /** + * Version of Trident engine of Internet Explorer. Null if N/A. + */ + TRIDENT: number | null; + + /** + * True if browser is IE8 or lower. + */ + IS_LTE_IE8: boolean; + + /** + * True if browser is IE9 or lower. + */ + IS_LTE_IE9: boolean; + + /** + * True if browser is IE10 or lower. + */ + IS_LTE_IE10: boolean; + + /** + * True if browser is IE11 or lower. + */ + IS_LTE_IE11: boolean; + + /** + * If `true`, unhandled errors and common mistakes result in a blue screen + * of death, which stops this window from handling incoming messages and + * closes the active instance of tgui datum if there was one. + * + * It can be defined in window.initialize() in DM, or changed in runtime + * here via this property to `true` or `false`. + * + * It is recommended that you keep this ON to detect hard to find bugs. + */ + strictMode: boolean; + + /** + * Makes a BYOND call. + * + * If path is empty, this will trigger a Topic call. + * You can reference a specific object by setting the "src" parameter. + * + * See: https://secure.byond.com/docs/ref/skinparams.html + */ + call(path: string, params: object): void; + + /** + * Makes an asynchronous BYOND call. Returns a promise. + */ + callAsync(path: string, params: object): Promise; + + /** + * Makes a Topic call. + * + * You can reference a specific object by setting the "src" parameter. + */ + topic(params: object): void; + + /** + * Runs a command or a verb. + */ + command(command: string): void; + + /** + * Retrieves all properties of the BYOND skin element. + * + * Returns a promise with a key-value object containing all properties. + */ + winget(id: string | null): Promise; + + /** + * Retrieves all properties of the BYOND skin element. + * + * Returns a promise with a key-value object containing all properties. + */ + winget(id: string | null, propName: '*'): Promise; + + /** + * Retrieves an exactly one property of the BYOND skin element, + * as defined in `propName`. + * + * Returns a promise with the value of that property. + */ + winget(id: string | null, propName: string): Promise; + + /** + * Retrieves multiple properties of the BYOND skin element, + * as defined in the `propNames` array. + * + * Returns a promise with a key-value object containing listed properties. + */ + winget(id: string | null, propNames: string[]): Promise; + + /** + * Assigns properties to BYOND skin elements in bulk. + */ + winset(props: object): void; + + /** + * Assigns properties to the BYOND skin element. + */ + winset(id: string | null, props: object): void; + + /** + * Sets a property on the BYOND skin element to a certain value. + */ + winset(id: string | null, propName: string, propValue: any): void; + + /** + * Parses BYOND JSON. + * + * Uses a special encoding to preserve `Infinity` and `NaN`. + */ + parseJson(text: string): any; + + /** + * Sends a message to `/datum/tgui_window` which hosts this window instance. + */ + sendMessage(type: string, payload?: any): void; + sendMessage(message: TguiMessage): void; + + /** + * Subscribe to incoming messages that were sent from `/datum/tgui_window`. + */ + subscribe(listener: (type: string, payload: any) => void): void; + + /** + * Subscribe to incoming messages *of some specific type* + * that were sent from `/datum/tgui_window`. + */ + subscribeTo(type: string, listener: (payload: any) => void): void; + + /** + * Loads a stylesheet into the document. + */ + loadCss(url: string): void; + + /** + * Loads a script into the document. + */ + loadJs(url: string): void; +}; + +/** + * Object that provides access to Byond Skin API and is available in + * any tgui application. + */ +const Byond: ByondType; + +interface Window { + Byond: ByondType; + __store__: Store; + __augmentStack__: (store: Store) => StackAugmentor; +} diff --git a/tgui/jest.config.js b/tgui/jest.config.js new file mode 100644 index 0000000000000..5802332817f14 --- /dev/null +++ b/tgui/jest.config.js @@ -0,0 +1,14 @@ +module.exports = { + roots: ['/packages'], + testMatch: [ + '/packages/**/__tests__/*.{js,ts,tsx}', + '/packages/**/*.{spec,test}.{js,ts,tsx}', + ], + testEnvironment: 'jsdom', + testRunner: require.resolve('jest-circus/runner'), + transform: { + '^.+\\.(js|cjs|ts|tsx)$': require.resolve('babel-jest'), + }, + moduleFileExtensions: ['js', 'cjs', 'ts', 'tsx', 'json'], + resetMocks: true, +}; diff --git a/tgui/package.json b/tgui/package.json new file mode 100644 index 0000000000000..05c53f7c55bef --- /dev/null +++ b/tgui/package.json @@ -0,0 +1,66 @@ +{ + "private": true, + "name": "tgui-workspace", + "version": "4.4.0", + "packageManager": "yarn@4.0.2", + "workspaces": [ + "packages/*" + ], + "scripts": { + "tgui:analyze": "webpack --analyze", + "tgui:bench": "webpack --env TGUI_BENCH=1 && node packages/tgui-bench/index.js", + "tgui:build": "BROWSERSLIST_IGNORE_OLD_DATA=true webpack", + "tgui:dev": "node --experimental-modules packages/tgui-dev-server/index.js", + "tgui:lint": "eslint packages --ext .js,.cjs,.ts,.tsx", + "tgui:prettier": "prettier --check .", + "tgui:test": "jest --watch", + "tgui:test-simple": "CI=true jest --color", + "tgui:test-ci": "CI=true jest --color --collect-coverage", + "tgui:tsc": "tsc" + }, + "dependencies": { + "@babel/core": "^7.23.3", + "@babel/eslint-parser": "^7.23.3", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-jscript": "^7.23.3", + "@babel/preset-env": "^7.23.3", + "@babel/preset-typescript": "^7.23.3", + "@swc/core": "^1.3.100", + "@swc/jest": "^0.2.29", + "@types/jest": "^29.5.11", + "@types/jsdom": "^21.1.6", + "@types/node": "^20.10.0", + "@types/webpack": "^5.28.5", + "@types/webpack-env": "^1.18.4", + "@typescript-eslint/parser": "^6.18.0", + "babel-jest": "^29.7.0", + "babel-loader": "^8.3.0", + "babel-plugin-inferno": "^6.7.1", + "babel-plugin-transform-remove-console": "^6.9.4", + "common": "workspace:*", + "css-loader": "^6.8.1", + "esbuild-loader": "^4.0.2", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "5.1.2", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-unused-imports": "^3.0.0", + "file-loader": "^6.2.0", + "jest": "^29.7.0", + "jest-circus": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jsdom": "^23.1.0", + "mini-css-extract-plugin": "^2.7.6", + "prettier": "3.1.1", + "sass": "^1.69.7", + "sass-loader": "^13.3.2", + "style-loader": "^3.3.3", + "swc-loader": "^0.2.3", + "terser-webpack-plugin": "^5.3.10", + "typescript": "^5.3.3", + "url-loader": "^4.1.1", + "webpack": "^5.89.0", + "webpack-bundle-analyzer": "^4.10.1", + "webpack-cli": "^5.1.4" + } +} diff --git a/tgui/packages/common/collections.spec.ts b/tgui/packages/common/collections.spec.ts new file mode 100644 index 0000000000000..ef35a95cb3ea9 --- /dev/null +++ b/tgui/packages/common/collections.spec.ts @@ -0,0 +1,20 @@ +import { range, zip } from './collections'; + +// Type assertions, these will lint if the types are wrong. +const _zip1: [string, number] = zip(['a'], [1])[0]; + +describe('range', () => { + test('range(0, 5)', () => { + expect(range(0, 5)).toEqual([0, 1, 2, 3, 4]); + }); +}); + +describe('zip', () => { + test("zip(['a', 'b', 'c'], [1, 2, 3, 4])", () => { + expect(zip(['a', 'b', 'c'], [1, 2, 3, 4])).toEqual([ + ['a', 1], + ['b', 2], + ['c', 3], + ]); + }); +}); diff --git a/tgui/packages/common/collections.ts b/tgui/packages/common/collections.ts new file mode 100644 index 0000000000000..1f0fb2d57958c --- /dev/null +++ b/tgui/packages/common/collections.ts @@ -0,0 +1,309 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +/** + * Converts a given collection to an array. + * + * - Arrays are returned unmodified; + * - If object was provided, keys will be discarded; + * - Everything else will result in an empty array. + * + * @returns {any[]} + */ +export const toArray = (collection) => { + if (Array.isArray(collection)) { + return collection; + } + if (typeof collection === 'object') { + const hasOwnProperty = Object.prototype.hasOwnProperty; + const result = []; + for (let i in collection) { + if (hasOwnProperty.call(collection, i)) { + result.push(collection[i]); + } + } + return result; + } + return []; +}; + +/** + * Converts a given object to an array, and appends a key to every + * object inside of that array. + * + * Example input (object): + * ``` + * { + * 'Foo': { info: 'Hello world!' }, + * 'Bar': { info: 'Hello world!' }, + * } + * ``` + * + * Example output (array): + * ``` + * [ + * { key: 'Foo', info: 'Hello world!' }, + * { key: 'Bar', info: 'Hello world!' }, + * ] + * ``` + * + * @template T + * @param {{ [key: string]: T }} obj Object, or in DM terms, an assoc array + * @param {string} keyProp Property, to which key will be assigned + * @returns {T[]} Array of keyed objects + */ +export const toKeyedArray = (obj, keyProp = 'key') => { + return map((item, key) => ({ + [keyProp]: key, + ...item, + }))(obj); +}; + +/** + * Iterates over elements of collection, returning an array of all elements + * iteratee returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * If collection is 'null' or 'undefined', it will be returned "as is" + * without emitting any errors (which can be useful in some cases). + * + * @returns {any[]} + */ +export const filter = (iterateeFn) => (collection) => { + if (collection === null || collection === undefined) { + return collection; + } + if (Array.isArray(collection)) { + const result = []; + for (let i = 0; i < collection.length; i++) { + const item = collection[i]; + if (iterateeFn(item, i, collection)) { + result.push(item); + } + } + return result; + } + throw new Error(`filter() can't iterate on type ${typeof collection}`); +}; + +/** + * Creates an array of values by running each element in collection + * thru an iteratee function. The iteratee is invoked with three + * arguments: (value, index|key, collection). + * + * If collection is 'null' or 'undefined', it will be returned "as is" + * without emitting any errors (which can be useful in some cases). + * + * @returns {any[]} + */ +export const map = (iterateeFn) => (collection) => { + if (collection === null || collection === undefined) { + return collection; + } + if (Array.isArray(collection)) { + const result = []; + for (let i = 0; i < collection.length; i++) { + result.push(iterateeFn(collection[i], i, collection)); + } + return result; + } + if (typeof collection === 'object') { + const hasOwnProperty = Object.prototype.hasOwnProperty; + const result = []; + for (let i in collection) { + if (hasOwnProperty.call(collection, i)) { + result.push(iterateeFn(collection[i], i, collection)); + } + } + return result; + } + throw new Error(`map() can't iterate on type ${typeof collection}`); +}; + +/** + * Given a collection, will run each element through an iteratee function. + * Will then filter out undefined values. + */ +export const filterMap = ( + collection: T[], + iterateeFn: (value: T) => U | undefined +): U[] => { + const finalCollection: U[] = []; + + for (const value of collection) { + const output = iterateeFn(value); + if (output !== undefined) { + finalCollection.push(output); + } + } + + return finalCollection; +}; + +const COMPARATOR = (objA, objB) => { + const criteriaA = objA.criteria; + const criteriaB = objB.criteria; + const length = criteriaA.length; + for (let i = 0; i < length; i++) { + const a = criteriaA[i]; + const b = criteriaB[i]; + if (a < b) { + return -1; + } + if (a > b) { + return 1; + } + } + return 0; +}; + +/** + * Creates an array of elements, sorted in ascending order by the results + * of running each element in a collection thru each iteratee. + * + * Iteratees are called with one argument (value). + * + * @returns {any[]} + */ +export const sortBy = + (...iterateeFns) => + (array) => { + if (!Array.isArray(array)) { + return array; + } + let length = array.length; + // Iterate over the array to collect criteria to sort it by + let mappedArray = []; + for (let i = 0; i < length; i++) { + const value = array[i]; + mappedArray.push({ + criteria: iterateeFns.map((fn) => fn(value)), + value, + }); + } + // Sort criteria using the base comparator + mappedArray.sort(COMPARATOR); + // Unwrap values + while (length--) { + mappedArray[length] = mappedArray[length].value; + } + return mappedArray; + }; + +export const sort = sortBy(); + +/** + * Returns a range of numbers from start to end, exclusively. + * For example, range(0, 5) will return [0, 1, 2, 3, 4]. + */ +export const range = (start: number, end: number): number[] => + new Array(end - start).fill(null).map((_, index) => index + start); + +/** + * A fast implementation of reduce. + */ +export const reduce = (reducerFn, initialValue) => (array) => { + const length = array.length; + let i; + let result; + if (initialValue === undefined) { + i = 1; + result = array[0]; + } else { + i = 0; + result = initialValue; + } + for (; i < length; i++) { + result = reducerFn(result, array[i], i, array); + } + return result; +}; + +/** + * Creates a duplicate-free version of an array, using SameValueZero for + * equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * It accepts iteratee which is invoked for each element in array to generate + * the criterion by which uniqueness is computed. The order of result values + * is determined by the order they occur in the array. The iteratee is + * invoked with one argument: value. + */ +/* eslint-disable indent */ +export const uniqBy = + (iterateeFn?: (value: T) => unknown) => + (array: T[]) => { + const { length } = array; + const result = []; + const seen = iterateeFn ? [] : result; + let index = -1; + outer: while (++index < length) { + let value: T | 0 = array[index]; + const computed = iterateeFn ? iterateeFn(value) : value; + value = value !== 0 ? value : 0; + if (computed === computed) { + let seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iterateeFn) { + seen.push(computed); + } + result.push(value); + } else if (!seen.includes(computed)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + }; +/* eslint-enable indent */ + +export const uniq = uniqBy(); + +type Zip = { + [I in keyof T]: T[I] extends (infer U)[] ? U : never; +}[]; + +/** + * Creates an array of grouped elements, the first of which contains + * the first elements of the given arrays, the second of which contains + * the second elements of the given arrays, and so on. + */ +export const zip = (...arrays: T): Zip => { + if (arrays.length === 0) { + return; + } + const numArrays = arrays.length; + const numValues = arrays[0].length; + const result = []; + for (let valueIndex = 0; valueIndex < numValues; valueIndex++) { + const entry = []; + for (let arrayIndex = 0; arrayIndex < numArrays; arrayIndex++) { + entry.push(arrays[arrayIndex][valueIndex]); + } + result.push(entry); + } + return result; +}; + +/** + * This method is like "zip" except that it accepts iteratee to + * specify how grouped values should be combined. The iteratee is + * invoked with the elements of each group. + * + * @returns {any[]} + */ +export const zipWith = + (iterateeFn) => + (...arrays) => { + return map((values) => iterateeFn(...values))(zip(...arrays)); + }; diff --git a/tgui/packages/common/color.js b/tgui/packages/common/color.js new file mode 100644 index 0000000000000..913f50747afbd --- /dev/null +++ b/tgui/packages/common/color.js @@ -0,0 +1,62 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +const EPSILON = 0.0001; + +export class Color { + constructor(r = 0, g = 0, b = 0, a = 1) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + + toString() { + return `rgba(${this.r | 0}, ${this.g | 0}, ${this.b | 0}, ${this.a | 0})`; + } +} + +/** + * Creates a color from the CSS hex color notation. + */ +Color.fromHex = (hex) => + new Color( + parseInt(hex.substr(1, 2), 16), + parseInt(hex.substr(3, 2), 16), + parseInt(hex.substr(5, 2), 16) + ); + +/** + * Linear interpolation of two colors. + */ +Color.lerp = (c1, c2, n) => + new Color( + (c2.r - c1.r) * n + c1.r, + (c2.g - c1.g) * n + c1.g, + (c2.b - c1.b) * n + c1.b, + (c2.a - c1.a) * n + c1.a + ); + +/** + * Loops up the color in the provided list of colors + * with linear interpolation. + */ +Color.lookup = (value, colors = []) => { + const len = colors.length; + if (len < 2) { + throw new Error('Needs at least two colors!'); + } + const scaled = value * (len - 1); + if (value < EPSILON) { + return colors[0]; + } + if (value >= 1 - EPSILON) { + return colors[len - 1]; + } + const ratio = scaled % 1; + const index = scaled | 0; + return Color.lerp(colors[index], colors[index + 1], ratio); +}; diff --git a/tgui/packages/common/events.js b/tgui/packages/common/events.js new file mode 100644 index 0000000000000..7eeff511aa566 --- /dev/null +++ b/tgui/packages/common/events.js @@ -0,0 +1,41 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +export class EventEmitter { + constructor() { + this.listeners = {}; + } + + on(name, listener) { + this.listeners[name] = this.listeners[name] || []; + this.listeners[name].push(listener); + } + + off(name, listener) { + const listeners = this.listeners[name]; + if (!listeners) { + throw new Error(`There is no listeners for "${name}"`); + } + this.listeners[name] = listeners.filter((existingListener) => { + return existingListener !== listener; + }); + } + + emit(name, ...params) { + const listeners = this.listeners[name]; + if (!listeners) { + return; + } + for (let i = 0, len = listeners.length; i < len; i += 1) { + const listener = listeners[i]; + listener(...params); + } + } + + clear() { + this.listeners = {}; + } +} diff --git a/tgui/packages/common/exhaustive.ts b/tgui/packages/common/exhaustive.ts new file mode 100644 index 0000000000000..bc41757515b08 --- /dev/null +++ b/tgui/packages/common/exhaustive.ts @@ -0,0 +1,19 @@ +/** + * Throws an error such that a non-exhaustive check will error at compile time + * when using TypeScript, rather than at runtime. + * + * For example: + * enum Color { Red, Green, Blue } + * switch (color) { + * case Color.Red: + * return "red"; + * case Color.Green: + * return "green"; + * default: + * // This will error at compile time that we forgot blue. + * exhaustiveCheck(color); + * } + */ +export const exhaustiveCheck = (input: never) => { + throw new Error(`Unhandled case: ${input}`); +}; diff --git a/tgui/packages/common/fp.js b/tgui/packages/common/fp.js new file mode 100644 index 0000000000000..990c7c53c510d --- /dev/null +++ b/tgui/packages/common/fp.js @@ -0,0 +1,51 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +/** + * Creates a function that returns the result of invoking the given + * functions, where each successive invocation is supplied the return + * value of the previous. + */ +export const flow = + (...funcs) => + (input, ...rest) => { + let output = input; + for (let func of funcs) { + // Recurse into the array of functions + if (Array.isArray(func)) { + output = flow(...func)(output, ...rest); + } else if (func) { + output = func(output, ...rest); + } + } + return output; + }; + +/** + * Composes single-argument functions from right to left. + * + * All functions might accept a context in form of additional arguments. + * If the resulting function is called with more than 1 argument, rest of + * the arguments are passed to all functions unchanged. + * + * @param {...Function} funcs The functions to compose + * @returns {Function} A function obtained by composing the argument functions + * from right to left. For example, compose(f, g, h) is identical to doing + * (input, ...rest) => f(g(h(input, ...rest), ...rest), ...rest) + */ +export const compose = (...funcs) => { + if (funcs.length === 0) { + return (arg) => arg; + } + if (funcs.length === 1) { + return funcs[0]; + } + return funcs.reduce( + (a, b) => + (value, ...rest) => + a(b(value, ...rest), ...rest) + ); +}; diff --git a/tgui/packages/common/keycodes.js b/tgui/packages/common/keycodes.js new file mode 100644 index 0000000000000..19cfb302da412 --- /dev/null +++ b/tgui/packages/common/keycodes.js @@ -0,0 +1,96 @@ +/** + * All possible browser keycodes, in one file. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +export const KEY_BACKSPACE = 8; +export const KEY_TAB = 9; +export const KEY_ENTER = 13; +export const KEY_SHIFT = 16; +export const KEY_CTRL = 17; +export const KEY_ALT = 18; +export const KEY_PAUSE = 19; +export const KEY_CAPSLOCK = 20; +export const KEY_ESCAPE = 27; +export const KEY_SPACE = 32; +export const KEY_PAGEUP = 33; +export const KEY_PAGEDOWN = 34; +export const KEY_END = 35; +export const KEY_HOME = 36; +export const KEY_LEFT = 37; +export const KEY_UP = 38; +export const KEY_RIGHT = 39; +export const KEY_DOWN = 40; +export const KEY_INSERT = 45; +export const KEY_DELETE = 46; +export const KEY_0 = 48; +export const KEY_1 = 49; +export const KEY_2 = 50; +export const KEY_3 = 51; +export const KEY_4 = 52; +export const KEY_5 = 53; +export const KEY_6 = 54; +export const KEY_7 = 55; +export const KEY_8 = 56; +export const KEY_9 = 57; +export const KEY_A = 65; +export const KEY_B = 66; +export const KEY_C = 67; +export const KEY_D = 68; +export const KEY_E = 69; +export const KEY_F = 70; +export const KEY_G = 71; +export const KEY_H = 72; +export const KEY_I = 73; +export const KEY_J = 74; +export const KEY_K = 75; +export const KEY_L = 76; +export const KEY_M = 77; +export const KEY_N = 78; +export const KEY_O = 79; +export const KEY_P = 80; +export const KEY_Q = 81; +export const KEY_R = 82; +export const KEY_S = 83; +export const KEY_T = 84; +export const KEY_U = 85; +export const KEY_V = 86; +export const KEY_W = 87; +export const KEY_X = 88; +export const KEY_Y = 89; +export const KEY_Z = 90; +export const KEY_NUMPAD_0 = 96; +export const KEY_NUMPAD_1 = 97; +export const KEY_NUMPAD_2 = 98; +export const KEY_NUMPAD_3 = 99; +export const KEY_NUMPAD_4 = 100; +export const KEY_NUMPAD_5 = 101; +export const KEY_NUMPAD_6 = 102; +export const KEY_NUMPAD_7 = 103; +export const KEY_NUMPAD_8 = 104; +export const KEY_NUMPAD_9 = 105; +export const KEY_F1 = 112; +export const KEY_F2 = 113; +export const KEY_F3 = 114; +export const KEY_F4 = 115; +export const KEY_F5 = 116; +export const KEY_F6 = 117; +export const KEY_F7 = 118; +export const KEY_F8 = 119; +export const KEY_F9 = 120; +export const KEY_F10 = 121; +export const KEY_F11 = 122; +export const KEY_F12 = 123; +export const KEY_SEMICOLON = 186; +export const KEY_EQUAL = 187; +export const KEY_COMMA = 188; +export const KEY_MINUS = 189; +export const KEY_PERIOD = 190; +export const KEY_SLASH = 191; +export const KEY_LEFT_BRACKET = 219; +export const KEY_BACKSLASH = 220; +export const KEY_RIGHT_BRACKET = 221; +export const KEY_QUOTE = 222; diff --git a/tgui/packages/common/math.js b/tgui/packages/common/math.js new file mode 100644 index 0000000000000..0efd846ae0fe2 --- /dev/null +++ b/tgui/packages/common/math.js @@ -0,0 +1,95 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +/** + * Limits a number to the range between 'min' and 'max'. + */ +export const clamp = (value, min, max) => { + return value < min ? min : value > max ? max : value; +}; + +/** + * Limits a number between 0 and 1. + */ +export const clamp01 = (value) => { + return value < 0 ? 0 : value > 1 ? 1 : value; +}; + +/** + * Scales a number to fit into the range between min and max. + */ +export const scale = (value, min, max) => { + return (value - min) / (max - min); +}; + +/** + * Robust number rounding. + * + * Adapted from Locutus, see: http://locutus.io/php/math/round/ + * + * @param {number} value + * @param {number} precision + * @return {number} + */ +export const round = (value, precision) => { + if (!value || isNaN(value)) { + return value; + } + // helper variables + let m, f, isHalf, sgn; + // making sure precision is integer + precision |= 0; + m = Math.pow(10, precision); + value *= m; + // sign of the number + sgn = (value > 0) | -(value < 0); + // isHalf = value % 1 === 0.5 * sgn; + isHalf = Math.abs(value % 1) >= 0.4999999999854481; + f = Math.floor(value); + if (isHalf) { + // rounds .5 away from zero + value = f + (sgn > 0); + } + return (isHalf ? value : Math.round(value)) / m; +}; + +/** + * Returns a string representing a number in fixed point notation. + */ +export const toFixed = (value, fractionDigits = 0) => { + return Number(value).toFixed(Math.max(fractionDigits, 0)); +}; + +/** + * Checks whether a value is within the provided range. + * + * Range is an array of two numbers, for example: [0, 15]. + */ +export const inRange = (value, range) => { + return range && value >= range[0] && value <= range[1]; +}; + +/** + * Walks over the object with ranges, comparing value against every range, + * and returns the key of the first matching range. + * + * Range is an array of two numbers, for example: [0, 15]. + */ +export const keyOfMatchingRange = (value, ranges) => { + for (let rangeName of Object.keys(ranges)) { + const range = ranges[rangeName]; + if (inRange(value, range)) { + return rangeName; + } + } +}; + +/** + * Converts a value in radians to degrees. + */ +export const rad2deg = (rad) => { + return rad * (180 / Math.PI); +}; diff --git a/tgui/packages/common/package.json b/tgui/packages/common/package.json new file mode 100644 index 0000000000000..c0e9b78c778f4 --- /dev/null +++ b/tgui/packages/common/package.json @@ -0,0 +1,5 @@ +{ + "private": true, + "name": "common", + "version": "4.4.0" +} diff --git a/tgui/packages/common/perf.js b/tgui/packages/common/perf.js new file mode 100644 index 0000000000000..c2d6cb27db15d --- /dev/null +++ b/tgui/packages/common/perf.js @@ -0,0 +1,65 @@ +/** + * Ghetto performance measurement tools. + * + * Uses NODE_ENV to remove itself from production builds. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +const FPS = 60; +const FRAME_DURATION = 1000 / FPS; + +// True if Performance API is supported +const supportsPerf = !!window.performance?.now; +// High precision markers +let hpMarkersByName = {}; +// Low precision markers +let lpMarkersByName = {}; + +/** + * Marks a certain spot in the code for later measurements. + */ +const mark = (name, timestamp) => { + if (process.env.NODE_ENV !== 'production') { + if (supportsPerf && !timestamp) { + hpMarkersByName[name] = performance.now(); + } + lpMarkersByName[name] = timestamp || Date.now(); + } +}; + +/** + * Calculates and returns the difference between two markers as a string. + * + * Use logger.log() to print the measurement. + */ +const measure = (markerNameA, markerNameB) => { + if (process.env.NODE_ENV !== 'production') { + let markerA = hpMarkersByName[markerNameA]; + let markerB = hpMarkersByName[markerNameB]; + if (!markerA || !markerB) { + markerA = lpMarkersByName[markerNameA]; + markerB = lpMarkersByName[markerNameB]; + } + const duration = Math.abs(markerB - markerA); + return formatDuration(duration); + } +}; + +const formatDuration = (duration) => { + const durationInFrames = duration / FRAME_DURATION; + return ( + duration.toFixed(duration < 10 ? 1 : 0) + + 'ms ' + + '(' + + durationInFrames.toFixed(2) + + ' frames)' + ); +}; + +export const perf = { + mark, + measure, +}; diff --git a/tgui/packages/common/react.spec.ts b/tgui/packages/common/react.spec.ts new file mode 100644 index 0000000000000..44102fdc97109 --- /dev/null +++ b/tgui/packages/common/react.spec.ts @@ -0,0 +1,20 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { classes } from './react'; + +describe('classes', () => { + test('empty', () => { + expect(classes([])).toBe(''); + }); + + test('result contains inputs', () => { + const output = classes(['foo', 'bar', false, true, 0, 1, 'baz']); + expect(output).toContain('foo'); + expect(output).toContain('bar'); + expect(output).toContain('baz'); + }); +}); diff --git a/tgui/packages/common/react.ts b/tgui/packages/common/react.ts new file mode 100644 index 0000000000000..6789bb4edc655 --- /dev/null +++ b/tgui/packages/common/react.ts @@ -0,0 +1,74 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +/** + * Helper for conditionally adding/removing classes in React + */ +export const classes = (classNames: (string | BooleanLike)[]) => { + let className = ''; + for (let i = 0; i < classNames.length; i++) { + const part = classNames[i]; + if (typeof part === 'string') { + className += part + ' '; + } + } + return className; +}; + +/** + * Normalizes children prop, so that it is always an array of VDom + * elements. + */ +export const normalizeChildren = (children: T | T[]) => { + if (Array.isArray(children)) { + return children.flat().filter((value) => value) as T[]; + } + if (typeof children === 'object') { + return [children]; + } + return []; +}; + +/** + * Shallowly checks if two objects are different. + * Credit: https://github.com/developit/preact-compat + */ +export const shallowDiffers = (a: object, b: object) => { + let i; + for (i in a) { + if (!(i in b)) { + return true; + } + } + for (i in b) { + if (a[i] !== b[i]) { + return true; + } + } + return false; +}; + +/** + * Default inferno hooks for pure components. + */ +export const pureComponentHooks = { + onComponentShouldUpdate: (lastProps, nextProps) => { + return shallowDiffers(lastProps, nextProps); + }, +}; + +/** + * A helper to determine whether the object is renderable by React. + */ +export const canRender = (value: unknown) => { + return value !== undefined && value !== null && typeof value !== 'boolean'; +}; + +/** + * A common case in tgui, when you pass a value conditionally, these are + * the types that can fall through the condition. + */ +export type BooleanLike = number | boolean | null | undefined; diff --git a/tgui/packages/common/redux.js b/tgui/packages/common/redux.js new file mode 100644 index 0000000000000..7d3b27afbbe8b --- /dev/null +++ b/tgui/packages/common/redux.js @@ -0,0 +1,152 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { compose } from './fp'; + +/** + * Creates a Redux store. + */ +export const createStore = (reducer, enhancer) => { + // Apply a store enhancer (applyMiddleware is one of them). + if (enhancer) { + return enhancer(createStore)(reducer); + } + + let currentState; + let listeners = []; + + const getState = () => currentState; + + const subscribe = (listener) => { + listeners.push(listener); + }; + + const dispatch = (action) => { + currentState = reducer(currentState, action); + for (let i = 0; i < listeners.length; i++) { + listeners[i](); + } + }; + + // This creates the initial store by causing each reducer to be called + // with an undefined state + dispatch({ + type: '@@INIT', + }); + + return { + dispatch, + subscribe, + getState, + }; +}; + +/** + * Creates a store enhancer which applies middleware to all dispatched + * actions. + */ +export const applyMiddleware = (...middlewares) => { + return (createStore) => + (reducer, ...args) => { + const store = createStore(reducer, ...args); + + let dispatch = () => { + throw new Error( + 'Dispatching while constructing your middleware is not allowed.' + ); + }; + + const storeApi = { + getState: store.getState, + dispatch: (action, ...args) => dispatch(action, ...args), + }; + + const chain = middlewares.map((middleware) => middleware(storeApi)); + dispatch = compose(...chain)(store.dispatch); + + return { + ...store, + dispatch, + }; + }; +}; + +/** + * Combines reducers by running them in their own object namespaces as + * defined in reducersObj paramter. + * + * Main difference from redux/combineReducers is that it preserves keys + * in the state that are not present in the reducers object. This function + * is also more flexible than the redux counterpart. + */ +export const combineReducers = (reducersObj) => { + const keys = Object.keys(reducersObj); + let hasChanged = false; + return (prevState = {}, action) => { + const nextState = { ...prevState }; + for (let key of keys) { + const reducer = reducersObj[key]; + const prevDomainState = prevState[key]; + const nextDomainState = reducer(prevDomainState, action); + if (prevDomainState !== nextDomainState) { + hasChanged = true; + nextState[key] = nextDomainState; + } + } + return hasChanged ? nextState : prevState; + }; +}; + +/** + * A utility function to create an action creator for the given action + * type string. The action creator accepts a single argument, which will + * be included in the action object as a field called payload. The action + * creator function will also have its toString() overriden so that it + * returns the action type, allowing it to be used in reducer logic that + * is looking for that action type. + * + * @param {string} type The action type to use for created actions. + * @param {any} prepare (optional) a method that takes any number of arguments + * and returns { payload } or { payload, meta }. If this is given, the + * resulting action creator will pass it's arguments to this method to + * calculate payload & meta. + * + * @public + */ +export const createAction = (type, prepare = null) => { + const actionCreator = (...args) => { + if (!prepare) { + return { type, payload: args[0] }; + } + const prepared = prepare(...args); + if (!prepared) { + throw new Error('prepare function did not return an object'); + } + const action = { type }; + if ('payload' in prepared) { + action.payload = prepared.payload; + } + if ('meta' in prepared) { + action.meta = prepared.meta; + } + return action; + }; + actionCreator.toString = () => '' + type; + actionCreator.type = type; + actionCreator.match = (action) => action.type === type; + return actionCreator; +}; + +// Implementation specific +// -------------------------------------------------------- + +export const useDispatch = (context) => { + return context.store.dispatch; +}; + +export const useSelector = (context, selector) => { + return selector(context.store.getState()); +}; diff --git a/tgui/packages/common/storage.js b/tgui/packages/common/storage.js new file mode 100644 index 0000000000000..7a08cbb2920b6 --- /dev/null +++ b/tgui/packages/common/storage.js @@ -0,0 +1,195 @@ +/** + * Browser-agnostic abstraction of key-value web storage. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +export const IMPL_MEMORY = 0; +export const IMPL_LOCAL_STORAGE = 1; +export const IMPL_INDEXED_DB = 2; + +const INDEXED_DB_VERSION = 1; +const INDEXED_DB_NAME = 'para-tgui'; +const INDEXED_DB_STORE_NAME = 'storage-v1'; + +const READ_ONLY = 'readonly'; +const READ_WRITE = 'readwrite'; + +const testGeneric = (testFn) => () => { + try { + return Boolean(testFn()); + } catch { + return false; + } +}; + +// Localstorage can sometimes throw an error, even if DOM storage is not +// disabled in IE11 settings. +// See: https://superuser.com/questions/1080011 +// prettier-ignore +const testLocalStorage = testGeneric(() => ( + window.localStorage && window.localStorage.getItem +)); + +// prettier-ignore +const testIndexedDb = testGeneric(() => ( + (window.indexedDB || window.msIndexedDB) + && (window.IDBTransaction || window.msIDBTransaction) +)); + +class MemoryBackend { + constructor() { + this.impl = IMPL_MEMORY; + this.store = {}; + } + + get(key) { + return this.store[key]; + } + + set(key, value) { + this.store[key] = value; + } + + remove(key) { + this.store[key] = undefined; + } + + clear() { + this.store = {}; + } +} + +class LocalStorageBackend { + constructor() { + this.impl = IMPL_LOCAL_STORAGE; + } + + get(key) { + const value = localStorage.getItem(key); + if (typeof value === 'string') { + return JSON.parse(value); + } + } + + set(key, value) { + localStorage.setItem(key, JSON.stringify(value)); + } + + remove(key) { + localStorage.removeItem(key); + } + + clear() { + localStorage.clear(); + } +} + +class IndexedDbBackend { + constructor() { + this.impl = IMPL_INDEXED_DB; + /** @type {Promise} */ + this.dbPromise = new Promise((resolve, reject) => { + const indexedDB = window.indexedDB || window.msIndexedDB; + const req = indexedDB.open(INDEXED_DB_NAME, INDEXED_DB_VERSION); + req.onupgradeneeded = () => { + try { + req.result.createObjectStore(INDEXED_DB_STORE_NAME); + } catch (err) { + reject(new Error('Failed to upgrade IDB: ' + req.error)); + } + }; + req.onsuccess = () => resolve(req.result); + req.onerror = () => { + reject(new Error('Failed to open IDB: ' + req.error)); + }; + }); + } + + getStore(mode) { + // prettier-ignore + return this.dbPromise.then((db) => db + .transaction(INDEXED_DB_STORE_NAME, mode) + .objectStore(INDEXED_DB_STORE_NAME)); + } + + async get(key) { + const store = await this.getStore(READ_ONLY); + return new Promise((resolve, reject) => { + const req = store.get(key); + req.onsuccess = () => resolve(req.result); + req.onerror = () => reject(req.error); + }); + } + + async set(key, value) { + // The reason we don't _save_ null is because IE 10 does + // not support saving the `null` type in IndexedDB. How + // ironic, given the bug below! + // See: https://github.com/mozilla/localForage/issues/161 + if (value === null) { + value = undefined; + } + // NOTE: We deliberately make this operation transactionless + const store = await this.getStore(READ_WRITE); + store.put(value, key); + } + + async remove(key) { + // NOTE: We deliberately make this operation transactionless + const store = await this.getStore(READ_WRITE); + store.delete(key); + } + + async clear() { + // NOTE: We deliberately make this operation transactionless + const store = await this.getStore(READ_WRITE); + store.clear(); + } +} + +/** + * Web Storage Proxy object, which selects the best backend available + * depending on the environment. + */ +class StorageProxy { + constructor() { + this.backendPromise = (async () => { + if (testIndexedDb()) { + try { + const backend = new IndexedDbBackend(); + await backend.dbPromise; + return backend; + } catch {} + } + if (testLocalStorage()) { + return new LocalStorageBackend(); + } + return new MemoryBackend(); + })(); + } + + async get(key) { + const backend = await this.backendPromise; + return backend.get(key); + } + + async set(key, value) { + const backend = await this.backendPromise; + return backend.set(key, value); + } + + async remove(key) { + const backend = await this.backendPromise; + return backend.remove(key); + } + + async clear() { + const backend = await this.backendPromise; + return backend.clear(); + } +} + +export const storage = new StorageProxy(); diff --git a/tgui/packages/common/string.babel-plugin.cjs b/tgui/packages/common/string.babel-plugin.cjs new file mode 100644 index 0000000000000..97ca67c6ea4ca --- /dev/null +++ b/tgui/packages/common/string.babel-plugin.cjs @@ -0,0 +1,73 @@ +/** + * This plugin saves overall about 10KB on the final bundle size, so it's + * sort of worth it. + * + * We are using a .cjs extension because: + * + * 1. Webpack CLI only supports CommonJS modules; + * 2. tgui-dev-server supports both, but we still need to signal NodeJS + * to import it as a CommonJS module, hence .cjs extension. + * + * We need to copy-paste the whole "multiline" function because we can't + * synchronously import an ES module from a CommonJS module. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +/** + * Removes excess whitespace and indentation from the string. + */ +const multiline = (str) => { + const lines = str.split('\n'); + // Determine base indentation + let minIndent; + for (let line of lines) { + for (let indent = 0; indent < line.length; indent++) { + const char = line[indent]; + if (char !== ' ') { + if (minIndent === undefined || indent < minIndent) { + minIndent = indent; + } + break; + } + } + } + if (!minIndent) { + minIndent = 0; + } + // Remove this base indentation and trim the resulting string + // from both ends. + return lines + .map((line) => line.substr(minIndent).trimRight()) + .join('\n') + .trim(); +}; + +const StringPlugin = (ref) => { + return { + visitor: { + TaggedTemplateExpression: (path) => { + if (path.node.tag.name === 'multiline') { + const { quasi } = path.node; + if (quasi.expressions.length > 0) { + throw new Error('Multiline tag does not support expressions!'); + } + if (quasi.quasis.length > 1) { + throw new Error('Quasis is longer than 1'); + } + const { value } = quasi.quasis[0]; + value.raw = multiline(value.raw); + value.cooked = multiline(value.cooked); + path.replaceWith(quasi); + } + }, + }, + }; +}; + +module.exports = { + __esModule: true, + default: StringPlugin, +}; diff --git a/tgui/packages/common/string.js b/tgui/packages/common/string.js new file mode 100644 index 0000000000000..cf43808370140 --- /dev/null +++ b/tgui/packages/common/string.js @@ -0,0 +1,213 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +/** + * Removes excess whitespace and indentation from the string. + */ +export const multiline = (str) => { + if (Array.isArray(str)) { + // Small stub to allow usage as a template tag + return multiline(str.join('')); + } + const lines = str.split('\n'); + // Determine base indentation + let minIndent; + for (let line of lines) { + for (let indent = 0; indent < line.length; indent++) { + const char = line[indent]; + if (char !== ' ') { + if (minIndent === undefined || indent < minIndent) { + minIndent = indent; + } + break; + } + } + } + if (!minIndent) { + minIndent = 0; + } + // Remove this base indentation and trim the resulting string + // from both ends. + return lines + .map((line) => line.substr(minIndent).trimRight()) + .join('\n') + .trim(); +}; + +/** + * Creates a glob pattern matcher. + * + * Matches strings with wildcards. + * + * Example: createGlobPattern('*@domain')('user@domain') === true + */ +export const createGlobPattern = (pattern) => { + const escapeString = (str) => str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'); + const regex = new RegExp( + '^' + pattern.split(/\*+/).map(escapeString).join('.*') + '$' + ); + return (str) => regex.test(str); +}; + +/** + * Creates a search terms matcher. + * + * Returns true if given string matches the search text. + * + * @template T + * @param {string} searchText + * @param {(obj: T) => string} stringifier + * @returns {(obj: T) => boolean} + */ +export const createSearch = (searchText, stringifier) => { + const preparedSearchText = searchText.toLowerCase().trim(); + return (obj) => { + if (!preparedSearchText) { + return true; + } + const str = stringifier ? stringifier(obj) : obj; + if (!str) { + return false; + } + return str.toLowerCase().includes(preparedSearchText); + }; +}; + +/** + * Capitalizes a word and lowercases the rest. + * @param {string} str + * @returns {string} capitalized string + * + * @example capitalize('heLLo') === 'Hello' + */ +export const capitalize = (str) => { + // Handle array + if (Array.isArray(str)) { + return str.map(capitalize); + } + // Handle string + return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); +}; + +/** + * Similar to capitalize, this takes a string and replaces all first letters + * of any words. + * + * @param {string} str + * @return {string} The string with the first letters capitalized. + * + * @example capitalizeAll('heLLo woRLd') === 'HeLLo WoRLd' + */ +export const capitalizeAll = (str) => { + return str.replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase()); +}; + +/** + * Capitalizes only the first letter of the str. + * + * @param {string} str + * @return {string} capitalized string + * + * @example capitalizeFirst('heLLo woRLd') === 'HeLLo woRLd' + */ +export const capitalizeFirst = (str) => { + return str.replace(/^\w/, (letter) => letter.toUpperCase()); +}; + +export const toTitleCase = (str) => { + // Handle array + if (Array.isArray(str)) { + return str.map(toTitleCase); + } + // Pass non-string + if (typeof str !== 'string') { + return str; + } + // Handle string + const WORDS_UPPER = ['Id', 'Tv']; + const WORDS_LOWER = [ + 'A', + 'An', + 'And', + 'As', + 'At', + 'But', + 'By', + 'For', + 'For', + 'From', + 'In', + 'Into', + 'Near', + 'Nor', + 'Of', + 'On', + 'Onto', + 'Or', + 'The', + 'To', + 'With', + ]; + let currentStr = str.replace(/([^\W_]+[^\s-]*) */g, (str) => { + return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase(); + }); + for (let word of WORDS_LOWER) { + const regex = new RegExp('\\s' + word + '\\s', 'g'); + currentStr = currentStr.replace(regex, (str) => str.toLowerCase()); + } + for (let word of WORDS_UPPER) { + const regex = new RegExp('\\b' + word + '\\b', 'g'); + currentStr = currentStr.replace(regex, (str) => str.toLowerCase()); + } + return currentStr; +}; + +/** + * Decodes HTML entities, and removes unnecessary HTML tags. + * + * @param {String} str Encoded HTML string + * @return {String} Decoded HTML string + */ +export const decodeHtmlEntities = (str) => { + if (!str) { + return str; + } + const translate_re = /&(nbsp|amp|quot|lt|gt|apos);/g; + const translate = { + nbsp: ' ', + amp: '&', + quot: '"', + lt: '<', + gt: '>', + apos: "'", + }; + return ( + str + // Newline tags + .replace(/
    /gi, '\n') + .replace(/<\/?[a-z0-9-_]+[^>]*>/gi, '') + // Basic entities + .replace(translate_re, (match, entity) => translate[entity]) + // Decimal entities + .replace(/&#?([0-9]+);/gi, (match, numStr) => { + const num = parseInt(numStr, 10); + return String.fromCharCode(num); + }) + // Hex entities + .replace(/&#x?([0-9a-f]+);/gi, (match, numStr) => { + const num = parseInt(numStr, 16); + return String.fromCharCode(num); + }) + ); +}; + +/** + * Converts an object into a query string, + */ +export const buildQueryString = (obj) => + Object.keys(obj) + .map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(obj[key])) + .join('&'); diff --git a/tgui/packages/common/timer.js b/tgui/packages/common/timer.js new file mode 100644 index 0000000000000..0b1c68199e9f0 --- /dev/null +++ b/tgui/packages/common/timer.js @@ -0,0 +1,37 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +/** + * Returns a function, that, as long as it continues to be invoked, will + * not be triggered. The function will be called after it stops being + * called for N milliseconds. If `immediate` is passed, trigger the + * function on the leading edge, instead of the trailing. + */ +export const debounce = (fn, time, immediate = false) => { + let timeout; + return (...args) => { + const later = () => { + timeout = null; + if (!immediate) { + fn(...args); + } + }; + const callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, time); + if (callNow) { + fn(...args); + } + }; +}; + +/** + * Suspends an asynchronous function for N milliseconds. + * + * @param {number} time + */ +export const sleep = (time) => + new Promise((resolve) => setTimeout(resolve, time)); diff --git a/tgui/packages/common/types.ts b/tgui/packages/common/types.ts new file mode 100644 index 0000000000000..e68aadbdb11c4 --- /dev/null +++ b/tgui/packages/common/types.ts @@ -0,0 +1,8 @@ +/** + * Returns the arguments of a function F as an array. + */ +export type ArgumentsOf = F extends ( + ...args: infer A +) => unknown + ? A + : never; diff --git a/tgui/packages/common/uuid.js b/tgui/packages/common/uuid.js new file mode 100644 index 0000000000000..f2eb4bb98f4ea --- /dev/null +++ b/tgui/packages/common/uuid.js @@ -0,0 +1,19 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +/** + * Creates a UUID v4 string + * + * @return {string} + */ +export const createUuid = () => { + let d = new Date().getTime(); + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { + const r = (d + Math.random() * 16) % 16 | 0; + d = Math.floor(d / 16); + return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16); + }); +}; diff --git a/tgui/packages/common/vector.js b/tgui/packages/common/vector.js new file mode 100644 index 0000000000000..b1f85f7429db8 --- /dev/null +++ b/tgui/packages/common/vector.js @@ -0,0 +1,48 @@ +/** + * N-dimensional vector manipulation functions. + * + * Vectors are plain number arrays, i.e. [x, y, z]. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { map, reduce, zipWith } from './collections'; + +const ADD = (a, b) => a + b; +const SUB = (a, b) => a - b; +const MUL = (a, b) => a * b; +const DIV = (a, b) => a / b; + +export const vecAdd = (...vecs) => { + return reduce((a, b) => zipWith(ADD)(a, b))(vecs); +}; + +export const vecSubtract = (...vecs) => { + return reduce((a, b) => zipWith(SUB)(a, b))(vecs); +}; + +export const vecMultiply = (...vecs) => { + return reduce((a, b) => zipWith(MUL)(a, b))(vecs); +}; + +export const vecDivide = (...vecs) => { + return reduce((a, b) => zipWith(DIV)(a, b))(vecs); +}; + +export const vecScale = (vec, n) => { + return map((x) => x * n)(vec); +}; + +export const vecInverse = (vec) => { + return map((x) => -x)(vec); +}; + +export const vecLength = (vec) => { + return Math.sqrt(reduce(ADD)(zipWith(MUL)(vec, vec))); +}; + +export const vecNormalize = (vec) => { + return vecDivide(vec, vecLength(vec)); +}; diff --git a/tgui/packages/tgfont/config.cjs b/tgui/packages/tgfont/config.cjs new file mode 100644 index 0000000000000..4f6b58f1061e5 --- /dev/null +++ b/tgui/packages/tgfont/config.cjs @@ -0,0 +1,14 @@ +/** + * @file + * @copyright 2021 AnturK https://github.com/AnturK + * @license MIT + */ + +module.exports = { + name: 'tgfont', + inputDir: './icons', + outputDir: './dist', + fontTypes: ['woff2', 'eot'], + assetTypes: ['css'], + prefix: 'tg', +}; diff --git a/tgui/packages/tgfont/icons/ATTRIBUTIONS.md b/tgui/packages/tgfont/icons/ATTRIBUTIONS.md new file mode 100644 index 0000000000000..0491b90e726e7 --- /dev/null +++ b/tgui/packages/tgfont/icons/ATTRIBUTIONS.md @@ -0,0 +1,8 @@ +bad-touch.svg contains: + +- hug by Phạm Thanh Lộc from the Noun Project +- Fight by Rudez Studio from the Noun Project + +prosthetic-leg.svg contains: + +- prosthetic leg by Gan Khoon Lay from the Noun Project diff --git a/tgui/packages/tgfont/icons/air-tank-slash.svg b/tgui/packages/tgfont/icons/air-tank-slash.svg new file mode 100644 index 0000000000000..37ffcb5b8809b --- /dev/null +++ b/tgui/packages/tgfont/icons/air-tank-slash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/air-tank.svg b/tgui/packages/tgfont/icons/air-tank.svg new file mode 100644 index 0000000000000..7d1e07747197b --- /dev/null +++ b/tgui/packages/tgfont/icons/air-tank.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/bad-touch.svg b/tgui/packages/tgfont/icons/bad-touch.svg new file mode 100644 index 0000000000000..795f4c2d840a8 --- /dev/null +++ b/tgui/packages/tgfont/icons/bad-touch.svg @@ -0,0 +1,46 @@ + +image/svg+xml + + + + + + + + + + + diff --git a/tgui/packages/tgfont/icons/image-minus.svg b/tgui/packages/tgfont/icons/image-minus.svg new file mode 100644 index 0000000000000..8c3231917ff9a --- /dev/null +++ b/tgui/packages/tgfont/icons/image-minus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/image-plus.svg b/tgui/packages/tgfont/icons/image-plus.svg new file mode 100644 index 0000000000000..1658509429e32 --- /dev/null +++ b/tgui/packages/tgfont/icons/image-plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/nanotrasen-logo.svg b/tgui/packages/tgfont/icons/nanotrasen-logo.svg new file mode 100644 index 0000000000000..b74a415d4d2b9 --- /dev/null +++ b/tgui/packages/tgfont/icons/nanotrasen-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/tgui/packages/tgfont/icons/non-binary.svg b/tgui/packages/tgfont/icons/non-binary.svg new file mode 100644 index 0000000000000..c708c26d98550 --- /dev/null +++ b/tgui/packages/tgfont/icons/non-binary.svg @@ -0,0 +1,44 @@ + +image/svg+xml + + + + + + + + + + + diff --git a/tgui/packages/tgfont/icons/prosthetic-full.svg b/tgui/packages/tgfont/icons/prosthetic-full.svg new file mode 100644 index 0000000000000..7d221244edccd --- /dev/null +++ b/tgui/packages/tgfont/icons/prosthetic-full.svg @@ -0,0 +1,27 @@ + +image/svg+xml + + diff --git a/tgui/packages/tgfont/icons/prosthetic-leg.svg b/tgui/packages/tgfont/icons/prosthetic-leg.svg new file mode 100644 index 0000000000000..f4e16dccfb65a --- /dev/null +++ b/tgui/packages/tgfont/icons/prosthetic-leg.svg @@ -0,0 +1,35 @@ + +image/svg+xml + + + + + + diff --git a/tgui/packages/tgfont/icons/sound-minus.svg b/tgui/packages/tgfont/icons/sound-minus.svg new file mode 100644 index 0000000000000..df51179d4b532 --- /dev/null +++ b/tgui/packages/tgfont/icons/sound-minus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/sound-plus.svg b/tgui/packages/tgfont/icons/sound-plus.svg new file mode 100644 index 0000000000000..c5f40d53b5604 --- /dev/null +++ b/tgui/packages/tgfont/icons/sound-plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/syndicate-logo.svg b/tgui/packages/tgfont/icons/syndicate-logo.svg new file mode 100644 index 0000000000000..423dd7c627548 --- /dev/null +++ b/tgui/packages/tgfont/icons/syndicate-logo.svg @@ -0,0 +1,13 @@ + + + + + + image/svg+xml + + + + + + + diff --git a/tgui/packages/tgfont/mkdist.cjs b/tgui/packages/tgfont/mkdist.cjs new file mode 100644 index 0000000000000..85634bd265d9c --- /dev/null +++ b/tgui/packages/tgfont/mkdist.cjs @@ -0,0 +1,13 @@ +/** + * @file + * @copyright 2021 AnturK https://github.com/AnturK + * @license MIT + */ + +// Change working directory to project root +process.chdir(__dirname); + +// Silently make a dist folder +try { + require('fs').mkdirSync('dist'); +} catch (err) {} diff --git a/tgui/packages/tgfont/package.json b/tgui/packages/tgfont/package.json new file mode 100644 index 0000000000000..56bb38bf68e87 --- /dev/null +++ b/tgui/packages/tgfont/package.json @@ -0,0 +1,11 @@ +{ + "private": true, + "name": "tgfont", + "version": "1.0.0", + "scripts": { + "tgfont:build": "node mkdist.cjs && fantasticon --config config.cjs" + }, + "dependencies": { + "fantasticon": "^1.2.3" + } +} diff --git a/tgui/packages/tgfont/static/tgfont.css b/tgui/packages/tgfont/static/tgfont.css new file mode 100644 index 0000000000000..e9dfb537e4257 --- /dev/null +++ b/tgui/packages/tgfont/static/tgfont.css @@ -0,0 +1,53 @@ +@font-face { + font-family: 'tgfont'; + src: + url('./tgfont.woff2?45c3c7acc69dd413375d77898d24e41e') format('woff2'), + url('./tgfont.eot?45c3c7acc69dd413375d77898d24e41e#iefix') + format('embedded-opentype'); +} + +i[class^='tg-']:before, +i[class*=' tg-']:before { + font-family: tgfont !important; + font-style: normal; + font-weight: normal !important; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.tg-air-tank-slash:before { + content: '\f101'; +} +.tg-air-tank:before { + content: '\f102'; +} +.tg-bad-touch:before { + content: '\f103'; +} +.tg-image-minus:before { + content: '\f104'; +} +.tg-image-plus:before { + content: '\f105'; +} +.tg-nanotrasen-logo:before { + content: '\f106'; +} +.tg-non-binary:before { + content: '\f107'; +} +.tg-prosthetic-leg:before { + content: '\f108'; +} +.tg-sound-minus:before { + content: '\f109'; +} +.tg-sound-plus:before { + content: '\f10a'; +} +.tg-syndicate-logo:before { + content: '\f10b'; +} diff --git a/tgui/packages/tgfont/static/tgfont.eot b/tgui/packages/tgfont/static/tgfont.eot new file mode 100644 index 0000000000000..ba307e067290f Binary files /dev/null and b/tgui/packages/tgfont/static/tgfont.eot differ diff --git a/tgui/packages/tgfont/static/tgfont.woff2 b/tgui/packages/tgfont/static/tgfont.woff2 new file mode 100644 index 0000000000000..3f54573899cfd Binary files /dev/null and b/tgui/packages/tgfont/static/tgfont.woff2 differ diff --git a/tgui/packages/tgui-bench/entrypoint.tsx b/tgui/packages/tgui-bench/entrypoint.tsx new file mode 100644 index 0000000000000..0493ded8e24ac --- /dev/null +++ b/tgui/packages/tgui-bench/entrypoint.tsx @@ -0,0 +1,74 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import '../tgui/styles/main.scss'; + +import { setupGlobalEvents } from '../tgui/events'; + +import Benchmark from './lib/benchmark'; + +const sendMessage = (obj: any) => { + const req = new XMLHttpRequest(); + req.open('POST', `/message`, false); + req.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); + req.timeout = 250; + req.send(JSON.stringify(obj)); +}; + +const setupApp = async () => { + // Delay setup + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', setupApp); + return; + } + + setupGlobalEvents({ + ignoreWindowFocus: true, + }); + + const requireTest = require.context('./tests', false, /\.test\./); + + for (const file of requireTest.keys()) { + sendMessage({ type: 'suite-start', file }); + try { + const tests = requireTest(file); + await new Promise((resolve) => { + const suite = new Benchmark.Suite(file, { + onCycle(e) { + sendMessage({ + type: 'suite-cycle', + message: String(e.target), + }); + }, + onComplete() { + // This message is somewhat useless, but leaving it here in case + // someone has an idea how to show more useful data. + // sendMessage({ + // type: 'suite-complete', + // message: 'Fastest is ' + this.filter('fastest').map('name'), + // }); + resolve(); + }, + onError(e) { + sendMessage({ type: 'error', e }); + resolve(); + }, + }); + for (const [name, fn] of Object.entries(tests)) { + if (typeof fn === 'function') { + suite.add(name, fn); + } + } + suite.run(); + }); + } catch (error) { + sendMessage({ type: 'error', error }); + } + } + sendMessage({ type: 'finished' }); +}; + +setupApp(); diff --git a/tgui/packages/tgui-bench/index.js b/tgui/packages/tgui-bench/index.js new file mode 100644 index 0000000000000..b15f3ebf37ad5 --- /dev/null +++ b/tgui/packages/tgui-bench/index.js @@ -0,0 +1,93 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +const fs = require('fs'); +const path = require('path'); +const { exec } = require('child_process'); +const { fastify } = require('fastify'); + +process.chdir(__dirname); + +const sleep = (time) => new Promise((resolve) => setTimeout(resolve, time)); + +const IE_TIMEOUT_SECONDS = 60; + +const setup = async () => { + const server = fastify(); + + let hasResponded = false; + + let assets = ''; + assets += `\n`; + + const publicDir = path.resolve(__dirname, '../../public'); + const page = fs + .readFileSync(path.join(publicDir, 'tgui.html'), 'utf-8') + .replace('\n', assets); + + server.register(require('@fastify/static'), { + root: publicDir, + }); + + server.get('/', async (req, res) => { + return res.type('text/html').send(page); + }); + + server.post('/message', async (req, res) => { + if (!hasResponded) { + process.stdout.write('\n'); + hasResponded = true; + } + const { type, ...rest } = req.body; + if (type === 'suite-start') { + console.log(`=> Test '${rest.file}'`); + return res.send(); + } + if (type === 'suite-cycle') { + console.log(rest.message); + return res.send(); + } + if (type === 'suite-complete') { + console.log(rest.message); + return res.send(); + } + if (type === 'finished') { + await res.send(); + process.exit(0); + } + // Unhandled message + console.log(req.body); + return res.send(); + }); + + try { + await server.listen(3002, '0.0.0.0'); + } catch (err) { + console.error(err); + process.exit(1); + } + + if (process.platform === 'win32') { + exec(`start "" "iexplore" "http://127.0.0.1:3002"`); + } + + console.log('Waiting for Internet Explorer to respond.'); + for (let i = 0; i < IE_TIMEOUT_SECONDS; i++) { + await sleep(1000); + if (hasResponded) { + return; + } + process.stdout.write('.'); + } + process.stdout.write('\n'); + console.error('Did not receive a response, exiting.'); + process.exit(1); +}; + +setup(); diff --git a/tgui/packages/tgui-bench/lib/benchmark.d.ts b/tgui/packages/tgui-bench/lib/benchmark.d.ts new file mode 100644 index 0000000000000..7f3310005f77b --- /dev/null +++ b/tgui/packages/tgui-bench/lib/benchmark.d.ts @@ -0,0 +1,219 @@ +/* eslint-disable */ +// Type definitions for Benchmark v2.1.4 +// Project: https://benchmarkjs.com +// Definitions by: Asana +// Charlie Fish +// Blair Zajac +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare class Benchmark { + static filter(arr: T[], callback: (value: T) => any, thisArg?: any): T[]; + static filter(arr: T[], filter: string, thisArg?: any): T[]; + static formatNumber(num: number): string; + static join(obj: Object, separator1?: string, separator2?: string): string; + static invoke( + benches: Benchmark[], + name: string | Object, + ...args: any[] + ): any[]; + static runInContext(context: Object): Function; + + static each(obj: Object | any[], callback: Function, thisArg?: any): void; + static forEach(arr: T[], callback: (value: T) => any, thisArg?: any): void; + static forOwn(obj: Object, callback: Function, thisArg?: any): void; + static has(obj: Object, path: any[] | string): boolean; + static indexOf(arr: T[], value: T, fromIndex?: number): number; + static map(arr: T[], callback: (value: T) => K, thisArg?: any): K[]; + static reduce( + arr: T[], + callback: (accumulator: K, value: T) => K, + thisArg?: any + ): K; + + static options: Benchmark.Options; + static platform: Benchmark.Platform; + static support: Benchmark.Support; + static version: string; + + constructor(fn: Function | string, options?: Benchmark.Options); + constructor(name: string, fn: Function | string, options?: Benchmark.Options); + constructor(name: string, options?: Benchmark.Options); + constructor(options: Benchmark.Options); + + id: number; + name: string; + count: number; + cycles: number; + hz: number; + compiled: Function | string; + error: Error; + fn: Function | string; + aborted: boolean; + running: boolean; + setup: Function | string; + teardown: Function | string; + + stats: Benchmark.Stats; + times: Benchmark.Times; + + abort(): Benchmark; + clone(options: Benchmark.Options): Benchmark; + compare(benchmark: Benchmark): number; + emit(type: string | Object): any; + listeners(type: string): Function[]; + off(type?: string, listener?: Function): Benchmark; + off(types: string[]): Benchmark; + on(type?: string, listener?: Function): Benchmark; + on(types: string[]): Benchmark; + reset(): Benchmark; + run(options?: Benchmark.Options): Benchmark; + toString(): string; +} + +declare namespace Benchmark { + export interface Options { + async?: boolean | undefined; + defer?: boolean | undefined; + delay?: number | undefined; + id?: string | undefined; + initCount?: number | undefined; + maxTime?: number | undefined; + minSamples?: number | undefined; + minTime?: number | undefined; + name?: string | undefined; + onAbort?: Function | undefined; + onComplete?: Function | undefined; + onCycle?: Function | undefined; + onError?: Function | undefined; + onReset?: Function | undefined; + onStart?: Function | undefined; + setup?: Function | string | undefined; + teardown?: Function | string | undefined; + fn?: Function | string | undefined; + queued?: boolean | undefined; + } + + export interface Platform { + description: string; + layout: string; + product: string; + name: string; + manufacturer: string; + os: string; + prerelease: string; + version: string; + toString(): string; + } + + export interface Support { + browser: boolean; + timeout: boolean; + decompilation: boolean; + } + + export interface Stats { + moe: number; + rme: number; + sem: number; + deviation: number; + mean: number; + sample: any[]; + variance: number; + } + + export interface Times { + cycle: number; + elapsed: number; + period: number; + timeStamp: number; + } + + export class Deferred { + constructor(clone: Benchmark); + + benchmark: Benchmark; + cycles: number; + elapsed: number; + timeStamp: number; + + resolve(): void; + } + + export interface Target { + options: Options; + async?: boolean | undefined; + defer?: boolean | undefined; + delay?: number | undefined; + initCount?: number | undefined; + maxTime?: number | undefined; + minSamples?: number | undefined; + minTime?: number | undefined; + name?: string | undefined; + fn?: Function | undefined; + id: number; + stats?: Stats | undefined; + times?: Times | undefined; + running: boolean; + count?: number | undefined; + compiled?: Function | undefined; + cycles?: number | undefined; + hz?: number | undefined; + } + + export class Event { + constructor(type: string | Object); + + aborted: boolean; + cancelled: boolean; + currentTarget: Object; + result: any; + target: Target; + timeStamp: number; + type: string; + } + + export class Suite { + static options: { name: string }; + + constructor(name?: string, options?: Options); + + length: number; + aborted: boolean; + running: boolean; + + abort(): Suite; + add(name: string, fn: Function | string, options?: Options): Suite; + add(fn: Function | string, options?: Options): Suite; + add(name: string, options?: Options): Suite; + add(options: Options): Suite; + clone(options: Options): Suite; + emit(type: string | Object): any; + filter(callback: Function | string): Suite; + join(separator?: string): string; + listeners(type: string): Function[]; + off(type?: string, callback?: Function): Suite; + off(types: string[]): Suite; + on(type?: string, callback?: Function): Suite; + on(types: string[]): Suite; + push(benchmark: Benchmark): number; + reset(): Suite; + run(options?: Options): Suite; + reverse(): any[]; + sort(compareFn: (a: any, b: any) => number): any[]; + splice(start: number, deleteCount?: number): any[]; + unshift(benchmark: Benchmark): number; + + each(callback: Function): Suite; + forEach(callback: Function): Suite; + indexOf(value: any): number; + map(callback: Function | string): any[]; + reduce(callback: Function, accumulator: T): T; + + pop(): Function; + shift(): Benchmark; + slice(start: number, end: number): any[]; + slice(start: number, deleteCount: number, ...values: any[]): any[]; + } +} + +export = Benchmark; diff --git a/tgui/packages/tgui-bench/lib/benchmark.js b/tgui/packages/tgui-bench/lib/benchmark.js new file mode 100644 index 0000000000000..0837678decf9c --- /dev/null +++ b/tgui/packages/tgui-bench/lib/benchmark.js @@ -0,0 +1,2760 @@ +/* eslint-disable */ +/*! + * Benchmark.js + * Copyright 2010-2016 Mathias Bynens + * Based on JSLitmus.js, copyright Robert Kieffer + * Modified by John-David Dalton + * Manually stripped from useless junk by /tg/station13 maintainers. + * Available under MIT license + */ +// prettier-ignore +module.exports = (function() { + 'use strict'; + + /** Used as a safe reference for `undefined` in pre ES5 environments. */ + var undefined; + + /** Used to determine if values are of the language type Object. */ + var objectTypes = { + 'function': true, + 'object': true + }; + + /** Used as a reference to the global object. */ + var root = (objectTypes[typeof window] && window) || this; + + /** Detect free variable `define`. */ + var freeDefine = false; + + /** Used to assign each benchmark an incremented id. */ + var counter = 0; + + /** Used to detect primitive types. */ + var rePrimitive = /^(?:boolean|number|string|undefined)$/; + + /** Used to make every compiled test unique. */ + var uidCounter = 0; + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'Date', 'Function', 'Math', 'Object', 'RegExp', 'String', '_', + 'clearTimeout', 'chrome', 'chromium', 'document', 'navigator', 'phantom', + 'platform', 'process', 'runtime', 'setTimeout' + ]; + + /** Used to avoid hz of Infinity. */ + var divisors = { + '1': 4096, + '2': 512, + '3': 64, + '4': 8, + '5': 0 + }; + + /** + * T-Distribution two-tailed critical values for 95% confidence. + * For more info see http://www.itl.nist.gov/div898/handbook/eda/section3/eda3672.htm. + */ + var tTable = { + '1': 12.706, '2': 4.303, '3': 3.182, '4': 2.776, '5': 2.571, '6': 2.447, + '7': 2.365, '8': 2.306, '9': 2.262, '10': 2.228, '11': 2.201, '12': 2.179, + '13': 2.16, '14': 2.145, '15': 2.131, '16': 2.12, '17': 2.11, '18': 2.101, + '19': 2.093, '20': 2.086, '21': 2.08, '22': 2.074, '23': 2.069, '24': 2.064, + '25': 2.06, '26': 2.056, '27': 2.052, '28': 2.048, '29': 2.045, '30': 2.042, + 'infinity': 1.96 + }; + + /** + * Critical Mann-Whitney U-values for 95% confidence. + * For more info see http://www.saburchill.com/IBbiology/stats/003.html. + */ + var uTable = { + '5': [0, 1, 2], + '6': [1, 2, 3, 5], + '7': [1, 3, 5, 6, 8], + '8': [2, 4, 6, 8, 10, 13], + '9': [2, 4, 7, 10, 12, 15, 17], + '10': [3, 5, 8, 11, 14, 17, 20, 23], + '11': [3, 6, 9, 13, 16, 19, 23, 26, 30], + '12': [4, 7, 11, 14, 18, 22, 26, 29, 33, 37], + '13': [4, 8, 12, 16, 20, 24, 28, 33, 37, 41, 45], + '14': [5, 9, 13, 17, 22, 26, 31, 36, 40, 45, 50, 55], + '15': [5, 10, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64], + '16': [6, 11, 15, 21, 26, 31, 37, 42, 47, 53, 59, 64, 70, 75], + '17': [6, 11, 17, 22, 28, 34, 39, 45, 51, 57, 63, 67, 75, 81, 87], + '18': [7, 12, 18, 24, 30, 36, 42, 48, 55, 61, 67, 74, 80, 86, 93, 99], + '19': [7, 13, 19, 25, 32, 38, 45, 52, 58, 65, 72, 78, 85, 92, 99, 106, 113], + '20': [8, 14, 20, 27, 34, 41, 48, 55, 62, 69, 76, 83, 90, 98, 105, 112, 119, 127], + '21': [8, 15, 22, 29, 36, 43, 50, 58, 65, 73, 80, 88, 96, 103, 111, 119, 126, 134, 142], + '22': [9, 16, 23, 30, 38, 45, 53, 61, 69, 77, 85, 93, 101, 109, 117, 125, 133, 141, 150, 158], + '23': [9, 17, 24, 32, 40, 48, 56, 64, 73, 81, 89, 98, 106, 115, 123, 132, 140, 149, 157, 166, 175], + '24': [10, 17, 25, 33, 42, 50, 59, 67, 76, 85, 94, 102, 111, 120, 129, 138, 147, 156, 165, 174, 183, 192], + '25': [10, 18, 27, 35, 44, 53, 62, 71, 80, 89, 98, 107, 117, 126, 135, 145, 154, 163, 173, 182, 192, 201, 211], + '26': [11, 19, 28, 37, 46, 55, 64, 74, 83, 93, 102, 112, 122, 132, 141, 151, 161, 171, 181, 191, 200, 210, 220, 230], + '27': [11, 20, 29, 38, 48, 57, 67, 77, 87, 97, 107, 118, 125, 138, 147, 158, 168, 178, 188, 199, 209, 219, 230, 240, 250], + '28': [12, 21, 30, 40, 50, 60, 70, 80, 90, 101, 111, 122, 132, 143, 154, 164, 175, 186, 196, 207, 218, 228, 239, 250, 261, 272], + '29': [13, 22, 32, 42, 52, 62, 73, 83, 94, 105, 116, 127, 138, 149, 160, 171, 182, 193, 204, 215, 226, 238, 249, 260, 271, 282, 294], + '30': [13, 23, 33, 43, 54, 65, 76, 87, 98, 109, 120, 131, 143, 154, 166, 177, 189, 200, 212, 223, 235, 247, 258, 270, 282, 293, 305, 317] + }; + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new `Benchmark` function using the given `context` object. + * + * @static + * @memberOf Benchmark + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `Benchmark` function. + */ + function runInContext(context) { + // Exit early if unable to acquire lodash. + var _ = context && context._ || require('lodash') || root._; + if (!_) { + Benchmark.runInContext = runInContext; + return Benchmark; + } + // Avoid issues with some ES3 environments that attempt to use values, named + // after built-in constructors like `Object`, for the creation of literals. + // ES5 clears this up by stating that literals must use built-in constructors. + // See http://es5.github.io/#x11.1.5. + context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; + + /** Native constructor references. */ + var Array = context.Array, + Date = context.Date, + Function = context.Function, + Math = context.Math, + Object = context.Object, + RegExp = context.RegExp, + String = context.String; + + /** Used for `Array` and `Object` method references. */ + var arrayRef = [], + objectProto = Object.prototype; + + /** Native method shortcuts. */ + var abs = Math.abs, + clearTimeout = context.clearTimeout, + floor = Math.floor, + log = Math.log, + max = Math.max, + min = Math.min, + pow = Math.pow, + push = arrayRef.push, + setTimeout = context.setTimeout, + shift = arrayRef.shift, + slice = arrayRef.slice, + sqrt = Math.sqrt, + toString = objectProto.toString, + unshift = arrayRef.unshift; + + /** Detect DOM document object. */ + var doc = isHostType(context, 'document') && context.document; + + /** Used to access Node.js's high resolution timer. */ + var processObject = isHostType(context, 'process') && context.process; + + /** Used to prevent a `removeChild` memory leak in IE < 9. */ + var trash = doc && doc.createElement('div'); + + /** Used to integrity check compiled tests. */ + var uid = 'uid' + _.now(); + + /** Used to avoid infinite recursion when methods call each other. */ + var calledBy = {}; + + /** + * An object used to flag environments/features. + * + * @static + * @memberOf Benchmark + * @type Object + */ + var support = {}; + + (function() { + + /** + * Detect if running in a browser environment. + * + * @memberOf Benchmark.support + * @type boolean + */ + support.browser = doc && isHostType(context, 'navigator') && !isHostType(context, 'phantom'); + + /** + * Detect if the Timers API exists. + * + * @memberOf Benchmark.support + * @type boolean + */ + support.timeout = isHostType(context, 'setTimeout') && isHostType(context, 'clearTimeout'); + + /** + * Detect if function decompilation is support. + * + * @name decompilation + * @memberOf Benchmark.support + * @type boolean + */ + try { + // Safari 2.x removes commas in object literals from `Function#toString` results. + // See http://webk.it/11609 for more details. + // Firefox 3.6 and Opera 9.25 strip grouping parentheses from `Function#toString` results. + // See http://bugzil.la/559438 for more details. + support.decompilation = Function( + ('return (' + (function(x) { return { 'x': '' + (1 + x) + '', 'y': 0 }; }) + ')') + // Avoid issues with code added by Istanbul. + .replace(/__cov__[^;]+;/g, '') + )()(0).x === '1'; + } catch(e) { + support.decompilation = false; + } + }()); + + /** + * Timer object used by `clock()` and `Deferred#resolve`. + * + * @private + * @type Object + */ + var timer = { + + /** + * The timer namespace object or constructor. + * + * @private + * @memberOf timer + * @type {Function|Object} + */ + 'ns': Date, + + /** + * Starts the deferred timer. + * + * @private + * @memberOf timer + * @param {Object} deferred The deferred instance. + */ + 'start': null, // Lazy defined in `clock()`. + + /** + * Stops the deferred timer. + * + * @private + * @memberOf timer + * @param {Object} deferred The deferred instance. + */ + 'stop': null // Lazy defined in `clock()`. + }; + + /*------------------------------------------------------------------------*/ + + /** + * The Benchmark constructor. + * + * Note: The Benchmark constructor exposes a handful of lodash methods to + * make working with arrays, collections, and objects easier. The lodash + * methods are: + * [`each/forEach`](https://lodash.com/docs#forEach), [`forOwn`](https://lodash.com/docs#forOwn), + * [`has`](https://lodash.com/docs#has), [`indexOf`](https://lodash.com/docs#indexOf), + * [`map`](https://lodash.com/docs#map), and [`reduce`](https://lodash.com/docs#reduce) + * + * @constructor + * @param {string} name A name to identify the benchmark. + * @param {Function|string} fn The test to benchmark. + * @param {Object} [options={}] Options object. + * @example + * + * // basic usage (the `new` operator is optional) + * var bench = new Benchmark(fn); + * + * // or using a name first + * var bench = new Benchmark('foo', fn); + * + * // or with options + * var bench = new Benchmark('foo', fn, { + * + * // displayed by `Benchmark#toString` if `name` is not available + * 'id': 'xyz', + * + * // called when the benchmark starts running + * 'onStart': onStart, + * + * // called after each run cycle + * 'onCycle': onCycle, + * + * // called when aborted + * 'onAbort': onAbort, + * + * // called when a test errors + * 'onError': onError, + * + * // called when reset + * 'onReset': onReset, + * + * // called when the benchmark completes running + * 'onComplete': onComplete, + * + * // compiled/called before the test loop + * 'setup': setup, + * + * // compiled/called after the test loop + * 'teardown': teardown + * }); + * + * // or name and options + * var bench = new Benchmark('foo', { + * + * // a flag to indicate the benchmark is deferred + * 'defer': true, + * + * // benchmark test function + * 'fn': function(deferred) { + * // call `Deferred#resolve` when the deferred test is finished + * deferred.resolve(); + * } + * }); + * + * // or options only + * var bench = new Benchmark({ + * + * // benchmark name + * 'name': 'foo', + * + * // benchmark test as a string + * 'fn': '[1,2,3,4].sort()' + * }); + * + * // a test's `this` binding is set to the benchmark instance + * var bench = new Benchmark('foo', function() { + * 'My name is '.concat(this.name); // "My name is foo" + * }); + */ + function Benchmark(name, fn, options) { + var bench = this; + + // Allow instance creation without the `new` operator. + if (!(bench instanceof Benchmark)) { + return new Benchmark(name, fn, options); + } + // Juggle arguments. + if (_.isPlainObject(name)) { + // 1 argument (options). + options = name; + } + else if (_.isFunction(name)) { + // 2 arguments (fn, options). + options = fn; + fn = name; + } + else if (_.isPlainObject(fn)) { + // 2 arguments (name, options). + options = fn; + fn = null; + bench.name = name; + } + else { + // 3 arguments (name, fn [, options]). + bench.name = name; + } + setOptions(bench, options); + + bench.id || (bench.id = ++counter); + bench.fn == null && (bench.fn = fn); + + bench.stats = cloneDeep(bench.stats); + bench.times = cloneDeep(bench.times); + } + + /** + * The Deferred constructor. + * + * @constructor + * @memberOf Benchmark + * @param {Object} clone The cloned benchmark instance. + */ + function Deferred(clone) { + var deferred = this; + if (!(deferred instanceof Deferred)) { + return new Deferred(clone); + } + deferred.benchmark = clone; + clock(deferred); + } + + /** + * The Event constructor. + * + * @constructor + * @memberOf Benchmark + * @param {Object|string} type The event type. + */ + function Event(type) { + var event = this; + if (type instanceof Event) { + return type; + } + return (event instanceof Event) + ? _.assign(event, { 'timeStamp': _.now() }, typeof type == 'string' ? { 'type': type } : type) + : new Event(type); + } + + /** + * The Suite constructor. + * + * Note: Each Suite instance has a handful of wrapped lodash methods to + * make working with Suites easier. The wrapped lodash methods are: + * [`each/forEach`](https://lodash.com/docs#forEach), [`indexOf`](https://lodash.com/docs#indexOf), + * [`map`](https://lodash.com/docs#map), and [`reduce`](https://lodash.com/docs#reduce) + * + * @constructor + * @memberOf Benchmark + * @param {string} name A name to identify the suite. + * @param {Object} [options={}] Options object. + * @example + * + * // basic usage (the `new` operator is optional) + * var suite = new Benchmark.Suite; + * + * // or using a name first + * var suite = new Benchmark.Suite('foo'); + * + * // or with options + * var suite = new Benchmark.Suite('foo', { + * + * // called when the suite starts running + * 'onStart': onStart, + * + * // called between running benchmarks + * 'onCycle': onCycle, + * + * // called when aborted + * 'onAbort': onAbort, + * + * // called when a test errors + * 'onError': onError, + * + * // called when reset + * 'onReset': onReset, + * + * // called when the suite completes running + * 'onComplete': onComplete + * }); + */ + function Suite(name, options) { + var suite = this; + + // Allow instance creation without the `new` operator. + if (!(suite instanceof Suite)) { + return new Suite(name, options); + } + // Juggle arguments. + if (_.isPlainObject(name)) { + // 1 argument (options). + options = name; + } else { + // 2 arguments (name [, options]). + suite.name = name; + } + setOptions(suite, options); + } + + /*------------------------------------------------------------------------*/ + + /** + * A specialized version of `_.cloneDeep` which only clones arrays and plain + * objects assigning all other values by reference. + * + * @private + * @param {*} value The value to clone. + * @returns {*} The cloned value. + */ + var cloneDeep = _.partial(_.cloneDeepWith, _, function(value) { + // Only clone primitives, arrays, and plain objects. + return (_.isObject(value) && !_.isArray(value) && !_.isPlainObject(value)) + ? value + : undefined; + }); + + /** + * Creates a function from the given arguments string and body. + * + * @private + * @param {string} args The comma separated function arguments. + * @param {string} body The function body. + * @returns {Function} The new function. + */ + function createFunction() { + // Lazy define. + createFunction = function(args, body) { + var result, + anchor = freeDefine ? freeDefine.amd : Benchmark, + prop = uid + 'createFunction'; + + runScript((freeDefine ? 'define.amd.' : 'Benchmark.') + prop + '=function(' + args + '){' + body + '}'); + result = anchor[prop]; + delete anchor[prop]; + return result; + }; + // Fix JaegerMonkey bug. + // For more information see http://bugzil.la/639720. + createFunction = support.browser && (createFunction('', 'return"' + uid + '"') || _.noop)() == uid ? createFunction : Function; + return createFunction.apply(null, arguments); + } + + /** + * Delay the execution of a function based on the benchmark's `delay` property. + * + * @private + * @param {Object} bench The benchmark instance. + * @param {Object} fn The function to execute. + */ + function delay(bench, fn) { + bench._timerId = _.delay(fn, bench.delay * 1e3); + } + + /** + * Destroys the given element. + * + * @private + * @param {Element} element The element to destroy. + */ + function destroyElement(element) { + trash.appendChild(element); + trash.innerHTML = ''; + } + + /** + * Gets the name of the first argument from a function's source. + * + * @private + * @param {Function} fn The function. + * @returns {string} The argument name. + */ + function getFirstArgument(fn) { + return (!_.has(fn, 'toString') && + (/^[\s(]*function[^(]*\(([^\s,)]+)/.exec(fn) || 0)[1]) || ''; + } + + /** + * Computes the arithmetic mean of a sample. + * + * @private + * @param {Array} sample The sample. + * @returns {number} The mean. + */ + function getMean(sample) { + return (_.reduce(sample, function(sum, x) { + return sum + x; + }) / sample.length) || 0; + } + + /** + * Gets the source code of a function. + * + * @private + * @param {Function} fn The function. + * @returns {string} The function's source code. + */ + function getSource(fn) { + var result = ''; + if (isStringable(fn)) { + result = String(fn); + } else if (support.decompilation) { + // Escape the `{` for Firefox 1. + result = _.result(/^[^{]+\{([\s\S]*)\}\s*$/.exec(fn), 1); + } + // Trim string. + result = (result || '').replace(/^\s+|\s+$/g, ''); + + // Detect strings containing only the "use strict" directive. + return /^(?:\/\*+[\w\W]*?\*\/|\/\/.*?[\n\r\u2028\u2029]|\s)*(["'])use strict\1;?$/.test(result) + ? '' + : result; + } + + /** + * Checks if an object is of the specified class. + * + * @private + * @param {*} value The value to check. + * @param {string} name The name of the class. + * @returns {boolean} Returns `true` if the value is of the specified class, else `false`. + */ + function isClassOf(value, name) { + return value != null && toString.call(value) == '[object ' + name + ']'; + } + + /** + * Host objects can return type values that are different from their actual + * data type. The objects we are concerned with usually return non-primitive + * types of "object", "function", or "unknown". + * + * @private + * @param {*} object The owner of the property. + * @param {string} property The property to check. + * @returns {boolean} Returns `true` if the property value is a non-primitive, else `false`. + */ + function isHostType(object, property) { + if (object == null) { + return false; + } + var type = typeof object[property]; + return !rePrimitive.test(type) && (type != 'object' || !!object[property]); + } + + /** + * Checks if a value can be safely coerced to a string. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the value can be coerced, else `false`. + */ + function isStringable(value) { + return _.isString(value) || (_.has(value, 'toString') && _.isFunction(value.toString)); + } + + /** + * Runs a snippet of JavaScript via script injection. + * + * @private + * @param {string} code The code to run. + */ + function runScript(code) { + var anchor = freeDefine ? define.amd : Benchmark, + script = doc.createElement('script'), + sibling = doc.getElementsByTagName('script')[0], + parent = sibling.parentNode, + prop = uid + 'runScript', + prefix = '(' + (freeDefine ? 'define.amd.' : 'Benchmark.') + prop + '||function(){})();'; + + // Firefox 2.0.0.2 cannot use script injection as intended because it executes + // asynchronously, but that's OK because script injection is only used to avoid + // the previously commented JaegerMonkey bug. + try { + // Remove the inserted script *before* running the code to avoid differences + // in the expected script element count/order of the document. + script.appendChild(doc.createTextNode(prefix + code)); + anchor[prop] = function() { destroyElement(script); }; + } catch(e) { + parent = parent.cloneNode(false); + sibling = null; + script.text = code; + } + parent.insertBefore(script, sibling); + delete anchor[prop]; + } + + /** + * A helper function for setting options/event handlers. + * + * @private + * @param {Object} object The benchmark or suite instance. + * @param {Object} [options={}] Options object. + */ + function setOptions(object, options) { + options = object.options = _.assign({}, cloneDeep(object.constructor.options), cloneDeep(options)); + + _.forOwn(options, function(value, key) { + if (value != null) { + // Add event listeners. + if (/^on[A-Z]/.test(key)) { + _.each(key.split(' '), function(key) { + object.on(key.slice(2).toLowerCase(), value); + }); + } else if (!_.has(object, key)) { + object[key] = cloneDeep(value); + } + } + }); + } + + /*------------------------------------------------------------------------*/ + + /** + * Handles cycling/completing the deferred benchmark. + * + * @memberOf Benchmark.Deferred + */ + function resolve() { + var deferred = this, + clone = deferred.benchmark, + bench = clone._original; + + if (bench.aborted) { + // cycle() -> clone cycle/complete event -> compute()'s invoked bench.run() cycle/complete. + deferred.teardown(); + clone.running = false; + cycle(deferred); + } + else if (++deferred.cycles < clone.count) { + clone.compiled.call(deferred, context, timer); + } + else { + timer.stop(deferred); + deferred.teardown(); + delay(clone, function() { cycle(deferred); }); + } + } + + /*------------------------------------------------------------------------*/ + + /** + * A generic `Array#filter` like method. + * + * @static + * @memberOf Benchmark + * @param {Array} array The array to iterate over. + * @param {Function|string} callback The function/alias called per iteration. + * @returns {Array} A new array of values that passed callback filter. + * @example + * + * // get odd numbers + * Benchmark.filter([1, 2, 3, 4, 5], function(n) { + * return n % 2; + * }); // -> [1, 3, 5]; + * + * // get fastest benchmarks + * Benchmark.filter(benches, 'fastest'); + * + * // get slowest benchmarks + * Benchmark.filter(benches, 'slowest'); + * + * // get benchmarks that completed without erroring + * Benchmark.filter(benches, 'successful'); + */ + function filter(array, callback) { + if (callback === 'successful') { + // Callback to exclude those that are errored, unrun, or have hz of Infinity. + callback = function(bench) { + return bench.cycles && _.isFinite(bench.hz) && !bench.error; + }; + } + else if (callback === 'fastest' || callback === 'slowest') { + // Get successful, sort by period + margin of error, and filter fastest/slowest. + var result = filter(array, 'successful').sort(function(a, b) { + a = a.stats; b = b.stats; + return (a.mean + a.moe > b.mean + b.moe ? 1 : -1) * (callback === 'fastest' ? 1 : -1); + }); + + return _.filter(result, function(bench) { + return result[0].compare(bench) == 0; + }); + } + return _.filter(array, callback); + } + + /** + * Converts a number to a more readable comma-separated string representation. + * + * @static + * @memberOf Benchmark + * @param {number} number The number to convert. + * @returns {string} The more readable string representation. + */ + function formatNumber(number) { + number = String(number).split('.'); + return number[0].replace(/(?=(?:\d{3})+$)(?!\b)/g, ',') + + (number[1] ? '.' + number[1] : ''); + } + + /** + * Invokes a method on all items in an array. + * + * @static + * @memberOf Benchmark + * @param {Array} benches Array of benchmarks to iterate over. + * @param {Object|string} name The name of the method to invoke OR options object. + * @param {...*} [args] Arguments to invoke the method with. + * @returns {Array} A new array of values returned from each method invoked. + * @example + * + * // invoke `reset` on all benchmarks + * Benchmark.invoke(benches, 'reset'); + * + * // invoke `emit` with arguments + * Benchmark.invoke(benches, 'emit', 'complete', listener); + * + * // invoke `run(true)`, treat benchmarks as a queue, and register invoke callbacks + * Benchmark.invoke(benches, { + * + * // invoke the `run` method + * 'name': 'run', + * + * // pass a single argument + * 'args': true, + * + * // treat as queue, removing benchmarks from front of `benches` until empty + * 'queued': true, + * + * // called before any benchmarks have been invoked. + * 'onStart': onStart, + * + * // called between invoking benchmarks + * 'onCycle': onCycle, + * + * // called after all benchmarks have been invoked. + * 'onComplete': onComplete + * }); + */ + function invoke(benches, name) { + var args, + bench, + queued, + index = -1, + eventProps = { 'currentTarget': benches }, + options = { 'onStart': _.noop, 'onCycle': _.noop, 'onComplete': _.noop }, + result = _.toArray(benches); + + /** + * Invokes the method of the current object and if synchronous, fetches the next. + */ + function execute() { + var listeners, + async = isAsync(bench); + + if (async) { + // Use `getNext` as the first listener. + bench.on('complete', getNext); + listeners = bench.events.complete; + listeners.splice(0, 0, listeners.pop()); + } + // Execute method. + result[index] = _.isFunction(bench && bench[name]) ? bench[name].apply(bench, args) : undefined; + // If synchronous return `true` until finished. + return !async && getNext(); + } + + /** + * Fetches the next bench or executes `onComplete` callback. + */ + function getNext(event) { + var cycleEvent, + last = bench, + async = isAsync(last); + + if (async) { + last.off('complete', getNext); + last.emit('complete'); + } + // Emit "cycle" event. + eventProps.type = 'cycle'; + eventProps.target = last; + cycleEvent = Event(eventProps); + options.onCycle.call(benches, cycleEvent); + + // Choose next benchmark if not exiting early. + if (!cycleEvent.aborted && raiseIndex() !== false) { + bench = queued ? benches[0] : result[index]; + if (isAsync(bench)) { + delay(bench, execute); + } + else if (async) { + // Resume execution if previously asynchronous but now synchronous. + while (execute()) {} + } + else { + // Continue synchronous execution. + return true; + } + } else { + // Emit "complete" event. + eventProps.type = 'complete'; + options.onComplete.call(benches, Event(eventProps)); + } + // When used as a listener `event.aborted = true` will cancel the rest of + // the "complete" listeners because they were already called above and when + // used as part of `getNext` the `return false` will exit the execution while-loop. + if (event) { + event.aborted = true; + } else { + return false; + } + } + + /** + * Checks if invoking `Benchmark#run` with asynchronous cycles. + */ + function isAsync(object) { + // Avoid using `instanceof` here because of IE memory leak issues with host objects. + var async = args[0] && args[0].async; + return name == 'run' && (object instanceof Benchmark) && + ((async == null ? object.options.async : async) && support.timeout || object.defer); + } + + /** + * Raises `index` to the next defined index or returns `false`. + */ + function raiseIndex() { + index++; + + // If queued remove the previous bench. + if (queued && index > 0) { + shift.call(benches); + } + // If we reached the last index then return `false`. + return (queued ? benches.length : index < result.length) + ? index + : (index = false); + } + // Juggle arguments. + if (_.isString(name)) { + // 2 arguments (array, name). + args = slice.call(arguments, 2); + } else { + // 2 arguments (array, options). + options = _.assign(options, name); + name = options.name; + args = _.isArray(args = 'args' in options ? options.args : []) ? args : [args]; + queued = options.queued; + } + // Start iterating over the array. + if (raiseIndex() !== false) { + // Emit "start" event. + bench = result[index]; + eventProps.type = 'start'; + eventProps.target = bench; + options.onStart.call(benches, Event(eventProps)); + + // End early if the suite was aborted in an "onStart" listener. + if (name == 'run' && (benches instanceof Suite) && benches.aborted) { + // Emit "cycle" event. + eventProps.type = 'cycle'; + options.onCycle.call(benches, Event(eventProps)); + // Emit "complete" event. + eventProps.type = 'complete'; + options.onComplete.call(benches, Event(eventProps)); + } + // Start method execution. + else { + if (isAsync(bench)) { + delay(bench, execute); + } else { + while (execute()) {} + } + } + } + return result; + } + + /** + * Creates a string of joined array values or object key-value pairs. + * + * @static + * @memberOf Benchmark + * @param {Array|Object} object The object to operate on. + * @param {string} [separator1=','] The separator used between key-value pairs. + * @param {string} [separator2=': '] The separator used between keys and values. + * @returns {string} The joined result. + */ + function join(object, separator1, separator2) { + var result = [], + length = (object = Object(object)).length, + arrayLike = length === length >>> 0; + + separator2 || (separator2 = ': '); + _.each(object, function(value, key) { + result.push(arrayLike ? value : key + separator2 + value); + }); + return result.join(separator1 || ','); + } + + /*------------------------------------------------------------------------*/ + + /** + * Aborts all benchmarks in the suite. + * + * @name abort + * @memberOf Benchmark.Suite + * @returns {Object} The suite instance. + */ + function abortSuite() { + var event, + suite = this, + resetting = calledBy.resetSuite; + + if (suite.running) { + event = Event('abort'); + suite.emit(event); + if (!event.cancelled || resetting) { + // Avoid infinite recursion. + calledBy.abortSuite = true; + suite.reset(); + delete calledBy.abortSuite; + + if (!resetting) { + suite.aborted = true; + invoke(suite, 'abort'); + } + } + } + return suite; + } + + /** + * Adds a test to the benchmark suite. + * + * @memberOf Benchmark.Suite + * @param {string} name A name to identify the benchmark. + * @param {Function|string} fn The test to benchmark. + * @param {Object} [options={}] Options object. + * @returns {Object} The suite instance. + * @example + * + * // basic usage + * suite.add(fn); + * + * // or using a name first + * suite.add('foo', fn); + * + * // or with options + * suite.add('foo', fn, { + * 'onCycle': onCycle, + * 'onComplete': onComplete + * }); + * + * // or name and options + * suite.add('foo', { + * 'fn': fn, + * 'onCycle': onCycle, + * 'onComplete': onComplete + * }); + * + * // or options only + * suite.add({ + * 'name': 'foo', + * 'fn': fn, + * 'onCycle': onCycle, + * 'onComplete': onComplete + * }); + */ + function add(name, fn, options) { + var suite = this, + bench = new Benchmark(name, fn, options), + event = Event({ 'type': 'add', 'target': bench }); + + if (suite.emit(event), !event.cancelled) { + suite.push(bench); + } + return suite; + } + + /** + * Creates a new suite with cloned benchmarks. + * + * @name clone + * @memberOf Benchmark.Suite + * @param {Object} options Options object to overwrite cloned options. + * @returns {Object} The new suite instance. + */ + function cloneSuite(options) { + var suite = this, + result = new suite.constructor(_.assign({}, suite.options, options)); + + // Copy own properties. + _.forOwn(suite, function(value, key) { + if (!_.has(result, key)) { + result[key] = value && _.isFunction(value.clone) + ? value.clone() + : cloneDeep(value); + } + }); + return result; + } + + /** + * An `Array#filter` like method. + * + * @name filter + * @memberOf Benchmark.Suite + * @param {Function|string} callback The function/alias called per iteration. + * @returns {Object} A new suite of benchmarks that passed callback filter. + */ + function filterSuite(callback) { + var suite = this, + result = new suite.constructor(suite.options); + + result.push.apply(result, filter(suite, callback)); + return result; + } + + /** + * Resets all benchmarks in the suite. + * + * @name reset + * @memberOf Benchmark.Suite + * @returns {Object} The suite instance. + */ + function resetSuite() { + var event, + suite = this, + aborting = calledBy.abortSuite; + + if (suite.running && !aborting) { + // No worries, `resetSuite()` is called within `abortSuite()`. + calledBy.resetSuite = true; + suite.abort(); + delete calledBy.resetSuite; + } + // Reset if the state has changed. + else if ((suite.aborted || suite.running) && + (suite.emit(event = Event('reset')), !event.cancelled)) { + suite.aborted = suite.running = false; + if (!aborting) { + invoke(suite, 'reset'); + } + } + return suite; + } + + /** + * Runs the suite. + * + * @name run + * @memberOf Benchmark.Suite + * @param {Object} [options={}] Options object. + * @returns {Object} The suite instance. + * @example + * + * // basic usage + * suite.run(); + * + * // or with options + * suite.run({ 'async': true, 'queued': true }); + */ + function runSuite(options) { + var suite = this; + + suite.reset(); + suite.running = true; + options || (options = {}); + + invoke(suite, { + 'name': 'run', + 'args': options, + 'queued': options.queued, + 'onStart': function(event) { + suite.emit(event); + }, + 'onCycle': function(event) { + var bench = event.target; + if (bench.error) { + suite.emit({ 'type': 'error', 'target': bench }); + } + suite.emit(event); + event.aborted = suite.aborted; + }, + 'onComplete': function(event) { + suite.running = false; + suite.emit(event); + } + }); + return suite; + } + + /*------------------------------------------------------------------------*/ + + /** + * Executes all registered listeners of the specified event type. + * + * @memberOf Benchmark, Benchmark.Suite + * @param {Object|string} type The event type or object. + * @param {...*} [args] Arguments to invoke the listener with. + * @returns {*} Returns the return value of the last listener executed. + */ + function emit(type) { + var listeners, + object = this, + event = Event(type), + events = object.events, + args = (arguments[0] = event, arguments); + + event.currentTarget || (event.currentTarget = object); + event.target || (event.target = object); + delete event.result; + + if (events && (listeners = _.has(events, event.type) && events[event.type])) { + _.each(listeners.slice(), function(listener) { + if ((event.result = listener.apply(object, args)) === false) { + event.cancelled = true; + } + return !event.aborted; + }); + } + return event.result; + } + + /** + * Returns an array of event listeners for a given type that can be manipulated + * to add or remove listeners. + * + * @memberOf Benchmark, Benchmark.Suite + * @param {string} type The event type. + * @returns {Array} The listeners array. + */ + function listeners(type) { + var object = this, + events = object.events || (object.events = {}); + + return _.has(events, type) ? events[type] : (events[type] = []); + } + + /** + * Unregisters a listener for the specified event type(s), + * or unregisters all listeners for the specified event type(s), + * or unregisters all listeners for all event types. + * + * @memberOf Benchmark, Benchmark.Suite + * @param {string} [type] The event type. + * @param {Function} [listener] The function to unregister. + * @returns {Object} The current instance. + * @example + * + * // unregister a listener for an event type + * bench.off('cycle', listener); + * + * // unregister a listener for multiple event types + * bench.off('start cycle', listener); + * + * // unregister all listeners for an event type + * bench.off('cycle'); + * + * // unregister all listeners for multiple event types + * bench.off('start cycle complete'); + * + * // unregister all listeners for all event types + * bench.off(); + */ + function off(type, listener) { + var object = this, + events = object.events; + + if (!events) { + return object; + } + _.each(type ? type.split(' ') : events, function(listeners, type) { + var index; + if (typeof listeners == 'string') { + type = listeners; + listeners = _.has(events, type) && events[type]; + } + if (listeners) { + if (listener) { + index = _.indexOf(listeners, listener); + if (index > -1) { + listeners.splice(index, 1); + } + } else { + listeners.length = 0; + } + } + }); + return object; + } + + /** + * Registers a listener for the specified event type(s). + * + * @memberOf Benchmark, Benchmark.Suite + * @param {string} type The event type. + * @param {Function} listener The function to register. + * @returns {Object} The current instance. + * @example + * + * // register a listener for an event type + * bench.on('cycle', listener); + * + * // register a listener for multiple event types + * bench.on('start cycle', listener); + */ + function on(type, listener) { + var object = this, + events = object.events || (object.events = {}); + + _.each(type.split(' '), function(type) { + (_.has(events, type) + ? events[type] + : (events[type] = []) + ).push(listener); + }); + return object; + } + + /*------------------------------------------------------------------------*/ + + /** + * Aborts the benchmark without recording times. + * + * @memberOf Benchmark + * @returns {Object} The benchmark instance. + */ + function abort() { + var event, + bench = this, + resetting = calledBy.reset; + + if (bench.running) { + event = Event('abort'); + bench.emit(event); + if (!event.cancelled || resetting) { + // Avoid infinite recursion. + calledBy.abort = true; + bench.reset(); + delete calledBy.abort; + + if (support.timeout) { + clearTimeout(bench._timerId); + delete bench._timerId; + } + if (!resetting) { + bench.aborted = true; + bench.running = false; + } + } + } + return bench; + } + + /** + * Creates a new benchmark using the same test and options. + * + * @memberOf Benchmark + * @param {Object} options Options object to overwrite cloned options. + * @returns {Object} The new benchmark instance. + * @example + * + * var bizarro = bench.clone({ + * 'name': 'doppelganger' + * }); + */ + function clone(options) { + var bench = this, + result = new bench.constructor(_.assign({}, bench, options)); + + // Correct the `options` object. + result.options = _.assign({}, cloneDeep(bench.options), cloneDeep(options)); + + // Copy own custom properties. + _.forOwn(bench, function(value, key) { + if (!_.has(result, key)) { + result[key] = cloneDeep(value); + } + }); + + return result; + } + + /** + * Determines if a benchmark is faster than another. + * + * @memberOf Benchmark + * @param {Object} other The benchmark to compare. + * @returns {number} Returns `-1` if slower, `1` if faster, and `0` if indeterminate. + */ + function compare(other) { + var bench = this; + + // Exit early if comparing the same benchmark. + if (bench == other) { + return 0; + } + var critical, + zStat, + sample1 = bench.stats.sample, + sample2 = other.stats.sample, + size1 = sample1.length, + size2 = sample2.length, + maxSize = max(size1, size2), + minSize = min(size1, size2), + u1 = getU(sample1, sample2), + u2 = getU(sample2, sample1), + u = min(u1, u2); + + function getScore(xA, sampleB) { + return _.reduce(sampleB, function(total, xB) { + return total + (xB > xA ? 0 : xB < xA ? 1 : 0.5); + }, 0); + } + + function getU(sampleA, sampleB) { + return _.reduce(sampleA, function(total, xA) { + return total + getScore(xA, sampleB); + }, 0); + } + + function getZ(u) { + return (u - ((size1 * size2) / 2)) / sqrt((size1 * size2 * (size1 + size2 + 1)) / 12); + } + // Reject the null hypothesis the two samples come from the + // same population (i.e. have the same median) if... + if (size1 + size2 > 30) { + // ...the z-stat is greater than 1.96 or less than -1.96 + // http://www.statisticslectures.com/topics/mannwhitneyu/ + zStat = getZ(u); + return abs(zStat) > 1.96 ? (u == u1 ? 1 : -1) : 0; + } + // ...the U value is less than or equal the critical U value. + critical = maxSize < 5 || minSize < 3 ? 0 : uTable[maxSize][minSize - 3]; + return u <= critical ? (u == u1 ? 1 : -1) : 0; + } + + /** + * Reset properties and abort if running. + * + * @memberOf Benchmark + * @returns {Object} The benchmark instance. + */ + function reset() { + var bench = this; + if (bench.running && !calledBy.abort) { + // No worries, `reset()` is called within `abort()`. + calledBy.reset = true; + bench.abort(); + delete calledBy.reset; + return bench; + } + var event, + index = 0, + changes = [], + queue = []; + + // A non-recursive solution to check if properties have changed. + // For more information see http://www.jslab.dk/articles/non.recursive.preorder.traversal.part4. + var data = { + 'destination': bench, + 'source': _.assign({}, cloneDeep(bench.constructor.prototype), cloneDeep(bench.options)) + }; + + do { + _.forOwn(data.source, function(value, key) { + var changed, + destination = data.destination, + currValue = destination[key]; + + // Skip pseudo private properties like `_timerId` which could be a + // Java object in environments like RingoJS. + if (key.charAt(0) == '_') { + return; + } + if (value && typeof value == 'object') { + if (_.isArray(value)) { + // Check if an array value has changed to a non-array value. + if (!_.isArray(currValue)) { + changed = currValue = []; + } + // Check if an array has changed its length. + if (currValue.length != value.length) { + changed = currValue = currValue.slice(0, value.length); + currValue.length = value.length; + } + } + // Check if an object has changed to a non-object value. + else if (!currValue || typeof currValue != 'object') { + changed = currValue = {}; + } + // Register a changed object. + if (changed) { + changes.push({ 'destination': destination, 'key': key, 'value': currValue }); + } + queue.push({ 'destination': currValue, 'source': value }); + } + // Register a changed primitive. + else if (value !== currValue && !(value == null || _.isFunction(value))) { + changes.push({ 'destination': destination, 'key': key, 'value': value }); + } + }); + } + while ((data = queue[index++])); + + // If changed emit the `reset` event and if it isn't cancelled reset the benchmark. + if (changes.length && (bench.emit(event = Event('reset')), !event.cancelled)) { + _.each(changes, function(data) { + data.destination[data.key] = data.value; + }); + } + return bench; + } + + /** + * Displays relevant benchmark information when coerced to a string. + * + * @name toString + * @memberOf Benchmark + * @returns {string} A string representation of the benchmark instance. + */ + function toStringBench() { + var bench = this, + error = bench.error, + hz = bench.hz, + id = bench.id, + stats = bench.stats, + size = stats.sample.length, + pm = '\xb1', + result = bench.name || (_.isNaN(id) ? id : ''); + + if (error) { + var errorStr; + if (!_.isObject(error)) { + errorStr = String(error); + } else if (!_.isError(Error)) { + errorStr = join(error); + } else { + // Error#name and Error#message properties are non-enumerable. + errorStr = join(_.assign({ 'name': error.name, 'message': error.message }, error)); + } + result += ': ' + errorStr; + } + else { + result += ' x ' + formatNumber(hz.toFixed(hz < 100 ? 2 : 0)) + ' ops/sec ' + pm + + stats.rme.toFixed(2) + '% (' + size + ' run' + (size == 1 ? '' : 's') + ' sampled)'; + } + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Clocks the time taken to execute a test per cycle (secs). + * + * @private + * @param {Object} bench The benchmark instance. + * @returns {number} The time taken. + */ + function clock() { + var options = Benchmark.options, + templateData = {}, + timers = [{ 'ns': timer.ns, 'res': max(0.0015, getRes('ms')), 'unit': 'ms' }]; + + // Lazy define for hi-res timers. + clock = function(clone) { + var deferred; + + if (clone instanceof Deferred) { + deferred = clone; + clone = deferred.benchmark; + } + var bench = clone._original, + stringable = isStringable(bench.fn), + count = bench.count = clone.count, + decompilable = stringable || (support.decompilation && (clone.setup !== _.noop || clone.teardown !== _.noop)), + id = bench.id, + name = bench.name || (typeof id == 'number' ? '' : id), + result = 0; + + // Init `minTime` if needed. + clone.minTime = bench.minTime || (bench.minTime = bench.options.minTime = options.minTime); + + // Compile in setup/teardown functions and the test loop. + // Create a new compiled test, instead of using the cached `bench.compiled`, + // to avoid potential engine optimizations enabled over the life of the test. + var funcBody = deferred + ? 'var d#=this,${fnArg}=d#,m#=d#.benchmark._original,f#=m#.fn,su#=m#.setup,td#=m#.teardown;' + + // When `deferred.cycles` is `0` then... + 'if(!d#.cycles){' + + // set `deferred.fn`, + 'd#.fn=function(){var ${fnArg}=d#;if(typeof f#=="function"){try{${fn}\n}catch(e#){f#(d#)}}else{${fn}\n}};' + + // set `deferred.teardown`, + 'd#.teardown=function(){d#.cycles=0;if(typeof td#=="function"){try{${teardown}\n}catch(e#){td#()}}else{${teardown}\n}};' + + // execute the benchmark's `setup`, + 'if(typeof su#=="function"){try{${setup}\n}catch(e#){su#()}}else{${setup}\n};' + + // start timer, + 't#.start(d#);' + + // and then execute `deferred.fn` and return a dummy object. + '}d#.fn();return{uid:"${uid}"}' + + : 'var r#,s#,m#=this,f#=m#.fn,i#=m#.count,n#=t#.ns;${setup}\n${begin};' + + 'while(i#--){${fn}\n}${end};${teardown}\nreturn{elapsed:r#,uid:"${uid}"}'; + + var compiled = bench.compiled = clone.compiled = createCompiled(bench, decompilable, deferred, funcBody), + isEmpty = !(templateData.fn || stringable); + + try { + if (isEmpty) { + // Firefox may remove dead code from `Function#toString` results. + // For more information see http://bugzil.la/536085. + throw new Error('The test "' + name + '" is empty. This may be the result of dead code removal.'); + } + else if (!deferred) { + // Pretest to determine if compiled code exits early, usually by a + // rogue `return` statement, by checking for a return object with the uid. + bench.count = 1; + compiled = decompilable && (compiled.call(bench, context, timer) || {}).uid == templateData.uid && compiled; + bench.count = count; + } + } catch(e) { + compiled = null; + clone.error = e || new Error(String(e)); + bench.count = count; + } + // Fallback when a test exits early or errors during pretest. + if (!compiled && !deferred && !isEmpty) { + funcBody = ( + stringable || (decompilable && !clone.error) + ? 'function f#(){${fn}\n}var r#,s#,m#=this,i#=m#.count' + : 'var r#,s#,m#=this,f#=m#.fn,i#=m#.count' + ) + + ',n#=t#.ns;${setup}\n${begin};m#.f#=f#;while(i#--){m#.f#()}${end};' + + 'delete m#.f#;${teardown}\nreturn{elapsed:r#}'; + + compiled = createCompiled(bench, decompilable, deferred, funcBody); + + try { + // Pretest one more time to check for errors. + bench.count = 1; + compiled.call(bench, context, timer); + bench.count = count; + delete clone.error; + } + catch(e) { + bench.count = count; + if (!clone.error) { + clone.error = e || new Error(String(e)); + } + } + } + // If no errors run the full test loop. + if (!clone.error) { + compiled = bench.compiled = clone.compiled = createCompiled(bench, decompilable, deferred, funcBody); + result = compiled.call(deferred || bench, context, timer).elapsed; + } + return result; + }; + + /*----------------------------------------------------------------------*/ + + /** + * Creates a compiled function from the given function `body`. + */ + function createCompiled(bench, decompilable, deferred, body) { + var fn = bench.fn, + fnArg = deferred ? getFirstArgument(fn) || 'deferred' : ''; + + templateData.uid = uid + uidCounter++; + + _.assign(templateData, { + 'setup': decompilable ? getSource(bench.setup) : interpolate('m#.setup()'), + 'fn': decompilable ? getSource(fn) : interpolate('m#.fn(' + fnArg + ')'), + 'fnArg': fnArg, + 'teardown': decompilable ? getSource(bench.teardown) : interpolate('m#.teardown()') + }); + + // Use API of chosen timer. + if (timer.unit == 'ns') { + _.assign(templateData, { + 'begin': interpolate('s#=n#()'), + 'end': interpolate('r#=n#(s#);r#=r#[0]+(r#[1]/1e9)') + }); + } + else if (timer.unit == 'us') { + if (timer.ns.stop) { + _.assign(templateData, { + 'begin': interpolate('s#=n#.start()'), + 'end': interpolate('r#=n#.microseconds()/1e6') + }); + } else { + _.assign(templateData, { + 'begin': interpolate('s#=n#()'), + 'end': interpolate('r#=(n#()-s#)/1e6') + }); + } + } + else if (timer.ns.now) { + _.assign(templateData, { + 'begin': interpolate('s#=n#.now()'), + 'end': interpolate('r#=(n#.now()-s#)/1e3') + }); + } + else { + _.assign(templateData, { + 'begin': interpolate('s#=new n#().getTime()'), + 'end': interpolate('r#=(new n#().getTime()-s#)/1e3') + }); + } + // Define `timer` methods. + timer.start = createFunction( + interpolate('o#'), + interpolate('var n#=this.ns,${begin};o#.elapsed=0;o#.timeStamp=s#') + ); + + timer.stop = createFunction( + interpolate('o#'), + interpolate('var n#=this.ns,s#=o#.timeStamp,${end};o#.elapsed=r#') + ); + + // Create compiled test. + return createFunction( + interpolate('window,t#'), + 'var global = window, clearTimeout = global.clearTimeout, setTimeout = global.setTimeout;\n' + + interpolate(body) + ); + } + + /** + * Gets the current timer's minimum resolution (secs). + */ + function getRes(unit) { + var measured, + begin, + count = 30, + divisor = 1e3, + ns = timer.ns, + sample = []; + + // Get average smallest measurable time. + while (count--) { + if (unit == 'us') { + divisor = 1e6; + if (ns.stop) { + ns.start(); + while (!(measured = ns.microseconds())) {} + } else { + begin = ns(); + while (!(measured = ns() - begin)) {} + } + } + else if (unit == 'ns') { + divisor = 1e9; + begin = (begin = ns())[0] + (begin[1] / divisor); + while (!(measured = ((measured = ns())[0] + (measured[1] / divisor)) - begin)) {} + divisor = 1; + } + else if (ns.now) { + begin = ns.now(); + while (!(measured = ns.now() - begin)) {} + } + else { + begin = new ns().getTime(); + while (!(measured = new ns().getTime() - begin)) {} + } + // Check for broken timers. + if (measured > 0) { + sample.push(measured); + } else { + sample.push(Infinity); + break; + } + } + // Convert to seconds. + return getMean(sample) / divisor; + } + + /** + * Interpolates a given template string. + */ + function interpolate(string) { + // Replaces all occurrences of `#` with a unique number and template tokens with content. + return _.template(string.replace(/\#/g, /\d+/.exec(templateData.uid)))(templateData); + } + + /*----------------------------------------------------------------------*/ + + // Detect Chrome's microsecond timer: + // enable benchmarking via the --enable-benchmarking command + // line switch in at least Chrome 7 to use chrome.Interval + try { + if ((timer.ns = new (context.chrome || context.chromium).Interval)) { + timers.push({ 'ns': timer.ns, 'res': getRes('us'), 'unit': 'us' }); + } + } catch(e) {} + + // Detect Node.js's nanosecond resolution timer available in Node.js >= 0.8. + if (processObject && typeof (timer.ns = processObject.hrtime) == 'function') { + timers.push({ 'ns': timer.ns, 'res': getRes('ns'), 'unit': 'ns' }); + } + // Pick timer with highest resolution. + timer = _.minBy(timers, 'res'); + + // Error if there are no working timers. + if (timer.res == Infinity) { + throw new Error('Benchmark.js was unable to find a working timer.'); + } + // Resolve time span required to achieve a percent uncertainty of at most 1%. + // For more information see http://spiff.rit.edu/classes/phys273/uncert/uncert.html. + options.minTime || (options.minTime = max(timer.res / 2 / 0.01, 0.05)); + return clock.apply(null, arguments); + } + + /*------------------------------------------------------------------------*/ + + /** + * Computes stats on benchmark results. + * + * @private + * @param {Object} bench The benchmark instance. + * @param {Object} options The options object. + */ + function compute(bench, options) { + options || (options = {}); + + var async = options.async, + elapsed = 0, + initCount = bench.initCount, + minSamples = bench.minSamples, + queue = [], + sample = bench.stats.sample; + + /** + * Adds a clone to the queue. + */ + function enqueue() { + queue.push(bench.clone({ + '_original': bench, + 'events': { + 'abort': [update], + 'cycle': [update], + 'error': [update], + 'start': [update] + } + })); + } + + /** + * Updates the clone/original benchmarks to keep their data in sync. + */ + function update(event) { + var clone = this, + type = event.type; + + if (bench.running) { + if (type == 'start') { + // Note: `clone.minTime` prop is inited in `clock()`. + clone.count = bench.initCount; + } + else { + if (type == 'error') { + bench.error = clone.error; + } + if (type == 'abort') { + bench.abort(); + bench.emit('cycle'); + } else { + event.currentTarget = event.target = bench; + bench.emit(event); + } + } + } else if (bench.aborted) { + // Clear abort listeners to avoid triggering bench's abort/cycle again. + clone.events.abort.length = 0; + clone.abort(); + } + } + + /** + * Determines if more clones should be queued or if cycling should stop. + */ + function evaluate(event) { + var critical, + df, + mean, + moe, + rme, + sd, + sem, + variance, + clone = event.target, + done = bench.aborted, + now = _.now(), + size = sample.push(clone.times.period), + maxedOut = size >= minSamples && (elapsed += now - clone.times.timeStamp) / 1e3 > bench.maxTime, + times = bench.times, + varOf = function(sum, x) { return sum + pow(x - mean, 2); }; + + // Exit early for aborted or unclockable tests. + if (done || clone.hz == Infinity) { + maxedOut = !(size = sample.length = queue.length = 0); + } + + if (!done) { + // Compute the sample mean (estimate of the population mean). + mean = getMean(sample); + // Compute the sample variance (estimate of the population variance). + variance = _.reduce(sample, varOf, 0) / (size - 1) || 0; + // Compute the sample standard deviation (estimate of the population standard deviation). + sd = sqrt(variance); + // Compute the standard error of the mean (a.k.a. the standard deviation of the sampling distribution of the sample mean). + sem = sd / sqrt(size); + // Compute the degrees of freedom. + df = size - 1; + // Compute the critical value. + critical = tTable[Math.round(df) || 1] || tTable.infinity; + // Compute the margin of error. + moe = sem * critical; + // Compute the relative margin of error. + rme = (moe / mean) * 100 || 0; + + _.assign(bench.stats, { + 'deviation': sd, + 'mean': mean, + 'moe': moe, + 'rme': rme, + 'sem': sem, + 'variance': variance + }); + + // Abort the cycle loop when the minimum sample size has been collected + // and the elapsed time exceeds the maximum time allowed per benchmark. + // We don't count cycle delays toward the max time because delays may be + // increased by browsers that clamp timeouts for inactive tabs. For more + // information see https://developer.mozilla.org/en/window.setTimeout#Inactive_tabs. + if (maxedOut) { + // Reset the `initCount` in case the benchmark is rerun. + bench.initCount = initCount; + bench.running = false; + done = true; + times.elapsed = (now - times.timeStamp) / 1e3; + } + if (bench.hz != Infinity) { + bench.hz = 1 / mean; + times.cycle = mean * bench.count; + times.period = mean; + } + } + // If time permits, increase sample size to reduce the margin of error. + if (queue.length < 2 && !maxedOut) { + enqueue(); + } + // Abort the `invoke` cycle when done. + event.aborted = done; + } + + // Init queue and begin. + enqueue(); + invoke(queue, { + 'name': 'run', + 'args': { 'async': async }, + 'queued': true, + 'onCycle': evaluate, + 'onComplete': function() { bench.emit('complete'); } + }); + } + + /*------------------------------------------------------------------------*/ + + /** + * Cycles a benchmark until a run `count` can be established. + * + * @private + * @param {Object} clone The cloned benchmark instance. + * @param {Object} options The options object. + */ + function cycle(clone, options) { + options || (options = {}); + + var deferred; + if (clone instanceof Deferred) { + deferred = clone; + clone = clone.benchmark; + } + var clocked, + cycles, + divisor, + event, + minTime, + period, + async = options.async, + bench = clone._original, + count = clone.count, + times = clone.times; + + // Continue, if not aborted between cycles. + if (clone.running) { + // `minTime` is set to `Benchmark.options.minTime` in `clock()`. + cycles = ++clone.cycles; + clocked = deferred ? deferred.elapsed : clock(clone); + minTime = clone.minTime; + + if (cycles > bench.cycles) { + bench.cycles = cycles; + } + if (clone.error) { + event = Event('error'); + event.message = clone.error; + clone.emit(event); + if (!event.cancelled) { + clone.abort(); + } + } + } + // Continue, if not errored. + if (clone.running) { + // Compute the time taken to complete last test cycle. + bench.times.cycle = times.cycle = clocked; + // Compute the seconds per operation. + period = bench.times.period = times.period = clocked / count; + // Compute the ops per second. + bench.hz = clone.hz = 1 / period; + // Avoid working our way up to this next time. + bench.initCount = clone.initCount = count; + // Do we need to do another cycle? + clone.running = clocked < minTime; + + if (clone.running) { + // Tests may clock at `0` when `initCount` is a small number, + // to avoid that we set its count to something a bit higher. + if (!clocked && (divisor = divisors[clone.cycles]) != null) { + count = floor(4e6 / divisor); + } + // Calculate how many more iterations it will take to achieve the `minTime`. + if (count <= clone.count) { + count += Math.ceil((minTime - clocked) / period); + } + clone.running = count != Infinity; + } + } + // Should we exit early? + event = Event('cycle'); + clone.emit(event); + if (event.aborted) { + clone.abort(); + } + // Figure out what to do next. + if (clone.running) { + // Start a new cycle. + clone.count = count; + if (deferred) { + clone.compiled.call(deferred, context, timer); + } else if (async) { + delay(clone, function() { cycle(clone, options); }); + } else { + cycle(clone); + } + } + else { + // Fix TraceMonkey bug associated with clock fallbacks. + // For more information see http://bugzil.la/509069. + if (support.browser) { + runScript(uid + '=1;delete ' + uid); + } + // We're done. + clone.emit('complete'); + } + } + + /*------------------------------------------------------------------------*/ + + /** + * Runs the benchmark. + * + * @memberOf Benchmark + * @param {Object} [options={}] Options object. + * @returns {Object} The benchmark instance. + * @example + * + * // basic usage + * bench.run(); + * + * // or with options + * bench.run({ 'async': true }); + */ + function run(options) { + var bench = this, + event = Event('start'); + + // Set `running` to `false` so `reset()` won't call `abort()`. + bench.running = false; + bench.reset(); + bench.running = true; + + bench.count = bench.initCount; + bench.times.timeStamp = _.now(); + bench.emit(event); + + if (!event.cancelled) { + options = { 'async': ((options = options && options.async) == null ? bench.async : options) && support.timeout }; + + // For clones created within `compute()`. + if (bench._original) { + if (bench.defer) { + Deferred(bench); + } else { + cycle(bench, options); + } + } + // For original benchmarks. + else { + compute(bench, options); + } + } + return bench; + } + + /*------------------------------------------------------------------------*/ + + // Firefox 1 erroneously defines variable and argument names of functions on + // the function itself as non-configurable properties with `undefined` values. + // The bugginess continues as the `Benchmark` constructor has an argument + // named `options` and Firefox 1 will not assign a value to `Benchmark.options`, + // making it non-writable in the process, unless it is the first property + // assigned by for-in loop of `_.assign()`. + _.assign(Benchmark, { + + /** + * The default options copied by benchmark instances. + * + * @static + * @memberOf Benchmark + * @type Object + */ + 'options': { + + /** + * A flag to indicate that benchmark cycles will execute asynchronously + * by default. + * + * @memberOf Benchmark.options + * @type boolean + */ + 'async': false, + + /** + * A flag to indicate that the benchmark clock is deferred. + * + * @memberOf Benchmark.options + * @type boolean + */ + 'defer': false, + + /** + * The delay between test cycles (secs). + * @memberOf Benchmark.options + * @type number + */ + 'delay': 0.005, + + /** + * Displayed by `Benchmark#toString` when a `name` is not available + * (auto-generated if absent). + * + * @memberOf Benchmark.options + * @type string + */ + 'id': undefined, + + /** + * The default number of times to execute a test on a benchmark's first cycle. + * + * @memberOf Benchmark.options + * @type number + */ + 'initCount': 1, + + /** + * The maximum time a benchmark is allowed to run before finishing (secs). + * + * Note: Cycle delays aren't counted toward the maximum time. + * + * @memberOf Benchmark.options + * @type number + */ + 'maxTime': 5, + + /** + * The minimum sample size required to perform statistical analysis. + * + * @memberOf Benchmark.options + * @type number + */ + 'minSamples': 5, + + /** + * The time needed to reduce the percent uncertainty of measurement to 1% (secs). + * + * @memberOf Benchmark.options + * @type number + */ + 'minTime': 0, + + /** + * The name of the benchmark. + * + * @memberOf Benchmark.options + * @type string + */ + 'name': undefined, + + /** + * An event listener called when the benchmark is aborted. + * + * @memberOf Benchmark.options + * @type Function + */ + 'onAbort': undefined, + + /** + * An event listener called when the benchmark completes running. + * + * @memberOf Benchmark.options + * @type Function + */ + 'onComplete': undefined, + + /** + * An event listener called after each run cycle. + * + * @memberOf Benchmark.options + * @type Function + */ + 'onCycle': undefined, + + /** + * An event listener called when a test errors. + * + * @memberOf Benchmark.options + * @type Function + */ + 'onError': undefined, + + /** + * An event listener called when the benchmark is reset. + * + * @memberOf Benchmark.options + * @type Function + */ + 'onReset': undefined, + + /** + * An event listener called when the benchmark starts running. + * + * @memberOf Benchmark.options + * @type Function + */ + 'onStart': undefined + }, + + /** + * Platform object with properties describing things like browser name, + * version, and operating system. See [`platform.js`](https://mths.be/platform). + * + * @static + * @memberOf Benchmark + * @type Object + */ + 'platform': context.platform || require('platform') || ({ + 'description': context.navigator && context.navigator.userAgent || null, + 'layout': null, + 'product': null, + 'name': null, + 'manufacturer': null, + 'os': null, + 'prerelease': null, + 'version': null, + 'toString': function() { + return this.description || ''; + } + }), + + /** + * The semantic version number. + * + * @static + * @memberOf Benchmark + * @type string + */ + 'version': '2.1.2' + }); + + _.assign(Benchmark, { + 'filter': filter, + 'formatNumber': formatNumber, + 'invoke': invoke, + 'join': join, + 'runInContext': runInContext, + 'support': support + }); + + // Add lodash methods to Benchmark. + _.each(['each', 'forEach', 'forOwn', 'has', 'indexOf', 'map', 'reduce'], function(methodName) { + Benchmark[methodName] = _[methodName]; + }); + + /*------------------------------------------------------------------------*/ + + _.assign(Benchmark.prototype, { + + /** + * The number of times a test was executed. + * + * @memberOf Benchmark + * @type number + */ + 'count': 0, + + /** + * The number of cycles performed while benchmarking. + * + * @memberOf Benchmark + * @type number + */ + 'cycles': 0, + + /** + * The number of executions per second. + * + * @memberOf Benchmark + * @type number + */ + 'hz': 0, + + /** + * The compiled test function. + * + * @memberOf Benchmark + * @type {Function|string} + */ + 'compiled': undefined, + + /** + * The error object if the test failed. + * + * @memberOf Benchmark + * @type Object + */ + 'error': undefined, + + /** + * The test to benchmark. + * + * @memberOf Benchmark + * @type {Function|string} + */ + 'fn': undefined, + + /** + * A flag to indicate if the benchmark is aborted. + * + * @memberOf Benchmark + * @type boolean + */ + 'aborted': false, + + /** + * A flag to indicate if the benchmark is running. + * + * @memberOf Benchmark + * @type boolean + */ + 'running': false, + + /** + * Compiled into the test and executed immediately **before** the test loop. + * + * @memberOf Benchmark + * @type {Function|string} + * @example + * + * // basic usage + * var bench = Benchmark({ + * 'setup': function() { + * var c = this.count, + * element = document.getElementById('container'); + * while (c--) { + * element.appendChild(document.createElement('div')); + * } + * }, + * 'fn': function() { + * element.removeChild(element.lastChild); + * } + * }); + * + * // compiles to something like: + * var c = this.count, + * element = document.getElementById('container'); + * while (c--) { + * element.appendChild(document.createElement('div')); + * } + * var start = new Date; + * while (count--) { + * element.removeChild(element.lastChild); + * } + * var end = new Date - start; + * + * // or using strings + * var bench = Benchmark({ + * 'setup': '\ + * var a = 0;\n\ + * (function() {\n\ + * (function() {\n\ + * (function() {', + * 'fn': 'a += 1;', + * 'teardown': '\ + * }())\n\ + * }())\n\ + * }())' + * }); + * + * // compiles to something like: + * var a = 0; + * (function() { + * (function() { + * (function() { + * var start = new Date; + * while (count--) { + * a += 1; + * } + * var end = new Date - start; + * }()) + * }()) + * }()) + */ + 'setup': _.noop, + + /** + * Compiled into the test and executed immediately **after** the test loop. + * + * @memberOf Benchmark + * @type {Function|string} + */ + 'teardown': _.noop, + + /** + * An object of stats including mean, margin or error, and standard deviation. + * + * @memberOf Benchmark + * @type Object + */ + 'stats': { + + /** + * The margin of error. + * + * @memberOf Benchmark#stats + * @type number + */ + 'moe': 0, + + /** + * The relative margin of error (expressed as a percentage of the mean). + * + * @memberOf Benchmark#stats + * @type number + */ + 'rme': 0, + + /** + * The standard error of the mean. + * + * @memberOf Benchmark#stats + * @type number + */ + 'sem': 0, + + /** + * The sample standard deviation. + * + * @memberOf Benchmark#stats + * @type number + */ + 'deviation': 0, + + /** + * The sample arithmetic mean (secs). + * + * @memberOf Benchmark#stats + * @type number + */ + 'mean': 0, + + /** + * The array of sampled periods. + * + * @memberOf Benchmark#stats + * @type Array + */ + 'sample': [], + + /** + * The sample variance. + * + * @memberOf Benchmark#stats + * @type number + */ + 'variance': 0 + }, + + /** + * An object of timing data including cycle, elapsed, period, start, and stop. + * + * @memberOf Benchmark + * @type Object + */ + 'times': { + + /** + * The time taken to complete the last cycle (secs). + * + * @memberOf Benchmark#times + * @type number + */ + 'cycle': 0, + + /** + * The time taken to complete the benchmark (secs). + * + * @memberOf Benchmark#times + * @type number + */ + 'elapsed': 0, + + /** + * The time taken to execute the test once (secs). + * + * @memberOf Benchmark#times + * @type number + */ + 'period': 0, + + /** + * A timestamp of when the benchmark started (ms). + * + * @memberOf Benchmark#times + * @type number + */ + 'timeStamp': 0 + } + }); + + _.assign(Benchmark.prototype, { + 'abort': abort, + 'clone': clone, + 'compare': compare, + 'emit': emit, + 'listeners': listeners, + 'off': off, + 'on': on, + 'reset': reset, + 'run': run, + 'toString': toStringBench + }); + + /*------------------------------------------------------------------------*/ + + _.assign(Deferred.prototype, { + + /** + * The deferred benchmark instance. + * + * @memberOf Benchmark.Deferred + * @type Object + */ + 'benchmark': null, + + /** + * The number of deferred cycles performed while benchmarking. + * + * @memberOf Benchmark.Deferred + * @type number + */ + 'cycles': 0, + + /** + * The time taken to complete the deferred benchmark (secs). + * + * @memberOf Benchmark.Deferred + * @type number + */ + 'elapsed': 0, + + /** + * A timestamp of when the deferred benchmark started (ms). + * + * @memberOf Benchmark.Deferred + * @type number + */ + 'timeStamp': 0 + }); + + _.assign(Deferred.prototype, { + 'resolve': resolve + }); + + /*------------------------------------------------------------------------*/ + + _.assign(Event.prototype, { + + /** + * A flag to indicate if the emitters listener iteration is aborted. + * + * @memberOf Benchmark.Event + * @type boolean + */ + 'aborted': false, + + /** + * A flag to indicate if the default action is cancelled. + * + * @memberOf Benchmark.Event + * @type boolean + */ + 'cancelled': false, + + /** + * The object whose listeners are currently being processed. + * + * @memberOf Benchmark.Event + * @type Object + */ + 'currentTarget': undefined, + + /** + * The return value of the last executed listener. + * + * @memberOf Benchmark.Event + * @type Mixed + */ + 'result': undefined, + + /** + * The object to which the event was originally emitted. + * + * @memberOf Benchmark.Event + * @type Object + */ + 'target': undefined, + + /** + * A timestamp of when the event was created (ms). + * + * @memberOf Benchmark.Event + * @type number + */ + 'timeStamp': 0, + + /** + * The event type. + * + * @memberOf Benchmark.Event + * @type string + */ + 'type': '' + }); + + /*------------------------------------------------------------------------*/ + + /** + * The default options copied by suite instances. + * + * @static + * @memberOf Benchmark.Suite + * @type Object + */ + Suite.options = { + + /** + * The name of the suite. + * + * @memberOf Benchmark.Suite.options + * @type string + */ + 'name': undefined + }; + + /*------------------------------------------------------------------------*/ + + _.assign(Suite.prototype, { + + /** + * The number of benchmarks in the suite. + * + * @memberOf Benchmark.Suite + * @type number + */ + 'length': 0, + + /** + * A flag to indicate if the suite is aborted. + * + * @memberOf Benchmark.Suite + * @type boolean + */ + 'aborted': false, + + /** + * A flag to indicate if the suite is running. + * + * @memberOf Benchmark.Suite + * @type boolean + */ + 'running': false + }); + + _.assign(Suite.prototype, { + 'abort': abortSuite, + 'add': add, + 'clone': cloneSuite, + 'emit': emit, + 'filter': filterSuite, + 'join': arrayRef.join, + 'listeners': listeners, + 'off': off, + 'on': on, + 'pop': arrayRef.pop, + 'push': push, + 'reset': resetSuite, + 'run': runSuite, + 'reverse': arrayRef.reverse, + 'shift': shift, + 'slice': slice, + 'sort': arrayRef.sort, + 'splice': arrayRef.splice, + 'unshift': unshift + }); + + /*------------------------------------------------------------------------*/ + + // Expose Deferred, Event, and Suite. + _.assign(Benchmark, { + 'Deferred': Deferred, + 'Event': Event, + 'Suite': Suite + }); + + /*------------------------------------------------------------------------*/ + + // Add lodash methods as Suite methods. + _.each(['each', 'forEach', 'indexOf', 'map', 'reduce'], function(methodName) { + var func = _[methodName]; + Suite.prototype[methodName] = function() { + var args = [this]; + push.apply(args, arguments); + return func.apply(_, args); + }; + }); + + // Avoid array-like object bugs with `Array#shift` and `Array#splice` + // in Firefox < 10 and IE < 9. + _.each(['pop', 'shift', 'splice'], function(methodName) { + var func = arrayRef[methodName]; + + Suite.prototype[methodName] = function() { + var value = this, + result = func.apply(value, arguments); + + if (value.length === 0) { + delete value[0]; + } + return result; + }; + }); + + // Avoid buggy `Array#unshift` in IE < 8 which doesn't return the new + // length of the array. + Suite.prototype.unshift = function() { + var value = this; + unshift.apply(value, arguments); + return value.length; + }; + + return Benchmark; + } + + /*--------------------------------------------------------------------------*/ + + var Benchmark = runInContext(); + + window.Benchmark = Benchmark; + + return Benchmark; + +}.call(this)); diff --git a/tgui/packages/tgui-bench/package.json b/tgui/packages/tgui-bench/package.json new file mode 100644 index 0000000000000..47cad082fb9b5 --- /dev/null +++ b/tgui/packages/tgui-bench/package.json @@ -0,0 +1,14 @@ +{ + "private": true, + "name": "tgui-bench", + "version": "5.0.0", + "dependencies": { + "@fastify/static": "^6.12.0", + "common": "workspace:*", + "fastify": "^3.29.5", + "lodash": "^4.17.21", + "platform": "^1.3.6", + "react": "^18.2.0", + "tgui": "workspace:*" + } +} diff --git a/tgui/packages/tgui-dev-server/dreamseeker.js b/tgui/packages/tgui-dev-server/dreamseeker.js new file mode 100644 index 0000000000000..d1ca2a9ac5395 --- /dev/null +++ b/tgui/packages/tgui-dev-server/dreamseeker.js @@ -0,0 +1,102 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { exec } from 'child_process'; +import { promisify } from 'util'; + +import { createLogger } from './logging.js'; +import { require } from './require.js'; + +const axios = require('axios'); +const logger = createLogger('dreamseeker'); + +const instanceByPid = new Map(); + +export class DreamSeeker { + constructor(pid, addr) { + this.pid = pid; + this.addr = addr; + this.client = axios.create({ + baseURL: `http://${addr}/`, + }); + } + + topic(params = {}) { + // prettier-ignore + const query = Object.keys(params) + .map(key => encodeURIComponent(key) + + '=' + encodeURIComponent(params[key])) + .join('&'); + logger.log( + `topic call at ${this.client.defaults.baseURL + '/dummy?' + query}`, + ); + return this.client.get('/dummy?' + query); + } +} + +/** + * @param {number[]} pids + * @returns {DreamSeeker[]} + */ +DreamSeeker.getInstancesByPids = async (pids) => { + if (process.platform !== 'win32') { + return []; + } + const instances = []; + const pidsToResolve = []; + for (let pid of pids) { + const instance = instanceByPid.get(pid); + if (instance) { + instances.push(instance); + } else { + pidsToResolve.push(pid); + } + } + if (pidsToResolve.length > 0) { + try { + const command = 'netstat -ano | findstr TCP | findstr 0.0.0.0:0'; + const { stdout } = await promisify(exec)(command, { + // Max buffer of 1MB (default is 200KB) + maxBuffer: 1024 * 1024, + }); + // Line format: + // proto addr mask mode pid + const entries = []; + const lines = stdout.split('\r\n'); + for (let line of lines) { + const words = line.match(/\S+/g); + if (!words || words.length === 0) { + continue; + } + const entry = { + addr: words[1], + pid: parseInt(words[4], 10), + }; + if (pidsToResolve.includes(entry.pid)) { + entries.push(entry); + } + } + const len = entries.length; + logger.log('found', len, plural('instance', len)); + for (let entry of entries) { + const { pid, addr } = entry; + const instance = new DreamSeeker(pid, addr); + instances.push(instance); + instanceByPid.set(pid, instance); + } + } catch (err) { + if (err.code === 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER') { + logger.error(err.message, err.code); + } else { + logger.error(err); + } + return []; + } + } + return instances; +}; + +const plural = (word, n) => (n !== 1 ? word + 's' : word); diff --git a/tgui/packages/tgui-dev-server/index.js b/tgui/packages/tgui-dev-server/index.js new file mode 100644 index 0000000000000..85489ebb0499f --- /dev/null +++ b/tgui/packages/tgui-dev-server/index.js @@ -0,0 +1,30 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { reloadByondCache } from './reloader.js'; +import { createCompiler } from './webpack.js'; + +const noHot = process.argv.includes('--no-hot'); +const noTmp = process.argv.includes('--no-tmp'); +const reloadOnce = process.argv.includes('--reload'); + +const setupServer = async () => { + const compiler = await createCompiler({ + mode: 'development', + hot: !noHot, + devServer: true, + useTmpFolder: !noTmp, + }); + // Reload cache once + if (reloadOnce) { + await reloadByondCache(compiler.bundleDir); + return; + } + // Run a development server + await compiler.watch(); +}; + +setupServer(); diff --git a/tgui/packages/tgui-dev-server/link/client.cjs b/tgui/packages/tgui-dev-server/link/client.cjs new file mode 100644 index 0000000000000..b0e6f7bc9d445 --- /dev/null +++ b/tgui/packages/tgui-dev-server/link/client.cjs @@ -0,0 +1,177 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +let socket; +const queue = []; +const subscribers = []; + +const ensureConnection = () => { + if (process.env.NODE_ENV !== 'production') { + if (!window.WebSocket) { + return; + } + if (!socket || socket.readyState === WebSocket.CLOSED) { + const DEV_SERVER_IP = process.env.DEV_SERVER_IP || '127.0.0.1'; + socket = new WebSocket(`ws://${DEV_SERVER_IP}:3000`); + socket.onopen = () => { + // Empty the message queue + while (queue.length !== 0) { + const msg = queue.shift(); + socket.send(msg); + } + }; + socket.onmessage = (event) => { + const msg = JSON.parse(event.data); + for (let subscriber of subscribers) { + subscriber(msg); + } + }; + } + } + + window.onunload = () => socket && socket.close(); +}; + +const subscribe = (fn) => subscribers.push(fn); + +/** + * A json serializer which handles circular references and other junk. + */ +const serializeObject = (obj) => { + let refs = []; + const primitiveReviver = (value) => { + if (typeof value === 'number' && !Number.isFinite(value)) { + return { + __number__: String(value), + }; + } + if (typeof value === 'undefined') { + return { + __undefined__: true, + }; + } + return value; + }; + const objectReviver = (key, value) => { + if (typeof value === 'object') { + if (value === null) { + return value; + } + // Circular reference + if (refs.includes(value)) { + return '[circular ref]'; + } + refs.push(value); + // Error object + // prettier-ignore + const isError = value instanceof Error || ( + value.code && value.message && value.message.includes('Error') + ); + if (isError) { + return { + __error__: true, + string: String(value), + stack: value.stack, + }; + } + // Array + if (Array.isArray(value)) { + return value.map(primitiveReviver); + } + return value; + } + return primitiveReviver(value); + }; + const json = JSON.stringify(obj, objectReviver); + refs = null; + return json; +}; + +const sendMessage = (msg) => { + if (process.env.NODE_ENV !== 'production') { + const json = serializeObject(msg); + // Send message using WebSocket + if (window.WebSocket) { + ensureConnection(); + if (socket.readyState === WebSocket.OPEN) { + socket.send(json); + } else { + // Keep only 100 latest messages in the queue + if (queue.length > 100) { + queue.shift(); + } + queue.push(json); + } + } + // Send message using plain HTTP request. + else { + const DEV_SERVER_IP = process.env.DEV_SERVER_IP || '127.0.0.1'; + const req = new XMLHttpRequest(); + req.open('POST', `http://${DEV_SERVER_IP}:3001`, true); + req.timeout = 250; + req.send(json); + } + } +}; + +const sendLogEntry = (level, ns, ...args) => { + if (process.env.NODE_ENV !== 'production') { + try { + sendMessage({ + type: 'log', + payload: { + level, + ns: ns || 'client', + args, + }, + }); + } catch (err) {} + } +}; + +const setupHotReloading = () => { + if ( + process.env.NODE_ENV === 'production' || + !process.env.WEBPACK_HMR_ENABLED || + !window.WebSocket + ) { + return; + } + if (module.hot) { + ensureConnection(); + sendLogEntry(0, null, 'setting up hot reloading'); + subscribe((msg) => { + const { type } = msg; + sendLogEntry(0, null, 'received', type); + if (type === 'hotUpdate') { + const status = module.hot.status(); + if (status !== 'idle') { + sendLogEntry(0, null, 'hot reload status:', status); + return; + } + module.hot + .check({ + ignoreUnaccepted: true, + ignoreDeclined: true, + ignoreErrored: true, + }) + .then((modules) => { + sendLogEntry(0, null, 'outdated modules', modules); + }) + .catch((err) => { + sendLogEntry(0, null, 'reload error', err); + }); + } + }); + } +}; + +module.exports = { + subscribe, + sendMessage, + sendLogEntry, + setupHotReloading, +}; diff --git a/tgui/packages/tgui-dev-server/link/retrace.js b/tgui/packages/tgui-dev-server/link/retrace.js new file mode 100644 index 0000000000000..083ddb37d1c14 --- /dev/null +++ b/tgui/packages/tgui-dev-server/link/retrace.js @@ -0,0 +1,89 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import fs from 'fs'; +import { basename } from 'path'; + +import { createLogger } from '../logging.js'; +import { require } from '../require.js'; +import { resolveGlob } from '../util.js'; + +const SourceMap = require('source-map'); +const { parse: parseStackTrace } = require('stacktrace-parser'); + +const logger = createLogger('retrace'); + +const { SourceMapConsumer } = SourceMap; +const sourceMaps = []; + +export const loadSourceMaps = async (bundleDir) => { + // Destroy and garbage collect consumers + while (sourceMaps.length !== 0) { + const { consumer } = sourceMaps.shift(); + consumer.destroy(); + } + // Load new sourcemaps + const paths = await resolveGlob(bundleDir, '*.map'); + for (let path of paths) { + try { + const file = basename(path).replace('.map', ''); + const consumer = await new SourceMapConsumer( + JSON.parse(fs.readFileSync(path, 'utf8')), + ); + sourceMaps.push({ file, consumer }); + } catch (err) { + logger.error(err); + } + } + logger.log(`loaded ${sourceMaps.length} source maps`); +}; + +export const retrace = (stack) => { + if (typeof stack !== 'string') { + logger.log('ERROR: Stack is not a string!', stack); + return stack; + } + const header = stack.split(/\n\s.*at/)[0]; + const mappedStack = parseStackTrace(stack) + .map((frame) => { + if (!frame.file) { + return frame; + } + // Find the correct source map + const sourceMap = sourceMaps.find((sourceMap) => { + return frame.file.includes(sourceMap.file); + }); + if (!sourceMap) { + return frame; + } + // Map the frame + const { consumer } = sourceMap; + const mappedFrame = consumer.originalPositionFor({ + source: basename(frame.file), + line: frame.lineNumber, + column: frame.column, + }); + return { + ...frame, + file: mappedFrame.source, + lineNumber: mappedFrame.line, + column: mappedFrame.column, + }; + }) + .map((frame) => { + // Stringify the frame + const { file, methodName, lineNumber } = frame; + if (!file) { + return ` at ${methodName}`; + } + const compactPath = file + .replace(/^webpack:\/\/\/?/, './') + .replace(/.*node_modules\//, ''); + return ` at ${methodName} (${compactPath}:${lineNumber})`; + }) + .join('\n'); + return header + '\n' + mappedStack; +}; diff --git a/tgui/packages/tgui-dev-server/link/server.js b/tgui/packages/tgui-dev-server/link/server.js new file mode 100644 index 0000000000000..2a1f551bf6ebd --- /dev/null +++ b/tgui/packages/tgui-dev-server/link/server.js @@ -0,0 +1,145 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import http from 'http'; +import { inspect } from 'util'; + +import { createLogger, directLog } from '../logging.js'; +import { require } from '../require.js'; +import { loadSourceMaps, retrace } from './retrace.js'; + +const WebSocket = require('ws'); + +const logger = createLogger('link'); + +const DEBUG = process.argv.includes('--debug'); + +export { loadSourceMaps }; + +export const setupLink = () => new LinkServer(); + +class LinkServer { + constructor() { + logger.log('setting up'); + this.wss = null; + this.setupWebSocketLink(); + this.setupHttpLink(); + } + + // WebSocket-based client link + setupWebSocketLink() { + const port = 3000; + this.wss = new WebSocket.Server({ port }); + this.wss.on('connection', (ws) => { + logger.log('client connected'); + ws.on('message', (json) => { + const msg = deserializeObject(json); + this.handleLinkMessage(ws, msg); + }); + ws.on('close', () => { + logger.log('client disconnected'); + }); + }); + logger.log(`listening on port ${port} (WebSocket)`); + } + + // One way HTTP-based client link for IE8 + setupHttpLink() { + const port = 3001; + this.httpServer = http.createServer((req, res) => { + if (req.method === 'POST') { + let body = ''; + req.on('data', (chunk) => { + body += chunk.toString(); + }); + req.on('end', () => { + const msg = deserializeObject(body); + this.handleLinkMessage(null, msg); + res.end(); + }); + return; + } + res.write('Hello'); + res.end(); + }); + this.httpServer.listen(port); + logger.log(`listening on port ${port} (HTTP)`); + } + + handleLinkMessage(ws, msg) { + const { type, payload } = msg; + if (type === 'log') { + const { level, ns, args } = payload; + // Skip debug messages + if (level <= 0 && !DEBUG) { + return; + } + // prettier-ignore + directLog(ns, ...args.map(arg => { + if (typeof arg === 'object') { + return inspect(arg, { + depth: Infinity, + colors: true, + compact: 8, + }); + } + return arg; + })); + return; + } + if (type === 'relay') { + for (let client of this.wss.clients) { + if (client === ws) { + continue; + } + this.sendMessage(client, msg); + } + return; + } + logger.log('unhandled message', msg); + } + + sendMessage(ws, msg) { + ws.send(JSON.stringify(msg)); + } + + broadcastMessage(msg) { + const clients = [...this.wss.clients]; + if (clients.length === 0) { + return; + } + logger.log(`broadcasting ${msg.type} to ${clients.length} clients`); + for (let client of clients) { + const json = JSON.stringify(msg); + client.send(json); + } + } +} + +const deserializeObject = (str) => { + return JSON.parse(str, (key, value) => { + if (typeof value === 'object' && value !== null) { + if (value.__undefined__) { + // NOTE: You should not rely on deserialized object's undefined, + // this is purely for inspection purposes. + return { + [inspect.custom]: () => undefined, + }; + } + if (value.__number__) { + return parseFloat(value.__number__); + } + if (value.__error__) { + if (!value.stack) { + return value.string; + } + return retrace(value.stack); + } + return value; + } + return value; + }); +}; diff --git a/tgui/packages/tgui-dev-server/logging.js b/tgui/packages/tgui-dev-server/logging.js new file mode 100644 index 0000000000000..4ec09008ff50c --- /dev/null +++ b/tgui/packages/tgui-dev-server/logging.js @@ -0,0 +1,72 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +const inception = Date.now(); + +// Runtime detection +const isNode = process && process.release && process.release.name === 'node'; +let isChrome = false; +try { + isChrome = window.navigator.userAgent.toLowerCase().includes('chrome'); +} catch {} + +// Timestamping function +const getTimestamp = () => { + const timestamp = String(Date.now() - inception) + .padStart(4, '0') + .padStart(7, ' '); + const seconds = timestamp.substr(0, timestamp.length - 3); + const millis = timestamp.substr(-3); + return `${seconds}.${millis}`; +}; + +const getPrefix = (() => { + if (isNode) { + // Escape sequences + const ESC = { + dimmed: '\x1b[38;5;240m', + bright: '\x1b[37;1m', + reset: '\x1b[0m', + }; + return (ns) => [ + `${ESC.dimmed}${getTimestamp()} ${ESC.bright}${ns}${ESC.reset}`, + ]; + } + if (isChrome) { + // Styles + const styles = { + dimmed: 'color: #888', + bright: 'font-weight: bold', + }; + return (ns) => [ + `%c${getTimestamp()}%c ${ns}`, + styles.dimmed, + styles.bright, + ]; + } + // prettier-ignore + return ns => [ + `${getTimestamp()} ${ns}`, + ]; +})(); + +/** + * Creates a logger object. + */ +export const createLogger = (ns) => ({ + log: (...args) => console.log(...getPrefix(ns), ...args), + trace: (...args) => console.trace(...getPrefix(ns), ...args), + debug: (...args) => console.debug(...getPrefix(ns), ...args), + info: (...args) => console.info(...getPrefix(ns), ...args), + warn: (...args) => console.warn(...getPrefix(ns), ...args), + error: (...args) => console.error(...getPrefix(ns), ...args), +}); + +/** + * Explicitly log with chosen namespace. + */ +export const directLog = (ns, ...args) => + console.log(...getPrefix(ns), ...args); diff --git a/tgui/packages/tgui-dev-server/package.json b/tgui/packages/tgui-dev-server/package.json new file mode 100644 index 0000000000000..496e25c6c1847 --- /dev/null +++ b/tgui/packages/tgui-dev-server/package.json @@ -0,0 +1,13 @@ +{ + "private": true, + "name": "tgui-dev-server", + "version": "5.0.0", + "type": "module", + "dependencies": { + "axios": "^1.6.2", + "glob": "^7.2.0", + "source-map": "^0.7.4", + "stacktrace-parser": "^0.1.10", + "ws": "^8.14.2" + } +} diff --git a/tgui/packages/tgui-dev-server/reloader.js b/tgui/packages/tgui-dev-server/reloader.js new file mode 100644 index 0000000000000..cb477a6523b03 --- /dev/null +++ b/tgui/packages/tgui-dev-server/reloader.js @@ -0,0 +1,130 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import fs from 'fs'; +import os from 'os'; +import { basename } from 'path'; + +import { DreamSeeker } from './dreamseeker.js'; +import { createLogger } from './logging.js'; +import { resolveGlob, resolvePath } from './util.js'; +import { regQuery } from './winreg.js'; + +const logger = createLogger('reloader'); + +const HOME = os.homedir(); +const SEARCH_LOCATIONS = [ + // Custom location + process.env.BYOND_CACHE, + // Windows + `${HOME}/*/BYOND/cache`, + // Wine + `${HOME}/.wine/drive_c/users/*/*/BYOND/cache`, + // Lutris + `${HOME}/Games/byond/drive_c/users/*/*/BYOND/cache`, + // WSL + `/mnt/c/Users/*/*/BYOND/cache`, +]; + +let cacheRoot; + +export const findCacheRoot = async () => { + if (cacheRoot) { + return cacheRoot; + } + logger.log('looking for byond cache'); + // Find BYOND cache folders + for (let pattern of SEARCH_LOCATIONS) { + if (!pattern) { + continue; + } + const paths = await resolveGlob(pattern); + if (paths.length > 0) { + cacheRoot = paths[0]; + onCacheRootFound(cacheRoot); + return cacheRoot; + } + } + // Query the Windows Registry + if (process.platform === 'win32') { + logger.log('querying windows registry'); + let userpath = await regQuery('HKCU\\Software\\Dantom\\BYOND', 'userpath'); + if (userpath) { + // prettier-ignore + cacheRoot = userpath + .replace(/\\$/, '') + .replace(/\\/g, '/') + + '/cache'; + onCacheRootFound(cacheRoot); + return cacheRoot; + } + } + logger.log('found no cache directories'); +}; + +const onCacheRootFound = (cacheRoot) => { + logger.log(`found cache at '${cacheRoot}'`); + // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 514. + fs.closeSync(fs.openSync(cacheRoot + '/dummy', 'w')); +}; + +export const reloadByondCache = async (bundleDir) => { + const cacheRoot = await findCacheRoot(); + if (!cacheRoot) { + return; + } + // Find tmp folders in cache + const cacheDirs = await resolveGlob(cacheRoot, './tmp*'); + if (cacheDirs.length === 0) { + logger.log('found no tmp folder in cache'); + return; + } + // Get dreamseeker instances + const pids = cacheDirs.map((cacheDir) => + parseInt(cacheDir.split('/cache/tmp').pop(), 10), + ); + const dssPromise = DreamSeeker.getInstancesByPids(pids); + // Copy assets + const assets = await resolveGlob( + bundleDir, + './*.+(bundle|chunk|hot-update).*', + ); + for (let cacheDir of cacheDirs) { + // Clear garbage + const garbage = await resolveGlob( + cacheDir, + './*.+(bundle|chunk|hot-update).*', + ); + try { + // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 515. + fs.closeSync(fs.openSync(cacheDir + '/dummy', 'w')); + + for (let file of garbage) { + fs.unlinkSync(file); + } + // Copy assets + for (let asset of assets) { + const destination = resolvePath(cacheDir, basename(asset)); + fs.writeFileSync(destination, fs.readFileSync(asset)); + } + logger.log(`copied ${assets.length} files to '${cacheDir}'`); + } catch (err) { + logger.error(`failed copying to '${cacheDir}'`); + logger.error(err); + } + } + // Notify dreamseeker + const dss = await dssPromise; + if (dss.length > 0) { + logger.log(`notifying dreamseeker`); + for (let dreamseeker of dss) { + dreamseeker.topic({ + tgui: 1, + type: 'cacheReloaded', + }); + } + } +}; diff --git a/tgui/packages/tgui-dev-server/require.js b/tgui/packages/tgui-dev-server/require.js new file mode 100644 index 0000000000000..0551d630fc688 --- /dev/null +++ b/tgui/packages/tgui-dev-server/require.js @@ -0,0 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { createRequire } from 'module'; + +export const require = createRequire(import.meta.url); diff --git a/tgui/packages/tgui-dev-server/util.js b/tgui/packages/tgui-dev-server/util.js new file mode 100644 index 0000000000000..79190fe189a4a --- /dev/null +++ b/tgui/packages/tgui-dev-server/util.js @@ -0,0 +1,32 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import fs from 'fs'; +import path from 'path'; + +import { require } from './require.js'; + +const globPkg = require('glob'); + +export const resolvePath = path.resolve; + +/** + * Combines path.resolve with glob patterns. + */ +export const resolveGlob = (...sections) => { + const unsafePaths = globPkg.sync(path.resolve(...sections), { + strict: false, + silent: true, + }); + const safePaths = []; + for (let path of unsafePaths) { + try { + fs.statSync(path); + safePaths.push(path); + } catch {} + } + return safePaths; +}; diff --git a/tgui/packages/tgui-dev-server/webpack.js b/tgui/packages/tgui-dev-server/webpack.js new file mode 100644 index 0000000000000..e4fbdeb9f1e2b --- /dev/null +++ b/tgui/packages/tgui-dev-server/webpack.js @@ -0,0 +1,84 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import fs from 'fs'; +import { createRequire } from 'module'; +import { dirname } from 'path'; + +import { loadSourceMaps, setupLink } from './link/server.js'; +import { createLogger } from './logging.js'; +import { reloadByondCache } from './reloader.js'; +import { resolveGlob } from './util.js'; + +const logger = createLogger('webpack'); + +/** + * @param {any} config + * @return {WebpackCompiler} + */ +export const createCompiler = async (options) => { + const compiler = new WebpackCompiler(); + await compiler.setup(options); + return compiler; +}; + +class WebpackCompiler { + async setup(options) { + // Create a require context that is relative to project root + // and retrieve all necessary dependencies. + const requireFromRoot = createRequire(dirname(import.meta.url) + '/../..'); + const webpack = await requireFromRoot('webpack'); + const createConfig = await requireFromRoot('./webpack.config.js'); + const config = createConfig({}, options); + // Inject the HMR plugin into the config if we're using it + if (options.hot) { + config.plugins.push(new webpack.HotModuleReplacementPlugin()); + } + this.webpack = webpack; + this.config = config; + this.bundleDir = config.output.path; + } + + async watch() { + logger.log('setting up'); + // Setup link + const link = setupLink(); + // Instantiate the compiler + const compiler = this.webpack.webpack(this.config); + // Clear garbage before compiling + compiler.hooks.watchRun.tapPromise('tgui-dev-server', async () => { + const files = await resolveGlob(this.bundleDir, './*.hot-update.*'); + logger.log(`clearing garbage (${files.length} files)`); + for (let file of files) { + fs.unlinkSync(file); + } + logger.log('compiling'); + }); + // Start reloading when it's finished + compiler.hooks.done.tap('tgui-dev-server', async (stats) => { + // Load source maps + await loadSourceMaps(this.bundleDir); + // Reload cache + await reloadByondCache(this.bundleDir); + // Notify all clients that update has happened + link.broadcastMessage({ + type: 'hotUpdate', + }); + }); + // Start watching + logger.log('watching for changes'); + compiler.watch({}, (err, stats) => { + if (err) { + logger.error('compilation error', err); + return; + } + stats + .toString(this.config.devServer.stats) + .split('\n') + .forEach((line) => logger.log(line)); + }); + } +} diff --git a/tgui/packages/tgui-dev-server/winreg.js b/tgui/packages/tgui-dev-server/winreg.js new file mode 100644 index 0000000000000..43a4170190719 --- /dev/null +++ b/tgui/packages/tgui-dev-server/winreg.js @@ -0,0 +1,45 @@ +/** + * Tools for dealing with Windows Registry bullshit. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { exec } from 'child_process'; +import { promisify } from 'util'; + +import { createLogger } from './logging.js'; + +const logger = createLogger('winreg'); + +export const regQuery = async (path, key) => { + if (process.platform !== 'win32') { + return null; + } + try { + const command = `reg query "${path}" /v ${key}`; + const { stdout } = await promisify(exec)(command); + const keyPattern = ` ${key} `; + const indexOfKey = stdout.indexOf(keyPattern); + if (indexOfKey === -1) { + logger.error('could not find the registry key'); + return null; + } + const indexOfEol = stdout.indexOf('\r\n', indexOfKey); + if (indexOfEol === -1) { + logger.error('could not find the end of the line'); + return null; + } + const indexOfValue = stdout.indexOf(' ', indexOfKey + keyPattern.length); + if (indexOfValue === -1) { + logger.error('could not find the start of the key value'); + return null; + } + + return stdout.substring(indexOfValue + 4, indexOfEol); + } catch (err) { + logger.error(err); + return null; + } +}; diff --git a/tgui/packages/tgui-panel/Notifications.js b/tgui/packages/tgui-panel/Notifications.js new file mode 100644 index 0000000000000..2b92995287fad --- /dev/null +++ b/tgui/packages/tgui-panel/Notifications.js @@ -0,0 +1,28 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { Flex } from 'tgui/components'; + +export const Notifications = (props) => { + const { children } = props; + return
    {children}
    ; +}; + +const NotificationsItem = (props) => { + const { rightSlot, children } = props; + return ( + + + {children} + + {rightSlot && ( + {rightSlot} + )} + + ); +}; + +Notifications.Item = NotificationsItem; diff --git a/tgui/packages/tgui-panel/Panel.js b/tgui/packages/tgui-panel/Panel.js new file mode 100644 index 0000000000000..3da623f925593 --- /dev/null +++ b/tgui/packages/tgui-panel/Panel.js @@ -0,0 +1,129 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { Button, Section, Stack } from 'tgui/components'; +import { Pane } from 'tgui/layouts'; +import { NowPlayingWidget, useAudio } from './audio'; +import { ChatPanel, ChatTabs } from './chat'; +import { useGame } from './game'; +import { Notifications } from './Notifications'; +import { PingIndicator } from './ping'; +import { ReconnectButton } from './reconnect'; +import { SettingsPanel, useSettings } from './settings'; + +export const Panel = (props, context) => { + // IE8-10: Needs special treatment due to missing Flex support + if (Byond.IS_LTE_IE10) { + return ; + } + const audio = useAudio(context); + const settings = useSettings(context); + const game = useGame(context); + if (process.env.NODE_ENV !== 'production') { + const { useDebug, KitchenSink } = require('tgui/debug'); + const debug = useDebug(context); + if (debug.kitchenSink) { + return ; + } + } + return ( + + + +
    + + + + + + + + +
    +
    + {audio.visible && ( + +
    + +
    +
    + )} + {settings.visible && ( + + + + )} + +
    + + + + + {game.connectionLostAt && ( + }> + Вы либо AFK, либо имеете проблемы с соединением. + + )} + {game.roundRestartedAt && ( + + Соединение было разорвано так как сервер перезапускается. +
    + Пожалуйста, подождите пока вас переподключит автоматически. +
    + )} +
    +
    +
    +
    +
    + ); +}; + +const HoboPanel = (props, context) => { + const settings = useSettings(context); + return ( + + + + {(settings.visible && ) || ( + + )} + + + ); +}; diff --git a/tgui/packages/tgui-panel/audio/NowPlayingWidget.js b/tgui/packages/tgui-panel/audio/NowPlayingWidget.js new file mode 100644 index 0000000000000..6670fe0d55225 --- /dev/null +++ b/tgui/packages/tgui-panel/audio/NowPlayingWidget.js @@ -0,0 +1,72 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { toFixed } from 'common/math'; +import { useDispatch, useSelector } from 'common/redux'; +import { Button, Flex, Knob } from 'tgui/components'; +import { useSettings } from '../settings'; +import { selectAudio } from './selectors'; + +export const NowPlayingWidget = (props, context) => { + const audio = useSelector(context, selectAudio); + const dispatch = useDispatch(context); + const settings = useSettings(context); + const title = audio.meta?.title; + return ( + + {(audio.playing && ( + <> + + Now playing: + + + {title || 'Unknown Track'} + + + )) || ( + + Nothing to play. + + )} + {audio.playing && ( + + + )} + + ); + } +} diff --git a/tgui/packages/tgui-panel/chat/ChatTabs.js b/tgui/packages/tgui-panel/chat/ChatTabs.js new file mode 100644 index 0000000000000..02590dfd912aa --- /dev/null +++ b/tgui/packages/tgui-panel/chat/ChatTabs.js @@ -0,0 +1,71 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { useDispatch, useSelector } from 'common/redux'; +import { Box, Tabs, Flex, Button } from 'tgui/components'; +import { changeChatPage, addChatPage } from './actions'; +import { selectChatPages, selectCurrentChatPage } from './selectors'; +import { openChatSettings } from '../settings/actions'; + +const UnreadCountWidget = ({ value }) => ( + + {Math.min(value, 99)} + +); + +export const ChatTabs = (props, context) => { + const pages = useSelector(context, selectChatPages); + const currentPage = useSelector(context, selectCurrentChatPage); + const dispatch = useDispatch(context); + return ( + + + + {pages.map((page) => ( + 0 && ( + + ) + } + onClick={() => + dispatch( + changeChatPage({ + pageId: page.id, + }) + ) + } + > + {page.name} + + ))} + + + + + + Чат может немного пролагать. + + + + ); +}; + +const TextHighlightSetting = (props, context) => { + const { id, ...rest } = props; + const highlightSettingById = useSelector(context, selectHighlightSettingById); + const dispatch = useDispatch(context); + const { + highlightColor, + highlightText, + highlightWholeMessage, + matchWord, + matchCase, + } = highlightSettingById[id]; + return ( + + + +